From bfc9c0df6fa3db629e05facbf5c1a6fffce3d4e2 Mon Sep 17 00:00:00 2001 From: fangyang2021 <3020949587@qq.com> Date: Thu, 21 Nov 2024 10:50:53 +0800 Subject: [PATCH] first commit --- .gitignore | 37 + .mvn/wrapper/maven-wrapper.jar | Bin 0 -> 59925 bytes .mvn/wrapper/maven-wrapper.properties | 18 + HELP.md | 10 + bolt-api/pom.xml | 31 + .../java/com/jiluo/bolt/Aladdin/Hasp.java | 1012 +++ .../jiluo/bolt/Aladdin/HaspApiVersion.java | 94 + .../com/jiluo/bolt/Aladdin/HaspStatus.java | 727 ++ .../java/com/jiluo/bolt/Aladdin/HaspTime.java | 118 + .../bolt/common/BigDecimalValueFilter.java | 23 + .../jiluo/bolt/common/CameraDriverEnum.java | 35 + .../com/jiluo/bolt/common/DefectType.java | 50 + .../jiluo/bolt/common/DetectAttribute.java | 38 + .../com/jiluo/bolt/common/DetectConfig.java | 68 + .../java/com/jiluo/bolt/common/DetectJob.java | 34 + .../com/jiluo/bolt/common/DetectMessage.java | 25 + .../com/jiluo/bolt/common/DetectResult.java | 26 + .../jiluo/bolt/common/DetectResultKey.java | 50 + .../com/jiluo/bolt/common/DetectType.java | 34 + .../com/jiluo/bolt/common/LocalStatus.java | 28 + .../jiluo/bolt/common/PermissionValue.java | 28 + .../bolt/entity/dto/AlgorithmConfigDto.java | 39 + .../jiluo/bolt/entity/dto/AlgorithmDto.java | 41 + .../bolt/entity/dto/AlgorithmModelDto.java | 26 + .../com/jiluo/bolt/entity/dto/DetectDto.java | 53 + .../bolt/entity/dto/DetectResultDto.java | 30 + .../com/jiluo/bolt/entity/dto/DeviceDto.java | 92 + .../jiluo/bolt/entity/dto/IdToNameDto.java | 23 + .../com/jiluo/bolt/entity/dto/ImgDto.java | 23 + .../jiluo/bolt/entity/dto/MotorGroupDto.java | 38 + .../jiluo/bolt/entity/dto/PermissionDto.java | 30 + .../com/jiluo/bolt/entity/dto/PointDto.java | 56 + .../bolt/entity/dto/PowerStationDto.java | 45 + .../com/jiluo/bolt/entity/dto/RoleDto.java | 30 + .../bolt/entity/dto/SystemInfoConfigDto.java | 40 + .../jiluo/bolt/entity/dto/TempSenserDto.java | 60 + .../bolt/entity/dto/TempThresholdDto.java | 34 + .../jiluo/bolt/entity/dto/ThemeConfigDto.java | 46 + .../com/jiluo/bolt/entity/dto/UserDto.java | 54 + .../com/jiluo/bolt/entity/vo/AlgorithmVo.java | 35 + .../com/jiluo/bolt/entity/vo/DefectVo.java | 41 + .../com/jiluo/bolt/entity/vo/DeviceVo.java | 56 + .../com/jiluo/bolt/entity/vo/DropDownVo.java | 28 + .../bolt/entity/vo/HistoricalDataVo.java | 39 + .../jiluo/bolt/entity/vo/MotorGroupVo.java | 39 + .../jiluo/bolt/entity/vo/PermissionVo.java | 29 + .../com/jiluo/bolt/entity/vo/PointVo.java | 52 + .../jiluo/bolt/entity/vo/PowerStationVo.java | 39 + .../java/com/jiluo/bolt/entity/vo/RoleVo.java | 46 + .../bolt/entity/vo/SystemInfoConfigVo.java | 38 + .../jiluo/bolt/entity/vo/TempSenserVo.java | 52 + .../jiluo/bolt/entity/vo/ThemeConfigVo.java | 39 + .../java/com/jiluo/bolt/entity/vo/UserVo.java | 49 + bolt-core/pom.xml | 76 + .../com/jiluo/bolt/config/MinioConfig.java | 44 + .../com/jiluo/bolt/config/UploadFile.java | 110 + .../com/jiluo/bolt/domain/DefectInfo.java | 41 + .../java/com/jiluo/bolt/export/Analysis.java | 127 + .../java/com/jiluo/bolt/export/Export.java | 136 + .../java/com/jiluo/bolt/export/Report.java | 278 + .../com/jiluo/bolt/service/AlarmService.java | 22 + .../jiluo/bolt/service/AlgorithmService.java | 23 + .../service/AlgorithmTempleteService.java | 24 + .../com/jiluo/bolt/service/ConfigService.java | 32 + .../com/jiluo/bolt/service/DefectService.java | 35 + .../com/jiluo/bolt/service/DetectService.java | 23 + .../com/jiluo/bolt/service/DeviceService.java | 50 + .../bolt/service/DeviceTempleteService.java | 20 + .../com/jiluo/bolt/service/JobService.java | 41 + .../com/jiluo/bolt/service/MinioService.java | 148 + .../jiluo/bolt/service/MotorGroupService.java | 29 + .../com/jiluo/bolt/service/PointService.java | 42 + .../bolt/service/PowerStationService.java | 27 + .../jiluo/bolt/service/ProductService.java | 13 + .../jiluo/bolt/service/RoleItemService.java | 20 + .../com/jiluo/bolt/service/RoleService.java | 23 + .../jiluo/bolt/service/RoleValueService.java | 25 + .../com/jiluo/bolt/service/UserService.java | 23 + .../jiluo/bolt/service/VersionService.java | 14 + .../bolt/service/impl/AlarmServiceImpl.java | 36 + .../service/impl/AlgorithmServiceImpl.java | 86 + .../impl/AlgorithmTempleteServiceImpl.java | 79 + .../bolt/service/impl/ConfigServiceImpl.java | 85 + .../bolt/service/impl/DefectServiceImpl.java | 106 + .../bolt/service/impl/DetectServiceImpl.java | 63 + .../bolt/service/impl/DeviceServiceImpl.java | 202 + .../impl/DeviceTempleteServiceImpl.java | 54 + .../bolt/service/impl/JobServiceImpl.java | 99 + .../bolt/service/impl/MinioServiceImpl.java | 191 + .../service/impl/MotorGroupServiceImpl.java | 89 + .../bolt/service/impl/PointServiceImpl.java | 152 + .../service/impl/PowerStationServiceImpl.java | 77 + .../bolt/service/impl/ProductServiceImpl.java | 21 + .../service/impl/RoleItemServiceImpl.java | 53 + .../bolt/service/impl/RoleServiceImpl.java | 62 + .../service/impl/RoleValueServiceImpl.java | 64 + .../bolt/service/impl/UserServiceImpl.java | 65 + .../bolt/service/impl/VersionServiceImpl.java | 31 + .../com/jiluo/bolt/util/AesEncryptUtil.java | 259 + .../com/jiluo/bolt/util/BigDecimalUtils.java | 24 + .../java/com/jiluo/bolt/util/CSVUtils.java | 66 + .../java/com/jiluo/bolt/util/DogUtil.java | 984 +++ .../java/com/jiluo/bolt/util/ExcelUtils.java | 72 + .../java/com/jiluo/bolt/util/FileUtils.java | 60 + .../java/com/jiluo/bolt/util/ImgUtils.java | 84 + .../java/com/jiluo/bolt/util/JwtUtils.java | 61 + .../java/com/jiluo/bolt/util/MD5Utils.java | 39 + .../java/com/jiluo/bolt/util/MinioUtil.java | 462 ++ .../java/com/jiluo/bolt/util/MyFileUtils.java | 94 + .../com/jiluo/bolt/util/SessionHolder.java | 24 + .../java/com/jiluo/bolt/util/ShellUtils.java | 129 + .../com/jiluo/bolt/util/SnowFlakeUtil.java | 75 + .../jiluo/bolt/util/SpringContextHolder.java | 27 + .../com/jiluo/bolt/util/SystemDateUtils.java | 126 + .../com/jiluo/bolt/util/ToStringUtils.java | 199 + bolt-core/src/main/resources/mock.jpg | Bin 0 -> 362140 bytes bolt-core/src/main/resources/report.docx | Bin 0 -> 128765 bytes bolt-core/src/main/resources/report.xml | 6641 +++++++++++++++++ bolt-dao/pom.xml | 55 + .../com/jiluo/bolt/config/DateConfig.java | 38 + .../java/com/jiluo/bolt/config/MPConfig.java | 32 + .../com/jiluo/bolt/entity/BaseEntity.java | 38 + .../java/com/jiluo/bolt/entity/po/Alarm.java | 31 + .../com/jiluo/bolt/entity/po/Algorithm.java | 45 + .../jiluo/bolt/entity/po/AlgorithmConfig.java | 46 + .../bolt/entity/po/AlgorithmTemplete.java | 41 + .../java/com/jiluo/bolt/entity/po/Config.java | 37 + .../java/com/jiluo/bolt/entity/po/Defect.java | 64 + .../java/com/jiluo/bolt/entity/po/Detect.java | 46 + .../java/com/jiluo/bolt/entity/po/Device.java | 60 + .../jiluo/bolt/entity/po/DeviceTemplete.java | 34 + .../java/com/jiluo/bolt/entity/po/Job.java | 60 + .../com/jiluo/bolt/entity/po/MotorGroup.java | 41 + .../java/com/jiluo/bolt/entity/po/Point.java | 73 + .../jiluo/bolt/entity/po/PowerStation.java | 45 + .../com/jiluo/bolt/entity/po/Product.java | 37 + .../java/com/jiluo/bolt/entity/po/Role.java | 28 + .../com/jiluo/bolt/entity/po/RoleItem.java | 34 + .../com/jiluo/bolt/entity/po/RoleValue.java | 31 + .../java/com/jiluo/bolt/entity/po/User.java | 37 + .../com/jiluo/bolt/entity/po/Version.java | 37 + .../com/jiluo/bolt/mapper/AlarmMapper.java | 14 + .../bolt/mapper/AlgorithmConfigMapper.java | 14 + .../jiluo/bolt/mapper/AlgorithmMapper.java | 14 + .../bolt/mapper/AlgorithmTempleteMapper.java | 14 + .../com/jiluo/bolt/mapper/ConfigMapper.java | 14 + .../com/jiluo/bolt/mapper/DefectMapper.java | 27 + .../com/jiluo/bolt/mapper/DetectMapper.java | 14 + .../com/jiluo/bolt/mapper/DeviceMapper.java | 14 + .../bolt/mapper/DeviceTempleteMapper.java | 14 + .../java/com/jiluo/bolt/mapper/JobMapper.java | 16 + .../jiluo/bolt/mapper/MotorGroupMapper.java | 14 + .../com/jiluo/bolt/mapper/PointMapper.java | 14 + .../jiluo/bolt/mapper/PowerStationMapper.java | 14 + .../com/jiluo/bolt/mapper/ProductMapper.java | 14 + .../com/jiluo/bolt/mapper/RoleItemMapper.java | 14 + .../com/jiluo/bolt/mapper/RoleMapper.java | 14 + .../jiluo/bolt/mapper/RoleValueMapper.java | 14 + .../com/jiluo/bolt/mapper/UserMapper.java | 14 + .../com/jiluo/bolt/mapper/VersionMapper.java | 14 + .../src/main/resources/mapper/AlarmMapper.xml | 47 + .../mapper/AlgorithmConfigMapper.xml | 59 + .../main/resources/mapper/AlgorithmMapper.xml | 64 + .../mapper/AlgorithmTempleteMapper.xml | 59 + .../main/resources/mapper/ConfigMapper.xml | 55 + .../main/resources/mapper/DefectMapper.xml | 86 + .../main/resources/mapper/DetectMapper.xml | 67 + .../main/resources/mapper/DeviceMapper.xml | 79 + .../resources/mapper/DeviceTempleteMapper.xml | 51 + .../src/main/resources/mapper/JobMapper.xml | 29 + .../resources/mapper/MotorGroupMapper.xml | 55 + .../src/main/resources/mapper/PointMapper.xml | 92 + .../resources/mapper/PowerStationMapper.xml | 59 + .../main/resources/mapper/ProductMapper.xml | 55 + .../main/resources/mapper/RoleItemMapper.xml | 51 + .../src/main/resources/mapper/RoleMapper.xml | 43 + .../main/resources/mapper/RoleValueMapper.xml | 47 + .../src/main/resources/mapper/UserMapper.xml | 51 + .../main/resources/mapper/VersionMapper.xml | 55 + bolt-kernel/pom.xml | 75 + .../com/jiluo/bolt/OKHttp/OkHttpUtil.java | 148 + .../bolt/algorithm/AbstractAlgorithm.java | 34 + .../jiluo/bolt/algorithm/AlgorithmName.java | 45 + .../jiluo/bolt/algorithm/AlgorithmType.java | 12 + .../com/jiluo/bolt/algorithm/IAlgorithm.java | 29 + .../algorithm/algorithm/MockAlgorithm.java | 25 + .../algorithm/algorithm/SelfAlgorithm.java | 25 + .../com/jiluo/bolt/device/AbstractDevice.java | 40 + .../com/jiluo/bolt/device/DeviceStatus.java | 12 + .../com/jiluo/bolt/device/DeviceType.java | 12 + .../com/jiluo/bolt/device/DeviceVender.java | 52 + .../java/com/jiluo/bolt/device/IDevice.java | 43 + .../bolt/device/camera/BaslerCamera.java | 53 + .../bolt/device/camera/BaumerCamera.java | 46 + .../jiluo/bolt/device/camera/LucidCamera.java | 48 + .../jiluo/bolt/device/camera/MockCamera.java | 160 + .../jiluo/bolt/device/plc/MathvisionPlc.java | 122 + .../com/jiluo/bolt/device/plc/MockPlc.java | 73 + .../sensor/CameraTemperatureSensor.java | 47 + .../device/sensor/MockTemperatureSensor.java | 80 + .../device/sensor/RFIDTemperatureSensor.java | 47 + .../com/jiluo/bolt/engine/AbstractEngine.java | 23 + .../com/jiluo/bolt/engine/BoltEngine.java | 143 + .../com/jiluo/bolt/engine/DataCallBack.java | 335 + .../java/com/jiluo/bolt/engine/Engine.java | 43 + .../com/jiluo/bolt/engine/EngineDriver.java | 301 + .../java/com/jiluo/bolt/engine/IEngine.java | 32 + .../java/com/jiluo/bolt/engine/JobType.java | 21 + .../jiluo/bolt/engine/TemperatureEngine.java | 70 + .../modbusTcp/config/ModbusTcpMaster.java | 49 + .../modbusTcp/utils/Modbus4jReadUtils.java | 161 + .../modbusTcp/utils/Modbus4jWriteUtils.java | 100 + .../com/jiluo/bolt/websocket/WebSocket.java | 229 + bolt-web/classfinal-fatjar.jar | Bin 0 -> 834621 bytes bolt-web/pom.xml | 71 + bolt-web/proguard.cfg | 78 + .../com/jiluo/bolt/BoltServerApplication.java | 19 + .../bolt/aspect/GlobalExceptionHandler.java | 65 + .../bolt/aspect/GlobalRequestAspect.java | 88 + .../bolt/aspect/GlobalResponseAspect.java | 56 + .../jiluo/bolt/config/WebSocketConfig.java | 27 + .../com/jiluo/bolt/constant/Constant.java | 29 + .../bolt/controller/AlgorithmController.java | 309 + .../controller/AnalysisDataController.java | 108 + .../bolt/controller/CameraController.java | 36 + .../bolt/controller/ConfigController.java | 306 + .../bolt/controller/DetectController.java | 352 + .../bolt/controller/DeviceController.java | 339 + .../controller/HistoryDataController.java | 286 + .../jiluo/bolt/controller/ImgController.java | 90 + .../bolt/controller/MinioController.java | 331 + .../bolt/controller/MotorGroupController.java | 155 + .../bolt/controller/PointController.java | 216 + .../controller/PowerStationController.java | 147 + .../controller/TemperatureController.java | 39 + .../jiluo/bolt/controller/UserController.java | 271 + .../bolt/controller/WebSocketController.java | 38 + .../java/com/jiluo/bolt/domain/Result.java | 63 + .../com/jiluo/bolt/domain/ResultCode.java | 32 + .../jiluo/bolt/exception/BoltException.java | 21 + .../src/main/resources/application-dev.yml | 28 + .../src/main/resources/application-prod.yml | 28 + .../src/main/resources/application.properties | 2 + bolt-web/src/main/resources/application.yml | 28 + .../src/main/resources/logback-spring.xml | 152 + console.log | 213 + mvnw | 316 + mvnw.cmd | 188 + pom.xml | 318 + 249 files changed, 26270 insertions(+) create mode 100644 .gitignore create mode 100644 .mvn/wrapper/maven-wrapper.jar create mode 100644 .mvn/wrapper/maven-wrapper.properties create mode 100644 HELP.md create mode 100644 bolt-api/pom.xml create mode 100644 bolt-api/src/main/java/com/jiluo/bolt/Aladdin/Hasp.java create mode 100644 bolt-api/src/main/java/com/jiluo/bolt/Aladdin/HaspApiVersion.java create mode 100644 bolt-api/src/main/java/com/jiluo/bolt/Aladdin/HaspStatus.java create mode 100644 bolt-api/src/main/java/com/jiluo/bolt/Aladdin/HaspTime.java create mode 100644 bolt-api/src/main/java/com/jiluo/bolt/common/BigDecimalValueFilter.java create mode 100644 bolt-api/src/main/java/com/jiluo/bolt/common/CameraDriverEnum.java create mode 100644 bolt-api/src/main/java/com/jiluo/bolt/common/DefectType.java create mode 100644 bolt-api/src/main/java/com/jiluo/bolt/common/DetectAttribute.java create mode 100644 bolt-api/src/main/java/com/jiluo/bolt/common/DetectConfig.java create mode 100644 bolt-api/src/main/java/com/jiluo/bolt/common/DetectJob.java create mode 100644 bolt-api/src/main/java/com/jiluo/bolt/common/DetectMessage.java create mode 100644 bolt-api/src/main/java/com/jiluo/bolt/common/DetectResult.java create mode 100644 bolt-api/src/main/java/com/jiluo/bolt/common/DetectResultKey.java create mode 100644 bolt-api/src/main/java/com/jiluo/bolt/common/DetectType.java create mode 100644 bolt-api/src/main/java/com/jiluo/bolt/common/LocalStatus.java create mode 100644 bolt-api/src/main/java/com/jiluo/bolt/common/PermissionValue.java create mode 100644 bolt-api/src/main/java/com/jiluo/bolt/entity/dto/AlgorithmConfigDto.java create mode 100644 bolt-api/src/main/java/com/jiluo/bolt/entity/dto/AlgorithmDto.java create mode 100644 bolt-api/src/main/java/com/jiluo/bolt/entity/dto/AlgorithmModelDto.java create mode 100644 bolt-api/src/main/java/com/jiluo/bolt/entity/dto/DetectDto.java create mode 100644 bolt-api/src/main/java/com/jiluo/bolt/entity/dto/DetectResultDto.java create mode 100644 bolt-api/src/main/java/com/jiluo/bolt/entity/dto/DeviceDto.java create mode 100644 bolt-api/src/main/java/com/jiluo/bolt/entity/dto/IdToNameDto.java create mode 100644 bolt-api/src/main/java/com/jiluo/bolt/entity/dto/ImgDto.java create mode 100644 bolt-api/src/main/java/com/jiluo/bolt/entity/dto/MotorGroupDto.java create mode 100644 bolt-api/src/main/java/com/jiluo/bolt/entity/dto/PermissionDto.java create mode 100644 bolt-api/src/main/java/com/jiluo/bolt/entity/dto/PointDto.java create mode 100644 bolt-api/src/main/java/com/jiluo/bolt/entity/dto/PowerStationDto.java create mode 100644 bolt-api/src/main/java/com/jiluo/bolt/entity/dto/RoleDto.java create mode 100644 bolt-api/src/main/java/com/jiluo/bolt/entity/dto/SystemInfoConfigDto.java create mode 100644 bolt-api/src/main/java/com/jiluo/bolt/entity/dto/TempSenserDto.java create mode 100644 bolt-api/src/main/java/com/jiluo/bolt/entity/dto/TempThresholdDto.java create mode 100644 bolt-api/src/main/java/com/jiluo/bolt/entity/dto/ThemeConfigDto.java create mode 100644 bolt-api/src/main/java/com/jiluo/bolt/entity/dto/UserDto.java create mode 100644 bolt-api/src/main/java/com/jiluo/bolt/entity/vo/AlgorithmVo.java create mode 100644 bolt-api/src/main/java/com/jiluo/bolt/entity/vo/DefectVo.java create mode 100644 bolt-api/src/main/java/com/jiluo/bolt/entity/vo/DeviceVo.java create mode 100644 bolt-api/src/main/java/com/jiluo/bolt/entity/vo/DropDownVo.java create mode 100644 bolt-api/src/main/java/com/jiluo/bolt/entity/vo/HistoricalDataVo.java create mode 100644 bolt-api/src/main/java/com/jiluo/bolt/entity/vo/MotorGroupVo.java create mode 100644 bolt-api/src/main/java/com/jiluo/bolt/entity/vo/PermissionVo.java create mode 100644 bolt-api/src/main/java/com/jiluo/bolt/entity/vo/PointVo.java create mode 100644 bolt-api/src/main/java/com/jiluo/bolt/entity/vo/PowerStationVo.java create mode 100644 bolt-api/src/main/java/com/jiluo/bolt/entity/vo/RoleVo.java create mode 100644 bolt-api/src/main/java/com/jiluo/bolt/entity/vo/SystemInfoConfigVo.java create mode 100644 bolt-api/src/main/java/com/jiluo/bolt/entity/vo/TempSenserVo.java create mode 100644 bolt-api/src/main/java/com/jiluo/bolt/entity/vo/ThemeConfigVo.java create mode 100644 bolt-api/src/main/java/com/jiluo/bolt/entity/vo/UserVo.java create mode 100644 bolt-core/pom.xml create mode 100644 bolt-core/src/main/java/com/jiluo/bolt/config/MinioConfig.java create mode 100644 bolt-core/src/main/java/com/jiluo/bolt/config/UploadFile.java create mode 100644 bolt-core/src/main/java/com/jiluo/bolt/domain/DefectInfo.java create mode 100644 bolt-core/src/main/java/com/jiluo/bolt/export/Analysis.java create mode 100644 bolt-core/src/main/java/com/jiluo/bolt/export/Export.java create mode 100644 bolt-core/src/main/java/com/jiluo/bolt/export/Report.java create mode 100644 bolt-core/src/main/java/com/jiluo/bolt/service/AlarmService.java create mode 100644 bolt-core/src/main/java/com/jiluo/bolt/service/AlgorithmService.java create mode 100644 bolt-core/src/main/java/com/jiluo/bolt/service/AlgorithmTempleteService.java create mode 100644 bolt-core/src/main/java/com/jiluo/bolt/service/ConfigService.java create mode 100644 bolt-core/src/main/java/com/jiluo/bolt/service/DefectService.java create mode 100644 bolt-core/src/main/java/com/jiluo/bolt/service/DetectService.java create mode 100644 bolt-core/src/main/java/com/jiluo/bolt/service/DeviceService.java create mode 100644 bolt-core/src/main/java/com/jiluo/bolt/service/DeviceTempleteService.java create mode 100644 bolt-core/src/main/java/com/jiluo/bolt/service/JobService.java create mode 100644 bolt-core/src/main/java/com/jiluo/bolt/service/MinioService.java create mode 100644 bolt-core/src/main/java/com/jiluo/bolt/service/MotorGroupService.java create mode 100644 bolt-core/src/main/java/com/jiluo/bolt/service/PointService.java create mode 100644 bolt-core/src/main/java/com/jiluo/bolt/service/PowerStationService.java create mode 100644 bolt-core/src/main/java/com/jiluo/bolt/service/ProductService.java create mode 100644 bolt-core/src/main/java/com/jiluo/bolt/service/RoleItemService.java create mode 100644 bolt-core/src/main/java/com/jiluo/bolt/service/RoleService.java create mode 100644 bolt-core/src/main/java/com/jiluo/bolt/service/RoleValueService.java create mode 100644 bolt-core/src/main/java/com/jiluo/bolt/service/UserService.java create mode 100644 bolt-core/src/main/java/com/jiluo/bolt/service/VersionService.java create mode 100644 bolt-core/src/main/java/com/jiluo/bolt/service/impl/AlarmServiceImpl.java create mode 100644 bolt-core/src/main/java/com/jiluo/bolt/service/impl/AlgorithmServiceImpl.java create mode 100644 bolt-core/src/main/java/com/jiluo/bolt/service/impl/AlgorithmTempleteServiceImpl.java create mode 100644 bolt-core/src/main/java/com/jiluo/bolt/service/impl/ConfigServiceImpl.java create mode 100644 bolt-core/src/main/java/com/jiluo/bolt/service/impl/DefectServiceImpl.java create mode 100644 bolt-core/src/main/java/com/jiluo/bolt/service/impl/DetectServiceImpl.java create mode 100644 bolt-core/src/main/java/com/jiluo/bolt/service/impl/DeviceServiceImpl.java create mode 100644 bolt-core/src/main/java/com/jiluo/bolt/service/impl/DeviceTempleteServiceImpl.java create mode 100644 bolt-core/src/main/java/com/jiluo/bolt/service/impl/JobServiceImpl.java create mode 100644 bolt-core/src/main/java/com/jiluo/bolt/service/impl/MinioServiceImpl.java create mode 100644 bolt-core/src/main/java/com/jiluo/bolt/service/impl/MotorGroupServiceImpl.java create mode 100644 bolt-core/src/main/java/com/jiluo/bolt/service/impl/PointServiceImpl.java create mode 100644 bolt-core/src/main/java/com/jiluo/bolt/service/impl/PowerStationServiceImpl.java create mode 100644 bolt-core/src/main/java/com/jiluo/bolt/service/impl/ProductServiceImpl.java create mode 100644 bolt-core/src/main/java/com/jiluo/bolt/service/impl/RoleItemServiceImpl.java create mode 100644 bolt-core/src/main/java/com/jiluo/bolt/service/impl/RoleServiceImpl.java create mode 100644 bolt-core/src/main/java/com/jiluo/bolt/service/impl/RoleValueServiceImpl.java create mode 100644 bolt-core/src/main/java/com/jiluo/bolt/service/impl/UserServiceImpl.java create mode 100644 bolt-core/src/main/java/com/jiluo/bolt/service/impl/VersionServiceImpl.java create mode 100644 bolt-core/src/main/java/com/jiluo/bolt/util/AesEncryptUtil.java create mode 100644 bolt-core/src/main/java/com/jiluo/bolt/util/BigDecimalUtils.java create mode 100644 bolt-core/src/main/java/com/jiluo/bolt/util/CSVUtils.java create mode 100644 bolt-core/src/main/java/com/jiluo/bolt/util/DogUtil.java create mode 100644 bolt-core/src/main/java/com/jiluo/bolt/util/ExcelUtils.java create mode 100644 bolt-core/src/main/java/com/jiluo/bolt/util/FileUtils.java create mode 100644 bolt-core/src/main/java/com/jiluo/bolt/util/ImgUtils.java create mode 100644 bolt-core/src/main/java/com/jiluo/bolt/util/JwtUtils.java create mode 100644 bolt-core/src/main/java/com/jiluo/bolt/util/MD5Utils.java create mode 100644 bolt-core/src/main/java/com/jiluo/bolt/util/MinioUtil.java create mode 100644 bolt-core/src/main/java/com/jiluo/bolt/util/MyFileUtils.java create mode 100644 bolt-core/src/main/java/com/jiluo/bolt/util/SessionHolder.java create mode 100644 bolt-core/src/main/java/com/jiluo/bolt/util/ShellUtils.java create mode 100644 bolt-core/src/main/java/com/jiluo/bolt/util/SnowFlakeUtil.java create mode 100644 bolt-core/src/main/java/com/jiluo/bolt/util/SpringContextHolder.java create mode 100644 bolt-core/src/main/java/com/jiluo/bolt/util/SystemDateUtils.java create mode 100644 bolt-core/src/main/java/com/jiluo/bolt/util/ToStringUtils.java create mode 100644 bolt-core/src/main/resources/mock.jpg create mode 100644 bolt-core/src/main/resources/report.docx create mode 100644 bolt-core/src/main/resources/report.xml create mode 100644 bolt-dao/pom.xml create mode 100644 bolt-dao/src/main/java/com/jiluo/bolt/config/DateConfig.java create mode 100644 bolt-dao/src/main/java/com/jiluo/bolt/config/MPConfig.java create mode 100644 bolt-dao/src/main/java/com/jiluo/bolt/entity/BaseEntity.java create mode 100644 bolt-dao/src/main/java/com/jiluo/bolt/entity/po/Alarm.java create mode 100644 bolt-dao/src/main/java/com/jiluo/bolt/entity/po/Algorithm.java create mode 100644 bolt-dao/src/main/java/com/jiluo/bolt/entity/po/AlgorithmConfig.java create mode 100644 bolt-dao/src/main/java/com/jiluo/bolt/entity/po/AlgorithmTemplete.java create mode 100644 bolt-dao/src/main/java/com/jiluo/bolt/entity/po/Config.java create mode 100644 bolt-dao/src/main/java/com/jiluo/bolt/entity/po/Defect.java create mode 100644 bolt-dao/src/main/java/com/jiluo/bolt/entity/po/Detect.java create mode 100644 bolt-dao/src/main/java/com/jiluo/bolt/entity/po/Device.java create mode 100644 bolt-dao/src/main/java/com/jiluo/bolt/entity/po/DeviceTemplete.java create mode 100644 bolt-dao/src/main/java/com/jiluo/bolt/entity/po/Job.java create mode 100644 bolt-dao/src/main/java/com/jiluo/bolt/entity/po/MotorGroup.java create mode 100644 bolt-dao/src/main/java/com/jiluo/bolt/entity/po/Point.java create mode 100644 bolt-dao/src/main/java/com/jiluo/bolt/entity/po/PowerStation.java create mode 100644 bolt-dao/src/main/java/com/jiluo/bolt/entity/po/Product.java create mode 100644 bolt-dao/src/main/java/com/jiluo/bolt/entity/po/Role.java create mode 100644 bolt-dao/src/main/java/com/jiluo/bolt/entity/po/RoleItem.java create mode 100644 bolt-dao/src/main/java/com/jiluo/bolt/entity/po/RoleValue.java create mode 100644 bolt-dao/src/main/java/com/jiluo/bolt/entity/po/User.java create mode 100644 bolt-dao/src/main/java/com/jiluo/bolt/entity/po/Version.java create mode 100644 bolt-dao/src/main/java/com/jiluo/bolt/mapper/AlarmMapper.java create mode 100644 bolt-dao/src/main/java/com/jiluo/bolt/mapper/AlgorithmConfigMapper.java create mode 100644 bolt-dao/src/main/java/com/jiluo/bolt/mapper/AlgorithmMapper.java create mode 100644 bolt-dao/src/main/java/com/jiluo/bolt/mapper/AlgorithmTempleteMapper.java create mode 100644 bolt-dao/src/main/java/com/jiluo/bolt/mapper/ConfigMapper.java create mode 100644 bolt-dao/src/main/java/com/jiluo/bolt/mapper/DefectMapper.java create mode 100644 bolt-dao/src/main/java/com/jiluo/bolt/mapper/DetectMapper.java create mode 100644 bolt-dao/src/main/java/com/jiluo/bolt/mapper/DeviceMapper.java create mode 100644 bolt-dao/src/main/java/com/jiluo/bolt/mapper/DeviceTempleteMapper.java create mode 100644 bolt-dao/src/main/java/com/jiluo/bolt/mapper/JobMapper.java create mode 100644 bolt-dao/src/main/java/com/jiluo/bolt/mapper/MotorGroupMapper.java create mode 100644 bolt-dao/src/main/java/com/jiluo/bolt/mapper/PointMapper.java create mode 100644 bolt-dao/src/main/java/com/jiluo/bolt/mapper/PowerStationMapper.java create mode 100644 bolt-dao/src/main/java/com/jiluo/bolt/mapper/ProductMapper.java create mode 100644 bolt-dao/src/main/java/com/jiluo/bolt/mapper/RoleItemMapper.java create mode 100644 bolt-dao/src/main/java/com/jiluo/bolt/mapper/RoleMapper.java create mode 100644 bolt-dao/src/main/java/com/jiluo/bolt/mapper/RoleValueMapper.java create mode 100644 bolt-dao/src/main/java/com/jiluo/bolt/mapper/UserMapper.java create mode 100644 bolt-dao/src/main/java/com/jiluo/bolt/mapper/VersionMapper.java create mode 100644 bolt-dao/src/main/resources/mapper/AlarmMapper.xml create mode 100644 bolt-dao/src/main/resources/mapper/AlgorithmConfigMapper.xml create mode 100644 bolt-dao/src/main/resources/mapper/AlgorithmMapper.xml create mode 100644 bolt-dao/src/main/resources/mapper/AlgorithmTempleteMapper.xml create mode 100644 bolt-dao/src/main/resources/mapper/ConfigMapper.xml create mode 100644 bolt-dao/src/main/resources/mapper/DefectMapper.xml create mode 100644 bolt-dao/src/main/resources/mapper/DetectMapper.xml create mode 100644 bolt-dao/src/main/resources/mapper/DeviceMapper.xml create mode 100644 bolt-dao/src/main/resources/mapper/DeviceTempleteMapper.xml create mode 100644 bolt-dao/src/main/resources/mapper/JobMapper.xml create mode 100644 bolt-dao/src/main/resources/mapper/MotorGroupMapper.xml create mode 100644 bolt-dao/src/main/resources/mapper/PointMapper.xml create mode 100644 bolt-dao/src/main/resources/mapper/PowerStationMapper.xml create mode 100644 bolt-dao/src/main/resources/mapper/ProductMapper.xml create mode 100644 bolt-dao/src/main/resources/mapper/RoleItemMapper.xml create mode 100644 bolt-dao/src/main/resources/mapper/RoleMapper.xml create mode 100644 bolt-dao/src/main/resources/mapper/RoleValueMapper.xml create mode 100644 bolt-dao/src/main/resources/mapper/UserMapper.xml create mode 100644 bolt-dao/src/main/resources/mapper/VersionMapper.xml create mode 100644 bolt-kernel/pom.xml create mode 100644 bolt-kernel/src/main/java/com/jiluo/bolt/OKHttp/OkHttpUtil.java create mode 100644 bolt-kernel/src/main/java/com/jiluo/bolt/algorithm/AbstractAlgorithm.java create mode 100644 bolt-kernel/src/main/java/com/jiluo/bolt/algorithm/AlgorithmName.java create mode 100644 bolt-kernel/src/main/java/com/jiluo/bolt/algorithm/AlgorithmType.java create mode 100644 bolt-kernel/src/main/java/com/jiluo/bolt/algorithm/IAlgorithm.java create mode 100644 bolt-kernel/src/main/java/com/jiluo/bolt/algorithm/algorithm/MockAlgorithm.java create mode 100644 bolt-kernel/src/main/java/com/jiluo/bolt/algorithm/algorithm/SelfAlgorithm.java create mode 100644 bolt-kernel/src/main/java/com/jiluo/bolt/device/AbstractDevice.java create mode 100644 bolt-kernel/src/main/java/com/jiluo/bolt/device/DeviceStatus.java create mode 100644 bolt-kernel/src/main/java/com/jiluo/bolt/device/DeviceType.java create mode 100644 bolt-kernel/src/main/java/com/jiluo/bolt/device/DeviceVender.java create mode 100644 bolt-kernel/src/main/java/com/jiluo/bolt/device/IDevice.java create mode 100644 bolt-kernel/src/main/java/com/jiluo/bolt/device/camera/BaslerCamera.java create mode 100644 bolt-kernel/src/main/java/com/jiluo/bolt/device/camera/BaumerCamera.java create mode 100644 bolt-kernel/src/main/java/com/jiluo/bolt/device/camera/LucidCamera.java create mode 100644 bolt-kernel/src/main/java/com/jiluo/bolt/device/camera/MockCamera.java create mode 100644 bolt-kernel/src/main/java/com/jiluo/bolt/device/plc/MathvisionPlc.java create mode 100644 bolt-kernel/src/main/java/com/jiluo/bolt/device/plc/MockPlc.java create mode 100644 bolt-kernel/src/main/java/com/jiluo/bolt/device/sensor/CameraTemperatureSensor.java create mode 100644 bolt-kernel/src/main/java/com/jiluo/bolt/device/sensor/MockTemperatureSensor.java create mode 100644 bolt-kernel/src/main/java/com/jiluo/bolt/device/sensor/RFIDTemperatureSensor.java create mode 100644 bolt-kernel/src/main/java/com/jiluo/bolt/engine/AbstractEngine.java create mode 100644 bolt-kernel/src/main/java/com/jiluo/bolt/engine/BoltEngine.java create mode 100644 bolt-kernel/src/main/java/com/jiluo/bolt/engine/DataCallBack.java create mode 100644 bolt-kernel/src/main/java/com/jiluo/bolt/engine/Engine.java create mode 100644 bolt-kernel/src/main/java/com/jiluo/bolt/engine/EngineDriver.java create mode 100644 bolt-kernel/src/main/java/com/jiluo/bolt/engine/IEngine.java create mode 100644 bolt-kernel/src/main/java/com/jiluo/bolt/engine/JobType.java create mode 100644 bolt-kernel/src/main/java/com/jiluo/bolt/engine/TemperatureEngine.java create mode 100644 bolt-kernel/src/main/java/com/jiluo/bolt/modbusTcp/config/ModbusTcpMaster.java create mode 100644 bolt-kernel/src/main/java/com/jiluo/bolt/modbusTcp/utils/Modbus4jReadUtils.java create mode 100644 bolt-kernel/src/main/java/com/jiluo/bolt/modbusTcp/utils/Modbus4jWriteUtils.java create mode 100644 bolt-kernel/src/main/java/com/jiluo/bolt/websocket/WebSocket.java create mode 100644 bolt-web/classfinal-fatjar.jar create mode 100644 bolt-web/pom.xml create mode 100644 bolt-web/proguard.cfg create mode 100644 bolt-web/src/main/java/com/jiluo/bolt/BoltServerApplication.java create mode 100644 bolt-web/src/main/java/com/jiluo/bolt/aspect/GlobalExceptionHandler.java create mode 100644 bolt-web/src/main/java/com/jiluo/bolt/aspect/GlobalRequestAspect.java create mode 100644 bolt-web/src/main/java/com/jiluo/bolt/aspect/GlobalResponseAspect.java create mode 100644 bolt-web/src/main/java/com/jiluo/bolt/config/WebSocketConfig.java create mode 100644 bolt-web/src/main/java/com/jiluo/bolt/constant/Constant.java create mode 100644 bolt-web/src/main/java/com/jiluo/bolt/controller/AlgorithmController.java create mode 100644 bolt-web/src/main/java/com/jiluo/bolt/controller/AnalysisDataController.java create mode 100644 bolt-web/src/main/java/com/jiluo/bolt/controller/CameraController.java create mode 100644 bolt-web/src/main/java/com/jiluo/bolt/controller/ConfigController.java create mode 100644 bolt-web/src/main/java/com/jiluo/bolt/controller/DetectController.java create mode 100644 bolt-web/src/main/java/com/jiluo/bolt/controller/DeviceController.java create mode 100644 bolt-web/src/main/java/com/jiluo/bolt/controller/HistoryDataController.java create mode 100644 bolt-web/src/main/java/com/jiluo/bolt/controller/ImgController.java create mode 100644 bolt-web/src/main/java/com/jiluo/bolt/controller/MinioController.java create mode 100644 bolt-web/src/main/java/com/jiluo/bolt/controller/MotorGroupController.java create mode 100644 bolt-web/src/main/java/com/jiluo/bolt/controller/PointController.java create mode 100644 bolt-web/src/main/java/com/jiluo/bolt/controller/PowerStationController.java create mode 100644 bolt-web/src/main/java/com/jiluo/bolt/controller/TemperatureController.java create mode 100644 bolt-web/src/main/java/com/jiluo/bolt/controller/UserController.java create mode 100644 bolt-web/src/main/java/com/jiluo/bolt/controller/WebSocketController.java create mode 100644 bolt-web/src/main/java/com/jiluo/bolt/domain/Result.java create mode 100644 bolt-web/src/main/java/com/jiluo/bolt/domain/ResultCode.java create mode 100644 bolt-web/src/main/java/com/jiluo/bolt/exception/BoltException.java create mode 100644 bolt-web/src/main/resources/application-dev.yml create mode 100644 bolt-web/src/main/resources/application-prod.yml create mode 100644 bolt-web/src/main/resources/application.properties create mode 100644 bolt-web/src/main/resources/application.yml create mode 100644 bolt-web/src/main/resources/logback-spring.xml create mode 100644 console.log create mode 100644 mvnw create mode 100644 mvnw.cmd create mode 100644 pom.xml diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..89bcb65 --- /dev/null +++ b/.gitignore @@ -0,0 +1,37 @@ +target/ +!.mvn/wrapper/maven-wrapper.jar +!**/src/main/**/target/ +!**/src/test/**/target/ + +### IntelliJ IDEA ### +.idea/ +.jpb/ +*.iws +*.iml +*.ipr +logs/ + +### Eclipse ### +.apt_generated +.classpath +.factorypath +.project +.settings +.springBeans +.sts4-cache + +### NetBeans ### +/nbproject/private/ +/nbbuild/ +/dist/ +/nbdist/ +/.nb-gradle/ +build/ +!**/src/main/**/build/ +!**/src/test/**/build/ + +### VS Code ### +.vscode/ + +### Mac OS ### +.DS_Store!/ \ No newline at end of file diff --git a/.mvn/wrapper/maven-wrapper.jar b/.mvn/wrapper/maven-wrapper.jar new file mode 100644 index 0000000000000000000000000000000000000000..bf82ff01c6cdae4a1bb754a6e062954d77ac5c11 GIT binary patch literal 59925 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

dy!05UMhSKsK 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 VCNKd3JGtOvEm(5t0lFyE{{i--k}m)N literal 0 HcmV?d00001 diff --git a/.mvn/wrapper/maven-wrapper.properties b/.mvn/wrapper/maven-wrapper.properties new file mode 100644 index 0000000..ca5ab4b --- /dev/null +++ b/.mvn/wrapper/maven-wrapper.properties @@ -0,0 +1,18 @@ +# 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. +distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.8.7/apache-maven-3.8.7-bin.zip +wrapperUrl=https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.1.1/maven-wrapper-3.1.1.jar diff --git a/HELP.md b/HELP.md new file mode 100644 index 0000000..811318d --- /dev/null +++ b/HELP.md @@ -0,0 +1,10 @@ +# 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.7.11/maven-plugin/reference/html/) +* [Create an OCI image](https://docs.spring.io/spring-boot/docs/2.7.11/maven-plugin/reference/html/#build-image) + diff --git a/bolt-api/pom.xml b/bolt-api/pom.xml new file mode 100644 index 0000000..d4ba1b5 --- /dev/null +++ b/bolt-api/pom.xml @@ -0,0 +1,31 @@ + + + + bolt-server + com.jiluo.bolt + 0.0.1-SNAPSHOT + + 4.0.0 + + bolt-api + + + org.springframework + spring-context + 5.3.27 + + + + javax.validation + validation-api + + + org.hibernate.validator + hibernate-validator + + + + + \ No newline at end of file diff --git a/bolt-api/src/main/java/com/jiluo/bolt/Aladdin/Hasp.java b/bolt-api/src/main/java/com/jiluo/bolt/Aladdin/Hasp.java new file mode 100644 index 0000000..e111d11 --- /dev/null +++ b/bolt-api/src/main/java/com/jiluo/bolt/Aladdin/Hasp.java @@ -0,0 +1,1012 @@ +package com.jiluo.bolt.Aladdin; + +import java.nio.*; +import com.jiluo.bolt.Aladdin.HaspStatus; +import com.jiluo.bolt.Aladdin.HaspTime; +import com.jiluo.bolt.Aladdin.HaspApiVersion; + +public class Hasp +{ + /** + * handle - pointer to the resulting session handle. + */ + private int[] handle = { 0 }; + + /** + * Unique identifier of the Feature. + */ + private long featureid; + + /** + * Status of the last function call. + */ + private int status; + + /** + * getSessionInfo() format to retrieve update info (C2V). + */ + public static final String HASP_UPDATEINFO = new String(""); + + /** + * getSessionInfo() format to retrieve session info. + */ + public static final String HASP_SESSIONINFO = new String(""); + + /** + * getSessionInfo() format to retrieve key/hardware info. + */ + public static final String HASP_KEYINFO = new String(""); + + /** + * format to retrieve host fingerprint info + */ + public static final String HASP_FINGERPRINT= new String(""); + + /** + * format to retrieve recipient parameter for hasp_detach + */ + public static final String HASP_RECIPIENT = new String(""+ + " " + + " " + + " " + + " " + + " " + + " " + + " " + + " \n"); + + /** + * AND-mask used to identify the Feature type. + */ + public static final long HASP_FEATURETYPE_MASK = 0xffff0000; + + /** + * After AND-ing with HASP_FEATURETYPE_MASK, the Feature type contains + * this value. + */ + public static final long HASP_PROGNUM_FEATURETYPE = 0xffff0000; + + /** + * AND-mask used to extract program number from Feature ID + * if program number Feature. + */ + public static final long HASP_PROGNUM_MASK = 0x000000ff; + + /** + * AND-mask used to identify "prognum" options. + * + * The following "prognum" options can be identified: + * + *

    + *
  • HASP_PROGNUM_OPT_NO_LOCAL + *
  • HASP_PROGNUM_OPT_NO_REMOTE + *
  • HASP_PROGNUM_OPT_PROCESS + *
  • HASP_PROGNUM_OPT_CLASSIC + *
  • HASP_PROGNUM_OPT_TS + *
+ * + * 3 bits of the mask are reserved for future extensions and currently + * unused. Initialize them to zero. + */ + public static final long HASP_PROGNUM_OPT_MASK = 0x0000ff00; + + /** + * "Prognum" option: disables local license search. + */ + public static final long HASP_PROGNUM_OPT_NO_LOCAL = 0x00008000; + + /** + * "Prognum" option: disables network license search. + */ + public static final long HASP_PROGNUM_OPT_NO_REMOTE = 0x00004000; + + /** + * "Prognum" option: sets session count of network licenses + * to "per process". + */ + public static final long HASP_PROGNUM_OPT_PROCESS = 0x00002000; + + /** + * "Prognum" option: enables the API to access "classic" + * (HASP4 or earlier) keys. + */ + public static final long HASP_PROGNUM_OPT_CLASSIC = 0x00001000; + + /** + * "Prognum" option: ignores Terminal Services. + */ + public static final long HASP_PROGNUM_OPT_TS = 0x00000800; + + /** + * HASP default Feature ID. + * Present in every hardware key. + */ + public static final long HASP_DEFAULT_FID = 0; + + /** + * "Prognum" default Feature ID. + * Present in every HASP key. + */ + public static final long HASP_PROGNUM_DEFAULT_FID = (HASP_DEFAULT_FID | HASP_PROGNUM_FEATURETYPE); + + /** + * Minimal block size for hasp_encrypt() and hasp_decrypt() functions. + */ + public static final int HASP_MIN_BLOCK_SIZE = 16; + + /** + * Minimal block size for legacy functions hasp_legacy_encrypt() + * and hasp_legacy_decrypt(). + */ + public static final long HASP_MIN_BLOCK_SIZE_LEGACY = 8; + + /** + * HASP4 memory file: + * File ID for HASP4-compatible memory contents without FAS. + */ + public static final int HASP_FILEID_MAIN = 0xfff0; + + /** + * HASP4 FAS memory file: + * (Dummy) File ID for license data segment of memory contents. + */ + public static final long HASP_FILEID_LICENSE = 0xfff2; + + /** + * File ID for HASP secure writable memory. + */ + public static final long HASP_FILEID_RW = 0xfff4; + + /** + * File ID for HASP secure read only memory. + */ + public static final long HASP_FILEID_RO = 0xfff5; + + /** + * Returns the error that occurred in the last function call. + */ + public int getLastError() + { + return status; + } + + static + { + HaspStatus.Init(); + } + + /* + * private native methods + */ + private static native int Login(long feature_id,String vendor_code,int handle[]); + private static native int LoginScope(long feature_id,String scope,String vendor_code,int handle[]); + private static native int Logout(int handle); + private static native int Encrypt(int handle, byte buffer[], int length); + private static native int Decrypt(int handle, byte buffer[], int length); + private static native int GetRtc(int handle, long time[]); + private static native int LegacyEncrypt(int handle, byte buffer[], int length); + private static native int LegacyDecrypt(int handle, byte buffer[], int length); + private static native int LegacySetRtc(int handle, long time); + private static native int LegacySetIdletime(int handle, short time); + private static native byte[] GetSessioninfo(int handle,String format,int status[]); + private static native byte[] GetInfo(String scope,String format,String vendor_code,int status[]); + private static native void Free(long info); + private static native String Update(String update_data,int status[]); + private static native byte[] Detach(String action,String scope,String vendor_code,String destination,int status[]); + private static native byte[] Transfer(String action,String scope,String vendor_code,String destination,int status[]); + private static native int UpdateSession(int handle,String option); + + /* + * functions to access the memory + */ + private static native int Read(int handle, long fileid, int offset, int length, byte buffer[]); + private static native int Write(int handle, long fileid, int offset, int length, byte buffer[]); + private static native int GetSize(int handle, long fileid, int size[]); + + /** + * Hasp constructor. + * + * For local "prognum" Features, concurrency is not handled and each + * login performs a decrement if it is a counting license. + *

+ * Network "prognum" Features only use the old HASP LM login logic, + * with all its limitations. + *

+ * Only concurrent usage of one server is supported (global server address). + * + * @param feature_id Unique identifier of the Feature. + * + * With "prognum" Features (see HASP_FEATURETYPE_MASK), + * 8 bits are reserved for legacy options (see + * HASP_PROGNUM_OPT_MASK, currently 5 bits are used): + *

    + *
  • only local + *
  • only remote + *
  • login is counted per process ID + *
  • disable terminal server check + *
  • enable access to old (HASP3/HASP4) keys + *
+ */ + public Hasp(long feature_id) + { + status = HaspStatus.HASP_STATUS_OK; + featureid = feature_id; + handle[0] = 0; + } + + /** + * Logs in to a Feature. + * + * Establishes a session context. + *

+ * If a previously established session context exists, the session + * will be logged out. + * + * @param vendor_code The Vendor Code. + * + * @return true/false - indicates success or failure. + * + * @see #loginScope + * @see #logout + * @see #getLastError + */ + public boolean login(String vendor_code) + { + synchronized(this) + { + synchronized(this) + { + logout(); + status = Hasp.Login(featureid, vendor_code, handle); + } + } + return (status == HaspStatus.HASP_STATUS_OK); + } + + /** + * Logs in to a Feature according to customizable search parameters. + * + * This function is an extended login function, where the search for the + * Feature can be restricted. + *

+ * If a previously established session context exists, the session + * will be logged out. + * + * @param scope The hasp_scope of the Feature search. + * @param vendor_code The Vendor Code. + * + * @return true/false - indicates success or failure. + * + * @see #login + * @see #logout + * @see #getLastError + */ + public boolean loginScope(String scope, String vendor_code) + { + if (vendor_code == null) + status = HaspStatus.HASP_INV_VCODE; + else if (scope == null) + status = HaspStatus.HASP_INV_SCOPE; + else + { + synchronized(this) + { + logout(); + status = Hasp.LoginScope(featureid, scope, vendor_code,handle); + } + } + return (status == HaspStatus.HASP_STATUS_OK); + } + + /** + * Logs out from a session and frees all allocated resources for the session. + * + * @return true/false - indicates success or failure. + * + * @see #login + * @see #getLastError + */ + public boolean logout() + { + if (handle[0] == 0) + { + status = HaspStatus.HASP_INV_HND; + return true; + } + synchronized(this) + { + status = Hasp.Logout(handle[0]); + if (status == HaspStatus.HASP_STATUS_OK) + handle[0] = 0; + } + return (status == HaspStatus.HASP_STATUS_OK); + } + + /** + * Encrypts a buffer. + * + * This is the reverse operation of the decrypt() function. + *

+ * If the encryption fails (e.g. key removed during the process) the + * data buffer is unmodified. + *

+ * This function is deprecated. + * + * @param buffer The buffer to be encrypted. + * @param length Size in bytes of the buffer to be encrypted + * (16 bytes minimum). + * + * @return true/false - indicates success or failure. + * + * @see #decrypt + * @see #getLastError + */ + @Deprecated + public boolean encrypt(byte[] buffer, int length) + { + if (buffer == null) + status = HaspStatus.HASP_INV_PARAM; + else if (length > buffer.length) + status = HaspStatus.HASP_INV_PARAM; + else + status = Hasp.Encrypt(handle[0], buffer, length); + + return (status == HaspStatus.HASP_STATUS_OK); + } + + /** + * Encrypts a buffer. + * + * This is the reverse operation of the decrypt() function. + *

+ * If the encryption fails (e.g. key removed during the process) the + * data buffer is unmodified. + * + * @param buffer The buffer to be encrypted. + * (16 bytes minimum). + * + * @return true/false - indicates success or failure. + * + * @see #decrypt + * @see #getLastError + */ + public boolean encrypt(byte[] buffer) + { + if (buffer == null) + status = HaspStatus.HASP_INV_PARAM; + else + status = Hasp.Encrypt(handle[0], buffer, buffer.length); + + return (status == HaspStatus.HASP_STATUS_OK); + } + + /** + * Decrypts a buffer. + * + * This is the reverse operation of the encrypt() function. + *

+ * If the decryption fails (e.g. key removed during the process) the + * data buffer is unmodified. + *

+ * This function is deprecated. + * + * @param buffer The buffer to be decrypted. + * @param length Size in bytes of the buffer to be decrypted + * (16 bytes minimum). + * + * @return true/false - indicates success or failure. + * + * @see #encrypt + * @see #getLastError + */ + @Deprecated + public boolean decrypt(byte[] buffer, int length) + { + if (buffer == null) + status = HaspStatus.HASP_INV_PARAM; + else if (length > buffer.length) + status = HaspStatus.HASP_INV_PARAM; + else + status = Hasp.Decrypt(handle[0], buffer, length); + + return (status == HaspStatus.HASP_STATUS_OK); + } + + /** + * Decrypts a buffer. + * + * This is the reverse operation of the encrypt() function. + *

+ * If the decryption fails (e.g. key removed during the process) the + * data buffer is unmodified. + * + * @param buffer The buffer to be decrypted. + * (16 bytes minimum). + * + * @return true/false - indicates success or failure. + * + * @see #encrypt + * @see #getLastError + */ + public boolean decrypt(byte[] buffer) + { + if (buffer == null) + status = HaspStatus.HASP_INV_PARAM; + else + status = Hasp.Decrypt(handle[0], buffer, buffer.length); + + return (status == HaspStatus.HASP_STATUS_OK); + } + + /** + * Retrieves information about all system components. + * + * Acquires information about all system components. + * The programmer can choose the scope and output structure of the data. + * The function has a "scope" parameter that defines the scope using + * XML syntax. + *

+ * This function is not used in a login context, so it can be used + * in a generic "Monitor" application. + *

+ * @param scope XML definition of the information scope. + * @param format XML definition of the output data structure. + * @param vendor_code The Vendor Code. + * @return info The returned information (XML list). + * + * @see #getSessionInfo + * @see #getLastError + */ + public String getInfo(String scope, String format, String vendor_code) + { + byte[] info = { 0 }; + int[] status1 = { 0 }; + String s = null; + + status = HaspStatus.HASP_STATUS_OK; + if (vendor_code == null) + status = HaspStatus.HASP_INV_VCODE; + else if (scope == null) + status = HaspStatus.HASP_INV_SCOPE; + else if (format == null) + status = HaspStatus.HASP_INV_FORMAT; + if (status != HaspStatus.HASP_STATUS_OK) + return null; + + info = Hasp.GetInfo(scope, format, vendor_code, status1); + + status = status1[0]; + if( status == HaspStatus.HASP_STATUS_OK) + s = new String(info); + + return s; + } + + /** + * Retrieves information regarding a session context. + * + * @param format XML definition of the output data structure. + * @return info The returned information (XML list). + * + * @see #getLastError + */ + public String getSessionInfo(String format) + { + byte[] info = { 0 }; + int[] status1 = { 0 }; + String s = null; + + if (format == null) + { + status = HaspStatus.HASP_INV_FORMAT; + return null; + } + + info = Hasp.GetSessioninfo(handle[0], format, status1); + + status = status1[0]; + if( status == HaspStatus.HASP_STATUS_OK) + s = new String(info); + + return s; + } + + /** + * Reads from the HASP key memory. + * + * This function is deprecated. + * + * @param fileid ID of the file to read (memory descriptor). + * @param offset Position in the file. + * @param length Number of bytes to be read from the file. + * @param buffer The retrieved data. + * + * @return true/false - indicates success or failure. + * + * @see #getLastError + * @see #write + * @see #getSize + */ + @Deprecated + public boolean read(long fileid, int offset, int length, byte[] buffer) + { + if (buffer == null) + status = HaspStatus.HASP_INV_PARAM; + else if (offset < 0) + status = HaspStatus.HASP_INV_PARAM; + else if (length > buffer.length) + status = HaspStatus.HASP_INV_PARAM; + else + status = Hasp.Read(handle[0], fileid, offset, length, buffer); + + return (status == HaspStatus.HASP_STATUS_OK); + } + + /** + * Reads from the HASP key memory. + * + * @param fileid ID of the file to read (memory descriptor). + * @param offset Position in the file. + * @param buffer Buffer for the retrieved data. + * + * @return true/false - indicates success or failure. + * + * @see #getLastError + * @see #write + * @see #getSize + */ + public boolean read(long fileid, int offset, byte[] buffer) + { + if (buffer == null) + status = HaspStatus.HASP_INV_PARAM; + else if (offset < 0) + status = HaspStatus.HASP_INV_PARAM; + else + status = Hasp.Read(handle[0], fileid, offset, buffer.length, buffer); + + return (status == HaspStatus.HASP_STATUS_OK); + } + + /** + * Writes to the HASP key memory. + * + * Depending on the provided session handle (either logged into the + * default Feature or any other Feature), write access to the FAS + * memory (HASP_FILEID_LICENSE) is not permitted. + *

+ * This function is deprecated. + * + * @param fileid ID of the file to write (memory descriptor). + * @param offset Position in the file. + * @param length Number of bytes to write to the file. + * @param buffer The data to write. + * + * @return true/false - indicates success or failure. + * + * @see #getLastError + * @see #read + * @see #getSize + */ + @Deprecated + public boolean write(long fileid, int offset, int length, byte[] buffer) + { + if (buffer == null) + status = HaspStatus.HASP_INV_PARAM; + else if (offset < 0) + status = HaspStatus.HASP_INV_PARAM; + else if (length > buffer.length) + status = HaspStatus.HASP_INV_PARAM; + else + status = Hasp.Write(handle[0], fileid, offset, length, buffer); + + return (status == HaspStatus.HASP_STATUS_OK); + } + + /** + * Writes to the HASP key memory. + * + * Depending on the provided session handle (either logged into the + * default Feature or any other Feature), write access to the FAS + * memory (HASP_FILEID_LICENSE) is not permitted. + * + * @param fileid ID of the file to write (memory descriptor). + * @param offset Position in the file. + * @param buffer The data to write. + * + * @return true/false - indicates success or failure. + * + * @see #getLastError + * @see #read + * @see #getSize + */ + public boolean write(long fileid, int offset, byte[] buffer) + { + if (buffer == null) + status = HaspStatus.HASP_INV_PARAM; + else if (offset < 0) + status = HaspStatus.HASP_INV_PARAM; + else + status = Hasp.Write(handle[0], fileid, offset, buffer.length, buffer); + + return (status == HaspStatus.HASP_STATUS_OK); + } + + /** + * Retrieves the byte size of a memory file from a HASP key. + * + * @param fileid ID of the file to be queried. + * + * @return Size of the file. + * + * @see #getLastError + * @see #read + * @see #write + */ + public int getSize(long fileid) + { + int[] size = { 0 }; + status = Hasp.GetSize(handle[0], fileid, size); + return size[0]; + } + + /** + * Writes update information to a HASP key. + * + * The update BLOB contains all necessary data to perform the update: + * Where to write (to which HASP key), the necessary + * access data (Vendor Code) and the update itself. + *

+ * If requested by the update BLOB, the function returns an Acknowledge BLOB, + * which is signed/encrypted by the updated instance and contains + * proof that this update was successfully installed. + * + * @param update_data The complete update data. + * + * @return ack_data The acknowledged data (if requested). + * + * @see #getLastError + */ + public String update(String update_data) + { + int[] dll_status = {0}; + String s = null; + + if (update_data == null) { + status = HaspStatus.HASP_INV_PARAM; + return null; + } + + s = Hasp.Update(update_data, dll_status); + status = dll_status[0]; + + return s; + } + + /** + * Reads the current time from a HASP Time key. + * + * Time values are returned as the number of seconds that have elapsed + * since Jan-01-1970 0:00:00 UTC. + *

+ * The general purpose of this function is to + * obtain reliable timestamps that are independent from the system clock. + * + * @return A HaspTime object. + */ + public HaspTime getRealTimeClock() + { + long[] time = { 0 }; + HaspTime rtcTime; + status = Hasp.GetRtc(handle[0], time); + rtcTime = new HaspTime(time[0]); + + if (status == HaspStatus.HASP_STATUS_OK) + status = rtcTime.getLastError(); + + return rtcTime; + } + + /** + * Sets the HASP License Manager idle time. + * + * @param idle_time Idle time in minutes. Set to 0 for default value. + * + * @return true/false - indicates success or failure. + * + * @see #getLastError + */ + /* + public boolean setIdletime(short idle_time) + { + status = Hasp.SetIdletime(handle[0], idle_time); + if (status == HaspStatus.HASP_STATUS_OK) + return true; + + return false; + } + */ + + /** + * Reads the HASP API Version. + * + * @param vendor_code The Vendor Code. + * + * @return A HaspApiVersion object. + * + * @see #getLastError + */ + public HaspApiVersion getVersion(String vendor_code) + { + HaspApiVersion version; + version = new HaspApiVersion(vendor_code); + status = version.getLastError(); + + return version; + } + + /** + * Encrypts a buffer. + * + * This is the reverse operation of the legacydecrypt() function. + *

+ * If the encryption fails (e.g. key removed during the process) the + * data buffer is unmodified. + *

+ * This function is deprecated. + *

+ * @param buffer The buffer to be encrypted. + * @param length Size in bytes of the buffer to be encrypted + * (16 bytes minimum). + * + * @return true/false - indicates success or failure. + * + * @see #decrypt + * @see #getLastError + */ + @Deprecated + public boolean legacyencrypt(byte[] buffer, int length) + { + if (buffer == null) + status = HaspStatus.HASP_INV_PARAM; + else if (length > buffer.length) + status = HaspStatus.HASP_INV_PARAM; + else + status = Hasp.LegacyEncrypt(handle[0], buffer, length); + + return (status == HaspStatus.HASP_STATUS_OK); + } + + /** + * Encrypts a buffer. + * + * This is the reverse operation of the legacydecrypt() function. + *

+ * If the encryption fails (e.g. key removed during the process) the + * data buffer is unmodified. + *

+ * @param buffer The buffer to be encrypted. Minimum size: 16 bytes + * + * @return true/false - indicates success or failure. + * + * @see #decrypt + * @see #getLastError + */ + public boolean legacyencrypt(byte[] buffer) + { + if (buffer == null) + status = HaspStatus.HASP_INV_PARAM; + else + status = Hasp.LegacyEncrypt(handle[0], buffer, buffer.length); + + return (status == HaspStatus.HASP_STATUS_OK); + } + + /** + * Decrypts a buffer. + * + * This is the reverse operation of the legacyencrypt() function. + *

+ * If the decryption fails (e.g. key removed during the process) the + * data buffer is unmodified. + *

+ * This function is deprecated. + *

+ * @param buffer The buffer to be decrypted. + * @param length Size in bytes of the buffer to be decrypted + * (16 bytes minimum). + * + * @return true/false - indicates success or failure. + * + * @see #encrypt + * @see #getLastError + */ + @Deprecated + public boolean legacydecrypt(byte[] buffer, int length) + { + if (buffer == null) + status = HaspStatus.HASP_INV_PARAM; + else if (length > buffer.length) + status = HaspStatus.HASP_INV_PARAM; + else + status = Hasp.LegacyDecrypt(handle[0], buffer, length); + + return (status == HaspStatus.HASP_STATUS_OK); + } + + /** + * Decrypts a buffer. + * + * This is the reverse operation of the legacyencrypt() function. + *

+ * If the decryption fails (e.g. key removed during the process) the + * data buffer is unmodified. + *

+ * @param buffer The buffer to be decrypted. Minimum size: 16 bytes + * + * @return true/false - indicates success or failure. + * + * @see #encrypt + * @see #getLastError + */ + public boolean legacydecrypt(byte[] buffer) + { + if (buffer == null) + status = HaspStatus.HASP_INV_PARAM; + else + status = Hasp.LegacyDecrypt(handle[0], buffer, buffer.length); + + return (status == HaspStatus.HASP_STATUS_OK); + } + + /** + * Sets the HASP License Manager Rtc. + * + * This function is deprecated. + * + * @param idle_time Idle time in minutes. Set to 0 for default value. + * + * @return true/false - indicates success or failure. + * + * @see #getLastError + */ + @Deprecated + public boolean legacysetRtc(short idle_time) { + status = Hasp.LegacySetRtc(handle[0], (short)idle_time); + if (status == HaspStatus.HASP_STATUS_OK) + return true; + return false; + } + + /** + * Sets the HASP License Manager Rtc. + * + * @param idle_time Idle time in minutes. Set to 0 for default value. + * + * @return true/false - indicates success or failure. + * + * @see #getLastError + */ + public boolean legacysetRtc(long idle_time) + { + status = Hasp.LegacySetRtc(handle[0], idle_time); + if (status == HaspStatus.HASP_STATUS_OK) + return true; + + return false; + } + + /** + * Sets the HASP License Manager idle time. + * + * @param idle_time Idle time in minutes. Set to 0 for default value. + * + * @return true/false - indicates success or failure. + * + * @see #getLastError + */ + public boolean legacysetIdletime(short idle_time) { + status = Hasp.LegacySetIdletime(handle[0], idle_time); + if (status == HaspStatus.HASP_STATUS_OK) + return true; + return false; + } + + /** + * Detach a commuter license. + * + * @deprecated This function is deprecated use transfer API instead + * @param action XML definition of the action. + * @param scope XML definition of the information scope. + * @param vendor_code The Vendor Code. + * @param destination XML definition of the output destination. + * @return info The returned information (XML list). + * + * @see #getLastError + */ + @Deprecated + public String detach(String action, String scope, String vendor_code, String destination) + { + byte[] info = { 0 }; + int[] status1 = { 0 }; + String s = null; + + if (action == null) + status = HaspStatus.HASP_INV_PARAM; + else if (scope == null) + status = HaspStatus.HASP_INV_SCOPE; + else if (vendor_code == null) + status = HaspStatus.HASP_INV_VCODE; + else if (destination == null) + status = HaspStatus.HASP_INV_PARAM; + if (status != HaspStatus.HASP_STATUS_OK) + return null; + + info = Hasp.Detach(action, scope, vendor_code, destination, status1); + status = status1[0]; + + if (status == HaspStatus.HASP_STATUS_OK) + s = new String(info); + + return s; + } + + /** + * Transfer a license (detach or rehost). + * + * @param action XML definition of the action. + * @param scope XML definition of the information scope. + * @param vendor_code The Vendor Code. + * @param destination XML definition of the output destination. + * @return info The returned information (XML list). + * + * @see #getLastError + */ + public String transfer(String action, String scope, String vendor_code, String destination) + { + byte[] info= { 0 }; + int[] status1 = { 0 }; + String s = null; + + if (action == null) + status = HaspStatus.HASP_INV_PARAM; + else if (scope == null) + status = HaspStatus.HASP_INV_SCOPE; + else if (vendor_code == null) + status = HaspStatus.HASP_INV_VCODE; + else if (destination == null) + status = HaspStatus.HASP_INV_PARAM; + if (status != HaspStatus.HASP_STATUS_OK) + return null; + + info = Hasp.Transfer(action, scope, vendor_code, destination, status1); + + status = status1[0]; + + if (status == HaspStatus.HASP_STATUS_OK) + s = new String(info); + + return s; + } + + /** + * Update information regarding a login session + * for a Sentinel protection key. + * + * @param option Definition of the data to be updated by the function. + * + * @return true/false - indicates success or failure. + * + * @see #getLastError + */ + public boolean updateSession(String option) + { + if (option == null) + status = HaspStatus.HASP_INV_PARAM; + else + status = Hasp.UpdateSession(handle[0], option); + + return (status == HaspStatus.HASP_STATUS_OK); + } + +} + diff --git a/bolt-api/src/main/java/com/jiluo/bolt/Aladdin/HaspApiVersion.java b/bolt-api/src/main/java/com/jiluo/bolt/Aladdin/HaspApiVersion.java new file mode 100644 index 0000000..bd60b70 --- /dev/null +++ b/bolt-api/src/main/java/com/jiluo/bolt/Aladdin/HaspApiVersion.java @@ -0,0 +1,94 @@ +package com.jiluo.bolt.Aladdin; +import java.io.UnsupportedEncodingException; +import com.jiluo.bolt.Aladdin.HaspStatus; + +public class HaspApiVersion +{ + private int major_version[] = { 0 }; + private int minor_version[] = { 0 }; + private int build_server[] = { 0 }; + private int build_number[] = { 0 }; + private int status; + + /** + * private native functions + * + */ + private static native int GetVersion(int major_version[], + int minor_version[], + int build_server[], + int build_number[], + byte vendor_code[]); + + /** + * IA 64 not considered yet + */ + static + { + HaspStatus.Init(); + } + + /** + * HaspApiVersion constructor + * + * @param vendor_code The Vendor Code. + * + */ + public HaspApiVersion(String vendor_code) + { + try + { + // Following code is added to ensure that byte array passed to JNI interface + // is NULL terminated. Ideally the JNI GetVersion interface should be accepting + // vendor_code as String like other JNI interface hasp_login, hasp_login_scope etc. + // But changing JNI interface will result in incompatible function signature + // Another solution will be to add new JNI interface + int vc_bytes_count = vendor_code.length(); + byte tmp_vendor_code[] = new byte[vc_bytes_count + 1]; + + System.arraycopy(vendor_code.getBytes("UTF-8"), 0, tmp_vendor_code, 0, vc_bytes_count); + tmp_vendor_code[vc_bytes_count] = 0; // NULL termination + + status = GetVersion(major_version, minor_version, build_server, build_number, tmp_vendor_code); + } + catch (UnsupportedEncodingException ex) + { + // cannot happen, so ignore + } + } + + /** + * Returns the error that occurred in the last function call. + */ + public int getLastError() + { + return status; + } + + /** + * Returns the HASP API major version. + */ + public int majorVersion() + { + return major_version[0]; + } + + /** + * Returns the HASP API minor version. + * + */ + public int minorVersion() + { + return minor_version[0]; + } + + /** + * Returns the HASP API build number. + * + */ + public int buildNumber() + { + return build_number[0]; + } +} + diff --git a/bolt-api/src/main/java/com/jiluo/bolt/Aladdin/HaspStatus.java b/bolt-api/src/main/java/com/jiluo/bolt/Aladdin/HaspStatus.java new file mode 100644 index 0000000..2dfbe3c --- /dev/null +++ b/bolt-api/src/main/java/com/jiluo/bolt/Aladdin/HaspStatus.java @@ -0,0 +1,727 @@ +package com.jiluo.bolt.Aladdin; + +public class HaspStatus +{ + /** + * return codes + */ + + /** + * Request successfully completed + */ + public static final int HASP_STATUS_OK = 0; + + /** + * Request exceeds memory range of a Sentinel file + */ + public static final int HASP_MEM_RANGE = 1; + + /** + * Legacy HASP HL Run-time API: Unknown/Invalid Feature ID option + */ + public static final int HASP_INV_PROGNUM_OPT = 2; + + /** + * System is out of memory + */ + public static final int HASP_INSUF_MEM = 3; + + /** + * Too many open Features/login sessions + */ + public static final int HASP_TMOF = 4; + + /** + * Access to Feature, Sentinel protection key or functionality denied + */ + public static final int HASP_ACCESS_DENIED = 5; + + /** + * Legacy decryption function cannot work on Feature + */ + public static final int HASP_INCOMPAT_FEATURE = 6; + + /** + * Sentinel protection key not available + */ + public static final int HASP_HASP_NOT_FOUND = 7; + + /** + * Deprecated - use HASP_HASP_NOT_FOUND + */ + public static final int HASP_CONTAINER_NOT_FOUND = 7; + + /** + * Encrypted/decrypted data length too short to execute function call + */ + public static final int HASP_TOO_SHORT = 8; + + /** + * Invalid login handle passed to function + */ + public static final int HASP_INV_HND = 9; + + /** + * Specified File ID not recognized by API + */ + public static final int HASP_INV_FILEID = 10; + + /** + * Installed driver or daemon too old to execute function + */ + public static final int HASP_OLD_DRIVER = 11; + + /** + * Real-time clock (rtc) not available + */ + public static final int HASP_NO_TIME = 12; + + /** + * Generic error from host system call + */ + public static final int HASP_SYS_ERR = 13; + + /** + * Required driver not installed + */ + public static final int HASP_NO_DRIVER = 14; + + /** + * Invalid XML format + */ + public static final int HASP_INV_FORMAT = 15; + + /** + * Unable to execute function in this context; the requested + * functionality is not implemented + */ + public static final int HASP_REQ_NOT_SUPP = 16; + + /** + * Binary data passed to function does not contain valid update + */ + public static final int HASP_INV_UPDATE_OBJ = 17; + + /** + * Sentinel protection key not found + */ + public static final int HASP_KEYID_NOT_FOUND = 18; + + /** + * Required XML tags not found; Contents in binary data are missing + * or invalid + */ + public static final int HASP_INV_UPDATE_DATA = 19; + + /** + * Update request not supported by Sentinel protection key + */ + public static final int HASP_INV_UPDATE_NOTSUPP = 20; + + /** + * Update counter set incorrectly + */ + public static final int HASP_INV_UPDATE_CNTR = 21; + + /** + * Invalid Vendor Code passed + */ + public static final int HASP_INV_VCODE = 22; + + /** + * Sentinel protection key does not support encryption type + */ + public static final int HASP_ENC_NOT_SUPP = 23; + + /** + * Passed time value outside supported value range + */ + public static final int HASP_INV_TIME = 24; + + /** + * Real-time clock battery out of power + */ + public static final int HASP_NO_BATTERY_POWER = 25; + + /** + * Acknowledge data requested by update, but ack_data parameter + * is NULL + */ + public static final int HASP_NO_ACK_SPACE = 26; + + /** + * Program running on a terminal server + */ + public static final int HASP_TS_DETECTED = 27; + + /** + * Requested Feature type not implemented + */ + public static final int HASP_FEATURE_TYPE_NOT_IMPL = 28; + + /** + * Unknown algorithm used in H2R/V2C file + */ + public static final int HASP_UNKNOWN_ALG = 29; + + /** + * Signature verification operation failed + */ + public static final int HASP_INV_SIG = 30; + + /** + * Requested Feature not available + */ + public static final int HASP_FEATURE_NOT_FOUND = 31; + + /** + * Access log not enabled + */ + public static final int HASP_NO_LOG = 32; + + /** + * Communication error between API and local Sentinel License Manager + */ + public static final int HASP_LOCAL_COMM_ERR = 33; + + /** + * Vendor Code not recognized by API + */ + public static final int HASP_UNKNOWN_VCODE = 34; + + /** + * Invalid XML specification + */ + public static final int HASP_INV_SPEC = 35; + + /** + * Invalid XML scope + */ + public static final int HASP_INV_SCOPE = 36; + + /** + * Too many Sentinel HASP protection keys currently connected + */ + public static final int HASP_TOO_MANY_KEYS = 37; + + /** + * Too many concurrent user sessions currently connected + */ + public static final int HASP_TOO_MANY_USERS = 38; + + /** + * Session has been interrupted + */ + public static final int HASP_BROKEN_SESSION = 39; + + /** + * Communication error between local and remote HASP License Manager + */ + public static final int HASP_REMOTE_COMM_ERR = 40; + + /** + * Feature expired + */ + public static final int HASP_FEATURE_EXPIRED = 41; + + /** + * HASP License Manager version too old + */ + public static final int HASP_OLD_LM = 42; + + /** + * Input/Output error occurred in secure storage area of HASP SL key OR + * a USB error occurred when communicating with a HASP HL key + */ + public static final int HASP_DEVICE_ERR = 43; + + /** + * Update installation not permitted; This update was already applied + */ + public static final int HASP_UPDATE_BLOCKED = 44; + + /** + * System time has been tampered with + */ + public static final int HASP_TIME_ERR = 45; + + /** + * Communication error occurred in secure channel + */ + public static final int HASP_SCHAN_ERR = 46; + + /** + * Corrupt data exists in secure storage area of HASP SL protection key + */ + public static final int HASP_STORAGE_CORRUPT = 47; + + /** + * Unable to find Vendor library + */ + public static final int HASP_NO_VLIB = 48; + + /** + * Unable to load Vendor library + */ + public static final int HASP_INV_VLIB = 49; + + /** + * Unable to locate any Features matching scope + */ + public static final int HASP_SCOPE_RESULTS_EMPTY = 50; + + /** + * Program running on a virtual machine + */ + public static final int HASP_VM_DETECTED = 51; + + /** + * HASP SL key incompatible with machine hardware; HASP SL key is locked + * to different hardware. OR: + * In the case of a V2C file, conflict between HASP SL key data and machine + * hardware data; HASP SL key locked to different hardware + */ + public static final int HASP_HARDWARE_MODIFIED = 52; + + /** + * Login denied because of user restrictions + */ + public static final int HASP_USER_DENIED = 53; + + /** + * Trying to install a V2C file with an update counter that is out of + * sequence with the update counter on Sentinel HASP protection key. The + * update counter value in the V2C file is lower than the value in Sentinel + * HASP protection key. + */ + public static final int HASP_UPDATE_TOO_OLD = 54; + + /** + * Trying to install a V2C file with an update counter that is out of + * sequence with update counter in Sentinel HASP protection key. The first + * value in the V2C file is greater than the value in Sentinel HASP + * protection key. + */ + public static final int HASP_UPDATE_TOO_NEW = 55; + + /** + * Vendor library version too old + */ + public static final int HASP_OLD_VLIB = 56; + + /** + * Upload via ACC failed, e.g. because of illegal format + */ + public static final int HASP_UPLOAD_ERROR = 57; + + /** + * Invalid XML "recipient" parameter + */ + public static final int HASP_INV_RECIPIENT = 58; + + /** + * Invalid XML "action" parameter + */ + public static final int HASP_INV_DETACH_ACTION = 59; + + /** + * Scope does not specify a unique Product + */ + public static final int HASP_TOO_MANY_PRODUCTS = 60; + + /** + * Invalid Product information + */ + public static final int HASP_INV_PRODUCT = 61; + + /** + * Unknown Recipient; update can only be applied to the + * Recipient specified in detach(), and not to this computer + */ + public static final int HASP_UNKNOWN_RECIPIENT = 62; + + /** + * Invalid duration + */ + public static final int HASP_INV_DURATION = 63; + + /** + * Cloned secure storage area detected + */ + public static final int HASP_CLONE_DETECTED = 64; + + /** + * Specified V2C update already installed in the LLM + */ + public static final int HASP_UPDATE_ALREADY_ADDED = 65; + + /** + * Specified Hasp Id is in Inactive state + */ + public static final int HASP_HASP_INACTIVE = 66; + + /** + * No detachable feature exists + */ + public static final int HASP_NO_DETACHABLE_FEATURE = 67; + + /** + * No detachable feature exists (typo; kept for compatibility) + */ + public static final int HASP_NO_DEATCHABLE_FEATURE = 67; + + /** + * scope does not specify a unique Host + */ + public static final int HASP_TOO_MANY_HOSTS = 68; + + /** + * Rehost is not allowed for any license + */ + public static final int HASP_REHOST_NOT_ALLOWED = 69; + + /** + * License is rehosted to other machine + */ + public static final int HASP_LICENSE_REHOSTED = 70; + + /** + * Old rehost license try to apply + */ + public static final int HASP_REHOST_ALREADY_APPLIED = 71; + + /** + * File not found or access denied + */ + public static final int HASP_CANNOT_READ_FILE = 72; + + /** + * Extension of license not allowed as number of detached + * licenses is greater than current concurrency count + */ + public static final int HASP_EXTENSION_NOT_ALLOWED = 73; + + /** + * Detach of license not allowed as product + * contains VM disabled feature and host machine is a virtual machine + */ + public static final int HASP_DETACH_DISABLED = 74; + + /** + * Rehost of license not allowed as container + * contains VM disabled feature and host machine is a virtual machine + */ + public static final int HASP_REHOST_DISABLED = 75; + + /** + * Format SL-AdminMode or migrate SL-Legacy to SL-AdminMode not allowed + * as container has detached license + */ + public static final int HASP_DETACHED_LICENSE_FOUND = 76; + + /** + * Recipient of the requested operation is older than expected + */ + public static final int HASP_RECIPIENT_OLD_LM = 77; + + /** + * Secure storage ID mismatch + */ + public static final int HASP_SECURE_STORE_ID_MISMATCH = 78; + + /** + * Duplicate Hostname found while key contains Hostname Fingerprinting + */ + public static final int HASP_DUPLICATE_HOSTNAME = 79; + + /** + * The Sentinel License Manager is required for this operation + */ + public static final int HASP_MISSING_LM = 80; + + /** + * Attempting to consume multiple executions during log in to a Feature. + * However, the license for the Feature does not contain enough remaining executions + */ + public static final int HASP_FEATURE_INSUFFICIENT_EXECUTION_COUNT = 81; + + /** + * Attempting to perform an operation not compatible with target platform + */ + public static final int HASP_INCOMPATIBLE_PLATFORM = 82; + + /** + * The key is disabled due to suspected tampering + */ + public static final int HASP_HASP_DISABLED = 83; + + /** + * The key is inaccessible due to sharing + */ + public static final int HASP_SHARING_VIOLATION = 84; + + /** + * The session was killed due a network malfunction or manually from ACC + */ + public static final int HASP_KILLED_SESSION = 85; + + /** + * Program running on a virtual storage + */ + public static final int HASP_VS_DETECTED = 86; + + /** + * An identity is required + */ + public static final int HASP_IDENTITY_REQUIRED = 87; + + /** + * The identity is not authenticated + */ + public static final int HASP_IDENTITY_UNAUTHENTICATED = 88; + + /** + * The identity is disabled + */ + public static final int HASP_IDENTITY_DISABLED = 89; + + /** + * The identity doesn't have enough permission for the operation + */ + public static final int HASP_IDENTITY_DENIED = 90; + + /** + * A session for this identity from a different machine already exists + */ + public static final int HASP_IDENTITY_SHARING_VIOLATION = 91; + + /** + * The maximum number of machines usable by the identity was reached + */ + public static final int HASP_IDENTITY_TOO_MANY_MACHINES = 92; + + /** + * The server is not ready to authenticate + */ + public static final int HASP_IDENTITY_SERVER_NOT_READY = 93; + + /** + * Trying to install a V2C file with an update counter that is out of + * sync with update counter in the Sentinel protection key + */ + public static final int HASP_UPDATE_OUT_OF_SYNC = 94; + + /** + * Multiple attemps to access the key from remote with a proxy + */ + public static final int HASP_REMOTE_SHARING_VIOLATION = 95; + + /** + * The session was released because the seat was requested from a different location + */ + public static final int HASP_CLOUD_SESSION_OCCUPIED_REMOTELY = 96; + + /** + * Cloud licensing authorization is required to use this license + */ + public static final int HASP_CLOUD_MISSING_AUTHORIZATION = 97; + + /** + * Invalid seat value in network detach. Seat count cannot be decreased when modifying a detach + */ + public static final int HASP_INV_NETWORK_SEATS = 98; + + /** + * Network detach is disabled on products with only unlimited concurrency features + */ + public static final int HASP_NETWORK_DETACH_DISABLED = 99; + + /** + * The requested cloud functionality is not supported + */ + public static final int HASP_CLOUD_NOT_SUPP = 100; + + /** + * Only trusted licenses can be installed in the trusted license storage + */ + public static final int HASP_CLOUD_NOT_TRUSTED = 101; + + /** + * Communication error with the license storage + */ + public static final int HASP_CLOUD_STORAGE_COMM_ERR = 102; + + /** + * The identity is expired + */ + public static final int HASP_IDENTITY_EXPIRED = 103; + + /** + * Invalid option value + */ + public static final int HASP_INV_OPTION = 104; + + /** + * Busy error with the license storage + */ + public static final int HASP_CLOUD_STORAGE_BUSY = 105; + + /** + * This machine cannot be used + */ + public static final int HASP_MACHINE_DENIED = 106; + + /** + * This machine is disabled + */ + public static final int HASP_MACHINE_DISABLED = 107; + + /** + * The rate at which identity requests are received exceeds the contracted limit + */ + public static final int HASP_IDENTITY_RATE_LIMIT_EXCEEDED = 108; + + /** + * Feature start date not yet reached + */ + public static final int HASP_FEATURE_START_DATE_NOT_REACHED = 109; + + /** + * API dispatcher: API for this Vendor Code was not found + */ + public static final int HASP_NO_API_DYLIB = 400; + + /** + * API dispatcher: Unable to load API; DLL possibly corrupt? + */ + public static final int HASP_INV_API_DYLIB = 401; + + /** + * API dispatcher: Unable to find API function; DLL possibly old? + */ + public static final int HASP_INCOMPLETE_API_DYLIB = 402; + + /** + * C++ API: Object incorrectly initialized + */ + public static final int HASP_INVALID_OBJECT = 500; + + /** + * Invalid function parameter + */ + public static final int HASP_INV_PARAM = 501; + + /** + * C++ API: Logging in twice to the same object + */ + public static final int HASP_ALREADY_LOGGED_IN = 502; + + /** + * C++ API: Logging out twice of the same object + */ + public static final int HASP_ALREADY_LOGGED_OUT = 503; + + /** + * .NET API: Incorrect use of system or platform + */ + public static final int HASP_OPERATION_FAILED = 525; + + /* + * Internal use: no classic memory extension block available + */ + public static final int HASP_NO_EXTBLOCK = 600; + + /* + * Internal use: invalid port type + */ + public static final int HASP_INV_PORT_TYPE = 650; + + /* + * Internal use: invalid port value + */ + public static final int HASP_INV_PORT = 651; + + /* + * Dot-Net DLL found broken + */ + public static final int HASP_NET_DLL_BROKEN = 652; + + /** + * Requested function not implemented + */ + public static final int HASP_NOT_IMPL = 698; + + /** + * Internal error occurred in API + */ + public static final int HASP_INT_ERR = 699; + + /* + * Reserved for Sentinel helper libraries + */ + public static final int HASP_FIRST_HELPER = 2001; + + /* + * Reserved for Sentinel Activation API + */ + public static final int HASP_FIRST_HASP_ACT = 3001; + + public static final int HASP_NEXT_FREE_VALUES = 7001; + + public static String runtime_library_default = "HASPJava"; + public static String runtime_library_x64_windows = "HASPJava_x64"; + public static String runtime_library_x64_linux = "HASPJava_x86_64"; + public static String runtime_library_armhf_linux = "HASPJava_armhf"; + public static String runtime_library_arm64_linux = "HASPJava_arm64"; + + public static void Init() + { + String operatingSystem = System.getProperty("os.name"); + String architecture = System.getProperty("os.arch"); + + try + { + if (operatingSystem.indexOf("Windows") != -1) + { + if (architecture.equals("x86_64") || architecture.equals("amd64")) + { + System.loadLibrary(runtime_library_x64_windows); + } + else + { + System.loadLibrary(runtime_library_default); + } + } + else if (operatingSystem.indexOf("Linux") != -1) + { + if (architecture.equals("x86_64") || architecture.equals("amd64")) + { + System.loadLibrary(runtime_library_x64_linux); + } + else if (architecture.equals("arm")) + { + System.loadLibrary(runtime_library_armhf_linux); + } + else if (architecture.equals("aarch64")) + { + System.loadLibrary(runtime_library_arm64_linux); + } + else + { + System.loadLibrary(runtime_library_default); + } + } + else + { + System.loadLibrary(runtime_library_default); + } + } + catch (UnsatisfiedLinkError e) + { + if (e.getMessage().indexOf("already loaded in another classloader") == -1) + { + throw e; + } + } + } +} diff --git a/bolt-api/src/main/java/com/jiluo/bolt/Aladdin/HaspTime.java b/bolt-api/src/main/java/com/jiluo/bolt/Aladdin/HaspTime.java new file mode 100644 index 0000000..7125825 --- /dev/null +++ b/bolt-api/src/main/java/com/jiluo/bolt/Aladdin/HaspTime.java @@ -0,0 +1,118 @@ +package com.jiluo.bolt.Aladdin; + +import com.jiluo.bolt.Aladdin.HaspStatus; + +public class HaspTime +{ + private long time[] = {0}; + private int day[] = {0}; + private int month[] = {0}; + private int year[] = {0}; + private int hour[] = {0}; + private int minute[] = {0}; + private int second[] = {0}; + private int status; + + /* + * private native functions + * + */ + private static native int DatetimeToHasptime(int day, int month, int year, int hour, int minute, int second, long time[]); + private static native int HasptimeToDatetime(long time, int day[], int month[], int year[],int hour[], int minute[], int second[]); + + /** + * IA 64 not considered yet + */ + static + { + HaspStatus.Init(); + } + + /** + * HaspTime constructor. + * + * @param year input year + * @param month input month + * @param day input day + * @param hour input hour + * @param minute input minute + * @param second input second + * + */ + public HaspTime(int year, int month, int day, int hour, + int minute, int second) + { + status = DatetimeToHasptime(day, month, year, hour, minute, second, time); + } + + public HaspTime(long hasptime) + { + time[0] = hasptime; + status = HasptimeToDatetime(hasptime,day,month,year,hour,minute,second); + } + + /** + * Returns the error that occurred in the last function call. + */ + public int getLastError() + { + return status; + } + + /** + * Returns the HASP Time value in UTC format. + */ + public long getHaspTime() + { + return time[0]; + } + + /** + * Returns the month value of the time. + */ + public int getMonth() + { + return month[0]; + } + + /** + * Returns the year value of the time. + */ + public int getYear() + { + return year[0]; + } + + /** + * Returns the day value of the time. + */ + public int getDay() + { + return day[0]; + } + + /** + * Returns the hour value of the time. + */ + public int getHour() + { + return hour[0]; + } + + /** + * Returns the minute value of the time. + */ + public int getMinute() + { + return minute[0]; + } + + /** + * Returns the second value of the time. + */ + public int getSecond() + { + return second[0]; + } +} + diff --git a/bolt-api/src/main/java/com/jiluo/bolt/common/BigDecimalValueFilter.java b/bolt-api/src/main/java/com/jiluo/bolt/common/BigDecimalValueFilter.java new file mode 100644 index 0000000..fd4e0b1 --- /dev/null +++ b/bolt-api/src/main/java/com/jiluo/bolt/common/BigDecimalValueFilter.java @@ -0,0 +1,23 @@ +package com.jiluo.bolt.common; + +import com.alibaba.fastjson.serializer.ValueFilter; + +import java.math.BigDecimal; + +/** + * Created with IntelliJ IDEA. + * + * @Author: fy + * @Date: 2023/04/28/9:40 + * @Description: + */ +public class BigDecimalValueFilter implements ValueFilter { + @Override + public Object process(Object object, String name, Object value) { + if (value instanceof BigDecimal) { + value = ((BigDecimal) value).setScale(2, BigDecimal.ROUND_HALF_EVEN); + return String.format("%.2f", value); + } + return value; + } +} \ No newline at end of file diff --git a/bolt-api/src/main/java/com/jiluo/bolt/common/CameraDriverEnum.java b/bolt-api/src/main/java/com/jiluo/bolt/common/CameraDriverEnum.java new file mode 100644 index 0000000..a2c8aaa --- /dev/null +++ b/bolt-api/src/main/java/com/jiluo/bolt/common/CameraDriverEnum.java @@ -0,0 +1,35 @@ +package com.jiluo.bolt.common; + +import lombok.Getter; + +/** + * Created with IntelliJ IDEA. + * + * @Author: fy + * @Date: 2023/10/17/10:33 + * @Description: + */ +@Getter +public enum CameraDriverEnum { + LucidCamera("lucid_camera","Lucid"), + BaslerCamera("basler_camera","Basler"), + BaumerCamera("baumer_camera","Baumer"); + + String vender; + + String driverName; + + CameraDriverEnum(String vender, String driverName){ + this.vender = vender; + this.driverName = driverName; + } + + public static String getDriverName(String vender){ + for (CameraDriverEnum driver: CameraDriverEnum.values()) { + if (driver.getVender().equals(vender)){ + return driver.getDriverName(); + } + } + return null; + } +} diff --git a/bolt-api/src/main/java/com/jiluo/bolt/common/DefectType.java b/bolt-api/src/main/java/com/jiluo/bolt/common/DefectType.java new file mode 100644 index 0000000..3ef7977 --- /dev/null +++ b/bolt-api/src/main/java/com/jiluo/bolt/common/DefectType.java @@ -0,0 +1,50 @@ +package com.jiluo.bolt.common; + +import lombok.Getter; + +import java.math.BigDecimal; +import java.math.RoundingMode; +import java.util.Arrays; +import java.util.List; +import java.util.stream.Collectors; + +/** + * Created with IntelliJ IDEA. + * + * @Author: fy + * @Date: 2023/04/27/14:12 + * @Description:检测结果缺陷类型 + */ +@Getter +public enum DefectType { + bolt("螺栓松动", DetectType.BOLT_AND_LINE, 0), + + line("引出线变形", DetectType.BOLT_AND_LINE, 0), + + pole("磁极开闸", DetectType.BOLT_AND_LINE, 0), + + temperature("无线测温", DetectType.TEMPERATURE, 0); + + @Getter + String desc; + + @Getter + DetectType detectType; + + @Getter + BigDecimal defaultValue; + + DefectType(String desc, DetectType detectType, int defaultValue) { + this.desc = desc; + this.detectType = detectType; + this.defaultValue = new BigDecimal(defaultValue).setScale(2, RoundingMode.HALF_UP); + } + + public static DefectType toDefectType(String type) { + return Arrays.stream(DefectType.values()).filter(_t -> _t.getDesc().equalsIgnoreCase(type) || _t.name().equalsIgnoreCase(type)).findFirst().orElse(null); + } + + public static List defectTypes(String product) { + return Arrays.stream(DefectType.values()).filter(_t -> _t.getDetectType().getProduct().equalsIgnoreCase(product)).collect(Collectors.toList()); + } +} \ No newline at end of file diff --git a/bolt-api/src/main/java/com/jiluo/bolt/common/DetectAttribute.java b/bolt-api/src/main/java/com/jiluo/bolt/common/DetectAttribute.java new file mode 100644 index 0000000..b0ae369 --- /dev/null +++ b/bolt-api/src/main/java/com/jiluo/bolt/common/DetectAttribute.java @@ -0,0 +1,38 @@ +package com.jiluo.bolt.common; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; +import java.util.Map; + +/** + * Created with IntelliJ IDEA. + * + * @Author: fy + * @Date: 2023/05/11/16:12 + * @Description:检测结果描述 + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +@Builder +public class DetectAttribute { + private String productId; + + private String productName; + + private Integer detectZone; + + private Integer detectTotal; + + private Integer detectDuration; + + private Integer defectTotal; + + private Map> defectZone; + + private String detectTrack; +} diff --git a/bolt-api/src/main/java/com/jiluo/bolt/common/DetectConfig.java b/bolt-api/src/main/java/com/jiluo/bolt/common/DetectConfig.java new file mode 100644 index 0000000..5ad51e0 --- /dev/null +++ b/bolt-api/src/main/java/com/jiluo/bolt/common/DetectConfig.java @@ -0,0 +1,68 @@ +package com.jiluo.bolt.common; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * Created with IntelliJ IDEA. + * + * @Author: fy + * @Date: 2023/05/11/14:19 + * @Description:检测参数配置 + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +@Builder +public class DetectConfig { + + private Boolean bolt; + + private Boolean line; + + private Boolean pole; + + private Boolean temp; + + private Double detect_threshold_bolt; + + private Double detect_threshold_line; + + private Double detect_threshold_pole; + + private Double detect_threshold_temperature; + + private Integer detect_duration; + + private Integer detect_work_zone; + + private String defect_work_dir; + + private Integer delayDetect; + + private String plc_ip; + + private Integer plc_delay; + + private String serial_number; + + private Integer width; + + private Integer height; + + private Double fps; + + private Double exposureTime; + + private String jobId; + + private String algorithm_id; + + private String algorithm_type; + + private String algorithm_name; + + private String algorithm_model; +} diff --git a/bolt-api/src/main/java/com/jiluo/bolt/common/DetectJob.java b/bolt-api/src/main/java/com/jiluo/bolt/common/DetectJob.java new file mode 100644 index 0000000..76a8f42 --- /dev/null +++ b/bolt-api/src/main/java/com/jiluo/bolt/common/DetectJob.java @@ -0,0 +1,34 @@ +package com.jiluo.bolt.common; + +import com.alibaba.fastjson.JSONObject; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * Created with IntelliJ IDEA. + * + * @Author: fy + * @Date: 2023/07/03/19:56 + * @Description:检测任务 + */ + +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class DetectJob { + private String jobId; + private String powerStation; + private String motorGroup; + private String point; + private String deviceId; + private JSONObject attribute; + private JSONObject config; + + /** + * 当前的检测状态 0-检测结束,结果正常,1-检测结束,结果异常,2-检测过程中程序错误,3-检测中 + */ + private Integer status; +} diff --git a/bolt-api/src/main/java/com/jiluo/bolt/common/DetectMessage.java b/bolt-api/src/main/java/com/jiluo/bolt/common/DetectMessage.java new file mode 100644 index 0000000..3e1a88c --- /dev/null +++ b/bolt-api/src/main/java/com/jiluo/bolt/common/DetectMessage.java @@ -0,0 +1,25 @@ +package com.jiluo.bolt.common; + +import com.alibaba.fastjson.JSONObject; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * Created with IntelliJ IDEA. + * + * @Author: fy + * @Date: 2023/09/18/16:24 + * @Description:检测结果Websocket消息队列 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class DetectMessage { + + private String pointId; + + private JSONObject jsonObject; +} diff --git a/bolt-api/src/main/java/com/jiluo/bolt/common/DetectResult.java b/bolt-api/src/main/java/com/jiluo/bolt/common/DetectResult.java new file mode 100644 index 0000000..60fbf85 --- /dev/null +++ b/bolt-api/src/main/java/com/jiluo/bolt/common/DetectResult.java @@ -0,0 +1,26 @@ +package com.jiluo.bolt.common; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * Created with IntelliJ IDEA. + * + * @Author: fy + * @Date: 2023/07/10/11:08 + * @Description:统一检测结果 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class DetectResult { + private int zone; // 区域, 如: 1号扇区 + private int position; // 位置, 如: 3号螺栓,5号引出线 + private String type; // 类型, 如:螺栓,引出线 + private Float value; // 检测值 + private String img; + private int alarm; +} diff --git a/bolt-api/src/main/java/com/jiluo/bolt/common/DetectResultKey.java b/bolt-api/src/main/java/com/jiluo/bolt/common/DetectResultKey.java new file mode 100644 index 0000000..fdb0659 --- /dev/null +++ b/bolt-api/src/main/java/com/jiluo/bolt/common/DetectResultKey.java @@ -0,0 +1,50 @@ +package com.jiluo.bolt.common; + +/** + * Created with IntelliJ IDEA. + * + * @Author: fy + * @Date: 2023/07/26/14:07 + * @Description: + */ +public class DetectResultKey { + private int zone; + private int position; + private String type; + + public DetectResultKey(DetectResult detect) { + this.zone = detect.getZone(); + this.position = detect.getPosition(); + this.type = detect.getType(); + } + + // 实现hashCode()和equals()方法以便正确操作HashMap + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + zone; + result = prime * result + position; + result = prime * result + ((type == null) ? 0 : type.hashCode()); + return result; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null || getClass() != obj.getClass()) + return false; + DetectResultKey other = (DetectResultKey) obj; + if (zone != other.zone) + return false; + if (position != other.position) + return false; + if (type == null) { + if (other.type != null) + return false; + } else if (!type.equals(other.type)) + return false; + return true; + } +} \ No newline at end of file diff --git a/bolt-api/src/main/java/com/jiluo/bolt/common/DetectType.java b/bolt-api/src/main/java/com/jiluo/bolt/common/DetectType.java new file mode 100644 index 0000000..39eda68 --- /dev/null +++ b/bolt-api/src/main/java/com/jiluo/bolt/common/DetectType.java @@ -0,0 +1,34 @@ +package com.jiluo.bolt.common; + +import lombok.Getter; + +import java.util.Arrays; + +/** + * Created with IntelliJ IDEA. + * + * @Author: fy + * @Date: 2023/04/27/14:14 + * @Description:检测类型 + */ +@Getter +public enum DetectType { + BOLT_AND_LINE("BOLT_AND_LINE", "螺栓引出线磁极开闸检测"), + + TEMPERATURE("TEMPERATURE", "无线测温"); + + @Getter + String desc; + + @Getter + String product; + + DetectType(String product, String desc) { + this.desc = desc; + this.product = product; + } + + public static DetectType toDetectType(String type) { + return Arrays.stream(DetectType.values()).filter(_t -> _t.getProduct().equalsIgnoreCase(type) || _t.name().equalsIgnoreCase(type)).findFirst().orElse(null); + } +} \ No newline at end of file diff --git a/bolt-api/src/main/java/com/jiluo/bolt/common/LocalStatus.java b/bolt-api/src/main/java/com/jiluo/bolt/common/LocalStatus.java new file mode 100644 index 0000000..610b475 --- /dev/null +++ b/bolt-api/src/main/java/com/jiluo/bolt/common/LocalStatus.java @@ -0,0 +1,28 @@ +package com.jiluo.bolt.common; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * Created with IntelliJ IDEA. + * + * @Author: fy + * @Date: 2023/07/19/10:06 + * @Description:设备状态-内存存储 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class LocalStatus { + + private static final long serialVersionUID = 1L; + + private Integer cameraStatus; //相机设备状态:0-停用,1-正常,2-离线 + + private Integer pointStatus; //检测点状态:0-检测正常,1-检测异常,2-设备掉线 + + private Integer tempSensorStatus; //温度传感器状态:0-停用,1-正常,2-离线 +} diff --git a/bolt-api/src/main/java/com/jiluo/bolt/common/PermissionValue.java b/bolt-api/src/main/java/com/jiluo/bolt/common/PermissionValue.java new file mode 100644 index 0000000..1a3aedf --- /dev/null +++ b/bolt-api/src/main/java/com/jiluo/bolt/common/PermissionValue.java @@ -0,0 +1,28 @@ +package com.jiluo.bolt.common; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; + +/** + * Created with IntelliJ IDEA. + * + * @Author: fy + * @Date: 2023/07/06/11:12 + * @Description: + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class PermissionValue implements Serializable { + + private static final long serialVersionUID = 1L; + + private String permissionId; + + private Boolean value; +} diff --git a/bolt-api/src/main/java/com/jiluo/bolt/entity/dto/AlgorithmConfigDto.java b/bolt-api/src/main/java/com/jiluo/bolt/entity/dto/AlgorithmConfigDto.java new file mode 100644 index 0000000..8e0cdef --- /dev/null +++ b/bolt-api/src/main/java/com/jiluo/bolt/entity/dto/AlgorithmConfigDto.java @@ -0,0 +1,39 @@ +package com.jiluo.bolt.entity.dto; + +import lombok.*; +import lombok.experimental.Accessors; +import org.springframework.format.annotation.DateTimeFormat; + +import java.io.Serializable; +import java.util.List; + +/** + * (AlgorithmConfig)表实体类 + * + * @author Fangy + * @since 2023-05-08 17:46:48 + */ +@Data +@Builder +@Accessors(chain = true) +@NoArgsConstructor +@AllArgsConstructor +public class AlgorithmConfigDto implements Serializable { + private static final long serialVersionUID = 1L; + + private String algorithmConfigId; + + private String name; + + private Double boltThreshold; + + private Double lineThreshold; + + @DateTimeFormat(pattern = "HH:mm") + private List dailyAutoDetectionTime; + + private Integer delayDetect; + + private List pointIdList; + +} diff --git a/bolt-api/src/main/java/com/jiluo/bolt/entity/dto/AlgorithmDto.java b/bolt-api/src/main/java/com/jiluo/bolt/entity/dto/AlgorithmDto.java new file mode 100644 index 0000000..641e2fd --- /dev/null +++ b/bolt-api/src/main/java/com/jiluo/bolt/entity/dto/AlgorithmDto.java @@ -0,0 +1,41 @@ +package com.jiluo.bolt.entity.dto; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; +import java.util.List; + +/** + * Created with IntelliJ IDEA. + * + * @Author: fy + * @Date: 2023/07/03/15:43 + * @Description: + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class AlgorithmDto implements Serializable { + + private static final long serialVersionUID = 1L; + + private String algorithmId; + + private String source; + + private String algorithmName; + + private String algorithmFileName; + + private String powerStationId; + + private String motorGroupId; + + private String pointId; + + List points; +} diff --git a/bolt-api/src/main/java/com/jiluo/bolt/entity/dto/AlgorithmModelDto.java b/bolt-api/src/main/java/com/jiluo/bolt/entity/dto/AlgorithmModelDto.java new file mode 100644 index 0000000..8578a3b --- /dev/null +++ b/bolt-api/src/main/java/com/jiluo/bolt/entity/dto/AlgorithmModelDto.java @@ -0,0 +1,26 @@ +package com.jiluo.bolt.entity.dto; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.experimental.Accessors; + +/** + * Created with IntelliJ IDEA. + * + * @Author: fy + * @Date: 2023/05/15/16:59 + * @Description: + */ +@Data +@Builder +@Accessors(chain = true) +@AllArgsConstructor +@NoArgsConstructor +public class AlgorithmModelDto { + + private String detect_threshold_model; + + private String detect_threshold_bk; +} diff --git a/bolt-api/src/main/java/com/jiluo/bolt/entity/dto/DetectDto.java b/bolt-api/src/main/java/com/jiluo/bolt/entity/dto/DetectDto.java new file mode 100644 index 0000000..3484c51 --- /dev/null +++ b/bolt-api/src/main/java/com/jiluo/bolt/entity/dto/DetectDto.java @@ -0,0 +1,53 @@ +package com.jiluo.bolt.entity.dto; + +import java.io.Serializable; +import java.util.List; + +import lombok.Data; +import lombok.AllArgsConstructor; +import lombok.NoArgsConstructor; +import lombok.Builder; +import org.springframework.format.annotation.DateTimeFormat; + +/** + * 检测过程表(Detect)实体类 + * + * @author Fangy + * @since 2023-05-05 09:57:05 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class DetectDto implements Serializable { + private static final long serialVersionUID = -11167425972916095L; + + @DateTimeFormat(pattern = "yyyy-MM-dd") + private String startTime; + + @DateTimeFormat(pattern = "yyyy-MM-dd") + private String endTime; + + Integer current; + + Integer size; + + private Integer id; + + private String powerStationId; + + private String motorGroupId; + + private String pointId; + + private String jobId; + + private Integer zone; + + private Integer status; + + private List features; + + private List jobs; +} + diff --git a/bolt-api/src/main/java/com/jiluo/bolt/entity/dto/DetectResultDto.java b/bolt-api/src/main/java/com/jiluo/bolt/entity/dto/DetectResultDto.java new file mode 100644 index 0000000..6ba73bf --- /dev/null +++ b/bolt-api/src/main/java/com/jiluo/bolt/entity/dto/DetectResultDto.java @@ -0,0 +1,30 @@ +package com.jiluo.bolt.entity.dto; + +import com.jiluo.bolt.common.DetectResult; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; +import java.util.List; + +/** + * Created with IntelliJ IDEA. + * + * @Author: fy + * @Date: 2023/07/14/16:56 + * @Description: + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class DetectResultDto implements Serializable { + + private static final long serialVersionUID = 1L; + + private String jobId; + + private List detectList; +} diff --git a/bolt-api/src/main/java/com/jiluo/bolt/entity/dto/DeviceDto.java b/bolt-api/src/main/java/com/jiluo/bolt/entity/dto/DeviceDto.java new file mode 100644 index 0000000..514cbb1 --- /dev/null +++ b/bolt-api/src/main/java/com/jiluo/bolt/entity/dto/DeviceDto.java @@ -0,0 +1,92 @@ +package com.jiluo.bolt.entity.dto; + +import java.math.BigDecimal; +import java.util.Date; +import java.io.Serializable; + +import lombok.Data; +import lombok.AllArgsConstructor; +import lombok.NoArgsConstructor; +import lombok.Builder; +import org.hibernate.validator.constraints.Length; + +/** + * 设备信息表(Device)实体类 + * + * @author Fangy + * @since 2023-05-05 09:57:05 + */ +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class DeviceDto implements Serializable { + private static final long serialVersionUID = -34441038340206111L; + + private Date gmtCreate; + + private Date gmtModify; + + private Integer id; + /** + * 设备编号 + */ + @Length(max=50,message = "输入长度应小于{max}字") + private String deviceId; + /** + * 设备类别 + */ + private String type; + /** + * 设备名称 + */ + @Length(max=50,message = "输入长度应小于{max}字") + private String name; + /** + * 关联电站 + */ + private String powerStationId; + /** + * 关联检测类型 + */ + private String product; + /** + * 关联机组 + */ + private String motorGroupId; + /** + * 关联检测点位 + */ + private String pointId; + /** + * 设备状态:0-停用,1-正常,2-离线 + */ + private Integer status; + /** + * 工作保护温度 + */ + private BigDecimal tempThreshold; + /** + * 设备配置属性 + */ + private String config; + /** + * 标识厂商 + */ + private String nameOrSN; + + private String sn; + + private String vender; + + private Double fps; + + private Double exposureTime; + + @Length(max=50,message = "输入长度应小于{max}字") + private String plcIp; + + private Integer plcDelay; + +} + diff --git a/bolt-api/src/main/java/com/jiluo/bolt/entity/dto/IdToNameDto.java b/bolt-api/src/main/java/com/jiluo/bolt/entity/dto/IdToNameDto.java new file mode 100644 index 0000000..7b684ca --- /dev/null +++ b/bolt-api/src/main/java/com/jiluo/bolt/entity/dto/IdToNameDto.java @@ -0,0 +1,23 @@ +package com.jiluo.bolt.entity.dto; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * Created with IntelliJ IDEA. + * + * @Author: fy + * @Date: 2023/06/15/14:59 + * @Description: + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +public class IdToNameDto { + private static final long serialVersionUID = -18677499673088561L; + + private String id; + + private String name; +} diff --git a/bolt-api/src/main/java/com/jiluo/bolt/entity/dto/ImgDto.java b/bolt-api/src/main/java/com/jiluo/bolt/entity/dto/ImgDto.java new file mode 100644 index 0000000..2461bf0 --- /dev/null +++ b/bolt-api/src/main/java/com/jiluo/bolt/entity/dto/ImgDto.java @@ -0,0 +1,23 @@ +package com.jiluo.bolt.entity.dto; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * Created with IntelliJ IDEA. + * + * @Author: fy + * @Date: 2023/06/06/15:27 + * @Description: + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +public class ImgDto { + private static final long serialVersionUID = -18677499673088561L; + + private String jobId; + + private String img; +} diff --git a/bolt-api/src/main/java/com/jiluo/bolt/entity/dto/MotorGroupDto.java b/bolt-api/src/main/java/com/jiluo/bolt/entity/dto/MotorGroupDto.java new file mode 100644 index 0000000..6924f1b --- /dev/null +++ b/bolt-api/src/main/java/com/jiluo/bolt/entity/dto/MotorGroupDto.java @@ -0,0 +1,38 @@ +package com.jiluo.bolt.entity.dto; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; +import org.hibernate.validator.constraints.Length; + +import java.io.Serializable; + +/** + * Created with IntelliJ IDEA. + * + * @Author: fy + * @Date: 2023/06/26/15:08 + * @Description: + */ +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class MotorGroupDto implements Serializable { + + private static final long serialVersionUID = 1L; + + private String powerStationId; + + private String motorGroupId; + + @Length(max=50,message = "输入长度应小于{max}字") + private String number; + + @Length(max=50,message = "输入长度应小于{max}字") + private String contact; + + @Length(max=50,message = "输入长度应小于{max}字") + private String phone; +} diff --git a/bolt-api/src/main/java/com/jiluo/bolt/entity/dto/PermissionDto.java b/bolt-api/src/main/java/com/jiluo/bolt/entity/dto/PermissionDto.java new file mode 100644 index 0000000..df8c192 --- /dev/null +++ b/bolt-api/src/main/java/com/jiluo/bolt/entity/dto/PermissionDto.java @@ -0,0 +1,30 @@ +package com.jiluo.bolt.entity.dto; + +import com.jiluo.bolt.common.PermissionValue; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; +import java.util.List; + +/** + * Created with IntelliJ IDEA. + * + * @Author: fy + * @Date: 2023/07/06/11:06 + * @Description: + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class PermissionDto implements Serializable { + + private static final long serialVersionUID = 1L; + + private String roleId; + + private List permissionList; +} diff --git a/bolt-api/src/main/java/com/jiluo/bolt/entity/dto/PointDto.java b/bolt-api/src/main/java/com/jiluo/bolt/entity/dto/PointDto.java new file mode 100644 index 0000000..845dc99 --- /dev/null +++ b/bolt-api/src/main/java/com/jiluo/bolt/entity/dto/PointDto.java @@ -0,0 +1,56 @@ +package com.jiluo.bolt.entity.dto; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; +import org.hibernate.validator.constraints.Length; + +import javax.validation.constraints.*; +import java.io.Serializable; +import java.math.BigDecimal; + +/** + * Created with IntelliJ IDEA. + * + * @Author: fy + * @Date: 2023/06/27/10:18 + * @Description: + */ +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class PointDto implements Serializable { + + private static final long serialVersionUID = 1L; + + private String powerStationId; + + private String motorGroupId; + + private String pointId; + + @Length(max=10,message = "输入长度应小于{max}字") + private String name; + + @Min(value = 1, message = "磁极数量应大于1个") + @Max(value = 999, message = "磁极数量应小于999个") + private Integer poleNum; + + @DecimalMin(value = "0.0", inclusive = false, message = "检测时长应大于0s") + @DecimalMax(value = "600.0", inclusive = false, message = "检测时长应小于600s") + private BigDecimal manualTime; + + @DecimalMin(value = "0.0", inclusive = false, message = "检测时长应大于0s") + @DecimalMax(value = "600.0", inclusive = false, message = "检测时长应小于600s") + private BigDecimal automaticTime; + + private Boolean boltDetect; + + private Boolean lineDetect; + + private Boolean poleOpenDetect; + + private Boolean pointTempDetect; +} diff --git a/bolt-api/src/main/java/com/jiluo/bolt/entity/dto/PowerStationDto.java b/bolt-api/src/main/java/com/jiluo/bolt/entity/dto/PowerStationDto.java new file mode 100644 index 0000000..f09a216 --- /dev/null +++ b/bolt-api/src/main/java/com/jiluo/bolt/entity/dto/PowerStationDto.java @@ -0,0 +1,45 @@ +package com.jiluo.bolt.entity.dto; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; +import org.hibernate.validator.constraints.Length; + +import javax.validation.constraints.NotBlank; +import java.io.Serializable; + +/** + * Created with IntelliJ IDEA. + * + * @Author: fy + * @Date: 2023/06/26/10:10 + * @Description: + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class PowerStationDto implements Serializable { + + private static final long serialVersionUID = 1L; + + private String powerStationId; + + @NotBlank(message = "名称不能为空") + @Length(max=50,message = "输入长度应小于{max}字") + private String name; + + @Length(max=50,message = "输入长度应小于{max}字") + private String address; + + @Length(max=50,message = "输入长度应小于{max}字") + private String contact; + + @Length(max=50,message = "输入长度应小于{max}字") + private String phone; + + @Length(max=200,message = "输入长度应小于{max}字") + private String introduction; + +} diff --git a/bolt-api/src/main/java/com/jiluo/bolt/entity/dto/RoleDto.java b/bolt-api/src/main/java/com/jiluo/bolt/entity/dto/RoleDto.java new file mode 100644 index 0000000..522bfee --- /dev/null +++ b/bolt-api/src/main/java/com/jiluo/bolt/entity/dto/RoleDto.java @@ -0,0 +1,30 @@ +package com.jiluo.bolt.entity.dto; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; + +/** + * Created with IntelliJ IDEA. + * + * @Author: fy + * @Date: 2023/07/06/9:59 + * @Description: + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class RoleDto implements Serializable { + + private static final long serialVersionUID = 1L; + + private String roleId; + + private String roleName; + + +} diff --git a/bolt-api/src/main/java/com/jiluo/bolt/entity/dto/SystemInfoConfigDto.java b/bolt-api/src/main/java/com/jiluo/bolt/entity/dto/SystemInfoConfigDto.java new file mode 100644 index 0000000..752f21a --- /dev/null +++ b/bolt-api/src/main/java/com/jiluo/bolt/entity/dto/SystemInfoConfigDto.java @@ -0,0 +1,40 @@ +package com.jiluo.bolt.entity.dto; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; +import org.hibernate.validator.constraints.Length; + +import java.io.Serializable; +import java.util.List; + +/** + * Created with IntelliJ IDEA. + * + * @Author: fy + * @Date: 2023/07/05/13:08 + * @Description: + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class SystemInfoConfigDto implements Serializable { + + private static final long serialVersionUID = 1L; + + private String systemInfoId; + + private String systemInfoName; + + private String logoFileName; + + @Length(max=10,message = "输入长度应小于{max}字") + private String systemName; + + List powerStations; + + private String reservedField; + +} diff --git a/bolt-api/src/main/java/com/jiluo/bolt/entity/dto/TempSenserDto.java b/bolt-api/src/main/java/com/jiluo/bolt/entity/dto/TempSenserDto.java new file mode 100644 index 0000000..cfd9710 --- /dev/null +++ b/bolt-api/src/main/java/com/jiluo/bolt/entity/dto/TempSenserDto.java @@ -0,0 +1,60 @@ +package com.jiluo.bolt.entity.dto; + +import com.alibaba.fastjson.JSONObject; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; +import org.hibernate.validator.constraints.Length; + +import java.io.Serializable; + +/** + * Created with IntelliJ IDEA. + * + * @Author: fy + * @Date: 2023/07/11/16:41 + * @Description: + */ +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class TempSenserDto implements Serializable { + + private static final long serialVersionUID = 1L; + + private String deviceId; + @Length(max=50,message = "输入长度应小于{max}字") + private String name; + + private String serialPort; + + private String nameOrSerialPort; + + private String type; + + private String powerStationId; + + private String motorGroupId; + + private String pointId; + + private String powerStation; + + private String Group_Point; + + private String relatedDeviceId; + + private String relatedDevice; + + private Integer status; + + private String typeId; + + private String jobId; + + private Double value; + + private JSONObject config; +} diff --git a/bolt-api/src/main/java/com/jiluo/bolt/entity/dto/TempThresholdDto.java b/bolt-api/src/main/java/com/jiluo/bolt/entity/dto/TempThresholdDto.java new file mode 100644 index 0000000..0609a63 --- /dev/null +++ b/bolt-api/src/main/java/com/jiluo/bolt/entity/dto/TempThresholdDto.java @@ -0,0 +1,34 @@ +package com.jiluo.bolt.entity.dto; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.experimental.Accessors; + +import java.math.BigDecimal; +import java.util.List; + +/** + * Created with IntelliJ IDEA. + * + * @Author: fy + * @Date: 2023/05/10/15:33 + * @Description: + */ +@Data +@Builder +@Accessors(chain = true) +@AllArgsConstructor +@NoArgsConstructor +public class TempThresholdDto { + private static final long serialVersionUID = 1L; + + private String tempThresholdId; + + private String name; + + private BigDecimal tempThreshold; + + private List deviceIdList; +} diff --git a/bolt-api/src/main/java/com/jiluo/bolt/entity/dto/ThemeConfigDto.java b/bolt-api/src/main/java/com/jiluo/bolt/entity/dto/ThemeConfigDto.java new file mode 100644 index 0000000..4fc55b7 --- /dev/null +++ b/bolt-api/src/main/java/com/jiluo/bolt/entity/dto/ThemeConfigDto.java @@ -0,0 +1,46 @@ +package com.jiluo.bolt.entity.dto; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; +import java.util.List; + +/** + * Created with IntelliJ IDEA. + * + * @Author: fy + * @Date: 2023/07/05/15:58 + * @Description: + */ +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class ThemeConfigDto implements Serializable { + + private static final long serialVersionUID = 1L; + + private String themeId; + + private String themeName; + + private String primary; + private String primary_btn_color; + private String bg_color; + private String border_color; + private String nav_bg; + private String text_color; + private String desc_color; + private String thead_bg; + private String tag_bg; + private String tag_color; + private String card_text_color; + private String card_hd_bg_color; + private String corner_color; + private String title_color; + + List powerStationList; +} diff --git a/bolt-api/src/main/java/com/jiluo/bolt/entity/dto/UserDto.java b/bolt-api/src/main/java/com/jiluo/bolt/entity/dto/UserDto.java new file mode 100644 index 0000000..9adc2cb --- /dev/null +++ b/bolt-api/src/main/java/com/jiluo/bolt/entity/dto/UserDto.java @@ -0,0 +1,54 @@ +package com.jiluo.bolt.entity.dto; + +import java.util.Date; +import java.io.Serializable; +import lombok.Data; +import lombok.AllArgsConstructor; +import lombok.NoArgsConstructor; +import lombok.Builder; +import org.hibernate.validator.constraints.Length; + +/** + * 用户信息表(User)实体类 + * + * @author Fangy + * @since 2023-05-05 09:57:05 + */ +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class UserDto implements Serializable { + private static final long serialVersionUID = -18677499673088561L; + + private Date gmtCreate; + + private Date gmtModify; + + private Integer id; + /** + * 用户编号 + */ + @Length(max=50,message = "输入长度应小于{max}字") + private String uid; + /** + * 用户姓名 + */ + @Length(max=50,message = "输入长度应小于{max}字") + private String userName; + /** + * 用户密码 + */ + @Length(max=50,message = "输入长度应小于{max}字") + private String password; + /** + * 用户类型 + */ + private String role; + + private String clientVersion; + + private String clientType; + +} + diff --git a/bolt-api/src/main/java/com/jiluo/bolt/entity/vo/AlgorithmVo.java b/bolt-api/src/main/java/com/jiluo/bolt/entity/vo/AlgorithmVo.java new file mode 100644 index 0000000..9ce2853 --- /dev/null +++ b/bolt-api/src/main/java/com/jiluo/bolt/entity/vo/AlgorithmVo.java @@ -0,0 +1,35 @@ +package com.jiluo.bolt.entity.vo; + +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.Date; + +/** + * Created with IntelliJ IDEA. + * + * @Author: fy + * @Date: 2023/07/03/15:37 + * @Description: + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class AlgorithmVo { + + private String AlgorithmId; + + private String name; + + private String source; + + private Integer group_point_num; + + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private Date gmtCreate; + +} diff --git a/bolt-api/src/main/java/com/jiluo/bolt/entity/vo/DefectVo.java b/bolt-api/src/main/java/com/jiluo/bolt/entity/vo/DefectVo.java new file mode 100644 index 0000000..766d4c3 --- /dev/null +++ b/bolt-api/src/main/java/com/jiluo/bolt/entity/vo/DefectVo.java @@ -0,0 +1,41 @@ +package com.jiluo.bolt.entity.vo; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.jiluo.bolt.common.DefectType; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; +import java.math.BigDecimal; +import java.util.Date; + +/** + * Created with IntelliJ IDEA. + * + * @Author: fy + * @Date: 2023/04/21/18:35 + * @Description:检测结果 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +@JsonInclude(JsonInclude.Include.NON_NULL) +public class DefectVo { + + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private Date time; + + private DefectType type; + + private Integer zone; + + private Integer position; + + private String img; + + private BigDecimal value; + + private Boolean alarm; +} diff --git a/bolt-api/src/main/java/com/jiluo/bolt/entity/vo/DeviceVo.java b/bolt-api/src/main/java/com/jiluo/bolt/entity/vo/DeviceVo.java new file mode 100644 index 0000000..c6735eb --- /dev/null +++ b/bolt-api/src/main/java/com/jiluo/bolt/entity/vo/DeviceVo.java @@ -0,0 +1,56 @@ +package com.jiluo.bolt.entity.vo; + +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.Date; + +/** + * Created with IntelliJ IDEA. + * + * @Author: fy + * @Date: 2023/06/28/15:22 + * @Description: + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class DeviceVo { + + private String deviceId; + + private String name; + + private String sn; + + private String plcIp; + + private String powerStationId; + + private String motorGroupId; + + private String pointId; + + private String powerStation; + + private String Group_Point; + + private Double fps; + + private Double exposureTime; + + private Integer status; + + private String venderId; + + private String vender; + + private Integer plcDelay; + + @JsonFormat(pattern = "yyyy-MM-dd") + private Date gmtCreate; +} diff --git a/bolt-api/src/main/java/com/jiluo/bolt/entity/vo/DropDownVo.java b/bolt-api/src/main/java/com/jiluo/bolt/entity/vo/DropDownVo.java new file mode 100644 index 0000000..fb31766 --- /dev/null +++ b/bolt-api/src/main/java/com/jiluo/bolt/entity/vo/DropDownVo.java @@ -0,0 +1,28 @@ +package com.jiluo.bolt.entity.vo; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * Created with IntelliJ IDEA. + * + * @Author: fy + * @Date: 2023/07/03/11:51 + * @Description: + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class DropDownVo { + + private String powerStationId; + + private String motorGroupId; + + private String pointId; + + private String name; +} diff --git a/bolt-api/src/main/java/com/jiluo/bolt/entity/vo/HistoricalDataVo.java b/bolt-api/src/main/java/com/jiluo/bolt/entity/vo/HistoricalDataVo.java new file mode 100644 index 0000000..6f80810 --- /dev/null +++ b/bolt-api/src/main/java/com/jiluo/bolt/entity/vo/HistoricalDataVo.java @@ -0,0 +1,39 @@ +package com.jiluo.bolt.entity.vo; + +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.Date; + +/** + * Created with IntelliJ IDEA. + * + * @Author: fy + * @Date: 2023/04/21/17:01 + * @Description:历史数据 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class HistoricalDataVo { + + private String jobId; + + private String motorGroup; + + private String point; + + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + private Date gmtCreate; + + private String type; + + private Integer status; + + private String info; + +} diff --git a/bolt-api/src/main/java/com/jiluo/bolt/entity/vo/MotorGroupVo.java b/bolt-api/src/main/java/com/jiluo/bolt/entity/vo/MotorGroupVo.java new file mode 100644 index 0000000..dc7390d --- /dev/null +++ b/bolt-api/src/main/java/com/jiluo/bolt/entity/vo/MotorGroupVo.java @@ -0,0 +1,39 @@ +package com.jiluo.bolt.entity.vo; + +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.Date; + +/** + * Created with IntelliJ IDEA. + * + * @Author: fy + * @Date: 2023/06/26/15:16 + * @Description: + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class MotorGroupVo { + private String motorGroupId; + + private String name; + + private String powerStationId; + + private String powerStation; + + private Integer pointNum; + + private String contact; + + private String phone; + + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private Date gmtCreate; +} diff --git a/bolt-api/src/main/java/com/jiluo/bolt/entity/vo/PermissionVo.java b/bolt-api/src/main/java/com/jiluo/bolt/entity/vo/PermissionVo.java new file mode 100644 index 0000000..689a62c --- /dev/null +++ b/bolt-api/src/main/java/com/jiluo/bolt/entity/vo/PermissionVo.java @@ -0,0 +1,29 @@ +package com.jiluo.bolt.entity.vo; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * Created with IntelliJ IDEA. + * + * @Author: fy + * @Date: 2023/07/06/10:55 + * @Description: + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class PermissionVo { + + private String permissionId; + + private String permissionName; + + private boolean value; + + //应用范围 0-前端检测系统权限;1-后台管理系统权限 + private Integer scope; +} diff --git a/bolt-api/src/main/java/com/jiluo/bolt/entity/vo/PointVo.java b/bolt-api/src/main/java/com/jiluo/bolt/entity/vo/PointVo.java new file mode 100644 index 0000000..b9e00a9 --- /dev/null +++ b/bolt-api/src/main/java/com/jiluo/bolt/entity/vo/PointVo.java @@ -0,0 +1,52 @@ +package com.jiluo.bolt.entity.vo; + +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.Date; + +/** + * Created with IntelliJ IDEA. + * + * @Author: fy + * @Date: 2023/06/27/10:38 + * @Description: + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class PointVo { + + private String pointId; + + private String name; + + private String motorGroupId; + + private String motorGroup; + + private String powerStationId; + + private String powerStation; + + private Integer poleNum; + + private Boolean boltDetect; + + private Boolean lineDetect; + + private Boolean poleOpenDetect; + + private Boolean pointTempDetect; + + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private Date gmtCreate; + + private Integer manualTime; + + private Integer automaticTime; +} diff --git a/bolt-api/src/main/java/com/jiluo/bolt/entity/vo/PowerStationVo.java b/bolt-api/src/main/java/com/jiluo/bolt/entity/vo/PowerStationVo.java new file mode 100644 index 0000000..4280c5a --- /dev/null +++ b/bolt-api/src/main/java/com/jiluo/bolt/entity/vo/PowerStationVo.java @@ -0,0 +1,39 @@ +package com.jiluo.bolt.entity.vo; + +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.Date; + +/** + * Created with IntelliJ IDEA. + * + * @Author: fy + * @Date: 2023/06/26/10:06 + * @Description: + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class PowerStationVo { + private String powerStationId; + + private String name; + + private String address; + + private Integer groupNum; + + private String contact; + + private String phone; + + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private Date gmtCreate; + + private String introduction; +} diff --git a/bolt-api/src/main/java/com/jiluo/bolt/entity/vo/RoleVo.java b/bolt-api/src/main/java/com/jiluo/bolt/entity/vo/RoleVo.java new file mode 100644 index 0000000..d89ba04 --- /dev/null +++ b/bolt-api/src/main/java/com/jiluo/bolt/entity/vo/RoleVo.java @@ -0,0 +1,46 @@ +package com.jiluo.bolt.entity.vo; + +import java.io.Serializable; +import lombok.Data; +import lombok.AllArgsConstructor; +import lombok.NoArgsConstructor; +import lombok.Builder; + +/** + * 角色信息表(Role)实体类 + * + * @author Fangy + * @since 2023-05-05 09:57:05 + */ +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class RoleVo implements Serializable { + private static final long serialVersionUID = -63387953100329487L; + + /** + * 权限编号 + */ + private String roleId; + + /** + * 权限名称 + */ + private String name; + + /** + * 权限值 + */ + private Object value; + + + private Integer scope; + + /** + * 0-菜单权限,1-检测功能权限,2-机组权限 + */ + private Integer type; + +} + diff --git a/bolt-api/src/main/java/com/jiluo/bolt/entity/vo/SystemInfoConfigVo.java b/bolt-api/src/main/java/com/jiluo/bolt/entity/vo/SystemInfoConfigVo.java new file mode 100644 index 0000000..c183567 --- /dev/null +++ b/bolt-api/src/main/java/com/jiluo/bolt/entity/vo/SystemInfoConfigVo.java @@ -0,0 +1,38 @@ +package com.jiluo.bolt.entity.vo; + +import com.alibaba.fastjson.JSONObject; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + +/** + * Created with IntelliJ IDEA. + * + * @Author: fy + * @Date: 2023/07/05/14:41 + * @Description: + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class SystemInfoConfigVo { + + private String systemInfoId; + + private String systemInfoName; + + private String logoImg; + + private String logoFileName; + + private String systemName; + + private List powerStations; + + private String reservedField; + +} diff --git a/bolt-api/src/main/java/com/jiluo/bolt/entity/vo/TempSenserVo.java b/bolt-api/src/main/java/com/jiluo/bolt/entity/vo/TempSenserVo.java new file mode 100644 index 0000000..7466c76 --- /dev/null +++ b/bolt-api/src/main/java/com/jiluo/bolt/entity/vo/TempSenserVo.java @@ -0,0 +1,52 @@ +package com.jiluo.bolt.entity.vo; + +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.Date; + +/** + * Created with IntelliJ IDEA. + * + * @Author: fy + * @Date: 2023/07/11/16:38 + * @Description: + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class TempSenserVo { + + private String deviceId; + + private String name; + + private String serialPort; + + private String typeId; + + private String type; + + private String powerStationId; + + private String motorGroupId; + + private String pointId; + + private String powerStation; + + private String Group_Point; + + private String relatedDeviceId; + + private String relatedDevice; + + private Integer status; + + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private Date gmtCreate; +} diff --git a/bolt-api/src/main/java/com/jiluo/bolt/entity/vo/ThemeConfigVo.java b/bolt-api/src/main/java/com/jiluo/bolt/entity/vo/ThemeConfigVo.java new file mode 100644 index 0000000..63fddcc --- /dev/null +++ b/bolt-api/src/main/java/com/jiluo/bolt/entity/vo/ThemeConfigVo.java @@ -0,0 +1,39 @@ +package com.jiluo.bolt.entity.vo; + +import com.alibaba.fastjson.JSONObject; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + +/** + * Created with IntelliJ IDEA. + * + * @Author: fy + * @Date: 2023/07/05/15:48 + * @Description: + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class ThemeConfigVo { + + private String themeId; + + private String themeName; + + private String themeColor; + + private String textColor; + + private String topMenuSelectColor; + + private String secondMenuSelectColor; + + private String guideColor; + + List powerStations; +} diff --git a/bolt-api/src/main/java/com/jiluo/bolt/entity/vo/UserVo.java b/bolt-api/src/main/java/com/jiluo/bolt/entity/vo/UserVo.java new file mode 100644 index 0000000..6ab169f --- /dev/null +++ b/bolt-api/src/main/java/com/jiluo/bolt/entity/vo/UserVo.java @@ -0,0 +1,49 @@ +package com.jiluo.bolt.entity.vo; + +import java.util.Date; +import java.util.List; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.fasterxml.jackson.annotation.JsonInclude; +import lombok.Data; +import lombok.AllArgsConstructor; +import lombok.NoArgsConstructor; +import lombok.Builder; + +/** + * 用户信息表(User)实体类 + * + * @author Fangy + * @since 2023-05-05 09:57:05 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class UserVo { + + @JsonInclude(JsonInclude.Include.NON_NULL) + private Integer id; + /** + * 用户编号 + */ + private String uid; + /** + * 用户姓名 + */ + private String userName; + /** + * 用户类型 + */ + private String role; + + @JsonInclude(JsonInclude.Include.NON_NULL) + private List permissionList; + + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private Date gmtCreate; + + private String password; + +} + diff --git a/bolt-core/pom.xml b/bolt-core/pom.xml new file mode 100644 index 0000000..fbdf4e4 --- /dev/null +++ b/bolt-core/pom.xml @@ -0,0 +1,76 @@ + + + + bolt-server + com.jiluo.bolt + 0.0.1-SNAPSHOT + + 4.0.0 + + bolt-core + + + + com.jiluo.bolt + bolt-dao + 0.0.1-SNAPSHOT + + + + com.jiluo.bolt + bolt-api + 0.0.1-SNAPSHOT + + + + + com.auth0 + java-jwt + + + + + cn.hutool + hutool-all + + + + com.opencsv + opencsv + + + + com.google.guava + guava + + + + com.deepoove + poi-tl + + + + + com.alibaba + easyexcel + + + + io.minio + minio + + + + org.springframework.boot + spring-boot-starter-web + + + + org.springframework + spring-test + + + + \ No newline at end of file diff --git a/bolt-core/src/main/java/com/jiluo/bolt/config/MinioConfig.java b/bolt-core/src/main/java/com/jiluo/bolt/config/MinioConfig.java new file mode 100644 index 0000000..da5d7a4 --- /dev/null +++ b/bolt-core/src/main/java/com/jiluo/bolt/config/MinioConfig.java @@ -0,0 +1,44 @@ +package com.jiluo.bolt.config; + +import io.minio.MinioClient; +import io.minio.errors.InvalidEndpointException; +import io.minio.errors.InvalidPortException; +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Bean; +import org.springframework.stereotype.Component; + +/** + * Created with IntelliJ IDEA. + * + * @Author: fy + * @Date: 2023/10/13/14:35 + * @Description: + */ +@Data +@Component +@ConfigurationProperties(prefix = "minio") +public class MinioConfig { + + // endPoint是一个URL,域名,IPv4或者IPv6地址 + private String endpoint; + + // TCP/IP端口号 + private int port; + + private String accessKey; + + private String secretKey; + + // 如果是true,则用的是https而不是http,默认值是true + private Boolean secure; + + // 默认存储桶 + private String bucketName; + + @Bean + public MinioClient getMinioClient() throws InvalidEndpointException, InvalidPortException { + MinioClient minioClient = new MinioClient(endpoint, port, accessKey, secretKey, secure); + return minioClient; + } +} \ No newline at end of file diff --git a/bolt-core/src/main/java/com/jiluo/bolt/config/UploadFile.java b/bolt-core/src/main/java/com/jiluo/bolt/config/UploadFile.java new file mode 100644 index 0000000..b559dc9 --- /dev/null +++ b/bolt-core/src/main/java/com/jiluo/bolt/config/UploadFile.java @@ -0,0 +1,110 @@ +package com.jiluo.bolt.config; + +import cn.hutool.core.io.file.FileNameUtil; +import com.jiluo.bolt.service.MinioService; +import lombok.SneakyThrows; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import org.springframework.web.multipart.MultipartFile; + +import java.io.InputStream; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.List; +import java.util.UUID; + +/** + * Created with IntelliJ IDEA. + * + * @Author: fy + * @Date: 2023/10/13/14:55 + * @Description: + */ +@Component +public class UploadFile { + + @Autowired + private MinioService minioService; + + @Autowired + private MinioConfig minioConfig; + + @SneakyThrows + public void uploadFile(MultipartFile file, String bucketName) { + + // 获取存储桶名称 + bucketName = StringUtils.isNotBlank(bucketName) ? bucketName : minioConfig.getBucketName(); + + // 判断是否存在该存储桶 + if (!minioService.bucketExists(bucketName)) { + // 不存在则创建 + minioService.makeBucket(bucketName); + // 设置存储桶读写策略 + + String bucketPolicy = "{\"Version\":\"2023-10-10\",\"Statement\":[{\"Effect\":\"Allow\",\"Principal\":{\"AWS\":[\"*\"]}," + + "\"Action\":[\"s3:GetBucketLocation\",\"s3:ListBucket\",\"s3:ListBucketMultipartUploads\"],\"Resource\":[\"arn:aws:s3:::" + + bucketName + "\"]}," + + "{\"Effect\":\"Allow\",\"Principal\":{\"AWS\":[\"*\"]},\"Action\":[\"s3:DeleteObject\",\"s3:GetObject\",\"s3:ListMultipartUploadParts\",\"s3:PutObject\",\"s3:AbortMultipartUpload\"],\"Resource\":[\"arn:aws:s3:::" + + bucketName + "/*\"]}]}"; + + // 设置存储桶策略 + minioService.setBucketPolicy(bucketName, bucketPolicy); + } + // 原始文件名 + String fileName = file.getOriginalFilename(); + // 获取文件后缀名 + String extName = FileNameUtil.extName(fileName); + // 定义文件路径 + String format = new SimpleDateFormat("yyyy/MM/dd/").format(new Date()); + // 定义文件修改之后的名字,去除uuid中的' - ' + String fileuuid = UUID.randomUUID().toString().replaceAll("-", ""); + // 定义新的文件名 + //String objectName = format + fileuuid + "." + extName; + String objectName = format + fileName; + //上传文件 + minioService.putObject(bucketName, file, objectName); + } + + @SneakyThrows + public void uploadFiles(List files) { + + // 获取存储桶名称 + String bucketName = minioConfig.getBucketName(); + + // 判断是否存在该存储桶 + if (!minioService.bucketExists(bucketName)) { + // 不存在则创建 + minioService.makeBucket(bucketName); + + // 设置存储桶读写策略 + String bucketPolicy = "{\"Version\":\"2023-10-10\",\"Statement\":[{\"Effect\":\"Allow\",\"Principal\":{\"AWS\":[\"*\"]}," + + "\"Action\":[\"s3:GetBucketLocation\",\"s3:ListBucket\",\"s3:ListBucketMultipartUploads\"],\"Resource\":[\"arn:aws:s3:::" + + bucketName + "\"]}," + + "{\"Effect\":\"Allow\",\"Principal\":{\"AWS\":[\"*\"]},\"Action\":[\"s3:DeleteObject\",\"s3:GetObject\",\"s3:ListMultipartUploadParts\",\"s3:PutObject\",\"s3:AbortMultipartUpload\"],\"Resource\":[\"arn:aws:s3:::" + + bucketName + "/*\"]}]}"; + + // 设置存储桶策略 + minioService.setBucketPolicy(bucketName, bucketPolicy); + } + for (MultipartFile file : files) { + //上传文件 + minioService.putObject(bucketName, file, file.getOriginalFilename()); + } + } + + @SneakyThrows + public void uploadFile(String objectName, InputStream stream, String contentType) { + String bucketName = minioConfig.getBucketName(); + if (!minioService.bucketExists(bucketName)) { + minioService.makeBucket(bucketName); + String bucketPolicy = "{\"Version\":\"2023-10-10\",\"Statement\":[{\"Effect\":\"Allow\",\"Principal\":{\"AWS\":[\"*\"]}," + + "\"Action\":[\"s3:GetBucketLocation\",\"s3:ListBucket\",\"s3:ListBucketMultipartUploads\"],\"Resource\":[\"arn:aws:s3:::" + + bucketName + "\"]}," + + "{\"Effect\":\"Allow\",\"Principal\":{\"AWS\":[\"*\"]},\"Action\":[\"s3:DeleteObject\",\"s3:GetObject\",\"s3:ListMultipartUploadParts\",\"s3:PutObject\",\"s3:AbortMultipartUpload\"],\"Resource\":[\"arn:aws:s3:::" + + bucketName + "/*\"]}]}"; + minioService.setBucketPolicy(bucketName, bucketPolicy); + } + minioService.putObject(bucketName, objectName, stream, contentType); + } +} diff --git a/bolt-core/src/main/java/com/jiluo/bolt/domain/DefectInfo.java b/bolt-core/src/main/java/com/jiluo/bolt/domain/DefectInfo.java new file mode 100644 index 0000000..478cdb4 --- /dev/null +++ b/bolt-core/src/main/java/com/jiluo/bolt/domain/DefectInfo.java @@ -0,0 +1,41 @@ +package com.jiluo.bolt.domain; + +import com.alibaba.fastjson.annotation.JSONField; +import com.jiluo.bolt.common.DefectType; +import lombok.Builder; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.math.BigDecimal; +import java.util.Date; + +/** + * Created with IntelliJ IDEA. + * + * @Author: fy + * @Date: 2023/07/28/13:39 + * @Description: + */ + +@Data +@Builder +@EqualsAndHashCode(of = {"type", "zone", "position", "time"}) +public class DefectInfo { + private DefectType type; + private Integer zone; + private Integer position; + private BigDecimal value; + private Boolean alarm; + private Date time; + + @JSONField(serialize = false) + private String file; + + public void setValue(BigDecimal value) { + this.value = value; + } + + public BigDecimal getValue() { + return this.value; + } +} \ No newline at end of file diff --git a/bolt-core/src/main/java/com/jiluo/bolt/export/Analysis.java b/bolt-core/src/main/java/com/jiluo/bolt/export/Analysis.java new file mode 100644 index 0000000..58887e4 --- /dev/null +++ b/bolt-core/src/main/java/com/jiluo/bolt/export/Analysis.java @@ -0,0 +1,127 @@ +package com.jiluo.bolt.export; + +import com.jiluo.bolt.common.DefectType; +import com.jiluo.bolt.common.DetectType; +import com.jiluo.bolt.domain.DefectInfo; +import com.jiluo.bolt.entity.po.*; +import com.jiluo.bolt.service.*; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang3.BooleanUtils; +import org.apache.commons.lang3.Range; +import org.apache.commons.lang3.tuple.Pair; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; +import java.math.BigDecimal; +import java.math.RoundingMode; +import java.util.*; +import java.util.stream.Collectors; +import java.util.stream.IntStream; + +/** + * Created with IntelliJ IDEA. + * + * @Author: fy + * @Date: 2023/07/28/15:04 + * @Description: + */ +@Slf4j +@Component +public class Analysis { + + @Resource + PointService pointService; + + @Resource + MotorGroupService motorGroupService; + + @Resource + PowerStationService powerStationService; + + @Resource + JobService jobService; + + @Resource + DefectService defectService; + + @Value("${defect_work_dir}") + private String defect_work_dir; + + public Report report(String pointId, List jobs) { + Pair, List> data = load(pointId, jobs, null,null); + if (data.getKey().isEmpty()) { + data.getKey().add(new Date()); + } + return analysis(pointId, data.getKey(), data.getValue()); + } + + public Report report(String pointId, Range dateRange, Integer status) { + Pair, List> data = load(pointId, null, dateRange, status); + if (data.getKey().isEmpty()) { + data.getKey().add(dateRange.getMinimum()); + data.getKey().add(dateRange.getMaximum()); + } + return analysis(pointId, data.getKey(), data.getValue()); + } + + private Report analysis(String pointId, List timeDim, List defects) { + Point _point = pointService.getByBizId(pointId); + MotorGroup _motorGroup = motorGroupService.getByBizId(_point.getMotorGroup()); + PowerStation _powerStation = powerStationService.getByBizId(_point.getPowerStation()); + + return Report.builder().powerStationName(_powerStation.getName()).groupName(_motorGroup.getName()) + .pointName(_point.getName()) + .timeDimensions(timeDim).zoneDimensions(zoneDim(_point.getPoleNum())).typeDimensions(typeDim()) + .allDefectData(defects.parallelStream().collect(Collectors.groupingBy(DefectInfo::getType))) + .build() + .generate(); + } + + private List typeDim() { + return DefectType.defectTypes(DetectType.BOLT_AND_LINE.getProduct()); + } + + private List zoneDim(Integer zone) { + return IntStream.rangeClosed(1, zone).boxed().collect(Collectors.toList()); + } + + private Pair, List> load(String pointId, List jobs, Range dateRange, Integer status) { + List jobList = new ArrayList<>(); + List defectList = new ArrayList<>(); + if (!CollectionUtils.isEmpty(jobs)) { + jobList = jobService.getByBizId(jobs); + defectList = defectService.getByJob(jobs); + } + if (dateRange != null) { + jobList = jobService.exportData(dateRange.getMinimum(), dateRange.getMaximum()); + defectList = defectService.exportData(pointId,dateRange.getMinimum(), dateRange.getMaximum(),status); + } + return apply(jobList, defectList); + } + + private Pair, List> apply(List jobs, List defects) { + Map _job = jobs.stream().collect(Collectors.toMap(Job::getJobId, Job::getGmtCreate)); + + List _defects = defects.stream().map(defect -> { + DefectType type = DefectType.toDefectType(defect.getType()); + BigDecimal value = (type == DefectType.bolt || type == DefectType.temperature) ? BigDecimal.valueOf(defect.getValue() / 100.0).setScale(2, RoundingMode.HALF_UP) : (type == DefectType.line ? BigDecimal.valueOf(defect.getValue() / 1000.0).setScale(3, RoundingMode.HALF_UP) : BigDecimal.valueOf(defect.getValue())); + + return DefectInfo.builder() + .time(_job.get(defect.getJob())) + .type(type) + .alarm(BooleanUtils.toBoolean(defect.getAlarm())) + .zone(defect.getZone()) + .position(defect.getPosition()) + .value(value) + .file(DetectType.BOLT_AND_LINE == type.getDetectType() ? String.format("ipc:%s/%s/%s/%s", defect_work_dir, defect.getJob(), "/detect/", defect.getData()) : null) + .build(); + }) + .filter(x -> x.getZone() != null && x.getType() != null && x.getPosition() != null && x.getValue() != null && x.getTime() != null) + .sorted(Comparator.comparing(DefectInfo::getTime).thenComparing(DefectInfo::getZone).thenComparing(DefectInfo::getType).thenComparing(DefectInfo::getPosition)).collect(Collectors.toList()); + + List timeDim = jobs.parallelStream().map(Job::getGmtCreate).distinct().sorted(Date::compareTo).collect(Collectors.toList()); + return Pair.of(timeDim, _defects); + } +} diff --git a/bolt-core/src/main/java/com/jiluo/bolt/export/Export.java b/bolt-core/src/main/java/com/jiluo/bolt/export/Export.java new file mode 100644 index 0000000..f31ce81 --- /dev/null +++ b/bolt-core/src/main/java/com/jiluo/bolt/export/Export.java @@ -0,0 +1,136 @@ +package com.jiluo.bolt.export; + +import com.jiluo.bolt.entity.po.*; +import com.jiluo.bolt.service.*; +import com.jiluo.bolt.util.ExcelUtils; +import lombok.SneakyThrows; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.Range; +import org.apache.commons.lang3.math.NumberUtils; +import org.apache.commons.lang3.time.DateUtils; +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.stereotype.Component; + +import javax.annotation.PostConstruct; +import javax.annotation.Resource; +import java.io.ByteArrayOutputStream; +import java.io.File; +import java.time.*; +import java.util.Date; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +/** + * Created with IntelliJ IDEA. + * + * @Author: fy + * @Date: 2023/07/28/14:38 + * @Description:报告导出 + */ +@Slf4j +@Component +public class Export { + private static String AUTO_EXPORT_PATH = "/data/work/report"; + private static Integer AUTO_EXPORT_PERIOD = 30; + + @Resource + Analysis analysis; + + @Resource + PointService pointService; + + @Resource + ConfigService configService; + + @PostConstruct + private void init() { + Config report_auto_export_dir = configService.selectByBizId("report_auto_export_dir"); + Config report_auto_export_time = configService.selectByBizId("report_auto_export_time"); + if (report_auto_export_time != null) { + AUTO_EXPORT_PERIOD = NumberUtils.toInt(report_auto_export_time.getValue()); + } + if (report_auto_export_dir != null) { + AUTO_EXPORT_PATH = report_auto_export_dir.getValue().endsWith(File.pathSeparator) ? report_auto_export_dir.getValue() : report_auto_export_dir.getValue() + File.separator; + } + log.info(String.format("[Export] init AUTO_EXPORT_PATH=%s; AUTO_EXPORT_PERIOD=%s", AUTO_EXPORT_PATH, AUTO_EXPORT_PERIOD)); + } + + @Scheduled(cron = "0 0 1 * * ?") + private void autoExport() { +// Date now = new Date(); +// Date start = getStartOfDay(now, -AUTO_EXPORT_PERIOD); +// Date end = getEndOfDay(now, -1); +// Range dateRange = Range.between(start, end); + LocalDate now = LocalDate.now(); + LocalDateTime start = now.minusDays(1).atStartOfDay(); + LocalDateTime end = now.minusDays(1).atTime(LocalTime.MAX); + if (AUTO_EXPORT_PERIOD == 1) { + // 每天导出一次报告 + LocalDate startDaily = now.minusDays(1); + LocalDate endDaily = now.minusDays(1); + start = startDaily.atStartOfDay(); + end = endDaily.atTime(LocalTime.MAX); + } else if (AUTO_EXPORT_PERIOD == 7) { + // 每周导出一次报告(周一开始,周日结束) + LocalDate startWeekly = now.minusWeeks(1).with(java.time.DayOfWeek.MONDAY); + LocalDate endWeekly = now.minusWeeks(1).with(java.time.DayOfWeek.SUNDAY); + start = startWeekly.atStartOfDay(); + end = endWeekly.atTime(LocalTime.MAX); + } else if (AUTO_EXPORT_PERIOD == 30) { + // 每月导出一次报告(上个月的起始和结束日期) + LocalDate startMonthly = now.minusMonths(1).withDayOfMonth(1); + LocalDate endMonthly = now.minusMonths(1).withDayOfMonth(now.minusMonths(1).lengthOfMonth()); + start = startMonthly.atStartOfDay(); + end = endMonthly.atTime(LocalTime.MAX); + } + + Range dateRange = Range.between(Date.from(start.toInstant(ZoneOffset.UTC)), Date.from(end.toInstant(ZoneOffset.UTC))); + + List points = pointService.getAll(); + for (Point point : points) { + try { + String filePath = analysis.report(point.getPointId(), dateRange, null).export(AUTO_EXPORT_PATH).getExportFileName(); + log.info(String.format("[Export] autoExport point=%s; dateRange=%s~%s; filePath=%s", point.getName(), start, end, filePath)); + } catch (Exception e) { + log.error(String.format("[Export] autoExport point=%s; dateRange=%s~%s", point.getName(), start, end), e); + } + } + } + + @SneakyThrows + public String export(String pointId, List jobs, ByteArrayOutputStream target) { + return analysis.report(pointId, jobs).export(target).getExportFileName(); + } + + @SneakyThrows + public String export(String pointId, Range dateRange, Integer status, ByteArrayOutputStream target) { + return analysis.report(pointId, dateRange, status).export(target).getExportFileName(); + } + + @SneakyThrows + public String export(String pointId, List jobs, String path) { + return analysis.report(pointId, jobs).export(path).getExportFileName(); + } + + @SneakyThrows + public String export(String pointId, Range dateRange, Integer status, String path) { + return analysis.report(pointId, dateRange, status).export(path).getExportFileName(); + } + + + public static Date getEndOfDay(Date date, int offset) { + Date _date = DateUtils.addDays(date, offset); + LocalDateTime localDateTime = LocalDateTime.ofInstant(Instant.ofEpochMilli(_date.getTime()), ZoneId.systemDefault()); + LocalDateTime endOfDay = localDateTime.with(LocalTime.MAX); + return Date.from(endOfDay.atZone(ZoneId.systemDefault()).toInstant()); + } + + public static Date getStartOfDay(Date date, int offset) { + Date _date = DateUtils.addDays(date, offset); + LocalDateTime localDateTime = LocalDateTime.ofInstant(Instant.ofEpochMilli(_date.getTime()), ZoneId.systemDefault()); + LocalDateTime startOfDay = localDateTime.with(LocalTime.MIN); + return Date.from(startOfDay.atZone(ZoneId.systemDefault()).toInstant()); + } + +} diff --git a/bolt-core/src/main/java/com/jiluo/bolt/export/Report.java b/bolt-core/src/main/java/com/jiluo/bolt/export/Report.java new file mode 100644 index 0000000..b0face3 --- /dev/null +++ b/bolt-core/src/main/java/com/jiluo/bolt/export/Report.java @@ -0,0 +1,278 @@ +package com.jiluo.bolt.export; + +import com.deepoove.poi.XWPFTemplate; +import com.deepoove.poi.config.Configure; +import com.deepoove.poi.data.*; +import com.deepoove.poi.data.style.TableStyle; +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; +import com.jiluo.bolt.common.DefectType; +import com.jiluo.bolt.domain.DefectInfo; +import lombok.Builder; +import lombok.Data; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.io.FileUtils; +import org.apache.commons.io.IOUtils; +import org.apache.commons.lang3.Range; +import org.apache.commons.lang3.StringUtils; +import org.apache.commons.lang3.time.DateFormatUtils; +import org.springframework.core.io.ClassPathResource; +import org.springframework.util.ResourceUtils; + +import java.io.ByteArrayOutputStream; +import java.io.File; +import java.io.FileInputStream; +import java.io.IOException; +import java.math.BigDecimal; +import java.math.RoundingMode; +import java.util.*; +import java.util.stream.Collectors; + +@Data +@Slf4j +@Builder +public class Report { + private static final String AUTO_EXPORT_FILE_NAME = "转子视觉检测报告_%s.docx"; + private static final String AUTO_EXPORT_TEMPLATE = "report.docx"; + + private String exportFileName; + private String powerStationName; + private String groupName; + private String pointName; + private Range reportTime; + + private List timeDimensions; + private List typeDimensions; + private List zoneDimensions; + + private Map> allDefectData; + + private Map analysisResult; + + private AnalysisResult analysis(DefectType type, List defects) { + defects.removeAll(defects.parallelStream().filter(x -> !timeDimensions.contains(x.getTime()) || !zoneDimensions.contains(x.getZone())).collect(Collectors.toList())); + Map> _defects = defects.parallelStream().collect(Collectors.groupingBy(DefectInfo::getZone)); + + AnalysisResult result = new AnalysisResult(type, !defects.isEmpty()); + zoneDimensions.forEach(z -> { + if (!_defects.containsKey(z)) { + result.getCensus().add(new DetectReport(type, z)); + } else { + DetectReport detectReport = new DetectReport(type, z); + Map defectReports = Maps.newConcurrentMap(); + _defects.get(z).forEach(d -> { + detectReport.addValue(d.getAlarm(), d.getValue()); + defectReports.putIfAbsent(d.getPosition(), new DefectReport(type, z, d.getPosition())); + defectReports.get(d.getPosition()).addValue(d.getAlarm(), d.getTime(), d.getValue(), d.getFile()); + }); + timeDimensions.forEach(d -> defectReports.values().stream().filter(r -> !r.getValues().containsKey(d)).forEach(r -> r.addValue(d))); + defectReports.keySet().stream().filter(k -> !defectReports.get(k).isAlarm()).forEach(defectReports::remove); + + result.getCensus().add(detectReport); + result.getDetail().addAll(defectReports.values()); + } + }); + + result.getCensus().sort(Comparator.comparing(DetectReport::getZone)); + result.getDetail().sort(Comparator.comparing(DefectReport::getZone).thenComparing(DefectReport::getPosition)); + result.fill(); + return result; + } + + public Report generate() { + if (timeDimensions.isEmpty()) { + timeDimensions.add(new Date()); + } + reportTime = Range.between(timeDimensions.get(0), timeDimensions.get(timeDimensions.size() -1)); + analysisResult = typeDimensions.parallelStream().map(t -> analysis(t, allDefectData.getOrDefault(t, new ArrayList<>()))).collect(Collectors.toMap(AnalysisResult::getType, x -> x)); + exportFileName = String.format(AUTO_EXPORT_FILE_NAME, String.format("%s_%s", DateFormatUtils.format(getReportTime().getMinimum(), "yyyy年MM月dd日"), DateFormatUtils.format(getReportTime().getMaximum(), "yyyy年MM月dd日"))); + return this; + } + + private Map convert() { + Map data = new HashMap<>(); + data.put("productLine", getPowerStationName()); + data.put("groupName", getGroupName()); + data.put("pointName", getPointName()); + data.put("reportTime", String.format("%s-%s", DateFormatUtils.format(getReportTime().getMinimum(), "yyyy年MM月dd日"), DateFormatUtils.format(getReportTime().getMaximum(), "yyyy年MM月dd日"))); + data.put("boltDetail", getAnalysisResult().get(DefectType.bolt).getDetail()); + data.put("lineDetail", getAnalysisResult().get(DefectType.line).getDetail()); + data.put("poleDetail", getAnalysisResult().get(DefectType.pole).getDetail()); + data.put("boltTable", getAnalysisResult().get(DefectType.bolt).getTable()); + data.put("lineTable", getAnalysisResult().get(DefectType.line).getTable()); + data.put("poleTable", getAnalysisResult().get(DefectType.pole).getTable()); + return data; + } + + public Report export(String path) throws IOException { + File dir = FileUtils.getFile(path, powerStationName, groupName, pointName); + FileUtils.forceMkdir(dir); + this.exportFileName = FileUtils.getFile(dir, exportFileName).getAbsolutePath(); + XWPFTemplate.compile(new ClassPathResource(AUTO_EXPORT_TEMPLATE).getInputStream(), Configure.builder().useSpringEL().build()).render(convert()).writeToFile(exportFileName); + return this; + } + + public Report export(ByteArrayOutputStream target) throws IOException { + XWPFTemplate.compile(new ClassPathResource(AUTO_EXPORT_TEMPLATE).getInputStream(), Configure.builder().useSpringEL().build()).render(convert()).writeAndClose(target); + return this; + } +} + +@Data +class AnalysisResult { + private DefectType type; + private boolean hasDefect; + + private List census; + private List detail; + + private TableRenderData table; + + public AnalysisResult(DefectType type, boolean hasDefect) { + this.type = type; + this.hasDefect = hasDefect; + census = new ArrayList<>(); + detail = new ArrayList<>(); + } + + public void fill() { + List rows = new ArrayList<>(); + Lists.partition(census, 10).forEach(_values -> { + Rows.RowBuilder rowA = Rows.of("编号"); + Rows.RowBuilder rowB = Rows.of("范围"); + _values.forEach(x -> { + rowA.addCell(Cells.of(String.valueOf(x.getZone())).create()); + StringBuilder _v = new StringBuilder(); + _v.append(x.getMin().setScale(2, RoundingMode.HALF_UP)).append('~').append(x.getMax().setScale(2, RoundingMode.HALF_UP)); + + if (x.isAlarm()) { + rowB.addCell(Cells.of(Texts.of(_v.toString()).bold().create()).create()); + } else { + rowB.addCell(Cells.of(_v.toString()).create()); + } + }); + if (_values.size() < 10) { + int _lack = 10 - _values.size(); + while(_lack-- > 0) { + rowA.addCell(new CellRenderData()); + rowB.addCell(new CellRenderData()); + } + } + rows.add(rowA.textFontSize(10).center().create()); + rows.add(rowB.textFontSize(10).center().create()); + }); + table = Tables.of(rows.toArray(new RowRenderData[]{})).width(16, null).center().border(TableStyle.BorderStyle.DEFAULT).create(); + detail.forEach(DefectReport::fill); + } +} + +@Data +class DetectReport { + private DefectType type; + private int zone; + private BigDecimal max = BigDecimal.ZERO; + private BigDecimal min = BigDecimal.ZERO; + private boolean alarm = false; + + public DetectReport(DefectType type, int zone) { + this.type = type; + this.zone = zone; + } + + public synchronized void addValue(boolean alarm, BigDecimal v) { + this.alarm = this.alarm || alarm; + if (v.compareTo(max) > 0) { + this.max = v; + } + if (this.min.equals(BigDecimal.ZERO)) { + this.min = v; + } else { + if (min.compareTo(v) > 0) { + this.min = v; + } + } + } +} + +@Data +@Slf4j +class DefectReport { + private DefectType type; + private int zone; + private int position; + private BigDecimal value; + private String url; + private boolean alarm; + private TreeMap values; + + private PictureRenderData file; + private ChartMultiSeriesRenderData chart; + + public DefectReport(DefectType type, int zone, int position) { + this.type = type; + this.zone = zone; + this.position = position; + this.value = type.getDefaultValue(); + this.values = new TreeMap<>(); + } + + public synchronized void addValue(Date t) { + this.values.put(t, type.getDefaultValue()); + this.value = this.values.lastEntry().getValue(); + if (this.value.equals(type.getDefaultValue())) { + this.alarm = false; + } + } + + public synchronized void addValue(boolean alarm, Date t, BigDecimal v, String url) { + this.values.put(t, v); + this.value = this.values.lastEntry().getValue(); + if (this.value.equals(v)) { + this.alarm = alarm; + } + if (this.alarm) { + this.url = url; + } + } + + public void fill() { + fillChart(); + fillFile(); + } + + private void fillFile() { + try { + if (StringUtils.isBlank(url)) { + return; + } + + if (url.startsWith("ipc")) { + String path = url.split(":")[1]; + File img = ResourceUtils.getFile(path); + FileInputStream fileInputStream = new FileInputStream(img); + byte[] bytes = IOUtils.toByteArray(fileInputStream); + fileInputStream.close(); + // 读取图像文件的字节数组 + file = Pictures.ofBytes(bytes, PictureType.JPEG).altMeta("图片丢失!").size(577, 397).create(); + } else { + file = Pictures.ofStream(new ClassPathResource(url.split(":")[1]).getInputStream(), PictureType.JPEG).altMeta("图片丢失!").size(577, 397).create(); + } + } catch (Exception e) { + log.error("[DefectReport] fillFile exception!", e); + } + } + + private void fillChart() { + String series = String.format("%s#磁极", zone); + if (type == DefectType.bolt) { + series = series + String.format("%s号螺栓", position); + } + if (type == DefectType.line) { + series = series + String.format("%s号引出线", position); + } + chart = Charts.ofLine( + this.type.getDesc(), this.getValues().keySet().stream().map(integer -> DateFormatUtils.format(integer, "yyyy-MM-dd HH:mm:ss")).toArray(String[]::new)) + .addSeries(series, this.getValues().values().toArray(new Number[]{})) + .create(); + } +} \ No newline at end of file diff --git a/bolt-core/src/main/java/com/jiluo/bolt/service/AlarmService.java b/bolt-core/src/main/java/com/jiluo/bolt/service/AlarmService.java new file mode 100644 index 0000000..3914c01 --- /dev/null +++ b/bolt-core/src/main/java/com/jiluo/bolt/service/AlarmService.java @@ -0,0 +1,22 @@ +package com.jiluo.bolt.service; +import com.baomidou.mybatisplus.extension.service.IService; +import com.jiluo.bolt.entity.po.Alarm; + +import java.util.List; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; + +/** + * 告警信息表(Alarm)表服务接口 + * @author Fangy + * @date 2023-05-05 10:10:06 + */ + +public interface AlarmService extends IService { + + public static Map ALARM_MAP = new ConcurrentHashMap<>(); + + public List getAll(); + + public void add(Alarm alarm); +} diff --git a/bolt-core/src/main/java/com/jiluo/bolt/service/AlgorithmService.java b/bolt-core/src/main/java/com/jiluo/bolt/service/AlgorithmService.java new file mode 100644 index 0000000..0142108 --- /dev/null +++ b/bolt-core/src/main/java/com/jiluo/bolt/service/AlgorithmService.java @@ -0,0 +1,23 @@ +package com.jiluo.bolt.service; +import com.baomidou.mybatisplus.extension.service.IService; +import com.jiluo.bolt.entity.dto.AlgorithmDto; +import com.jiluo.bolt.entity.po.Algorithm; + +import java.util.List; + +/** + * 算法信息表(Algorithm)表服务接口 + * @author Fangy + * @date 2023-05-05 10:10:08 + */ + +public interface AlgorithmService extends IService { + + public Algorithm getByPoint(String pointId); + + public Integer getPointCount(String algorithmId); + + public List select(AlgorithmDto algorithmDto); + + public void add(AlgorithmDto algorithmDto); +} diff --git a/bolt-core/src/main/java/com/jiluo/bolt/service/AlgorithmTempleteService.java b/bolt-core/src/main/java/com/jiluo/bolt/service/AlgorithmTempleteService.java new file mode 100644 index 0000000..6aff0b6 --- /dev/null +++ b/bolt-core/src/main/java/com/jiluo/bolt/service/AlgorithmTempleteService.java @@ -0,0 +1,24 @@ +package com.jiluo.bolt.service; +import com.baomidou.mybatisplus.extension.service.IService; +import com.jiluo.bolt.entity.dto.AlgorithmDto; +import com.jiluo.bolt.entity.po.AlgorithmTemplete; + +import java.util.List; + +/** + * (AlgorithmTemplete)表服务接口 + * @author Fangy + * @date 2023-05-05 10:10:09 + */ + +public interface AlgorithmTempleteService extends IService { + + + public List select(AlgorithmDto algorithmDto); + + public Integer selectTotal(AlgorithmDto algorithmDto); + + public String add(AlgorithmDto algorithmDto); + + public Boolean updateByBizId(AlgorithmDto algorithmDto); +} diff --git a/bolt-core/src/main/java/com/jiluo/bolt/service/ConfigService.java b/bolt-core/src/main/java/com/jiluo/bolt/service/ConfigService.java new file mode 100644 index 0000000..b1e9471 --- /dev/null +++ b/bolt-core/src/main/java/com/jiluo/bolt/service/ConfigService.java @@ -0,0 +1,32 @@ +package com.jiluo.bolt.service; +import com.baomidou.mybatisplus.extension.service.IService; +import com.jiluo.bolt.entity.po.Config; + +import java.util.List; + +/** + * 系统配置表(Config)表服务接口 + * @author Fangy + * @date 2023-05-05 10:10:11 + */ + +public interface ConfigService extends IService { + + public boolean updateByBizId(String bizId,String value); + + public Config selectByBizId(String bizId); + + public List selectByCategory(String category); + + public Config selectByDescription(String description); + + public List select(Config configDto); + + public Boolean add(Config configDto,String type); + + public Boolean updateByBizId(Config configDto); + + + + +} diff --git a/bolt-core/src/main/java/com/jiluo/bolt/service/DefectService.java b/bolt-core/src/main/java/com/jiluo/bolt/service/DefectService.java new file mode 100644 index 0000000..e24d909 --- /dev/null +++ b/bolt-core/src/main/java/com/jiluo/bolt/service/DefectService.java @@ -0,0 +1,35 @@ +package com.jiluo.bolt.service; +import com.baomidou.mybatisplus.extension.service.IService; +import com.jiluo.bolt.entity.po.Defect; + +import java.util.Date; +import java.util.List; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; + +/** + * 检测结果表(Defect)表服务接口 + * @author Fangy + * @date 2023-05-05 10:10:11 + */ + +public interface DefectService extends IService { + + public static Map TEMPERATUREMAP = new ConcurrentHashMap<>(); + + public List getRealTimeData(String jobId); + + public List getByJob(String jobId); + + public List getByJob(List jobIds); + + public List chartData(String pointId,String product,Integer zone,String startTime,String endTime); + + public List exportData(String pointId, Date startTime, Date endTime, Integer status); + + public Defect selectToCompare(String jobId,String type,Integer zone,Integer position); + + public void add(Defect defect); + + public void update(Defect defect); +} diff --git a/bolt-core/src/main/java/com/jiluo/bolt/service/DetectService.java b/bolt-core/src/main/java/com/jiluo/bolt/service/DetectService.java new file mode 100644 index 0000000..50bc365 --- /dev/null +++ b/bolt-core/src/main/java/com/jiluo/bolt/service/DetectService.java @@ -0,0 +1,23 @@ +package com.jiluo.bolt.service; +import com.baomidou.mybatisplus.extension.service.IService; +import com.jiluo.bolt.entity.po.Detect; + +import java.util.List; +import java.util.Map; + +/** + * 检测过程表(Detect)表服务接口 + * @author Fangy + * @date 2023-05-05 10:10:11 + */ + +public interface DetectService extends IService { + + public Map> getImg(String jobId); + + public void add(Detect detect); + + public Integer selectByJob(String jobId); + + public List getByJob(String jobId); +} diff --git a/bolt-core/src/main/java/com/jiluo/bolt/service/DeviceService.java b/bolt-core/src/main/java/com/jiluo/bolt/service/DeviceService.java new file mode 100644 index 0000000..0825c8e --- /dev/null +++ b/bolt-core/src/main/java/com/jiluo/bolt/service/DeviceService.java @@ -0,0 +1,50 @@ +package com.jiluo.bolt.service; +import com.baomidou.mybatisplus.extension.service.IService; +import com.jiluo.bolt.common.LocalStatus; +import com.jiluo.bolt.entity.dto.DeviceDto; +import com.jiluo.bolt.entity.dto.TempSenserDto; +import com.jiluo.bolt.entity.po.Device; + +import java.util.List; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; + +/** + * 设备信息表(Device)表服务接口 + * @author Fangy + * @date 2023-05-05 10:10:11 + */ + +public interface DeviceService extends IService { + + Map DeviceLocalStatus = new ConcurrentHashMap<>(); + + public Device selectByBizId(String deviceId); + + public List selectByPoint(String pointId); + + public List selectAll(); + + public void updateTemp(String deviceId,String tempThreshold); + + public void updateStatus(String deviceId,Integer status); + + public List select(DeviceDto deviceDto); + + public Integer selectTotal(DeviceDto deviceDto); + + public Boolean add(DeviceDto deviceDto,String type); + + public Boolean updateByBizId(DeviceDto deviceDto); + + public Boolean deactivate(DeviceDto deviceDto); + + public List select(TempSenserDto tempSenserDto); + + public Integer selectTotal(TempSenserDto tempSenserDto); + + public Boolean add(TempSenserDto tempSenserDto,String type); + + public Boolean updateByBizId(TempSenserDto tempSenserDto); + +} diff --git a/bolt-core/src/main/java/com/jiluo/bolt/service/DeviceTempleteService.java b/bolt-core/src/main/java/com/jiluo/bolt/service/DeviceTempleteService.java new file mode 100644 index 0000000..37315c8 --- /dev/null +++ b/bolt-core/src/main/java/com/jiluo/bolt/service/DeviceTempleteService.java @@ -0,0 +1,20 @@ +package com.jiluo.bolt.service; +import com.baomidou.mybatisplus.extension.service.IService; +import com.jiluo.bolt.entity.po.DeviceTemplete; + +import java.util.List; + +/** + * (DeviceTemplete)表服务接口 + * @author Fangy + * @date 2023-05-05 10:10:11 + */ + +public interface DeviceTempleteService extends IService { + + public DeviceTemplete getByBizId(String venderId); + + public List getByBizId(List venderIds); + + List getAll(); +} diff --git a/bolt-core/src/main/java/com/jiluo/bolt/service/JobService.java b/bolt-core/src/main/java/com/jiluo/bolt/service/JobService.java new file mode 100644 index 0000000..afa679f --- /dev/null +++ b/bolt-core/src/main/java/com/jiluo/bolt/service/JobService.java @@ -0,0 +1,41 @@ +package com.jiluo.bolt.service; +import com.baomidou.mybatisplus.extension.service.IService; +import com.jiluo.bolt.common.DetectJob; +import com.jiluo.bolt.entity.po.Job; +import org.springframework.format.annotation.DateTimeFormat; + +import java.util.Date; +import java.util.List; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; + +/** + * 检测任务表(Job)表服务接口 + * @author Fangy + * @date 2023-05-05 10:10:12 + */ + +public interface JobService extends IService { + + public static Map JOB_MAP = new ConcurrentHashMap<>(); + + public Job getByBizId(String jobId); + + public List getByBizId(List jobIds); + + public Job getRealtimeJob(String pointId,String product); + + public List getHistoryJob(String pointId,Integer status, String product, Integer current, Integer size, + @DateTimeFormat(pattern = "yyyy-MM-dd") String startTime, + @DateTimeFormat(pattern = "yyyy-MM-dd") String endTime); + + public Integer getHistoryJobTotal(String pointId,Integer status, String product, + @DateTimeFormat(pattern = "yyyy-MM-dd") String startTime, + @DateTimeFormat(pattern = "yyyy-MM-dd") String endTime); + public List exportData(Date startTime,Date endTime); + + public void addJob(Job job); + + public void updateAttribute(String jobId, String attribute, Integer status); + +} diff --git a/bolt-core/src/main/java/com/jiluo/bolt/service/MinioService.java b/bolt-core/src/main/java/com/jiluo/bolt/service/MinioService.java new file mode 100644 index 0000000..ca4b60b --- /dev/null +++ b/bolt-core/src/main/java/com/jiluo/bolt/service/MinioService.java @@ -0,0 +1,148 @@ +package com.jiluo.bolt.service; + +import io.minio.ObjectStat; +import io.minio.Result; +import io.minio.errors.*; +import io.minio.messages.Item; +import org.springframework.web.multipart.MultipartFile; + +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.io.InputStream; +import java.security.InvalidKeyException; +import java.security.NoSuchAlgorithmException; +/** + * Created with IntelliJ IDEA. + * + * @Author: fy + * @Date: 2023/10/13/14:56 + * @Description: + */ +public interface MinioService { + + + /** + * 判断 bucket是否存在 + * + * @param bucketName + * @return + */ + boolean bucketExists(String bucketName); + + /** + * 创建 bucket + * + * @param bucketName + */ + void makeBucket(String bucketName); + + /** + * 文件上传 + * + * @param bucketName + * @param objectName + * @param filename + */ + void putObject(String bucketName, String objectName, String filename); + + /** + * 文件上传 + * + * @param bucketName + * @param objectName + * @param stream + */ + void putObject(String bucketName, String objectName, InputStream stream, String contentType); + + /** + * 文件上传 + * + * @param bucketName + * @param multipartFile + */ + void putObject(String bucketName, MultipartFile multipartFile, String filename); + + /** + * 删除文件 + * + * @param bucketName + * @param objectName + */ + boolean removeObject(String bucketName, String objectName); + + /** + * 下载文件 + * + * @param fileName + * @param originalName + * @param response + */ + void downloadFile(String bucketName, String fileName, String originalName, HttpServletResponse response); + + /** + * 获取文件路径 + * + * @param bucketName + * @param objectName + * @return + */ + String getObjectUrl(String bucketName, String objectName); + + + /** + * @description: 文件下载 + * @param: bucketName + * objectName + * @return: io.minio.ObjectStat + * @author yangc + * @date: 2020-10-20 20:24 + */ + ObjectStat statObject(String bucketName, String objectName); + + /** + * 以流的形式获取一个文件对象 + * + * @param bucketName 存储桶名称 + * @param objectName 存储桶里的对象名称 + * @return + */ + InputStream getObject(String bucketName, String objectName); + + + /** + * 列出存储桶中所有对象 + * + * @param bucketName 存储桶名称 + * @return + */ + Iterable> listObjects(String bucketName); + + + /** + * 生成一个给HTTP GET请求用的presigned URL + * + * @param bucketName 存储桶名称 + * @param objectName 存储桶里的对象名称 + * @param expires 失效时间(以秒为单位),默认是7天,不得大于七天 + * @return + */ + String presignedGetObject(String bucketName, String objectName, Integer expires); + + + /** + * 设置存储桶策略 + * + * @param bucketName 存储桶名称 + * @return + */ + void setBucketPolicy(String bucketName, String policy) throws IOException, InvalidResponseException, InvalidKeyException, NoSuchAlgorithmException, ErrorResponseException, XmlParserException, InvalidBucketNameException, InsufficientDataException, InternalException; + + + /** + * 获取存储桶策略 + * + * @param bucketName 存储桶名称 + * @return + */ + String getBucketPolicy(String bucketName) throws IOException, InvalidResponseException, InvalidKeyException, NoSuchAlgorithmException, BucketPolicyTooLargeException, ErrorResponseException, XmlParserException, InvalidBucketNameException, InsufficientDataException, InternalException; +} \ No newline at end of file diff --git a/bolt-core/src/main/java/com/jiluo/bolt/service/MotorGroupService.java b/bolt-core/src/main/java/com/jiluo/bolt/service/MotorGroupService.java new file mode 100644 index 0000000..7d2546d --- /dev/null +++ b/bolt-core/src/main/java/com/jiluo/bolt/service/MotorGroupService.java @@ -0,0 +1,29 @@ +package com.jiluo.bolt.service; +import com.baomidou.mybatisplus.extension.service.IService; +import com.jiluo.bolt.entity.dto.MotorGroupDto; +import com.jiluo.bolt.entity.po.MotorGroup; + +import java.util.List; + +/** + * 机组信息表(MotorGroup)表服务接口 + * @author Fangy + * @date 2023-05-05 10:10:12 + */ + +public interface MotorGroupService extends IService { + + public List getAll(); + + public MotorGroup getByBizId(String bizId); + + public Integer getTotalByPowerStation(String powerStationId); + + public List select(MotorGroupDto motorGroupDto); + + public Integer selectTotal(MotorGroupDto motorGroupDto); + + public Boolean add(MotorGroupDto motorGroupDto); + + public Boolean updateByBizId(MotorGroupDto motorGroupDto); +} diff --git a/bolt-core/src/main/java/com/jiluo/bolt/service/PointService.java b/bolt-core/src/main/java/com/jiluo/bolt/service/PointService.java new file mode 100644 index 0000000..e88324c --- /dev/null +++ b/bolt-core/src/main/java/com/jiluo/bolt/service/PointService.java @@ -0,0 +1,42 @@ +package com.jiluo.bolt.service; +import com.baomidou.mybatisplus.extension.service.IService; +import com.jiluo.bolt.entity.dto.PointDto; +import com.jiluo.bolt.entity.po.Point; + +import java.util.Date; +import java.util.List; + +/** + * 检测点表(Point)表服务接口 + * @author Fangy + * @date 2023-05-05 10:10:12 + */ + +public interface PointService extends IService { + + public List getAll(); + + public List getByRole(String groupPermission); + + public void updateEnableDetect(String pointId,Integer enableDetect); + + public void updateResetTime(String pointId, Date date); + + public void updateConfig(String pointId, String config); + + public Point getByBizId(String bizId); + + public Integer getTotalByMotorGroup(String motorGroupId); + + public List select(PointDto pointDto); + + public Integer selectTotal(PointDto pointDto); + + public Boolean add(PointDto pointDto); + + public Boolean updateByBizId(PointDto pointDto); + + public Boolean updateDetect(PointDto pointDto); + + public List getByPowerStation(String powerStationId); +} diff --git a/bolt-core/src/main/java/com/jiluo/bolt/service/PowerStationService.java b/bolt-core/src/main/java/com/jiluo/bolt/service/PowerStationService.java new file mode 100644 index 0000000..cff0c5a --- /dev/null +++ b/bolt-core/src/main/java/com/jiluo/bolt/service/PowerStationService.java @@ -0,0 +1,27 @@ +package com.jiluo.bolt.service; +import com.baomidou.mybatisplus.extension.service.IService; +import com.jiluo.bolt.entity.dto.PowerStationDto; +import com.jiluo.bolt.entity.po.PowerStation; + +import java.util.List; + +/** + * 电站表(PowerStation)表服务接口 + * @author Fangy + * @date 2023-05-05 10:10:12 + */ + +public interface PowerStationService extends IService { + public List getAll(); + + public PowerStation getByBizId(String bizId); + + public List select(PowerStationDto powerStationDto); + + public Integer selectTotal(PowerStationDto powerStationDto); + + public Boolean add(PowerStationDto powerStationDto); + + public Boolean updateByBizId(PowerStationDto powerStationDto); + +} diff --git a/bolt-core/src/main/java/com/jiluo/bolt/service/ProductService.java b/bolt-core/src/main/java/com/jiluo/bolt/service/ProductService.java new file mode 100644 index 0000000..5b4af64 --- /dev/null +++ b/bolt-core/src/main/java/com/jiluo/bolt/service/ProductService.java @@ -0,0 +1,13 @@ +package com.jiluo.bolt.service; +import com.baomidou.mybatisplus.extension.service.IService; +import com.jiluo.bolt.entity.po.Product; + +/** + * 检测类型表(Product)表服务接口 + * @author Fangy + * @date 2023-05-05 10:10:12 + */ + +public interface ProductService extends IService { + +} diff --git a/bolt-core/src/main/java/com/jiluo/bolt/service/RoleItemService.java b/bolt-core/src/main/java/com/jiluo/bolt/service/RoleItemService.java new file mode 100644 index 0000000..752e04d --- /dev/null +++ b/bolt-core/src/main/java/com/jiluo/bolt/service/RoleItemService.java @@ -0,0 +1,20 @@ +package com.jiluo.bolt.service; +import com.baomidou.mybatisplus.extension.service.IService; +import com.jiluo.bolt.entity.po.RoleItem; + +import java.util.List; + +/** + * 权限信息表(RoleItem)表服务接口 + * @author Fangy + * @date 2023-05-05 10:10:12 + */ + +public interface RoleItemService extends IService { + + public RoleItem getByBizId(String bizId); + + public List getByBizId(List itemIds); + + public List getAll(); +} diff --git a/bolt-core/src/main/java/com/jiluo/bolt/service/RoleService.java b/bolt-core/src/main/java/com/jiluo/bolt/service/RoleService.java new file mode 100644 index 0000000..377136f --- /dev/null +++ b/bolt-core/src/main/java/com/jiluo/bolt/service/RoleService.java @@ -0,0 +1,23 @@ +package com.jiluo.bolt.service; +import com.baomidou.mybatisplus.extension.service.IService; +import com.jiluo.bolt.entity.dto.RoleDto; +import com.jiluo.bolt.entity.po.Role; + +import java.util.List; + +/** + * 角色信息表(Role)表服务接口 + * @author Fangy + * @date 2023-05-05 18:59:16 + */ + +public interface RoleService extends IService { + + public Role getByRoleId(String roleId); + + public List select(RoleDto roleDto); + + public String add(RoleDto roleDto); + + public Boolean updateByBizId(RoleDto roleDto); +} diff --git a/bolt-core/src/main/java/com/jiluo/bolt/service/RoleValueService.java b/bolt-core/src/main/java/com/jiluo/bolt/service/RoleValueService.java new file mode 100644 index 0000000..81fb210 --- /dev/null +++ b/bolt-core/src/main/java/com/jiluo/bolt/service/RoleValueService.java @@ -0,0 +1,25 @@ +package com.jiluo.bolt.service; +import com.baomidou.mybatisplus.extension.service.IService; +import com.jiluo.bolt.entity.dto.PermissionDto; +import com.jiluo.bolt.entity.po.RoleValue; + +import java.util.List; + +/** + * 角色信息表(Role)表服务接口 + * @author Fangy + * @date 2023-05-05 10:10:12 + */ + +public interface RoleValueService extends IService { + + public List getByRoleId(String roleId); + + public RoleValue getProduct(String roleId); + + public List select(PermissionDto permissionDto); + + public Boolean add(RoleValue roleValue); + + public Boolean updateByItemId(RoleValue roleValue); +} diff --git a/bolt-core/src/main/java/com/jiluo/bolt/service/UserService.java b/bolt-core/src/main/java/com/jiluo/bolt/service/UserService.java new file mode 100644 index 0000000..0c6fad8 --- /dev/null +++ b/bolt-core/src/main/java/com/jiluo/bolt/service/UserService.java @@ -0,0 +1,23 @@ +package com.jiluo.bolt.service; +import com.baomidou.mybatisplus.extension.service.IService; +import com.jiluo.bolt.entity.dto.UserDto; +import com.jiluo.bolt.entity.po.User; + +import java.util.List; + +/** + * 用户信息表(User)表服务接口 + * @author Fangy + * @date 2023-05-05 10:10:12 + */ + +public interface UserService extends IService { + + public User getByUid(String uid); + + public List select(UserDto userDto); + + public Boolean add(UserDto userDto); + + public Boolean updateByBizId(UserDto userDto); +} diff --git a/bolt-core/src/main/java/com/jiluo/bolt/service/VersionService.java b/bolt-core/src/main/java/com/jiluo/bolt/service/VersionService.java new file mode 100644 index 0000000..0e9f7d1 --- /dev/null +++ b/bolt-core/src/main/java/com/jiluo/bolt/service/VersionService.java @@ -0,0 +1,14 @@ +package com.jiluo.bolt.service; +import com.baomidou.mybatisplus.extension.service.IService; +import com.jiluo.bolt.entity.po.Version; + +/** + * 版本信息表(Version)表服务接口 + * @author Fangy + * @date 2023-05-05 10:10:12 + */ + +public interface VersionService extends IService { + + public Version select(); +} diff --git a/bolt-core/src/main/java/com/jiluo/bolt/service/impl/AlarmServiceImpl.java b/bolt-core/src/main/java/com/jiluo/bolt/service/impl/AlarmServiceImpl.java new file mode 100644 index 0000000..e4f1b2e --- /dev/null +++ b/bolt-core/src/main/java/com/jiluo/bolt/service/impl/AlarmServiceImpl.java @@ -0,0 +1,36 @@ +package com.jiluo.bolt.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.jiluo.bolt.mapper.AlarmMapper; +import com.jiluo.bolt.entity.po.Alarm; +import com.jiluo.bolt.service.AlarmService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.ArrayList; +import java.util.List; + +/** + * 告警信息表(Alarm)表服务实现类 + * @author Fangy + * @date 2023-05-05 10:10:07 + */ +@Service +public class AlarmServiceImpl extends ServiceImpl implements AlarmService { + /** logger:日志文件 */ + private static final Logger logger = LoggerFactory.getLogger(AlarmServiceImpl.class); + + @Autowired + AlarmMapper alarmMapper; + + public List getAll(){ + return new ArrayList<>(ALARM_MAP.values()); + } + + public void add(Alarm alarm){ + alarmMapper.insert(alarm); + } +} diff --git a/bolt-core/src/main/java/com/jiluo/bolt/service/impl/AlgorithmServiceImpl.java b/bolt-core/src/main/java/com/jiluo/bolt/service/impl/AlgorithmServiceImpl.java new file mode 100644 index 0000000..1cfe893 --- /dev/null +++ b/bolt-core/src/main/java/com/jiluo/bolt/service/impl/AlgorithmServiceImpl.java @@ -0,0 +1,86 @@ +package com.jiluo.bolt.service.impl; + +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.jiluo.bolt.entity.dto.AlgorithmDto; +import com.jiluo.bolt.entity.po.AlgorithmTemplete; +import com.jiluo.bolt.entity.po.Config; +import com.jiluo.bolt.mapper.AlgorithmMapper; +import com.jiluo.bolt.entity.po.Algorithm; +import com.jiluo.bolt.mapper.AlgorithmTempleteMapper; +import com.jiluo.bolt.mapper.ConfigMapper; +import com.jiluo.bolt.service.AlgorithmService; +import com.jiluo.bolt.util.SnowFlakeUtil; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.List; + +/** + * 算法信息表(Algorithm)表服务实现类 + * @author Fangy + * @date 2023-05-05 10:10:09 + */ +@Service +public class AlgorithmServiceImpl extends ServiceImpl implements AlgorithmService { + /** logger:日志文件 */ + private static final Logger logger = LoggerFactory.getLogger(AlgorithmServiceImpl.class); + + @Autowired + AlgorithmMapper algorithmMapper; + + @Autowired + AlgorithmTempleteMapper algorithmTempleteMapper; + + @Autowired + ConfigMapper configMapper; + + public Algorithm getByPoint(String pointId){ + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("point",pointId); + return algorithmMapper.selectOne(queryWrapper); + } + + @Override + public Integer getPointCount(String algorithmId) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("algorithm",algorithmId); + return algorithmMapper.selectCount(queryWrapper); + } + + @Override + public List select(AlgorithmDto algorithmDto) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq(StringUtils.isNotBlank(algorithmDto.getAlgorithmId()),"algorithm",algorithmDto.getAlgorithmId()); + return algorithmMapper.selectList(queryWrapper); + } + + @Override + public void add(AlgorithmDto algorithmDto) { + algorithmDto.getPoints().forEach(item ->{ + Algorithm algorithm = new Algorithm(); + JSONObject config = new JSONObject(); + JSONObject attribute = new JSONObject(); + Config algorithm_model_config = configMapper.selectOne(new QueryWrapper().eq("biz_id","algorithm_model_dir")); + if (algorithm_model_config!=null){ + String algorithm_model_dir = algorithm_model_config.getValue()+algorithmDto.getAlgorithmFileName(); + config.put("algorithm_name",algorithmDto.getAlgorithmName()); + config.put("algorithm_model",algorithm_model_dir); + attribute.put("detect_threshold_model",algorithmDto.getAlgorithmFileName()); + algorithm.setBizId("algorithm_"+ SnowFlakeUtil.getDefaultSnowFlakeId()) + .setAlgorithm(algorithmDto.getAlgorithmId()) + .setPowerStation(item.getPowerStationId()) + .setMotorGroup(item.getMotorGroupId()) + .setPoint(item.getPointId()) + .setConfig(config.toJSONString()) + .setAttribute(attribute.toJSONString()) + .setVersion("1.0.0"); + algorithmMapper.insert(algorithm); + } + }); + } +} diff --git a/bolt-core/src/main/java/com/jiluo/bolt/service/impl/AlgorithmTempleteServiceImpl.java b/bolt-core/src/main/java/com/jiluo/bolt/service/impl/AlgorithmTempleteServiceImpl.java new file mode 100644 index 0000000..dbdead9 --- /dev/null +++ b/bolt-core/src/main/java/com/jiluo/bolt/service/impl/AlgorithmTempleteServiceImpl.java @@ -0,0 +1,79 @@ +package com.jiluo.bolt.service.impl; + +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.jiluo.bolt.entity.dto.AlgorithmDto; +import com.jiluo.bolt.mapper.AlgorithmTempleteMapper; +import com.jiluo.bolt.entity.po.AlgorithmTemplete; +import com.jiluo.bolt.service.AlgorithmTempleteService; +import com.jiluo.bolt.util.SnowFlakeUtil; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.List; + +/** + * (AlgorithmTemplete)表服务实现类 + * @author Fangy + * @date 2023-05-05 10:10:10 + */ +@Service +public class AlgorithmTempleteServiceImpl extends ServiceImpl implements AlgorithmTempleteService { + /** logger:日志文件 */ + private static final Logger logger = LoggerFactory.getLogger(AlgorithmTempleteServiceImpl.class); + + @Autowired + AlgorithmTempleteMapper algorithmTempleteMapper; + + @Override + public List select(AlgorithmDto algorithmDto) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.like(StringUtils.isNotBlank(algorithmDto.getAlgorithmName()),"name",algorithmDto.getAlgorithmName()) + .eq(StringUtils.isNotBlank(algorithmDto.getSource()),"source",algorithmDto.getSource()) + .eq(StringUtils.isNotBlank(algorithmDto.getAlgorithmId()),"biz_id",algorithmDto.getAlgorithmId());; + return algorithmTempleteMapper.selectList(queryWrapper); + + } + + @Override + public Integer selectTotal(AlgorithmDto algorithmDto) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.like(StringUtils.isNotBlank(algorithmDto.getAlgorithmName()),"name",algorithmDto.getAlgorithmName()) + .eq(StringUtils.isNotBlank(algorithmDto.getSource()),"source",algorithmDto.getSource()); + return algorithmTempleteMapper.selectCount(queryWrapper); + } + + @Override + public String add(AlgorithmDto algorithmDto) { + AlgorithmTemplete algorithmTemplete = new AlgorithmTemplete(); + JSONObject config = new JSONObject(); + config.put("detect_threshold_model",algorithmDto.getAlgorithmFileName()); + algorithmTemplete.setBizId(algorithmDto.getSource()+ SnowFlakeUtil.getDefaultSnowFlakeId()) + .setSource(algorithmDto.getSource()) + .setName(algorithmDto.getAlgorithmName()) + .setDrive(algorithmDto.getAlgorithmFileName()) + .setVersion("1.0.0") + .setConfig(config.toJSONString()); + algorithmTempleteMapper.insert(algorithmTemplete); + return algorithmTemplete.getBizId(); + } + + @Override + public Boolean updateByBizId(AlgorithmDto algorithmDto) { + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + JSONObject config = new JSONObject(); + config.put("detect_threshold_model",algorithmDto.getAlgorithmFileName()); + + updateWrapper.eq("biz_id",algorithmDto.getAlgorithmId()) + .set("source",algorithmDto.getSource()) + .set("name",algorithmDto.getAlgorithmName()) + .set("drive",algorithmDto.getAlgorithmFileName()) + .set("config",config.toJSONString()); + return algorithmTempleteMapper.update(null,updateWrapper)>0?true:false; + } +} diff --git a/bolt-core/src/main/java/com/jiluo/bolt/service/impl/ConfigServiceImpl.java b/bolt-core/src/main/java/com/jiluo/bolt/service/impl/ConfigServiceImpl.java new file mode 100644 index 0000000..f815632 --- /dev/null +++ b/bolt-core/src/main/java/com/jiluo/bolt/service/impl/ConfigServiceImpl.java @@ -0,0 +1,85 @@ +package com.jiluo.bolt.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.jiluo.bolt.mapper.ConfigMapper; +import com.jiluo.bolt.entity.po.Config; +import com.jiluo.bolt.service.ConfigService; +import com.jiluo.bolt.util.SnowFlakeUtil; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.List; + +/** + * 系统配置表(Config)表服务实现类 + * @author Fangy + * @date 2023-05-05 10:10:11 + */ +@Service +public class ConfigServiceImpl extends ServiceImpl implements ConfigService { + /** logger:日志文件 */ + private static final Logger logger = LoggerFactory.getLogger(ConfigServiceImpl.class); + + @Autowired + ConfigMapper configMapper; + + public boolean updateByBizId(String bizId,String value){ + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.eq("biz_id",bizId).set("value",value); + configMapper.update(null,updateWrapper); + return true; + } + + public Config selectByBizId(String bizId){ + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("biz_id",bizId); + return configMapper.selectOne(queryWrapper); + } + + @Override + public List selectByCategory(String category) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("category",category); + return configMapper.selectList(queryWrapper); + } + + @Override + public Config selectByDescription(String description) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("description",description); + return configMapper.selectOne(queryWrapper); + } + + @Override + public List select(Config configDto) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq(StringUtils.isNotBlank(configDto.getConfigId()),"biz_id",configDto.getConfigId()) + .eq(StringUtils.isNotBlank(configDto.getDescription()),"description",configDto.getDescription()) + .eq(StringUtils.isNotBlank(configDto.getCategory()),"category",configDto.getCategory()); + + return configMapper.selectList(queryWrapper); + } + + @Override + public Boolean add(Config configDto,String type) { + configDto.setConfigId(type+ SnowFlakeUtil.getDefaultSnowFlakeId()); + return configMapper.insert(configDto)>0?true:false; + } + + @Override + public Boolean updateByBizId(Config configDto) { + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.eq("biz_id",configDto.getConfigId()) + .set(StringUtils.isNotBlank(configDto.getValue()),"value",configDto.getValue()) + .set(StringUtils.isNotBlank(configDto.getDescription()),"description",configDto.getDescription()) + .set(StringUtils.isNotBlank(configDto.getCategory()),"category",configDto.getCategory()) + .set(StringUtils.isNotBlank(configDto.getType()),"type",configDto.getType()); + + return configMapper.update(null,updateWrapper)>0?true:false; + } +} diff --git a/bolt-core/src/main/java/com/jiluo/bolt/service/impl/DefectServiceImpl.java b/bolt-core/src/main/java/com/jiluo/bolt/service/impl/DefectServiceImpl.java new file mode 100644 index 0000000..0dbf323 --- /dev/null +++ b/bolt-core/src/main/java/com/jiluo/bolt/service/impl/DefectServiceImpl.java @@ -0,0 +1,106 @@ +package com.jiluo.bolt.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.jiluo.bolt.common.DefectType; +import com.jiluo.bolt.common.DetectType; +import com.jiluo.bolt.common.LocalStatus; +import com.jiluo.bolt.entity.po.Job; +import com.jiluo.bolt.mapper.DefectMapper; +import com.jiluo.bolt.entity.po.Defect; +import com.jiluo.bolt.mapper.JobMapper; +import com.jiluo.bolt.service.DefectService; +import com.jiluo.bolt.util.BigDecimalUtils; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.stereotype.Service; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import javax.annotation.PostConstruct; +import java.math.BigDecimal; +import java.math.RoundingMode; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +/** + * 检测结果表(Defect)表服务实现类 + * @author Fangy + * @date 2023-05-05 10:10:11 + */ +@Service +public class DefectServiceImpl extends ServiceImpl implements DefectService { + /** logger:日志文件 */ + private static final Logger logger = LoggerFactory.getLogger(DefectServiceImpl.class); + + @Autowired + DefectMapper defectMapper; + + @Autowired + JobMapper jobMapper; + + @PostConstruct + public void init() { + defectMapper.selectTemperature().forEach(defect -> { + DefectService.TEMPERATUREMAP.put(defect.getPoint(), BigDecimalUtils.DBToFront(DefectType.temperature,defect.getValue()).floatValue()); + }); + } + + @Scheduled(cron = "0 0 * * * *") + public void updateLocal() { + defectMapper.selectTemperature().forEach(defect -> { + DefectService.TEMPERATUREMAP.put(defect.getPoint(), BigDecimalUtils.DBToFront(DefectType.temperature,defect.getValue()).floatValue()); + }); + } + + public List getRealTimeData(String jobId){ + QueryWrapper wrapper = new QueryWrapper(); + wrapper.eq("job",jobId).eq("status",0); + return defectMapper.selectList(wrapper); + } + + public List getByJob(String jobId){ + QueryWrapper wrapper = new QueryWrapper(); + wrapper.eq("job",jobId).eq("status",0); + return defectMapper.selectList(wrapper); + } + + public List getByJob(List jobIds){ + QueryWrapper wrapper = new QueryWrapper(); + wrapper.in("job",jobIds); + return defectMapper.selectList(wrapper); + } + + public List chartData(String pointId,String product,Integer zone,String startTime,String endTime){ + QueryWrapper wrapper = new QueryWrapper(); + wrapper.eq(StringUtils.isNotBlank(pointId),"point",pointId) + .eq(StringUtils.isNotBlank(product),"type",product) + .eq("zone",zone) + .between(StringUtils.isNotBlank(startTime)&&StringUtils.isNotBlank(endTime),"gmt_create",startTime,endTime); + return defectMapper.selectList(wrapper); + } + public List exportData(String pointId, Date startTime, Date endTime, Integer status){ + QueryWrapper wrapper = new QueryWrapper(); + wrapper.eq(pointId!=null&&StringUtils.isNotBlank(pointId),"point",pointId).between("gmt_create",startTime,endTime).eq(status!=null,"status",status); + return defectMapper.selectList(wrapper); + } + + public Defect selectToCompare(String jobId,String type,Integer zone,Integer position){ + QueryWrapper wrapper = new QueryWrapper<>(); + wrapper.eq("job",jobId) + .eq("type",type) + .eq("zone",zone) + .eq("position",position); + return defectMapper.selectOne(wrapper); + } + + public void add(Defect defect){ + defectMapper.insert(defect); + } + + public void update(Defect defect){ + defectMapper.updateById(defect); + } +} diff --git a/bolt-core/src/main/java/com/jiluo/bolt/service/impl/DetectServiceImpl.java b/bolt-core/src/main/java/com/jiluo/bolt/service/impl/DetectServiceImpl.java new file mode 100644 index 0000000..2a6a503 --- /dev/null +++ b/bolt-core/src/main/java/com/jiluo/bolt/service/impl/DetectServiceImpl.java @@ -0,0 +1,63 @@ +package com.jiluo.bolt.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.jiluo.bolt.mapper.DetectMapper; +import com.jiluo.bolt.entity.po.Detect; +import com.jiluo.bolt.service.DetectService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +/** + * 检测过程表(Detect)表服务实现类 + * @author Fangy + * @date 2023-05-05 10:10:11 + */ +@Service +public class DetectServiceImpl extends ServiceImpl implements DetectService { + /** logger:日志文件 */ + private static final Logger logger = LoggerFactory.getLogger(DetectServiceImpl.class); + + @Autowired + DetectMapper detectMapper; + + public Map> getImg(String jobId){ + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("job",jobId); + Map> result = new HashMap<>(); + detectMapper.selectList(queryWrapper).stream().collect(Collectors.groupingBy(Detect::getZone)) + .forEach((k,v)->{ + List imgs = new ArrayList<>(); + v.stream().forEach(defect->imgs.add(defect.getData())); + result.put(k,imgs); + }); + return result; + } + + public void add(Detect detect){ + detectMapper.insert(detect); + } + + @Override + public Integer selectByJob(String jobId) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("job",jobId); + return detectMapper.selectCount(queryWrapper); + } + + @Override + public List getByJob(String jobId) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("job",jobId); + return detectMapper.selectList(queryWrapper); + } + +} diff --git a/bolt-core/src/main/java/com/jiluo/bolt/service/impl/DeviceServiceImpl.java b/bolt-core/src/main/java/com/jiluo/bolt/service/impl/DeviceServiceImpl.java new file mode 100644 index 0000000..8fe0aff --- /dev/null +++ b/bolt-core/src/main/java/com/jiluo/bolt/service/impl/DeviceServiceImpl.java @@ -0,0 +1,202 @@ +package com.jiluo.bolt.service.impl; + +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.jiluo.bolt.common.LocalStatus; +import com.jiluo.bolt.entity.dto.DeviceDto; +import com.jiluo.bolt.entity.dto.TempSenserDto; +import com.jiluo.bolt.mapper.DeviceMapper; +import com.jiluo.bolt.entity.po.Device; +import com.jiluo.bolt.service.DeviceService; +import com.jiluo.bolt.util.SnowFlakeUtil; +import org.apache.commons.lang3.StringUtils; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import javax.annotation.PostConstruct; +import java.util.*; + +/** + * 设备信息表(Device)表服务实现类 + * @author Fangy + * @date 2023-05-05 10:10:11 + */ +@Service +public class DeviceServiceImpl extends ServiceImpl implements DeviceService { + /** logger:日志文件 */ + private static final Logger logger = LoggerFactory.getLogger(DeviceServiceImpl.class); + + @Autowired + DeviceMapper deviceMapper; + + @PostConstruct + public void init() { + deviceMapper.selectList(new QueryWrapper<>()).forEach(device -> DeviceLocalStatus.putIfAbsent(device.getPointId(), LocalStatus.builder().pointStatus(2).cameraStatus(2).tempSensorStatus(2).build())); + } + + public Device selectByBizId(String deviceId){ + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("biz_id",deviceId); + Device device = deviceMapper.selectOne(queryWrapper); + if (DeviceLocalStatus.get(device.getPointId()).getCameraStatus()==2){ + device.setStatus(2); + } + return device; + } + + public List selectByPoint(String pointId){ + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("point",pointId); + List deviceList = deviceMapper.selectList(queryWrapper); + deviceList.stream().filter(device -> DeviceLocalStatus.get(device.getPointId()).getCameraStatus()==2).forEach(device -> device.setStatus(2)); + return deviceList; + } + + public List selectAll(){ + List deviceList = deviceMapper.selectList(new QueryWrapper<>()); + deviceList.stream().filter(device -> DeviceLocalStatus.get(device.getPointId()).getCameraStatus()==2).forEach(device -> device.setStatus(2)); + return deviceList; + } + + public void updateTemp(String deviceId,String tempThreshold){ + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.eq("biz_id",deviceId).set("temp_threshold",tempThreshold); + deviceMapper.update(null,updateWrapper); + } + + public void updateStatus(String deviceId,Integer status){ + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.eq("biz_id",deviceId).set("status",status); + deviceMapper.update(null,updateWrapper); + } + + @Override + public List select(DeviceDto deviceDto) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("type","camera") + .eq(StringUtils.isNotBlank(deviceDto.getPowerStationId()),"power_station",deviceDto.getPowerStationId()) + .eq(StringUtils.isNotBlank(deviceDto.getPointId()),"point",deviceDto.getPointId()) + .eq(deviceDto.getStatus()!=null,"status",deviceDto.getStatus()); + List deviceList = deviceMapper.selectList(queryWrapper); + deviceList.stream().filter(device -> DeviceLocalStatus.get(device.getPointId()).getCameraStatus()==2).forEach(device -> device.setStatus(2)); + return deviceList; + } + + @Override + public Integer selectTotal(DeviceDto deviceDto) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("type","camera") + .eq(StringUtils.isNotBlank(deviceDto.getPowerStationId()),"power_station",deviceDto.getPowerStationId()) + .eq(StringUtils.isNotBlank(deviceDto.getPointId()),"point",deviceDto.getPointId()) + .eq(deviceDto.getStatus()!=null,"status",deviceDto.getStatus()); + return deviceMapper.selectCount(queryWrapper); + } + + @Override + public Boolean add(DeviceDto deviceDto,String type) { + Device device = new Device(); + String deviceId = "camera_"+SnowFlakeUtil.getDefaultSnowFlakeId(); + device.setDeviceId(deviceId) + .setType(type) + .setName(deviceDto.getName()) + .setPowerStationId(deviceDto.getPowerStationId()) + .setProduct("BOLT_AND_LINE") + .setMotorGroupId(deviceDto.getMotorGroupId()) + .setPointId(deviceDto.getPointId()) + .setStatus(1) + .setTempThreshold("") + .setConfig(deviceDto.getConfig()) + .setVender(deviceDto.getVender()); + boolean result = deviceMapper.insert(device)>0?true:false; + if(result){ + DeviceLocalStatus.putIfAbsent(device.getPointId(), LocalStatus.builder().pointStatus(2).cameraStatus(2).tempSensorStatus(2).build()); + } + return result; + } + + @Override + public Boolean updateByBizId(DeviceDto deviceDto) { + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.eq("biz_id",deviceDto.getDeviceId()) + .set("power_station",deviceDto.getPowerStationId()) + .set("motor_group",deviceDto.getMotorGroupId()) + .set("point",deviceDto.getPointId()) + .set("name",deviceDto.getName()) + .set("vender",deviceDto.getVender()) + .set("config",deviceDto.getConfig()); + return deviceMapper.update(null,updateWrapper)>0?true:false; + } + + @Override + public Boolean deactivate(DeviceDto deviceDto) { + if (!DeviceLocalStatus.containsKey(deviceDto.getPointId())){ + return false; + } + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.eq("biz_id",deviceDto.getDeviceId()).set("status",deviceDto.getStatus()); + deviceMapper.update(null,updateWrapper); + return true; + } + @Override + public List select(TempSenserDto tempSenserDto) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("type","temperature_sensor") + .eq(StringUtils.isNotBlank(tempSenserDto.getPowerStationId()),"power_station",tempSenserDto.getPowerStationId()) + .eq(StringUtils.isNotBlank(tempSenserDto.getPointId()),"point",tempSenserDto.getPointId()) + .eq(tempSenserDto.getStatus()!=null,"status",tempSenserDto.getStatus()); + List deviceList = deviceMapper.selectList(queryWrapper); + deviceList.stream().filter(device -> DeviceLocalStatus.get(device.getPointId()).getCameraStatus()==2).forEach(device -> device.setStatus(2)); + return deviceList; + } + + @Override + public Integer selectTotal(TempSenserDto tempSenserDto) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("type","temperature_sensor") + .eq(StringUtils.isNotBlank(tempSenserDto.getPowerStationId()),"power_station",tempSenserDto.getPowerStationId()) + .eq(StringUtils.isNotBlank(tempSenserDto.getPointId()),"point",tempSenserDto.getPointId()) + .eq(tempSenserDto.getStatus()!=null,"status",tempSenserDto.getStatus()); + return deviceMapper.selectCount(queryWrapper); + } + + @Override + public Boolean add(TempSenserDto tempSenserDto,String type) { + Device device = new Device(); + String deviceId = "temperature_sensor_"+SnowFlakeUtil.getDefaultSnowFlakeId(); + device.setDeviceId(deviceId) + .setType(type) + .setName(tempSenserDto.getName()) + .setPowerStationId(tempSenserDto.getPowerStationId()) + .setProduct("TEMPERATURE") + .setMotorGroupId(tempSenserDto.getMotorGroupId()) + .setPointId(tempSenserDto.getPointId()) + .setStatus(1) + .setTempThreshold("") + .setConfig(tempSenserDto.getConfig().toJSONString()) + .setVender(tempSenserDto.getTypeId()); + boolean result = deviceMapper.insert(device)>0?true:false; + if(result){ + DeviceLocalStatus.putIfAbsent(device.getPointId(), LocalStatus.builder().pointStatus(2).cameraStatus(2).tempSensorStatus(2).build()); + } + return result; + } + + @Override + public Boolean updateByBizId(TempSenserDto tempSenserDto) { + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.eq("biz_id",tempSenserDto.getDeviceId()) + .set("power_station",tempSenserDto.getPowerStationId()) + .set("motor_group",tempSenserDto.getMotorGroupId()) + .set("point",tempSenserDto.getPointId()) + .set("name",tempSenserDto.getName()) + .set("vender",tempSenserDto.getTypeId()) + .set("config",tempSenserDto.getConfig().toJSONString()); + return deviceMapper.update(null,updateWrapper)>0?true:false; + } + +} diff --git a/bolt-core/src/main/java/com/jiluo/bolt/service/impl/DeviceTempleteServiceImpl.java b/bolt-core/src/main/java/com/jiluo/bolt/service/impl/DeviceTempleteServiceImpl.java new file mode 100644 index 0000000..6f32a84 --- /dev/null +++ b/bolt-core/src/main/java/com/jiluo/bolt/service/impl/DeviceTempleteServiceImpl.java @@ -0,0 +1,54 @@ +package com.jiluo.bolt.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.jiluo.bolt.mapper.DeviceTempleteMapper; +import com.jiluo.bolt.entity.po.DeviceTemplete; +import com.jiluo.bolt.service.DeviceTempleteService; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import javax.annotation.PostConstruct; +import java.util.ArrayList; +import java.util.List; +import java.util.stream.Collectors; + +/** + * (DeviceTemplete)表服务实现类 + * @author Fangy + * @date 2023-05-05 10:10:11 + */ +@Service +public class DeviceTempleteServiceImpl extends ServiceImpl implements DeviceTempleteService { + /** logger:日志文件 */ + private static final Logger logger = LoggerFactory.getLogger(DeviceTempleteServiceImpl.class); + + List deviceTempleteList = new ArrayList<>(); + + @Autowired + DeviceTempleteMapper deviceTempleteMapper; + + @PostConstruct + private void init(){ + QueryWrapper queryWrapper = new QueryWrapper<>(); + deviceTempleteList = deviceTempleteMapper.selectList(queryWrapper); + } + + @Override + public DeviceTemplete getByBizId(String venderId) { + return deviceTempleteList.stream().filter(x-> StringUtils.equalsIgnoreCase(x.getBizId(),venderId)).findFirst().orElse(null); + } + + @Override + public List getByBizId(List venderIds) { + return deviceTempleteList.stream().filter(x->venderIds.stream().anyMatch(_venderId -> StringUtils.equalsIgnoreCase(x.getBizId(),_venderId))).collect(Collectors.toList()); + } + + @Override + public List getAll() { + return deviceTempleteList; + } +} diff --git a/bolt-core/src/main/java/com/jiluo/bolt/service/impl/JobServiceImpl.java b/bolt-core/src/main/java/com/jiluo/bolt/service/impl/JobServiceImpl.java new file mode 100644 index 0000000..a854c1c --- /dev/null +++ b/bolt-core/src/main/java/com/jiluo/bolt/service/impl/JobServiceImpl.java @@ -0,0 +1,99 @@ +package com.jiluo.bolt.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.jiluo.bolt.mapper.JobMapper; +import com.jiluo.bolt.entity.po.Job; +import com.jiluo.bolt.service.JobService; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.format.annotation.DateTimeFormat; +import org.springframework.stereotype.Service; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.Date; +import java.util.List; + +/** + * 检测任务表(Job)表服务实现类 + * @author Fangy + * @date 2023-05-05 10:10:12 + */ +@Service +public class JobServiceImpl extends ServiceImpl implements JobService { + /** logger:日志文件 */ + private static final Logger logger = LoggerFactory.getLogger(JobServiceImpl.class); + + @Autowired + JobMapper jobMapper; + + @Override + public Job getByBizId(String jobId) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("biz_id",jobId); + return jobMapper.selectOne(queryWrapper); + } + + public List getByBizId(List jobIds) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.in("biz_id", jobIds); + return jobMapper.selectList(queryWrapper); + } + + public Job getRealtimeJob(String pointId, String product){ + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("point",pointId) + .eq("product",product) + .orderByDesc("gmt_create") + .last("limit 1"); + return jobMapper.selectOne(queryWrapper); + } + + public List getHistoryJob(String pointId, Integer status, String product, Integer current, Integer size, + @DateTimeFormat(pattern = "yyyy-MM-dd") String startTime, + @DateTimeFormat(pattern = "yyyy-MM-dd") String endTime){ + StringBuilder lastSql = new StringBuilder(); + lastSql.append("limit ").append(current-1).append(",").append(size); + QueryWrapper wrapper = new QueryWrapper(); + //组装模糊查询条件 + wrapper.eq(StringUtils.isNotBlank(pointId),"point",pointId) + .eq(status!=null,"status",status) + .eq(StringUtils.isNotBlank(product),"product",product) + .between(StringUtils.isNotBlank(startTime)&&StringUtils.isNotBlank(endTime),"gmt_create",startTime,endTime) + .ne("attribute","{}") + .orderByDesc("gmt_create"); + wrapper.last(lastSql.toString()); + return jobMapper.selectList(wrapper); + } + + public Integer getHistoryJobTotal(String pointId,Integer status, String product, + @DateTimeFormat(pattern = "yyyy-MM-dd") String startTime, + @DateTimeFormat(pattern = "yyyy-MM-dd") String endTime){ + QueryWrapper wrapper = new QueryWrapper(); + //组装模糊查询条件 + wrapper.eq(StringUtils.isNotBlank(pointId),"point",pointId) + .eq(status!=null,"status",status) + .eq(StringUtils.isNotBlank(product),"product",product) + .between(StringUtils.isNotBlank(startTime)&&StringUtils.isNotBlank(endTime),"gmt_create",startTime,endTime); + return jobMapper.selectCount(wrapper); + } + + public List exportData(Date startTime, Date endTime){ + QueryWrapper wrapper = new QueryWrapper(); + //组装模糊查询条件 + wrapper.between("gmt_create",startTime,endTime); + return jobMapper.selectList(wrapper); + } + + public void addJob(Job job){ + jobMapper.insert(job); + } + + public void updateAttribute(String jobId, String attribute, Integer status){ + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.eq("biz_id",jobId).set("attribute",attribute).set("status",status); + jobMapper.update(null,updateWrapper); + } +} diff --git a/bolt-core/src/main/java/com/jiluo/bolt/service/impl/MinioServiceImpl.java b/bolt-core/src/main/java/com/jiluo/bolt/service/impl/MinioServiceImpl.java new file mode 100644 index 0000000..a981624 --- /dev/null +++ b/bolt-core/src/main/java/com/jiluo/bolt/service/impl/MinioServiceImpl.java @@ -0,0 +1,191 @@ +package com.jiluo.bolt.service.impl; + +import com.jiluo.bolt.service.MinioService; +import com.jiluo.bolt.util.MinioUtil; +import io.minio.ObjectStat; +import io.minio.Result; +import io.minio.errors.*; +import io.minio.messages.Item; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.web.multipart.MultipartFile; + +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.io.InputStream; +import java.security.InvalidKeyException; +import java.security.NoSuchAlgorithmException; +/** + * Created with IntelliJ IDEA. + * + * @Author: fy + * @Date: 2023/10/13/14:58 + * @Description: + */ +@Service +public class MinioServiceImpl implements MinioService { + + @Autowired + private MinioUtil minioUtil; + + /** + * 判断 bucket是否存在 + * + * @param bucketName + * @return + */ + @Override + public boolean bucketExists(String bucketName) { + return minioUtil.bucketExists(bucketName); + } + + /** + * 创建 bucket + * + * @param bucketName + */ + @Override + public void makeBucket(String bucketName) { + minioUtil.makeBucket(bucketName); + } + + /** + * 文件上传 + * + * @param bucketName + * @param objectName + * @param filename + */ + @Override + public void putObject(String bucketName, String objectName, String filename) { + minioUtil.putObject(bucketName, objectName, filename); + } + + + @Override + public void putObject(String bucketName, String objectName, InputStream stream, String contentType) { + minioUtil.putObject(bucketName, objectName, stream, contentType); + } + + /** + * 文件上传 + * + * @param bucketName + * @param multipartFile + */ + @Override + public void putObject(String bucketName, MultipartFile multipartFile, String filename) { + minioUtil.putObject(bucketName, multipartFile, filename); + } + + /** + * 删除文件 + * + * @param bucketName + * @param objectName + */ + @Override + public boolean removeObject(String bucketName, String objectName) { + return minioUtil.removeObject(bucketName, objectName); + } + + /** + * 下载文件 + * + * @param fileName + * @param originalName + * @param response + */ + @Override + public void downloadFile(String bucketName, String fileName, String originalName, HttpServletResponse response) { + minioUtil.downloadFile(bucketName, fileName, originalName, response); + } + + /** + * 获取文件路径 + * + * @param bucketName + * @param objectName + * @return + */ + @Override + public String getObjectUrl(String bucketName, String objectName) { + return minioUtil.getObjectUrl(bucketName, objectName); + } + + /** + * @param bucketName + * @param objectName + * @description: 文件下载 + * @param: bucketName + * objectName + * @return: io.minio.ObjectStat + * @author yangc + * @date: 2020-10-20 20:24 + */ + @Override + public ObjectStat statObject(String bucketName, String objectName) { + return minioUtil.statObject(bucketName, objectName); + } + + /** + * 以流的形式获取一个文件对象 + * + * @param bucketName 存储桶名称 + * @param objectName 存储桶里的对象名称 + * @return + */ + @Override + public InputStream getObject(String bucketName, String objectName) { + return minioUtil.getObject(bucketName, objectName); + } + + /** + * 列出存储桶中所有对象 + * + * @param bucketName 存储桶名称 + * @return + */ + @Override + public Iterable> listObjects(String bucketName) { + return minioUtil.listObjects(bucketName); + } + + /** + * 生成一个给HTTP GET请求用的presigned URL + * + * @param bucketName 存储桶名称 + * @param objectName 存储桶里的对象名称 + * @param expires 失效时间(以秒为单位),默认是7天,不得大于七天 + * @return + */ + @Override + public String presignedGetObject(String bucketName, String objectName, Integer expires) { + return minioUtil.presignedGetObject(bucketName, objectName, expires); + } + + /** + * 设置存储桶策略 + * + * @param bucketName 存储桶名称 + * @param policy + * @return + */ + @Override + public void setBucketPolicy(String bucketName, String policy) throws IOException, InvalidResponseException, InvalidKeyException, NoSuchAlgorithmException, ErrorResponseException, XmlParserException, InvalidBucketNameException, InsufficientDataException, InternalException { + minioUtil.setBucketPolicy(bucketName, policy); + } + + /** + * 获取存储桶策略 + * + * @param bucketName 存储桶名称 + * @return + */ + @Override + public String getBucketPolicy(String bucketName) throws IOException, InvalidResponseException, InvalidKeyException, NoSuchAlgorithmException, BucketPolicyTooLargeException, ErrorResponseException, XmlParserException, InvalidBucketNameException, InsufficientDataException, InternalException { + return minioUtil.getBucketPolicy(bucketName); + } + + +} \ No newline at end of file diff --git a/bolt-core/src/main/java/com/jiluo/bolt/service/impl/MotorGroupServiceImpl.java b/bolt-core/src/main/java/com/jiluo/bolt/service/impl/MotorGroupServiceImpl.java new file mode 100644 index 0000000..a5b0c5b --- /dev/null +++ b/bolt-core/src/main/java/com/jiluo/bolt/service/impl/MotorGroupServiceImpl.java @@ -0,0 +1,89 @@ +package com.jiluo.bolt.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.jiluo.bolt.entity.dto.MotorGroupDto; +import com.jiluo.bolt.mapper.MotorGroupMapper; +import com.jiluo.bolt.entity.po.MotorGroup; +import com.jiluo.bolt.service.MotorGroupService; +import com.jiluo.bolt.util.SnowFlakeUtil; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.List; + +/** + * 机组信息表(MotorGroup)表服务实现类 + * @author Fangy + * @date 2023-05-05 10:10:12 + */ +@Service +public class MotorGroupServiceImpl extends ServiceImpl implements MotorGroupService { + /** logger:日志文件 */ + private static final Logger logger = LoggerFactory.getLogger(MotorGroupServiceImpl.class); + + @Autowired + MotorGroupMapper motorGroupMapper; + + public List getAll(){ + QueryWrapper queryWrapper = new QueryWrapper<>(); + return motorGroupMapper.selectList(queryWrapper); + } + + + public MotorGroup getByBizId(String bizId){ + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("biz_id",bizId); + return motorGroupMapper.selectOne(queryWrapper); + } + + public Integer getTotalByPowerStation(String powerStationId){ + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("power_station",powerStationId); + return motorGroupMapper.selectCount(queryWrapper); + } + + @Override + public List select(MotorGroupDto motorGroupDto) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.like(StringUtils.isNotBlank(motorGroupDto.getNumber()),"name",motorGroupDto.getNumber()) + .eq(StringUtils.isNotBlank(motorGroupDto.getPowerStationId()),"power_station",motorGroupDto.getPowerStationId()); + return motorGroupMapper.selectList(queryWrapper); + } + + @Override + public Integer selectTotal(MotorGroupDto motorGroupDto) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.like(StringUtils.isNotBlank(motorGroupDto.getNumber()),"name",motorGroupDto.getNumber()) + .eq(StringUtils.isNotBlank(motorGroupDto.getPowerStationId()),"power_station",motorGroupDto.getPowerStationId()); + return motorGroupMapper.selectCount(queryWrapper); + } + + @Override + public Boolean add(MotorGroupDto motorGroupDto) { + MotorGroup motorGroup = new MotorGroup(); + motorGroup.setMotorGroupId("GROUP_"+ SnowFlakeUtil.getDefaultSnowFlakeId()) + .setName(motorGroupDto.getNumber()+"#机组") + .setContact(motorGroupDto.getContact()) + .setPhone(motorGroupDto.getPhone()) + .setPowerStation(motorGroupDto.getPowerStationId()); + return motorGroupMapper.insert(motorGroup)>0?true:false; + } + + @Override + public Boolean updateByBizId(MotorGroupDto motorGroupDto) { + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.eq("biz_id",motorGroupDto.getMotorGroupId()) + .set("name",motorGroupDto.getNumber()+"#机组") + .set("contact",motorGroupDto.getContact()) + .set("phone",motorGroupDto.getPhone()) + .set("power_station",motorGroupDto.getPowerStationId()); + return motorGroupMapper.update(null,updateWrapper)>0?true:false; + } + + +} diff --git a/bolt-core/src/main/java/com/jiluo/bolt/service/impl/PointServiceImpl.java b/bolt-core/src/main/java/com/jiluo/bolt/service/impl/PointServiceImpl.java new file mode 100644 index 0000000..ebb230c --- /dev/null +++ b/bolt-core/src/main/java/com/jiluo/bolt/service/impl/PointServiceImpl.java @@ -0,0 +1,152 @@ +package com.jiluo.bolt.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.jiluo.bolt.entity.dto.PointDto; +import com.jiluo.bolt.mapper.PointMapper; +import com.jiluo.bolt.entity.po.Point; +import com.jiluo.bolt.service.DeviceService; +import com.jiluo.bolt.service.PointService; +import com.jiluo.bolt.util.SnowFlakeUtil; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import java.util.*; + +/** + * 检测点表(Point)表服务实现类 + * @author Fangy + * @date 2023-05-05 10:10:12 + */ +@Service +public class PointServiceImpl extends ServiceImpl implements PointService { + /** logger:日志文件 */ + private static final Logger logger = LoggerFactory.getLogger(PointServiceImpl.class); + + @Autowired + PointMapper pointMapper; + + + public List getAll(){ + QueryWrapper queryWrapper = new QueryWrapper<>(); + List points = pointMapper.selectList(queryWrapper); + points.stream().forEach(point -> { + if (DeviceService.DeviceLocalStatus.containsKey(point.getPointId())){ + point.setStatus(DeviceService.DeviceLocalStatus.get(point.getPointId()).getPointStatus()); + } + }); + return points; + } + + public List getByRole(String motorGroup){ + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("motor_group",motorGroup); + return pointMapper.selectList(queryWrapper); + } + + public void updateEnableDetect(String pointId,Integer enableDetect){ + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.eq("biz_id",pointId).set("enable_detect",enableDetect); + pointMapper.update(null,updateWrapper); + } + + public void updateResetTime(String pointId,Date date){ + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.eq("biz_id",pointId).set("gmt_reset",date); + pointMapper.update(null,updateWrapper); + } + + public void updateConfig(String pointId, String config){ + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.eq("biz_id",pointId).set("config",config); + pointMapper.update(null,updateWrapper); + } + + public Point getByBizId(String bizId){ + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("biz_id",bizId); + return pointMapper.selectOne(queryWrapper); + } + + @Override + public Integer getTotalByMotorGroup(String motorGroupId) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("motor_group",motorGroupId); + + return pointMapper.selectCount(queryWrapper); + } + + @Override + public List select(PointDto pointDto) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.like(StringUtils.isNotBlank(pointDto.getName()),"name",pointDto.getName()) + .eq(StringUtils.isNotBlank(pointDto.getPowerStationId()),"power_station",pointDto.getPowerStationId()) + .eq(StringUtils.isNotBlank(pointDto.getMotorGroupId()),"motor_group",pointDto.getMotorGroupId()); + return pointMapper.selectList(queryWrapper); + } + + @Override + public Integer selectTotal(PointDto pointDto) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.like(StringUtils.isNotBlank(pointDto.getName()),"name",pointDto.getName()) + .eq(StringUtils.isNotBlank(pointDto.getPowerStationId()),"power_station",pointDto.getPowerStationId()) + .eq(StringUtils.isNotBlank(pointDto.getMotorGroupId()),"motor_group",pointDto.getMotorGroupId()); + return pointMapper.selectCount(queryWrapper); + } + + @Override + public Boolean add(PointDto pointDto) { + Point point = new Point(); + point.setPointId("POINT_"+ SnowFlakeUtil.getDefaultSnowFlakeId()) + .setPowerStation(pointDto.getPowerStationId()) + .setMotorGroup(pointDto.getMotorGroupId()) + .setName(pointDto.getName()) + .setPoleNum(pointDto.getPoleNum()) + .setManualTime(pointDto.getManualTime().intValue()) + .setAutomaticTime(pointDto.getAutomaticTime().intValue()) + .setStatus(0) + .setEnableDetect(0) + .setBoltDetect(0) + .setLineDetect(0) + .setPoleOpenDetect(0) + .setPointTempDetect(0) + .setConfig(" "); + return pointMapper.insert(point)>0?true:false; + } + + @Override + public Boolean updateByBizId(PointDto pointDto) { + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.eq("biz_id",pointDto.getPointId()) + .set("power_station",pointDto.getPowerStationId()) + .set("motor_group",pointDto.getMotorGroupId()) + .set("name",pointDto.getName()) + .set("pole_num",pointDto.getPoleNum()) + .set("manual_time",pointDto.getManualTime()) + .set("automatic_time",pointDto.getAutomaticTime()); + return pointMapper.update(null,updateWrapper)>0?true:false; + } + + @Override + public Boolean updateDetect(PointDto pointDto) { + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.eq("biz_id",pointDto.getPointId()) + .set("bolt_detect",pointDto.getBoltDetect().equals(true)?0:1) + .set("line_detect",pointDto.getLineDetect().equals(true)?0:1) + .set("pole_open_detect",pointDto.getPoleOpenDetect().equals(true)?0:1) + .set("point_temp_detect",pointDto.getPointTempDetect().equals(true)?0:1); + return pointMapper.update(null,updateWrapper)>0?true:false; + } + + @Override + public List getByPowerStation(String powerStationId) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("power_station",powerStationId); + return pointMapper.selectList(queryWrapper); + } + + +} diff --git a/bolt-core/src/main/java/com/jiluo/bolt/service/impl/PowerStationServiceImpl.java b/bolt-core/src/main/java/com/jiluo/bolt/service/impl/PowerStationServiceImpl.java new file mode 100644 index 0000000..ac3f741 --- /dev/null +++ b/bolt-core/src/main/java/com/jiluo/bolt/service/impl/PowerStationServiceImpl.java @@ -0,0 +1,77 @@ +package com.jiluo.bolt.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.jiluo.bolt.entity.dto.PowerStationDto; +import com.jiluo.bolt.mapper.PowerStationMapper; +import com.jiluo.bolt.entity.po.PowerStation; +import com.jiluo.bolt.service.PowerStationService; +import com.jiluo.bolt.util.SnowFlakeUtil; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.List; + +/** + * 电站表(PowerStation)表服务实现类 + * @author Fangy + * @date 2023-05-05 10:10:12 + */ +@Service +public class PowerStationServiceImpl extends ServiceImpl implements PowerStationService { + /** logger:日志文件 */ + private static final Logger logger = LoggerFactory.getLogger(PowerStationServiceImpl.class); + + @Autowired + PowerStationMapper powerStationMapper; + + public List getAll(){ + QueryWrapper queryWrapper = new QueryWrapper<>(); + return powerStationMapper.selectList(queryWrapper); + } + + public PowerStation getByBizId(String bizId){ + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("biz_id",bizId); + return powerStationMapper.selectOne(queryWrapper); + } + + public List select(PowerStationDto powerStationDto){ + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.like(StringUtils.isNotBlank(powerStationDto.getName()),"name",powerStationDto.getName()); + return powerStationMapper.selectList(queryWrapper); + } + + public Integer selectTotal(PowerStationDto powerStationDto){ + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.like(StringUtils.isNotBlank(powerStationDto.getName()),"name",powerStationDto.getName()); + return powerStationMapper.selectCount(queryWrapper); + } + + public Boolean add(PowerStationDto powerStationDto){ + PowerStation powerStation = new PowerStation(); + powerStation.setPowerStationId("STATION_"+SnowFlakeUtil.getDefaultSnowFlakeId()) + .setName(powerStationDto.getName()) + .setAddress(powerStationDto.getAddress()) + .setContact(powerStationDto.getContact()) + .setPhone(powerStationDto.getPhone()) + .setIntroduction(powerStationDto.getIntroduction()); + return powerStationMapper.insert(powerStation)>0?true:false; + } + + public Boolean updateByBizId(PowerStationDto powerStationDto){ + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.eq("biz_id",powerStationDto.getPowerStationId()) + .set(StringUtils.isNotBlank(powerStationDto.getName()),"name",powerStationDto.getName()) + .set("address",powerStationDto.getAddress()) + .set("contact",powerStationDto.getContact()) + .set("phone",powerStationDto.getPhone()) + .set("introduction",powerStationDto.getIntroduction()); + return powerStationMapper.update(null,updateWrapper)>0?true:false; + } + +} diff --git a/bolt-core/src/main/java/com/jiluo/bolt/service/impl/ProductServiceImpl.java b/bolt-core/src/main/java/com/jiluo/bolt/service/impl/ProductServiceImpl.java new file mode 100644 index 0000000..8690bc8 --- /dev/null +++ b/bolt-core/src/main/java/com/jiluo/bolt/service/impl/ProductServiceImpl.java @@ -0,0 +1,21 @@ +package com.jiluo.bolt.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.jiluo.bolt.mapper.ProductMapper; +import com.jiluo.bolt.entity.po.Product; +import com.jiluo.bolt.service.ProductService; +import org.springframework.stereotype.Service; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * 检测类型表(Product)表服务实现类 + * @author Fangy + * @date 2023-05-05 10:10:12 + */ +@Service +public class ProductServiceImpl extends ServiceImpl implements ProductService { + /** logger:日志文件 */ + private static final Logger logger = LoggerFactory.getLogger(ProductServiceImpl.class); + +} diff --git a/bolt-core/src/main/java/com/jiluo/bolt/service/impl/RoleItemServiceImpl.java b/bolt-core/src/main/java/com/jiluo/bolt/service/impl/RoleItemServiceImpl.java new file mode 100644 index 0000000..4bdf8eb --- /dev/null +++ b/bolt-core/src/main/java/com/jiluo/bolt/service/impl/RoleItemServiceImpl.java @@ -0,0 +1,53 @@ +package com.jiluo.bolt.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.jiluo.bolt.entity.po.RoleItem; +import com.jiluo.bolt.mapper.RoleItemMapper; +import com.jiluo.bolt.service.RoleItemService; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import javax.annotation.PostConstruct; +import java.util.ArrayList; +import java.util.List; +import java.util.stream.Collectors; + +/** + * 权限信息表(RoleItem)表服务实现类 + * @author Fangy + * @date 2023-05-05 10:10:12 + */ +@Service +public class RoleItemServiceImpl extends ServiceImpl implements RoleItemService { + /** logger:日志文件 */ + private static final Logger logger = LoggerFactory.getLogger(RoleItemServiceImpl.class); + + private List roleItemList = new ArrayList<>(); + + @Autowired + RoleItemMapper roleItemMapper; + + + @PostConstruct + private void init(){ + QueryWrapper queryWrapper = new QueryWrapper<>(); + roleItemList = roleItemMapper.selectList(queryWrapper); + } + + + public RoleItem getByBizId(String itemId){ + return roleItemList.stream().filter(x -> StringUtils.equalsIgnoreCase(x.getBizId(), itemId)).findFirst().orElse(null); + } + + public List getByBizId(List itemIds){ + return roleItemList.stream().filter(x -> itemIds.stream().anyMatch(_itemId -> StringUtils.equalsIgnoreCase(x.getBizId(), _itemId))).collect(Collectors.toList()); + } + + public List getAll(){ + return roleItemList; + } +} diff --git a/bolt-core/src/main/java/com/jiluo/bolt/service/impl/RoleServiceImpl.java b/bolt-core/src/main/java/com/jiluo/bolt/service/impl/RoleServiceImpl.java new file mode 100644 index 0000000..400ebd4 --- /dev/null +++ b/bolt-core/src/main/java/com/jiluo/bolt/service/impl/RoleServiceImpl.java @@ -0,0 +1,62 @@ +package com.jiluo.bolt.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.jiluo.bolt.entity.dto.RoleDto; +import com.jiluo.bolt.mapper.RoleMapper; +import com.jiluo.bolt.entity.po.Role; +import com.jiluo.bolt.service.RoleService; +import com.jiluo.bolt.util.SnowFlakeUtil; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.List; + +/** + * 角色信息表(Role)表服务实现类 + * @author Fangy + * @date 2023-05-05 18:59:16 + */ +@Service +public class RoleServiceImpl extends ServiceImpl implements RoleService { + /** logger:日志文件 */ + private static final Logger logger = LoggerFactory.getLogger(RoleServiceImpl.class); + + @Autowired + RoleMapper roleMapper; + + public Role getByRoleId(String roleId){ + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("role_id",roleId); + return roleMapper.selectOne(queryWrapper); + } + + @Override + public List select(RoleDto roleDto) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq(StringUtils.isNotBlank(roleDto.getRoleId()),"role_id",roleDto.getRoleId()) + .like(StringUtils.isNotBlank(roleDto.getRoleName()),"role_name",roleDto.getRoleName()); + return roleMapper.selectList(queryWrapper); + } + + @Override + public String add(RoleDto roleDto) { + Role role = new Role(); + role.setRoleId("role_"+ SnowFlakeUtil.getDefaultSnowFlakeId()) + .setRoleName(roleDto.getRoleName()); + roleMapper.insert(role); + return role.getRoleId(); + } + + @Override + public Boolean updateByBizId(RoleDto roleDto) { + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.eq("role_id",roleDto.getRoleId()) + .set("role_name",roleDto.getRoleName()); + return roleMapper.update(null,updateWrapper)>0?true:false; + } +} diff --git a/bolt-core/src/main/java/com/jiluo/bolt/service/impl/RoleValueServiceImpl.java b/bolt-core/src/main/java/com/jiluo/bolt/service/impl/RoleValueServiceImpl.java new file mode 100644 index 0000000..0a53f98 --- /dev/null +++ b/bolt-core/src/main/java/com/jiluo/bolt/service/impl/RoleValueServiceImpl.java @@ -0,0 +1,64 @@ +package com.jiluo.bolt.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +import com.baomidou.mybatisplus.extension.api.R; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.jiluo.bolt.entity.dto.PermissionDto; +import com.jiluo.bolt.entity.po.RoleValue; +import com.jiluo.bolt.mapper.RoleValueMapper; +import com.jiluo.bolt.service.RoleValueService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.List; + +/** + * 角色信息表(Role)表服务实现类 + * @author Fangy + * @date 2023-05-05 10:10:12 + */ +@Service +public class RoleValueServiceImpl extends ServiceImpl implements RoleValueService { + /** logger:日志文件 */ + private static final Logger logger = LoggerFactory.getLogger(RoleValueServiceImpl.class); + + @Autowired + RoleValueMapper roleValueMapper; + + public List getByRoleId(String roleId){ + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("role_id",roleId); + return roleValueMapper.selectList(queryWrapper); + } + + public RoleValue getProduct(String roleId){ + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("role_id",roleId) + .eq("item_id","detect_pole"); + return roleValueMapper.selectOne(queryWrapper); + } + + @Override + public List select(PermissionDto permissionDto) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("role_id",permissionDto.getRoleId()); + return roleValueMapper.selectList(queryWrapper); + } + + @Override + public Boolean add(RoleValue roleValue) { + return roleValueMapper.insert(roleValue)>0?true:false; + } + + @Override + public Boolean updateByItemId(RoleValue roleValue) { + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.eq("role_id",roleValue.getRoleId()) + .eq("item_id",roleValue.getItemId()) + .set("item_value",roleValue.getItemValue()); + return roleValueMapper.update(null,updateWrapper)>0?true:false; + } +} diff --git a/bolt-core/src/main/java/com/jiluo/bolt/service/impl/UserServiceImpl.java b/bolt-core/src/main/java/com/jiluo/bolt/service/impl/UserServiceImpl.java new file mode 100644 index 0000000..7e88251 --- /dev/null +++ b/bolt-core/src/main/java/com/jiluo/bolt/service/impl/UserServiceImpl.java @@ -0,0 +1,65 @@ +package com.jiluo.bolt.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.jiluo.bolt.entity.dto.UserDto; +import com.jiluo.bolt.mapper.UserMapper; +import com.jiluo.bolt.entity.po.User; +import com.jiluo.bolt.service.UserService; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.List; + +/** + * 用户信息表(User)表服务实现类 + * @author Fangy + * @date 2023-05-05 10:10:12 + */ +@Service +public class UserServiceImpl extends ServiceImpl implements UserService { + /** logger:日志文件 */ + private static final Logger logger = LoggerFactory.getLogger(UserServiceImpl.class); + + @Autowired + private UserMapper userMapper; + + public User getByUid(String uid){ + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("biz_id",uid); + User user = userMapper.selectOne(queryWrapper); + return user; + } + + @Override + public List select(UserDto userDto) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq(StringUtils.isNotBlank(userDto.getRole()),"role",userDto.getRole()) + .like(StringUtils.isNotBlank(userDto.getUserName()),"user_name",userDto.getUserName()); + return userMapper.selectList(queryWrapper); + } + + @Override + public Boolean add(UserDto userDto) { + User user = new User(); + user.setBizId(userDto.getUid()) + .setUserName(userDto.getUserName()) + .setPassword(userDto.getPassword()) + .setRole(userDto.getRole()); + return userMapper.insert(user)>0?true:false; + } + + @Override + public Boolean updateByBizId(UserDto userDto) { + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.eq("id",userDto.getId()) + .set("biz_id",userDto.getUid()) + .set("user_name",userDto.getUserName()) + .set("password",userDto.getPassword()); + return userMapper.update(null,updateWrapper)>0?true:false; + } +} diff --git a/bolt-core/src/main/java/com/jiluo/bolt/service/impl/VersionServiceImpl.java b/bolt-core/src/main/java/com/jiluo/bolt/service/impl/VersionServiceImpl.java new file mode 100644 index 0000000..f243fc4 --- /dev/null +++ b/bolt-core/src/main/java/com/jiluo/bolt/service/impl/VersionServiceImpl.java @@ -0,0 +1,31 @@ +package com.jiluo.bolt.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.jiluo.bolt.mapper.VersionMapper; +import com.jiluo.bolt.entity.po.Version; +import com.jiluo.bolt.service.VersionService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * 版本信息表(Version)表服务实现类 + * @author Fangy + * @date 2023-05-05 10:10:12 + */ +@Service +public class VersionServiceImpl extends ServiceImpl implements VersionService { + /** logger:日志文件 */ + private static final Logger logger = LoggerFactory.getLogger(VersionServiceImpl.class); + + @Autowired + VersionMapper versionMapper; + + public Version select(){ + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("available",1); + return versionMapper.selectOne(queryWrapper); + } +} diff --git a/bolt-core/src/main/java/com/jiluo/bolt/util/AesEncryptUtil.java b/bolt-core/src/main/java/com/jiluo/bolt/util/AesEncryptUtil.java new file mode 100644 index 0000000..3dfeafc --- /dev/null +++ b/bolt-core/src/main/java/com/jiluo/bolt/util/AesEncryptUtil.java @@ -0,0 +1,259 @@ +package com.jiluo.bolt.util; + +/** + * Created with IntelliJ IDEA. + * + * @Author: fy + * @Date: 2023/08/03/10:05 + * @Description: + */ + +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.codec.binary.Base64; +import org.apache.commons.codec.binary.Hex; + +import javax.crypto.Cipher; +import javax.crypto.KeyGenerator; +import javax.crypto.SecretKey; +import javax.crypto.spec.SecretKeySpec; +import java.nio.charset.StandardCharsets; +import java.security.Key; +import java.security.NoSuchAlgorithmException; + +/** + * AES 加/解密工具类 + * 使用密钥时请使用 initKey() 方法来生成随机密钥 + * initKey 方法内部使用 java.crypto.KeyGenerator 密钥生成器来生成特定于 AES 算法参数集的随机密钥 + */ +@Slf4j +public class AesEncryptUtil { + + private AesEncryptUtil() { + } + + /** + * 密钥算法类型 + */ + public static final String KEY_ALGORITHM = "AES"; + + /** + * 密钥的默认位长度 + */ + public static final int DEFAULT_KEY_SIZE = 128; + + /** + * 加解密算法/工作模式/填充方式 + */ + private static final String ECB_PKCS_5_PADDING = "AES/ECB/PKCS5Padding"; + public static final String ECB_NO_PADDING = "AES/ECB/NoPadding"; + + public static String base64Encode(byte[] bytes) { + return Base64.encodeBase64String(bytes); + } + + public static byte[] base64Decode(String base64Code) { + return Base64.decodeBase64(base64Code); + } + + public static byte[] aesEncryptToBytes(String content, String hexAesKey) throws Exception { + return encrypt(content.getBytes(StandardCharsets.UTF_8), Hex.decodeHex(hexAesKey.toCharArray())); + } + + public static String aesEncrypt(String content, String hexAesKey) throws Exception { + return base64Encode(aesEncryptToBytes(content, hexAesKey)); + } + + public static String aesDecryptByBytes(byte[] encryptBytes, String hexAesKey) throws Exception { + byte[] decrypt = decrypt(encryptBytes, Hex.decodeHex(hexAesKey.toCharArray())); + return new String(decrypt, StandardCharsets.UTF_8); + } + + public static String aesDecrypt(String encryptStr, String hexAesKey) throws Exception { + return aesDecryptByBytes(base64Decode(encryptStr), hexAesKey); + } + + + /** + * 生成 Hex 格式默认长度的随机密钥 + * 字符串长度为 32,解二进制后为 16 个字节 + * + * @return String Hex 格式的随机密钥 + */ + public static String initHexKey() { + return Hex.encodeHexString(initKey()); + } + + /** + * 生成默认长度的随机密钥 + * 默认长度为 128 + * + * @return byte[] 二进制密钥 + */ + public static byte[] initKey() { + return initKey(DEFAULT_KEY_SIZE); + } + + /** + * 生成密钥 + * 128、192、256 可选 + * + * @param keySize 密钥长度 + * @return byte[] 二进制密钥 + */ + public static byte[] initKey(int keySize) { + // AES 要求密钥长度为 128 位、192 位或 256 位 + if (keySize != 128 && keySize != 192 && keySize != 256) { + throw new RuntimeException("error keySize: " + keySize); + } + // 实例化 + KeyGenerator keyGenerator; + try { + keyGenerator = KeyGenerator.getInstance(KEY_ALGORITHM); + } catch (NoSuchAlgorithmException e) { + throw new RuntimeException("no such algorithm exception: " + KEY_ALGORITHM, e); + } + keyGenerator.init(keySize); + // 生成秘密密钥 + SecretKey secretKey = keyGenerator.generateKey(); + // 获得密钥的二进制编码形式 + return secretKey.getEncoded(); + } + + /** + * 转换密钥 + * + * @param key 二进制密钥 + * @return Key 密钥 + */ + private static Key toKey(byte[] key) { + // 实例化 DES 密钥材料 + return new SecretKeySpec(key, KEY_ALGORITHM); + } + + /** + * 加密 + * + * @param data 待加密数据 + * @param key 密钥 + * @return byte[] 加密的数据 + */ + public static byte[] encrypt(byte[] data, byte[] key) { + return encrypt(data, key, ECB_PKCS_5_PADDING); + } + + /** + * 加密 + * + * @param data 待加密数据 + * @param key 密钥 + * @param cipherAlgorithm 算法/工作模式/填充模式 + * @return byte[] 加密的数据 + */ + public static byte[] encrypt(byte[] data, byte[] key, final String cipherAlgorithm) { + // 还原密钥 + Key k = toKey(key); + try { + Cipher cipher = Cipher.getInstance(cipherAlgorithm); + // 初始化,设置为加密模式 + cipher.init(Cipher.ENCRYPT_MODE, k); + + // 发现使用 NoPadding 时,使用 ZeroPadding 填充 + if (ECB_NO_PADDING.equals(cipherAlgorithm)) { + return cipher.doFinal(formatWithZeroPadding(data, cipher.getBlockSize())); + } + + // 执行操作 + return cipher.doFinal(data); + } catch (Exception e) { + throw new RuntimeException("AES encrypt error", e); + } + } + + /** + * 解密 + * + * @param data 待解密数据 + * @param key 密钥 + * @return byte[] 解密的数据 + */ + public static byte[] decrypt(byte[] data, byte[] key) { + return decrypt(data, key, ECB_PKCS_5_PADDING); + } + + /** + * 解密 + * + * @param data 待解密数据 + * @param key 密钥 + * @param cipherAlgorithm 算法/工作模式/填充模式 + * @return byte[] 解密的数据 + */ + public static byte[] decrypt(byte[] data, byte[] key, final String cipherAlgorithm) { + // 还原密钥 + Key k = toKey(key); + try { + Cipher cipher = Cipher.getInstance(cipherAlgorithm); + // 初始化,设置为解密模式 + cipher.init(Cipher.DECRYPT_MODE, k); + + // 发现使用 NoPadding 时,使用 ZeroPadding 填充 + if (ECB_NO_PADDING.equals(cipherAlgorithm)) { + return removeZeroPadding(cipher.doFinal(data), cipher.getBlockSize()); + } + + // 执行操作 + return cipher.doFinal(data); + } catch (Exception e) { + throw new RuntimeException("AES decrypt error", e); + } + } + + private static byte[] formatWithZeroPadding(byte[] data, final int blockSize) { + final int length = data.length; + final int remainLength = length % blockSize; + + if (remainLength > 0) { + byte[] inputData = new byte[length + blockSize - remainLength]; + System.arraycopy(data, 0, inputData, 0, length); + return inputData; + } + return data; + } + + private static byte[] removeZeroPadding(byte[] data, final int blockSize) { + final int length = data.length; + final int remainLength = length % blockSize; + if (remainLength == 0) { + // 解码后的数据正好是块大小的整数倍,说明可能存在补 0 的情况,去掉末尾所有的 0 + int i = length - 1; + while (i >= 0 && 0 == data[i]) { + i--; + } + byte[] outputData = new byte[i + 1]; + System.arraycopy(data, 0, outputData, 0, outputData.length); + return outputData; + } + return data; + } + +// public static void main(String[] args) throws Exception { +// +// byte[] bytes = AesEncryptUtil.initKey(); +// +// // 使用密钥生成器 KeyGenerator 生成的 16 字节随机密钥的 hex 字符串,使用时解 hex 得到二进制密钥 +// String aesKey = Hex.encodeHexString(bytes); +// System.out.println(aesKey); +// +//// String aesKey = "dbf13279f5bc85b038cbc9ee21dfbc03"; +// +// String content = "123456"; +// System.out.println("加密前:" + content); +// +// String encrypt = aesEncrypt(content, aesKey); +// System.out.println(encrypt.length() + ":加密后:" + encrypt); +// +// String decrypt = aesDecrypt(encrypt, aesKey); +// System.out.println("解密后:" + decrypt); +// } + +} diff --git a/bolt-core/src/main/java/com/jiluo/bolt/util/BigDecimalUtils.java b/bolt-core/src/main/java/com/jiluo/bolt/util/BigDecimalUtils.java new file mode 100644 index 0000000..082d155 --- /dev/null +++ b/bolt-core/src/main/java/com/jiluo/bolt/util/BigDecimalUtils.java @@ -0,0 +1,24 @@ +package com.jiluo.bolt.util; + +import com.jiluo.bolt.common.DefectType; + +import java.math.BigDecimal; +import java.math.RoundingMode; + +/** + * Created with IntelliJ IDEA. + * + * @Author: fy + * @Date: 2023/10/25/13:58 + * @Description: + */ +public class BigDecimalUtils { + public static BigDecimal DBToFront(DefectType _type, Integer value){ + return (_type == DefectType.bolt || _type == DefectType.temperature) ? BigDecimal.valueOf(value / 100.0).setScale(2, RoundingMode.HALF_UP) : (_type == DefectType.line ? BigDecimal.valueOf(value / 1000.0).setScale(3, RoundingMode.HALF_UP) : BigDecimal.valueOf(value)); + } + + public static BigDecimal FrontToDB(DefectType _type, Float value){ + return (_type == DefectType.bolt || _type == DefectType.temperature) ? BigDecimal.valueOf(value * 100).setScale(0, RoundingMode.HALF_UP) : + (_type == DefectType.line) ? BigDecimal.valueOf(value * 1000).setScale(0, RoundingMode.HALF_UP) : BigDecimal.valueOf(value); + } +} diff --git a/bolt-core/src/main/java/com/jiluo/bolt/util/CSVUtils.java b/bolt-core/src/main/java/com/jiluo/bolt/util/CSVUtils.java new file mode 100644 index 0000000..0e03d47 --- /dev/null +++ b/bolt-core/src/main/java/com/jiluo/bolt/util/CSVUtils.java @@ -0,0 +1,66 @@ +package com.jiluo.bolt.util; + +import com.jiluo.bolt.common.DefectType; +import com.jiluo.bolt.entity.po.Defect; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; +import com.opencsv.CSVWriter; +import java.io.FileOutputStream; +import java.io.OutputStreamWriter; +import java.math.BigDecimal; +import java.math.RoundingMode; +import java.nio.charset.StandardCharsets; +import java.nio.file.Files; +import java.nio.file.Paths; +import java.text.SimpleDateFormat; +import java.util.List; +/** + * Created with IntelliJ IDEA. + * + * @Author: fy + * @Date: 2023/07/28/10:32 + * @Description:检测缺陷结果——生成CSV文件存储 + */ +@Slf4j +@Component +public class CSVUtils { + public void generateCSV(List defects, String folderPath, String fileName) { + SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + String filePath = folderPath + "/" + fileName + ".csv"; + try { + Files.createDirectories(Paths.get(folderPath)); + } catch (Exception e) { + log.error("[CSVUtils] generateCSV: 创建文件夹错误",e.getMessage(),e); + } + try (CSVWriter writer = new CSVWriter(new OutputStreamWriter(new FileOutputStream(filePath), StandardCharsets.UTF_8))) { + // 写入CSV文件的表头 + writer.writeNext(new String[] {"创建时间", "修改时间", "缺陷编号", "电站", "机组", "检测点", "任务编号", "设备", "检测类型", "磁极编号", "螺栓编号", "检测数值", "图片", "是否告警:0-否,1-是", "状态:0-有效 1-无效,2-已处理"}); + // 写入每个Defect对象的数据 + for (Defect defect : defects) { + BigDecimal value = (defect.getType().equals(DefectType.bolt.name()) || defect.getType().equals(DefectType.temperature.name())) ? BigDecimal.valueOf(defect.getValue() / 100.0).setScale(2, RoundingMode.HALF_UP) : (defect.getType().equals(DefectType.line.name()) ? BigDecimal.valueOf(defect.getValue() / 1000.0).setScale(3, RoundingMode.HALF_UP) : BigDecimal.valueOf(defect.getValue())); + writer.writeNext(new String[] { + formatter.format(defect.getGmtCreate()), + formatter.format(defect.getGmtModify()), + defect.getBizId(), + defect.getPowerStation(), + defect.getMotorGroup(), + defect.getPoint(), + defect.getJob(), + defect.getDevice(), + defect.getType(), + defect.getZone().toString(), + defect.getPosition().toString(), + value.toString(), + defect.getData(), + defect.getAlarm().toString(), + defect.getStatus().toString() + }); + } + writer.flush(); + } catch (Exception e) { + log.error("[CSVUtils] generateCSV:写入CSV文件错误",e.getMessage(),e); + } + } + + +} diff --git a/bolt-core/src/main/java/com/jiluo/bolt/util/DogUtil.java b/bolt-core/src/main/java/com/jiluo/bolt/util/DogUtil.java new file mode 100644 index 0000000..8d11a65 --- /dev/null +++ b/bolt-core/src/main/java/com/jiluo/bolt/util/DogUtil.java @@ -0,0 +1,984 @@ +package com.jiluo.bolt.util; + +import com.jiluo.bolt.Aladdin.Hasp; +import com.jiluo.bolt.Aladdin.HaspTime; +import com.jiluo.bolt.Aladdin.HaspStatus; +import com.jiluo.bolt.Aladdin.HaspApiVersion; +import lombok.extern.slf4j.Slf4j; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.io.UnsupportedEncodingException; + +/** + * Created with IntelliJ IDEA. + * + * @Author: fy + * @Date: 2023/10/18/10:40 + * @Description: + */ +@Slf4j +public class DogUtil { + +// //开发商代码,通过软件用主锁导入API之后在Sentinel LDK\VendorCodes目录下可以找到 +// public static final String vendorCode = new String( +// "AzIceaqfA1hX5wS+M8cGnYh5ceevUnOZIzJBbXFD6dgf3tBkb9cvUF/Tkd/iKu2fsg9wAysYKw7RMA" + +// "sVvIp4KcXle/v1RaXrLVnNBJ2H2DmrbUMOZbQUFXe698qmJsqNpLXRA367xpZ54i8kC5DTXwDhfxWT" + +// "OZrBrh5sRKHcoVLumztIQjgWh37AzmSd1bLOfUGI0xjAL9zJWO3fRaeB0NS2KlmoKaVT5Y04zZEc06" + +// "waU2r6AU2Dc4uipJqJmObqKM+tfNKAS0rZr5IudRiC7pUwnmtaHRe5fgSI8M7yvypvm+13Wm4Gwd4V" + +// "nYiZvSxf8ImN3ZOG9wEzfyMIlH2+rKPUVHI+igsqla0Wd9m7ZUR9vFotj1uYV0OzG7hX0+huN2E/Id" + +// "gLDjbiapj1e2fKHrMmGFaIvI6xzzJIQJF9GiRZ7+0jNFLKSyzX/K3JAyFrIPObfwM+y+zAgE1sWcZ1" + +// "YnuBhICyRHBhaJDKIZL8MywrEfB2yF+R3k9wFG1oN48gSLyfrfEKuB/qgNp+BeTruWUk0AwRE9XVMU" + +// "uRbjpxa4YA67SKunFEgFGgUfHBeHJTivvUl0u4Dki1UKAT973P+nXy2O0u239If/kRpNUVhMg8kpk7" + +// "s8i6Arp7l/705/bLCx4kN5hHHSXIqkiG9tHdeNV8VYo5+72hgaCx3/uVoVLmtvxbOIvo120uTJbuLV" + +// "TvT8KtsOlb3DxwUrwLzaEMoAQAFk6Q9bNipHxfkRQER4kR7IYTMzSoW5mxh3H9O8Ge5BqVeYMEW36q" + +// "9wnOYfxOLNw6yQMf8f9sJN4KhZty02xm707S7VEfJJ1KNq7b5pP/3RjE0IKtB2gE6vAPRvRLzEohu0" + +// "m7q1aUp8wAvSiqjZy7FLaTtLEApXYvLvz6PEJdj4TegCZugj7c8bIOEqLXmloZ6EgVnjQ7/ttys7VF" + +// "ITB3mazzFiyQuKf4J6+b/a/Y"); +// +// public static final int DEMO_MEMBUFFER_SIZE = 128; +// +// //登录加密狗(一般用此函数查找加密狗) +// public int login() +// { +// +// int status; +// +// Hasp hasp = new Hasp(Hasp.HASP_DEFAULT_FID); +// hasp.login(vendorCode); +// +// //获取返回值,HASP_STATUS_OK代表成功找到加密狗,值为0 +// status = hasp.getLastError(); +// +// switch (status) { +// case HaspStatus.HASP_STATUS_OK: +// log.info("OK"); +// break; +// case HaspStatus.HASP_FEATURE_NOT_FOUND: +// log.info("no Sentinel DEMOMA key found"); +// break; +// case HaspStatus.HASP_HASP_NOT_FOUND: +// log.info("Sentinel key not found"); +// break; +// case HaspStatus.HASP_OLD_DRIVER: +// log.info("outdated driver version or no driver installed"); +// break; +// case HaspStatus.HASP_NO_DRIVER: +// log.info("Sentinel key not found"); +// break; +// case HaspStatus.HASP_INV_VCODE: +// log.info("invalid vendor code"); +// break; +// default: +// log.info("login to default feature failed"); +// } +// +// return status; +// } +// +// //写入 +// public int write(String str) +// { +// +// int status; +// int fsize = 0; +// int i; +// +// Hasp hasp = new Hasp(Hasp.HASP_DEFAULT_FID); +// +// //先获取空间大小 +// fsize = getSize(); +// +// //String转换成byte[] +// byte[] membuffer = str.getBytes(); +// +//// log.info("\nincrementing every byte in memory buffer"); +//// for (i = 0; i < fsize; i++) membuffer[i]++; +// +// log.info("\nwriting " + fsize + " bytes to memory : "); +// +// hasp.write(Hasp.HASP_FILEID_RW, 0, membuffer); +// status = hasp.getLastError(); +// +// switch (status) { +// case HaspStatus.HASP_STATUS_OK: +// log.info("OK"); +// break; +// case HaspStatus.HASP_INV_HND: +// log.info("handle not active"); +// break; +// case HaspStatus.HASP_INV_FILEID: +// log.info("invalid file id"); +// break; +// case HaspStatus.HASP_MEM_RANGE: +// log.info("beyond memory range of attached Sentinel key"); +// break; +// case HaspStatus.HASP_HASP_NOT_FOUND: +// log.info("Sentinel key not found"); +// break; +// default: +// log.info("write memory failed"); +// } +// return status; +// } +// +// //读取 +// public String read() +// { +// int status = -1; +// int fsize = 0; +// +// Hasp hasp = new Hasp(Hasp.HASP_DEFAULT_FID); +// +// //准备一个byte数组用来存读取到的数据 +// byte[] membuffer = new byte[DEMO_MEMBUFFER_SIZE]; +// +// fsize = getSize(); +// +// if (fsize != 0) { +// if (fsize > DEMO_MEMBUFFER_SIZE) fsize = DEMO_MEMBUFFER_SIZE; +// +// log.info("\nreading " + fsize + " bytes from memory : "); +// +// +// hasp.read(Hasp.HASP_FILEID_RW, 0, membuffer); +// status = hasp.getLastError(); +// +// switch (status) { +// case HaspStatus.HASP_STATUS_OK: +// log.info("OK"); +// dump(membuffer, " "); +// break; +// case HaspStatus.HASP_INV_HND: +// log.info("handle not active"); +// break; +// case HaspStatus.HASP_INV_FILEID: +// log.info("invalid file id"); +// break; +// case HaspStatus.HASP_MEM_RANGE: +// log.info("beyond memory range of attached Sentinel key"); +// break; +// case HaspStatus.HASP_HASP_NOT_FOUND: +// log.info("hasp not found"); +// break; +// default: +// log.info("read memory failed\n"); +// } +// } +// String content = byteToString(membuffer); +// //String content = new String(membuffer); +// return content; +// } +// +// //byte[]转String +// private String byteToString(byte[] bytes) { +// if (null == bytes || bytes.length == 0) { +// return ""; +// } +// String strContent = ""; +// try { +// strContent = new String(bytes, "utf-8"); +// } catch (UnsupportedEncodingException e) { +// e.printStackTrace(); +// } +// return strContent; +// } +// +// //获取空间大小 +// public int getSize() +// { +// +// int status; +// int fsize = 0; +// +// if(login()==0) +// return 0; +// Hasp hasp = new Hasp(Hasp.HASP_DEFAULT_FID); +// +// log.info("\nretrieving the key's memory size : "); +// +// fsize = hasp.getSize(Hasp.HASP_FILEID_RW); +// status = hasp.getLastError(); +// +// switch (status) { +// case HaspStatus.HASP_STATUS_OK: +// log.info("memory size is " + fsize + " bytes"); +// break; +// case HaspStatus.HASP_INV_HND: +// log.info("handle not active"); +// break; +// case HaspStatus.HASP_INV_FILEID: +// log.info("invalid file id"); +// break; +// case HaspStatus.HASP_HASP_NOT_FOUND: +// log.info("Sentinel key not found"); +// break; +// default: +// log.info("could not retrieve memory size"); +// } +// +// +// +// return fsize; +// } +// +// +// /************************************************************************ +// * +// * helper function: dumps a given block of data, in hex and ascii +// */ +// +// /* +// * Converts a byte to hex digit and writes to the supplied buffer +// */ +// private static void byte2hex(byte b, StringBuffer buf) +// { +// char[] hexChars = { '0', '1', '2', '3', '4', '5', '6', '7', '8', +// '9', 'A', 'B', 'C', 'D', 'E', 'F' }; +// int high = ((b & 0xf0) >> 4); +// int low = (b & 0x0f); +// buf.append(hexChars[high]); +// buf.append(hexChars[low]); +// } +// +// +// /* +// * Converts a byte array to hex string +// */ +// private static String toHexString(byte[] block) +// { +// StringBuffer buf = new StringBuffer(); +// +// int len = block.length; +// +// for (int i = 0; i < len; i++) { +// byte2hex(block[i], buf); +// if (i < len - 1) { +// buf.append(":"); +// } +// } +// return buf.toString(); +// } +// +// public static void dump(byte[] data, String margin) +// { +// int i, j; +// byte b; +// byte[] s = new byte[16]; +// byte hex[] = {0}; +// String shex; +// String PrtString; +// +// if (data.length == 0) return; +// +// s[0] = 0; +// j = 0; +// for (i = 0; i < data.length; i++) { +// if (j == 0) log.info(margin); +// b = data[i]; +// if ((b < 32) || (b > 127)) s[j] = '.'; else s[j] = b; +// if (j < 15) +// s[j+1] = 0; +// hex[0] = b; shex = toHexString(hex); +// log.info(shex + " "); +// j++; +// if (((j & 3) == 0) && (j < 15)) log.info("| "); +// PrtString = new String(s); +// if (j > 15) { +// log.info("[" + PrtString + "]"); +// j = 0; +// s[0] = 0; +// } +// } +// if (j != 0) { +// while (j < 16) { +// log.info(" "); +// j++; +// if (((j & 3) == 0) && (j < 15)) log.info("| "); +// } +// PrtString = new String(s); +// log.info(" [" + PrtString + "]"); +// } +// } + + public static final int DEMO_MEMBUFFER_SIZE = 128; + + public static final String vendorCode = new String( + "AzIceaqfA1hX5wS+M8cGnYh5ceevUnOZIzJBbXFD6dgf3tBkb9cvUF/Tkd/iKu2fsg9wAysYKw7RMA" + + "sVvIp4KcXle/v1RaXrLVnNBJ2H2DmrbUMOZbQUFXe698qmJsqNpLXRA367xpZ54i8kC5DTXwDhfxWT" + + "OZrBrh5sRKHcoVLumztIQjgWh37AzmSd1bLOfUGI0xjAL9zJWO3fRaeB0NS2KlmoKaVT5Y04zZEc06" + + "waU2r6AU2Dc4uipJqJmObqKM+tfNKAS0rZr5IudRiC7pUwnmtaHRe5fgSI8M7yvypvm+13Wm4Gwd4V" + + "nYiZvSxf8ImN3ZOG9wEzfyMIlH2+rKPUVHI+igsqla0Wd9m7ZUR9vFotj1uYV0OzG7hX0+huN2E/Id" + + "gLDjbiapj1e2fKHrMmGFaIvI6xzzJIQJF9GiRZ7+0jNFLKSyzX/K3JAyFrIPObfwM+y+zAgE1sWcZ1" + + "YnuBhICyRHBhaJDKIZL8MywrEfB2yF+R3k9wFG1oN48gSLyfrfEKuB/qgNp+BeTruWUk0AwRE9XVMU" + + "uRbjpxa4YA67SKunFEgFGgUfHBeHJTivvUl0u4Dki1UKAT973P+nXy2O0u239If/kRpNUVhMg8kpk7" + + "s8i6Arp7l/705/bLCx4kN5hHHSXIqkiG9tHdeNV8VYo5+72hgaCx3/uVoVLmtvxbOIvo120uTJbuLV" + + "TvT8KtsOlb3DxwUrwLzaEMoAQAFk6Q9bNipHxfkRQER4kR7IYTMzSoW5mxh3H9O8Ge5BqVeYMEW36q" + + "9wnOYfxOLNw6yQMf8f9sJN4KhZty02xm707S7VEfJJ1KNq7b5pP/3RjE0IKtB2gE6vAPRvRLzEohu0" + + "m7q1aUp8wAvSiqjZy7FLaTtLEApXYvLvz6PEJdj4TegCZugj7c8bIOEqLXmloZ6EgVnjQ7/ttys7VF" + + "ITB3mazzFiyQuKf4J6+b/a/Y"); + + public static final String scope = new String( + "\n" + + " \n" + + "\n"); + + public static final String scope1 = new String( + "\n"); + + public static final String view = new String( + "\n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + "\n"); + + public static final byte[] data = { 0x74, 0x65, 0x73, 0x74, 0x20, 0x73, 0x74, 0x72, + 0x69, 0x6e, 0x67, 0x20, 0x31, 0x32, 0x33, 0x00 }; + private static HaspTime datetime; + + /************************************************************************ + * + * helper function: dumps a given block of data, in hex and ascii + */ + + /* + * Converts a byte to hex digit and writes to the supplied buffer + */ + private static void byte2hex(byte b, StringBuffer buf) + { + char[] hexChars = { '0', '1', '2', '3', '4', '5', '6', '7', '8', + '9', 'A', 'B', 'C', 'D', 'E', 'F' }; + int high = ((b & 0xf0) >> 4); + int low = (b & 0x0f); + buf.append(hexChars[high]); + buf.append(hexChars[low]); + } + + /* + * Converts a byte array to hex string + */ + private static String toHexString(byte[] block) + { + StringBuffer buf = new StringBuffer(); + + int len = block.length; + + for (int i = 0; i < len; i++) { + byte2hex(block[i], buf); + if (i < len - 1) { + buf.append(":"); + } + } + return buf.toString(); + } + + public static void dump(byte[] data, String margin) + { + int i, j; + byte b; + byte[] s = new byte[16]; + byte hex[] = {0}; + String shex; + String PrtString; + + if (data.length == 0) return; + + s[0] = 0; + j = 0; + for (i = 0; i < data.length; i++) { + if (j == 0) log.info(margin); + b = data[i]; + if ((b < 32) || (b > 127)) s[j] = '.'; else s[j] = b; + if (j < 15) + s[j+1] = 0; + hex[0] = b; shex = toHexString(hex); + log.info(shex + " "); + j++; + if (((j & 3) == 0) && (j < 15)) log.info("| "); + PrtString = new String(s); + if (j > 15) { + log.info("[" + PrtString + "]"); + j = 0; + s[0] = 0; + } + } + if (j != 0) { + while (j < 16) { + log.info(" "); + j++; + if (((j & 3) == 0) && (j < 15)) log.info("| "); + } + PrtString = new String(s); + log.info(" [" + PrtString + "]"); + } + } + + public static void check() + { + int status; + String infos; + int i; + int fsize; + byte c; + int input = 0; + InputStreamReader reader = new InputStreamReader(System.in); + BufferedReader in = new BufferedReader(reader); + + Hasp hasp = new Hasp(Hasp.HASP_DEFAULT_FID); + + log.info("\nThis is a simple demo program for the Sentinel LDK licensing functions\n"); + log.info("Copyright (C) THALES. All rights reserved.\n\n"); + + HaspApiVersion version = hasp.getVersion(vendorCode); + status = version.getLastError(); + + switch (status) { + case HaspStatus.HASP_STATUS_OK: + break; + case HaspStatus.HASP_NO_API_DYLIB: + log.info("Sentinel API dynamic library not found"); + return; + case HaspStatus.HASP_INV_API_DYLIB: + log.info("Sentinel API dynamic library is corrupt"); + return; + default: + log.info("unexpected error"); + } + + log.info("API Version: " + version.majorVersion() + "." + + version.minorVersion() + + "." + version.buildNumber() + "\n"); + + /********************************************************************** + * hasp_login + * establish a context for Sentinel services + */ + + log.info("login to default feature : "); + + /* login feature 0 */ + /* this default feature is available on any key */ + /* search for local and remote Sentinel key */ + hasp.login(vendorCode); + status = hasp.getLastError(); + + switch (status) { + case HaspStatus.HASP_STATUS_OK: + log.info("OK"); + break; + case HaspStatus.HASP_FEATURE_NOT_FOUND: + log.info("no Sentinel DEMOMA key found"); + break; + case HaspStatus.HASP_HASP_NOT_FOUND: + log.info("Sentinel key not found"); + break; + case HaspStatus.HASP_OLD_DRIVER: + log.info("outdated driver version or no driver installed"); + break; + case HaspStatus.HASP_NO_DRIVER: + log.info("Sentinel key not found"); + break; + case HaspStatus.HASP_INV_VCODE: + log.info("invalid vendor code"); + break; + default: + log.info("login to default feature failed"); + } + + /******************************************************************** + * hasp_get_sessioninfo + * retrieve Sentinel key attributes + */ + + log.info("\nget session info : "); + + infos = hasp.getSessionInfo(Hasp.HASP_KEYINFO); + status = hasp.getLastError(); + + switch (status) { + case HaspStatus.HASP_STATUS_OK: + log.info("OK, Sentinel key attributes retrieved\n\n" + + "Key info:\n===============\n" + infos + + "\n===============\n"); + break; + case HaspStatus.HASP_INV_HND: + log.info("handle not active"); + break; + case HaspStatus.HASP_INV_FORMAT: + log.info("unrecognized format"); + break; + case HaspStatus.HASP_HASP_NOT_FOUND: + log.info("Sentinel key not found"); + break; + default: + log.info("hasp_get_sessioninfo failed"); + } + + /*******************************************************************/ + + log.info("\npress ENTER to continue"); + try { + input = in.read(); + } catch (IOException e) { + log.error(e.getMessage(),e); + } + + /******************************************************************** + * hasp_get_size + * retrieve the memory size of the Sentinel key + */ + + log.info("\nretrieving the key's memory size : "); + + fsize = hasp.getSize(Hasp.HASP_FILEID_RW); + status = hasp.getLastError(); + + switch (status) { + case HaspStatus.HASP_STATUS_OK: + log.info("memory size is " + fsize + " bytes"); + break; + case HaspStatus.HASP_INV_HND: + log.info("handle not active"); + break; + case HaspStatus.HASP_INV_FILEID: + log.info("invalid file id"); + break; + case HaspStatus.HASP_HASP_NOT_FOUND: + log.info("Sentinel key not found"); + break; + default: + log.info("could not retrieve memory size"); + } + + if (fsize != 0) { /* skip memory access if no memory available */ + + /****************************************************************** + * hasp_read + * read from memory + */ + + /* limit memory size to be used in this demo program */ + + if (fsize > DEMO_MEMBUFFER_SIZE) fsize = DEMO_MEMBUFFER_SIZE; + + log.info("\nreading " + fsize + " bytes from memory : "); + + byte[] membuffer = new byte[DEMO_MEMBUFFER_SIZE]; + + hasp.read(Hasp.HASP_FILEID_RW, 0, membuffer); + status = hasp.getLastError(); + + switch (status) { + case HaspStatus.HASP_STATUS_OK: + log.info("OK"); + dump(membuffer, " "); + break; + case HaspStatus.HASP_INV_HND: + log.info("handle not active"); + break; + case HaspStatus.HASP_INV_FILEID: + log.info("invalid file id"); + break; + case HaspStatus.HASP_MEM_RANGE: + log.info("beyond memory range of attached Sentinel key"); + break; + case HaspStatus.HASP_HASP_NOT_FOUND: + log.info("hasp not found"); + break; + default: + log.info("read memory failed\n"); + } + + /****************************************************************** + * hasp_write + * write to memory + */ + + log.info("\nincrementing every byte in memory buffer"); + for (i = 0; i < fsize; i++) membuffer[i]++; + + log.info("\nwriting " + fsize + " bytes to memory : "); + + hasp.write(Hasp.HASP_FILEID_RW, 0, membuffer); + status = hasp.getLastError(); + + switch (status) { + case HaspStatus.HASP_STATUS_OK: + log.info("OK"); + break; + case HaspStatus.HASP_INV_HND: + log.info("handle not active"); + break; + case HaspStatus.HASP_INV_FILEID: + log.info("invalid file id"); + break; + case HaspStatus.HASP_MEM_RANGE: + log.info("beyond memory range of attached Sentinel key"); + break; + case HaspStatus.HASP_HASP_NOT_FOUND: + log.info("Sentinel key not found"); + break; + default: + log.info("write memory failed"); + } + + /****************************************************************** + * hasp_read + * read from memory + */ + + log.info("\nreading "+fsize+" bytes from memory : "); + + hasp.read(Hasp.HASP_FILEID_RW, 0, membuffer); + + switch (status) { + case HaspStatus.HASP_STATUS_OK: + log.info("OK"); + dump(membuffer, " "); + break; + case HaspStatus.HASP_INV_HND: + log.info("handle not active\n"); + break; + case HaspStatus.HASP_INV_FILEID: + log.info("invalid file id"); + break; + case HaspStatus.HASP_MEM_RANGE: + log.info("beyond memory range of attached Sentinel key"); + break; + case HaspStatus.HASP_HASP_NOT_FOUND: + log.info("Sentinel key not found"); + break; + default: + log.info("read memory failed"); + } + } /* end of memory demo */ + + /********************************************************************** + * hasp_encrypt + * encrypts a block of data using the Sentinel key + * (minimum buffer size is 16 bytes) + */ + + log.info("\nencrypting a data buffer:"); + dump(data, " "); + + hasp.encrypt(data); + status = hasp.getLastError(); + + switch (status) { + case HaspStatus.HASP_STATUS_OK: + log.info("encryption ok:"); + dump(data, " "); + break; + case HaspStatus.HASP_INV_HND: + log.info("handle not active"); + break; + case HaspStatus.HASP_TOO_SHORT: + log.info("data length too short"); + break; + case HaspStatus.HASP_ENC_NOT_SUPP: + log.info("attached key does not support AES encryption"); + break; + case HaspStatus.HASP_FEATURE_NOT_FOUND: + log.info("Sentinel key not found"); + break; + default: + log.info("encryption failed"); + } + + /********************************************************************** + * hasp_decrypt + * decrypts a block of data using the Sentinel key + * (minimum buffer size is 16 bytes) + */ + + hasp.decrypt(data); + status = hasp.getLastError(); + + switch (status) { + case HaspStatus.HASP_STATUS_OK: + log.info("decryption ok:"); + dump(data, " "); + break; + case HaspStatus.HASP_INV_HND: + log.info("handle not active"); + break; + case HaspStatus.HASP_TOO_SHORT: + log.info("data length too short"); + break; + case HaspStatus.HASP_ENC_NOT_SUPP: + log.info("attached key does not support AES encryption"); + break; + case HaspStatus.HASP_FEATURE_NOT_FOUND: + log.info("key not found"); + break; + default: + log.info("decryption failed"); + } + + /**********************************************************************/ + + log.info("login to feature 42 : "); + + Hasp hasp1 = new Hasp(42); + + /* search for local and remote HASP key */ + hasp1.login(vendorCode); + status = hasp1.getLastError(); + + switch (status) { + case HaspStatus.HASP_STATUS_OK: + log.info("OK"); + break; + case HaspStatus.HASP_FEATURE_NOT_FOUND: + log.info("no Sentinel DEMOMA key found with feature 42 enabled"); + break; + case HaspStatus.HASP_HASP_NOT_FOUND: + log.info("Sentinel key not found"); + break; + case HaspStatus.HASP_OLD_DRIVER: + log.info("outdated driver version or no driver installed"); + break; + case HaspStatus.HASP_NO_DRIVER: + log.info("Sentinel key not found"); + break; + case HaspStatus.HASP_INV_VCODE: + log.info("invalid vendor code"); + break; + default: + log.info("login feature 42 failed"); + } + + log.info("\nencrypt/decrypt again to see different encryption for different features:"); + + /********************************************************************** + * hasp_encrypt + * encrypts a block of data using the Sentinel key + * (minimum buffer size is 16 bytes) + */ + + log.info("\nencrypting a data buffer:"); + dump(data, " "); + + hasp1.encrypt(data); + status = hasp1.getLastError(); + + switch (status) { + case HaspStatus.HASP_STATUS_OK: + log.info("encryption ok:"); + dump(data, " "); + break; + case HaspStatus.HASP_INV_HND: + log.info("handle not active"); + break; + case HaspStatus.HASP_TOO_SHORT: + log.info("data length too short"); + break; + case HaspStatus.HASP_ENC_NOT_SUPP: + log.info("attached key does not support AES encryption"); + break; + case HaspStatus.HASP_FEATURE_NOT_FOUND: + log.info("key not found"); + break; + default: + log.info("encryption failed"); + } + + /********************************************************************** + * hasp_decrypt + * decrypts a block of data using the Sentinel key + * (minimum buffer size is 16 bytes) + */ + + hasp1.decrypt(data); + status = hasp1.getLastError(); + + switch (status) { + case HaspStatus.HASP_STATUS_OK: + log.info("decryption ok:"); + dump(data, " "); + break; + case HaspStatus.HASP_INV_HND: + log.info("handle not active"); + break; + case HaspStatus.HASP_TOO_SHORT: + log.info("data length too short"); + break; + case HaspStatus.HASP_ENC_NOT_SUPP: + log.info("attached key does not support AES encryption"); + break; + case HaspStatus.HASP_FEATURE_NOT_FOUND: + log.info("key not found"); + break; + default: + log.info("decryption failed"); + } + + hasp1.logout(); + status = hasp1.getLastError(); + + switch (status) { + case HaspStatus.HASP_STATUS_OK: + log.info("OK"); + break; + case HaspStatus.HASP_INV_HND: + log.info("failed: handle not active"); + break; + default: + log.info("failed with status " + status); + } + + /********************************************************************** + * hasp_get_rtc + * read current time from Sentinel Time key + */ + + log.info("\nreading current time and date : "); + + datetime = hasp.getRealTimeClock(); + + status = hasp.getLastError(); + + switch (status) { + case HaspStatus.HASP_STATUS_OK: + log.info("time: " + datetime.getHour() + ":" + + datetime.getMinute() + ":" + datetime.getSecond() +" H:M:S"); + log.info(" date: " + + datetime.getDay() + "/" + datetime.getMonth() + "/" + + datetime.getYear() + " D/M/Y"); + break; + case HaspStatus.HASP_INV_TIME: + log.info("time value outside supported range\n"); + break; + case HaspStatus.HASP_INV_HND: + log.info("handle not active"); + break; + case HaspStatus.HASP_NO_TIME: + log.info("no Sentinel Time connected"); + break; + default: + log.info("could not read time from Sentinel key"); + } + + /********************************************************************** + * hasp_logout + * closes established session and releases allocated memory + */ + + log.info("\nlogout from feature 1 : "); + + hasp.logout(); + + status = hasp.getLastError(); + + switch (status) { + case HaspStatus.HASP_STATUS_OK: + log.info("OK"); + break; + case HaspStatus.HASP_INV_HND: + log.info("failed: handle not active"); + break; + default: + log.info("failed"); + } + + /******************************************************************** + * hasp_login_scope + * establishes a context for Sentinel services + * allows specification of several restrictions + */ + + hasp = new Hasp(Hasp.HASP_DEFAULT_FID); + + log.info("restricting the license to be used to 'local':"); + + log.info(scope); + + log.info("hasp_login_scope : "); + + hasp.loginScope(scope,vendorCode); + status = hasp.getLastError(); + + switch (status) { + case HaspStatus.HASP_STATUS_OK: + log.info("OK"); + break; + case HaspStatus.HASP_FEATURE_NOT_FOUND: + log.info("login to default feature failed"); + break; + case HaspStatus.HASP_HASP_NOT_FOUND: + log.info("Sentinel key not found"); + break; + case HaspStatus.HASP_OLD_DRIVER: + log.info("outdated driver version or no driver installed"); + break; + case HaspStatus.HASP_NO_DRIVER: + log.info("Sentinel key not found"); + break; + case HaspStatus.HASP_INV_VCODE: + log.info("invalid vendor code"); + break; + case HaspStatus.HASP_INV_SCOPE: + log.info("invalid XML scope"); + break; + default: + log.info("login to default feature failed with status " + status); + } + + /*******************************************************************/ + + log.info("\ngetting information about connected keys and usage: "); + + infos = hasp.getInfo(scope1, view, vendorCode); + status = hasp.getLastError(); + + switch (status) { + case HaspStatus.HASP_STATUS_OK: + /* use the info you received ... */ + log.info("OK\n" + infos); + break; + case HaspStatus.HASP_INV_FORMAT: + log.info("invalid XML info format\n"); + break; + case HaspStatus.HASP_INV_SCOPE: + log.info("invalid XML scope\n"); + break; + default: + log.info("hasp_get_info failed with status " + status); + } + + /******************************************************************** + * hasp_logout + * closes established session and releases allocated memory + */ + + log.info("\nlogout : "); + hasp.logout(); + status = hasp.getLastError(); + + switch (status) { + case HaspStatus.HASP_STATUS_OK: + log.info("OK"); + break; + case HaspStatus.HASP_INV_HND: + log.info("failed: handle not active"); + break; + default: + log.info("failed\n"); + } + } +} \ No newline at end of file diff --git a/bolt-core/src/main/java/com/jiluo/bolt/util/ExcelUtils.java b/bolt-core/src/main/java/com/jiluo/bolt/util/ExcelUtils.java new file mode 100644 index 0000000..74446b9 --- /dev/null +++ b/bolt-core/src/main/java/com/jiluo/bolt/util/ExcelUtils.java @@ -0,0 +1,72 @@ +package com.jiluo.bolt.util; + +import com.jiluo.bolt.common.DefectType; +import com.jiluo.bolt.entity.po.Defect; +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 java.io.IOException; +import java.io.OutputStream; +import java.math.BigDecimal; +import java.math.RoundingMode; +import java.util.List; +import java.util.stream.Collectors; + +/** + * Created with IntelliJ IDEA. + * + * @Author: fy + * @Date: 2023/08/08/16:18 + * @Description: + */ +public class ExcelUtils { + private static final String EXPORT_FILE_NAME = "转子视觉检测历史数据_%s.xlsx"; + public static String generateExcel(OutputStream outputStream, List defects) throws IOException { + + Workbook workbook = new XSSFWorkbook(); + Sheet sheet = workbook.createSheet("Sheet1"); + Row headerRow = sheet.createRow(0); + headerRow.createCell(0).setCellValue("创建时间"); + headerRow.createCell(1).setCellValue("修改时间"); + headerRow.createCell(2).setCellValue("缺陷编号"); + headerRow.createCell(3).setCellValue("电站"); + headerRow.createCell(4).setCellValue("机组"); + headerRow.createCell(5).setCellValue("检测点"); + headerRow.createCell(6).setCellValue("任务编号"); + headerRow.createCell(7).setCellValue("设备"); + headerRow.createCell(8).setCellValue("检测类型"); + headerRow.createCell(9).setCellValue("磁极编号"); + headerRow.createCell(10).setCellValue("螺栓编号"); + headerRow.createCell(11).setCellValue("检测数值"); + headerRow.createCell(12).setCellValue("图片"); + headerRow.createCell(13).setCellValue("是否告警:0-否,1-是"); + headerRow.createCell(14).setCellValue("状态:0-有效 1-无效,2-已处理"); + + int rowNum = 1; + for (Defect defect : defects) { + BigDecimal value = (defect.getType().equals(DefectType.bolt.name()) || defect.getType().equals(DefectType.temperature.name())) ? BigDecimal.valueOf(defect.getValue() / 100.0).setScale(2, RoundingMode.HALF_UP) : (defect.getType().equals(DefectType.line.name()) ? BigDecimal.valueOf(defect.getValue() / 1000.0).setScale(3, RoundingMode.HALF_UP) : BigDecimal.valueOf(defect.getValue())); + Row row = sheet.createRow(rowNum++); + row.createCell(0).setCellValue(SystemDateUtils.formatDate3(defect.getGmtCreate())); + row.createCell(1).setCellValue(SystemDateUtils.formatDate3(defect.getGmtModify())); + row.createCell(2).setCellValue(defect.getBizId()); + row.createCell(3).setCellValue(defect.getPowerStation()); + row.createCell(4).setCellValue(defect.getMotorGroup()); + row.createCell(5).setCellValue(defect.getPoint()); + row.createCell(6).setCellValue(defect.getJob()); + row.createCell(7).setCellValue(defect.getDevice()); + row.createCell(8).setCellValue(defect.getType()); + row.createCell(9).setCellValue(defect.getZone()); + row.createCell(10).setCellValue(defect.getPosition()); + row.createCell(11).setCellValue(value.toString()); + row.createCell(12).setCellValue(defect.getData()); + row.createCell(13).setCellValue(defect.getAlarm()); + row.createCell(14).setCellValue(defect.getStatus()); + } + + workbook.write(outputStream); + workbook.close(); + return String.format(EXPORT_FILE_NAME,SystemDateUtils.findMinMaxDate(defects.stream().map(Defect::getGmtCreate).collect(Collectors.toList()))); + } +} diff --git a/bolt-core/src/main/java/com/jiluo/bolt/util/FileUtils.java b/bolt-core/src/main/java/com/jiluo/bolt/util/FileUtils.java new file mode 100644 index 0000000..ca3b23a --- /dev/null +++ b/bolt-core/src/main/java/com/jiluo/bolt/util/FileUtils.java @@ -0,0 +1,60 @@ +package com.jiluo.bolt.util; + +import org.springframework.mock.web.MockMultipartFile; +import org.springframework.web.multipart.MultipartFile; + +import java.io.File; +import java.io.FileInputStream; +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; + +/** + * Created with IntelliJ IDEA. + * + * @Author: fy + * @Date: 2023/10/17/11:05 + * @Description: + */ +public class FileUtils { + + public static List convertFilesToList(String folderPath) throws IOException { + List fileList = new ArrayList<>(); + + File folder = new File(folderPath); + File[] files = folder.listFiles(); + if (files != null) { + for (File file : files) { + MultipartFile multipartFile = convertFileToMultipartFile(file); + if (multipartFile != null) { + fileList.add(multipartFile); + } + } + } + + return fileList; + } + + private static MultipartFile convertFileToMultipartFile(File file) throws IOException { + FileInputStream inputStream = new FileInputStream(file); + MultipartFile multipartFile = new MockMultipartFile( + file.getName(), // 文件名 + file.getName(), // 原始文件名 + getContentType(file.getName()), // 文件类型 + inputStream // 文件内容 + ); + inputStream.close(); + return multipartFile; + } + + private static String getContentType(String filename) { + // 根据文件名获取文件类型,可以根据需要进行扩展 + if (filename.endsWith(".jpg") || filename.endsWith(".jpeg")) { + return "image/jpeg"; + } else if (filename.endsWith(".png")) { + return "image/png"; + } + // 默认返回application/octet-stream + return "application/octet-stream"; + } +} diff --git a/bolt-core/src/main/java/com/jiluo/bolt/util/ImgUtils.java b/bolt-core/src/main/java/com/jiluo/bolt/util/ImgUtils.java new file mode 100644 index 0000000..39d48e6 --- /dev/null +++ b/bolt-core/src/main/java/com/jiluo/bolt/util/ImgUtils.java @@ -0,0 +1,84 @@ +package com.jiluo.bolt.util; + +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.codec.binary.Base64; +import org.apache.commons.io.IOUtils; +import org.apache.commons.lang3.StringUtils; +import org.springframework.stereotype.Component; +import org.springframework.util.ResourceUtils; + +import java.io.File; +import java.io.FileInputStream; + +/** + * Created with IntelliJ IDEA. + * + * @Author: fy + * @Date: 2023/08/01/10:19 + * @Description:图片转换 + */ +@Component +@Slf4j +public class ImgUtils { + + public static String ToBase64(String defect_work_dir, String jobId, String img) throws Exception { + String path = defect_work_dir + jobId + "/detect/" + img; + File file = ResourceUtils.getFile(path); + FileInputStream fileInputStream = new FileInputStream(file); + byte[] bytes = IOUtils.toByteArray(fileInputStream); + String encodeBase64 = Base64.encodeBase64String(bytes); + fileInputStream.close(); + return encodeBase64; + } + + public static byte[] ToBase64(String path) throws Exception { + long startTime = System.currentTimeMillis(); + + File file = ResourceUtils.getFile(path); + + long getFileTime = System.currentTimeMillis(); + log.info("getFile耗时:" + (getFileTime - startTime) + "毫秒"); + + FileInputStream fileInputStream = new FileInputStream(file); + + long createStreamTime = System.currentTimeMillis(); + log.info("createStream耗时:" + (createStreamTime - getFileTime) + "毫秒"); + + byte[] bytes = IOUtils.toByteArray(fileInputStream); + + long readBytesTime = System.currentTimeMillis(); + log.info("readBytes耗时:" + (readBytesTime - createStreamTime) + "毫秒"); + + fileInputStream.close(); + + long closeStreamTime = System.currentTimeMillis(); + log.info("closeStream耗时:" + (closeStreamTime - readBytesTime) + "毫秒"); + + long totalTime = System.currentTimeMillis() - startTime; + log.info("总耗时:" + totalTime + "毫秒"); + + return bytes; + } + + public String ToBase64Logo(String path, String fileName) throws Exception { + if (StringUtils.isBlank(path) || StringUtils.isBlank(fileName)) { + return null; + } + File file = ResourceUtils.getFile(path + fileName); + FileInputStream fileInputStream = new FileInputStream(file); + byte[] bytes = IOUtils.toByteArray(fileInputStream); + String encodeBase64 = Base64.encodeBase64String(bytes); + fileInputStream.close(); + return encodeBase64; + } + + public byte[] ToBytes(String path) throws Exception { + String dir = path; + File file = ResourceUtils.getFile(dir); + FileInputStream fileInputStream = new FileInputStream(file); + byte[] bytes = IOUtils.toByteArray(fileInputStream); + fileInputStream.close(); + return bytes; + } +} + diff --git a/bolt-core/src/main/java/com/jiluo/bolt/util/JwtUtils.java b/bolt-core/src/main/java/com/jiluo/bolt/util/JwtUtils.java new file mode 100644 index 0000000..c76155d --- /dev/null +++ b/bolt-core/src/main/java/com/jiluo/bolt/util/JwtUtils.java @@ -0,0 +1,61 @@ +package com.jiluo.bolt.util; + +import com.auth0.jwt.JWT; +import com.auth0.jwt.algorithms.Algorithm; +import com.auth0.jwt.interfaces.Claim; +import com.auth0.jwt.interfaces.DecodedJWT; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Component; + +import java.util.HashMap; +import java.util.Map; + + +/** + * Created with IntelliJ IDEA. + * + * @Author: fy + * @Date: 2023/04/24/16:27 + * @Description:生成token + */ +@Component +public class JwtUtils { + + @Value("${jwt.config.secretKey}") + private String secretKey; + /** + * 加密token. + */ + public String getToken(String uid,String sid, String clientVersion, String clientType) { + //这个是放到负载payLoad 里面,魔法值可以使用常量类进行封装. + String token = JWT + .create() + .withClaim("uid" ,uid) + .withClaim("sid",sid) + .withClaim("clientVersion", clientVersion) + .withClaim("clientType", clientType) + .withClaim("timeStamp", System.currentTimeMillis()) + .sign(Algorithm.HMAC256(secretKey)); + return token; + } + /** + * 解析token. + */ + public Map parseToken(String token) { + HashMap map = new HashMap(); + DecodedJWT decodedjwt = JWT.require(Algorithm.HMAC256(secretKey)) + .build().verify(token); + Claim uid = decodedjwt.getClaim("uid"); + Claim sid = decodedjwt.getClaim("sid"); + Claim clientVersion = decodedjwt.getClaim("clientVersion"); + Claim clientType = decodedjwt.getClaim("clientType"); + Claim timeStamp = decodedjwt.getClaim("timeStamp"); + + map.put("uid", uid.asString()); + map.put("sid", sid.asString()); + map.put("clientVersion", clientVersion.asString()); + map.put("clientType", clientType.asString()); + map.put("timeStamp", timeStamp.asLong().toString()); + return map; + } +} diff --git a/bolt-core/src/main/java/com/jiluo/bolt/util/MD5Utils.java b/bolt-core/src/main/java/com/jiluo/bolt/util/MD5Utils.java new file mode 100644 index 0000000..efa5b13 --- /dev/null +++ b/bolt-core/src/main/java/com/jiluo/bolt/util/MD5Utils.java @@ -0,0 +1,39 @@ +package com.jiluo.bolt.util; + +import org.springframework.stereotype.Component; +import org.springframework.util.DigestUtils; + +/** + * Created with IntelliJ IDEA. + * + * @Author: fy + * @Date: 2023/04/19/10:09 + * @Description:MD5密码加密 + */ +@Component +public class MD5Utils { + public static String md5(String src){ + return DigestUtils.md5DigestAsHex(src.getBytes()); + } + private static final String salt = "1a2b3c4d"; + + //第一次加密 + public static String inputPassToFormPass(String inputPass){ + //md5加密密码前,先对密码进行处理,按以下salt的规则处理密码 + String str = "" + salt.charAt(0) + salt.charAt(2) + inputPass + salt.charAt(5) + salt.charAt(4); + return md5(str); + } + + //第二次加密 + public static String formPassToDBPass(String formPass, String salt){ + String str = "" + salt.charAt(0) + salt.charAt(2) + formPass + salt.charAt(5) + salt.charAt(4); + return md5(str); + } + + //实际调用的方法,将第一次加密和第二次加密合并,结果应该一致 + public static String inputPassToDBPass(String inputPass, String salt){ + String formPass = inputPassToFormPass(inputPass); + String dbPass = formPassToDBPass(formPass, salt); + return dbPass; + } +} diff --git a/bolt-core/src/main/java/com/jiluo/bolt/util/MinioUtil.java b/bolt-core/src/main/java/com/jiluo/bolt/util/MinioUtil.java new file mode 100644 index 0000000..399f501 --- /dev/null +++ b/bolt-core/src/main/java/com/jiluo/bolt/util/MinioUtil.java @@ -0,0 +1,462 @@ +package com.jiluo.bolt.util; + +import io.minio.MinioClient; +import io.minio.ObjectStat; +import io.minio.PutObjectOptions; +import io.minio.Result; +import io.minio.errors.*; +import io.minio.messages.Bucket; +import io.minio.messages.DeleteError; +import io.minio.messages.Item; +import lombok.SneakyThrows; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import org.springframework.web.multipart.MultipartFile; + +import javax.servlet.ServletOutputStream; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.io.InputStream; +import java.nio.charset.StandardCharsets; +import java.security.InvalidKeyException; +import java.security.NoSuchAlgorithmException; +import java.util.ArrayList; +import java.util.List; + + +/** + * Created with IntelliJ IDEA. + * + * @Author: fy + * @Date: 2023/10/13/14:37 + * @Description: + */ +@Component +public class MinioUtil { + + @Autowired + private MinioClient minioClient; + + private static final int DEFAULT_EXPIRY_TIME = 7 * 24 * 3600; + + /** + * 检查存储桶是否存在 + * + * @param bucketName 存储桶名称 + * @return + */ + @SneakyThrows + public boolean bucketExists(String bucketName) { + boolean flag = false; + flag = minioClient.bucketExists(bucketName); + if (flag) { + return true; + } + return false; + } + + /** + * 创建存储桶 + * + * @param bucketName 存储桶名称 + */ + @SneakyThrows + public boolean makeBucket(String bucketName) { + boolean flag = bucketExists(bucketName); + if (!flag) { + minioClient.makeBucket(bucketName); + return true; + } else { + return false; + } + } + + /** + * 列出所有存储桶名称 + * + * @return + */ + @SneakyThrows + public List listBucketNames() { + List bucketList = listBuckets(); + List bucketListName = new ArrayList<>(); + for (Bucket bucket : bucketList) { + bucketListName.add(bucket.name()); + } + return bucketListName; + } + + /** + * 列出所有存储桶 + * + * @return + */ + @SneakyThrows + public List listBuckets() { + return minioClient.listBuckets(); + } + + /** + * 删除存储桶 + * + * @param bucketName 存储桶名称 + * @return + */ + @SneakyThrows + public boolean removeBucket(String bucketName) { + boolean flag = bucketExists(bucketName); + if (flag) { + Iterable> myObjects = listObjects(bucketName); + for (Result result : myObjects) { + Item item = result.get(); + // 有对象文件,则删除失败 + if (item.size() > 0) { + return false; + } + } + // 删除存储桶,注意,只有存储桶为空时才能删除成功。 + minioClient.removeBucket(bucketName); + flag = bucketExists(bucketName); + if (!flag) { + return true; + } + + } + return false; + } + + /** + * 列出存储桶中的所有对象名称 + * + * @param bucketName 存储桶名称 + * @return + */ + @SneakyThrows + public List listObjectNames(String bucketName) { + List listObjectNames = new ArrayList<>(); + boolean flag = bucketExists(bucketName); + if (flag) { + Iterable> myObjects = listObjects(bucketName); + for (Result result : myObjects) { + Item item = result.get(); + listObjectNames.add(item.objectName()); + } + } + return listObjectNames; + } + + /** + * 列出存储桶中的所有对象 + * + * @param bucketName 存储桶名称 + * @return + */ + @SneakyThrows + public Iterable> listObjects(String bucketName) { + boolean flag = bucketExists(bucketName); + if (flag) { + return minioClient.listObjects(bucketName); + } + return null; + } + + /** + * 通过文件上传到对象 + * + * @param bucketName 存储桶名称 + * @param objectName 存储桶里的对象名称 + * @param fileName File name + * @return + */ + @SneakyThrows + public boolean putObject(String bucketName, String objectName, String fileName) { + boolean flag = bucketExists(bucketName); + if (flag) { + minioClient.putObject(bucketName, objectName, fileName, null); + ObjectStat statObject = statObject(bucketName, objectName); + if (statObject != null && statObject.length() > 0) { + return true; + } + } + return false; + + } + + /** + * 文件上传 + * + * @param bucketName + * @param multipartFile + */ + @SneakyThrows + public void putObject(String bucketName, MultipartFile multipartFile, String filename) { + PutObjectOptions putObjectOptions = new PutObjectOptions(multipartFile.getSize(), PutObjectOptions.MIN_MULTIPART_SIZE); + putObjectOptions.setContentType(multipartFile.getContentType()); + InputStream inputStream = multipartFile.getInputStream(); + minioClient.putObject(bucketName, filename, inputStream, putObjectOptions); + inputStream.close(); + + } + + + /** + * 通过InputStream上传对象 + * + * @param bucketName 存储桶名称 + * @param objectName 存储桶里的对象名称 + * @param stream 要上传的流 + * @param stream 要上传的文件类型 MimeTypeUtils.IMAGE_JPEG_VALUE + * @return + */ + @SneakyThrows + public boolean putObject(String bucketName, String objectName, InputStream stream, String contentType) { + boolean flag = bucketExists(bucketName); + if (flag) { + PutObjectOptions putObjectOptions = new PutObjectOptions(stream.available(), -1); + /** + * 开启公共类功能设置setContentType + */ + if (StringUtils.isNotBlank(contentType)) { + putObjectOptions.setContentType(contentType); + } + minioClient.putObject(bucketName, objectName, stream, putObjectOptions); + ObjectStat statObject = statObject(bucketName, objectName); + if (statObject != null && statObject.length() > 0) { + return true; + } + } + return false; + } + + /** + * 以流的形式获取一个文件对象 + * + * @param bucketName 存储桶名称 + * @param objectName 存储桶里的对象名称 + * @return + */ + @SneakyThrows + public InputStream getObject(String bucketName, String objectName) { + boolean flag = bucketExists(bucketName); + if (flag) { + ObjectStat statObject = statObject(bucketName, objectName); + if (statObject != null && statObject.length() > 0) { + InputStream stream = minioClient.getObject(bucketName, objectName); + return stream; + } + } + return null; + } + + /** + * 以流的形式获取一个文件对象(断点下载) + * + * @param bucketName 存储桶名称 + * @param objectName 存储桶里的对象名称 + * @param offset 起始字节的位置 + * @param length 要读取的长度 (可选,如果无值则代表读到文件结尾) + * @return + */ + @SneakyThrows + public InputStream getObject(String bucketName, String objectName, long offset, Long length) { + boolean flag = bucketExists(bucketName); + if (flag) { + ObjectStat statObject = statObject(bucketName, objectName); + if (statObject != null && statObject.length() > 0) { + InputStream stream = minioClient.getObject(bucketName, objectName, offset, length); + return stream; + } + } + return null; + } + + /** + * 下载并将文件保存到本地 + * + * @param bucketName 存储桶名称 + * @param objectName 存储桶里的对象名称 + * @param fileName File name + * @return + */ + @SneakyThrows + public boolean getObject(String bucketName, String objectName, String fileName) { + boolean flag = bucketExists(bucketName); + if (flag) { + ObjectStat statObject = statObject(bucketName, objectName); + if (statObject != null && statObject.length() > 0) { + minioClient.getObject(bucketName, objectName, fileName); + return true; + } + } + return false; + } + + /** + * 删除一个对象 + * + * @param bucketName 存储桶名称 + * @param objectName 存储桶里的对象名称 + */ + @SneakyThrows + public boolean removeObject(String bucketName, String objectName) { + boolean flag = bucketExists(bucketName); + if (flag) { + minioClient.removeObject(bucketName, objectName); + return true; + } + return false; + } + + /** + * 删除指定桶的多个文件对象,返回删除错误的对象列表,全部删除成功,返回空列表 + * + * @param bucketName 存储桶名称 + * @param objectNames 含有要删除的多个object名称的迭代器对象 + * @return + */ + @SneakyThrows + public List removeObject(String bucketName, List objectNames) { + List deleteErrorNames = new ArrayList<>(); + boolean flag = bucketExists(bucketName); + if (flag) { + Iterable> results = minioClient.removeObjects(bucketName, objectNames); + for (Result result : results) { + DeleteError error = result.get(); + deleteErrorNames.add(error.objectName()); + } + } + return deleteErrorNames; + } + + /** + * 生成一个给HTTP GET请求用的presigned URL。 + * 浏览器/移动端的客户端可以用这个URL进行下载,即使其所在的存储桶是私有的。这个presigned URL可以设置一个失效时间,默认值是7天。 + * + * @param bucketName 存储桶名称 + * @param objectName 存储桶里的对象名称 + * @param expires 失效时间(以秒为单位),默认是7天,不得大于七天 + * @return + */ + @SneakyThrows + public String presignedGetObject(String bucketName, String objectName, Integer expires) { + boolean flag = bucketExists(bucketName); + String url = ""; + if (flag) { + if (expires < 1 || expires > DEFAULT_EXPIRY_TIME) { + throw new InvalidExpiresRangeException(expires, + "expires must be in range of 1 to " + DEFAULT_EXPIRY_TIME); + } + url = minioClient.presignedGetObject(bucketName, objectName, expires); + } + return url; + } + + /** + * 生成一个给HTTP PUT请求用的presigned URL。 + * 浏览器/移动端的客户端可以用这个URL进行上传,即使其所在的存储桶是私有的。这个presigned URL可以设置一个失效时间,默认值是7天。 + * + * @param bucketName 存储桶名称 + * @param objectName 存储桶里的对象名称 + * @param expires 失效时间(以秒为单位),默认是7天,不得大于七天 + * @return + */ + @SneakyThrows + public String presignedPutObject(String bucketName, String objectName, Integer expires) { + boolean flag = bucketExists(bucketName); + String url = ""; + if (flag) { + if (expires < 1 || expires > DEFAULT_EXPIRY_TIME) { + throw new InvalidExpiresRangeException(expires, + "expires must be in range of 1 to " + DEFAULT_EXPIRY_TIME); + } + url = minioClient.presignedPutObject(bucketName, objectName, expires); + } + return url; + } + + /** + * 获取对象的元数据 + * + * @param bucketName 存储桶名称 + * @param objectName 存储桶里的对象名称 + * @return + */ + @SneakyThrows + public ObjectStat statObject(String bucketName, String objectName) { + boolean flag = bucketExists(bucketName); + if (flag) { + ObjectStat statObject = minioClient.statObject(bucketName, objectName); + return statObject; + } + return null; + } + + /** + * 文件访问路径 + * + * @param bucketName 存储桶名称 + * @param objectName 存储桶里的对象名称 + * @return + */ + @SneakyThrows + public String getObjectUrl(String bucketName, String objectName) { + boolean flag = bucketExists(bucketName); + String url = ""; + if (flag) { + url = minioClient.getObjectUrl(bucketName, objectName); + } + return url; + } + + + /** + * 设置存储桶策略 + * + * @param bucketName 存储桶名称 + * @param policy 存储桶里的对象名称 + */ + public void setBucketPolicy(String bucketName, String policy) throws IOException, InvalidKeyException, InvalidResponseException, InsufficientDataException, NoSuchAlgorithmException, InternalException, XmlParserException, InvalidBucketNameException, ErrorResponseException { + + minioClient.setBucketPolicy(bucketName, policy); + } + + + /** + * 获取存储桶策略 + * + * @param bucketName 存储桶名称 + * @return + */ + public String getBucketPolicy(String bucketName) throws IOException, InvalidKeyException, InvalidResponseException, BucketPolicyTooLargeException, NoSuchAlgorithmException, InternalException, XmlParserException, InvalidBucketNameException, InsufficientDataException, ErrorResponseException { + + return minioClient.getBucketPolicy(bucketName); + } + + + public void downloadFile(String bucketName, String fileName, String originalName, HttpServletResponse response) { + try { + + InputStream file = minioClient.getObject(bucketName, fileName); + String filename = new String(fileName.getBytes("ISO8859-1"), StandardCharsets.UTF_8); + if (StringUtils.isNotEmpty(originalName)) { + fileName = originalName; + } + response.setHeader("Content-Disposition", "attachment;filename=" + filename); + ServletOutputStream servletOutputStream = response.getOutputStream(); + int len; + byte[] buffer = new byte[1024]; + while ((len = file.read(buffer)) > 0) { + servletOutputStream.write(buffer, 0, len); + } + servletOutputStream.flush(); + file.close(); + servletOutputStream.close(); + } catch (ErrorResponseException e) { + e.printStackTrace(); + } catch (Exception e) { + e.printStackTrace(); + } + } + +} diff --git a/bolt-core/src/main/java/com/jiluo/bolt/util/MyFileUtils.java b/bolt-core/src/main/java/com/jiluo/bolt/util/MyFileUtils.java new file mode 100644 index 0000000..75dd289 --- /dev/null +++ b/bolt-core/src/main/java/com/jiluo/bolt/util/MyFileUtils.java @@ -0,0 +1,94 @@ +package com.jiluo.bolt.util; + +import java.io.File; + +/** + * Created with IntelliJ IDEA. + * + * @Author: fy + * @Date: 2023/05/09/10:03 + * @Description: + */ +public class MyFileUtils { + // 验证字符串是否为正确路径名的正则表达式 + private static String matches = "[A-Za-z]:\\\\[^:?\"><*]*"; + // 通过 sPath.matches(matches) 方法的返回值判断是否正确 + // sPath 为路径字符串 + + /** + * 根据路径删除指定的目录或文件,无论存在与否 + *@param sPath 要删除的目录或文件 + *@return 删除成功返回 true,否则返回 false。 + */ + public boolean DeleteFolder(String sPath) { + boolean flag = false; + File file = new File(sPath); + // 判断目录或文件是否存在 + if (!file.exists()) { // 不存在返回 false + return flag; + } else { + // 判断是否为文件 + if (file.isFile()) { // 为文件时调用删除文件方法 + return deleteFile(sPath); + } else { // 为目录时调用删除目录方法 + return deleteDirectory(sPath); + } + } + } + + /** + * 删除单个文件 + * @param sPath 被删除文件的文件名 + * @return 单个文件删除成功返回true,否则返回false + */ + public boolean deleteFile(String sPath) { + boolean flag = false; + File file = new File(sPath); + // 路径为文件且不为空则进行删除 + if (file.isFile() && file.exists()) { + file.delete(); + flag = true; + } + return flag; + } + + /** + * 删除目录(文件夹)以及目录下的文件 + * @param sPath 被删除目录的文件路径 + * @return 目录删除成功返回true,否则返回false + */ + public boolean deleteDirectory(String sPath) { + //如果sPath不以文件分隔符结尾,自动添加文件分隔符 + if (!sPath.endsWith(File.separator)) { + sPath = sPath + File.separator; + } + File dirFile = new File(sPath); + //如果dir对应的文件不存在,或者不是一个目录,则退出 + if (!dirFile.exists() || !dirFile.isDirectory()) { + return false; + } + boolean flag = true; + //删除文件夹下的所有文件(包括子目录) + File[] files = dirFile.listFiles(); + for (int i = 0; i < files.length; i++) { + //删除子文件 + if (files[i].isFile()) { + flag = deleteFile(files[i].getAbsolutePath()); + if (!flag) break; + } //删除子目录 + else { + flag = deleteDirectory(files[i].getAbsolutePath()); + if (!flag) break; + } + } + if (!flag) return false; + //删除当前目录 + if (dirFile.delete()) { + return true; + } else { + return false; + } + } + + +} diff --git a/bolt-core/src/main/java/com/jiluo/bolt/util/SessionHolder.java b/bolt-core/src/main/java/com/jiluo/bolt/util/SessionHolder.java new file mode 100644 index 0000000..0be9b56 --- /dev/null +++ b/bolt-core/src/main/java/com/jiluo/bolt/util/SessionHolder.java @@ -0,0 +1,24 @@ +package com.jiluo.bolt.util; + +/** + * Created with IntelliJ IDEA. + * + * @Author: fy + * @Date: 2023/05/05/17:50 + * @Description: + */ +public class SessionHolder { + private static final ThreadLocal USER_SESSION = new ThreadLocal<>(); + + public static void setUserSession(String userSession) { + USER_SESSION.set(userSession); + } + + public static String getUserSession() { + return USER_SESSION.get(); + } + + public static void clearSession() { + USER_SESSION.remove(); + } +} diff --git a/bolt-core/src/main/java/com/jiluo/bolt/util/ShellUtils.java b/bolt-core/src/main/java/com/jiluo/bolt/util/ShellUtils.java new file mode 100644 index 0000000..8c427d0 --- /dev/null +++ b/bolt-core/src/main/java/com/jiluo/bolt/util/ShellUtils.java @@ -0,0 +1,129 @@ +package com.jiluo.bolt.util; + +import com.jiluo.bolt.common.CameraDriverEnum; +import lombok.extern.slf4j.Slf4j; + +import java.io.BufferedReader; +import java.io.InputStreamReader; +import java.net.Socket; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.TimeUnit; + +/** + * Created with IntelliJ IDEA. + * + * @Author: fy + * @Date: 2023/08/22/18:43 + * @Description: + */ +@Slf4j +public class ShellUtils { + + public static Map cameraPortMap = new ConcurrentHashMap<>(); + + private static Map processMap = new HashMap<>(); + + private static int startPort = 8090; + private static int endPort = 8099; + + public static void exec(String cmd) { + try { + Process ps = Runtime.getRuntime().exec(cmd); + if (!ps.waitFor(120, TimeUnit.SECONDS)) { + ps.destroy(); + log.info("[ShellUtils] exec linux shell timeout,120s"); + } + } catch (Exception e) { + log.error("[ShellUtils] exec: 执行脚本异常:" + e.getMessage(), e); + } + } + + public static void exec(String type, String cmd) { + killProcess(CameraDriverEnum.getDriverName(type)); + + while (startPort <= endPort) { + if (!isPortInUse(startPort)) { + cameraPortMap.put(type, startPort); + String newCmd = cmd + " " + startPort; + startPort++; + try { + processMap.put(type, Runtime.getRuntime().exec(newCmd)); + } catch (Exception e) { + log.error("[ShellUtils] exec: 执行脚本异常:" + e.getMessage(), e); + } + break; + } + if (startPort == 8099) { + log.info("[ShellUtils] exec: 端口全部被占用,执行脚本失败"); + } + } + } + + private static boolean isPortInUse(int port) { + try { + Socket socket = new Socket("localhost", port); + socket.close(); + return true; + } catch (Exception e) { + log.info("[ShellUtils] isPortInUse: " + port + "端口可用"); + return false; + } + } + +// private static String getProcessPID(String processName) { +// try { +// Process process = Runtime.getRuntime().exec("pgrep " + processName); +// BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream())); +// String pid = reader.readLine(); +// reader.close(); +// return pid; +// } catch (Exception e) { +// log.error("[ShellUtils] getProcessPID: " + processName + e.getMessage(), e); +// } +// return null; +// } + + private static List getProcessPID(String processName) { + List pids = new ArrayList<>(); + + try { + Process process = Runtime.getRuntime().exec("pgrep " + processName); + BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream())); + String line; + while ((line = reader.readLine()) != null) { + pids.add(line.trim()); + } + reader.close(); + } catch (Exception e) { + log.error("[ShellUtils] getProcessPID: " + processName + e.getMessage(), e); + } + + return pids; + } + + private static boolean killProcess(String processName) { + List processes = getProcessPID(processName); + if (processes == null || processes.isEmpty()) { + log.info("未找到进程: " + processName); + } else { + try { + for (String pid:processes) { + Process process = Runtime.getRuntime().exec("kill -9 " + pid); + if (process.waitFor() == 0) { + log.info("已终止进程: " + processName + " (PID: " + pid + ")"); + } else { + log.info("无法终止进程: " + processName + " (PID: " + pid + ")"); + } + } + } catch (Exception e) { + log.error("[ShellUtils] killProcess: " + e.getMessage(), e); + } + } + + return false; + } +} diff --git a/bolt-core/src/main/java/com/jiluo/bolt/util/SnowFlakeUtil.java b/bolt-core/src/main/java/com/jiluo/bolt/util/SnowFlakeUtil.java new file mode 100644 index 0000000..b4740c8 --- /dev/null +++ b/bolt-core/src/main/java/com/jiluo/bolt/util/SnowFlakeUtil.java @@ -0,0 +1,75 @@ +package com.jiluo.bolt.util; +import cn.hutool.core.lang.Singleton; + +/** + * Created with IntelliJ IDEA. + * + * @Author: fy + * @Date: 2023/05/09/15:41 + * @Description:雪花算法工具类 + */ +public class SnowFlakeUtil { + private static final long START_STMP = 1420041600000L; + private static final long SEQUENCE_BIT = 9L; + private static final long MACHINE_BIT = 2L; + private static final long DATACENTER_BIT = 2L; + private static final long MAX_SEQUENCE = 511L; + private static final long MAX_MACHINE_NUM = 3L; + private static final long MAX_DATACENTER_NUM = 3L; + private static final long MACHINE_LEFT = 9L; + private static final long DATACENTER_LEFT = 11L; + private static final long TIMESTMP_LEFT = 13L; + private long datacenterId; + private long machineId; + private long sequence = 0L; + private long lastStmp = -1L; + + public SnowFlakeUtil(long datacenterId, long machineId) { + if (datacenterId <= 3L && datacenterId >= 0L) { + if (machineId <= 3L && machineId >= 0L) { + this.datacenterId = datacenterId; + this.machineId = machineId; + } else { + throw new IllegalArgumentException("machineId can't be greater than MAX_MACHINE_NUM or less than 0"); + } + } else { + throw new IllegalArgumentException("datacenterId can't be greater than MAX_DATACENTER_NUM or less than 0"); + } + } + + public synchronized long nextId() { + long currStmp = this.getNewstmp(); + if (currStmp < this.lastStmp) { + throw new RuntimeException("Clock moved backwards. Refusing to generate id"); + } else { + if (currStmp == this.lastStmp) { + this.sequence = this.sequence + 1L & 511L; + if (this.sequence == 0L) { + currStmp = this.getNextMill(); + } + } else { + this.sequence = 0L; + } + + this.lastStmp = currStmp; + return currStmp - 1420041600000L << 13 | this.datacenterId << 11 | this.machineId << 9 | this.sequence; + } + } + + private long getNextMill() { + long mill; + for(mill = this.getNewstmp(); mill <= this.lastStmp; mill = this.getNewstmp()) { + } + + return mill; + } + + private long getNewstmp() { + return System.currentTimeMillis(); + } + + public static Long getDefaultSnowFlakeId() { + return ((SnowFlakeUtil)Singleton.get(SnowFlakeUtil.class, new Object[]{1L, 1L})).nextId(); + } + +} diff --git a/bolt-core/src/main/java/com/jiluo/bolt/util/SpringContextHolder.java b/bolt-core/src/main/java/com/jiluo/bolt/util/SpringContextHolder.java new file mode 100644 index 0000000..9d06f28 --- /dev/null +++ b/bolt-core/src/main/java/com/jiluo/bolt/util/SpringContextHolder.java @@ -0,0 +1,27 @@ +package com.jiluo.bolt.util; + +import lombok.NonNull; +import org.springframework.context.ApplicationContext; +import org.springframework.context.ApplicationContextAware; +import org.springframework.context.annotation.Lazy; +import org.springframework.stereotype.Service; + +@Service +@Lazy(false) +public class SpringContextHolder implements ApplicationContextAware { + + private static ApplicationContext applicationContext; + + public static T getBean(Class clazz) { + return applicationContext.getBean(clazz); + } + + public static T getBean(Class clazz, String name) { + return applicationContext.getBean(name, clazz); + } + + @Override + public void setApplicationContext(@NonNull ApplicationContext context) { + applicationContext = context; + } +} diff --git a/bolt-core/src/main/java/com/jiluo/bolt/util/SystemDateUtils.java b/bolt-core/src/main/java/com/jiluo/bolt/util/SystemDateUtils.java new file mode 100644 index 0000000..c75d4e0 --- /dev/null +++ b/bolt-core/src/main/java/com/jiluo/bolt/util/SystemDateUtils.java @@ -0,0 +1,126 @@ +package com.jiluo.bolt.util; + +import java.text.DateFormat; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.time.*; +import java.util.Date; +import java.util.List; +import java.util.TimeZone; + +/** + * Created with IntelliJ IDEA. + * + * @Author: fy + * @Date: 2023/04/17/16:55 + * @Description: + */ + +public class SystemDateUtils { + //获取系统当前时间,字符串类型 + public static String getStrDate() { + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + //设置为东八区 + sdf.setTimeZone(TimeZone.getTimeZone("Asia/Shanghai")); + Date newDate = new Date(); + String dateStr = sdf.format(newDate); + return dateStr; + } + + //获取系统当前时间Date类型,需要将字符串类型转成时间 + public static Date getNewDate() { + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + //设置为东八区 + sdf.setTimeZone(TimeZone.getTimeZone("Asia/Shanghai")); + Date date = new Date(); + String dateStr = sdf.format(date); + + //将字符串转成时间 + DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + Date newDate = null; + try { + newDate = df.parse(dateStr); + } catch (ParseException e) { + e.printStackTrace(); + } + return newDate; + } + + //获取系统当前时间,字符串类型 + public static String getStrYMD() { + SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd"); + //设置为东八区 + sdf.setTimeZone(TimeZone.getTimeZone("Asia/Shanghai")); + Date newDate = new Date(); + String dateStr = sdf.format(newDate); + return dateStr; + } + + //获取系统当前时间Date类型,需要将字符串类型转成时间 + public static Date getNewYMD() { + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + //设置为东八区 + sdf.setTimeZone(TimeZone.getTimeZone("Asia/Shanghai")); + Date date = new Date(); + String dateStr = sdf.format(date); + + //将字符串转成时间 + DateFormat df = new SimpleDateFormat("yyyy-MM-dd"); + Date newDate = null; + try { + newDate = df.parse(dateStr); + } catch (ParseException e) { + e.printStackTrace(); + } + return newDate; + } + + public static String formatDate(Date date) { + SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); + return dateFormat.format(date); + } + public static String formatDate2(Date date) { + SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMdd"); + return dateFormat.format(date); + } + public static String formatDate3(Date date) { + SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + return dateFormat.format(date); + } + + public static String formatDate(Date date, String format) { + SimpleDateFormat dateFormat = new SimpleDateFormat(format); + return dateFormat.format(date); + } + + public static Date StringToDate(String dateString) throws ParseException { + SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); + return dateFormat.parse(dateString); + } + + public static String findMinMaxDate(List dates) { + if (dates == null || dates.isEmpty()) { + return null; + } + Date minDate = dates.stream().min(Date::compareTo).get(); + Date maxDate = dates.stream().max(Date::compareTo).get(); + String minDateString = formatDate2(minDate); + String maxDateString = formatDate2(maxDate); + if (minDateString.equals(maxDateString)) { + return minDateString; + } else { + return minDateString + "_" + maxDateString; + } + } + + public static Date toDate(LocalDateTime temp){ + ZonedDateTime zdt = temp.atZone(ZoneId.systemDefault()); + return Date.from(zdt.toInstant()); + } + + public static Date toDate(LocalDate temp){ + LocalDateTime localDateTime = LocalDateTime.of(temp, LocalTime.of(0,0,0)); + ZonedDateTime zdt = localDateTime.atZone(ZoneId.systemDefault()); + return Date.from(zdt.toInstant()); + } +} diff --git a/bolt-core/src/main/java/com/jiluo/bolt/util/ToStringUtils.java b/bolt-core/src/main/java/com/jiluo/bolt/util/ToStringUtils.java new file mode 100644 index 0000000..3fdb20c --- /dev/null +++ b/bolt-core/src/main/java/com/jiluo/bolt/util/ToStringUtils.java @@ -0,0 +1,199 @@ +package com.jiluo.bolt.util; + +import com.alibaba.fastjson.JSON; +import org.apache.commons.lang3.StringUtils; +import org.apache.commons.lang3.tuple.Pair; + +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.*; +import java.util.regex.Pattern; +/** + * Created with IntelliJ IDEA. + * + * @Author: fy + * @Date: 2023/05/09/16:09 + * @Description: + */ + + +public class ToStringUtils { + + /** + * toString格式反序列化 + */ + /** + * 数字类型匹配(包括整形和浮点型) & 日期类型匹配 & 对象类型匹配 & ... + */ + public static Pattern datePattern = Pattern.compile("^[a-zA-Z]{3} [a-zA-Z]{3} [0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2} CST ((19|20)\\d{2})$"); + public static Pattern numPattern = Pattern.compile("^-?[0-9]+\\.?[0-9]*$"); + public static Pattern objectPattern = Pattern.compile("^[a-zA-Z0-9\\.]+\\(.+\\)$"); + public static Pattern listPattern = Pattern.compile("^\\[.*\\]$"); + public static Pattern mapPattern = Pattern.compile("^\\{.*\\}$"); + public static Pattern supperPattern = Pattern.compile("^super=[a-zA-Z0-9\\.]+\\(.+\\)$"); + public static final String NULL = "null"; + + /** + * toString -> json + */ + public static String toJSONString(String toString) throws ParseException { + return JSON.toJSONString(toMap(toString)); + } + + /** + * toString -> object + */ + public static T toObject(String toString, Class clazz) throws ParseException { + return JSON.parseObject(toJSONString(toString), clazz); + } + + /** + * toString -> map + */ + private static Map toMap(String toString) throws ParseException { + if (StringUtils.isEmpty(toString = StringUtils.trim(toString))) { + return toString == null ? null : new HashMap<>(); + } + + // 移除最外层"()" + toString = StringUtils.substringAfter(toString, "(").trim(); + toString = StringUtils.substringBeforeLast(toString, ")").trim(); + + String token; + Map map = new HashMap<>(); + while (StringUtils.isNotEmpty(toString) && StringUtils.isNotEmpty(token =splitToken(toString))) { + toString = StringUtils.removeStart(StringUtils.removeStart(toString, token).trim(), ",").trim(); + + // 如果带"super="(lombok的@ToString(callSuper=true)引入),按照当前层继续处理 + if (supperPattern.matcher(token).matches()) { + token = token.substring(token.indexOf("(") + 1, token.length() - 1); + toString = String.format("%s,%s", token, toString); + continue; + } + + Pair keyValue = parseToken(token); + map.put(keyValue.getKey(), buildTypeValue(keyValue.getKey(), keyValue.getValue())); + } + return map; + } + static Pair parseToken(String token) { + assert Objects.nonNull(token) && token.contains("="); + int pos = token.indexOf("="); + return Pair.of(token.substring(0, pos), token.substring(pos + 1)); + } + + /** + * 单个token解析 + * + * @param key 可根据key设置自定义序列化操作 + */ + private static Object buildTypeValue(String key, String value) throws ParseException { + if (StringUtils.isEmpty(value)) { + return null; + } else if (value.equals(NULL)) { + return null; + } + + // 日期类型 + if (datePattern.matcher(value).matches()) { + return new SimpleDateFormat("EEE MMM dd HH:mm:ss Z yyyy", new Locale("us")).parse(value).getTime(); + } + // 数字类型 + if (numPattern.matcher(value).matches()) { + return value; + } + // 集合类型 + if (listPattern.matcher(value).matches()) { + return buildListValue(value); + } + // map类型 + if (mapPattern.matcher(value).matches()) { + return buildMapValue(value); + } + // 对象类型 + if (objectPattern.matcher(value).matches()) { + return toMap(value); + } + + // 其他都认为是string类型 + return value; + } + + /** + * 集合类型 + */ + private static Object buildListValue(String value) throws ParseException { + List result = new ArrayList<>(); + + value = value.substring(1, value.length() - 1).trim(); + if (StringUtils.isEmpty(value)) { + return result; + } + + String token = null; + while (StringUtils.isNotBlank(value) && StringUtils.isNotBlank(token = splitToken(value))) { + result.add(buildTypeValue(null, token)); + value = StringUtils.removeStart(StringUtils.removeStart(value, token).trim(), ",").trim(); + } + + return result; + } + + static String splitToken(String toString) { + if (StringUtils.isBlank(toString)) { + return toString; + } + + int bracketNum = 0; + Stack stack = new Stack<>(); + for (int i = 0; i < toString.length(); i++) { + Character c = toString.charAt(i); + if (tokenMap.containsValue(c)) { + stack.push(c); + } else if (tokenMap.containsKey(c) && Objects.equals(stack.peek(), tokenMap.get(c))) { + stack.pop(); + } else if ((c == ',') && stack.isEmpty()) { + return toString.substring(0, i); + } + } + if (stack.isEmpty()) { + return toString; + } + throw new RuntimeException("splitFirstToken error, bracketNum=" + bracketNum + ", toString=" + toString); + } + + /** + * 获取第一个token,注意: toString不再包括最外层的() + */ + private final static Map tokenMap = new HashMap<>(); + static { + tokenMap.put(')', '('); + tokenMap.put('}', '{'); + tokenMap.put(']', '['); + } + + + /** + * map类型 + */ + private static Map buildMapValue(String value) throws ParseException { + Map result = new HashMap<>(); + value = value.substring(1, value.length() - 1).trim(); + if (StringUtils.isEmpty(value)) { + return result; + } + + String token = null; + while (StringUtils.isNotEmpty(token =splitToken(value))) { + Pair keyValue =parseToken(token); + result.put(buildTypeValue(keyValue.getKey(), keyValue.getKey()), buildTypeValue(keyValue.getKey(), keyValue.getValue())); + + value = StringUtils.removeStart(StringUtils.removeStart(value, token).trim(), ",").trim(); + } + + return result; + } + + + +} \ No newline at end of file diff --git a/bolt-core/src/main/resources/mock.jpg b/bolt-core/src/main/resources/mock.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4210360f6dfa217478515f527a38e867c024c4b9 GIT binary patch literal 362140 zcmbTedstI<);7EY;sK;q1uZhx8LW!I$Rh~6YK4pnRxm(-1PM(uqXuDP$P`Ve2qZI8 zZN)M^Ruc*o3CElaRLr4}LS|~QEisluf;AyzbQ)TtNfeZr2Ex0dZJ+mh|N6cUuYHA( zWM?1NZ>@XX_r09|e*WLctEnjmQV4;bXnM| z%U*e9+3TxTuLyhN_Zv5?|NZ)iNZgM9ip0i8MXZn67Zbm0Hy)4Q_+Ke$$%&~ulJL8I zJHZ461uY9+w)WLm*Y4iDe)I1C&p-43M3ygJ{K-WK?e$yYu~Bv$zmm^8Y zRO;qJ!GiXdY9taiRtOOvu%k$tA@Hkag&@YwdQLDB-*MmFF=7y^IB&gw{n)XLaV zREW83ZEu73MG6AiTH(!E_BILyi63?qnZ#H1NQp2iC&wyS^vwlH7%U zIh?-UivEJvk+I{EGFQm6bM>QQ#JzccCQOrSf?s7}-tyqQm4u;iK&b*eVb1 zAj@cZG=x#sXzZEldS1W74rk*SexBt(X>}rubdQ6QG=Z|6jv+*id*$kFP1&Si!MMbNON^fAAM;|*m$^h_6Mk7;SXc}5UPlzC%!=0MdQzn& z?lI{+(yhlt-M%decjDH^+hs1wg?@FulT&`7p?H0zRS;n6A>DaiH8rxc(>X)ouO@LC zya5>}jh=F8r4jjnc}rq(8FmnPGdU)bfa#3N*DwjSF(t0ktI8cJt16V28l zQvP#(1Gb|2A>MBuVQK!2drLQ6;*rgg-k|M#gtB#m-)N_CNIb1qqG8LoYvaGDK6Ej! zF}F;cXHsG3k?WM5??`^8kLXr17;?;~gM+tfX15#M4OVGxx7&5$FXvU9TiVPRr~8tX z?p=dKaPFa@oYU1SqT@HxJ^C$8F{&pxB)p298h!z7BFh}vX!^IMrt+0KpbdE~Az;oGR_#|k9D)2WEvIFC#SX9HW0ey^@| zC@STn10RXuyF%bNIu2M(mE&ee|W<_UO3|8m`yrStknMBlo2Yz4k4 zszeZ!z0o6+&gOhgF1tHteA7H7<*?u9Se#5X-f#AnI4hRXG{@_Rnf(qsXFQUi^^Rux z-(xmjX?7U45Uzz$T4_CA0}?!C7be`+9`r`npJh6R{4}>LxLsCKhb+7h@r)}DsI6bl z*-+{3AVt+PBz(`DjXBZkOweV)ovk-)GIuDDZ9ivkaR14aYALTf;bPAtp$N&8B^kl$ zztP~39jn?%raiK^SemA6>_Ip2$lTXIl4yJDwoCi!Q1xxylq~khZe;h5 z;}%?O@mmJ$fU=z=2zP>Yaa<`|7QgVY_ zf}`AB?kdUc=(;7x1YTdC^NmSFHy^yKbXku#ga9@-N$-P8-75*^n;qyU+)j zW~`+;eh8Bsl8HHxb^sq-U^<{?Z8Zq7L;k0P(YN%^QjW4|_bBHpksWu6?H!|H`HTD% zw*j{S_LqhafZU5*hMmV(v*Njdku5K_@MK8HejoFzk<`sakw^<9=8jPj1TrJU#`xtp zQj7=-JAxhk32BB`Ru?DS(jzw|s%3p%TCZaF4LeopsuvIWWf$q6XP>qUmdIMX*rvI9 zs^q-#>Y=;Z_ikU?I=Qca`8*gQGW!S&?fwb2ISUS(q#_bH7ggCJq@|JYGMPgiSlpPT zPCuurkY#w+oas+7MxxXEKWLmruBKDVBv0xxfk0xxB0R12f-rEph?80%Djg472kU8+bi^lo}r1# zuB&45>%X0HwB^EjMPkmj{;9eCACZVrK4wa>w*KXrV1ZG#|CU_iB+iPEb#Xg5>UpGM zlw%ZD+K}b_%(=i0lR~oAGB9VX%P*ZrALIcAkH45h*c7RL`O+u@DL=|=fXh64)2;+bJ(n+Y!e1x7eZ zfZ#d_yAr|!5&jlGk~NH9k{qHg#Ke!5F;G@qtw)d98E1|Ju5aY+Bsd`LY$N*XifwC70D}-ip$mJJd2Swlb0t}>5QYi>LiNxq3Krnl%;i(TK z__osF z$=u(=>A`)u3?IX0E+8Dpiphc+T=aAcVa{0En(1FC<}YO46P^me1c%1_D6#@)KOXu=0lj|=&>l()KGi(eHg$uSzzbmA7C$d62r^CJ4KM*T;Z5uIN8mOgq=kBK)+ z4+^hWTpmO=%VFK_Vqj%EDDCG+4-e&Hl%bzpeawIPO+_)6o+h_IZRm zj9(EkYbtVFZHme{FxJjf#XxDsFJ*5@Kq?-ffK1KHO9Y)93M zE#6K+9fCzkI#*$eX}{TBL?Y#$$n;|*UbfT~J-TIKU)-ji6a=`b9Aif;Cn)d)*5RgH zIsdtxqs9kk%q?t;EupjKk-ug(eO_B!X>n$6V02o{C_-&$*jDLu=q08WI`a#~JFAZ} zv{~AyU8exp_z420*^QPjq0(G`KI)i9*#DjI-PGKexIF_)@;=O55PheV^G`9!OOUw= zYh4*?=0rzS33H~-Is-6X!$lNyy-0`DTws}N>_f8XCCKi%VoZT?V zknOFsB~H)E5iDoLob5;~(=DNskGiX-Mnl8ylnyNrJ+v~U@fVNxCbPenwC#y%}P7fGLVVu z?vw6JxTU#4ep>hEeGRv%rc0B4MhXybg6#!k_|I%bRJpxH#1L_ ztkU?wiEWUvwCT61D1Tg;G$C&OyLH?UZ$!@go+PxJvg{qPC4z+`oKPR6z=b>~Q4NKD z#l;;8#-OEKeDH>S=>r#~^I^Q^$mcoZvYxUEIiFly`cbtd-f~|Mm^DaubIx9A!j6Wr zuWxb{Jq5^X2v0Psg78{8vd7Cgpp^zYycMy@BOtxWfvl?j2A^H(=RSWo{4l0Ue!!=#EgoPVxej9 zm7EvpG32s50n*iFTu7$ha59`r)`+ii#UUX^);h?+g}=SghsCl1NnL(fYk#eAoy}}W zqnOC%LO}q96|^@K(d)F(7a1kDEMLlzkNaI_;&3vu(Ksqse&5jGB%KZ~;JIRErIZt! zc&l~zkamyZNJjtZRqPZ~PafJjlDVK*eIhPZQ+~#y|5mj{cHJ=)p#Eg}RX#(jW}6kn zDtp3-ezS#zrv7pUFAj`XmQ5e8Q9TzS9o-H}sJNl7->Jj#|LIDo{W!&ae7%nm%V36RsAy2`2BGi#Y8 zY%AjgWvfacD|1&fpKyZLu^ZK8UR^SR?KCUiOfrjhF~omnHWvC-%40@g>HN`Mh-oMk zLbpAfE?hRl=dL#;?+^(V4(}NiVbs1Cf?Iq*002}2-fx7_-ojnU2$3fY$`KuaD;y4q z`M3!X(K(T?n_f7a?t@GvfIxgtl#TGD7`J3iGV zQRpWRGdkjsSbECCY+2kG_Yb6T{oLQq(CV*lSqjOcQ%%@Fh&hg)<8#B3cm7`pDP!e~ zC{hq4F<=!r=RBk{DDrW2a{J5O{)V!fMJ-S@Uk2(6)Rf*a+{=v|&XN;|F?KHwzPQUp=I%KA8H=WVOL^5`_+s(H zDZ_z3?Q<)K7A4KZ>!QDZNIR^0Jp4lmbb?{micGdIf0{?O+7;KB3`H43ntER4JM7-H z*lbIxQSsULDQ(Bd6yz3RLta80_Q5tzXwmhmht{@p`OoXQvGd5a`}Fqn$xt<#vE3C~ zl95dVpcbBbj^-G~y`QGwp$_k}5Org}9oakc8YzL4Cpga>)WlH=f~FiIB>=a#T1aUA z8F!*R{eiMhRXz*rRLKy|Bg@Rf7>NRF7c6E2w72(&C`fU3{H!6W(#Sy4g3h$$l9~MG zcEOUvwe(%ziPqHNSGwhvI0-h=j}|Ag5Q+F@mi_g5o&GW=p-K74)b*Uxlo}cSm5IV} z{b1>kzd>xX6SGAa&jXVrPMGPhBK9^UBdM~CTsOK_{|wfa_KZ2ljC!`(y0Do68EP`F zoy4hcrFSsgBLCDp;$8OWXff%vhDm9)W~)`;m*cf>L#dW8^=4>2QTh%M$rpfLEJ6~8 zD)lEz1Q;*64{}^CL#q%2bLUshw$%DM1GbS7f>hczYmth{opSrx6rFI^WGUY6xD zr_=5W7G}x9$&L76vQh5@@EC0tEF@-iJ7_cf27EANi$;QJI$M?L-{2UMO%2I>Abm_2 zX;x z49L5~>RrRTQ|iokzG8H_Ql*2Vq<&+GL-sX2QW|;YMz(4;KoX&u@ED^1+g5#Bc1=^w zjW||tPb{5Mq+KsQ&b;rD9W<$|1%f5b?slVwB}r406}%RfSv^S>Emy{L*Q-t>8A)JSANXe+wAxBie6?JAN;<`HLB1sq~OLoTtzXdVv*+`LwF z(jwnz{>Bnxh;#E5+i&I`AU0X)q7@5@Pvw@~mf=Ga9Dfh_VQx63qnk<4y7*1;cm5id zI0Yb^U&Q{d=M>pv$SwHMy{d6FkYUnQcIAH@4m1AM0f^01%kD%Hy>aXl=`=&INafl7 zF2SUllR%@Dbb3;V+euYdQJ9a1{OkCwZsl-R(zswr1kD^fvd=`60F$n}^jxyQb5(|4 zN-|I9bee|ApEQ}<3DT{Wdx9nRSjNY_4s*t6XZ_6w`Akn7sqW)SxH}gcMSl68S6h_M z-gzWu^bgeT?%juYALnl`U^Y_fL|eZd?sr%Pi^D?c#-^CD_j_vwyp5p^6%*MNyv81$ zDo1%Iso?Xx+(|*u&Lb_iAO1z=VjGGr_4icKgF4E8eV^DGYIvHTJLs-M`>$<@m1lja z&PAmhXxttT4kvix81$)x3h6bQnsL|rY{zmdtrlX*aOnr{Dv#WL^@7Tye>V3hpL4Eg zI`-|aI;GP>09?7wUAUdc%nD9*gQ6}$wqv-W(FPHc;EZ-rE=`he8*`{n84ORjGt-|p zqtfkV(9{HzLac)*PGrbR)K$;+N%u44R%lfLOeRcFR?pQJbFQaTkSepLye{T?muLGk zcl|{#9Ywm1H|@&#Mw6gB_<^W4(0tCYWwnULbYn14mg9=JCuMjy3 z)b(_ZY&tusn!DZZE#$Y~CCF0>6G$}@kq#f)&b&wY+ow8$U;&Ul7`c@p>xDw|sBb5E*K8!^cYJS&emu(O{+_pMBzdcaCn=D0ca8~ynxcrA`Tb6wq#TI^nC8<3 z0FzN5v7GhD8SdU;XyJf+5-gO=>V5DAwhhq?IZ*CdSwni{vgMu+3A91=U%>~O%12ds z*Q|nLPpYn_qyoD8zyq)m*e%%gFYHzz&}YD2Ku5d*;GiEdRsWKmcuLSIikb#8QjGdB zT4Oyo@I-de28I;>YN`j-ObB{<#VN+GXNw4q(Ks##F!`tPntwLcpZH>->1`nV3l=PtRG& zB9d}ADppxmp~tMfY5BLuGLZYUh#~0BE4ld22G5{nAZK|Mv;N{mRfQZ$`mRUw0V^@O zt_W7$KQ9eLqx)ai5ICjm^i5B zHxcLpzm4OUXWSHN>!}Q{?htug&2iQvDO5|$XyOB}J!vw-Riq}>g3fYEo$DCQ)0}6# zp3hP2_XTTg={%y|ubsuEn4t?CzE-)0yVm<0I%47;U*_g?aKiDp>zn7LF0)v zH}=eG@vBLy3d@8rE_r1|wE>501LlxSiNr*k>e*VUU!SDY=gdWL$011oSEZ$7!t}9Wu z%g&#sGw*rVe5;s8D2m~{jaI=c#hC=vQU#H(h}&*DY54RZ{?(X~oU4j(K%f67q56VY zy|&WfM*DW;7iR_-&`Ye`{o@L(0!gf1^^*7UH6ke;Lwa930Tl0VOzUN!_~xN&`0n#R ztI-i{^kaR}DG@@F{-u3yV2LdJJ(1sOmh?jnF6APFQkPI7Sn_cj1;rgauP8*!ilQ3a z?$J_x;@&vqP&G+MP*9rB>ZK$_H8)Iw>TwFRb1XYMdQgtpm3FY804=fWV}0z+mW^gj z+)__JNg|EbDJ1W)hx}Sk(aIZRYd$g+)=ql#cSutrzmI6Kvx+U(vLr1P`fr6)V9d9f zP=@5HNqo!m;L{;QBr(JYb^8v?**-fDWHv!`ITjFQaN3GaTOB)=fg-o+!Zc?k-8`A8 zfs|t=CEiq*#UTZ;J4dc6-W|f)C9;K+f`w@()K)VwssybV#_DOvi>^5vj0bvFS-fDbv&Oq%i5ZmvM>yf8f zmbe|{jzh}PFC@s{9mA6hao%QGC=$^-;-F+;Yw5@?R*3m>O-~`_VFp=Zdpf7bB-)BQ zZ7U~*LjfrS*+IJWc!Ojk1v#_2nEbbjZ*zE6sA9EQ5VW}Z>D|L80dRlPrTlcnAy`~j zNGYGQt>v5pITYd&JA5D+iGDmnOjB|LH-96KL&Ezhk*3}npn73h&>`DKHj4_(c)!si zy~9-Kx3g>l#8i0Ecp?)ni5$0sT;tOl6Yc9*VoNzU5N@_De#oCweMLGotG_IUB2=hs{h-BW|IR^0bDI8L-ZDXqtF4rhNyyn&W`nhzl}jCjf}8$L_rEmH`AwnPv_&6V$~+44MurKUrr4)c zTW>OfcKF8!WtZoXQ=ID7dfWw`aO9d{_m@|jA&aye#TK{`)LnN&QNWseh>YF{4*+_vWwfnrLM@`pFdLEv<@a7A&EDF^@Do*Yssc zqD)THG%jxW8iP`GTXW;!*~;oc3rpm;!QF5oTgC9m$K3f=kK78l+aE4*i9=sv_S(aN zaOH*z<$c)iTtmynBA?CS!ova`rCI~=aCau zS-^GH01(12-S2&tcCD;JvC1sBnq7Qu+{x3>zzw{+a@W>praXYW zvHPChWLTW!D~)aQNReq!i(UVfy0+{|=E91!9?C{{!*ldz%}x_dx-)94v)4dXZ5;D% zKu_uvV@JKwefTvcVqtMZ{f0sn(`Yew#NCRuWyy)ht7-SVc2ZAc=fw@=ahoPC_X8`7 zC0L~M|JSYo;B6`Ayi6WyefFKPJ%w~bVn>C2q_BKIa0v_!zx{KDY29=2%+MP$g=90a zg-!cHGa*=Fx7R;V3MWLhKNL_EhX*;ERh7oil(?<6af98nGT}&-oX1(4bbE&U>anJBC1P`cx(5JrG77jzf&hoKt`=4al zq3xuwc7*0TE9CEjCnL6m$(JRVCD$vYz1)aHysBrZvK5?#wht?OEp|hXmqemG>k8C{ z^af}yTTWP+F6lR`)E6+QHl(Xy9+|r1P4~P*_0xo)Gn=WUH?wJS!kuHbK*S!>hJbDwdozwY|#rO+5$2y zFi%isGLpx&2ZhmEynpAnc}eQzxc+0~mU3u&B~F)ZAh$}6!DbGc#Kc;9u#00BEbs<~ zRZ-=dN^w|!fgq6J5($&YqMwj9loII|mR&k}7*yfU4DaN)RX8L={hU&-&1}@QMc|?Npij<<;U0#O`x_e_;r5qrb9^f`mX@IBAKC*S;NcICc z(oopmTnI3(87eCT)k{3>Ls!`pA4k`amCYW)5KtcoPbC9U=ghfQAtTNiPwuL7WiIG) zRZ;%Rm&KbE)Svv;_3Gs@!@sGEOOjtG)xTi0-;~PYY_SZ#+}=(Bn2+$y%G-d)(m`dx zbe62^SEvisBL7`EtkY-dS7#_g`fSEP7F`hdNPd&@nU)BK5H=;Xj^9ETEci_kf8pAJ z1AfYok$EZ-mcPk_Up3Z5lqGUky^K#_SzoXpFB&AUo$qfW%dEx1}9jo8%$Tld4 z0v?`}MP^;Q-^9pE)5$TPSIeJe)OSZ{Oyo;M3Suxy9>? z?(gYsBs%(;R)KD0$Pv3`t6l%R-OX>I)s@A)+AAFju<}UoX2zhFh>ZfcmTn>z`q6eb zvh~c7Hi9~VIHl@CvfpbcvDNTMWw^XDqp9d0S|vBuoM0&XtD%e`+ips}ZHYo9LjkYl zFw6vAS+8uPGrIcYH;VGDf(7-rw&bfyBujbnYbEa2oBNb+@z_HPcj53la=YZJT7;<~ z2;<_pYYBjdFXoY|?E8U?2hn;1KyzM%W#4DpY31BMw44R^M)1M*j@ZlvA`iKl=gQ9e zY2PsvSzfkAy<#-tuNpOZI9`Utk;G49fy&(!G740R2y;tsK##-)^>R0YYJYe_KVZ(@ z=UKyDblqJ=5pOxj`>b0!(kDp=|G?pW9*Rs_A}YZhT(%Df47fv|?!)4{64AOUO2+-> zpN9}Vv?T~`sRc9xf0EcFRu|F*iz=aEk?7~ZO;&!SOh+tf4hN-&3N7_QX39+99zpNUA5 z15HI$Qvh4*GA92%2Un9qE})wr8)jlMOg1bPqf#n(6V~%sxgTBtzR7_XY^(59?e+MTKQD+;jIr!=ZuOe zw;0g=%2c~|N?!9OTLd%U0&LK3^i5tR8th*$|Z>>5#km4p98&9A!Wfy`fOjSS@hJG<8 z(clgpFb$qAL%UWP8qwRWD^5vDej;v@cv8=uY zh|crYihFCRGx0#O9vYrG<@mVUZUn(B^=j=u&I2AtzCM3!qGR@!=8@jDJZ;gp*cgYq zmX&xY^eR7xSqCu?KsKq+kxJug$B4aPJ7#^7c4{;mRp|&Gc_joKDEmECc5K&^tV&xh zB&w^Hf7*MwQ7UQn=p<$0$t!h? zRkido)KbX?#!hi4)wJ3Qju#VU)rXE%k!9PvW}`^Bmb@R0&{*Yb)E;r21w3oO%F*jZEEWq^j^TP`tkqX3C?rz1+=I1Iwc*xK~9m`gy-T1(=nsr&YYQt{UpJ%l*a?o z&X2B|syOPmJFd+me+bh|bp3JU--ouVPtqJwxr^?HQ6vv;(u- zVWIl?ua;_%4+?!bbVW7UXQSN=6k1&3MUkJhqT8VGD2U#l4Smq9hs1%}%XQPEF`KPvVoBWXV>cF?`g{+Nu=2x`t3aW(EkUU_OiqH<(>ofhqyo^QG~u! z&It|1FN01?CM{x*{f<^yeE4n{0I1!6RAuBy%v1JS1_@ZbgLH91cBJ1%N)7*NjQ*e; zVt6pk-s($Rc0Uq!bQyulh9oJVr9h0 zflb-j0LK&u8gJOs?3oHf!~lMImPBzV2ehz4zW}nZ;vqS-h%G~M^Qb7Phc0|XZY$(- zH>OR}?u$p}G<|s`AIWvMWcaneOE^baPK}BlG<uAR|)G=2DBkF2-3 z4jRTf1AA6My#ox2-@3YR);6<>#HVVfb9N=fA=r4UTheBEi2X{_OKF*MZpScImu8B@ z(>cU=V@0<#SdJ+w$t^L6iEI1OcE+4-B+t-K)gxDBDywjhH+Mozx_@`N($@Z$K?oM^ zy6w@bbo*&pRs&8|M+Q8)esTB#UM3cV~0%(pcnU zCj9CvWVXlf4!OYdHESD$gQ4Y(3)3nP#7{&ONPF!v)A!4pP%^>zK0}Vls@DV8=3iu@ zoDl+SV;oR6rMubpx$E270bG|S8f(9!Y7*keXHjG=SiM>b+SnZ>f`9^1qo|+_K=J{V6}*BEHx9Vb4Z@gNIVQY9 z*V_mYmfim>{!^dZ6EqwY9rEWlq=U{0z(0=PkTnYATP@5306I-@k1B`pi_EQa#_%}_ zpoBoZW?;{pv#t=}zJDXQ>PX{kMH1VV?51$nXs5FcRcLtGL^B1lHoL`~Q3W19wpl+$ zDFv6-2Po(apxu@#V#{1UwCEROZ>>&z77o&zXT`-~#1NNzISqjiZsr^RpJfkVt{QjB^G%WhvQ zp{Zwckf;g?Sje%nYR)+R((Q(^xZ%^*}JB#;bZcCk1V~=kg$FpSq)CUbqhow;i3@jCNHYr8wiH1k2%H68{&mS!OZf#HPw8l#YZrENKxk)M)C8k0 z#jasD;8#={+A}o07mtj~4F!O!w|91T8>G(7SML?}&sge3N<(Ya4|nk^_MT-(4@|3P zEjJF5fz0$Mg>a4izPdA|El}PvT`Dt6raHdisj}lAx$A2u!4_Y@-E@u7)uU0*lGdnC zJ$gtiL7_E+P({ev{z+zEcAs?1foPXx0qqits$wRZhc#!)a7ZC)JUq~vhXSGMe&>39 z?sOKNS+9!V=g%Wc(vDw@b>lQ3B(Zx~1=A$X8IgY)@m$MMUPD>EChmxx9w!qIU?bkp zL=S3y4yO0RI!vfE07c1BWX{=m2`QE+SkHNNxgNz9b#BRkTjHn*=+h2fPZgQMnI6Mh z-rvoY&7)15K~u>7pri^dSKcX9Rq$3gCQPWk=I`&k(W&`ogUCxD|&UxtRMDx|KW&y?T{FK?qtn&J==>n>LDj+*dMlO3zbW)n1a zQeFGRhcGSUzv_ZBn1BvI%z)aMmjTJuC!2+lzg?L}>sY zUh*<8rw4x3&44%Z5p)ZOK{7_#yjY*0=h4Rn;R9s~F=(#AdLLV4Ts?`d0V5ld;OpM1 z!zWPy9v58DlloxF74Y0Az`)hIgXNsZBbfoGvdbnU(m7-ALlQJH_+T`ZcCSqkKsFkN zi(E-X-QSzaa3^>t(tD=bZ#w(%s}ze@yiq`QL)Fxs%by%Kh}mkWdrEG&PuSV;>v8|` z7@R{jiFMO(Q9$Cs#v5CsO6bX6tOD#p%Uoz*FSD@;h|=f?tg+M5N60m5aEm>($!1<| zai(9)mCFoLyPNcy%I8Ms#xQFEf<9g&&1D75*$f0Z2$iNn6Hu2gfVdA^z1aLtv)wkA z8Es{{Y&K{+$ZgCzQ2`~P1VzYhV*Z?jV2O)L(kd^OD{aX2;~Gdq>U5Fa`=3z}=7DO` ze1JfSM1%mKUV`V%CUFfu2(Gs;OD^xX2knK+9hAJ$QeTZwQWLTZ!4uzd0n9bvz1dmK zKwt|&Y`^N?;f~QF-7H9}8r;qeM!i%a)?;E+77_G@?pNCclP1^n}waXTzq%{9B zZE}-R8OP`Tfi9{;Z{YT6@vkaEW+-%Ecm4;HW6<~7O)g1bq@TmCw@R+PWl|d2Vfsrw zXDizdW*!pIo-x(nihpq^zaEC~P?qvYlp6g_h8~Bc%Hs7^AG5lSVyev?yU$Z87=sRjrCq+RM_emz{jvJ6Ns9 zh>z{sLW_%;q=H-RBro>|@nM1m+?b?{2G${?=>$<1efg>Mga(B{m$K~I;+%tq1>M~; zBqKIv&e(a&RCM_B=_<06u;P(msaO?bIF>^B{v=hAen0n%mwx&ZSNU&`MFW6yXbK%7R15Eu!hMtf;i(CNOi>(dgR+< z^zGIrlys_=vF{^2rYQe(_B%LDZ1!O~*)6$grGtT2dGp8_VON8n!!4F>ydz!twlrDE z#lGnPW`(qoePWtqpm$U@(oU2Jmi}CvbK7Sv@c9v8%m*CCE!-s}C_GtSgj^G$O0I)hzjzxXBC84FO@BVa0{{j&fddoqizt_-gUMYe1w}hlY51_I z9F&*z{YG$e9O9c$2Sg96shojUb6=AZ)28%>VC_~LLdT9oo7*V}Yuy0BoQ&))(p%Jf z6ae?rn_*xvixcdFW5&%oA2wlxfQe1*BeVlRS7o>h&G;bYnKt-XaBnpgOd;x`M0->m zSOlagM!;k{>NskGxkuDoMM27*5WTuU%_)%?oNHjxGUOi99Z<10d!Vfjazz5jyPWB7 zLG}4Xw@rLrt`&U2H3!kt*{gldA5L}C0Jh@?qkMp>Ddz@IHs6v@6e31wumCag3SmeI z@o{>@lra=ZbUw+N)!aA$b|Z-ixPtKd3w0v%UKmzr&YhF&0FH3$@SKexk!!Xl+J6Us zcEW^Umc5`AEbr?X-)RX#P=Y4Cc4S>FsR5@cOm1*EBwANlR;$u%M5 zDh-mQmT2BqD_t7AON&)H>(DQ{-JPbN{GuDZB!&Uk8hu6m)4rqB2YYvJfnldU7XU3r z|AV?j`yczjgtjYY&|=S-N7ftdCLkQSSjD>ASRZfg=$=Q)CWTl#)IPmA#d(j`m(FZ(jOIc=P{)?R$eERD zpU$juY4L&8pvNS;8(47~W9uZStFIJHSRTm&p+yPj@p7L_j{W^;susUYb#BeZaZ4PT zrcsFU@+iFia^ys8!k~uTah7y048ZUO#d1zx+S1ogGX$@w{#Eu4snOVLB_*glq(Oqh znRgM~VfoiIwdn_1XkTcR&H0QmW_%R`i0G}hJKwU71$I|GBj&OW+b0HPx%bXd%#D^w znCc^C7k9(ZC!&+OC=F8%Vdd9G{Z(LF18-H|QXIbdq-9)PS5|53%msy+f|L)6{{j(9 zskY^>I;LQgSVnD57^k{X?RCS8Ue}2dw^+OKx+Fo{Td!3WuP2#44EOAeYP1Xh5l-T7 z{OjGketL6Rl1Gk}%X<3JFlD?!un_#e5J6Efie66nCxf>%xZR1xWZHeuHC|JMeksN6 zptSNlnF0GB?1?uB5312Xgd3yKt-X5k!;(-{iO2HjPGnPTZrW*)j@3R_ zXR&77>ntu_58j&O@gmm>@54c_egDd#hm&c59M5NsbW4PuoB_cisN0$TWbm9v0{H;8 zCLa-l4_IGmB#YX81~Z2lmoGUtovL8fz8tSiU_e*-3qu3858NWFFD=Davuz-&4kshK zoY}y5Kz4@m@nRH#n7j^V#ffRNIhP@K2H_WZwi8uWcuP9qx0mA$0CxblL00%x>M}yd z_|k}mz=Tu_ccBlf2yyXe1WQQbB40X2Zn`C3Tw{`%j!v805F*8g@Xt2a7I*uMcOny& z@-b-ivzFbVb*Qv+lpyEu`0e2I_ye<+>B+gnQgCLSs z>s^dT(t}Kg3?cOpZYii2DYCbt%_8N{fS6Utb$Lx0<*8OZ!X zGcH(saaFv#$kdOnf;qcn8vjhk^$Ix-Nvu54wzzW0cLeaVG=F~X5`pV z1EAuDK%~IEDG)3o_SU80UlCSXeZv61t5Fnrc>8rksF3qWTp>e^Mrh1!?#r2oeQFr= zRo|=%KyA3nKCI?*L}DUa_%E=$-wTKiTD1R~h71&DhL>3=KV9XV?Rnlm$G8hDHinir zkK|8{kx*3EGuHjn3+U<-?H6|I4=Q%U2xwHdo{_Ea&4PA}8b9`h->;)Dnf@31QKf9k zfW5YIMi3NYWyl9m3R3ID#hhXCp?iSy^r5p~x6r$Vl*;fzzeD}# z?!Hi(x!@^~c0n0;@vo$`m)A5fuz-kD!MAsS0AA#dAIg8){_Wj6j6e4}s0L12?NMnj zcjv-$JYId*9?OQHHQE*3LlQB5@sl@X(^>97uu}YEPzM(0a`kbj!T-=cAXy0yv+U#g zJ5*SBUsaz^ozidpPK^##Lkb@!K!n6>wViw`6dQET0OfWk18`6~mgz3q&{IG;o-qyn zOf)R<(TA4lkO_}p&aVv)P{U($22~aeh&El?Wyty-HKOc=qCJf z?Fs{%&?ouQ;l(C`AuUg2o|;ueMO@Evhr@-9QB6>ak3E-sec7-SAi;XG@@y??Z!3ps zk~Q|}tk?<|P09hGK_}0C02u(3yv4@W^3&OCxDn_%TY-pL=(iCKg&bKF>7Q~NoOrZ# zaYs!3W3uz?@ksxS^m7!Fj7kq>++k#nWurs0u=(;+3PNfY>%kO8sf=mpGF+_A)I}#=Yi=s*>6rVTqDYd3bQF^1dB3tzT~%O1Y9aZy56%eD*Pg%0oNtBQzAWbWYXO~HJYJK z0XwKkEQh$-S-pz8Oid`DRPK+4BkOW;&NjKk=Z1^QGLb6EUROVwR9&Oya|7DjU~L@P z2y>nuaMsZU0V%?r4i6wP`3#B_*yV9iAf+lVe0kv>d|Q%P$e`T^6D#~0xaMO1WOF}? zgo>*e`UYi}85|EV@Fh0oLo$Z(75^_RGlk464PM<2k_aQ4Qkvx_9;DNadd6{3N|`$4 zg&FdN26kkD5&FiJj*(W*^#iU4(13FK@JnfRN>xaw1ST9TyEuw;<1k>>jYlbK6RDPo zcDCh!T4%hB`LnXU3#JP)O1IPOxVHxFo(_q<=N;}F=AKc&7u~U&=B5wcRTXoBGN+ti zZY%U7fi|+f(^!tR7dCnQ3?Z~6aG5ntSAOjQ5OKZnDl=50&Z52jg{med0d`ES%VTRM zM20$!QLtq7ap&|bP^hLGal5RwlQbT`PEiLy52=vO5>o6IRuOnilvgATRnS}@M$MNd z&fV4%(GxWOr;-}4HoO1FZ|0E!e83m)R6Ja5CZj`loF-1V0RzXuJvgbtpzGqoj#jx*k8;mSEnUwY0ls8+PTDUpz2n(CV9Z~y?5J=oI3 zAhUdmABHfBI?xMXr%|xd=*44)a;>DR9UfC5W>7Pb0hBrCY>P?dQ0ySp^+O-SFr{|+ zt@ermn~PA9k=jGQxzXiq><`qyWEBa8lWz7{BaX zTJWHS-BgxjRPK~WTkO#1f5>?k>+sYZ{G1lSHo3qfwIH9@4nGBx{Ucas%G&Kx#nG>Zh7 z{%27g2C{cm8)fLdI{61I8jo7&zdN55{J)uc_kg6+^zR?-G}B>bJ6LOO)3Y^pz|dzj z^hu|5r?k>M1165~jD-OP>{P;JD$dT-j+)zAfrCtGn#fU0IgFz4-I;7lq%=WC5ZT(n z$^<4&i3OeK`q=LNet%R}L;|1BeP8$cdcR*+aw?Y!S%?pe>Cir7!4?_F4xOMWQR^n4 zKUIK>!0xrsvsl)+#UWmk)WVK5%PD`$7QE42lriWQfh*0=hfCLtLsb?;RWb(T1Hs-; zBAlr;Ot+*KI=x7bX&q8=!KMctR5((CJ1z&1EJ(K#>M`UTxL~D1qN)BRLru_fTX425 zSqJM6vau#FBpknkj@eEGqtw8=@>Yid57Jw6_^Nrsx^(aY@38DImcq`;fbV4wEnZ|2 zzl>XPq|ieng3&zaf(NhD9D#5KIk(r8UYd(Eb)&{0Pxge~qNLV}p>ahoB?C_bf+4(W zaEbKWia;?;SN&xNwBHiUMChqtu>#s46bG6kOnBiaM`u&T5=!7m4M-af-)>LN|HYHK z^Tx zhlU2+OkaX?d7Q?vl6YnBd8vlvcv#HAjR_IIPx_Y%JcpYPNctYPGnh_^sqiM`8aN}+ zYgt|x32#kA2Ez)iS17^@H~*L%ivg=rXO+@6#bi{d`mAj z)V@YRBt^Kr&-gFox`6`(l05!T37_#cqr7m%EXchDX$nvR-y?Mshw6Sjs&`BC^lvEs zm{gZMf2c(aCP4Drs|)G+FG13LsB-YZiAQLW;7I53GsBI^aV!7-;1&PxK*Uv~El~i; z0F!ypZ2AlkB1!Qd5pT%5caK6|3=8 zdX;4BW7lrfvzMufe`XsJTjSPr$ER33;mXgH+fGQ6h3$|DaJ=Tb|CZ6G@4UUcKuD@7 zq>dsUa{qWpB;9BO%G0ffy^6amD{L3~5HM||T+Fo#>7=|c@c^r`j*ZEOf{%^uwMtbUoR zIfNncN+^)0dzW{;6HsNHApD6)yoZD{?DTKuT) z2gSX7vf0K`Sw7Kxl{DXfU~brpy}ZGd%?0Y%;$523mxL;Lo#3-w`l&7wHnVob(KLc? zL%eIJC}C?OevBxF15-P)_iG zu(E(jdMZ25KEZJpkPdPi{`A5pe--Xv&K7KSYNF??M!(W~+d4Z>Cgk=)zo+^05bR(? zm?7mb@m>6Yb|yZ8S;v8zFhHF&O}KY+NhkIGtCCr-sakU;)O=^RBYF!5j5()(X~Jcv zP0GAEZ>Zisfkd5v$BAY9Jh}tls~)4V#+h7-|72E9@i0?x+965QXx*o)IwQ*O?iQU@h?@Y5HzlVBuN-q6$lDulke_@TtK>u|Sr=75dkl_~r% zeaVX?unkoSswsSPVXo~QwO4irybhYmJZab~d?6DFS-ET2W5W2gNga?pUBPn9-kQ=? zzM%$g%Du^Ffv8wi*VI^YlNjvbHJOx4jZB}lqD87yA<=-9!tG{xMhKI(&!@v;YmS5N zfo6Q^ZncUT|L_o=l)fyPPz&P&j2S&)W0tAMmNpLAYDv^Z!;9CG30{Q=vMz&bo1)8> zjv6{7hqxy_oQkW=2b}`OWE+^0*IR;4CmjgA6S1|$E)voQU8JY-tiizD%I|sG%rD_c z60UO5%a0VdKJejhHd=OdcKt?EESr#L8VZ;Nt)K1>GpuQcOLS7<_w|e2hdZ|e$|tQ> zCZ39(EV})``wW0(r)~#7b`*MQ;Fhi`Z4n&1NzJ0iW7^{^xuqmm<|b%KYvSJj;;Xr_ zjSVB{f$kdTAVh}!@_If0@EX7c4pF_C4pR4Y*e^q&c94qpY(DNJqDI&(4u1kd_*n(B zEE4b5L0jBA`v42&0FRauwfz;r+I1TcJF$f;=4Q@Q#JoZ= z?Afr|1gr6EGhko(ZXB4Dr>1hn!?KoMq`Lv1kIX2T*bc4;)kL`{Uo?g%bs7Eg2VK}4 z$!w)pZW|Mu;VF=O1X!5+VW9&b9v$>0sseZ-%HV~nam9do!6UcRLIvLAf40|E&9IIk zT{5t0HT@gUws0<9Py*lX>j-Hp!-<@6;cxyc(CkNQ2KoXiE|nn61RX1{S3Gap{NoW~ z32HwklN*@B{>3yb8QdEC3X6*C)Abyo;;F5RbuJucozxAFC){Yt8Mmm!bZ9g~CA6FH zf_Pcclx|gB?<@;D_uST#GODcW_|=%f-)lR zpBgNF4V^ui8ad9^=NE}FgAw6P`#ZDEEta3$0LJLuh95P3E+TO$U}Ld42QyuBX7+Bz z39A~ifR6lpXii>bnJgI=iBmM9PK2Oal$U!S}-c@Xe@*h6rLyub}5n2 z3E0{u5#;T~3e?=ealB0OSnIjc4wW!+-TkK%T#ym|xZmiv0w{4pXzGF#b*ot! z{{LNl$Y~}eiwqLr`qgfn6vvf(QODNDtz|Uh&f4pj4IBmx;lH)Pcfid=)2vH05uaip z-yzNXyCEHI1YavzIH;Xj1;EqT!uSkHzdu9*6O96j{{b-?E8c;!r0Wu|G?rfTD>zbj zLOPw5&^q4J`TcX!@!^BV&&uF&B)*M)^aP%`Hh&_UpH1=CgxYHP-R#WkYRp0VnYcv} zxatT@5PFLNl)$Bz!kyyMnT$W%rJ^6<4DldO_+bt$zr>IMTRh05rM=7>Kxg|<56Q!3 zdjJh}dos2=Wx6z3iVxgG%_CUj)@&d1@Z>HKdKz$}I&2Iil>Abjs5e#-6dOmfOCcG- z0NFnvSF*V~Gihx|S~*;2RRLlW+baEhi~L}?#96!5Pk9nn`sHT`3DpEmtYw-C4xC_mW|L zxvLOc5ShTNaiND7(ZOjYuM9E3ExN@0;EzCsvEtFzDQ50V93BDyMJ*GM97TB*|AO8! zSh&GuUV??nUloYdNtc)I`+s zLS{?!>O$Ozau$%I43`D~oP2Jka}bW*zmtB_Y5;+6aix+9iNApDyHPEc7m+>%Kt)jN z5$hcEJmF^~rM8DEhp*CA6;WyaSfqmiE>=*v>%t$)W9X4(ONswp1eX^L?(~XK4Ojj` z@uNn;TDeX^XM$_QPfM^Q69b9gT|4s0N_8C`hE++66`bxAuM}2JM?~5pc6x{I;>DZU>NJ$ZSZqk~ zUP8porA|n^TIU^mO)Lj74@ADWr4W$_WclC$I#yMcyS8jA!E6!bLv$;KF~Ry7ZvmT1 zhhSVDvb`cFJA>);$+J%(o0v2x@(&%vvf#>-Bld(`)AC)(j0xNMH`F}lD4qFK?8LJU zNTBm@4;@oJQ(kaBK3`rHlxQj36@hl*y>fi^+Oq?Q>)J2f4QH4zE3M}EmXN4dnFH&O zZrW@w6y0F)Y`x5`Ykt;v(GO$qf6-;iCTz=9{;;L3xwh^H8#c<3a_3aOh45PQx*g>5 ztgKw%eyo|Ot(ailzG!Y;u_G3uojA!WP#gV4lY!bib4VCBKIm;@a=zRDp07n9xX6MI`DoLqFyTrw|ZXfnNZ{;eB zI@HB$nC29!;VcqhW%WYaGHH!N+V*0M@SQq_t1huyaU0H*m{G;8<6Qi@a9I)v%JH7q zv76lxi0R7H$8aZDCqUb_wm@rJp*}oI+Ie++ekPuYZuGsJ z&Xf-vd!dE^;cq_eOp0y`wee&}J1x0LKx_Y+FtcvNno~6UjcPqhT^;!|x0E?cEDK2r z`-$m$UWzNa8TH_gk2H2>ZF9NrjVj8JmK1b%45x=&AL>kl?jcY?0@OY@a!Nb)kv+Wc zY(Kn=+gS8F@sfYZY=ye+blOT)=QaIWM!CRFYq8ua&rf|Kk8H1a_T%Hx_TuNgK&}+9 zpf5Z=dPyS|88TyCd63Sf_#e7@cBSdqwx0|HOf$M_gIlsR7cvF!#gEd=wj)EZb)L*m zML393p(zRSPKJyJ961qQkewWtnu&$w#+y$}cF{r~4QQSMjrwfJ9Tp<-(^p&c=e6>Xb4o%8FV#(>ke7Q$*l9~%bAcBLWlq5!C+p$EI<)#1 z)AuK{31!{Cx8fR6)W8--Pia087T_vScKUG;%P2>wva26y+48i3lVFfc8=?B2>QUc>{zmzSU;{T=gB*;Nu!onZ095N?z&Pn3~vp0YwpqXD17btJ^>2@hsP_KrR*l9x~7o!nz*nd6S);dOP z>EFvp)Z>CZwPibGD~+${bK_FlC6R@8OO4Uw6&vDK3i668G&gub8=&+*U$9sAv972U z?&OO*)`UF~Q)qyG_w80(gP5!f^A1>dy^3+KG6-Q{1gBQlF~{aNmanzv&!g{9w5MJk z;p&P2yaasMX-p=q%XV6%9$P4-mPzSgk#YEj53ftHTnXz$G^0jn`IK$-N;|KwaWQMZ zvqhx4_u+vcgqMJK!}(Zk_(bUHj(f+lzRG4z%)Ku?+|7r#Eo^h>#0mxg9jj}+233_U z%o1LC6tkgN=(X)FL0 zk~OhYAesh~`E%hp0T`9uw_bVNf=+%Xl<^x1gT!wi79WB9 z^=rn$-$z$4;NL6~iQMU(K$#Ib7yfi#6_Cr|e{wb!MzAIrkfWMNw$$=FxjXy|q0;0* zLHb_}`>g{KE+a5-A~Mj9hJRO@4Hbz%j38XU;w15q5kwrHmU(jEUj>nv28;J-5O@CV~j6Y=79 zOD5c9nRt-J|5IkJZFGpX(M_La7H;iEbSS@zop9c+5DB-EzK zXxL|!DctxGH+T^w52cWFH4%Un#GnONo`yIAA$tVc(v3X2iRviLHLZ0(Lz+Il=N6}W zA6cjn5F6OQBr{FCD=6H8eeaSZZso|7G1)D4b(9h>K*zJnGA_jKfg>cs##}VAFW1-` zHJB~(1GLq?Z1y(u*TqJlpaD;X2x6)PhHfNP`}E1 zjsVPJ!qbt45=$wul^(N|a5si=wIFTj$zS@F`QwIvFf|>tZlnnV0H}sqBPtz~@X!f3 z{s?3G7mb)`?~>;o5#w+mgA6bL!!39Fypm;10iALbyc`<_R6WyJJZup>S+q}i*g{9G zG+xV)LkUT!&MDjnb{HhO4j8)_`a0+n`*TIK^<`@=AmAwlBtMK`ouKVNk=&G<$k&kw zj7J44A9yEdz@5GTUgm|&`yecB@BmIgtkVbYMH&T&2@mpMr^#`hut?5b)2(mZ`K=%Uld)~GEU>x zoCN2QCkOVBPP$o|7Vfjqe(>oc@Y1AZod>z46KP8@xB}%1+?7G7I>Cjn(W%fF^d|rN_CZmP}@}J#NCqIZLdx-3Aqvr=Yr(K z7d0s-N@S)RQjN2JX^+8+b(!hIz;ZO5BTt21v2!XEU6=xT;Vv;-S)HyW$gc12Jxo@U z`0x#&Ldnz5rt>`6+9?x(?$Eq>jz63G(oLPbIb5UyWt>Uyz_FC57bDYW?HTU%cchoERn3oU64WvBRo#R|=v_cCc z>GM!eEtn)vS@lrFhX8}P5&T8x3K-6ig9A6uR-Tah3Vish9artlH>*$yRnr(E&Zew! zg}uUk6#62o@ND!Z*-rVbtRUic(o-5(Z@ov3T$!7Z{MFYki5}k1294|Ko(8ivlOZel zBsj^9_e$Lq|9e8&Ut6#B4G>PN-LxOAF@N|OO1Fc`e!VESj2p=WGKtGFrF@tx zKaivx*#zhk6wbQ#GwsW?2lhx;SJi%L7<8NqwJ$TdD%At%$|bF(AH*}cJVAio^FG4> z2r7;>R_~_$VD`*TzL<`N&75?6d+a${GDxD~xLI_2V+e;O3DbkuM1cx-#5yt>InY~! z&nTPP2Z9Fb@43QTmE*LNW6hSNpFtiiL>=<7m04tKXm7uFMfX)JupU(o*(_a-zzuId zx)T{T)>N?JtK&yxQnWK+erEr42pnm$(#5}`n!eaKMwfPO04vO6M)qup`OYqpOd>@P zvHwQbOby{oAepij|Ix>dah zH}ZJli4eMn*J63tIt7)*iXf42aFeNY2DP`gk&XA7Ql8Fb+KG>N}f){He--k2?Ozahx2l4Vmo$#{Y-375*opc4gNN$RFa_tK^o<6 ze;n?h_)$pRpZI!>TQMkNc4@9Wg|N9uB5j!{>U4tCzUFf6#bh8M&VHMhYcWZ>%(ZjI zl~Demct`m)pkeN0$s=>5fA(Z-Bc32I|7dCAz%7jZ*z%xQ#HoBE@ev|t#Zx|)FF9i} z31?YvF6UoY!_i(lvkn`K`dHEyIc`bE>;>$5sC5z!2JaDz!llKgMG?R&hAVKRigV27q}q#|lQCTlnTq zpM?XYBUoewKu`v!viJzz!-lqFDS=jiNm>i0);_rgTIW;p?az`l-iFK9!GpR=_seF4 z^35J+y0Agn+G&{hKzd3CmN)4sQ%?|C~ z$<_{ZHb0c+r*6=#At~M z+g=nIc)V8~E?)kia5AOsUp>S=5egcFzWn#zaSaL2D& z;}Gsjly}f_CALVIQ&9iTrU30scvv?f5YM~55=8Fxn1AFGZ}+|0W?rodoj9dNzl;mW z4sFB>No79ssZ@t|q zL0sUJ&XDmVuX(qhWt@0^`!$8%I>Vif?b-AB(yWzz%6Jo3Tm?^;QjFeCS}As&eBngmH@+$O2{va#%GYxT%Avfvm^Qn*xLYffx#wVM6G_ zOz<=6VTM*3u<0@QLh1Wyo&Af~VfXN$(&M6Gh}ZL%(AWu+);*WE&oN}t|{jb*uN z-ca(PV1X<$Tr{^|s)Dw|%UibtbA(E!v4^@yUHd!(5&SLYVXFMUrtF8y1~ z0r>YVvUg^WAdbfOsBUUZ&>Nzt_;HK*vF6JShsp&@p02~-2L5r;iyMhJMG$I|nrT-gx;}&?*t)p2Fe0M(xv6emX**x6&yt4;9`UlX z?3`}=ma6SKvQ>Gk3}A!vCJMC{e@_~+E2M+V#viUPC}=LXfN&OY_JdW%y!Nio!+KjZ z?6hUEr{(J$YoXrbibWDA_2*8X{eC#KDc&qI)dG^luh-Bi+kIpp!s%76?NQ>n;s;?) zSfxJnq>J%UIMo9+Buk}w^75k9 z4ap@JAqG+v5`m)c>1TLj+Xrk=01oV)GQyHzI4 zjgwZnn#oNMLMt<#KH|9YPDR1UfIU$mgzpF(n);+yL+kqJT&vm%o5m{I9QPj=vV&YO zdGEcFUr}fKRq%dacIt!jW$|GEEqqlIB2N~ZNOoB&ep_JU%=ldk~cX zLcwI(A|CG~)f6@Nvxjh#IzVDfkoLxcw+Rz!E=zBj((c52gtk5{7r#{s(?Vr6%Eh!}I@ymp{K0A`X}=TbMic)kJ`BexiS| zBVnRd1@R8_Eu9Tt|LzNoWcy*ko8ftn@Z9^pjQ%Civ-Qw)BZ47)+7Ls!i1Fv7EknaCKh~vCA%=vf@W}d|@tBvha+$cKfl861Z(if6)v^vKr zM;#c15gR&6stbRmQsW$Cg*BlL4Da;C=v=i4*Ett*<~?H7^3(lGNLbzXMi=&1)U&I2 z9^}fl((9Lx75s{N6y__sdR8||@=nNLcGwaQ9Q!}#xFnI_Q$E@NtBzoNEo8W^;aJEUO6*#YZWz)T*Iw0*Cx3K8c08zD@}SueLS^)S1(nBQUAw zAguAI?pd&U5j-O6Gz_`9B##eK>kolDcq1?q4?+d*i1YJMVYDM$GZ#ECEG~Cs01tKY zQu<@3lpQ&Sul;K>Rj}jU<_|YJBxx~7h9^H|LO>n(9CI12L5yXBDOmoTU*W5bsw36 zjcUo5ZtT|d02~<WAm!Dx8B5*YbU?RT zp1F(giUaBKp=Hd@s{MCgxOs}Pe|?xMQYPlqMM3r)?Xz6|D9(#Y`3!zh7EcsZ1sw@nWkkFUWWm{~AJB3psKs0aMBj$y< z((P%BKOSUbQ`@Sp`K=!pPG?Rwl2Lz1m?$+LS0N+Qx?#dlJ}_9gO{6En_V!FDLbx!# zv@AG5JRn(2yj>ahKB4gpWK$v8K5AqjAjdK4o@NIW+2K|4R7*T6g1+uwAT>uS7k=4c zO;S|}M1D}_*R_4C2j^>4x=Nrb+mtYIayQ7v14uacKgzNYPAdQT&5IrI7wcez+uQoy z0*zm*LO^|;wg~3n)zE`rCJa@k+y>(A(!}yB@=R#u3(aUY^uQ4X_?lndw)u@$q#<kN?*}{|2M`73)9&aV^vlxJ)!EYF+ojI4$5=Eeo%377Bj!$ZK$w7xG z_?8=m--hE#Foxp~t`#rw%-XiG}r>sUwf%cI^Asy-%dY1>1?{=NBf!=d3A zUfKGmxyJk2nFtp)38u`fCy42Cwa<{OiiZv7u~`h@MTv$M?^SM!2G4dQEf9tWqiA$E zzosqz#B%v z$d*|FLuG{wAF_2V5YpiCMRMFoVUI<|bS^4fH-uc@yeoiah_xclEkttJ8G8|&H(&){ ze|;hKbQx-UI4~5#6>e0(kX_JqqsAJ(oX&tFoozR&?#DQfIGeh@45&GM8m$8h^0V!U z5XMwsumUD%ePAJB8als|P7O>$CUm84>}DyGCjfmI=LZu2sK+oeiE??#ziziqgIbmU zNKlZW>$9vW$Fmp&j~K&e7dztCjO4^5!U(gBBp5I-)TFq+)?oD|rL~L<3?LZ&n^Aor ziF_h)cnuknwulfQSf8~_Z@0qb2D8i>+3w-_f8ETqk5;AFH1^(^X>T zs<+I+(1#Cm4Qh}Zpfh%3AUf3U;Z+H83Vh&}b@pmVI)Zv)7(GCMu9bI) z{Es$F=j8)Is3M-i|Dc-7Rd0UN{ zrFi!dOZ70Q!6JV_(pu{IfYL%HU-DagH30`xxN>S)sZVHaNgyQyz5u zoZQV*hMpbo7|@P7rWqc}qVRxGO`X#iqBby{rspgb4+8kIH!38@p2Z@YrOBzzfhqY) zjR0oREXudl%8ovK0HzS=YqEP``f#2{xxr5wbE`NXo z%ulkiy{YGJ(o~z1ESZg%s|E2nYQtakBH56)Iva_pEK!X(#%TlyeT4m(0=Ct_o5YqWMuH*Z+f(0@V(@dZQZdImFL(ke-~ZP4gvzYUrfqF z!3Pb5ktry16D3!Ari>)^>Ai5{^kg))Wp04D6Ec3%jN%4zVNSA`!AeA$Z!Ee#v2_Zj z@SQo>u~GT@+Y5G?$`;nA;YxSTpS5Pm8+a?0b)*9Cp?>);c}D}YOP3SKW7DQWDp^w z#MVQQ@6K*jyl8o9Q3Y6WtB;N209S+3+_DB=dinWoBs^Uxx%If`S^K1i*rct{^?fQhnf3u6AM&zis;1wp2dIY}~cyG@a-{ zts!!TK-Y*sR2)@2+CsXH*E;rv>^Wuv_&WtPs(AcT#?%@8VfJOv0QpH=IjWyD}83_x>P}z{HUN-|P9A4~mSJ zPl+Zk=~y@JOOfrYb@syRCaQ(us3J5RC;|Jbn^MksygJyc5&1W!*hXpV+4KJ-s5(vt z+z_{Iv#yo2nUcP#-o%P@z%vHgnVr|HFfLq4H=^Oa57^!dr77Ae7@!8^&rg|n9(5$b z3n7ezxkXc(y)$&xBz_*vFr(zN$LD67yit0$S%!w$e5FnpT0W_t8*iNK)%);KR@!Mu zwR?BvXdN+=uQ;F6h&%jae;@n3;@si69x?PFFX#O${Z0uwao-Gtt6=bnk!1xMH%OK! z{nP+rl1qT$UPzi@c_P8Xv4YBuG~3?;qKL(p1P3V;XVtnAbL>Sha00a^VF)Ud9k*cF zt+B(cwGQp`QhRj~QE*R2@_o2jX3d=N79I#QsQ2~BUVRFauO(>^?`R-!Sb=zthZ7rg3$bi#(~aj z^a9qrd#wH)i=9~DlK^4(bg@&KbXr!kTn4s{wG7Z7V|xycjhcc=z+kb4v+A821;q+L zA$Hv|pyKE3%?+-?#QY&vKC=skHB=!jqO%4SA)d*lR=OowUtS5$pN}pmMyxP3cFCHS zVX_q3K?YnC={iK|0bylo-fknJ_~HQuE?;DE8by{oa{bc%nln*u0)O6=yiS{|0dmxo zaW`sVt5(9rQ?l%tMqLJ9KLT|SQDHbj zf~Nyd6pISjmF&X?01I(R=jp)!HH?ouq)=2Qfi^-2>S1bRrnqoVt!626j;gPlwvRmbzp4p7rl>4p2$TFl+@o#4B`Z+3d%Wh` zuR@~qDdkZaP8<~E!3n@{xgKTnD&@N*4{(43^~*YgyK&xON&N`uF^XZ*?@NJ_Kc#bv zS5vjLcAP{rOzU5qGGV-zEA511tQ6Nuv+SdxzWhM8RU*%V7hO4>wwV21uWi!A)Y`Dw z-;)Uzyc!NlUp9CoDFLO9y>M(Gli^7R|KLl)XS0;Kg`;&vQfO;Xn%jIv$N(>ez#^D^ zdopjy)ihI4QRGnl5;86E{Jx3fB@?K~!N@^ixk+KNP|kR>Cr4DV>QPo{pJm4)^iwz& z%N`I<{|~5nAJNrHcw5B!fC9`7Q{!X-*l51JlR31?_9Ibze9EWK5PsJIRnI1Q79A@m zsE_?U&!^8;FNYJsqUao8ubxuU&3u5Bom*$Gq#van2QM|#O3Zf{l21a@qo*xx@oZ)L zxb(av3~Z-xAn=Ov7i>_Nt;kW8z9*|N6mFSCJfXVsynH{w0dbRhe@fR^O3CJ@(&(=| z8lqGPntwlZQPBT<11G%tcj>l*l8J0d=b)#4alVHt-Jf|?j@rzsfDIXt8w2s+za|Ea zBda%YBft%UR2AI3d=d}VWn>l>78$h*pe;aqA~cAla3n5S2bTW~n4FQ6U;`Em;+#f! z&C3Q#A)!u@Zw>JCX{{BcIsnGPLsLu9A>ILZOKxCO(}6G zR)3t*>i!jV@!RLEOK0Xc7B!-Sf0#pN8TVeAyl*>4!ROPf+>)d^-Lvg51MlQmA>8UK zunNgTNU2MY-@RfvmTfUCmuPJ_s!}I2-jrHzl3ri%&V1cEF8n(%pH@#o?rEIJ2OJz; zoX*`fl1-5QVCy8;ui8^B&j|Xyj_uZsNH_MmqkFC#i#6DbmCaASl{wE^zG=nh*yp#k zoN**CyUwWU#8@c)w~`f7lZLL&TBQR(Zs&ov-aBEhutek8XM@3>&7h6E*2k(zZHWdY zZN)cD1!|3Wa!fVhG!i<(`s!YrK^s% z=H_{o(wi^SUJN7!828bl9pw6zXSuv>aK`?$#8s=7@4`4w0m%+e_EZyZv)VWF$~K&K z!We{4?q-cQM=YuLW6806K4(N2B~9-TIHBNX0m-yhuW_YWvgRh@vx-pd0mIiWRr>HH z!KsrM%e7uY#sTSchBN|VJ@qSUB6q1)gwFv(AN}G=OUWS9*@w zOZy((;h5`}9}=*7ZS2BhL))hvPc3dj^(oe|y^WDGq)w>37Wcl2$Vqa8qi9Lt{CeVT z0q}>r@#<3^;$>uZ_+C&)!Hgn5*lT`V!dJGr@W`N^(>Y9Zutyz&*~}mh z60MwaNn}UaApCF2M|XwJ)2lc>O_sc@EpxG9lk}HS*RDaG+(6LJgV9vrO$`Wico`C z>e>53)%?3P^pm&b1%GVO{b0jvh{?rYb!F@u#>4&bsR_$;1bzMeS$rX$a4Y|dz|g0k z63#bn4GACmE~V`!PA7~J3p{>WUOJd4fn2O4q+_jP@;QuVmjdeLf8~$rrySx*I@xHS zYDjj){pQ2>|LC|=O6yl7blOf$^nvPxbLR1WczLoI6q%Zt~(=ibty|9Y@u(NAb4N8Y1eLt zWC#DCd!zxJYyMojl18~|k#}2_Km3Z4C*Ya0(%-0GF`7RVZYRL#-?5f{m|JOW5mZAs z)-`{vg*!lFQP0(z4e#}Qkp=F4)EP~7(;)z!NICg}Ow$_chO-*h(COai6EEFhD;XGc z*^U_VG-T^^F<1bXBwhHTnbP#>?qnq-+zS9X%#y#{@PH#uIpbmWezkBs?YL=%}gbB`o=>*;o=IDgOxBCHJt+I9M zit5@8X1yCv@uxrf!VywpB>s845Q41Y&pMCR*KSL;)X>1ZwwwM};Qz&~v`#tax81CP zdBxAO-k85mxIth(Apyh3bG;Nw={leTZ4#V8&zZSv5fADb)zJLR-mEk9=IE~E=@xTI z!|theG;9xk%bjD;(Z_jeXhzlZmUd22L-}k-F(g~IIx^KREX*$oNIF&Fv`id5Wg6fM z;C*kMa^Y{z&zng*wX^0sjEX^@-WP*}x{My}%=^A|FRz{G{uM>0w(^Ql@s_$;!SpHk zErm>G&Wf1a9exib63AHmUl&_E0m&=>`~Th&mto)B10XGH(MOc1YmuUw}b(v*7ro0Gx}5vl?fZ z)@X+ac8aoqQj(i$fY;j(qc@@$kaOGsP=ir@2iQ`d!KVlpK)wIhx%a+%(203@B$Yc) zM8!Co8yWc!c4dbo8V+v&PcXE?;7FHsCe0S%oZm=bj`jPaZ(J)ekzZb|Gc?QYBCJ}66RdnFGvkOxN}<34+CI_=19jH|0Up7S#;pQpmEvCgN{g*anb9)V+NZ>4lm#ZKnvRNJ2B5NV zVm!LA;?_}-|LzJIIzs|f)weEb5xD)3$jE=W(f>|){>O%o{0hxlKeRiD={bU>h78f zgW*yBR+R}!#pQpWYh%feXdv~qMwTf}TXt}LkDA!{$2u#m75h&~vGRR$F0cTW_O?jf zwGAi9FoL=Rcocs(8#F+9F@{Sd?U|uga;_9N!q?)Z@AOKi)0S*V22@1ONzX(!eq#gf zCktRw^yo%RJm#KVG95#vUh<0kuEu1hPZZ*5VDk!rtZ!TED~808n(tvLKQY8DiiFC2 zRK{J=4|R0Ce>Uf$v>k7|(;lxCM+0aPMc=!Tud0KF%Wom$q6VJPB4`T{7jV_Rmu#%E zpwwLB_?I;<3^o&l*Dd>o`p%3 zT((n_87Q7=GqE^8$hzdEEzJYIstFCpFIv1xNU$7|BKct{1c|q_>J!Z1Y@{!jXP_ZG zqX6|M9uRZH^JoWLwG8uVC5&XTn64J!Vx5EHQm{R4DR4`(!$XCL|HAc%BJL!7CxPx8GL84TI|GUMry0}yJ{d?nhp=cx)|b{FeLW1Od3)8Z@QX2L3SF?a%uvobAsib z*6BHOK;)vz&s&J)1(&6$kSG{L)DUOLM@0)b8?3U_fC@5yKL z!E|La#(3wz5WNF}n37E9xzc{Ak}t7U?@C@}DMrqR=_kGjp5jC6rAVRpKl_Z2Ejl+< z`+G9$;)z^c*e|A}5N_oeAWfrA=$^OhSHRFPe6A+Pp5JT;Ns5V3_nFqHVPv|9%;DyY z!?ZJ^C1gKF6FE$}PHay%Z#SEo1KLMNKGqn~a}dU$4T%dDC$Dv8$qW`WwK?1(i2xr; zd)-zJJjb;z3I=>KmTc_|A&X$uypdq^>Tz0BMA{N#xg$3i9Bo-j{^KWk6m^t-8gty^ ze9+F;XIMU+1RT6y#q-M@w0qal80U*pvLr+GBAa)8t%J;jMpsAkPx9H8fe3JPstYr_ zZx@<^)ub*t;40@n@W@+>$LBXzW_D#4=GSiKLNdojv)DLi;Z-+0E5t&_nQd)4c!F8W zcWY<%+<}hdlwm8K7--r6q$7;&eo3E(ck!-zB@{f14kjJtZnD#1R)bL=d~!O6{R$V} zD_z<%k8UR`F*bH@AB=z5nHw5t(lTAR%#_EY5jsN_<8j!e>4XOuzHT@ zT`)Um5~3qu3gSH*@Iv|*_p6>w6Pqv8JUYqI;9v^opPfd*tQ>Xp!kY1!8kR}eHCfT$ z>1^1+|6gOe9y}R(OQ1n)ae`|{%HYgW%DYS+@s#8i34$l@GHj0y;O95yMayzZU*f+x zMb3#;ggYypgWHZ4SLxl)QG%bZ?7pQuhlR& zai_VVr2FF`%X-jOqPlX0yVo>LCAM5qS#?&~`Et7X;f6~4_oQxu(tE8#Hzl{$uFI7k zbxpO-e-*b#lW2<|{N>x;q3QULVu%j(;h0aGcgZ(^iFSyMqu{l~f+S^RM#$Va41oGh zef8EM4Pe4yt50rkuif^=^=xEr*QaXT7qSnmIpA)L3uq_=p8&pt zt2_Ib-v7tfo4_@B=4-^^6WKQ1Da?yp;-61r=ls2@r~$svrbIPE|rh zA#`SRMl5w)fI>ue$U;CNOCd_$snUg*%921y3>mFZ4FpsK#E|%24{E2KbH4BAFM<-X zJh|`tzgZAit~0~c6O_?q$=wgXuiaby zJS`)huZj)7JrSL#t3$z1-_-~tt0+co{XNahU~iGO2OTt6=Zt5&%>0VUWRe;&TFD5p}r?) zt!AACW|Y|`bCsmU;^a%DA}%Qi$p9(lI)nolJuq< zn!Tw-au&oPE%l0&N%z*fJhD@IyGS6sH42WwvA%!ofC%<IPF1BRAj zr5m?t`^LwSzM~hz?Z(_#)u%Ju!iN=w7EK-+wEm0A3kLw=<|=}3km4E0#c7zCrNTGK z&@88t=&i%ke2wdg@5j<=+dExXH}vbrqJlk)%}>DYdqMP=ZDut5io>qyivd@Mm^A9E zKr|skdxNeV+A+l&rBDsc%6|Y2(H{a0tJ6=U_K@`H;grooIB;M02n=kWTlaF_QEuKN zIWv|u3Lk|oxnU|fmU|7_Nmd9p{`8DdITmd#b{hNxyH)wf35H7zJ0DY>Y)0E0+qk#6 z0Q{spB1oBeR?&jWJQ+e+ntKW8QMpRpyl;V}9%~j>$lEWrX^%H{%spjLK7takG(ZYv zuAMNEG?XoJiC4FroQlXx@~Y8iGY(FCF7|ig<#TmR$9NuZ)RUetaRy8HlqSJ)(XLW4 zz*s4#AJo^_9DvMA5xd`l3EZN<>LiQOz(6-+7ik0V6*&u}z`sUA->Wa3;P)LtTZ$E@ zr`!^rc`{OSCtxBa*4quZ%FStUd3)&#!b!u*S~4l}YY)4Z>DQ^v9t)qFYus)% zg~_)m+hRjIxpPgqIh$)*qvJ&pH=(0P4J#5p4VEI0xylt+F;+u*+J8wxk?CN zVA`#l%5P=t`xuZNTvez7t_>?3jZ)r#mOy4~B8x|dFOTn_PW(g@BysHqZcGOA3Iu6) zv;2gbT8byse6FF;^81YY!tMLHJm$29S1nlTj%!~|S*SP; zvS!A<s=mHQICR)A z_pB6I-=Q=bgV{LPbKzq}D* z5G`FOX9jDY-?Vk7^Y>aO!{=>(*JSiC9d2x#mfoU_;Zvy%2_SiNsX=uOEtjy4GOs2? zaL}CBmnd^{yerZTlY;I|WQRntSu z%b$+>z`tE}6i!@!zLZw~$5nIS8{{07(Z4h`=HI5F)U$tTD7ba4&GlBk(}q~CBEl1y zXK&HIs5=c&JxAlU5hX=TcZprr&w-534${zO)}~;d^&z`A$)GX!j5-doi<>5>kjx2L zaq;#T#rN*V`X`iVq~U;koR%S$>~6W-E@3eU<|fD^H@FTz+@q89pl+tKw3KU##ilP% zH7vNWmmRO5m+zjyiBWC{G59;a!(r}gH}=oWt@Z#9h{jw4-o20t=?bIV*U(%e?Up~5 z(hVeeOfm{QnJymD0y;m$R#l^QP#8L_rt4XO-%0GEMq&gw$qHzQQ&ZGXODhSOhmti<;{IxbkQP~? zs)2F@BQU^iP5?-}ErTH`4x&@EvNs+Y-6Gm3^qfD$pNUYa!6OiaB;*4qJa>d8xsQ5l zw}M3Av7qpkS%^M7(`&NU6NeZF1+lk9(r-z*ZPoJoIQ81HH&5EKm7QCSj)B0c%c@bEUiU)#?}r50Fu#-y4VZ*NjOx1G>XXvjQk7g9W2PcS++mSqf|n=q$jKTC!Jz*n5@ok^j=Eb zAoqGpj%&*%FRS>f@P@&SF)T1rPi4K&>UZfcZJVaiQ|WOu9;!mSg~83f%)E{PX2ke} zL~Xt0);KLxg&1xp6kqDZTq9qg+(cHiF&66Py;Q4CQ8~n_x^qmJYaDLu@wI6NX$d%s zSlfs4m2j7TVZb7$Fa7#1z_THcA&k!sgGO<``blTl6mQTX8K>!S8Hm3O zG7DUgx^EiE5=Dz8f`g|GLG^7QQO?;(J7_a?KB<_Ne9Ow)Ho}=|H50pXf6$}LUelbY zmk-ivD{o$P^?pn{o*(1A8ZhF;U$t0*SURC{Si38~Xo99l^**=qZ`75HJ{wfviFkcT zQhU?J_Mv7*S%`VeCHTlO_ldUrM!^$ta>`g+lEUE73#OKu%^Tq6_dZMMdCa0GiMkoB zqEFo0uI=F~y;akcg07aJ?@15WD+QzJZto`C2;cHSg4;$lRUdZW<36{jl`g1182Fj} zCZ#38Q1%9^!k`$e&i?>rT1CP?G)K|nweFI~n}uUu0|1aGPBAW>9m{HCUO&)te#lik zw#__Eb1Yv@-%=%LIur*h;`yOiPq|_RG*P_O>05-*e%~BC`)X(>34~g5{8UWQif4ta zolDJU2B!pk9xMY__O(Wp*{kCrx!hdMGTxx49m-aJyij@bY0NM^kvG!VFid1T<^OLWLK& z<=TDi51)#69`;#HGFP^~Rb)dixyAbt;wF|ql4FS57MU2WzY-$B-&p4u4?mMW($jvRCuE2zvJr-qD|(qh3RK9Zhfau z-M**gcgzW_ZTnuU7r6ai3b!<6F}-Mh-%`uN=+56vT^tJg;>*RkZYR)E+}!$H69h zaPjD=327Fg#wbx^ZvA7*gd8f6dxHOVesn5zUDl0hBW3;t$oo2V8Qi=^Aq=15_?UZI z)|2q#fNgx$e#9CKc<(d9&)__=5xwL!IK_k3Wn^ z?2e_C)22$(-)p!>7nbgiH+pu7>*89+iBMfGcd>~*QOr%}r=}iAxK^i87a02)#40M? zA_|QU@S1MdI$4X756a5kbf$)lNCR~u&l7@(QF+4M>M`?#wVk+VQa7>lCsRswejD%b zi$CQyhgkLmPwrz7S9F))k;(LveS~zpDa4XtSr8I;5A_oPTpiZf1AdW+y9T{kp+LFHiS0FF}p`<%gaK23dJ8h|?zJWfb)_Q=?WW+LrErL8P6% zBAiycM~)>}G;HW^&oMT(S)YIKSFSQjzKW4Hnn@@J;^1N5&{sH0&mPV64xiJL%1j&L z1__#hyI(;+o^G4(WZF1Fb5{k9LSa-Nzix7aug32yX>^8VGX&f_<|tt)U(uD-j6obK z<23S_58>*6a}9`*gklyElPcgULoC5aezv3I&%5o{&vfG0#-pM0Iu>Wq91}-SArL(K zJH76bMIP1hWAN1kcDweILn{k%HaVwnl9q-t^CaIOJyYvjE?xDc-EV?SIt#n#^Z#Ut zd^j2#Ef5_k07X}G8)_-5xnf9!XPNSC$*zBxs%91y9u1MBeQ%0eH}QwArs)SNDKj_g zKC0iQLE*#0ZPR;Hv~#i+3bD6%-f3#4c`Cy_fbQXZc!zOV;|Abmof1_~im@#a;KG$n z14+V0`43W7FFK_p<+~#gYu^VBVws?8~jEs!tS|^rVfF~>HeE*`;3id6u zWxIb6DsPO@TYlUm2|f!Es=4fZ1(Ou>`zGWE<8V*g^*=SG$t)%Qm<7H7O6w<-C|e(g)CO9Ed$Ji1WPd z6i>+W?F^<_w&CI1OAiJZ_U>f)1h^KDZeH}U&INoud!a&^`}d42)4;fLS=EE@c(fFq zy7#j9qkth+J{pxSH!TB6d~f$1Pgi?lbacMbFcvk+a)lR=I}L&q-31i}c&Gj0PP-

IQcu+ex+y5*7zTI-ygH3zEtP!qo;?9NXCpw-T+%Us*pMv~VCk&w>U zV3Hys1{hfjLh<3V<^yf60r1T+=k1*atO?fpprR5^7`n{pn9<0!;vgV-a`QtpP$+}4 zJ?i{C2^=Cw5gs@!7?Y6#SklB;^y zegNS|%^vr|o+TxZJ40#JeJ}`uVE@Gz#L_My&Jn`J&sq!}0@YGQJv67=Aum_gO8=Ho zv|>`R!NH-Vla!o+wml;-$~K|nw%2{{PLV-L4kL!olwX{hievW!Oxb#1icv8|!Zj}p zCfu!U#DH=#IiV<ZfcTg6Oi`pzRo2ZnVGX{{#Mv|DA9(6 zR&XWzST-AsAx{0Bgdl#;19M}UjJ*MNkZ^v9R}={p(dqF;j<1Dl>C0rQxV zrE8by9lm~7b=~iDDq~{N)}Ip^Hw&Qd$-O4_U)lTSQp2X3M%ekqBo;a3W9GF#P7(TD zy@Go^Y?sUF*5@5|?}i;xREN|VDS=<0?!L}3A34CcWYij%?Qtnr)VLl*x*-MSp5c&CiZdnVL~m(@SaJ_zn#7LK2tgK!bkrn#*w z{TWz&Q~tpO3Oc3v^?OEybrQQ3`n9st7ml#l1;QPF*IR|1v>i!fGP#AavpvD@@Cisd z%>83%qyN=o!OhHS)rn^`JvDB4r_qh-G5Y%q!&OAQ^>{a zqt4$6K0Gwo{QU^6FX6+i}P?ZXOWkeMf0;xSs7)DPj^VQr~3zih$M8TSWIbFMO7AgV>` zCGcxn0o2SR({b-K3|JFlrm|@@9+!9mv*7ITNMae>$#uD{G$( zZdt652ewY`h_<0A03))g-~EInMLzLoG4$%#Jgcxpw8XO6c&Fj9J3+P3Zg4Yst?UWm zSa2GUFz3=(q_#uh^PQCuvY#x{40C~{b==#s%?Y*{17{yc-2VtQS_~_2V-T6T&JUmM zm&mhdl>76QxtDasSPo~+VI$Rq_wYum$@goVH&S|%MYM+%@`7lQ0A6*)dr~k|%azjf z5yfBjj(MZKpuFPZGyI0MbmIHCXAe>ZanE!)o4HN*YABxvPt!^#1l(3lo(~EUzWs-X z?%KxPK1_oiL(z5R_1(DnJLNgZCky^4Ygc5rCys)!$=oc{bGqEsjo$6jd{Q;(iY`w% z>B~GhTF(AQodH95yE1u%TUNW1mD?N(T_k^}RXV?6_jP2Ge!e)IR83M$OmX|FQm5jc z2``(12>HZAGSQ4u8kyn%BF5Xp_>JZ^#*EzV=;PjqwG;|ujh@{jMhXzxM_C_ zZ#Qhd^E8nV?W{}(d12>f(7uU(?^HX(C+JvZYGj1}yq`$PON5;W|GB!o8xWlCeX(H! z1l!4kI0a;g$<9^~BYd))g=2xbBm25C$tgFv490BzNsNaa-ooATQy2^ zAmeO4-)<#b)rzt~Wn)F`!6_4+ppgBgoU6k?DS4Jl5?%C$$7z?U>ZkIBC`EY%inGI_17Dr)anVn5%t(~3 zjrnW$esedUn-`l}&Ru4^*F(2FlJ&eG`uO(MvhMQS{ur4@Z&H0qgv+B-)sDvTJ&?>$ z-8)9VN2BY`H?)hUDQ6w)&ajUkvhaSe;HW$jiPZb)!w5fE*&3Lc-YDjgMTm(7VTBdl z^VB=kn2?m-2qhI$y*alh1RBUkPV#HK2CC_IBt%3giIbYMs*SYu6y!}Z(f2Arp8whN z?hT_oMKiQyyI)$POfYL^c*-wjHb^BcXt)XRFf(hxg>Wb7G2~+U*BhBXlOmj0lNCil zphl;{Pyz~0?*XV4fsT$(GPudS-wqL+Up_Co$AD&q&khTh?iq*j-92Wp5cGVB5;Aa6%M3!-mN0=0K)hl2+qMm6Ou5 zwc;J3FtE*>TH@RPzD1f@a9YrIEKOLaD7f~C3v{eyN3XMn2k5xRJF=10ff+2J^v0*P z@v*TLfm2Mkv&&TJbJf}(;&pd|Zkhd8j`>aq>$D%6OVhWh;OvCN4!$4l>+OamY3MmS zmPC*n&*zyaZjUDWmNpNY(yl9hD8$uV_kKyqWR$ZSIwT^;C#-Zny>x}KZ1HED+iYpU zmHK-z)l;cy{V~__q=i}X+hy~k+}#)XFTNw8?o^X4{q*ILWN-65fdtA9K*IF}ypKVJ zD^=FjVvg73J|(P*f}%-AwL!|Ybk2nVf6S8inf|CqrU9oE2;YwSJ z__$k^;~Y{;im-X*;f=wuAQ?JV3?gw$FqJb9JfNjCS(#NVnu4s_;nucqQUAskt;+0v zyN{RUEO&noDqO9Z(@+UnRR64~s5Oz_Js{}piy)gV@fmACmXU-2<05qvWexD-dCyJ~ zTeBPspS3b}#nV#2qFq1BJ#S6agZ9(Vn&J;DZ|u3F$5MF5?;i7XqRj!+sy{?qhK161 zzWbZ}2Z^1la4Mmnd9wGQMf0>|*|Xlm-D{h3>34pB3}1jQ*Vsng!P_^+;9IL#4D?Gk z8Mim3ZY9E+4tq)imM`$}n$U;0)~1Q%9MfmgIAH=lmDe_a53L_V2X$og1jW}LOe zlJIQjzqNn=iDJaeES^Yjf!Ng%cYYJs!P{*1cTSc1j)~u^4PakW$K++Jcj}#Tpm&yZ zNBXY!e~R3;Agex@egwT4_T3uFPg3G&#+J{6Js!{^m}|AMJh0$wU7D_btP(q$?oIdV1!!z)4In!9B47jp5#)k#JAA87lB*jHv=!G03Y8AQ+bY&%3iVHgR}&{z|@``7k<7m1^#2WR3fZ@M?baX=S0w>irQ?j@#$Jtt99jvXt#7kL4 zr?d3TjphWjmJ+W7ojbJJFv&zRVKc8`HlXX*Vfpv$i|&^a40S!4ftt4i>DbXdaWP6o zsAY5Tv|Efg%aiM{PFHQSgwHkRub8Bl$Tm)-+M7382dmKYQv1I>_d(&ag0o%@HkW$t zaZHeSUp?=bJND7n%5Nl;`)9u3Je%YeQNf*4XQ z7K|3jS42XCe+@7G_4mtAwul)IMto!55`B4QRGjWhH&a&OLoDa$#l2P&KR<0CdRS~5 zj|`RAb^kc6+b(QSL*ozv-pR=us#6P%HCML zuTH!5hNmwKziwizXsDpy8S;0$_kuW^$@-n_K@sAhD3n%Hy&HXu_nuRAU!wo*>emh( zda67Ec)M`B2xU7&%D*jJu;r-2!&UorLop024(d)ciBsY|%m6MC4cE`fH$Kv+(iMm0 z2Ifi7nj1#~%NB?a1DA4o!+F(YB9(T+pl;5dd<@QdG%B1=l#g{p0o^#(Fg^dz4{4K! zNJ|H!A$gYJeTG2XW4tCAycPfzh<>;@3xfT4{|)bAG5xF7W2Cjp#QIx$zJ2gBrk4PT zC{>_H22AyHrPn}hr~jfrLnxG#YaNLfG2t17Wp>P1S2Y7{AT z5~6*5;w#Addax>Ie75HzK?*0d@jZ3aw=pQsyu8jFzNtej<QwN$_(|M1O*Pgf_!Jz&XzBdXWjRH zw_#E^+;aJWEUhj*OY%)7A?x+wjYfqc_B0G0359ZhZCbo^*;Y731&KrX&_zAsLz&r~ zTagfnLu;s75S%4sT9Kd#Zl)KtoX>IB-)ZblTXj6jZBqEP{}138fV|z^=Oxp5BlC(L z5ICeLgi#NH(_qpKVbvt>5NQY{*&qOuuX0@dK!zYrx>16)qv&Ai{K#J{kwf2~UtczD*q#0AcyqY(|=~AWs~M@W0%O zPr$JNpK5J5!1*X?X0l0sBAT7knsJCx`k{;JI#NZ4L}fBT0;w;KLkhk;n>3;wPbmIN zyu_egvk6IOlmxB~?u*8dp%4;S5J1bPmLz%4H94IOWCkKVR&Y8YL5sdyo}@noJy$2- zy*WL#uAYFwz?XPiw{D$Y!B*`-QCN`k@8aOriaSap!+YKIIP9Cf)!Q)hJe~biv{Uyn z-SU($rF+E?$2tb15t6aC@<9kP42~(R-@d_n7;cjhLJeX=B?r zFhB~DB-+NP3|qn|g*dwE_()^dw9*K@wq~U)*lJ4Mi@yky*G;8okmNF}b+njPpI{Cf z3P~*_I}Hs-7Mq1nMd@kEV?%}HY~>hv3Jk5HHbqTQ!F9(o9QPw}deEE77N3?% zY|9fYgS;2Sn~Sv;q4aiBq-XftJ1s+g7z^pya)&cy!Yk2rXS%;Pj@nwZI+y6O^&qdh z!EZ;PSr5(xn`bejx)o1{&mEjwUt`sRsAfaGp-N289SB8BKp|4eC0 z@lJPHjxMW0a1jh-Oddez$;{!Z)DG)F#@^@a8&XCD5v~M}PA+vi558}z}Y%Fa=zgsN|)Llq)UO#KA zgeCCmY|L3xt&bcAePuiTpXGzEvOMYj#QD&1U^z3P%n&{&OTrSpL&LAMwuhXm8^)v2 z5-SrKeIWH;7-D@x9yMGc5gaXY|dLI(TH&}n{h=$!e1f^ zM>WAM)jTl{MV|~+#8yAndk+w86NDP=0_@+bhg8=yzz3iNSGPpzgbpj%s@MpxUeQ8J z1xd|)b2C@nU!cf1MyCEwid(sY*zKRs$HUH zW-#c$QSYHJSp@L|wX8ac&VL)7HS0JU=U zwPb#3!$|iB6Kr(L?z5C`k(xto{OCjra)-5`^@u3~K}+643z%FcRk&87bdKNx>HXgf6NvB8 znbJ@8wdb}=?05n1_p;uD)Nv;qhLUuISEqV885ljD@9X~R<*TsQ3cOE{W-v#Y#~W1P zXg%atAvCn_j}nI<=m^?16O2^ouy}RAzOkURF=rXeSzuD|llik;YCxFtHLtEQ5&OfX z8}qlphZixW%QJ$cj`^@vA+;L~`fY0m%j_5p+kLgdIF2-UX$N6$o}?DRB&9VvlY^P; z>H||LxY!7a0|`KzPH+CkK&=?5-i00p5aCQ0hU|MFndibcF92Go!A&e*7feT7Pe{z4 z6`Zo@Q!LOL^i0x4pu<}@>ati7nX?8^74gyI{8U39ZWN2T6MQ<-BmVCCedA)N{^o4b;m^%0^0PWPQ%M)erq{_V1xih zLXop{saw!N-bcBmwwg|l09#Q;hgrGvJ=^o%_b0v`udxcO$@aA=AKRXHI}L6e?e(6h z9j{6;qMq-R-UpS{+PG?za^!LHwAF_pS|Ui0&m35O+)iVPds!r z&v~9%CKco*Q|fC}VeudLJ`=6YC3;vN>z@hEh`?EONJ6dYE(%6z#-bza9_;jAp_B|D z3IpNrOjzv>02)e6r-vx7BO=3RmnNgQJcbH1aXC8Dc=nKfX#7JRAN}OuW-_38Q&UJ* zBKFA&QkG^`x8UM)f)NNHBLqIc10&;?=Z>NpGVIwvDq@IvRH-U@TbB6X|zUExG>(ZQ`UPnjXgvdOFbYPk8{*-O#Hd4^%JMZ@~jp%p{%H_tCwm`D85f zqMZ!lv=gGnlR?q}=tjQ?Ff&w7=9o98X3PE zng(iyMcL70yw>C4I1%`T;mRb_)y9&>9M@rVdGqp9S%{bQw+k)_o@nzf9zqwnwS6Uo zj?&ukVya?zjHOF_vv z8b13>1ZI4pjFri=t{GgfCENtC<*@eC!k?K$V7!QyXftV>i%Zf4P|ag^RmGt z{s8NY{F%@ZVqhamMZ^?3XKfL~qTj((Y_?Clpr6Whh)L9kAkAOe78WCbPL=;^>&&d?fZqBK#MU z4jQ}^TEO1`+gnj5mI=)Q{m(4T_-V}Dxr#vDmCo?a z@HzAW4^1SQ4Q$b@=JAMg9()j_;pn&#u1EZt!=Q=%h2|hc!xx4`n9}^wwLN z0a@7_Z+TPv4yx$|x=VPBb%8Zz@kY0SDSj|Z1s$h9gjjXli(2-7(W>H0+x#7RT=6dt zQVEdBT}G-=8$y%4#6gXftMUbA@Wdcn*0ZEQBw5r_FTE9{$cPF~Ujaz*s^1F({xnd# z^?qD7qbM{4}Tuj6yBNy8S?t+;weoyK|blgF~DQEUX>upSDDwF7; z#Y-;HcarnK%nRmGe<%G!`1u~6y*`my)#x>rEy{xgQKdRzBGsW5z{(J0wW&?wkYzVT zW1D&$AEp?umn}M7eTFl@JgB?C?yswfW$*@q{hgGD!We+BuOiF2<=p(nSHwX;oiw$wZ`9Jdwx@TLYIj_K$I_ z1qWNCw3MMaM50TsyuWtqUl~0y8_rh~2dpJr1vOxwc$$*(AEHk_e9|$;;VMMA_qNe8 z>6g_~$FAFx$$(@vOePm-VC;TjwNUF_Ha~BcuqRPx&eSJPrLGrCoXY>YU%12B&h{)Gm0{m!}7)tX{C6I0@)({t8t^MVq-Q?7Z z+-{^P@$2JQGJ^;!#&q^K)zD0Io&;Q875y5c?giV8N)^LF!%-RhF@JQ!feu1z}F73i(SeV1UG}Sl(EAC zdoMG&Sup*Z&((R7*sri!<| zucdT)GbEerS)OcIUC67YE1!(GSACab{Szi!HgKzWLm-Spg5_EBmGQ+bw z(iB?~OIlhz-8!Q?Iykud@=^hY*7oS6taJ zu}AR4I>2n8AGN%n*fmn`;Cvu1!+Vk`MXPOF2UxdLDGI@cWII=dte1I}=CNFq26EaR z3$yDee>GsQm?Yi^CKE&YRO=JXVckv0J%v@|Z163y_ApNlyVzEUw`#)YZn(-zkCR<} z(t2>JxW3aLyN(wIc26ZFM+)zM#-GLWnglShHAUIBZCVsSIFzTAxCFmi8Xj}TkA1wtKepqLTp?JWQe8svI;+YZw4F~)Vc%(_`1v&4WuM$XY zD<}sNUUDAHq@$f`QN%8^Zp_8WP;B}qx-=n1NXr#iuO?f#I1!)M=<*X28SSahQxm)q3bsWXXnonts@}Yv zy5gM84jk=Cz3i&(N6jc8+Nqu-3p($i)pV2W6s}6iB=lq57R}{MZsyetMa1<7_9^vL zi$-*01*UpOI*=)1s#kN_m95)nhr5-?)TeMco^wKf})*`+I+6RBp#tM|W2J0YyudZ08Atsa@e(R6p>-th!cdGpt zS*TrEHFQCNt~Qva_g~)H?b>Cnp^KKV#{; z&cSB>C`Q%=SuVTi;nYxzE6rN!zF?`aW6qLB@frqT?hK!3)((@zuJk?&eKN=&H0C&+ zhQwj(Ey>dmsmF-MZmGX$yFXOegA{UVPtNZxUfRm<;;*~js~_MSu%Z3jQX{u$Zi%hHh z$MpD#+S2f-J0d@sNOrs=ke$lRyaLqs2@%bZu{GFDvjHUYUC{826tZgAHBB9}%~10K zK74h%IQUw)eYFm-vqM6?X-FE$vnCR&wY$su$5|=$inw$l%Cgv$@gqljzdSmfpaoN^ zj#I>QYRHbjZ9~mBLTNd_K^^;aCN^R=XqpLgr0@^QObC_CSXu=EPW?Lik@)I46(F&` z{EwGSq#3MA5V;A^VVs#RE+z?oj^|0FN+%B2SMhjDE;;X8KO=kc+t@pE9-}w*o1%ER z=~r=h2ABJw}21vZ7^!h}N1p8$xBTpJ%5Yswg$_)GJE`L^- zB1nQUG$q+Ss87CHn(PeaNh zkuJ;|^vQ%F1R~Ni@kZ7uA1JdQr2-iZ+YWtmGC=lxyNkkVfhvp+Wm)i{!bP$wHfht% zWXjcJ)M6gm-43$OosYxqn)yivLwfm^Asc#KZ(eOQWQab}f)SN>}UI*Yah;`cbgM;CxaD zUw5~(1O?D*Cp31mRZnOk%Ig+bbxgUQpY8^W>FTtf`wrC@O8}utI2~&jN;{;)khg*b*$%h6+uF*Ds0 zXmmue);kD}AhHUvXYilY1%`TuHcx?q;K7uj=Gv*^OGb(}s97gl8OOJ7%fo>*8;A#r4|h`N`NslpPsWy4vTc(b3HllrBkLvo22Pm+F!9RV>ACIL*}pHFN=SPn5LO%`Lax$pY8>vhSwpEeCAiN&n}cy)gzzg_3hWVi`V7r zOti(*03Gq_ZolA5H?->+2=&QsX#q^9ayj>|0J0;53GG2pn(P$JHl_NBbf+xeH=04n zCfbL_+z-b8C`s6orRxirO6h95zLJsipXIFYx1SJi2libRnn@^Xym}LDPqb~qE&JHl z0&L?chx8yzaB`Nw%K#{j`Dwaz$Slo`2t~M9PAXuxW8#7xz2qMG>h!PQT7ZWx=v96W zAA2$0KdA?>trH-{05S^)F=r-oUp3qbL@gVWu$c=)*7fda)AyjUJ!>UsdLR8{ov1HP zX#VKFN|r%7#ku~o(90#KV=oIm0UXU(6*F#Cq^2RD*+8aM-P_Mt50%TM#>h;zt&Mz_GBp5!0oRe z3hr??pYVOW(TGOUpA@Vvr6t7wt(&$eld&znrtpZvt%sDa>j$T3+<#EM_EX7ZX6dRs zWY4^8aqGW{i)vC5*gq)UJt`e?KmFudH9ZTHS?>Q86%>+MO07S4pMjj z!Srr%+(!>M6E6twOF+e1D1YDk!*_}d$ks5uOGt$gHrEfU=Wbh0gRnS zs>nwnK0VP=rTg9!g+?ke{n`5Mf*mfMxpJ3kX-(6a{xjvNMYO&lsr zISh$@5jh#+Pexswx#|=$_PstU{+F-6bdJfa-Njju;x(-yp1-VcbBX-`k5`e9?`7^@ zRm?ADjx-mB)0g7VvU%N{4k_>woS;pn0 zE`umI$xJhm`KT)BOoS-vJHY3KT|#p?aseQn)5^2WlvXq0ouS^Ig+x;2|7J_B0}ODN zOmVu>rUXJLg!qk8fu+{guEIPTyDzP}%zmU>9wEbIY(O8zR)nVs93BvWEkrGq#_OA1 zE7zo9Uo4N4pU_q(gRCZuqtX9bl5c~y%m?#-zAwDswnNM5N>GGoR!7IH{8#Gb;p&K{ zL(C8oRW(WlwE3JsjjGVAh7v@YT%Sdh$Gt76n4%dwD$_T%gH~6?M27{aY{0g`P^^3= zOejnw0$Sh(hLNubo^7=(md2<6GR)q6K`_Rg;j^S`jRm<-o3hVP?a_xJQmvFBOySA{ zAk_tA*rJL&JcU>1&VD9brR_&LpHa2wuK2$>DZqhR9Bq-H4Z^iVU4%mnL1mO|54U&V zbjJ(y!g)jfOCkB{TCdy3f^)OIpiXjRmvz0p8#STe>QGz+OBK6$Wmqp^s0Q&#A=4Qr^zkY~c>d=|24PC_7zxoO} z^v{BFh8+AVDE<-yUxnM3FKdR|`6`}3I9q0teNiV3x+I3cxSRV{=GkIs@6_D}EYQ@= zXCPOrUSeR#a_jOVjn+tS3nkOxE~+-W({=h|R1s}mLV=tjai9Bwm=L{<1-iRdrm6z% zkEu-)$I|^CPpz3(3%dy zn0X!p1gptw1WCt+@8xVYoX$^LBnoU5a{4^q3A3Y_x_W)(NC%P%oUy-|2>F^R0+evc zHUu<6M~X~sNS;B3l+E=E8XV#NbQgV~`g4T?_1R`_S1J0Y4T!0S#gH6zei_CpS$-@G zG+Fb}8)lWwMjba(x^X&XFnJ-PTM34^J}-+pjt;F2wZx3On#p*_!Jk+EqnOExlM`#Z zF@<6PqycM|9h%$sYNei-REi!wH5Dv#^U@|4r8*7BxkgG__u&}$C3~zGESszI>Z7+T z(s#xoCVdvYbxHe>ZJfPL*%Cx#8w)O^X$1K+dXWd7aobO$QJ;8U_x%Yf&V0n2trrIQ zmuvZ@)x0Qae z<9Pzbp)hoprjgy5hh!1N< z^{~n-dlMANT5^Web%XU?GwsS+FO0y}dV<%(WiPH-F4=ji7Fhnvr@|q-OSEXW1d08ZMTF36!M%Rj9(tAV{yIm- z_s*d+C)BUnsS93ZzK1*PQ=~3njn8Ey8KnDJJ5>H}Ma&G3=DGV`V7Y?ZUCqF>bQY~f zL4Cg#d(k0Q7`B1Ae29u3_~xi%A4N%k>DkmK73>o&MK7>$0J8+r#nz$$Tp&{nt1K19 z3;BCXTSOx|&3GnJf}&(kG{z4^W=nVM!_v0U!JI`;(N*+vf|42u2$|^>!EuV*`G!Da zF1o~$g1S~C@WWTXmAQ@aQovm`E^Mynms`!ACl__~uU&F2VIUL|{we>j!` z?E#w4#z&oCA0LHuZsyMtxo@*FZ$vEysO@2-8QK9s?WAU$Yp3h91dWUgv<_Gw za(ZZomb~SOetLr9DPcEmC#j`G9KX#+%HLWVd+;7~H$fA@) zFO+`Ya7&Teq=lAEqGXRyEVn(c-w@3rLQPsOy5#3%S}hUn!f5r0I@2Q7ix2Y{u(+G;RJ?r7|8yEj1+cM}@=$J1F;!B*V|aEC8jSo-@F7ENp9MrLpF3buiN zt-5UCZFfIK$df{gw0gi}RI&4K61(C~7~o!x?BVTzXZU8KKJ3solsl_fan(iwhNa#isk~g#6YRe_C5>?Crxv z+vMP*0QR{xL(Bc*M!8aYZ5R}+_wTB{hbKbA%(3_}mj7SbmIQLN{(ywuC-Lu;0maGo zpbS=&wq4k-V0K*Hb{%BX6T!+^85_xk|K=$;F+Ul`409Qq7VZAPavzmjXnMj!KiSvu$-gMZ30O2!;y zsbIMIx_Wj@`geXcZzj$4t+Zx1zZBoPVLC?h`vicN{6gluvjnW10ciDU)rYe?PLFGs zR&IQ@;-US01${?Rv^2`TM@!X$a&9WR7G?__RGPR{$;N+cqR88a&NH2KCFv>zStd#DfYm+V0UB+hnN_9DduV^>3v_iT!G{Z z`m$+BqMF(P6WM*mATFOo(p>qTb8~Wn27eO}dq`5Ty@Pc2unU-cySR~N7D30eT@CX? zGDQzOlu>@9m%a&jz;C-ESfoEzT5b{Si(;(iUNuEm;{{_xz$3nDu{lwGQyuaweVEAf zsoV#~6{J2_hwA&FK5;F2+8hPvj3rq-RI_A2m@ov^j(T2+T5t)^`Vg;+rAsyG^WVV8 zUzOXb+hmq9b3u7cAy3tbE9=<6Tvj14MlirRNDrJz#a8HoG{`ZOZz?O2h6ODF^<5ri zH=Rm)Vm#8-HkhmPT{YPiv$0sQXL}@H#1C+gIKVm5NA-_b#6IU+EcM69vTZDSPJeI~ zxfU=I%A3SLdrY(*dxiTl{9@(FI^4XnfFc`s)^|HyPlP7Q&ozRJ<4%*U@9lATz1ldg zZDwLRI^sPo9+qDtg$X>Uq1V-I;heOH9DJj!!cR@vD#dGG=}wvuVEn%;D8Jxwcu+4l zSxz8m*|0ULV63HB-8M-1zZs`r&MyB)AOF+nLLHvNzp76zxHn%^pI>Up^O}NV`{jfC zHE8&fTk>D`W6u)^91}ds_LuPXC+iJl$Jy>_cJsR%huBGQ-ZF$FJ${g=@td?rx?BAQ z^@@n^G(Gi6)0~>(x$0BZkylLDgWR5-2cB^#nQzgp$xE>+zG*f#`1+0>N+Ay?y5|2* zlcyXE7q1c=bGfv7F#A!n&@KGZ$H~UlG+NIhC=zj#Vm};iD8n6s3z9#a##8~lCNLdQ zXh--^g%V5p&#`SJlG-CP6Qy&*q}0DF8g^Q7kYcGaVY9R2@3W9h(%>Bwn6Zt;rN-kK zE;y^UwOI}D0SYIi)>M>=8O@`oC#D)~Tu^j8>Ok`Z6W3g|XjU!I*VP$zG+Q?Vh16$D z#w^khuLVEcY|mre1t#Oezs328bDieZT6GtI%e!~3ufALAHoq`vjXc)8QZhG5 zuu*ZNub-7gS_Jx<&Kx9+CgIqY52p-rSpTZE11mC|>ZEqzN^>dZnG-OSZ!AM2(oa3HkdGtv5gJ0$7Kh-pXrS) zNl!DuB(>*h=)Z>pf)``g4bxQsB5UADm4T=qgHo4i#A~`~*fsyRBT+Xr^nJSJnoN=1 zuxWi?Z*}A(aL8GSoH%`png7H6RI$9X%gYNzWW@_4;v}}0FWV{G$8buOPR$RCtnzPylP%(>SmAU# z@G{gfoBETA&y-~TVPcm7reh1y*ldhTDhB6d)ePx*aKfd&emil<|642>!v=tLtpG&=je~rh~LEk9a{gjjnA}z^^3Noh^2jZcpIt-#ZPel_L0U z4n-}00Wtn}AF1F~oL;uT9>4rIY^cvkY8ZRF7~&4F&>-eRMkRKY3is_L6qNp5G$TX^ zU@Lz^mLWX;QIm%8b{@NGS*VGzPfa>m(Ae5Z-W2Prla1JKkM}N2gpp7QFBsFtoSNLi zsh@W}Rgy`>u`QCXW7ha-#X&307Uv*2@IrM)S#3S;@}^;AnL!-^9kdbV@9at}%v~y4POF0)a`lBb z3=t`!wJ>*EUkdEtkwU30o_Jg*s8B`OBM5j-E|N&2f$Jymd;4Isbx=kG;3!_y18Nv- z<|r3qn15|XQwtR;)#KX2lRT;`aQsjXAU2!~-;H){G{3Nm|I--rs}f@4XHd%~8@uD@n(?xB{9pP=`K3KCRG2h>eV6_kjI*QW`CqqC zFAe+t)28cZQ13r2web6?-)mP>tNI=~A?H^FS_LYz2=y*@1AClte;-4^6!pE zi&C2E@P}rZF#fFZO21X69@QN?gh;|SAIxtwM)hE>52xQQS46u9b9Q}F(J?ODrJ;wO z#=5p7f~PJ{Hman72H?0j-S2b52jk1;ybUHQjr5ok>D@9 zkoH@*qdBHcu$g^Rd07)DS0(&W^OdaaVy-S;(=Q|9al1>>yQ36@AH|gqO^bP63UyvF zC?z@vEd?g7pBp|N!^{I^V#7R*Mp5frWCmTZ6s6*N(6R^vZt7d9c29z2OjD3}IxWQL z&l4&3C{I)^&sD6aFO`FLRTo(%ZDC!G8xp+^<%lRTk5olS{7vMrwj@o)yTh}3&n~@`oK(tD zZoU>5iI;}qchZtKxn4oAzDj0E9s%$B%2F(;5%BXD@#NhGG3P9d#j|TlM)8Eg5H?si z$BNK=L|#c6mVEt`L%i>8tjq0uta*G(l^K>@zG;o%4lvA~AC0Z=4);{61~M(;wgR66 z$g36_GIv+M+pZYi>ep`!J7Q>B+cDi8^qX7g7k!z*n9yyvzu&E2wW~2)(^VTx;#iw( zjD(>CA50V>>GoyiAkeP&b9Aff2df+x|A`z8iDS=?u;QR{h&B4;no7B{KaNZbF?VrV zRW}T5*>&f-mQfxEs2}7?4p|O{K!h!J)pPT>$v+YKJ&Vdm_&)}As>R>km+w&?+hS3% zIX_%0yxc*Cw1#8|A&J|6`N@XP8@D!gUi?VXK ztLajFcx;0G;LNg(@OrHocio8c(njM2&%2(^>eRhq5I#}^{#batc``iyq2l6)8u!@X zs>Rj1Pcevu%AxY53e-zj$hMob9d2Q;coDDV%R-u!Cv&w#d8#1<&Ls|OXzIH76jAw5 z)zZ&}%iIrqAWHPG|AOwzOZZq+>S2#O05qa#?tjLjs3UI4#S+-b@;I%M{qX4)*-tuM z%OrDu>BRqcr>Tu;OkqnP$-(-PqNObIHa2XCCAHm9yVDsyLboHgR6Js%sjN0h$i-@h zK$?&CFXd(RvBt<)L(r?ihUjKvJ*~I73!q(;iC=I8Tjyy}L#X_E)e=^!VTXdDLh9F| z_Vs;J>7r6lzuqmtQ?2eEdDPDzI z%tPpbtEbwEKM|3ra7JACV(>~vu~D!w6+kr(Pl2sa27GQ+IdVPa6Wa)CTp5tC=M=;W zc&B0x0K$Y>FWB2?+i7qRdVwqqLf}m4T`A&){2axDaL1mIGU5bffxZI<7U&A1aW5ft zCq~FE3M~p+o_R50u%S)6t%D?385imd`;yw*>R?xhV%=Z0G*0l5bZJtDPLnmw`D>lk zj2+CcHl#m0ZK3mwvXL$RGs^h?VO#O?^85e!@#oq{U3l7Gql~|*qr-&F^5R#I_-A4V zRa{@{5Ptq$|7{&jxvuGTQI;YyMMM8rgWsKg)ru*}s8wB@zv*FD+oLn(>4RiVw)zmM zs`rsSgWnQNL+0o6y>f@wXAIm5Pnwk5y(6=Jilac<+G7&@2^_9&MPAa3^GB!WYqG4Y zJ2QXKJzX2RG0E})_AsCKEDkVbp8($y{cQOVRa9M0-?ufH)UMMxkMy+0A2jU?MckaT zYMWBW`6Msv5MN&yEs*gl|E6G1Wo8(Ir&nVORP{=|zz^}Ys339E(vabzQp7AeI_c%l zzKb_%iX_((j2+OsoY*31>Q6!tR+HS05g@IFZ>Lp9`wA{Di+i+x8ma@ZC-Hw26YJfZ z|9a&|saQWdK4FS6-Y)5y*hXuEw6`QPv_%TFX3TVsyjv~S61OG)oXg#xeL~O=_x-EjW{CwSfkN_};8U`M zQrJbWYaiG002I9se;F-kACb|DU0Na-2w}R6xf37qWI?Z(_~kpP26d2gIbBUw(-Z$( z2S+r?E^wL)YD0-$rD434DZAFOqfI$hk{O(?H8V?Px>Sc1+(-Ri%Abw|tq4^l4jXib zs$QAW9nTWO74PQi zMVjmEp~zzCdL9xT7VxIUp7D8PNY$d)jNV$&h5Q9p;d|NixWZA^=~49dtvvL3VILZl zt$xr(WKg0Ju{)a;ZZcLa`S>~#l{l9^)U?C=wm!9cFiyPUB7d#Z{WKifZ1Zrgk zHsYt%6U?2wswL|M75x4-!?7Q|a9SSp?wTfpJA`rRQ&r2Fc`KX864KbQjS`dhfH?6^ z$3%{9S*{td%JPz<-rcNQ{5*o_Bo|fkKOoU zz2UZ}D-!T$+y|mkS|9!Gv-zGrF>6SJ`>yYToa4E)6wdo}!lyif1aOL9Nfj|_#cxLo z?P8y0kryK=GxVek3>E0hS z#FmV)PLRZ!)CQ0<7H`sf%FQyW7kM*oS6W%(O;+NVHxbg6aEij3#UuxANd(Qit^kn;9btb`p+;0dQkFFs5KF$SL@#r{w zy(a?u)__A6P3z<2FSN>a)fMn=993))Vb%!8o8VXADF^us47zz*ra$$R&kBJ(UxdXs zzzEqyv@Pf<1h^!;Ex~aMT_e``0djSU;b6XI#0|k;&yjH4tHf#kv|G+>%U{X~wrXW? zl@8IPchMcA^u3NdM%wb%pHMOOlc$_n5)P5M+(dty3$!H2scC+M?WD<-WTw6vx3c9l4SSfdLHyK)>e@T_ z(&q&woi&~CeE?DbJC>*gv9W6W8rYHQ`m-*D@tRh01xUeCVxb%VP$=ji)V-i)% zHRc$evG~cl8C7hXY8HlYil8-5`>i7p@R#5aC0V0u1bWWMmERa-W7YF-o>1QQC~R9I zxWgIlST}pSb%US(hNwk5vDqk$zM*MHcT84S*$X*msV>U^9SN8nlQ9>|k5U2Oua)IHDwgYb>kZTM=B zuFE0dpf~tHITO`|hHh!k!Xn)&S=^~R?l`#{F*F9A{9?2hm*m=MYM&Py6Ej4`H)8Ci z4BOL`IzuFRl=k=472dN8A$wcdT2~}d&-VEnIh|!$mxXmgl`r$H=A)aYdENW)L}C&^ zmdXyE8xyA5*Ua9~rR#4WOeg98&K92jQOZ(+Qh5h<#gE1BbSqYcf(pLy2Txa;OD6Iw zDXCh{chg+EH+F8j7nUJ9LTh)!CO;-@pQizDq|B(Gs1RuqT04xd=%$ z!ZIqE%^@}%jIezq@qX-UF^Zt4MDTcUI3t?m2#|0ixNRyr-Nybd@21*nbJ6p8)$YXEvO z_UM*(2f20p=F;(Q<_Z@%qcG*)`pxUcYNaq#lKkoKuAi~DR{PHNThex3JFGe_3R^i_ zu8Lah0-j`AOxRBZ+cesL^!hlG$ugz8LoAhPf=oD;fd(_$+siO^ngqVSjUpS{@|mF#SV+b2*=jJgtbc((Q_r1R zK-x$N2n?{N%aH>|Q3E6IOJ6b3|1itiN+-5+*=N|`nZE)0KO@h)HQ&7k%PjLUm_#ct z@_AZ~PcKq02*hfp)Mgs?rBKUPnEa<>DOST>}1NoRI!xZoqP| zI{!Db_;XVta7HhS4Pq(AHUDU7v>!E7Es#r@(wK*Kf|F-}&#dOTI{|j5X$wJCgsv!E z@0lM?4%RB zgSUXqhOJaxl^sZDDEZFZfRUI-Xfnb4jpW!y?j_1%3c(JiR)5NqwJ8XMpvFGuRHA0I z?-uDl60}5>x$be_t<+4L9wVDN54D2pk#(%91?>9vz~l{Z=E%5EFT&+5#TEs{Z-)xH z5`n&IscO6HU(*BoZ~x(l#!JBeYkI&O@rPiiVcQ>G2*DWix=NT80(`~e)O*@?K|lWw zmW=jW0Un_oJQVx=y1Kxd3txia%Jc6yr}nU?(GumTAR;lJsmxzrU1vZUDyVo)3r8FH zLh9sZi^h9iT|o9LgnJi{`u$in)l;IVKjRaLay9n0^20FxQs!?!IV(qTv|oEpjlV!u zCT2?|Xm;lpro`KX(|~T`0B>i}?`Ut~Xm1v}&`cxDssH zOJ4rn5oxRpHFLBfW3%0=zqgdO)TbD!jK2_lE{bqD7lIP}VMnyChG1f2r(Z9eBg#`7 z@Hw~Z+eq6N-IPV=C@B{Tb!FRWMEGGr7f?VXZ^N3-53G1>p)hjbHGPIx*o^0cj?W!$1ajk7Ail+_NOuJ6=|SR(rK-5Z5%fJt!p}-o$o7dp4~j0hK=q8 zZ`kjT-roK1@%Ibk=EjW4JjM6Hvq_^0-V9wi@;}Xq@I0{N*O(E4r7q{iN%bu)!zBqN zX~$&a%~o9~eCN)V%%l>Wtj+pN!hdvDvEH0`!*qOx-0Ihg$ciQHF%Poq-jaE>Dgsgl ztb!BV&#=9Y*1eMeGCE(9PBvd25*=`0Y*>ukjo?4C$$z zIB>eSE)jAY-^V!0u7qC(kF>hDedvy1AJk6}lP{HMWi>BL7t&Y^h4Yh&jpSGLs!x7S$< zgI1+K7ScF!K-0RSz=#w*qLwGGh4B`R-LG11E?oJTbIL@HlE)Q??y9?JU!NmR#$C?6 zl&eqrJu@%&hK}!*{D~i6-z&P6O;d;9U1qoRTEb9y4y0AQ(tySChbR@N%5X9p+&A z1JO;w7K!YN_J(SUf>vzbHR&7c9ke_`L5tnnUl&RUe(YmoFQQE&C^)5866<{EEG!Ax>KaOX8}EGd&H!} z)2d~hcjsC6{efQG-8KHG?N2(NAng&9TFNgal`!TKnNjd=m)XtqT!gByTU070pn#ES@{X~s{6WLC*fn$BrE0O}hMc|&D-CQIY{ul&ItXpW zFRLFWui`~v#_G~m+^I@SX;#1Nio7VYua&am$){3QX{x=W9LHo4 zCFV~A%@$|=FF(5&N$VXgHJ~n~^ilamTxog(YkwWvs(TM$D7bw1&CdyjFT}!&`b58M zU7;>|QT2DopE+}_pktrPo8&~6N#HDpkXA?;{CWb&Z20|8b6H&NQ>@}v0K>Y-2EDU$ zSbm*MtJ%I~6~@BbJQE+rzjcO*7!Ny%d^qDtOj-USvJg?iXo;V>oFQY;Q%mG#4P)83 z;#F%ZkZpB zEN$oI^1^8`MoQIC^?Armc?bnQ(t;gN1Fvo!`TqozEm)v5n`t;7um@skeLLC7H|M(4VtJq?KwIf z#2zOcz;Aa<;^ILA8I2|*=+($6af@u(&Yp#Mv)21}F}tS4-vO7CBNGCr7Tin^{ByM5 zy>os_IRqg?6B>Xxs?u%J!#2ZDOI4;7JUnQs_@dI+VLi+8T*G~e!w039L-lEDu9mVJ z0ayba2R@1BZ98l^^UUjfsloCyIaS9DP;o3cP6kIpcZ&Z=6?@=0*FbVc9H$*l8jD#I zm(>NalOya6sbnfU^%Rzer?+_>hTBT49 z)ebE6^y{UZ`U6j5!Ppz~5OJ@L^RA&u?RfYvx1*rxQjeIcy8@MHwzICgOUj5^d{`9#KSXH#8C;z)*s> zVro&1f!%+!$F{k~!#a;v;8;UC2%!ka;?+?dx0ZTp*bXdWDr>2nXrDem?G1SWbis@b zvEK_J=k$@w+@_NlDT)K~jI;Thng=Qh&(fuBZ+1zqs;y7$TAKvlri{$DDGv2(PTfvv|46}~?KI7p z-|w;Sp@e5kvtT2rcgbJK=3BU%l1R%QL-|aZ@Xi^fEM&|n$=4r_W;DhhHj66ZP`$UV zSa5mVofTWPWI7|GOtHB<^Fk)4E27fOu0OT)dR{rEasF7X>_TxL(y?y;-Z!03K6T8< znEIW;ZSV(m+Rb&S=_L=6gRR|hJhQUd>J@S8arjh?Dt$26IDR|a?^AZ~I#1Q+Ms-QL zo)}6#Rn0zRiI=<)Zps>CE8EGbBh_2yhPxw${-afkwo00GR-LPIc&%z1G{pHXm8v61 zD;Kk25I$N52Cw+^c-Lh?LA^SuxF*@+T%7;Lfx_S=(=I2g9OlYAlBOgfi6-RdMHtA9 z9~V9ll!~qKD)_0?T)RQ}O$6}XAJkvU1+|x1{0ud?$uuq9;j!APVBhn5*XMq|7Y$K+ zH%OzVbA;*BcMGBzVlwyjZ+a6q^|ONSeyc9Ke0nwQy2!FuH9BfZOZ$7=fxO};zUd$E z3~9@*-&DU_GACpqyFS&SqEuPKaAinC$9!Y`dE>nKN&f4v-#U==+B=3keuhwRr)qh^ zU)In$Nn@}N69SL$2XrkR2w}%?si3AvG)bK>BMq^I} zxiC92+S$62Z?mf_$gfr3YVE%8e%23K{9Bq4aNF&Yt%~^JuBVc*px?9y&C%jS2lCxk z<%}GtyLZ|A6LHU3y*rbgT0SOFABdGHqz8K~9XDIM^_puyG0T}}|Cu#l7}vH%c7IrT zb%M1dnU#gGR!M@F@Do)!hZy+yju#AO${%Xsq>#^x)qehyl@vh8h41^4t; z@2>VV2Vhc)aO8t(?bK5uO@}7|R*}f*_o! zeYc@*ell{dV)qnyLe`Hp0~a&ulJ1iVeC7w2e465^X@Jbo*G-b@xylHuea|9+9=6=f z2VHZ+x2#Khl-!^-134OePq~+16}$O|==0R45?~7+AefRSJQhFNedlbx59>gqd&2SL zdDrGvESoo_;1iflC*D42jG^&3p+clO*>4nsaee}Z?U}?D*G9># zkeN4`kaQXAb#wjcvbyp*A3Ex@nq6g#R>vk}F$i}?S=|SQeR_4O-Fc?6OpCknX4k%C zV|3@a>v|bHph62n)!Y$aIhvCfONPY$>EIXyIbvElr%P0T4-q0&h@s>h=J(?{mzAnA zx1W>w4{?Z)dWEAJFBVoHY1v#b|V`@XYqTKiI#)x@c!Pn9ZNxbcK z7Vzx>$O{vOEh#xcf;=4SWsK}X0SDfEX9{b;~vOLO9mT{3oQ@r+qa|| zU@yz18Z3&;u~Co7U58%u^8z*;d2CkewT2zNJw(@DtPqIMz=9Hhbd}d5GfDAjnHm8c@H$0Nt;G-QBC?V^yn(X7C%RbwmRXYy`Z^ zxq44d{;EtT9^PO3zG9o^R7qiY6151fH8wEtxd}o&MVfas1n=F^L;*s`3At-$Z)1x7G=FR%>kAI3OIgl1D)<jC;SFGFyp^;`f9ddz zl94&{B*(i=ad4yIkI?=RAGiI-zOup$>kSE7nB@L{{3SlQeQ(^Te2>ZBsyH3AXs{s$ zq9XAe-%>my>K88_iS9~vKiAOmrRyL|4 z)erR2#LQ#;pNJJFYh|;J<1M$7Hfhq8N7~vNzcn4n_svO_NYQs+p8#O|ZkOLkqM?JQ zYrW44_r71)$s zueyEJp0E@T9|5#PP~`+6Y-i=_vrOi9jC4^G+ECo48>Q5%<*Rx?`)TJ z@zSTth0z$S97IowW@8@yPfPgaM4j~WuPSPVi5j)C>2AcPM%UHWTR8|J-_W)RmWa!G zm6MT(xFQ1vA!jnAf>pOz7F{xzCQ!4dd5OB<@}t`XuNkYBeK`BAY`)uTvOd9ow76E7 zM-l}E0cIzp;Kt}nF-g52tAM*{BvY|x(k*I1()CFA?=;_J>)+VL21jA3Rg~1elLzxd zXDmFEWLrE>(-e%Pw5Wv;)6rRBLW7EzplaL2P6#(?5&&X)+P#+D*@2*68X#${I0Q2plS@Vi!#-P(9^5ttNG$9BWf=);B}=QVC< zG;Yprlm6kLaaxq>lJD!cO|UHHidfL5t3MN?6lCZ7Q2(RVq!cThS6k(hbC8V2(+1`H z3apZWn^UBBX?!s#u%H6LnOxgnGXwt}VFI9_)xDL$#4FM`-s1yL;+Y6|JC)d+uRHJ) z_EatAjJZYm|6{sOn1JIeQJ^2XyXE#7)mYb;$Lnh@rESXUDMc@P;`=xHKH@mRdhE=4{M| z*nXRB6J0vwDsoVmF{a^Mr6|{))S>&FdrcjIIBwHedrQ)E`i2iRTYDU;UvvVgF!}vC z+U94b5QTBrI)Rs4h6=!QBvF{@RP-XxnqmY|q_l5DX!6OE`HRp5WYURO{zr@v4?Bm*Wa@%Z!l1Jh(2lp~cLh_?$E|`B&LE3-9k+`(!~&Z*b1! zvFilIrE0hi7uTd1b_NX9;;3`3y{m9zY%dwC_i54->BFnXq6#Ns?(k8E+Dcn0)w~Ux zhN>1OO5}s&!R9WI@g_NEfPP7N^-5}?IUHC}eYaD$6{Q%jdmS8rIY)XN)^w1kI>_VR z-OMPWD@32Q8KS$6$vql=>2xX^dex=s)CO;CO2qwGnPTs)@nQ zj>s^#el0ZD7rXgI)deify)mvAwBF#sc^gH^aO#7j`3J@zXI2MU0ksreb9F}#A#E#C zbF+B0#vsBX=9Vk_);_d*JS_jFBy;Bk17~gC@EOukM`IB0G*2VKZxna}A^~^}y+H0u z;e2M*LgMR!in+#g#zU9rSuLoWlM3Q<7*1H6{_gq8i_diW6} za=9+TR3f>$0(GAU&IRDCNGcz~ry^)+;a7cBj6o-!ea=F@XZZ$2OQ3Qnv*9v8Ad=$ zfFb}Nq#{cjkn<`eJQSYj<^@1SFT|8B#Fn+kE>vEKOLi(zUQS7){drE$fa)-9MjzCnuvS^t6@e~P zq8(0@Dsge*u{Y#Wnit)w=dK63?KQj<&L@(DjLCC$S(#jeq~nVZWz#}oajT2`aYtH0 zbNP&igAclOyTCi*^7(+(^A40OptUg$xG-ufgCe2ZEs$h;iN$| zWK@>I;cSAnOlSx&YmTMukS4wPtqgjHd;dklPn?bwIO}Obn#zrOZu;Dl4U4F_U8~D zQ@gJxuxnbVqNi>}8*-n1qY-$*oBm1uWtxvVCZn^)o7}9jaFg8sNjm%&(j)I%DF213 zWlOCIb7d9ofH8L-rOnFPx$o%aT?|34(y;O7fyPS3*4*2iPsZv5!o*SyRwjARCNjRQ z^kw*F2-BsrN!c}W#Ro}SGuoMV?~V!)ryJcj7p-lX8!M|;{6xemHq4r?w}Bp0fJ;wH z8Evdb`t~SPW{TjT<=LmODJjceGaKvc>jwz~&P+lF=|iIs(#Qn~se1Vk#*p8s*^LHC zYmP2H&m2*x!bFxJ)T=dm(fUMl}`%ZM^%89M!60(oRjXSKCY{gj>R)0%zM!eUDH(vtuYB?P+R^;K!ER9tzz|#Khy)IkU!#2MsunNJ;W#+-)=+&x{i{ zCFEXJO_$XeE~{|8>{esr*nPPpsZEYl;`Dk2CK^mN_F%+uz+Itua;pbx`F9Os6hoFJ z)ksB1!E?nX=J3Rb#_c1~IB3D634#pI!dP-EwCRmc@kDz8PwoU!iSswbbzW(B2 zdhTZ(n$4L7N=Ar#VE@wxl$&YT zHwVxEyBuQ=VE3$;YEJ3FD*HDq60KChm8iMaEIP5P=rWSWJ4ioXtrbMSrlGpvWbzB- zoE=8G5CJ-ke|I?ES)fQblx@2X|MY%vbPm-XYUpwf`Yvc?1B^!vL!6=jR)Yoh-JCNC zGkA&1aBr+tUXbqNWcS#`yct>m)WX4R+;MA%f=VOlAcHxSpVU;M&Ve2|%`Q^sO%i{Y z=6WU#k)ed!XkQ!{NxhONyB%}GUm&Rm6i6@XudIm6=%x(bUXew|(#Ms<*@38;Q2D9z z$m7akzZML9A=Sm$Ao7tKo(sQL-zeI3FRyq)Wq? zg^vXm$SdTLo^G6;{9HNjt~QX9?TuH~^*iMmang|Jp`9!OFvS)R`>*@@%PN3^KTBio zK(bIM0_n{cu}gB_{()ZZBin_S4NS;Hun8HIcl2T@bC0wQH5!};5E7P?{?WaNT0o}u z+w59|0T+R>zB7gmjv=jA;0!N}t>?SO``G8Pq4DaJ{~+$wa{Ke$8=?`UhX~Y?p+>2x zozom&lACH@-3xQN)D}rMysqS8sMW2TiOaO=ClZjf>bgB^$$T^u4!gj)wlS!;OoDuGatZUp0 z!)bKXd%|?T`g|9){~G4)ZT$};b|kitMMo`l=ftP3vkB$x3tTP~jsq;GIH(Sf{DA*C zIuQki)VgE~rS+xm+J!c~w70RorB6&{Ag|$4+!QMHIlLM@wI78C*f$NY0pF7ckpSKy z$#uEZNpj<|D z=)k#1mX>458?_)jEZx*zOaA^Rf+M%95?*YW?Lra06hFdoP3qp(Jbgy<)Rnk7s-B3~aE^o~|yuMu$$u-PGz5;x8j7<)k(p-`* zvr0Ec-h+#WEf(!+!gnQOySgK+@ALG^ZuOkL{{ukYT*K<#{I{pxy*b_(S{Ns5jJ}hV z`(S?ZUFeBp)K~VO=^%;EpFKJllBkP|RB#8ayEH$#77VEXyg}-;oykqp1ZsZ;mMzB*UEYhV$+naaIBG ziCL(*L&_LZ-}Ik|p0wRZZUz0e`;d?7TR`!xmoqJ;Y24y+Wxh{!FVt+Bxrw;y){}R# z08#u+!p{tbS@5VeV;=8>VdUn&BOg_DDZ}eH$Z-4b$j2Upa}KMq=~!uIapEp|6TWSKjdi3B4z{fu$I9~m1r)LE#b>a= zVrx3g33r$15GCphVPVMe$<&h(c0t z?B>Mz2XZSa%E#Epa~dfO(^|wDXzW&{v5sN+^9rXtI+ho-aJe>$s)bwg7dD-~%GZ!r zb{UnIuUmEPRbhjP8`2Hn`1^}n?&)9%c1H#5WOA+MaIPjRGnQhfF9RycoJgmv?_N~X zb8^a8*1p$P7kA)rqHOqWR7G2?7I=Nnx%zsWG#6EyDuss*8Ezm!J4DEXex zXXN@@FLte-wyF7rvG8*a05zyPMPc{(vharjG*Ij?W!ICZ@IHuLYLIe7s501fRv~+! zF>KnyAt0$eszrOV|4Y0ccgT&Lzkh}IwQeU1#ZO4?qosriwCwb*g__n=!`s0z$6hGK$fKIMAbN10LvT3Vv-Y0 zj4k~oS@6K}HzN79c_JEF!-PZ)V15NR`h2Aql&>TTpY~=iq$F7bl8GDzrJLa21z}i2 zcO!$X^3Mz)o2fY!O5q)@=~ya?ot8GMVZ4c?4&pZ3s`ZL}tZ5VJFk})jqGSs7q$%}l zH0pim7^J}Y;x5joh%^PYa5`JjC(L3h&r5?Adhs|R^-9>d(QeI~cgdoqIj~nXF}Cq& zv|hhKl;z)IIm1GeYT&Yz02cVB(Y}g=b?TK`PE_PEI%|?2#pMK%)oja^Ku>U zhMW*j#H{7_eK80n1_&3OEUUIa4r+xbT2u5Z^@{Cc4}0}wU7UrC3-21&Wre`fOF3LL z&mlYXZbKw-q-pp}^cl*ylLdlgqPG8{hdrx7nxk{xQ-mus%dxHIlq9T7R5a1EP+9NO zhs;|C9(XZ4P$+EX429!;x8c@~TinObyXnb^{k0l?YtuvfY7_+LeW%CG$s&H={I~#5 zsUL>uH1h{W@NckkIMT}QI#gcD^355j6h)#BL0^5IM(L>^N< zS9Zjl(T+XgR?i#iR7$xHKguWvWuKsc0ucN`8q-c9?;p0Y=aa)ZfBB#>SXA(g)Bp7aRl^czLhFT4WCv(-O5m1Flj}P#dc3 z+|ts;0h7CNo22)17I#Od8^eC8X zOn~3rSuQ>|32N*n>e-zDGtkkdnXbS=B+;5Rbe{{|;}9SrS31&w+!96~;w5>0Co=Al zls7))H59M`T+cTP_6QLlTnuc}!cjQJhy_R}__}5zVhffhi^{Ev_YoT{w@ZB1`)21z zsP_AjAlGGaPj8mZtWX&hcM_-?`|&qQZaLb7I+a`@)0Rcx$e{I|1;FSO!Jj^03Py`-Jkk!a-~I-a`kcy@$G|xl^2@q4T`!X*3W= zfFIg7UDr#;d$$LCIp<*)H^!v@%e-qm^>{^8rAv#Us1c9^K7#a>ERuw#MJ))t&R#E~ z{V_YrLI34r?W9%P2toWKw=q_cR4GMo$_n!vEJwrG9g)$#6U$ok4}2p9XHr!IGK8Oq)m@z8P8ceu$kHGB9Wh3T zSEd80ITqel^Odzzb3Ja;!9O;9U^vN^9FZc%V&Sp4F?!s`mMoSyZbs7{_4qD?TIv`s z41WCbmy*;BP4)A?Q?ypSSuR-l6Cqa=&9W|CygOGm?#ar6o37o)*40AEKDCO+Pb$XC zM{95N4XE*IG2b;viU>vr>1oOuq-ccHYHu6Q>4ikV?`$Q;4%@Jg8oQucD5iP=)U$Io zbvE+75Yr2Bu?nVGIE6BBmN*gTdwVe6#jey&V%1NFeOKy>P+d<{8p=xyMj$T&{A_br z?Tg;ymk^*B`~-zIJWnrxg`N)P`8LU>z;W5M7*$qlM-DUwhBm*}1t+Gcg=?(~DBiejlWs#RN_kTOiTe%ZATQcWS|;$^Q7Hb|Oa>X!kt zk|ZQ}jmoebb}b-ES0CwJSNtU0)?A&-;Oj!e>0CT9urw7?g@R|OyJ80qd@<9U=%6c=LEnb)H9uRdTlfn)b z$O~3E&&Yg7@kTh55T_!@gVYOH6t<@;XsIUqRLqfH^i)$-OE0kd>tdyl^kHZIe8-c# z1#&>lrQRr!K?^z?6-k{#jm)4|Drvn62>CWbP;s)3MIqPpH=jgxQ6MwHBOwK~*e;`1bR{O!y- z`XS@fs-<|PM>~84*Z+7M0LK$-HjZ&~ta=&?mK6-Yx)1c)PFq*a2R{RL zY_Fcm^7ZvM*1)mvZ{kY6FoAM7MvI}ZBq=#E9R}K-T_ATLdAS#_e`&S>YkdX1(>ny;w0Oe zL949oe7Ab24pGv$LjoqZ&4~GVBY|cr27nq3VKo&2-OV&Zm^$p)iRdVQDlMD01tg#~TsFwj z+GMM2Cw;m68)#hWYE!Un&juwItP%DZZWdNqd*si!uvD{WhK!9xqmBSZ0cPV+GRV^o zStNneTtHTREEL4E!s7hjk0*vkLD*?e;%dpkGz5`Nyg^=3a=B9rCGCz=%(THvjeTo z#^j{AMdBU@w=sI)d^|kMzOi;iH{T_}2G}x@T2}U8RN`lvagHTh?>Te-Ra>28v8B0@ zt!RQiKd)t~hpO!BRhA1E$uiSe&w^)#UUaw-XG+d%awXqaex)%6)?=UE5PLk! zZ){XMTzL(M)*40msCHoIVard%6aA5h0-1u0l-F$R$9a3LaL5=LoSY==m<;J1g^}3R zu%&aRcJw0qTWTb&oBELt^yZyAcUG`e-reuEy=%@jkh=C~yUf$4r;)n!AgHf-%^8_4 zIobN%xVb4T>c?x$ZEwXnUKX5?*5tnD*QAB+yU}1ccbPY=hKQ0l@Zy zMuz6}5792K*l8bB&LS~Dz$h1_6&&Q-WZUP5#>Q~ZVXL}ohC5|evdFZjob@TjptZq@ zXB%6&zN7kE(BTcGYi?_-I(0+*6;6HSW|Pl86Rn>irWl>suo>L)@6mkc6IsSfan7&ozHNS-erNScUp*#}%~i z%d+%;`VdV&fY3O;{uE}xH6mkM{=Z;!a|Cf52q#5&UpCDt2s{ag#$)0ehO!futSF5) z1+!Y!TlGBLLh;_9-x-~CJjOeuxtYw)v~a$Pyf544nUJF6$?eq5 zk*kJpue@duR?eioerQ0AL`SJ_?pT>rXvHZK7&%3%1G^L)S%6W&y2Wx9*>9}9D8f|1 z0k;R^6;8mh`?8{y#?g%RdrFS_vO%BK-Wolizjt7x9*v>+ewcr&w$z<>qf@p&eYh}j z@u_znrLVl7a<{iy@vkjXJj8>_!MclJYdv3D+SZ8+8RfQ|z5=acoiY0i1_q}X{Lx!V zS;CdQ6I(|mj}4_bc`#F8JGqyF9;kT8@MMHzKp}yRsan$>fg=bd9chEM{N7!Y^pK|n zLTtFJ5H${R6-vc93O1mA6z?1L-r--H>cUe_Nd~DZjAg-#%5Bp#QpXNR1N{xaOI~fD zW8$h>#*F>mrD@lXYDR!3p zegbYv1n_lPwEw_GeEKwh_y}Y3tQ_9jb`~V|h7NOP={+uxe>%%}jCS zgC^s-$3_*WxX^(|Nk zd=q*Q4o`ml77-S8N6-{~#B4HZpAl@U{4a9pG#4`fR_Gk*bXfzL0@lIR=!Q`WH;ZaEc>o4|F;z+hiuYk_t*=Zy`I+awkXY2OF^k)>*aI*R&v`1U3QYdLA`2yOBLMN4kq;<$D0p7$D>?#8)`7uvJ7EZ5oStO=X(7? zQltl{aE#?|vkA*y^DNZsJAlpgW5e4BzcSn;DpK9k(GdGM%Od)YLKH1ZL z3+KGt2YZ0m$_jwbA4gJG1jhruAa+>)!2~H9j_kzea(($&Y`PjcIlvO^dWszzSa7;M zXtB`{Mj4(v9ChC`Hk(~=$Vd{IbT>3YF2m1n%dT-euX$IJ!Z%buDzf+y$@5ggt!KoCjopr#Uqmt7I+ zu=9Vh^)6sd-TAuk0>r!R_5zMN)?KMup@CBnIO2ee3MzNV1qnrVt3g;aum?>Tky|@s zTd}m;OQ3*q6LKX`F)OJ=$(dU1E-@7)ftnDqbqcLupamh)06p)*>Fj-;?|Yu{=~yj< zWUcl8{oX4hK#18GL0{M`B%|Ua7;als&>$}EBXx%O#~*NEf1XHi?U7pc;M7Fr%OzD; z0X-t6S2S_6X$^^G4|2PAB1Dl6A=#P5slr3S9p0chPgIP)PBdB60MtQysQB~dn{`=o zgaa0k@J@3pj zZyR94%l>vz->jT?|FXKqunVe+L1Ao*qN6505~`%o39nSJggMeJPOSfasVAb<7utU% zwBbm`$;wL66k)e2U7^RoQw8TgrcFoZ&VB zf792QmNAk)gKsD}Sc$v59nbDFVLS`^ zUsM>fpJz!1AvAKM-jw2xep?~5&qW66-iMDfFQ;f)tx88R_rCz;Va~ur0KkiA ztU=j9>FQiVlpg6}>#hx1AsD9rHL$p9)jy6!uS80dKraMgy)Iy>0N1S9=tOx$KP zh!0-=CVpG8!Yjcg@g{BWKl7mC{O-qC)t$!q)^7&>>`4DQe>9QhX`jOkD%U2{Iq`QU8Hz(kBa?~G)o(sw?yg@UUFGYPX{l4 z(3c`DoX2&7B*_&%Fnx}U>W8=11x3oSOBIYm4_S>BElV5>;x)Nk zA6q%vZD$V_z--6PK#~n#&td%Nq8}IcN<}Hv&AHVdRk5WmWfoL|Wk~2?HZ#uZ^I}_d z!!avoonwY_lOu+z5)oM%eFEbE!1OTtQe@eHtRTvi(c?g-VOHFUrBYbBD7|t}nj$o! zDROZw#`)&mjDzjfUAR2`9yje~#C$V8D%NyeBoJ^HGDEEj8or#2y^8!g$9&#zN+y>B zUci%Lb2NpowgSRI>+J9u-NS}dKC$Zd%puG3BVN} zhfA5Nh1#qP{Luv!hepzbB^tHR8D`;dnu@q1*?b>8O1Mh6rRy!3kf#d`3M|wc#$HhI z(9prQiIq;U^A{#!K0SejBif?98u?C^&KZ=#uH-pfJfk_@Pu^uW? z_~Kt=m|7D9f`(E1(K)%3a~d?l5mWL=^2U7jPKcV9Fo(E;AU|z9c0jjH&5763D^y$3 zD`W_{BJNryl9W3u=+ryppBst5U?IApxa-g!z26WgooZJPi%^9|@YZ1N1gcPIgk&b{ zGd-nA8kKnCqIi35yj%Bt(%X(F)rW&fWPkwKo$HAa@AvwS>hjNl^x~*=X`2YvAB@tW z<3ajj2px%mfbE&D2?_q;OBFFE%*N+6*(E>j_+c7Q(9&naD4DIvbYaUTH-_S!(?{BE z1+@?-(7KIa=MH8WK6eyn8gVzfQaiJNzQ4>9`*qoZtrF#OFybF;xfl3;P6mxLsj#lh zYGoG(5x(NvJDn+M@7aV`DwX!a=}Awj53kXbAPeFi=~E zIZgF0+@?)|`{OzF3)`{zXtO3zAfC(z&r?&q8z%ge)Z-cl8FG28!Kr%KI9``yH@bMt z6CgRwVr1g~&gR4H9DmT>6E*@sVD|?*YBDie@UX%^>*adZffezX=GLM26p3TiK$X@o z)ehPn%zd5q#jXgf9BjZz@fTsQCEjviWQH|aG@^NqIVn1F;2H7@Q81i?S7!VO(`66J zTimL$C~x&3P55u84VxawZYsDUQ2+~wf*Jr^11%8I<^zI-+#-((x*YzpSf}4Z0fKRZ zXB`P`k!eb}0u13EhZ_n$A7KxaZdEJzEW55uiNWdAGcJF{3@wlSh4s_yuS7*-vFHuP zgp$bobDmJ$Yqutk-aLFW_t}SOS|OE@S$-{9lQFlBqZXWInS4Ep$EuAk5xR%;!lwaS zF-nDQ|BKUrh@0q(v%O=F8aj`r>8y&{J^HtUOw*!#_6}&xpdygWOH~+K&4}n|whTZf z&2Ic)KKYp6%z~2!@ffj44Z)bGwyJ1s2+!}uv#)bEVE!Y#{0vbyIf(48yB)sqwV3ke z@2-`&-|1}`TjkxV`4fe@$!Gi17@G`fXZ>fWwI7vy&p@u}bxltFa(NV#*R<@?9Ys2Y z#z{!HRg>{knf=%U>MNeCL}2HVwBXI{8bf04!|{+AJKH>~J58?b$SX9i zhNOuhvOr}Us9(lnE%EV#l)_<(4|jjFlLvXryWgpZZBeI+%()_?sP{my}VeEVIv7JRIe2%|HA5X9wi+(X{z*dg`2r zqn`X`;PLE`;Lc#0;!s?d7NQ)N=piy=?82-PDl(u1@C!@?`d_lyab|7+H@@i>4eCV@ z9vPOg8H(FNw`!FJ`SM#={cWS;-4bm|`t7u$yUg_GX(^XI7^%Wur=jC|Bn{bn%%4`j zEvCUv77#%wUL}ZIcMp^qarDs^aD4Q5rt)F3$G=_!W)Dj(EtaRpChL6g`;-iM%P zV}yShVh?g)C|xVqIvk9575O(nZh^eBR2Z7ds@j!UP+YGtg85wJ>(S`TZ=(FGxqb$< zQo$$ha?B>-_FyHE+W1-dZ!&||>sKsHQ=Ql7quM$?fOy8E_9KxdslBHWts6-SRxHMP z7Z_6gtPRp+I-ln~3;&Ri!#&*tiPwVkz_hZLr{sU#B~t8J_qwakU*SYeJg4DYn3-JF zND&b^bpx`bt=91#HJ?21IgJ&#U#b2~YLS1{+R5K%m_YO@e_9?S3og{k7a`};T&|VX zeT^O`T)6M!$yAM}BW}QJSY|Wt9+xU@+sOcmNe23RDLDcKG-ZYtNu2TV1#=QncB=Mh*CNf%>11CMWfU5;&tB2P-yoM zvp$@s+&N{R&P2xAszQ}w;jE$K{5Aw8?|aZ53feZ?F0~Aj=Pdb#NT>pcz$~L|FMvc# zqQ(#jDAtXgNkZWgi9gyIMjmG}g@8wm3Cak93^UMHvtgx2RIPwNuqdSZ3#2Q7%xvXJG8d6|GL%GPj zA`fi$?TCb9&HFE1JW@s3PE`lAMEBwzzq zf4aaS!q(=p8l7$i#`)`(doH%oZ35 z)+ae#r0!AoShLCix6^?RKKND+jyn2bhZ zc@0@3;s2uGLl>j!nu?)p%K^^lZ(5uM?G5ak}7yfb(>$#^q*1C$xm2qA+#7Iiz1R3#3q4*Wf4_WIb?Fn zdT0!zs?^39Ed9}-@?VCx;T^hFr$(qAE?P0c#6`8$yxkrHXQlT8RJ9fjpP7T&idh8# zE*pnyvf>jhc>~&*D}0gs2cA6WSK^JyW{qPh&E;y946l+E48p6(e5jMJDvw_KQ@6W< zAuI75dsOh_O!!CDH@ePJ#p8Ycb&MZomUfh%+}*RXGq?6NzG2Qz@KB;Uxn?MR6y|RfnLVoq^z6ulc{XsfeE^U1v*GK@MrJQe z1QfO_n1MrQCO!Y$d6ecWE}hHi&Zu;@iqaF(+8cf)-Y$8zo@hW~Uo*P_xZ`5zMSU21 zceK=b1_u4b+=H)W!*!?k_@B+ z^qRPs{5Ky0lCphSIJ?7{nEYYi1dK$(d(k(3H?NgEl?kLV*Q6TzY>dQJ13`u)war6^ABeD zVmIAJu5DTFPd$~udgejwkeWYE!#jkBsJC4Lfn4u=BIqTYnDiF^8|Y0m(Q$qMFr-5! z7D9gwBsj%N0x>SFM_a9XaK?bK%n*gz*W0M;YKIB#+NOi}Abv0il;|2MLFnU?I1>0{`%7 zH^xxBiYrI!7XuLO!Q=KTC%0-3uJ@iZ8WweU(-+h`|HRj~p}!>7!nwl5Y>Dh1riU8i z%g&@yPtXpbo$Lk(F3&!f-?19+a0&hf4eRU#W4|Ul!R^AJtdabbe{k&pUq3X@lyzWt`y3T;Pc{!l$Om*`^YIu9`UNsh< zKos@`3x~n2+(E#lj`8M(+yPmz?=X>PZ%8?w7{DjiU!A_V7XCuD||Wf z)MRHJvZr{FnJ%qH&?!$&-QovKM#b}zy>2awv@ zA>y1DVc=tCtpjxaP^PLYsKj81fi;7qg5}mN?C&{q>p7B;p0$H~C7uB-Fm`OAdA!8%RkOqI zvt;>9H6V-k)|agdqL$IjVK8K&$fX>ema*wZQe(P56^)3=z)oJj>Y}Z~I0VUG>4t+C zDW722zbJ!S?+}FkbSCmUx}T_Bv-0fbplz0Mia4l65>O9_+?Tiols`U%RjeGp&LZdVa;q|3{j?ES89>!@qdZHupf}K1h9ua81yPntzE{EsrD0Bu)-Oz= zi&JNI43gksLM!vSKc$2{BD88}qPZZ^crF;c2yXdLE~(4{B1+j&t}^mfll2SpElKS& z5EA4Cjfp^Ka(Dk_jRV1TuBV{|S*4&){YWK7h$XYV4fold+;v&`Iq7KB+S(-141mya zAtR(uFzI2of{@9oz$pYx^}pO2|5nM(M%cZ5Zj!g{7n72Wm7JFM{&atDFhs6c$ji$1 zVGFAn?T12L*kS$CjH$h3EVVh0;V>zrH$}XjmXy6YhlFZWIJyOup?(ein%1F4d?TX! zYVP)`Da8DEdrqg6d??8N?x}5}b#Ts};XN}x1A7hO9l?#5uCB#LWfzA=8Ptt@WbGbK z9`74;n%GsA=hX=M-L0S5VJ1$CljH~-fcQVuUR*{)J(X@Y{&YmRchizt< z+7ec+ayeqCeA-f`>*#MW9pOZzylw8Xb;N7u?0e4JKd6>H6RHY%vX=K7^& zI>yTnYH{`Y;|MNYly()ly4O;i*^y)4UrV2=zSal%uMm-`%+BGShS+gAO~kDK(;wB= z!wO&o!Fq1T`?J;GZkgN4y-gw@buXi=o1k1l_Y{s<%5zY{!)0)!Kv*eXNMHa zYXG5_&*k0>Uy(8ern~mq74S^vw!vM&`k3r2#N@dMD)VMc3y03AHCC~gei6QlzwxQU zJHd_F96b|wc&lYR@DK!kDkcV5ah?|KcOgN;>KyX$wAr89N0lD*f zz$ytYGdp176`+h2%LKhpxa{dx;kadN8knaRlAt`H4q_@?lcYqH8^OJQ|J>oJExFo` zYZa|o_XgkcLbmnBv9pZE_rKJ4vD0tp7=IeaVvsHA9X&j9@G4)2+f?xxnqr6+`#1w@ zB|3)!@F1+qubJzC5bK$N@?iwz;^GCZ68~tPB6J%y)%aDg<+j@##-^ikr18J>HPadW z=fi!5(-m7vM2brCiD2W~ZGQ;$=$uSzoA9+&Ul)UVf$s=IL=aQ}@aEDc;369SoM-8= zktEJd(m!Ib0C=otS)LLA%W>9;d6Fn8=|1N4uI-j$lHLwzV1kc!Eqn=#s-7Rfl^6$0 zZdakMxQbTm(PTMI!h^trB8d)kf!UW1FU9nWo5}*M68?bwf+NXmCZJ#zn%9?l@tS19 z9w9b6YdkUp2$EV32Q~K3i-{Oo{_*ATuD|f${eS;S*S-8x%MY(K)P=3I(_hU!-CO#v z7~1LQ)7nS;Z#W)`FzXcc77o^V(G$LAp2omg*~$G&u7OVKU!Burjfw0BNnT**iHi_{ z3CCRc3ZwyQ1qW29%9KPMfs0RQHrDhBh)~&&rd4X(`tHg)-{DjIhwNT1ghmT$YIyq( zl+Q4dp006m^XBYFdUz zXbY!wt0*;RQ0jo7G&EfhJ_1g+qg>x{35P1(Qd%%O4CiI#sFLtCpWAJgdQ{i87{XW2 zD3jzRLPc}Tx5Fv|lK(#LkwEWjSf|zRO(Z5oP^m-piysP&*$#QO8q#KY8y@e<7&3pL z5ucry^;Bg-YH?3Y{2P(_{p4ZoKB!NAj9^h^-z=FsRGvn00rgJYZ4mUVs|W zAyh=$igJ;9cQjX^ z<=TzYY>g4?qF_E4k`(IM$;HE;w}AOjhGs?~(kFLP5S=r8(|a_HN;?9S#W(^U7RSI@ zs3<{du(K)$6@f@T>|S`JXsXFV$x_F#t3vKJ+UqnTc~$jQ5mJ`ku~P6+7@5{$?kA<5 zmsAkcmu@~t>o~oc85b;R4ScLyxA8ExX?yQ8&`N9~|)_3g6FErqm`#SbwmuQYGD_zP)mZHlu zuz_ac>e_FEnHvVlqw!Z^q$00sj*sF2l+5clXwdT^6kD&>%*xO7maeK*b~H--5E^OO zbIq#+j0J#&sIHcp3Wf1LQepSfcFb4j1-i5#z?ECxdkN6m;&TpP{N(&5f!QL1PZ-Gf zJNH37qD!V$Nw=V*@i9V^&62|@gR37@YD4OCZaIzb10-dDw$Mt66V?NDUs2vYX+kyL zg~UB-`1m)V8UksQL8ZS}JtI+wyMS8e+b81ykl_FU*|OA947LRmE1n?m`B4Xy2|YOM zW3{rg<2op{NA}`+a6xg!_k5dI5=Hpaq>>9;&Xxkic}dVutuGNu*j97n3D}x+$*|?;8M)POaIM2~JFYzMZub-E)lF<`A{OEu z1hVed+#B3ypetQanNw+)Xi2w19^CN&%-+t`r=;A0>X+LeZgW&+2OLyq*F0|on9*s^ z8aY4O@ts0*?5FO9$AgCC6H!+oHgXgx*nDO6c+r@{vvk3kAEs;anxm(V##hOQ#U|@a zAin+0@PEjHP=u+u=Cg#o-?{tEx{EzM6`heg)rLn*os zyrYY3M>^O}Z5Vle@Gq(6cYh^n(}QOx5xUdKJv(^Jk~C`~k9sS8d+V1%Wa*ESp8Hj$wbb-4dn0-Zi)sw>>iV=n8t+nWM2>T%5#mXU+@iyTV`63t$z2 z_Scx7(vo6@XSvfPpA6L5xP(2U_Ti1tRf^*2O@M%|9ZH&cFse{!o!fFR;;{N*&YmFJ zknh~#l42Pw8Dl4>SEW9e_t;s}#YkHOWRwc1zFw3Gf%*~v zB4Ao}_)IYNa$ZGCpQU}gw(BUb-5-js@?m&YSrxNVnPanuf>CF^z23rVkYJ-gSG*333;{pYN5*h+S zr1=k}A-Ly?V9}tIK2d);!ju6k<>J~QyNxcK7efx%7d)acmb`#uu-+oHhSqz~@=6-w zxIh;R(|@`U-pMk8Mu!k(L^Etk0O$B`>5N=xIJ_(eUo@v6Cer+I5Bf_`-- zStt2a>^p`I^mqF~tK5o9&PYQH7V!~UY*UA1Je=jdrJJs2t&_%Aqi=Y9jhx+tw-@K& zwgK|1Ovx|ohk$a9 zEC@Cv`rG+ND45Rk2Ey#@Otq;mO&>E2W~#$(*`qcmPou)tNZ2uaTnvPYa3{(&j-%~% zovcfxMfx#qLO8X>zjQ-9y9tPzPZC}H4u_DIEfxDDT?6qA=b{gwIR6=>9sKL+d>Lx5Hp|u(bIUssYKTw5TeN|{Pah9rxN?Zx{lSMgfYu}^kPy9C5igcg zkdHi**rk?lx*Mg_RM9cI+5sS=;V8?|1BD09wSkp}KK;_24 z8?8YC;QEmnwlDgD(Xxb(yb1v_TR7GjXj6-MJf0-TR;2@g+lW3^!~|%V!`=|lL569$ zkPH9k0q~?Qb0*a6>_~9g{}T?4H40jzhX{l8a~Mk`jF(izE<^+-da#4e95m zKA%s-_MS1s<<^Y$2<^F*$cdO?4WgQZ^ep|o(a6_97Sl&-I!q!aQmoD)A|-#6TLRtl z%ReW^(=!Qro#MH?P^f4dHUc|P_Y{v|cnujtATZxQO}WZ0@lnv-3ho8lM?Y3|5d~CO zBUgj~ZbzyhmZo+5ANV|-E;%iAX;pPqr?tSPk9(cIUxA&RBfSf74OZqEqsP^@N3yJq zyJ1d5frzBd;6M`@gqP2yP9wHR1g}j_SKupWx^9b#wGGhWp*Iv1*xOHUsOaRw85W)$ z90?1lbC9n1_BJ;2q@CClY0ekEizShGjd%j(RyT8`-fWUM?mK*@Gg78u<;|#w8*gWA zPacYBfR848$sXEAT@VP1jY%Loht~~)XJ_i&XJMzD8IiT9h?ZBM0d`V!$2tS8!Ob{cKee_WZ#$%rF)}h#i!v@rj##;?jKHJU8q0w*SLL$4bxb5n z$rMa$7@@_;>~r1pSW;x>p!EVtn+jGmew5?BgAk=yNOX$z;l%t5rq(_>^k!X@uHanf zB!k$Q%HKU!;;|3GIj)ExgZ9&H2vQ~5j}c^)TPmu7u>|g!d|SS@erX$b{i(ul<|dEb zOuL$Uu4JHoNlw^g1jo0S!$)>5yAKAB2Y$9@5T)U(w1sDXC0tw2-_|^5SLXKvP3N`d zKHvRc><5{5?>(w9vZvYiH3{w^G-+P%2EqMl+=hqRMdwfCPRTT_W3rfgj_QW}Jieva z9+q`D)g-h`pfAd;x7=tzQ2|(0MWChdsi}TUJ&^9m-ia=8_lB%s=Hu8=x$Y!nd%6WF zZ8d?=`r*gAW85;4yQO3-FyFI6(fsGE%2Cb5yS6d^zB;|b0sEckvS{t|YBm4aJ#W*( z$&AWey=K%H5_CC8QqXmFym6Eq(_MQteS z%s(hoO#8e3vxWNPta^JLjGQZD^x8qpDd{(%S(fkPqL|@UxCZ;Xf)*A_Z@`m+@nhKtpR|_^7!ldOh>|k zAF2L7dv8hgIa4zhz;E?P9c*>n%DMXIV&2@Ae#CJSd25v&k1Vrt>Jjy!GiU1;e5tlt zZY@z3D3{ya!L$~96}>vbscb37Ak-4?5wU#zX8Go}vE&?6OIiRox81sD)E0bKn^mnA zJAT<0b=S~d`sQ4EXnsjS)$xfa!<;Gdo+E|a&$q+5>$1KFEiYLXtdI{rvv<@|tJNk{ zF3A2gfkNSyJyfD4ugw{oyt#hi?g8wpC{N#K169fMwHu%kzvHAfu*wmU3~MJZR0jHN zA40FY>5@ccTmj-#X)-&LfHr$}c-5s5u)a}>jxzdQ?IpK+mJz$n60~G!faL5ht5#AX z8df?UY>0snc9mFzKoSZASjDDJmCM8FXb?dULUc2f6FD4TePMNEzw=-b-`%Qtm&5J4 zJ~yl+5(N+E?8&&qGZd%t3#r7u!C#5@5*Eb9K=Rsdd{-BU{Rd6uPTb*(5usYfX~JIb z*iMS69Ox(N-oTImauhdI^=Y=97DaT=0ki9fosr^(<9@;?eq{$`aNN~wox zBdLQMp<@P=Xfho*XM&y^>M4M52;nVM#Lz@Jts$5%djH4EYb?VVh&2;}-}&k5;{T)g z1kDF)8ci6_dqik;-^KZAo&Y}F9GJFB|Fy9hveNGVCk9$TBVzcq=D#7PsCg)<42%cc zN}9q)!aaVZNhw#W7AQg%_u4x}%49rh78sL!67gV^;S)Lx9QPLwnd%O%L*HQ!bU@Kv zPts@KT&`{8%)15BD^6QGDp8IIb%2S6d8%f1(BrnTNSQQ!i5+R}6mxLue|bVG>MRIO z3M70q_YOSkCD%z^V3XixAfkbY?x^a{x# zb(43c^NfWs3xb=Ok|#bX|?3=>Kqq0#mbls<<_pq55U1`4W9X5Tqy@ z$euJG!hE6`A)V%fbVp7rw(ULoUp_GQ|D!G)UoNwYJ;w z`>*^bN9O5GaLBVo2j>itT`B^L@@6UmtA72W(17CJEBPc;K7Jg4 z=vHzGPEZ1#QDD*&WnE&5V3#QX=)0F%fhB|@UNgWcqk7kx1gII^b$9i2Dz+|kH=o$e zN58TxpM}Kj@O22gKxL+=M@n z?~#37h|~~5-Le55h+PnvKI7x82K$G=)ui?Zepum3R?K6$xE(_28p}i`a#L~{roQJ{ z6I<~?trd9r4mPeeqxstFOlPbz$BnBQ_Q)88^;U^Yc;NJ*)vMgI%02w_zPr%Ae}DHwvp@t$4;h7mY>$if(%pyESZ zMP9TP2ZJGrd<58Fki5|gl>N?NLuK9rulAX`Tj49IEhxab0u_axZso;ag|C~gaYR|; zx?+?$RsWT*Z!i5FWV6cl8CxK`qSQN-d(~M!XGpFP_gKLAXpckT^jJQ^$zW$9kL%Dp zQ8Io%6Gc!e7r&p5&B_P5({$~*jdPyt+?j&U*_~XXUm2LOcsCV5hB5tGlCPob1<~RJ2_0aK_cj zW}>LBC~b<=E&kT}>L+~{0t&mnab(|c9*yZ8R?c0|_evIdO(!p#LBkg3OR`nH(pzU( zmf$|-5v@z+S;ytxy_U*H5GYpEIUg{q*sXOP@Jo(Ds zS~m}rQx1Op;v3@Js>2X1)D#%=l()~?MJ3kUN3w>_NPc_U>_qswvw4bf>QEV*rwHI$ z;+I|w zasva{my7W*T@xI}RQPov{F{4_&3>HWwE6eGCGWD7d~o_Yzb0(N4|4L$mzjB^PL=bN zDEFLP+$Yj(8<^YDz)l{^;Xs^J8dyB(tvtriH)71Jn-$yo>z7&7v%}xs=olDTiWXMW z;U5x(FgoBSu6VF8BC8GvT9n>tOdmD<$hr1tdUT!Q;Oj2u@tMn!0mfnxpyrb7w0xL} z5G6pz^Sa?cB3KY81)xH1*mNt(*hL&Kgxd>>e}pWAzZ^N;!MvWBsHCS9aGsJKrB)G(XDE#Hv&#cdJxrM)S`iSH$&1oJVr&+OW%)2iz zsMm5`5vTtuxa8r>?|!6RCj|a}M1LLm8ilQ0qQh)7lH9cptCZSokbf(LX*xUW4ba+! ziaA3Bl}Yf8K2XSDLV+$R@Q`X+!j{{UQVXvs2?4jbYRxZcrdt}rsu`+GKaqU!ie7u* z=GnpN^VhEzvHQgzJP31FqOm!pVsI# zOQja1;@r_5s~iimo6@SV3MO9DSgqkJ+k1-bJ8AC4B(_h}VJ2u7T<0y2S|Me0NvX_E zQZVcIftju+3fe1U*WN8xOO;VZqQw@t*SEK!3R^HSm|jt%&E}&#U7^A1md^xUs62>P zbDdWpTQ*cu>EVtZ?FJd7KESNeNd;voj;l4m#r_G`(Pr6ys+wrz4on9=B|aAXc^nV_ z2H79zl_t%@N=s47WUau(_cHs8_ZNx3OBhQlKzyebz}zmll~fy1Bo4jP$NKp?HEJCZzDd#1HE%Bd!ej`gnI*C5)xDbo@#c+965*W&|F(q``)g`>5eZ z*R7H(%;JfpfP@8bt{%?loyPWjvVPIEfLR!EcCRn+9jsr(2+oBt)=I$%4Hai30c; zP3aXCkBSQ->fI5PsSkJa)5o55B0)6{$P96a^KkB-lf4G(O?+-uaE>*O9)-}RW5m4+ zF$%W~yTTAH%06F>3k;=XuuGv0q~5hwh1RVt+#{`EsRl_vu0`L^O|IOvZ&>e;-4E)s z>=m1d>R*0IePVw6NE2mR1u40Qtzd>?w6{(PopO8zP%Pi12si`g5=uOd_>*1Vg}(f^yNW8mOXo4U8O;iJMt>*u;wmG z!?6>bKVXg6S($6VEJUi2O2+|!2Itf(`i=(PcQ(c$n$g^^&7&gXoi)G(U!=2b>jH>d zc1c%I>d`0II#g28l&($eu=By-&v~z})uxnaWBAvxo~TMZLV!iRWM%r~q*p62;;+I% z(|2U3nY%6+)4Yica-v7LL>p((0+8gC#ZSTE?arr=u>XE-dHCw~QEAvCtmw_0Mpi#; z6EI8V1!3t_jXlQWF3%`h|DfB=3UN~1$@v%2Mcb%ddf|lvsh{;Rb_>;{7*qQzs$XDB z#Z~k(QP^mt}mTO5Z-oWp>;OBT;GQ03< zW18veBlS47HGRy>Z*EukiX3HJLti!(SsuQs#3QhZts9Vd&kkMr33D~;U7Zk#iDp8P z|ITpdiQPUWYn`l$>gv&l{&uB1{~NV5JxlNRZJkfIyM!t`aV%EZaW#j*Qwyh4`3G}P zG89j9MU~I9-|_h@cXhU%Q~#2H+mf30hnHHw15FNyW)eAXUHwBW)myr2#qPwE|C*Lx zzGowEwcp5uJ(|Iv9?7HUeHK(=5xK_)clpfrDprYyn|Gv2kqm z7t`86iISCe%)*#p-b--*sxG(7^mbb6Xm9E+2#xNAR*qg{5IG;RAjeeN$G<99Umd)` zn+uXLl)USLllkw?*@={PPNe{9E0_!!bEod)jv6(qS`JcK727Gc<+;>#a?>pw+skur zGE=+m!$2q;qDi4i^C2=cP@b@V(7Z&*@v z$n;C6+(?J$^S?_k%*(oPl|-s9b)Jhb)8BTGGpg zW_IJY0SR~!DKb-O@@-{cq{$0mt(&h1Rsc>~f8lx7--pDgJx_%0lyk}GKWm%9GFG-7 z0SEJ1Rm2ynU^a!^hYnt$bz1}z6l+(Wp#J6XpN7s?h6LWaR(Q9Laa^+r+4>b7yO&x> zhGf^5U03~Sd-q$0Z-4lLZ%5S+d(H_pOtd4FpHeesM^l+M{S&@A5sVZy2zG#T(TR{t zV$*eT^y0QacYELN5l#)l6D+;Xx?2oZNi zz3UaOAdrqkYMWp}@Bk4t61ON{^Ez6N8HY4T=w*nZX{lu*F%C&&;u4Qg86GLUJPmyE+jw_(p^eWO5@1?8xF zB$ppIl91qjmQGkHPk}(FZJ+ae=@#;Jq%tVsc}FT5I@4%{Q4?7d2*)uOiWfTcERztA zT9R1t;V&PA0=K;5+MGRh4f3GdI{q?l5>#Be2aPjgtt=gl)+Eqa?d7UjON9vY1F7t2 zX$13Qlp2Y#4kHp;FfGHD=lO_-!1t|W+mO8p;Zv^K8P!K<|1)FufOpr$hgqmZbSo4w z1e@m*X}(Hv&z&#b4E#wZ*9Go^GYU#bkr2Ty8bcg1dX~-Em)77$LHsD5>($K}eAQPn z+Mlpe9)ZFP1q?5_RZ{B#+b#8n1q5i+I_;qJA)*V)0V&G$Gc3*8)Sg^DyK2gmUjjpW zdX+T8n)n8y$>8N(#N0^6D%9sXdG(9cJr$p7BM9I7Pm;X&4Qum^@BS^*H8Rck?Cf*7 zJCqpvoOsuI>zxR%_XJ3=rqJ|`N1B#wr!kc_b?GMWLer9IGEztQ_Ct(eLU5sU*XG8KYKz*aP0rQF^QXuIr-hn>mU&_uki6o z5gfm>i?Z|)}GQq~m(m#n()kktw3@!SP$v|4RY#0UT#e$V5XVFz3P1lD|3>y2RS z`oYH#eX|n!V_cgk0~l;bNhz^P0^cmg;R0Aya#1$HP98}bog14AjlpNRS!}#WtDitw zLg7R7N_@YDocU_e6rKgXLzb8l(L*w_Ul;hA{H~V%{)?qtQa#v^=_(*O()*p{1;8k~ zzi=YJ@LR2P|FrN|Vk2Gm6I5%MfZj|jf;|kA3F~Zv5@hW+oWJsIr^Z+xYvo!fVwP-x zKyQL|N~5z%pnrzRgT7G<0;3Zcw1e(d^vC#`tJ(cjIvUr*>^n23xsZe}L?!@#*_;WJ zNwoSiCGA7o@7N#+tx6r@!jNB&Yy%fBCIHHO0lFHX!pv+eeT^eqJ1c*0zM?r~REioD z>Ii?Yx1Bc4Vhq&@QJlMwj*8zBDVZIVt{o&r`6yeg%+8T`8$SV+oMy`ha!yA!ErgR&qRlN$dJlo3kcjKz{Ryo5Jjzm49(@KRwl)WfJYgaTm+328V!_x zyBhYNjVJlAo4-!?CypCs2};bT9zD-xVVw6mbE`#waLNr@jL%7(RH~?7LG@lse7GsQu!Yi5q{#khwf257F7U6V zgxZ*voIRuGm|xFbJ!sK7srQx8e2dG3k^LCs-+J=K$2d$q1M~~D8@a7}rK8gsX(LI& z59@}~a8B8WjbBHdslm_&{UZ$s`RL!>@SN0s*IT#dPvO7Qy$#Ri=d$Fus<~%MwW=={ zaa4ec*_xhL&uIJ+S|`8Nen<5++SDrKv0-CXQkM$>(cW!82XM;7hO?{_-%lLNN)Qy4MP#zelCO_G+j8@kStg+0h10oE|a|M9E(F95)1^6eS$xt&37nX`sMahOMzlX zEV6V(Q$1TVE(h((i68A=w7a9C zT5C#W39kRUt)R_khI;?g_B2ytrO&k?Uj4Eb{lOcYcRR|q{hT9D8qPtwex@6l+8qD5 z#aSL(^5GEK^dE0ogMa3n?mROC5#zCG&Ds@|Tgm^)PLAoR-a5f^ni^KLB={QHGCY-V zhby_4!#Ldcd1gIRf`db-%bztXlYRRJqr{k%yqM-js4>vbt*YsqT&`mTLjC`yOf~c( z`Ab^c%oB%T|1*y4oovX&<7E|Cad=DOZyt=+@?S#o2(kUH&Kpq)TIdXrSVK2WO!&Qv?PM0*y!iL)3uapAT7X4=s?W|}(tPuV&vo?-o#0EQF!yOwkMj#EZ)FVy z@aIO@r%q2ltijxYN_i@neX{tdVs)^-UC}Yhfvk<(%9i*9nNSYuw!S8=0WUb{JVsFe z(v5&mb9BDHwCV!be+2^d-Jkd5M}M$=b(Dqs`Ix4tJq=7ik@geEeHVo6g6qMTMii8f#qRrg*LX6Lduf;uR9(+k^z8qUXDB<<#X%;8AKA-`o zd17*B7Uq`UB)@%n9|!BpBE$_q)en4-mYrqNIyJgo3@CmYIT+!M9K~AO7%R1y zytYaXfT*J^8~f;{I69SOy()lN4P`8MdyT9Mqs_8-E>gRayt@f%wb8U1$#{Eus>l#R z^a}QJP+v6|EebpwY@y^UqYH06x)S9c&DQW$qX5vnjgvg|gXc&uORanTyWR2&Rq!=? z+pqjv{i38+b0nEFOdL;WQ&-y%hd@*vZjS6XrEyM+AON;(d9zW{1c*H0o_3H+K&^X; z^0HfEXc;aPt8<&^Y>|-CSJ8auzZ)BKSURlZbj(mk4W0lMr5>qHV}MWKn-AIE9tDI( zo7b~WjeF=uk4Tf?c3G}1G(jhWjMB|%CiIHBI zaJDtvl{JD{cRHPqBn>neRFSR^DQ6+bBVVcbNXD&p>tDyAzFB@cp<-P3J^30xl=4?FskPhh^Ig(ZWZO|Gh)k4GC$({BSO$XoaKYZES2Kk4BrH(S((Xdz z7y^JKcWby8guUX~uO;mYg!<;m1Xd05>#BxMFEZCkx>-?NMF!Nf~ z49e3?)Qlms@scu1k1nI@`N2OupaMoII+l1roHk3u7YTDLY~0x2i@R}d6%C3*ekE3c zDFYU^fPK_yAtUC7tft?;QFgb@fx0i9H$9++dt4T(&HO{xBXbATHpI!N!Q&%>MhpT# z{+oRW;HQJ4?;Q51`1Fx@)~cW1oaWZUF$%>#Z)Y*5en~}@cMcbBKFs4wufhNg`{j86 zU;C{XxR^i}F_wA7o+@>f;*@Mrnm5)WMk_U9z@wF$SVA*0j-k26?rM42e;Y)s-U< zsMJT&FDXJ2?IwSU0AYrrhXRt4ZZJTZ~f zuv0BB)D<97sbody`YKwoM_hHtwfISxUg*YvekL8h)c8jdi4{cxaP0)H@xPB*>s%^n zq*Y_ZR@17PPv;C#s!wX9gaB=5A6$`mji%|oLV7Cgb{<41TweDAMRW{@wrLh~EHeyT zCwrAB2jbuoy~E{)>a-B*B=w*(z{R_JWd1L*DxE-qE)=$L*KVJQP8sVh4Qk*a`k=_% z7LfCWNO!{`kIr!Ftd@hPsGOSIpTQUZxWmOAXXTn;MD_7SDao_L)Y@-Ou66pcloo!f z&~j3{T+vw?M5%bjEmo=q9nvXJxCKKt%Ev2*b0!rdbqlujGFmM;!F+$F1-niO&cPK2 zY)`vgIx5a(T4A$3PgkPp>`Vu`blCOF?R)OcrA9zG#=Xa}rn&hJww$%3Z-3Y`3g(GG zXGfEkq+lNwjiwqPm@n9#znMC6*TNJ;R*u)>^S<%GE}m^Dxp^qJD4-|5KgyCUAl?mq zyzOUYawR+d5#N-!Lw}}t-1LQN>s%02byDrDsp*Wb-zLOUs9$}ceC*VBw7quV?6@yd zIxfpC;j(yOyfQZF^Qj0m%`hHMYZ8>>-Sh{+6lE#3xPEN6Vy`?ehAeZ_{-5SE7M=$M z-=!`TNp`I0+|my-p;ft$JU4~?_by}8t>m#5VO@~Nbnyfu0muB|Z&On9n8|V1Gc0P= z)0!d0NcitQ|FOkZq}a33_jkGv1*z#bJ1&Q>U@dd7$q23o2{l{!rsGf9h(Z)wDDSWS z7mU-KEj_-TZ?yPn@MydJMS8`h^6O-lGCeydGL1Uyf$22U)pRT8J+2I0$-?x>WvqDg zEkWw8LJT(?WWfm#N!$?!`g9l%lijXVq_I52xFS#Gg0UYxFPsSn>((f)yhF1Y zHRQ5#OZDYPUueFqDb65^?#8tK9bX=GvlO|AOZm^}*@I4dxJSwRpP9U8t+bQ5^k1($ zN3B(Y+u^Es)WlpQA{@iV=GK>OnUlbVwHih*%;f1%Y&XsfBQvC(_H4G<$hE8 z|MpLG(!Tg>^F*OCq)`HGwHHRN<(3#8ybsWuK46*w^)HFokfnMtHqj$k(EJf3gq~#0 z$0|e-9ZM6}t;SDDFRjm9is;pvj-QiC7=cn3J)P*j0{ZqndZf#}WDDF(5eKL(5m01d z+`BAu%31(6Q2UeGyYbeSiOd&9d*GN`kkK5`z-fkLo+B~RPtBrW!R|45-rf84ago*- zvH%Kky6Um!NekHMfo8Mu3PMn4z~$8N50qceYQGXlYb~~9SPp6hNaF>XRB$u&@D+A5 z6jd6=Qd8PtQHs>{OC-c`&u^7Ar&rQ1anFoOcQWhanoO7BXP+`644VQF$ZP&g3B4U{ zsf10b)4o5Brfj*5);J_qZ;iTete{oN*^qPZCQS_ojgrM<6{wGM*|^_o z8nMK>0c%_oaXe9*YZZ46ay_DPf@}GK8vmZk(Ih!udAiUXuIQ*8nKP|K%=PN6R$ajb z*u;eNq(GP8B+Z&5Gv;rxA@T^KYn6Dl#GU52i;yD?D8gTkqj;WjMeA_&HoR>mq9@q0 zGcJ_;%sdC&={-kI6VI9iNh%%+<>xr(NRGG>H!(DX@hbxOs7oS_t9!*gHKU_q40eR} zl(D9m%Vt~lP^dOm#?~~4Vl|O%!346#a)ouUSMt=f3a=72^7Q84_f+9q+|_~&YEHeG zTOm(CX2GyQ{aF~94`9cmlV^z;Q`a5PPZX*MWZq9B85W^}5p$U%K8ruBkKMA3p)nx==?19AR4TU~vhJdlB*DOp zmM|jQENa0r4r;KFBFGZ55SU_?LMoYCt5b=o2nmb{F}L2rXf&aMh-rZPdmq})+<$(5 z*!rRrl9O|u=kvT*-Ntzv2Jc+H9`rTybuBLkU{!A8wwu3C&p#ovg%_Z+$cwXXl2I=h z)B%~UHrlH=Fa}luVLLF@{gioIwb}{@2C#fIWToD1-rl zzd-=TB3nyZNy)t?%h+j=!Z%0MEX>Zzw>=N8nuSg((|eYu{acsfT5$*_g zg;`AhXqQ07$HQ9m#_Pkyh8X`+y&tWVVc?hR_J#a&XP56>250J zk}q^O_QZ(F?ZZQ_floZ7eCo^Y>iRU?fd^4F@#1Xw=I^5$rz=j#DXAJYf^#01hlkV6Hx(zf}#dHaABC5i>$<%+u3BNuLTo7LVwvoN!{p$SSCjsO}`2vbz4 z+aJ%-*ODDFa9`gyBw#mML(hzJ@jgmSfA8PM`d$1hc~^AT;D=5@m+=av-JdM+sEPF^ z86{F8?TJCErE+KYO9y?^pKe!7Ii*E8amIo-#Yjmq4-Af$eX;tvd|&Dxzv>gNM~Mt^ zyB;7=7YwAOD&9YNGRFc{h6NCvh)XvozwnDi?oEm2zN@0T9&7pJ@v9oabE%ozYY)Hz_vpr*_C|QAp_*CNk%{u=*R+Ot^7cZArI&%*P+R;5PUkMJeobhAs%*xZrj{5 zrHQz);5eqSAT!%R>vqsOHMXO8@WXFlAbEZwu zfxPCHr(P|Pt|!g(DGCgvXBQ=r=Js4!myvjQ>A0!Rt>yiSEiNK0Wk|yU&gI{L4t0q~ zr^*lQ$DD4!Nq~}qX}O@TDT2+uM!40bh9`wqP62(c0ZcR$}jhCgv_@RL%R0P!W1 zIaD??1Emk2Q8sqyQ;$kB9+FKRI4B5N+<~((Yp7~_g>R>btW3Hz-hPCye8#zuYbUx; z<()X7PdaQdx9kS6QD9#mF}!Ah*9fUkj8ViJ=x}ep%pziLr6Lb7(>x--o^%GisD6w@gMy& zQJ0_-SkIN%=%C~is`5O_VQV6}O$$g>3-_^xA1D|KPw|-3k}8#X<4qn>BU`WGOEm?& z+W#ICNj#%6G^~f^Ig(OYLn!9QDJb^jX{c%rgek1R0(;uLR&o!i7E?ncY>cV{oYq+j zGjS^5a~T@iOQMF;S;}vDgii=73pBt4EE)~Z?gbyq31hAaUi}4H3`ev4fq|4 z$jYZ-5I~oF(sU!WY_!9<5Zt`9PqA-~^=^8(Lw7y(wkQy@-Xml$aR|{1?w^&uzkd5KnCbA&^ zS_va+%<2tv7!c7K&Ig}sJHcBANQ=iTY!KojUQ(b1BdS6%`3Hv!UwET4gu^0}tX~yw zhAbWdxS{Cz{}L;a_qkuS$@+K50wYjm3WMdN-nz<(Cfzr( z(G7yiz+6kJkn6OxL!I7z6mgATDtd(y0+GJWOU}w!^_kx$&+>Z8zP}n$@Q2Xnd7eel z{FkjdOO9;!-#PxG?CbHiFVD~0UU(nrwlyzj2^7fZA&{E`lQ|+!&WyvR+2e$cDi!)o z9>z<&I%J|CKFybiw2BWdyDW-iEZB!zF1??!^yI@S+10`YzCUe{zUZ{94gOZsBZ$;>Hml%~<@|?>a&>c=*^X zwu@CU*${XX5!q)EAWR&b<$O$9pvkc9eVCceTVM~Ch|xV_CqT+#R=Q3i59Csvn&_7A z`)&|!cl9Z^@wZ5bhrn9CjcXC+5lCH~qD!)T41fREOUyCJH&M`&YiYgAu z8d(dDU|%9_&=yJd>5THdk$eMD0NAnT&<`csrj9NIv5jV^r9yqaFr)}f`n0hD;FJegDrypp<$aSuo_pcBl? z*ws@A6>oD6PogUkBlx;<+ciD%LfPp@;5&~XPgZ{B^NZP;DrEkGItggy9H)gq!;)5R zMuai6v*rT(amE%(F+*cy0%VbP{$TT6B-NluaATvV#3Q=_iV&$qLjw$TJT;Nbz(kH4 z1N%@6SB{wRd??JpBUmmjPNq#Ih}t3~`d)UMFrsT*cCtRZ=6o?QrN)}n zZ4T2m8x&MWu0-?VICZZ8*6=}j)HZV@q+~{l=Vk*GIp71N(RK*i)x)odumqV<-l3228xo_7{ho@Plb0xPUvD$W;nvCpkfhDCObu&Fl^da0 zrL5g%&);T}z9KMYf`@yMb&IuO{1QKl{SQ@qb_3{ynJW)FqKLHK*uye_UfSbBvS4CE z$tOzc9Q;r;VwFWSAi^eSoyY)t0_9$>4;N zc|=#u96d}kpnGE6rhNylsT5CfZsUT}T!RJxPOXSHr!P{!;gCt13Q7%+AA!!g7Sr=yZY4D)uwK}0XB4+TMgXh=;OT^0~t_-yi zxXp&oo*`iJGsw5|1ZIoCnJX2@zr5Y*H1Z%!*~nwMSQ1#RDEe8X7;Ob?^Uo}OVxnQH z`@WPKTE78N8lAVMDs0TeYtNmnFQyj^`>T30fUB&ycyShfTR@6{7>wAY>c4d+RLxCX2qFHcBOzX#)2;3@IpvJQI0nOo6E>F*Qkb=O43Lv>Y8{tK$ zHsLNz>wXG~iLYmbIVHk$!3Y@iSIBdZ7PmTS%EGT?X_zZfYw&?|%DBanfie?5P#I8K z&C7b`lxDx#P(u_sLC)2A5zdCS+7A@sJhatofDgNdjKbu z8R;mju`b?WzLB`aC^jUpN#|5umY!u2K;%PsqlWq{s!sti?Nj(fhHIlb_6 zL&BJmGSuHupqn!BHklNoFY4uuEtL_L%;az4B(}E;zlr~JnL_1B*t2$h%buxNp1>oTOGE(wGq!;#^)~e!hjbzJ^%_A6!bZ@tP za|NH;mU1N@%e8dYKA>PH>)3eo^0 z2-E)gW0l&Ns1`#MbGp*26A+|x{kbeTWn-IMhP`om^aO? z3~p(jW;aft`=YPLw5~x}=u4pm%4iQR{SMSf>S7>v*$yrln7x_@@dobr=;{Ldzb2r? zxCF13|3gx>R3m!_vYtRbS+o!Wbi`Z9C#ie!u;!& zkzLBrZT6kYGHP*iM-H3%Ip+$%!7jPT*wM!38!4N&-vouoMGMms@L&;l;pmPnxiHS_ z=#}0g8_Q2|-VZ70XhV2QE}9>zE{sdiO88etuQUSAYJ?Qw;Qmd=(RL_`SD|0au}7QF zxGSMlRAbIYmnJ0PzBGD6d_Cw zfn$=}fqN&O*#>oS4)3sjYN!?YD0v=RGGCNCsAUtJbIyJ<+a&<`7UmFew(2$L2xLT} zdGUfG0>}&rT%gYj`Vx8Xd10fPpL}hC z0(1a48;rx;g9WN^3sM0o>uA%%_lh^WRX$fkj&hm=cA_fq*l^|~b8@OjW=taQN)Ss@ zeau>B7<_Z8$nS<<$wO6^K=U28-UeOKrDAJ`!v(njngy`JVv+{H2jHo*eFOiE==3aO zm)nL>OL>b?^pfp*lE5rN3?e#C-AaQVd9TQWA$eakQxom+@lc(OI*n@)ILP_rabG31 zHR5LcI>ZP}MTL|qrf?}Bw#6WBM}(n8#bW`%_*f}Lw5k@+#S0m$u;EM=lBb>9HO8N2o7IK0{}473m3jJ~<7Pw5EBns0-+NQ45j=zAWoUk)Q?c_= zS`ptQc6J(6kbKcLee*bOd|~Q;2^$mra{<4*G#P&uGnJ%a%33krlj3!{wOVX$#J(0f zKb_kD=}}$riDvKBLiRay*1O~{^V3gO_}iSud|6M#x9n!`d1FE6(h>23ALo7E=<62E z;Ie&j!;jw9^NMN6wrFU{mx?CiZL=n#D8a5facSXuahc4IuLwg7Q7>Ci_<&S9KFVZh z*sgX?)y&xgn2@_wC>z15NjZhu46~XV% zxzkely1MoF=KDffM4zz#nF4z_lbPaiRa-WJ4&0waq>Q|ONhhvI$VRc2>ctZ?nUlOM zIOEXzOHQNUQSV6KubTJ%5$RGtU%AYn?#RTR%5-U{#=DzwnDbvz@?Y%rg6C+(YhJMs z8~PVinBg25;90|HZ^p#``##SXs)nMmFc=~X32D|T-BdgR;bT|Bt zvv-$k3M)*pT1Z|lBf(u}Uw7VanV(=aWmHnA>(s3vI{$&p<}bO^b3184;_0YGD^m>wl6!WPV5l<}_b=j5O+6OtnfI#a|BY+Jl*yQ=eP zn;@}J9MJOLXw>jqZ(Cwk82V~O{J1-4f(1IOp>jX7+@NHtXFehY$c;GMchv1_lpj&5l$nS{`RxG@%kStz=0DH;YIt>m>*DrRP=@h z!+ro4Wr%l@1BZzit`iw{qSiwSC;v-II!MDvejw+vat1trqn#;bu|I*f$H9Rk%*%S9 zufdRzi@D91gs!KujdUVV%6dM$rFrFV?yx_%>N8}fH(`fgx%&iyw{c+Q6_pSd{!{wk z9_!UCoVN0JL670(N*|Y~3$AQtbLuw0ZXnviw6LGAIQl7{L$o|jiMD^HPu&T)1#!d} z)v;^*SkqtoryTaYi%fEJTdnS+8_z+1&MU;wbpu-S*Jq8mtH(9^0 z{svl)ILB1sAdy!hlW6=3Ap5lI(-Gzx=>S6QAWdblrHGdd-xX$j-9{(k&!+7v)$;sG zit)cjaZblW07o(lN1+B8k*bG4-o)GJ3BuJ+nKBEz@>Rn@ZBaNfSTa$uTh+_$o;ULb z^as#`LCB|>a$KW5ki@>s*GljP0B`&b0uV|f#% z!?)SK!6WSbk_|V|c=jb6HT+&5(EBKYirgl&G8X1q5$?HHClGR95jNICnhdkynueAV z5q~2Vt|iH+G3EKX$~pDOHSi2}u^V($^h97N_7~zrk0hKcmx@*(QuG11wy$zCJ7c{BGPsyxGYLw{D(v{QZS!9%)NMcv-0#>xPv_LbXNytvJ(k#2C+l&P5M@F0cHsZ04Cis;vmZ1s+sM?j zMhnV$je&@W_>F3XQ{L4?W4gOFK=J2w^cA*{G_@7n1FD~1If!17-7f%gks+CZ=#vVD zue<%;)HYO*z*VIl0h9TQTbdVAZ8;fKjFgXbw=!kPhZf!!CRUCV5@rIfuegt7+Vwm= zV4|jP%Zx3fK7?|ql0fu$N!LgSFiQ;cOtVcO$Ka!l z@n+>@BQ#?@j~&OfrsBGE$k!pIaBi^Qc!Pi>5!@B)pE*JcMeym+bZ>kEtg1$=AAw) zO_gTBxR$=xy6*m!d-d2U5A@bPAGVhBi0ax$&upJ7DNVmo9jH@{pDjwyN3ufrL&fTz z;a4quBCX}}BNb*l*%MunEE#v-O_QH5CH(CH+fCygj6?m#0WAC*IRD=7f79_$-GkwEDjP(wRs(=;;szTx{XNqn4CG(9a$!WZtk9wpVF}_^YYjV{B2UQaDvUpISKGj>nG=dPKAvrKLW*K}obxkB1 zyM^4aaU!QEk~q6h!=JeBgUK1yUHi#^`_@a7{H{V!DIC=hkBe*{5p?0rtJ)xCYVDdR zoR#S#Msc}IDnsBJfDthzyuv#=x@Sk*)$uuRcbkDMOU(Y%qGSK+r` zCurr==XvDkx*qopG5gO%xGzV}jHv z!WoHxH*e(>i4NSwhM$0yR2)TSxTNAspcGc?6G>C;G1WdaSuUgRb*L{J|DI)};J{(+ zyxGn|^JdJ?j% zY;;Q!J%$6!op)n=Ip&sp-jF5naPz90fB5(=TNIm+x5YCwXOnp_kGkm(mDE&r0JZ8o z&Q9CRKT<9~4wC2}^d)AH%pha-F3hC2REEB0x7}dKOI5>bY)rk#B~ zgG-buAJs0L-pcS=NS6~T+W=uN3REy6E*3DtjRw;eO3yI?F(g0me(T9&$5Q(-r&!Jh z%;B*J*zz}mo59$nPeujAOOnOHc}tufm&V(hEQq!AwXwuF=&pqTVuId(?d*KiGq}{wuT( z@rX!17r=L&*D&c^r$@vf~BeymU{t_Ks`5XQX)j&$PbTlyFu zKHDYz^TnBpx{nW}{H_0Sj#NCw9i+RSz`i2lLoA|D;}~## z%9voI$9F>IPmhY|FwDw=Y^d4@3E{h7q!yUb%y6N7ogC^6YQK*EQ`2H18wkpH3hN)5K#cm>L8yy7noAQ&1BqT!)4 zk78c3g(*U!zg?KchF_``%9z>0KjIbc)vN2-?JOo(9r>UqV%>A_ODMZaO_lPR(Ac5d;w9_BQgI5{2N z1JH~|nQ(vm3KnMXw-=dh^tg5TsspI+M4<`px7GJuT-kt{mGsKh*&lzlD6Kiz3e127fm;y%$zJbEI~ zDHe+jRobP^9`7i<2m2E4X%ZUSWR)+NR+4NlJq#n`-(0dC7hXt_NXQ|&|5*pE6y4f1 zS>e6eddZDg_TGwXF{`fR#X&JqKI2QMUdyJ%AxIKYTV?h?90r^fSmZ;F`Hwe!d!^s; zlC0~$!2B%WczWZlyQD(FIXpT}wx@d_<}}!qk-`(;)Q(w%sw|>- zda{QF0>4X>%#bvkEW#KU@^37dNLEZ%ZqEiSwENx_Znk10h*ERJ3V#GX`uU5tA5>pP z!+}2L=a&wsWFqzrW1xK7AvL;=Np0`qpKWFVDg#@D$WbN(RY>qSeyhDE`H%*nEvsEE z{ydOf8IsC4!NkNu{90Y3djBh+IG_AA0y&_5&lz>p&;C-tsr`@U6$icEc#xwwrN)14 z{Y>S`^W2<672A8Cmy~3tcm-E~@+tcdmQtPITu>$Tb-$orv+Jn!K9$t6x+}knz+ilo z$_TC!plIOda?b)1`3>qmaWL)mw+otAtn^CyOM(1Vwygo1`XXcpdDpX)HqmshyIAN_fH{9xLWlJH4ztD9P6~L<3!P@=296wWlv3ZWR z2dv3#EGHSbD4h?Q7iISd3BIeYq)anpyC0yze%bs;8~POUC|9>lieAV9luaimB+j6z zCbBvBmtpeX zJXeNtzn1={(=__Hp*o8zs14#nwf5kNZbX4ma^jKN%}OT=7~aTnYjs+dWr8go&r+Ng zmuj;~2G;l6g@9A`BmB;@seO3gm4Wf|>GSB=ZE7dpc%<}q8-d;uu|P~P%3s#eh~#y) zu76%%>rmB4ILB(<-kyCT|LS-0UAw58Cd}BG{?k^`U1qy4^X3FJ&6VohCLo54M`x3o z$$T^;G(w=Q*2^}zk*JLo3-}=RV}dRz)W$}@v_PiQsOYkIa3+ZKaiHjr#DYlRIO$4W zE-Fx3fxa#pngtSxwwYjKQBkF_H@fEN* z=oj-;-&Kpqg3e!@W&cWMC#x#z;IP;Ru<7q&hFPQ;Z(hRteM1ND_b7ka5BD~3d(b(? zT_9UQ>X3^J$-}KU)@5hKH~LrpTsk#`*pq)4P@oxSNjjW^Pkqqqv-UCN_c+xhf#w!) z>LdD0`*JzFuk|tOMrZ~V@5mp&O0?8nJwGn{yE$W&Pehd;k!A=KX&D05A$NSwpohkK z1x()6@G^6RipZQUW&qc|;Z}ux&`dyZf-|t+?i{*=0{i#s#O%7-etf<=hk0xmRA`WC z(;_E$wXhtjh3OM5=djnWMz=N>=ZB?|$WqfT#`-*TDskSAw(mYoW=b#L`cQcTc5jNr zqHaQm3AzaoTI`@kBH}p_bV!7Gp9{kbU+lETyqx`<>lX3fpt1l95PX0r48CLktr+hO z^j&-?0dVd>Z!OxbR$(e90=Hg7z+_So~+dyI?z>^FBTHp>)a=%x+$Z z5J492C1FE5y5t0E1L8F^WQF0?X9`g7xy{@W$?2~x;K+}Ows`zp#`yyk{^-x#s)qUe z_yXZ&Sf)L`gbrfYd;?E?ql1j5S(4C1i`vPsIE^7w*NB67OBV{v1y(~Z))nIHEOJ@q z5W|BsMQmd)7dAAgHh+gYHVFl(ExUhf|H6oTxP(7j1VenugF6v7c+xT zmYP;Dal`*iGw`faSENZLZ7E~7RCyG8wV}~?GfNrHFY-=1nuyx94c`qaVRDBR7QM1e zT}d;i5x`W8C#2#Ep+NCQzk_T>3oqas(^8g5 zjL*sF7|1LJy#%gT+hfzkw?%cL72x6;g`#mzmo0>)jN{9N7S=>o&tIFD?zLe6YjGbyPaVRK9SRr#B&14i@lxlX_~_$0#S z$J=AaEHG0hKWJW_N+#(5wmDxJk{~)EmKRvq!HIen4v;*e99Yu`YQtAY-L z0&*Fw{iHmP6O?k@zaL!QyR$;GXi!srQv-2pZW zSv`xu2MZzZYala+JCDuIJ}<@*vBjBgncEJ^rB8{B3&AX+RB?5XJWf`*Z$_3b6Pnr{ z6^KxIm^v>T&faw^`(z#Wb8tZQb)Xg$-+gyKW<1Qk9YAP!{pNb0p`EtZw6a(}{EVZ^ zr;J;BNzu#mcBFm7+D!?D-wmP{EV3-;S}YZGI;qt?$*SeFF3juRI9&)ou99xTm zj1_`Yh2RJ~6mf7bdHqg9%YECzUkDh5_hjn@1coo$IY{3u>6Pgo`zsY3A@%ZBfE_U1D!>lnS@lcre0Xtip7!OIe z$JH2_jSLghl{8U%)b>l0RGbnMeVms4U+JzV^W6)RhCKz@SQTTFVZx;m2_I=I%vb6_ zCopv(2p@BICl@wUu|Lsf?KU?rEmhozW&5QI><9&k*t9Tfm1goZ!0#scQr&n1@T^ui z;G!}XA*v%~H_7oQax(pR#owgoZ%n7Po`}CS5BO(Q#=XFC`G)NXTa>MHt#b}L#$B0C zAYN#PX)C-&POdT|MvPS2j!f7-KGM;cs3gK1wdxiI>4N*p5I*m4BGlN6(#*-a)0R{m z(0H-<4837MKy0x!#sjVai=^2rQLCXJd|m$LL4R9)MfDY_qJGUnjw{dOZ0klo50T{x z`NJ!}d(-y7GBrY)Co?245Ivq|pgI{%>Q69rky;FLZaomQjBgb1P9pv24%Gjotn}Qq z#15D%S4K2FW^0!#vfWF!R-7p}|BoVY_VGJ49if)FUk%D4#*v3d9D7}NLWHOu+mm_w zNW;=NcquXq7i`OK z-{HGWk>*uLFrouMsyztaBR(Bk-q!cATl)VwvQz2QbUrDW$eai+Q`))2LYup~+YM6jAK z7Pnd7nzzGv=qDld#nQBT^(RV7&Q`}PuTQoA&eR}b3Z%brxuv*y`75%eytopuvH>D; zW+S;ufte*u&7)L{r0xjQspL8&^{$GQj`Cx4C7rLK3H%f0UwWLaPYg+i>ao8?A6})S zrQcI4jwjwj$c9V>=0%pOuJk^uZV|5IA7WY)>Nde~-2a$)H!AL-(FAd-zxj%QZ+uo! zhp>LidzO5(!(^%0n=ENpacH3LKQ~9up0KC`X&B;lP3(_ z3sb`pgEboX1Hh!>uEPfNros@jLV+RiRF)E>0GUl_M!Il=9QUXniG{@Ry5$FTN659 z+8AL^=lJ33JW++g%lwf@DvC&1GEi-N9&17SZE|D-flV5-#E$HuU!-_O3^`gZkcAjg zfqXi2#!z|$3+}6Y6x&F1axaW9!a$ybbM}Ru$=P&si^n!3LR6ue4n4MP1bmNcSZY_D z6igBE`>jt5ef53^L5xlZr%|=CIV<%HprKHN-m_f(SA@m%=uN1KBj!~ryKYLQ=Vk*c z{SY{_r&Na~B(#A;;#2Mj8tm2_8xGQ!*@;hKVl1#Sb~-qKs5$$xj3(3`z-1oIwy^yZ zZ?SCSWu`adJ8hBJdydT+v2Yb9f(XklJ`LQl15uo2qH*ht2h)vcg!Do~+TH=Z`b?I| z2RzwotLphT(m(5V>*LAF>pf1ONaT?K?cP-5h8t<o@D->!QyoZ6pVUyL(E9#%60Xk)Br6wq1$fN*jzUqtrgy75c%by8|1npp)J z{edYte}TGYmgduC?bHb>gL2G9bM5FcR9;j3#c>icMKZ>x2kO;VJ8{t76GmcO{dV=_ zgEq6J7;m%bP48)Fjyv_wVaUM8oyP1Ey~lo6Q?xI}!}w@OE-xU>|^}4!soF31T@Za(Xzsn&Z-fei0;hUI$44!vnUfbo~@T~cJ~{e zw?iZg$}~;0@W&YM!snonv8X-cot4nY`f^H$K9OlGE8u zn4~IHh{n2t9BJ&E64UCZjNu9FMz6C@{z;CevH=|!o2;*Ov>lg@Ia@XeEfX%?DfpL; zVZj`hLRaM8{@)e|#*KuEN++9e0slr%nKB^kwXl6en2m|VuO9WL^JD)y*mOMCUhK|> z;<;kA6)n36AzaSe-*6>ag!FNV$92T`Bv19*`)Yc5%K@=}2HHV&ATch7Q*K2xRCe9v z=t)>u+mY#9gIxDIl73u%ub9RxthJk&3;@=Fn9Dv5*?k|e-cXJX%jnWAlt&{-b^1LI z+3?d_)2&H-ZN+`*rYwEx7X!A9$U4sRh|=9}Y5%~Q%7^-3^*8NqGK*^)WYECp>Hv25 zNj&7+My>3+;1BpJUkgY$|Dmfvj^>vdLhJGVO=n!0?QtkHAb3XU$j7)vM=Cd2w393@ zBfmhtoNQPjqBk8#W$i7v<>V0YhIzA)dM$Bnisv?e z(NVoFpH-E9jBjCxIP?tMz+YS}K%y z7`IT)LORbQ!?=Cob+mn}bRip=9TPCASOpQd)EQ_pTnJb{EHIb!^@K3i*TQ{3StXO% zsKe>#S&y*wsa~GET=^`=x}mZR@a>kM2TPUIUCYlwJI^YX^HDT-0JLI0#=Pu7Yw{uF#F7i(mYD_Rvnn z38C&jXL9bB#|Ap9KSHi#p6BjE)rY!s^3ToOwlrMLJ$tM`!7mx_Fa;N9Y0FuhJ6YPu za9rd+3OW@jPDRwa@1>h-`g+dk5uuvz$Wk)iK@Pxv1fGa-AUZiW(5c$+6c$-FiNDGr z?OI@W-TANX1<|Z}bltk|Miajgwf$i}fNh3SZDDI-gHpd>I)2+m|Dc?jCt?e)@CP8# zJHE;=fuAOMBnO7EK1_W}kgo&wnw$#BIKah05MTD3x5JHuwlV0}!4@U8 zK#*kK!oycEmXH^QG*@}PD%aTL-sq>rqfRc||NisS%mW24sj6CJtvZ!AS3ehgasCO4_8LMfw+Fg~-F06{;Xb92p>07mSklM}n|9)za_d zN{E_~)*NZQ1_9bz84vI6gLE`bjOttL`yUytMlziZKpQ|h@`i}wB03H=^GL9hd~OEB zLaAg2PdK>TY0LS|6p<6 z>o-?GbFxbQ7S(w4nd})Q^rB+lMWx|ce=cG(w)#`EZkvLT)l#xo+3nLacrFe1G;!GA z8Nx#CrQ+US=(z?@fW2Q?c<4xaOKg6BPD!CrRq3`QkOSs&{|ntcN*_bIPqeitrTV6ic}Q5Ij7S)a$fw_2ULFIr(FX5iVQ_86HmKwpQ= zM&ZV7@JSJVQk*~&EXfd=1u|INNpyUancv~A6JVP{2}QSI4-MRG3@q{RksrkVy+o$1 z`xA$!)9(}Ed3|Fc7X`1#UsN}kcJWaHv+5#oai*@})`7o5FbUm#`xvA+Zeu4Y%;`?b zu9pS#gj*0u3{E~_-xT69ahQJXxAd`BgV6-#%d$w z7hqSa{($AA9F7{q^mo@wn5^OC|1^ZH9>^Y3j^896#<9Yoq3mOT_w$tKI&~CX z^63>9rAWddYYzZpSJhp1XIy&0t{tfis2Pu*VObYU$XxM;1D^7306OzNu9;>wU61j* zFwWP?_yc!_UsOD`pJtgYvM=Tap+jn38h%wg!ng32B!*0C1e4!zsum8gbf?AK;!RfM#&5LVZ6VLY*1BP+lTK=B!QcV#@W1<%1v<{ zu%lH4I*rdLzrJ)>MeTNH)7LFebY=MIs?oVTUgr|(tm3;Gw=GnULl9B43xe*yqkfI( z(Y=`2F?wv+M@+VPu2E}OPnMbCGEqgKjm&242njEBz#95Nh2M_n^AKjpV^+R31Y9wB zEjb;?<)x;eUE8&SIc#h%ZGyErZ^18zcNrd}zEYW9UHR(csW}8s@h$Jo+Zs-prPF2h zcywm=HhiKq6~gV(7|4g4kk>~ii_1Oa<#raY-jq>36Z}P~%IDye!?J)qI1?X4UdQg+ zdOU%OovqN`cu5-SSb!9=X&LM>Xh1Eft3z?k)vgIKDrnmF&5uBQ2-MMfMTbo8@|kD^ zQDYts081Rk+;5{N!V7mcVpMv@a3G9-#ZNRbrp=?2KW3gyg}swp`s~I5%#V17m}aw! zpuLX8_(}L7ZxWe2-QQt9-|>o?kBslIIV~=6U=mwm{sit&d74Yay-0NyH7`?R?npU3 z)ikc?sEWSXX$wK1j`rgKS|{`?J_Tb<4(7|MDD}N`v|a_GW^W14!Vz)JEN*`ft6);&n2TKQsH6kMir`jkX} z`{MhgBR1JOo6+w$#O7-=WS{FcI;D3tShE*OE-f4?vlps3(5;g<7%%G_#1R3Q8j@qFA!^ z=iA~T(65>fGM&gMzKRZu(PPnoD`l-$J0HjRuhE1#fE@C_*8M+=TK2>;&1!R*SfWB) zFvLjaciprk!SnF)LO^XmEAj;@gArfEW|>XDMbd>h5o*xA|4V#fI|0Xo^g~N#@l&Qn zgJWJS5ABQO_Rk}O>q$S4XPNC9Bi8+ohR{hSLPW_5-K!xC-q>Kl*{{KHqa2;TGD(cj zo$!T52YWA_bTbKRxp~dRoH8vH7%5y>P{dzf=;@n$`JJe%&N$1|=*G2WX8T-}$G~kZ z()2Fj(aV*F9Q@ss?!Lg9(bMNpM7?Ku((|NZM%$l*)-V7>Y2$W0RPRA4kVE=1H*$_c z8FdbePKwc9h{FmV;8G?1m66JAmc89;BPO++lAzZ$5>S?=3oH4YYaP23U-U$bSf?D# z-n)HhefBU#Us%wbHq&i7ZIa5u(I+zJm=34s;PQiwV>iYu`|fVsB&ogm5%Iw^L(*ok zzGig)p;v5WY%s>dnja?~GTz-g#*^-ACR0tx6?^dyviM}$`S0sx>ri3zf8iT4UU;$0 zh(vdOV3mI)#>n*HRXO4?=EW4R-1w^Vik{*1c^(&n->6gU#B@Y?r}`x9=|BAV#Y_Q= za?1&CmmW{1}zxEV0Z8l^bmrKZ=bUf}kO1s}rPeptP%6A7?&}38S6rkad1!m@?f< zKhAtUqBU2By}A@)0C}@kWo{CD8l2Sy!F{fjWv9Wk`qz(CK@Of&%a1=l=+(|w&f93L zY3{-iU)0Y=Vlg#}pfrZNb$uSezLGs5>3^KMU?MU%(4l4e3XKghOKo+cB*YDp`fNp# zB?+l+OT1%u!)Z^Ta5V28AjF)gty*p*uHyViOMM?CrcvbxiZM(L`}IQ;LF|wMYR=$l z(Jw~?)ckmg{FOMI@hGCAq%uI>E5UFzugxn2QNJ1-nI!><{<$0$U!UTXrosA-r7-x{ z)99RSUY=R}-Cgyc#-7cRDv(%oO6B7sx-jJSCvk4JXGsytf@#!#q7 zzbDLu$!hu9Qhi#OsYrfMbpct6kEe{RcV$aaiLq#v`a3F1rv?>$b(JAN%C=29$(7Wa zR$yJ{W>WmEa&>ify$Jqb)I?YFq4*+%0b(3jN5`c@mH$!C9h|o!q|wQd={627(S=1A zUG8U$=o>fvIALG?j^;=a7;_EjmeC}ZbL#G7Ldw06`0pEPK}!u<0-%D zWV_gx3TCVbr+KqG#NDaRsrov=&b35m^(J- zdc=r0+Go!_e9NJejq_2|fPndz?2-7aVd3hrVznsr96;IOA z>p{v#^No?#c5K;jap`;4k-;1rF)!`lZ%uN zDpm{!PVoHFkuiF5A2M=6MMe8nfo1kuPNje6UQ;$yl{}*KRxj_o`lf~BJxxok7pNy8 zEFX1S@*sYHE#YgUE(8W?ihq+9%^(ZZ><75KlYJOlBkYxBlMQXjLJ4IW5R-IDZPwx< z$CE%^R6kDPk&~>qOO4+HF`C6m2CuSan!M?%%4d=>DRqoB6&+CZ^NqL8*BD;Uj+|RT zCVxtBh7gRq74!D|ij$a4XF9;_yr-gpP}?^_DMiLqj@MSy z%+a7Y%Z;)eqLihGp9D7GBC_3wp_hhp=D@p ztI~@vq6uoy>vUW$yf4@H|M|X_Ei8rzer1;dLc6eR;UjjfMKHqi19|jX_BDo_xiT%7 zh`=D*ZJ48%;Z{!6;#OX2eca1MFhq0?;7PrE1R;;|wNxkc7)q!7Kc(8^1u{UDn+<(f z?Nd>Rvjy2>zF>p-8JJ5l`uAC5yi0O`{~}JoT=@%CNW^3v>UM(W5Vi%zj~Cq0nzAH3 zRL`8SKp7!Wwr82r3mmsJSWwRtSamn{-M+rym6*0g)^2De4M&`MH24$_P8H5lz%C|cdUA4i!*5%NwE(jTFK zOzfZoZ;9tbJ4p6y{`!kqFZX*YW4y*Jl z&=!dxB-;SvRO}Cs7A=rFpqz;(-cuyV-$G`yha!Zr_B;`ON_q>rUJ#icNDL00B+7sFyyDv;`Hi2 zl@PU;#>G#-J0%w3c{0fNY}O}$?_jy=D*xl&G|L^kLeI)r&mC|FRMNN6N?-JI{u$c& z$_6NUm3`JJ)jKDBdm(wg?qZI{vJ{55{{B^N=b7de=iZ`6ok!NQk9^p)z>ynvWb+Bm z^bToc0Y`#3kWwWjNMlGVkaf8^O=~f6+}pztC|1JW;in#&Yy*>g76P0PEkNd>zuB*Z zeT^@s@1Ef0ph&9AytNw)tR%-0yUIuu05~j!Y$V1juox*Ph*t6|=lH4bE;x{nl~mKK z9=cj;;q^rt7=ZI*mRb1_paxEGY9tIz0YSDxWVoDR}^FG+=Gq2wtzWVBPh#}|Xd_SM} z3Kqy8d*Y@msVOa|sSoWQE)>CN9_J63uS@ zvDz#hoh)m&HJ*%~Yga<4ZTK{~W~|mj00<$V&jq}Wr~8pYuu|vj%c?EXkiuM2Y;a~q zJSOq?&dF14q;n7g|7yRD0*uT5o+Va}@LEkC%FSzED)bKMx7~s(PyACTV!bP}fb;ZB zWj5VecmsV@F?>sBjvsv^Pl*SXqx)#d7)P~G7sU9$f?-megN8Ximct9+$y<$7Kh#1* zmd4ZeR&z;>%kROXrMZ&$NAyfop%TfJl{$07+#eZQH7^CRPT7tGtlC$yNy{>3m;R;5jK$R4E0pTv|vkU(xUF!8!O~{Bf`XaD2JbJOB;q9!k zatod5En<9dWl}lHq>J_ZQ|vYRWhCVCN2?? zT*j_Xv9ii?HWlWewg{Uf7ipB`pcZ;2O=sbJxJe5pRUBU><}(LmPD?Yr$|=ePEl*wEQlKXvvO>v#gEe3x#jUdYW%W{rIfiw95Z$ZZa)l0 z2*T(z54|?4Uz?sV3P%Ezgvus}z=M6I_c5r}DsIeiaSbbSP-S}s9d3DW$T~H#s-5PJ zFtXU?uXpQt2)BW6><9~9o}z90ZPeftYjlJKS=wx((W@iKFW9Q19n$6)q6H@)G1-;V zhkz3B*00qr?iqrj^e2JcY&1a=7=KxWYBfXb@aCO9(%0~5ovd%O!UN|BcUd&FaLSY1 zvV?3mKmv~>myxnBxGqLMxGJ9 zT*x{w=`0X6&G+Royj;Y9R+@-B#53ixxU;Ld`znmpaDgG#W`P+@xkN#C806K|E`Pw&-O zVL=;!>ip$D@NmAmcSLGMS4-5n=VpH2mhMLp%OVDuWlfLKA4wK|OIAsTFr<@;aJ6uYCmB%DHbSPM zELnTECmN1_NT-srjh|RH4xeqCith(08^_NQKA*L9A2|?Hx#yy;xU|KfuIK5jD43(T zrIWMcRd3j)n1yg@w0ylr?_`s6-Qj~WHj3YcJB`WU_f!(koRVV>+2t>EXDNF1s4QL% zN3~4%CZ1Dso0~eiT5S*Tj9?STG)_^e@%cx;s_@uGQ(X{Be8U{}N4P1orpox_Hn~Uh>PU5y;DjNlga*ZT0s&Xw-IT$iUFH z5JOjOs@$th&ve0uC{+Ms@x)k0t|$np$kFeMCxuai3Vy-wJ6(U2_33EYc>R%qL>AK; zwub*@dS<1y2Tu48rfw9qq~hC$jQTq8|0apwgh7CpfrZjEQ56{-9n;41@`5}G4ySriS`yro5;$a zMOMZa{ejtRZ-#swC_${I&y+GGZ@;ssB;Bo6e43IFIW}ic)O4kAiAUZ{Ns5Hm$`sXX z1AxS6o>~1>%5qcCaDD8;J*hLY{n5%VdcxTy_Q%?Z*o6~5?*ZLJm27zCe$1I4{P|0GqSpX-s)E!l9$OR|bYN9ayX#4;T6cdf} zW@@Me&?eak?PaROLgv(FU26vPVwo`ghN^!LYRY?>&aj@vo_uJ zDL}GQh%l;HKEhmTv&W8qBL{W=AC4~#@y0`wn2Y~VC>%fW#qFxfz`;0mBe8q^_cPpt zRHh{sB*?W(ofti`{Smj)hCN(}f{sy(`sx#0!lI>dQ}lJhoiM1gSISuIHs?DH*84?%seZStAhsy z_jKEBC(hf9P|%`LsHC^EahB*~*vAGG#1SP52q5sN!0#T=HGM4k+Ga@;aF53GLWoav z*>;!mQAPG(;`-A(#Qd$JD%=4ewN~-DKJUAp!Ss~ND2?63aA7!Ug|D3P0ZQ2lSKx4H z+HXn3MY_~=^|5lW=R1YEhT@hPJvb6P_EsapZ=Uf%+iL(i%G&{kC2Xw7i!6!7bP#x7 zts?Q2ux;PPyNeYI9sWeqJ*QrYjQKCF4pa!i+uQdJb_@UE*Jei`=)$ zq(8Q|gO`ugR_y7;;>~6y#(`QiF@WQwB^P{M59sNG5F$cN(N z7;vZPq>MWYOZU2UxtAV7!;O^To@xJaPy@uM+?&aTg4?;o&GZUJj=?Y>m`hgFQ=s0C zqfmdWm>fhdpx~1BfNO`xW=bA89V@z^XY$&VXWBEumMK_eSj`!qCO@nTO_|$J)r2*? zwFFXooQk{AOp#vPuWN4I>taif9aosP#$_1SAPbER_c(^!x`Jn+B_2@-_i$w7QO3&B{ z%dEMZ;#M8Vya!CqF~byz)wuWOOq((>vSN@apT-yJ8CR(bG==jNtYch4@m~2?iO3C< zpMF!H_zRJZV6Z?;4G}m%Ngb3$J(MDk0(cnw zsCn3i#psNr{|S`pi#ZCq-Y=vN+0+~6lP)PVL>)=v^G78t7(A9v`43rRIARt#j{SB0 z*awWEk4174BEkRA<;!VD31tq?IRJm$?x!PerzLHSus^V?4n3u3g#bw_}LZGKQDPu_oROY0f~r_U6uOMR_!5Z`tW{oNS8 z8DTc)yaQl@SX7c}f?x?5d-X-XugjEcSI z~-U54PY z_9evn=`M)fjNf3Ff59*0Kg&Z#e&xYDB*3ys>hXo#8g{rB(LVF;F<7=IOc!L67{_14 z=|Bhlfur-g6AFTWpSgOZ3hko_g1)z_9 z6;J*8W2>hjHw#4O1XAV0sq5hpZMN6Fn1{-O=mV4vFJA4-L#P@~HLER5t`^wF3Uq%% z7h|7E^9+X74$0ghbT%a4%~YfbdhDbfY-2t`!+J=pg6Ty04f^V3zHBk7!y&0Zf4M#- zg{xK9R-#mV#o(Jy88&X}9OX77iVMR1)!5wwlSHXAY^fhDvJA9c6%t-U3_Mf7e;ef) zVapFUv8w~Bs-E|$yuMUP7W^rz2b53JsEi_ynS`VB);H~Vh3G6V%~RINVeX9;_bMO> zY0|69axx`eQ~bydlrOt!Yybe>CTUBZWWiRGP{NWYysV0wW25*)c6$gp%fWXRtgGz0 zW?B{Nq2+JC!rv)m7x}f@x!K*3kGpDtA^Ui-tKX6MF~*G^XE*S7@#w|LRV{wl_8!OB zRML_;1EqDMJIt#ivjIK6CNA{*Z;B(v*XGdt^5k&TM+@fcfSY1>!FzOtzXHA{ElyxY zvgrMp^pL?sO{_G7kmHXh@bhy0qDc&;<04W^;G!t(byJ3 zI!7>%?F%+F<7QD32olPw5~~{+mN0a@rXp{GKwD&7N31RvYOqOTbO2!G6vWo?tF~?3?pc)30@N-P+0$YH*>fT0ZQ zYeSJUpOY#74>+Bexn-fq(%T%_syoL^a(&HA1_X3256oGKN~(8mMa5-ERZEL4h_UIr z{F>evmrU6^lURvBdhVKuOo>TDS0mm37PFB|_rE!q3MIhWRfXQ{2$n1^PsR7HW)*D| z)yl8z{|e!+bVRs(W$a_tF2lG01O!#3VCVAhS?H0LxWx3!7)g#CU`2muBy6A61dMP~ zLIWz0b&G54a~?oz88=1tn2ww;93D}c6u5uD4#ad)iK9XRk6+K4ffK&)0?axNiEWI7 z<8iSLQIWgRf4FKCHCgt#X<|2O;s@ljX3!MB*H4n}zN1+a46imrSJCUPYVYxw?#1J$ zk`mXltC4bu0+HMdx@|NIzSKq1%W~rl)L@W`Yo_Z`Lcyfz5LpJcjHjySlrU??ct)3i zR90~}$C7ey6anIKsbH;?wLN8iAo0NRFS`-^rAx)H$Tl5H$Z*syV)35zX_?X~e|wAa zyV-F&ZZE;J6IPt$(0XohDd0%+mVv!uS`qX7i7n8y^~&+F*5=5+J-`LL#Qo<427GJm z^+Frd&ySL6=}d%Ug$;!Tl55ABuQQ^L;9_ipPOT>JNxrF8F=;wijxWCqX=@{>ee&ME zr`zopuhCAuI9~>B=7NM`-Tz!RNXDJfvPvq9={?H&=vtBQ|-q?SV9rS-_Mq3s`gG zgJ0M_Q-m$rogS=4ve{!gxH$(IYM5S;jr}}vYNNx-UNRsbCiC*}KTOfb-E^dFo#@qupTzDYSCQ026>>#7oJ*Yysl9if?)fKPBP30n@P+F3BYv;Jab zQU(JP+I+AKlA{U0F(7vS6c4f}VacTFM7|cVlAOG>V&+MNr9V=4AW2hg$No2#GNMJO zWWJLJnrowKH#eYbUgFb+p4@J3zytZp5J-5oMrk49(exER!8fd8r9<+E8O^2;OoN50 z16H^v`?S*1DagYSeSpq9wolQvO=$JD(yzynvZ%JKRkv}+iz%n_0E?#I>G?8cSl=b4 z*i(ir5|8y0@run52gze1B<~wAnO0V0+mUeg<*+G*yZ#@T>%QkB(4IcgW{CY9Fiq2l z3~A`E3FNB8BwE63l~8<|o>*AIBfQ^;jvIuTlY9YF#LVlh@=Tc%4G%XTbE_8VT}<7@wB+Yf zsS{C1ZY4SaO%%RFhz_=OMQ<{PT^aI$XUhbdgi1|jYg|&6fjwltWns5x9iIiV$hW^n zt-u`r^{jc+y!m7bIz%!K^S3>o+Qn;mT#Y0tf|(_JB+R>a+uGy+2c6sC`U>oI_;%VM zoxmoN@AyzLl?j1E6?GubX02V8d@H(c{U~h4F9qo19g?j-gss%8bR%`a?Z(UXvvyUo zBN(N~OI8Vza;%m}WNgoxv-%Y(JWw`o=sm3Ay$MMVkQ0yLI5Lbo^v!R_^+_z}z<9vw z0QDzAS+CN*Q1%$Ypan-i$=LP9OhH7;SZmkMV>bFAT5n+k|E^|q26?~`GNB`f9B3dC zA=Nw}$d{ttYzvfoXr}2&XXX^HIK9j%ufO9AvID=;ZNoz?R@jp|=NQ+7{5+KWoD4X@ z`M?r_?Cyt1n_Z~wk~K{{bm4}0ykMsz9G`}uE=#B$64gl6mAiKQDX|jjd~4#Q`iDdv z8Yg3o=)Q!(vaZ0sx|FPd?5_K!jI(J^zs&THnjn_2gvYO4G2z7t=NH_5b=a)S?fm{R zJESm3brRfR3Z}k);sxpopHYY$D;o+R%r3ujd?W|AJ`L04y5dNJ)lesyAEp+dauf?V zIc5H;7y30IvkWM&hfF>@Eq}$t`T75cT>WdrD<}Kh!~fm;Hs5!FSNm-~oBz+j#YhJD zg8kQ_7W!*xo+vtJSBl_-O5jVXTDpwepa|!^MY`R7CGY4$wF)SfZn^gSQC3R>PmzF> zI)Yta1-;L_$Xrh5Q9{ZdjF2N-_}|1&RuaHkyMt`|c?DUWO)>{}aPY|xStwN>W{3xl z$$EJIzhtB>X(feGBWSu15aKX)9Bl`7-(W|kjr@p^iSsU-Vd-JFDqzW6ibkoB`I}*j zhjA4A&K3`sCT=gJR9LPrk@+K^v`r4aHphjfG)^1qseJauF{6oNpx5UqJ-ixsvuY4b z?eRvWino>t34>YioJ**`(Mo%G`{nTzgq3E>p4e#YZ?)Xd0PQZFrre%1ah`#5`DCK& zx)mkqm|JsqQKLFk$gxC_z#((X=6g=r2QyLt$&0VFcbNpmwTH%U?(8PQJ9xX0%mWoQ z6r~Cvgs*XZYF|!FYi_@*E_%7*G^5=DJ(Sv9x!F2-XOT~|Vy`L@kz}$E&|8@^GKNsr zjR0KkO{C%N$}uqPW(82rNHN^9gIC7pDCc@75kRdO2qKd#O!=zi;J1`kF(QVT&5HGj z(Yts=@cYelXh9Zo=O-ytbE)qv0%9Rn53c-yBOz>^(mvDT@hdrCKH*vIy4uzS{ng6_ zY#*%SQK^tgBkAEh7fLN=L+X6!ig!A=br#0?bwFo0s-=kG11sa+K=t<8MO*Gl^Vn>* z-HHjH;rgbeNRL4m@cZe#qXpb9Q~YR}=Nms@8-Cds*V!FLE{ixwPip?7Ez7Ut>H5spIh6PNUnm%xF&NXo8F;fQs`jpipcITMTy zwvrY3L_ZZ`#mRlUE{RXw=vI2{h>ln7Ev1uwsp70k?rQwew~i~EuNQ3y_{ya_FBP8~ zv{t=mNpRf#vTV+T>Sd(468zm;OVB5c~& z)E@xF2#xQteTJ}l**AvO+BEFd+?DFV`-xZh2QcjPxv{>wRc|l??=1X}j(`!V^K6vO z&J^(4)Ggk_K1KhTRjG*w5n3G@Ziz!)@j@s-SY-&O{iK=#YuI3!^c$rIZ2C3gpSYpHeIA zE<8^bhm7UU{kY|Jrxg8d{^Q{o?nuz;#wvO>Q&i6~1Kv%kU9La>t?>r0G{moP%~OVR z$)rQFCTj!_wEbD4OHRoKnji1BK8%=={t%Vi4YBu)RlH`fTlE*AT?w7Mv-r6G{X#8k z&8$@)^=UL(?WL5CKpAdL=DL8gU=vgBGcnmZ@jy~IdL7+@kDanNW@M2>mG6v1=q;*0 zFzc{tb!IYJfrvlg`lIU;#oY8!QSxpxr}#tLO`V{wGv;B_CcxQVH6lcT+j98Z*+st1 zKtvj`h~3K5Gg_f?VyhK#{WVAotl8;k+A)_f>@t9y#>3E7iB-mT_;zOxyK;|qABNhW zq#qbPXh$^{Yffh}EzEI7?UGR#Lt_geH7lH;GCzg3`PGWlUY^c>qDnqkpPHuD{CL+1 z%RQk`u|-!yo%$FEPQ5lqYqB9tTrz+euSL;Sv&KMv?d*sC{QCIc)|}vBrThIagkx~4 zqwgCVH3){haJ=a#cA*ua7g7LElA#7LMXR674o{(Gr6$0|(EkGoKf6Q6-I$&+;Bgb8 zZxm|dww=4y6frv(04T40plzfMH7t;_KjbDRWDl;C35LNWxC*$regQ7UemGm>?Mx=V z{HJAh*jE1$Bh=k*4l(#_ckkG5St&#oJgb>5u&1*55C}v=gSgRXA!*yTuc?QFGR=KT zJw|ltyL_HL>}8t((x4f^V4}qH1nz`~4XnCqW=;?u*-_N2 zWX$xuCmy&GSa32yB_aI57Z)?H7+fkt+eqt`TWOd6Qv5^)|CR-rYX|dnIeccJFezt5 zLH(03VC-nmI9R4@wzIgqTEJ1J&Qw>m=ptlRbJ03vU0=23Ho^mvYQmK$uHdgYfOG-u z4R}DkgpiW>9-CWKY=0$q4g>^}oe7{i-u3 z1GDE*wJpDPf_YXM$1}+Ir55E_Gk~er3fSjGiY~W`gZ00Ca9zthgV;CE2hJ+kxT$UJuO@c@0abk7Am)QY@!4t-PY zKh)AF7a)3m!I4p?>SPxw+V{D;qm8}czFyNv9JlN#x6wFN-y4d>IT<%Fa7mCE;=?AB zn=@G!CRC>jBbBtbs;-madL;NKB5y1-?xZ%sWk2mZ{@3(p9-DtZI4?0@c^XO3fO|>R zR;#&S{PnAFzqg=47V+5VY~)89=oIExyhPoFwtbDe$Om?6_<}uFc9-ZCEMFSMj@p{D z8HY}-WEK7I=QsFs>)NP)=e2f?Eez*=SqUxbTVLGBHx701TR&QTAh$F4nR?NaHGVp}pbe06k}@((51cNV3v*c=@-DUI@(6gg)nq{mon zZ&AzVK=|@aO+m~H7X_vq_-l^?fto`T8wp@a)y5cd17M->5aC5nESIHyT6W8Rm(-U{ z$T3e&Xps=RL^1A|5J_%LnpF5AZayGgdtZdI_!~>z*m$?^G`5xxxiHEdG>}qJHm8QR zi5Ajt4Ok?m zqL`{i9*H}p!SokAB+cUg}8x=z|L|q#UUCrUc%3k&j5|tyCmf!y`>8B{M4_jRwY`lvq*1&;Yl3jACBF9=) z@tw6VUui^KX(`ImAU__z^b@jCJo@#s=1UVH*5>^2Yy~nOf%!4ymk7|J(OwN(K1a!&wJQ6vfzB?_ z=vA_XGdT!7)-&(-wPjE9WQzD5g}q_k>8efn;~zoE zitZjc{c|Jaya-w5c9LWs@kW$3Q7}7R`n<(eFs@n&{hM+bWnu(ig`L2>y?P@MTk zU4Xu;w)Q2Ui{zdOE8CvPV+`HdG*59}8!N;w+{s;whw4q+O{2%oNJ|dS(k0hV9iC#8 zs({FhLil&G;29Gg*K%O2$9DP2Oc&`~Ia)yGg+{HycMDF`F6{_-N1RcuQ2#Z;oYX`hkuY-6tZgunVcKtm~!A2p;> z;a@^1Bk8%5ipSV3r7Th(()^zI$as}ivx!O$b6a4`UlvDs@~wiIDA4*b8@|0XwOG=+ zX9yf@*h=c=fTz%o5YzIdElBBMu|I)i-J{|Vl-+H!(`4Krnx9W1GR55y2Q1%Xc!(&pasgeKx;B)f9tk3pJOm z%61?CGrnkp6Y>~s0`E;1l9+zV2^f(hWL{?afb0$V=m9*CG2I$|8Z7fCb;xf7CMBPW zhsEH0YKmnNMNoTkix#_}<(q2h#A z;_*mlb;Obq~pLa6ms4g8Om}j=f8cT+(d?P*_(&`LdUQt5Es!mWiZO|H9HC; z9hTjl#z#itKG2~p1qmtKfiuIZz0Aq)5$U#q(v_!LJCpV;QX|jFWUX-iGUTy}C>;{b z2ChL3UV_L0ScGdRJlKHSG@0W`)5+M<4p!Y+{6D$uE zKX(?6$R9ho)qR+BHU-~vDTiFfN0lfVa)Dc{%*mfXMcb=Y5RGY%V8lW{t?ct;K^=33 zo0gboB9&TSS7aMwKXK`L6EatZyMi2KtQ5?Z_*i+mT`4M;@?>>j@q7xs2cUqtJatAgGB2qu; z7w|NmCtV{jC~u3QJ@Ml;KS_Srgw-r`7KRES?@Nu+Fz?L4QEua!zJjbORcf>eK@&AF z#w`7X_%o?@6|d#w#*){f`-_;{-FHgVbR(;prQi-}Hzrts&wxdvNie@` z;qEclNl@#Var}UFOmSS1`DnTHJuPssS36S^D+P90t0gDkDGixdZ4ynnID;mHVFdC& zJ(Q$QnMU6&>z7${W~5Sen&G)cd}*v^1eS_OqErHaYhiBI2&q|rU3lZVb$847)8Mrk zuk9Qdus9&o$}XurqgUdsNJ+{HY96@^!2M=A8HO^)fG$_KsX>hk9?~j z17ATt0sumf9_|*TS)y@kPw}M}sahDqK_8q& zf21TxTL<-MmNqUBX@R7uo}BAEIHIejAS%xKwJ-GhEMLHUxLS&~&LQzf;#9*4aae2Lek%A5;t zO8avrQ_82|O#fX%K$kQ~X4LRh@?c0D{WpwZTzB$74|)d0MK{NK96l5QO8qz*>(>>n zk1%_4na~?5LQ#iOuRP{yI5?iXQr!CP{IDm>rY{F zI@=oRG=#0o*;%sZDeFu}2h!l2FwEfnbn~+Bh8WmSIeyI}t^5tVsETbmzGMOa$FGk% z|D2hdYu&{-^~6v`oC=ni_*8XUWVd*8c3Q&e*o6nt!=>7_(GH|5xeD%R9c@W`zX}lygt7!QlRsN0^#-B3HY>jmblPz2EEql>FU zT#RqQX39cnd|7obvA1Lr_Qz%f9B$$vn+PUx8yAcVUjYR@_oLJAO?4-F#5kOU+h`n-OYNnqq{NH5rA1#uQeG03pDBs<+rxM!b{4 z3sN|CTB(16oX^vDhI0pK`**pX1durA(E-!c#Zt%m} zX=1NU^Q^F@%GV2-94=Bins2t=-9>RQ=K`RwXv(4i0E^>ED--(gAV6t1zR52sj+8Qo znj(o)h)qY@`#%-*{635<`Y~OfYG-eEXmWS7nlY2KUhTFNcC&o=No_PHGbfWdXD8y$ z+~0}u2@GwIJ=m`4yY1ew(Gg8Pmr5p0ABaaKAdK^(!690?J=Qi>6+|GtVavXk$>fZW zv=#gVUh+Ie{L>p10Nc5d=YUW7G$BxMW9<@74mGY~H1{t0Vdl@$=*&Ktqo9J-NAPUa z!y)}zi6>QA?uYUtZ|>*OcrQ@gEo=wZrWNew%&o(78u#xF=iMZiGD`Mi=A1q7{#*pd zFvSq(Y+78qRE%0S16j`q(Q_QW(6Nhdf2P{|AlPjZ_)1!@U^Ch*$P)H&OcZ(Ht3QGY z#%~#qunG@AB1rb>;rd#;K89q9HB-qw3Wr9pqZtjwgbJ{ZU-=xRORP2~pz@bUcpq*6 zPM2{er*GdVn^GmlRQ@>N>0pcNUpY z3&UyFBSOIV_V&LB3vj#!?aNA;DX>TC0!AcELHEJZNjMfx9U9F0 zp#iDYcT~QT_69_aTa$v`aA`8ZqjnT3tZo`H!$FTQB~NBi+tKCT!x~n;so&eK9%F|? zTttg3jm3u<<`e8-OS8o?GbH-u9`Qarmk{Qa^cq9SNvnlXR=N2X;*QKL*Sbku(i=th zXg#oj{j|fN7gR++7Ka48jB?AmYou?xHsM_E*2xgmRU1e!QV3mqc4PQG97h8 z?-9O5Eh>5gK3}mm14?k)XULp{$-3=5;W6K)VemVxA8JDi*ErMrWVYN&FSjA4uwo34 z36FO})C2gNnGe5saYhK%{xT znfL@cL%)9@(Lvetw*P}L?}w>{l|A;ulz<=Irgt`crtfNP>Md~@!d8R0MPZP|orFjl zNtO^2J|~yKGjR$gT&kT8xXHZ&-NJ~J6ZxjIp$@a+j965(byM&d#@=cz*8zjjIrZUA zNyUmz@FE5$?ks9~k{EZh49s}Ht(R5L(~2=NF42`t&^3j&9p6|;9V4;^va0Iql6b^X zWWD@-&H*IbF8uUcS0gV#j&NMW4c1PDPgf~$Fu)ct?7g6AyJz0sK~cxSQ=xizmit!sW%5%l^RO5iTIno_`N@PiTWU6%%9 zNk*Eu$0$z7F&v$iU;pOL+kR~$tlAZ&afO4nTpnJb!#ArkA=4!PxlwO>M>!yq(@yU4 zx04}{*uDIAnsys>rRuGy>>Wf}| z(4^Q|iQVQUXqzuRoJk`oPxAFwmn)GW0XUzCs26L;>W~|99+fI&XauvNZatQv*8_xA zb@EsJAE}LgnB5@mLt^Qm1UM)U=-bPtcaTPmhTnhFyg{`Vd>0uFn}0>;<~h&b0w%~= z@n5z_GdbNw&Wq-X3Dm<3u0yiWtQle^9dL7`kTgyqnBdNW#Pko9v-*ReK`|q${Ak;& zivBaDp;?8~RrxQC8!3;|RAexp@l5}%${Z;$%&X%vn_r|^M3Z5n^(0_P{{8r~e6%s8 zflWq4rMxqE<;-J7VX^Xz+OqS`OOn52_pjxT(7Yk-sMQc|_8Q6j$OTpxz;>mp|T|SS7 zyWpTOy-odoMV3`|$&W@HnLIy7X&rQcnMj@CQkBG5z9EWR=GAx<7-@YF-MqAOHFML( z_B)FOw_=V~%Dybu%0AzYlq(+BVd5rna2jjRn3az&%mm+AoZMFu``HuRAXKJ^Y6Gtp zklk;ThE9mCejOc-k;N~(yNfQmJt|k<^`j>KCAg9JF9T0qxvHJUjrLA`I~<7V-mRd3 zDkd^z@7>mn%3seMCn`}f-0o<&s9^vlZIH%MOq~gQRu;VNNe&}59+ko$Dm_*~E3|%; ztDdFEr)yv8O;}lImcc&oP6@!80-NZ(%Q%jgs%E{F zx(oHG%>yu)QHcn{@&Ac-qns;_F@xE z;D?@P$7sWr0_#W`Ysy3=^P&qb6%r}anNk3<0gP*Kq*(j z+fL?UcwKiirZ$wgRQ`QL<9mka^HQf@+^wOaZ8%vN$cpF58oz{U{)d6;xK?;rR`FIV zV~KC))`d5wCO@bHg}A)m5S1&sibM4c{H_;L%r4o{q_O%3*vL+yq7#$O#n(XZ<5>;8 zI8k7|Jw=NSq{yDk*(2o6q@SR(2~Dy3JY#*U^jJXMIMCJ)r_(g|6lUSe*Kh?FdC$Dl za?`@D6AHTDTC0g&)X5Z>4$N@P4n7b#jEls6F-(PUb%Dz}<|}1``RgT^NN>LEJELy1 za;umuwyabIRopV5gJno{PBB~9*JfZQ9GU^GjQEvcz=<0fXP)7Kd_fkaWh)v3PXLkI zl5|ZKYBgwctg`f>*5KP)6BEG36Q^{1wIa}}7N&CgRPX*SUkJc~i9@^grQtxWgK3#F zY(zUSs(yG0*_ot6g1#Se@I#o{oqF<}(iTVj`B2)f=HtY;!$q|p0+Cj%|8 zm{aZ{{_|u{x>%=WwZ_ZZest6>Dad-*9P2`t0}hBqh{#cnLg$6dU!N6CMnrvdPmV?DCs0uILa9*Wix6sPH^+& zsD8x9_NsO&cJT@M=r;;hPS13{?v{o-@OHEQkk8P?cZ$52Y3MsJBO8z9AFN-nD|n3E z8Va9Io~}1uu|53}aQ>)L(t3KHdx8wT+R|~BF3*RmnUe!&_TR=R{Ep0$32=ieXVM=Z zL7*7xDn7Z;YvsMosA1*+RAqF=bh9=hkG%pSE6{p62Y_K{5~&bcO~0@=570M4l-ZGSf|;hMP?b{cV8`j!JN1Sa@yyaTS5d(Hg@v zD=+>+)KPbnu-Rh8G8{1QK|dT4Nz~$=qk9W_ ztd<;R$p_DkTWWH+vw)J81iKNi@_ov;WDRq(AL8(EKA;;*Mz zwWCeIM=db=oYZ{fD!kCLzvYR{aOgekgr|b+DOhVc-Kt_gK0p8Vthv!y!9UuW|42t; z6mzh$qSv#{5WYt+imjr1z7vQv4kDcbBUR}1TLn&J2SBP_yKLt_-pO0?o-QbVs70+< z*lE_TAB&J_{(}d0{67XsGa?#j;7{Aoo1nZsJwJ}@7|o)kEr>zi=cP+pERw!6Nwekw z)5gCvM*s6CpZ5C&g-B)jL!owVnjx4OxAG|o{lVd)xs?hkc5-WSCjHfV9uT1;z`G72Fpn;rkwxK`k6a||7xu6*`3hRkpLwAU<;>7tYNRt zt&1$pA@iaZ{6vnW5Cm;i5^+$wV0>Jt@?*pd6s<*P&m6#wNlF?k93gKUKhJRQeE2o)8jy!BR+N^~CWu?pLCV`4rnK;3dsqUulTs%7RIQs53 zH#(794aa=czYssJBfe8DWBmQ6jLr9RSn7_`o#xITswE!iyZb!aFlmf*iN_Sn_|TNr z9Dkd>ZiVg^n_HqTt50^^S)AJ&zb%P7&>J&}5NLmMv{lwGQL)hh-eH&WEMu}L<1+!9 zFdtwtn>zexC-dvngAY4vm&LcaXv}*#eX5|_oj7Wx6dKK2r06jtOv7+pHdN8~!_l(f zA;q$@_rdce*0<=(tw~u^jVFfN@Y%GxOOGUQMGq*SCF3!r7o0NL9?0$(EfBKE9IAIw z7fhU&eyDt&Tt${Az08((nMCXh%-WYPw^>Y!T&9B8%RSx|)fNh69MdY$TG_ji*UYV- z9f#NmbEOp}RmXQjJGhBnIMSRyhMD0%AriCnuvy8XOMaunMxu`&!e5WSuEAx@Y;x2t z$Q-)P-&xhKBp|uE&Vy5m2(^!E^qwhQjKM$5r+ z^doMR$9M49-cS}OJOlkUfnlpZYQlqgJazndM-UFKQl$)qk}sRo-C%$M8DwTzS5tE3 z7Eds4g68DPJ!VPGsHo{88JBeNeq0YvY2x+$AB^TXmY9pe^%;0b?YRKJoe?vH^PGjs zUp#r2I+w+5VoEDUWpXDZk*=H>fsr0CQg3~(F*vzN=aV1c#5*JsLmLluM|QBey>!wP zF8?!}T`xao*hWQd?WV)$Q9!e>jCUd>)p9`C30?k#A?_wv(ftB}1*b>tQkdSm?5Pl% z2+8`1tw{2|T1wBy%=CQb9Yy%mn^s9G6m<>fpR0&NbKlrRwf9x#7D`93so`8Yr_zL( z>926A#-#B2KXrjV!%UuM@Z`V)`VFNItVomov8r zbo5uru+WXjvN0`{O4#fzo_|4`4h+xq$WKcs>~4`+ zDtK`z=6*#29_RNVh*v%Gq+tGrs-~H(T9qlwU~L3t{rNdrg<*=-Ank;EvV$Xl=i#E$ z*Th9I+jg9MY;gv1;!p|EMBRfF;0h$>XNjba8QJI2Vaq>_5y`{dk@~p_1KX?hyOx=P zLunp!`|{oNgv_z#&-*QvXm?086Cj7>fUOY**RJT4)vJ!4mk^(Z%lsxgmJWgx6bGKd zsTL^~$SH%39JpCMC4*x#IXtszo1{+{6ua=So4FC)w&WXElNa8l`eSt1viG#-Pr5D7 zXU9!oh{b_V@ERL}$A!`l^>_ttw!06l0`plBbL${@dzB?GqtV&d(5~?+q@ZyT7XKla zs>v2O#Jg$F$An-F3Gc?&gJhpGFA6}PrC)9q`VRqhI5zl0Ir24f-Kt~0vgvKnVT*1u zk5-md7EG$r_VkP8p()?Ovh{8p2ZMos9&`KUCo?%19t7^&s6#-4%t7Te1_X*x zI>p!^Xo#p?;)|ZBKOhA!VQ!MSq~MSVJ~KQ2=Ir?S3f|F~q)Y^L8eh>SvWgZ;w@Sb^ zbaLO z*CU17^>x_VkF+WE2`nrRxec8tc7p!3z04=VtfSnWDqJ%n-B{y{su5f#aWoSpc<6;E zqrCuZY7II2Bu7a6$-6vFoRJAX1Dr~hSfm}Q3R2`NI`QE4EbNGhJf5c@_k${5(g};G zqy=M;i>y?K+8)SJ2UV_DIb#?8LimpYrV{JEw?qxQe8ifcbXuSk2`A2g5U6LX(ig;p z4khcD$=tp^GLwuNRYThs53=P`_BMe7*~4>`YbSz4o41)bU(BJAd`_^fw-Pnsndj zcJbH=(cj4A?j2t-nN0B*&vZPeADZASx1eZ?-9iPrT}eUryBzP8)!d9zEW_R${RZ{76E2aunvG${uSy=|zrMfMA678|f zT0O~a3py0y40#Bx_OWIZiL;n?uHAJPyF``XqX2~mkGHv*^S7N_btqwinuY|v+h=AS zwuxAx-N8{D1h1ub^TqVw=pUh`oLadrbVD1!#N8RgXu^*$+6ue;q!ww`Uvy zl4Y(n5V|T4!-O- z!_f+cj+yLxW^?bnbV#C~yY$L;9NP%@D`5fmTT_|OH$zM)FQ)>W85>fcKdW6@${bCu zW-IoL;1I<+1b}f;5nIkZOsxMqx~J)KyhR13CFQf}1*? zPlWJ&e_nSzrPkvbJV>%Z{9N#$iT$x0nJDvEE}5ds+eIe(vn%5V1$R6t19wRP6Yrdi z$%_Dsy*QA*mcm7b30V-p!`!&^l(LkycI$`b9*b5#M>z&5di3UwBtMWTM^O~CPG^_`DAhyNEZGNWfm{$bDCN%Gy6(^z(MJ2F3XsJxX)qSj3<43ELIZ$y^p z^zn67pG9irAI;shIN4P{i^&F^djk#u_qI?&^%|a#| zjK7b`zOwbkq|dPlUm;6Ag9srnBLzUk+XpyMTb@U4U<-O}lhoIWf(ISUjH|N4IWy_^ z0PZi|{CP6thLktR#j%#~-tpHfgxWLl!E;Rg_3Z`jwSkFu&{92m1Ntl~+ukWD}!KDfaD3C4`sSH%?7LPXJfzI1ig}P&{ zsAwZ#95+*)&5nT~)w=p#8!B z=a4`}tKf&L%I_@f2%f0A{=UL5L?5>o--Wj!`V5J@5gR>F%v+_eWXMeQ*Cbi0Dy|739FO5`cq=cGD3l zEB8ph#|z2&MzzcLk+-P;Y>KZ7u`Y{%EHAb?@jx~OUY}X7yKq$wHsNJypApaz@#+*a zVz`aXm5!3x8>KhVGk39P!ob4O9)Cp6syK&ahl@k?^7eYWOf0ywfCbm+JB^V49VENIe~idiM?#8xg3-unReEIlaEk5j9Tr`+hG#i+%I4?C z7z}=fN967Lj|wifh?fi1M=Ft-*YC|-RatMCIyN0mRf9^O`XR`wZHC3~V3 z1ds-ZW|VqP(5nSi$74O^ObHjdzN(@P2>OU|943Qe;}H})PG~br{7u&APot5+KiZVk zr&XIO%hVxO5_CPOA^U|RYCRiK!cYtw?3$zugcXakwQS|anF`V>IeBN%n^{73a{>qb zVafkv8)2V`RA|7?Ero@#S@Bl=w_hpT$+@5|N3o2{j>;$^U$fF9V}csn8LgvnE{f_p z!4Lag_qWQY=m`@cE~@(KhkehUPR@>mz@7Iv%8GEXq~5VU34{`agkUczzo>6HeWQ3v8}i z8;LvcATrafD5jLIl&#CfmYu(o=~ph_9z2dzmD=UKGio`*C1f%So|{WDhv1%KCVvLt zk3_H`DG0}Xyzz`QzAh3uBYk;#X6pdhZp-=MEuQ7uuyr*egREwPu|4mysZ(fy>o^x$ zz``fSQAEc~IMd@$B72au_70ALs;)sAOAp(B6=2`oqAm3fCX$eEI5~+Gyo8d`)JUOM za)%nM<#R|;3cI^RrAic&7)M>k|1(8@GT<$lj0ro>~F1HE8{ zt{p$A15x&YuN@@(OeuNZdcN2jplihNzv9!#Cb@f;JOV|BIsB8TBfxsXPq6Oh^Q-FZICcB8zFnKbH8fuXs~*`a}_<46kY@b6=%1%w@&=zy*&Y+yP(Pdvu*85z7r1sKZEu1YAd+o*JoPN0xO#|lDXrvoy} z)x0*=z1e;HZRaMK5txIEURO>_-v8042=i*|7egf?suGI3%al4eYB>ly!;(J()#5(DcbTIHQNbg~c5nf5-n!%q?FGh;5IyzPHK z{Slmn&LvZ@pIms;`~))REh+5dnJj=jbxC6+KmqnGo`Ps4R)IK}RfeAaXje z3D%r_VT)FTZ?MNM;MyT4l(Kk0rxx4$qdwW&ZxM=QGp}Zk|M&IGtOs+`oKGWM+oB8% zcEaBs8f3<7m{2i4opZVnnKqg-=bKd}BP;z%a`Xp{^mt;wx{_l7(B zqKkVObZsFJqVz&rI7Fg|R+JkoZ^k$VuDX0awk5M3CR#3rOAMH>wkqdC=_1+dihgJM zzjVEOKvQ?V^&LQM3$>l9z$nvtMvK+Z;1mR&;t{D8swi^FO@b+>Y7jOiv}(c>xpk&G zRiqw;Kp{nL0=W>VkV_##&fDr#iBymTYC_1VBUGaa6~veZ=(Dz+dCvLg{li|ohM2wg z_qV=leb$S5Q5$3Vv3g%4C`q_VD8_!ydaoGAmiIx9+bn$1XilIMMhSyg{PQ=$_mXoP zQpLEAD^j0nw<~l=HlUpIw_M6^px!d*fL<1aIWE>OZX$oVN&u#cZxnuQ(6d$hvxG1H zZ!ImNvM!FoM(rjsOxu1v*8g5BLMzWqjDILoE4Ho7Q)U{UOkrsne;T2E@F}T13R`zX}=6A-YrBt%}ep_p3Z8X#!}&bV2oL{m8LP>E630J#{~8;eP&jjki8Q{#`=HUl*8=UK(2uU#oL;&Ca!<}w#ax~F5={@!?@7rcuyja)V*t1pTm^N3qb5b2K#LchqrH8NKci>{A z9YPt{6UX$RcOAmBGM+RKrJKFJk3To9N?zoVOfi--^bSNx7Z=}AyuuWDOq(`&P*(h%1J}_d%$_VuVv?TDhxy94{Wk3BM*1;XpWPS^ zl)?(^dUpZ8Q~2xyO?&IUQ31Q}5;Pdfm{JilQQ^u~K+O+sv`VXrZtA9oKdARx26d}+ zy3eee^H0dAgk8-qJamK7r5Wa1a)z5>FcTp_G5>d~Y1O>he}P+;`euRxBgWC`!HS;{ zzySzIYe?P)3PSVi3hXYJaSF|Y$pQrf;4ZlpC`w-y3_*Cl4)BnBxC zKqUE+FuA-FyHYe6Wg~k>kqyaxVb^Qn8W=oK@jBi}P#nQd_f>(1EwGD5tjX_AtGQqE zScz@=yr&3k#q%vij#w0TtNBCX;>#AOOo!c3#o+S+F7lN=UvYINVlQsZ%I+cu^J|Xg zY)~6eLf-Mj&R#xROm;`TOmI-4|^Qk`KME3pIKsI23A4_>V~8#Zd;!GUJ?dBs}L11r3$A}0!sSFQS^5gc7YyNooS z#x6VCJCpioo1zd|3S=8-TZq>|C68Uc-Sh!meg=}bNV)Mfw}bVg<;{efE-?}EgS68v zj>n>k;=%k&LpR4Hy3;(iZvk>F`9loB**}D_od}TC=Ee2M(W)z%XnanXa~k7ZkNaXXt^=p!Y;Sb%?9a9!(Br^T=oZ{ZGE z8wuav&H$@NTVUAJ`w6fFE*J6pK8E#IN@4P%vYAMGKslDtG|Dcx5UTgo`@L0YRdXha zUGk5}fQkQX{7?g#khn;$tA+28N)cIrQVn*&XIK$z zK=FO*W`(@NmF?Q#lJ^uCw7Gbt$mlFg8wa9Qif&P>i>0_at${B*^ri&JA^Z;fZ$js< zyI5c7h~cKN5Jc}69L!_j^VO^~n>M%Km49Y}%ccHB7q@dbGQ8E`lIOrlyI*U7keN~x zpK*tCEOCZc!@e6jU30=r=EAq5e! z0xdsj#i#NZNy{`N3B^d918(NHC|jKq=}<|6_$WjeX#K?`H)UF;l$2w69ew?_yB2kk z%cY=+s}?q zcdKCLHv4I%%v8F86>_ooiPYyK{oOy5&YK5{)S3sr_k*-WvvsgObnS(kFM@h2VzmQz zujgTS>DZo z641%e7nRA0qPDW~^V24E0pw=VEMJXOBwub~eJ}hu08U0yfQh zFBKU<0b`kbeORunz?_JtcXCmUuZ2um|K@g#HtY?`qLI*k~#?&9A3wc+tZNB2EELlg+y8ry03{i8LdXj z!Ul;fiYzzRrO6qmFDOzwkOzFORJiSDzCt;zWY%yf2Y0C-5C$j9d)Ew0SpgfCv$N$s z$K}@@Lgiu4Q%#*SWd^v3%T{7s)7%*7IMruK9*(Yfz_3mXCW_|jLI5N zbiA&4WM^z!UP#Q3O?u1Dyc79r4ll zVzED@sBpzPlbcx2o@`|D+-aiDq1>6RFwrtaN=A3a9fkf|^2)D&ehpud>d16sV{KA1 zv+#C((l@)0ta5D8=eH(8EdBlLt4UOcbiMa>;@rYPDXVRb6Ct2*+eCiNIv%m>Qzk*c z4&-%FR~?1>K#3`>vMs%{haQ?*vR=LVY66(0n-bM>=n>N2QoDes(%A8e;m`?r0@#8u zx-A3~=SE%W#i#4XL>oOcR^ynbitNQ?ojw{mV!>hb0%FpGi@%UeAf-*;PoUx|c}c!z zM3JByDk3_lj{KV2+Jd%z+(Ne+E*1ZGV)DKMY>>{hwJGN!!Wuhnp22nSr#WbQ0_lXu zQZ>=IQHRlpcr~kZf+w>wtDs1YVmYle7YwK+1ZKVMNow#gXo)@ofv5PitaIeAoe#&9 z466v`Y<(2T`20oOoOl;%+Sa^PL$)}3m7()6$tuYzR290cA zm}1ap1M6HijQB=oI9TlG0OLt2Sqq&fMrtIq{*#5p1k;ax$DJ;*!^)@ z=j5L49;`x{Yq6{{BhivgHfVriLvH68pt5QGk{3nc5nUdB*j;>5AAX>jbu(>PAiUO5}qKwO^`_5h|Qd0J^6dy5H`8m>X-9OZs_~=Wih9 z?S#pv1enGT2&t0wN4|=}ZJCg7nAyX0kcPjOtZg?LjU@>=K79Z=yNw5RWMxohp8LfG)6T zN`k-s#8HPyOjZ$oS=oKN<}?NIDdyiSo$`)x#YY90(Zkodd92p30!d{v;M6se<%+o2 zR|-IvwHkUg^QNW`Z8)avn%gwdqI^5cdq*Ejfm5HG=!{5@AFJ>Z<6_u#Y~IuHbC_{d z(XEAnqV<{%J3Is+igmksE^0sd2~*taYB}6zd`g0PjZn%YzZ&lm>w`3Hwz{)X)tFnw zhiwvG_*&hGd^JPUIp>j^3$Ej4^|sWC=VY)frH?p;=8fpVMZ=+Y+h+HlCoQ!ZA4iT9 z7}WQ?ex*d-eCofqSp16JKcoEUM_T9bZT&ID43Me*(EZNtboK;<(KW8bL zB`_X#tv<4OF^FIPmLVQ}DjN+dnx3~GvKCji6zZz-9zo}!O>lMC@Lj#^S;Nb?!&R5{ zMuj;PBS>a(D6baH(5Y9yM+q6zT?3y^iagk(emx_<U>JdH=&yM<+z{5- z*#EE}Tlz|}OxEWJBlprDb9M9f7KcU^^F#vchx{ddFx0Tz8pT*)ziOT(AJ85s&MyhM z6%q3VIjSLu0wW;CqNjbo3~w0xm7?TO?5}NnDqgETsLlzQ8mc;qbDsMAV=uJq#ap%W zHOJenSTLi!;Xw+NL4=Vt$l`EO1omu9Y8f;pd+jjlzumJ(Md_#R6w@NGFY9xiiK;eoC zj56~^iA)E}PfFrH_uc^*AfYV&zf=loc=VDL4+6UC zI}Sx|q~Ff2pfF267HP~K+tA2vV!5+tIf0lRQA9`%o#a|Oj8rB!Tpy97lEIV5Th>=f z0Z^81ee#)!rK$HVETNnpY4jL9D@8qn&&jd}dag%~M%)Qv&7^5Y#{afeauCXRo4M_Y z=LstF{_xVk*%|se;dkSTRey2sF`fM=gxo5#LzRrY0%K2F6=%p;OpMVmi8}wE^vsuj{EWC4;WAXpbuR?LGo0%;#1kBccx4@-`ydI0K)O z2;W9eQxjd{H2OZCgn}2YW{cBmzPx!!il}EY=FWrXbhce@&CD9Dyw>1Gx1d&6yH72NF zCPzL97sD%0oDFGdWNZ$mIWNtZ6?kZ}5zjSg=Ix1hY83AVQ!oZr)+myocC08g!w~4T z$I>HaorRzmIMGmbGXH7yFW+i?S=Te|mKHYwsxDwJ+5~R&xJeUb{dQ{)B+#E5N zxl#nt=uJyh(Sy7>U(7ne?(El4nXLAQ_F(jS^_v1UlX!?#NSwJtQ$jOu9YEto4KMc& zAzSW%B`bZBI}p3lNrs%W*+=Kp%abW;f=Y61yg>9}Ok~ukf}Eze!6S?3)ZDJ-600ux zYQ?%-l3VzBMkVW_B9PEk07HvP$=Ic>q=orujdJ6doG@iWVDPQ-n@M@;Xev;^%wdt8 zqTSeUJ1$H+v25?k+S^?A1lU?l=8k2xD$R80Wc--XYpFw9A!j>H$MD=sGp;PM_t|Cs znrB07yj_-I4>Tlo04MEy$%csVr*alo2~bVo z6p-#!d^+b6Nm`jx*Xj-{Iq3Z8oJ_9Fom@vl!i$Mjc|bf<1db!te&So01ef-(dsvXyPyY*7PDb2FUspWV*GEjP8WXT$Q5V*l?+?F`KMh+ zKm1Qi(`LODtH=);k7si>FvTWKr}k&l-sa;upVkB(JjU>E zRZ5l?L|{JRFPK4!sr0m`i7^vQ#%g(1*S`nu~>~D z#xRlr!PrNB!#wsNwFxgjcj}GtHj4_0`H>15xY#QA>Nl(vxU(JFr=04S$1T9*!NV)1 zpf==$J6kn{t8$h+!}xnt5axRHVJyDAz|^pu5tWSycuFaMueEn&bstauvtz8^6s7>O zd8sUr|6VFg1=Gf%h&bE=ypB%=AA;nHi>qUsjrOic2RIxRv-Q%gIcvl4y^SZnna9a> z!LesbcR>3HOJ!dsk8|iBz{4%l$&iGJLpO31EO{SA^&1$W!?^IV5e?kgo#lOc?pnvZ z`FPaL1p|G5uDBfb(0+?Xk0mcl7SNO-nYSMq^s!$_LKF^j)o4hMbe-)BTt+?A0U??1 z7nLmGwpp^wThNi@OaM9$e--bm!gNzHX8h~sG1~te>P(Jk$V>l;tY-n_g&lSO!lGdD-QpD92fvM2}lH~)J+}};oOktTkX6PpV zPamgt^cchIY?z}^N9;{MA|Lutmmz%5x3ddhAYXb4QrG)k z6PesII&HE4?|_~R3DZJth~nSeQA_OH&jS`nP2n=fB{?w%&8GYSsbH8-d1vyYUnyQv zZu(PwsdHE?LH~QFgRjK%b4Ok@=5*OgQ5TJU`n^*wT2gPVi&Tt}6Ql}T@DYO5b#yXO zT_@5(?y<=IRQM>T`4`RZuu+w4G$QUfGoZs&e!Qc<-H2L`uIR(xS*5qrVxW5ZR9+~X zp-0Y};W6^!^<^odNsf9$-~b#56+B3bUpPF!;>qP~&W)D^pQ_Ho&YjS&1LBYp&l*$C z+jWOMkxu#H8;S)(AvhbMSL^+>8z+&SM(1482~J$DbNDq7rI7GfFT*>FKP9_}CujT3 zF*B*W{^Z4fmhcm7B1O9c%t9#kB^&zHFIx#Mm5D?^En1-$2H5fLCnk)Bh`k3qlddp) zy{vkU)3HR;*>re+7qB((b7s?*Y zLUOGAU)8c?#u?^Fq(hLZUT5BbkPXSidFGm2VvbKJgtP5nOPEQi8sSisaXYT>xE}jr za}&nYf03{M=ikxD=WHg10sO%X{I72pNf8y;#r59LfwkDyX%whnYMkWoDMEUPgco+13bRt79fxL!x>6W)F?=CV#)ZaM{~UFAsE=TBO=~c|y*tCaYSAd< z{O0j2uUqQvxH?|d(${-u5~qL|ltm>|42i%SI_no@wl;@dfM_R9leHP?A~GB@DKm+b z5&qfVKhP3`Ub;zz#&kgmM(m(ART2A2MvSp-1CMV~O0|Z)VW^A|rypfjAcp(yNShXX z;>?za2nk%`ON|pm4%VU6cKcz4rfzBAYEcO_obi>3+)C4810;x%XS%a7LpDg!vFvM{ zSM0_IF>VE%FHRz$Tr}AXMHq-?K?`mPgWiKT^jCMHhfV6$W{cQS7xCU6)Q&B4w6t4| zg%f1c+p^SD=f$a>l7O>73BmB7DWBw^>k^Y`N4%XM^;GK3IS}EuhgZL(iC&$pE6T0B zpy@(hJ7%tjJUsik~prUpje?ezmf1?ASfz4BhDz)_B&1svpsOq8tWZ(lf5gn zzrIX|@Ucdh76Ze{EB%09bIv{`M10sdV__uxdn+FAp94-bQWA9$TRY>p8O$}&1;N9jF8l33X06d@s5ypVkX|%lrHtz5`2tzkgw!C5@c10CUft! zwQ$dJM0Hzqo1>vGbbP3OzhjK*zJ*Ypwe*fYe5>-N0Wo6mf*#{bGgkfm%P=8cakq z3im`Ghxg5pAEUeg*@wZt>kCX-n&fz7%ooH$*b+<0qsyVsv1O@D| z%fQ>5w-aR18e*7s2g>sR9cWFUbiK?G_A5di>J^D(8yBF~sQHrJkTl-Gik&?F-?y6&K z9((l>%p`s;CKw0VM(oL7t^tb(wD$-Z+AV3R(32EbUGkrxdMVTmi^`g$(p2&;?wg~X1OM+V&If$L4$ge1RXeMT~N##B#^?9prXHl*$ zReQ4=7=bXXFpX<5<$!}zmXv|=!OmN7V^VhR3UC-pN&7;2Qgu#@W9#YmZ#p&VS|=X;lpT87mQ~LRQ=T4d^PDjEn;Kre zq2nmH9pjktv|s2$3e9C2ryI-xo4|%n8QW#_MCuX4pl#QOllyc|SKtkCYTGuW7i>MV z43X_)HwwBa4tP3A}(Mw>50@^$P=PSyVbl^9NmvJG$Xlniur!qzP1e?duqq&8z13R{>F%) zXn1RlPNa3^M7H;zequ*cY`zp$n}7y>n>yl~kQRGe8N28)=2C4==dJb$Ytq+=fWYJ9 zNjZVis?Rc9o-}Rh*xW!j01ELQ<=ieTW+qyVJ1l+Ax_U1yFEG7s=#63ky2|p`b|5P3 zRbkL@5z<~h$wa9%c{^-KL-FIHh1_d4PsH|zPD8i;Q3HFr6Ae9$r`xs;ET$aPg*oFEsHFlMV#{JtjQz9rN!SlQA6yisD1dn~ z`^iJY^bnQWXSGp{JM@@Mm;O2LFjsY(&5s$r%T>andj22yTrDdw{&FxQ$^f1IiUqYu zEy>q=6o}gKz-@hT(#?Yw%3}7#S(C@Gv1U2MTsEE`x~Af#>|>h`fm4;|*iv(K8TDINAG7UmI8z$ExTDC$ z5t4 zOWHJ%3Cd+QIq7i{{yD6jXoS3%fNgQ(`QK*1XLBHy<2~f}3WKl!_mPsdxGgx{H^Wg! zrK$Iy1cx~;;rebIGcEtGhz^{@{|y0uwqO4(?LsDAc4E>DjyI%2T&4CH6Ir#y5)`(? zykR!>BM-gKN@o>b)_-FX0u)P5r#w2K=^V<2p+ftH#DY8e={`988{}It z{4I6~6j6ci7e69TBkd06?YxMLKZD=KE$1U5)4*!YlA<}yJJehq!@-`}YqQ>vlH1Z% zpd*4Y&Tifkbz~UeKhS6DgrVj#4&3%jiG*_gTGUpE13u-5StYA1%xwP}u{<)Lay-VI z`OB#~57yOQMHVFyLT&!w+Zc1#6D7(Hjqs0um)py3Pm@f_$!JUB(mjsp;WZhRCt;2Z zN|eQLRY)JLKj(-;ZgjF$w2u`gCeO@BA2f;YLm-8db z24a^fUot_rgcKQmlyUu5`5{*pvwktW^u{(-DRh+kI?#82p~N-usYBRa#W<+Z!>^sF zf1%pdZvLDD6dL~4UQRe#Xg;{fg@)KxLr=9j+liH91?5cXwnktwbkaGzS|guiFFljp z!a?v4%(U9BCilM3$Fd-J7edt=Sb-kX&b+k_LZi>a^n<6kwD?u7xQ48H@$=L1BD4a_ zp3=#r-s!<&JR{;<_5-dW;zZ1Xy;=f8l<)M=VZ~4F_M^l5J&(QWubo!!Awwk{a}g_G z6ylzznO4i2V=;QuooemCYzA?`wrN+z%CoX^ULJtbcKq-)3Mt zR->J{TV6ibX_9QLelkCT0*YiP0PjH*UB^{wWV`W!W4AWHg_4BOE5=>B(c+ADjLgIZ zP2G#m&#nO%s>_fF*(^7XP)jM2kF;mX?{N-b5m zHZu4-U+xDYUAZTzvSiaMrgNh9k%f&lo!=&ycg2q`$NSm-x#Ze{h|sQY#%)PB>Aze)fYhAV3xPvCL0iFs6TSDvNI zVU7Qt^_3@SoJ+2!9~!+*K`8l*Yo^IuAl9{y$kXRKrS*Qvy0u{r9^V#bOzpT~3g3P| zq(C2@nt;+dj|~q`zf@%$isZ0&u+(<%0Sbq3Tgj1RdM0lh2yx)ECMw z-SfKd^3P+au70Fuua0yWXK~5+<`>wI)4Dzlr^ls01BnvH`nLgP87ta{rL zOsKmlc%hui=#TAbTcLkO3dBs~XPe{(oukiP~WFkjPv9H#{c!HbAACyU)Q+a}1 zodz%Ch)E|}SpB2Cl#aKvWMy8!2ys!-jU(T1H$r=d8nrbzY4)Fnonl&xp=`j?$jfwB zUQkXaFDk_*x?c!VTcHFWIRBj=>dLXTg)c!1dGEX)0IlQvkdB+(>B7KW=pPYSF)=J2 zyJ7q#&U{n79;cnx^r8!@tF2^%$qkyORE_5|M)^WJ-oJlmcu55MUS4kHmlmc)81XAb z7_E-}$7)=uM#>N8YSYjhM{g9JN@Mo1S~~C>BwG3$iI~BB=}-bFT~uf3L|b*$VY}&4 z;ElFbT>>QQzPZtEk&n6v#m2E*k6pPo*Hb~kCT4(4pg|swV38*^(nHWAvj}EHBcDPf z{XX|R{KKW4|HyqLXzkHh2VCbHnS6_!QC3^Mvd@J(ueRprn44eYy8TPL`4&5eHO#826DbjUzK2kGMY=y5Xx;0|Z`K_t12; z_?)R~QW`Xo*tXt#ujGhh0c6j7g{AL4GfjW81!7z}f3GUHd{VCen8-@sj}sryTxgdq zj~q}p9|1hD!vM~Pl${UwuR^7L#Fz1JYa<;nYDN}HEqM_7stEOqmYTY-!kT{^a%Go6 z#ExEPW!(W-bfba(&-t9`PD8)6s(o~dB^UrB2v7!)!AwU!&MCrrcfSi<=Qg zEAC@jS$GcR%WfCk&|4L$gFXQygBqd!0+V2)jzOQ|D?WN=GC3}!mGdn#;Aeq%#^f(} zaA=_XP`U2UT4!6%y(nnKRn8IXdH22ko7&ukEooKK>oI1^H3rXP*amOFI=Le@a803M zSC7Ji*1?`ODD5v`yzy49K;@DX7(`T4J+F_5;CzX|?zQ$2&j)UFd?#zIn2`%p@4Lbr zx0myCFGI_XX919w-#$9e^|Fok_qx7itgsP%%Kpl=prfgvKKwyOkrM?N}0Ru`iibhy9mtdGGSz;z~}WLt4qnAaRsUqDk0u7l)et zvrvV1*-FhnFt~V8hPb8{o)kRWNXanZ^oIXY{Tfe`;q&$XtCQtf4Ex!i{m<9%+mHzV z5>%Cpqoe{Nz`nivn1#J+iy|3!eom7$6)RB`7ydj9QdJyfmrE8o%(?(q zYgE5!jXHi{o0^i;a}tYn?I7GVt?ncNl;qOi(6e zRLkUQD(Hlx6LM_eIvsNnui0u!0!1dWbT67M4TQU+%ti~6Nl4DoGt>F&oWFq73v8qU zg^F>qMkzYVU|O^!sQ&JjV(|EbQP6;&?j6?v@AySlGxoL5E8e9J=g}81;>9>N3t>(o z5fcv1C)svHn7!6b)s!Lkdf1wXnw6l1*`0|Qy?g3?PM66O1h6oeh}t4YoR*((Mh=$U zoF$t*FF(MyChe)9IE)UtDZrto0#NCzpz~Wc8V~{Tp*mXVGG>++T&ip4l+(8~NC7Z$ z&xAg?TTH~Y?84G$P-6l&m-82!({vK6P)cgm6g`UGB9(f1q!(dn4w7YEo$+}_iy7NEplK6Hq0;s+gJZsHmiOuNf2Y1EW0c62MqEyYXU33JqYTdU2@JWF>J zp3}VI%JzQC6WAr>dfJ{^>Kk0uQ;CqWRvA&mlGUPSs1M?2S!$0np{A)O3&N!b`@ciO)J9?-N7+_2siEwvHUI# z4o@4^rojB-VaM7l+3onw%lI*NyQc0T3VuCcq}S_>z`+xhEXS&vO?jKRm|cH zfQUHut%@tA92m|s;jO!ryKa>8IS=uT2gytRx)Gf?7MbGkt*$VK8R5BQU00Ml>Na`u z_(=Ov-l0C^t9?zSs)LrEMi_6s9^qB3j9O>M*JO`!N_|3q6xFN|VKd*_jTb71(g9{W zRfncnPQm8tNQ{B6Lv-4p_S++Dp-~c-Gh1+<$NY2$B1`KL-8uRBVja3nP=l})N!)tB zCyzGww_nrwXXz5pPS2YwuQyjN+0N}(bW7%I(m&G+V^_R?qTxOS)JDZ|ZE)%-`541% z4_3&Z-x9sYUI!hzGJ9cWt?9`9(dJwuy-g)T6^-)G0R? z?#XJqa666lhR3#XAnlz#$DTS8gEYY`pJ=;T&3mlurXNdJtijfpvUd!+4!tia#M!Bi zTcO);(F$M7SvO$lhFz-U_xg}OwbGrU+%b&6Rx83Vn~>s#Nm!2HgzQIxQuvM2zv6+0 zV-Z^Y5015u)cf4!p3xtFDzjUvkyLF2FzTKS!Hv01G_r;D1^J)Ta}7+mZXZRW5--e| z(2oGh4C|)tbXO=CCjmFtKCPD33HxAoD51*+oc9n~UO-|OafX-XEiD&NWzG-GC7 zWBM$8QvLw+>cyknK~^F_I;Km@1qlPaNf5u^^e~Hi-zzj;!`Nku*gWXNb`Hxh5#}2Q zH6vCg`-t&A22#-kv(dVDdhYy4f9Sm!o=07ddAo$Hv$T>*`iYf&NlxRywDSiQg|;QT z)Rp}Jc@RX%P5ub2QF;`8>)O!c;!z}6wFT2ezh$HB!TzOgd%DH=hiHL3~ zQo8dB6j+b@Xz4>5Fti3>XlqSg{57Ysmur#XZIFesZzLMMJ}-ryd|CbPTaOC28#Jtp zDSBfj>tHShM!qd#1&vJ6-Z$*#F!4+gZG3jYq;zwYEC*;Zr)SrDefBHmYkc-n+jQJK zsM(I&qE7YOdEqFTjt$JMZvJx}0hA_3@u6g^nGjo!IGB9H?lD_PzvMi+NzHl@83s$! zggHx{#w_Un?+dK~_8a2je0`+V)L7OXY1*tZD`WjloHs0^!uLWaA-^vTL3Cx$;bI%Z z%dbOB#UDi;Qcf%!dOy-=0M`lD#JzIxy-H}&CrgEyiPPUJIa#*gtwz69ntX?t4rV8Qv(Y5rRqG4>|4Z|5EyW%k>*c`IGhaL z9GF>W@2@V(AB|(LW*zJev8s%@^IIm#+<(ND$Bz9E* zeGXXhpb=XL9~#LavwR>maVB|j0C(EKlD04B?YWm?s;sXDmNoXJOF|ZMJ?VMzxs_di zx~dXcY(5DJM;?jR~~+LPsN^Qi1Rok9TiH7Zx>tLo+$q@!>?yTbJV zSoCJ_&`C9O5xE;~hIR2bHz6E_=P@p>CqvJ_shlL;=URMwH1>C$bSj_BxA6W2|M_jWO&tX5aK-<$%#fom`R&vQaDG;`A3!#QzefG`NOkP0 z-x7$|cI{ZCVK-mOc=s@w{}K^U6={wo`NTjz zrQNWb5ZeQ=a|fN5Vt>{dNVeAa+9GztaF#EAtt9xAW=n3ii)v6S>WE9(N3KEn-8^SR zySemg=&bBKTqu5*V$A%T->X**y9!iZsNFHjLQ*ybL5vA{HOu>mLp#OTeZ!CvWtd|; z?JKS<`6G&=+b=VjqkPJ{391S~{R>t6rOB8kNqA1!Ek4qUNeou~^O5SHmBgLKHOA%G zY^H05UzM$tUB+460ZS+)x8_sM5v5=3GW02h7pOp&c)#TLH)oP>stKBDMTfa$34dS@ zQ+h6s@tBf|iFw822c(d?D+F%3zS#sv3UD3wNAO^K`~X>+%0}xRcKve>?1tem<| zTRYWn!OVad34+WzIWwcOT1S!_em?+zBz`@JStW0->7qZ88wp1e3jk0!WCiwf2t%Zc z)NfVGzoj8Q*M-2XHW@}oktZf_&%>!0V$%cWMi1#!tHQ2b}x`-T>;^UMI z<xh5#q=N$nJv4|=!Nn`STcSW*A14n>QTbA&dxdgxHJVYein;0tr57hy#2@3 z0`|%Dh>VcKFb!`O#4$M?-CBPAk~jK2#2rCa3~)`k)4l21ysT<6cNgqNrR@84+Pi=# zQFagXG-2qvXB@?Bt$3xt#3izdZ`VKHPWPD7sI#cjdhh8y@7X2*v)8fMJRVQVuLEtm zYDT1{uthv~r9^iGyqwTkix!Ywd>Y=HW9|=-GVubFN~Z=Fw`NpI6Y3(eix;PU4F$2Z zyKgor>&&fA1tSQb{Ip6Yul@zW@&m?1w%|W9ON*>J0!fWsJJB5RS}k!mBg_=+F_ER& zp=|!UI(*U2zz^l6uCy$l_^W9{eLQ3$_M9-k;A$$kKO>M=?zYIS>MuvDN?#1=9xqwb zSNoID>Z)w;C|Iv8*_pO_iWUn|GufM#_BUstS;nGSChHe{&AFK&{(|+Tp$BDO2Hbvk zx3%e{xAA=Zu_b%P9r!%-njEHMzdcCux0>fEf7IwB<7(01*2wqGmL<~x*XrI+fx|ct$I$JF##~x%d!7H9TB4M9&%f z)gMYYat!U_RqfxHwo$vWodj(#bL;gjIe->dkxXm~cX-0B!JQQ6Ybh=GhX*Vtdw|=& z-n;b?ebtw?jUM9&lB@BuMxwozI9R{*`M!f~53XSNyc7lK!5CKl{tjzeB+3LmK?4?D zo+o0lf?t;l=*8%@%e+FwEY^_E^g??ajQ9HR@TfA-pWN~srSFOx?7RyH^vKHFB; z$ZhLJc$QR)I@*CtCk%{ir&GD|KeXJpgJ-n+!X4AdaV$Kse_t%Ne?LDIX+z6*3YPF{ zh)@`_p4qcNo?7zhRy1`O6)eY0ibzsf@)qb#H7)3E4nt*j;V4hWq3IFmdWq$hrQs<< zfDfG^nMz)yNTt1tXBAhQTT`z~I7XxIYrl&p)7j;RGu=fTvBcSF40EOx-v(oW5BT{K z8<5wVkxH8~>|xdWh$gJ`5Cko|pbe(J;bC|c4QV&JSn~HoyL|Kx-9> zGOC=)M7>jP4Ar3kea)|w90cbXt!vOIti7Ar)p);Gq9zXVt`?FKao zsXAj&bz*Ma`H02RQ=R>yyqr60d+H>zvyO`Me1b-J&uLpEw_3K-k_yk3L zbY_h@GlcqmzfGt}N2=?IV%-GDtCZ@YA|_g-!#XvHpBGH2Sv8iv49pW!(fsE>!r&@> zZy=FXyrJr88cN5>DD%;&tBlHasN7~se>beMTa>Ds2zUamrGvh`~i| z$ZJeRJ!0%0cp~!HLg>xB+tYIcJzqF_i=M!`qz@a~ru{kD=mj;EF1S_gS76%I--fD3 z%Jo+SR$vZ-^1?bEh0tviB3K-%mp?3)Ox8cQyY7nmgLBK4S{6h^jzP1|qMdA!Z@Lt& z{h4ImVwh3x0HL4Km8-61O89a4b;tS90WtxOE%h&6%M(CQZfk9^%Ur?4SEb!~0y9p) zZFTVA4QR>%%hq-6Quoc!e{`pz!s^@DSHQ7aGn_F|h!aVd0FyG7 zLt~+4i|&+&Oev50VZ8iv`4P<2?EO7L?wNs<+ZeF@UpHuQ;OV~*@32L%38D)*(oneX zVjSqs!`&_VG(Q@nQzF9sw6{4DP>DQwEQ@Xu2({X8+9%CQjWYX2S#*=elsm;bdFeoA zPx`*AR7JRhfmG^q8+*$|w#qM*Jttf6W=k6Z@&Gy;@b0re#ron1ld^{iANr*Rjpd?Z zRj1=}A>Of?_oq~$W?ftOmcLIfparO|^887%*RKqQy$bYuLT^P$OXX>@yn%%_ne~lg zvZr|KI7Yk^oP?U!VL;ig6U#E3bLzZ@hDCl@Dy|2FB8|6KtsZ3X$wj0B4>SzSn~w7-pqC-KK7U`i%oJXkAU zK+-raB`nNjJ~dJjl9I%0;Xiv_i#e;vh_-v+J5IM1>W{O$XDfcC z9Ah;)zBBBzZ(hr)Z62{x2HC9&MsZ;t%@6MnMRR(kNFABZHS~OOmi3AYPKDpQes`ES zyxZW)VP&1u^5tcR@zn4-*EIiG;xTbusH%Ukn*&KPbKFQ7X~_0O6{yz@C}O?o z3y$zf4w_keV|@(CU0t`d1A7?tOQ^TxbW`LY3~-!;mG&rtaxN{qXqL_5n>JQorR?fv z)#qJ2Bz^VCpik`+B|CG>815vF&?q}fr;VjZF0GCWtBqZ}CA&gJ*%J08&L-5oGD#6< zuhd(_HCpu%o59ZZVoEd7e5i(UXSc{IaQS8C*2d-)7q!rhHwOSD-QyN0WW1+okvKW0lri zE`!Y3L&)Fo1Y+2!0iW?eG%W7}1tH{hpJOzf+-wO_M=s6qsDJ2bWWJXlzk z)6ex0EX!`VJp<3>1+%e2YSr?;k$kA~`VuJ*G460nUmm#-=t?)~Nwd_~=iN`zx9S)R z4;Y${jJQ0~K3ZvvtkDLUswFvZJfa&h&alNY8LE zoMgsps2H0iSwlcK?-GxxiFGJ;TZb)~B(Q(>*8L}!qAG3~ru%i(pbsBSobJuO?<$>+ zn~555u}Xpg%Kfo&Bh;cVZ22nZsAx)DHE+LBES6Fb5gw8^l8{CkyrJ0CaH*}xIey3?>I%Vy`O<5(Rj`wMk)C9)jDL$Znqf}-`KJFAWq zs262~(DoJA_)@;hJD1>7)#FVbX03{!Ss%!bF)Cp1cO0}pr-l5B3D#T`!@7z73R~UFR@HYIP z>Y9zcE&~293bU0K!Okf#ZbY6nvxK(IBw$!`d!$z^#B|I((7m>Nw1MkZf>i$1XrgQrJLW{!>wk2HdO&p9DC8hWVBf#ZtnGuv%Zb4yCz zY7aaxoPyhy3sUH)YoL&~bTk4;Y=Yz(;L%BzLdR6^fjBcu*;@)4>&$=IXvy&w zw&Ql1D0xYonO|spSKGX|4@Ei+nLmKgR1z%2C<@qPHEeZFsDb)}KEFBP6sFVl-ZwJx zTdVWpm?;`1hs7rAf!=arGHU5yDgtFQ5!>qWCUAV5x72D2?fL3Ifv!1k7gBa8QyIGe z^b!NrbE)7uV@+;NyG47$=oRmvF1=wBf<{;DpZd3_;wq7uLRT|I+Hp=mZRk|_ge4IH zigJ-1Gf64@e0;OQ1|M@Bu(P{Fh{972T+zAcLzV*ts#DYb21E=z1~s{qVCQ*^Q#}Jc zHFY6$tsobZw-5HwvYm6AaM*TOgvq^0)pDz@z*r@lcGmmuun&dW#NuqZr7yE(y99n= zbDq^YgY{?O=6Q2j@gqAtkN}A)^2`Qi09MgqgI@VMi*tn2apRhSY{|g4QjU1WvzBh1OpF@|0{qYrhMMDCbO`Lfn)?N~Pa;f$iYk5HW+ z@CnlbfPlH|qE@Vl{?i!r;oPc8PF1cUh3{tJi&@sh?A6_o?|^9R77Z@pLF6{RG2jAC zVTwM*JjS!=o=UwOGtqPUDaJUR+Tp@;Et89$%Zxj+RMs@s>u#Vdts6a?=tU1;BEY3V zb{-jJeKb=FFbSVo%CU<4cf*V^t6z`uEk$0AOR@DS)WDKAx64OYKUBY!&ij@YvvF3Y z71&Q{<}YarN9va@^3+9*Lo(P!ML$#uPFC=I^n9th>dr2Dki1B0Iv~2&mnlEpuNGMI zaFV@=g0Ioxx;(J)3rv1rYr1Hgle!NcGwT2aoQ*2@!Lm0m;)i`V`Jt7zjZ@mWOyn}A3IBj%N7A&I;JKcJ!7LnkUqdA?!#BuTM%^l;? z^%V3-)#8#@*%5UqpTyta#_`rU#cp&G^^|P9Z+kGJQuF5RkLDt(TQ#>?S|QK6B5@ia z;om1F%3c-Kd|u+aVHM14ms583;9ux-+1Ud-WsBBh1o(X3yi$6RSHHNS$bluZDTlpV zQ<=s-xZ6^EyX{_;P!zK=uj`Z*J(1W&d}pc&F8r$L4VPFEOh3xHaA|8@{*;=16pmC) z;(#s}C;kcMsYu+8QbmfqTZ&z{Gc8TQSllv<>m!lZN?RK1-GS6c@zMw>rSU|A)cXy$ zJlOqybN-2Y-i9a$i$^qf8}Qi0u5x(8jIiZjO7cI)S9n9chyMR&Tg(r?&7soWUzl}r5w^lK>iOp1)*Dr0HvvSA_-!SyA^ONI6W$z?OiOP+jbAs%-8U#{K-tjYU+{|}zp ziq?4mr_6dy3sx|&g21;jk*c6_J|##nvZ^2ipQJ+x6*;w=ZAEG4Az^^XL4h0yRLGME z5wfYYl|U6pVo3;@uE82is3Kq*p#MAeyYIFC@4Du?wIv#O@;vX){l4$l-Ep1T%%y*F zuM<5{seBQR&QB-lkR_Rg4AB^!Cv3jt6elcAaMW_c>KYd^KR)3}6GHV_iI*G!p8oBj zGKUXa##HSL+L*YHx*fNJ$nh3=S2&It+kTOKkc!J6e%zbV8MYB z2IJ9&SwIc;#08jd^2u%A-(SS=FqeHGmK+nth4+Xs9iAa+`s0ZgR2^4Cu|5wK$_6|K?mI=}`?p!|FkddD)e7~Fg7Vr-HJ00fhT3g| zLxqgx=)}CeQxfbDwfm%r3Of2{vS-bO_xLpi89D`#)8468JRp)ruQ_9aUp8XP$P43C zTv0;Q-Qi1aXMD~E0FExlAE?l+8uPq-wis{3~tXw*4I*}H4tUW zGoKo%p&<*mRrIKlcddDYenlJ^%D~02wr}Sk6X-q4S3D10iDyOeZ}mb+G{@TCPA}eo z?&GtEZ-H`Pu{A|^B%J1^eDW`5)lw;C8ic@|9tJluA@!0Ck)n>!p09d>I6!E{w= zgbY!%4cVnK{@)=JxbG{R^?gJY^(whl>@oQ$Bc%$!o|u;z*h~SO-0iSgD%QH&gk^6i z*!O0*XSs&u}%lrVJ zsjTpUL>)F*N9!zkgM;p8k_Qs$!-^y*G7IiTAdv%t^LXAr!#+0TxSCKqxCQ+4{-$;j9Bk3-+Xh=Qzu2ccSe-)ympZQoXlQF1>UZ%t4_U&XU2ANy zBmVbR=>+ZjE~~Ca=|$5+_GMA(^Q%vpM1Kyzktto~bI4XS(p1oU0Yizv>Bp{v<5tLC zqStukGBGO8fbCew*irK3!>jo0<;|Lv$MjifLlMicDp`dT9uA6M` z!&0Xr&bQ)r9^45cb5F0LYbK#JOrWTIdH-wvvi6gFJq&SP z-a{}G5NL#&!9GV32?HH0s32r5#>QI+gFD)9;1@vikBp?fGBD2T{`zs0rhEbsXk(r% zU|dd+7e7?2&!Kqv`Q{sMVP{{+$S(MLSgqyY-o?K{u274CEJQ;?nvs+Iqo&rG9VK-- z>-)4iXM2D0w9m7|vb$uLC3IqIcrFA;pP9w{%XgnU>Ju}ZdK8&}#n3MR$>gxQ(Ag{V z-9#4xbob95-;F^4EGWkzVf*s3LeLpmRa`|%?lj}Htvm(y-)>lK?dnU*TIQl zq5Lr)O5G|ptVpkP;~m^<4u+BGo4$pIl`1N6NB=0T>8w=u!f8vyb1RcP_-_^lW0Jl+ zIJI19Xb7*~CJum+p+I9;t%{PT=Mw7OW>HTyx4wjW9lmZg<=!K4fMtRf4bLTdl*cb- zTbsJ0-A3)C+;d#sguzAml%%{XBfuezX`NM@dl7z0yvv2B=cl#TSMKij?6NpS?Ph(I zY(~6OJ^lLG7268NAAzhE`s#&4#lM-XnKv2CxOYaT)%39cl5zKWo$`r<; zhK`&E6{_}(d3<^Of&Ia%&#x=2@}I~zb9f7y4<0cU)A^ctbtoan#tnA`9h^!W6llyM)xK+G0RWi}J+l_E@Vj)2Tb3k| zQDNx9vTJf(lbx3pY#4G+lLV2*6|LGNLsiE7I+^~DZuL#4zU>08vx5d_UEd3)^gKqic`S$P@5^Fd1!3O>Q6uT1>? z51WSxCb_eCrM0Cm#3sPXyQ*(}9#k!FbBx2(vLuh*!EM{0OiSWgjNSXN`d?(Z8?vh2 zRwXQ*>kCf3saZz}E^&pekfOZ3b4Ie~CrpiN)uy`3!SMI4-cqEMoM2qhww@`ole}ZH z>ce#U>~pz65;Qcx^j{9A8|9yn>(1u9ryq4J8maEc2`#Mq@?o7rp>@L%JDd^FAF{~o zNcUt9f)cQLOX5j!M`ysM&;i=@=O!)yA?8ujo`MOhL`jCO{%ka+5?IWT-(Bl#9}+DRrrG=A@cUzYbdY7J zze8Gm&eLriGbY>z{=h`m@$1tBSBlpy>%BCEJ@2v}Nem{Qh5Pt*LiXC4Ur9!=eLDOJ zFatP;BIoTGDE{*c390`Rcwa?je;r+`{ug@wp8~~SN8b|4@dW6}2tva~uuLC$qR}fJ zH^gSuKKeS(MGj^4KQ9{(E>bAf-BI2H3xVUCgkQgfn#&raoy2N7FfsfEyT+;FuVedS z9M>N#`pn$NApR*OzBm?TKoVC-DWWCFPrD-9HcQmbL zsnOr@n>^JrnEuHTRca?<4gcDNPTVAp*+WM_01X)0D_1^mlHNUpv~t7*O&}vME*U7;oG+Awfptnjm_r<9hVOL#)L=idaM`9woFBt!~` z7w$}Hx5KJ%6ZWN~m`U=(Cu_k=IUO{0g^Awj(Qr+2YWf}Hb_yevU&0#v(diw= zX3V_5QV*Q;feC9eU*NJ;6fI?xagBfXkEefc=gTacJ{?`O53&9wG$>6xE}48p9|YW% zk1Awghx{iseDxcj3hRizxk-xiwE4FD?sK5G81--}yf#u>IJtwPimY*_SC7$~jk}>- z2~yfPOj3FLC^38ai?Sut>+d)Yr$1D2Rq=Ovn4{6*wK@RJ5R&w+{sq;pV#-2jU&p%?pyuND}1FA1R!2QJSqzC+&{? zwvWE0@{|bim)He6x`F(^UNHat55Ltc(ow?m63~MXoDL$4e{dT5rSqG}Oa~b=)xZUK zR8aXtfx2ihL_dq-JX09>3*}AS{=$y}27Ft$Q~b@Yc1`0c&WdX>&Ou%qtUv}OO8`dM zo2O~dE6`mlO-dRqDfaWG^H=M7khGnKr*oI9Me5Y(XEUF(C`_X92{!mEj|A1(&_9}9 zXl$8Qc%(q9gYecp;eNE6;o65AiyLWU2(Vu>`nPbEe)%MC`e1Q@WyRa1U8GQ!h?vb< z@!BII@r1`O6l=>*gE}gXRi|=L^DklX z{AaRmSaZganIdGPpR}?cz!v$m?{q=6j{&Q8HlxHnDJ%>n$xJaG+-UtEHx)=5F^Hhe z%GE+ceeo`QAE%@Gi=^avt|BRi*loW!+cHj1GZPqoneMaS7>13v!>a-VN9HWP23{_k zX+(@8ze!ATTkp@`ads41aoJ-m-tMW;gsq_2goo^KIOMvneuLGjTIspNz`6x@D|3e~ zt%D5Z4V_=jYBv9)>+HBMBos>MbKCmd(YZ-ya%!A_9p}MgCb?B4sw@K(F&>ee%pjsZ zW(GH`A_Z^@f%jq)1^SHnQH7@hQakr2i6`i$tGM*A*ywy8*Xp93_By+s+wv@KCcJmY zr?sDDd1zBB>UBM+TL>yLZq=ZxdNKK4;Ur~mmFNEIEcFg9!kpslvE!UM%LfN$8gqyt zPt{7iMQR#k?V8swj;5sxSDRQRE_A#OA+qC3p$@)W8VswH!Qo4N zu5v___tzAr=oDASV(#=gpUN4jSz_l7S6lnN(f1g)Q|~VJ7O5b|&T}Iam@N%dc%NFgZO>OtXO>`32ac%A&4uXa0b zuo~I0(NkOS+&5?$$Rs%WAy1m*%50$}KS+ym-soWg5kF#L28M{zLVIFq9FVA#6r19+JYEc5M%U>@UkiPzy-iFpS{!2vnn>By2+PWZ7;|s9`GLrH)~xM} zQiweqaSHP7h;}Ga6Ewy8t|lY5*x&ukh3`B#k3>0Q@qug4c3$_m6RJ;6q@10u;QzH2 z$q=cTSVb`*c9{8OcC^6u5b0DS6(izR>0=(=`k9YXtKyD^H5HUEoae z)=@kYP-coX`WO}=u6UUQ{+A%69_z}?YRvK{0#C^_wB~~<6ECZ_o!9jbF#--t)&O7{ zNU$yt;)%plIN%4gQ9b+R02dUmL&s+5I@!SedBoM1nVIi6NidGnGzc+CRV8Bw|bbKgqB5MQ)3tjaSC7Ic@T z`##jX3Ht&Sdv51YcQ^^+*>Fizb(Duvg83+F_?1-Pm^=TYz&hsI%~Ghal29N7{%`(u ze2f2IgTpIoDLf%~t@9U7vo7HRr}4{^7@o}_w4-?R3o>oj>m7=^=C|thp$otnuEL~ zNeG=i>3KoGAL0D&Hcct+YkHYl2$c2-L+l@E+k(yTvHpeXzW;<^O@`Cv%wHAhMQB3` zhAACrDT~-sfwfFJ9*0*fQqklezaj){@UNOR8@hBY6I9PmN=h>0^2Jt?mL#Mh7QCS= zO;{xL@+)~~epE{!Eg9*(=>$2I;$JS*_XTCEBh6^=%(e*DG7iUtxRz^JihHqsZLuOo z@$UxO5@-<#TF>){*bC!D{rGl5e15Z*ep+}wm_c!YSZh{fUg)H}TTzpaCv8LQya7L= zA;=^(HH()y}p~i91dA3w80jGs1(!eh8c0lZ-(V}W!I+(zRa5N zL(}HMWXK#~v8n$cGYN6pmFEPMxE3#lIozTA<3r;xP&e!ED3Y?+=^{?FoX67^dwevs z=}&O+?gB`Ce|g2p-2A?|!9;I~JS%o#A}w7ADpF}-l5llaEXAI!U?nyL8&Nm3ws`$s zHSD#^Ao|{HdCqS7VT|EAMh0#J2CSA#E{RllTFl;{)o57-IM3=^yM~TD^Yk8_+wn+r ziuw5avz_H=CerP=I4Zx4*oQRSvhd%3q{{6mL)(1lqcs;2kK{nVyhl&xJx&MWDjD;^ z>zXcBJEwCFo5uzfqhtHT&^XQB+KiJ!i>EeUOpYBgC2>tn;?ua@otY3*f7AB%82XUn zpX%)B*wFh0_R*#^cN6lRsUSKZM%~pl7A)efuFba;b*ws)+b@`Rx@QK^0|1~hC;a0W zl>R||?g+~x^-6i;>@0~TczTV~VAhM{0Q&p?Nt8*M2v24ztC5iK~!#uJuNyU@iepjM&M62lhVJ0T0r49#QD z9W<{@xvwS{!I|(*EREyB+u)K6SurfZV<1h^eleTP=yh~4Qud)!Z^#XT_Wkl?i#8nz z;k@?Abh<6;;E=(>WrLh&armkdQ@ax)6|D7-YMfukR#fy3{!1US@_^)ssy$7DI!roq zz(Rmx8If^w7J%1^NtbmpdO_PUUKT)}ss3GvlpXd#@oBVXW$gS%h=rwg(rBW8V9Rj- zjQox&SuSL_md^Mev;|L6j)qPU;*t21OPch`fB9d*BU5@ojIr5d&U7ZZ?QTp0fLyN@{4_P&UfenDPEc^9pn z-cu8EH29W7TwS{IHm@E}n1+sKAU*LS1*47bluZ4OX^|JYB&qIg>>Tmx%=W<8MJxQ? zR-pZX`K8>2k){tex4CL*N7MD7?Ys`ZLv5ECYC>aUkGdOjE-S?^yfTm$q|vu$PW82S zP3cm;$C*-fIyd-hf=tf{*f8^>K839j^*vXB66M?2d;Q&X(7oShO6SO^rG`X`yT|5%+wUY8=`VV0)sEB4s4A4psFH61E?85C%tA6?oh<3OVkvx!)q&+L|$^L{qSQ8P0nWB zO4D!8aozWLXj{G_Yh}vytoP!08ci3}tc-chnl$J#>vK(w9-}eSLLrKM@s6yR0&)@P z8kA({n_og9CjU;>A29|P)J|XKqr~ddsl; z9R(LlIMxqOlKMb?<+cqk9q(ZKg4t*$QG=fdgYx7=7IXX4iez>G zM#z?Fu~%YLTU$|{__mii;EQ}%kVLVP$* z{oq7|Cqc7=2`y{?wtgtSFDP8;2VbqF-<1A2!8jIgp)*95o$xd-K%@J|BDKT%K@C|h zc`s9s=Jk1lU^`rf4800Fj9+=AOQ%^kB?ci9&`_k&yG?}>ODqog(D4qs8r+nb6^Rj zGRI9sRpX@OZQfid%tZonvqGqcG2&M}&GA>P+5cC6#uU}lD(Oh zG4E;$(O}WjM?cggJFE-QzdA(FGmJHjWFx^4ca*+x`oJWz>V@ZCd=2=Ne+a0iW)DJ5 z870)Z%{_2Dh{$cBF(sbTGqU21X96?`z(>~Cys?^~?ru_>DeUozYl5z^ga;1ByrA&X z*G%a{Y)f&AM<1_Fij05mNG-iAjk0}PqVjfZBjc1mWl4R;a1V~{jCAeckY#j342EH; znG#^FrxAFHvR7D)= zNkTsr-I~>%E}VqFgs4RYQh>SWr~3=SmHtr*lb{IIYxYFSH;yo6o{u7VeA+w=Z`%C@ z7Yn{_a{h9Xln4GSx^v?fN=nEIJ*}lfQ@zr{>L_i`m>1d@tK`BIgYvCc*JmRxJbz(H z56&s!s<>_U7g;}>I$C|~+wYL-{7W*KlGX5ilfamp2Xu}CNTpJ*ozZ{$R~Yf<8%@YM*5s?9 zjpCtxEc4#Vnbtc4Ez>la7SlxSq26ARL{{wlL#n^5Su-JrvgqQKM& z9^To-<{!&OoAf+eRHhg0`a3u*A8|4L%#mDf{5erWSTo2MNhS#y+jl0Ydh`# z8j^`EI?bWGQ_bU6wXb}fQM{3b$R}z6>3tKl-LI`2brj)1* zeHvXno!JgvN;1+F5@dtF%qdVi?Xt@4wChtr0bdziZf{lOZfnKNaM)3nnX{J5Yi#~x zdL^^vvg&!A95Yk#{ny+P{dhZSB7yzjF(Lh)QS8$p>*?)4lc($uolg}{D@U4C(zIa^ zWiWf{8LJmJeXdW*Zt3f2`#n)BX1smo>6&t5ADWQCmMz|FMaviImly+o0lADJBDY3` ztWC}Hya&BpywfB7FS8Z(4)b%hmlvH>yv8)^Z#b}YJRUK zT$-~?InA|-wjk=xz!^wH`ubB+*KeaaU$U`g0kNRv(oXSe7XPNri~jF!WmGbQHfQa* zO+z|`)_$m~;9^}f^zZZ2DTIfvf=1(}TGfe^Zf0Ksbx%yHLybdrjrugo1Q@z=kqZsa z;QKdhmIqJ`|5?Nbd;j)Ce&u!AD6=L0c3UotsoY6IBTH%9CYl{ZYCE1V`WS@P)rY-` zoTwY_1647ffP3Bp+mYO%SVbR`^YlXd8mxFBVk*Mc8 zFgV$%+v#;NHMGiDyiYXVkQkit>r0f@pr!|eC!n@Z>3%)A~X>Arz^-A5(I9kL-&;?=q(W@bINF15orQscy;39#*SjBy_o z{;aLniBl{btCjIBUiU%L1OYb#xA?ug4%9~1-FT(~zir-G(kA>{^Q>?JMxPK@k7^55 zaR~jtj28Lv1Vh03&d8cK;;ZAZE<&{wUS=?K;#gIYVuBu->P44a6mJBA zWp7k)8W4&DV{BNpSKtqumfRRA3P0=;dG{Qo}s$FG~~@x1uzy& z=gF11y?XAf zaXb+a1EDN@U2-xn!znn4#gsm#CDrCa{D4oLTx}p!F<_a@J7Hsx(kVJU%&y2<=a!Qy zEogZ@gU?TFRFf)ZaH_+zjYtztE}*B|SiG|cBf?|!;EmSYP(TO*no@W7A3&|qN!ZMh znP8n^T#-7}9x(=v2y*`CJzIvHXeN)w+Rj4}J(MCdAecO=!)XluixlEETbR&8PtO4w zL>ZvVSvnCgj=eK1!IPYa4MimMUGngW{(q=usBvZ$alE0;reH7c8lUEi7&GA27A#UD z%u&gh1!DgE7u@75m*uEWeU> z^d(QSjN?AADX$Ujk(Az6``~Hec7{%u(+VxA>PH!-v^1OO z6E;1`5&iz1xTQyZ;D1i$dRngb5elAi=vodosn*7XLd!OU$Gg%b{-0z%eTx=$B<7}S z#{UBF<9lj#!>QfWn+eD0spU8t{I0&o!oM0NQpv4WG2`;mh3f0UhW-Gp=u7!HG&qBT ztrfqic*Lo+YTiCE0{Uy9IJ6yZzb1$FKdWKnP=Y;lDh5ZEvh3k7kI!ps+@P9&)q9*@ z{GRHsvsSYJd?%^T#jHTPKm70x`)ONkx6MhR{Sb;o)*i9T8KvF*ex8WW@pNR6|}s1gT* zLPJtxIpcKdI53j0`S}&-vZ-N8>OMS~TjKn;>uO=Xi`#i0Y4UlJAP2l4Vy`j}B`StU zG=+v!nCjWdb)JM_0s=%(LSPZM%F9dMqhR@TAYRew#&Rbl@nT3}*lGL4TT!V=F+?*C z4Qc`Tf97ZeWnW{_1qMiqX$9ig?)EQ68`?MpVmjVBCA&qni|TnFZ`bt4dwgN1Btxai z1RaTTM7o50%Rn~wdnGO-Le{8hWikQ71Ly=a(!WE&XCZdp_*Tm(ROs-w)EGhP}*3(6*Y)QgK5Ok!vFtF=i>)$K+b(;Pa!SG*< zum2OQ|7%8f{5?0JU9>F_b2$2fcMz1FsyLb~{PaNahBUMb#LmZ|2O2mKV&HqhKwB-Bqa}z&*O1iMkm4?O=}c6JjN7t5C2o(p$6qJ zV=SnLO<=DBq*bU(H(GJUtn2u@`e(L|5^BrLWjA64ckht{I1c=xSAu2@+|Ju++(^_{C#GzJ9AkP4VefkC$hFm;p~l-oU`|@Zj;jkVW6U@DIvW zMd3tUNfVZ!a-LtIL}?ZZwv$W(ASEfM5{Y)9n!uWs{k?P}gzInY`pkqJ$}+m7(j-Dh ziv^#K;b2YEsmmP6H_RXP;x{e80Q^RrugNpW-QzGLg0Uu?T>UHoZ{w8${Yr^8Q_v#s zAmd+eh}J#`hbNhBWDSh$?s+PnGtZhwm&?M*g49!v#XMp(-+}@zvRK6b5TWc*u<24ssd{pQ$oi%y~;%lAh4Hr*Ny*F*!=VSL)h~EW+ zDPxYRb`s`^emdF3^71RVXVtE|rTHdL5&#YPV>grJ^~w|L^V;eNGHGoU2eh2|nJI{Qf z9I1O)$Vwr)ShL2LNc_6$%R;-oBJ=$7jx+GooX6PxddA zAI;UbNEbz0vq4{^YwVL3YHdP(<&5@B0(TsT&H3pud~qW>G*FVYmfL+Jj5!7*XOq^( zDBjvsncb>MQQIm_!YwI}^&P020Rv;nX}caSY})rdeKY=*(+8V%-Vf-hj!ZmdOp2!3 zjNv;?U95aDj7K}V@kG((fu#UTM+P_%)X)zl6A5TBwXsro8O9|yYL=YrN@k5zd2O*5 zK9~Pw)yEndMh&$7lx%rl$l7d0jF-|*OV&20FsvU}Rc878q&ZoJ{X-tO`hYmin{3Nh zkMRVO>cd4#Q*PM$8O86Wn#x8cRF5ZhJYFHz_i;B;uT&qIJMgXA$=__@iEzrO%~w=& zb+tHo8vWlZ#8DFhEGjnXmxJB{C^~C%R`^|BSr$x>-*hsYRdKgqbD+1JM-d2ZFC3Xm z->B|8Q#2&9Dw1;(@6CzPhATiabso8)A2-<233_RpS4fZM5>I$Y)t(ENT)HuITI|0@ zPB75Kqq9gqC{pY{`&>1FY|#4EDsSUMvGWXVWq67C^Xi{Ggh^P6Y`)Fulkw=Ft|Ifs z7`R@5&U-q+kP^*ON=Job@MX1rz}+{OI-aykw4rsQNH)rN?9Obn)+}8_=M9x{dX)aV zW@w&48@zm`3#W7_xTCCcIC?Q5W8m8o#gKj39uR0~s<#zdGM?OP%|V{&o_b|g;56%U z6xqcZ(z?jo2%2G5(-i7pARr~_h9TS3pbB;teq_A5?xADZj>n{`-Us~8>u9B5r-X^+D{KkVUE6)5|g8agplqZEvC|oR1 zt%_9MQAg^HULn6>>&9kwSQ5YJ?d?w?(>eUF2Bc5ZAfVq4 z`3);m#+|dIdzjMoDL>!JHycNq77fFRGTo*Eaie;4&O_i*n8T_Dik6})dKMoCU)}u$ zLRphueh<0VC}-HvI}2QYTt21U(B}T2N7H{Z!n@+0Vl@0Q7zyIoMW>&)-Dx%kPFDy5 zbkYaj+VD~+Wr7~TFO*xj4>K+mE!|CSxWAykz$6I_<*Tx1O-Abt- z+*AFCsypLkx4Fe4JqJ z7;17O^{{Fedz_YuiS>D(rPB%3Zm;LF7U|fhw$)krQi@*-Z`vhUw8*aUFlCe%m0ab3 zm3N*sd9Ko(-t>Y{J=ci2x{P^Kt%@N$ff=`k_2slILFdQr1N20YCg_}p&1qf9Q?md` zD)S8d%Pn0?m3PS1s&-jR-_CsT1U3Y3(&t=l{OVnv%>&AAxKSzRvtnXyeiZy~=xmDQ zh-r~VL2Pw8XiGVc-nPU+Qy5Fv_3_PmE>j@}^w?}fonj^62@Rq8)xDbJHL@889uhv` zu1U%krI&!gHD_69v0?-RgR)yeSICNqF3Yksb&CU{WVD(Enhp9OZIG95k%H+VU*U7< z$xOsVQlQsXwxgVZX5dXH;6G_mdgMBG>vQ1|p|rD&IsC>nk<4P(B6K@8(*s;A<)}d) zF4>2})CP@W6UU#%xsyxc=0IsM81>~7p~fegg-Ux zC+hyX;&-;XtbCu5lG$|0iQk`ij3;=D?Q}FQ%>H@tZ;+fimhbr?zYStf>;9w1EX`bZ`0VneaGqi`}7s=3|(? zcfg02W0*)}8U5Ynm{JER2Nx=5ishk)cSIq?wn4aD;3NifE8eODM`9>hm}I?=f1=hJ z;@B)ob@qTdE2d`tC<`v)i$r)O5?u@JY9;r}vYd?pW(vJPdT$5Tmkm35q!a{LCJAz} zWbZlT$}p(z@3OqhuUe)GS;^LsU!Izik=3J&yPZ&mU7q|TzZZ$)1BKPns}Ry_<;2~1 z1cP7u&*g)IC+a_7MLJ`?<7?5!Zkv(*4R>#+tEUR6y{~^^KObyK!$@%;#}-K2!=U6x z$X|*c?Y5p9n{X_4Y3Nu`OoJ`&(_5maA;-62&NC6uxsBq)`yJOJo6fdll>L29Z7}1l zN+{rck-T8!HgeZq8Fe25^nd5<&&p$VCRekG*{b=x@aOvrD^J5qHftfdCO5d&l;gDB zL`%s01~WLj2fpuZ>X9TGO?i|H23ZFJI+n4fUno1C(IH7_zmgMc*ef_jwymyaiQ8!# zOBA3rBsIsu1ePbEL=RZ=D(G;!rPD{qv_$FBkmb}>39#$HZTTuIA*nd~1Lu)IqR$f3 z6rIiR|C}pHo{}8P&?;FsBe(@k7CF~K^4jalvNdNpEEoQI;N zUZI|?&1+asvGkY2SIH6|UwLg`fbl$}69(_fsS_1RBY^PsP0+Ju$1BK(XEqJys|}Ag zveWd>Elp<%Gw~c-p_dJULYB=IZGKK>259BTB=fl2$bAkdR)Tj@R{W-L$`k)L4$b{j z8mb=^2aH#~%&Lag)%&^j4ewdwZMmI{;NY-DI`0BuI(DJrWI%`ZwCbb)#CCA^rDv^Y zFs?2-_U(=mVbOXOW2MhX(+gWN?yDhguJ0-hdb9%=no-0+4L*^zznmsVLD8&Pc--{? zF?@d!;XEzGZ8HoT0_twfH3h@?QjS1c9!Z7S61V#v1*60xoiM&iz>7*`2)S2YGO)i? znDohd1--O&wlTVBD(k&2v`P32UmLMyGA=?^g@)3i59}2ukI_E>zwK=d%6jp-lq~J! zbN1QXXY^GLo6P;w<^QrxV@9Ro^GRJd$5iHI!u$e-^VJ@aCbG0yaztJ*AD3s$-<6P7 zmQ~bt;Hhe2hE#5`|4ZNTmGwbZ?1JoB4Xahs?xGwLeFx+!TFKjdiJCWrKxm$andr4< zbA_u8$i5RSil#hY@1AZ~9WcNS`lDosVc>}uTeym%wh&jUth3UKx@%^==ODFuyl83U zz4l5DlEh0`iTHN8p00U=*2N%?*%=}jtdUnkD)N)h{(|!uw;i1#4`RZ#5UMHf&(JoIyHzm`XE}{k@sY_dc-}Q2PIb{Ct!aKAvaioq*^q3<=gw= zUrywcXOQe9Pki&eSv*5aN<4cE62Zb#5iKvcr^`&7%A7r(7D7Dj_#>8*Lu(4@;^-?o zJHnMg%|AF)eox6>2;jC%`tUsL&SyMs#!em$8j@+HjsUA&IWCQF)`CU?!KYy;W!8Ko1t)Vw(&P=wHJ69^J8Mt zjbu@Y!2GwZ2{%~R58b}U?28}ck0hd|nk>t<)GXPLSV>G#IY!teJ5DNxgypHZxO-FH zXs1DJH?OQ;UoeC?E#E&@v9@@v@~Il6?^qvId?SNml<9*nk10k|JIL=0%|lsPF+7>C z&ogS8dGiE7UF-clTc4(}4z>P!R#e8Bod{W)rb{jwuW-FM?rFutkm7j=H`4q7;i^?Jvy1CvE~N6W8s($4l`naP4(#J# zb9Z{Wtz0NDdg%6+*E9PfCfJZZL7RTS__TT@j%)_C>zWhNoT3qNfkAou08f`cIfS#- z<9#QNU|#M@oAWgJTpY(obdB{K7Ao^LVjVmQeaGmPZ4E=jNH*L;igzJD-s)?`G?>92 zMx~?llJ5YD$0;Toz5a}>L+w1B36R&e%@^+t>==dg^B^eS;o#mC zo%(Ko=z4nU!=~9?(FIS<68L@EYmFp%OEzqgbe652E_o_8v4{IYe&_Qyv!2OSPxW1& zA~_#@;l(||H_(!kvWPj)$H~e(sZ%>~{rt52rx`M;YjXefp|;1iE=G%&H=}rAW5V(- z2A!UUG}bmawvZQmOB};E%N<4Ex`?u#trLivEOdt+4ldi$_@NEtr!-#lXxb4#*uF{E z&-JBr+0WA4FlGQ#XHMG=DZn{gycgYy;rIxFJ?xe-FRQ4FBz^jhD5-~TLl7^QXR4h* zZmv*|I$~c!5c~2lT+wWdS5P=bhNF#lpWIPT1`co}rxRp0ADFV?CoM2j0uu_S`|zqx z@U6aCZ4gIFwc(U&dj7>6MusQ=n^ekYIe`T+Q;a-a3xYgRz3LYqSB}%jGf6M;+pgGv zc+S+IY(PTUAfZCJj(q_$sf)XPEHpUnS60TamQ@V+ajoi0u?r$GfzpMLWJ4bbDm?EW z5nO?m;n02iTz1|Karsf0?798FGJswL=A4SnLxq!!J#@Py`Gu%EV}3+VP)>YA^>|{B z85a0WhKM+?M0m{r|NUQs?ElJ>Fr*+WfXXr`y$Pt~bqr9Yq4++;6R=hYuPLDfzpK5wkFfkFIsJvcmiS36she7+3 zW*_5PQjPNogSxu_R5KDUvIf5ROtnVX?;@DDEimy55xLT#1BYXkvKXfGUybKbtszr` z>f^jG)V~6va>YGaU9KSc$9YL8DQU2x;g^3JvB1!d;*E(0di>(N_v!IeH2a0h8flIy z;!_2>H2;e8K#s6nu)aedp8-bs01VFSz#0B=Snae?5^!14&I+h;;+LusQo+ZJ#e9Jz z9(o89aL}2r$^1w#R8b1tlG0F5=rc>ymKT&`TLW|`N~z^wil=2xuHP!|D0YX@t=a4% zG^<|KWqc59diP>(-!6YjI6B~i3R!D;DLJ4_e$=qTz7-MoPFcUKLL4>@@>`z_r^Tfc z30(Z{)!Z`>$z|rlepn39DiEt!Aql_a^g)@aA#_@Ztl;jkkQJ>nWZ9`{ah%xK4h~^m z2|-D19qxk?)8QM~tH`*&?!uUfmX0S!i@9VVx{u7o9cPt`JV7Wr2TjY-vqM8}omwPTjq01nABvt4$+W6m@A2}i zh-mWc)1u59d-yK4c;Ky+!h& zDT&oqpfkucc$T$Q46Wm@e?(*a)8R&0T$OcjFzX-R_MM)aJam;_<=B_bbGy;=3&qvk z!%?Orc}?T_^rerAN;$CS?9)?RY^6u)3~Mw>gTOK+vuOM;)q@XT3jnsz{N1zQC-J%|49;dDhp$+Fxn4FmiMRx8XK&B8cgwUAg-| z1XPNJ6C0lNZ@9{)b5IyYmy9=@jp6s7Pj*N9mqAqK#?bKO9GF4y2*@n4!ZL@+NzXcc zt5pe&yD0Kw_abAIX%hx3QJJR#xp+#6hfNHS+Fytxn;3)WDAR|m;>7VP#CL{K)z%eL zjz+Ip3Ny^G5?O1oy41GhB1J+tQY{RM;6*p8nZ>a)3c1B8~O^4fw=ay^!}51SRDdR{HqCuNE ztQ>)w8=9bcZWRC<Y;4D<=7X(3tBTKJUg%&YboW!x$+Iu)|^=SX{eBAU5` z2a3MAo$#Wa%k*p&!)+O@UOoGJ!Mv6c)O+iazry6Oz0l<7yJ9*3`^ElpPODyS)h-<% zSR<|J8C69$$uA4g<_(KtOZ%H%kr*}rRW||FFsXpYlUs;k1IpZ|j#ZkJgkaf>~ zK{KvgZO1$JEn&^5cEK*SSHapV@(1F#=FOIno6jZI7&NsQW7z`_KKrrr;0i| zu=~Wv^bKv57n@LP@NIh4Fn$hkkea22bzKFDuF0cg%RPsKbtxx@T*}>uB*ny)xA}Ct zU3Py_zPHNTwQ0xQZIJJ1!D)O+ho7(SOdrO@wO55}lGk)G&J{TBe`=Irup9heH-czn zeql=8{Ad{U)~v@Z7mqoX3x+n;l$xGnqtOLfe;{sfQ?af-SK2nJPuOV95sf`p$(o2^ z`zmM@$6xt+>9tDSL-l(M@QKodu2&i7-v(4*THzLd#xq{Z9zX zEY`64r#dv@6^_(oR@NVU&aV;$KY#GYNoU>&6Hs76&T_9KFy^ zr+B&-!u9~GUe>5SG~^}DS1^Rl7I3DW{+z;|q``x*agi;9Xt!lJ=^e7wylw@7M$^!> zDX-Vtl#1l#fqf~@3V)&OJ&|s|2++QVaVCZUS*2u*4;Op~4gIcB;EtwqI2}aQwYW~?TAL_;s*L(BNNqLeT)@H3CGRCU; zoR>V8UbDbwc&3SvjhoNSL85>f1L*^o%LEI*RE{gEDutVRtY5R0#{BEFE=R-BTr& z6lJEgbi0K9djesZf=X?@)RqFNvlFc8aHgVcRum30(R-|IAKC=-v%-puBCNs$Ss$KE ziiVo$OD}oIki0w}7=E$9GS*T2hhvpl^q$nn^ZAX|2f@`_Ca@Qyeq-Dr%d zXn$;<6mN;|4)V}4H9M_~N@!?n$4T=-&$%YCf>_e~ybXsS-QmK?%hgp^eQU4zMR*Jd2FipU<3ZWFeiykis==AmVAvZ=~`05<* zJxkm1Y4h;E)8g@QbFGSGU@j_Nj5M+<&!L-(jMVo8$kc29O)!IIMYlhjO=F9_l6_Rr zSdMzOAbjdS-#=Q_j@DBapu>>o9F~y5M`x;JEzjcVS3YaATt5l$5aqp_fdc;)UA*fN zoPE=LEku*j|J0HcuJ=Dl?u__Ab;-?urj~+?>cD4pEpyvLei!NvzGxmQ;?{z5hlw~- z{VKKia3X2n!|`QB8L}sZkDvJ;zdt+K67kb5&nI5;aeQLuUw9VtS<=2E6^6gx!b5+~ zwK=bI{x>N_t%p({84niC^-)%NVwLKx3q$Ji^(UJd2;em$bve&LygM(_n9PHRGdMizeNLhPC3c`3$S3IS6FmZ>;9 zQ;n9>c0fnTG)v_mxG6Uzr0iBU1zIWxlUro0uu{R&)C{%XhjyRW^LzgA)oYp}M7Zzo z=W|`x`&uwA;0gM{oSrkR4YXEU(VYwcZB4J(ZrzfEY=d@?87>02LW3FoJ=~o_=vBHJ z-5T3wjGEC$xQ@jV&cjt4ENrMeDRx*}2#x??zza~J2h*m70PyUr)~NBc^;8TE!KXkA zZ3ERaT8i=5kLAZxJG|+@8=`JzUa$P@?cg!`pXl6Zxcq=4{cuT)uhQ~t+Ei!TwZSWs zNbUDlC5 zMi_M;uDk^902F!`3N_%RsK%k=!t*y7u%+@OK>)4u#_RFmjsM7c^s_yO8F;t9Ifq4V zJa}&YSTO4+vT;S`+Tg4jzF3jF#c!#H3bokXK9==LP6ZprYT7hg#f%G=HaTn`|FVN^ zFo5pC`O}pQ4c3&CNpv;&8ne~@jhM8w>7%$hbV9y~LCwptVnRL$^eeZ(`jC#?JOryUz%>JQ z?`RoKjM)?i2;HB+08({hB!H3)C)wAVw_qh)5?1a960?;#l$7YTiIHJ%9r4n;?`F{- zD_I9)gOd(V;6K2bU9fabH$8gcyaM6Hyw6H#vX6&8v-eJ!*2U~P z22=!KjgveP)>N`UB&%oOfk8cHQ>$s5?-12Hx?TUYI`WP5W$d8UHrQ|H#uGpAXDp!@ z;o*c^6k{C}z^wpOb%J-?7n0&>Fc1ih58OSN zz13Zx;|l>1^nUXxjIua!LHogfUatoLB;78yJAD zSXqLAJxz3!Dpt~2;%&Q6jQu<~2nXO9MV!mzF~LZXiP@+)e+COnYNc^e<2WJLV|UlM zFj@!INU}Dkgin|{b7lp!u9zmH!`x1cn!i6k)hGGwV8>LX zE{*m|hW`<6%#{8-Hq#*hX6NuHkhbnE0E%{a}~bwZSu_*6?| zm@nsU*;_=@OIgEk;8kT-C{aZzqihZA0g$kH4aKng&dUJ=N=7%>y{$mR0U;JrtyQ2S zE;t=kn5O@PF^P;V``$+Q97g3P$=_aOeOw_|s|!Hs%Kh(&oW1=daed}wjVeg3L$6NA z6Tf8^(SpEzZA&qld#X8ZtRdK-9HuD>~r{RV>Ez8Wlra`(m z`6b{A%@R+yZVA@y?EoV5O4oD8Lr;PsvV$0iC4{m}E1GwSb20igo!ICcP{TB@e{k0Y26I$-Hv-@+L`VXSepk5u`` z-aHWg2@|OA7Afv1U&3#{_3F>swtf6Wwkp{0#cj8uV_tx?;X8wb!p-0;2+DY(dys;T zBq^JQV4z*B1&a}ETmj(qtliQTY^DAtDmiWC5@F%XZk*wvwN3k#++IT$%M_}`Rqyk` zy?#7;_0X8(C*@iJS0_8-Us0!9Z_oIGP#jnfLtE^NiXysyu19R+u)%g&y#2N6E|QDX z-c&#Sz6PoyK3*ewvcQr@3w;=6^WFByX2&D|2h$vmGUn&nn0IZ8%C$aQ8Fr`u7Was33*icPvi!7t0ysUg%^zstSle z;FUW4(y>Ag!+p?arz` zZiUO^J#)Z`P2Y@_&MHf1oVSa@zB-}q0i^goWd#l$0jSfR2@*jhf4bBQ&LA*^+B2Bj ziyZ(^YPgPb1;E8rTW#nTcFE zY#p-5nKCOx{vV5$_;CkPOsckLakGM$B>>}4;rOt(T{fj_CO~GPh7e_mtU<78YKU0q z-k-K8kZ6@jJoopkEduGH`cR*Y)Pb$;f1k3zs^sB^`ujP!0ZsTsXo1@Yj#09$urVrD zhdV{714Gk+GCu(Cs6SNS_c_#>k;)UJLw@7yXB1WxfX6sA-!V_X*PL%BNVJZv8|_lC z-qr@hAg>QDEMkeEN$}kO=O$Wfk3JBPv1;2VXcjaN;TJ;ASZX0jjqrpG)sD`(xsFEy z1=^tujHkkx8o0=NbWR5uT$iYzNXq|GT|fkInB(EEF~Fe6p8YB&G@ohReM?9Y%hKbl~`-ju9*2W}Oy>m3L7M9HYQRw1r4d&gX!i z?vC_7d}iqCSq9~g|0c*pSN~hWh^~M!>VGUo@T-$17KQSc_0HQa=zja5P+HLiz3Wwg z^o4_T(i5f7_1`P(L$dx$R0RU-aW5^gk9r&lfwP7(O_@Wz!h+7}9hyjyqLMO^#^XD~ z!MPwYOT3Q-HX!YI(&-#3D6`JLn!OWjw?L71${7tVxe6{8Fq<#mnFz|k55MyXb7ig3 z-LMG#@qs43&hVq8|4c>s+^f>DXqcNY$C1d(`b_8-sdJ8|4(w`ko z*>hDs%S14XxXUgocQSBr-ku9xeW7se0ZjRZe$gH@)k!JS^7^V0gl#jppb&qiXltSc zX$4^mZ~_GI0f?69Rrj*xLX;R$42@(N6j_!HX8jI_eJ_Nw@e4{22?mQ6f zi@{^T)KD;teEA*<$DF<;T7*T9hZ&+svkz9;-3~v87Srckbn_K@DXqMrC~MvUOMT8L zt%8MdE&`0XGM^RBOM@AsF!H$}D2E)SpH>c|8R? zfJqD@X<|2XaICYfOH3Z%)Fh-4TgIx9kK6jO-uN$^X z=h@ua?~4D6$(x>m9g>Q;^|ZpgyQL^J+RWn=)5Lf3kG$nJ-tYDfFF@isjRy|z18qY5 zGqY4`uK$Gj!m0^dmNI}fid&R9Dbrs3_ZVY|D~jz;f&=B@k>A-zu;@6B4-FO~Tyz7_ zZ`%DsU|IZIY?EGDu~9qS@6oOQ35Ce3Y;#B-qDUb>2h{6SjAt_X0XTTS>O~nNS^8o> zVD||@WeL|opQ-!Dt$#2b*oa>;5f9kA#^mvKuMnXOZ0UrWG+qgdJe1I%s)1WZlG9Hr zAI6*U4jIp$r;kTfZ^{Noou;J*5U#I_+5RAy#Ws?}aS$hPDE!5pJ4ULlu0O#AD}CNRw|q>i$Yos3?re%fYi zi%H}iI&2@%oz?(Vyt1qom@ z*_&XDvfjbM2QlSfz2qg6o7`kgkWUxu@om0X~)X?Vw;Pk^mOy)wl-pWhSO^<%tJT6ka9p0H<-s*B+*sRL1 zOPyYgKSoM!CSkm2E9KJoxf29rxri8-`~3bIxYxuk|zaci$P!*2FM{IMzE zIWmPU_BEglR45`2bqoZiu%!>o0nD_GHNO;qHqei=olCcn{M2G49BF1OjsKA*xBFlR zORv`1P=c}B-Ot0WOqPTD$kpOV!aD0}MBl67G?dqwF)rvB!r_=USi-D64Vrt27y%z9 zTq=*7ny9aja!yk=?n7}6e4<72V>l&E@BRURKd*+aFs!Qk*fq?uj8?+O2jBQsVgc2> zNCPJ^SfK9T)s3o@I}?)wx4$H5V)tz(g7tB61|5xsHgH$&a`^ts=isF8i`k}icKxp^ zD^}!*2A7TToo%Wmm0A}H1-ez?V2egsV)XixXTK~l^z^#XK+u`$w*(!99P%nQq3+^oPmQ+ zG-xX`&qEEo-}H|=1NBtQv-aw)?^OY-{v0aUJq-}JIZ`hj=a-_{Mp36eBkd0f2ue%L~R7);(0m7~8r6Z3lX%N3*r ztL?~dt;4YjC2em4>5J4-d7zm~yWp_0I#GIfR6@RA$pWYxS0>gUb-2T3!6cat%`xqW z%sU8r3Ek4MQ`_|Gb^&>TKV`h_$a(1A&1D|u<_!3x|J{bC5C#MOyKvx}y?C|B4LX1% zp?y&oi!7!vw|0}Zk6P&^=S>+KU0;%?N<;^IJ53D$Q@@ZeF*olMtY?_$+d99aMr8)kDFNgIld18>z`D@6Ti6ic=&TqYyV$%&bn9Q*TA0C9|Vr{l4=df z_2>En%^UwBu|6KBT_g0o9n}&KdV9ld_7!Uxg>4$=3Kh5Q`rEY;G8@GXZ}A5>6!d?o z)Ak_$bHaR{Lb&GGUG9xtR`Zyc5`!>ODB*Ve@N_i#8TU4Tvn7W&2Bx@3@znv z#%YD*M$+oD?%B_8IwrXy7~Q^$J5K|lku3@rssUW}*6>6{8>8<^l{1X`yrsZ7z;W53 zY8?Y^?ec)V-cw*1Y!jTnEt8p{yJN??DT5wraR6CBkhKo`U;v;g&5JFc?ZL|VBXb+& zoc*=tK>75F?zfhwmognry7Kwa2|h(jBv9j5k|l&@pUw~8Z4qTzZ5;kUZ%Ix7`p zw5Nwmntg{FWeD@H^-XWJkwO)97n%1#G#9^%uEEhu3!h*iYXDb=73fj?=Z=6VZw8xs z(PGE<2s|M3yqF1d%wl z3IGS&zHz~mo}D(VDPB2LlmQw00=Pc|4ZY5KivUj2+*vo=j{>KE-Yz(|e48^$MM2RK z;euHN^KFuW335F}$(Tsn-mkUTt#C6cpFv+UDFr4xxY`M{L@)+W4rgmfznvXD!x|akvwKsuUF>VB z5l>OX)g>DV*FIe3mFW>X}}z!VvfAa?%&XV!OY5tdly{WQUG?R3J1cS7X!l0 z1}Rk5UjXt6=sN$!GR5m!P^v3jdj4;eA@KhwJpX|M#fN>V*~b!WfT2lL2}9FzswX(j zz-2E2PnZv8XM{Iog&h;u=gy>3sG#&g0Z)MAioPb&uy>A_h7k<0;#YAjVEjLiNg!K% z=Fxv1x8ncLxP&2OBL0wK^lzMx3c#NPh$g}rLsbeGznWo+gD5WFIa%vNpfmafsM?!zfJjr(m;-%WM-mzUBG zRwiL@WnyYuJ^KXgHn4y>FCIxG)NCfET>t^(YT{S|z5L6SUY_|iptCsFd+e4;{FC-w zbvjsh>o9)|MwR}_w`OfNOWXYLRNcCo5hfy|Nul%IL1Z3g@*5br>M zfC+6|;;=8JaiZ7=u+YAzPY4`y@x=rPBAhYgE{_@~6w4ehmzBDUa1j_*0T?*I-r%EQ zvzPhx+ydCU2~cbR0E&`ZZo$+gL?N$zJ}PXfD9eHO2CE|U(kTk8AU;D{&@;jm!>YPz ztG1cK=HH@J+8yX8t#}Wbb^(Q6Str10gCpwZv{xAeR^0DJJ1f_;IoIg~@jiR5I(dBk znyyo0*ya*$8jqTUE1zAVrO=gB>;z!gQp)FOZ8o8tIUHz2Tut0r>d6|N)0LQKEsjde z(Yb@-utjIsPn4p{p0e+-2A@?wS_}B#;Rg!hcYBk4{dUWSA$UQ39FUXV%&!0KuDMgU700k*%>L! zyE-$_82?azl#YaugPu)tg;X?kg6BA)VE)2@8!Po1TAUGZu%VsdQ*+q@gmV4fOW0Ir zs9C?2$FB4zH^#r{{{d8Vt*2?ta6Q$LA77jnbaB-3^!i+>6eX7I&2Tz zkbWbn^#auq6M2jlNC)3nxSb6fOK|>k-<*g0L(Jo1fv*-a$+Y-tMGX}D5pMGbQ%p;& zxbpdP@O=|Py;MoJM5EXyI&`Xl!8i6C!|LGHWDrm7@U=k7Qvcs&G#fWcQwuWKuKS;7lYn^-gN+1+ZGB-7G53+T}C zrVt#gQ(I-Z-uE6)dXM10sqEkM&9}!=FI-O&HHb>i4NW2qx6lAf#{=>0V$P5dQ_Gsf zZpL?1{v_*16RH!NBXv>OJAef`n}X{^^mh|dUc`D4*>3l8#$v}1i*Lpj6qa4C*MXE zzy|dx|GObX#TF?k%alc+JXhTzM?C{=g^b^auX+$xiTd5gV4iR2aczNTEN?2 zq#Tzu9iU;%Su8`~0fgPYLkj&_@d)nBc`KmaR*U~-Aw`Pz&qtwYNzl25-fvaDBB3P> zkV0?6w8~x_uMmPm04HY%Ys&mxfWH(0ri&1|SG&@F?@|uzh;U+KU>8<+Suf(;l{yK; z%?(SiqndN&%>iZ5Armit0w@ja4q8jipU z^U^TU_Sd}QpeZzLfSDCjvbxFqK!jVd0q4Qq1rESr{mIe_oEqk>fJhaKW8^nk_oyR3!rUN=_=!fYDs!L0I8a>W=0?E@<%Zd z%|Uc`j&k>K`J6+{LfQLMSl`9PGAs4|u8Dz|X4#VhP#2uX^Db@IH@aDvz=x6?VGgko zcF(%JN<`j}g6l?_5BLqGIzJrZUg<++XXu)J(T||Dh?Y2wr9j`0(}sa@wss3-BNVxR zhM}X+ktYDrKzAVG)obs`7!Wib9mtZ1NmY5W;d`mcG6t}}E;r_JyCIi>*?%Y9_ZkFr zZ<&Ky39fJYUU$^ly5Vh-2`>pf% zrlD1al_=wWv|eAnms@m#oO$OFk=DtqT8C~8IOf`yLN3Op&iGp~`{_u6$V=0}$v>}m zB(bm6Ty@$sneX7c2H@?QoeZF5oQE^#wj3z(z*PYoG;VfsZ^QK7L&oY%`h=(uJ|tT~ z0YK;n7{K>Lx-fq)>}$N4~{>2Osl=bS1=V zgBWDxPG7JtVim_aw_1(2PsVA(z`Yn=PAZS}{gtfx zwwb)*F=W2^e!^Nm?l`VMnZblvdM(T^TDN4AEPVP!YPyZKnRGski=*JtSgn<1YWjfSO*_$e-{*w!+yDW zTE9(DGw_m*j=+cpYro@Jh`1uEZp@EIwbf)JjOMW?4&`=1?FvE-e!y$0E0J|f6?7fC zn&vgHFA5H*yjN?Q$iSDiC_TV4c*W}|1qKLVO*C{jh?c^F%(P)Olw2PY%5dNN}14i!>pMxE*hHDqA&asZ@&!?aeAwJQxIgb)` znoDjf3plnotG=_MpU2$#U$v8aWq13Tmw|+RTS=SLA6ib#(Cp(}_n<2Uf3LeKaUe^! zbg~RUd<4v^&mQf4Z?9%$rY=280)1~zu2$VgiVtQBpAb0i0IH6{(F?3TK_)Okh*V(c zSRkk4IZaXw%3ZbFjxED8w!gso^}@o707w@=Xkw>bsF5pjSE-sKR0V@Sa>Ed*6pHt+j7<+C}E}`}GPa6C|M@Fni(^4h^P2YKHeDRK$O&YwVHyVc93Jfs@kkOEu4r#gY)kWz$h_rO9pAu{u7gqEeP44y zt=7LTi4iSC4!1`N$&60u=y;Wd?H$EVx7U#`H64LF;j8!diK9pGyC`VbiX6|k=$p$( zv!b3*&oPG%c5XXZT}4I**z+aA77fzT;KRAMX@7lpvLBB*E_3Mjv;88r0H_0msLW30 z@6w4bRhMK#aOdgYpB4X=?FgKey?FQu6DcQ;d0)XwiXILrlai+U@d05=Dj0MTY1PHv zT}{|RW})8@j(zU0oke?;IfVDAm%T$+BsAU)-h@YtCz-K;CoUwSQ$oc@$~6&Ut$=qC zyFr}zuqnyva@m^>$HKs#O-lUKh_^RqA#itUPi~?j4@(-R-(w$YmWB`hqD69zaHqlFuG<>hD{cBgLT|_Q<^U}_$?4VA#M0#}fAlpFK>CV<+;~9A<+D|7GyNr& zD!O204xu3Re^c5}U+`H2`yVaL2&A_7i2oh$meKaA5S9&hwgW!eGVFmF}Xds1`KhWyn2(Ycv5G&yaUYncmD5k!DS!BOJdA~ zn%G2{w$s)Q2OKC~@$ZP6nJ>Kv$D|G@BP-CIvs4X1%Nb8`maf^WfOc3#sqEtOYEj%w zGCQB!$%>HW&dtVRKq%K)LEF=q)IBY8qYZEs<8l{+^gt+9TnEfzRaxQn z7U=~$-#LI;cumO_01!^=s9Wcq_uzFp>0MMKy?a z4DG)2V@!T;SC$}Ws5R`5ds=FT4G+s$FAqfcy%oV2b_qhq(5u9s0jwgMC)_Afx}}=% zG~y6P2!!~{`-4y^+G#in1aVnKJIXA) z{Rsm$;gE}8ZcQ-#ck$TtfF&DccZLe-G(mEXtsg1hica$7n?f}ZGv-P5w;nmE`98k} z@?&9t)ak1OmN^{)*I0Sol$BRIPUD>)!r3mjHe4BEl+PD`T?BZ~;CYWc?<`dNU6tAn$L zwsVbL43iP5lh#QQ4K~!}bu!h+qXT~M`Sl8~xd2y-Evhp@<&$@wdb_F_x3n*IjE^BJ z;RowC&UZ+uOT?(mfD@{G`>%TfcvQ(3#a2DAj?gD)R{+gV;?^Ng3LwaL2tXCbiyq5z z*PKreQ;Qk|i5c$_|70&fWcBfkmX12d?qxr0UM_RFmt=?sW*aq?*T=`(w9l!S!Oeg4 z@s$o-M9$LBH{e;vIv-1A#@Fw+5MQ0o=pj7NX^%>P8t(&?3;hH)`R@{wie1-Buf=yI zrdXJu`FQs0e1a+H2!js*E#MXHjAapj0$I6L#BK!-&urpzS`a;WdGaB0(FgCp-GLDG zjVP}JA2^4+vqWI#e}|uysU-289@VLTR{c{1dPpRht>hgY1%<<87&T zhcYa=soZHhPCW0(grOejZNT7iG92V9-agMZJu<)bdd}#i;pw+3y5G1h_P5AvgqN(D z#uh0QkT>}`7G9ZEEUcZ!qwhRg>opiz;z_}s?*rM$q>){b+c!&;X)eGS0e5AjD)Uzr zDU$K0hhzVUiUC@LEvb9RGw7 z=K&HMn==4DAtd7FpaKkjg%)n@N)=#npaBEQ>p_SwOb7r3g!plBJU(#AG27Fo26<2>I;Z|s-7yV9a+2n@GeKuOUWn92P+0XMmUEg77Qb2UUmcwQIhMYLWcH@l*!P;2 za|0*M&`zj7!#(sw4+eHj0<-%-_7J2y7Ai?Xz1kP>!u%>61rJhnI09E5A)M^Mg|P7H z{Usu__2`>M0AU;}xwQ(bm6()7TW56dma+awF8i*89o8svzg{f&7x@sG zm$nlGZY>&x#NUrQ65KY6GZeq0>giqc=hITsyFdd!G{17!L}705cph`>`c~zuJkgI0 z@Zme%+ea+*w3&EAo>t_3|2zjxm;xMwUEt|{IBo<>l;oE|J!NShpc7~3VS|Fy@6V3} zcr!>SZ}a)ECF1R#6c#nl!4(L>qMY7!^Hp2PL3ZTTI1L%c-#CdM|Hx`qW*bQG*nioa zs0dQ4bxtw+4M{0D;rYhd_E3{3@O|Kxt_EtJ<=U++RPY@~uxZIF!K7|AK@!wm!)k@KijU>3PDfGsZ(IvP-kE4uT zB(q6EB+6*Ct_sfG0$HwWdqzY<&iGsLPA{;Npz@5j`bKALvX*TS5r)I%3m;FyniMS7 z+fA2NpI)O)DQe~NsNx-i&tSDB1spXB_^}n3^>Ah00VcOC5N%21!!THt*a_!8p!kVG zvh39RNl~jN^kDV=vg)_1`cgvB=?eC4>XUM3Zkj7}R7K2-06wW&+E3M$oyv%FZYHkC ztoH_;oqan|eDuvz;O)1~N`~e=>}GSeFtoS)3n=S?_VutYO#0)ReRuA%_Ee;ph&{{O zDw?JSt1Y0w{_DSF|M($)O*nMffqy%8Mu_JdN)pqiKl^qgk@MmObMlL_(=XO1;P&JI zg$_;P^ailExq~&})j#E5D#d-fKVgp84Ev0pH>JZ-SO2RZL_E zZSW?gd`QQ+#by68)Mpx&3{8E}5c-EV(Utu%=cffthr!FyR@HITR@NGkRAhg%ziDH; zZOG?Pp~pyxixJI%-Qn?)gCgJ3?`xO(TWfcAu=uR~ZZt2Ayf1S2x7~TNIxA(`Rg{@M zDLXE@`4=>7298Oy^@qv=s zC7R($*y(Mp=;*Srj0Fd|*CKqcysH@Z0@CjTOyMQB)%OP=>WH;H~i&`M1qp z{XC@kuD+55JMG%)v<`C&Ki?dHi|)`gsPaT@lbgO<<{IT|F6BEvxp=Fpc##RmZ5qLc zzF5iPHvPsh57il_8%4g{zdluti-#*Zi@IY*)K3OmT2N3-qxOOG4tDOt#wU^s8d>Ao zC|zPa0)!^G>7ELf86-c3=}Vrlz^nT7!im_rr(<{U z88}P92Nzgybw~jsqthzmrBwc8tJKM3KH|oU#g~6!Lt}7N0dsXuLA+-Cky}8%lVYs8 zMI~nljvnuYN!40z8oSMTla-K^nfJzp?`$qsTx*T@Gl80YDVg0-FW%v(V^(mBz>#4M zX?dQz!0hw2V0Y_2&R8mDdPQIx7hG2782!uL=zBD>OUB#{Tcb*juMvC4BYY=2u5^dk z9khisH9XHqDaN>=MQWJ9<*w54((>N}iVN!T2xs}pW7>?i8O4P>Im`c=7zW9`vI5;E zAh`tUgvg2j@LtX)iQ+-^rLIEk>TG$0`ec`qTA?)`rgfNJxi-%C{2yIr zaOxfOm4!G|k-uiwC7IAh#p8B40?D)JQj2-Ku%t#b8L&3Qf6@#z3~H;As=NH)k+N9m zqa+^Jj@A1@W47Q}e7F)nl%zc&)WB-0ux5uj1C+fGXy%K(tAw3v)x@RbvUI@WfU05= zJjb0ZRw<*F?Wq$&5lF^#NZ9g=hGN2sI#m23`wE9U8PYTwUp@=KP379>$yQRJQfB7j z8gv6B*K_Iqp&vu&+$L=Ke4e8RWW2CGG+!PNJ@mcR&phpQzsSM?qaNKv1HV=3j@M(y zytjj0gs;h_+wv4TS2K#A1L*Vyd-}1#cPx@BW`4{JkofaiYwdZHZMN z7t@w(jcIuXKkUxiDYPKCbA)|mQP&~cyP#^R5O86Mf5M>+CAmQv;j%cP>WMjVf5y zf;CNsLXDbg5ZWh&hMqF7M$ye|s67rRp{g$Nwso&c<4YmQRg$~mpu|9}UJBh|($Sd{ z=020GehnE8mW<@sB~zuJFqS$%)G1{*4DlQ(FXIG}Zx$M>LIiytf)d0;RrAwx0n>Cg4XX3fxCTn`_ z@Ke$*zS8w@=@z3jc6A5>j6;o@!ENtZ=F7;>lhy7$ALni`Fg=4X;n zvBpuufd6K@2aDdK+7xhH?mYre#h1JxStkA_!*ikwZWt~rGSwXud!Yp6y2s&^G%Shp zBNPm)-fB7drSMrUp9A2r+d#n*M;5^5RqMH~?X75}`W@aQQ?&_CF0X4Wy%z*FHk^bU z7cFt%*y4JG5SS*Mxg@94_1GN9JlIo6Jp2&kbqA*P%Qy(cY4-r-!Ea1309y^g+n4?A z(es5hk_)PU^paadk7H8?aeflt*Jr!DYH1eKmBLd>5QdD?VX1 z)pIgSRGFpnKIV9u2(IHXWf?55`oyI+pKaTzm^WL$KHf&%ApbB;(7c6gr?{4t20dEC85Xq9fy60abOW)B7-uY6quK}W<{$3J;(aaJ)y#2*v3)zMw)J?$c zx>1(v6FkVqO(dsDl<`EiRi`&K6dP_)CV~Lb5-$E637zp>Si}B+KaxLSp?>IHtFZq5 z_o8vwHf%X;_kf9wsuUmhP`!PwR%WabwaqS$;1)4WB9!+SYey2GNpc$*7zL@$+R1-F zzYU*TEbihcbi8D!Ps!OIBs0~*XOIlbflV3IOn5InYqNCm!%6P?cMg`B3`Tu=de5I^_Q0FRT+LjP%<#((zO9j~dCbj&N$2fLhPFm02B7K$X@~>O^QGy?*mEBQ4q;m z_byB7)Oj*^B7rSuzNq225>KsY{7nOY<>vj43BoNOC9{>#v;{%82Ccp~AfKKnU+6@9 z1r*ycYd4xkJepV!XMh8q7F-0pWOHOSgOAKsET5cdqgJR+af^UX+6vdxG$_G=laL_8 zw;9SK2$!hAEX;|6u6Kz<{SmtuJ9+5*RIT?q6ANcoa?Vz?2O^V^X1~w>ZWn8r+MJz3 z#XR@1l^9u&%SI5e_yB&F=ITn!7NI9yB2K8sW-v=R;FFNJoe+;OgaJ4G-r>?&RE%rUP(lKX3l|%Q z+oaw{IpFH-&B2jvZC6Ku^RonYK|o}E^9eJABS3??b`2h9f{*gq6q7fd`XehCYj1^9 zq_ehDsCBb|%?M+i{FAr!1o^pem2c-k;#ujLv5IV~s+rKVlq5@#+XL>KL$(dpn0u(0 zT17rEA=v#{c)z7t7obFZ{fy(92Su(e%2HV;w(>)jd#M2UnnU<&+78^VZs>yB782LK zd5Y>Y=yp20D{%0zRICF&o>9Gi{SdYu~d!3miPpr~|R-K-4YGK}A^R44}OLgkUL;H!f znvuHB<XbG}lE>M3mnP+X> z8g7OSPC2F;&dM}%f9>L&akZY;tF#tH)|h?RnU-4gecB~>zr%g(vGMZt0f_f1_kE7? zeF;aH+2g|d`W);3nehPaoTkITSKN&M@v%C*te$YA8Vg=KEf*-?tOp%@3Q8IQ zl?`KvZ35oC(EH6NE5jD84*1$ZkuLvIm0!9OI@o{??P#3bE31qx%yqMASH5Y{uZH(i zM7PewBUDFJQp#tq&60}ZC60t_ngqBi!g08Qcp9qw zwOxALuTSCX=r@dP%HGzLa+8ADoTZ~v*?JuCvoR5}0>nEG__#NZXd)l)kQpZUPA+V% z{&mmtG$;tLRVBU#$0;{ipt>JRz@!Ik8cIOIA?z5}8r_$>QU>@)cR+xQy30BkH(`r9 zw{=JRI6V2;jGL@2g`LI3mPk-N0;K;3YC<6u-h-%FKd@wD~M78&HFIAqeIoY z59Inqge%8&kvfsX5eO~bCDmjl&|sX)v2c6f9y$^_*rv*?9D$DFRRowrkQfp|GL`Te z3UfV+=y($%+{H%YydhT2E#ZM=88_pi1~QCIR3IT9S%%r<10IL@A{j4iPV+Vw08{#Y z!~oM|2jXeKPC$mM#IG@NyR`t@JAm`B7li%s3P()Mzg09vOFDtURb4}h2qoXe&63l_ z_;|TTN;eFE43p}6DQ2uHaXJMo1rx?O*Y&J~Z>gAj-|jERE}KU3ut{;{%D_CQ&3nKI0yW%pyM zp~H^XM3o0cisgOfb1vl&_Tnv-ySk;XVEyuC39_-mycCy^{jptJTtecF0lCw8U(H2C zAdZFAsLZU~$8?l5Lp!JqSIro&vN?WW8sIE!ml-nG6J7m@~)fe=fhIsSqJ&32$3P*8O~las~kVp zT%Usi3M*wotIl$WXb^CI;XggHmC=WCmCv{HCq7#kbXfc$u=Xc=tVpR%#W?Ep6 zcPK1cNLs4atNFg~(3L)d&>?jvrokI)7fQ^G8dihC7c~y-x9^MQDRS5MuNQ?(BHuvQ zi&#u|VYt%|)vDh+iBel0sg=d5vyusN3dajZtwuyxSZYUqzQS&10!-Zgn(MI(&!($R z6#;@HH2(16ST7$Qp2k6vu2ddu!ls5AO(XubnxqPQ0W>QyC{*;VspT)^8+Y<3a5y>? z)FWa;3k7IOGl&oVvgTlv#p|b(Zqb2PlL$(x{Ta96!~i~mgod8IBgjckosn_>d!j}Z z;nKm(YZ`BrRT)-z>S1vx(pk-Vd8|oUiNr>^$5@0@--sO>K z!a{smc=$x}V$tQZipGVlwa<%Pil`5s=$wA^ngYfr$i2#yMRo+scXE|D^xS;>M282wpAyBkt{K$NPTBF`L397ePi^3(|OFpUJ&^ zo6$+4utp=xlwB5~lOVdn(PQTba{@3;=I4UvMUPS@;6(-(^!41YR38^?+mH{Kw#>F! zN{5}VotEG6+Hl3c){%Z>>Y_ z7|~)lL>%DWq_ZfJ`|&A?w>1g%eh%osQ=8jid!hK0P%RpvGwpphloQERT6WnHa0Orj zCt)wy5TI{t{b?>=6PyL6(CXnAaDTx%ZUD@;lbRT~7A}OKu5$H4rlP*YoS~_^^QdXK z6W=T6x){xU#ZA~~*wJmtPFS?2AG@ntXdOw|aibk?)3-9be`@4eqhvT{F;18qB`*+~ z2NBHIE;4|z3DFG5f^5?WHFG68V1QFyCqQ5%j}a|`czM7#ZYDuOZpflJb(&W@TE{Op zl%}9+MRBM?U*DTNM*SJ+pwv(|;zq(v(0<(DrM%}qLH2J4^!9SR1ul@+`6!P%3H}?H z(e{B!Hf%{!VS#;=4?GR*>lsbOxRHAo<>^Obr@pw`H}o=F|GMd`OV#ZXproG$Lo#7x zDmqZDnKG1r$(7ex!7K=TljM>c;q>z(S<x`-wE4jLc2jK4H#P$(eUW2<>mXjC$jT zU{2xwVlY8szW?|WkwUT8h@;PB_!`81i~o6>8uX=#MG|?f!^Rf#oli<|#_SG>W!k!{ zps(I*QUv7IyfIbFzhoU~;BWAL-lo5d!%eTi-byih`$JzmrhZsOW-BJqOBoz< zz`Y0XY5cgLrMA*Ue83xDrt)t(wVXy_VEU0JD9X{DJ*AR%&1g(-y0R6v=EbErnmXv~@pGXF{M@zn<$dUtHz z?#|LP0;ei@ENn`rd>mUwQ`tDh*$vjp#pxrnCjDW(m__w{KR76Y34I`FWhnCLz6vFL zZ&Od1jTQ`M@WS2SJ{3PqGe}1m|KfdjSwR&}M^24=5CB;|mU5&VG46OM4Oi`pk$FRg zWduV)(FHt7aXbRt4;dYx_VW_d<=Bni;Og$Y8>bZa2q%1 zL?8*ihbxDTz`D45XTcK(tZN$%9^()Ofo^osyIH_4r3uLC=UV4K5~-TP3-Y!d{_a|v zDj~!u*pv9?^ux4BUEz2={67XD_+^Lh;2o~pl&xpa?b;nspaY1ze@U|~J}SnpRbJM~ zuP;2lT~fb%%wK)1E`K}rr<5`;E94as&uSYPU_diw-Q}*yTao0@$aA6goS5YgyXm!J z<`0@%wj7HLT!Zs{@|Qny4S>n?a>M4qiGn32b?P8~5qe!IIbq$Ff!U?C{gKXREx?X-+W9 zF8V_~_{*EKFh3>h#HO>Vp|)odcWGbnRS5Y~S2%^bz5;x6#tXZeaTlqh7=>38Y(tuu(p)Q6Z*t*`UGM7ozWf}V) zy5s+TeYpm{WD|1#a8lA*Af^cRtI!a5fQljv0q}n=bcn0P{e2tfY7y*sX~Bz;yqx2*Wq+cctS`3-&tUf*_6_i024xtR~dLLD2+3aHU_Tne=-lx?l^@GjB8Y+-7r;=Y2@A z2gECpkQ{{kkGDZqkY*5NR=VjfyOu>Oc}ce99rD*u>p`=qTt5?&-=RRt08@ zzMX`{9~z5bkq_C>JdxNdF2W-Ox!(ds3+0-NELeBFtPM;;m7#A^5qlEv%F*`>kO2HR z4IuOA+wE{*HE-i;GAkD}1_e~iB*)L)<|0h;MTh_^_J%jMh`7J<1Bq`^FkFtf)2(NA1-ho0{>1Pn>g0n>i5n`m}K)Z+xyGz$26t6ES6PMILTSrNmBF{ZT z3q_zd7-u8Hs?m0C+#oa{B^(l$*Em!O5|F?-I(j)TmiP|{)8uGopFv1Q5Y1LXW+z)y z8<OpLaz#Cm(-nNu z3zQOT-B^S>l%DOxGD~iAi8^%>`F`d6RPew& z*bh?$1@?q^53`u=N)1X+vS+{Ac49vs%t*0)H8dKu#bnywn12L6l&?Br7euo;Fl~+r zN=|#P;?5;~_9hNGyXQ1!*P|^!J50hFv&6B*hayUXwB0PNR|Eb&+Sg(>i z=#j;w^M7xUJNAX&<~g8syJ^TyAV9G!Z_RZu0)EMX;*ZLu!%e0p6kW%KCeEWFK$4KT z_xZ6Vf_qZsM@yec74NAkw3O^$N}=Dy&s-xNf}|)69>b<0`;9?CH1W}K_ey|uOp);{ zh|yXzL?bPL{xWwwNSo*cX7^ojra?i4{+lfQiRx@+0L((p`2+J>zVyiR&7Jqkywezi zXkj!#_s;Fo5t#$|Hql~uz?AeT?(IrVRc+_|K4N#l*&d1RY{U$($`r#47^j{lu>}M| zBq1`jm?4LEj>FOKEm^T6v2m9_MB@0G{N^H66O%Y~4~|c`Z0M4*5if1<7I_uvL#*&A z0V~MK#!Sd5k&ye~n)IwGgtPp~9kJAxKi|3DUO^=l06hesR<>Oly8j2RH5p#lbJ(w7 z^!Zm@&ZN`lHPWh3pBmfGR{I;s@-k9+p|wYQOMb#ArM)Q63*0awh1@Bxlo8Y|-_KDF z>BI>=c`Jwq6=*m>?b$l_UdIONqbF)HUSj3XX6b)!W`<;FdGmkvic>*xNScR9^luKAgER%zzzJZ*|EN6RlQ0KAN+bw?K1*#Xb5#;t zy|PW8z#8IY$DMS)dw)2yJ)xHd(es7gHass%_bNMPaRaw8$0Du(8Iqh2uiw#!g(qhO zO*pGK5)%7Uqmp(Xp}{x+oDAb2*!yy4cS22699eqEIZ3&|UEYstW4G}uE;+PnTyQU1 z_&7OEeBt<7Wj=V9C+sLXRFk)$BpQsb_|25@A}sS+vzZn-;QJ!uP7gR-(79T$Zv3@N zI&eR=1a`|fsT#k1+pFnZ^z3kebY?-*1r`Z|sm2|{r}rL@Y2aGY;1!MdkZQJ&wZ}b@ zA)Sw@zj-c1mGaC6H&%;&2n^jRh9i;!_r?qY6)7iHbz{hgEdzDDY!@aTAWH~=9Uw4C(wpt^CgHkbYM2*;_7 z0#-RX_z9E%k(JYv5JWsX!xtoWyXRU*M&PLj##-Tv$3;^`ep4Gpyua8Ar{{rXjCVgp zIfS>|el~w`h7Pli$P?|)e}>{E%#+WzW3RRG#Pkr@pZ0h+l1nM-2(M?k@|_C+!2B zLa~uv0D4D$eZh-y^HF zJI69E-pJc7*H0@8V2p!sPMM)?nsI5i{0orOM6iL&<|$A!snF~71Kc}GzISX%g$V)f zX$fz>IUuJu+Vm0mJFVe@0y(wjCLnqw4^j5hWQ`l?Tp$RXr{WcMIx-AJE^vIVd<=dO zfFo{?Rs1M0{8bVFw<;9zec4mTf?4DY)_u){2+qW&53 z2&>apovodx{Mf;9NFbjbk~4G08HKc@WlpX2q` zRSuz6{BrGH;#R>-jD$DcHa|9{4>KY(BZjJCr@&Y|RA*;%x$u%(0{SF8KOL<#wE{SC zIFmkd*N{B}9=^-4+AhL){YHwlp(jzR-{Oj(Q3rNNjCGMAHXQk4%TH|9a_zWsGRbGYKEsp zm`YdUJm_!3WtAp-t|=Gl*MrT@^3f-=_rt{$l`y^_NAn|z2!rn zpbdII^f`*$J{HB1JWU6m5?wW1!I06+rH2FVzgu4 zM2J<{GLvf6($dJ{&3_`wN~f{K#i&wJX61aSDy;@<)3sP+v zWfsB|RG21tSiafubGtZd^KADzIqyB^;l0p5$X8~i(LfpZZ4E&v7c%5jjIoK*@lF|Q*V_9A~8p6z))3bUrnX6MtsGmpMZa9{$=9H;8%6CBh1K8;0%FW z3hSD9@bWFgW&u@F)0WkN&>l~-a~Y4ozUMjXyT|E3-+afn=cXKmLvO~mbOiAnfTE%S zf_FcaWvX=B_O8|GlY`hvG}X1Ml3^})xxhIIRVkziZImA4kF)W`v1|lI4iv2pQT&2G z5m%@i9vEwX86|w%* zpNKz}egZe?*g?v&mTv^-GF=QxveR>@FCCFD^;gFk#b7qb`kn_$2OdgY@pERi_b_K? zG`Hjc6h+*E`@Ff4aOQLw3Ytx3c2>2#GaIRxks#XHU-sNSPUZ`mJcb~eNV{5>^VN^2 z(pLaAQ~32LexgjJ<81XdWgiyN+^8d=1!P*G+#!BS8u%M4npWbSL53URtnSKB*bD3E z60=35J~7}lwn0Y-UKuhLzwmn)p%Kk9hh9c~O*MRFjca~3t22cSL*^x7SynzbwdF9> zy?|=|bzf{v7(hF}`hUGXN|jgq583Dz=C{ zX8|_9qz=e`^OBSLGT<10%jM8K1poQsxB_$(`*r2g9n6$mpg1-Z_hIYzI{*-Vw5k|e z0@4y@0PmN2z{GrS19hps_d=7Iu??N)D_$a+!ixexz!UalYy;<`G|9813=+shcLg@q zrJ4}i+F-rR?SPUUmZaN8t_^9|AOxFDRX2cwk1m647B%>e+yvIsVtC;axSCstUTi*# zyvH0IRr!}P&amtXUIa9Qb)cxYZ8NH9uE;Hkl%yr1vF-q7xdoP?SaC@)d(NI)6#?Cy z93gB?qp_ZOAKnriuFgS(XPS#wnbwTET&go{KvUBwC)0KIh?Z#)U zz}D!;Vb6iOQN+p^85aY539*S>2h*YW04B83BKpMKVA!P8r5O@7Ku3g~sUQMojNQj% zL**obV28aU8kXs9V5Q+`K+pwrirGVV)L_djlC!~IDUVpH(;#<|z0%z>Jnufp#NrD? zZp()B2L?DeatP3UVQ%WLIzsS;8g_ReBrMXHu%!6;-@xjQQkDwgY>bcae}#Beo*#F)*mi|Vy1u@ zk)^^Lk&xeq6og*9C{OcbZIkh=h4i9lICDI?g4Mfh&knc)aex{}8K zrLBUXpFu4(wzJAvCoDk1LOhiBjf!HVX9d0?B@mUrPe8@0VT!V47|fxa5z7p^yWHoF zHC1&yxM}8X(MjsX+LZFj)BU*#QtD2ejr(E(8Tztx1nLmn&{*y;x`r*WqATZJR$i$k za*G~tAAu%b1T(~@y8T^kkUHQ6Xj}Zy1yuVKW0@JDFNewNHxkm4)Jx~WjO9N7V7|L# z^QEUpacXcYyeM1iO#tH~%t~L~!wgmBZRAOIm7}n=fYDD08PT%m-tT$$=0tZ@ndB{C zpME3Q2||7R-IRBiqauG%(uah8CRz(3_KeHDgd6HNgE1Z3dUXVO=9u5`1s0@?`>)Wx%fBmVmdq|J(8E9kJsOs0Lgl_H^j8=mC>Z?q~m}J z==r^$FNjpZZF#%#lC@)gkV7-+&^)bkd0Xb|xAggl&)?mYZ|WlZg^f3mh1fOr5?Kl4 zfjm!Vr2bB60`dG9s&#qg=K}hDkr+VlCE|jg#dj=B8T`J6(a7l_%>h~94RzR!!m=UA~aT$kBwVCBZO%$i>bpay|jK3RCE z250mY8VdM@5g&R#nwexoeYr(;w1%+gPs9`B<78{^kRj3#rc=vv&*FR*6; z$%|ccr4ET$Y~x`L<&=KgZuB#^K}m(krVn7WM0hH;qe(xd#lkr|gh6Zaupe(({`Bt` zC1@#;CoaagWJ{X;cwUeP<<@m25Lt&(2gG3;g5EM$4Uvs>heo>fZClD(Y~Dwy&FyNZ zWoNGCz)U#pzAHb9ANj^W=uXS8aL$!IoF{zz<5^4ddFOciLVtd%#GGp5dApZMc-e5& zZs@Dj)YxgfV8~{slmOV6*iDqlg%&{*n?*X(Ug6W2&5M*;YjUhW4j8CH4;aCyjJ_*+ zA)oLEM|D=mJg&CorMzNOa=x-zPpU{Q5$}*t#GCv_;o)@Y=_kuATfpac?0zb8FuP3| zGC+K{+*9uxxwH+IR&Cl>4KocL3+_BO?T7PAD=hc4r=63>^HJ~K(4VwBP^C~$5d+am zdi*@(1o9KejF-ArTUDUH#2y1!^KRcT^`UT`opdXocWz(B&&tbsD_B$F28Rh>CxZ=; zQr>hyx?N9d8EePg_0TElBba%{?JjyhLgJt?E~XQ`@f^7+bt*lzDPpN}9hgxyf!RuH z=K){}S6nQC%y%!EOOz8Y(d_KGO&W}4;IA0x$0*8dN%J^CkIV|YW+aYkI&+3l1o(`S zUQn1!I42VkV8JMT1rOT|KV!(o5Cgk+2(On|dC~1tM7i{ga|3*UVe7#O8<|;D9XANH zIS6fHtt-&OkCq4~&R}1j0J-{NNyCe(*k#5+%FM;|xzDW_xU4O|@L?GGNBNmMysD97xF6Og*01^4@K`{%T!_e)o=NHbqqQMC_-*js7-L$Bg$m#q*=moF2omu%?B~ zO92e(>$#he-^#(BU?T#je^yt;84qN*uE(r0Yih`r}mna!S9Pi5gaWM@~2?gY_{|iu3|F=&x)}bqqBRj6i|>`DkEi`E(b% zgO;V(=*dI~Htl4c%vOS9b%C)(KAmw*GYzC|3X3u-4g@*-1}od`jC|{-wqYAq3SmZs zMGWsg_t#6iQsBZ<$!E)d9V832uXQuWDVGPy6#-mVx-Uk&1?WTUIZs;&M#(+>xJ1V^ zkqclWMa-vhVXy_jhkVw##ID@cuya{ibN;To>}Zht5`r8N>LAr7ufTE$M*Z zj(7X*=xzbL7bYrNm_SH(;^jQWn5q5`)@7%+PWx!1aL5p`W{|>6FWKzS?3;i(Q$HM$ zoC^Cao-O@;q}~R7R9p2idpqX%CUsMTZx==^XQyFVR>&PyE@+rxR`^($yiXN_+O@eU z*u1sT%D_ar!F5k(^(CE5@;ECohfV$i>S6uS`nXyoKx}d+)4}aIjBe!Z{b@u9fQfkh zhkR}9Iy|AnePFjB(o_}+DEU&I6G(yYbI$DGH zi{l@UKK@01Oy|1;X#=B6%z@saAMVg9N~dAD`#KoYVGec-f-$HWg3QY|g#&No9U1p1 zxYTjiXoGR|Z-Qeb_g<3sww9G|cHNg3?D0N48na;_3J>+&F-tuqy)E1r< z&5hmLvG88{-H#4wPn1dh9jLe`cmIY#H+T2W)gugu*_*;s$e!ItzqrGqj^&~Vv(u3!V+}vH+JiJJ83Ej_3S#d{!y+Jy;(pL(G zv)Em6zPlLipB|}osYeis6gjF-3dC!nG3)>A2%(&L>;GuD|Dz&x@A0KB+vnD*8+mJP zyq9~f&IZtxi9uc*J|I17gLZP@7`dj_!b!3qLm%g0x^`mAhbL&@c=+ zg7AWJ0YunB$V)Vnkcxx#ry(|yx2W*oGsx;QQbn63E}Ax{W81hKY-pq1nq z&$^%p9&s5%N&+7D$+GS|3fDyd-Z`n<0U$gEX^4`ys&2=c2Z?$%#Q} z9PL`Ro8U;Y0bsd1Jz(dys#X`tS%!h|j+e~mTIO`j z^V1-gv9L@W8SxLmeSIh5Yo0RT$krf$5IL-67eU7A142hYBh^35@%Ld8qHgzl>IAe9^qB(NVFUxY$e@Qn)L69vtp`l1{1pciD;zLO~ z@b4}+9AS%+QX72VVa4C*tsaltDgC3P1K`RSPpE1y2o&Nx`pq|DWa29IFqY8%g8oA~nTDAZwEX;N?jhS-SzP@s4> zbMEka0lUg5q$Wlqy1Tt$&=21_bNazx2{j#WSW6EKvGK}*^dqcKdN7e4PWoIZXXcKK z1tC5k8CPLtAC7%`$?#M>)>VgU{i)*!Xe&9oG;*W$0R2d!yQ*Q0%4RX$m`IY?SXIf z2{eg`U}yA!Q({OmC9ID-n0bE9QN^VzQE2F8u}d*vZtxYu4lC=nCTKO{ov`;`6I|8y z!^*(=HtiFC6+ZkMLLYBG82-}d)D6wU&5*?X~#P5c~Ew-hIo8TO${xZ>Ew@e40z6<+*R zOE6VoCkmN5?Q7Zk;p2@9B+g1$cB@!L?3r410wy72~8&$XHb~K3?sbT z;BxKE=9=5U7l07vVsFlt7ZITgI9T^4dyAhs(c2)UtBySa_G|ZBV0{8`6rmey-|%Kd zwDJk_$1sCs*8FZ{ZN!GyLzrn;Q{7fMjPi&@9RZ;+GyaLyn+?hkN3ypnvykCa@p#{F zbXCMMXE4zFl&uFVrYHSv>27UW+A}Dk_IUsnwz&^_g`def;jWOP%>@OR*IQu__8N{C zlmz#Nt<5-b)yAy|47xZwJ_FV~KH_KC)C$ zvrg9Onm5>_0ktCz6Hh&Y8LC{o)L)mBX=n%MW=`_w(q~S~nm-ZSaW-<={X&x+2Y4qp zNu%q)8$O+jC2hmf3~EWR(E2V zwCBoT6Ty&}1C+$~7b6bdG|zao4#6ZC;S!!aeZz)5nkEkmQFl-~g} zWLXJSIQ(R5Zq(&U{B{hT_{wH)1lSyb4>KKKF-FYMXuhQJXTf=Rl#Q zWa)8Kq>j(kV`g=XE3d}ITfH1=iEw&oGw$aN(<#9n3s+v_$sO7qurPM2F~0~t=Q<=- zr{@n9+vPZVn+P#!XO@D4X$E>Vjeod@NOTCF3yR54p*I-u&VNZj+`BO@%N0T9})1&k5#ydh35*#HxRC!~z#*BmNmolfwv9{Y21Tg(K5TW10ka2;e5D zT(D6wQvRJI!{U2TUojFC=xAlTB`~h=ang1W{HH+HZFFt9t}Yw?6R`;5i1-YT&_@e;nymLF%{;{9Uf<^{oB7&MJ&lceZ>{_)P^o~XmLZF1en;6#p{O*EsU@7 zR+J9e71*t5rya(u%W#(FVUS+uUqeL-^gkVWfZx;rB6e=oSV2hN8Qe75XRuF^BYy4q zZqz)mVd6v-CSRJP`!xkfxbbtVavI)#27)J6>8+tTw-T>W1%Q-6)5)(5f9hKjSUe6Kt+ z+RL;_H+f%V>KbBzygFy^BY)O3^lDjFZEEyy7k{CY$#V%@@~cc#Bpg?-o{fgjrA}gI z3oX9e<#Z%AwIpwS1sui`tAT&E)vZvehB>(Souu#5Duy_PgE^B*codkU1+du6Ne@<) zFPxD=d&_5dzQ`xrZH(jwGaYe{T^ElC zzfy6yMlXgLIfkG6ht{1ZNeu*Rgl28F?ggm- zpip)cij>d#>E;=|y9`EH4@R=%*v3pu8Pi3-t6cV5@>tN_@A)Boc&t%Ld0Mgj4jSL3 z1de-(^{u6;tc-IDVJ5p=rom7_u`rWEewBVFg}8`{pexpoZQK#F^fBXKT>PcSe>XB} zQ^@_sKp!}E&e?_y?ib+EUk}nGgo2mSP4RQ;u6|Ym7mm`QI;dE3n!+?cy(iT7^#`_2 zJoys=bVbh>jK9UmZHItokg|K5dy(=^pit}3J|p(VoIBrEDE2U6#W{l{`RnG|9L}un z8MJzDsw#+jA7fk)9$jzXs@`#dGPd~NGScPQc8SkhE^v+RKfoG*se*jn40GdcAxY4U z`)1oUaC$E6rYD7T!wgi;Sfus%)?vpi@Vx_l33x(A);=FnnpFuWXV?nv@J6pVMq>S6ncy>c%d9JicA z%`QoI4=guvCWpp^1f>K4#{}+}9OBIOq>`^G2~l zP*?HBtm&Go6Osu_ z{GZ6`!~I4B6nemGEcWv2;m{frBzg0pimr}~u7wZj-(l)B6di`DrmLdHB9^A1iS*S* zCS<}Tc`K^y9GV3im4;pM+6^TUM?-EsIaYF+h}f+bojWiVuP%C?L!%Mvs6HCbW* zj4cA8O+|cCCXE+JZmT5KL@4hedKP<;_mn|nyX>xWI3SFP3e025DecFKLg)8w_2X3Dz zVzN$|mA6oTNOrf)v#0`G;yXDg1(sr{1*H%YU$ier=kA&JF&etfvW*uxY&qs!Vj#p? z6luKlwg+VXltCe^9g0T0XdxJq%Y{ZCD>pV`{!tOWTY%vRT)WnF^YkU&by)dU0=iZ; z5g{7hj7l>`ET_Q{qBduw#m2F!V8iapWKs-d4a0q>{u~(#`MHQ?HT_(rPj^U?tAezV zGO;P}b8(UyRceCoEa3}m<@ZPzZXopy;2l$r-oUkO)|J{I-;gI5<46^_L^l!`@~RUzEaNxi9}C$C^o+ zaaMQZH`38fWV^B@s`OlXNz%v9n)-61oEDsd60-lY6wW%9R4B+s3GV-^`$s=Jb}N(t zx1AH@>>>b1c|`)1g8wsqq#M7i9s7_sL5v%tt}qKobdK`xinJ{zC`yp zyO;FEBAGqaHwPB>PbDV9VV=jfhL^q5bQBHbI}uDM zf9CNbrTm;-;<3VKMo&k@1;Lmq4KH##@=}p?g@3I2zT68McX>8FOkq(DO@Ri9NPjaT zc^N#T3_9=pB>!$t4~1EpW>C$bp22YrYoS!dyjXbug*YW_I1qM$6HSaBt$rKs^Jgp9#wikz{LQfjRqV6U3xipiyTC2YNXgnB772*6TujU%&peYf|(WQoa%jMqc~>6ZONDmjuXfEQgfX zCxcyRWMot7FPCn9l-c&F+_^}a)4-QMjhl+c0%aXTp zda#+Rq)D2SPE$^EccZQC1w5Ow1?Z-a1Ts3F! z@CNJCkLj@`ZEs>E1xQZJ`b>_q=R+0sB1e0sz{En(I1;^ zo3UWS)}SjA4>FnbY-JFphphOCty(Oxz&UVjMeCuN#qvPE znq{!&89{FtL)Tt&_@8jVO)NBSJ=QXw=`rm@*N2zUTC%PdCDH!-`fP9gClBEf?JI*i zN}8p~=RR*-TS%EakAP(J0N!ZTPE-G(c+UQ|t<4CI&-*G_IZw=$GX#&DL#*t#<^ryfistQaZveACdXZ0cpv!l}03_T>1++Ek^jLOH`r?v3%ig353X zS8(F&l%)ZBHwC2AsljhjRy1q$;*y3WQz_kn;>l03jZ{1aMlAOrb(!c7^^##0+ObfJ zL%VVYUce2QGb~cQBj^A%<-PV)YMH`pzv~l$K0Hhr-lcZy$QyLc+Zv~vYwLF?@IsB7 zdoym(o;#7;RsE!ZU*SK1zTa(1PU~;y8ZQFzN@y)EK5-CdveT{oA~$$T9ZK5uL3_HP zDU32$4Qn|t@SlKNv%zNFbcNdr18d_(z%X!ON z|9%lGegvy`I3>L3+j+pw7!WWT_o!Q*v?-}5DLPW_bBqkYFzmSC$(lD!Q+wNtKGM;S z1zDDH2uMN$h7y?Vjn4V;;cy)x@e(_+K>IyzsB-z<(cgleU;Sdy>8QaHQOLqGl&Tr$_un{WCv zFV2NSua?IfyB6bDx>_|sX3Q?i+dbw*5+8LuzpSU&xN>WXo_w_M)qymqkcjvTx9D@0 z?P9bM;)mLn18;MQIbW;$8iyumRs*V&dHS?|yxW^{$Ho0#BYC%&`E`P8VUFIYwS>JNnP+H@7A{x?NnK;#@+M-9#COIRqH=K?m+sfo zvjs=UV|8uNVx+RAz{+!pL2_3Fz7*i(6^``gycDIJ4~gYX1o}I79nY<}h?N`v57@QOc8kJp|w%YCCI=`fqe$sbr~MRV|mBd9y>pu+Ax2FI7;d-@UDcaoL?cx82WO zI#ZFw&rCZ%Adr;>SeO}a)kDH57^k6Yr}T*d0NmZ6mgOxf&Yg@Bfsv?r^Ph;Z9dT1k z&Ti6NzZ#|EH9&1b!izb3)w31>ZvD=$ZRiPC`_H4t@=IjAW{OdU$<;cClUA8ZO&nAH zu>dePjCRat{Ze&mB5A}&keDOKn0UB*lB;dZvRbDFMJa;;%>v}%JH*he_=Tij`*JUy zNOM4Y@SU+!OUhe%O!_7py5bvCvUUY-x|F3z`cvBf-(jk_Ih6;K;Ea1C`4oMbxHIxh3*XM50R4te})+ zy{lg&t+*ev3hefj*~#N{cB=^=8Zv-^;B^#OYRJ6$v%R|N)Z?ZQgkzi?u6tUt{}fRSVV*pa&>q0OE97!%3~S*K<4G-n1NFd)}ch zW|G>4y{G;}SjAbTR}7~*t3aDK8&kjjStH!&gyvGWISiWMSOjNIn5iG^N%x=;7XZ>= zfLYl&vje#_V&Q1#AzOOoe1i^9R~o=AGFJm?C|kU$V_xE)2sRg*S<1yzz7cX>@Tp`t zA^=6SFy;Uhq~8`LrMm&iXv5=!cd($U5IhOeq2;2^w$ej8=364AF)rW^D$`C=7^jFe zu=z}cZEt7fzYVm2Kl!jb-Az3aF9QE?yc^V@fMy~C>(oWt|95;6Afzq}twDnrqEQBG zyV;csI$cXoS0~||0;nk`X=x7aXMdp5Kw60sWX0uqYYNgpG$KlFR8M4tbj*Dt=Umf3 z)G$_)$%bt2%8}Z}Zs^Vk>{NgR^&7fR+zN@U8p9Di)NR}rxh%Z@e={xXNHu_Ti!>Hj z7?8y_#7K&uYdyGosuN5E`h%*(hHjdxM%xQ{)P-1`p95VVBDJfIJ!31Pu9{4QR+)^w z`jT3{<05$6Fj{H+9M>=5g7#$o&v%2rVfA~z@-ObM(S}3OAfM(_%J0g#!DK;nL&w}c ziFi}C=3VUYVX6*5(}7g4H$ZLi8gW&!JAHx$!O*j95XFlSNo*{Nh}a6636`BvX87eA zlMAKfkb+>B{TC<(Bl1`%A%H!M7F!%fgd6xAq;{h?N(1=6cS)dpqCggY1`X~;S{0ZH zT;~Sqz`cwvVGmmhFXrpXHD-56LosbR=KVELwpdK}gfwY5DXG&Z$~Dr>ghu(U-O8Y# zTnl37YG}kb@3d^}Y7FR@=hH5bT)`^?x*9>!wgAM(5O+lMc)Sa8Uu)Jf(Y(eESZBte z(3NiMD{P$GK(kuj#S>5b| zh+-@hJB}si+j5CTXwd8H1{K@dnZ$8|&2*iEj-M=$=E3MAZhjvZopu?n`bVTp*;8!Ri8p2i4E)&Vly} z^l6*O*H4F6Mf^oAyKIOfps=UG$k7SE(mB5=JMkYV*f@R$m{zxhZc=i`tg(!9lggRv z*M_KLlT+m>YOIGbz{;PhoKvwld-!loKHw`C9-0V}H73W;yy&UPx9RG~lK=WALRh(2 zSO7uD{$e3~yuyrw>^r65V0+&{%B%~J4iMN($sKjl9#yE11&cT#UZO$nlvpa~+sneR z#VA^~I=1kVpQi4KYGs2AIy@F@7X1jhkE?cN9}LpRd-6Uwk!IKCVn1TQ5^@NgY$x7_ z$-{hU+84<{C8~!RQ0d|bj~x$hq%!ps6>f1_!|N{9%t7soUu3*&BTY(PceiKIJBMSF zh!H2qf~A|CJr`uXPVdj#9rRgaskPT5-2oxbcfKrwHrwagi;0by{TeqDc<;2cd&)9b zaBFmLnaTlPaMD{U&D98)edy#D4FgsJzCjT3xc93M`i`$N|7?UQz25^ti?fKbtQ9Y( z2Vo@L&4ujj;cuCQSiq6!os)=vngjUK8x5Pa{YHNqk%`m%S8_{EQ4>AK%!i+D1JvBV z-Tld{V|vw+82Q;5)iEs0=l><$dPB8J#tWT+IQqgs&c8HF~`Fua!5hG7&15J^ff-@%Va^R&XLm&&Vg;)+C+Wt8D+W@?H zjGF@|_BZEAmV7Z(nuUO5d7SvVyY-}RzpM>*W3QDhDSvz@FB{aUn`qtd?0uBo0+yCF z6h-DmEFJR<>_@)1`Fm@CHPRqA@d;2kSUt9`F{nA@3!FXJDo>zW?aG3t8p;eUZ`}-v z_B8fpHL#1gt#a}XH~j_PtnWTilbz*IAE$yaYuUDf((DQCoMFTXo>pgx@HkJZ*f`|@ zO*q|SSRS#fO?fu;4(whopD?z>*?9c1(<8|9c2q7}3R_-9`rI3}NpD1m--q!FuVgCJ zJn$o0$U-V9?l7=+@|7~E^t+%{W_=4@ZZ!6#ANU}T7yq{Idd=gITYR+*2cEoA7_EQT zF~10zh`XQf9IJUFuATTT~Rpj!mj*GI~5 z7n!-}xRzsDd9X>3ztZ^6hUvs@gq*G?yopSBj_rPX4ncK9xC) zekM)fk{>m?(#Hnt0N-d}hZoM8#q7<`aF8f60{0S?JEcRMwetQdZ5J;yXTxo7VfBSH zM);u%iZuOk26uCxan@{^@$lV|v}JS#>~2aACcEFqs&jd}K6!~(H%?>ulHSOC7Kw3@ zdp~>_GlIcnkfu@>t7)$b#;wWy@WDAp^wkJy$sTjf3irat7&9*(cYiv8hv~)B`Weu*gIg%yR-=_uW5d-@cD- zB3^ccAuh8Lax38TG&yiISxk$a5YT1qG2vHm zv$vwK6OJ_9Ty+ z_)-&^JFBa2J^Lr(`{!#mkdT{f6uy^!>F>{apV`*SY-goGB?;`tiS=YbTj-wKv1!`R?mu^(EF zp>)fs{=BD1+|#nalH2#PR6i3B)*b}|tdHZiRO75g9QxoFfpjQ!kSz>5L?lrMzT@jL z6hq}-Y6vAc7VrmqnFthS$@iTB5{P))?8VSr`X<4b?Bd&aDZEP4IExw53G`3bH`90 z&EQQ&Qu>An^`8vo;WB z&ou|oFmgx;Ha5f5WKZtoC!Q4%>lR+F8y6o`kO6Vg@*A{&l0rrs8o*U!{^5LC@Ia*8 zY8BQ$9lI#o57oB^zyiUZ`#gmP_`5ZfB9_99#Pf0$7@Omv z#a_fa$b;GkGTX$#ST%{Dea~+ftnv+lOO-K_Y*ub!WK|8waf|^1OcK5uDZihFNtKI% zp8{4}0C~b0_g)IKF*dDoAwwQ>(3l0`#HJJaEve-kZDHypFTzuHo44Ij3RhEO%3E=! zDHp}P2CJ;jgQ8hzM$!N!Wwd*%8$Da&+7UwQ;lG;?kwI)1(gvC~R=c_u;ZMBVO!DNH zeRQA3_=><@>dReT87EFN-GTSahKES0skWE!8}b9B#GtFHf)X0>(?)XToI5Dp(A^un zc$hF16ll86KUF?VPHonbp3x z&x_9XJCKB1vw zJ`H;kbp`UFuwP|zwz?572&1)GTjxe@8StSJ)t9Hl_^8Sc*!R&j?{}{th~NJ`ud3um z-hbVb26<(eMQ&c+eg@tVnjKuiZcss|KayTnO8rz0%QHBbM=a@+jwG$+jL4}_Sm|ke z+bQO##ydeK1>e??focQ}6W!U4IYRT=ZEubY=56ddB)O}Kt(>Qi^o2#>qLWE)DgaN@ zYRgD@vw{N`Z&u#&7Wfiyc8J{8Tf{yA8stO*EEb;{)Zn|_w`xWUjSfMGkGbt)fW}GC zkcAX=%nh5|nE_7pHSRH}`zREIuZd-)Cg``%)Scl0z*V22hW~;OuGv~&3kR>j=3}Uc zI1lwcanM?L)8*$t&`Nz1nv_>A>r`Mb&Sy~R#~BEVN=n zl4Io5gTQvvAe`F-Vj^%=PGJ#W(i#(Gol;Vw%!)-^C5KSdN5JQh5e$t@9uAF7F9nzn zKUVVnGs#`PCIp(izaC;6Xx&Vjc+dZ1>h0r_zW4us%w=1yI$fwsSALFLt~B*CP5ox2 zuBDY`UIGarXCvP!VL!n3UlE!U}r9C7AVUV-3A1rk)Y%2pz23Yxq{W=$&%NKKJI z`aRh>=l1*jvDMnGQh4)zzn;&><8glsgBDD;hG%uRQlN?h5yNyD7@#7dBBO5M2uOpC z%#d2AxE#8y(|Zy*c+WW-BvatyGE>!2Bk+YAxUrJSdN&^QYufxMDXB`fY~kiOQLqeV zgG~_vL7*;@F^wl^3?{)UD0ez~zhyoUE~$_)W18bFWLCj|n-wlbI#y+!URQ6E#SVh7 z7cx^r9ykTK-H)y@$!Ll){u}Pv+%}Z#eAPz!6Cl>s0M#~|*V4*v(*?9(j?Y)x4Gwak zHxrb(DxeNr#U0CSJ`84C9GStZvc#xR!Vf9agzYx@z>*ko|TMndkGy6WqKFoG)|AITB<7 zC%vlNJFNn{&q*vcNRO>3nd(1>Jq%QU=9NRum(alw2b*)(KWmcZ7l&>-&-^*?rW4bU|IXdWP;(p) zdZ@n=rTdvB>6LHd?k`|JMDTPq7^q11Wp(L2y&Uca1P=zIg8%hTohX`3pn(cPeoTI8 zChQIjYL%@~lW;GR3f88dxp%#KD#q9>2+W0mIor8)>VK=XqmQ8^Z&7xr?YlA0OZf*0 zLa1I>{&KWAgx(qWAmHP7r$>#Fn_iqAptDiw5M*d=*^`>o=OwF=zTs<_>wz+12rHW z*QY*w1g{6&Q*O0~nbzs3aIGkCIi9{?$kKF+d84?RBfC5Upiy06Q%ao+@Z29OIIwOD z1_V}lV%n@ohGh;N3D82D!C2+WYk_j1aECCtvrq)B;h*UMHqnmmB9F3X2XZdm9B?ee zE+&d%R(u6j0cvXCjBm>@3M_>4FD-v%Ht+V?&~;edD-ATHKju4~gcJ0R9ZdQiQaIFJ z;g}((vYV!Qp;S{~$MOt2x89Af1%8bd-+7E>s-X4&VK#NyP)(!kTuoT&L(V^hTIhd2 zEpef26MVw2W4nvc7v*6VgCYGYjRX;>wd5n&3VatXHwtn%{TJWy$Uu;x6@+o*5-60|%;apxCOIVL&sKZ- zSiVn6r%SUtT@Mk3XAf4JG@tocb-D4eemWl@}u zK-nZSQ3!$w>YF@Oik@9dGnP#>NQ)qM(}Z7|hvm_|xVsuS+uxF$>#`q}&dFd~-5ekx zb|zh`k*YdAe)f;@73R!hgN3@d3U$=PwaCAC(_g*~uj@y3 zI^L?|<_!wVL!Gk^NxZA!v-+=@pOW%#Y~V=Xv&fylqrhaFQt}9`WR_WMLq9C*;K>1

0gL+{0w)%*vHuB|%%} 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

Bt{6RKPq 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 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 转子视觉检测报告 + + + + + + + + + + 电厂名称: + + + + + + + {{productLine}} + + + + + + + + + + + + + + + 机组编号: + + + + + + + {{groupName}} + + + + + + + + + + + + + + + 检测点编号: + + + + + + + {{pointName}} + + + + + + + + + + 报告时间: + + + + + + + {{reportTime}} + + + + + + + + + + + + + + + + + + + + + + + + + 1 诊断概述 + + + + + + + + + + + 通过对报告时间范围内视觉检测数据的分析诊断,得出如下结论: + + + + + + + + + + + + + + + + 磁极引出线螺栓松动情况 + + + + + + + + + + + + + + + {{?boltDetail== null or boltDetail.isEmpty()}} + + + + + + + + + + + + + + + + + 无异常。 + + + + + + + + + + + + + + + {{/}} + + + + + + + + + + + + + + + + {{?boltDetail}} + + + + + + + + + + + + + + + + + + {{_index+1}} + + + + + + + + + + + + + + + + {{zone}}# + + + + + + + + 磁极 + + + + + + + + {{position}} + + + + + + + + 号螺栓出现松动,松动角度为 + + + + + + + + {{value}} + + + + + + + + 度。 + + + + + + + + + + + + + {{/boltDetail}} + + + + + + + + + + + + + + + + 磁极引出线变形情况 + + + + + + + + + + + + + + + {{?lineDetail == null or lineDetail.isEmpty()}} + + + + + + + + + + + + + + + + + 无异常。 + + + + + + + + + + + + + + + {{/}} + + + + + + + + + + + + + + + + {{?lineDetail}} + + + + + + + + + + + + + + + + + + {{_index+1}} + + + + + + + + + + + + + + + + {{zone}}# + + + + + + + + 磁极 + + + + + + + + {{position}} + + + + + + + + 号引出线变形过大,变形量为 + + + + + + + + {{value}}mm + + + + + + + + + + + + + + + + + + + + + + + + {{/lineDetail}} + + + + + + + + + + + + + + + + 磁极开闸变化情况 + + + + + + + + + + + + + + + {{?poleDetail == null or poleDetail.isEmpty()}} + + + + + + + + + + + + + + + + + 无异常。 + + + + + + + + + + + + + + + {{/}} + + + + + + + + + + + + + + + + {{?poleDetail}} + + + + + + + + + + + + + + + + + + {{_index+1}} + + + + + + + + + + + + + + + + {{zone}}# + + + + + + + + 磁极开闸变化过大,变化量为 + + + + + + + + {{value}} + + + + + + + + + + + + + + + + + + + + + + + + {{/poleDetail}} + + + + + + + + + + + + + + + + 检测点温度变化情况 + + + + + + + + + + + + + + + {{?temperatureDetail == null or temperatureDetail.isEmpty()}} + + + + + + + + + + + + + + + + + 无异常。 + + + + + + + + + + + + + + + {{/}} + + + + + + + + + + + + + + + + {{?temperatureDetail}} + + + + + + + + + + + + + + + + + + {{_index+1}} + + + + + + + + + + + + + + + + 检测点温度变化过大,最大温度为 + + + + + + + + {{value}}℃ + + + + + + + + + + + + + + + + + + + + + + + + {{/temperatureDetail}} + + + + + + + + + + + + + + + + + + + + + + + + + 2 数据总览 + + + + + + + + + + + + + + + + + 2.1 + + + + + + + + 磁极引出线螺栓松动 + + + + + + + + + + + + + + + + + 磁极引出线螺栓松动角度(度)统计( + + + + + + + + {{reportTime}} + + + + + + + + + + + + + + + + + + + + + + + + + {{#boltTable}} + + + + + + + + + + + + + + + + {{?boltDetail}} + + + + + + + + + + + + + + + + + + {{_index+1}} + + + + + + + + + + + + + + + + {{zone}}# + + + + + + + + 磁极 + + + + + + + + {{position}} + + + + + + + + 号螺栓出现松动,松动角度为 + + + + + + + + {{value}} + + + + + + + + 度。 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + {{@file}} + + + + + + + + + + + + + + + + {{/boltDetail}} + + + + + + + + + + + + + + + + 2.2 + + + + + + + + 磁极引出线变形 + + + + + + + + + + + + + + + + + 磁极引出线变形( + + + + + + + + mm + + + + + + + + )统计( + + + + + + + + {{reportTime}} + + + + + + + + + + + + + + + + + + + + + + + + + {{#lineTable}} + + + + + + + + + + + + + + + + {{?lineDetail}} + + + + + + + + + + + + + + + + + + {{_index+1}} + + + + + + + + + + + + + + + + {{zone}}# + + + + + + + + 磁极 + + + + + + + + {{position}} + + + + + + + + 号引出线变形过大,变形量为 + + + + + + + + {{value}}mm + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + {{@file}} + + + + + + + + + + + + + + + + {{/lineDetail}} + + + + + + + + + + + + + + + + 2.3 + + + + + + + + 磁极开匝变化 + + + + + + + + + + + + + + + + + 磁极开匝变化 + + + + + + + + 统计( + + + + + + + + {{reportTime}} + + + + + + + + + + + + + + + + + + + + + + + + + {{#poleTable}} + + + + + + + + + + + + + + + + {{?poleDetail}} + + + + + + + + + + + + + + + + + + {{_index+1}} + + + + + + + + + + + + + + + + {{zone}}# + + + + + + + + 磁极 + + + + + + + + 开匝变化过大,变化量为 + + + + + + + + {{value}} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + {{@file}} + + + + + + + + + + + + + + + + {{/poleDetail}} + + + + + + + + + + + + + + + + 2.4 + + + + + + + + 检测点温度变化 + + + + + + + + + + + + + + + + + 检测点温度变化( + + + + + + + + + + + + + + + + )统计( + + + + + + + + {{reportTime}} + + + + + + + + + + + + + + + + + + + + + + + + + {{#temperatureTable}} + + + + + + + + + + + + + + + + {{?temperatureDetail}} + + + + + + + + + + + + + + + + + + {{_index+1}} + + + + + + + + + + + + + + + + 检测点温度变化过大,最大温度为 + + + + + + + + {{value}}℃ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + {{@file}} + + + + + + + + + + + + + + + + {{/temperatureDetail}} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + PAGE + + + + + + + + + + 3 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + PAGE + + + + + + + + + + + + + + + UEsDBBQABgAIAAAAIQDdK4tYbwEAABAFAAATAAgCW0NvbnRlbnRfVHlwZXNdLnhtbCCiBAIooAAC +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACs +VMtuwjAQvFfqP0S+Vomhh6qqCBz6OLZIpR9g4g2JcGzLu1D4+27MQy2iRAguWcXenRmvdzwYrRqT +LCFg7Wwu+llPJGALp2s7y8XX5C19FAmSsloZZyEXa0AxGt7eDCZrD5hwtcVcVET+SUosKmgUZs6D +5Z3ShUYR/4aZ9KqYqxnI+17vQRbOElhKqcUQw8ELlGphKHld8fJGSQCDInneJLZcuVDem7pQxErl +0uoDlnTLkHFlzMGq9njHMoQ8ytDu/E+wrfvg1oRaQzJWgd5VwzLkyshvF+ZT5+bZaZAjKl1Z1gVo +Vywa7kCGPoDSWAFQY7IYs0bVdqf7BH9MRhlD/8pC2vNF4A4dxPcNMn4vlxBhOgiR1gbwyqfdgHYx +VyqA/qTAzri6gN/YHTpITbkDMobLe/53/iLoKX6e23FwHtnBAc6/hZ1F2+rUMxAEqmFv0mPDvmdk +959PeOA2aN8XDfoIt4zv2fAHAAD//wMAUEsDBBQABgAIAAAAIQC1VTAj9QAAAEwCAAALAAgCX3Jl +bHMvLnJlbHMgogQCKKAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAjJLPTsMwDMbvSLxD5PvqbkgIoaW7TEi7IVQewCTuH7WNoyRA9/aEA4JK +Y9vR9ufPP1ve7uZpVB8cYi9Ow7ooQbEzYnvXanitn1YPoGIiZ2kUxxqOHGFX3d5sX3iklJti1/uo +souLGrqU/CNiNB1PFAvx7HKlkTBRymFo0ZMZqGXclOU9hr8eUC081cFqCAd7B6o++jz5src0TW94 +L+Z9YpdOjECeEzvLduVDZgupz9uomkLLSYMV85zTEcn7ImMDnibaXE/0/7Y4cSJLidBI4PM834pz +QOvrgS6faKn4vc484qeE4U1k+GHBxQ9UXwAAAP//AwBQSwMEFAAGAAgAAAAhAIE+lJf0AAAAugIA +ABoACAF4bC9fcmVscy93b3JrYm9vay54bWwucmVscyCiBAEooAABAAAAAAAAAAAAAAAAAAAAAAAA +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 +cHAueG1sUEsFBgAAAAAMAAwAEwMAAJMgAAAAAA== + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Sheet1!$B$1 + + + + 系列 1 + + + + + + + + + + Sheet1!$A$2:$A$5 + + + + 类别 1 + + + 类别 2 + + + 类别 3 + + + 类别 4 + + + + + + + Sheet1!$B$2:$B$5 + + General + + + 4.3 + + + 2.5 + + + 3.5 + + + 4.5 + + + + + + + + + + + + Sheet1!$C$1 + + + + 系列 2 + + + + + + + + + + Sheet1!$A$2:$A$5 + + + + 类别 1 + + + 类别 2 + + + 类别 3 + + + 类别 4 + + + + + + + Sheet1!$C$2:$C$5 + + General + + + 2.4 + + + 4.4000000000000004 + + + 1.8 + + + 2.8 + + + + + + + + + + + + Sheet1!$D$1 + + + + 系列 3 + + + + + + + + + + Sheet1!$A$2:$A$5 + + + + 类别 1 + + + 类别 2 + + + 类别 3 + + + 类别 4 + + + + + + + Sheet1!$D$2:$D$5 + + General + + + 2 + + + 2 + + + 3 + + + 5 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + iVBORw0KGgoAAAANSUhEUgAACj4AAAD5CAYAAACdg97MAAAACXBIWXMAAEzlAABM5QF1zvCVAAAK +TWlDQ1BQaG90b3Nob3AgSUNDIHByb2ZpbGUAAHjanVN3WJP3Fj7f92UPVkLY8LGXbIEAIiOsCMgQ +WaIQkgBhhBASQMWFiApWFBURnEhVxILVCkidiOKgKLhnQYqIWotVXDjuH9yntX167+3t+9f7vOec +5/zOec8PgBESJpHmomoAOVKFPDrYH49PSMTJvYACFUjgBCAQ5svCZwXFAADwA3l4fnSwP/wBr28A +AgBw1S4kEsfh/4O6UCZXACCRAOAiEucLAZBSAMguVMgUAMgYALBTs2QKAJQAAGx5fEIiAKoNAOz0 +ST4FANipk9wXANiiHKkIAI0BAJkoRyQCQLsAYFWBUiwCwMIAoKxAIi4EwK4BgFm2MkcCgL0FAHaO +WJAPQGAAgJlCLMwAIDgCAEMeE80DIEwDoDDSv+CpX3CFuEgBAMDLlc2XS9IzFLiV0Bp38vDg4iHi +wmyxQmEXKRBmCeQinJebIxNI5wNMzgwAABr50cH+OD+Q5+bk4eZm52zv9MWi/mvwbyI+IfHf/ryM +AgQAEE7P79pf5eXWA3DHAbB1v2upWwDaVgBo3/ldM9sJoFoK0Hr5i3k4/EAenqFQyDwdHAoLC+0l +YqG9MOOLPv8z4W/gi372/EAe/tt68ABxmkCZrcCjg/1xYW52rlKO58sEQjFu9+cj/seFf/2OKdHi +NLFcLBWK8ViJuFAiTcd5uVKRRCHJleIS6X8y8R+W/QmTdw0ArIZPwE62B7XLbMB+7gECiw5Y0nYA +QH7zLYwaC5EAEGc0Mnn3AACTv/mPQCsBAM2XpOMAALzoGFyolBdMxggAAESggSqwQQcMwRSswA6c +wR28wBcCYQZEQAwkwDwQQgbkgBwKoRiWQRlUwDrYBLWwAxqgEZrhELTBMTgN5+ASXIHrcBcGYBie +whi8hgkEQcgIE2EhOogRYo7YIs4IF5mOBCJhSDSSgKQg6YgUUSLFyHKkAqlCapFdSCPyLXIUOY1c +QPqQ28ggMor8irxHMZSBslED1AJ1QLmoHxqKxqBz0XQ0D12AlqJr0Rq0Hj2AtqKn0UvodXQAfYqO +Y4DRMQ5mjNlhXIyHRWCJWBomxxZj5Vg1Vo81Yx1YN3YVG8CeYe8IJAKLgBPsCF6EEMJsgpCQR1hM +WEOoJewjtBK6CFcJg4Qxwicik6hPtCV6EvnEeGI6sZBYRqwm7iEeIZ4lXicOE1+TSCQOyZLkTgoh +JZAySQtJa0jbSC2kU6Q+0hBpnEwm65Btyd7kCLKArCCXkbeQD5BPkvvJw+S3FDrFiOJMCaIkUqSU +Eko1ZT/lBKWfMkKZoKpRzame1AiqiDqfWkltoHZQL1OHqRM0dZolzZsWQ8ukLaPV0JppZ2n3aC/p +dLoJ3YMeRZfQl9Jr6Afp5+mD9HcMDYYNg8dIYigZaxl7GacYtxkvmUymBdOXmchUMNcyG5lnmA+Y +b1VYKvYqfBWRyhKVOpVWlX6V56pUVXNVP9V5qgtUq1UPq15WfaZGVbNQ46kJ1Bar1akdVbupNq7O +UndSj1DPUV+jvl/9gvpjDbKGhUaghkijVGO3xhmNIRbGMmXxWELWclYD6yxrmE1iW7L57Ex2Bfsb +di97TFNDc6pmrGaRZp3mcc0BDsax4PA52ZxKziHODc57LQMtPy2x1mqtZq1+rTfaetq+2mLtcu0W +7eva73VwnUCdLJ31Om0693UJuja6UbqFutt1z+o+02PreekJ9cr1Dund0Uf1bfSj9Rfq79bv0R83 +MDQINpAZbDE4Y/DMkGPoa5hpuNHwhOGoEctoupHEaKPRSaMnuCbuh2fjNXgXPmasbxxirDTeZdxr +PGFiaTLbpMSkxeS+Kc2Ua5pmutG003TMzMgs3KzYrMnsjjnVnGueYb7ZvNv8jYWlRZzFSos2i8eW +2pZ8ywWWTZb3rJhWPlZ5VvVW16xJ1lzrLOtt1ldsUBtXmwybOpvLtqitm63Edptt3xTiFI8p0in1 +U27aMez87ArsmuwG7Tn2YfYl9m32zx3MHBId1jt0O3xydHXMdmxwvOuk4TTDqcSpw+lXZxtnoXOd +8zUXpkuQyxKXdpcXU22niqdun3rLleUa7rrStdP1o5u7m9yt2W3U3cw9xX2r+00umxvJXcM970H0 +8PdY4nHM452nm6fC85DnL152Xlle+70eT7OcJp7WMG3I28Rb4L3Le2A6Pj1l+s7pAz7GPgKfep+H +vqa+It89viN+1n6Zfgf8nvs7+sv9j/i/4XnyFvFOBWABwQHlAb2BGoGzA2sDHwSZBKUHNQWNBbsG +Lww+FUIMCQ1ZH3KTb8AX8hv5YzPcZyya0RXKCJ0VWhv6MMwmTB7WEY6GzwjfEH5vpvlM6cy2CIjg +R2yIuB9pGZkX+X0UKSoyqi7qUbRTdHF09yzWrORZ+2e9jvGPqYy5O9tqtnJ2Z6xqbFJsY+ybuIC4 +qriBeIf4RfGXEnQTJAntieTE2MQ9ieNzAudsmjOc5JpUlnRjruXcorkX5unOy553PFk1WZB8OIWY +EpeyP+WDIEJQLxhP5aduTR0T8oSbhU9FvqKNolGxt7hKPJLmnVaV9jjdO31D+miGT0Z1xjMJT1Ir +eZEZkrkj801WRNberM/ZcdktOZSclJyjUg1plrQr1zC3KLdPZisrkw3keeZtyhuTh8r35CP5c/Pb +FWyFTNGjtFKuUA4WTC+oK3hbGFt4uEi9SFrUM99m/ur5IwuCFny9kLBQuLCz2Lh4WfHgIr9FuxYj +i1MXdy4xXVK6ZHhp8NJ9y2jLspb9UOJYUlXyannc8o5Sg9KlpUMrglc0lamUycturvRauWMVYZVk +Ve9ql9VbVn8qF5VfrHCsqK74sEa45uJXTl/VfPV5bdra3kq3yu3rSOuk626s91m/r0q9akHV0Ibw +Da0b8Y3lG19tSt50oXpq9Y7NtM3KzQM1YTXtW8y2rNvyoTaj9nqdf13LVv2tq7e+2Sba1r/dd3vz +DoMdFTve75TsvLUreFdrvUV99W7S7oLdjxpiG7q/5n7duEd3T8Wej3ulewf2Re/ranRvbNyvv7+y +CW1SNo0eSDpw5ZuAb9qb7Zp3tXBaKg7CQeXBJ9+mfHvjUOihzsPcw83fmX+39QjrSHkr0jq/dawt +o22gPaG97+iMo50dXh1Hvrf/fu8x42N1xzWPV56gnSg98fnkgpPjp2Snnp1OPz3Umdx590z8mWtd +UV29Z0PPnj8XdO5Mt1/3yfPe549d8Lxw9CL3Ytslt0utPa49R35w/eFIr1tv62X3y+1XPK509E3r +O9Hv03/6asDVc9f41y5dn3m978bsG7duJt0cuCW69fh29u0XdwruTNxdeo94r/y+2v3qB/oP6n+0 +/rFlwG3g+GDAYM/DWQ/vDgmHnv6U/9OH4dJHzEfVI0YjjY+dHx8bDRq98mTOk+GnsqcTz8p+Vv95 +63Or59/94vtLz1j82PAL+YvPv655qfNy76uprzrHI8cfvM55PfGm/K3O233vuO+638e9H5ko/ED+ +UPPR+mPHp9BP9z7nfP78L/eE8/sl0p8zAAAAIGNIUk0AAHolAACAgwAA+f8AAIDpAAB1MAAA6mAA +ADqYAAAXb5JfxUYAAMxNSURBVHja7N13nCRF+cfxz0WOnHMqJCMgFhkRJIMkyQICAgIiIjmXiFAI +IkiQpCICgkiWDAKSlCglOYciZziOfInfH9X3Yzn3dmdmu3u6Z77v12teHLuz1T1PV/d0dT/91KAv +vvgCEREREREREREREREREREREREREZE6GKwQiIiIiIiIiIiIiIiIiIiIiIiIiEhdKPFRRERERERE +RERERERERERERERERGpDiY8iIiIiIiIiIiIiIiIiIiIiIiIiUhtKfBQRERERERERERERERERERER +ERGR2lDio4iIiIiIiIiIiIiIiIiIiIiIiIjUhhIfRURERERERERERERERERERERERKQ2lPgoIiIi +IiIiIiIiIiIiIiIiIiIiIrWhxEcRERERERERERERERERERERERERqQ0lPoqIiIiIiIiIiIiIiIiI +iIiIiIhIbSjxUURERERERERERERERERERERERERqQ4mPIiIiIiIiIiIiIiIiIiIiIiIiIlIbSnwU +ERERERERERERERERERERERERkdpQ4qOIiIiIiIiIiIiIiIiIiIiIiIiI1IYSH0VERERERERERERE +RERERERERESkNpT4KCIiIiIiIiIiIiIiIiIiIiIiIiK1ocRHEREREREREREREREREREREREREakN +JT6KiIiIiIiIiIiIiIiIiIiIiIiISG0o8VFEREREREREREREREREREREREREakOJjyIiIiIiIiIi +IiIiIiIiIiIiIiJSG0p8FBEREREREREREREREREREREREZHaUOKjiIiIiIiIiIiIiIiIiIiIiIiI +iNSGEh9FREREREREREREREREREREREREpDaU+CgiIiIiIiIiIiIiIiIiIiIiIiIitaHERxERERER +ERERERERERERERERERGpDSU+ioiIiIiIiIiIiIiIiIiIiIiIiEhtDFUIuoexbggwAzAFMAIYnr1G +ZK/BwGjgs+y/E//7/18x+DGKqIiIiIiIiIiIiIiIiIiIiIiIiJRt0BdffKEo1JixbhAwBzBPj9fc +wEykJMcJ/50BmJr8qnyOB8aQEiE/AkYC72WvkT1eH2Q/ext4FXglBv+2tpyIiIiIiIiIiIiIiIiI +iIiIiIi0QomPNWCsGwzMByzS4zU/KclxLmCymn2k0cDrwCvAa9nrVeBl4BngmRj8KG15ERERERER +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 +0ONU4FDv7CdVTv8Y4KNKb/DODgT+WfLUIsBxwOXAH5hbNnkWcFdb31dOYtItmLfM9Cnxe+c8vguU +llw+uK3v9M6OBw6N81XJ8cCrJX+vBZwJXEQowdyjZL1c28H+tXsrjzUqfG5hQvnylo/WAnWXqDCd +5Ura5W3mzRC6ALAP8LvS9wG3eWcfqWPf/yfwacnfGyQm3aPaD3tnbwL6lDy1HHAYIRB3gZI+eax3 +dox2cyIiIiIiIiIiIiIiIiIiIiIi0ky652AepgFvEbLxreGdfaXlG7yzbwHrAncQstiVmgEMBDb3 +zvardqIxOPAQ2ggO9M4eRyhF/WqZlycCDwIbeWf39s5+2YHlP7jF3/28s1+VPEYxb4nmjROTrl3F +8g0CrmzjPRMIAagXAaPLvGU0cDGwqnf2gmbo8N7ZqwhZQ18r8/JY4B9UEVzayXmYTAgwLXVGLPte +rd8CfwNGlHntXWBf7+z12sWJiIiIiIiIiIiIiIiIiIiIiEizaWSp63OBS8o8P9E7O7OtD3tnRwK/ +TUy6AJAAyxCCID/yzo6r8NEVgTkBZVNbfOegxKRLMDcAdHor074FuCUx6XeA78V2897Z0RWmexVw +U8nfk1p539GUZCH0zn5V5j17MjeTH4RS1ABPMTfrJIRAzFLHAKeW+Vzpsk0GTkhMejLwfUKGyQnA ++97ZSR1YzztW2a9Ks1jeBlQTtFq6fN8vWa+VTCqzzAOAAYlJlwOWJ2TyHAe8VUVfbNnmUyq8dwvm +Zs2c3eK1a4A7W/ncrcxborrceptJKJF9XmLSVQhZH7sDn3pn39euTURERERERERERERERERERERE +mlW32bNnqxVEREREREREREREREREREREREREpBC6qwlEREREREREREREREREREREREREpCgU+Cgi +IiIiIiIiIiIiIiIiIiIiIiIihaHARxEREREREREREREREREREREREREpDAU+ioiIiIiIiIiIiIiI +iIiIiIiIiEhhKPBRRERERERERERERERERERERERERApDgY8iIiIiIiIiIiIiIiIiIiIiIiIiUhgK +fBQRERERERERERERERERERERERGRwlDgo4iIiIiIiIiIiIiIiIiIiIiIiIgUhgIfRURERERERERE +RERERERERERERKQwFPgoIiIiIiIiIiIiIiIiIiIiIiIiIoWhwEcRERERERERERERERERERERERER +KQwFPoqIiIiIiIiIiIiIiIiIiIiIiIhIYSjwUUREREREREREREREREREREREREQKQ4GPIiIiIiIi +IiIiIiIiIiIiIiIiIlIYCnwUERERERERERERERERERERERERkcJQ4KOIiIiIiIiIiIiIiIiIiIiI +iIiIFIYCH0VERERERERERERERERERERERESkMBT4KCIiIiIiIiIiIiIiIiIiIiIiIiKFocBHERER +ERERERERERERERERERERESkMBT6KiIiIiIiIiIiIiIiIiIiIiIiISGEo8FFERERERERERERERERE +RERERERECkOBjyIiIiIiIiIiIiIiIiIiIiIiIiJSGAp8FBEREREREREREREREREREREREZHCUOCj +iIiIiIiIiIiIiIiIiIiIiIiIiBSGAh9FREREREREREREREREREREREREpDD+fwDvgih3sdYjsAAA +AABJRU5ErkJggg== + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Sheet1!$B$1 + + + + 系列 1 + + + + + + + + + + Sheet1!$A$2:$A$5 + + + + 类别 1 + + + 类别 2 + + + 类别 3 + + + 类别 4 + + + + + + + Sheet1!$B$2:$B$5 + + General + + + 4.3 + + + 2.5 + + + 3.5 + + + 4.5 + + + + + + + + + + + + Sheet1!$C$1 + + + + 系列 2 + + + + + + + + + + Sheet1!$A$2:$A$5 + + + + 类别 1 + + + 类别 2 + + + 类别 3 + + + 类别 4 + + + + + + + Sheet1!$C$2:$C$5 + + General + + + 2.4 + + + 4.4000000000000004 + + + 1.8 + + + 2.8 + + + + + + + + + + + + Sheet1!$D$1 + + + + 系列 3 + + + + + + + + + + Sheet1!$A$2:$A$5 + + + + 类别 1 + + + 类别 2 + + + 类别 3 + + + 类别 4 + + + + + + + Sheet1!$D$2:$D$5 + + General + + + 2 + + + 2 + + + 3 + + + 5 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + UEsDBBQABgAIAAAAIQDdK4tYbwEAABAFAAATAAgCW0NvbnRlbnRfVHlwZXNdLnhtbCCiBAIooAAC +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACs +VMtuwjAQvFfqP0S+Vomhh6qqCBz6OLZIpR9g4g2JcGzLu1D4+27MQy2iRAguWcXenRmvdzwYrRqT +LCFg7Wwu+llPJGALp2s7y8XX5C19FAmSsloZZyEXa0AxGt7eDCZrD5hwtcVcVET+SUosKmgUZs6D +5Z3ShUYR/4aZ9KqYqxnI+17vQRbOElhKqcUQw8ELlGphKHld8fJGSQCDInneJLZcuVDem7pQxErl +0uoDlnTLkHFlzMGq9njHMoQ8ytDu/E+wrfvg1oRaQzJWgd5VwzLkyshvF+ZT5+bZaZAjKl1Z1gVo +Vywa7kCGPoDSWAFQY7IYs0bVdqf7BH9MRhlD/8pC2vNF4A4dxPcNMn4vlxBhOgiR1gbwyqfdgHYx +VyqA/qTAzri6gN/YHTpITbkDMobLe/53/iLoKX6e23FwHtnBAc6/hZ1F2+rUMxAEqmFv0mPDvmdk +959PeOA2aN8XDfoIt4zv2fAHAAD//wMAUEsDBBQABgAIAAAAIQC1VTAj9QAAAEwCAAALAAgCX3Jl +bHMvLnJlbHMgogQCKKAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAjJLPTsMwDMbvSLxD5PvqbkgIoaW7TEi7IVQewCTuH7WNoyRA9/aEA4JK +Y9vR9ufPP1ve7uZpVB8cYi9Ow7ooQbEzYnvXanitn1YPoGIiZ2kUxxqOHGFX3d5sX3iklJti1/uo +souLGrqU/CNiNB1PFAvx7HKlkTBRymFo0ZMZqGXclOU9hr8eUC081cFqCAd7B6o++jz5src0TW94 +L+Z9YpdOjECeEzvLduVDZgupz9uomkLLSYMV85zTEcn7ImMDnibaXE/0/7Y4cSJLidBI4PM834pz +QOvrgS6faKn4vc484qeE4U1k+GHBxQ9UXwAAAP//AwBQSwMEFAAGAAgAAAAhAIE+lJf0AAAAugIA +ABoACAF4bC9fcmVscy93b3JrYm9vay54bWwucmVscyCiBAEooAABAAAAAAAAAAAAAAAAAAAAAAAA +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 +cHAueG1sUEsFBgAAAAAMAAwAEwMAAJMgAAAAAA== + + + + + + + + + + + + + + + + + + + + + + + + + + + + 图表标题 + + + + + + + + + + + + + + + + + + Sheet1!$B$1 + + + + 系列 1 + + + + + + + + + + Sheet1!$A$2:$A$5 + + + + 类别 1 + + + 类别 2 + + + 类别 3 + + + 类别 4 + + + + + + + Sheet1!$B$2:$B$5 + + General + + + 4.3 + + + 2.5 + + + 3.5 + + + 4.5 + + + + + + + + + + + + Sheet1!$C$1 + + + + 系列 2 + + + + + + + + + + Sheet1!$A$2:$A$5 + + + + 类别 1 + + + 类别 2 + + + 类别 3 + + + 类别 4 + + + + + + + Sheet1!$C$2:$C$5 + + General + + + 2.4 + + + 4.4000000000000004 + + + 1.8 + + + 2.8 + + + + + + + + + + + + Sheet1!$D$1 + + + + 系列 3 + + + + + + + + + + Sheet1!$A$2:$A$5 + + + + 类别 1 + + + 类别 2 + + + 类别 3 + + + 类别 4 + + + + + + + Sheet1!$D$2:$D$5 + + General + + + 2 + + + 2 + + + 3 + + + 5 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Sheet1!$B$1 + + + + 系列 1 + + + + + + + + + + Sheet1!$A$2:$A$5 + + + + 类别 1 + + + 类别 2 + + + 类别 3 + + + 类别 4 + + + + + + + Sheet1!$B$2:$B$5 + + General + + + 4.3 + + + 2.5 + + + 3.5 + + + 4.5 + + + + + + + + + + + + Sheet1!$C$1 + + + + 系列 2 + + + + + + + + + + Sheet1!$A$2:$A$5 + + + + 类别 1 + + + 类别 2 + + + 类别 3 + + + 类别 4 + + + + + + + Sheet1!$C$2:$C$5 + + General + + + 2.4 + + + 4.4000000000000004 + + + 1.8 + + + 2.8 + + + + + + + + + + + + Sheet1!$D$1 + + + + 系列 3 + + + + + + + + + + Sheet1!$A$2:$A$5 + + + + 类别 1 + + + 类别 2 + + + 类别 3 + + + 类别 4 + + + + + + + Sheet1!$D$2:$D$5 + + General + + + 2 + + + 2 + + + 3 + + + 5 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + UEsDBBQABgAIAAAAIQDdK4tYbwEAABAFAAATAAgCW0NvbnRlbnRfVHlwZXNdLnhtbCCiBAIooAAC +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACs +VMtuwjAQvFfqP0S+Vomhh6qqCBz6OLZIpR9g4g2JcGzLu1D4+27MQy2iRAguWcXenRmvdzwYrRqT +LCFg7Wwu+llPJGALp2s7y8XX5C19FAmSsloZZyEXa0AxGt7eDCZrD5hwtcVcVET+SUosKmgUZs6D +5Z3ShUYR/4aZ9KqYqxnI+17vQRbOElhKqcUQw8ELlGphKHld8fJGSQCDInneJLZcuVDem7pQxErl +0uoDlnTLkHFlzMGq9njHMoQ8ytDu/E+wrfvg1oRaQzJWgd5VwzLkyshvF+ZT5+bZaZAjKl1Z1gVo +Vywa7kCGPoDSWAFQY7IYs0bVdqf7BH9MRhlD/8pC2vNF4A4dxPcNMn4vlxBhOgiR1gbwyqfdgHYx +VyqA/qTAzri6gN/YHTpITbkDMobLe/53/iLoKX6e23FwHtnBAc6/hZ1F2+rUMxAEqmFv0mPDvmdk +959PeOA2aN8XDfoIt4zv2fAHAAD//wMAUEsDBBQABgAIAAAAIQC1VTAj9QAAAEwCAAALAAgCX3Jl +bHMvLnJlbHMgogQCKKAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAjJLPTsMwDMbvSLxD5PvqbkgIoaW7TEi7IVQewCTuH7WNoyRA9/aEA4JK +Y9vR9ufPP1ve7uZpVB8cYi9Ow7ooQbEzYnvXanitn1YPoGIiZ2kUxxqOHGFX3d5sX3iklJti1/uo +souLGrqU/CNiNB1PFAvx7HKlkTBRymFo0ZMZqGXclOU9hr8eUC081cFqCAd7B6o++jz5src0TW94 +L+Z9YpdOjECeEzvLduVDZgupz9uomkLLSYMV85zTEcn7ImMDnibaXE/0/7Y4cSJLidBI4PM834pz +QOvrgS6faKn4vc484qeE4U1k+GHBxQ9UXwAAAP//AwBQSwMEFAAGAAgAAAAhAIE+lJf0AAAAugIA +ABoACAF4bC9fcmVscy93b3JrYm9vay54bWwucmVscyCiBAEooAABAAAAAAAAAAAAAAAAAAAAAAAA +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 +cHAueG1sUEsFBgAAAAAMAAwAEwMAAJMgAAAAAA== + + + UEsDBBQABgAIAAAAIQDdK4tYbwEAABAFAAATAAgCW0NvbnRlbnRfVHlwZXNdLnhtbCCiBAIooAAC +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACs +VMtuwjAQvFfqP0S+Vomhh6qqCBz6OLZIpR9g4g2JcGzLu1D4+27MQy2iRAguWcXenRmvdzwYrRqT +LCFg7Wwu+llPJGALp2s7y8XX5C19FAmSsloZZyEXa0AxGt7eDCZrD5hwtcVcVET+SUosKmgUZs6D +5Z3ShUYR/4aZ9KqYqxnI+17vQRbOElhKqcUQw8ELlGphKHld8fJGSQCDInneJLZcuVDem7pQxErl +0uoDlnTLkHFlzMGq9njHMoQ8ytDu/E+wrfvg1oRaQzJWgd5VwzLkyshvF+ZT5+bZaZAjKl1Z1gVo +Vywa7kCGPoDSWAFQY7IYs0bVdqf7BH9MRhlD/8pC2vNF4A4dxPcNMn4vlxBhOgiR1gbwyqfdgHYx +VyqA/qTAzri6gN/YHTpITbkDMobLe/53/iLoKX6e23FwHtnBAc6/hZ1F2+rUMxAEqmFv0mPDvmdk +959PeOA2aN8XDfoIt4zv2fAHAAD//wMAUEsDBBQABgAIAAAAIQC1VTAj9QAAAEwCAAALAAgCX3Jl +bHMvLnJlbHMgogQCKKAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAjJLPTsMwDMbvSLxD5PvqbkgIoaW7TEi7IVQewCTuH7WNoyRA9/aEA4JK +Y9vR9ufPP1ve7uZpVB8cYi9Ow7ooQbEzYnvXanitn1YPoGIiZ2kUxxqOHGFX3d5sX3iklJti1/uo +souLGrqU/CNiNB1PFAvx7HKlkTBRymFo0ZMZqGXclOU9hr8eUC081cFqCAd7B6o++jz5src0TW94 +L+Z9YpdOjECeEzvLduVDZgupz9uomkLLSYMV85zTEcn7ImMDnibaXE/0/7Y4cSJLidBI4PM834pz +QOvrgS6faKn4vc484qeE4U1k+GHBxQ9UXwAAAP//AwBQSwMEFAAGAAgAAAAhAIE+lJf0AAAAugIA +ABoACAF4bC9fcmVscy93b3JrYm9vay54bWwucmVscyCiBAEooAABAAAAAAAAAAAAAAAAAAAAAAAA +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 +cHAueG1sUEsFBgAAAAAMAAwAEwMAAJMgAAAAAA== + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 2052-11.1.0.10314 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + hp + CCC + 42 + 2012-08-14T00:53:00Z + 2021-03-29T16:08:00Z + 2021-04-05T13:31:00Z + + + + + + + + 56 + 4 + 154 + 880 + Microsoft Office Word + 0 + 7 + 2 + false + Hewlett-Packard Company + false + 1032 + false + false + 14.0000 + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/bolt-dao/pom.xml b/bolt-dao/pom.xml new file mode 100644 index 0000000..e68d3ba --- /dev/null +++ b/bolt-dao/pom.xml @@ -0,0 +1,55 @@ + + + + bolt-server + com.jiluo.bolt + 0.0.1-SNAPSHOT + + 4.0.0 + + bolt-dao + + + + + com.baomidou + mybatis-plus-boot-starter + + + com.baomidou + mybatis-plus-generator + + + + com.github.yulichang + mybatis-plus-join + + + + + mysql + mysql-connector-java + + + org.springframework.boot + spring-boot-starter-jdbc + + + + org.springframework.boot + spring-boot-starter-validation + + + + javax.validation + validation-api + + + org.hibernate.validator + hibernate-validator + + + + \ No newline at end of file diff --git a/bolt-dao/src/main/java/com/jiluo/bolt/config/DateConfig.java b/bolt-dao/src/main/java/com/jiluo/bolt/config/DateConfig.java new file mode 100644 index 0000000..c05e731 --- /dev/null +++ b/bolt-dao/src/main/java/com/jiluo/bolt/config/DateConfig.java @@ -0,0 +1,38 @@ +package com.jiluo.bolt.config; + +import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler; +import org.apache.ibatis.reflection.MetaObject; +import org.springframework.stereotype.Component; + +import java.util.Date; + +/** + * Created with IntelliJ IDEA. + * + * @Author: fy + * @Date: 2023/04/17/15:30 + * @Description:自动生成创建和修改日期 + */ +@Component +public class DateConfig implements MetaObjectHandler { + + /** + * 使用mp做添加操作时候,这个方法执行 + * @param metaObject + */ + @Override + public void insertFill(MetaObject metaObject) { + //设置属性值 + this.setFieldValByName("gmtCreate",new Date(),metaObject); + this.setFieldValByName("gmtModify",new Date(),metaObject); + } + + /** + * 使用mp做修改操作时候,这个方法执行 + * @param metaObject + */ + @Override + public void updateFill(MetaObject metaObject) { + this.setFieldValByName("gmtModify",new Date(),metaObject); + } +} diff --git a/bolt-dao/src/main/java/com/jiluo/bolt/config/MPConfig.java b/bolt-dao/src/main/java/com/jiluo/bolt/config/MPConfig.java new file mode 100644 index 0000000..40a01f3 --- /dev/null +++ b/bolt-dao/src/main/java/com/jiluo/bolt/config/MPConfig.java @@ -0,0 +1,32 @@ +package com.jiluo.bolt.config; + +import com.baomidou.mybatisplus.annotation.DbType; +import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor; +import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor; +import org.mybatis.spring.annotation.MapperScan; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +/** + * Created with IntelliJ IDEA. + * + * @Author: fy + * @Date: 2023/04/20/9:34 + * @Description: + */ +@Configuration +@MapperScan("com.jiluo.blot.mapper") +public class MPConfig { + /** + * 分页插件 + */ + // 最新版 + @Bean + public MybatisPlusInterceptor mybatisPlusInterceptor() { + MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor(); + interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.H2)); + return interceptor; + } + + +} diff --git a/bolt-dao/src/main/java/com/jiluo/bolt/entity/BaseEntity.java b/bolt-dao/src/main/java/com/jiluo/bolt/entity/BaseEntity.java new file mode 100644 index 0000000..926ff1b --- /dev/null +++ b/bolt-dao/src/main/java/com/jiluo/bolt/entity/BaseEntity.java @@ -0,0 +1,38 @@ +package com.jiluo.bolt.entity; + +import com.baomidou.mybatisplus.annotation.FieldFill; +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.fasterxml.jackson.annotation.JsonFormat; +import com.fasterxml.jackson.annotation.JsonIgnore; +import lombok.Data; + + +import java.io.Serializable; +import java.util.Date; + +/** + * Created with IntelliJ IDEA. + * + * @Author: fy + * @Date: 2023/04/11/19:03 + * @Description: + */ +@Data +public class BaseEntity implements Serializable { + + private static final long serialVersionUID = -4631068394422882064L; + + @JsonIgnore + @TableId(value="id",type= IdType.AUTO) + private Integer id; + + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @TableField(fill = FieldFill.INSERT) + private Date gmtCreate; + + @JsonIgnore + @TableField(fill = FieldFill.INSERT_UPDATE) + private Date gmtModify; +} diff --git a/bolt-dao/src/main/java/com/jiluo/bolt/entity/po/Alarm.java b/bolt-dao/src/main/java/com/jiluo/bolt/entity/po/Alarm.java new file mode 100644 index 0000000..0135ebd --- /dev/null +++ b/bolt-dao/src/main/java/com/jiluo/bolt/entity/po/Alarm.java @@ -0,0 +1,31 @@ +package com.jiluo.bolt.entity.po; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.jiluo.bolt.entity.BaseEntity; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; +import com.baomidou.mybatisplus.annotation.TableName; +/** + * 告警信息表(Alarm)表实体类 + * + * @author Fangy + * @since 2023-05-04 17:15:44 + */ + @Data + @EqualsAndHashCode(callSuper = true) + @Accessors(chain = true) + @TableName(value = "alarm") + public class Alarm extends BaseEntity { + private static final long serialVersionUID = 1L; + + @TableField("biz_id") + private String alarmId; + + @TableField("type") + private Integer type; + + @TableField("content") + private String content; + + } diff --git a/bolt-dao/src/main/java/com/jiluo/bolt/entity/po/Algorithm.java b/bolt-dao/src/main/java/com/jiluo/bolt/entity/po/Algorithm.java new file mode 100644 index 0000000..b843121 --- /dev/null +++ b/bolt-dao/src/main/java/com/jiluo/bolt/entity/po/Algorithm.java @@ -0,0 +1,45 @@ +package com.jiluo.bolt.entity.po; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.jiluo.bolt.entity.BaseEntity; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; +import com.baomidou.mybatisplus.annotation.TableName; +/** + * 算法信息表(Algorithm)表实体类 + * + * @author Fangy + * @since 2023-05-05 10:15:05 + */ + @Data + @EqualsAndHashCode(callSuper = true) + @Accessors(chain = true) + @TableName(value = "algorithm") + public class Algorithm extends BaseEntity { + private static final long serialVersionUID = 1L; + + @TableField("biz_id") + private String bizId; + + @TableField("algorithm") + private String algorithm; + + @TableField("attribute") + private String attribute; + + @TableField("power_station") + private String powerStation; + + @TableField("motor_group") + private String motorGroup; + + @TableField("point") + private String point; + + @TableField("version") + private String version; + + @TableField("config") + private String config; + } diff --git a/bolt-dao/src/main/java/com/jiluo/bolt/entity/po/AlgorithmConfig.java b/bolt-dao/src/main/java/com/jiluo/bolt/entity/po/AlgorithmConfig.java new file mode 100644 index 0000000..0c5a4aa --- /dev/null +++ b/bolt-dao/src/main/java/com/jiluo/bolt/entity/po/AlgorithmConfig.java @@ -0,0 +1,46 @@ +package com.jiluo.bolt.entity.po; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.jiluo.bolt.entity.BaseEntity; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; +import com.baomidou.mybatisplus.annotation.TableName; + +import java.util.List; + +/** + * (AlgorithmConfig)表实体类 + * + * @author Fangy + * @since 2023-05-08 17:46:48 + */ + @Data + @EqualsAndHashCode(callSuper = true) + @Accessors(chain = true) + @TableName(value = "algorithm_config") + public class AlgorithmConfig extends BaseEntity { + private static final long serialVersionUID = 1L; + + @TableField("biz_id") + private String bizId; + + @TableField("name") + private String name; + + @TableField("bolt_threshold") + private Double boltThreshold; + + @TableField("line_threshold") + private Double lineThreshold; + + @TableField("daily_auto_detection_time") + private String dailyAutoDetectionTime; + + @TableField("delay_detect") + private Integer delayDetect; + + @TableField(exist = false) + private List pointIdList; + + } diff --git a/bolt-dao/src/main/java/com/jiluo/bolt/entity/po/AlgorithmTemplete.java b/bolt-dao/src/main/java/com/jiluo/bolt/entity/po/AlgorithmTemplete.java new file mode 100644 index 0000000..6a5f8ad --- /dev/null +++ b/bolt-dao/src/main/java/com/jiluo/bolt/entity/po/AlgorithmTemplete.java @@ -0,0 +1,41 @@ +package com.jiluo.bolt.entity.po; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.jiluo.bolt.entity.BaseEntity; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; +import com.baomidou.mybatisplus.annotation.TableName; +/** + * (AlgorithmTemplete)表实体类 + * + * @author Fangy + * @since 2023-05-05 09:28:26 + */ + @Data + @EqualsAndHashCode(callSuper = true) + @Accessors(chain = true) + @TableName(value = "algorithm_templete") + public class AlgorithmTemplete extends BaseEntity { + private static final long serialVersionUID = 1L; + + + @TableField("biz_id") + private String bizId; + + @TableField("source") + private String source; + + @TableField("name") + private String name; + + @TableField("drive") + private String drive; + + @TableField("version") + private String version; + + @TableField("config") + private String config; + + } diff --git a/bolt-dao/src/main/java/com/jiluo/bolt/entity/po/Config.java b/bolt-dao/src/main/java/com/jiluo/bolt/entity/po/Config.java new file mode 100644 index 0000000..dca8d5b --- /dev/null +++ b/bolt-dao/src/main/java/com/jiluo/bolt/entity/po/Config.java @@ -0,0 +1,37 @@ +package com.jiluo.bolt.entity.po; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.jiluo.bolt.entity.BaseEntity; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; +import com.baomidou.mybatisplus.annotation.TableName; +/** + * 系统配置表(Config)表实体类 + * + * @author Fangy + * @since 2023-05-05 09:28:27 + */ + @Data + @EqualsAndHashCode(callSuper = true) + @Accessors(chain = true) + @TableName(value = "config") + public class Config extends BaseEntity { + private static final long serialVersionUID = 1L; + + @TableField("biz_id") + private String configId; + + @TableField("value") + private String value; + + @TableField("description") + private String description; + + @TableField("category") + private String category; + + @TableField("type") + private String type; + + } diff --git a/bolt-dao/src/main/java/com/jiluo/bolt/entity/po/Defect.java b/bolt-dao/src/main/java/com/jiluo/bolt/entity/po/Defect.java new file mode 100644 index 0000000..da2972b --- /dev/null +++ b/bolt-dao/src/main/java/com/jiluo/bolt/entity/po/Defect.java @@ -0,0 +1,64 @@ +package com.jiluo.bolt.entity.po; + + +import com.baomidou.mybatisplus.annotation.TableField; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.jiluo.bolt.entity.BaseEntity; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; +import com.baomidou.mybatisplus.annotation.TableName; +/** + * 检测结果表(Defect)表实体类 + * + * @author Fangy + * @since 2023-05-05 09:28:27 + */ + @Data + @EqualsAndHashCode(callSuper = true) + @Accessors(chain = true) + @TableName(value = "defect") + @JsonInclude(JsonInclude.Include.NON_EMPTY) + public class Defect extends BaseEntity { + private static final long serialVersionUID = 1L; + + @TableField("biz_id") + private String bizId; + + @TableField("power_station") + private String powerStation; + + @TableField("motor_group") + private String motorGroup; + + @TableField("point") + private String point; + + @TableField("job") + private String job; + + @TableField("device") + private String device; + + @TableField("type") + private String type; + + @TableField("zone") + private Integer zone; + + @TableField("position") + private Integer position; + + @TableField("value") + private Integer value; + + @TableField("data") + private String data; + + @TableField("alarm") + private Integer alarm; + + @TableField("status") + private Integer status; + + } diff --git a/bolt-dao/src/main/java/com/jiluo/bolt/entity/po/Detect.java b/bolt-dao/src/main/java/com/jiluo/bolt/entity/po/Detect.java new file mode 100644 index 0000000..09b4cfe --- /dev/null +++ b/bolt-dao/src/main/java/com/jiluo/bolt/entity/po/Detect.java @@ -0,0 +1,46 @@ +package com.jiluo.bolt.entity.po; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.jiluo.bolt.entity.BaseEntity; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; +import com.baomidou.mybatisplus.annotation.TableName; +/** + * 检测过程表(Detect)表实体类 + * + * @author Fangy + * @since 2023-05-05 09:28:27 + */ + @Data + @EqualsAndHashCode(callSuper = true) + @Accessors(chain = true) + @TableName(value = "detect") + public class Detect extends BaseEntity { + private static final long serialVersionUID = 1L; + + @TableField("biz_id") + private String bizId; + + @TableField("power_station") + private String powerStation; + + @TableField("motor_group") + private String motorGroup; + + @TableField("point") + private String point; + + @TableField("job") + private String job; + + @TableField("zone") + private Integer zone; + + @TableField("data") + private String data; + + @TableField("device") + private String device; + + } diff --git a/bolt-dao/src/main/java/com/jiluo/bolt/entity/po/Device.java b/bolt-dao/src/main/java/com/jiluo/bolt/entity/po/Device.java new file mode 100644 index 0000000..d43143c --- /dev/null +++ b/bolt-dao/src/main/java/com/jiluo/bolt/entity/po/Device.java @@ -0,0 +1,60 @@ +package com.jiluo.bolt.entity.po; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.jiluo.bolt.entity.BaseEntity; +import lombok.*; +import lombok.experimental.Accessors; +import com.baomidou.mybatisplus.annotation.TableName; +/** + * 设备信息表(Device)表实体类 + * + * @author Fangy + * @since 2023-05-05 09:28:27 + */ + @Data + @Builder + @NoArgsConstructor + @AllArgsConstructor + @EqualsAndHashCode(callSuper = true) + @Accessors(chain = true) + @TableName(value = "device") + public class Device extends BaseEntity { + private static final long serialVersionUID = 1L; + + @TableField("biz_id") + private String deviceId; + + @TableField("type") + private String type; + + @TableField("name") + private String name; + + @TableField("power_station") + private String powerStationId; + + @TableField("product") + private String product; + + @TableField("motor_group") + private String motorGroupId; + + @TableField("point") + private String pointId; + + @TableField("status") + private Integer status; + + @JsonIgnore + @TableField("temp_threshold") + private String tempThreshold; + + @JsonIgnore + @TableField("config") + private String config; + + @TableField("vender") + private String vender; + + } diff --git a/bolt-dao/src/main/java/com/jiluo/bolt/entity/po/DeviceTemplete.java b/bolt-dao/src/main/java/com/jiluo/bolt/entity/po/DeviceTemplete.java new file mode 100644 index 0000000..5d74f34 --- /dev/null +++ b/bolt-dao/src/main/java/com/jiluo/bolt/entity/po/DeviceTemplete.java @@ -0,0 +1,34 @@ +package com.jiluo.bolt.entity.po; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.jiluo.bolt.entity.BaseEntity; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; +import com.baomidou.mybatisplus.annotation.TableName; +/** + * (DeviceTemplete)表实体类 + * + * @author Fangy + * @since 2023-05-05 09:28:27 + */ + @Data + @EqualsAndHashCode(callSuper = true) + @Accessors(chain = true) + @TableName(value = "device_templete") + public class DeviceTemplete extends BaseEntity { + private static final long serialVersionUID = 1L; + + @TableField("biz_id") + private String bizId; + + @TableField("vender") + private String vender; + + @TableField("drive") + private String drive; + + @TableField("config") + private String config; + + } diff --git a/bolt-dao/src/main/java/com/jiluo/bolt/entity/po/Job.java b/bolt-dao/src/main/java/com/jiluo/bolt/entity/po/Job.java new file mode 100644 index 0000000..2f8fd8b --- /dev/null +++ b/bolt-dao/src/main/java/com/jiluo/bolt/entity/po/Job.java @@ -0,0 +1,60 @@ +package com.jiluo.bolt.entity.po; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.jiluo.bolt.entity.BaseEntity; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; +import com.baomidou.mybatisplus.annotation.TableName; +/** + * 检测任务表(Job)表实体类 + * + * @author Fangy + * @since 2023-05-11 11:04:59 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@Accessors(chain = true) +@TableName(value = "job") +public class Job extends BaseEntity { + private static final long serialVersionUID = 1L; + + @TableField("biz_id") + private String jobId; + + @TableField("power_station") + private String powerStation; + + @TableField("motor_group") + private String motorGroup; + + @TableField("point") + private String point; + + @TableField("product") + private String product; + + @TableField("type") + private String type; + + @TableField("name") + private String name; + + @TableField("description") + private String description; + + @TableField("attribute") + private String attribute; + + @JsonIgnore + @TableField("config") + private String config; + + @TableField("operator") + private String operator; + + @TableField("status") + private Integer status; + +} diff --git a/bolt-dao/src/main/java/com/jiluo/bolt/entity/po/MotorGroup.java b/bolt-dao/src/main/java/com/jiluo/bolt/entity/po/MotorGroup.java new file mode 100644 index 0000000..95b0759 --- /dev/null +++ b/bolt-dao/src/main/java/com/jiluo/bolt/entity/po/MotorGroup.java @@ -0,0 +1,41 @@ +package com.jiluo.bolt.entity.po; + +import java.util.List; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.jiluo.bolt.entity.BaseEntity; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; +import com.baomidou.mybatisplus.annotation.TableName; +/** + * 机组信息表(MotorGroup)表实体类 + * + * @author Fangy + * @since 2023-05-05 09:28:27 + */ + @Data + @EqualsAndHashCode(callSuper = true) + @Accessors(chain = true) + @TableName(value = "motor_group") + public class MotorGroup extends BaseEntity { + private static final long serialVersionUID = 1L; + + @TableField("biz_id") + private String motorGroupId; + + @TableField("name") + private String name; + + @TableField("contact") + private String contact; + + @TableField("phone") + private String phone; + + @TableField("power_station") + private String powerStation; + + @TableField(exist = false) + private List pointList; + } diff --git a/bolt-dao/src/main/java/com/jiluo/bolt/entity/po/Point.java b/bolt-dao/src/main/java/com/jiluo/bolt/entity/po/Point.java new file mode 100644 index 0000000..12c1118 --- /dev/null +++ b/bolt-dao/src/main/java/com/jiluo/bolt/entity/po/Point.java @@ -0,0 +1,73 @@ +package com.jiluo.bolt.entity.po; + +import java.util.Date; +import com.baomidou.mybatisplus.annotation.TableField; +import com.fasterxml.jackson.annotation.JsonFormat; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.jiluo.bolt.entity.BaseEntity; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; +import com.baomidou.mybatisplus.annotation.TableName; +/** + * 检测点表(Point)表实体类 + * + * @author Fangy + * @since 2023-05-05 09:28:27 + */ + @Data + @EqualsAndHashCode(callSuper = true) + @Accessors(chain = true) + @TableName(value = "point") + public class Point extends BaseEntity { + private static final long serialVersionUID = 1L; + + @TableField("biz_id") + private String pointId; + + @TableField("name") + private String name; + + @TableField("pole_num") + private Integer poleNum; + + @TableField("manual_time") + private Integer manualTime; + + @TableField("automatic_time") + private Integer automaticTime; + + @TableField("enable_detect") + private Integer enableDetect; + + @TableField("power_station") + private String powerStation; + + @TableField("motor_group") + private String motorGroup; + + @TableField("bolt_detect") + private Integer boltDetect; + + @TableField("line_detect") + private Integer lineDetect; + + @TableField("pole_open_detect") + private Integer poleOpenDetect; + + @TableField("point_temp_detect") + private Integer pointTempDetect; + + @TableField("status") + private Integer status; + + + @TableField("gmt_reset") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8") + private Date gmtReset; + + @JsonIgnore + @TableField("config") + private String config; + + } diff --git a/bolt-dao/src/main/java/com/jiluo/bolt/entity/po/PowerStation.java b/bolt-dao/src/main/java/com/jiluo/bolt/entity/po/PowerStation.java new file mode 100644 index 0000000..5b70b19 --- /dev/null +++ b/bolt-dao/src/main/java/com/jiluo/bolt/entity/po/PowerStation.java @@ -0,0 +1,45 @@ +package com.jiluo.bolt.entity.po; + +import java.util.List; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.jiluo.bolt.entity.BaseEntity; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; +import com.baomidou.mybatisplus.annotation.TableName; +/** + * 电站表(PowerStation)表实体类 + * + * @author Fangy + * @since 2023-05-05 09:28:27 + */ + @Data + @EqualsAndHashCode(callSuper = true) + @Accessors(chain = true) + @TableName(value = "power_station") + public class PowerStation extends BaseEntity { + private static final long serialVersionUID = 1L; + + @TableField("biz_id") + private String powerStationId; + + @TableField("name") + private String name; + + @TableField("address") + private String address; + + @TableField("contact") + private String contact; + + @TableField("phone") + private String phone; + + @TableField("introduction") + private String introduction; + + @TableField(exist = false) + private List groupList; + + } diff --git a/bolt-dao/src/main/java/com/jiluo/bolt/entity/po/Product.java b/bolt-dao/src/main/java/com/jiluo/bolt/entity/po/Product.java new file mode 100644 index 0000000..1f42fab --- /dev/null +++ b/bolt-dao/src/main/java/com/jiluo/bolt/entity/po/Product.java @@ -0,0 +1,37 @@ +package com.jiluo.bolt.entity.po; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.jiluo.bolt.entity.BaseEntity; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; +import com.baomidou.mybatisplus.annotation.TableName; +/** + * 检测类型表(Product)表实体类 + * + * @author Fangy + * @since 2023-05-05 09:28:27 + */ + @Data + @EqualsAndHashCode(callSuper = true) + @Accessors(chain = true) + @TableName(value = "product") + public class Product extends BaseEntity { + private static final long serialVersionUID = 1L; + + @TableField("biz_id") + private String bizId; + + @TableField("name") + private String name; + + @TableField("drive") + private String drive; + + @TableField("tags") + private String tags; + + @TableField("type") + private String type; + + } diff --git a/bolt-dao/src/main/java/com/jiluo/bolt/entity/po/Role.java b/bolt-dao/src/main/java/com/jiluo/bolt/entity/po/Role.java new file mode 100644 index 0000000..a1eef10 --- /dev/null +++ b/bolt-dao/src/main/java/com/jiluo/bolt/entity/po/Role.java @@ -0,0 +1,28 @@ +package com.jiluo.bolt.entity.po; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.jiluo.bolt.entity.BaseEntity; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; +import com.baomidou.mybatisplus.annotation.TableName; +/** + * 角色信息表(Role)表实体类 + * + * @author Fangy + * @since 2023-05-05 18:42:15 + */ + @Data + @EqualsAndHashCode(callSuper = true) + @Accessors(chain = true) + @TableName(value = "role") + public class Role extends BaseEntity { + private static final long serialVersionUID = 1L; + + @TableField("role_id") + private String roleId; + + @TableField("role_name") + private String roleName; + + } diff --git a/bolt-dao/src/main/java/com/jiluo/bolt/entity/po/RoleItem.java b/bolt-dao/src/main/java/com/jiluo/bolt/entity/po/RoleItem.java new file mode 100644 index 0000000..8796bb0 --- /dev/null +++ b/bolt-dao/src/main/java/com/jiluo/bolt/entity/po/RoleItem.java @@ -0,0 +1,34 @@ +package com.jiluo.bolt.entity.po; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.jiluo.bolt.entity.BaseEntity; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; +import com.baomidou.mybatisplus.annotation.TableName; +/** + * 权限信息表(RoleItem)表实体类 + * + * @author Fangy + * @since 2023-05-05 18:42:15 + */ + @Data + @EqualsAndHashCode(callSuper = true) + @Accessors(chain = true) + @TableName(value = "role_item") + public class RoleItem extends BaseEntity { + private static final long serialVersionUID = 1L; + + @TableField("biz_id") + private String bizId; + + @TableField("name") + private String name; + + @TableField("scope") + private Integer scope; + + @TableField("type") + private Integer type; + + } diff --git a/bolt-dao/src/main/java/com/jiluo/bolt/entity/po/RoleValue.java b/bolt-dao/src/main/java/com/jiluo/bolt/entity/po/RoleValue.java new file mode 100644 index 0000000..0e1ce01 --- /dev/null +++ b/bolt-dao/src/main/java/com/jiluo/bolt/entity/po/RoleValue.java @@ -0,0 +1,31 @@ +package com.jiluo.bolt.entity.po; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.jiluo.bolt.entity.BaseEntity; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; +import com.baomidou.mybatisplus.annotation.TableName; +/** + * 角色信息表(RoleValue)表实体类 + * + * @author Fangy + * @since 2023-05-05 18:42:15 + */ + @Data + @EqualsAndHashCode(callSuper = true) + @Accessors(chain = true) + @TableName(value = "role_value") + public class RoleValue extends BaseEntity { + private static final long serialVersionUID = 1L; + + @TableField("role_id") + private String roleId; + + @TableField("item_id") + private String itemId; + + @TableField("item_value") + private String itemValue; + + } diff --git a/bolt-dao/src/main/java/com/jiluo/bolt/entity/po/User.java b/bolt-dao/src/main/java/com/jiluo/bolt/entity/po/User.java new file mode 100644 index 0000000..b5a0eb9 --- /dev/null +++ b/bolt-dao/src/main/java/com/jiluo/bolt/entity/po/User.java @@ -0,0 +1,37 @@ +package com.jiluo.bolt.entity.po; + + +import com.baomidou.mybatisplus.annotation.TableField; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.jiluo.bolt.entity.BaseEntity; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; +import com.baomidou.mybatisplus.annotation.TableName; +/** + * 用户信息表(User)表实体类 + * + * @author Fangy + * @since 2023-05-05 09:28:27 + */ + @Data + @EqualsAndHashCode(callSuper = true) + @Accessors(chain = true) + @TableName(value = "user") + public class User extends BaseEntity { + private static final long serialVersionUID = 1L; + + @TableField("biz_id") + private String bizId; + + @TableField("user_name") + private String userName; + + @JsonIgnore + @TableField("password") + private String password; + + @TableField("role") + private String role; + + } diff --git a/bolt-dao/src/main/java/com/jiluo/bolt/entity/po/Version.java b/bolt-dao/src/main/java/com/jiluo/bolt/entity/po/Version.java new file mode 100644 index 0000000..ca520a6 --- /dev/null +++ b/bolt-dao/src/main/java/com/jiluo/bolt/entity/po/Version.java @@ -0,0 +1,37 @@ +package com.jiluo.bolt.entity.po; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.jiluo.bolt.entity.BaseEntity; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; +import com.baomidou.mybatisplus.annotation.TableName; +/** + * 版本信息表(Version)表实体类 + * + * @author Fangy + * @since 2023-05-05 09:28:27 + */ + @Data + @EqualsAndHashCode(callSuper = true) + @Accessors(chain = true) + @TableName(value = "version") + public class Version extends BaseEntity { + private static final long serialVersionUID = 1L; + + @TableField("biz_id") + private String bizId; + + @TableField("version") + private String version; + + @TableField("note") + private String note; + + @TableField("path") + private String path; + + @TableField("available") + private Integer available; + + } diff --git a/bolt-dao/src/main/java/com/jiluo/bolt/mapper/AlarmMapper.java b/bolt-dao/src/main/java/com/jiluo/bolt/mapper/AlarmMapper.java new file mode 100644 index 0000000..0a673cd --- /dev/null +++ b/bolt-dao/src/main/java/com/jiluo/bolt/mapper/AlarmMapper.java @@ -0,0 +1,14 @@ +package com.jiluo.bolt.mapper; +import org.springframework.stereotype.Repository; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.jiluo.bolt.entity.po.Alarm; + +/** + * 告警信息表(Alarm)表数据库访问层 + * @author Fangy + * @date 2023-05-04 17:15:41 + */ +@Repository +public interface AlarmMapper extends BaseMapper { + +} diff --git a/bolt-dao/src/main/java/com/jiluo/bolt/mapper/AlgorithmConfigMapper.java b/bolt-dao/src/main/java/com/jiluo/bolt/mapper/AlgorithmConfigMapper.java new file mode 100644 index 0000000..1b9e6d1 --- /dev/null +++ b/bolt-dao/src/main/java/com/jiluo/bolt/mapper/AlgorithmConfigMapper.java @@ -0,0 +1,14 @@ +package com.jiluo.bolt.mapper; +import org.springframework.stereotype.Repository; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.jiluo.bolt.entity.po.AlgorithmConfig; + +/** + * (AlgorithmConfig)表数据库访问层 + * @author Fangy + * @date 2023-05-08 17:48:41 + */ +@Repository +public interface AlgorithmConfigMapper extends BaseMapper { + +} diff --git a/bolt-dao/src/main/java/com/jiluo/bolt/mapper/AlgorithmMapper.java b/bolt-dao/src/main/java/com/jiluo/bolt/mapper/AlgorithmMapper.java new file mode 100644 index 0000000..ced0b2a --- /dev/null +++ b/bolt-dao/src/main/java/com/jiluo/bolt/mapper/AlgorithmMapper.java @@ -0,0 +1,14 @@ +package com.jiluo.bolt.mapper; +import org.springframework.stereotype.Repository; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.jiluo.bolt.entity.po.Algorithm; + +/** + * 算法信息表(Algorithm)表数据库访问层 + * @author Fangy + * @date 2023-05-05 09:37:44 + */ +@Repository +public interface AlgorithmMapper extends BaseMapper { + +} diff --git a/bolt-dao/src/main/java/com/jiluo/bolt/mapper/AlgorithmTempleteMapper.java b/bolt-dao/src/main/java/com/jiluo/bolt/mapper/AlgorithmTempleteMapper.java new file mode 100644 index 0000000..0e78d8f --- /dev/null +++ b/bolt-dao/src/main/java/com/jiluo/bolt/mapper/AlgorithmTempleteMapper.java @@ -0,0 +1,14 @@ +package com.jiluo.bolt.mapper; +import org.springframework.stereotype.Repository; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.jiluo.bolt.entity.po.AlgorithmTemplete; + +/** + * (AlgorithmTemplete)表数据库访问层 + * @author Fangy + * @date 2023-05-05 09:37:44 + */ +@Repository +public interface AlgorithmTempleteMapper extends BaseMapper { + +} diff --git a/bolt-dao/src/main/java/com/jiluo/bolt/mapper/ConfigMapper.java b/bolt-dao/src/main/java/com/jiluo/bolt/mapper/ConfigMapper.java new file mode 100644 index 0000000..0f773d2 --- /dev/null +++ b/bolt-dao/src/main/java/com/jiluo/bolt/mapper/ConfigMapper.java @@ -0,0 +1,14 @@ +package com.jiluo.bolt.mapper; +import org.springframework.stereotype.Repository; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.jiluo.bolt.entity.po.Config; + +/** + * 系统配置表(Config)表数据库访问层 + * @author Fangy + * @date 2023-05-05 09:37:46 + */ +@Repository +public interface ConfigMapper extends BaseMapper { + +} diff --git a/bolt-dao/src/main/java/com/jiluo/bolt/mapper/DefectMapper.java b/bolt-dao/src/main/java/com/jiluo/bolt/mapper/DefectMapper.java new file mode 100644 index 0000000..4881de6 --- /dev/null +++ b/bolt-dao/src/main/java/com/jiluo/bolt/mapper/DefectMapper.java @@ -0,0 +1,27 @@ +package com.jiluo.bolt.mapper; +import org.apache.ibatis.annotations.Select; +import org.springframework.stereotype.Repository; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.jiluo.bolt.entity.po.Defect; + +import java.util.List; + +/** + * 检测结果表(Defect)表数据库访问层 + * @author Fangy + * @date 2023-05-05 09:37:46 + */ +@Repository +public interface DefectMapper extends BaseMapper { + + @Select({"SELECT * " + + " FROM `defect` " + + " WHERE type = 'temperature' " + + " AND (point, gmt_create) IN ( " + + " SELECT point, MAX(gmt_create) " + + " FROM defect " + + " WHERE type = 'temperature' " + + " GROUP BY point ) ;"}) + public List selectTemperature(); + +} diff --git a/bolt-dao/src/main/java/com/jiluo/bolt/mapper/DetectMapper.java b/bolt-dao/src/main/java/com/jiluo/bolt/mapper/DetectMapper.java new file mode 100644 index 0000000..3a5166c --- /dev/null +++ b/bolt-dao/src/main/java/com/jiluo/bolt/mapper/DetectMapper.java @@ -0,0 +1,14 @@ +package com.jiluo.bolt.mapper; +import org.springframework.stereotype.Repository; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.jiluo.bolt.entity.po.Detect; + +/** + * 检测过程表(Detect)表数据库访问层 + * @author Fangy + * @date 2023-05-05 09:37:46 + */ +@Repository +public interface DetectMapper extends BaseMapper { + +} diff --git a/bolt-dao/src/main/java/com/jiluo/bolt/mapper/DeviceMapper.java b/bolt-dao/src/main/java/com/jiluo/bolt/mapper/DeviceMapper.java new file mode 100644 index 0000000..69f2478 --- /dev/null +++ b/bolt-dao/src/main/java/com/jiluo/bolt/mapper/DeviceMapper.java @@ -0,0 +1,14 @@ +package com.jiluo.bolt.mapper; +import org.springframework.stereotype.Repository; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.jiluo.bolt.entity.po.Device; + +/** + * 设备信息表(Device)表数据库访问层 + * @author Fangy + * @date 2023-05-05 09:37:46 + */ +@Repository +public interface DeviceMapper extends BaseMapper { + +} diff --git a/bolt-dao/src/main/java/com/jiluo/bolt/mapper/DeviceTempleteMapper.java b/bolt-dao/src/main/java/com/jiluo/bolt/mapper/DeviceTempleteMapper.java new file mode 100644 index 0000000..387b583 --- /dev/null +++ b/bolt-dao/src/main/java/com/jiluo/bolt/mapper/DeviceTempleteMapper.java @@ -0,0 +1,14 @@ +package com.jiluo.bolt.mapper; +import org.springframework.stereotype.Repository; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.jiluo.bolt.entity.po.DeviceTemplete; + +/** + * (DeviceTemplete)表数据库访问层 + * @author Fangy + * @date 2023-05-05 09:37:46 + */ +@Repository +public interface DeviceTempleteMapper extends BaseMapper { + +} diff --git a/bolt-dao/src/main/java/com/jiluo/bolt/mapper/JobMapper.java b/bolt-dao/src/main/java/com/jiluo/bolt/mapper/JobMapper.java new file mode 100644 index 0000000..39e14ca --- /dev/null +++ b/bolt-dao/src/main/java/com/jiluo/bolt/mapper/JobMapper.java @@ -0,0 +1,16 @@ +package com.jiluo.bolt.mapper; +import org.springframework.stereotype.Repository; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.jiluo.bolt.entity.po.Job; + +import java.util.List; + +/** + * 检测任务表(Job)表数据库访问层 + * @author Fangy + * @date 2023-05-05 09:37:46 + */ +@Repository +public interface JobMapper extends BaseMapper { + +} diff --git a/bolt-dao/src/main/java/com/jiluo/bolt/mapper/MotorGroupMapper.java b/bolt-dao/src/main/java/com/jiluo/bolt/mapper/MotorGroupMapper.java new file mode 100644 index 0000000..4226df8 --- /dev/null +++ b/bolt-dao/src/main/java/com/jiluo/bolt/mapper/MotorGroupMapper.java @@ -0,0 +1,14 @@ +package com.jiluo.bolt.mapper; +import org.springframework.stereotype.Repository; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.jiluo.bolt.entity.po.MotorGroup; + +/** + * 机组信息表(MotorGroup)表数据库访问层 + * @author Fangy + * @date 2023-05-05 09:37:46 + */ +@Repository +public interface MotorGroupMapper extends BaseMapper { + +} diff --git a/bolt-dao/src/main/java/com/jiluo/bolt/mapper/PointMapper.java b/bolt-dao/src/main/java/com/jiluo/bolt/mapper/PointMapper.java new file mode 100644 index 0000000..e4e43f8 --- /dev/null +++ b/bolt-dao/src/main/java/com/jiluo/bolt/mapper/PointMapper.java @@ -0,0 +1,14 @@ +package com.jiluo.bolt.mapper; +import org.springframework.stereotype.Repository; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.jiluo.bolt.entity.po.Point; + +/** + * 检测点表(Point)表数据库访问层 + * @author Fangy + * @date 2023-05-05 09:37:46 + */ +@Repository +public interface PointMapper extends BaseMapper { + +} diff --git a/bolt-dao/src/main/java/com/jiluo/bolt/mapper/PowerStationMapper.java b/bolt-dao/src/main/java/com/jiluo/bolt/mapper/PowerStationMapper.java new file mode 100644 index 0000000..93987fd --- /dev/null +++ b/bolt-dao/src/main/java/com/jiluo/bolt/mapper/PowerStationMapper.java @@ -0,0 +1,14 @@ +package com.jiluo.bolt.mapper; +import org.springframework.stereotype.Repository; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.jiluo.bolt.entity.po.PowerStation; + +/** + * 电站表(PowerStation)表数据库访问层 + * @author Fangy + * @date 2023-05-05 09:37:46 + */ +@Repository +public interface PowerStationMapper extends BaseMapper { + +} diff --git a/bolt-dao/src/main/java/com/jiluo/bolt/mapper/ProductMapper.java b/bolt-dao/src/main/java/com/jiluo/bolt/mapper/ProductMapper.java new file mode 100644 index 0000000..6e96c8f --- /dev/null +++ b/bolt-dao/src/main/java/com/jiluo/bolt/mapper/ProductMapper.java @@ -0,0 +1,14 @@ +package com.jiluo.bolt.mapper; +import org.springframework.stereotype.Repository; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.jiluo.bolt.entity.po.Product; + +/** + * 检测类型表(Product)表数据库访问层 + * @author Fangy + * @date 2023-05-05 09:37:46 + */ +@Repository +public interface ProductMapper extends BaseMapper { + +} diff --git a/bolt-dao/src/main/java/com/jiluo/bolt/mapper/RoleItemMapper.java b/bolt-dao/src/main/java/com/jiluo/bolt/mapper/RoleItemMapper.java new file mode 100644 index 0000000..46fdd6a --- /dev/null +++ b/bolt-dao/src/main/java/com/jiluo/bolt/mapper/RoleItemMapper.java @@ -0,0 +1,14 @@ +package com.jiluo.bolt.mapper; +import com.jiluo.bolt.entity.po.RoleItem; +import org.springframework.stereotype.Repository; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + * 权限信息表(RoleItem)表数据库访问层 + * @author Fangy + * @date 2023-05-05 09:37:46 + */ +@Repository +public interface RoleItemMapper extends BaseMapper { + +} diff --git a/bolt-dao/src/main/java/com/jiluo/bolt/mapper/RoleMapper.java b/bolt-dao/src/main/java/com/jiluo/bolt/mapper/RoleMapper.java new file mode 100644 index 0000000..310a0d9 --- /dev/null +++ b/bolt-dao/src/main/java/com/jiluo/bolt/mapper/RoleMapper.java @@ -0,0 +1,14 @@ +package com.jiluo.bolt.mapper; +import com.jiluo.bolt.entity.po.Role; +import org.springframework.stereotype.Repository; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + * 角色信息表(Role)表数据库访问层 + * @author Fangy + * @date 2023-05-05 18:30:46 + */ +@Repository +public interface RoleMapper extends BaseMapper { + +} diff --git a/bolt-dao/src/main/java/com/jiluo/bolt/mapper/RoleValueMapper.java b/bolt-dao/src/main/java/com/jiluo/bolt/mapper/RoleValueMapper.java new file mode 100644 index 0000000..2d2d082 --- /dev/null +++ b/bolt-dao/src/main/java/com/jiluo/bolt/mapper/RoleValueMapper.java @@ -0,0 +1,14 @@ +package com.jiluo.bolt.mapper; +import com.jiluo.bolt.entity.po.RoleValue; +import org.springframework.stereotype.Repository; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + * 角色信息表(RoleValue)表数据库访问层 + * @author Fangy + * @date 2023-05-05 18:30:49 + */ +@Repository +public interface RoleValueMapper extends BaseMapper { + +} diff --git a/bolt-dao/src/main/java/com/jiluo/bolt/mapper/UserMapper.java b/bolt-dao/src/main/java/com/jiluo/bolt/mapper/UserMapper.java new file mode 100644 index 0000000..47d974e --- /dev/null +++ b/bolt-dao/src/main/java/com/jiluo/bolt/mapper/UserMapper.java @@ -0,0 +1,14 @@ +package com.jiluo.bolt.mapper; +import org.springframework.stereotype.Repository; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.jiluo.bolt.entity.po.User; + +/** + * 用户信息表(User)表数据库访问层 + * @author Fangy + * @date 2023-05-05 09:37:46 + */ +@Repository +public interface UserMapper extends BaseMapper { + +} diff --git a/bolt-dao/src/main/java/com/jiluo/bolt/mapper/VersionMapper.java b/bolt-dao/src/main/java/com/jiluo/bolt/mapper/VersionMapper.java new file mode 100644 index 0000000..4f74e3f --- /dev/null +++ b/bolt-dao/src/main/java/com/jiluo/bolt/mapper/VersionMapper.java @@ -0,0 +1,14 @@ +package com.jiluo.bolt.mapper; +import org.springframework.stereotype.Repository; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.jiluo.bolt.entity.po.Version; + +/** + * 版本信息表(Version)表数据库访问层 + * @author Fangy + * @date 2023-05-05 09:37:46 + */ +@Repository +public interface VersionMapper extends BaseMapper { + +} diff --git a/bolt-dao/src/main/resources/mapper/AlarmMapper.xml b/bolt-dao/src/main/resources/mapper/AlarmMapper.xml new file mode 100644 index 0000000..5065ad1 --- /dev/null +++ b/bolt-dao/src/main/resources/mapper/AlarmMapper.xml @@ -0,0 +1,47 @@ + + + + + + + + + + + + + + + + gmt_create, gmt_modify, id, biz_id, type, content + + + + + + diff --git a/bolt-dao/src/main/resources/mapper/AlgorithmConfigMapper.xml b/bolt-dao/src/main/resources/mapper/AlgorithmConfigMapper.xml new file mode 100644 index 0000000..129d914 --- /dev/null +++ b/bolt-dao/src/main/resources/mapper/AlgorithmConfigMapper.xml @@ -0,0 +1,59 @@ + + + + + + + + + + + + + + + + + + + gmt_create, gmt_modify, id, biz_id, name, bolt_threshold, line_threshold, daily_auto_detection_time, delay_detect + + + + + + diff --git a/bolt-dao/src/main/resources/mapper/AlgorithmMapper.xml b/bolt-dao/src/main/resources/mapper/AlgorithmMapper.xml new file mode 100644 index 0000000..902bcc9 --- /dev/null +++ b/bolt-dao/src/main/resources/mapper/AlgorithmMapper.xml @@ -0,0 +1,64 @@ + + + + + + + + + + + + + + + + + + + + + gmt_create, gmt_modify, id, biz_id, algorithm, attribute, power_station, motor_group, point, version, config + + + + + + diff --git a/bolt-dao/src/main/resources/mapper/AlgorithmTempleteMapper.xml b/bolt-dao/src/main/resources/mapper/AlgorithmTempleteMapper.xml new file mode 100644 index 0000000..118cd7c --- /dev/null +++ b/bolt-dao/src/main/resources/mapper/AlgorithmTempleteMapper.xml @@ -0,0 +1,59 @@ + + + + + + + + + + + + + + + + + + + gmt_create, gmt_modify, id, biz_id, source, name, drive, version, config + + + + + + diff --git a/bolt-dao/src/main/resources/mapper/ConfigMapper.xml b/bolt-dao/src/main/resources/mapper/ConfigMapper.xml new file mode 100644 index 0000000..9bfacc6 --- /dev/null +++ b/bolt-dao/src/main/resources/mapper/ConfigMapper.xml @@ -0,0 +1,55 @@ + + + + + + + + + + + + + + + + + + gmt_create, gmt_modify, id, biz_id, value, description, category, type + + + + + + diff --git a/bolt-dao/src/main/resources/mapper/DefectMapper.xml b/bolt-dao/src/main/resources/mapper/DefectMapper.xml new file mode 100644 index 0000000..8b53ec3 --- /dev/null +++ b/bolt-dao/src/main/resources/mapper/DefectMapper.xml @@ -0,0 +1,86 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + gmt_create, gmt_modify, id, biz_id, power_station, motor_group, point, job, device, type, zone, position, value, data, alarm, status + + + + + diff --git a/bolt-dao/src/main/resources/mapper/DetectMapper.xml b/bolt-dao/src/main/resources/mapper/DetectMapper.xml new file mode 100644 index 0000000..03b9a9e --- /dev/null +++ b/bolt-dao/src/main/resources/mapper/DetectMapper.xml @@ -0,0 +1,67 @@ + + + + + + + + + + + + + + + + + + + + + gmt_create, gmt_modify, id, biz_id, power_station, motor_group, point, job, zone, data, device + + + + + + diff --git a/bolt-dao/src/main/resources/mapper/DeviceMapper.xml b/bolt-dao/src/main/resources/mapper/DeviceMapper.xml new file mode 100644 index 0000000..9434a20 --- /dev/null +++ b/bolt-dao/src/main/resources/mapper/DeviceMapper.xml @@ -0,0 +1,79 @@ + + + + + + + + + + + + + + + + + + + + + + + + gmt_create, gmt_modify, id, biz_id, type, name, power_station, product, motor_group, point, status, temp_threshold, config, vender + + + + + + diff --git a/bolt-dao/src/main/resources/mapper/DeviceTempleteMapper.xml b/bolt-dao/src/main/resources/mapper/DeviceTempleteMapper.xml new file mode 100644 index 0000000..e65d1a1 --- /dev/null +++ b/bolt-dao/src/main/resources/mapper/DeviceTempleteMapper.xml @@ -0,0 +1,51 @@ + + + + + + + + + + + + + + + + + gmt_create, gmt_modify, id, biz_id, vender, drive, config + + + + + + diff --git a/bolt-dao/src/main/resources/mapper/JobMapper.xml b/bolt-dao/src/main/resources/mapper/JobMapper.xml new file mode 100644 index 0000000..02f9614 --- /dev/null +++ b/bolt-dao/src/main/resources/mapper/JobMapper.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + gmt_create, gmt_modify, id, biz_id, power_station, motor_group, point, product, type, name, description, attribute, config, operator, status + + + + diff --git a/bolt-dao/src/main/resources/mapper/MotorGroupMapper.xml b/bolt-dao/src/main/resources/mapper/MotorGroupMapper.xml new file mode 100644 index 0000000..e2a6897 --- /dev/null +++ b/bolt-dao/src/main/resources/mapper/MotorGroupMapper.xml @@ -0,0 +1,55 @@ + + + + + + + + + + + + + + + + + + gmt_create, gmt_modify, id, biz_id, name, contact, phone, power_station + + + + + + diff --git a/bolt-dao/src/main/resources/mapper/PointMapper.xml b/bolt-dao/src/main/resources/mapper/PointMapper.xml new file mode 100644 index 0000000..25657c8 --- /dev/null +++ b/bolt-dao/src/main/resources/mapper/PointMapper.xml @@ -0,0 +1,92 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + gmt_create, gmt_modify, id, biz_id, name, pole_num, manual_time, automatic_time, enable_detect, power_station, motor_group, bolt_detect, line_detect, pole_open_detect, point_temp_detect, status, gmt_reset + + + + + + diff --git a/bolt-dao/src/main/resources/mapper/PowerStationMapper.xml b/bolt-dao/src/main/resources/mapper/PowerStationMapper.xml new file mode 100644 index 0000000..60e7d7a --- /dev/null +++ b/bolt-dao/src/main/resources/mapper/PowerStationMapper.xml @@ -0,0 +1,59 @@ + + + + + + + + + + + + + + + + + + + gmt_create, gmt_modify, id, biz_id, name, address, contact, phone, introduction + + + + + + diff --git a/bolt-dao/src/main/resources/mapper/ProductMapper.xml b/bolt-dao/src/main/resources/mapper/ProductMapper.xml new file mode 100644 index 0000000..af4c3b5 --- /dev/null +++ b/bolt-dao/src/main/resources/mapper/ProductMapper.xml @@ -0,0 +1,55 @@ + + + + + + + + + + + + + + + + + + gmt_create, gmt_modify, id, biz_id, name, drive, tags, type + + + + + + diff --git a/bolt-dao/src/main/resources/mapper/RoleItemMapper.xml b/bolt-dao/src/main/resources/mapper/RoleItemMapper.xml new file mode 100644 index 0000000..040e2cb --- /dev/null +++ b/bolt-dao/src/main/resources/mapper/RoleItemMapper.xml @@ -0,0 +1,51 @@ + + + + + + + + + + + + + + + + + gmt_create, gmt_modify, id, biz_id, name, scope, type + + + + + + diff --git a/bolt-dao/src/main/resources/mapper/RoleMapper.xml b/bolt-dao/src/main/resources/mapper/RoleMapper.xml new file mode 100644 index 0000000..d7db2da --- /dev/null +++ b/bolt-dao/src/main/resources/mapper/RoleMapper.xml @@ -0,0 +1,43 @@ + + + + + + + + + + + + + + + gmt_create, gmt_modify, id, role_id, role_name + + + + + + diff --git a/bolt-dao/src/main/resources/mapper/RoleValueMapper.xml b/bolt-dao/src/main/resources/mapper/RoleValueMapper.xml new file mode 100644 index 0000000..2b6ca7b --- /dev/null +++ b/bolt-dao/src/main/resources/mapper/RoleValueMapper.xml @@ -0,0 +1,47 @@ + + + + + + + + + + + + + + + + gmt_create, gmt_modify, id, role_id, item_id, item_value + + + + + + diff --git a/bolt-dao/src/main/resources/mapper/UserMapper.xml b/bolt-dao/src/main/resources/mapper/UserMapper.xml new file mode 100644 index 0000000..d729a9b --- /dev/null +++ b/bolt-dao/src/main/resources/mapper/UserMapper.xml @@ -0,0 +1,51 @@ + + + + + + + + + + + + + + + + + gmt_create, gmt_modify, id, biz_id, user_name, password, role + + + + + + diff --git a/bolt-dao/src/main/resources/mapper/VersionMapper.xml b/bolt-dao/src/main/resources/mapper/VersionMapper.xml new file mode 100644 index 0000000..02a2b82 --- /dev/null +++ b/bolt-dao/src/main/resources/mapper/VersionMapper.xml @@ -0,0 +1,55 @@ + + + + + + + + + + + + + + + + + + gmt_create, gmt_modify, id, biz_id, version, note, path, available + + + + + + diff --git a/bolt-kernel/pom.xml b/bolt-kernel/pom.xml new file mode 100644 index 0000000..f55672e --- /dev/null +++ b/bolt-kernel/pom.xml @@ -0,0 +1,75 @@ + + + 4.0.0 + + + bolt-server + com.jiluo.bolt + 0.0.1-SNAPSHOT + + + com.jiluo.bolt + bolt-kernel + 0.0.1-SNAPSHOT + + + + com.jiluo.bolt + bolt-core + 0.0.1-SNAPSHOT + + + + + org.springframework.boot + spring-boot-starter-amqp + + + + net.java.dev.jna + jna + 5.12.1 + + + + + org.springframework.boot + spring-boot-starter-websocket + + + + + com.infiniteautomation + modbus4j + + + + + io.netty + netty-all + + + commons-io + commons-io + + + + org.apache.httpcomponents + httpclient + + + + com.squareup.okhttp3 + okhttp + + + + io.minio + minio + + + + + \ No newline at end of file diff --git a/bolt-kernel/src/main/java/com/jiluo/bolt/OKHttp/OkHttpUtil.java b/bolt-kernel/src/main/java/com/jiluo/bolt/OKHttp/OkHttpUtil.java new file mode 100644 index 0000000..32bd995 --- /dev/null +++ b/bolt-kernel/src/main/java/com/jiluo/bolt/OKHttp/OkHttpUtil.java @@ -0,0 +1,148 @@ +package com.jiluo.bolt.OKHttp; + +import java.io.IOException; +import java.util.Map; +import java.util.concurrent.TimeUnit; + +import com.jiluo.bolt.util.ShellUtils; +import lombok.extern.slf4j.Slf4j; +import okhttp3.*; +import org.springframework.stereotype.Component; + +/** + * Created with IntelliJ IDEA. + * + * @Author: fy + * @Date: 2023/07/13/10:55 + * @Description: + */ +@Component +@Slf4j +public class OkHttpUtil { + + private OkHttpUtil() { + } + + /** + * 发送get请求 + * + * @param url 地址 + * @param params 参数 + * @return 请求结果 + */ + public static String get(String url, Map params) { + return request("get", url, params); + } + + /** + * 发送post请求 + * + * @param url 地址 + * @param params 参数 + * @return 请求结果 + */ + public static String post(String url, Map params) { + return request("post", url, params); + } + + /** + * 发送http请求 + * + * @param method 请求方法 + * @param url 地址 + * @param params 参数 + * @return 请求结果 + */ + public static String request(String method, String url, Map params) { + + if (method == null) { + throw new RuntimeException("请求方法不能为空"); + } + + if (url == null) { + throw new RuntimeException("url不能为空"); + } + + HttpUrl.Builder httpBuilder = HttpUrl.parse(url).newBuilder(); + + if (params != null) { + for (Map.Entry param : params.entrySet()) { + httpBuilder.addQueryParameter(param.getKey(), param.getValue()); + } + } + + Request request = new Request.Builder() + .url(httpBuilder.build()) + .method(method, new FormBody.Builder().build()) + .build(); + + try { + OkHttpClient client = new OkHttpClient.Builder() + .readTimeout(20, TimeUnit.SECONDS) + .build(); + Response response = client.newCall(request).execute(); + return response.body().string(); + } catch (IOException e) { + return null; + } + } + + /** + * 发送post请求(json格式) + * + * @param url url + * @param json json字符串 + * @return 请求结果 + */ + public static String postJson(String url, String json) { + Request request = new Request.Builder() + .url(url) + .post(RequestBody.create(json.getBytes(), MediaType.parse("application/json"))) + .build(); + try { + OkHttpClient client = new OkHttpClient(); + Response response = client.newCall(request).execute(); + if (response.isSuccessful()) { + return response.body().string(); + } else { + log.info("请求失败,错误码:" + response.code()); + return null; + } + } catch (IOException e) { + log.error("[OkHttpUtil] postJson:", e.getMessage(), e); + return null; + } + } + + public static String postJson(String type, String vendor, String func, String json) { + if (!ShellUtils.cameraPortMap.containsKey(vendor)){ + log.error("[OkHttpUtil] postJson:"+vendor+"相机驱动端口获取失败"); + return "false"; + } + String url = "http://localhost:" + ShellUtils.cameraPortMap.get(vendor) + "/api/" + type + "/" + func; + Request request = new Request.Builder() + .url(url) + .post(RequestBody.create(json.getBytes(), MediaType.parse("application/json"))) + .build(); + try { + OkHttpClient client = new OkHttpClient.Builder() + .connectTimeout(3, TimeUnit.MINUTES) // 设置超时时间为3分钟 + .readTimeout(3, TimeUnit.MINUTES) + .writeTimeout(3, TimeUnit.MINUTES) + .build(); + Response response = client.newCall(request).execute(); + if (response.isSuccessful()) { + String responseBody = response.body().string(); + response.close(); + return responseBody; + } else { + log.info("请求失败,错误码:" + response.code()); + return "false"; + } + } catch (IOException e) { + log.error("[OkHttpUtil] postJson:", e.getMessage(), e); + return "false"; + } + } + +} diff --git a/bolt-kernel/src/main/java/com/jiluo/bolt/algorithm/AbstractAlgorithm.java b/bolt-kernel/src/main/java/com/jiluo/bolt/algorithm/AbstractAlgorithm.java new file mode 100644 index 0000000..509f82c --- /dev/null +++ b/bolt-kernel/src/main/java/com/jiluo/bolt/algorithm/AbstractAlgorithm.java @@ -0,0 +1,34 @@ +package com.jiluo.bolt.algorithm; + + +import java.util.concurrent.ConcurrentHashMap; + +/** + * Created with IntelliJ IDEA. + * + * @Author: fy + * @Date: 2023/08/10/15:37 + * @Description: + */ +public abstract class AbstractAlgorithm implements IAlgorithm { + private static ConcurrentHashMap ALGORITHMS = new ConcurrentHashMap<>(); + + protected String identity; + protected AlgorithmType algorithmType; + + public AbstractAlgorithm(AlgorithmType algorithmType, String identity){ + this.algorithmType = algorithmType; + this.identity = identity; + ALGORITHMS.putIfAbsent(identity,this); + } + + public String identity() { + return identity; + } + + public AlgorithmType type() { + return this.algorithmType; + } + + public IAlgorithm getByIdentity(String identity){ return ALGORITHMS.get(identity); } +} diff --git a/bolt-kernel/src/main/java/com/jiluo/bolt/algorithm/AlgorithmName.java b/bolt-kernel/src/main/java/com/jiluo/bolt/algorithm/AlgorithmName.java new file mode 100644 index 0000000..b8da2e4 --- /dev/null +++ b/bolt-kernel/src/main/java/com/jiluo/bolt/algorithm/AlgorithmName.java @@ -0,0 +1,45 @@ +package com.jiluo.bolt.algorithm; + +import lombok.Getter; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.stream.Collectors; + +/** + * Created with IntelliJ IDEA. + * + * @Author: fy + * @Date: 2023/08/10/15:54 + * @Description: + */ +@Getter +public enum AlgorithmName { + MockAlgorithm(AlgorithmType.mock_algorithm, "mock_algorithm", com.jiluo.bolt.algorithm.algorithm.MockAlgorithm.class), + SelfAlgorithm(AlgorithmType.self_algorithm, "自建算法1", com.jiluo.bolt.algorithm.algorithm.SelfAlgorithm.class); + + + String name; + AlgorithmType algorithmType; + Class clazz; + + AlgorithmName(AlgorithmType algorithmType, String name, Class clazz){ + this.algorithmType = algorithmType; + this.name = name; + this.clazz = clazz; + } + + public static AlgorithmName getByName(String name){ + for (AlgorithmName algorithmName:AlgorithmName.values()){ + if (algorithmName.getName().equals(name)){ + return algorithmName; + } + } + return null; + } + + public static List getName(AlgorithmType algorithmType){ + return Arrays.stream(AlgorithmName.values()).filter(algorithmName -> algorithmName.getAlgorithmType().equals(algorithmType)).map(AlgorithmName::getName).collect(Collectors.toList()); + } +} diff --git a/bolt-kernel/src/main/java/com/jiluo/bolt/algorithm/AlgorithmType.java b/bolt-kernel/src/main/java/com/jiluo/bolt/algorithm/AlgorithmType.java new file mode 100644 index 0000000..9eba606 --- /dev/null +++ b/bolt-kernel/src/main/java/com/jiluo/bolt/algorithm/AlgorithmType.java @@ -0,0 +1,12 @@ +package com.jiluo.bolt.algorithm; + +/** + * Created with IntelliJ IDEA. + * + * @Author: fy + * @Date: 2023/08/10/15:32 + * @Description: + */ +public enum AlgorithmType { + mock_algorithm, self_algorithm +} diff --git a/bolt-kernel/src/main/java/com/jiluo/bolt/algorithm/IAlgorithm.java b/bolt-kernel/src/main/java/com/jiluo/bolt/algorithm/IAlgorithm.java new file mode 100644 index 0000000..31c60ba --- /dev/null +++ b/bolt-kernel/src/main/java/com/jiluo/bolt/algorithm/IAlgorithm.java @@ -0,0 +1,29 @@ +package com.jiluo.bolt.algorithm; + +import java.util.Map; + +/** + * Created with IntelliJ IDEA. + * + * @Author: fy + * @Date: 2023/08/10/15:29 + * @Description: + */ +public interface IAlgorithm { + + /** + * 下发算法参数 + */ + boolean config(Map input); + + /** + * 查询类型 + */ + AlgorithmType type(); + + /** + * 算法标识 + */ + String identity(); + +} diff --git a/bolt-kernel/src/main/java/com/jiluo/bolt/algorithm/algorithm/MockAlgorithm.java b/bolt-kernel/src/main/java/com/jiluo/bolt/algorithm/algorithm/MockAlgorithm.java new file mode 100644 index 0000000..fad70d3 --- /dev/null +++ b/bolt-kernel/src/main/java/com/jiluo/bolt/algorithm/algorithm/MockAlgorithm.java @@ -0,0 +1,25 @@ +package com.jiluo.bolt.algorithm.algorithm; + +import com.jiluo.bolt.algorithm.AbstractAlgorithm; +import com.jiluo.bolt.algorithm.AlgorithmType; + +import java.util.Map; + +/** + * Created with IntelliJ IDEA. + * + * @Author: fy + * @Date: 2023/08/10/15:57 + * @Description: + */ +public class MockAlgorithm extends AbstractAlgorithm { + + public MockAlgorithm(String identity){ + super(AlgorithmType.self_algorithm,identity); + } + + @Override + public boolean config(Map input) { + return true; + } +} diff --git a/bolt-kernel/src/main/java/com/jiluo/bolt/algorithm/algorithm/SelfAlgorithm.java b/bolt-kernel/src/main/java/com/jiluo/bolt/algorithm/algorithm/SelfAlgorithm.java new file mode 100644 index 0000000..7a0344d --- /dev/null +++ b/bolt-kernel/src/main/java/com/jiluo/bolt/algorithm/algorithm/SelfAlgorithm.java @@ -0,0 +1,25 @@ +package com.jiluo.bolt.algorithm.algorithm; + +import com.jiluo.bolt.algorithm.AbstractAlgorithm; +import com.jiluo.bolt.algorithm.AlgorithmType; + +import java.util.Map; + +/** + * Created with IntelliJ IDEA. + * + * @Author: fy + * @Date: 2023/08/10/15:57 + * @Description: + */ +public class SelfAlgorithm extends AbstractAlgorithm { + + public SelfAlgorithm(String identity){ + super(AlgorithmType.self_algorithm,identity); + } + + @Override + public boolean config(Map input) { + return true; + } +} diff --git a/bolt-kernel/src/main/java/com/jiluo/bolt/device/AbstractDevice.java b/bolt-kernel/src/main/java/com/jiluo/bolt/device/AbstractDevice.java new file mode 100644 index 0000000..062ef27 --- /dev/null +++ b/bolt-kernel/src/main/java/com/jiluo/bolt/device/AbstractDevice.java @@ -0,0 +1,40 @@ +package com.jiluo.bolt.device; + +import java.util.concurrent.ConcurrentHashMap; + +/** + * Created with IntelliJ IDEA. + * + * @Author: fy + * @Date: 2023/07/03/19:15 + * @Description: + */ +public abstract class AbstractDevice implements IDevice{ + private static ConcurrentHashMap DEVICES = new ConcurrentHashMap<>(); + + protected String identity; + protected DeviceType deviceType; + protected DeviceStatus deviceStatus; + + public AbstractDevice(DeviceType deviceType, String identity) { + this.deviceType = deviceType; + this.identity = identity; + DEVICES.putIfAbsent(identity, this); + } + + public String identity() { + return identity; + } + + public DeviceType type() { + return this.deviceType; + } + + public DeviceStatus status() { + return deviceStatus; + } + + public IDevice getByIdentity(String identity) { + return DEVICES.get(identity); + } +} diff --git a/bolt-kernel/src/main/java/com/jiluo/bolt/device/DeviceStatus.java b/bolt-kernel/src/main/java/com/jiluo/bolt/device/DeviceStatus.java new file mode 100644 index 0000000..280a6a0 --- /dev/null +++ b/bolt-kernel/src/main/java/com/jiluo/bolt/device/DeviceStatus.java @@ -0,0 +1,12 @@ +package com.jiluo.bolt.device; + +/** + * Created with IntelliJ IDEA. + * + * @Author: fy + * @Date: 2023/07/03/19:09 + * @Description: + */ +public enum DeviceStatus { + ready, online, open, close, offline, working +} diff --git a/bolt-kernel/src/main/java/com/jiluo/bolt/device/DeviceType.java b/bolt-kernel/src/main/java/com/jiluo/bolt/device/DeviceType.java new file mode 100644 index 0000000..5b8325c --- /dev/null +++ b/bolt-kernel/src/main/java/com/jiluo/bolt/device/DeviceType.java @@ -0,0 +1,12 @@ +package com.jiluo.bolt.device; + +/** + * Created with IntelliJ IDEA. + * + * @Author: fy + * @Date: 2023/07/03/19:12 + * @Description: + */ +public enum DeviceType { + plc, camera, temperature_sensor +} diff --git a/bolt-kernel/src/main/java/com/jiluo/bolt/device/DeviceVender.java b/bolt-kernel/src/main/java/com/jiluo/bolt/device/DeviceVender.java new file mode 100644 index 0000000..a593dae --- /dev/null +++ b/bolt-kernel/src/main/java/com/jiluo/bolt/device/DeviceVender.java @@ -0,0 +1,52 @@ +package com.jiluo.bolt.device; + +import com.jiluo.bolt.device.camera.BaslerCamera; +import com.jiluo.bolt.device.camera.BaumerCamera; +import com.jiluo.bolt.device.camera.LucidCamera; +import com.jiluo.bolt.device.camera.MockCamera; +import com.jiluo.bolt.device.plc.MathvisionPlc; +import com.jiluo.bolt.device.plc.MockPlc; +import com.jiluo.bolt.device.sensor.CameraTemperatureSensor; +import com.jiluo.bolt.device.sensor.MockTemperatureSensor; +import com.jiluo.bolt.device.sensor.RFIDTemperatureSensor; +import lombok.Getter; + +/** + * Created with IntelliJ IDEA. + * + * @Author: fy + * @Date: 2023/07/03/19:46 + * @Description: + */ +@Getter +public enum DeviceVender { + MockCamera(DeviceType.camera, "mock_camera", MockCamera.class), + MockTemperatureSensor(DeviceType.temperature_sensor, "mock_temperature_sensor", MockTemperatureSensor.class), + MockPlc(DeviceType.plc, "mock_plc", MockPlc.class), + + LucidCamera(DeviceType.camera, "lucid_camera", LucidCamera.class), + BaslerCamera(DeviceType.camera, "basler_camera", BaslerCamera.class), + BaumerCamera(DeviceType.camera, "baumer_camera", BaumerCamera.class), + CameraTemperatureSensor(DeviceType.temperature_sensor, "camera_temperature_sensor", CameraTemperatureSensor.class), + RFIDTemperatureSensor(DeviceType.temperature_sensor, "rfid_temperature_sensor", RFIDTemperatureSensor.class), + MathvisionPlc(DeviceType.plc, "mathvision_plc", MathvisionPlc.class); + + String vender; + DeviceType deviceType; + Class clazz; + + DeviceVender(DeviceType deviceType, String vender, Class clazz) { + this.deviceType = deviceType; + this.vender = vender; + this.clazz = clazz; + } + + public static DeviceVender getByVender(String vender){ + for (DeviceVender deviceVender: DeviceVender.values()) { + if (deviceVender.getVender().equals(vender)){ + return deviceVender; + } + } + return null; + } +} diff --git a/bolt-kernel/src/main/java/com/jiluo/bolt/device/IDevice.java b/bolt-kernel/src/main/java/com/jiluo/bolt/device/IDevice.java new file mode 100644 index 0000000..c02e7a6 --- /dev/null +++ b/bolt-kernel/src/main/java/com/jiluo/bolt/device/IDevice.java @@ -0,0 +1,43 @@ +package com.jiluo.bolt.device; + +import java.util.Map; + +/** + * Created with IntelliJ IDEA. + * + * @Author: fy + * @Date: 2023/07/03/19:07 + * @Description: + */ +public interface IDevice { + + /** + * 打开设备 + */ + boolean config(Map input); + + /** + * 打开设备 + */ + boolean open(Map input); + + /** + * 关闭设备 + */ + boolean close(Map input); + + /** + * 查询状态 + */ + DeviceStatus status(); + + /** + * 查询类型 + */ + DeviceType type(); + + /** + * 设备标识 + */ + String identity(); +} diff --git a/bolt-kernel/src/main/java/com/jiluo/bolt/device/camera/BaslerCamera.java b/bolt-kernel/src/main/java/com/jiluo/bolt/device/camera/BaslerCamera.java new file mode 100644 index 0000000..c4a7cb9 --- /dev/null +++ b/bolt-kernel/src/main/java/com/jiluo/bolt/device/camera/BaslerCamera.java @@ -0,0 +1,53 @@ +package com.jiluo.bolt.device.camera; + +import com.alibaba.fastjson.JSON; +import com.jiluo.bolt.OKHttp.OkHttpUtil; +import com.jiluo.bolt.device.DeviceStatus; +import com.jiluo.bolt.device.DeviceType; +import com.jiluo.bolt.device.AbstractDevice; +import com.jiluo.bolt.device.DeviceVender; +import lombok.extern.slf4j.Slf4j; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.io.File; +import java.nio.file.Files; +import java.nio.file.Paths; +import java.util.List; +import java.util.Map; +import java.util.concurrent.CompletableFuture; +import java.util.stream.Collectors; + +/** + * Created with IntelliJ IDEA. + * + * @Author: fy + * @Date: 2023/07/03/19:23 + * @Description: + */ +@Slf4j +public class BaslerCamera extends AbstractDevice { + private static final Logger logger = LoggerFactory.getLogger(BaslerCamera.class); + + public BaslerCamera(String identity) { + super(DeviceType.camera, identity); + deviceStatus = DeviceStatus.online; + } + + @Override + public boolean config(Map input) { + deviceStatus = DeviceStatus.ready; + return Boolean.parseBoolean(OkHttpUtil.postJson(DeviceType.camera.name(), DeviceVender.BaslerCamera.getVender(),"config", JSON.toJSONString(input))); + } + + @Override + public boolean open(Map input) { + deviceStatus = DeviceStatus.open; + return Boolean.parseBoolean(OkHttpUtil.postJson(DeviceType.camera.name(), DeviceVender.BaslerCamera.getVender(),"start",JSON.toJSONString(input))); + } + @Override + public boolean close(Map input) { + deviceStatus = DeviceStatus.close; + return Boolean.parseBoolean(OkHttpUtil.postJson(DeviceType.camera.name(), DeviceVender.BaslerCamera.getVender(),"stop",JSON.toJSONString(input))); + } +} diff --git a/bolt-kernel/src/main/java/com/jiluo/bolt/device/camera/BaumerCamera.java b/bolt-kernel/src/main/java/com/jiluo/bolt/device/camera/BaumerCamera.java new file mode 100644 index 0000000..faa7f2f --- /dev/null +++ b/bolt-kernel/src/main/java/com/jiluo/bolt/device/camera/BaumerCamera.java @@ -0,0 +1,46 @@ +package com.jiluo.bolt.device.camera; + +import com.alibaba.fastjson.JSON; +import com.jiluo.bolt.OKHttp.OkHttpUtil; +import com.jiluo.bolt.device.AbstractDevice; +import com.jiluo.bolt.device.DeviceStatus; +import com.jiluo.bolt.device.DeviceType; +import com.jiluo.bolt.device.DeviceVender; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.Map; + +/** + * Created with IntelliJ IDEA. + * + * @Author: fy + * @Date: 2023/09/18/12:02 + * @Description: + */ +public class BaumerCamera extends AbstractDevice { + + private static final Logger logger = LoggerFactory.getLogger(BaumerCamera.class); + + public BaumerCamera(String identity) { + super(DeviceType.camera, identity); + deviceStatus = DeviceStatus.online; + } + + @Override + public boolean config(Map input) { + deviceStatus = DeviceStatus.ready; + return Boolean.parseBoolean(OkHttpUtil.postJson(DeviceType.camera.name(), DeviceVender.BaumerCamera.getVender(),"config", JSON.toJSONString(input))); + } + + @Override + public boolean open(Map input) { + deviceStatus = DeviceStatus.open; + return Boolean.parseBoolean(OkHttpUtil.postJson(DeviceType.camera.name(), DeviceVender.BaumerCamera.getVender(),"start",JSON.toJSONString(input))); + } + @Override + public boolean close(Map input) { + deviceStatus = DeviceStatus.close; + return Boolean.parseBoolean(OkHttpUtil.postJson(DeviceType.camera.name(), DeviceVender.BaumerCamera.getVender(),"stop",JSON.toJSONString(input))); + } +} diff --git a/bolt-kernel/src/main/java/com/jiluo/bolt/device/camera/LucidCamera.java b/bolt-kernel/src/main/java/com/jiluo/bolt/device/camera/LucidCamera.java new file mode 100644 index 0000000..6f12db5 --- /dev/null +++ b/bolt-kernel/src/main/java/com/jiluo/bolt/device/camera/LucidCamera.java @@ -0,0 +1,48 @@ +package com.jiluo.bolt.device.camera; + +import com.alibaba.fastjson.JSON; +import com.jiluo.bolt.OKHttp.OkHttpUtil; +import com.jiluo.bolt.device.DeviceStatus; +import com.jiluo.bolt.device.DeviceType; +import com.jiluo.bolt.device.AbstractDevice; +import com.jiluo.bolt.device.DeviceVender; +import lombok.extern.slf4j.Slf4j; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import java.util.Map; + +/** + * Created with IntelliJ IDEA. + * + * @Author: fy + * @Date: 2023/07/03/19:23 + * @Description: + */ +@Slf4j +public class LucidCamera extends AbstractDevice { + + private static final Logger logger = LoggerFactory.getLogger(LucidCamera.class); + + public LucidCamera(String identity) { + super(DeviceType.camera, identity); + deviceStatus = DeviceStatus.online; + } + + @Override + public boolean config(Map input) { + deviceStatus = DeviceStatus.ready; + return Boolean.parseBoolean(OkHttpUtil.postJson(DeviceType.camera.name(), DeviceVender.LucidCamera.getVender(), "config", JSON.toJSONString(input))); + } + + @Override + public boolean open(Map input) { + deviceStatus = DeviceStatus.open; + return Boolean.parseBoolean(OkHttpUtil.postJson(DeviceType.camera.name(), DeviceVender.LucidCamera.getVender(), "start", JSON.toJSONString(input))); + } + + @Override + public boolean close(Map input) { + deviceStatus = DeviceStatus.close; + return Boolean.parseBoolean(OkHttpUtil.postJson(DeviceType.camera.name(), DeviceVender.LucidCamera.getVender(), "stop", JSON.toJSONString(input))); + } +} diff --git a/bolt-kernel/src/main/java/com/jiluo/bolt/device/camera/MockCamera.java b/bolt-kernel/src/main/java/com/jiluo/bolt/device/camera/MockCamera.java new file mode 100644 index 0000000..97a8034 --- /dev/null +++ b/bolt-kernel/src/main/java/com/jiluo/bolt/device/camera/MockCamera.java @@ -0,0 +1,160 @@ +package com.jiluo.bolt.device.camera; + +import com.jiluo.bolt.common.DefectType; +import com.jiluo.bolt.common.DetectResult; +import com.jiluo.bolt.device.DeviceStatus; +import com.jiluo.bolt.device.DeviceType; +import com.jiluo.bolt.device.AbstractDevice; +import com.jiluo.bolt.engine.Engine; +import lombok.extern.slf4j.Slf4j; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.io.File; +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.StandardCopyOption; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.Random; +import java.util.concurrent.atomic.AtomicInteger; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +/** + * Created with IntelliJ IDEA. + * + * @Author: fy + * @Date: 2023/07/03/19:23 + * @Description: + */ +@Slf4j +public class MockCamera extends AbstractDevice { + + private static final Logger logger = LoggerFactory.getLogger(MockCamera.class); + + public MockCamera(String identity) { + super(DeviceType.camera, identity); + deviceStatus = DeviceStatus.online; + } + + @Override + public boolean config(Map input) { + deviceStatus = DeviceStatus.ready; + return true; + } + + @Override + public boolean open(Map input) { + deviceStatus = DeviceStatus.open; + String destinationFolderPath = input.get("defect_work_dir") + "/detect"; + String sourceFolderPath = "/data/record/job_mock/detect"; + File folder = new File(sourceFolderPath); + File[] files = folder.listFiles(); // 获取文件夹下的所有文件 + List fileNames = new ArrayList<>(); + if (files != null) { + for (File file : files) { + if (file.isFile()) { + fileNames.add(file.getName()); // 将文件名添加到列表 + } + } + } + File destinationFolder = new File(destinationFolderPath); + if (!destinationFolder.exists()) { + destinationFolder.mkdirs(); // 创建目标文件夹(包括父文件夹) + } + try { + Path sourcePath = new File(sourceFolderPath).toPath(); + Path destinationPath = new File(destinationFolderPath).toPath(); + Files.walk(sourcePath) + .forEach(source -> { + try { + Path destination = destinationPath.resolve(sourcePath.relativize(source)); + Files.copy(source, destination, StandardCopyOption.REPLACE_EXISTING); + } catch (IOException e) { + logger.error("无法复制文件:" + e.getMessage()); + } + }); + logger.info("文件夹复制成功!"); + } catch (IOException e) { + logger.error("无法复制文件夹:" + e.getMessage()); + } + + float minValue = 0.0f; + float maxValue = 1.0f; + Random random = new Random(); + float detect_threshold_bolt = Float.parseFloat(input.get("detect_threshold_bolt").toString()); + float detect_threshold_line = Float.parseFloat(input.get("detect_threshold_line").toString()); + int detect_work_zone = Integer.parseInt(input.get("detect_work_zone").toString()); + + for (int index = 1; index <= fileNames.size(); index++) { + String fileName = fileNames.get(index % fileNames.size()); + + int zone; + float[] value = new float[8]; + int firstUnderscoreIndex = fileName.indexOf("_"); + int secondUnderscoreIndex = fileName.indexOf("_", firstUnderscoreIndex + 1); + + + if (firstUnderscoreIndex != -1) { + String zonePart = fileName.substring(0, firstUnderscoreIndex); + zone = Integer.parseInt(zonePart); + } else { + zone = (index % detect_work_zone) + 1; + } + if (secondUnderscoreIndex != -1) { + String valuePart = fileName.substring(firstUnderscoreIndex + 1, secondUnderscoreIndex); + regex(valuePart,value); + } else { + for (int i = 0; i < value.length; i++) { + value[i] = minValue + random.nextFloat() * (maxValue - minValue); + } + } + + + List detectList = new ArrayList<>(); + for (int i = 1; i <= 8; i++) { + detectList.add(DetectResult.builder().zone(zone) + .position(i) + .type(DefectType.bolt.name()) + .value(value[i - 1]) + .img(fileName) + .alarm(value[i - 1] > detect_threshold_bolt ? 1 : 0).build()); + } + for (int i = 1; i <= 2; i++) { + float value1 = minValue + random.nextFloat() * (maxValue - minValue); + detectList.add(DetectResult.builder().zone(zone) + .position(i) + .type(DefectType.line.name()) + .value(value1) + .img(fileName) + .alarm(value1 > detect_threshold_line ? 1 : 0).build()); + } + Engine.callback(input.get("jobId").toString(), detectList); + } + return true; + } + + @Override + public boolean close(Map input) { + deviceStatus = DeviceStatus.close; + return true; + } + + private static void regex(String input, float[] value) { + // 定义正则表达式 + String regex = "(\\d+)\\((\\d+)\\)"; + Pattern pattern = Pattern.compile(regex); + Matcher matcher = pattern.matcher(input); + + // 查找匹配项 + while (matcher.find()) { + // 提取匹配的值 + String positionStr = matcher.group(1); + String valueStr = matcher.group(2); + value[Integer.parseInt(positionStr)] = Float.parseFloat(valueStr) / 100; + } + } +} diff --git a/bolt-kernel/src/main/java/com/jiluo/bolt/device/plc/MathvisionPlc.java b/bolt-kernel/src/main/java/com/jiluo/bolt/device/plc/MathvisionPlc.java new file mode 100644 index 0000000..1a500dd --- /dev/null +++ b/bolt-kernel/src/main/java/com/jiluo/bolt/device/plc/MathvisionPlc.java @@ -0,0 +1,122 @@ +package com.jiluo.bolt.device.plc; + +import com.alibaba.fastjson.JSON; +import com.jiluo.bolt.device.DeviceStatus; +import com.jiluo.bolt.device.DeviceType; +import com.jiluo.bolt.device.AbstractDevice; +import com.jiluo.bolt.modbusTcp.utils.Modbus4jReadUtils; +import com.jiluo.bolt.modbusTcp.utils.Modbus4jWriteUtils; +import com.serotonin.modbus4j.ModbusFactory; +import com.serotonin.modbus4j.ModbusMaster; +import com.serotonin.modbus4j.ip.IpParameters; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.HashSet; +import java.util.Map; +import java.util.Queue; +import java.util.Set; + +/** + * Created with IntelliJ IDEA. + * + * @Author: fy + * @Date: 2023/07/03/19:24 + * @Description: + */ + +public class MathvisionPlc extends AbstractDevice { + + private static final Logger logger = LoggerFactory.getLogger(MathvisionPlc.class); + private static final ModbusFactory modbusFactory = new ModbusFactory(); + private final ModbusMaster modbusMaster; + private final Modbus4jWriteUtils modbus4jWriteUtils; + private final Modbus4jReadUtils modbus4jReadUtils; + private static Set POINTS = new HashSet<>(); + public MathvisionPlc(String identity) throws Exception { + super(DeviceType.plc, identity); + modbusMaster = getMaster(identity, 502); + modbus4jWriteUtils = new Modbus4jWriteUtils(); + modbus4jReadUtils = new Modbus4jReadUtils(); + logger.info("[MathvisionPlc] init; plc值:"+ JSON.toJSONString(modbus4jReadUtils.readHoldingRegister(modbusMaster,1,000,1))); + deviceStatus = DeviceStatus.online; + } + + @Override + public boolean config(Map input) { + if(!modbusMaster.isConnected()){ + deviceStatus = DeviceStatus.offline; + return false; + } + deviceStatus = DeviceStatus.ready; + return true; + } + + @Override + public boolean open(Map input) { + boolean flag = true; + try { + if (input.get("serial_number") == null || input.get("plc_delay")==null)return false; + POINTS.add(input.get("serial_number").toString()); + + if (deviceStatus != DeviceStatus.open){ + flag = modbus4jWriteUtils.writeRegister(modbusMaster,1,000,(short) 1); + logger.info("[MathvisionPlc] open; plc值:"+ JSON.toJSONString(modbus4jReadUtils.readHoldingRegister(modbusMaster,1,000,1))); + deviceStatus = DeviceStatus.open; + } + + Long _plc_delay = Long.parseLong(input.get("plc_delay").toString()); + logger.info("相机延时开启时间:"+_plc_delay+"s"); + Thread.sleep(_plc_delay * 1000); + } catch (Exception e) { + flag = false; + deviceStatus = DeviceStatus.offline; + logger.error("[MathvisionPlc] open exception:" + e.getMessage(), e); + } + return flag; + } + + @Override + public boolean close(Map input) { + boolean flag = true; + try { + POINTS.remove(input.get("serial_number")); + if (POINTS.isEmpty()){ + deviceStatus = DeviceStatus.close; + flag = modbus4jWriteUtils.writeRegister(modbusMaster,1,000,(short) 0); + logger.info("[MathvisionPlc] PLC已关闭! IP:" + identity); + logger.info("[MathvisionPlc] close; plc值:"+ JSON.toJSONString(modbus4jReadUtils.readHoldingRegister(modbusMaster,1,000,1))); + }else { + logger.info("[MathvisionPlc] 存在其他PLC控制设备还在开启中! 已完成的设备序列号为:" + input.get("serial_number")); + } + } catch (Exception e) { + flag = false; + deviceStatus = DeviceStatus.offline; + logger.error("[MathvisionPlc] close exception:" + e.getMessage(), e); + } + return flag; + } + + @Override + public DeviceStatus status() { + return deviceStatus; + } + + public static ModbusMaster getMaster(String ip, int port) throws Exception { + IpParameters params = new IpParameters(); + params.setHost(ip); + params.setPort(port); + //这个属性确定了协议帧是否是通过tcp封装的RTU结构,采用modbus tcp/ip时,要设为false, 采用modbus rtu over tcp/ip时,要设为true + params.setEncapsulated(false); + // 参数1:IP和端口信息 参数2:保持连接激活 + ModbusMaster master = modbusFactory.createTcpMaster(params, true); + //设置超时时间 + master.setTimeout(500); + //设置重连次数 + master.setRetries(2); + master.setConnected(true); + //初始化 + master.init(); + return master; + } +} diff --git a/bolt-kernel/src/main/java/com/jiluo/bolt/device/plc/MockPlc.java b/bolt-kernel/src/main/java/com/jiluo/bolt/device/plc/MockPlc.java new file mode 100644 index 0000000..41adf6d --- /dev/null +++ b/bolt-kernel/src/main/java/com/jiluo/bolt/device/plc/MockPlc.java @@ -0,0 +1,73 @@ +package com.jiluo.bolt.device.plc; + +import com.alibaba.fastjson.JSON; +import com.jiluo.bolt.device.DeviceStatus; +import com.jiluo.bolt.device.DeviceType; +import com.jiluo.bolt.device.AbstractDevice; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.HashSet; +import java.util.Map; +import java.util.Set; + +/** + * Created with IntelliJ IDEA. + * + * @Author: fy + * @Date: 2023/07/03/19:24 + * @Description: + */ +public class MockPlc extends AbstractDevice { + private static final Logger logger = LoggerFactory.getLogger(MockPlc.class); + private static Set POINTS = new HashSet<>(); + + public MockPlc(String identity) { + super(DeviceType.plc, identity); + deviceStatus = DeviceStatus.online; + } + + @Override + public boolean config(Map input) { + deviceStatus = DeviceStatus.ready; + return true; + } + + @Override + public boolean open(Map input) { + try { + if (input.get("plc_delay")==null) return false; + POINTS.add(input.get("serial_number").toString()); + if (deviceStatus != DeviceStatus.open){ + logger.info("plc开启!"); + deviceStatus = DeviceStatus.open; + } + Long _plc_delay = Long.parseLong(input.get("plc_delay").toString()); + logger.info("相机延时开启时间:"+_plc_delay+"s"); + Thread.sleep(_plc_delay * 1000); + + } catch (Exception e) { + logger.error("[MockPlc] open:",e.getMessage(),e); + } + return true; + } + + @Override + public boolean close(Map input) { + POINTS.remove(input.get("serial_number")); + if (POINTS.isEmpty()){ + deviceStatus = DeviceStatus.close; + logger.info("[MockPlc] PLC已关闭! IP:" + identity); + }else { + logger.info("[MockPlc] 存在其他PLC控制设备还在开启中! 已完成的设备序列号为:" + input.get("serial_number")); + } + + deviceStatus = DeviceStatus.close; + return true; + } + + @Override + public DeviceStatus status() { + return deviceStatus; + } +} diff --git a/bolt-kernel/src/main/java/com/jiluo/bolt/device/sensor/CameraTemperatureSensor.java b/bolt-kernel/src/main/java/com/jiluo/bolt/device/sensor/CameraTemperatureSensor.java new file mode 100644 index 0000000..9594a49 --- /dev/null +++ b/bolt-kernel/src/main/java/com/jiluo/bolt/device/sensor/CameraTemperatureSensor.java @@ -0,0 +1,47 @@ +package com.jiluo.bolt.device.sensor; + +import com.alibaba.fastjson.JSON; +import com.jiluo.bolt.OKHttp.OkHttpUtil; +import com.jiluo.bolt.device.DeviceStatus; +import com.jiluo.bolt.device.DeviceType; +import com.jiluo.bolt.device.AbstractDevice; +import com.jiluo.bolt.device.DeviceVender; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.Map; + +/** + * Created with IntelliJ IDEA. + * + * @Author: fy + * @Date: 2023/07/07/13:56 + * @Description: + */ +public class CameraTemperatureSensor extends AbstractDevice { + + private static final Logger logger = LoggerFactory.getLogger(CameraTemperatureSensor.class); + public CameraTemperatureSensor(String identity) { + super(DeviceType.temperature_sensor, identity); + deviceStatus = DeviceStatus.online; + } + + @Override + public boolean config(Map input) { + deviceStatus = DeviceStatus.ready; + if (! input.containsKey("relatedDeviceVendor")) return false; + return Boolean.parseBoolean(OkHttpUtil.postJson("temperature", input.get("relatedDeviceVendor").toString(),"config", JSON.toJSONString(input))); + } + + @Override + public boolean open(Map input) { + deviceStatus = DeviceStatus.open; + return true; + } + + @Override + public boolean close(Map input) { + deviceStatus = DeviceStatus.close; + return true; + } +} diff --git a/bolt-kernel/src/main/java/com/jiluo/bolt/device/sensor/MockTemperatureSensor.java b/bolt-kernel/src/main/java/com/jiluo/bolt/device/sensor/MockTemperatureSensor.java new file mode 100644 index 0000000..80052d0 --- /dev/null +++ b/bolt-kernel/src/main/java/com/jiluo/bolt/device/sensor/MockTemperatureSensor.java @@ -0,0 +1,80 @@ +package com.jiluo.bolt.device.sensor; + +import com.jiluo.bolt.common.DefectType; +import com.jiluo.bolt.common.DetectResult; +import com.jiluo.bolt.device.AbstractDevice; +import com.jiluo.bolt.device.DeviceStatus; +import com.jiluo.bolt.device.DeviceType; +import com.jiluo.bolt.engine.Engine; +import com.jiluo.bolt.engine.EngineDriver; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.Random; +import java.util.concurrent.CompletableFuture; + +/** + * Created with IntelliJ IDEA. + * + * @Author: fy + * @Date: 2023/07/07/13:56 + * @Description: + */ +@Slf4j +public class MockTemperatureSensor extends AbstractDevice { + + private static CompletableFuture CurrentJob; + + public MockTemperatureSensor(String identity) { + super(DeviceType.temperature_sensor, identity); + deviceStatus = DeviceStatus.online; + } + + @Override + public boolean config(Map input) { + deviceStatus = DeviceStatus.ready; + return true; + } + + @Override + public boolean open(Map input) { + String jobId = input.get("jobId").toString(); + if (StringUtils.isBlank(jobId)) { + return false; + } + deviceStatus = DeviceStatus.open; + Random random = new Random(); + CurrentJob = CompletableFuture.runAsync(() -> { + try { + Thread.sleep(5000); + while (EngineDriver.tempSensorMap.containsKey(identity) && EngineDriver.tempSensorMap.get(identity).status().equals(DeviceStatus.open)) { + Thread.sleep(1000); + List detectResultList = new ArrayList<>(); + detectResultList.add(DetectResult.builder().zone(1).position(1).type(DefectType.temperature.name()).value(40.0f + random.nextFloat() * 10.0f).img("-").alarm(0).build()); + Engine.callback(jobId, detectResultList); + } + } catch (Exception e) { + log.error("[MockTemperatureSensor] open:", e.getMessage(), e); + } + }); + CurrentJob.handle((result, ex) -> { + if (ex != null) { + log.error("[MockTemperatureSensor] CurrentJob: " + ex); + } + return result; + }); + return true; + } + + @Override + public boolean close(Map input) { + if (CurrentJob != null && !CurrentJob.isDone()) { + CurrentJob.cancel(true); + } + deviceStatus = DeviceStatus.close; + return true; + } +} diff --git a/bolt-kernel/src/main/java/com/jiluo/bolt/device/sensor/RFIDTemperatureSensor.java b/bolt-kernel/src/main/java/com/jiluo/bolt/device/sensor/RFIDTemperatureSensor.java new file mode 100644 index 0000000..94b1e00 --- /dev/null +++ b/bolt-kernel/src/main/java/com/jiluo/bolt/device/sensor/RFIDTemperatureSensor.java @@ -0,0 +1,47 @@ +package com.jiluo.bolt.device.sensor; + +import com.jiluo.bolt.common.DefectType; +import com.jiluo.bolt.common.DetectResult; +import com.jiluo.bolt.device.DeviceStatus; +import com.jiluo.bolt.device.DeviceType; +import com.jiluo.bolt.device.AbstractDevice; +import com.jiluo.bolt.engine.Engine; +import org.apache.commons.lang3.StringUtils; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.Random; + +/** + * Created with IntelliJ IDEA. + * + * @Author: fy + * @Date: 2023/07/07/13:56 + * @Description: + */ +public class RFIDTemperatureSensor extends AbstractDevice { + + public RFIDTemperatureSensor(String identity) { + super(DeviceType.temperature_sensor, identity); + deviceStatus = DeviceStatus.online; + } + + @Override + public boolean config(Map input) { + deviceStatus = DeviceStatus.ready; + return true; + } + + @Override + public boolean open(Map input) { + deviceStatus = DeviceStatus.open; + return true; + } + + @Override + public boolean close(Map input) { + deviceStatus = DeviceStatus.close; + return true; + } +} diff --git a/bolt-kernel/src/main/java/com/jiluo/bolt/engine/AbstractEngine.java b/bolt-kernel/src/main/java/com/jiluo/bolt/engine/AbstractEngine.java new file mode 100644 index 0000000..6937571 --- /dev/null +++ b/bolt-kernel/src/main/java/com/jiluo/bolt/engine/AbstractEngine.java @@ -0,0 +1,23 @@ +package com.jiluo.bolt.engine; + +import com.jiluo.bolt.common.DetectJob; + +/** + * Created with IntelliJ IDEA. + * + * @Author: fy + * @Date: 2023/07/03/20:02 + * @Description: + */ +public abstract class AbstractEngine implements IEngine { + + protected DetectJob job; + + public AbstractEngine(DetectJob job) { + this.job = job; + } + + public DetectJob get() { + return job; + } +} \ No newline at end of file diff --git a/bolt-kernel/src/main/java/com/jiluo/bolt/engine/BoltEngine.java b/bolt-kernel/src/main/java/com/jiluo/bolt/engine/BoltEngine.java new file mode 100644 index 0000000..eaa0dbb --- /dev/null +++ b/bolt-kernel/src/main/java/com/jiluo/bolt/engine/BoltEngine.java @@ -0,0 +1,143 @@ +package com.jiluo.bolt.engine; + +import com.jiluo.bolt.algorithm.AlgorithmName; +import com.jiluo.bolt.algorithm.IAlgorithm; +import com.jiluo.bolt.common.DetectJob; +import com.jiluo.bolt.common.DetectResult; +import com.jiluo.bolt.device.IDevice; +import com.jiluo.bolt.entity.po.Detect; +import com.jiluo.bolt.util.SnowFlakeUtil; +import com.jiluo.bolt.util.SpringContextHolder; +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import java.util.ArrayList; +import java.util.List; + +/** + * Created with IntelliJ IDEA. + * + * @Author: fy + * @Date: 2023/07/03/20:14 + * @Description: + */ + +public class BoltEngine extends AbstractEngine { + + private static final Logger logger = LoggerFactory.getLogger(BoltEngine.class); + + private List LOCALDETECT = new ArrayList<>(); + + DataCallBack dataCallBack = SpringContextHolder.getBean(DataCallBack.class); + + public BoltEngine(DetectJob job) { + super(job); + } + + @Override + public boolean run() { + + IDevice plc = null; + + IDevice camera = null; + + IAlgorithm algorithm = null; + + String plcIp = job.getConfig().getString("plc_ip"); + + String cameraId = job.getDeviceId(); + + String algorithmName = job.getConfig().getString("algorithm_name"); + + String algorithmType = job.getConfig().getString("algorithm_type"); + + String algorithmId = job.getConfig().getString("algorithm_id"); + + if (StringUtils.isNotBlank(plcIp) && EngineDriver.plcMap.containsKey(plcIp) && + StringUtils.isNotBlank(cameraId) && EngineDriver.cameraMap.containsKey(cameraId) && + StringUtils.isNotBlank(algorithmName) && StringUtils.isNotBlank(algorithmType)) { + + plc = EngineDriver.plcMap.get(plcIp); + + camera = EngineDriver.cameraMap.get(cameraId); + + try { + algorithm = AlgorithmName.getByName(algorithmName).getClazz().getDeclaredConstructor(String.class).newInstance(algorithmId); + } catch (Exception e) { + logger.error("[BoltEngine] run:", e.getMessage(), e); + } + } + + if (plc == null || camera == null || algorithm == null) { + job.setStatus(2); + dataCallBack.addAlarm("获取plc、相机或者算法失败!", job.getPoint()); + return false; + } + + if (!plc.open(job.getConfig())) { + job.setStatus(2); + dataCallBack.addAlarm("plc开启失败!", job.getPoint()); + return false; + } + + if (!camera.config(job.getConfig())) { + job.setStatus(2); + dataCallBack.addAlarm("相机配置下发失败!", job.getPoint()); + return false; + } + + if (!algorithm.config(job.getConfig())) { + job.setStatus(2); + dataCallBack.addAlarm("算法配置下发失败!", job.getPoint()); + return false; + } + + long startTime = System.currentTimeMillis(); + + if (!camera.open(job.getConfig())) { + job.setStatus(2); + dataCallBack.addAlarm("相机开启失败!", job.getPoint()); + return false; + } + + long endTime = System.currentTimeMillis(); + logger.info("【相机-开启-采图】代码运行总耗时:" + (endTime - startTime) + " ms"); + + if (!camera.close(job.getConfig())) { + job.setStatus(2); + dataCallBack.addAlarm("相机关闭失败!", job.getPoint()); + return false; + } + + if (!plc.close(job.getConfig())) { + job.setStatus(2); + dataCallBack.addAlarm("plc关闭失败!", job.getPoint()); + return false; + } + + dataCallBack.detectSaveDB(LOCALDETECT); + + job.setStatus(dataCallBack.defectSaveDB(job.getPowerStation(), job.getMotorGroup(), job.getPoint(), job.getJobId(), job.getDeviceId())); + + return true; + } + + @Override + public void callback(List detectList) { + + dataCallBack.DetectData(job.getPowerStation(), job.getMotorGroup(), job.getPoint(), job.getJobId(), job.getDeviceId(), detectList); + + Detect detect = new Detect(); + + detect.setBizId("detect_" + SnowFlakeUtil.getDefaultSnowFlakeId()) + .setPowerStation(job.getPowerStation()) + .setMotorGroup(job.getMotorGroup()) + .setPoint(job.getPoint()) + .setJob(job.getJobId()) + .setZone(detectList.get(0).getZone()) + .setData(detectList.get(0).getImg()) + .setDevice(job.getDeviceId()); + + LOCALDETECT.add(detect); + } +} \ No newline at end of file diff --git a/bolt-kernel/src/main/java/com/jiluo/bolt/engine/DataCallBack.java b/bolt-kernel/src/main/java/com/jiluo/bolt/engine/DataCallBack.java new file mode 100644 index 0000000..d9e3f88 --- /dev/null +++ b/bolt-kernel/src/main/java/com/jiluo/bolt/engine/DataCallBack.java @@ -0,0 +1,335 @@ +package com.jiluo.bolt.engine; + +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.jiluo.bolt.common.*; +import com.jiluo.bolt.config.UploadFile; +import com.jiluo.bolt.entity.po.*; +import com.jiluo.bolt.service.*; +import com.jiluo.bolt.util.CSVUtils; +import com.jiluo.bolt.util.SnowFlakeUtil; +import com.jiluo.bolt.util.SystemDateUtils; +import com.jiluo.bolt.websocket.WebSocket; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; +import java.math.BigDecimal; +import java.math.RoundingMode; +import java.time.LocalDate; +import java.time.format.DateTimeFormatter; +import java.util.*; +import java.util.concurrent.ConcurrentHashMap; +import java.util.function.Function; +import java.util.function.Predicate; +import java.util.stream.Collectors; + +/** + * Created with IntelliJ IDEA. + * + * @Author: fy + * @Date: 2023/07/10/11:12 + * @Description: + */ +@Slf4j +@Component +public class DataCallBack { + private Map> allDefect = new ConcurrentHashMap<>(); + public static Map allTemperatureData = new ConcurrentHashMap<>(); + + @Value("${defect_work_dir}") + private String defect_work_dir; + + @Value("${defect_csv_dir}") + private String defect_csv_dir; + + @Value("${max_file_keep_time}") + private Integer max_file_keep_time; + + @Resource + private PowerStationService powerStationService; + @Resource + private MotorGroupService motorGroupService; + @Resource + private PointService pointService; + @Resource + private DeviceService deviceService; + @Resource + private DefectService defectService; + @Resource + private DetectService detectService; + @Resource + private JobService jobService; + @Resource + private AlarmService alarmService; + @Resource + private WebSocket webSocket; + @Resource + private CSVUtils csvUtils; + @Resource + private UploadFile uploadFile; + + public void DetectData(String powerStationId, String motorGroupId, String pointId, String jobId, String deviceId, List detectList) { + if (StringUtils.isAnyBlank(powerStationId, motorGroupId, pointId, jobId, deviceId) || detectList == null || detectList.isEmpty()) { + return; + } + + List imgs = new ArrayList<>(); + List detects_websocket = new ArrayList<>(); + + detectList.stream().filter(distinctByKey(DetectResult::getZone)).forEach(detectResult -> { + JSONObject img = new JSONObject(); + img.put("zone", detectResult.getZone()); + img.put("data", detectResult.getImg()); + imgs.add(img); + }); + webSocket.sendImgMessage(pointId, imgs); + updateDefect(jobId, detectList).forEach(detectResult -> { + JSONObject detect = new JSONObject(); + detect.put("zone", detectResult.getZone()); + detect.put("position", detectResult.getPosition()); + detect.put("type", detectResult.getType()); + detect.put("value", detectResult.getValue()); + detect.put("alarm", detectResult.getAlarm() != 0 ? 1 : 0); + detects_websocket.add(detect); + }); + if (!detects_websocket.isEmpty()) { + webSocket.sendBoltMessage(pointId, detects_websocket); + } + } + + private List updateDefect(String jobId, List detectListInput) { + if (allDefect == null || allDefect.isEmpty() || allDefect.get(jobId) == null || allDefect.get(jobId).isEmpty()) { + allDefect.put(jobId, detectListInput); + return detectListInput; + } else { + List detectListStored = allDefect.get(jobId); + Map detectMapStored = createDetectResultMap(detectListStored); + + List detectResultListReturn = new ArrayList<>(); + + List newDetectListStored = new ArrayList<>(detectListStored); + for (DetectResult detect : detectListInput) { + DetectResultKey detectKey = new DetectResultKey(detect); + DetectResult detect1 = detectMapStored.get(detectKey); + if (detect1 == null) { + newDetectListStored.add(detect); +// detectListStored.add(detect); + detectMapStored.put(detectKey, detect); + detectResultListReturn.add(detect); + } else { + if (detect.getValue() > detect1.getValue()) { + detect1.setValue(detect.getValue()); + detect1.setImg(detect.getImg()); + detect1.setAlarm(detect.getAlarm()); + detectResultListReturn.add(detect); + } + } + } + allDefect.put(jobId, newDetectListStored); + return detectResultListReturn; + } + } + + public void detectSaveDB(List detectList) { + detectService.saveBatch(detectList); + } + + public int defectSaveDB(String powerStationId, String motorGroupId, String pointId, String jobId, String deviceId) { + if (allDefect == null || allDefect.isEmpty() || allDefect.get(jobId) == null || allDefect.get(jobId).isEmpty()) { + log.error("[DataCallBack] saveDB: 参数缺失"); + return 2; + } else { + List defects = new ArrayList<>(); + allDefect.get(jobId).stream().forEach(detectResult -> { + BigDecimal _value = (detectResult.getType().equals(DefectType.bolt.name()) || detectResult.getType().equals(DefectType.temperature.name())) ? + BigDecimal.valueOf(detectResult.getValue() * 100).setScale(0, RoundingMode.HALF_UP) : + (detectResult.getType().equals(DefectType.line.name()) ? + BigDecimal.valueOf(detectResult.getValue() * 1000).setScale(0, RoundingMode.HALF_UP) : + BigDecimal.valueOf(detectResult.getValue())); + Defect defect = new Defect(); + defects.add(defect.setBizId("defect_" + SnowFlakeUtil.getDefaultSnowFlakeId()) + .setPowerStation(powerStationId) + .setMotorGroup(motorGroupId) + .setPoint(pointId) + .setJob(jobId) + .setDevice(deviceId) + .setType(detectResult.getType()) + .setZone(detectResult.getZone()) + .setPosition(detectResult.getPosition()) + .setValue(_value.intValue()) + .setData(detectResult.getImg()) + .setAlarm(detectResult.getAlarm() == 0 ? 0 : 1) + .setStatus(0)); + }); + allDefect.remove(jobId); + if (defectService.saveBatch(defects) && StringUtils.isNotBlank(defect_csv_dir)) { + csvUtils.generateCSV(defectCSV(defects), defect_csv_dir, jobId); + } + return createAttribute(defects, pointId, jobId); + } + } + + @Scheduled(cron = "0 0 1 * * ?") + private void autoDelete() { + LocalDate currentDate = LocalDate.now(); + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); + String formattedDate = currentDate.format(formatter); + String endTime = LocalDate.parse(formattedDate).minusDays(max_file_keep_time).toString(); + if (StringUtils.isNotBlank(endTime)) { + jobService.remove(Wrappers.query().lambda().lt(Job::getGmtCreate, endTime)); + detectService.remove(Wrappers.query().lambda().lt(Detect::getGmtCreate, endTime)); + defectService.remove(Wrappers.query().lambda().lt(Defect::getGmtCreate, endTime)); + } + } + + public void temperatureData(String powerStationId, String motorGroupId, String pointId, String jobId, String deviceId, List detectList) { + if (StringUtils.isNotBlank(powerStationId) && StringUtils.isNotBlank(motorGroupId) && StringUtils.isNotBlank(pointId) && StringUtils.isNotBlank(jobId) && + StringUtils.isNotBlank(deviceId) && detectList != null && detectList.size() > 0) { + updateTemperature(powerStationId, motorGroupId, pointId, jobId, deviceId, detectList); + } + } + + private void updateTemperature(String powerStationId, String motorGroupId, String pointId, String jobId, String deviceId, List detectList) { + detectList.forEach(detectResult -> { + BigDecimal _value = BigDecimal.valueOf(detectResult.getValue() * 100).setScale(0, RoundingMode.HALF_UP); + if (allTemperatureData.get(pointId) == null) { + Defect defect = new Defect(); + defect.setBizId("defect_" + SnowFlakeUtil.getDefaultSnowFlakeId()) + .setPowerStation(powerStationId) + .setMotorGroup(motorGroupId) + .setPoint(pointId) + .setJob(jobId) + .setDevice(deviceId) + .setType(DefectType.temperature.name()) + .setZone(detectResult.getZone()) + .setPosition(detectResult.getPosition()) + .setValue(_value.intValue()) + .setData(detectResult.getImg()) + .setAlarm(detectResult.getAlarm()) + .setStatus(0); + allTemperatureData.put(pointId, defect); + } else if (allTemperatureData.get(pointId).getValue() * 100 < _value.intValue()) { + allTemperatureData.get(pointId).setValue(_value.intValue()).setAlarm(detectResult.getAlarm()); + } + webSocket.sendTemperatureMessage(pointId, detectResult.getValue()); + }); + } + + @Scheduled(cron = "0 0 * * * *") + private void temperatureSaveDB() { + allTemperatureData.forEach((k, v) -> defectService.save(v)); + allTemperatureData.clear(); + } + + private Map createDetectResultMap(List detectList) { + Map detectMap = new HashMap<>(); + for (DetectResult detect : detectList) { + DetectResultKey detectKey = new DetectResultKey(detect); + detectMap.put(detectKey, detect); + } + return detectMap; + } + + private static Predicate distinctByKey(Function keyExtractor) { + Map seen = new ConcurrentHashMap<>(); + return t -> seen.putIfAbsent(keyExtractor.apply(t), Boolean.TRUE) == null; + } + + private List DuplicateRemove(List detectListInput) { + Map resultMap = new HashMap<>(); + + for (DetectResult detectResult : detectListInput) { + String key = detectResult.getZone() + "-" + detectResult.getPosition() + "-" + detectResult.getType(); + DetectResult existingResult = resultMap.get(key); + + if (existingResult == null || detectResult.getValue() > existingResult.getValue()) { + resultMap.put(key, detectResult); + } + } + + return new ArrayList<>(resultMap.values()); + } + + private List defectCSV(List defectList) { + Map powerStationMap = powerStationService.getAll().stream().collect(Collectors.toMap(PowerStation::getPowerStationId, PowerStation::getName)); + Map motorGroupMap = motorGroupService.getAll().stream().collect(Collectors.toMap(MotorGroup::getMotorGroupId, MotorGroup::getName)); + Map pointMap = pointService.getAll().stream().collect(Collectors.toMap(Point::getPointId, Point::getName)); + Map deviceMap = deviceService.selectAll().stream().collect(Collectors.toMap(Device::getDeviceId, Device::getName)); + defectList.forEach(defect -> { + if (powerStationMap.containsKey(defect.getPowerStation())) defect.setPowerStation(defect.getPowerStation()); + if (motorGroupMap.containsKey(defect.getMotorGroup())) defect.setMotorGroup(defect.getMotorGroup()); + if (pointMap.containsKey(defect.getPoint())) defect.setPoint(defect.getPoint()); + if (deviceMap.containsKey(defect.getDevice())) defect.setDevice(defect.getDevice()); + }); + return defectList; + } + + private int createAttribute(List defects, String pointId, String job_id) { + Point point = pointService.getByBizId(pointId); + Map> defectZone = new HashMap<>(); + List bolts = new ArrayList<>(); + List lines = new ArrayList<>(); + List poles = new ArrayList<>(); + List temps = new ArrayList<>(); + defects.stream().filter(defect -> defect.getAlarm() != 0).forEach(defect -> { + if (defect.getType().equals("bolt")) { + bolts.add(defect.getZone()); + } else if (defect.getType().equals("line")) { + lines.add(defect.getZone()); + } else if (defect.getType().equals("pole")) { + poles.add(defect.getZone()); + } else if (defect.getType().equals("temperature")) { + temps.add(defect.getZone()); + } + }); + defectZone.put("螺栓松动", bolts.stream().distinct().sorted().collect(Collectors.toList())); + defectZone.put("引出线变形", lines.stream().distinct().sorted().collect(Collectors.toList())); + defectZone.put("磁极开闸", poles.stream().distinct().sorted().collect(Collectors.toList())); + defectZone.put("温度异常", temps.stream().distinct().sorted().collect(Collectors.toList())); + DetectAttribute detectAttribute = DetectAttribute.builder().productId(DetectType.BOLT_AND_LINE.getProduct()) + .productName(DetectType.BOLT_AND_LINE.getDesc()) + .detectZone(point.getPoleNum()) + .detectTotal(detectService.selectByJob(job_id)) + .detectDuration(point.getManualTime()) + .defectZone(defectZone) + .defectTotal(defects.size()) + .detectTrack(DetectType.BOLT_AND_LINE.getDesc() + "数据分析结束!").build(); + if (defects.stream().filter(x -> x.getAlarm() == 1).collect(Collectors.toList()).size() > 0) { + jobService.updateAttribute(job_id, JSONObject.toJSONString(detectAttribute), 1); + Alarm alarm = new Alarm(); + alarm.setAlarmId("alarm_" + SnowFlakeUtil.getDefaultSnowFlakeId()) + .setType(0) + .setContent(motorGroupService.getByBizId(point.getMotorGroup()).getName() + "/" + point.getName() + "检测异常"); + alarmService.add(alarm); + AlarmService.ALARM_MAP.put(pointId, alarm); + if (DeviceService.DeviceLocalStatus.containsKey(pointId)) { + DeviceService.DeviceLocalStatus.get(pointId).setPointStatus(1); + } + return 1; + } else { + jobService.updateAttribute(job_id, JSONObject.toJSONString(detectAttribute), 0); + if (AlarmService.ALARM_MAP.containsKey(pointId)) AlarmService.ALARM_MAP.remove(pointId); + if (DeviceService.DeviceLocalStatus.containsKey(pointId) && DeviceService.DeviceLocalStatus.get(pointId).equals(1)) { + DeviceService.DeviceLocalStatus.get(pointId).setPointStatus(0); + } + return 0; + } + } + + public void addAlarm(String info, String pointId) { + Point point = pointService.getByBizId(pointId); + Alarm alarm = new Alarm(); + alarm.setAlarmId("alarm_" + SnowFlakeUtil.getDefaultSnowFlakeId()) + .setType(0) + .setContent(point.getName() + ":" + info); + alarm.setGmtCreate(SystemDateUtils.getNewDate()); + AlarmService.ALARM_MAP.put(pointId, alarm); + webSocket.sendStatusMessage(pointId, 0); + } + +} + diff --git a/bolt-kernel/src/main/java/com/jiluo/bolt/engine/Engine.java b/bolt-kernel/src/main/java/com/jiluo/bolt/engine/Engine.java new file mode 100644 index 0000000..72a61d1 --- /dev/null +++ b/bolt-kernel/src/main/java/com/jiluo/bolt/engine/Engine.java @@ -0,0 +1,43 @@ +package com.jiluo.bolt.engine; + +import com.jiluo.bolt.common.DetectJob; +import com.jiluo.bolt.common.DetectResult; +import lombok.SneakyThrows; + +import java.util.List; +import java.util.concurrent.ConcurrentHashMap; + +/** + * Created with IntelliJ IDEA. + * + * @Author: fy + * @Date: 2023/07/03/20:09 + * @Description: + */ +public class Engine { + private static ConcurrentHashMap DETECTS = new ConcurrentHashMap<>(); + + @SneakyThrows + public static boolean run(JobType jobType, DetectJob job) { + job.setStatus(3); + IEngine engine = jobType.clazz.getDeclaredConstructor(DetectJob.class).newInstance(job); + DETECTS.putIfAbsent(job.getJobId(), engine); + engine.run(); + return true; + } + + public static Integer get(String jobId) { + DETECTS.forEach((k,v)->{ + System.out.println(k+":"+v.get().getStatus()); + }); + IEngine engine = DETECTS.get(jobId); + return engine == null ? null : engine.get().getStatus(); + } + + public static void callback(String jobId, List data) { + IEngine engine = DETECTS.get(jobId); + if (engine != null) { + engine.callback(data); + } + } +} diff --git a/bolt-kernel/src/main/java/com/jiluo/bolt/engine/EngineDriver.java b/bolt-kernel/src/main/java/com/jiluo/bolt/engine/EngineDriver.java new file mode 100644 index 0000000..5e83747 --- /dev/null +++ b/bolt-kernel/src/main/java/com/jiluo/bolt/engine/EngineDriver.java @@ -0,0 +1,301 @@ +package com.jiluo.bolt.engine; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.jiluo.bolt.OKHttp.OkHttpUtil; +import com.jiluo.bolt.common.DetectJob; +import com.jiluo.bolt.common.DetectType; +import com.jiluo.bolt.device.DeviceStatus; +import com.jiluo.bolt.device.DeviceType; +import com.jiluo.bolt.device.DeviceVender; +import com.jiluo.bolt.device.IDevice; +import com.jiluo.bolt.entity.po.Device; +import com.jiluo.bolt.common.LocalStatus; +import com.jiluo.bolt.entity.po.DeviceTemplete; +import com.jiluo.bolt.entity.po.Job; +import com.jiluo.bolt.service.DeviceService; +import com.jiluo.bolt.service.DeviceTempleteService; +import com.jiluo.bolt.service.JobService; +import com.jiluo.bolt.util.ShellUtils; +import com.jiluo.bolt.util.SnowFlakeUtil; +import com.jiluo.bolt.util.SystemDateUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.stereotype.Component; + +import javax.annotation.PostConstruct; +import javax.annotation.Resource; +import java.util.*; +import java.util.concurrent.ConcurrentHashMap; +import java.util.stream.Collectors; + +/** + * Created with IntelliJ IDEA. + * + * @Author: fy + * @Date: 2023/07/11/9:59 + * @Description: + */ +@Component +public class EngineDriver { + private static final Logger logger = LoggerFactory.getLogger(EngineDriver.class); + + @Autowired + DeviceTempleteService deviceTempleteService; + + @Autowired + DeviceService deviceService; + + @Value("${device.camera.driver}") + private String cameraDriverStr; + + private List cameraDriverStrList; + + @Resource + private JobService jobService; + + private Integer LucidMonitorErrorTimes = 0; + private Integer BaumerMonitorErrorTimes = 0; + private Integer BaslerMonitorErrorTimes = 0; + + + private Map drivers = new HashMap<>(); + + public static Map plcMap = new ConcurrentHashMap<>(); + public static Map cameraMap = new ConcurrentHashMap<>(); + public static Map tempSensorMap = new ConcurrentHashMap<>(); + + @PostConstruct + public void init() { + drivers = deviceTempleteService.getAll().stream().collect(Collectors.toMap(DeviceTemplete::getBizId, DeviceTemplete::getDrive)); + cameraDriverStrList = Arrays.asList(cameraDriverStr.split(",")); + cameraDriverStrList.forEach(driver -> { + if (driver.equals("Lucid")) RunLucidCameraDriver(); + else if (driver.equals("Baumer")) RunBaumerCameraDriver(); + else if (driver.equals("Basler")) RunBaslerCameraDriver(); + }); + } + + @Scheduled(fixedRate = 1000, initialDelay = 5000) // 每1秒钟执行一次,延迟5秒后开始执行第一次定时任务。 + public void deviceMonitor() { + List deviceList = deviceService.selectAll(); + deviceList.stream().filter(x -> x.getType().equals("camera")).forEach(camera -> { + JSONObject config = JSON.parseObject(camera.getConfig()); + String plcIp = config.getString("PLC_Ip"); + String plcVender = config.getString("PLC_vender"); + String cameraId = camera.getDeviceId(); + if (plcIp == null || plcVender == null) { + logger.info("[EngineDriver] deviceMonitor: plc的ip、vender参数缺失"); + } else { + if (!plcMap.containsKey(plcIp)) { + createPlc(camera); + } else { + if (!plcMap.get(plcIp).getClass().equals(DeviceVender.getByVender(plcVender).getClazz())) { + createPlc(camera); + } else if (plcMap.get(plcIp).status().equals(DeviceStatus.offline)) { + plcOfflineSetStatus(camera.getPointId()); + plcMap.remove(plcIp); + } else if (DeviceService.DeviceLocalStatus.containsKey(camera.getPointId()) && DeviceService.DeviceLocalStatus.get(camera.getPointId()).getPointStatus().equals(2)) { + DeviceService.DeviceLocalStatus.put(camera.getPointId(), LocalStatus.builder().pointStatus(0).cameraStatus(1).tempSensorStatus(1).build()); + } + } + } + if (!cameraMap.containsKey(cameraId)) { + createCamera(camera); + } else { + if (!DeviceVender.getByVender(camera.getVender()).getClazz().equals(cameraMap.get(cameraId).getClass())) { + createCamera(camera); + } + } + }); + deviceList.stream().filter(x -> x.getType().equals("temperature_sensor")).forEach(tempSensor -> { + String tempSensorId = tempSensor.getDeviceId(); + if (!tempSensorMap.containsKey(tempSensorId)) { + createTempSensor(tempSensor); + } else { + if (!DeviceVender.getByVender(tempSensor.getVender()).getClazz().equals(tempSensorMap.get(tempSensorId).getClass())) { + createTempSensor(tempSensor); + } + } + }); + + Set plcIdSet = new HashSet<>(deviceList.size()); + Set cameraIdSet = new HashSet<>(deviceList.size()); + Set tempSensorIdSet = new HashSet<>(deviceList.size()); + deviceList.forEach(x -> { + if (x.getType().equals("camera")) { + plcIdSet.add(JSON.parseObject(x.getConfig()).getString("PLC_Ip")); + cameraIdSet.add(x.getDeviceId()); + } else if (x.getType().equals("temperature_sensor")) { + tempSensorIdSet.add(x.getDeviceId()); + } + }); + plcMap.keySet().retainAll(plcIdSet); + cameraMap.keySet().retainAll(cameraIdSet); + tempSensorMap.keySet().retainAll(tempSensorIdSet); + } + + @Scheduled(fixedRate = 1000) + public void monitor() { + cameraDriverStrList.forEach(driver -> { + if (driver.equals("Lucid")) LucidCameraMonitor(); + else if (driver.equals("Baumer")) BaumerCameraMonitor(); + else if (driver.equals("Basler")) BaslerCameraMonitor(); + }); + } + + private void RunLucidCameraDriver() { + if (drivers.containsKey(DeviceVender.LucidCamera.getVender())) { + ShellUtils.exec(DeviceVender.LucidCamera.getVender(), drivers.get(DeviceVender.LucidCamera.getVender())); + } + } + + private void RunBaumerCameraDriver() { + if (drivers.containsKey(DeviceVender.BaumerCamera.getVender())) { + ShellUtils.exec(DeviceVender.BaumerCamera.getVender(), drivers.get(DeviceVender.BaumerCamera.getVender())); + } + } + + private void RunBaslerCameraDriver() { + if (drivers.containsKey(DeviceVender.BaslerCamera.getVender())) { + ShellUtils.exec(DeviceVender.BaslerCamera.getVender(), drivers.get(DeviceVender.BaslerCamera.getVender())); + } + } + + private void LucidCameraMonitor() { + if (LucidMonitorErrorTimes > 5) { + RunLucidCameraDriver(); + logger.info("lucid相机驱动重启动"); + LucidMonitorErrorTimes = 0; + } + boolean flag = Boolean.parseBoolean(OkHttpUtil.postJson(DeviceType.camera.name(), DeviceVender.LucidCamera.getVender(), "monitor", new JSONObject().toJSONString())); + if (flag) { + LucidMonitorErrorTimes = 0; + } else { + logger.info("lucid相机驱动掉线"); + LucidMonitorErrorTimes++; + } + } + + private void BaumerCameraMonitor() { + if (BaumerMonitorErrorTimes > 5) { + RunBaumerCameraDriver(); + logger.info("Baumer相机驱动重启动"); + BaumerMonitorErrorTimes = 0; + } + boolean flag = Boolean.parseBoolean(OkHttpUtil.postJson(DeviceType.camera.name(), DeviceVender.BaumerCamera.getVender(), "monitor", new JSONObject().toJSONString())); + if (flag) { + BaumerMonitorErrorTimes = 0; + } else { + logger.info("Baumer相机驱动掉线"); + BaumerMonitorErrorTimes++; + } + } + + private void BaslerCameraMonitor() { + if (BaslerMonitorErrorTimes > 5) { + RunBaslerCameraDriver(); + logger.info("Basler相机驱动重启动"); + BaslerMonitorErrorTimes = 0; + } + boolean flag = Boolean.parseBoolean(OkHttpUtil.postJson(DeviceType.camera.name(), DeviceVender.BaslerCamera.getVender(), "monitor", new JSONObject().toJSONString())); + if (flag) { + BaslerMonitorErrorTimes = 0; + } else { + logger.info("Basler相机驱动掉线"); + BaslerMonitorErrorTimes++; + } + } + + private void createPlc(Device camera) { + try { + JSONObject config = JSON.parseObject(camera.getConfig()); + String plcIp = config.getString("PLC_Ip"); + String plcVender = config.getString("PLC_vender"); + IDevice plc = DeviceVender.getByVender(plcVender).getClazz().getDeclaredConstructor(String.class).newInstance(plcIp); + if (plc != null) { + if (!plc.config(config)) { + logger.info("plc连接失败,地址为:" + "plcVender" + plcVender + "plcIp" + plcIp); + plcOfflineSetStatus(camera.getPointId()); + } else { + logger.info("plc连接成功,地址为:" + plcVender + plcIp); + plcMap.put(plcIp, plc); + DeviceService.DeviceLocalStatus.put(camera.getPointId(), LocalStatus.builder().pointStatus(0).cameraStatus(1).tempSensorStatus(1).build()); + } + } else { + logger.info("plc创建失败!" + plcVender + plcIp); + plcOfflineSetStatus(camera.getPointId()); + } + } catch (Exception e) { + logger.error("[EngineDriver] deviceMonitor plc_exception:" + e.getMessage(), e); + plcOfflineSetStatus(camera.getPointId()); + } + } + + private void createCamera(Device camera) { + String cameraId = camera.getDeviceId(); + IDevice _camera = null; + try { + _camera = DeviceVender.getByVender(camera.getVender()).getClazz().getDeclaredConstructor(String.class).newInstance(cameraId); + } catch (Exception e) { + logger.error("[EngineDriver] deviceMonitor camera_exception:" + e.getMessage(), e); + } + if (_camera != null) { + cameraMap.put(cameraId, _camera); + } else { + logger.info("camera创建失败!" + camera.getVender() + cameraId); + } + } + + private void createTempSensor(Device tempSensor) { + String tempSensorId = tempSensor.getDeviceId(); + IDevice _tempSensor = null; + try { + _tempSensor = DeviceVender.getByVender(tempSensor.getVender()).getClazz().getDeclaredConstructor(String.class).newInstance(tempSensorId); + logger.info("温度传感器创建成功! 设备id:" + tempSensorId); + } catch (Exception e) { + logger.error("[EngineDriver] deviceMonitor tempSensor_exception:" + e.getMessage(), e); + } + if (_tempSensor != null) { + tempSensorMap.put(tempSensorId, _tempSensor); + jobService.addJob(createTemperatureJob(tempSensor)); + } else { + logger.info("温度传感器创建失败!" + tempSensor.getVender() + tempSensorId); + } + } + + private void plcOfflineSetStatus(String pointId) { + DeviceService.DeviceLocalStatus.put(pointId, LocalStatus.builder().pointStatus(2).cameraStatus(2).tempSensorStatus(2).build()); + } + + private static Job createTemperatureJob(Device tempSensor) { + String job_id = "job_" + SystemDateUtils.getStrYMD() + "_" + SnowFlakeUtil.getDefaultSnowFlakeId(); + Job job = new Job(); + job.setJobId(job_id) + .setPowerStation(tempSensor.getPowerStationId()) + .setMotorGroup(tempSensor.getMotorGroupId()) + .setPoint(tempSensor.getPointId()) + .setProduct(DetectType.TEMPERATURE.getProduct()) + .setType("自动检测") + .setName(DetectType.TEMPERATURE.getDesc()) + .setDescription(DetectType.TEMPERATURE.getDesc() + "[自动检测]") + .setAttribute(new JSONObject().toJSONString()) + .setConfig(tempSensor.getConfig()) + .setOperator("SYSTEM") + .setStatus(0); + JSONObject config = JSON.parseObject(tempSensor.getConfig()); + config.put("jobId", job_id); + Engine.run(JobType.TEMPERATURE, DetectJob.builder().jobId(job_id) + .powerStation(tempSensor.getPowerStationId()) + .motorGroup(tempSensor.getMotorGroupId()) + .point(tempSensor.getPointId()) + .attribute(new JSONObject()) + .config(config) + .deviceId(tempSensor.getDeviceId()) + .build()); + return job; + } +} diff --git a/bolt-kernel/src/main/java/com/jiluo/bolt/engine/IEngine.java b/bolt-kernel/src/main/java/com/jiluo/bolt/engine/IEngine.java new file mode 100644 index 0000000..9b9e1d2 --- /dev/null +++ b/bolt-kernel/src/main/java/com/jiluo/bolt/engine/IEngine.java @@ -0,0 +1,32 @@ +package com.jiluo.bolt.engine; + +import com.jiluo.bolt.common.DetectJob; +import com.jiluo.bolt.common.DetectResult; + +import java.util.List; + +/** + * Created with IntelliJ IDEA. + * + * @Author: fy + * @Date: 2023/07/03/19:53 + * @Description: + */ +public interface IEngine { + + /** + * 启动检测 + */ + boolean run(); + + /** + * 获取检测任务 + */ + DetectJob get(); + + /** + * 检测结果回调 + * @param detectList + */ + void callback(List detectList); +} \ No newline at end of file diff --git a/bolt-kernel/src/main/java/com/jiluo/bolt/engine/JobType.java b/bolt-kernel/src/main/java/com/jiluo/bolt/engine/JobType.java new file mode 100644 index 0000000..744591e --- /dev/null +++ b/bolt-kernel/src/main/java/com/jiluo/bolt/engine/JobType.java @@ -0,0 +1,21 @@ +package com.jiluo.bolt.engine; + +/** + * Created with IntelliJ IDEA. + * + * @Author: fy + * @Date: 2023/07/03/20:11 + * @Description: + */ +public enum JobType { + BOLT_And_LINE("BOLT_AND_LINE", BoltEngine.class), + TEMPERATURE("TEMPERATURE", TemperatureEngine.class); + + String name; + Class clazz; + + JobType(String name, Class clazz) { + this.name = name; + this.clazz = clazz; + } +} diff --git a/bolt-kernel/src/main/java/com/jiluo/bolt/engine/TemperatureEngine.java b/bolt-kernel/src/main/java/com/jiluo/bolt/engine/TemperatureEngine.java new file mode 100644 index 0000000..37f154b --- /dev/null +++ b/bolt-kernel/src/main/java/com/jiluo/bolt/engine/TemperatureEngine.java @@ -0,0 +1,70 @@ +package com.jiluo.bolt.engine; + +import com.jiluo.bolt.common.DetectJob; +import com.jiluo.bolt.common.DetectResult; +import com.jiluo.bolt.device.IDevice; +import com.jiluo.bolt.util.SpringContextHolder; +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.List; +import java.util.Map; + +/** + * Created with IntelliJ IDEA. + * + * @Author: fy + * @Date: 2023/07/03/20:14 + * @Description: + */ + +public class TemperatureEngine extends AbstractEngine { + + private static final Logger logger = LoggerFactory.getLogger(TemperatureEngine.class); + + DataCallBack dataCallBack = SpringContextHolder.getBean(DataCallBack.class); + + public TemperatureEngine(DetectJob job) { + super(job); + } + + @Override + public boolean run() { + IDevice tempSensor = null; + + String deviceId = job.getDeviceId(); + if (StringUtils.isNotBlank(deviceId) && EngineDriver.tempSensorMap.containsKey(deviceId)) { + tempSensor = EngineDriver.tempSensorMap.get(deviceId); + } + if (tempSensor == null) { + job.setStatus(2); + logger.info("温度传感器获取失败!设备编号:" + deviceId); + return false; + } + if (!tempSensor.config(job.getConfig())) { + job.setStatus(2); + logger.info("温度传感器参数下发失败!设备编号:" + deviceId); + return false; + } + Map openMap = job.getConfig(); + openMap.put("jobId", job.getJobId()); + if (!tempSensor.open(openMap)) { + job.setStatus(2); + logger.info("温度传感器开启失败!设备编号:" + deviceId); + return false; + } +// if (!tempSensor.close(job.getConfig())){ +// job.setStatus(2); +// logger.info("温度传感器关闭失败!设备编号:" + deviceId); +// return false; +// } + job.setStatus(0); + return true; + } + + @Override + public void callback(List data) { + dataCallBack.temperatureData(job.getPowerStation(), job.getMotorGroup(), job.getPoint(), job.getJobId(), job.getDeviceId(), data); + } +} \ No newline at end of file diff --git a/bolt-kernel/src/main/java/com/jiluo/bolt/modbusTcp/config/ModbusTcpMaster.java b/bolt-kernel/src/main/java/com/jiluo/bolt/modbusTcp/config/ModbusTcpMaster.java new file mode 100644 index 0000000..935e742 --- /dev/null +++ b/bolt-kernel/src/main/java/com/jiluo/bolt/modbusTcp/config/ModbusTcpMaster.java @@ -0,0 +1,49 @@ +package com.jiluo.bolt.modbusTcp.config; + +import com.serotonin.modbus4j.ModbusFactory; +import com.serotonin.modbus4j.ModbusMaster; +import com.serotonin.modbus4j.exception.ModbusInitException; +import com.serotonin.modbus4j.ip.IpParameters; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + + +public class ModbusTcpMaster { + private static ModbusFactory modbusFactory; + private static final Logger logger = LoggerFactory.getLogger(ModbusTcpMaster.class); + + static { + if (modbusFactory == null) { + modbusFactory = new ModbusFactory(); + } + } + + /** + * 获取Tcp master + * @param ip + * @param port + * @return + */ + public static ModbusMaster getMaster(String ip, int port) { + IpParameters params = new IpParameters(); + params.setHost(ip); + params.setPort(port); + //这个属性确定了协议帧是否是通过tcp封装的RTU结构,采用modbus tcp/ip时,要设为false, 采用modbus rtu over tcp/ip时,要设为true + params.setEncapsulated(false); + // 参数1:IP和端口信息 参数2:保持连接激活 + ModbusMaster master = null; + master = modbusFactory.createTcpMaster(params, true); + try { + //设置超时时间 + master.setTimeout(500); + //设置重连次数 + master.setRetries(2); + master.setConnected(true); + //初始化 + master.init(); + } catch (ModbusInitException e) { + e.printStackTrace(); + } + return master; + } +} \ No newline at end of file diff --git a/bolt-kernel/src/main/java/com/jiluo/bolt/modbusTcp/utils/Modbus4jReadUtils.java b/bolt-kernel/src/main/java/com/jiluo/bolt/modbusTcp/utils/Modbus4jReadUtils.java new file mode 100644 index 0000000..a6360ba --- /dev/null +++ b/bolt-kernel/src/main/java/com/jiluo/bolt/modbusTcp/utils/Modbus4jReadUtils.java @@ -0,0 +1,161 @@ +package com.jiluo.bolt.modbusTcp.utils; + +import com.serotonin.modbus4j.BatchRead; +import com.serotonin.modbus4j.BatchResults; +import com.serotonin.modbus4j.ModbusMaster; +import com.serotonin.modbus4j.code.DataType; +import com.serotonin.modbus4j.exception.ErrorResponseException; +import com.serotonin.modbus4j.exception.ModbusInitException; +import com.serotonin.modbus4j.exception.ModbusTransportException; +import com.serotonin.modbus4j.locator.BaseLocator; +import com.serotonin.modbus4j.msg.*; + + +/** + * Created with IntelliJ IDEA. + * + * @Author: fy + * @Date: 2023/05/29/17:13 + * @Description: + */ +public class Modbus4jReadUtils { + + /** + * 读(线圈)开关量数据 + * 功能码为:01; 读取开关量输出点的ON/OFF状态,可以读写的布尔类型(0x)---00001 至 0xxxx – 开关量输出 + * @param slaveId slaveId-从站编号-自行约定 + * @param offset 位置 + * @return 读取值-读取多少个 + */ + public boolean[] readCoilStatus(ModbusMaster master,int slaveId, int offset, int numberOfBits) + throws ModbusTransportException, ErrorResponseException, ModbusInitException { + + ReadCoilsRequest request = new ReadCoilsRequest(slaveId, offset, numberOfBits); + ReadCoilsResponse response = (ReadCoilsResponse) master.send(request); + boolean[] booleans = response.getBooleanData(); + return valueRegroup(numberOfBits, booleans); + } + + + /**开关数据 读取外围设备输入的开关量 + * 功能码为:02;读取开关量输入点的ON/OFF状态,只能读的布尔类型(1x)---10001 至 1xxxx – 开关量输入 + * @param slaveId-从站编号-自行约定 + * @param offset-预访问的地址-地址范围:0-255 + * @param numberOfBits-读取多少个 + * @return + * @throws ModbusTransportException + * @throws ErrorResponseException + * @throws ModbusInitException + */ + public boolean[] readInputStatus(ModbusMaster master,int slaveId, int offset, int numberOfBits) + throws ModbusTransportException, ErrorResponseException, ModbusInitException { + ReadDiscreteInputsRequest request = new ReadDiscreteInputsRequest(slaveId, offset, numberOfBits); + ReadDiscreteInputsResponse response = (ReadDiscreteInputsResponse) master.send(request); + boolean[] booleans = response.getBooleanData(); + return valueRegroup(numberOfBits, booleans); + } + + /** + * 读取保持寄存器数据 + * 功能码为:03 读取保持寄存器的数据,可以读写的数字类型(4x)---40001 至 4xxxx – 保持寄存器 + * + **举例子说明:S7-200 + Smart PLC中,设置 [HoldStr~]=&VB1000;则对应的保持寄存器地址为VW1000\VW1002\VW10004 + **在java中对应的address为:0、1、2 + * @param slaveId slave Id-从站编号-自行约定 + * @param offset 位置 + * @param numberOfBits numberOfRegisters 寄存器个数 每个寄存器表示一个16位无符号整数 相当于一个short + */ + public static short[] readHoldingRegister(ModbusMaster master,int slaveId, int offset, int numberOfBits) + throws ModbusTransportException, ErrorResponseException, ModbusInitException { + ReadHoldingRegistersRequest request = new ReadHoldingRegistersRequest(slaveId, offset, numberOfBits); + ReadHoldingRegistersResponse response = (ReadHoldingRegistersResponse) master.send(request); + return response.getShortData(); + } + + + /** + * 读取[03 Holding Register类型 2x]模拟量数据 + * @param slaveId slave Id + * @param offset 位置 + * @param dataType 数据类型,来自com.serotonin.modbus4j.code.DataType + * @return + * @throws ModbusTransportException 异常 + * @throws ErrorResponseException 异常 + * @throws ModbusInitException 异常 + */ + public static Number readHoldingRegisterByDataType(ModbusMaster master,int slaveId, int offset, int dataType) + throws ModbusTransportException, ErrorResponseException, ModbusInitException { + // 03 Holding Register类型数据读取 + BaseLocator loc = BaseLocator.holdingRegister(slaveId, offset, dataType); + Number value = master.getValue(loc); + return value; + } + + /** + * 读取外围设备输入的数据 + * 功能码为:04 读取模拟量输入值,只能读的数字类型(3x)---30001 至 3xxxx – 模拟量输入 + * + * 举例子说明:S7-200 Smart PLC中,模拟量输入寄存器AIW16\AIW18,则对应 + * java中对应的address为:8\9 + * @param slaveId slaveId-从站编号-自行约定 + * @param offset 位置-预访问的地址-地址范围:0-55 + */ + public short[] readInputRegisters(ModbusMaster master,int slaveId, int offset, int numberOfBits) + throws ModbusTransportException, ErrorResponseException, ModbusInitException { + ReadInputRegistersRequest request = new ReadInputRegistersRequest(slaveId, offset, numberOfBits); + ReadInputRegistersResponse response = (ReadInputRegistersResponse) master.send(request); + return response.getShortData(); + } + + /** + * 批量读取 可以批量读取不同寄存器中数据 + */ + public static void batchRead(ModbusMaster master) throws ModbusTransportException, ErrorResponseException, ModbusInitException { + BatchRead batch = new BatchRead(); + batch.addLocator(0, BaseLocator.holdingRegister(1, 1, DataType.TWO_BYTE_INT_SIGNED)); + batch.addLocator(1, BaseLocator.inputStatus(1, 0)); + batch.setContiguousRequests(true); + BatchResults results = master.send(batch); + System.out.println("batchRead:" + results.getValue(0)); + System.out.println("batchRead:" + results.getValue(1)); + } + + + /** + * 批量读取 可以批量读取不同寄存器中数据 + */ + public static void batchReadTest(ModbusMaster master,int slaveId, int offset, int dataType) throws ModbusTransportException, ErrorResponseException, ModbusInitException { + BatchRead batch = new BatchRead(); +// BaseLocator loc = BaseLocator.holdingRegister(slaveId, offset, dataType); +// Number value = master.getValue(loc); + batch.addLocator(0, BaseLocator.holdingRegister(1, 2, DataType.TWO_BYTE_INT_SIGNED)); + batch.addLocator(1, BaseLocator.inputStatus(1, 0)); + batch.addLocator(2, BaseLocator.holdingRegister(slaveId, offset, dataType)); + batch.setContiguousRequests(true); + BatchResults results = master.send(batch); + System.out.println("batchRead:" + results.getValue(0)); + System.out.println("batchRead:" + results.getValue(1)); + System.out.println("batchRead:" + results.getValue(2)); + } + + + /** + * 数据重组 + * @param numberOfBits + * @param values + * @return + */ + private boolean[] valueRegroup(int numberOfBits, boolean[] values) { + boolean[] bs = new boolean[numberOfBits]; + int temp = 1; + for (boolean b : values) { + bs[temp - 1] = b; + temp++; + if (temp > numberOfBits) + break; + } + return bs; + } + +} diff --git a/bolt-kernel/src/main/java/com/jiluo/bolt/modbusTcp/utils/Modbus4jWriteUtils.java b/bolt-kernel/src/main/java/com/jiluo/bolt/modbusTcp/utils/Modbus4jWriteUtils.java new file mode 100644 index 0000000..db84d7d --- /dev/null +++ b/bolt-kernel/src/main/java/com/jiluo/bolt/modbusTcp/utils/Modbus4jWriteUtils.java @@ -0,0 +1,100 @@ +package com.jiluo.bolt.modbusTcp.utils; + +import com.serotonin.modbus4j.ModbusMaster; +import com.serotonin.modbus4j.exception.ErrorResponseException; +import com.serotonin.modbus4j.exception.ModbusInitException; +import com.serotonin.modbus4j.exception.ModbusTransportException; +import com.serotonin.modbus4j.locator.BaseLocator; +import com.serotonin.modbus4j.msg.*; +/** + * Created with IntelliJ IDEA. + * + * @Author: fy + * @Date: 2023/05/29/17:14 + * @Description: + */ +public class Modbus4jWriteUtils { + + /** + * 写单个(线圈)开关量数据 + * 功能码为:05,开关量输出点Q置位或复位,写入数据到真机的DO类型的寄存器上面,可以读写的布尔类型(0x) + * @param slaveId slave的ID + * @param writeOffset 位置-预访问的地址-地址范围:0-255 + * @param writeValue 值-置位则为1,复位则为0 + * @return 是否写入成功 + */ + public boolean writeCoil(ModbusMaster master,int slaveId, int writeOffset, boolean writeValue) + throws ModbusTransportException, ModbusInitException { + // 创建请求 + WriteCoilRequest request = new WriteCoilRequest(slaveId, writeOffset, writeValue); + // 发送请求并获取响应对象 + WriteCoilResponse response = (WriteCoilResponse) master.send(request); + return !response.isException(); + } + + /** + * 写多个开关量数据(线圈) + * 功能码为:0F,写多个开关量数据(线圈) + * @param slaveId slaveId + * @param startOffset 开始位置 + * @param bdata 写入的数据 + * @return 是否写入成功 + */ + public boolean writeCoils(ModbusMaster master,int slaveId, int startOffset, boolean[] bdata) + throws ModbusTransportException, ModbusInitException { + // 创建请求 + WriteCoilsRequest request = new WriteCoilsRequest(slaveId, startOffset, bdata); + // 发送请求并获取响应对象 + WriteCoilsResponse response = (WriteCoilsResponse) master.send(request); + return !response.isException(); + + } + + /*** + * 保持寄存器写单个 + * 功能码为:06,将数据写入至V存储器, 数据到真机,数据类型是Int,可以读写的数字类型(4x) + * @param slaveId slaveId + * @param writeOffset 开始位置 + * @param writeValue 写入的数据 + */ + public static boolean writeRegister(ModbusMaster master,int slaveId, int writeOffset, short writeValue) + throws ModbusTransportException, ModbusInitException { + // 创建请求对象 + WriteRegisterRequest request = new WriteRegisterRequest(slaveId, writeOffset, writeValue); + // 发送请求并获取响应对象 + WriteRegisterResponse response = (WriteRegisterResponse) master.send(request); + return !response.isException(); + + } + + /** + * 保持寄存器写入多个模拟量数据 + * 功能码为:16,将数据写入至多个V存储器,写入数据到真机,数据类型是short[],可以读写的数字类型(4x) + * @param slaveId modbus的slaveID + * @param startOffset 起始位置偏移量值 + * @param sdata 写入的数据 + * @return 返回是否写入成功 + */ + public boolean writeRegisters(ModbusMaster master,int slaveId, int startOffset, short[] sdata) + throws ModbusTransportException, ModbusInitException { + // 创建请求对象 + WriteRegistersRequest request = new WriteRegistersRequest(slaveId, startOffset, sdata); + // 发送请求并获取响应对象 + WriteRegistersResponse response = (WriteRegistersResponse) master.send(request); + return !response.isException(); + } + + /** + * 根据类型写数据(如:写入Float类型的模拟量、Double类型模拟量、整数类型Short、Integer、Long) + * + * @param value 写入值 + * @param dataType com.serotonin.modbus4j.code.DataType + */ + public static void writeHoldingRegister(ModbusMaster master,int slaveId, int offset, Number value, int dataType) + throws ModbusTransportException, ErrorResponseException, ModbusInitException { + // 类型 + BaseLocator locator = BaseLocator.holdingRegister(slaveId, offset, dataType); + master.setValue(locator, value); + } + +} diff --git a/bolt-kernel/src/main/java/com/jiluo/bolt/websocket/WebSocket.java b/bolt-kernel/src/main/java/com/jiluo/bolt/websocket/WebSocket.java new file mode 100644 index 0000000..c70bb9e --- /dev/null +++ b/bolt-kernel/src/main/java/com/jiluo/bolt/websocket/WebSocket.java @@ -0,0 +1,229 @@ +package com.jiluo.bolt.websocket; + +import com.alibaba.fastjson.JSONObject; +import com.jiluo.bolt.common.DetectMessage; +import com.jiluo.bolt.service.DefectService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import javax.annotation.PostConstruct; +import javax.annotation.PreDestroy; +import javax.websocket.*; +import javax.websocket.server.PathParam; +import javax.websocket.server.ServerEndpoint; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.concurrent.*; + + +@Slf4j +@Component +@ServerEndpoint("/websocket/{userId}") // 接口路径 ws://localhost:8081/websocket/userId; +public class WebSocket { + + private Session session; + + private String userId; + + private static Set webSockets = new CopyOnWriteArraySet<>(); + + private static Map sessionPool = new ConcurrentHashMap<>(); + + private static Map pointPool = new ConcurrentHashMap<>(); + + private static Map pointStatusPool = new ConcurrentHashMap<>(); + + private static WebSocketMQ webSocketMQ; + + @PostConstruct + public void init() { + webSocketMQ = new WebSocketMQ(); + webSocketMQ.startThread(); + } + + @PreDestroy + public void cleanup() { + webSocketMQ.stopThread(); + } + + @OnOpen + public void onOpen(Session session, @PathParam(value = "userId") String userId) { + try { + this.session = session; + this.userId = userId; + webSockets.add(this); + sessionPool.put(userId, session); + log.info(userId); + log.info("【websocket消息】有新的连接,总数为:" + webSockets.size()); + } catch (Exception e) { + } + } + + @OnClose + public void onClose() { + try { + webSockets.remove(this); + sessionPool.remove(this.userId); + pointPool.remove(this.userId); + log.info("【websocket消息】连接断开,总数为:" + webSockets.size()); + } catch (Exception e) { + log.error("[WebSocket] onClose:", e.getMessage(), e); + } + } + + @OnMessage + public void onMessage(String message) { + log.info("【websocket消息】有新的消息:" + message); + JSONObject jsonObject = JSONObject.parseObject(message); + if (jsonObject.getObject("status", Boolean.class)) { + String pointId = jsonObject.getString("pointId"); + pointPool.put(this.userId, pointId); + if (pointStatusPool.containsKey(pointId)){ + sendStatusMessage1(pointId, pointStatusPool.get(pointId)); + }else { + sendStatusMessage1(pointId, 0); + } + if (DefectService.TEMPERATUREMAP.containsKey(pointId)){ + sendTemperatureMessage(pointId,DefectService.TEMPERATUREMAP.get(pointId)); + } + + } else { + pointPool.remove(this.userId); + } + log.info(pointPool.toString()); + } + + @OnError + public void onError(Session session, Throwable error) { + log.error("[WebSocket] onError:", error.getMessage(), error); + } + + public void sendAllMessage(String message) { + for (WebSocket webSocket : webSockets) { + try { + if (webSocket.session.isOpen()) { + webSocket.session.getAsyncRemote().sendText(message); + } + } catch (Exception e) { + log.error("[WebSocket] sendAllMessage:", e.getMessage(), e); + } + } + } + + public void sendOneMessage(String userId, String message) { + Session session = sessionPool.get(userId); + if (session != null && session.isOpen()) { + try { + session.getAsyncRemote().sendText(message); + } catch (Exception e) { + log.error("[WebSocket] sendOneMessage:", e.getMessage(), e); + } + } + } + + public void sendMoreMessage(String[] userIds, String message) { + for (String userId : userIds) { + Session session = sessionPool.get(userId); + if (session != null && session.isOpen()) { + try { + session.getAsyncRemote().sendText(message); + } catch (Exception e) { + log.error("[WebSocket] sendMoreMessage:", e.getMessage(), e); + } + } + } + } + + // 发送实时检测消息 + public void sendBoltMessage(String pointId, List detects) { + JSONObject jsonObject = new JSONObject(); + jsonObject.put("title", "detect"); + jsonObject.put("data", detects); + webSocketMQ.addMessageToMq(DetectMessage.builder().pointId(pointId).jsonObject(jsonObject).build()); + } + + public void sendImgMessage(String pointId, List imgs) { + JSONObject jsonObject = new JSONObject(); + jsonObject.put("title", "img"); + jsonObject.put("imgs", imgs); + webSocketMQ.addMessageToMq(DetectMessage.builder().pointId(pointId).jsonObject(jsonObject).build()); + } + + public void sendTemperatureMessage(String pointId, Float value) { + JSONObject jsonObject = new JSONObject(); + jsonObject.put("title", "temperature"); + jsonObject.put("data", value); + webSocketMQ.addMessageToMq(DetectMessage.builder().pointId(pointId).jsonObject(jsonObject).build()); + } + + public void sendStatusMessage(String pointId, Integer value) { + pointStatusPool.put(pointId,value); + sendStatusMessage1(pointId,value); + } + + private void sendStatusMessage1(String pointId, Integer value) { + JSONObject jsonObject = new JSONObject(); + jsonObject.put("title", "detectStatus"); + jsonObject.put("status", value); + webSocketMQ.addMessageToMq(DetectMessage.builder().pointId(pointId).jsonObject(jsonObject).build()); + } + + private void sendMessage(Session session, String message) { + try { + session.getBasicRemote().sendText(message); + } catch (Exception e) { + log.error("[WebSocket] sendMessage:", e.getMessage(), e); + } + } + + private void sendMessage(Set webSockets, String message) { + for (WebSocket webSocket : webSockets) { + Session session = webSocket.session; + if (session != null && session.isOpen()) { + sendMessage(session, message); + } + } + } + + + + public class WebSocketMQ implements Runnable { + private BlockingQueue mq = new LinkedBlockingQueue<>(); + private volatile boolean running = false; + + public void startThread() { + running = true; + new Thread(this).start(); + } + + public void stopThread() { + running = false; + //Thread.currentThread().interrupt(); + } + + public void addMessageToMq(DetectMessage message) { + mq.add(message); + } + + @Override + public void run() { + try { + while (running) { + DetectMessage message = mq.take(); // 阻塞直到队列不为空 + for (WebSocket webSocket : webSockets) { + if (pointPool.containsKey(webSocket.userId) && pointPool.get(webSocket.userId).equals(message.getPointId())) { + Session session = webSocket.session; + if (session != null && session.isOpen()) { + sendMessage(session, message.getJsonObject().toJSONString()); + } + } + } + } + } catch (InterruptedException e) { + Thread.currentThread().interrupt(); + log.error("[WebSocketMQ]:" + e.getMessage(), e); + } + } + } +} diff --git a/bolt-web/classfinal-fatjar.jar b/bolt-web/classfinal-fatjar.jar new file mode 100644 index 0000000000000000000000000000000000000000..56b97a764523820d6a0124b97c9184cc9f7de1ac GIT binary patch literal 834621 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


7EOtQ0&>QbSg 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%0D-Uk$3VR$gRw2ReGy1~F$t^W4^;=-OzK_=@T- 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⪙K$mhPO*T(pD3l`$pcVF)VXRO@M)a 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 SX3LR3Dg)qRd?wcJRSSo*qct%gZrkm!%+Bc!jpP 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 T+1(;{i+HTU%&>YH{O$h$%l-oP literal 0 HcmV?d00001 diff --git a/bolt-web/pom.xml b/bolt-web/pom.xml new file mode 100644 index 0000000..2670e67 --- /dev/null +++ b/bolt-web/pom.xml @@ -0,0 +1,71 @@ + + + + bolt-server + com.jiluo.bolt + 0.0.1-SNAPSHOT + + 4.0.0 + + bolt-web + + + + + com.jiluo.bolt + bolt-kernel + 0.0.1-SNAPSHOT + + + org.springframework.boot + spring-boot-starter-web + + + + + org.springframework.boot + spring-boot-devtools + true + + + + + org.springframework.boot + spring-boot-starter-websocket + + + + + com.google.guava + guava + + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + + + + src/main/resources + + *.properties + *.xml + *.yml + **/*.so + **/*.dll + static/** + + + + + + + \ No newline at end of file diff --git a/bolt-web/proguard.cfg b/bolt-web/proguard.cfg new file mode 100644 index 0000000..5b852cd --- /dev/null +++ b/bolt-web/proguard.cfg @@ -0,0 +1,78 @@ +#jdk版本1.8 +#-target 1.8 +#不做收缩(不删除注释以及未被引用的代码) +-dontshrink +#不做优化(不变更代码实现逻辑) +-dontoptimize + +#-dontobfuscate +#-microedition + +#不使用大小写混合,混淆后的类名为小写 +-dontusemixedcaseclassnames + +#使用唯一的类名来混淆 +-useuniqueclassmembernames + +#允许访问并修改有修饰符的类和类的成员 +-allowaccessmodification + +#保持 包名不变 +-keeppackagenames + +#需要保持的属性:异常,内部类,注解等 +-keepattributes Exceptions,InnerClass,Signature,Deprecated,SourceFile,LineNumberTable,LocalVariable*Table,*Annotation*,Synthetic,EnclosingMethod + +#spring 相关的注解,不要混淆 +-keepclassmembers class * { + @org.springframework.** *; + @org.springframework.beans.factory.annotation.Autowired ; + @org.springframework.beans.factory.annotation.Autowired ; + @javax.annotation.PostConstruct *; + @javax.annotation.PreDestroy *; + @javax.annotation.Resource *; + @org.springframework.scheduling.annotation.Async ; +} + +#不混淆所有的get/set方法 +-keepclassmembers public class *{ + void set*(***); *** get*(); +} + +-keepnames interface ** {*;} +-keep interface * extends * {*;} +-keepparameternames +-keepclassmembers enum * {*;} + +# 保持启动类不变 +-keep public class com.jiluo.bolt.BoltServerApplication {*;} + + +#不混淆被Component等注解标记的类 +-keep @org.springframework.stereotype.Component class * {*;} +-keep @org.springframework.stereotype.Service class * {*;} +-keep @org.springframework.web.bind.annotation.RestController class * {*;} +-keep @org.springframework.context.annotation.Configuration class * {*;} +#-keep @org.aspectj.lang.annotation.Aspect class * {*;} + + + +-adaptclassstrings +#跳过非公共库的类 +-skipnonpubliclibraryclasses + + +#忽略警告 +-ignorewarnings +-dontnote +# 打印配置内容 +-printconfiguration + + +# 配置不混淆某些类 +-keep class org.slf4j.** {*;} + + + + + diff --git a/bolt-web/src/main/java/com/jiluo/bolt/BoltServerApplication.java b/bolt-web/src/main/java/com/jiluo/bolt/BoltServerApplication.java new file mode 100644 index 0000000..8e809f2 --- /dev/null +++ b/bolt-web/src/main/java/com/jiluo/bolt/BoltServerApplication.java @@ -0,0 +1,19 @@ +package com.jiluo.bolt; + +import org.mybatis.spring.annotation.MapperScan; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.scheduling.annotation.EnableScheduling; +import org.springframework.web.servlet.config.annotation.EnableWebMvc; + +@MapperScan("com.jiluo.bolt.mapper") +@EnableWebMvc +@SpringBootApplication +@EnableScheduling +public class BoltServerApplication { + + public static void main(String[] args) { + SpringApplication.run(BoltServerApplication.class, args); + } + +} diff --git a/bolt-web/src/main/java/com/jiluo/bolt/aspect/GlobalExceptionHandler.java b/bolt-web/src/main/java/com/jiluo/bolt/aspect/GlobalExceptionHandler.java new file mode 100644 index 0000000..b751578 --- /dev/null +++ b/bolt-web/src/main/java/com/jiluo/bolt/aspect/GlobalExceptionHandler.java @@ -0,0 +1,65 @@ +package com.jiluo.bolt.aspect; + +import com.jiluo.bolt.domain.Result; +import com.jiluo.bolt.exception.BoltException; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.MissingPathVariableException; +import org.springframework.web.bind.MissingRequestCookieException; +import org.springframework.web.bind.MissingRequestHeaderException; +import org.springframework.web.bind.MissingServletRequestParameterException; +import org.springframework.web.bind.annotation.ControllerAdvice; +import org.springframework.web.bind.annotation.ExceptionHandler; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.context.request.RequestContextHolder; +import org.springframework.web.context.request.ServletRequestAttributes; +import org.springframework.web.multipart.MultipartException; + +import javax.servlet.http.HttpServletRequest; + +@Slf4j +@Controller +@ControllerAdvice +public class GlobalExceptionHandler { + + @ResponseBody + @ExceptionHandler(BoltException.class) + public Result errorHandler(BoltException e) { + return _innerHandler(e.getResult(), e, false); + } + + @ResponseBody + @ExceptionHandler({MissingServletRequestParameterException.class, MissingPathVariableException.class, MissingRequestCookieException.class, MissingRequestHeaderException.class, MissingServletRequestParameterException.class}) + public Result errorHandler(MissingServletRequestParameterException e) { + return _innerHandler(Result.ILLEGAL_ARGUMENT, e, false); + } + + + @ResponseBody + @ExceptionHandler({MultipartException.class}) + public Result errorHandler(MultipartException e) { + return _innerHandler(Result.NOT_SUPPORT, e, false); + } + + @ResponseBody + @ExceptionHandler + public Result errorHandler(Exception e) { + return _innerHandler(Result.ERROR, e, true); + } + + private Result _innerHandler(Result result, Exception e, boolean needExceptionTrace) { + ServletRequestAttributes requestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes(); + if (requestAttributes != null) { + if (requestAttributes.getResponse() != null) { + requestAttributes.getResponse().setStatus(result.getCode()); + } + HttpServletRequest request = requestAttributes.getRequest(); + if (!needExceptionTrace) { + log.error("[GlobalExceptionHandler:" + request.getServletPath() + "] exception:" + e.getMessage()); + } else { + log.error("[GlobalExceptionHandler:" + request.getServletPath() + "] exception:" + e.getMessage(), e); + } + } + return result; + } +} \ No newline at end of file diff --git a/bolt-web/src/main/java/com/jiluo/bolt/aspect/GlobalRequestAspect.java b/bolt-web/src/main/java/com/jiluo/bolt/aspect/GlobalRequestAspect.java new file mode 100644 index 0000000..07b6cdc --- /dev/null +++ b/bolt-web/src/main/java/com/jiluo/bolt/aspect/GlobalRequestAspect.java @@ -0,0 +1,88 @@ +package com.jiluo.bolt.aspect; + +import com.alibaba.fastjson.JSON; +import com.jiluo.bolt.domain.Result; +import com.jiluo.bolt.exception.BoltException; +import com.jiluo.bolt.util.JwtUtils; +import com.jiluo.bolt.util.SessionHolder; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Configuration; +import org.springframework.web.bind.annotation.ControllerAdvice; +import org.springframework.web.method.HandlerMethod; +import org.springframework.web.servlet.HandlerInterceptor; +import org.springframework.web.servlet.config.annotation.InterceptorRegistry; +import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; +import org.springframework.web.servlet.resource.ResourceHttpRequestHandler; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.nio.charset.StandardCharsets; +import java.util.Map; + +@Slf4j +@Configuration +@ControllerAdvice +public class GlobalRequestAspect implements HandlerInterceptor, WebMvcConfigurer { + + @Autowired + JwtUtils tokenUtil; + @Value("${jwt.config.refreshTime}") + private Long refreshTime; + @Value("${jwt.config.expiresTime}") + private Long expiresTime; + + @Override + public void addInterceptors(InterceptorRegistry registry) { + registry.addInterceptor(this) + .addPathPatterns("/api/**") + .excludePathPatterns("/api/user/login") + .excludePathPatterns("/api/user/logout") + .excludePathPatterns("/api/config/selectSystemInfoById") + .excludePathPatterns("/api/camera/dataCallback") + .excludePathPatterns("/api/temperature/dataCallback") + ; + } + + @Override + public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws IOException { + if (handler instanceof ResourceHttpRequestHandler) { + response.setStatus(Result.NOT_SUPPORT.getCode()); + response.setCharacterEncoding("UTF-8"); + response.setContentType("text/json; charset=utf-8"); + response.getOutputStream().write(JSON.toJSONString(Result.NOT_SUPPORT).getBytes(StandardCharsets.UTF_8)); + return false; + } + + // 如果不是映射到方法直接通过,可以访问资源. + if (!(handler instanceof HandlerMethod)) { + return true; + } + + //为空就返回错误 + String token = request.getHeader("Authorization"); + if (null == token || "".equals(token.trim())) { + throw new BoltException(Result.NOT_LOGIN); + } + + Map map = tokenUtil.parseToken(token); + String uid = map.get("uid"); + String sid = map.get("sid"); + String clientVersion = map.get("clientVersion"); + String clientType = map.get("clientType"); + + long timeOfUse = System.currentTimeMillis() - Long.parseLong(map.get("timeStamp")); + + if (timeOfUse < refreshTime) { + SessionHolder.setUserSession(uid); + return true; + } else if (timeOfUse >= refreshTime && timeOfUse < expiresTime) { + response.setHeader("Authorization",tokenUtil.getToken(uid,sid,clientVersion,clientType)); + return true; + } else { + throw new BoltException(Result.NOT_LOGIN); + } + } +} diff --git a/bolt-web/src/main/java/com/jiluo/bolt/aspect/GlobalResponseAspect.java b/bolt-web/src/main/java/com/jiluo/bolt/aspect/GlobalResponseAspect.java new file mode 100644 index 0000000..af19572 --- /dev/null +++ b/bolt-web/src/main/java/com/jiluo/bolt/aspect/GlobalResponseAspect.java @@ -0,0 +1,56 @@ +package com.jiluo.bolt.aspect; + +import com.alibaba.fastjson.serializer.SerializerFeature; +import com.alibaba.fastjson.support.config.FastJsonConfig; +import com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter; + +import com.jiluo.bolt.constant.Constant; +import com.jiluo.bolt.domain.Result; +import com.jiluo.bolt.domain.ResultCode; +import com.jiluo.bolt.util.SessionHolder; +import lombok.extern.slf4j.Slf4j; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.core.MethodParameter; +import org.springframework.http.MediaType; +import org.springframework.http.converter.HttpMessageConverter; +import org.springframework.http.server.ServerHttpRequest; +import org.springframework.http.server.ServerHttpResponse; +import org.springframework.web.bind.annotation.ControllerAdvice; +import org.springframework.web.servlet.mvc.method.annotation.ResponseBodyAdvice; + +import java.nio.charset.StandardCharsets; + +@Slf4j +@Configuration +@ControllerAdvice +public class GlobalResponseAspect implements ResponseBodyAdvice { + + @Override + public boolean supports(MethodParameter methodParameter, Class clazz) { + return true; + } + + @Bean + FastJsonHttpMessageConverter fastJsonHttpMessageConverters() { + FastJsonHttpMessageConverter converter = new FastJsonHttpMessageConverter(); + FastJsonConfig jsonConfig = new FastJsonConfig(); + jsonConfig.setCharset(StandardCharsets.UTF_8); + jsonConfig.setDateFormat("yyyy-MM-dd HH:mm:ss"); + jsonConfig.setSerializerFeatures(SerializerFeature.BrowserCompatible); + jsonConfig.setSerializerFeatures(SerializerFeature.WriteEnumUsingToString); + converter.setFastJsonConfig(jsonConfig); + converter.setDefaultCharset(StandardCharsets.UTF_8); + converter.setSupportedMediaTypes(Constant.SUPPORTED_MEDIA_TYPES); + return converter; + } + + @Override + public Object beforeBodyWrite(Object result, MethodParameter methodParameter, MediaType mediaType, Class> clazz, ServerHttpRequest serverHttpRequest, ServerHttpResponse serverHttpResponse) { + SessionHolder.clearSession(); + if (result instanceof Result) { + return result; + } + return new Result(ResultCode.success, result); + } +} \ No newline at end of file diff --git a/bolt-web/src/main/java/com/jiluo/bolt/config/WebSocketConfig.java b/bolt-web/src/main/java/com/jiluo/bolt/config/WebSocketConfig.java new file mode 100644 index 0000000..8e07c67 --- /dev/null +++ b/bolt-web/src/main/java/com/jiluo/bolt/config/WebSocketConfig.java @@ -0,0 +1,27 @@ +package com.jiluo.bolt.config; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.web.socket.config.annotation.EnableWebSocket; +import org.springframework.web.socket.server.standard.ServerEndpointExporter; + +/** + * Created with IntelliJ IDEA. + * + * @Author: fy + * @Date: 2023/04/27/9:26 + * @Description: + */ +@Configuration +@EnableWebSocket +public class WebSocketConfig { + /** + * 注入ServerEndpointExporter, + * 这个bean会自动注册使用了@ServerEndpoint注解声明的Websocket endpoint + */ + @Bean + public ServerEndpointExporter serverEndpointExporter() { + return new ServerEndpointExporter(); + } + +} diff --git a/bolt-web/src/main/java/com/jiluo/bolt/constant/Constant.java b/bolt-web/src/main/java/com/jiluo/bolt/constant/Constant.java new file mode 100644 index 0000000..0eadae1 --- /dev/null +++ b/bolt-web/src/main/java/com/jiluo/bolt/constant/Constant.java @@ -0,0 +1,29 @@ +package com.jiluo.bolt.constant; + +import com.google.common.collect.Lists; +import org.springframework.http.MediaType; + +import java.util.List; + +public class Constant { + public static final String SESSION_USER_KEY = "user"; + + public static final List SUPPORTED_MEDIA_TYPES = Lists.newArrayList( + MediaType.APPLICATION_JSON, + MediaType.APPLICATION_ATOM_XML, + MediaType.APPLICATION_FORM_URLENCODED, + MediaType.APPLICATION_OCTET_STREAM, + MediaType.APPLICATION_PDF, + MediaType.APPLICATION_RSS_XML, + MediaType.APPLICATION_XHTML_XML, + MediaType.APPLICATION_XML, + MediaType.IMAGE_GIF, + MediaType.IMAGE_JPEG, + MediaType.IMAGE_PNG, + MediaType.TEXT_EVENT_STREAM, + MediaType.TEXT_HTML, + MediaType.TEXT_MARKDOWN, + MediaType.TEXT_PLAIN, + MediaType.TEXT_XML + ); +} diff --git a/bolt-web/src/main/java/com/jiluo/bolt/controller/AlgorithmController.java b/bolt-web/src/main/java/com/jiluo/bolt/controller/AlgorithmController.java new file mode 100644 index 0000000..55a681a --- /dev/null +++ b/bolt-web/src/main/java/com/jiluo/bolt/controller/AlgorithmController.java @@ -0,0 +1,309 @@ +package com.jiluo.bolt.controller; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +import com.baomidou.mybatisplus.extension.api.ApiController; +import com.jiluo.bolt.algorithm.AlgorithmName; +import com.jiluo.bolt.algorithm.AlgorithmType; +import com.jiluo.bolt.domain.Result; +import com.jiluo.bolt.domain.ResultCode; +import com.jiluo.bolt.entity.dto.AlgorithmConfigDto; +import com.jiluo.bolt.entity.dto.AlgorithmDto; +import com.jiluo.bolt.entity.dto.MotorGroupDto; +import com.jiluo.bolt.entity.dto.PointDto; +import com.jiluo.bolt.entity.po.*; +import com.jiluo.bolt.entity.vo.AlgorithmVo; +import com.jiluo.bolt.service.*; +import com.jiluo.bolt.util.SnowFlakeUtil; +import com.jiluo.bolt.util.ToStringUtils; +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; + +import javax.annotation.Resource; +import javax.validation.Valid; +import java.io.File; +import java.io.IOException; +import java.util.*; +import java.util.stream.Collectors; + +/** + * 算法信息表(algorithm)表控制层 + * @author Fangy + * @since 2023-04-17 13:26:11 + */ +@RestController +@RequestMapping("api/algorithm") +public class AlgorithmController extends ApiController { + + private static final Logger logger = LoggerFactory.getLogger(AlgorithmController.class); + /** + * 服务对象 + */ + @Resource + private PointService pointService; + + @Resource + private MotorGroupService motorGroupService; + + @Resource + private PowerStationService powerStationService; + + @Resource + private AlgorithmTempleteService algorithmTempleteService; + + @Resource + private AlgorithmService algorithmService; + + @Resource + private ConfigService configService; + + /** + * 检测算法参数查询 + * @param + * @return + */ + @PostMapping("/selectParams") + public Result selectParams(){ + List algorithmConfigDtos = new ArrayList<>(); + List pointList = pointService.getAll(); + List pointIds = pointList.stream().map(Point::getPointId).collect(Collectors.toList()); + pointList.stream().map(Point::getConfig).filter(x -> StringUtils.isNotBlank(x)).distinct().forEach(x-> {algorithmConfigDtos.add(JSONObject.parseObject(x,AlgorithmConfigDto.class));}); + algorithmConfigDtos.forEach(x->x.getPointIdList().retainAll(pointIds)); + return new Result(ResultCode.success,algorithmConfigDtos); + } + + /** + * 修改检测算法参数设置 + * @param + * @return + */ + @PostMapping("/updateParams") + public Result updateParams(@RequestBody List algorithmConfigDtos){ + if (algorithmConfigDtos.stream().anyMatch(dto -> dto.getBoltThreshold() == null || + dto.getLineThreshold() == null || + dto.getPointIdList() == null || + dto.getPointIdList().isEmpty())){ + return new Result(ResultCode.illegal_argument); + } + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.set("config",""); + pointService.update(updateWrapper); + algorithmConfigDtos.forEach(algorithmConfigDto -> { + if (algorithmConfigDto.getAlgorithmConfigId() == null){ + algorithmConfigDto.setAlgorithmConfigId(String.valueOf(SnowFlakeUtil.getDefaultSnowFlakeId())); + algorithmConfigDto.getPointIdList().forEach(e-> { + pointService.updateConfig(e, JSON.toJSONString(algorithmConfigDto));}); + }else if(algorithmConfigDto.getAlgorithmConfigId() != null){ + algorithmConfigDto.getPointIdList().forEach(e-> { + pointService.updateConfig(e, JSON.toJSONString(algorithmConfigDto));}); + }}); + return new Result(ResultCode.success,"设置成功"); + } + + /** + * 条件查询数据 + */ + @PostMapping("/select") + public Result select(@RequestBody AlgorithmDto algorithmDto) { + Integer total = algorithmTempleteService.selectTotal(algorithmDto); + if (total.equals(0)){ + JSONObject jsonObject = new JSONObject(); + jsonObject.put("total",0); + jsonObject.put("data",null); + return new Result(ResultCode.success,jsonObject); + } + List algorithmTempletes = algorithmTempleteService.select(algorithmDto); + List algorithmVos = new ArrayList<>(); + algorithmTempletes.forEach(item->{ + algorithmVos.add(AlgorithmVo.builder().AlgorithmId(item.getBizId()) + .name(item.getName()) + .source(item.getSource()) + .group_point_num(algorithmService.getPointCount(item.getBizId())) + .gmtCreate(item.getGmtCreate()) + .build());}); + JSONObject jsonObject = new JSONObject(); + jsonObject.put("total",total); + jsonObject.put("data",algorithmVos); + return new Result(ResultCode.success,jsonObject); + } + + /** + * 上传算法文件 + */ + @PostMapping("/upload") + public Result upload(@RequestParam("file") MultipartFile file) throws IOException { + if (file.isEmpty()) { + return new Result(ResultCode.illegal_argument,"上传的文件不能为空"); + } + String originalFilename = file.getOriginalFilename(); + String path = configService.selectByBizId("algorithm_model_dir").getValue(); + logger.info("上传的算法路径:"+ path); + File dataFile = new File(path); + if (!dataFile.exists()) { + dataFile.mkdirs(); + } + file.transferTo(new File(dataFile, originalFilename)); + return new Result(ResultCode.success,"上传成功"); + } + + /** + * 算法应用范围 + */ + @PostMapping("/selectDetail") + public Result selectRange(@RequestBody AlgorithmDto algorithmDto) { + JSONObject detail = new JSONObject(); + AlgorithmTemplete algorithmTemplete = algorithmTempleteService.select(algorithmDto).get(0); + detail.put("algorithmId",algorithmTemplete.getBizId()); + detail.put("algorithmName",algorithmTemplete.getName()); + detail.put("algorithmFileName",JSONObject.parseObject(algorithmTemplete.getConfig()).getString("detect_threshold_model")); + detail.put("source",algorithmTemplete.getSource()); + List powerStations = powerStationService.getAll(); + List motorGroups = motorGroupService.getAll(); + List points = pointService.getAll(); + List algorithms = algorithmService.select(algorithmDto); + List result = new ArrayList<>(); + points.stream().forEach(item->{ + Algorithm algorithm = algorithms.stream().filter(x->x.getPoint().equals(item.getPointId())).findAny().orElse(null); + if (algorithm != null && item.getPointId().equals(algorithm.getPoint()) && algorithmDto.getAlgorithmId().equals(algorithm.getAlgorithm())){ + JSONObject jsonObject = new JSONObject(); + jsonObject.put("powerStationId",item.getPowerStation()); + jsonObject.put("motorGroupId",item.getMotorGroup()); + jsonObject.put("pointId",item.getPointId()); + jsonObject.put("powerStation", powerStations.stream().filter(x -> x.getPowerStationId().equals(item.getPowerStation())).findAny().orElse(null).getName()); + jsonObject.put("motorGroup",motorGroups.stream().filter(x -> x.getMotorGroupId().equals(item.getMotorGroup())).findAny().orElse(null).getName()); + jsonObject.put("point",item.getName()); + jsonObject.put("flag",1); + result.add(jsonObject); + }}); + detail.put("ranges",result); + return new Result(ResultCode.success,detail); + } + + /** + * 检测点 + */ + @PostMapping("/selectPoints") + public Result selectPoints(@RequestBody AlgorithmDto algorithmDto) { + List powerStations = powerStationService.getAll(); + List motorGroups = motorGroupService.select(MotorGroupDto.builder().powerStationId(algorithmDto.getPowerStationId()).build()); + List points = pointService.select(PointDto.builder().powerStationId(algorithmDto.getPowerStationId()).motorGroupId(algorithmDto.getMotorGroupId()).build()); + List algorithms = algorithmService.select(new AlgorithmDto()); + List result = new ArrayList<>(); + points.stream().forEach(item->{ + Algorithm algorithm = algorithms.stream().filter(x->x.getPoint().equals(item.getPointId())).findAny().orElse(null); + JSONObject jsonObject = new JSONObject(); + jsonObject.put("powerStationId",item.getPowerStation()); + jsonObject.put("motorGroupId",item.getMotorGroup()); + jsonObject.put("pointId",item.getPointId()); + jsonObject.put("powerStation", powerStations.stream().filter(x -> x.getPowerStationId().equals(item.getPowerStation())).findAny().orElse(null).getName()); + jsonObject.put("motorGroup",motorGroups.stream().filter(x -> x.getMotorGroupId().equals(item.getMotorGroup())).findAny().orElse(null).getName()); + jsonObject.put("point",item.getName()); + //0-可选,1-当前选中,2-不可选(其他算法选中) + if (algorithm == null){ + jsonObject.put("flag",0); + }else if (item.getPointId().equals(algorithm.getPoint()) && algorithmDto.getAlgorithmId().equals(algorithm.getAlgorithm())){ + jsonObject.put("flag",1); + }else if (item.getPointId().equals(algorithm.getPoint()) && !algorithmDto.getAlgorithmId().equals(algorithm.getAlgorithm())){ + jsonObject.put("flag",2); + } + result.add(jsonObject); + }); + return new Result(ResultCode.success,result); + } + /** + * 删除检测点绑定 + */ + @PostMapping("/deletePoint") + public Result deletePoint(@RequestBody AlgorithmDto algorithmDto) { + Map columnMap = new HashMap<>(); + columnMap.put("algorithm",algorithmDto.getAlgorithmId()); + columnMap.put("point",algorithmDto.getPointId()); + if (!algorithmService.removeByMap(columnMap)){ + return new Result(ResultCode.operate_failure,"删除失败"); + } + return new Result(ResultCode.success,"删除成功"); + } + + /** + * 新增数据 + * + */ + @PostMapping("/add") + public Result insert(@RequestBody @Valid AlgorithmDto algorithmDto) { + if (StringUtils.isBlank(algorithmDto.getSource()) || StringUtils.isBlank(algorithmDto.getAlgorithmName()) || StringUtils.isBlank(algorithmDto.getAlgorithmFileName())){ + return new Result(ResultCode.illegal_argument); + } + algorithmDto.setAlgorithmId(algorithmTempleteService.add(algorithmDto)); + algorithmService.add(algorithmDto); + return new Result(ResultCode.success,"添加成功"); + } + + /** + * 修改数据 + */ + @PostMapping("/update") + public Result update(@RequestBody @Valid AlgorithmDto algorithmDto) { + if (!StringUtils.isNotBlank(algorithmDto.getAlgorithmId())){ + return new Result(ResultCode.illegal_argument,"缺失id参数"); + } + if (!algorithmTempleteService.updateByBizId(algorithmDto)){ + return new Result(ResultCode.operate_failure,"修改失败"); + } + Map columnMap = new HashMap<>(); + columnMap.put("algorithm",algorithmDto.getAlgorithmId()); + algorithmService.removeByMap(columnMap); + algorithmService.add(algorithmDto); + return new Result(ResultCode.success,"修改成功"); + } + + /** + * 删除数据 + */ + @PostMapping("/del") + public Result delete(@RequestBody AlgorithmDto algorithmDto) { + Map columnMap = new HashMap<>(); + columnMap.put("biz_id",algorithmDto.getAlgorithmId()); + Map columnMap2 = new HashMap<>(); + columnMap2.put("algorithm",algorithmDto.getAlgorithmId()); + algorithmService.removeByMap(columnMap2); + if (!algorithmTempleteService.removeByMap(columnMap)){ + return new Result(ResultCode.operate_failure,"删除失败"); + } + return new Result(ResultCode.success,"删除成功"); + } + + /** + * 算法来源 + */ + @PostMapping("/source") + public Result source() { + List result = new ArrayList<>(); + Arrays.stream(AlgorithmType.values()).forEach(x->{ + if (x.equals(AlgorithmType.self_algorithm)) result.add("自建算法"); + else if (x.equals(AlgorithmType.mock_algorithm)) result.add("MOCK算法"); + }); + return new Result(ResultCode.success,result); + } + + /** + * 算法 + */ + @PostMapping("/name") + public Result name(@RequestBody AlgorithmDto algorithmDto) { + if (algorithmDto.getSource()==null || StringUtils.isBlank(algorithmDto.getSource())){ + return new Result(ResultCode.illegal_argument); + } + if (algorithmDto.getSource().equals("自建算法")){ + return new Result(ResultCode.success, AlgorithmName.getName(AlgorithmType.self_algorithm)); + }else if (algorithmDto.getSource().equals("MOCK算法")){ + return new Result(ResultCode.success, AlgorithmName.getName(AlgorithmType.mock_algorithm)); + }else { + return new Result(ResultCode.illegal_argument); + } + } +} + diff --git a/bolt-web/src/main/java/com/jiluo/bolt/controller/AnalysisDataController.java b/bolt-web/src/main/java/com/jiluo/bolt/controller/AnalysisDataController.java new file mode 100644 index 0000000..656dca0 --- /dev/null +++ b/bolt-web/src/main/java/com/jiluo/bolt/controller/AnalysisDataController.java @@ -0,0 +1,108 @@ +package com.jiluo.bolt.controller; + +import com.baomidou.mybatisplus.extension.api.ApiController; +import com.jiluo.bolt.common.DefectType; +import com.jiluo.bolt.domain.Result; +import com.jiluo.bolt.domain.ResultCode; +import com.jiluo.bolt.entity.dto.DetectDto; +import com.jiluo.bolt.entity.dto.PointDto; +import com.jiluo.bolt.entity.po.Defect; +import com.jiluo.bolt.entity.po.Point; +import com.jiluo.bolt.entity.vo.DefectVo; +import com.jiluo.bolt.service.DefectService; +import com.jiluo.bolt.service.PointService; +import org.apache.commons.lang3.BooleanUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.math.BigDecimal; +import java.math.RoundingMode; +import java.time.LocalDate; +import java.util.*; +import java.util.stream.Collectors; + +/** + * Created with IntelliJ IDEA. + * + * @Author: fy + * @Date: 2023/04/26/14:40 + * @Description: + */ +@RestController +@RequestMapping("api/analysis") +public class AnalysisDataController extends ApiController { + + private static final Logger logger = LoggerFactory.getLogger(AnalysisDataController.class); + + @Resource + DefectService defectService; + @Resource + PointService pointService; + + @PostMapping("/features") + public Result features(@RequestBody DetectDto detectDto){ + Point point = pointService.getByBizId(detectDto.getPointId()); + Map permissionMap = new HashMap<>(); + if (point.getBoltDetect()==0){ + permissionMap.put(DefectType.bolt.name(),DefectType.bolt.getDesc()); + } + if (point.getLineDetect()==0){ + permissionMap.put(DefectType.line.name(),DefectType.line.getDesc()); + } + if (point.getPoleOpenDetect()==0){ + permissionMap.put(DefectType.pole.name(),DefectType.pole.getDesc()); + } + if (point.getPointTempDetect()==0){ + permissionMap.put(DefectType.temperature.name(),DefectType.temperature.getDesc()); + } + return new Result(ResultCode.success,permissionMap); + } + + /** + * 趋势图数据 + * @RequestParam(required = false) String pointId, + * @RequestParam(required = false) List features, + * @RequestParam @DateTimeFormat(pattern = "yyyy-MM-dd") String startTime, + * @RequestParam @DateTimeFormat(pattern = "yyyy-MM-dd") String endTime + */ + @PostMapping("/chartData") + public Result chartData(@RequestBody DetectDto detectDto){ + if (detectDto.getPointId()==null || detectDto.getFeatures()==null || detectDto.getStartTime()==null || detectDto.getEndTime()==null ||detectDto.getZone()==null){ + return new Result(ResultCode.illegal_argument); + } + LocalDate endTime = LocalDate.parse(detectDto.getEndTime()).plusDays(1); + List defects = new ArrayList<>(); + detectDto.getFeatures().forEach(e->{ + if (e.equals(DefectType.temperature.name())){ + defects.addAll(defectService.chartData(detectDto.getPointId(), DefectType.temperature.name(), 1 , detectDto.getStartTime(), endTime.toString())); + }else { + defects.addAll(defectService.chartData(detectDto.getPointId(), e, detectDto.getZone() , detectDto.getStartTime(), endTime.toString())); + + } + }); + Point point = pointService.getByBizId(detectDto.getPointId()); + Map permissionMap = new HashMap<>(); + permissionMap.put("bolt",point.getBoltDetect()==0); + permissionMap.put("line",point.getLineDetect()==0); + permissionMap.put("pole",point.getPoleOpenDetect()==0); + permissionMap.put("temperature",point.getPointTempDetect()==0); + List _defects = defects.stream().filter(x->permissionMap.get(x.getType())).map(defect -> { + DefectType _type = DefectType.toDefectType(defect.getType()); + BigDecimal value = (_type == DefectType.bolt || _type == DefectType.temperature) ? BigDecimal.valueOf(defect.getValue() / 100.0).setScale(2, RoundingMode.HALF_UP) : (_type == DefectType.line ? BigDecimal.valueOf(defect.getValue() / 1000.0).setScale(3, RoundingMode.HALF_UP) : BigDecimal.valueOf(defect.getValue())); + return DefectVo.builder() + .time(defect.getGmtModify()) + .type(_type) + .alarm(BooleanUtils.toBoolean(defect.getAlarm())) + .zone(defect.getZone()) + .position(defect.getPosition()) + .value(value) + .build(); + }) + .filter(x -> x.getZone() != null && x.getType() != null && x.getPosition() != null && x.getValue() != null && x.getTime() != null) + .sorted(Comparator.comparing(DefectVo::getTime).thenComparing(DefectVo::getZone).thenComparing(DefectVo::getType).thenComparing(DefectVo::getPosition)).collect(Collectors.toList()); + return new Result(ResultCode.success,_defects.stream().collect(Collectors.groupingBy(DefectVo::getType))); + } + +} diff --git a/bolt-web/src/main/java/com/jiluo/bolt/controller/CameraController.java b/bolt-web/src/main/java/com/jiluo/bolt/controller/CameraController.java new file mode 100644 index 0000000..10eff28 --- /dev/null +++ b/bolt-web/src/main/java/com/jiluo/bolt/controller/CameraController.java @@ -0,0 +1,36 @@ +package com.jiluo.bolt.controller; + +import com.baomidou.mybatisplus.extension.api.ApiController; +import com.jiluo.bolt.common.DetectJob; +import com.jiluo.bolt.domain.Result; +import com.jiluo.bolt.domain.ResultCode; +import com.jiluo.bolt.engine.DataCallBack; +import com.jiluo.bolt.engine.Engine; +import com.jiluo.bolt.entity.dto.DetectResultDto; +import com.jiluo.bolt.service.JobService; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; + + +/** + * Created with IntelliJ IDEA. + * + * @Author: fy + * @Date: 2023/07/13/13:13 + * @Description: + */ +@RestController +@RequestMapping("api") +public class CameraController extends ApiController { + + private static final Logger logger = LoggerFactory.getLogger(CameraController.class); + + @PostMapping("/camera/dataCallback") + public Result dataCallback(@RequestBody DetectResultDto detectResultDto){ + Engine.callback(detectResultDto.getJobId(),detectResultDto.getDetectList()); + return new Result(ResultCode.success); + } +} diff --git a/bolt-web/src/main/java/com/jiluo/bolt/controller/ConfigController.java b/bolt-web/src/main/java/com/jiluo/bolt/controller/ConfigController.java new file mode 100644 index 0000000..b2bf731 --- /dev/null +++ b/bolt-web/src/main/java/com/jiluo/bolt/controller/ConfigController.java @@ -0,0 +1,306 @@ +package com.jiluo.bolt.controller; + + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.extension.api.ApiController; +import com.jiluo.bolt.domain.Result; +import com.jiluo.bolt.domain.ResultCode; +import com.jiluo.bolt.entity.dto.PowerStationDto; +import com.jiluo.bolt.entity.dto.SystemInfoConfigDto; +import com.jiluo.bolt.entity.dto.ThemeConfigDto; +import com.jiluo.bolt.entity.po.Config; +import com.jiluo.bolt.entity.po.PowerStation; +import com.jiluo.bolt.entity.vo.SystemInfoConfigVo; +import com.jiluo.bolt.service.ConfigService; +import com.jiluo.bolt.service.PowerStationService; +import com.jiluo.bolt.service.VersionService; +import com.jiluo.bolt.util.ImgUtils; +import com.jiluo.bolt.util.SnowFlakeUtil; +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; + +import javax.annotation.Resource; +import javax.validation.Valid; +import java.io.*; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.concurrent.atomic.AtomicInteger; + +/** + * 系统配置表(config)表控制层 + * @author Fangy + * @since 2023-04-18 16:06:24 + */ +@RestController +@RequestMapping("api/config") +public class ConfigController extends ApiController { + + private static final Logger logger = LoggerFactory.getLogger(ConfigController.class); + /** + * 服务对象 + */ + @Resource + private ConfigService configService; + + @Resource + private VersionService versionService; + + @Resource + private PowerStationService powerStationService; + + @Resource + ImgUtils imgUtils; + + /** + * 版本信息查询 + */ + @PostMapping("/selectVersion") + public Result selectVersion() { + return new Result(ResultCode.success,versionService.select()); + } + + /** + * 查询参数 + */ + @PostMapping("/select") + public Result select(@RequestBody Config config) { + return new Result(ResultCode.success,configService.selectByBizId(config.getConfigId())); + } + + /** + * 更新参数 + */ + @PostMapping("/update") + public Result update(@RequestBody Config config) { + if (config.getValue()==null){ + return new Result(ResultCode.illegal_argument); + } + return new Result(ResultCode.success,configService.updateByBizId(config.getConfigId(),config.getValue())); + } + + /** + * 上传文件 + */ + @PostMapping("/upload") + public Result upload(@RequestParam("file") MultipartFile file) throws IOException { + if (file.isEmpty()) { + return new Result(ResultCode.illegal_argument,"上传的文件不能为空"); + } + String originalFilename = file.getOriginalFilename(); + String path = configService.selectByBizId("img_logo_dir").getValue(); + logger.info("上传的文件路径:"+ path); + File dataFile = new File(path); + if (!dataFile.exists()) { + dataFile.mkdirs(); + } + file.transferTo(new File(dataFile, originalFilename)); + return new Result(ResultCode.success,"上传成功"); + } + + /** + * 系统信息查询 + */ + @PostMapping("/selectSystemInfo") + public Result selectSystemInfo() { + Config configDto = new Config(); + List systemInfoConfigVos = new ArrayList<>(); + configService.select(configDto.setCategory("系统信息管理")).forEach(config -> { + JSONObject jsonObject = JSON.parseObject(config.getValue()); + try { + if (StringUtils.isNotBlank(jsonObject.getString("logo")) && StringUtils.isNotBlank(jsonObject.getString("power_station"))){ + String encodeBase64 = imgUtils.ToBase64Logo(configService.selectByBizId("img_logo_dir").getValue(),jsonObject.getString("logo")); + List powerStations = new ArrayList<>(); + JSONObject.parseArray(jsonObject.getString("power_station"),String.class).stream().forEach(item->{ + PowerStation p = powerStationService.getByBizId(item); + if (p!=null){ + JSONObject powerStation = new JSONObject(); + powerStation.put("powerStationId",item); + powerStation.put("powerStationName",p.getName()); + powerStations.add(powerStation); + }}); + systemInfoConfigVos.add(SystemInfoConfigVo.builder().systemInfoId(config.getConfigId()) + .systemInfoName(jsonObject.getString("name")) + .logoFileName(jsonObject.getString("logo")) + .logoImg(encodeBase64) + .reservedField(jsonObject.getString("reserved_field")) + .powerStations(powerStations).build());} + } catch (Exception e) { + logger.error("[ConfigController] selectSystemInfo:", e.getMessage(), e); + }}); + return new Result(ResultCode.success,systemInfoConfigVos); + } + + /** + * 系统信息修改 + */ + @PostMapping("/updateSystemInfo") + public Result updateSystemInfo(@RequestBody @Valid List systemInfoConfigDtos) { + List powerStations = new ArrayList<>(); + AtomicInteger i = new AtomicInteger(1); + systemInfoConfigDtos.stream().map(SystemInfoConfigDto::getPowerStations).forEach( x-> powerStations.addAll(x) ); + if (powerStations.size() != powerStations.stream().distinct().count()){ + return new Result(ResultCode.operate_failure,"修改失败:应用电站id重复"); + } + systemInfoConfigDtos.stream().forEach(systemInfoConfigDto -> { + if (StringUtils.isBlank(systemInfoConfigDto.getSystemInfoId())){ + Config configDto = new Config(); + JSONObject jsonObject = new JSONObject(); + jsonObject.put("logo",systemInfoConfigDto.getLogoFileName()); + jsonObject.put("name",systemInfoConfigDto.getSystemInfoName()); + jsonObject.put("power_station",systemInfoConfigDto.getPowerStations()); + jsonObject.put("reserved_field",systemInfoConfigDto.getReservedField()); + configDto.setValue(jsonObject.toJSONString()) + .setDescription("自定义信息策略"+i.getAndIncrement()) + .setCategory("系统信息管理") + .setType(jsonObject.getClass().getSimpleName()); + configService.add(configDto,"self_system_information_policy_"); + }else { + Config configDto = new Config(); + JSONObject jsonObject = new JSONObject(); + jsonObject.put("logo",systemInfoConfigDto.getLogoFileName()); + jsonObject.put("name",systemInfoConfigDto.getSystemInfoName()); + jsonObject.put("power_station",systemInfoConfigDto.getPowerStations()); + jsonObject.put("reserved_field",systemInfoConfigDto.getReservedField()); + configDto.setConfigId(systemInfoConfigDto.getSystemInfoId()) + .setValue(jsonObject.toJSONString()) + .setCategory("系统信息管理") + .setType(jsonObject.getClass().getTypeName()); + if (systemInfoConfigDto.getSystemInfoId().equals("default_system_information_policy")){ + configDto.setDescription("默认系统信息策略"); + }else { + configDto.setDescription("自定义信息策略"+i.getAndIncrement()); + } + configService.updateByBizId(configDto); + }}); + return new Result(ResultCode.success,"修改成功"); + } + + /** + * 系统信息删除 + */ + @PostMapping("/deleteSystemInfo") + public Result deleteSystemInfo(@RequestBody SystemInfoConfigDto systemInfoConfigDto) { + Map columnMap = new HashMap<>(); + columnMap.put("biz_id",systemInfoConfigDto.getSystemInfoId()); + if (!configService.removeByMap(columnMap)){ + return new Result(ResultCode.operate_failure,"删除失败"); + } + return new Result(ResultCode.success,"删除成功"); + } + + /** + * 主题策略查询 + */ + @PostMapping("/selectTheme") + public Result selectTheme() { + Config configDto = new Config(); + List results = new ArrayList<>(); + configService.select(configDto.setCategory("系统主题管理")).forEach(config -> { + ThemeConfigDto themeConfig = JSON.parseObject(config.getValue(),ThemeConfigDto.class); + List powerStations = new ArrayList<>(); + themeConfig.getPowerStationList().stream().forEach(x->{ + PowerStation p = powerStationService.getByBizId(x); + if (p!=null){ + JSONObject jsonObject = new JSONObject(); + jsonObject.put("powerStationId",x); + jsonObject.put("powerStationName",p.getName()); + powerStations.add(jsonObject); + }}); + JSONObject result = JSON.parseObject(config.getValue()); + result.put("themeId",config.getConfigId()); + result.put("themeName",config.getDescription()); + result.put("powerStationList",powerStations); + results.add(result);}); + return new Result(ResultCode.success,results); + } + + /** + * 主题策略修改 + */ + @PostMapping("/updateTheme") + public Result updateTheme(@RequestBody @Valid List themeConfigDtos) { + List powerStations = new ArrayList<>(); + themeConfigDtos.stream().map(ThemeConfigDto::getPowerStationList).forEach( x-> powerStations.addAll(x) ); + if (powerStations.size() != powerStations.stream().distinct().count()){ + return new Result(ResultCode.operate_failure,"修改失败:应用电站id重复"); + } + themeConfigDtos.stream().forEach(themeConfigDto->{ + if (!StringUtils.isNotBlank(themeConfigDto.getThemeId())){ + Config configDto = new Config(); + configDto.setConfigId("self_theme_policy_"+ SnowFlakeUtil.getDefaultSnowFlakeId()) + .setValue(JSON.toJSONString(themeConfigDto)) + .setDescription(themeConfigDto.getThemeName()) + .setCategory("系统主题管理") + .setType(JSONObject.class.getSimpleName()); + configService.add(configDto,"self_theme_policy_"); + } else{ + Config configDto = new Config(); + configDto.setConfigId(themeConfigDto.getThemeId()) + .setValue(JSON.toJSONString(themeConfigDto)) + .setDescription(themeConfigDto.getThemeName()) + .setCategory("系统主题管理") + .setType(JSONObject.class.getSimpleName()); + configService.updateByBizId(configDto); + }}); + return new Result(ResultCode.success,"修改成功"); + } + + /** + * 主题策略删除 + */ + @PostMapping("/deleteTheme") + public Result deleteTheme(@RequestBody ThemeConfigDto themeConfigDto) { + Map columnMap = new HashMap<>(); + columnMap.put("biz_id",themeConfigDto.getThemeId()); + if (!configService.removeByMap(columnMap)){ + return new Result(ResultCode.operate_failure,"删除失败"); + } + return new Result(ResultCode.success,"删除成功"); + } + + @PostMapping("/selectSystemInfoById") + public Result selectSystemInfoById(@RequestBody PowerStationDto powerStationDto) throws Exception { + Config systemInfo = new Config(); + Config systemTheme = new Config(); + if (powerStationDto == null || StringUtils.isBlank(powerStationDto.getPowerStationId())){ + List powerStations = powerStationService.getAll(); + if (powerStations!=null && powerStations.size()!=0){ + powerStationDto.setPowerStationId(powerStations.get(0).getPowerStationId()); + Config configDto = new Config(); + systemInfo = configService.select(configDto.setCategory("系统信息管理")).stream().filter(config -> config.getValue().contains(powerStationDto.getPowerStationId())).findFirst().orElse(null); + if (systemInfo == null){ + systemInfo = configService.selectByBizId("default_system_information_policy"); + } + systemTheme = configService.select(configDto.setCategory("系统主题管理")).stream().filter(config -> config.getValue().contains(powerStationDto.getPowerStationId())).findFirst().orElse(null); + if (systemTheme == null){ + systemTheme = configService.selectByBizId("default_theme_policy1"); + } + } + else { + systemInfo = configService.selectByBizId("default_system_information_policy"); + systemTheme = configService.selectByBizId("default_theme_policy1"); + } + } + + JSONObject systemInfoConfigVo = new JSONObject(); + JSONObject systemThemeVo = JSON.parseObject(systemTheme.getValue()); + JSONObject jsonObject = JSON.parseObject(systemInfo.getValue()); + systemThemeVo.remove("powerStationList"); + String encodeBase64 = imgUtils.ToBase64Logo(configService.selectByBizId("img_logo_dir").getValue(), jsonObject.getString("logo")); + systemInfoConfigVo.put("logoImg",encodeBase64); + systemInfoConfigVo.put("systemInfoName",jsonObject.getString("name")); + systemInfoConfigVo.put("reservedField",jsonObject.getString("reserved_field")); + JSONObject result = new JSONObject(); + result.put("systemInfo",systemInfoConfigVo); + result.put("theme",systemThemeVo); + return new Result(ResultCode.success,result); + } + +} + diff --git a/bolt-web/src/main/java/com/jiluo/bolt/controller/DetectController.java b/bolt-web/src/main/java/com/jiluo/bolt/controller/DetectController.java new file mode 100644 index 0000000..496f738 --- /dev/null +++ b/bolt-web/src/main/java/com/jiluo/bolt/controller/DetectController.java @@ -0,0 +1,352 @@ +package com.jiluo.bolt.controller; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.extension.api.ApiController; +import com.jiluo.bolt.algorithm.AlgorithmName; +import com.jiluo.bolt.common.*; +import com.jiluo.bolt.device.DeviceStatus; +import com.jiluo.bolt.device.DeviceType; +import com.jiluo.bolt.domain.Result; +import com.jiluo.bolt.domain.ResultCode; +import com.jiluo.bolt.engine.*; +import com.jiluo.bolt.entity.dto.DetectDto; +import com.jiluo.bolt.entity.po.*; +import com.jiluo.bolt.entity.vo.DefectVo; +import com.jiluo.bolt.service.*; +import com.jiluo.bolt.util.SessionHolder; +import com.jiluo.bolt.util.SnowFlakeUtil; +import com.jiluo.bolt.util.SystemDateUtils; +import com.jiluo.bolt.websocket.WebSocket; +import io.netty.util.HashedWheelTimer; +import org.apache.commons.lang3.BooleanUtils; +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.scheduling.annotation.EnableScheduling; +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.math.BigDecimal; +import java.math.RoundingMode; +import java.text.SimpleDateFormat; +import java.util.*; +import java.util.concurrent.CompletableFuture; +import java.util.concurrent.TimeUnit; +import java.util.stream.Collectors; + +/** + * 检测页面(Detect) + * + * @author Fangy + * @since 2023-04-17 13:26:12 + */ +@RestController +@RequestMapping("api/detect") +@EnableScheduling +public class DetectController extends ApiController { + + private static final Logger logger = LoggerFactory.getLogger(DetectController.class); + + private static CompletableFuture CurrentJob; + + private final SimpleDateFormat dateFormat = new SimpleDateFormat("HH:mm"); + + @Value("${defect_work_dir}") + private String defect_work_dir; + + /** + * 服务对象 + */ + @Resource + private JobService jobService; + + @Resource + private DetectService detectService; + + @Resource + private DefectService defectService; + + @Resource + private AlarmService alarmService; + + @Resource + private MotorGroupService motorGroupService; + + @Resource + private PointService pointService; + + @Resource + private DeviceService deviceService; + + @Resource + private AlgorithmService algorithmService; + + @Resource + private WebSocket webSocket; + + private static HashedWheelTimer hashedWheelTimer = new HashedWheelTimer(100, TimeUnit.MILLISECONDS, 256); + + /** + * 根据选中检测点,获取实时检测的job + */ + @PostMapping("/getRealtimeJob") + public Result getJob(@RequestBody DetectDto detectDto) { + Job job = jobService.getRealtimeJob(detectDto.getPointId(), DetectType.BOLT_AND_LINE.getProduct()); + return new Result(ResultCode.success, job); + } + + /** + * 根据选中检测点,获取实时检测的job + */ + @PostMapping("/getImg") + public Result getImg(@RequestBody DetectDto detectDto) { + return new Result(ResultCode.success, detectService.getImg(detectDto.getJobId())); + } + + /** + * 根据选中磁极,检测结果数据 + */ + @PostMapping("/query") + public Result selectRealTimeData(@RequestBody DetectDto detectDto) { + + List defects = defectService.getRealTimeData(detectDto.getJobId()); + + JSONObject jsonObject = JSON.parseObject(jobService.getByBizId(detectDto.getJobId()).getConfig()); + + Map permissionMap = new HashMap<>(); + + permissionMap.put("bolt", jsonObject.getBooleanValue("bolt")); + permissionMap.put("line", jsonObject.getBooleanValue("line")); + permissionMap.put("pole", jsonObject.getBooleanValue("pole")); + permissionMap.put("temperature", jsonObject.getBooleanValue("temp")); + + List _defects = defects.stream().filter(x -> permissionMap.get(x.getType())).map(defect -> { + DefectType _type = DefectType.toDefectType(defect.getType()); + BigDecimal value = (_type == DefectType.bolt || _type == DefectType.temperature) ? BigDecimal.valueOf(defect.getValue() / 100.0).setScale(2, RoundingMode.HALF_UP) : (_type == DefectType.line ? BigDecimal.valueOf(defect.getValue() / 1000.0).setScale(3, RoundingMode.HALF_UP) : BigDecimal.valueOf(defect.getValue())); + return DefectVo.builder().type(_type).alarm(BooleanUtils.toBoolean(defect.getAlarm())).zone(defect.getZone()).position(defect.getPosition()).value(value).img(defect.getData()).build(); + }).filter(x -> x.getZone() != null && x.getType() != null && x.getPosition() != null && x.getValue() != null).sorted(Comparator.comparing(DefectVo::getZone).thenComparing(DefectVo::getType).thenComparing(DefectVo::getPosition)).collect(Collectors.toList()); + + return new Result(ResultCode.success, _defects.stream().collect(Collectors.groupingBy(DefectVo::getZone))); + } + + /** + * 告警信息 + */ + @PostMapping("/alarm") + public Result selectAlarm() { + return new Result(ResultCode.success, alarmService.getAll()); + } + + /** + * 手动检测 + */ + @PostMapping("/manualDetection") + public Result manualDetection(@RequestBody DetectDto detectDto) { + + Point point = pointService.getByBizId(detectDto.getPointId()); + + Device camera = deviceService.selectByPoint(point.getPointId()).stream().filter(x -> x.getType().equals(DeviceType.camera.name())).findAny().orElse(null); + + Algorithm algorithm = algorithmService.getByPoint(point.getPointId()); + + if (point.getEnableDetect().equals(1)) + { + addAlarm(point,"检测点未开启检测权限!"); + return new Result(ResultCode.operate_failure, "检测点未开启检测权限"); + } + + if (camera == null || camera.getStatus().equals(0)) + { + addAlarm(point,"当前检测点相机设备未配置或已停用!"); + return new Result(ResultCode.operate_failure, "当前检测点相机设备未配置或已停用"); + } + + if (algorithm == null) + { + addAlarm(point,"当前检测点算法文件未配置!"); + return new Result(ResultCode.operate_failure, "当前检测点算法文件未配置"); + } + + String job_id = "job_" + SystemDateUtils.getStrYMD() + "_" + SnowFlakeUtil.getDefaultSnowFlakeId(); + + AlgorithmConfig algorithmConfig = JSONObject.parseObject(point.getConfig(), AlgorithmConfig.class); + + JSONObject cameraConfig = JSON.parseObject(camera.getConfig()); + + JSONObject algorithmTempConfig = JSON.parseObject(algorithm.getConfig()); + + if (camera.getTempThreshold() == null) { + addAlarm(point,"检测点温度检测参数缺失!"); + return new Result(ResultCode.operate_failure, "检测点温度检测参数缺失!"); + } + + Double detect_threshold_temperature = JSON.parseObject(camera.getTempThreshold()).getDoubleValue("tempThreshold"); + if (detect_threshold_temperature == null || StringUtils.isBlank(cameraConfig.getString("PLC_vender")) || StringUtils.isBlank(cameraConfig.getString("PLC_Ip")) || StringUtils.isBlank(cameraConfig.getString("PLC_Delay")) || StringUtils.isBlank(cameraConfig.getString("serial_number")) || StringUtils.isBlank(cameraConfig.getString("width")) || StringUtils.isBlank(cameraConfig.getString("height")) || StringUtils.isBlank(cameraConfig.getString("fps")) || StringUtils.isBlank(cameraConfig.getString("exposure_time"))) { + addAlarm(point,"相机设备参数缺失!"); + return new Result(ResultCode.operate_failure, "相机设备参数缺失!"); + } + + if (algorithmConfig == null || algorithmTempConfig.getString("algorithm_name") == null || algorithmTempConfig.getString("algorithm_model") == null) { + addAlarm(point,"检测算法参数缺失!"); + return new Result(ResultCode.operate_failure, "检测算法参数缺失!"); + } + + if (DataCallBack.allTemperatureData.containsKey(point.getPointId()) && BigDecimal.valueOf(DataCallBack.allTemperatureData.get(point.getPointId()).getValue() / 100.0).setScale(2, RoundingMode.HALF_UP).doubleValue() > detect_threshold_temperature) { + addAlarm(point,"检测点温度告警!"); + return new Result(ResultCode.operate_failure, "检测点温度告警!"); + } + + if (EngineDriver.cameraMap.get(camera.getDeviceId()).status().equals(DeviceStatus.open)) { + addAlarm(point,"当前检测点相机设备已存在检测中的任务!"); + return new Result(ResultCode.operate_failure, "当前检测点相机设备已存在检测中的任务"); + } + + DetectJob detectJob = createJob(job_id, point, camera, algorithm, "手动检测"); + + CurrentJob = CompletableFuture.runAsync(() -> { + webSocket.sendStatusMessage(point.getPointId(), 1); + Engine.run(JobType.BOLT_And_LINE, detectJob); + webSocket.sendStatusMessage(point.getPointId(), 0); + List defects = defectService.getRealTimeData(job_id); + delayDetect(defects, point, algorithmConfig, detectJob); + }); + + return new Result(ResultCode.success, "开始检测"); + } + + @Scheduled(cron = "0 * * * * *") // 每分钟执行一次任务 + public void automaticDetection() { + pointService.getAll().stream().filter(x -> StringUtils.isNotBlank(x.getConfig())).forEach(point -> { + + List dailyAutoDetectionTime = new ArrayList<>(); + + if (StringUtils.isNotBlank(JSON.parseObject(point.getConfig()).getString("dailyAutoDetectionTime"))) { + dailyAutoDetectionTime = JSON.parseObject(point.getConfig()).getJSONArray("dailyAutoDetectionTime").toJavaList(String.class); + } + + Date now = new Date(); + + String currentTime = dateFormat.format(now); + + if (dailyAutoDetectionTime.contains(currentTime)) { + + logger.info("[自动检测] 检测点:" + point.getName()); + boolean flag = true; + + if (point.getEnableDetect().equals(1)) { + flag = false; + logger.info("检测点未开启检测权限"); + } + + Device camera = deviceService.selectByPoint(point.getPointId()).stream().filter(x -> x.getType().equals(DeviceType.camera.name())).findAny().orElse(null); + + if (camera == null || camera.getStatus().equals(0)) { + flag = false; + logger.info("当前检测点相机设备已停用"); + } + + Algorithm algorithm = algorithmService.getByPoint(point.getPointId()); + if (algorithm == null) { + flag = false; + logger.info("当前检测点算法文件未配置"); + } + + String job_id = "job_" + SystemDateUtils.getStrYMD() + "_" + SnowFlakeUtil.getDefaultSnowFlakeId(); + + AlgorithmConfig algorithmConfig = JSONObject.parseObject(point.getConfig(), AlgorithmConfig.class); + + JSONObject cameraConfig = JSON.parseObject(camera.getConfig()); + + JSONObject algorithmTempConfig = JSON.parseObject(algorithm.getConfig()); + + Double detect_threshold_temperature = JSON.parseObject(camera.getTempThreshold()).getDoubleValue("tempThreshold"); + + if (detect_threshold_temperature == null || StringUtils.isBlank(cameraConfig.getString("PLC_vender")) || StringUtils.isBlank(cameraConfig.getString("PLC_Ip")) || StringUtils.isBlank(cameraConfig.getString("PLC_Delay")) || StringUtils.isBlank(cameraConfig.getString("serial_number")) || StringUtils.isBlank(cameraConfig.getString("width")) || StringUtils.isBlank(cameraConfig.getString("height")) || StringUtils.isBlank(cameraConfig.getString("fps")) || StringUtils.isBlank(cameraConfig.getString("exposure_time"))) { + flag = false; + logger.info("相机设备参数缺失"); + } + + if (algorithmConfig == null || algorithmTempConfig.getString("algorithm_name") == null || algorithmTempConfig.getString("algorithm_model") == null) { + flag = false; + logger.info("检测算法参数缺失"); + } + + if (DataCallBack.allTemperatureData.containsKey(point.getPointId()) && BigDecimal.valueOf(DataCallBack.allTemperatureData.get(point.getPointId()).getValue() / 100.0).setScale(2, RoundingMode.HALF_UP).doubleValue() > detect_threshold_temperature) { + flag = false; + logger.info("检测点温度告警!"); + } + + if (EngineDriver.cameraMap.get(camera.getDeviceId()).status().equals(DeviceStatus.open)) { + flag = false; + logger.info("当前检测点相机设备已存在检测中的任务"); + } + + if (flag) { + DetectJob detectJob = createJob(job_id, point, camera, algorithm, "自动检测"); + CurrentJob = CompletableFuture.runAsync(() -> { + webSocket.sendStatusMessage(point.getPointId(), 1); + Engine.run(JobType.BOLT_And_LINE, detectJob); + webSocket.sendStatusMessage(point.getPointId(), 0); + List defects = defectService.getRealTimeData(job_id); + delayDetect(defects, point, algorithmConfig, detectJob); + }); + } + } + }); + } + + private DetectJob createJob(String job_id, Point point, Device camera, Algorithm algorithm, String type) { + + AlgorithmConfig algorithmConfig = JSONObject.parseObject(point.getConfig(), AlgorithmConfig.class); + + JSONObject cameraConfig = JSON.parseObject(camera.getConfig()); + + JSONObject algorithmTempConfig = JSON.parseObject(algorithm.getConfig()); + + Double detect_threshold_temperature = JSON.parseObject(camera.getTempThreshold()).getDoubleValue("tempThreshold"); + + DetectConfig detectConfig = DetectConfig.builder().bolt(point.getBoltDetect().equals(0)).line(point.getLineDetect().equals(0)).pole(point.getPoleOpenDetect().equals(0)).temp(point.getPointTempDetect().equals(0)).detect_threshold_bolt(algorithmConfig.getBoltThreshold()).detect_threshold_line(algorithmConfig.getLineThreshold()).detect_threshold_pole(1.0).detect_threshold_temperature(detect_threshold_temperature).detect_duration(point.getManualTime()).detect_work_zone(point.getPoleNum()).defect_work_dir(defect_work_dir + job_id).delayDetect(algorithmConfig.getDelayDetect()).plc_ip(cameraConfig.getString("PLC_Ip")).plc_delay(cameraConfig.getInteger("PLC_Delay")).serial_number(cameraConfig.getString("serial_number")).width(cameraConfig.getInteger("width")).height(cameraConfig.getInteger("height")).fps(cameraConfig.getDouble("fps")).exposureTime(cameraConfig.getDouble("exposure_time")).jobId(job_id).algorithm_id(algorithm.getBizId()).algorithm_type(AlgorithmName.getByName(algorithmTempConfig.getString("algorithm_name")).getAlgorithmType().name()).algorithm_name(algorithmTempConfig.getString("algorithm_name")).algorithm_model(algorithmTempConfig.getString("algorithm_model")).build(); + + Job job = new Job(); + + job.setJobId(job_id).setPowerStation(point.getPowerStation()).setMotorGroup(point.getMotorGroup()).setPoint(point.getPointId()).setProduct(DetectType.BOLT_AND_LINE.getProduct()).setType(type).setName(DetectType.BOLT_AND_LINE.getDesc()).setDescription(DetectType.BOLT_AND_LINE.getDesc() + "[" + type + "]").setAttribute(new JSONObject().toJSONString()).setConfig(JSON.toJSONString(detectConfig)).setOperator(SessionHolder.getUserSession()).setStatus(0); + + jobService.addJob(job); + + DetectJob detectJob = DetectJob.builder().jobId(job_id).powerStation(point.getPowerStation()).motorGroup(point.getMotorGroup()).point(point.getPointId()).attribute(new JSONObject()).config((JSONObject) JSON.toJSON(detectConfig)).deviceId(camera.getDeviceId()).build(); + + JobService.JOB_MAP.putIfAbsent(job_id, detectJob); + + return detectJob; + } + + private void delayDetect(List defects, Point point, AlgorithmConfig algorithmConfig, DetectJob detectJob) { + if (defects.size() > 1 && defects.stream().map(Defect::getZone).distinct().collect(Collectors.toList()).size() == 1) { + + logger.info("检测到:" + point.getName() + "检测点下的磁极静止"); + + Integer delayDetect = algorithmConfig.getDelayDetect(); + + if (delayDetect == null || delayDetect == 0) { + logger.info("延时检测设置关闭"); + } else { + logger.info("延时" + delayDetect + "分钟检测"); + hashedWheelTimer.newTimeout((x) -> Engine.run(JobType.BOLT_And_LINE, detectJob), delayDetect, TimeUnit.MINUTES); + } + } + } + + public void addAlarm(Point point, String info) { + Alarm alarm = new Alarm(); + alarm.setAlarmId("alarm_" + SnowFlakeUtil.getDefaultSnowFlakeId()) + .setType(0) + .setContent(point.getName() + ":" + info); + alarm.setGmtCreate(SystemDateUtils.getNewDate()); + AlarmService.ALARM_MAP.put(point.getPointId(), alarm); + webSocket.sendStatusMessage(point.getPointId(), 0); + } +} + diff --git a/bolt-web/src/main/java/com/jiluo/bolt/controller/DeviceController.java b/bolt-web/src/main/java/com/jiluo/bolt/controller/DeviceController.java new file mode 100644 index 0000000..5237436 --- /dev/null +++ b/bolt-web/src/main/java/com/jiluo/bolt/controller/DeviceController.java @@ -0,0 +1,339 @@ +package com.jiluo.bolt.controller; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +import com.baomidou.mybatisplus.extension.api.ApiController; +import com.jiluo.bolt.device.DeviceType; +import com.jiluo.bolt.domain.Result; +import com.jiluo.bolt.domain.ResultCode; +import com.jiluo.bolt.entity.dto.DeviceDto; +import com.jiluo.bolt.entity.dto.TempSenserDto; +import com.jiluo.bolt.entity.dto.TempThresholdDto; +import com.jiluo.bolt.entity.po.Device; +import com.jiluo.bolt.entity.vo.DeviceVo; +import com.jiluo.bolt.entity.vo.TempSenserVo; +import com.jiluo.bolt.service.*; +import com.jiluo.bolt.util.SnowFlakeUtil; +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.web.bind.annotation.*; +import javax.annotation.Resource; +import javax.validation.Valid; +import java.math.BigDecimal; +import java.math.RoundingMode; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +/** + * 设备信息表(device)表控制层 + * @author Fangy + * @since 2023-04-19 11:46:17 + */ +@RestController +@RequestMapping("api/device") +public class DeviceController extends ApiController { + + private static final Logger logger = LoggerFactory.getLogger(DeviceController.class); + /** + * 服务对象 + */ + @Resource + private DeviceService deviceService; + + @Resource + private PowerStationService powerStationService; + + @Resource + private MotorGroupService motorGroupService; + + @Resource + private PointService pointService; + + @Resource + private DeviceTempleteService deviceTempleteService; + + @PostMapping("/select") + public Result select(@RequestBody Device device){ + return new Result(ResultCode.success,deviceService.selectByPoint(device.getPointId()).stream().filter(x->x.getType().equals(DeviceType.camera.name()))); + } + + /** + * 查询设备温度检测阈值 + */ + @PostMapping("/selectTemp") + public Result selectTemp() { + List tempThresholdDtos = new ArrayList<>(); + List deviceList = deviceService.selectAll(); + List deviceIds = deviceList.stream().map(Device::getDeviceId).collect(Collectors.toList()); + deviceList.stream().map(Device::getTempThreshold).filter(x -> StringUtils.isNotBlank(x)).distinct().forEach(e-> tempThresholdDtos.add(JSONObject.parseObject(e,TempThresholdDto.class))); + tempThresholdDtos.forEach(x->x.getDeviceIdList().removeIf(y->!deviceIds.contains(y.getId()))); + return new Result(ResultCode.success,tempThresholdDtos); + } + /** + * 修改设备温度检测阈值 + */ + @PostMapping("/updateTemp") + public Result updateTemp(@RequestBody List tempThresholdDtos) { + if (tempThresholdDtos.stream().anyMatch(dto -> dto.getTempThreshold() == null || + dto.getDeviceIdList() == null || + dto.getDeviceIdList().isEmpty())){ + return new Result(ResultCode.illegal_argument); + } + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.set("temp_threshold",""); + deviceService.update(updateWrapper); + tempThresholdDtos.forEach(tempThresholdDto -> { + if (tempThresholdDto.getTempThresholdId() == null){ + BigDecimal temp = tempThresholdDto.getTempThreshold().setScale(2, RoundingMode.HALF_UP); + tempThresholdDto.setTempThresholdId(String.valueOf(SnowFlakeUtil.getDefaultSnowFlakeId())).setTempThreshold(temp); + tempThresholdDto.getDeviceIdList().stream().forEach(e-> deviceService.updateTemp(e.getId(),JSONObject.toJSONString(tempThresholdDto))); + }else if (tempThresholdDto.getTempThresholdId() != null){ + BigDecimal temp = tempThresholdDto.getTempThreshold().setScale(2, RoundingMode.HALF_UP); + tempThresholdDto.setTempThreshold(temp); + tempThresholdDto.getDeviceIdList().stream().forEach(e-> deviceService.updateTemp(e.getId(),JSONObject.toJSONString(tempThresholdDto))); + }}); + return new Result(ResultCode.success,"设置成功"); + } + /** + * 条件查询数据 + */ + @PostMapping("/query") + public Result query(@RequestBody DeviceDto deviceDto) { + List devices = deviceService.select(deviceDto); + List deviceVos = new ArrayList<>(); + devices.forEach(item->{ + JSONObject config = JSON.parseObject(item.getConfig()); + if (!StringUtils.isNotBlank(deviceDto.getName()) || StringUtils.containsOnly(deviceDto.getName(),item.getName()) || StringUtils.containsOnly(deviceDto.getName(),config.getString("serial_number"))){ + deviceVos.add(DeviceVo.builder().deviceId(item.getDeviceId()) + .name(item.getName()) + .sn(config.getString("serial_number")) + .plcIp(config.getString("PLC_Ip")) + .powerStationId(item.getPowerStationId()) + .motorGroupId(item.getMotorGroupId()) + .pointId(item.getPointId()) + .powerStation(powerStationService.getByBizId(item.getPowerStationId()).getName()) + .Group_Point(motorGroupService.getByBizId(item.getMotorGroupId()).getName() + "/" + pointService.getByBizId(item.getPointId()).getName()) + .fps(config.getDouble("fps")) + .exposureTime(config.getDouble("exposure_time")/1000) + .status(item.getStatus()) + .gmtCreate(item.getGmtCreate()) + .vender(item.getVender()) + .plcDelay(config.getInteger("PLC_Delay")) + .build());}}); + JSONObject jsonObject = new JSONObject(); + jsonObject.put("total",deviceVos.size()); + jsonObject.put("data",deviceVos); + return new Result(ResultCode.success,jsonObject); + } + + + /** + * 新增数据 + * + */ + @PostMapping("/add") + public Result insert(@RequestBody @Valid DeviceDto deviceDto) { + JSONObject jsonObject = new JSONObject(); + jsonObject.put("serial_number",deviceDto.getSn()); + jsonObject.put("width",2448); + jsonObject.put("height",2048); + jsonObject.put("fps",deviceDto.getFps()); + jsonObject.put("exposure_time",deviceDto.getExposureTime()*1000); + jsonObject.put("PLC_Ip",deviceDto.getPlcIp()); + jsonObject.put("PLC_Port",502); + jsonObject.put("PLC_Delay",deviceDto.getPlcDelay()); + if (deviceDto.getVender().equals("mock_camera") || deviceDto.getPlcIp().equals("mock")){ + jsonObject.put("PLC_vender","mock_plc"); + }else { + jsonObject.put("PLC_vender","mathvision_plc"); + } + deviceDto.setConfig(jsonObject.toJSONString()); + if (!deviceService.add(deviceDto, DeviceType.camera.name())){ + return new Result(ResultCode.operate_failure,"添加失败"); + } + return new Result(ResultCode.success,"添加成功"); + } + + /** + * 修改数据 + * + */ + @PostMapping("/update") + public Result update(@RequestBody @Valid DeviceDto deviceDto) { + if (!StringUtils.isNotBlank(deviceDto.getDeviceId())){ + return new Result(ResultCode.illegal_argument,"缺失id参数"); + } + JSONObject jsonObject = new JSONObject(); + jsonObject.put("serial_number",deviceDto.getSn()); + jsonObject.put("width",2448); + jsonObject.put("height",2048); + jsonObject.put("fps",deviceDto.getFps()); + jsonObject.put("exposure_time",deviceDto.getExposureTime()*1000); + jsonObject.put("PLC_Ip",deviceDto.getPlcIp()); + jsonObject.put("PLC_Port",502); + jsonObject.put("PLC_Delay",deviceDto.getPlcDelay()); + if (deviceDto.getVender().equals("mock_camera") || deviceDto.getPlcIp().equals("mock")){ + jsonObject.put("PLC_vender","mock_plc"); + }else { + jsonObject.put("PLC_vender","mathvision_plc"); + } + deviceDto.setConfig(jsonObject.toJSONString()); + if (!deviceService.updateByBizId(deviceDto)){ + return new Result(ResultCode.operate_failure,"修改失败"); + } + return new Result(ResultCode.success,"修改成功"); + } + + /** + * 删除数据 + * + */ + @PostMapping("/del") + public Result delete(@RequestBody DeviceDto deviceDto) { + Map columnMap = new HashMap<>(); + columnMap.put("biz_id",deviceDto.getDeviceId()); + if (!deviceService.removeByMap(columnMap)){ + return new Result(ResultCode.operate_failure,"删除失败"); + } + return new Result(ResultCode.success,"删除成功"); + } + + /** + * 设备停用/启用 + */ + @PostMapping("/deactivate") + public Result deactivate(@RequestBody DeviceDto deviceDto) { + if (!StringUtils.isNotBlank(deviceDto.getDeviceId())){ + return new Result(ResultCode.illegal_argument,"缺失id参数"); + } + if (deviceService.deactivate(deviceDto)){ + return new Result(ResultCode.success,"操作成功"); + }else { + return new Result(ResultCode.operate_failure); + } + } + /** + * 获取相机型号 + */ + @PostMapping("/getTypes") + public Result getType() { + List result = new ArrayList<>(); + deviceTempleteService.getAll().stream().filter(x->x.getConfig().equals("camera")).forEach(item->{ + JSONObject jsonObject = new JSONObject(); + jsonObject.put("venderId",item.getBizId()); + jsonObject.put("vender",item.getVender()); + result.add(jsonObject); + }); + return new Result(ResultCode.success,result); + } + + /** + * 条件查询数据 + */ + @PostMapping("/selectTempSensor") + public Result selectTempSensor(@RequestBody TempSenserDto tempSenserDto) { + List devices = deviceService.select(tempSenserDto); + List tempSenserVos = new ArrayList<>(); + devices.forEach(item->{ + JSONObject config = JSON.parseObject(item.getConfig()); + if (!StringUtils.isNotBlank(tempSenserDto.getNameOrSerialPort()) || StringUtils.containsOnly(tempSenserDto.getNameOrSerialPort(),item.getName()) || StringUtils.containsOnly(tempSenserDto.getNameOrSerialPort(),config.getString("serial_port"))){ + tempSenserVos.add(TempSenserVo.builder().deviceId(item.getDeviceId()) + .name(item.getName()) + .serialPort(config.getString("serial_port")) + .powerStationId(item.getPowerStationId()) + .motorGroupId(item.getMotorGroupId()) + .pointId(item.getPointId()) + .powerStation(powerStationService.getByBizId(item.getPowerStationId()).getName()) + .Group_Point(motorGroupService.getByBizId(item.getMotorGroupId()).getName() + "/" + pointService.getByBizId(item.getPointId()).getName()) + .status(item.getStatus()) + .gmtCreate(item.getGmtCreate()) + .typeId(item.getVender()) + .type(deviceTempleteService.getByBizId(item.getVender()).getVender()) + .relatedDeviceId(config.getString("relatedDeviceId")) + .relatedDevice(config.getString("relatedDeviceName")) + .build()); + }}); + JSONObject jsonObject = new JSONObject(); + jsonObject.put("total",tempSenserVos.size()); + jsonObject.put("data",tempSenserVos); + return new Result(ResultCode.success,jsonObject); + } + + + /** + * 新增数据 + * + */ + @PostMapping("/addTempSensor") + public Result insertTempSensor(@RequestBody @Valid TempSenserDto tempSenserDto) { + Device RelatedDevice = deviceService.selectByBizId(tempSenserDto.getRelatedDeviceId()); + JSONObject jsonObject = new JSONObject(); + jsonObject.put("relatedDeviceId",tempSenserDto.getRelatedDeviceId()); + jsonObject.put("relatedDeviceSN",JSON.parseObject(RelatedDevice.getConfig()).getString("serial_number")); + jsonObject.put("serial_port",tempSenserDto.getSerialPort()); + jsonObject.put("relatedDeviceVendor",RelatedDevice.getVender()); + jsonObject.put("relatedDeviceName",RelatedDevice.getName()); + tempSenserDto.setConfig(jsonObject); + if (!deviceService.add(tempSenserDto, DeviceType.temperature_sensor.name())){ + return new Result(ResultCode.operate_failure,"添加失败"); + } + return new Result(ResultCode.success,"添加成功"); + } + + /** + * 修改数据 + * + */ + @PostMapping("/updateTempSensor") + public Result updateTempSensor(@RequestBody @Valid TempSenserDto tempSenserDto) { + if (!StringUtils.isNotBlank(tempSenserDto.getDeviceId())){ + return new Result(ResultCode.illegal_argument,"缺失id参数"); + } + Device RelatedDevice = deviceService.selectByBizId(tempSenserDto.getRelatedDeviceId()); + JSONObject jsonObject = new JSONObject(); + jsonObject.put("relatedDeviceId",tempSenserDto.getRelatedDeviceId()); + jsonObject.put("relatedDeviceSN",JSON.parseObject(RelatedDevice.getConfig()).getString("serial_number")); + jsonObject.put("serial_port",tempSenserDto.getSerialPort()); + jsonObject.put("relatedDeviceVendor",RelatedDevice.getVender()); + jsonObject.put("relatedDeviceName",RelatedDevice.getName()); + tempSenserDto.setConfig(jsonObject); + if (!deviceService.updateByBizId(tempSenserDto)){ + return new Result(ResultCode.operate_failure,"修改失败"); + } + return new Result(ResultCode.success,"修改成功"); + } + /** + * 删除数据 + * + */ + @PostMapping("/deleteTempSensor") + public Result deleteTempSensor(@RequestBody TempSenserDto tempSenserDto) { + Map columnMap = new HashMap<>(); + columnMap.put("biz_id",tempSenserDto.getDeviceId()); + if (!deviceService.removeByMap(columnMap)){ + return new Result(ResultCode.operate_failure,"删除失败"); + } + return new Result(ResultCode.success,"删除成功"); + } + /** + * 获取传感器类型 + */ + @PostMapping("/getSensorTypes") + public Result getSensorTypes() { + + List result = new ArrayList<>(); + deviceTempleteService.getAll().stream().filter(x->x.getConfig().equals("sensor")).forEach(item->{ + JSONObject jsonObject = new JSONObject(); + jsonObject.put("typeId",item.getBizId()); + jsonObject.put("type",item.getVender()); + result.add(jsonObject); + }); + return new Result(ResultCode.success,result); + } +} + diff --git a/bolt-web/src/main/java/com/jiluo/bolt/controller/HistoryDataController.java b/bolt-web/src/main/java/com/jiluo/bolt/controller/HistoryDataController.java new file mode 100644 index 0000000..43ff3ce --- /dev/null +++ b/bolt-web/src/main/java/com/jiluo/bolt/controller/HistoryDataController.java @@ -0,0 +1,286 @@ +package com.jiluo.bolt.controller; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.alibaba.fastjson.TypeReference; +import com.baomidou.mybatisplus.extension.api.ApiController; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.jiluo.bolt.common.DefectType; +import com.jiluo.bolt.common.DetectType; +import com.jiluo.bolt.domain.Result; +import com.jiluo.bolt.domain.ResultCode; +import com.jiluo.bolt.entity.dto.DetectDto; +import com.jiluo.bolt.entity.po.*; +import com.jiluo.bolt.entity.vo.DefectVo; +import com.jiluo.bolt.entity.vo.HistoricalDataVo; +import com.jiluo.bolt.export.Export; +import com.jiluo.bolt.service.*; +import com.jiluo.bolt.util.ExcelUtils; +import com.jiluo.bolt.util.SystemDateUtils; +import org.apache.commons.lang3.BooleanUtils; +import org.apache.commons.lang3.Range; +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletResponse; +import java.io.*; +import java.math.BigDecimal; +import java.math.RoundingMode; +import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; +import java.text.SimpleDateFormat; +import java.time.LocalDate; +import java.time.ZoneId; +import java.util.*; +import java.util.stream.Collectors; +import java.util.zip.ZipEntry; +import java.util.zip.ZipOutputStream; + +/** + * Created with IntelliJ IDEA. + * + * @Author: fy + * @Date: 2023/04/26/14:33 + * @Description:历史数据接口(History) + */ +@RestController +@RequestMapping("api/history") +public class HistoryDataController extends ApiController { + + private static final Logger logger = LoggerFactory.getLogger(HistoryDataController.class); + /** + * 服务对象 + */ + @Resource + private DefectService defectService; + + @Resource + private JobService jobService; + + @Resource + private PowerStationService powerStationService; + + @Resource + private MotorGroupService motorGroupService; + + @Resource + private PointService pointService; + + @Resource + private DeviceService deviceService; + + @Resource + private Export export; + + /** + * 历史数据 + */ + @PostMapping("/query") + public Result selectByHistoricalData(@RequestBody DetectDto detectDto) { + if (detectDto.getCurrent()==null || detectDto.getCurrent().equals(0)){detectDto.setCurrent(1);} + if (detectDto.getSize()==null ||detectDto.getSize().equals(0)){detectDto.setSize(10);} + LocalDate endTime = LocalDate.parse(detectDto.getEndTime()).plusDays(1); + Integer current = (detectDto.getCurrent()-1)*detectDto.getSize()+1; + Integer total = jobService.getHistoryJobTotal(detectDto.getPointId(),detectDto.getStatus(), DetectType.BOLT_AND_LINE.getProduct(),detectDto.getStartTime(),endTime.toString()); + if (total.equals(0)){ + return new Result(ResultCode.success,new Page<>().setTotal(total)); + } + Map motorGroupName = motorGroupService.getAll().stream().collect(Collectors.toMap(MotorGroup::getMotorGroupId,MotorGroup::getName)); + Map pointName = pointService.getAll().stream().collect(Collectors.toMap(Point::getPointId,Point::getName)); + List jobList = jobService.getHistoryJob(detectDto.getPointId(),detectDto.getStatus(), DetectType.BOLT_AND_LINE.getProduct(),current,detectDto.getSize(), detectDto.getStartTime(),endTime.toString()).stream().filter(x->x.getAttribute()!=null&&!x.getAttribute().equals("{}")).collect(Collectors.toList()); + List historicalDataVoList = new ArrayList<>(); + jobList.forEach(item->{ + Map> defectZone = JSONObject.parseObject(item.getAttribute()).getObject("defectZone", new TypeReference>>() {}); + StringBuilder errorInfoBuilder = new StringBuilder(); + for (Map.Entry> entry : defectZone.entrySet()) { + String key = entry.getKey(); + List values = entry.getValue(); + if (values.size()>0){ + StringBuilder valuesBuilder = new StringBuilder(); + for (int value : values) { + if (valuesBuilder.length() > 0) { + valuesBuilder.append(","); + } + valuesBuilder.append(value); + } + String error = valuesBuilder + "#" + key; + errorInfoBuilder.append(error + ";"); + } + } + String errorInfo = errorInfoBuilder.toString(); + if (errorInfo.endsWith(";")) { + errorInfo = errorInfo.substring(0, errorInfo.length() - 1); + } + historicalDataVoList.add(HistoricalDataVo.builder().jobId(item.getJobId()) + .motorGroup(motorGroupName.get(item.getMotorGroup())) + .point(pointName.get(item.getPoint())) + .gmtCreate(item.getGmtCreate()) + .type(item.getType()) + .status(item.getStatus()) + .info(errorInfo) + .build()); + }); + return new Result(ResultCode.success,new Page().setCurrent(detectDto.getCurrent()).setSize(detectDto.getSize()).setTotal(total).setRecords(historicalDataVoList)); + } + + /** + * 详情数据 + */ + @PostMapping("/detail") + public Result detail(@RequestBody DetectDto detectDto){ + List defects = defectService.getByJob(detectDto.getJobId()); + JSONObject jsonObject = JSON.parseObject(jobService.getByBizId(detectDto.getJobId()).getConfig()); + Map permissionMap = new HashMap<>(); + permissionMap.put("bolt",jsonObject.getBooleanValue("bolt")); + permissionMap.put("line",jsonObject.getBooleanValue("line")); + permissionMap.put("pole",jsonObject.getBooleanValue("pole")); + permissionMap.put("temperature",jsonObject.getBooleanValue("temp")); + List _defects = defects.stream().filter(x->permissionMap.get(x.getType())).map(defect -> { + DefectType _type = DefectType.toDefectType(defect.getType()); + BigDecimal value = (_type == DefectType.bolt || _type == DefectType.temperature) ? BigDecimal.valueOf(defect.getValue() / 100.0).setScale(2, RoundingMode.HALF_UP) : (_type == DefectType.line ? BigDecimal.valueOf(defect.getValue() / 1000.0).setScale(3, RoundingMode.HALF_UP) : BigDecimal.valueOf(defect.getValue())); + return DefectVo.builder() + .type(_type) + .alarm(BooleanUtils.toBoolean(defect.getAlarm())) + .zone(defect.getZone()) + .position(defect.getPosition()) + .value(value) + .img(defect.getData()) + .build(); + }) + .filter(x -> x.getZone() != null && x.getType() != null && x.getPosition() != null && x.getValue() != null) + .sorted(Comparator.comparing(DefectVo::getZone).thenComparing(DefectVo::getType).thenComparing(DefectVo::getPosition)).collect(Collectors.toList()); + Map> map = _defects.stream().collect(Collectors.groupingBy(DefectVo::getZone)); + JSONObject result = new JSONObject(); + result.put("total",map.size()); + result.put("dataList",map); + return new Result(ResultCode.success,result); + } + + /** + * 导出word + */ + @PostMapping("/exportWord") + public void exportWord(@RequestBody DetectDto detectDto, HttpServletResponse response) throws Exception { + ZipOutputStream zipOutputStream = null; + String encodedFileName = URLEncoder.encode("转子视觉检测报告.zip", "UTF-8"); + response.reset(); + response.setContentType("application/octet-stream"); + response.setCharacterEncoding("utf-8"); + response.setHeader("Content-Disposition", "attachment; filename=\"" + encodedFileName + "\""); + zipOutputStream = new ZipOutputStream(response.getOutputStream()); + if (detectDto.getJobs()!=null && detectDto.getJobs().size()>0){ + List pointIds = jobService.getByBizId(detectDto.getJobs()).stream().map(Job::getPoint).distinct().collect(Collectors.toList()); + for ( String pointId: pointIds) { + ByteArrayOutputStream target = new ByteArrayOutputStream(); + Point point = pointService.getByBizId(pointId); + String fileName = motorGroupService.getByBizId(point.getMotorGroup()).getName()+"/" + point.getName() +"/"+export.export(pointId,detectDto.getJobs(),target); + addFileToZip(fileName, target, zipOutputStream); + } + zipOutputStream.close(); + }else if (StringUtils.isNotBlank(detectDto.getStartTime()) && StringUtils.isNotBlank(detectDto.getEndTime())){ + if (detectDto.getPointId()!=null&&StringUtils.isNotBlank(detectDto.getPointId())){ + ByteArrayOutputStream target = new ByteArrayOutputStream(); + SimpleDateFormat ft = new SimpleDateFormat("yyyy-MM-dd"); + Range dateRange = Range.between(ft.parse(detectDto.getStartTime()),ft.parse(detectDto.getEndTime())); + Point point = pointService.getByBizId(detectDto.getPointId()); + String fileName = motorGroupService.getByBizId(point.getMotorGroup()).getName()+"/" + point.getName() +"/"+export.export(detectDto.getPointId(),dateRange,detectDto.getStatus(),target); + addFileToZip(fileName, target, zipOutputStream); + zipOutputStream.close(); + }else { + SimpleDateFormat ft = new SimpleDateFormat("yyyy-MM-dd"); + List pointIds = jobService.exportData(ft.parse(detectDto.getStartTime()),Date.from(LocalDate.parse(detectDto.getEndTime()).plusDays(1).atStartOfDay(ZoneId.systemDefault()).toInstant())).stream().filter(x->detectDto.getStatus()==null||x.getStatus().equals(detectDto.getStatus())).map(Job::getPoint).distinct().collect(Collectors.toList()); + for ( String pointId: pointIds) { + ByteArrayOutputStream target = new ByteArrayOutputStream(); + Point point = pointService.getByBizId(pointId); + String fileName = motorGroupService.getByBizId(point.getMotorGroup()).getName()+"/" + point.getName() +"/"+export.export(pointId,detectDto.getJobs(),target); + addFileToZip(fileName, target, zipOutputStream); + } + zipOutputStream.close(); + } +// ByteArrayOutputStream target = new ByteArrayOutputStream(); +// SimpleDateFormat ft = new SimpleDateFormat("yyyy-MM-dd"); +// Range dateRange = Range.between(ft.parse(detectDto.getStartTime()),ft.parse(detectDto.getEndTime())); +// String fileName = export.export(detectDto.getPointId(),dateRange,detectDto.getStatus(),target); +// response.setContentType("application/vnd.openxmlformats-officedocument.wordprocessingml.document"); +// response.setHeader("Content-Disposition", "attachment; filename="+URLEncoder.encode(fileName, "UTF-8")); +// OutputStream outputStream = response.getOutputStream(); +// target.writeTo(outputStream); +// outputStream.close(); + }else { + if (null != zipOutputStream) zipOutputStream.close(); + logger.info("exportExcel: 参数缺失"); + } + } + + /** + * 导出Excel + */ + @PostMapping("/exportExcel") + public void exportExcel(@RequestBody DetectDto detectDto, HttpServletResponse response) throws Exception { + ByteArrayOutputStream target = new ByteArrayOutputStream(); + if (detectDto.getJobs()!=null && detectDto.getJobs().size()>0) { + List defectList = defectService.getByJob(detectDto.getJobs()); + String fileName = ExcelUtils.generateExcel(target, defectToExcel(defectList)); + String encodedFileName = URLEncoder.encode(fileName, StandardCharsets.UTF_8.toString()); + response.reset(); + response.setContentType("application/vnd.ms-excel;charset=utf-8"); + OutputStream outputStream = response.getOutputStream(); + response.setHeader("Cache-Control", "no-cache, no-store, must-revalidate"); + response.setHeader("Content-Disposition", String.format("attachment; filename=\"%s\"", encodedFileName)); + response.setHeader("Pragma", "no-cache"); + response.setHeader("Access-Control-Expose-Headers", "Content-Disposition"); + response.setHeader("Expires", "0"); + target.writeTo(outputStream); + outputStream.flush(); + outputStream.close(); + } + else if (StringUtils.isNotBlank(detectDto.getStartTime()) && StringUtils.isNotBlank(detectDto.getEndTime())) { + LocalDate endTime = LocalDate.parse(detectDto.getEndTime()).plusDays(1); + String fileName = ExcelUtils.generateExcel(target, defectToExcel(defectService.exportData(detectDto.getPointId(),SystemDateUtils.StringToDate(detectDto.getStartTime()),SystemDateUtils.StringToDate(endTime.toString()), detectDto.getStatus()).stream().filter(x->!x.getType().equals(DefectType.temperature.name())).collect(Collectors.toList()))); + String encodedFileName = URLEncoder.encode(fileName, StandardCharsets.UTF_8.toString()); + response.reset(); + response.setContentType("application/vnd.ms-excel;charset=utf-8"); + OutputStream outputStream = response.getOutputStream(); + response.setHeader("Cache-Control", "no-cache, no-store, must-revalidate"); + response.setHeader("Content-Disposition", String.format("attachment; filename=\"%s\"", encodedFileName)); + response.setHeader("Pragma", "no-cache"); + response.setHeader("Access-Control-Expose-Headers", "Content-Disposition"); + response.setHeader("Expires", "0"); + target.writeTo(outputStream); + outputStream.flush(); + outputStream.close(); + }else logger.info("exportExcel: 参数缺失"); + } + + private JSONObject generateBody(String name, byte[] data) { + JSONObject body = new JSONObject(); + body.put("data", data); + body.put("name", name); + return body; + } + + private List defectToExcel(List defectList){ + Map powerStationMap = powerStationService.getAll().stream().collect(Collectors.toMap(PowerStation::getPowerStationId,PowerStation::getName)); + Map motorGroupMap = motorGroupService.getAll().stream().collect(Collectors.toMap(MotorGroup::getMotorGroupId,MotorGroup::getName)); + Map pointMap = pointService.getAll().stream().collect(Collectors.toMap(Point::getPointId,Point::getName)); + Map deviceMap = deviceService.selectAll().stream().collect(Collectors.toMap(Device::getDeviceId,Device::getName)); + defectList.forEach(defect -> { + if (powerStationMap.containsKey(defect.getPowerStation())) defect.setPowerStation(powerStationMap.get(defect.getPowerStation())); + if (motorGroupMap.containsKey(defect.getMotorGroup())) defect.setMotorGroup(motorGroupMap.get(defect.getMotorGroup())); + if (pointMap.containsKey(defect.getPoint())) defect.setPoint(pointMap.get(defect.getPoint())); + if (deviceMap.containsKey(defect.getDevice())) defect.setDevice(deviceMap.get(defect.getDevice())); + }); + return defectList; + } + + private void addFileToZip(String filename, ByteArrayOutputStream byteArrayOutputStream, + ZipOutputStream zipOutputStream) throws IOException { + ZipEntry zipEntry = new ZipEntry(filename); + zipOutputStream.putNextEntry(zipEntry); + zipOutputStream.write(byteArrayOutputStream.toByteArray()); + zipOutputStream.closeEntry(); + } +} diff --git a/bolt-web/src/main/java/com/jiluo/bolt/controller/ImgController.java b/bolt-web/src/main/java/com/jiluo/bolt/controller/ImgController.java new file mode 100644 index 0000000..80f365c --- /dev/null +++ b/bolt-web/src/main/java/com/jiluo/bolt/controller/ImgController.java @@ -0,0 +1,90 @@ +package com.jiluo.bolt.controller; + + +import com.baomidou.mybatisplus.extension.api.ApiController; +import com.jiluo.bolt.domain.Result; +import com.jiluo.bolt.domain.ResultCode; +import com.jiluo.bolt.entity.dto.ImgDto; +import com.jiluo.bolt.util.ImgUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.web.bind.annotation.*; + +import java.io.File; +import java.nio.file.Files; +import java.nio.file.attribute.BasicFileAttributes; +import java.time.LocalDate; +import java.time.ZoneId; +import java.time.temporal.ChronoUnit; +import java.util.ArrayList; +import java.util.List; + +/** + * Created with IntelliJ IDEA. + * + * @Author: fy + * @Date: 2023/06/06/15:24 + * @Description: + */ +@RestController +@RequestMapping("api/img") +public class ImgController extends ApiController { + + private static final Logger logger = LoggerFactory.getLogger(ImgController.class); + + @Value("${defect_work_dir}") + private String defect_work_dir; + + @Value("${defect_img_dir}") + private String defect_img_dir; + + @PostMapping("/base") + public Result getImg(@RequestBody ImgDto imgDto) throws Exception { + StringBuilder stringBuilder = new StringBuilder(); + return new Result(ResultCode.success, ImgUtils.ToBase64(stringBuilder.append(defect_work_dir).append(imgDto.getJobId()).append("/detect/").append(imgDto.getImg()).toString())); + } + + @PostMapping("/path") + public Result getPath() { + return new Result(ResultCode.success, defect_img_dir); + } + + @GetMapping("/getImages") + public List getImages(@RequestParam(required = false) Integer day) { + List result = new ArrayList<>(); + + File directory = new File(defect_work_dir); + + File[] folders = directory.listFiles(File::isDirectory); + + for (File folder : folders) { + // 获取文件夹创建日期 + BasicFileAttributes attr; + try { + attr = Files.readAttributes(folder.toPath(), BasicFileAttributes.class); + } catch (Exception e) { + logger.error(e.getMessage(), e); + continue; + } + LocalDate createDate = attr.creationTime().toInstant().atZone(ZoneId.systemDefault()).toLocalDate(); + + // 如果day为空或小于文件夹创建日期,添加到结果列表 + if (day == null || ChronoUnit.DAYS.between(createDate, LocalDate.now()) < day) { + + File[] images = folder.listFiles(file -> file.isFile() && isImage(file)); + for (File image : images) { + result.add(image.getAbsolutePath()); + } + } + } + + return result; + } + + // 判断文件是否为图片 + private boolean isImage(File file) { + String extension = file.getName().substring(file.getName().lastIndexOf(".") + 1); + return extension.equalsIgnoreCase("jpg") || extension.equalsIgnoreCase("jpeg") || extension.equalsIgnoreCase("png")|| extension.equalsIgnoreCase("bmp"); + } +} diff --git a/bolt-web/src/main/java/com/jiluo/bolt/controller/MinioController.java b/bolt-web/src/main/java/com/jiluo/bolt/controller/MinioController.java new file mode 100644 index 0000000..b45f31d --- /dev/null +++ b/bolt-web/src/main/java/com/jiluo/bolt/controller/MinioController.java @@ -0,0 +1,331 @@ +package com.jiluo.bolt.controller; + +import cn.hutool.core.io.file.FileNameUtil; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.jiluo.bolt.config.MinioConfig; +import com.jiluo.bolt.config.UploadFile; +import com.jiluo.bolt.domain.Result; +import com.jiluo.bolt.domain.ResultCode; +import com.jiluo.bolt.entity.po.Defect; +import com.jiluo.bolt.entity.po.Detect; +import com.jiluo.bolt.entity.po.Job; +import com.jiluo.bolt.service.DefectService; +import com.jiluo.bolt.service.DetectService; +import com.jiluo.bolt.service.JobService; +import com.jiluo.bolt.service.MinioService; +import com.jiluo.bolt.util.SystemDateUtils; +import io.minio.ObjectStat; +import io.minio.errors.*; +import io.minio.messages.Item; +import lombok.SneakyThrows; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; +import org.apache.tomcat.util.http.fileupload.IOUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.mock.web.MockMultipartFile; +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.util.ResourceUtils; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; + +import javax.servlet.http.HttpServletResponse; +import java.io.File; +import java.io.FileInputStream; +import java.io.IOException; +import java.io.InputStream; +import java.net.URLEncoder; +import java.nio.file.Files; +import java.nio.file.Paths; +import java.security.InvalidKeyException; +import java.security.NoSuchAlgorithmException; +import java.text.DecimalFormat; +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.ZonedDateTime; +import java.util.*; +import java.util.stream.Collectors; + +/** + * Created with IntelliJ IDEA. + * + * @Author: fy + * @Date: 2023/10/13/15:00 + * @Description: + */ +@RequestMapping("api/minio") +@RestController +@Slf4j +public class MinioController { + + @Autowired + private MinioService minioService; + + @Autowired + private MinioConfig minioConfig; + + @Autowired + private UploadFile uploadFile; + + @Value("${defect_work_dir}") + private String defect_work_dir; + + @Autowired + private DetectService detectService; + + @Autowired + private DefectService defectService; + + @Autowired + private JobService jobService; + + + @SneakyThrows + @Scheduled(cron = "${minio.time}") + public void uploadFile() { + List jobs = jobService.exportData(SystemDateUtils.toDate(LocalDate.now().minusDays(1)), new Date()); + jobs.stream().filter(job -> { + JSONObject attribute = JSON.parseObject(job.getAttribute()); + if (attribute.containsKey("defectTotal") && (Integer) attribute.get("defectTotal") > 0) { + return true; + } + return false; + }); + + for (int i = 0; i < (jobs.size() > 3 ? 3 : jobs.size()); i++) { + List detectList = detectService.getByJob(jobs.get(i).getJobId()); + List defectList = defectService.getByJob(jobs.get(i).getJobId()); + ToMinio(detectList, defectList, i + 1); + } +// File directory = new File(defect_work_dir); +// File[] folders = directory.listFiles(File::isDirectory); +// LocalDate currentDate = LocalDate.now(); +// +// for (File folder : folders) { +// // 获取文件夹创建日期 +// BasicFileAttributes attr = Files.readAttributes(folder.toPath(), BasicFileAttributes.class); +// LocalDate createDate = attr.creationTime().toInstant().atZone(ZoneId.systemDefault()).toLocalDate(); +// +// if (createDate.equals(currentDate)) { +// String path = folder.getAbsolutePath(); +// +// List detectFiles = FileUtils.convertFilesToList(path + "/detect"); +// List defectFiles = FileUtils.convertFilesToList(path + "/defect"); +// +// String jobId = regexJobId(path); +// if (jobId != null && StringUtils.isNotBlank(jobId)) { +// if (detectFiles != null && !detectFiles.isEmpty()) { +// uploadFile.uploadFiles(detectFiles, jobId, "detect"); +// } +// +// if (defectFiles != null && !defectFiles.isEmpty()) { +// uploadFile.uploadFiles(defectFiles, jobId, "defect"); +// } +// } +// } +// } + } + + @GetMapping("/test") + @SneakyThrows + public void test() { + List jobs = jobService.exportData(SystemDateUtils.toDate(LocalDate.now().minusDays(1)), new Date()); + jobs.stream().filter(job -> { + JSONObject attribute = JSON.parseObject(job.getAttribute()); + if (attribute.containsKey("defectTotal") && (Integer) attribute.get("defectTotal") > 0) { + return true; + } + return false; + }); + + for (int i = 0; i < (jobs.size() > 3 ? 3 : jobs.size()); i++) { + List detectList = detectService.getByJob(jobs.get(i).getJobId()); + List defectList = defectService.getByJob(jobs.get(i).getJobId()); + ToMinio(detectList, defectList, i + 1); + } + } + + private void ToMinio(List detectList, List defectList, Integer jobTimes) { + Set alarmSet = defectList.stream() + .filter(defect -> defect.getAlarm().equals(1)) + .map(Defect::getData) + .collect(Collectors.toSet()); + Map zoneTimesMap = new HashMap<>(); + + for (Detect detect : detectList) { + Integer zone = detect.getZone(); + String img = detect.getData(); + String fileDir = defect_work_dir + detect.getJob() + "/detect/" + img; + + File file; + try { + file = ResourceUtils.getFile(fileDir); + if (!file.exists()) { + log.warn("File does not exist: {}", fileDir); + continue; + } + } catch (Exception e) { + log.error("Error getting file: {}", fileDir, e); + continue; + } + + zoneTimesMap.compute(zone, (key, value) -> (value == null) ? 1 : value + 1); + + String newName = minioNameRule(detect, alarmSet.contains(img), jobTimes, zoneTimesMap.get(zone)); + + try (FileInputStream fileInputStream = new FileInputStream(file)) { + uploadFile.uploadFile(newName, fileInputStream, "image/jpeg"); + } catch (Exception e) { + log.error("Error uploading file: {}", newName, e); + } + } + } + + private String minioNameRule(Detect detect, boolean alarm, Integer jobTimes, Integer detectTimes) { + return SystemDateUtils.formatDate(detect.getGmtCreate(), "yyyy/MM/dd") + "/record" + jobTimes + "/" + detect.getZone() + "-" + detectTimes + "-" + detect.getId() + "-" + (alarm ? "A" : "N" + ".jpg"); + } + + + @SneakyThrows + @PostMapping("/file") + public Result uploadFile(MultipartFile file, @RequestParam("bucketName") String bucketName) { + uploadFile.uploadFile(file, bucketName); + return Result.SUCCESS; + } + + @PostMapping("/files") + public Result uploadFiles(@RequestParam("multipartFiles") List files, @RequestParam("bucketName") String bucketName) { + for (MultipartFile file : files) { + uploadFile.uploadFile(file, bucketName); + } + return Result.SUCCESS; + } + + @GetMapping("/file") + public Result download(HttpServletResponse response, @RequestParam("fileName") String fileName, @RequestParam("bucketName") String bucketName) { + try { + //获取存储捅名 + bucketName = StringUtils.isNotBlank(bucketName) ? bucketName : minioConfig.getBucketName(); + //获取对象信息和对象的元数据。 + ObjectStat objectStat = minioService.statObject(bucketName, fileName); + //setContentType 设置发送到客户机的响应的内容类型 + response.setContentType(objectStat.contentType()); + //设置响应头 + response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(objectStat.name(), "UTF-8")); + //文件流 + InputStream object = minioService.getObject(bucketName, fileName); + //设置文件大小 + response.setHeader("Content-Length", String.valueOf(objectStat.length())); + IOUtils.copy(object, response.getOutputStream()); + //关闭流 + object.close(); + return Result.SUCCESS; + } catch (Exception e) { + log.error("下载文件失败,错误信息: " + e.getMessage()); + + return new Result(ResultCode.system_error, e.getMessage()); + } + } + + @DeleteMapping(value = "/file") + public Result deleteFile(@RequestParam("bucketName") String bucketName, @RequestParam("objectName") String objectName) { + minioService.removeObject(bucketName, objectName); + return Result.SUCCESS; + } + + @GetMapping(value = "/file/list") + public Result getFileList(@RequestParam("bucketName") String bucketName) throws IOException, InvalidKeyException, InvalidResponseException, InsufficientDataException, NoSuchAlgorithmException, InternalException, XmlParserException, InvalidBucketNameException, ErrorResponseException { + try { + //获取存储捅名 + bucketName = StringUtils.isNotBlank(bucketName) ? bucketName : minioConfig.getBucketName(); + //列出存储桶中所有对象 + Iterable> results = minioService.listObjects(bucketName); + //迭代器 + Iterator> iterator = results.iterator(); + + List items = new ArrayList<>(); + + String format = "{'fileName':'%s','fileSize':'%s'}"; + + while (iterator.hasNext()) { + //返回迭代中的下一个元素。 + Item item = iterator.next().get(); + //封装信息 + items.add(JSON.parse(String.format(format, "http://localhost:9000/" + bucketName + "/" + item.objectName(), formatFileSize(item.size())))); + } + return new Result(ResultCode.success, items); + } catch (Exception e) { + log.error("获取文件列表失败,错误信息: " + e.getMessage()); + return new Result(ResultCode.system_error, "获取文件列表失败"); + } + } + + @GetMapping("/preview/file") + public Result getPreviewFile(@RequestParam("bucketName") String bucketName, + @RequestParam("expires") Integer expires, + @RequestParam("objectName") String objectName) { + //获取存储捅名 + bucketName = StringUtils.isNotBlank(bucketName) ? bucketName : minioConfig.getBucketName(); + //生成一个给HTTP GET请求用的presigned URL + String filePath = minioService.presignedGetObject(bucketName, objectName, expires); + //封装信息 + + return new Result(ResultCode.success, filePath); + } + + @GetMapping("/previewList") + public Result getPreviewList(@RequestParam("bucketName") String bucketName, + @RequestParam("expires") Integer expires + ) throws IOException, InvalidKeyException, InvalidResponseException, InsufficientDataException, NoSuchAlgorithmException, InternalException, XmlParserException, InvalidBucketNameException, ErrorResponseException { + + try { + //获取存储捅名 + bucketName = StringUtils.isNotBlank(bucketName) ? bucketName : minioConfig.getBucketName(); + //列出存储桶中所有对象 + Iterable> myObjects = minioService.listObjects(bucketName); + //迭代器 + Iterator> iterator = myObjects.iterator(); + List items = new ArrayList<>(); + String format = "{'fileName':'%s','fileSize':'%s'}"; + while (iterator.hasNext()) { + //返回迭代中的下一个元素。 + Item item = iterator.next().get(); + //生成一个给HTTP GET请求用的presigned URL + String filePath = minioService.presignedGetObject(bucketName, item.objectName(), expires); + //封装信息 + items.add(JSON.parse(String.format(format, filePath, formatFileSize(item.size())))); + } + return new Result(ResultCode.success, items); + } catch (Exception e) { + return new Result(ResultCode.system_error, "生成可以预览的文件链接失败,错误信息:" + e.getMessage()); + } + + } + + /** + * 显示文件大小信息单位 + * + * @param fileS + * @return + */ + private static String formatFileSize(long fileS) { + DecimalFormat df = new DecimalFormat("#.00"); + String fileSizeString = ""; + String wrongSize = "0B"; + if (fileS == 0) { + return wrongSize; + } + if (fileS < 1024) { + fileSizeString = df.format((double) fileS) + " B"; + } else if (fileS < 1048576) { + fileSizeString = df.format((double) fileS / 1024) + " KB"; + } else if (fileS < 1073741824) { + fileSizeString = df.format((double) fileS / 1048576) + " MB"; + } else { + fileSizeString = df.format((double) fileS / 1073741824) + " GB"; + } + return fileSizeString; + } + +} \ No newline at end of file diff --git a/bolt-web/src/main/java/com/jiluo/bolt/controller/MotorGroupController.java b/bolt-web/src/main/java/com/jiluo/bolt/controller/MotorGroupController.java new file mode 100644 index 0000000..d46c749 --- /dev/null +++ b/bolt-web/src/main/java/com/jiluo/bolt/controller/MotorGroupController.java @@ -0,0 +1,155 @@ +package com.jiluo.bolt.controller; + + +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.api.ApiController; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.jiluo.bolt.domain.Result; +import com.jiluo.bolt.domain.ResultCode; +import com.jiluo.bolt.entity.dto.MotorGroupDto; +import com.jiluo.bolt.entity.po.MotorGroup; +import com.jiluo.bolt.entity.vo.MotorGroupVo; +import com.jiluo.bolt.service.*; +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.web.bind.annotation.*; +import javax.annotation.Resource; +import javax.validation.Valid; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * 机组信息表(motor_group)表控制层 + * @author Fangy + * @since 2023-04-17 13:26:12 + */ +@RestController +@RequestMapping("api/motorGroup") +public class MotorGroupController extends ApiController { + + private static final Logger logger = LoggerFactory.getLogger(MotorGroupController.class); + /** + * 服务对象 + */ + @Resource + private PowerStationService powerStationService; + @Resource + private MotorGroupService motorGroupService; + @Resource + private PointService pointService; + @Resource + private DeviceService deviceService; + @Resource + private AlgorithmService algorithmService; + + /** + * 分页查询所有数据 + * + * @param page 分页对象 + * @param motorGroup 查询实体 + * @return 所有数据 + */ + @PostMapping("/selectAll") + public Result selectAll(Page page, @RequestBody MotorGroup motorGroup) { + return new Result(ResultCode.success,this.motorGroupService.page(page, new QueryWrapper<>(motorGroup))); + } + + /** + * 获取下拉框数据 + */ + @PostMapping("/dropDownBox") + public Result dropDownBox(){ + List result = new ArrayList<>(); + motorGroupService.getAll().stream().forEach(item->{ + JSONObject jsonObject = new JSONObject(); + jsonObject.put("powerStationId",item.getPowerStation()); + jsonObject.put("motorGroupId",item.getMotorGroupId()); + jsonObject.put("motorGroupName",item.getName()); + result.add(jsonObject); + }); + return new Result(ResultCode.success,result); + } + + /** + * 条件查询数据 + */ + @PostMapping("/select") + public Result select(@RequestBody MotorGroupDto motorGroupDto) { + Integer total = motorGroupService.selectTotal(motorGroupDto); + if (total.equals(0)){ + JSONObject jsonObject = new JSONObject(); + jsonObject.put("total",0); + jsonObject.put("data",null); + return new Result(ResultCode.success,jsonObject); + } + List motorGroups = motorGroupService.select(motorGroupDto); + List motorGroupVos = new ArrayList<>(); + motorGroups.stream().forEach(item->{ + motorGroupVos.add(MotorGroupVo.builder().motorGroupId(item.getMotorGroupId()) + .name(item.getName()) + .powerStationId(item.getPowerStation()) + .powerStation(powerStationService.getByBizId(item.getPowerStation()).getName()) + .pointNum(pointService.getTotalByMotorGroup(item.getMotorGroupId())) + .contact(item.getContact()) + .phone(item.getPhone()) + .gmtCreate(item.getGmtCreate()) + .build()); + }); + JSONObject jsonObject = new JSONObject(); + jsonObject.put("total",total); + jsonObject.put("data",motorGroupVos); + return new Result(ResultCode.success,jsonObject); + } + + + /** + * 新增数据 + * + */ + @PostMapping("/add") + public Result insert(@RequestBody @Valid MotorGroupDto motorGroupDto) { + if (!motorGroupService.add(motorGroupDto)){ + return new Result(ResultCode.operate_failure,"添加失败"); + } + return new Result(ResultCode.success,"添加成功"); + } + + /** + * 修改数据 + * + */ + @PostMapping("/update") + public Result update(@RequestBody @Valid MotorGroupDto motorGroupDto) { + if (!StringUtils.isNotBlank(motorGroupDto.getMotorGroupId())){ + return new Result(ResultCode.illegal_argument,"缺失id参数"); + } + if (!motorGroupService.updateByBizId(motorGroupDto)){ + return new Result(ResultCode.operate_failure,"修改失败"); + } + return new Result(ResultCode.success,"修改成功"); + } + + /** + * 删除数据 + * + */ + @PostMapping("/del") + public Result delete(@RequestBody MotorGroupDto motorGroupDto) { + Map columnMap = new HashMap<>(); + columnMap.put("biz_id",motorGroupDto.getMotorGroupId()); + Map columnMap2 = new HashMap<>(); + columnMap2.put("motor_group",motorGroupDto.getMotorGroupId()); + pointService.removeByMap(columnMap2); + deviceService.removeByMap(columnMap2); + algorithmService.removeByMap(columnMap2); + if (!motorGroupService.removeByMap(columnMap)){ + return new Result(ResultCode.operate_failure,"删除失败"); + } + return new Result(ResultCode.success,"删除成功"); + } +} + diff --git a/bolt-web/src/main/java/com/jiluo/bolt/controller/PointController.java b/bolt-web/src/main/java/com/jiluo/bolt/controller/PointController.java new file mode 100644 index 0000000..fb82205 --- /dev/null +++ b/bolt-web/src/main/java/com/jiluo/bolt/controller/PointController.java @@ -0,0 +1,216 @@ +package com.jiluo.bolt.controller; + +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.extension.api.ApiController; +import com.jiluo.bolt.domain.Result; +import com.jiluo.bolt.domain.ResultCode; +import com.jiluo.bolt.entity.dto.PointDto; +import com.jiluo.bolt.entity.po.*; +import com.jiluo.bolt.entity.vo.DropDownVo; +import com.jiluo.bolt.entity.vo.PointVo; +import com.jiluo.bolt.service.*; +import com.jiluo.bolt.util.SystemDateUtils; +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.web.bind.annotation.*; +import javax.annotation.Resource; +import javax.validation.Valid; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +/** + * 检测点表(point)表控制层 + * @author Fangy + * @since 2023-04-17 13:26:12 + */ +@RestController +@RequestMapping("api/point") +public class PointController extends ApiController { + + private static final Logger logger = LoggerFactory.getLogger(PointController.class); + /** + * 服务对象 + */ + @Resource + private PointService pointService; + @Resource + private MotorGroupService motorGroupService; + @Resource + private PowerStationService powerStationService; + @Resource + private DeviceService deviceService; + @Resource + private AlgorithmService algorithmService; + + /** + * 查询所有检测点 + */ + @PostMapping("/getAll") + public Result selectAll() { + List powerStations = powerStationService.getAll(); + List motorGroups = motorGroupService.getAll(); + List points = pointService.getAll(); + if (powerStations!=null && powerStations.size()!=0){ + motorGroups.stream().forEach(y->y.setPointList(points.stream().filter(z->z.getMotorGroup().equals(y.getMotorGroupId())).collect(Collectors.toList()))); + powerStations.stream().forEach(x->x.setGroupList(motorGroups.stream().filter(y->y.getPowerStation().equals(x.getPowerStationId())).collect(Collectors.toList()))); + } + return new Result(ResultCode.success,powerStations); + } + + /** + * 修改 检测设备开关 + * @RequestParam String pointId, @RequestParam boolean enableDetect + */ + @PostMapping("/switch") + public Result update(@RequestBody List points) { + points.forEach(point->pointService.updateEnableDetect(point.getPointId(),point.getEnableDetect())); + return new Result(ResultCode.success,"设置成功"); + } + + @PostMapping("/reset") + public Result reset(@RequestBody Point point) { + pointService.updateResetTime(point.getPointId(), SystemDateUtils.getNewDate()); + /** + *把算法生成的那个a2.txt删了 + * String path = "/xxx/xxx/a2.txt"; + * FileUtils fileUtils = new FileUtils(); + * fileUtils.DeleteFolder(path); + */ + return new Result(ResultCode.success,"数据复位成功"); + } + + /** + * 条件查询数据 + */ + @PostMapping("/select") + public Result select(@RequestBody PointDto pointDto) { + Integer total = pointService.selectTotal(pointDto); + if (total.equals(0)){ + JSONObject jsonObject = new JSONObject(); + jsonObject.put("total",0); + jsonObject.put("data",null); + return new Result(ResultCode.success,jsonObject); + } + List points = pointService.select(pointDto); + List pointVos = new ArrayList<>(); + points.stream().forEach(item->{ + pointVos.add(PointVo.builder().pointId(item.getPointId()) + .name(item.getName()) + .powerStationId(item.getPowerStation()) + .powerStation(powerStationService.getByBizId(item.getPowerStation()).getName()) + .motorGroupId(item.getMotorGroup()) + .motorGroup(motorGroupService.getByBizId(item.getMotorGroup()).getName()) + .poleNum(item.getPoleNum()) + .boltDetect(item.getBoltDetect().equals(0)) + .lineDetect(item.getLineDetect().equals(0)) + .poleOpenDetect(item.getPoleOpenDetect().equals(0)) + .pointTempDetect(item.getPointTempDetect().equals(0)) + .gmtCreate(item.getGmtCreate()) + .manualTime(item.getManualTime()) + .automaticTime(item.getAutomaticTime()) + .build()); + }); + JSONObject jsonObject = new JSONObject(); + jsonObject.put("total",total); + jsonObject.put("data",pointVos); + return new Result(ResultCode.success,jsonObject); + } + + + /** + * 新增数据 + * + */ + @PostMapping("/add") + public Result insert(@RequestBody @Valid PointDto pointDto) { + if (!pointService.add(pointDto)){ + return new Result(ResultCode.operate_failure,"添加失败"); + } + return new Result(ResultCode.success,"添加成功"); + } + + /** + * 修改数据 + * + */ + @PostMapping("/update") + public Result update(@RequestBody @Valid PointDto pointDto) { + if (!StringUtils.isNotBlank(pointDto.getPointId())){ + return new Result(ResultCode.illegal_argument,"缺失id参数"); + } + if (!pointService.updateByBizId(pointDto)){ + return new Result(ResultCode.operate_failure,"修改失败"); + } + return new Result(ResultCode.success,"修改成功"); + } + + /** + * 删除数据 + * + */ + @PostMapping("/del") + public Result delete(@RequestBody PointDto pointDto) { + Map columnMap = new HashMap<>(); + columnMap.put("biz_id",pointDto.getPointId()); + Map columnMap2 = new HashMap<>(); + columnMap2.put("point",pointDto.getPointId()); + deviceService.removeByMap(columnMap2); + algorithmService.removeByMap(columnMap2); + if (!pointService.removeByMap(columnMap)){ + return new Result(ResultCode.operate_failure,"删除失败"); + } + return new Result(ResultCode.success,"删除成功"); + } + + /** + * 修改检测权限 + * + */ + @PostMapping("/updateDetect") + public Result updateDetect(@RequestBody PointDto pointDto) { + if (!StringUtils.isNotBlank(pointDto.getPointId())){ + return new Result(ResultCode.illegal_argument,"缺失id参数"); + } + if (!pointService.updateDetect(pointDto)){ + return new Result(ResultCode.operate_failure,"修改失败"); + } + return new Result(ResultCode.success,"修改成功"); + } + + /** + * 获取下拉框数据 + */ + @PostMapping("/dropDownBox") + public Result dropDownBox(@RequestBody PointDto pointDto){ + if (StringUtils.isBlank(pointDto.getPowerStationId())){ + PowerStation powerStation = powerStationService.getAll().stream().findFirst().orElse(null); + if (powerStation == null) return new Result(ResultCode.success,new ArrayList()); + pointDto.setPowerStationId(powerStation.getPowerStationId()); + } + List dropDownVos = new ArrayList<>(); + pointService.getByPowerStation(pointDto.getPowerStationId()).stream().forEach(item->{ + dropDownVos.add(DropDownVo.builder().powerStationId(item.getPowerStation()) + .motorGroupId(item.getMotorGroup()) + .pointId(item.getPointId()) + .name(motorGroupService.getByBizId(item.getMotorGroup()).getName() + "/" + item.getName()) + .build()); + }); + return new Result(ResultCode.success,dropDownVos); + } + + @PostMapping("/permission") + public Result permission(@RequestBody PointDto pointDto) { + Map permission = new HashMap<>(); + Point point = pointService.getByBizId(pointDto.getPointId()); + permission.put("bolt", point.getBoltDetect() == 0 ? true : false); + permission.put("line", point.getLineDetect() == 0 ? true : false); + permission.put("pole", point.getPoleOpenDetect() == 0 ? true : false); + permission.put("temperature", point.getPointTempDetect() == 0 ? true : false); + return new Result(ResultCode.success, permission); + } +} + diff --git a/bolt-web/src/main/java/com/jiluo/bolt/controller/PowerStationController.java b/bolt-web/src/main/java/com/jiluo/bolt/controller/PowerStationController.java new file mode 100644 index 0000000..e85686f --- /dev/null +++ b/bolt-web/src/main/java/com/jiluo/bolt/controller/PowerStationController.java @@ -0,0 +1,147 @@ +package com.jiluo.bolt.controller; + + +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.extension.api.ApiController; +import com.jiluo.bolt.domain.Result; +import com.jiluo.bolt.domain.ResultCode; +import com.jiluo.bolt.entity.dto.PowerStationDto; +import com.jiluo.bolt.entity.po.PowerStation; +import com.jiluo.bolt.entity.vo.PowerStationVo; +import com.jiluo.bolt.service.*; +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.web.bind.annotation.*; +import javax.annotation.Resource; +import javax.validation.Valid; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * 电站表(power_station)表控制层 + * @author Fangy + * @since 2023-04-17 13:26:12 + */ +@RestController +@RequestMapping("api/powerStation") +public class PowerStationController extends ApiController { + + private static final Logger logger = LoggerFactory.getLogger(PowerStationController.class); + /** + * 服务对象 + */ + @Resource + private PowerStationService powerStationService; + @Resource + private MotorGroupService motorGroupService; + @Resource + private PointService pointService; + @Resource + private DeviceService deviceService; + @Resource + private AlgorithmService algorithmService; + + /** + * 获取下拉框数据 + */ + @PostMapping("/dropDownBox") + public Result dropDownBox(){ + List result = new ArrayList<>(); + powerStationService.getAll().stream().forEach(item->{ + JSONObject jsonObject = new JSONObject(); + jsonObject.put("powerStationId",item.getPowerStationId()); + jsonObject.put("powerStationName",item.getName()); + result.add(jsonObject); + }); + return new Result(ResultCode.success,result); + } + + /** + * powerStation条件查询数据 + */ + @PostMapping("/select") + public Result select(@RequestBody PowerStationDto powerStationDto) { + Integer total = powerStationService.selectTotal(powerStationDto); + if (total.equals(0)){ + JSONObject jsonObject = new JSONObject(); + jsonObject.put("total",0); + jsonObject.put("data",null); + return new Result(ResultCode.success,jsonObject); + } + List powerStations = powerStationService.select(powerStationDto); + List powerStationVos = new ArrayList<>(); + powerStations.stream().forEach(item->{ + powerStationVos.add(PowerStationVo.builder().powerStationId(item.getPowerStationId()) + .name(item.getName()) + .address(item.getAddress()) + .groupNum(motorGroupService.getTotalByPowerStation(item.getPowerStationId())) + .contact(item.getContact()) + .phone(item.getPhone()) + .gmtCreate(item.getGmtCreate()) + .introduction(item.getIntroduction()) + .build()); + }); + JSONObject jsonObject = new JSONObject(); + jsonObject.put("total",total); + jsonObject.put("data",powerStationVos); + return new Result(ResultCode.success,jsonObject); + } + + + /** + * 新增数据 + * + * @param powerStationDto 实体对象 + * @return 新增结果 + */ + @PostMapping("/add") + public Result insert(@RequestBody @Valid PowerStationDto powerStationDto) { + if (!powerStationService.add(powerStationDto)){ + return new Result(ResultCode.operate_failure,"添加失败"); + } + return new Result(ResultCode.success,"添加成功"); + } + + /** + * 修改数据 + * + * @param powerStationDto 实体对象 + * @return 修改结果 + */ + @PostMapping("/update") + public Result update(@RequestBody @Valid PowerStationDto powerStationDto) { + if (!StringUtils.isNotBlank(powerStationDto.getPowerStationId())){ + return new Result(ResultCode.illegal_argument,"缺失id参数"); + } + if (!powerStationService.updateByBizId(powerStationDto)){ + return new Result(ResultCode.operate_failure,"修改失败"); + } + return new Result(ResultCode.success,"修改成功"); + } + + /** + * 删除数据 + * + * @param + * @return 删除结果 + */ + @PostMapping("/del") + public Result delete(@RequestBody PowerStationDto powerStationDto) { + Map columnMap = new HashMap<>(); + columnMap.put("biz_id",powerStationDto.getPowerStationId()); + Map columnMap2 = new HashMap<>(); + columnMap2.put("power_station",powerStationDto.getPowerStationId()); + motorGroupService.removeByMap(columnMap2); + pointService.removeByMap(columnMap2); + deviceService.removeByMap(columnMap2); + algorithmService.removeByMap(columnMap2); + if (!powerStationService.removeByMap(columnMap)){ + return new Result(ResultCode.operate_failure,"删除失败"); + } + return new Result(ResultCode.success,"删除成功"); + } +} + diff --git a/bolt-web/src/main/java/com/jiluo/bolt/controller/TemperatureController.java b/bolt-web/src/main/java/com/jiluo/bolt/controller/TemperatureController.java new file mode 100644 index 0000000..7848bbd --- /dev/null +++ b/bolt-web/src/main/java/com/jiluo/bolt/controller/TemperatureController.java @@ -0,0 +1,39 @@ +package com.jiluo.bolt.controller; + +import com.baomidou.mybatisplus.extension.api.ApiController; +import com.jiluo.bolt.common.DefectType; +import com.jiluo.bolt.common.DetectResult; +import com.jiluo.bolt.domain.Result; +import com.jiluo.bolt.domain.ResultCode; +import com.jiluo.bolt.engine.Engine; +import com.jiluo.bolt.entity.dto.TempSenserDto; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +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; + +/** + * Created with IntelliJ IDEA. + * + * @Author: fy + * @Date: 2023/08/04/16:39 + * @Description: + */ +@RestController +@RequestMapping("api") +public class TemperatureController extends ApiController { + private static final Logger logger = LoggerFactory.getLogger(TemperatureController.class); + + @PostMapping("/temperature/dataCallback") + public Result dataCallback(@RequestBody TempSenserDto tempSenserDto){ + List detectResultList = new ArrayList<>(); + detectResultList.add(DetectResult.builder().zone(1).position(1).type(DefectType.temperature.name()).value(tempSenserDto.getValue().floatValue()).img("-").alarm(0).build()); + Engine.callback(tempSenserDto.getJobId(),detectResultList); + return new Result(ResultCode.success); + } +} diff --git a/bolt-web/src/main/java/com/jiluo/bolt/controller/UserController.java b/bolt-web/src/main/java/com/jiluo/bolt/controller/UserController.java new file mode 100644 index 0000000..f1859a3 --- /dev/null +++ b/bolt-web/src/main/java/com/jiluo/bolt/controller/UserController.java @@ -0,0 +1,271 @@ +package com.jiluo.bolt.controller; + +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.extension.api.ApiController; +import com.jiluo.bolt.common.DefectType; +import com.jiluo.bolt.domain.Result; +import com.jiluo.bolt.domain.ResultCode; +import com.jiluo.bolt.entity.dto.PermissionDto; +import com.jiluo.bolt.entity.dto.RoleDto; +import com.jiluo.bolt.entity.dto.UserDto; +import com.jiluo.bolt.entity.po.*; +import com.jiluo.bolt.entity.vo.PermissionVo; +import com.jiluo.bolt.entity.vo.RoleVo; +import com.jiluo.bolt.entity.vo.UserVo; +import com.jiluo.bolt.service.RoleItemService; +import com.jiluo.bolt.service.RoleService; +import com.jiluo.bolt.service.RoleValueService; +import com.jiluo.bolt.service.UserService; +import com.jiluo.bolt.util.AesEncryptUtil; +import com.jiluo.bolt.util.JwtUtils; +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.web.bind.annotation.*; +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.validation.Valid; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +/** + * 用户信息表(user)表控制层 + * @author Fangy + * @since 2023-04-17 13:26:12 + */ +@RestController +@RequestMapping("api/user") +public class UserController extends ApiController { + + private static final Logger logger = LoggerFactory.getLogger(UserController.class); + + /** + * 服务对象 + */ + @Resource + private UserService userService; + @Resource + private RoleService roleService; + @Resource + private RoleValueService roleValueService; + @Resource + private RoleItemService roleItemService; + @Autowired + JwtUtils jwtUtils; + @Value("${aesKey}") + String aesKey; + + /** + * 登录功能 + */ + @PostMapping("/login") + public Object login(@RequestBody UserDto userDto,HttpServletRequest request, HttpServletResponse response) throws Exception { + User user = null; + if ((userDto.getUid()==null || StringUtils.isBlank(userDto.getUid())) && (userDto.getPassword()==null || StringUtils.isBlank(userDto.getPassword()))){ + user = userService.getByUid("user_defaul"); + if (user == null){ + user = userService.select(new UserDto()).get(0); + } + }else { + user = userService.getByUid(userDto.getUid()); + if(user == null || !StringUtils.equals(userDto.getPassword(), AesEncryptUtil.aesDecrypt(user.getPassword(),aesKey))) { + return Result.INVALID_USER_PASS; + } + } + List roleValueList = roleValueService.getByRoleId(user.getRole()); + List roles = roleItemService.getByBizId(roleValueList.stream().map(RoleValue::getItemId).collect(Collectors.toList())) + .stream().map(x -> RoleVo.builder().roleId(x.getBizId()).name(x.getName()).scope(x.getScope()).type(x.getType()).value(roleValueList.stream() + .filter(r -> StringUtils.equalsIgnoreCase(r.getItemId(), x.getBizId())).findFirst().map(RoleValue::getItemValue).orElse(null)).build()) + .collect(Collectors.toList()); + response.setHeader("Authorization", jwtUtils.getToken(userDto.getUid(),request.getSession().getId(),userDto.getClientVersion(),userDto.getClientType())); + roles.stream().forEach(x->{ + if (x.getRoleId().equals("detect_pole")){ + x.setValue(JSONObject.parseArray(x.getValue().toString())); + }}); + JSONObject jsonObject = new JSONObject(); + jsonObject.put("userId",user.getBizId()); + jsonObject.put("userName",user.getUserName()); + jsonObject.put("role",roleService.getByRoleId(user.getRole()).getRoleName()); + jsonObject.put("permissionList",roles); + return jsonObject; + } + + /** + * 条件查询-角色数据 + */ + @PostMapping("/selectRole") + public Result selectRole() { + List roles = roleService.select(new RoleDto()); + List roleVos = new ArrayList<>(); + roles.stream().forEach(item->{ + JSONObject roleVo = new JSONObject(); + roleVo.put("roleId",item.getRoleId()); + roleVo.put("roleName",item.getRoleName()); + roleVos.add(roleVo); + }); + return new Result(ResultCode.success,roleVos); + } + + + /** + * 新增-角色数据 + */ + @PostMapping("/addRole") + public Result insertRole(@RequestBody @Valid RoleDto roleDto) { + roleDto.setRoleId(roleService.add(roleDto)); + List roleValues = new ArrayList<>(); + roleItemService.getAll().stream().forEach(roleItem -> { + RoleValue roleValue = new RoleValue(); + String item_value = new String(); + if (roleItem.getType().equals(0)){ + item_value = "true"; + }else if (roleItem.getType().equals(1)){ + item_value = JSONObject.toJSONString(DefectType.values()); + } + roleValue.setRoleId(roleDto.getRoleId()) + .setItemId(roleItem.getBizId()) + .setItemValue(item_value); + roleValues.add(roleValue); + }); + if (!roleValueService.saveBatch(roleValues)){ + return new Result(ResultCode.operate_failure,"添加失败"); + } + return new Result(ResultCode.success,"添加成功"); + } + + /** + * 修改-角色数据 + */ + @PostMapping("/updateRole") + public Result updateRole(@RequestBody @Valid RoleDto roleDto) { + if (!StringUtils.isNotBlank(roleDto.getRoleId())){ + return new Result(ResultCode.illegal_argument,"缺失id参数"); + } + if (!roleService.updateByBizId(roleDto)){ + return new Result(ResultCode.operate_failure,"修改失败"); + } + return new Result(ResultCode.success,"修改成功"); + } + + /** + * 删除-角色数据 + */ + @PostMapping("/deleteRole") + public Result deleteRole(@RequestBody RoleDto roleDto) { + Map columnMap = new HashMap<>(); + columnMap.put("role_id",roleDto.getRoleId()); + Map columnMap2 = new HashMap<>(); + columnMap2.put("role",roleDto.getRoleId()); + if (!roleService.removeByMap(columnMap)){ + return new Result(ResultCode.operate_failure,"删除失败"); + } + roleValueService.removeByMap(columnMap); + userService.removeByMap(columnMap2); + return new Result(ResultCode.success,"删除成功"); + } + + /** + * 条件查询-用户数据 + */ + @PostMapping("/selectUser") + public Result selectUser(@RequestBody UserDto userDto) { + List users = userService.select(userDto); + List userVos = new ArrayList<>(); + users.stream().forEach(item->{ + try { + userVos.add(UserVo.builder().id(item.getId()) + .uid(item.getBizId()) + .userName(item.getUserName()) + .role(roleService.getByRoleId(item.getRole()).getRoleName()) + .gmtCreate(item.getGmtCreate()) + .password(AesEncryptUtil.aesDecrypt(item.getPassword(), aesKey)).build()); + } catch (Exception e) { + logger.error("[UserController] selectUser:", e.getMessage(), e); + } + }); + return new Result(ResultCode.success,userVos); + } + + /** + * 新增-用户数据 + */ + @PostMapping("/addUser") + public Result insertUser(@RequestBody @Valid UserDto userDto) throws Exception { + userDto.setPassword(AesEncryptUtil.aesEncrypt(userDto.getPassword(),aesKey)); + if (!userService.add(userDto)){ + return new Result(ResultCode.operate_failure,"添加失败"); + } + return new Result(ResultCode.success,"添加成功"); + } + + /** + * 修改-用户数据 + */ + @PostMapping("/updateUser") + public Result updateUser(@RequestBody @Valid UserDto userDto) throws Exception { + if (!StringUtils.isNotBlank(userDto.getUid()) || userDto.getId().equals(0)){ + return new Result(ResultCode.illegal_argument,"缺失id参数"); + } + userDto.setPassword(AesEncryptUtil.aesEncrypt(userDto.getPassword(),aesKey)); + if (!userService.updateByBizId(userDto)){ + return new Result(ResultCode.operate_failure,"修改失败"); + } + return new Result(ResultCode.success,"修改成功"); + } + + /** + * 删除-用户数据 + */ + @PostMapping("/deleteUser") + public Result deleteUser(@RequestBody UserDto userDto) { + Map columnMap = new HashMap<>(); + columnMap.put("biz_id",userDto.getUid()); + if (!userService.removeByMap(columnMap)){ + return new Result(ResultCode.operate_failure,"删除失败"); + } + return new Result(ResultCode.success,"删除成功"); + } + + /** + * 条件查询-角色权限数据 + */ + @PostMapping("/selectPermission") + public Result selectPermission(@RequestBody PermissionDto permissionDto) { + List roleValues = roleValueService.select(permissionDto); + List permissionVos = new ArrayList<>(); + roleValues.stream().filter(x->!x.getItemId().equals("detect_pole")).forEach(item->{ + permissionVos.add(PermissionVo.builder().permissionId(item.getItemId()) + .permissionName(roleItemService.getByBizId(item.getItemId()).getName()) + .value(Boolean.parseBoolean(item.getItemValue())) + .scope(roleItemService.getByBizId(item.getItemId()).getScope()).build()); + }); + return new Result(ResultCode.success,permissionVos); + } + + /** + * 修改-角色权限数据 + */ + @PostMapping("/updatePermission") + public Result updatePermission(@RequestBody @Valid PermissionDto permissionDto) { + if (!StringUtils.isNotBlank(permissionDto.getRoleId())){ + return new Result(ResultCode.illegal_argument,"缺失id参数"); + } + permissionDto.getPermissionList().stream().forEach(item->{ + RoleValue roleValue = new RoleValue(); + roleValue.setRoleId(permissionDto.getRoleId()) + .setItemId(item.getPermissionId()) + .setItemValue(item.getValue().toString()); + roleValueService.updateByItemId(roleValue); + }); + return new Result(ResultCode.success,"修改成功"); + } + + +} + diff --git a/bolt-web/src/main/java/com/jiluo/bolt/controller/WebSocketController.java b/bolt-web/src/main/java/com/jiluo/bolt/controller/WebSocketController.java new file mode 100644 index 0000000..c0c7a3c --- /dev/null +++ b/bolt-web/src/main/java/com/jiluo/bolt/controller/WebSocketController.java @@ -0,0 +1,38 @@ +package com.jiluo.bolt.controller; + +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.extension.api.ApiController; +import com.jiluo.bolt.websocket.WebSocket; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.annotation.Resource; + +/** + * Created with IntelliJ IDEA. + * + * @Author: fy + * @Date: 2023/10/16/10:55 + * @Description: + */ +@RestController +@RequestMapping("api/websocket") +public class WebSocketController extends ApiController { + + private static final Logger logger = LoggerFactory.getLogger(WebSocketController.class); + + @Resource + WebSocket webSocket; + + // 每30秒执行一次,维持websocket连接 + @Scheduled(fixedRate = 30000) + public void pointStatus(){ + JSONObject jsonObject = new JSONObject(); + jsonObject.put("title","test"); + jsonObject.put("value","keep connect /30s "); + webSocket.sendAllMessage(jsonObject.toJSONString()); + } +} diff --git a/bolt-web/src/main/java/com/jiluo/bolt/domain/Result.java b/bolt-web/src/main/java/com/jiluo/bolt/domain/Result.java new file mode 100644 index 0000000..4fb561c --- /dev/null +++ b/bolt-web/src/main/java/com/jiluo/bolt/domain/Result.java @@ -0,0 +1,63 @@ +package com.jiluo.bolt.domain; + +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; + +import java.io.Serializable; + +/** + * 统一输出定义 + * + * @author caoyiwen + * @creation 2015年9月2日 + */ +@ToString +public class Result implements Serializable { + + private static final long serialVersionUID = 1L; + public static final Result NOT_SUPPORT = new Result(ResultCode.not_support_operate); + public static final Result NOT_PRIVILEGED = new Result(ResultCode.not_privileged); + public static final Result INVALID_USER_PASS = new Result(ResultCode.invalidUserOrPassword); + public static final Result ILLEGAL_ARGUMENT = new Result(ResultCode.illegal_argument); + public static final Result FAILURE = new Result(ResultCode.operate_failure); + public static final Result ERROR = new Result(ResultCode.system_error); + public static final Result NOT_LOGIN = new Result(ResultCode.need_login); + public static final Result SUCCESS = new Result(ResultCode.success); + + @Getter + @Setter + private int code; + @Getter + @Setter + private String desc; + @Getter + @Setter + private Object body; + + public Result(ResultCode resultCode) { + setCode(resultCode.getCode()); + setDesc(resultCode.getDesc()); + } + + public Result(int code, String msg) { + setCode(code); + setDesc(msg); + } + + /** + * 使用通用结果码生成对象 + */ + public Result(ResultCode resultCode, Object body) { + setCode(resultCode.getCode()); + setDesc(resultCode.getDesc()); + setBody(body); + } + + /** + * 判断执行结果是否成功 + */ + public boolean isSuccess() { + return ResultCode.success.getCode() == code; + } +} diff --git a/bolt-web/src/main/java/com/jiluo/bolt/domain/ResultCode.java b/bolt-web/src/main/java/com/jiluo/bolt/domain/ResultCode.java new file mode 100644 index 0000000..3106e1c --- /dev/null +++ b/bolt-web/src/main/java/com/jiluo/bolt/domain/ResultCode.java @@ -0,0 +1,32 @@ +package com.jiluo.bolt.domain; + +import lombok.Getter; + +/** + * 统一结果码定义 + * + * @author caoyiwen + * @creation 2015年9月2日 + */ +public enum ResultCode { + + success(200, "成功"), + + invalidUserOrPassword(300, "用户名或者密码错误!"), + illegal_argument(400, "参数错误!"), + need_login(401, "未登录!"), + not_support_operate(404, "不支持的请求!"), + not_privileged(405, "无权限执行该操作!"), + system_error(500, "系统异常!"), + operate_failure(503, "操作失败!"); + + @Getter + private final int code; + @Getter + private final String desc; + + ResultCode(int code, String desc) { + this.code = code; + this.desc = desc; + } +} diff --git a/bolt-web/src/main/java/com/jiluo/bolt/exception/BoltException.java b/bolt-web/src/main/java/com/jiluo/bolt/exception/BoltException.java new file mode 100644 index 0000000..8979896 --- /dev/null +++ b/bolt-web/src/main/java/com/jiluo/bolt/exception/BoltException.java @@ -0,0 +1,21 @@ +package com.jiluo.bolt.exception; + +import com.jiluo.bolt.domain.Result; +import lombok.Getter; + +/** + * Created with IntelliJ IDEA. + * + * @Author: fy + * @Date: 2023/05/04/18:08 + * @Description: + */ +@Getter +public class BoltException extends RuntimeException{ + + private final Result result; + + public BoltException(Result result) { + this.result = result; + } +} diff --git a/bolt-web/src/main/resources/application-dev.yml b/bolt-web/src/main/resources/application-dev.yml new file mode 100644 index 0000000..188fc83 --- /dev/null +++ b/bolt-web/src/main/resources/application-dev.yml @@ -0,0 +1,28 @@ +spring: + datasource: + driver-class-name: com.mysql.cj.jdbc.Driver + url: jdbc:mysql://localhost:3306/bolt2?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai + username: root #用户名 + password: 123456 #密码 + +minio: + endpoint: http://47.109.27.8/ #Minio服务ip + port: 9000 + accessKey: minioadmin #访问的key + secretKey: minioadmin #访问的秘钥 + secure: false + bucketName: "defaultbucket" #默认存储桶名称 + time: "0 50 23 * * *" # 每天23:50 上传当天的图片 + +defect_work_dir: "D:/data/record/" #图片存储路径 + +defect_img_dir: "/record/" #前端图片url头 + +defect_csv_dir: "D:/data/work/permanent/" #检测数据本地csv长期存储路径 + +max_file_keep_time: 60 #数据库检测数据存储最大天数 + +device: + camera: +# driver: "Lucid,Baumer,Basler" + driver: "" diff --git a/bolt-web/src/main/resources/application-prod.yml b/bolt-web/src/main/resources/application-prod.yml new file mode 100644 index 0000000..8aa2410 --- /dev/null +++ b/bolt-web/src/main/resources/application-prod.yml @@ -0,0 +1,28 @@ +spring: + datasource: + driver-class-name: com.mysql.cj.jdbc.Driver + url: jdbc:mysql://localhost:3306/bolt2?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai + username: root #用户名 + password: 123456 #密码 + +minio: + endpoint: http://192.168.210.109/ #Minio服务ip + port: 9000 + accessKey: AKIAIOSFODNN7EXAMPLE #访问的key + secretKey: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY #访问的秘钥 + secure: false + bucketName: "au0000000005" #默认存储桶名称 李家峡5号机 + time: "0 50 23 * * *" # 每天23:50 上传当天的图片 + +defect_work_dir: "/data/record/" #图片存储路径 + +defect_img_dir: "/record/" #前端图片url头 + +defect_csv_dir: "/data/work/permanent/" #检测数据本地csv长期存储路径 + +max_file_keep_time: 60 #数据库检测数据存储最大天数 + +device: + camera: + # driver: "Lucid,Baumer,Basler" + driver: "" diff --git a/bolt-web/src/main/resources/application.properties b/bolt-web/src/main/resources/application.properties new file mode 100644 index 0000000..2c06833 --- /dev/null +++ b/bolt-web/src/main/resources/application.properties @@ -0,0 +1,2 @@ +spring.jackson.date-format=yyyy-MM-dd HH:mm:ss +spring.jackson.time-zone=Asia/Shanghai diff --git a/bolt-web/src/main/resources/application.yml b/bolt-web/src/main/resources/application.yml new file mode 100644 index 0000000..05c0307 --- /dev/null +++ b/bolt-web/src/main/resources/application.yml @@ -0,0 +1,28 @@ +spring: + application: + name: bolt-web + profiles: + active: prod + web: + resources: + static-locations: file:doc,file:static,file:/data/img + + servlet: + multipart: + max-file-size: 100MB + max-request-size: 100MB + +mybatis: + mapper-locations: classpath:mapper/*.xml + +aesKey: "dbf13279f5bc85b038cbc9ee21dfbc03" + +jwt: + config: + header: Authorization + refreshTime: 3600000 # 刷新时间 1小时 + expiresTime: 7200000 # 过期 2小时 + secretKey: jiluo2019 + +server: + port: 8081 diff --git a/bolt-web/src/main/resources/logback-spring.xml b/bolt-web/src/main/resources/logback-spring.xml new file mode 100644 index 0000000..b58dfd1 --- /dev/null +++ b/bolt-web/src/main/resources/logback-spring.xml @@ -0,0 +1,152 @@ + + + + + + + bolt + + + + + + + + + + + + + + + + + + + + + + + + + + + + ${log.level} + + + ${CONSOLE_LOG_PATTERN} + + UTF-8 + + + + + + + + ${log.path}/${log.name}/${log.name}-info.log + + + %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %.-${log.length}msg%n + UTF-8 + + + + ${log.path}/${log.name}/${log.name}-info-%d{yyyy-MM-dd}.%i.log + + ${log.max.file} + + ${log.max.history} + + ${log.max.size} + + + + INFO + ACCEPT + DENY + + + + + + ${log.path}/${log.name}/${log.name}-warn.log + + %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %.-${log.length}msg%n + UTF-8 + + + ${log.path}/${log.name}/${log.name}-warn-%d{yyyy-MM-dd}.%i.log + ${log.max.file} + ${log.max.history} + ${log.max.size} + + + WARN + ACCEPT + DENY + + + + + + ${log.path}/${log.name}/${log.name}-error.log + + %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %.-${log.length}msg%n + UTF-8 + + + ${log.path}/${log.name}/${log.name}-error-%d{yyyy-MM-dd}.%i.log + ${log.max.file} + ${log.max.history} + ${log.max.size} + + + ERROR + ACCEPT + DENY + + + + + + ${log.path}/${log.name}/${log.name}-protocol.log + + %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %.-${log.length}msg%n + UTF-8 + + + ${log.path}/${log.name}/${log.name}-protocol-%d{yyyy-MM-dd}.%i.log + ${log.max.file} + ${log.max.history} + ${log.max.size} + + + + + + ${log.path}/${log.name}/${log.name}-message.log + + %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %.-${log.length}msg%n + UTF-8 + + + ${log.path}/${log.name}/${log.name}-message-%d{yyyy-MM-dd}.%i.log + ${log.max.file} + ${log.max.history} + ${log.max.size} + + + + + + + + + + + + + + \ No newline at end of file diff --git a/console.log b/console.log new file mode 100644 index 0000000..d1e1924 --- /dev/null +++ b/console.log @@ -0,0 +1,213 @@ + + . ____ _ __ _ _ + /\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \ +( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \ + \\/ ___)| |_)| | | | | || (_| | ) ) ) ) + ' |____| .__|_| |_|_| |_\__, | / / / / + =========|_|==============|___/=/_/_/_/ + :: Spring Boot :: (v2.7.10) + +2023-10-17 14:58:30.038 INFO 27232 --- [kground-preinit] o.h.validator.internal.util.Version : HV000001: Hibernate Validator 6.0.20.Final +2023-10-17 14:58:30.051 INFO 27232 --- [ main] com.jiluo.bolt.BoltServerApplication : Starting BoltServerApplication v0.0.1-SNAPSHOT using Java 1.8.0_382 on iZ2vca7ty2zom016x70b97Z with PID 27232 (/export/bolt-web/bolt-web-0/bolt-web-0.jar started by root in /export/bolt-web/bolt-web-0) +2023-10-17 14:58:30.052 INFO 27232 --- [ main] com.jiluo.bolt.BoltServerApplication : No active profile set, falling back to 1 default profile: "default" +2023-10-17 14:58:31.688 WARN 27232 --- [ main] o.m.s.mapper.ClassPathMapperScanner : No MyBatis mapper was found in '[com.jiluo.bolt]' package. Please check your configuration. +2023-10-17 14:58:31.902 WARN 27232 --- [ main] o.m.s.mapper.ClassPathMapperScanner : No MyBatis mapper was found in '[com.jiluo.blot.mapper]' package. Please check your configuration. +2023-10-17 14:58:32.757 INFO 27232 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port(s): 8081 (http) +2023-10-17 14:58:32.774 INFO 27232 --- [ main] o.a.coyote.http11.Http11NioProtocol : Initializing ProtocolHandler ["http-nio-8081"] +2023-10-17 14:58:32.774 INFO 27232 --- [ main] o.apache.catalina.core.StandardService : Starting service [Tomcat] +2023-10-17 14:58:32.775 INFO 27232 --- [ main] org.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/9.0.73] +2023-10-17 14:58:32.877 INFO 27232 --- [ main] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext +2023-10-17 14:58:32.877 INFO 27232 --- [ main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 2691 ms + _ _ |_ _ _|_. ___ _ | _ +| | |\/|_)(_| | |_\ |_)||_|_\ + / | + 3.4.0 +2023-10-17 14:58:34.620 INFO 27232 --- [ main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Starting... +2023-10-17 14:58:35.119 INFO 27232 --- [ main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Start completed. +2023-10-17 14:58:35.436 INFO 27232 --- [ main] com.jiluo.bolt.export.Export : [Export] init AUTO_EXPORT_PATH=/data/report/; AUTO_EXPORT_PERIOD=7 +2023-10-17 14:58:37.698 INFO 27232 --- [ main] o.a.coyote.http11.Http11NioProtocol : Starting ProtocolHandler ["http-nio-8081"] +2023-10-17 14:58:37.720 INFO 27232 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8081 (http) with context path '' +2023-10-17 14:58:37.739 INFO 27232 --- [ main] s.a.ScheduledAnnotationBeanPostProcessor : No TaskScheduler/ScheduledExecutorService bean found for scheduled processing +2023-10-17 14:58:37.756 INFO 27232 --- [ main] com.jiluo.bolt.BoltServerApplication : Started BoltServerApplication in 8.747 seconds (JVM running for 9.51) +2023-10-17 14:58:41.630 INFO 27232 --- [nio-8081-exec-1] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring DispatcherServlet 'dispatcherServlet' +2023-10-17 14:58:41.630 INFO 27232 --- [nio-8081-exec-1] o.s.web.servlet.DispatcherServlet : Initializing Servlet 'dispatcherServlet' +2023-10-17 14:58:41.632 INFO 27232 --- [nio-8081-exec-1] o.s.web.servlet.DispatcherServlet : Completed initialization in 2 ms +2023-10-17 14:58:41.683 INFO 27232 --- [nio-8081-exec-1] com.jiluo.bolt.websocket.WebSocket : admin +2023-10-17 14:58:41.684 INFO 27232 --- [nio-8081-exec-1] com.jiluo.bolt.websocket.WebSocket : 【websocket消息】有新的连接,总数为:1 +2023-10-17 14:58:42.799 INFO 27232 --- [pool-4-thread-1] com.jiluo.bolt.engine.EngineDriver : plc连接成功,地址为:mock_plcmock_plc +2023-10-17 14:58:42.800 INFO 27232 --- [pool-4-thread-1] com.jiluo.bolt.engine.EngineDriver : plc连接成功,地址为:mock_plc192.168.1.60 +2023-10-17 14:58:42.801 INFO 27232 --- [pool-4-thread-1] com.jiluo.bolt.engine.EngineDriver : 温度传感器创建成功! 设备id:temperature_sensor_2228774264146432 +2023-10-17 14:58:43.304 INFO 27232 --- [nio-8081-exec-2] com.jiluo.bolt.websocket.WebSocket : 【websocket消息】有新的消息:{"status":true,"pointId":"POINT_2206768181389824"} +2023-10-17 14:58:43.308 ERROR 27232 --- [nio-8081-exec-2] com.jiluo.bolt.websocket.WebSocket : [WebSocket] onError: + +java.lang.NullPointerException: null + at com.jiluo.bolt.websocket.WebSocket.sendStatusMessage1(WebSocket.java:165) + at com.jiluo.bolt.websocket.WebSocket.onMessage(WebSocket.java:84) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.lang.reflect.Method.invoke(Method.java:498) + at org.apache.tomcat.websocket.pojo.PojoMessageHandlerWholeBase.onMessage(PojoMessageHandlerWholeBase.java:104) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:415) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:515) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:301) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:133) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:185) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:157) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:926) + at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1791) + at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) + at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) + at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) + at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) + at java.lang.Thread.run(Thread.java:750) + +2023-10-17 14:58:43.312 INFO 27232 --- [nio-8081-exec-2] com.jiluo.bolt.websocket.WebSocket : 【websocket消息】连接断开,总数为:0 +2023-10-17 14:58:56.667 INFO 27232 --- [nio-8081-exec-6] com.jiluo.bolt.websocket.WebSocket : amind +2023-10-17 14:58:56.667 INFO 27232 --- [nio-8081-exec-6] com.jiluo.bolt.websocket.WebSocket : 【websocket消息】有新的连接,总数为:1 +2023-10-17 14:58:56.736 INFO 27232 --- [nio-8081-exec-8] com.jiluo.bolt.websocket.WebSocket : 【websocket消息】有新的消息:{"status":true,"pointId":"POINT_2206768181389824"} +2023-10-17 14:58:56.736 ERROR 27232 --- [nio-8081-exec-8] com.jiluo.bolt.websocket.WebSocket : [WebSocket] onError: + +java.lang.NullPointerException: null + at com.jiluo.bolt.websocket.WebSocket.sendStatusMessage1(WebSocket.java:165) + at com.jiluo.bolt.websocket.WebSocket.onMessage(WebSocket.java:84) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.lang.reflect.Method.invoke(Method.java:498) + at org.apache.tomcat.websocket.pojo.PojoMessageHandlerWholeBase.onMessage(PojoMessageHandlerWholeBase.java:104) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:415) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:515) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:301) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:133) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:185) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:157) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:926) + at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1791) + at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) + at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) + at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) + at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) + at java.lang.Thread.run(Thread.java:750) + +2023-10-17 14:58:56.737 INFO 27232 --- [nio-8081-exec-8] com.jiluo.bolt.websocket.WebSocket : 【websocket消息】连接断开,总数为:0 +2023-10-17 14:59:03.810 INFO 27232 --- [nio-8081-exec-2] com.jiluo.bolt.websocket.WebSocket : admin +2023-10-17 14:59:03.810 INFO 27232 --- [nio-8081-exec-2] com.jiluo.bolt.websocket.WebSocket : 【websocket消息】有新的连接,总数为:1 +2023-10-17 14:59:26.751 INFO 27232 --- [nio-8081-exec-5] com.jiluo.bolt.websocket.WebSocket : amind +2023-10-17 14:59:26.751 INFO 27232 --- [nio-8081-exec-5] com.jiluo.bolt.websocket.WebSocket : 【websocket消息】有新的连接,总数为:2 +2023-10-17 14:59:26.799 INFO 27232 --- [nio-8081-exec-9] com.jiluo.bolt.websocket.WebSocket : 【websocket消息】有新的消息:{"status":true,"pointId":"POINT_2206768181389824"} +2023-10-17 14:59:26.799 ERROR 27232 --- [nio-8081-exec-9] com.jiluo.bolt.websocket.WebSocket : [WebSocket] onError: + +java.lang.NullPointerException: null + at com.jiluo.bolt.websocket.WebSocket.sendStatusMessage1(WebSocket.java:165) + at com.jiluo.bolt.websocket.WebSocket.onMessage(WebSocket.java:84) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.lang.reflect.Method.invoke(Method.java:498) + at org.apache.tomcat.websocket.pojo.PojoMessageHandlerWholeBase.onMessage(PojoMessageHandlerWholeBase.java:104) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:415) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:515) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:301) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:133) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:185) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:157) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:926) + at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1791) + at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) + at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) + at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) + at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) + at java.lang.Thread.run(Thread.java:750) + +2023-10-17 14:59:26.800 INFO 27232 --- [nio-8081-exec-9] com.jiluo.bolt.websocket.WebSocket : 【websocket消息】连接断开,总数为:1 +2023-10-17 14:59:32.533 INFO 27232 --- [io-8081-exec-10] com.jiluo.bolt.websocket.WebSocket : 【websocket消息】有新的消息:{"status":true,"pointId":"POINT_2206768181389824"} +2023-10-17 14:59:32.533 ERROR 27232 --- [io-8081-exec-10] com.jiluo.bolt.websocket.WebSocket : [WebSocket] onError: + +java.lang.NullPointerException: null + at com.jiluo.bolt.websocket.WebSocket.sendStatusMessage1(WebSocket.java:165) + at com.jiluo.bolt.websocket.WebSocket.onMessage(WebSocket.java:84) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.lang.reflect.Method.invoke(Method.java:498) + at org.apache.tomcat.websocket.pojo.PojoMessageHandlerWholeBase.onMessage(PojoMessageHandlerWholeBase.java:104) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:415) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:515) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:301) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:133) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:185) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:157) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:926) + at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1791) + at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) + at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) + at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) + at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) + at java.lang.Thread.run(Thread.java:750) + +2023-10-17 14:59:32.534 INFO 27232 --- [io-8081-exec-10] com.jiluo.bolt.websocket.WebSocket : 【websocket消息】连接断开,总数为:0 +2023-10-17 15:00:10.007 WARN 27232 --- [nio-8081-exec-2] o.s.web.servlet.PageNotFound : No mapping for GET /index.php +2023-10-17 15:00:10.007 WARN 27232 --- [nio-8081-exec-3] o.s.web.servlet.PageNotFound : No mapping for GET / +2023-10-17 15:00:10.034 WARN 27232 --- [nio-8081-exec-4] o.s.web.servlet.PageNotFound : No mapping for GET /login/stylesheets/theme.css +2023-10-17 15:00:10.052 WARN 27232 --- [nio-8081-exec-6] o.s.web.servlet.PageNotFound : No mapping for GET /public/stylesheets/theme.css +2023-10-17 15:00:10.062 WARN 27232 --- [nio-8081-exec-5] o.s.web.servlet.PageNotFound : No mapping for GET /chs/js/lang_zh_tw.js +2023-10-17 15:00:10.065 WARN 27232 --- [nio-8081-exec-7] o.s.web.servlet.PageNotFound : No mapping for GET /stylesheets/theme.css +2023-10-17 15:00:10.073 WARN 27232 --- [nio-8081-exec-9] o.s.web.servlet.PageNotFound : No mapping for GET /customer/js/lang_zh_tw.js +2023-10-17 15:00:10.076 WARN 27232 --- [nio-8081-exec-8] o.s.web.servlet.PageNotFound : No mapping for GET /index.php +2023-10-17 15:00:10.087 WARN 27232 --- [nio-8081-exec-1] o.s.web.servlet.PageNotFound : No mapping for GET /ips/index.php +2023-10-17 15:00:16.454 INFO 27232 --- [io-8081-exec-10] com.jiluo.bolt.websocket.WebSocket : admin +2023-10-17 15:00:16.455 INFO 27232 --- [io-8081-exec-10] com.jiluo.bolt.websocket.WebSocket : 【websocket消息】有新的连接,总数为:1 +2023-10-17 15:00:21.494 INFO 27232 --- [nio-8081-exec-4] com.jiluo.bolt.websocket.WebSocket : amind +2023-10-17 15:00:21.495 INFO 27232 --- [nio-8081-exec-4] com.jiluo.bolt.websocket.WebSocket : 【websocket消息】有新的连接,总数为:2 +2023-10-17 15:00:21.564 INFO 27232 --- [nio-8081-exec-8] com.jiluo.bolt.websocket.WebSocket : 【websocket消息】有新的消息:{"status":true,"pointId":"POINT_2206768181389824"} +2023-10-17 15:00:21.564 ERROR 27232 --- [nio-8081-exec-8] com.jiluo.bolt.websocket.WebSocket : [WebSocket] onError: + +java.lang.NullPointerException: null + at com.jiluo.bolt.websocket.WebSocket.sendStatusMessage1(WebSocket.java:165) + at com.jiluo.bolt.websocket.WebSocket.onMessage(WebSocket.java:84) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.lang.reflect.Method.invoke(Method.java:498) + at org.apache.tomcat.websocket.pojo.PojoMessageHandlerWholeBase.onMessage(PojoMessageHandlerWholeBase.java:104) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:415) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:515) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:301) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:133) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:185) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:157) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:926) + at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1791) + at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) + at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) + at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) + at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) + at java.lang.Thread.run(Thread.java:750) + +2023-10-17 15:00:21.565 INFO 27232 --- [nio-8081-exec-8] com.jiluo.bolt.websocket.WebSocket : 【websocket消息】连接断开,总数为:1 diff --git a/mvnw b/mvnw new file mode 100644 index 0000000..8a8fb22 --- /dev/null +++ b/mvnw @@ -0,0 +1,316 @@ +#!/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 /usr/local/etc/mavenrc ] ; then + . /usr/local/etc/mavenrc + fi + + 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="`\\unset -f command; \\command -v 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/org/apache/maven/wrapper/maven-wrapper/3.1.0/maven-wrapper-3.1.0.jar" + else + jarUrl="https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.1.0/maven-wrapper-3.1.0.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" || rm -f "$wrapperJarPath" + else + wget --http-user=$MVNW_USERNAME --http-password=$MVNW_PASSWORD "$jarUrl" -O "$wrapperJarPath" || rm -f "$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 \ + $MAVEN_DEBUG_OPTS \ + -classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \ + "-Dmaven.home=${M2_HOME}" \ + "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \ + ${WRAPPER_LAUNCHER} $MAVEN_CONFIG "$@" diff --git a/mvnw.cmd b/mvnw.cmd new file mode 100644 index 0000000..1d8ab01 --- /dev/null +++ b/mvnw.cmd @@ -0,0 +1,188 @@ +@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 "%USERPROFILE%\mavenrc_pre.bat" call "%USERPROFILE%\mavenrc_pre.bat" %* +if exist "%USERPROFILE%\mavenrc_pre.cmd" call "%USERPROFILE%\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/org/apache/maven/wrapper/maven-wrapper/3.1.0/maven-wrapper-3.1.0.jar" + +FOR /F "usebackq 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%/org/apache/maven/wrapper/maven-wrapper/3.1.0/maven-wrapper-3.1.0.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 "%USERPROFILE%\mavenrc_post.bat" call "%USERPROFILE%\mavenrc_post.bat" +if exist "%USERPROFILE%\mavenrc_post.cmd" call "%USERPROFILE%\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% + +cmd /C exit /B %ERROR_CODE% diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..b2de94d --- /dev/null +++ b/pom.xml @@ -0,0 +1,318 @@ + + + 4.0.0 + pom + + bolt-dao + bolt-web + bolt-core + bolt-api + bolt-kernel + + + org.springframework.boot + spring-boot-starter-parent + 2.7.10 + + + com.jiluo.bolt + bolt-server + 0.0.1-SNAPSHOT + bolt-server + bolt-server + + 1.8 + + 2.7.10 + + + + + + org.springframework.boot + spring-boot-starter-web + ${spring-boot.version} + + + + org.apache.httpcomponents + httpclient + 4.5.6 + + + + javax.validation + validation-api + 2.0.1.Final + + + + org.hibernate.validator + hibernate-validator + 6.0.20.Final + + + + + net.java.dev.jna + jna + 5.12.1 + + + + + com.baomidou + mybatis-plus-boot-starter + 3.1.0 + + + com.baomidou + mybatis-plus-generator + 3.4.0 + + + + com.github.yulichang + mybatis-plus-join + 1.2.4 + + + + + mysql + mysql-connector-java + 8.0.27 + + + org.springframework.boot + spring-boot-starter-jdbc + ${spring-boot.version} + + + + + org.projectlombok + lombok + 1.18.12 + provided + + + + + io.springfox + springfox-boot-starter + 3.0.0 + + + + + org.springframework.boot + spring-boot-devtools + true + ${spring-boot.version} + + + + + org.slf4j + slf4j-api + 1.7.25 + + + + + org.apache.commons + commons-lang3 + 3.12.0 + + + + + commons-codec + commons-codec + 1.15 + + + + commons-io + commons-io + 2.6 + + + + + com.auth0 + java-jwt + 3.10.3 + + + + + cn.hutool + hutool-all + 5.4.4 + + + + org.springframework.boot + spring-boot-starter-validation + ${spring-boot.version} + + + + + org.springframework.boot + spring-boot-starter-websocket + ${spring-boot.version} + + + + + com.alibaba + fastjson + 1.2.41 + + + + com.fasterxml.jackson.core + jackson-core + 2.10.1 + + + + com.fasterxml.jackson.core + jackson-databind + 2.10.1 + + + + + com.google.guava + guava + 31.1-jre + + + + + com.infiniteautomation + modbus4j + 3.0.3 + + + + + io.netty + netty-all + 4.1.42.Final + + + + com.squareup.okhttp3 + okhttp + 4.3.1 + + + + com.opencsv + opencsv + 5.6 + + + + com.deepoove + poi-tl + 1.9.1 + + + + + com.alibaba + easyexcel + 2.0.5 + + + + + io.minio + minio + 7.0.2 + + + + org.springframework + spring-test + 3.0.7.RELEASE + + + + + + + + org.projectlombok + lombok + provided + + + + org.slf4j + slf4j-api + + + + + org.apache.commons + commons-lang3 + + + + commons-codec + commons-codec + + + + com.alibaba + fastjson + + + com.fasterxml.jackson.core + jackson-core + + + com.fasterxml.jackson.core + jackson-databind + + + commons-io + commons-io + + + + + + + + false + + + true + + ias-snapshots + Infinite Automation Snapshot Repository + https://maven.mangoautomation.net/repository/ias-snapshot/ + + + + true + + + false + + ias-releases + Infinite Automation Release Repository + https://maven.mangoautomation.net/repository/ias-release/ + + + +