From c57d9580edb59fd9bbe40b15fc85ade881eb2928 Mon Sep 17 00:00:00 2001
From: "PC-20200604TTHR\\Administrator" <349091389@qq.com>
Date: Thu, 28 Mar 2024 09:31:44 +0800
Subject: [PATCH] =?UTF-8?q?=E5=88=9D=E5=A7=8B=E5=8C=96=E9=A1=B9=E7=9B=AE?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
common/pom.xml | 55 +
.../main/java/com/mh/common/dto/RespDTO.java | 26 +
.../mh/common/exception/BaseErrorInfo.java | 9 +
.../com/mh/common/exception/CommonNum.java | 50 +
.../mh/common/exception/GlobalException.java | 52 +
.../exception/ServiceRuntimeException.java | 64 +
.../java/com/mh/common/http/HttpResult.java | 96 ++
.../java/com/mh/common/http/HttpStatus.java | 149 ++
.../java/com/mh/common/page/ColumnFilter.java | 32 +
.../com/mh/common/page/MybatisPageHelper.java | 63 +
.../java/com/mh/common/page/PageRequest.java | 46 +
.../java/com/mh/common/page/PageResult.java | 61 +
.../com/mh/common/service/CurdService.java | 50 +
.../com/mh/common/utils/DateTimeUtils.java | 32 +
.../java/com/mh/common/utils/FileUtils.java | 42 +
.../java/com/mh/common/utils/IOUtils.java | 26 +
.../java/com/mh/common/utils/PoiUtils.java | 41 +
.../com/mh/common/utils/ReflectionUtils.java | 78 +
.../java/com/mh/common/utils/StringUtils.java | 19 +
pom.xml | 74 +
user-service/HELP.md | 33 +
user-service/lib/.idea/lib.iml | 9 +
user-service/lib/.idea/misc.xml | 6 +
user-service/lib/.idea/modules.xml | 8 +
user-service/lib/.idea/vcs.xml | 6 +
user-service/lib/.idea/workspace.xml | 99 ++
user-service/lib/RXTXcomm.jar | Bin 0 -> 60984 bytes
user-service/pom.xml | 203 +++
.../com/mh/user/UserServiceApplication.java | 57 +
.../com/mh/user/annotation/SysLogger.java | 15 +
.../user/annotation/applicationListener.java | 23 +
.../java/com/mh/user/aspect/DaoAspect.java | 91 ++
.../java/com/mh/user/aspect/SysLogAspect.java | 127 ++
.../com/mh/user/component/ReceiveHandler.java | 71 +
.../java/com/mh/user/config/CorsConfig.java | 41 +
.../java/com/mh/user/config/DruidConfig.java | 117 ++
.../config/DruidDataSourceProperties.java | 172 +++
.../mh/user/config/DruidStatViewServlet.java | 17 +
.../com/mh/user/config/KaptchaConfig.java | 56 +
.../mh/user/config/PrimessionInterceptor.java | 68 +
.../java/com/mh/user/config/QuartzConfig.java | 54 +
.../com/mh/user/config/RabbitmqConfig.java | 87 ++
.../mh/user/config/RestTemplateConfig.java | 14 +
.../com/mh/user/config/SwaggerConfig.java | 49 +
.../com/mh/user/config/WebSecurityConfig.java | 83 ++
.../java/com/mh/user/constants/Constant.java | 18 +
.../com/mh/user/constants/SocketMessage.java | 33 +
.../com/mh/user/constants/SysConstants.java | 11 +
.../mh/user/controller/AreaController.java | 38 +
.../user/controller/BuildingController.java | 90 ++
.../mh/user/controller/ChartController.java | 56 +
.../user/controller/ChillersController.java | 140 ++
.../user/controller/DataResultController.java | 328 ++++
.../user/controller/DeviceInfoController.java | 57 +
.../controller/DeviceManageController.java | 299 ++++
.../mh/user/controller/EnergyController.java | 109 ++
.../user/controller/EnergyDataController.java | 41 +
.../user/controller/MeterInfoController.java | 30 +
.../controller/ProjectInfoController.java | 29 +
.../java/com/mh/user/controller/SendTest.java | 51 +
.../user/controller/SerialPortController.java | 195 +++
.../controller/StrategyInfoController.java | 28 +
.../mh/user/controller/SysDeptController.java | 46 +
.../mh/user/controller/SysLogController.java | 60 +
.../user/controller/SysLoginController.java | 98 ++
.../mh/user/controller/SysMenuController.java | 50 +
.../mh/user/controller/SysRoleController.java | 132 ++
.../mh/user/controller/SysUserController.java | 140 ++
.../user/controller/SystemInfoController.java | 29 +
.../mh/user/controller/TestController.java | 102 ++
.../com/mh/user/dto/DeviceMessageDTO.java | 33 +
.../com/mh/user/dto/DisplayBoxDataDTO.java | 35 +
.../java/com/mh/user/dto/TableInfoDTO.java | 21 +
.../user/dynamic/config/DataSourceConfig.java | 77 +
.../config/MyBatisMapperScannerConfig.java | 28 +
.../datasource/DataSourceContextHolder.java | 23 +
.../dynamic/datasource/DataSourceObject.java | 71 +
.../dynamic/datasource/DynamicDataSource.java | 44 +
.../com/mh/user/entity/AddCronJobReq.java | 34 +
.../com/mh/user/entity/AddSimpleJobReq.java | 27 +
.../com/mh/user/entity/AlarmInfoEntity.java | 21 +
.../mh/user/entity/AlarmInfoSumEntity.java | 20 +
.../mh/user/entity/AlarmValueSetEntity.java | 13 +
.../mh/user/entity/AnalysisMonthEntity.java | 46 +
.../mh/user/entity/AnalysisYearEntity.java | 27 +
.../java/com/mh/user/entity/AreaEntity.java | 32 +
.../java/com/mh/user/entity/BaseEntity.java | 41 +
.../com/mh/user/entity/BuildingEntity.java | 19 +
.../com/mh/user/entity/ChillersEntity.java | 58 +
.../com/mh/user/entity/ControlSetEntity.java | 17 +
.../java/com/mh/user/entity/DBEntity.java | 91 ++
.../mh/user/entity/DataResultChEntity.java | 24 +
.../mh/user/entity/DataResultClEntity.java | 23 +
.../com/mh/user/entity/DataResultEntity.java | 22 +
.../java/com/mh/user/entity/DeleteJobReq.java | 25 +
.../mh/user/entity/DeviceCodeParamEntity.java | 27 +
.../mh/user/entity/DeviceFloorTempEntity.java | 18 +
.../com/mh/user/entity/DeviceInfoEntity.java | 20 +
.../mh/user/entity/DeviceInstallEntity.java | 31 +
.../user/entity/DeviceInstallTempEntity.java | 113 ++
.../mh/user/entity/DeviceManageEntity.java | 66 +
.../mh/user/entity/DeviceParameterEntity.java | 35 +
.../com/mh/user/entity/DeviceStateEntity.java | 21 +
.../com/mh/user/entity/EnergyDataEntity.java | 18 +
.../java/com/mh/user/entity/EnergyEntity.java | 22 +
.../com/mh/user/entity/EnergySumEntity.java | 18 +
.../com/mh/user/entity/ExceptionEntity.java | 33 +
.../mh/user/entity/ExceptionTableData.java | 35 +
.../com/mh/user/entity/FirstTableEntity.java | 29 +
.../mh/user/entity/GatewayManageEntity.java | 33 +
.../java/com/mh/user/entity/GaugeEntity.java | 31 +
.../java/com/mh/user/entity/HostValue.java | 30 +
.../com/mh/user/entity/MaintainSumEntity.java | 22 +
.../com/mh/user/entity/MeterInfoEntity.java | 21 +
.../java/com/mh/user/entity/OrderEntity.java | 35 +
.../mh/user/entity/OrderMessageEntity.java | 46 +
.../com/mh/user/entity/ProjectInfoEntity.java | 18 +
.../mh/user/entity/RegisterAddrEntity.java | 15 +
.../com/mh/user/entity/ReportParamEntity.java | 35 +
.../mh/user/entity/StrategyInfoEntity.java | 14 +
.../com/mh/user/entity/SystemInfoEntity.java | 11 +
.../user/entity/TableChartMessageEntity.java | 27 +
.../com/mh/user/entity/TableDataEntity.java | 33 +
.../com/mh/user/entity/TableInfoEntity.java | 32 +
.../java/com/mh/user/entity/TestEntity.java | 48 +
.../user/entity/UploadDeviceFloorEntity.java | 31 +
.../entity/UploadDeviceInstallEntity.java | 109 ++
.../com/mh/user/entity/UseForecastEntity.java | 18 +
.../com/mh/user/entity/chart/AxisLine.java | 23 +
.../mh/user/entity/chart/BaseChartEntity.java | 45 +
.../com/mh/user/entity/chart/ChartEntity.java | 50 +
.../com/mh/user/entity/chart/Feature.java | 31 +
.../mh/user/entity/chart/GetChartParams.java | 35 +
.../java/com/mh/user/entity/chart/Legend.java | 27 +
.../com/mh/user/entity/chart/LineStyle.java | 21 +
.../java/com/mh/user/entity/chart/Series.java | 29 +
.../com/mh/user/entity/chart/SplitLine.java | 21 +
.../java/com/mh/user/entity/chart/Title.java | 25 +
.../java/com/mh/user/entity/chart/Unit.java | 37 +
.../java/com/mh/user/entity/chart/XAxis.java | 21 +
.../java/com/mh/user/entity/chart/YAxis.java | 31 +
.../com/mh/user/job/CollectionLoopRunner.java | 255 ++++
.../java/com/mh/user/job/DealDataJob.java | 153 ++
.../java/com/mh/user/job/JobChillers.java | 41 +
.../main/java/com/mh/user/job/JobCloud.java | 41 +
.../src/main/java/com/mh/user/job/JobDDC.java | 39 +
.../main/java/com/mh/user/job/JobFactory.java | 45 +
.../main/java/com/mh/user/job/JobMeter.java | 39 +
.../main/java/com/mh/user/job/JobTest.java | 32 +
.../com/mh/user/manage/QuartzManager.java | 259 ++++
.../com/mh/user/manage/SerialPortManager.java | 233 +++
.../com/mh/user/manage/SerialPortManages.java | 345 +++++
.../com/mh/user/mapper/AlarmInfoMapper.java | 117 ++
.../java/com/mh/user/mapper/AreaMapper.java | 18 +
.../com/mh/user/mapper/BuildingMapper.java | 93 ++
.../com/mh/user/mapper/ControlSetMapper.java | 46 +
.../com/mh/user/mapper/DataResultMapper.java | 264 ++++
.../mh/user/mapper/DeviceCodeParamMapper.java | 92 ++
.../com/mh/user/mapper/DeviceInfoMapper.java | 91 ++
.../mh/user/mapper/DeviceInstallMapper.java | 216 +++
.../com/mh/user/mapper/EnergyDataMapper.java | 81 +
.../java/com/mh/user/mapper/EnergyMapper.java | 228 +++
.../com/mh/user/mapper/MeterInfoMapper.java | 31 +
.../com/mh/user/mapper/ProjectInfoMapper.java | 30 +
.../mh/user/mapper/RegisterAddrMapper.java | 23 +
.../mh/user/mapper/StrategyInfoMapper.java | 24 +
.../com/mh/user/mapper/SysDeptMapper.java | 29 +
.../java/com/mh/user/mapper/SysLogMapper.java | 54 +
.../com/mh/user/mapper/SysMenuMapper.java | 36 +
.../com/mh/user/mapper/SysRoleDeptMapper.java | 23 +
.../com/mh/user/mapper/SysRoleMapper.java | 65 +
.../com/mh/user/mapper/SysRoleMenuMapper.java | 28 +
.../com/mh/user/mapper/SysUserMapper.java | 61 +
.../com/mh/user/mapper/SysUserRoleMapper.java | 30 +
.../com/mh/user/mapper/SystemInfoMapper.java | 18 +
.../com/mh/user/mapper/chart/ChartMapper.java | 73 +
.../chillers/ChillerControlOrderMapper.java | 100 ++
.../user/mapper/chillers/ChillersMapper.java | 184 +++
.../mapper/chillers/DataHistoryMapper.java | 25 +
.../user/mapper/chillers/DealDataMapper.java | 102 ++
.../mapper/chillers/DeviceDisplayMapper.java | 45 +
.../mapper/chillers/DeviceManageMapper.java | 171 +++
.../mapper/chillers/DeviceParamMapper.java | 93 ++
.../user/mapper/chillers/ExceptionMapper.java | 37 +
.../mapper/chillers/GatewayManageMapper.java | 97 ++
.../mh/user/mapper/chillers/GaugeMapper.java | 31 +
.../mh/user/mapper/chillers/ReportMapper.java | 40 +
.../mapper/provider/AlarmInfoProvider.java | 56 +
.../mapper/provider/BuildingProvider.java | 38 +
.../mapper/provider/DataResultProvider.java | 237 +++
.../mapper/provider/DeviceInfoProvider.java | 23 +
.../provider/DeviceInstallProvider.java | 85 ++
.../mapper/provider/EnergyDataProvider.java | 309 ++++
.../user/mapper/provider/EnergyProvider.java | 378 +++++
.../mapper/provider/MaintainInfoProvider.java | 52 +
.../mapper/provider/MeterInfoProvider.java | 20 +
.../mapper/provider/StrategyInfoProvider.java | 21 +
.../user/mapper/provider/SysLogProvider.java | 37 +
.../user/mapper/provider/SysRoleProvider.java | 33 +
.../user/mapper/provider/SysUserProvider.java | 38 +
.../mapper/provider/UseForecastProvider.java | 48 +
.../java/com/mh/user/model/BaseModel.java | 37 +
.../java/com/mh/user/model/BuildingModel.java | 10 +
.../java/com/mh/user/model/ChillerModel.java | 28 +
.../java/com/mh/user/model/DeviceModel.java | 10 +
.../com/mh/user/model/DeviceTypeModel.java | 9 +
.../java/com/mh/user/model/EnergyModel.java | 16 +
.../java/com/mh/user/model/EnergyParam.java | 17 +
.../com/mh/user/model/OrderParamModel.java | 17 +
.../java/com/mh/user/model/QueueParam.java | 13 +
.../com/mh/user/model/SerialPortModel.java | 13 +
.../main/java/com/mh/user/model/SysDept.java | 27 +
.../main/java/com/mh/user/model/SysDict.java | 24 +
.../main/java/com/mh/user/model/SysLog.java | 30 +
.../main/java/com/mh/user/model/SysMenu.java | 36 +
.../main/java/com/mh/user/model/SysRole.java | 16 +
.../java/com/mh/user/model/SysRoleDept.java | 14 +
.../java/com/mh/user/model/SysRoleMenu.java | 14 +
.../main/java/com/mh/user/model/SysUser.java | 41 +
.../java/com/mh/user/model/SysUserRole.java | 14 +
.../java/com/mh/user/netty/ClientManage.java | 169 +++
.../java/com/mh/user/netty/EchoServer.java | 52 +
.../com/mh/user/netty/EchoServerHandler.java | 575 +++++++
.../com/mh/user/netty/NettyChillerClient.java | 95 ++
.../user/netty/NettyChillerClientHandler.java | 315 ++++
.../user/netty/NettyChillerControlClient.java | 98 ++
.../netty/NettyChillerControlHandler.java | 315 ++++
.../mh/user/netty/NettyChillerDDCClient.java | 96 ++
.../netty/NettyChillerDDCClientHandler.java | 297 ++++
.../java/com/mh/user/netty/NettyClient.java | 90 ++
.../com/mh/user/netty/NettyClientHandler.java | 190 +++
.../com/mh/user/netty/NettyEchoServer.java | 180 +++
.../com/mh/user/netty/NettyMeterClient.java | 95 ++
.../user/netty/NettyMeterClientHandler.java | 261 ++++
.../user/netty/ServerChannelInitializer.java | 33 +
.../java/com/mh/user/primary/Clients.java | 70 +
.../com/mh/user/provide/ChillersProvider.java | 32 +
.../mh/user/provide/DeviceManageProvider.java | 70 +
.../mh/user/provide/DeviceParamProvider.java | 45 +
.../mh/user/provide/ExceptionProvider.java | 44 +
.../user/provide/GatewayManageProvider.java | 44 +
.../com/mh/user/provide/GaugeProvider.java | 26 +
.../user/security/GrantedAuthorityImpl.java | 29 +
.../user/security/JwtAuthenticatioToken.java | 45 +
.../security/JwtAuthenticationFilter.java | 35 +
.../security/JwtAuthenticationProvider.java | 39 +
.../com/mh/user/security/JwtUserDetails.java | 74 +
.../user/security/UserDetailsServiceImpl.java | 41 +
.../user/serialport/SerialPortListener.java | 161 ++
.../serialport/SerialPortSendReceive.java | 223 +++
.../mh/user/serialport/SerialPortSingle.java | 195 +++
.../mh/user/serialport/SerialPortThread.java | 77 +
.../mh/user/serialport/SerialPortUtil.java | 232 +++
.../mh/user/serialport/SerialResquest.java | 118 ++
.../com/mh/user/serialport/SerialTool.java | 274 ++++
.../com/mh/user/service/AlarmInfoService.java | 62 +
.../java/com/mh/user/service/AreaService.java | 10 +
.../com/mh/user/service/BuildingService.java | 60 +
.../mh/user/service/ControlSetService.java | 10 +
.../mh/user/service/DataResultService.java | 85 ++
.../user/service/DeviceCodeParamService.java | 37 +
.../mh/user/service/DeviceInfoService.java | 21 +
.../mh/user/service/DeviceInstallService.java | 118 ++
.../mh/user/service/EnergyDataService.java | 13 +
.../com/mh/user/service/EnergyService.java | 64 +
.../mh/user/service/GatewayManageService.java | 10 +
.../com/mh/user/service/MeterInfoService.java | 9 +
.../mh/user/service/ProjectInfoService.java | 15 +
.../mh/user/service/RegisterAddrService.java | 9 +
.../mh/user/service/StrategyInfoService.java | 9 +
.../com/mh/user/service/SysDeptService.java | 21 +
.../com/mh/user/service/SysDictService.java | 21 +
.../com/mh/user/service/SysLogService.java | 22 +
.../com/mh/user/service/SysMenuService.java | 29 +
.../com/mh/user/service/SysRoleService.java | 61 +
.../com/mh/user/service/SysUserService.java | 45 +
.../mh/user/service/SystemInfoService.java | 9 +
.../mh/user/service/chart/ChartService.java | 25 +
.../service/chart/impl/ChartServiceImpl.java | 168 +++
.../service/chillers/ChillersService.java | 60 +
.../service/chillers/DataHistoryService.java | 16 +
.../service/chillers/DealDataService.java | 46 +
.../chillers/DeviceDisplayService.java | 23 +
.../service/chillers/DeviceManageService.java | 39 +
.../service/chillers/DeviceParamService.java | 40 +
.../service/chillers/ExceptionService.java | 23 +
.../chillers/GatewayManageService.java | 55 +
.../user/service/chillers/GaugeService.java | 19 +
.../service/chillers/OrderMessageService.java | 39 +
.../user/service/chillers/ReportService.java | 18 +
.../chillers/impl/ChillersServiceImpl.java | 289 ++++
.../chillers/impl/DataHistoryServiceImpl.java | 27 +
.../chillers/impl/DealDataServiceImpl.java | 107 ++
.../impl/DeviceDisplayServiceImpl.java | 37 +
.../impl/DeviceManageServiceImpl.java | 77 +
.../chillers/impl/DeviceParamServiceImpl.java | 76 +
.../chillers/impl/ExceptionServiceImpl.java | 47 +
.../impl/GatewayManageServiceImpl.java | 103 ++
.../chillers/impl/GaugeServiceImpl.java | 51 +
.../impl/OrderMessageServiceImpl.java | 82 +
.../chillers/impl/ReportServiceImpl.java | 36 +
.../service/impl/AlarmInfoServiceImpl.java | 58 +
.../mh/user/service/impl/AreaServiceImpl.java | 21 +
.../service/impl/BuildingServiceImpl.java | 65 +
.../service/impl/ControlSetServiceImpl.java | 30 +
.../service/impl/DataResultServiceImpl.java | 299 ++++
.../impl/DeviceCodeParamServiceImpl.java | 62 +
.../service/impl/DeviceInfoServiceImpl.java | 38 +
.../impl/DeviceInstallServiceImpl.java | 158 ++
.../service/impl/EnergyDataServiceImpl.java | 66 +
.../user/service/impl/EnergyServiceImpl.java | 120 ++
.../service/impl/MeterInfoServiceImpl.java | 21 +
.../service/impl/ProjectInfoServiceImpl.java | 28 +
.../service/impl/RegisterAddrServiceImpl.java | 21 +
.../service/impl/StrategyInfoServiceImpl.java | 21 +
.../user/service/impl/SysDeptServiceImpl.java | 81 +
.../user/service/impl/SysLogServiceImpl.java | 70 +
.../user/service/impl/SysMenuServiceImpl.java | 113 ++
.../user/service/impl/SysRoleServiceImpl.java | 129 ++
.../user/service/impl/SysUserServiceImpl.java | 202 +++
.../service/impl/SystemInfoServiceImpl.java | 20 +
.../com/mh/user/sqlmapper/SysDeptMapper.xml | 152 ++
.../com/mh/user/sqlmapper/SysDictMapper.xml | 195 +++
.../com/mh/user/sqlmapper/SysLogMapper.xml | 210 +++
.../com/mh/user/sqlmapper/SysMenuMapper.xml | 216 +++
.../mh/user/sqlmapper/SysRoleDeptMapper.xml | 117 ++
.../com/mh/user/sqlmapper/SysRoleMapper.xml | 153 ++
.../mh/user/sqlmapper/SysRoleMenuMapper.xml | 132 ++
.../com/mh/user/sqlmapper/SysUserMapper.xml | 218 +++
.../mh/user/sqlmapper/SysUserRoleMapper.xml | 81 +
.../main/java/com/mh/user/utils/AESUtil.java | 60 +
.../user/utils/AnalysisReceiveOrder485.java | 764 ++++++++++
.../main/java/com/mh/user/utils/CRC16.java | 253 ++++
.../main/java/com/mh/user/utils/DateUtil.java | 311 ++++
.../com/mh/user/utils/ExchangeStringUtil.java | 1323 +++++++++++++++++
.../java/com/mh/user/utils/FileUtils.java | 66 +
.../com/mh/user/utils/GetReadOrder485.java | 413 +++++
.../java/com/mh/user/utils/HeartUtil.java | 79 +
.../java/com/mh/user/utils/HttpUtils.java | 44 +
.../main/java/com/mh/user/utils/IPUtils.java | 67 +
.../java/com/mh/user/utils/JwtTokenUtils.java | 216 +++
.../com/mh/user/utils/PasswordEncoder.java | 115 ++
.../java/com/mh/user/utils/PasswordUtils.java | 40 +
.../com/mh/user/utils/QuerySendThread.java | 38 +
.../java/com/mh/user/utils/SecurityUtils.java | 107 ++
.../com/mh/user/utils/SendOrderUtils.java | 191 +++
.../java/com/mh/user/utils/SimpleWeather.java | 146 ++
.../com/mh/user/utils/SpringBeanUtil.java | 54 +
.../com/mh/user/utils/SpringContextUtils.java | 45 +
.../src/main/java/com/mh/user/utils/Test.java | 130 ++
.../com/mh/user/utils/ThreadPoolService.java | 46 +
.../com/mh/user/utils/TimeDifferenceUtil.java | 49 +
.../java/com/mh/user/utils/WeatherUtil.java | 225 +++
.../main/java/com/mh/user/vo/LoginBean.java | 19 +
user-service/src/main/resources/bootstrap.yml | 113 ++
.../src/main/resources/log4j.properties | 32 +
user-service/src/main/resources/socket.yml | 12 +
.../test/java/com/mh/user/DealDataTest.java | 23 +
.../test/java/com/mh/user/ExceptionTest.java | 44 +
.../test/java/com/mh/user/ReportTest1.java | 103 ++
.../test/java/com/mh/user/SysUserTest.java | 31 +
.../test/java/com/mh/user/TestJwtUtils.java | 159 ++
.../mh/user/UserServiceApplicationTests.java | 65 +
.../java/com/mh/user/chart/ChartTest.java | 69 +
.../java/com/mh/user/device/CRC16Test.java | 77 +
.../java/com/mh/user/device/DeviceTest.java | 171 +++
.../java/com/mh/user/param/ParamTest.java | 65 +
.../user/receive/AnalysisReceiveOrder485.java | 301 ++++
.../java/com/mh/user/receive/receiveTest.java | 40 +
.../java/com/mh/user/socket/BIOServer.java | 86 ++
.../java/com/mh/user/socket/NIOServer.java | 246 +++
.../java/com/mh/user/socket/NIOServer2.java | 96 ++
.../java/com/mh/user/socket/NIOServerV3.java | 204 +++
.../com/mh/user/socket/NettyClientTest.java | 58 +
.../com/mh/user/socket/NettyEchoServer.java | 182 +++
375 files changed, 30136 insertions(+)
create mode 100644 common/pom.xml
create mode 100644 common/src/main/java/com/mh/common/dto/RespDTO.java
create mode 100644 common/src/main/java/com/mh/common/exception/BaseErrorInfo.java
create mode 100644 common/src/main/java/com/mh/common/exception/CommonNum.java
create mode 100644 common/src/main/java/com/mh/common/exception/GlobalException.java
create mode 100644 common/src/main/java/com/mh/common/exception/ServiceRuntimeException.java
create mode 100644 common/src/main/java/com/mh/common/http/HttpResult.java
create mode 100644 common/src/main/java/com/mh/common/http/HttpStatus.java
create mode 100644 common/src/main/java/com/mh/common/page/ColumnFilter.java
create mode 100644 common/src/main/java/com/mh/common/page/MybatisPageHelper.java
create mode 100644 common/src/main/java/com/mh/common/page/PageRequest.java
create mode 100644 common/src/main/java/com/mh/common/page/PageResult.java
create mode 100644 common/src/main/java/com/mh/common/service/CurdService.java
create mode 100644 common/src/main/java/com/mh/common/utils/DateTimeUtils.java
create mode 100644 common/src/main/java/com/mh/common/utils/FileUtils.java
create mode 100644 common/src/main/java/com/mh/common/utils/IOUtils.java
create mode 100644 common/src/main/java/com/mh/common/utils/PoiUtils.java
create mode 100644 common/src/main/java/com/mh/common/utils/ReflectionUtils.java
create mode 100644 common/src/main/java/com/mh/common/utils/StringUtils.java
create mode 100644 pom.xml
create mode 100644 user-service/HELP.md
create mode 100644 user-service/lib/.idea/lib.iml
create mode 100644 user-service/lib/.idea/misc.xml
create mode 100644 user-service/lib/.idea/modules.xml
create mode 100644 user-service/lib/.idea/vcs.xml
create mode 100644 user-service/lib/.idea/workspace.xml
create mode 100644 user-service/lib/RXTXcomm.jar
create mode 100644 user-service/pom.xml
create mode 100644 user-service/src/main/java/com/mh/user/UserServiceApplication.java
create mode 100644 user-service/src/main/java/com/mh/user/annotation/SysLogger.java
create mode 100644 user-service/src/main/java/com/mh/user/annotation/applicationListener.java
create mode 100644 user-service/src/main/java/com/mh/user/aspect/DaoAspect.java
create mode 100644 user-service/src/main/java/com/mh/user/aspect/SysLogAspect.java
create mode 100644 user-service/src/main/java/com/mh/user/component/ReceiveHandler.java
create mode 100644 user-service/src/main/java/com/mh/user/config/CorsConfig.java
create mode 100644 user-service/src/main/java/com/mh/user/config/DruidConfig.java
create mode 100644 user-service/src/main/java/com/mh/user/config/DruidDataSourceProperties.java
create mode 100644 user-service/src/main/java/com/mh/user/config/DruidStatViewServlet.java
create mode 100644 user-service/src/main/java/com/mh/user/config/KaptchaConfig.java
create mode 100644 user-service/src/main/java/com/mh/user/config/PrimessionInterceptor.java
create mode 100644 user-service/src/main/java/com/mh/user/config/QuartzConfig.java
create mode 100644 user-service/src/main/java/com/mh/user/config/RabbitmqConfig.java
create mode 100644 user-service/src/main/java/com/mh/user/config/RestTemplateConfig.java
create mode 100644 user-service/src/main/java/com/mh/user/config/SwaggerConfig.java
create mode 100644 user-service/src/main/java/com/mh/user/config/WebSecurityConfig.java
create mode 100644 user-service/src/main/java/com/mh/user/constants/Constant.java
create mode 100644 user-service/src/main/java/com/mh/user/constants/SocketMessage.java
create mode 100644 user-service/src/main/java/com/mh/user/constants/SysConstants.java
create mode 100644 user-service/src/main/java/com/mh/user/controller/AreaController.java
create mode 100644 user-service/src/main/java/com/mh/user/controller/BuildingController.java
create mode 100644 user-service/src/main/java/com/mh/user/controller/ChartController.java
create mode 100644 user-service/src/main/java/com/mh/user/controller/ChillersController.java
create mode 100644 user-service/src/main/java/com/mh/user/controller/DataResultController.java
create mode 100644 user-service/src/main/java/com/mh/user/controller/DeviceInfoController.java
create mode 100644 user-service/src/main/java/com/mh/user/controller/DeviceManageController.java
create mode 100644 user-service/src/main/java/com/mh/user/controller/EnergyController.java
create mode 100644 user-service/src/main/java/com/mh/user/controller/EnergyDataController.java
create mode 100644 user-service/src/main/java/com/mh/user/controller/MeterInfoController.java
create mode 100644 user-service/src/main/java/com/mh/user/controller/ProjectInfoController.java
create mode 100644 user-service/src/main/java/com/mh/user/controller/SendTest.java
create mode 100644 user-service/src/main/java/com/mh/user/controller/SerialPortController.java
create mode 100644 user-service/src/main/java/com/mh/user/controller/StrategyInfoController.java
create mode 100644 user-service/src/main/java/com/mh/user/controller/SysDeptController.java
create mode 100644 user-service/src/main/java/com/mh/user/controller/SysLogController.java
create mode 100644 user-service/src/main/java/com/mh/user/controller/SysLoginController.java
create mode 100644 user-service/src/main/java/com/mh/user/controller/SysMenuController.java
create mode 100644 user-service/src/main/java/com/mh/user/controller/SysRoleController.java
create mode 100644 user-service/src/main/java/com/mh/user/controller/SysUserController.java
create mode 100644 user-service/src/main/java/com/mh/user/controller/SystemInfoController.java
create mode 100644 user-service/src/main/java/com/mh/user/controller/TestController.java
create mode 100644 user-service/src/main/java/com/mh/user/dto/DeviceMessageDTO.java
create mode 100644 user-service/src/main/java/com/mh/user/dto/DisplayBoxDataDTO.java
create mode 100644 user-service/src/main/java/com/mh/user/dto/TableInfoDTO.java
create mode 100644 user-service/src/main/java/com/mh/user/dynamic/config/DataSourceConfig.java
create mode 100644 user-service/src/main/java/com/mh/user/dynamic/config/MyBatisMapperScannerConfig.java
create mode 100644 user-service/src/main/java/com/mh/user/dynamic/datasource/DataSourceContextHolder.java
create mode 100644 user-service/src/main/java/com/mh/user/dynamic/datasource/DataSourceObject.java
create mode 100644 user-service/src/main/java/com/mh/user/dynamic/datasource/DynamicDataSource.java
create mode 100644 user-service/src/main/java/com/mh/user/entity/AddCronJobReq.java
create mode 100644 user-service/src/main/java/com/mh/user/entity/AddSimpleJobReq.java
create mode 100644 user-service/src/main/java/com/mh/user/entity/AlarmInfoEntity.java
create mode 100644 user-service/src/main/java/com/mh/user/entity/AlarmInfoSumEntity.java
create mode 100644 user-service/src/main/java/com/mh/user/entity/AlarmValueSetEntity.java
create mode 100644 user-service/src/main/java/com/mh/user/entity/AnalysisMonthEntity.java
create mode 100644 user-service/src/main/java/com/mh/user/entity/AnalysisYearEntity.java
create mode 100644 user-service/src/main/java/com/mh/user/entity/AreaEntity.java
create mode 100644 user-service/src/main/java/com/mh/user/entity/BaseEntity.java
create mode 100644 user-service/src/main/java/com/mh/user/entity/BuildingEntity.java
create mode 100644 user-service/src/main/java/com/mh/user/entity/ChillersEntity.java
create mode 100644 user-service/src/main/java/com/mh/user/entity/ControlSetEntity.java
create mode 100644 user-service/src/main/java/com/mh/user/entity/DBEntity.java
create mode 100644 user-service/src/main/java/com/mh/user/entity/DataResultChEntity.java
create mode 100644 user-service/src/main/java/com/mh/user/entity/DataResultClEntity.java
create mode 100644 user-service/src/main/java/com/mh/user/entity/DataResultEntity.java
create mode 100644 user-service/src/main/java/com/mh/user/entity/DeleteJobReq.java
create mode 100644 user-service/src/main/java/com/mh/user/entity/DeviceCodeParamEntity.java
create mode 100644 user-service/src/main/java/com/mh/user/entity/DeviceFloorTempEntity.java
create mode 100644 user-service/src/main/java/com/mh/user/entity/DeviceInfoEntity.java
create mode 100644 user-service/src/main/java/com/mh/user/entity/DeviceInstallEntity.java
create mode 100644 user-service/src/main/java/com/mh/user/entity/DeviceInstallTempEntity.java
create mode 100644 user-service/src/main/java/com/mh/user/entity/DeviceManageEntity.java
create mode 100644 user-service/src/main/java/com/mh/user/entity/DeviceParameterEntity.java
create mode 100644 user-service/src/main/java/com/mh/user/entity/DeviceStateEntity.java
create mode 100644 user-service/src/main/java/com/mh/user/entity/EnergyDataEntity.java
create mode 100644 user-service/src/main/java/com/mh/user/entity/EnergyEntity.java
create mode 100644 user-service/src/main/java/com/mh/user/entity/EnergySumEntity.java
create mode 100644 user-service/src/main/java/com/mh/user/entity/ExceptionEntity.java
create mode 100644 user-service/src/main/java/com/mh/user/entity/ExceptionTableData.java
create mode 100644 user-service/src/main/java/com/mh/user/entity/FirstTableEntity.java
create mode 100644 user-service/src/main/java/com/mh/user/entity/GatewayManageEntity.java
create mode 100644 user-service/src/main/java/com/mh/user/entity/GaugeEntity.java
create mode 100644 user-service/src/main/java/com/mh/user/entity/HostValue.java
create mode 100644 user-service/src/main/java/com/mh/user/entity/MaintainSumEntity.java
create mode 100644 user-service/src/main/java/com/mh/user/entity/MeterInfoEntity.java
create mode 100644 user-service/src/main/java/com/mh/user/entity/OrderEntity.java
create mode 100644 user-service/src/main/java/com/mh/user/entity/OrderMessageEntity.java
create mode 100644 user-service/src/main/java/com/mh/user/entity/ProjectInfoEntity.java
create mode 100644 user-service/src/main/java/com/mh/user/entity/RegisterAddrEntity.java
create mode 100644 user-service/src/main/java/com/mh/user/entity/ReportParamEntity.java
create mode 100644 user-service/src/main/java/com/mh/user/entity/StrategyInfoEntity.java
create mode 100644 user-service/src/main/java/com/mh/user/entity/SystemInfoEntity.java
create mode 100644 user-service/src/main/java/com/mh/user/entity/TableChartMessageEntity.java
create mode 100644 user-service/src/main/java/com/mh/user/entity/TableDataEntity.java
create mode 100644 user-service/src/main/java/com/mh/user/entity/TableInfoEntity.java
create mode 100644 user-service/src/main/java/com/mh/user/entity/TestEntity.java
create mode 100644 user-service/src/main/java/com/mh/user/entity/UploadDeviceFloorEntity.java
create mode 100644 user-service/src/main/java/com/mh/user/entity/UploadDeviceInstallEntity.java
create mode 100644 user-service/src/main/java/com/mh/user/entity/UseForecastEntity.java
create mode 100644 user-service/src/main/java/com/mh/user/entity/chart/AxisLine.java
create mode 100644 user-service/src/main/java/com/mh/user/entity/chart/BaseChartEntity.java
create mode 100644 user-service/src/main/java/com/mh/user/entity/chart/ChartEntity.java
create mode 100644 user-service/src/main/java/com/mh/user/entity/chart/Feature.java
create mode 100644 user-service/src/main/java/com/mh/user/entity/chart/GetChartParams.java
create mode 100644 user-service/src/main/java/com/mh/user/entity/chart/Legend.java
create mode 100644 user-service/src/main/java/com/mh/user/entity/chart/LineStyle.java
create mode 100644 user-service/src/main/java/com/mh/user/entity/chart/Series.java
create mode 100644 user-service/src/main/java/com/mh/user/entity/chart/SplitLine.java
create mode 100644 user-service/src/main/java/com/mh/user/entity/chart/Title.java
create mode 100644 user-service/src/main/java/com/mh/user/entity/chart/Unit.java
create mode 100644 user-service/src/main/java/com/mh/user/entity/chart/XAxis.java
create mode 100644 user-service/src/main/java/com/mh/user/entity/chart/YAxis.java
create mode 100644 user-service/src/main/java/com/mh/user/job/CollectionLoopRunner.java
create mode 100644 user-service/src/main/java/com/mh/user/job/DealDataJob.java
create mode 100644 user-service/src/main/java/com/mh/user/job/JobChillers.java
create mode 100644 user-service/src/main/java/com/mh/user/job/JobCloud.java
create mode 100644 user-service/src/main/java/com/mh/user/job/JobDDC.java
create mode 100644 user-service/src/main/java/com/mh/user/job/JobFactory.java
create mode 100644 user-service/src/main/java/com/mh/user/job/JobMeter.java
create mode 100644 user-service/src/main/java/com/mh/user/job/JobTest.java
create mode 100644 user-service/src/main/java/com/mh/user/manage/QuartzManager.java
create mode 100644 user-service/src/main/java/com/mh/user/manage/SerialPortManager.java
create mode 100644 user-service/src/main/java/com/mh/user/manage/SerialPortManages.java
create mode 100644 user-service/src/main/java/com/mh/user/mapper/AlarmInfoMapper.java
create mode 100644 user-service/src/main/java/com/mh/user/mapper/AreaMapper.java
create mode 100644 user-service/src/main/java/com/mh/user/mapper/BuildingMapper.java
create mode 100644 user-service/src/main/java/com/mh/user/mapper/ControlSetMapper.java
create mode 100644 user-service/src/main/java/com/mh/user/mapper/DataResultMapper.java
create mode 100644 user-service/src/main/java/com/mh/user/mapper/DeviceCodeParamMapper.java
create mode 100644 user-service/src/main/java/com/mh/user/mapper/DeviceInfoMapper.java
create mode 100644 user-service/src/main/java/com/mh/user/mapper/DeviceInstallMapper.java
create mode 100644 user-service/src/main/java/com/mh/user/mapper/EnergyDataMapper.java
create mode 100644 user-service/src/main/java/com/mh/user/mapper/EnergyMapper.java
create mode 100644 user-service/src/main/java/com/mh/user/mapper/MeterInfoMapper.java
create mode 100644 user-service/src/main/java/com/mh/user/mapper/ProjectInfoMapper.java
create mode 100644 user-service/src/main/java/com/mh/user/mapper/RegisterAddrMapper.java
create mode 100644 user-service/src/main/java/com/mh/user/mapper/StrategyInfoMapper.java
create mode 100644 user-service/src/main/java/com/mh/user/mapper/SysDeptMapper.java
create mode 100644 user-service/src/main/java/com/mh/user/mapper/SysLogMapper.java
create mode 100644 user-service/src/main/java/com/mh/user/mapper/SysMenuMapper.java
create mode 100644 user-service/src/main/java/com/mh/user/mapper/SysRoleDeptMapper.java
create mode 100644 user-service/src/main/java/com/mh/user/mapper/SysRoleMapper.java
create mode 100644 user-service/src/main/java/com/mh/user/mapper/SysRoleMenuMapper.java
create mode 100644 user-service/src/main/java/com/mh/user/mapper/SysUserMapper.java
create mode 100644 user-service/src/main/java/com/mh/user/mapper/SysUserRoleMapper.java
create mode 100644 user-service/src/main/java/com/mh/user/mapper/SystemInfoMapper.java
create mode 100644 user-service/src/main/java/com/mh/user/mapper/chart/ChartMapper.java
create mode 100644 user-service/src/main/java/com/mh/user/mapper/chillers/ChillerControlOrderMapper.java
create mode 100644 user-service/src/main/java/com/mh/user/mapper/chillers/ChillersMapper.java
create mode 100644 user-service/src/main/java/com/mh/user/mapper/chillers/DataHistoryMapper.java
create mode 100644 user-service/src/main/java/com/mh/user/mapper/chillers/DealDataMapper.java
create mode 100644 user-service/src/main/java/com/mh/user/mapper/chillers/DeviceDisplayMapper.java
create mode 100644 user-service/src/main/java/com/mh/user/mapper/chillers/DeviceManageMapper.java
create mode 100644 user-service/src/main/java/com/mh/user/mapper/chillers/DeviceParamMapper.java
create mode 100644 user-service/src/main/java/com/mh/user/mapper/chillers/ExceptionMapper.java
create mode 100644 user-service/src/main/java/com/mh/user/mapper/chillers/GatewayManageMapper.java
create mode 100644 user-service/src/main/java/com/mh/user/mapper/chillers/GaugeMapper.java
create mode 100644 user-service/src/main/java/com/mh/user/mapper/chillers/ReportMapper.java
create mode 100644 user-service/src/main/java/com/mh/user/mapper/provider/AlarmInfoProvider.java
create mode 100644 user-service/src/main/java/com/mh/user/mapper/provider/BuildingProvider.java
create mode 100644 user-service/src/main/java/com/mh/user/mapper/provider/DataResultProvider.java
create mode 100644 user-service/src/main/java/com/mh/user/mapper/provider/DeviceInfoProvider.java
create mode 100644 user-service/src/main/java/com/mh/user/mapper/provider/DeviceInstallProvider.java
create mode 100644 user-service/src/main/java/com/mh/user/mapper/provider/EnergyDataProvider.java
create mode 100644 user-service/src/main/java/com/mh/user/mapper/provider/EnergyProvider.java
create mode 100644 user-service/src/main/java/com/mh/user/mapper/provider/MaintainInfoProvider.java
create mode 100644 user-service/src/main/java/com/mh/user/mapper/provider/MeterInfoProvider.java
create mode 100644 user-service/src/main/java/com/mh/user/mapper/provider/StrategyInfoProvider.java
create mode 100644 user-service/src/main/java/com/mh/user/mapper/provider/SysLogProvider.java
create mode 100644 user-service/src/main/java/com/mh/user/mapper/provider/SysRoleProvider.java
create mode 100644 user-service/src/main/java/com/mh/user/mapper/provider/SysUserProvider.java
create mode 100644 user-service/src/main/java/com/mh/user/mapper/provider/UseForecastProvider.java
create mode 100644 user-service/src/main/java/com/mh/user/model/BaseModel.java
create mode 100644 user-service/src/main/java/com/mh/user/model/BuildingModel.java
create mode 100644 user-service/src/main/java/com/mh/user/model/ChillerModel.java
create mode 100644 user-service/src/main/java/com/mh/user/model/DeviceModel.java
create mode 100644 user-service/src/main/java/com/mh/user/model/DeviceTypeModel.java
create mode 100644 user-service/src/main/java/com/mh/user/model/EnergyModel.java
create mode 100644 user-service/src/main/java/com/mh/user/model/EnergyParam.java
create mode 100644 user-service/src/main/java/com/mh/user/model/OrderParamModel.java
create mode 100644 user-service/src/main/java/com/mh/user/model/QueueParam.java
create mode 100644 user-service/src/main/java/com/mh/user/model/SerialPortModel.java
create mode 100644 user-service/src/main/java/com/mh/user/model/SysDept.java
create mode 100644 user-service/src/main/java/com/mh/user/model/SysDict.java
create mode 100644 user-service/src/main/java/com/mh/user/model/SysLog.java
create mode 100644 user-service/src/main/java/com/mh/user/model/SysMenu.java
create mode 100644 user-service/src/main/java/com/mh/user/model/SysRole.java
create mode 100644 user-service/src/main/java/com/mh/user/model/SysRoleDept.java
create mode 100644 user-service/src/main/java/com/mh/user/model/SysRoleMenu.java
create mode 100644 user-service/src/main/java/com/mh/user/model/SysUser.java
create mode 100644 user-service/src/main/java/com/mh/user/model/SysUserRole.java
create mode 100644 user-service/src/main/java/com/mh/user/netty/ClientManage.java
create mode 100644 user-service/src/main/java/com/mh/user/netty/EchoServer.java
create mode 100644 user-service/src/main/java/com/mh/user/netty/EchoServerHandler.java
create mode 100644 user-service/src/main/java/com/mh/user/netty/NettyChillerClient.java
create mode 100644 user-service/src/main/java/com/mh/user/netty/NettyChillerClientHandler.java
create mode 100644 user-service/src/main/java/com/mh/user/netty/NettyChillerControlClient.java
create mode 100644 user-service/src/main/java/com/mh/user/netty/NettyChillerControlHandler.java
create mode 100644 user-service/src/main/java/com/mh/user/netty/NettyChillerDDCClient.java
create mode 100644 user-service/src/main/java/com/mh/user/netty/NettyChillerDDCClientHandler.java
create mode 100644 user-service/src/main/java/com/mh/user/netty/NettyClient.java
create mode 100644 user-service/src/main/java/com/mh/user/netty/NettyClientHandler.java
create mode 100644 user-service/src/main/java/com/mh/user/netty/NettyEchoServer.java
create mode 100644 user-service/src/main/java/com/mh/user/netty/NettyMeterClient.java
create mode 100644 user-service/src/main/java/com/mh/user/netty/NettyMeterClientHandler.java
create mode 100644 user-service/src/main/java/com/mh/user/netty/ServerChannelInitializer.java
create mode 100644 user-service/src/main/java/com/mh/user/primary/Clients.java
create mode 100644 user-service/src/main/java/com/mh/user/provide/ChillersProvider.java
create mode 100644 user-service/src/main/java/com/mh/user/provide/DeviceManageProvider.java
create mode 100644 user-service/src/main/java/com/mh/user/provide/DeviceParamProvider.java
create mode 100644 user-service/src/main/java/com/mh/user/provide/ExceptionProvider.java
create mode 100644 user-service/src/main/java/com/mh/user/provide/GatewayManageProvider.java
create mode 100644 user-service/src/main/java/com/mh/user/provide/GaugeProvider.java
create mode 100644 user-service/src/main/java/com/mh/user/security/GrantedAuthorityImpl.java
create mode 100644 user-service/src/main/java/com/mh/user/security/JwtAuthenticatioToken.java
create mode 100644 user-service/src/main/java/com/mh/user/security/JwtAuthenticationFilter.java
create mode 100644 user-service/src/main/java/com/mh/user/security/JwtAuthenticationProvider.java
create mode 100644 user-service/src/main/java/com/mh/user/security/JwtUserDetails.java
create mode 100644 user-service/src/main/java/com/mh/user/security/UserDetailsServiceImpl.java
create mode 100644 user-service/src/main/java/com/mh/user/serialport/SerialPortListener.java
create mode 100644 user-service/src/main/java/com/mh/user/serialport/SerialPortSendReceive.java
create mode 100644 user-service/src/main/java/com/mh/user/serialport/SerialPortSingle.java
create mode 100644 user-service/src/main/java/com/mh/user/serialport/SerialPortThread.java
create mode 100644 user-service/src/main/java/com/mh/user/serialport/SerialPortUtil.java
create mode 100644 user-service/src/main/java/com/mh/user/serialport/SerialResquest.java
create mode 100644 user-service/src/main/java/com/mh/user/serialport/SerialTool.java
create mode 100644 user-service/src/main/java/com/mh/user/service/AlarmInfoService.java
create mode 100644 user-service/src/main/java/com/mh/user/service/AreaService.java
create mode 100644 user-service/src/main/java/com/mh/user/service/BuildingService.java
create mode 100644 user-service/src/main/java/com/mh/user/service/ControlSetService.java
create mode 100644 user-service/src/main/java/com/mh/user/service/DataResultService.java
create mode 100644 user-service/src/main/java/com/mh/user/service/DeviceCodeParamService.java
create mode 100644 user-service/src/main/java/com/mh/user/service/DeviceInfoService.java
create mode 100644 user-service/src/main/java/com/mh/user/service/DeviceInstallService.java
create mode 100644 user-service/src/main/java/com/mh/user/service/EnergyDataService.java
create mode 100644 user-service/src/main/java/com/mh/user/service/EnergyService.java
create mode 100644 user-service/src/main/java/com/mh/user/service/GatewayManageService.java
create mode 100644 user-service/src/main/java/com/mh/user/service/MeterInfoService.java
create mode 100644 user-service/src/main/java/com/mh/user/service/ProjectInfoService.java
create mode 100644 user-service/src/main/java/com/mh/user/service/RegisterAddrService.java
create mode 100644 user-service/src/main/java/com/mh/user/service/StrategyInfoService.java
create mode 100644 user-service/src/main/java/com/mh/user/service/SysDeptService.java
create mode 100644 user-service/src/main/java/com/mh/user/service/SysDictService.java
create mode 100644 user-service/src/main/java/com/mh/user/service/SysLogService.java
create mode 100644 user-service/src/main/java/com/mh/user/service/SysMenuService.java
create mode 100644 user-service/src/main/java/com/mh/user/service/SysRoleService.java
create mode 100644 user-service/src/main/java/com/mh/user/service/SysUserService.java
create mode 100644 user-service/src/main/java/com/mh/user/service/SystemInfoService.java
create mode 100644 user-service/src/main/java/com/mh/user/service/chart/ChartService.java
create mode 100644 user-service/src/main/java/com/mh/user/service/chart/impl/ChartServiceImpl.java
create mode 100644 user-service/src/main/java/com/mh/user/service/chillers/ChillersService.java
create mode 100644 user-service/src/main/java/com/mh/user/service/chillers/DataHistoryService.java
create mode 100644 user-service/src/main/java/com/mh/user/service/chillers/DealDataService.java
create mode 100644 user-service/src/main/java/com/mh/user/service/chillers/DeviceDisplayService.java
create mode 100644 user-service/src/main/java/com/mh/user/service/chillers/DeviceManageService.java
create mode 100644 user-service/src/main/java/com/mh/user/service/chillers/DeviceParamService.java
create mode 100644 user-service/src/main/java/com/mh/user/service/chillers/ExceptionService.java
create mode 100644 user-service/src/main/java/com/mh/user/service/chillers/GatewayManageService.java
create mode 100644 user-service/src/main/java/com/mh/user/service/chillers/GaugeService.java
create mode 100644 user-service/src/main/java/com/mh/user/service/chillers/OrderMessageService.java
create mode 100644 user-service/src/main/java/com/mh/user/service/chillers/ReportService.java
create mode 100644 user-service/src/main/java/com/mh/user/service/chillers/impl/ChillersServiceImpl.java
create mode 100644 user-service/src/main/java/com/mh/user/service/chillers/impl/DataHistoryServiceImpl.java
create mode 100644 user-service/src/main/java/com/mh/user/service/chillers/impl/DealDataServiceImpl.java
create mode 100644 user-service/src/main/java/com/mh/user/service/chillers/impl/DeviceDisplayServiceImpl.java
create mode 100644 user-service/src/main/java/com/mh/user/service/chillers/impl/DeviceManageServiceImpl.java
create mode 100644 user-service/src/main/java/com/mh/user/service/chillers/impl/DeviceParamServiceImpl.java
create mode 100644 user-service/src/main/java/com/mh/user/service/chillers/impl/ExceptionServiceImpl.java
create mode 100644 user-service/src/main/java/com/mh/user/service/chillers/impl/GatewayManageServiceImpl.java
create mode 100644 user-service/src/main/java/com/mh/user/service/chillers/impl/GaugeServiceImpl.java
create mode 100644 user-service/src/main/java/com/mh/user/service/chillers/impl/OrderMessageServiceImpl.java
create mode 100644 user-service/src/main/java/com/mh/user/service/chillers/impl/ReportServiceImpl.java
create mode 100644 user-service/src/main/java/com/mh/user/service/impl/AlarmInfoServiceImpl.java
create mode 100644 user-service/src/main/java/com/mh/user/service/impl/AreaServiceImpl.java
create mode 100644 user-service/src/main/java/com/mh/user/service/impl/BuildingServiceImpl.java
create mode 100644 user-service/src/main/java/com/mh/user/service/impl/ControlSetServiceImpl.java
create mode 100644 user-service/src/main/java/com/mh/user/service/impl/DataResultServiceImpl.java
create mode 100644 user-service/src/main/java/com/mh/user/service/impl/DeviceCodeParamServiceImpl.java
create mode 100644 user-service/src/main/java/com/mh/user/service/impl/DeviceInfoServiceImpl.java
create mode 100644 user-service/src/main/java/com/mh/user/service/impl/DeviceInstallServiceImpl.java
create mode 100644 user-service/src/main/java/com/mh/user/service/impl/EnergyDataServiceImpl.java
create mode 100644 user-service/src/main/java/com/mh/user/service/impl/EnergyServiceImpl.java
create mode 100644 user-service/src/main/java/com/mh/user/service/impl/MeterInfoServiceImpl.java
create mode 100644 user-service/src/main/java/com/mh/user/service/impl/ProjectInfoServiceImpl.java
create mode 100644 user-service/src/main/java/com/mh/user/service/impl/RegisterAddrServiceImpl.java
create mode 100644 user-service/src/main/java/com/mh/user/service/impl/StrategyInfoServiceImpl.java
create mode 100644 user-service/src/main/java/com/mh/user/service/impl/SysDeptServiceImpl.java
create mode 100644 user-service/src/main/java/com/mh/user/service/impl/SysLogServiceImpl.java
create mode 100644 user-service/src/main/java/com/mh/user/service/impl/SysMenuServiceImpl.java
create mode 100644 user-service/src/main/java/com/mh/user/service/impl/SysRoleServiceImpl.java
create mode 100644 user-service/src/main/java/com/mh/user/service/impl/SysUserServiceImpl.java
create mode 100644 user-service/src/main/java/com/mh/user/service/impl/SystemInfoServiceImpl.java
create mode 100644 user-service/src/main/java/com/mh/user/sqlmapper/SysDeptMapper.xml
create mode 100644 user-service/src/main/java/com/mh/user/sqlmapper/SysDictMapper.xml
create mode 100644 user-service/src/main/java/com/mh/user/sqlmapper/SysLogMapper.xml
create mode 100644 user-service/src/main/java/com/mh/user/sqlmapper/SysMenuMapper.xml
create mode 100644 user-service/src/main/java/com/mh/user/sqlmapper/SysRoleDeptMapper.xml
create mode 100644 user-service/src/main/java/com/mh/user/sqlmapper/SysRoleMapper.xml
create mode 100644 user-service/src/main/java/com/mh/user/sqlmapper/SysRoleMenuMapper.xml
create mode 100644 user-service/src/main/java/com/mh/user/sqlmapper/SysUserMapper.xml
create mode 100644 user-service/src/main/java/com/mh/user/sqlmapper/SysUserRoleMapper.xml
create mode 100644 user-service/src/main/java/com/mh/user/utils/AESUtil.java
create mode 100644 user-service/src/main/java/com/mh/user/utils/AnalysisReceiveOrder485.java
create mode 100644 user-service/src/main/java/com/mh/user/utils/CRC16.java
create mode 100644 user-service/src/main/java/com/mh/user/utils/DateUtil.java
create mode 100644 user-service/src/main/java/com/mh/user/utils/ExchangeStringUtil.java
create mode 100644 user-service/src/main/java/com/mh/user/utils/FileUtils.java
create mode 100644 user-service/src/main/java/com/mh/user/utils/GetReadOrder485.java
create mode 100644 user-service/src/main/java/com/mh/user/utils/HeartUtil.java
create mode 100644 user-service/src/main/java/com/mh/user/utils/HttpUtils.java
create mode 100644 user-service/src/main/java/com/mh/user/utils/IPUtils.java
create mode 100644 user-service/src/main/java/com/mh/user/utils/JwtTokenUtils.java
create mode 100644 user-service/src/main/java/com/mh/user/utils/PasswordEncoder.java
create mode 100644 user-service/src/main/java/com/mh/user/utils/PasswordUtils.java
create mode 100644 user-service/src/main/java/com/mh/user/utils/QuerySendThread.java
create mode 100644 user-service/src/main/java/com/mh/user/utils/SecurityUtils.java
create mode 100644 user-service/src/main/java/com/mh/user/utils/SendOrderUtils.java
create mode 100644 user-service/src/main/java/com/mh/user/utils/SimpleWeather.java
create mode 100644 user-service/src/main/java/com/mh/user/utils/SpringBeanUtil.java
create mode 100644 user-service/src/main/java/com/mh/user/utils/SpringContextUtils.java
create mode 100644 user-service/src/main/java/com/mh/user/utils/Test.java
create mode 100644 user-service/src/main/java/com/mh/user/utils/ThreadPoolService.java
create mode 100644 user-service/src/main/java/com/mh/user/utils/TimeDifferenceUtil.java
create mode 100644 user-service/src/main/java/com/mh/user/utils/WeatherUtil.java
create mode 100644 user-service/src/main/java/com/mh/user/vo/LoginBean.java
create mode 100644 user-service/src/main/resources/bootstrap.yml
create mode 100644 user-service/src/main/resources/log4j.properties
create mode 100644 user-service/src/main/resources/socket.yml
create mode 100644 user-service/src/test/java/com/mh/user/DealDataTest.java
create mode 100644 user-service/src/test/java/com/mh/user/ExceptionTest.java
create mode 100644 user-service/src/test/java/com/mh/user/ReportTest1.java
create mode 100644 user-service/src/test/java/com/mh/user/SysUserTest.java
create mode 100644 user-service/src/test/java/com/mh/user/TestJwtUtils.java
create mode 100644 user-service/src/test/java/com/mh/user/UserServiceApplicationTests.java
create mode 100644 user-service/src/test/java/com/mh/user/chart/ChartTest.java
create mode 100644 user-service/src/test/java/com/mh/user/device/CRC16Test.java
create mode 100644 user-service/src/test/java/com/mh/user/device/DeviceTest.java
create mode 100644 user-service/src/test/java/com/mh/user/param/ParamTest.java
create mode 100644 user-service/src/test/java/com/mh/user/receive/AnalysisReceiveOrder485.java
create mode 100644 user-service/src/test/java/com/mh/user/receive/receiveTest.java
create mode 100644 user-service/src/test/java/com/mh/user/socket/BIOServer.java
create mode 100644 user-service/src/test/java/com/mh/user/socket/NIOServer.java
create mode 100644 user-service/src/test/java/com/mh/user/socket/NIOServer2.java
create mode 100644 user-service/src/test/java/com/mh/user/socket/NIOServerV3.java
create mode 100644 user-service/src/test/java/com/mh/user/socket/NettyClientTest.java
create mode 100644 user-service/src/test/java/com/mh/user/socket/NettyEchoServer.java
diff --git a/common/pom.xml b/common/pom.xml
new file mode 100644
index 0000000..46ba43c
--- /dev/null
+++ b/common/pom.xml
@@ -0,0 +1,55 @@
+
+
+
+ com.mh
+ mh_esi
+ 1.0-SNAPSHOT
+
+ 4.0.0
+
+ com.mh
+ common
+ 0.0.1-SNAPSHOT
+ jar
+
+
+ UTF-8
+ UTF-8
+ 1.8
+ 1.8
+ 1.8
+
+
+
+
+ com.alibaba
+ fastjson
+ 1.2.31
+
+
+
+ com.github.pagehelper
+ pagehelper-spring-boot-starter
+ 1.2.13
+
+
+
+ org.springframework.boot
+ spring-boot-starter-web
+
+
+
+ commons-beanutils
+ commons-beanutils
+ 1.9.3
+
+
+
+ org.apache.poi
+ poi-ooxml
+ 4.0.1
+
+
+
diff --git a/common/src/main/java/com/mh/common/dto/RespDTO.java b/common/src/main/java/com/mh/common/dto/RespDTO.java
new file mode 100644
index 0000000..06cb8d6
--- /dev/null
+++ b/common/src/main/java/com/mh/common/dto/RespDTO.java
@@ -0,0 +1,26 @@
+package com.mh.common.dto;
+
+import java.io.Serializable;
+
+public class RespDTO implements Serializable{
+
+
+ public int code = 0;
+ public String error = "";
+ public T data;
+
+ public static RespDTO onSuc(Object data) {
+ RespDTO resp = new RespDTO();
+ resp.data = data;
+ return resp;
+ }
+
+ @Override
+ public String toString() {
+ return "RespDTO{" +
+ "code=" + code +
+ ", error='" + error + '\'' +
+ ", data=" + data +
+ '}';
+ }
+}
diff --git a/common/src/main/java/com/mh/common/exception/BaseErrorInfo.java b/common/src/main/java/com/mh/common/exception/BaseErrorInfo.java
new file mode 100644
index 0000000..83a7af2
--- /dev/null
+++ b/common/src/main/java/com/mh/common/exception/BaseErrorInfo.java
@@ -0,0 +1,9 @@
+package com.mh.common.exception;
+
+public interface BaseErrorInfo {
+ /** 错误码*/
+ int getResultCode();
+
+ /** 错误描述*/
+ String getResultMsg();
+}
diff --git a/common/src/main/java/com/mh/common/exception/CommonNum.java b/common/src/main/java/com/mh/common/exception/CommonNum.java
new file mode 100644
index 0000000..5141a1b
--- /dev/null
+++ b/common/src/main/java/com/mh/common/exception/CommonNum.java
@@ -0,0 +1,50 @@
+package com.mh.common.exception;
+
+public enum CommonNum implements BaseErrorInfo {
+ /**
+ * 自定义错误信息
+ */
+ SUCCESS(200, "成功!"),
+ BODY_NOT_MATCH(400,"请求的数据格式不符!"),
+ SIGNATURE_NOT_MATCH(401,"请求的数字签名不匹配!"),
+ NOT_FOUND(404, "未找到该资源!"),
+ INTERNAL_SERVER_ERROR(500, "服务器内部错误!"),
+ SERVER_BUSY(503,"服务器正忙,请稍后再试!"),
+
+ OK(0, ""),
+ FAIL(-1, "操作失败"),
+ RPC_ERROR(-2,"远程调度失败"),
+ USER_NOT_FOUND(1000,"用户不存在"),
+ USER_PASSWORD_ERROR(1001,"密码错误"),
+ GET_TOKEN_FAIL(1002,"获取token失败"),
+ TOKEN_IS_NOT_MATCH_USER(1003,"请使用自己的token进行接口请求"),
+ BLOG_IS_NOT_EXIST(2001,"该博客不存在");
+
+ /**
+ * 错误码
+ */
+ private int resultCode;
+
+ /**
+ * 错误描述
+ */
+ private String resultMsg;
+
+
+ CommonNum(int resultCode, String resultMsg) {
+ this.resultCode = resultCode;
+ this.resultMsg = resultMsg;
+ }
+
+ @Override
+ public int getResultCode() {
+ return resultCode;
+ }
+
+ @Override
+ public String getResultMsg() {
+ return resultMsg;
+ }
+}
+
+
diff --git a/common/src/main/java/com/mh/common/exception/GlobalException.java b/common/src/main/java/com/mh/common/exception/GlobalException.java
new file mode 100644
index 0000000..188411a
--- /dev/null
+++ b/common/src/main/java/com/mh/common/exception/GlobalException.java
@@ -0,0 +1,52 @@
+package com.mh.common.exception;
+import com.mh.common.http.HttpResult;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.web.bind.annotation.ControllerAdvice;
+import org.springframework.web.bind.annotation.ExceptionHandler;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+@ControllerAdvice
+public class GlobalException {
+ private static final Logger logger = LoggerFactory.getLogger(GlobalException.class);
+
+ /**
+ * 处理自定义异常
+ * @param e
+ * @return
+ */
+ @ResponseBody
+ @ExceptionHandler(value = ServiceRuntimeException.class)
+ public HttpResult serviceRuntimeException(ServiceRuntimeException e){
+ logger.error("发生业务异常!原因是:{}",e.getMessage());
+ return HttpResult.error(e.getCode(),e.getMessage());
+
+ }
+
+ /**
+ * 处理空指针异常
+ * @param e
+ * @return
+ */
+ @ResponseBody
+ @ExceptionHandler(value = NullPointerException.class)
+ public HttpResult exceptionHandler(NullPointerException e){
+ logger.error("发生空指针异常!原因是:",e);
+ return HttpResult.error(CommonNum.BODY_NOT_MATCH.toString());
+
+ }
+
+ /**
+ * 其它异常
+ * @param e
+ * @return
+ */
+ @ResponseBody
+ @ExceptionHandler(value = Exception.class)
+ public HttpResult exceptionHandler(Exception e){
+ logger.error("发生空指针异常!原因是:",e);
+ return HttpResult.error(CommonNum.INTERNAL_SERVER_ERROR.toString());
+
+ }
+
+}
diff --git a/common/src/main/java/com/mh/common/exception/ServiceRuntimeException.java b/common/src/main/java/com/mh/common/exception/ServiceRuntimeException.java
new file mode 100644
index 0000000..c659a54
--- /dev/null
+++ b/common/src/main/java/com/mh/common/exception/ServiceRuntimeException.java
@@ -0,0 +1,64 @@
+package com.mh.common.exception;
+
+public class ServiceRuntimeException extends RuntimeException{
+ /**
+ * 错误码
+ */
+ private int code;
+ /**
+ * 错误信息
+ */
+ private String message;
+
+ public ServiceRuntimeException(String message){
+ super(message);
+ this.message = message;
+
+ }
+
+ public ServiceRuntimeException(int code,String message){
+ super(message);
+ this.code = code;
+ this.message = message;
+
+ }
+
+ //Throwable是Error和Exception的父类,用来定义所有可以作为异常被抛出来的类。
+ public ServiceRuntimeException(int code,String message,Throwable cause){
+ super(message,cause);
+ this.code = code;
+ this.message = message;
+
+ }
+
+ public ServiceRuntimeException(BaseErrorInfo baseErrorInfo){
+ super(baseErrorInfo.getResultMsg());
+ this.code = baseErrorInfo.getResultCode();
+ this.message = baseErrorInfo.getResultMsg();
+ }
+
+ public ServiceRuntimeException(BaseErrorInfo baseErrorInfo,Throwable cause){
+ super(baseErrorInfo.getResultMsg(),cause);
+ this.code = baseErrorInfo.getResultCode();
+ this.message = baseErrorInfo.getResultMsg();
+ }
+
+
+ public int getCode() {
+ return code;
+ }
+
+ public void setCode(int code) {
+ this.code = code;
+ }
+
+ @Override
+ public String getMessage() {
+ return message;
+ }
+
+ public void setMessage(String message) {
+ this.message = message;
+ }
+}
+
diff --git a/common/src/main/java/com/mh/common/http/HttpResult.java b/common/src/main/java/com/mh/common/http/HttpResult.java
new file mode 100644
index 0000000..c320830
--- /dev/null
+++ b/common/src/main/java/com/mh/common/http/HttpResult.java
@@ -0,0 +1,96 @@
+package com.mh.common.http;
+
+/**
+ * HTTP结果封装
+ * @author Louis
+ * @date Jan 12, 2019
+ */
+public class HttpResult {
+
+ private int code = 200; // 为成功
+ private String msg; // 消息
+ private Object data; // 数据对象
+ private int count; // 记录数
+
+ public static HttpResult error() {
+
+ return error(HttpStatus.SC_INTERNAL_SERVER_ERROR, "未知异常,请联系管理员");
+ }
+
+ public static HttpResult error(String msg)
+ {
+ return error(HttpStatus.SC_INTERNAL_SERVER_ERROR, msg);
+ }
+
+ public static HttpResult error(int code, String msg) {
+ HttpResult r = new HttpResult();
+ r.setCode(code);
+ r.setMsg(msg);
+ return r;
+ }
+
+ public static HttpResult ok(String msg) {
+ HttpResult r = new HttpResult();
+ r.setMsg(msg);
+ return r;
+ }
+
+ public static HttpResult ok(Object data) {
+ HttpResult r = new HttpResult();
+ r.setData(data);
+ return r;
+ }
+
+ public static HttpResult ok(String msg, Object data) {
+ HttpResult r = new HttpResult();
+ r.setMsg(msg);
+ r.setData(data);
+ return r;
+ }
+
+ public static HttpResult ok(int count, Object data) {
+ HttpResult r = new HttpResult();
+ r.setCount(count);
+ r.setData(data);
+ return r;
+ }
+
+ public static HttpResult ok() {
+ HttpResult r = new HttpResult();
+ r.setMsg("success");
+ r.setCode(200);
+ return r;
+ }
+
+ 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 Object getData() {
+ return data;
+ }
+
+ public void setData(Object data) {
+ this.data = data;
+ }
+
+ public int getCount() {
+ return count;
+ }
+
+ public void setCount(int count) {
+ this.count = count;
+ }
+}
diff --git a/common/src/main/java/com/mh/common/http/HttpStatus.java b/common/src/main/java/com/mh/common/http/HttpStatus.java
new file mode 100644
index 0000000..1c73e17
--- /dev/null
+++ b/common/src/main/java/com/mh/common/http/HttpStatus.java
@@ -0,0 +1,149 @@
+package com.mh.common.http;
+
+/**
+ * Constants enumerating the HTTP status codes.
+ * All status codes defined in RFC1945 (HTTP/1.0), RFC2616 (HTTP/1.1), and
+ * RFC2518 (WebDAV) are listed.
+ *
+ *
+ *
+ * @since 4.0
+ */
+public interface HttpStatus {
+
+ // --- 1xx Informational ---
+
+ /** {@code 100 Continue} (HTTP/1.1 - RFC 2616) */
+ public static final int SC_CONTINUE = 100;
+ /** {@code 101 Switching Protocols} (HTTP/1.1 - RFC 2616)*/
+ public static final int SC_SWITCHING_PROTOCOLS = 101;
+ /** {@code 102 Processing} (WebDAV - RFC 2518) */
+ public static final int SC_PROCESSING = 102;
+
+ // --- 2xx Success ---
+
+ /** {@code 200 OK} (HTTP/1.0 - RFC 1945) */
+ public static final int SC_OK = 200;
+ /** {@code 201 Created} (HTTP/1.0 - RFC 1945) */
+ public static final int SC_CREATED = 201;
+ /** {@code 202 Accepted} (HTTP/1.0 - RFC 1945) */
+ public static final int SC_ACCEPTED = 202;
+ /** {@code 203 Non Authoritative Information} (HTTP/1.1 - RFC 2616) */
+ public static final int SC_NON_AUTHORITATIVE_INFORMATION = 203;
+ /** {@code 204 No Content} (HTTP/1.0 - RFC 1945) */
+ public static final int SC_NO_CONTENT = 204;
+ /** {@code 205 Reset Content} (HTTP/1.1 - RFC 2616) */
+ public static final int SC_RESET_CONTENT = 205;
+ /** {@code 206 Partial Content} (HTTP/1.1 - RFC 2616) */
+ public static final int SC_PARTIAL_CONTENT = 206;
+ /**
+ * {@code 207 Multi-Status} (WebDAV - RFC 2518)
+ * or
+ * {@code 207 Partial Update OK} (HTTP/1.1 - draft-ietf-http-v11-spec-rev-01?)
+ */
+ public static final int SC_MULTI_STATUS = 207;
+
+ // --- 3xx Redirection ---
+
+ /** {@code 300 Mutliple Choices} (HTTP/1.1 - RFC 2616) */
+ public static final int SC_MULTIPLE_CHOICES = 300;
+ /** {@code 301 Moved Permanently} (HTTP/1.0 - RFC 1945) */
+ public static final int SC_MOVED_PERMANENTLY = 301;
+ /** {@code 302 Moved Temporarily} (Sometimes {@code Found}) (HTTP/1.0 - RFC 1945) */
+ public static final int SC_MOVED_TEMPORARILY = 302;
+ /** {@code 303 See Other} (HTTP/1.1 - RFC 2616) */
+ public static final int SC_SEE_OTHER = 303;
+ /** {@code 304 Not Modified} (HTTP/1.0 - RFC 1945) */
+ public static final int SC_NOT_MODIFIED = 304;
+ /** {@code 305 Use Proxy} (HTTP/1.1 - RFC 2616) */
+ public static final int SC_USE_PROXY = 305;
+ /** {@code 307 Temporary Redirect} (HTTP/1.1 - RFC 2616) */
+ public static final int SC_TEMPORARY_REDIRECT = 307;
+
+ // --- 4xx Client Error ---
+
+ /** {@code 400 Bad Request} (HTTP/1.1 - RFC 2616) */
+ public static final int SC_BAD_REQUEST = 400;
+ /** {@code 401 Unauthorized} (HTTP/1.0 - RFC 1945) */
+ public static final int SC_UNAUTHORIZED = 401;
+ /** {@code 402 Payment Required} (HTTP/1.1 - RFC 2616) */
+ public static final int SC_PAYMENT_REQUIRED = 402;
+ /** {@code 403 Forbidden} (HTTP/1.0 - RFC 1945) */
+ public static final int SC_FORBIDDEN = 403;
+ /** {@code 404 Not Found} (HTTP/1.0 - RFC 1945) */
+ public static final int SC_NOT_FOUND = 404;
+ /** {@code 405 Method Not Allowed} (HTTP/1.1 - RFC 2616) */
+ public static final int SC_METHOD_NOT_ALLOWED = 405;
+ /** {@code 406 Not Acceptable} (HTTP/1.1 - RFC 2616) */
+ public static final int SC_NOT_ACCEPTABLE = 406;
+ /** {@code 407 Proxy Authentication Required} (HTTP/1.1 - RFC 2616)*/
+ public static final int SC_PROXY_AUTHENTICATION_REQUIRED = 407;
+ /** {@code 408 Request Timeout} (HTTP/1.1 - RFC 2616) */
+ public static final int SC_REQUEST_TIMEOUT = 408;
+ /** {@code 409 Conflict} (HTTP/1.1 - RFC 2616) */
+ public static final int SC_CONFLICT = 409;
+ /** {@code 410 Gone} (HTTP/1.1 - RFC 2616) */
+ public static final int SC_GONE = 410;
+ /** {@code 411 Length Required} (HTTP/1.1 - RFC 2616) */
+ public static final int SC_LENGTH_REQUIRED = 411;
+ /** {@code 412 Precondition Failed} (HTTP/1.1 - RFC 2616) */
+ public static final int SC_PRECONDITION_FAILED = 412;
+ /** {@code 413 Request Entity Too Large} (HTTP/1.1 - RFC 2616) */
+ public static final int SC_REQUEST_TOO_LONG = 413;
+ /** {@code 414 Request-URI Too Long} (HTTP/1.1 - RFC 2616) */
+ public static final int SC_REQUEST_URI_TOO_LONG = 414;
+ /** {@code 415 Unsupported Media Type} (HTTP/1.1 - RFC 2616) */
+ public static final int SC_UNSUPPORTED_MEDIA_TYPE = 415;
+ /** {@code 416 Requested Range Not Satisfiable} (HTTP/1.1 - RFC 2616) */
+ public static final int SC_REQUESTED_RANGE_NOT_SATISFIABLE = 416;
+ /** {@code 417 Expectation Failed} (HTTP/1.1 - RFC 2616) */
+ public static final int SC_EXPECTATION_FAILED = 417;
+
+ /**
+ * Static constant for a 418 error.
+ * {@code 418 Unprocessable Entity} (WebDAV drafts?)
+ * or {@code 418 Reauthentication Required} (HTTP/1.1 drafts?)
+ */
+ // not used
+ // public static final int SC_UNPROCESSABLE_ENTITY = 418;
+
+ /**
+ * Static constant for a 419 error.
+ * {@code 419 Insufficient Space on Resource}
+ * (WebDAV - draft-ietf-webdav-protocol-05?)
+ * or {@code 419 Proxy Reauthentication Required}
+ * (HTTP/1.1 drafts?)
+ */
+ public static final int SC_INSUFFICIENT_SPACE_ON_RESOURCE = 419;
+ /**
+ * Static constant for a 420 error.
+ * {@code 420 Method Failure}
+ * (WebDAV - draft-ietf-webdav-protocol-05?)
+ */
+ public static final int SC_METHOD_FAILURE = 420;
+ /** {@code 422 Unprocessable Entity} (WebDAV - RFC 2518) */
+ public static final int SC_UNPROCESSABLE_ENTITY = 422;
+ /** {@code 423 Locked} (WebDAV - RFC 2518) */
+ public static final int SC_LOCKED = 423;
+ /** {@code 424 Failed Dependency} (WebDAV - RFC 2518) */
+ public static final int SC_FAILED_DEPENDENCY = 424;
+
+ // --- 5xx Server Error ---
+
+ /** {@code 500 Server Error} (HTTP/1.0 - RFC 1945) */
+ public static final int SC_INTERNAL_SERVER_ERROR = 500;
+ /** {@code 501 Not Implemented} (HTTP/1.0 - RFC 1945) */
+ public static final int SC_NOT_IMPLEMENTED = 501;
+ /** {@code 502 Bad Gateway} (HTTP/1.0 - RFC 1945) */
+ public static final int SC_BAD_GATEWAY = 502;
+ /** {@code 503 Service Unavailable} (HTTP/1.0 - RFC 1945) */
+ public static final int SC_SERVICE_UNAVAILABLE = 503;
+ /** {@code 504 Gateway Timeout} (HTTP/1.1 - RFC 2616) */
+ public static final int SC_GATEWAY_TIMEOUT = 504;
+ /** {@code 505 HTTP Version Not Supported} (HTTP/1.1 - RFC 2616) */
+ public static final int SC_HTTP_VERSION_NOT_SUPPORTED = 505;
+
+ /** {@code 507 Insufficient Storage} (WebDAV - RFC 2518) */
+ public static final int SC_INSUFFICIENT_STORAGE = 507;
+
+}
diff --git a/common/src/main/java/com/mh/common/page/ColumnFilter.java b/common/src/main/java/com/mh/common/page/ColumnFilter.java
new file mode 100644
index 0000000..9a1a5ac
--- /dev/null
+++ b/common/src/main/java/com/mh/common/page/ColumnFilter.java
@@ -0,0 +1,32 @@
+package com.mh.common.page;
+
+/**
+ * 分页查询列过滤器
+ * @author Louis
+ * @date Aug 19, 2018
+ */
+public class ColumnFilter {
+
+ /**
+ * 过滤列名
+ */
+ private String name;
+ /**
+ * 查询的值
+ */
+ private String value;
+
+ public String getName() {
+ return name;
+ }
+ public void setName(String name) {
+ this.name = name;
+ }
+ public String getValue() {
+ return value;
+ }
+ public void setValue(String value) {
+ this.value = value;
+ }
+
+}
diff --git a/common/src/main/java/com/mh/common/page/MybatisPageHelper.java b/common/src/main/java/com/mh/common/page/MybatisPageHelper.java
new file mode 100644
index 0000000..7e6d4b1
--- /dev/null
+++ b/common/src/main/java/com/mh/common/page/MybatisPageHelper.java
@@ -0,0 +1,63 @@
+package com.mh.common.page;
+
+import java.util.List;
+
+import com.github.pagehelper.PageHelper;
+import com.github.pagehelper.PageInfo;
+import com.mh.common.utils.ReflectionUtils;
+
+/**
+ * MyBatis 分页查询助手
+ * @author Louis
+ * @date Jan 12, 2019
+ */
+public class MybatisPageHelper {
+
+ public static final String findPage = "findPage";
+
+ /**
+ * 分页查询, 约定查询方法名为 “findPage”
+ * @param pageRequest 分页请求
+ * @param mapper Dao对象,MyBatis的 Mapper
+ * @param
+ * @return
+ */
+ public static PageResult findPage(PageRequest pageRequest, Object mapper) {
+ return findPage(pageRequest, mapper, findPage);
+ }
+
+ /**
+ * 调用分页插件进行分页查询
+ * @param pageRequest 分页请求
+ * @param mapper Dao对象,MyBatis的 Mapper
+ * @param queryMethodName 要分页的查询方法名
+ * @param args 方法参数
+ * @return
+ */
+ @SuppressWarnings({ "unchecked", "rawtypes" })
+ public static PageResult findPage(PageRequest pageRequest, Object mapper, String queryMethodName, Object... args) {
+ // 设置分页参数
+ int pageNum = pageRequest.getPageNum();
+ int pageSize = pageRequest.getPageSize();
+ PageHelper.startPage(pageNum, pageSize);
+ // 利用反射调用查询方法
+ Object result = ReflectionUtils.invoke(mapper, queryMethodName, args);
+ return getPageResult(pageRequest, new PageInfo((List) result));
+ }
+
+ /**
+ * 将分页信息封装到统一的接口
+ * @param pageRequest
+ * @return
+ */
+ private static PageResult getPageResult(PageRequest pageRequest, PageInfo> pageInfo) {
+ PageResult pageResult = new PageResult();
+ pageResult.setPageNum(pageInfo.getPageNum());
+ pageResult.setPageSize(pageInfo.getPageSize());
+ pageResult.setTotalSize(pageInfo.getTotal());
+ pageResult.setTotalPages(pageInfo.getPages());
+ pageResult.setContent(pageInfo.getList());
+ return pageResult;
+ }
+
+}
diff --git a/common/src/main/java/com/mh/common/page/PageRequest.java b/common/src/main/java/com/mh/common/page/PageRequest.java
new file mode 100644
index 0000000..97ed3dd
--- /dev/null
+++ b/common/src/main/java/com/mh/common/page/PageRequest.java
@@ -0,0 +1,46 @@
+package com.mh.common.page;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * 分页请求
+ * @author Louis
+ * @date Aug 19, 2018
+ */
+public class PageRequest {
+ /**
+ * 当前页码
+ */
+ private int pageNum = 1;
+ /**
+ * 每页数量
+ */
+ private int pageSize = 10;
+ /**
+ * 每页数量
+ */
+ private Map columnFilters = new HashMap();
+
+ public int getPageNum() {
+ return pageNum;
+ }
+ public void setPageNum(int pageNum) {
+ this.pageNum = pageNum;
+ }
+ public int getPageSize() {
+ return pageSize;
+ }
+ public void setPageSize(int pageSize) {
+ this.pageSize = pageSize;
+ }
+ public Map getColumnFilters() {
+ return columnFilters;
+ }
+ public void setColumnFilters(Map columnFilters) {
+ this.columnFilters = columnFilters;
+ }
+ public ColumnFilter getColumnFilter(String name) {
+ return columnFilters.get(name);
+ }
+}
diff --git a/common/src/main/java/com/mh/common/page/PageResult.java b/common/src/main/java/com/mh/common/page/PageResult.java
new file mode 100644
index 0000000..2c9ad52
--- /dev/null
+++ b/common/src/main/java/com/mh/common/page/PageResult.java
@@ -0,0 +1,61 @@
+package com.mh.common.page;
+
+import java.util.List;
+
+/**
+ * 分页返回结果
+ * @author Louis
+ * @date Jan 12, 2019
+ */
+public class PageResult {
+ /**
+ * 当前页码
+ */
+ private int pageNum;
+ /**
+ * 每页数量
+ */
+ private int pageSize;
+ /**
+ * 记录总数
+ */
+ private long totalSize;
+ /**
+ * 页码总数
+ */
+ private int totalPages;
+ /**
+ * 分页数据
+ */
+ private List> content;
+ public int getPageNum() {
+ return pageNum;
+ }
+ public void setPageNum(int pageNum) {
+ this.pageNum = pageNum;
+ }
+ public int getPageSize() {
+ return pageSize;
+ }
+ public void setPageSize(int pageSize) {
+ this.pageSize = pageSize;
+ }
+ public long getTotalSize() {
+ return totalSize;
+ }
+ public void setTotalSize(long totalSize) {
+ this.totalSize = totalSize;
+ }
+ public int getTotalPages() {
+ return totalPages;
+ }
+ public void setTotalPages(int totalPages) {
+ this.totalPages = totalPages;
+ }
+ public List> getContent() {
+ return content;
+ }
+ public void setContent(List> content) {
+ this.content = content;
+ }
+}
diff --git a/common/src/main/java/com/mh/common/service/CurdService.java b/common/src/main/java/com/mh/common/service/CurdService.java
new file mode 100644
index 0000000..a76e871
--- /dev/null
+++ b/common/src/main/java/com/mh/common/service/CurdService.java
@@ -0,0 +1,50 @@
+package com.mh.common.service;
+
+import com.mh.common.page.PageRequest;
+import com.mh.common.page.PageResult;
+
+import java.util.List;
+
+/**
+ * 通用CURD接口
+ */
+public interface CurdService {
+
+ /**
+ * 保存操作
+ * @param record
+ * @return
+ */
+ int save(T record);
+
+ /**
+ * 删除操作
+ * @param record
+ * @return
+ */
+ int delete(T record);
+
+ /**
+ * 批量删除操作
+ * @param records
+ */
+ int delete(List records);
+
+ /**
+ * 根据ID查询
+ * @param id
+ * @return
+ */
+ T findById(Long id);
+
+ /**
+ * 分页查询
+ * 这里统一封装了分页请求和结果,避免直接引入具体框架的分页对象, 如MyBatis或JPA的分页对象
+ * 从而避免因为替换ORM框架而导致服务层、控制层的分页接口也需要变动的情况,替换ORM框架也不会
+ * 影响服务层以上的分页接口,起到了解耦的作用
+ * @param pageRequest 自定义,统一分页查询请求
+ * @return PageResult 自定义,统一分页查询结果
+ */
+ PageResult findPage(PageRequest pageRequest);
+
+}
\ No newline at end of file
diff --git a/common/src/main/java/com/mh/common/utils/DateTimeUtils.java b/common/src/main/java/com/mh/common/utils/DateTimeUtils.java
new file mode 100644
index 0000000..ae7d735
--- /dev/null
+++ b/common/src/main/java/com/mh/common/utils/DateTimeUtils.java
@@ -0,0 +1,32 @@
+package com.mh.common.utils;
+
+import java.text.SimpleDateFormat;
+import java.util.Date;
+
+/**
+ * 日期时间相关工具
+ * @author Louis
+ * @date Jan 14, 2019
+ */
+public class DateTimeUtils {
+
+ public static final String DATE_FORMAT = "yyyy-MM-dd HH:mm:ss";
+
+ /**
+ * 获取当前标准格式化日期时间
+ * @param date
+ * @return
+ */
+ public static String getDateTime() {
+ return getDateTime(new Date());
+ }
+
+ /**
+ * 标准格式化日期时间
+ * @param date
+ * @return
+ */
+ public static String getDateTime(Date date) {
+ return (new SimpleDateFormat(DATE_FORMAT)).format(date);
+ }
+}
diff --git a/common/src/main/java/com/mh/common/utils/FileUtils.java b/common/src/main/java/com/mh/common/utils/FileUtils.java
new file mode 100644
index 0000000..addd5af
--- /dev/null
+++ b/common/src/main/java/com/mh/common/utils/FileUtils.java
@@ -0,0 +1,42 @@
+package com.mh.common.utils;
+
+import javax.servlet.http.HttpServletResponse;
+import java.io.BufferedInputStream;
+import java.io.BufferedOutputStream;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.InputStream;
+
+/**
+ * 文件相关操作
+ * @author Louis
+ * @date Jan 14, 2019
+ */
+public class FileUtils {
+
+ /**
+ * 下载文件
+ * @param response
+ * @param file
+ * @param newFileName
+ */
+ public static void downloadFile(HttpServletResponse response, File file, String newFileName) {
+ try {
+ response.setHeader("Content-Disposition", "attachment; filename=" + new String(newFileName.getBytes("ISO-8859-1"), "UTF-8"));
+ BufferedOutputStream bos = new BufferedOutputStream(response.getOutputStream());
+ InputStream is = new FileInputStream(file.getAbsolutePath());
+ BufferedInputStream bis = new BufferedInputStream(is);
+ int length = 0;
+ byte[] temp = new byte[1 * 1024 * 10];
+ while ((length = bis.read(temp)) != -1) {
+ bos.write(temp, 0, length);
+ }
+ bos.flush();
+ bis.close();
+ bos.close();
+ is.close();
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+}
diff --git a/common/src/main/java/com/mh/common/utils/IOUtils.java b/common/src/main/java/com/mh/common/utils/IOUtils.java
new file mode 100644
index 0000000..1c0c9b0
--- /dev/null
+++ b/common/src/main/java/com/mh/common/utils/IOUtils.java
@@ -0,0 +1,26 @@
+package com.mh.common.utils;
+
+import java.io.Closeable;
+import java.io.IOException;
+
+/**
+ * IO相关工具类
+ * @author Louis
+ * @date Oct 29, 2018
+ */
+public class IOUtils {
+
+ /**
+ * 关闭对象,连接
+ * @param closeable
+ */
+ public static void closeQuietly(final Closeable closeable) {
+ try {
+ if (closeable != null) {
+ closeable.close();
+ }
+ } catch (final IOException ioe) {
+ // ignore
+ }
+ }
+}
diff --git a/common/src/main/java/com/mh/common/utils/PoiUtils.java b/common/src/main/java/com/mh/common/utils/PoiUtils.java
new file mode 100644
index 0000000..29badd6
--- /dev/null
+++ b/common/src/main/java/com/mh/common/utils/PoiUtils.java
@@ -0,0 +1,41 @@
+//package com.mh.common.utils;
+//
+//import java.io.File;
+//import java.io.FileNotFoundException;
+//import java.io.FileOutputStream;
+//import java.io.IOException;
+//import java.io.OutputStream;
+//
+//import org.apache.poi.ss.usermodel.Workbook;
+//
+///**
+// * POI相关操作
+// * @author Louis
+// * @date Jan 14, 2019
+// */
+//public class PoiUtils {
+//
+// /**
+// * 生成Excel文件
+// * @param workbook
+// * @param fileName
+// * @return
+// */
+// public static File createExcelFile(Workbook workbook, String fileName) {
+// OutputStream stream = null;
+// File file = null;
+// try {
+// file = File.createTempFile(fileName, ".xlsx");
+// stream = new FileOutputStream(file.getAbsoluteFile());
+// workbook.write(stream);
+// } catch (FileNotFoundException e) {
+// e.printStackTrace();
+// } catch (IOException e) {
+// e.printStackTrace();
+// } finally {
+// IOUtils.closeQuietly(workbook);
+// IOUtils.closeQuietly(stream);
+// }
+// return file;
+// }
+//}
diff --git a/common/src/main/java/com/mh/common/utils/ReflectionUtils.java b/common/src/main/java/com/mh/common/utils/ReflectionUtils.java
new file mode 100644
index 0000000..57c1a38
--- /dev/null
+++ b/common/src/main/java/com/mh/common/utils/ReflectionUtils.java
@@ -0,0 +1,78 @@
+package com.mh.common.utils;
+
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+
+/**
+ * 反射相关辅助方法
+ * @author Louis
+ * @date Aug 19, 2018
+ */
+public class ReflectionUtils {
+
+
+ /**
+ * 根据方法名调用指定对象的方法
+ * @param object 要调用方法的对象
+ * @param method 要调用的方法名
+ * @param args 参数对象数组
+ * @return
+ */
+ public static Object invoke(Object object, String method, Object... args) {
+ Object result = null;
+ Class extends Object> clazz = object.getClass();
+ Method queryMethod = getMethod(clazz, method, args);
+ if(queryMethod != null) {
+ try {
+ result = queryMethod.invoke(object, args);
+ } catch (IllegalAccessException e) {
+ e.printStackTrace();
+ } catch (IllegalArgumentException e) {
+ e.printStackTrace();
+ } catch (InvocationTargetException e) {
+ e.printStackTrace();
+ }
+ } else {
+ try {
+ throw new NoSuchMethodException(clazz.getName() + " 类中没有找到 " + method + " 方法。");
+ } catch (NoSuchMethodException e) {
+ e.printStackTrace();
+ }
+ }
+ return result;
+ }
+
+ /**
+ * 根据方法名和参数对象查找方法
+ * @param clazz
+ * @param name
+ * @param args 参数实例数据
+ * @return
+ */
+ public static Method getMethod(Class extends Object> clazz, String name, Object[] args) {
+ Method queryMethod = null;
+ Method[] methods = clazz.getMethods();
+ for(Method method:methods) {
+ if(method.getName().equals(name)) {
+ Class>[] parameterTypes = method.getParameterTypes();
+ if(parameterTypes.length == args.length) {
+ boolean isSameMethod = true;
+ for(int i=0; i
+
+ 4.0.0
+ com.mh
+ mh_esi
+ 1.0-SNAPSHOT
+ pom
+
+ common
+ user-service
+
+
+ org.springframework.boot
+ spring-boot-starter-parent
+ 2.2.5.RELEASE
+
+
+
+ UTF-8
+ UTF-8
+ 1.8
+ Hoxton.SR3
+ 2.9.2
+
+
+
+ org.springframework.boot
+ spring-boot-starter-test
+ test
+
+
+ org.jolokia
+ jolokia-core
+
+
+ io.springfox
+ springfox-swagger2
+ ${swagger.version}
+
+
+ io.springfox
+ springfox-swagger-ui
+ ${swagger.version}
+
+
+ org.springframework.boot
+ spring-boot-starter-aop
+ 2.2.5.RELEASE
+
+
+ org.rxtx
+ rxtx
+ 2.1.7
+
+
+ com.github.purejavacomm
+ purejavacomm
+ 1.0.1.RELEASE
+
+
+
+
+
+ org.springframework.cloud
+ spring-cloud-dependencies
+ ${spring-cloud.version}
+ pom
+ import
+
+
+
+
diff --git a/user-service/HELP.md b/user-service/HELP.md
new file mode 100644
index 0000000..5ea1b3b
--- /dev/null
+++ b/user-service/HELP.md
@@ -0,0 +1,33 @@
+# Getting Started
+
+### Reference Documentation
+For further reference, please consider the following sections:
+
+* [Official Apache Maven documentation](https://maven.apache.org/guides/index.html)
+* [Spring Boot Maven Plugin Reference Guide](https://docs.spring.io/spring-boot/docs/2.2.5.RELEASE/maven-plugin/)
+* [Spring Web](https://docs.spring.io/spring-boot/docs/2.2.5.RELEASE/reference/htmlsingle/#boot-features-developing-web-applications)
+
+### Guides
+The following guides illustrate how to use some features concretely:
+
+* [Service Registration and Discovery](https://spring.io/guides/gs/service-registration-and-discovery/)
+* [Circuit Breaker](https://spring.io/guides/gs/circuit-breaker/)
+* [Building a RESTful Web Service](https://spring.io/guides/gs/rest-service/)
+* [Serving Web Content with Spring MVC](https://spring.io/guides/gs/serving-web-content/)
+* [Building REST services with Spring](https://spring.io/guides/tutorials/bookmarks/)
+
+# Spring Cloud Netflix Maintenance Mode
+
+The dependencies listed below are in maintenance mode. We do not recommend adding them to
+new projects:
+
+* Hystrix
+* Hystrix Dashboard
+
+The decision to move most of the Spring Cloud Netflix projects to maintenance mode was
+a response to Netflix not continuing maintenance of many of the libraries that we provided
+support for.
+
+Please see [this blog entry](https://spring.io/blog/2018/12/12/spring-cloud-greenwich-rc1-available-now#spring-cloud-netflix-projects-entering-maintenance-mode)
+for more information on maintenance mode and a list of suggested replacements for those
+libraries.
diff --git a/user-service/lib/.idea/lib.iml b/user-service/lib/.idea/lib.iml
new file mode 100644
index 0000000..d6ebd48
--- /dev/null
+++ b/user-service/lib/.idea/lib.iml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/user-service/lib/.idea/misc.xml b/user-service/lib/.idea/misc.xml
new file mode 100644
index 0000000..28a804d
--- /dev/null
+++ b/user-service/lib/.idea/misc.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/user-service/lib/.idea/modules.xml b/user-service/lib/.idea/modules.xml
new file mode 100644
index 0000000..b0c4ff6
--- /dev/null
+++ b/user-service/lib/.idea/modules.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/user-service/lib/.idea/vcs.xml b/user-service/lib/.idea/vcs.xml
new file mode 100644
index 0000000..b2bdec2
--- /dev/null
+++ b/user-service/lib/.idea/vcs.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/user-service/lib/.idea/workspace.xml b/user-service/lib/.idea/workspace.xml
new file mode 100644
index 0000000..1347e5a
--- /dev/null
+++ b/user-service/lib/.idea/workspace.xml
@@ -0,0 +1,99 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 1663641449492
+
+
+ 1663641449492
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/user-service/lib/RXTXcomm.jar b/user-service/lib/RXTXcomm.jar
new file mode 100644
index 0000000000000000000000000000000000000000..e1e75034a3841c4382dc220a3ebc75a5dcc92113
GIT binary patch
literal 60984
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
jm&n((7G__(nOy>+ctBMKUGR>X$-6SYmCm7
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%0De^
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