From 867209e6ddb48fc619060e1a8c0e5177045430a2 Mon Sep 17 00:00:00 2001 From: Administrator <756556956@qq.com> Date: Mon, 20 Jan 2025 20:09:10 +0800 Subject: [PATCH] 111 --- .gitignore | 46 + LICENSE | 20 + README.md | 86 + bin/clean.bat | 12 + bin/package.bat | 12 + bin/run.bat | 14 + pom.xml | 531 + sql/gongkongbang.sql | 19555 ++++++++++++++++ xinda-admin/pom.xml | 172 + .../main/java/com/xinda/XinDaApplication.java | 22 + .../com/xinda/XinDaServletInitializer.java | 18 + .../controller/common/CaptchaController.java | 99 + .../controller/common/CommonController.java | 172 + .../controller/monitor/CacheController.java | 131 + .../controller/monitor/ServerController.java | 31 + .../monitor/SysLogininforController.java | 91 + .../monitor/SysOperlogController.java | 77 + .../monitor/SysUserOnlineController.java | 98 + .../system/SysClientController.java | 109 + .../system/SysConfigController.java | 146 + .../controller/system/SysDeptController.java | 292 + .../system/SysDictDataController.java | 122 + .../system/SysDictTypeController.java | 146 + .../controller/system/SysIndexController.java | 30 + .../controller/system/SysLoginController.java | 110 + .../controller/system/SysMenuController.java | 159 + .../system/SysNoticeController.java | 100 + .../controller/system/SysPostController.java | 143 + .../system/SysProfileController.java | 166 + .../system/SysRegisterController.java | 42 + .../controller/system/SysRoleController.java | 300 + .../system/SysTranslateController.java | 77 + .../controller/system/SysUserController.java | 316 + .../controller/tool/SwaggerController.java | 24 + .../web/controller/tool/TestController.java | 185 + .../web/controller/tool/TestController2.java | 218 + .../xinda/web/core/config/SwaggerConfig.java | 125 + .../META-INF/spring-devtools.properties | 1 + .../src/main/resources/application-dev.yml | 164 + .../src/main/resources/application-prod.yml | 163 + .../src/main/resources/application.yml | 159 + xinda-admin/src/main/resources/banner.txt | 2 + .../main/resources/i18n/messages.properties | 210 + .../resources/i18n/messages_en_US.properties | 211 + .../resources/i18n/messages_zh_CN.properties | 211 + xinda-admin/src/main/resources/logback.xml | 150 + .../main/resources/mybatis/mybatis-config.xml | 20 + xinda-common/pom.xml | 213 + .../xinda/common/annotation/Anonymous.java | 19 + .../xinda/common/annotation/DataScope.java | 33 + .../xinda/common/annotation/DataSource.java | 28 + .../xinda/common/annotation/DictFormat.java | 22 + .../com/xinda/common/annotation/Excel.java | 187 + .../com/xinda/common/annotation/Excels.java | 18 + .../java/com/xinda/common/annotation/Log.java | 46 + .../xinda/common/annotation/RateLimiter.java | 40 + .../xinda/common/annotation/RepeatSubmit.java | 31 + .../xinda/common/annotation/SysProtocol.java | 21 + .../com/xinda/common/config/DeviceTask.java | 109 + .../com/xinda/common/config/RuoYiConfig.java | 135 + .../xinda/common/constant/CacheConstants.java | 64 + .../com/xinda/common/constant/Constants.java | 158 + .../xinda/common/constant/GenConstants.java | 117 + .../com/xinda/common/constant/HttpStatus.java | 105 + .../common/constant/MagicValueConstants.java | 21 + .../common/constant/ProductAuthConstant.java | 41 + .../xinda/common/constant/ScadaConstant.java | 14 + .../common/constant/SceneModelConstants.java | 47 + .../common/constant/ScheduleConstants.java | 50 + .../xinda/common/constant/SipConstants.java | 9 + .../xinda/common/constant/UserConstants.java | 78 + .../xinda/common/constant/XinDaConstant.java | 327 + .../core/controller/BaseController.java | 195 + .../common/core/device/DeviceAndProtocol.java | 66 + .../xinda/common/core/domain/AjaxResult.java | 214 + .../com/xinda/common/core/domain/BaseDO.java | 43 + .../xinda/common/core/domain/BaseEntity.java | 129 + .../common/core/domain/CommonResult.java | 112 + .../common/core/domain/ImportExcelVO.java | 36 + .../common/core/domain/OutputExcelVO.java | 25 + .../xinda/common/core/domain/PageParam.java | 25 + .../xinda/common/core/domain/PageResult.java | 42 + .../java/com/xinda/common/core/domain/R.java | 115 + .../common/core/domain/SortingField.java | 56 + .../common/core/domain/TenantBaseDO.java | 20 + .../xinda/common/core/domain/TreeEntity.java | 79 + .../xinda/common/core/domain/TreeSelect.java | 77 + .../common/core/domain/entity/SysDept.java | 311 + .../core/domain/entity/SysDictData.java | 210 + .../core/domain/entity/SysDictType.java | 118 + .../common/core/domain/entity/SysMenu.java | 305 + .../common/core/domain/entity/SysRole.java | 322 + .../core/domain/entity/SysTranslate.java | 34 + .../common/core/domain/entity/SysUser.java | 396 + .../core/domain/model/BindLoginBody.java | 22 + .../core/domain/model/BindRegisterBody.java | 21 + .../common/core/domain/model/LoginBody.java | 109 + .../common/core/domain/model/LoginUser.java | 287 + .../core/domain/model/RegisterBody.java | 11 + .../core/iot/response/DashDeviceTotalDto.java | 22 + .../common/core/iot/response/DeCodeBo.java | 26 + .../core/iot/response/IdentityAndName.java | 70 + .../xinda/common/core/mq/DeviceReplyBo.java | 17 + .../xinda/common/core/mq/DeviceReport.java | 78 + .../xinda/common/core/mq/DeviceReportBo.java | 79 + .../xinda/common/core/mq/DeviceStatusBo.java | 37 + .../common/core/mq/DeviceTestReportBo.java | 32 + .../xinda/common/core/mq/InvokeReqDto.java | 63 + .../xinda/common/core/mq/MQSendMessageBo.java | 57 + .../xinda/common/core/mq/MessageReplyBo.java | 51 + .../com/xinda/common/core/mq/SubDeviceBo.java | 35 + .../common/core/mq/message/DeviceData.java | 43 + .../core/mq/message/DeviceDownMessage.java | 60 + .../mq/message/DeviceFunctionMessage.java | 33 + .../common/core/mq/message/DeviceMessage.java | 29 + .../core/mq/message/FunctionCallBackBo.java | 24 + .../core/mq/message/InstructionsMessage.java | 20 + .../common/core/mq/message/ModbusPollMsg.java | 32 + .../xinda/common/core/mq/message/MqttBo.java | 26 + .../common/core/mq/message/PropRead.java | 39 + .../common/core/mq/message/ProtocolDto.java | 21 + .../core/mq/message/SubDeviceMessage.java | 18 + .../common/core/mq/ota/OtaReplyMessage.java | 17 + .../common/core/mq/ota/OtaUpgradeBo.java | 46 + .../core/mq/ota/OtaUpgradeDelayTask.java | 54 + .../common/core/notify/AlertPushParams.java | 48 + .../common/core/notify/AppGeTuiParams.java | 33 + .../notify/EnterpriseWeChatAPPParams.java | 35 + .../common/core/notify/NotifyConfigVO.java | 37 + .../core/notify/NotifySendResponse.java | 33 + .../core/notify/WeChatServerParams.java | 32 + .../core/notify/alertPush/AlertPushItem.java | 28 + .../common/core/notify/alertPush/PushMsg.java | 32 + .../notify/config/DingTalkConfigParams.java | 21 + .../core/notify/config/EmailConfigParams.java | 48 + .../core/notify/config/VoiceConfigParams.java | 23 + .../notify/config/WeChatConfigParams.java | 25 + .../core/notify/msg/DingTalkMsgParams.java | 53 + .../core/notify/msg/EmailMsgParams.java | 33 + .../core/notify/msg/VoiceMsgParams.java | 49 + .../core/notify/msg/WeComMsgParams.java | 43 + .../core/notify/msg/WechatMsgParams.java | 43 + .../xinda/common/core/page/PageDomain.java | 101 + .../common/core/page/TableDataExtendInfo.java | 99 + .../xinda/common/core/page/TableDataInfo.java | 85 + .../xinda/common/core/page/TableSupport.java | 56 + .../xinda/common/core/protocol/Message.java | 33 + .../core/protocol/modbus/ModbusCode.java | 88 + .../xinda/common/core/redis/RedisCache.java | 811 + .../common/core/redis/RedisKeyBuilder.java | 122 + .../common/core/redis/RedisKeyDefine.java | 113 + .../common/core/redis/RedisKeyRegistry.java | 28 + .../xinda/common/core/text/CharsetKit.java | 86 + .../com/xinda/common/core/text/Convert.java | 1000 + .../common/core/text/IntArrayValuable.java | 13 + .../com/xinda/common/core/text/KeyValue.java | 20 + .../xinda/common/core/text/StrFormatter.java | 92 + .../common/core/thingsModel/NeuronModel.java | 44 + .../thingsModel/SceneThingsModelItem.java | 42 + .../core/thingsModel/ThingsModelRuleItem.java | 29 + .../thingsModel/ThingsModelSimpleItem.java | 97 + .../thingsModel/ThingsModelValuesInput.java | 56 + .../xinda/common/enums/BusinessStatus.java | 20 + .../com/xinda/common/enums/BusinessType.java | 59 + .../xinda/common/enums/CommonStatusEnum.java | 36 + .../java/com/xinda/common/enums/DataEnum.java | 37 + .../xinda/common/enums/DataSourceType.java | 19 + .../enums/DeviceDistributeTypeEnum.java | 41 + .../xinda/common/enums/DeviceLogTypeEnum.java | 33 + .../common/enums/DeviceRecordTypeEnum.java | 35 + .../com/xinda/common/enums/DeviceStatus.java | 36 + .../com/xinda/common/enums/ExceptionCode.java | 23 + .../common/enums/FunctionReplyStatus.java | 21 + .../enums/GlobalErrorCodeConstants.java | 52 + .../com/xinda/common/enums/HttpMethod.java | 36 + .../com/xinda/common/enums/IErrorCode.java | 14 + .../java/com/xinda/common/enums/JobType.java | 35 + .../com/xinda/common/enums/LimitType.java | 20 + .../xinda/common/enums/ModbusDataType.java | 38 + .../xinda/common/enums/NotifyChannelEnum.java | 46 + .../enums/NotifyChannelProviderEnum.java | 315 + .../common/enums/NotifyServiceCodeEnum.java | 44 + .../com/xinda/common/enums/OTAUpgrade.java | 37 + .../com/xinda/common/enums/OperatorType.java | 24 + .../java/com/xinda/common/enums/PushType.java | 23 + .../com/xinda/common/enums/ResultCode.java | 37 + .../com/xinda/common/enums/ServerType.java | 45 + .../common/enums/SocialPlatformType.java | 69 + .../com/xinda/common/enums/StatusEnum.java | 30 + .../xinda/common/enums/ThingsModelType.java | 50 + .../com/xinda/common/enums/TopicType.java | 72 + .../com/xinda/common/enums/TranslateType.java | 24 + .../com/xinda/common/enums/UserStatus.java | 30 + .../xinda/common/enums/VerifyTypeEnum.java | 23 + .../SceneModelTagOpreationEnum.java | 47 + .../SceneModelVariableTypeEnum.java | 33 + .../common/exception/DemoModeException.java | 15 + .../com/xinda/common/exception/ErrorCode.java | 28 + .../common/exception/GlobalException.java | 58 + .../common/exception/ServerException.java | 60 + .../common/exception/ServiceException.java | 80 + .../exception/ServiceExceptionUtil.java | 125 + .../xinda/common/exception/UtilException.java | 26 + .../common/exception/base/BaseException.java | 97 + .../common/exception/file/FileException.java | 19 + .../FileNameLengthLimitExceededException.java | 16 + .../file/FileSizeLimitExceededException.java | 16 + .../file/InvalidExtensionException.java | 81 + .../iot/MqttAuthorizationException.java | 17 + .../MqttClientUserNameOrPassException.java | 17 + .../common/exception/job/TaskException.java | 34 + .../exception/user/CaptchaException.java | 16 + .../user/CaptchaExpireException.java | 16 + .../common/exception/user/UserException.java | 18 + .../user/UserPasswordNotMatchException.java | 16 + ...UserPasswordRetryLimitExceedException.java | 16 + .../filter/PropertyPreExcludeFilter.java | 24 + .../xinda/common/filter/RepeatableFilter.java | 52 + .../filter/RepeatedlyRequestWrapper.java | 76 + .../com/xinda/common/filter/XssFilter.java | 75 + .../filter/XssHttpServletRequestWrapper.java | 111 + .../java/com/xinda/common/utils/Arith.java | 114 + .../common/utils/Base64ToMultipartFile.java | 80 + .../common/utils/BeanMapUtilByReflect.java | 73 + .../java/com/xinda/common/utils/BitUtils.java | 276 + .../com/xinda/common/utils/CaculateUtils.java | 438 + .../utils/CaculateVariableAndNumberUtils.java | 413 + .../com/xinda/common/utils/DateUtils.java | 263 + .../com/xinda/common/utils/DictUtils.java | 197 + .../com/xinda/common/utils/DigestUtils.java | 75 + .../com/xinda/common/utils/EmqxUtils.java | 9 + .../com/xinda/common/utils/EncodeUtils.java | 172 + .../com/xinda/common/utils/ExceptionUtil.java | 39 + .../xinda/common/utils/ExceptionUtils.java | 53 + .../java/com/xinda/common/utils/LogUtils.java | 18 + .../java/com/xinda/common/utils/MapUtils.java | 66 + .../java/com/xinda/common/utils/Md5Utils.java | 82 + .../com/xinda/common/utils/MessageUtils.java | 26 + .../com/xinda/common/utils/PageUtils.java | 35 + .../com/xinda/common/utils/SecurityUtils.java | 139 + .../com/xinda/common/utils/ServletUtils.java | 228 + .../com/xinda/common/utils/StringUtils.java | 832 + .../java/com/xinda/common/utils/Threads.java | 99 + .../xinda/common/utils/ValidationUtils.java | 62 + .../xinda/common/utils/VerifyCodeUtils.java | 228 + .../xinda/common/utils/bean/BeanUtils.java | 110 + .../common/utils/bean/BeanValidators.java | 24 + .../utils/collection/CollectionUtils.java | 268 + .../xinda/common/utils/date/DateUtils.java | 173 + .../common/utils/date/LocalDateTimeUtils.java | 76 + .../common/utils/file/FileTypeUtils.java | 76 + .../common/utils/file/FileUploadUtils.java | 232 + .../xinda/common/utils/file/FileUtils.java | 340 + .../xinda/common/utils/file/ImageUtils.java | 98 + .../common/utils/file/MimeTypeUtils.java | 59 + .../common/utils/gateway/CRC16Utils.java | 149 + .../xinda/common/utils/gateway/CRC8Utils.java | 93 + .../xinda/common/utils/gateway/mq/Topics.java | 16 + .../common/utils/gateway/mq/TopicsPost.java | 14 + .../common/utils/gateway/mq/TopicsUtils.java | 322 + .../utils/gateway/protocol/ByteUtils.java | 958 + .../utils/gateway/protocol/NettyUtils.java | 22 + .../xinda/common/utils/html/EscapeUtil.java | 167 + .../xinda/common/utils/html/HTMLFilter.java | 570 + .../xinda/common/utils/http/HttpHelper.java | 55 + .../xinda/common/utils/http/HttpUtils.java | 338 + .../xinda/common/utils/ip/AddressUtils.java | 56 + .../com/xinda/common/utils/ip/IpUtils.java | 264 + .../xinda/common/utils/json/JsonUtils.java | 159 + .../xinda/common/utils/modbus/BitUtils.java | 78 + .../common/utils/modbus/ModbusUtils.java | 75 + .../xinda/common/utils/modbus/Mparams.java | 16 + .../common/utils/object/ObjectUtils.java | 63 + .../common/utils/poi/ExcelHandlerAdapter.java | 19 + .../com/xinda/common/utils/poi/ExcelUtil.java | 1737 ++ .../common/utils/reflect/ReflectUtils.java | 410 + .../com/xinda/common/utils/sign/Base64.java | 291 + .../com/xinda/common/utils/sign/Md5Utils.java | 67 + .../xinda/common/utils/sign/SignUtils.java | 66 + .../common/utils/spring/SpringUtils.java | 183 + .../com/xinda/common/utils/sql/SqlUtil.java | 61 + .../com/xinda/common/utils/uuid/IdUtils.java | 128 + .../java/com/xinda/common/utils/uuid/Seq.java | 86 + .../com/xinda/common/utils/uuid/UUID.java | 484 + .../common/utils/wechat/AesException.java | 56 + .../xinda/common/utils/wechat/ByteGroup.java | 26 + .../common/utils/wechat/PKCS7Encoder.java | 59 + .../com/xinda/common/utils/wechat/SHA1.java | 57 + .../common/utils/wechat/WXBizMsgCrypt.java | 289 + .../common/utils/wechat/WechatUtils.java | 125 + .../xinda/common/utils/wechat/XMLParse.java | 103 + .../xinda/common/wechat/WeChatAppResult.java | 72 + .../xinda/common/wechat/WeChatLoginBody.java | 89 + .../common/wechat/WeChatLoginResult.java | 22 + .../wechat/WeChatMiniProgramResult.java | 42 + .../xinda/common/wechat/WeChatPhoneInfo.java | 41 + .../xinda/common/wechat/WeChatUserInfo.java | 80 + .../xinda/common/wechat/WxCallBackXmlBO.java | 67 + .../main/java/com/xinda/common/xss/Xss.java | 27 + .../com/xinda/common/xss/XssValidator.java | 34 + xinda-framework/pom.xml | 109 + .../framework/aspectj/DataScopeAspect.java | 167 + .../framework/aspectj/DataSourceAspect.java | 72 + .../xinda/framework/aspectj/LogAspect.java | 227 + .../framework/aspectj/RateLimiterAspect.java | 90 + .../framework/config/ApplicationConfig.java | 30 + .../xinda/framework/config/CacheConfig.java | 45 + .../xinda/framework/config/CaptchaConfig.java | 83 + .../xinda/framework/config/DruidConfig.java | 126 + .../config/FastJson2JsonRedisSerializer.java | 48 + .../xinda/framework/config/FilterConfig.java | 58 + .../framework/config/KaptchaTextCreator.java | 68 + .../xinda/framework/config/MyBatisConfig.java | 177 + .../xinda/framework/config/RedisConfig.java | 67 + .../framework/config/RedissonConfig.java | 93 + .../framework/config/ResourcesConfig.java | 82 + .../framework/config/SecurityConfig.java | 174 + .../xinda/framework/config/ServerConfig.java | 32 + .../framework/config/ThreadPoolConfig.java | 63 + .../config/properties/DruidProperties.java | 77 + .../properties/PermitAllUrlProperties.java | 72 + .../config/properties/RedissonProperties.java | 134 + .../datasource/DynamicDataSource.java | 26 + .../DynamicDataSourceContextHolder.java | 45 + .../framework/handler/KeyPrefixHandler.java | 50 + .../interceptor/LanguageInterceptor.java | 58 + .../interceptor/RepeatSubmitInterceptor.java | 55 + .../impl/SameUrlDataInterceptor.java | 110 + .../xinda/framework/manager/AsyncManager.java | 55 + .../manager/CaffeineCacheDecorator.java | 88 + .../framework/manager/ShutdownManager.java | 39 + .../framework/manager/SpringCacheManager.java | 185 + .../manager/factory/AsyncFactory.java | 102 + .../mybatis/LambdaQueryWrapperX.java | 136 + .../framework/mybatis/QueryWrapperX.java | 140 + .../framework/mybatis/mapper/BaseMapperX.java | 112 + .../framework/mybatis/utils/MyBatisUtils.java | 88 + .../context/AuthenticationContextHolder.java | 28 + .../context/PermissionContextHolder.java | 27 + .../filter/JwtAuthenticationTokenFilter.java | 44 + .../handle/AuthenticationEntryPointImpl.java | 44 + .../handle/LogoutSuccessHandlerImpl.java | 52 + .../com/xinda/framework/utils/CacheUtils.java | 75 + .../com/xinda/framework/utils/QueueUtils.java | 236 + .../com/xinda/framework/utils/RedisUtils.java | 548 + .../xinda/framework/web/domain/Server.java | 240 + .../framework/web/domain/server/Cpu.java | 101 + .../framework/web/domain/server/Jvm.java | 130 + .../framework/web/domain/server/Mem.java | 61 + .../framework/web/domain/server/Sys.java | 84 + .../framework/web/domain/server/SysFile.java | 114 + .../web/exception/GlobalExceptionHandler.java | 114 + .../web/service/PermissionService.java | 168 + .../web/service/SysLoginService.java | 236 + .../web/service/SysPasswordService.java | 158 + .../web/service/SysPermissionService.java | 79 + .../web/service/SysRegisterService.java | 115 + .../framework/web/service/TokenService.java | 327 + .../web/service/UserDetailsServiceImpl.java | 65 + xinda-gateway/gateway-boot/pom.xml | 24 + .../xinda/gateway/boot/start/StartBoot.java | 70 + .../gateway/boot/start/subscribeCallback.java | 62 + xinda-gateway/pom.xml | 41 + xinda-gateway/xinda-mq/pom.xml | 60 + .../java/com/xinda/mq/config/MqConfig.java | 36 + .../java/com/xinda/mq/model/ReportDataBo.java | 45 + .../config/RedisConsumeConfig.java | 62 + .../consumer/DeviceOtherMsgConsumer.java | 34 + .../consumer/DevicePropFetchConsumer.java | 106 + .../consumer/DeviceReplyMsgConsumer.java | 44 + .../consumer/DeviceReportMsgConsumer.java | 36 + .../consumer/DeviceStatusConsumer.java | 147 + .../consumer/DeviceTestConsumer.java | 31 + .../consumer/FunctionInvokeConsumer.java | 38 + .../consumer/RedisChannelConsume.java | 61 + .../listen/DeviceOtherListen.java | 35 + .../listen/DevicePropFetchListen.java | 37 + .../listen/DeviceReplyListen.java | 39 + .../listen/DeviceReportListen.java | 40 + .../listen/DeviceStatusListen.java | 35 + .../redischannel/listen/DeviceTestListen.java | 35 + .../listen/FunctionInvokeListen.java | 35 + .../mq/redischannel/listen/UpgradeListen.java | 38 + .../producer/EmqxMessageProducer.java | 22 + .../producer/MessageProducer.java | 46 + .../redischannel/queue/DeviceOtherQueue.java | 25 + .../queue/DevicePropFetchQueue.java | 27 + .../redischannel/queue/DeviceReplyQueue.java | 25 + .../redischannel/queue/DeviceReportQueue.java | 25 + .../redischannel/queue/DeviceStatusQueue.java | 25 + .../redischannel/queue/DeviceTestQueue.java | 25 + .../queue/FunctionInvokeQueue.java | 25 + .../redischannel/queue/OtaUpgradeQueue.java | 25 + .../service/RedisPublishServiceImpl.java | 27 + .../consumer/ConsumerTopicConstant.java | 27 + .../listener/RocketDeviceStatusListener.java | 26 + .../RocketFunctionInvokeListener.java | 27 + .../listener/RocketPropReadListener.java | 25 + .../listener/RocketPublishMsgListener.java | 26 + .../mq/rocketmq/model/MQSendMessage.java | 21 + .../rocketmq/producer/RocketMqProducer.java | 261 + .../service/RocketMqPublishServiceImpl.java | 26 + .../com/xinda/mq/ruleEngine/SceneContext.java | 697 + .../com/xinda/mq/service/IDataHandler.java | 46 + .../service/IDeviceReportMessageService.java | 47 + .../xinda/mq/service/IDeviceTestService.java | 11 + .../com/xinda/mq/service/IFunctionInvoke.java | 28 + .../mq/service/IMessagePublishService.java | 17 + .../xinda/mq/service/IMqttMessagePublish.java | 77 + .../com/xinda/mq/service/IRuleEngine.java | 22 + .../service/impl/DeviceOtherMsgHandler.java | 86 + .../mq/service/impl/FunctionInvokeImpl.java | 143 + .../xinda/mq/service/impl/MessageManager.java | 77 + .../mq/service/impl/RuleEngineHandler.java | 108 + xinda-notify/pom.xml | 27 + xinda-notify/xinda-notify-core/pom.xml | 75 + .../core/controller/NotifyController.java | 87 + .../dingtalk/service/DingTalkService.java | 21 + .../service/impl/DingTalkServiceImpl.java | 225 + .../core/email/config/EmailNotifyConfig.java | 32 + .../core/email/service/EmailService.java | 21 + .../email/service/impl/EmailServiceImpl.java | 85 + .../core/service/NotifySendService.java | 80 + .../service/impl/NotifySendServiceImpl.java | 333 + .../notify/core/sms/config/ReadConfig.java | 47 + .../notify/core/sms/service/ISmsService.java | 68 + .../core/sms/service/Impl/SmsServiceImpl.java | 139 + .../com/xinda/notify/core/vo/SendParams.java | 26 + .../notify/core/voice/config/VoiceConfig.java | 31 + .../core/voice/service/VoiceService.java | 20 + .../voice/service/impl/VoiceServiceImpl.java | 212 + .../wechat/service/WeChatPushService.java | 41 + .../service/impl/WeChatPushServiceImpl.java | 399 + .../notify/core/wechat/vo/TemplateDataVo.java | 19 + .../core/wechat/vo/WeChatMiniPushVO.java | 19 + .../wechat/vo/WeChatPublicAccountPushVO.java | 62 + .../xinda/notify/core/wechat/vo/WxMssVo.java | 50 + xinda-notify/xinda-notify-web/pom.xml | 31 + .../controller/NotifyChannelController.java | 129 + .../controller/NotifyLogController.java | 105 + .../controller/NotifyTemplateController.java | 187 + .../xinda/notify/domain/NotifyChannel.java | 50 + .../com/xinda/notify/domain/NotifyLog.java | 67 + .../xinda/notify/domain/NotifyTemplate.java | 65 + .../notify/mapper/NotifyChannelMapper.java | 70 + .../xinda/notify/mapper/NotifyLogMapper.java | 62 + .../notify/mapper/NotifyTemplateMapper.java | 112 + .../notify/service/INotifyChannelService.java | 78 + .../notify/service/INotifyLogService.java | 62 + .../service/INotifyTemplateService.java | 117 + .../impl/NotifyChannelServiceImpl.java | 196 + .../service/impl/NotifyLogServiceImpl.java | 143 + .../impl/NotifyTemplateServiceImpl.java | 288 + .../xinda/notify/vo/ChannelProviderVO.java | 54 + .../java/com/xinda/notify/vo/NotifyVO.java | 33 + .../resources/mapper/NotifyChannelMapper.xml | 109 + .../main/resources/mapper/NotifyLogMapper.xml | 122 + .../resources/mapper/NotifyTemplateMapper.xml | 175 + xinda-open-api/pom.xml | 42 + .../xinda/data/config/DelayUpgradeQueue.java | 39 + .../com/xinda/data/config/TaskConfig.java | 8 + .../xinda/data/config/UpGradeListener.java | 87 + .../data/controller/AlertController.java | 152 + .../data/controller/AlertLogController.java | 123 + .../controller/AuthResourceController.java | 38 + .../data/controller/BridgeController.java | 123 + .../data/controller/CategoryController.java | 147 + .../CommandPreferencesController.java | 110 + .../controller/DeviceAlertUserController.java | 78 + .../data/controller/DeviceController.java | 484 + .../data/controller/DeviceJobController.java | 149 + .../data/controller/DeviceLogController.java | 149 + .../controller/DeviceMessageController.java | 45 + .../controller/DeviceModelController.java | 103 + .../controller/DeviceRecordController.java | 91 + .../controller/DeviceShareController.java | 121 + .../data/controller/DeviceUserController.java | 138 + .../data/controller/EventLogController.java | 114 + .../controller/FunctionLogController.java | 114 + .../controller/GoviewProjectController.java | 186 + .../GoviewProjectDataController.java | 43 + .../data/controller/GroupController.java | 140 + .../data/controller/HttpBridgeController.java | 85 + .../controller/NewsCategoryController.java | 126 + .../xinda/data/controller/NewsController.java | 141 + .../controller/OrderControlController.java | 108 + .../ProductAuthorizeController.java | 121 + .../data/controller/ProductController.java | 214 + .../data/controller/SceneController.java | 158 + .../data/controller/ScriptController.java | 173 + .../controller/SimulateLogController.java | 86 + .../controller/SipRelationController.java | 108 + .../controller/SocialLoginController.java | 130 + .../controller/SocialPlatformController.java | 109 + .../data/controller/TestRuleController.java | 59 + .../controller/ThingsModelController.java | 205 + .../ThingsModelTemplateController.java | 142 + .../xinda/data/controller/ToolController.java | 505 + .../data/controller/UserSocialController.java | 69 + .../dashBoard/DashBoardController.java | 72 + .../datacenter/DataCenterController.java | 116 + .../firmware/FirmwareController.java | 139 + .../firmware/FirmwareTaskController.java | 194 + .../firmware/ViewConfigController.java | 102 + .../gateway/SubGatewayController.java | 129 + .../media/MediaServerController.java | 150 + .../controller/media/PlayerController.java | 64 + .../data/controller/media/PtzController.java | 74 + .../controller/media/RecordController.java | 162 + .../controller/media/SipConfigController.java | 80 + .../media/SipDeviceChannelController.java | 119 + .../controller/media/SipDeviceController.java | 151 + .../controller/media/ZmlHookController.java | 105 + .../modbus/ModbusConfigController.java | 164 + .../modbus/ModbusJobController.java | 97 + .../modbus/ModbusParamsController.java | 121 + .../netty/NettyManagerController.java | 125 + .../protocol/ProtocolController.java | 114 + .../runtime/DeviceRuntimeController.java | 166 + .../sceneModel/SceneModelController.java | 107 + .../sceneModel/SceneModelDataController.java | 152 + .../SceneModelDeviceController.java | 130 + .../sceneModel/SceneModelTagController.java | 129 + .../translate/AppLanguageController.java | 96 + .../translate/AppPreferencesController.java | 109 + .../controller/wechat/WeChatController.java | 178 + .../xinda/data/quartz/AbstractQuartzJob.java | 108 + .../java/com/xinda/data/quartz/CronUtils.java | 64 + .../com/xinda/data/quartz/JobInvokeUtil.java | 173 + .../QuartzDisallowConcurrentExecution.java | 21 + .../xinda/data/quartz/QuartzJobExecution.java | 19 + .../com/xinda/data/quartz/ScheduleUtils.java | 105 + .../data/service/IDeviceMessageService.java | 27 + .../data/service/IOtaUpgradeService.java | 17 + .../data/service/SyncDeviceStatusJob.java | 66 + .../xinda/data/service/impl/DeviceJob.java | 205 + .../service/impl/DeviceJobServiceImpl.java | 376 + .../impl/DeviceMessageServiceImpl.java | 215 + .../service/impl/OtaUpgradeServiceImpl.java | 98 + xinda-pay/pom.xml | 34 + xinda-pay/xinda-pay-api/pom.xml | 38 + .../api/notify/dto/PayOrderNotifyReqDTO.java | 34 + .../api/notify/dto/PayRefundNotifyReqDTO.java | 34 + .../pay/api/api/notify/package-info.java | 4 + .../xinda/pay/api/api/order/PayOrderApi.java | 32 + .../api/order/dto/PayOrderCreateReqDTO.java | 65 + .../api/api/order/dto/PayOrderRespDTO.java | 44 + .../pay/api/api/refund/PayRefundApi.java | 31 + .../api/refund/dto/PayRefundCreateReqDTO.java | 60 + .../api/api/refund/dto/PayRefundRespDTO.java | 42 + .../pay/api/enums/DictTypeConstants.java | 18 + .../pay/api/enums/ErrorCodeConstants.java | 57 + .../enums/member/WalletOperateTypeEnum.java | 21 + .../member/WalletTransactionGategoryEnum.java | 26 + .../api/enums/notify/PayNotifyStatusEnum.java | 32 + .../api/enums/notify/PayNotifyTypeEnum.java | 28 + .../api/enums/order/PayOrderStatusEnum.java | 64 + .../api/enums/refund/PayRefundStatusEnum.java | 32 + xinda-pay/xinda-pay-core/pom.xml | 68 + .../pay/core/api/order/PayOrderApiImpl.java | 35 + .../pay/core/api/refund/PayRefundApiImpl.java | 35 + .../admin/app/PayAppController.java | 108 + .../controller/admin/app/vo/PayAppBaseVO.java | 38 + .../admin/app/vo/PayAppCreateReqVO.java | 14 + .../admin/app/vo/PayAppPageItemRespVO.java | 27 + .../admin/app/vo/PayAppPageReqVO.java | 32 + .../controller/admin/app/vo/PayAppRespVO.java | 23 + .../admin/app/vo/PayAppUpdateReqVO.java | 21 + .../admin/app/vo/PayAppUpdateStatusReqVO.java | 21 + .../admin/channel/PayChannelController.java | 90 + .../admin/channel/vo/PayChannelBaseVO.java | 32 + .../channel/vo/PayChannelCreateReqVO.java | 26 + .../admin/channel/vo/PayChannelRespVO.java | 29 + .../channel/vo/PayChannelUpdateReqVO.java | 26 + .../admin/demo/OrderInfoController.java | 83 + .../admin/demo/vo/OrderInfoCreateReqVO.java | 17 + .../admin/demo/vo/OrderInfoRespVO.java | 54 + .../admin/notify/PayNotifyController.java | 137 + .../admin/notify/vo/PayNotifyTaskBaseVO.java | 45 + .../notify/vo/PayNotifyTaskDetailRespVO.java | 55 + .../notify/vo/PayNotifyTaskPageReqVO.java | 41 + .../admin/notify/vo/PayNotifyTaskRespVO.java | 26 + .../admin/order/PayOrderController.java | 120 + .../admin/order/vo/PayOrderBaseVO.java | 90 + .../admin/order/vo/PayOrderDetailsRespVO.java | 46 + .../admin/order/vo/PayOrderExcelVO.java | 62 + .../admin/order/vo/PayOrderExportReqVO.java | 39 + .../order/vo/PayOrderPageItemRespVO.java | 26 + .../admin/order/vo/PayOrderPageReqVO.java | 44 + .../admin/order/vo/PayOrderRespVO.java | 23 + .../admin/order/vo/PayOrderSubmitReqVO.java | 34 + .../admin/order/vo/PayOrderSubmitRespVO.java | 21 + .../admin/refund/PayRefundController.java | 94 + .../admin/refund/vo/PayRefundBaseVO.java | 78 + .../refund/vo/PayRefundDetailsRespVO.java | 41 + .../admin/refund/vo/PayRefundExcelVO.java | 59 + .../admin/refund/vo/PayRefundExportReqVO.java | 42 + .../refund/vo/PayRefundPageItemRespVO.java | 27 + .../admin/refund/vo/PayRefundPageReqVO.java | 47 + .../app/channel/AppPayChannelController.java | 40 + .../app/order/AppPayOrderController.http | 63 + .../app/order/AppPayOrderController.java | 48 + .../app/order/vo/AppPayOrderSubmitReqVO.java | 10 + .../app/order/vo/AppPayOrderSubmitRespVO.java | 11 + .../controller/app/refund/package-info.java | 4 + .../pay/core/controller/package-info.java | 6 + .../pay/core/convert/app/PayAppConvert.java | 48 + .../convert/channel/PayChannelConvert.java | 28 + .../core/convert/demo/OrderInfoConvert.java | 26 + .../convert/notify/PayNotifyTaskConvert.java | 43 + .../core/convert/order/PayOrderConvert.java | 79 + .../xinda/pay/core/convert/package-info.java | 5 + .../core/convert/refund/PayRefundConvert.java | 56 + ...《Spring Boot 对象转换 MapStruct 入门》.md | 1 + .../core/domain/dataobject/app/PayApp.java | 56 + .../domain/dataobject/channel/PayChannel.java | 70 + .../domain/dataobject/demo/OrderInfo.java | 87 + .../dataobject/notify/PayNotifyLog.java | 48 + .../dataobject/notify/PayNotifyTask.java | 92 + .../domain/dataobject/order/PayOrder.java | 134 + .../dataobject/order/PayOrderExtension.java | 93 + .../domain/dataobject/refund/PayRefund.java | 152 + .../core/domain/mapper/app/PayAppMapper.java | 11 + .../mapper/channel/PayChannelMapper.java | 10 + .../domain/mapper/demo/OrderInfoMapper.java | 15 + .../mapper/notify/PayNotifyLogMapper.java | 10 + .../mapper/notify/PayNotifyTaskMapper.java | 10 + .../mapper/order/PayOrderExtensionMapper.java | 10 + .../domain/mapper/order/PayOrderMapper.java | 10 + .../domain/mapper/refund/PayRefundMapper.java | 11 + .../core/domain/redis/RedisKeyConstants.java | 27 + .../core/domain/redis/no/PayNoRedisDAO.java | 34 + .../redis/notify/PayNotifyLockRedisDAO.java | 33 + .../job/config/PayJobConfiguration.java | 28 + .../core/framework/job/core/package-info.java | 4 + .../pay/core/framework/package-info.java | 6 + .../pay/config/PayConfiguration.java | 9 + .../framework/pay/config/PayProperties.java | 48 + .../core/framework/pay/core/package-info.java | 4 + .../web/config/PayWebConfiguration.java | 22 + .../pay/core/framework/web/package-info.java | 4 + .../xinda/pay/core/job/notify/JobHandler.java | 19 + .../pay/core/job/notify/PayNotifyJob.java | 29 + .../pay/core/job/order/PayOrderExpireJob.java | 29 + .../pay/core/job/order/PayOrderSyncJob.java | 41 + .../pay/core/job/refund/PayRefundSyncJob.java | 29 + .../pay/core/service/app/PayAppService.java | 105 + .../core/service/app/PayAppServiceImpl.java | 131 + .../service/channel/PayChannelService.java | 97 + .../channel/PayChannelServiceImpl.java | 231 + .../core/service/demo/OrderInfoService.java | 66 + .../service/demo/OrderInfoServiceImpl.java | 264 + .../core/service/notify/PayNotifyService.java | 56 + .../service/notify/PayNotifyServiceImpl.java | 305 + .../order/PayOrderExtensionService.java | 27 + .../order/PayOrderExtensionServiceImpl.java | 60 + .../core/service/order/PayOrderService.java | 129 + .../service/order/PayOrderServiceImpl.java | 589 + .../core/service/refund/PayRefundService.java | 81 + .../service/refund/PayRefundServiceImpl.java | 379 + .../com/xinda/pay/core/util/MoneyUtils.java | 27 + .../com/xinda/pay/core/util/PaySeqUtils.java | 54 + .../src/main/resources/mapper/OrderMapper.xml | 5 + .../main/resources/mapper/PayAppMapper.xml | 5 + .../resources/mapper/PayChannelMapper.xml | 5 + .../resources/mapper/PayMerchantMapper.xml | 5 + .../resources/mapper/PayNotifyLogMapper.xml | 5 + .../resources/mapper/PayNotifyTaskMapper.xml | 5 + .../mapper/PayOrderExtensionMapper.xml | 5 + .../main/resources/mapper/PayOrderMapper.xml | 5 + .../main/resources/mapper/PayRefundMapper.xml | 5 + xinda-pay/xinda-pay-framework/pom.xml | 78 + .../xinda/pay/framework/client/PayClient.java | 80 + .../pay/framework/client/PayClientConfig.java | 26 + .../framework/client/PayClientFactory.java | 28 + .../client/dto/order/PayOrderRespDTO.java | 139 + .../dto/order/PayOrderUnifiedReqDTO.java | 90 + .../client/dto/refund/PayRefundRespDTO.java | 115 + .../dto/refund/PayRefundUnifiedReqDTO.java | 67 + .../client/exception/PayException.java | 17 + .../client/impl/AbstractPayClient.java | 194 + .../client/impl/PayClientFactoryImpl.java | 91 + .../impl/alipay/AbstractAlipayPayClient.java | 213 + .../impl/alipay/AlipayAppPayClient.java | 60 + .../impl/alipay/AlipayBarPayClient.java | 74 + .../impl/alipay/AlipayPayClientConfig.java | 107 + .../client/impl/alipay/AlipayPcPayClient.java | 70 + .../client/impl/alipay/AlipayQrPayClient.java | 56 + .../impl/alipay/AlipayWapPayClient.java | 58 + .../client/impl/mock/MockPayClient.java | 65 + .../client/impl/mock/MockPayClientConfig.java | 28 + .../impl/weixin/AbstractWxPayClient.java | 484 + .../client/impl/weixin/WxAppPayClient.java | 62 + .../client/impl/weixin/WxBarPayClient.java | 106 + .../client/impl/weixin/WxLitePayClient.java | 20 + .../client/impl/weixin/WxNativePayClient.java | 57 + .../client/impl/weixin/WxPayClientConfig.java | 106 + .../client/impl/weixin/WxPubPayClient.java | 80 + .../config/PayAutoConfiguration.java | 21 + .../enums/channel/PayChannelEnum.java | 63 + .../enums/order/PayOrderDisplayModeEnum.java | 29 + .../enums/order/PayOrderStatusRespEnum.java | 56 + .../enums/refund/PayRefundStatusRespEnum.java | 32 + xinda-plugs/pom.xml | 42 + xinda-plugs/xinda-generator/pom.xml | 32 + .../com/xinda/generator/config/GenConfig.java | 73 + .../generator/controller/GenController.java | 230 + .../com/xinda/generator/domain/GenTable.java | 399 + .../generator/domain/GenTableColumn.java | 394 + .../mapper/GenTableColumnMapper.java | 60 + .../generator/mapper/GenTableMapper.java | 83 + .../service/GenTableColumnServiceImpl.java | 68 + .../service/GenTableServiceImpl.java | 521 + .../service/IGenTableColumnService.java | 44 + .../generator/service/IGenTableService.java | 121 + .../com/xinda/generator/util/GenUtils.java | 257 + .../generator/util/VelocityInitializer.java | 34 + .../xinda/generator/util/VelocityUtils.java | 402 + .../src/main/resources/generator.yml | 10 + .../mapper/generator/GenTableColumnMapper.xml | 127 + .../mapper/generator/GenTableMapper.xml | 202 + .../main/resources/vm/java/controller.java.vm | 121 + .../src/main/resources/vm/java/domain.java.vm | 67 + .../src/main/resources/vm/java/mapper.java.vm | 91 + .../main/resources/vm/java/service.java.vm | 61 + .../resources/vm/java/serviceImpl.java.vm | 169 + .../main/resources/vm/java/sub-domain.java.vm | 76 + .../src/main/resources/vm/js/api.js.vm | 44 + .../src/main/resources/vm/sql/sql.vm | 22 + .../main/resources/vm/vue/index-tree.vue.vm | 505 + .../src/main/resources/vm/vue/index.vue.vm | 602 + .../resources/vm/vue/v3/index-tree.vue.vm | 474 + .../src/main/resources/vm/vue/v3/index.vue.vm | 590 + .../src/main/resources/vm/vue/v3/readme.txt | 1 + .../src/main/resources/vm/xml/mapper.xml.vm | 135 + xinda-plugs/xinda-http/pom.xml | 42 + .../main/java/com/xinda/http/client/Amap.java | 54 + .../java/com/xinda/http/client/Cn12306.java | 11 + .../com/xinda/http/client/DownloadClient.java | 48 + .../java/com/xinda/http/client/Gitee.java | 74 + .../http/client/TestInterceptorClient.java | 19 + .../com/xinda/http/client/UploadClient.java | 47 + .../controller/ForestExampleController.java | 114 + .../controller/InterceptorController.java | 36 + .../http/controller/TestAsyncController.java | 101 + .../controller/TestDownloadController.java | 85 + .../http/controller/TestUploadController.java | 210 + .../interceptors/ApiClientInterceptor.java | 44 + .../java/com/xinda/http/model/Coordinate.java | 34 + .../com/xinda/http/model/GiteeBranch.java | 43 + .../com/xinda/http/model/GiteeReadme.java | 94 + .../xinda/http/model/HttpClientConfig.java | 18 + .../java/com/xinda/http/model/Location.java | 209 + .../java/com/xinda/http/model/MapMarker.java | 18 + .../java/com/xinda/http/model/Result.java | 28 + .../xinda/http/ruleEngine/HttpclientNode.java | 43 + .../com/xinda/http/service/FileService.java | 51 + .../xinda/http/service/HttpClientFactory.java | 19 + .../xinda/http/service/SuccessCondition.java | 14 + .../java/com/xinda/http/utils/MD5Utils.java | 117 + .../java/com/xinda/http/utils/PathUtil.java | 37 + xinda-plugs/xinda-mqtt-client/pom.xml | 11 + .../mqttclient/IEmqxMessageProducer.java | 12 + .../xinda/mqttclient/MqttClientConfig.java | 58 + .../com/xinda/mqttclient/PubMqttCallBack.java | 120 + .../com/xinda/mqttclient/PubMqttClient.java | 202 + xinda-plugs/xinda-oauth/pom.xml | 41 + .../config/AuthorizationServerConfig.java | 138 + .../oauth/config/ResourceServerConfig.java | 48 + .../oauth/config/SpeakerApprovalHandler.java | 83 + .../controller/ConfirmAccessController.java | 49 + .../oauth/controller/LoginController.java | 51 + .../OauthClientDetailsController.java | 107 + .../oauth/controller/OauthController.java | 255 + .../xinda/oauth/domain/OauthAccessToken.java | 39 + .../xinda/oauth/domain/OauthApprovals.java | 42 + .../oauth/domain/OauthClientDetails.java | 285 + .../com/xinda/oauth/domain/OauthCode.java | 66 + .../oauth/enums/OAuth2GrantTypeEnum.java | 29 + .../oauth/mapper/OauthAccessTokenMapper.java | 22 + .../oauth/mapper/OauthApprovalsMapper.java | 67 + .../mapper/OauthClientDetailsMapper.java | 74 + .../xinda/oauth/mapper/OauthCodeMapper.java | 62 + .../oauth/service/IOauthApprovalsService.java | 70 + .../service/IOauthClientDetailsService.java | 70 + .../oauth/service/IOauthCodeService.java | 64 + .../service/OauthAccessTokenService.java | 21 + .../impl/OauthAccessTokenServiceImpl.java | 68 + .../impl/OauthApprovalsServiceImpl.java | 171 + .../impl/OauthClientDetailsServiceImpl.java | 158 + .../service/impl/OauthCodeServiceImpl.java | 108 + .../java/com/xinda/oauth/utils/HttpUtils.java | 126 + .../com/xinda/oauth/utils/OAuth2Utils.java | 101 + .../oauth/vo/OAuth2OpenAccessTokenRespVO.java | 27 + .../vo/OAuth2OpenAuthorizeInfoRespVO.java | 33 + .../oauth/vo/Oauth2AccessTokenReqVO.java | 27 + .../mapper/OauthAccessTokenMapper.xml | 78 + .../resources/mapper/OauthApprovalsMapper.xml | 94 + .../mapper/OauthClientDetailsMapper.xml | 135 + .../main/resources/mapper/OauthCodeMapper.xml | 64 + .../static/oauth/css/bootstrap-theme.css | 587 + .../static/oauth/css/bootstrap-theme.css.map | 1 + .../static/oauth/css/bootstrap-theme.min.css | 6 + .../oauth/css/bootstrap-theme.min.css.map | 1 + .../resources/static/oauth/css/bootstrap.css | 6834 ++++++ .../static/oauth/css/bootstrap.css.map | 1 + .../static/oauth/css/bootstrap.min.css | 6 + .../static/oauth/css/bootstrap.min.css.map | 1 + .../fonts/glyphicons-halflings-regular.eot | Bin 0 -> 20127 bytes .../fonts/glyphicons-halflings-regular.svg | 288 + .../fonts/glyphicons-halflings-regular.ttf | Bin 0 -> 45404 bytes .../fonts/glyphicons-halflings-regular.woff | Bin 0 -> 23424 bytes .../fonts/glyphicons-halflings-regular.woff2 | Bin 0 -> 18028 bytes .../resources/static/oauth/js/bootstrap.js | 2580 ++ .../static/oauth/js/bootstrap.min.js | 6 + .../src/main/resources/static/oauth/js/npm.js | 13 + .../templates/oauth/access_confirmation.html | 37 + .../templates/oauth/clientDetails.html | 48 + .../main/resources/templates/oauth/index.html | 23 + .../main/resources/templates/oauth/login.html | 38 + xinda-plugs/xinda-oss/pom.xml | 30 + .../oss/controller/OssConfigController.java | 111 + .../oss/controller/OssDetailController.java | 123 + .../java/com/xinda/oss/core/OssClient.java | 263 + .../java/com/xinda/oss/domain/OssConfig.java | 251 + .../java/com/xinda/oss/domain/OssDetail.java | 155 + .../com/xinda/oss/entity/OssConstant.java | 39 + .../com/xinda/oss/entity/OssProperties.java | 58 + .../com/xinda/oss/entity/UploadResult.java | 23 + .../com/xinda/oss/enums/AccessPolicyType.java | 54 + .../com/xinda/oss/enums/PlatformType.java | 32 + .../java/com/xinda/oss/enums/PolicyType.java | 34 + .../com/xinda/oss/mapper/OssConfigMapper.java | 63 + .../com/xinda/oss/mapper/OssDetailMapper.java | 61 + .../oss/runner/OssApplicationRunner.java | 25 + .../xinda/oss/service/IOssConfigService.java | 70 + .../xinda/oss/service/IOssDetailService.java | 72 + .../java/com/xinda/oss/service/OssClient.java | 265 + .../com/xinda/oss/service/OssFactory.java | 58 + .../service/impl/OssConfigServiceImpl.java | 154 + .../service/impl/OssDetailServiceImpl.java | 198 + .../main/resources/mapper/OssConfigMapper.xml | 152 + .../main/resources/mapper/OssDetailMapper.xml | 110 + .../xinda-oss/src/main/resources/oss.sql | 64 + xinda-plugs/xinda-quartz/pom.xml | 33 + .../xinda/quartz/config/ScheduleConfig.java | 57 + .../quartz/controller/SysJobController.java | 198 + .../controller/SysJobLogController.java | 101 + .../java/com/xinda/quartz/domain/SysJob.java | 183 + .../com/xinda/quartz/domain/SysJobLog.java | 168 + .../xinda/quartz/mapper/SysJobLogMapper.java | 64 + .../com/xinda/quartz/mapper/SysJobMapper.java | 67 + .../quartz/service/ISysJobLogService.java | 56 + .../xinda/quartz/service/ISysJobService.java | 102 + .../service/impl/SysJobLogServiceImpl.java | 87 + .../service/impl/SysJobServiceImpl.java | 261 + .../java/com/xinda/quartz/task/RyTask.java | 28 + .../xinda/quartz/util/AbstractQuartzJob.java | 107 + .../java/com/xinda/quartz/util/CronUtils.java | 63 + .../com/xinda/quartz/util/JobInvokeUtil.java | 182 + .../QuartzDisallowConcurrentExecution.java | 21 + .../xinda/quartz/util/QuartzJobExecution.java | 19 + .../com/xinda/quartz/util/ScheduleUtils.java | 139 + .../mapper/quartz/SysJobLogMapper.xml | 93 + .../resources/mapper/quartz/SysJobMapper.xml | 111 + xinda-plugs/xinda-ruleEngine/pom.xml | 45 + .../config/MainExecutorBuilder.java | 20 + .../config/WhenExecutorBuilder.java | 20 + .../ruleEngine/core/FlowLogExecutor.java | 127 + .../ruleEngine/core/RequestIdBuilder.java | 29 + .../com/xinda/ruleEngine/util/Constant.java | 11 + xinda-protocol/pom.xml | 32 + xinda-protocol/xinda-protocol-base/pom.xml | 32 + .../com/xinda/protocol/PrepareLoadStore.java | 33 + .../com/xinda/protocol/ProtocolLoadUtils.java | 147 + .../com/xinda/protocol/WModelManager.java | 82 + .../protocol/base/annotation/Column.java | 42 + .../protocol/base/annotation/Columns.java | 16 + .../base/annotation/MergeSubClass.java | 18 + .../protocol/base/annotation/Protocol.java | 18 + .../protocol/base/message/MessageBody.java | 22 + .../protocol/base/message/MessageHead.java | 46 + .../protocol/base/model/ActiveModel.java | 157 + .../xinda/protocol/base/model/ArrayModel.java | 168 + .../protocol/base/model/BufferModel.java | 39 + .../protocol/base/model/DateTimeModel.java | 84 + .../xinda/protocol/base/model/MapModel.java | 91 + .../protocol/base/model/ModelRegistry.java | 218 + .../protocol/base/model/NumberModel.java | 367 + .../protocol/base/model/NumberPModel.java | 454 + .../protocol/base/model/StringModel.java | 170 + .../com/xinda/protocol/base/model/WModel.java | 74 + .../protocol/base/protocol/IProtocol.java | 31 + .../protocol/base/struc/BaseStructure.java | 102 + .../base/struc/CollectionStructure.java | 58 + .../protocol/base/struc/LengthStructure.java | 43 + .../struc/LengthUnitCollectionStructure.java | 83 + .../base/struc/LengthUnitStructure.java | 64 + .../protocol/base/struc/MapStructure.java | 188 + .../base/struc/TotalArrayObjectStructure.java | 84 + .../struc/TotalArrayPrimitiveStructure.java | 73 + .../base/struc/TotalCollectionStructure.java | 82 + .../base/struc/TotalMapStructure.java | 198 + .../xinda/protocol/domain/DeviceProtocol.java | 22 + .../xinda/protocol/enums/ModbusBitStatus.java | 19 + .../protocol/enums/ModbusCoilStatus.java | 20 + .../xinda/protocol/enums/ModbusErrCode.java | 44 + .../service/IProtocolManagerService.java | 34 + .../impl/ProtocolManagerServiceImpl.java | 129 + .../com/xinda/protocol/util/ArrayMap.java | 114 + .../xinda/protocol/util/ByteToHexUtil.java | 243 + .../java/com/xinda/protocol/util/Cache.java | 53 + .../com/xinda/protocol/util/CharsBuilder.java | 87 + .../com/xinda/protocol/util/ClassUtils.java | 118 + .../com/xinda/protocol/util/DateTool.java | 126 + .../com/xinda/protocol/util/ExplainUtils.java | 52 + .../java/com/xinda/protocol/util/IntTool.java | 140 + .../protocol/util/IntegerToByteUtil.java | 232 + .../com/xinda/protocol/util/KeyValuePair.java | 49 + .../java/com/xinda/protocol/util/Msg.java | 41 + .../protocol/util/SingleVersionUtils.java | 75 + .../xinda/protocol/util/ToStringBuilder.java | 144 + xinda-protocol/xinda-protocol-collect/pom.xml | 24 + .../java/com/xinda/common/ProtocolColl.java | 15 + .../xinda/common/ProtocolDeCodeService.java | 79 + .../com/xinda/gkb/GKBHTSZProtocolService.java | 229 + .../com/xinda/json/JsonProtocolService.java | 95 + .../xinda/jsonPak/JsonPakProtocolService.java | 82 + .../com/xinda/jsonPak/pak/JsonEndPoint.java | 30 + .../jsonchenyi/JsonChenYiProtocolService.java | 79 + .../xinda/modbus/codec/MessageAdapter.java | 117 + .../com/xinda/modbus/codec/ModbusDecoder.java | 98 + .../com/xinda/modbus/codec/ModbusEncoder.java | 63 + .../xinda/modbus/codec/ModbusProtocol.java | 421 + .../com/xinda/modbus/model/ModbusRtu.java | 252 + .../com/xinda/modbus/pak/ModbusEndPoint.java | 44 + .../java/com/xinda/modbus/pak/TcpDtu.java | 16 + .../com/xinda/modbus/test/ModbusTest.java | 84 + .../java/com/xinda/modbusToJson/FYModel.java | 27 + .../ModbusToJsonProtocolService.java | 77 + .../xinda/pakModbus/codec/ModbusRtu-pak.JSON | 28 + .../pakModbus/codec/ModbusRtuPakDecoder.java | 87 + .../pakModbus/codec/ModbusRtuPakEncoder.java | 64 + .../pakModbus/codec/ModbusRtuPakProtocol.java | 187 + .../xinda/pakModbus/model/CombineFactory.java | 118 + .../xinda/pakModbus/model/PakModbusRtu.java | 292 + .../xinda/pakModbus/test/PakModbusTest.java | 72 + .../zqwl/GEC6100ToZqwlProtocolService.java | 183 + .../zqwl/ModbusToJsonZQWLProtocolService.java | 209 + .../main/java/com/xinda/zqwl/ZQWLDIDORet.java | 40 + xinda-record/README.md | 3 + xinda-record/pom.xml | 151 + .../xinda/record/ZlmRecordApplication.java | 18 + .../config/FastJson2JsonRedisSerializer.java | 49 + .../config/FastJsonRedisSerializer.java | 41 + .../record/config/GlobalExceptionHandler.java | 44 + .../record/config/GlobalResponseAdvice.java | 54 + .../com/xinda/record/config/RedisConfig.java | 64 + .../xinda/record/config/SpringDocConfig.java | 44 + .../com/xinda/record/config/StartConfig.java | 99 + .../record/config/ThreadPoolTaskConfig.java | 59 + .../record/controller/DownController.java | 94 + .../record/controller/DownloadController.java | 214 + .../record/controller/RecordController.java | 343 + .../record/controller/ZmlHookController.java | 55 + .../controller/bean/ControllerException.java | 35 + .../record/controller/bean/ErrorCode.java | 29 + .../record/controller/bean/RecordFile.java | 53 + .../xinda/record/controller/bean/Result.java | 58 + .../xinda/record/dto/MergeOrCutTaskInfo.java | 17 + .../java/com/xinda/record/dto/RecordInfo.java | 10 + .../java/com/xinda/record/dto/SignInfo.java | 10 + .../java/com/xinda/record/dto/SpaceInfo.java | 9 + .../com/xinda/record/dto/UserSettings.java | 34 + .../xinda/record/service/FFmpegExecUtils.java | 124 + .../record/service/FileManagerTimer.java | 151 + .../record/service/VideoFileService.java | 619 + .../com/xinda/record/utils/Constants.java | 6 + .../com/xinda/record/utils/DateUtils.java | 42 + .../java/com/xinda/record/utils/PageInfo.java | 96 + .../com/xinda/record/utils/RedisUtil.java | 698 + .../src/main/resources/all-application.yml | 59 + .../src/main/resources/application-dev.yml | 60 + .../src/main/resources/application-prod.yml | 75 + .../src/main/resources/application.yml | 3 + .../main/resources/mybatis/mybatis-config.xml | 20 + .../src/main/resources/static/download.html | 25 + xinda-scada/pom.xml | 32 + .../controller/ScadaComponentController.java | 116 + .../scada/controller/ScadaController.java | 490 + .../controller/ScadaEchartController.java | 115 + .../controller/ScadaGalleryController.java | 138 + .../controller/ScadaModelController.java | 104 + .../java/com/xinda/scada/domain/Scada.java | 88 + .../xinda/scada/domain/ScadaComponent.java | 185 + .../xinda/scada/domain/ScadaDeviceBind.java | 40 + .../com/xinda/scada/domain/ScadaEchart.java | 162 + .../com/xinda/scada/domain/ScadaGallery.java | 124 + .../com/xinda/scada/domain/ScadaModel.java | 138 + .../scada/mapper/ScadaComponentMapper.java | 61 + .../scada/mapper/ScadaDeviceBindMapper.java | 72 + .../xinda/scada/mapper/ScadaEchartMapper.java | 61 + .../scada/mapper/ScadaGalleryMapper.java | 71 + .../com/xinda/scada/mapper/ScadaMapper.java | 99 + .../xinda/scada/mapper/ScadaModelMapper.java | 61 + .../scada/service/IScadaComponentService.java | 61 + .../service/IScadaDeviceBindService.java | 70 + .../scada/service/IScadaEchartService.java | 64 + .../scada/service/IScadaGalleryService.java | 72 + .../scada/service/IScadaModelService.java | 61 + .../xinda/scada/service/IScadaService.java | 123 + .../impl/ScadaComponentServiceImpl.java | 130 + .../impl/ScadaDeviceBindServiceImpl.java | 100 + .../service/impl/ScadaEchartServiceImpl.java | 127 + .../service/impl/ScadaGalleryServiceImpl.java | 127 + .../service/impl/ScadaModelServiceImpl.java | 97 + .../scada/service/impl/ScadaServiceImpl.java | 304 + .../utils/ScadaBase64ToMultipartFile.java | 80 + .../scada/utils/ScadaCollectionUtils.java | 49 + .../com/xinda/scada/utils/ScadaConstant.java | 14 + .../scada/utils/ScadaFileUploadUtils.java | 234 + .../com/xinda/scada/utils/ScadaFileUtils.java | 26 + .../com/xinda/scada/vo/DeviceRealDataVO.java | 52 + .../java/com/xinda/scada/vo/FavoritesVO.java | 15 + .../xinda/scada/vo/ScadaBindDeviceSimVO.java | 25 + .../xinda/scada/vo/ScadaDeviceBindDTO.java | 15 + .../com/xinda/scada/vo/ScadaDeviceBindVO.java | 32 + .../xinda/scada/vo/ScadaHistoryModelVO.java | 20 + .../com/xinda/scada/vo/ScadaStatisticVO.java | 49 + .../scada/vo/ThingsModelHistoryParam.java | 35 + .../resources/mapper/ScadaComponentMapper.xml | 116 + .../mapper/ScadaDeviceBindMapper.xml | 76 + .../resources/mapper/ScadaEchartMapper.xml | 106 + .../resources/mapper/ScadaGalleryMapper.xml | 106 + .../src/main/resources/mapper/ScadaMapper.xml | 287 + .../resources/mapper/ScadaModelMapper.xml | 101 + xinda-server/base-server/pom.xml | 12 + .../java/com/xinda/base/codec/Delimiter.java | 29 + .../com/xinda/base/codec/LengthField.java | 76 + .../com/xinda/base/codec/MessageDecoder.java | 18 + .../com/xinda/base/codec/MessageEncoder.java | 15 + .../base/core/AbstractHandlerMapping.java | 61 + .../base/core/DefaultHandlerMapping.java | 27 + .../xinda/base/core/HandlerInterceptor.java | 37 + .../com/xinda/base/core/HandlerMapping.java | 12 + .../xinda/base/core/SpringHandlerMapping.java | 23 + .../com/xinda/base/core/annotation/Async.java | 15 + .../base/core/annotation/AsyncBatch.java | 27 + .../com/xinda/base/core/annotation/Node.java | 14 + .../base/core/annotation/PakMapping.java | 17 + .../base/core/hanler/AsyncBatchHandler.java | 128 + .../xinda/base/core/hanler/BaseHandler.java | 86 + .../xinda/base/core/hanler/SyncHandler.java | 23 + .../com/xinda/base/core/model/Response.java | 12 + .../java/com/xinda/base/model/DeviceMsg.java | 19 + .../java/com/xinda/base/model/SessionKey.java | 16 + .../com/xinda/base/service/ISessionStore.java | 60 + .../base/service/impl/SessionStoreImpl.java | 104 + .../java/com/xinda/base/session/Packet.java | 74 + .../java/com/xinda/base/session/Session.java | 286 + .../xinda/base/session/SessionListener.java | 26 + .../xinda/base/session/SessionManager.java | 129 + .../com/xinda/base/util/AttributeUtils.java | 42 + .../com/xinda/base/util/ByteBufUtils.java | 43 + .../java/com/xinda/base/util/ClassUtils.java | 106 + .../xinda/base/util/ConcurrentStorage.java | 51 + .../java/com/xinda/base/util/DeviceUtils.java | 30 + .../java/com/xinda/base/util/Stopwatch.java | 48 + .../java/com/xinda/base/util/Storage.java | 18 + .../java/com/xinda/base/util/VirtualList.java | 101 + xinda-server/boot-strap/pom.xml | 43 + .../xinda/bootstrap/coap/CoapBootStrap.java | 33 + .../xinda/bootstrap/http/HttpBootStrap.java | 34 + .../xinda/bootstrap/mqtt/MQTTBootStrap.java | 70 + .../com/xinda/bootstrap/tcp/TCPBootStrap.java | 62 + .../bootstrap/tcp/config/TcpBeanConfig.java | 43 + .../tcp/config/TcpHandlerInterceptor.java | 52 + .../tcp/config/TcpSessionListener.java | 55 + .../com/xinda/bootstrap/udp/UDPBootStrap.java | 58 + xinda-server/coap-server/pom.xml | 25 + .../main/java/com/xinda/coap/Coapserver.java | 40 + .../src/main/java/com/xinda/coap/README.md | 35 + .../xinda/coap/codec/CoapMessageDecoder.java | 222 + .../xinda/coap/codec/CoapMessageEncoder.java | 189 + .../coap/codec/HeaderDecodingException.java | 21 + .../coap/codec/OptionCodecException.java | 29 + .../coap/handler/AbstractResourceHandler.java | 18 + .../com/xinda/coap/handler/ReqDispatcher.java | 37 + .../xinda/coap/handler/RequestConsumer.java | 13 + .../xinda/coap/handler/ResourceHandler.java | 36 + .../coap/handler/TimeResourceHandler.java | 46 + .../java/com/xinda/coap/model/BlockSize.java | 74 + .../com/xinda/coap/model/CoapMessage.java | 494 + .../com/xinda/coap/model/CoapRequest.java | 322 + .../com/xinda/coap/model/CoapResponse.java | 182 + .../com/xinda/coap/model/MessageCode.java | 247 + .../com/xinda/coap/model/MessageType.java | 49 + .../xinda/coap/model/ResourceStatusAge.java | 43 + .../main/java/com/xinda/coap/model/Token.java | 75 + .../coap/model/linkformat/LinkParam.java | 436 + .../coap/model/linkformat/LinkValue.java | 109 + .../coap/model/linkformat/LinkValueList.java | 189 + .../coap/model/options/ContentFormat.java | 59 + .../coap/model/options/EmptyOptionValue.java | 56 + .../coap/model/options/OpaqueOptionValue.java | 56 + .../com/xinda/coap/model/options/Option.java | 449 + .../xinda/coap/model/options/OptionValue.java | 187 + .../coap/model/options/StringOptionValue.java | 87 + .../coap/model/options/UintOptionValue.java | 51 + .../server/CoapServerChannelInitializer.java | 27 + .../xinda/coap/server/ResourceRegistry.java | 77 + xinda-server/http-server/pom.xml | 39 + .../java/com/xinda/http/auth/BasicAuth.java | 55 + .../java/com/xinda/http/auth/DigestAuth.java | 47 + .../xinda/http/handler/IHttpReqHandler.java | 9 + .../xinda/http/handler/IHttpResHandler.java | 9 + .../http/handler/req/EventHttpReqHandler.java | 47 + .../http/handler/req/InfoHttpReqHandler.java | 55 + .../handler/req/KeepaliveHttpReqHandler.java | 40 + .../handler/req/MonitorHttpReqHandler.java | 46 + .../handler/req/PropertyHttpReqHandler.java | 47 + .../http/manager/HttpSessionManager.java | 54 + .../xinda/http/manager/NettyHttpSession.java | 117 + .../com/xinda/http/server/HttpListener.java | 55 + .../com/xinda/http/server/HttpServer.java | 54 + .../xinda/http/server/HttpServerHandler.java | 98 + .../xinda/http/service/IHttpMqttService.java | 18 + .../service/impl/HttpMqttServiceImpl.java | 73 + .../com/xinda/http/utils/DigestAuthUtil.java | 197 + xinda-server/iot-server-core/pom.xml | 25 + .../main/java/com/xinda/server/Server.java | 77 + .../main/java/com/xinda/server/TCPServer.java | 84 + .../main/java/com/xinda/server/UDPServer.java | 62 + .../com/xinda/server/config/NettyConfig.java | 274 + .../handler/DelimiterBasedFrameDecoder.java | 140 + .../server/handler/DispatcherHandler.java | 208 + .../LengthFieldAndDelimiterFrameDecoder.java | 186 + .../server/handler/MessageDecoderWrapper.java | 54 + .../server/handler/MessageEncoderWrapper.java | 56 + .../server/handler/TCPMessageAdapter.java | 147 + .../server/handler/UDPMessageAdapter.java | 173 + xinda-server/mqtt-broker/pom.xml | 35 + .../com/xinda/mqtt/annotation/Process.java | 24 + .../java/com/xinda/mqtt/auth/AuthService.java | 122 + .../xinda/mqtt/codec/WebSocketMqttCodec.java | 30 + .../com/xinda/mqtt/handler/MqttConnect.java | 159 + .../xinda/mqtt/handler/MqttDisConnect.java | 45 + .../com/xinda/mqtt/handler/MqttPingreq.java | 51 + .../com/xinda/mqtt/handler/MqttPubAck.java | 39 + .../com/xinda/mqtt/handler/MqttPubRec.java | 47 + .../com/xinda/mqtt/handler/MqttPubRel.java | 41 + .../com/xinda/mqtt/handler/MqttPubcomp.java | 38 + .../com/xinda/mqtt/handler/MqttPublish.java | 231 + .../com/xinda/mqtt/handler/MqttSubscribe.java | 112 + .../xinda/mqtt/handler/MqttUnsubscribe.java | 42 + .../mqtt/handler/adapter/MqttHandler.java | 12 + .../handler/adapter/MqttMessageAdapter.java | 89 + .../handler/adapter/MqttMessageDelegate.java | 58 + .../com/xinda/mqtt/manager/ClientManager.java | 174 + .../xinda/mqtt/manager/MqttRemoteManager.java | 90 + .../xinda/mqtt/manager/ResponseManager.java | 81 + .../xinda/mqtt/manager/RetainMsgManager.java | 58 + .../com/xinda/mqtt/manager/SessionManger.java | 194 + .../mqtt/manager/WillMessageManager.java | 34 + .../com/xinda/mqtt/model/ClientMessage.java | 45 + .../com/xinda/mqtt/model/PushMessageBo.java | 23 + .../com/xinda/mqtt/model/RetainMessage.java | 23 + .../java/com/xinda/mqtt/model/Subscribe.java | 23 + .../com/xinda/mqtt/model/WillMessage.java | 26 + .../com/xinda/mqtt/server/MqttServer.java | 66 + .../xinda/mqtt/server/WebSocketServer.java | 73 + .../com/xinda/mqtt/service/IMessageStore.java | 90 + .../mqtt/service/ISubscriptionService.java | 40 + .../mqtt/service/impl/DataHandlerImpl.java | 292 + .../impl/DeviceReportMessageServiceImpl.java | 345 + .../mqtt/service/impl/DeviceTestHandler.java | 66 + .../mqtt/service/impl/MessageStoreImpl.java | 159 + .../service/impl/MqttMessagePublishImpl.java | 434 + .../service/impl/SubscriptionServiceImpl.java | 56 + .../xinda/mqtt/utils/MqttMessageUtils.java | 144 + xinda-server/pom.xml | 58 + xinda-server/sip-server/README.md | 29 + xinda-server/sip-server/pom.xml | 77 + .../java/com/xinda/sip/conf/SysSipConfig.java | 20 + .../xinda/sip/conf/ThreadPoolTaskConfig.java | 32 + .../com/xinda/sip/domain/BindingChannel.java | 28 + .../com/xinda/sip/domain/MediaServer.java | 120 + .../java/com/xinda/sip/domain/SipConfig.java | 95 + .../java/com/xinda/sip/domain/SipDevice.java | 310 + .../xinda/sip/domain/SipDeviceChannel.java | 291 + .../java/com/xinda/sip/enums/AlarmMethod.java | 20 + .../java/com/xinda/sip/enums/AlarmType.java | 61 + .../com/xinda/sip/enums/ChannelStatus.java | 22 + .../java/com/xinda/sip/enums/ChannelType.java | 5 + .../xinda/sip/enums/DeviceChannelStatus.java | 15 + .../main/java/com/xinda/sip/enums/Direct.java | 51 + .../com/xinda/sip/enums/FunctionType.java | 25 + .../main/java/com/xinda/sip/enums/PTZCmd.java | 17 + .../java/com/xinda/sip/enums/PTZType.java | 17 + .../java/com/xinda/sip/enums/SessionType.java | 8 + .../com/xinda/sip/handler/IReqHandler.java | 7 + .../com/xinda/sip/handler/IResHandler.java | 8 + .../xinda/sip/handler/req/AckReqHandler.java | 36 + .../xinda/sip/handler/req/ByeReqHandler.java | 38 + .../sip/handler/req/CancelReqHandler.java | 36 + .../sip/handler/req/InviteReqHandler.java | 36 + .../sip/handler/req/RegisterReqHandler.java | 199 + .../sip/handler/req/ReqAbstractHandler.java | 162 + .../sip/handler/req/UnknowReqHandler.java | 17 + .../handler/req/message/IMessageHandler.java | 15 + .../req/message/MessageHandlerAbstract.java | 27 + .../req/message/MessageRequestProcessor.java | 92 + .../message/notify/NotifyMessageHandler.java | 20 + .../message/notify/cmdType/AlarmHandler.java | 45 + .../notify/cmdType/KeepaliveHandler.java | 81 + .../notify/cmdType/MediaStatusHandler.java | 27 + .../notify/cmdType/MobilePositionHandler.java | 27 + .../response/ResponseMessageHandler.java | 20 + .../response/cmdType/AlarmRHandler.java | 28 + .../response/cmdType/CatalogHandler.java | 212 + .../cmdType/ConfigDownloadHandler.java | 28 + .../response/cmdType/DeviceConfigHandler.java | 28 + .../cmdType/DeviceControlHandler.java | 28 + .../response/cmdType/DeviceInfoHandler.java | 61 + .../response/cmdType/DeviceStatusHandler.java | 28 + .../cmdType/MobilePositionRHandler.java | 28 + .../response/cmdType/RecordInfoHandler.java | 93 + .../xinda/sip/handler/res/ByeResHandler.java | 29 + .../sip/handler/res/CancelResHandler.java | 28 + .../sip/handler/res/InviteResHandler.java | 52 + .../sip/handler/res/UnknowResHandler.java | 17 + .../xinda/sip/mapper/MediaServerMapper.java | 64 + .../com/xinda/sip/mapper/SipConfigMapper.java | 66 + .../sip/mapper/SipDeviceChannelMapper.java | 99 + .../com/xinda/sip/mapper/SipDeviceMapper.java | 77 + .../java/com/xinda/sip/model/BaseTree.java | 35 + .../xinda/sip/model/GB28181DeviceChannel.java | 209 + .../java/com/xinda/sip/model/InviteInfo.java | 14 + .../xinda/sip/model/MediaServerConfig.java | 203 + .../xinda/sip/model/PtzDirectionInput.java | 10 + .../com/xinda/sip/model/PtzscaleInput.java | 9 + .../java/com/xinda/sip/model/RecordInput.java | 11 + .../java/com/xinda/sip/model/RecordItem.java | 23 + .../java/com/xinda/sip/model/RecordList.java | 56 + .../com/xinda/sip/model/RequestMessage.java | 11 + .../java/com/xinda/sip/model/SipDate.java | 141 + .../com/xinda/sip/model/SipDeviceSummary.java | 25 + .../main/java/com/xinda/sip/model/Stream.java | 44 + .../java/com/xinda/sip/model/StreamURL.java | 31 + .../com/xinda/sip/model/VideoSessionInfo.java | 34 + .../com/xinda/sip/model/ZlmMediaServer.java | 206 + .../com/xinda/sip/server/IGBListener.java | 11 + .../java/com/xinda/sip/server/IRtspCmd.java | 11 + .../java/com/xinda/sip/server/ISipCmd.java | 12 + .../com/xinda/sip/server/MessageInvoker.java | 64 + .../com/xinda/sip/server/NullSipProvider.java | 89 + .../xinda/sip/server/RecordCacheManager.java | 41 + .../xinda/sip/server/ReqMsgHeaderBuilder.java | 267 + .../com/xinda/sip/server/RequestBuilder.java | 48 + .../java/com/xinda/sip/server/SipLayer.java | 97 + .../java/com/xinda/sip/server/SipMessage.java | 15 + .../xinda/sip/server/VideoSessionManager.java | 195 + .../xinda/sip/server/impl/GBListenerImpl.java | 90 + .../sip/server/impl/MessageInvokerImpl.java | 275 + .../sip/server/impl/RequestBuilderImpl.java | 186 + .../xinda/sip/server/impl/RtspCmdImpl.java | 122 + .../com/xinda/sip/server/impl/SipCmdImpl.java | 381 + .../java/com/xinda/sip/server/msg/Alarm.java | 76 + .../com/xinda/sip/server/msg/CatalogInfo.java | 104 + .../xinda/sip/server/msg/ConfigDownload.java | 130 + .../xinda/sip/server/msg/DeviceControl.java | 163 + .../xinda/sip/server/msg/GB28181Device.java | 104 + .../sip/server/msg/KeepaliveMessage.java | 29 + .../xinda/sip/service/IGatewayService.java | 11 + .../com/xinda/sip/service/IInviteService.java | 26 + .../sip/service/IMediaServerService.java | 80 + .../com/xinda/sip/service/IMqttService.java | 18 + .../com/xinda/sip/service/IPlayService.java | 20 + .../com/xinda/sip/service/IPtzCmdService.java | 7 + .../com/xinda/sip/service/IRecordService.java | 30 + .../xinda/sip/service/ISipCacheService.java | 12 + .../xinda/sip/service/ISipConfigService.java | 50 + .../sip/service/ISipDeviceChannelService.java | 88 + .../xinda/sip/service/ISipDeviceService.java | 69 + .../xinda/sip/service/IZmlHookService.java | 22 + .../sip/service/impl/GatewayServiceImpl.java | 41 + .../sip/service/impl/InviteServiceImpl.java | 127 + .../service/impl/MediaServerServiceImpl.java | 346 + .../sip/service/impl/PlayServiceImpl.java | 162 + .../sip/service/impl/PtzCmdServiceImpl.java | 42 + .../sip/service/impl/RecordServiceImpl.java | 213 + .../sip/service/impl/SipCacheServiceImpl.java | 41 + .../service/impl/SipConfigServiceImpl.java | 176 + .../impl/SipDeviceChannelServiceImpl.java | 381 + .../service/impl/SipDeviceServiceImpl.java | 152 + .../sip/service/impl/VideoMqttService.java | 183 + .../sip/service/impl/ZmlHookServiceImpl.java | 350 + .../com/xinda/sip/util/DigestAuthUtil.java | 185 + .../com/xinda/sip/util/RecordApiUtils.java | 170 + .../main/java/com/xinda/sip/util/SipUtil.java | 178 + .../java/com/xinda/sip/util/WebAsyncUtil.java | 24 + .../main/java/com/xinda/sip/util/XmlUtil.java | 118 + .../java/com/xinda/sip/util/ZlmApiUtils.java | 388 + .../com/xinda/sip/util/result/BaseResult.java | 49 + .../com/xinda/sip/util/result/CodeEnum.java | 25 + .../com/xinda/sip/util/result/DataResult.java | 50 + .../resources/mapper/MediaServerMapper.xml | 182 + .../main/resources/mapper/SipConfigMapper.xml | 164 + .../mapper/SipDeviceChannelMapper.xml | 398 + .../main/resources/mapper/SipDeviceMapper.xml | 212 + xinda-service/pom.xml | 21 + xinda-service/xinda-iot-service/pom.xml | 163 + .../com/xinda/iot/cache/IDeviceCache.java | 40 + .../com/xinda/iot/cache/IFirmwareCache.java | 30 + .../xinda/iot/cache/IModbusConfigCache.java | 49 + .../java/com/xinda/iot/cache/ITSLCache.java | 103 + .../com/xinda/iot/cache/ITSLValueCache.java | 40 + .../xinda/iot/cache/SceneModelTagCache.java | 25 + .../xinda/iot/cache/impl/DeviceCacheImpl.java | 131 + .../iot/cache/impl/FirmwareCacheImpl.java | 56 + .../iot/cache/impl/ModbusConfigCacheImpl.java | 110 + .../cache/impl/SceneModelTagCacheImpl.java | 36 + .../xinda/iot/cache/impl/TSLCacheImpl.java | 305 + .../iot/cache/impl/TSLValueCacheImpl.java | 143 + .../iot/convert/DeviceRecordConvert.java | 35 + .../main/java/com/xinda/iot/domain/Alert.java | 152 + .../java/com/xinda/iot/domain/AlertLog.java | 71 + .../xinda/iot/domain/AlertNotifyTemplate.java | 52 + .../java/com/xinda/iot/domain/AlertScene.java | 46 + .../java/com/xinda/iot/domain/Bridge.java | 50 + .../java/com/xinda/iot/domain/Category.java | 167 + .../xinda/iot/domain/CommandPreferences.java | 51 + .../java/com/xinda/iot/domain/Device.java | 185 + .../com/xinda/iot/domain/DeviceAlertUser.java | 29 + .../com/xinda/iot/domain/DeviceGroup.java | 46 + .../java/com/xinda/iot/domain/DeviceJob.java | 325 + .../java/com/xinda/iot/domain/DeviceLog.java | 256 + .../com/xinda/iot/domain/DeviceModel.java | 50 + .../com/xinda/iot/domain/DeviceRecord.java | 93 + .../com/xinda/iot/domain/DeviceShare.java | 48 + .../java/com/xinda/iot/domain/DeviceUser.java | 47 + .../java/com/xinda/iot/domain/EventLog.java | 249 + .../java/com/xinda/iot/domain/Firmware.java | 197 + .../com/xinda/iot/domain/FirmwareTask.java | 150 + .../xinda/iot/domain/FirmwareTaskDetail.java | 151 + .../com/xinda/iot/domain/FunctionLog.java | 123 + .../com/xinda/iot/domain/GoviewProject.java | 139 + .../xinda/iot/domain/GoviewProjectData.java | 76 + .../main/java/com/xinda/iot/domain/Group.java | 120 + .../java/com/xinda/iot/domain/HttpClient.java | 37 + .../com/xinda/iot/domain/ModbusConfig.java | 65 + .../java/com/xinda/iot/domain/ModbusJob.java | 73 + .../com/xinda/iot/domain/ModbusParams.java | 67 + .../java/com/xinda/iot/domain/MqttClient.java | 35 + .../xinda/iot/domain/MultipleDataSource.java | 48 + .../main/java/com/xinda/iot/domain/News.java | 195 + .../com/xinda/iot/domain/NewsCategory.java | 91 + .../com/xinda/iot/domain/OrderControl.java | 95 + .../java/com/xinda/iot/domain/Product.java | 405 + .../xinda/iot/domain/ProductAuthorize.java | 171 + .../java/com/xinda/iot/domain/Protocol.java | 49 + .../main/java/com/xinda/iot/domain/Scene.java | 90 + .../com/xinda/iot/domain/SceneDevice.java | 130 + .../java/com/xinda/iot/domain/SceneModel.java | 111 + .../com/xinda/iot/domain/SceneModelData.java | 75 + .../xinda/iot/domain/SceneModelDevice.java | 70 + .../com/xinda/iot/domain/SceneModelTag.java | 126 + .../com/xinda/iot/domain/SceneScript.java | 283 + .../com/xinda/iot/domain/SceneTagPoints.java | 81 + .../java/com/xinda/iot/domain/Script.java | 80 + .../com/xinda/iot/domain/SimulateLog.java | 56 + .../com/xinda/iot/domain/SipRelation.java | 65 + .../com/xinda/iot/domain/SocialPlatform.java | 189 + .../java/com/xinda/iot/domain/SocialUser.java | 188 + .../java/com/xinda/iot/domain/SubGateway.java | 47 + .../com/xinda/iot/domain/ThingsModel.java | 138 + .../iot/domain/ThingsModelJsonTemplate.java | 68 + .../xinda/iot/domain/ThingsModelTemplate.java | 122 + .../xinda/iot/domain/UserSocialProfile.java | 116 + .../java/com/xinda/iot/domain/ViewConfig.java | 125 + .../java/com/xinda/iot/enums/DeviceType.java | 42 + .../com/xinda/iot/mapper/AlertLogMapper.java | 110 + .../com/xinda/iot/mapper/AlertMapper.java | 149 + .../com/xinda/iot/mapper/BridgeMapper.java | 63 + .../com/xinda/iot/mapper/CategoryMapper.java | 81 + .../iot/mapper/CommandPreferencesMapper.java | 61 + .../iot/mapper/DeviceAlertUserMapper.java | 70 + .../com/xinda/iot/mapper/DeviceJobMapper.java | 140 + .../com/xinda/iot/mapper/DeviceLogMapper.java | 130 + .../com/xinda/iot/mapper/DeviceMapper.java | 366 + .../xinda/iot/mapper/DeviceModelMapper.java | 61 + .../xinda/iot/mapper/DeviceRecordMapper.java | 65 + .../xinda/iot/mapper/DeviceShareMapper.java | 90 + .../xinda/iot/mapper/DeviceUserMapper.java | 96 + .../com/xinda/iot/mapper/EventLogMapper.java | 85 + .../com/xinda/iot/mapper/FirmwareMapper.java | 85 + .../iot/mapper/FirmwareTaskDetailMapper.java | 97 + .../xinda/iot/mapper/FirmwareTaskMapper.java | 71 + .../xinda/iot/mapper/FunctionLogMapper.java | 121 + .../iot/mapper/GoviewProjectDataMapper.java | 74 + .../xinda/iot/mapper/GoviewProjectMapper.java | 63 + .../com/xinda/iot/mapper/GroupMapper.java | 103 + .../xinda/iot/mapper/ModbusConfigMapper.java | 91 + .../com/xinda/iot/mapper/ModbusJobMapper.java | 62 + .../xinda/iot/mapper/ModbusParamsMapper.java | 75 + .../xinda/iot/mapper/MqttClientMapper.java | 61 + .../xinda/iot/mapper/NewsCategoryMapper.java | 79 + .../java/com/xinda/iot/mapper/NewsMapper.java | 70 + .../xinda/iot/mapper/OrderControlMapper.java | 69 + .../iot/mapper/ProductAuthorizeMapper.java | 92 + .../com/xinda/iot/mapper/ProductMapper.java | 192 + .../com/xinda/iot/mapper/ProtocolMapper.java | 80 + .../xinda/iot/mapper/SceneDeviceMapper.java | 113 + .../com/xinda/iot/mapper/SceneMapper.java | 81 + .../iot/mapper/SceneModelDataMapper.java | 176 + .../iot/mapper/SceneModelDeviceMapper.java | 104 + .../xinda/iot/mapper/SceneModelMapper.java | 85 + .../xinda/iot/mapper/SceneModelTagMapper.java | 85 + .../xinda/iot/mapper/SceneScriptMapper.java | 88 + .../iot/mapper/SceneTagPointsMapper.java | 81 + .../com/xinda/iot/mapper/ScriptMapper.java | 102 + .../xinda/iot/mapper/SimulateLogMapper.java | 71 + .../xinda/iot/mapper/SipRelationMapper.java | 76 + .../iot/mapper/SocialPlatformMapper.java | 71 + .../xinda/iot/mapper/SocialUserMapper.java | 127 + .../com/xinda/iot/mapper/SpeakerMapper.java | 27 + .../xinda/iot/mapper/SubGatewayMapper.java | 95 + .../xinda/iot/mapper/ThingsModelMapper.java | 157 + .../iot/mapper/ThingsModelTemplateMapper.java | 79 + .../xinda/iot/mapper/ViewConfigMapper.java | 63 + .../main/java/com/xinda/iot/model/Action.java | 189 + .../com/xinda/iot/model/AlertCountVO.java | 23 + .../com/xinda/iot/model/AlertSceneSendVO.java | 35 + .../iot/model/AuthenticateInputModel.java | 36 + .../com/xinda/iot/model/CategoryNews.java | 49 + .../iot/model/ChangeProductStatusModel.java | 41 + .../java/com/xinda/iot/model/DataResult.java | 19 + .../com/xinda/iot/model/DeviceAlertCount.java | 13 + .../xinda/iot/model/DeviceAlertUserVO.java | 19 + .../xinda/iot/model/DeviceAllShortOutput.java | 220 + .../xinda/iot/model/DeviceAssignmentVO.java | 26 + .../com/xinda/iot/model/DeviceGroupInput.java | 36 + .../xinda/iot/model/DeviceHistoryParam.java | 43 + .../com/xinda/iot/model/DeviceImportVO.java | 26 + .../xinda/iot/model/DeviceMqttConnectVO.java | 35 + .../com/xinda/iot/model/DeviceMqttVO.java | 126 + .../iot/model/DeviceNumberAndProductId.java | 38 + .../xinda/iot/model/DeviceNumberStatus.java | 23 + .../com/xinda/iot/model/DeviceRecordVO.java | 96 + .../iot/model/DeviceRelateAlertLogVO.java | 31 + .../iot/model/DeviceRelateUserInput.java | 41 + .../com/xinda/iot/model/DeviceReport.java | 13 + .../xinda/iot/model/DeviceShortOutput.java | 419 + .../com/xinda/iot/model/DeviceStatistic.java | 146 + .../com/xinda/iot/model/DeviceStatusVO.java | 22 + .../com/xinda/iot/model/EmqxApiConfig.java | 29 + .../iot/model/FirmwareTaskDetailInput.java | 71 + .../iot/model/FirmwareTaskDetailOutput.java | 125 + .../model/FirmwareTaskDeviceStatistic.java | 41 + .../xinda/iot/model/FirmwareTaskInput.java | 104 + .../com/xinda/iot/model/HistoryModel.java | 22 + .../java/com/xinda/iot/model/IdAndName.java | 44 + .../java/com/xinda/iot/model/IdOutput.java | 24 + .../iot/model/ImportThingsModelInput.java | 47 + .../java/com/xinda/iot/model/ModbusJobBo.java | 19 + .../com/xinda/iot/model/ModbusPollBo.java | 18 + .../com/xinda/iot/model/MonitorModel.java | 34 + .../iot/model/MqttAuthenticationModel.java | 89 + .../com/xinda/iot/model/MqttClientConfig.java | 50 + .../iot/model/MqttClientConnectModel.java | 98 + .../com/xinda/iot/model/MqttInfoModel.java | 43 + .../java/com/xinda/iot/model/NtpModel.java | 40 + .../iot/model/ProductAuthenticateModel.java | 137 + .../xinda/iot/model/ProductAuthorizeVO.java | 30 + .../java/com/xinda/iot/model/ProductCode.java | 24 + .../xinda/iot/model/RegisterUserInput.java | 119 + .../xinda/iot/model/RegisterUserOutput.java | 26 + .../xinda/iot/model/SceneDeviceBindVO.java | 38 + .../xinda/iot/model/SceneTerminalUserVO.java | 19 + .../com/xinda/iot/model/ScriptCondition.java | 56 + .../com/xinda/iot/model/ScriptTemplate.java | 54 + .../com/xinda/iot/model/SerialNumberVO.java | 17 + .../main/java/com/xinda/iot/model/Specs.java | 44 + .../ThingsModelItem/ArrayModelOutput.java | 24 + .../ThingsModelItem/BoolModelOutput.java | 23 + .../iot/model/ThingsModelItem/Datatype.java | 163 + .../ThingsModelItem/DecimalModelOutput.java | 43 + .../iot/model/ThingsModelItem/EnumItem.java | 27 + .../model/ThingsModelItem/EnumItemOutput.java | 23 + .../ThingsModelItem/EnumModelOutput.java | 16 + .../ThingsModelItem/IntegerModelOutput.java | 43 + .../ThingsModelItem/ReadOnlyModelOutput.java | 44 + .../ThingsModelItem/StringModelOutput.java | 14 + .../model/ThingsModelItem/ThingsModel.java | 147 + .../ThingsModelItem/ThingsModelItemBase.java | 88 + .../iot/model/ThingsModelLogCountVO.java | 19 + .../com/xinda/iot/model/ThingsModelPerm.java | 45 + .../com/xinda/iot/model/ThingsModelSimVO.java | 21 + .../iot/model/ThingsModels/EventDto.java | 47 + .../iot/model/ThingsModels/FunctionDto.java | 45 + .../iot/model/ThingsModels/IdentifierVO.java | 28 + .../iot/model/ThingsModels/PropertyDto.java | 70 + .../iot/model/ThingsModels/ThingsItems.java | 21 + .../model/ThingsModels/ThingsModelShadow.java | 47 + .../ThingsModels/ThingsModelValueItem.java | 109 + .../ThingsModels/ThingsModelValueItemDto.java | 196 + .../ThingsModels/ThingsModelValuesOutput.java | 138 + .../model/ThingsModels/ThingsModelsDto.java | 50 + .../iot/model/ThingsModels/ValueItem.java | 51 + .../com/xinda/iot/model/TriggerParameter.java | 92 + .../com/xinda/iot/model/UserAndTenant.java | 20 + .../xinda/iot/model/UserIdDeviceIdModel.java | 36 + .../com/xinda/iot/model/VariableReadVO.java | 25 + .../iot/model/dashBoard/DashMqttMetrics.java | 29 + .../iot/model/dashBoard/DashMqttStat.java | 31 + .../com/xinda/iot/model/dto/DeviceRtDto.java | 29 + .../xinda/iot/model/dto/ThingsModelDTO.java | 92 + .../iot/model/gateWay/GateSubDeviceVO.java | 24 + .../iot/model/gateWay/SubDeviceAddVO.java | 21 + .../iot/model/gateWay/SubDeviceListVO.java | 46 + .../iot/model/goview/GoviewProjectVo.java | 113 + .../iot/model/login/AuthRequestWrap.java | 26 + .../xinda/iot/model/login/BindIdValue.java | 23 + .../xinda/iot/model/login/LoginIdValue.java | 32 + .../iot/model/login/WeChatLoginQrRes.java | 19 + .../iot/model/modbus/ModbusAndThingsVO.java | 38 + .../iot/model/modbus/ModbusConfigVO.java | 22 + .../iot/model/modbus/ModbusDataImport.java | 39 + .../iot/model/modbus/ModbusIoImport.java | 31 + .../xinda/iot/model/modbus/ModbusJobVO.java | 18 + .../iot/model/param/DataCenterParam.java | 33 + .../iot/model/scenemodel/CusDeviceVO.java | 28 + .../scenemodel/SceneDeviceThingsModelVO.java | 28 + .../model/scenemodel/SceneHistoryParam.java | 31 + .../model/scenemodel/SceneModelDataDTO.java | 90 + .../model/scenemodel/SceneModelDeviceVO.java | 19 + .../scenemodel/SceneModelTagCacheVO.java | 19 + .../scenemodel/SceneModelTagCycleVO.java | 88 + .../iot/model/speaker/DuerosReportVO.java | 61 + .../speaker/OauthAccessTokenReportVO.java | 15 + .../speaker/OauthClientDetailsReportVO.java | 15 + .../iot/model/varTemp/DeviceSlavePoint.java | 26 + .../xinda/iot/model/varTemp/DeviceTemp.java | 19 + .../xinda/iot/model/varTemp/EnumClass.java | 14 + .../xinda/iot/model/varTemp/SlaveIdAndId.java | 14 + .../xinda/iot/model/varTemp/SyncModel.java | 15 + .../iot/ruleEngine/DataSourceService.java | 89 + .../com/xinda/iot/ruleEngine/HttpBridge.java | 39 + .../iot/ruleEngine/MessageArrivedHandler.java | 42 + .../com/xinda/iot/ruleEngine/MqttBridge.java | 47 + .../iot/ruleEngine/MqttClientFactory.java | 95 + .../com/xinda/iot/ruleEngine/MsgContext.java | 131 + .../iot/ruleEngine/MsgContextService.java | 47 + .../com/xinda/iot/ruleEngine/RuleProcess.java | 81 + .../xinda/iot/service/DataCenterService.java | 58 + .../xinda/iot/service/IAlertLogService.java | 101 + .../com/xinda/iot/service/IAlertService.java | 109 + .../iot/service/IAuthRequestFactory.java | 14 + .../com/xinda/iot/service/IBridgeService.java | 61 + .../xinda/iot/service/ICategoryService.java | 72 + .../service/ICommandPreferencesService.java | 61 + .../iot/service/IDeviceAlertUserService.java | 79 + .../xinda/iot/service/IDeviceJobService.java | 157 + .../xinda/iot/service/IDeviceLogService.java | 109 + .../iot/service/IDeviceModelService.java | 61 + .../iot/service/IDeviceRecordService.java | 62 + .../iot/service/IDeviceRuntimeService.java | 32 + .../com/xinda/iot/service/IDeviceService.java | 333 + .../iot/service/IDeviceShareService.java | 89 + .../xinda/iot/service/IDeviceUserService.java | 95 + .../xinda/iot/service/IEventLogService.java | 84 + .../xinda/iot/service/IFirmwareService.java | 76 + .../service/IFirmwareTaskDetailService.java | 80 + .../iot/service/IFirmwareTaskService.java | 62 + .../iot/service/IFunctionLogService.java | 112 + .../service/IGoviewProjectDataService.java | 84 + .../iot/service/IGoviewProjectService.java | 61 + .../com/xinda/iot/service/IGroupService.java | 92 + .../xinda/iot/service/IHttpClientService.java | 23 + .../iot/service/IModbusConfigService.java | 130 + .../xinda/iot/service/IModbusJobService.java | 71 + .../iot/service/IModbusParamsService.java | 75 + .../xinda/iot/service/IMqttClientService.java | 21 + .../iot/service/INewsCategoryService.java | 71 + .../com/xinda/iot/service/INewsService.java | 69 + .../iot/service/IOrderControlService.java | 78 + .../iot/service/IProductAuthorizeService.java | 76 + .../xinda/iot/service/IProductService.java | 140 + .../xinda/iot/service/IProtocolService.java | 75 + .../iot/service/ISceneDeviceService.java | 61 + .../iot/service/ISceneModelDataService.java | 92 + .../iot/service/ISceneModelDeviceService.java | 76 + .../xinda/iot/service/ISceneModelService.java | 68 + .../iot/service/ISceneModelTagService.java | 88 + .../iot/service/ISceneScriptService.java | 61 + .../com/xinda/iot/service/ISceneService.java | 82 + .../iot/service/ISceneTagPointsService.java | 61 + .../com/xinda/iot/service/IScriptService.java | 107 + .../iot/service/ISimulateLogService.java | 71 + .../iot/service/ISipRelationService.java | 76 + .../iot/service/ISocialLoginService.java | 106 + .../iot/service/ISocialPlatformService.java | 69 + .../xinda/iot/service/ISocialUserService.java | 123 + .../xinda/iot/service/ISubGatewayService.java | 93 + .../iot/service/IThingsModelService.java | 195 + .../service/IThingsModelTemplateService.java | 81 + .../com/xinda/iot/service/IToolService.java | 70 + .../service/IUserSocialProfileService.java | 42 + .../xinda/iot/service/IViewConfigService.java | 61 + .../com/xinda/iot/service/SpeakerService.java | 23 + .../iot/service/impl/AlertLogServiceImpl.java | 196 + .../iot/service/impl/AlertServiceImpl.java | 224 + .../service/impl/AuthRequestFactoryImpl.java | 74 + .../iot/service/impl/AuthStateRedisCache.java | 52 + .../iot/service/impl/BridgeServiceImpl.java | 210 + .../iot/service/impl/CategoryServiceImpl.java | 142 + .../impl/CommandPreferencesServiceImpl.java | 113 + .../service/impl/DataCenterServiceImpl.java | 185 + .../impl/DeviceAlertUserServiceImpl.java | 122 + .../service/impl/DeviceLogServiceImpl.java | 219 + .../service/impl/DeviceModelServiceImpl.java | 93 + .../service/impl/DeviceRecordServiceImpl.java | 169 + .../impl/DeviceRuntimeServiceImpl.java | 97 + .../iot/service/impl/DeviceServiceImpl.java | 1621 ++ .../service/impl/DeviceShareServiceImpl.java | 165 + .../service/impl/DeviceUserServiceImpl.java | 168 + .../iot/service/impl/EventLogServiceImpl.java | 122 + .../iot/service/impl/FirmwareServiceImpl.java | 146 + .../impl/FirmwareTaskDetailServiceImpl.java | 150 + .../service/impl/FirmwareTaskServiceImpl.java | 131 + .../service/impl/FunctionLogServiceImpl.java | 157 + .../impl/GoviewProjectDataServiceImpl.java | 136 + .../impl/GoviewProjectServiceImpl.java | 106 + .../iot/service/impl/GroupServiceImpl.java | 182 + .../service/impl/HttpClientServiceImpl.java | 42 + .../service/impl/ModbusConfigServiceImpl.java | 347 + .../service/impl/ModbusJobServiceImpl.java | 239 + .../service/impl/ModbusParamsServiceImpl.java | 116 + .../service/impl/MqttClientServiceImpl.java | 32 + .../service/impl/NewsCategoryServiceImpl.java | 117 + .../iot/service/impl/NewsServiceImpl.java | 131 + .../service/impl/OrderControlServiceImpl.java | 188 + .../impl/ProductAuthorizeServiceImpl.java | 143 + .../iot/service/impl/ProductServiceImpl.java | 326 + .../iot/service/impl/ProtocolServiceImpl.java | 119 + .../service/impl/SceneDeviceServiceImpl.java | 95 + .../impl/SceneModelDataServiceImpl.java | 251 + .../impl/SceneModelDeviceServiceImpl.java | 246 + .../service/impl/SceneModelServiceImpl.java | 219 + .../impl/SceneModelTagServiceImpl.java | 511 + .../service/impl/SceneScriptServiceImpl.java | 95 + .../iot/service/impl/SceneServiceImpl.java | 639 + .../impl/SceneTagPointsServiceImpl.java | 98 + .../iot/service/impl/ScriptServiceImpl.java | 332 + .../service/impl/SimulateLogServiceImpl.java | 124 + .../service/impl/SipRelationServiceImpl.java | 144 + .../service/impl/SocialLoginServiceImpl.java | 506 + .../impl/SocialPlatformServiceImpl.java | 103 + .../service/impl/SocialUserServiceImpl.java | 170 + .../iot/service/impl/SpeakerServiceImpl.java | 98 + .../service/impl/SubGatewayServiceImpl.java | 169 + .../service/impl/ThingsModelServiceImpl.java | 682 + .../impl/ThingsModelTemplateServiceImpl.java | 276 + .../iot/service/impl/ToolServiceImpl.java | 574 + .../impl/UserSocialProfileServiceImpl.java | 105 + .../service/impl/ViewConfigServiceImpl.java | 97 + .../iot/tdengine/config/TDengineConfig.java | 95 + .../iot/tdengine/dao/TDDeviceLogDAO.java | 106 + .../iot/tdengine/init/ApplicationStarted.java | 136 + .../iot/tdengine/service/ILogService.java | 74 + .../service/factory/LogServiceFactory.java | 62 + .../service/impl/MySqlLogServiceImpl.java | 119 + .../service/impl/TdengineLogServiceImpl.java | 160 + .../iot/tdengine/service/model/TdLogDto.java | 27 + .../java/com/xinda/iot/util/AESUtils.java | 119 + .../java/com/xinda/iot/util/JobCronUtils.java | 85 + .../com/xinda/iot/util/SnowflakeIdWorker.java | 104 + .../xinda/iot/util/VelocityInitializer.java | 35 + .../com/xinda/iot/util/VelocityUtils.java | 89 + .../iot/wechat/WeChatCallbackService.java | 17 + .../com/xinda/iot/wechat/WeChatService.java | 68 + .../impl/WeChatCallbackServiceImpl.java | 149 + .../iot/wechat/impl/WeChatServiceImpl.java | 433 + .../com/xinda/iot/wechat/vo/WxBindReqVO.java | 19 + .../iot/wechat/vo/WxCancelBindReqVO.java | 32 + .../resources/mapper/iot/AlertLogMapper.xml | 271 + .../main/resources/mapper/iot/AlertMapper.xml | 199 + .../resources/mapper/iot/BridgeMapper.xml | 110 + .../resources/mapper/iot/CategoryMapper.xml | 150 + .../mapper/iot/CommandPreferencesMapper.xml | 68 + .../mapper/iot/DeviceAlertUserMapper.xml | 66 + .../resources/mapper/iot/DeviceJobMapper.xml | 228 + .../resources/mapper/iot/DeviceLogMapper.xml | 293 + .../resources/mapper/iot/DeviceMapper.xml | 945 + .../mapper/iot/DeviceModelMapper.xml | 71 + .../mapper/iot/DeviceRecordMapper.xml | 146 + .../mapper/iot/DeviceShareMapper.xml | 147 + .../resources/mapper/iot/DeviceUserMapper.xml | 145 + .../resources/mapper/iot/EventLogMapper.xml | 171 + .../resources/mapper/iot/FirmwareMapper.xml | 140 + .../mapper/iot/FirmwareTaskDetailMapper.xml | 196 + .../mapper/iot/FirmwareTaskMapper.xml | 99 + .../mapper/iot/FunctionLogMapper.xml | 225 + .../mapper/iot/GoviewProjectDataMapper.xml | 82 + .../mapper/iot/GoviewProjectMapper.xml | 97 + .../main/resources/mapper/iot/GroupMapper.xml | 136 + .../mapper/iot/ModbusConfigMapper.xml | 347 + .../resources/mapper/iot/ModbusJobMapper.xml | 100 + .../mapper/iot/ModbusParamsMapper.xml | 120 + .../mapper/iot/NewsCategoryMapper.xml | 103 + .../main/resources/mapper/iot/NewsMapper.xml | 127 + .../mapper/iot/OrderControlMapper.xml | 130 + .../mapper/iot/ProductAuthorizeMapper.xml | 142 + .../resources/mapper/iot/ProductMapper.xml | 343 + .../resources/mapper/iot/ProtocolMapper.xml | 143 + .../mapper/iot/SceneDeviceMapper.xml | 147 + .../main/resources/mapper/iot/SceneMapper.xml | 163 + .../mapper/iot/SceneModelDataMapper.xml | 256 + .../mapper/iot/SceneModelDeviceMapper.xml | 164 + .../resources/mapper/iot/SceneModelMapper.xml | 136 + .../mapper/iot/SceneModelTagMapper.xml | 177 + .../mapper/iot/SceneScriptMapper.xml | 223 + .../mapper/iot/SceneTagPointsMapper.xml | 134 + .../resources/mapper/iot/ScriptMapper.xml | 265 + .../mapper/iot/SimulateLogMapper.xml | 93 + .../mapper/iot/SipRelationMapper.xml | 112 + .../mapper/iot/SocialPlatformMapper.xml | 141 + .../resources/mapper/iot/SocialUserMapper.xml | 304 + .../resources/mapper/iot/SpeakerMapper.xml | 41 + .../resources/mapper/iot/SubGatewayMapper.xml | 168 + .../mapper/iot/ThingsModelMapper.xml | 565 + .../mapper/iot/ThingsModelTemplateMapper.xml | 177 + .../resources/mapper/iot/ViewConfigMapper.xml | 98 + .../mapper/tdengine/TDDeviceLogMapper.xml | 213 + .../main/resources/vm/java/controller.java.vm | 115 + .../src/main/resources/vm/java/domain.java.vm | 105 + .../src/main/resources/vm/java/mapper.java.vm | 91 + .../main/resources/vm/java/service.java.vm | 61 + .../resources/vm/java/serviceImpl.java.vm | 169 + .../main/resources/vm/java/sub-domain.java.vm | 76 + .../src/main/resources/vm/js/api.js.vm | 44 + .../src/main/resources/vm/sql/sql.vm | 22 + .../main/resources/vm/vue/index-tree.vue.vm | 476 + .../src/main/resources/vm/vue/index.vue.vm | 567 + .../src/main/resources/vm/xml/mapper.xml.vm | 135 + xinda-service/xinda-system-service/pom.xml | 28 + .../com/xinda/system/domain/AppLanguage.java | 92 + .../xinda/system/domain/AppPreferences.java | 82 + .../com/xinda/system/domain/SysCache.java | 81 + .../com/xinda/system/domain/SysClient.java | 64 + .../com/xinda/system/domain/SysConfig.java | 120 + .../xinda/system/domain/SysLogininfor.java | 156 + .../com/xinda/system/domain/SysNotice.java | 111 + .../com/xinda/system/domain/SysOperLog.java | 275 + .../java/com/xinda/system/domain/SysPost.java | 133 + .../com/xinda/system/domain/SysRoleDept.java | 51 + .../com/xinda/system/domain/SysRoleMenu.java | 51 + .../xinda/system/domain/SysUserOnline.java | 113 + .../com/xinda/system/domain/SysUserPost.java | 51 + .../com/xinda/system/domain/SysUserRole.java | 51 + .../com/xinda/system/domain/vo/MetaVo.java | 106 + .../com/xinda/system/domain/vo/RouterVo.java | 148 + .../xinda/system/domain/vo/SysDeptTypeVO.java | 28 + .../java/com/xinda/system/enums/Language.java | 25 + .../system/mapper/AppLanguageMapper.java | 60 + .../system/mapper/AppPreferencesMapper.java | 67 + .../xinda/system/mapper/SysClientMapper.java | 61 + .../xinda/system/mapper/SysConfigMapper.java | 76 + .../xinda/system/mapper/SysDeptMapper.java | 156 + .../system/mapper/SysDictDataMapper.java | 134 + .../system/mapper/SysDictTypeMapper.java | 88 + .../system/mapper/SysLogininforMapper.java | 42 + .../xinda/system/mapper/SysMenuMapper.java | 125 + .../xinda/system/mapper/SysNoticeMapper.java | 60 + .../xinda/system/mapper/SysOperLogMapper.java | 48 + .../xinda/system/mapper/SysPostMapper.java | 99 + .../system/mapper/SysRoleDeptMapper.java | 66 + .../xinda/system/mapper/SysRoleMapper.java | 115 + .../system/mapper/SysRoleMenuMapper.java | 51 + .../system/mapper/SysTranslateMapper.java | 45 + .../xinda/system/mapper/SysUserMapper.java | 186 + .../system/mapper/SysUserPostMapper.java | 44 + .../system/mapper/SysUserRoleMapper.java | 69 + .../system/service/IAppLanguageService.java | 60 + .../service/IAppPreferencesService.java | 74 + .../system/service/ISysClientService.java | 61 + .../system/service/ISysConfigService.java | 89 + .../xinda/system/service/ISysDeptService.java | 155 + .../system/service/ISysDictDataService.java | 87 + .../system/service/ISysDictTypeService.java | 98 + .../system/service/ISysLogininforService.java | 40 + .../xinda/system/service/ISysMenuService.java | 149 + .../system/service/ISysNoticeService.java | 60 + .../system/service/ISysOperLogService.java | 48 + .../xinda/system/service/ISysPostService.java | 99 + .../xinda/system/service/ISysRoleService.java | 174 + .../system/service/ISysTranslateService.java | 36 + .../system/service/ISysUserOnlineService.java | 48 + .../xinda/system/service/ISysUserService.java | 257 + .../service/impl/AppLanguageServiceImpl.java | 95 + .../impl/AppPreferencesServiceImpl.java | 140 + .../service/impl/SysClientServiceImpl.java | 96 + .../service/impl/SysConfigServiceImpl.java | 232 + .../service/impl/SysDeptServiceImpl.java | 404 + .../service/impl/SysDictDataServiceImpl.java | 129 + .../service/impl/SysDictTypeServiceImpl.java | 254 + .../impl/SysLogininforServiceImpl.java | 65 + .../service/impl/SysMenuServiceImpl.java | 575 + .../service/impl/SysNoticeServiceImpl.java | 92 + .../service/impl/SysOperLogServiceImpl.java | 76 + .../service/impl/SysPostServiceImpl.java | 178 + .../service/impl/SysRoleServiceImpl.java | 528 + .../service/impl/SysTranslateServiceImpl.java | 95 + .../impl/SysUserOnlineServiceImpl.java | 96 + .../service/impl/SysUserServiceImpl.java | 644 + .../mapper/system/AppLanguageMapper.xml | 81 + .../mapper/system/AppPreferencesMapper.xml | 93 + .../mapper/system/SysClientMapper.xml | 110 + .../mapper/system/SysConfigMapper.xml | 117 + .../resources/mapper/system/SysDeptMapper.xml | 221 + .../mapper/system/SysDictDataMapper.xml | 211 + .../mapper/system/SysDictTypeMapper.xml | 145 + .../mapper/system/SysLogininforMapper.xml | 57 + .../resources/mapper/system/SysMenuMapper.xml | 241 + .../mapper/system/SysNoticeMapper.xml | 89 + .../mapper/system/SysOperLogMapper.xml | 83 + .../resources/mapper/system/SysPostMapper.xml | 122 + .../mapper/system/SysRoleDeptMapper.xml | 54 + .../resources/mapper/system/SysRoleMapper.xml | 166 + .../mapper/system/SysRoleMenuMapper.xml | 40 + .../mapper/system/SysTranslateMapper.xml | 49 + .../resources/mapper/system/SysUserMapper.xml | 355 + .../mapper/system/SysUserPostMapper.xml | 34 + .../mapper/system/SysUserRoleMapper.xml | 50 + xinda.bat | 67 + xinda.sh | 86 + 1836 files changed, 212497 insertions(+) create mode 100644 .gitignore create mode 100644 LICENSE create mode 100644 README.md create mode 100644 bin/clean.bat create mode 100644 bin/package.bat create mode 100644 bin/run.bat create mode 100644 pom.xml create mode 100644 sql/gongkongbang.sql create mode 100644 xinda-admin/pom.xml create mode 100644 xinda-admin/src/main/java/com/xinda/XinDaApplication.java create mode 100644 xinda-admin/src/main/java/com/xinda/XinDaServletInitializer.java create mode 100644 xinda-admin/src/main/java/com/xinda/web/controller/common/CaptchaController.java create mode 100644 xinda-admin/src/main/java/com/xinda/web/controller/common/CommonController.java create mode 100644 xinda-admin/src/main/java/com/xinda/web/controller/monitor/CacheController.java create mode 100644 xinda-admin/src/main/java/com/xinda/web/controller/monitor/ServerController.java create mode 100644 xinda-admin/src/main/java/com/xinda/web/controller/monitor/SysLogininforController.java create mode 100644 xinda-admin/src/main/java/com/xinda/web/controller/monitor/SysOperlogController.java create mode 100644 xinda-admin/src/main/java/com/xinda/web/controller/monitor/SysUserOnlineController.java create mode 100644 xinda-admin/src/main/java/com/xinda/web/controller/system/SysClientController.java create mode 100644 xinda-admin/src/main/java/com/xinda/web/controller/system/SysConfigController.java create mode 100644 xinda-admin/src/main/java/com/xinda/web/controller/system/SysDeptController.java create mode 100644 xinda-admin/src/main/java/com/xinda/web/controller/system/SysDictDataController.java create mode 100644 xinda-admin/src/main/java/com/xinda/web/controller/system/SysDictTypeController.java create mode 100644 xinda-admin/src/main/java/com/xinda/web/controller/system/SysIndexController.java create mode 100644 xinda-admin/src/main/java/com/xinda/web/controller/system/SysLoginController.java create mode 100644 xinda-admin/src/main/java/com/xinda/web/controller/system/SysMenuController.java create mode 100644 xinda-admin/src/main/java/com/xinda/web/controller/system/SysNoticeController.java create mode 100644 xinda-admin/src/main/java/com/xinda/web/controller/system/SysPostController.java create mode 100644 xinda-admin/src/main/java/com/xinda/web/controller/system/SysProfileController.java create mode 100644 xinda-admin/src/main/java/com/xinda/web/controller/system/SysRegisterController.java create mode 100644 xinda-admin/src/main/java/com/xinda/web/controller/system/SysRoleController.java create mode 100644 xinda-admin/src/main/java/com/xinda/web/controller/system/SysTranslateController.java create mode 100644 xinda-admin/src/main/java/com/xinda/web/controller/system/SysUserController.java create mode 100644 xinda-admin/src/main/java/com/xinda/web/controller/tool/SwaggerController.java create mode 100644 xinda-admin/src/main/java/com/xinda/web/controller/tool/TestController.java create mode 100644 xinda-admin/src/main/java/com/xinda/web/controller/tool/TestController2.java create mode 100644 xinda-admin/src/main/java/com/xinda/web/core/config/SwaggerConfig.java create mode 100644 xinda-admin/src/main/resources/META-INF/spring-devtools.properties create mode 100644 xinda-admin/src/main/resources/application-dev.yml create mode 100644 xinda-admin/src/main/resources/application-prod.yml create mode 100644 xinda-admin/src/main/resources/application.yml create mode 100644 xinda-admin/src/main/resources/banner.txt create mode 100644 xinda-admin/src/main/resources/i18n/messages.properties create mode 100644 xinda-admin/src/main/resources/i18n/messages_en_US.properties create mode 100644 xinda-admin/src/main/resources/i18n/messages_zh_CN.properties create mode 100644 xinda-admin/src/main/resources/logback.xml create mode 100644 xinda-admin/src/main/resources/mybatis/mybatis-config.xml create mode 100644 xinda-common/pom.xml create mode 100644 xinda-common/src/main/java/com/xinda/common/annotation/Anonymous.java create mode 100644 xinda-common/src/main/java/com/xinda/common/annotation/DataScope.java create mode 100644 xinda-common/src/main/java/com/xinda/common/annotation/DataSource.java create mode 100644 xinda-common/src/main/java/com/xinda/common/annotation/DictFormat.java create mode 100644 xinda-common/src/main/java/com/xinda/common/annotation/Excel.java create mode 100644 xinda-common/src/main/java/com/xinda/common/annotation/Excels.java create mode 100644 xinda-common/src/main/java/com/xinda/common/annotation/Log.java create mode 100644 xinda-common/src/main/java/com/xinda/common/annotation/RateLimiter.java create mode 100644 xinda-common/src/main/java/com/xinda/common/annotation/RepeatSubmit.java create mode 100644 xinda-common/src/main/java/com/xinda/common/annotation/SysProtocol.java create mode 100644 xinda-common/src/main/java/com/xinda/common/config/DeviceTask.java create mode 100644 xinda-common/src/main/java/com/xinda/common/config/RuoYiConfig.java create mode 100644 xinda-common/src/main/java/com/xinda/common/constant/CacheConstants.java create mode 100644 xinda-common/src/main/java/com/xinda/common/constant/Constants.java create mode 100644 xinda-common/src/main/java/com/xinda/common/constant/GenConstants.java create mode 100644 xinda-common/src/main/java/com/xinda/common/constant/HttpStatus.java create mode 100644 xinda-common/src/main/java/com/xinda/common/constant/MagicValueConstants.java create mode 100644 xinda-common/src/main/java/com/xinda/common/constant/ProductAuthConstant.java create mode 100644 xinda-common/src/main/java/com/xinda/common/constant/ScadaConstant.java create mode 100644 xinda-common/src/main/java/com/xinda/common/constant/SceneModelConstants.java create mode 100644 xinda-common/src/main/java/com/xinda/common/constant/ScheduleConstants.java create mode 100644 xinda-common/src/main/java/com/xinda/common/constant/SipConstants.java create mode 100644 xinda-common/src/main/java/com/xinda/common/constant/UserConstants.java create mode 100644 xinda-common/src/main/java/com/xinda/common/constant/XinDaConstant.java create mode 100644 xinda-common/src/main/java/com/xinda/common/core/controller/BaseController.java create mode 100644 xinda-common/src/main/java/com/xinda/common/core/device/DeviceAndProtocol.java create mode 100644 xinda-common/src/main/java/com/xinda/common/core/domain/AjaxResult.java create mode 100644 xinda-common/src/main/java/com/xinda/common/core/domain/BaseDO.java create mode 100644 xinda-common/src/main/java/com/xinda/common/core/domain/BaseEntity.java create mode 100644 xinda-common/src/main/java/com/xinda/common/core/domain/CommonResult.java create mode 100644 xinda-common/src/main/java/com/xinda/common/core/domain/ImportExcelVO.java create mode 100644 xinda-common/src/main/java/com/xinda/common/core/domain/OutputExcelVO.java create mode 100644 xinda-common/src/main/java/com/xinda/common/core/domain/PageParam.java create mode 100644 xinda-common/src/main/java/com/xinda/common/core/domain/PageResult.java create mode 100644 xinda-common/src/main/java/com/xinda/common/core/domain/R.java create mode 100644 xinda-common/src/main/java/com/xinda/common/core/domain/SortingField.java create mode 100644 xinda-common/src/main/java/com/xinda/common/core/domain/TenantBaseDO.java create mode 100644 xinda-common/src/main/java/com/xinda/common/core/domain/TreeEntity.java create mode 100644 xinda-common/src/main/java/com/xinda/common/core/domain/TreeSelect.java create mode 100644 xinda-common/src/main/java/com/xinda/common/core/domain/entity/SysDept.java create mode 100644 xinda-common/src/main/java/com/xinda/common/core/domain/entity/SysDictData.java create mode 100644 xinda-common/src/main/java/com/xinda/common/core/domain/entity/SysDictType.java create mode 100644 xinda-common/src/main/java/com/xinda/common/core/domain/entity/SysMenu.java create mode 100644 xinda-common/src/main/java/com/xinda/common/core/domain/entity/SysRole.java create mode 100644 xinda-common/src/main/java/com/xinda/common/core/domain/entity/SysTranslate.java create mode 100644 xinda-common/src/main/java/com/xinda/common/core/domain/entity/SysUser.java create mode 100644 xinda-common/src/main/java/com/xinda/common/core/domain/model/BindLoginBody.java create mode 100644 xinda-common/src/main/java/com/xinda/common/core/domain/model/BindRegisterBody.java create mode 100644 xinda-common/src/main/java/com/xinda/common/core/domain/model/LoginBody.java create mode 100644 xinda-common/src/main/java/com/xinda/common/core/domain/model/LoginUser.java create mode 100644 xinda-common/src/main/java/com/xinda/common/core/domain/model/RegisterBody.java create mode 100644 xinda-common/src/main/java/com/xinda/common/core/iot/response/DashDeviceTotalDto.java create mode 100644 xinda-common/src/main/java/com/xinda/common/core/iot/response/DeCodeBo.java create mode 100644 xinda-common/src/main/java/com/xinda/common/core/iot/response/IdentityAndName.java create mode 100644 xinda-common/src/main/java/com/xinda/common/core/mq/DeviceReplyBo.java create mode 100644 xinda-common/src/main/java/com/xinda/common/core/mq/DeviceReport.java create mode 100644 xinda-common/src/main/java/com/xinda/common/core/mq/DeviceReportBo.java create mode 100644 xinda-common/src/main/java/com/xinda/common/core/mq/DeviceStatusBo.java create mode 100644 xinda-common/src/main/java/com/xinda/common/core/mq/DeviceTestReportBo.java create mode 100644 xinda-common/src/main/java/com/xinda/common/core/mq/InvokeReqDto.java create mode 100644 xinda-common/src/main/java/com/xinda/common/core/mq/MQSendMessageBo.java create mode 100644 xinda-common/src/main/java/com/xinda/common/core/mq/MessageReplyBo.java create mode 100644 xinda-common/src/main/java/com/xinda/common/core/mq/SubDeviceBo.java create mode 100644 xinda-common/src/main/java/com/xinda/common/core/mq/message/DeviceData.java create mode 100644 xinda-common/src/main/java/com/xinda/common/core/mq/message/DeviceDownMessage.java create mode 100644 xinda-common/src/main/java/com/xinda/common/core/mq/message/DeviceFunctionMessage.java create mode 100644 xinda-common/src/main/java/com/xinda/common/core/mq/message/DeviceMessage.java create mode 100644 xinda-common/src/main/java/com/xinda/common/core/mq/message/FunctionCallBackBo.java create mode 100644 xinda-common/src/main/java/com/xinda/common/core/mq/message/InstructionsMessage.java create mode 100644 xinda-common/src/main/java/com/xinda/common/core/mq/message/ModbusPollMsg.java create mode 100644 xinda-common/src/main/java/com/xinda/common/core/mq/message/MqttBo.java create mode 100644 xinda-common/src/main/java/com/xinda/common/core/mq/message/PropRead.java create mode 100644 xinda-common/src/main/java/com/xinda/common/core/mq/message/ProtocolDto.java create mode 100644 xinda-common/src/main/java/com/xinda/common/core/mq/message/SubDeviceMessage.java create mode 100644 xinda-common/src/main/java/com/xinda/common/core/mq/ota/OtaReplyMessage.java create mode 100644 xinda-common/src/main/java/com/xinda/common/core/mq/ota/OtaUpgradeBo.java create mode 100644 xinda-common/src/main/java/com/xinda/common/core/mq/ota/OtaUpgradeDelayTask.java create mode 100644 xinda-common/src/main/java/com/xinda/common/core/notify/AlertPushParams.java create mode 100644 xinda-common/src/main/java/com/xinda/common/core/notify/AppGeTuiParams.java create mode 100644 xinda-common/src/main/java/com/xinda/common/core/notify/EnterpriseWeChatAPPParams.java create mode 100644 xinda-common/src/main/java/com/xinda/common/core/notify/NotifyConfigVO.java create mode 100644 xinda-common/src/main/java/com/xinda/common/core/notify/NotifySendResponse.java create mode 100644 xinda-common/src/main/java/com/xinda/common/core/notify/WeChatServerParams.java create mode 100644 xinda-common/src/main/java/com/xinda/common/core/notify/alertPush/AlertPushItem.java create mode 100644 xinda-common/src/main/java/com/xinda/common/core/notify/alertPush/PushMsg.java create mode 100644 xinda-common/src/main/java/com/xinda/common/core/notify/config/DingTalkConfigParams.java create mode 100644 xinda-common/src/main/java/com/xinda/common/core/notify/config/EmailConfigParams.java create mode 100644 xinda-common/src/main/java/com/xinda/common/core/notify/config/VoiceConfigParams.java create mode 100644 xinda-common/src/main/java/com/xinda/common/core/notify/config/WeChatConfigParams.java create mode 100644 xinda-common/src/main/java/com/xinda/common/core/notify/msg/DingTalkMsgParams.java create mode 100644 xinda-common/src/main/java/com/xinda/common/core/notify/msg/EmailMsgParams.java create mode 100644 xinda-common/src/main/java/com/xinda/common/core/notify/msg/VoiceMsgParams.java create mode 100644 xinda-common/src/main/java/com/xinda/common/core/notify/msg/WeComMsgParams.java create mode 100644 xinda-common/src/main/java/com/xinda/common/core/notify/msg/WechatMsgParams.java create mode 100644 xinda-common/src/main/java/com/xinda/common/core/page/PageDomain.java create mode 100644 xinda-common/src/main/java/com/xinda/common/core/page/TableDataExtendInfo.java create mode 100644 xinda-common/src/main/java/com/xinda/common/core/page/TableDataInfo.java create mode 100644 xinda-common/src/main/java/com/xinda/common/core/page/TableSupport.java create mode 100644 xinda-common/src/main/java/com/xinda/common/core/protocol/Message.java create mode 100644 xinda-common/src/main/java/com/xinda/common/core/protocol/modbus/ModbusCode.java create mode 100644 xinda-common/src/main/java/com/xinda/common/core/redis/RedisCache.java create mode 100644 xinda-common/src/main/java/com/xinda/common/core/redis/RedisKeyBuilder.java create mode 100644 xinda-common/src/main/java/com/xinda/common/core/redis/RedisKeyDefine.java create mode 100644 xinda-common/src/main/java/com/xinda/common/core/redis/RedisKeyRegistry.java create mode 100644 xinda-common/src/main/java/com/xinda/common/core/text/CharsetKit.java create mode 100644 xinda-common/src/main/java/com/xinda/common/core/text/Convert.java create mode 100644 xinda-common/src/main/java/com/xinda/common/core/text/IntArrayValuable.java create mode 100644 xinda-common/src/main/java/com/xinda/common/core/text/KeyValue.java create mode 100644 xinda-common/src/main/java/com/xinda/common/core/text/StrFormatter.java create mode 100644 xinda-common/src/main/java/com/xinda/common/core/thingsModel/NeuronModel.java create mode 100644 xinda-common/src/main/java/com/xinda/common/core/thingsModel/SceneThingsModelItem.java create mode 100644 xinda-common/src/main/java/com/xinda/common/core/thingsModel/ThingsModelRuleItem.java create mode 100644 xinda-common/src/main/java/com/xinda/common/core/thingsModel/ThingsModelSimpleItem.java create mode 100644 xinda-common/src/main/java/com/xinda/common/core/thingsModel/ThingsModelValuesInput.java create mode 100644 xinda-common/src/main/java/com/xinda/common/enums/BusinessStatus.java create mode 100644 xinda-common/src/main/java/com/xinda/common/enums/BusinessType.java create mode 100644 xinda-common/src/main/java/com/xinda/common/enums/CommonStatusEnum.java create mode 100644 xinda-common/src/main/java/com/xinda/common/enums/DataEnum.java create mode 100644 xinda-common/src/main/java/com/xinda/common/enums/DataSourceType.java create mode 100644 xinda-common/src/main/java/com/xinda/common/enums/DeviceDistributeTypeEnum.java create mode 100644 xinda-common/src/main/java/com/xinda/common/enums/DeviceLogTypeEnum.java create mode 100644 xinda-common/src/main/java/com/xinda/common/enums/DeviceRecordTypeEnum.java create mode 100644 xinda-common/src/main/java/com/xinda/common/enums/DeviceStatus.java create mode 100644 xinda-common/src/main/java/com/xinda/common/enums/ExceptionCode.java create mode 100644 xinda-common/src/main/java/com/xinda/common/enums/FunctionReplyStatus.java create mode 100644 xinda-common/src/main/java/com/xinda/common/enums/GlobalErrorCodeConstants.java create mode 100644 xinda-common/src/main/java/com/xinda/common/enums/HttpMethod.java create mode 100644 xinda-common/src/main/java/com/xinda/common/enums/IErrorCode.java create mode 100644 xinda-common/src/main/java/com/xinda/common/enums/JobType.java create mode 100644 xinda-common/src/main/java/com/xinda/common/enums/LimitType.java create mode 100644 xinda-common/src/main/java/com/xinda/common/enums/ModbusDataType.java create mode 100644 xinda-common/src/main/java/com/xinda/common/enums/NotifyChannelEnum.java create mode 100644 xinda-common/src/main/java/com/xinda/common/enums/NotifyChannelProviderEnum.java create mode 100644 xinda-common/src/main/java/com/xinda/common/enums/NotifyServiceCodeEnum.java create mode 100644 xinda-common/src/main/java/com/xinda/common/enums/OTAUpgrade.java create mode 100644 xinda-common/src/main/java/com/xinda/common/enums/OperatorType.java create mode 100644 xinda-common/src/main/java/com/xinda/common/enums/PushType.java create mode 100644 xinda-common/src/main/java/com/xinda/common/enums/ResultCode.java create mode 100644 xinda-common/src/main/java/com/xinda/common/enums/ServerType.java create mode 100644 xinda-common/src/main/java/com/xinda/common/enums/SocialPlatformType.java create mode 100644 xinda-common/src/main/java/com/xinda/common/enums/StatusEnum.java create mode 100644 xinda-common/src/main/java/com/xinda/common/enums/ThingsModelType.java create mode 100644 xinda-common/src/main/java/com/xinda/common/enums/TopicType.java create mode 100644 xinda-common/src/main/java/com/xinda/common/enums/TranslateType.java create mode 100644 xinda-common/src/main/java/com/xinda/common/enums/UserStatus.java create mode 100644 xinda-common/src/main/java/com/xinda/common/enums/VerifyTypeEnum.java create mode 100644 xinda-common/src/main/java/com/xinda/common/enums/scenemodel/SceneModelTagOpreationEnum.java create mode 100644 xinda-common/src/main/java/com/xinda/common/enums/scenemodel/SceneModelVariableTypeEnum.java create mode 100644 xinda-common/src/main/java/com/xinda/common/exception/DemoModeException.java create mode 100644 xinda-common/src/main/java/com/xinda/common/exception/ErrorCode.java create mode 100644 xinda-common/src/main/java/com/xinda/common/exception/GlobalException.java create mode 100644 xinda-common/src/main/java/com/xinda/common/exception/ServerException.java create mode 100644 xinda-common/src/main/java/com/xinda/common/exception/ServiceException.java create mode 100644 xinda-common/src/main/java/com/xinda/common/exception/ServiceExceptionUtil.java create mode 100644 xinda-common/src/main/java/com/xinda/common/exception/UtilException.java create mode 100644 xinda-common/src/main/java/com/xinda/common/exception/base/BaseException.java create mode 100644 xinda-common/src/main/java/com/xinda/common/exception/file/FileException.java create mode 100644 xinda-common/src/main/java/com/xinda/common/exception/file/FileNameLengthLimitExceededException.java create mode 100644 xinda-common/src/main/java/com/xinda/common/exception/file/FileSizeLimitExceededException.java create mode 100644 xinda-common/src/main/java/com/xinda/common/exception/file/InvalidExtensionException.java create mode 100644 xinda-common/src/main/java/com/xinda/common/exception/iot/MqttAuthorizationException.java create mode 100644 xinda-common/src/main/java/com/xinda/common/exception/iot/MqttClientUserNameOrPassException.java create mode 100644 xinda-common/src/main/java/com/xinda/common/exception/job/TaskException.java create mode 100644 xinda-common/src/main/java/com/xinda/common/exception/user/CaptchaException.java create mode 100644 xinda-common/src/main/java/com/xinda/common/exception/user/CaptchaExpireException.java create mode 100644 xinda-common/src/main/java/com/xinda/common/exception/user/UserException.java create mode 100644 xinda-common/src/main/java/com/xinda/common/exception/user/UserPasswordNotMatchException.java create mode 100644 xinda-common/src/main/java/com/xinda/common/exception/user/UserPasswordRetryLimitExceedException.java create mode 100644 xinda-common/src/main/java/com/xinda/common/filter/PropertyPreExcludeFilter.java create mode 100644 xinda-common/src/main/java/com/xinda/common/filter/RepeatableFilter.java create mode 100644 xinda-common/src/main/java/com/xinda/common/filter/RepeatedlyRequestWrapper.java create mode 100644 xinda-common/src/main/java/com/xinda/common/filter/XssFilter.java create mode 100644 xinda-common/src/main/java/com/xinda/common/filter/XssHttpServletRequestWrapper.java create mode 100644 xinda-common/src/main/java/com/xinda/common/utils/Arith.java create mode 100644 xinda-common/src/main/java/com/xinda/common/utils/Base64ToMultipartFile.java create mode 100644 xinda-common/src/main/java/com/xinda/common/utils/BeanMapUtilByReflect.java create mode 100644 xinda-common/src/main/java/com/xinda/common/utils/BitUtils.java create mode 100644 xinda-common/src/main/java/com/xinda/common/utils/CaculateUtils.java create mode 100644 xinda-common/src/main/java/com/xinda/common/utils/CaculateVariableAndNumberUtils.java create mode 100644 xinda-common/src/main/java/com/xinda/common/utils/DateUtils.java create mode 100644 xinda-common/src/main/java/com/xinda/common/utils/DictUtils.java create mode 100644 xinda-common/src/main/java/com/xinda/common/utils/DigestUtils.java create mode 100644 xinda-common/src/main/java/com/xinda/common/utils/EmqxUtils.java create mode 100644 xinda-common/src/main/java/com/xinda/common/utils/EncodeUtils.java create mode 100644 xinda-common/src/main/java/com/xinda/common/utils/ExceptionUtil.java create mode 100644 xinda-common/src/main/java/com/xinda/common/utils/ExceptionUtils.java create mode 100644 xinda-common/src/main/java/com/xinda/common/utils/LogUtils.java create mode 100644 xinda-common/src/main/java/com/xinda/common/utils/MapUtils.java create mode 100644 xinda-common/src/main/java/com/xinda/common/utils/Md5Utils.java create mode 100644 xinda-common/src/main/java/com/xinda/common/utils/MessageUtils.java create mode 100644 xinda-common/src/main/java/com/xinda/common/utils/PageUtils.java create mode 100644 xinda-common/src/main/java/com/xinda/common/utils/SecurityUtils.java create mode 100644 xinda-common/src/main/java/com/xinda/common/utils/ServletUtils.java create mode 100644 xinda-common/src/main/java/com/xinda/common/utils/StringUtils.java create mode 100644 xinda-common/src/main/java/com/xinda/common/utils/Threads.java create mode 100644 xinda-common/src/main/java/com/xinda/common/utils/ValidationUtils.java create mode 100644 xinda-common/src/main/java/com/xinda/common/utils/VerifyCodeUtils.java create mode 100644 xinda-common/src/main/java/com/xinda/common/utils/bean/BeanUtils.java create mode 100644 xinda-common/src/main/java/com/xinda/common/utils/bean/BeanValidators.java create mode 100644 xinda-common/src/main/java/com/xinda/common/utils/collection/CollectionUtils.java create mode 100644 xinda-common/src/main/java/com/xinda/common/utils/date/DateUtils.java create mode 100644 xinda-common/src/main/java/com/xinda/common/utils/date/LocalDateTimeUtils.java create mode 100644 xinda-common/src/main/java/com/xinda/common/utils/file/FileTypeUtils.java create mode 100644 xinda-common/src/main/java/com/xinda/common/utils/file/FileUploadUtils.java create mode 100644 xinda-common/src/main/java/com/xinda/common/utils/file/FileUtils.java create mode 100644 xinda-common/src/main/java/com/xinda/common/utils/file/ImageUtils.java create mode 100644 xinda-common/src/main/java/com/xinda/common/utils/file/MimeTypeUtils.java create mode 100644 xinda-common/src/main/java/com/xinda/common/utils/gateway/CRC16Utils.java create mode 100644 xinda-common/src/main/java/com/xinda/common/utils/gateway/CRC8Utils.java create mode 100644 xinda-common/src/main/java/com/xinda/common/utils/gateway/mq/Topics.java create mode 100644 xinda-common/src/main/java/com/xinda/common/utils/gateway/mq/TopicsPost.java create mode 100644 xinda-common/src/main/java/com/xinda/common/utils/gateway/mq/TopicsUtils.java create mode 100644 xinda-common/src/main/java/com/xinda/common/utils/gateway/protocol/ByteUtils.java create mode 100644 xinda-common/src/main/java/com/xinda/common/utils/gateway/protocol/NettyUtils.java create mode 100644 xinda-common/src/main/java/com/xinda/common/utils/html/EscapeUtil.java create mode 100644 xinda-common/src/main/java/com/xinda/common/utils/html/HTMLFilter.java create mode 100644 xinda-common/src/main/java/com/xinda/common/utils/http/HttpHelper.java create mode 100644 xinda-common/src/main/java/com/xinda/common/utils/http/HttpUtils.java create mode 100644 xinda-common/src/main/java/com/xinda/common/utils/ip/AddressUtils.java create mode 100644 xinda-common/src/main/java/com/xinda/common/utils/ip/IpUtils.java create mode 100644 xinda-common/src/main/java/com/xinda/common/utils/json/JsonUtils.java create mode 100644 xinda-common/src/main/java/com/xinda/common/utils/modbus/BitUtils.java create mode 100644 xinda-common/src/main/java/com/xinda/common/utils/modbus/ModbusUtils.java create mode 100644 xinda-common/src/main/java/com/xinda/common/utils/modbus/Mparams.java create mode 100644 xinda-common/src/main/java/com/xinda/common/utils/object/ObjectUtils.java create mode 100644 xinda-common/src/main/java/com/xinda/common/utils/poi/ExcelHandlerAdapter.java create mode 100644 xinda-common/src/main/java/com/xinda/common/utils/poi/ExcelUtil.java create mode 100644 xinda-common/src/main/java/com/xinda/common/utils/reflect/ReflectUtils.java create mode 100644 xinda-common/src/main/java/com/xinda/common/utils/sign/Base64.java create mode 100644 xinda-common/src/main/java/com/xinda/common/utils/sign/Md5Utils.java create mode 100644 xinda-common/src/main/java/com/xinda/common/utils/sign/SignUtils.java create mode 100644 xinda-common/src/main/java/com/xinda/common/utils/spring/SpringUtils.java create mode 100644 xinda-common/src/main/java/com/xinda/common/utils/sql/SqlUtil.java create mode 100644 xinda-common/src/main/java/com/xinda/common/utils/uuid/IdUtils.java create mode 100644 xinda-common/src/main/java/com/xinda/common/utils/uuid/Seq.java create mode 100644 xinda-common/src/main/java/com/xinda/common/utils/uuid/UUID.java create mode 100644 xinda-common/src/main/java/com/xinda/common/utils/wechat/AesException.java create mode 100644 xinda-common/src/main/java/com/xinda/common/utils/wechat/ByteGroup.java create mode 100644 xinda-common/src/main/java/com/xinda/common/utils/wechat/PKCS7Encoder.java create mode 100644 xinda-common/src/main/java/com/xinda/common/utils/wechat/SHA1.java create mode 100644 xinda-common/src/main/java/com/xinda/common/utils/wechat/WXBizMsgCrypt.java create mode 100644 xinda-common/src/main/java/com/xinda/common/utils/wechat/WechatUtils.java create mode 100644 xinda-common/src/main/java/com/xinda/common/utils/wechat/XMLParse.java create mode 100644 xinda-common/src/main/java/com/xinda/common/wechat/WeChatAppResult.java create mode 100644 xinda-common/src/main/java/com/xinda/common/wechat/WeChatLoginBody.java create mode 100644 xinda-common/src/main/java/com/xinda/common/wechat/WeChatLoginResult.java create mode 100644 xinda-common/src/main/java/com/xinda/common/wechat/WeChatMiniProgramResult.java create mode 100644 xinda-common/src/main/java/com/xinda/common/wechat/WeChatPhoneInfo.java create mode 100644 xinda-common/src/main/java/com/xinda/common/wechat/WeChatUserInfo.java create mode 100644 xinda-common/src/main/java/com/xinda/common/wechat/WxCallBackXmlBO.java create mode 100644 xinda-common/src/main/java/com/xinda/common/xss/Xss.java create mode 100644 xinda-common/src/main/java/com/xinda/common/xss/XssValidator.java create mode 100644 xinda-framework/pom.xml create mode 100644 xinda-framework/src/main/java/com/xinda/framework/aspectj/DataScopeAspect.java create mode 100644 xinda-framework/src/main/java/com/xinda/framework/aspectj/DataSourceAspect.java create mode 100644 xinda-framework/src/main/java/com/xinda/framework/aspectj/LogAspect.java create mode 100644 xinda-framework/src/main/java/com/xinda/framework/aspectj/RateLimiterAspect.java create mode 100644 xinda-framework/src/main/java/com/xinda/framework/config/ApplicationConfig.java create mode 100644 xinda-framework/src/main/java/com/xinda/framework/config/CacheConfig.java create mode 100644 xinda-framework/src/main/java/com/xinda/framework/config/CaptchaConfig.java create mode 100644 xinda-framework/src/main/java/com/xinda/framework/config/DruidConfig.java create mode 100644 xinda-framework/src/main/java/com/xinda/framework/config/FastJson2JsonRedisSerializer.java create mode 100644 xinda-framework/src/main/java/com/xinda/framework/config/FilterConfig.java create mode 100644 xinda-framework/src/main/java/com/xinda/framework/config/KaptchaTextCreator.java create mode 100644 xinda-framework/src/main/java/com/xinda/framework/config/MyBatisConfig.java create mode 100644 xinda-framework/src/main/java/com/xinda/framework/config/RedisConfig.java create mode 100644 xinda-framework/src/main/java/com/xinda/framework/config/RedissonConfig.java create mode 100644 xinda-framework/src/main/java/com/xinda/framework/config/ResourcesConfig.java create mode 100644 xinda-framework/src/main/java/com/xinda/framework/config/SecurityConfig.java create mode 100644 xinda-framework/src/main/java/com/xinda/framework/config/ServerConfig.java create mode 100644 xinda-framework/src/main/java/com/xinda/framework/config/ThreadPoolConfig.java create mode 100644 xinda-framework/src/main/java/com/xinda/framework/config/properties/DruidProperties.java create mode 100644 xinda-framework/src/main/java/com/xinda/framework/config/properties/PermitAllUrlProperties.java create mode 100644 xinda-framework/src/main/java/com/xinda/framework/config/properties/RedissonProperties.java create mode 100644 xinda-framework/src/main/java/com/xinda/framework/datasource/DynamicDataSource.java create mode 100644 xinda-framework/src/main/java/com/xinda/framework/datasource/DynamicDataSourceContextHolder.java create mode 100644 xinda-framework/src/main/java/com/xinda/framework/handler/KeyPrefixHandler.java create mode 100644 xinda-framework/src/main/java/com/xinda/framework/interceptor/LanguageInterceptor.java create mode 100644 xinda-framework/src/main/java/com/xinda/framework/interceptor/RepeatSubmitInterceptor.java create mode 100644 xinda-framework/src/main/java/com/xinda/framework/interceptor/impl/SameUrlDataInterceptor.java create mode 100644 xinda-framework/src/main/java/com/xinda/framework/manager/AsyncManager.java create mode 100644 xinda-framework/src/main/java/com/xinda/framework/manager/CaffeineCacheDecorator.java create mode 100644 xinda-framework/src/main/java/com/xinda/framework/manager/ShutdownManager.java create mode 100644 xinda-framework/src/main/java/com/xinda/framework/manager/SpringCacheManager.java create mode 100644 xinda-framework/src/main/java/com/xinda/framework/manager/factory/AsyncFactory.java create mode 100644 xinda-framework/src/main/java/com/xinda/framework/mybatis/LambdaQueryWrapperX.java create mode 100644 xinda-framework/src/main/java/com/xinda/framework/mybatis/QueryWrapperX.java create mode 100644 xinda-framework/src/main/java/com/xinda/framework/mybatis/mapper/BaseMapperX.java create mode 100644 xinda-framework/src/main/java/com/xinda/framework/mybatis/utils/MyBatisUtils.java create mode 100644 xinda-framework/src/main/java/com/xinda/framework/security/context/AuthenticationContextHolder.java create mode 100644 xinda-framework/src/main/java/com/xinda/framework/security/context/PermissionContextHolder.java create mode 100644 xinda-framework/src/main/java/com/xinda/framework/security/filter/JwtAuthenticationTokenFilter.java create mode 100644 xinda-framework/src/main/java/com/xinda/framework/security/handle/AuthenticationEntryPointImpl.java create mode 100644 xinda-framework/src/main/java/com/xinda/framework/security/handle/LogoutSuccessHandlerImpl.java create mode 100644 xinda-framework/src/main/java/com/xinda/framework/utils/CacheUtils.java create mode 100644 xinda-framework/src/main/java/com/xinda/framework/utils/QueueUtils.java create mode 100644 xinda-framework/src/main/java/com/xinda/framework/utils/RedisUtils.java create mode 100644 xinda-framework/src/main/java/com/xinda/framework/web/domain/Server.java create mode 100644 xinda-framework/src/main/java/com/xinda/framework/web/domain/server/Cpu.java create mode 100644 xinda-framework/src/main/java/com/xinda/framework/web/domain/server/Jvm.java create mode 100644 xinda-framework/src/main/java/com/xinda/framework/web/domain/server/Mem.java create mode 100644 xinda-framework/src/main/java/com/xinda/framework/web/domain/server/Sys.java create mode 100644 xinda-framework/src/main/java/com/xinda/framework/web/domain/server/SysFile.java create mode 100644 xinda-framework/src/main/java/com/xinda/framework/web/exception/GlobalExceptionHandler.java create mode 100644 xinda-framework/src/main/java/com/xinda/framework/web/service/PermissionService.java create mode 100644 xinda-framework/src/main/java/com/xinda/framework/web/service/SysLoginService.java create mode 100644 xinda-framework/src/main/java/com/xinda/framework/web/service/SysPasswordService.java create mode 100644 xinda-framework/src/main/java/com/xinda/framework/web/service/SysPermissionService.java create mode 100644 xinda-framework/src/main/java/com/xinda/framework/web/service/SysRegisterService.java create mode 100644 xinda-framework/src/main/java/com/xinda/framework/web/service/TokenService.java create mode 100644 xinda-framework/src/main/java/com/xinda/framework/web/service/UserDetailsServiceImpl.java create mode 100644 xinda-gateway/gateway-boot/pom.xml create mode 100644 xinda-gateway/gateway-boot/src/main/java/com/xinda/gateway/boot/start/StartBoot.java create mode 100644 xinda-gateway/gateway-boot/src/main/java/com/xinda/gateway/boot/start/subscribeCallback.java create mode 100644 xinda-gateway/pom.xml create mode 100644 xinda-gateway/xinda-mq/pom.xml create mode 100644 xinda-gateway/xinda-mq/src/main/java/com/xinda/mq/config/MqConfig.java create mode 100644 xinda-gateway/xinda-mq/src/main/java/com/xinda/mq/model/ReportDataBo.java create mode 100644 xinda-gateway/xinda-mq/src/main/java/com/xinda/mq/redischannel/config/RedisConsumeConfig.java create mode 100644 xinda-gateway/xinda-mq/src/main/java/com/xinda/mq/redischannel/consumer/DeviceOtherMsgConsumer.java create mode 100644 xinda-gateway/xinda-mq/src/main/java/com/xinda/mq/redischannel/consumer/DevicePropFetchConsumer.java create mode 100644 xinda-gateway/xinda-mq/src/main/java/com/xinda/mq/redischannel/consumer/DeviceReplyMsgConsumer.java create mode 100644 xinda-gateway/xinda-mq/src/main/java/com/xinda/mq/redischannel/consumer/DeviceReportMsgConsumer.java create mode 100644 xinda-gateway/xinda-mq/src/main/java/com/xinda/mq/redischannel/consumer/DeviceStatusConsumer.java create mode 100644 xinda-gateway/xinda-mq/src/main/java/com/xinda/mq/redischannel/consumer/DeviceTestConsumer.java create mode 100644 xinda-gateway/xinda-mq/src/main/java/com/xinda/mq/redischannel/consumer/FunctionInvokeConsumer.java create mode 100644 xinda-gateway/xinda-mq/src/main/java/com/xinda/mq/redischannel/consumer/RedisChannelConsume.java create mode 100644 xinda-gateway/xinda-mq/src/main/java/com/xinda/mq/redischannel/listen/DeviceOtherListen.java create mode 100644 xinda-gateway/xinda-mq/src/main/java/com/xinda/mq/redischannel/listen/DevicePropFetchListen.java create mode 100644 xinda-gateway/xinda-mq/src/main/java/com/xinda/mq/redischannel/listen/DeviceReplyListen.java create mode 100644 xinda-gateway/xinda-mq/src/main/java/com/xinda/mq/redischannel/listen/DeviceReportListen.java create mode 100644 xinda-gateway/xinda-mq/src/main/java/com/xinda/mq/redischannel/listen/DeviceStatusListen.java create mode 100644 xinda-gateway/xinda-mq/src/main/java/com/xinda/mq/redischannel/listen/DeviceTestListen.java create mode 100644 xinda-gateway/xinda-mq/src/main/java/com/xinda/mq/redischannel/listen/FunctionInvokeListen.java create mode 100644 xinda-gateway/xinda-mq/src/main/java/com/xinda/mq/redischannel/listen/UpgradeListen.java create mode 100644 xinda-gateway/xinda-mq/src/main/java/com/xinda/mq/redischannel/producer/EmqxMessageProducer.java create mode 100644 xinda-gateway/xinda-mq/src/main/java/com/xinda/mq/redischannel/producer/MessageProducer.java create mode 100644 xinda-gateway/xinda-mq/src/main/java/com/xinda/mq/redischannel/queue/DeviceOtherQueue.java create mode 100644 xinda-gateway/xinda-mq/src/main/java/com/xinda/mq/redischannel/queue/DevicePropFetchQueue.java create mode 100644 xinda-gateway/xinda-mq/src/main/java/com/xinda/mq/redischannel/queue/DeviceReplyQueue.java create mode 100644 xinda-gateway/xinda-mq/src/main/java/com/xinda/mq/redischannel/queue/DeviceReportQueue.java create mode 100644 xinda-gateway/xinda-mq/src/main/java/com/xinda/mq/redischannel/queue/DeviceStatusQueue.java create mode 100644 xinda-gateway/xinda-mq/src/main/java/com/xinda/mq/redischannel/queue/DeviceTestQueue.java create mode 100644 xinda-gateway/xinda-mq/src/main/java/com/xinda/mq/redischannel/queue/FunctionInvokeQueue.java create mode 100644 xinda-gateway/xinda-mq/src/main/java/com/xinda/mq/redischannel/queue/OtaUpgradeQueue.java create mode 100644 xinda-gateway/xinda-mq/src/main/java/com/xinda/mq/redischannel/service/RedisPublishServiceImpl.java create mode 100644 xinda-gateway/xinda-mq/src/main/java/com/xinda/mq/rocketmq/consumer/ConsumerTopicConstant.java create mode 100644 xinda-gateway/xinda-mq/src/main/java/com/xinda/mq/rocketmq/listener/RocketDeviceStatusListener.java create mode 100644 xinda-gateway/xinda-mq/src/main/java/com/xinda/mq/rocketmq/listener/RocketFunctionInvokeListener.java create mode 100644 xinda-gateway/xinda-mq/src/main/java/com/xinda/mq/rocketmq/listener/RocketPropReadListener.java create mode 100644 xinda-gateway/xinda-mq/src/main/java/com/xinda/mq/rocketmq/listener/RocketPublishMsgListener.java create mode 100644 xinda-gateway/xinda-mq/src/main/java/com/xinda/mq/rocketmq/model/MQSendMessage.java create mode 100644 xinda-gateway/xinda-mq/src/main/java/com/xinda/mq/rocketmq/producer/RocketMqProducer.java create mode 100644 xinda-gateway/xinda-mq/src/main/java/com/xinda/mq/rocketmq/service/RocketMqPublishServiceImpl.java create mode 100644 xinda-gateway/xinda-mq/src/main/java/com/xinda/mq/ruleEngine/SceneContext.java create mode 100644 xinda-gateway/xinda-mq/src/main/java/com/xinda/mq/service/IDataHandler.java create mode 100644 xinda-gateway/xinda-mq/src/main/java/com/xinda/mq/service/IDeviceReportMessageService.java create mode 100644 xinda-gateway/xinda-mq/src/main/java/com/xinda/mq/service/IDeviceTestService.java create mode 100644 xinda-gateway/xinda-mq/src/main/java/com/xinda/mq/service/IFunctionInvoke.java create mode 100644 xinda-gateway/xinda-mq/src/main/java/com/xinda/mq/service/IMessagePublishService.java create mode 100644 xinda-gateway/xinda-mq/src/main/java/com/xinda/mq/service/IMqttMessagePublish.java create mode 100644 xinda-gateway/xinda-mq/src/main/java/com/xinda/mq/service/IRuleEngine.java create mode 100644 xinda-gateway/xinda-mq/src/main/java/com/xinda/mq/service/impl/DeviceOtherMsgHandler.java create mode 100644 xinda-gateway/xinda-mq/src/main/java/com/xinda/mq/service/impl/FunctionInvokeImpl.java create mode 100644 xinda-gateway/xinda-mq/src/main/java/com/xinda/mq/service/impl/MessageManager.java create mode 100644 xinda-gateway/xinda-mq/src/main/java/com/xinda/mq/service/impl/RuleEngineHandler.java create mode 100644 xinda-notify/pom.xml create mode 100644 xinda-notify/xinda-notify-core/pom.xml create mode 100644 xinda-notify/xinda-notify-core/src/main/java/com/xinda/notify/core/controller/NotifyController.java create mode 100644 xinda-notify/xinda-notify-core/src/main/java/com/xinda/notify/core/dingtalk/service/DingTalkService.java create mode 100644 xinda-notify/xinda-notify-core/src/main/java/com/xinda/notify/core/dingtalk/service/impl/DingTalkServiceImpl.java create mode 100644 xinda-notify/xinda-notify-core/src/main/java/com/xinda/notify/core/email/config/EmailNotifyConfig.java create mode 100644 xinda-notify/xinda-notify-core/src/main/java/com/xinda/notify/core/email/service/EmailService.java create mode 100644 xinda-notify/xinda-notify-core/src/main/java/com/xinda/notify/core/email/service/impl/EmailServiceImpl.java create mode 100644 xinda-notify/xinda-notify-core/src/main/java/com/xinda/notify/core/service/NotifySendService.java create mode 100644 xinda-notify/xinda-notify-core/src/main/java/com/xinda/notify/core/service/impl/NotifySendServiceImpl.java create mode 100644 xinda-notify/xinda-notify-core/src/main/java/com/xinda/notify/core/sms/config/ReadConfig.java create mode 100644 xinda-notify/xinda-notify-core/src/main/java/com/xinda/notify/core/sms/service/ISmsService.java create mode 100644 xinda-notify/xinda-notify-core/src/main/java/com/xinda/notify/core/sms/service/Impl/SmsServiceImpl.java create mode 100644 xinda-notify/xinda-notify-core/src/main/java/com/xinda/notify/core/vo/SendParams.java create mode 100644 xinda-notify/xinda-notify-core/src/main/java/com/xinda/notify/core/voice/config/VoiceConfig.java create mode 100644 xinda-notify/xinda-notify-core/src/main/java/com/xinda/notify/core/voice/service/VoiceService.java create mode 100644 xinda-notify/xinda-notify-core/src/main/java/com/xinda/notify/core/voice/service/impl/VoiceServiceImpl.java create mode 100644 xinda-notify/xinda-notify-core/src/main/java/com/xinda/notify/core/wechat/service/WeChatPushService.java create mode 100644 xinda-notify/xinda-notify-core/src/main/java/com/xinda/notify/core/wechat/service/impl/WeChatPushServiceImpl.java create mode 100644 xinda-notify/xinda-notify-core/src/main/java/com/xinda/notify/core/wechat/vo/TemplateDataVo.java create mode 100644 xinda-notify/xinda-notify-core/src/main/java/com/xinda/notify/core/wechat/vo/WeChatMiniPushVO.java create mode 100644 xinda-notify/xinda-notify-core/src/main/java/com/xinda/notify/core/wechat/vo/WeChatPublicAccountPushVO.java create mode 100644 xinda-notify/xinda-notify-core/src/main/java/com/xinda/notify/core/wechat/vo/WxMssVo.java create mode 100644 xinda-notify/xinda-notify-web/pom.xml create mode 100644 xinda-notify/xinda-notify-web/src/main/java/com/xinda/notify/controller/NotifyChannelController.java create mode 100644 xinda-notify/xinda-notify-web/src/main/java/com/xinda/notify/controller/NotifyLogController.java create mode 100644 xinda-notify/xinda-notify-web/src/main/java/com/xinda/notify/controller/NotifyTemplateController.java create mode 100644 xinda-notify/xinda-notify-web/src/main/java/com/xinda/notify/domain/NotifyChannel.java create mode 100644 xinda-notify/xinda-notify-web/src/main/java/com/xinda/notify/domain/NotifyLog.java create mode 100644 xinda-notify/xinda-notify-web/src/main/java/com/xinda/notify/domain/NotifyTemplate.java create mode 100644 xinda-notify/xinda-notify-web/src/main/java/com/xinda/notify/mapper/NotifyChannelMapper.java create mode 100644 xinda-notify/xinda-notify-web/src/main/java/com/xinda/notify/mapper/NotifyLogMapper.java create mode 100644 xinda-notify/xinda-notify-web/src/main/java/com/xinda/notify/mapper/NotifyTemplateMapper.java create mode 100644 xinda-notify/xinda-notify-web/src/main/java/com/xinda/notify/service/INotifyChannelService.java create mode 100644 xinda-notify/xinda-notify-web/src/main/java/com/xinda/notify/service/INotifyLogService.java create mode 100644 xinda-notify/xinda-notify-web/src/main/java/com/xinda/notify/service/INotifyTemplateService.java create mode 100644 xinda-notify/xinda-notify-web/src/main/java/com/xinda/notify/service/impl/NotifyChannelServiceImpl.java create mode 100644 xinda-notify/xinda-notify-web/src/main/java/com/xinda/notify/service/impl/NotifyLogServiceImpl.java create mode 100644 xinda-notify/xinda-notify-web/src/main/java/com/xinda/notify/service/impl/NotifyTemplateServiceImpl.java create mode 100644 xinda-notify/xinda-notify-web/src/main/java/com/xinda/notify/vo/ChannelProviderVO.java create mode 100644 xinda-notify/xinda-notify-web/src/main/java/com/xinda/notify/vo/NotifyVO.java create mode 100644 xinda-notify/xinda-notify-web/src/main/resources/mapper/NotifyChannelMapper.xml create mode 100644 xinda-notify/xinda-notify-web/src/main/resources/mapper/NotifyLogMapper.xml create mode 100644 xinda-notify/xinda-notify-web/src/main/resources/mapper/NotifyTemplateMapper.xml create mode 100644 xinda-open-api/pom.xml create mode 100644 xinda-open-api/src/main/java/com/xinda/data/config/DelayUpgradeQueue.java create mode 100644 xinda-open-api/src/main/java/com/xinda/data/config/TaskConfig.java create mode 100644 xinda-open-api/src/main/java/com/xinda/data/config/UpGradeListener.java create mode 100644 xinda-open-api/src/main/java/com/xinda/data/controller/AlertController.java create mode 100644 xinda-open-api/src/main/java/com/xinda/data/controller/AlertLogController.java create mode 100644 xinda-open-api/src/main/java/com/xinda/data/controller/AuthResourceController.java create mode 100644 xinda-open-api/src/main/java/com/xinda/data/controller/BridgeController.java create mode 100644 xinda-open-api/src/main/java/com/xinda/data/controller/CategoryController.java create mode 100644 xinda-open-api/src/main/java/com/xinda/data/controller/CommandPreferencesController.java create mode 100644 xinda-open-api/src/main/java/com/xinda/data/controller/DeviceAlertUserController.java create mode 100644 xinda-open-api/src/main/java/com/xinda/data/controller/DeviceController.java create mode 100644 xinda-open-api/src/main/java/com/xinda/data/controller/DeviceJobController.java create mode 100644 xinda-open-api/src/main/java/com/xinda/data/controller/DeviceLogController.java create mode 100644 xinda-open-api/src/main/java/com/xinda/data/controller/DeviceMessageController.java create mode 100644 xinda-open-api/src/main/java/com/xinda/data/controller/DeviceModelController.java create mode 100644 xinda-open-api/src/main/java/com/xinda/data/controller/DeviceRecordController.java create mode 100644 xinda-open-api/src/main/java/com/xinda/data/controller/DeviceShareController.java create mode 100644 xinda-open-api/src/main/java/com/xinda/data/controller/DeviceUserController.java create mode 100644 xinda-open-api/src/main/java/com/xinda/data/controller/EventLogController.java create mode 100644 xinda-open-api/src/main/java/com/xinda/data/controller/FunctionLogController.java create mode 100644 xinda-open-api/src/main/java/com/xinda/data/controller/GoviewProjectController.java create mode 100644 xinda-open-api/src/main/java/com/xinda/data/controller/GoviewProjectDataController.java create mode 100644 xinda-open-api/src/main/java/com/xinda/data/controller/GroupController.java create mode 100644 xinda-open-api/src/main/java/com/xinda/data/controller/HttpBridgeController.java create mode 100644 xinda-open-api/src/main/java/com/xinda/data/controller/NewsCategoryController.java create mode 100644 xinda-open-api/src/main/java/com/xinda/data/controller/NewsController.java create mode 100644 xinda-open-api/src/main/java/com/xinda/data/controller/OrderControlController.java create mode 100644 xinda-open-api/src/main/java/com/xinda/data/controller/ProductAuthorizeController.java create mode 100644 xinda-open-api/src/main/java/com/xinda/data/controller/ProductController.java create mode 100644 xinda-open-api/src/main/java/com/xinda/data/controller/SceneController.java create mode 100644 xinda-open-api/src/main/java/com/xinda/data/controller/ScriptController.java create mode 100644 xinda-open-api/src/main/java/com/xinda/data/controller/SimulateLogController.java create mode 100644 xinda-open-api/src/main/java/com/xinda/data/controller/SipRelationController.java create mode 100644 xinda-open-api/src/main/java/com/xinda/data/controller/SocialLoginController.java create mode 100644 xinda-open-api/src/main/java/com/xinda/data/controller/SocialPlatformController.java create mode 100644 xinda-open-api/src/main/java/com/xinda/data/controller/TestRuleController.java create mode 100644 xinda-open-api/src/main/java/com/xinda/data/controller/ThingsModelController.java create mode 100644 xinda-open-api/src/main/java/com/xinda/data/controller/ThingsModelTemplateController.java create mode 100644 xinda-open-api/src/main/java/com/xinda/data/controller/ToolController.java create mode 100644 xinda-open-api/src/main/java/com/xinda/data/controller/UserSocialController.java create mode 100644 xinda-open-api/src/main/java/com/xinda/data/controller/dashBoard/DashBoardController.java create mode 100644 xinda-open-api/src/main/java/com/xinda/data/controller/datacenter/DataCenterController.java create mode 100644 xinda-open-api/src/main/java/com/xinda/data/controller/firmware/FirmwareController.java create mode 100644 xinda-open-api/src/main/java/com/xinda/data/controller/firmware/FirmwareTaskController.java create mode 100644 xinda-open-api/src/main/java/com/xinda/data/controller/firmware/ViewConfigController.java create mode 100644 xinda-open-api/src/main/java/com/xinda/data/controller/gateway/SubGatewayController.java create mode 100644 xinda-open-api/src/main/java/com/xinda/data/controller/media/MediaServerController.java create mode 100644 xinda-open-api/src/main/java/com/xinda/data/controller/media/PlayerController.java create mode 100644 xinda-open-api/src/main/java/com/xinda/data/controller/media/PtzController.java create mode 100644 xinda-open-api/src/main/java/com/xinda/data/controller/media/RecordController.java create mode 100644 xinda-open-api/src/main/java/com/xinda/data/controller/media/SipConfigController.java create mode 100644 xinda-open-api/src/main/java/com/xinda/data/controller/media/SipDeviceChannelController.java create mode 100644 xinda-open-api/src/main/java/com/xinda/data/controller/media/SipDeviceController.java create mode 100644 xinda-open-api/src/main/java/com/xinda/data/controller/media/ZmlHookController.java create mode 100644 xinda-open-api/src/main/java/com/xinda/data/controller/modbus/ModbusConfigController.java create mode 100644 xinda-open-api/src/main/java/com/xinda/data/controller/modbus/ModbusJobController.java create mode 100644 xinda-open-api/src/main/java/com/xinda/data/controller/modbus/ModbusParamsController.java create mode 100644 xinda-open-api/src/main/java/com/xinda/data/controller/netty/NettyManagerController.java create mode 100644 xinda-open-api/src/main/java/com/xinda/data/controller/protocol/ProtocolController.java create mode 100644 xinda-open-api/src/main/java/com/xinda/data/controller/runtime/DeviceRuntimeController.java create mode 100644 xinda-open-api/src/main/java/com/xinda/data/controller/sceneModel/SceneModelController.java create mode 100644 xinda-open-api/src/main/java/com/xinda/data/controller/sceneModel/SceneModelDataController.java create mode 100644 xinda-open-api/src/main/java/com/xinda/data/controller/sceneModel/SceneModelDeviceController.java create mode 100644 xinda-open-api/src/main/java/com/xinda/data/controller/sceneModel/SceneModelTagController.java create mode 100644 xinda-open-api/src/main/java/com/xinda/data/controller/translate/AppLanguageController.java create mode 100644 xinda-open-api/src/main/java/com/xinda/data/controller/translate/AppPreferencesController.java create mode 100644 xinda-open-api/src/main/java/com/xinda/data/controller/wechat/WeChatController.java create mode 100644 xinda-open-api/src/main/java/com/xinda/data/quartz/AbstractQuartzJob.java create mode 100644 xinda-open-api/src/main/java/com/xinda/data/quartz/CronUtils.java create mode 100644 xinda-open-api/src/main/java/com/xinda/data/quartz/JobInvokeUtil.java create mode 100644 xinda-open-api/src/main/java/com/xinda/data/quartz/QuartzDisallowConcurrentExecution.java create mode 100644 xinda-open-api/src/main/java/com/xinda/data/quartz/QuartzJobExecution.java create mode 100644 xinda-open-api/src/main/java/com/xinda/data/quartz/ScheduleUtils.java create mode 100644 xinda-open-api/src/main/java/com/xinda/data/service/IDeviceMessageService.java create mode 100644 xinda-open-api/src/main/java/com/xinda/data/service/IOtaUpgradeService.java create mode 100644 xinda-open-api/src/main/java/com/xinda/data/service/SyncDeviceStatusJob.java create mode 100644 xinda-open-api/src/main/java/com/xinda/data/service/impl/DeviceJob.java create mode 100644 xinda-open-api/src/main/java/com/xinda/data/service/impl/DeviceJobServiceImpl.java create mode 100644 xinda-open-api/src/main/java/com/xinda/data/service/impl/DeviceMessageServiceImpl.java create mode 100644 xinda-open-api/src/main/java/com/xinda/data/service/impl/OtaUpgradeServiceImpl.java create mode 100644 xinda-pay/pom.xml create mode 100644 xinda-pay/xinda-pay-api/pom.xml create mode 100644 xinda-pay/xinda-pay-api/src/main/java/com/xinda/pay/api/api/notify/dto/PayOrderNotifyReqDTO.java create mode 100644 xinda-pay/xinda-pay-api/src/main/java/com/xinda/pay/api/api/notify/dto/PayRefundNotifyReqDTO.java create mode 100644 xinda-pay/xinda-pay-api/src/main/java/com/xinda/pay/api/api/notify/package-info.java create mode 100644 xinda-pay/xinda-pay-api/src/main/java/com/xinda/pay/api/api/order/PayOrderApi.java create mode 100644 xinda-pay/xinda-pay-api/src/main/java/com/xinda/pay/api/api/order/dto/PayOrderCreateReqDTO.java create mode 100644 xinda-pay/xinda-pay-api/src/main/java/com/xinda/pay/api/api/order/dto/PayOrderRespDTO.java create mode 100644 xinda-pay/xinda-pay-api/src/main/java/com/xinda/pay/api/api/refund/PayRefundApi.java create mode 100644 xinda-pay/xinda-pay-api/src/main/java/com/xinda/pay/api/api/refund/dto/PayRefundCreateReqDTO.java create mode 100644 xinda-pay/xinda-pay-api/src/main/java/com/xinda/pay/api/api/refund/dto/PayRefundRespDTO.java create mode 100644 xinda-pay/xinda-pay-api/src/main/java/com/xinda/pay/api/enums/DictTypeConstants.java create mode 100644 xinda-pay/xinda-pay-api/src/main/java/com/xinda/pay/api/enums/ErrorCodeConstants.java create mode 100644 xinda-pay/xinda-pay-api/src/main/java/com/xinda/pay/api/enums/member/WalletOperateTypeEnum.java create mode 100644 xinda-pay/xinda-pay-api/src/main/java/com/xinda/pay/api/enums/member/WalletTransactionGategoryEnum.java create mode 100644 xinda-pay/xinda-pay-api/src/main/java/com/xinda/pay/api/enums/notify/PayNotifyStatusEnum.java create mode 100644 xinda-pay/xinda-pay-api/src/main/java/com/xinda/pay/api/enums/notify/PayNotifyTypeEnum.java create mode 100644 xinda-pay/xinda-pay-api/src/main/java/com/xinda/pay/api/enums/order/PayOrderStatusEnum.java create mode 100644 xinda-pay/xinda-pay-api/src/main/java/com/xinda/pay/api/enums/refund/PayRefundStatusEnum.java create mode 100644 xinda-pay/xinda-pay-core/pom.xml create mode 100644 xinda-pay/xinda-pay-core/src/main/java/com/xinda/pay/core/api/order/PayOrderApiImpl.java create mode 100644 xinda-pay/xinda-pay-core/src/main/java/com/xinda/pay/core/api/refund/PayRefundApiImpl.java create mode 100644 xinda-pay/xinda-pay-core/src/main/java/com/xinda/pay/core/controller/admin/app/PayAppController.java create mode 100644 xinda-pay/xinda-pay-core/src/main/java/com/xinda/pay/core/controller/admin/app/vo/PayAppBaseVO.java create mode 100644 xinda-pay/xinda-pay-core/src/main/java/com/xinda/pay/core/controller/admin/app/vo/PayAppCreateReqVO.java create mode 100644 xinda-pay/xinda-pay-core/src/main/java/com/xinda/pay/core/controller/admin/app/vo/PayAppPageItemRespVO.java create mode 100644 xinda-pay/xinda-pay-core/src/main/java/com/xinda/pay/core/controller/admin/app/vo/PayAppPageReqVO.java create mode 100644 xinda-pay/xinda-pay-core/src/main/java/com/xinda/pay/core/controller/admin/app/vo/PayAppRespVO.java create mode 100644 xinda-pay/xinda-pay-core/src/main/java/com/xinda/pay/core/controller/admin/app/vo/PayAppUpdateReqVO.java create mode 100644 xinda-pay/xinda-pay-core/src/main/java/com/xinda/pay/core/controller/admin/app/vo/PayAppUpdateStatusReqVO.java create mode 100644 xinda-pay/xinda-pay-core/src/main/java/com/xinda/pay/core/controller/admin/channel/PayChannelController.java create mode 100644 xinda-pay/xinda-pay-core/src/main/java/com/xinda/pay/core/controller/admin/channel/vo/PayChannelBaseVO.java create mode 100644 xinda-pay/xinda-pay-core/src/main/java/com/xinda/pay/core/controller/admin/channel/vo/PayChannelCreateReqVO.java create mode 100644 xinda-pay/xinda-pay-core/src/main/java/com/xinda/pay/core/controller/admin/channel/vo/PayChannelRespVO.java create mode 100644 xinda-pay/xinda-pay-core/src/main/java/com/xinda/pay/core/controller/admin/channel/vo/PayChannelUpdateReqVO.java create mode 100644 xinda-pay/xinda-pay-core/src/main/java/com/xinda/pay/core/controller/admin/demo/OrderInfoController.java create mode 100644 xinda-pay/xinda-pay-core/src/main/java/com/xinda/pay/core/controller/admin/demo/vo/OrderInfoCreateReqVO.java create mode 100644 xinda-pay/xinda-pay-core/src/main/java/com/xinda/pay/core/controller/admin/demo/vo/OrderInfoRespVO.java create mode 100644 xinda-pay/xinda-pay-core/src/main/java/com/xinda/pay/core/controller/admin/notify/PayNotifyController.java create mode 100644 xinda-pay/xinda-pay-core/src/main/java/com/xinda/pay/core/controller/admin/notify/vo/PayNotifyTaskBaseVO.java create mode 100644 xinda-pay/xinda-pay-core/src/main/java/com/xinda/pay/core/controller/admin/notify/vo/PayNotifyTaskDetailRespVO.java create mode 100644 xinda-pay/xinda-pay-core/src/main/java/com/xinda/pay/core/controller/admin/notify/vo/PayNotifyTaskPageReqVO.java create mode 100644 xinda-pay/xinda-pay-core/src/main/java/com/xinda/pay/core/controller/admin/notify/vo/PayNotifyTaskRespVO.java create mode 100644 xinda-pay/xinda-pay-core/src/main/java/com/xinda/pay/core/controller/admin/order/PayOrderController.java create mode 100644 xinda-pay/xinda-pay-core/src/main/java/com/xinda/pay/core/controller/admin/order/vo/PayOrderBaseVO.java create mode 100644 xinda-pay/xinda-pay-core/src/main/java/com/xinda/pay/core/controller/admin/order/vo/PayOrderDetailsRespVO.java create mode 100644 xinda-pay/xinda-pay-core/src/main/java/com/xinda/pay/core/controller/admin/order/vo/PayOrderExcelVO.java create mode 100644 xinda-pay/xinda-pay-core/src/main/java/com/xinda/pay/core/controller/admin/order/vo/PayOrderExportReqVO.java create mode 100644 xinda-pay/xinda-pay-core/src/main/java/com/xinda/pay/core/controller/admin/order/vo/PayOrderPageItemRespVO.java create mode 100644 xinda-pay/xinda-pay-core/src/main/java/com/xinda/pay/core/controller/admin/order/vo/PayOrderPageReqVO.java create mode 100644 xinda-pay/xinda-pay-core/src/main/java/com/xinda/pay/core/controller/admin/order/vo/PayOrderRespVO.java create mode 100644 xinda-pay/xinda-pay-core/src/main/java/com/xinda/pay/core/controller/admin/order/vo/PayOrderSubmitReqVO.java create mode 100644 xinda-pay/xinda-pay-core/src/main/java/com/xinda/pay/core/controller/admin/order/vo/PayOrderSubmitRespVO.java create mode 100644 xinda-pay/xinda-pay-core/src/main/java/com/xinda/pay/core/controller/admin/refund/PayRefundController.java create mode 100644 xinda-pay/xinda-pay-core/src/main/java/com/xinda/pay/core/controller/admin/refund/vo/PayRefundBaseVO.java create mode 100644 xinda-pay/xinda-pay-core/src/main/java/com/xinda/pay/core/controller/admin/refund/vo/PayRefundDetailsRespVO.java create mode 100644 xinda-pay/xinda-pay-core/src/main/java/com/xinda/pay/core/controller/admin/refund/vo/PayRefundExcelVO.java create mode 100644 xinda-pay/xinda-pay-core/src/main/java/com/xinda/pay/core/controller/admin/refund/vo/PayRefundExportReqVO.java create mode 100644 xinda-pay/xinda-pay-core/src/main/java/com/xinda/pay/core/controller/admin/refund/vo/PayRefundPageItemRespVO.java create mode 100644 xinda-pay/xinda-pay-core/src/main/java/com/xinda/pay/core/controller/admin/refund/vo/PayRefundPageReqVO.java create mode 100644 xinda-pay/xinda-pay-core/src/main/java/com/xinda/pay/core/controller/app/channel/AppPayChannelController.java create mode 100644 xinda-pay/xinda-pay-core/src/main/java/com/xinda/pay/core/controller/app/order/AppPayOrderController.http create mode 100644 xinda-pay/xinda-pay-core/src/main/java/com/xinda/pay/core/controller/app/order/AppPayOrderController.java create mode 100644 xinda-pay/xinda-pay-core/src/main/java/com/xinda/pay/core/controller/app/order/vo/AppPayOrderSubmitReqVO.java create mode 100644 xinda-pay/xinda-pay-core/src/main/java/com/xinda/pay/core/controller/app/order/vo/AppPayOrderSubmitRespVO.java create mode 100644 xinda-pay/xinda-pay-core/src/main/java/com/xinda/pay/core/controller/app/refund/package-info.java create mode 100644 xinda-pay/xinda-pay-core/src/main/java/com/xinda/pay/core/controller/package-info.java create mode 100644 xinda-pay/xinda-pay-core/src/main/java/com/xinda/pay/core/convert/app/PayAppConvert.java create mode 100644 xinda-pay/xinda-pay-core/src/main/java/com/xinda/pay/core/convert/channel/PayChannelConvert.java create mode 100644 xinda-pay/xinda-pay-core/src/main/java/com/xinda/pay/core/convert/demo/OrderInfoConvert.java create mode 100644 xinda-pay/xinda-pay-core/src/main/java/com/xinda/pay/core/convert/notify/PayNotifyTaskConvert.java create mode 100644 xinda-pay/xinda-pay-core/src/main/java/com/xinda/pay/core/convert/order/PayOrderConvert.java create mode 100644 xinda-pay/xinda-pay-core/src/main/java/com/xinda/pay/core/convert/package-info.java create mode 100644 xinda-pay/xinda-pay-core/src/main/java/com/xinda/pay/core/convert/refund/PayRefundConvert.java create mode 100644 xinda-pay/xinda-pay-core/src/main/java/com/xinda/pay/core/convert/《Spring Boot 对象转换 MapStruct 入门》.md create mode 100644 xinda-pay/xinda-pay-core/src/main/java/com/xinda/pay/core/domain/dataobject/app/PayApp.java create mode 100644 xinda-pay/xinda-pay-core/src/main/java/com/xinda/pay/core/domain/dataobject/channel/PayChannel.java create mode 100644 xinda-pay/xinda-pay-core/src/main/java/com/xinda/pay/core/domain/dataobject/demo/OrderInfo.java create mode 100644 xinda-pay/xinda-pay-core/src/main/java/com/xinda/pay/core/domain/dataobject/notify/PayNotifyLog.java create mode 100644 xinda-pay/xinda-pay-core/src/main/java/com/xinda/pay/core/domain/dataobject/notify/PayNotifyTask.java create mode 100644 xinda-pay/xinda-pay-core/src/main/java/com/xinda/pay/core/domain/dataobject/order/PayOrder.java create mode 100644 xinda-pay/xinda-pay-core/src/main/java/com/xinda/pay/core/domain/dataobject/order/PayOrderExtension.java create mode 100644 xinda-pay/xinda-pay-core/src/main/java/com/xinda/pay/core/domain/dataobject/refund/PayRefund.java create mode 100644 xinda-pay/xinda-pay-core/src/main/java/com/xinda/pay/core/domain/mapper/app/PayAppMapper.java create mode 100644 xinda-pay/xinda-pay-core/src/main/java/com/xinda/pay/core/domain/mapper/channel/PayChannelMapper.java create mode 100644 xinda-pay/xinda-pay-core/src/main/java/com/xinda/pay/core/domain/mapper/demo/OrderInfoMapper.java create mode 100644 xinda-pay/xinda-pay-core/src/main/java/com/xinda/pay/core/domain/mapper/notify/PayNotifyLogMapper.java create mode 100644 xinda-pay/xinda-pay-core/src/main/java/com/xinda/pay/core/domain/mapper/notify/PayNotifyTaskMapper.java create mode 100644 xinda-pay/xinda-pay-core/src/main/java/com/xinda/pay/core/domain/mapper/order/PayOrderExtensionMapper.java create mode 100644 xinda-pay/xinda-pay-core/src/main/java/com/xinda/pay/core/domain/mapper/order/PayOrderMapper.java create mode 100644 xinda-pay/xinda-pay-core/src/main/java/com/xinda/pay/core/domain/mapper/refund/PayRefundMapper.java create mode 100644 xinda-pay/xinda-pay-core/src/main/java/com/xinda/pay/core/domain/redis/RedisKeyConstants.java create mode 100644 xinda-pay/xinda-pay-core/src/main/java/com/xinda/pay/core/domain/redis/no/PayNoRedisDAO.java create mode 100644 xinda-pay/xinda-pay-core/src/main/java/com/xinda/pay/core/domain/redis/notify/PayNotifyLockRedisDAO.java create mode 100644 xinda-pay/xinda-pay-core/src/main/java/com/xinda/pay/core/framework/job/config/PayJobConfiguration.java create mode 100644 xinda-pay/xinda-pay-core/src/main/java/com/xinda/pay/core/framework/job/core/package-info.java create mode 100644 xinda-pay/xinda-pay-core/src/main/java/com/xinda/pay/core/framework/package-info.java create mode 100644 xinda-pay/xinda-pay-core/src/main/java/com/xinda/pay/core/framework/pay/config/PayConfiguration.java create mode 100644 xinda-pay/xinda-pay-core/src/main/java/com/xinda/pay/core/framework/pay/config/PayProperties.java create mode 100644 xinda-pay/xinda-pay-core/src/main/java/com/xinda/pay/core/framework/pay/core/package-info.java create mode 100644 xinda-pay/xinda-pay-core/src/main/java/com/xinda/pay/core/framework/web/config/PayWebConfiguration.java create mode 100644 xinda-pay/xinda-pay-core/src/main/java/com/xinda/pay/core/framework/web/package-info.java create mode 100644 xinda-pay/xinda-pay-core/src/main/java/com/xinda/pay/core/job/notify/JobHandler.java create mode 100644 xinda-pay/xinda-pay-core/src/main/java/com/xinda/pay/core/job/notify/PayNotifyJob.java create mode 100644 xinda-pay/xinda-pay-core/src/main/java/com/xinda/pay/core/job/order/PayOrderExpireJob.java create mode 100644 xinda-pay/xinda-pay-core/src/main/java/com/xinda/pay/core/job/order/PayOrderSyncJob.java create mode 100644 xinda-pay/xinda-pay-core/src/main/java/com/xinda/pay/core/job/refund/PayRefundSyncJob.java create mode 100644 xinda-pay/xinda-pay-core/src/main/java/com/xinda/pay/core/service/app/PayAppService.java create mode 100644 xinda-pay/xinda-pay-core/src/main/java/com/xinda/pay/core/service/app/PayAppServiceImpl.java create mode 100644 xinda-pay/xinda-pay-core/src/main/java/com/xinda/pay/core/service/channel/PayChannelService.java create mode 100644 xinda-pay/xinda-pay-core/src/main/java/com/xinda/pay/core/service/channel/PayChannelServiceImpl.java create mode 100644 xinda-pay/xinda-pay-core/src/main/java/com/xinda/pay/core/service/demo/OrderInfoService.java create mode 100644 xinda-pay/xinda-pay-core/src/main/java/com/xinda/pay/core/service/demo/OrderInfoServiceImpl.java create mode 100644 xinda-pay/xinda-pay-core/src/main/java/com/xinda/pay/core/service/notify/PayNotifyService.java create mode 100644 xinda-pay/xinda-pay-core/src/main/java/com/xinda/pay/core/service/notify/PayNotifyServiceImpl.java create mode 100644 xinda-pay/xinda-pay-core/src/main/java/com/xinda/pay/core/service/order/PayOrderExtensionService.java create mode 100644 xinda-pay/xinda-pay-core/src/main/java/com/xinda/pay/core/service/order/PayOrderExtensionServiceImpl.java create mode 100644 xinda-pay/xinda-pay-core/src/main/java/com/xinda/pay/core/service/order/PayOrderService.java create mode 100644 xinda-pay/xinda-pay-core/src/main/java/com/xinda/pay/core/service/order/PayOrderServiceImpl.java create mode 100644 xinda-pay/xinda-pay-core/src/main/java/com/xinda/pay/core/service/refund/PayRefundService.java create mode 100644 xinda-pay/xinda-pay-core/src/main/java/com/xinda/pay/core/service/refund/PayRefundServiceImpl.java create mode 100644 xinda-pay/xinda-pay-core/src/main/java/com/xinda/pay/core/util/MoneyUtils.java create mode 100644 xinda-pay/xinda-pay-core/src/main/java/com/xinda/pay/core/util/PaySeqUtils.java create mode 100644 xinda-pay/xinda-pay-core/src/main/resources/mapper/OrderMapper.xml create mode 100644 xinda-pay/xinda-pay-core/src/main/resources/mapper/PayAppMapper.xml create mode 100644 xinda-pay/xinda-pay-core/src/main/resources/mapper/PayChannelMapper.xml create mode 100644 xinda-pay/xinda-pay-core/src/main/resources/mapper/PayMerchantMapper.xml create mode 100644 xinda-pay/xinda-pay-core/src/main/resources/mapper/PayNotifyLogMapper.xml create mode 100644 xinda-pay/xinda-pay-core/src/main/resources/mapper/PayNotifyTaskMapper.xml create mode 100644 xinda-pay/xinda-pay-core/src/main/resources/mapper/PayOrderExtensionMapper.xml create mode 100644 xinda-pay/xinda-pay-core/src/main/resources/mapper/PayOrderMapper.xml create mode 100644 xinda-pay/xinda-pay-core/src/main/resources/mapper/PayRefundMapper.xml create mode 100644 xinda-pay/xinda-pay-framework/pom.xml create mode 100644 xinda-pay/xinda-pay-framework/src/main/java/com/xinda/pay/framework/client/PayClient.java create mode 100644 xinda-pay/xinda-pay-framework/src/main/java/com/xinda/pay/framework/client/PayClientConfig.java create mode 100644 xinda-pay/xinda-pay-framework/src/main/java/com/xinda/pay/framework/client/PayClientFactory.java create mode 100644 xinda-pay/xinda-pay-framework/src/main/java/com/xinda/pay/framework/client/dto/order/PayOrderRespDTO.java create mode 100644 xinda-pay/xinda-pay-framework/src/main/java/com/xinda/pay/framework/client/dto/order/PayOrderUnifiedReqDTO.java create mode 100644 xinda-pay/xinda-pay-framework/src/main/java/com/xinda/pay/framework/client/dto/refund/PayRefundRespDTO.java create mode 100644 xinda-pay/xinda-pay-framework/src/main/java/com/xinda/pay/framework/client/dto/refund/PayRefundUnifiedReqDTO.java create mode 100644 xinda-pay/xinda-pay-framework/src/main/java/com/xinda/pay/framework/client/exception/PayException.java create mode 100644 xinda-pay/xinda-pay-framework/src/main/java/com/xinda/pay/framework/client/impl/AbstractPayClient.java create mode 100644 xinda-pay/xinda-pay-framework/src/main/java/com/xinda/pay/framework/client/impl/PayClientFactoryImpl.java create mode 100644 xinda-pay/xinda-pay-framework/src/main/java/com/xinda/pay/framework/client/impl/alipay/AbstractAlipayPayClient.java create mode 100644 xinda-pay/xinda-pay-framework/src/main/java/com/xinda/pay/framework/client/impl/alipay/AlipayAppPayClient.java create mode 100644 xinda-pay/xinda-pay-framework/src/main/java/com/xinda/pay/framework/client/impl/alipay/AlipayBarPayClient.java create mode 100644 xinda-pay/xinda-pay-framework/src/main/java/com/xinda/pay/framework/client/impl/alipay/AlipayPayClientConfig.java create mode 100644 xinda-pay/xinda-pay-framework/src/main/java/com/xinda/pay/framework/client/impl/alipay/AlipayPcPayClient.java create mode 100644 xinda-pay/xinda-pay-framework/src/main/java/com/xinda/pay/framework/client/impl/alipay/AlipayQrPayClient.java create mode 100644 xinda-pay/xinda-pay-framework/src/main/java/com/xinda/pay/framework/client/impl/alipay/AlipayWapPayClient.java create mode 100644 xinda-pay/xinda-pay-framework/src/main/java/com/xinda/pay/framework/client/impl/mock/MockPayClient.java create mode 100644 xinda-pay/xinda-pay-framework/src/main/java/com/xinda/pay/framework/client/impl/mock/MockPayClientConfig.java create mode 100644 xinda-pay/xinda-pay-framework/src/main/java/com/xinda/pay/framework/client/impl/weixin/AbstractWxPayClient.java create mode 100644 xinda-pay/xinda-pay-framework/src/main/java/com/xinda/pay/framework/client/impl/weixin/WxAppPayClient.java create mode 100644 xinda-pay/xinda-pay-framework/src/main/java/com/xinda/pay/framework/client/impl/weixin/WxBarPayClient.java create mode 100644 xinda-pay/xinda-pay-framework/src/main/java/com/xinda/pay/framework/client/impl/weixin/WxLitePayClient.java create mode 100644 xinda-pay/xinda-pay-framework/src/main/java/com/xinda/pay/framework/client/impl/weixin/WxNativePayClient.java create mode 100644 xinda-pay/xinda-pay-framework/src/main/java/com/xinda/pay/framework/client/impl/weixin/WxPayClientConfig.java create mode 100644 xinda-pay/xinda-pay-framework/src/main/java/com/xinda/pay/framework/client/impl/weixin/WxPubPayClient.java create mode 100644 xinda-pay/xinda-pay-framework/src/main/java/com/xinda/pay/framework/config/PayAutoConfiguration.java create mode 100644 xinda-pay/xinda-pay-framework/src/main/java/com/xinda/pay/framework/enums/channel/PayChannelEnum.java create mode 100644 xinda-pay/xinda-pay-framework/src/main/java/com/xinda/pay/framework/enums/order/PayOrderDisplayModeEnum.java create mode 100644 xinda-pay/xinda-pay-framework/src/main/java/com/xinda/pay/framework/enums/order/PayOrderStatusRespEnum.java create mode 100644 xinda-pay/xinda-pay-framework/src/main/java/com/xinda/pay/framework/enums/refund/PayRefundStatusRespEnum.java create mode 100644 xinda-plugs/pom.xml create mode 100644 xinda-plugs/xinda-generator/pom.xml create mode 100644 xinda-plugs/xinda-generator/src/main/java/com/xinda/generator/config/GenConfig.java create mode 100644 xinda-plugs/xinda-generator/src/main/java/com/xinda/generator/controller/GenController.java create mode 100644 xinda-plugs/xinda-generator/src/main/java/com/xinda/generator/domain/GenTable.java create mode 100644 xinda-plugs/xinda-generator/src/main/java/com/xinda/generator/domain/GenTableColumn.java create mode 100644 xinda-plugs/xinda-generator/src/main/java/com/xinda/generator/mapper/GenTableColumnMapper.java create mode 100644 xinda-plugs/xinda-generator/src/main/java/com/xinda/generator/mapper/GenTableMapper.java create mode 100644 xinda-plugs/xinda-generator/src/main/java/com/xinda/generator/service/GenTableColumnServiceImpl.java create mode 100644 xinda-plugs/xinda-generator/src/main/java/com/xinda/generator/service/GenTableServiceImpl.java create mode 100644 xinda-plugs/xinda-generator/src/main/java/com/xinda/generator/service/IGenTableColumnService.java create mode 100644 xinda-plugs/xinda-generator/src/main/java/com/xinda/generator/service/IGenTableService.java create mode 100644 xinda-plugs/xinda-generator/src/main/java/com/xinda/generator/util/GenUtils.java create mode 100644 xinda-plugs/xinda-generator/src/main/java/com/xinda/generator/util/VelocityInitializer.java create mode 100644 xinda-plugs/xinda-generator/src/main/java/com/xinda/generator/util/VelocityUtils.java create mode 100644 xinda-plugs/xinda-generator/src/main/resources/generator.yml create mode 100644 xinda-plugs/xinda-generator/src/main/resources/mapper/generator/GenTableColumnMapper.xml create mode 100644 xinda-plugs/xinda-generator/src/main/resources/mapper/generator/GenTableMapper.xml create mode 100644 xinda-plugs/xinda-generator/src/main/resources/vm/java/controller.java.vm create mode 100644 xinda-plugs/xinda-generator/src/main/resources/vm/java/domain.java.vm create mode 100644 xinda-plugs/xinda-generator/src/main/resources/vm/java/mapper.java.vm create mode 100644 xinda-plugs/xinda-generator/src/main/resources/vm/java/service.java.vm create mode 100644 xinda-plugs/xinda-generator/src/main/resources/vm/java/serviceImpl.java.vm create mode 100644 xinda-plugs/xinda-generator/src/main/resources/vm/java/sub-domain.java.vm create mode 100644 xinda-plugs/xinda-generator/src/main/resources/vm/js/api.js.vm create mode 100644 xinda-plugs/xinda-generator/src/main/resources/vm/sql/sql.vm create mode 100644 xinda-plugs/xinda-generator/src/main/resources/vm/vue/index-tree.vue.vm create mode 100644 xinda-plugs/xinda-generator/src/main/resources/vm/vue/index.vue.vm create mode 100644 xinda-plugs/xinda-generator/src/main/resources/vm/vue/v3/index-tree.vue.vm create mode 100644 xinda-plugs/xinda-generator/src/main/resources/vm/vue/v3/index.vue.vm create mode 100644 xinda-plugs/xinda-generator/src/main/resources/vm/vue/v3/readme.txt create mode 100644 xinda-plugs/xinda-generator/src/main/resources/vm/xml/mapper.xml.vm create mode 100644 xinda-plugs/xinda-http/pom.xml create mode 100644 xinda-plugs/xinda-http/src/main/java/com/xinda/http/client/Amap.java create mode 100644 xinda-plugs/xinda-http/src/main/java/com/xinda/http/client/Cn12306.java create mode 100644 xinda-plugs/xinda-http/src/main/java/com/xinda/http/client/DownloadClient.java create mode 100644 xinda-plugs/xinda-http/src/main/java/com/xinda/http/client/Gitee.java create mode 100644 xinda-plugs/xinda-http/src/main/java/com/xinda/http/client/TestInterceptorClient.java create mode 100644 xinda-plugs/xinda-http/src/main/java/com/xinda/http/client/UploadClient.java create mode 100644 xinda-plugs/xinda-http/src/main/java/com/xinda/http/controller/ForestExampleController.java create mode 100644 xinda-plugs/xinda-http/src/main/java/com/xinda/http/controller/InterceptorController.java create mode 100644 xinda-plugs/xinda-http/src/main/java/com/xinda/http/controller/TestAsyncController.java create mode 100644 xinda-plugs/xinda-http/src/main/java/com/xinda/http/controller/TestDownloadController.java create mode 100644 xinda-plugs/xinda-http/src/main/java/com/xinda/http/controller/TestUploadController.java create mode 100644 xinda-plugs/xinda-http/src/main/java/com/xinda/http/interceptors/ApiClientInterceptor.java create mode 100644 xinda-plugs/xinda-http/src/main/java/com/xinda/http/model/Coordinate.java create mode 100644 xinda-plugs/xinda-http/src/main/java/com/xinda/http/model/GiteeBranch.java create mode 100644 xinda-plugs/xinda-http/src/main/java/com/xinda/http/model/GiteeReadme.java create mode 100644 xinda-plugs/xinda-http/src/main/java/com/xinda/http/model/HttpClientConfig.java create mode 100644 xinda-plugs/xinda-http/src/main/java/com/xinda/http/model/Location.java create mode 100644 xinda-plugs/xinda-http/src/main/java/com/xinda/http/model/MapMarker.java create mode 100644 xinda-plugs/xinda-http/src/main/java/com/xinda/http/model/Result.java create mode 100644 xinda-plugs/xinda-http/src/main/java/com/xinda/http/ruleEngine/HttpclientNode.java create mode 100644 xinda-plugs/xinda-http/src/main/java/com/xinda/http/service/FileService.java create mode 100644 xinda-plugs/xinda-http/src/main/java/com/xinda/http/service/HttpClientFactory.java create mode 100644 xinda-plugs/xinda-http/src/main/java/com/xinda/http/service/SuccessCondition.java create mode 100644 xinda-plugs/xinda-http/src/main/java/com/xinda/http/utils/MD5Utils.java create mode 100644 xinda-plugs/xinda-http/src/main/java/com/xinda/http/utils/PathUtil.java create mode 100644 xinda-plugs/xinda-mqtt-client/pom.xml create mode 100644 xinda-plugs/xinda-mqtt-client/src/main/java/com/xinda/mqttclient/IEmqxMessageProducer.java create mode 100644 xinda-plugs/xinda-mqtt-client/src/main/java/com/xinda/mqttclient/MqttClientConfig.java create mode 100644 xinda-plugs/xinda-mqtt-client/src/main/java/com/xinda/mqttclient/PubMqttCallBack.java create mode 100644 xinda-plugs/xinda-mqtt-client/src/main/java/com/xinda/mqttclient/PubMqttClient.java create mode 100644 xinda-plugs/xinda-oauth/pom.xml create mode 100644 xinda-plugs/xinda-oauth/src/main/java/com/xinda/oauth/config/AuthorizationServerConfig.java create mode 100644 xinda-plugs/xinda-oauth/src/main/java/com/xinda/oauth/config/ResourceServerConfig.java create mode 100644 xinda-plugs/xinda-oauth/src/main/java/com/xinda/oauth/config/SpeakerApprovalHandler.java create mode 100644 xinda-plugs/xinda-oauth/src/main/java/com/xinda/oauth/controller/ConfirmAccessController.java create mode 100644 xinda-plugs/xinda-oauth/src/main/java/com/xinda/oauth/controller/LoginController.java create mode 100644 xinda-plugs/xinda-oauth/src/main/java/com/xinda/oauth/controller/OauthClientDetailsController.java create mode 100644 xinda-plugs/xinda-oauth/src/main/java/com/xinda/oauth/controller/OauthController.java create mode 100644 xinda-plugs/xinda-oauth/src/main/java/com/xinda/oauth/domain/OauthAccessToken.java create mode 100644 xinda-plugs/xinda-oauth/src/main/java/com/xinda/oauth/domain/OauthApprovals.java create mode 100644 xinda-plugs/xinda-oauth/src/main/java/com/xinda/oauth/domain/OauthClientDetails.java create mode 100644 xinda-plugs/xinda-oauth/src/main/java/com/xinda/oauth/domain/OauthCode.java create mode 100644 xinda-plugs/xinda-oauth/src/main/java/com/xinda/oauth/enums/OAuth2GrantTypeEnum.java create mode 100644 xinda-plugs/xinda-oauth/src/main/java/com/xinda/oauth/mapper/OauthAccessTokenMapper.java create mode 100644 xinda-plugs/xinda-oauth/src/main/java/com/xinda/oauth/mapper/OauthApprovalsMapper.java create mode 100644 xinda-plugs/xinda-oauth/src/main/java/com/xinda/oauth/mapper/OauthClientDetailsMapper.java create mode 100644 xinda-plugs/xinda-oauth/src/main/java/com/xinda/oauth/mapper/OauthCodeMapper.java create mode 100644 xinda-plugs/xinda-oauth/src/main/java/com/xinda/oauth/service/IOauthApprovalsService.java create mode 100644 xinda-plugs/xinda-oauth/src/main/java/com/xinda/oauth/service/IOauthClientDetailsService.java create mode 100644 xinda-plugs/xinda-oauth/src/main/java/com/xinda/oauth/service/IOauthCodeService.java create mode 100644 xinda-plugs/xinda-oauth/src/main/java/com/xinda/oauth/service/OauthAccessTokenService.java create mode 100644 xinda-plugs/xinda-oauth/src/main/java/com/xinda/oauth/service/impl/OauthAccessTokenServiceImpl.java create mode 100644 xinda-plugs/xinda-oauth/src/main/java/com/xinda/oauth/service/impl/OauthApprovalsServiceImpl.java create mode 100644 xinda-plugs/xinda-oauth/src/main/java/com/xinda/oauth/service/impl/OauthClientDetailsServiceImpl.java create mode 100644 xinda-plugs/xinda-oauth/src/main/java/com/xinda/oauth/service/impl/OauthCodeServiceImpl.java create mode 100644 xinda-plugs/xinda-oauth/src/main/java/com/xinda/oauth/utils/HttpUtils.java create mode 100644 xinda-plugs/xinda-oauth/src/main/java/com/xinda/oauth/utils/OAuth2Utils.java create mode 100644 xinda-plugs/xinda-oauth/src/main/java/com/xinda/oauth/vo/OAuth2OpenAccessTokenRespVO.java create mode 100644 xinda-plugs/xinda-oauth/src/main/java/com/xinda/oauth/vo/OAuth2OpenAuthorizeInfoRespVO.java create mode 100644 xinda-plugs/xinda-oauth/src/main/java/com/xinda/oauth/vo/Oauth2AccessTokenReqVO.java create mode 100644 xinda-plugs/xinda-oauth/src/main/resources/mapper/OauthAccessTokenMapper.xml create mode 100644 xinda-plugs/xinda-oauth/src/main/resources/mapper/OauthApprovalsMapper.xml create mode 100644 xinda-plugs/xinda-oauth/src/main/resources/mapper/OauthClientDetailsMapper.xml create mode 100644 xinda-plugs/xinda-oauth/src/main/resources/mapper/OauthCodeMapper.xml create mode 100644 xinda-plugs/xinda-oauth/src/main/resources/static/oauth/css/bootstrap-theme.css create mode 100644 xinda-plugs/xinda-oauth/src/main/resources/static/oauth/css/bootstrap-theme.css.map create mode 100644 xinda-plugs/xinda-oauth/src/main/resources/static/oauth/css/bootstrap-theme.min.css create mode 100644 xinda-plugs/xinda-oauth/src/main/resources/static/oauth/css/bootstrap-theme.min.css.map create mode 100644 xinda-plugs/xinda-oauth/src/main/resources/static/oauth/css/bootstrap.css create mode 100644 xinda-plugs/xinda-oauth/src/main/resources/static/oauth/css/bootstrap.css.map create mode 100644 xinda-plugs/xinda-oauth/src/main/resources/static/oauth/css/bootstrap.min.css create mode 100644 xinda-plugs/xinda-oauth/src/main/resources/static/oauth/css/bootstrap.min.css.map create mode 100644 xinda-plugs/xinda-oauth/src/main/resources/static/oauth/fonts/glyphicons-halflings-regular.eot create mode 100644 xinda-plugs/xinda-oauth/src/main/resources/static/oauth/fonts/glyphicons-halflings-regular.svg create mode 100644 xinda-plugs/xinda-oauth/src/main/resources/static/oauth/fonts/glyphicons-halflings-regular.ttf create mode 100644 xinda-plugs/xinda-oauth/src/main/resources/static/oauth/fonts/glyphicons-halflings-regular.woff create mode 100644 xinda-plugs/xinda-oauth/src/main/resources/static/oauth/fonts/glyphicons-halflings-regular.woff2 create mode 100644 xinda-plugs/xinda-oauth/src/main/resources/static/oauth/js/bootstrap.js create mode 100644 xinda-plugs/xinda-oauth/src/main/resources/static/oauth/js/bootstrap.min.js create mode 100644 xinda-plugs/xinda-oauth/src/main/resources/static/oauth/js/npm.js create mode 100644 xinda-plugs/xinda-oauth/src/main/resources/templates/oauth/access_confirmation.html create mode 100644 xinda-plugs/xinda-oauth/src/main/resources/templates/oauth/clientDetails.html create mode 100644 xinda-plugs/xinda-oauth/src/main/resources/templates/oauth/index.html create mode 100644 xinda-plugs/xinda-oauth/src/main/resources/templates/oauth/login.html create mode 100644 xinda-plugs/xinda-oss/pom.xml create mode 100644 xinda-plugs/xinda-oss/src/main/java/com/xinda/oss/controller/OssConfigController.java create mode 100644 xinda-plugs/xinda-oss/src/main/java/com/xinda/oss/controller/OssDetailController.java create mode 100644 xinda-plugs/xinda-oss/src/main/java/com/xinda/oss/core/OssClient.java create mode 100644 xinda-plugs/xinda-oss/src/main/java/com/xinda/oss/domain/OssConfig.java create mode 100644 xinda-plugs/xinda-oss/src/main/java/com/xinda/oss/domain/OssDetail.java create mode 100644 xinda-plugs/xinda-oss/src/main/java/com/xinda/oss/entity/OssConstant.java create mode 100644 xinda-plugs/xinda-oss/src/main/java/com/xinda/oss/entity/OssProperties.java create mode 100644 xinda-plugs/xinda-oss/src/main/java/com/xinda/oss/entity/UploadResult.java create mode 100644 xinda-plugs/xinda-oss/src/main/java/com/xinda/oss/enums/AccessPolicyType.java create mode 100644 xinda-plugs/xinda-oss/src/main/java/com/xinda/oss/enums/PlatformType.java create mode 100644 xinda-plugs/xinda-oss/src/main/java/com/xinda/oss/enums/PolicyType.java create mode 100644 xinda-plugs/xinda-oss/src/main/java/com/xinda/oss/mapper/OssConfigMapper.java create mode 100644 xinda-plugs/xinda-oss/src/main/java/com/xinda/oss/mapper/OssDetailMapper.java create mode 100644 xinda-plugs/xinda-oss/src/main/java/com/xinda/oss/runner/OssApplicationRunner.java create mode 100644 xinda-plugs/xinda-oss/src/main/java/com/xinda/oss/service/IOssConfigService.java create mode 100644 xinda-plugs/xinda-oss/src/main/java/com/xinda/oss/service/IOssDetailService.java create mode 100644 xinda-plugs/xinda-oss/src/main/java/com/xinda/oss/service/OssClient.java create mode 100644 xinda-plugs/xinda-oss/src/main/java/com/xinda/oss/service/OssFactory.java create mode 100644 xinda-plugs/xinda-oss/src/main/java/com/xinda/oss/service/impl/OssConfigServiceImpl.java create mode 100644 xinda-plugs/xinda-oss/src/main/java/com/xinda/oss/service/impl/OssDetailServiceImpl.java create mode 100644 xinda-plugs/xinda-oss/src/main/resources/mapper/OssConfigMapper.xml create mode 100644 xinda-plugs/xinda-oss/src/main/resources/mapper/OssDetailMapper.xml create mode 100644 xinda-plugs/xinda-oss/src/main/resources/oss.sql create mode 100644 xinda-plugs/xinda-quartz/pom.xml create mode 100644 xinda-plugs/xinda-quartz/src/main/java/com/xinda/quartz/config/ScheduleConfig.java create mode 100644 xinda-plugs/xinda-quartz/src/main/java/com/xinda/quartz/controller/SysJobController.java create mode 100644 xinda-plugs/xinda-quartz/src/main/java/com/xinda/quartz/controller/SysJobLogController.java create mode 100644 xinda-plugs/xinda-quartz/src/main/java/com/xinda/quartz/domain/SysJob.java create mode 100644 xinda-plugs/xinda-quartz/src/main/java/com/xinda/quartz/domain/SysJobLog.java create mode 100644 xinda-plugs/xinda-quartz/src/main/java/com/xinda/quartz/mapper/SysJobLogMapper.java create mode 100644 xinda-plugs/xinda-quartz/src/main/java/com/xinda/quartz/mapper/SysJobMapper.java create mode 100644 xinda-plugs/xinda-quartz/src/main/java/com/xinda/quartz/service/ISysJobLogService.java create mode 100644 xinda-plugs/xinda-quartz/src/main/java/com/xinda/quartz/service/ISysJobService.java create mode 100644 xinda-plugs/xinda-quartz/src/main/java/com/xinda/quartz/service/impl/SysJobLogServiceImpl.java create mode 100644 xinda-plugs/xinda-quartz/src/main/java/com/xinda/quartz/service/impl/SysJobServiceImpl.java create mode 100644 xinda-plugs/xinda-quartz/src/main/java/com/xinda/quartz/task/RyTask.java create mode 100644 xinda-plugs/xinda-quartz/src/main/java/com/xinda/quartz/util/AbstractQuartzJob.java create mode 100644 xinda-plugs/xinda-quartz/src/main/java/com/xinda/quartz/util/CronUtils.java create mode 100644 xinda-plugs/xinda-quartz/src/main/java/com/xinda/quartz/util/JobInvokeUtil.java create mode 100644 xinda-plugs/xinda-quartz/src/main/java/com/xinda/quartz/util/QuartzDisallowConcurrentExecution.java create mode 100644 xinda-plugs/xinda-quartz/src/main/java/com/xinda/quartz/util/QuartzJobExecution.java create mode 100644 xinda-plugs/xinda-quartz/src/main/java/com/xinda/quartz/util/ScheduleUtils.java create mode 100644 xinda-plugs/xinda-quartz/src/main/resources/mapper/quartz/SysJobLogMapper.xml create mode 100644 xinda-plugs/xinda-quartz/src/main/resources/mapper/quartz/SysJobMapper.xml create mode 100644 xinda-plugs/xinda-ruleEngine/pom.xml create mode 100644 xinda-plugs/xinda-ruleEngine/src/main/java/com/xinda/ruleEngine/config/MainExecutorBuilder.java create mode 100644 xinda-plugs/xinda-ruleEngine/src/main/java/com/xinda/ruleEngine/config/WhenExecutorBuilder.java create mode 100644 xinda-plugs/xinda-ruleEngine/src/main/java/com/xinda/ruleEngine/core/FlowLogExecutor.java create mode 100644 xinda-plugs/xinda-ruleEngine/src/main/java/com/xinda/ruleEngine/core/RequestIdBuilder.java create mode 100644 xinda-plugs/xinda-ruleEngine/src/main/java/com/xinda/ruleEngine/util/Constant.java create mode 100644 xinda-protocol/pom.xml create mode 100644 xinda-protocol/xinda-protocol-base/pom.xml create mode 100644 xinda-protocol/xinda-protocol-base/src/main/java/com/xinda/protocol/PrepareLoadStore.java create mode 100644 xinda-protocol/xinda-protocol-base/src/main/java/com/xinda/protocol/ProtocolLoadUtils.java create mode 100644 xinda-protocol/xinda-protocol-base/src/main/java/com/xinda/protocol/WModelManager.java create mode 100644 xinda-protocol/xinda-protocol-base/src/main/java/com/xinda/protocol/base/annotation/Column.java create mode 100644 xinda-protocol/xinda-protocol-base/src/main/java/com/xinda/protocol/base/annotation/Columns.java create mode 100644 xinda-protocol/xinda-protocol-base/src/main/java/com/xinda/protocol/base/annotation/MergeSubClass.java create mode 100644 xinda-protocol/xinda-protocol-base/src/main/java/com/xinda/protocol/base/annotation/Protocol.java create mode 100644 xinda-protocol/xinda-protocol-base/src/main/java/com/xinda/protocol/base/message/MessageBody.java create mode 100644 xinda-protocol/xinda-protocol-base/src/main/java/com/xinda/protocol/base/message/MessageHead.java create mode 100644 xinda-protocol/xinda-protocol-base/src/main/java/com/xinda/protocol/base/model/ActiveModel.java create mode 100644 xinda-protocol/xinda-protocol-base/src/main/java/com/xinda/protocol/base/model/ArrayModel.java create mode 100644 xinda-protocol/xinda-protocol-base/src/main/java/com/xinda/protocol/base/model/BufferModel.java create mode 100644 xinda-protocol/xinda-protocol-base/src/main/java/com/xinda/protocol/base/model/DateTimeModel.java create mode 100644 xinda-protocol/xinda-protocol-base/src/main/java/com/xinda/protocol/base/model/MapModel.java create mode 100644 xinda-protocol/xinda-protocol-base/src/main/java/com/xinda/protocol/base/model/ModelRegistry.java create mode 100644 xinda-protocol/xinda-protocol-base/src/main/java/com/xinda/protocol/base/model/NumberModel.java create mode 100644 xinda-protocol/xinda-protocol-base/src/main/java/com/xinda/protocol/base/model/NumberPModel.java create mode 100644 xinda-protocol/xinda-protocol-base/src/main/java/com/xinda/protocol/base/model/StringModel.java create mode 100644 xinda-protocol/xinda-protocol-base/src/main/java/com/xinda/protocol/base/model/WModel.java create mode 100644 xinda-protocol/xinda-protocol-base/src/main/java/com/xinda/protocol/base/protocol/IProtocol.java create mode 100644 xinda-protocol/xinda-protocol-base/src/main/java/com/xinda/protocol/base/struc/BaseStructure.java create mode 100644 xinda-protocol/xinda-protocol-base/src/main/java/com/xinda/protocol/base/struc/CollectionStructure.java create mode 100644 xinda-protocol/xinda-protocol-base/src/main/java/com/xinda/protocol/base/struc/LengthStructure.java create mode 100644 xinda-protocol/xinda-protocol-base/src/main/java/com/xinda/protocol/base/struc/LengthUnitCollectionStructure.java create mode 100644 xinda-protocol/xinda-protocol-base/src/main/java/com/xinda/protocol/base/struc/LengthUnitStructure.java create mode 100644 xinda-protocol/xinda-protocol-base/src/main/java/com/xinda/protocol/base/struc/MapStructure.java create mode 100644 xinda-protocol/xinda-protocol-base/src/main/java/com/xinda/protocol/base/struc/TotalArrayObjectStructure.java create mode 100644 xinda-protocol/xinda-protocol-base/src/main/java/com/xinda/protocol/base/struc/TotalArrayPrimitiveStructure.java create mode 100644 xinda-protocol/xinda-protocol-base/src/main/java/com/xinda/protocol/base/struc/TotalCollectionStructure.java create mode 100644 xinda-protocol/xinda-protocol-base/src/main/java/com/xinda/protocol/base/struc/TotalMapStructure.java create mode 100644 xinda-protocol/xinda-protocol-base/src/main/java/com/xinda/protocol/domain/DeviceProtocol.java create mode 100644 xinda-protocol/xinda-protocol-base/src/main/java/com/xinda/protocol/enums/ModbusBitStatus.java create mode 100644 xinda-protocol/xinda-protocol-base/src/main/java/com/xinda/protocol/enums/ModbusCoilStatus.java create mode 100644 xinda-protocol/xinda-protocol-base/src/main/java/com/xinda/protocol/enums/ModbusErrCode.java create mode 100644 xinda-protocol/xinda-protocol-base/src/main/java/com/xinda/protocol/service/IProtocolManagerService.java create mode 100644 xinda-protocol/xinda-protocol-base/src/main/java/com/xinda/protocol/service/impl/ProtocolManagerServiceImpl.java create mode 100644 xinda-protocol/xinda-protocol-base/src/main/java/com/xinda/protocol/util/ArrayMap.java create mode 100644 xinda-protocol/xinda-protocol-base/src/main/java/com/xinda/protocol/util/ByteToHexUtil.java create mode 100644 xinda-protocol/xinda-protocol-base/src/main/java/com/xinda/protocol/util/Cache.java create mode 100644 xinda-protocol/xinda-protocol-base/src/main/java/com/xinda/protocol/util/CharsBuilder.java create mode 100644 xinda-protocol/xinda-protocol-base/src/main/java/com/xinda/protocol/util/ClassUtils.java create mode 100644 xinda-protocol/xinda-protocol-base/src/main/java/com/xinda/protocol/util/DateTool.java create mode 100644 xinda-protocol/xinda-protocol-base/src/main/java/com/xinda/protocol/util/ExplainUtils.java create mode 100644 xinda-protocol/xinda-protocol-base/src/main/java/com/xinda/protocol/util/IntTool.java create mode 100644 xinda-protocol/xinda-protocol-base/src/main/java/com/xinda/protocol/util/IntegerToByteUtil.java create mode 100644 xinda-protocol/xinda-protocol-base/src/main/java/com/xinda/protocol/util/KeyValuePair.java create mode 100644 xinda-protocol/xinda-protocol-base/src/main/java/com/xinda/protocol/util/Msg.java create mode 100644 xinda-protocol/xinda-protocol-base/src/main/java/com/xinda/protocol/util/SingleVersionUtils.java create mode 100644 xinda-protocol/xinda-protocol-base/src/main/java/com/xinda/protocol/util/ToStringBuilder.java create mode 100644 xinda-protocol/xinda-protocol-collect/pom.xml create mode 100644 xinda-protocol/xinda-protocol-collect/src/main/java/com/xinda/common/ProtocolColl.java create mode 100644 xinda-protocol/xinda-protocol-collect/src/main/java/com/xinda/common/ProtocolDeCodeService.java create mode 100644 xinda-protocol/xinda-protocol-collect/src/main/java/com/xinda/gkb/GKBHTSZProtocolService.java create mode 100644 xinda-protocol/xinda-protocol-collect/src/main/java/com/xinda/json/JsonProtocolService.java create mode 100644 xinda-protocol/xinda-protocol-collect/src/main/java/com/xinda/jsonPak/JsonPakProtocolService.java create mode 100644 xinda-protocol/xinda-protocol-collect/src/main/java/com/xinda/jsonPak/pak/JsonEndPoint.java create mode 100644 xinda-protocol/xinda-protocol-collect/src/main/java/com/xinda/jsonchenyi/JsonChenYiProtocolService.java create mode 100644 xinda-protocol/xinda-protocol-collect/src/main/java/com/xinda/modbus/codec/MessageAdapter.java create mode 100644 xinda-protocol/xinda-protocol-collect/src/main/java/com/xinda/modbus/codec/ModbusDecoder.java create mode 100644 xinda-protocol/xinda-protocol-collect/src/main/java/com/xinda/modbus/codec/ModbusEncoder.java create mode 100644 xinda-protocol/xinda-protocol-collect/src/main/java/com/xinda/modbus/codec/ModbusProtocol.java create mode 100644 xinda-protocol/xinda-protocol-collect/src/main/java/com/xinda/modbus/model/ModbusRtu.java create mode 100644 xinda-protocol/xinda-protocol-collect/src/main/java/com/xinda/modbus/pak/ModbusEndPoint.java create mode 100644 xinda-protocol/xinda-protocol-collect/src/main/java/com/xinda/modbus/pak/TcpDtu.java create mode 100644 xinda-protocol/xinda-protocol-collect/src/main/java/com/xinda/modbus/test/ModbusTest.java create mode 100644 xinda-protocol/xinda-protocol-collect/src/main/java/com/xinda/modbusToJson/FYModel.java create mode 100644 xinda-protocol/xinda-protocol-collect/src/main/java/com/xinda/modbusToJson/ModbusToJsonProtocolService.java create mode 100644 xinda-protocol/xinda-protocol-collect/src/main/java/com/xinda/pakModbus/codec/ModbusRtu-pak.JSON create mode 100644 xinda-protocol/xinda-protocol-collect/src/main/java/com/xinda/pakModbus/codec/ModbusRtuPakDecoder.java create mode 100644 xinda-protocol/xinda-protocol-collect/src/main/java/com/xinda/pakModbus/codec/ModbusRtuPakEncoder.java create mode 100644 xinda-protocol/xinda-protocol-collect/src/main/java/com/xinda/pakModbus/codec/ModbusRtuPakProtocol.java create mode 100644 xinda-protocol/xinda-protocol-collect/src/main/java/com/xinda/pakModbus/model/CombineFactory.java create mode 100644 xinda-protocol/xinda-protocol-collect/src/main/java/com/xinda/pakModbus/model/PakModbusRtu.java create mode 100644 xinda-protocol/xinda-protocol-collect/src/main/java/com/xinda/pakModbus/test/PakModbusTest.java create mode 100644 xinda-protocol/xinda-protocol-collect/src/main/java/com/xinda/zqwl/GEC6100ToZqwlProtocolService.java create mode 100644 xinda-protocol/xinda-protocol-collect/src/main/java/com/xinda/zqwl/ModbusToJsonZQWLProtocolService.java create mode 100644 xinda-protocol/xinda-protocol-collect/src/main/java/com/xinda/zqwl/ZQWLDIDORet.java create mode 100644 xinda-record/README.md create mode 100644 xinda-record/pom.xml create mode 100644 xinda-record/src/main/java/com/xinda/record/ZlmRecordApplication.java create mode 100644 xinda-record/src/main/java/com/xinda/record/config/FastJson2JsonRedisSerializer.java create mode 100644 xinda-record/src/main/java/com/xinda/record/config/FastJsonRedisSerializer.java create mode 100644 xinda-record/src/main/java/com/xinda/record/config/GlobalExceptionHandler.java create mode 100644 xinda-record/src/main/java/com/xinda/record/config/GlobalResponseAdvice.java create mode 100644 xinda-record/src/main/java/com/xinda/record/config/RedisConfig.java create mode 100644 xinda-record/src/main/java/com/xinda/record/config/SpringDocConfig.java create mode 100644 xinda-record/src/main/java/com/xinda/record/config/StartConfig.java create mode 100644 xinda-record/src/main/java/com/xinda/record/config/ThreadPoolTaskConfig.java create mode 100644 xinda-record/src/main/java/com/xinda/record/controller/DownController.java create mode 100644 xinda-record/src/main/java/com/xinda/record/controller/DownloadController.java create mode 100644 xinda-record/src/main/java/com/xinda/record/controller/RecordController.java create mode 100644 xinda-record/src/main/java/com/xinda/record/controller/ZmlHookController.java create mode 100644 xinda-record/src/main/java/com/xinda/record/controller/bean/ControllerException.java create mode 100644 xinda-record/src/main/java/com/xinda/record/controller/bean/ErrorCode.java create mode 100644 xinda-record/src/main/java/com/xinda/record/controller/bean/RecordFile.java create mode 100644 xinda-record/src/main/java/com/xinda/record/controller/bean/Result.java create mode 100644 xinda-record/src/main/java/com/xinda/record/dto/MergeOrCutTaskInfo.java create mode 100644 xinda-record/src/main/java/com/xinda/record/dto/RecordInfo.java create mode 100644 xinda-record/src/main/java/com/xinda/record/dto/SignInfo.java create mode 100644 xinda-record/src/main/java/com/xinda/record/dto/SpaceInfo.java create mode 100644 xinda-record/src/main/java/com/xinda/record/dto/UserSettings.java create mode 100644 xinda-record/src/main/java/com/xinda/record/service/FFmpegExecUtils.java create mode 100644 xinda-record/src/main/java/com/xinda/record/service/FileManagerTimer.java create mode 100644 xinda-record/src/main/java/com/xinda/record/service/VideoFileService.java create mode 100644 xinda-record/src/main/java/com/xinda/record/utils/Constants.java create mode 100644 xinda-record/src/main/java/com/xinda/record/utils/DateUtils.java create mode 100644 xinda-record/src/main/java/com/xinda/record/utils/PageInfo.java create mode 100644 xinda-record/src/main/java/com/xinda/record/utils/RedisUtil.java create mode 100644 xinda-record/src/main/resources/all-application.yml create mode 100644 xinda-record/src/main/resources/application-dev.yml create mode 100644 xinda-record/src/main/resources/application-prod.yml create mode 100644 xinda-record/src/main/resources/application.yml create mode 100644 xinda-record/src/main/resources/mybatis/mybatis-config.xml create mode 100644 xinda-record/src/main/resources/static/download.html create mode 100644 xinda-scada/pom.xml create mode 100644 xinda-scada/src/main/java/com/xinda/scada/controller/ScadaComponentController.java create mode 100644 xinda-scada/src/main/java/com/xinda/scada/controller/ScadaController.java create mode 100644 xinda-scada/src/main/java/com/xinda/scada/controller/ScadaEchartController.java create mode 100644 xinda-scada/src/main/java/com/xinda/scada/controller/ScadaGalleryController.java create mode 100644 xinda-scada/src/main/java/com/xinda/scada/controller/ScadaModelController.java create mode 100644 xinda-scada/src/main/java/com/xinda/scada/domain/Scada.java create mode 100644 xinda-scada/src/main/java/com/xinda/scada/domain/ScadaComponent.java create mode 100644 xinda-scada/src/main/java/com/xinda/scada/domain/ScadaDeviceBind.java create mode 100644 xinda-scada/src/main/java/com/xinda/scada/domain/ScadaEchart.java create mode 100644 xinda-scada/src/main/java/com/xinda/scada/domain/ScadaGallery.java create mode 100644 xinda-scada/src/main/java/com/xinda/scada/domain/ScadaModel.java create mode 100644 xinda-scada/src/main/java/com/xinda/scada/mapper/ScadaComponentMapper.java create mode 100644 xinda-scada/src/main/java/com/xinda/scada/mapper/ScadaDeviceBindMapper.java create mode 100644 xinda-scada/src/main/java/com/xinda/scada/mapper/ScadaEchartMapper.java create mode 100644 xinda-scada/src/main/java/com/xinda/scada/mapper/ScadaGalleryMapper.java create mode 100644 xinda-scada/src/main/java/com/xinda/scada/mapper/ScadaMapper.java create mode 100644 xinda-scada/src/main/java/com/xinda/scada/mapper/ScadaModelMapper.java create mode 100644 xinda-scada/src/main/java/com/xinda/scada/service/IScadaComponentService.java create mode 100644 xinda-scada/src/main/java/com/xinda/scada/service/IScadaDeviceBindService.java create mode 100644 xinda-scada/src/main/java/com/xinda/scada/service/IScadaEchartService.java create mode 100644 xinda-scada/src/main/java/com/xinda/scada/service/IScadaGalleryService.java create mode 100644 xinda-scada/src/main/java/com/xinda/scada/service/IScadaModelService.java create mode 100644 xinda-scada/src/main/java/com/xinda/scada/service/IScadaService.java create mode 100644 xinda-scada/src/main/java/com/xinda/scada/service/impl/ScadaComponentServiceImpl.java create mode 100644 xinda-scada/src/main/java/com/xinda/scada/service/impl/ScadaDeviceBindServiceImpl.java create mode 100644 xinda-scada/src/main/java/com/xinda/scada/service/impl/ScadaEchartServiceImpl.java create mode 100644 xinda-scada/src/main/java/com/xinda/scada/service/impl/ScadaGalleryServiceImpl.java create mode 100644 xinda-scada/src/main/java/com/xinda/scada/service/impl/ScadaModelServiceImpl.java create mode 100644 xinda-scada/src/main/java/com/xinda/scada/service/impl/ScadaServiceImpl.java create mode 100644 xinda-scada/src/main/java/com/xinda/scada/utils/ScadaBase64ToMultipartFile.java create mode 100644 xinda-scada/src/main/java/com/xinda/scada/utils/ScadaCollectionUtils.java create mode 100644 xinda-scada/src/main/java/com/xinda/scada/utils/ScadaConstant.java create mode 100644 xinda-scada/src/main/java/com/xinda/scada/utils/ScadaFileUploadUtils.java create mode 100644 xinda-scada/src/main/java/com/xinda/scada/utils/ScadaFileUtils.java create mode 100644 xinda-scada/src/main/java/com/xinda/scada/vo/DeviceRealDataVO.java create mode 100644 xinda-scada/src/main/java/com/xinda/scada/vo/FavoritesVO.java create mode 100644 xinda-scada/src/main/java/com/xinda/scada/vo/ScadaBindDeviceSimVO.java create mode 100644 xinda-scada/src/main/java/com/xinda/scada/vo/ScadaDeviceBindDTO.java create mode 100644 xinda-scada/src/main/java/com/xinda/scada/vo/ScadaDeviceBindVO.java create mode 100644 xinda-scada/src/main/java/com/xinda/scada/vo/ScadaHistoryModelVO.java create mode 100644 xinda-scada/src/main/java/com/xinda/scada/vo/ScadaStatisticVO.java create mode 100644 xinda-scada/src/main/java/com/xinda/scada/vo/ThingsModelHistoryParam.java create mode 100644 xinda-scada/src/main/resources/mapper/ScadaComponentMapper.xml create mode 100644 xinda-scada/src/main/resources/mapper/ScadaDeviceBindMapper.xml create mode 100644 xinda-scada/src/main/resources/mapper/ScadaEchartMapper.xml create mode 100644 xinda-scada/src/main/resources/mapper/ScadaGalleryMapper.xml create mode 100644 xinda-scada/src/main/resources/mapper/ScadaMapper.xml create mode 100644 xinda-scada/src/main/resources/mapper/ScadaModelMapper.xml create mode 100644 xinda-server/base-server/pom.xml create mode 100644 xinda-server/base-server/src/main/java/com/xinda/base/codec/Delimiter.java create mode 100644 xinda-server/base-server/src/main/java/com/xinda/base/codec/LengthField.java create mode 100644 xinda-server/base-server/src/main/java/com/xinda/base/codec/MessageDecoder.java create mode 100644 xinda-server/base-server/src/main/java/com/xinda/base/codec/MessageEncoder.java create mode 100644 xinda-server/base-server/src/main/java/com/xinda/base/core/AbstractHandlerMapping.java create mode 100644 xinda-server/base-server/src/main/java/com/xinda/base/core/DefaultHandlerMapping.java create mode 100644 xinda-server/base-server/src/main/java/com/xinda/base/core/HandlerInterceptor.java create mode 100644 xinda-server/base-server/src/main/java/com/xinda/base/core/HandlerMapping.java create mode 100644 xinda-server/base-server/src/main/java/com/xinda/base/core/SpringHandlerMapping.java create mode 100644 xinda-server/base-server/src/main/java/com/xinda/base/core/annotation/Async.java create mode 100644 xinda-server/base-server/src/main/java/com/xinda/base/core/annotation/AsyncBatch.java create mode 100644 xinda-server/base-server/src/main/java/com/xinda/base/core/annotation/Node.java create mode 100644 xinda-server/base-server/src/main/java/com/xinda/base/core/annotation/PakMapping.java create mode 100644 xinda-server/base-server/src/main/java/com/xinda/base/core/hanler/AsyncBatchHandler.java create mode 100644 xinda-server/base-server/src/main/java/com/xinda/base/core/hanler/BaseHandler.java create mode 100644 xinda-server/base-server/src/main/java/com/xinda/base/core/hanler/SyncHandler.java create mode 100644 xinda-server/base-server/src/main/java/com/xinda/base/core/model/Response.java create mode 100644 xinda-server/base-server/src/main/java/com/xinda/base/model/DeviceMsg.java create mode 100644 xinda-server/base-server/src/main/java/com/xinda/base/model/SessionKey.java create mode 100644 xinda-server/base-server/src/main/java/com/xinda/base/service/ISessionStore.java create mode 100644 xinda-server/base-server/src/main/java/com/xinda/base/service/impl/SessionStoreImpl.java create mode 100644 xinda-server/base-server/src/main/java/com/xinda/base/session/Packet.java create mode 100644 xinda-server/base-server/src/main/java/com/xinda/base/session/Session.java create mode 100644 xinda-server/base-server/src/main/java/com/xinda/base/session/SessionListener.java create mode 100644 xinda-server/base-server/src/main/java/com/xinda/base/session/SessionManager.java create mode 100644 xinda-server/base-server/src/main/java/com/xinda/base/util/AttributeUtils.java create mode 100644 xinda-server/base-server/src/main/java/com/xinda/base/util/ByteBufUtils.java create mode 100644 xinda-server/base-server/src/main/java/com/xinda/base/util/ClassUtils.java create mode 100644 xinda-server/base-server/src/main/java/com/xinda/base/util/ConcurrentStorage.java create mode 100644 xinda-server/base-server/src/main/java/com/xinda/base/util/DeviceUtils.java create mode 100644 xinda-server/base-server/src/main/java/com/xinda/base/util/Stopwatch.java create mode 100644 xinda-server/base-server/src/main/java/com/xinda/base/util/Storage.java create mode 100644 xinda-server/base-server/src/main/java/com/xinda/base/util/VirtualList.java create mode 100644 xinda-server/boot-strap/pom.xml create mode 100644 xinda-server/boot-strap/src/main/java/com/xinda/bootstrap/coap/CoapBootStrap.java create mode 100644 xinda-server/boot-strap/src/main/java/com/xinda/bootstrap/http/HttpBootStrap.java create mode 100644 xinda-server/boot-strap/src/main/java/com/xinda/bootstrap/mqtt/MQTTBootStrap.java create mode 100644 xinda-server/boot-strap/src/main/java/com/xinda/bootstrap/tcp/TCPBootStrap.java create mode 100644 xinda-server/boot-strap/src/main/java/com/xinda/bootstrap/tcp/config/TcpBeanConfig.java create mode 100644 xinda-server/boot-strap/src/main/java/com/xinda/bootstrap/tcp/config/TcpHandlerInterceptor.java create mode 100644 xinda-server/boot-strap/src/main/java/com/xinda/bootstrap/tcp/config/TcpSessionListener.java create mode 100644 xinda-server/boot-strap/src/main/java/com/xinda/bootstrap/udp/UDPBootStrap.java create mode 100644 xinda-server/coap-server/pom.xml create mode 100644 xinda-server/coap-server/src/main/java/com/xinda/coap/Coapserver.java create mode 100644 xinda-server/coap-server/src/main/java/com/xinda/coap/README.md create mode 100644 xinda-server/coap-server/src/main/java/com/xinda/coap/codec/CoapMessageDecoder.java create mode 100644 xinda-server/coap-server/src/main/java/com/xinda/coap/codec/CoapMessageEncoder.java create mode 100644 xinda-server/coap-server/src/main/java/com/xinda/coap/codec/HeaderDecodingException.java create mode 100644 xinda-server/coap-server/src/main/java/com/xinda/coap/codec/OptionCodecException.java create mode 100644 xinda-server/coap-server/src/main/java/com/xinda/coap/handler/AbstractResourceHandler.java create mode 100644 xinda-server/coap-server/src/main/java/com/xinda/coap/handler/ReqDispatcher.java create mode 100644 xinda-server/coap-server/src/main/java/com/xinda/coap/handler/RequestConsumer.java create mode 100644 xinda-server/coap-server/src/main/java/com/xinda/coap/handler/ResourceHandler.java create mode 100644 xinda-server/coap-server/src/main/java/com/xinda/coap/handler/TimeResourceHandler.java create mode 100644 xinda-server/coap-server/src/main/java/com/xinda/coap/model/BlockSize.java create mode 100644 xinda-server/coap-server/src/main/java/com/xinda/coap/model/CoapMessage.java create mode 100644 xinda-server/coap-server/src/main/java/com/xinda/coap/model/CoapRequest.java create mode 100644 xinda-server/coap-server/src/main/java/com/xinda/coap/model/CoapResponse.java create mode 100644 xinda-server/coap-server/src/main/java/com/xinda/coap/model/MessageCode.java create mode 100644 xinda-server/coap-server/src/main/java/com/xinda/coap/model/MessageType.java create mode 100644 xinda-server/coap-server/src/main/java/com/xinda/coap/model/ResourceStatusAge.java create mode 100644 xinda-server/coap-server/src/main/java/com/xinda/coap/model/Token.java create mode 100644 xinda-server/coap-server/src/main/java/com/xinda/coap/model/linkformat/LinkParam.java create mode 100644 xinda-server/coap-server/src/main/java/com/xinda/coap/model/linkformat/LinkValue.java create mode 100644 xinda-server/coap-server/src/main/java/com/xinda/coap/model/linkformat/LinkValueList.java create mode 100644 xinda-server/coap-server/src/main/java/com/xinda/coap/model/options/ContentFormat.java create mode 100644 xinda-server/coap-server/src/main/java/com/xinda/coap/model/options/EmptyOptionValue.java create mode 100644 xinda-server/coap-server/src/main/java/com/xinda/coap/model/options/OpaqueOptionValue.java create mode 100644 xinda-server/coap-server/src/main/java/com/xinda/coap/model/options/Option.java create mode 100644 xinda-server/coap-server/src/main/java/com/xinda/coap/model/options/OptionValue.java create mode 100644 xinda-server/coap-server/src/main/java/com/xinda/coap/model/options/StringOptionValue.java create mode 100644 xinda-server/coap-server/src/main/java/com/xinda/coap/model/options/UintOptionValue.java create mode 100644 xinda-server/coap-server/src/main/java/com/xinda/coap/server/CoapServerChannelInitializer.java create mode 100644 xinda-server/coap-server/src/main/java/com/xinda/coap/server/ResourceRegistry.java create mode 100644 xinda-server/http-server/pom.xml create mode 100644 xinda-server/http-server/src/main/java/com/xinda/http/auth/BasicAuth.java create mode 100644 xinda-server/http-server/src/main/java/com/xinda/http/auth/DigestAuth.java create mode 100644 xinda-server/http-server/src/main/java/com/xinda/http/handler/IHttpReqHandler.java create mode 100644 xinda-server/http-server/src/main/java/com/xinda/http/handler/IHttpResHandler.java create mode 100644 xinda-server/http-server/src/main/java/com/xinda/http/handler/req/EventHttpReqHandler.java create mode 100644 xinda-server/http-server/src/main/java/com/xinda/http/handler/req/InfoHttpReqHandler.java create mode 100644 xinda-server/http-server/src/main/java/com/xinda/http/handler/req/KeepaliveHttpReqHandler.java create mode 100644 xinda-server/http-server/src/main/java/com/xinda/http/handler/req/MonitorHttpReqHandler.java create mode 100644 xinda-server/http-server/src/main/java/com/xinda/http/handler/req/PropertyHttpReqHandler.java create mode 100644 xinda-server/http-server/src/main/java/com/xinda/http/manager/HttpSessionManager.java create mode 100644 xinda-server/http-server/src/main/java/com/xinda/http/manager/NettyHttpSession.java create mode 100644 xinda-server/http-server/src/main/java/com/xinda/http/server/HttpListener.java create mode 100644 xinda-server/http-server/src/main/java/com/xinda/http/server/HttpServer.java create mode 100644 xinda-server/http-server/src/main/java/com/xinda/http/server/HttpServerHandler.java create mode 100644 xinda-server/http-server/src/main/java/com/xinda/http/service/IHttpMqttService.java create mode 100644 xinda-server/http-server/src/main/java/com/xinda/http/service/impl/HttpMqttServiceImpl.java create mode 100644 xinda-server/http-server/src/main/java/com/xinda/http/utils/DigestAuthUtil.java create mode 100644 xinda-server/iot-server-core/pom.xml create mode 100644 xinda-server/iot-server-core/src/main/java/com/xinda/server/Server.java create mode 100644 xinda-server/iot-server-core/src/main/java/com/xinda/server/TCPServer.java create mode 100644 xinda-server/iot-server-core/src/main/java/com/xinda/server/UDPServer.java create mode 100644 xinda-server/iot-server-core/src/main/java/com/xinda/server/config/NettyConfig.java create mode 100644 xinda-server/iot-server-core/src/main/java/com/xinda/server/handler/DelimiterBasedFrameDecoder.java create mode 100644 xinda-server/iot-server-core/src/main/java/com/xinda/server/handler/DispatcherHandler.java create mode 100644 xinda-server/iot-server-core/src/main/java/com/xinda/server/handler/LengthFieldAndDelimiterFrameDecoder.java create mode 100644 xinda-server/iot-server-core/src/main/java/com/xinda/server/handler/MessageDecoderWrapper.java create mode 100644 xinda-server/iot-server-core/src/main/java/com/xinda/server/handler/MessageEncoderWrapper.java create mode 100644 xinda-server/iot-server-core/src/main/java/com/xinda/server/handler/TCPMessageAdapter.java create mode 100644 xinda-server/iot-server-core/src/main/java/com/xinda/server/handler/UDPMessageAdapter.java create mode 100644 xinda-server/mqtt-broker/pom.xml create mode 100644 xinda-server/mqtt-broker/src/main/java/com/xinda/mqtt/annotation/Process.java create mode 100644 xinda-server/mqtt-broker/src/main/java/com/xinda/mqtt/auth/AuthService.java create mode 100644 xinda-server/mqtt-broker/src/main/java/com/xinda/mqtt/codec/WebSocketMqttCodec.java create mode 100644 xinda-server/mqtt-broker/src/main/java/com/xinda/mqtt/handler/MqttConnect.java create mode 100644 xinda-server/mqtt-broker/src/main/java/com/xinda/mqtt/handler/MqttDisConnect.java create mode 100644 xinda-server/mqtt-broker/src/main/java/com/xinda/mqtt/handler/MqttPingreq.java create mode 100644 xinda-server/mqtt-broker/src/main/java/com/xinda/mqtt/handler/MqttPubAck.java create mode 100644 xinda-server/mqtt-broker/src/main/java/com/xinda/mqtt/handler/MqttPubRec.java create mode 100644 xinda-server/mqtt-broker/src/main/java/com/xinda/mqtt/handler/MqttPubRel.java create mode 100644 xinda-server/mqtt-broker/src/main/java/com/xinda/mqtt/handler/MqttPubcomp.java create mode 100644 xinda-server/mqtt-broker/src/main/java/com/xinda/mqtt/handler/MqttPublish.java create mode 100644 xinda-server/mqtt-broker/src/main/java/com/xinda/mqtt/handler/MqttSubscribe.java create mode 100644 xinda-server/mqtt-broker/src/main/java/com/xinda/mqtt/handler/MqttUnsubscribe.java create mode 100644 xinda-server/mqtt-broker/src/main/java/com/xinda/mqtt/handler/adapter/MqttHandler.java create mode 100644 xinda-server/mqtt-broker/src/main/java/com/xinda/mqtt/handler/adapter/MqttMessageAdapter.java create mode 100644 xinda-server/mqtt-broker/src/main/java/com/xinda/mqtt/handler/adapter/MqttMessageDelegate.java create mode 100644 xinda-server/mqtt-broker/src/main/java/com/xinda/mqtt/manager/ClientManager.java create mode 100644 xinda-server/mqtt-broker/src/main/java/com/xinda/mqtt/manager/MqttRemoteManager.java create mode 100644 xinda-server/mqtt-broker/src/main/java/com/xinda/mqtt/manager/ResponseManager.java create mode 100644 xinda-server/mqtt-broker/src/main/java/com/xinda/mqtt/manager/RetainMsgManager.java create mode 100644 xinda-server/mqtt-broker/src/main/java/com/xinda/mqtt/manager/SessionManger.java create mode 100644 xinda-server/mqtt-broker/src/main/java/com/xinda/mqtt/manager/WillMessageManager.java create mode 100644 xinda-server/mqtt-broker/src/main/java/com/xinda/mqtt/model/ClientMessage.java create mode 100644 xinda-server/mqtt-broker/src/main/java/com/xinda/mqtt/model/PushMessageBo.java create mode 100644 xinda-server/mqtt-broker/src/main/java/com/xinda/mqtt/model/RetainMessage.java create mode 100644 xinda-server/mqtt-broker/src/main/java/com/xinda/mqtt/model/Subscribe.java create mode 100644 xinda-server/mqtt-broker/src/main/java/com/xinda/mqtt/model/WillMessage.java create mode 100644 xinda-server/mqtt-broker/src/main/java/com/xinda/mqtt/server/MqttServer.java create mode 100644 xinda-server/mqtt-broker/src/main/java/com/xinda/mqtt/server/WebSocketServer.java create mode 100644 xinda-server/mqtt-broker/src/main/java/com/xinda/mqtt/service/IMessageStore.java create mode 100644 xinda-server/mqtt-broker/src/main/java/com/xinda/mqtt/service/ISubscriptionService.java create mode 100644 xinda-server/mqtt-broker/src/main/java/com/xinda/mqtt/service/impl/DataHandlerImpl.java create mode 100644 xinda-server/mqtt-broker/src/main/java/com/xinda/mqtt/service/impl/DeviceReportMessageServiceImpl.java create mode 100644 xinda-server/mqtt-broker/src/main/java/com/xinda/mqtt/service/impl/DeviceTestHandler.java create mode 100644 xinda-server/mqtt-broker/src/main/java/com/xinda/mqtt/service/impl/MessageStoreImpl.java create mode 100644 xinda-server/mqtt-broker/src/main/java/com/xinda/mqtt/service/impl/MqttMessagePublishImpl.java create mode 100644 xinda-server/mqtt-broker/src/main/java/com/xinda/mqtt/service/impl/SubscriptionServiceImpl.java create mode 100644 xinda-server/mqtt-broker/src/main/java/com/xinda/mqtt/utils/MqttMessageUtils.java create mode 100644 xinda-server/pom.xml create mode 100644 xinda-server/sip-server/README.md create mode 100644 xinda-server/sip-server/pom.xml create mode 100644 xinda-server/sip-server/src/main/java/com/xinda/sip/conf/SysSipConfig.java create mode 100644 xinda-server/sip-server/src/main/java/com/xinda/sip/conf/ThreadPoolTaskConfig.java create mode 100644 xinda-server/sip-server/src/main/java/com/xinda/sip/domain/BindingChannel.java create mode 100644 xinda-server/sip-server/src/main/java/com/xinda/sip/domain/MediaServer.java create mode 100644 xinda-server/sip-server/src/main/java/com/xinda/sip/domain/SipConfig.java create mode 100644 xinda-server/sip-server/src/main/java/com/xinda/sip/domain/SipDevice.java create mode 100644 xinda-server/sip-server/src/main/java/com/xinda/sip/domain/SipDeviceChannel.java create mode 100644 xinda-server/sip-server/src/main/java/com/xinda/sip/enums/AlarmMethod.java create mode 100644 xinda-server/sip-server/src/main/java/com/xinda/sip/enums/AlarmType.java create mode 100644 xinda-server/sip-server/src/main/java/com/xinda/sip/enums/ChannelStatus.java create mode 100644 xinda-server/sip-server/src/main/java/com/xinda/sip/enums/ChannelType.java create mode 100644 xinda-server/sip-server/src/main/java/com/xinda/sip/enums/DeviceChannelStatus.java create mode 100644 xinda-server/sip-server/src/main/java/com/xinda/sip/enums/Direct.java create mode 100644 xinda-server/sip-server/src/main/java/com/xinda/sip/enums/FunctionType.java create mode 100644 xinda-server/sip-server/src/main/java/com/xinda/sip/enums/PTZCmd.java create mode 100644 xinda-server/sip-server/src/main/java/com/xinda/sip/enums/PTZType.java create mode 100644 xinda-server/sip-server/src/main/java/com/xinda/sip/enums/SessionType.java create mode 100644 xinda-server/sip-server/src/main/java/com/xinda/sip/handler/IReqHandler.java create mode 100644 xinda-server/sip-server/src/main/java/com/xinda/sip/handler/IResHandler.java create mode 100644 xinda-server/sip-server/src/main/java/com/xinda/sip/handler/req/AckReqHandler.java create mode 100644 xinda-server/sip-server/src/main/java/com/xinda/sip/handler/req/ByeReqHandler.java create mode 100644 xinda-server/sip-server/src/main/java/com/xinda/sip/handler/req/CancelReqHandler.java create mode 100644 xinda-server/sip-server/src/main/java/com/xinda/sip/handler/req/InviteReqHandler.java create mode 100644 xinda-server/sip-server/src/main/java/com/xinda/sip/handler/req/RegisterReqHandler.java create mode 100644 xinda-server/sip-server/src/main/java/com/xinda/sip/handler/req/ReqAbstractHandler.java create mode 100644 xinda-server/sip-server/src/main/java/com/xinda/sip/handler/req/UnknowReqHandler.java create mode 100644 xinda-server/sip-server/src/main/java/com/xinda/sip/handler/req/message/IMessageHandler.java create mode 100644 xinda-server/sip-server/src/main/java/com/xinda/sip/handler/req/message/MessageHandlerAbstract.java create mode 100644 xinda-server/sip-server/src/main/java/com/xinda/sip/handler/req/message/MessageRequestProcessor.java create mode 100644 xinda-server/sip-server/src/main/java/com/xinda/sip/handler/req/message/notify/NotifyMessageHandler.java create mode 100644 xinda-server/sip-server/src/main/java/com/xinda/sip/handler/req/message/notify/cmdType/AlarmHandler.java create mode 100644 xinda-server/sip-server/src/main/java/com/xinda/sip/handler/req/message/notify/cmdType/KeepaliveHandler.java create mode 100644 xinda-server/sip-server/src/main/java/com/xinda/sip/handler/req/message/notify/cmdType/MediaStatusHandler.java create mode 100644 xinda-server/sip-server/src/main/java/com/xinda/sip/handler/req/message/notify/cmdType/MobilePositionHandler.java create mode 100644 xinda-server/sip-server/src/main/java/com/xinda/sip/handler/req/message/response/ResponseMessageHandler.java create mode 100644 xinda-server/sip-server/src/main/java/com/xinda/sip/handler/req/message/response/cmdType/AlarmRHandler.java create mode 100644 xinda-server/sip-server/src/main/java/com/xinda/sip/handler/req/message/response/cmdType/CatalogHandler.java create mode 100644 xinda-server/sip-server/src/main/java/com/xinda/sip/handler/req/message/response/cmdType/ConfigDownloadHandler.java create mode 100644 xinda-server/sip-server/src/main/java/com/xinda/sip/handler/req/message/response/cmdType/DeviceConfigHandler.java create mode 100644 xinda-server/sip-server/src/main/java/com/xinda/sip/handler/req/message/response/cmdType/DeviceControlHandler.java create mode 100644 xinda-server/sip-server/src/main/java/com/xinda/sip/handler/req/message/response/cmdType/DeviceInfoHandler.java create mode 100644 xinda-server/sip-server/src/main/java/com/xinda/sip/handler/req/message/response/cmdType/DeviceStatusHandler.java create mode 100644 xinda-server/sip-server/src/main/java/com/xinda/sip/handler/req/message/response/cmdType/MobilePositionRHandler.java create mode 100644 xinda-server/sip-server/src/main/java/com/xinda/sip/handler/req/message/response/cmdType/RecordInfoHandler.java create mode 100644 xinda-server/sip-server/src/main/java/com/xinda/sip/handler/res/ByeResHandler.java create mode 100644 xinda-server/sip-server/src/main/java/com/xinda/sip/handler/res/CancelResHandler.java create mode 100644 xinda-server/sip-server/src/main/java/com/xinda/sip/handler/res/InviteResHandler.java create mode 100644 xinda-server/sip-server/src/main/java/com/xinda/sip/handler/res/UnknowResHandler.java create mode 100644 xinda-server/sip-server/src/main/java/com/xinda/sip/mapper/MediaServerMapper.java create mode 100644 xinda-server/sip-server/src/main/java/com/xinda/sip/mapper/SipConfigMapper.java create mode 100644 xinda-server/sip-server/src/main/java/com/xinda/sip/mapper/SipDeviceChannelMapper.java create mode 100644 xinda-server/sip-server/src/main/java/com/xinda/sip/mapper/SipDeviceMapper.java create mode 100644 xinda-server/sip-server/src/main/java/com/xinda/sip/model/BaseTree.java create mode 100644 xinda-server/sip-server/src/main/java/com/xinda/sip/model/GB28181DeviceChannel.java create mode 100644 xinda-server/sip-server/src/main/java/com/xinda/sip/model/InviteInfo.java create mode 100644 xinda-server/sip-server/src/main/java/com/xinda/sip/model/MediaServerConfig.java create mode 100644 xinda-server/sip-server/src/main/java/com/xinda/sip/model/PtzDirectionInput.java create mode 100644 xinda-server/sip-server/src/main/java/com/xinda/sip/model/PtzscaleInput.java create mode 100644 xinda-server/sip-server/src/main/java/com/xinda/sip/model/RecordInput.java create mode 100644 xinda-server/sip-server/src/main/java/com/xinda/sip/model/RecordItem.java create mode 100644 xinda-server/sip-server/src/main/java/com/xinda/sip/model/RecordList.java create mode 100644 xinda-server/sip-server/src/main/java/com/xinda/sip/model/RequestMessage.java create mode 100644 xinda-server/sip-server/src/main/java/com/xinda/sip/model/SipDate.java create mode 100644 xinda-server/sip-server/src/main/java/com/xinda/sip/model/SipDeviceSummary.java create mode 100644 xinda-server/sip-server/src/main/java/com/xinda/sip/model/Stream.java create mode 100644 xinda-server/sip-server/src/main/java/com/xinda/sip/model/StreamURL.java create mode 100644 xinda-server/sip-server/src/main/java/com/xinda/sip/model/VideoSessionInfo.java create mode 100644 xinda-server/sip-server/src/main/java/com/xinda/sip/model/ZlmMediaServer.java create mode 100644 xinda-server/sip-server/src/main/java/com/xinda/sip/server/IGBListener.java create mode 100644 xinda-server/sip-server/src/main/java/com/xinda/sip/server/IRtspCmd.java create mode 100644 xinda-server/sip-server/src/main/java/com/xinda/sip/server/ISipCmd.java create mode 100644 xinda-server/sip-server/src/main/java/com/xinda/sip/server/MessageInvoker.java create mode 100644 xinda-server/sip-server/src/main/java/com/xinda/sip/server/NullSipProvider.java create mode 100644 xinda-server/sip-server/src/main/java/com/xinda/sip/server/RecordCacheManager.java create mode 100644 xinda-server/sip-server/src/main/java/com/xinda/sip/server/ReqMsgHeaderBuilder.java create mode 100644 xinda-server/sip-server/src/main/java/com/xinda/sip/server/RequestBuilder.java create mode 100644 xinda-server/sip-server/src/main/java/com/xinda/sip/server/SipLayer.java create mode 100644 xinda-server/sip-server/src/main/java/com/xinda/sip/server/SipMessage.java create mode 100644 xinda-server/sip-server/src/main/java/com/xinda/sip/server/VideoSessionManager.java create mode 100644 xinda-server/sip-server/src/main/java/com/xinda/sip/server/impl/GBListenerImpl.java create mode 100644 xinda-server/sip-server/src/main/java/com/xinda/sip/server/impl/MessageInvokerImpl.java create mode 100644 xinda-server/sip-server/src/main/java/com/xinda/sip/server/impl/RequestBuilderImpl.java create mode 100644 xinda-server/sip-server/src/main/java/com/xinda/sip/server/impl/RtspCmdImpl.java create mode 100644 xinda-server/sip-server/src/main/java/com/xinda/sip/server/impl/SipCmdImpl.java create mode 100644 xinda-server/sip-server/src/main/java/com/xinda/sip/server/msg/Alarm.java create mode 100644 xinda-server/sip-server/src/main/java/com/xinda/sip/server/msg/CatalogInfo.java create mode 100644 xinda-server/sip-server/src/main/java/com/xinda/sip/server/msg/ConfigDownload.java create mode 100644 xinda-server/sip-server/src/main/java/com/xinda/sip/server/msg/DeviceControl.java create mode 100644 xinda-server/sip-server/src/main/java/com/xinda/sip/server/msg/GB28181Device.java create mode 100644 xinda-server/sip-server/src/main/java/com/xinda/sip/server/msg/KeepaliveMessage.java create mode 100644 xinda-server/sip-server/src/main/java/com/xinda/sip/service/IGatewayService.java create mode 100644 xinda-server/sip-server/src/main/java/com/xinda/sip/service/IInviteService.java create mode 100644 xinda-server/sip-server/src/main/java/com/xinda/sip/service/IMediaServerService.java create mode 100644 xinda-server/sip-server/src/main/java/com/xinda/sip/service/IMqttService.java create mode 100644 xinda-server/sip-server/src/main/java/com/xinda/sip/service/IPlayService.java create mode 100644 xinda-server/sip-server/src/main/java/com/xinda/sip/service/IPtzCmdService.java create mode 100644 xinda-server/sip-server/src/main/java/com/xinda/sip/service/IRecordService.java create mode 100644 xinda-server/sip-server/src/main/java/com/xinda/sip/service/ISipCacheService.java create mode 100644 xinda-server/sip-server/src/main/java/com/xinda/sip/service/ISipConfigService.java create mode 100644 xinda-server/sip-server/src/main/java/com/xinda/sip/service/ISipDeviceChannelService.java create mode 100644 xinda-server/sip-server/src/main/java/com/xinda/sip/service/ISipDeviceService.java create mode 100644 xinda-server/sip-server/src/main/java/com/xinda/sip/service/IZmlHookService.java create mode 100644 xinda-server/sip-server/src/main/java/com/xinda/sip/service/impl/GatewayServiceImpl.java create mode 100644 xinda-server/sip-server/src/main/java/com/xinda/sip/service/impl/InviteServiceImpl.java create mode 100644 xinda-server/sip-server/src/main/java/com/xinda/sip/service/impl/MediaServerServiceImpl.java create mode 100644 xinda-server/sip-server/src/main/java/com/xinda/sip/service/impl/PlayServiceImpl.java create mode 100644 xinda-server/sip-server/src/main/java/com/xinda/sip/service/impl/PtzCmdServiceImpl.java create mode 100644 xinda-server/sip-server/src/main/java/com/xinda/sip/service/impl/RecordServiceImpl.java create mode 100644 xinda-server/sip-server/src/main/java/com/xinda/sip/service/impl/SipCacheServiceImpl.java create mode 100644 xinda-server/sip-server/src/main/java/com/xinda/sip/service/impl/SipConfigServiceImpl.java create mode 100644 xinda-server/sip-server/src/main/java/com/xinda/sip/service/impl/SipDeviceChannelServiceImpl.java create mode 100644 xinda-server/sip-server/src/main/java/com/xinda/sip/service/impl/SipDeviceServiceImpl.java create mode 100644 xinda-server/sip-server/src/main/java/com/xinda/sip/service/impl/VideoMqttService.java create mode 100644 xinda-server/sip-server/src/main/java/com/xinda/sip/service/impl/ZmlHookServiceImpl.java create mode 100644 xinda-server/sip-server/src/main/java/com/xinda/sip/util/DigestAuthUtil.java create mode 100644 xinda-server/sip-server/src/main/java/com/xinda/sip/util/RecordApiUtils.java create mode 100644 xinda-server/sip-server/src/main/java/com/xinda/sip/util/SipUtil.java create mode 100644 xinda-server/sip-server/src/main/java/com/xinda/sip/util/WebAsyncUtil.java create mode 100644 xinda-server/sip-server/src/main/java/com/xinda/sip/util/XmlUtil.java create mode 100644 xinda-server/sip-server/src/main/java/com/xinda/sip/util/ZlmApiUtils.java create mode 100644 xinda-server/sip-server/src/main/java/com/xinda/sip/util/result/BaseResult.java create mode 100644 xinda-server/sip-server/src/main/java/com/xinda/sip/util/result/CodeEnum.java create mode 100644 xinda-server/sip-server/src/main/java/com/xinda/sip/util/result/DataResult.java create mode 100644 xinda-server/sip-server/src/main/resources/mapper/MediaServerMapper.xml create mode 100644 xinda-server/sip-server/src/main/resources/mapper/SipConfigMapper.xml create mode 100644 xinda-server/sip-server/src/main/resources/mapper/SipDeviceChannelMapper.xml create mode 100644 xinda-server/sip-server/src/main/resources/mapper/SipDeviceMapper.xml create mode 100644 xinda-service/pom.xml create mode 100644 xinda-service/xinda-iot-service/pom.xml create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/cache/IDeviceCache.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/cache/IFirmwareCache.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/cache/IModbusConfigCache.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/cache/ITSLCache.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/cache/ITSLValueCache.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/cache/SceneModelTagCache.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/cache/impl/DeviceCacheImpl.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/cache/impl/FirmwareCacheImpl.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/cache/impl/ModbusConfigCacheImpl.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/cache/impl/SceneModelTagCacheImpl.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/cache/impl/TSLCacheImpl.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/cache/impl/TSLValueCacheImpl.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/convert/DeviceRecordConvert.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/domain/Alert.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/domain/AlertLog.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/domain/AlertNotifyTemplate.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/domain/AlertScene.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/domain/Bridge.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/domain/Category.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/domain/CommandPreferences.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/domain/Device.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/domain/DeviceAlertUser.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/domain/DeviceGroup.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/domain/DeviceJob.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/domain/DeviceLog.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/domain/DeviceModel.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/domain/DeviceRecord.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/domain/DeviceShare.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/domain/DeviceUser.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/domain/EventLog.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/domain/Firmware.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/domain/FirmwareTask.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/domain/FirmwareTaskDetail.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/domain/FunctionLog.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/domain/GoviewProject.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/domain/GoviewProjectData.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/domain/Group.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/domain/HttpClient.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/domain/ModbusConfig.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/domain/ModbusJob.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/domain/ModbusParams.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/domain/MqttClient.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/domain/MultipleDataSource.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/domain/News.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/domain/NewsCategory.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/domain/OrderControl.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/domain/Product.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/domain/ProductAuthorize.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/domain/Protocol.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/domain/Scene.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/domain/SceneDevice.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/domain/SceneModel.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/domain/SceneModelData.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/domain/SceneModelDevice.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/domain/SceneModelTag.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/domain/SceneScript.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/domain/SceneTagPoints.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/domain/Script.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/domain/SimulateLog.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/domain/SipRelation.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/domain/SocialPlatform.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/domain/SocialUser.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/domain/SubGateway.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/domain/ThingsModel.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/domain/ThingsModelJsonTemplate.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/domain/ThingsModelTemplate.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/domain/UserSocialProfile.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/domain/ViewConfig.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/enums/DeviceType.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/mapper/AlertLogMapper.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/mapper/AlertMapper.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/mapper/BridgeMapper.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/mapper/CategoryMapper.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/mapper/CommandPreferencesMapper.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/mapper/DeviceAlertUserMapper.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/mapper/DeviceJobMapper.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/mapper/DeviceLogMapper.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/mapper/DeviceMapper.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/mapper/DeviceModelMapper.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/mapper/DeviceRecordMapper.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/mapper/DeviceShareMapper.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/mapper/DeviceUserMapper.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/mapper/EventLogMapper.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/mapper/FirmwareMapper.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/mapper/FirmwareTaskDetailMapper.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/mapper/FirmwareTaskMapper.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/mapper/FunctionLogMapper.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/mapper/GoviewProjectDataMapper.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/mapper/GoviewProjectMapper.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/mapper/GroupMapper.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/mapper/ModbusConfigMapper.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/mapper/ModbusJobMapper.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/mapper/ModbusParamsMapper.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/mapper/MqttClientMapper.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/mapper/NewsCategoryMapper.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/mapper/NewsMapper.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/mapper/OrderControlMapper.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/mapper/ProductAuthorizeMapper.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/mapper/ProductMapper.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/mapper/ProtocolMapper.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/mapper/SceneDeviceMapper.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/mapper/SceneMapper.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/mapper/SceneModelDataMapper.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/mapper/SceneModelDeviceMapper.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/mapper/SceneModelMapper.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/mapper/SceneModelTagMapper.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/mapper/SceneScriptMapper.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/mapper/SceneTagPointsMapper.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/mapper/ScriptMapper.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/mapper/SimulateLogMapper.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/mapper/SipRelationMapper.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/mapper/SocialPlatformMapper.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/mapper/SocialUserMapper.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/mapper/SpeakerMapper.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/mapper/SubGatewayMapper.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/mapper/ThingsModelMapper.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/mapper/ThingsModelTemplateMapper.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/mapper/ViewConfigMapper.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/model/Action.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/model/AlertCountVO.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/model/AlertSceneSendVO.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/model/AuthenticateInputModel.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/model/CategoryNews.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/model/ChangeProductStatusModel.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/model/DataResult.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/model/DeviceAlertCount.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/model/DeviceAlertUserVO.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/model/DeviceAllShortOutput.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/model/DeviceAssignmentVO.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/model/DeviceGroupInput.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/model/DeviceHistoryParam.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/model/DeviceImportVO.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/model/DeviceMqttConnectVO.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/model/DeviceMqttVO.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/model/DeviceNumberAndProductId.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/model/DeviceNumberStatus.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/model/DeviceRecordVO.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/model/DeviceRelateAlertLogVO.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/model/DeviceRelateUserInput.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/model/DeviceReport.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/model/DeviceShortOutput.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/model/DeviceStatistic.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/model/DeviceStatusVO.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/model/EmqxApiConfig.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/model/FirmwareTaskDetailInput.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/model/FirmwareTaskDetailOutput.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/model/FirmwareTaskDeviceStatistic.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/model/FirmwareTaskInput.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/model/HistoryModel.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/model/IdAndName.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/model/IdOutput.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/model/ImportThingsModelInput.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/model/ModbusJobBo.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/model/ModbusPollBo.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/model/MonitorModel.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/model/MqttAuthenticationModel.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/model/MqttClientConfig.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/model/MqttClientConnectModel.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/model/MqttInfoModel.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/model/NtpModel.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/model/ProductAuthenticateModel.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/model/ProductAuthorizeVO.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/model/ProductCode.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/model/RegisterUserInput.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/model/RegisterUserOutput.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/model/SceneDeviceBindVO.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/model/SceneTerminalUserVO.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/model/ScriptCondition.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/model/ScriptTemplate.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/model/SerialNumberVO.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/model/Specs.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/model/ThingsModelItem/ArrayModelOutput.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/model/ThingsModelItem/BoolModelOutput.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/model/ThingsModelItem/Datatype.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/model/ThingsModelItem/DecimalModelOutput.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/model/ThingsModelItem/EnumItem.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/model/ThingsModelItem/EnumItemOutput.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/model/ThingsModelItem/EnumModelOutput.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/model/ThingsModelItem/IntegerModelOutput.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/model/ThingsModelItem/ReadOnlyModelOutput.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/model/ThingsModelItem/StringModelOutput.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/model/ThingsModelItem/ThingsModel.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/model/ThingsModelItem/ThingsModelItemBase.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/model/ThingsModelLogCountVO.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/model/ThingsModelPerm.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/model/ThingsModelSimVO.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/model/ThingsModels/EventDto.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/model/ThingsModels/FunctionDto.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/model/ThingsModels/IdentifierVO.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/model/ThingsModels/PropertyDto.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/model/ThingsModels/ThingsItems.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/model/ThingsModels/ThingsModelShadow.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/model/ThingsModels/ThingsModelValueItem.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/model/ThingsModels/ThingsModelValueItemDto.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/model/ThingsModels/ThingsModelValuesOutput.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/model/ThingsModels/ThingsModelsDto.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/model/ThingsModels/ValueItem.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/model/TriggerParameter.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/model/UserAndTenant.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/model/UserIdDeviceIdModel.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/model/VariableReadVO.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/model/dashBoard/DashMqttMetrics.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/model/dashBoard/DashMqttStat.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/model/dto/DeviceRtDto.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/model/dto/ThingsModelDTO.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/model/gateWay/GateSubDeviceVO.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/model/gateWay/SubDeviceAddVO.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/model/gateWay/SubDeviceListVO.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/model/goview/GoviewProjectVo.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/model/login/AuthRequestWrap.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/model/login/BindIdValue.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/model/login/LoginIdValue.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/model/login/WeChatLoginQrRes.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/model/modbus/ModbusAndThingsVO.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/model/modbus/ModbusConfigVO.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/model/modbus/ModbusDataImport.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/model/modbus/ModbusIoImport.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/model/modbus/ModbusJobVO.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/model/param/DataCenterParam.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/model/scenemodel/CusDeviceVO.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/model/scenemodel/SceneDeviceThingsModelVO.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/model/scenemodel/SceneHistoryParam.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/model/scenemodel/SceneModelDataDTO.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/model/scenemodel/SceneModelDeviceVO.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/model/scenemodel/SceneModelTagCacheVO.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/model/scenemodel/SceneModelTagCycleVO.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/model/speaker/DuerosReportVO.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/model/speaker/OauthAccessTokenReportVO.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/model/speaker/OauthClientDetailsReportVO.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/model/varTemp/DeviceSlavePoint.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/model/varTemp/DeviceTemp.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/model/varTemp/EnumClass.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/model/varTemp/SlaveIdAndId.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/model/varTemp/SyncModel.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/ruleEngine/DataSourceService.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/ruleEngine/HttpBridge.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/ruleEngine/MessageArrivedHandler.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/ruleEngine/MqttBridge.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/ruleEngine/MqttClientFactory.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/ruleEngine/MsgContext.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/ruleEngine/MsgContextService.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/ruleEngine/RuleProcess.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/service/DataCenterService.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/service/IAlertLogService.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/service/IAlertService.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/service/IAuthRequestFactory.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/service/IBridgeService.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/service/ICategoryService.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/service/ICommandPreferencesService.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/service/IDeviceAlertUserService.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/service/IDeviceJobService.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/service/IDeviceLogService.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/service/IDeviceModelService.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/service/IDeviceRecordService.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/service/IDeviceRuntimeService.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/service/IDeviceService.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/service/IDeviceShareService.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/service/IDeviceUserService.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/service/IEventLogService.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/service/IFirmwareService.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/service/IFirmwareTaskDetailService.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/service/IFirmwareTaskService.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/service/IFunctionLogService.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/service/IGoviewProjectDataService.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/service/IGoviewProjectService.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/service/IGroupService.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/service/IHttpClientService.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/service/IModbusConfigService.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/service/IModbusJobService.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/service/IModbusParamsService.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/service/IMqttClientService.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/service/INewsCategoryService.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/service/INewsService.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/service/IOrderControlService.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/service/IProductAuthorizeService.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/service/IProductService.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/service/IProtocolService.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/service/ISceneDeviceService.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/service/ISceneModelDataService.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/service/ISceneModelDeviceService.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/service/ISceneModelService.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/service/ISceneModelTagService.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/service/ISceneScriptService.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/service/ISceneService.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/service/ISceneTagPointsService.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/service/IScriptService.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/service/ISimulateLogService.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/service/ISipRelationService.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/service/ISocialLoginService.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/service/ISocialPlatformService.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/service/ISocialUserService.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/service/ISubGatewayService.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/service/IThingsModelService.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/service/IThingsModelTemplateService.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/service/IToolService.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/service/IUserSocialProfileService.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/service/IViewConfigService.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/service/SpeakerService.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/service/impl/AlertLogServiceImpl.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/service/impl/AlertServiceImpl.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/service/impl/AuthRequestFactoryImpl.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/service/impl/AuthStateRedisCache.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/service/impl/BridgeServiceImpl.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/service/impl/CategoryServiceImpl.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/service/impl/CommandPreferencesServiceImpl.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/service/impl/DataCenterServiceImpl.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/service/impl/DeviceAlertUserServiceImpl.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/service/impl/DeviceLogServiceImpl.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/service/impl/DeviceModelServiceImpl.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/service/impl/DeviceRecordServiceImpl.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/service/impl/DeviceRuntimeServiceImpl.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/service/impl/DeviceServiceImpl.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/service/impl/DeviceShareServiceImpl.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/service/impl/DeviceUserServiceImpl.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/service/impl/EventLogServiceImpl.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/service/impl/FirmwareServiceImpl.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/service/impl/FirmwareTaskDetailServiceImpl.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/service/impl/FirmwareTaskServiceImpl.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/service/impl/FunctionLogServiceImpl.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/service/impl/GoviewProjectDataServiceImpl.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/service/impl/GoviewProjectServiceImpl.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/service/impl/GroupServiceImpl.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/service/impl/HttpClientServiceImpl.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/service/impl/ModbusConfigServiceImpl.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/service/impl/ModbusJobServiceImpl.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/service/impl/ModbusParamsServiceImpl.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/service/impl/MqttClientServiceImpl.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/service/impl/NewsCategoryServiceImpl.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/service/impl/NewsServiceImpl.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/service/impl/OrderControlServiceImpl.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/service/impl/ProductAuthorizeServiceImpl.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/service/impl/ProductServiceImpl.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/service/impl/ProtocolServiceImpl.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/service/impl/SceneDeviceServiceImpl.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/service/impl/SceneModelDataServiceImpl.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/service/impl/SceneModelDeviceServiceImpl.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/service/impl/SceneModelServiceImpl.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/service/impl/SceneModelTagServiceImpl.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/service/impl/SceneScriptServiceImpl.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/service/impl/SceneServiceImpl.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/service/impl/SceneTagPointsServiceImpl.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/service/impl/ScriptServiceImpl.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/service/impl/SimulateLogServiceImpl.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/service/impl/SipRelationServiceImpl.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/service/impl/SocialLoginServiceImpl.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/service/impl/SocialPlatformServiceImpl.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/service/impl/SocialUserServiceImpl.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/service/impl/SpeakerServiceImpl.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/service/impl/SubGatewayServiceImpl.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/service/impl/ThingsModelServiceImpl.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/service/impl/ThingsModelTemplateServiceImpl.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/service/impl/ToolServiceImpl.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/service/impl/UserSocialProfileServiceImpl.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/service/impl/ViewConfigServiceImpl.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/tdengine/config/TDengineConfig.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/tdengine/dao/TDDeviceLogDAO.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/tdengine/init/ApplicationStarted.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/tdengine/service/ILogService.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/tdengine/service/factory/LogServiceFactory.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/tdengine/service/impl/MySqlLogServiceImpl.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/tdengine/service/impl/TdengineLogServiceImpl.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/tdengine/service/model/TdLogDto.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/util/AESUtils.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/util/JobCronUtils.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/util/SnowflakeIdWorker.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/util/VelocityInitializer.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/util/VelocityUtils.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/wechat/WeChatCallbackService.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/wechat/WeChatService.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/wechat/impl/WeChatCallbackServiceImpl.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/wechat/impl/WeChatServiceImpl.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/wechat/vo/WxBindReqVO.java create mode 100644 xinda-service/xinda-iot-service/src/main/java/com/xinda/iot/wechat/vo/WxCancelBindReqVO.java create mode 100644 xinda-service/xinda-iot-service/src/main/resources/mapper/iot/AlertLogMapper.xml create mode 100644 xinda-service/xinda-iot-service/src/main/resources/mapper/iot/AlertMapper.xml create mode 100644 xinda-service/xinda-iot-service/src/main/resources/mapper/iot/BridgeMapper.xml create mode 100644 xinda-service/xinda-iot-service/src/main/resources/mapper/iot/CategoryMapper.xml create mode 100644 xinda-service/xinda-iot-service/src/main/resources/mapper/iot/CommandPreferencesMapper.xml create mode 100644 xinda-service/xinda-iot-service/src/main/resources/mapper/iot/DeviceAlertUserMapper.xml create mode 100644 xinda-service/xinda-iot-service/src/main/resources/mapper/iot/DeviceJobMapper.xml create mode 100644 xinda-service/xinda-iot-service/src/main/resources/mapper/iot/DeviceLogMapper.xml create mode 100644 xinda-service/xinda-iot-service/src/main/resources/mapper/iot/DeviceMapper.xml create mode 100644 xinda-service/xinda-iot-service/src/main/resources/mapper/iot/DeviceModelMapper.xml create mode 100644 xinda-service/xinda-iot-service/src/main/resources/mapper/iot/DeviceRecordMapper.xml create mode 100644 xinda-service/xinda-iot-service/src/main/resources/mapper/iot/DeviceShareMapper.xml create mode 100644 xinda-service/xinda-iot-service/src/main/resources/mapper/iot/DeviceUserMapper.xml create mode 100644 xinda-service/xinda-iot-service/src/main/resources/mapper/iot/EventLogMapper.xml create mode 100644 xinda-service/xinda-iot-service/src/main/resources/mapper/iot/FirmwareMapper.xml create mode 100644 xinda-service/xinda-iot-service/src/main/resources/mapper/iot/FirmwareTaskDetailMapper.xml create mode 100644 xinda-service/xinda-iot-service/src/main/resources/mapper/iot/FirmwareTaskMapper.xml create mode 100644 xinda-service/xinda-iot-service/src/main/resources/mapper/iot/FunctionLogMapper.xml create mode 100644 xinda-service/xinda-iot-service/src/main/resources/mapper/iot/GoviewProjectDataMapper.xml create mode 100644 xinda-service/xinda-iot-service/src/main/resources/mapper/iot/GoviewProjectMapper.xml create mode 100644 xinda-service/xinda-iot-service/src/main/resources/mapper/iot/GroupMapper.xml create mode 100644 xinda-service/xinda-iot-service/src/main/resources/mapper/iot/ModbusConfigMapper.xml create mode 100644 xinda-service/xinda-iot-service/src/main/resources/mapper/iot/ModbusJobMapper.xml create mode 100644 xinda-service/xinda-iot-service/src/main/resources/mapper/iot/ModbusParamsMapper.xml create mode 100644 xinda-service/xinda-iot-service/src/main/resources/mapper/iot/NewsCategoryMapper.xml create mode 100644 xinda-service/xinda-iot-service/src/main/resources/mapper/iot/NewsMapper.xml create mode 100644 xinda-service/xinda-iot-service/src/main/resources/mapper/iot/OrderControlMapper.xml create mode 100644 xinda-service/xinda-iot-service/src/main/resources/mapper/iot/ProductAuthorizeMapper.xml create mode 100644 xinda-service/xinda-iot-service/src/main/resources/mapper/iot/ProductMapper.xml create mode 100644 xinda-service/xinda-iot-service/src/main/resources/mapper/iot/ProtocolMapper.xml create mode 100644 xinda-service/xinda-iot-service/src/main/resources/mapper/iot/SceneDeviceMapper.xml create mode 100644 xinda-service/xinda-iot-service/src/main/resources/mapper/iot/SceneMapper.xml create mode 100644 xinda-service/xinda-iot-service/src/main/resources/mapper/iot/SceneModelDataMapper.xml create mode 100644 xinda-service/xinda-iot-service/src/main/resources/mapper/iot/SceneModelDeviceMapper.xml create mode 100644 xinda-service/xinda-iot-service/src/main/resources/mapper/iot/SceneModelMapper.xml create mode 100644 xinda-service/xinda-iot-service/src/main/resources/mapper/iot/SceneModelTagMapper.xml create mode 100644 xinda-service/xinda-iot-service/src/main/resources/mapper/iot/SceneScriptMapper.xml create mode 100644 xinda-service/xinda-iot-service/src/main/resources/mapper/iot/SceneTagPointsMapper.xml create mode 100644 xinda-service/xinda-iot-service/src/main/resources/mapper/iot/ScriptMapper.xml create mode 100644 xinda-service/xinda-iot-service/src/main/resources/mapper/iot/SimulateLogMapper.xml create mode 100644 xinda-service/xinda-iot-service/src/main/resources/mapper/iot/SipRelationMapper.xml create mode 100644 xinda-service/xinda-iot-service/src/main/resources/mapper/iot/SocialPlatformMapper.xml create mode 100644 xinda-service/xinda-iot-service/src/main/resources/mapper/iot/SocialUserMapper.xml create mode 100644 xinda-service/xinda-iot-service/src/main/resources/mapper/iot/SpeakerMapper.xml create mode 100644 xinda-service/xinda-iot-service/src/main/resources/mapper/iot/SubGatewayMapper.xml create mode 100644 xinda-service/xinda-iot-service/src/main/resources/mapper/iot/ThingsModelMapper.xml create mode 100644 xinda-service/xinda-iot-service/src/main/resources/mapper/iot/ThingsModelTemplateMapper.xml create mode 100644 xinda-service/xinda-iot-service/src/main/resources/mapper/iot/ViewConfigMapper.xml create mode 100644 xinda-service/xinda-iot-service/src/main/resources/mapper/tdengine/TDDeviceLogMapper.xml create mode 100644 xinda-service/xinda-iot-service/src/main/resources/vm/java/controller.java.vm create mode 100644 xinda-service/xinda-iot-service/src/main/resources/vm/java/domain.java.vm create mode 100644 xinda-service/xinda-iot-service/src/main/resources/vm/java/mapper.java.vm create mode 100644 xinda-service/xinda-iot-service/src/main/resources/vm/java/service.java.vm create mode 100644 xinda-service/xinda-iot-service/src/main/resources/vm/java/serviceImpl.java.vm create mode 100644 xinda-service/xinda-iot-service/src/main/resources/vm/java/sub-domain.java.vm create mode 100644 xinda-service/xinda-iot-service/src/main/resources/vm/js/api.js.vm create mode 100644 xinda-service/xinda-iot-service/src/main/resources/vm/sql/sql.vm create mode 100644 xinda-service/xinda-iot-service/src/main/resources/vm/vue/index-tree.vue.vm create mode 100644 xinda-service/xinda-iot-service/src/main/resources/vm/vue/index.vue.vm create mode 100644 xinda-service/xinda-iot-service/src/main/resources/vm/xml/mapper.xml.vm create mode 100644 xinda-service/xinda-system-service/pom.xml create mode 100644 xinda-service/xinda-system-service/src/main/java/com/xinda/system/domain/AppLanguage.java create mode 100644 xinda-service/xinda-system-service/src/main/java/com/xinda/system/domain/AppPreferences.java create mode 100644 xinda-service/xinda-system-service/src/main/java/com/xinda/system/domain/SysCache.java create mode 100644 xinda-service/xinda-system-service/src/main/java/com/xinda/system/domain/SysClient.java create mode 100644 xinda-service/xinda-system-service/src/main/java/com/xinda/system/domain/SysConfig.java create mode 100644 xinda-service/xinda-system-service/src/main/java/com/xinda/system/domain/SysLogininfor.java create mode 100644 xinda-service/xinda-system-service/src/main/java/com/xinda/system/domain/SysNotice.java create mode 100644 xinda-service/xinda-system-service/src/main/java/com/xinda/system/domain/SysOperLog.java create mode 100644 xinda-service/xinda-system-service/src/main/java/com/xinda/system/domain/SysPost.java create mode 100644 xinda-service/xinda-system-service/src/main/java/com/xinda/system/domain/SysRoleDept.java create mode 100644 xinda-service/xinda-system-service/src/main/java/com/xinda/system/domain/SysRoleMenu.java create mode 100644 xinda-service/xinda-system-service/src/main/java/com/xinda/system/domain/SysUserOnline.java create mode 100644 xinda-service/xinda-system-service/src/main/java/com/xinda/system/domain/SysUserPost.java create mode 100644 xinda-service/xinda-system-service/src/main/java/com/xinda/system/domain/SysUserRole.java create mode 100644 xinda-service/xinda-system-service/src/main/java/com/xinda/system/domain/vo/MetaVo.java create mode 100644 xinda-service/xinda-system-service/src/main/java/com/xinda/system/domain/vo/RouterVo.java create mode 100644 xinda-service/xinda-system-service/src/main/java/com/xinda/system/domain/vo/SysDeptTypeVO.java create mode 100644 xinda-service/xinda-system-service/src/main/java/com/xinda/system/enums/Language.java create mode 100644 xinda-service/xinda-system-service/src/main/java/com/xinda/system/mapper/AppLanguageMapper.java create mode 100644 xinda-service/xinda-system-service/src/main/java/com/xinda/system/mapper/AppPreferencesMapper.java create mode 100644 xinda-service/xinda-system-service/src/main/java/com/xinda/system/mapper/SysClientMapper.java create mode 100644 xinda-service/xinda-system-service/src/main/java/com/xinda/system/mapper/SysConfigMapper.java create mode 100644 xinda-service/xinda-system-service/src/main/java/com/xinda/system/mapper/SysDeptMapper.java create mode 100644 xinda-service/xinda-system-service/src/main/java/com/xinda/system/mapper/SysDictDataMapper.java create mode 100644 xinda-service/xinda-system-service/src/main/java/com/xinda/system/mapper/SysDictTypeMapper.java create mode 100644 xinda-service/xinda-system-service/src/main/java/com/xinda/system/mapper/SysLogininforMapper.java create mode 100644 xinda-service/xinda-system-service/src/main/java/com/xinda/system/mapper/SysMenuMapper.java create mode 100644 xinda-service/xinda-system-service/src/main/java/com/xinda/system/mapper/SysNoticeMapper.java create mode 100644 xinda-service/xinda-system-service/src/main/java/com/xinda/system/mapper/SysOperLogMapper.java create mode 100644 xinda-service/xinda-system-service/src/main/java/com/xinda/system/mapper/SysPostMapper.java create mode 100644 xinda-service/xinda-system-service/src/main/java/com/xinda/system/mapper/SysRoleDeptMapper.java create mode 100644 xinda-service/xinda-system-service/src/main/java/com/xinda/system/mapper/SysRoleMapper.java create mode 100644 xinda-service/xinda-system-service/src/main/java/com/xinda/system/mapper/SysRoleMenuMapper.java create mode 100644 xinda-service/xinda-system-service/src/main/java/com/xinda/system/mapper/SysTranslateMapper.java create mode 100644 xinda-service/xinda-system-service/src/main/java/com/xinda/system/mapper/SysUserMapper.java create mode 100644 xinda-service/xinda-system-service/src/main/java/com/xinda/system/mapper/SysUserPostMapper.java create mode 100644 xinda-service/xinda-system-service/src/main/java/com/xinda/system/mapper/SysUserRoleMapper.java create mode 100644 xinda-service/xinda-system-service/src/main/java/com/xinda/system/service/IAppLanguageService.java create mode 100644 xinda-service/xinda-system-service/src/main/java/com/xinda/system/service/IAppPreferencesService.java create mode 100644 xinda-service/xinda-system-service/src/main/java/com/xinda/system/service/ISysClientService.java create mode 100644 xinda-service/xinda-system-service/src/main/java/com/xinda/system/service/ISysConfigService.java create mode 100644 xinda-service/xinda-system-service/src/main/java/com/xinda/system/service/ISysDeptService.java create mode 100644 xinda-service/xinda-system-service/src/main/java/com/xinda/system/service/ISysDictDataService.java create mode 100644 xinda-service/xinda-system-service/src/main/java/com/xinda/system/service/ISysDictTypeService.java create mode 100644 xinda-service/xinda-system-service/src/main/java/com/xinda/system/service/ISysLogininforService.java create mode 100644 xinda-service/xinda-system-service/src/main/java/com/xinda/system/service/ISysMenuService.java create mode 100644 xinda-service/xinda-system-service/src/main/java/com/xinda/system/service/ISysNoticeService.java create mode 100644 xinda-service/xinda-system-service/src/main/java/com/xinda/system/service/ISysOperLogService.java create mode 100644 xinda-service/xinda-system-service/src/main/java/com/xinda/system/service/ISysPostService.java create mode 100644 xinda-service/xinda-system-service/src/main/java/com/xinda/system/service/ISysRoleService.java create mode 100644 xinda-service/xinda-system-service/src/main/java/com/xinda/system/service/ISysTranslateService.java create mode 100644 xinda-service/xinda-system-service/src/main/java/com/xinda/system/service/ISysUserOnlineService.java create mode 100644 xinda-service/xinda-system-service/src/main/java/com/xinda/system/service/ISysUserService.java create mode 100644 xinda-service/xinda-system-service/src/main/java/com/xinda/system/service/impl/AppLanguageServiceImpl.java create mode 100644 xinda-service/xinda-system-service/src/main/java/com/xinda/system/service/impl/AppPreferencesServiceImpl.java create mode 100644 xinda-service/xinda-system-service/src/main/java/com/xinda/system/service/impl/SysClientServiceImpl.java create mode 100644 xinda-service/xinda-system-service/src/main/java/com/xinda/system/service/impl/SysConfigServiceImpl.java create mode 100644 xinda-service/xinda-system-service/src/main/java/com/xinda/system/service/impl/SysDeptServiceImpl.java create mode 100644 xinda-service/xinda-system-service/src/main/java/com/xinda/system/service/impl/SysDictDataServiceImpl.java create mode 100644 xinda-service/xinda-system-service/src/main/java/com/xinda/system/service/impl/SysDictTypeServiceImpl.java create mode 100644 xinda-service/xinda-system-service/src/main/java/com/xinda/system/service/impl/SysLogininforServiceImpl.java create mode 100644 xinda-service/xinda-system-service/src/main/java/com/xinda/system/service/impl/SysMenuServiceImpl.java create mode 100644 xinda-service/xinda-system-service/src/main/java/com/xinda/system/service/impl/SysNoticeServiceImpl.java create mode 100644 xinda-service/xinda-system-service/src/main/java/com/xinda/system/service/impl/SysOperLogServiceImpl.java create mode 100644 xinda-service/xinda-system-service/src/main/java/com/xinda/system/service/impl/SysPostServiceImpl.java create mode 100644 xinda-service/xinda-system-service/src/main/java/com/xinda/system/service/impl/SysRoleServiceImpl.java create mode 100644 xinda-service/xinda-system-service/src/main/java/com/xinda/system/service/impl/SysTranslateServiceImpl.java create mode 100644 xinda-service/xinda-system-service/src/main/java/com/xinda/system/service/impl/SysUserOnlineServiceImpl.java create mode 100644 xinda-service/xinda-system-service/src/main/java/com/xinda/system/service/impl/SysUserServiceImpl.java create mode 100644 xinda-service/xinda-system-service/src/main/resources/mapper/system/AppLanguageMapper.xml create mode 100644 xinda-service/xinda-system-service/src/main/resources/mapper/system/AppPreferencesMapper.xml create mode 100644 xinda-service/xinda-system-service/src/main/resources/mapper/system/SysClientMapper.xml create mode 100644 xinda-service/xinda-system-service/src/main/resources/mapper/system/SysConfigMapper.xml create mode 100644 xinda-service/xinda-system-service/src/main/resources/mapper/system/SysDeptMapper.xml create mode 100644 xinda-service/xinda-system-service/src/main/resources/mapper/system/SysDictDataMapper.xml create mode 100644 xinda-service/xinda-system-service/src/main/resources/mapper/system/SysDictTypeMapper.xml create mode 100644 xinda-service/xinda-system-service/src/main/resources/mapper/system/SysLogininforMapper.xml create mode 100644 xinda-service/xinda-system-service/src/main/resources/mapper/system/SysMenuMapper.xml create mode 100644 xinda-service/xinda-system-service/src/main/resources/mapper/system/SysNoticeMapper.xml create mode 100644 xinda-service/xinda-system-service/src/main/resources/mapper/system/SysOperLogMapper.xml create mode 100644 xinda-service/xinda-system-service/src/main/resources/mapper/system/SysPostMapper.xml create mode 100644 xinda-service/xinda-system-service/src/main/resources/mapper/system/SysRoleDeptMapper.xml create mode 100644 xinda-service/xinda-system-service/src/main/resources/mapper/system/SysRoleMapper.xml create mode 100644 xinda-service/xinda-system-service/src/main/resources/mapper/system/SysRoleMenuMapper.xml create mode 100644 xinda-service/xinda-system-service/src/main/resources/mapper/system/SysTranslateMapper.xml create mode 100644 xinda-service/xinda-system-service/src/main/resources/mapper/system/SysUserMapper.xml create mode 100644 xinda-service/xinda-system-service/src/main/resources/mapper/system/SysUserPostMapper.xml create mode 100644 xinda-service/xinda-system-service/src/main/resources/mapper/system/SysUserRoleMapper.xml create mode 100644 xinda.bat create mode 100644 xinda.sh diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..9562f1b --- /dev/null +++ b/.gitignore @@ -0,0 +1,46 @@ +###################################################################### +# Build Tools +.gradle +/build/ +!gradle/wrapper/gradle-wrapper.jar + +target/ +!.mvn/wrapper/maven-wrapper.jar + +###################################################################### +# IDE + +### STS ### +.apt_generated +.classpath +.factorypath +.project +.settings +.springBeans + +### IntelliJ IDEA ### +.idea +*.iws +*.iml +*.ipr +../.idea + +### NetBeans ### +nbproject/private/ +build/* +nbbuild/ +dist/ +nbdist/ +.nb-gradle/ + +###################################################################### +# Others +*.log +*.xml.versionsBackup +*.swp + +own-* + +!*/build/*.java +!*/build/*.html +!*/build/*.xml diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..8564f29 --- /dev/null +++ b/LICENSE @@ -0,0 +1,20 @@ +The MIT License (MIT) + +Copyright (c) 2018 RuoYi + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..6193826 --- /dev/null +++ b/README.md @@ -0,0 +1,86 @@ +## 平台简介 + +若依是一套全部开源的快速开发平台,毫无保留给个人及企业免费使用。 + +* 前端采用Vue、Element UI。 +* 后端采用Spring Boot、Spring Security、Redis & Jwt。 +* 权限认证使用Jwt,支持多终端认证系统。 +* 支持加载动态权限菜单,多方式轻松权限控制。 +* 高效率开发,使用代码生成器可以一键生成前后端代码。 +* 提供了技术栈([Vue3](https://v3.cn.vuejs.org) [Element Plus](https://element-plus.org/zh-CN) [Vite](https://cn.vitejs.dev))版本[RuoYi-Vue3](https://github.com/yangzongzhuan/RuoYi-Vue3),保持同步更新。 +* 提供了单应用版本[RuoYi-Vue-fast](https://github.com/yangzongzhuan/RuoYi-Vue-fast),Oracle版本[RuoYi-Vue-Oracle](https://github.com/yangzongzhuan/RuoYi-Vue-Oracle),保持同步更新。 +* 不分离版本,请移步[RuoYi](https://gitee.com/y_project/RuoYi),微服务版本,请移步[RuoYi-Cloud](https://gitee.com/y_project/RuoYi-Cloud) +* 特别鸣谢:[element](https://github.com/ElemeFE/element),[vue-element-admin](https://github.com/PanJiaChen/vue-element-admin),[eladmin-web](https://github.com/elunez/eladmin-web)。 +* 阿里云折扣场:[点我进入](http://aly.ruoyi.vip),腾讯云秒杀场:[点我进入](http://txy.ruoyi.vip)   +* 阿里云优惠券:[点我领取](https://www.aliyun.com/minisite/goods?userCode=brki8iof&share_source=copy_link),腾讯云优惠券:[点我领取](https://cloud.tencent.com/redirect.php?redirect=1025&cps_key=198c8df2ed259157187173bc7f4f32fd&from=console)   + +## 内置功能 + +1. 用户管理:用户是系统操作者,该功能主要完成系统用户配置。 +2. 部门管理:配置系统组织机构(公司、部门、小组),树结构展现支持数据权限。 +3. 岗位管理:配置系统用户所属担任职务。 +4. 菜单管理:配置系统菜单,操作权限,按钮权限标识等。 +5. 角色管理:角色菜单权限分配、设置角色按机构进行数据范围权限划分。 +6. 字典管理:对系统中经常使用的一些较为固定的数据进行维护。 +7. 参数管理:对系统动态配置常用参数。 +8. 通知公告:系统通知公告信息发布维护。 +9. 操作日志:系统正常操作日志记录和查询;系统异常信息日志记录和查询。 +10. 登录日志:系统登录日志记录查询包含登录异常。 +11. 在线用户:当前系统中活跃用户状态监控。 +12. 定时任务:在线(添加、修改、删除)任务调度包含执行结果日志。 +13. 代码生成:前后端代码的生成(java、html、xml、sql)支持CRUD下载 。 +14. 系统接口:根据业务代码自动生成相关的api接口文档。 +15. 服务监控:监视当前系统CPU、内存、磁盘、堆栈等相关信息。 +16. 缓存监控:对系统的缓存信息查询,命令统计等。 +17. 在线构建器:拖动表单元素生成相应的HTML代码。 +18. 连接池监视:监视当前系统数据库连接池状态,可进行分析SQL找出系统性能瓶颈。 + +## 在线体验 + +- admin/admin123 +- 陆陆续续收到一些打赏,为了更好的体验已用于演示服务器升级。谢谢各位小伙伴。 + +演示地址:http://vue.ruoyi.vip +文档地址:http://doc.ruoyi.vip + +## 演示图 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +## 若依前后端分离交流群 + +QQ群: [![加入QQ群](https://img.shields.io/badge/已满-937441-blue.svg)](https://jq.qq.com/?_wv=1027&k=5bVB1og) [![加入QQ群](https://img.shields.io/badge/已满-887144332-blue.svg)](https://jq.qq.com/?_wv=1027&k=5eiA4DH) [![加入QQ群](https://img.shields.io/badge/已满-180251782-blue.svg)](https://jq.qq.com/?_wv=1027&k=5AxMKlC) [![加入QQ群](https://img.shields.io/badge/已满-104180207-blue.svg)](https://jq.qq.com/?_wv=1027&k=51G72yr) [![加入QQ群](https://img.shields.io/badge/已满-186866453-blue.svg)](https://jq.qq.com/?_wv=1027&k=VvjN2nvu) [![加入QQ群](https://img.shields.io/badge/已满-201396349-blue.svg)](https://jq.qq.com/?_wv=1027&k=5vYAqA05) [![加入QQ群](https://img.shields.io/badge/已满-101456076-blue.svg)](https://jq.qq.com/?_wv=1027&k=kOIINEb5) [![加入QQ群](https://img.shields.io/badge/101539465-blue.svg)](https://jq.qq.com/?_wv=1027&k=UKtX5jhs) 点击按钮入群。 \ No newline at end of file diff --git a/bin/clean.bat b/bin/clean.bat new file mode 100644 index 0000000..24c0974 --- /dev/null +++ b/bin/clean.bat @@ -0,0 +1,12 @@ +@echo off +echo. +echo [Ϣ] target· +echo. + +%~d0 +cd %~dp0 + +cd .. +call mvn clean + +pause \ No newline at end of file diff --git a/bin/package.bat b/bin/package.bat new file mode 100644 index 0000000..c693ec0 --- /dev/null +++ b/bin/package.bat @@ -0,0 +1,12 @@ +@echo off +echo. +echo [Ϣ] Weḅwar/jarļ +echo. + +%~d0 +cd %~dp0 + +cd .. +call mvn clean package -Dmaven.test.skip=true + +pause \ No newline at end of file diff --git a/bin/run.bat b/bin/run.bat new file mode 100644 index 0000000..f94fa2d --- /dev/null +++ b/bin/run.bat @@ -0,0 +1,14 @@ +@echo off +echo. +echo [��Ϣ] ʹ��Jar��������Web���̡� +echo. + +cd %~dp0 +cd ../xinda-admin/target + +set JAVA_OPTS=-Xms256m -Xmx1024m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=512m + +java -jar %JAVA_OPTS% xinda-admin.jar + +cd bin +pause \ No newline at end of file diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..6b00ecb --- /dev/null +++ b/pom.xml @@ -0,0 +1,531 @@ + + + 4.0.0 + + com.xinda + xinda + 3.8.5 + + xinda + http://xinda.cn + XinDa物联网平台 + + + 3.8.5 + UTF-8 + UTF-8 + 1.8 + 3.1.1 + 1.2.15 + 1.21 + 3.0.0 + 2.3.3 + 2.2.0 + 1.4.6 + 2.0.20 + 6.1.6 + 5.9.0 + 2.11.0 + 1.4 + 3.2.2 + 4.1.2 + 2.3 + 0.9.1 + 1.16.5 + 1.5.36 + 1.18.22 + 2.2.1 + 5.8.20 + 1.5.5.Final + 3.5.3.1 + 3.5.3.1 + 32.0.1-jre + 3.3.1 + 2.12.2 + 3.23.1 + 2.2.7 + 4.10.0 + + + + + + + + + org.springframework.boot + spring-boot-dependencies + 2.5.14 + pom + import + + + + + com.alibaba + druid-spring-boot-starter + ${druid.version} + + + + + eu.bitwalker + UserAgentUtils + ${bitwalker.version} + + + + + + + + + + + + com.baomidou + mybatis-plus-boot-starter + ${mybatis-plus.version} + + + com.baomidou + mybatis-plus-generator + ${mybatis-plus-generator.version} + + + + + com.github.pagehelper + pagehelper-spring-boot-starter + ${pagehelper.boot.version} + + + org.mybatis + mybatis + + + + + + + com.github.oshi + oshi-core + ${oshi.version} + + + + net.java.dev.jna + jna + ${jna.version} + + + + + io.springfox + springfox-boot-starter + ${swagger.version} + + + io.swagger + swagger-models + + + + + + + commons-io + commons-io + ${commons.io.version} + + + + + commons-fileupload + commons-fileupload + ${commons.fileupload.version} + + + + + org.apache.poi + poi-ooxml + ${poi.version} + + + + + org.apache.velocity + velocity-engine-core + ${velocity.version} + + + + + commons-collections + commons-collections + ${commons.collections.version} + + + + + org.projectlombok + lombok + ${lombok.version} + + + + + com.alibaba.fastjson2 + fastjson2 + ${fastjson.version} + + + + + io.jsonwebtoken + jjwt + ${jwt.version} + + + + + pro.fessional + kaptcha + ${kaptcha.version} + + + + + org.apache.rocketmq + rocketmq-spring-boot-starter + ${rocketmq.version} + + + + + cn.hutool + hutool-all + ${hutool.version} + + + + + com.xinda + xinda-framework + ${xinda.version} + + + + + com.xinda + xinda-common + ${xinda.version} + + + + + com.xinda + xinda-gateway + ${xinda.version} + + + + com.xinda + xinda-message-bus + ${xinda.version} + + + + + com.xinda + xinda-server + ${xinda.version} + + + + + com.xinda + xinda-plugs + ${xinda.version} + + + + com.xinda + xinda-iot-service + ${xinda.version} + + + + com.xinda + xinda-system-service + ${xinda.version} + + + + + com.xinda + xinda-quartz + ${xinda.version} + + + + com.xinda + xinda-generator + ${xinda.version} + + + + com.xinda + xinda-oss + ${xinda.version} + + + + + com.xinda + mqtt-broker + ${xinda.version} + + + + com.xinda + http-server + ${xinda.version} + + + + com.xinda + coap-server + ${xinda.version} + + + + com.xinda + sip-server + ${xinda.version} + + + + com.xinda + xinda-protocol + ${xinda.version} + + + + com.xinda + xinda-open-api + ${xinda.version} + + + + com.xinda + xinda-protocol-collect + ${xinda.version} + + + + com.xinda + iot-server-core + ${xinda.version} + + + + com.xinda + base-server + ${xinda.version} + + + + com.xinda + xinda-mq + ${xinda.version} + + + + com.xinda + boot-strap + ${xinda.version} + + + + com.xinda + xinda-protocol-base + ${xinda.version} + + + + com.xinda + gateway-boot + ${xinda.version} + + + + com.xinda + xinda-http + ${xinda.version} + + + + com.xinda + xinda-mqtt-client + ${xinda.version} + + + + org.mapstruct + mapstruct + ${mapstruct.version} + + + org.mapstruct + mapstruct-jdk8 + ${mapstruct.version} + + + org.mapstruct + mapstruct-processor + ${mapstruct.version} + + + + com.google.guava + guava + ${guava.version} + + + + org.redisson + redisson-spring-boot-starter + ${redisson.version} + + + + com.baomidou + lock4j-redisson-spring-boot-starter + ${lock4j.version} + + + redisson-spring-boot-starter + org.redisson + + + + + + com.alibaba + easyexcel-core + ${easyexcel.version} + + + + + com.xinda + xinda-notify + ${xinda.version} + + + + com.xinda + xinda-notify-web + ${xinda.version} + + + com.xinda + xinda-notify-core + ${xinda.version} + + + + + com.xinda + xinda-oauth + ${xinda.version} + + + + + + + + + + + + + + + + + + + com.xinda + xinda-scada + ${xinda.version} + + + + + + + xinda-admin + xinda-framework + xinda-plugs + xinda-common + xinda-gateway + xinda-server + xinda-protocol + xinda-open-api + xinda-service + xinda-record + xinda-pay + xinda-notify + + xinda-scada + + pom + + + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.1 + + ${java.version} + ${java.version} + ${project.build.sourceEncoding} + + + + + + + + public + aliyun nexus + https://maven.aliyun.com/repository/public + + true + + + + + + + public + aliyun nexus + https://maven.aliyun.com/repository/public + + true + + + false + + + + + diff --git a/sql/gongkongbang.sql b/sql/gongkongbang.sql new file mode 100644 index 0000000..576194e --- /dev/null +++ b/sql/gongkongbang.sql @@ -0,0 +1,19555 @@ +/* + Navicat Premium Data Transfer + + Source Server : gongkongbang + Source Server Type : MySQL + Source Server Version : 80036 + Source Host : 1.14.72.242:3306 + Source Schema : gongkongbang + + Target Server Type : MySQL + Target Server Version : 80036 + File Encoding : 65001 + + Date: 09/01/2025 14:45:24 +*/ + +SET NAMES utf8mb4; +SET FOREIGN_KEY_CHECKS = 0; + +-- ---------------------------- +-- Table structure for app_language +-- ---------------------------- +DROP TABLE IF EXISTS `app_language`; +CREATE TABLE `app_language` ( + `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键ID', + `language` varchar(20) CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_ci NULL DEFAULT NULL COMMENT '语言', + `country` varchar(20) CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_ci NULL DEFAULT NULL COMMENT '国家', + `time_zone` varchar(20) CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_ci NULL DEFAULT NULL COMMENT '时区', + `create_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '创建者', + `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间', + `lang_name` varchar(20) CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_ci NULL DEFAULT NULL COMMENT '语言名称', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 5 CHARACTER SET = utf8mb3 COLLATE = utf8mb3_unicode_ci COMMENT = 'app语言' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of app_language +-- ---------------------------- +INSERT INTO `app_language` VALUES (2, 'zh-CN', '中国', 'UTF+8', 'UTC+8', NULL, '简体中文'); +INSERT INTO `app_language` VALUES (3, 'en-US', '欧美', 'UTC', 'UTC', NULL, 'English'); +INSERT INTO `app_language` VALUES (4, 'jp', '日本', 'utf-9', NULL, '2024-05-31 14:25:30', '日语'); + +-- ---------------------------- +-- Table structure for app_preferences +-- ---------------------------- +DROP TABLE IF EXISTS `app_preferences`; +CREATE TABLE `app_preferences` ( + `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键id', + `user_id` bigint NULL DEFAULT NULL COMMENT '用户', + `language` varchar(20) CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_ci NULL DEFAULT NULL COMMENT '语言', + `time_zone` varchar(20) CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_ci NULL DEFAULT NULL COMMENT '时区', + `create_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '创建者', + `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间', + `update_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '更新者', + `update_time` datetime NULL DEFAULT NULL COMMENT '更新时间', + `remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '备注', + PRIMARY KEY (`id`) USING BTREE, + UNIQUE INDEX `PRIAMRK_USER_LANG`(`user_id`, `language`) USING BTREE COMMENT '用户语言唯一' +) ENGINE = InnoDB AUTO_INCREMENT = 2 CHARACTER SET = utf8mb3 COLLATE = utf8mb3_unicode_ci COMMENT = 'APP用户偏好设置' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of app_preferences +-- ---------------------------- +INSERT INTO `app_preferences` VALUES (1, 1, 'zh-CN', NULL, NULL, NULL, NULL, NULL, NULL); + +-- ---------------------------- +-- Table structure for bridge +-- ---------------------------- +DROP TABLE IF EXISTS `bridge`; +CREATE TABLE `bridge` ( + `id` bigint NOT NULL AUTO_INCREMENT COMMENT 'id唯一标识', + `config_json` json NULL COMMENT '桥接配置信息', + `name` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_ci NOT NULL COMMENT '连接器名称', + `enable` char(1) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL DEFAULT '1' COMMENT '是否生效(0-不生效,1-生效)', + `status` char(1) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT '0' COMMENT '状态(0-未连接,1-连接中)', + `type` tinyint(1) NOT NULL COMMENT '桥接类型(3=Http推送,4=Mqtt桥接,5=数据库存储)', + `direction` tinyint(1) NOT NULL COMMENT '桥接方向(1=输入,2=输出)', + `route` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_ci NULL DEFAULT '' COMMENT '转发路由(mqtt topic,http url)', + `del_flag` char(1) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT '0' COMMENT '删除标志(0代表存在 2代表删除)', + `create_by` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT '' COMMENT '创建者', + `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间', + `update_by` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT '' COMMENT '更新者', + `update_time` datetime NULL DEFAULT NULL COMMENT '更新时间', + `remark` varchar(500) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT NULL COMMENT '备注', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb3 COLLATE = utf8mb3_general_ci COMMENT = '数据桥接表' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of bridge +-- ---------------------------- + +-- ---------------------------- +-- Table structure for command_preferences +-- ---------------------------- +DROP TABLE IF EXISTS `command_preferences`; +CREATE TABLE `command_preferences` ( + `id` bigint NOT NULL AUTO_INCREMENT COMMENT '指令id', + `name` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_ci NOT NULL COMMENT '指令名称', + `command` json NOT NULL COMMENT '指令', + `serial_number` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_ci NOT NULL COMMENT '设备编号', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 9 CHARACTER SET = utf8mb3 COLLATE = utf8mb3_unicode_ci COMMENT = '指令偏好设置' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of command_preferences +-- ---------------------------- +INSERT INTO `command_preferences` VALUES (1, '读线圈', '{\"command\": \"010100000001fdca\"}', 'D1G9O8WFJ6J4'); +INSERT INTO `command_preferences` VALUES (2, '读保持寄存器', '{\"command\": \"010300000001840a\"}', 'D1G9O8WFJ6J4'); +INSERT INTO `command_preferences` VALUES (3, '写单个线圈', '{\"command\": \"0105000000010c0a\"}', 'D1G9O8WFJ6J4'); +INSERT INTO `command_preferences` VALUES (4, '写多个线圈', '{\"command\": \"010f00040000010a0e90\"}', 'D1G9O8WFJ6J4'); +INSERT INTO `command_preferences` VALUES (5, '写单个寄存器', '{\"command\": \"010600000002080b\"}', 'D1G9O8WFJ6J4'); +INSERT INTO `command_preferences` VALUES (6, '写多个寄存器', '{\"command\": \"01100003000006000100000002ea9b\"}', 'D1G9O8WFJ6J4'); +INSERT INTO `command_preferences` VALUES (7, '111', '{\"command\": \"010100000001fdca\"}', 'D1G9O8WFJ6J4'); +INSERT INTO `command_preferences` VALUES (8, '上报测试', '{\"command\": \"01030000000045ca\"}', 'D1G9O8WFJ6J4'); + +-- ---------------------------- +-- Table structure for gen_table +-- ---------------------------- +DROP TABLE IF EXISTS `gen_table`; +CREATE TABLE `gen_table` ( + `table_id` bigint NOT NULL AUTO_INCREMENT COMMENT '编号', + `table_name` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '表名称', + `table_comment` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '表描述', + `sub_table_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '关联子表的表名', + `sub_table_fk_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '子表关联的外键名', + `class_name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '实体类名称', + `tpl_category` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT 'crud' COMMENT '使用的模板(crud单表操作 tree树表操作)', + `package_name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '生成包路径', + `module_name` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '生成模块名', + `business_name` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '生成业务名', + `function_name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '生成功能名', + `function_author` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '生成功能作者', + `gen_type` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '0' COMMENT '生成代码方式(0zip压缩包 1自定义路径)', + `gen_path` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '/' COMMENT '生成路径(不填默认项目路径)', + `options` varchar(1000) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '其它生成选项', + `create_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '创建者', + `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间', + `update_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '更新者', + `update_time` datetime NULL DEFAULT NULL COMMENT '更新时间', + `remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '备注', + PRIMARY KEY (`table_id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '代码生成业务表' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of gen_table +-- ---------------------------- + +-- ---------------------------- +-- Table structure for gen_table_column +-- ---------------------------- +DROP TABLE IF EXISTS `gen_table_column`; +CREATE TABLE `gen_table_column` ( + `column_id` bigint NOT NULL AUTO_INCREMENT COMMENT '编号', + `table_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '归属表编号', + `column_name` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '列名称', + `column_comment` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '列描述', + `column_type` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '列类型', + `java_type` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT 'JAVA类型', + `java_field` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT 'JAVA字段名', + `is_pk` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '是否主键(1是)', + `is_increment` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '是否自增(1是)', + `is_required` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '是否必填(1是)', + `is_insert` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '是否为插入字段(1是)', + `is_edit` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '是否编辑字段(1是)', + `is_list` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '是否列表字段(1是)', + `is_query` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '是否查询字段(1是)', + `query_type` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT 'EQ' COMMENT '查询方式(等于、不等于、大于、小于、范围)', + `html_type` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '显示类型(文本框、文本域、下拉框、复选框、单选框、日期控件)', + `dict_type` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '字典类型', + `sort` int NULL DEFAULT NULL COMMENT '排序', + `create_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '创建者', + `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间', + `update_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '更新者', + `update_time` datetime NULL DEFAULT NULL COMMENT '更新时间', + PRIMARY KEY (`column_id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '代码生成业务表字段' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of gen_table_column +-- ---------------------------- + +-- ---------------------------- +-- Table structure for iot_alert +-- ---------------------------- +DROP TABLE IF EXISTS `iot_alert`; +CREATE TABLE `iot_alert` ( + `alert_id` bigint NOT NULL AUTO_INCREMENT COMMENT '告警ID', + `alert_name` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL COMMENT '告警名称', + `alert_level` tinyint NOT NULL COMMENT '告警级别(1=提醒通知,2=轻微问题,3=严重警告)', + `status` tinyint(1) NOT NULL COMMENT '告警状态(1-启动,2-停止)', + `notify` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '通知方式[1,2,3]', + `create_by` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT '' COMMENT '创建者', + `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间', + `update_by` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT '' COMMENT '更新者', + `update_time` datetime NULL DEFAULT NULL COMMENT '更新时间', + `remark` varchar(500) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT NULL COMMENT '备注', + `tenant_id` bigint NULL DEFAULT NULL COMMENT '租户id', + `tenant_name` varchar(30) CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_ci NULL DEFAULT NULL COMMENT '租户名称', + PRIMARY KEY (`alert_id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 4 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '设备告警' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of iot_alert +-- ---------------------------- +INSERT INTO `iot_alert` VALUES (1, '温度告警', 2, 1, '1', '', '2023-08-31 09:10:16', '', '2024-01-28 20:05:19', NULL, 1, 'admin'); +INSERT INTO `iot_alert` VALUES (2, '湿度告警', 3, 1, '1', '', '2023-08-31 09:10:44', '', '2024-01-28 20:05:12', NULL, 1, 'admin'); +INSERT INTO `iot_alert` VALUES (3, '电子围栏', 1, 1, '1', '', '2023-11-10 09:39:23', '', '2024-02-07 11:54:01', NULL, 1, 'admin'); + +-- ---------------------------- +-- Table structure for iot_alert_log +-- ---------------------------- +DROP TABLE IF EXISTS `iot_alert_log`; +CREATE TABLE `iot_alert_log` ( + `alert_log_id` bigint NOT NULL AUTO_INCREMENT COMMENT '告警日志ID', + `alert_name` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL COMMENT '告警名称', + `alert_level` tinyint NOT NULL COMMENT '告警级别(1=提醒通知,2=轻微问题,3=严重警告)', + `status` tinyint NOT NULL COMMENT '处理状态(1=不需要处理,2=未处理,3=已处理)', + `serial_number` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL COMMENT '设备编号', + `product_id` bigint NOT NULL COMMENT '产品ID', + `detail` json NULL COMMENT '告警详情(对应物模型)', + `create_by` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT '' COMMENT '创建者', + `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间', + `update_by` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT '' COMMENT '更新者', + `update_time` datetime NULL DEFAULT NULL COMMENT '更新时间', + `remark` varchar(500) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT NULL COMMENT '备注', + `user_id` bigint NULL DEFAULT NULL COMMENT '用户id', + `device_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '设备名称', + PRIMARY KEY (`alert_log_id`) USING BTREE, + INDEX `iot_alert_log_index_serial_number`(`serial_number`) USING BTREE, + INDEX `iot_alert_log_index_product_id`(`product_id`) USING BTREE, + INDEX `iot_alert_log_index_create_time`(`create_time`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '设备告警日志' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of iot_alert_log +-- ---------------------------- + +-- ---------------------------- +-- Table structure for iot_alert_notify_template +-- ---------------------------- +DROP TABLE IF EXISTS `iot_alert_notify_template`; +CREATE TABLE `iot_alert_notify_template` ( + `alert_id` bigint NOT NULL COMMENT '告警id', + `notify_template_id` bigint NOT NULL COMMENT '通知模版id', + PRIMARY KEY (`alert_id`, `notify_template_id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb3 COLLATE = utf8mb3_unicode_ci COMMENT = '告警通知模版关联表' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of iot_alert_notify_template +-- ---------------------------- + +-- ---------------------------- +-- Table structure for iot_alert_scene +-- ---------------------------- +DROP TABLE IF EXISTS `iot_alert_scene`; +CREATE TABLE `iot_alert_scene` ( + `alert_id` bigint NOT NULL COMMENT '告警ID', + `scene_id` bigint NOT NULL COMMENT '场景ID', + PRIMARY KEY (`alert_id`, `scene_id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb3 COLLATE = utf8mb3_unicode_ci COMMENT = '告警场景表' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of iot_alert_scene +-- ---------------------------- + +-- ---------------------------- +-- Table structure for iot_category +-- ---------------------------- +DROP TABLE IF EXISTS `iot_category`; +CREATE TABLE `iot_category` ( + `category_id` bigint NOT NULL AUTO_INCREMENT COMMENT '产品分类ID', + `category_name` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL COMMENT '产品分类名称', + `tenant_id` bigint NOT NULL COMMENT '租户ID', + `tenant_name` varchar(30) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL DEFAULT '' COMMENT '租户名称', + `is_sys` tinyint(1) NOT NULL DEFAULT 0 COMMENT '是否系统通用(0-否,1-是)', + `parent_id` bigint NULL DEFAULT NULL COMMENT '父级ID', + `order_num` int NULL DEFAULT NULL COMMENT '显示顺序', + `del_flag` char(1) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT '0' COMMENT '删除标志(0代表存在 2代表删除)', + `create_by` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT '' COMMENT '创建者', + `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间', + `update_by` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT '' COMMENT '更新者', + `update_time` datetime NULL DEFAULT NULL COMMENT '更新时间', + `remark` varchar(500) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT NULL COMMENT '备注', + PRIMARY KEY (`category_id`) USING BTREE, + INDEX `iot_category_index_tenant_id`(`tenant_id`) USING BTREE, + INDEX `iot_category_index_parent_id`(`parent_id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 8 CHARACTER SET = utf8mb3 COLLATE = utf8mb3_general_ci COMMENT = '产品分类' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of iot_category +-- ---------------------------- +INSERT INTO `iot_category` VALUES (1, '工控网关', 1, 'admin', 1, 0, 1, '0', '', '2022-03-01 11:44:37', '', '2025-01-07 14:24:38', '例如:边缘网关'); +INSERT INTO `iot_category` VALUES (2, '监控安防', 1, 'admin', 1, 0, 2, '0', '', '2021-12-18 14:46:52', '', '2025-01-07 14:25:03', '例如:摄像头、硬盘录像机'); + +-- ---------------------------- +-- Table structure for iot_device +-- ---------------------------- +DROP TABLE IF EXISTS `iot_device`; +CREATE TABLE `iot_device` ( + `device_id` bigint NOT NULL AUTO_INCREMENT COMMENT '设备ID', + `device_name` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL COMMENT '设备名称', + `product_id` bigint NOT NULL COMMENT '产品ID', + `product_name` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL COMMENT '产品名称', + `tenant_id` bigint NOT NULL COMMENT '租户ID', + `tenant_name` varchar(30) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL DEFAULT '' COMMENT '租户名称', + `serial_number` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL COMMENT '设备编号', + `gw_dev_code` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT NULL COMMENT '子设备网关编号', + `firmware_version` float(11, 2) NOT NULL COMMENT '固件版本', + `status` tinyint(1) NOT NULL DEFAULT 1 COMMENT '设备状态(1-未激活,2-禁用,3-在线,4-离线)', + `rssi` tinyint NULL DEFAULT NULL COMMENT '信号强度(\r\n信号极好4格[-55— 0],\r\n信号好3格[-70— -55],\r\n信号一般2格[-85— -70],\r\n信号差1格[-100— -85])', + `is_shadow` tinyint(1) NULL DEFAULT NULL COMMENT '是否启用设备影子(0=禁用,1=启用)', + `location_way` tinyint(1) NULL DEFAULT NULL COMMENT '定位方式(1=ip自动定位,2=设备定位,3=自定义)', + `things_model_value` json NULL COMMENT '物模型值', + `network_address` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '设备所在地址', + `network_ip` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '设备入网IP', + `longitude` double(11, 6) NULL DEFAULT NULL COMMENT '设备经度', + `latitude` double(11, 6) NULL DEFAULT NULL COMMENT '设备纬度', + `active_time` datetime NULL DEFAULT NULL COMMENT '激活时间', + `summary` json NULL COMMENT '设备摘要,格式[{\"name\":\"device\"},{\"chip\":\"esp8266\"}]', + `img_url` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT NULL COMMENT '图片地址', + `del_flag` char(1) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT '0' COMMENT '删除标志(0代表存在 2代表删除)', + `create_by` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT '' COMMENT '创建者', + `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间', + `update_by` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT '' COMMENT '更新者', + `update_time` datetime NULL DEFAULT NULL COMMENT '更新时间', + `remark` varchar(500) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT NULL COMMENT '备注', + `is_simulate` tinyint(1) UNSIGNED ZEROFILL NULL DEFAULT 0 COMMENT '是否是模拟设备', + `slave_id` int NULL DEFAULT NULL COMMENT '从机id', + PRIMARY KEY (`device_id`) USING BTREE, + UNIQUE INDEX `iot_device_index_serial_number`(`serial_number`) USING BTREE, + INDEX `iot_device_index_product_id`(`product_id`) USING BTREE, + INDEX `iot_device_index_tanant_id`(`tenant_id`) USING BTREE, + INDEX `iot_device_index_create_time`(`create_time`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 233 CHARACTER SET = utf8mb3 COLLATE = utf8mb3_general_ci COMMENT = '设备' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of iot_device +-- ---------------------------- +INSERT INTO `iot_device` VALUES (230, '海康监控摄像机', 135, 'DS-2DE2Q120MY-T/GL2', 1, 'admin', '34020000002000000003', NULL, 1.00, 3, 0, 0, 1, NULL, '四川省成都市 电信', '171.221.105.110', 104.072747, 30.578994, '2025-01-07 12:19:12', '{\"port\": 30337, \"firmware\": \"V5.8.31\", \"transport\": \"UDP\", \"streammode\": \"UDP\", \"hostaddress\": \"171.221.105.110:30337\", \"manufacturer\": \"Hikvision\"}', '', '0', '', '2025-01-07 10:58:17', '', '2025-01-09 14:31:29', NULL, 0, NULL); +INSERT INTO `iot_device` VALUES (232, '工控帮测试设备', 136, '工控帮华泰数智网关', 1, 'admin', 'D15SPS058P39', NULL, 1.00, 4, 0, 0, 1, NULL, '内网IP', '39.144.144.26', NULL, NULL, '2025-01-08 14:39:03', NULL, '', '0', '', '2025-01-08 14:33:58', '', '2025-01-08 14:54:52', NULL, 0, NULL); +INSERT INTO `iot_device` VALUES (234, '物联网开发板', 96, '物联网开发板', 1, 'admin', 'D1J4798YESR2', NULL, 1.00, 4, 0, 0, 1, NULL, '四川省成都市 电信', '171.221.105.110', 104.072747, 30.578994, '2025-01-09 08:08:42', NULL, NULL, '0', '', '2025-01-09 08:02:56', '', '2025-01-09 08:11:54', NULL, 0, NULL); + +-- ---------------------------- +-- Table structure for iot_device_alert_user +-- ---------------------------- +DROP TABLE IF EXISTS `iot_device_alert_user`; +CREATE TABLE `iot_device_alert_user` ( + `device_id` bigint NOT NULL COMMENT '设备id', + `user_id` bigint NOT NULL COMMENT '用户id', + PRIMARY KEY (`device_id`, `user_id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb3 COLLATE = utf8mb3_unicode_ci COMMENT = '设备告警用户表' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of iot_device_alert_user +-- ---------------------------- +INSERT INTO `iot_device_alert_user` VALUES (234, 1); + +-- ---------------------------- +-- Table structure for iot_device_group +-- ---------------------------- +DROP TABLE IF EXISTS `iot_device_group`; +CREATE TABLE `iot_device_group` ( + `device_id` bigint NOT NULL COMMENT '设备ID', + `group_id` bigint NOT NULL COMMENT '分组ID', + PRIMARY KEY (`device_id`, `group_id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb3 COLLATE = utf8mb3_general_ci COMMENT = '设备分组' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of iot_device_group +-- ---------------------------- + +-- ---------------------------- +-- Table structure for iot_device_job +-- ---------------------------- +DROP TABLE IF EXISTS `iot_device_job`; +CREATE TABLE `iot_device_job` ( + `job_id` bigint NOT NULL AUTO_INCREMENT COMMENT '任务ID', + `job_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '任务名称', + `job_group` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT 'DEFAULT' COMMENT '任务组名', + `cron_expression` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT 'cron执行表达式', + `misfire_policy` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '3' COMMENT '计划执行错误策略(1立即执行 2执行一次 3放弃执行)', + `concurrent` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '1' COMMENT '是否并发执行(0允许 1禁止)', + `status` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '0' COMMENT '状态(0正常 1暂停)', + `create_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '创建者', + `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间', + `update_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '更新者', + `update_time` datetime NULL DEFAULT NULL COMMENT '更新时间', + `remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '备注信息', + `device_id` bigint NULL DEFAULT NULL COMMENT '设备ID', + `serial_number` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT NULL COMMENT '设备编号', + `device_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '设备名称', + `is_advance` tinyint(1) NULL DEFAULT NULL COMMENT '是否详细corn表达式(1=是,0=否)', + `actions` json NULL COMMENT '执行的动作集合', + `job_type` tinyint(1) NULL DEFAULT NULL COMMENT '任务类型(1=设备定时,2=设备告警,3=场景联动)', + `product_id` bigint NULL DEFAULT NULL COMMENT '产品ID', + `product_name` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT NULL COMMENT '产品名称', + `scene_id` bigint NULL DEFAULT NULL COMMENT '场景联动ID', + `alert_id` bigint NULL DEFAULT NULL COMMENT '告警ID', + `alert_trigger` json NULL COMMENT '定时告警触发器', + `datasource_id` bigint NULL DEFAULT NULL COMMENT '执行id,可共用,通过jobType区分', + PRIMARY KEY (`job_id`, `job_name`, `job_group`) USING BTREE, + INDEX `iot_device_job_index_device_id`(`device_id`) USING BTREE, + INDEX `iot_device_job_index_product_id`(`product_id`) USING BTREE, + INDEX `iot_device_job_index_scene_id`(`scene_id`) USING BTREE, + INDEX `iot_device_job_index_alert_id`(`alert_id`) USING BTREE, + INDEX `iot_device_job_index_serial_number`(`serial_number`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 2 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '设备定时' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of iot_device_job +-- ---------------------------- +INSERT INTO `iot_device_job` VALUES (1, 'P', 'DEFAULT', '0 08 11 ? * 1,2,3,4,5,6,7', '2', '1', '0', 'admin', '2023-04-15 11:08:37', '', NULL, '', 108, 'D1ELV3A5TOJS', '★温湿度开关', 0, '[{\"id\": \"gear\", \"name\": \"运行档位\", \"type\": 2, \"value\": \"2\", \"deviceId\": 108, \"deviceName\": \"★温湿度开关\"}]', 1, 41, '★智能开关产品', NULL, NULL, NULL, NULL); + +-- ---------------------------- +-- Table structure for iot_device_log +-- ---------------------------- +DROP TABLE IF EXISTS `iot_device_log`; +CREATE TABLE `iot_device_log` ( + `log_id` bigint NOT NULL AUTO_INCREMENT COMMENT '设备监测信息ID', + `identity` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL COMMENT '标识符', + `model_name` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT NULL COMMENT '物模型名称', + `log_type` tinyint(1) NOT NULL COMMENT '类型(1=属性上报,2=调用功能,3=事件上报,4=设备升级,5=设备上线,6=设备离线)', + `log_value` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL COMMENT '日志值', + `device_id` bigint NULL DEFAULT NULL COMMENT '设备ID', + `device_name` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT NULL COMMENT '设备名称', + `serial_number` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT NULL COMMENT '设备编号', + `is_monitor` tinyint(1) UNSIGNED ZEROFILL NOT NULL DEFAULT 0 COMMENT '是否监测数据(1=是,0=否)', + `mode` tinyint(1) UNSIGNED ZEROFILL NOT NULL DEFAULT 0 COMMENT '模式(1=影子模式,2=在线模式,3=其他)', + `user_id` bigint NULL DEFAULT NULL COMMENT '用户ID', + `user_name` varchar(30) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT '' COMMENT '用户昵称', + `tenant_id` bigint NULL DEFAULT NULL COMMENT '租户ID', + `tenant_name` varchar(30) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT '' COMMENT '租户名称', + `create_by` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT '' COMMENT '创建者', + `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间', + `remark` varchar(200) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT NULL COMMENT '备注', + PRIMARY KEY (`log_id`) USING BTREE, + INDEX `iot_device_log_index_serial_number`(`serial_number`) USING BTREE, + INDEX `iot_device_log_index_tenant_id`(`tenant_id`) USING BTREE, + INDEX `iot_device_log_index_user_id`(`user_id`) USING BTREE, + INDEX `iot_device_log_index_device_id`(`device_id`) USING BTREE, + INDEX `index_serialNumber_createTime`(`serial_number`, `create_time`) USING BTREE, + INDEX `index_isMonitor_serialNumber_createTime`(`serial_number`, `is_monitor`, `create_time`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb3 COLLATE = utf8mb3_general_ci COMMENT = '设备日志' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of iot_device_log +-- ---------------------------- + +-- ---------------------------- +-- Table structure for iot_device_record +-- ---------------------------- +DROP TABLE IF EXISTS `iot_device_record`; +CREATE TABLE `iot_device_record` ( + `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键id', + `operate_dept_id` bigint NULL DEFAULT NULL COMMENT '操作者机构id', + `target_dept_id` bigint NULL DEFAULT NULL COMMENT '目标机构id', + `product_id` bigint NULL DEFAULT NULL COMMENT '产品id', + `device_id` bigint NULL DEFAULT NULL COMMENT '设备id', + `serial_number` varchar(50) CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_ci NULL DEFAULT NULL COMMENT '设备编号', + `parent_id` bigint NULL DEFAULT NULL COMMENT '父id', + `type` tinyint NOT NULL COMMENT '设备记录类型(1-导入记录;2-回收记录;3-分配记录;4-分配详细记录)', + `distribute_type` tinyint NULL DEFAULT NULL COMMENT '分配类型(1-选择分配;2-导入分配)', + `total` int NULL DEFAULT NULL COMMENT '总数', + `success_quantity` int NULL DEFAULT NULL COMMENT '成功数量', + `fail_quantity` int NULL DEFAULT NULL COMMENT '失败数量', + `status` tinyint NULL DEFAULT NULL COMMENT '状态(0-失败;1-成功)', + `tenant_id` bigint NULL DEFAULT NULL COMMENT '租户id', + `tenant_name` varchar(30) CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_ci NULL DEFAULT NULL COMMENT '租户名称', + `create_by` varchar(50) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT NULL COMMENT '创建人', + `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `update_by` varchar(50) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT NULL COMMENT '更新人', + `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', + `del_flag` tinyint NOT NULL DEFAULT 0 COMMENT '逻辑删除标识', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb3 COLLATE = utf8mb3_unicode_ci COMMENT = '设备记录' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of iot_device_record +-- ---------------------------- + +-- ---------------------------- +-- Table structure for iot_device_share +-- ---------------------------- +DROP TABLE IF EXISTS `iot_device_share`; +CREATE TABLE `iot_device_share` ( + `device_id` bigint NOT NULL COMMENT '设备id', + `user_id` bigint NOT NULL COMMENT '用户id', + `phonenumber` varchar(20) CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_ci NULL DEFAULT NULL COMMENT '手机', + `perms` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT NULL COMMENT '用户物模型权限,多个以英文逗号分隔', + `del_flag` char(1) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT '0' COMMENT '删除标志(0代表存在 2代表删除)', + `create_by` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT '' COMMENT '创建者', + `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间', + `update_by` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT '' COMMENT '更新者', + `update_time` datetime NULL DEFAULT NULL COMMENT '更新时间', + `remark` varchar(500) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT NULL COMMENT '备注', + PRIMARY KEY (`device_id`, `user_id`) USING BTREE, + INDEX `PRIMARK_DEVICE_USER`(`device_id`, `user_id`) USING BTREE COMMENT '设备与用户索引' +) ENGINE = InnoDB CHARACTER SET = utf8mb3 COLLATE = utf8mb3_unicode_ci COMMENT = '设备分享表' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of iot_device_share +-- ---------------------------- + +-- ---------------------------- +-- Table structure for iot_device_template +-- ---------------------------- +DROP TABLE IF EXISTS `iot_device_template`; +CREATE TABLE `iot_device_template` ( + `id` bigint NOT NULL AUTO_INCREMENT COMMENT '自增id', + `product_id` bigint NULL DEFAULT NULL COMMENT '产品id', + `template_id` bigint NULL DEFAULT NULL COMMENT '采集点模板id', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb3 COLLATE = utf8mb3_unicode_ci COMMENT = '设备采集点模板关联对象' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of iot_device_template +-- ---------------------------- + +-- ---------------------------- +-- Table structure for iot_device_user +-- ---------------------------- +DROP TABLE IF EXISTS `iot_device_user`; +CREATE TABLE `iot_device_user` ( + `device_id` bigint NOT NULL COMMENT '设备ID', + `user_id` bigint NOT NULL COMMENT '用户ID', + `phonenumber` varchar(11) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT NULL COMMENT '手机号码', + `del_flag` char(1) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT '0' COMMENT '删除标志(0代表存在 2代表删除)', + `create_by` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT '' COMMENT '创建者', + `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间', + `update_by` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT '' COMMENT '更新者', + `update_time` datetime NULL DEFAULT NULL COMMENT '更新时间', + `remark` varchar(500) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT NULL COMMENT '备注', + PRIMARY KEY (`device_id`, `user_id`) USING BTREE, + INDEX `iot_device_user_index_user_id`(`user_id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb3 COLLATE = utf8mb3_general_ci COMMENT = '设备用户' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of iot_device_user +-- ---------------------------- + +-- ---------------------------- +-- Table structure for iot_event_log +-- ---------------------------- +DROP TABLE IF EXISTS `iot_event_log`; +CREATE TABLE `iot_event_log` ( + `log_id` bigint NOT NULL AUTO_INCREMENT COMMENT '设备事件日志ID', + `identity` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL COMMENT '标识符', + `model_name` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT NULL COMMENT '物模型名称', + `log_type` tinyint(1) NOT NULL COMMENT '类型(3=事件上报,5=设备上线,6=设备离线)', + `log_value` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL COMMENT '日志值', + `device_id` bigint NULL DEFAULT NULL COMMENT '设备ID', + `device_name` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT NULL COMMENT '设备名称', + `serial_number` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT NULL COMMENT '设备编号', + `is_monitor` tinyint(1) UNSIGNED ZEROFILL NOT NULL DEFAULT 0 COMMENT '是否监测数据(1=是,0=否)', + `mode` tinyint(1) UNSIGNED ZEROFILL NOT NULL DEFAULT 0 COMMENT '模式(1=影子模式,2=在线模式,3=其他)', + `user_id` bigint NULL DEFAULT NULL COMMENT '用户ID', + `user_name` varchar(30) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT '' COMMENT '用户昵称', + `tenant_id` bigint NULL DEFAULT NULL COMMENT '租户ID', + `tenant_name` varchar(30) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT '' COMMENT '租户名称', + `create_by` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT '' COMMENT '创建者', + `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间', + `remark` varchar(200) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT NULL COMMENT '备注', + PRIMARY KEY (`log_id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 193 CHARACTER SET = utf8mb3 COLLATE = utf8mb3_general_ci COMMENT = '事件日志' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of iot_event_log +-- ---------------------------- +INSERT INTO `iot_event_log` VALUES (4, 'online', NULL, 5, '1', 230, '海康监控摄像机', '34020000002000000003', 0, 3, 1, 'admin', NULL, '', '', '2025-01-07 12:19:13', '设备上线'); +INSERT INTO `iot_event_log` VALUES (5, 'online', NULL, 5, '1', 230, '海康监控摄像机', '34020000002000000003', 0, 3, 1, 'admin', NULL, '', '', '2025-01-07 12:19:13', '设备上线'); +INSERT INTO `iot_event_log` VALUES (6, 'online', NULL, 5, '1', 230, '海康监控摄像机', '34020000002000000003', 0, 3, 1, 'admin', NULL, '', '', '2025-01-07 12:19:13', '设备上线'); +INSERT INTO `iot_event_log` VALUES (7, 'online', NULL, 5, '1', 230, '海康监控摄像机', '34020000002000000003', 0, 3, 1, 'admin', NULL, '', '', '2025-01-07 12:19:16', '设备上线'); +INSERT INTO `iot_event_log` VALUES (8, 'offline', NULL, 6, '0', 230, '海康监控摄像机', '34020000002000000003', 0, 3, 1, 'admin', NULL, '', '', '2025-01-07 12:19:17', '设备离线'); +INSERT INTO `iot_event_log` VALUES (9, 'online', NULL, 5, '1', 230, '海康监控摄像机', '34020000002000000003', 0, 3, 1, 'admin', NULL, '', '', '2025-01-07 12:19:28', '设备上线'); +INSERT INTO `iot_event_log` VALUES (10, 'online', NULL, 5, '1', 230, '海康监控摄像机', '34020000002000000003', 0, 3, 1, 'admin', NULL, '', '', '2025-01-07 12:19:28', '设备上线'); +INSERT INTO `iot_event_log` VALUES (11, 'online', NULL, 5, '1', 230, '海康监控摄像机', '34020000002000000003', 0, 3, 1, 'admin', NULL, '', '', '2025-01-07 12:19:28', '设备上线'); +INSERT INTO `iot_event_log` VALUES (12, 'online', NULL, 5, '1', 230, '海康监控摄像机', '34020000002000000003', 0, 3, 1, 'admin', NULL, '', '', '2025-01-07 12:19:28', '设备上线'); +INSERT INTO `iot_event_log` VALUES (13, 'online', NULL, 5, '1', 230, '海康监控摄像机', '34020000002000000003', 0, 3, 1, 'admin', NULL, '', '', '2025-01-07 12:19:28', '设备上线'); +INSERT INTO `iot_event_log` VALUES (14, 'online', NULL, 5, '1', 230, '海康监控摄像机', '34020000002000000003', 0, 3, 1, 'admin', NULL, '', '', '2025-01-07 12:19:28', '设备上线'); +INSERT INTO `iot_event_log` VALUES (15, 'online', NULL, 5, '1', 230, '海康监控摄像机', '34020000002000000003', 0, 3, 1, 'admin', NULL, '', '', '2025-01-07 12:21:33', '设备上线'); +INSERT INTO `iot_event_log` VALUES (16, 'online', NULL, 5, '1', 230, '海康监控摄像机', '34020000002000000003', 0, 3, 1, 'admin', NULL, '', '', '2025-01-07 12:21:33', '设备上线'); +INSERT INTO `iot_event_log` VALUES (17, 'online', NULL, 5, '1', 230, '海康监控摄像机', '34020000002000000003', 0, 3, 1, 'admin', NULL, '', '', '2025-01-07 12:21:33', '设备上线'); +INSERT INTO `iot_event_log` VALUES (18, 'offline', NULL, 6, '0', 230, '海康监控摄像机', '34020000002000000003', 0, 3, 1, 'admin', NULL, '', '', '2025-01-07 12:21:38', '设备离线'); +INSERT INTO `iot_event_log` VALUES (19, 'online', NULL, 5, '1', 230, '海康监控摄像机', '34020000002000000003', 0, 3, 1, 'admin', NULL, '', '', '2025-01-07 12:21:49', '设备上线'); +INSERT INTO `iot_event_log` VALUES (20, 'online', NULL, 5, '1', 230, '海康监控摄像机', '34020000002000000003', 0, 3, 1, 'admin', NULL, '', '', '2025-01-07 12:21:49', '设备上线'); +INSERT INTO `iot_event_log` VALUES (21, 'online', NULL, 5, '1', 230, '海康监控摄像机', '34020000002000000003', 0, 3, 1, 'admin', NULL, '', '', '2025-01-07 12:21:49', '设备上线'); +INSERT INTO `iot_event_log` VALUES (22, 'online', NULL, 5, '1', 230, '海康监控摄像机', '34020000002000000003', 0, 3, 1, 'admin', NULL, '', '', '2025-01-07 12:21:49', '设备上线'); +INSERT INTO `iot_event_log` VALUES (23, 'online', NULL, 5, '1', 230, '海康监控摄像机', '34020000002000000003', 0, 3, 1, 'admin', NULL, '', '', '2025-01-07 12:21:50', '设备上线'); +INSERT INTO `iot_event_log` VALUES (24, 'online', NULL, 5, '1', 230, '海康监控摄像机', '34020000002000000003', 0, 3, 1, 'admin', NULL, '', '', '2025-01-07 12:21:50', '设备上线'); +INSERT INTO `iot_event_log` VALUES (25, 'online', NULL, 5, '1', 230, '海康监控摄像机', '34020000002000000003', 0, 3, 1, 'admin', NULL, '', '', '2025-01-07 12:36:54', '设备上线'); +INSERT INTO `iot_event_log` VALUES (26, 'online', NULL, 5, '1', 230, '海康监控摄像机', '34020000002000000003', 0, 3, 1, 'admin', NULL, '', '', '2025-01-07 12:51:59', '设备上线'); +INSERT INTO `iot_event_log` VALUES (27, 'online', NULL, 5, '1', 230, '海康监控摄像机', '34020000002000000003', 0, 3, 1, 'admin', NULL, '', '', '2025-01-07 13:07:04', '设备上线'); +INSERT INTO `iot_event_log` VALUES (28, 'online', NULL, 5, '1', 230, '海康监控摄像机', '34020000002000000003', 0, 3, 1, 'admin', NULL, '', '', '2025-01-07 13:22:04', '设备上线'); +INSERT INTO `iot_event_log` VALUES (29, 'online', NULL, 5, '1', 230, '海康监控摄像机', '34020000002000000003', 0, 3, 1, 'admin', NULL, '', '', '2025-01-07 13:37:09', '设备上线'); +INSERT INTO `iot_event_log` VALUES (30, 'online', NULL, 5, '1', 230, '海康监控摄像机', '34020000002000000003', 0, 3, 1, 'admin', NULL, '', '', '2025-01-07 13:52:14', '设备上线'); +INSERT INTO `iot_event_log` VALUES (31, 'online', NULL, 5, '1', 230, '海康监控摄像机', '34020000002000000003', 0, 3, 1, 'admin', NULL, '', '', '2025-01-07 14:07:19', '设备上线'); +INSERT INTO `iot_event_log` VALUES (32, 'online', NULL, 5, '1', 230, '海康监控摄像机', '34020000002000000003', 0, 3, 1, 'admin', NULL, '', '', '2025-01-07 14:22:24', '设备上线'); +INSERT INTO `iot_event_log` VALUES (33, 'online', NULL, 5, '1', 230, '海康监控摄像机', '34020000002000000003', 0, 3, 1, 'admin', NULL, '', '', '2025-01-07 14:37:30', '设备上线'); +INSERT INTO `iot_event_log` VALUES (34, 'online', NULL, 5, '1', 230, '海康监控摄像机', '34020000002000000003', 0, 3, 1, 'admin', NULL, '', '', '2025-01-07 14:52:30', '设备上线'); +INSERT INTO `iot_event_log` VALUES (35, 'online', NULL, 5, '1', 230, '海康监控摄像机', '34020000002000000003', 0, 3, 1, 'admin', NULL, '', '', '2025-01-07 15:07:35', '设备上线'); +INSERT INTO `iot_event_log` VALUES (36, 'online', NULL, 5, '1', 230, '海康监控摄像机', '34020000002000000003', 0, 3, 1, 'admin', NULL, '', '', '2025-01-07 15:22:40', '设备上线'); +INSERT INTO `iot_event_log` VALUES (37, 'online', NULL, 5, '1', 230, '海康监控摄像机', '34020000002000000003', 0, 3, 1, 'admin', NULL, '', '', '2025-01-07 15:37:45', '设备上线'); +INSERT INTO `iot_event_log` VALUES (38, 'online', NULL, 5, '1', 230, '海康监控摄像机', '34020000002000000003', 0, 3, 1, 'admin', NULL, '', '', '2025-01-07 15:52:50', '设备上线'); +INSERT INTO `iot_event_log` VALUES (39, 'online', NULL, 5, '1', 230, '海康监控摄像机', '34020000002000000003', 0, 3, 1, 'admin', NULL, '', '', '2025-01-07 16:07:55', '设备上线'); +INSERT INTO `iot_event_log` VALUES (40, 'online', NULL, 5, '1', 230, '海康监控摄像机', '34020000002000000003', 0, 3, 1, 'admin', NULL, '', '', '2025-01-07 16:23:00', '设备上线'); +INSERT INTO `iot_event_log` VALUES (41, 'online', NULL, 5, '1', 230, '海康监控摄像机', '34020000002000000003', 0, 3, 1, 'admin', NULL, '', '', '2025-01-07 16:38:01', '设备上线'); +INSERT INTO `iot_event_log` VALUES (42, 'online', NULL, 5, '1', 230, '海康监控摄像机', '34020000002000000003', 0, 3, 1, 'admin', NULL, '', '', '2025-01-07 16:53:06', '设备上线'); +INSERT INTO `iot_event_log` VALUES (43, 'online', NULL, 5, '1', 230, '海康监控摄像机', '34020000002000000003', 0, 3, 1, 'admin', NULL, '', '', '2025-01-07 17:08:11', '设备上线'); +INSERT INTO `iot_event_log` VALUES (44, 'online', NULL, 5, '1', 230, '海康监控摄像机', '34020000002000000003', 0, 3, 1, 'admin', NULL, '', '', '2025-01-07 17:23:16', '设备上线'); +INSERT INTO `iot_event_log` VALUES (45, 'online', NULL, 5, '1', 230, '海康监控摄像机', '34020000002000000003', 0, 3, 1, 'admin', NULL, '', '', '2025-01-07 17:38:21', '设备上线'); +INSERT INTO `iot_event_log` VALUES (46, 'online', NULL, 5, '1', 230, '海康监控摄像机', '34020000002000000003', 0, 3, 1, 'admin', NULL, '', '', '2025-01-07 17:53:26', '设备上线'); +INSERT INTO `iot_event_log` VALUES (47, 'online', NULL, 5, '1', 230, '海康监控摄像机', '34020000002000000003', 0, 3, 1, 'admin', NULL, '', '', '2025-01-07 18:08:26', '设备上线'); +INSERT INTO `iot_event_log` VALUES (48, 'online', NULL, 5, '1', 230, '海康监控摄像机', '34020000002000000003', 0, 3, 1, 'admin', NULL, '', '', '2025-01-07 18:23:31', '设备上线'); +INSERT INTO `iot_event_log` VALUES (49, 'online', NULL, 5, '1', 230, '海康监控摄像机', '34020000002000000003', 0, 3, 1, 'admin', NULL, '', '', '2025-01-07 18:38:37', '设备上线'); +INSERT INTO `iot_event_log` VALUES (50, 'online', NULL, 5, '1', 230, '海康监控摄像机', '34020000002000000003', 0, 3, 1, 'admin', NULL, '', '', '2025-01-07 18:53:42', '设备上线'); +INSERT INTO `iot_event_log` VALUES (51, 'online', NULL, 5, '1', 230, '海康监控摄像机', '34020000002000000003', 0, 3, 1, 'admin', NULL, '', '', '2025-01-07 19:08:47', '设备上线'); +INSERT INTO `iot_event_log` VALUES (52, 'online', NULL, 5, '1', 230, '海康监控摄像机', '34020000002000000003', 0, 3, 1, 'admin', NULL, '', '', '2025-01-07 19:23:52', '设备上线'); +INSERT INTO `iot_event_log` VALUES (53, 'online', NULL, 5, '1', 230, '海康监控摄像机', '34020000002000000003', 0, 3, 1, 'admin', NULL, '', '', '2025-01-07 19:38:57', '设备上线'); +INSERT INTO `iot_event_log` VALUES (54, 'online', NULL, 5, '1', 230, '海康监控摄像机', '34020000002000000003', 0, 3, 1, 'admin', NULL, '', '', '2025-01-07 19:53:57', '设备上线'); +INSERT INTO `iot_event_log` VALUES (57, 'online', NULL, 5, '1', 230, '海康监控摄像机', '34020000002000000003', 0, 3, 1, 'admin', NULL, '', '', '2025-01-07 20:09:02', '设备上线'); +INSERT INTO `iot_event_log` VALUES (60, 'online', NULL, 5, '1', 230, '海康监控摄像机', '34020000002000000003', 0, 3, 1, 'admin', NULL, '', '', '2025-01-07 20:24:07', '设备上线'); +INSERT INTO `iot_event_log` VALUES (62, 'online', NULL, 5, '1', 230, '海康监控摄像机', '34020000002000000003', 0, 3, 1, 'admin', NULL, '', '', '2025-01-07 20:39:13', '设备上线'); +INSERT INTO `iot_event_log` VALUES (66, 'online', NULL, 5, '1', 230, '海康监控摄像机', '34020000002000000003', 0, 3, 1, 'admin', NULL, '', '', '2025-01-07 20:54:18', '设备上线'); +INSERT INTO `iot_event_log` VALUES (68, 'online', NULL, 5, '1', 230, '海康监控摄像机', '34020000002000000003', 0, 3, 1, 'admin', NULL, '', '', '2025-01-07 21:09:23', '设备上线'); +INSERT INTO `iot_event_log` VALUES (147, 'online', NULL, 5, '1', 230, '海康监控摄像机', '34020000002000000003', 0, 3, 1, 'admin', NULL, '', '', '2025-01-07 21:24:23', '设备上线'); +INSERT INTO `iot_event_log` VALUES (148, 'online', NULL, 5, '1', 230, '海康监控摄像机', '34020000002000000003', 0, 3, 1, 'admin', NULL, '', '', '2025-01-07 21:39:28', '设备上线'); +INSERT INTO `iot_event_log` VALUES (149, 'online', NULL, 5, '1', 230, '海康监控摄像机', '34020000002000000003', 0, 3, 1, 'admin', NULL, '', '', '2025-01-07 21:54:33', '设备上线'); +INSERT INTO `iot_event_log` VALUES (151, 'online', NULL, 5, '1', 230, '海康监控摄像机', '34020000002000000003', 0, 3, 1, 'admin', NULL, '', '', '2025-01-07 22:09:38', '设备上线'); +INSERT INTO `iot_event_log` VALUES (152, 'online', NULL, 5, '1', 230, '海康监控摄像机', '34020000002000000003', 0, 3, 1, 'admin', NULL, '', '', '2025-01-07 22:24:43', '设备上线'); +INSERT INTO `iot_event_log` VALUES (153, 'online', NULL, 5, '1', 230, '海康监控摄像机', '34020000002000000003', 0, 3, 1, 'admin', NULL, '', '', '2025-01-07 22:39:49', '设备上线'); +INSERT INTO `iot_event_log` VALUES (154, 'online', NULL, 5, '1', 230, '海康监控摄像机', '34020000002000000003', 0, 3, 1, 'admin', NULL, '', '', '2025-01-07 22:54:49', '设备上线'); +INSERT INTO `iot_event_log` VALUES (155, 'online', NULL, 5, '1', 230, '海康监控摄像机', '34020000002000000003', 0, 3, 1, 'admin', NULL, '', '', '2025-01-07 22:54:49', '设备上线'); +INSERT INTO `iot_event_log` VALUES (156, 'online', NULL, 5, '1', 230, '海康监控摄像机', '34020000002000000003', 0, 3, 1, 'admin', NULL, '', '', '2025-01-07 23:09:55', '设备上线'); +INSERT INTO `iot_event_log` VALUES (157, 'online', NULL, 5, '1', 230, '海康监控摄像机', '34020000002000000003', 0, 3, 1, 'admin', NULL, '', '', '2025-01-07 23:09:55', '设备上线'); +INSERT INTO `iot_event_log` VALUES (158, 'online', NULL, 5, '1', 230, '海康监控摄像机', '34020000002000000003', 0, 3, 1, 'admin', NULL, '', '', '2025-01-07 23:24:59', '设备上线'); +INSERT INTO `iot_event_log` VALUES (159, 'online', NULL, 5, '1', 230, '海康监控摄像机', '34020000002000000003', 0, 3, 1, 'admin', NULL, '', '', '2025-01-07 23:24:59', '设备上线'); +INSERT INTO `iot_event_log` VALUES (160, 'online', NULL, 5, '1', 230, '海康监控摄像机', '34020000002000000003', 0, 3, 1, 'admin', NULL, '', '', '2025-01-07 23:40:05', '设备上线'); +INSERT INTO `iot_event_log` VALUES (161, 'online', NULL, 5, '1', 230, '海康监控摄像机', '34020000002000000003', 0, 3, 1, 'admin', NULL, '', '', '2025-01-07 23:40:05', '设备上线'); +INSERT INTO `iot_event_log` VALUES (162, 'online', NULL, 5, '1', 230, '海康监控摄像机', '34020000002000000003', 0, 3, 1, 'admin', NULL, '', '', '2025-01-07 23:55:09', '设备上线'); +INSERT INTO `iot_event_log` VALUES (164, 'online', NULL, 5, '1', 230, '海康监控摄像机', '34020000002000000003', 0, 3, 1, 'admin', NULL, '', '', '2025-01-08 00:10:14', '设备上线'); +INSERT INTO `iot_event_log` VALUES (168, 'online', NULL, 5, '1', 230, '海康监控摄像机', '34020000002000000003', 0, 3, 1, 'admin', NULL, '', '', '2025-01-08 00:25:19', '设备上线'); +INSERT INTO `iot_event_log` VALUES (169, 'online', NULL, 5, '1', 230, '海康监控摄像机', '34020000002000000003', 0, 3, 1, 'admin', NULL, '', '', '2025-01-08 00:40:19', '设备上线'); +INSERT INTO `iot_event_log` VALUES (170, 'online', NULL, 5, '1', 230, '海康监控摄像机', '34020000002000000003', 0, 3, 1, 'admin', NULL, '', '', '2025-01-08 00:55:25', '设备上线'); +INSERT INTO `iot_event_log` VALUES (171, 'online', NULL, 5, '1', 230, '海康监控摄像机', '34020000002000000003', 0, 3, 1, 'admin', NULL, '', '', '2025-01-08 01:10:30', '设备上线'); +INSERT INTO `iot_event_log` VALUES (172, 'online', NULL, 5, '1', 230, '海康监控摄像机', '34020000002000000003', 0, 3, 1, 'admin', NULL, '', '', '2025-01-08 01:25:35', '设备上线'); +INSERT INTO `iot_event_log` VALUES (173, 'offline', NULL, 6, '0', 230, '海康监控摄像机', '34020000002000000003', 0, 3, 1, 'admin', NULL, '', '', '2025-01-08 01:42:00', '设备离线'); +INSERT INTO `iot_event_log` VALUES (174, 'offline', NULL, 6, '0', 230, '海康监控摄像机', '34020000002000000003', 0, 3, 1, 'admin', NULL, '', '', '2025-01-08 01:42:00', '设备离线'); +INSERT INTO `iot_event_log` VALUES (179, 'online', NULL, 5, '1', 232, '工控帮测试设备', 'D15SPS058P39', 0, 3, 1, 'admin', NULL, '', '', '2025-01-08 14:39:03', '设备上线'); +INSERT INTO `iot_event_log` VALUES (183, 'offline', NULL, 6, '0', 232, '工控帮测试设备', 'D15SPS058P39', 0, 3, 1, 'admin', NULL, '', '', '2025-01-08 14:41:20', '设备离线'); +INSERT INTO `iot_event_log` VALUES (184, 'online', NULL, 5, '1', 232, '工控帮测试设备', 'D15SPS058P39', 0, 3, 1, 'admin', NULL, '', '', '2025-01-08 14:41:21', '设备上线'); +INSERT INTO `iot_event_log` VALUES (185, 'online', NULL, 5, '1', 230, '海康监控摄像机', '34020000002000000003', 0, 3, 1, 'admin', NULL, '', '', '2025-01-08 14:42:33', '设备上线'); +INSERT INTO `iot_event_log` VALUES (186, 'online', NULL, 5, '1', 230, '海康监控摄像机', '34020000002000000003', 0, 3, 1, 'admin', NULL, '', '', '2025-01-08 14:42:33', '设备上线'); +INSERT INTO `iot_event_log` VALUES (187, 'online', NULL, 5, '1', 230, '海康监控摄像机', '34020000002000000003', 0, 3, 1, 'admin', NULL, '', '', '2025-01-08 14:42:33', '设备上线'); +INSERT INTO `iot_event_log` VALUES (188, 'online', NULL, 5, '1', 230, '海康监控摄像机', '34020000002000000003', 0, 3, 1, 'admin', NULL, '', '', '2025-01-08 14:42:33', '设备上线'); +INSERT INTO `iot_event_log` VALUES (189, 'online', NULL, 5, '1', 230, '海康监控摄像机', '34020000002000000003', 0, 3, 1, 'admin', NULL, '', '', '2025-01-08 14:42:33', '设备上线'); +INSERT INTO `iot_event_log` VALUES (190, 'online', NULL, 5, '1', 230, '海康监控摄像机', '34020000002000000003', 0, 3, 1, 'admin', NULL, '', '', '2025-01-08 14:42:33', '设备上线'); +INSERT INTO `iot_event_log` VALUES (191, 'online', NULL, 5, '1', 232, '工控帮测试设备', 'D15SPS058P39', 0, 3, 1, 'admin', NULL, '', '', '2025-01-08 14:50:12', '设备上线'); +INSERT INTO `iot_event_log` VALUES (192, 'online', NULL, 5, '1', 232, '工控帮测试设备', 'D15SPS058P39', 0, 3, 1, 'admin', NULL, '', '', '2025-01-08 14:54:52', '设备上线'); +INSERT INTO `iot_event_log` VALUES (193, 'online', NULL, 5, '1', 230, '海康监控摄像机', '34020000002000000003', 0, 3, 1, 'admin', NULL, '', '', '2025-01-08 14:57:32', '设备上线'); +INSERT INTO `iot_event_log` VALUES (194, 'online', NULL, 5, '1', 230, '海康监控摄像机', '34020000002000000003', 0, 3, 1, 'admin', NULL, '', '', '2025-01-08 14:57:32', '设备上线'); +INSERT INTO `iot_event_log` VALUES (195, 'online', NULL, 5, '1', 230, '海康监控摄像机', '34020000002000000003', 0, 3, 1, 'admin', NULL, '', '', '2025-01-08 15:12:37', '设备上线'); +INSERT INTO `iot_event_log` VALUES (196, 'online', NULL, 5, '1', 230, '海康监控摄像机', '34020000002000000003', 0, 3, 1, 'admin', NULL, '', '', '2025-01-08 15:27:42', '设备上线'); +INSERT INTO `iot_event_log` VALUES (197, 'online', NULL, 5, '1', 230, '海康监控摄像机', '34020000002000000003', 0, 3, 1, 'admin', NULL, '', '', '2025-01-08 15:42:47', '设备上线'); +INSERT INTO `iot_event_log` VALUES (198, 'online', NULL, 5, '1', 230, '海康监控摄像机', '34020000002000000003', 0, 3, 1, 'admin', NULL, '', '', '2025-01-08 15:57:52', '设备上线'); +INSERT INTO `iot_event_log` VALUES (199, 'online', NULL, 5, '1', 230, '海康监控摄像机', '34020000002000000003', 0, 3, 1, 'admin', NULL, '', '', '2025-01-08 16:12:57', '设备上线'); +INSERT INTO `iot_event_log` VALUES (200, 'online', NULL, 5, '1', 230, '海康监控摄像机', '34020000002000000003', 0, 3, 1, 'admin', NULL, '', '', '2025-01-08 16:27:57', '设备上线'); +INSERT INTO `iot_event_log` VALUES (201, 'online', NULL, 5, '1', 230, '海康监控摄像机', '34020000002000000003', 0, 3, 1, 'admin', NULL, '', '', '2025-01-08 16:43:02', '设备上线'); +INSERT INTO `iot_event_log` VALUES (202, 'online', NULL, 5, '1', 230, '海康监控摄像机', '34020000002000000003', 0, 3, 1, 'admin', NULL, '', '', '2025-01-08 16:58:08', '设备上线'); +INSERT INTO `iot_event_log` VALUES (203, 'online', NULL, 5, '1', 230, '海康监控摄像机', '34020000002000000003', 0, 3, 1, 'admin', NULL, '', '', '2025-01-08 17:13:13', '设备上线'); +INSERT INTO `iot_event_log` VALUES (204, 'online', NULL, 5, '1', 230, '海康监控摄像机', '34020000002000000003', 0, 3, 1, 'admin', NULL, '', '', '2025-01-08 17:28:18', '设备上线'); +INSERT INTO `iot_event_log` VALUES (205, 'online', NULL, 5, '1', 230, '海康监控摄像机', '34020000002000000003', 0, 3, 1, 'admin', NULL, '', '', '2025-01-08 17:43:23', '设备上线'); +INSERT INTO `iot_event_log` VALUES (206, 'online', NULL, 5, '1', 230, '海康监控摄像机', '34020000002000000003', 0, 3, 1, 'admin', NULL, '', '', '2025-01-08 17:58:28', '设备上线'); +INSERT INTO `iot_event_log` VALUES (207, 'online', NULL, 5, '1', 230, '海康监控摄像机', '34020000002000000003', 0, 3, 1, 'admin', NULL, '', '', '2025-01-08 18:13:28', '设备上线'); +INSERT INTO `iot_event_log` VALUES (208, 'online', NULL, 5, '1', 230, '海康监控摄像机', '34020000002000000003', 0, 3, 1, 'admin', NULL, '', '', '2025-01-08 18:28:33', '设备上线'); +INSERT INTO `iot_event_log` VALUES (209, 'online', NULL, 5, '1', 230, '海康监控摄像机', '34020000002000000003', 0, 3, 1, 'admin', NULL, '', '', '2025-01-08 18:43:38', '设备上线'); +INSERT INTO `iot_event_log` VALUES (210, 'online', NULL, 5, '1', 230, '海康监控摄像机', '34020000002000000003', 0, 3, 1, 'admin', NULL, '', '', '2025-01-08 18:58:43', '设备上线'); +INSERT INTO `iot_event_log` VALUES (211, 'online', NULL, 5, '1', 230, '海康监控摄像机', '34020000002000000003', 0, 3, 1, 'admin', NULL, '', '', '2025-01-08 19:13:49', '设备上线'); +INSERT INTO `iot_event_log` VALUES (212, 'online', NULL, 5, '1', 230, '海康监控摄像机', '34020000002000000003', 0, 3, 1, 'admin', NULL, '', '', '2025-01-08 19:28:54', '设备上线'); +INSERT INTO `iot_event_log` VALUES (213, 'online', NULL, 5, '1', 230, '海康监控摄像机', '34020000002000000003', 0, 3, 1, 'admin', NULL, '', '', '2025-01-08 19:43:54', '设备上线'); +INSERT INTO `iot_event_log` VALUES (214, 'online', NULL, 5, '1', 230, '海康监控摄像机', '34020000002000000003', 0, 3, 1, 'admin', NULL, '', '', '2025-01-08 19:58:59', '设备上线'); +INSERT INTO `iot_event_log` VALUES (215, 'online', NULL, 5, '1', 230, '海康监控摄像机', '34020000002000000003', 0, 3, 1, 'admin', NULL, '', '', '2025-01-08 20:14:04', '设备上线'); +INSERT INTO `iot_event_log` VALUES (216, 'online', NULL, 5, '1', 230, '海康监控摄像机', '34020000002000000003', 0, 3, 1, 'admin', NULL, '', '', '2025-01-08 20:29:09', '设备上线'); +INSERT INTO `iot_event_log` VALUES (217, 'online', NULL, 5, '1', 230, '海康监控摄像机', '34020000002000000003', 0, 3, 1, 'admin', NULL, '', '', '2025-01-08 20:44:14', '设备上线'); +INSERT INTO `iot_event_log` VALUES (218, 'online', NULL, 5, '1', 230, '海康监控摄像机', '34020000002000000003', 0, 3, 1, 'admin', NULL, '', '', '2025-01-08 20:59:19', '设备上线'); +INSERT INTO `iot_event_log` VALUES (219, 'online', NULL, 5, '1', 230, '海康监控摄像机', '34020000002000000003', 0, 3, 1, 'admin', NULL, '', '', '2025-01-08 21:14:24', '设备上线'); +INSERT INTO `iot_event_log` VALUES (220, 'online', NULL, 5, '1', 230, '海康监控摄像机', '34020000002000000003', 0, 3, 1, 'admin', NULL, '', '', '2025-01-08 21:29:25', '设备上线'); +INSERT INTO `iot_event_log` VALUES (221, 'online', NULL, 5, '1', 230, '海康监控摄像机', '34020000002000000003', 0, 3, 1, 'admin', NULL, '', '', '2025-01-08 21:44:30', '设备上线'); +INSERT INTO `iot_event_log` VALUES (222, 'online', NULL, 5, '1', 230, '海康监控摄像机', '34020000002000000003', 0, 3, 1, 'admin', NULL, '', '', '2025-01-08 21:59:35', '设备上线'); +INSERT INTO `iot_event_log` VALUES (223, 'online', NULL, 5, '1', 230, '海康监控摄像机', '34020000002000000003', 0, 3, 1, 'admin', NULL, '', '', '2025-01-08 22:14:40', '设备上线'); +INSERT INTO `iot_event_log` VALUES (224, 'online', NULL, 5, '1', 230, '海康监控摄像机', '34020000002000000003', 0, 3, 1, 'admin', NULL, '', '', '2025-01-08 22:29:45', '设备上线'); +INSERT INTO `iot_event_log` VALUES (225, 'online', NULL, 5, '1', 230, '海康监控摄像机', '34020000002000000003', 0, 3, 1, 'admin', NULL, '', '', '2025-01-08 22:44:50', '设备上线'); +INSERT INTO `iot_event_log` VALUES (226, 'offline', NULL, 6, '0', 230, '海康监控摄像机', '34020000002000000003', 0, 3, 1, 'admin', NULL, '', '', '2025-01-08 22:50:00', '设备离线'); +INSERT INTO `iot_event_log` VALUES (227, 'offline', NULL, 6, '0', 230, '海康监控摄像机', '34020000002000000003', 0, 3, 1, 'admin', NULL, '', '', '2025-01-08 22:50:00', '设备离线'); +INSERT INTO `iot_event_log` VALUES (228, 'online', NULL, 5, '1', 230, '海康监控摄像机', '34020000002000000003', 0, 3, 1, 'admin', NULL, '', '', '2025-01-08 23:02:13', '设备上线'); +INSERT INTO `iot_event_log` VALUES (229, 'online', NULL, 5, '1', 230, '海康监控摄像机', '34020000002000000003', 0, 3, 1, 'admin', NULL, '', '', '2025-01-08 23:02:13', '设备上线'); +INSERT INTO `iot_event_log` VALUES (230, 'online', NULL, 5, '1', 230, '海康监控摄像机', '34020000002000000003', 0, 3, 1, 'admin', NULL, '', '', '2025-01-08 23:02:13', '设备上线'); +INSERT INTO `iot_event_log` VALUES (231, 'online', NULL, 5, '1', 230, '海康监控摄像机', '34020000002000000003', 0, 3, 1, 'admin', NULL, '', '', '2025-01-08 23:02:13', '设备上线'); +INSERT INTO `iot_event_log` VALUES (232, 'online', NULL, 5, '1', 230, '海康监控摄像机', '34020000002000000003', 0, 3, 1, 'admin', NULL, '', '', '2025-01-08 23:02:14', '设备上线'); +INSERT INTO `iot_event_log` VALUES (233, 'online', NULL, 5, '1', 230, '海康监控摄像机', '34020000002000000003', 0, 3, 1, 'admin', NULL, '', '', '2025-01-08 23:02:14', '设备上线'); +INSERT INTO `iot_event_log` VALUES (234, 'offline', NULL, 6, '0', 230, '海康监控摄像机', '34020000002000000003', 0, 3, 1, 'admin', NULL, '', '', '2025-01-08 23:04:00', '设备离线'); +INSERT INTO `iot_event_log` VALUES (235, 'offline', NULL, 6, '0', 230, '海康监控摄像机', '34020000002000000003', 0, 3, 1, 'admin', NULL, '', '', '2025-01-08 23:04:00', '设备离线'); +INSERT INTO `iot_event_log` VALUES (236, 'online', NULL, 5, '1', 230, '海康监控摄像机', '34020000002000000003', 0, 3, 1, 'admin', NULL, '', '', '2025-01-08 23:12:05', '设备上线'); +INSERT INTO `iot_event_log` VALUES (237, 'online', NULL, 5, '1', 230, '海康监控摄像机', '34020000002000000003', 0, 3, 1, 'admin', NULL, '', '', '2025-01-08 23:12:05', '设备上线'); +INSERT INTO `iot_event_log` VALUES (238, 'online', NULL, 5, '1', 230, '海康监控摄像机', '34020000002000000003', 0, 3, 1, 'admin', NULL, '', '', '2025-01-08 23:12:05', '设备上线'); +INSERT INTO `iot_event_log` VALUES (239, 'online', NULL, 5, '1', 230, '海康监控摄像机', '34020000002000000003', 0, 3, 1, 'admin', NULL, '', '', '2025-01-08 23:12:05', '设备上线'); +INSERT INTO `iot_event_log` VALUES (240, 'online', NULL, 5, '1', 230, '海康监控摄像机', '34020000002000000003', 0, 3, 1, 'admin', NULL, '', '', '2025-01-08 23:12:05', '设备上线'); +INSERT INTO `iot_event_log` VALUES (241, 'online', NULL, 5, '1', 230, '海康监控摄像机', '34020000002000000003', 0, 3, 1, 'admin', NULL, '', '', '2025-01-08 23:12:05', '设备上线'); +INSERT INTO `iot_event_log` VALUES (242, 'online', NULL, 5, '1', 230, '海康监控摄像机', '34020000002000000003', 0, 3, 1, 'admin', NULL, '', '', '2025-01-08 23:27:04', '设备上线'); +INSERT INTO `iot_event_log` VALUES (243, 'online', NULL, 5, '1', 230, '海康监控摄像机', '34020000002000000003', 0, 3, 1, 'admin', NULL, '', '', '2025-01-08 23:42:10', '设备上线'); +INSERT INTO `iot_event_log` VALUES (244, 'online', NULL, 5, '1', 230, '海康监控摄像机', '34020000002000000003', 0, 3, 1, 'admin', NULL, '', '', '2025-01-08 23:57:15', '设备上线'); +INSERT INTO `iot_event_log` VALUES (245, 'online', NULL, 5, '1', 230, '海康监控摄像机', '34020000002000000003', 0, 3, 1, 'admin', NULL, '', '', '2025-01-09 00:12:20', '设备上线'); +INSERT INTO `iot_event_log` VALUES (246, 'online', NULL, 5, '1', 230, '海康监控摄像机', '34020000002000000003', 0, 3, 1, 'admin', NULL, '', '', '2025-01-09 00:27:25', '设备上线'); +INSERT INTO `iot_event_log` VALUES (247, 'online', NULL, 5, '1', 230, '海康监控摄像机', '34020000002000000003', 0, 3, 1, 'admin', NULL, '', '', '2025-01-09 00:42:30', '设备上线'); +INSERT INTO `iot_event_log` VALUES (248, 'online', NULL, 5, '1', 230, '海康监控摄像机', '34020000002000000003', 0, 3, 1, 'admin', NULL, '', '', '2025-01-09 00:57:30', '设备上线'); +INSERT INTO `iot_event_log` VALUES (249, 'online', NULL, 5, '1', 230, '海康监控摄像机', '34020000002000000003', 0, 3, 1, 'admin', NULL, '', '', '2025-01-09 01:12:36', '设备上线'); +INSERT INTO `iot_event_log` VALUES (250, 'online', NULL, 5, '1', 230, '海康监控摄像机', '34020000002000000003', 0, 3, 1, 'admin', NULL, '', '', '2025-01-09 01:27:41', '设备上线'); +INSERT INTO `iot_event_log` VALUES (251, 'online', NULL, 5, '1', 230, '海康监控摄像机', '34020000002000000003', 0, 3, 1, 'admin', NULL, '', '', '2025-01-09 01:42:46', '设备上线'); +INSERT INTO `iot_event_log` VALUES (252, 'online', NULL, 5, '1', 230, '海康监控摄像机', '34020000002000000003', 0, 3, 1, 'admin', NULL, '', '', '2025-01-09 01:57:51', '设备上线'); +INSERT INTO `iot_event_log` VALUES (253, 'online', NULL, 5, '1', 230, '海康监控摄像机', '34020000002000000003', 0, 3, 1, 'admin', NULL, '', '', '2025-01-09 02:12:56', '设备上线'); +INSERT INTO `iot_event_log` VALUES (254, 'online', NULL, 5, '1', 230, '海康监控摄像机', '34020000002000000003', 0, 3, 1, 'admin', NULL, '', '', '2025-01-09 02:27:56', '设备上线'); +INSERT INTO `iot_event_log` VALUES (255, 'online', NULL, 5, '1', 230, '海康监控摄像机', '34020000002000000003', 0, 3, 1, 'admin', NULL, '', '', '2025-01-09 02:43:02', '设备上线'); +INSERT INTO `iot_event_log` VALUES (256, 'online', NULL, 5, '1', 230, '海康监控摄像机', '34020000002000000003', 0, 3, 1, 'admin', NULL, '', '', '2025-01-09 02:58:07', '设备上线'); +INSERT INTO `iot_event_log` VALUES (257, 'online', NULL, 5, '1', 230, '海康监控摄像机', '34020000002000000003', 0, 3, 1, 'admin', NULL, '', '', '2025-01-09 03:13:12', '设备上线'); +INSERT INTO `iot_event_log` VALUES (258, 'online', NULL, 5, '1', 230, '海康监控摄像机', '34020000002000000003', 0, 3, 1, 'admin', NULL, '', '', '2025-01-09 03:28:17', '设备上线'); +INSERT INTO `iot_event_log` VALUES (259, 'online', NULL, 5, '1', 230, '海康监控摄像机', '34020000002000000003', 0, 3, 1, 'admin', NULL, '', '', '2025-01-09 03:43:22', '设备上线'); +INSERT INTO `iot_event_log` VALUES (260, 'online', NULL, 5, '1', 230, '海康监控摄像机', '34020000002000000003', 0, 3, 1, 'admin', NULL, '', '', '2025-01-09 03:58:22', '设备上线'); +INSERT INTO `iot_event_log` VALUES (261, 'online', NULL, 5, '1', 230, '海康监控摄像机', '34020000002000000003', 0, 3, 1, 'admin', NULL, '', '', '2025-01-09 04:13:28', '设备上线'); +INSERT INTO `iot_event_log` VALUES (262, 'online', NULL, 5, '1', 230, '海康监控摄像机', '34020000002000000003', 0, 3, 1, 'admin', NULL, '', '', '2025-01-09 04:28:33', '设备上线'); +INSERT INTO `iot_event_log` VALUES (263, 'online', NULL, 5, '1', 230, '海康监控摄像机', '34020000002000000003', 0, 3, 1, 'admin', NULL, '', '', '2025-01-09 04:43:38', '设备上线'); +INSERT INTO `iot_event_log` VALUES (264, 'online', NULL, 5, '1', 230, '海康监控摄像机', '34020000002000000003', 0, 3, 1, 'admin', NULL, '', '', '2025-01-09 04:58:43', '设备上线'); +INSERT INTO `iot_event_log` VALUES (265, 'online', NULL, 5, '1', 230, '海康监控摄像机', '34020000002000000003', 0, 3, 1, 'admin', NULL, '', '', '2025-01-09 05:13:48', '设备上线'); +INSERT INTO `iot_event_log` VALUES (266, 'online', NULL, 5, '1', 230, '海康监控摄像机', '34020000002000000003', 0, 3, 1, 'admin', NULL, '', '', '2025-01-09 05:28:48', '设备上线'); +INSERT INTO `iot_event_log` VALUES (267, 'online', NULL, 5, '1', 230, '海康监控摄像机', '34020000002000000003', 0, 3, 1, 'admin', NULL, '', '', '2025-01-09 05:43:54', '设备上线'); +INSERT INTO `iot_event_log` VALUES (269, 'online', NULL, 5, '1', 230, '海康监控摄像机', '34020000002000000003', 0, 3, 1, 'admin', NULL, '', '', '2025-01-09 05:58:59', '设备上线'); +INSERT INTO `iot_event_log` VALUES (273, 'online', NULL, 5, '1', 230, '海康监控摄像机', '34020000002000000003', 0, 3, 1, 'admin', NULL, '', '', '2025-01-09 06:14:04', '设备上线'); +INSERT INTO `iot_event_log` VALUES (274, 'online', NULL, 5, '1', 230, '海康监控摄像机', '34020000002000000003', 0, 3, 1, 'admin', NULL, '', '', '2025-01-09 06:29:09', '设备上线'); +INSERT INTO `iot_event_log` VALUES (275, 'online', NULL, 5, '1', 230, '海康监控摄像机', '34020000002000000003', 0, 3, 1, 'admin', NULL, '', '', '2025-01-09 06:44:14', '设备上线'); +INSERT INTO `iot_event_log` VALUES (276, 'online', NULL, 5, '1', 230, '海康监控摄像机', '34020000002000000003', 0, 3, 1, 'admin', NULL, '', '', '2025-01-09 06:59:14', '设备上线'); +INSERT INTO `iot_event_log` VALUES (277, 'online', NULL, 5, '1', 230, '海康监控摄像机', '34020000002000000003', 0, 3, 1, 'admin', NULL, '', '', '2025-01-09 07:14:19', '设备上线'); +INSERT INTO `iot_event_log` VALUES (279, 'online', NULL, 5, '1', 230, '海康监控摄像机', '34020000002000000003', 0, 3, 1, 'admin', NULL, '', '', '2025-01-09 07:29:25', '设备上线'); +INSERT INTO `iot_event_log` VALUES (282, 'online', NULL, 5, '1', 230, '海康监控摄像机', '34020000002000000003', 0, 3, 1, 'admin', NULL, '', '', '2025-01-09 07:44:30', '设备上线'); +INSERT INTO `iot_event_log` VALUES (286, 'online', NULL, 5, '1', 230, '海康监控摄像机', '34020000002000000003', 0, 3, 1, 'admin', NULL, '', '', '2025-01-09 07:59:35', '设备上线'); +INSERT INTO `iot_event_log` VALUES (287, 'online', NULL, 5, '1', 234, '物联网开发板', 'D1J4798YESR2', 0, 3, 1, 'admin', NULL, '', '', '2025-01-09 08:08:43', '设备上线'); +INSERT INTO `iot_event_log` VALUES (288, 'offline', NULL, 6, '0', 234, '物联网开发板', 'D1J4798YESR2', 0, 3, 1, 'admin', NULL, '', '', '2025-01-09 08:09:16', '设备离线'); +INSERT INTO `iot_event_log` VALUES (289, 'online', NULL, 5, '1', 234, '物联网开发板', 'D1J4798YESR2', 0, 3, 1, 'admin', NULL, '', '', '2025-01-09 08:09:16', '设备上线'); +INSERT INTO `iot_event_log` VALUES (290, 'offline', NULL, 6, '0', 234, '物联网开发板', 'D1J4798YESR2', 0, 3, 1, 'admin', NULL, '', '', '2025-01-09 08:11:55', '设备离线'); +INSERT INTO `iot_event_log` VALUES (291, 'online', NULL, 5, '1', 230, '海康监控摄像机', '34020000002000000003', 0, 3, 1, 'admin', NULL, '', '', '2025-01-09 08:14:40', '设备上线'); +INSERT INTO `iot_event_log` VALUES (292, 'online', NULL, 5, '1', 230, '海康监控摄像机', '34020000002000000003', 0, 3, 1, 'admin', NULL, '', '', '2025-01-09 08:29:45', '设备上线'); +INSERT INTO `iot_event_log` VALUES (293, 'online', NULL, 5, '1', 230, '海康监控摄像机', '34020000002000000003', 0, 3, 1, 'admin', NULL, '', '', '2025-01-09 08:44:45', '设备上线'); +INSERT INTO `iot_event_log` VALUES (294, 'online', NULL, 5, '1', 230, '海康监控摄像机', '34020000002000000003', 0, 3, 1, 'admin', NULL, '', '', '2025-01-09 08:59:51', '设备上线'); +INSERT INTO `iot_event_log` VALUES (295, 'online', NULL, 5, '1', 230, '海康监控摄像机', '34020000002000000003', 0, 3, 1, 'admin', NULL, '', '', '2025-01-09 09:14:56', '设备上线'); +INSERT INTO `iot_event_log` VALUES (296, 'online', NULL, 5, '1', 230, '海康监控摄像机', '34020000002000000003', 0, 3, 1, 'admin', NULL, '', '', '2025-01-09 09:30:01', '设备上线'); +INSERT INTO `iot_event_log` VALUES (297, 'online', NULL, 5, '1', 230, '海康监控摄像机', '34020000002000000003', 0, 3, 1, 'admin', NULL, '', '', '2025-01-09 09:45:06', '设备上线'); +INSERT INTO `iot_event_log` VALUES (298, 'online', NULL, 5, '1', 230, '海康监控摄像机', '34020000002000000003', 0, 3, 1, 'admin', NULL, '', '', '2025-01-09 10:00:11', '设备上线'); +INSERT INTO `iot_event_log` VALUES (299, 'online', NULL, 5, '1', 230, '海康监控摄像机', '34020000002000000003', 0, 3, 1, 'admin', NULL, '', '', '2025-01-09 10:15:11', '设备上线'); +INSERT INTO `iot_event_log` VALUES (300, 'online', NULL, 5, '1', 230, '海康监控摄像机', '34020000002000000003', 0, 3, 1, 'admin', NULL, '', '', '2025-01-09 10:30:16', '设备上线'); +INSERT INTO `iot_event_log` VALUES (301, 'online', NULL, 5, '1', 230, '海康监控摄像机', '34020000002000000003', 0, 3, 1, 'admin', NULL, '', '', '2025-01-09 10:45:22', '设备上线'); +INSERT INTO `iot_event_log` VALUES (302, 'online', NULL, 5, '1', 230, '海康监控摄像机', '34020000002000000003', 0, 3, 1, 'admin', NULL, '', '', '2025-01-09 11:00:27', '设备上线'); +INSERT INTO `iot_event_log` VALUES (303, 'online', NULL, 5, '1', 230, '海康监控摄像机', '34020000002000000003', 0, 3, 1, 'admin', NULL, '', '', '2025-01-09 11:15:32', '设备上线'); +INSERT INTO `iot_event_log` VALUES (304, 'online', NULL, 5, '1', 230, '海康监控摄像机', '34020000002000000003', 0, 3, 1, 'admin', NULL, '', '', '2025-01-09 11:30:37', '设备上线'); +INSERT INTO `iot_event_log` VALUES (305, 'online', NULL, 5, '1', 230, '海康监控摄像机', '34020000002000000003', 0, 3, 1, 'admin', NULL, '', '', '2025-01-09 11:45:37', '设备上线'); +INSERT INTO `iot_event_log` VALUES (306, 'online', NULL, 5, '1', 230, '海康监控摄像机', '34020000002000000003', 0, 3, 1, 'admin', NULL, '', '', '2025-01-09 12:00:43', '设备上线'); +INSERT INTO `iot_event_log` VALUES (307, 'online', NULL, 5, '1', 230, '海康监控摄像机', '34020000002000000003', 0, 3, 1, 'admin', NULL, '', '', '2025-01-09 12:15:48', '设备上线'); +INSERT INTO `iot_event_log` VALUES (308, 'online', NULL, 5, '1', 230, '海康监控摄像机', '34020000002000000003', 0, 3, 1, 'admin', NULL, '', '', '2025-01-09 12:30:53', '设备上线'); +INSERT INTO `iot_event_log` VALUES (309, 'online', NULL, 5, '1', 230, '海康监控摄像机', '34020000002000000003', 0, 3, 1, 'admin', NULL, '', '', '2025-01-09 12:45:58', '设备上线'); +INSERT INTO `iot_event_log` VALUES (310, 'online', NULL, 5, '1', 230, '海康监控摄像机', '34020000002000000003', 0, 3, 1, 'admin', NULL, '', '', '2025-01-09 13:01:03', '设备上线'); +INSERT INTO `iot_event_log` VALUES (311, 'online', NULL, 5, '1', 230, '海康监控摄像机', '34020000002000000003', 0, 3, 1, 'admin', NULL, '', '', '2025-01-09 13:16:03', '设备上线'); +INSERT INTO `iot_event_log` VALUES (312, 'online', NULL, 5, '1', 230, '海康监控摄像机', '34020000002000000003', 0, 3, 1, 'admin', NULL, '', '', '2025-01-09 13:31:08', '设备上线'); +INSERT INTO `iot_event_log` VALUES (313, 'online', NULL, 5, '1', 230, '海康监控摄像机', '34020000002000000003', 0, 3, 1, 'admin', NULL, '', '', '2025-01-09 13:46:14', '设备上线'); +INSERT INTO `iot_event_log` VALUES (314, 'online', NULL, 5, '1', 230, '海康监控摄像机', '34020000002000000003', 0, 3, 1, 'admin', NULL, '', '', '2025-01-09 14:01:19', '设备上线'); +INSERT INTO `iot_event_log` VALUES (315, 'online', NULL, 5, '1', 230, '海康监控摄像机', '34020000002000000003', 0, 3, 1, 'admin', NULL, '', '', '2025-01-09 14:16:24', '设备上线'); +INSERT INTO `iot_event_log` VALUES (316, 'online', NULL, 5, '1', 230, '海康监控摄像机', '34020000002000000003', 0, 3, 1, 'admin', NULL, '', '', '2025-01-09 14:31:29', '设备上线'); + +-- ---------------------------- +-- Table structure for iot_firmware +-- ---------------------------- +DROP TABLE IF EXISTS `iot_firmware`; +CREATE TABLE `iot_firmware` ( + `firmware_id` bigint NOT NULL AUTO_INCREMENT COMMENT '固件ID', + `firmware_name` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL COMMENT '固件名称', + `product_id` bigint NOT NULL COMMENT '产品ID', + `product_name` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL COMMENT '产品名称', + `tenant_id` bigint NOT NULL COMMENT '租户ID', + `tenant_name` varchar(30) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL DEFAULT '' COMMENT '租户名称', + `is_sys` tinyint(1) NOT NULL DEFAULT 0 COMMENT '是否系统通用(0-否,1-是)', + `is_latest` tinyint(1) NOT NULL COMMENT '是否最新版本(0-否,1-是)', + `version` float(11, 2) NOT NULL DEFAULT 0.10 COMMENT '固件版本', + `file_path` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL DEFAULT '' COMMENT '文件路径', + `del_flag` char(1) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT '0' COMMENT '删除标志(0代表存在 2代表删除)', + `create_by` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT '' COMMENT '创建者', + `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间', + `update_by` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT '' COMMENT '更新者', + `update_time` datetime NULL DEFAULT NULL COMMENT '更新时间', + `remark` varchar(500) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT NULL COMMENT '备注', + PRIMARY KEY (`firmware_id`) USING BTREE, + INDEX `iot_firmware_index_product_id`(`product_id`) USING BTREE, + INDEX `iot_firmware_index_tenant_id`(`tenant_id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb3 COLLATE = utf8mb3_general_ci COMMENT = '产品固件' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of iot_firmware +-- ---------------------------- + +-- ---------------------------- +-- Table structure for iot_firmware_task +-- ---------------------------- +DROP TABLE IF EXISTS `iot_firmware_task`; +CREATE TABLE `iot_firmware_task` ( + `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键', + `task_name` varchar(60) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '任务名称', + `firmware_id` bigint UNSIGNED NOT NULL COMMENT '关联固件ID', + `upgrade_type` int NOT NULL DEFAULT 1 COMMENT '1:指定设备 2:产品级别', + `task_desc` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '', + `device_amount` int NOT NULL DEFAULT 0 COMMENT '选中的设备总数', + `del_flag` int NOT NULL DEFAULT 0, + `update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + `book_time` timestamp NULL DEFAULT NULL COMMENT '预定时间升级', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 5 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '固件升级任务对象' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of iot_firmware_task +-- ---------------------------- +INSERT INTO `iot_firmware_task` VALUES (1, '测试任务0227', 1, 2, '测试', 1, 0, '2023-02-28 08:23:21', '2023-02-28 08:23:21', '2023-02-28 08:23:18'); +INSERT INTO `iot_firmware_task` VALUES (2, '测试任务227', 1, 2, '1', 1, 0, '2023-03-01 02:04:33', '2023-02-28 08:58:04', '2023-02-28 08:58:01'); +INSERT INTO `iot_firmware_task` VALUES (3, '111', 1, 1, '', 1, 0, '2023-09-25 09:02:23', '2023-09-25 09:02:23', '2023-09-25 09:02:17'); +INSERT INTO `iot_firmware_task` VALUES (4, '99888', 1, 1, '', 1, 0, '2023-09-25 09:02:45', '2023-09-25 09:02:45', '2023-09-29 09:02:17'); + +-- ---------------------------- +-- Table structure for iot_firmware_task_detail +-- ---------------------------- +DROP TABLE IF EXISTS `iot_firmware_task_detail`; +CREATE TABLE `iot_firmware_task_detail` ( + `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键', + `task_id` bigint UNSIGNED NOT NULL DEFAULT 0, + `serial_number` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '设备编码', + `upgrade_status` int NOT NULL DEFAULT 0 COMMENT '0:等待升级 1:已发送设备 2:设备收到 3:升级成功 4:升级失败', + `detail_msg` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '描述', + `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + `message_id` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '消息ID', + `update_time` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 21 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '固件升级任务详细对象' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of iot_firmware_task_detail +-- ---------------------------- +INSERT INTO `iot_firmware_task_detail` VALUES (1, 1, 'D1ELV3A5TOJS', 0, '等待升级-未推送固件到设备', '2023-02-28 08:24:15', '', '2023-03-01 02:34:33'); +INSERT INTO `iot_firmware_task_detail` VALUES (2, 2, 'D1ELV3A5TOJH', 3, '升级成功', '2023-02-28 08:58:17', '1677550503', '2023-03-01 02:34:51'); +INSERT INTO `iot_firmware_task_detail` VALUES (3, 3, 'D1ELV3A5TOJH', 1, '已发送', '2023-03-01 02:09:49', '1677550501', '2023-03-01 02:34:38'); +INSERT INTO `iot_firmware_task_detail` VALUES (4, 3, 'D1ELV3A5TORG', 2, '设备OTA升级中', '2023-03-01 02:09:56', '1677550502', '2023-03-01 02:34:40'); +INSERT INTO `iot_firmware_task_detail` VALUES (5, 4, 'D1ELV3A5TOJS', 3, '升级成功', '2023-03-01 02:11:30', '1677550504', '2023-03-01 02:34:48'); +INSERT INTO `iot_firmware_task_detail` VALUES (6, 4, 'D1ELV3A523RG', 0, '等待升级-未推送固件到设备', '2023-03-01 02:11:34', '', '2023-03-01 02:34:31'); +INSERT INTO `iot_firmware_task_detail` VALUES (7, 4, 'D1ELV3A576RG', 2, '设备OTA升级中', '2023-03-01 02:11:40', '1677550505', '2023-03-01 02:34:06'); +INSERT INTO `iot_firmware_task_detail` VALUES (11, 5, 'D1ELV3A562RG', 4, '失败', '2023-03-01 02:12:14', '1677550509', '2023-03-01 02:33:53'); +INSERT INTO `iot_firmware_task_detail` VALUES (12, 9, 'D1ELV3A576RG', 1, '已发送', '2023-03-01 02:28:33', NULL, '2023-03-01 02:28:33'); +INSERT INTO `iot_firmware_task_detail` VALUES (17, 9, 'D1ELV3A5TORG', 5, '停止', '2023-03-01 02:28:33', NULL, '2023-03-01 02:33:49'); +INSERT INTO `iot_firmware_task_detail` VALUES (18, 10, 'D1ELV3A562RG', 0, '等待升级', '2023-03-29 16:29:23', NULL, '2023-03-29 16:30:23'); +INSERT INTO `iot_firmware_task_detail` VALUES (19, 3, 'D1ELV3A5TOJS', 0, '等待升级', '2023-09-25 09:02:23', NULL, '2023-09-25 09:02:23'); +INSERT INTO `iot_firmware_task_detail` VALUES (20, 4, 'D1ELV3A5TOJS', 0, '等待升级', '2023-09-25 09:02:45', NULL, '2023-09-25 09:02:45'); + +-- ---------------------------- +-- Table structure for iot_function_log +-- ---------------------------- +DROP TABLE IF EXISTS `iot_function_log`; +CREATE TABLE `iot_function_log` ( + `id` bigint NOT NULL AUTO_INCREMENT COMMENT '设备功能日志ID', + `identify` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_ci NOT NULL COMMENT '标识符', + `fun_type` int NOT NULL COMMENT '1==服务下发,2=属性获取,3.OTA升级', + `fun_value` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_ci NOT NULL COMMENT '日志值', + `message_id` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_ci NULL DEFAULT NULL COMMENT '消息id', + `device_name` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_ci NULL DEFAULT NULL COMMENT '设备名称', + `serial_number` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_ci NOT NULL COMMENT '设备编号', + `mode` int NULL DEFAULT NULL COMMENT '模式(1=影子模式,2=在线模式,3=其他)', + `user_id` bigint NULL DEFAULT NULL COMMENT '用户id', + `result_msg` varchar(128) CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_ci NULL DEFAULT NULL COMMENT '下发结果描述', + `result_code` int NULL DEFAULT NULL COMMENT '下发结果代码', + `create_by` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_ci NULL DEFAULT NULL COMMENT '创建者', + `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间', + `remark` varchar(128) CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_ci NULL DEFAULT NULL COMMENT '备注', + `show_value` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_ci NULL DEFAULT NULL COMMENT '显示值', + `model_name` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_ci NULL DEFAULT NULL COMMENT '物模型名称', + `reply_time` datetime NULL DEFAULT NULL COMMENT '设备回复时间', + PRIMARY KEY (`id`) USING BTREE, + UNIQUE INDEX `iot_function_log_id_uindex`(`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb3 COLLATE = utf8mb3_unicode_ci COMMENT = '设备服务下发日志' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of iot_function_log +-- ---------------------------- + +-- ---------------------------- +-- Table structure for iot_goview_project +-- ---------------------------- +DROP TABLE IF EXISTS `iot_goview_project`; +CREATE TABLE `iot_goview_project` ( + `id` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '主键', + `project_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '项目名称', + `state` int NOT NULL DEFAULT 0 COMMENT '项目状态[0未发布,1发布]', + `index_image` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '首页图片', + `del_flag` int NOT NULL DEFAULT 0 COMMENT '删除状态[1删除,-1未删除]', + `create_time` datetime NOT NULL COMMENT '创建时间', + `create_by` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '创建人id', + `update_time` datetime NULL DEFAULT NULL COMMENT '更新时间', + `remarks` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '项目介绍', + `tenant_id` bigint NULL DEFAULT NULL COMMENT '租户id', + `tenant_name` varchar(30) CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_ci NULL DEFAULT NULL COMMENT '租户名称', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '项目表' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of iot_goview_project +-- ---------------------------- +INSERT INTO `iot_goview_project` VALUES ('02d4e08586b34867b0e274faf0625049', 'XinDa可视化大屏', 1, '/profile/goview/6/02d4e08586b34867b0e274faf0625049_index_preview.png', 0, '2024-04-18 08:43:41', '6', '2024-04-26 16:41:07', NULL, 1, 'admin'); + +-- ---------------------------- +-- Table structure for iot_goview_project_data +-- ---------------------------- +DROP TABLE IF EXISTS `iot_goview_project_data`; +CREATE TABLE `iot_goview_project_data` ( + `id` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '主键', + `project_id` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '项目id', + `content` longblob NULL COMMENT '存储数据', + `create_time` datetime NOT NULL COMMENT '创建时间', + `create_by` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '创建人id', + `update_time` datetime NULL DEFAULT NULL COMMENT '更新时间', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '项目数据关联表' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of iot_goview_project_data +-- ---------------------------- +INSERT INTO `iot_goview_project_data` VALUES ('78c00730666a4525896fc37a7d0fcce9', '02d4e08586b34867b0e274faf0625049', 0x7B0D0A2020226564697443616E766173436F6E666967223A207B0D0A202020202270726F6A6563744E616D65223A202246617374426565E58FAFE8A786E58C96E5A4A7E5B18F222C0D0A20202020227769647468223A20313932302C0D0A2020202022686569676874223A20313038302C0D0A202020202266696C74657253686F77223A2066616C73652C0D0A2020202022687565526F74617465223A20302C0D0A20202020227361747572617465223A20312C0D0A2020202022636F6E7472617374223A20312C0D0A20202020226272696768746E657373223A20312C0D0A20202020226F706163697479223A20312C0D0A2020202022726F746174655A223A20302C0D0A2020202022726F7461746558223A20302C0D0A2020202022726F7461746559223A20302C0D0A2020202022736B657758223A20302C0D0A2020202022736B657759223A20302C0D0A2020202022626C656E644D6F6465223A20226E6F726D616C222C0D0A20202020226261636B67726F756E64223A206E756C6C2C0D0A20202020226261636B67726F756E64496D616765223A20222F70726F642D6170692F70726F66696C652F676F766965772F312F35346465613938306162316534616231383961346134386138626430353139615F696E6465785F6261636B67726F756E642E706E673F74696D653D31363837323331393030303838222C0D0A202020202273656C656374436F6C6F72223A2066616C73652C0D0A202020202263686172745468656D65436F6C6F72223A20226461726B222C0D0A20202020226368617274437573746F6D5468656D65436F6C6F72496E666F223A206E756C6C2C0D0A202020202263686172745468656D6553657474696E67223A207B0D0A202020202020227469746C65223A207B0D0A20202020202020202273686F77223A20747275652C0D0A202020202020202022746578745374796C65223A207B0D0A2020202020202020202022636F6C6F72223A202223424642464246222C0D0A2020202020202020202022666F6E7453697A65223A2031380D0A20202020202020207D2C0D0A202020202020202022737562746578745374796C65223A207B0D0A2020202020202020202022636F6C6F72223A202223413241324132222C0D0A2020202020202020202022666F6E7453697A65223A2031340D0A20202020202020207D0D0A2020202020207D2C0D0A202020202020227841786973223A207B0D0A20202020202020202273686F77223A20747275652C0D0A2020202020202020226E616D65223A2022222C0D0A2020202020202020226E616D65476170223A2031352C0D0A2020202020202020226E616D65546578745374796C65223A207B0D0A2020202020202020202022636F6C6F72223A202223423942384345222C0D0A2020202020202020202022666F6E7453697A65223A2031320D0A20202020202020207D2C0D0A202020202020202022696E7665727365223A2066616C73652C0D0A202020202020202022617869734C6162656C223A207B0D0A202020202020202020202273686F77223A20747275652C0D0A2020202020202020202022666F6E7453697A65223A2031322C0D0A2020202020202020202022636F6C6F72223A202223423942384345222C0D0A2020202020202020202022726F74617465223A20300D0A20202020202020207D2C0D0A202020202020202022706F736974696F6E223A2022626F74746F6D222C0D0A202020202020202022617869734C696E65223A207B0D0A202020202020202020202273686F77223A20747275652C0D0A20202020202020202020226C696E655374796C65223A207B0D0A20202020202020202020202022636F6C6F72223A202223423942384345222C0D0A202020202020202020202020227769647468223A20310D0A202020202020202020207D2C0D0A20202020202020202020226F6E5A65726F223A20747275650D0A20202020202020207D2C0D0A202020202020202022617869735469636B223A207B0D0A202020202020202020202273686F77223A20747275652C0D0A20202020202020202020226C656E677468223A20350D0A20202020202020207D2C0D0A20202020202020202273706C69744C696E65223A207B0D0A202020202020202020202273686F77223A2066616C73652C0D0A20202020202020202020226C696E655374796C65223A207B0D0A20202020202020202020202022636F6C6F72223A202223343834373533222C0D0A202020202020202020202020227769647468223A20312C0D0A2020202020202020202020202274797065223A2022736F6C6964220D0A202020202020202020207D0D0A20202020202020207D0D0A2020202020207D2C0D0A202020202020227941786973223A207B0D0A20202020202020202273686F77223A20747275652C0D0A2020202020202020226E616D65223A2022222C0D0A2020202020202020226E616D65476170223A2031352C0D0A2020202020202020226E616D65546578745374796C65223A207B0D0A2020202020202020202022636F6C6F72223A202223423942384345222C0D0A2020202020202020202022666F6E7453697A65223A2031320D0A20202020202020207D2C0D0A202020202020202022696E7665727365223A2066616C73652C0D0A202020202020202022617869734C6162656C223A207B0D0A202020202020202020202273686F77223A20747275652C0D0A2020202020202020202022666F6E7453697A65223A2031322C0D0A2020202020202020202022636F6C6F72223A202223423942384345222C0D0A2020202020202020202022726F74617465223A20300D0A20202020202020207D2C0D0A202020202020202022706F736974696F6E223A20226C656674222C0D0A202020202020202022617869734C696E65223A207B0D0A202020202020202020202273686F77223A20747275652C0D0A20202020202020202020226C696E655374796C65223A207B0D0A20202020202020202020202022636F6C6F72223A202223423942384345222C0D0A202020202020202020202020227769647468223A20310D0A202020202020202020207D2C0D0A20202020202020202020226F6E5A65726F223A20747275650D0A20202020202020207D2C0D0A202020202020202022617869735469636B223A207B0D0A202020202020202020202273686F77223A20747275652C0D0A20202020202020202020226C656E677468223A20350D0A20202020202020207D2C0D0A20202020202020202273706C69744C696E65223A207B0D0A202020202020202020202273686F77223A20747275652C0D0A20202020202020202020226C696E655374796C65223A207B0D0A20202020202020202020202022636F6C6F72223A202223343834373533222C0D0A202020202020202020202020227769647468223A20312C0D0A2020202020202020202020202274797065223A2022736F6C6964220D0A202020202020202020207D0D0A20202020202020207D0D0A2020202020207D2C0D0A202020202020226C6567656E64223A207B0D0A20202020202020202273686F77223A20747275652C0D0A20202020202020202274797065223A20227363726F6C6C222C0D0A20202020202020202278223A202263656E746572222C0D0A20202020202020202279223A2022746F70222C0D0A20202020202020202269636F6E223A2022636972636C65222C0D0A2020202020202020226F7269656E74223A2022686F72697A6F6E74616C222C0D0A202020202020202022746578745374796C65223A207B0D0A2020202020202020202022636F6C6F72223A202223423942384345222C0D0A2020202020202020202022666F6E7453697A65223A2031380D0A20202020202020207D2C0D0A2020202020202020226974656D486569676874223A2031352C0D0A2020202020202020226974656D5769647468223A2031352C0D0A20202020202020202270616765546578745374796C65223A207B0D0A2020202020202020202022636F6C6F72223A202223423942384345220D0A20202020202020207D0D0A2020202020207D2C0D0A2020202020202267726964223A207B0D0A20202020202020202273686F77223A2066616C73652C0D0A2020202020202020226C656674223A2022313025222C0D0A202020202020202022746F70223A20223630222C0D0A2020202020202020227269676874223A2022313025222C0D0A202020202020202022626F74746F6D223A20223630220D0A2020202020207D2C0D0A2020202020202264617461736574223A206E756C6C2C0D0A2020202020202272656E6465726572223A2022737667220D0A202020207D2C0D0A2020202022707265766965775363616C6554797065223A2022666974220D0A20207D2C0D0A202022636F6D706F6E656E744C697374223A205B0D0A202020207B0D0A202020202020226964223A202232733661673065377A6B79303030222C0D0A20202020202022697347726F7570223A2066616C73652C0D0A2020202020202261747472223A207B0D0A20202020202020202278223A20312E352C0D0A20202020202020202279223A203431352C0D0A20202020202020202277223A203536302C0D0A20202020202020202268223A203331302C0D0A2020202020202020226F666673657458223A20302C0D0A2020202020202020226F666673657459223A20302C0D0A2020202020202020227A496E646578223A202D310D0A2020202020207D2C0D0A202020202020227374796C6573223A207B0D0A20202020202020202266696C74657253686F77223A2066616C73652C0D0A202020202020202022687565526F74617465223A20302C0D0A2020202020202020227361747572617465223A20312C0D0A202020202020202022636F6E7472617374223A20312C0D0A2020202020202020226272696768746E657373223A20312C0D0A2020202020202020226F706163697479223A20312C0D0A202020202020202022726F746174655A223A20302C0D0A202020202020202022726F7461746558223A20302C0D0A202020202020202022726F7461746559223A20302C0D0A202020202020202022736B657758223A20302C0D0A202020202020202022736B657759223A20302C0D0A202020202020202022626C656E644D6F6465223A20226E6F726D616C222C0D0A202020202020202022616E696D6174696F6E73223A205B5D0D0A2020202020207D2C0D0A2020202020202270726576696577223A207B0D0A2020202020202020226F766572466C6F7748696464656E223A2066616C73650D0A2020202020207D2C0D0A20202020202022737461747573223A207B0D0A2020202020202020226C6F636B223A2066616C73652C0D0A20202020202020202268696465223A2066616C73650D0A2020202020207D2C0D0A2020202020202272657175657374223A207B0D0A202020202020202022726571756573744461746154797065223A20302C0D0A202020202020202022726571756573744874747054797065223A2022676574222C0D0A2020202020202020227265717565737455726C223A2022222C0D0A20202020202020202272657175657374496E74657276616C223A206E756C6C2C0D0A20202020202020202272657175657374496E74657276616C556E6974223A20227365636F6E64222C0D0A20202020202020202272657175657374436F6E74656E7454797065223A20302C0D0A20202020202020202272657175657374506172616D73426F647954797065223A20226E6F6E65222C0D0A2020202020202020227265717565737453514C436F6E74656E74223A207B0D0A202020202020202020202273716C223A202273656C656374202A2066726F6D20207768657265220D0A20202020202020207D2C0D0A20202020202020202272657175657374506172616D73223A207B0D0A2020202020202020202022426F6479223A207B0D0A20202020202020202020202022666F726D2D64617461223A207B7D2C0D0A20202020202020202020202022782D7777772D666F726D2D75726C656E636F646564223A207B7D2C0D0A202020202020202020202020226A736F6E223A2022222C0D0A20202020202020202020202022786D6C223A2022220D0A202020202020202020207D2C0D0A2020202020202020202022486561646572223A207B7D2C0D0A2020202020202020202022506172616D73223A207B7D0D0A20202020202020207D0D0A2020202020207D2C0D0A2020202020202266696C746572223A206E756C6C2C0D0A202020202020226576656E7473223A207B0D0A202020202020202022626173654576656E74223A207B0D0A2020202020202020202022636C69636B223A206E756C6C2C0D0A202020202020202020202264626C636C69636B223A206E756C6C2C0D0A20202020202020202020226D6F757365656E746572223A206E756C6C2C0D0A20202020202020202020226D6F7573656C65617665223A206E756C6C0D0A20202020202020207D2C0D0A202020202020202022616476616E6365644576656E7473223A207B0D0A2020202020202020202022766E6F64654D6F756E746564223A206E756C6C2C0D0A2020202020202020202022766E6F64654265666F72654D6F756E74223A206E756C6C0D0A20202020202020207D2C0D0A202020202020202022696E7465726163744576656E7473223A205B5D0D0A2020202020207D2C0D0A202020202020226B6579223A2022426F726465723032222C0D0A202020202020226368617274436F6E666967223A207B0D0A2020202020202020226B6579223A2022426F726465723032222C0D0A20202020202020202263686172744B6579223A202256426F726465723032222C0D0A202020202020202022636F6E4B6579223A20225643426F726465723032222C0D0A2020202020202020227469746C65223A2022E8BEB9E6A1862D3032222C0D0A20202020202020202263617465676F7279223A2022426F7264657273222C0D0A20202020202020202263617465676F72794E616D65223A2022E8BEB9E6A186222C0D0A2020202020202020227061636B616765223A20224465636F7261746573222C0D0A20202020202020202263686172744672616D65223A2022737461746963222C0D0A202020202020202022696D616765223A2022626F7264657230322E706E67220D0A2020202020207D2C0D0A202020202020226F7074696F6E223A207B0D0A202020202020202022636F6C6F7273223A205B0D0A202020202020202020202223363538366563222C0D0A202020202020202020202223326366376665220D0A20202020202020205D2C0D0A2020202020202020226261636B67726F756E64436F6C6F72223A2022233030303030303030220D0A2020202020207D0D0A202020207D2C0D0A202020207B0D0A202020202020226964223A202270356134743139746B6F773030222C0D0A20202020202022697347726F7570223A2066616C73652C0D0A2020202020202261747472223A207B0D0A20202020202020202278223A203539352C0D0A20202020202020202279223A203732382C0D0A20202020202020202277223A203733302C0D0A20202020202020202268223A203334302C0D0A2020202020202020226F666673657458223A20302C0D0A2020202020202020226F666673657459223A20302C0D0A2020202020202020227A496E646578223A202D310D0A2020202020207D2C0D0A202020202020227374796C6573223A207B0D0A20202020202020202266696C74657253686F77223A2066616C73652C0D0A202020202020202022687565526F74617465223A20302C0D0A2020202020202020227361747572617465223A20312C0D0A202020202020202022636F6E7472617374223A20312C0D0A2020202020202020226272696768746E657373223A20312C0D0A2020202020202020226F706163697479223A20312C0D0A202020202020202022726F746174655A223A20302C0D0A202020202020202022726F7461746558223A20302C0D0A202020202020202022726F7461746559223A20302C0D0A202020202020202022736B657758223A20302C0D0A202020202020202022736B657759223A20302C0D0A202020202020202022626C656E644D6F6465223A20226E6F726D616C222C0D0A202020202020202022616E696D6174696F6E73223A205B5D0D0A2020202020207D2C0D0A2020202020202270726576696577223A207B0D0A2020202020202020226F766572466C6F7748696464656E223A2066616C73650D0A2020202020207D2C0D0A20202020202022737461747573223A207B0D0A2020202020202020226C6F636B223A2066616C73652C0D0A20202020202020202268696465223A2066616C73650D0A2020202020207D2C0D0A2020202020202272657175657374223A207B0D0A202020202020202022726571756573744461746154797065223A20302C0D0A202020202020202022726571756573744874747054797065223A2022676574222C0D0A2020202020202020227265717565737455726C223A2022222C0D0A20202020202020202272657175657374496E74657276616C223A206E756C6C2C0D0A20202020202020202272657175657374496E74657276616C556E6974223A20227365636F6E64222C0D0A20202020202020202272657175657374436F6E74656E7454797065223A20302C0D0A20202020202020202272657175657374506172616D73426F647954797065223A20226E6F6E65222C0D0A2020202020202020227265717565737453514C436F6E74656E74223A207B0D0A202020202020202020202273716C223A202273656C656374202A2066726F6D20207768657265220D0A20202020202020207D2C0D0A20202020202020202272657175657374506172616D73223A207B0D0A2020202020202020202022426F6479223A207B0D0A20202020202020202020202022666F726D2D64617461223A207B7D2C0D0A20202020202020202020202022782D7777772D666F726D2D75726C656E636F646564223A207B7D2C0D0A202020202020202020202020226A736F6E223A2022222C0D0A20202020202020202020202022786D6C223A2022220D0A202020202020202020207D2C0D0A2020202020202020202022486561646572223A207B7D2C0D0A2020202020202020202022506172616D73223A207B7D0D0A20202020202020207D0D0A2020202020207D2C0D0A2020202020202266696C746572223A206E756C6C2C0D0A202020202020226576656E7473223A207B0D0A202020202020202022626173654576656E74223A207B0D0A2020202020202020202022636C69636B223A206E756C6C2C0D0A202020202020202020202264626C636C69636B223A206E756C6C2C0D0A20202020202020202020226D6F757365656E746572223A206E756C6C2C0D0A20202020202020202020226D6F7573656C65617665223A206E756C6C0D0A20202020202020207D2C0D0A202020202020202022616476616E6365644576656E7473223A207B0D0A2020202020202020202022766E6F64654D6F756E746564223A206E756C6C2C0D0A2020202020202020202022766E6F64654265666F72654D6F756E74223A206E756C6C0D0A20202020202020207D2C0D0A202020202020202022696E7465726163744576656E7473223A205B5D0D0A2020202020207D2C0D0A202020202020226B6579223A2022426F726465723032222C0D0A202020202020226368617274436F6E666967223A207B0D0A2020202020202020226B6579223A2022426F726465723032222C0D0A20202020202020202263686172744B6579223A202256426F726465723032222C0D0A202020202020202022636F6E4B6579223A20225643426F726465723032222C0D0A2020202020202020227469746C65223A2022E8BEB9E6A1862D3032222C0D0A20202020202020202263617465676F7279223A2022426F7264657273222C0D0A20202020202020202263617465676F72794E616D65223A2022E8BEB9E6A186222C0D0A2020202020202020227061636B616765223A20224465636F7261746573222C0D0A20202020202020202263686172744672616D65223A2022737461746963222C0D0A202020202020202022696D616765223A2022626F7264657230322E706E67220D0A2020202020207D2C0D0A202020202020226F7074696F6E223A207B0D0A202020202020202022636F6C6F7273223A205B0D0A202020202020202020202223363538366563222C0D0A202020202020202020202223326366376665220D0A20202020202020205D2C0D0A2020202020202020226261636B67726F756E64436F6C6F72223A2022233030303030303030220D0A2020202020207D0D0A202020207D2C0D0A202020207B0D0A202020202020226964223A202270667A38716777356C6D383030222C0D0A20202020202022697347726F7570223A2066616C73652C0D0A2020202020202261747472223A207B0D0A20202020202020202278223A20313334302C0D0A20202020202020202279223A203432352C0D0A20202020202020202277223A203538302C0D0A20202020202020202268223A203331302C0D0A2020202020202020226F666673657458223A20302C0D0A2020202020202020226F666673657459223A20302C0D0A2020202020202020227A496E646578223A202D310D0A2020202020207D2C0D0A202020202020227374796C6573223A207B0D0A20202020202020202266696C74657253686F77223A2066616C73652C0D0A202020202020202022687565526F74617465223A20302C0D0A2020202020202020227361747572617465223A20312C0D0A202020202020202022636F6E7472617374223A20312C0D0A2020202020202020226272696768746E657373223A20312C0D0A2020202020202020226F706163697479223A20312C0D0A202020202020202022726F746174655A223A20302C0D0A202020202020202022726F7461746558223A20302C0D0A202020202020202022726F7461746559223A20302C0D0A202020202020202022736B657758223A20302C0D0A202020202020202022736B657759223A20302C0D0A202020202020202022626C656E644D6F6465223A20226E6F726D616C222C0D0A202020202020202022616E696D6174696F6E73223A205B5D0D0A2020202020207D2C0D0A2020202020202270726576696577223A207B0D0A2020202020202020226F766572466C6F7748696464656E223A2066616C73650D0A2020202020207D2C0D0A20202020202022737461747573223A207B0D0A2020202020202020226C6F636B223A2066616C73652C0D0A20202020202020202268696465223A2066616C73650D0A2020202020207D2C0D0A2020202020202272657175657374223A207B0D0A202020202020202022726571756573744461746154797065223A20302C0D0A202020202020202022726571756573744874747054797065223A2022676574222C0D0A2020202020202020227265717565737455726C223A2022222C0D0A20202020202020202272657175657374496E74657276616C223A206E756C6C2C0D0A20202020202020202272657175657374496E74657276616C556E6974223A20227365636F6E64222C0D0A20202020202020202272657175657374436F6E74656E7454797065223A20302C0D0A20202020202020202272657175657374506172616D73426F647954797065223A20226E6F6E65222C0D0A2020202020202020227265717565737453514C436F6E74656E74223A207B0D0A202020202020202020202273716C223A202273656C656374202A2066726F6D20207768657265220D0A20202020202020207D2C0D0A20202020202020202272657175657374506172616D73223A207B0D0A2020202020202020202022426F6479223A207B0D0A20202020202020202020202022666F726D2D64617461223A207B7D2C0D0A20202020202020202020202022782D7777772D666F726D2D75726C656E636F646564223A207B7D2C0D0A202020202020202020202020226A736F6E223A2022222C0D0A20202020202020202020202022786D6C223A2022220D0A202020202020202020207D2C0D0A2020202020202020202022486561646572223A207B7D2C0D0A2020202020202020202022506172616D73223A207B7D0D0A20202020202020207D0D0A2020202020207D2C0D0A2020202020202266696C746572223A206E756C6C2C0D0A202020202020226576656E7473223A207B0D0A202020202020202022626173654576656E74223A207B0D0A2020202020202020202022636C69636B223A206E756C6C2C0D0A202020202020202020202264626C636C69636B223A206E756C6C2C0D0A20202020202020202020226D6F757365656E746572223A206E756C6C2C0D0A20202020202020202020226D6F7573656C65617665223A206E756C6C0D0A20202020202020207D2C0D0A202020202020202022616476616E6365644576656E7473223A207B0D0A2020202020202020202022766E6F64654D6F756E746564223A206E756C6C2C0D0A2020202020202020202022766E6F64654265666F72654D6F756E74223A206E756C6C0D0A20202020202020207D2C0D0A202020202020202022696E7465726163744576656E7473223A205B5D0D0A2020202020207D2C0D0A202020202020226B6579223A2022426F726465723032222C0D0A202020202020226368617274436F6E666967223A207B0D0A2020202020202020226B6579223A2022426F726465723032222C0D0A20202020202020202263686172744B6579223A202256426F726465723032222C0D0A202020202020202022636F6E4B6579223A20225643426F726465723032222C0D0A2020202020202020227469746C65223A2022E8BEB9E6A1862D3032222C0D0A20202020202020202263617465676F7279223A2022426F7264657273222C0D0A20202020202020202263617465676F72794E616D65223A2022E8BEB9E6A186222C0D0A2020202020202020227061636B616765223A20224465636F7261746573222C0D0A20202020202020202263686172744672616D65223A2022737461746963222C0D0A202020202020202022696D616765223A2022626F7264657230322E706E67220D0A2020202020207D2C0D0A202020202020226F7074696F6E223A207B0D0A202020202020202022636F6C6F7273223A205B0D0A202020202020202020202223363538366563222C0D0A202020202020202020202223326366376665220D0A20202020202020205D2C0D0A2020202020202020226261636B67726F756E64436F6C6F72223A2022233030303030303030220D0A2020202020207D0D0A202020207D2C0D0A202020207B0D0A202020202020226964223A2022343933706C6A6A64346C75303030222C0D0A20202020202022697347726F7570223A2066616C73652C0D0A2020202020202261747472223A207B0D0A20202020202020202278223A20313333372C0D0A20202020202020202279223A2038312C0D0A20202020202020202277223A203538302C0D0A20202020202020202268223A203334352C0D0A2020202020202020226F666673657458223A20302C0D0A2020202020202020226F666673657459223A20302C0D0A2020202020202020227A496E646578223A202D310D0A2020202020207D2C0D0A202020202020227374796C6573223A207B0D0A20202020202020202266696C74657253686F77223A2066616C73652C0D0A202020202020202022687565526F74617465223A20302C0D0A2020202020202020227361747572617465223A20312C0D0A202020202020202022636F6E7472617374223A20312C0D0A2020202020202020226272696768746E657373223A20312C0D0A2020202020202020226F706163697479223A20312C0D0A202020202020202022726F746174655A223A20302C0D0A202020202020202022726F7461746558223A20302C0D0A202020202020202022726F7461746559223A20302C0D0A202020202020202022736B657758223A20302C0D0A202020202020202022736B657759223A20302C0D0A202020202020202022626C656E644D6F6465223A20226E6F726D616C222C0D0A202020202020202022616E696D6174696F6E73223A205B5D0D0A2020202020207D2C0D0A2020202020202270726576696577223A207B0D0A2020202020202020226F766572466C6F7748696464656E223A2066616C73650D0A2020202020207D2C0D0A20202020202022737461747573223A207B0D0A2020202020202020226C6F636B223A2066616C73652C0D0A20202020202020202268696465223A2066616C73650D0A2020202020207D2C0D0A2020202020202272657175657374223A207B0D0A202020202020202022726571756573744461746154797065223A20302C0D0A202020202020202022726571756573744874747054797065223A2022676574222C0D0A2020202020202020227265717565737455726C223A2022222C0D0A20202020202020202272657175657374496E74657276616C223A206E756C6C2C0D0A20202020202020202272657175657374496E74657276616C556E6974223A20227365636F6E64222C0D0A20202020202020202272657175657374436F6E74656E7454797065223A20302C0D0A20202020202020202272657175657374506172616D73426F647954797065223A20226E6F6E65222C0D0A2020202020202020227265717565737453514C436F6E74656E74223A207B0D0A202020202020202020202273716C223A202273656C656374202A2066726F6D20207768657265220D0A20202020202020207D2C0D0A20202020202020202272657175657374506172616D73223A207B0D0A2020202020202020202022426F6479223A207B0D0A20202020202020202020202022666F726D2D64617461223A207B7D2C0D0A20202020202020202020202022782D7777772D666F726D2D75726C656E636F646564223A207B7D2C0D0A202020202020202020202020226A736F6E223A2022222C0D0A20202020202020202020202022786D6C223A2022220D0A202020202020202020207D2C0D0A2020202020202020202022486561646572223A207B7D2C0D0A2020202020202020202022506172616D73223A207B7D0D0A20202020202020207D0D0A2020202020207D2C0D0A2020202020202266696C746572223A206E756C6C2C0D0A202020202020226576656E7473223A207B0D0A202020202020202022626173654576656E74223A207B0D0A2020202020202020202022636C69636B223A206E756C6C2C0D0A202020202020202020202264626C636C69636B223A206E756C6C2C0D0A20202020202020202020226D6F757365656E746572223A206E756C6C2C0D0A20202020202020202020226D6F7573656C65617665223A206E756C6C0D0A20202020202020207D2C0D0A202020202020202022616476616E6365644576656E7473223A207B0D0A2020202020202020202022766E6F64654D6F756E746564223A206E756C6C2C0D0A2020202020202020202022766E6F64654265666F72654D6F756E74223A206E756C6C0D0A20202020202020207D2C0D0A202020202020202022696E7465726163744576656E7473223A205B5D0D0A2020202020207D2C0D0A202020202020226B6579223A2022426F726465723032222C0D0A202020202020226368617274436F6E666967223A207B0D0A2020202020202020226B6579223A2022426F726465723032222C0D0A20202020202020202263686172744B6579223A202256426F726465723032222C0D0A202020202020202022636F6E4B6579223A20225643426F726465723032222C0D0A2020202020202020227469746C65223A2022E8BEB9E6A1862D3032222C0D0A20202020202020202263617465676F7279223A2022426F7264657273222C0D0A20202020202020202263617465676F72794E616D65223A2022E8BEB9E6A186222C0D0A2020202020202020227061636B616765223A20224465636F7261746573222C0D0A20202020202020202263686172744672616D65223A2022737461746963222C0D0A202020202020202022696D616765223A2022626F7264657230322E706E67220D0A2020202020207D2C0D0A202020202020226F7074696F6E223A207B0D0A202020202020202022636F6C6F7273223A205B0D0A202020202020202020202223363538366563222C0D0A202020202020202020202223326366376665220D0A20202020202020205D2C0D0A2020202020202020226261636B67726F756E64436F6C6F72223A2022233030303030303030220D0A2020202020207D0D0A202020207D2C0D0A202020207B0D0A202020202020226964223A202271386F387466376A79796F3030222C0D0A20202020202022697347726F7570223A2066616C73652C0D0A2020202020202261747472223A207B0D0A20202020202020202278223A20313338312C0D0A20202020202020202279223A203432332C0D0A20202020202020202277223A203530302C0D0A20202020202020202268223A2035302C0D0A2020202020202020226F666673657458223A20302C0D0A2020202020202020226F666673657459223A20302C0D0A2020202020202020227A496E646578223A202D310D0A2020202020207D2C0D0A202020202020227374796C6573223A207B0D0A20202020202020202266696C74657253686F77223A2066616C73652C0D0A202020202020202022687565526F74617465223A20302C0D0A2020202020202020227361747572617465223A20312C0D0A202020202020202022636F6E7472617374223A20312C0D0A2020202020202020226272696768746E657373223A20312C0D0A2020202020202020226F706163697479223A20312C0D0A202020202020202022726F746174655A223A20302C0D0A202020202020202022726F7461746558223A20302C0D0A202020202020202022726F7461746559223A20302C0D0A202020202020202022736B657758223A20302C0D0A202020202020202022736B657759223A20302C0D0A202020202020202022626C656E644D6F6465223A20226E6F726D616C222C0D0A202020202020202022616E696D6174696F6E73223A205B5D0D0A2020202020207D2C0D0A2020202020202270726576696577223A207B0D0A2020202020202020226F766572466C6F7748696464656E223A2066616C73650D0A2020202020207D2C0D0A20202020202022737461747573223A207B0D0A2020202020202020226C6F636B223A2066616C73652C0D0A20202020202020202268696465223A2066616C73650D0A2020202020207D2C0D0A2020202020202272657175657374223A207B0D0A202020202020202022726571756573744461746154797065223A20302C0D0A202020202020202022726571756573744874747054797065223A2022676574222C0D0A2020202020202020227265717565737455726C223A2022222C0D0A20202020202020202272657175657374496E74657276616C223A206E756C6C2C0D0A20202020202020202272657175657374496E74657276616C556E6974223A20227365636F6E64222C0D0A20202020202020202272657175657374436F6E74656E7454797065223A20302C0D0A20202020202020202272657175657374506172616D73426F647954797065223A20226E6F6E65222C0D0A2020202020202020227265717565737453514C436F6E74656E74223A207B0D0A202020202020202020202273716C223A202273656C656374202A2066726F6D20207768657265220D0A20202020202020207D2C0D0A20202020202020202272657175657374506172616D73223A207B0D0A2020202020202020202022426F6479223A207B0D0A20202020202020202020202022666F726D2D64617461223A207B7D2C0D0A20202020202020202020202022782D7777772D666F726D2D75726C656E636F646564223A207B7D2C0D0A202020202020202020202020226A736F6E223A2022222C0D0A20202020202020202020202022786D6C223A2022220D0A202020202020202020207D2C0D0A2020202020202020202022486561646572223A207B7D2C0D0A2020202020202020202022506172616D73223A207B7D0D0A20202020202020207D0D0A2020202020207D2C0D0A2020202020202266696C746572223A206E756C6C2C0D0A202020202020226576656E7473223A207B0D0A202020202020202022626173654576656E74223A207B0D0A2020202020202020202022636C69636B223A206E756C6C2C0D0A202020202020202020202264626C636C69636B223A206E756C6C2C0D0A20202020202020202020226D6F757365656E746572223A206E756C6C2C0D0A20202020202020202020226D6F7573656C65617665223A206E756C6C0D0A20202020202020207D2C0D0A202020202020202022616476616E6365644576656E7473223A207B0D0A2020202020202020202022766E6F64654D6F756E746564223A206E756C6C2C0D0A2020202020202020202022766E6F64654265666F72654D6F756E74223A206E756C6C0D0A20202020202020207D2C0D0A202020202020202022696E7465726163744576656E7473223A205B5D0D0A2020202020207D2C0D0A202020202020226B6579223A2022546578744772616469656E74222C0D0A202020202020226368617274436F6E666967223A207B0D0A2020202020202020226B6579223A2022546578744772616469656E74222C0D0A20202020202020202263686172744B6579223A202256546578744772616469656E74222C0D0A202020202020202022636F6E4B6579223A20225643546578744772616469656E74222C0D0A2020202020202020227469746C65223A2022E6B890E58F98E69687E5AD97222C0D0A20202020202020202263617465676F7279223A20225465787473222C0D0A20202020202020202263617465676F72794E616D65223A2022E69687E69CAC222C0D0A2020202020202020227061636B616765223A2022496E666F726D6174696F6E73222C0D0A20202020202020202263686172744672616D65223A20226E616976655549222C0D0A202020202020202022696D616765223A2022746578745F6772616469656E742E706E67220D0A2020202020207D2C0D0A202020202020226F7074696F6E223A207B0D0A20202020202020202264617461736574223A2022E68AA5E8ADA6E7BB9FE8AEA1222C0D0A20202020202020202273697A65223A2032302C0D0A2020202020202020226772616469656E74223A207B0D0A202020202020202020202266726F6D223A2022233030373246464646222C0D0A2020202020202020202022746F223A2022233030656166664646222C0D0A2020202020202020202022646567223A206E756C6C0D0A20202020202020207D0D0A2020202020207D0D0A202020207D2C0D0A202020207B0D0A202020202020226964223A2022747433617A386D7A3274733030222C0D0A20202020202022697347726F7570223A2066616C73652C0D0A2020202020202261747472223A207B0D0A20202020202020202278223A20313730322C0D0A20202020202020202279223A203432302C0D0A20202020202020202277223A2035382C0D0A20202020202020202268223A2035302C0D0A2020202020202020226F666673657458223A20302C0D0A2020202020202020226F666673657459223A20302C0D0A2020202020202020227A496E646578223A202D310D0A2020202020207D2C0D0A202020202020227374796C6573223A207B0D0A20202020202020202266696C74657253686F77223A2066616C73652C0D0A202020202020202022687565526F74617465223A20302C0D0A2020202020202020227361747572617465223A20312C0D0A202020202020202022636F6E7472617374223A20312C0D0A2020202020202020226272696768746E657373223A20312C0D0A2020202020202020226F706163697479223A20312C0D0A202020202020202022726F746174655A223A20302C0D0A202020202020202022726F7461746558223A20302C0D0A202020202020202022726F7461746559223A20302C0D0A202020202020202022736B657758223A20302C0D0A202020202020202022736B657759223A20302C0D0A202020202020202022626C656E644D6F6465223A20226E6F726D616C222C0D0A202020202020202022616E696D6174696F6E73223A205B5D0D0A2020202020207D2C0D0A2020202020202270726576696577223A207B0D0A2020202020202020226F766572466C6F7748696464656E223A2066616C73650D0A2020202020207D2C0D0A20202020202022737461747573223A207B0D0A2020202020202020226C6F636B223A2066616C73652C0D0A20202020202020202268696465223A2066616C73650D0A2020202020207D2C0D0A2020202020202272657175657374223A207B0D0A202020202020202022726571756573744461746154797065223A20302C0D0A202020202020202022726571756573744874747054797065223A2022676574222C0D0A2020202020202020227265717565737455726C223A2022222C0D0A20202020202020202272657175657374496E74657276616C223A206E756C6C2C0D0A20202020202020202272657175657374496E74657276616C556E6974223A20227365636F6E64222C0D0A20202020202020202272657175657374436F6E74656E7454797065223A20302C0D0A20202020202020202272657175657374506172616D73426F647954797065223A20226E6F6E65222C0D0A2020202020202020227265717565737453514C436F6E74656E74223A207B0D0A202020202020202020202273716C223A202273656C656374202A2066726F6D20207768657265220D0A20202020202020207D2C0D0A20202020202020202272657175657374506172616D73223A207B0D0A2020202020202020202022426F6479223A207B0D0A20202020202020202020202022666F726D2D64617461223A207B7D2C0D0A20202020202020202020202022782D7777772D666F726D2D75726C656E636F646564223A207B7D2C0D0A202020202020202020202020226A736F6E223A2022222C0D0A20202020202020202020202022786D6C223A2022220D0A202020202020202020207D2C0D0A2020202020202020202022486561646572223A207B7D2C0D0A2020202020202020202022506172616D73223A207B7D0D0A20202020202020207D0D0A2020202020207D2C0D0A2020202020202266696C746572223A206E756C6C2C0D0A202020202020226576656E7473223A207B0D0A202020202020202022626173654576656E74223A207B0D0A2020202020202020202022636C69636B223A206E756C6C2C0D0A202020202020202020202264626C636C69636B223A206E756C6C2C0D0A20202020202020202020226D6F757365656E746572223A206E756C6C2C0D0A20202020202020202020226D6F7573656C65617665223A206E756C6C0D0A20202020202020207D2C0D0A202020202020202022616476616E6365644576656E7473223A207B0D0A2020202020202020202022766E6F64654D6F756E746564223A206E756C6C2C0D0A2020202020202020202022766E6F64654265666F72654D6F756E74223A206E756C6C0D0A20202020202020207D2C0D0A202020202020202022696E7465726163744576656E7473223A205B5D0D0A2020202020207D2C0D0A202020202020226B6579223A2022496D616765222C0D0A202020202020226368617274436F6E666967223A207B0D0A2020202020202020226B6579223A2022496D616765222C0D0A20202020202020202263686172744B6579223A202256496D616765222C0D0A202020202020202022636F6E4B6579223A20225643496D616765222C0D0A2020202020202020227469746C65223A202277696E646F772D72696768742E706E67222C0D0A20202020202020202263617465676F7279223A20224D6F726573222C0D0A20202020202020202263617465676F72794E616D65223A2022E69BB4E5A49A222C0D0A2020202020202020227061636B616765223A2022496E666F726D6174696F6E73222C0D0A20202020202020202263686172744672616D65223A2022737461746963222C0D0A202020202020202022696D616765223A202270686F746F2E706E67220D0A2020202020207D2C0D0A202020202020226F7074696F6E223A207B0D0A20202020202020202264617461736574223A2022646174613A696D6167652F706E673B6261736536342C6956424F5277304B47676F414141414E535568455567414141446F414141414F434159414141422B55412B544141414141584E535230494172733463365141414141526E51553142414143786A777638595155414141414A6345685A6377414144734D414141374441636476714751414141415A6445565964464E765A6E523359584A6C4145466B62324A6C49456C745957646C556D56685A486C7879575538414141444A6D6C555748525954557736593239744C6D466B62324A6C4C6E68746341414141414141504439346347466A6132563049474A6C5A326C7550534C767537386949476C6B50534A584E553077545842445A576870534870795A564E36546C526A656D746A4F575169507A34675048673665473177625756305953423462577875637A703450534A685A4739695A547075637A70745A5852684C7949676544703462584230617A306951575276596D55675745315149454E76636D55674E5334324C574D784E4449674E7A6B754D5459774F5449304C4341794D4445334C7A41334C7A457A4C5441784F6A41324F6A4D3549434167494341674943416950694138636D526D4F6C4A455269423462577875637A70795A475939496D6830644841364C79393364336375647A4D7562334A6E4C7A45354F546B764D4449764D6A4974636D526D4C584E35626E52686543317563794D6950694138636D526D4F6B526C63324E79615842306157397549484A6B5A6A7068596D3931644430694969423462577875637A703462584139496D6830644841364C793975637935685A4739695A53356A62323076654746774C7A45754D433869494868746247357A4F6E68746345314E50534A6F644852774F693876626E4D7559575276596D5575593239744C336868634338784C6A4176625730764969423462577875637A707A64464A6C5A6A30696148523063446F764C32357A4C6D466B62324A6C4C6D4E7662533934595841764D5334774C334E556558426C4C314A6C63323931636D4E6C556D566D49794967654731774F6B4E795A57463062334A556232397350534A425A4739695A5342516147393062334E6F6233416751304D674D6A41784F43416F56326C755A47393363796B69494868746345314E4F6B6C7563335268626D4E6C53555139496E68746343357061575136525456434F4455344E7A59354F4463344D544646517A6C44524556454E6A684451544A444D545533526A6B69494868746345314E4F6B5276593356745A57353053555139496E68746343356B61575136525456434F4455344E7A63354F4463344D544646517A6C44524556454E6A684451544A444D545533526A6B695069413865473177545530365247567961585A6C5A455A7962323067633352535A5759366157357A644746755932564A52443069654731774C6D6C705A4470464E5549344E5467334E446B344E7A67784D5556444F554E45525551324F454E424D6B4D784E5464474F534967633352535A5759365A47396A6457316C626E524A52443069654731774C6D52705A4470464E5549344E5467334E546B344E7A67784D5556444F554E45525551324F454E424D6B4D784E5464474F534976506941384C334A6B5A6A70455A584E6A636D6C7764476C76626A3467504339795A475936556B5247506941384C336736654731776257563059543467504439346347466A61325630494756755A4430696369492F507468654D364D4141414A4B535552425645684C335A5A4A6A307852474543374E646F515177774A516D6A4467684153455A45676867564A73374F777453456B666F414E652F75324A78462F51466A5A32474A446843446D65577A536874616D6331373131376D2B3930784C645A4B547176747576654738717478366E5A76374C6E66386774463446452F684254636B4F6E45664F6E664A4451317377526434705272565759486638476F31716A4D50782B4F4E616C526E436B37474239576F7A6C69636750326A716D4564492F74774E7835426F306F6348384265334974646D4E6D4B4733456265734B4D6B657477445271544D58496C4C73474A626B67597551686E59744F383535794F686E5933685270354448666954647944337A4749794F336F7433555976324B4A6B527677505A37417A3167536B57342F69782B784A434939723738596A314D536B5849583833784565713176635443485275514F4E4849584768506B794550344445764B794F5034484574795A4E342F522B6239632B547231747352636D523145387251746F32554347337253444655492F4957356B694A794A6659464F6E7161755148624970636A6B594F5956506B585079625343502B4F564B4D64486D2F5834316142357A616576735454345A6658523339544F594E6570466A634A49624567506F655679646D316249542B693831394F30416E75446E42656A4D733746764C2F4F476C30397666743950592B65594250367A5A3744387135645179396D4C6135482F33786659664155332B46535849615030666967487A33655175775A4870667A2F6849637A38485A4F49682B4D344768486E386165714F397164363877456A33475966643641317A50454B4579703969722B4E2F4731754753747647356C42707939696D55436C6A562B4E4A4C436C6A585333506F43634D79746A466542484C70366379646A3536764338596C4C477A38424561474F52593335667A4F58626F64772F316368425034353171564D664852422F496231656A4F717651433735586A656F73514338715676334D445052694831616A4F6A3748756F726E76385041465A6A394F775A2B414E6B2B44396F684E366E584141414141456C46546B5375516D4343222C0D0A202020202020202022666974223A2022636F6E7461696E222C0D0A202020202020202022626F72646572526164697573223A2031300D0A2020202020207D0D0A202020207D2C0D0A202020207B0D0A202020202020226964223A2022346E756A336E366F343173303030222C0D0A20202020202022697347726F7570223A2066616C73652C0D0A2020202020202261747472223A207B0D0A20202020202020202278223A20313530322C0D0A20202020202020202279223A203432302C0D0A20202020202020202277223A2035382C0D0A20202020202020202268223A2035302C0D0A2020202020202020226F666673657458223A20302C0D0A2020202020202020226F666673657459223A20302C0D0A2020202020202020227A496E646578223A202D310D0A2020202020207D2C0D0A202020202020227374796C6573223A207B0D0A20202020202020202266696C74657253686F77223A2066616C73652C0D0A202020202020202022687565526F74617465223A20302C0D0A2020202020202020227361747572617465223A20312C0D0A202020202020202022636F6E7472617374223A20312C0D0A2020202020202020226272696768746E657373223A20312C0D0A2020202020202020226F706163697479223A20312C0D0A202020202020202022726F746174655A223A20302C0D0A202020202020202022726F7461746558223A20302C0D0A202020202020202022726F7461746559223A20302C0D0A202020202020202022736B657758223A20302C0D0A202020202020202022736B657759223A20302C0D0A202020202020202022626C656E644D6F6465223A20226E6F726D616C222C0D0A202020202020202022616E696D6174696F6E73223A205B5D0D0A2020202020207D2C0D0A2020202020202270726576696577223A207B0D0A2020202020202020226F766572466C6F7748696464656E223A2066616C73650D0A2020202020207D2C0D0A20202020202022737461747573223A207B0D0A2020202020202020226C6F636B223A2066616C73652C0D0A20202020202020202268696465223A2066616C73650D0A2020202020207D2C0D0A2020202020202272657175657374223A207B0D0A202020202020202022726571756573744461746154797065223A20302C0D0A202020202020202022726571756573744874747054797065223A2022676574222C0D0A2020202020202020227265717565737455726C223A2022222C0D0A20202020202020202272657175657374496E74657276616C223A206E756C6C2C0D0A20202020202020202272657175657374496E74657276616C556E6974223A20227365636F6E64222C0D0A20202020202020202272657175657374436F6E74656E7454797065223A20302C0D0A20202020202020202272657175657374506172616D73426F647954797065223A20226E6F6E65222C0D0A2020202020202020227265717565737453514C436F6E74656E74223A207B0D0A202020202020202020202273716C223A202273656C656374202A2066726F6D20207768657265220D0A20202020202020207D2C0D0A20202020202020202272657175657374506172616D73223A207B0D0A2020202020202020202022426F6479223A207B0D0A20202020202020202020202022666F726D2D64617461223A207B7D2C0D0A20202020202020202020202022782D7777772D666F726D2D75726C656E636F646564223A207B7D2C0D0A202020202020202020202020226A736F6E223A2022222C0D0A20202020202020202020202022786D6C223A2022220D0A202020202020202020207D2C0D0A2020202020202020202022486561646572223A207B7D2C0D0A2020202020202020202022506172616D73223A207B7D0D0A20202020202020207D0D0A2020202020207D2C0D0A2020202020202266696C746572223A206E756C6C2C0D0A202020202020226576656E7473223A207B0D0A202020202020202022626173654576656E74223A207B0D0A2020202020202020202022636C69636B223A206E756C6C2C0D0A202020202020202020202264626C636C69636B223A206E756C6C2C0D0A20202020202020202020226D6F757365656E746572223A206E756C6C2C0D0A20202020202020202020226D6F7573656C65617665223A206E756C6C0D0A20202020202020207D2C0D0A202020202020202022616476616E6365644576656E7473223A207B0D0A2020202020202020202022766E6F64654D6F756E746564223A206E756C6C2C0D0A2020202020202020202022766E6F64654265666F72654D6F756E74223A206E756C6C0D0A20202020202020207D2C0D0A202020202020202022696E7465726163744576656E7473223A205B5D0D0A2020202020207D2C0D0A202020202020226B6579223A2022496D616765222C0D0A202020202020226368617274436F6E666967223A207B0D0A2020202020202020226B6579223A2022496D616765222C0D0A20202020202020202263686172744B6579223A202256496D616765222C0D0A202020202020202022636F6E4B6579223A20225643496D616765222C0D0A2020202020202020227469746C65223A202277696E646F772D6C6566742E706E67222C0D0A20202020202020202263617465676F7279223A20224D6F726573222C0D0A20202020202020202263617465676F72794E616D65223A2022E69BB4E5A49A222C0D0A2020202020202020227061636B616765223A2022496E666F726D6174696F6E73222C0D0A20202020202020202263686172744672616D65223A2022737461746963222C0D0A202020202020202022696D616765223A202270686F746F2E706E67220D0A2020202020207D2C0D0A202020202020226F7074696F6E223A207B0D0A20202020202020202264617461736574223A2022646174613A696D6167652F706E673B6261736536342C6956424F5277304B47676F414141414E535568455567414141446F414141414F434159414141422B55412B544141414141584E535230494172733463365141414141526E51553142414143786A777638595155414141414A6345685A6377414144734D414141374441636476714751414141415A6445565964464E765A6E523359584A6C4145466B62324A6C49456C745957646C556D56685A486C7879575538414141444A6D6C555748525954557736593239744C6D466B62324A6C4C6E68746341414141414141504439346347466A6132563049474A6C5A326C7550534C767537386949476C6B50534A584E553077545842445A576870534870795A564E36546C526A656D746A4F575169507A34675048673665473177625756305953423462577875637A703450534A685A4739695A547075637A70745A5852684C7949676544703462584230617A306951575276596D55675745315149454E76636D55674E5334324C574D784E4449674E7A6B754D5459774F5449304C4341794D4445334C7A41334C7A457A4C5441784F6A41324F6A4D3549434167494341674943416950694138636D526D4F6C4A455269423462577875637A70795A475939496D6830644841364C79393364336375647A4D7562334A6E4C7A45354F546B764D4449764D6A4974636D526D4C584E35626E52686543317563794D6950694138636D526D4F6B526C63324E79615842306157397549484A6B5A6A7068596D3931644430694969423462577875637A703462584139496D6830644841364C793975637935685A4739695A53356A62323076654746774C7A45754D433869494868746247357A4F6E68746345314E50534A6F644852774F693876626E4D7559575276596D5575593239744C336868634338784C6A4176625730764969423462577875637A707A64464A6C5A6A30696148523063446F764C32357A4C6D466B62324A6C4C6D4E7662533934595841764D5334774C334E556558426C4C314A6C63323931636D4E6C556D566D49794967654731774F6B4E795A57463062334A556232397350534A425A4739695A5342516147393062334E6F6233416751304D674D6A41784F43416F56326C755A47393363796B69494868746345314E4F6B6C7563335268626D4E6C53555139496E68746343357061575136525456434F4455344E7A59354F4463344D544646517A6C44524556454E6A684451544A444D545533526A6B69494868746345314E4F6B5276593356745A57353053555139496E68746343356B61575136525456434F4455344E7A63354F4463344D544646517A6C44524556454E6A684451544A444D545533526A6B695069413865473177545530365247567961585A6C5A455A7962323067633352535A5759366157357A644746755932564A52443069654731774C6D6C705A4470464E5549344E5467334E446B344E7A67784D5556444F554E45525551324F454E424D6B4D784E5464474F534967633352535A5759365A47396A6457316C626E524A52443069654731774C6D52705A4470464E5549344E5467334E546B344E7A67784D5556444F554E45525551324F454E424D6B4D784E5464474F534976506941384C334A6B5A6A70455A584E6A636D6C7764476C76626A3467504339795A475936556B5247506941384C336736654731776257563059543467504439346347466A61325630494756755A4430696369492F507468654D364D4141414A4A535552425645684C335A65376178564247456333786B654D67695959785342713142524A53436B534549786C554C437831734A4B4F2F3846473745577863375378733455615A4A4343306D587142424642434671464879622B445A367A70714263585A3253657639775748765A4F374F374A6D353935756274714E583768566B4D3379466E7A59793659456C2B46793271746B4633762B366246577A4739624130374A567A52376F67706D795663302B47494A625A617561506A674F6C3874574A75313978383532634E304B58722F424D73545A42507568477A37434434686A2F776A30776A744946324D6A6E41444865417676496335364F41504434506776495534375849496A3447492B6844687463414E4F676E5064686B6F5564526464375132516B3158734E3279426E4B79767657636E354751642F774F343675354D4B76734C5873456744454171363979503444416367707A734E4C696A6F3543565664537244396F6B7577684E736F6F3079647057726B37572F6864514A2F73472F493756795472654A4E544B426C485430724B7871476C5A325654552F472B797A6A554849566C5A6858494A78347A397566643858376E61742B377679332F79425677632B3132734E4235564669483750647253664149587A347271735A50477858514F34344B6D636546386A796D50747079457834573735613635656B457178463363432F592F67544267794859344344376B4C4479444F44746744467967752F4141346E6A2F616569454F7A414663627A2F496D79444362674B63547A7A623849424749647A734A794B726C625372455A79487549455363394F4A6539446E43447063796A70527A424F6B46516D535071734955477948344A6B2B656D4D52567457306754526C705930696C70646D79536476456E532F695A4A713136547048382F425857532F675338414857537A6E73646C50533363455853654C78592F527A4D4D70354B47717666577244457035496D5645654C546970706E4E543350496455306A692F56645A2F434E4C435935526141437631745A56326D7366674D357948696D5252464D556635724D614766365150557341414141415355564F524B35435949493D222C0D0A202020202020202022666974223A20226E6F6E65222C0D0A202020202020202022626F72646572526164697573223A2031300D0A2020202020207D0D0A202020207D2C0D0A202020207B0D0A202020202020226964223A20223337616B337075696F6565303030222C0D0A20202020202022697347726F7570223A2066616C73652C0D0A2020202020202261747472223A207B0D0A20202020202020202278223A20313538312C0D0A20202020202020202279223A2033312C0D0A20202020202020202277223A203330302C0D0A20202020202020202268223A2035302C0D0A2020202020202020226F666673657458223A20302C0D0A2020202020202020226F666673657459223A20302C0D0A2020202020202020227A496E646578223A202D310D0A2020202020207D2C0D0A202020202020227374796C6573223A207B0D0A20202020202020202266696C74657253686F77223A2066616C73652C0D0A202020202020202022687565526F74617465223A20302C0D0A2020202020202020227361747572617465223A20312C0D0A202020202020202022636F6E7472617374223A20312C0D0A2020202020202020226272696768746E657373223A20312C0D0A2020202020202020226F706163697479223A20312C0D0A202020202020202022726F746174655A223A20302C0D0A202020202020202022726F7461746558223A20302C0D0A202020202020202022726F7461746559223A20302C0D0A202020202020202022736B657758223A20302C0D0A202020202020202022736B657759223A20302C0D0A202020202020202022626C656E644D6F6465223A20226E6F726D616C222C0D0A202020202020202022616E696D6174696F6E73223A205B5D0D0A2020202020207D2C0D0A2020202020202270726576696577223A207B0D0A2020202020202020226F766572466C6F7748696464656E223A2066616C73650D0A2020202020207D2C0D0A20202020202022737461747573223A207B0D0A2020202020202020226C6F636B223A2066616C73652C0D0A20202020202020202268696465223A2066616C73650D0A2020202020207D2C0D0A2020202020202272657175657374223A207B0D0A202020202020202022726571756573744461746154797065223A20302C0D0A202020202020202022726571756573744874747054797065223A2022676574222C0D0A2020202020202020227265717565737455726C223A2022222C0D0A20202020202020202272657175657374496E74657276616C223A206E756C6C2C0D0A20202020202020202272657175657374496E74657276616C556E6974223A20227365636F6E64222C0D0A20202020202020202272657175657374436F6E74656E7454797065223A20302C0D0A20202020202020202272657175657374506172616D73426F647954797065223A20226E6F6E65222C0D0A2020202020202020227265717565737453514C436F6E74656E74223A207B0D0A202020202020202020202273716C223A202273656C656374202A2066726F6D20207768657265220D0A20202020202020207D2C0D0A20202020202020202272657175657374506172616D73223A207B0D0A2020202020202020202022426F6479223A207B0D0A20202020202020202020202022666F726D2D64617461223A207B7D2C0D0A20202020202020202020202022782D7777772D666F726D2D75726C656E636F646564223A207B7D2C0D0A202020202020202020202020226A736F6E223A2022222C0D0A20202020202020202020202022786D6C223A2022220D0A202020202020202020207D2C0D0A2020202020202020202022486561646572223A207B7D2C0D0A2020202020202020202022506172616D73223A207B7D0D0A20202020202020207D0D0A2020202020207D2C0D0A2020202020202266696C746572223A206E756C6C2C0D0A202020202020226576656E7473223A207B0D0A202020202020202022626173654576656E74223A207B0D0A2020202020202020202022636C69636B223A206E756C6C2C0D0A202020202020202020202264626C636C69636B223A206E756C6C2C0D0A20202020202020202020226D6F757365656E746572223A206E756C6C2C0D0A20202020202020202020226D6F7573656C65617665223A206E756C6C0D0A20202020202020207D2C0D0A202020202020202022616476616E6365644576656E7473223A207B0D0A2020202020202020202022766E6F64654D6F756E746564223A206E756C6C2C0D0A2020202020202020202022766E6F64654265666F72654D6F756E74223A206E756C6C0D0A20202020202020207D2C0D0A202020202020202022696E7465726163744576656E7473223A205B5D0D0A2020202020207D2C0D0A202020202020226B6579223A202254696D65436F6D6D6F6E222C0D0A202020202020226368617274436F6E666967223A207B0D0A2020202020202020226B6579223A202254696D65436F6D6D6F6E222C0D0A20202020202020202263686172744B6579223A20225654696D65436F6D6D6F6E222C0D0A202020202020202022636F6E4B6579223A2022564354696D65436F6D6D6F6E222C0D0A2020202020202020227469746C65223A2022E9809AE794A8E697B6E997B4222C0D0A20202020202020202263617465676F7279223A20224D6F726573222C0D0A20202020202020202263617465676F72794E616D65223A2022E69BB4E5A49A222C0D0A2020202020202020227061636B616765223A20224465636F7261746573222C0D0A20202020202020202263686172744672616D65223A2022737461746963222C0D0A202020202020202022696D616765223A202274696D652E706E67220D0A2020202020207D2C0D0A202020202020226F7074696F6E223A207B0D0A20202020202020202274696D6553697A65223A2032342C0D0A20202020202020202274696D654C696E65486569676874223A2035302C0D0A20202020202020202274696D6554657874496E64656E74223A20322C0D0A20202020202020202274696D65436F6C6F72223A202223453646374646222C0D0A202020202020202022666F6E74576569676874223A20226E6F726D616C222C0D0A20202020202020202273686F77536861646F77223A20747275652C0D0A20202020202020202268536861646F77223A20302C0D0A20202020202020202276536861646F77223A20302C0D0A202020202020202022626C7572536861646F77223A20382C0D0A202020202020202022636F6C6F72536861646F77223A202223303037356666220D0A2020202020207D0D0A202020207D2C0D0A202020207B0D0A202020202020226964223A20223135656B696963393773696B3030222C0D0A20202020202022697347726F7570223A2066616C73652C0D0A2020202020202261747472223A207B0D0A20202020202020202278223A20313533312C0D0A20202020202020202279223A2033322C0D0A20202020202020202277223A2035302C0D0A20202020202020202268223A2035302C0D0A2020202020202020226F666673657458223A20302C0D0A2020202020202020226F666673657459223A20302C0D0A2020202020202020227A496E646578223A20310D0A2020202020207D2C0D0A202020202020227374796C6573223A207B0D0A20202020202020202266696C74657253686F77223A2066616C73652C0D0A202020202020202022687565526F74617465223A20302C0D0A2020202020202020227361747572617465223A20312C0D0A202020202020202022636F6E7472617374223A20312C0D0A2020202020202020226272696768746E657373223A20312C0D0A2020202020202020226F706163697479223A20312C0D0A202020202020202022726F746174655A223A20302C0D0A202020202020202022726F7461746558223A20302C0D0A202020202020202022726F7461746559223A20302C0D0A202020202020202022736B657758223A20302C0D0A202020202020202022736B657759223A20302C0D0A202020202020202022626C656E644D6F6465223A20226E6F726D616C222C0D0A202020202020202022616E696D6174696F6E73223A205B5D0D0A2020202020207D2C0D0A2020202020202270726576696577223A207B0D0A2020202020202020226F766572466C6F7748696464656E223A2066616C73650D0A2020202020207D2C0D0A20202020202022737461747573223A207B0D0A2020202020202020226C6F636B223A2066616C73652C0D0A20202020202020202268696465223A2066616C73650D0A2020202020207D2C0D0A2020202020202272657175657374223A207B0D0A202020202020202022726571756573744461746154797065223A20302C0D0A202020202020202022726571756573744874747054797065223A2022676574222C0D0A2020202020202020227265717565737455726C223A2022222C0D0A20202020202020202272657175657374496E74657276616C223A206E756C6C2C0D0A20202020202020202272657175657374496E74657276616C556E6974223A20227365636F6E64222C0D0A20202020202020202272657175657374436F6E74656E7454797065223A20302C0D0A20202020202020202272657175657374506172616D73426F647954797065223A20226E6F6E65222C0D0A2020202020202020227265717565737453514C436F6E74656E74223A207B0D0A202020202020202020202273716C223A202273656C656374202A2066726F6D20207768657265220D0A20202020202020207D2C0D0A20202020202020202272657175657374506172616D73223A207B0D0A2020202020202020202022426F6479223A207B0D0A20202020202020202020202022666F726D2D64617461223A207B7D2C0D0A20202020202020202020202022782D7777772D666F726D2D75726C656E636F646564223A207B7D2C0D0A202020202020202020202020226A736F6E223A2022222C0D0A20202020202020202020202022786D6C223A2022220D0A202020202020202020207D2C0D0A2020202020202020202022486561646572223A207B7D2C0D0A2020202020202020202022506172616D73223A207B7D0D0A20202020202020207D0D0A2020202020207D2C0D0A2020202020202266696C746572223A206E756C6C2C0D0A202020202020226576656E7473223A207B0D0A202020202020202022626173654576656E74223A207B0D0A2020202020202020202022636C69636B223A206E756C6C2C0D0A202020202020202020202264626C636C69636B223A206E756C6C2C0D0A20202020202020202020226D6F757365656E746572223A206E756C6C2C0D0A20202020202020202020226D6F7573656C65617665223A206E756C6C0D0A20202020202020207D2C0D0A202020202020202022616476616E6365644576656E7473223A207B0D0A2020202020202020202022766E6F64654D6F756E746564223A206E756C6C2C0D0A2020202020202020202022766E6F64654265666F72654D6F756E74223A206E756C6C0D0A20202020202020207D2C0D0A202020202020202022696E7465726163744576656E7473223A205B5D0D0A2020202020207D2C0D0A202020202020226B6579223A202249636F6E222C0D0A202020202020226368617274436F6E666967223A207B0D0A2020202020202020226B6579223A202249636F6E222C0D0A20202020202020202263686172744B6579223A20225649636F6E222C0D0A202020202020202022636F6E4B6579223A2022564349636F6E222C0D0A2020202020202020227469746C65223A20226D6F6F6E2D616C742D746F2D73756E6E792D6F75746C696E652D6C6F6F702D7472616E736974696F6E222C0D0A20202020202020202263617465676F7279223A202244656661756C74222C0D0A20202020202020202263617465676F72794E616D65223A2022E9BB98E8AEA4222C0D0A2020202020202020227061636B616765223A202249636F6E73222C0D0A20202020202020202263686172744672616D65223A2022737461746963222C0D0A202020202020202022696D616765223A202269636F6E2E706E67220D0A2020202020207D2C0D0A202020202020226F7074696F6E223A207B0D0A20202020202020202264617461736574223A20226C696E652D6D643A6D6F6F6E2D616C742D746F2D73756E6E792D6F75746C696E652D6C6F6F702D7472616E736974696F6E222C0D0A202020202020202022636F6C6F72223A202223303341394634222C0D0A20202020202020202273697A65223A2036342C0D0A202020202020202022726F74617465223A20300D0A2020202020207D0D0A202020207D2C0D0A202020207B0D0A202020202020226964223A202231646A6B38763866336E67673030222C0D0A20202020202022697347726F7570223A2066616C73652C0D0A2020202020202261747472223A207B0D0A20202020202020202278223A20323339392C0D0A20202020202020202279223A203531392C0D0A20202020202020202277223A2036342C0D0A20202020202020202268223A2036342C0D0A2020202020202020226F666673657458223A20302C0D0A2020202020202020226F666673657459223A20302C0D0A2020202020202020227A496E646578223A20310D0A2020202020207D2C0D0A202020202020227374796C6573223A207B0D0A20202020202020202266696C74657253686F77223A2066616C73652C0D0A202020202020202022687565526F74617465223A20302C0D0A2020202020202020227361747572617465223A20312C0D0A202020202020202022636F6E7472617374223A20312C0D0A2020202020202020226272696768746E657373223A20312C0D0A2020202020202020226F706163697479223A20312C0D0A202020202020202022726F746174655A223A20302C0D0A202020202020202022726F7461746558223A20302C0D0A202020202020202022726F7461746559223A20302C0D0A202020202020202022736B657758223A20302C0D0A202020202020202022736B657759223A20302C0D0A202020202020202022626C656E644D6F6465223A20226E6F726D616C222C0D0A202020202020202022616E696D6174696F6E73223A205B5D0D0A2020202020207D2C0D0A2020202020202270726576696577223A207B0D0A2020202020202020226F766572466C6F7748696464656E223A2066616C73650D0A2020202020207D2C0D0A20202020202022737461747573223A207B0D0A2020202020202020226C6F636B223A2066616C73652C0D0A20202020202020202268696465223A2066616C73650D0A2020202020207D2C0D0A2020202020202272657175657374223A207B0D0A202020202020202022726571756573744461746154797065223A20302C0D0A202020202020202022726571756573744874747054797065223A2022676574222C0D0A2020202020202020227265717565737455726C223A2022222C0D0A20202020202020202272657175657374496E74657276616C223A206E756C6C2C0D0A20202020202020202272657175657374496E74657276616C556E6974223A20227365636F6E64222C0D0A20202020202020202272657175657374436F6E74656E7454797065223A20302C0D0A20202020202020202272657175657374506172616D73426F647954797065223A20226E6F6E65222C0D0A2020202020202020227265717565737453514C436F6E74656E74223A207B0D0A202020202020202020202273716C223A202273656C656374202A2066726F6D20207768657265220D0A20202020202020207D2C0D0A20202020202020202272657175657374506172616D73223A207B0D0A2020202020202020202022426F6479223A207B0D0A20202020202020202020202022666F726D2D64617461223A207B7D2C0D0A20202020202020202020202022782D7777772D666F726D2D75726C656E636F646564223A207B7D2C0D0A202020202020202020202020226A736F6E223A2022222C0D0A20202020202020202020202022786D6C223A2022220D0A202020202020202020207D2C0D0A2020202020202020202022486561646572223A207B7D2C0D0A2020202020202020202022506172616D73223A207B7D0D0A20202020202020207D0D0A2020202020207D2C0D0A2020202020202266696C746572223A206E756C6C2C0D0A202020202020226576656E7473223A207B0D0A202020202020202022626173654576656E74223A207B0D0A2020202020202020202022636C69636B223A206E756C6C2C0D0A202020202020202020202264626C636C69636B223A206E756C6C2C0D0A20202020202020202020226D6F757365656E746572223A206E756C6C2C0D0A20202020202020202020226D6F7573656C65617665223A206E756C6C0D0A20202020202020207D2C0D0A202020202020202022616476616E6365644576656E7473223A207B0D0A2020202020202020202022766E6F64654D6F756E746564223A206E756C6C2C0D0A2020202020202020202022766E6F64654265666F72654D6F756E74223A206E756C6C0D0A20202020202020207D2C0D0A202020202020202022696E7465726163744576656E7473223A205B5D0D0A2020202020207D2C0D0A202020202020226B6579223A202249636F6E222C0D0A202020202020226368617274436F6E666967223A207B0D0A2020202020202020226B6579223A202249636F6E222C0D0A20202020202020202263686172744B6579223A20225649636F6E222C0D0A202020202020202022636F6E4B6579223A2022564349636F6E222C0D0A2020202020202020227469746C65223A202263686172742D706965222C0D0A20202020202020202263617465676F7279223A202244656661756C74222C0D0A20202020202020202263617465676F72794E616D65223A2022E9BB98E8AEA4222C0D0A2020202020202020227061636B616765223A202249636F6E73222C0D0A20202020202020202263686172744672616D65223A2022737461746963222C0D0A202020202020202022696D616765223A202269636F6E2E706E67220D0A2020202020207D2C0D0A202020202020226F7074696F6E223A207B0D0A20202020202020202264617461736574223A202275696D3A63686172742D706965222C0D0A202020202020202022636F6C6F72223A202223303341394634222C0D0A20202020202020202273697A65223A2036342C0D0A202020202020202022726F74617465223A20300D0A2020202020207D0D0A202020207D2C0D0A202020207B0D0A202020202020226964223A202231357973356B737235366F303030222C0D0A20202020202022697347726F7570223A2066616C73652C0D0A2020202020202261747472223A207B0D0A20202020202020202278223A203632382C0D0A20202020202020202279223A203733372C0D0A20202020202020202277223A203636352C0D0A20202020202020202268223A2035302C0D0A2020202020202020226F666673657458223A20302C0D0A2020202020202020226F666673657459223A20302C0D0A2020202020202020227A496E646578223A202D310D0A2020202020207D2C0D0A202020202020227374796C6573223A207B0D0A20202020202020202266696C74657253686F77223A2066616C73652C0D0A202020202020202022687565526F74617465223A20302C0D0A2020202020202020227361747572617465223A20312C0D0A202020202020202022636F6E7472617374223A20312C0D0A2020202020202020226272696768746E657373223A20312C0D0A2020202020202020226F706163697479223A20312C0D0A202020202020202022726F746174655A223A20302C0D0A202020202020202022726F7461746558223A20302C0D0A202020202020202022726F7461746559223A20302C0D0A202020202020202022736B657758223A20302C0D0A202020202020202022736B657759223A20302C0D0A202020202020202022626C656E644D6F6465223A20226E6F726D616C222C0D0A202020202020202022616E696D6174696F6E73223A205B5D0D0A2020202020207D2C0D0A2020202020202270726576696577223A207B0D0A2020202020202020226F766572466C6F7748696464656E223A2066616C73650D0A2020202020207D2C0D0A20202020202022737461747573223A207B0D0A2020202020202020226C6F636B223A2066616C73652C0D0A20202020202020202268696465223A2066616C73650D0A2020202020207D2C0D0A2020202020202272657175657374223A207B0D0A202020202020202022726571756573744461746154797065223A20302C0D0A202020202020202022726571756573744874747054797065223A2022676574222C0D0A2020202020202020227265717565737455726C223A2022222C0D0A20202020202020202272657175657374496E74657276616C223A206E756C6C2C0D0A20202020202020202272657175657374496E74657276616C556E6974223A20227365636F6E64222C0D0A20202020202020202272657175657374436F6E74656E7454797065223A20302C0D0A20202020202020202272657175657374506172616D73426F647954797065223A20226E6F6E65222C0D0A2020202020202020227265717565737453514C436F6E74656E74223A207B0D0A202020202020202020202273716C223A202273656C656374202A2066726F6D20207768657265220D0A20202020202020207D2C0D0A20202020202020202272657175657374506172616D73223A207B0D0A2020202020202020202022426F6479223A207B0D0A20202020202020202020202022666F726D2D64617461223A207B7D2C0D0A20202020202020202020202022782D7777772D666F726D2D75726C656E636F646564223A207B7D2C0D0A202020202020202020202020226A736F6E223A2022222C0D0A20202020202020202020202022786D6C223A2022220D0A202020202020202020207D2C0D0A2020202020202020202022486561646572223A207B7D2C0D0A2020202020202020202022506172616D73223A207B7D0D0A20202020202020207D0D0A2020202020207D2C0D0A2020202020202266696C746572223A206E756C6C2C0D0A202020202020226576656E7473223A207B0D0A202020202020202022626173654576656E74223A207B0D0A2020202020202020202022636C69636B223A206E756C6C2C0D0A202020202020202020202264626C636C69636B223A206E756C6C2C0D0A20202020202020202020226D6F757365656E746572223A206E756C6C2C0D0A20202020202020202020226D6F7573656C65617665223A206E756C6C0D0A20202020202020207D2C0D0A202020202020202022616476616E6365644576656E7473223A207B0D0A2020202020202020202022766E6F64654D6F756E746564223A206E756C6C2C0D0A2020202020202020202022766E6F64654265666F72654D6F756E74223A206E756C6C0D0A20202020202020207D2C0D0A202020202020202022696E7465726163744576656E7473223A205B5D0D0A2020202020207D2C0D0A202020202020226B6579223A2022546578744772616469656E74222C0D0A202020202020226368617274436F6E666967223A207B0D0A2020202020202020226B6579223A2022546578744772616469656E74222C0D0A20202020202020202263686172744B6579223A202256546578744772616469656E74222C0D0A202020202020202022636F6E4B6579223A20225643546578744772616469656E74222C0D0A2020202020202020227469746C65223A2022E6B890E58F98E69687E5AD97222C0D0A20202020202020202263617465676F7279223A20225465787473222C0D0A20202020202020202263617465676F72794E616D65223A2022E69687E69CAC222C0D0A2020202020202020227061636B616765223A2022496E666F726D6174696F6E73222C0D0A20202020202020202263686172744672616D65223A20226E616976655549222C0D0A202020202020202022696D616765223A2022746578745F6772616469656E742E706E67220D0A2020202020207D2C0D0A202020202020226F7074696F6E223A207B0D0A20202020202020202264617461736574223A2022E5BC82E5B8B8E4B88AE68AA5222C0D0A20202020202020202273697A65223A2032302C0D0A2020202020202020226772616469656E74223A207B0D0A202020202020202020202266726F6D223A2022233030373246464646222C0D0A2020202020202020202022746F223A2022233030656166664646222C0D0A2020202020202020202022646567223A206E756C6C0D0A20202020202020207D0D0A2020202020207D0D0A202020207D2C0D0A202020207B0D0A202020202020226964223A20223373716370307678376763303030222C0D0A20202020202022697347726F7570223A2066616C73652C0D0A2020202020202261747472223A207B0D0A20202020202020202278223A203831302C0D0A20202020202020202279223A203733382C0D0A20202020202020202277223A2035382C0D0A20202020202020202268223A2035302C0D0A2020202020202020226F666673657458223A20302C0D0A2020202020202020226F666673657459223A20302C0D0A2020202020202020227A496E646578223A202D310D0A2020202020207D2C0D0A202020202020227374796C6573223A207B0D0A20202020202020202266696C74657253686F77223A2066616C73652C0D0A202020202020202022687565526F74617465223A20302C0D0A2020202020202020227361747572617465223A20312C0D0A202020202020202022636F6E7472617374223A20312C0D0A2020202020202020226272696768746E657373223A20312C0D0A2020202020202020226F706163697479223A20312C0D0A202020202020202022726F746174655A223A20302C0D0A202020202020202022726F7461746558223A20302C0D0A202020202020202022726F7461746559223A20302C0D0A202020202020202022736B657758223A20302C0D0A202020202020202022736B657759223A20302C0D0A202020202020202022626C656E644D6F6465223A20226E6F726D616C222C0D0A202020202020202022616E696D6174696F6E73223A205B5D0D0A2020202020207D2C0D0A2020202020202270726576696577223A207B0D0A2020202020202020226F766572466C6F7748696464656E223A2066616C73650D0A2020202020207D2C0D0A20202020202022737461747573223A207B0D0A2020202020202020226C6F636B223A2066616C73652C0D0A20202020202020202268696465223A2066616C73650D0A2020202020207D2C0D0A2020202020202272657175657374223A207B0D0A202020202020202022726571756573744461746154797065223A20302C0D0A202020202020202022726571756573744874747054797065223A2022676574222C0D0A2020202020202020227265717565737455726C223A2022222C0D0A20202020202020202272657175657374496E74657276616C223A206E756C6C2C0D0A20202020202020202272657175657374496E74657276616C556E6974223A20227365636F6E64222C0D0A20202020202020202272657175657374436F6E74656E7454797065223A20302C0D0A20202020202020202272657175657374506172616D73426F647954797065223A20226E6F6E65222C0D0A2020202020202020227265717565737453514C436F6E74656E74223A207B0D0A202020202020202020202273716C223A202273656C656374202A2066726F6D20207768657265220D0A20202020202020207D2C0D0A20202020202020202272657175657374506172616D73223A207B0D0A2020202020202020202022426F6479223A207B0D0A20202020202020202020202022666F726D2D64617461223A207B7D2C0D0A20202020202020202020202022782D7777772D666F726D2D75726C656E636F646564223A207B7D2C0D0A202020202020202020202020226A736F6E223A2022222C0D0A20202020202020202020202022786D6C223A2022220D0A202020202020202020207D2C0D0A2020202020202020202022486561646572223A207B7D2C0D0A2020202020202020202022506172616D73223A207B7D0D0A20202020202020207D0D0A2020202020207D2C0D0A2020202020202266696C746572223A206E756C6C2C0D0A202020202020226576656E7473223A207B0D0A202020202020202022626173654576656E74223A207B0D0A2020202020202020202022636C69636B223A206E756C6C2C0D0A202020202020202020202264626C636C69636B223A206E756C6C2C0D0A20202020202020202020226D6F757365656E746572223A206E756C6C2C0D0A20202020202020202020226D6F7573656C65617665223A206E756C6C0D0A20202020202020207D2C0D0A202020202020202022616476616E6365644576656E7473223A207B0D0A2020202020202020202022766E6F64654D6F756E746564223A206E756C6C2C0D0A2020202020202020202022766E6F64654265666F72654D6F756E74223A206E756C6C0D0A20202020202020207D2C0D0A202020202020202022696E7465726163744576656E7473223A205B5D0D0A2020202020207D2C0D0A202020202020226B6579223A2022496D616765222C0D0A202020202020226368617274436F6E666967223A207B0D0A2020202020202020226B6579223A2022496D616765222C0D0A20202020202020202263686172744B6579223A202256496D616765222C0D0A202020202020202022636F6E4B6579223A20225643496D616765222C0D0A2020202020202020227469746C65223A202277696E646F772D6C6566742E706E67222C0D0A20202020202020202263617465676F7279223A20224D6F726573222C0D0A20202020202020202263617465676F72794E616D65223A2022E69BB4E5A49A222C0D0A2020202020202020227061636B616765223A2022496E666F726D6174696F6E73222C0D0A20202020202020202263686172744672616D65223A2022737461746963222C0D0A202020202020202022696D616765223A202270686F746F2E706E67220D0A2020202020207D2C0D0A202020202020226F7074696F6E223A207B0D0A20202020202020202264617461736574223A2022646174613A696D6167652F706E673B6261736536342C6956424F5277304B47676F414141414E535568455567414141446F414141414F434159414141422B55412B544141414141584E535230494172733463365141414141526E51553142414143786A777638595155414141414A6345685A6377414144734D414141374441636476714751414141415A6445565964464E765A6E523359584A6C4145466B62324A6C49456C745957646C556D56685A486C7879575538414141444A6D6C555748525954557736593239744C6D466B62324A6C4C6E68746341414141414141504439346347466A6132563049474A6C5A326C7550534C767537386949476C6B50534A584E553077545842445A576870534870795A564E36546C526A656D746A4F575169507A34675048673665473177625756305953423462577875637A703450534A685A4739695A547075637A70745A5852684C7949676544703462584230617A306951575276596D55675745315149454E76636D55674E5334324C574D784E4449674E7A6B754D5459774F5449304C4341794D4445334C7A41334C7A457A4C5441784F6A41324F6A4D3549434167494341674943416950694138636D526D4F6C4A455269423462577875637A70795A475939496D6830644841364C79393364336375647A4D7562334A6E4C7A45354F546B764D4449764D6A4974636D526D4C584E35626E52686543317563794D6950694138636D526D4F6B526C63324E79615842306157397549484A6B5A6A7068596D3931644430694969423462577875637A703462584139496D6830644841364C793975637935685A4739695A53356A62323076654746774C7A45754D433869494868746247357A4F6E68746345314E50534A6F644852774F693876626E4D7559575276596D5575593239744C336868634338784C6A4176625730764969423462577875637A707A64464A6C5A6A30696148523063446F764C32357A4C6D466B62324A6C4C6D4E7662533934595841764D5334774C334E556558426C4C314A6C63323931636D4E6C556D566D49794967654731774F6B4E795A57463062334A556232397350534A425A4739695A5342516147393062334E6F6233416751304D674D6A41784F43416F56326C755A47393363796B69494868746345314E4F6B6C7563335268626D4E6C53555139496E68746343357061575136525456434F4455344E7A59354F4463344D544646517A6C44524556454E6A684451544A444D545533526A6B69494868746345314E4F6B5276593356745A57353053555139496E68746343356B61575136525456434F4455344E7A63354F4463344D544646517A6C44524556454E6A684451544A444D545533526A6B695069413865473177545530365247567961585A6C5A455A7962323067633352535A5759366157357A644746755932564A52443069654731774C6D6C705A4470464E5549344E5467334E446B344E7A67784D5556444F554E45525551324F454E424D6B4D784E5464474F534967633352535A5759365A47396A6457316C626E524A52443069654731774C6D52705A4470464E5549344E5467334E546B344E7A67784D5556444F554E45525551324F454E424D6B4D784E5464474F534976506941384C334A6B5A6A70455A584E6A636D6C7764476C76626A3467504339795A475936556B5247506941384C336736654731776257563059543467504439346347466A61325630494756755A4430696369492F507468654D364D4141414A4A535552425645684C335A65376178564247456333786B654D67695959785342713142524A53436B534549786C554C437831734A4B4F2F3846473745577863375378733455615A4A4343306D587142424642434671464879622B445A367A70714263585A3253657639775748765A4F374F374A6D353935756274714E583768566B4D3379466E7A59793659456C2B46793271746B4633762B366246577A4739624130374A567A52376F67706D795663302B47494A625A617561506A674F6C3874574A75313978383532634E304B58722F424D73545A42507568477A37434434686A2F776A30776A744946324D6A6E41444865417676496335364F41504434506776495534375849496A3447492B6844687463414E4F676E5064686B6F5564526464375132516B3158734E3279426E4B79767657636E354751642F774F343675354D4B76734C5873456744454171363979503444416367707A734E4C696A6F3543565664537244396F6B7577684E736F6F3079647057726B37572F6864514A2F73472F493756795472654A4E544B426C485430724B7871476C5A325654552F472B797A6A554849566C5A6858494A78347A397566643858376E61742B377679332F79425677632B3132734E4235564669483750647253664149587A347271735A50477858514F34344B6D636546386A796D50747079457834573735613635656B457178463363432F592F67544267794859344344376B4C4479444F44746744467967752F4141346E6A2F616569454F7A414663627A2F496D79444362674B63547A7A623849424749647A734A794B726C625372455A79487549455363394F4A6539446E43447063796A70527A424F6B46516D535071734955477948344A6B2B656D4D52567457306754526C705930696C70646D79536476456E532F695A4A713136547048382F425857532F675338414857537A6E73646C50533363455853654C78592F527A4D4D70354B47717666577244457035496D5645654C546970706E4E543350496455306A692F56645A2F434E4C435935526141437631745A56326D7366674D357948696D5252464D556635724D614766365150557341414141415355564F524B35435949493D222C0D0A202020202020202022666974223A20226E6F6E65222C0D0A202020202020202022626F72646572526164697573223A2031300D0A2020202020207D0D0A202020207D2C0D0A202020207B0D0A202020202020226964223A20223572663576373276363230303030222C0D0A20202020202022697347726F7570223A2066616C73652C0D0A2020202020202261747472223A207B0D0A20202020202020202278223A2034302C0D0A20202020202020202279223A203432302C0D0A20202020202020202277223A203530302C0D0A20202020202020202268223A2035302C0D0A2020202020202020226F666673657458223A20302C0D0A2020202020202020226F666673657459223A20302C0D0A2020202020202020227A496E646578223A202D310D0A2020202020207D2C0D0A202020202020227374796C6573223A207B0D0A20202020202020202266696C74657253686F77223A2066616C73652C0D0A202020202020202022687565526F74617465223A20302C0D0A2020202020202020227361747572617465223A20312C0D0A202020202020202022636F6E7472617374223A20312C0D0A2020202020202020226272696768746E657373223A20312C0D0A2020202020202020226F706163697479223A20312C0D0A202020202020202022726F746174655A223A20302C0D0A202020202020202022726F7461746558223A20302C0D0A202020202020202022726F7461746559223A20302C0D0A202020202020202022736B657758223A20302C0D0A202020202020202022736B657759223A20302C0D0A202020202020202022626C656E644D6F6465223A20226E6F726D616C222C0D0A202020202020202022616E696D6174696F6E73223A205B5D0D0A2020202020207D2C0D0A2020202020202270726576696577223A207B0D0A2020202020202020226F766572466C6F7748696464656E223A2066616C73650D0A2020202020207D2C0D0A20202020202022737461747573223A207B0D0A2020202020202020226C6F636B223A2066616C73652C0D0A20202020202020202268696465223A2066616C73650D0A2020202020207D2C0D0A2020202020202272657175657374223A207B0D0A202020202020202022726571756573744461746154797065223A20302C0D0A202020202020202022726571756573744874747054797065223A2022676574222C0D0A2020202020202020227265717565737455726C223A2022222C0D0A20202020202020202272657175657374496E74657276616C223A206E756C6C2C0D0A20202020202020202272657175657374496E74657276616C556E6974223A20227365636F6E64222C0D0A20202020202020202272657175657374436F6E74656E7454797065223A20302C0D0A20202020202020202272657175657374506172616D73426F647954797065223A20226E6F6E65222C0D0A2020202020202020227265717565737453514C436F6E74656E74223A207B0D0A202020202020202020202273716C223A202273656C656374202A2066726F6D20207768657265220D0A20202020202020207D2C0D0A20202020202020202272657175657374506172616D73223A207B0D0A2020202020202020202022426F6479223A207B0D0A20202020202020202020202022666F726D2D64617461223A207B7D2C0D0A20202020202020202020202022782D7777772D666F726D2D75726C656E636F646564223A207B7D2C0D0A202020202020202020202020226A736F6E223A2022222C0D0A20202020202020202020202022786D6C223A2022220D0A202020202020202020207D2C0D0A2020202020202020202022486561646572223A207B7D2C0D0A2020202020202020202022506172616D73223A207B7D0D0A20202020202020207D0D0A2020202020207D2C0D0A2020202020202266696C746572223A206E756C6C2C0D0A202020202020226576656E7473223A207B0D0A202020202020202022626173654576656E74223A207B0D0A2020202020202020202022636C69636B223A206E756C6C2C0D0A202020202020202020202264626C636C69636B223A206E756C6C2C0D0A20202020202020202020226D6F757365656E746572223A206E756C6C2C0D0A20202020202020202020226D6F7573656C65617665223A206E756C6C0D0A20202020202020207D2C0D0A202020202020202022616476616E6365644576656E7473223A207B0D0A2020202020202020202022766E6F64654D6F756E746564223A206E756C6C2C0D0A2020202020202020202022766E6F64654265666F72654D6F756E74223A206E756C6C0D0A20202020202020207D2C0D0A202020202020202022696E7465726163744576656E7473223A205B5D0D0A2020202020207D2C0D0A202020202020226B6579223A2022546578744772616469656E74222C0D0A202020202020226368617274436F6E666967223A207B0D0A2020202020202020226B6579223A2022546578744772616469656E74222C0D0A20202020202020202263686172744B6579223A202256546578744772616469656E74222C0D0A202020202020202022636F6E4B6579223A20225643546578744772616469656E74222C0D0A2020202020202020227469746C65223A2022E6B890E58F98E69687E5AD97222C0D0A20202020202020202263617465676F7279223A20225465787473222C0D0A20202020202020202263617465676F72794E616D65223A2022E69687E69CAC222C0D0A2020202020202020227061636B616765223A2022496E666F726D6174696F6E73222C0D0A20202020202020202263686172744672616D65223A20226E616976655549222C0D0A202020202020202022696D616765223A2022746578745F6772616469656E742E706E67220D0A2020202020207D2C0D0A202020202020226F7074696F6E223A207B0D0A20202020202020202264617461736574223A2022E5B7A5E58D95E7BB9FE8AEA1222C0D0A20202020202020202273697A65223A2032302C0D0A2020202020202020226772616469656E74223A207B0D0A202020202020202020202266726F6D223A2022233030373246464646222C0D0A2020202020202020202022746F223A2022233030656166664646222C0D0A2020202020202020202022646567223A206E756C6C0D0A20202020202020207D0D0A2020202020207D0D0A202020207D2C0D0A202020207B0D0A202020202020226964223A20226B763033326E316B3938773030222C0D0A20202020202022697347726F7570223A2066616C73652C0D0A2020202020202261747472223A207B0D0A20202020202020202278223A203336302C0D0A20202020202020202279223A203432312C0D0A20202020202020202277223A2035382C0D0A20202020202020202268223A2035302C0D0A2020202020202020226F666673657458223A20302C0D0A2020202020202020226F666673657459223A20302C0D0A2020202020202020227A496E646578223A202D310D0A2020202020207D2C0D0A202020202020227374796C6573223A207B0D0A20202020202020202266696C74657253686F77223A2066616C73652C0D0A202020202020202022687565526F74617465223A20302C0D0A2020202020202020227361747572617465223A20312C0D0A202020202020202022636F6E7472617374223A20312C0D0A2020202020202020226272696768746E657373223A20312C0D0A2020202020202020226F706163697479223A20312C0D0A202020202020202022726F746174655A223A20302C0D0A202020202020202022726F7461746558223A20302C0D0A202020202020202022726F7461746559223A20302C0D0A202020202020202022736B657758223A20302C0D0A202020202020202022736B657759223A20302C0D0A202020202020202022626C656E644D6F6465223A20226E6F726D616C222C0D0A202020202020202022616E696D6174696F6E73223A205B5D0D0A2020202020207D2C0D0A2020202020202270726576696577223A207B0D0A2020202020202020226F766572466C6F7748696464656E223A2066616C73650D0A2020202020207D2C0D0A20202020202022737461747573223A207B0D0A2020202020202020226C6F636B223A2066616C73652C0D0A20202020202020202268696465223A2066616C73650D0A2020202020207D2C0D0A2020202020202272657175657374223A207B0D0A202020202020202022726571756573744461746154797065223A20302C0D0A202020202020202022726571756573744874747054797065223A2022676574222C0D0A2020202020202020227265717565737455726C223A2022222C0D0A20202020202020202272657175657374496E74657276616C223A206E756C6C2C0D0A20202020202020202272657175657374496E74657276616C556E6974223A20227365636F6E64222C0D0A20202020202020202272657175657374436F6E74656E7454797065223A20302C0D0A20202020202020202272657175657374506172616D73426F647954797065223A20226E6F6E65222C0D0A2020202020202020227265717565737453514C436F6E74656E74223A207B0D0A202020202020202020202273716C223A202273656C656374202A2066726F6D20207768657265220D0A20202020202020207D2C0D0A20202020202020202272657175657374506172616D73223A207B0D0A2020202020202020202022426F6479223A207B0D0A20202020202020202020202022666F726D2D64617461223A207B7D2C0D0A20202020202020202020202022782D7777772D666F726D2D75726C656E636F646564223A207B7D2C0D0A202020202020202020202020226A736F6E223A2022222C0D0A20202020202020202020202022786D6C223A2022220D0A202020202020202020207D2C0D0A2020202020202020202022486561646572223A207B7D2C0D0A2020202020202020202022506172616D73223A207B7D0D0A20202020202020207D0D0A2020202020207D2C0D0A2020202020202266696C746572223A206E756C6C2C0D0A202020202020226576656E7473223A207B0D0A202020202020202022626173654576656E74223A207B0D0A2020202020202020202022636C69636B223A206E756C6C2C0D0A202020202020202020202264626C636C69636B223A206E756C6C2C0D0A20202020202020202020226D6F757365656E746572223A206E756C6C2C0D0A20202020202020202020226D6F7573656C65617665223A206E756C6C0D0A20202020202020207D2C0D0A202020202020202022616476616E6365644576656E7473223A207B0D0A2020202020202020202022766E6F64654D6F756E746564223A206E756C6C2C0D0A2020202020202020202022766E6F64654265666F72654D6F756E74223A206E756C6C0D0A20202020202020207D2C0D0A202020202020202022696E7465726163744576656E7473223A205B5D0D0A2020202020207D2C0D0A202020202020226B6579223A2022496D616765222C0D0A202020202020226368617274436F6E666967223A207B0D0A2020202020202020226B6579223A2022496D616765222C0D0A20202020202020202263686172744B6579223A202256496D616765222C0D0A202020202020202022636F6E4B6579223A20225643496D616765222C0D0A2020202020202020227469746C65223A202277696E646F772D72696768742E706E67222C0D0A20202020202020202263617465676F7279223A20224D6F726573222C0D0A20202020202020202263617465676F72794E616D65223A2022E69BB4E5A49A222C0D0A2020202020202020227061636B616765223A2022496E666F726D6174696F6E73222C0D0A20202020202020202263686172744672616D65223A2022737461746963222C0D0A202020202020202022696D616765223A202270686F746F2E706E67220D0A2020202020207D2C0D0A202020202020226F7074696F6E223A207B0D0A20202020202020202264617461736574223A2022646174613A696D6167652F706E673B6261736536342C6956424F5277304B47676F414141414E535568455567414141446F414141414F434159414141422B55412B544141414141584E535230494172733463365141414141526E51553142414143786A777638595155414141414A6345685A6377414144734D414141374441636476714751414141415A6445565964464E765A6E523359584A6C4145466B62324A6C49456C745957646C556D56685A486C7879575538414141444A6D6C555748525954557736593239744C6D466B62324A6C4C6E68746341414141414141504439346347466A6132563049474A6C5A326C7550534C767537386949476C6B50534A584E553077545842445A576870534870795A564E36546C526A656D746A4F575169507A34675048673665473177625756305953423462577875637A703450534A685A4739695A547075637A70745A5852684C7949676544703462584230617A306951575276596D55675745315149454E76636D55674E5334324C574D784E4449674E7A6B754D5459774F5449304C4341794D4445334C7A41334C7A457A4C5441784F6A41324F6A4D3549434167494341674943416950694138636D526D4F6C4A455269423462577875637A70795A475939496D6830644841364C79393364336375647A4D7562334A6E4C7A45354F546B764D4449764D6A4974636D526D4C584E35626E52686543317563794D6950694138636D526D4F6B526C63324E79615842306157397549484A6B5A6A7068596D3931644430694969423462577875637A703462584139496D6830644841364C793975637935685A4739695A53356A62323076654746774C7A45754D433869494868746247357A4F6E68746345314E50534A6F644852774F693876626E4D7559575276596D5575593239744C336868634338784C6A4176625730764969423462577875637A707A64464A6C5A6A30696148523063446F764C32357A4C6D466B62324A6C4C6D4E7662533934595841764D5334774C334E556558426C4C314A6C63323931636D4E6C556D566D49794967654731774F6B4E795A57463062334A556232397350534A425A4739695A5342516147393062334E6F6233416751304D674D6A41784F43416F56326C755A47393363796B69494868746345314E4F6B6C7563335268626D4E6C53555139496E68746343357061575136525456434F4455344E7A59354F4463344D544646517A6C44524556454E6A684451544A444D545533526A6B69494868746345314E4F6B5276593356745A57353053555139496E68746343356B61575136525456434F4455344E7A63354F4463344D544646517A6C44524556454E6A684451544A444D545533526A6B695069413865473177545530365247567961585A6C5A455A7962323067633352535A5759366157357A644746755932564A52443069654731774C6D6C705A4470464E5549344E5467334E446B344E7A67784D5556444F554E45525551324F454E424D6B4D784E5464474F534967633352535A5759365A47396A6457316C626E524A52443069654731774C6D52705A4470464E5549344E5467334E546B344E7A67784D5556444F554E45525551324F454E424D6B4D784E5464474F534976506941384C334A6B5A6A70455A584E6A636D6C7764476C76626A3467504339795A475936556B5247506941384C336736654731776257563059543467504439346347466A61325630494756755A4430696369492F507468654D364D4141414A4B535552425645684C335A5A4A6A307852474543374E646F515177774A516D6A4467684153455A45676867564A73374F777453456B666F414E652F75324A78462F51466A5A32474A446843446D65577A536874616D6331373131376D2B3930784C645A4B547176747576654738717478366E5A76374C6E66386774463446452F684254636B4F6E45664F6E664A4451317377526434705272565759486638476F31716A4D50782B4F4E616C526E436B37474239576F7A6C69636750326A716D4564492F74774E7835426F306F6348384265334974646D4E6D4B4733456265734B4D6B657477445271544D58496C4C73474A626B67597551686E59744F383535794F686E5933685270354448666954647944337A4749794F336F7433555976324B4A6B527677505A37417A3167536B57342F69782B784A434939723738596A314D536B5849583833784565713176635443485275514F4E4849584768506B794550344445764B794F5034484574795A4E342F522B6239632B547231747352636D523145387251746F32554347337253444655492F4957356B694A794A6659464F6E7161755148624970636A6B594F5956506B585079625343502B4F564B4D64486D2F5834316142357A616576735454345A6658523339544F594E6570466A634A49624567506F655679646D316249542B693831394F30416E75446E42656A4D733746764C2F4F476C30397666743950592B65594250367A5A3744387135645179396D4C6135482F33786659664155332B46535849615030666967487A33655175775A4870667A2F6849637A38485A4F49682B4D344768486E386165714F397164363877456A33475966643641317A50454B4579703969722B4E2F4731754753747647356C42707939696D55436C6A562B4E4A4C436C6A585333506F43634D79746A466542484C70366379646A3536764338596C4C477A38424561474F52593335667A4F58626F64772F316368425034353171564D664852422F496231656A4F717651433735586A656F73514338715676334D445052694831616A4F6A3748756F726E76385041465A6A394F775A2B414E6B2B44396F684E366E584141414141456C46546B5375516D4343222C0D0A202020202020202022666974223A2022636F6E7461696E222C0D0A202020202020202022626F72646572526164697573223A2031300D0A2020202020207D0D0A202020207D2C0D0A202020207B0D0A202020202020226964223A2022356B6F3439386F666B6377303030222C0D0A20202020202022697347726F7570223A2066616C73652C0D0A2020202020202261747472223A207B0D0A20202020202020202278223A203136302C0D0A20202020202020202279223A203432312C0D0A20202020202020202277223A2035382C0D0A20202020202020202268223A2035302C0D0A2020202020202020226F666673657458223A20302C0D0A2020202020202020226F666673657459223A20302C0D0A2020202020202020227A496E646578223A202D310D0A2020202020207D2C0D0A202020202020227374796C6573223A207B0D0A20202020202020202266696C74657253686F77223A2066616C73652C0D0A202020202020202022687565526F74617465223A20302C0D0A2020202020202020227361747572617465223A20312C0D0A202020202020202022636F6E7472617374223A20312C0D0A2020202020202020226272696768746E657373223A20312C0D0A2020202020202020226F706163697479223A20312C0D0A202020202020202022726F746174655A223A20302C0D0A202020202020202022726F7461746558223A20302C0D0A202020202020202022726F7461746559223A20302C0D0A202020202020202022736B657758223A20302C0D0A202020202020202022736B657759223A20302C0D0A202020202020202022626C656E644D6F6465223A20226E6F726D616C222C0D0A202020202020202022616E696D6174696F6E73223A205B5D0D0A2020202020207D2C0D0A2020202020202270726576696577223A207B0D0A2020202020202020226F766572466C6F7748696464656E223A2066616C73650D0A2020202020207D2C0D0A20202020202022737461747573223A207B0D0A2020202020202020226C6F636B223A2066616C73652C0D0A20202020202020202268696465223A2066616C73650D0A2020202020207D2C0D0A2020202020202272657175657374223A207B0D0A202020202020202022726571756573744461746154797065223A20302C0D0A202020202020202022726571756573744874747054797065223A2022676574222C0D0A2020202020202020227265717565737455726C223A2022222C0D0A20202020202020202272657175657374496E74657276616C223A206E756C6C2C0D0A20202020202020202272657175657374496E74657276616C556E6974223A20227365636F6E64222C0D0A20202020202020202272657175657374436F6E74656E7454797065223A20302C0D0A20202020202020202272657175657374506172616D73426F647954797065223A20226E6F6E65222C0D0A2020202020202020227265717565737453514C436F6E74656E74223A207B0D0A202020202020202020202273716C223A202273656C656374202A2066726F6D20207768657265220D0A20202020202020207D2C0D0A20202020202020202272657175657374506172616D73223A207B0D0A2020202020202020202022426F6479223A207B0D0A20202020202020202020202022666F726D2D64617461223A207B7D2C0D0A20202020202020202020202022782D7777772D666F726D2D75726C656E636F646564223A207B7D2C0D0A202020202020202020202020226A736F6E223A2022222C0D0A20202020202020202020202022786D6C223A2022220D0A202020202020202020207D2C0D0A2020202020202020202022486561646572223A207B7D2C0D0A2020202020202020202022506172616D73223A207B7D0D0A20202020202020207D0D0A2020202020207D2C0D0A2020202020202266696C746572223A206E756C6C2C0D0A202020202020226576656E7473223A207B0D0A202020202020202022626173654576656E74223A207B0D0A2020202020202020202022636C69636B223A206E756C6C2C0D0A202020202020202020202264626C636C69636B223A206E756C6C2C0D0A20202020202020202020226D6F757365656E746572223A206E756C6C2C0D0A20202020202020202020226D6F7573656C65617665223A206E756C6C0D0A20202020202020207D2C0D0A202020202020202022616476616E6365644576656E7473223A207B0D0A2020202020202020202022766E6F64654D6F756E746564223A206E756C6C2C0D0A2020202020202020202022766E6F64654265666F72654D6F756E74223A206E756C6C0D0A20202020202020207D2C0D0A202020202020202022696E7465726163744576656E7473223A205B5D0D0A2020202020207D2C0D0A202020202020226B6579223A2022496D616765222C0D0A202020202020226368617274436F6E666967223A207B0D0A2020202020202020226B6579223A2022496D616765222C0D0A20202020202020202263686172744B6579223A202256496D616765222C0D0A202020202020202022636F6E4B6579223A20225643496D616765222C0D0A2020202020202020227469746C65223A202277696E646F772D6C6566742E706E67222C0D0A20202020202020202263617465676F7279223A20224D6F726573222C0D0A20202020202020202263617465676F72794E616D65223A2022E69BB4E5A49A222C0D0A2020202020202020227061636B616765223A2022496E666F726D6174696F6E73222C0D0A20202020202020202263686172744672616D65223A2022737461746963222C0D0A202020202020202022696D616765223A202270686F746F2E706E67220D0A2020202020207D2C0D0A202020202020226F7074696F6E223A207B0D0A20202020202020202264617461736574223A2022646174613A696D6167652F706E673B6261736536342C6956424F5277304B47676F414141414E535568455567414141446F414141414F434159414141422B55412B544141414141584E535230494172733463365141414141526E51553142414143786A777638595155414141414A6345685A6377414144734D414141374441636476714751414141415A6445565964464E765A6E523359584A6C4145466B62324A6C49456C745957646C556D56685A486C7879575538414141444A6D6C555748525954557736593239744C6D466B62324A6C4C6E68746341414141414141504439346347466A6132563049474A6C5A326C7550534C767537386949476C6B50534A584E553077545842445A576870534870795A564E36546C526A656D746A4F575169507A34675048673665473177625756305953423462577875637A703450534A685A4739695A547075637A70745A5852684C7949676544703462584230617A306951575276596D55675745315149454E76636D55674E5334324C574D784E4449674E7A6B754D5459774F5449304C4341794D4445334C7A41334C7A457A4C5441784F6A41324F6A4D3549434167494341674943416950694138636D526D4F6C4A455269423462577875637A70795A475939496D6830644841364C79393364336375647A4D7562334A6E4C7A45354F546B764D4449764D6A4974636D526D4C584E35626E52686543317563794D6950694138636D526D4F6B526C63324E79615842306157397549484A6B5A6A7068596D3931644430694969423462577875637A703462584139496D6830644841364C793975637935685A4739695A53356A62323076654746774C7A45754D433869494868746247357A4F6E68746345314E50534A6F644852774F693876626E4D7559575276596D5575593239744C336868634338784C6A4176625730764969423462577875637A707A64464A6C5A6A30696148523063446F764C32357A4C6D466B62324A6C4C6D4E7662533934595841764D5334774C334E556558426C4C314A6C63323931636D4E6C556D566D49794967654731774F6B4E795A57463062334A556232397350534A425A4739695A5342516147393062334E6F6233416751304D674D6A41784F43416F56326C755A47393363796B69494868746345314E4F6B6C7563335268626D4E6C53555139496E68746343357061575136525456434F4455344E7A59354F4463344D544646517A6C44524556454E6A684451544A444D545533526A6B69494868746345314E4F6B5276593356745A57353053555139496E68746343356B61575136525456434F4455344E7A63354F4463344D544646517A6C44524556454E6A684451544A444D545533526A6B695069413865473177545530365247567961585A6C5A455A7962323067633352535A5759366157357A644746755932564A52443069654731774C6D6C705A4470464E5549344E5467334E446B344E7A67784D5556444F554E45525551324F454E424D6B4D784E5464474F534967633352535A5759365A47396A6457316C626E524A52443069654731774C6D52705A4470464E5549344E5467334E546B344E7A67784D5556444F554E45525551324F454E424D6B4D784E5464474F534976506941384C334A6B5A6A70455A584E6A636D6C7764476C76626A3467504339795A475936556B5247506941384C336736654731776257563059543467504439346347466A61325630494756755A4430696369492F507468654D364D4141414A4A535552425645684C335A65376178564247456333786B654D67695959785342713142524A53436B534549786C554C437831734A4B4F2F3846473745577863375378733455615A4A4343306D587142424642434671464879622B445A367A70714263585A3253657639775748765A4F374F374A6D353935756274714E583768566B4D3379466E7A59793659456C2B46793271746B4633762B366246577A4739624130374A567A52376F67706D795663302B47494A625A617561506A674F6C3874574A75313978383532634E304B58722F424D73545A42507568477A37434434686A2F776A30776A744946324D6A6E41444865417676496335364F41504434506776495534375849496A3447492B6844687463414E4F676E5064686B6F5564526464375132516B3158734E3279426E4B79767657636E354751642F774F343675354D4B76734C5873456744454171363979503444416367707A734E4C696A6F3543565664537244396F6B7577684E736F6F3079647057726B37572F6864514A2F73472F493756795472654A4E544B426C485430724B7871476C5A325654552F472B797A6A554849566C5A6858494A78347A397566643858376E61742B377679332F79425677632B3132734E4235564669483750647253664149587A347271735A50477858514F34344B6D636546386A796D50747079457834573735613635656B457178463363432F592F67544267794859344344376B4C4479444F44746744467967752F4141346E6A2F616569454F7A414663627A2F496D79444362674B63547A7A623849424749647A734A794B726C625372455A79487549455363394F4A6539446E43447063796A70527A424F6B46516D535071734955477948344A6B2B656D4D52567457306754526C705930696C70646D79536476456E532F695A4A713136547048382F425857532F675338414857537A6E73646C50533363455853654C78592F527A4D4D70354B47717666577244457035496D5645654C546970706E4E543350496455306A692F56645A2F434E4C435935526141437631745A56326D7366674D357948696D5252464D556635724D614766365150557341414141415355564F524B35435949493D222C0D0A202020202020202022666974223A20226E6F6E65222C0D0A202020202020202022626F72646572526164697573223A2031300D0A2020202020207D0D0A202020207D2C0D0A202020207B0D0A202020202020226964223A2022336B62656F397866336163303030222C0D0A20202020202022697347726F7570223A2066616C73652C0D0A2020202020202261747472223A207B0D0A20202020202020202278223A2034302C0D0A20202020202020202279223A203136352C0D0A20202020202020202277223A203130312C0D0A20202020202020202268223A203130312C0D0A2020202020202020226F666673657458223A20302C0D0A2020202020202020226F666673657459223A20302C0D0A2020202020202020227A496E646578223A202D310D0A2020202020207D2C0D0A202020202020227374796C6573223A207B0D0A20202020202020202266696C74657253686F77223A2066616C73652C0D0A202020202020202022687565526F74617465223A20302C0D0A2020202020202020227361747572617465223A20312C0D0A202020202020202022636F6E7472617374223A20312C0D0A2020202020202020226272696768746E657373223A20312C0D0A2020202020202020226F706163697479223A20312C0D0A202020202020202022726F746174655A223A20302C0D0A202020202020202022726F7461746558223A20302C0D0A202020202020202022726F7461746559223A20302C0D0A202020202020202022736B657758223A20302C0D0A202020202020202022736B657759223A20302C0D0A202020202020202022626C656E644D6F6465223A20226E6F726D616C222C0D0A202020202020202022616E696D6174696F6E73223A205B5D0D0A2020202020207D2C0D0A2020202020202270726576696577223A207B0D0A2020202020202020226F766572466C6F7748696464656E223A2066616C73650D0A2020202020207D2C0D0A20202020202022737461747573223A207B0D0A2020202020202020226C6F636B223A2066616C73652C0D0A20202020202020202268696465223A2066616C73650D0A2020202020207D2C0D0A2020202020202272657175657374223A207B0D0A202020202020202022726571756573744461746154797065223A20302C0D0A202020202020202022726571756573744874747054797065223A2022676574222C0D0A2020202020202020227265717565737455726C223A2022222C0D0A20202020202020202272657175657374496E74657276616C223A206E756C6C2C0D0A20202020202020202272657175657374496E74657276616C556E6974223A20227365636F6E64222C0D0A20202020202020202272657175657374436F6E74656E7454797065223A20302C0D0A20202020202020202272657175657374506172616D73426F647954797065223A20226E6F6E65222C0D0A2020202020202020227265717565737453514C436F6E74656E74223A207B0D0A202020202020202020202273716C223A202273656C656374202A2066726F6D20207768657265220D0A20202020202020207D2C0D0A20202020202020202272657175657374506172616D73223A207B0D0A2020202020202020202022426F6479223A207B0D0A20202020202020202020202022666F726D2D64617461223A207B7D2C0D0A20202020202020202020202022782D7777772D666F726D2D75726C656E636F646564223A207B7D2C0D0A202020202020202020202020226A736F6E223A2022222C0D0A20202020202020202020202022786D6C223A2022220D0A202020202020202020207D2C0D0A2020202020202020202022486561646572223A207B7D2C0D0A2020202020202020202022506172616D73223A207B7D0D0A20202020202020207D0D0A2020202020207D2C0D0A2020202020202266696C746572223A206E756C6C2C0D0A202020202020226576656E7473223A207B0D0A202020202020202022626173654576656E74223A207B0D0A2020202020202020202022636C69636B223A206E756C6C2C0D0A202020202020202020202264626C636C69636B223A206E756C6C2C0D0A20202020202020202020226D6F757365656E746572223A206E756C6C2C0D0A20202020202020202020226D6F7573656C65617665223A206E756C6C0D0A20202020202020207D2C0D0A202020202020202022616476616E6365644576656E7473223A207B0D0A2020202020202020202022766E6F64654D6F756E746564223A206E756C6C2C0D0A2020202020202020202022766E6F64654265666F72654D6F756E74223A206E756C6C0D0A20202020202020207D2C0D0A202020202020202022696E7465726163744576656E7473223A205B5D0D0A2020202020207D2C0D0A202020202020226B6579223A2022496D616765222C0D0A202020202020226368617274436F6E666967223A207B0D0A2020202020202020226B6579223A2022496D616765222C0D0A20202020202020202263686172744B6579223A202256496D616765222C0D0A202020202020202022636F6E4B6579223A20225643496D616765222C0D0A2020202020202020227469746C65223A2022626C75652E706E67222C0D0A20202020202020202263617465676F7279223A20224D6F726573222C0D0A20202020202020202263617465676F72794E616D65223A2022E69BB4E5A49A222C0D0A2020202020202020227061636B616765223A2022496E666F726D6174696F6E73222C0D0A20202020202020202263686172744672616D65223A2022737461746963222C0D0A202020202020202022696D616765223A202270686F746F2E706E67220D0A2020202020207D2C0D0A202020202020226F7074696F6E223A207B0D0A20202020202020202264617461736574223A2022646174613A696D6167652F706E673B6261736536342C6956424F5277304B47676F414141414E5355684555674141414755414141426C43415941414142556643335041414141475852465748525462325A30643246795A5142425A4739695A53424A6257466E5A564A6C5957523563636C6C5041414141795A70564668305745314D4F6D4E76625335685A4739695A53353462584141414141414144772F654842685932746C644342695A576470626A30693737752F496942705A443069567A564E4D4531775132566F61556836636D5654656B355559337072597A6C6B496A382B494478344F6E68746347316C6447456765473173626E4D366544306959575276596D5536626E4D366257563059533869494867366547317764477339496B466B62324A6C4946684E5543424462334A6C494455754E69316A4D545179494463354C6A45324D446B794E4377674D6A41784E7938774E7938784D7930774D546F774E6A6F7A4F5341674943416749434167496A346750484A6B5A6A70535245596765473173626E4D36636D526D50534A6F644852774F693876643364334C6E637A4C6D39795A7938784F546B354C7A41794C7A49794C584A6B5A69317A6557353059586774626E4D6A496A346750484A6B5A6A70455A584E6A636D6C7764476C76626942795A47593659574A76645851394969496765473173626E4D366547317750534A6F644852774F693876626E4D7559575276596D5575593239744C336868634338784C6A41764969423462577875637A70346258424E545430696148523063446F764C32357A4C6D466B62324A6C4C6D4E7662533934595841764D5334774C3231744C79496765473173626E4D36633352535A575939496D6830644841364C793975637935685A4739695A53356A62323076654746774C7A45754D43397A56486C775A5339535A584E7664584A6A5A564A6C5A694D694948687463447044636D566864473979564739766244306951575276596D5567554768766447397A6147397749454E44494449774D5467674B466470626D527664334D70496942346258424E5454704A626E4E305957356A5A556C4550534A346258417561576C6B4F6A6C454F546330526A4D344F5467334F44457852554E434D445645525545784E4446464D5451784F455245496942346258424E5454704562324E316257567564456C4550534A34625841755A476C6B4F6A6C454F546330526A4D354F5467334F44457852554E434D445645525545784E4446464D5451784F455245496A3467504868746345314E4F6B526C636D6C325A575247636D397449484E30556D566D4F6D6C7563335268626D4E6C53555139496E687463433570615751364F5551354E7A52474D7A59354F4463344D544646513049774E555246515445304D5555784E4445345245516949484E30556D566D4F6D5276593356745A57353053555139496E68746343356B615751364F5551354E7A52474D7A63354F4463344D544646513049774E555246515445304D5555784E444534524551694C7A3467504339795A4759365247567A59334A70634852706232342B49447776636D526D4F6C4A45526A3467504339344F6E68746347316C6447452B4944772F654842685932746C6443426C626D5139496E4969507A356D626963694141416131556C45515652343275786443356756785A57756D686B5948734E446C464641525A4167676F6F6F6F41486B70616759424855316D4B69675A6C656A4564657375385A6B5932544E476F31474539653447764F70696369757A34685056464152417746556B43794B7142415646586D4E76422F7A364D6F3556616536713671722B2F61646D58766E6D6D7A784862717262742B2B505857717A754D2F70366F3545344B5665436B443268646F4535422B3250464132344157555031496F484641747876664F782F6F6461435071643442714A4C75557A4A464A507A4270566171674B714E656A6E51645541446A4C596851434F4E2B6E354167347736647637706443396472674B615A4E5262412F556F315648593071586371534E4462675271522F5536367344446A47732B6335346472396C75314476546A44426E7863464158786A31383443752F482B6D2B4D73785150396D314E63415651414E4E747051425055783672744A484357564C6B414230425A6A397548662B6D666A4768523571347836583643662F4C30795A582B677267345478744649317555446F4F4F4E2B69704831477A4D775A523969436C37716434547142585157754F61626B422F4D75706E6B686730793047656D56774D54534F4B54634F425A6A70747477466462745250413772487148384E6143705147645862454B583954706C786669446455396348414E316E584950486834434F645A37684161434B51766148384641785A736F2B7A69686651445030444B5074655564634C51486142645365366E3842576D474D5770774265334C38626D436362335645563366364458304E476733315147383531747473617464533564432F4666474638767A5831424736334163307861692F444D53426A7141364B75694844435A677879776C685A356B536159564E41492B4E657076417A316D314138486573326F6F2B6A734350536F30665A396F4F3939565A6E436E54724B3865574F4D70394C48547647614A76686A4F366C35497577526A49697261424F716A4765397757674A347A5076776B3079366766514C37526235333774503671364253557A7A3848476D793056514739364C536444545174515165304A4F477A546746715A6254644266514435376F664F3371713258524B6F6636776277473944465270744A3044394A527A586263535959524C706E4C76442F53537736517A674F594264536B527074523753465144395844616267573678576D4475756A72763064577173767865624D7A714B387A772F63486D673830794C6B4F6D56666548457A682B574E664454366E6643443864796651742B447A7A3554347230436F34786D6758304C62624C6F4F7650534758666B68517A7A707732727965617249536B4D7237326E346A62304631734F2F493050685630626244386779757A5266335365615261634565725143425452713556466354434F6F6E6278475869654F41587051695445617959466E31416431305433442B2B707A656430414F463443313934486E37304A7878315146354945557032696F4C36364350726D664B66744C4B434651463162546E774675744F6B41395A4431554D6D54416561775272677643473844735361344F48334C4B706E2F7661366371417838506B39634A2B31634334736174446E39555A3750625A5846304866634F4D635264696667413533726A6C474473366969612B41664B6D79696F6D45336B3641306270653359646A2B774E7738676C63643732636E4A77626335547131727931524253616E70644239554B3433384652753345664C6F7A76637473513578566F656E394A356937364A65384276512F304C7443365A685A6A694D2F64526F3776693059372B6A496E416C3041744C4D3434717568566C46394C64622F456567746F4A356875374A53304E4A71792B7272374F736236714A7A7339355132784F757652654F653441456E415042555A3462314F42704E382B46534B4F50535A524F4275725144444D476C586F6E702B30796F466542756864543065386E52324644625343487074546E7262354433766C55615039497470653334724944773348416B3551334B756E7030445974637353346377326434334F47483145644737687833374B4B6B786B767136506E374558494C304C2B41386C444E31486D507842714D43664265736D336F4A492F692F7069766448656C644471756B4C4E6C4650495A752F4F36734449516172667132664D43334A3236486158366D4E743577423943695361525056577654706C5642384864433335467733473046774E6449586A552B564C37516C513765795A4F592F51357756314873454B456D414269564779633048697346724A6D48355375636D36515A49426445326472486547396965684C75416F314E476C5064466E645651506A386135655A30365A6C58303363684458323330786C727935486B546B41797A66695051584F715841697436374E7A576C5967442F564269515856375A3168537954777955737773564F36446F66346F314876464A4A737772754E554434304577304249633255452B4332744B7A666B71617A5042666F52675A4A5935674E644476524F49385559786D30656F4365377945435A6D7A564733776E6F7878544E55353156753265323143474D66596531716A794A42554C64506A42474164506E584D474D516F44754158732B4149626F362F55316754416555582F666D4D5836504842497550664947374F734A37317942485867526F4C786C35466C325A67413134476B707935774748497555515A454E2F644D5163356654596B49763242375166534536516C7432736749344E37644737304B4F71787938486A46545A466D647163545335706D50754E67423953584B464F5867386B72506F655074384E4D55753256625775624750764235377945666844682F4D6D4F346D364D3658777A6862307833507A4858444D6C482F45316C754433392B52787A3637365A41684557307A774878653377327935536C32614370736B3345622B74776F714438504A5333432B52493141346248556F4C52703278772B794D6C417679652F43554D5070354B766B322F42724A762F4246704A665665585258796C4D61574E4A377148625863413456382B6A6533617454585A3270586C4A6D69374E7359486B577A35476A4D46707A347934722B645748703661647575755A7A44376851494730624F364953386E6B4F5A2B4A677873316C68636A47316F633273764A6779677268374A77576C564E6D31693746323751356A75336175797646516C314748656D4A674C6A65737A774D462B6F6D66775846313876645A2F42366F76396F3347315030494877513642774B54364D496679575037356337506C4172306C57644B4A495A354D7555646853424F357570504B74625A436674334F6E6F43325A61563351717A6C4B6856463665324947784B534A307450457969703937474A443658585865766E317A6F384C6C4648473869474C39592B6B35387932543652365976664E667041596172564E515566303730456C416A387362377467686B75555136776631785934486E52417444722B4873774D54385035446A5379524D644C736B596C565659554B6D7A3949346D676A69625150383244715A4B4C62794F544F5736643070536C583437543342686F71593966627479646C6B6D414D3551326D45743279616E4B557564395753727770595733695759634F6859716A744B62736C72475557584D63696251734F517464534C653442665052317147546B6374503655744A444E6577654E4C6377327A62746A326858794163333053494734434F7448794B4750527631686C3630534D6B64424F6B685173383532366236643855707451537472574B2F4A6F37386867756D7A32573745796D387074625A525666417768674F3551653468364377454771626B315376494F554C754156316A314438632F4A76413066395550346243793072375738666E645357784B5370303536326479355936457A6750447658456847414D37772F38336A75794E495A2B354432544D7A6853642F4C5A644F36556B2F334A4E47786B71325A6173643131426D4C506249416A682B5055527A6B3578447756574B44786644694447324F5379534441507A6C6961446A642F42777A36645752454B776A42334D5A576631702F30544262646368714A77536579367054574A50752B384678585258706D4E36765A776D7848554A426C77522B4F50486D3330367A3258584136484537656A6D466A706D6E4C57447A415A5446482B4932474C6B5668436965466A53502F66676B334E6236672B4F6F73444D6161544B6D695A41413068562B67694670386755334E6C2F5A6F356D4364435642386E423057746E4E446E4D54634533452B2F446654597172777A536F574D563977503344704D35663337634B4B564935694B7332316A43435535586C2B66796A4E48457A586656796F684179762B454B6E42684667544E7338694A5137657256764D70323975476D7A44574570552B396850336A4133543537694941365077544144516245554F4E6B324D44695A66475977736978766F4A6368584D7966756451386C66366B42574867332B466159476C36525438386A67535A38387A2F61554E6D77325249342F6753496C42666C445236727A4E304851344E47334D2F6A6637474A43476E38466E586663724A6C4E36734767397A514474454F596F4F47703645524B64367448376343352F3262444A374A73686B6665646F3838452B7936302F795A2B6A534F65306841376E67744167314A64564B5977736B7A52557355597973574E63612F6F54304F64586F3847766D594B4F6E735936506D414941536B5437783357622F52374250395148345248346D6456584465583470416B594C5535304251456E2F482F4F372B5859764E6C44376B4C75776956486C4856756955716344616364542F474236344566366365733255317152776870434A313545594E496551305368597332364437677930476A356E6D4B54415530613161727449676F7935474A47564756346452473364716C6B4C6C446B4551303068787A754C4345506465697970423052426C676F43594A4E30436E4C784D444B442F382F3635504D77336E4F696852346E4B5634683478473957593677614B36625A4166633932384A706C7845706A4579352B534D506773795A714E494142743942564E773376594C7766413234314D374C6872784D2B42596E3150452B5779444D4D69565554433358486D536B4F54525A4D46757A584639513572445755457A346B70435056657A4B4B737770514F456D696E43365257336739583551314C456844344D313768585846774A6A31674C387452424C564F326B4A68485A33494D73786363705A584F5850562F582F4A37454A7938485A6D43325238497452394D63764630306A45595A5071495253747356516B43375767654765736745527535373844355368764C6370696A4F35347A6A7850707561636F795A6D433552566979676B5A6D594A6D3475316B474F776D7732715A6E696D59652F756741366D67466245757870436F55342B53636C486B6C50767A574B6F446273795977434F7152416264496B71474F5176704F43546A39526761755259567662435846587031796736574673414A354F6A754739636633673539785A344A43517A683349626476536176534C624565456E4D6C4F55472F4A4B6C594B39386E71546F5557486A686A533471384D32556C4A6261516235466233672F55496D754231736C3257783973446F625734774F6B303032546F71726B4E45535969774C366A50454A62766D684535506F417239364D54386541516F4A65524B64324A75346833596553776A72727569685472713038363543393763592F6C67415947554B6C6E617937787033564D54455278317849736C6649524D65575148457A52662F42314247676948335953597277514B2F6335582B68494E32624A4D3056306A2F30474E79463732566D726D63376B4D44506C6866446F474F475A4251377A7A42694E4E346857456D4A4D6F2B713559415839423979417338734E422F7430796A5A6D72312F337A5A5239592F70456937464966337868365A46417043746F302F7A5676784F7A376E78746A6E6872326149686C7178426E66564A4F71576150457A686B5A462B526138417A475372523941446974545030397469544370356B78694C33743471613537544163376B526C4732485A6D432B61306450482F6168616B6566513445485437626D59693873777965504D7667494B626C394C564D716332426C4C6A6C5A685A6E797450343561767A6B735A4244744D313671533258672F6473734A792B426F3859596234524259764361565335637959584F57376E694862554F463145464E566C4F794676526B63754B704D596B626B38356D49347663694566357079644C427741367A6C44315A414D6B325A486C3159556D4C5A70547A574A4D4F4973717A366B51526B7975676C5A6F49476354545A55756E644847737346796C443666567A4B62686A307A42526142665977717572796642456C4237676B6E4D316C754B324239304F6C51756862437A4B57786E6A34644C4A744B6452755A7846446D4C3337726C39597265313278746A757630582F625078414E3041464366594B4473663741426B2B302B494742796D2B485670346D7644794E7877654D6952496B59464638487967644D4569324A37646153504F6461586D71596C79357469536E31475A69696E2F68484C504C6F38596A35645458496C50787965425654567355774C307442687A31354A465457706C707269534A4C78426E6978756A647147504C5372502B3546713879784B575A2F744D614B474D67732B6F766B696259473542622F526F6C7252787073726866632F4B343358584D4B4C6356352B4E56702F726575446B43416652757358595A2B37615276714A4D4964594F36764F327365574B3050706D48575A42505A39622B37786158436D494B3650437951504A71656E697162677A386A4B7176586F6C42577873532B384D3270737A4E56324F343462774C5850592F664E714D43544E646E79597577454F6D5A643764574A594A6264584F6B536A4C4D76677A3968646756424A706948684E4647485856636C304E3831644331682B647735415952737A394A374445337955356B6B636169314269436F3334636E5764643659565731315179737671522B4D4F5179477974364B2F4F553664676D536554362B4A576C396C522B4C4334304F596D6C694E6833706F705359346B382B4267316A59684C615A556870504557634F794A655470306944553955697A5441367A424C337964644974635A3269355068734B58643861306E43612B546E61686348642F304A432F7872554D4C76702B67596339312B7743496445375459644A6C4D78367A4C4973715A76546D3231336C4550594A4C786762544645496E456C4F4C3568446A677068564A4752364556674F75434E516D6767524F445650595A67304C684C4D595A484C63737A785563754B4C6A53467630336E4D7A4A2B422F73626379474F4A2B6352393078654C436964537A4D46732F7A4F70326D454B3477777657686A4475774C6F59536E70586A4B445474647831516D7678394D7A46497633544B46554A44467A4E34375036326748336733755350483057546F41582F75536A4E44306C31616E46775776473132316F6C516D52734C584848753078466E53726D5A6D502B64416B676D70624B4731786D2F4E2F7A6F596A4A45362B54654C5039565862342F7477774673745970506F62675834667236436461474A6B7433313842766646684A4E2B3162412F7364596A717339766B316C4F6B54714A32772F384939554D436D544D31357538454C5348487A69574749434C79614D62765941427342504D457772527A34414B536D504F4A6539416653312F366B4B672B77633851384F39574F50346D32684174634D7A5763476A3368734E5034666976397641503474735A437547425749793047424845415448426938305558467A31557A712F6D57586679413264386C47456537335056657276496D4567793259754D546F7A7632417165503855304C4E657547442B5576655062364D597833763430556D727378446942615576357672787562534956314B6571334F666B63635569796B33456E6146734D70416C6E2B754E427041754C55494A6B412B6E4C535371785631734339416777376D44756E68762F616D5438676E62506E6863556145584952366249694A5753436A384F695A5444745652475855344749774250307A7A47624554464A4D364A3762324276525839465247486B5261613951776E496B693361434F4443533559477441774C7857376A37753562503444314B3667725850516633364252695A507249484A2F447535592B49423169336C507270614B5A774B6A514D52337277547759556B5A6D3842546D724A305854714A4B6B764F496A7550766D4E72374371636C626F2B304F6D5374434C5731377378364F4634704B344850475178737077383351416A456933434C54714769447A756632636C354673444A624344534E53784555626A7953784A587147767A656163585068776D50493468396641764C50356D6F356A34306758745A74794C5A545978786735747672496B54657A66442B63582B6546304139754B327434474259305A6D6C2B6B4C6A3431553131644B4D58396E62464443386B514C6162336B724F39744A483351526C374B616D453634537A2B73764846417870376D5478325031414173326559484D5831796273454957426D755851646F687134305A3030596472795A757367654D457547366C5033544D2F65677854374332546A797555417842312B4150354E4E6868393662385875636E4D75614244674C6B2F487163346D76476F636848576E4B3369455632397846745A4670624967517864787463447750326D72747A7750624C7A466A49457941715379577944336B6D573966466B4E4D576E6F6B694F4E6868634F2B787041654B53667A393934387673764A4248364F6449705A4E677150315A6132735764486B706D506B447A4564654B2F7432552F733446414A644D585174745636764D675967786A4352766879412B7134506F5A30445A4C627164754B6D2B747671784E6363776A3879383461723643534D547A354A66635457597779314F5850456C6937352F494F42695379794A494B68674C7763444E54776A6133786A2B784C6A6A2B366B4F4354776F726D5145504878777332305A47597754707349324C4C434154594C7277496F5431304644523274574D492F43442F5439676B4A7842664F7948694E5841526B794C6338664D5A337A3530674572714277526B587931456F4F6F6672774D505479377949463958333234734A6463645133584250503558704839514278707A417463314C564554323955364946584B35437A6846666F654F70773571444766726C626C4F706A68484336787542693332542B6E4647676C675454643174395177614B58396B737864636E784D6B5648647644636F655565657A7659742B754F4F7078374C705A5673444B5057583457516D33477332474151625931736C6D6B6E6D343463336C53484845464C656A335172376C683066784F637A46755A7973752B696E6E57324465574B5468316362506F6B524C72655837426E4444694E333545427A6B695A692F344D765A544F704F52347A377A4945383537765872654F36436535446768426D6C6D67507070484C7868676F7A384656772F616477334B46796C385536647471497872354D6F44504E694D7470644B386D7750484E5A7068354E3543796E7737306169366D5A456C453171384C503058354C4948717A4E4E474845584B363272514159766A532B476F63774D70416939566F30587143683746346B553843554B4935435339414851675A3064412B7845326334554A7147374973384E516765506D304C675459446653564369697232585A64343877533366717177654D4E74544C70374730645439354D6755444D722B795750754E4553677272354141356E4F764C773539456E4F4775474E426745775762426B7741423557644C616D676E43596B4A52505A76364F4F395479312F4F3432505A4370726169316474554C4B4C366F69624D4374522F51386E38315475304D724C674D7472512B65644B59597A6C482B5130662F6231705747505442694A3638452F67726139695345634E61703771646744482B7A58384B346139436D76704957504D464D6D6A4579624B6567596A795038365251573757572F6844432B5A357067776A6C68637A6E54766B45512F644973516135385A6F705A7870475A504A34394D7A2F53493665502F423742446866614C353878667A30632B666765594E444734687253565A584A6A2B66614A7A703332466B456D36774C4D51423142493163644143504E7479414F6770506F41682B71596B366F354973745764707075675979316F5650354C69635565685A6B6F6E39765438725A624D6E79675A4D6B4579354A6E3536366D74444D3444373975416242676663774E756B5136617559655974596D6E322F6E6378734C4D6C63626A6A6C2F4F326C52574574446E412F76716D5672762F686835364A75623061653567446F665A2B466648504E3654314B385254534C2B48723674536A4861754B6F616554706E7758746D2B5176544272566C6B5444383941577A36376B334F4F32434E7854636A71306E5A53634C4F456B643773677053416670544A4578664733635858795371625775433969366F304D5735754A4357585534536273666A45356E47693172636B6154326D712B49724579635252707A4F31542B3945397453384C55595049374B38474E7071625969584F347978336B4B334143726A344A4A6A6F51304D43483657394F686A5138674E4D584E6D575849315730396D336662376C47624170694A45574B3468666152664D48412F505253396944526C5157386A595A5A6335523370554D3443686D6967634E4B6F572B5249664772653757474854787131503573306D7473424B5465334F41517633354C5150784E6F47616E337751757878396F7152492B76674D5554753565735745347A59304D424757496B4630676E3834634553656C79483074344C55646A734A6B385A676F38313678356136774A654D6159616652777030594D47543263594A5972316174504F624F5864584E6E433542774E75324779325A436461595345574955664F634571412B46396F484B696E4A6D573346794A69724A314832633669755A537036346C34424C2F633737643576794934316769744D4458444A6B454D45773537416E583232677467356B5A6B36484E71586B7A687A6446733533782B346A504249326B6C4334395073354365684655684266716E77496E48655654424F303849593379746E4C702B776C4B363450693162326F762F52693743785335706A6546513061514A482F6669785A4D69735632734D7A7834662B6A566F6D326435746D654F755276615072456376715258716E41575A354C3662443354723251712F4C4C7467386935664976716D4F324A776137354C4E71354342474151316A65322F696C6961506D7034746C41726A646869394366745235422B2B2B4A666F2B65764F3167723344643168476253665453357972432F452B2B7249436A4379383538486B4E4A6C67333455457A4F6B796D655277637867647A566E6145474B6864395659517A726957754F616C78517159536E345A697946485757614D4F44316336634E6F347A446A5070496F454E6261475A3070396561362F704E39495A54586438506141363950647439302B7058597161344D68566E54552B4B4B2B6779675A79376855626256476532444341457478436C453545754A366D59543167654A64784B462F52356E6944667779774E724543697074426C4379484B6D347A666E4D72734C613347457A4D2F4D43443438777866417730534442566F643730387773775353376B6A506E735939615049385757476942706A314A66523830347832753678305049436C6D49775A5A75444D51306A634D3538682F7370544B33763047554949627036712F6644614F52714A72566E756264764D706E577A526E3558784954394E2B2F6743776E4D326C73426F4776706F58363264384B5539794344746456546C796A50794773757141434E666578784C4471766F6134364D4C4D506366387072345A554D4A42594C346E624156643039385175582B6D2B49637563776E464C76723669705A67796D594846455378676D6D633677795070432B7A413033396D5032713247484D65755748584F39684A706A334957744A767836316873353747746438726B494959586E535158653150395477393841557479776C3530755858715348336A4C6165687236687045426B4C5A39557733396256715A3736546A514F6433447A547171796D4D304F4B6C6F675365515868474A3861306451357A4B324C534B73664C4E6C3874676B73534F6A724742587268434D506F486637656430546149797A616461696B43692F424855743973376B3936515839734B4E4A4243347A7A476455334C3832766F6459334275476371346B356D307670542F4F312F742F46574141636730495A6478344A415141414141415355564F524B35435949493D222C0D0A202020202020202022666974223A2022636F6E7461696E222C0D0A202020202020202022626F72646572526164697573223A2031300D0A2020202020207D0D0A202020207D2C0D0A202020207B0D0A202020202020226964223A202271367774386E36653377673030222C0D0A20202020202022697347726F7570223A2066616C73652C0D0A2020202020202261747472223A207B0D0A20202020202020202278223A203137312C0D0A20202020202020202279223A203136352C0D0A20202020202020202277223A203130312C0D0A20202020202020202268223A203130312C0D0A2020202020202020226F666673657458223A20302C0D0A2020202020202020226F666673657459223A20302C0D0A2020202020202020227A496E646578223A202D310D0A2020202020207D2C0D0A202020202020227374796C6573223A207B0D0A20202020202020202266696C74657253686F77223A2066616C73652C0D0A202020202020202022687565526F74617465223A20302C0D0A2020202020202020227361747572617465223A20312C0D0A202020202020202022636F6E7472617374223A20312C0D0A2020202020202020226272696768746E657373223A20312C0D0A2020202020202020226F706163697479223A20312C0D0A202020202020202022726F746174655A223A20302C0D0A202020202020202022726F7461746558223A20302C0D0A202020202020202022726F7461746559223A20302C0D0A202020202020202022736B657758223A20302C0D0A202020202020202022736B657759223A20302C0D0A202020202020202022626C656E644D6F6465223A20226E6F726D616C222C0D0A202020202020202022616E696D6174696F6E73223A205B5D0D0A2020202020207D2C0D0A2020202020202270726576696577223A207B0D0A2020202020202020226F766572466C6F7748696464656E223A2066616C73650D0A2020202020207D2C0D0A20202020202022737461747573223A207B0D0A2020202020202020226C6F636B223A2066616C73652C0D0A20202020202020202268696465223A2066616C73650D0A2020202020207D2C0D0A2020202020202272657175657374223A207B0D0A202020202020202022726571756573744461746154797065223A20302C0D0A202020202020202022726571756573744874747054797065223A2022676574222C0D0A2020202020202020227265717565737455726C223A2022222C0D0A20202020202020202272657175657374496E74657276616C223A206E756C6C2C0D0A20202020202020202272657175657374496E74657276616C556E6974223A20227365636F6E64222C0D0A20202020202020202272657175657374436F6E74656E7454797065223A20302C0D0A20202020202020202272657175657374506172616D73426F647954797065223A20226E6F6E65222C0D0A2020202020202020227265717565737453514C436F6E74656E74223A207B0D0A202020202020202020202273716C223A202273656C656374202A2066726F6D20207768657265220D0A20202020202020207D2C0D0A20202020202020202272657175657374506172616D73223A207B0D0A2020202020202020202022426F6479223A207B0D0A20202020202020202020202022666F726D2D64617461223A207B7D2C0D0A20202020202020202020202022782D7777772D666F726D2D75726C656E636F646564223A207B7D2C0D0A202020202020202020202020226A736F6E223A2022222C0D0A20202020202020202020202022786D6C223A2022220D0A202020202020202020207D2C0D0A2020202020202020202022486561646572223A207B7D2C0D0A2020202020202020202022506172616D73223A207B7D0D0A20202020202020207D0D0A2020202020207D2C0D0A2020202020202266696C746572223A206E756C6C2C0D0A202020202020226576656E7473223A207B0D0A202020202020202022626173654576656E74223A207B0D0A2020202020202020202022636C69636B223A206E756C6C2C0D0A202020202020202020202264626C636C69636B223A206E756C6C2C0D0A20202020202020202020226D6F757365656E746572223A206E756C6C2C0D0A20202020202020202020226D6F7573656C65617665223A206E756C6C0D0A20202020202020207D2C0D0A202020202020202022616476616E6365644576656E7473223A207B0D0A2020202020202020202022766E6F64654D6F756E746564223A206E756C6C2C0D0A2020202020202020202022766E6F64654265666F72654D6F756E74223A206E756C6C0D0A20202020202020207D2C0D0A202020202020202022696E7465726163744576656E7473223A205B5D0D0A2020202020207D2C0D0A202020202020226B6579223A2022496D616765222C0D0A202020202020226368617274436F6E666967223A207B0D0A2020202020202020226B6579223A2022496D616765222C0D0A20202020202020202263686172744B6579223A202256496D616765222C0D0A202020202020202022636F6E4B6579223A20225643496D616765222C0D0A2020202020202020227469746C65223A2022677265656E2E706E67222C0D0A20202020202020202263617465676F7279223A20224D6F726573222C0D0A20202020202020202263617465676F72794E616D65223A2022E69BB4E5A49A222C0D0A2020202020202020227061636B616765223A2022496E666F726D6174696F6E73222C0D0A20202020202020202263686172744672616D65223A2022737461746963222C0D0A202020202020202022696D616765223A202270686F746F2E706E67220D0A2020202020207D2C0D0A202020202020226F7074696F6E223A207B0D0A20202020202020202264617461736574223A2022646174613A696D6167652F706E673B6261736536342C6956424F5277304B47676F414141414E5355684555674141414755414141426C43415941414142556643335041414141475852465748525462325A30643246795A5142425A4739695A53424A6257466E5A564A6C5957523563636C6C5041414141795A70564668305745314D4F6D4E76625335685A4739695A53353462584141414141414144772F654842685932746C644342695A576470626A30693737752F496942705A443069567A564E4D4531775132566F61556836636D5654656B355559337072597A6C6B496A382B494478344F6E68746347316C6447456765473173626E4D366544306959575276596D5536626E4D366257563059533869494867366547317764477339496B466B62324A6C4946684E5543424462334A6C494455754E69316A4D545179494463354C6A45324D446B794E4377674D6A41784E7938774E7938784D7930774D546F774E6A6F7A4F5341674943416749434167496A346750484A6B5A6A70535245596765473173626E4D36636D526D50534A6F644852774F693876643364334C6E637A4C6D39795A7938784F546B354C7A41794C7A49794C584A6B5A69317A6557353059586774626E4D6A496A346750484A6B5A6A70455A584E6A636D6C7764476C76626942795A47593659574A76645851394969496765473173626E4D366547317750534A6F644852774F693876626E4D7559575276596D5575593239744C336868634338784C6A41764969423462577875637A70346258424E545430696148523063446F764C32357A4C6D466B62324A6C4C6D4E7662533934595841764D5334774C3231744C79496765473173626E4D36633352535A575939496D6830644841364C793975637935685A4739695A53356A62323076654746774C7A45754D43397A56486C775A5339535A584E7664584A6A5A564A6C5A694D694948687463447044636D566864473979564739766244306951575276596D5567554768766447397A6147397749454E44494449774D5467674B466470626D527664334D70496942346258424E5454704A626E4E305957356A5A556C4550534A346258417561576C6B4F6A6B34524468474F546C464F5467334F44457852554D344E6A4A45516A6C4751304D314E7A6C464D7A5534496942346258424E5454704562324E316257567564456C4550534A34625841755A476C6B4F6A6B34524468474F546C474F5467334F44457852554D344E6A4A45516A6C4751304D314E7A6C464D7A5534496A3467504868746345314E4F6B526C636D6C325A575247636D397449484E30556D566D4F6D6C7563335268626D4E6C53555139496E687463433570615751364F5468454F4559354F554D354F4463344D544646517A67324D6B52434F555A44517A55334F55557A4E54676949484E30556D566D4F6D5276593356745A57353053555139496E68746343356B615751364F5468454F4559354F5551354F4463344D544646517A67324D6B52434F555A44517A55334F55557A4E5467694C7A3467504339795A4759365247567A59334A70634852706232342B49447776636D526D4F6C4A45526A3467504339344F6E68746347316C6447452B4944772F654842685932746C6443426C626D5139496E4969507A357062717A4D4141416564306C455156523432757864436267635262577536706E6341416C5A494545674567485A424647444344374258516A6741304A414442414274796A475941444268565551487A36567079676F7149684C4D4F4948515551696D34695049494942564A594173676E52424A4941325A655A507037542F5666337165716575544D33642B34453371756B376B78564C7A4E54703837326E315056746D6631544C4F426C346A72356C775863535830486368314B646335614F2F4F64542B75463672724A6E5039583635506F373070313847347A775A5431677A2B594F6B503374444B554B35627148614636356C6364314E39622B48364474556578585763617376674834783775544B643636477133634E317A495936433774644B6B46624348492B31303351586F634233466D644D7A2F34376E4C4F4D745565415937515844475736774C56506F6272696639506C504B79423964545666734A726C577565366F2B4555453771505971694B4E475A544F754D6463584666664A622F32724F6B644533694F7176525058732F36764575565658456348524E67504D396D567837692B566255664355544E383730515A53534973676274313341647850555A6463355758502B6F326F6442444F717954516B6E76794B4A496A502B6D3671396D4F76667550366E3672732F494E4B667564366B76752F767548356148622B44363664552B30367570366E32576C7A7679687441734566554F416A6E2F4669646378445863376E6156794A525267617A6641342B64344C7175794551563364422F6D2B73644D6A44616F447179684A72614E696F39794C47376C48743754415259725446614B68786E5274596237505237386271746138556F6F67382F7737587256586644376B6571397133636E324A3634356F4C2B4836553356636950413458767453524E7739717472336366323561752F4439573756467445356A4F74567175386B726C4E66726B514A3256336B2B4638435A58344C5A76726256642F335152697433466631342F66536E50555072763955592F43486741417959613556375333684733302F7547665079346B6F5877334530646535376872305851725235737044584A2F72676F364C3457513638336B30766F66574C2B496E3351775236736F5A584E2F336369464B444558395654687855705A7A2F5148587A36727A626F49753264434B454F64623848326B76416C476745594C4A6F416764335869433154624F586C794E537156556A2B72316358684738544835365072357A2B7278654A2F6E4D64397A6772364A66654A4762765A3547706C5353704E62413276675853784A524C4842704B6F7245333858654C2B45484D76424E62692B59704959744B667A50557A30483275374170727274344654676B4867357A4E4C3451596F34344C65372B522B2F5A546656656B4244464E4346476D4167726667593048346B47677433446C4757736E387576684852496E3133433955625576517439397175397A67484869416563554762683054737072506C755071555A2F6D56474C7230674A557A2B413279755A5139597751553768767232354C2B4B2B6D507469663867565959694D7465345961554B394A6A55496147397576593453754D572B75766A4E724C764B646B4163612F396D5565426E5451536D646D674C5A6E722F453458556344455242434238386568715A62344D794448567975557A616E56782B43376C637A3445596A3341357A31304E49684241516351364A6F4D707757687963722F50666A76422F6D4551386A6158564C533255784D6159466E51514D71694C534F6C4165356E714C61343242566667526D7434614F356E466432584878465763446B4C794B493358746C62583671776A6B3473452F523737496C625634456D4877556F4C59544E436C2F616A4A794C6F32626372485479524C676B2F4E4A624B6E786462736B764D4E4A5A386642384B4E736E2B4F65784E54396E75512B776669652F595874555266724D6237495677766739657672624B70454E3132594D52584F7047544E3064566F2B742B586F744677642F41524A6A4937616478554F434F55557773653153315176345132705139314E646C4967683465444C502B4B6B3871434F793836322B45682F736954647266434F42334D6D484E6E4165353041332F497272762F714251454E41414F31306E734431434A4D693043763637464F30476551537747374A4A4D782B4B544E7239592F43325A724D2F633934676755455346706B4D344C69484A6B51303769657A585734722F43313573494E494F4A43617775556C5139496D6A50727351434C6F6E4E65422B52336431684D6F562F79497A694D2F65576754674E2B4A324F78555057504273797A7268514C366F6367313575352F6E5A6D4C6435615A727A382B3241312B6946386B5048636E3943426C4C6A4B5246347961424177525076794F584D707366337463452B7334527A4B4E437A613168317A656F55795768483045365645757861777A6C53677A2B4B4E692F3654324D6C31414366664B5A5967505073766D525471583538694273442B5843634642446B423336576E593578795A4355795639586A4B66785736696C485669753375396C3656533365364D68717446714C756E534D307348457642374566562F6C316E54494D6D55314562694A416F737150796568717957506F3977313770797257477A32386A4D45307A715336796355776944777A746451312F5952333673485843652B7A643541732B6331524533586C31506B52332B67476C3047324F4538486F436A44575934453267314B5755684569564F5A6A736C37336B5762386431447665644A44545379746E4E2F746853507576424B615430436C6C6351795A54377246313532726273476C5A437336576B504942454755695072384D354C677676733579525A434E4148614F7866336E64634C3647673572596A4D3359456455493447306A784F5A7A59545A6E424C4C69424B4F694D6B4767356D552F666A5176616D7A6C784C4D6954686E546356457564697A5369516C4670666331346C43796F3837637048743164317355473445624C382F765047646748474A76746D304438537051496F3861564B336F4B614F54554C74462F4531434C61354A434A382F59684B4E4D734E774E583175484A3474564C48554357694A4650734F58636479365032413978483658476C794A4E7259646E68574D486254353061466930306C77382F54414C466B336D4B7A31334F7831627771397868794E5731754B3934576739386A744E4E47736552364F6668344A3532797641413752614435674C344C684A7576714D333864574F546E6B50767253773432636E5A735251637A517A6971777A613855382F6B3571473658575748496D724B6A6B4C4D3945747471305463386A3830392B755971766E4A332B494C7379502B356258304C6D71327672445433744276477A4F385353364A2F5A66627A5876684431443250733171327654746B6F61457349396A437736474858314F70524A7162494B4F637756635938547366772B2B384965424A6A384750726E78396E6C686230424B6C375758736A763736667A786A4C3535334535397A45375A574A4257616855306839586E384254366E584C6B47754B364841667756523142654C3748513473744D44676B544E6E4D746D524E6B545879685466424E596D552B6F526D4A61586A2B6845735546596D526D726432666A313075504A44716D64526364613975454E5033474F44386454623337386E48442B42726234697472547544494534734C6573524F4E55316A74686B2B716B495044495A33766F677846616D74486D50523646445A675771514F37355033306C797232343458514570463462412B6F346C496E6A4269496D4E64505432666F6D4872425A50483439735274345579536573355A6964772B792F2B42724A764239446D4A717A34326466324A53416A69664A654575334650366A6332423072682F73532B43593373533270664155322B31724135306938697058384D422F32347A786F35366D533158494B416A6F644F4C72717646657958694130676932527835536B3167596F75465A764C52545A4A5A4458466B7446586C5A72593678684A75426C2B374737642F465765596D4179367A523146796F6B51613946464E6A4F506A53585467534B493842636874692B48626D326E624159542F4869755877454D4E61396436327330484B456C51662B57634B78654F4C67615A66715A50416A4B7A7543424F62716F744732756D4A557877474F2B6C6F647A47722B2F4C444F2F62414358475A7671653449336D6B44384E7073596D514D4B434F6636576D773656433642682F34695250766A4C56343344456A49625358484A437A784C3162326133766A464C48564A5A506B4E4F4D6E7A53303471464A5A3876354B524855466F61514F584B49765073514466445146796A39576B4C2B6237644152792F696167376A764D7364424365656C6F6977545762487A6757774F726353475044386E393545364374754C5A79376D746F436D763277444F6C6C615168446874686C5144594E614E596C334177776873506444594F4835423159697843386F59774234477950347A364D3862714F31525A75486E4A79663461786338784A66393137756D707342376B46454D2B55476B334F4A346F76307549724A71492B366F5235336B6A436A454846384E53435A303971382F68434A5A6F4237726862434D4A6573626C576E5041674137314D413764346F353149326332302B38394E422F51725830596B336237565862744E34435559753054736B5A713035524A53354D63704D31703636646559795A55426A4374556F383565556B5747643864447873676944576B65385A732B5751375A704F745837594E464B397555505657796D4961663051436B7461414166314D64586F315343417830457244364F782B77654876677335395A6D63483051516B6E5A596D4B433548706770564A4D3043316B637432686F34765A756644364B64464E75524E3559373175427142636A416E375A34434F726379486A527545435552386A57434F6562364D55336F41796C324A6D4D436F494F4A6D4D69637734355A6B587038626779415A354F34734C3476334E754F53432F6D366131312F35723959427934366A4973793539495944546771494E49342F776434472F54514142567843703844703752714A6F6345325976724F5841373374394D707778484346553857736B342F774F55666D4B4A766138535A644D645674453448763137485965536B2F576B734B734D74724A33382F684A417354616E434E4D7A68326D434C555164466175584254374263724C3864417441384D70556A344D45316C5744657A534B4967566C4D45677748694D39514D7748683751466C675944685A6E5A796271396A445A56756F666E6B47493661424F7A79336364466A69584654704B47324E722F7745633972617A4577674654736B557A416773732B45374C4E7747723372464530484B48464346356D736B6C6F6B69356D4F34767154466C46352B614C584149324F6D3246664735586334416D596371767A4F47714F4D6645596A654C58535472756B596765432F4547434438395A692F6D592F63375A61776A697935476F6B57695A315A626D4D6767454F6B596A56484F71426C5138575541793338643736653349634A6D495754673661484261333752777A58536E4C496A764E6248414B2F63433675726744736F55485979743375736B6C454A74314136774D704C584D59542F4A7863326744524A63306C4F6E6B6F4A594A4F4A436F316D7346646C4E324C2B696E727171337945384479343644772F39544774624A386342636D784E35417042636957686B376F6B694135397549786F6C4F6B59794D577746684B303752424C4354737068376758425768376B756F58795A57335A53436F764170677164654A5657354F6B4E487A334943444877744D6A4B576F6A3671516A3674554B55486F7A78506B424A466B416933637569724E624D655252787468556961466C3565365869644D717277556E574A344A564B7438674B4758476375394330766D4C564A59746242564A6C5834787667367853716E72586E6632486656346F416B6A5274456659593174625872504A625A777A6B562F50314F6D5536704E454D346E773835366E7164345147344F36534158366651734B5464777A304B505A4F515065426C35636A3778795A50374A4D37634B45414833536833516639756A2B6A69505332677A7738304F36454B36304738393738445A4A746E2F4656504A72532B754C785877794D3251476E5638503559667850744A76727A6E3377497866334E6E465148544B5A51667842494E6A71707455766C4E79624E2B337033433054525A5154726C4A32424E373442344F53464564684F5A4F45517741436E4973417A4F7278444267535332536432674352524467706D2B56374A367971757333505130454530526D5778474155793274794B796D41585747525135444635304936706B3737656D4C683752506D39416870625259344675726F49756B6A577744774C684B4255707777464236303051513755586C464670696B54693534726D362F426E4C2B46306D5334504961657062304772714A4B6C7367544B4A796F30702B69324D36617769644C7562766546644B4977705A5532475677436E746A3267697769357937674C6B6A376B326E4C473873444A5050327433706831696273535A33754F4541336D6231674147327A787A79514A6C6E51736F71733173376A3447794E3554434D716245584F3543575943364A527A7570336F3558345A4F636F31584E464C305970374A686A5250412F7450724949794B794A4F52325A48593758794E574843746E7437543668684D764D31674746304E6B767562365247513537556E524D347A306B757648537A7A414E52646D79424B426D487355345A426F3452476D7772726B67565A747762594E6F4E426F5A7A436977774B764642746731586D6C6A504D736F4D7359637A596159446A78617052706F75476335466173314B546B52724D32395269556556376D714B5972454C78524669624276586E416C525667586E43474A385A78573466716945536A5052676668755951505A54686A5A32486E6931717A686B66796E38584A2F3832555546446772704C6E424B6C476E73343274507A5669787A73714B622F4C51737842373175316359316B74727751686F504C644D7253786F49772B6557625A794C4C426E4834544B475978547A306362624F4B6B764364704643333032336D55674B544143694C4B6856356F506C594B575469463056596D3458705862535852633230696C6249496846676549794458524B4E5266762F6970446D2B65424C58595A38686D4372484C4538725455564F51524B65784C4C5579794E735336464B396B5247357332513177576434486F6F684F436132795A554B557333416A545A546A47376D697370346B47794672433935384274646E4D6651384B54733777536B4B556879694531387973656A4855436A413754552B316E58337355466F7435647951596D70664630565372326C4F5A6247536D675A5A574B4C5376774E625238484D44426D5035474F702B52697A3462576E4549716E524642366A78724E624E32336637715553426C712B57544A664F2B4C6B525A302B6F646B444A6163347541764B41676554444C634D3971645A595A306F63382F614C304534556A7261422B3067786D637051346E4164644C4D4E3730386C6C334E554B49436E6F38456A54594B466D77696E574C7336587471564B4F716143777A436141686563464F64596C6532596A7A6156634A6232526B33524C394A697273735976736C7A476861336363304F72464E6B6434736C54427A53524A6B47683066632F6871387A565041515253366F65786A4C4E4C7933494E584B504D5A4E7562584C516B47677A654743494C5A304F4D6A36362F45636F78484F7061534F7A43356841753357756861325261762F326A6A6D732B4142685A52523447327270514F43584139426D42794B6571614D6D6B41446E6E4B46326C474F77715A6375622B6E666E76416833727950775779764F374C4A6B43644F386D666D78302B7044324A76503747464D4949485372754133616E6D7A6A6D692F434C78794F5634466F6C676852626D7231446B444E486739566B366466636B76727A6678797537667158666D4D6F5575525A317961516D616B396F4F492F4D386C6F2F52513931686C4D4F443375764533432B3356743247784A66374E664257624B6332514841333532464E47464A36396638735842384663384F42357079626F33586E6942505958704279617A3549746A463566347666723953645A6E7065585136787A306270716637305A596D696561573164666751335A4873575730504B464C3051594249776D79474137695558365A5979706357447A5653317A374834324D4C4E5947756473766630776A75595A724C6C524C3045616662466A533032476D38326C5474423547467731453248666C2B387A6D6E782F493068716A3476524754436943365278496E376D484E6D5634464F796B61586A356F38366C68716664557A794A376D3842676370686567556D435538724668335030653772725A47464F716941744C463246653263776E43766557384931664B684373612B5541764E375734766B43506B70492B446759575A4C4D74797445344F79324E6A635945376D6C6569546834322B31634D6C502B65786A715253354B6E4B43483134755036395A72355435385941487551536D65685A665372596257644C4F786530735242587532626C4D703841436D2B307472544F6D554B45544A6A4A334459744C6A74633976574B396B484739654A2B67557546343344314F6D5154492F62595743534C456B31447736787164344A784830534E764D326E43386B37346B4E6D4945617A523467592F2F4C47452F6178355059584C745833784A44704B73744D766144526756484175657846467063356A56385758577A6C385A59766E7935684C4D4579534C4D6241655A547474503745584A4F733258666953774C334A304F6E534462472F63626656437A6C5531764A30466B6567544E595A35786E41303369416C58354C6E666D4F5A73365671733055466D5769574962654943656D46504C4B7A5278334F637448466A784A5A6D5239384B33323971307435325549504F536C7251336D4547496337346B35446D695645774C47314B4F6A6949743062644A4F496C73354758586C6339716962423975666D734C317676324D4136614F4B5050442B77524248635854592F6B4A7A69552F747941363154784B75584A49704947565A686B524478654A4E765936763051614A486E7547662F3275337046717663597A4A39324F3437777438664C7451502B537275505361464B786C515333344C6E70666C3241666D486867355A646B4F52344256506969467138526250467745484A45435948694D6B5576316F4F73645A536469733441652F58347A71504A63723134444C345A42774F637A6D36726E4C366B66784D65763475466E397869495465416D6F6875304F4D38524F4D5468734C5039356661446242486679484754384C707A3752346A55782B43595A4A48724873426E342B633865377557377357514C4B4A42344F4E68516C4C2B7679726A66425170695249716C73414F42616334644E5030534A46755271555546436E5A7038686B364F4D4D4761494D5757586A5A53494C36305474487732347330494F4C724179626456573870724E5146666269482B4361796B35346B514D356B4C726D696A4369447746374C476C674D746546526C47655A354150314C683738327A524556624351387249327354717375644D476C704E57396D534C2B734E534868437A6A5377775758626365614C49354A5746756D4F41706C2F59346E57626D4A4C645630576E534A6F5276793474383150576C524245316B31384475616264654C44322F69477A4F2B35377971767A2B724E632F494E32575272454B37586376384F6270323831676355337473476F73317447324A7A6B65586A62514E534C674E4235726168533653383371546266337A634247766E4E5547614F592F2F596449745150344C696C357958436B626A46425A57334D797631394F316E66365967556F6D687830484D3156556C713331514E4C746E6866545244744847614574365941546E613466424A4B576B424857617862612B4E61325A565631767538486572685A464E38736C4642664C6B696476507063423676304B6A6E30436A79525178355755596E4A617A6369676D62586966343276346B546D695A7A304668724D595752614C3144776D78566E524F66416E6F65444E452F4D644D4D562B756E62496E444370522B6D637970797A766A53696277516B4B592F66694145704B36347562324969436C47446E362F77325556776C65366B56304D4E3063462F67747069567638735576715A6C575971525375697A4A54374E797337344B534C4733563654337A582B6F365A364B344B577642576F65316D59354157336771755A2B466F53454551695972492F6C57774673765847555A544E786468366D36744A7676746B72677579625A2F63656470763854646247386E485A484F3130376C646F56434D6B525A2F704749734670484A414250726A464C5A4161454D495968736F5475747A65746C4A47516E4B416B6D48687A36756946426D756B55523477543462584B372F2F3459427339364F385A62504C3149796B52466C4A4B6D48712B4F5936532F6172504B57792B764D4C767678796E7359687865703748566D39485A543048567674486365676E395638522B456E32664A546C684C4B6E7746476D2F55647869504830616144716F75526C386570626D6C305139594C72694649364336626638323567313143386B664538624D39797570582F664D526C68576E4C6941716575636B57416E46376237372B626E35374D622B4F305369427351335141764B56667A38763252622F34585934314C664370326A6E67514B44416B55757137304F51527A6C474E4E6B532F746D385A51795045796741586D436B4F79532F64744272467561524A672B442B7574675250534A4C416934704F5333527775536B4453786A6F707549374D75765848576949594F6D646A4447516271636D6D2F55326B643454596C34304D4C6D3855556D703359382B51494349585A54756B425655627A613543325875626366705634507176656645504B735A6534724A7279517A6D31784F34506B7A43505554547849517530556D6561557A726E307738466C626E755269622F34624936737575336F38427170494E676E35672F4F63594E34303074424A35334167336C3032567A367659364F614D6168525849787656476C76425357624C6D57776E6E6575746A624F324E4F7859634E534C6E5055453748335A672B775250766B704A73344B6D35715763764A51566D59503957454152645363424452374B4744306A324757743175476D574B577042425A3974632F7877516834336157624F76694868632B6E676D77696A4B4C4B68597A3857422B2F58595552637538427A515946324E5042763838667673733130747438754E7463665545466157596D2F6E5768322B3274796C496D693139734E68434A4E32477175336C51334B75624F74376E6B6C6A354159576C706938382F74414541764F45414E4262773069656C6E322B42725A71767A73726277456333685662704C473474584B6E6C642F745577515568434A4951572F35794C7052317A3335666154576B795A304E76583131672F584A424E42706A47526F6569725730585A686B4B546E6741496C6B49386E65545038707066682F464838486833685263706835426B706A56312F51585566785070666855514154546A5932757A3363396A58747968354855494759444C324A6E4433352F6257794B41363665442B584439426F31447662493138527167534143434572577963394D6D6733366652446A43586A5845682B5A31556469435053753837632B6974387253507365376436737A53634E795A506F456A5035514C4C5243383772746E463866434A484B5A345673334E7079596D6F5045456F546F585A69354A4D776463637834502B446141484F576451326452546D7161594D4F6C64522F6B7345783278445542414D65336641362B36523946512F49354C416348587A50715662574170437663396937344C454765525A31744F4D55315758666446305875776457796A6C3753795A76392B4B6D7A34442F47785253565065504C686C72786A464A2F304A58342F4A5A30636255537043677548386976352B797741664645704553333367787545573534302F567545494D634271487779454A57724778462B66523941594F6F3238757972437358544550435A574C64324566706B6C67376A633174644572417A6649496A54634E6E762F644F4D42666972365167554231365152494C35626E4666774A327461416669544153766F682B4A74644867435250676C6A737466544C5132337767427235385164444D5235534577374A63336C4656752F6C5035436736497559764538536F6D552F3435315956463149774D373870394F5635355A702F615753384C63326556726F66684166762B786E6768683439392B413965624B3552434A33345A70334B665346716573737A6B4E4231457370756E696452426E4D6F2B72524F4A736A65432B4B573454745372466C747455574B426C394159666E6D5371634F3934666A665A706D626B634A323137363868386A6B6F2F51346433522F50776B567736787433425951764A72522B5175717545474772426F5A544D444E356F4A3949435A4B5368416B7944557231424D72366B756348483834457445532B3669596F2F314476554C49506A6D587A6B59356D5154534B322B2F6963383969552F6733374E6B2F726850474B556A65697A73666533777476487858486F4B5063786C4153393366353666695666733257587844715966696359426850724457526E56776B746A716B6F6878316C716237444D7435316E33766F67312B467944397A5875765A302F38335A312F6D444136574F5A4B6B4D462F6D6357484A4A346A3231594F483073663464592B6B4B473636582B7833625169314E4D5034445662596D7674545971355A3865536836674B6365584B454B4A63376D492B38355766594B4F58736439792F72756D396D6D78337236502F4A34414437555057316F4D7A694273677272546E586574695A6457746657462B67727A4B49356F7447684A63467873554A4535307856665A4D42683839597634476A5068357271777856585063306C506676495A4C6B74333446556D414348464570542F58586830636459504549614F746E41386A2F654A4E764753746C764F6E4D6F387258743868336E516F4551496F38542B76504345573463684F637A6E476D5177505933345741686A366F2B7551487A54582B336F6B6E4750394A5044753243746831774B4B535249624E305A6164596363596639634E34597933425A434A34494733764A79496F7374592B417866553332434145694D51752B334F4D58342B3570735A647038764773625A557455393333666166786E4D4D707A4876582B38347341584234562B744D7646364B4552576265702F4844334763655A2F77556E5150424A57344E2B69674D674E5071465A696A5658575053692B7A58784E304643773256393459454545382F7231552B7A353833324E56332F664148523076413045554366686F794F5674554B49334276704662375173344B4573586E4A5A4E544B672B7973753744456C542B674A6670664F616E384E30416458356B4D557564382F4234545568506B70774E6471634E307267696868456355355052416C34674666722F7247775364777854322B33496D4C54587652507A334754316F516274584C32523741594F2B71524A6973707671774F6B663078526D6D43777645756B47557859474346365571615A7A2F55714A48754F51756459356B714F7456556F4A706E616A616B7231345363415A4A7741444D38433936756833525A3749743439717A7A4A4635486868702F5447686B6155734D6A7974497456657A764D374C6E4249442B6D326D4B754E6E4E416C2B433375636A664371564C394F6471614F547841454C7057716C75414E2B42536D626E57516F374767516936653031746A482B706D6339786B646C3558785A536A3361354F6A776F3448492B775738387732755644664137375169454655695073344E634B3362416847344D424233596D37504D503453366D384646706E63392F6B4E6B536A2F466D41414365776C49394A2F6F313041414141415355564F524B35435949493D222C0D0A202020202020202022666974223A2022636F6E7461696E222C0D0A202020202020202022626F72646572526164697573223A2031300D0A2020202020207D0D0A202020207D2C0D0A202020207B0D0A202020202020226964223A20226B34316469626E727435733030222C0D0A20202020202022697347726F7570223A2066616C73652C0D0A2020202020202261747472223A207B0D0A20202020202020202278223A203330322C0D0A20202020202020202279223A203136352C0D0A20202020202020202277223A203130312C0D0A20202020202020202268223A203130312C0D0A2020202020202020226F666673657458223A20302C0D0A2020202020202020226F666673657459223A20302C0D0A2020202020202020227A496E646578223A202D310D0A2020202020207D2C0D0A202020202020227374796C6573223A207B0D0A20202020202020202266696C74657253686F77223A2066616C73652C0D0A202020202020202022687565526F74617465223A20302C0D0A2020202020202020227361747572617465223A20312C0D0A202020202020202022636F6E7472617374223A20312C0D0A2020202020202020226272696768746E657373223A20312C0D0A2020202020202020226F706163697479223A20312C0D0A202020202020202022726F746174655A223A20302C0D0A202020202020202022726F7461746558223A20302C0D0A202020202020202022726F7461746559223A20302C0D0A202020202020202022736B657758223A20302C0D0A202020202020202022736B657759223A20302C0D0A202020202020202022626C656E644D6F6465223A20226E6F726D616C222C0D0A202020202020202022616E696D6174696F6E73223A205B5D0D0A2020202020207D2C0D0A2020202020202270726576696577223A207B0D0A2020202020202020226F766572466C6F7748696464656E223A2066616C73650D0A2020202020207D2C0D0A20202020202022737461747573223A207B0D0A2020202020202020226C6F636B223A2066616C73652C0D0A20202020202020202268696465223A2066616C73650D0A2020202020207D2C0D0A2020202020202272657175657374223A207B0D0A202020202020202022726571756573744461746154797065223A20302C0D0A202020202020202022726571756573744874747054797065223A2022676574222C0D0A2020202020202020227265717565737455726C223A2022222C0D0A20202020202020202272657175657374496E74657276616C223A206E756C6C2C0D0A20202020202020202272657175657374496E74657276616C556E6974223A20227365636F6E64222C0D0A20202020202020202272657175657374436F6E74656E7454797065223A20302C0D0A20202020202020202272657175657374506172616D73426F647954797065223A20226E6F6E65222C0D0A2020202020202020227265717565737453514C436F6E74656E74223A207B0D0A202020202020202020202273716C223A202273656C656374202A2066726F6D20207768657265220D0A20202020202020207D2C0D0A20202020202020202272657175657374506172616D73223A207B0D0A2020202020202020202022426F6479223A207B0D0A20202020202020202020202022666F726D2D64617461223A207B7D2C0D0A20202020202020202020202022782D7777772D666F726D2D75726C656E636F646564223A207B7D2C0D0A202020202020202020202020226A736F6E223A2022222C0D0A20202020202020202020202022786D6C223A2022220D0A202020202020202020207D2C0D0A2020202020202020202022486561646572223A207B7D2C0D0A2020202020202020202022506172616D73223A207B7D0D0A20202020202020207D0D0A2020202020207D2C0D0A2020202020202266696C746572223A206E756C6C2C0D0A202020202020226576656E7473223A207B0D0A202020202020202022626173654576656E74223A207B0D0A2020202020202020202022636C69636B223A206E756C6C2C0D0A202020202020202020202264626C636C69636B223A206E756C6C2C0D0A20202020202020202020226D6F757365656E746572223A206E756C6C2C0D0A20202020202020202020226D6F7573656C65617665223A206E756C6C0D0A20202020202020207D2C0D0A202020202020202022616476616E6365644576656E7473223A207B0D0A2020202020202020202022766E6F64654D6F756E746564223A206E756C6C2C0D0A2020202020202020202022766E6F64654265666F72654D6F756E74223A206E756C6C0D0A20202020202020207D2C0D0A202020202020202022696E7465726163744576656E7473223A205B5D0D0A2020202020207D2C0D0A202020202020226B6579223A2022496D616765222C0D0A202020202020226368617274436F6E666967223A207B0D0A2020202020202020226B6579223A2022496D616765222C0D0A20202020202020202263686172744B6579223A202256496D616765222C0D0A202020202020202022636F6E4B6579223A20225643496D616765222C0D0A2020202020202020227469746C65223A202279656C6C6F772E706E67222C0D0A20202020202020202263617465676F7279223A20224D6F726573222C0D0A20202020202020202263617465676F72794E616D65223A2022E69BB4E5A49A222C0D0A2020202020202020227061636B616765223A2022496E666F726D6174696F6E73222C0D0A20202020202020202263686172744672616D65223A2022737461746963222C0D0A202020202020202022696D616765223A202270686F746F2E706E67220D0A2020202020207D2C0D0A202020202020226F7074696F6E223A207B0D0A20202020202020202264617461736574223A2022646174613A696D6167652F706E673B6261736536342C6956424F5277304B47676F414141414E5355684555674141414755414141426C43415941414142556643335041414141475852465748525462325A30643246795A5142425A4739695A53424A6257466E5A564A6C5957523563636C6C5041414141795A70564668305745314D4F6D4E76625335685A4739695A53353462584141414141414144772F654842685932746C644342695A576470626A30693737752F496942705A443069567A564E4D4531775132566F61556836636D5654656B355559337072597A6C6B496A382B494478344F6E68746347316C6447456765473173626E4D366544306959575276596D5536626E4D366257563059533869494867366547317764477339496B466B62324A6C4946684E5543424462334A6C494455754E69316A4D545179494463354C6A45324D446B794E4377674D6A41784E7938774E7938784D7930774D546F774E6A6F7A4F5341674943416749434167496A346750484A6B5A6A70535245596765473173626E4D36636D526D50534A6F644852774F693876643364334C6E637A4C6D39795A7938784F546B354C7A41794C7A49794C584A6B5A69317A6557353059586774626E4D6A496A346750484A6B5A6A70455A584E6A636D6C7764476C76626942795A47593659574A76645851394969496765473173626E4D366547317750534A6F644852774F693876626E4D7559575276596D5575593239744C336868634338784C6A41764969423462577875637A70346258424E545430696148523063446F764C32357A4C6D466B62324A6C4C6D4E7662533934595841764D5334774C3231744C79496765473173626E4D36633352535A575939496D6830644841364C793975637935685A4739695A53356A62323076654746774C7A45754D43397A56486C775A5339535A584E7664584A6A5A564A6C5A694D694948687463447044636D566864473979564739766244306951575276596D5567554768766447397A6147397749454E44494449774D5467674B466470626D527664334D70496942346258424E5454704A626E4E305957356A5A556C4550534A346258417561576C6B4F6A4D304E444578517A4E464F5467334F54457852554E42526A5977525556424E3045344F5555354F544643496942346258424E5454704562324E316257567564456C4550534A34625841755A476C6B4F6A4D304E444578517A4E474F5467334F54457852554E42526A5977525556424E3045344F5555354F544643496A3467504868746345314E4F6B526C636D6C325A575247636D397449484E30556D566D4F6D6C7563335268626D4E6C53555139496E687463433570615751364D7A51304D5446444D304D354F4463354D544646513046474E6A4246525545335154673552546B354D55496949484E30556D566D4F6D5276593356745A57353053555139496E68746343356B615751364D7A51304D5446444D3051354F4463354D544646513046474E6A4246525545335154673552546B354D5549694C7A3467504339795A4759365247567A59334A70634852706232342B49447776636D526D4F6C4A45526A3467504339344F6E68746347316C6447452B4944772F654842685932746C6443426C626D5139496E4969507A37444E76537A4141416536306C455156523432757864433778575262576674546E664F58414F6776492B696F71696C5139434E45513075543753744C534571356B393148786D3573316E3942447A61705A57562B75575A716D565A7062636D3653566C4A6C6D42714A65564E447941516F6963446767694D673542383572576D746D7A657731732F64337A7665644A396F6466734F335A2F626A2B38367357612F2F576A4D62394431715779384A317546595838657175653959724A75777A755032424B7848596231653350637072493969665A586232324774347564734F3257367A76324474375579474F736F3052364164526257665554665A4B7A5452487345316B6D6954594E2F50442F4C6C517578666C53304B374875744B334F777634754136493245655161724E586362754542664C65345A6C5830322B6D6174305237652B5949795257375946306A32702F452B682F2F54355438736A2F577930543746617756574E386E2B6B6745375348615453794F69705668574E75786268546352332F72596E454E6962775852667464574B2F345679584B614B776A497949637854505A6C53565944784C7446794E52733634546F757A41524E6E4B375632784672432B4A713670786671596C4F3473426D585A4F596554333546456F526E2F586446656A2F565A724D654A766D65776A6850747037412B4A48377677316776454F662F6876567A6F6A302F346A37697250736A4C746B694F435868767476464E522F4365685657654363535A59646F6C732F6A377A3142394E3066696176486D5275635871455A2F7277596F46626D6849354B737A676D4D625A517448646A556561654D5932667554437933755A7976787572386538556F7041382F77485748555866625668504665302F5932305579707934352B666966427650367259752F6F594E4C42496C352F314B74412F69695344625137444F466E30585954332F375571556D4E31706C692B4B784D6D4437484E4D6977676C4C61696C544B6A654B437578316F6E662B334245414A6F77767848744D65776233524939702F4C74524A5472496E4830486178375233323373644A3335576D73712F744278326E6D6B7658634A6B64316561526679452F3645347451567937482B6F47334331486157564666783034636C633159623855364D39496A3932364462674952353466732B31435A694858664343303467516D796F44642B51455535467A6373695951547A6A474E3763463747496576304C44554F485655666C6D7A682F452F7273612B4C334C662F3241666363596F374675626F3477376E737667503852423972686D7A78345A6C376369452F34715153527158347A3143367972584E6D376D3371766935776942344948413753332B596B514F3058735052483750756A7677526E6F4361493749594C38425046687637634B50386E5A4F34426E3745657866524C32393462352B674162497136514F583850693174585A6A4B4D3039376E6E474B484255636C675744414770627152546A345032504348494D4433396A774D6D79744761394A75522B466651396958787456653038387A625559395577624855333966767963696A4E67583762516473566E444444587555665A5A364B4471467437556254747959614C394C4E6D4D4B62323055366D57756D6A5841354B6A415074787845486E4144436A59314C595A586D6763472B4B386D576231674B6E7A5A635249374765463146424D724B4773746C326739734D4D6E4A487A675A6530375147726B426B4B4D444D6156543267484935785A71716E75524B4C586D5377706F747A567A6D3044516D37436567583350692B7449644C39516B76575967784B58547851656D5A727837523968712B5134374B2B335177505554777039507662394A4242337762634B546B745A6A6D6235535868774C6B716851375852566844494D4C416B7A4D70545331324642506B7A4F346F4536372F45395557757254314D6F4548342F782B7866684D4A4D6C66306B79397A4A4E5A503035423168536A6C69532B775170736D61754D727958335675376554677238664F5752477779754A693174384675745937457361586F46324E376270664E626D6669476571697768314B5649314A306449336752702F6C4F734554506C78424F6D65676A6938306E686C3749725030747A2B4C756C6B6F4437645370357752427A73502F543151576757376F452F4846674E30474A4942586144573774352F4A7A7461706C6A4343506551686A32633070422F444D392F47336C31797456637544527850756C50706C315150616A38474C46424A4B44455A41753968713269333643474C32412B35512F676E336557634378692F4F78554A5657394D483174474D76653239497234776B4B5731435659543239594E6D4331473569613364704F5A362F3357396A666273554D354B6B524E3478375976654E654F346F594A4E4B53326B467351326359782B72695076733959576151573135596F714966726979615053486C5932334F4B4353444253634747705A4E776843427344586A5A536F553239346531515A7A6A6E4D364A78696E4E4E746E624A73414248674844796B656B6E44736F7048334C4455374E5936474E7562356342354361535A566179432F6A786F5141396656326D3271646D73446A6B6A76646D5066736874494C684A382B4F6855444F777462554573664E682F68732B794C52745A756432567552376C456F55367954582B56414239564767626772577A33636F4C72744E6C4F55563171496131306F34304A65782F686A373773784B6435303379626648766C7641796C772F76794E6A4F3164725149362F574D52674C315258745A616A304D6C622F797257663265663758584736473776736E6C724366517A4E69772B30366D42306355592F564232424963425455657344613857794E6F346A575A437A626A57735761303241696761612F394C415A54736645756E4E454C385A6F54615761376170356E4F41727350655A54426236485038656152455061623338504F3747516834563257685A5A76576149383166576D54396C5A33486E4C70724D4D396A612B3352456B49397A3752464658324139516F6B4933326C63555A6A6A7045724E7269316B76625668483175776A6B4E536273462B536E4C345052364D6C4561746C4535534C676B76786D736D596179686751474C3865416665434F4A684A634A56384F724776447172586A64764A724B6C713436635052566E324C394D7072466D4975706C454F5967536A477467684654324E3072624A6862776F332F36306E786463527A4E6F30474A6331727168736C534F6D4D2B4C476A50615265457845334D366430446F446E2B5843574B4B386966532B42302B534B6673496E742F5130616A58464A70564E38746F35705A6A4754615A79536833755678443552416D78504D3864693364465638446F7A61465936657A6F6A79726570666D436D39686564484649736D496C6D51612F6E6366396D326E575A51524E7A6D526F2F313145466854796F736B65426F762F785265563474586E5948646337422F67784A694B785268376C6E644C765673326C374A50346B34353374646B49336A7950396978506E436943424A52382F72694650657A39543976724A424B6458345770555A7A4A717857346267386162515139637036714667416A5965316143486767346C6848625756717A5A303539495563465A324455584E476A70387A696E45397A3345534834652B33455146396C774E6165394E7450596156647964625A4F535562414A5A54426E5059517171435761796E4C7A4B635743616E304F444D5953722F6950416F7A527A5275484C674A73557A33537548784D2F366B535A57416D716F75546F427A7857536B78536638316F6159434E6568773459365343346E3462627A7964684341536377527749435852563058645766736D7845384B777A734A3651356E3353344B637A476A43434F61653971354139343038532B6848555554774E75535159353231347762475652373441546A51642B506E5747636C4F65744B53574B34676658694369693964462B3838676659332B366670794C526C486D4746483969677652736D637363303859786C49764B7648384936795279734C2B68624E624E432B5661587950354238524F3146686D76316362567739717A33675131684D6E4F6679313341434D774C41696A2B4E62316C6541317179714C39625752626D69476E6F72724738343563633877776C6A65365145385557462F4A6239564A6959346371757875576372707337347854436A43695435497371544A706232626936656C6C6A585857377555334F576A744C3334647935484A2F7A7331794E344D54466E484B7A58416B5043546E3473464D2F477A316E4266455653533342455A414B67726C2B64354E306271565456744B7A72744C68666E4F485A57744F515168532F595872426F4B7053723666646879474D2B7339742B47512B7071306A396561366E6A386348774A443574596C37734B73633962385037506F48337A6537344F676A436A566D454F57754C562B75473369514D2B52775073784645597531444A58434B4C4D637A676B7769376465474D4E50316C6C4A3179742B565458372B484F7554616359436965533855654A575A35794848784F6C6241632B62796F66383878476451486E34316A4F686952562B4A41496E654535536E4349552B70536A385466416232657A4567652B69645974422F4C783655575171735056445A5A6849684A325478624F744D706C51783572796E69316263327264314F362B79734A735356776C2F44484D41534D6F7230385530685A2B72716E48362B307A47694F426446694857784E6E464B32317571443871706A492F566358686755776D63556C4545427975594D5A7975312B5678536958447A3366786C38706B3578624759674F4C693258372B56694875566D7378546B372B354E3052674D386750576177484A7973392B597A6F6D746A4442727034757344724A3969516F734D533063317A354D2B37324473624C61304C44706C4D746B4F5A416431446D4D576866564B554F5A4C513969514F35704E6F745847687435336442496E4774534D7376424544424E62306E52646F673935596B34687655684E4B4F393436634643344267415A305A6243305356314A4C6A49367157392F734B3849516C76562F724D6770615831564354716C7745702B426F2F316338726D767A306E4C6241344845782F30612B34377135734A76725751414D4630554D3468776953446C717163304A525A76362F47502B764E2F3067645836536769775177662F4D425344496F50305451596847426A71685478506B79626D2B6832462F386C30754C66472B4672377654385538657363704134737048566D6131752F674F4D545A58557541504830704F4A784C6B73624E366668686265506E4F683367464648574A6B676C2B4D2B54733567684634614542584B6D426A572F305A65456D6354454963393970304333314A6234424565554F564270524E78303365343468634B5A583145324D2F3070726975794A48534459566A6D4D4F77596E37464F515136526A3631635A6D4154423864726C656F436330756977717756783045363434616D45697A78555573624E6243345768385845752B4552687A4B6C746A4E5A64794C6F6C2B3947346B78685355536958654B566E7169764D6A41343254574B525164584D6A36354930516550524B396554597A38346B55466F4C6169372B7431414C337048786C48443270305172686D5835794C4B52646F6B464F4C3330362F503150596F643755505A4F4371464B42587335357A4F436D454E2B7A3550495A653064755138446D4949594B6D3047706F32446E6355534E67634846564355495153467637693052676445695876316C67637975666C4153777931324A51302F712B4A73705148746771687574586C43432B786A4579384849354B484554652F4B746D646C7354647344734936537A6C37575644623146667A764552575A79643570684E43386865677A2F623469344B59454B78506F613055766A61503765613538734D52376C6973624E53334B5375396D3733307058306A4565436B66552F62413478457154694853334569436166317A636A7430704A61305473574E6A70515367453858346B485836647A4A78474167497744377163786C4D35656B7769316C4963687A59432F4747392F4C344F5431524A5331444A685262745148474A386866664A374661366D355A6C7250672F7842456D455A783468774469446636306A3330494C70435933684F79555071516D7331496959752B7441363369374575742B34306F44776C52586171534A312F7741425A6C54537A326E69366D5577617A64392F454E5A56706D3063376648416C48757755346F464D484F327967474564486F3632314242474C6E75576F42326546646E536F46526D44555230486E514B76376730576E66706F4C66712B347377704750487343573774424F644D6F42425357334D614453444F394D706D786C77613871316945454E31305151353474346B4A444468456C696A6A565A46416B4F50554D7432756B41506D2B42524B6C54524467412B4270496F58376C3769466F52656F6C4A63424F364563425A6C657655646D3368477662324B7264474250453652517967576D64333676732F4C7A4A73456F4750434E63436F646B54344E7865644E5532316B507A727253626E4366735846374A324B30384E36316E784F614F51424178387361306D73684437625259614B45376D2B6147463138444F754855676F597033324F53576F66796A516755665A6E4973714F7247514F59724F4F594941764D3445796A6A514F3743367079384A4B574D49716A6F4F3065744834643137694A314C6243496B48775749687A56684F4372556B6B5A6C737354585A6E3036616669584B6376376370635472712F6A6143356B35476867626D312F427548356F456552423055774A484F7778476D545953654265577374306F356641533063494E453932706D754259724655315577517A323243673777544B34304D33622F326C39324D6763726F45712F6679746275462B4A77634E37366C4533462B633349372B4751735A7363364A6A496C585031476C4C5370552B492F482B64636F4D6E6B48593649345A32504C7436634451464D524F6C2B3556522F4F4C565953566572786E727976565452724531494D2B754B6359705743756C6A774B51366764764F576D6A784464435941794C5255427956674E6B6745565167754D6351544A755068734E323461663467776B46356371745178416E5449794D727A6549714A514A4843376943696E3578504667494146507751516F313442424E3853634A48554831706C4670314B31523447724D514E6F414F49337775764F4265326630704C462B36686362383249737039524A524C5370356B526F496B4C54366F416B6D414267654A785743347234317A56495654726A6D6E532B58416D4C4A50432B496C6F57636632474A3568487A62464C4A305078754A744C594B4A594E596E5270785A734261706178505661304D4E706B727473654439624663305A6C64436D4B44516168386B455A414969497379697356534533312F76546F465A75304B6B4456533945724A57537A4447523845347272464C552B646651536D523370313435772F306966744A6A4A5146454368457743594446744B78487654344A6E6738696F3053446A2B624174454B57636A554D725561634D787771786F722B416F5946424B743148363874735465694D546C463672624446764E694B6253777365326A6A554D6D7346423370437369457471776A4B525633457468332B663549336E4C7550692B37387565714D763255693830664D4D634D4C715633336B56456F5144584567596D4E33484E457351376A4C41694339684349464A594B4F324639586469585A634B7368346A6E5745392B34534E4F4641654A674F7473755945434932697732663258334637584C35536870394369312B2F7A6837394543627342694C4B412B586F464C41517677715742696D354874687A774C345145554B7334307164774D41337956466867714D674E3249506F522F56662B57392F506E334D75346850325756344B34467851444A6B65795644736F336957454E79753931566A306B6B573549764737424154383831532B426E384D666954664D6A4A35494D686E383066557170312B436E534373756A3476684B7A7678654C2F755A4C38457A764F49314273316551356A35523039334757627A583842582F6C77453154426B4B7A4D76345A484B4B6A564342414949714E714A32786A39624C4C77486A366564763451453562682F6B69434C35485745494F647658442B5839504E4250714E4A3238794D486B2F4B31447A54366649355A4B6C427634696E543964774B7468706F5234615856427031724F76414A435A68387A663850417055336B4B4652497179452F44716279757673504D57593674414878587A7A384D73727A7A533971766F34676E7167313264465A7273663145324534614D4C4C637A4269484D6338746152372B31344466525070533571624F794741647259716365643259336F713472374B6F564C2F5931515943564F3848752F2B6248706479387277373846466449704F30584135596961574542316A654C4A4576493639364C502F6B414B4A355949524976564C542B704C514B63562F666C304F5A494951587A69767848736F2B6E5654735A49565156416372752F486D757879757A7A4E6755787176385041383454792F553361745257423771617751756C546235576C4B7158697A714769484B536A4B52754855314B6D766F767364735465624746435A72557262717042304434574E7A32546E385130725564546A7944585032722F5069712F3932496B686E664B6B7371484E64526E784E5842763254774F522B5333536D5136786750454B456B376673746532756971314C6651776C6E73624643395153797958634C59664F72435669333752313853684A6142764D6154656B4A676564575752427A696D436E4D44455363617967687A33454B55656A556B71516E512B2F342F782B30536C626A77593761425A774163714B426D6D7857577635776B732B736C34426B76483437437574716953503733593141424C5663426B792F6C484F5A49483870305253577063303437644D314F65353266787672315875646B7364327446547546494870474E3843654A555669724A57374C673131516D4A5479634E2F513371687850787636504E3179584333314468456D376E31756867355A62554E65774C4A53704E767043624A66527449646A645A647066572B493978415330464F4A456C5735764A5A562B75314C5A79434D356A6252452B77432B61614530426E775342484D4D4A4A7257516C364D2F594E42613548634C51575569397572477A55704E3067326533454549754E6563714642365A4D6732674C7058692F70626F66614C56514B3479783956476179515553363934386C6F384C577753546A3447546A667379424234306E5031303335566C6651786D486D63714F49796E783636527567535461635167496D6F656267564F48334E7033376641734A3159734E2B79423959645777435770465A796B584F47523338512B5136637269586E516B7A532B6F75514F52704472685059797A6E554A673763586C796D797947536D3966697A57492F4D5A41494A5179623155776F4D33623956424E46736268343855627564697377734E514572556D6D7731437A4D64664E61624B6F474F704D3064426232334A626D33626D7346655831695934436A63453646695A796B4E326930752B7057724B344C2F77536368495055335A642F626D3556355736357048386C446B77424438333558464B537735424A6A42465A3569484A7372373141364C776E2F6B2F583948695743586B2F5767596A7A4C664F4E4E32443443564C536A684249786C3152764251457643485352387446476479333054547A6C533077516970743870597A37646C4E322F636E5A4B6C34374C776A536B664E494975786E69725A3374616262413872463350503257556E674F7678636C676C6D7862735632617A4753724F3755514B48424F426A496865577076666F5441592B2B4A315844554D6D71596A5476532B2B434F4F366D6E5844366171385455484A79766F4436354E375765794E794C73776A7968544F4D684653642B30542F43562F73754C374D7543673965492F35326E675263307969686876456D4F5055384C57422F417A2B50436379706E56776B5637696952576E5270716D79775430757646646F473556633853556B792F4C344C7A336955585938724746582B4B6F717577526E356D494E39556435536738724737676E346F7153783563336237363939336D726F6E394E7531756635647177634D7236385151592B683865336976316473707437796D7959794E45503938384456666E38553731426B4B45386F425059326A704D645A613955687334695A4E562F68736B5268706C507A336364547950557A5A45424B4749474732706443504E6C75596439726552335351526753382F7539467568305675786F4A4C346C59687069563844354B74742B447862586738474C777649684B2B6E556B7346787235587935306C597A62394C7A582F6B636D79464A324763704A4A334B377535494B4F4434367479346D5345633678524744466850647A6162664B6330374850436F5639784F6E6A736C612F7362736539456E4C6C76756931434172326878454371594D2B764D346959654777582B53636943696C31437964637947326E514D4C3250532B2B614C342F77694B646B7436507A494F66536F447079566A36486976354F35687A6970614F69444B4A6C644956624A4F7663334B39386F324632376D5A71694264474D704474425148466130316141355354324D6B313257767550324C4539696459766F6D68554442506F47786B49695678437045683357534C6F586F3458417741624F3043536546655A637A4C4C2B6943324C5046644A424832453435704F71677933744F34716E444D694258346956723263372F613657345A5062646336796168623348385050753343674271527149432B697231584F376F58742B506B626252517150465A736C3373493772622F4635353773696349516F4E324D2B4E617A796937702B53714D6E6D736C6B3167306B552F4C59596B6C727464595577516B71573048644A727A534D6D33396B7941676B533756716E2F523743356E67323970324258396D714130777339643664476574514173464E5A46374E77447266514245417337424F554E48654D447251515433693041396C682F424F4A676A746D7A4B7462494C59557363696933616B75465746377A465748555879536F6B386B70642F4F662B34713174474876676E4E7A6B4C3635366F6242357859444D456232315136614A554F2B7248595466707057716C38316632754F554F3662704859494D7464656E5A2B4671446E7775776D7A4A47587443675877594E44586A645A6E77454769657775764C5A4A376F61746A795A445A70614E6E546F622F367673734F6774494D3362613865657652587366676A392B4C687A694B50705243465A673974442F366A357046546D74796F56363537676D51746261782F44524A716E552B6D562B6B6D4E304B3448494C742B3741394C457A65307A6D764570447845655A454851712B59486C46754C64556F62443438584C666B33497769356E44755030552F31324C756D6761484D394F35737A6F7A49643467742F544756464B43555251456A4B3937716A4A2B573949454E714B6E46366F2B56444C71436E724A4B54696745512F394661737A63504453666935414879367163717368356570534835335661633941494939587A7A347151536757586F707344682B69454F34524A434E6247314F36544A42724E42794F36726545796E362B7A4D4536594C316C587431356472484C324F49344D4B5730565075632F765A4639592B5871314637724143736357744855753058494245344131437259516D416F43776E464D45494E67624831534171316E4C54586B72725A4E5942693031702B314F56724F2B4F4A7A52696C6D4D545831666465574E524C5649354671787558616443665653756847467A506376472F4573382F30706C4570447563656E4E592B652B6F626A69554C395932667A30507934656652424F7262476845586D79704773554864507A38563736635778666E6B2B337558496E7973556E6C6E517972396C52345979396D4E35506B3246622B5A2B6C713069326F7867637A65396D56305965726B5943624A5365505366564F6C7251664B2F6F776465616A4F306563784262316F6B7841354D6F5837422B5777796E74597965757261544A717747446F4E6753345A5A50344954616772444D362B4179636C6A625550494455675A45424C70362B3171567A302B444A73443261786B626569696A7A792B3554642F5739684437755A744558756163712B6157695A555054306537595535634475457156357A4E5241354254577A4C2B415163735A4C574F6D766B365072317A7A5743584C314C715732716D36324F7562784F466F68734E704E6C5548327863583462523049566A3454696E6B45726E745244306A7334745A6C4A416A2B484950456F477953636368416634752B7368416F4556416C48466157714A334678573979684E48534A446A4F6337796B5A597842373875554E71666B45574466656B4C36414B344E7751624E5731664348415256736F34767879667369544E363035314367533765617673732B693669674A3534614F55665758364745596B694A4E76373147437050476E36354551303455756F622F3952367962686E54317757572B4564567576736D6A516A506B684A6261677A6336783631514E353932343237457676394E2B7836726948637A3941525269595247694C445861494933414E424D42646F50666F3333334F4E316B4A43644B6930543372654D73616D6D586F456D366155317453775737627365615A76434C2F4C374868316861416E385A6170726179444C4631387474596545416B5673326C576F6D336342597A7648344856743571316C64664D6E73364B397457584851384A74584A54592B45744C49435A644863787238665A6E4A553166766A66326A50663649704270397557622B4474363834326F597A6B30386458492F2F68505A56396A73724C734A33622F50592F354452794953577A336E345344622B435A777572355A4F6B5135317A6843464A5950572B414F5A38525035474E7066304743525356587768574B64386766764D3459384B4377654A49544E535939776E33304C74374F7967723261716A494F4133686639423576545856446D7638756A4564752B4A38696F54524C363067484B682F6F70396A34712B4D35457773374676597964534D6E3865324E4C4B56745253315465464F4A51737851653566516B37675939777745747872476D633671486C5A4F5761784B57574D3967714F316230306675746A6C5A684A6D625342374F374B32575130457676596556396A4F67376D6E45736B673572752F564E3362572B796A4165794A6D364E494C385432647835737078456447326C554C6938477956726D5237675832614C346C724B496F34573357514F642F6441657A706F6E6B577962562F582B492F544F62626E7158434B42364657306632417846493542433436765A5532635136346A50696D6D387763436B686B2B384B6B66613249496F737844586B6733773734704A6D64756F6B6B5771692B3670366952436A5650722B453830596D4877483478307133482B656372776F6C6E524B394A793274777452346B4A4B2F664D71586653664D427768743751366C676D796E4E76454D6649314742533933464D594A6B6B6E526770454D4D7377466237556D5A4C585A61726F516B614858586D6166362F55667A637A642F52363651756962464A6830747242444D374A70476A614F6C612B6A57634B577A4D7571325A504A707A6A776F456C634E4751694F746D69445A464253654C76333865452F4A416359336242466F5366395537685368786F52645258696A615935526468506B37305463704D6E6C7058386252516C7A51674F2F51775863516C77775862596F4A375350617A2F466737793145324F4A496A35432B75467A317734344A2F554755395478497274437572666571644555797A566A4373475479326E7459444C707942474E61726C436B37796252336F314670724F6731724C70766175345A6A5837494B35516643562B2F586C39622B6D4E6259306F63586D4B6E5338356F427456434B335459433452625149634F33716C3041622B32317A6B7230486F45766D39593058373563686B37376453735133384270307A4F3638516A6C71426953545859744D4F705673696354556B4D6935477363486764766C374B524A3564367653747862386C794E4B584272457A485A6D353155716A4E773948496E412B6B6A636B626E394378572B712F4A376B5558577073725064757954386B384242674469677241524C2F384A477741414141424A52553545726B4A6767673D3D222C0D0A202020202020202022666974223A2022636F6E7461696E222C0D0A202020202020202022626F72646572526164697573223A2031300D0A2020202020207D0D0A202020207D2C0D0A202020207B0D0A202020202020226964223A20223238687237766435636A6B303030222C0D0A20202020202022697347726F7570223A2066616C73652C0D0A2020202020202261747472223A207B0D0A20202020202020202278223A203433332C0D0A20202020202020202279223A203136352C0D0A20202020202020202277223A203130312C0D0A20202020202020202268223A203130312C0D0A2020202020202020226F666673657458223A20302C0D0A2020202020202020226F666673657459223A20302C0D0A2020202020202020227A496E646578223A202D310D0A2020202020207D2C0D0A202020202020227374796C6573223A207B0D0A20202020202020202266696C74657253686F77223A2066616C73652C0D0A202020202020202022687565526F74617465223A20302C0D0A2020202020202020227361747572617465223A20312C0D0A202020202020202022636F6E7472617374223A20312C0D0A2020202020202020226272696768746E657373223A20312C0D0A2020202020202020226F706163697479223A20312C0D0A202020202020202022726F746174655A223A20302C0D0A202020202020202022726F7461746558223A20302C0D0A202020202020202022726F7461746559223A20302C0D0A202020202020202022736B657758223A20302C0D0A202020202020202022736B657759223A20302C0D0A202020202020202022626C656E644D6F6465223A20226E6F726D616C222C0D0A202020202020202022616E696D6174696F6E73223A205B5D0D0A2020202020207D2C0D0A2020202020202270726576696577223A207B0D0A2020202020202020226F766572466C6F7748696464656E223A2066616C73650D0A2020202020207D2C0D0A20202020202022737461747573223A207B0D0A2020202020202020226C6F636B223A2066616C73652C0D0A20202020202020202268696465223A2066616C73650D0A2020202020207D2C0D0A2020202020202272657175657374223A207B0D0A202020202020202022726571756573744461746154797065223A20302C0D0A202020202020202022726571756573744874747054797065223A2022676574222C0D0A2020202020202020227265717565737455726C223A2022222C0D0A20202020202020202272657175657374496E74657276616C223A206E756C6C2C0D0A20202020202020202272657175657374496E74657276616C556E6974223A20227365636F6E64222C0D0A20202020202020202272657175657374436F6E74656E7454797065223A20302C0D0A20202020202020202272657175657374506172616D73426F647954797065223A20226E6F6E65222C0D0A2020202020202020227265717565737453514C436F6E74656E74223A207B0D0A202020202020202020202273716C223A202273656C656374202A2066726F6D20207768657265220D0A20202020202020207D2C0D0A20202020202020202272657175657374506172616D73223A207B0D0A2020202020202020202022426F6479223A207B0D0A20202020202020202020202022666F726D2D64617461223A207B7D2C0D0A20202020202020202020202022782D7777772D666F726D2D75726C656E636F646564223A207B7D2C0D0A202020202020202020202020226A736F6E223A2022222C0D0A20202020202020202020202022786D6C223A2022220D0A202020202020202020207D2C0D0A2020202020202020202022486561646572223A207B7D2C0D0A2020202020202020202022506172616D73223A207B7D0D0A20202020202020207D0D0A2020202020207D2C0D0A2020202020202266696C746572223A206E756C6C2C0D0A202020202020226576656E7473223A207B0D0A202020202020202022626173654576656E74223A207B0D0A2020202020202020202022636C69636B223A206E756C6C2C0D0A202020202020202020202264626C636C69636B223A206E756C6C2C0D0A20202020202020202020226D6F757365656E746572223A206E756C6C2C0D0A20202020202020202020226D6F7573656C65617665223A206E756C6C0D0A20202020202020207D2C0D0A202020202020202022616476616E6365644576656E7473223A207B0D0A2020202020202020202022766E6F64654D6F756E746564223A206E756C6C2C0D0A2020202020202020202022766E6F64654265666F72654D6F756E74223A206E756C6C0D0A20202020202020207D2C0D0A202020202020202022696E7465726163744576656E7473223A205B5D0D0A2020202020207D2C0D0A202020202020226B6579223A2022496D616765222C0D0A202020202020226368617274436F6E666967223A207B0D0A2020202020202020226B6579223A2022496D616765222C0D0A20202020202020202263686172744B6579223A202256496D616765222C0D0A202020202020202022636F6E4B6579223A20225643496D616765222C0D0A2020202020202020227469746C65223A20227265642E706E67222C0D0A20202020202020202263617465676F7279223A20224D6F726573222C0D0A20202020202020202263617465676F72794E616D65223A2022E69BB4E5A49A222C0D0A2020202020202020227061636B616765223A2022496E666F726D6174696F6E73222C0D0A20202020202020202263686172744672616D65223A2022737461746963222C0D0A202020202020202022696D616765223A202270686F746F2E706E67220D0A2020202020207D2C0D0A202020202020226F7074696F6E223A207B0D0A20202020202020202264617461736574223A2022646174613A696D6167652F706E673B6261736536342C6956424F5277304B47676F414141414E5355684555674141414755414141426C43415941414142556643335041414141475852465748525462325A30643246795A5142425A4739695A53424A6257466E5A564A6C5957523563636C6C5041414141795A70564668305745314D4F6D4E76625335685A4739695A53353462584141414141414144772F654842685932746C644342695A576470626A30693737752F496942705A443069567A564E4D4531775132566F61556836636D5654656B355559337072597A6C6B496A382B494478344F6E68746347316C6447456765473173626E4D366544306959575276596D5536626E4D366257563059533869494867366547317764477339496B466B62324A6C4946684E5543424462334A6C494455754E69316A4D545179494463354C6A45324D446B794E4377674D6A41784E7938774E7938784D7930774D546F774E6A6F7A4F5341674943416749434167496A346750484A6B5A6A70535245596765473173626E4D36636D526D50534A6F644852774F693876643364334C6E637A4C6D39795A7938784F546B354C7A41794C7A49794C584A6B5A69317A6557353059586774626E4D6A496A346750484A6B5A6A70455A584E6A636D6C7764476C76626942795A47593659574A76645851394969496765473173626E4D366547317750534A6F644852774F693876626E4D7559575276596D5575593239744C336868634338784C6A41764969423462577875637A70346258424E545430696148523063446F764C32357A4C6D466B62324A6C4C6D4E7662533934595841764D5334774C3231744C79496765473173626E4D36633352535A575939496D6830644841364C793975637935685A4739695A53356A62323076654746774C7A45754D43397A56486C775A5339535A584E7664584A6A5A564A6C5A694D694948687463447044636D566864473979564739766244306951575276596D5567554768766447397A6147397749454E44494449774D5467674B466470626D527664334D70496942346258424E5454704A626E4E305957356A5A556C4550534A346258417561576C6B4F6A67324E546C46517A5A474F5467334F44457852554D344D4451324F4459324E6A56444F454E474E6A6842496942346258424E5454704562324E316257567564456C4550534A34625841755A476C6B4F6A67324E546C46517A63774F5467334F44457852554D344D4451324F4459324E6A56444F454E474E6A6842496A3467504868746345314E4F6B526C636D6C325A575247636D397449484E30556D566D4F6D6C7563335268626D4E6C53555139496E687463433570615751364F4459314F5556444E6B51354F4463344D544646517A67774E4459344E6A59324E554D34513059324F45456949484E30556D566D4F6D5276593356745A57353053555139496E68746343356B615751364F4459314F5556444E6B55354F4463344D544646517A67774E4459344E6A59324E554D34513059324F4545694C7A3467504339795A4759365247567A59334A70634852706232342B49447776636D526D4F6C4A45526A3467504339344F6E68746347316C6447452B4944772F654842685932746C6443426C626D5139496E4969507A34333666706641414166566B6C455156523432757864435A7963526248762B6E5A6E4E32527A45424A43674478754350646C447049496B6E424951453676594969454B3977714941674B69736454424F574A33426F516759676741694C6965776943516B354967436545684141524A494641434C6C326B7A336271712B727536743776746D6432657A734C4C7A587633546D363537766D4F3371757635563352396F56614E3665456D77447353364171766D76676C593132436477653239734236473956707833556C596E3862364A7266375971336C2B2F53636F68737A2F2B43655676706748537A6156566976774C71483642754239534452486F52315039476D77542B613732584C313741654B396F304737667571624F773071557161684E422F684E72623234333877414F452B63736A5834376E624E577444646C6A7042637351335764305637457461762F4439527373762B5743385737546577566D4D644C767049424F306B3275745A484255716D3246747737704B63422F39726638727A694752743069306438483637662B72524E6B43362B59524551376A6D577A4C5971774869506169534E533833774652426A4252724D4465466D734F36372F454F5674696E53586178374D596C4F552F4D6A6A3559306B556D76452F452B3050735034443632644533777459647854746C37457546414D30452B756C3476746E734A346A326A4E5A6838686E3343376175374F345779544767546A6E312B4B634937462B4479743848496B79494A726C4D2F693578346D2B52794E784E5A6631524232335832664356516E787462596A753059636B365732514C53484D4A6530635A754D6868617338794C7237632F63623864717834384C55556965333442314B39463347395976692F595472456632356A5970364F6B736368515044413169453766625376774E44566A66452B336E73543467326A7677623743465247632F7250654A766775776E7674524A55724D37695448583479552B654D386B38654A76756C4D4746746D4355577478497A7469764968317457692F6438526B63683066696A694C504B4E66686E64702B616A524A5166522B4C6F4A797A485A522F4E77744552743879766B4D477A4447733948322F434F756B4F3854333553582F422B6F726F75787A726F5238566F7253786F7634784F334655316D4764786E2B634C6664692F623334445332715A785453563338557632646E72454D6A744F41344A736A73637677414B42566D71586554336576524F6A5750484C35637666724555734D6F6D7671756F51507375345436644B70636E6950433349783938304970707A4F6B6E793542516D725858366565362B6F7847737A4779694A683076384F3631645A4E306D4C6A7335707252444D6B6A65495A50506667345459326E77486C7233337862346A71632B5152563169544E7632426C347263592F6F4F62616D312F5843756973653479794251383373315A3876773852394C334979763863634C676E7944546242327972444B6343636F6E6C77654F7A7139484F6E34736355724566557178454E686C75652B7753326634443173386868445759387858566130705537744268332F7A6B455077396B713267506241394C6E55326450366E776D6558304B32697750735836785A5954734836646A59503353352F666A5631426C424647504F6E6E43434263316142474C4E574F4D4D396553625A384134795972486C517357395050486F562B357130457653517A4A49396A4D4F7765364B6D5031617266664563364A423538597A6369436E6435757A567A44313358784C4857453974476E6E6A4B364A2F66335A324737714A4B43504E594C664E505959563932657762376B646C546F3939316434384535394D764B623571455A6F3435504251313577677437617248765241435969702B6A5156746D38697746594F354A52445833384378462F3165506D454C4F36556F574F362B7936466E493045316246784B6B69733338655569517634682B386D554F7754705A5748516C456157366449466E4272672B4766567758647363556F4B504969464F775061624C48374F4A4D6744696459502B396251534948564B47344177556B7849704178512B4663504C6F4976786869423970786B794371566B4C5541596A766E447763572B435872325A54397A477366384336704175737A4F7551494F7346516337476A3839686E59543939646A7546703143674E334B2B7553414E6A73476457327A543250762F47516B776A39544D64593270777250615331734F376E355454787A457434497A576659306734304D486470515250444946725142777758456D48534435303263384F2F2F456C6C676D4A6247554D6731543937736C6D7249696A6E547178335234356B5A7A6E6E5A507A34456F3046456D513539796B4758316378624651573866567052624D5A465870443165686C647568367438342B6E6551713173507271306176433451386A68534B497A5041346648752B4F314E7941326673694E74695256624162464E594C6E4F3277486762495463384A4D4B365A5164574B7763776D436A525A6E584D7578444475375354684B45344B4444435268466771794F4F4F64674870763673756B554C464F35586C52664E655A76365543536A6D6D5A68637047765946394B397A677568483034676135674154574A646A7A666277756C773670467351515967307358533158434E3368627776754C36474F33503654696C48306D3743314E4656415053534762734C3633534C417A697A4341424A45697A5946366B5A685059393157686B56666656594A4D414D776F45754979796F6F5872735864725031335334784C43356563367467666A45582B4E41486D554746385435516C51353861556A666554316937387269463674716F736A696F72417838755A653441686C7773694D4C4A55412B42475272685036524370364B547A324A392F39475A573054666B506B6D514E736E51383371337A506753514D4C366D35527A6B6F7235644D445474716D676B6A327850562F703543686C76315038485A2F7668746466597867426C46507134417746534556685770562F5469634B5153576634566E394C4F7369676F416555574775514C47466E4E6F486B47736D5277535A794C5844556F7A31316341334A7A7A6F4A7A6741443661644E51637536643330394467545934426F4268747941357459534B6A522B4D556A794A61624F576E446F7372352B69446E4F3369756F6348322B707A756867594576494339433942335841515575515331446C4B5A446330626F6175665A6134686B66596A72456378757631467248387639695A6B646247464A3866344B6D5843336B57466D307352582B505A4C696635654846397A5545744D56494632543764424F792F582F6C45694F42385851447869704178386A742B6A33312F31476141567563372F5477432B3336784B397751436B336670557A776977683944674F717059717950646D41574D686A3137797834717458315036724D6E46736B70562F716D76362B35597146567667524935704A2F4C34594A7A7039364E59365733466C546B33595659793134457937565344324C613578327A732B774965624755635376676A66726661586774384C35445037357279466C747068417A6E4F49377933553763707A38543557735251524C5654706935766239694F44745A4D6D61776F61483259474C764B34313641584F4C4A5046795066306966536246764239434564506244434B645A33534F747035352B756E31455442525563544E78764D4F772F37522B497A663452654E37747745764B697A524A43546F65744B4335762F5A7A48792B32334738556F70684334384C746F35426A542F71374E456F59445467307A6C5735574E542B4D66583939722F4B79475875506630586147426A4D324A636957534B42483862672F4141676C6E566A6D53496E44352F497354776D7A41753935427661507761374837546B51443770724B2F454A716B77354472657955306968364738783074325A3867585779344D594C3276724446464977642F42415A316C664878463777312F54647A67673765456E436943424531436D493745474F72377048566B423970665937676A655179503938442B615544754F524751785A6F6E6E4C6E65695376336E54696E504F552B646741314B2B314A6E5443376A38443651395A50433973374F59736F6D7A767A3137507864786D574A387469683934626E6A42474C413143456E4349536B484B424D5A35475139757470767A51324A674A514A3842776D41766B2F796E704A3678334A414171487553727A6530676D45684374666D63362B4754336B646A61686979337A6D4B69784662657467747161596F6979433173656C36677761653531566E784C476E6F66726B484F314D544A396750782B48496C5A33695368455251776A685130494C485537422B443275624F7965784247596459752B58654A4548306B6951684335766F5244334C5278587559386A6B7357553567784C646A7172686C7778524A6E4242426E4B497574614A7053526158302B33637269526B586355497674582B41747135786F5368496E7274776765784857684257747565524F46596979324A724C36716461786351777A3067357358747943386E626634484E356C744C76485A76426B472F7A7462735A576753317865725579676A385373732F39356E5A326F386A32596B66747A78425668337464363455667A4345343945466737697164682B784F6F632B313267314E4E2F53575271577A52414257613174684F6C2F475544652B59457648356568556D4637667145504E362F5A556A6E4E7235587538356A44657553647A504F32355242764863622B68367034796468783241633273586F6266644C54574D487358733854447147574C364A2F542F5368543161455575524D4C3148417A7775706B55504F6F2B374864566467556561744E657854374E62567053787948684B4C6831663366682B467166557342332B473436507947526E6967653859784151365353794A6157536937472F6E3355412F617933766B76697541662F65786A72565470517A6B4C6635446D697A4A7857464B62504D42795566677054484B426255364E7646474C73346B356350354C397651635A30696B49733541484F6F464E4F4D6F347034783479764E39326F4A724466325063624F574A2B346754624E4670357955446256344C4F5274304C41504E6C59367145584771754A454371316A73463635534362485A6877437A5639583733704564784B475969565063704273653255794C7A76696C45487339347A422B684B50373076494B553246414D6E564C504E2B79383469455967386330717558714655364B537869446D4C434A4A4F557532686532415A6C4C6163446B435742384B7849414B74745066794F5162762F42385668634263487754697A542B2F57387454724C424A33353562704D64507965614573742B514F70447478464E364656493663566B2F34486A484B546F316A445678303359793871526C464A4544556468474431386435564F4A66437A465278776C782F43772B2B794A41746C484873716B65315876636D683345325963452B5A645A6462424E4A576B557978526A4C2F536775303279796D556D6B6E5A4A34735A58706E504369784443777334417967584337594C744C36494437714253314A423941317767327535416A687649736F6641696B4754514A46566F6F454242594264494F626B6C6D655A456D7946774F3239785A35486158306F7256614F3461767062672B525376627247616B4E4A7A726C566C634D34476470476E386B463535566A5144673668594A337566785663746C4C7852305041514B7561586642444D476744656E44585865566A47392F756756327867654A4F59723165566F516F3732346F4466385547776F356D33624939452F5A75354A4B5739754970704C52484D326A326A4979677252396F4D30504A6539507634317764554369314963522B5949364B44474D5A374D303336663339664D41596C4D6F4D44767453746550426C53444B5669785A614C786F3263544B497352582F3153486C354433745A376C5A445A635A6B5A69507A7759414C475A6C63716A77445246733148507952412B6671417A493252536745456577614279584A46566C6A47754E59376A4D4C387234707143615531456C474873434C33472B4259686D4B3857644573544F376468764464575A5635784968793974502F756B45673650436474516E35496B6F397447446A6B76715367327139672B524D545A56795252444636425772335A5268723739515831493358456C456F76584D4F4F30474873717972596676354B565A4167686E73414D4D346D612B6F4F41305662477A455A3741386E4D55427A6B7947694D746B736A66344A45715A464F453865706344594A314A58556D6950436C386C32494B68636433596A32306E73586638355A54506D53517A4A592B4C4263334D4C345473346F64782F32314D332B39456152464234376A3239686548426875504B64316C4F674E51654B454E614E466670636A6E6A59456F6773547A66455666303046793473633274694E34617156485A7850734177746A6A32507A4F434F414D6C314C4D726556686C5A665959546B6B3378594C43485567536B626D4630672B412B6D534C46584C564D45306F3446684B6B434355423671737056754F7573315A666C626D4745654941776F474B45715756505854464A6D34787053556D694F55554D6F4570392F5A4E396A5A58632F3077303963782B4E527559663663534D63446E324B6E4454626B2F443944774442394C763075305A346C5968466D4F554B7A324F4B4D665738662B4254415144645670727A4377532F5345583872446A7575335955747359477045363755453956737A75334E6546637442325349657563726C6164687A617A58617164676A596E4E35553379624B75465771746741525A41694152726C6C30517943704C4832426A5438497945456F70515279744B30305439552F2B334B62452B457731537956436A4764574D363476537A2B4F714F6B433568654E316859534C716642732F7066422F3646656731416566764D5179354764476B54446459577355784147473573637748374D6D52494A42477337355A5367414D334B3177732F44366B6847752B4B734849516E374B47713671454D77434F686C6F5A71694F574543776855467856775332726C59697463697A4446686943353963753843594D4D37454D6A4244574A76383753322B436865624744366736437369676C6969554C357356635A663947343254564A353073634D634F4A7764363145506A41344A334F74644437793167424275473479464633652B46565344326C4450394A746C6D734143766E33335637574352684646616C54686B534731316F694369575A3963306779705343486A30524D596E386A686A34674E5161615A593577746B2B486F542B58784A39536E5253674155574F414164326471564C553264754F6171614841664A714A63564E49554D7A72466141486E4B776776322F6B5875696F6C486B43725739476A494E2B35462F72444A39585A59783145794C792F6F6950556D67566535586376737A2B6D6C4C57565A30556A306B704561537A707353626C5A343132386C314D5854713252444C396662462F5651434C75434157333073755648564F70335A4767592F3168334554633075352F42737144375159733159566369634B364A514E485147537656684A6B55663663765A5553484E3956316B54434953433133614E6968632F614244414B6D63616759644D5844444C4F5A5165567446685143566133756A316D456B5A59486746656F5434736B525A575478763151354D7A39654E57684B462F4A47644761357659645A72593541793738396B374F7339465743496F45417163334272564862456F39656451326D6C4563526749785054336750595441594A7859675658346B3178354E67435638504D496D333438392F6C58444E443879507230305965766B4E455955435849735A6D46776A76487064434358475558704E423636365259667472486164752B446750655A6949676D62424E707A68517255695058556B777A445152444D495176614555504737797459647544504E306F6B536E2F3244796D63764A4B49386C68707A30316E35364A5179594A333970784953342F33396D766D49666A654F5955434962614F6F2F566274467A437A574A5268727455486E4A63635A327944332B2B56494A4F6F52584A646C587937454C4F492B5550302F61436C4F7531496738704E6A72675066782F6C61596B4D754644794977532F68686E4C39464F687A436772356B776D6A457248596B6638456978436A437A4749754C494C504B46646F306143684C6D5749354A5A636D5445537071305155796B4F617948684E48555033646F336A4D2F6C4563664755353147556A504E794B424A4A5A6F6832776837386F664132694C6948382B544277696A4D4B6372374778434A493743415937537453416A76563154543238327235785A7045766669654D70586B54436B5335616E385254642B4F64717468676F65452F5252687431664B64645038575570334355786B6D553065674E6D5657586970756A4956306B41394536526D39316166434A6439376C53594C634D573945674E6A7779467A765165574B4F69716635732B2F466E6E2B42725A776636724D7A6869374D37723835354C583054634F7538787168674E705557675249754E70465736426E75397536534C3649704546426336462F6B4D725152424364356578314347396B6D354B58564C6556776541704E55725939684565314C4A3965424F636341637330786131785865715334746E38547661624F306859566936514136324E52443553457A7363694B31685A6E624B7A547A57554345325378436E634A62323871446C49463967657A524F6E4452426A4F4C455479376750574B306D2B2B4E4B4D3839427158543152613239394B6545512B6D694A7568414866576F68747443422B5276726933425869534376324A6E68466265373748612B303473386E38515462536F334376584A4A6B7A494F6367312F3542454959567A457573557576454C68616A6F54436B6A372B2F43396B5335374D45486F494C344F66316F57685837646A696A74596F33526B683758664B32754B384B6A516935345545594E716949315855304B2F6466466173466C4E6C696C2B4C366F356B5A746B59437655494A655A596F2F314468357332462B53374E5A48513446766B347939473833554A446E426D632B4146577168622F2F7A34533870516F43304C4A62516F393141552B335467347A567470316F6D3049654B59793771786E4D387A6E2F6156664B75453634694972794D524B4B3372626F5A634569564555396265584A5350644A6B7975346F4F3844434C5846696174476849376A534C5163476E6A73703169596C4E674941766F7A6C3867456D4B6343754A62534A476D6941426E416A686C2B516C6667306B6E7775384F6C694836624D63352B6C326F677857506D782B64516C47775237737863644B7679314C30645032727252636A44626B704E566272374848767972776E49485868786A2F676C4C364C364345397A6A667761346C59566564526E4D61746B62676C65734E6332682F6A7249346F2B62375339307451734E694D5973586C78564449372F442B766852396B2B4B4B62315A66782B65756839512B336A71796576473964496A734B552F347A416B34326A39424B305670307A3865634666374C6A414A6E496E623248666E51422B705A57642B5A7058646D6D774B3741536E43484A7A317A57432F6A74503254616B4676626D49446A436C4468776C6567564761336B737879554C66364B53524A70724A6C2B6F305372694F506E3759567559496866726F32324642472B696B3574727257466C426D524A6A6C6A58762F554763596E39746A35797467642B774746537A5030744875646C684F7871472B557776394561702F4863517A7052586D4E766130664D75596D544D4A657658764C72396B466B7555473451494330327359763055714F32486E3275794F4B55356779435556455A724A6D6A423559374F2B684937535042796853556F37362F334B336435536257435948634A385075762F424C72654C74655565342B6F6355654C5A616254463856573254525A676B7042315631743037354152506B4C5A596D78525A4B355470427857766E425547554B72786B6D30545948636F73315735685A542F446948572F2B5A6E4E31324C78684E59564C50584C726C57307244735267343773436641413175484B6261446A393248524B6C78584435437851594A59796831734B564C2B517375744C32627261596F71625774444168357055535A7452485368796E2B7A555A3734736F55792F4C3746656F5549737A37473770763276627174414F68784C42342B464E693357556E78586F6D767865506A38664F4A764673563250684C4A6E336E775378306E4B73724A3047474D556737694C6E6C696E5939784D4C69692F79534D786E73765149355A563148524E6D4D4B5271444D76544B506E703346693066653674702F35396F627A494658754D74654E637A343758764C6D3653502F4A4E4F4D4E50773350766A6D4D7A34616B5172483930756B6A3270567434623149756767786C50554B6644374D59616932534B446D567651587535716D793578566337596D766C5246424B434A472B3150526537513249444865644151524F77755A464F4F306651474B6B786439676C33694854753339346F5562516E4F436B49476B747577396E616271386B3139727A2F537278376B742B497265774A336C7577325474556D57556A4A367253337636774F337637523066393738634561552B6E57474A3868546D44784258745450337A634D32684841776E3939656A4354735239637A71614C65696B4968353234504171656E476E774348364741376B45526B357366377759684D2F664C706C4F32555761564652733843487469474575394263416F744A4470446D57556E49396F3775543269374D656747535872586553774D4E4C53387934636933587A594944457A4D6142586F69335067452F6D397A435570577841513559483852656C36444D5474435A537535426732426E743075527338446B396C4B684951446C67566C6F444759795345735A395965717A727A35775254694E486F2F7745767341786263564C573965457056426F75536C2B2F3233473061667432484C6A56496834744B6A51576C7634696A4F56325A784477564A45484547646C3264322B2F793051626674366E51564D5136446D35716252376B74394E6D6C3069696B376D756F6F6755396B56364D57454F5961523836494C36685461366D4D72466237664B774C42533976594D79624963517936766459303472726A6D6B62382F4D4E3045424D32595A4E6F4E79456A70753746723837456D64344B675A6565794C43793041764B6D37394A4B734D6D3473477A57464673774B58494C627436737872794F4C534C556951484D564A2B4B784F45784D306870524B45432B5534304F5A7230315434486D505648693555544F535266746A6C4844333866745049362F39694A32687537766B455647375A4E4F4C36425144427268342B656447677836695034473644466D6476665373594A6E2B586B504137797679596A567A7A436B3447657534537468624A72477847636668324A346C426A7A714E66624E4237417063714D796D613530717776716973415739444F644B356464476C6878356C4D572B4C707869304F74746E434D33397A7A7954756B4E6F6C64673377496C333263694D6F3959334E79502F39464D657843502B3773346F317467716B4F2F51793445637565437A6137664767382F713057436E382F53564B71544F787763776E3648665455752B534C30556F56466E5341456A64644238703071724A6550564555756B53673552743838366B61566D334D753752784B472B7466327A7A71706F666B657872434E4963346B45755A6D48416667336C4B52572B4267486238782B797445384A3159317270556F685379794B5A7547456B393733445575454F7452457677454843584D4F7731436D716F396541644E4662495168692B437A5763357047335451664F4E6D755A76625A684151736244376735745647665046674D5342704667656C4A4F75466E3653387A35455A6C544A564B487A466748326669677239555A6E52416D4C35556C75375334527247454C3645694F7A4672326B7454672F5A56473172704F45694E384B51653832506F6F6871766E6C4A4D70686A496965334854417A522F61767A34332B2B787A6D543150614472676C735A4D6938774E7142742B326D4C765A6D7876453844454F6D2F7568386E36596B47527438424558317372434F75526E4C3364324C5139574B564A484D483237764E5943524E6E624E67497A716869456669696661454E39303969776B7774534F77754945722F35744733724A617630636A4E4F704D49516D39566D494C664C616578715A6C31566F4C486261454F395A41372B4533572B6D446A5576776B45624A4A754B68554D30775034593546497230315746566E513868744C5254614873675152705A39764A424E56494A31587534712B786B4A38446E6D436E725430424B68365073777756754B4A5571704E7552716B61524B42446D667863446B357447334C7166624955466F4A703664537A2F424237485370776B55324469693631495A44736E4F6146726668423062514D6B6C4669433247303738433237413778697568546E4E676D73763967334969466E47316737743044535A765850696E4D73326C69416B727243365A5852496950735A53726B582B336351703635544A62377474575444336734434575526F4275574F6152373969785643476441503634743944554879466F53763377686A4C326F704D67424F4B3967572B394273684464553549666F59414772334F4E4C596D52702F7A34737467695A704A7A6F3851775845576538326355652F366C4967434D465957356E2F2B5A36374F2F58325A7557626E324E4D532B617A7330386732624442396865625356497A63777A4B486C67552B7962616E5549396C464B35754C6D736239736C53615644754B4B6553454173713450784B374A32484D7366724E35646E4B33794D47332B71696C715476663837677254384A7A6B43445069333443494A646B6844334B593330316A356B57656F68753845382F6E36474949357248546D756C72334D7A54796646536F76335438532B7073414C424D6A336255476D484E6C306F6851726F466652486F534E4D597934377144413667735A5A4D466E7A6A69396E455370597576746D536A6F5264764F30345A3170547575586665655236336B337649314D302F626A32332B7A7A655076613356634E4A7066646B6875784C376D756761484442796E687177335268344870435249656B542F4D68676D4976486330566D4378466B652B7A626E7448732F756D376E4C4D5665316557566835386570666B6A775851534C2F6A4F32786C625852615458586E4C775568676C4A5A6A51535A4A74663630564C6B767945426E684B6936576F546D39454C4372754668624B394132436D476475304F75445650417576367776354D7054665A58646A6F7079464235524A584A2F4A665465794564456C755536646352364C556F444B62446B2B5166525257757978334739486B66592B666B7631374C494E422F676D435231784F4F4E594A42336532366937643932727A7A7530364F67502B586F452B553952345375554A7248314A7556315479693137416A576370736D7A542B785869724F6F5154462B39677037664A53446B374A597547727546386D725433453473794B6745505A72316851415549514B747967664553527549413838357646392F667737353866546154576A774B6E36417A32703157763134672B5167436142454573353067516B4637423137644D524F675433667351567543322F49462F6F34794C55437A7078417A4658785A52552B36796968486C46654B5A74472B69334E4A7141762B42397256495135684931684D6D71326F5541347257514F6C5677742F57563455763074794C7A5864626C724B65734F56352F7231794A6349747246764B587271444B4A54394A364E32597868362B422F52523747614F614A4E655646315172454F59332B6754517A79356B57495556734752344F2B687039702F2F345A6650354963513574414831675A4B45752F6267514A53365567504131305237434475456A6F6F385536477569765376374979314378672F71344F2B53416158314B747A5838575565374E3246794B5856564B6549637835584A72625337656E386C53444B42796F4D2F477A4E4D7677644D634D7065325232524A526C6F6B30704F6C38516255494F62684C745864695A3238514471536C79764B30345A786B3767625938794E43494C4D764C70546436476C48694D702B644C3175325A7A3030542F52744B3577334B6F52457435664475354C2F4E6876457370734837424D395679346C666C3056762F436E724B5736422F77476E544537767933305359364A4A4F506C3548544B6F46514E697A64705841786D76574E332B487331456D6D555A4C685A542F5257792B5852647A55333137467859416C344D49736B69387A53636A586163755147635231353238384B35567A4C784676626F2F363644442F6C3377494D414F48624C4249304A6465344141414141456C46546B5375516D4343222C0D0A202020202020202022666974223A2022636F6E7461696E222C0D0A202020202020202022626F72646572526164697573223A2031300D0A2020202020207D0D0A202020207D2C0D0A202020207B0D0A202020202020226964223A20223438376B796873306B6665303030222C0D0A20202020202022697347726F7570223A2066616C73652C0D0A2020202020202261747472223A207B0D0A20202020202020202278223A20312E352C0D0A20202020202020202279223A2038332C0D0A20202020202020202277223A203536302C0D0A20202020202020202268223A203331302C0D0A2020202020202020226F666673657458223A20302C0D0A2020202020202020226F666673657459223A20302C0D0A2020202020202020227A496E646578223A202D310D0A2020202020207D2C0D0A202020202020227374796C6573223A207B0D0A20202020202020202266696C74657253686F77223A2066616C73652C0D0A202020202020202022687565526F74617465223A20302C0D0A2020202020202020227361747572617465223A20312C0D0A202020202020202022636F6E7472617374223A20312C0D0A2020202020202020226272696768746E657373223A20312C0D0A2020202020202020226F706163697479223A20312C0D0A202020202020202022726F746174655A223A20302C0D0A202020202020202022726F7461746558223A20302C0D0A202020202020202022726F7461746559223A20302C0D0A202020202020202022736B657758223A20302C0D0A202020202020202022736B657759223A20302C0D0A202020202020202022626C656E644D6F6465223A20226E6F726D616C222C0D0A202020202020202022616E696D6174696F6E73223A205B5D0D0A2020202020207D2C0D0A2020202020202270726576696577223A207B0D0A2020202020202020226F766572466C6F7748696464656E223A2066616C73650D0A2020202020207D2C0D0A20202020202022737461747573223A207B0D0A2020202020202020226C6F636B223A2066616C73652C0D0A20202020202020202268696465223A2066616C73650D0A2020202020207D2C0D0A2020202020202272657175657374223A207B0D0A202020202020202022726571756573744461746154797065223A20302C0D0A202020202020202022726571756573744874747054797065223A2022676574222C0D0A2020202020202020227265717565737455726C223A2022222C0D0A20202020202020202272657175657374496E74657276616C223A206E756C6C2C0D0A20202020202020202272657175657374496E74657276616C556E6974223A20227365636F6E64222C0D0A20202020202020202272657175657374436F6E74656E7454797065223A20302C0D0A20202020202020202272657175657374506172616D73426F647954797065223A20226E6F6E65222C0D0A2020202020202020227265717565737453514C436F6E74656E74223A207B0D0A202020202020202020202273716C223A202273656C656374202A2066726F6D20207768657265220D0A20202020202020207D2C0D0A20202020202020202272657175657374506172616D73223A207B0D0A2020202020202020202022426F6479223A207B0D0A20202020202020202020202022666F726D2D64617461223A207B7D2C0D0A20202020202020202020202022782D7777772D666F726D2D75726C656E636F646564223A207B7D2C0D0A202020202020202020202020226A736F6E223A2022222C0D0A20202020202020202020202022786D6C223A2022220D0A202020202020202020207D2C0D0A2020202020202020202022486561646572223A207B7D2C0D0A2020202020202020202022506172616D73223A207B7D0D0A20202020202020207D0D0A2020202020207D2C0D0A2020202020202266696C746572223A206E756C6C2C0D0A202020202020226576656E7473223A207B0D0A202020202020202022626173654576656E74223A207B0D0A2020202020202020202022636C69636B223A206E756C6C2C0D0A202020202020202020202264626C636C69636B223A206E756C6C2C0D0A20202020202020202020226D6F757365656E746572223A206E756C6C2C0D0A20202020202020202020226D6F7573656C65617665223A206E756C6C0D0A20202020202020207D2C0D0A202020202020202022616476616E6365644576656E7473223A207B0D0A2020202020202020202022766E6F64654D6F756E746564223A206E756C6C2C0D0A2020202020202020202022766E6F64654265666F72654D6F756E74223A206E756C6C0D0A20202020202020207D2C0D0A202020202020202022696E7465726163744576656E7473223A205B5D0D0A2020202020207D2C0D0A202020202020226B6579223A2022426F726465723032222C0D0A202020202020226368617274436F6E666967223A207B0D0A2020202020202020226B6579223A2022426F726465723032222C0D0A20202020202020202263686172744B6579223A202256426F726465723032222C0D0A202020202020202022636F6E4B6579223A20225643426F726465723032222C0D0A2020202020202020227469746C65223A2022E8BEB9E6A1862D3032222C0D0A20202020202020202263617465676F7279223A2022426F7264657273222C0D0A20202020202020202263617465676F72794E616D65223A2022E8BEB9E6A186222C0D0A2020202020202020227061636B616765223A20224465636F7261746573222C0D0A20202020202020202263686172744672616D65223A2022737461746963222C0D0A202020202020202022696D616765223A2022626F7264657230322E706E67220D0A2020202020207D2C0D0A202020202020226F7074696F6E223A207B0D0A202020202020202022636F6C6F7273223A205B0D0A202020202020202020202223363538366563222C0D0A202020202020202020202223326366376665220D0A20202020202020205D2C0D0A2020202020202020226261636B67726F756E64436F6C6F72223A2022233030303030303030220D0A2020202020207D0D0A202020207D2C0D0A202020207B0D0A202020202020226964223A20223274666567686E6C656430303030222C0D0A20202020202022697347726F7570223A2066616C73652C0D0A2020202020202261747472223A207B0D0A20202020202020202278223A2034302C0D0A20202020202020202279223A203238302C0D0A20202020202020202277223A203130312C0D0A20202020202020202268223A2034332C0D0A2020202020202020226F666673657458223A20302C0D0A2020202020202020226F666673657459223A20302C0D0A2020202020202020227A496E646578223A202D310D0A2020202020207D2C0D0A202020202020227374796C6573223A207B0D0A20202020202020202266696C74657253686F77223A2066616C73652C0D0A202020202020202022687565526F74617465223A20302C0D0A2020202020202020227361747572617465223A20312C0D0A202020202020202022636F6E7472617374223A20312C0D0A2020202020202020226272696768746E657373223A20312C0D0A2020202020202020226F706163697479223A20312C0D0A202020202020202022726F746174655A223A20302C0D0A202020202020202022726F7461746558223A20302C0D0A202020202020202022726F7461746559223A20302C0D0A202020202020202022736B657758223A20302C0D0A202020202020202022736B657759223A20302C0D0A202020202020202022626C656E644D6F6465223A20226E6F726D616C222C0D0A202020202020202022616E696D6174696F6E73223A205B5D0D0A2020202020207D2C0D0A2020202020202270726576696577223A207B0D0A2020202020202020226F766572466C6F7748696464656E223A2066616C73650D0A2020202020207D2C0D0A20202020202022737461747573223A207B0D0A2020202020202020226C6F636B223A2066616C73652C0D0A20202020202020202268696465223A2066616C73650D0A2020202020207D2C0D0A2020202020202272657175657374223A207B0D0A202020202020202022726571756573744461746154797065223A20302C0D0A202020202020202022726571756573744874747054797065223A2022676574222C0D0A2020202020202020227265717565737455726C223A2022222C0D0A20202020202020202272657175657374496E74657276616C223A206E756C6C2C0D0A20202020202020202272657175657374496E74657276616C556E6974223A20227365636F6E64222C0D0A20202020202020202272657175657374436F6E74656E7454797065223A20302C0D0A20202020202020202272657175657374506172616D73426F647954797065223A20226E6F6E65222C0D0A2020202020202020227265717565737453514C436F6E74656E74223A207B0D0A202020202020202020202273716C223A202273656C656374202A2066726F6D20207768657265220D0A20202020202020207D2C0D0A20202020202020202272657175657374506172616D73223A207B0D0A2020202020202020202022426F6479223A207B0D0A20202020202020202020202022666F726D2D64617461223A207B7D2C0D0A20202020202020202020202022782D7777772D666F726D2D75726C656E636F646564223A207B7D2C0D0A202020202020202020202020226A736F6E223A2022222C0D0A20202020202020202020202022786D6C223A2022220D0A202020202020202020207D2C0D0A2020202020202020202022486561646572223A207B7D2C0D0A2020202020202020202022506172616D73223A207B7D0D0A20202020202020207D0D0A2020202020207D2C0D0A2020202020202266696C746572223A206E756C6C2C0D0A202020202020226576656E7473223A207B0D0A202020202020202022626173654576656E74223A207B0D0A2020202020202020202022636C69636B223A206E756C6C2C0D0A202020202020202020202264626C636C69636B223A206E756C6C2C0D0A20202020202020202020226D6F757365656E746572223A206E756C6C2C0D0A20202020202020202020226D6F7573656C65617665223A206E756C6C0D0A20202020202020207D2C0D0A202020202020202022616476616E6365644576656E7473223A207B0D0A2020202020202020202022766E6F64654D6F756E746564223A206E756C6C2C0D0A2020202020202020202022766E6F64654265666F72654D6F756E74223A206E756C6C0D0A20202020202020207D2C0D0A202020202020202022696E7465726163744576656E7473223A205B5D0D0A2020202020207D2C0D0A202020202020226B6579223A2022546578744772616469656E74222C0D0A202020202020226368617274436F6E666967223A207B0D0A2020202020202020226B6579223A2022546578744772616469656E74222C0D0A20202020202020202263686172744B6579223A202256546578744772616469656E74222C0D0A202020202020202022636F6E4B6579223A20225643546578744772616469656E74222C0D0A2020202020202020227469746C65223A2022E6B890E58F98E69687E5AD97222C0D0A20202020202020202263617465676F7279223A20225465787473222C0D0A20202020202020202263617465676F72794E616D65223A2022E69687E69CAC222C0D0A2020202020202020227061636B616765223A2022496E666F726D6174696F6E73222C0D0A20202020202020202263686172744672616D65223A20226E616976655549222C0D0A202020202020202022696D616765223A2022746578745F6772616469656E742E706E67220D0A2020202020207D2C0D0A202020202020226F7074696F6E223A207B0D0A20202020202020202264617461736574223A2022E680BBE8AEBEE5A487E695B0222C0D0A20202020202020202273697A65223A2032302C0D0A2020202020202020226772616469656E74223A207B0D0A202020202020202020202266726F6D223A2022233030653465374646222C0D0A2020202020202020202022746F223A2022233030653465374646222C0D0A2020202020202020202022646567223A2034350D0A20202020202020207D0D0A2020202020207D0D0A202020207D2C0D0A202020207B0D0A202020202020226964223A20223830677A646661726366303030222C0D0A20202020202022697347726F7570223A2066616C73652C0D0A2020202020202261747472223A207B0D0A20202020202020202278223A203137312C0D0A20202020202020202279223A203237392C0D0A20202020202020202277223A203130312C0D0A20202020202020202268223A2034332C0D0A2020202020202020226F666673657458223A20302C0D0A2020202020202020226F666673657459223A20302C0D0A2020202020202020227A496E646578223A202D310D0A2020202020207D2C0D0A202020202020227374796C6573223A207B0D0A20202020202020202266696C74657253686F77223A2066616C73652C0D0A202020202020202022687565526F74617465223A20302C0D0A2020202020202020227361747572617465223A20312C0D0A202020202020202022636F6E7472617374223A20312C0D0A2020202020202020226272696768746E657373223A20312C0D0A2020202020202020226F706163697479223A20312C0D0A202020202020202022726F746174655A223A20302C0D0A202020202020202022726F7461746558223A20302C0D0A202020202020202022726F7461746559223A20302C0D0A202020202020202022736B657758223A20302C0D0A202020202020202022736B657759223A20302C0D0A202020202020202022626C656E644D6F6465223A20226E6F726D616C222C0D0A202020202020202022616E696D6174696F6E73223A205B5D0D0A2020202020207D2C0D0A2020202020202270726576696577223A207B0D0A2020202020202020226F766572466C6F7748696464656E223A2066616C73650D0A2020202020207D2C0D0A20202020202022737461747573223A207B0D0A2020202020202020226C6F636B223A2066616C73652C0D0A20202020202020202268696465223A2066616C73650D0A2020202020207D2C0D0A2020202020202272657175657374223A207B0D0A202020202020202022726571756573744461746154797065223A20302C0D0A202020202020202022726571756573744874747054797065223A2022676574222C0D0A2020202020202020227265717565737455726C223A2022222C0D0A20202020202020202272657175657374496E74657276616C223A206E756C6C2C0D0A20202020202020202272657175657374496E74657276616C556E6974223A20227365636F6E64222C0D0A20202020202020202272657175657374436F6E74656E7454797065223A20302C0D0A20202020202020202272657175657374506172616D73426F647954797065223A20226E6F6E65222C0D0A2020202020202020227265717565737453514C436F6E74656E74223A207B0D0A202020202020202020202273716C223A202273656C656374202A2066726F6D20207768657265220D0A20202020202020207D2C0D0A20202020202020202272657175657374506172616D73223A207B0D0A2020202020202020202022426F6479223A207B0D0A20202020202020202020202022666F726D2D64617461223A207B7D2C0D0A20202020202020202020202022782D7777772D666F726D2D75726C656E636F646564223A207B7D2C0D0A202020202020202020202020226A736F6E223A2022222C0D0A20202020202020202020202022786D6C223A2022220D0A202020202020202020207D2C0D0A2020202020202020202022486561646572223A207B7D2C0D0A2020202020202020202022506172616D73223A207B7D0D0A20202020202020207D0D0A2020202020207D2C0D0A2020202020202266696C746572223A206E756C6C2C0D0A202020202020226576656E7473223A207B0D0A202020202020202022626173654576656E74223A207B0D0A2020202020202020202022636C69636B223A206E756C6C2C0D0A202020202020202020202264626C636C69636B223A206E756C6C2C0D0A20202020202020202020226D6F757365656E746572223A206E756C6C2C0D0A20202020202020202020226D6F7573656C65617665223A206E756C6C0D0A20202020202020207D2C0D0A202020202020202022616476616E6365644576656E7473223A207B0D0A2020202020202020202022766E6F64654D6F756E746564223A206E756C6C2C0D0A2020202020202020202022766E6F64654265666F72654D6F756E74223A206E756C6C0D0A20202020202020207D2C0D0A202020202020202022696E7465726163744576656E7473223A205B5D0D0A2020202020207D2C0D0A202020202020226B6579223A2022546578744772616469656E74222C0D0A202020202020226368617274436F6E666967223A207B0D0A2020202020202020226B6579223A2022546578744772616469656E74222C0D0A20202020202020202263686172744B6579223A202256546578744772616469656E74222C0D0A202020202020202022636F6E4B6579223A20225643546578744772616469656E74222C0D0A2020202020202020227469746C65223A2022E6B890E58F98E69687E5AD97222C0D0A20202020202020202263617465676F7279223A20225465787473222C0D0A20202020202020202263617465676F72794E616D65223A2022E69687E69CAC222C0D0A2020202020202020227061636B616765223A2022496E666F726D6174696F6E73222C0D0A20202020202020202263686172744672616D65223A20226E616976655549222C0D0A202020202020202022696D616765223A2022746578745F6772616469656E742E706E67220D0A2020202020207D2C0D0A202020202020226F7074696F6E223A207B0D0A20202020202020202264617461736574223A2022E59CA8E7BABFE695B0222C0D0A20202020202020202273697A65223A2032302C0D0A2020202020202020226772616469656E74223A207B0D0A202020202020202020202266726F6D223A2022233336666261614646222C0D0A2020202020202020202022746F223A2022233336666261614646222C0D0A2020202020202020202022646567223A2034350D0A20202020202020207D0D0A2020202020207D0D0A202020207D2C0D0A202020207B0D0A202020202020226964223A20223336786833713268783773303030222C0D0A20202020202022697347726F7570223A2066616C73652C0D0A2020202020202261747472223A207B0D0A20202020202020202278223A203330322C0D0A20202020202020202279223A203237382C0D0A20202020202020202277223A203130312C0D0A20202020202020202268223A2034332C0D0A2020202020202020226F666673657458223A20302C0D0A2020202020202020226F666673657459223A20302C0D0A2020202020202020227A496E646578223A202D310D0A2020202020207D2C0D0A202020202020227374796C6573223A207B0D0A20202020202020202266696C74657253686F77223A2066616C73652C0D0A202020202020202022687565526F74617465223A20302C0D0A2020202020202020227361747572617465223A20312C0D0A202020202020202022636F6E7472617374223A20312C0D0A2020202020202020226272696768746E657373223A20312C0D0A2020202020202020226F706163697479223A20312C0D0A202020202020202022726F746174655A223A20302C0D0A202020202020202022726F7461746558223A20302C0D0A202020202020202022726F7461746559223A20302C0D0A202020202020202022736B657758223A20302C0D0A202020202020202022736B657759223A20302C0D0A202020202020202022626C656E644D6F6465223A20226E6F726D616C222C0D0A202020202020202022616E696D6174696F6E73223A205B5D0D0A2020202020207D2C0D0A2020202020202270726576696577223A207B0D0A2020202020202020226F766572466C6F7748696464656E223A2066616C73650D0A2020202020207D2C0D0A20202020202022737461747573223A207B0D0A2020202020202020226C6F636B223A2066616C73652C0D0A20202020202020202268696465223A2066616C73650D0A2020202020207D2C0D0A2020202020202272657175657374223A207B0D0A202020202020202022726571756573744461746154797065223A20302C0D0A202020202020202022726571756573744874747054797065223A2022676574222C0D0A2020202020202020227265717565737455726C223A2022222C0D0A20202020202020202272657175657374496E74657276616C223A206E756C6C2C0D0A20202020202020202272657175657374496E74657276616C556E6974223A20227365636F6E64222C0D0A20202020202020202272657175657374436F6E74656E7454797065223A20302C0D0A20202020202020202272657175657374506172616D73426F647954797065223A20226E6F6E65222C0D0A2020202020202020227265717565737453514C436F6E74656E74223A207B0D0A202020202020202020202273716C223A202273656C656374202A2066726F6D20207768657265220D0A20202020202020207D2C0D0A20202020202020202272657175657374506172616D73223A207B0D0A2020202020202020202022426F6479223A207B0D0A20202020202020202020202022666F726D2D64617461223A207B7D2C0D0A20202020202020202020202022782D7777772D666F726D2D75726C656E636F646564223A207B7D2C0D0A202020202020202020202020226A736F6E223A2022222C0D0A20202020202020202020202022786D6C223A2022220D0A202020202020202020207D2C0D0A2020202020202020202022486561646572223A207B7D2C0D0A2020202020202020202022506172616D73223A207B7D0D0A20202020202020207D0D0A2020202020207D2C0D0A2020202020202266696C746572223A206E756C6C2C0D0A202020202020226576656E7473223A207B0D0A202020202020202022626173654576656E74223A207B0D0A2020202020202020202022636C69636B223A206E756C6C2C0D0A202020202020202020202264626C636C69636B223A206E756C6C2C0D0A20202020202020202020226D6F757365656E746572223A206E756C6C2C0D0A20202020202020202020226D6F7573656C65617665223A206E756C6C0D0A20202020202020207D2C0D0A202020202020202022616476616E6365644576656E7473223A207B0D0A2020202020202020202022766E6F64654D6F756E746564223A206E756C6C2C0D0A2020202020202020202022766E6F64654265666F72654D6F756E74223A206E756C6C0D0A20202020202020207D2C0D0A202020202020202022696E7465726163744576656E7473223A205B5D0D0A2020202020207D2C0D0A202020202020226B6579223A2022546578744772616469656E74222C0D0A202020202020226368617274436F6E666967223A207B0D0A2020202020202020226B6579223A2022546578744772616469656E74222C0D0A20202020202020202263686172744B6579223A202256546578744772616469656E74222C0D0A202020202020202022636F6E4B6579223A20225643546578744772616469656E74222C0D0A2020202020202020227469746C65223A2022E6B890E58F98E69687E5AD97222C0D0A20202020202020202263617465676F7279223A20225465787473222C0D0A20202020202020202263617465676F72794E616D65223A2022E69687E69CAC222C0D0A2020202020202020227061636B616765223A2022496E666F726D6174696F6E73222C0D0A20202020202020202263686172744672616D65223A20226E616976655549222C0D0A202020202020202022696D616765223A2022746578745F6772616469656E742E706E67220D0A2020202020207D2C0D0A202020202020226F7074696F6E223A207B0D0A20202020202020202264617461736574223A2022E7A6BBE7BABFE695B0222C0D0A20202020202020202273697A65223A2032302C0D0A2020202020202020226772616469656E74223A207B0D0A202020202020202020202266726F6D223A2022236636613231384646222C0D0A2020202020202020202022746F223A2022236636613231386666222C0D0A2020202020202020202022646567223A2034350D0A20202020202020207D0D0A2020202020207D0D0A202020207D2C0D0A202020207B0D0A202020202020226964223A20223275663835777465696669303030222C0D0A20202020202022697347726F7570223A2066616C73652C0D0A2020202020202261747472223A207B0D0A20202020202020202278223A203433332C0D0A20202020202020202279223A203238302C0D0A20202020202020202277223A203130312C0D0A20202020202020202268223A2034332C0D0A2020202020202020226F666673657458223A20302C0D0A2020202020202020226F666673657459223A20302C0D0A2020202020202020227A496E646578223A202D310D0A2020202020207D2C0D0A202020202020227374796C6573223A207B0D0A20202020202020202266696C74657253686F77223A2066616C73652C0D0A202020202020202022687565526F74617465223A20302C0D0A2020202020202020227361747572617465223A20312C0D0A202020202020202022636F6E7472617374223A20312C0D0A2020202020202020226272696768746E657373223A20312C0D0A2020202020202020226F706163697479223A20312C0D0A202020202020202022726F746174655A223A20302C0D0A202020202020202022726F7461746558223A20302C0D0A202020202020202022726F7461746559223A20302C0D0A202020202020202022736B657758223A20302C0D0A202020202020202022736B657759223A20302C0D0A202020202020202022626C656E644D6F6465223A20226E6F726D616C222C0D0A202020202020202022616E696D6174696F6E73223A205B5D0D0A2020202020207D2C0D0A2020202020202270726576696577223A207B0D0A2020202020202020226F766572466C6F7748696464656E223A2066616C73650D0A2020202020207D2C0D0A20202020202022737461747573223A207B0D0A2020202020202020226C6F636B223A2066616C73652C0D0A20202020202020202268696465223A2066616C73650D0A2020202020207D2C0D0A2020202020202272657175657374223A207B0D0A202020202020202022726571756573744461746154797065223A20302C0D0A202020202020202022726571756573744874747054797065223A2022676574222C0D0A2020202020202020227265717565737455726C223A2022222C0D0A20202020202020202272657175657374496E74657276616C223A206E756C6C2C0D0A20202020202020202272657175657374496E74657276616C556E6974223A20227365636F6E64222C0D0A20202020202020202272657175657374436F6E74656E7454797065223A20302C0D0A20202020202020202272657175657374506172616D73426F647954797065223A20226E6F6E65222C0D0A2020202020202020227265717565737453514C436F6E74656E74223A207B0D0A202020202020202020202273716C223A202273656C656374202A2066726F6D20207768657265220D0A20202020202020207D2C0D0A20202020202020202272657175657374506172616D73223A207B0D0A2020202020202020202022426F6479223A207B0D0A20202020202020202020202022666F726D2D64617461223A207B7D2C0D0A20202020202020202020202022782D7777772D666F726D2D75726C656E636F646564223A207B7D2C0D0A202020202020202020202020226A736F6E223A2022222C0D0A20202020202020202020202022786D6C223A2022220D0A202020202020202020207D2C0D0A2020202020202020202022486561646572223A207B7D2C0D0A2020202020202020202022506172616D73223A207B7D0D0A20202020202020207D0D0A2020202020207D2C0D0A2020202020202266696C746572223A206E756C6C2C0D0A202020202020226576656E7473223A207B0D0A202020202020202022626173654576656E74223A207B0D0A2020202020202020202022636C69636B223A206E756C6C2C0D0A202020202020202020202264626C636C69636B223A206E756C6C2C0D0A20202020202020202020226D6F757365656E746572223A206E756C6C2C0D0A20202020202020202020226D6F7573656C65617665223A206E756C6C0D0A20202020202020207D2C0D0A202020202020202022616476616E6365644576656E7473223A207B0D0A2020202020202020202022766E6F64654D6F756E746564223A206E756C6C2C0D0A2020202020202020202022766E6F64654265666F72654D6F756E74223A206E756C6C0D0A20202020202020207D2C0D0A202020202020202022696E7465726163744576656E7473223A205B5D0D0A2020202020207D2C0D0A202020202020226B6579223A2022546578744772616469656E74222C0D0A202020202020226368617274436F6E666967223A207B0D0A2020202020202020226B6579223A2022546578744772616469656E74222C0D0A20202020202020202263686172744B6579223A202256546578744772616469656E74222C0D0A202020202020202022636F6E4B6579223A20225643546578744772616469656E74222C0D0A2020202020202020227469746C65223A2022E6B890E58F98E69687E5AD97222C0D0A20202020202020202263617465676F7279223A20225465787473222C0D0A20202020202020202263617465676F72794E616D65223A2022E69687E69CAC222C0D0A2020202020202020227061636B616765223A2022496E666F726D6174696F6E73222C0D0A20202020202020202263686172744672616D65223A20226E616976655549222C0D0A202020202020202022696D616765223A2022746578745F6772616469656E742E706E67220D0A2020202020207D2C0D0A202020202020226F7074696F6E223A207B0D0A20202020202020202264617461736574223A2022E5918AE8ADA6E695B0222C0D0A20202020202020202273697A65223A2032302C0D0A2020202020202020226772616469656E74223A207B0D0A202020202020202020202266726F6D223A2022236639326538634646222C0D0A2020202020202020202022746F223A2022236639326538634646222C0D0A2020202020202020202022646567223A2034350D0A20202020202020207D0D0A2020202020207D0D0A202020207D2C0D0A202020207B0D0A202020202020226964223A2022316238623971306E333030773030222C0D0A20202020202022697347726F7570223A2066616C73652C0D0A2020202020202261747472223A207B0D0A20202020202020202278223A2034312C0D0A20202020202020202279223A2038382C0D0A20202020202020202277223A203530302C0D0A20202020202020202268223A2035302C0D0A2020202020202020226F666673657458223A20302C0D0A2020202020202020226F666673657459223A20302C0D0A2020202020202020227A496E646578223A202D310D0A2020202020207D2C0D0A202020202020227374796C6573223A207B0D0A20202020202020202266696C74657253686F77223A2066616C73652C0D0A202020202020202022687565526F74617465223A20302C0D0A2020202020202020227361747572617465223A20312C0D0A202020202020202022636F6E7472617374223A20312C0D0A2020202020202020226272696768746E657373223A20312C0D0A2020202020202020226F706163697479223A20312C0D0A202020202020202022726F746174655A223A20302C0D0A202020202020202022726F7461746558223A20302C0D0A202020202020202022726F7461746559223A20302C0D0A202020202020202022736B657758223A20302C0D0A202020202020202022736B657759223A20302C0D0A202020202020202022626C656E644D6F6465223A20226E6F726D616C222C0D0A202020202020202022616E696D6174696F6E73223A205B5D0D0A2020202020207D2C0D0A2020202020202270726576696577223A207B0D0A2020202020202020226F766572466C6F7748696464656E223A2066616C73650D0A2020202020207D2C0D0A20202020202022737461747573223A207B0D0A2020202020202020226C6F636B223A2066616C73652C0D0A20202020202020202268696465223A2066616C73650D0A2020202020207D2C0D0A2020202020202272657175657374223A207B0D0A202020202020202022726571756573744461746154797065223A20302C0D0A202020202020202022726571756573744874747054797065223A2022676574222C0D0A2020202020202020227265717565737455726C223A2022222C0D0A20202020202020202272657175657374496E74657276616C223A206E756C6C2C0D0A20202020202020202272657175657374496E74657276616C556E6974223A20227365636F6E64222C0D0A20202020202020202272657175657374436F6E74656E7454797065223A20302C0D0A20202020202020202272657175657374506172616D73426F647954797065223A20226E6F6E65222C0D0A2020202020202020227265717565737453514C436F6E74656E74223A207B0D0A202020202020202020202273716C223A202273656C656374202A2066726F6D20207768657265220D0A20202020202020207D2C0D0A20202020202020202272657175657374506172616D73223A207B0D0A2020202020202020202022426F6479223A207B0D0A20202020202020202020202022666F726D2D64617461223A207B7D2C0D0A20202020202020202020202022782D7777772D666F726D2D75726C656E636F646564223A207B7D2C0D0A202020202020202020202020226A736F6E223A2022222C0D0A20202020202020202020202022786D6C223A2022220D0A202020202020202020207D2C0D0A2020202020202020202022486561646572223A207B7D2C0D0A2020202020202020202022506172616D73223A207B7D0D0A20202020202020207D0D0A2020202020207D2C0D0A2020202020202266696C746572223A206E756C6C2C0D0A202020202020226576656E7473223A207B0D0A202020202020202022626173654576656E74223A207B0D0A2020202020202020202022636C69636B223A206E756C6C2C0D0A202020202020202020202264626C636C69636B223A206E756C6C2C0D0A20202020202020202020226D6F757365656E746572223A206E756C6C2C0D0A20202020202020202020226D6F7573656C65617665223A206E756C6C0D0A20202020202020207D2C0D0A202020202020202022616476616E6365644576656E7473223A207B0D0A2020202020202020202022766E6F64654D6F756E746564223A206E756C6C2C0D0A2020202020202020202022766E6F64654265666F72654D6F756E74223A206E756C6C0D0A20202020202020207D2C0D0A202020202020202022696E7465726163744576656E7473223A205B5D0D0A2020202020207D2C0D0A202020202020226B6579223A2022546578744772616469656E74222C0D0A202020202020226368617274436F6E666967223A207B0D0A2020202020202020226B6579223A2022546578744772616469656E74222C0D0A20202020202020202263686172744B6579223A202256546578744772616469656E74222C0D0A202020202020202022636F6E4B6579223A20225643546578744772616469656E74222C0D0A2020202020202020227469746C65223A2022E6B890E58F98E69687E5AD97222C0D0A20202020202020202263617465676F7279223A20225465787473222C0D0A20202020202020202263617465676F72794E616D65223A2022E69687E69CAC222C0D0A2020202020202020227061636B616765223A2022496E666F726D6174696F6E73222C0D0A20202020202020202263686172744672616D65223A20226E616976655549222C0D0A202020202020202022696D616765223A2022746578745F6772616469656E742E706E67220D0A2020202020207D2C0D0A202020202020226F7074696F6E223A207B0D0A20202020202020202264617461736574223A2022E8AEBEE5A487E7BB9FE8AEA1222C0D0A20202020202020202273697A65223A2032302C0D0A2020202020202020226772616469656E74223A207B0D0A202020202020202020202266726F6D223A2022233030373246464646222C0D0A2020202020202020202022746F223A2022233030656166664646222C0D0A2020202020202020202022646567223A206E756C6C0D0A20202020202020207D0D0A2020202020207D0D0A202020207D2C0D0A202020207B0D0A202020202020226964223A202233716B786A71716C736D67303030222C0D0A20202020202022697347726F7570223A2066616C73652C0D0A2020202020202261747472223A207B0D0A20202020202020202278223A203336302C0D0A20202020202020202279223A2038392C0D0A20202020202020202277223A2035382C0D0A20202020202020202268223A2035302C0D0A2020202020202020226F666673657458223A20302C0D0A2020202020202020226F666673657459223A20302C0D0A2020202020202020227A496E646578223A202D310D0A2020202020207D2C0D0A202020202020227374796C6573223A207B0D0A20202020202020202266696C74657253686F77223A2066616C73652C0D0A202020202020202022687565526F74617465223A20302C0D0A2020202020202020227361747572617465223A20312C0D0A202020202020202022636F6E7472617374223A20312C0D0A2020202020202020226272696768746E657373223A20312C0D0A2020202020202020226F706163697479223A20312C0D0A202020202020202022726F746174655A223A20302C0D0A202020202020202022726F7461746558223A20302C0D0A202020202020202022726F7461746559223A20302C0D0A202020202020202022736B657758223A20302C0D0A202020202020202022736B657759223A20302C0D0A202020202020202022626C656E644D6F6465223A20226E6F726D616C222C0D0A202020202020202022616E696D6174696F6E73223A205B5D0D0A2020202020207D2C0D0A2020202020202270726576696577223A207B0D0A2020202020202020226F766572466C6F7748696464656E223A2066616C73650D0A2020202020207D2C0D0A20202020202022737461747573223A207B0D0A2020202020202020226C6F636B223A2066616C73652C0D0A20202020202020202268696465223A2066616C73650D0A2020202020207D2C0D0A2020202020202272657175657374223A207B0D0A202020202020202022726571756573744461746154797065223A20302C0D0A202020202020202022726571756573744874747054797065223A2022676574222C0D0A2020202020202020227265717565737455726C223A2022222C0D0A20202020202020202272657175657374496E74657276616C223A206E756C6C2C0D0A20202020202020202272657175657374496E74657276616C556E6974223A20227365636F6E64222C0D0A20202020202020202272657175657374436F6E74656E7454797065223A20302C0D0A20202020202020202272657175657374506172616D73426F647954797065223A20226E6F6E65222C0D0A2020202020202020227265717565737453514C436F6E74656E74223A207B0D0A202020202020202020202273716C223A202273656C656374202A2066726F6D20207768657265220D0A20202020202020207D2C0D0A20202020202020202272657175657374506172616D73223A207B0D0A2020202020202020202022426F6479223A207B0D0A20202020202020202020202022666F726D2D64617461223A207B7D2C0D0A20202020202020202020202022782D7777772D666F726D2D75726C656E636F646564223A207B7D2C0D0A202020202020202020202020226A736F6E223A2022222C0D0A20202020202020202020202022786D6C223A2022220D0A202020202020202020207D2C0D0A2020202020202020202022486561646572223A207B7D2C0D0A2020202020202020202022506172616D73223A207B7D0D0A20202020202020207D0D0A2020202020207D2C0D0A2020202020202266696C746572223A206E756C6C2C0D0A202020202020226576656E7473223A207B0D0A202020202020202022626173654576656E74223A207B0D0A2020202020202020202022636C69636B223A206E756C6C2C0D0A202020202020202020202264626C636C69636B223A206E756C6C2C0D0A20202020202020202020226D6F757365656E746572223A206E756C6C2C0D0A20202020202020202020226D6F7573656C65617665223A206E756C6C0D0A20202020202020207D2C0D0A202020202020202022616476616E6365644576656E7473223A207B0D0A2020202020202020202022766E6F64654D6F756E746564223A206E756C6C2C0D0A2020202020202020202022766E6F64654265666F72654D6F756E74223A206E756C6C0D0A20202020202020207D2C0D0A202020202020202022696E7465726163744576656E7473223A205B5D0D0A2020202020207D2C0D0A202020202020226B6579223A2022496D616765222C0D0A202020202020226368617274436F6E666967223A207B0D0A2020202020202020226B6579223A2022496D616765222C0D0A20202020202020202263686172744B6579223A202256496D616765222C0D0A202020202020202022636F6E4B6579223A20225643496D616765222C0D0A2020202020202020227469746C65223A202277696E646F772D72696768742E706E67222C0D0A20202020202020202263617465676F7279223A20224D6F726573222C0D0A20202020202020202263617465676F72794E616D65223A2022E69BB4E5A49A222C0D0A2020202020202020227061636B616765223A2022496E666F726D6174696F6E73222C0D0A20202020202020202263686172744672616D65223A2022737461746963222C0D0A202020202020202022696D616765223A202270686F746F2E706E67220D0A2020202020207D2C0D0A202020202020226F7074696F6E223A207B0D0A20202020202020202264617461736574223A2022646174613A696D6167652F706E673B6261736536342C6956424F5277304B47676F414141414E535568455567414141446F414141414F434159414141422B55412B544141414141584E535230494172733463365141414141526E51553142414143786A777638595155414141414A6345685A6377414144734D414141374441636476714751414141415A6445565964464E765A6E523359584A6C4145466B62324A6C49456C745957646C556D56685A486C7879575538414141444A6D6C555748525954557736593239744C6D466B62324A6C4C6E68746341414141414141504439346347466A6132563049474A6C5A326C7550534C767537386949476C6B50534A584E553077545842445A576870534870795A564E36546C526A656D746A4F575169507A34675048673665473177625756305953423462577875637A703450534A685A4739695A547075637A70745A5852684C7949676544703462584230617A306951575276596D55675745315149454E76636D55674E5334324C574D784E4449674E7A6B754D5459774F5449304C4341794D4445334C7A41334C7A457A4C5441784F6A41324F6A4D3549434167494341674943416950694138636D526D4F6C4A455269423462577875637A70795A475939496D6830644841364C79393364336375647A4D7562334A6E4C7A45354F546B764D4449764D6A4974636D526D4C584E35626E52686543317563794D6950694138636D526D4F6B526C63324E79615842306157397549484A6B5A6A7068596D3931644430694969423462577875637A703462584139496D6830644841364C793975637935685A4739695A53356A62323076654746774C7A45754D433869494868746247357A4F6E68746345314E50534A6F644852774F693876626E4D7559575276596D5575593239744C336868634338784C6A4176625730764969423462577875637A707A64464A6C5A6A30696148523063446F764C32357A4C6D466B62324A6C4C6D4E7662533934595841764D5334774C334E556558426C4C314A6C63323931636D4E6C556D566D49794967654731774F6B4E795A57463062334A556232397350534A425A4739695A5342516147393062334E6F6233416751304D674D6A41784F43416F56326C755A47393363796B69494868746345314E4F6B6C7563335268626D4E6C53555139496E68746343357061575136525456434F4455344E7A59354F4463344D544646517A6C44524556454E6A684451544A444D545533526A6B69494868746345314E4F6B5276593356745A57353053555139496E68746343356B61575136525456434F4455344E7A63354F4463344D544646517A6C44524556454E6A684451544A444D545533526A6B695069413865473177545530365247567961585A6C5A455A7962323067633352535A5759366157357A644746755932564A52443069654731774C6D6C705A4470464E5549344E5467334E446B344E7A67784D5556444F554E45525551324F454E424D6B4D784E5464474F534967633352535A5759365A47396A6457316C626E524A52443069654731774C6D52705A4470464E5549344E5467334E546B344E7A67784D5556444F554E45525551324F454E424D6B4D784E5464474F534976506941384C334A6B5A6A70455A584E6A636D6C7764476C76626A3467504339795A475936556B5247506941384C336736654731776257563059543467504439346347466A61325630494756755A4430696369492F507468654D364D4141414A4B535552425645684C335A5A4A6A307852474543374E646F515177774A516D6A4467684153455A45676867564A73374F777453456B666F414E652F75324A78462F51466A5A32474A446843446D65577A536874616D6331373131376D2B3930784C645A4B547176747576654738717478366E5A76374C6E66386774463446452F684254636B4F6E45664F6E664A4451317377526434705272565759486638476F31716A4D50782B4F4E616C526E436B37474239576F7A6C69636750326A716D4564492F74774E7835426F306F6348384265334974646D4E6D4B4733456265734B4D6B657477445271544D58496C4C73474A626B67597551686E59744F383535794F686E5933685270354448666954647944337A4749794F336F7433555976324B4A6B527677505A37417A3167536B57342F69782B784A434939723738596A314D536B5849583833784565713176635443485275514F4E4849584768506B794550344445764B794F5034484574795A4E342F522B6239632B547231747352636D523145387251746F32554347337253444655492F4957356B694A794A6659464F6E7161755148624970636A6B594F5956506B585079625343502B4F564B4D64486D2F5834316142357A616576735454345A6658523339544F594E6570466A634A49624567506F655679646D316249542B693831394F30416E75446E42656A4D733746764C2F4F476C30397666743950592B65594250367A5A3744387135645179396D4C6135482F33786659664155332B46535849615030666967487A33655175775A4870667A2F6849637A38485A4F49682B4D344768486E386165714F397164363877456A33475966643641317A50454B4579703969722B4E2F4731754753747647356C42707939696D55436C6A562B4E4A4C436C6A585333506F43634D79746A466542484C70366379646A3536764338596C4C477A38424561474F52593335667A4F58626F64772F316368425034353171564D664852422F496231656A4F717651433735586A656F73514338715676334D445052694831616A4F6A3748756F726E76385041465A6A394F775A2B414E6B2B44396F684E366E584141414141456C46546B5375516D4343222C0D0A202020202020202022666974223A2022636F6E7461696E222C0D0A202020202020202022626F72646572526164697573223A2031300D0A2020202020207D0D0A202020207D2C0D0A202020207B0D0A202020202020226964223A202264396169766E726F63386F3030222C0D0A20202020202022697347726F7570223A2066616C73652C0D0A2020202020202261747472223A207B0D0A20202020202020202278223A203136302C0D0A20202020202020202279223A2038392C0D0A20202020202020202277223A2035382C0D0A20202020202020202268223A2035302C0D0A2020202020202020226F666673657458223A20302C0D0A2020202020202020226F666673657459223A20302C0D0A2020202020202020227A496E646578223A202D310D0A2020202020207D2C0D0A202020202020227374796C6573223A207B0D0A20202020202020202266696C74657253686F77223A2066616C73652C0D0A202020202020202022687565526F74617465223A20302C0D0A2020202020202020227361747572617465223A20312C0D0A202020202020202022636F6E7472617374223A20312C0D0A2020202020202020226272696768746E657373223A20312C0D0A2020202020202020226F706163697479223A20312C0D0A202020202020202022726F746174655A223A20302C0D0A202020202020202022726F7461746558223A20302C0D0A202020202020202022726F7461746559223A20302C0D0A202020202020202022736B657758223A20302C0D0A202020202020202022736B657759223A20302C0D0A202020202020202022626C656E644D6F6465223A20226E6F726D616C222C0D0A202020202020202022616E696D6174696F6E73223A205B5D0D0A2020202020207D2C0D0A2020202020202270726576696577223A207B0D0A2020202020202020226F766572466C6F7748696464656E223A2066616C73650D0A2020202020207D2C0D0A20202020202022737461747573223A207B0D0A2020202020202020226C6F636B223A2066616C73652C0D0A20202020202020202268696465223A2066616C73650D0A2020202020207D2C0D0A2020202020202272657175657374223A207B0D0A202020202020202022726571756573744461746154797065223A20302C0D0A202020202020202022726571756573744874747054797065223A2022676574222C0D0A2020202020202020227265717565737455726C223A2022222C0D0A20202020202020202272657175657374496E74657276616C223A206E756C6C2C0D0A20202020202020202272657175657374496E74657276616C556E6974223A20227365636F6E64222C0D0A20202020202020202272657175657374436F6E74656E7454797065223A20302C0D0A20202020202020202272657175657374506172616D73426F647954797065223A20226E6F6E65222C0D0A2020202020202020227265717565737453514C436F6E74656E74223A207B0D0A202020202020202020202273716C223A202273656C656374202A2066726F6D20207768657265220D0A20202020202020207D2C0D0A20202020202020202272657175657374506172616D73223A207B0D0A2020202020202020202022426F6479223A207B0D0A20202020202020202020202022666F726D2D64617461223A207B7D2C0D0A20202020202020202020202022782D7777772D666F726D2D75726C656E636F646564223A207B7D2C0D0A202020202020202020202020226A736F6E223A2022222C0D0A20202020202020202020202022786D6C223A2022220D0A202020202020202020207D2C0D0A2020202020202020202022486561646572223A207B7D2C0D0A2020202020202020202022506172616D73223A207B7D0D0A20202020202020207D0D0A2020202020207D2C0D0A2020202020202266696C746572223A206E756C6C2C0D0A202020202020226576656E7473223A207B0D0A202020202020202022626173654576656E74223A207B0D0A2020202020202020202022636C69636B223A206E756C6C2C0D0A202020202020202020202264626C636C69636B223A206E756C6C2C0D0A20202020202020202020226D6F757365656E746572223A206E756C6C2C0D0A20202020202020202020226D6F7573656C65617665223A206E756C6C0D0A20202020202020207D2C0D0A202020202020202022616476616E6365644576656E7473223A207B0D0A2020202020202020202022766E6F64654D6F756E746564223A206E756C6C2C0D0A2020202020202020202022766E6F64654265666F72654D6F756E74223A206E756C6C0D0A20202020202020207D2C0D0A202020202020202022696E7465726163744576656E7473223A205B5D0D0A2020202020207D2C0D0A202020202020226B6579223A2022496D616765222C0D0A202020202020226368617274436F6E666967223A207B0D0A2020202020202020226B6579223A2022496D616765222C0D0A20202020202020202263686172744B6579223A202256496D616765222C0D0A202020202020202022636F6E4B6579223A20225643496D616765222C0D0A2020202020202020227469746C65223A202277696E646F772D6C6566742E706E67222C0D0A20202020202020202263617465676F7279223A20224D6F726573222C0D0A20202020202020202263617465676F72794E616D65223A2022E69BB4E5A49A222C0D0A2020202020202020227061636B616765223A2022496E666F726D6174696F6E73222C0D0A20202020202020202263686172744672616D65223A2022737461746963222C0D0A202020202020202022696D616765223A202270686F746F2E706E67220D0A2020202020207D2C0D0A202020202020226F7074696F6E223A207B0D0A20202020202020202264617461736574223A2022646174613A696D6167652F706E673B6261736536342C6956424F5277304B47676F414141414E535568455567414141446F414141414F434159414141422B55412B544141414141584E535230494172733463365141414141526E51553142414143786A777638595155414141414A6345685A6377414144734D414141374441636476714751414141415A6445565964464E765A6E523359584A6C4145466B62324A6C49456C745957646C556D56685A486C7879575538414141444A6D6C555748525954557736593239744C6D466B62324A6C4C6E68746341414141414141504439346347466A6132563049474A6C5A326C7550534C767537386949476C6B50534A584E553077545842445A576870534870795A564E36546C526A656D746A4F575169507A34675048673665473177625756305953423462577875637A703450534A685A4739695A547075637A70745A5852684C7949676544703462584230617A306951575276596D55675745315149454E76636D55674E5334324C574D784E4449674E7A6B754D5459774F5449304C4341794D4445334C7A41334C7A457A4C5441784F6A41324F6A4D3549434167494341674943416950694138636D526D4F6C4A455269423462577875637A70795A475939496D6830644841364C79393364336375647A4D7562334A6E4C7A45354F546B764D4449764D6A4974636D526D4C584E35626E52686543317563794D6950694138636D526D4F6B526C63324E79615842306157397549484A6B5A6A7068596D3931644430694969423462577875637A703462584139496D6830644841364C793975637935685A4739695A53356A62323076654746774C7A45754D433869494868746247357A4F6E68746345314E50534A6F644852774F693876626E4D7559575276596D5575593239744C336868634338784C6A4176625730764969423462577875637A707A64464A6C5A6A30696148523063446F764C32357A4C6D466B62324A6C4C6D4E7662533934595841764D5334774C334E556558426C4C314A6C63323931636D4E6C556D566D49794967654731774F6B4E795A57463062334A556232397350534A425A4739695A5342516147393062334E6F6233416751304D674D6A41784F43416F56326C755A47393363796B69494868746345314E4F6B6C7563335268626D4E6C53555139496E68746343357061575136525456434F4455344E7A59354F4463344D544646517A6C44524556454E6A684451544A444D545533526A6B69494868746345314E4F6B5276593356745A57353053555139496E68746343356B61575136525456434F4455344E7A63354F4463344D544646517A6C44524556454E6A684451544A444D545533526A6B695069413865473177545530365247567961585A6C5A455A7962323067633352535A5759366157357A644746755932564A52443069654731774C6D6C705A4470464E5549344E5467334E446B344E7A67784D5556444F554E45525551324F454E424D6B4D784E5464474F534967633352535A5759365A47396A6457316C626E524A52443069654731774C6D52705A4470464E5549344E5467334E546B344E7A67784D5556444F554E45525551324F454E424D6B4D784E5464474F534976506941384C334A6B5A6A70455A584E6A636D6C7764476C76626A3467504339795A475936556B5247506941384C336736654731776257563059543467504439346347466A61325630494756755A4430696369492F507468654D364D4141414A4A535552425645684C335A65376178564247456333786B654D67695959785342713142524A53436B534549786C554C437831734A4B4F2F3846473745577863375378733455615A4A4343306D587142424642434671464879622B445A367A70714263585A3253657639775748765A4F374F374A6D353935756274714E583768566B4D3379466E7A59793659456C2B46793271746B4633762B366246577A4739624130374A567A52376F67706D795663302B47494A625A617561506A674F6C3874574A75313978383532634E304B58722F424D73545A42507568477A37434434686A2F776A30776A744946324D6A6E41444865417676496335364F41504434506776495534375849496A3447492B6844687463414E4F676E5064686B6F5564526464375132516B3158734E3279426E4B79767657636E354751642F774F343675354D4B76734C5873456744454171363979503444416367707A734E4C696A6F3543565664537244396F6B7577684E736F6F3079647057726B37572F6864514A2F73472F493756795472654A4E544B426C485430724B7871476C5A325654552F472B797A6A554849566C5A6858494A78347A397566643858376E61742B377679332F79425677632B3132734E4235564669483750647253664149587A347271735A50477858514F34344B6D636546386A796D50747079457834573735613635656B457178463363432F592F67544267794859344344376B4C4479444F44746744467967752F4141346E6A2F616569454F7A414663627A2F496D79444362674B63547A7A623849424749647A734A794B726C625372455A79487549455363394F4A6539446E43447063796A70527A424F6B46516D535071734955477948344A6B2B656D4D52567457306754526C705930696C70646D79536476456E532F695A4A713136547048382F425857532F675338414857537A6E73646C50533363455853654C78592F527A4D4D70354B47717666577244457035496D5645654C546970706E4E543350496455306A692F56645A2F434E4C435935526141437631745A56326D7366674D357948696D5252464D556635724D614766365150557341414141415355564F524B35435949493D222C0D0A202020202020202022666974223A20226E6F6E65222C0D0A202020202020202022626F72646572526164697573223A2031300D0A2020202020207D0D0A202020207D2C0D0A202020207B0D0A202020202020226964223A20223172716537676169646474733030222C0D0A20202020202022697347726F7570223A2066616C73652C0D0A2020202020202261747472223A207B0D0A20202020202020202278223A2034302C0D0A20202020202020202279223A203138372C0D0A20202020202020202277223A203130312C0D0A20202020202020202268223A2035302C0D0A2020202020202020226F666673657458223A20302C0D0A2020202020202020226F666673657459223A20302C0D0A2020202020202020227A496E646578223A202D310D0A2020202020207D2C0D0A202020202020227374796C6573223A207B0D0A20202020202020202266696C74657253686F77223A2066616C73652C0D0A202020202020202022687565526F74617465223A20302C0D0A2020202020202020227361747572617465223A20312C0D0A202020202020202022636F6E7472617374223A20312C0D0A2020202020202020226272696768746E657373223A20312C0D0A2020202020202020226F706163697479223A20312C0D0A202020202020202022726F746174655A223A20302C0D0A202020202020202022726F7461746558223A20302C0D0A202020202020202022726F7461746559223A20302C0D0A202020202020202022736B657758223A20302C0D0A202020202020202022736B657759223A20302C0D0A202020202020202022626C656E644D6F6465223A20226E6F726D616C222C0D0A202020202020202022616E696D6174696F6E73223A205B5D0D0A2020202020207D2C0D0A2020202020202270726576696577223A207B0D0A2020202020202020226F766572466C6F7748696464656E223A2066616C73650D0A2020202020207D2C0D0A20202020202022737461747573223A207B0D0A2020202020202020226C6F636B223A2066616C73652C0D0A20202020202020202268696465223A2066616C73650D0A2020202020207D2C0D0A2020202020202272657175657374223A207B0D0A202020202020202022726571756573744461746154797065223A20302C0D0A202020202020202022726571756573744874747054797065223A2022676574222C0D0A2020202020202020227265717565737455726C223A20222F696F742F6465766963652F737461746973746963222C0D0A20202020202020202272657175657374496E74657276616C223A20352C0D0A20202020202020202272657175657374496E74657276616C556E6974223A20227365636F6E64222C0D0A20202020202020202272657175657374436F6E74656E7454797065223A20302C0D0A20202020202020202272657175657374506172616D73426F647954797065223A20226E6F6E65222C0D0A2020202020202020227265717565737453514C436F6E74656E74223A207B0D0A202020202020202020202273716C223A202273656C656374202A2066726F6D20207768657265220D0A20202020202020207D2C0D0A20202020202020202272657175657374506172616D73223A207B0D0A2020202020202020202022426F6479223A207B0D0A20202020202020202020202022666F726D2D64617461223A207B7D2C0D0A20202020202020202020202022782D7777772D666F726D2D75726C656E636F646564223A207B7D2C0D0A202020202020202020202020226A736F6E223A2022222C0D0A20202020202020202020202022786D6C223A2022220D0A202020202020202020207D2C0D0A2020202020202020202022486561646572223A207B7D2C0D0A2020202020202020202022506172616D73223A207B7D0D0A20202020202020207D2C0D0A2020202020202020227265717565737444617461506F6E644964223A202235616738316F6B6B706C6F303030220D0A2020202020207D2C0D0A2020202020202266696C746572223A202272657475726E20646174612E646576696365436F756E74222C0D0A202020202020226576656E7473223A207B0D0A202020202020202022626173654576656E74223A207B0D0A2020202020202020202022636C69636B223A206E756C6C2C0D0A202020202020202020202264626C636C69636B223A206E756C6C2C0D0A20202020202020202020226D6F757365656E746572223A206E756C6C2C0D0A20202020202020202020226D6F7573656C65617665223A206E756C6C0D0A20202020202020207D2C0D0A202020202020202022616476616E6365644576656E7473223A207B0D0A2020202020202020202022766E6F64654D6F756E746564223A206E756C6C2C0D0A2020202020202020202022766E6F64654265666F72654D6F756E74223A206E756C6C0D0A20202020202020207D2C0D0A202020202020202022696E7465726163744576656E7473223A205B5D0D0A2020202020207D2C0D0A202020202020226B6579223A20224E756D626572222C0D0A202020202020226368617274436F6E666967223A207B0D0A2020202020202020226B6579223A20224E756D626572222C0D0A20202020202020202263686172744B6579223A2022564E756D626572222C0D0A202020202020202022636F6E4B6579223A202256434E756D626572222C0D0A2020202020202020227469746C65223A2022E695B0E5AD97E8AEA1E695B0222C0D0A20202020202020202263617465676F7279223A20224D6F726573222C0D0A20202020202020202263617465676F72794E616D65223A2022E69BB4E5A49A222C0D0A2020202020202020227061636B616765223A20224465636F7261746573222C0D0A20202020202020202263686172744672616D65223A2022636F6D6D6F6E222C0D0A202020202020202022696D616765223A20226E756D6265722E706E67220D0A2020202020207D2C0D0A202020202020226F7074696F6E223A207B0D0A20202020202020202264617461736574223A203632362C0D0A20202020202020202266726F6D223A20302C0D0A202020202020202022647572223A20352C0D0A202020202020202022707265636973696F6E223A20302C0D0A20202020202020202273686F77536570617261746F72223A20747275652C0D0A2020202020202020226E756D62657253697A65223A2032302C0D0A2020202020202020226E756D626572436F6C6F72223A2022233030453445374646222C0D0A20202020202020202270726566697854657874223A2022222C0D0A202020202020202022707265666978436F6C6F72223A202223346139656638222C0D0A20202020202020202273756666697854657874223A2022222C0D0A202020202020202022737566666978436F6C6F72223A202223346139656638220D0A2020202020207D0D0A202020207D2C0D0A202020207B0D0A202020202020226964223A2022357475643531326E703263303030222C0D0A20202020202022697347726F7570223A2066616C73652C0D0A2020202020202261747472223A207B0D0A20202020202020202278223A203137312C0D0A20202020202020202279223A203138382C0D0A20202020202020202277223A203130312C0D0A20202020202020202268223A2035302C0D0A2020202020202020226F666673657458223A20302C0D0A2020202020202020226F666673657459223A20302C0D0A2020202020202020227A496E646578223A202D310D0A2020202020207D2C0D0A202020202020227374796C6573223A207B0D0A20202020202020202266696C74657253686F77223A2066616C73652C0D0A202020202020202022687565526F74617465223A20302C0D0A2020202020202020227361747572617465223A20312C0D0A202020202020202022636F6E7472617374223A20312C0D0A2020202020202020226272696768746E657373223A20312C0D0A2020202020202020226F706163697479223A20312C0D0A202020202020202022726F746174655A223A20302C0D0A202020202020202022726F7461746558223A20302C0D0A202020202020202022726F7461746559223A20302C0D0A202020202020202022736B657758223A20302C0D0A202020202020202022736B657759223A20302C0D0A202020202020202022626C656E644D6F6465223A20226E6F726D616C222C0D0A202020202020202022616E696D6174696F6E73223A205B5D0D0A2020202020207D2C0D0A2020202020202270726576696577223A207B0D0A2020202020202020226F766572466C6F7748696464656E223A2066616C73650D0A2020202020207D2C0D0A20202020202022737461747573223A207B0D0A2020202020202020226C6F636B223A2066616C73652C0D0A20202020202020202268696465223A2066616C73650D0A2020202020207D2C0D0A2020202020202272657175657374223A207B0D0A202020202020202022726571756573744461746154797065223A20302C0D0A202020202020202022726571756573744874747054797065223A2022676574222C0D0A2020202020202020227265717565737455726C223A20222F696F742F6465766963652F737461746973746963222C0D0A20202020202020202272657175657374496E74657276616C223A20352C0D0A20202020202020202272657175657374496E74657276616C556E6974223A20227365636F6E64222C0D0A20202020202020202272657175657374436F6E74656E7454797065223A20302C0D0A20202020202020202272657175657374506172616D73426F647954797065223A20226E6F6E65222C0D0A2020202020202020227265717565737453514C436F6E74656E74223A207B0D0A202020202020202020202273716C223A202273656C656374202A2066726F6D20207768657265220D0A20202020202020207D2C0D0A20202020202020202272657175657374506172616D73223A207B0D0A2020202020202020202022426F6479223A207B0D0A20202020202020202020202022666F726D2D64617461223A207B7D2C0D0A20202020202020202020202022782D7777772D666F726D2D75726C656E636F646564223A207B7D2C0D0A202020202020202020202020226A736F6E223A2022222C0D0A20202020202020202020202022786D6C223A2022220D0A202020202020202020207D2C0D0A2020202020202020202022486561646572223A207B7D2C0D0A2020202020202020202022506172616D73223A207B7D0D0A20202020202020207D2C0D0A2020202020202020227265717565737444617461506F6E644964223A202235616738316F6B6B706C6F303030220D0A2020202020207D2C0D0A2020202020202266696C746572223A202272657475726E20646174612E6465766963654F6E6C696E65436F756E74222C0D0A202020202020226576656E7473223A207B0D0A202020202020202022626173654576656E74223A207B0D0A2020202020202020202022636C69636B223A206E756C6C2C0D0A202020202020202020202264626C636C69636B223A206E756C6C2C0D0A20202020202020202020226D6F757365656E746572223A206E756C6C2C0D0A20202020202020202020226D6F7573656C65617665223A206E756C6C0D0A20202020202020207D2C0D0A202020202020202022616476616E6365644576656E7473223A207B0D0A2020202020202020202022766E6F64654D6F756E746564223A206E756C6C2C0D0A2020202020202020202022766E6F64654265666F72654D6F756E74223A206E756C6C0D0A20202020202020207D2C0D0A202020202020202022696E7465726163744576656E7473223A205B5D0D0A2020202020207D2C0D0A202020202020226B6579223A20224E756D626572222C0D0A202020202020226368617274436F6E666967223A207B0D0A2020202020202020226B6579223A20224E756D626572222C0D0A20202020202020202263686172744B6579223A2022564E756D626572222C0D0A202020202020202022636F6E4B6579223A202256434E756D626572222C0D0A2020202020202020227469746C65223A2022E695B0E5AD97E8AEA1E695B0222C0D0A20202020202020202263617465676F7279223A20224D6F726573222C0D0A20202020202020202263617465676F72794E616D65223A2022E69BB4E5A49A222C0D0A2020202020202020227061636B616765223A20224465636F7261746573222C0D0A20202020202020202263686172744672616D65223A2022636F6D6D6F6E222C0D0A202020202020202022696D616765223A20226E756D6265722E706E67220D0A2020202020207D2C0D0A202020202020226F7074696F6E223A207B0D0A20202020202020202264617461736574223A203632312C0D0A20202020202020202266726F6D223A20302C0D0A202020202020202022647572223A20332E352C0D0A202020202020202022707265636973696F6E223A20302C0D0A20202020202020202273686F77536570617261746F72223A20747275652C0D0A2020202020202020226E756D62657253697A65223A2032302C0D0A2020202020202020226E756D626572436F6C6F72223A2022233336464241414646222C0D0A20202020202020202270726566697854657874223A2022222C0D0A202020202020202022707265666978436F6C6F72223A202223346139656638222C0D0A20202020202020202273756666697854657874223A2022222C0D0A202020202020202022737566666978436F6C6F72223A202223346139656638220D0A2020202020207D0D0A202020207D2C0D0A202020207B0D0A202020202020226964223A20223379726A65723839746263303030222C0D0A20202020202022697347726F7570223A2066616C73652C0D0A2020202020202261747472223A207B0D0A20202020202020202278223A203330322C0D0A20202020202020202279223A203139302C0D0A20202020202020202277223A203130312C0D0A20202020202020202268223A2035302C0D0A2020202020202020226F666673657458223A20302C0D0A2020202020202020226F666673657459223A20302C0D0A2020202020202020227A496E646578223A202D310D0A2020202020207D2C0D0A202020202020227374796C6573223A207B0D0A20202020202020202266696C74657253686F77223A2066616C73652C0D0A202020202020202022687565526F74617465223A20302C0D0A2020202020202020227361747572617465223A20312C0D0A202020202020202022636F6E7472617374223A20312C0D0A2020202020202020226272696768746E657373223A20312C0D0A2020202020202020226F706163697479223A20312C0D0A202020202020202022726F746174655A223A20302C0D0A202020202020202022726F7461746558223A20302C0D0A202020202020202022726F7461746559223A20302C0D0A202020202020202022736B657758223A20302C0D0A202020202020202022736B657759223A20302C0D0A202020202020202022626C656E644D6F6465223A20226E6F726D616C222C0D0A202020202020202022616E696D6174696F6E73223A205B5D0D0A2020202020207D2C0D0A2020202020202270726576696577223A207B0D0A2020202020202020226F766572466C6F7748696464656E223A2066616C73650D0A2020202020207D2C0D0A20202020202022737461747573223A207B0D0A2020202020202020226C6F636B223A2066616C73652C0D0A20202020202020202268696465223A2066616C73650D0A2020202020207D2C0D0A2020202020202272657175657374223A207B0D0A202020202020202022726571756573744461746154797065223A20302C0D0A202020202020202022726571756573744874747054797065223A2022676574222C0D0A2020202020202020227265717565737455726C223A20222F696F742F6465766963652F737461746973746963222C0D0A20202020202020202272657175657374496E74657276616C223A20352C0D0A20202020202020202272657175657374496E74657276616C556E6974223A20227365636F6E64222C0D0A20202020202020202272657175657374436F6E74656E7454797065223A20302C0D0A20202020202020202272657175657374506172616D73426F647954797065223A20226E6F6E65222C0D0A2020202020202020227265717565737453514C436F6E74656E74223A207B0D0A202020202020202020202273716C223A202273656C656374202A2066726F6D20207768657265220D0A20202020202020207D2C0D0A20202020202020202272657175657374506172616D73223A207B0D0A2020202020202020202022426F6479223A207B0D0A20202020202020202020202022666F726D2D64617461223A207B7D2C0D0A20202020202020202020202022782D7777772D666F726D2D75726C656E636F646564223A207B7D2C0D0A202020202020202020202020226A736F6E223A2022222C0D0A20202020202020202020202022786D6C223A2022220D0A202020202020202020207D2C0D0A2020202020202020202022486561646572223A207B7D2C0D0A2020202020202020202022506172616D73223A207B7D0D0A20202020202020207D2C0D0A2020202020202020227265717565737444617461506F6E644964223A202235616738316F6B6B706C6F303030220D0A2020202020207D2C0D0A2020202020202266696C746572223A202272657475726E20646174612E6465766963654F66666C696E65436F756E74222C0D0A202020202020226576656E7473223A207B0D0A202020202020202022626173654576656E74223A207B0D0A2020202020202020202022636C69636B223A206E756C6C2C0D0A202020202020202020202264626C636C69636B223A206E756C6C2C0D0A20202020202020202020226D6F757365656E746572223A206E756C6C2C0D0A20202020202020202020226D6F7573656C65617665223A206E756C6C0D0A20202020202020207D2C0D0A202020202020202022616476616E6365644576656E7473223A207B0D0A2020202020202020202022766E6F64654D6F756E746564223A206E756C6C2C0D0A2020202020202020202022766E6F64654265666F72654D6F756E74223A206E756C6C0D0A20202020202020207D2C0D0A202020202020202022696E7465726163744576656E7473223A205B5D0D0A2020202020207D2C0D0A202020202020226B6579223A20224E756D626572222C0D0A202020202020226368617274436F6E666967223A207B0D0A2020202020202020226B6579223A20224E756D626572222C0D0A20202020202020202263686172744B6579223A2022564E756D626572222C0D0A202020202020202022636F6E4B6579223A202256434E756D626572222C0D0A2020202020202020227469746C65223A2022E695B0E5AD97E8AEA1E695B0222C0D0A20202020202020202263617465676F7279223A20224D6F726573222C0D0A20202020202020202263617465676F72794E616D65223A2022E69BB4E5A49A222C0D0A2020202020202020227061636B616765223A20224465636F7261746573222C0D0A20202020202020202263686172744672616D65223A2022636F6D6D6F6E222C0D0A202020202020202022696D616765223A20226E756D6265722E706E67220D0A2020202020207D2C0D0A202020202020226F7074696F6E223A207B0D0A20202020202020202264617461736574223A20352C0D0A20202020202020202266726F6D223A20302C0D0A202020202020202022647572223A20362C0D0A202020202020202022707265636973696F6E223A20302C0D0A20202020202020202273686F77536570617261746F72223A20747275652C0D0A2020202020202020226E756D62657253697A65223A2032302C0D0A2020202020202020226E756D626572436F6C6F72223A2022234636413231384646222C0D0A20202020202020202270726566697854657874223A2022222C0D0A202020202020202022707265666978436F6C6F72223A202223346139656638222C0D0A20202020202020202273756666697854657874223A2022222C0D0A202020202020202022737566666978436F6C6F72223A202223346139656638220D0A2020202020207D0D0A202020207D2C0D0A202020207B0D0A202020202020226964223A2022366977383472746A6C6E733030222C0D0A20202020202022697347726F7570223A2066616C73652C0D0A2020202020202261747472223A207B0D0A20202020202020202278223A203433352C0D0A20202020202020202279223A203138392C0D0A20202020202020202277223A203130312C0D0A20202020202020202268223A2035302C0D0A2020202020202020226F666673657458223A20302C0D0A2020202020202020226F666673657459223A20302C0D0A2020202020202020227A496E646578223A202D310D0A2020202020207D2C0D0A202020202020227374796C6573223A207B0D0A20202020202020202266696C74657253686F77223A2066616C73652C0D0A202020202020202022687565526F74617465223A20302C0D0A2020202020202020227361747572617465223A20312C0D0A202020202020202022636F6E7472617374223A20312C0D0A2020202020202020226272696768746E657373223A20312C0D0A2020202020202020226F706163697479223A20312C0D0A202020202020202022726F746174655A223A20302C0D0A202020202020202022726F7461746558223A20302C0D0A202020202020202022726F7461746559223A20302C0D0A202020202020202022736B657758223A20302C0D0A202020202020202022736B657759223A20302C0D0A202020202020202022626C656E644D6F6465223A20226E6F726D616C222C0D0A202020202020202022616E696D6174696F6E73223A205B5D0D0A2020202020207D2C0D0A2020202020202270726576696577223A207B0D0A2020202020202020226F766572466C6F7748696464656E223A2066616C73650D0A2020202020207D2C0D0A20202020202022737461747573223A207B0D0A2020202020202020226C6F636B223A2066616C73652C0D0A20202020202020202268696465223A2066616C73650D0A2020202020207D2C0D0A2020202020202272657175657374223A207B0D0A202020202020202022726571756573744461746154797065223A20302C0D0A202020202020202022726571756573744874747054797065223A2022676574222C0D0A2020202020202020227265717565737455726C223A20222F696F742F6465766963652F737461746973746963222C0D0A20202020202020202272657175657374496E74657276616C223A20352C0D0A20202020202020202272657175657374496E74657276616C556E6974223A20227365636F6E64222C0D0A20202020202020202272657175657374436F6E74656E7454797065223A20302C0D0A20202020202020202272657175657374506172616D73426F647954797065223A20226E6F6E65222C0D0A2020202020202020227265717565737453514C436F6E74656E74223A207B0D0A202020202020202020202273716C223A202273656C656374202A2066726F6D20207768657265220D0A20202020202020207D2C0D0A20202020202020202272657175657374506172616D73223A207B0D0A2020202020202020202022426F6479223A207B0D0A20202020202020202020202022666F726D2D64617461223A207B7D2C0D0A20202020202020202020202022782D7777772D666F726D2D75726C656E636F646564223A207B7D2C0D0A202020202020202020202020226A736F6E223A2022222C0D0A20202020202020202020202022786D6C223A2022220D0A202020202020202020207D2C0D0A2020202020202020202022486561646572223A207B7D2C0D0A2020202020202020202022506172616D73223A207B7D0D0A20202020202020207D2C0D0A2020202020202020227265717565737444617461506F6E644964223A202235616738316F6B6B706C6F303030220D0A2020202020207D2C0D0A2020202020202266696C746572223A202272657475726E20646174612E616C657274436F756E74222C0D0A202020202020226576656E7473223A207B0D0A202020202020202022626173654576656E74223A207B0D0A2020202020202020202022636C69636B223A206E756C6C2C0D0A202020202020202020202264626C636C69636B223A206E756C6C2C0D0A20202020202020202020226D6F757365656E746572223A206E756C6C2C0D0A20202020202020202020226D6F7573656C65617665223A206E756C6C0D0A20202020202020207D2C0D0A202020202020202022616476616E6365644576656E7473223A207B0D0A2020202020202020202022766E6F64654D6F756E746564223A206E756C6C2C0D0A2020202020202020202022766E6F64654265666F72654D6F756E74223A206E756C6C0D0A20202020202020207D2C0D0A202020202020202022696E7465726163744576656E7473223A205B5D0D0A2020202020207D2C0D0A202020202020226B6579223A20224E756D626572222C0D0A202020202020226368617274436F6E666967223A207B0D0A2020202020202020226B6579223A20224E756D626572222C0D0A20202020202020202263686172744B6579223A2022564E756D626572222C0D0A202020202020202022636F6E4B6579223A202256434E756D626572222C0D0A2020202020202020227469746C65223A2022E695B0E5AD97E8AEA1E695B0222C0D0A20202020202020202263617465676F7279223A20224D6F726573222C0D0A20202020202020202263617465676F72794E616D65223A2022E69BB4E5A49A222C0D0A2020202020202020227061636B616765223A20224465636F7261746573222C0D0A20202020202020202263686172744672616D65223A2022636F6D6D6F6E222C0D0A202020202020202022696D616765223A20226E756D6265722E706E67220D0A2020202020207D2C0D0A202020202020226F7074696F6E223A207B0D0A20202020202020202264617461736574223A2031302C0D0A20202020202020202266726F6D223A20302C0D0A202020202020202022647572223A20352C0D0A202020202020202022707265636973696F6E223A20302C0D0A20202020202020202273686F77536570617261746F72223A20747275652C0D0A2020202020202020226E756D62657253697A65223A2032302C0D0A2020202020202020226E756D626572436F6C6F72223A2022234639324538434646222C0D0A20202020202020202270726566697854657874223A2022222C0D0A202020202020202022707265666978436F6C6F72223A202223346139656638222C0D0A20202020202020202273756666697854657874223A2022222C0D0A202020202020202022737566666978436F6C6F72223A202223346139656638220D0A2020202020207D0D0A202020207D2C0D0A202020207B0D0A202020202020226964223A202233337A72347A7379377232303030222C0D0A20202020202022697347726F7570223A2066616C73652C0D0A2020202020202261747472223A207B0D0A20202020202020202278223A20313338302C0D0A20202020202020202279223A2038362C0D0A20202020202020202277223A203530302C0D0A20202020202020202268223A2035302C0D0A2020202020202020226F666673657458223A20302C0D0A2020202020202020226F666673657459223A20302C0D0A2020202020202020227A496E646578223A202D310D0A2020202020207D2C0D0A202020202020227374796C6573223A207B0D0A20202020202020202266696C74657253686F77223A2066616C73652C0D0A202020202020202022687565526F74617465223A20302C0D0A2020202020202020227361747572617465223A20312C0D0A202020202020202022636F6E7472617374223A20312C0D0A2020202020202020226272696768746E657373223A20312C0D0A2020202020202020226F706163697479223A20312C0D0A202020202020202022726F746174655A223A20302C0D0A202020202020202022726F7461746558223A20302C0D0A202020202020202022726F7461746559223A20302C0D0A202020202020202022736B657758223A20302C0D0A202020202020202022736B657759223A20302C0D0A202020202020202022626C656E644D6F6465223A20226E6F726D616C222C0D0A202020202020202022616E696D6174696F6E73223A205B5D0D0A2020202020207D2C0D0A2020202020202270726576696577223A207B0D0A2020202020202020226F766572466C6F7748696464656E223A2066616C73650D0A2020202020207D2C0D0A20202020202022737461747573223A207B0D0A2020202020202020226C6F636B223A2066616C73652C0D0A20202020202020202268696465223A2066616C73650D0A2020202020207D2C0D0A2020202020202272657175657374223A207B0D0A202020202020202022726571756573744461746154797065223A20302C0D0A202020202020202022726571756573744874747054797065223A2022676574222C0D0A2020202020202020227265717565737455726C223A2022222C0D0A20202020202020202272657175657374496E74657276616C223A206E756C6C2C0D0A20202020202020202272657175657374496E74657276616C556E6974223A20227365636F6E64222C0D0A20202020202020202272657175657374436F6E74656E7454797065223A20302C0D0A20202020202020202272657175657374506172616D73426F647954797065223A20226E6F6E65222C0D0A2020202020202020227265717565737453514C436F6E74656E74223A207B0D0A202020202020202020202273716C223A202273656C656374202A2066726F6D20207768657265220D0A20202020202020207D2C0D0A20202020202020202272657175657374506172616D73223A207B0D0A2020202020202020202022426F6479223A207B0D0A20202020202020202020202022666F726D2D64617461223A207B7D2C0D0A20202020202020202020202022782D7777772D666F726D2D75726C656E636F646564223A207B7D2C0D0A202020202020202020202020226A736F6E223A2022222C0D0A20202020202020202020202022786D6C223A2022220D0A202020202020202020207D2C0D0A2020202020202020202022486561646572223A207B7D2C0D0A2020202020202020202022506172616D73223A207B7D0D0A20202020202020207D0D0A2020202020207D2C0D0A2020202020202266696C746572223A206E756C6C2C0D0A202020202020226576656E7473223A207B0D0A202020202020202022626173654576656E74223A207B0D0A2020202020202020202022636C69636B223A206E756C6C2C0D0A202020202020202020202264626C636C69636B223A206E756C6C2C0D0A20202020202020202020226D6F757365656E746572223A206E756C6C2C0D0A20202020202020202020226D6F7573656C65617665223A206E756C6C0D0A20202020202020207D2C0D0A202020202020202022616476616E6365644576656E7473223A207B0D0A2020202020202020202022766E6F64654D6F756E746564223A206E756C6C2C0D0A2020202020202020202022766E6F64654265666F72654D6F756E74223A206E756C6C0D0A20202020202020207D2C0D0A202020202020202022696E7465726163744576656E7473223A205B5D0D0A2020202020207D2C0D0A202020202020226B6579223A2022546578744772616469656E74222C0D0A202020202020226368617274436F6E666967223A207B0D0A2020202020202020226B6579223A2022546578744772616469656E74222C0D0A20202020202020202263686172744B6579223A202256546578744772616469656E74222C0D0A202020202020202022636F6E4B6579223A20225643546578744772616469656E74222C0D0A2020202020202020227469746C65223A2022E6B890E58F98E69687E5AD97222C0D0A20202020202020202263617465676F7279223A20225465787473222C0D0A20202020202020202263617465676F72794E616D65223A2022E69687E69CAC222C0D0A2020202020202020227061636B616765223A2022496E666F726D6174696F6E73222C0D0A20202020202020202263686172744672616D65223A20226E616976655549222C0D0A202020202020202022696D616765223A2022746578745F6772616469656E742E706E67220D0A2020202020207D2C0D0A202020202020226F7074696F6E223A207B0D0A20202020202020202264617461736574223A2022E5AE89E585A8E6B4BBE58AA8E8AEB0E5BD95222C0D0A20202020202020202273697A65223A2032302C0D0A2020202020202020226772616469656E74223A207B0D0A202020202020202020202266726F6D223A2022233030373246464646222C0D0A2020202020202020202022746F223A2022233030656166664646222C0D0A2020202020202020202022646567223A206E756C6C0D0A20202020202020207D0D0A2020202020207D0D0A202020207D2C0D0A202020207B0D0A202020202020226964223A2022326C6C31796D326E616773303030222C0D0A20202020202022697347726F7570223A2066616C73652C0D0A2020202020202261747472223A207B0D0A20202020202020202278223A20313730302C0D0A20202020202020202279223A2038372C0D0A20202020202020202277223A2035382C0D0A20202020202020202268223A2035302C0D0A2020202020202020226F666673657458223A20302C0D0A2020202020202020226F666673657459223A20302C0D0A2020202020202020227A496E646578223A202D310D0A2020202020207D2C0D0A202020202020227374796C6573223A207B0D0A20202020202020202266696C74657253686F77223A2066616C73652C0D0A202020202020202022687565526F74617465223A20302C0D0A2020202020202020227361747572617465223A20312C0D0A202020202020202022636F6E7472617374223A20312C0D0A2020202020202020226272696768746E657373223A20312C0D0A2020202020202020226F706163697479223A20312C0D0A202020202020202022726F746174655A223A20302C0D0A202020202020202022726F7461746558223A20302C0D0A202020202020202022726F7461746559223A20302C0D0A202020202020202022736B657758223A20302C0D0A202020202020202022736B657759223A20302C0D0A202020202020202022626C656E644D6F6465223A20226E6F726D616C222C0D0A202020202020202022616E696D6174696F6E73223A205B5D0D0A2020202020207D2C0D0A2020202020202270726576696577223A207B0D0A2020202020202020226F766572466C6F7748696464656E223A2066616C73650D0A2020202020207D2C0D0A20202020202022737461747573223A207B0D0A2020202020202020226C6F636B223A2066616C73652C0D0A20202020202020202268696465223A2066616C73650D0A2020202020207D2C0D0A2020202020202272657175657374223A207B0D0A202020202020202022726571756573744461746154797065223A20302C0D0A202020202020202022726571756573744874747054797065223A2022676574222C0D0A2020202020202020227265717565737455726C223A2022222C0D0A20202020202020202272657175657374496E74657276616C223A206E756C6C2C0D0A20202020202020202272657175657374496E74657276616C556E6974223A20227365636F6E64222C0D0A20202020202020202272657175657374436F6E74656E7454797065223A20302C0D0A20202020202020202272657175657374506172616D73426F647954797065223A20226E6F6E65222C0D0A2020202020202020227265717565737453514C436F6E74656E74223A207B0D0A202020202020202020202273716C223A202273656C656374202A2066726F6D20207768657265220D0A20202020202020207D2C0D0A20202020202020202272657175657374506172616D73223A207B0D0A2020202020202020202022426F6479223A207B0D0A20202020202020202020202022666F726D2D64617461223A207B7D2C0D0A20202020202020202020202022782D7777772D666F726D2D75726C656E636F646564223A207B7D2C0D0A202020202020202020202020226A736F6E223A2022222C0D0A20202020202020202020202022786D6C223A2022220D0A202020202020202020207D2C0D0A2020202020202020202022486561646572223A207B7D2C0D0A2020202020202020202022506172616D73223A207B7D0D0A20202020202020207D0D0A2020202020207D2C0D0A2020202020202266696C746572223A206E756C6C2C0D0A202020202020226576656E7473223A207B0D0A202020202020202022626173654576656E74223A207B0D0A2020202020202020202022636C69636B223A206E756C6C2C0D0A202020202020202020202264626C636C69636B223A206E756C6C2C0D0A20202020202020202020226D6F757365656E746572223A206E756C6C2C0D0A20202020202020202020226D6F7573656C65617665223A206E756C6C0D0A20202020202020207D2C0D0A202020202020202022616476616E6365644576656E7473223A207B0D0A2020202020202020202022766E6F64654D6F756E746564223A206E756C6C2C0D0A2020202020202020202022766E6F64654265666F72654D6F756E74223A206E756C6C0D0A20202020202020207D2C0D0A202020202020202022696E7465726163744576656E7473223A205B5D0D0A2020202020207D2C0D0A202020202020226B6579223A2022496D616765222C0D0A202020202020226368617274436F6E666967223A207B0D0A2020202020202020226B6579223A2022496D616765222C0D0A20202020202020202263686172744B6579223A202256496D616765222C0D0A202020202020202022636F6E4B6579223A20225643496D616765222C0D0A2020202020202020227469746C65223A202277696E646F772D72696768742E706E67222C0D0A20202020202020202263617465676F7279223A20224D6F726573222C0D0A20202020202020202263617465676F72794E616D65223A2022E69BB4E5A49A222C0D0A2020202020202020227061636B616765223A2022496E666F726D6174696F6E73222C0D0A20202020202020202263686172744672616D65223A2022737461746963222C0D0A202020202020202022696D616765223A202270686F746F2E706E67220D0A2020202020207D2C0D0A202020202020226F7074696F6E223A207B0D0A20202020202020202264617461736574223A2022646174613A696D6167652F706E673B6261736536342C6956424F5277304B47676F414141414E535568455567414141446F414141414F434159414141422B55412B544141414141584E535230494172733463365141414141526E51553142414143786A777638595155414141414A6345685A6377414144734D414141374441636476714751414141415A6445565964464E765A6E523359584A6C4145466B62324A6C49456C745957646C556D56685A486C7879575538414141444A6D6C555748525954557736593239744C6D466B62324A6C4C6E68746341414141414141504439346347466A6132563049474A6C5A326C7550534C767537386949476C6B50534A584E553077545842445A576870534870795A564E36546C526A656D746A4F575169507A34675048673665473177625756305953423462577875637A703450534A685A4739695A547075637A70745A5852684C7949676544703462584230617A306951575276596D55675745315149454E76636D55674E5334324C574D784E4449674E7A6B754D5459774F5449304C4341794D4445334C7A41334C7A457A4C5441784F6A41324F6A4D3549434167494341674943416950694138636D526D4F6C4A455269423462577875637A70795A475939496D6830644841364C79393364336375647A4D7562334A6E4C7A45354F546B764D4449764D6A4974636D526D4C584E35626E52686543317563794D6950694138636D526D4F6B526C63324E79615842306157397549484A6B5A6A7068596D3931644430694969423462577875637A703462584139496D6830644841364C793975637935685A4739695A53356A62323076654746774C7A45754D433869494868746247357A4F6E68746345314E50534A6F644852774F693876626E4D7559575276596D5575593239744C336868634338784C6A4176625730764969423462577875637A707A64464A6C5A6A30696148523063446F764C32357A4C6D466B62324A6C4C6D4E7662533934595841764D5334774C334E556558426C4C314A6C63323931636D4E6C556D566D49794967654731774F6B4E795A57463062334A556232397350534A425A4739695A5342516147393062334E6F6233416751304D674D6A41784F43416F56326C755A47393363796B69494868746345314E4F6B6C7563335268626D4E6C53555139496E68746343357061575136525456434F4455344E7A59354F4463344D544646517A6C44524556454E6A684451544A444D545533526A6B69494868746345314E4F6B5276593356745A57353053555139496E68746343356B61575136525456434F4455344E7A63354F4463344D544646517A6C44524556454E6A684451544A444D545533526A6B695069413865473177545530365247567961585A6C5A455A7962323067633352535A5759366157357A644746755932564A52443069654731774C6D6C705A4470464E5549344E5467334E446B344E7A67784D5556444F554E45525551324F454E424D6B4D784E5464474F534967633352535A5759365A47396A6457316C626E524A52443069654731774C6D52705A4470464E5549344E5467334E546B344E7A67784D5556444F554E45525551324F454E424D6B4D784E5464474F534976506941384C334A6B5A6A70455A584E6A636D6C7764476C76626A3467504339795A475936556B5247506941384C336736654731776257563059543467504439346347466A61325630494756755A4430696369492F507468654D364D4141414A4B535552425645684C335A5A4A6A307852474543374E646F515177774A516D6A4467684153455A45676867564A73374F777453456B666F414E652F75324A78462F51466A5A32474A446843446D65577A536874616D6331373131376D2B3930784C645A4B547176747576654738717478366E5A76374C6E66386774463446452F684254636B4F6E45664F6E664A4451317377526434705272565759486638476F31716A4D50782B4F4E616C526E436B37474239576F7A6C69636750326A716D4564492F74774E7835426F306F6348384265334974646D4E6D4B4733456265734B4D6B657477445271544D58496C4C73474A626B67597551686E59744F383535794F686E5933685270354448666954647944337A4749794F336F7433555976324B4A6B527677505A37417A3167536B57342F69782B784A434939723738596A314D536B5849583833784565713176635443485275514F4E4849584768506B794550344445764B794F5034484574795A4E342F522B6239632B547231747352636D523145387251746F32554347337253444655492F4957356B694A794A6659464F6E7161755148624970636A6B594F5956506B585079625343502B4F564B4D64486D2F5834316142357A616576735454345A6658523339544F594E6570466A634A49624567506F655679646D316249542B693831394F30416E75446E42656A4D733746764C2F4F476C30397666743950592B65594250367A5A3744387135645179396D4C6135482F33786659664155332B46535849615030666967487A33655175775A4870667A2F6849637A38485A4F49682B4D344768486E386165714F397164363877456A33475966643641317A50454B4579703969722B4E2F4731754753747647356C42707939696D55436C6A562B4E4A4C436C6A585333506F43634D79746A466542484C70366379646A3536764338596C4C477A38424561474F52593335667A4F58626F64772F316368425034353171564D664852422F496231656A4F717651433735586A656F73514338715676334D445052694831616A4F6A3748756F726E76385041465A6A394F775A2B414E6B2B44396F684E366E584141414141456C46546B5375516D4343222C0D0A202020202020202022666974223A2022636F6E7461696E222C0D0A202020202020202022626F72646572526164697573223A2031300D0A2020202020207D0D0A202020207D2C0D0A202020207B0D0A202020202020226964223A20223132316E67346735637035633030222C0D0A20202020202022697347726F7570223A2066616C73652C0D0A2020202020202261747472223A207B0D0A20202020202020202278223A20313530302C0D0A20202020202020202279223A2038372C0D0A20202020202020202277223A2035382C0D0A20202020202020202268223A2035302C0D0A2020202020202020226F666673657458223A20302C0D0A2020202020202020226F666673657459223A20302C0D0A2020202020202020227A496E646578223A202D310D0A2020202020207D2C0D0A202020202020227374796C6573223A207B0D0A20202020202020202266696C74657253686F77223A2066616C73652C0D0A202020202020202022687565526F74617465223A20302C0D0A2020202020202020227361747572617465223A20312C0D0A202020202020202022636F6E7472617374223A20312C0D0A2020202020202020226272696768746E657373223A20312C0D0A2020202020202020226F706163697479223A20312C0D0A202020202020202022726F746174655A223A20302C0D0A202020202020202022726F7461746558223A20302C0D0A202020202020202022726F7461746559223A20302C0D0A202020202020202022736B657758223A20302C0D0A202020202020202022736B657759223A20302C0D0A202020202020202022626C656E644D6F6465223A20226E6F726D616C222C0D0A202020202020202022616E696D6174696F6E73223A205B5D0D0A2020202020207D2C0D0A2020202020202270726576696577223A207B0D0A2020202020202020226F766572466C6F7748696464656E223A2066616C73650D0A2020202020207D2C0D0A20202020202022737461747573223A207B0D0A2020202020202020226C6F636B223A2066616C73652C0D0A20202020202020202268696465223A2066616C73650D0A2020202020207D2C0D0A2020202020202272657175657374223A207B0D0A202020202020202022726571756573744461746154797065223A20302C0D0A202020202020202022726571756573744874747054797065223A2022676574222C0D0A2020202020202020227265717565737455726C223A2022222C0D0A20202020202020202272657175657374496E74657276616C223A206E756C6C2C0D0A20202020202020202272657175657374496E74657276616C556E6974223A20227365636F6E64222C0D0A20202020202020202272657175657374436F6E74656E7454797065223A20302C0D0A20202020202020202272657175657374506172616D73426F647954797065223A20226E6F6E65222C0D0A2020202020202020227265717565737453514C436F6E74656E74223A207B0D0A202020202020202020202273716C223A202273656C656374202A2066726F6D20207768657265220D0A20202020202020207D2C0D0A20202020202020202272657175657374506172616D73223A207B0D0A2020202020202020202022426F6479223A207B0D0A20202020202020202020202022666F726D2D64617461223A207B7D2C0D0A20202020202020202020202022782D7777772D666F726D2D75726C656E636F646564223A207B7D2C0D0A202020202020202020202020226A736F6E223A2022222C0D0A20202020202020202020202022786D6C223A2022220D0A202020202020202020207D2C0D0A2020202020202020202022486561646572223A207B7D2C0D0A2020202020202020202022506172616D73223A207B7D0D0A20202020202020207D0D0A2020202020207D2C0D0A2020202020202266696C746572223A206E756C6C2C0D0A202020202020226576656E7473223A207B0D0A202020202020202022626173654576656E74223A207B0D0A2020202020202020202022636C69636B223A206E756C6C2C0D0A202020202020202020202264626C636C69636B223A206E756C6C2C0D0A20202020202020202020226D6F757365656E746572223A206E756C6C2C0D0A20202020202020202020226D6F7573656C65617665223A206E756C6C0D0A20202020202020207D2C0D0A202020202020202022616476616E6365644576656E7473223A207B0D0A2020202020202020202022766E6F64654D6F756E746564223A206E756C6C2C0D0A2020202020202020202022766E6F64654265666F72654D6F756E74223A206E756C6C0D0A20202020202020207D2C0D0A202020202020202022696E7465726163744576656E7473223A205B5D0D0A2020202020207D2C0D0A202020202020226B6579223A2022496D616765222C0D0A202020202020226368617274436F6E666967223A207B0D0A2020202020202020226B6579223A2022496D616765222C0D0A20202020202020202263686172744B6579223A202256496D616765222C0D0A202020202020202022636F6E4B6579223A20225643496D616765222C0D0A2020202020202020227469746C65223A202277696E646F772D6C6566742E706E67222C0D0A20202020202020202263617465676F7279223A20224D6F726573222C0D0A20202020202020202263617465676F72794E616D65223A2022E69BB4E5A49A222C0D0A2020202020202020227061636B616765223A2022496E666F726D6174696F6E73222C0D0A20202020202020202263686172744672616D65223A2022737461746963222C0D0A202020202020202022696D616765223A202270686F746F2E706E67220D0A2020202020207D2C0D0A202020202020226F7074696F6E223A207B0D0A20202020202020202264617461736574223A2022646174613A696D6167652F706E673B6261736536342C6956424F5277304B47676F414141414E535568455567414141446F414141414F434159414141422B55412B544141414141584E535230494172733463365141414141526E51553142414143786A777638595155414141414A6345685A6377414144734D414141374441636476714751414141415A6445565964464E765A6E523359584A6C4145466B62324A6C49456C745957646C556D56685A486C7879575538414141444A6D6C555748525954557736593239744C6D466B62324A6C4C6E68746341414141414141504439346347466A6132563049474A6C5A326C7550534C767537386949476C6B50534A584E553077545842445A576870534870795A564E36546C526A656D746A4F575169507A34675048673665473177625756305953423462577875637A703450534A685A4739695A547075637A70745A5852684C7949676544703462584230617A306951575276596D55675745315149454E76636D55674E5334324C574D784E4449674E7A6B754D5459774F5449304C4341794D4445334C7A41334C7A457A4C5441784F6A41324F6A4D3549434167494341674943416950694138636D526D4F6C4A455269423462577875637A70795A475939496D6830644841364C79393364336375647A4D7562334A6E4C7A45354F546B764D4449764D6A4974636D526D4C584E35626E52686543317563794D6950694138636D526D4F6B526C63324E79615842306157397549484A6B5A6A7068596D3931644430694969423462577875637A703462584139496D6830644841364C793975637935685A4739695A53356A62323076654746774C7A45754D433869494868746247357A4F6E68746345314E50534A6F644852774F693876626E4D7559575276596D5575593239744C336868634338784C6A4176625730764969423462577875637A707A64464A6C5A6A30696148523063446F764C32357A4C6D466B62324A6C4C6D4E7662533934595841764D5334774C334E556558426C4C314A6C63323931636D4E6C556D566D49794967654731774F6B4E795A57463062334A556232397350534A425A4739695A5342516147393062334E6F6233416751304D674D6A41784F43416F56326C755A47393363796B69494868746345314E4F6B6C7563335268626D4E6C53555139496E68746343357061575136525456434F4455344E7A59354F4463344D544646517A6C44524556454E6A684451544A444D545533526A6B69494868746345314E4F6B5276593356745A57353053555139496E68746343356B61575136525456434F4455344E7A63354F4463344D544646517A6C44524556454E6A684451544A444D545533526A6B695069413865473177545530365247567961585A6C5A455A7962323067633352535A5759366157357A644746755932564A52443069654731774C6D6C705A4470464E5549344E5467334E446B344E7A67784D5556444F554E45525551324F454E424D6B4D784E5464474F534967633352535A5759365A47396A6457316C626E524A52443069654731774C6D52705A4470464E5549344E5467334E546B344E7A67784D5556444F554E45525551324F454E424D6B4D784E5464474F534976506941384C334A6B5A6A70455A584E6A636D6C7764476C76626A3467504339795A475936556B5247506941384C336736654731776257563059543467504439346347466A61325630494756755A4430696369492F507468654D364D4141414A4A535552425645684C335A65376178564247456333786B654D67695959785342713142524A53436B534549786C554C437831734A4B4F2F3846473745577863375378733455615A4A4343306D587142424642434671464879622B445A367A70714263585A3253657639775748765A4F374F374A6D353935756274714E583768566B4D3379466E7A59793659456C2B46793271746B4633762B366246577A4739624130374A567A52376F67706D795663302B47494A625A617561506A674F6C3874574A75313978383532634E304B58722F424D73545A42507568477A37434434686A2F776A30776A744946324D6A6E41444865417676496335364F41504434506776495534375849496A3447492B6844687463414E4F676E5064686B6F5564526464375132516B3158734E3279426E4B79767657636E354751642F774F343675354D4B76734C5873456744454171363979503444416367707A734E4C696A6F3543565664537244396F6B7577684E736F6F3079647057726B37572F6864514A2F73472F493756795472654A4E544B426C485430724B7871476C5A325654552F472B797A6A554849566C5A6858494A78347A397566643858376E61742B377679332F79425677632B3132734E4235564669483750647253664149587A347271735A50477858514F34344B6D636546386A796D50747079457834573735613635656B457178463363432F592F67544267794859344344376B4C4479444F44746744467967752F4141346E6A2F616569454F7A414663627A2F496D79444362674B63547A7A623849424749647A734A794B726C625372455A79487549455363394F4A6539446E43447063796A70527A424F6B46516D535071734955477948344A6B2B656D4D52567457306754526C705930696C70646D79536476456E532F695A4A713136547048382F425857532F675338414857537A6E73646C50533363455853654C78592F527A4D4D70354B47717666577244457035496D5645654C546970706E4E543350496455306A692F56645A2F434E4C435935526141437631745A56326D7366674D357948696D5252464D556635724D614766365150557341414141415355564F524B35435949493D222C0D0A202020202020202022666974223A20226E6F6E65222C0D0A202020202020202022626F72646572526164697573223A2031300D0A2020202020207D0D0A202020207D2C0D0A202020207B0D0A202020202020226964223A202234313670776277366A6B75303030222C0D0A20202020202022697347726F7570223A2066616C73652C0D0A2020202020202261747472223A207B0D0A20202020202020202278223A20302C0D0A20202020202020202279223A2034362C0D0A20202020202020202277223A20313736302C0D0A20202020202020202268223A2035302C0D0A2020202020202020226F666673657458223A20302C0D0A2020202020202020226F666673657459223A20302C0D0A2020202020202020227A496E646578223A202D310D0A2020202020207D2C0D0A202020202020227374796C6573223A207B0D0A20202020202020202266696C74657253686F77223A2066616C73652C0D0A202020202020202022687565526F74617465223A20302C0D0A2020202020202020227361747572617465223A20312C0D0A202020202020202022636F6E7472617374223A20312C0D0A2020202020202020226272696768746E657373223A20312C0D0A2020202020202020226F706163697479223A20312C0D0A202020202020202022726F746174655A223A20302C0D0A202020202020202022726F7461746558223A20302C0D0A202020202020202022726F7461746559223A20302C0D0A202020202020202022736B657758223A20302C0D0A202020202020202022736B657759223A20302C0D0A202020202020202022626C656E644D6F6465223A20226E6F726D616C222C0D0A202020202020202022616E696D6174696F6E73223A205B5D0D0A2020202020207D2C0D0A2020202020202270726576696577223A207B0D0A2020202020202020226F766572466C6F7748696464656E223A2066616C73650D0A2020202020207D2C0D0A20202020202022737461747573223A207B0D0A2020202020202020226C6F636B223A2066616C73652C0D0A20202020202020202268696465223A2066616C73650D0A2020202020207D2C0D0A2020202020202272657175657374223A207B0D0A202020202020202022726571756573744461746154797065223A20302C0D0A202020202020202022726571756573744874747054797065223A2022676574222C0D0A2020202020202020227265717565737455726C223A2022222C0D0A20202020202020202272657175657374496E74657276616C223A206E756C6C2C0D0A20202020202020202272657175657374496E74657276616C556E6974223A20227365636F6E64222C0D0A20202020202020202272657175657374436F6E74656E7454797065223A20302C0D0A20202020202020202272657175657374506172616D73426F647954797065223A20226E6F6E65222C0D0A2020202020202020227265717565737453514C436F6E74656E74223A207B0D0A202020202020202020202273716C223A202273656C656374202A2066726F6D20207768657265220D0A20202020202020207D2C0D0A20202020202020202272657175657374506172616D73223A207B0D0A2020202020202020202022426F6479223A207B0D0A20202020202020202020202022666F726D2D64617461223A207B7D2C0D0A20202020202020202020202022782D7777772D666F726D2D75726C656E636F646564223A207B7D2C0D0A202020202020202020202020226A736F6E223A2022222C0D0A20202020202020202020202022786D6C223A2022220D0A202020202020202020207D2C0D0A2020202020202020202022486561646572223A207B7D2C0D0A2020202020202020202022506172616D73223A207B7D0D0A20202020202020207D0D0A2020202020207D2C0D0A2020202020202266696C746572223A206E756C6C2C0D0A202020202020226576656E7473223A207B0D0A202020202020202022626173654576656E74223A207B0D0A2020202020202020202022636C69636B223A206E756C6C2C0D0A202020202020202020202264626C636C69636B223A206E756C6C2C0D0A20202020202020202020226D6F757365656E746572223A206E756C6C2C0D0A20202020202020202020226D6F7573656C65617665223A206E756C6C0D0A20202020202020207D2C0D0A202020202020202022616476616E6365644576656E7473223A207B0D0A2020202020202020202022766E6F64654D6F756E746564223A206E756C6C2C0D0A2020202020202020202022766E6F64654265666F72654D6F756E74223A206E756C6C0D0A20202020202020207D2C0D0A202020202020202022696E7465726163744576656E7473223A205B5D0D0A2020202020207D2C0D0A202020202020226B6579223A2022496D616765222C0D0A202020202020226368617274436F6E666967223A207B0D0A2020202020202020226B6579223A2022496D616765222C0D0A20202020202020202263686172744B6579223A202256496D616765222C0D0A202020202020202022636F6E4B6579223A20225643496D616765222C0D0A2020202020202020227469746C65223A2022746F702D6D69642E706E67222C0D0A20202020202020202263617465676F7279223A20224D6F726573222C0D0A20202020202020202263617465676F72794E616D65223A2022E69BB4E5A49A222C0D0A2020202020202020227061636B616765223A2022496E666F726D6174696F6E73222C0D0A20202020202020202263686172744672616D65223A2022737461746963222C0D0A202020202020202022696D616765223A202270686F746F2E706E67220D0A2020202020207D2C0D0A202020202020226F7074696F6E223A207B0D0A20202020202020202264617461736574223A2022646174613A696D6167652F706E673B6261736536342C6956424F5277304B47676F414141414E5355684555674141426345414141413443415941414141316944415041414141475852465748525462325A30643246795A5142425A4739695A53424A6257466E5A564A6C5957523563636C6C5041414141795A70564668305745314D4F6D4E76625335685A4739695A53353462584141414141414144772F654842685932746C644342695A576470626A30693737752F496942705A443069567A564E4D4531775132566F61556836636D5654656B355559337072597A6C6B496A382B494478344F6E68746347316C6447456765473173626E4D366544306959575276596D5536626E4D366257563059533869494867366547317764477339496B466B62324A6C4946684E5543424462334A6C494455754E69316A4D545179494463354C6A45324D446B794E4377674D6A41784E7938774E7938784D7930774D546F774E6A6F7A4F5341674943416749434167496A346750484A6B5A6A70535245596765473173626E4D36636D526D50534A6F644852774F693876643364334C6E637A4C6D39795A7938784F546B354C7A41794C7A49794C584A6B5A69317A6557353059586774626E4D6A496A346750484A6B5A6A70455A584E6A636D6C7764476C76626942795A47593659574A76645851394969496765473173626E4D366547317750534A6F644852774F693876626E4D7559575276596D5575593239744C336868634338784C6A41764969423462577875637A70346258424E545430696148523063446F764C32357A4C6D466B62324A6C4C6D4E7662533934595841764D5334774C3231744C79496765473173626E4D36633352535A575939496D6830644841364C793975637935685A4739695A53356A62323076654746774C7A45754D43397A56486C775A5339535A584E7664584A6A5A564A6C5A694D694948687463447044636D566864473979564739766244306951575276596D5567554768766447397A6147397749454E44494449774D5467674B466470626D527664334D70496942346258424E5454704A626E4E305957356A5A556C4550534A346258417561576C6B4F6A5935526B59334F4459334F5467334F54457852554E424D6A5A4451305242516B59304D444979517A5246496942346258424E5454704562324E316257567564456C4550534A34625841755A476C6B4F6A5935526B59334F4459344F5467334F54457852554E424D6A5A4451305242516B59304D444979517A5246496A3467504868746345314E4F6B526C636D6C325A575247636D397449484E30556D566D4F6D6C7563335268626D4E6C53555139496E687463433570615751364E6A6C47526A63344E6A55354F4463354D544646513045794E6B4E4452454643526A51774D6A4A444E45556949484E30556D566D4F6D5276593356745A57353053555139496E68746343356B615751364E6A6C47526A63344E6A59354F4463354D544646513045794E6B4E4452454643526A51774D6A4A444E4555694C7A3467504339795A4759365247567A59334A70634852706232342B49447776636D526D4F6C4A45526A3467504339344F6E68746347316C6447452B4944772F654842685932746C6443426C626D5139496E4969507A376F577444594141447939556C4551565234327579394362427432566B6539763972377A50632B633276332B745236715A70496143464743795A51594152494B4E413464684F78654168746F45514B6753587351465468564E4F59676562424B706956366F674963524F4556757869676F47697741434A4C43453049436B526B4E4C50616A7038513339686A756565383765612B55663131726E3965767531314C4C6172583236743776336E764F336D757665666A2B6233302F6E6A782B434C4E77455261344177674E6C49435173494D2B624E5076536637326B4242684D6A2B45305749757638766473595046366847594854314476394D396F3063426D67763079785A67754A7675614F6D6D486C4A734943346D3048527A774F6B433070536554783345356E36362F79716B2B53716B335857412F525A775A776F6A6D4D4A6B517263735A6E4450397A56772B76554E7A4C6554764C4E70477269796652577537467942674130636E472F68344F6F554475623066544F4856393932466A5A584A6E445941637A6E553468376D77423941366C765962522B465537632B7A767768782B6177354F666F68657357425A2F39576D414A326363752B62376C5A6341336E7756344D2F73416A7931426642502F773741755650772B52712B397656302F646B352F4D4976506757584C3939486E3179796A4F2F513163485A73366668466138344476763743422F2F2B4E6641776348364D2B722F68595848514176332B4E4B6E4A303839444B2F3969766643664961777454574642782B2B412B353738425877366D38472B4E62766E734562337251486131754863502B4841727A6E66514158747950673368533250335943556B4A7155776B4F714A714F4877583468583836676474756275446456792F437A352F2F424C7A7839704F774F33345574696A645835746542576678464152716632383765417A2B39307566684C766E522B466D7974647331734E35334B4E32324D503671515838366F2B2B45743737537A6664554B34436142744D636A313332584158345376472B6C4E2B6B6A4A7736674C632F48632F426C2F2B6E312B433850597667656B4534663533484947507675306B544E5A364F507A5543735144375A656A456344662F776D4162336744774150555864373672774865395563557936796B68464F3263755233594C7A324565686D70324476307176703437766F38366C39333850704F2B657776764959374A77484F482F2B376D765331467464683655366E31443362536B5A314F306C2F4E7737486F4533664D4E6C4F49525657497462384B392B726F462F2B622B7377364F666D6B7264724E783642666166326F624E395550346F6D394A4D48314668434E666377426E76766F4B33485938776932506E3461572B6D4C4542454F3466706975647643706A782B4239377A394C4C536A434969662F58663263344446595952526377676E746D5930586C4D375341324E72346D754344324E337A324E6E3351484E5A45476B4D5A67444E70616142694876546D50383154666B3067586A61496A626A64496477635964397076486A717A674731713232312F2F5177744B49342B42656B304E475851324E2F44735457454B6330564866656853484D54505A73572B6B3461454F512B704C544451594C4452594A7A52366A7654414945536A765055516B6C576653734E764F514E4D3072314B596E644E457270482F794C584F4B633366336D615065644A526F566B43646A2B6A682B7A2B52704F39524563693969346A3653367458346D6D4934687A54787950555631505371417A316976783971382F4C2B4F416A6961574E2B3173494B422F456B6E53656749452F356E4B584873394678526C434859765162705965334F6956744E69306C2F65637643526C45436B75767033726965504C343158536E784430632B5159664969784E4F52376738624E373547583276766C466D34332F44476E6A66354A6A54516E6561616C75455A577870485331464F35307A4B4336743779685355396E4563754A793476576E624134557A54496D57417061366B4C44672F64722B55637939546D3377336D74677A2F726B393039446E4D35726D727A784D6E3950664A2B2F53654D3766723338485377505963796D56644F57526B7A35664F305A7A3070333033465061686F34634154684C5530714C6D6B437530304E717435393455442B2F3654544E76445431507634707938505938704F73544C6E744E48704A4653527470397832704C7A527973484B496A6236504C63423652505744726A4D4F522F383750454E674B5072576A6263467168377767365636666B4461717455766963704465754E316F4F3369566971484F4A6379772B743347507946574E704D366D616B6E7A2B7935307057523639666932646D4B703261744E50336554512F70466E725179344C7669354A6952744C3934654B424C304E474D704837544D384C50657A7344543131547073374543362B614F5A58624D655955716756444B4B396B7A5573624A3171763056496A575571763841566A656F365570574A6C35577141714F367A4B77644B5A724231362F595A5930735244624E636B48615070526E37484172536479426A4465657973763449736A365774384E6A51306F32687938734B696A745A6638516364312B2B7A6E5759307777364E676365343862327A4D4C3632386A614465646A6F63384665792B3353652B6255706642586D426C7A6E4E5568356F484C6C2F705631444B674A506363567A636E702F5776733974724F746F5471434873656B68304B4166526932312F5A62475A345250586C72416D416270577A5962364B67536448375244504937572B6F7633643663316A2B3068786E544C4562626F6A4F76485646664350446B75326C755871566E3334687738396652664C4B6C343969317938424F7834335536736F50336B37585A59706E6B2F497A6E576F575A35536650526F5044713951484C7A576F7235364534314C5A2B697A4A322B6A637150794F556262716E58366537464B61614B2F5439493961355466413472724A6872486E755374796F474F4E56786E55376F583659567A473673447A574E54367651546E6B6573336E6434377536732F2B6955722F4E51702B324A78313170327A6232675857584A705235714C63786B504F65624F3652655A44586A5A534755645478685174677766566B6659446E7942486C4E657A543766527A78484D447A3747307A63494E6D7875354B6C70724F35784D4872646F36344B55312F34574B713876705A2F3062456478544B6E7356766330487A4D616A326C3543693256373268467934516A574A796A3630396F6A4B5A37766F79326861396130624948613270633946666F485874306E6164333330566C2F6656307A6133426339746430503238742B547838776E362F4C476F5A554776686C66525A3276303933304C4C542F754B7866703836667075614F74787673516C636B716666383354757263397A53396C4A766367744C53305056682B75346A5649397233417A6F38354E30725361396C3762506741666166795046643458363077474E3237546468574E6A6251386E36504F624B64386E4A31702B2F2B466A4E4D395166396A694F656F4D705A322B503278306E7479672B4937526C6E3256347831705035497532466D353068384C75752F68445332674D306E7234573155686C39794F38413376517267366C58746A7839386B75366A75706B325A5230444E75664B4547746A647242355374597174685A717159797065387159306135707666463849324E57712B73393768754A43726E70624531417A795375353355626432792B35303657356A71652B4C6A4A62594C4C754C4E3552744B58744232446A5238792F6F55792F737059794F4D51765765463470745150364E68514D707676694A51413079756C486B62624736576545376F6339314332773650372F774F3550794E6259336E3479662F4D374B2B68316F75334A2F514769555856572F6A385969765873734B664D79304E515033727A3559766D646C76636E763533483356717176486171725065346E49313262747461662B5866756634336C6D364D34704D2B657075652F6D74597257355466333650785A30773348364748706A62654C6A70646C33557A473774356E4B48386A626E4D2B42707066584E2B704F7A7065783658754731666F50732B51764774305539346E48355357523037712B6E6437586A645465324E3274305265766661785061686C4A36723347666F336F4F357A6D473064595974753059326430793862436D74613553664F366754707550304E373134664B6A31754C44796259504E49355A334C752B3539664F526F52686337717564316B6C6E34354C584F632B395568595579554D552F35542B766E5866326A6276566168734C6C4E5A5048466133336E62425A326A48714738626652613334664A3472432F412B567468644B3163555472383444654E782F5A50696C712B57335A6C6D4E6B66596D66723966512F4A506E69546D55735A76667632643967752F683975334E6A754F6457547A6A6B65365252725A473533474C78323175753978665A5A796B3634374C414B666F6A7A2B2B53654F396C6564484770746E7148584E4365542B4F2B63784F656D3479586D6C346F4376704A2B666F734C3935466A486E3775706261346B7265656E71662F667436356A2F786B71792B50374F6D5A684B4776617A766F74742F47753037624961642B6A5A32366E7A3736594D72745033783834756847314848677678755635474852386C6A6B47745779344C62334B787474484B4A3737782F72394872337A4C6B72445355726E65366A673736553848753031545250362B52377137343976364A35766738706A5370474E364A7053676C5A3748576665665648723473755036397A423439595454774138534875434179715162364E352F6F344E33596479576E3656336E38584A66344E6E6334782F3454324A422B6838652B62614E3734345A76307676764F4A6E6A67574949784E66716271525A356D4E366974422B684634336F32523136393333555742355930585A4D5177446354642B644F6442784A495853706736387254513644764166693457324964346E6364317A573739433562415474564F73554F4F62556B4F614246324C38774466792F6F4D645231446C5331726342746B6552795850746261654579444634384E6A4F6B64384470316F6E33394748312F6C71356A6C72356461746937564845792F396C344F716637353752496B4C3150433449527A4368662B3151334277646C4C636D66723944336236444D6E365379754554707637536E6657634951786A43454959776843454D59516844474D49516876414351304F6277313361344D342B4358437247544A547356504278616967436D2F4365564F666A42736B4F383468764A54437339454E42736247454959776843454D595167766B7A434134454D59776843474D4951684447454951786A43454962774757796F6D47483279513767772F54374362712B444A55787879796B5335472B5978596A4B6B74755042545A357A5477516554373650726F416D427A472B434136755A626A7746383152474170344F656A47694E645476766E2F633462413253582B6563794243474D495168444745495133677072646D474D4951684447454951786A43454959776843454D59516966595A676B6749646F682F5734485931655759683841343455486E3068476F4E4C696B44586644614546796C77345536706674362F446643786E55715361715279436E78306578594164704D614E666A492B7848366563794F3959394D5759696C417A365646447750384C777164732F56446F593648734951686A434549517A68737851474548774951786A43454959776843454D59516844474D4958597668734D4865526454435A546279396F76715A726B633837674276656A2F41576D65367A7033356B41414655594E70315066626F722F4A4C70666731494F716853332B4A636250436F676A6647474270383957627A64536E7936336E426A556674772F6A4B7066375A72452B3531717A62492B4B675066664C58586150707A66596C6644645A59626B337A756C5064617459365A5931646B3061566E31754E61693966706C762F32586E563354307931744D43724B4536573468654F5937647838614C4536374856482B32373463776843454D5951684465466D4841515166776843474D4951684447454951786A434549627742524F534F68444456327931366B5130506963372B2F6D41567665374B682F6351622B636D5A6C7A7536434F50396B423259676471783261553264514A344473524D34393549576D4F48486C6539695A4B4150706B5A336D6A733035316167344D773464594C65726A7645657551707751482B332B4A7A702F72774F614E7A704757764E764A702B5053704F736854515A76423672466651737356774C596A4D3562354B7A37794B76743842316D524864733635756735704E616954556E616932557931764E6E35466F5067374E7977633665743970504C6E4A306F73734E5042722F466631657654726A5934526F377A324F486475795974446D673778666D3144645539556D2F54364A4B726F413562474F5A2B4B506D424E6764572F506E374A694F48586D504B47336469736E7152493133524F3959624B735451336143796F34626E77726D424C6958644341377A6D536E306B3838717341397033734631576C6234444A736E722F4C50466662667A6D327479454D59516844474D4C4C4D7777672B4243474D4951684447454951786A4345495977684A647A654159387A41416E73334C486B7752784174426A5950613130495054506E302F693942665A4B70326A387A305A57437947534E632F4D4D6530794A424D30466B2B765954377753342B483761564B3152764E4D452F55704B383559425566702B6754447549613077794470696F4A766552556C68566A43446D41734761714D43764B31747A44415A6D746772794E6B79737867564F463273304D6555316A51796B4A504239674E4F71374B5070773341684C35724734485363664838776976704A5655764E78496F6A39315653766932677439635A6F6D4E42593277357758345A514D43554C6B6733634F2F68756F74555975574A5771456A632F476B4B76307A39566557647A74584F4E6C454A716669794E31614D726C7A64474933496C5A5041376F6E6C325454516B47536A4F6A6E4A394C41584378415844494C2B4D366A50703834507570446C6B596E67487250587066787A49737535534E75544C2B32636A426F486C4844575578312F647372394F7A78796D6549355147656E61543739326A614F674B6332576162394E7A6A3445797A7A6C7633435258477A5763484462364F5A6352353747684E6836706A41376F7764326F4E6F494A7658754E3474696B2B4E63336C5030754C596B6137594C752B78436C382F4B326750563433304D41447A2F422F63634165365273745466556F744B7A7449506E592B385049507351686A434549517A684D773444434436454951786843454D59776843474D495168444F486C46415432464B6D524A7344615A434C6F5A63516B3069534849554A6B6F4468474349634D586762524D416D67714639637057655A4E5A7A6F707468414D41433058307377503847414B414C326446466B697758417751794D746B763337574D515A6D326B2B4F5978306665694437316F4B58614E54686A6550624E314756476C7A31687967396E667A43546D463946336A4C6B4C6533784536577358796D786D4F5934464136537473635156664752674F41584B497165544763697A5067456E6E644D684C36653070483245412F703933316A436E46374F42754A7A6F6F7670786169485A343038714A51497634525A7A484F6D564A2B6A76792B41674D544D6C6D393474787055706F53525867622B343979593461306142494A642F4873794B5247356236624D62573448594F57475532585555396D6756446344787337776A6C6F48556346785958737A757A35414D5641776774376239373035306151626B705331766B62537A4D447A5367474952576463794F796F6C796D7277446771634D34666333313272544C477553366E4861527074464D474446786670765A776C57376B55774A63466E50422B6A5675593661666D53696276566C54734A7A667A2F454C7A5A775A36577756364E5151734B41307A756E376F306B4E435677753346576D7138714D6C32624D37396D686E31636F666E725A6359727A324A626D696375623838716E474B53505247486E69337750577376705231616D614F6D6F4849304B343533763365664772765652743774524E434F4179676268645954574232423843454D597768434738494C434149495059516844474D4951686A43454951786843455034664172586C5756675143314F415261334B4E4E58474D41524958596F514749304D4649415A6D6273706D426F75594A326949726471664A47554D44534E6B77424D2B41737A462B6B72794D61594D6F5052506F524E5149422B2B686D317655572B524D475A65583552422B67784D574D333541777936677734316943706C7553745A68436D6D2B43656C6F4542527144347559536F756C5943356D635765596D6F634876705638454432614148666D464C58675A534A6D465A454273304C4A69655134307072434171736E4B39544F41475A737467433670396A6B7A315A6E56336C70744351444F73694E5442622F3775694A4E656F52703839694270305242376F6E692B6D3659554330537A586579757044504A33715A394931476B685367685A6E706434647938583164554E4157465878502F506B384B58444D4944524C693341477767675366592B4E31597449707A69446E7775356F342F336D474A7579544E6757354C6739775574637A364E7747437A5A4D7062645442706E4B524E6955466B746D76453872576D3333544B472F74627748617277305776687058635A6C4876527A4D63384D6B437350624339544C7056534B4654784F4D526771654D31374F7867634732706B4E50376B4A59474E564158364F69356E7659615A4D64445969394D6163427750487459316276616730697A4C787258334679714167386A4B673753544F4D6F59753757556A714747716D366A6867654E6E34774D796342354C472F67736867467348384951686A43456C306B59515041684447454951786A43454959776843454D59516776395343414C494E3549356464534F71456B706D386A51736D6D43514647767358444E52306B445173364D2B6F2B46396754446F70634A69635952324B7672646F645750424A6756346E4376775A34787442645A4C577441427559796D4736417067436B6151523064347A58514E706F45687A6E445247595743344B74514473616D436A353777316B352B7967416F71735164333146487576365571615A6A53774E41556C685474623138745273736936326736676370796F3731586D7441477167724B3745634453414362374D6249796470436447635543756A59473168713750526E676D6D6F344D526A44747A65774871554F45687379684265736F4C3938624757464C6F776834442F58645763476A4D61416453774743366C545A3770624F517251583763715938397A75686851526B73374F764537614E7078416B6B4D485743613741376B4B724D61527761716F34484F6F762F64614E79793665374E6B474866533174446C536868634432595A496F624A7167386B3274314F334D66395A4B7633534469646463726B7A35315A73685234346357736465426E484C6F72492F736D2B794B616449663048584A54676C45613064536C635A4B52326153732F466731356A75464F6634454741795631317A7A6C646E7575797A526C6E6D5847364E475877342F59334A7A5453396C6C4D2F566E6D66324768376D6C4E387A61486579387A2B6C7437545470545248717A50737A474332656E4338496643734D2F314F37625442616A746B754E6E77775944374E7957756230304330734446494E50376F4D477A4864574E6977334D324A6A467064542F3477784B54337257505735445A2B4F3541773854313753352F58633852386E2F532B48736872434546373259514442687A434549627A59453739502F734E4359416844474D4951686A434549547A667575463654766165455267556D39684E47437547727A6D5644423554456D424C634672356D30452F63314B4A796F5246426967463348536D633877416F77422B777677326F4A506A596959754F306355454430564B51744F52324D416D727A6167467344734A557443316B475170306C6F6F4B5948714B7A666A56396769467A504E48533731495A6E6A372B6C4546445667535A787751645858314D7069764F4C484F454A6D414B6255704E4D424B77554951746E77414F7A47636C46474F503639647857613644416548594B74755A79377733673445412B31684975424B486C6158454D5464704444527747417730426D66464736766438745562734D314F536756594C766D585A42696F4C534239613041335A3767587A6E734269443075492B4D447542456A566174546C35477865673965333936322B704C66426B766375633467477871557954326D656A50487074484C6F612F65563046775A70687777304E53756A3449764D2F353730324F7863442F59704141505658417A506867494449665A4B41304A6E2F4E4A416F47724D43324779785363524C7162545976316E74356A78356B4D4D656555513144445067725539333656724336396652784662476D2B585A72526750554F6B384755494F666741435738456E435068646A4356726A746E4A76724136456951384B536F4D5A454B54787A7056353368727A504D336F76766C796E345655475170694B58644F50787332574F74383471637647675734357959704A4F57793045754D4B6D614D61594D31475572552F6C796C5A33714C643278794E326153575236336547793552484664306E534D2F59374B754154657A714B314D7750586B7875772F48347A796A526D5647486A77703631573947766A39622B544134495462752B787A4B65636E355A4A2F2B6868395735367152397A723362557544372F2F674B786245722F5142664A47512F6662707A7741734E334F3735424D506A5A77474F4E49436238624D7A6B626D683763346472536471587A682B646F504A43386C7A7574473647734951686E446A59514442687A434559515036365335636E6E556A477A7641593363436247335A30644872787A4F4135454D59776843474D495168664747734D3559332F4D62636855707941313257416F795A44646577687033704355594C786F49566F5575434A41555655364D4D6277646B505A3451464767303357654D426F6F49337152674C58493665674F755041305A594656474D335971565A47636A57714D5930774F376B567A5A676D4B66594D6D4130557478566441426E716A4D73505255576647433432646A4D5A515A75413342514D6157635A3851522F4F2B3451392F5A455974597961414635794D624171374F2F45514C67434E4A3370536B4D464369634673374E324F6A2F4845616A31494E654D672F6F43697161695836307359766F35647944764F70434E6F32595A4B61774150713948667A5A4C66574352426E45324E3853694A383153374A3044363246354C657341663671512B52424C35424A464D7444546E30466A624276344C597A6C76734B75465641587052747666326A506F61564E414752517342474D7A6432454A59656379654C42336F77782F49344168546C4F645A586338615A726B724F6851694B752B777944722B5063687054416E7A56316C686661575872463636487168636B6C645A4961506B5344764C70562F6A5577577A4471787043446B546B4264524336553041576A6433754448697765344C646B77304F4537335041655A6F64635A6C4F57324C6A4A47334A32617573775A384D706B656A6E2B38616F5961477A4D416F6367645651356C32394B7678656A565762754973526771484979574E6A4D782F66646F736A6E4A644F516E356B6A566A554E574C6E3769784E7535715067736976476B4E5A31316161756D615A39387A48424E66784F63527968744F7464704C4364597649363937376B6868343053484B38596E6370596873464F4E41676F61374A4E59736A70696A4872304E72665957504E6F362F36414F6F31746D75434F6762786D424A4E376F624C5A42785567696F2F32366E5432734D72367679583478383379757076745030696E786A596F752B2B6E424B7764786E67366945675858447066764574444276302F5867443441724664596E4B3835442B3371505039772F564566414B585776304F352B2B594238484631784C3330376C634C343661797473494268542B695A72326D36342F5945355038593950586E41375666716C667657696C34734638543174783756436531714C78723959736449567134794E4562313363424F62626D744A70506E595773554F343264484B552F563758734F6232507256763539547132306C64777A4130306470706D73616F2B4571794A71544E654D2B53756F78674F4D6234303576646E412F61484D495358644268413843454D3465577A77627A4F397550364961594A6A4E6F6E344D6A47762B66744330786F7862472B30634A6B5A55714C68536B3838764258707032724F374231354465787753747738396D7230505937634D64583341512F2F4576664171733071312B69345750743253653947356B4568346E7957634A6B327350373333454737762F67635A6975646B4F424447454951786A434546347136347762666F4C426D66347743544D5A6A63586164516145426B586E784246684D6E554F5441593859325A314F68495763496C796A4857716E486B72674735512B65734B584553586C44436D74724F7A4255644B6853327265737174334A384D4D455177304568417955725377384376344E725771514A6A4F53346E735271464E6D4E594D5656654B4933397169423755724251346B503954454552666B735332597865324B67496934514D664166526267344D7471616733685A464869557863376F486C794A58325A4E5244666F71425463597975387331437A424153593734717A746F4654794545544C50446B673035766867526D7A62555A364259445035653067634B71592B31444A587A4F346E2F57786136433263724949755277687937493471312F6556374835705467564C4257375141623872653045592B36376A456257504A6C6E34713364574148346170535164705676304F66456F4E48332B723033587747786F6C7A6F75754E4B3056644441357254794335576257616841487544316755734D536B57795277326A6A43344379626634666B555A727966546A4257646A4368636D4730433443502B6E6C545A494E534164726C4F546643474E436658416F6E3174727234526F6A526232593778587362686546625A374D434D4E4F6142666D444A627643776556526E797648626F50657339636E5A594B49436967734C55445A6F79503049447456417752594F41386D6F4E4F4269345A6F4F553276464447656F705147576D532B4B6556654269554655417A4E30693756453839425A5838516451584A752B2B7770627642476C6C715A6E6B446B666C6F456C4462376279544A524150746E67526A695832736D6E5439794A4B4A523637564D356965466C3766492B4472793664613278557847413178674D6B774C7949525A46714C376564356C6877494855334537485A567A31307A617364632F452B2B3267426877784D71697A58686A527455726C73725543734C45474F466F56674465784139343931704B504F6D37747A565647697033416274433154764673306A4F6E474F786442356A524E652F554B424B4D335335794F517836373566784E316A375A68435A47643752444644523950475A6F632B4166524F4C6C464D336F376A334B42336E315741587262313732636E706A5A48314D2F356E68363472577039382B7563792F586D687466665A2B373237384F6D414262586C3774414163444E7373567A586D4D7079784344346976364E377253593472314B503765526E5356722B2B4E327A51596F76726850634C34504B4E364475594C686A4A52506A744433477771734D35672B706E676D64453058367439433268764C426C456B5537726E4B50312B69703439536538364D6C634148327A4F577951314576516D79385631337071476632506C7744344646745A787A7144576439677A6F31664B766842454A656E4C6E72547959562F5234595A332B416D656D39302B414F74444745447749517A684A62543565794648746D3730336E51446733342B544D6D62534A706338632B2F456449666651445359343944586C46392F382F6343322F36573366426F772B3338496D484A7644552B32637775624341726130466A472F66677A643957344B76507A5747742F33364D6668502F384B6C464767334D506E3067657068596E6F5251394E476D4D39612B4B332F357A61346447466C414D43484D495168444745496E2F4E3144364E2F2F5455546670624B594C7A4F524C4F7A436F465445563271414655304946577945436E68556C774B6F474A6D4F71716E76354B4F674557327767416A644365584268424A7A4B686F737A747A784A6F696A4E6341364847306C4645557343306D427263775034333162696D5A7872614C5A35764574374B6C45644E53415371573277736F6D317879573741645A753861304D3570466359336F364F435769745548494B79754E6C7A7068437632564A7753473854526D77796157774670556355567A416E6A746B774542512F5468566753586C5477493766304447736E6251615169486E5A2B6B59413463437864326946532F646A6159423072654B7554575662416F34714A75637843706935416D56756168356853556277464A6A7979782F713965457851456B78487736514758446A65487438755253494530476356587132706A64776E543268695679464A68632B7352303246574478746D315541774444525A4A484A4F4D53616D535852483874536C732B6D574566316D4778593844424776664C4D575254797455636941356969544D6641553754524C485A5535537946476D32436478586D6C362B4E496F464F7A5754694548426669455248654E49636561747376524F4F735972517762633568714A793145676758366F7376503275306963574936347230624C7879734E464161725A4B53796168492B6D6E6A67564E2F4C2B5A794363624B356A78487178654F69783131426A555743446A4A594F624335564E4D4D71523149774C72364C636D6B3653414F576130336E54734732737230636F6451705865594E49693170625A324C4F59497A4F384D5A6C2B6B68744D325044577533466B6B6E587A5551746437462B707355345977374C2B75492B5066674C4744564968365441514B614852644A426F5045423359417432437356507546672F5277653276547333366C5457783241755233546A4168734A73484B694B69633846737447496D3475432B3372326A2B77674F6F63443566396A5037596F5462426A4F333147634271554E55625A6E757A415752732F56447167396E584277446244414C7A772B787439577270343935586A42696647663742786F386D5652723178724C6E4D5877783170387A427436376376716773546845496D5A73446D436A485759776D5A395255303630394B6B716A39366543555762586F794F72636B446D62564C6A4379646E6742786735466F3555637A327269764137504579496B525936714C55584F68667A7351376359337275665247704F69464F446D5A772B75414F78755578364453754C735261386B31636E483671514956304C586D4B384961786572394E6B6135576C69457934442F497446385965516E32574E66726F573970507A76734C50327650734F48664B7867783639776D366A744F314D646650334A676A68674175423859726B74705735485246612B5757354A514133727750634778584158656551376D396335746A31763172646C5679695948327861666E2B4862414B495977674F4244474D4A7A6864337A492F6A4F6E336B496276387A322F4276662F44753578784D3235556554742F374E493349434D652B35524C67795435392B4F2B2F5373354A48763272767772662F74502F4676374B6D5876677A66426E3455662F7A6D7678662F7135545673594A786A547248786B3552424F3333495A6276717163394238777A6C59764F34697A50664776425A4D6C376342762F567241583779573952367A67356F6F433837684E6B636348666E30774F6F6F2F333569765930483271444E333348476268342B553734356D2F3850666A41423534574A766751506E646873744C42347739767772742F38325A6C4D307A366F5643474D495168444745494C78715966614E62526D46472B742F476C4D784537456F334F786736485931526941716F566442316A5171576A3554567172687150766F5035755578477144544C414F49476373317744416D6C59477546486D464270334D6161444A57475147706B74694F3068723861437A57614F445343444F4A544F516D35514C626E6D6A37324C43656F48463069686F4C4E2B634854525A6C6C344149454761446374554D467842656E4657695A5563536451587176704855475A68542B2F73475A686E4E466E427039534D4D625574784A45352B5253326236666767654F704C6750694C47687874416B4B53456344397669504643777257696170796656714774796467573039754164434E5052556E44623242692B7167594A6A4648684F415738762B2B427363744F2F397170464B3138445032745550426A724E544F48753651534A645957574E626973484A67796F6B795A693979347779567453546B437262587355364D65515631686E7157374D683057617131597477784D6E6A473250567A37796465364D366744637361364E343533456C6E784B4C4E7A57307477624C47756863516568306B4264367A37726C4A7271433157596F7778514A55356E73725A3548493067746376784A3978667A4849746D6A36557046356B51774E717A307051306B73333675585851687A3658384C7173546156397A4D314B42416F4C6D6A465A7446515A632B77665277504952464A6B63636542706F4B59375A593247586F6757663665534D6E57376B58777339445141475044656D61574E77637A514B484E2B4D5666773061574A6644787A674C675A4A585845435772396D48446A6E6D67397863624C46724D6B5530614E6C5861666A5878715638736D4A6D32504D5573524B66686F5A5138474C6973346A697248307055784D50714A6B3870415745754E4C353363554C38487158643966484D496D755639556E6C336C71383352723059414A6F3862474A6A66634F4E6D483469776B466964757936512F452F7265786B5A446B546C69705A706674577141327647757561747036705878467746706E787A30416F6738434C76704C73715752365848374A5A574659626D52386F4F787A5A6B4B50324467334E3661344F6C334E306B47394173444A6A456E6F703444793247336C4D724D3249713976315146724D79334F56526E6B336D634E656E37487A466A51494F5754676A473978576E725749466E4C734D35316332424175497962506265683667733248634150594F6A73597752306C65462F5437582F7546534E3832496B74434B31457871554148726873703272524E354672585A575632497A497A586B556D7938487A417A506F5A732F676231622F76526A5A5739737234336A436E73774B49303732486C4D63463639676636756D456B526B386D4F6E4E6B6A506E4B63333761335450427231766C664551315A646E6F4A74506471544F704B334D734D44414E30753972494F3268636C497935584C616F576532365450543053393171332F4D64673974394D6636373265634745515859774A7662594250437936397847574855784C5764747073336D6C2F76515A674F6334414F734443443645495678765935576559385031655456515848706942462F31485666677236632F7A497471475A4270574C31492F313635334E4E6B3038474642316667725439784A32772F4F6B6D4C6E5261506675552B6673332F386147455A333456396B595034767A434559417A7A31304750593355757A54722F382B766577572B3773767668543165764E3844384F4E76657A70642F744F6F656D545041327066572B78486142623534583930414F63654333447856343741332F35756D6D56654D59482F345A46392B50426A4857774D412F684C4E6B78584F766A677530374452393933636D422F4432454951786A434544356A774476497868457A4D314F4F4F366579754D46616169415663446F7177314E526C57676131374777644A6663774D57734134734178516D6B612F2B43675474394B7552595834595559577A525856416D4E47515152424C754941304430306D4257394877726F37396F3747683952644451314E59656C6C57637367417541477045504A6E6B732F6B4C32734E5245374C54753951684C597A667167733255442F742F525543343041346D68453852356937436A7276624A357A596D64774E2B694F77744C3747456C514B747A524E3767427961536469354C6A495A2F4258472B6D4E7067594455714B426B4C4F4F586763734637696F6133346C2F4F4E4B7A5767677A556F344879344678357A4D41754F6B75364D6644654A535555534464614C43716F4C6954793372544F3061525949494F7947426146415773794B45736D456A53743977695662726E70586B52304D46386A624A533169706B556A59565A484448586232354D4B526B674756544952704C7564686F5674386D534F61694350575A6445565A74776C515161675877793345474C6B4F54374E453636444B784F6A386A644778486E5473376561443639514A635275753362684177625875562B5848376B42564D4D464454327132332B655457496D4E742B366B4B6B634D4A6C513537366F7342775075483632644470646A546D465978314C72745750544E71394D4E2B70685A656A7A396F5A4B505957437964364F424D3263586C624E5A724854554B366B674D4365707755467A4B4D426C614D726E3051432B3167417A4E2B6A315869617138353341324E47695A6433616547636759676259754E503561594251336950764D69462F51352B6C536D74376E374F316E5230664B77513231666E796471456F4E476232653058545A384251374470386F6D5375514B777A31364532494A72424B49507073334A50434D57493444493473664952454B725448466D2B534C575569733345445350654831733147444372654E5674414B6A47426136754B797A3359554171443365736939364D41646E41774978392F6D773146653138522F4E64577372626D6A764C6C5863793433745667644A44665562366B497974665447794A4D6847484E586644396F65524B624841474B574A4A452B576A6E4B525238554765797535486F616B347152746A4B324F5131314C496E55586862375A6B43445A5A31777574544F592B4F645350434D744177594D4A39546552784F36666D706159536A76444F314D386F587057396679375363654C4C6D542F30526D5158503877684C7A39684A443963695438324B6C4C485938426A6A586F74566C37597868534E697258512F4553486738615A713659387054324D47356563366433525932705755397A593964314837436C65324742417054327A59324B4872504E313767623636537038394F64622B355472375845384D6D6B2B732F34334E384D43345230666C634568704F6F7A712F4C5939564862354F74327A7A68497664445672644532305066487A4534707268644B35737241347764716279627234615A32526A6132313863776C585A7061626B6A6E583251356E2B4E307A2B73504E49373372314E7A4B51626339414C4263587742324D736741544F4134455034504E686B4A52624E6B724F5A514B4F445449506561666D7A702B7A6E2B6B74326B2F67434269384A3239734A62726B463039742B76594756774B64546A394344522B5347726562767770536D75304F6176512F694741356F7350795A6E775834756D38472B4F3776664E61346B334B30782F546663666A5A4E39306B793430443249454859467669336147567967367456674F4E7A4F326A612F446B6838627777512B4F34654D50724D435234784675757933416E6163434844765279444774726C2B4F2F53662F432F5565383942544D2F6A66666D746639546948384A49494C455554615858784F3739794235782F66473041774963776843454D595668667661435154502B3053637479493636334866747931467163506A71374D437064574141674E4F6D5357427A534753434E70767370617773487131777541634A53346C3052497A6C346F7169576772504C52463854556A456D712F7A6F433174504E48674238383439706E4A61507574356D7978485A734E4341642F416357356342724562786A77723535714F7864667934346A6C61794F42566E576A364477726644514366744F5051507674466B5A4E4132326A3869684D55752B36435030383042512F6C35507944484646696B776B614A50727949424C4B366943386F496458744A4639645A77475170356B754B67392F515566782F6343534A4C4A54433733445763672F677354425546762F6A5143777077593848684648424D5662616258444731536F30727061536C416E49677853564F4B6A6B504232484669615A51366730654C4255767856395937776F7749785A446A44763763313371725074636758674B79466E7A5132503850334E786E62496A526D6476657A444130553031676B46577251566A6275506C524948366A6C7A537156644E626D307777674C4E6A516D725071476B5A503871524A58556B5562654675654F72734E7259484E4B7273536A4F74746F6944714755506B664452553775704B3930635A654E6A634F306D61486A4643786969464C686D524738464A6653685651364230726D75484332724270304D4D7A587038626F567258556D5644632B6533554147784C6B7352347A57377372616B795356646F41612B4D544F584D2B4F2B742F7968415A4C4A4E4F786C484773713042564C7559437A307973704737345779635967427A4F544A6F6C5A79485A5351674448786952676F68324A674D72676C49466D517A49526C67304C6E52776351526E4C6778766C6567555A58664A45324D6C544B36734B3149746D7645544D796A4C6C31494137564D54534A76683331764550626F7777426A6E615A36487974534441646A444A6D61434174514F6E5568397A72643757514D35784C443461334C6E78495A58487A4357467A4D6B75337A7339704F7851475535362F567541394561646C385A69654F5076355A4A4449653651736871334864686C45506251394E334E325367476463617034394B4B6F71466F556A6B75482B4E6C4B63426F4C47334E5166697563744C737A6B74484A6F636930366D31497A4444564A61557167596A39774D67507864364D63724E444F71704E5452544E3847356E76415273485A63796274453079377678335A797776772F73484645327243656473426F386A426763696A374F72636747357967712F786C6A4E564A7142676D5767584665527937536A664D714A3064724F6A7A584E3954313170585131466948775A692B464F4E64657A734E416344796D76302F4E464769396A37633153324F4649397037463161546479386B6D41677A31363531564B4B3073647A66574551445344326A626466496E53306B2B7337365A696C4F47304353692B4B6B59574852624D6943474D2B456164746B59472B4F6B61545330765668636959324D58397A566D6D6E4F62584F6E454561776147695A61685875556871656D756D373438497174753078576264616F30394E725633486358336270382F64745578346F336C756E7A317A724E576F2F6872646342506847537673746177432F4D7456322F4B5766782B5453415151667773736732426B7656644D79753230434731624236554941652B4A67386467744E414B504F6E6A6959307364765A622B6537354F66434E4139664E5A7970345278357457626F45333358794C2F503572447A2B5A33726633394649506D46466554734D4A65444E635877376C582F58765432476C68623938394634344239767770346637734E614578503550336E66314B6E7A4430564E772B336A456B6D644C34657A5A434E2F354854314D4A336F4562762F43424B3438646A4E636664764E4D5074723577432B504D41366E5078736A47326C6A43694E727A773967582F387662637348307365777563737350504C63342B747762742B34785A614943434D70345038795243474D4951686643474333414A32475979586A3261622F6F69664268636D4B2B4D4E4275616F48724F694938592B777978396243753155515753434B50594547784D4264526C476C6C6D654762307138676E4337346B414539316C74786C4775792B5749486741506B37644E6B55632B795765624D5A7679344F464645644E526F37746D6A34496C52676C7365516A4F2B36374A78506C6A7242774653566244626D46715953702B6B714B304D7746316F46654562586B4D364F44423238566641766771686368784730375154473752714D7767526138526B70434959787742665174783130744C6C654D4938684637445432705069565A4B6C6D4A7046776E596568586949786B364C6261413447745036356857724F306C554A6D707956725A345055777056783569706132757430646865686339394A536C5349724C506766494D6E4D625370517861617278476F6D616771496142697A7135766D6B6746474776616274754C704C77595272484B67744F614B306D46315A6F6C4A4A514A654D634D5A73777249666350316A4E4959353969596E637532477772586A775A6A7A486E6C664F56797370556D676E495277634D384E52784B48737256544C5A61447362496B565A75576F744E7566627141332B586F67786F47724D756D6845316C5A584B4B6563417361594A566661564B31696A56614C57394A3153644C786E69586F38424C736E67386B633946506D4D4C42336A6E6D57314C4A4D347759326C48674D576F31706C7A444C4166756B6F687A43643055535A47545161745735394B51416C4A364933646E6B4D79304139476D6A6F37537469305852334D44505965374846557461517464626C4269485031366459516747587332584D4150612B474754516D65304F5370756169624B364C596B7558574761316978786F654F714F364D314B52797664395A325A3544644A5870364C4D4377477A577946726D443835535774697356575450397232576663783457657370414C57694E4751436A6E534977674C6576444355745A644364344B702B50556F61424868754456437438316C30356E58494D7944596E52557656756A5A695A346B45704B316773766D64304754327955392F634F794A51494D4738742F424D56424B6C534F654C6D4E4C4C78733050707A56414F58474561552B5A39387A6E516437325436346F375163764E7A69526D626B33552B4D53504179453846564B63646B6A477130315431796C74446576755964626454724877445A4D7561412B344733764D5933447051724D41364D6A4E615146303771654D53513377537070334B5352574261706A6F316830417A486530307A63367A715A52316A79796645797951554F41624A7A6C2B563737495030786F5871616F326E397336506C6C43574C30427A346968515847355A593335786C5448715430356D4D41656E3574494A3276306C773754544B736C37592F4D48613742505747522B724A4D7147676438694F5453794D615A585A6E6869324F6B71714B41366D486235717030636F4F2F536A705952672B6A3739505041665378774F54796C4271345A7057396E704F3356323359547A6668526E5A42686E384B6439546B4777687557734A6E4B7A3452324373496C74414B6C6258784667584E477964694973473047547048633054614A444C342F765176776E6B7436776D444654715330597831616D457236523353397A376F352F2F3348644C3262346E36616E726D3657434965444944344149495034543975364B42795966523852304651465A2B6D3132372B6E675841547269673265474E58374B5A336E546D424478356151382B43552F524173526E6E77546A685649416E723653344E762B484D42502F364E6D4B526F646A337134672F3762704E4773462F76743834506D5961324876626363682B31344538446639325858746E32374B632F3878534F766C59462B503359793449356F64487479635169373742716162762B54507770772B5973767758325037634D2F2F384762614E4150734C55615947304E595858564E775432506E702B6734726D623333336166694248364E582F6E6670325462494C315358436F386341586A484F77452B394536456B3175716979694C6C55346E354F2F393277673333547930354D396C594D623352393537456A373037744D6968524B6159533462776843474D4954505678443768683747436B5332342B7A52416248677636516C5969326B6A4A57426F35356F47706D75634A776472594778525376774C6C6170446B357A5A6742696C444A41346F344F6D2B4255346F4B434F7153613953386348565455444C48496C64534C4C4D536C41384E4A514755476A67746F6D6B796C4262454756444E644E3150464338497534427369566752484E473174302F54475A52613341676A4238556158656845496F5663745A6E4332654142584E6336416F47556D474D6956444F444445554A446D395A327567376A385161307A5170647265364865316F65396732776E384B2B4F35514C2B783543722B344E4663396E3535534B514C4C6B5356696B314D34547449622F70516D6C626D53736237746E7446696F454C667258436648543550697A6F4A514936614B76636F67632F51715A4E39385159374D433368757975504A684C48526F65356B67486E6D315173445772314D526E62776C3249465478644765316E457136556D4C5339542B553070492B78633957366B73596463494D5250427644337759344F4B4A737746582B4E6A674D5841665A6B5174384B7962702B4E6C5A36354D34616442417A4E5A5849742B59554D3668756A6A4F4E73704D7153525456466A616D646D395A63693170635467614B6732656C41304B546C4A5777344D444C7937354863754F4B74596A544378415A3871432F4E6D416C4D452F4152626432327643334D2B7A55447436646F6F6352335139654B393474324A5654674A64313574526E4743535132365163756C2B364E31526F6D59396A58434A5156336B4D7A445431344F4E463645435A3130333251304C6F64633430593476424E7333746332794539576C6B776B47576F666141576D6651566877467744757544646662624831744D5A6F686C514162522F357061686A4E61346C42625A647A6F5A427463782B6A67566B71535639754F7745307A61664179596C4A614E515135474E7A414451696E514E6C656B4B355833447750484B61574E6667647252525A4637513836615A4D594C7464613445534454662B32394442614B546A6A62563877707071652F3930475979397973486D6A484C70694A37787265726B2F4F646757574A424544674D31725853327A4653746733744C436D75576F4775335366376E4B35356F66377949697439545A754332673961686971344E4A586A5446454F596E5930546133426A6B49354D7A77636F5262756830377371476F623677394A4D7879576B73523934334A3550365948445848553279584D6668516B46357956746A386D4C477675614B37396B7835566731743056324A42542F44314241386477756B6A55577935744955505857726C68485057316F4F686B51643844576A52534C596A6A49556A6575327939794C67764E4C2B6572387A5A6F6B6950686B6B70552B536D63694B56395961783866356978674148732F5561426444596D4D4C742B73676D77526463522B6E3246307A326E2B77366F6A4F614144456A767A65774552365079507178466E6B2B4B384C5772377A74774A3677716E534E4766476B7A4C674F307348613872757A757852726C5A635730366433774E646354476973736F324B79554D37756A316963377272507457536E50786F335A6F797967556A55586C6A50674E736B7A756A57585333546B64346D446B4A587A46467136364233564B6539624C535A57312F6937322B69373665553374566A326D346C763878794E336B657A6975334C33594176456C745A6C4E504D4E41694132514D574B643866757452534A2B3644506A4A50636169696E72504541595166416A2F30545A38416161544F627A6D4E592B6D42782B61346F554C7A474C6D4D30597A6D5630375771787648572F68793735784131596E54385042376B666830766E7A394A4E32416A54364864316167525048754E4F33736F7A61336D37674E562B7842332F7A423837426C332F4643666A694F7845506150513475547142372F754B32394F6666764970754F2B4248666A3231774C3839442F4261354F5664355776337A704F312B73716B423471642F5770357178415136506A37676657596564714430666666426E4F2F592F337776596E496A522F365741706E38783276374A2F41502F38317A7234706E75507774642B385370636E54386E552F304661546D6450413377712F38573444642F6933632B4B563268496E7A4433376749662F34482F7853334C305434395239354E587A34743966686E6A66303846312F5A513458377076414837347277496365704633524B4F59644A552B7973353041662F434C6D3344714E6274703631697652503068764B52434D414779642F7937322B474A687A634541422F434549597768434738394E632B5466554E51735763646D7A686D6D4F3677634172785A4553704C514D46454D464573514D31754553367A52723635704F4E6870434B5276316973336F71444359307A65736D4A4B706B67764A61474E52694D5A554D665767534A303470416D4B6C43724B6D4547676C4C57414853477138534A6C523261486C466E5A4A432F67556F2F4F6C6B51464A7452585A4D534B504976564F777939366C4F4F463030334F7573324A324E76392F35737A4378764E474D44526D5065365653636C4247755174624F42635A61783171553644723234556B664E6170644F6C714230477A51486E67644A6D6B4D45307267574168355556682B37497473735768684D522F5478517A4F51326954675177735653336D6743687874694A6C69364C73776C55734745746A7344354C6F7442563833795A495A634D66444A2B72797067432B776243776A4F344730666F5044707854456E4A632F6861455277346E4B345A724663574A586F6E69435441705759616D4555647A67486C596134794E656D61673163743764433242656775712B77586B6A46646F4E464774363177534F6B4C416453574E57756263744962313978697A45666F69697949566949306B4831765776566B6E72586B4A785A6A4A6937566E4647614C69794F595663556F6A4A544E75304446614467664C6D34444A4C2B7653473662697563326164566D4E4D37546A57576357785972396237576379636A6132585563794A7250596D364B356E49634377396958387541564D734C4D68713630776C50545A525A7269694A32764D514D5635417456414E654B724976537A49525676365A73573541586D2B6761675A4132794A6455577355755A4E4A6479724B51486E775371306B5952774462744A5366594F786A5A587457736261496E31546A62454F6D706775646B6F4679504D326C36566C734E70315A734461456831676561666F34446144793679706E6177654A553442424A57425061713075393254615567566D476A53526C483172624F4E45537647504A7165743869717946696F6351685A4B6C62794D6C67477A68364C45614676494C50506735563355316D6E596C643076483369624B7A757646796A6A566F777233777A46456573474C43776E6166756D4C506731616B3376585875502F4E466476534A47574150346C39422B3869306E417142564A315338445459664D43674A7575626A357343304D6271694250664D3630416335344C32745A4F4F4357563165685667694D78595736687A6E7554736551784F74752B30625146426373463742596333475253754E33337451613436496A546E702B317346634D2B5463706A325161386C31686557762B444A5158783857744D706D546764746378353242384D6A78726471593042514468746333543141543039706D78355172664E4C4132697A6630356D50336F596D6C3334474D4C502B7975577774324D534A2B787330316A736A546E784643505071446A473566527857715375544C496D71624649366B66755754636A58575867352F5937336A586E764B72766E7062615A57585551784D316B504745366D363851566B4F776D44486A70342F504B52725A754D4F5337725150626453576B354E714969434742496B4C7A74307A7A617A76646B524C45573531356F385454434E2B554D6432504F4A4834706A64497A53644A782B307457774A41764673666C657570334B36655976426E6A4446774675306D657676417A77617854764C3639424F6B58312F614D66422F776F5066762F336758704E6F72776D7938433770354D36647A5A4A4750464C7675586D364C3650776A44776E30417756392B6D37423059384430437772466A6E3264643055614455506F3849355876706357334F784F2F4642473135354738774D61414E6258312B44306D574D30344154732B365A7971544B43722F36656E38572F38503037384A39383962664258586762664E2B5070505162762F58704A626E7264625839542F37614C664439623572423037734864544A764347522B36696D416E2F697043504E374C734B7031783541324276423776316A75507975307A425A333458564577667778452B38516D62557348623157637435306D4C366A513966686E6D7A4131393731786975644A6A75476D2F685639494979737A7A69346352486A2B4F2B4D3633624D493733376E4A7A4E3769752B6346684C576A432F6A6A743532416A2F2B37307A446C79585150384E685A674563666275422F2F646B56574E2B69653268412F4A726245566257564150386759394265766F784774416E4C314C4C34384830646876684C396C696162344E61362F2B4F6E6867355476686539344D38412F2F32535077756E76336164345A447A333142734E343073505435316267586239784B3878705654515A415041684447454951336852414F6F584D2F614D4957484636724F4E6232622B42634236697566372B446878716B487869746D6F7368424F5769324D35345246736741726F4B62617278663261726747624850326C794F574657415A6135794A6A7A396A57653646767049684552574E564E52526C69564B564D4D3159396A314567783954366E344F324F70366955774B31656F7230556C37356F664F6177774C49794B724B7566503245796D3978493257514859776D37644971536C30304B4A5748572F6659516B6F4C7637703451776353774857746A4B3449636878645156524569733030454B4D614356435256314C44516A476A7A76774A7447454D6257376F436A476D7A7A43653956364C69795178514C2F6F354848597A6D4D3858304D30376D50644A46414D69617753446171633248544C776E5671723730692F4C476A4A794141342F59446D454A4D3478585232726F504D527652574A6E574750773167545A4171513066456B4347785445536C496F367573383270366330756B43732B516748436C2B776B587550677648486A6D46707A544A556151666B764D394C426E777356506C7A31486D5038616A55467062424C742B754C41394D595043665775417745676A375858334B746D365351756F443941537256623851437776656C722B634F5777764B7044494753426F4E6F4372364739364A4D53452B597A4F5673642B6F39324C496369355932384B79334567312F4B5461616167774D767443725465354931564D4D446B6264736271446A4F784171387A49396672773848747A6E715073355A4E557157796667694C4E72676C4156334F4F31564856335373455A304442307537617A646D5361316365577568654E6243796C746C58464946536D4D78774E55674B7854574F774E645853704D565942724C524846714F426E4735495A497A45557835767536424272524C374A766967685641616148485666434E642B327157782B6F7257647330425A5435563445624479752B6A676F64347A57515756654A6A374778636D324E45506F4F74616A4E6B56696B796B5959425A5A5A54346670706A6345714366483635426363674A754F696939584C2B644B4239733172364D375559336D2F4A50336B784F6259316A756766613877716731613432314F58325733724F77676239527744714E44596731673565416C48364953446248444E433339725761384C413666614D4F624B327352635936564F43754F64564D716262386C474D69775239616142784F67334F646348636736334A49497563526C6646374E57566C496F54726C4275453750504150636B5758386D743656654D464568666F3268574B65347464634B595843646351464C49686967334A726F4568316843497862446B54442F71634777664D68433265614A6462395A787354593579675348574E4C49774F786377586C3565782B6F344477704658573873514E45694F4E6239377166653541556B34726D4B5065336F787659456174665463536D69514E7434335251706E612B303844374D36744C53756A4F553357416465506D53774D6945784A59706D5350653344776D6758537A413946335970357350696F4A6F5A34794D717A39456D344768546A4D2B53393777324B54344C6B76664C58453131656470706A38626B53304B666E59464C2B7847416E7A5850325833645551586E476154334E442F564B374F3947366E306968736D2B50624E767079414F455146785065447670636466727078534F72784D763138334F6F473144417A6E674B63757744774F425873624B514D386E3336374A6761382B486E583658764F36724C532F6835616C5162744B4A59482F6A664C785476684F74676E674D492F6A6B43736D2B30346D37306333787552484D476673376C306E774564393831776E4E50335A5A473439766770332F36342F446A502F37374675634366754148547346502F645272594C4534674B3562364D776B4A74514770744D782F4E415066544C3938692F76774F6B7A4C7A6A644E357A74395A55414B39504B42546A5078545134584C776134642F3837677A43586F4258662B6B6337726D444234644E796637762F5162434239374E6D6B73492F3964624162376A7A516C4F337754774F332B514B4E304A747162502F2B61747A51416675473847662B2B2F5077632F2B503262734C6F597759632F4E495650584A6E4250685844316B6D41523534452B4D44767476426262316D4472333939674E642B68553434737A3241432B63416E6E794142744D72414364516A7A2B7462624430525656446248326B4A472F635A5A6259564279667449736570764D3947464E6B7646694C6D3273774F37554B61354F7857503935555870316E3862312B4F49307A742F2B494D416266364B46385733664169652B52433271687A74557A7053503353733071787864686231372F69726364724B48697A516148307836324D51355457776A2B496D2F645476386A66396D436A2F3056352B5768634D516E6A75772F4D6E39487A774F48336A6E5454425A36576B796A6B4F684447454951786A434461356E6A4D45706D346E654244756155426A585751505A634A6F594B72337132736C5A7055474D797734534D3468674B467247656D516A4578514A6A7658783832755731636B5A3246684A4A72732B73624D596B7A4B554851426E6D4C64775A50455A75546367784443614A42733442776A30474C5564434C4E4E6E522F31723533617154683238657359445267707A472B73645A37524855326D5A54436741504B593342306C35306D5649447A43564B4A6F6B6F4D516774434B374F695376304752357A4131434D7773624D77694A53466A684B696F706849756F36732F4A4F6634466E7A465A4D4B5A385531467056785A564241796C474A53624D36523541716346385A33644F7A4F77424B5255473945383374436E3439445133766D455579705469633941396F394E597349666464446D433841365764446E38306A2F55337275363650516844446A676C62416874436146453067526C6E36457873652B5279454447716C4C6F56754E74682F464242397262597147784169674B6161537649674579524E3148566E5651416377653049637654616E4E4B367377795977776D425A4A636B69516B74373849667552345363544B5A6167784F4A50316878696F524D666D4646416476346E2B6458536D736F4A54364B614E364A5867724D626348344E49775754414F56566D48577635334D5954566743326A77562B6A356C36734446356A7435626B475979685272465A7361727852574D376177434E75684F46564E496856364F79385271747736594E7237627031776E4F306B4264706C4B724761644C4965536971692B53464D6B6251526865584230545864596B6A73583572644B6E7A6872507069567A70782F6D6D55444D7A42756A4E4C4B4369627943746D786150464D6977573076305A664F6C556E5455495655526C6A6B6955596C6E77576347396457474F4C4B54714C4E31756B736F51465645426B5A64785162664B55506376702B4777495736704F30356A56522F53696A6561616E61704373577349514E3471634D692F747857493564616534494E4F4B757A366641704939655446674D4E6C366D4E3955786C586735396771417962434D7670515855414B73584B4177593233694E52414D654667627338723477736E5A377534493463596C5A447761577079755677557158425835383441474F6A4C7778734438557749595076345A4A6A3165524F527330347A4F4F524E4253586E6F68394F6347523433494C672F754E694F716F6B3846546C33794B42647A452B735247307773776A314B662F4C36784F615674716C4E4D7873356D5332796A47756E6F494B387A734E30525A512F5A49533161483831644746564F4242746A584C4E7A536346384B53467A7A4E3753516E51704964556268376D427950736D7A394D36614F7741736748467759544E6B382F5A7662367236667A3069447574514A6E443262466C3535725A4665677665746B7A48622F64534B2B43356E6F796A4D6F3037726F5255756E624F444A6E704336546B6B6247566A644A6C6F596C754D7A694A47344930416237455971524A4A6F3054622B7173695235764151374B5A4D4B6F392F584F38794B396E484F7878343238687761657A7271365A46553933752B7237744B53626E6962543478637A79704A6A642F5355566A67336B772F786D745379453554544F6F687263347A4931464369682F7836306C657238776C7833554144754A506857354A5231346B352F414743564E67375254366F5473514E4F30366941654A7445755A364E486E4F7467336C4C4D3747787A464273386F41375579386D5043505046504D32704147595536534B77654A563645372F513643544B666779454C552B64505442626673716161556D3962533855356D4E6E705139516647745550477655663865486861584165567872524C4D3966594A2B667254564E726836494F3074745165735257527952677A675535777279615265786A7076634861347A624D3844304E714B2B5A4D394F6F367769752B47394C44442F583436422F32596A746A655A7346545349486C4F375A784357394B48374B6642796A79416B74544576393170735237763161476B62594E38436A674C4D4C414166307A716634464D49396B453766707550525A776945582F66764151532F30634365477962556F76377054774C38777438452B495058767851413965747346726E466E364E572B776D41562F3452774A39374446612B35536A63632F6156384265503351762F32616D373463374E4E58383246614138776276662F543377757465646C6B39476F794F69533352742B42662F346752383133646467682F3965772F423576726B57594833777A6D31344D6E743841762F6944724E443332524844325A336C37754F486352344C6666436641674A664F52422B6A764A2B6A6E2F514466393965706F36376653474677387564776158344666763258547350357877413274674175587756385073765063316D484A7452425A374D452F2F692F5059424C6E3979414B3439753069433443534F4B65337A45466C4437374E517734652B3849384A762F4934753668756146435930754739754A6469674472746C78324A36476A47774B39363273542B6B79653063744F6B704775494F36624D4E366F553351647A59674737637766376B456C795A6E6F64755A5545443356466F4E3035426550526F676B64474E39526265633537464E66686F7A51706E614C373330416A47683964577148485037344438504D6644504433336D6B39337A77716A7A364E5565446F6951532F2F73756E344E666F387242354C3841747877456565333931444F344C4863325268576D452F2F4332572B47525432774A4744364549517868434150512F63775A32575538596F58324F4E42516A7633444D694A62414D41432B786B536778573455544D725863413673306C6A706450686D3757414A7039644152305634784376795955776C74746C4752496849474774665A7863526873714D484B5A754969465959366531674C2B75465148756C354545347236516171496C316963515A6F4879514B45734D54764E6166384330726E344842556B43455875416C723246463241612F375648434D566B454858415A5A52666E616F5658454375534F436C514C61624B4A3676635061766C7A3832655753715577316857436C5939526D3274654875747759496F4655304C646E3461596355785A6D6D5359316B455A76702F4C524D6F6C715535334B70496553506330715945786C6657453172494D566A506E626B795A474E6E78666D457A306D5A30336E64773050576941383548774E76755543524E574F3962307346414C6A75377048643339412B66764A3667346E6970624C4B5631527930394654446D7748695868306F5A6C574D5A4F7273744538573441416B336D6961333434784A33424C524C525437716941526C4C70456E6138324E7364685648654B494152544936363133365A6A426A4D655642475A38724D384F7A694C57723879575174634B34496676517567437A703075572B7844724C4D536D416E554C4261425756566A7032436B7336343456745876426D2B3777536A3247477170744A73484A387155343544664779376957344A4259304D6D435736463253783242674D7337317757436E4F724953415262444631594E766E62616C77786C44445650487774624E5376396F446D3069387444443662734F432B44354C467935476A36777255736A6F4A6172752F726C67767670386147526E585469716D7A4F4D33674550795953567761503156444634754553307A6C3545736533324A46484466745A70634B3852746A427256644978777A6342314E596D4C4A6F61644A6E6A5175645941465848574E614C596568564135346F79776644546D32703130584435664849334A796465686A636D6D523537477A727857516E2F326931724C394D544B435349555044716643426A704F335573636D4134464F5974514747737071723931656B4F5264354578736A655A422B436A626169725A526B584376363571414A36564F70662B6E4369712F6D38524772696147766E573969705248645A304F474F672B756E572F326965594F63397A624343464D704B523647326A794F52596F2F6975797872333349332B6E5463444F71426436484A2F4D6D5759624172727A545159636B786B3665686C6D44474933646E35306952746D5A682F714D535777457A643273694456306B64594762567A33714E4E55736F675A762B58576731754E75784C476869334F34444B45617731634B7A3077465744764B65784C6B6F637357385358584C65526A7A69306774464A3134644D325970497A6D7845465547673632394D6C2B626B302F5739325A6D4E544F302B554D2B6F4E4531644A76316539624C4673437A4C787041597047316F79574D475978616D6C796E564852726C49774A41383735544A6430454C626F38764D4F734C596A564F5A3059314971796878505568615550675938757768466B73664B71424F4457395461306F6B6B79596D49425532797334447450496A566F574F356C57526E7A69623047634E507255357437496544787931756B35774536714F4A675673784D4742786C4E72314666493573726E432B6C446F7931715135382F596C445559316C596B30355A44395767742F6A6C462F7156526D614465547352495A665978547A34364A69575A744F6630514A6455764F655158726F665A7242504D585773764544354868324D302F6941376C2B30734D4B444565646A4A516E776E5579626E6B48694754572B325272414B7738774861653048314239635472614854564B48423642744834526B4C58524C32354375726A464270306B786732756F434D37435535645A6D4E4667452F647A53634A454D366351337A34464B5A397A76424367584C4739486D2B763533695771573450335938706F4E47644F4868464B583356587342662F5074414C76546B4C71375268426E436537382B4348736E5731682F3051446B336B536266544C4D35513275576E392F44546C69342F534C6334442F5035624552366B7A6E4C504C5A427533514234344145394966447752784B386C5259515530486D417A7A516F786A377A744B44542F546164703763693344795249442F366A73524E74634250764168675065384A3845616C51667230582F4A505168333349466C634B334341494B2F30454174373759336677536136526C342B4C6676654B4857687866546B6947663358555877442F34423443336E4B576B37514C73504530645A7A534274547450774D2B385A5A702B2F2F774D546F2F58344C64663835666830623046584A6766774A32776C746343502F5A6A3938445866643052756E34465A72502B6874504F43354F646259426666477543372F72476863342B73692F347352656A42504147796B4164427450592B636655576437312F39473473366544486F2F4C6233386E776F6D54414F756245586E77767671656F3344356E6364456E497374686A7952486535765162797752524D3044666230334F486C44626A792B41596373414F4761512B6A6F77416E626B7577516F4D4B6132477839623148737A6A3747544D62357A6F2B62306744533850577446326D436A4651546C39763069423168416148745154376250326947574A456F394E6D667777326159545A6F4A6C7454446376526733736A4E5A6765374946683164626D463539344C6F6C783550445A637258597A655A7868617A743139464138493341487A523754724250665149445536583154507876364E5A6A33584C4C6E794B6E6E6B77623571764E785A38786F45326537422B4775447562303377314D50306A67562B515138566F3347453763746A41634433643063444144364549517A684378666B726F4C726A2F6F654C47383871795041745A5A714E6C6E37787153704549636149496B496D56675866544E634F5A767A445669565474356A344B68733870734B4D4D68677136383530466E68344534744B7865434F68396E646847546D5949786C304D4644465743793672496A4C705A4E785A3272546B754F4631586954557A4B74706B6B453732355A327970394430676C31474E706E6D7545754C79484F7055597170494A51753073324167736C44437773365A6B643544684747564B5346305A336378535971634D7A61316C3751526848754653494B476367323972765854585277787247504B473758574A383731437A78446A504C57374350704C373331416466584E496F4669346F705576754D516167695479497845677756726D63584F62304D4B42754775384F4869675857536D6566486354354B4A71622B6E394578696C46526A33553241563842457672585178544D75756A717067515576414253796F506736374F55526D4C73325A38394452733554695A6B54373034614A57496F464C434B47584E2F426F46356C53456346586C79715862436A7A73444C5A4D66346B7A4F494459436E65354366362F6C33696B586456357267533141516E592F4F523954664D30644F4D434A6C65346F6A7A6C4268756F42596E47564B52535670676F795A4251573870636D4C416343343355455A37716E784A742B6F54634D30744458587976524C6F636D7944485A59514C3958554243544D7651304C774B634A3932314367424C6C64516D6C775450354C306969384174304A74356B6A562F7469394A2B6355436F6A75347735387458462F583069794D62645534546C3434306B65634F65724F497245342F3675466856495A4C6F724F503249653737787A515855364A4257782F5878735030757A424E4D557472464D783035634169625A577841574C5736316231585774567166326B46494934596E54305254653145794A6E7032727369397462476A43723370344D5A6B446E71784150354C34335035504C4E76625478317472324D3337556574316D79527262685938424D4842566578396C6C724B61492F4E4F51565755344636656757435032714742617A5A644363794B716C6878395350536E7A564769577942647A3167714B433535683355316C32786D69625857756C6F537852474157324355765676586A3648597451584644587A6D4446624653426B735251472F736A504B6D4B73787559576C5679597A62582B542B6E68496C624E6C394F454533566172527072653638596E4B613251304F67704C4475426C5A4B78726D504D5274496F6D644E43534B4C72454530596E37732F487839695465687873544B7234634554594A5A6878613956737A785754696734723832314A35374D30544F4E466D3770624D336C4C672F6D715062445845325778315437384D426B4276674B3930374B3273397566554D73636B5751703730793771543675455A6C66552F3255786A57706C664E375A6764487665486A43326F6459657479634C3062586C3831484E6F3641343035397165517A366459453479597372576361756A7843427875324C4F726E584D45364F326E43695A7168457775794D56697A5A3930706E513174693075566E36672F576D527A594773475773553341304651557A48634D5A46786B563458592F3173567A5669645755315738436F3262784733636164776D725973374E64426F6E6E6838622F4F34706F34635973736E44564B32446E4F623673334936797A2B55497A6232624C6A786878754E30486E454A31676A5A58504379414756345756627759506A4B36567A785A723756596D715A4F386256596E5463544A6354414368667265447349347A3664537841474A6162697A4F6F346476786C546852774A613554325273657150423771656C546B656E674F4D723134586D2B7863355A6D6E394A774B424D757A6B646C434A74744B5575664A386E64307743585161526135495242426E2F70397A3271332F766C586D5A4B30717570375431307137446B52514B70356A4979426E616537753358424F535838594D6675304C6C3966344E49337A59654C704C356658374F394E3061677677706B716E6E4D74332B794C416861646F795541337235344A7545377461324851794A5461786F6650417A787942654273304870384468777745336E584B49346E4C774838772F387A41622B5045633656565732483746543067596353664F542B424675553971382B465954554F6F44676E3046593744527734745737735046566A38486C68302F422B58654D34664370467862486256393645633765665257324C31504C617950737A63667739434D6273504F706C52635544303973764844394D363848334E79555A6B594E36696A382F6E336E306B4F5872384B33332F3136654E75662F3576535949364F6937456250774F412F67336675674B2F2B79646E5A574C684F5753582F6C312F396F3377637A48583833647231474176554F66346B5238422B49456642506971727754593265476A4C625354475855776F784841542F324F70776E4F50544B4633337A725566673362356E41715A73415876303667503139367153504168796877587556346C746A5A775130346F61754554613265435A753954684F7349457532686B6663514242672B50574359436A736A42744E4C486964595053454F66302F43474E676A4E49753733736E4D66303339724B424661337868434F424F6A57413278505542776C6E493936624B52767971536F6C42486168634278754944484A666338702B3352765276302B327674684E777A6747394B3977486C352B4A645970326C3352574B4A66656C474D5334535350586D547550304D52776C46726A4E763138444437624D7134767463434139344E2F636854652B33746E615244756F52304E31506768444745494C332B414F392B41426354784255646D6F4F4579774D794C3439595779336271666B6E697466595536513769366F3236375A6C554A715541784B36623754496B6D5A3170434633577849317043574F58592B7939622B6A7443392F7752474E795251665955354538435573654C514863575A397153626969696B6E724B726957326461323455592F6B75354165597A467357576C2F59326D6661316C57764163515A35645459446A69375A587A766963364D716155386C514A4954643657576C7156323238676F6842317441436B4659415065574E3036673257714E3742523431793658764B5852665751544C6430515A65455973484A6B614A74525A32426E30714A496D4E443047665641472B747763356F466567714F6E386E4F5578526D465A6452346C554468754D6C4C5976576962575452764C53524454703379516E324E4746514A535A69673146316A517165394B3245326847744B366354476A703248424F425A64706B7535306F376A4D36576A7665436A4F77554B336B4C776F32494543445050564639526138494A594D66336C4D4C624A68496A764D6C64596F4C7A3338726D314B46757557744E4539736656572F784F594F52556455773269306C54527755524B6432306137626E6574724764764A395A2B5439324C4F6353784C5A356C362B3736457237386E677562444D6B374B2F685A54594B706A4E494C2F3273794C3749336D68372B496F4B4D76613475466A3746474F72627654546D6F526A514C6A685332654D704533412F48576C324E546E755879307A6844775631644B443437555573714978684E464359627545425A68417654424F356457465951436C72796D31457242745045786B717A4879302B7A4F50577369617433304E763741706F6E6F486B5768772F4C652B536B73744F514D58597264426A5A3741573972583541736A6A586C394F59324931486D6332652B564E3174706A4E6759737557483138644842597A4157746F30336E5A566237554D7A342B514F42466479474749345A425975375765614C65304C4C484D67736761723571435137726C364A534858795A486A6D47356B4E6B6F4856467948526D7131397565746766643159394D565279794F2B444C34475A576436564A456A58765874665350545073384654437864706F712B375057324C4375775134717859443546414750616F31706F4E766F357057566D616263356865314159552B47716C4A4539474F796A546732766D4B7A4B55736B6D2F71435369473138596B444A695A6D2F756C616269676971787A6D614E716939744136524E674B334F517946486B53534E563963766A7254462B7A5447417A4555685A4F43527A5845366A37584A2B7744616152473154364F65522B6B4E324974364A666B37566D6F3750726379654B2F485A6C4B4D7865696472373630343278415174556851657563624742705570464179614331537A635A55317A6D7674364D345A556A574238612B6C6963327A62672F686D304C63646F386C2F46674944525A59586F546F745037706D35446A764C774E4462786E614B72466347745A544E77687A504A6D742F3066534D7A4E6964774B522F6B6C6D557372584E7055765934654E684958776E4E4F4F6A4C5752534638785A685A326B47476C6463622B4F4F33545446615A504A394579312B4D39785442565379443142744A6D4A364B4E5863474D4441616179714B674B6373364D59624C535341314F4157624D393376536A30652B72456F356874323052783078317A2B655533566432365A6857495969324C515244395930466A3745566A493868456177387574666D4F4570524D38376A59374C476E35612F4E6370434A76433957614A702B61734145797568384647354237366B685A78782B4B6C4248726B667570475A654F7955654F6B72716A476450733278724A516461535567666F4F6B6E4A46314852634B672B6B30343041627949476155694D5A6A4D514D4B4F584F582B7359326C37505968386F55345958622B5167427830666C4B4A762B794F396143585A694D6C6A6C5278736365426E6A346B32724559766952543948496D4E534B63686C3839447776496C41642F7A6243344265432F7746393979434E4859455332453552324241645263782B45525A574E33747A674A586D47554435396642472B59776C6C5766307A492F2F79776A2F3562636866503258496C7A61473044777A777A773430593852376A704E523238636D4D58706A73642F5062626A34734F7A76584378736C646550556250304774617754786341727A672B4A556B49384F54645A37574C6C7A483962534173342F745170372B364D586C7077622F33377033704E6E54384162762F637677512F2B56494B662F4F45442B4E362F7550495A6C4D71656D516B70376432614642497A6B61396342586A6F7666726930516241396B4B504E4E566B4C6D374D744D6D41742F7872757436696E547252414E33794C4E3633734C2B37436C6376426268774165445346653277473573362B664941764C594A634E6558614B666D79575865617877396C4B4E376F395242322B2F7843453864645939476973366B4C656D47726A57475153383049375A53703755784C4F696130652B7A646B34543134775763523150577244535471465A57596556466659535052564A4650596766454278734F4F482F59582B35456D2B54536A4F463278636B55583133735246434A2B444D5566505837324A72714F5164335176414B54346E4C704F514E6B466256433976517032336B3335762F3042326F4665684A653143324D4541623366382F616242515166324E3944474D495158754A67646E6F68594C6577706D4D424F3634313347626D7449505759526B637159393268776F77736369454E5333523932554437736E4D444C6D347050327078344D6A4642642F7357783067313875666F77464750666370795647714B4B50727266706D2F32554B6F65557874495A6778377A466F6F72794559494D376A69657269656661637370714A487979654D6558635752775A364D4E795263766B4949644750657576783663534D626E326E68625A524235485247642B68734C627A2B364D7979687354424561394278746679444A476F45786F395555586C4B7A6E70456D70686C6963546B704A3966546551774F685153512F654C2B6B6167534E757049424236675A47412B697164304B75457A58534436566B37674353324D5179584D4779787344726C304E6F7532696773724F2B4A6169692F4A4F415237514A46626C524C5143344C7A6B6B745069646A68414148554778326D444A2F376B30466A6E41624E55444A71385A784D61412F6370665877785744536455687247674E4D6747727A594267583565593135324545366D444D576C334465384159647A51397136683132525158334F52384D4F48653057526469576C447948796F7A6A2F5A3344486848355538304B7030535454733855574649393244574E71574C50326557744D4C774C436C43746453727A4767664F2B7A69416A727359554678386B4539666D646E544848574B6D384D47334A594B516737506B6C64635A323059416638545761464638596478417A51686A6B4B5A4239647959474238763551474F324F74793442364969326E3164514F6D5677502F5875427A417135626C584449775A356A337154374F4E425258396B56302B327763534B366A54726359304E34707A6E315263514F6D686472776830552F544D514852574C57554B4132646456647033394C514E6C794F687262557842716C4C547177795167436E795231526D567668695942576C4942486D72305071614D533774665041454532326A41724C466C76642B6A7469316F544E753263656B522B70734242484732316D6776644E5A7A69675741636B336C46497675632F594B6D3356584B70444A355449516C796144564932764C6C57425754624B614C57476250624255567344632F697A4C734746717967474274654246686B523275504E4F7A30437631696F5649497777726456796B52506F536962642B2F78612B61654372695031527A55576C6E4A5052546E545763415639595545474D41706A5551764D6C4F506A476633456B4A58523272387552617A516C4777632F4F4F46312B786342534E634B69575362557375594D3451556D633152703550494F3872476B43457665557757777044366241556B42722F333172423063382F5347377475694170376469544A6D7233306D387954746959334D593355304B484A6A544F7A574E6F434E375932446158697A3830303342675856574261477144786E7A68473775524B4954584D6646337053516D5578326B7171682F744B7039325033796E575355387631645073414843327233766B6F4B6F73377268564150466B756B37576A39535270544B524D585A366F694E474E305A6A6C6F667838777971786C564A426B4731626C4141475375486E477957544F3577326D57436774307257454B5844562F6F6A6B57444B787A7050577255726A52796B683072735061567374334331305A56502F626869302B343979375245705167304337586466484E71524E776C6E65313970626C637651596A6B4170533059584E574F57427055644F42627047314562387A5134734D327A644E42797754797778657831577030663133306F432F4C72723532324C5733446A594F39356277526A2F5042744F466274464D7761636B596779356E456B56366864717976564F656D5541536A58776F47767A324C42504A31572B6F67646263356C5964474D2B6344573447555A774E6331365466536E572F5559584A575A6B466571334D383164536F667A314A7047762F682F37553262484F5234564D704F627947666D6C4166426E376579746577396C347039374775753957416F5A61566F493566316532326161324A55595A76614E574A3534776C5536534D744955334C4938724A776C53396C67742F63596168786A367A4D664153504C42646E4F6C72692F34704674486934375579414A755450464D61644B62636E567775585A4A3869487A584E43465457632B64466A696852646E4932725549786F306D3661547051512F317751646E5069595844536E726D4253505A7A65422F6444656E79426E77357164455034317743437630686873516877624B57444E33376A3478445741397A2F6955333435456555483333794E5A666839437376774F706B5679664C474A367A326A71614F4F3536355556595055494E634B32466C64554F33766659436268362B7754754F4475446D33352F415274335849512F6574386D7A4766487278764A5972515039397A3350664371376475666457663766663931442F2F2B397737686A72735059585546344F795A41442F7A637A5034344873542F4D7850723137767352747879706E304950414372347A2B464E353935427838594F73386459346558724639416E5A2F36395A30372B326E6F647365772F762F6238447A567745657551527774644F6A4F7974504161777A3436597850544A7A48734F6A326467735A45664F416879375136336430756D4E5A584634774F50734C763378424C5439597A4475746D456156326753507758392B6D3277662B49346242397059545A5A6B574D6F6357474363324A70482F462B54485945666B5A475042613166495A316C654B642F762F737656764D62566C32486A5447584776742F642F4F7655366471756F75753674763772677474776B34786B684F4341516E41686B526F5569416B486A676E616541674569526545414967654142684252496B4A42415041544A636B6949416F7141684469786A47383437726262376E626671727672647337357A7A6E2F2F2B2B393135707A4D4B357A7A6E32367571753771727136584C31583936357A7A7236733637794D2B593176664A3857563857456F594D596E2B4358736D577836596B4642594D7A4234523573505A587A547037594B4F616250502B76517A6D7946652F41504447356B572B42792F4331646451796D6E68316D31373566795754447A716E314D6B47435162392B67317531397A2F67463044706D636A676C652F7157503655765749564C432F572F2B4F312B477A2F7A73513368792F734559686F54744C62496E2F2B6376666B526C554134412B474537624966742F62544A417654684534494854347A5A71484E5377723146315830656D312F663265653632434771686C32686353756C6B6174734338464C586F78496F637652596773497837497255326970564A324F49526C535971435556777766764679356E4251797446464A6A4B4F627041586F51725448506B547135414E366B3674364F4F72653832432F312B394E516531706A456B737341386979594A3538574D467A6B41474144526A526E704B436F416F33724F713563366730684943446847323034643675384F674D746E436A7778384D764E472B3079417931365856706663486259436F596B64706C334E7A3432436C7852534970332B646C5749434877496E57317652484F54456A486D744C476952312F6F433273375554433637516A714330622B6D5662445A35424B62396D6E6147304C6F4B30346C6134646B7750554470596E41382B4659794341394D6A2F6D7753674C5759307154496D776C73412F53304E4F41724554524A6D432F6C726B732B4B4C5A776C7A4F4D3253344D7A4A76574B46516753644E3630315156456C7975694E582F2F6A4C392F6255422B415A344F366B6C6C7A43694E375653365159727938494C62774F4E4D2B49534D6941574769516C746531704D356C534C45465049617852636977363256344F583548494E49726D78465A4D776A6B3258624C6759684D2F66516D565A4D485073574261726669685A324F63637A41716F4C75745558744175436B727A2B337A5243792F365A54307176475A644C6864664D677568546A6E322F4A7455614F474665736269594468717943307933724E42646C4B594C317833324B6D686F2B6D4F464E666B4C736F4352523147676D47742B75513155485841456E765A2F6C4A54542B5A704B5051304C62306F474A784C2F7854426D4F64564531694933386B4535496D555A7030546C5579694249506F69767479357753785770714C7259675579366C6C68566B6B7555524654687246654977583457553878586B63594D662F58704970736F39476A3945627338746D394355676F54542B6F78577656365471644D312F4830334A6F4469344D6D665335796836704576474F6B413037652F656B61385473453874455A6363444230646B426763424C734B6243535539767578694F79537158514D3739534176436F316855385A466670764138774D567243575730414870675649484C66564D64664B65752B5774706F73364D616974376B52764856463864346E38754858582B365939365542673732757549376C7A68704E6E64466D3858755941326A334A6F5664556A56417A3241674B7A6272673666665439504243634F4155704F74327143774134716A6A2F697A71706D4930483976565175574774524A6F557032554D794A474543634A5563517530644F314742657247395951797A575A37524E4730746130326C5173786C69776C414E684B6B6D58517A744375384161574D4442617555776F43313763594936414559677438634163796E77633175772B796954714C594A5A4E496B7049556F4F6C77307152746A4F56744D596579354230346A446B7855574D57592F4A777768506E796F4A5050735862534974715264432B622F66513555684D467A365A4C76786F795A54464531335637646E484F713130476433674D58554643415A7761364C426A52784E537A74566D535644376B31435379747339466D373542693538545235482F587867734C477536436268615A6D6768754D39576A6A5553366A76783072436D2F46477357544F3656566C46675A6A6162674B384374427279694774597A6E6B32417A48426E6C346A567167445542417970787667784B5A6973415549323531685376532B2B6C2F78777332683271593634583945675944505734366F7344702F50774A4F727376754C5A4B7152686D3667554F307372457041437654715A4356427254733043697439366B67632F76784369717936516866767048377639465973704D554F554E5676677143592B655155774A58347776714F61504959364B316E49435657754E4D4A5777343261474D547378464E726A744A5846783164564C504F7175466B616B2B554A6D674263665A387579386B7A69425A33596C66504A63564737773936377A2F62306D6B6A6F476467734D7364377750485542634D5A2F4868564C654A597764753072463131585836564F684F544230634F516B35383547614E3838446C476F444D4274766B637873585742454E706B612F492B31676851797672354C414D746A634B504A6C34796E373547687A4E43365A3733416275456632674B4A734845507A37734F3032434D3939644946624C7A33687833384A7231324B4E6D4453594F6C6441393076522F6A557A3738437239322F68482F2F4C373849662F572F416E6A794459412F2F3238412F4B582F5A49542F2F742F3661586A31747A6677747A35374158394E784F767641507A557A7850632F4D6B4676764751344F58664F6F4C7436306477392F5A2B5048483746734A762F566142662F46663273436A6339454D6E2B4158666D476F575A582F3644392F413137396459432F2B47646567413133714E2F3935446668777A2B31675A392B356B784869762F3066377350762F7A376A2B435A61794F6338555131586A754631667048344A6C524B442F486344614F2B4E662F35304A662F5432416130495576776277416E666344336E5A466E5A5A54786D556C7479797A2B446154657236757A4E394C4F704D7037535764486E4571354976636566385064374842736154467746506E676436686F50635A2F6870384445663467715735545950554C645646796C3147654A77506F384D6E517A75517A673555777555516E797759444F71694141737972376C4F2B75565A5151354747374F38633753655049717764652F685044776D2F6162332B5A62654F6365777533623379376659426E31553736475A2B2F78594461355670535851353966366A326C317A3850384964664944693659794A5768576659675539437145447668303157375374682F502B56483948584279494A7872504A4D7A7959662B785469375A5830514D2F624966747350335162766A55517636746B73723466543648642B4E376A6A59627932526556594D6F736471414B3464422B32706B4256796456565A5A52713570586565445467633769454E37696942756C466D614A696F4D7670434E4E4B4F4261483437563259654A4A72566751516A4F66736C6C746A5941655842446E4C457231484A30497757585559376B56556754324632707758714A4D6C7071784C5842585843426D5137384557494963354B7A6E535057746F5378772B476464504144764147465468573930676A61785A546442596A7077522B72346A3248714A4A71454A6A627273765579774B355A6D3437616438567A6C50795946766C53514A566A6730526E62495A735A3536506545724F4E6B7934454D7046625157755649426E3050505963695243714F2F7669396B582F4C2B7842796A344C64474558347074314E6871774A32443075786B6557746259777868554178776D536D4953742B452B4F72394C4578356E34387A582F53697278464A7A6B746E6B387170797045716A456F3455586D656C597A4D3952435A477568594B687049454E467242627953454B696E546B5458366465504D5641484C6A30717A796A43636E61454766644F6965524A634D55537A4235565442313438716838646857646D3572504C692B3562332B4669343566753735522B4B58512F2F6D58656B727A4B626441637478755849575371624536794B4D534F6C674631686A4349672B59342F332F4A3773394B6D4635633346716872775A6E2F75344F3562486C646E5A314E726B513479474D7838467931763456797665583937525372454D423853566D6C5578796A30754E4B434A3531586532414F7356374A7630697638746730734368533635363334536A6F4E6A474667664642634C6A564B6F6C68524666567172323775636E3750444635566D74544A326F79614549306F334F7761636F59342B4D325753735235492B5677795A714636327375355968535A73316E476C56716D34466A2B465A6E6D55375374594E4E636B6E6A4B366C61676F70655354476464687032464E646B32564252703839574136396E497252413249436B5A746A765651534449356C30634F49515432616455615935562F4B72416E55423173356B677545465444515633504B4C36352B315A76686B34536F786B486B6847426C4F48705933736478324D647437506A587A393278766233426E6A51572F7A377259454F66735A535A54794E725A2B4B727271735132534E6C6B746A4336754B782B424D37435A6C726563394F637654387978326978507369354754646D3754705362584A7836364E746A70616C46753371795246366B795839424A496654363862427677426C7A612F4A7A64735A6F61416F547568784E646F617A4C4753546166616257615350575355636A366E4E3379376A42574634544F41794B593046726574695A78466A6F5362396A62325A5A70647330584E5A6A4961717053646A434778467559743933316E41317636445959314F66724E71694D366F734C4C69435649443943684164327A334C36517571735235716C554534644868665534766D6E726464744665706F726D5130336B5139642F3956594D725A704D69307938424551626B6E7A5679325A5572357A4D6C4E4654696E4A636A5374436B6B6A317249747276672B316B6F366F6D764253645742466E5A4D516A73474F6D54724478374941685336327335784E477A765A4D784577565365694C5239325A364335506C645A7936353552784F31796F5073593537715A396E39305765794D766B684165396C417330795A6B6E36565352634263693973687A6E4C45494241715971554D6F48326B67325759494A6B393651697258526163544B707661484B63397456716C5A704F3259534B6A64493039676B3551317A54776862425A59747151794C334B7A5450526A694749334B3775534D566C59696976547A6336654C4D696451613971324C764261576B524D76574F356E5573667A715331746A5431652B6A373436474B71753872397A2B4451637A46337765477A7557414D7643425654644D6E453552646349456F32794C634A327931655A4A316A47455449484F364C4C6E6137784C703077796F38486276417A4F2B484159663071763737476E2F472B562F7A626C514E4555586D535573512B3351573036685A54557643714541775459682B387373636956364A79774D39305530533678424F7467797371514A4E75776134794B6D656C36704F366158702F32353377645430654E59686376394178397738672B507479496675324A742F336372743348654158662B73682F4A572F2F444B3838506F6E3453615052712B38677A4F2B64517668762F6E764376795866785731326E4C6973487954642F44506666796F337038586E775836722F2B5842502F4466344761627270324F73426E2F746B4550334A30524D642F35306678345A63422F70413735613973644E4773452F544E75377934754175714A53534E2F6A53703661744F65724A4A30483870332B646A6A58674F61337973575449597A6E6A514F6750696E6A2B4C6D61514D554B362B4971566534335565354734384239756A462B41632F717877776E57674532463872546157796543524F644E5364635A756A497349336D7132756A717A754D6B416856463978395A776346785A476A3668434D7635616D75486B474F2F78672F684E333646644C434C77474A3142764438523330692F3436414D642B4C4B344B72722F4E393458312B6941654B75382B5A592B34762F2B30465076347A433978376875443871794E3836624D6A504F47423963356468477650666E2F4D4C772F6259547473333361754950686845372F2F34473330314E7A2F5063326778525A2F2B427950763344486451614C6D524C4B446957496C495834707A396C782B4178586565496A337A4B463843392F6D5A62674159747565704C3930792B5773616475704F6E7867794D457673557065416534454D7A2B634551574D62537A423262487958573547386E4664745964686B616B7A6C4B69464F544F6850645141677A4D2F4479666C39344C4B35395763746A4F7746624E33593050342F63644B313147656D56714B484E62566F43515A714C46626862595557706555466E5441646E4B68612B426C533741414D5763684B3051714A6D725364384F63585A585558556D442F3258566348635A4938596F632F70565163574858366F415057716F6E747A31495A3363477539696151517533593132537041735147526C417172706339714E7748757379476B66624A6961576D615A30774E54554442615752346E67447543476C6C38574C444568436636584A724352464755356C4D6C4131774258416C6E3049775573495853746A5A772F437A395A46384B5435414A456A305739713843566D58364D41354754486D4652585673727335626970536F2B49752B4F497159784B7778326D524F6D493137496E4B443564694637524C2B74723851346278506672794B754668396F4E5348597637773972535671416E6F4C2B6471312B58366831665566366235522F71307241754639594148314C544A32554D465376305A413544716C6579787359694B334C574F333641586250436E5337496F4C685244514C713474334F3363677550324A2F4237526A6C76657A45397048717A7438664A59717141354D6B5974514D7A4F467A575641424C636B6937356F45387970417342794C4F7978514D6A6961714748414B33664C4173374C68734252397A456F4E4E345A4C502B6931747138564156436E6D564F4138435875556171364950482B6B7656696C58737A457367786D35716D6A51344468354658534B754F436D47765676476D526C3654346B4D766F4A6966695A51506C3959684442626D454C4363416E774C5861616A65694E534E3542517864484B6F7944566B6C6131594B382B70596E55553273685679365567595A664A5548417878766F774B7A4E4430504330633159307472564363706B48614D44415531717A546536375977304847315866352B4D6358774D3466774477422F2F5953624F4875667164414F6E66736B6B6934657745344A6D624B74384E727A394739666D376661523947614A59495544564E4E5448334A6A3358654A57427832735256436D697836614F47317032587548596A4479585432685651524542744937574D7A5070742F7557556F444F306E31305645376E2B5A414E5165306D45794D39454946766957486C427A30315A5045716C78424D62356C422F714C4D6A785653734C5A31747052716B477A6C2F7241347578794442434E4768323732446B5864462B75536657456A5849644C4F4A494845634A56484D39395777364B5373344454554A594C634C4F2F6B4E4E374764545372467043696F53666B6F6939686B4C47793937706E513967797447736553496F37736A337653515753314B6F6A5179612F31336270305A7032754F6C4C3950415970655A4B58486A5A704E73774D533056696959664E5A59615A646A424C51592F6F584B6E2B3059726E3142456D766D6472766C39484F36424A4442453350427775467131514D6864683868735456544F52514B466555396F6E69374A443051754873674572764A463749744B7574344457392F6977484C2B4F5A36616E4D31386B324433696E796D68307A43506B4E6942597A365855352B496B3565647A576A5350734B554677784453424A5347534E74384A48723647753745724362594D57426F44434A35535634385770414D77376C7536627A7155776B4B7A35462F73495276303445325A384C3742346A5846306C754E694D2F4E796C62477943597734593169636356427A7A4F585067634C553278724D386F4E584F58716F65494830454F353333677036393858462B614E6C2F36674C68474D754C657A4249346C454D524D734A4E34636A367839707737385676656C4C6F434F2B58394D6C7479732B7638307577344E3542362F7A784C745A63574D3635752B6444724469546A4665385131396E4452425649514E6632304E2B5736427A664E382F632B695A76475074776A587A774765667833675258343963352F626734505747354D797167524F5A5732667542595A5657506350616E43714F4C425474665145714E5A592B70497575364B6C34354A6477337A304B4F476F57466E74427A564D6F4D5061694A354E572F646744535A764A38474C73503741303839674F423142725452374D612F393345342B58756641767A466530722F4F4F5547522F386A4E38542F4E734630756F4F502F57752F436866584838503573494868682F4132336551423574652B64676E2F3649755031614C6734642B5A34417558484A31647330682F456D50497A77503836717476774854746452722F7547674263544F374F7558492F67796577426C386A55664C485A726734426E336B6E4658344F4B633450374442466550427A6A4B776737506350635A6A726A584A33422F63784E656576344C385045662B7A31385A66786A384E6D2F7636494876384D4435356A68326E4D494C2F323545566338324433344D734C445677596573506C55506B393035306342726E38613851392F43576A447A2F4875702F6E314753763147586C676650327A414B397751436B727152642B68686448496A6D7973596C4377656D566C2F374D706D6E30366D38754F6B62652B665349343546726D76476B734C47456E5934724C33384E364A5658654C78617436676D644E494B6656644A46767832594C674D534A2F37546151762F4135504B75656D315962345051453650784267364C416474672F534A6F776E59525839557A2B4E6D6F6E2F366C63416676397A524D4A4150447269324547793546633838664E6E45696449734C63346D31584C364758633437486D786C334138316435474E6C36454B49325A7733675646427543566442582B4672716165587A43305763443137442F44794845483274654B78374D594C67492F766D367636637838323651625A312F3176386E6B394172723345754436794843354D4B326168736136695556637236556F7879716D33396E4B49624543444C6F5075595A48664E77646A346B3337336C3571484D44304F2B62424D45686553486A707754704D6A624B49695876624F4531394F4275617569572F45363052506C33357373306450714F45642B48376D417857546D3978757A6D5338456B77735969307664382F4A62664B426A494F7A2F2F6D6F2F66366273664F3256524E562F716E424C7333687067566741614738445236342B476E6B575533565A55426879764E764F7074696A324371532B336B535036545454596F772B7A4E4235536A37467373424F467A756B51757169457976426167396B3130575655384963714E6546515A5770626F457739763556364E6338654D567A74373746434D61446D5161424A6A5A7454747754487A636B313469556670384B723436545039646770576E5367415A44326C4C626A353848656C37436D4E6E4A4A4D774741342B317A7851487251646E53494D5A5A366D5A5A426759795866527A52364A4B76527569365855632B4871532F65762B334F6D6F454C467A6878444B355379366D55586D453157336D3159374B77725A37305746616B774668326C316D564A4A5A4178524667717552417A5561702B654132733132456E6D6347512B7350704F74413076525849396D702F74786C546555734677416C64356A653161775A4C5843696F6963702B52424D584766542B53566D7A6B52724E646757354C342B684336362B5A5971727577326E5043504367634F77744F5A2F585A7349546959463361577754572B4C364B484C75584B667862584A6C65424932686146684973476571735875763535424A5739725635386373733257712F5A386B347161576641647530703053556E667A6E5A554C76627A6F447550644A737730596F4C42725268794B527379695865756C557552624368705033486E484965564767624C4D4F2F514A6944377A574C7877696C77322F742B475636486142595A644A766C4F3243347273527559597447786E4C437168596D496E556930703570633745686B54564E4B64616E61724A7667434D37382F5A35565134632B4D6A435A36337A4D2F47366C6233504B4A62375539424C7538754272765549553856497563466A31397A576B706D644E59316D4778577678372B6D64534D7037445975515945565A70556D71346B574A6F7863763446623532316A5946534B4869344932426154685065374432336E35314A7A316C51476E4D3064366677463137513745687A4D307169787537306E63666F6F4974432B62743971336A2B564D4264476A79357336334144737759532F514C6A61653362344864446F6359712F33456A41664C676775486E4E2F486472447766725150543357472B4635637458482F6D714546345A3046534279344757437873694D4E68556D627858377263365172574D514E714F4E476E2B684A6470553653636D594B772B796833536A6D4850327966343672384A7776585767444F6F5A54785947574F6D595930564A4A667256724F394B73486A4A6749753047485A6F545A344A75326A70496C52756561525235576A3263444A635963712B3646712F337A4D48512F6932794F56656941427A6E563345746874644F416C7952704B334C614546452F71394A3264415A3351746444586F417867644631304C636D3530726A54394D65376544504D74616D4C3065496D6C6843733866366277316E51632B434473757A642F626B6F5549334A485A3144306C7A4F2B596F4841426C6742517352796A58797551304454334163454B645655526D556B522F777844647A6D766E46492F495274386D6A6E63704B49456B4677314569485852356C4679674D374831396B427532436C367A654C6649524D6437447934454539476D517876386D4F357A7675384267706D3630534A78726A65504C4945484C6C46736C59627250326575766D71654B6470624C367835494F416E74756478507246394C654B35555A6B4858544B6E31396642726A4A31794D7948556F4D345775664A353534546F776862304F3761536B74764F4D7276726E6E48473163714150466A7461383339564D4C74577868685866714E58705A4C4F73744C4D6A75533938662F6C31796565366454307241646A5674466D65323279644D6B65694D677A4C6662345A6C6842784A3757334579796F4444593735646D41366D5670556A6D6A734C41664174336839323876484B753433344F777A4A2F775831376E50372F4A4F33364E46794C334C37617734636C37347564387767484E545437336B39576F7A307A612B706250354F7145372B50744163616241357A78373139364265416550347362353377504C2F68304C75323558504331335A64315232726D364E6F53783331704C666C7A3758326A7A6C324C39393969665658575A687866774257336C5A6E767A3778554B535062567953395168704766726531655579725A675A624838727A442F33393958486E656347666665676A6748646541486A38454F446C4C2F72382B674F326944754134453844484139486D5037304E2B41582F75314C2B48662F784576772B4C37554A5362346E54636577462F2F2F472F41377455467A71585676666433376A755656332F58594F726259445A2B4C2B6342337759736653666E676D756548622F34796B767742363938516E75322B46714F55395A4F4A355067562F35756F5879463849514869737348706E68352F5462437856635350506D53565A564D504C672F66706B372B4B764E3345726D362B6C4558596278792F2F4153726B51506159563532777468314E68556A485549613353354374353556635846593653476C515A6648624A6E4A374665565A30414D66785465395076516479336A4A516650467A5A6D63684B7A5156397552353876774E67764E58374C72456C474131574C32304766486F3668746C5A5842326979655247794D38666D4F45683639614B644B7450305A775A2F544258586B35426E744D504B49643866765837776B6C79672B6B6A5A3355316C684C746334465945703848636A6649376A33496739676F7755574D31725A3276314849397A6E2B337A534556734F675068682B324865357031565A687964496E7A687336627A4A3847524D496F2B2F526D674C2F382B344275765777426542774C75767A734F7668393833645934627A6349384F4143586E765A41707078736758512F612F5A78784C6E6666467A4C6674762B732B51587631444B39764F41664B704577773059656A4F75464142686D414E5667545732627A51797035704831756C42792F58556D3474593356677251566E304947714D5336694D66465352355079694E6741417938704832567358723331354457342B614438512F776D75684A6B3239396764464A6873787731686838365356714A546973333648452B7271474B755A6C7956566436763365443335737867507653514838746F6664536535663249484B454F7A6E346270525572477969576D6E554D5A36614E726564516D2B4170684B456B77576C536C4874796F4A7A61333971687558616A5636773234336B41664B61586A454E6A6E42544A433663767A6D5968466D427765394E4C494B7A73326136326F69416736736E6C634E6A364B585556632B626E6D7058587439623256685532794D32476F726E6D384D784D59686A554D33484D447A627648724C4C41744453395831555A4A54344B6742594668394F594D6768505530677A566B47446946595753564E515848435949776C7078742B37516858664A597048656C55363173586F536B6E636C6551444C574B34546B4F742F6A696365513164554F3139735A316B716B4B6F625059694F6B2B6672594A427863796E785249484A51356863613139765836316C4D486B6C77514D30524A4765556930623259746845346E732F38726D4D62764B496556424E37355645466D6777754F682B6A30712B472B78636B2B7439433239644B6E2B7A366F2F72763058374F36636F7052663265504B636B636D6D714E776E754B486D4F48437A354C6177576E4F33585248792B6C464B67564541386D4E2B385749786E61347848665034634753794251715343314E59686C39354355694F664D5A646771493666513736485A537867453434776A6C464E3848307356444E74467269526F48764B2F3748457A48776B365262714C496D492F2B4A706D6E494C455437573051364B45505A38664F556973657456496F623234723454377063674A37733146533962475973736A435637327156756F4465416E5A7651516944537A487A7745496C70455A467331756B516C534F5A4B6336344A493251626650796B6F756C4D396D4248752F6D486656346B443172424970575546784937533738795159674A373577596E5775454A704B73494E43714B372B61666C336B594B493079486A3076445A704C4A6C3567355873676C753379434739686174797756637779435A6A50547458366A654F4451473978613473746F753167564A47703551422B46597A662B7870696C2F6179307A4A396C794B697874627455566954304B6D6F5A724E6D387238506432523955316E6B30694A41395356316466637A546764786E394C4D39524E6B2F4744546331345361624F74694939704C613461384F2B346C7061734F726D466F3346366F536E366E6A76324D5068484576464E636D715270696B53694264306B77666F512B676D53705A47735457734864424466596A76544A386B4756416F6F5631594F796A75434F78524330662B316768307A726A5357515A507371535A2B436B7736713552436C7876645064666D5643463471695347566639595A6468677041746C2B6D3735333166577436517262506E395379484238766356634853354D706D4D522F5834532F6F6230596553515666306A366C6C4B37582F7238456E32446B6D57722F785279366E3567534A5A655067393968636578554964684949706E3179516A43464B79424356753643666F30797478794C305A394A645A43514E42612B4F597359506B6956534A5A4D38456A4B306835386636497A4D706D70687268456E2F42424E5439417044724D416E6F4C4B336838314B526167354572392B744B43513549366C3367494B78516741556A486E6357483956777A754E5231654357353343586A4A6B7A6565446C4569624479702B7A504E65482F4F664737714F5159795976757870504E58346E787754454E414976654A61353342493865576767754D68484866454E46334863573076536F43533537774F36754C6269483378684436657357646664614A70626D6F3056594753334537317647735855413164617033564D69593630666D74744E68465374736242755A52325362572F504842356C6F4C7A623332656C6A592B38446C6446394C537A73717449426A536D6A684B65712F4762464A35596C6F70565976694E6A32373172306D4A69624E3135414134384F73616B4A6F46554F5746643549496E306D4A554F2B796B48436652464478775532664932502B5A6B2B306A59724A6959634B4846776676663547374136347833792F5A7A58686830394C693774792F643578612F62664D777A3374384E76712F5066495666622F443766433037666C34372F75774A66326433335A4A69775A69597768697A456F6A5536555848474448576C5857706E4F664366374859424A5864725178766B39747150672F547145544F574E2F496643774B42394A2F3542464A5035677347614B7A4E4D63754F462F5A7634393437547564614B304A3348352B3466567067742F3931554833666576466765364E36583031787239644B50653741554C66533244343234472B424E2B6270496C2B3939707167712B655838422F2B482F384B6E7A3571772F68636C50677A6F305633443465634D4838486B2F43714933313533376B6454682F2B5162632F37557A37686D7A6C6C635439346A78356957632F4B6E503461757A524B34443757374B6A45333470582F39642B48794568576B6C637A6E6C38346E2B494D48334B762F397A4E34446B37684A2B39647759632B2F426A79376851655846376E4159335853696545713973434C732B557935616B4C416668436B3935614247714475453148724A7555786D50644A2B694B33577A4550324D6C72626F344D436A777A4833317564317374557969436557545A514F4B4A336D4F653734483535386774454A593142717A334E33415437356E41316F30744846614F6A68706D6A5A784D5148757930726F683253756B672F7737392F6355535654586B696D647969486662356E2B427A4F4647544142496D7070674C4462773075375A3278714E726D6F55426A617773797459572B394E4A413176433356785861674A4D48504F365962576C68662B584252486D6378356C316C7847794478374C7A794C7A2F7A506A5270704F6B754642347658766735307765643337775745542F3445542B6C38486C2F382F3468652F61715647663267474136483756314F6E4847622B4D676E466E6A2B7855573177512F6242334C377467395746723469616648786E37432F432B4B7A387272354433384334454F6661477A6C666E46464872514D48564D347A49526B4442485A6A4C47336F413947456D48625835686442526A5132645654734A36686F7A6C3678562B78556E6A562F61766C354A4F6A4647706F34304B2F6F516B58693437756861557433415045544A333249376875626662466D59436D6F374F33673457777A4D5A6F4350417A2B5848496652616F635137626D6E4F6F374E673955474F7666506170382B7242344E4B4E6872696E392B464B574E524B307148684846534E7871437849537171322B6D7251716464586333452B6762554A52694B4C79624E68713362463962357167654873582F7533573773756B4B4B78436E4F4955465339394F30544969616E6D796E794630586742524D443749535A6F726643744E535A437769436141722F3779667A426767466A774E6A4E627A7332637572464A456169742F385537535235796265566C64644C76635A6243736D2F384837476B6636483462516334414E4365734F384D306B742B786C713030555A455651544E39444D6B454B52395853707769656133554768327464764E4D444C61386F5144464158416E46525854365130544C735649557568304F774E644B575047646F394B5A716A79693056396F2B51315A4F704965316E427A385659675279715A647775417071545658396A787A543063555678437539666D6844495672574D7467753376444A35466174755836725456676B47764C594C637061766C566F6E313274584F4A48507178676D6F79436F37456C59372F5A456A636D7278456576746843714E586C4675494B6D4B70466855697A574630694257576E50416D454B77786C6C736255567373426750716B4F745A6F436A33484F56624E63514B746864443535534E48623267374843644D517370526975455A47744E63462F32686A39306F576F6679367A71385459314170475535416235456275654C32635448726E384C714D374D735856523657396153656E34346C6E414C777056562B37762B61796D5946367179527170374C56655558565A455A55436F345431796A2F6A306C375849696177456C43625477785A6C6D6D4C664653784B744C6D58307378616B7955766B76615258492B6E4D702F464D3336444E656642573350595A67346D69714C50525A495641714258765738423242334843794A6D6A4E624B3474597241474F47702B43666B6C55626F4B6C4C314352634D4C2B44624F746A7372552F372B766F57743552385A43656B69344A497536653572583379794454306C4E6A367037733464694E3935624D7268526347564F6E6C56554555476677715750664569646F526E7359383565506D5545556A666C49575A2F516C596755725A4B536164634150534D31437368452B57417438373742773755646A695A744E69773834435574534B7074535844464E62546E6A643171532B4D465A55753777567779514E7259757754684A326446535073363944493556494E53624E5635396C76737968736B786255586F3268545339515933315078383343326C7957577366355670335433446E513549474F47427A5041723845644D5377574D315068436E714C2B554F4E5A54783245794B616D737543675836617A55566A376C4B6E49772B31763469527070305868682B5944364C423048595A5578714747742F70584C32455439644B4B3657734438344B666B63433371525A5850396577453866305478754B4E553874737258563732786F6F4333545A615752535A7546444951376C425933564A474D2F446B504F69674E36305454447978544D6D4A38454C69734B53326D326D342F7274665979555265505841544657355470393163564A464D54457A71327A545A38466E4A4E706531387849552F30492F4E6E7235384C3650754C544E6C30784958616F7649314B7A573274436A4D38567A5147503758324B516B4B3059435743736679434E77736B6854725766466F4C59443947613935622F44674E525972544A7434703674754C4A525749776D53725150476C787A776278664A354736464A632F5056597242316E79503172772B4F4945386E477162794A4E6C47355563736A596955526C61724C6D6A4A74316E37756F5144747730686465624263366F595770552F6267386D31784547557256696C64356C7158466E334C654D78396B7978502B42546661784A4F2F5643476F5A7475554E4A6B30632B506338414F37354B6430785166657267554C637561476A676D46347771434D3335664A46716D73365433566E347233784964373275504157344B772F74537A655A447937393630636E4575723047384F53327339594E32345A54702F7954386870744D616D346D7068704C7061553250496B7375504A5A646C5A4661355734685950707156384C674A436147744962664F377869497670696576625567716A5A2F2F474F454C4C3258362F643859344F45333053527833734B3351647369332F662F392F2F4B784B3871462F54526E787A683575326E6B6F632F41424438375144612B317277664A63324E352B482B657957437A792B7933566277717A696A7675462F326D437A2F32313334624E6F2F39484F52762F39482F384333542B367774383857392F4254372B6C31375363686E394F6A65435A565867382F2F4D352B456A39352B6E5735393954757342755955432F716E2F473461585067666A797A6467766B72774A2F384A6270682F5A6F4B766E512F77392F376D6C5A624676422B337A5A4D62384D6D662F562F68364D626E344E642F3653397949356565664C5833504954462B2B4668687038377673444C38697863333133516A633139324E7759344F565033744761687076545A2B466F39513236504C384C35772B65673474586A3244465538307A55704E797757507749386D65386E3576507154312B563063356A7553597254526F787A423162565861526E76383244417134446C696865654969346C3953656E32716E4B6B675259706A583358486B4F79676C3644716E77524642557049776E6D4D584E59744943792F6F43726F35327342765866487258595A574F344E725A476E37386D312F42613165767764632B39536C3664487A43413879675267713665702F462B54314C4967326551564F414C4D51765366487863566663594B3772424B326A6F76684D364D5335466B4E4757534877774359443642624D77565A463073676A3775535A7775514A5978376B722B39476E64527355725952754C6952352B53676A6759306B7545634C66322B346C6C337A5563597859464B585974574E4A554A50764F6E423256596B344C39704B55367A7654534B4F52762F673241447A304C384F642B486A574A63584943384D742F482B41662F6F4D4352386548535054397442566A70634B6E2F2F674F7A7137524151442F494478544D6E62486E527338424E34424E58414E39752F4C587746363567626763336373614A51784A486E357461495059437A5A6B425178316A45706856414252554D787A4B554A485232726A74394E7A6B4D6A424176614964452B674237736D316945684577457063595777593657536B3639464771446C6F36534C62715561756D4136633659724E5868544B4B73354F592F64524566314C69784171476D3754693442455849617653534874432B7232574B78514E756E6C34576434506A7852454769787147716C39644A563955717947597A78366B6C394B6B70525230793033474A66514D696B737A56475A355A793646345949586F445952565A30386477464D586249693031345374624C5451367437774C6143724B4239447A7748657845724B386E6B4654705A464172356174634D72656673394632352F696B316E6538435458737977486D696A716C4765344371755344695538466237344D527842486F354756436A6955623642336134746A4A423242484D2B685959335839627741774E514E4B38714A686846702B71677435763247362F72514C7741415054456A69572F4A49344E4F324A5875474A6A4F674F7A44674E6A51576D745A7A545568672B3274784E725A67754D4834483179543350735271686133476D45366867324F4833644B494359426F35417A68526845723168472F70757865702B6873516464363669755A6B323256425A2F5A75536D7430375733363462587245354F546D527564696C4B6A4B4D31596A533131486F4F754C4A3337645277395356375A476F4F535947396F4A717A7A553479433273634A6436495363347577396E777554656167354543326C4C6F656C556D37567034512B524C334438634E41467647453443362F7A73703672725063335171726A63577063374A674A4862747857526270362B5345537058364C7259653177703531334756354D4A4541363163436877705A4452382F516971505734596A4E6B77387638485861516C4B6539576F4A795843756F6C593078445351356F786141734A75634E6C65314F324E6849417053534D6157456755314B62624F71475A4A46343241796D746D67584F686C3739555945763046775834326B6F593033566E5A334F4858696F704E6C5946513865314651576956716265774E536E445877446E456A36796972474A5A7145524269553056566B555479717072367A4976596F7369727743744859536E56304E4B597538694B6C6D64676E566B432F526D5376656178364E4A575234304B7262625571775245784E6945522B43773067313274327A6F2B2B4E437A335555442B726B61576E69447A715A52795345334D706731654A6159697656616736594C487930636D485464472F46354A496654743370554B425A46473677375A39463279646171783234504972654E6F31516F6978334167712F77526941303777315477354B72714742665434493467496E584A36524A674D6A535750345A576A3864564B5130427846427146524C5764737A667A3254455178757442454F596C4C6C74637443755A355A746F42793643564F41374771776961615033475263616F4D304865784F656179437A3444564545487677656A7357492F37544559506C53477545684770786C2F4E79484F677172453864544755653037414F6A635132485773715A4953526D4E72752B476F7742453634496363695678504E7031696B6E5531444430526735786F6F4F676F5263466A42553737653244614956537A6478414F6C4E616A315268566D4C645354706B735741305A6C564678593453626F514A765559777973386372556A6C564A5832343949535534577838454977536742717A446330377A4D6F494447735966443543312B464B69382B6E6373316D6A4546706176356D78664956646243564A43694A616553464A773644394A4B7472496E63693146394473547875676865416E44474A37614F52423776524C4F59726B306C4F587A42566162424A71365A372B6B6C372B384E6D537A4161506C61425343414B3368704F626541396267694F4C36755A5659304A70547168654C4A37366D7642697A56444E6851394B565357375843713572375170504A6B6E46314D4D4D50315551546D314856754A6239376B7861526B696230324A5A6639575233345563534959726566483169513732566B71692B50706D6B554D35356E336474414F374F4C684F564D4D3477767134774F6B787754312B466D663875354E7455756132535079735859643835482B50622F6A3575304F32506B6577645A533038787A567358784D595877586E786856576D67324E3963434C64676C5A3268762B626F75743862307A6B74756977774A396451517945784E6854322F636E523747457A4F526B427354575A4E48712B3766704F735A6155716458304B63487871363178527870687476734A502F704F5A42502B342F777243372F3636336366764150322B622B6530385A32636E45543668652F6335624D76636F64614F77442B486C447952684E342F45662F77542F6B686E4664733231662F38392B543457493069632F44744F666677364F2F2F6D4E754D6E41347A2F78436C7A376C37384F6433666373446362754C702F426374722B326A696A676547617A64472B4C4E2F345159506A6873344F6E6B443770794E634A7462334E3150444A44763341613463784E6F74344F72313734427A38786262722B76772B50356D2F434D69506F50313767545849657234785673754164667A6E774D337339363550324F45377A45726672576E4F4355587A684C524C714469326D476833514F6A7938324D4E2F66776B7448643246633334626C736D6970304E6E52476B36346B36362B63516E54312F6D635872376B5476305964326341502F6B76584E426A48765732387A58343059755A78784875644363446E4A794A7944377676347945643761416C2B4961344C57346A786536324B3168665732453437733264705A6C684E4F37392B6E3477363941506A2F684353597055473044484F445673362F792F6244364377477543523577493939366676623739337A54504D506C766275777533644C7078376346395075326633665361376C485863364E4F77497A6E6B675866457A5842463833314A575873354F662B466651575569585637614B664366394C4D2F4E384339357850387262395249423238393934583238774E34396164444A2F3438635530694A664450666E41624E36397A7439774F5177427547656936794A393942446F4B77396149433245787246582F5132774E4D716C4856684664386B696C7A65597335575035685655635567746C7856555A38484B3445566F524758626B7A466F4846505434455943304846455A787542776B6E4B424E4441727469617A525A4C545A4279644952684E723341454B745538412B394C4E57314A5A527451385A4B514B667A71425A41674D70686D4E684C6D304354504B47684D5A695547626C594255353249447857455A696178683434437832634A52534F55515A57597068525957554F2B714A524577353775717256784D5967792B795155676345502B307970755850614D6D51486843752B6E715A6D7541796D6878574B5931514748715351324F465954322F47656F5873783966325642786E357A434B2B676F786D4C5841665564644B5859775A43437275304E734B38763279644B416944745A6F2B6E46617578366F445847366872333546776A35446735424762696171776477437A54764A477248496F2F654E77384E732F524D386A554E4D41643941345965694D4E46592B75534B49797476344D79774F4B4353766F5137714D746C6173696F4A6B46382F644F3346614D7675625557756F6B70553731454B5558754D5379524671496461615941424D4E736A4C5656433152657A5A6F6F56346D475758304C4E4351685031706873496A2B436A51416E5A70747A62586147693271345336352F6A695855586B4D7452334A6570526A704B3164354633416865516936496A6F616F2B74454D6A6B5538765970362F346856483255346A61365A7A64563172634D4D4D6D723559327A6245386F5135434A554E396670437938564736736D354B7177364A79474961636352446D4F746B614769734A45687268305A752B39515A64505373574D7A6F3144384F507A535659464D4350376972486F36796162384A324876317A39474F6845767153433847595472566B4D4E4F51595A6F4B484B3357504B53475757784C627152462B6953482F6E694A32326B4875377A6A5954787A31773864586E756D692B6530315048533458634C3736786567464B5431736E4B706B62543361617565674B4E3737486A7A37614F383267336363776C36386A4E777A75556972454633725934474A306450394E4543596B73796B41374163734E4F4E4E7A7A415035614967562F43344F514B6E4774344C763550736C336264564131433172564141334B6532346A6C575862744C576D574243726954796A676B5039396941765831337041704579573752384A45732F74424E546C746E7942514C4C547871626B477132747547394E36772F74674F765979762B3871552F673762633761564C462B76704F4455307A5653304D7144306162472F4C427A6637397672586E764B43465435473842396772542B70544C4D6265394952714D53434E70763145644D694E594B66424D61482F727572715544576869365333475436596B515935364A7535563066537669355A517A4C4E733532686D615767363051363447766367385A644737707174754A4A4149315648586855554E6331676557386C617A6F6A4F6378356B6E77675368685A5959587A32497030597A4D4B36596D76434D324861697942494C4A6A63375331632B6E794C5A5847302B4C7962597430786144515333554947686D497934766B39797477636765704258764B396678416B395961454A4241504D6C584B7578476F2F725A4F4C6134334966746A7861426B4D5A53383172747A685958775A79363652576E435367514461713376626B7358416B4C545442373051534A656B4A514C6D314F46724E57704D466D716D306536546B467A343357576649326C54307A4B5A694F41614B61734275357657425A44614C6C6D776444524F734A35487273475346546C61796679317A6D74576F55344E746E52776D42582B6C6D5572312B2B50714559544B43695456743562422F6C6754442B516C5046376446626B4D675A75634A4F4846444B4A566E716D5A704E704F72584A2F4D4B412F7876356B35754331576E48304A495731586546743870532B4C587A396F74334E317A4F626F6B495273466A5752727A49454B32766A575346655A4648664F2F4C436266466B7745572F6E75572B38304850525A6A334A32397A6F724B72796B5972424D77326C4A436D765878626F4272352F7A6E4537344647333847506746482F375A4A3045757A35486D6675472B417339735831654957356E61424C6539384F796346356F574E7A7574505435716C6968644A4E6C71444F582F6D4D6F2B4D6134526A61554E726774554B316354302F6875463774784C65484B743666612F385857676579385350506552676C636262377358664F784E4D664D4E765663436D6738776E5135506A575966724554743930765A477547745A556665536D2F3672514B4E622F6B75585351612F7551546D5037566336413345494B79387A314F6350686448502B39527948484A3542652F316C496A3838415469574B5862376A7A5533636B52362F65416F5058787931637858753761753068664D48392B442B2B5630596A7863597238747774744E5A5933313643626A684E516B5041444E336F4A6C37652B454F734433685350736F362B413762456C4E4C41665262466F32617670412F4E6B38626E6C5150594A38655133773667796D65615853303058644C695439646345447A546E765A386354306769343437554D2F796C5A4F726D4D343830616A715A6A754C787A424139766E4D484673494C4C44617232393570442F5A4E356870506472466C594852464A624346474131555558426B39334C646C6B4A514B57553276545679617566514A663675446A6B324D697A6E6371794F5471777A5547796A66755536506856634556394D313348476B4D79356D4E766564477261634873387863504634784F6C796842746E477A6F546361666C48515A63682B33394134427A6C336E786F7774382B434D482B5A4D66486B6A387A54646855573963716D4D595346387939696D476E427079536C3547534570704E43614367734543714637366F6D5A777655596566394E454774434A4142384874436742715978776B7930307A456554444832517357784844556A56756E705A6F4B787376344F626152594D326966556C376D582B4E445A53595A6F37662F6967486379546568415753716C7369744E706336454A66554F635645574F7A706A48467757593754587644497A6E5567636146446E2B756B357746316E545A416A4C537142454778785A78634679476834582B39615A7138682B496C6F444C797134316B6175796F57704C494F4659544A41416C304272677448456333685A4931624C446669774E356968723566556F2B54797A55744B32704D38574D7075486D704F4B53313170626148454F546339795477383831544A464653744970544E2F3832716D716B66724A6251564C41704B70444D5574657A526A3575642B44523459462B4D61474A6145616C50456A686E4364484B484B464E6E6C5A4D674C31456A484F69576E745163306D77352B46555A4A4F6143625367306543445557312F44384D4F423778304C656B54647A5939777A32644166312F5174784C6979395749717A506563416D625242484A6B745A714B794A67655374324E7A59306C45526B4677443372704F79424A5A387A486D6475674F5537332F63716C4478763262305A4E6E46475A506A6452654B414257624F53655343596B6C356B77526E7A756D7279522B6E6C5049566B5362513264464663772F454E643973534D43617646482F5A714F37372B63696D4C7064422B78623879314F563477754B656A626C566C4D74754752486E4B4F4C536E73366B793258522B683567674A6266436F33793842557A6C62302B4C554F71447A35555A5A2F7361324C2B5A58465957316E42686875706F6C30325276766F586175493747666C4977756F6E35586F6467517250612F487962335456764B6241704E6F6E417551494668413273486C7349574C5A63744437737A72364557425A48526D75586133384D797259722F4269693765686131397865635A69326C71652F2F326A49364379504B374F646A575A6F6E7154476A4851774B4D42706555555544642B4F6A4668393269494C684F453267476C6E62743271746D6374613659536D4C684F334A794750392B5A756835645159326936396F6F6B557234497842524148794A4F334C482B75716C324F56767067755350306E4F6E697A3848392B7A704A4245537370517455724639516C4679526D3231564E314B736C52473958774B465A456C5842564E6A3674444F66552B434346657430506D6D72374A43504D54346638533230502B4753445A6D6E77784D56366E71364E62736A3864564D6C415963475544324B695A74513555634B42624D345268347231513034544F4C646E754E6F7956565734786758576759502B47474C4D4F6D463238687A35706538614F744471374741415A4F6269734F5479457A6734475277364B686C796E33356135424755423132493642795A526B76617A4777363444424846394A3661464C717879554D344770516D445853464E752B357A7076654470644F4355612B5651576935386F575335456E7A51546A4B4F743179585479774C5675385544635A4357626A43704A6B6B784450496630693546434267646A5456504E796D646D52446337714C4745736168396642475A6B5852713071726A4D614B77624D4E4C52654E386439545538735452584A765435494F4434784E796E5A76464765384F2F4F2F45612B7A537A4263574A38564D6F612B2B324A395249616E6E7772386235364C736570456F55613033702B424878656A785975576361684979457332386B7975633851727366696359584874716743575073486A51722B7868666A546A4543692B6D544C4F6E676953742B53344B322B6B5332525458663748644F4B73716D6556545950655A57334D59326230324E506D573957495371555A794D692B4A444E38786239396F6F7A7452536637695839337842655961464A5A736731663978553371713163356C726B5A305771422F562B4B2B4E36734A49703057472F78736534776673373435306643304E387832316E4E736D524E5839324C45787562736970712F41734872743654734F6B644A4F7475655A6A4C34454357374E6F4961353468726A685A413769547A48783875776D6C484E787952752B426E6E6D777643576F455555414537504C4545536179443372644D73394B50376F4C4A722B44316953644D61346657764C2F545A5839766970332F3268455A7556434B6838734F3276573051584B4A7A41556F76626F6D4B31546473514F68574F6A6875765576736557597052574D557A51327452634F6E486C4453464664614D7036632F696A4D3235484B4E6C616E627773676644734278766472762B382F64476669576530624C38447571382B696D43334D326948357164322B6774556E586962345073566E6855664939546657634F4F4C39794364384D42314D734A38772F513174774947334F474A5A454E77386B305A757755306D6E67676D5252675745594C4A6E6B435139585767725A6D6A746F6D31666A714D5A42734966446372544255417772613542697374696A4647595876666A7A67734C364355354837675673397965734159503877556B446379666A4866326F4831322B564177442B415165363055464D635A6644593664594C75356B4633686246564B6B617267344C3167584B636B31745A4D4467794E4856754D4B76587A5152464231635A796C6C4441706B4666636A62335559593343315273316D484A365A6978326C45726F544735686577636F6B4C426E56324F7756624735384D472B31496A727A36594155554D33317A55644F334E4C57322B68535565464E416A6D787636476F556C39674F2F44614B756D75386658687945646F6D5A477A707949736C73485546554C7573716C6A45376339674337714C4F6245534763324F4E417653464667374F654B7258625A55457138396C6F744B524D3357487677564D7354447A324E32486F3748683855716B444E6566556B6D426659457277663777306644504B6D6A505A4F5662337661454232376D6A4D3161356C58425272426E74665A5A5A6A6D677075654A4E63674A38616176306A4D33514B76595A4F7063563358773635592B314B56666D6367424C30476D724F78486377657875305132643056736F364C774A35544A566465734B6E694D4662643763714443304C2B502B2B316F304B7246305554356A314459485A626F43454B486447357249696B2B414D30737A7444364141574137686830366F413554646578312B78365A67726F6D6853444D52744866546542614A6E375A675530456B39317766534D50445A357A616F6D6172726E5632356C6359357A6339444F356E726370486D565876374557584F58746E596D63612B616A4E2F75795A36626D687135396D5477765A39586C4A694F5256646F554B734D376D4965706B393348546D725746495434374754683734644C57706C5078734A32585A6B7147382F76543054754C6B425056546941577135596E79532F757A55503464334E38564730654C42506E61416E455372755538784F4E4B723042636758615A4E4A7A3047676751476D615952686451534A58344D7777666B365672776F587774576F6D53347A4F76384253353541486A43593967466E3970324A64587479596670786F5550774C55534D64464163454B715853683032736D4C463559452F6A7938666D497761515454612F6575344E2F5639586274327356374150723379494867796473414E715A347148543465374D726546487252565758757A6F72424D67655144334F436D5A337A67766D45512F6F586A75653779315742434663457030776932674E57657653584E61594F716F6D566943654F6F6F326D543579473571434164736C6755777577526D46565871685279763738524F6172426446504665616A4555386E654B2F4535494F4A7064714B7362556938464F667A4E67505139684B6B7269575879514267652F7748303331417935424D4C66434744572F366B447971334A6C313270692F50525236596E4C2F503873724C79394D5032587132502B586B6332374F7347636238564D41593869564958766B5478575964693367475331635A634B566545435648472B65765A6538775946496A49716963765448503645484E416C566D446432737538376C48586B4236727257526B6A54794361563454434E5A4B686C652B67587066774148385564784C64714A51312B4D6378644E55382F2B357844706D70685657746A46776558714A546A75475241434A5A386C594D6A5934314C516C417A744E6E6E377477306B35794B614E4B6A4D712B4E4E736C70666C716B5254634732474D6C633868494D566B32566A4B57496F2B5575327959652B3659624175356B626756426F576651476D79676C676D5558684672794952494142466356576C45644F714D776F744C6939594C4D675171524931432B5472466E6B5766657A796E7933552F4B597063486B59497753456A594857436B36344D6147782B586E4D7A4E684765685842794C444B3869717546353238704D6E4851713075534C69494C4E4E5A4D4F4B5453757834565A724A77446F34545A344956434D526F54363730336649435961423863716C2B474C697954344F6D38794E456253502B68684D354236546A5A4D5458394E6132656459673937515970632B6B336D417A4C74466B784B713473457A3338776E734F454766695569424F5043373231565055455A79746C31474D58392F56673162745631646A7567726F74576B6A6E6E457A33695931376A59363335496F373536794A424B346B4454527273354C7753725067693133784F71385831325431625936647034375879675067515432514D574C63306170537653642B5242506D3832475336584A68557076726230483553796F76526D716D4650757569333176787452796679627177694E53762F546E59656C4C6B6438354F7A646A79396463364A614E33456472345952376E7631394D634471417A482B30384C33333669426C4B6E446A3935364630362F6368484A6B56757779344171676665637877484F5850474239452B447A334449663847543070325765344D2B2F7A4C39394656724958727A55424E2F383750636952657A4B4A372B5456677235414F2B79426C67755433563567716358682F62345137364A2B6558316D77552B38656C5A67364E6C506978472F69674332337466514173796468363853536E6E4F6E58675957652B5638452B435A3633366E716D6A757553545A6641643167627731726F4C396D3174305839537644656E514C455A4E346C786677517744583030477666427738304A792B5A692F48497A43474E58366F6C61397A757272596F4D6963614E5938447835794442643471324A78545344745554656F635A614E68724F6D4C64306A56747967307472454B43555051666272793865515530376E4A613863583667445A6D594C56645A757A504E52414A556F396B362F624673555A61704B7047674F3537495951355A51314E5267694B49394B54596863583348785931636453326A436E457175442B474E6F4F6E43767447546F4A59434C41517134635A4A324577777164314C316341552B544D7A676F4C4F4B464D57474D6F434831714F4963535A35522B724B4763755549313359723058565A32704A374150445A62704E5555622B67674E564F6E4D55616B4467497144756C5668653444393748414B707259764F6C314C6B7A724475444745546244706F59634F6F36784A522B6F57774E3936545A5531685A334F59386C6439726E2F4946583962316C384B5748666A524D564B6C4F7477754C714A2B463247635A346F393448736B66715644622F2B684C5343413557426D67326D4463537073346374656E79683664536C6465337645674B613033546B345A4F4C353977663979706F4E355161664B45765175703648346E78336D4E3459702B456358335646784B4A515833546634646A366D324A6351417A4B4D424E526133714645767253573752793236787265684D4B436C38794A5A30764A6E79546D475965675861756D687A3054654C6C4B39494636313478414B4C504C657049367647474970356959476C656D3938397845716F475A506A69546A4866304F49423272497A66464F634F6271765A79627A48326A5256643856435962706F5A7A44792B6E4C4D4D336448556D6D566C4659384C4B36426A766931586B46616A58444D2F654161482B4F6B37505475695A37554A532B51482F47365642787A4C68573048756F55515737614743704979556367423551706C4869306B6A79474F433073495A55696A3145687045417162752F4D2B436965384D526679363970446D5A516A4B764B5548506A4D496134434934554D3174306F2F63796F744A422B4833745369615A67694567516B46476A4F4B54346869743572716373477765666C67685A67503373337648566C55434B6F6D6768475773664436594B4C597054355771356B43414C552F5469586458674C777276613256383376557161516B523576682B766B4B6E6145656B6B7A4E512B4A646B30766369794F5764714A6C692B3442416B306A4E55456E4745355078796476655337432B6E76775663734B333773684D5952314473474556464C4E782B474C4B34447A792B625263646A65642B766D5676416B492B434A75566547316E45714C6E6353636E6746392F5445614C4275746977525132426A68456453706450466772475A6A416535676A7A4C725751486958324746752B47584A73423876796645776451772F2B6C7532694D4A4E4E677355396B734E437A3439516C38354D7A6C413238466643373650564C4B59704C6766706B6733554151444E574A446676744D796E73694B777A6D5A3233736B47705946483078572F6272695234746A436936683079774D716153433565655451597158514B43654A4279746F487162485A50476D4D71336C47596C6D4E682F7A6D4F772B46356634327A3651395154425841714A6C4569616E565665695378597231585843366F6452716277777465376B7572345559776B4274694B3255646B733473626F504350386F674B7A4A702B6C51664B6F386E6144433466677637357A7330317453495572514A6863486F714F696D6A443167777466473479683947727365667030314D5263756B4D46747556593578795466324D642F6B4A2F7A334B332F2B4B71666E784A7A7757784D53756C61704471726A426D6B7236674C46644E5945432B4A37494F7A6E5931364D6E59725A4167392B61547A522B793036336B6643327061757336685367435646504F674F30744551352B704D4370474E575949744431445434354C5A66637A7662597056394F36457556334D574E4C4D4E37444B385558327572686273315A5346672F5758435A6C7A6574413852495A526A4F7246426B576D72302B55437146655A46337A4833716B732F352F6E32674E2B47677748627A434A4F67396D57694236382F776C743362784B6D3451434C2F68454477512F6259587533676F67332F63376743334443642B4741456649724575593253774E486B31656E564F7576443973503753614D37772F393641492F386A475450796E6C63452F656A3642326748447978647476444C44687634686A747761395153666C7743544C6578776C695A76374E726B41726D417845707833675473362B4B7161322B446C71396E72365363545331574D59325036624A6B636445784F63545370597852576A377849574D6346635A454679733464364351514735315237525452594B364D5966417A6D41534856716D4D4269677663384B634A7755556C59472B5748436D2B6F74424951766D2B744A544A79306748537277546A4456645659443832517474486A6736757865445059446859427861517A73617551547275796C50512F7752565432386B6C3049467A395A64594F2B73396D7A4650526B657844736F74726C3167392B4942764F7568514E5743445665734C4D516F4B707045376E4E3258513273546F5A584E4232752F475571694730756C564E335371516F522B2B2B69517050697568483355544866615534566748554A6A71354371556D303031423666516C6F777436646A6D316F5649496E463271536F545274376734456167735854776F4534366C306750394148624D2B4732705935515353306C437873724D4D7859564F5A593638456E74666A39775850366B44355150703038637A516963435548554B5549556959522F744D6E336E356C2F6C69316F44374231527A6B36674A744D68515764474556537443484374434F65646C6C703572695173422F51743734444763724F31654D314C2B4A6C576E51554B42696732666A4F6C42712F52336B397173736A4F305A3970564D74695263583465426877635A4D2B4D58413057514F7248713759784E4D7A56516E53796945502B646D5168504769434A635656316E3953495742722B664B454236656274505A71636B446D7053476D596A362F6C32577036495737766E56754159644A497A463754474C452F69534E5435504D6C6C366F5A69656648614E65426B2F33596A565645394E38696C3533594356446F4A70623052795237563473755557454A774A625978394958794E6D6868617759353373426C46385738456D6E694E665454434A503557504462742B4167587372626C667258686C786855586F775A4867307A6E43387A624F5A463236515A64364A71683374526A3761585A46594678716C484E41425A7378797154654F715136455952487346744B3658725568794A42666370393134314F7037697431514856497130595A4B4778356B33784E5555394A6976473553546E5943377756565678694E6D496456484B705A746D4846694570434C4255307478496C756572692F723268674B53465376586172463641516B5A4A70524D43744D42776B765768337A6F734E537661326E6C612F693747784F676B677A664930716A7958584B514150595A354C5166543777587949496556715573646E362F5632476F336156773375475A714D7A42326C35797749655031536172796F556474683951344F6F5A4B306D4F4A46342F684D2B4D73707976714A49476C435761327877596B677332746C726D714378576E5A44474D4544776C2B74564439527075714C4849747632627757305636696D694D55724A4854657A5330527262495A456868457649616430575449675757546135425861524C62466A2F76524461563438725A51503259754855675236796132706A646B47494B7730304472386642707A7430384E6D736753557A71334766664566594B6E454E4A616F744F392B5771463455494472696A736A69727677795A65654C6D39646E59664C365246714D506D386C593370507451794534394E5A6B56454638766C6B5678793554634F67736F66796B363234434A4E6C3331634F636D73634A504D54332F6A7332636E6D325973617847714367594E776B5549736B2B6C71436374624A6975424930615862697438724D79766B43343838756364735745655771795A5042593457617753515A6A4F496A306946372F6A343233354F705A7455624E467552356861362F35424F556C39314755416337352F6A3565465635443652536A586B55694D794F6C59314B367442486E5A6C34514C647834394C72554D485743303753434F2F79736A7230646D754F314856645932616638323174386272663457436338454937726C524A6B426F386474577853504E457549724F4E625733472F7861772B6A646634626E684750444F64514866446279574B6F5764534E2B71675A454E2F2F4C653745616670537446307A346B476D61614B585A4A78685247547061766C33586330585653737843686469634E5846484E4A5957312F76415674516D45467A354B65486F4C3445756662346E59623031697A76793743387A6245336A30634B5848507A73324D50784E666B50764D4E4632324134672B474537414F6A66413743476838486D734C314A41334E413773642B636F6262642F4A422F7551484248684C3750626767694F46437A53327732684D4A324E4F69486B6C4B71736A4A56736B4C46734F586A6A777578376C655272775750664F484867744D366C756E4A537743564E69783048337768476E494141534F4976326E75674669436141616D4F4C78725A694F494F564343727A6D74662F4B59586656614D684F6A517A6B46574C4A695861494137554D562B39544E716741785362476631483174647337414678544A4E41626B684E357469526B79536D4A3864674F73714C36547154317A665755356839306132596B474B44566661617644773247374F46784D526F6371317141576C56354E61643530626F644C3664476239674A42756F4973375579737A4A70566D774D764838484955594D5951525A41654975356135726632575750695A34514F3648457178536C6B4D4C6367716F495A7567426A67593866696A6356415369597553794647575A7230744F6B6C67696F476C36484A4D6842323045754A566D67426653366441536935376B4C6F7A6737757441362B734A79686B384A77686C3571397A51716F55706A4574667A4C72346F44565A5330442B72506B49787A63446B34486956306837634B794F7256694361526F4B31426371746477564948755761716778516D6D78342B432B536E312B6E74477559743630584B4F52324168724C424968504A615A556F7377573770713872755A656A71355A50323239503535316C4931577872587662796C39595A65417059474F6D376D394535597843697547564B754B715661305971316F4E566C563131683363524D484A6247433148704F6353354E733530434B76632B536833376C457776564C6C7271574C6F446770436B31644A6A6C4B55727076766B3454634A445346507264356F526D6E57727074736478535A667444412F774456413951587670534E6F586C77435977345A375A536551324D4E6A744A6871455655307564627267675A494871466E3334534C6F6C676F6B7366596356486338326B654A34636F5A36485A7A4D4657794D3167564F4F7051616A6D71334E70684258703652516B4432714E4F514934355A63456B7A48704D54756C79514E714F425264656C355A7856452B3463566A426D6866695A546A7961534C44565A6F565A4E37755A7268637275417158384B6D4C4D71654675416265336658517561426D674C5870425A56477670727261387143786E455739666C70705A6978524E68487475316961564C6A35584F7573614F6C35775561436F45357076716844556A514A4C6E76655276574B4C4E52433042596B76673042346276585652726130497A396C5556662F5655484E5178572B37524970734D335A644F664B444D576B6B6639564D6A39774B6C5475674B7256637145756B5968734859723631746D2B505072656B486C426A6C6C4A314B49575145367559595A42667341356A373971366F75344F497738396577493944475A7232732F4178506E4B575A504A357764363535433458502B4E4D357362424B68352B4F69744461384F322F636E6B685769516C6E323079347175784874656D6C4A4865327433723456324856435131484E4D354E7351473833785755725169764C3341483366545071414F32665936635A4A4A4D5A35736A67326A3751645A6A555A4542413541747775317A50356F34574F4D6C61534A4A364D6A434C4B7357597851636E38794472707073386A744B4A4432626B706F68697569674A6D694D72653878754D4268394E335775794F3778415573326B33646137443270326B7A432F4E3251417354367579434C6B506D34624C6567426E38796946504B66692B5445314E4954547358642F2B74656C75696A2B5635505146444637374978566D2F38766E414431486A504454325252346E4F46384E6F71647432584E5A44776867765978572F696E4845414D464A36304D5477483134642B6A4F59664B5767365A61416D555A7A55676931694F4A4F695747486F6E62596E584B2F79447A554456433262786351396A486B566E787174576A5133344777476A4E334A505A323548567A776D625331377A5A386E795151664A32357645387A724362626A6F424E4B34725849616A50416955694854476A6132767A41785A6A304270687835436D2F6A73582B6257633633364948667154534A425A41614D6D522B777470552F58317A387A2F466D317656597878522B6E4669525A6A736A616A6C62714C565835575148756E5A7172344F762F772F726E3848567451496A6545322B61794D34624230536E49576F6C6E665A75665268364978796C626D43414F474D762B5544767076433572773868535861426B76486C462B5537564C513459307745455032794837514D4A70422B32442B416D374950544D344A502F7353736A4E503549482F795876564950484A425942564646515A45695079723149595651575A6E674736547334556A734A394574772F4E77424364585542574E74677A794937357A394D436C664C736E6F6C563431454261563534714A6E4A5975754168592B592B647A797A685147564853564139315A676C31644A386869506D487868636A6730484D77554952704F5952542F4171696D6C386E59516B634A35564C4B6559694272327141566241556842684B6275736A4E30416C5665474D5367476B684F356D6273376C514746726D6D4175735744363467425653665246575374644E556930464A63536A616C787552426F79374C76724D4C774E71356D5377794F754F35424F4D6E494C576B716A44472B6C3661506D58563165774E426F756639424A4B486F5A4C687334342B58576A4C5249566C56585355716B66687A6131496A59753432485330376D56543159544B36674D615875724B656C5762656F7169594F4E715655525277657A673169706F4A694230316831764B6E4E4F676D65596E444873777747743639727131784E69474C344C675A71757533645771374A6A56426F61445277737A4B2F73474A4141667A72756D6E794E2B6B70524B69794C366D7152765A495845306B4F79704B4C694E6B474A616872495A79656A2F4C4A752F5A556C78556966533270773669382F5A4E5568486241596851665759623156795252766551744F726844715846706C4F4F666A3268655677523153557143364143644C72546D6E4D786A662B717475456178357273634C4D3077792B784130427A5651764B4B6E76632B4E6E75336F31476679352B3637457132324471364F41784341547275544B754D335265676E622F455475786D614544373276695273386A55654F6F4F3257643472524E5571594237694B50677648634B2F47644D5058475068554362504C4B47456C496C6145786D444D314272704A73446654563846586E54474F56565A466658386A495556556461585263704159596A4B522F70504348696C476E6F5330703661315241765042664D717158546F566B576A55695548726F7151334C61367A356D32566A53797A4652346B62376A397A6435786D315A7A445279314D796D5563576961646B4E3871494A6C356646306F7072564C4957397154374C50646A57555430366E686A6A72647059642F46305A704E44307A624D4A53717261524D50794B585535702F4C4D58344639496C696F64304D71556C4E4C6F37695250717A7846624555636F52496D36542F67382B3439434C72384F466A5846307161675061455853307132586D6C46414A467A695A3146796932335068387357663073742F484B787A4371636B5A514A5133514B774832576D72673764514E4B74562F344E3241506F4F46753268496F4F2B456A4C4A57324639366158346B5266656C6C4C356C58534B667A31656F494A3859704832334D4C6B63512B4C585A32346255506A6B417544696F6B6C45487262764534564457764D6A5A78583359794B344A6E6A714444744B78395265646675706C574D55346B6971712B597133666165454543385169336D7675534452496D5965416A676E4D4F706E514846466E39684A5347555342594A3043357359476665516D532B4E45694E667565354A2F373835676E417336654172393958616276766D47584A5279507552704D4458453057732B4562504479386B5A56776B6E6D48566E32496C766B734A6E3869774F7155506269546759357643755842417275374939486C444C73335A68527A416D4674727A6A414F31727A5A3064434C35347353366A796565594B765048374C777A744D5A6D655572726967506C694E6C543565454C527852703938614136592F6333716769576E7A324F32322F757A49677551654D672B39706A7932544F3866723842416A32796232534851534D6C326D5A2F377861434665654342456D38345A33727378704A65713445616173613368575738374D314246466634625841553945353574667776695739515A356B447035764A3550654D4B37786D38646D39546A47662F6D6D53634433487038436B666245355832532F7A424B3778672B4F4B386F592B644448687A4E576A634D757A4D565672574A614D6E59424C2F48733662523432736B33646862432F724D76374C592F37774458535A637A4A476669526B35443473627161356361623753794A487876382B3533322F656747614B632B65784A516B6B4477484164456E577737716475305A626733387063306C6B6843536E762F77466F2B76467A682F4F4D48725835766F4C51624837775851506D4245427844387342323277336259666E673259546B38392B454D482F6E45724E7266422F6D5464776E66397544786B31386434503770434E2B346E654471534D432B72565774477A4A444A356344726E6B4273546B68754C694A644F3078436B73546C725870795758564238794737465151306372784A45415571743475595255346261364334446F43356871766A4F35564F4E4F62714F3567396579362B6867343046617776414E33476B68706C466661636D43364954484177537A476C6F4A6753436B70522B365A5433726D4D46654D4B34565A516878356C7A7A346F7366674A5346774C3267616631594A6E6A526F78366541546D58524B454B456A56627343794F4244737A6378676D6D63684F5070446A6642486248345079356445704A74676165374C704A362B4354416C51306D414B736F797A436A6B3779665257764E66525452416231423072357270533370347952314A56655853516478436761764B4F412F3672486D447041303252516C457973677366534A6F35496E654B564F6870476F6356316E34314A6A705136356E7577732F5665475644767A47686A6B74766E364E6F436462476D37476A504F4C69426F674B6A70766658744C664A533462587644345978737053685442776C4A65565858724137386F32344F787937436948536E4966624446513373796F6F72526B6A534A3176516D57613465365445307A5861516573666237496842685171634965366C304A3747536E4A324933664D4C30574C392B7842734A574D3578536B5754663555734E514E534A747657456C417651784B414A675672714D6D6A4533594E464968384D58696B74742B54736D534D35452F43653167644F6D516750716F4D76384A4B383776544850735262456A7964444C765963474D324854666E4247625244556A5646642F485A6A6B31364364727741356D4B764A686D534B717658314869794D37545654553358343151316F4D5068307551792B395241614A6C5862374E4937506870354541336F64506C526A4D63394E47476E426D4F437551375A497942786C622B644C5572726669626F684A6C442B66476C6C36536C39456174547442794B526B43464561452B66326B3864716855415151686B4756714D53783945724E314B6F6F6A6469767A4546375A6A32434D6A5579544F3356436C714562393039632F4B5050426D324B4C4A7643773831732F7953736D425A384D32427535626D6676487A5066327958624C5865494A76326152724E5868514B35674A336E4F5965314E50724B54536F7A332B32503932706A59667159306876385639626B69724F634E4A694E534E5875433975304646614B30505454314A43736355556B6F4C49463368554155314C614F54774857534233354F51666A6D794B5A45437A30766B492F37526D59557369616548554377523437764134376E57794A4856647A7559485445657A564757695278394B55444B4E6F4174332B676A4163594B33617158547955464852455730396270316C7742413769774D6F6938326B377247714A516B6D5675355357394C38645A34716E71784E6C6E69763659424F6439685A3557466F724F5065596B6371534E55456D5A42713269445A2F4631462F53567876696E6B4D5559642B5047374156323246366873346A53392F66684C357171545934356E54757A766A353649783867684C6E3233415843526E306858543775303271654C6B7846534E575674517662532F6B624C435662666A63336A6A444B51536275563870505461617854654D584B2B627558386A786E4D314F3475525A39365761672F6531772B7030595636345348692B5A384A3256436277544A75793742544B2B6D32446C753848363165657935516E2F6C59305A66643963415A314E46734B31684C515A72582F314F7542576D5045697A3767447548612B644553423933615A396C304268354A513433622B6A31386E764F414C2B6843504B52382B73554C447037666452446964474A424F4439377971743575577A7141315966744149496674734E32324137623235373948537A3778492F50384D787A422F6D54393243396F4F764669326B466A38526B736D5334647A556243434E72677A5843376F5545382F4D415A31384247682B443031566232434D67307A516D4579515638485A4259306C76645246744767647055656179734544554E784A6459364A536F4957774E594177535A5171504A726762516C36626E4C30514D485873467844316149596A69306756483868643170667163544A3647496948586859334777466A4345552B6F2F42574A666F574B566164765A6E6361717241717A46734450482F2F5230564A64384C4C684C78636F3273583647795930457A536E5170556D5347787A35496C354C6132644446424B6133316D4A2B794E49452B39306C5A324F6C344C4A357773334B6762484A2F54376B7A7077305041315A576B664F616736712F6B787161766C316745465678304F445759424D61526D6B353651616734756B2B6A763862305263365A6A4232586C75685A6A6C77676A587036784C4274544F474D4F6A6545634A63586F70616A527631567A63484574364547424261306144564172642B7A7669673837303374704D673047646A65576F6A624E4B5A705538524C6F764D394744675A36724259434F463677475166464D776F4962596D32586C797A7575457A6A55455773696D42524755767738347465614F3758426F724F446E416E687036425A335259453043524F596E414F454176694D48413941593247546671655265425468375270716A65525558643759304F6333545146536C736C5A6B57516F6A6C6C4B4E4C723145755147313457755A73536C6B6F43557A77504E56796C714E796E4679517A30774837477173544A554E724B33526468483770703875542F543076446769705350446D425441364664736B4D397A324A667754676C492B6A3139784A4E73397337656844737153554C734D76725656517956656D59684B55314137412B7151543242712B375849347A657231644A5764756430724B74627141334E477A475951364338354B2B4C584B664842346D70776148496B4C4F534F7133715364596A6A7067477648545658627731697A4647547168436D46376A7932536F54774756786B6443664649365664693936312F44584C586F63566862715432515772376A692F42734A68304761353648466B594455634B4A6D3474664748497A324730565362726E5463567A6B5253356334697876447A4E474A6C4B5A323764644F4E653957764A77435853516B4A2B386D59536670447A436D41432B71304353424A43513948566735384559757054706B595331654D664A6A7164556755614E674A2B766651556C5546714A4F726964474F66634D5141775665366938652B694B524F72415956645571796C736C715669636C5A56546B6542642B717159364C2F31456F587A36666F6735443234307A566E434E5A466F5438494A686275724B76704C4642784A4C434F5534757479516765675A753859454A6162384B526839307765627A414E513676436530724F716B7130547A4A46344976496552352B584F357635786972795A7A7839654553586B566E70714E5236476D3849416A332B2F57334775374F76474E55737158477741486A7736784B5076526A7837735358597A44617676746B323859697A336F6E4D684C514E48694350755156504A69664738517775776D512B34766A784F45534D766964773732306264523632487A6977544964724F32794837514343483762446474674F3233752B79654C71364A6A676B3539655948314542774438505A2B4970417777775A65474978684F5452706B656F31664477434F50774E306E786358753464466C646C756E79545634395956745A6C4D3072516B65484950384D6B7A434D4F5739376531307232304657624670424959413549796B4A5875433861756D596343737A49776A444970344A344176384A616B41584C53687A6573786D72374C49376A50732B724D7A5A394C616C78486B336B4E616942344D31614A754357517A5630612F706636696B6832696347346875705A52476C685946434A4E697A496C4B526A7779674A32304E4E484231324C6E516D4C304B55357667692B4C624D2B795337526B6C39774E617A3946346478444C436D3747336242746C5841654443557875523744576763477A6A526E4E4A55674A44766362454676432B6F6B2B675044734A56563455473835657374474B2B44324C3449777A7479585A57584E4B6D4D6956642F39725166553967384F4A38657756716B704E4F544E7476576A6D4466596A395647317A5935536238534B34645A3678434230316F6136457649496C6F683234646251725374504E744C4E6E6B37754D5279647234766379394231646F31625A75726B443277634858514C6F706C4443794961694B4B43665859733765646E704A6A516F2F4E366E5369346B43435359734948416A75376D314E517A3944596F303747427834766E63796F62477130646861794F33712F4A2F6144434144586F76376B396E6A42427A5757664F593774566C585A444F6C715931636C6F4C74793659494B7A6C65525877646469306D55597069536F68746E7956756C5A51364364657A37556157675168586643745A7835646B756E57524D7346526474674C56674E4642793259733569685A747574494355505778386A6F704D385167796C615A58716756546B34777A72713179767A586B47535A7544584B677436686D734A535A474F616471776651793545614F53463163747767617955354D647A366C575232416A65694E565A7259426A767377503355714A565A34553065324D495474734E5546374873743852626135366E79306C4E6E444A70642B7350474B566553527168534B41366A6D6A7054747172314B76486A5454746C7773483138515571567347646B522F68694A68354F465A4872315271396A415A2B526348796675563471546F51535662416D6531536F5473696372472F555A6E3961496E4E50645571794A7045354A4144704B48706A6F3538376F4F65416865445A436472593152344F43306673484168737171643231764854544637794861435A5675574E5A38623150764952647369662B516F2F6F47384365396241665372546545476B354939706938553748696A344C566B465530436D68504B516D7074517749443134446F4C324644334557337358554241376349444F6D716449735A59744A704C6966683265515330507573392F7252474747695653776C6174457869695A50616F564F54684C4F31697669387441554575324F51416635324E66484E7748524D38726F32764A55433278534645314E486A32496F7832336656594739526933566A61564D4757725A4E38792F416D6E452B5650396D4B76386D374233362F616477722B7233384C4A352F786F377A684F6661697831306C7269483754304544413967345745376249667473423141384D4E3232413762595874764E6747386E33302B7730642F6246474E73357750392B52397351304B554D4C567237684752644E4C2F4A5A6C6F56442B6A682F796775364371756D4D726C37566941656177696E592B374A43466343503169614A4972707A517A466D744442344677637472386A51737A535461655174446E34364144515830304C45574E386E4D2B3673556831355556337434716574514A71766478526B32566C37793737346267512F4B396F32465A4B6B4971767A434C674C4A43677778574C49546D6963696E6267694556722F536656565554545635666A4C4751616665356A466864534B465868335230306B4C2F716A687151594776785A414435626A564158746C5A4B7636723444797164754F514363556F4B515732685761386C4D63453235577A7446314C4F585264772B44497A515A31636137335A5862446E7975413763354D687359564B68672B54767759427757507A5151307A4436706152414751496F4E554361587955454878665733653149337952526846676447776E51307A424244306A6B44374F6B5244464C696E30336E6B4B6954632B346B5465706241673536517344425436726131646B5A344B4835376169532F6E374250636B4E37454470514A3043785255395256486D536156706846627970594F3143744C7A395A57647366325232396777614A4D7731413342304D5A4F75397942624D71754E79336766516F746566666157767963704C6C6E436A30474135386A475A50385A457159324B58716661644E6E4D2B742B6E69526B7A4B62715A324B50345147742F793268426C6572514341707645626F4631326F443235487555516F4735706969334A6E724E796C4D3163316851546B446F477574386662553959425635436B37342B3939794A4D3776636A75624F4D6B4237474345666B307A2B77335574304A69684B6C3153335351463749732B46586B4D6B554843707267536369346D384B4461336C69466E643158456B4F437866733347754C5953635A6A72514D777A4A484D64777063754C6F6B6142724F6B65386A537448574C476D6B375447686A7830687A65492B5A61706D585449312B774D3044317454596764335859416863672B752F71325879324F443150634943473735485654642B444B494A554F792B347A52376E766C65724E3456465A2B4A54334C79512B656551547A5A43523345713756424462454E67574F354761694D54787167737A6349315539696972374F70496B46414E4D364A586F62527730683645434C325567383977312F56676C4F57506A5838667653483236496B6D576D6F7032486B6C6C534E413175633041775354583351425772307A534A386C764D745143447275366B434B714F39576E366E2F556447704639436B6B7A3474726443463442705367746C50797354544D664F576178485230634C6C3432666B4F756B7861794B334C6632652F366461476D356C4141646668736646454D31796446677A347264476655527472616D62484B32655344325A5273514E64487A494E6F707067444C4339616E6A484749625652384D394F6B304842547439474450774875312B37467A6D355474683237744C56425934766F646344446E5030324F4173784D316E6F4D48462B3439636F6845443974684F32794837624164515044446474674F32324837344779692B66335254383177373457442F4D6C37764F48622B594573704E2F594F57705A6B6A4E5253526D397971444E76767031384441354671373633364F726F45435468316746594F704573324C6D372F7064384F3837343174583763564E5855497257673467674F794B6F7462667758732F767461364F74425A7A5431484D2B45546F444437366C4F4164796F4757416E6C5566564C2B48307838784830496D64444570527075664D56394F417A65456F4E3458534B6F6578734C675A454B323475534D756B4E304F46443454344B4D4473674D485143786A64414B506B79724E786D4B47366E716E49726F4943596E496B4A6B5069384C3554526A57706E75476162394345426F7A4C6F6E2B6244467A50777172664667584B425442582B526879725A4C523262354C49445956734C506E74356A4F70736A64474D684B4D4B384535556331475156505A6F6838796A5130337A51686B71763371514875796B69637372456D417A4375497233654A6B5933745378564444726B417A717A4B516453683244312B6E566D667854384755307A50387157554B4D397738515173415A6E5977636547653347326169714D57354D5A4A667234506457426B4C725531734D6746463639644359795072626E665958644D4E59436D592F64536F75436C3550726768734557484637684E55554A6D4352522B6F702F78754A59447534483071565742644D614370365A4D33765645335236326D656A6D6B554478353456315844326B794C68563536396E722B6F55524951776C513530486D38457161514C4678542B47426B424C4D326E505573436D7069757369592F51575A667A537468682F734634642B486C65496D453532445054484D705657374254336F6B39396630742B664270553671385759555068696F36415570555079656D33613343784B375A7232776F6B7367396D514973427252526E7569786B7950764533312F6775396552397241677258424952554D6F782B6B34744B6830546553383572415177356332657646787358427238577762727A554A754A475A2B5A636E6C743874446C497130426F307566324450492F707856665371457149764B51677A4C7A43394276653070706269426734335A6D663963784A6559644E7830695262422B7847616B344B7256515351616567324E3264785469355652594E7762514F6A352F77737164584C3758524B384A58775439545A3331554644634457647175387463766C4342697169526272464761637076664E6E4D4645554959694161556571704B6757767473596F6B2F773259486443754A304B5247552F50656D55524C3873526D776435516C727876597A464A647765495337586F6847447251344459446D36486F412F6157464474574573446E69304E45493666356B2B686953646C6C533832355A44507338506F413565706E564E49696B69477162516B5673334E676D6563496B744766734E316E4251684D753831585465705935444D68594F376C315A357063484D70324D73717A4A4442433037366E6D4D384543413048554F33584377592B2B692F6B6E6D755A6E50636B333056685266545A59762F4C693845387467394230413844637A30507A2F325475374A556D53347A71375232526D566658502F4F7A4D4C67694242436B6153444E4B467A4B5454446669685235416A366F336B4A6E7564434754614C725376306B6B42424167736469646E5A6D653771724B7A41695848336550724E726C4172596741426B41526179566255393364575A6B5A475257352F4554332F6D47555A6E6654417A482B487A386A4F6A64493946707671784B36713233336E7272726263756776665757322B392F5A593273484C48486447662F5A4F5A44726364662F4C2F5574794755506A6953656A56557A574247634C4A61534C364D424939364650796F333739384A4C6F3862572B674343424D4C70552F6242616154384A37585A4D55344C5432574F76594F324679446B76597534705A302F494A754A754438306849706547656A4350645151566D6956597A414B656E6C79634454506F6874777755557637506B466F33545658397A5642494778774867684A7A51454A33626D4657304B4978414E6D45776C4E6E594A4F766E6478737A6242726C37596F3354467454597565584C7833396A4D69374F6F3866414F5952314F362B4F593648476F6C6771485978354D394856567A51676363755761396A5861424C447575465950744179747A33533355446C7A65795A334235306237524555656659436742334D586E743646333956354F42457233724952333350457A6A746B4E4157553646744F667867385A7936377746686D3261336C54567330615546306C374543597964425A6C6151714B37364A656A58727572474D636262787877627659697734332B336A3752387A462B6C793673376A686B6D7949774161355A68796D4B4737674E7A43464374745873357435645132444A4A74614C7672694D2F76745A676F4D6371306977626530656E5A77333771734D73727652617732682F786F686B696C6338786678306C59394E466B6A676B475838755546446159655470654D564A454C5473457146345575735869724433336261667644722B45726D6F69396358704C3847724C6C594245572B474634636733375463556E78493838773037632B57737078434D5448436E546168323354304432364C7A36464A59346F616F4B466343566F70786F7277644C397A706B6875585062416D4E516F564E626C49473853446A66554C49644D4B57546D5143786648723647476D724F7A3853644B694F72423775643269524E74383670794A46304E62595642436978774D513677584A2F764A724352432B6A63546C6A656B6A477637702B7936573562594B4345574E6F45366F596C6151552F626F446B454F327275394678792B425748384F786C6E5A76354533566851346E36784C336F4F6F492F6B684F344E577645366C704B794236436D4567397632616B71314C4A74325837567962653776742B3074464A562B52345935324364774F6253356232792B49454766764D34416E6A6E6E4F566E79536E4D77774437775150744E643136392B327A62526D554E7776763641616A6D674E646A746E7133727571666E4A6A695352534C6B726C7870725347616C76496C785448383943623557304642306B5A4B326C6146314143324A433936746235617765594B4F553355466B65497832426D4E3073627A306F57336D7A7A725767537561595368427937704976622F692B676A59324434776963726635524C3071784F63523154446D48466E704244356B396E376D357A30577551444665524E34383836356462777367327356537A5A336563454A653847793046487A6D464A38456670396E63517638686A6950774F577236793563384D6A6F3845466D393438765556794C415452782B3549354553712B46355A78736C4B736D4B6C583978716D646B7A307063446E6C6F6C5234724F706F59687373376B4E4D38654B4C726F4541582F6C727950656552434135574D34794437474D663138465A73744C4A6657686261794149666F5478326C305674767666585757323964424F2B74743935362B316B4E6776657254777039373839574677505850695A2F58304837537A494159636C764D53373134304F69442B2F645955557541727272324469662F74686D4A6A42786B5862536333436E2F3338702F6B4435644550302F7435667877505438583667347A54514B516B3968424E3050784C706A34775472732B56644B6350746B4D6F5A3659444457354A6C576242693044466F7630442F73485546547849366E76536F62716769506C773150633936635075575639343645324F596F4877445A6334424E6F505A327A44414E694E5055774E4547434F363173786432614A665A76796A4966583264456B58474938784231794452487375594162767A6545516264624774346956466E4B7A6B506C4176463457372F744F71582B38335A495650437733635431495552696E4B4E77517166473249424B657841544D56637371362F4F507555492B6D51542F37576E4673524A64494967426B566E6362466731503250345957736A592F6168485A7859596D6651374D41663262634574486338636D627136354372634F354362417A334E2B4F55773352424D4C773445765545537756417055564158596830454263414566313945472F66694E57674268316C794E34346E7358795A763566436F622F31644B72414B7738457350775051354532356D65372B2B526F5236487131507375514973677A465A784F674C645254542F664F66373635786C736F5A6A6A47705956435668646254636A4D4632477974685132694F3075314D69474D6B466478634471394B58775458462B736975526A624F3752676A7142513978636239545335397A63616C68524649497A7451774D2B7A6E495652617131565176684C4F517A52504C6D5A754C7536595275374B39716E72755061742B48544A3375523241644456516765354F4A746C4361482F696C3363734333416C594374587150766F42326C74496D736D38752F36565835496F71627342736D5748394C3974385A2B45714843785A3461726D344D622F7256345375464337323545555A4667683642326F4F573577482B376C494D355A764F586F5334386B6F6B7533614F425954535466696B7368576E65456F524C6C72746C774B414F49464132376E44397377376E7832747A796E5A726939496B42555879517755546A674C3055434635654C575679357557427A5A41564C6A75756244625268676D2F31594579725A635655394F6A424B7A524D6A61556E6F48576B6C706A5A474F4B367261586F705932695A6E465474483466546D3855474A4C785075446D5A613737496858334B425462436749364C58394152336A77755A547174736F684D6C6D33632B354A6C44472F41685A765A7745494C684E5671326D634C714A36756D594977795A4A6377756A6852614C61787346536233506D36674E36456A6C71794B4F3835396C4B7A614654396C46544C4A706B6B4F4D6A6C5541496746587433316B50315732517362545155483051684841726F667151517A752B74597638486E595750753659536C38795646745A4A5A416A7A433838345A4E69724B723030463049364E6C314D4A4B4C784738535932597A3564726F6A6D345A537379576A464A57675859784856754633515570486A446B3752696C2F6A436B4F4B726B464A412B72643771743266677776556C6F54414F572F4972497665766F5857757550632B6B47784F7364575649577A764562494134447941313375793667576266637275525474477141487A43586B755237304F2F6738654E524F5448465075614B70364C33536238714456613072355850527A35564D7037756863654E2F2F70395459464264346F572F386C645762373331316C74767666585752664465657575747439352B5A614933624853725076482F354F3242386C4270334D2B556479664B2B705366774F33516E35566C70362F52374C4F4A46787147785A795149356A4E6564434830346C6B48574B3573537447473338312B524D3467686D66384D425A2F65453735325369614E5A4879767A414E4C7768656D584F5A466362774A512B36645039777833522B7864436A2F70367679663658482B326747746450637A4C6E4C555A676E696966457A75614E3263714B343070466F334B4455554C5152706A6D756D335A68704F4D4246584D317076676538316C6E566A6D73754C715476647935654A476E693147584A74676E2B6734762F70734734714D7A75416E5152313879357574385A376B76744F4E356A596F7170746847474B4F4561587655526649626F767570325A6937477558442B413664426142724432357643596D6A756339664B56753336477371476954527743517176654A683331364F6B426C4565336435727678634D5A46644E78504C62387050774F4666617261374E69753632376E58636430436A524C676F7554414E306455456477684F6F376C497A5231647A63484C50673746783274314637733553766D474451494D73622B4F675355704A6F436147317337376B4C3336436F6F69694534312B4569467075654F7248717564727141667A62684B67324A30785954533775422F2B39524D4963782B71415951765246494D48352B714B4833416E4A373453657169784A70776573504946314978786E484B49583155436F6830436B44766C445973446358764A596D4F51586539756E47726E44462B35674933796B7A5A4F724F6C785333436E3278774D68494F4C4E33352B72557051596777324A6B56675674712B5450783363333273704B426D69397934334A765156432B2F73796E4855564149684F344647757A47533237797A5271426447376264694A426F7942736E4F736F476A546566417632334F355167564367357178767276713869576132714B5055554E6569534C567832766B53656E6F6C517050774262576633476D2B4D63577243326D79684141654771426334786D456770573969653638735967334251747070546B514E375752635A78745531777864575247326B4A5837585250764A6E304F5A4133456B78344361534B6961564443507763334845726141336D5572644C4E7255677638676871473256795842786B70653253714A68537367455678375370596752546D305850696B63396E4765334F32726C3635686C30492F624D57785A4D3562772B6A597756647A3155706B4148425A49684642784963355168535359797A4D4154346D6C4E4C384F4D574C6247794275364E526B72696C51334C44593368596F576E464E5732426B374A6C6B2F72485537594D354D695878576F5876523157764A79357A31626A576353504D306B554F384C5A6E656F5745756B5A42446C43614E743559772F6664467533472F7174454E6D75303853584D4671384A6675782B6F5557436E4631707A6E45373832674C46742B59775265327646793432484876634545396B45434964536F544D6B4C6639517956474E65325047304B6C786765646134706E7A4A7745575933757A7858702F786F754459314F69346F4A322F4244544C5262394F5558647944726E7739736C38796366636343525275544E30544F7833437A474F344D7532386B76535A666D4A4E4B61556E5A576F414457787579337077436F6F35414D635678704F712B5466752F466C4B6438384630612B3668673436557770795050517A35743557696E5843776E7246326C7942615476726266656575757474393636434E35626237333131747576736F5767385070505272373965456366666C726F302F2F365156373834543366766835382B532B376747634343645379557A5733394C495757764630486167507832433471704831435250753658466B4772492F68414C7273474970734834786C6B6F6A317158722F3073744A677A6A65586B6134454B7277555A6D63776E6A535477766C56352B73644B4C48316662507841616C72436D32332B3648656B6E7A773730312F6333394466446E6837674F4964545850737779554A35664E4948394B4D2B2B4338756F454B645851376131783274362B434349726A4A6B7A365344386E65673236575A6C557A745163482F7347594B636D553469784A446A54776758626A6A765A6A6F7430754A4F6E71443741516F665073532F594E663533496D646B51726537417334566831415762556C67653958326E6F4B6F4147344C76772B312B5341506444494E4D2B63592F754773344136455968546959636F434579525853566663374C3254486759662F676330644C594E72375862537438505473567A6857447671492F7773597147556F637A426944694E5366623767616137624F4B7A555544677248394978763541634B694A655569464D32455869706D6E5255494A4737542F59786F455967546F484B7670386A36735A725945346D5A774D644F343336595553516A4E62434B4C574B68703841776369644145536D7457364B6A67364470503175796F4454414F5158786C322B635A5174764F425249543961434F72566E6E4D7646784358514F644B48426A6B564B646763686C4F3563454467714E4453397858484E4676366D782B7A436F57346A6E2F53534345474A6B794F456A537366366C553675524F525133694355334732416F432F634F776F534C6D675A635268626D774B4B7954414254723465426533636C7166446A466654416A5639357A30505564397A6457316152515372416941666739757A6F632B4E47465677654975653650364F434A476C694659352B6E435244645272644B4649784369744C6772315165763451386149615768454E4B56726C4D4346334A785870707761745350315A622B38396F34316E526830396F7054645A335A38596E313477323365744345334A6138635A66615570794F4A51645865476166376F53394857536D4D425A772F31395A6370736F594F314F63576233566369614A53696233715A5142534567336862565243426555324D6A3578625370737A31386476725A746F484A47377441583675626E572B79427043316E63474D4953546D79625637526C4B5868774B4C36783833476A43445446776338422B3659515A55504544595A7A37442F4F5879446F4E7A6472545A486C326B526E527A5177313073426F345569577438612F3933444B4466365467326B6B4D2B663049746A71516A654F34544450386478326D57614976637A45572F736237302B387577585A4A5767614954597A37476168692B61614B504F724C6D6450792B363464354A38334572504543347236303445516D5A626779484E3931574F486B564B397A6854726D5143424A4639346F4835775A69794F33637A646E732F642F6D6B785558504D30573831437543354B4E2F5737434F747A4D64634E7032785730465A52433635614745776D4874694662784656744C3978776F356E67514177476E7A614B436673746C414D434C6745616958357749354959324A375A4C776F57742B434C4D6552646E35596F48486E48596957466633434677397953567A633075462F514850632F4B3534764C613034474F72597475484C7761737058695330666E6A5973367676746D4C41507664736375327956465345394F2B4933567364584C33514B705936734364746C72392B465071572F6B327730382B4368356E3264355064693545646349494B502B726E6F4E34636A6B2B5A6E6835487578354F39764869533236776E5A75586D644C495039646F3845324664656348696146536575757474393536363632334C6F4C33316C74767666583261354844662B362F662B5A76515279347552452B4C535448732B6A7A5A714A586E397779684E6E7A3079777A75444D334539654857615A706F4E327A4F77363271373065333533703878392F49665A414F72336B6648734179714C785450307855782B574677536672666F6766644A765068584B3531583352665243483553666E785039305A7542546B75694F6441574544447A54614C785A6E4958384F4472346E63313032345A4B61386A7A5958705358667955496A657A6F5565354B775030735545686F4F2B3778594C6D324762317036633945416639634830535839347A5071773345436F34754A4A44545930584D4D7A6A6B755041554A6B6256624C746A5163787A614A46516C4D3977762B755746547A76462F77303449705A7556396A6636554836413639376B63643048307668473765646F79596359544C6A6D4277734A30386679396167502B326361644C74363544534E2B74706E476E57484759494452685457787A565333434169485053506774743046636F46396179364B4B4764726D477A67323443424D706F6E473539554C2B6E426967314964363071376257485171636E76767A636E53456959376E6744344D57466165516E52457147616B45307071626E5372754A6746457A6F4E6D43656A32322F4E3458314354534C53394E72792F4F4273635042676B5A4C5A78457654516574465444516F4D34737A565857695641767344466A4C364147676D644E6C2B62774A6F50726A4B634456786352444B6F6256716436767A4E4963795872634A75436179334A32476E4A4C705850625A7A5678734A4B446138564243365A4734706941685447524A31596975494F63446331695A4944716747794952396C343834493578312F5973506C784A5044634A514C7057467854685A616B6378636343595168346868484A474A4B336E4142445930434F4D4149496338532B4D5141336C61457350464A6876747866493676636B44673652433231436143312B4237593777776463657961624362514C714763427938626A466A6256526E556D4D575878477A45573636693232676D4A5362617A62343651316859794A2F446E472B477058497034736A4E6777545158546C694738494332783454356641543935597A6B356369467A65466F6F7177563033446E6734634A314559667163684B7663524F336D4647357A736B53526F77625975663156336E41626D613663395279496F5268507567726944436536685A7647616743764F3153374856787531536D514F62794A7057364D72593473735144684D666A5978653944616250344F32724B706C4E71496D73493861346C5375756E78476F4A4537734451325363366E4F776D3966514D3332666B6E66366C6F4D7A73327A31444B3778325973524F4D37564134573558454A726A526F522F475A704172356453754336544834724B4946596151554F57316B79433566564D69547364445448667131364968622F65563330565832795646733646454844315A63327348306651693975437550463757743265773748635751626C477136634862654659446C587065354C482B6F647430554C794437666E456565585031783331444175324F50756D784F743136677A46357A6446784A4D46334D6345366C686777376E6E7069744F39564864706334515474364A694D675536416D55546A6C6C774C2B426357613937713430434B57617261564949324278724D6A687469614647355747546E326E5743623455764666764B586F4254324F736D4E496A57504535684F6F3467697A304A427375482F6466494D6A776D51536331664F6F463854636F6571347356556E5432472F7A36666E52644B7456323577507A5275442B35704B4E696656697050693931672B4B43665A622B6E5136726258796239393266364F66382F5063526A2F724451736A70302F2F5367452F4351624E555438792F45492F6B79783053485A4467587574466A50442B6270504C6649786D387439353636363233336E7272496E68767666585757322B2F64534936564777366E30343850353433685473506D584C4F39507A564333703839396141714D3178392F61495A664C366B446F523766652B79766E6272784F66336774392B74344D6B58547A707A764F7A35495A74586349545078502B723448637158735A7A526F38767437706D3939784C7850726B6C6E774738444C6E796A6A2F442F34576D556636735032442B384A6672752F784C36467939472F7437726C7954486C33536F3772676477784A34306D6634342B72757766494237486E396E76346233586972472F2B773879587051364134344B61764434456777414E33466A7274326351657676584179516C4C7457656D38365051757A637276562F50564F765A6E4D69546A4346535A4E504C6A796E52687747696536553141302B7A55426F574B7275465A74333353642F3063505243776977755070716A75487163562B474A5368356477476C4C333856746D4173502B6E765A6C762F76676A5541646370594B2F706168324934454A794E51562B5168455939707A6354424F394A2B7A507150725576346F7057316E377474622B48724F396A6B333170356B5350706D3873646E79376B6D6C33646B344846706844555278544A5A30434E454C6B75676B3165335847514F56773941597A6644674C44552F463363333254564F354351515A45374E6D376474356F414B376336423044465542635562664D4C6D72334C6A724573694A4D724178346730574C49354447474F56684A74572F6676476E3757704B714647756C4A6E6F7466713659786245694A37714A7370724C55355A7633594A4A62376879485177775348434B454D4A6B486A6177644B344A4A6A4761706B4E69652F39633863795574315633687831566D41487A4C55425144542B6972616E634B576A426756676D526A67465559574C6D526D78696250472B7A6D742F54433059326B345A6B346C594B45524157577853445A75434D414861474D4F2F314835736E6A7274776437734A726F5A4F4473784E4A4355612B33747A435163326F6E71684A4964674842375551426C77597836374739637A435932566B56313464434637744A4254483242784C6F635673536857484F4234634F77724E3962324253746A6D6D566B49767235725A694B61334B343952434F3548454F45566E4830396A7541535150556F4D623046756C4A6F567A505A41767861652F692B3958545064367853794F78523957364D6852464D445059595A474F4F74367951537779315837557A6C574F2F4356584A634370584D64584E72774534315A73794639416D74745278714F623665627348754B3959497A6837677667484347654B6A796D503532463743436B416337326F714A6C51316C496C35336331353175654A4D59573663575A724458466F49717631436335687A59302F377633556E364450502B6C757A62594E6A56596930684F5153525145556D6A427672564168676569434D39707548586D4437484E776465714630304C424D6D2F32634B36472F334C497878435945684F2F413545466A585A615343627467775779566F3541563345514E77572F6D72666971522B613773754B706844346B644767453258472F5447794D46436A676C3437427477664A43334843346B372B6D7644686D422B4A6546396A6F396775557148544E7331643245626956326A656C454B50684F7936387432504A686E646B386334384D772B7742356C69666235395065676B476153353674434931375736312B585746344B7972656B5653645337452B2B306F627663506F7665774A52555032777161464A4873397756632F445A48466753564F4E5632715774394572635A6E3851763937506D6E53644950385545637A4B4E4C4E50485843647679316539785649346650792B79753039792B7A78624165542F664C7279617833726A2F635743644A6262373331316C747676585552764C666565757574747936572F384C766C563969657A393357796D63642F2F2B73346E2F7169592B3342463930496671482F314C6C6E3939513352344A4872314264487457562F36766A3259752B4D464D644377455569566D33545439392F58682F362F3061643766516A2B67302F3057583076644E78454C4E344D337844566E793177755962743031454B727475734537472B68767263484F36464C75694245763847712F736A6659432F6733426339765175372B6C4E426A564753443673746C7862416C343772496D6D6B6D7A2F454B5167506A2B6D4D4F4A52704E36463963314348564E79562F354F2B7A4F344D5063676C5235516E5667582B6B67376456737A34622B694177436E344B4C4876774C30437A784867674E64667A6E7461646166666444762F56673339364E52364F336B34694A63636E2B347248516F6267383164377875343644376D335A4D4439715A54345870505475634F454D554E30326B306C4371755A5A784C724C5A6D774F456A48444B564F6834304737756B676B797749454178334F47494D797575474746414D523943387373727137566442453849655261514B654C64535A6375596A726142734C637274575461514276564F45326155414D704F48336247374A464E7A2F6A653138536F4E626B4E7A6C41745777566B59376F5357525459313142336B4C6E535A716C66646269777856755A435870336D67324450644D6F57516D704A6738594F52777167575744427978666E566350706E63546333676C77354D6D45762B4242323273484E552F48482B4C755751664470703578396864505934534F4468613744684C435A3547417935482B75656A327A79306B4E4C76776C7A416E3453686668516555456653454C4464467A72653670567532387A537541334F4679756F466E52586B43654E734F41356D534A6677305755314A4A434E4D565A45444355372B67616E426A6274584C522F44734133764D546F2B386A426966664B52335A484C2F6C3553414B4C384D6D75484765535A7A456C585159614A5849456B7576616136717932416F42567869547A6E4535616D387242792F47685034493635514C685A7664306F304356533238345662736A335954624956443158537368474446516E5933636E577263484B3930496F2B717776715869455244326E4E4B322F73643350524A75524E53717364634A7576486869494879527A7570755976456F5551305332584636706A525154324174543947736B59566F464A6F625A474F4D6D654B646D2B4463785777446C356F75594C79696F384D5964637157626D2F707468517A78494D646B6931716F77743274393842363176334D4641556B4237796E71514B705969696F50506C38517A467230563267534C5047796856623836496E597870382F437A4D755159626E6C45734842327A30594968593747486A567937586F73564C637A756265387A5242527659624C3247334274367A7A482B61306F55466B67675975355049674D55746F4B686D6262782B546A47706B437545646963346669775250563046627334413966616151626355463478536F6535357034516174634263363237563056557A4176494B7A626155766963724F30576C45312F456535307A337066585853735A7A307A476664715742317A6C6B37644637314D3273316C336764395872596A586F767A695A326D34743834533139324134724369526C634D45626C51357073503847633863487A2B4A416638352B443857537134726C55304372506568396552346F4C304E592F38504650344B68677955456F2B3254385747486D2F314E6C562F77373436762F5473452F5637655A537655373138562B5A72557979353939395A6262373331316C735877587672726266656575767474314B6F6C312F444E722F554A6E33412F2B4737516A392B457637483338364758436A3958477A74724F50784234394D2F2B777A34762F342B79515045356D372F727042497750792B782B2B57526C466864314470654764304D4D2B307848686D3375686A77616866524C364E3639492F6C61333856794550736B725031436C44794D3432676E696C416C762B3658534A30656D3138644D397955624375536F762F4F7746337539503152364F734446377749643349586A5762642F4575692B4E4E526B2B426A377366376561552F304E4C6D7766685661616F4A58536335434E3631766464794B75354E646842314F544C757A76684C546C4E79316E6E566265526449466F6A384F6B6A726E434A4D30376D344643737236434E58756B7933685270614851636A3635366B3742306E516F6245734A63485541496455576D4A4373396D52496451587033566D382F51754D55452B68486874765A7A5A774B4464444166325669394464452B367A6A5032626E726E467577493974354F3044644C67365A466830765942484B41466E636B43306941626C6D4435325444483748434C5142484F6668394D644B6A2B4C4667616F625834466C306E45716535387347634C5A34307031675A43757836472F6A3333564B657A6C57445541562B726F67715068696F432F67657173623068365951356A3569466A74554D7964413571544766392B616D656154614D6B4A673564616637426E576863684C444635567342516967535778493962746E434F5357662B43794D494D644D79566D4F4639542B4B454E3538486F7335676744425938304270686E773438544232795A54415964575659394F735456703759734E6D4B44656942454442704347544D5947674A303372644F513155787561497464755759666D74716B65787573486D4F674F4C4159524945546477312B6745485038704D444B453752586E38324D31684943664D6272676D79592F39784350532B4F357830377A6C6676644E38592B3378314E34747073632B5A44344479536E53396B4C54544F656F577762505733624B4763454D574C58534D36447671435946364C382F645233584B7833492F3772484E377251364C73526F556B464D6F324468626E484F7730396E7A504C6551317554494B384670646E5149776F31687A3363654530385168713176566C63674E31444C4144774A41704168356C6350565561424B45336F65385A386C44535446794A67637A635257777A39676E6B325554692F34336F335158373153366B414F574C437572763362614648386955756333624D4637416B596D6771582B45434464324B5372726E46566B4F4B5A7A33754B643977485675617962307350522B55354F764362466C476C6A5A4E64676373527A6E783272465568772F436830324C314763653637767552746B6544647A656175542F4956322B6A736530766B37384C644362373331316C74767666583247397136434E356262373331316C74762F63483664334638767659395747702F6D70694F7230662B637962364C3558704A395238736C434F54327975363371517652522B6E675A36646A5053384A7A7063534961507775326354683050393956586B6534345650547753684C6F6D4F61366165484937394F544D2B656269544A51486D334D73546B394D546D6371303745746D447456746F6F544F5665726155514F4D4E504E78715236465731703935674E44724674332B583334793862494C2F54614F3062414F32546E507873674757786B4D5875495177397A5261713551424A73754C6E726C46727259334B344E38317469395945654F32684743484746343370664B72312B497672346B576D7633372B724B30323547673961776C70633130526E5065374845594A7A6F70332B336E50392F547364367475543044697665687946506D68483339306B656A384E644F624A6E5066593576676537746C4B35315470684F4461484E675647447A33666A36424A46726657323474375665695A3771504F3451714E6A5444366D67624F4E4250513662565650357166654841727869564251675875495342446C714B426641435858476E677A46706E334B347268666447764942336B484D31373550564F6957562F724935454179684E43693735313149493632644D4764775161526B5A6C576869785A6A637466353278636A71776E4444694C33576772544D51794446494574555975516F32515665637556386B63694134676A7863644332426455484B41554B2F6A434A462B754930696A444F71765942776B676950745842594D56534E6A7376417A7547773446767763306F6B6C61596F6A7469315554322F4E4F7A6450694C737348414C383675577947764A6C446E774853686D474F4E70735A556230506E544F5A613843445768577A5A2B4E304B58533251534D30634972616331656A686C386D73776367484D5251303350346F533262654A4F554F594F353957576C66526D5A6B59354A5871775A796345585A34722B4F78307A4D786547487169414A46416634703059684D426142747A484638396D4B516A7438375066617A585563734F6E5A737853347370546C3766327752775546336636506448523044684F73532B4B64303176366378665A6E6D4A304B42456A317746626A773252444C37586759464F3265545A486578364B2F5437727462616339427252653871637A654A753472786C504F4C6E2B737132736F67744D4C4C714E6B353654654B314774732F46687967534B5048653373513272324D3041716565566C6E65744A746E436C5A7950462B76365037773047712F4E316261744B702F6643472B595065303135393231466D2F624F757439353636363233336E723754573164424F2B7474393536363632333376352F6250494E76692B2F7848612B376D652F73685547594B642F64732F30673963453767335249394E757A7A546575573732396776686355663034714E494E5354584765655A364D4D44383473373039744D73495662394E326E785066505347356642414C355A7A5154755342535068476E6B616E655A7672384A64466E42745A506C75494A59525A596B656C4D3949392B734D7033666C72706E6237334C3534524C34644B64356E7075575236706475355834682B2F7A4F686A39345634326E383565764D2F2F7435706C4E79356A6B4B446C61586D454F647A3042566543436655543367756F62594352462F7038642F6F3333542F362F375A4F4967324F4D484F4D4E50524E4D524C6E32693354455A2F39665A4552596D616E4471756C75705442444342304C4B61523448326F505250315361644A394438674943684F614852656A646F34376C7530544C497874713534596E7568755342514E44614431704830384A43496D56526869673457534F366F6D356663476B6878686339656351354F74414537764E2B4B7A3765744A75766839636C4464557544694F78374946676F56764B6141474A5764617A70586D6339482B465A7278437A6F57436547434F77382B57454E596851643558466336364A6A746C6D7A62786571416561723265796834774247635A33634F47783748324D316B6A6E6B454C444C456243364731786A4F492B314F6F35377642493362584E384C776C7276696335334F6C306D6E5A736E783830737452696D71617877763839574D4E727238514A2F59726A3979736141687A762B724231426B4B734F6E4A3532574E5948715167333148316B4F4C6978556B4E2F3531376E2B514768766E7163377A507A45316C7573707A31484D39663642647669364F4868694A77595538483365632B4356424C514165564D68672B5A38472B6A556C504674366F3834774877386B6B4A7842684F59422B4D5A7A3174343436462B5A6B785A436A396E485A3662447163567077516455684F756B38654E4439534A4939716C456F33686732792B4E467A5969746D33757169523730357965457A51355766364F64486873794A3359524B4173487463305A703546625A7347396E6A5077746E635279776D6A2B5A4F2B373654666E7950456D586369514255746E506D564868517754682F30476E6937656D6C7466545A37414D4A587368782F68666653336E7272726266656575757474392B6F316B5877336E7272726266656575757474392F75396F754B3637384B4D6637584A5A624A3956647774363733685A634A446C656D365832536237726E4A753339644C2F7979354C6F5734395A59447A2B37392B5A2B547835734F723467656E463535572B2F55374D4E6674324C79435430442F2F696642484A3662506279426D42304D654C6D63776F5450546D3439452F6E686C2B6936732B4473797A4D577350346477505164663278457667794E37497554526B43484A663437677A66386D733842452F4F65305A32504D6F3069682B2F6A424C644E7837307878554C397674472F504B776F48695A37443551765542566648744B7A476A6159385A6B6F3332647A6A51495141523348573978374A546372674E427648412B6D4B77574B3266466B49344D6E64354D4E523646417133514F644444633548504949564E58396E53467536333657764B4E556437517A796B656C3739657A334E30773731386B2B716D4F7852664944394464504473522F6445626F752F38725237484939503350366E793263655A2F734738347963497A566E6F3265715A42766C73535143476934626F5838637768384F706668594C75643372474544492F567A66393539704E615033376C6E6D2B344F4F7352376B384B42394C694C507966486F634B627665456650377242437754416D644E4A4466377648436F3543373466564D437A50744C4F7654706C653669446472783559616547656B386835416B4C4747536735454348546A6D54616530454938776C6A4E326477754833567856362F2F6F733369377835582B68663359314135784F4D393675642B6D5446414D74545262464B782B486631534C4156582B7366666D54696E714B68796A6636666D623966392F4E5970387232592B366A48394B4B32796F37397274385A786650653131597A6F662F776B414F322F334C586157322B3939645A6262373331396A76582F7138414177444A307164726B6A766E675141414141424A52553545726B4A6767673D3D222C0D0A202020202020202022666974223A2022636F6E7461696E222C0D0A202020202020202022626F72646572526164697573223A2031300D0A2020202020207D0D0A202020207D2C0D0A202020207B0D0A202020202020226964223A2022337673303039783166696D303030222C0D0A20202020202022697347726F7570223A2066616C73652C0D0A2020202020202261747472223A207B0D0A20202020202020202278223A203230382C0D0A20202020202020202279223A202D312C0D0A20202020202020202277223A203134302C0D0A20202020202020202268223A206E756C6C2C0D0A2020202020202020226F666673657458223A20302C0D0A2020202020202020226F666673657459223A20302C0D0A2020202020202020227A496E646578223A202D310D0A2020202020207D2C0D0A202020202020227374796C6573223A207B0D0A20202020202020202266696C74657253686F77223A2066616C73652C0D0A202020202020202022687565526F74617465223A20302C0D0A2020202020202020227361747572617465223A20312C0D0A202020202020202022636F6E7472617374223A20312C0D0A2020202020202020226272696768746E657373223A20312C0D0A2020202020202020226F706163697479223A20312C0D0A202020202020202022726F746174655A223A20302C0D0A202020202020202022726F7461746558223A20302C0D0A202020202020202022726F7461746559223A20302C0D0A202020202020202022736B657758223A20302C0D0A202020202020202022736B657759223A20302C0D0A202020202020202022626C656E644D6F6465223A20226E6F726D616C222C0D0A202020202020202022616E696D6174696F6E73223A205B5D0D0A2020202020207D2C0D0A2020202020202270726576696577223A207B0D0A2020202020202020226F766572466C6F7748696464656E223A2066616C73650D0A2020202020207D2C0D0A20202020202022737461747573223A207B0D0A2020202020202020226C6F636B223A2066616C73652C0D0A20202020202020202268696465223A2066616C73650D0A2020202020207D2C0D0A2020202020202272657175657374223A207B0D0A202020202020202022726571756573744461746154797065223A20302C0D0A202020202020202022726571756573744874747054797065223A2022676574222C0D0A2020202020202020227265717565737455726C223A2022222C0D0A20202020202020202272657175657374496E74657276616C223A206E756C6C2C0D0A20202020202020202272657175657374496E74657276616C556E6974223A20227365636F6E64222C0D0A20202020202020202272657175657374436F6E74656E7454797065223A20302C0D0A20202020202020202272657175657374506172616D73426F647954797065223A20226E6F6E65222C0D0A2020202020202020227265717565737453514C436F6E74656E74223A207B0D0A202020202020202020202273716C223A202273656C656374202A2066726F6D20207768657265220D0A20202020202020207D2C0D0A20202020202020202272657175657374506172616D73223A207B0D0A2020202020202020202022426F6479223A207B0D0A20202020202020202020202022666F726D2D64617461223A207B7D2C0D0A20202020202020202020202022782D7777772D666F726D2D75726C656E636F646564223A207B7D2C0D0A202020202020202020202020226A736F6E223A2022222C0D0A20202020202020202020202022786D6C223A2022220D0A202020202020202020207D2C0D0A2020202020202020202022486561646572223A207B7D2C0D0A2020202020202020202022506172616D73223A207B7D0D0A20202020202020207D0D0A2020202020207D2C0D0A2020202020202266696C746572223A206E756C6C2C0D0A202020202020226576656E7473223A207B0D0A202020202020202022626173654576656E74223A207B0D0A2020202020202020202022636C69636B223A206E756C6C2C0D0A202020202020202020202264626C636C69636B223A206E756C6C2C0D0A20202020202020202020226D6F757365656E746572223A206E756C6C2C0D0A20202020202020202020226D6F7573656C65617665223A206E756C6C0D0A20202020202020207D2C0D0A202020202020202022616476616E6365644576656E7473223A207B0D0A2020202020202020202022766E6F64654D6F756E746564223A206E756C6C2C0D0A2020202020202020202022766E6F64654265666F72654D6F756E74223A206E756C6C0D0A20202020202020207D2C0D0A202020202020202022696E7465726163744576656E7473223A205B5D0D0A2020202020207D2C0D0A202020202020226B6579223A2022496D616765222C0D0A202020202020226368617274436F6E666967223A207B0D0A2020202020202020226B6579223A2022496D616765222C0D0A20202020202020202263686172744B6579223A202256496D616765222C0D0A202020202020202022636F6E4B6579223A20225643496D616765222C0D0A2020202020202020227469746C65223A2022746F702D72696768742E706E67222C0D0A20202020202020202263617465676F7279223A20224D6F726573222C0D0A20202020202020202263617465676F72794E616D65223A2022E69BB4E5A49A222C0D0A2020202020202020227061636B616765223A2022496E666F726D6174696F6E73222C0D0A20202020202020202263686172744672616D65223A2022737461746963222C0D0A202020202020202022696D616765223A202270686F746F2E706E67220D0A2020202020207D2C0D0A202020202020226F7074696F6E223A207B0D0A20202020202020202264617461736574223A2022646174613A696D6167652F706E673B6261736536342C6956424F5277304B47676F414141414E535568455567414141497741414141474341594141414152363361414141414141584E535230494172733463365141414141526E51553142414143786A777638595155414141414A6345685A6377414144734D414141374441636476714751414141415A6445565964464E765A6E523359584A6C4145466B62324A6C49456C745957646C556D56685A486C7879575538414141444A6D6C555748525954557736593239744C6D466B62324A6C4C6E68746341414141414141504439346347466A6132563049474A6C5A326C7550534C767537386949476C6B50534A584E553077545842445A576870534870795A564E36546C526A656D746A4F575169507A34675048673665473177625756305953423462577875637A703450534A685A4739695A547075637A70745A5852684C7949676544703462584230617A306951575276596D55675745315149454E76636D55674E5334324C574D784E4449674E7A6B754D5459774F5449304C4341794D4445334C7A41334C7A457A4C5441784F6A41324F6A4D3549434167494341674943416950694138636D526D4F6C4A455269423462577875637A70795A475939496D6830644841364C79393364336375647A4D7562334A6E4C7A45354F546B764D4449764D6A4974636D526D4C584E35626E52686543317563794D6950694138636D526D4F6B526C63324E79615842306157397549484A6B5A6A7068596D3931644430694969423462577875637A703462584139496D6830644841364C793975637935685A4739695A53356A62323076654746774C7A45754D433869494868746247357A4F6E68746345314E50534A6F644852774F693876626E4D7559575276596D5575593239744C336868634338784C6A4176625730764969423462577875637A707A64464A6C5A6A30696148523063446F764C32357A4C6D466B62324A6C4C6D4E7662533934595841764D5334774C334E556558426C4C314A6C63323931636D4E6C556D566D49794967654731774F6B4E795A57463062334A556232397350534A425A4739695A5342516147393062334E6F6233416751304D674D6A41784F43416F56326C755A47393363796B69494868746345314E4F6B6C7563335268626D4E6C53555139496E6874634335706157513651554E464D544D3352454D354F4463354D544646517A6C464F444E445254684251544E474E7A5A464E455569494868746345314E4F6B5276593356745A57353053555139496E68746343356B6157513651554E464D544D33524551354F4463354D544646517A6C464F444E445254684251544E474E7A5A464E4555695069413865473177545530365247567961585A6C5A455A7962323067633352535A5759366157357A644746755932564A52443069654731774C6D6C705A447042513055784D7A644551546B344E7A6B784D5556444F5555344D304E464F4546424D3059334E6B553052534967633352535A5759365A47396A6457316C626E524A52443069654731774C6D52705A447042513055784D7A6445516A6B344E7A6B784D5556444F5555344D304E464F4546424D3059334E6B553052534976506941384C334A6B5A6A70455A584E6A636D6C7764476C76626A3467504339795A475936556B5247506941384C336736654731776257563059543467504439346347466A61325630494756755A4430696369492F506D3634414A774141414E61535552425645684C5A5A55785968557844455233663047665933436F644451303661436B6F594D754C5755755230574F384A6B3349386E2B6D2F6C725778714E5A4E6D376766507A31372B666A7676782B3334657A386435506831796A764D5150486B5245376474634D6F7069584C48686F2B654F72756D62504732697A767843647971447243756664576A3169334235687A6675644A6B62775A3562557344727A3241382B4259305047622F6A4A32503357714477673439704B76457A672B746444674D2B316E73723573313262507474454C37713938442B787454343352507354596339582F55426667746D2B744F3877655875483956453771566336373344655233323779667370354566386B6959584A7A70494E374270636B4B74553252554C48333371304252574E7750755578516B48723077664A766474486264596D74506B513677376E554246354A4C4D616844484B4A54334E68443067633852744F50756336667875727358766C4473434F6730574B39426E626C2B4335426C314139544C733256496E566B316B6A5751373434615776614D647252594A783052436F543661454D5564446E727836672F784438694C6A46392F306C33366A66706B52794D32463731442F7A4F487252714273596B42444D764F6F586E37456E42794268764D3869764263477244564B334E6764564B4D32563972614F614D33705A346A716364497849466964565A465243366C3437674D66756C6D36764C644E474B7A596551613434744A4E6C5339304E6156626C6957426E59726C50464C742B4E514348476C696534646D6A6C704A632B51595431446F334E326F72304362796E65552F502B6D416F496E613671537966626E2B645773764A5964656C334F646A5349325667365A5659627139315677307A6F54555930584D6F4575493457657466684E764B424270464236494D4B6C644C396674596B4B56495038314567447245723171346D686F375376466E5A44764D78664B7A42396530466654736237523742714D6E48724443705A4750337344555633486C686248504D484A59504736373958566B7A6349756441356D7467332F7849484E355834592F303171516A6D2F64416A5535456341326A326863644762382B4876634A6447437A54554A493030697932586647505657437073746A3031337A6D33664F43694C56664D417644484F457968496463774E6E4B375A666A382B6C7848384D466648795756354B766755484B6647417249797035646462786138587958652F4234766F386B394E374F317557466973383564626F50566E42566C496768336A65532F5344743575612B43487956594C3376462B467666616C432F674B34732F4C64614D457573465162695647786D416A756F524E445067306C346F59737070674344346F5152386F4E556151356733586443775957526D743941705846394D6E5A6D58674C5731694462624C7963587279665A4C6E55554B6445364E4F704739636A786375736A4F49613277457A5466584261705A506A62724A49375831624E45467237726D6F4A2B6F536146573931616635706554324F342F742F724B47312F32553850375141414141415355564F524B35435949493D222C0D0A202020202020202022666974223A2022636F6E7461696E222C0D0A202020202020202022626F72646572526164697573223A2031300D0A2020202020207D0D0A202020207D2C0D0A202020207B0D0A202020202020226964223A2022347A35766462686D6131343030222C0D0A20202020202022697347726F7570223A2066616C73652C0D0A2020202020202261747472223A207B0D0A20202020202020202278223A20313536302C0D0A20202020202020202279223A20332C0D0A20202020202020202277223A203134302C0D0A20202020202020202268223A206E756C6C2C0D0A2020202020202020226F666673657458223A20302C0D0A2020202020202020226F666673657459223A20302C0D0A2020202020202020227A496E646578223A202D310D0A2020202020207D2C0D0A202020202020227374796C6573223A207B0D0A20202020202020202266696C74657253686F77223A2066616C73652C0D0A202020202020202022687565526F74617465223A20302C0D0A2020202020202020227361747572617465223A20312C0D0A202020202020202022636F6E7472617374223A20312C0D0A2020202020202020226272696768746E657373223A20312C0D0A2020202020202020226F706163697479223A20312C0D0A202020202020202022726F746174655A223A20302C0D0A202020202020202022726F7461746558223A20302C0D0A202020202020202022726F7461746559223A20302C0D0A202020202020202022736B657758223A20302C0D0A202020202020202022736B657759223A20302C0D0A202020202020202022626C656E644D6F6465223A20226E6F726D616C222C0D0A202020202020202022616E696D6174696F6E73223A205B5D0D0A2020202020207D2C0D0A2020202020202270726576696577223A207B0D0A2020202020202020226F766572466C6F7748696464656E223A2066616C73650D0A2020202020207D2C0D0A20202020202022737461747573223A207B0D0A2020202020202020226C6F636B223A2066616C73652C0D0A20202020202020202268696465223A2066616C73650D0A2020202020207D2C0D0A2020202020202272657175657374223A207B0D0A202020202020202022726571756573744461746154797065223A20302C0D0A202020202020202022726571756573744874747054797065223A2022676574222C0D0A2020202020202020227265717565737455726C223A2022222C0D0A20202020202020202272657175657374496E74657276616C223A206E756C6C2C0D0A20202020202020202272657175657374496E74657276616C556E6974223A20227365636F6E64222C0D0A20202020202020202272657175657374436F6E74656E7454797065223A20302C0D0A20202020202020202272657175657374506172616D73426F647954797065223A20226E6F6E65222C0D0A2020202020202020227265717565737453514C436F6E74656E74223A207B0D0A202020202020202020202273716C223A202273656C656374202A2066726F6D20207768657265220D0A20202020202020207D2C0D0A20202020202020202272657175657374506172616D73223A207B0D0A2020202020202020202022426F6479223A207B0D0A20202020202020202020202022666F726D2D64617461223A207B7D2C0D0A20202020202020202020202022782D7777772D666F726D2D75726C656E636F646564223A207B7D2C0D0A202020202020202020202020226A736F6E223A2022222C0D0A20202020202020202020202022786D6C223A2022220D0A202020202020202020207D2C0D0A2020202020202020202022486561646572223A207B7D2C0D0A2020202020202020202022506172616D73223A207B7D0D0A20202020202020207D0D0A2020202020207D2C0D0A2020202020202266696C746572223A206E756C6C2C0D0A202020202020226576656E7473223A207B0D0A202020202020202022626173654576656E74223A207B0D0A2020202020202020202022636C69636B223A206E756C6C2C0D0A202020202020202020202264626C636C69636B223A206E756C6C2C0D0A20202020202020202020226D6F757365656E746572223A206E756C6C2C0D0A20202020202020202020226D6F7573656C65617665223A206E756C6C0D0A20202020202020207D2C0D0A202020202020202022616476616E6365644576656E7473223A207B0D0A2020202020202020202022766E6F64654D6F756E746564223A206E756C6C2C0D0A2020202020202020202022766E6F64654265666F72654D6F756E74223A206E756C6C0D0A20202020202020207D2C0D0A202020202020202022696E7465726163744576656E7473223A205B5D0D0A2020202020207D2C0D0A202020202020226B6579223A2022496D616765222C0D0A202020202020226368617274436F6E666967223A207B0D0A2020202020202020226B6579223A2022496D616765222C0D0A20202020202020202263686172744B6579223A202256496D616765222C0D0A202020202020202022636F6E4B6579223A20225643496D616765222C0D0A2020202020202020227469746C65223A2022746F702D6C6566742E706E67222C0D0A20202020202020202263617465676F7279223A20224D6F726573222C0D0A20202020202020202263617465676F72794E616D65223A2022E69BB4E5A49A222C0D0A2020202020202020227061636B616765223A2022496E666F726D6174696F6E73222C0D0A20202020202020202263686172744672616D65223A2022737461746963222C0D0A202020202020202022696D616765223A202270686F746F2E706E67220D0A2020202020207D2C0D0A202020202020226F7074696F6E223A207B0D0A20202020202020202264617461736574223A2022646174613A696D6167652F706E673B6261736536342C6956424F5277304B47676F414141414E5355684555674141414977414141414743415941414141523633614141414141475852465748525462325A30643246795A5142425A4739695A53424A6257466E5A564A6C5957523563636C6C5041414141795A70564668305745314D4F6D4E76625335685A4739695A53353462584141414141414144772F654842685932746C644342695A576470626A30693737752F496942705A443069567A564E4D4531775132566F61556836636D5654656B355559337072597A6C6B496A382B494478344F6E68746347316C6447456765473173626E4D366544306959575276596D5536626E4D366257563059533869494867366547317764477339496B466B62324A6C4946684E5543424462334A6C494455754E69316A4D545179494463354C6A45324D446B794E4377674D6A41784E7938774E7938784D7930774D546F774E6A6F7A4F5341674943416749434167496A346750484A6B5A6A70535245596765473173626E4D36636D526D50534A6F644852774F693876643364334C6E637A4C6D39795A7938784F546B354C7A41794C7A49794C584A6B5A69317A6557353059586774626E4D6A496A346750484A6B5A6A70455A584E6A636D6C7764476C76626942795A47593659574A76645851394969496765473173626E4D366547317750534A6F644852774F693876626E4D7559575276596D5575593239744C336868634338784C6A41764969423462577875637A70346258424E545430696148523063446F764C32357A4C6D466B62324A6C4C6D4E7662533934595841764D5334774C3231744C79496765473173626E4D36633352535A575939496D6830644841364C793975637935685A4739695A53356A62323076654746774C7A45754D43397A56486C775A5339535A584E7664584A6A5A564A6C5A694D694948687463447044636D566864473979564739766244306951575276596D5567554768766447397A6147397749454E44494449774D5467674B466470626D527664334D70496942346258424E5454704A626E4E305957356A5A556C4550534A346258417561576C6B4F6B46445254457A4E3052444F5467334F54457852554D355254677A513055345155457A526A633252545246496942346258424E5454704562324E316257567564456C4550534A34625841755A476C6B4F6B46445254457A4E3052454F5467334F54457852554D355254677A513055345155457A526A633252545246496A3467504868746345314E4F6B526C636D6C325A575247636D397449484E30556D566D4F6D6C7563335268626D4E6C53555139496E6874634335706157513651554E464D544D33524545354F4463354D544646517A6C464F444E445254684251544E474E7A5A464E45556949484E30556D566D4F6D5276593356745A57353053555139496E68746343356B6157513651554E464D544D33524549354F4463354D544646517A6C464F444E445254684251544E474E7A5A464E4555694C7A3467504339795A4759365247567A59334A70634852706232342B49447776636D526D4F6C4A45526A3467504339344F6E68746347316C6447452B4944772F654842685932746C6443426C626D5139496E4969507A357575414363414141432F306C4551565234326F52584F5A49554D5243736E4344776C2F65784A693465654879412F514C652F49695072496E5869593436737452424D4D6132576933566B5A56314C4F773350384C736A625450342F6C705047303839322B2B634335674943312F7667546A7A50687566705A794E38374D3531583769484D704A2B36366E4B763037507573396271502F5A79664C76392B4C5376763870632F385A3347432F61597A3552582B756637584435597674786B79566C542F6236335A4677634F727150572F39384F69345847343559726F567632382B482B306E334957794A4742582B63562F32476E364B497870655379645173633734713179386A35505073667A3259667A354F66612F70674C3363524E6B423542324A3073613554666F71374138354B514273702F5868464378743578474F55674274427542744774614355777932415938492B57327563776770484A2F53304E4B67373962617641647545374679467A77646469332F4844794E367A436A72324142724152552F437A436A5444576C676C5657706D663732775A5741544C614B5A704D464756306C58313674514C45495A58785A486148396D49727857324632427354784435306D634C546A326D53524651656E426B37764C615A674B336262576E72712F6354316B36466C33504F5145417A6347364B667039494D54544F494972323664517249474F7764522F6B547778636B455857304756447150594A657667534F3139497A396945745075495035556346546E35396E4A665861415573456973677775396B567278377A4C342B4B4A6250733863694B75777932504B7871517657326B596D736537544F614269565051707A62333943624E504B4A3035584A764E6D39795159677A67733355534230724973456F4F53496C4732555152745A53635A6852615158687468476B4B317331566C6234456C4461316738616775364768364C44784B304951735836523743556E5A724E324A7353326568486C4743596F6B677A4B666478437A496D546269504A58494B4558314D7955486B464A62466872592F2F496E327756367A786B7870416B31375A43536C36434856525932713535332B754C6749664368743472775A4F776C4D51513239685A63362F5942392F735467707136396635434B6855724978763873375A4E476D496533764F44504A574C385051727A6E4466486458583865664635375A6A45612F4E6A6E55614D4C47564D464A7171663061356B4F696A6D37796D573471526C6369464C4B4C436E7438424A43737769724671383754706F6B6D6C674B2B3938763774636753356B6E324E4A4E514C774F52682B4D6F5A2B4A2B657563682F51664172624B7A57794C565252715473485A4B64694852593252566A5846336657396A39666E575037344B38414133736372333144346A416F41414141415355564F524B35435949493D222C0D0A202020202020202022666974223A2022636F6E7461696E222C0D0A202020202020202022626F72646572526164697573223A2031300D0A2020202020207D0D0A202020207D2C0D0A202020207B0D0A202020202020226964223A20223177666D6F6D32317733756F3030222C0D0A20202020202022697347726F7570223A2066616C73652C0D0A2020202020202261747472223A207B0D0A20202020202020202278223A20302C0D0A20202020202020202279223A2031332C0D0A20202020202020202277223A20313932302C0D0A20202020202020202268223A2036312C0D0A2020202020202020226F666673657458223A20302C0D0A2020202020202020226F666673657459223A20302C0D0A2020202020202020227A496E646578223A202D310D0A2020202020207D2C0D0A202020202020227374796C6573223A207B0D0A20202020202020202266696C74657253686F77223A2066616C73652C0D0A202020202020202022687565526F74617465223A20302C0D0A2020202020202020227361747572617465223A20312C0D0A202020202020202022636F6E7472617374223A20312C0D0A2020202020202020226272696768746E657373223A20312C0D0A2020202020202020226F706163697479223A20312C0D0A202020202020202022726F746174655A223A20302C0D0A202020202020202022726F7461746558223A20302C0D0A202020202020202022726F7461746559223A20302C0D0A202020202020202022736B657758223A20302C0D0A202020202020202022736B657759223A20302C0D0A202020202020202022626C656E644D6F6465223A20226E6F726D616C222C0D0A202020202020202022616E696D6174696F6E73223A205B5D0D0A2020202020207D2C0D0A2020202020202270726576696577223A207B0D0A2020202020202020226F766572466C6F7748696464656E223A2066616C73650D0A2020202020207D2C0D0A20202020202022737461747573223A207B0D0A2020202020202020226C6F636B223A2066616C73652C0D0A20202020202020202268696465223A2066616C73650D0A2020202020207D2C0D0A2020202020202272657175657374223A207B0D0A202020202020202022726571756573744461746154797065223A20302C0D0A202020202020202022726571756573744874747054797065223A2022676574222C0D0A2020202020202020227265717565737455726C223A2022222C0D0A20202020202020202272657175657374496E74657276616C223A206E756C6C2C0D0A20202020202020202272657175657374496E74657276616C556E6974223A20227365636F6E64222C0D0A20202020202020202272657175657374436F6E74656E7454797065223A20302C0D0A20202020202020202272657175657374506172616D73426F647954797065223A20226E6F6E65222C0D0A2020202020202020227265717565737453514C436F6E74656E74223A207B0D0A202020202020202020202273716C223A202273656C656374202A2066726F6D20207768657265220D0A20202020202020207D2C0D0A20202020202020202272657175657374506172616D73223A207B0D0A2020202020202020202022426F6479223A207B0D0A20202020202020202020202022666F726D2D64617461223A207B7D2C0D0A20202020202020202020202022782D7777772D666F726D2D75726C656E636F646564223A207B7D2C0D0A202020202020202020202020226A736F6E223A2022222C0D0A20202020202020202020202022786D6C223A2022220D0A202020202020202020207D2C0D0A2020202020202020202022486561646572223A207B7D2C0D0A2020202020202020202022506172616D73223A207B7D0D0A20202020202020207D0D0A2020202020207D2C0D0A2020202020202266696C746572223A206E756C6C2C0D0A202020202020226576656E7473223A207B0D0A202020202020202022626173654576656E74223A207B0D0A2020202020202020202022636C69636B223A206E756C6C2C0D0A202020202020202020202264626C636C69636B223A206E756C6C2C0D0A20202020202020202020226D6F757365656E746572223A206E756C6C2C0D0A20202020202020202020226D6F7573656C65617665223A206E756C6C0D0A20202020202020207D2C0D0A202020202020202022616476616E6365644576656E7473223A207B0D0A2020202020202020202022766E6F64654D6F756E746564223A206E756C6C2C0D0A2020202020202020202022766E6F64654265666F72654D6F756E74223A206E756C6C0D0A20202020202020207D2C0D0A202020202020202022696E7465726163744576656E7473223A205B5D0D0A2020202020207D2C0D0A202020202020226B6579223A2022496D616765222C0D0A202020202020226368617274436F6E666967223A207B0D0A2020202020202020226B6579223A2022496D616765222C0D0A20202020202020202263686172744B6579223A202256496D616765222C0D0A202020202020202022636F6E4B6579223A20225643496D616765222C0D0A2020202020202020227469746C65223A2022746F702E706E67222C0D0A20202020202020202263617465676F7279223A20224D6F726573222C0D0A20202020202020202263617465676F72794E616D65223A2022E69BB4E5A49A222C0D0A2020202020202020227061636B616765223A2022496E666F726D6174696F6E73222C0D0A20202020202020202263686172744672616D65223A2022737461746963222C0D0A202020202020202022696D616765223A202270686F746F2E706E67220D0A2020202020207D2C0D0A202020202020226F7074696F6E223A207B0D0A20202020202020202264617461736574223A2022646174613A696D6167652F706E673B6261736536342C6956424F5277304B47676F414141414E53556845556741414234414141414139434159414141424D5558546A41414141475852465748525462325A30643246795A5142425A4739695A53424A6257466E5A564A6C5957523563636C6C5041414141795A70564668305745314D4F6D4E76625335685A4739695A53353462584141414141414144772F654842685932746C644342695A576470626A30693737752F496942705A443069567A564E4D4531775132566F61556836636D5654656B355559337072597A6C6B496A382B494478344F6E68746347316C6447456765473173626E4D366544306959575276596D5536626E4D366257563059533869494867366547317764477339496B466B62324A6C4946684E5543424462334A6C494455754E69316A4D545179494463354C6A45324D446B794E4377674D6A41784E7938774E7938784D7930774D546F774E6A6F7A4F5341674943416749434167496A346750484A6B5A6A70535245596765473173626E4D36636D526D50534A6F644852774F693876643364334C6E637A4C6D39795A7938784F546B354C7A41794C7A49794C584A6B5A69317A6557353059586774626E4D6A496A346750484A6B5A6A70455A584E6A636D6C7764476C76626942795A47593659574A76645851394969496765473173626E4D366547317750534A6F644852774F693876626E4D7559575276596D5575593239744C336868634338784C6A41764969423462577875637A70346258424E545430696148523063446F764C32357A4C6D466B62324A6C4C6D4E7662533934595841764D5334774C3231744C79496765473173626E4D36633352535A575939496D6830644841364C793975637935685A4739695A53356A62323076654746774C7A45754D43397A56486C775A5339535A584E7664584A6A5A564A6C5A694D694948687463447044636D566864473979564739766244306951575276596D5567554768766447397A6147397749454E44494449774D5467674B466470626D527664334D70496942346258424E5454704A626E4E305957356A5A556C4550534A346258417561576C6B4F6A6B33513045794E6B4A474F5467334F54457852554E424D6A5A45524549314E6B4A4751544131516B4532496942346258424E5454704562324E316257567564456C4550534A34625841755A476C6B4F6A6B33513045794E6B4D774F5467334F54457852554E424D6A5A45524549314E6B4A4751544131516B4532496A3467504868746345314E4F6B526C636D6C325A575247636D397449484E30556D566D4F6D6C7563335268626D4E6C53555139496E687463433570615751364F54644451544932516B51354F4463354D544646513045794E6B5245516A5532516B5A424D4456435154596949484E30556D566D4F6D5276593356745A57353053555139496E68746343356B615751364F54644451544932516B55354F4463354D544646513045794E6B5245516A5532516B5A424D445643515459694C7A3467504339795A4759365247567A59334A70634852706232342B49447776636D526D4F6C4A45526A3467504339344F6E68746347316C6447452B4944772F654842685932746C6443426C626D5139496E4969507A37775678763741414166796B6C455156523432757A644333516335586E2F3857636B59584E7061416B3949635277324147536376684477722B51306D4175635168334D4D5641494C594A786D44754A72356A4168687741514F574C2B555361457A41787541414A695A63436F524C41574F586B49516D70516D684B57575745676730415A495351734357747239335A6D574E646D5A57306D6F73726254667A7A6D2F727252364E4C4D656263712B38387938722B65504C5A554D41494447736B435A71664466514144415276584B485277446F436432484D63784141414141494338744367656877454130454332557535586C696D6E4B7573344A4141414141414144456B6A6C456555335467554149424730734968414141306D486556673555376C667555343558334F5377414141414141417770757967504B3964624E424D594141414E6F346C444141426F5142386F593551336C43655572546B6B414141414141414D47582B72504B6E4D4D5A712F4149414752414D59414E436F3270524A7975504B7679674644676B4141414141414950656B5259742F5452525763376841414130497161414267413073704A796B664B57736B593558486D427777494141414141774B413051626C4B4F5570356A734D42414768554E4941424144433754766B663554486C4B3872544842494141414141414161563835557A6C4338714C3345344141434E6A436D6741514349334B5763714E7974484D5068414141414141426755504355526370595A6154522F41554167447541415143496556493552486C516D617238676B4E5374393558726C574B4E66372B4D475734306D3752564F4356735370665735577641514141414178756271777753666B7368364B756E524837653932716A46414F554837486F514541674159774141435666717273723378666556795A79794770532B356B7A4C6E4B4C63714C4E667A2B52785931626F646E2F4479747165735A7A563441414142674B4E74636D617938705A786C3051576A71463866552B367836414C685135552F63556741414967774254514141456D764B5073716F3557626C47594F5364313551626C524F55585A71385A7472464D2B734F704E58613848322F4834637741414141433538474A706973574E7956724B32635369757A34375A76585A564E6E4D6F7562744668593142596656734F2B2F554759712F3655734D35712F39573462693262784B69724847383166414143366F41454D41454136643858334B47566E5A6156464A7856515839794A4762664F3033486C76315574326977365556445A424F34343652542F507533524D723448414141416B412B7679764E70635A2F76502B726C506C777A635A6279724556336C444C7A5433336255566D6A2F4A4E465530473363556741414F694B426A4141414E6E6555773633364F544249785A6445593736386F5979333649473846453162734E64326439787458686C3439654D3569344141414451482F6F362B34357232726F5A66746231637238465A6272796F50496F6634613674346579576C6D6F584D4C6841414167485131674141437163383366736370506C4B655662546B6B64656474693572417579766A617678383430345775535A77355452765873625850666B6541414141514D396B666262324D6A365865786D66353374374A2B677579726E4B4863712F3847656F652B3743332B39627445377A6A52774F4141437930514147414B423772696B3456566D687246552B777947704F2B3575625863462B4365555352617444645A6237715452682B572F6439704A70513430656745414149442B6C39596B376E677537574C4F3775796C6E4B626370507762683766757561562F76714E3852626D58777745415148553067414541364C6D726C626E4B5538726E4F52783178353330756336695271363749727A57645A766458642B566477375144415941414141326A74374D744650357334376C584871375A7538584C576F6F4C6C5A65356B39513938355246696B48577A517A467741413641594E59414141656D65706372704636304D647875476F4F2B75566D3555336C576E4B783272636A6C7333724B4D4A6E4862436959597741414141734846562B387A743470712F62676166336A5A2F6A31514F7447675A6D5639786D4F762B50584335637036796E2F494368775141674A366841517741514F2B3535752F664B6263714A334534366F34374565536D427674335A616179645933626363336B2B4A33414E486342414143416A61756E463171367A2B6B6639584C62376A7A6F5635585057745438665A7644586465616C5355573366573772314C6B6B41414130484D7448414941414772797250496C3557474C31703164774347704F773959744462774C4F55666C44647132495937736554754B47697555754E5A3137734F4B723848414141416B50315A7574727A61625078754D2F6F363375354833634F3942534C5A676861614E4730306168666D796C33577253736A7874332F34464441674241373341484D4141417458745247616C4D734B6A68522F4A4C712B567A782B3154796B706C71724A7A6A64747764785448547A42314E7730304141414167507A455033665830767764726B793236447A6F7455627A74393574705479712F4E3669366270702F67494155414D6177414141394931624D32703336317948697651394831663256705A5A50724F562F46693552546E546F756E65617547613075743575774D414141433538627235766C4C6C45693039346537346E61623878714C706850502B54442F436F71566E754967337637796A504B6563724B7A6A66795941414E5347426A4141414B6733377971485748546C3937334B356A6C733878664B396370343551733162734F646A4F6959457271376B31586348517741414144554A6D33474864653462652F6C64725A575A696F2F563236763466653773347579526C6C71584D536264325959792B6F41414E416E4E494142414541392B714E796A504A623558474C3767727571364A463633306470527855347A626954574348526938414141437763613233336A634450325652382F644A3566364E384A72636A4556504B5A6371432F675441514341656B4D4447414141314374336F6D6569736C703552746B2B6832322B7156796A374B4D6361375533634F4E4E3441376342517741414144305445396D31436C6C664F37757A6F374B564F5737466A574138336177386F42796D6B584C31674141414E5164477341414150536A344A4E3261724374745162625A5463487735705071755A544E4241744F746B7A32364C3175747A306172766D734D33664B61334B7A7372582B764235714E32596C677741414144496B786362423954532F4E31644F56753556666E52526E6839597931712B683674504E694966364469474E75756549784E726C707A676D714F71313444414141324C687241414144307231555754526532505042745747614E5636345A6B566E546142597246796850574F31722B4D613972797853746C544F56446170635473306751454141494465366537753334376D62322F3972555558654E3667764C6752587663555A5A35796F504A73492F376869736547462B537556544C4871635778336463414149422B2B4D446C6A2B57634A5141412F536E59316A6131466C7568624B45683862482B66396766556D73383158697161564C4E61386D616276667A535A757533352B762F586A576246474C73794E754B44343835624872637775556D66343164645867504E53694B2B346E4B412F6E734431335A4E784A6F722B303645545248327639544756643731614934384D57304D426575594E6A415054456A754D34426B414436613442334637444E722B7366456D3531714A6C582F4A2B766137786531523550504A613676697256585674476E2B3161787A6D32746475515A76796F37652B2F483038385A6F6F4A6633757A4D4A3373396355376F39395A436B655A795031322F636F4D777572375062556D712B705A723171326C527A56336F4E4141446F4839774244414241502F4E2F62582F53772F456175676436664372593362624A724C46797A51374A6D6D3733383259347144395A5764666C6C45713856526C2F4C766E316447565A6346484E643864754449386F6F3556626C4A4E79324A343744624A5565625838372F337A477264544D6871394141414151462B347A394F3962663636306373595A56396C767558662F4730706A7A322B714F7876576333666865475961566C35544E45354D69683138362F74744D364E33616F32662F746848316D4B7834646A73487644333839712F6B364D3164443842514267774E45414267426741506976575A762F536A6A313850336D325A70674C39737055664F47616C3476313568712F47524E742F7635745332336148327139314D4C764979764F376B6D363333425A625A464852322B35355252796C7A724F506E524E2B3630794E305772524532532F6C45483762547A72736241414141794A52314B576F74463151326C6363726E37476F2B6674757A7139314D34755738484558343770706E39394F4B776F5768574F6C2B367A6A417458657A676455306C69745A456358566F5A6A4E78756F665751706673556D3665464735664443642B3352314A7254597A5572306D73414145442F6F67454D414D41413876386A62474A65593536744476613150564E72586976586D47703253712B70756F2F5877716D534439512B3373356F386E6279596F2B6464776F66706A7752584746623139476865386D69712F776E4B4B316D3366374C65734C64586679515255336C486671776E564C4755515541414143512F766D3574383166647A657375316A577A65437A794C4975654B3364566F70725A50374F716C78514779774F783068506C4D644D3366384C6B2F394B3131512B73484258397649322F6247504C4D5554625934655A697348464F3678483666576E424F72755332394267414139443861774141414444442F4256756968374F5568344976323047704E612F47616A3664586C4E3148304634313678726D4C363634556D763472473676633364685878316E78716A655876646F6D6E593347747A5536486C4D565831576D57464D6C6E35717A3573682B6D6741514141674F3631312F445A6558506C504F5644692B34362F54446E317A5243575733527A4550526B6A6F70677358683247684E65547A53383339465A3932722B6E7266776F7077507A5A512B3068544847764E78612F615452597476374E50596157396E4B695A6F5A717671365A5572726B6C57514D414141594F44574141414F71412F364E774B6D693364745674775A45324E72556D434B65436A6D703253612B70756F3966686E664E6A74522B667462444E594172613362522F313062744E70756458546F3344527642317430686236626E6D337A484C6235623871336C4E4F55762B3744646D674341774141414E6B6A6A566F2B4C3239703059773962693165747A62762B7078666F78767A75496272556D5647316D734D466F646A6F72586C2B765371366D767A2F73794E7A51724C777A47614464512B3068544832365A36574B6E737047324D4B7478746279566532327A566C4D6F31707070764A577341414D44416F67454D41454364384A2F52344E344C313561614678786E30314A722F69745773327436546456392F487A4458624E72776964363176694E667A30696E4B3536555867336362333451446C472B61337975504C78484C6235532B55666C424F552F6671776E564933527863414141426F524C5530667A2B687A464B65562B36322F432B346448665A5071566371697A494B676F5768324D68643466776942723334385A692B7864754463646D413761504E4D575477677472487975507359346F334758764A5637625262615631314654557330336B7A55414147446730514147414B434F2B492F5A692B6146642B6D65456F7933317543305A4F50512F365671334A32387070726456624E483735714C2F6B383233445637662F6845576850597332724E34584139724742784F4E5658765842582F6B2B303643544A4D3872324F577A7A563872383872453676412F6234553567414141416F472B666A39336E6533666E372F6556687A6243617A704565634369575943575A52554669384978304B506C4D5645742F314933426A753463484D344A687577666151706E6D7A626C63645450314C474637356A487956653236586C6D6C4B353574706B4451414171413830674145417144502B4132486A63582F7A6247396C6558437544557655764B5161623850367438754476303757564E3348632F5A4265637270623464505A4456377331764C6D796D7267735632616830644F6E667159376269316B743256377A766D734D323356334672676E73706F492B3057712F6B35636D4D4141414142715A31346650785A395276713763616448466E6E6C7A792B737356593557487377714368614559353956356246516A7A2F397877595162757731706E425465486674674F306A545846434F485A79303030764C64787530776F726B6E2B6E34504A597A6457715763415942774341656B5944474143414F755376444B2F57507369694E573066434B62626E795671666C3552382F6C6B54645639724C59325055785372716738613942447A637153594C4664574765486237467967664B45386F55637476652F5371744630362B3575347862654963434141414176565A4C772F442F4B366462644A486E547A6243613571697A4650634D6A76505A6855463134526A6E69586C4D5644316632457039626B726C456D4636384D783249447449303178596A69376C427337585668596E6A3731645443767338612F5048743662414141554438386679775861774541554B2B435352723862326F33324844627934625A45663656396C61695A672F564E4B756D5354584E71766C42737162622F5979787964724859715570764A63346E6B334B61536E486E5935776C354231625268665A795762346B2B31396A6F366647346174397555436372444F577A5048515633526635773553626C51393668414C727A796830634136416E64687A484D514351344E624250557135586E6B743532323730637938387659507A64702B4D46636A6E78614E6B316F30586B6F664230584E312F5A7932697179337471393954616C634C584753316C6A735837595235626961545A613237785A47563959476B34376E5878393136696D545458726262782F63586F4E4141436F503977424441424148664F58574A742F6E5A31706268306E7A3959456C39704F695A716671756235636F32705A6D53797074763972417050467269707A3649316E4F4A724146632B707075737241675739473471366F334D72512F6D31732B3652546B70682B32745537366C764B4E4D5662626748516F414141427346496462314A68316435766D336678744B59385276716A736C37583959453434746C6D686364446B4776666A786C5A6A717A5A2F2B3245665759715477746D67626E54484F7250357536437A6875597641414344437731674141414741622F563575726847764E736458436C375A6C6138364E796A616C6D2F2F5361717676346A74336C42766261783373626E75785A383766444363704477587A37574230647575655555596F374E744E7A324A3637357635323552664B4C475572337030414141424162747A493479764B6E7557787A662F6B7648323374753639796A595754667638546C705263454534706E6C49722B61454776667A6E70587363502B4B6349786C413757504C4D557A624934655A697348464736784836652B766B57644E66344636545541414B422B3051414741474351304D4465725164316C6A744A454677547276326272506C4272475A55656B33566653774E3133567944644F33616E795A3769544B6B38465634516D5665764753526450485462426F4C562B766A39747A453744647036793271416D384C65394F414141416F4D2F63424D67546C653074757650336633506576727434303933462B71357974504A2B576C457750527A4C50466B65323954436A6156472B585044735A554E31443753464D2B7835754A5A345849326271616B66516F333238754A313762596D70554E4E6636735A413041414B682F4E494142414268452F457643615A37484B4C634643384D706D354D31613850706F73636F74775548706464553363632F32764D574E557866536679774A363354556E69312F707267437475786A6737643638722B7974374B4D6F7657382B307264374C46335430777A52303233703041414142417A5959725A3563667231582B6D50503252316830416165624965686B69355A335351676D68324F594E5759564D7972316242786B35544855767636636345786C413757504E4D567A62564D39724654636B6B476A436B7553462F3047693776572B4E4E72766A41594141414D4D4272414141414D4D763433624B3135345A5869387A52416E355A61383752717246787A6148704E315831635A7939724879503135553972664A6B374B327544793279504F6A7030376B722F67793236386E2B56736E6B4F322F79685251336C6335542F7837735441414141364C55746C436E4B37785633352B6D366E4C652F6930554E3136584B444F746F6F3159497A74445978517648576A76587542383364687270583568397832782F37434E4E3862787744505359386F4679524F45665938762B644C7932785631722F4B6E4A476741414D486A5141415941594244795A39714C627543766E4B4B4265717553754637632F2B64597A5247714764323771592F39566E745476334741386D535848336957666E5636386A544B4A35576E677A6E686C4E4C317770334D4F45623572664B343876456374766B7A355A7357545448394E377737415141416742357A5463655A796E3871793558326E4C66765A67423653726E456F6D6D6C5577576E614D7A693264506C4D557A366D4B66364F4D694E6D5137775A32734D4E59443753464F635974745A6450667A44375764385955623761504561317359717A45623730394A31674141674D4746426A414141494F555038312B5A5A33544769385046747577524D316A465458484A4775713775504B634E32745138327A75336F784A566E304748323970664A49384130376F59344F3358714C31685A7A4A7A69657357694E7362357930374174744B69352F4358656E51414141454333584350554E582F6433626D724C4F504F3344343452486C414F5532354C61736F47476648366548683874696C7136794762466633364A556635732F4B58724F34502F6152706A6A4E647457446D783171616546366D3137345A764959422F4D37612F77704E6C307038645945414744776F77454D414D4167707347356D3962344949756D4D3334675747682F6C7168354A46626A716562345A453356665677575876337431684B2B72715958575171627A69754B733278794852303664314A6A74724C456F684E4F752B61777A56387272636F427974466D7662766A476741414147676742575736637239464D2F506B7A5931666C70592F6C7A2B595652516346363437664B632B75512B76635439754A7141542F526E323455447549303178526A67623142504B4E77725870742F39484D7A72724E485963674676537741416867346177414141444849617150394A4438653738627679564E4271327952712F6B6B3158717A6D7847524E315831635A4F332B624474505831356B7456325A377A357A584675635A7063587A3675727875686935514B4C546E703849596674766131635931464465527966745141414149414539316E355849756D665037425274692B573039346E6E4B67386D7857555444614C74504935415A3932627A68795A37646A647668456F33467A76476E5764744137694E4E6361614E31734F3979736D4678585A48366D76372B3834616266384F33705941414177746E4A514541474149384B64596D334B6D5256665172776D75747030534E6665705A6C57735A6C7979707476397A4C51723944424A3664554A69466A4C2B454A6C5366487332416D51676266436F76563737314D4F79324637373173304866545779756C4B432B395141414141495052353552534C376D70394965647475376271566558787972374B69326C4677536872446736316D2F586C6E41322F46582F736E68734C6E6162783139797367763759523562692B65472F2F3059335A5852686F5432612B766F754C74643464706A4765492F7974675141594F6968415177417742446954777450454C6737554663485639696571545572597A566653362F705A682F6631734D5935594E652F574C6E7573436E4B71754B7039746D6458546F76713863706479696E4A544439747A30624F354B66376665734C747A656C50656E514141414768776F35526A6C55584B4B7A6C76753658385764347478374B66386C70615554417948494F734B6F394A4F6C55325A725076306E566A6F44482B6C48424D5A414F316A387839587841326E4D393378364777774A355072546C664E5635553438394F7277454141494D66445741414149595966345974735A4B64705338664369367A67314E7237677A58766A314C412F2B48676F6E704E5658334D53573869396A39337274564330735A7A355843366359654C5536307265726F3044316E30556B70317943666E735032585050586E62523551356D68624D6D37457741414141337171504A6E37666E6C7A386435636731584E355778572B626D79386F376155584235384F78683776626458543452473857706F6C7133646A6E34504A5979415A7148366E37766369616777767470764A2B5278626D3238754A6D724E564D315531586C546A58357973415141415177634E594141416869422F646E6A43774E326C75797934324D616D3174775271356D55586C4E3148314E736A5237325631367661565867556A6774322B726931327845485232366C7979614C6D3643306D7257352F574B335A4735552F6D704D6C5035533936644141414161434475334F4D345A54654C6D72397635377A396A6F617261357765626446794C416E4235384978782B727773333738453337384C6C7A506B6E666C646E3739756876376C4D64414E6C4437534E33766E4843326F5A584B6A73716F7774583256714A6D597463616632367942674141444C30505951414159416A794C375331656A68516D52664D54722B6A31563857717A6D7A393365392B6C50735A336F596156486A4E4E4B375A724137456253324F4D353271614E444635353455665A576C696D62354C444E423558484C4C6F54654476656E51414141476741626C706D743962734A79796139766D396E4C6666305842314D2F6D63724B784C4B7770324463636161384F78522B2F58346E57316271777A307038576A6E31736F5061527574394C77776134473264386F4848596B6636383544454F78716E474B39643471726B71393738444141436F517A5341415141597776784C374555726851336143635870316C72386576493068482B4C6171496D376F54674847734E7A75766458612F2B464876566F72746D6E2B767967314C465935726F5A7A736F61346F6E686733586568464F766162386855585479573265777A626479616D376C6138726E2B6264435141416743484D3358453657576C58726C502B6C5050325863505633536D37314B4B4C4C464E484863476E777A4847476F3177646B6864677A6674363437766F2B6663474764666630593435724742326B66716669384C4C797831593477664B7550394B2B326A524D3178735270504E5175544E51414159476969415177417742446E5832362F73733437576D38766E6D3344456A564C7574594555354D31566663784E5A7A4B7A64314A2F484434524F58706C2B37754369375A31736F547865507473446F36644239594E455832623554486C592F6E734D312F7457686434444F557A2F4875424141417742433070544A4E65625038325864397A7474335935616E6C45755542566C4667522B4F4C5A3551747537796732704E32613763324F5A412F2F7A736161763759782B702B2F3137323958634863636C572B725074656B6138795647584D4752355270504E6439577A5130314C647744414141474B5272414141413041502B7138493757677A546B333079504478516E326363534E546556617979714357596B613672755931713433705A6264327435616B45706C6E52624B5063566A37575436756A51755A4E56457932366176345A5A66736374756D6D64334E33516268316C2F666833516B414149416878445643335232352F3635387836493767504E30714275724B4B63707432555642647548593472377A4E4D596F3776356A644C583533566A6D71503943395058464F367666615475392F4A77396962586450364766316C36417A773453445665756562323743593541414159756D67414177445149416F4C776D6E586A6E666E4135516E693666594E7055312F67316461344A5A795A70712F426E68756C74752F6133714A786C4B47562B3739585A4C74717834544F2F58493936493343756372537978614A713558585059707076656261467968484949373034414141414D4157354E33706E4B50317655704D326275344479566F73754F6E307771796A34564469575742614F4C537231624831654E3559353262386B665533682F747048366E3676744E45574C56486A6676654F314A7239596A5833704E6341414943687A2F50484D7673484141434E706A6A4A357467364F386E5732324746322B336C744A7067686D716156644E6B682F6E7A306D73616B44767035453757754B6D686E38316865333975305A72416268336D37356F784C527377314C7A436156656752335963787A454142726D644C56726D3543376C787874682B314F557163706835632F4F445365595A354D3057726A55326D3230663545396E31727A4E36725A5644584456664E59656730414147674D3341454D414541444B69797875587134526E6D362B4658624D363347622B32734353354B72326C414B797936772F6B2B356641637476643770645564626D55436E38304141414177434831574F644F693958377A627636362B326976556959702B31716A4E6E2B76736A6C364F4E394B646B426D38336350315869714D6458512F4155416F4F4678427A4141414132734F4E354732337062596D3132556D476C505A7057453179676D6D62564E4E6C4A2F747A306D676130742F49395A5A5A6C72586E634F323771754E504C58377570706A2F69454138757752794F415141416A6A2B5859394267396C482B54766D6D4731376B764F3257386D666A585378614F7557646876754D4F56386A73586137775571326C334B45663447396C616A5A5754584456444E4D4E634E5638317979426741414E4237754D6745416F494556627266374C5A724F65466C78544469396359492F72374D6D75437939706745397034785333436E4F504E5972646D742F33616A3877614C703754626E45414D41414B444F48615163616445534B635763742B302B44377431624C6452766D794E325078747455333173464C5A305930395570752F4F385271504E58512F4155414147586341517741414B7834764F3171626661777464753168652B464A334153676A6D7161565A4E6B31337258357865303442474B49386F7533456F7345475457587454312B2B726656317169744C354362307A38656333664E30552B3931346265786E70597274644E6D50562F466176504C7665425837364E692B30397A35664D6D722B4C706A2F2B5874624E682B783336626B3639315133336C64754B76702F4931786E2B6E387668552F483761387957762B7663626A714758387273702B366838544E5249327862326D34712F524E6F57764F5266506E55765762396E566571736D377165504E2F546E794E6271596166642F64636431396E5056663566436E6C35365571762B6365323150716535723437375A56624B65396D3864343269716562362B6F7A3972472B6F716139746A3230726264336B33614B7634646252572F3335617976666A7A48622F626E7648392B70522F302F725933364D397061597435642F5855646465385464492B7A645A796A597470615A6A6D316278633363486344762F7332385958314C2B56666C647A747664536E45586F51624B71525A644C4E6C51676755364269556467354C39742F34586459702F666E4B476F474345616C70554D3077316D366A6D52575952416741417355453844574141414F415578396832316D37484662356E69374E71677374553078513267586662304F6A706145616C7454693630355054784A575046563937315537506C717038582F6C3131696E6D57485273614941672F5838626E564E414E3258454D70357272764C7A706F7966743352386C69392F33644765626247754C644E68466638726259377473385736746F4B625578376A4C64336D574F492F743554666A662F636937327574486756762B6646397473532B3736353474464C2B66333438326C31587358785348732B3766754B56766D475932595676324F5761466C33322F7874536E6B75712B48626B30644C2B6235614D376937353376366331542F4C3130744E586B31674876796D505663627876413173312F5464502B693275567A773137307A345876756B716674754C76384C794B2F42535871575838716F533279716C76336F7639736F38532F6B6469333332694C2B57696D306D6171336973306438582B37726A48315762747472542F366C3474754A763759757A36653862692F747232436472386472373371734E33796430747074537173462B73356463447254765475446266554F396170386D716A38424E4F633858317A374A4E5454352F50326C355479716566616D4D6A7234662F4E656A362F394D574B6A50386D656E2F4C516C47324F6D32696632564D73502F542B4D454C774141364F4C2F42426741744B3530463353752F6F4541414141415355564F524B35435949493D222C0D0A202020202020202022666974223A2022636F6E7461696E222C0D0A202020202020202022626F72646572526164697573223A2031300D0A2020202020207D0D0A202020207D2C0D0A202020207B0D0A202020202020226964223A2022336F7777796F796F323738303030222C0D0A20202020202022697347726F7570223A2066616C73652C0D0A2020202020202261747472223A207B0D0A20202020202020202278223A203731302C0D0A20202020202020202279223A2031312C0D0A20202020202020202277223A203530302C0D0A20202020202020202268223A2035302C0D0A2020202020202020226F666673657458223A20302C0D0A2020202020202020226F666673657459223A20302C0D0A2020202020202020227A496E646578223A202D310D0A2020202020207D2C0D0A202020202020227374796C6573223A207B0D0A20202020202020202266696C74657253686F77223A2066616C73652C0D0A202020202020202022687565526F74617465223A20302C0D0A2020202020202020227361747572617465223A20312C0D0A202020202020202022636F6E7472617374223A20312C0D0A2020202020202020226272696768746E657373223A20312C0D0A2020202020202020226F706163697479223A20312C0D0A202020202020202022726F746174655A223A20302C0D0A202020202020202022726F7461746558223A20302C0D0A202020202020202022726F7461746559223A20302C0D0A202020202020202022736B657758223A20302C0D0A202020202020202022736B657759223A20302C0D0A202020202020202022626C656E644D6F6465223A20226E6F726D616C222C0D0A202020202020202022616E696D6174696F6E73223A205B5D0D0A2020202020207D2C0D0A2020202020202270726576696577223A207B0D0A2020202020202020226F766572466C6F7748696464656E223A2066616C73650D0A2020202020207D2C0D0A20202020202022737461747573223A207B0D0A2020202020202020226C6F636B223A2066616C73652C0D0A20202020202020202268696465223A2066616C73650D0A2020202020207D2C0D0A2020202020202272657175657374223A207B0D0A202020202020202022726571756573744461746154797065223A20302C0D0A202020202020202022726571756573744874747054797065223A2022676574222C0D0A2020202020202020227265717565737455726C223A2022222C0D0A20202020202020202272657175657374496E74657276616C223A206E756C6C2C0D0A20202020202020202272657175657374496E74657276616C556E6974223A20227365636F6E64222C0D0A20202020202020202272657175657374436F6E74656E7454797065223A20302C0D0A20202020202020202272657175657374506172616D73426F647954797065223A20226E6F6E65222C0D0A2020202020202020227265717565737453514C436F6E74656E74223A207B0D0A202020202020202020202273716C223A202273656C656374202A2066726F6D20207768657265220D0A20202020202020207D2C0D0A20202020202020202272657175657374506172616D73223A207B0D0A2020202020202020202022426F6479223A207B0D0A20202020202020202020202022666F726D2D64617461223A207B7D2C0D0A20202020202020202020202022782D7777772D666F726D2D75726C656E636F646564223A207B7D2C0D0A202020202020202020202020226A736F6E223A2022222C0D0A20202020202020202020202022786D6C223A2022220D0A202020202020202020207D2C0D0A2020202020202020202022486561646572223A207B7D2C0D0A2020202020202020202022506172616D73223A207B7D0D0A20202020202020207D0D0A2020202020207D2C0D0A2020202020202266696C746572223A206E756C6C2C0D0A202020202020226576656E7473223A207B0D0A202020202020202022626173654576656E74223A207B0D0A2020202020202020202022636C69636B223A206E756C6C2C0D0A202020202020202020202264626C636C69636B223A206E756C6C2C0D0A20202020202020202020226D6F757365656E746572223A206E756C6C2C0D0A20202020202020202020226D6F7573656C65617665223A206E756C6C0D0A20202020202020207D2C0D0A202020202020202022616476616E6365644576656E7473223A207B0D0A2020202020202020202022766E6F64654D6F756E746564223A206E756C6C2C0D0A2020202020202020202022766E6F64654265666F72654D6F756E74223A206E756C6C0D0A20202020202020207D2C0D0A202020202020202022696E7465726163744576656E7473223A205B5D0D0A2020202020207D2C0D0A202020202020226B6579223A2022546578744772616469656E74222C0D0A202020202020226368617274436F6E666967223A207B0D0A2020202020202020226B6579223A2022546578744772616469656E74222C0D0A20202020202020202263686172744B6579223A202256546578744772616469656E74222C0D0A202020202020202022636F6E4B6579223A20225643546578744772616469656E74222C0D0A2020202020202020227469746C65223A2022E6B890E58F98E69687E5AD97222C0D0A20202020202020202263617465676F7279223A20225465787473222C0D0A20202020202020202263617465676F72794E616D65223A2022E69687E69CAC222C0D0A2020202020202020227061636B616765223A2022496E666F726D6174696F6E73222C0D0A20202020202020202263686172744672616D65223A20226E616976655549222C0D0A202020202020202022696D616765223A2022746578745F6772616469656E742E706E67220D0A2020202020207D2C0D0A202020202020226F7074696F6E223A207B0D0A20202020202020202264617461736574223A2022E59F8EE99587E78783E6B094E5AE89E585A8E7AEA1E79086E5B9B3E58FB0222C0D0A20202020202020202273697A65223A2033382C0D0A2020202020202020226772616469656E74223A207B0D0A202020202020202020202266726F6D223A2022233030373246464646222C0D0A2020202020202020202022746F223A2022233030656166664646222C0D0A2020202020202020202022646567223A206E756C6C0D0A20202020202020207D0D0A2020202020207D0D0A202020207D2C0D0A202020207B0D0A202020202020226964223A2022326C796273327372787475303030222C0D0A20202020202022697347726F7570223A2066616C73652C0D0A2020202020202261747472223A207B0D0A20202020202020202278223A203539372C0D0A20202020202020202279223A203131352C0D0A20202020202020202277223A203731372C0D0A20202020202020202268223A203539342C0D0A2020202020202020226F666673657458223A20302C0D0A2020202020202020226F666673657459223A20302C0D0A2020202020202020227A496E646578223A202D310D0A2020202020207D2C0D0A202020202020227374796C6573223A207B0D0A20202020202020202266696C74657253686F77223A2066616C73652C0D0A202020202020202022687565526F74617465223A20302C0D0A2020202020202020227361747572617465223A20312C0D0A202020202020202022636F6E7472617374223A20312C0D0A2020202020202020226272696768746E657373223A20312C0D0A2020202020202020226F706163697479223A20312C0D0A202020202020202022726F746174655A223A20302C0D0A202020202020202022726F7461746558223A20302C0D0A202020202020202022726F7461746559223A20302C0D0A202020202020202022736B657758223A20302C0D0A202020202020202022736B657759223A20302C0D0A202020202020202022626C656E644D6F6465223A20226E6F726D616C222C0D0A202020202020202022616E696D6174696F6E73223A205B5D0D0A2020202020207D2C0D0A2020202020202270726576696577223A207B0D0A2020202020202020226F766572466C6F7748696464656E223A2066616C73650D0A2020202020207D2C0D0A20202020202022737461747573223A207B0D0A2020202020202020226C6F636B223A2066616C73652C0D0A20202020202020202268696465223A2066616C73650D0A2020202020207D2C0D0A2020202020202272657175657374223A207B0D0A202020202020202022726571756573744461746154797065223A20302C0D0A202020202020202022726571756573744874747054797065223A2022676574222C0D0A2020202020202020227265717565737455726C223A2022222C0D0A20202020202020202272657175657374496E74657276616C223A206E756C6C2C0D0A20202020202020202272657175657374496E74657276616C556E6974223A20227365636F6E64222C0D0A20202020202020202272657175657374436F6E74656E7454797065223A20302C0D0A20202020202020202272657175657374506172616D73426F647954797065223A20226E6F6E65222C0D0A2020202020202020227265717565737453514C436F6E74656E74223A207B0D0A202020202020202020202273716C223A202273656C656374202A2066726F6D20207768657265220D0A20202020202020207D2C0D0A20202020202020202272657175657374506172616D73223A207B0D0A2020202020202020202022426F6479223A207B0D0A20202020202020202020202022666F726D2D64617461223A207B7D2C0D0A20202020202020202020202022782D7777772D666F726D2D75726C656E636F646564223A207B7D2C0D0A202020202020202020202020226A736F6E223A2022222C0D0A20202020202020202020202022786D6C223A2022220D0A202020202020202020207D2C0D0A2020202020202020202022486561646572223A207B7D2C0D0A2020202020202020202022506172616D73223A207B7D0D0A20202020202020207D0D0A2020202020207D2C0D0A2020202020202266696C746572223A206E756C6C2C0D0A202020202020226576656E7473223A207B0D0A202020202020202022626173654576656E74223A207B0D0A2020202020202020202022636C69636B223A206E756C6C2C0D0A202020202020202020202264626C636C69636B223A206E756C6C2C0D0A20202020202020202020226D6F757365656E746572223A206E756C6C2C0D0A20202020202020202020226D6F7573656C65617665223A206E756C6C0D0A20202020202020207D2C0D0A202020202020202022616476616E6365644576656E7473223A207B0D0A2020202020202020202022766E6F64654D6F756E746564223A206E756C6C2C0D0A2020202020202020202022766E6F64654265666F72654D6F756E74223A206E756C6C0D0A20202020202020207D2C0D0A202020202020202022696E7465726163744576656E7473223A205B5D0D0A2020202020207D2C0D0A202020202020226B6579223A2022426F726465723038222C0D0A202020202020226368617274436F6E666967223A207B0D0A2020202020202020226B6579223A2022426F726465723038222C0D0A20202020202020202263686172744B6579223A202256426F726465723038222C0D0A202020202020202022636F6E4B6579223A20225643426F726465723038222C0D0A2020202020202020227469746C65223A2022E8BEB9E6A1862D3038222C0D0A20202020202020202263617465676F7279223A2022426F7264657273222C0D0A20202020202020202263617465676F72794E616D65223A2022E8BEB9E6A186222C0D0A2020202020202020227061636B616765223A20224465636F7261746573222C0D0A20202020202020202263686172744672616D65223A2022737461746963222C0D0A202020202020202022696D616765223A2022626F7264657230382E706E67220D0A2020202020207D2C0D0A202020202020226F7074696F6E223A207B0D0A202020202020202022636F6C6F7273223A205B0D0A202020202020202020202223323335666137222C0D0A202020202020202020202223346664326464220D0A20202020202020205D2C0D0A202020202020202022647572223A20332C0D0A20202020202020202272657665727365223A2066616C73652C0D0A2020202020202020226261636B67726F756E64436F6C6F72223A2022233030303030303030220D0A2020202020207D0D0A202020207D2C0D0A202020207B0D0A202020202020226964223A202232686C31717A6866693461303030222C0D0A20202020202022697347726F7570223A2066616C73652C0D0A2020202020202261747472223A207B0D0A20202020202020202278223A20313035302C0D0A20202020202020202279223A203733382C0D0A20202020202020202277223A2035382C0D0A20202020202020202268223A2035302C0D0A2020202020202020226F666673657458223A20302C0D0A2020202020202020226F666673657459223A20302C0D0A2020202020202020227A496E646578223A202D310D0A2020202020207D2C0D0A202020202020227374796C6573223A207B0D0A20202020202020202266696C74657253686F77223A2066616C73652C0D0A202020202020202022687565526F74617465223A20302C0D0A2020202020202020227361747572617465223A20312C0D0A202020202020202022636F6E7472617374223A20312C0D0A2020202020202020226272696768746E657373223A20312C0D0A2020202020202020226F706163697479223A20312C0D0A202020202020202022726F746174655A223A20302C0D0A202020202020202022726F7461746558223A20302C0D0A202020202020202022726F7461746559223A20302C0D0A202020202020202022736B657758223A20302C0D0A202020202020202022736B657759223A20302C0D0A202020202020202022626C656E644D6F6465223A20226E6F726D616C222C0D0A202020202020202022616E696D6174696F6E73223A205B5D0D0A2020202020207D2C0D0A2020202020202270726576696577223A207B0D0A2020202020202020226F766572466C6F7748696464656E223A2066616C73650D0A2020202020207D2C0D0A20202020202022737461747573223A207B0D0A2020202020202020226C6F636B223A2066616C73652C0D0A20202020202020202268696465223A2066616C73650D0A2020202020207D2C0D0A2020202020202272657175657374223A207B0D0A202020202020202022726571756573744461746154797065223A20302C0D0A202020202020202022726571756573744874747054797065223A2022676574222C0D0A2020202020202020227265717565737455726C223A2022222C0D0A20202020202020202272657175657374496E74657276616C223A206E756C6C2C0D0A20202020202020202272657175657374496E74657276616C556E6974223A20227365636F6E64222C0D0A20202020202020202272657175657374436F6E74656E7454797065223A20302C0D0A20202020202020202272657175657374506172616D73426F647954797065223A20226E6F6E65222C0D0A2020202020202020227265717565737453514C436F6E74656E74223A207B0D0A202020202020202020202273716C223A202273656C656374202A2066726F6D20207768657265220D0A20202020202020207D2C0D0A20202020202020202272657175657374506172616D73223A207B0D0A2020202020202020202022426F6479223A207B0D0A20202020202020202020202022666F726D2D64617461223A207B7D2C0D0A20202020202020202020202022782D7777772D666F726D2D75726C656E636F646564223A207B7D2C0D0A202020202020202020202020226A736F6E223A2022222C0D0A20202020202020202020202022786D6C223A2022220D0A202020202020202020207D2C0D0A2020202020202020202022486561646572223A207B7D2C0D0A2020202020202020202022506172616D73223A207B7D0D0A20202020202020207D0D0A2020202020207D2C0D0A2020202020202266696C746572223A206E756C6C2C0D0A202020202020226576656E7473223A207B0D0A202020202020202022626173654576656E74223A207B0D0A2020202020202020202022636C69636B223A206E756C6C2C0D0A202020202020202020202264626C636C69636B223A206E756C6C2C0D0A20202020202020202020226D6F757365656E746572223A206E756C6C2C0D0A20202020202020202020226D6F7573656C65617665223A206E756C6C0D0A20202020202020207D2C0D0A202020202020202022616476616E6365644576656E7473223A207B0D0A2020202020202020202022766E6F64654D6F756E746564223A206E756C6C2C0D0A2020202020202020202022766E6F64654265666F72654D6F756E74223A206E756C6C0D0A20202020202020207D2C0D0A202020202020202022696E7465726163744576656E7473223A205B5D0D0A2020202020207D2C0D0A202020202020226B6579223A2022496D616765222C0D0A202020202020226368617274436F6E666967223A207B0D0A2020202020202020226B6579223A2022496D616765222C0D0A20202020202020202263686172744B6579223A202256496D616765222C0D0A202020202020202022636F6E4B6579223A20225643496D616765222C0D0A2020202020202020227469746C65223A202277696E646F772D72696768742E706E67222C0D0A20202020202020202263617465676F7279223A20224D6F726573222C0D0A20202020202020202263617465676F72794E616D65223A2022E69BB4E5A49A222C0D0A2020202020202020227061636B616765223A2022496E666F726D6174696F6E73222C0D0A20202020202020202263686172744672616D65223A2022737461746963222C0D0A202020202020202022696D616765223A202270686F746F2E706E67220D0A2020202020207D2C0D0A202020202020226F7074696F6E223A207B0D0A20202020202020202264617461736574223A2022646174613A696D6167652F706E673B6261736536342C6956424F5277304B47676F414141414E535568455567414141446F414141414F434159414141422B55412B544141414141584E535230494172733463365141414141526E51553142414143786A777638595155414141414A6345685A6377414144734D414141374441636476714751414141415A6445565964464E765A6E523359584A6C4145466B62324A6C49456C745957646C556D56685A486C7879575538414141444A6D6C555748525954557736593239744C6D466B62324A6C4C6E68746341414141414141504439346347466A6132563049474A6C5A326C7550534C767537386949476C6B50534A584E553077545842445A576870534870795A564E36546C526A656D746A4F575169507A34675048673665473177625756305953423462577875637A703450534A685A4739695A547075637A70745A5852684C7949676544703462584230617A306951575276596D55675745315149454E76636D55674E5334324C574D784E4449674E7A6B754D5459774F5449304C4341794D4445334C7A41334C7A457A4C5441784F6A41324F6A4D3549434167494341674943416950694138636D526D4F6C4A455269423462577875637A70795A475939496D6830644841364C79393364336375647A4D7562334A6E4C7A45354F546B764D4449764D6A4974636D526D4C584E35626E52686543317563794D6950694138636D526D4F6B526C63324E79615842306157397549484A6B5A6A7068596D3931644430694969423462577875637A703462584139496D6830644841364C793975637935685A4739695A53356A62323076654746774C7A45754D433869494868746247357A4F6E68746345314E50534A6F644852774F693876626E4D7559575276596D5575593239744C336868634338784C6A4176625730764969423462577875637A707A64464A6C5A6A30696148523063446F764C32357A4C6D466B62324A6C4C6D4E7662533934595841764D5334774C334E556558426C4C314A6C63323931636D4E6C556D566D49794967654731774F6B4E795A57463062334A556232397350534A425A4739695A5342516147393062334E6F6233416751304D674D6A41784F43416F56326C755A47393363796B69494868746345314E4F6B6C7563335268626D4E6C53555139496E68746343357061575136525456434F4455344E7A59354F4463344D544646517A6C44524556454E6A684451544A444D545533526A6B69494868746345314E4F6B5276593356745A57353053555139496E68746343356B61575136525456434F4455344E7A63354F4463344D544646517A6C44524556454E6A684451544A444D545533526A6B695069413865473177545530365247567961585A6C5A455A7962323067633352535A5759366157357A644746755932564A52443069654731774C6D6C705A4470464E5549344E5467334E446B344E7A67784D5556444F554E45525551324F454E424D6B4D784E5464474F534967633352535A5759365A47396A6457316C626E524A52443069654731774C6D52705A4470464E5549344E5467334E546B344E7A67784D5556444F554E45525551324F454E424D6B4D784E5464474F534976506941384C334A6B5A6A70455A584E6A636D6C7764476C76626A3467504339795A475936556B5247506941384C336736654731776257563059543467504439346347466A61325630494756755A4430696369492F507468654D364D4141414A4B535552425645684C335A5A4A6A307852474543374E646F515177774A516D6A4467684153455A45676867564A73374F777453456B666F414E652F75324A78462F51466A5A32474A446843446D65577A536874616D6331373131376D2B3930784C645A4B547176747576654738717478366E5A76374C6E66386774463446452F684254636B4F6E45664F6E664A4451317377526434705272565759486638476F31716A4D50782B4F4E616C526E436B37474239576F7A6C69636750326A716D4564492F74774E7835426F306F6348384265334974646D4E6D4B4733456265734B4D6B657477445271544D58496C4C73474A626B67597551686E59744F383535794F686E5933685270354448666954647944337A4749794F336F7433555976324B4A6B527677505A37417A3167536B57342F69782B784A434939723738596A314D536B5849583833784565713176635443485275514F4E4849584768506B794550344445764B794F5034484574795A4E342F522B6239632B547231747352636D523145387251746F32554347337253444655492F4957356B694A794A6659464F6E7161755148624970636A6B594F5956506B585079625343502B4F564B4D64486D2F5834316142357A616576735454345A6658523339544F594E6570466A634A49624567506F655679646D316249542B693831394F30416E75446E42656A4D733746764C2F4F476C30397666743950592B65594250367A5A3744387135645179396D4C6135482F33786659664155332B46535849615030666967487A33655175775A4870667A2F6849637A38485A4F49682B4D344768486E386165714F397164363877456A33475966643641317A50454B4579703969722B4E2F4731754753747647356C42707939696D55436C6A562B4E4A4C436C6A585333506F43634D79746A466542484C70366379646A3536764338596C4C477A38424561474F52593335667A4F58626F64772F316368425034353171564D664852422F496231656A4F717651433735586A656F73514338715676334D445052694831616A4F6A3748756F726E76385041465A6A394F775A2B414E6B2B44396F684E366E584141414141456C46546B5375516D4343222C0D0A202020202020202022666974223A2022636F6E7461696E222C0D0A202020202020202022626F72646572526164697573223A2031300D0A2020202020207D0D0A202020207D2C0D0A202020207B0D0A202020202020226964223A2022336E63337A6971706F7575303030222C0D0A20202020202022697347726F7570223A2066616C73652C0D0A2020202020202261747472223A207B0D0A20202020202020202278223A20323330312C0D0A20202020202020202279223A203534392C0D0A20202020202020202277223A203534302C0D0A20202020202020202268223A203237302C0D0A2020202020202020226F666673657458223A20302C0D0A2020202020202020226F666673657459223A20302C0D0A2020202020202020227A496E646578223A202D310D0A2020202020207D2C0D0A202020202020227374796C6573223A207B0D0A20202020202020202266696C74657253686F77223A2066616C73652C0D0A202020202020202022687565526F74617465223A20302C0D0A2020202020202020227361747572617465223A20312C0D0A202020202020202022636F6E7472617374223A20312C0D0A2020202020202020226272696768746E657373223A20312C0D0A2020202020202020226F706163697479223A20312C0D0A202020202020202022726F746174655A223A20302C0D0A202020202020202022726F7461746558223A20302C0D0A202020202020202022726F7461746559223A20302C0D0A202020202020202022736B657758223A20302C0D0A202020202020202022736B657759223A20302C0D0A202020202020202022626C656E644D6F6465223A20226E6F726D616C222C0D0A202020202020202022616E696D6174696F6E73223A205B5D0D0A2020202020207D2C0D0A2020202020202270726576696577223A207B0D0A2020202020202020226F766572466C6F7748696464656E223A2066616C73650D0A2020202020207D2C0D0A20202020202022737461747573223A207B0D0A2020202020202020226C6F636B223A2066616C73652C0D0A20202020202020202268696465223A2066616C73650D0A2020202020207D2C0D0A2020202020202272657175657374223A207B0D0A202020202020202022726571756573744461746154797065223A20302C0D0A202020202020202022726571756573744874747054797065223A2022676574222C0D0A2020202020202020227265717565737455726C223A2022222C0D0A20202020202020202272657175657374496E74657276616C223A206E756C6C2C0D0A20202020202020202272657175657374496E74657276616C556E6974223A20227365636F6E64222C0D0A20202020202020202272657175657374436F6E74656E7454797065223A20302C0D0A20202020202020202272657175657374506172616D73426F647954797065223A20226E6F6E65222C0D0A2020202020202020227265717565737453514C436F6E74656E74223A207B0D0A202020202020202020202273716C223A202273656C656374202A2066726F6D20207768657265220D0A20202020202020207D2C0D0A20202020202020202272657175657374506172616D73223A207B0D0A2020202020202020202022426F6479223A207B0D0A20202020202020202020202022666F726D2D64617461223A207B7D2C0D0A20202020202020202020202022782D7777772D666F726D2D75726C656E636F646564223A207B7D2C0D0A202020202020202020202020226A736F6E223A2022222C0D0A20202020202020202020202022786D6C223A2022220D0A202020202020202020207D2C0D0A2020202020202020202022486561646572223A207B7D2C0D0A2020202020202020202022506172616D73223A207B7D0D0A20202020202020207D0D0A2020202020207D2C0D0A2020202020202266696C746572223A206E756C6C2C0D0A202020202020226576656E7473223A207B0D0A202020202020202022626173654576656E74223A207B0D0A2020202020202020202022636C69636B223A206E756C6C2C0D0A202020202020202020202264626C636C69636B223A206E756C6C2C0D0A20202020202020202020226D6F757365656E746572223A206E756C6C2C0D0A20202020202020202020226D6F7573656C65617665223A206E756C6C0D0A20202020202020207D2C0D0A202020202020202022616476616E6365644576656E7473223A207B0D0A2020202020202020202022766E6F64654D6F756E746564223A206E756C6C2C0D0A2020202020202020202022766E6F64654265666F72654D6F756E74223A206E756C6C0D0A20202020202020207D2C0D0A202020202020202022696E7465726163744576656E7473223A205B5D0D0A2020202020207D2C0D0A202020202020226B6579223A202243617073756C654368617274222C0D0A202020202020226368617274436F6E666967223A207B0D0A2020202020202020226B6579223A202243617073756C654368617274222C0D0A20202020202020202263686172744B6579223A20225643617073756C654368617274222C0D0A202020202020202022636F6E4B6579223A2022564343617073756C654368617274222C0D0A2020202020202020227469746C65223A2022E883B6E59B8AE69FB1E59BBE222C0D0A20202020202020202263617465676F7279223A202242617273222C0D0A20202020202020202263617465676F72794E616D65223A2022E69FB1E78AB6E59BBE222C0D0A2020202020202020227061636B616765223A2022436861727473222C0D0A20202020202020202263686172744672616D65223A2022636F6D6D6F6E222C0D0A202020202020202022696D616765223A202263617073756C652E706E67220D0A2020202020207D2C0D0A202020202020226F7074696F6E223A207B0D0A20202020202020202264617461736574223A207B0D0A202020202020202020202264696D656E73696F6E73223A205B0D0A202020202020202020202020226E616D65222C0D0A2020202020202020202020202276616C7565220D0A202020202020202020205D2C0D0A2020202020202020202022736F75726365223A205B0D0A2020202020202020202020207B0D0A2020202020202020202020202020226E616D65223A2022E6B8A9E5BAA6E4BCA0E6849FE599A8222C0D0A20202020202020202020202020202276616C7565223A20300D0A2020202020202020202020207D2C0D0A2020202020202020202020207B0D0A2020202020202020202020202020226E616D65223A2022E6B6B2E4BD8DE4BCA0E6849FE599A8222C0D0A20202020202020202020202020202276616C7565223A20300D0A2020202020202020202020207D2C0D0A2020202020202020202020207B0D0A2020202020202020202020202020226E616D65223A2022E58E8BE58A9BE4BCA0E6849FE599A8222C0D0A20202020202020202020202020202276616C7565223A2031320D0A2020202020202020202020207D2C0D0A2020202020202020202020207B0D0A2020202020202020202020202020226E616D65223A2022E58FAFE78783E6B094E4BD93E68AA5E8ADA6E8AEBEE5A487222C0D0A20202020202020202020202020202276616C7565223A20360D0A2020202020202020202020207D2C0D0A2020202020202020202020207B0D0A2020202020202020202020202020226E616D65223A2022E69C89E6AF92E6B094E4BD93E68AA5E8ADA6E8AEBEE5A487222C0D0A20202020202020202020202020202276616C7565223A20340D0A2020202020202020202020207D0D0A202020202020202020205D0D0A20202020202020207D2C0D0A202020202020202022636F6C6F7273223A205B0D0A2020202020202020202022234245424645464646222C0D0A202020202020202020202223366265366331222C0D0A2020202020202020202022234431453641304646222C0D0A2020202020202020202022234538424639364646222C0D0A202020202020202020202223336662316533220D0A20202020202020205D2C0D0A202020202020202022756E6974223A2022E4B8AA222C0D0A2020202020202020226974656D486569676874223A2031302C0D0A20202020202020202276616C7565466F6E7453697A65223A2031362C0D0A20202020202020202270616464696E675269676874223A2035302C0D0A20202020202020202270616464696E674C656674223A2032352C0D0A20202020202020202273686F7756616C7565223A20747275650D0A2020202020207D0D0A202020207D2C0D0A202020207B0D0A202020202020226964223A202233307A6C643663756A6D6D303030222C0D0A20202020202022697347726F7570223A2066616C73652C0D0A2020202020202261747472223A207B0D0A20202020202020202278223A20323334382C0D0A20202020202020202279223A203531312C0D0A20202020202020202277223A203534302C0D0A20202020202020202268223A203237302C0D0A2020202020202020226F666673657458223A20302C0D0A2020202020202020226F666673657459223A20302C0D0A2020202020202020227A496E646578223A202D310D0A2020202020207D2C0D0A202020202020227374796C6573223A207B0D0A20202020202020202266696C74657253686F77223A2066616C73652C0D0A202020202020202022687565526F74617465223A20302C0D0A2020202020202020227361747572617465223A20312C0D0A202020202020202022636F6E7472617374223A20312C0D0A2020202020202020226272696768746E657373223A20312C0D0A2020202020202020226F706163697479223A20312C0D0A202020202020202022726F746174655A223A20302C0D0A202020202020202022726F7461746558223A20302C0D0A202020202020202022726F7461746559223A20302C0D0A202020202020202022736B657758223A20302C0D0A202020202020202022736B657759223A20302C0D0A202020202020202022626C656E644D6F6465223A20226E6F726D616C222C0D0A202020202020202022616E696D6174696F6E73223A205B5D0D0A2020202020207D2C0D0A2020202020202270726576696577223A207B0D0A2020202020202020226F766572466C6F7748696464656E223A2066616C73650D0A2020202020207D2C0D0A20202020202022737461747573223A207B0D0A2020202020202020226C6F636B223A2066616C73652C0D0A20202020202020202268696465223A2066616C73650D0A2020202020207D2C0D0A2020202020202272657175657374223A207B0D0A202020202020202022726571756573744461746154797065223A20302C0D0A202020202020202022726571756573744874747054797065223A2022676574222C0D0A2020202020202020227265717565737455726C223A2022222C0D0A20202020202020202272657175657374496E74657276616C223A206E756C6C2C0D0A20202020202020202272657175657374496E74657276616C556E6974223A20227365636F6E64222C0D0A20202020202020202272657175657374436F6E74656E7454797065223A20302C0D0A20202020202020202272657175657374506172616D73426F647954797065223A20226E6F6E65222C0D0A2020202020202020227265717565737453514C436F6E74656E74223A207B0D0A202020202020202020202273716C223A202273656C656374202A2066726F6D20207768657265220D0A20202020202020207D2C0D0A20202020202020202272657175657374506172616D73223A207B0D0A2020202020202020202022426F6479223A207B0D0A20202020202020202020202022666F726D2D64617461223A207B7D2C0D0A20202020202020202020202022782D7777772D666F726D2D75726C656E636F646564223A207B7D2C0D0A202020202020202020202020226A736F6E223A2022222C0D0A20202020202020202020202022786D6C223A2022220D0A202020202020202020207D2C0D0A2020202020202020202022486561646572223A207B7D2C0D0A2020202020202020202022506172616D73223A207B7D0D0A20202020202020207D0D0A2020202020207D2C0D0A2020202020202266696C746572223A206E756C6C2C0D0A202020202020226576656E7473223A207B0D0A202020202020202022626173654576656E74223A207B0D0A2020202020202020202022636C69636B223A206E756C6C2C0D0A202020202020202020202264626C636C69636B223A206E756C6C2C0D0A20202020202020202020226D6F757365656E746572223A206E756C6C2C0D0A20202020202020202020226D6F7573656C65617665223A206E756C6C0D0A20202020202020207D2C0D0A202020202020202022616476616E6365644576656E7473223A207B0D0A2020202020202020202022766E6F64654D6F756E746564223A206E756C6C2C0D0A2020202020202020202022766E6F64654265666F72654D6F756E74223A206E756C6C0D0A20202020202020207D2C0D0A202020202020202022696E7465726163744576656E7473223A205B5D0D0A2020202020207D2C0D0A202020202020226B6579223A202243617073756C654368617274222C0D0A202020202020226368617274436F6E666967223A207B0D0A2020202020202020226B6579223A202243617073756C654368617274222C0D0A20202020202020202263686172744B6579223A20225643617073756C654368617274222C0D0A202020202020202022636F6E4B6579223A2022564343617073756C654368617274222C0D0A2020202020202020227469746C65223A2022E883B6E59B8AE69FB1E59BBE222C0D0A20202020202020202263617465676F7279223A202242617273222C0D0A20202020202020202263617465676F72794E616D65223A2022E69FB1E78AB6E59BBE222C0D0A2020202020202020227061636B616765223A2022436861727473222C0D0A20202020202020202263686172744672616D65223A2022636F6D6D6F6E222C0D0A202020202020202022696D616765223A202263617073756C652E706E67220D0A2020202020207D2C0D0A202020202020226F7074696F6E223A207B0D0A20202020202020202264617461736574223A207B0D0A202020202020202020202264696D656E73696F6E73223A205B0D0A202020202020202020202020226E616D65222C0D0A2020202020202020202020202276616C7565220D0A202020202020202020205D2C0D0A2020202020202020202022736F75726365223A205B0D0A2020202020202020202020207B0D0A2020202020202020202020202020226E616D65223A2022E6B8A9E5BAA6E4BCA0E6849FE599A8222C0D0A20202020202020202020202020202276616C7565223A20300D0A2020202020202020202020207D2C0D0A2020202020202020202020207B0D0A2020202020202020202020202020226E616D65223A2022E6B6B2E4BD8DE4BCA0E6849FE599A8222C0D0A20202020202020202020202020202276616C7565223A20300D0A2020202020202020202020207D2C0D0A2020202020202020202020207B0D0A2020202020202020202020202020226E616D65223A2022E58E8BE58A9BE4BCA0E6849FE599A8222C0D0A20202020202020202020202020202276616C7565223A2031320D0A2020202020202020202020207D2C0D0A2020202020202020202020207B0D0A2020202020202020202020202020226E616D65223A2022E58FAFE78783E6B094E4BD93E68AA5E8ADA6E8AEBEE5A487222C0D0A20202020202020202020202020202276616C7565223A20360D0A2020202020202020202020207D2C0D0A2020202020202020202020207B0D0A2020202020202020202020202020226E616D65223A2022E69C89E6AF92E6B094E4BD93E68AA5E8ADA6E8AEBEE5A487222C0D0A20202020202020202020202020202276616C7565223A20340D0A2020202020202020202020207D0D0A202020202020202020205D0D0A20202020202020207D2C0D0A202020202020202022636F6C6F7273223A205B0D0A2020202020202020202022234245424645464646222C0D0A202020202020202020202223366265366331222C0D0A2020202020202020202022234431453641304646222C0D0A2020202020202020202022234538424639364646222C0D0A202020202020202020202223336662316533220D0A20202020202020205D2C0D0A202020202020202022756E6974223A2022E4B8AA222C0D0A2020202020202020226974656D486569676874223A2031302C0D0A20202020202020202276616C7565466F6E7453697A65223A2031362C0D0A20202020202020202270616464696E675269676874223A2035302C0D0A20202020202020202270616464696E674C656674223A2032352C0D0A20202020202020202273686F7756616C7565223A20747275650D0A2020202020207D0D0A202020207D2C0D0A202020207B0D0A202020202020226964223A20227A6A3072303475707564633030222C0D0A20202020202022697347726F7570223A2066616C73652C0D0A2020202020202261747472223A207B0D0A20202020202020202278223A20323433362C0D0A20202020202020202279223A203238382C0D0A20202020202020202277223A203534302C0D0A20202020202020202268223A203237302C0D0A2020202020202020226F666673657458223A20302C0D0A2020202020202020226F666673657459223A20302C0D0A2020202020202020227A496E646578223A202D310D0A2020202020207D2C0D0A202020202020227374796C6573223A207B0D0A20202020202020202266696C74657253686F77223A2066616C73652C0D0A202020202020202022687565526F74617465223A20302C0D0A2020202020202020227361747572617465223A20312C0D0A202020202020202022636F6E7472617374223A20312C0D0A2020202020202020226272696768746E657373223A20312C0D0A2020202020202020226F706163697479223A20312C0D0A202020202020202022726F746174655A223A20302C0D0A202020202020202022726F7461746558223A20302C0D0A202020202020202022726F7461746559223A20302C0D0A202020202020202022736B657758223A20302C0D0A202020202020202022736B657759223A20302C0D0A202020202020202022626C656E644D6F6465223A20226E6F726D616C222C0D0A202020202020202022616E696D6174696F6E73223A205B5D0D0A2020202020207D2C0D0A2020202020202270726576696577223A207B0D0A2020202020202020226F766572466C6F7748696464656E223A2066616C73650D0A2020202020207D2C0D0A20202020202022737461747573223A207B0D0A2020202020202020226C6F636B223A2066616C73652C0D0A20202020202020202268696465223A2066616C73650D0A2020202020207D2C0D0A2020202020202272657175657374223A207B0D0A202020202020202022726571756573744461746154797065223A20302C0D0A202020202020202022726571756573744874747054797065223A2022676574222C0D0A2020202020202020227265717565737455726C223A2022222C0D0A20202020202020202272657175657374496E74657276616C223A206E756C6C2C0D0A20202020202020202272657175657374496E74657276616C556E6974223A20227365636F6E64222C0D0A20202020202020202272657175657374436F6E74656E7454797065223A20302C0D0A20202020202020202272657175657374506172616D73426F647954797065223A20226E6F6E65222C0D0A2020202020202020227265717565737453514C436F6E74656E74223A207B0D0A202020202020202020202273716C223A202273656C656374202A2066726F6D20207768657265220D0A20202020202020207D2C0D0A20202020202020202272657175657374506172616D73223A207B0D0A2020202020202020202022426F6479223A207B0D0A20202020202020202020202022666F726D2D64617461223A207B7D2C0D0A20202020202020202020202022782D7777772D666F726D2D75726C656E636F646564223A207B7D2C0D0A202020202020202020202020226A736F6E223A2022222C0D0A20202020202020202020202022786D6C223A2022220D0A202020202020202020207D2C0D0A2020202020202020202022486561646572223A207B7D2C0D0A2020202020202020202022506172616D73223A207B7D0D0A20202020202020207D0D0A2020202020207D2C0D0A2020202020202266696C746572223A206E756C6C2C0D0A202020202020226576656E7473223A207B0D0A202020202020202022626173654576656E74223A207B0D0A2020202020202020202022636C69636B223A206E756C6C2C0D0A202020202020202020202264626C636C69636B223A206E756C6C2C0D0A20202020202020202020226D6F757365656E746572223A206E756C6C2C0D0A20202020202020202020226D6F7573656C65617665223A206E756C6C0D0A20202020202020207D2C0D0A202020202020202022616476616E6365644576656E7473223A207B0D0A2020202020202020202022766E6F64654D6F756E746564223A206E756C6C2C0D0A2020202020202020202022766E6F64654265666F72654D6F756E74223A206E756C6C0D0A20202020202020207D2C0D0A202020202020202022696E7465726163744576656E7473223A205B5D0D0A2020202020207D2C0D0A202020202020226B6579223A202243617073756C654368617274222C0D0A202020202020226368617274436F6E666967223A207B0D0A2020202020202020226B6579223A202243617073756C654368617274222C0D0A20202020202020202263686172744B6579223A20225643617073756C654368617274222C0D0A202020202020202022636F6E4B6579223A2022564343617073756C654368617274222C0D0A2020202020202020227469746C65223A2022E883B6E59B8AE69FB1E59BBE222C0D0A20202020202020202263617465676F7279223A202242617273222C0D0A20202020202020202263617465676F72794E616D65223A2022E69FB1E78AB6E59BBE222C0D0A2020202020202020227061636B616765223A2022436861727473222C0D0A20202020202020202263686172744672616D65223A2022636F6D6D6F6E222C0D0A202020202020202022696D616765223A202263617073756C652E706E67220D0A2020202020207D2C0D0A202020202020226F7074696F6E223A207B0D0A20202020202020202264617461736574223A207B0D0A202020202020202020202264696D656E73696F6E73223A205B0D0A202020202020202020202020226E616D65222C0D0A2020202020202020202020202276616C7565220D0A202020202020202020205D2C0D0A2020202020202020202022736F75726365223A205B0D0A2020202020202020202020207B0D0A2020202020202020202020202020226E616D65223A2022E6B8A9E5BAA6E4BCA0E6849FE599A8222C0D0A20202020202020202020202020202276616C7565223A20300D0A2020202020202020202020207D2C0D0A2020202020202020202020207B0D0A2020202020202020202020202020226E616D65223A2022E6B6B2E4BD8DE4BCA0E6849FE599A8222C0D0A20202020202020202020202020202276616C7565223A20300D0A2020202020202020202020207D2C0D0A2020202020202020202020207B0D0A2020202020202020202020202020226E616D65223A2022E58E8BE58A9BE4BCA0E6849FE599A8222C0D0A20202020202020202020202020202276616C7565223A2031320D0A2020202020202020202020207D2C0D0A2020202020202020202020207B0D0A2020202020202020202020202020226E616D65223A2022E58FAFE78783E6B094E4BD93E68AA5E8ADA6E8AEBEE5A487222C0D0A20202020202020202020202020202276616C7565223A20360D0A2020202020202020202020207D2C0D0A2020202020202020202020207B0D0A2020202020202020202020202020226E616D65223A2022E69C89E6AF92E6B094E4BD93E68AA5E8ADA6E8AEBEE5A487222C0D0A20202020202020202020202020202276616C7565223A20340D0A2020202020202020202020207D0D0A202020202020202020205D0D0A20202020202020207D2C0D0A202020202020202022636F6C6F7273223A205B0D0A2020202020202020202022234245424645464646222C0D0A202020202020202020202223366265366331222C0D0A2020202020202020202022234431453641304646222C0D0A2020202020202020202022234538424639364646222C0D0A202020202020202020202223336662316533220D0A20202020202020205D2C0D0A202020202020202022756E6974223A2022E4B8AA222C0D0A2020202020202020226974656D486569676874223A2031302C0D0A20202020202020202276616C7565466F6E7453697A65223A2031362C0D0A20202020202020202270616464696E675269676874223A2035302C0D0A20202020202020202270616464696E674C656674223A2032352C0D0A20202020202020202273686F7756616C7565223A20747275650D0A2020202020207D0D0A202020207D2C0D0A202020207B0D0A202020202020226964223A2022326B6D613776656C777132303030222C0D0A20202020202022697347726F7570223A2066616C73652C0D0A2020202020202261747472223A207B0D0A20202020202020202278223A20323339372C0D0A20202020202020202279223A203233362C0D0A20202020202020202277223A203534302C0D0A20202020202020202268223A203237302C0D0A2020202020202020226F666673657458223A20302C0D0A2020202020202020226F666673657459223A20302C0D0A2020202020202020227A496E646578223A202D310D0A2020202020207D2C0D0A202020202020227374796C6573223A207B0D0A20202020202020202266696C74657253686F77223A2066616C73652C0D0A202020202020202022687565526F74617465223A20302C0D0A2020202020202020227361747572617465223A20312C0D0A202020202020202022636F6E7472617374223A20312C0D0A2020202020202020226272696768746E657373223A20312C0D0A2020202020202020226F706163697479223A20312C0D0A202020202020202022726F746174655A223A20302C0D0A202020202020202022726F7461746558223A20302C0D0A202020202020202022726F7461746559223A20302C0D0A202020202020202022736B657758223A20302C0D0A202020202020202022736B657759223A20302C0D0A202020202020202022626C656E644D6F6465223A20226E6F726D616C222C0D0A202020202020202022616E696D6174696F6E73223A205B5D0D0A2020202020207D2C0D0A2020202020202270726576696577223A207B0D0A2020202020202020226F766572466C6F7748696464656E223A2066616C73650D0A2020202020207D2C0D0A20202020202022737461747573223A207B0D0A2020202020202020226C6F636B223A2066616C73652C0D0A20202020202020202268696465223A2066616C73650D0A2020202020207D2C0D0A2020202020202272657175657374223A207B0D0A202020202020202022726571756573744461746154797065223A20302C0D0A202020202020202022726571756573744874747054797065223A2022676574222C0D0A2020202020202020227265717565737455726C223A2022222C0D0A20202020202020202272657175657374496E74657276616C223A206E756C6C2C0D0A20202020202020202272657175657374496E74657276616C556E6974223A20227365636F6E64222C0D0A20202020202020202272657175657374436F6E74656E7454797065223A20302C0D0A20202020202020202272657175657374506172616D73426F647954797065223A20226E6F6E65222C0D0A2020202020202020227265717565737453514C436F6E74656E74223A207B0D0A202020202020202020202273716C223A202273656C656374202A2066726F6D20207768657265220D0A20202020202020207D2C0D0A20202020202020202272657175657374506172616D73223A207B0D0A2020202020202020202022426F6479223A207B0D0A20202020202020202020202022666F726D2D64617461223A207B7D2C0D0A20202020202020202020202022782D7777772D666F726D2D75726C656E636F646564223A207B7D2C0D0A202020202020202020202020226A736F6E223A2022222C0D0A20202020202020202020202022786D6C223A2022220D0A202020202020202020207D2C0D0A2020202020202020202022486561646572223A207B7D2C0D0A2020202020202020202022506172616D73223A207B7D0D0A20202020202020207D0D0A2020202020207D2C0D0A2020202020202266696C746572223A206E756C6C2C0D0A202020202020226576656E7473223A207B0D0A202020202020202022626173654576656E74223A207B0D0A2020202020202020202022636C69636B223A206E756C6C2C0D0A202020202020202020202264626C636C69636B223A206E756C6C2C0D0A20202020202020202020226D6F757365656E746572223A206E756C6C2C0D0A20202020202020202020226D6F7573656C65617665223A206E756C6C0D0A20202020202020207D2C0D0A202020202020202022616476616E6365644576656E7473223A207B0D0A2020202020202020202022766E6F64654D6F756E746564223A206E756C6C2C0D0A2020202020202020202022766E6F64654265666F72654D6F756E74223A206E756C6C0D0A20202020202020207D2C0D0A202020202020202022696E7465726163744576656E7473223A205B5D0D0A2020202020207D2C0D0A202020202020226B6579223A202243617073756C654368617274222C0D0A202020202020226368617274436F6E666967223A207B0D0A2020202020202020226B6579223A202243617073756C654368617274222C0D0A20202020202020202263686172744B6579223A20225643617073756C654368617274222C0D0A202020202020202022636F6E4B6579223A2022564343617073756C654368617274222C0D0A2020202020202020227469746C65223A2022E883B6E59B8AE69FB1E59BBE222C0D0A20202020202020202263617465676F7279223A202242617273222C0D0A20202020202020202263617465676F72794E616D65223A2022E69FB1E78AB6E59BBE222C0D0A2020202020202020227061636B616765223A2022436861727473222C0D0A20202020202020202263686172744672616D65223A2022636F6D6D6F6E222C0D0A202020202020202022696D616765223A202263617073756C652E706E67220D0A2020202020207D2C0D0A202020202020226F7074696F6E223A207B0D0A20202020202020202264617461736574223A207B0D0A202020202020202020202264696D656E73696F6E73223A205B0D0A202020202020202020202020226E616D65222C0D0A2020202020202020202020202276616C7565220D0A202020202020202020205D2C0D0A2020202020202020202022736F75726365223A205B0D0A2020202020202020202020207B0D0A2020202020202020202020202020226E616D65223A2022E6B8A9E5BAA6E4BCA0E6849FE599A8222C0D0A20202020202020202020202020202276616C7565223A20300D0A2020202020202020202020207D2C0D0A2020202020202020202020207B0D0A2020202020202020202020202020226E616D65223A2022E6B6B2E4BD8DE4BCA0E6849FE599A8222C0D0A20202020202020202020202020202276616C7565223A20300D0A2020202020202020202020207D2C0D0A2020202020202020202020207B0D0A2020202020202020202020202020226E616D65223A2022E58E8BE58A9BE4BCA0E6849FE599A8222C0D0A20202020202020202020202020202276616C7565223A2031320D0A2020202020202020202020207D2C0D0A2020202020202020202020207B0D0A2020202020202020202020202020226E616D65223A2022E58FAFE78783E6B094E4BD93E68AA5E8ADA6E8AEBEE5A487222C0D0A20202020202020202020202020202276616C7565223A20360D0A2020202020202020202020207D2C0D0A2020202020202020202020207B0D0A2020202020202020202020202020226E616D65223A2022E69C89E6AF92E6B094E4BD93E68AA5E8ADA6E8AEBEE5A487222C0D0A20202020202020202020202020202276616C7565223A20340D0A2020202020202020202020207D0D0A202020202020202020205D0D0A20202020202020207D2C0D0A202020202020202022636F6C6F7273223A205B0D0A2020202020202020202022234245424645464646222C0D0A202020202020202020202223366265366331222C0D0A2020202020202020202022234431453641304646222C0D0A2020202020202020202022234538424639364646222C0D0A202020202020202020202223336662316533220D0A20202020202020205D2C0D0A202020202020202022756E6974223A2022E4B8AA222C0D0A2020202020202020226974656D486569676874223A2031302C0D0A20202020202020202276616C7565466F6E7453697A65223A2031362C0D0A20202020202020202270616464696E675269676874223A2035302C0D0A20202020202020202270616464696E674C656674223A2032352C0D0A20202020202020202273686F7756616C7565223A20747275650D0A2020202020207D0D0A202020207D2C0D0A202020207B0D0A202020202020226964223A2022316279326A766972757673773030222C0D0A20202020202022697347726F7570223A2066616C73652C0D0A2020202020202261747472223A207B0D0A20202020202020202278223A20323339372C0D0A20202020202020202279223A203233362C0D0A20202020202020202277223A203534302C0D0A20202020202020202268223A203237302C0D0A2020202020202020226F666673657458223A20302C0D0A2020202020202020226F666673657459223A20302C0D0A2020202020202020227A496E646578223A202D310D0A2020202020207D2C0D0A202020202020227374796C6573223A207B0D0A20202020202020202266696C74657253686F77223A2066616C73652C0D0A202020202020202022687565526F74617465223A20302C0D0A2020202020202020227361747572617465223A20312C0D0A202020202020202022636F6E7472617374223A20312C0D0A2020202020202020226272696768746E657373223A20312C0D0A2020202020202020226F706163697479223A20312C0D0A202020202020202022726F746174655A223A20302C0D0A202020202020202022726F7461746558223A20302C0D0A202020202020202022726F7461746559223A20302C0D0A202020202020202022736B657758223A20302C0D0A202020202020202022736B657759223A20302C0D0A202020202020202022626C656E644D6F6465223A20226E6F726D616C222C0D0A202020202020202022616E696D6174696F6E73223A205B5D0D0A2020202020207D2C0D0A2020202020202270726576696577223A207B0D0A2020202020202020226F766572466C6F7748696464656E223A2066616C73650D0A2020202020207D2C0D0A20202020202022737461747573223A207B0D0A2020202020202020226C6F636B223A2066616C73652C0D0A20202020202020202268696465223A2066616C73650D0A2020202020207D2C0D0A2020202020202272657175657374223A207B0D0A202020202020202022726571756573744461746154797065223A20302C0D0A202020202020202022726571756573744874747054797065223A2022676574222C0D0A2020202020202020227265717565737455726C223A2022222C0D0A20202020202020202272657175657374496E74657276616C223A206E756C6C2C0D0A20202020202020202272657175657374496E74657276616C556E6974223A20227365636F6E64222C0D0A20202020202020202272657175657374436F6E74656E7454797065223A20302C0D0A20202020202020202272657175657374506172616D73426F647954797065223A20226E6F6E65222C0D0A2020202020202020227265717565737453514C436F6E74656E74223A207B0D0A202020202020202020202273716C223A202273656C656374202A2066726F6D20207768657265220D0A20202020202020207D2C0D0A20202020202020202272657175657374506172616D73223A207B0D0A2020202020202020202022426F6479223A207B0D0A20202020202020202020202022666F726D2D64617461223A207B7D2C0D0A20202020202020202020202022782D7777772D666F726D2D75726C656E636F646564223A207B7D2C0D0A202020202020202020202020226A736F6E223A2022222C0D0A20202020202020202020202022786D6C223A2022220D0A202020202020202020207D2C0D0A2020202020202020202022486561646572223A207B7D2C0D0A2020202020202020202022506172616D73223A207B7D0D0A20202020202020207D0D0A2020202020207D2C0D0A2020202020202266696C746572223A206E756C6C2C0D0A202020202020226576656E7473223A207B0D0A202020202020202022626173654576656E74223A207B0D0A2020202020202020202022636C69636B223A206E756C6C2C0D0A202020202020202020202264626C636C69636B223A206E756C6C2C0D0A20202020202020202020226D6F757365656E746572223A206E756C6C2C0D0A20202020202020202020226D6F7573656C65617665223A206E756C6C0D0A20202020202020207D2C0D0A202020202020202022616476616E6365644576656E7473223A207B0D0A2020202020202020202022766E6F64654D6F756E746564223A206E756C6C2C0D0A2020202020202020202022766E6F64654265666F72654D6F756E74223A206E756C6C0D0A20202020202020207D2C0D0A202020202020202022696E7465726163744576656E7473223A205B5D0D0A2020202020207D2C0D0A202020202020226B6579223A202243617073756C654368617274222C0D0A202020202020226368617274436F6E666967223A207B0D0A2020202020202020226B6579223A202243617073756C654368617274222C0D0A20202020202020202263686172744B6579223A20225643617073756C654368617274222C0D0A202020202020202022636F6E4B6579223A2022564343617073756C654368617274222C0D0A2020202020202020227469746C65223A2022E883B6E59B8AE69FB1E59BBE222C0D0A20202020202020202263617465676F7279223A202242617273222C0D0A20202020202020202263617465676F72794E616D65223A2022E69FB1E78AB6E59BBE222C0D0A2020202020202020227061636B616765223A2022436861727473222C0D0A20202020202020202263686172744672616D65223A2022636F6D6D6F6E222C0D0A202020202020202022696D616765223A202263617073756C652E706E67220D0A2020202020207D2C0D0A202020202020226F7074696F6E223A207B0D0A20202020202020202264617461736574223A207B0D0A202020202020202020202264696D656E73696F6E73223A205B0D0A202020202020202020202020226E616D65222C0D0A2020202020202020202020202276616C7565220D0A202020202020202020205D2C0D0A2020202020202020202022736F75726365223A205B0D0A2020202020202020202020207B0D0A2020202020202020202020202020226E616D65223A2022E6B8A9E5BAA6E4BCA0E6849FE599A8222C0D0A20202020202020202020202020202276616C7565223A20300D0A2020202020202020202020207D2C0D0A2020202020202020202020207B0D0A2020202020202020202020202020226E616D65223A2022E6B6B2E4BD8DE4BCA0E6849FE599A8222C0D0A20202020202020202020202020202276616C7565223A20300D0A2020202020202020202020207D2C0D0A2020202020202020202020207B0D0A2020202020202020202020202020226E616D65223A2022E58E8BE58A9BE4BCA0E6849FE599A8222C0D0A20202020202020202020202020202276616C7565223A2031320D0A2020202020202020202020207D2C0D0A2020202020202020202020207B0D0A2020202020202020202020202020226E616D65223A2022E58FAFE78783E6B094E4BD93E68AA5E8ADA6E8AEBEE5A487222C0D0A20202020202020202020202020202276616C7565223A20360D0A2020202020202020202020207D2C0D0A2020202020202020202020207B0D0A2020202020202020202020202020226E616D65223A2022E69C89E6AF92E6B094E4BD93E68AA5E8ADA6E8AEBEE5A487222C0D0A20202020202020202020202020202276616C7565223A20340D0A2020202020202020202020207D0D0A202020202020202020205D0D0A20202020202020207D2C0D0A202020202020202022636F6C6F7273223A205B0D0A2020202020202020202022234245424645464646222C0D0A202020202020202020202223366265366331222C0D0A2020202020202020202022234431453641304646222C0D0A2020202020202020202022234538424639364646222C0D0A202020202020202020202223336662316533220D0A20202020202020205D2C0D0A202020202020202022756E6974223A2022E4B8AA222C0D0A2020202020202020226974656D486569676874223A2031302C0D0A20202020202020202276616C7565466F6E7453697A65223A2031362C0D0A20202020202020202270616464696E675269676874223A2035302C0D0A20202020202020202270616464696E674C656674223A2032352C0D0A20202020202020202273686F7756616C7565223A20747275650D0A2020202020207D0D0A202020207D2C0D0A202020207B0D0A202020202020226964223A2022356C34716770336F707667303030222C0D0A20202020202022697347726F7570223A2066616C73652C0D0A2020202020202261747472223A207B0D0A20202020202020202278223A20312E352C0D0A20202020202020202279223A203735302C0D0A20202020202020202277223A203536302C0D0A20202020202020202268223A203331302C0D0A2020202020202020226F666673657458223A20302C0D0A2020202020202020226F666673657459223A20302C0D0A2020202020202020227A496E646578223A202D310D0A2020202020207D2C0D0A202020202020227374796C6573223A207B0D0A20202020202020202266696C74657253686F77223A2066616C73652C0D0A202020202020202022687565526F74617465223A20302C0D0A2020202020202020227361747572617465223A20312C0D0A202020202020202022636F6E7472617374223A20312C0D0A2020202020202020226272696768746E657373223A20312C0D0A2020202020202020226F706163697479223A20312C0D0A202020202020202022726F746174655A223A20302C0D0A202020202020202022726F7461746558223A20302C0D0A202020202020202022726F7461746559223A20302C0D0A202020202020202022736B657758223A20302C0D0A202020202020202022736B657759223A20302C0D0A202020202020202022626C656E644D6F6465223A20226E6F726D616C222C0D0A202020202020202022616E696D6174696F6E73223A205B5D0D0A2020202020207D2C0D0A2020202020202270726576696577223A207B0D0A2020202020202020226F766572466C6F7748696464656E223A2066616C73650D0A2020202020207D2C0D0A20202020202022737461747573223A207B0D0A2020202020202020226C6F636B223A2066616C73652C0D0A20202020202020202268696465223A2066616C73650D0A2020202020207D2C0D0A2020202020202272657175657374223A207B0D0A202020202020202022726571756573744461746154797065223A20302C0D0A202020202020202022726571756573744874747054797065223A2022676574222C0D0A2020202020202020227265717565737455726C223A2022222C0D0A20202020202020202272657175657374496E74657276616C223A206E756C6C2C0D0A20202020202020202272657175657374496E74657276616C556E6974223A20227365636F6E64222C0D0A20202020202020202272657175657374436F6E74656E7454797065223A20302C0D0A20202020202020202272657175657374506172616D73426F647954797065223A20226E6F6E65222C0D0A2020202020202020227265717565737453514C436F6E74656E74223A207B0D0A202020202020202020202273716C223A202273656C656374202A2066726F6D20207768657265220D0A20202020202020207D2C0D0A20202020202020202272657175657374506172616D73223A207B0D0A2020202020202020202022426F6479223A207B0D0A20202020202020202020202022666F726D2D64617461223A207B7D2C0D0A20202020202020202020202022782D7777772D666F726D2D75726C656E636F646564223A207B7D2C0D0A202020202020202020202020226A736F6E223A2022222C0D0A20202020202020202020202022786D6C223A2022220D0A202020202020202020207D2C0D0A2020202020202020202022486561646572223A207B7D2C0D0A2020202020202020202022506172616D73223A207B7D0D0A20202020202020207D0D0A2020202020207D2C0D0A2020202020202266696C746572223A206E756C6C2C0D0A202020202020226576656E7473223A207B0D0A202020202020202022626173654576656E74223A207B0D0A2020202020202020202022636C69636B223A206E756C6C2C0D0A202020202020202020202264626C636C69636B223A206E756C6C2C0D0A20202020202020202020226D6F757365656E746572223A206E756C6C2C0D0A20202020202020202020226D6F7573656C65617665223A206E756C6C0D0A20202020202020207D2C0D0A202020202020202022616476616E6365644576656E7473223A207B0D0A2020202020202020202022766E6F64654D6F756E746564223A206E756C6C2C0D0A2020202020202020202022766E6F64654265666F72654D6F756E74223A206E756C6C0D0A20202020202020207D2C0D0A202020202020202022696E7465726163744576656E7473223A205B5D0D0A2020202020207D2C0D0A202020202020226B6579223A2022426F726465723032222C0D0A202020202020226368617274436F6E666967223A207B0D0A2020202020202020226B6579223A2022426F726465723032222C0D0A20202020202020202263686172744B6579223A202256426F726465723032222C0D0A202020202020202022636F6E4B6579223A20225643426F726465723032222C0D0A2020202020202020227469746C65223A2022E8BEB9E6A1862D3032222C0D0A20202020202020202263617465676F7279223A2022426F7264657273222C0D0A20202020202020202263617465676F72794E616D65223A2022E8BEB9E6A186222C0D0A2020202020202020227061636B616765223A20224465636F7261746573222C0D0A20202020202020202263686172744672616D65223A2022737461746963222C0D0A202020202020202022696D616765223A2022626F7264657230322E706E67220D0A2020202020207D2C0D0A202020202020226F7074696F6E223A207B0D0A202020202020202022636F6C6F7273223A205B0D0A202020202020202020202223363538366563222C0D0A202020202020202020202223326366376665220D0A20202020202020205D2C0D0A2020202020202020226261636B67726F756E64436F6C6F72223A2022233030303030303030220D0A2020202020207D0D0A202020207D2C0D0A202020207B0D0A202020202020226964223A20223476727570397534723775303030222C0D0A20202020202022697347726F7570223A2066616C73652C0D0A2020202020202261747472223A207B0D0A20202020202020202278223A2033312C0D0A20202020202020202279223A203739352C0D0A20202020202020202277223A203531342C0D0A20202020202020202268223A203234352C0D0A2020202020202020226F666673657458223A20302C0D0A2020202020202020226F666673657459223A20302C0D0A2020202020202020227A496E646578223A202D310D0A2020202020207D2C0D0A202020202020227374796C6573223A207B0D0A20202020202020202266696C74657253686F77223A2066616C73652C0D0A202020202020202022687565526F74617465223A20302C0D0A2020202020202020227361747572617465223A20312C0D0A202020202020202022636F6E7472617374223A20312C0D0A2020202020202020226272696768746E657373223A20312C0D0A2020202020202020226F706163697479223A20312C0D0A202020202020202022726F746174655A223A20302C0D0A202020202020202022726F7461746558223A20302C0D0A202020202020202022726F7461746559223A20302C0D0A202020202020202022736B657758223A20302C0D0A202020202020202022736B657759223A20302C0D0A202020202020202022626C656E644D6F6465223A20226E6F726D616C222C0D0A202020202020202022616E696D6174696F6E73223A205B5D0D0A2020202020207D2C0D0A2020202020202270726576696577223A207B0D0A2020202020202020226F766572466C6F7748696464656E223A2066616C73650D0A2020202020207D2C0D0A20202020202022737461747573223A207B0D0A2020202020202020226C6F636B223A2066616C73652C0D0A20202020202020202268696465223A2066616C73650D0A2020202020207D2C0D0A2020202020202272657175657374223A207B0D0A202020202020202022726571756573744461746154797065223A20302C0D0A202020202020202022726571756573744874747054797065223A2022676574222C0D0A2020202020202020227265717565737455726C223A20222F696F742F6465766963654C6F672F6C697374222C0D0A20202020202020202272657175657374496E74657276616C223A206E756C6C2C0D0A20202020202020202272657175657374496E74657276616C556E6974223A20227365636F6E64222C0D0A20202020202020202272657175657374436F6E74656E7454797065223A20302C0D0A20202020202020202272657175657374506172616D73426F647954797065223A2022782D7777772D666F726D2D75726C656E636F646564222C0D0A2020202020202020227265717565737453514C436F6E74656E74223A207B0D0A202020202020202020202273716C223A202273656C656374202A2066726F6D20207768657265220D0A20202020202020207D2C0D0A20202020202020202272657175657374506172616D73223A207B0D0A2020202020202020202022426F6479223A207B0D0A20202020202020202020202022666F726D2D64617461223A207B7D2C0D0A20202020202020202020202022782D7777772D666F726D2D75726C656E636F646564223A207B0D0A202020202020202020202020202022706167654E756D223A202231222C0D0A2020202020202020202020202020227061676553697A65223A20223230220D0A2020202020202020202020207D2C0D0A202020202020202020202020226A736F6E223A2022222C0D0A20202020202020202020202022786D6C223A2022220D0A202020202020202020207D2C0D0A2020202020202020202022486561646572223A207B7D2C0D0A2020202020202020202022506172616D73223A207B7D0D0A20202020202020207D0D0A2020202020207D2C0D0A2020202020202266696C746572223A202272657475726E207265732E726F77732E6D6170286974656D203D3E20285B6974656D2E73657269616C4E756D6265722C206974656D2E6C6F6756616C75652C206974656D2E63726561746554696D652C2027E5B19EE680A7E4B88AE68AA5275D2929222C0D0A202020202020226576656E7473223A207B0D0A202020202020202022626173654576656E74223A207B0D0A2020202020202020202022636C69636B223A206E756C6C2C0D0A202020202020202020202264626C636C69636B223A206E756C6C2C0D0A20202020202020202020226D6F757365656E746572223A206E756C6C2C0D0A20202020202020202020226D6F7573656C65617665223A206E756C6C0D0A20202020202020207D2C0D0A202020202020202022616476616E6365644576656E7473223A207B0D0A2020202020202020202022766E6F64654D6F756E746564223A206E756C6C2C0D0A2020202020202020202022766E6F64654265666F72654D6F756E74223A206E756C6C0D0A20202020202020207D2C0D0A202020202020202022696E7465726163744576656E7473223A205B5D0D0A2020202020207D2C0D0A202020202020226B6579223A20225461626C655363726F6C6C426F617264222C0D0A202020202020226368617274436F6E666967223A207B0D0A2020202020202020226B6579223A20225461626C655363726F6C6C426F617264222C0D0A20202020202020202263686172744B6579223A2022565461626C655363726F6C6C426F617264222C0D0A202020202020202022636F6E4B6579223A202256435461626C655363726F6C6C426F617264222C0D0A2020202020202020227469746C65223A2022E8BDAEE692ADE58897E8A1A8222C0D0A20202020202020202263617465676F7279223A20225461626C6573222C0D0A20202020202020202263617465676F72794E616D65223A2022E8A1A8E6A0BC222C0D0A2020202020202020227061636B616765223A20225461626C6573222C0D0A20202020202020202263686172744672616D65223A2022636F6D6D6F6E222C0D0A202020202020202022696D616765223A20227461626C655F7363726F6C6C626F6172642E706E67220D0A2020202020207D2C0D0A202020202020226F7074696F6E223A207B0D0A202020202020202022686561646572223A205B0D0A2020202020202020202022E68AA5E8ADA6E8AEBEE5A487222C0D0A2020202020202020202022E68AA5E8ADA6E6B593E5BAA6222C0D0A2020202020202020202022E68AA5E8ADA6E697B6E997B4222C0D0A2020202020202020202022E68AA5E8ADA6E7B1BBE59E8B220D0A20202020202020205D2C0D0A20202020202020202264617461736574223A205B0D0A202020202020202020205B0D0A202020202020202020202020225858E7AB99303031E59BBAE5AE9AE5BC8FE794B2E783B7E6B593E5BAA6E68AA5E8ADA6222C0D0A202020202020202020202020223230313570706D222C0D0A20202020202020202020202022323032342D30342D32362031383A30373A3235222C0D0A20202020202020202020202022E6B593E5BAA6E68AA5E8ADA6220D0A202020202020202020205D2C0D0A202020202020202020205B0D0A202020202020202020202020225858E7AB99303033E4BA91E58FB0E5BC8FE6BF80E58589E794B2E783B7E6A380E6B58BE4BBAA222C0D0A202020202020202020202020223532313170706D222C0D0A20202020202020202020202022323032342D30342D32352030383A32373A3135222C0D0A20202020202020202020202022E69585E99A9CE68AA5E8ADA6220D0A202020202020202020205D2C0D0A202020202020202020205B0D0A202020202020202020202020225858E7AB99303033E4BA91E58FB0E5BC8FE6BF80E58589E794B2E783B7E6A380E6B58BE4BBAA222C0D0A202020202020202020202020223433323670706D222C0D0A20202020202020202020202022323032342D30342D32342031353A34323A3035222C0D0A20202020202020202020202022E69585E99A9CE68AA5E8ADA6220D0A202020202020202020205D2C0D0A202020202020202020205B0D0A202020202020202020202020225858E7AB99303031E59BBAE5AE9AE5BC8FE794B2E783B7E6B593E5BAA6E68AA5E8ADA6222C0D0A202020202020202020202020223135313770706D222C0D0A20202020202020202020202022323032342D30342D32332031303A32303A3436222C0D0A20202020202020202020202022E6B593E5BAA6E68AA5E8ADA6220D0A202020202020202020205D2C0D0A202020202020202020205B0D0A202020202020202020202020225858E7AB99303031E59BBAE5AE9AE5BC8FE794B2E783B7E6B593E5BAA6E68AA5E8ADA6222C0D0A202020202020202020202020223335323770706D222C0D0A20202020202020202020202022323032342D30342D32332030363A30373A3235222C0D0A20202020202020202020202022E6B593E5BAA6E68AA5E8ADA6220D0A202020202020202020205D2C0D0A202020202020202020205B0D0A202020202020202020202020225858E7AB99303033E59BBAE5AE9AE5BC8FE794B2E783B7E6B593E5BAA6E68AA5E8ADA6222C0D0A202020202020202020202020223233393970706D222C0D0A20202020202020202020202022323032342D30342D32322032333A33333A3537222C0D0A20202020202020202020202022E6B593E5BAA6E68AA5E8ADA6220D0A202020202020202020205D2C0D0A202020202020202020205B0D0A202020202020202020202020225858E7AB99303031E59BBAE5AE9AE5BC8FE794B2E783B7E6B593E5BAA6E68AA5E8ADA6222C0D0A202020202020202020202020223137323370706D222C0D0A20202020202020202020202022323032342D30342D32322031333A33373A3131222C0D0A20202020202020202020202022E6B593E5BAA6E68AA5E8ADA6220D0A202020202020202020205D2C0D0A202020202020202020205B0D0A202020202020202020202020225858E7AB99303032E59BBAE5AE9AE5BC8FE794B2E783B7E6B593E5BAA6E68AA5E8ADA6222C0D0A202020202020202020202020223135373370706D222C0D0A20202020202020202020202022323032342D30342D32312031393A32323A3235222C0D0A20202020202020202020202022E6B593E5BAA6E68AA5E8ADA6220D0A202020202020202020205D2C0D0A202020202020202020205B0D0A202020202020202020202020225858E7AB99303031E59BBAE5AE9AE5BC8FE794B2E783B7E6B593E5BAA6E68AA5E8ADA6222C0D0A202020202020202020202020223138343670706D222C0D0A20202020202020202020202022323032342D30342D32312030353A35323A3133222C0D0A20202020202020202020202022E6B593E5BAA6E68AA5E8ADA6220D0A202020202020202020205D2C0D0A202020202020202020205B0D0A202020202020202020202020225858E7AB99303031E59BBAE5AE9AE5BC8FE794B2E783B7E6B593E5BAA6E68AA5E8ADA6222C0D0A202020202020202020202020223230313570706D222C0D0A20202020202020202020202022323032342D30342D32332031383A30373A3235222C0D0A20202020202020202020202022E6B593E5BAA6E68AA5E8ADA6220D0A202020202020202020205D0D0A20202020202020205D2C0D0A202020202020202022696E646578223A2066616C73652C0D0A202020202020202022636F6C756D6E5769647468223A205B0D0A2020202020202020202022313630222C0D0A2020202020202020202022313230222C0D0A2020202020202020202022313830222C0D0A2020202020202020202022313030220D0A20202020202020205D2C0D0A202020202020202022616C69676E223A205B0D0A2020202020202020202022220D0A20202020202020205D2C0D0A202020202020202022726F774E756D223A20342C0D0A2020202020202020227761697454696D65223A20332C0D0A202020202020202022686561646572486569676874223A2031372C0D0A2020202020202020226361726F7573656C223A202273696E676C65222C0D0A202020202020202022686561646572424743223A2022233030424146463030222C0D0A2020202020202020226F6464526F77424743223A2022233030334235313030222C0D0A2020202020202020226576656E526F77424743223A2022233041323733323030220D0A2020202020207D0D0A202020207D2C0D0A202020207B0D0A202020202020226964223A202231777332357778397A7567773030222C0D0A20202020202022697347726F7570223A2066616C73652C0D0A2020202020202261747472223A207B0D0A20202020202020202278223A2034312C0D0A20202020202020202279223A203735302C0D0A20202020202020202277223A203530302C0D0A20202020202020202268223A2035302C0D0A2020202020202020226F666673657458223A20302C0D0A2020202020202020226F666673657459223A20302C0D0A2020202020202020227A496E646578223A202D310D0A2020202020207D2C0D0A202020202020227374796C6573223A207B0D0A20202020202020202266696C74657253686F77223A2066616C73652C0D0A202020202020202022687565526F74617465223A20302C0D0A2020202020202020227361747572617465223A20312C0D0A202020202020202022636F6E7472617374223A20312C0D0A2020202020202020226272696768746E657373223A20312C0D0A2020202020202020226F706163697479223A20312C0D0A202020202020202022726F746174655A223A20302C0D0A202020202020202022726F7461746558223A20302C0D0A202020202020202022726F7461746559223A20302C0D0A202020202020202022736B657758223A20302C0D0A202020202020202022736B657759223A20302C0D0A202020202020202022626C656E644D6F6465223A20226E6F726D616C222C0D0A202020202020202022616E696D6174696F6E73223A205B5D0D0A2020202020207D2C0D0A2020202020202270726576696577223A207B0D0A2020202020202020226F766572466C6F7748696464656E223A2066616C73650D0A2020202020207D2C0D0A20202020202022737461747573223A207B0D0A2020202020202020226C6F636B223A2066616C73652C0D0A20202020202020202268696465223A2066616C73650D0A2020202020207D2C0D0A2020202020202272657175657374223A207B0D0A202020202020202022726571756573744461746154797065223A20302C0D0A202020202020202022726571756573744874747054797065223A2022676574222C0D0A2020202020202020227265717565737455726C223A2022222C0D0A20202020202020202272657175657374496E74657276616C223A206E756C6C2C0D0A20202020202020202272657175657374496E74657276616C556E6974223A20227365636F6E64222C0D0A20202020202020202272657175657374436F6E74656E7454797065223A20302C0D0A20202020202020202272657175657374506172616D73426F647954797065223A20226E6F6E65222C0D0A2020202020202020227265717565737453514C436F6E74656E74223A207B0D0A202020202020202020202273716C223A202273656C656374202A2066726F6D20207768657265220D0A20202020202020207D2C0D0A20202020202020202272657175657374506172616D73223A207B0D0A2020202020202020202022426F6479223A207B0D0A20202020202020202020202022666F726D2D64617461223A207B7D2C0D0A20202020202020202020202022782D7777772D666F726D2D75726C656E636F646564223A207B7D2C0D0A202020202020202020202020226A736F6E223A2022222C0D0A20202020202020202020202022786D6C223A2022220D0A202020202020202020207D2C0D0A2020202020202020202022486561646572223A207B7D2C0D0A2020202020202020202022506172616D73223A207B7D0D0A20202020202020207D0D0A2020202020207D2C0D0A2020202020202266696C746572223A206E756C6C2C0D0A202020202020226576656E7473223A207B0D0A202020202020202022626173654576656E74223A207B0D0A2020202020202020202022636C69636B223A206E756C6C2C0D0A202020202020202020202264626C636C69636B223A206E756C6C2C0D0A20202020202020202020226D6F757365656E746572223A206E756C6C2C0D0A20202020202020202020226D6F7573656C65617665223A206E756C6C0D0A20202020202020207D2C0D0A202020202020202022616476616E6365644576656E7473223A207B0D0A2020202020202020202022766E6F64654D6F756E746564223A206E756C6C2C0D0A2020202020202020202022766E6F64654265666F72654D6F756E74223A206E756C6C0D0A20202020202020207D2C0D0A202020202020202022696E7465726163744576656E7473223A205B5D0D0A2020202020207D2C0D0A202020202020226B6579223A2022546578744772616469656E74222C0D0A202020202020226368617274436F6E666967223A207B0D0A2020202020202020226B6579223A2022546578744772616469656E74222C0D0A20202020202020202263686172744B6579223A202256546578744772616469656E74222C0D0A202020202020202022636F6E4B6579223A20225643546578744772616469656E74222C0D0A2020202020202020227469746C65223A2022E6B890E58F98E69687E5AD97222C0D0A20202020202020202263617465676F7279223A20225465787473222C0D0A20202020202020202263617465676F72794E616D65223A2022E69687E69CAC222C0D0A2020202020202020227061636B616765223A2022496E666F726D6174696F6E73222C0D0A20202020202020202263686172744672616D65223A20226E616976655549222C0D0A202020202020202022696D616765223A2022746578745F6772616469656E742E706E67220D0A2020202020207D2C0D0A202020202020226F7074696F6E223A207B0D0A20202020202020202264617461736574223A2022E5AE9EE697B6E68AA5E8ADA6222C0D0A20202020202020202273697A65223A2032302C0D0A2020202020202020226772616469656E74223A207B0D0A202020202020202020202266726F6D223A2022233030373246464646222C0D0A2020202020202020202022746F223A2022233030656166664646222C0D0A2020202020202020202022646567223A206E756C6C0D0A20202020202020207D0D0A2020202020207D0D0A202020207D2C0D0A202020207B0D0A202020202020226964223A202269636C32667573756373383030222C0D0A20202020202022697347726F7570223A2066616C73652C0D0A2020202020202261747472223A207B0D0A20202020202020202278223A203136302C0D0A20202020202020202279223A203735322C0D0A20202020202020202277223A2035382C0D0A20202020202020202268223A2035302C0D0A2020202020202020226F666673657458223A20302C0D0A2020202020202020226F666673657459223A20302C0D0A2020202020202020227A496E646578223A202D310D0A2020202020207D2C0D0A202020202020227374796C6573223A207B0D0A20202020202020202266696C74657253686F77223A2066616C73652C0D0A202020202020202022687565526F74617465223A20302C0D0A2020202020202020227361747572617465223A20312C0D0A202020202020202022636F6E7472617374223A20312C0D0A2020202020202020226272696768746E657373223A20312C0D0A2020202020202020226F706163697479223A20312C0D0A202020202020202022726F746174655A223A20302C0D0A202020202020202022726F7461746558223A20302C0D0A202020202020202022726F7461746559223A20302C0D0A202020202020202022736B657758223A20302C0D0A202020202020202022736B657759223A20302C0D0A202020202020202022626C656E644D6F6465223A20226E6F726D616C222C0D0A202020202020202022616E696D6174696F6E73223A205B5D0D0A2020202020207D2C0D0A2020202020202270726576696577223A207B0D0A2020202020202020226F766572466C6F7748696464656E223A2066616C73650D0A2020202020207D2C0D0A20202020202022737461747573223A207B0D0A2020202020202020226C6F636B223A2066616C73652C0D0A20202020202020202268696465223A2066616C73650D0A2020202020207D2C0D0A2020202020202272657175657374223A207B0D0A202020202020202022726571756573744461746154797065223A20302C0D0A202020202020202022726571756573744874747054797065223A2022676574222C0D0A2020202020202020227265717565737455726C223A2022222C0D0A20202020202020202272657175657374496E74657276616C223A206E756C6C2C0D0A20202020202020202272657175657374496E74657276616C556E6974223A20227365636F6E64222C0D0A20202020202020202272657175657374436F6E74656E7454797065223A20302C0D0A20202020202020202272657175657374506172616D73426F647954797065223A20226E6F6E65222C0D0A2020202020202020227265717565737453514C436F6E74656E74223A207B0D0A202020202020202020202273716C223A202273656C656374202A2066726F6D20207768657265220D0A20202020202020207D2C0D0A20202020202020202272657175657374506172616D73223A207B0D0A2020202020202020202022426F6479223A207B0D0A20202020202020202020202022666F726D2D64617461223A207B7D2C0D0A20202020202020202020202022782D7777772D666F726D2D75726C656E636F646564223A207B7D2C0D0A202020202020202020202020226A736F6E223A2022222C0D0A20202020202020202020202022786D6C223A2022220D0A202020202020202020207D2C0D0A2020202020202020202022486561646572223A207B7D2C0D0A2020202020202020202022506172616D73223A207B7D0D0A20202020202020207D0D0A2020202020207D2C0D0A2020202020202266696C746572223A206E756C6C2C0D0A202020202020226576656E7473223A207B0D0A202020202020202022626173654576656E74223A207B0D0A2020202020202020202022636C69636B223A206E756C6C2C0D0A202020202020202020202264626C636C69636B223A206E756C6C2C0D0A20202020202020202020226D6F757365656E746572223A206E756C6C2C0D0A20202020202020202020226D6F7573656C65617665223A206E756C6C0D0A20202020202020207D2C0D0A202020202020202022616476616E6365644576656E7473223A207B0D0A2020202020202020202022766E6F64654D6F756E746564223A206E756C6C2C0D0A2020202020202020202022766E6F64654265666F72654D6F756E74223A206E756C6C0D0A20202020202020207D2C0D0A202020202020202022696E7465726163744576656E7473223A205B5D0D0A2020202020207D2C0D0A202020202020226B6579223A2022496D616765222C0D0A202020202020226368617274436F6E666967223A207B0D0A2020202020202020226B6579223A2022496D616765222C0D0A20202020202020202263686172744B6579223A202256496D616765222C0D0A202020202020202022636F6E4B6579223A20225643496D616765222C0D0A2020202020202020227469746C65223A202277696E646F772D6C6566742E706E67222C0D0A20202020202020202263617465676F7279223A20224D6F726573222C0D0A20202020202020202263617465676F72794E616D65223A2022E69BB4E5A49A222C0D0A2020202020202020227061636B616765223A2022496E666F726D6174696F6E73222C0D0A20202020202020202263686172744672616D65223A2022737461746963222C0D0A202020202020202022696D616765223A202270686F746F2E706E67220D0A2020202020207D2C0D0A202020202020226F7074696F6E223A207B0D0A20202020202020202264617461736574223A2022646174613A696D6167652F706E673B6261736536342C6956424F5277304B47676F414141414E535568455567414141446F414141414F434159414141422B55412B544141414141584E535230494172733463365141414141526E51553142414143786A777638595155414141414A6345685A6377414144734D414141374441636476714751414141415A6445565964464E765A6E523359584A6C4145466B62324A6C49456C745957646C556D56685A486C7879575538414141444A6D6C555748525954557736593239744C6D466B62324A6C4C6E68746341414141414141504439346347466A6132563049474A6C5A326C7550534C767537386949476C6B50534A584E553077545842445A576870534870795A564E36546C526A656D746A4F575169507A34675048673665473177625756305953423462577875637A703450534A685A4739695A547075637A70745A5852684C7949676544703462584230617A306951575276596D55675745315149454E76636D55674E5334324C574D784E4449674E7A6B754D5459774F5449304C4341794D4445334C7A41334C7A457A4C5441784F6A41324F6A4D3549434167494341674943416950694138636D526D4F6C4A455269423462577875637A70795A475939496D6830644841364C79393364336375647A4D7562334A6E4C7A45354F546B764D4449764D6A4974636D526D4C584E35626E52686543317563794D6950694138636D526D4F6B526C63324E79615842306157397549484A6B5A6A7068596D3931644430694969423462577875637A703462584139496D6830644841364C793975637935685A4739695A53356A62323076654746774C7A45754D433869494868746247357A4F6E68746345314E50534A6F644852774F693876626E4D7559575276596D5575593239744C336868634338784C6A4176625730764969423462577875637A707A64464A6C5A6A30696148523063446F764C32357A4C6D466B62324A6C4C6D4E7662533934595841764D5334774C334E556558426C4C314A6C63323931636D4E6C556D566D49794967654731774F6B4E795A57463062334A556232397350534A425A4739695A5342516147393062334E6F6233416751304D674D6A41784F43416F56326C755A47393363796B69494868746345314E4F6B6C7563335268626D4E6C53555139496E68746343357061575136525456434F4455344E7A59354F4463344D544646517A6C44524556454E6A684451544A444D545533526A6B69494868746345314E4F6B5276593356745A57353053555139496E68746343356B61575136525456434F4455344E7A63354F4463344D544646517A6C44524556454E6A684451544A444D545533526A6B695069413865473177545530365247567961585A6C5A455A7962323067633352535A5759366157357A644746755932564A52443069654731774C6D6C705A4470464E5549344E5467334E446B344E7A67784D5556444F554E45525551324F454E424D6B4D784E5464474F534967633352535A5759365A47396A6457316C626E524A52443069654731774C6D52705A4470464E5549344E5467334E546B344E7A67784D5556444F554E45525551324F454E424D6B4D784E5464474F534976506941384C334A6B5A6A70455A584E6A636D6C7764476C76626A3467504339795A475936556B5247506941384C336736654731776257563059543467504439346347466A61325630494756755A4430696369492F507468654D364D4141414A4A535552425645684C335A65376178564247456333786B654D67695959785342713142524A53436B534549786C554C437831734A4B4F2F3846473745577863375378733455615A4A4343306D587142424642434671464879622B445A367A70714263585A3253657639775748765A4F374F374A6D353935756274714E583768566B4D3379466E7A59793659456C2B46793271746B4633762B366246577A4739624130374A567A52376F67706D795663302B47494A625A617561506A674F6C3874574A75313978383532634E304B58722F424D73545A42507568477A37434434686A2F776A30776A744946324D6A6E41444865417676496335364F41504434506776495534375849496A3447492B6844687463414E4F676E5064686B6F5564526464375132516B3158734E3279426E4B79767657636E354751642F774F343675354D4B76734C5873456744454171363979503444416367707A734E4C696A6F3543565664537244396F6B7577684E736F6F3079647057726B37572F6864514A2F73472F493756795472654A4E544B426C485430724B7871476C5A325654552F472B797A6A554849566C5A6858494A78347A397566643858376E61742B377679332F79425677632B3132734E4235564669483750647253664149587A347271735A50477858514F34344B6D636546386A796D50747079457834573735613635656B457178463363432F592F67544267794859344344376B4C4479444F44746744467967752F4141346E6A2F616569454F7A414663627A2F496D79444362674B63547A7A623849424749647A734A794B726C625372455A79487549455363394F4A6539446E43447063796A70527A424F6B46516D535071734955477948344A6B2B656D4D52567457306754526C705930696C70646D79536476456E532F695A4A713136547048382F425857532F675338414857537A6E73646C50533363455853654C78592F527A4D4D70354B47717666577244457035496D5645654C546970706E4E543350496455306A692F56645A2F434E4C435935526141437631745A56326D7366674D357948696D5252464D556635724D614766365150557341414141415355564F524B35435949493D222C0D0A202020202020202022666974223A20226E6F6E65222C0D0A202020202020202022626F72646572526164697573223A2031300D0A2020202020207D0D0A202020207D2C0D0A202020207B0D0A202020202020226964223A202270763662376B35326D6C633030222C0D0A20202020202022697347726F7570223A2066616C73652C0D0A2020202020202261747472223A207B0D0A20202020202020202278223A203336302C0D0A20202020202020202279223A203735322C0D0A20202020202020202277223A2035382C0D0A20202020202020202268223A2035302C0D0A2020202020202020226F666673657458223A20302C0D0A2020202020202020226F666673657459223A20302C0D0A2020202020202020227A496E646578223A202D310D0A2020202020207D2C0D0A202020202020227374796C6573223A207B0D0A20202020202020202266696C74657253686F77223A2066616C73652C0D0A202020202020202022687565526F74617465223A20302C0D0A2020202020202020227361747572617465223A20312C0D0A202020202020202022636F6E7472617374223A20312C0D0A2020202020202020226272696768746E657373223A20312C0D0A2020202020202020226F706163697479223A20312C0D0A202020202020202022726F746174655A223A20302C0D0A202020202020202022726F7461746558223A20302C0D0A202020202020202022726F7461746559223A20302C0D0A202020202020202022736B657758223A20302C0D0A202020202020202022736B657759223A20302C0D0A202020202020202022626C656E644D6F6465223A20226E6F726D616C222C0D0A202020202020202022616E696D6174696F6E73223A205B5D0D0A2020202020207D2C0D0A2020202020202270726576696577223A207B0D0A2020202020202020226F766572466C6F7748696464656E223A2066616C73650D0A2020202020207D2C0D0A20202020202022737461747573223A207B0D0A2020202020202020226C6F636B223A2066616C73652C0D0A20202020202020202268696465223A2066616C73650D0A2020202020207D2C0D0A2020202020202272657175657374223A207B0D0A202020202020202022726571756573744461746154797065223A20302C0D0A202020202020202022726571756573744874747054797065223A2022676574222C0D0A2020202020202020227265717565737455726C223A2022222C0D0A20202020202020202272657175657374496E74657276616C223A206E756C6C2C0D0A20202020202020202272657175657374496E74657276616C556E6974223A20227365636F6E64222C0D0A20202020202020202272657175657374436F6E74656E7454797065223A20302C0D0A20202020202020202272657175657374506172616D73426F647954797065223A20226E6F6E65222C0D0A2020202020202020227265717565737453514C436F6E74656E74223A207B0D0A202020202020202020202273716C223A202273656C656374202A2066726F6D20207768657265220D0A20202020202020207D2C0D0A20202020202020202272657175657374506172616D73223A207B0D0A2020202020202020202022426F6479223A207B0D0A20202020202020202020202022666F726D2D64617461223A207B7D2C0D0A20202020202020202020202022782D7777772D666F726D2D75726C656E636F646564223A207B7D2C0D0A202020202020202020202020226A736F6E223A2022222C0D0A20202020202020202020202022786D6C223A2022220D0A202020202020202020207D2C0D0A2020202020202020202022486561646572223A207B7D2C0D0A2020202020202020202022506172616D73223A207B7D0D0A20202020202020207D0D0A2020202020207D2C0D0A2020202020202266696C746572223A206E756C6C2C0D0A202020202020226576656E7473223A207B0D0A202020202020202022626173654576656E74223A207B0D0A2020202020202020202022636C69636B223A206E756C6C2C0D0A202020202020202020202264626C636C69636B223A206E756C6C2C0D0A20202020202020202020226D6F757365656E746572223A206E756C6C2C0D0A20202020202020202020226D6F7573656C65617665223A206E756C6C0D0A20202020202020207D2C0D0A202020202020202022616476616E6365644576656E7473223A207B0D0A2020202020202020202022766E6F64654D6F756E746564223A206E756C6C2C0D0A2020202020202020202022766E6F64654265666F72654D6F756E74223A206E756C6C0D0A20202020202020207D2C0D0A202020202020202022696E7465726163744576656E7473223A205B5D0D0A2020202020207D2C0D0A202020202020226B6579223A2022496D616765222C0D0A202020202020226368617274436F6E666967223A207B0D0A2020202020202020226B6579223A2022496D616765222C0D0A20202020202020202263686172744B6579223A202256496D616765222C0D0A202020202020202022636F6E4B6579223A20225643496D616765222C0D0A2020202020202020227469746C65223A202277696E646F772D72696768742E706E67222C0D0A20202020202020202263617465676F7279223A20224D6F726573222C0D0A20202020202020202263617465676F72794E616D65223A2022E69BB4E5A49A222C0D0A2020202020202020227061636B616765223A2022496E666F726D6174696F6E73222C0D0A20202020202020202263686172744672616D65223A2022737461746963222C0D0A202020202020202022696D616765223A202270686F746F2E706E67220D0A2020202020207D2C0D0A202020202020226F7074696F6E223A207B0D0A20202020202020202264617461736574223A2022646174613A696D6167652F706E673B6261736536342C6956424F5277304B47676F414141414E535568455567414141446F414141414F434159414141422B55412B544141414141584E535230494172733463365141414141526E51553142414143786A777638595155414141414A6345685A6377414144734D414141374441636476714751414141415A6445565964464E765A6E523359584A6C4145466B62324A6C49456C745957646C556D56685A486C7879575538414141444A6D6C555748525954557736593239744C6D466B62324A6C4C6E68746341414141414141504439346347466A6132563049474A6C5A326C7550534C767537386949476C6B50534A584E553077545842445A576870534870795A564E36546C526A656D746A4F575169507A34675048673665473177625756305953423462577875637A703450534A685A4739695A547075637A70745A5852684C7949676544703462584230617A306951575276596D55675745315149454E76636D55674E5334324C574D784E4449674E7A6B754D5459774F5449304C4341794D4445334C7A41334C7A457A4C5441784F6A41324F6A4D3549434167494341674943416950694138636D526D4F6C4A455269423462577875637A70795A475939496D6830644841364C79393364336375647A4D7562334A6E4C7A45354F546B764D4449764D6A4974636D526D4C584E35626E52686543317563794D6950694138636D526D4F6B526C63324E79615842306157397549484A6B5A6A7068596D3931644430694969423462577875637A703462584139496D6830644841364C793975637935685A4739695A53356A62323076654746774C7A45754D433869494868746247357A4F6E68746345314E50534A6F644852774F693876626E4D7559575276596D5575593239744C336868634338784C6A4176625730764969423462577875637A707A64464A6C5A6A30696148523063446F764C32357A4C6D466B62324A6C4C6D4E7662533934595841764D5334774C334E556558426C4C314A6C63323931636D4E6C556D566D49794967654731774F6B4E795A57463062334A556232397350534A425A4739695A5342516147393062334E6F6233416751304D674D6A41784F43416F56326C755A47393363796B69494868746345314E4F6B6C7563335268626D4E6C53555139496E68746343357061575136525456434F4455344E7A59354F4463344D544646517A6C44524556454E6A684451544A444D545533526A6B69494868746345314E4F6B5276593356745A57353053555139496E68746343356B61575136525456434F4455344E7A63354F4463344D544646517A6C44524556454E6A684451544A444D545533526A6B695069413865473177545530365247567961585A6C5A455A7962323067633352535A5759366157357A644746755932564A52443069654731774C6D6C705A4470464E5549344E5467334E446B344E7A67784D5556444F554E45525551324F454E424D6B4D784E5464474F534967633352535A5759365A47396A6457316C626E524A52443069654731774C6D52705A4470464E5549344E5467334E546B344E7A67784D5556444F554E45525551324F454E424D6B4D784E5464474F534976506941384C334A6B5A6A70455A584E6A636D6C7764476C76626A3467504339795A475936556B5247506941384C336736654731776257563059543467504439346347466A61325630494756755A4430696369492F507468654D364D4141414A4B535552425645684C335A5A4A6A307852474543374E646F515177774A516D6A4467684153455A45676867564A73374F777453456B666F414E652F75324A78462F51466A5A32474A446843446D65577A536874616D6331373131376D2B3930784C645A4B547176747576654738717478366E5A76374C6E66386774463446452F684254636B4F6E45664F6E664A4451317377526434705272565759486638476F31716A4D50782B4F4E616C526E436B37474239576F7A6C69636750326A716D4564492F74774E7835426F306F6348384265334974646D4E6D4B4733456265734B4D6B657477445271544D58496C4C73474A626B67597551686E59744F383535794F686E5933685270354448666954647944337A4749794F336F7433555976324B4A6B527677505A37417A3167536B57342F69782B784A434939723738596A314D536B5849583833784565713176635443485275514F4E4849584768506B794550344445764B794F5034484574795A4E342F522B6239632B547231747352636D523145387251746F32554347337253444655492F4957356B694A794A6659464F6E7161755148624970636A6B594F5956506B585079625343502B4F564B4D64486D2F5834316142357A616576735454345A6658523339544F594E6570466A634A49624567506F655679646D316249542B693831394F30416E75446E42656A4D733746764C2F4F476C30397666743950592B65594250367A5A3744387135645179396D4C6135482F33786659664155332B46535849615030666967487A33655175775A4870667A2F6849637A38485A4F49682B4D344768486E386165714F397164363877456A33475966643641317A50454B4579703969722B4E2F4731754753747647356C42707939696D55436C6A562B4E4A4C436C6A585333506F43634D79746A466542484C70366379646A3536764338596C4C477A38424561474F52593335667A4F58626F64772F316368425034353171564D664852422F496231656A4F717651433735586A656F73514338715676334D445052694831616A4F6A3748756F726E76385041465A6A394F775A2B414E6B2B44396F684E366E584141414141456C46546B5375516D4343222C0D0A202020202020202022666974223A2022636F6E7461696E222C0D0A202020202020202022626F72646572526164697573223A2031300D0A2020202020207D0D0A202020207D2C0D0A202020207B0D0A202020202020226964223A2022356A653861396761667567303030222C0D0A20202020202022697347726F7570223A2066616C73652C0D0A2020202020202261747472223A207B0D0A20202020202020202278223A20313334302C0D0A20202020202020202279223A203734352C0D0A20202020202020202277223A203538302C0D0A20202020202020202268223A203331302C0D0A2020202020202020226F666673657458223A20302C0D0A2020202020202020226F666673657459223A20302C0D0A2020202020202020227A496E646578223A202D310D0A2020202020207D2C0D0A202020202020227374796C6573223A207B0D0A20202020202020202266696C74657253686F77223A2066616C73652C0D0A202020202020202022687565526F74617465223A20302C0D0A2020202020202020227361747572617465223A20312C0D0A202020202020202022636F6E7472617374223A20312C0D0A2020202020202020226272696768746E657373223A20312C0D0A2020202020202020226F706163697479223A20312C0D0A202020202020202022726F746174655A223A20302C0D0A202020202020202022726F7461746558223A20302C0D0A202020202020202022726F7461746559223A20302C0D0A202020202020202022736B657758223A20302C0D0A202020202020202022736B657759223A20302C0D0A202020202020202022626C656E644D6F6465223A20226E6F726D616C222C0D0A202020202020202022616E696D6174696F6E73223A205B5D0D0A2020202020207D2C0D0A2020202020202270726576696577223A207B0D0A2020202020202020226F766572466C6F7748696464656E223A2066616C73650D0A2020202020207D2C0D0A20202020202022737461747573223A207B0D0A2020202020202020226C6F636B223A2066616C73652C0D0A20202020202020202268696465223A2066616C73650D0A2020202020207D2C0D0A2020202020202272657175657374223A207B0D0A202020202020202022726571756573744461746154797065223A20302C0D0A202020202020202022726571756573744874747054797065223A2022676574222C0D0A2020202020202020227265717565737455726C223A2022222C0D0A20202020202020202272657175657374496E74657276616C223A206E756C6C2C0D0A20202020202020202272657175657374496E74657276616C556E6974223A20227365636F6E64222C0D0A20202020202020202272657175657374436F6E74656E7454797065223A20302C0D0A20202020202020202272657175657374506172616D73426F647954797065223A20226E6F6E65222C0D0A2020202020202020227265717565737453514C436F6E74656E74223A207B0D0A202020202020202020202273716C223A202273656C656374202A2066726F6D20207768657265220D0A20202020202020207D2C0D0A20202020202020202272657175657374506172616D73223A207B0D0A2020202020202020202022426F6479223A207B0D0A20202020202020202020202022666F726D2D64617461223A207B7D2C0D0A20202020202020202020202022782D7777772D666F726D2D75726C656E636F646564223A207B7D2C0D0A202020202020202020202020226A736F6E223A2022222C0D0A20202020202020202020202022786D6C223A2022220D0A202020202020202020207D2C0D0A2020202020202020202022486561646572223A207B7D2C0D0A2020202020202020202022506172616D73223A207B7D0D0A20202020202020207D0D0A2020202020207D2C0D0A2020202020202266696C746572223A206E756C6C2C0D0A202020202020226576656E7473223A207B0D0A202020202020202022626173654576656E74223A207B0D0A2020202020202020202022636C69636B223A206E756C6C2C0D0A202020202020202020202264626C636C69636B223A206E756C6C2C0D0A20202020202020202020226D6F757365656E746572223A206E756C6C2C0D0A20202020202020202020226D6F7573656C65617665223A206E756C6C0D0A20202020202020207D2C0D0A202020202020202022616476616E6365644576656E7473223A207B0D0A2020202020202020202022766E6F64654D6F756E746564223A206E756C6C2C0D0A2020202020202020202022766E6F64654265666F72654D6F756E74223A206E756C6C0D0A20202020202020207D2C0D0A202020202020202022696E7465726163744576656E7473223A205B5D0D0A2020202020207D2C0D0A202020202020226B6579223A2022426F726465723032222C0D0A202020202020226368617274436F6E666967223A207B0D0A2020202020202020226B6579223A2022426F726465723032222C0D0A20202020202020202263686172744B6579223A202256426F726465723032222C0D0A202020202020202022636F6E4B6579223A20225643426F726465723032222C0D0A2020202020202020227469746C65223A2022E8BEB9E6A1862D3032222C0D0A20202020202020202263617465676F7279223A2022426F7264657273222C0D0A20202020202020202263617465676F72794E616D65223A2022E8BEB9E6A186222C0D0A2020202020202020227061636B616765223A20224465636F7261746573222C0D0A20202020202020202263686172744672616D65223A2022737461746963222C0D0A202020202020202022696D616765223A2022626F7264657230322E706E67220D0A2020202020207D2C0D0A202020202020226F7074696F6E223A207B0D0A202020202020202022636F6C6F7273223A205B0D0A202020202020202020202223363538366563222C0D0A202020202020202020202223326366376665220D0A20202020202020205D2C0D0A2020202020202020226261636B67726F756E64436F6C6F72223A2022233030303030303030220D0A2020202020207D0D0A202020207D2C0D0A202020207B0D0A202020202020226964223A20223435776834757339326C34303030222C0D0A20202020202022697347726F7570223A2066616C73652C0D0A2020202020202261747472223A207B0D0A20202020202020202278223A20313338312C0D0A20202020202020202279223A203735302C0D0A20202020202020202277223A203530302C0D0A20202020202020202268223A2035302C0D0A2020202020202020226F666673657458223A20302C0D0A2020202020202020226F666673657459223A20302C0D0A2020202020202020227A496E646578223A202D310D0A2020202020207D2C0D0A202020202020227374796C6573223A207B0D0A20202020202020202266696C74657253686F77223A2066616C73652C0D0A202020202020202022687565526F74617465223A20302C0D0A2020202020202020227361747572617465223A20312C0D0A202020202020202022636F6E7472617374223A20312C0D0A2020202020202020226272696768746E657373223A20312C0D0A2020202020202020226F706163697479223A20312C0D0A202020202020202022726F746174655A223A20302C0D0A202020202020202022726F7461746558223A20302C0D0A202020202020202022726F7461746559223A20302C0D0A202020202020202022736B657758223A20302C0D0A202020202020202022736B657759223A20302C0D0A202020202020202022626C656E644D6F6465223A20226E6F726D616C222C0D0A202020202020202022616E696D6174696F6E73223A205B5D0D0A2020202020207D2C0D0A2020202020202270726576696577223A207B0D0A2020202020202020226F766572466C6F7748696464656E223A2066616C73650D0A2020202020207D2C0D0A20202020202022737461747573223A207B0D0A2020202020202020226C6F636B223A2066616C73652C0D0A20202020202020202268696465223A2066616C73650D0A2020202020207D2C0D0A2020202020202272657175657374223A207B0D0A202020202020202022726571756573744461746154797065223A20302C0D0A202020202020202022726571756573744874747054797065223A2022676574222C0D0A2020202020202020227265717565737455726C223A2022222C0D0A20202020202020202272657175657374496E74657276616C223A206E756C6C2C0D0A20202020202020202272657175657374496E74657276616C556E6974223A20227365636F6E64222C0D0A20202020202020202272657175657374436F6E74656E7454797065223A20302C0D0A20202020202020202272657175657374506172616D73426F647954797065223A20226E6F6E65222C0D0A2020202020202020227265717565737453514C436F6E74656E74223A207B0D0A202020202020202020202273716C223A202273656C656374202A2066726F6D20207768657265220D0A20202020202020207D2C0D0A20202020202020202272657175657374506172616D73223A207B0D0A2020202020202020202022426F6479223A207B0D0A20202020202020202020202022666F726D2D64617461223A207B7D2C0D0A20202020202020202020202022782D7777772D666F726D2D75726C656E636F646564223A207B7D2C0D0A202020202020202020202020226A736F6E223A2022222C0D0A20202020202020202020202022786D6C223A2022220D0A202020202020202020207D2C0D0A2020202020202020202022486561646572223A207B7D2C0D0A2020202020202020202022506172616D73223A207B7D0D0A20202020202020207D0D0A2020202020207D2C0D0A2020202020202266696C746572223A206E756C6C2C0D0A202020202020226576656E7473223A207B0D0A202020202020202022626173654576656E74223A207B0D0A2020202020202020202022636C69636B223A206E756C6C2C0D0A202020202020202020202264626C636C69636B223A206E756C6C2C0D0A20202020202020202020226D6F757365656E746572223A206E756C6C2C0D0A20202020202020202020226D6F7573656C65617665223A206E756C6C0D0A20202020202020207D2C0D0A202020202020202022616476616E6365644576656E7473223A207B0D0A2020202020202020202022766E6F64654D6F756E746564223A206E756C6C2C0D0A2020202020202020202022766E6F64654265666F72654D6F756E74223A206E756C6C0D0A20202020202020207D2C0D0A202020202020202022696E7465726163744576656E7473223A205B5D0D0A2020202020207D2C0D0A202020202020226B6579223A2022546578744772616469656E74222C0D0A202020202020226368617274436F6E666967223A207B0D0A2020202020202020226B6579223A2022546578744772616469656E74222C0D0A20202020202020202263686172744B6579223A202256546578744772616469656E74222C0D0A202020202020202022636F6E4B6579223A20225643546578744772616469656E74222C0D0A2020202020202020227469746C65223A2022E6B890E58F98E69687E5AD97222C0D0A20202020202020202263617465676F7279223A20225465787473222C0D0A20202020202020202263617465676F72794E616D65223A2022E69687E69CAC222C0D0A2020202020202020227061636B616765223A2022496E666F726D6174696F6E73222C0D0A20202020202020202263686172744672616D65223A20226E616976655549222C0D0A202020202020202022696D616765223A2022746578745F6772616469656E742E706E67220D0A2020202020207D2C0D0A202020202020226F7074696F6E223A207B0D0A20202020202020202264617461736574223A2022E5BD93E5898DE580BCE78FADE4BABA222C0D0A20202020202020202273697A65223A2032302C0D0A2020202020202020226772616469656E74223A207B0D0A202020202020202020202266726F6D223A2022233030373246464646222C0D0A2020202020202020202022746F223A2022233030656166664646222C0D0A2020202020202020202022646567223A206E756C6C0D0A20202020202020207D0D0A2020202020207D0D0A202020207D2C0D0A202020207B0D0A202020202020226964223A202231746675656D3668623873673030222C0D0A20202020202022697347726F7570223A2066616C73652C0D0A2020202020202261747472223A207B0D0A20202020202020202278223A20313530302C0D0A20202020202020202279223A203735332C0D0A20202020202020202277223A2035382C0D0A20202020202020202268223A2035302C0D0A2020202020202020226F666673657458223A20302C0D0A2020202020202020226F666673657459223A20302C0D0A2020202020202020227A496E646578223A202D310D0A2020202020207D2C0D0A202020202020227374796C6573223A207B0D0A20202020202020202266696C74657253686F77223A2066616C73652C0D0A202020202020202022687565526F74617465223A20302C0D0A2020202020202020227361747572617465223A20312C0D0A202020202020202022636F6E7472617374223A20312C0D0A2020202020202020226272696768746E657373223A20312C0D0A2020202020202020226F706163697479223A20312C0D0A202020202020202022726F746174655A223A20302C0D0A202020202020202022726F7461746558223A20302C0D0A202020202020202022726F7461746559223A20302C0D0A202020202020202022736B657758223A20302C0D0A202020202020202022736B657759223A20302C0D0A202020202020202022626C656E644D6F6465223A20226E6F726D616C222C0D0A202020202020202022616E696D6174696F6E73223A205B5D0D0A2020202020207D2C0D0A2020202020202270726576696577223A207B0D0A2020202020202020226F766572466C6F7748696464656E223A2066616C73650D0A2020202020207D2C0D0A20202020202022737461747573223A207B0D0A2020202020202020226C6F636B223A2066616C73652C0D0A20202020202020202268696465223A2066616C73650D0A2020202020207D2C0D0A2020202020202272657175657374223A207B0D0A202020202020202022726571756573744461746154797065223A20302C0D0A202020202020202022726571756573744874747054797065223A2022676574222C0D0A2020202020202020227265717565737455726C223A2022222C0D0A20202020202020202272657175657374496E74657276616C223A206E756C6C2C0D0A20202020202020202272657175657374496E74657276616C556E6974223A20227365636F6E64222C0D0A20202020202020202272657175657374436F6E74656E7454797065223A20302C0D0A20202020202020202272657175657374506172616D73426F647954797065223A20226E6F6E65222C0D0A2020202020202020227265717565737453514C436F6E74656E74223A207B0D0A202020202020202020202273716C223A202273656C656374202A2066726F6D20207768657265220D0A20202020202020207D2C0D0A20202020202020202272657175657374506172616D73223A207B0D0A2020202020202020202022426F6479223A207B0D0A20202020202020202020202022666F726D2D64617461223A207B7D2C0D0A20202020202020202020202022782D7777772D666F726D2D75726C656E636F646564223A207B7D2C0D0A202020202020202020202020226A736F6E223A2022222C0D0A20202020202020202020202022786D6C223A2022220D0A202020202020202020207D2C0D0A2020202020202020202022486561646572223A207B7D2C0D0A2020202020202020202022506172616D73223A207B7D0D0A20202020202020207D0D0A2020202020207D2C0D0A2020202020202266696C746572223A206E756C6C2C0D0A202020202020226576656E7473223A207B0D0A202020202020202022626173654576656E74223A207B0D0A2020202020202020202022636C69636B223A206E756C6C2C0D0A202020202020202020202264626C636C69636B223A206E756C6C2C0D0A20202020202020202020226D6F757365656E746572223A206E756C6C2C0D0A20202020202020202020226D6F7573656C65617665223A206E756C6C0D0A20202020202020207D2C0D0A202020202020202022616476616E6365644576656E7473223A207B0D0A2020202020202020202022766E6F64654D6F756E746564223A206E756C6C2C0D0A2020202020202020202022766E6F64654265666F72654D6F756E74223A206E756C6C0D0A20202020202020207D2C0D0A202020202020202022696E7465726163744576656E7473223A205B5D0D0A2020202020207D2C0D0A202020202020226B6579223A2022496D616765222C0D0A202020202020226368617274436F6E666967223A207B0D0A2020202020202020226B6579223A2022496D616765222C0D0A20202020202020202263686172744B6579223A202256496D616765222C0D0A202020202020202022636F6E4B6579223A20225643496D616765222C0D0A2020202020202020227469746C65223A202277696E646F772D6C6566742E706E67222C0D0A20202020202020202263617465676F7279223A20224D6F726573222C0D0A20202020202020202263617465676F72794E616D65223A2022E69BB4E5A49A222C0D0A2020202020202020227061636B616765223A2022496E666F726D6174696F6E73222C0D0A20202020202020202263686172744672616D65223A2022737461746963222C0D0A202020202020202022696D616765223A202270686F746F2E706E67220D0A2020202020207D2C0D0A202020202020226F7074696F6E223A207B0D0A20202020202020202264617461736574223A2022646174613A696D6167652F706E673B6261736536342C6956424F5277304B47676F414141414E535568455567414141446F414141414F434159414141422B55412B544141414141584E535230494172733463365141414141526E51553142414143786A777638595155414141414A6345685A6377414144734D414141374441636476714751414141415A6445565964464E765A6E523359584A6C4145466B62324A6C49456C745957646C556D56685A486C7879575538414141444A6D6C555748525954557736593239744C6D466B62324A6C4C6E68746341414141414141504439346347466A6132563049474A6C5A326C7550534C767537386949476C6B50534A584E553077545842445A576870534870795A564E36546C526A656D746A4F575169507A34675048673665473177625756305953423462577875637A703450534A685A4739695A547075637A70745A5852684C7949676544703462584230617A306951575276596D55675745315149454E76636D55674E5334324C574D784E4449674E7A6B754D5459774F5449304C4341794D4445334C7A41334C7A457A4C5441784F6A41324F6A4D3549434167494341674943416950694138636D526D4F6C4A455269423462577875637A70795A475939496D6830644841364C79393364336375647A4D7562334A6E4C7A45354F546B764D4449764D6A4974636D526D4C584E35626E52686543317563794D6950694138636D526D4F6B526C63324E79615842306157397549484A6B5A6A7068596D3931644430694969423462577875637A703462584139496D6830644841364C793975637935685A4739695A53356A62323076654746774C7A45754D433869494868746247357A4F6E68746345314E50534A6F644852774F693876626E4D7559575276596D5575593239744C336868634338784C6A4176625730764969423462577875637A707A64464A6C5A6A30696148523063446F764C32357A4C6D466B62324A6C4C6D4E7662533934595841764D5334774C334E556558426C4C314A6C63323931636D4E6C556D566D49794967654731774F6B4E795A57463062334A556232397350534A425A4739695A5342516147393062334E6F6233416751304D674D6A41784F43416F56326C755A47393363796B69494868746345314E4F6B6C7563335268626D4E6C53555139496E68746343357061575136525456434F4455344E7A59354F4463344D544646517A6C44524556454E6A684451544A444D545533526A6B69494868746345314E4F6B5276593356745A57353053555139496E68746343356B61575136525456434F4455344E7A63354F4463344D544646517A6C44524556454E6A684451544A444D545533526A6B695069413865473177545530365247567961585A6C5A455A7962323067633352535A5759366157357A644746755932564A52443069654731774C6D6C705A4470464E5549344E5467334E446B344E7A67784D5556444F554E45525551324F454E424D6B4D784E5464474F534967633352535A5759365A47396A6457316C626E524A52443069654731774C6D52705A4470464E5549344E5467334E546B344E7A67784D5556444F554E45525551324F454E424D6B4D784E5464474F534976506941384C334A6B5A6A70455A584E6A636D6C7764476C76626A3467504339795A475936556B5247506941384C336736654731776257563059543467504439346347466A61325630494756755A4430696369492F507468654D364D4141414A4A535552425645684C335A65376178564247456333786B654D67695959785342713142524A53436B534549786C554C437831734A4B4F2F3846473745577863375378733455615A4A4343306D587142424642434671464879622B445A367A70714263585A3253657639775748765A4F374F374A6D353935756274714E583768566B4D3379466E7A59793659456C2B46793271746B4633762B366246577A4739624130374A567A52376F67706D795663302B47494A625A617561506A674F6C3874574A75313978383532634E304B58722F424D73545A42507568477A37434434686A2F776A30776A744946324D6A6E41444865417676496335364F41504434506776495534375849496A3447492B6844687463414E4F676E5064686B6F5564526464375132516B3158734E3279426E4B79767657636E354751642F774F343675354D4B76734C5873456744454171363979503444416367707A734E4C696A6F3543565664537244396F6B7577684E736F6F3079647057726B37572F6864514A2F73472F493756795472654A4E544B426C485430724B7871476C5A325654552F472B797A6A554849566C5A6858494A78347A397566643858376E61742B377679332F79425677632B3132734E4235564669483750647253664149587A347271735A50477858514F34344B6D636546386A796D50747079457834573735613635656B457178463363432F592F67544267794859344344376B4C4479444F44746744467967752F4141346E6A2F616569454F7A414663627A2F496D79444362674B63547A7A623849424749647A734A794B726C625372455A79487549455363394F4A6539446E43447063796A70527A424F6B46516D535071734955477948344A6B2B656D4D52567457306754526C705930696C70646D79536476456E532F695A4A713136547048382F425857532F675338414857537A6E73646C50533363455853654C78592F527A4D4D70354B47717666577244457035496D5645654C546970706E4E543350496455306A692F56645A2F434E4C435935526141437631745A56326D7366674D357948696D5252464D556635724D614766365150557341414141415355564F524B35435949493D222C0D0A202020202020202022666974223A20226E6F6E65222C0D0A202020202020202022626F72646572526164697573223A2031300D0A2020202020207D0D0A202020207D2C0D0A202020207B0D0A202020202020226964223A20223262743565797933686A36733030222C0D0A20202020202022697347726F7570223A2066616C73652C0D0A2020202020202261747472223A207B0D0A20202020202020202278223A20313730302C0D0A20202020202020202279223A203735332C0D0A20202020202020202277223A2035382C0D0A20202020202020202268223A2035302C0D0A2020202020202020226F666673657458223A20302C0D0A2020202020202020226F666673657459223A20302C0D0A2020202020202020227A496E646578223A202D310D0A2020202020207D2C0D0A202020202020227374796C6573223A207B0D0A20202020202020202266696C74657253686F77223A2066616C73652C0D0A202020202020202022687565526F74617465223A20302C0D0A2020202020202020227361747572617465223A20312C0D0A202020202020202022636F6E7472617374223A20312C0D0A2020202020202020226272696768746E657373223A20312C0D0A2020202020202020226F706163697479223A20312C0D0A202020202020202022726F746174655A223A20302C0D0A202020202020202022726F7461746558223A20302C0D0A202020202020202022726F7461746559223A20302C0D0A202020202020202022736B657758223A20302C0D0A202020202020202022736B657759223A20302C0D0A202020202020202022626C656E644D6F6465223A20226E6F726D616C222C0D0A202020202020202022616E696D6174696F6E73223A205B5D0D0A2020202020207D2C0D0A2020202020202270726576696577223A207B0D0A2020202020202020226F766572466C6F7748696464656E223A2066616C73650D0A2020202020207D2C0D0A20202020202022737461747573223A207B0D0A2020202020202020226C6F636B223A2066616C73652C0D0A20202020202020202268696465223A2066616C73650D0A2020202020207D2C0D0A2020202020202272657175657374223A207B0D0A202020202020202022726571756573744461746154797065223A20302C0D0A202020202020202022726571756573744874747054797065223A2022676574222C0D0A2020202020202020227265717565737455726C223A2022222C0D0A20202020202020202272657175657374496E74657276616C223A206E756C6C2C0D0A20202020202020202272657175657374496E74657276616C556E6974223A20227365636F6E64222C0D0A20202020202020202272657175657374436F6E74656E7454797065223A20302C0D0A20202020202020202272657175657374506172616D73426F647954797065223A20226E6F6E65222C0D0A2020202020202020227265717565737453514C436F6E74656E74223A207B0D0A202020202020202020202273716C223A202273656C656374202A2066726F6D20207768657265220D0A20202020202020207D2C0D0A20202020202020202272657175657374506172616D73223A207B0D0A2020202020202020202022426F6479223A207B0D0A20202020202020202020202022666F726D2D64617461223A207B7D2C0D0A20202020202020202020202022782D7777772D666F726D2D75726C656E636F646564223A207B7D2C0D0A202020202020202020202020226A736F6E223A2022222C0D0A20202020202020202020202022786D6C223A2022220D0A202020202020202020207D2C0D0A2020202020202020202022486561646572223A207B7D2C0D0A2020202020202020202022506172616D73223A207B7D0D0A20202020202020207D0D0A2020202020207D2C0D0A2020202020202266696C746572223A206E756C6C2C0D0A202020202020226576656E7473223A207B0D0A202020202020202022626173654576656E74223A207B0D0A2020202020202020202022636C69636B223A206E756C6C2C0D0A202020202020202020202264626C636C69636B223A206E756C6C2C0D0A20202020202020202020226D6F757365656E746572223A206E756C6C2C0D0A20202020202020202020226D6F7573656C65617665223A206E756C6C0D0A20202020202020207D2C0D0A202020202020202022616476616E6365644576656E7473223A207B0D0A2020202020202020202022766E6F64654D6F756E746564223A206E756C6C2C0D0A2020202020202020202022766E6F64654265666F72654D6F756E74223A206E756C6C0D0A20202020202020207D2C0D0A202020202020202022696E7465726163744576656E7473223A205B5D0D0A2020202020207D2C0D0A202020202020226B6579223A2022496D616765222C0D0A202020202020226368617274436F6E666967223A207B0D0A2020202020202020226B6579223A2022496D616765222C0D0A20202020202020202263686172744B6579223A202256496D616765222C0D0A202020202020202022636F6E4B6579223A20225643496D616765222C0D0A2020202020202020227469746C65223A202277696E646F772D72696768742E706E67222C0D0A20202020202020202263617465676F7279223A20224D6F726573222C0D0A20202020202020202263617465676F72794E616D65223A2022E69BB4E5A49A222C0D0A2020202020202020227061636B616765223A2022496E666F726D6174696F6E73222C0D0A20202020202020202263686172744672616D65223A2022737461746963222C0D0A202020202020202022696D616765223A202270686F746F2E706E67220D0A2020202020207D2C0D0A202020202020226F7074696F6E223A207B0D0A20202020202020202264617461736574223A2022646174613A696D6167652F706E673B6261736536342C6956424F5277304B47676F414141414E535568455567414141446F414141414F434159414141422B55412B544141414141584E535230494172733463365141414141526E51553142414143786A777638595155414141414A6345685A6377414144734D414141374441636476714751414141415A6445565964464E765A6E523359584A6C4145466B62324A6C49456C745957646C556D56685A486C7879575538414141444A6D6C555748525954557736593239744C6D466B62324A6C4C6E68746341414141414141504439346347466A6132563049474A6C5A326C7550534C767537386949476C6B50534A584E553077545842445A576870534870795A564E36546C526A656D746A4F575169507A34675048673665473177625756305953423462577875637A703450534A685A4739695A547075637A70745A5852684C7949676544703462584230617A306951575276596D55675745315149454E76636D55674E5334324C574D784E4449674E7A6B754D5459774F5449304C4341794D4445334C7A41334C7A457A4C5441784F6A41324F6A4D3549434167494341674943416950694138636D526D4F6C4A455269423462577875637A70795A475939496D6830644841364C79393364336375647A4D7562334A6E4C7A45354F546B764D4449764D6A4974636D526D4C584E35626E52686543317563794D6950694138636D526D4F6B526C63324E79615842306157397549484A6B5A6A7068596D3931644430694969423462577875637A703462584139496D6830644841364C793975637935685A4739695A53356A62323076654746774C7A45754D433869494868746247357A4F6E68746345314E50534A6F644852774F693876626E4D7559575276596D5575593239744C336868634338784C6A4176625730764969423462577875637A707A64464A6C5A6A30696148523063446F764C32357A4C6D466B62324A6C4C6D4E7662533934595841764D5334774C334E556558426C4C314A6C63323931636D4E6C556D566D49794967654731774F6B4E795A57463062334A556232397350534A425A4739695A5342516147393062334E6F6233416751304D674D6A41784F43416F56326C755A47393363796B69494868746345314E4F6B6C7563335268626D4E6C53555139496E68746343357061575136525456434F4455344E7A59354F4463344D544646517A6C44524556454E6A684451544A444D545533526A6B69494868746345314E4F6B5276593356745A57353053555139496E68746343356B61575136525456434F4455344E7A63354F4463344D544646517A6C44524556454E6A684451544A444D545533526A6B695069413865473177545530365247567961585A6C5A455A7962323067633352535A5759366157357A644746755932564A52443069654731774C6D6C705A4470464E5549344E5467334E446B344E7A67784D5556444F554E45525551324F454E424D6B4D784E5464474F534967633352535A5759365A47396A6457316C626E524A52443069654731774C6D52705A4470464E5549344E5467334E546B344E7A67784D5556444F554E45525551324F454E424D6B4D784E5464474F534976506941384C334A6B5A6A70455A584E6A636D6C7764476C76626A3467504339795A475936556B5247506941384C336736654731776257563059543467504439346347466A61325630494756755A4430696369492F507468654D364D4141414A4B535552425645684C335A5A4A6A307852474543374E646F515177774A516D6A4467684153455A45676867564A73374F777453456B666F414E652F75324A78462F51466A5A32474A446843446D65577A536874616D6331373131376D2B3930784C645A4B547176747576654738717478366E5A76374C6E66386774463446452F684254636B4F6E45664F6E664A4451317377526434705272565759486638476F31716A4D50782B4F4E616C526E436B37474239576F7A6C69636750326A716D4564492F74774E7835426F306F6348384265334974646D4E6D4B4733456265734B4D6B657477445271544D58496C4C73474A626B67597551686E59744F383535794F686E5933685270354448666954647944337A4749794F336F7433555976324B4A6B527677505A37417A3167536B57342F69782B784A434939723738596A314D536B5849583833784565713176635443485275514F4E4849584768506B794550344445764B794F5034484574795A4E342F522B6239632B547231747352636D523145387251746F32554347337253444655492F4957356B694A794A6659464F6E7161755148624970636A6B594F5956506B585079625343502B4F564B4D64486D2F5834316142357A616576735454345A6658523339544F594E6570466A634A49624567506F655679646D316249542B693831394F30416E75446E42656A4D733746764C2F4F476C30397666743950592B65594250367A5A3744387135645179396D4C6135482F33786659664155332B46535849615030666967487A33655175775A4870667A2F6849637A38485A4F49682B4D344768486E386165714F397164363877456A33475966643641317A50454B4579703969722B4E2F4731754753747647356C42707939696D55436C6A562B4E4A4C436C6A585333506F43634D79746A466542484C70366379646A3536764338596C4C477A38424561474F52593335667A4F58626F64772F316368425034353171564D664852422F496231656A4F717651433735586A656F73514338715676334D445052694831616A4F6A3748756F726E76385041465A6A394F775A2B414E6B2B44396F684E366E584141414141456C46546B5375516D4343222C0D0A202020202020202022666974223A2022636F6E7461696E222C0D0A202020202020202022626F72646572526164697573223A2031300D0A2020202020207D0D0A202020207D2C0D0A202020207B0D0A202020202020226964223A202235673475656A756A68666B303030222C0D0A20202020202022697347726F7570223A2066616C73652C0D0A2020202020202261747472223A207B0D0A20202020202020202278223A20323132342C0D0A20202020202020202279223A203630322C0D0A20202020202020202277223A203531342C0D0A20202020202020202268223A203234352C0D0A2020202020202020226F666673657458223A20302C0D0A2020202020202020226F666673657459223A20302C0D0A2020202020202020227A496E646578223A202D310D0A2020202020207D2C0D0A202020202020227374796C6573223A207B0D0A20202020202020202266696C74657253686F77223A2066616C73652C0D0A202020202020202022687565526F74617465223A20302C0D0A2020202020202020227361747572617465223A20312C0D0A202020202020202022636F6E7472617374223A20312C0D0A2020202020202020226272696768746E657373223A20312C0D0A2020202020202020226F706163697479223A20312C0D0A202020202020202022726F746174655A223A20302C0D0A202020202020202022726F7461746558223A20302C0D0A202020202020202022726F7461746559223A20302C0D0A202020202020202022736B657758223A20302C0D0A202020202020202022736B657759223A20302C0D0A202020202020202022626C656E644D6F6465223A20226E6F726D616C222C0D0A202020202020202022616E696D6174696F6E73223A205B5D0D0A2020202020207D2C0D0A2020202020202270726576696577223A207B0D0A2020202020202020226F766572466C6F7748696464656E223A2066616C73650D0A2020202020207D2C0D0A20202020202022737461747573223A207B0D0A2020202020202020226C6F636B223A2066616C73652C0D0A20202020202020202268696465223A2066616C73650D0A2020202020207D2C0D0A2020202020202272657175657374223A207B0D0A202020202020202022726571756573744461746154797065223A20302C0D0A202020202020202022726571756573744874747054797065223A2022676574222C0D0A2020202020202020227265717565737455726C223A2022222C0D0A20202020202020202272657175657374496E74657276616C223A206E756C6C2C0D0A20202020202020202272657175657374496E74657276616C556E6974223A20227365636F6E64222C0D0A20202020202020202272657175657374436F6E74656E7454797065223A20302C0D0A20202020202020202272657175657374506172616D73426F647954797065223A20226E6F6E65222C0D0A2020202020202020227265717565737453514C436F6E74656E74223A207B0D0A202020202020202020202273716C223A202273656C656374202A2066726F6D20207768657265220D0A20202020202020207D2C0D0A20202020202020202272657175657374506172616D73223A207B0D0A2020202020202020202022426F6479223A207B0D0A20202020202020202020202022666F726D2D64617461223A207B7D2C0D0A20202020202020202020202022782D7777772D666F726D2D75726C656E636F646564223A207B7D2C0D0A202020202020202020202020226A736F6E223A2022222C0D0A20202020202020202020202022786D6C223A2022220D0A202020202020202020207D2C0D0A2020202020202020202022486561646572223A207B7D2C0D0A2020202020202020202022506172616D73223A207B7D0D0A20202020202020207D0D0A2020202020207D2C0D0A2020202020202266696C746572223A206E756C6C2C0D0A202020202020226576656E7473223A207B0D0A202020202020202022626173654576656E74223A207B0D0A2020202020202020202022636C69636B223A206E756C6C2C0D0A202020202020202020202264626C636C69636B223A206E756C6C2C0D0A20202020202020202020226D6F757365656E746572223A206E756C6C2C0D0A20202020202020202020226D6F7573656C65617665223A206E756C6C0D0A20202020202020207D2C0D0A202020202020202022616476616E6365644576656E7473223A207B0D0A2020202020202020202022766E6F64654D6F756E746564223A206E756C6C2C0D0A2020202020202020202022766E6F64654265666F72654D6F756E74223A206E756C6C0D0A20202020202020207D2C0D0A202020202020202022696E7465726163744576656E7473223A205B5D0D0A2020202020207D2C0D0A202020202020226B6579223A20225461626C655363726F6C6C426F617264222C0D0A202020202020226368617274436F6E666967223A207B0D0A2020202020202020226B6579223A20225461626C655363726F6C6C426F617264222C0D0A20202020202020202263686172744B6579223A2022565461626C655363726F6C6C426F617264222C0D0A202020202020202022636F6E4B6579223A202256435461626C655363726F6C6C426F617264222C0D0A2020202020202020227469746C65223A2022E8BDAEE692ADE58897E8A1A8222C0D0A20202020202020202263617465676F7279223A20225461626C6573222C0D0A20202020202020202263617465676F72794E616D65223A2022E8A1A8E6A0BC222C0D0A2020202020202020227061636B616765223A20225461626C6573222C0D0A20202020202020202263686172744672616D65223A2022636F6D6D6F6E222C0D0A202020202020202022696D616765223A20227461626C655F7363726F6C6C626F6172642E706E67220D0A2020202020207D2C0D0A202020202020226F7074696F6E223A207B0D0A202020202020202022686561646572223A205B0D0A2020202020202020202022220D0A20202020202020205D2C0D0A20202020202020202264617461736574223A205B0D0A202020202020202020205B0D0A20202020202020202020202022E6B0A8E6B094E8A385E7BDAE222C0D0A202020202020202020202020223223E6B593E5BAA6E8B685E99990E68AA5E8ADA6222C0D0A20202020202020202020202022323032332D30362D32302031373A32303A3038220D0A202020202020202020205D2C0D0A202020202020202020205B0D0A20202020202020202020202022E7A185E783B7E8A385E7BDAE222C0D0A202020202020202020202020223123E6B593E5BAA6E8B685E99990E68AA5E8ADA6222C0D0A20202020202020202020202022323032332D30362D32302031373A32303A3037220D0A202020202020202020205D2C0D0A202020202020202020205B0D0A20202020202020202020202022E7A185E783B7E8A385E7BDAE222C0D0A202020202020202020202020223223E6B593E5BAA6E8B685E99990E68AA5E8ADA6222C0D0A20202020202020202020202022323032332D30362D32302031373A32303A3037220D0A202020202020202020205D2C0D0A202020202020202020205B0D0A20202020202020202020202022E6B0A8E6B094E8A385E7BDAE222C0D0A202020202020202020202020223223E6B593E5BAA6E8B685E99990E68AA5E8ADA6222C0D0A20202020202020202020202022323032332D30362D32302031373A32303A3038220D0A202020202020202020205D2C0D0A202020202020202020205B0D0A20202020202020202020202022E6B0A8E6B094E8A385E7BDAE222C0D0A202020202020202020202020223223E6B593E5BAA6E8B685E99990E68AA5E8ADA6222C0D0A20202020202020202020202022323032332D30362D32302031373A32303A3038220D0A202020202020202020205D2C0D0A202020202020202020205B0D0A20202020202020202020202022E6B0A8E6B094E8A385E7BDAE222C0D0A202020202020202020202020223223E6B593E5BAA6E8B685E99990E68AA5E8ADA6222C0D0A20202020202020202020202022323032332D30362D32302031373A32303A3038220D0A202020202020202020205D2C0D0A202020202020202020205B0D0A20202020202020202020202022E6B0A8E6B094E8A385E7BDAE222C0D0A202020202020202020202020223223E6B593E5BAA6E8B685E99990E68AA5E8ADA6222C0D0A20202020202020202020202022323032332D30362D32302031373A32303A3038220D0A202020202020202020205D2C0D0A202020202020202020205B0D0A20202020202020202020202022E6B0A8E6B094E8A385E7BDAE222C0D0A202020202020202020202020223223E6B593E5BAA6E8B685E99990E68AA5E8ADA6222C0D0A20202020202020202020202022323032332D30362D32302031373A32303A3038220D0A202020202020202020205D2C0D0A202020202020202020205B0D0A20202020202020202020202022E6B0A8E6B094E8A385E7BDAE222C0D0A202020202020202020202020223223E6B593E5BAA6E8B685E99990E68AA5E8ADA6222C0D0A20202020202020202020202022323032332D30362D32302031373A32303A3038220D0A202020202020202020205D2C0D0A202020202020202020205B0D0A20202020202020202020202022E6B0A8E6B094E8A385E7BDAE222C0D0A202020202020202020202020223223E6B593E5BAA6E8B685E99990E68AA5E8ADA6222C0D0A20202020202020202020202022323032332D30362D32302031373A32303A3038220D0A202020202020202020205D0D0A20202020202020205D2C0D0A202020202020202022696E646578223A2066616C73652C0D0A202020202020202022636F6C756D6E5769647468223A205B0D0A2020202020202020202022313530222C0D0A2020202020202020202022313530222C0D0A2020202020202020202022313830220D0A20202020202020205D2C0D0A202020202020202022616C69676E223A205B0D0A202020202020202020202263656E746572222C0D0A202020202020202020202263656E746572222C0D0A202020202020202020202263656E746572220D0A20202020202020205D2C0D0A202020202020202022726F774E756D223A20352C0D0A2020202020202020227761697454696D65223A20322C0D0A202020202020202022686561646572486569676874223A206E756C6C2C0D0A2020202020202020226361726F7573656C223A202273696E676C65222C0D0A202020202020202022686561646572424743223A2022233030424146463030222C0D0A2020202020202020226F6464526F77424743223A2022233030334235313030222C0D0A2020202020202020226576656E526F77424743223A2022233041323733323030220D0A2020202020207D0D0A202020207D2C0D0A202020207B0D0A202020202020226964223A20223371657965326C34716D30303030222C0D0A20202020202022697347726F7570223A2066616C73652C0D0A2020202020202261747472223A207B0D0A20202020202020202278223A20323034312C0D0A20202020202020202279223A203633342C0D0A20202020202020202277223A203135342C0D0A20202020202020202268223A203137372C0D0A2020202020202020226F666673657458223A20302C0D0A2020202020202020226F666673657459223A20302C0D0A2020202020202020227A496E646578223A202D310D0A2020202020207D2C0D0A202020202020227374796C6573223A207B0D0A20202020202020202266696C74657253686F77223A2066616C73652C0D0A202020202020202022687565526F74617465223A20302C0D0A2020202020202020227361747572617465223A20312C0D0A202020202020202022636F6E7472617374223A20312C0D0A2020202020202020226272696768746E657373223A20312C0D0A2020202020202020226F706163697479223A20312C0D0A202020202020202022726F746174655A223A20302C0D0A202020202020202022726F7461746558223A20302C0D0A202020202020202022726F7461746559223A20302C0D0A202020202020202022736B657758223A20302C0D0A202020202020202022736B657759223A20302C0D0A202020202020202022626C656E644D6F6465223A20226E6F726D616C222C0D0A202020202020202022616E696D6174696F6E73223A205B5D0D0A2020202020207D2C0D0A2020202020202270726576696577223A207B0D0A2020202020202020226F766572466C6F7748696464656E223A2066616C73650D0A2020202020207D2C0D0A20202020202022737461747573223A207B0D0A2020202020202020226C6F636B223A2066616C73652C0D0A20202020202020202268696465223A2066616C73650D0A2020202020207D2C0D0A2020202020202272657175657374223A207B0D0A202020202020202022726571756573744461746154797065223A20302C0D0A202020202020202022726571756573744874747054797065223A2022676574222C0D0A2020202020202020227265717565737455726C223A2022222C0D0A20202020202020202272657175657374496E74657276616C223A206E756C6C2C0D0A20202020202020202272657175657374496E74657276616C556E6974223A20227365636F6E64222C0D0A20202020202020202272657175657374436F6E74656E7454797065223A20302C0D0A20202020202020202272657175657374506172616D73426F647954797065223A20226E6F6E65222C0D0A2020202020202020227265717565737453514C436F6E74656E74223A207B0D0A202020202020202020202273716C223A202273656C656374202A2066726F6D20207768657265220D0A20202020202020207D2C0D0A20202020202020202272657175657374506172616D73223A207B0D0A2020202020202020202022426F6479223A207B0D0A20202020202020202020202022666F726D2D64617461223A207B7D2C0D0A20202020202020202020202022782D7777772D666F726D2D75726C656E636F646564223A207B7D2C0D0A202020202020202020202020226A736F6E223A2022222C0D0A20202020202020202020202022786D6C223A2022220D0A202020202020202020207D2C0D0A2020202020202020202022486561646572223A207B7D2C0D0A2020202020202020202022506172616D73223A207B7D0D0A20202020202020207D0D0A2020202020207D2C0D0A2020202020202266696C746572223A206E756C6C2C0D0A202020202020226576656E7473223A207B0D0A202020202020202022626173654576656E74223A207B0D0A2020202020202020202022636C69636B223A206E756C6C2C0D0A202020202020202020202264626C636C69636B223A206E756C6C2C0D0A20202020202020202020226D6F757365656E746572223A206E756C6C2C0D0A20202020202020202020226D6F7573656C65617665223A206E756C6C0D0A20202020202020207D2C0D0A202020202020202022616476616E6365644576656E7473223A207B0D0A2020202020202020202022766E6F64654D6F756E746564223A206E756C6C2C0D0A2020202020202020202022766E6F64654265666F72654D6F756E74223A206E756C6C0D0A20202020202020207D2C0D0A202020202020202022696E7465726163744576656E7473223A205B5D0D0A2020202020207D2C0D0A202020202020226B6579223A20225761746572506F6C6F222C0D0A202020202020226368617274436F6E666967223A207B0D0A2020202020202020226B6579223A20225761746572506F6C6F222C0D0A20202020202020202263686172744B6579223A2022565761746572506F6C6F222C0D0A202020202020202022636F6E4B6579223A202256435761746572506F6C6F222C0D0A2020202020202020227469746C65223A2022E6B0B4E79083E59BBE222C0D0A20202020202020202263617465676F7279223A20224D6F726573222C0D0A20202020202020202263617465676F72794E616D65223A2022E69BB4E5A49A222C0D0A2020202020202020227061636B616765223A2022436861727473222C0D0A20202020202020202263686172744672616D65223A2022636F6D6D6F6E222C0D0A202020202020202022696D616765223A202277617465725F5761746572506F6C6F2E706E67220D0A2020202020207D2C0D0A202020202020226F7074696F6E223A207B0D0A20202020202020202264617461736574223A20302E352C0D0A202020202020202022736572696573223A205B0D0A202020202020202020207B0D0A2020202020202020202020202274797065223A20226C697175696446696C6C222C0D0A202020202020202020202020227368617065223A2022636972636C65222C0D0A20202020202020202020202022726164697573223A2022393025222C0D0A2020202020202020202020202264617461223A205B0D0A2020202020202020202020202020302E350D0A2020202020202020202020205D2C0D0A2020202020202020202020202263656E746572223A205B0D0A202020202020202020202020202022353025222C0D0A202020202020202020202020202022353025220D0A2020202020202020202020205D2C0D0A20202020202020202020202022636F6C6F72223A205B0D0A20202020202020202020202020207B0D0A202020202020202020202020202020202274797065223A20226C696E656172222C0D0A202020202020202020202020202020202278223A20302C0D0A202020202020202020202020202020202279223A20302C0D0A20202020202020202020202020202020227832223A20302C0D0A20202020202020202020202020202020227932223A20312C0D0A2020202020202020202020202020202022636F6C6F7253746F7073223A205B0D0A2020202020202020202020202020202020207B0D0A2020202020202020202020202020202020202020226F6666736574223A20302C0D0A202020202020202020202020202020202020202022636F6C6F72223A202223343939326666220D0A2020202020202020202020202020202020207D2C0D0A2020202020202020202020202020202020207B0D0A2020202020202020202020202020202020202020226F6666736574223A20312C0D0A202020202020202020202020202020202020202022636F6C6F72223A202223376366666232220D0A2020202020202020202020202020202020207D0D0A202020202020202020202020202020205D2C0D0A2020202020202020202020202020202022676C6F62616C436F6F7264223A2066616C73650D0A20202020202020202020202020207D0D0A2020202020202020202020205D2C0D0A202020202020202020202020226261636B67726F756E645374796C65223A207B0D0A202020202020202020202020202022626F726465725769647468223A20312C0D0A202020202020202020202020202022636F6C6F72223A2022726762612836382C203138312C203232362C20302E3329220D0A2020202020202020202020207D2C0D0A202020202020202020202020226C6162656C223A207B0D0A2020202020202020202020202020226E6F726D616C223A207B0D0A2020202020202020202020202020202022746578745374796C65223A207B0D0A20202020202020202020202020202020202022666F6E7453697A65223A2032392C0D0A20202020202020202020202020202020202022636F6C6F72223A202223666666220D0A202020202020202020202020202020207D0D0A20202020202020202020202020207D0D0A2020202020202020202020207D2C0D0A202020202020202020202020226F75746C696E65223A207B0D0A20202020202020202020202020202273686F77223A2066616C73652C0D0A202020202020202020202020202022626F7264657244697374616E6365223A2031302C0D0A2020202020202020202020202020226974656D5374796C65223A207B0D0A2020202020202020202020202020202022626F726465725769647468223A20322C0D0A2020202020202020202020202020202022626F72646572436F6C6F72223A202223313132313635220D0A20202020202020202020202020207D0D0A2020202020202020202020207D0D0A202020202020202020207D0D0A20202020202020205D2C0D0A2020202020202020226261636B67726F756E64436F6C6F72223A20227267626128302C302C302C3029220D0A2020202020207D0D0A202020207D2C0D0A202020207B0D0A202020202020226964223A20226361347A367663647236383030222C0D0A20202020202022697347726F7570223A2066616C73652C0D0A2020202020202261747472223A207B0D0A20202020202020202278223A20323134302C0D0A20202020202020202279223A203632332C0D0A20202020202020202277223A203135342C0D0A20202020202020202268223A203137372C0D0A2020202020202020226F666673657458223A20302C0D0A2020202020202020226F666673657459223A20302C0D0A2020202020202020227A496E646578223A202D310D0A2020202020207D2C0D0A202020202020227374796C6573223A207B0D0A20202020202020202266696C74657253686F77223A2066616C73652C0D0A202020202020202022687565526F74617465223A20302C0D0A2020202020202020227361747572617465223A20312C0D0A202020202020202022636F6E7472617374223A20312C0D0A2020202020202020226272696768746E657373223A20312C0D0A2020202020202020226F706163697479223A20312C0D0A202020202020202022726F746174655A223A20302C0D0A202020202020202022726F7461746558223A20302C0D0A202020202020202022726F7461746559223A20302C0D0A202020202020202022736B657758223A20302C0D0A202020202020202022736B657759223A20302C0D0A202020202020202022626C656E644D6F6465223A20226E6F726D616C222C0D0A202020202020202022616E696D6174696F6E73223A205B5D0D0A2020202020207D2C0D0A2020202020202270726576696577223A207B0D0A2020202020202020226F766572466C6F7748696464656E223A2066616C73650D0A2020202020207D2C0D0A20202020202022737461747573223A207B0D0A2020202020202020226C6F636B223A2066616C73652C0D0A20202020202020202268696465223A2066616C73650D0A2020202020207D2C0D0A2020202020202272657175657374223A207B0D0A202020202020202022726571756573744461746154797065223A20302C0D0A202020202020202022726571756573744874747054797065223A2022676574222C0D0A2020202020202020227265717565737455726C223A2022222C0D0A20202020202020202272657175657374496E74657276616C223A206E756C6C2C0D0A20202020202020202272657175657374496E74657276616C556E6974223A20227365636F6E64222C0D0A20202020202020202272657175657374436F6E74656E7454797065223A20302C0D0A20202020202020202272657175657374506172616D73426F647954797065223A20226E6F6E65222C0D0A2020202020202020227265717565737453514C436F6E74656E74223A207B0D0A202020202020202020202273716C223A202273656C656374202A2066726F6D20207768657265220D0A20202020202020207D2C0D0A20202020202020202272657175657374506172616D73223A207B0D0A2020202020202020202022426F6479223A207B0D0A20202020202020202020202022666F726D2D64617461223A207B7D2C0D0A20202020202020202020202022782D7777772D666F726D2D75726C656E636F646564223A207B7D2C0D0A202020202020202020202020226A736F6E223A2022222C0D0A20202020202020202020202022786D6C223A2022220D0A202020202020202020207D2C0D0A2020202020202020202022486561646572223A207B7D2C0D0A2020202020202020202022506172616D73223A207B7D0D0A20202020202020207D0D0A2020202020207D2C0D0A2020202020202266696C746572223A206E756C6C2C0D0A202020202020226576656E7473223A207B0D0A202020202020202022626173654576656E74223A207B0D0A2020202020202020202022636C69636B223A206E756C6C2C0D0A202020202020202020202264626C636C69636B223A206E756C6C2C0D0A20202020202020202020226D6F757365656E746572223A206E756C6C2C0D0A20202020202020202020226D6F7573656C65617665223A206E756C6C0D0A20202020202020207D2C0D0A202020202020202022616476616E6365644576656E7473223A207B0D0A2020202020202020202022766E6F64654D6F756E746564223A206E756C6C2C0D0A2020202020202020202022766E6F64654265666F72654D6F756E74223A206E756C6C0D0A20202020202020207D2C0D0A202020202020202022696E7465726163744576656E7473223A205B5D0D0A2020202020207D2C0D0A202020202020226B6579223A20225761746572506F6C6F222C0D0A202020202020226368617274436F6E666967223A207B0D0A2020202020202020226B6579223A20225761746572506F6C6F222C0D0A20202020202020202263686172744B6579223A2022565761746572506F6C6F222C0D0A202020202020202022636F6E4B6579223A202256435761746572506F6C6F222C0D0A2020202020202020227469746C65223A2022E6B0B4E79083E59BBE222C0D0A20202020202020202263617465676F7279223A20224D6F726573222C0D0A20202020202020202263617465676F72794E616D65223A2022E69BB4E5A49A222C0D0A2020202020202020227061636B616765223A2022436861727473222C0D0A20202020202020202263686172744672616D65223A2022636F6D6D6F6E222C0D0A202020202020202022696D616765223A202277617465725F5761746572506F6C6F2E706E67220D0A2020202020207D2C0D0A202020202020226F7074696F6E223A207B0D0A20202020202020202264617461736574223A20302E352C0D0A202020202020202022736572696573223A205B0D0A202020202020202020207B0D0A2020202020202020202020202274797065223A20226C697175696446696C6C222C0D0A202020202020202020202020227368617065223A2022636972636C65222C0D0A20202020202020202020202022726164697573223A2022393025222C0D0A2020202020202020202020202264617461223A205B0D0A2020202020202020202020202020302E350D0A2020202020202020202020205D2C0D0A2020202020202020202020202263656E746572223A205B0D0A202020202020202020202020202022353025222C0D0A202020202020202020202020202022353025220D0A2020202020202020202020205D2C0D0A20202020202020202020202022636F6C6F72223A205B0D0A20202020202020202020202020207B0D0A202020202020202020202020202020202274797065223A20226C696E656172222C0D0A202020202020202020202020202020202278223A20302C0D0A202020202020202020202020202020202279223A20302C0D0A20202020202020202020202020202020227832223A20302C0D0A20202020202020202020202020202020227932223A20312C0D0A2020202020202020202020202020202022636F6C6F7253746F7073223A205B0D0A2020202020202020202020202020202020207B0D0A2020202020202020202020202020202020202020226F6666736574223A20302C0D0A202020202020202020202020202020202020202022636F6C6F72223A202223343939326666220D0A2020202020202020202020202020202020207D2C0D0A2020202020202020202020202020202020207B0D0A2020202020202020202020202020202020202020226F6666736574223A20312C0D0A202020202020202020202020202020202020202022636F6C6F72223A202223376366666232220D0A2020202020202020202020202020202020207D0D0A202020202020202020202020202020205D2C0D0A2020202020202020202020202020202022676C6F62616C436F6F7264223A2066616C73650D0A20202020202020202020202020207D0D0A2020202020202020202020205D2C0D0A202020202020202020202020226261636B67726F756E645374796C65223A207B0D0A202020202020202020202020202022626F726465725769647468223A20312C0D0A202020202020202020202020202022636F6C6F72223A2022726762612836382C203138312C203232362C20302E3329220D0A2020202020202020202020207D2C0D0A202020202020202020202020226C6162656C223A207B0D0A2020202020202020202020202020226E6F726D616C223A207B0D0A2020202020202020202020202020202022746578745374796C65223A207B0D0A20202020202020202020202020202020202022666F6E7453697A65223A2032392C0D0A20202020202020202020202020202020202022636F6C6F72223A202223666666220D0A202020202020202020202020202020207D0D0A20202020202020202020202020207D0D0A2020202020202020202020207D2C0D0A202020202020202020202020226F75746C696E65223A207B0D0A20202020202020202020202020202273686F77223A2066616C73652C0D0A202020202020202020202020202022626F7264657244697374616E6365223A2031302C0D0A2020202020202020202020202020226974656D5374796C65223A207B0D0A2020202020202020202020202020202022626F726465725769647468223A20322C0D0A2020202020202020202020202020202022626F72646572436F6C6F72223A202223313132313635220D0A20202020202020202020202020207D0D0A2020202020202020202020207D0D0A202020202020202020207D0D0A20202020202020205D2C0D0A2020202020202020226261636B67726F756E64436F6C6F72223A20227267626128302C302C302C3029220D0A2020202020207D0D0A202020207D2C0D0A202020207B0D0A202020202020226964223A2022337264797A786E326B7377303030222C0D0A20202020202022697347726F7570223A2066616C73652C0D0A2020202020202261747472223A207B0D0A20202020202020202278223A20323035362C0D0A20202020202020202279223A203633392C0D0A20202020202020202277223A203135342C0D0A20202020202020202268223A203137372C0D0A2020202020202020226F666673657458223A20302C0D0A2020202020202020226F666673657459223A20302C0D0A2020202020202020227A496E646578223A202D310D0A2020202020207D2C0D0A202020202020227374796C6573223A207B0D0A20202020202020202266696C74657253686F77223A2066616C73652C0D0A202020202020202022687565526F74617465223A20302C0D0A2020202020202020227361747572617465223A20312C0D0A202020202020202022636F6E7472617374223A20312C0D0A2020202020202020226272696768746E657373223A20312C0D0A2020202020202020226F706163697479223A20312C0D0A202020202020202022726F746174655A223A20302C0D0A202020202020202022726F7461746558223A20302C0D0A202020202020202022726F7461746559223A20302C0D0A202020202020202022736B657758223A20302C0D0A202020202020202022736B657759223A20302C0D0A202020202020202022626C656E644D6F6465223A20226E6F726D616C222C0D0A202020202020202022616E696D6174696F6E73223A205B5D0D0A2020202020207D2C0D0A2020202020202270726576696577223A207B0D0A2020202020202020226F766572466C6F7748696464656E223A2066616C73650D0A2020202020207D2C0D0A20202020202022737461747573223A207B0D0A2020202020202020226C6F636B223A2066616C73652C0D0A20202020202020202268696465223A2066616C73650D0A2020202020207D2C0D0A2020202020202272657175657374223A207B0D0A202020202020202022726571756573744461746154797065223A20302C0D0A202020202020202022726571756573744874747054797065223A2022676574222C0D0A2020202020202020227265717565737455726C223A2022222C0D0A20202020202020202272657175657374496E74657276616C223A206E756C6C2C0D0A20202020202020202272657175657374496E74657276616C556E6974223A20227365636F6E64222C0D0A20202020202020202272657175657374436F6E74656E7454797065223A20302C0D0A20202020202020202272657175657374506172616D73426F647954797065223A20226E6F6E65222C0D0A2020202020202020227265717565737453514C436F6E74656E74223A207B0D0A202020202020202020202273716C223A202273656C656374202A2066726F6D20207768657265220D0A20202020202020207D2C0D0A20202020202020202272657175657374506172616D73223A207B0D0A2020202020202020202022426F6479223A207B0D0A20202020202020202020202022666F726D2D64617461223A207B7D2C0D0A20202020202020202020202022782D7777772D666F726D2D75726C656E636F646564223A207B7D2C0D0A202020202020202020202020226A736F6E223A2022222C0D0A20202020202020202020202022786D6C223A2022220D0A202020202020202020207D2C0D0A2020202020202020202022486561646572223A207B7D2C0D0A2020202020202020202022506172616D73223A207B7D0D0A20202020202020207D0D0A2020202020207D2C0D0A2020202020202266696C746572223A206E756C6C2C0D0A202020202020226576656E7473223A207B0D0A202020202020202022626173654576656E74223A207B0D0A2020202020202020202022636C69636B223A206E756C6C2C0D0A202020202020202020202264626C636C69636B223A206E756C6C2C0D0A20202020202020202020226D6F757365656E746572223A206E756C6C2C0D0A20202020202020202020226D6F7573656C65617665223A206E756C6C0D0A20202020202020207D2C0D0A202020202020202022616476616E6365644576656E7473223A207B0D0A2020202020202020202022766E6F64654D6F756E746564223A206E756C6C2C0D0A2020202020202020202022766E6F64654265666F72654D6F756E74223A206E756C6C0D0A20202020202020207D2C0D0A202020202020202022696E7465726163744576656E7473223A205B5D0D0A2020202020207D2C0D0A202020202020226B6579223A20225761746572506F6C6F222C0D0A202020202020226368617274436F6E666967223A207B0D0A2020202020202020226B6579223A20225761746572506F6C6F222C0D0A20202020202020202263686172744B6579223A2022565761746572506F6C6F222C0D0A202020202020202022636F6E4B6579223A202256435761746572506F6C6F222C0D0A2020202020202020227469746C65223A2022E6B0B4E79083E59BBE222C0D0A20202020202020202263617465676F7279223A20224D6F726573222C0D0A20202020202020202263617465676F72794E616D65223A2022E69BB4E5A49A222C0D0A2020202020202020227061636B616765223A2022436861727473222C0D0A20202020202020202263686172744672616D65223A2022636F6D6D6F6E222C0D0A202020202020202022696D616765223A202277617465725F5761746572506F6C6F2E706E67220D0A2020202020207D2C0D0A202020202020226F7074696F6E223A207B0D0A20202020202020202264617461736574223A20302E352C0D0A202020202020202022736572696573223A205B0D0A202020202020202020207B0D0A2020202020202020202020202274797065223A20226C697175696446696C6C222C0D0A202020202020202020202020227368617065223A2022636972636C65222C0D0A20202020202020202020202022726164697573223A2022393025222C0D0A2020202020202020202020202264617461223A205B0D0A2020202020202020202020202020302E350D0A2020202020202020202020205D2C0D0A2020202020202020202020202263656E746572223A205B0D0A202020202020202020202020202022353025222C0D0A202020202020202020202020202022353025220D0A2020202020202020202020205D2C0D0A20202020202020202020202022636F6C6F72223A205B0D0A20202020202020202020202020207B0D0A202020202020202020202020202020202274797065223A20226C696E656172222C0D0A202020202020202020202020202020202278223A20302C0D0A202020202020202020202020202020202279223A20302C0D0A20202020202020202020202020202020227832223A20302C0D0A20202020202020202020202020202020227932223A20312C0D0A2020202020202020202020202020202022636F6C6F7253746F7073223A205B0D0A2020202020202020202020202020202020207B0D0A2020202020202020202020202020202020202020226F6666736574223A20302C0D0A202020202020202020202020202020202020202022636F6C6F72223A202223343939326666220D0A2020202020202020202020202020202020207D2C0D0A2020202020202020202020202020202020207B0D0A2020202020202020202020202020202020202020226F6666736574223A20312C0D0A202020202020202020202020202020202020202022636F6C6F72223A202223376366666232220D0A2020202020202020202020202020202020207D0D0A202020202020202020202020202020205D2C0D0A2020202020202020202020202020202022676C6F62616C436F6F7264223A2066616C73650D0A20202020202020202020202020207D0D0A2020202020202020202020205D2C0D0A202020202020202020202020226261636B67726F756E645374796C65223A207B0D0A202020202020202020202020202022626F726465725769647468223A20312C0D0A202020202020202020202020202022636F6C6F72223A2022726762612836382C203138312C203232362C20302E3329220D0A2020202020202020202020207D2C0D0A202020202020202020202020226C6162656C223A207B0D0A2020202020202020202020202020226E6F726D616C223A207B0D0A2020202020202020202020202020202022746578745374796C65223A207B0D0A20202020202020202020202020202020202022666F6E7453697A65223A2032392C0D0A20202020202020202020202020202020202022636F6C6F72223A202223666666220D0A202020202020202020202020202020207D0D0A20202020202020202020202020207D0D0A2020202020202020202020207D2C0D0A202020202020202020202020226F75746C696E65223A207B0D0A20202020202020202020202020202273686F77223A2066616C73652C0D0A202020202020202020202020202022626F7264657244697374616E6365223A2031302C0D0A2020202020202020202020202020226974656D5374796C65223A207B0D0A2020202020202020202020202020202022626F726465725769647468223A20322C0D0A2020202020202020202020202020202022626F72646572436F6C6F72223A202223313132313635220D0A20202020202020202020202020207D0D0A2020202020202020202020207D0D0A202020202020202020207D0D0A20202020202020205D2C0D0A2020202020202020226261636B67726F756E64436F6C6F72223A20227267626128302C302C302C3029220D0A2020202020207D0D0A202020207D2C0D0A202020207B0D0A202020202020226964223A20223469616F3375396C653534303030222C0D0A20202020202022697347726F7570223A2066616C73652C0D0A2020202020202261747472223A207B0D0A20202020202020202278223A203631382C0D0A20202020202020202279223A203737332C0D0A20202020202020202277223A203639362C0D0A20202020202020202268223A203238312C0D0A2020202020202020226F666673657458223A20302C0D0A2020202020202020226F666673657459223A20302C0D0A2020202020202020227A496E646578223A202D310D0A2020202020207D2C0D0A202020202020227374796C6573223A207B0D0A20202020202020202266696C74657253686F77223A2066616C73652C0D0A202020202020202022687565526F74617465223A20302C0D0A2020202020202020227361747572617465223A20312C0D0A202020202020202022636F6E7472617374223A20312C0D0A2020202020202020226272696768746E657373223A20312C0D0A2020202020202020226F706163697479223A20312C0D0A202020202020202022726F746174655A223A20302C0D0A202020202020202022726F7461746558223A20302C0D0A202020202020202022726F7461746559223A20302C0D0A202020202020202022736B657758223A20302C0D0A202020202020202022736B657759223A20302C0D0A202020202020202022626C656E644D6F6465223A20226E6F726D616C222C0D0A202020202020202022616E696D6174696F6E73223A205B5D0D0A2020202020207D2C0D0A2020202020202270726576696577223A207B0D0A2020202020202020226F766572466C6F7748696464656E223A2066616C73650D0A2020202020207D2C0D0A20202020202022737461747573223A207B0D0A2020202020202020226C6F636B223A2066616C73652C0D0A20202020202020202268696465223A2066616C73650D0A2020202020207D2C0D0A2020202020202272657175657374223A207B0D0A202020202020202022726571756573744461746154797065223A20302C0D0A202020202020202022726571756573744874747054797065223A2022676574222C0D0A2020202020202020227265717565737455726C223A2022222C0D0A20202020202020202272657175657374496E74657276616C223A206E756C6C2C0D0A20202020202020202272657175657374496E74657276616C556E6974223A20227365636F6E64222C0D0A20202020202020202272657175657374436F6E74656E7454797065223A20302C0D0A20202020202020202272657175657374506172616D73426F647954797065223A20226E6F6E65222C0D0A2020202020202020227265717565737453514C436F6E74656E74223A207B0D0A202020202020202020202273716C223A202273656C656374202A2066726F6D20207768657265220D0A20202020202020207D2C0D0A20202020202020202272657175657374506172616D73223A207B0D0A2020202020202020202022426F6479223A207B0D0A20202020202020202020202022666F726D2D64617461223A207B7D2C0D0A20202020202020202020202022782D7777772D666F726D2D75726C656E636F646564223A207B7D2C0D0A202020202020202020202020226A736F6E223A2022222C0D0A20202020202020202020202022786D6C223A2022220D0A202020202020202020207D2C0D0A2020202020202020202022486561646572223A207B7D2C0D0A2020202020202020202022506172616D73223A207B7D0D0A20202020202020207D0D0A2020202020207D2C0D0A2020202020202266696C746572223A206E756C6C2C0D0A202020202020226576656E7473223A207B0D0A202020202020202022626173654576656E74223A207B0D0A2020202020202020202022636C69636B223A206E756C6C2C0D0A202020202020202020202264626C636C69636B223A206E756C6C2C0D0A20202020202020202020226D6F757365656E746572223A206E756C6C2C0D0A20202020202020202020226D6F7573656C65617665223A206E756C6C0D0A20202020202020207D2C0D0A202020202020202022616476616E6365644576656E7473223A207B0D0A2020202020202020202022766E6F64654D6F756E746564223A206E756C6C2C0D0A2020202020202020202022766E6F64654265666F72654D6F756E74223A206E756C6C0D0A20202020202020207D2C0D0A202020202020202022696E7465726163744576656E7473223A205B5D0D0A2020202020207D2C0D0A202020202020226B6579223A20225461626C65734261736963222C0D0A202020202020226368617274436F6E666967223A207B0D0A2020202020202020226B6579223A20225461626C65734261736963222C0D0A20202020202020202263686172744B6579223A2022565461626C65734261736963222C0D0A202020202020202022636F6E4B6579223A202256435461626C65734261736963222C0D0A2020202020202020227469746C65223A2022E59FBAE7A180E58886E9A1B5E8A1A8E6A0BC222C0D0A20202020202020202263617465676F7279223A20225461626C6573222C0D0A20202020202020202263617465676F72794E616D65223A2022E8A1A8E6A0BC222C0D0A2020202020202020227061636B616765223A20225461626C6573222C0D0A20202020202020202263686172744672616D65223A2022636F6D6D6F6E222C0D0A202020202020202022696D616765223A20227461626C65735F62617369632E706E67220D0A2020202020207D2C0D0A202020202020226F7074696F6E223A207B0D0A20202020202020202264617461736574223A207B0D0A202020202020202020202264696D656E73696F6E73223A205B0D0A2020202020202020202020207B0D0A2020202020202020202020202020227469746C65223A2022E59CBAE7AB99222C0D0A2020202020202020202020202020226B6579223A202270726F647563744E616D65222C0D0A202020202020202020202020202022616C69676E223A202263656E746572220D0A2020202020202020202020207D2C0D0A2020202020202020202020207B0D0A2020202020202020202020202020227469746C65223A2022E5BC82E5B8B8E7B1BBE59E8B222C0D0A2020202020202020202020202020226B6579223A2022746F74616C53756D222C0D0A202020202020202020202020202022616C69676E223A202263656E746572220D0A2020202020202020202020207D2C0D0A2020202020202020202020207B0D0A2020202020202020202020202020227469746C65223A2022E4B88AE68AA5E4BABA222C0D0A2020202020202020202020202020226B6579223A2022746F74616C416D6F756E74222C0D0A202020202020202020202020202022616C69676E223A202263656E746572220D0A2020202020202020202020207D2C0D0A2020202020202020202020207B0D0A2020202020202020202020202020227469746C65223A2022E4B88AE68AA5E697B6E997B4222C0D0A2020202020202020202020202020226B6579223A202274696D65222C0D0A202020202020202020202020202022616C69676E223A202263656E746572220D0A2020202020202020202020207D0D0A202020202020202020205D2C0D0A2020202020202020202022736F75726365223A205B0D0A2020202020202020202020207B0D0A2020202020202020202020202020226B6579223A20302C0D0A20202020202020202020202020202270726F647563744E616D65223A2022E9858DE6B094E7AB99222C0D0A202020202020202020202020202022746F74616C53756D223A2022E7AEA1E7BABFE99488E89A80222C0D0A202020202020202020202020202022746F74616C416D6F756E74223A2022E5BCA0E5AE87222C0D0A20202020202020202020202020202274696D65223A2022323032342D342D32362031333A31303A3137220D0A2020202020202020202020207D2C0D0A2020202020202020202020207B0D0A2020202020202020202020202020226B6579223A20312C0D0A20202020202020202020202020202270726F647563744E616D65223A2022E6B885E7AEA1E58886E8BE93E7AB99222C0D0A202020202020202020202020202022746F74616C53756D223A2022E794B2E783B7E6A380E6B58BE4BBAAE69585E99A9C222C0D0A202020202020202020202020202022746F74616C416D6F756E74223A2022E69D8EE4BFA1222C0D0A20202020202020202020202020202274696D65223A2022323032342D342D32362031333A31303A3137220D0A2020202020202020202020207D2C0D0A2020202020202020202020207B0D0A2020202020202020202020202020226B6579223A20322C0D0A20202020202020202020202020202270726F647563744E616D65223A2022E997A8E7AB99222C0D0A202020202020202020202020202022746F74616C53756D223A2022E998B2E88590E5B182E7A0B4E68D9F222C0D0A202020202020202020202020202022746F74616C416D6F756E74223A2022E78E8BE5BBBA222C0D0A20202020202020202020202020202274696D65223A2022323032342D342D32362031333A31303A3137220D0A2020202020202020202020207D2C0D0A2020202020202020202020207B0D0A2020202020202020202020202020226B6579223A20332C0D0A20202020202020202020202020202270726F647563744E616D65223A2022E58E8BE6B094E7AB99222C0D0A202020202020202020202020202022746F74616C53756D223A2022555053E5BC82E5938D222C0D0A202020202020202020202020202022746F74616C416D6F756E74223A2022E5BCA0E88AB3222C0D0A20202020202020202020202020202274696D65223A2022323032342D342D32362031333A31303A3137220D0A2020202020202020202020207D2C0D0A2020202020202020202020207B0D0A2020202020202020202020202020226B6579223A20342C0D0A20202020202020202020202020202270726F647563744E616D65223A2022E9858DE6B094E7AB99222C0D0A202020202020202020202020202022746F74616C53756D223A2022E58E8BE58A9BE8A1A8E5A496E7BDA9E68D9FE59D8F222C0D0A202020202020202020202020202022746F74616C416D6F756E74223A2022E78E8BE58D9A222C0D0A20202020202020202020202020202274696D65223A2022323032342D342D32362031333A31303A3137220D0A2020202020202020202020207D2C0D0A2020202020202020202020207B0D0A2020202020202020202020202020226B6579223A20352C0D0A20202020202020202020202020202270726F647563744E616D65223A2022E6B885E7AEA1E58886E8BE93E7AB99222C0D0A202020202020202020202020202022746F74616C53756D223A2022E794B2E783B7E6A380E6B58BE4BBAAE69585E99A9C222C0D0A202020202020202020202020202022746F74616C416D6F756E74223A2022E69D8EE4BFA1222C0D0A20202020202020202020202020202274696D65223A2022323032342D342D32362031333A31303A3137220D0A2020202020202020202020207D2C0D0A2020202020202020202020207B0D0A2020202020202020202020202020226B6579223A20362C0D0A20202020202020202020202020202270726F647563744E616D65223A2022E997A8E7AB99222C0D0A202020202020202020202020202022746F74616C53756D223A2022E79B91E68EA7E794BBE99DA2E68E89E7BABF222C0D0A202020202020202020202020202022746F74616C416D6F756E74223A2022E58898E5B3B0222C0D0A20202020202020202020202020202274696D65223A2022323032342D342D32362031333A31303A3137220D0A2020202020202020202020207D0D0A202020202020202020205D0D0A20202020202020207D2C0D0A202020202020202022706167696E6174696F6E223A207B0D0A202020202020202020202270616765223A20312C0D0A20202020202020202020227061676553697A65223A20352C0D0A20202020202020202020226F6E4368616E6765223A20226D3D3E7B732E76616C75652E706167653D6D7D220D0A20202020202020207D2C0D0A202020202020202022616C69676E223A202263656E746572222C0D0A2020202020202020227374796C65223A207B0D0A2020202020202020202022626F72646572223A20226F6E222C0D0A202020202020202020202273696E676C65436F6C756D6E223A20226F6666222C0D0A202020202020202020202273696E676C654C696E65223A20226F6666222C0D0A2020202020202020202022626F74746F6D426F726465726564223A20226F6E222C0D0A202020202020202020202273747269706564223A20226F6E222C0D0A2020202020202020202022666F6E7453697A65223A2031362C0D0A2020202020202020202022626F726465725769647468223A20302C0D0A2020202020202020202022626F72646572436F6C6F72223A2022626C61636B222C0D0A2020202020202020202022626F726465725374796C65223A2022736F6C6964220D0A20202020202020207D2C0D0A202020202020202022696E70757453686F77223A20226E6F6E65220D0A2020202020207D0D0A202020207D2C0D0A202020207B0D0A202020202020226964223A20226A6E37356E676D703475773030222C0D0A20202020202022697347726F7570223A2066616C73652C0D0A2020202020202261747472223A207B0D0A20202020202020202278223A20313336342C0D0A20202020202020202279223A203132382C0D0A20202020202020202277223A203531372C0D0A20202020202020202268223A203238372C0D0A2020202020202020226F666673657458223A20302C0D0A2020202020202020226F666673657459223A20302C0D0A2020202020202020227A496E646578223A202D310D0A2020202020207D2C0D0A202020202020227374796C6573223A207B0D0A20202020202020202266696C74657253686F77223A2066616C73652C0D0A202020202020202022687565526F74617465223A20302C0D0A2020202020202020227361747572617465223A20312C0D0A202020202020202022636F6E7472617374223A20312C0D0A2020202020202020226272696768746E657373223A20312C0D0A2020202020202020226F706163697479223A20312C0D0A202020202020202022726F746174655A223A20302C0D0A202020202020202022726F7461746558223A20302C0D0A202020202020202022726F7461746559223A20302C0D0A202020202020202022736B657758223A20302C0D0A202020202020202022736B657759223A20302C0D0A202020202020202022626C656E644D6F6465223A20226E6F726D616C222C0D0A202020202020202022616E696D6174696F6E73223A205B5D0D0A2020202020207D2C0D0A2020202020202270726576696577223A207B0D0A2020202020202020226F766572466C6F7748696464656E223A2066616C73650D0A2020202020207D2C0D0A20202020202022737461747573223A207B0D0A2020202020202020226C6F636B223A2066616C73652C0D0A20202020202020202268696465223A2066616C73650D0A2020202020207D2C0D0A2020202020202272657175657374223A207B0D0A202020202020202022726571756573744461746154797065223A20302C0D0A202020202020202022726571756573744874747054797065223A2022676574222C0D0A2020202020202020227265717565737455726C223A2022222C0D0A20202020202020202272657175657374496E74657276616C223A206E756C6C2C0D0A20202020202020202272657175657374496E74657276616C556E6974223A20227365636F6E64222C0D0A20202020202020202272657175657374436F6E74656E7454797065223A20302C0D0A20202020202020202272657175657374506172616D73426F647954797065223A20226E6F6E65222C0D0A2020202020202020227265717565737453514C436F6E74656E74223A207B0D0A202020202020202020202273716C223A202273656C656374202A2066726F6D20207768657265220D0A20202020202020207D2C0D0A20202020202020202272657175657374506172616D73223A207B0D0A2020202020202020202022426F6479223A207B0D0A20202020202020202020202022666F726D2D64617461223A207B7D2C0D0A20202020202020202020202022782D7777772D666F726D2D75726C656E636F646564223A207B7D2C0D0A202020202020202020202020226A736F6E223A2022222C0D0A20202020202020202020202022786D6C223A2022220D0A202020202020202020207D2C0D0A2020202020202020202022486561646572223A207B7D2C0D0A2020202020202020202022506172616D73223A207B7D0D0A20202020202020207D0D0A2020202020207D2C0D0A2020202020202266696C746572223A206E756C6C2C0D0A202020202020226576656E7473223A207B0D0A202020202020202022626173654576656E74223A207B0D0A2020202020202020202022636C69636B223A206E756C6C2C0D0A202020202020202020202264626C636C69636B223A206E756C6C2C0D0A20202020202020202020226D6F757365656E746572223A206E756C6C2C0D0A20202020202020202020226D6F7573656C65617665223A206E756C6C0D0A20202020202020207D2C0D0A202020202020202022616476616E6365644576656E7473223A207B0D0A2020202020202020202022766E6F64654D6F756E746564223A206E756C6C2C0D0A2020202020202020202022766E6F64654265666F72654D6F756E74223A206E756C6C0D0A20202020202020207D2C0D0A202020202020202022696E7465726163744576656E7473223A205B5D0D0A2020202020207D2C0D0A202020202020226B6579223A20225461626C65734261736963222C0D0A202020202020226368617274436F6E666967223A207B0D0A2020202020202020226B6579223A20225461626C65734261736963222C0D0A20202020202020202263686172744B6579223A2022565461626C65734261736963222C0D0A202020202020202022636F6E4B6579223A202256435461626C65734261736963222C0D0A2020202020202020227469746C65223A2022E59FBAE7A180E58886E9A1B5E8A1A8E6A0BC222C0D0A20202020202020202263617465676F7279223A20225461626C6573222C0D0A20202020202020202263617465676F72794E616D65223A2022E8A1A8E6A0BC222C0D0A2020202020202020227061636B616765223A20225461626C6573222C0D0A20202020202020202263686172744672616D65223A2022636F6D6D6F6E222C0D0A202020202020202022696D616765223A20227461626C65735F62617369632E706E67220D0A2020202020207D2C0D0A202020202020226F7074696F6E223A207B0D0A20202020202020202264617461736574223A207B0D0A202020202020202020202264696D656E73696F6E73223A205B0D0A2020202020202020202020207B0D0A2020202020202020202020202020227469746C65223A2022E6B4BBE58AA8E7B1BBE59E8B222C0D0A2020202020202020202020202020226B6579223A202270726F647563744E616D65222C0D0A202020202020202020202020202022616C69676E223A202263656E746572220D0A2020202020202020202020207D2C0D0A2020202020202020202020207B0D0A2020202020202020202020202020227469746C65223A2022E4B88AE68AA5E4BABA222C0D0A2020202020202020202020202020226B6579223A2022746F74616C53756D222C0D0A202020202020202020202020202022616C69676E223A202263656E746572220D0A2020202020202020202020207D2C0D0A2020202020202020202020207B0D0A2020202020202020202020202020227469746C65223A2022E4B88AE68AA5E697B6E997B4222C0D0A2020202020202020202020202020226B6579223A2022746F74616C416D6F756E74222C0D0A202020202020202020202020202022616C69676E223A202263656E746572220D0A2020202020202020202020207D0D0A202020202020202020205D2C0D0A2020202020202020202022736F75726365223A205B0D0A2020202020202020202020207B0D0A2020202020202020202020202020226B6579223A20302C0D0A20202020202020202020202020202270726F647563744E616D65223A2022E5AE89E585A8E5ADA6E4B9A0222C0D0A202020202020202020202020202022746F74616C53756D223A2022E5BCA0E5AE87222C0D0A202020202020202020202020202022746F74616C416D6F756E74223A2022323032342D342D32362031333A31303A3137220D0A2020202020202020202020207D2C0D0A2020202020202020202020207B0D0A2020202020202020202020202020226B6579223A20312C0D0A20202020202020202020202020202270726F647563744E616D65223A2022E689BFE58C85E59586E69599E882B2E59FB9E8AEAD222C0D0A202020202020202020202020202022746F74616C53756D223A2022E58898E5A487222C0D0A202020202020202020202020202022746F74616C416D6F756E74223A2022323032342D342D32362031333A31303A3137220D0A2020202020202020202020207D2C0D0A2020202020202020202020207B0D0A2020202020202020202020202020226B6579223A20322C0D0A20202020202020202020202020202270726F647563744E616D65223A202251485345E5AE89E585A8E4BC9AE8AEAE222C0D0A202020202020202020202020202022746F74616C53756D223A2022E585B3E7BEBD222C0D0A202020202020202020202020202022746F74616C416D6F756E74223A2022323032342D342D32362031333A31303A3137220D0A2020202020202020202020207D2C0D0A2020202020202020202020207B0D0A2020202020202020202020202020226B6579223A20332C0D0A20202020202020202020202020202270726F647563744E616D65223A2022E5AE89E585A8E7BB8FE9AA8CE58886E4BAAB222C0D0A202020202020202020202020202022746F74616C53756D223A2022E5BCA0E9A39E222C0D0A202020202020202020202020202022746F74616C416D6F756E74223A2022323032342D342D32362031333A31303A3137220D0A2020202020202020202020207D2C0D0A2020202020202020202020207B0D0A2020202020202020202020202020226B6579223A20342C0D0A20202020202020202020202020202270726F647563744E616D65223A2022E58DB1E999A9E59BA0E7B4A0E8BEA8E8AF86222C0D0A202020202020202020202020202022746F74616C53756D223A2022E69BB9E6938D222C0D0A202020202020202020202020202022746F74616C416D6F756E74223A2022323032342D342D32362031333A31303A3137220D0A2020202020202020202020207D2C0D0A2020202020202020202020207B0D0A2020202020202020202020202020226B6579223A20352C0D0A20202020202020202020202020202270726F647563744E616D65223A2022E5B7A5E4BD9CE5BEAAE78EAFE58886E69E90222C0D0A202020202020202020202020202022746F74616C53756D223A2022E59095E5B883222C0D0A202020202020202020202020202022746F74616C416D6F756E74223A2022323032342D342D32362031333A31303A3137220D0A2020202020202020202020207D2C0D0A2020202020202020202020207B0D0A2020202020202020202020202020226B6579223A20362C0D0A20202020202020202020202020202270726F647563744E616D65223A2022E5AE89E585A8E5ADA6E4B9A0222C0D0A202020202020202020202020202022746F74616C53756D223A2022E5BCA0E5AE87222C0D0A202020202020202020202020202022746F74616C416D6F756E74223A2022323032342D342D32362031333A31303A3137220D0A2020202020202020202020207D0D0A202020202020202020205D0D0A20202020202020207D2C0D0A202020202020202022706167696E6174696F6E223A207B0D0A202020202020202020202270616765223A20312C0D0A20202020202020202020227061676553697A65223A20352C0D0A20202020202020202020226F6E4368616E6765223A20226D3D3E7B732E76616C75652E706167653D6D7D220D0A20202020202020207D2C0D0A202020202020202022616C69676E223A202263656E746572222C0D0A2020202020202020227374796C65223A207B0D0A2020202020202020202022626F72646572223A20226F6E222C0D0A202020202020202020202273696E676C65436F6C756D6E223A20226F6666222C0D0A202020202020202020202273696E676C654C696E65223A20226F6666222C0D0A2020202020202020202022626F74746F6D426F726465726564223A20226F6E222C0D0A202020202020202020202273747269706564223A20226F6E222C0D0A2020202020202020202022666F6E7453697A65223A2031362C0D0A2020202020202020202022626F726465725769647468223A20302C0D0A2020202020202020202022626F72646572436F6C6F72223A2022626C61636B222C0D0A2020202020202020202022626F726465725374796C65223A2022736F6C6964220D0A20202020202020207D2C0D0A202020202020202022696E70757453686F77223A20226E6F6E65220D0A2020202020207D0D0A202020207D2C0D0A202020207B0D0A202020202020226964223A202276783674306E3368676C733030222C0D0A20202020202022697347726F7570223A2066616C73652C0D0A2020202020202261747472223A207B0D0A20202020202020202278223A203631382C0D0A20202020202020202279223A203133382C0D0A20202020202020202277223A203637352C0D0A20202020202020202268223A203534352C0D0A2020202020202020226F666673657458223A20302C0D0A2020202020202020226F666673657459223A20302C0D0A2020202020202020227A496E646578223A202D310D0A2020202020207D2C0D0A202020202020227374796C6573223A207B0D0A20202020202020202266696C74657253686F77223A2066616C73652C0D0A202020202020202022687565526F74617465223A20302C0D0A2020202020202020227361747572617465223A20312C0D0A202020202020202022636F6E7472617374223A20312C0D0A2020202020202020226272696768746E657373223A20312C0D0A2020202020202020226F706163697479223A20312C0D0A202020202020202022726F746174655A223A20302C0D0A202020202020202022726F7461746558223A20302C0D0A202020202020202022726F7461746559223A20302C0D0A202020202020202022736B657758223A20302C0D0A202020202020202022736B657759223A20302C0D0A202020202020202022626C656E644D6F6465223A20226E6F726D616C222C0D0A202020202020202022616E696D6174696F6E73223A205B5D0D0A2020202020207D2C0D0A2020202020202270726576696577223A207B0D0A2020202020202020226F766572466C6F7748696464656E223A2066616C73650D0A2020202020207D2C0D0A20202020202022737461747573223A207B0D0A2020202020202020226C6F636B223A2066616C73652C0D0A20202020202020202268696465223A2066616C73650D0A2020202020207D2C0D0A2020202020202272657175657374223A207B0D0A202020202020202022726571756573744461746154797065223A20302C0D0A202020202020202022726571756573744874747054797065223A2022676574222C0D0A2020202020202020227265717565737455726C223A2022222C0D0A20202020202020202272657175657374496E74657276616C223A206E756C6C2C0D0A20202020202020202272657175657374496E74657276616C556E6974223A20227365636F6E64222C0D0A20202020202020202272657175657374436F6E74656E7454797065223A20302C0D0A20202020202020202272657175657374506172616D73426F647954797065223A20226E6F6E65222C0D0A2020202020202020227265717565737453514C436F6E74656E74223A207B0D0A202020202020202020202273716C223A202273656C656374202A2066726F6D20207768657265220D0A20202020202020207D2C0D0A20202020202020202272657175657374506172616D73223A207B0D0A2020202020202020202022426F6479223A207B0D0A20202020202020202020202022666F726D2D64617461223A207B7D2C0D0A20202020202020202020202022782D7777772D666F726D2D75726C656E636F646564223A207B7D2C0D0A202020202020202020202020226A736F6E223A2022222C0D0A20202020202020202020202022786D6C223A2022220D0A202020202020202020207D2C0D0A2020202020202020202022486561646572223A207B7D2C0D0A2020202020202020202022506172616D73223A207B7D0D0A20202020202020207D0D0A2020202020207D2C0D0A2020202020202266696C746572223A206E756C6C2C0D0A202020202020226576656E7473223A207B0D0A202020202020202022626173654576656E74223A207B0D0A2020202020202020202022636C69636B223A206E756C6C2C0D0A202020202020202020202264626C636C69636B223A206E756C6C2C0D0A20202020202020202020226D6F757365656E746572223A206E756C6C2C0D0A20202020202020202020226D6F7573656C65617665223A206E756C6C0D0A20202020202020207D2C0D0A202020202020202022616476616E6365644576656E7473223A207B0D0A2020202020202020202022766E6F64654D6F756E746564223A206E756C6C2C0D0A2020202020202020202022766E6F64654265666F72654D6F756E74223A206E756C6C0D0A20202020202020207D2C0D0A202020202020202022696E7465726163744576656E7473223A205B5D0D0A2020202020207D2C0D0A202020202020226B6579223A20224D6170416D6170222C0D0A202020202020226368617274436F6E666967223A207B0D0A2020202020202020226B6579223A20224D6170416D6170222C0D0A20202020202020202263686172744B6579223A2022564D6170416D6170222C0D0A202020202020202022636F6E4B6579223A202256434D6170416D6170222C0D0A2020202020202020227469746C65223A2022E9AB98E5BEB7E59CB0E59BBE222C0D0A20202020202020202263617465676F7279223A20224D617073222C0D0A20202020202020202263617465676F72794E616D65223A2022E59CB0E59BBE222C0D0A2020202020202020227061636B616765223A2022436861727473222C0D0A20202020202020202263686172744672616D65223A2022636F6D6D6F6E222C0D0A202020202020202022696D616765223A20226D61705F616D61702E706E67220D0A2020202020207D2C0D0A202020202020226F7074696F6E223A207B0D0A20202020202020202264617461736574223A207B0D0A20202020202020202020226D61726B657273223A205B0D0A2020202020202020202020207B0D0A2020202020202020202020202020226E616D65223A2022E5B487E5B79EE5B7A5E4B89AE59BADE58CBAE9858DE6B094E7AB99222C0D0A20202020202020202020202020202276616C7565223A2031302C0D0A202020202020202020202020202022706F736974696F6E223A205B0D0A202020202020202020202020202020203130332E3732333830312C0D0A2020202020202020202020202020202033302E3632373230360D0A20202020202020202020202020205D0D0A2020202020202020202020207D2C0D0A2020202020202020202020207B0D0A2020202020202020202020202020226E616D65223A2022E5BDADE5B79EE9858DE6B094E7AB99222C0D0A20202020202020202020202020202276616C7565223A2031352C0D0A202020202020202020202020202022706F736974696F6E223A205B0D0A202020202020202020202020202020203130332E3934313930392C0D0A2020202020202020202020202020202033312E3035333331320D0A20202020202020202020202020205D0D0A2020202020202020202020207D2C0D0A2020202020202020202020207B0D0A2020202020202020202020202020226E616D65223A2022E99D92E799BDE6B19FE8BE93E6B094E696B0E7AB99222C0D0A20202020202020202020202020202276616C7565223A2032302C0D0A202020202020202020202020202022706F736974696F6E223A205B0D0A202020202020202020202020202020203130342E3232363835352C0D0A2020202020202020202020202020202033302E3838333733350D0A20202020202020202020202020205D0D0A2020202020202020202020207D0D0A202020202020202020205D0D0A20202020202020207D2C0D0A2020202020202020226D61704F7074696F6E73223A207B0D0A20202020202020202020227069746368223A2036302C0D0A2020202020202020202022736B79436F6C6F72223A202223353341394445222C0D0A2020202020202020202022616D61704B6579223A20223639326130366466396434616435633161393136636535313239653035643865222C0D0A2020202020202020202022616D61705374796C654B6579223A20226461726B222C0D0A2020202020202020202022616D61705374796C654B6579437573746F6D223A2022222C0D0A2020202020202020202022616D61704C6F6E223A203130342E3036353833372C0D0A2020202020202020202022616D61704C6174223A2033302E3635373334392C0D0A2020202020202020202022616D61705A696E646578223A2031302C0D0A20202020202020202020226D61726B6572223A207B0D0A2020202020202020202020202266696C6C436F6C6F72223A2022234542343833464646222C0D0A2020202020202020202020202266696C6C4F706163697479223A20302E352C0D0A202020202020202020202020227374726F6B65436F6C6F72223A20227768697465222C0D0A202020202020202020202020227374726F6B65576569676874223A20322C0D0A202020202020202020202020227374726F6B654F706163697479223A20302E352C0D0A202020202020202020202020227A496E646578223A2031302C0D0A20202020202020202020202022627562626C65223A20747275652C0D0A20202020202020202020202022637572736F72223A2022706F696E746572222C0D0A20202020202020202020202022636C69636B61626C65223A20747275650D0A202020202020202020207D2C0D0A20202020202020202020226D61704D61726B657254797065223A20224D61726B6572222C0D0A2020202020202020202022766965774D6F6465223A20223244222C0D0A20202020202020202020226C616E67223A20227A685F636E222C0D0A20202020202020202020226665617475726573223A205B0D0A20202020202020202020202022706F696E74222C0D0A20202020202020202020202022726F6164222C0D0A202020202020202020202020226267222C0D0A202020202020202020202020226275696C64696E67220D0A202020202020202020205D0D0A20202020202020207D0D0A2020202020207D0D0A202020207D2C0D0A202020207B0D0A202020202020226964223A2022327937647A707979637836303030222C0D0A20202020202022697347726F7570223A2066616C73652C0D0A2020202020202261747472223A207B0D0A20202020202020202278223A2032382C0D0A20202020202020202279223A203436322C0D0A20202020202020202277223A203530302C0D0A20202020202020202268223A203234392C0D0A2020202020202020226F666673657458223A20302C0D0A2020202020202020226F666673657459223A20302C0D0A2020202020202020227A496E646578223A202D310D0A2020202020207D2C0D0A202020202020227374796C6573223A207B0D0A20202020202020202266696C74657253686F77223A2066616C73652C0D0A202020202020202022687565526F74617465223A20302C0D0A2020202020202020227361747572617465223A20312C0D0A202020202020202022636F6E7472617374223A20312C0D0A2020202020202020226272696768746E657373223A20312C0D0A2020202020202020226F706163697479223A20312C0D0A202020202020202022726F746174655A223A20302C0D0A202020202020202022726F7461746558223A20302C0D0A202020202020202022726F7461746559223A20302C0D0A202020202020202022736B657758223A20302C0D0A202020202020202022736B657759223A20302C0D0A202020202020202022626C656E644D6F6465223A20226E6F726D616C222C0D0A202020202020202022616E696D6174696F6E73223A205B5D0D0A2020202020207D2C0D0A2020202020202270726576696577223A207B0D0A2020202020202020226F766572466C6F7748696464656E223A2066616C73650D0A2020202020207D2C0D0A20202020202022737461747573223A207B0D0A2020202020202020226C6F636B223A2066616C73652C0D0A20202020202020202268696465223A2066616C73650D0A2020202020207D2C0D0A2020202020202272657175657374223A207B0D0A202020202020202022726571756573744461746154797065223A20302C0D0A202020202020202022726571756573744874747054797065223A2022676574222C0D0A2020202020202020227265717565737455726C223A2022222C0D0A20202020202020202272657175657374496E74657276616C223A206E756C6C2C0D0A20202020202020202272657175657374496E74657276616C556E6974223A20227365636F6E64222C0D0A20202020202020202272657175657374436F6E74656E7454797065223A20302C0D0A20202020202020202272657175657374506172616D73426F647954797065223A20226E6F6E65222C0D0A2020202020202020227265717565737453514C436F6E74656E74223A207B0D0A202020202020202020202273716C223A202273656C656374202A2066726F6D20207768657265220D0A20202020202020207D2C0D0A20202020202020202272657175657374506172616D73223A207B0D0A2020202020202020202022426F6479223A207B0D0A20202020202020202020202022666F726D2D64617461223A207B7D2C0D0A20202020202020202020202022782D7777772D666F726D2D75726C656E636F646564223A207B7D2C0D0A202020202020202020202020226A736F6E223A2022222C0D0A20202020202020202020202022786D6C223A2022220D0A202020202020202020207D2C0D0A2020202020202020202022486561646572223A207B7D2C0D0A2020202020202020202022506172616D73223A207B7D0D0A20202020202020207D0D0A2020202020207D2C0D0A2020202020202266696C746572223A206E756C6C2C0D0A202020202020226576656E7473223A207B0D0A202020202020202022626173654576656E74223A207B0D0A2020202020202020202022636C69636B223A206E756C6C2C0D0A202020202020202020202264626C636C69636B223A206E756C6C2C0D0A20202020202020202020226D6F757365656E746572223A206E756C6C2C0D0A20202020202020202020226D6F7573656C65617665223A206E756C6C0D0A20202020202020207D2C0D0A202020202020202022616476616E6365644576656E7473223A207B0D0A2020202020202020202022766E6F64654D6F756E746564223A206E756C6C2C0D0A2020202020202020202022766E6F64654265666F72654D6F756E74223A206E756C6C0D0A20202020202020207D2C0D0A202020202020202022696E7465726163744576656E7473223A205B5D0D0A2020202020207D2C0D0A202020202020226B6579223A202243617073756C654368617274222C0D0A202020202020226368617274436F6E666967223A207B0D0A2020202020202020226B6579223A202243617073756C654368617274222C0D0A20202020202020202263686172744B6579223A20225643617073756C654368617274222C0D0A202020202020202022636F6E4B6579223A2022564343617073756C654368617274222C0D0A2020202020202020227469746C65223A2022E883B6E59B8AE69FB1E59BBE222C0D0A20202020202020202263617465676F7279223A202242617273222C0D0A20202020202020202263617465676F72794E616D65223A2022E69FB1E78AB6E59BBE222C0D0A2020202020202020227061636B616765223A2022436861727473222C0D0A20202020202020202263686172744672616D65223A2022636F6D6D6F6E222C0D0A202020202020202022696D616765223A202263617073756C652E706E67220D0A2020202020207D2C0D0A202020202020226F7074696F6E223A207B0D0A20202020202020202264617461736574223A207B0D0A202020202020202020202264696D656E73696F6E73223A205B0D0A202020202020202020202020226E616D65222C0D0A2020202020202020202020202276616C7565220D0A202020202020202020205D2C0D0A2020202020202020202022736F75726365223A205B0D0A2020202020202020202020207B0D0A2020202020202020202020202020226E616D65223A2022E5BD93E5898DE5B7A5E58D95222C0D0A20202020202020202020202020202276616C7565223A203735300D0A2020202020202020202020207D2C0D0A2020202020202020202020207B0D0A2020202020202020202020202020226E616D65223A2022E5AE9EE99985E5AE8CE68890222C0D0A20202020202020202020202020202276616C7565223A203639350D0A2020202020202020202020207D2C0D0A2020202020202020202020207B0D0A2020202020202020202020202020226E616D65223A2022E589A9E4BD99E5AE8CE68890E9878F222C0D0A20202020202020202020202020202276616C7565223A2035350D0A2020202020202020202020207D0D0A202020202020202020205D0D0A20202020202020207D2C0D0A202020202020202022636F6C6F7273223A205B0D0A202020202020202020202223633465626164222C0D0A202020202020202020202223366265366331222C0D0A202020202020202020202223613061376536222C0D0A202020202020202020202223393664656538222C0D0A202020202020202020202223336662316533220D0A20202020202020205D2C0D0A202020202020202022756E6974223A2022222C0D0A2020202020202020226974656D486569676874223A2031352C0D0A20202020202020202276616C7565466F6E7453697A65223A2031392C0D0A20202020202020202270616464696E675269676874223A2035302C0D0A20202020202020202270616464696E674C656674223A2035302C0D0A20202020202020202273686F7756616C7565223A20747275650D0A2020202020207D0D0A202020207D2C0D0A202020207B0D0A202020202020226964223A2022353061736C6134716B6838303030222C0D0A20202020202022697347726F7570223A2066616C73652C0D0A2020202020202261747472223A207B0D0A20202020202020202278223A20313336302C0D0A20202020202020202279223A203830392C0D0A20202020202020202277223A203533392C0D0A20202020202020202268223A203232392C0D0A2020202020202020226F666673657458223A20302C0D0A2020202020202020226F666673657459223A20302C0D0A2020202020202020227A496E646578223A202D310D0A2020202020207D2C0D0A202020202020227374796C6573223A207B0D0A20202020202020202266696C74657253686F77223A2066616C73652C0D0A202020202020202022687565526F74617465223A20302C0D0A2020202020202020227361747572617465223A20312C0D0A202020202020202022636F6E7472617374223A20312C0D0A2020202020202020226272696768746E657373223A20312C0D0A2020202020202020226F706163697479223A20312C0D0A202020202020202022726F746174655A223A20302C0D0A202020202020202022726F7461746558223A20302C0D0A202020202020202022726F7461746559223A20302C0D0A202020202020202022736B657758223A20302C0D0A202020202020202022736B657759223A20302C0D0A202020202020202022626C656E644D6F6465223A20226E6F726D616C222C0D0A202020202020202022616E696D6174696F6E73223A205B5D0D0A2020202020207D2C0D0A2020202020202270726576696577223A207B0D0A2020202020202020226F766572466C6F7748696464656E223A2066616C73650D0A2020202020207D2C0D0A20202020202022737461747573223A207B0D0A2020202020202020226C6F636B223A2066616C73652C0D0A20202020202020202268696465223A2066616C73650D0A2020202020207D2C0D0A2020202020202272657175657374223A207B0D0A202020202020202022726571756573744461746154797065223A20302C0D0A202020202020202022726571756573744874747054797065223A2022676574222C0D0A2020202020202020227265717565737455726C223A2022222C0D0A20202020202020202272657175657374496E74657276616C223A206E756C6C2C0D0A20202020202020202272657175657374496E74657276616C556E6974223A20227365636F6E64222C0D0A20202020202020202272657175657374436F6E74656E7454797065223A20302C0D0A20202020202020202272657175657374506172616D73426F647954797065223A20226E6F6E65222C0D0A2020202020202020227265717565737453514C436F6E74656E74223A207B0D0A202020202020202020202273716C223A202273656C656374202A2066726F6D20207768657265220D0A20202020202020207D2C0D0A20202020202020202272657175657374506172616D73223A207B0D0A2020202020202020202022426F6479223A207B0D0A20202020202020202020202022666F726D2D64617461223A207B7D2C0D0A20202020202020202020202022782D7777772D666F726D2D75726C656E636F646564223A207B7D2C0D0A202020202020202020202020226A736F6E223A2022222C0D0A20202020202020202020202022786D6C223A2022220D0A202020202020202020207D2C0D0A2020202020202020202022486561646572223A207B7D2C0D0A2020202020202020202022506172616D73223A207B7D0D0A20202020202020207D0D0A2020202020207D2C0D0A2020202020202266696C746572223A206E756C6C2C0D0A202020202020226576656E7473223A207B0D0A202020202020202022626173654576656E74223A207B0D0A2020202020202020202022636C69636B223A206E756C6C2C0D0A202020202020202020202264626C636C69636B223A206E756C6C2C0D0A20202020202020202020226D6F757365656E746572223A206E756C6C2C0D0A20202020202020202020226D6F7573656C65617665223A206E756C6C0D0A20202020202020207D2C0D0A202020202020202022616476616E6365644576656E7473223A207B0D0A2020202020202020202022766E6F64654D6F756E746564223A206E756C6C2C0D0A2020202020202020202022766E6F64654265666F72654D6F756E74223A206E756C6C0D0A20202020202020207D2C0D0A202020202020202022696E7465726163744576656E7473223A205B5D0D0A2020202020207D2C0D0A202020202020226B6579223A20225461626C65734261736963222C0D0A202020202020226368617274436F6E666967223A207B0D0A2020202020202020226B6579223A20225461626C65734261736963222C0D0A20202020202020202263686172744B6579223A2022565461626C65734261736963222C0D0A202020202020202022636F6E4B6579223A202256435461626C65734261736963222C0D0A2020202020202020227469746C65223A2022E59FBAE7A180E58886E9A1B5E8A1A8E6A0BC222C0D0A20202020202020202263617465676F7279223A20225461626C6573222C0D0A20202020202020202263617465676F72794E616D65223A2022E8A1A8E6A0BC222C0D0A2020202020202020227061636B616765223A20225461626C6573222C0D0A20202020202020202263686172744672616D65223A2022636F6D6D6F6E222C0D0A202020202020202022696D616765223A20227461626C65735F62617369632E706E67220D0A2020202020207D2C0D0A202020202020226F7074696F6E223A207B0D0A20202020202020202264617461736574223A207B0D0A202020202020202020202264696D656E73696F6E73223A205B0D0A2020202020202020202020207B0D0A2020202020202020202020202020227469746C65223A2022E59CBAE7AB99222C0D0A2020202020202020202020202020226B6579223A202270726F647563744E616D65222C0D0A202020202020202020202020202022616C69676E223A202263656E746572220D0A2020202020202020202020207D2C0D0A2020202020202020202020207B0D0A2020202020202020202020202020227469746C65223A2022E580BCE78FADE4BABA222C0D0A2020202020202020202020202020226B6579223A2022746F74616C53756D222C0D0A202020202020202020202020202022616C69676E223A202263656E746572220D0A2020202020202020202020207D0D0A202020202020202020205D2C0D0A2020202020202020202022736F75726365223A205B0D0A2020202020202020202020207B0D0A2020202020202020202020202020226B6579223A20302C0D0A20202020202020202020202020202270726F647563744E616D65223A2022E9858DE6B094E7AB99222C0D0A202020202020202020202020202022746F74616C53756D223A2022E5BCA0E5AE87220D0A2020202020202020202020207D2C0D0A2020202020202020202020207B0D0A2020202020202020202020202020226B6579223A20312C0D0A20202020202020202020202020202270726F647563744E616D65223A2022E6B885E7AEA1E58886E8BE93E7AB99222C0D0A202020202020202020202020202022746F74616C53756D223A2022E69D8EE4BFA1220D0A2020202020202020202020207D2C0D0A2020202020202020202020207B0D0A2020202020202020202020202020226B6579223A20322C0D0A20202020202020202020202020202270726F647563744E616D65223A2022E997A8E7AB99222C0D0A202020202020202020202020202022746F74616C53756D223A2022E78E8BE5BBBA220D0A2020202020202020202020207D0D0A202020202020202020205D0D0A20202020202020207D2C0D0A202020202020202022706167696E6174696F6E223A207B0D0A202020202020202020202270616765223A20312C0D0A20202020202020202020227061676553697A65223A20352C0D0A20202020202020202020226F6E4368616E6765223A20226D3D3E7B732E76616C75652E706167653D6D7D220D0A20202020202020207D2C0D0A202020202020202022616C69676E223A202263656E746572222C0D0A2020202020202020227374796C65223A207B0D0A2020202020202020202022626F72646572223A20226F6E222C0D0A202020202020202020202273696E676C65436F6C756D6E223A20226F6666222C0D0A202020202020202020202273696E676C654C696E65223A20226F6666222C0D0A2020202020202020202022626F74746F6D426F726465726564223A20226F6E222C0D0A202020202020202020202273747269706564223A20226F6E222C0D0A2020202020202020202022666F6E7453697A65223A2031362C0D0A2020202020202020202022626F726465725769647468223A20302C0D0A2020202020202020202022626F72646572436F6C6F72223A2022626C61636B222C0D0A2020202020202020202022626F726465725374796C65223A2022736F6C6964220D0A20202020202020207D2C0D0A202020202020202022696E70757453686F77223A20226E6F6E65220D0A2020202020207D0D0A202020207D2C0D0A202020207B0D0A202020202020226964223A2022757168346A797538336D383030222C0D0A20202020202022697347726F7570223A2066616C73652C0D0A2020202020202261747472223A207B0D0A20202020202020202278223A20313333302C0D0A20202020202020202279223A203436302C0D0A20202020202020202277223A203632382C0D0A20202020202020202268223A203330302C0D0A2020202020202020226F666673657458223A20302C0D0A2020202020202020226F666673657459223A20302C0D0A2020202020202020227A496E646578223A202D310D0A2020202020207D2C0D0A202020202020227374796C6573223A207B0D0A20202020202020202266696C74657253686F77223A2066616C73652C0D0A202020202020202022687565526F74617465223A20302C0D0A2020202020202020227361747572617465223A20312C0D0A202020202020202022636F6E7472617374223A20312C0D0A2020202020202020226272696768746E657373223A20312C0D0A2020202020202020226F706163697479223A20312C0D0A202020202020202022726F746174655A223A20302C0D0A202020202020202022726F7461746558223A20302C0D0A202020202020202022726F7461746559223A20302C0D0A202020202020202022736B657758223A20302C0D0A202020202020202022736B657759223A20302C0D0A202020202020202022626C656E644D6F6465223A20226E6F726D616C222C0D0A202020202020202022616E696D6174696F6E73223A205B5D0D0A2020202020207D2C0D0A2020202020202270726576696577223A207B0D0A2020202020202020226F766572466C6F7748696464656E223A2066616C73650D0A2020202020207D2C0D0A20202020202022737461747573223A207B0D0A2020202020202020226C6F636B223A2066616C73652C0D0A20202020202020202268696465223A2066616C73650D0A2020202020207D2C0D0A2020202020202272657175657374223A207B0D0A202020202020202022726571756573744461746154797065223A20302C0D0A202020202020202022726571756573744874747054797065223A2022676574222C0D0A2020202020202020227265717565737455726C223A2022222C0D0A20202020202020202272657175657374496E74657276616C223A206E756C6C2C0D0A20202020202020202272657175657374496E74657276616C556E6974223A20227365636F6E64222C0D0A20202020202020202272657175657374436F6E74656E7454797065223A20302C0D0A20202020202020202272657175657374506172616D73426F647954797065223A20226E6F6E65222C0D0A2020202020202020227265717565737453514C436F6E74656E74223A207B0D0A202020202020202020202273716C223A202273656C656374202A2066726F6D20207768657265220D0A20202020202020207D2C0D0A20202020202020202272657175657374506172616D73223A207B0D0A2020202020202020202022426F6479223A207B0D0A20202020202020202020202022666F726D2D64617461223A207B7D2C0D0A20202020202020202020202022782D7777772D666F726D2D75726C656E636F646564223A207B7D2C0D0A202020202020202020202020226A736F6E223A2022222C0D0A20202020202020202020202022786D6C223A2022220D0A202020202020202020207D2C0D0A2020202020202020202022486561646572223A207B7D2C0D0A2020202020202020202022506172616D73223A207B7D0D0A20202020202020207D0D0A2020202020207D2C0D0A2020202020202266696C746572223A206E756C6C2C0D0A202020202020226576656E7473223A207B0D0A202020202020202022626173654576656E74223A207B0D0A2020202020202020202022636C69636B223A206E756C6C2C0D0A202020202020202020202264626C636C69636B223A206E756C6C2C0D0A20202020202020202020226D6F757365656E746572223A206E756C6C2C0D0A20202020202020202020226D6F7573656C65617665223A206E756C6C0D0A20202020202020207D2C0D0A202020202020202022616476616E6365644576656E7473223A207B0D0A2020202020202020202022766E6F64654D6F756E746564223A206E756C6C2C0D0A2020202020202020202022766E6F64654265666F72654D6F756E74223A206E756C6C0D0A20202020202020207D2C0D0A202020202020202022696E7465726163744576656E7473223A205B5D0D0A2020202020207D2C0D0A202020202020226B6579223A20224C696E654772616469656E7453696E676C65222C0D0A202020202020226368617274436F6E666967223A207B0D0A2020202020202020226B6579223A20224C696E654772616469656E7453696E676C65222C0D0A20202020202020202263686172744B6579223A2022564C696E654772616469656E7453696E676C65222C0D0A202020202020202022636F6E4B6579223A202256434C696E654772616469656E7453696E676C65222C0D0A2020202020202020227469746C65223A2022E58D95E68A98E7BABFE6B890E58F98E99DA2E7A7AFE59BBE222C0D0A20202020202020202263617465676F7279223A20224C696E6573222C0D0A20202020202020202263617465676F72794E616D65223A2022E68A98E7BABFE59BBE222C0D0A2020202020202020227061636B616765223A2022436861727473222C0D0A20202020202020202263686172744672616D65223A202265636861727473222C0D0A202020202020202022696D616765223A20226C696E655F6772616469656E745F73696E676C652E706E67220D0A2020202020207D2C0D0A202020202020226F7074696F6E223A207B0D0A2020202020202020226C6567656E64223A207B0D0A202020202020202020202273686F77223A20747275652C0D0A202020202020202020202274797065223A20227363726F6C6C222C0D0A202020202020202020202278223A202263656E746572222C0D0A202020202020202020202279223A2022746F70222C0D0A202020202020202020202269636F6E223A2022636972636C65222C0D0A20202020202020202020226F7269656E74223A2022686F72697A6F6E74616C222C0D0A2020202020202020202022746578745374796C65223A207B0D0A20202020202020202020202022636F6C6F72223A202223423942384345222C0D0A20202020202020202020202022666F6E7453697A65223A2031380D0A202020202020202020207D2C0D0A20202020202020202020226974656D486569676874223A2031352C0D0A20202020202020202020226974656D5769647468223A2031352C0D0A202020202020202020202270616765546578745374796C65223A207B0D0A20202020202020202020202022636F6C6F72223A202223423942384345220D0A202020202020202020207D0D0A20202020202020207D2C0D0A2020202020202020227841786973223A207B0D0A202020202020202020202273686F77223A20747275652C0D0A20202020202020202020226E616D65223A2022222C0D0A20202020202020202020226E616D65476170223A2031352C0D0A20202020202020202020226E616D65546578745374796C65223A207B0D0A20202020202020202020202022636F6C6F72223A202223423942384345222C0D0A20202020202020202020202022666F6E7453697A65223A2031320D0A202020202020202020207D2C0D0A2020202020202020202022696E7665727365223A2066616C73652C0D0A2020202020202020202022617869734C6162656C223A207B0D0A2020202020202020202020202273686F77223A20747275652C0D0A20202020202020202020202022666F6E7453697A65223A2031322C0D0A20202020202020202020202022636F6C6F72223A202223423942384345222C0D0A20202020202020202020202022726F74617465223A20300D0A202020202020202020207D2C0D0A2020202020202020202022706F736974696F6E223A2022626F74746F6D222C0D0A2020202020202020202022617869734C696E65223A207B0D0A2020202020202020202020202273686F77223A20747275652C0D0A202020202020202020202020226C696E655374796C65223A207B0D0A202020202020202020202020202022636F6C6F72223A202223423942384345222C0D0A2020202020202020202020202020227769647468223A20310D0A2020202020202020202020207D2C0D0A202020202020202020202020226F6E5A65726F223A20747275650D0A202020202020202020207D2C0D0A2020202020202020202022617869735469636B223A207B0D0A2020202020202020202020202273686F77223A20747275652C0D0A202020202020202020202020226C656E677468223A2031320D0A202020202020202020207D2C0D0A202020202020202020202273706C69744C696E65223A207B0D0A2020202020202020202020202273686F77223A2066616C73652C0D0A202020202020202020202020226C696E655374796C65223A207B0D0A202020202020202020202020202022636F6C6F72223A202223343834373533222C0D0A2020202020202020202020202020227769647468223A20312C0D0A20202020202020202020202020202274797065223A2022736F6C6964220D0A2020202020202020202020207D0D0A202020202020202020207D2C0D0A202020202020202020202274797065223A202263617465676F7279220D0A20202020202020207D2C0D0A2020202020202020227941786973223A207B0D0A202020202020202020202273686F77223A20747275652C0D0A20202020202020202020226E616D65223A2022222C0D0A20202020202020202020226E616D65476170223A2031352C0D0A20202020202020202020226E616D65546578745374796C65223A207B0D0A20202020202020202020202022636F6C6F72223A202223423942384345222C0D0A20202020202020202020202022666F6E7453697A65223A2031320D0A202020202020202020207D2C0D0A2020202020202020202022696E7665727365223A2066616C73652C0D0A2020202020202020202022617869734C6162656C223A207B0D0A2020202020202020202020202273686F77223A20747275652C0D0A20202020202020202020202022666F6E7453697A65223A2031322C0D0A20202020202020202020202022636F6C6F72223A202223423942384345222C0D0A20202020202020202020202022726F74617465223A20300D0A202020202020202020207D2C0D0A2020202020202020202022706F736974696F6E223A20226C656674222C0D0A2020202020202020202022617869734C696E65223A207B0D0A2020202020202020202020202273686F77223A20747275652C0D0A202020202020202020202020226C696E655374796C65223A207B0D0A202020202020202020202020202022636F6C6F72223A202223423942384345222C0D0A2020202020202020202020202020227769647468223A20310D0A2020202020202020202020207D2C0D0A202020202020202020202020226F6E5A65726F223A20747275650D0A202020202020202020207D2C0D0A2020202020202020202022617869735469636B223A207B0D0A2020202020202020202020202273686F77223A20747275652C0D0A202020202020202020202020226C656E677468223A20350D0A202020202020202020207D2C0D0A202020202020202020202273706C69744C696E65223A207B0D0A2020202020202020202020202273686F77223A20747275652C0D0A202020202020202020202020226C696E655374796C65223A207B0D0A202020202020202020202020202022636F6C6F72223A202223343834373533222C0D0A2020202020202020202020202020227769647468223A20312C0D0A20202020202020202020202020202274797065223A2022736F6C6964220D0A2020202020202020202020207D0D0A202020202020202020207D2C0D0A202020202020202020202274797065223A202276616C7565220D0A20202020202020207D2C0D0A20202020202020202267726964223A207B0D0A202020202020202020202273686F77223A2066616C73652C0D0A20202020202020202020226C656674223A2022313025222C0D0A2020202020202020202022746F70223A20223630222C0D0A20202020202020202020227269676874223A2022313025222C0D0A2020202020202020202022626F74746F6D223A20223630220D0A20202020202020207D2C0D0A202020202020202022746F6F6C746970223A207B0D0A202020202020202020202273686F77223A20747275652C0D0A202020202020202020202274726967676572223A202261786973222C0D0A202020202020202020202261786973506F696E746572223A207B0D0A2020202020202020202020202274797065223A20226C696E65220D0A202020202020202020207D0D0A20202020202020207D2C0D0A20202020202020202264617461736574223A207B0D0A202020202020202020202264696D656E73696F6E73223A205B0D0A20202020202020202020202022E68AA5E8ADA6E695B031222C0D0A20202020202020202020202022E68AA5E8ADA6E695B0220D0A202020202020202020205D2C0D0A2020202020202020202022736F75726365223A205B0D0A2020202020202020202020207B0D0A202020202020202020202020202022E68AA5E8ADA6E695B031223A202231E69C88222C0D0A202020202020202020202020202022E68AA5E8ADA6E695B0223A203132300D0A2020202020202020202020207D2C0D0A2020202020202020202020207B0D0A202020202020202020202020202022E68AA5E8ADA6E695B031223A202232E69C88222C0D0A202020202020202020202020202022E68AA5E8ADA6E695B0223A203230300D0A2020202020202020202020207D2C0D0A2020202020202020202020207B0D0A202020202020202020202020202022E68AA5E8ADA6E695B031223A202233E69C88222C0D0A202020202020202020202020202022E68AA5E8ADA6E695B0223A203135300D0A2020202020202020202020207D2C0D0A2020202020202020202020207B0D0A202020202020202020202020202022E68AA5E8ADA6E695B031223A202234E69C88222C0D0A202020202020202020202020202022E68AA5E8ADA6E695B0223A2038300D0A2020202020202020202020207D2C0D0A2020202020202020202020207B0D0A202020202020202020202020202022E68AA5E8ADA6E695B031223A202235E69C88222C0D0A202020202020202020202020202022E68AA5E8ADA6E695B0223A2037300D0A2020202020202020202020207D2C0D0A2020202020202020202020207B0D0A202020202020202020202020202022E68AA5E8ADA6E695B031223A202236E69C88222C0D0A202020202020202020202020202022E68AA5E8ADA6E695B0223A203131300D0A2020202020202020202020207D2C0D0A2020202020202020202020207B0D0A202020202020202020202020202022E68AA5E8ADA6E695B031223A202237E69C88222C0D0A202020202020202020202020202022E68AA5E8ADA6E695B0223A203133300D0A2020202020202020202020207D2C0D0A2020202020202020202020207B0D0A202020202020202020202020202022E68AA5E8ADA6E695B031223A202238E69C88222C0D0A202020202020202020202020202022E68AA5E8ADA6E695B0223A203138300D0A2020202020202020202020207D2C0D0A2020202020202020202020207B0D0A202020202020202020202020202022E68AA5E8ADA6E695B031223A202239E69C88222C0D0A202020202020202020202020202022E68AA5E8ADA6E695B0223A203133350D0A2020202020202020202020207D2C0D0A2020202020202020202020207B0D0A202020202020202020202020202022E68AA5E8ADA6E695B031223A20223130E69C88222C0D0A202020202020202020202020202022E68AA5E8ADA6E695B0223A203131320D0A2020202020202020202020207D2C0D0A2020202020202020202020207B0D0A202020202020202020202020202022E68AA5E8ADA6E695B031223A20223131E69C88222C0D0A202020202020202020202020202022E68AA5E8ADA6E695B0223A2038370D0A2020202020202020202020207D2C0D0A2020202020202020202020207B0D0A202020202020202020202020202022E68AA5E8ADA6E695B031223A20223132E69C88222C0D0A202020202020202020202020202022E68AA5E8ADA6E695B0223A2035350D0A2020202020202020202020207D0D0A202020202020202020205D0D0A20202020202020207D2C0D0A202020202020202022736572696573223A205B0D0A202020202020202020207B0D0A2020202020202020202020202274797065223A20226C696E65222C0D0A20202020202020202020202022736D6F6F7468223A2066616C73652C0D0A2020202020202020202020202273796D626F6C53697A65223A20352C0D0A202020202020202020202020226C6162656C223A207B0D0A20202020202020202020202020202273686F77223A20747275652C0D0A202020202020202020202020202022706F736974696F6E223A2022746F70222C0D0A202020202020202020202020202022636F6C6F72223A202223666666222C0D0A202020202020202020202020202022666F6E7453697A65223A2031320D0A2020202020202020202020207D2C0D0A202020202020202020202020226C696E655374796C65223A207B0D0A20202020202020202020202020202274797065223A2022736F6C6964222C0D0A2020202020202020202020202020227769647468223A20330D0A2020202020202020202020207D2C0D0A20202020202020202020202022617265615374796C65223A207B0D0A2020202020202020202020202020226F706163697479223A20302E382C0D0A202020202020202020202020202022636F6C6F72223A207B0D0A2020202020202020202020202020202022636F6C6F7253746F7073223A205B0D0A2020202020202020202020202020202020207B0D0A2020202020202020202020202020202020202020226F6666736574223A20302C0D0A202020202020202020202020202020202020202022636F6C6F72223A2022726762612837332C203134362C203235352C20302E3529220D0A2020202020202020202020202020202020207D2C0D0A2020202020202020202020202020202020207B0D0A2020202020202020202020202020202020202020226F6666736574223A20312C0D0A202020202020202020202020202020202020202022636F6C6F72223A20227267626128302C302C302C203029220D0A2020202020202020202020202020202020207D0D0A202020202020202020202020202020205D2C0D0A202020202020202020202020202020202278223A20302C0D0A202020202020202020202020202020202279223A20302C0D0A20202020202020202020202020202020227832223A20302C0D0A20202020202020202020202020202020227932223A20312C0D0A202020202020202020202020202020202274797065223A20226C696E656172222C0D0A2020202020202020202020202020202022676C6F62616C223A2066616C73650D0A20202020202020202020202020207D0D0A2020202020202020202020207D0D0A202020202020202020207D0D0A20202020202020205D2C0D0A2020202020202020226261636B67726F756E64436F6C6F72223A20227267626128302C302C302C3029220D0A2020202020207D0D0A202020207D2C0D0A202020207B0D0A202020202020226964223A202234367166756B646D756F71303030222C0D0A20202020202022697347726F7570223A2066616C73652C0D0A2020202020202261747472223A207B0D0A20202020202020202278223A20313638342E352C0D0A20202020202020202279223A20313337382C0D0A20202020202020202277223A203339352C0D0A20202020202020202268223A2033322C0D0A2020202020202020226F666673657458223A20302C0D0A2020202020202020226F666673657459223A20302C0D0A2020202020202020227A496E646578223A202D310D0A2020202020207D2C0D0A202020202020227374796C6573223A207B0D0A20202020202020202266696C74657253686F77223A2066616C73652C0D0A202020202020202022687565526F74617465223A20302C0D0A2020202020202020227361747572617465223A20312C0D0A202020202020202022636F6E7472617374223A20312C0D0A2020202020202020226272696768746E657373223A20312C0D0A2020202020202020226F706163697479223A20312C0D0A202020202020202022726F746174655A223A20302C0D0A202020202020202022726F7461746558223A20302C0D0A202020202020202022726F7461746559223A20302C0D0A202020202020202022736B657758223A20302C0D0A202020202020202022736B657759223A20302C0D0A202020202020202022626C656E644D6F6465223A20226E6F726D616C222C0D0A202020202020202022616E696D6174696F6E73223A205B5D0D0A2020202020207D2C0D0A2020202020202270726576696577223A207B0D0A2020202020202020226F766572466C6F7748696464656E223A2066616C73650D0A2020202020207D2C0D0A20202020202022737461747573223A207B0D0A2020202020202020226C6F636B223A2066616C73652C0D0A20202020202020202268696465223A2066616C73650D0A2020202020207D2C0D0A2020202020202272657175657374223A207B0D0A202020202020202022726571756573744461746154797065223A20302C0D0A202020202020202022726571756573744874747054797065223A2022676574222C0D0A2020202020202020227265717565737455726C223A2022222C0D0A20202020202020202272657175657374496E74657276616C223A206E756C6C2C0D0A20202020202020202272657175657374496E74657276616C556E6974223A20227365636F6E64222C0D0A20202020202020202272657175657374436F6E74656E7454797065223A20302C0D0A20202020202020202272657175657374506172616D73426F647954797065223A20226E6F6E65222C0D0A2020202020202020227265717565737453514C436F6E74656E74223A207B0D0A202020202020202020202273716C223A202273656C656374202A2066726F6D20207768657265220D0A20202020202020207D2C0D0A20202020202020202272657175657374506172616D73223A207B0D0A2020202020202020202022426F6479223A207B0D0A20202020202020202020202022666F726D2D64617461223A207B7D2C0D0A20202020202020202020202022782D7777772D666F726D2D75726C656E636F646564223A207B7D2C0D0A202020202020202020202020226A736F6E223A2022222C0D0A20202020202020202020202022786D6C223A2022220D0A202020202020202020207D2C0D0A2020202020202020202022486561646572223A207B7D2C0D0A2020202020202020202022506172616D73223A207B7D0D0A20202020202020207D0D0A2020202020207D2C0D0A2020202020202266696C746572223A206E756C6C2C0D0A202020202020226576656E7473223A207B0D0A202020202020202022626173654576656E74223A207B0D0A2020202020202020202022636C69636B223A206E756C6C2C0D0A202020202020202020202264626C636C69636B223A206E756C6C2C0D0A20202020202020202020226D6F757365656E746572223A206E756C6C2C0D0A20202020202020202020226D6F7573656C65617665223A206E756C6C0D0A20202020202020207D2C0D0A202020202020202022616476616E6365644576656E7473223A207B0D0A2020202020202020202022766E6F64654D6F756E746564223A206E756C6C2C0D0A2020202020202020202022766E6F64654265666F72654D6F756E74223A206E756C6C0D0A20202020202020207D2C0D0A202020202020202022696E7465726163744576656E7473223A205B5D0D0A2020202020207D2C0D0A202020202020226B6579223A2022496E70757473506167696E6174696F6E222C0D0A202020202020226368617274436F6E666967223A207B0D0A2020202020202020226B6579223A2022496E70757473506167696E6174696F6E222C0D0A20202020202020202263686172744B6579223A202256496E70757473506167696E6174696F6E222C0D0A202020202020202022636F6E4B6579223A20225643496E70757473506167696E6174696F6E222C0D0A2020202020202020227469746C65223A2022E58886E9A1B5222C0D0A20202020202020202263617465676F7279223A2022496E70757473222C0D0A20202020202020202263617465676F72794E616D65223A2022E68EA7E4BBB6222C0D0A2020202020202020227061636B616765223A2022496E666F726D6174696F6E73222C0D0A20202020202020202263686172744672616D65223A2022737461746963222C0D0A202020202020202022696D616765223A2022696E707574735F706167696E6174696F6E2E706E67220D0A2020202020207D2C0D0A20202020202022696E746572616374416374696F6E73223A205B0D0A20202020202020207B0D0A2020202020202020202022696E74657261637454797065223A20226368616E6765222C0D0A2020202020202020202022696E7465726163744E616D65223A2022E98089E68BA9E5AE8CE68890222C0D0A2020202020202020202022636F6D706F6E656E74456D69744576656E7473223A207B0D0A2020202020202020202020202264617461223A205B0D0A20202020202020202020202020207B0D0A202020202020202020202020202020202276616C7565223A202264617461222C0D0A20202020202020202020202020202020226C6162656C223A2022E9A1B5E695B0220D0A20202020202020202020202020207D2C0D0A20202020202020202020202020207B0D0A202020202020202020202020202020202276616C7565223A20226461746132222C0D0A20202020202020202020202020202020226C6162656C223A2022E6AF8FE9A1B5E69DA1E695B0220D0A20202020202020202020202020207D0D0A2020202020202020202020205D0D0A202020202020202020207D0D0A20202020202020207D0D0A2020202020205D2C0D0A202020202020226F7074696F6E223A207B0D0A202020202020202022636F6D706F6E656E74496E7465726163744576656E744B6579223A202264617461222C0D0A2020202020202020227061676556616C7565223A20312C0D0A20202020202020202273697A6556616C7565223A205B0D0A20202020202020202020322C0D0A20202020202020202020342C0D0A20202020202020202020382C0D0A2020202020202020202031302C0D0A2020202020202020202032300D0A20202020202020205D2C0D0A2020202020202020227061676553697A65223A20342C0D0A20202020202020202264617461736574223A2031300D0A2020202020207D0D0A202020207D0D0A20205D2C0D0A20202272657175657374476C6F62616C436F6E666967223A207B0D0A20202020227265717565737444617461506F6E64223A205B0D0A2020202020207B0D0A20202020202020202264617461506F6E644964223A202232373874333672686A3477303030222C0D0A20202020202020202264617461506F6E644E616D65223A20224D717474E79B91E68EA7E695B0E68DAE222C0D0A20202020202020202264617461506F6E6452657175657374436F6E666967223A207B0D0A2020202020202020202022726571756573744461746154797065223A20322C0D0A2020202020202020202022726571756573744874747054797065223A2022676574222C0D0A20202020202020202020227265717565737455726C223A20222F62617368426F6172642F7374617473222C0D0A202020202020202020202272657175657374496E74657276616C223A206E756C6C2C0D0A202020202020202020202272657175657374496E74657276616C556E6974223A20227365636F6E64222C0D0A202020202020202020202272657175657374436F6E74656E7454797065223A20302C0D0A202020202020202020202272657175657374506172616D73426F647954797065223A20226E6F6E65222C0D0A20202020202020202020227265717565737453514C436F6E74656E74223A207B0D0A2020202020202020202020202273716C223A202273656C656374202A2066726F6D20207768657265220D0A202020202020202020207D2C0D0A202020202020202020202272657175657374506172616D73223A207B0D0A20202020202020202020202022426F6479223A207B0D0A202020202020202020202020202022666F726D2D64617461223A207B7D2C0D0A202020202020202020202020202022782D7777772D666F726D2D75726C656E636F646564223A207B7D2C0D0A2020202020202020202020202020226A736F6E223A2022222C0D0A202020202020202020202020202022786D6C223A2022220D0A2020202020202020202020207D2C0D0A20202020202020202020202022486561646572223A207B7D2C0D0A20202020202020202020202022506172616D73223A207B7D0D0A202020202020202020207D0D0A20202020202020207D0D0A2020202020207D2C0D0A2020202020207B0D0A20202020202020202264617461506F6E644964223A20223368736C7A3832746A6B38303030222C0D0A20202020202020202264617461506F6E644E616D65223A2022E69C8DE58AA1E599A8E4BFA1E681AF222C0D0A20202020202020202264617461506F6E6452657175657374436F6E666967223A207B0D0A2020202020202020202022726571756573744461746154797065223A20322C0D0A2020202020202020202022726571756573744874747054797065223A2022676574222C0D0A20202020202020202020227265717565737455726C223A20222F6D6F6E69746F722F736572766572222C0D0A202020202020202020202272657175657374496E74657276616C223A206E756C6C2C0D0A202020202020202020202272657175657374496E74657276616C556E6974223A20227365636F6E64222C0D0A202020202020202020202272657175657374436F6E74656E7454797065223A20302C0D0A202020202020202020202272657175657374506172616D73426F647954797065223A20226E6F6E65222C0D0A20202020202020202020227265717565737453514C436F6E74656E74223A207B0D0A2020202020202020202020202273716C223A202273656C656374202A2066726F6D20207768657265220D0A202020202020202020207D2C0D0A202020202020202020202272657175657374506172616D73223A207B0D0A20202020202020202020202022426F6479223A207B0D0A202020202020202020202020202022666F726D2D64617461223A207B7D2C0D0A202020202020202020202020202022782D7777772D666F726D2D75726C656E636F646564223A207B7D2C0D0A2020202020202020202020202020226A736F6E223A2022222C0D0A202020202020202020202020202022786D6C223A2022220D0A2020202020202020202020207D2C0D0A20202020202020202020202022486561646572223A207B7D2C0D0A20202020202020202020202022506172616D73223A207B7D0D0A202020202020202020207D0D0A20202020202020207D0D0A2020202020207D2C0D0A2020202020207B0D0A20202020202020202264617461506F6E644964223A2022326D7A37676B6D736A3869303030222C0D0A20202020202020202264617461506F6E644E616D65223A20226D717474E78AB6E68081222C0D0A20202020202020202264617461506F6E6452657175657374436F6E666967223A207B0D0A2020202020202020202022726571756573744461746154797065223A20322C0D0A2020202020202020202022726571756573744874747054797065223A2022676574222C0D0A20202020202020202020227265717565737455726C223A20222F62617368426F6172642F6D657472696373222C0D0A202020202020202020202272657175657374496E74657276616C223A206E756C6C2C0D0A202020202020202020202272657175657374496E74657276616C556E6974223A20227365636F6E64222C0D0A202020202020202020202272657175657374436F6E74656E7454797065223A20302C0D0A202020202020202020202272657175657374506172616D73426F647954797065223A20226E6F6E65222C0D0A20202020202020202020227265717565737453514C436F6E74656E74223A207B0D0A2020202020202020202020202273716C223A202273656C656374202A2066726F6D20207768657265220D0A202020202020202020207D2C0D0A202020202020202020202272657175657374506172616D73223A207B0D0A20202020202020202020202022426F6479223A207B0D0A202020202020202020202020202022666F726D2D64617461223A207B7D2C0D0A202020202020202020202020202022782D7777772D666F726D2D75726C656E636F646564223A207B7D2C0D0A2020202020202020202020202020226A736F6E223A2022222C0D0A202020202020202020202020202022786D6C223A2022220D0A2020202020202020202020207D2C0D0A20202020202020202020202022486561646572223A207B7D2C0D0A20202020202020202020202022506172616D73223A207B7D0D0A202020202020202020207D0D0A20202020202020207D0D0A2020202020207D2C0D0A2020202020207B0D0A20202020202020202264617461506F6E644964223A202235616738316F6B6B706C6F303030222C0D0A20202020202020202264617461506F6E644E616D65223A2022202020202020E8AEBEE5A487E7BB9FE8AEA1222C0D0A20202020202020202264617461506F6E6452657175657374436F6E666967223A207B0D0A2020202020202020202022726571756573744461746154797065223A20322C0D0A2020202020202020202022726571756573744874747054797065223A2022676574222C0D0A20202020202020202020227265717565737455726C223A20222F696F742F6465766963652F737461746973746963222C0D0A202020202020202020202272657175657374496E74657276616C223A20352C0D0A202020202020202020202272657175657374496E74657276616C556E6974223A20227365636F6E64222C0D0A202020202020202020202272657175657374436F6E74656E7454797065223A20302C0D0A202020202020202020202272657175657374506172616D73426F647954797065223A20226E6F6E65222C0D0A20202020202020202020227265717565737453514C436F6E74656E74223A207B0D0A2020202020202020202020202273716C223A202273656C656374202A2066726F6D20207768657265220D0A202020202020202020207D2C0D0A202020202020202020202272657175657374506172616D73223A207B0D0A20202020202020202020202022426F6479223A207B0D0A202020202020202020202020202022666F726D2D64617461223A207B7D2C0D0A202020202020202020202020202022782D7777772D666F726D2D75726C656E636F646564223A207B7D2C0D0A2020202020202020202020202020226A736F6E223A2022222C0D0A202020202020202020202020202022786D6C223A2022220D0A2020202020202020202020207D2C0D0A20202020202020202020202022486561646572223A207B7D2C0D0A20202020202020202020202022506172616D73223A207B7D0D0A202020202020202020207D0D0A20202020202020207D0D0A2020202020207D0D0A202020205D2C0D0A2020202022726571756573744F726967696E55726C223A202268747470733A2F2F696F742E666173746265652E636E2F70726F642D617069222C0D0A202020202272657175657374496E74657276616C223A20302C0D0A202020202272657175657374496E74657276616C556E6974223A20227365636F6E64222C0D0A202020202272657175657374506172616D73223A207B0D0A20202020202022426F6479223A207B0D0A202020202020202022666F726D2D64617461223A207B7D2C0D0A202020202020202022782D7777772D666F726D2D75726C656E636F646564223A207B7D2C0D0A2020202020202020226A736F6E223A2022222C0D0A202020202020202022786D6C223A2022220D0A2020202020207D2C0D0A20202020202022486561646572223A207B7D2C0D0A20202020202022506172616D73223A207B7D0D0A202020207D0D0A20207D0D0A7D, '2024-04-18 11:09:49', '1', '2024-04-26 16:41:07'); + +-- ---------------------------- +-- Table structure for iot_group +-- ---------------------------- +DROP TABLE IF EXISTS `iot_group`; +CREATE TABLE `iot_group` ( + `group_id` bigint NOT NULL AUTO_INCREMENT COMMENT '分组ID', + `group_name` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL COMMENT '分组名称', + `group_order` tinyint NOT NULL DEFAULT 0 COMMENT '分组排序', + `user_id` bigint NOT NULL COMMENT '用户ID', + `user_name` varchar(30) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL DEFAULT '' COMMENT '用户昵称', + `del_flag` char(1) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT '0' COMMENT '删除标志(0代表存在 2代表删除)', + `create_by` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT '' COMMENT '创建者', + `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间', + `update_by` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT '' COMMENT '更新者', + `update_time` datetime NULL DEFAULT NULL COMMENT '更新时间', + `remark` varchar(500) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT NULL COMMENT '备注', + PRIMARY KEY (`group_id`) USING BTREE, + INDEX `iot_group_index_user_id`(`user_id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 7 CHARACTER SET = utf8mb3 COLLATE = utf8mb3_general_ci COMMENT = '设备分组' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of iot_group +-- ---------------------------- + +-- ---------------------------- +-- Table structure for iot_modbus_config +-- ---------------------------- +DROP TABLE IF EXISTS `iot_modbus_config`; +CREATE TABLE `iot_modbus_config` ( + `id` bigint NOT NULL AUTO_INCREMENT COMMENT '业务id', + `product_id` bigint NOT NULL COMMENT '所属产品id', + `identifier` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL COMMENT '关联属性', + `slave` int NULL DEFAULT NULL COMMENT '从机地址', + `address` int NOT NULL COMMENT '寄存器地址', + `is_readonly` tinyint(1) NOT NULL COMMENT '是否只读(0-否,1-是)', + `data_type` varchar(20) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT NULL COMMENT 'modbus数据类型', + `quantity` int NULL DEFAULT NULL COMMENT '读取个数', + `type` tinyint(1) NOT NULL COMMENT '寄存器类型 1-IO寄存器 2-数据寄存器', + `bit_order` int NULL DEFAULT NULL COMMENT 'bit位排序', + `sort` int NULL DEFAULT NULL COMMENT '排序', + `del_flag` char(1) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT '0' COMMENT '删除标志(0代表存在 2代表删除)', + `create_by` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT '' COMMENT '创建者', + `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间', + `update_by` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT '' COMMENT '更新者', + `update_time` datetime NULL DEFAULT NULL COMMENT '更新时间', + `remark` varchar(500) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT NULL COMMENT '备注', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb3 COLLATE = utf8mb3_general_ci COMMENT = 'modbus配置表' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of iot_modbus_config +-- ---------------------------- + +-- ---------------------------- +-- Table structure for iot_modbus_job +-- ---------------------------- +DROP TABLE IF EXISTS `iot_modbus_job`; +CREATE TABLE `iot_modbus_job` ( + `task_id` bigint NOT NULL AUTO_INCREMENT COMMENT '任务id', + `job_name` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_ci NULL DEFAULT NULL COMMENT '任务名称', + `sub_device_id` bigint NOT NULL COMMENT '子设备id', + `sub_serial_number` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_ci NOT NULL COMMENT '子设备编号', + `device_type` tinyint(1) NULL DEFAULT NULL COMMENT '设备类型', + `command` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_ci NOT NULL COMMENT '指令', + `job_id` bigint NOT NULL COMMENT '任务id', + `status` char(1) CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_ci NOT NULL COMMENT '状态(0正常 1暂停)', + `create_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '创建者', + `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间', + `remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '备注信息', + PRIMARY KEY (`task_id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb3 COLLATE = utf8mb3_unicode_ci COMMENT = '轮训任务列表' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of iot_modbus_job +-- ---------------------------- + +-- ---------------------------- +-- Table structure for iot_modbus_params +-- ---------------------------- +DROP TABLE IF EXISTS `iot_modbus_params`; +CREATE TABLE `iot_modbus_params` ( + `id` bigint NOT NULL AUTO_INCREMENT COMMENT '业务id', + `product_id` bigint NOT NULL COMMENT '产品id', + `poll_type` tinyint(1) NOT NULL COMMENT '是否启动云端轮训(1-云端轮训,2-边缘采集)', + `slave_id` int NULL DEFAULT NULL COMMENT '默认的子设备地址', + `status_deter` tinyint(1) NULL DEFAULT NULL COMMENT '子设备状态判断方式 1-设备数据 2- 网关', + `deter_timer` varchar(20) CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_ci NULL DEFAULT NULL COMMENT '设备数据来判断子设备状态的时长(s)', + `poll_length` int NULL DEFAULT NULL COMMENT '批量读取的个数', + `create_by` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT '' COMMENT '创建者', + `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间', + `update_by` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT '' COMMENT '更新者', + `update_time` datetime NULL DEFAULT NULL COMMENT '更新时间', + `remark` varchar(500) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT NULL COMMENT '备注', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb3 COLLATE = utf8mb3_unicode_ci COMMENT = '产品modbus配置参数' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of iot_modbus_params +-- ---------------------------- + +-- ---------------------------- +-- Table structure for iot_product +-- ---------------------------- +DROP TABLE IF EXISTS `iot_product`; +CREATE TABLE `iot_product` ( + `product_id` bigint NOT NULL AUTO_INCREMENT COMMENT '产品ID', + `product_name` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL COMMENT '产品名称', + `protocol_code` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT NULL COMMENT '协议编号', + `category_id` bigint NOT NULL COMMENT '产品分类ID', + `category_name` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL COMMENT '产品分类名称', + `tenant_id` bigint NOT NULL COMMENT '租户ID', + `tenant_name` varchar(30) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL DEFAULT '' COMMENT '租户名称', + `is_sys` tinyint(1) NOT NULL DEFAULT 0 COMMENT '是否系统通用(0-否,1-是)', + `is_authorize` tinyint(1) NOT NULL DEFAULT 0 COMMENT '是否启用授权码(0-否,1-是)', + `mqtt_account` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT NULL COMMENT 'mqtt账号', + `mqtt_password` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT NULL COMMENT 'mqtt密码', + `mqtt_secret` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT NULL COMMENT '产品秘钥', + `status` tinyint(1) NULL DEFAULT NULL COMMENT '状态(1-未发布,2-已发布)', + `things_models_json` json NULL COMMENT '物模型JSON(属性、功能、事件)', + `device_type` tinyint(1) NULL DEFAULT 1 COMMENT '设备类型(1-直连设备、2-网关设备、3-监控设备)', + `network_method` tinyint(1) NULL DEFAULT 1 COMMENT '联网方式(1=wifi、2=蜂窝(2G/3G/4G/5G)、3=以太网、4=其他)', + `vertificate_method` tinyint(1) NULL DEFAULT 1 COMMENT '认证方式(1-简单认证、2-加密认证、3-简单+加密)', + `img_url` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT NULL COMMENT '图片地址', + `del_flag` char(1) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT '0' COMMENT '删除标志(0代表存在 2代表删除)', + `create_by` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT '' COMMENT '创建者', + `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间', + `update_by` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT '' COMMENT '更新者', + `update_time` datetime NULL DEFAULT NULL COMMENT '更新时间', + `remark` varchar(500) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT NULL COMMENT '备注', + `transport` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT NULL COMMENT '产品支持的传输协议', + `location_way` tinyint(1) NULL DEFAULT 1 COMMENT '定位方式(1=ip自动定位,2=设备定位,3=自定义)', + `guid` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT NULL COMMENT '产品关联的组态id', + PRIMARY KEY (`product_id`) USING BTREE, + INDEX `iot_product_index_category_id`(`category_id`) USING BTREE, + INDEX `iot_product_index_tenant_id`(`tenant_id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 137 CHARACTER SET = utf8mb3 COLLATE = utf8mb3_general_ci COMMENT = '产品' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of iot_product +-- ---------------------------- +INSERT INTO `iot_product` VALUES (96, '物联网开发板', 'JSON', 1, '电工照明', 1, 'admin', 0, 0, 'XinDa', 'P467433O1MT8MXS2', 'KWF32S3H95LH14LO', 2, '{\"properties\": [{\"id\": \"temperature\", \"name\": \"环境温度\", \"type\": 1, \"order\": 1, \"isChart\": 1, \"modelId\": 915, \"datatype\": {\"max\": 100, \"min\": -20, \"step\": 1, \"type\": \"integer\", \"unit\": \"°C\", \"trueText\": \"\", \"arrayType\": \"\", \"falseText\": \"\", \"maxLength\": 1024, \"arrayCount\": 0}, \"isHistory\": 1, \"isMonitor\": 1, \"isReadonly\": 1, \"name_zh_CN\": \"环境温度\", \"isSharePerm\": 1}]}', 2, 1, 3, NULL, '0', '', '2025-02-25 22:51:39', '', '2025-01-09 07:29:52', NULL, 'MQTT', 1, NULL); +INSERT INTO `iot_product` VALUES (135, '视频监控', 'JSON', 2, '家居安防', 1, 'admin', 0, 0, 'XinDa', 'P0JY568MA1P45JUT', 'K7B1377M8CVY5ZFX', 2, '{}', 3, 1, 3, '', '0', '', '2024-01-08 22:14:34', '', '2025-01-07 11:09:25', NULL, 'GB28181', 1, NULL); +INSERT INTO `iot_product` VALUES (136, '工控帮华泰数智网关', 'GONGKONGBANG-HTSZ', 1, '工控网关', 1, 'admin', 0, 0, 'XinDa', 'P86O045RRI11H265', 'KD1W717142P6SDZH', 2, '{\"functions\": [{\"id\": \"Q0.4\", \"name\": \"Q0.4\", \"type\": 2, \"order\": 0, \"isChart\": 0, \"modelId\": 911, \"datatype\": {\"max\": 100, \"min\": 0, \"step\": 1, \"type\": \"bool\", \"unit\": \"\", \"trueText\": \"闭合\", \"arrayType\": \"\", \"falseText\": \"断开\", \"maxLength\": 1024, \"arrayCount\": 0}, \"isHistory\": 1, \"isMonitor\": 0, \"isReadonly\": 0, \"name_zh_CN\": \"Q0.4\", \"isSharePerm\": 1}, {\"id\": \"Q0.3\", \"name\": \"Q0.3\", \"type\": 2, \"order\": 0, \"isChart\": 0, \"modelId\": 910, \"datatype\": {\"max\": 100, \"min\": 0, \"step\": 1, \"type\": \"bool\", \"unit\": \"\", \"trueText\": \"闭合\", \"arrayType\": \"\", \"falseText\": \"断开\", \"maxLength\": 1024, \"arrayCount\": 0}, \"isHistory\": 1, \"isMonitor\": 0, \"isReadonly\": 0, \"name_zh_CN\": \"Q0.3\", \"isSharePerm\": 1}, {\"id\": \"Q0.6\", \"name\": \"Q0.6\", \"type\": 2, \"order\": 0, \"isChart\": 0, \"modelId\": 913, \"datatype\": {\"max\": 100, \"min\": 0, \"step\": 1, \"type\": \"bool\", \"unit\": \"\", \"trueText\": \"闭合\", \"arrayType\": \"\", \"falseText\": \"断开\", \"maxLength\": 1024, \"arrayCount\": 0}, \"isHistory\": 1, \"isMonitor\": 0, \"isReadonly\": 0, \"name_zh_CN\": \"Q0.6\", \"isSharePerm\": 1}, {\"id\": \"Q0.5\", \"name\": \"Q0.5\", \"type\": 2, \"order\": 0, \"isChart\": 0, \"modelId\": 912, \"datatype\": {\"max\": 100, \"min\": 0, \"step\": 1, \"type\": \"bool\", \"unit\": \"\", \"trueText\": \"闭合\", \"arrayType\": \"\", \"falseText\": \"断开\", \"maxLength\": 1024, \"arrayCount\": 0}, \"isHistory\": 1, \"isMonitor\": 0, \"isReadonly\": 0, \"name_zh_CN\": \"Q0.5\", \"isSharePerm\": 1}, {\"id\": \"Q0.2\", \"name\": \"Q0.2\", \"type\": 2, \"order\": 0, \"isChart\": 0, \"modelId\": 909, \"datatype\": {\"max\": 100, \"min\": 0, \"step\": 1, \"type\": \"bool\", \"unit\": \"\", \"trueText\": \"闭合\", \"arrayType\": \"\", \"falseText\": \"断开\", \"maxLength\": 1024, \"arrayCount\": 0}, \"isHistory\": 1, \"isMonitor\": 0, \"isReadonly\": 0, \"name_zh_CN\": \"Q0.2\", \"isSharePerm\": 1}, {\"id\": \"Q0.1\", \"name\": \"Q0.1\", \"type\": 2, \"order\": 0, \"isChart\": 0, \"modelId\": 908, \"datatype\": {\"max\": 100, \"min\": 0, \"step\": 1, \"type\": \"bool\", \"unit\": \"\", \"trueText\": \"闭合\", \"arrayType\": \"\", \"falseText\": \"断开\", \"maxLength\": 1024, \"arrayCount\": 0}, \"isHistory\": 1, \"isMonitor\": 0, \"isReadonly\": 0, \"name_zh_CN\": \"Q0.1\", \"isSharePerm\": 1}, {\"id\": \"TIME\", \"name\": \"TIME\", \"type\": 2, \"order\": 0, \"isChart\": 0, \"modelId\": 914, \"datatype\": {\"max\": 100, \"min\": 1, \"step\": 1, \"type\": \"integer\", \"unit\": \"\", \"trueText\": \"\", \"arrayType\": \"\", \"falseText\": \"\", \"maxLength\": 1024, \"arrayCount\": 0}, \"isHistory\": 1, \"isMonitor\": 0, \"isReadonly\": 0, \"name_zh_CN\": \"TIME\", \"isSharePerm\": 1}], \"properties\": [{\"id\": \"AD16\", \"name\": \"AD16\", \"type\": 1, \"order\": 1, \"isChart\": 1, \"modelId\": 898, \"datatype\": {\"max\": 100, \"min\": 0, \"step\": 1, \"type\": \"decimal\", \"unit\": \"\", \"trueText\": \"\", \"arrayType\": \"\", \"falseText\": \"\", \"maxLength\": 1024, \"arrayCount\": 0}, \"isHistory\": 1, \"isMonitor\": 1, \"isReadonly\": 1, \"name_zh_CN\": \"AD16\", \"isSharePerm\": 1}, {\"id\": \"AD14\", \"name\": \"AD14\", \"type\": 1, \"order\": 6, \"isChart\": 1, \"modelId\": 896, \"datatype\": {\"max\": 100, \"min\": 0, \"step\": 1, \"type\": \"decimal\", \"unit\": \"\", \"trueText\": \"\", \"arrayType\": \"\", \"falseText\": \"\", \"maxLength\": 1024, \"arrayCount\": 0}, \"isHistory\": 1, \"isMonitor\": 1, \"isReadonly\": 1, \"name_zh_CN\": \"AD14\", \"isSharePerm\": 1}, {\"id\": \"AD15\", \"name\": \"AD15\", \"type\": 1, \"order\": 0, \"isChart\": 1, \"modelId\": 897, \"datatype\": {\"max\": 100, \"min\": 0, \"step\": 1, \"type\": \"decimal\", \"unit\": \"\", \"trueText\": \"\", \"arrayType\": \"\", \"falseText\": \"\", \"maxLength\": 1024, \"arrayCount\": 0}, \"isHistory\": 1, \"isMonitor\": 1, \"isReadonly\": 1, \"name_zh_CN\": \"AD15\", \"isSharePerm\": 1}, {\"id\": \"AD12\", \"name\": \"AD12\", \"type\": 1, \"order\": 4, \"isChart\": 1, \"modelId\": 894, \"datatype\": {\"max\": 100, \"min\": 0, \"step\": 1, \"type\": \"decimal\", \"unit\": \"\", \"trueText\": \"\", \"arrayType\": \"\", \"falseText\": \"\", \"maxLength\": 1024, \"arrayCount\": 0}, \"isHistory\": 1, \"isMonitor\": 1, \"isReadonly\": 1, \"name_zh_CN\": \"AD12\", \"isSharePerm\": 1}, {\"id\": \"AD13\", \"name\": \"AD13\", \"type\": 1, \"order\": 5, \"isChart\": 1, \"modelId\": 895, \"datatype\": {\"max\": 100, \"min\": 0, \"step\": 1, \"type\": \"decimal\", \"unit\": \"\", \"trueText\": \"\", \"arrayType\": \"\", \"falseText\": \"\", \"maxLength\": 1024, \"arrayCount\": 0}, \"isHistory\": 1, \"isMonitor\": 1, \"isReadonly\": 1, \"name_zh_CN\": \"AD13\", \"isSharePerm\": 1}, {\"id\": \"AD10\", \"name\": \"AD10\", \"type\": 1, \"order\": 2, \"isChart\": 1, \"modelId\": 892, \"datatype\": {\"max\": 100, \"min\": 0, \"step\": 1, \"type\": \"decimal\", \"unit\": \"\", \"trueText\": \"\", \"arrayType\": \"\", \"falseText\": \"\", \"maxLength\": 1024, \"arrayCount\": 0}, \"isHistory\": 1, \"isMonitor\": 1, \"isReadonly\": 1, \"name_zh_CN\": \"AD10\", \"isSharePerm\": 1}, {\"id\": \"AD11\", \"name\": \"AD11\", \"type\": 1, \"order\": 3, \"isChart\": 1, \"modelId\": 893, \"datatype\": {\"max\": 100, \"min\": 0, \"step\": 1, \"type\": \"decimal\", \"unit\": \"\", \"trueText\": \"\", \"arrayType\": \"\", \"falseText\": \"\", \"maxLength\": 1024, \"arrayCount\": 0}, \"isHistory\": 1, \"isMonitor\": 1, \"isReadonly\": 1, \"name_zh_CN\": \"AD11\", \"isSharePerm\": 1}, {\"id\": \"lat\", \"name\": \"lat\", \"type\": 1, \"order\": 0, \"isChart\": 1, \"modelId\": 906, \"datatype\": {\"max\": 100, \"min\": 0, \"step\": 1, \"type\": \"decimal\", \"unit\": \"\", \"trueText\": \"\", \"arrayType\": \"\", \"falseText\": \"\", \"maxLength\": 1024, \"arrayCount\": 0}, \"isHistory\": 1, \"isMonitor\": 1, \"isReadonly\": 1, \"name_zh_CN\": \"lat\", \"isSharePerm\": 1}, {\"id\": \"lng\", \"name\": \"lng\", \"type\": 1, \"order\": 0, \"isChart\": 1, \"modelId\": 905, \"datatype\": {\"max\": 100, \"min\": 0, \"step\": 1, \"type\": \"decimal\", \"unit\": \"\", \"trueText\": \"\", \"arrayType\": \"\", \"falseText\": \"\", \"maxLength\": 1024, \"arrayCount\": 0}, \"isHistory\": 1, \"isMonitor\": 1, \"isReadonly\": 1, \"name_zh_CN\": \"lng\", \"isSharePerm\": 1}, {\"id\": \"I0.2\", \"name\": \"I0.2\", \"type\": 1, \"order\": 0, \"isChart\": 0, \"modelId\": 900, \"datatype\": {\"max\": 100, \"min\": 0, \"step\": 1, \"type\": \"bool\", \"unit\": \"\", \"trueText\": \"闭合\", \"arrayType\": \"\", \"falseText\": \"断开\", \"maxLength\": 1024, \"arrayCount\": 0}, \"isHistory\": 1, \"isMonitor\": 0, \"isReadonly\": 1, \"name_zh_CN\": \"I0.2\", \"isSharePerm\": 1}, {\"id\": \"I0.1\", \"name\": \"I0.1\", \"type\": 1, \"order\": 0, \"isChart\": 0, \"modelId\": 899, \"datatype\": {\"max\": 100, \"min\": 0, \"step\": 1, \"type\": \"bool\", \"unit\": \"\", \"trueText\": \"闭合\", \"arrayType\": \"\", \"falseText\": \"断开\", \"maxLength\": 1024, \"arrayCount\": 0}, \"isHistory\": 1, \"isMonitor\": 0, \"isReadonly\": 1, \"name_zh_CN\": \"I0.1\", \"isSharePerm\": 1}, {\"id\": \"I0.4\", \"name\": \"I0.4\", \"type\": 1, \"order\": 0, \"isChart\": 0, \"modelId\": 902, \"datatype\": {\"max\": 100, \"min\": 0, \"step\": 1, \"type\": \"bool\", \"unit\": \"\", \"trueText\": \"闭合\", \"arrayType\": \"\", \"falseText\": \"断开\", \"maxLength\": 1024, \"arrayCount\": 0}, \"isHistory\": 1, \"isMonitor\": 0, \"isReadonly\": 1, \"name_zh_CN\": \"I0.4\", \"isSharePerm\": 1}, {\"id\": \"I0.3\", \"name\": \"I0.3\", \"type\": 1, \"order\": 0, \"isChart\": 0, \"modelId\": 901, \"datatype\": {\"max\": 100, \"min\": 0, \"step\": 1, \"type\": \"bool\", \"unit\": \"\", \"trueText\": \"闭合\", \"arrayType\": \"\", \"falseText\": \"断开\", \"maxLength\": 1024, \"arrayCount\": 0}, \"isHistory\": 1, \"isMonitor\": 0, \"isReadonly\": 1, \"name_zh_CN\": \"I0.3\", \"isSharePerm\": 1}, {\"id\": \"AD1\", \"name\": \"AD1\", \"type\": 1, \"order\": 0, \"isChart\": 1, \"modelId\": 883, \"datatype\": {\"max\": 100, \"min\": 0, \"step\": 1, \"type\": \"decimal\", \"unit\": \"\", \"trueText\": \"\", \"arrayType\": \"\", \"falseText\": \"\", \"maxLength\": 1024, \"arrayCount\": 0}, \"isHistory\": 1, \"isMonitor\": 1, \"isReadonly\": 1, \"name_zh_CN\": \"AD1\", \"isSharePerm\": 1}, {\"id\": \"I0.6\", \"name\": \"I0.6\", \"type\": 1, \"order\": 0, \"isChart\": 0, \"modelId\": 904, \"datatype\": {\"max\": 100, \"min\": 0, \"step\": 1, \"type\": \"bool\", \"unit\": \"\", \"trueText\": \"闭合\", \"arrayType\": \"\", \"falseText\": \"断开\", \"maxLength\": 1024, \"arrayCount\": 0}, \"isHistory\": 1, \"isMonitor\": 0, \"isReadonly\": 1, \"name_zh_CN\": \"I0.6\", \"isSharePerm\": 1}, {\"id\": \"I0.5\", \"name\": \"I0.5\", \"type\": 1, \"order\": 0, \"isChart\": 0, \"modelId\": 903, \"datatype\": {\"max\": 100, \"min\": 0, \"step\": 1, \"type\": \"bool\", \"unit\": \"\", \"trueText\": \"闭合\", \"arrayType\": \"\", \"falseText\": \"断开\", \"maxLength\": 1024, \"arrayCount\": 0}, \"isHistory\": 1, \"isMonitor\": 0, \"isReadonly\": 1, \"name_zh_CN\": \"I0.5\", \"isSharePerm\": 1}, {\"id\": \"AD2\", \"name\": \"AD2\", \"type\": 1, \"order\": 1, \"isChart\": 1, \"modelId\": 884, \"datatype\": {\"max\": 100, \"min\": 0, \"step\": 1, \"type\": \"decimal\", \"unit\": \"\", \"trueText\": \"\", \"arrayType\": \"\", \"falseText\": \"\", \"maxLength\": 1024, \"arrayCount\": 0}, \"isHistory\": 1, \"isMonitor\": 1, \"isReadonly\": 1, \"name_zh_CN\": \"AD2\", \"isSharePerm\": 1}, {\"id\": \"AD3\", \"name\": \"AD3\", \"type\": 1, \"order\": 2, \"isChart\": 1, \"modelId\": 885, \"datatype\": {\"max\": 100, \"min\": 0, \"step\": 1, \"type\": \"decimal\", \"unit\": \"\", \"trueText\": \"\", \"arrayType\": \"\", \"falseText\": \"\", \"maxLength\": 1024, \"arrayCount\": 0}, \"isHistory\": 1, \"isMonitor\": 1, \"isReadonly\": 1, \"name_zh_CN\": \"AD3\", \"isSharePerm\": 1}, {\"id\": \"AD4\", \"name\": \"AD4\", \"type\": 1, \"order\": 3, \"isChart\": 1, \"modelId\": 886, \"datatype\": {\"max\": 100, \"min\": 0, \"step\": 1, \"type\": \"decimal\", \"unit\": \"\", \"trueText\": \"\", \"arrayType\": \"\", \"falseText\": \"\", \"maxLength\": 1024, \"arrayCount\": 0}, \"isHistory\": 1, \"isMonitor\": 1, \"isReadonly\": 1, \"name_zh_CN\": \"AD4\", \"isSharePerm\": 1}, {\"id\": \"PAD\", \"name\": \"PAD\", \"type\": 1, \"order\": 0, \"isChart\": 1, \"modelId\": 907, \"datatype\": {\"max\": 100, \"min\": 0, \"step\": 1, \"type\": \"integer\", \"unit\": \"\", \"trueText\": \"\", \"arrayType\": \"\", \"falseText\": \"\", \"maxLength\": 1024, \"arrayCount\": 0}, \"isHistory\": 1, \"isMonitor\": 1, \"isReadonly\": 1, \"name_zh_CN\": \"PAD\", \"isSharePerm\": 1}, {\"id\": \"AD5\", \"name\": \"AD5\", \"type\": 1, \"order\": 4, \"isChart\": 1, \"modelId\": 887, \"datatype\": {\"max\": 100, \"min\": 0, \"step\": 1, \"type\": \"decimal\", \"unit\": \"\", \"trueText\": \"\", \"arrayType\": \"\", \"falseText\": \"\", \"maxLength\": 1024, \"arrayCount\": 0}, \"isHistory\": 1, \"isMonitor\": 1, \"isReadonly\": 1, \"name_zh_CN\": \"AD5\", \"isSharePerm\": 1}, {\"id\": \"AD6\", \"name\": \"AD6\", \"type\": 1, \"order\": 5, \"isChart\": 1, \"modelId\": 888, \"datatype\": {\"max\": 100, \"min\": 0, \"step\": 1, \"type\": \"decimal\", \"unit\": \"\", \"trueText\": \"\", \"arrayType\": \"\", \"falseText\": \"\", \"maxLength\": 1024, \"arrayCount\": 0}, \"isHistory\": 1, \"isMonitor\": 1, \"isReadonly\": 1, \"name_zh_CN\": \"AD6\", \"isSharePerm\": 1}, {\"id\": \"AD7\", \"name\": \"AD7\", \"type\": 1, \"order\": 6, \"isChart\": 1, \"modelId\": 889, \"datatype\": {\"max\": 100, \"min\": 0, \"step\": 1, \"type\": \"decimal\", \"unit\": \"\", \"trueText\": \"\", \"arrayType\": \"\", \"falseText\": \"\", \"maxLength\": 1024, \"arrayCount\": 0}, \"isHistory\": 1, \"isMonitor\": 1, \"isReadonly\": 1, \"name_zh_CN\": \"AD7\", \"isSharePerm\": 1}, {\"id\": \"AD8\", \"name\": \"AD8\", \"type\": 1, \"order\": 0, \"isChart\": 1, \"modelId\": 890, \"datatype\": {\"max\": 100, \"min\": 0, \"step\": 1, \"type\": \"decimal\", \"unit\": \"\", \"trueText\": \"\", \"arrayType\": \"\", \"falseText\": \"\", \"maxLength\": 1024, \"arrayCount\": 0}, \"isHistory\": 1, \"isMonitor\": 1, \"isReadonly\": 1, \"name_zh_CN\": \"AD8\", \"isSharePerm\": 1}, {\"id\": \"AD9\", \"name\": \"AD9\", \"type\": 1, \"order\": 1, \"isChart\": 1, \"modelId\": 891, \"datatype\": {\"max\": 100, \"min\": 0, \"step\": 1, \"type\": \"decimal\", \"unit\": \"\", \"trueText\": \"\", \"arrayType\": \"\", \"falseText\": \"\", \"maxLength\": 1024, \"arrayCount\": 0}, \"isHistory\": 1, \"isMonitor\": 1, \"isReadonly\": 1, \"name_zh_CN\": \"AD9\", \"isSharePerm\": 1}]}', 1, 1, 3, '', '0', '', '2025-01-07 23:39:55', '', NULL, NULL, 'MQTT', 1, NULL); + +-- ---------------------------- +-- Table structure for iot_product_authorize +-- ---------------------------- +DROP TABLE IF EXISTS `iot_product_authorize`; +CREATE TABLE `iot_product_authorize` ( + `authorize_id` bigint NOT NULL AUTO_INCREMENT COMMENT '授权码ID', + `authorize_code` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '授权码', + `product_id` bigint NOT NULL COMMENT '产品ID', + `device_id` bigint NULL DEFAULT NULL COMMENT '设备ID', + `serial_number` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '设备编号', + `user_id` bigint NULL DEFAULT NULL COMMENT '用户ID', + `user_name` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '用户名称', + `status` tinyint(1) NULL DEFAULT NULL COMMENT '状态(1-未使用,2-使用中)', + `del_flag` char(1) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL DEFAULT '0' COMMENT '删除标志(0代表存在 2代表删除)', + `create_by` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL DEFAULT '' COMMENT '创建者', + `create_time` datetime NOT NULL COMMENT '创建时间', + `update_by` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT '' COMMENT '更新者', + `update_time` datetime NULL DEFAULT NULL COMMENT '更新时间', + `remark` varchar(500) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT NULL COMMENT '备注', + PRIMARY KEY (`authorize_id`) USING BTREE, + INDEX `iot_product_authorize_index_product_id`(`product_id`) USING BTREE, + INDEX `iot_product_authorize_index_device_id`(`device_id`) USING BTREE, + INDEX `iot_product_authorize_index_serial_number`(`serial_number`) USING BTREE, + INDEX `iot_product_authorize_index_user_id`(`user_id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 41 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '产品授权码表' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of iot_product_authorize +-- ---------------------------- +INSERT INTO `iot_product_authorize` VALUES (11, 'FD42B9A208E54FC39511939385CE7D28', 135, NULL, NULL, NULL, NULL, 1, '0', '18926529123', '2023-11-10 09:38:30', '', NULL, NULL); +INSERT INTO `iot_product_authorize` VALUES (12, '2AD0EEF05A5D404EB23571E709641B77', 135, NULL, NULL, NULL, NULL, 1, '0', '18926529123', '2023-11-10 09:38:30', '', NULL, NULL); +INSERT INTO `iot_product_authorize` VALUES (13, '8ED19205FE7E469B97FE8540D065BD1B', 135, NULL, NULL, NULL, NULL, 1, '0', '18926529123', '2023-11-10 09:38:30', '', NULL, NULL); +INSERT INTO `iot_product_authorize` VALUES (14, 'EEDDE2452473445EAE02EC25B85B8DBA', 135, NULL, NULL, NULL, NULL, 1, '0', '18926529123', '2023-11-10 09:38:30', '', NULL, NULL); +INSERT INTO `iot_product_authorize` VALUES (15, '71B8676112B64605AA0236A1ED1A96E5', 135, NULL, NULL, NULL, NULL, 1, '0', '18926529123', '2023-11-10 09:38:30', '', NULL, NULL); +INSERT INTO `iot_product_authorize` VALUES (16, 'C941FA610E474186B0DFD3C4BBA51D83', 135, NULL, NULL, NULL, NULL, 1, '0', '18926529123', '2023-11-10 09:38:30', '', NULL, NULL); +INSERT INTO `iot_product_authorize` VALUES (17, '7B9CFC7FC3504004A52FDCCD92687652', 135, NULL, NULL, NULL, NULL, 1, '0', '18926529123', '2023-11-10 09:38:30', '', NULL, NULL); +INSERT INTO `iot_product_authorize` VALUES (18, '15A881D5CA4B4455BC125F1A0B098441', 135, NULL, NULL, NULL, NULL, 1, '0', '18926529123', '2023-11-10 09:38:30', '', NULL, NULL); +INSERT INTO `iot_product_authorize` VALUES (19, '55CA60FD59254548A2523D8B9E117C1F', 135, NULL, NULL, NULL, NULL, 1, '0', '18926529123', '2023-11-10 09:38:30', '', NULL, NULL); +INSERT INTO `iot_product_authorize` VALUES (20, '747168F3E7F24E9C8F95D8E6D3ABECD3', 135, NULL, NULL, NULL, NULL, 1, '0', '18926529123', '2023-11-10 09:38:30', '', NULL, NULL); +INSERT INTO `iot_product_authorize` VALUES (41, '193BB612C58C46D19F2BB88D4D101EA2', 96, NULL, NULL, NULL, NULL, 1, '0', 'admin', '2025-01-09 01:34:49', '', NULL, NULL); + +-- ---------------------------- +-- Table structure for iot_protocol +-- ---------------------------- +DROP TABLE IF EXISTS `iot_protocol`; +CREATE TABLE `iot_protocol` ( + `id` bigint NOT NULL AUTO_INCREMENT COMMENT '自增id', + `protocol_code` varchar(60) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '协议编码', + `protocol_name` varchar(60) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '协议名称', + `protocol_file_url` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '协议jar包,js包,c程序上传地址', + `protocol_type` int NOT NULL DEFAULT 0 COMMENT '协议类型 0:未知 1:jar,2.js,3.c', + `jar_sign` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '协议文件摘要(文件的md5)', + `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', + `protocol_status` int NOT NULL DEFAULT 0 COMMENT '0:草稿 1:启用 2:停用', + `del_flag` int NOT NULL DEFAULT 0 COMMENT '0:正常 1:删除', + PRIMARY KEY (`id`) USING BTREE, + UNIQUE INDEX `UNIQUE_CODE`(`protocol_code`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 19 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '协议表' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of iot_protocol +-- ---------------------------- +INSERT INTO `iot_protocol` VALUES (1, 'JSON', 'JSON解析协议', '/', 0, '系统内置JSON解析协议', '2023-03-01 13:46:43', '2023-04-10 22:42:12', 1, 0); +INSERT INTO `iot_protocol` VALUES (2, 'MODBUS-RTU', 'ModbusRtu协议', '/', 0, '系统内置ModbusRtu解析协议', '2023-03-01 13:52:33', '2023-04-09 23:58:59', 1, 0); +INSERT INTO `iot_protocol` VALUES (3, 'MODBUS-RTU-PAK', '包装Modbus-rtu协议', '/', 0, '系统内置包装后的modbus-rtu协议', '2023-03-01 13:53:10', '2023-03-01 16:10:47', 1, 0); +INSERT INTO `iot_protocol` VALUES (4, 'JSONOBJECT-CHENYI', 'JSON-Data解析协议', '', 0, '系统内置JSONObject解析协议', '2023-08-23 09:31:39', '2023-08-23 09:31:39', 1, 0); +INSERT INTO `iot_protocol` VALUES (5, 'RJ45', 'RJ45解析协议', '', 0, '系统内置RJ45解析协议', '2023-08-23 09:31:39', '2023-08-23 09:31:39', 1, 0); +INSERT INTO `iot_protocol` VALUES (6, 'FlowMeter', '流量计解析协议', '', 0, '流量计解析协议', '2023-08-23 09:31:39', '2023-08-23 09:31:39', 1, 0); +INSERT INTO `iot_protocol` VALUES (7, 'JSONOBJECT', 'JSONObject解析协议', '', 0, '系统内置JSONObject解析协议', '2023-08-23 09:31:39', '2023-08-23 09:31:39', 1, 0); +INSERT INTO `iot_protocol` VALUES (8, 'MODBUS-JSON', 'Modbus转Json解析协议', '', 0, 'modbus转json解析协议', '2023-08-23 09:31:39', '2023-08-23 09:31:39', 1, 0); +INSERT INTO `iot_protocol` VALUES (9, 'MODBUS-JSON-ZQWL', '8路继电器+Modbus转Json-智嵌物联', '', 0, '8路继电器+Modbus转Json-智嵌物联', '2024-03-14 15:29:36', '2024-03-14 23:53:44', 1, 0); +INSERT INTO `iot_protocol` VALUES (10, 'MODBUS-JSON-FY', 'Modbus转Json解析协议-繁易', '', 0, 'modbus转json解析协议-繁易', '2023-08-23 09:33:03', '2023-08-23 09:33:03', 1, 0); +INSERT INTO `iot_protocol` VALUES (11, 'MODBUS-JSON-HP', 'Modbus转Json解析协议-华普物联', '', 0, 'modbus转json解析协议-华普物联', '2024-02-03 21:02:18', '2024-02-03 21:02:17', 1, 0); +INSERT INTO `iot_protocol` VALUES (13, 'YinErDa', 'YinErDa解析协议', '', 0, 'YinErDa解析协议', '2023-08-23 09:31:39', '2024-03-14 23:53:40', 1, 0); +INSERT INTO `iot_protocol` VALUES (14, 'SGZ', '数码灌装解析协议', '', 0, '数码灌装解析协议', '2024-04-03 16:14:21', '2024-04-03 16:14:22', 1, 0); +INSERT INTO `iot_protocol` VALUES (15, 'GEC6100D', 'GEC6100D发电机控制器协议', '', 0, 'GEC6100D发电机控制器协议-繁易', '2024-04-26 10:00:32', '2024-04-26 10:00:30', 1, 0); +INSERT INTO `iot_protocol` VALUES (16, 'MODBUS-JSON-GEC6100D', 'GEC6100D发电机控制器协议', '', 0, 'GEC6100D发电机控制器协议-繁易', '2024-04-26 17:18:50', '2024-04-26 17:18:48', 1, 0); +INSERT INTO `iot_protocol` VALUES (17, 'CH', '水质监测协议', '', 0, '水质监测协议', '2024-12-29 15:14:02', '2024-12-29 15:13:58', 1, 0); +INSERT INTO `iot_protocol` VALUES (18, 'GONGKONGBANG-HTSZ', '工控帮-华泰数智网关', '', 0, '工控帮-华泰数智网关', '2025-01-07 23:01:59', '2025-01-07 23:01:58', 1, 0); + +-- ---------------------------- +-- Table structure for iot_scene +-- ---------------------------- +DROP TABLE IF EXISTS `iot_scene`; +CREATE TABLE `iot_scene` ( + `scene_id` bigint NOT NULL AUTO_INCREMENT COMMENT '场景ID', + `scene_name` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL COMMENT '场景名称', + `chain_name` varchar(32) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT NULL COMMENT '规则名称', + `enable` tinyint(1) NULL DEFAULT NULL COMMENT '场景状态(1-启动,2-停止)', + `user_id` bigint NOT NULL COMMENT '用户ID', + `user_name` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL COMMENT '用户名称', + `silent_period` int NULL DEFAULT NULL COMMENT '静默周期(分钟)', + `cond` tinyint NULL DEFAULT NULL COMMENT '执行条件(1=或、任意条件,2=且、所有条件,3=非,不满足)', + `execute_mode` tinyint(1) NULL DEFAULT NULL COMMENT '执行方式(1=串行,顺序执行,2=并行,同时执行)', + `execute_delay` int NULL DEFAULT NULL COMMENT '延时执行(秒钟)', + `has_alert` tinyint(1) NULL DEFAULT 0 COMMENT '是否包含告警推送(1=包含,2=不包含)', + `application_name` varchar(32) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL DEFAULT '' COMMENT '应用名称', + `el_data` text CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL COMMENT '规则数据', + `create_by` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT '' COMMENT '创建者', + `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间', + `update_by` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT '' COMMENT '更新者', + `update_time` datetime NULL DEFAULT NULL COMMENT '更新时间', + `remark` varchar(500) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT NULL COMMENT '备注', + `terminal_user` tinyint(1) NULL DEFAULT 0 COMMENT '是否终端用户(1-是,0-不是)', + `check_delay` int NULL DEFAULT 0 COMMENT '延时匹配(秒钟)', + `recover_id` bigint NULL DEFAULT 0 COMMENT '恢复告警场景ID', + PRIMARY KEY (`scene_id`) USING BTREE, + INDEX `iot_scene_index_user_id`(`user_id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '场景联动' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of iot_scene +-- ---------------------------- + +-- ---------------------------- +-- Table structure for iot_scene_device +-- ---------------------------- +DROP TABLE IF EXISTS `iot_scene_device`; +CREATE TABLE `iot_scene_device` ( + `scene_device_id` bigint NOT NULL AUTO_INCREMENT COMMENT '场景设备ID', + `serial_number` varchar(32) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL COMMENT '设备编号(产品触发的没有设备编号)', + `product_id` bigint NOT NULL COMMENT '产品ID', + `product_name` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL COMMENT '产品名称', + `source` tinyint(1) NOT NULL COMMENT '触发源(1=设备触发,3=产品触发)', + `scene_id` bigint NOT NULL COMMENT '场景ID', + `script_id` varchar(32) CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_ci NOT NULL COMMENT '场景脚本ID', + `type` tinyint(1) NULL DEFAULT NULL COMMENT '类型(2=触发器,3=执行动作)', + PRIMARY KEY (`scene_device_id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb3 COLLATE = utf8mb3_unicode_ci COMMENT = '场景设备表' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of iot_scene_device +-- ---------------------------- + +-- ---------------------------- +-- Table structure for iot_scene_script +-- ---------------------------- +DROP TABLE IF EXISTS `iot_scene_script`; +CREATE TABLE `iot_scene_script` ( + `script_id` varchar(32) CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_ci NOT NULL COMMENT '脚本ID', + `scene_id` bigint NOT NULL COMMENT '场景ID', + `source` tinyint(1) NOT NULL COMMENT '触发源(1=设备触发,2=定时触发,3=产品触发,4=告警执行)', + `script_purpose` tinyint(1) NOT NULL COMMENT '脚本用途(1=数据流,2=触发器,3=执行动作)', + `product_id` bigint NULL DEFAULT NULL COMMENT '产品ID(用于获取对应物模型)', + `product_name` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT NULL COMMENT '产品名称', + `id` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT NULL COMMENT '物模型标识符', + `name` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT NULL COMMENT '物模型名称', + `value` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT NULL COMMENT '物模型值', + `operator` varchar(16) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT NULL COMMENT '操作符', + `type` tinyint(1) NULL DEFAULT NULL COMMENT '物模型类别(1=属性,2=功能,3=事件,4=设备升级,5=设备上线,6=设备下线)', + `device_count` int NULL DEFAULT NULL COMMENT '设备数量', + `job_id` bigint NULL DEFAULT NULL COMMENT '任务ID', + `cron_expression` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT 'cron执行表达式', + `is_advance` tinyint(1) NULL DEFAULT NULL COMMENT '是否详细corn表达式(1=是,0=否)', + `parent_id` varchar(32) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT NULL COMMENT '父物模id', + `parent_name` varchar(32) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT NULL COMMENT '父物模名称', + `array_index` varchar(20) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT NULL COMMENT '数组索引', + `array_index_name` varchar(20) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT NULL COMMENT '数组索引名称', + `create_by` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT '' COMMENT '创建者', + `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间', + PRIMARY KEY (`script_id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb3 COLLATE = utf8mb3_unicode_ci COMMENT = '场景脚本' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of iot_scene_script +-- ---------------------------- + +-- ---------------------------- +-- Table structure for iot_script +-- ---------------------------- +DROP TABLE IF EXISTS `iot_script`; +CREATE TABLE `iot_script` ( + `script_id` varchar(32) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL DEFAULT '' COMMENT '脚本ID', + `user_id` bigint NOT NULL COMMENT '用户ID', + `user_name` varchar(30) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL DEFAULT '' COMMENT '用户昵称', + `scene_id` bigint NOT NULL DEFAULT 0 COMMENT '关联场景ID', + `product_id` bigint NULL DEFAULT NULL COMMENT '产品ID', + `product_name` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT NULL COMMENT '产品名称', + `script_event` tinyint(1) NOT NULL COMMENT '脚本事件(1=设备上报,2=平台下发,3=设备上线,4=设备离线)', + `script_action` tinyint(1) NOT NULL COMMENT '脚本动作(1=消息重发,2=消息通知,3=Http推送,4=Mqtt桥接,5=数据库存储)', + `script_purpose` tinyint(1) NOT NULL COMMENT '脚本用途(1=数据流,2=触发器,3=执行动作)', + `script_order` tinyint(1) NOT NULL DEFAULT 0 COMMENT '脚本执行顺序,值越大优先级越高', + `application_name` varchar(32) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL DEFAULT '' COMMENT '应用名,后端、规则和脚本要统一', + `script_name` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL DEFAULT '' COMMENT '脚本名', + `script_data` text CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL COMMENT '脚本数据', + `script_type` char(16) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL DEFAULT '' COMMENT '脚本类型:\r\nscript=普通脚本,\r\nswitch_script=选择脚本,\r\nboolean_script=条件脚本,\r\nfor_script=数量循环脚本', + `script_language` varchar(16) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL DEFAULT '' COMMENT '脚本语言(groovy | qlexpress | js | python | lua | aviator | java)', + `enable` tinyint(1) NOT NULL DEFAULT 1 COMMENT '是否生效(0-不生效,1-生效)', + `del_flag` char(1) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT '0' COMMENT '删除标志(0代表存在 2代表删除)', + `create_by` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT '' COMMENT '创建者', + `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间', + `update_by` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT '' COMMENT '更新者', + `update_time` datetime NULL DEFAULT NULL COMMENT '更新时间', + `remark` varchar(500) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT NULL COMMENT '备注', + PRIMARY KEY (`script_id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb3 COLLATE = utf8mb3_general_ci COMMENT = '规则引擎脚本' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of iot_script +-- ---------------------------- +INSERT INTO `iot_script` VALUES ('D1751532166174609408', 1, 'admin', 0, 41, '★智能开关产品', 1, 1, 1, 1, 'xinda', '消息转发', 'import cn.hutool.json.JSONArray;\nimport cn.hutool.json.JSONObject;\nimport cn.hutool.json.JSONUtil;\nimport cn.hutool.core.util.NumberUtil;\n\n//系统主题\nString sysTopic = \'\';\n//系统数据格式\nString sysPayload = \'\';\n\n// 1. 获取主题和内容(必要)\nString name = msgContext.getTopic();\nLong productId = msgContext.getProductId();\nString serialNumber = msgContext.getSerialNumber();\nString protocolCode = msgContext.getProtocolCode();\nString payload = msgContext.getPayload();\nSystem.out.println(\"产品id/协议编号:\" + productId + \" / \" + protocolCode);\n// 2. 转换为系统主题 /60/DEVICE555/property/post\nsysTopic = \"/\" + productId + \"/\" + serialNumber + \"/property/post\" \n\nif(\"JSON\".equals(protocolCode)){ \n // 3. 内容格式转换\n JSONArray newArray = new JSONArray();\n JSONObject jsonObject = JSONUtil.parseObj(payload);\n jsonObject.keySet().forEach(key -> {\n JSONObject newObject =new JSONObject();\n newObject.put(\"id\" , key);\n newObject.put(\"value\" , jsonObject.getStr(key));\n newArray.add(newObject);\n });\n sysPayload = newArray.toString();\n}else{\n //其他协议处理\n}\n\n\n// 4.打印\nSystem.out.println(\"新主题:\" + sysTopic);\nSystem.out.println(\"新内容:\" + sysPayload);\n\n// 5. 返回新的数据(必要)\nmsgContext.setTopic(sysTopic)\nmsgContext.setPayload(sysPayload);', 'script', 'groovy', 1, '0', '', '2024-01-28 17:06:25', '', '2024-04-28 14:14:38', NULL); +INSERT INTO `iot_script` VALUES ('D1753673875549458432', 1, 'admin', 0, 96, '★网关产品', 2, 1, 1, 1, 'xinda', '平台下发转发', 'import cn.hutool.json.JSONArray;\nimport cn.hutool.json.JSONObject;\nimport cn.hutool.json.JSONUtil;\nimport cn.hutool.core.util.NumberUtil;\n\n\n//系统主题\nString tranTopic = \'\';\n//系统数据格式\nString tranPayload = \'\';\n\n\n// 1. 获取主题和内容(必要)\nString topic = msgContext.getTopic();\nString payload = msgContext.getPayload();\nLong productId = msgContext.getProductId();\nString serialNumber = msgContext.getSerialNumber();\nString protocolCode = msgContext.getProtocolCode();\n\n\n// 2. topic转换\ntranTopic = serialNumber+ \"/set\";\n\n\n//这里根据系统内置的协议类型来做数据转换\n\nif(\"JSON\".equals(protocolCode)){ \n \n // 3. 转发的数据 {\"temperature\":26.5,\"humidity\":65.8}\n JSONArray jsonArray = JSONUtil.parseArray(payload);\n JSONObject resultObj = new JSONObject();\n jsonArray.forEach(obj -> {\n JSONObject jsonObject = (JSONObject)obj;\n resultObj.put(jsonObject.getStr(\"id\"),jsonObject.getStr(\"value\"));\n });\n tranPayload = JSONUtil.toJsonStr(resultObj); \n \n}else{\n //其他协议处理\n}\n\n// 4.打印\nSystem.out.println(\"转发主题:\" + tranTopic);\nSystem.out.println(\"转发内容:\" + tranPayload);\n\n\n// 3. 返回新的数据(必要)\nmsgContext.setTopic(tranTopic);\nmsgContext.setPayload(tranPayload);', 'script', 'groovy', 1, '0', '', '2024-02-03 14:56:48', '', '2024-04-28 14:14:43', NULL); + +-- ---------------------------- +-- Table structure for iot_script_bridge +-- ---------------------------- +DROP TABLE IF EXISTS `iot_script_bridge`; +CREATE TABLE `iot_script_bridge` ( + `script_id` varchar(32) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL COMMENT '脚本ID', + `bridge_id` bigint NOT NULL COMMENT '桥接配置id', + PRIMARY KEY (`script_id`, `bridge_id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb3 COLLATE = utf8mb3_unicode_ci COMMENT = '脚本输入桥接关联表' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of iot_script_bridge +-- ---------------------------- + +-- ---------------------------- +-- Table structure for iot_simulate_log +-- ---------------------------- +DROP TABLE IF EXISTS `iot_simulate_log`; +CREATE TABLE `iot_simulate_log` ( + `log_id` bigint NOT NULL AUTO_INCREMENT COMMENT '设备模拟日志ID', + `send_data` json NULL COMMENT '云端发送指令', + `callback_data` json NULL COMMENT '设备回复', + `device_id` bigint NULL DEFAULT NULL COMMENT '设备ID', + `device_name` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT NULL COMMENT '设备名称', + `serial_number` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL COMMENT '设备编号', + `create_by` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT '' COMMENT '创建者', + `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间', + `remark` varchar(200) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT NULL COMMENT '备注', + PRIMARY KEY (`log_id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb3 COLLATE = utf8mb3_general_ci COMMENT = '模拟设备日志' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of iot_simulate_log +-- ---------------------------- + +-- ---------------------------- +-- Table structure for iot_sip_relation +-- ---------------------------- +DROP TABLE IF EXISTS `iot_sip_relation`; +CREATE TABLE `iot_sip_relation` ( + `id` bigint NOT NULL AUTO_INCREMENT COMMENT '业务id', + `channel_id` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL COMMENT '监控设备编号', + `re_device_id` bigint NULL DEFAULT NULL COMMENT '关联的设备id', + `re_scene_model_id` bigint NULL DEFAULT NULL COMMENT '关联的场景id', + `create_by` varchar(50) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT NULL COMMENT '创建人', + `create_time` datetime NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `update_by` varchar(50) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT NULL COMMENT '更新人', + `update_time` datetime NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', + `remark` varchar(800) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT NULL COMMENT '备注', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 3 CHARACTER SET = utf8mb3 COLLATE = utf8mb3_general_ci COMMENT = '监控设备关联表' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of iot_sip_relation +-- ---------------------------- +INSERT INTO `iot_sip_relation` VALUES (1, '51011400001320000001', 230, NULL, 'admin', '2025-01-07 10:59:05', NULL, '2025-01-07 10:59:05', NULL); +INSERT INTO `iot_sip_relation` VALUES (2, '51011400001320000002', 230, NULL, 'admin', '2025-01-07 22:13:00', NULL, '2025-01-07 22:12:59', NULL); + +-- ---------------------------- +-- Table structure for iot_social_platform +-- ---------------------------- +DROP TABLE IF EXISTS `iot_social_platform`; +CREATE TABLE `iot_social_platform` ( + `social_platform_id` int NOT NULL AUTO_INCREMENT COMMENT '第三方登录平台主键', + `platform` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '第三方登录平台', + `status` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '0' COMMENT ' 0:启用 ,1:禁用', + `client_id` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '第三方平台申请Id', + `secret_key` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '第三方平台密钥', + `redirect_uri` varchar(120) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '用户认证后跳转地址', + `del_flag` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '0' COMMENT '删除标记位(0代表存在,1代表删除)', + `create_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '创建者', + `create_time` datetime NOT NULL COMMENT '创建时间', + `update_time` datetime NULL DEFAULT NULL COMMENT '更新时间', + `update_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '更新者', + `remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '备注', + `bind_uri` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '绑定注册登录uri,http://localhost/login?bindId=', + `redirect_login_uri` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '跳转登录uri,http://localhost/login?loginId=', + `error_msg_uri` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '错误提示uri,http://localhost/login?errorId=', + PRIMARY KEY (`social_platform_id`) USING BTREE, + UNIQUE INDEX `iot_social_platform_platform_uindex`(`platform`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 7 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '第三方登录平台控制' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of iot_social_platform +-- ---------------------------- +INSERT INTO `iot_social_platform` VALUES (1, 'QQ', '0', '102005066', 'PhkaBYgZ99999', 'https://iot.xinda.live/auth/callback/qq', '0', 'admin', '2022-04-18 11:21:28', '2022-04-20 16:29:23', 'admin', NULL, 'http://localhost/login?bindId=', 'http://localhost/login?loginId=', 'http://localhost/login?errorId='); +INSERT INTO `iot_social_platform` VALUES (2, 'wechat_open_web', '0', 'wx906fdc1e0bf6abc8', '', 'https://iot.xinda.cn/prod-api/auth/callback/wechat_open_web', '0', 'admin', '2023-08-23 11:41:37', '2024-04-18 11:45:02', 'admin', NULL, 'https://iot.xinda.cn/login?bindId=', 'https://iot.xinda.cn/login?loginId=', 'https://iot.xinda.cn/login?errorId='); +INSERT INTO `iot_social_platform` VALUES (3, 'wechat_open_mobile', '0', 'wx6be3f0d7bf7154e1', '', 'http://localhost', '0', 'admin', '2023-08-28 14:21:29', NULL, NULL, NULL, 'http://localhost', 'http://localhost', 'http://localhost'); +INSERT INTO `iot_social_platform` VALUES (4, 'wechat_open_mini_program', '0', 'wx5bfbadf52adc17f3', '', 'http://localhost', '0', 'admin', '2023-09-12 15:39:48', NULL, NULL, NULL, 'http://localhost', 'http://localhost', 'http://localhost'); +INSERT INTO `iot_social_platform` VALUES (5, 'wechat_open_web_bind', '0', 'wx906fdc1e0bf6abc8', '', 'https://iot.xinda.cn/prod-api/wechat/wxBind/callback?wxBindId=', '0', 'admin', '2023-10-09 12:04:18', '2024-04-22 14:09:28', 'admin', NULL, 'https://localhost', 'https://iot.xinda.cn/user/profile?wxBindMsgId=', 'http://localhost'); +INSERT INTO `iot_social_platform` VALUES (6, 'wechat_open_public_account', '0', 'wx26b1bf6041ab6339', 'http://localhost', 'http://localhost', '0', 'admin', '2024-04-22 14:04:59', '2025-01-09 01:22:24', 'admin', '感谢您关注信达物联!', 'http://localhost', 'http://localhost', 'http://localhost'); + +-- ---------------------------- +-- Table structure for iot_social_user +-- ---------------------------- +DROP TABLE IF EXISTS `iot_social_user`; +CREATE TABLE `iot_social_user` ( + `social_user_id` int NOT NULL AUTO_INCREMENT COMMENT '第三方系统用户表主键', + `uuid` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '第三方系统的唯一ID', + `source` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '第三方用户来源', + `access_token` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '用户的授权令牌', + `expire_in` int NULL DEFAULT NULL COMMENT '第三方用户的授权令牌的有效期(部分平台可能没有)', + `refresh_token` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '刷新令牌(部分平台可能没有)', + `open_id` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '第三方用户的 open id(部分平台可能没有)', + `uid` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '第三方用户的 ID(部分平台可能没有)', + `access_code` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '个别平台的授权信息(部分平台可能没有)', + `union_id` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '第三方用户的 union id(部分平台可能没有)', + `scope` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '第三方用户授予的权限(部分平台可能没有)', + `token_type` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '个别平台的授权信息(部分平台可能没有)', + `id_token` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT 'id token(部分平台可能没有)', + `mac_algorithm` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '小米平台用户的附带属性(部分平台可能没有)', + `mac_key` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '小米平台用户的附带属性(部分平台可能没有)', + `code` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '用户的授权code(部分平台可能没有)', + `oauth_token` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT 'Twitter平台用户的附带属性(部分平台可能没有)', + `oauth_token_secret` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT 'Twitter平台用户的附带属性(部分平台可能没有)', + `create_time` datetime NOT NULL COMMENT '创建时间', + `create_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '创建者', + `update_time` datetime NULL DEFAULT NULL COMMENT '更新时间', + `update_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '更新者', + `del_flag` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '0' COMMENT '删除标记位(0代表存在,2代表删除)', + `status` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '0' COMMENT '绑定状态(0:未绑定,1:绑定)', + `sys_user_id` int NULL DEFAULT NULL COMMENT '用户ID', + `username` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '用户名', + `nickname` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '用户昵称', + `avatar` varchar(256) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '用户头像', + `gender` tinyint NULL DEFAULT NULL COMMENT '用户性别', + `source_client` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '第三方用户来源客户端(web、app、小程序)', + PRIMARY KEY (`social_user_id`) USING BTREE, + UNIQUE INDEX `iot_social_user_pk`(`social_user_id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '第三方登录用户' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of iot_social_user +-- ---------------------------- + +-- ---------------------------- +-- Table structure for iot_sub_gateway +-- ---------------------------- +DROP TABLE IF EXISTS `iot_sub_gateway`; +CREATE TABLE `iot_sub_gateway` ( + `id` bigint NOT NULL AUTO_INCREMENT COMMENT '业务id', + `gw_device_id` bigint NOT NULL COMMENT '网关设备id', + `sub_device_id` bigint NOT NULL COMMENT '子设备id', + `slave_id` int NULL DEFAULT NULL COMMENT '从机地址', + `create_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '创建者', + `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间', + `update_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '更新者', + `update_time` datetime NULL DEFAULT NULL COMMENT '更新时间', + `remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '备注', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb3 COLLATE = utf8mb3_unicode_ci COMMENT = '网关与子设备关联表' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of iot_sub_gateway +-- ---------------------------- + +-- ---------------------------- +-- Table structure for iot_things_model +-- ---------------------------- +DROP TABLE IF EXISTS `iot_things_model`; +CREATE TABLE `iot_things_model` ( + `model_id` bigint NOT NULL AUTO_INCREMENT COMMENT '物模型ID', + `model_name` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL COMMENT '物模型名称', + `product_id` bigint NOT NULL COMMENT '产品ID', + `product_name` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL COMMENT '产品名称', + `tenant_id` bigint NOT NULL COMMENT '租户ID', + `tenant_name` varchar(30) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL DEFAULT '' COMMENT '租户名称', + `identifier` varchar(32) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL COMMENT '标识符,产品下唯一', + `type` tinyint(1) NOT NULL COMMENT '模型类别(1-属性,2-功能,3-事件)', + `datatype` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL COMMENT '数据类型(integer、decimal、string、bool、array、enum)', + `specs` json NULL COMMENT '数据定义', + `is_chart` tinyint(1) NOT NULL DEFAULT 0 COMMENT '是否图表展示(0-否,1-是)', + `is_monitor` tinyint(1) NOT NULL DEFAULT 0 COMMENT '是否实时监测(0-否,1-是)', + `is_history` tinyint(1) NULL DEFAULT 0 COMMENT '是否历史存储(0-否,1-是)', + `is_readonly` tinyint(1) NULL DEFAULT 0 COMMENT '是否只读数据(0-否,1-是)', + `is_share_perm` tinyint(1) NULL DEFAULT 0 COMMENT '是否设备分享权限(0-否,1-是)', + `model_order` int NULL DEFAULT 0 COMMENT '排序,值越大,排序越靠前', + `del_flag` char(1) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT '0' COMMENT '删除标志(0代表存在 2代表删除)', + `create_by` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT '' COMMENT '创建者', + `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间', + `update_by` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT '' COMMENT '更新者', + `update_time` datetime NULL DEFAULT NULL COMMENT '更新时间', + `remark` varchar(500) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT NULL COMMENT '备注', + `formula` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT NULL COMMENT '计算公式', + `is_app` tinyint(1) NULL DEFAULT NULL COMMENT '是否在APP显示(0-否,1-是)', + PRIMARY KEY (`model_id`) USING BTREE, + INDEX `iot_things_model_index_product_id`(`product_id`) USING BTREE, + INDEX `iot_things_model_index_tenant_id`(`tenant_id`) USING BTREE, + INDEX `iot_things_model_index_model_order`(`model_order`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 915 CHARACTER SET = utf8mb3 COLLATE = utf8mb3_general_ci COMMENT = '物模型' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of iot_things_model +-- ---------------------------- +INSERT INTO `iot_things_model` VALUES (493, '漏水值', 112, '★MODBUS协议产品', 1, 'admin', '0', 1, 'integer', '{\"max\": 100, \"min\": 1, \"step\": 1, \"type\": \"integer\", \"unit\": \"度\"}', 0, 0, 1, 0, 0, 0, '0', '', '2023-09-13 23:33:19', '', NULL, NULL, NULL, NULL); +INSERT INTO `iot_things_model` VALUES (494, '温度', 112, '★MODBUS协议产品', 1, 'admin', '0', 1, 'integer', '{\"max\": 100, \"min\": 1, \"step\": 1, \"type\": \"integer\", \"unit\": \"°\"}', 0, 0, 1, 0, 0, 0, '0', '', '2023-09-13 23:33:19', '', NULL, NULL, NULL, NULL); +INSERT INTO `iot_things_model` VALUES (495, '电量', 112, '★MODBUS协议产品', 1, 'admin', '1', 1, 'integer', '{\"max\": 100, \"min\": 1, \"step\": 1, \"type\": \"integer\", \"unit\": \"\"}', 0, 0, 1, 0, 0, 0, '0', '', '2023-09-13 23:33:19', '', NULL, NULL, NULL, NULL); +INSERT INTO `iot_things_model` VALUES (499, '上报状态', 130, 'TCP测试设备', 1, 'admin', 'status', 2, 'enum', '{\"type\": \"enum\", \"showWay\": \"button\", \"enumList\": [{\"text\": \"更新状态\", \"value\": \"update_status\"}]}', 0, 0, 0, 0, 1, 0, '0', 'admin', '2023-09-19 11:22:55', '', NULL, NULL, NULL, NULL); +INSERT INTO `iot_things_model` VALUES (836, 'DI', 156, 'IO088-12.11.03', 1, 'admin', '0', 1, 'enum', '{\"type\": \"enum\", \"showWay\": \"select\", \"enumList\": [{\"text\": \"0\", \"value\": \"DI-1\"}, {\"text\": \"1\", \"value\": \"DI-2\"}, {\"text\": \"2\", \"value\": \"DI-3\"}, {\"text\": \"3\", \"value\": \"DI-4\"}, {\"text\": \"4\", \"value\": \"DI-5\"}, {\"text\": \"5\", \"value\": \"DI-6\"}, {\"text\": \"6\", \"value\": \"DI-7\"}, {\"text\": \"7\", \"value\": \"DI-8\"}]}', 0, 0, 0, 1, 0, 0, '0', '', '2023-12-12 10:33:29', '', NULL, NULL, NULL, NULL); +INSERT INTO `iot_things_model` VALUES (837, 'DI', 157, 'IO088-12.11.04', 1, 'admin', '0', 1, 'enum', '{\"type\": \"enum\", \"showWay\": \"select\", \"enumList\": [{\"text\": \"0\", \"value\": \"DI-1\"}, {\"text\": \"1\", \"value\": \"DI-2\"}, {\"text\": \"2\", \"value\": \"DI-3\"}, {\"text\": \"3\", \"value\": \"DI-4\"}, {\"text\": \"4\", \"value\": \"DI-5\"}, {\"text\": \"5\", \"value\": \"DI-6\"}, {\"text\": \"6\", \"value\": \"DI-7\"}, {\"text\": \"7\", \"value\": \"DI-8\"}]}', 0, 0, 0, 1, 0, 0, '0', '', '2023-12-12 10:33:30', '', NULL, NULL, NULL, NULL); +INSERT INTO `iot_things_model` VALUES (838, 'DI', 158, 'IO088-12.11.05', 1, 'admin', '0', 1, 'enum', '{\"type\": \"enum\", \"showWay\": \"select\", \"enumList\": [{\"text\": \"0\", \"value\": \"DI-1\"}, {\"text\": \"1\", \"value\": \"DI-2\"}, {\"text\": \"2\", \"value\": \"DI-3\"}, {\"text\": \"3\", \"value\": \"DI-4\"}, {\"text\": \"4\", \"value\": \"DI-5\"}, {\"text\": \"5\", \"value\": \"DI-6\"}, {\"text\": \"6\", \"value\": \"DI-7\"}, {\"text\": \"7\", \"value\": \"DI-8\"}]}', 0, 0, 0, 1, 0, 0, '0', '', '2023-12-12 10:33:30', '', NULL, NULL, NULL, NULL); +INSERT INTO `iot_things_model` VALUES (839, 'DI', 159, 'IO088-12.12.01', 1, 'admin', '0', 1, 'enum', '{\"type\": \"enum\", \"showWay\": \"select\", \"enumList\": [{\"text\": \"0\", \"value\": \"DI-1\"}, {\"text\": \"1\", \"value\": \"DI-2\"}, {\"text\": \"2\", \"value\": \"DI-3\"}, {\"text\": \"3\", \"value\": \"DI-4\"}, {\"text\": \"4\", \"value\": \"DI-5\"}, {\"text\": \"5\", \"value\": \"DI-6\"}, {\"text\": \"6\", \"value\": \"DI-7\"}, {\"text\": \"7\", \"value\": \"DI-8\"}]}', 0, 0, 0, 1, 0, 0, '0', '', '2023-12-12 14:11:28', '', NULL, NULL, NULL, NULL); +INSERT INTO `iot_things_model` VALUES (840, '上报状态', 160, '智能中控xiaoyue', 31, '564601654', 'status', 2, 'enum', '{\"type\": \"enum\", \"showWay\": \"button\", \"enumList\": [{\"text\": \"更新状态\", \"value\": \"update_status\"}]}', 0, 0, 0, 0, 1, 0, '0', 'admin', '2023-12-14 23:33:23', '', NULL, NULL, NULL, NULL); +INSERT INTO `iot_things_model` VALUES (841, '中控ECU', 160, '智能中控xiaoyue', 31, '564601654', 'ECU', 2, 'integer', '{\"max\": 100, \"min\": 0, \"step\": 1, \"type\": \"integer\", \"unit\": \"\"}', 0, 0, 1, 0, 1, 0, '0', '18926529123', '2023-12-14 23:33:23', '', NULL, NULL, NULL, NULL); +INSERT INTO `iot_things_model` VALUES (862, '123', 162, 'CAT-T200测试13.19', 1, 'admin', '0', 1, 'integer', '{\"max\": 100, \"min\": 0, \"step\": 1, \"type\": \"integer\", \"unit\": \"\"}', 0, 0, 0, 1, 0, 0, '0', '', '2023-12-19 18:51:04', '', NULL, NULL, NULL, NULL); +INSERT INTO `iot_things_model` VALUES (863, '54165', 162, 'CAT-T200测试13.19', 1, 'admin', '1', 1, 'integer', '{\"max\": 100, \"min\": 0, \"step\": 1, \"type\": \"integer\", \"unit\": \"\"}', 0, 0, 0, 1, 0, 0, '0', '', '2023-12-19 18:51:04', '', NULL, NULL, NULL, NULL); +INSERT INTO `iot_things_model` VALUES (864, '4651', 162, 'CAT-T200测试13.19', 1, 'admin', '2', 1, 'integer', '{\"max\": 100, \"min\": 0, \"step\": 1, \"type\": \"integer\", \"unit\": \"\"}', 0, 0, 0, 1, 0, 0, '0', '', '2023-12-19 18:51:04', '', NULL, NULL, NULL, NULL); +INSERT INTO `iot_things_model` VALUES (865, '7894', 162, 'CAT-T200测试13.19', 1, 'admin', '3', 1, 'integer', '{\"max\": 100, \"min\": 0, \"step\": 1, \"type\": \"integer\", \"unit\": \"\"}', 0, 0, 0, 1, 0, 0, '0', '', '2023-12-19 18:51:04', '', NULL, NULL, NULL, NULL); +INSERT INTO `iot_things_model` VALUES (866, '54651', 162, 'CAT-T200测试13.19', 1, 'admin', '4', 1, 'integer', '{\"max\": 100, \"min\": 0, \"step\": 1, \"type\": \"integer\", \"unit\": \"\"}', 0, 0, 0, 1, 0, 0, '0', '', '2023-12-19 18:51:04', '', NULL, NULL, NULL, NULL); +INSERT INTO `iot_things_model` VALUES (867, '564', 162, 'CAT-T200测试13.19', 1, 'admin', '5', 1, 'integer', '{\"max\": 100, \"min\": 0, \"step\": 1, \"type\": \"integer\", \"unit\": \"\"}', 0, 0, 0, 1, 0, 0, '0', '', '2023-12-19 18:51:04', '', NULL, NULL, NULL, NULL); +INSERT INTO `iot_things_model` VALUES (868, '1', 163, 'CAT-T200 TCP测试', 1, 'admin', '0', 1, 'integer', '{\"max\": 100, \"min\": 0, \"step\": 1, \"type\": \"integer\", \"unit\": \"\"}', 0, 0, 0, 1, 0, 0, '0', '', '2023-12-20 10:15:34', '', NULL, NULL, NULL, NULL); +INSERT INTO `iot_things_model` VALUES (869, '2', 163, 'CAT-T200 TCP测试', 1, 'admin', '1', 1, 'integer', '{\"max\": 100, \"min\": 0, \"step\": 1, \"type\": \"integer\", \"unit\": \"\"}', 0, 0, 0, 1, 0, 0, '0', '', '2023-12-20 10:15:34', '', NULL, NULL, NULL, NULL); +INSERT INTO `iot_things_model` VALUES (870, '3', 163, 'CAT-T200 TCP测试', 1, 'admin', '2', 1, 'integer', '{\"max\": 100, \"min\": 0, \"step\": 1, \"type\": \"integer\", \"unit\": \"\"}', 0, 0, 0, 1, 0, 0, '0', '', '2023-12-20 10:15:34', '', NULL, NULL, NULL, NULL); +INSERT INTO `iot_things_model` VALUES (871, '4', 163, 'CAT-T200 TCP测试', 1, 'admin', '3', 1, 'integer', '{\"max\": 100, \"min\": 0, \"step\": 1, \"type\": \"integer\", \"unit\": \"\"}', 0, 0, 0, 1, 0, 0, '0', '', '2023-12-20 10:15:34', '', NULL, NULL, NULL, NULL); +INSERT INTO `iot_things_model` VALUES (872, '5', 163, 'CAT-T200 TCP测试', 1, 'admin', '4', 1, 'integer', '{\"max\": 100, \"min\": 0, \"step\": 1, \"type\": \"integer\", \"unit\": \"\"}', 0, 0, 0, 1, 0, 0, '0', '', '2023-12-20 10:15:34', '', NULL, NULL, NULL, NULL); +INSERT INTO `iot_things_model` VALUES (873, '6', 163, 'CAT-T200 TCP测试', 1, 'admin', '5', 1, 'integer', '{\"max\": 100, \"min\": 0, \"step\": 1, \"type\": \"integer\", \"unit\": \"\"}', 0, 0, 0, 1, 0, 0, '0', '', '2023-12-20 10:15:34', '', NULL, NULL, NULL, NULL); +INSERT INTO `iot_things_model` VALUES (875, '111', 165, 'gjz-chanpin', 1, 'admin', 'keystr-1', 1, 'integer', '{\"max\": 100, \"min\": 0, \"step\": 1, \"type\": \"integer\", \"unit\": \"\"}', 1, 1, 1, 1, 1, 0, '0', '', '2023-12-20 15:47:48', '', '2023-12-20 16:55:56', NULL, NULL, NULL); +INSERT INTO `iot_things_model` VALUES (876, 'DI', 166, 'IO088-12.20', 1, 'admin', '0', 1, 'enum', '{\"type\": \"enum\", \"showWay\": \"select\", \"enumList\": [{\"text\": \"0\", \"value\": \"DI-1\"}, {\"text\": \"1\", \"value\": \"DI-2\"}, {\"text\": \"2\", \"value\": \"DI-3\"}, {\"text\": \"3\", \"value\": \"DI-4\"}, {\"text\": \"4\", \"value\": \"DI-5\"}, {\"text\": \"5\", \"value\": \"DI-6\"}, {\"text\": \"6\", \"value\": \"DI-7\"}, {\"text\": \"7\", \"value\": \"DI-8\"}]}', 0, 0, 0, 1, 0, 0, '0', '', '2023-12-20 16:01:29', '', NULL, NULL, NULL, NULL); +INSERT INTO `iot_things_model` VALUES (877, 'DI', 167, '088-12.20', 1, 'admin', '0', 1, 'enum', '{\"type\": \"enum\", \"showWay\": \"select\", \"enumList\": [{\"text\": \"0\", \"value\": \"DI-1\"}, {\"text\": \"1\", \"value\": \"DI-2\"}, {\"text\": \"2\", \"value\": \"DI-3\"}, {\"text\": \"3\", \"value\": \"DI-4\"}, {\"text\": \"4\", \"value\": \"DI-5\"}, {\"text\": \"5\", \"value\": \"DI-6\"}, {\"text\": \"6\", \"value\": \"DI-7\"}, {\"text\": \"7\", \"value\": \"DI-8\"}]}', 0, 0, 0, 1, 0, 0, '0', '', '2023-12-20 16:24:31', '', NULL, NULL, NULL, NULL); +INSERT INTO `iot_things_model` VALUES (878, '222', 165, 'gjz-chanpin', 1, 'admin', 'keystr-2', 1, 'integer', '{\"max\": 100, \"min\": 0, \"step\": 1, \"type\": \"integer\", \"unit\": \"\"}', 1, 1, 1, 1, 1, 0, '0', '', '2023-12-20 16:56:05', '', NULL, NULL, NULL, NULL); +INSERT INTO `iot_things_model` VALUES (879, '111', 168, 'gjz-chanpin2', 1, 'admin', 'keystr-1', 1, 'integer', '{\"max\": 100, \"min\": 0, \"step\": 1, \"type\": \"integer\", \"unit\": \"\"}', 1, 1, 1, 1, 1, 0, '0', '', '2023-12-20 17:57:55', '', NULL, NULL, NULL, NULL); +INSERT INTO `iot_things_model` VALUES (880, '222', 168, 'gjz-chanpin2', 1, 'admin', 'keystr-2', 1, 'integer', '{\"max\": 100, \"min\": 0, \"step\": 1, \"type\": \"integer\", \"unit\": \"\"}', 1, 1, 1, 1, 1, 0, '0', '', '2023-12-20 17:58:02', '', NULL, NULL, NULL, NULL); +INSERT INTO `iot_things_model` VALUES (881, '电源管理', 169, 'YK电源控制器', 1, 'admin', 'power', 1, 'string', '{\"type\": \"string\", \"maxLength\": 1024}', 0, 0, 0, 1, 0, 0, '0', 'admin', '2023-12-26 13:55:05', '', NULL, NULL, NULL, NULL); +INSERT INTO `iot_things_model` VALUES (882, '1', 170, '照明开关', 1, 'admin', '1', 1, 'integer', '{\"max\": 1, \"min\": 1, \"step\": 1, \"type\": \"integer\", \"unit\": \"1\"}', 1, 1, 1, 1, 1, 0, '0', '', '2024-01-04 14:55:34', '', NULL, NULL, NULL, NULL); +INSERT INTO `iot_things_model` VALUES (883, 'AD1', 136, '工控帮华泰数智网关', 1, 'admin', 'AD1', 1, 'decimal', '{\"max\": 100, \"min\": 0, \"step\": 1, \"type\": \"decimal\", \"unit\": \"\"}', 1, 1, 1, 1, 1, 0, '0', '', '2025-01-07 23:40:50', '', NULL, NULL, NULL, NULL); +INSERT INTO `iot_things_model` VALUES (884, 'AD2', 136, '工控帮华泰数智网关', 1, 'admin', 'AD2', 1, 'decimal', '{\"max\": 100, \"min\": 0, \"step\": 1, \"type\": \"decimal\", \"unit\": \"\"}', 1, 1, 1, 1, 1, 1, '0', '', '2025-01-07 23:41:09', '', NULL, NULL, NULL, NULL); +INSERT INTO `iot_things_model` VALUES (885, 'AD3', 136, '工控帮华泰数智网关', 1, 'admin', 'AD3', 1, 'decimal', '{\"max\": 100, \"min\": 0, \"step\": 1, \"type\": \"decimal\", \"unit\": \"\"}', 1, 1, 1, 1, 1, 2, '0', '', '2025-01-07 23:42:05', '', NULL, NULL, NULL, NULL); +INSERT INTO `iot_things_model` VALUES (886, 'AD4', 136, '工控帮华泰数智网关', 1, 'admin', 'AD4', 1, 'decimal', '{\"max\": 100, \"min\": 0, \"step\": 1, \"type\": \"decimal\", \"unit\": \"\"}', 1, 1, 1, 1, 1, 3, '0', '', '2025-01-07 23:42:35', '', NULL, NULL, NULL, NULL); +INSERT INTO `iot_things_model` VALUES (887, 'AD5', 136, '工控帮华泰数智网关', 1, 'admin', 'AD5', 1, 'decimal', '{\"max\": 100, \"min\": 0, \"step\": 1, \"type\": \"decimal\", \"unit\": \"\"}', 1, 1, 1, 1, 1, 4, '0', '', '2025-01-07 23:43:05', '', NULL, NULL, NULL, NULL); +INSERT INTO `iot_things_model` VALUES (888, 'AD6', 136, '工控帮华泰数智网关', 1, 'admin', 'AD6', 1, 'decimal', '{\"max\": 100, \"min\": 0, \"step\": 1, \"type\": \"decimal\", \"unit\": \"\"}', 1, 1, 1, 1, 1, 5, '0', '', '2025-01-07 23:43:41', '', NULL, NULL, NULL, NULL); +INSERT INTO `iot_things_model` VALUES (889, 'AD7', 136, '工控帮华泰数智网关', 1, 'admin', 'AD7', 1, 'decimal', '{\"max\": 100, \"min\": 0, \"step\": 1, \"type\": \"decimal\", \"unit\": \"\"}', 1, 1, 1, 1, 1, 6, '0', '', '2025-01-07 23:46:29', '', NULL, NULL, NULL, NULL); +INSERT INTO `iot_things_model` VALUES (890, 'AD8', 136, '工控帮华泰数智网关', 1, 'admin', 'AD8', 1, 'decimal', '{\"max\": 100, \"min\": 0, \"step\": 1, \"type\": \"decimal\", \"unit\": \"\"}', 1, 1, 1, 1, 1, 7, '0', '', '2025-01-07 23:40:50', '', NULL, NULL, NULL, NULL); +INSERT INTO `iot_things_model` VALUES (891, 'AD9', 136, '工控帮华泰数智网关', 1, 'admin', 'AD9', 1, 'decimal', '{\"max\": 100, \"min\": 0, \"step\": 1, \"type\": \"decimal\", \"unit\": \"\"}', 1, 1, 1, 1, 1, 8, '0', '', '2025-01-07 23:41:09', '', NULL, NULL, NULL, NULL); +INSERT INTO `iot_things_model` VALUES (892, 'AD10', 136, '工控帮华泰数智网关', 1, 'admin', 'AD10', 1, 'decimal', '{\"max\": 100, \"min\": 0, \"step\": 1, \"type\": \"decimal\", \"unit\": \"\"}', 1, 1, 1, 1, 1, 9, '0', '', '2025-01-07 23:42:05', '', NULL, NULL, NULL, NULL); +INSERT INTO `iot_things_model` VALUES (893, 'AD11', 136, '工控帮华泰数智网关', 1, 'admin', 'AD11', 1, 'decimal', '{\"max\": 100, \"min\": 0, \"step\": 1, \"type\": \"decimal\", \"unit\": \"\"}', 1, 1, 1, 1, 1, 10, '0', '', '2025-01-07 23:42:35', '', NULL, NULL, NULL, NULL); +INSERT INTO `iot_things_model` VALUES (894, 'AD12', 136, '工控帮华泰数智网关', 1, 'admin', 'AD12', 1, 'decimal', '{\"max\": 100, \"min\": 0, \"step\": 1, \"type\": \"decimal\", \"unit\": \"\"}', 1, 1, 1, 1, 1, 11, '0', '', '2025-01-07 23:43:05', '', NULL, NULL, NULL, NULL); +INSERT INTO `iot_things_model` VALUES (895, 'AD13', 136, '工控帮华泰数智网关', 1, 'admin', 'AD13', 1, 'decimal', '{\"max\": 100, \"min\": 0, \"step\": 1, \"type\": \"decimal\", \"unit\": \"\"}', 1, 1, 1, 1, 1, 12, '0', '', '2025-01-07 23:43:41', '', NULL, NULL, NULL, NULL); +INSERT INTO `iot_things_model` VALUES (896, 'AD14', 136, '工控帮华泰数智网关', 1, 'admin', 'AD14', 1, 'decimal', '{\"max\": 100, \"min\": 0, \"step\": 1, \"type\": \"decimal\", \"unit\": \"\"}', 1, 1, 1, 1, 1, 13, '0', '', '2025-01-07 23:46:29', '', NULL, NULL, NULL, NULL); +INSERT INTO `iot_things_model` VALUES (897, 'AD15', 136, '工控帮华泰数智网关', 1, 'admin', 'AD15', 1, 'decimal', '{\"max\": 100, \"min\": 0, \"step\": 1, \"type\": \"decimal\", \"unit\": \"\"}', 1, 1, 1, 1, 1, 14, '0', '', '2025-01-07 23:40:50', '', NULL, NULL, NULL, NULL); +INSERT INTO `iot_things_model` VALUES (898, 'AD16', 136, '工控帮华泰数智网关', 1, 'admin', 'AD16', 1, 'decimal', '{\"max\": 100, \"min\": 0, \"step\": 1, \"type\": \"decimal\", \"unit\": \"\"}', 1, 1, 1, 1, 1, 5, '0', '', '2025-01-07 23:41:09', '', NULL, NULL, NULL, NULL); +INSERT INTO `iot_things_model` VALUES (899, 'I0.1', 136, '工控帮华泰数智网关', 1, 'admin', 'I0.1', 1, 'bool', '{\"type\": \"bool\", \"trueText\": \"闭合\", \"falseText\": \"断开\"}', 0, 0, 1, 1, 1, 16, '0', '', '2025-01-07 23:54:47', '', NULL, NULL, NULL, NULL); +INSERT INTO `iot_things_model` VALUES (900, 'I0.2', 136, '工控帮华泰数智网关', 1, 'admin', 'I0.2', 1, 'bool', '{\"type\": \"bool\", \"trueText\": \"闭合\", \"falseText\": \"断开\"}', 0, 0, 1, 1, 1, 17, '0', '', '2025-01-07 23:54:47', '', NULL, NULL, NULL, NULL); +INSERT INTO `iot_things_model` VALUES (901, 'I0.3', 136, '工控帮华泰数智网关', 1, 'admin', 'I0.3', 1, 'bool', '{\"type\": \"bool\", \"trueText\": \"闭合\", \"falseText\": \"断开\"}', 0, 0, 1, 1, 1, 18, '0', '', '2025-01-07 23:54:47', '', NULL, NULL, NULL, NULL); +INSERT INTO `iot_things_model` VALUES (902, 'I0.4', 136, '工控帮华泰数智网关', 1, 'admin', 'I0.4', 1, 'bool', '{\"type\": \"bool\", \"trueText\": \"闭合\", \"falseText\": \"断开\"}', 0, 0, 1, 1, 1, 19, '0', '', '2025-01-07 23:54:47', '', NULL, NULL, NULL, NULL); +INSERT INTO `iot_things_model` VALUES (903, 'I0.5', 136, '工控帮华泰数智网关', 1, 'admin', 'I0.5', 1, 'bool', '{\"type\": \"bool\", \"trueText\": \"闭合\", \"falseText\": \"断开\"}', 0, 0, 1, 1, 1, 20, '0', '', '2025-01-07 23:54:47', '', NULL, NULL, NULL, NULL); +INSERT INTO `iot_things_model` VALUES (904, 'I0.6', 136, '工控帮华泰数智网关', 1, 'admin', 'I0.6', 1, 'bool', '{\"type\": \"bool\", \"trueText\": \"闭合\", \"falseText\": \"断开\"}', 0, 0, 1, 1, 1, 21, '0', '', '2025-01-07 23:54:47', '', NULL, NULL, NULL, NULL); +INSERT INTO `iot_things_model` VALUES (905, 'lng', 136, '工控帮华泰数智网关', 1, 'admin', 'lng', 1, 'decimal', '{\"max\": 100, \"min\": 0, \"step\": 1, \"type\": \"decimal\", \"unit\": \"\"}', 1, 1, 1, 1, 1, 22, '0', '', '2025-01-07 23:58:35', '', NULL, NULL, NULL, NULL); +INSERT INTO `iot_things_model` VALUES (906, 'lat', 136, '工控帮华泰数智网关', 1, 'admin', 'lat', 1, 'decimal', '{\"max\": 100, \"min\": 0, \"step\": 1, \"type\": \"decimal\", \"unit\": \"\"}', 1, 1, 1, 1, 1, 23, '0', '', '2025-01-07 23:59:01', '', NULL, NULL, NULL, NULL); +INSERT INTO `iot_things_model` VALUES (907, 'PAD', 136, '工控帮华泰数智网关', 1, 'admin', 'PAD', 1, 'integer', '{\"max\": 100, \"min\": 0, \"step\": 1, \"type\": \"integer\", \"unit\": \"\"}', 1, 1, 1, 1, 1, 24, '0', '', '2025-01-07 23:59:46', '', NULL, NULL, NULL, NULL); +INSERT INTO `iot_things_model` VALUES (908, 'Q0.1', 136, '工控帮华泰数智网关', 1, 'admin', 'Q0.1', 2, 'bool', '{\"type\": \"bool\", \"trueText\": \"闭合\", \"falseText\": \"断开\"}', 0, 0, 1, 0, 1, 25, '0', '', '2025-01-08 00:02:03', '', NULL, NULL, NULL, NULL); +INSERT INTO `iot_things_model` VALUES (909, 'Q0.2', 136, '工控帮华泰数智网关', 1, 'admin', 'Q0.2', 2, 'bool', '{\"type\": \"bool\", \"trueText\": \"闭合\", \"falseText\": \"断开\"}', 0, 0, 1, 0, 1, 26, '0', '', '2025-01-08 00:02:03', '', NULL, NULL, NULL, NULL); +INSERT INTO `iot_things_model` VALUES (910, 'Q0.3', 136, '工控帮华泰数智网关', 1, 'admin', 'Q0.3', 2, 'bool', '{\"type\": \"bool\", \"trueText\": \"闭合\", \"falseText\": \"断开\"}', 0, 0, 1, 0, 1, 27, '0', '', '2025-01-08 00:02:03', '', NULL, NULL, NULL, NULL); +INSERT INTO `iot_things_model` VALUES (911, 'Q0.4', 136, '工控帮华泰数智网关', 1, 'admin', 'Q0.4', 2, 'bool', '{\"type\": \"bool\", \"trueText\": \"闭合\", \"falseText\": \"断开\"}', 0, 0, 1, 0, 1, 28, '0', '', '2025-01-08 00:02:03', '', NULL, NULL, NULL, NULL); +INSERT INTO `iot_things_model` VALUES (912, 'Q0.5', 136, '工控帮华泰数智网关', 1, 'admin', 'Q0.5', 2, 'bool', '{\"type\": \"bool\", \"trueText\": \"闭合\", \"falseText\": \"断开\"}', 0, 0, 1, 0, 1, 29, '0', '', '2025-01-08 00:02:03', '', NULL, NULL, NULL, NULL); +INSERT INTO `iot_things_model` VALUES (913, 'Q0.6', 136, '工控帮华泰数智网关', 1, 'admin', 'Q0.6', 2, 'bool', '{\"type\": \"bool\", \"trueText\": \"闭合\", \"falseText\": \"断开\"}', 0, 0, 1, 0, 1, 30, '0', '', '2025-01-08 00:02:03', '', NULL, NULL, NULL, NULL); +INSERT INTO `iot_things_model` VALUES (914, '上报时间', 136, '工控帮华泰数智网关', 1, 'admin', 'TIME', 2, 'integer', '{\"max\": 100, \"min\": 1, \"step\": 1, \"type\": \"integer\", \"unit\": \"\"}', 0, 0, 1, 0, 1, 31, '0', '', '2025-01-08 00:07:04', '', '2025-01-08 22:55:12', NULL, NULL, NULL); +INSERT INTO `iot_things_model` VALUES (915, '查询', 136, '工控帮华泰数智网关', 1, 'admin', 'select', 2, 'enum', '{\"type\": \"enum\", \"showWay\": \"select\", \"enumList\": [{\"text\": \"模拟量\", \"value\": \"GKB29810,ADC,8\"}, {\"text\": \"输入开关量\", \"value\": \"GKB29810,IPUT,\"}]}', 0, 0, 1, 0, 1, 32, '0', '', '2025-01-08 23:02:01', '', NULL, NULL, NULL, NULL); +INSERT INTO `iot_things_model` VALUES (916, '开关量输出控制', 136, '工控帮华泰数智网关', 1, 'admin', 'OUT', 2, 'enum', '{\"type\": \"enum\", \"showWay\": \"select\", \"enumList\": [{\"text\": \"全断开\", \"value\": \"GKB29810,OUT,{\\\"Q0.1\\\":0,\\\"Q0.2\\\":0,\\\"Q0.3\\\":0,\\\"Q0.4\\\":0,\\\"Q0.5\\\":0,\\\"Q0.6\\\":0}\"}, {\"text\": \"全闭合\", \"value\": \"GKB29810,OUT,{\\\"Q0.1\\\":1,\\\"Q0.2\\\":1,\\\"Q0.3\\\":1,\\\"Q0.4\\\":1,\\\"Q0.5\\\":1,\\\"Q0.6\\\":1}\"}]}', 0, 0, 1, 0, 1, 33, '0', '', '2025-01-08 23:04:55', '', '2025-01-09 00:37:38', NULL, NULL, NULL); +INSERT INTO `iot_things_model` VALUES (917, '通信控制', 136, '工控帮华泰数智网关', 1, 'admin', 'MODBUS', 2, 'string', '{\"type\": \"string\", \"maxLength\": 1024}', 0, 0, 1, 0, 1, 34, '0', '', '2025-01-08 23:07:33', '', NULL, NULL, NULL, NULL); + +-- ---------------------------- +-- Table structure for iot_things_model_template +-- ---------------------------- +DROP TABLE IF EXISTS `iot_things_model_template`; +CREATE TABLE `iot_things_model_template` ( + `template_id` bigint NOT NULL AUTO_INCREMENT COMMENT '物模型ID', + `template_name` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL COMMENT '物模型名称', + `tenant_id` bigint NOT NULL COMMENT '租户ID', + `tenant_name` varchar(30) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL DEFAULT '' COMMENT '租户名称', + `identifier` varchar(32) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL COMMENT '标识符,产品下唯一', + `type` tinyint(1) NOT NULL COMMENT '模型类别(1-属性,2-功能,3-事件)', + `datatype` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL COMMENT '数据类型(integer、decimal、string、bool、array、enum)', + `specs` json NULL COMMENT '数据定义', + `is_sys` tinyint(1) NOT NULL DEFAULT 0 COMMENT '是否系统通用(0-否,1-是)', + `is_chart` tinyint(1) NOT NULL DEFAULT 0 COMMENT '是否图表展示(0-否,1-是)', + `is_monitor` tinyint(1) NOT NULL DEFAULT 0 COMMENT '是否实时监测(0-否,1-是)', + `is_history` tinyint(1) NOT NULL DEFAULT 0 COMMENT '是否历史存储 (0-否,1-是)', + `is_readonly` tinyint(1) NULL DEFAULT 0 COMMENT '是否只读数据(0-否,1-是)', + `is_share_perm` tinyint(1) NULL DEFAULT 0 COMMENT '是否设备分享权限(0-否,1-是)', + `model_order` int NULL DEFAULT 0 COMMENT '排序,值越大,排序越靠前', + `del_flag` char(1) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT '0' COMMENT '删除标志(0代表存在 2代表删除)', + `create_by` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT '' COMMENT '创建者', + `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间', + `update_by` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT '' COMMENT '更新者', + `update_time` datetime NULL DEFAULT NULL COMMENT '更新时间', + `remark` varchar(500) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT NULL COMMENT '备注', + `formula` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT NULL COMMENT '计算公式', + `is_app` tinyint(1) NULL DEFAULT NULL COMMENT '是否在APP显示(0-否,1-是)', + PRIMARY KEY (`template_id`) USING BTREE, + INDEX `iot_things_model_template_index_tenant_id`(`tenant_id`) USING BTREE, + INDEX `iot_things_model_template_index_model_order`(`model_order`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 560 CHARACTER SET = utf8mb3 COLLATE = utf8mb3_general_ci COMMENT = '物模型模板' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of iot_things_model_template +-- ---------------------------- +INSERT INTO `iot_things_model_template` VALUES (1, '空气温度', 1, 'admin', 'temperature', 1, 'decimal', '{\"max\": 120, \"min\": -20, \"step\": 0.1, \"type\": \"decimal\", \"unit\": \"℃\"}', 1, 1, 1, 1, 1, 0, 4, '0', 'admin', '2022-03-09 17:41:49', 'admin', '2023-04-10 01:12:06', NULL, NULL, NULL); +INSERT INTO `iot_things_model_template` VALUES (2, '空气湿度', 1, 'admin', 'humidity', 1, 'decimal', '{\"max\": 100, \"min\": 0, \"step\": 0.1, \"type\": \"decimal\", \"unit\": \"%\"}', 1, 1, 1, 1, 1, 0, 3, '0', 'admin', '2022-03-09 17:41:49', 'admin', '2023-04-10 01:12:02', NULL, NULL, NULL); +INSERT INTO `iot_things_model_template` VALUES (3, '二氧化碳', 1, 'admin', 'co2', 1, 'integer', '{\"max\": 6000, \"min\": 100, \"step\": 1, \"type\": \"integer\", \"unit\": \"ppm\"}', 1, 1, 1, 1, 1, 0, 0, '0', 'admin', '2022-03-09 17:41:49', 'admin', '2023-04-10 01:11:57', NULL, NULL, NULL); +INSERT INTO `iot_things_model_template` VALUES (4, '室内亮度', 1, 'admin', 'brightness', 1, 'integer', '{\"max\": 10000, \"min\": 0, \"step\": 1, \"type\": \"integer\", \"unit\": \"cd/m2\"}', 1, 1, 1, 1, 1, 0, 0, '0', 'admin', '2022-03-09 17:41:49', 'admin', '2023-04-10 01:11:53', NULL, NULL, NULL); +INSERT INTO `iot_things_model_template` VALUES (5, '设备开关', 1, 'admin', 'switch', 2, 'bool', '{\"type\": \"bool\", \"trueText\": \"打开\", \"falseText\": \"关闭\"}', 1, 0, 0, 1, 0, 0, 5, '0', 'admin', '2022-03-09 17:41:49', 'admin', '2023-04-10 01:11:48', NULL, NULL, NULL); +INSERT INTO `iot_things_model_template` VALUES (6, '运行档位', 1, 'admin', 'gear', 2, 'enum', '{\"type\": \"enum\", \"showWay\": \"select\", \"enumList\": [{\"text\": \"低速档位\", \"value\": \"0\"}, {\"text\": \"中速档位\", \"value\": \"1\"}, {\"text\": \"中高速档位\", \"value\": \"2\"}, {\"text\": \"高速档位\", \"value\": \"3\"}]}', 1, 0, 0, 1, 0, 0, 6, '0', 'admin', '2022-03-09 17:41:49', 'admin', '2023-04-10 01:11:43', NULL, NULL, NULL); +INSERT INTO `iot_things_model_template` VALUES (7, '灯光色值', 1, 'admin', 'light_color', 2, 'array', '{\"type\": \"array\", \"arrayType\": \"integer\", \"arrayCount\": \"3\"}', 1, 0, 0, 1, 0, 0, 2, '0', 'admin', '2022-03-09 17:41:49', 'admin', '2023-04-10 01:11:38', NULL, NULL, NULL); +INSERT INTO `iot_things_model_template` VALUES (8, '屏显消息', 1, 'admin', 'message', 2, 'string', '{\"type\": \"string\", \"maxLength\": 1024}', 1, 0, 0, 1, 0, 0, 1, '0', 'admin', '2022-03-09 17:41:49', 'admin', '2023-04-10 01:11:32', NULL, NULL, NULL); +INSERT INTO `iot_things_model_template` VALUES (9, '上报监测数据', 1, 'admin', 'report_monitor', 2, 'integer', '{\"max\": 10, \"min\": 1, \"step\": 1, \"type\": \"integer\", \"unit\": \"次数\"}', 1, 0, 0, 0, 0, 0, 9, '0', 'admin', '2022-03-09 17:41:49', 'admin', '2023-04-10 01:11:25', NULL, NULL, NULL); +INSERT INTO `iot_things_model_template` VALUES (10, '环境温度过高', 1, 'admin', 'height_temperature', 3, 'decimal', '{\"max\": 100, \"min\": 0, \"step\": 0.1, \"type\": \"decimal\", \"unit\": \"℃\"}', 1, 0, 0, 1, 0, 0, 8, '0', 'admin', '2022-03-09 17:41:49', 'admin', '2023-04-10 01:11:19', NULL, NULL, NULL); +INSERT INTO `iot_things_model_template` VALUES (11, '设备发生异常', 1, 'admin', 'exception', 3, 'string', '{\"type\": \"string\", \"maxLength\": 1024}', 1, 0, 0, 1, 0, 0, 7, '0', 'admin', '2022-03-09 17:41:49', 'admin', '2023-04-10 01:11:16', NULL, NULL, NULL); +INSERT INTO `iot_things_model_template` VALUES (12, '光照', 1, 'admin', 'light', 1, 'decimal', '{\"max\": 100, \"min\": 0, \"step\": 1, \"type\": \"decimal\", \"unit\": \"mm\"}', 0, 1, 1, 1, 1, 0, 0, '0', 'xinda', '2022-05-07 09:41:17', 'admin', '2023-04-10 01:11:12', NULL, NULL, NULL); +INSERT INTO `iot_things_model_template` VALUES (13, '压力', 1, 'admin', 'pressure', 1, 'decimal', '{\"max\": 200, \"min\": 0, \"step\": 0.1, \"type\": \"decimal\", \"unit\": \"帕斯卡\"}', 1, 1, 1, 1, 1, 0, 0, '0', 'admin', '2023-02-20 22:39:18', 'admin', '2023-04-10 01:11:05', NULL, NULL, NULL); +INSERT INTO `iot_things_model_template` VALUES (14, '设备重启', 1, 'admin', 'reset', 2, 'enum', '{\"type\": \"enum\", \"showWay\": \"button\", \"enumList\": [{\"text\": \"重启\", \"value\": \"restart\"}]}', 1, 0, 0, 1, 0, 0, 0, '0', 'admin', '2023-02-20 23:15:25', 'admin', '2023-04-10 01:11:08', NULL, NULL, NULL); +INSERT INTO `iot_things_model_template` VALUES (15, '电池电压', 1, 'admin', 'voltage', 1, 'decimal', '{\"max\": 5, \"min\": 0, \"step\": 0.001, \"type\": \"decimal\", \"unit\": \"V\"}', 1, 1, 1, 1, 1, 0, 0, '0', 'admin', '2023-02-20 23:17:43', 'admin', '2023-04-10 01:10:56', NULL, NULL, NULL); +INSERT INTO `iot_things_model_template` VALUES (16, '饮水量', 1, 'admin', 'shuiliang', 1, 'integer', '{\"max\": 500, \"min\": 80, \"step\": 1, \"type\": \"integer\", \"unit\": \"ML\"}', 1, 1, 1, 1, 1, 0, 0, '0', 'admin', '2023-02-20 23:18:39', 'admin', '2023-04-10 01:10:52', NULL, NULL, NULL); +INSERT INTO `iot_things_model_template` VALUES (17, '灯光', 1, 'admin', 'light', 1, 'integer', '{\"max\": 1000, \"min\": 0, \"step\": 1, \"type\": \"integer\", \"unit\": \"Lux\"}', 1, 1, 1, 1, 1, 0, 0, '0', 'admin', '2023-02-20 23:19:23', 'admin', '2023-04-10 01:10:49', NULL, NULL, NULL); +INSERT INTO `iot_things_model_template` VALUES (18, '长度', 1, 'admin', 'length', 1, 'integer', '{\"max\": 2000, \"min\": 1, \"step\": 5, \"type\": \"integer\", \"unit\": \"M\"}', 1, 1, 1, 1, 1, 0, 0, '0', 'admin', '2023-02-20 23:20:03', 'admin', '2023-04-10 01:10:44', NULL, NULL, NULL); +INSERT INTO `iot_things_model_template` VALUES (19, '心率', 1, 'admin', 'heart_rate', 1, 'integer', '{\"max\": 250, \"min\": 0, \"step\": 1, \"type\": \"integer\", \"unit\": \"次数\"}', 1, 1, 1, 1, 1, 0, 0, '0', 'admin', '2023-02-20 23:21:46', 'admin', '2023-04-10 01:12:40', NULL, NULL, NULL); +INSERT INTO `iot_things_model_template` VALUES (20, '光照强度', 1, 'admin', 'light_level', 1, 'integer', '{\"max\": 89.2, \"min\": 2.5, \"step\": 0.1, \"type\": \"integer\", \"unit\": \"L/g\"}', 1, 1, 1, 1, 1, 0, 0, '0', 'admin', '2023-02-20 23:24:36', 'admin', '2023-04-10 01:10:35', NULL, NULL, NULL); +INSERT INTO `iot_things_model_template` VALUES (21, '状态灯色', 1, 'admin', 'color', 2, 'enum', '{\"type\": \"enum\", \"showWay\": \"select\", \"enumList\": [{\"text\": \"红色\", \"value\": \"0\"}, {\"text\": \"绿色\", \"value\": \"1\"}, {\"text\": \"蓝色\", \"value\": \"2\"}, {\"text\": \"黄色\", \"value\": \"3\"}]}', 1, 0, 0, 1, 0, 0, 0, '0', 'admin', '2023-02-20 23:26:24', 'admin', '2023-04-10 01:10:32', NULL, NULL, NULL); +INSERT INTO `iot_things_model_template` VALUES (22, '子设备', 1, 'admin', 'device', 2, 'array', '{\"type\": \"array\", \"params\": [{\"id\": \"device_co2\", \"name\": \"二氧化碳\", \"order\": 0, \"isChart\": 1, \"datatype\": {\"max\": 6000, \"min\": 100, \"step\": 1, \"type\": \"integer\", \"unit\": \"ppm\", \"enumList\": [{\"text\": \"\", \"value\": \"\"}], \"arrayType\": \"int\"}, \"isHistory\": 1, \"isMonitor\": 1, \"isReadonly\": 1}, {\"id\": \"device_temperature\", \"name\": \"空气温度-只读\", \"order\": 4, \"isChart\": 0, \"datatype\": {\"max\": 120, \"min\": -20, \"step\": 0.1, \"type\": \"decimal\", \"unit\": \"℃\", \"enumList\": [{\"text\": \"\", \"value\": \"\"}], \"arrayType\": \"int\"}, \"isMonitor\": 0, \"isReadonly\": 1}, {\"id\": \"device_gear\", \"name\": \"运行档位\", \"order\": 6, \"datatype\": {\"type\": \"enum\", \"showWay\": \"select\", \"enumList\": [{\"text\": \"低速档位\", \"value\": \"0\"}, {\"text\": \"中速档位\", \"value\": \"1\"}, {\"text\": \"中高速档位\", \"value\": \"2\"}, {\"text\": \"高速档位\", \"value\": \"3\"}]}, \"isMonitor\": 0, \"isReadonly\": 0}, {\"id\": \"device_switch\", \"name\": \"设备开关\", \"order\": 5, \"datatype\": {\"type\": \"bool\", \"enumList\": [{\"text\": \"\", \"value\": \"\"}], \"trueText\": \"打开\", \"arrayType\": \"int\", \"falseText\": \"关闭\"}, \"isMonitor\": 0, \"isReadonly\": 0}, {\"id\": \"device_report_monitor\", \"name\": \"上报监测数据\", \"order\": 9, \"datatype\": {\"max\": 10, \"min\": 1, \"step\": 1, \"type\": \"integer\", \"unit\": \"次数\", \"enumList\": [{\"text\": \"\", \"value\": \"\"}], \"arrayType\": \"int\"}, \"isHistory\": 0, \"isMonitor\": 0, \"isReadonly\": 0}], \"arrayType\": \"object\", \"arrayCount\": 5}', 1, 0, 0, 0, 0, 0, 10, '0', 'admin', '2023-02-24 01:10:43', 'admin', '2023-04-13 01:33:38', NULL, NULL, NULL); +INSERT INTO `iot_things_model_template` VALUES (23, '功能分组', 1, 'admin', 'group', 2, 'object', '{\"type\": \"object\", \"params\": [{\"id\": \"group_light\", \"name\": \"光照\", \"order\": 1, \"isChart\": 1, \"datatype\": {\"max\": 100, \"min\": 0, \"step\": 1, \"type\": \"decimal\", \"unit\": \"mm\"}, \"isHistory\": 1, \"isMonitor\": 1, \"isReadonly\": 1}, {\"id\": \"group_humidity\", \"name\": \"空气湿度\", \"order\": 2, \"isChart\": 1, \"datatype\": {\"max\": 100, \"min\": 0, \"step\": 0.1, \"type\": \"decimal\", \"unit\": \"%\"}, \"isMonitor\": 1, \"isReadonly\": 1}, {\"id\": \"group_temperature\", \"name\": \"空气温度-只读\", \"order\": 3, \"isChart\": 0, \"datatype\": {\"max\": 120, \"min\": -20, \"step\": 0.1, \"type\": \"decimal\", \"unit\": \"℃\"}, \"isMonitor\": 0, \"isReadonly\": 1}, {\"id\": \"group_report_monitor\", \"name\": \"上报监测数据\", \"order\": 7, \"datatype\": {\"max\": 10, \"min\": 1, \"step\": 1, \"type\": \"integer\", \"unit\": \"次数\"}, \"isHistory\": 0, \"isMonitor\": 0, \"isReadonly\": 0}, {\"id\": \"group_gear\", \"name\": \"运行档位\", \"order\": 5, \"datatype\": {\"type\": \"enum\", \"showWay\": \"select\", \"enumList\": [{\"text\": \"低速档位\", \"value\": \"0\"}, {\"text\": \"中速档位\", \"value\": \"1\"}, {\"text\": \"中高速档位\", \"value\": \"2\"}, {\"text\": \"高速档位\", \"value\": \"3\"}]}, \"isHistory\": 1, \"isMonitor\": 0, \"isReadonly\": 0}, {\"id\": \"group_switch\", \"name\": \"设备开关\", \"order\": 4, \"datatype\": {\"type\": \"bool\", \"trueText\": \"打开\", \"falseText\": \"关闭\"}, \"isMonitor\": 0, \"isReadonly\": 0}, {\"id\": \"group_irc\", \"name\": \"红外遥控\", \"order\": 6, \"isChart\": 0, \"datatype\": {\"type\": \"enum\", \"showWay\": \"button\", \"enumList\": [{\"text\": \"遥控学习\", \"value\": \"FFXX01\"}, {\"text\": \"遥控清码\", \"value\": \"FFXX02\"}, {\"text\": \"打开开关\", \"value\": \"FFXX03\"}, {\"text\": \"关闭开关\", \"value\": \"FFXX04\"}, {\"text\": \"暂停\", \"value\": \"FFXX05\"}, {\"text\": \"锁定\", \"value\": \"FFXX06\"}]}, \"isHistory\": 1, \"isMonitor\": 0, \"isReadonly\": 0}]}', 1, 0, 0, 0, 0, 0, 11, '0', 'admin', '2023-02-25 22:41:43', 'admin', '2023-08-30 15:29:34', NULL, NULL, NULL); +INSERT INTO `iot_things_model_template` VALUES (201, '频率 ', 1, 'admin', 'frequency', 2, 'integer', '{\"max\": 65535, \"min\": 0, \"step\": 1, \"type\": \"integer\", \"unit\": \"0.001Hz\"}', 1, 0, 0, 1, 0, 0, 0, '0', '', '2023-02-28 16:08:06', 'admin', '2023-04-10 03:37:11', NULL, '%s*0.001', NULL); +INSERT INTO `iot_things_model_template` VALUES (225, '校验位', 1, 'admin', 'check', 2, 'enum', '{\"type\": \"enum\", \"showWay\": \"select\", \"enumList\": [{\"text\": \"N\", \"value\": \"0\"}, {\"text\": \"O\", \"value\": \"1\"}, {\"text\": \"E\", \"value\": \"2\"}]}', 1, 0, 0, 1, 1, 0, 0, '0', '', '2023-02-28 16:08:08', 'admin', '2023-04-10 21:36:01', NULL, '', NULL); +INSERT INTO `iot_things_model_template` VALUES (226, '波特率', 1, 'admin', 'baud', 2, 'enum', '{\"type\": \"enum\", \"showWay\": \"select\", \"enumList\": [{\"text\": \"1200\", \"value\": \"0\"}, {\"text\": \"2400\", \"value\": \"1\"}, {\"text\": \"4800\", \"value\": \"2\"}, {\"text\": \"9600\", \"value\": \"3\"}, {\"text\": \"19200\", \"value\": \"4\"}]}', 1, 0, 0, 1, 1, 0, 0, '0', '', '2023-02-28 16:08:09', 'admin', '2023-04-10 03:37:32', NULL, '', NULL); +INSERT INTO `iot_things_model_template` VALUES (227, '电压', 1, 'admin', 'voltage', 1, 'integer', '{\"max\": 6, \"min\": 0.1, \"step\": 0.1, \"type\": \"integer\", \"unit\": \"v\"}', 1, 1, 1, 1, 1, 0, 0, '0', '', '2023-02-28 16:08:09', 'admin', '2023-04-10 03:37:16', NULL, '', NULL); +INSERT INTO `iot_things_model_template` VALUES (236, '射频遥控', 1, 'admin', 'irc', 2, 'enum', '{\"type\": \"enum\", \"showWay\": \"button\", \"enumList\": [{\"text\": \"遥控学习\", \"value\": \"FFXX01\"}, {\"text\": \"遥控清码\", \"value\": \"FFXX02\"}, {\"text\": \"打开开关\", \"value\": \"FFXX03\"}, {\"text\": \"关闭开关\", \"value\": \"FFXX04\"}, {\"text\": \"暂停\", \"value\": \"FFXX05\"}, {\"text\": \"锁定\", \"value\": \"FFXX06\"}]}', 1, 0, 0, 1, 0, 0, 0, '0', 'admin', '2023-03-31 23:46:20', 'admin', '2023-04-10 01:09:46', NULL, NULL, NULL); +INSERT INTO `iot_things_model_template` VALUES (250, '漏水值', 1, 'admin', '0', 1, 'integer', '{\"max\": 100, \"min\": 1, \"step\": 1, \"type\": \"integer\", \"unit\": \"度\"}', 1, 0, 0, 1, 0, 0, 0, '0', '', '2023-04-11 22:35:36', '', '2023-09-13 23:32:34', NULL, NULL, NULL); +INSERT INTO `iot_things_model_template` VALUES (251, '温度', 1, 'admin', '0', 1, 'integer', '{\"max\": 100, \"min\": 1, \"step\": 1, \"type\": \"integer\", \"unit\": \"°\"}', 1, 0, 0, 1, 0, 0, 0, '0', '', '2023-04-11 22:36:10', '', '2023-09-13 23:32:51', NULL, NULL, NULL); +INSERT INTO `iot_things_model_template` VALUES (252, '电量', 1, 'admin', '1', 1, 'integer', '{\"max\": 100, \"min\": 1, \"step\": 1, \"type\": \"integer\", \"unit\": \"\"}', 1, 0, 0, 1, 0, 0, 0, '0', '', '2023-04-11 22:36:27', '', '2023-09-13 23:33:11', NULL, NULL, NULL); +INSERT INTO `iot_things_model_template` VALUES (323, '上报状态', 1, 'admin', 'status', 2, 'enum', '{\"type\": \"enum\", \"showWay\": \"button\", \"enumList\": [{\"text\": \"更新状态\", \"value\": \"update_status\"}]}', 1, 0, 0, 0, 0, 1, 0, '0', 'admin', '2023-04-13 01:35:42', 'admin', '2023-09-03 10:50:16', NULL, NULL, NULL); +INSERT INTO `iot_things_model_template` VALUES (324, 'X位移', 1, 'admin', 'x-shift', 1, 'decimal', '{\"max\": 100, \"min\": 0, \"step\": 1, \"type\": \"decimal\", \"unit\": \"mm\"}', 1, 1, 1, 1, 1, 0, 0, '0', '', '2023-08-26 19:36:58', '', NULL, NULL, NULL, NULL); +INSERT INTO `iot_things_model_template` VALUES (325, 'Y位移', 1, 'admin', 'y-shift', 1, 'decimal', '{\"max\": 100, \"min\": 0, \"step\": 1, \"type\": \"decimal\", \"unit\": \"mm\"}', 1, 1, 1, 1, 1, 0, 0, '0', '', '2023-08-26 19:37:23', '', '2023-08-26 19:37:32', NULL, NULL, NULL); +INSERT INTO `iot_things_model_template` VALUES (326, 'X位移', 1, 'admin', 'x-shift', 1, 'decimal', '{\"max\": 100, \"min\": 0, \"step\": 1, \"type\": \"decimal\", \"unit\": \"mm\"}', 1, 1, 1, 1, 1, 0, 0, '0', '', '2023-08-26 19:38:31', '', NULL, NULL, NULL, NULL); +INSERT INTO `iot_things_model_template` VALUES (327, 'Y位移', 1, 'admin', 'y-shift', 1, 'decimal', '{\"max\": 100, \"min\": 0, \"step\": 1, \"type\": \"decimal\", \"unit\": \"mm\"}', 1, 1, 1, 1, 1, 0, 0, '0', '', '2023-08-26 19:38:51', '', NULL, NULL, NULL, NULL); +INSERT INTO `iot_things_model_template` VALUES (328, '计件数量', 1, 'admin', '0', 1, 'integer', '{\"max\": 10000, \"min\": 0, \"step\": 1, \"type\": \"integer\", \"unit\": \"\"}', 1, 0, 0, 0, 1, 0, 0, '0', '', '2023-08-28 15:05:25', '', NULL, NULL, NULL, NULL); +INSERT INTO `iot_things_model_template` VALUES (329, '参数1', 1, 'admin', '0', 1, 'integer', '{\"max\": 100, \"min\": 0, \"step\": 1, \"type\": \"integer\", \"unit\": \"\"}', 1, 0, 0, 0, 1, 0, 0, '0', '', '2023-08-28 15:06:55', '', NULL, NULL, NULL, NULL); +INSERT INTO `iot_things_model_template` VALUES (330, '图片', 1, 'admin', 'image', 1, 'string', '{\"type\": \"string\", \"maxLength\": 10240}', 1, 0, 0, 1, 1, 0, 0, '0', '', '2023-08-28 23:19:30', '', NULL, NULL, NULL, NULL); +INSERT INTO `iot_things_model_template` VALUES (331, '回路状态', 10, 'jamon', 'loop_status', 1, 'array', '{\"type\": \"array\", \"arrayType\": \"integer\"}', 0, 0, 0, 0, 0, 0, 0, '0', '', '2023-08-29 18:21:38', '', NULL, NULL, NULL, NULL); +INSERT INTO `iot_things_model_template` VALUES (332, '回路状态', 10, 'jamon', 'loop_status', 1, 'array', '{\"type\": \"array\", \"arrayType\": \"integer\"}', 0, 0, 0, 0, 0, 0, 0, '0', '', '2023-08-29 18:23:08', '', NULL, NULL, NULL, NULL); +INSERT INTO `iot_things_model_template` VALUES (335, '湿度', 1, 'admin', '0', 1, 'integer', '{\"max\": 100, \"min\": 0, \"step\": 1, \"type\": \"integer\", \"unit\": \"\"}', 1, 0, 0, 1, 1, 0, 0, '0', '', '2023-08-30 14:05:38', '', '2023-08-30 14:58:28', NULL, '%s/10', NULL); +INSERT INTO `iot_things_model_template` VALUES (336, '温度', 1, 'admin', '1', 1, 'integer', '{\"max\": 100, \"min\": 0, \"step\": 1, \"type\": \"integer\", \"unit\": \"°C\"}', 1, 0, 0, 1, 1, 0, 0, '0', '', '2023-08-30 14:06:05', '', '2023-08-30 14:58:38', NULL, '%s/10', NULL); +INSERT INTO `iot_things_model_template` VALUES (341, '视频', 1, 'admin', 'video', 1, 'integer', '{\"max\": 100, \"min\": 0, \"step\": 1, \"type\": \"integer\", \"unit\": \"\"}', 1, 0, 0, 1, 1, 0, 0, '0', '', '2023-08-30 23:08:51', '', '2023-08-30 23:25:15', NULL, NULL, NULL); +INSERT INTO `iot_things_model_template` VALUES (342, '图片', 1, 'admin', 'image', 1, 'string', '{\"type\": \"string\", \"maxLength\": 1024}', 1, 0, 0, 1, 1, 0, 0, '0', '', '2023-08-30 23:21:48', '', '2023-08-30 23:25:22', NULL, NULL, NULL); +INSERT INTO `iot_things_model_template` VALUES (343, '状态', 1, 'admin', 'status', 1, 'integer', '{\"max\": 100, \"min\": 0, \"step\": 1, \"type\": \"integer\", \"unit\": \"\"}', 1, 0, 0, 1, 1, 0, 0, '0', '', '2023-08-30 23:28:00', '', '2023-08-30 23:28:17', NULL, NULL, NULL); +INSERT INTO `iot_things_model_template` VALUES (359, '相电压UA', 1, 'admin', '37', 1, 'integer', '{\"max\": 500, \"min\": 0, \"step\": 1, \"type\": \"integer\", \"unit\": \"V\"}', 1, 0, 0, 0, 1, 0, 1, '0', '', '2023-12-06 16:32:11', '', '2023-12-07 18:10:53', NULL, NULL, NULL); +INSERT INTO `iot_things_model_template` VALUES (360, '相电压UB', 1, 'admin', '38', 1, 'integer', '{\"max\": 500, \"min\": 0, \"step\": 1, \"type\": \"integer\", \"unit\": \"V\"}', 1, 0, 0, 0, 1, 0, 2, '0', '', '2023-12-06 16:32:59', '', '2023-12-07 18:10:56', NULL, NULL, NULL); +INSERT INTO `iot_things_model_template` VALUES (361, '相电压UC', 1, 'admin', '39', 1, 'integer', '{\"max\": 500, \"min\": 0, \"step\": 1, \"type\": \"integer\", \"unit\": \"V\"}', 1, 0, 0, 0, 1, 0, 3, '0', '', '2023-12-06 16:34:20', '', '2023-12-07 18:11:00', NULL, NULL, NULL); +INSERT INTO `iot_things_model_template` VALUES (362, '线电压UAB', 1, 'admin', '40', 1, 'integer', '{\"max\": 500, \"min\": 0, \"step\": 1, \"type\": \"integer\", \"unit\": \"V\"}', 1, 0, 0, 0, 1, 0, 4, '0', '', '2023-12-06 16:34:46', '', '2023-12-07 18:11:05', NULL, NULL, NULL); +INSERT INTO `iot_things_model_template` VALUES (363, '线电压UBC', 1, 'admin', '41', 1, 'integer', '{\"max\": 500, \"min\": 0, \"step\": 1, \"type\": \"integer\", \"unit\": \"V\"}', 1, 0, 0, 0, 1, 0, 5, '0', '', '2023-12-06 16:35:10', '', '2023-12-07 18:11:08', NULL, NULL, NULL); +INSERT INTO `iot_things_model_template` VALUES (364, '线电压UAC', 1, 'admin', '42', 1, 'integer', '{\"max\": 500, \"min\": 0, \"step\": 1, \"type\": \"integer\", \"unit\": \"V\"}', 1, 0, 0, 0, 1, 0, 6, '0', '', '2023-12-06 16:35:33', '', '2023-12-07 18:11:10', NULL, NULL, NULL); +INSERT INTO `iot_things_model_template` VALUES (365, '电流IA', 1, 'admin', '43', 1, 'integer', '{\"max\": 100, \"min\": 0, \"step\": 1, \"type\": \"integer\", \"unit\": \"A\"}', 1, 0, 0, 0, 1, 0, 7, '0', '', '2023-12-06 16:36:14', '', '2023-12-07 18:11:13', NULL, NULL, NULL); +INSERT INTO `iot_things_model_template` VALUES (366, '电流IB', 1, 'admin', '44', 1, 'integer', '{\"max\": 100, \"min\": 0, \"step\": 1, \"type\": \"integer\", \"unit\": \"A\"}', 1, 0, 0, 0, 1, 0, 8, '0', '', '2023-12-06 16:36:44', '', '2023-12-07 18:11:20', NULL, NULL, NULL); +INSERT INTO `iot_things_model_template` VALUES (367, '电流IC', 1, 'admin', '45', 1, 'integer', '{\"max\": 100, \"min\": 0, \"step\": 1, \"type\": \"integer\", \"unit\": \"A\"}', 1, 0, 0, 0, 1, 0, 9, '0', '', '2023-12-06 16:37:07', '', '2023-12-07 18:11:24', NULL, NULL, NULL); +INSERT INTO `iot_things_model_template` VALUES (368, 'A相有功功率', 1, 'admin', '46', 1, 'integer', '{\"max\": 1000, \"min\": 0, \"step\": 1, \"type\": \"integer\", \"unit\": \"W\"}', 1, 0, 0, 0, 1, 0, 10, '0', '', '2023-12-06 16:37:54', '', '2023-12-07 18:11:28', NULL, NULL, NULL); +INSERT INTO `iot_things_model_template` VALUES (369, 'B相有功功率', 1, 'admin', '47', 1, 'integer', '{\"max\": 1000, \"min\": 0, \"step\": 1, \"type\": \"integer\", \"unit\": \"W\"}', 1, 0, 0, 0, 1, 0, 11, '0', '', '2023-12-06 16:38:18', '', '2023-12-07 18:11:32', NULL, NULL, NULL); +INSERT INTO `iot_things_model_template` VALUES (370, 'C相有功功率', 1, 'admin', '48', 1, 'integer', '{\"max\": 1000, \"min\": 0, \"step\": 1, \"type\": \"integer\", \"unit\": \"W\"}', 1, 0, 0, 0, 1, 0, 12, '0', '', '2023-12-06 16:39:13', '', '2023-12-07 18:11:35', NULL, NULL, NULL); +INSERT INTO `iot_things_model_template` VALUES (371, '总有功功率', 1, 'admin', '49', 1, 'integer', '{\"max\": 3000, \"min\": 0, \"step\": 1, \"type\": \"integer\", \"unit\": \"W\"}', 1, 0, 0, 0, 1, 0, 13, '0', '', '2023-12-06 16:39:42', '', '2023-12-07 18:11:40', NULL, NULL, NULL); +INSERT INTO `iot_things_model_template` VALUES (382, '电压', 1, 'admin', '37', 1, 'integer', '{\"max\": 100, \"min\": 0, \"step\": 1, \"type\": \"integer\", \"unit\": \"\"}', 1, 0, 0, 0, 1, 0, 0, '0', '', '2023-12-07 17:39:46', '', NULL, NULL, NULL, NULL); +INSERT INTO `iot_things_model_template` VALUES (394, 'A相电压', 1, 'admin', '0', 1, 'integer', '{\"max\": 220, \"min\": 0, \"step\": 0, \"type\": \"integer\", \"unit\": \"V\"}', 1, 0, 0, 0, 1, 1, 0, '0', '', '2023-12-07 19:45:33', '', NULL, NULL, '%s*10', NULL); +INSERT INTO `iot_things_model_template` VALUES (395, 'B相电压', 1, 'admin', '1', 1, 'integer', '{\"max\": 220, \"min\": 0, \"step\": 0, \"type\": \"integer\", \"unit\": \"V\"}', 1, 0, 0, 0, 1, 1, 0, '0', '', '2023-12-07 19:45:33', '', NULL, NULL, '', NULL); +INSERT INTO `iot_things_model_template` VALUES (396, 'C相电压', 1, 'admin', '2', 1, 'integer', '{\"max\": 220, \"min\": 0, \"step\": 0, \"type\": \"integer\", \"unit\": \"V\"}', 1, 0, 0, 0, 1, 1, 0, '0', '', '2023-12-07 19:45:33', '', NULL, NULL, '', NULL); +INSERT INTO `iot_things_model_template` VALUES (397, 'A相电流', 1, 'admin', '3', 1, 'integer', '{\"max\": 220, \"min\": 0, \"step\": 0, \"type\": \"integer\", \"unit\": \"A\"}', 1, 0, 0, 0, 1, 1, 0, '0', '', '2023-12-07 19:45:33', '', NULL, NULL, '', NULL); +INSERT INTO `iot_things_model_template` VALUES (398, 'B相电流', 1, 'admin', '4', 1, 'integer', '{\"max\": 1, \"min\": 0, \"step\": 0, \"type\": \"integer\", \"unit\": \"A\"}', 1, 0, 0, 0, 1, 1, 0, '0', '', '2023-12-07 19:45:33', '', NULL, NULL, '', NULL); +INSERT INTO `iot_things_model_template` VALUES (399, 'C相电流', 1, 'admin', '5', 1, 'integer', '{\"max\": 1, \"min\": 0, \"step\": 0, \"type\": \"integer\", \"unit\": \"A\"}', 1, 0, 0, 0, 1, 1, 0, '0', '', '2023-12-07 19:45:33', '', NULL, NULL, '', NULL); +INSERT INTO `iot_things_model_template` VALUES (400, 'A相电压', 1, 'admin', '0', 1, 'integer', '{\"max\": 220, \"min\": 0, \"step\": 0, \"type\": \"integer\", \"unit\": \"V\"}', 1, 0, 0, 0, 1, 1, 0, '0', '', '2023-12-07 19:46:20', '', NULL, NULL, '%s*10', NULL); +INSERT INTO `iot_things_model_template` VALUES (401, 'B相电压', 1, 'admin', '1', 1, 'integer', '{\"max\": 220, \"min\": 0, \"step\": 0, \"type\": \"integer\", \"unit\": \"V\"}', 1, 0, 0, 0, 1, 1, 0, '0', '', '2023-12-07 19:46:20', '', NULL, NULL, '', NULL); +INSERT INTO `iot_things_model_template` VALUES (402, 'C相电压', 1, 'admin', '2', 1, 'integer', '{\"max\": 220, \"min\": 0, \"step\": 0, \"type\": \"integer\", \"unit\": \"V\"}', 1, 0, 0, 0, 1, 1, 0, '0', '', '2023-12-07 19:46:20', '', NULL, NULL, '', NULL); +INSERT INTO `iot_things_model_template` VALUES (403, 'A相电流', 1, 'admin', '3', 1, 'integer', '{\"max\": 220, \"min\": 0, \"step\": 0, \"type\": \"integer\", \"unit\": \"A\"}', 1, 0, 0, 0, 1, 1, 0, '0', '', '2023-12-07 19:46:20', '', NULL, NULL, '', NULL); +INSERT INTO `iot_things_model_template` VALUES (404, 'B相电流', 1, 'admin', '4', 1, 'integer', '{\"max\": 1, \"min\": 0, \"step\": 0, \"type\": \"integer\", \"unit\": \"A\"}', 1, 0, 0, 0, 1, 1, 0, '0', '', '2023-12-07 19:46:20', '', NULL, NULL, '', NULL); +INSERT INTO `iot_things_model_template` VALUES (405, 'C相电流', 1, 'admin', '5', 1, 'integer', '{\"max\": 1, \"min\": 0, \"step\": 0, \"type\": \"integer\", \"unit\": \"A\"}', 1, 0, 0, 0, 1, 1, 0, '0', '', '2023-12-07 19:46:20', '', NULL, NULL, '', NULL); +INSERT INTO `iot_things_model_template` VALUES (412, 'A相电压', 1, 'admin', '0', 1, 'integer', '{\"max\": 220, \"min\": 0, \"step\": 0, \"type\": \"integer\", \"unit\": \"V\"}', 1, 0, 0, 0, 1, 1, 0, '0', '', '2023-12-08 08:48:34', '', NULL, NULL, '%s*10', NULL); +INSERT INTO `iot_things_model_template` VALUES (413, 'B相电压', 1, 'admin', '1', 1, 'integer', '{\"max\": 220, \"min\": 0, \"step\": 0, \"type\": \"integer\", \"unit\": \"V\"}', 1, 0, 0, 0, 1, 1, 0, '0', '', '2023-12-08 08:48:34', '', NULL, NULL, '', NULL); +INSERT INTO `iot_things_model_template` VALUES (414, 'C相电压', 1, 'admin', '2', 1, 'integer', '{\"max\": 220, \"min\": 0, \"step\": 0, \"type\": \"integer\", \"unit\": \"V\"}', 1, 0, 0, 0, 1, 1, 0, '0', '', '2023-12-08 08:48:34', '', NULL, NULL, '', NULL); +INSERT INTO `iot_things_model_template` VALUES (415, 'A相电流', 1, 'admin', '3', 1, 'integer', '{\"max\": 220, \"min\": 0, \"step\": 0, \"type\": \"integer\", \"unit\": \"A\"}', 1, 0, 0, 0, 1, 1, 0, '0', '', '2023-12-08 08:48:34', '', NULL, NULL, '', NULL); +INSERT INTO `iot_things_model_template` VALUES (416, 'B相电流', 1, 'admin', '4', 1, 'integer', '{\"max\": 1, \"min\": 0, \"step\": 0, \"type\": \"integer\", \"unit\": \"A\"}', 1, 0, 0, 0, 1, 1, 0, '0', '', '2023-12-08 08:48:34', '', NULL, NULL, '', NULL); +INSERT INTO `iot_things_model_template` VALUES (417, 'C相电流', 1, 'admin', '5', 1, 'integer', '{\"max\": 1, \"min\": 0, \"step\": 0, \"type\": \"integer\", \"unit\": \"A\"}', 1, 0, 0, 0, 1, 1, 0, '0', '', '2023-12-08 08:48:34', '', NULL, NULL, '', NULL); +INSERT INTO `iot_things_model_template` VALUES (419, 'DI-1', 1, 'admin', '0', 1, 'integer', '{\"max\": 100, \"min\": 0, \"step\": 1, \"type\": \"integer\", \"unit\": \"\"}', 1, 0, 0, 0, 1, 0, 0, '0', '', '2023-12-11 10:39:15', '', '2023-12-11 11:07:07', NULL, NULL, NULL); +INSERT INTO `iot_things_model_template` VALUES (424, 'DI', 1, 'admin', '0', 1, 'enum', '{\"type\": \"enum\", \"showWay\": \"select\", \"enumList\": [{\"text\": \"0\", \"value\": \"DI-1\"}, {\"text\": \"1\", \"value\": \"DI-2\"}, {\"text\": \"2\", \"value\": \"DI-3\"}, {\"text\": \"3\", \"value\": \"DI-4\"}, {\"text\": \"4\", \"value\": \"DI-5\"}, {\"text\": \"5\", \"value\": \"DI-6\"}, {\"text\": \"6\", \"value\": \"DI-7\"}, {\"text\": \"7\", \"value\": \"DI-8\"}]}', 1, 0, 0, 0, 1, 0, 0, '0', '', '2023-12-11 13:31:14', '', '2023-12-12 09:34:33', NULL, NULL, NULL); +INSERT INTO `iot_things_model_template` VALUES (425, 'DI', 1, 'admin', '0', 1, 'enum', '{\"type\": \"enum\", \"showWay\": \"select\", \"enumList\": [{\"text\": \"0\", \"value\": \"DI-1\"}, {\"text\": \"1\", \"value\": \"DI-2\"}, {\"text\": \"2\", \"value\": \"DI-3\"}, {\"text\": \"3\", \"value\": \"DI-4\"}, {\"text\": \"4\", \"value\": \"DI-5\"}, {\"text\": \"5\", \"value\": \"DI-6\"}, {\"text\": \"6\", \"value\": \"DI-7\"}, {\"text\": \"7\", \"value\": \"DI-8\"}]}', 1, 0, 0, 0, 1, 0, 0, '0', '', '2023-12-11 13:40:03', '', '2023-12-12 10:33:21', NULL, NULL, NULL); +INSERT INTO `iot_things_model_template` VALUES (440, 'data-1', 1, 'admin', 'keystr-1', 1, 'integer', '{\"max\": 100, \"min\": 0, \"step\": 1, \"type\": \"integer\", \"unit\": \"\"}', 1, 1, 1, 1, 1, 0, 0, '0', '', '2023-12-20 15:36:05', '', '2023-12-20 15:36:32', NULL, NULL, NULL); +INSERT INTO `iot_things_model_template` VALUES (441, 'data-2', 1, 'admin', 'keystr-2', 1, 'integer', '{\"max\": 100, \"min\": 0, \"step\": 1, \"type\": \"integer\", \"unit\": \"\"}', 1, 1, 1, 1, 1, 0, 0, '0', '', '2023-12-20 15:36:25', '', NULL, NULL, NULL, NULL); +INSERT INTO `iot_things_model_template` VALUES (442, '电源管理', 1, 'admin', 'power', 1, 'string', '{\"type\": \"string\", \"maxLength\": 1024}', 1, 0, 0, 0, 1, 0, 0, '0', 'admin', '2023-12-26 13:52:45', '', NULL, NULL, NULL, NULL); +INSERT INTO `iot_things_model_template` VALUES (443, '密码', 1, 'admin', 'k0', 1, 'integer', '{\"max\": 9999, \"min\": 0, \"step\": 0, \"type\": \"integer\", \"unit\": \"\"}', 1, 0, 0, 0, 0, 0, 0, '0', '', '2024-01-08 15:34:42', '', NULL, NULL, '', NULL); +INSERT INTO `iot_things_model_template` VALUES (444, '地址', 1, 'admin', 'k1', 1, 'integer', '{\"max\": 247, \"min\": 1, \"step\": 0, \"type\": \"integer\", \"unit\": \"\"}', 1, 0, 0, 0, 0, 0, 0, '0', '', '2024-01-08 15:34:42', '', NULL, NULL, '', NULL); +INSERT INTO `iot_things_model_template` VALUES (445, '波特率', 1, 'admin', 'k2', 1, 'integer', '{\"max\": 38400, \"min\": 1920, \"step\": 0, \"type\": \"integer\", \"unit\": \"\"}', 1, 0, 0, 0, 0, 0, 0, '0', '', '2024-01-08 15:34:42', '', NULL, NULL, '', NULL); +INSERT INTO `iot_things_model_template` VALUES (446, '5A输入CT变比/10mA输入为一次电流', 1, 'admin', 'k3', 1, 'integer', '{\"max\": 9999, \"min\": 1, \"step\": 0, \"type\": \"integer\", \"unit\": \"A\"}', 1, 0, 0, 0, 0, 0, 0, '0', '', '2024-01-08 15:34:42', '', NULL, NULL, '', NULL); +INSERT INTO `iot_things_model_template` VALUES (447, 'Pt变比', 1, 'admin', 'k5', 1, 'integer', '{\"max\": 9999, \"min\": 1, \"step\": 0, \"type\": \"integer\", \"unit\": \"\"}', 1, 0, 0, 0, 0, 0, 0, '0', '', '2024-01-08 15:34:42', '', NULL, NULL, '', NULL); +INSERT INTO `iot_things_model_template` VALUES (448, '额定电压', 1, 'admin', 'k6', 1, 'integer', '{\"max\": 220, \"min\": 100, \"step\": 0, \"type\": \"integer\", \"unit\": \"V\"}', 1, 0, 0, 0, 0, 0, 0, '0', '', '2024-01-08 15:34:42', '', NULL, NULL, '', NULL); +INSERT INTO `iot_things_model_template` VALUES (449, '额定电流', 1, 'admin', 'k7', 1, 'integer', '{\"max\": 100, \"min\": 1, \"step\": 0, \"type\": \"integer\", \"unit\": \"A\"}', 1, 0, 0, 0, 0, 0, 0, '0', '', '2024-01-08 15:34:42', '', NULL, NULL, '', NULL); +INSERT INTO `iot_things_model_template` VALUES (450, '三相回路-总功率因数', 1, 'admin', 'k13', 1, 'integer', '{\"max\": 1, \"min\": -1, \"step\": 0, \"type\": \"integer\", \"unit\": \"\"}', 1, 0, 0, 0, 1, 0, 0, '0', '', '2024-01-08 15:34:42', '', NULL, NULL, '', NULL); +INSERT INTO `iot_things_model_template` VALUES (451, 'A相电压', 1, 'admin', 'k17', 1, 'integer', '{\"max\": 999.9, \"min\": 0, \"step\": 0, \"type\": \"integer\", \"unit\": \"V\"}', 1, 0, 0, 0, 1, 0, 0, '0', '', '2024-01-08 15:34:42', '', NULL, NULL, '', NULL); +INSERT INTO `iot_things_model_template` VALUES (452, 'B相电压', 1, 'admin', 'k18', 1, 'integer', '{\"max\": 999.9, \"min\": 0, \"step\": 0, \"type\": \"integer\", \"unit\": \"V\"}', 1, 0, 0, 0, 1, 0, 0, '0', '', '2024-01-08 15:34:42', '', NULL, NULL, '', NULL); +INSERT INTO `iot_things_model_template` VALUES (453, 'C相电压', 1, 'admin', 'k19', 1, 'integer', '{\"max\": 999.9, \"min\": 0, \"step\": 0, \"type\": \"integer\", \"unit\": \"V\"}', 1, 0, 0, 0, 1, 0, 0, '0', '', '2024-01-08 15:34:42', '', NULL, NULL, '', NULL); +INSERT INTO `iot_things_model_template` VALUES (454, 'A相电流', 1, 'admin', 'k20', 1, 'integer', '{\"max\": 200, \"min\": 0, \"step\": 0, \"type\": \"integer\", \"unit\": \"A\"}', 1, 0, 0, 0, 1, 0, 0, '0', '', '2024-01-08 15:34:42', '', NULL, NULL, '', NULL); +INSERT INTO `iot_things_model_template` VALUES (455, 'B相电流', 1, 'admin', 'k21', 1, 'integer', '{\"max\": 200, \"min\": 0, \"step\": 0, \"type\": \"integer\", \"unit\": \"A\"}', 1, 0, 0, 0, 1, 0, 0, '0', '', '2024-01-08 15:34:43', '', NULL, NULL, '', NULL); +INSERT INTO `iot_things_model_template` VALUES (456, 'C相电流', 1, 'admin', 'k22', 1, 'integer', '{\"max\": 200, \"min\": 0, \"step\": 0, \"type\": \"integer\", \"unit\": \"A\"}', 1, 0, 0, 0, 1, 0, 0, '0', '', '2024-01-08 15:34:43', '', NULL, NULL, '', NULL); +INSERT INTO `iot_things_model_template` VALUES (457, 'U12线电压', 1, 'admin', 'k29', 1, 'integer', '{\"max\": 999.9, \"min\": 0, \"step\": 0, \"type\": \"integer\", \"unit\": \"V\"}', 1, 0, 0, 0, 1, 0, 0, '0', '', '2024-01-08 15:34:43', '', NULL, NULL, '', NULL); +INSERT INTO `iot_things_model_template` VALUES (458, 'U23线电压', 1, 'admin', 'k30', 1, 'integer', '{\"max\": 999.9, \"min\": 0, \"step\": 0, \"type\": \"integer\", \"unit\": \"V\"}', 1, 0, 0, 0, 1, 0, 0, '0', '', '2024-01-08 15:34:43', '', NULL, NULL, '', NULL); +INSERT INTO `iot_things_model_template` VALUES (459, 'U31线电压', 1, 'admin', 'k31', 1, 'integer', '{\"max\": 999.9, \"min\": 0, \"step\": 0, \"type\": \"integer\", \"unit\": \"V\"}', 1, 0, 0, 0, 1, 0, 0, '0', '', '2024-01-08 15:34:43', '', NULL, NULL, '', NULL); +INSERT INTO `iot_things_model_template` VALUES (460, '频率', 1, 'admin', 'k32', 1, 'integer', '{\"max\": 99.99, \"min\": 0, \"step\": 0, \"type\": \"integer\", \"unit\": \"\"}', 1, 0, 0, 0, 1, 0, 0, '0', '', '2024-01-08 15:34:43', '', NULL, NULL, '', NULL); +INSERT INTO `iot_things_model_template` VALUES (461, '三相回路-总有功功率', 1, 'admin', 'k33', 1, 'integer', '{\"max\": 44, \"min\": 0, \"step\": 0, \"type\": \"integer\", \"unit\": \"kW\"}', 1, 0, 0, 0, 1, 0, 0, '0', '', '2024-01-08 15:34:43', '', NULL, NULL, '', NULL); +INSERT INTO `iot_things_model_template` VALUES (462, '三相回路-总无功功率', 1, 'admin', 'k36', 1, 'integer', '{\"max\": 44, \"min\": 0, \"step\": 0, \"type\": \"integer\", \"unit\": \"kW\"}', 1, 0, 0, 0, 1, 0, 0, '0', '', '2024-01-08 15:34:43', '', NULL, NULL, '', NULL); +INSERT INTO `iot_things_model_template` VALUES (463, 'A相正(市电)有功电能高字节', 1, 'admin', 'k39', 1, 'integer', '{\"max\": 1, \"min\": 0, \"step\": 0, \"type\": \"integer\", \"unit\": \"\"}', 1, 0, 0, 0, 1, 0, 0, '0', '', '2024-01-08 15:34:43', '', NULL, NULL, '', NULL); +INSERT INTO `iot_things_model_template` VALUES (464, 'A相正(市电)有功电能低字节', 1, 'admin', 'k40', 1, 'integer', '{\"max\": 1, \"min\": 0, \"step\": 0, \"type\": \"integer\", \"unit\": \"\"}', 1, 0, 0, 0, 1, 0, 0, '0', '', '2024-01-08 15:34:43', '', NULL, NULL, '', NULL); +INSERT INTO `iot_things_model_template` VALUES (465, 'B相正(市电)有功电能高字节', 1, 'admin', 'k41', 1, 'integer', '{\"max\": 1, \"min\": 0, \"step\": 0, \"type\": \"integer\", \"unit\": \"\"}', 1, 0, 0, 0, 1, 0, 0, '0', '', '2024-01-08 15:34:43', '', NULL, NULL, '', NULL); +INSERT INTO `iot_things_model_template` VALUES (466, 'B相正(市电)有功电能低字节', 1, 'admin', 'k42', 1, 'integer', '{\"max\": 1, \"min\": 0, \"step\": 0, \"type\": \"integer\", \"unit\": \"\"}', 1, 0, 0, 0, 1, 0, 0, '0', '', '2024-01-08 15:34:43', '', NULL, NULL, '', NULL); +INSERT INTO `iot_things_model_template` VALUES (467, 'C相正(市电)有功电能高字节', 1, 'admin', 'k43', 1, 'integer', '{\"max\": 1, \"min\": 0, \"step\": 0, \"type\": \"integer\", \"unit\": \"\"}', 1, 0, 0, 0, 1, 0, 0, '0', '', '2024-01-08 15:34:43', '', NULL, NULL, '', NULL); +INSERT INTO `iot_things_model_template` VALUES (468, 'C相正(市电)有功电能低字节', 1, 'admin', 'k44', 1, 'integer', '{\"max\": 1, \"min\": 0, \"step\": 0, \"type\": \"integer\", \"unit\": \"\"}', 1, 0, 0, 0, 1, 0, 0, '0', '', '2024-01-08 15:34:43', '', NULL, NULL, '', NULL); +INSERT INTO `iot_things_model_template` VALUES (469, 'A相有功功率', 1, 'admin', 'k57', 1, 'integer', '{\"max\": 44, \"min\": 0, \"step\": 0, \"type\": \"integer\", \"unit\": \"kW\"}', 1, 0, 0, 0, 1, 0, 0, '0', '', '2024-01-08 15:34:43', '', NULL, NULL, '', NULL); +INSERT INTO `iot_things_model_template` VALUES (470, 'B相有功功率', 1, 'admin', 'k58', 1, 'integer', '{\"max\": 44, \"min\": 0, \"step\": 0, \"type\": \"integer\", \"unit\": \"kW\"}', 1, 0, 0, 0, 1, 0, 0, '0', '', '2024-01-08 15:34:43', '', NULL, NULL, '', NULL); +INSERT INTO `iot_things_model_template` VALUES (471, 'C相有功功率', 1, 'admin', 'k59', 1, 'integer', '{\"max\": 44, \"min\": 0, \"step\": 0, \"type\": \"integer\", \"unit\": \"kW\"}', 1, 0, 0, 0, 1, 0, 0, '0', '', '2024-01-08 15:34:43', '', NULL, NULL, '', NULL); +INSERT INTO `iot_things_model_template` VALUES (472, 'A相无功功率', 1, 'admin', 'k66', 1, 'integer', '{\"max\": 44, \"min\": 0, \"step\": 0, \"type\": \"integer\", \"unit\": \"kW\"}', 1, 0, 0, 0, 1, 0, 0, '0', '', '2024-01-08 15:34:43', '', NULL, NULL, '', NULL); +INSERT INTO `iot_things_model_template` VALUES (473, 'B相无功功率', 1, 'admin', 'k67', 1, 'integer', '{\"max\": 44, \"min\": 0, \"step\": 0, \"type\": \"integer\", \"unit\": \"kW\"}', 1, 0, 0, 0, 1, 0, 0, '0', '', '2024-01-08 15:34:43', '', NULL, NULL, '', NULL); +INSERT INTO `iot_things_model_template` VALUES (474, 'C相无功功率', 1, 'admin', 'k68', 1, 'integer', '{\"max\": 44, \"min\": 0, \"step\": 0, \"type\": \"integer\", \"unit\": \"kW\"}', 1, 0, 0, 0, 1, 0, 0, '0', '', '2024-01-08 15:34:43', '', NULL, NULL, '', NULL); +INSERT INTO `iot_things_model_template` VALUES (475, 'A相视在功率', 1, 'admin', 'k69', 1, 'integer', '{\"max\": 44, \"min\": 0, \"step\": 0, \"type\": \"integer\", \"unit\": \"kW\"}', 1, 0, 0, 0, 1, 0, 0, '0', '', '2024-01-08 15:34:43', '', NULL, NULL, '', NULL); +INSERT INTO `iot_things_model_template` VALUES (476, 'B相视在功率', 1, 'admin', 'k70', 1, 'integer', '{\"max\": 44, \"min\": 0, \"step\": 0, \"type\": \"integer\", \"unit\": \"kW\"}', 1, 0, 0, 0, 1, 0, 0, '0', '', '2024-01-08 15:34:43', '', NULL, NULL, '', NULL); +INSERT INTO `iot_things_model_template` VALUES (477, 'C相视在功率', 1, 'admin', 'k71', 1, 'integer', '{\"max\": 44, \"min\": 0, \"step\": 0, \"type\": \"integer\", \"unit\": \"kW\"}', 1, 0, 0, 0, 1, 0, 0, '0', '', '2024-01-08 15:34:43', '', NULL, NULL, '', NULL); +INSERT INTO `iot_things_model_template` VALUES (478, '三相总视在功率', 1, 'admin', 'k72', 1, 'integer', '{\"max\": 44, \"min\": 0, \"step\": 0, \"type\": \"integer\", \"unit\": \"kW\"}', 1, 0, 0, 0, 1, 0, 0, '0', '', '2024-01-08 15:34:43', '', NULL, NULL, '', NULL); +INSERT INTO `iot_things_model_template` VALUES (479, 'A相功率因数', 1, 'admin', 'k75', 1, 'integer', '{\"max\": 1, \"min\": -1, \"step\": 0, \"type\": \"integer\", \"unit\": \"\"}', 1, 0, 0, 0, 1, 0, 0, '0', '', '2024-01-08 15:34:43', '', NULL, NULL, '', NULL); +INSERT INTO `iot_things_model_template` VALUES (480, 'B相功率因数', 1, 'admin', 'k76', 1, 'integer', '{\"max\": 1, \"min\": -1, \"step\": 0, \"type\": \"integer\", \"unit\": \"\"}', 1, 0, 0, 0, 1, 0, 0, '0', '', '2024-01-08 15:34:43', '', NULL, NULL, '', NULL); +INSERT INTO `iot_things_model_template` VALUES (481, 'C相功率因数', 1, 'admin', 'k77', 1, 'integer', '{\"max\": 1, \"min\": -1, \"step\": 0, \"type\": \"integer\", \"unit\": \"\"}', 1, 0, 0, 0, 1, 0, 0, '0', '', '2024-01-08 15:34:43', '', NULL, NULL, '', NULL); +INSERT INTO `iot_things_model_template` VALUES (482, 'A相正(市电)无功电能高字节', 1, 'admin', 'k84', 1, 'integer', '{\"max\": 1, \"min\": 0, \"step\": 0, \"type\": \"integer\", \"unit\": \"\"}', 1, 0, 0, 0, 1, 0, 0, '0', '', '2024-01-08 15:34:43', '', NULL, NULL, '', NULL); +INSERT INTO `iot_things_model_template` VALUES (483, 'A相正(市电)无功电能低字节', 1, 'admin', 'k85', 1, 'integer', '{\"max\": 1, \"min\": 0, \"step\": 0, \"type\": \"integer\", \"unit\": \"\"}', 1, 0, 0, 0, 1, 0, 0, '0', '', '2024-01-08 15:34:43', '', NULL, NULL, '', NULL); +INSERT INTO `iot_things_model_template` VALUES (484, 'B相正(市电)无功电能高字节', 1, 'admin', 'k86', 1, 'integer', '{\"max\": 1, \"min\": 0, \"step\": 0, \"type\": \"integer\", \"unit\": \"\"}', 1, 0, 0, 0, 1, 0, 0, '0', '', '2024-01-08 15:34:43', '', NULL, NULL, '', NULL); +INSERT INTO `iot_things_model_template` VALUES (485, 'B相正(市电)无功电能低字节', 1, 'admin', 'k87', 1, 'integer', '{\"max\": 1, \"min\": 0, \"step\": 0, \"type\": \"integer\", \"unit\": \"\"}', 1, 0, 0, 0, 1, 0, 0, '0', '', '2024-01-08 15:34:43', '', NULL, NULL, '', NULL); +INSERT INTO `iot_things_model_template` VALUES (486, 'C相正(市电)无功电能高字节', 1, 'admin', 'k88', 1, 'integer', '{\"max\": 1, \"min\": 0, \"step\": 0, \"type\": \"integer\", \"unit\": \"\"}', 1, 0, 0, 0, 1, 0, 0, '0', '', '2024-01-08 15:34:43', '', NULL, NULL, '', NULL); +INSERT INTO `iot_things_model_template` VALUES (487, 'C相正(市电)无功电能低字节', 1, 'admin', 'k89', 1, 'integer', '{\"max\": 1, \"min\": 0, \"step\": 0, \"type\": \"integer\", \"unit\": \"\"}', 1, 0, 0, 0, 1, 0, 0, '0', '', '2024-01-08 15:34:43', '', NULL, NULL, '', NULL); +INSERT INTO `iot_things_model_template` VALUES (488, '三相回路正(市电)总有功电能高字节', 1, 'admin', 'k112', 1, 'integer', '{\"max\": 1, \"min\": 0, \"step\": 0, \"type\": \"integer\", \"unit\": \"\"}', 1, 0, 0, 0, 1, 0, 0, '0', '', '2024-01-08 15:34:43', '', NULL, NULL, '', NULL); +INSERT INTO `iot_things_model_template` VALUES (489, '三相回路正(市电)总有功电能低字节', 1, 'admin', 'k113', 1, 'integer', '{\"max\": 1, \"min\": 0, \"step\": 0, \"type\": \"integer\", \"unit\": \"\"}', 1, 0, 0, 0, 1, 0, 0, '0', '', '2024-01-08 15:34:44', '', NULL, NULL, '', NULL); +INSERT INTO `iot_things_model_template` VALUES (490, '三相回路正(市电)总无功电能高字节', 1, 'admin', 'k118', 1, 'integer', '{\"max\": 1, \"min\": 0, \"step\": 0, \"type\": \"integer\", \"unit\": \"\"}', 1, 0, 0, 0, 1, 0, 0, '0', '', '2024-01-08 15:34:44', '', NULL, NULL, '', NULL); +INSERT INTO `iot_things_model_template` VALUES (491, '三相回路正(市电)总无功电能低字节', 1, 'admin', 'k119', 1, 'integer', '{\"max\": 1, \"min\": 0, \"step\": 0, \"type\": \"integer\", \"unit\": \"\"}', 1, 0, 0, 0, 1, 0, 0, '0', '', '2024-01-08 15:34:44', '', NULL, NULL, '', NULL); +INSERT INTO `iot_things_model_template` VALUES (492, '密码', 1, 'admin', 'k0', 1, 'integer', '{\"max\": 9999, \"min\": 0, \"step\": 0, \"type\": \"integer\", \"unit\": \"\"}', 1, 0, 0, 0, 0, 0, 0, '0', '', '2024-01-08 15:46:16', '', NULL, NULL, '', NULL); +INSERT INTO `iot_things_model_template` VALUES (493, '地址', 1, 'admin', 'k1', 1, 'integer', '{\"max\": 247, \"min\": 1, \"step\": 0, \"type\": \"integer\", \"unit\": \"\"}', 1, 0, 0, 0, 0, 0, 0, '0', '', '2024-01-08 15:46:16', '', NULL, NULL, '', NULL); +INSERT INTO `iot_things_model_template` VALUES (494, '波特率', 1, 'admin', 'k2', 1, 'integer', '{\"max\": 38400, \"min\": 1920, \"step\": 0, \"type\": \"integer\", \"unit\": \"\"}', 1, 0, 0, 0, 0, 0, 0, '0', '', '2024-01-08 15:46:16', '', NULL, NULL, '', NULL); +INSERT INTO `iot_things_model_template` VALUES (495, '5A输入CT变比/10mA输入为一次电流', 1, 'admin', 'k3', 1, 'integer', '{\"max\": 9999, \"min\": 1, \"step\": 0, \"type\": \"integer\", \"unit\": \"A\"}', 1, 0, 0, 0, 0, 0, 0, '0', '', '2024-01-08 15:46:16', '', NULL, NULL, '', NULL); +INSERT INTO `iot_things_model_template` VALUES (496, 'Pt变比', 1, 'admin', 'k5', 1, 'integer', '{\"max\": 9999, \"min\": 1, \"step\": 0, \"type\": \"integer\", \"unit\": \"\"}', 1, 0, 0, 0, 0, 0, 0, '0', '', '2024-01-08 15:46:16', '', NULL, NULL, '', NULL); +INSERT INTO `iot_things_model_template` VALUES (497, '额定电压', 1, 'admin', 'k6', 1, 'integer', '{\"max\": 220, \"min\": 100, \"step\": 0, \"type\": \"integer\", \"unit\": \"V\"}', 1, 0, 0, 0, 0, 0, 0, '0', '', '2024-01-08 15:46:16', '', NULL, NULL, '', NULL); +INSERT INTO `iot_things_model_template` VALUES (498, '额定电流', 1, 'admin', 'k7', 1, 'integer', '{\"max\": 100, \"min\": 1, \"step\": 0, \"type\": \"integer\", \"unit\": \"A\"}', 1, 0, 0, 0, 0, 0, 0, '0', '', '2024-01-08 15:46:16', '', NULL, NULL, '', NULL); +INSERT INTO `iot_things_model_template` VALUES (499, '三相回路-总功率因数', 1, 'admin', 'k13', 1, 'integer', '{\"max\": 1, \"min\": -1, \"step\": 0, \"type\": \"integer\", \"unit\": \"\"}', 1, 0, 0, 0, 1, 0, 0, '0', '', '2024-01-08 15:46:16', '', NULL, NULL, '', NULL); +INSERT INTO `iot_things_model_template` VALUES (500, 'A相电压', 1, 'admin', 'k17', 1, 'integer', '{\"max\": 999.9, \"min\": 0, \"step\": 0, \"type\": \"integer\", \"unit\": \"V\"}', 1, 0, 0, 0, 1, 0, 0, '0', '', '2024-01-08 15:46:16', '', NULL, NULL, '', NULL); +INSERT INTO `iot_things_model_template` VALUES (501, 'B相电压', 1, 'admin', 'k18', 1, 'integer', '{\"max\": 999.9, \"min\": 0, \"step\": 0, \"type\": \"integer\", \"unit\": \"V\"}', 1, 0, 0, 0, 1, 0, 0, '0', '', '2024-01-08 15:46:16', '', NULL, NULL, '', NULL); +INSERT INTO `iot_things_model_template` VALUES (502, 'C相电压', 1, 'admin', 'k19', 1, 'integer', '{\"max\": 999.9, \"min\": 0, \"step\": 0, \"type\": \"integer\", \"unit\": \"V\"}', 1, 0, 0, 0, 1, 0, 0, '0', '', '2024-01-08 15:46:16', '', NULL, NULL, '', NULL); +INSERT INTO `iot_things_model_template` VALUES (503, 'A相电流', 1, 'admin', 'k20', 1, 'integer', '{\"max\": 200, \"min\": 0, \"step\": 0, \"type\": \"integer\", \"unit\": \"A\"}', 1, 0, 0, 0, 1, 0, 0, '0', '', '2024-01-08 15:46:16', '', NULL, NULL, '', NULL); +INSERT INTO `iot_things_model_template` VALUES (504, 'B相电流', 1, 'admin', 'k21', 1, 'integer', '{\"max\": 200, \"min\": 0, \"step\": 0, \"type\": \"integer\", \"unit\": \"A\"}', 1, 0, 0, 0, 1, 0, 0, '0', '', '2024-01-08 15:46:16', '', NULL, NULL, '', NULL); +INSERT INTO `iot_things_model_template` VALUES (505, 'C相电流', 1, 'admin', 'k22', 1, 'integer', '{\"max\": 200, \"min\": 0, \"step\": 0, \"type\": \"integer\", \"unit\": \"A\"}', 1, 0, 0, 0, 1, 0, 0, '0', '', '2024-01-08 15:46:16', '', NULL, NULL, '', NULL); +INSERT INTO `iot_things_model_template` VALUES (506, 'U12线电压', 1, 'admin', 'k29', 1, 'integer', '{\"max\": 999.9, \"min\": 0, \"step\": 0, \"type\": \"integer\", \"unit\": \"V\"}', 1, 0, 0, 0, 1, 0, 0, '0', '', '2024-01-08 15:46:16', '', NULL, NULL, '', NULL); +INSERT INTO `iot_things_model_template` VALUES (507, 'U23线电压', 1, 'admin', 'k30', 1, 'integer', '{\"max\": 999.9, \"min\": 0, \"step\": 0, \"type\": \"integer\", \"unit\": \"V\"}', 1, 0, 0, 0, 1, 0, 0, '0', '', '2024-01-08 15:46:16', '', NULL, NULL, '', NULL); +INSERT INTO `iot_things_model_template` VALUES (508, 'U31线电压', 1, 'admin', 'k31', 1, 'integer', '{\"max\": 999.9, \"min\": 0, \"step\": 0, \"type\": \"integer\", \"unit\": \"V\"}', 1, 0, 0, 0, 1, 0, 0, '0', '', '2024-01-08 15:46:16', '', NULL, NULL, '', NULL); +INSERT INTO `iot_things_model_template` VALUES (509, '频率', 1, 'admin', 'k32', 1, 'integer', '{\"max\": 99.99, \"min\": 0, \"step\": 0, \"type\": \"integer\", \"unit\": \"\"}', 1, 0, 0, 0, 1, 0, 0, '0', '', '2024-01-08 15:46:16', '', NULL, NULL, '', NULL); +INSERT INTO `iot_things_model_template` VALUES (510, '三相回路-总有功功率', 1, 'admin', 'k33', 1, 'integer', '{\"max\": 44, \"min\": 0, \"step\": 0, \"type\": \"integer\", \"unit\": \"kW\"}', 1, 0, 0, 0, 1, 0, 0, '0', '', '2024-01-08 15:46:16', '', NULL, NULL, '', NULL); +INSERT INTO `iot_things_model_template` VALUES (511, '三相回路-总无功功率', 1, 'admin', 'k36', 1, 'integer', '{\"max\": 44, \"min\": 0, \"step\": 0, \"type\": \"integer\", \"unit\": \"kW\"}', 1, 0, 0, 0, 1, 0, 0, '0', '', '2024-01-08 15:46:16', '', NULL, NULL, '', NULL); +INSERT INTO `iot_things_model_template` VALUES (512, 'A相正(市电)有功电能高字节', 1, 'admin', 'k39', 1, 'integer', '{\"max\": 1, \"min\": 0, \"step\": 0, \"type\": \"integer\", \"unit\": \"\"}', 1, 0, 0, 0, 1, 0, 0, '0', '', '2024-01-08 15:46:17', '', NULL, NULL, '', NULL); +INSERT INTO `iot_things_model_template` VALUES (513, 'A相正(市电)有功电能低字节', 1, 'admin', 'k40', 1, 'integer', '{\"max\": 1, \"min\": 0, \"step\": 0, \"type\": \"integer\", \"unit\": \"\"}', 1, 0, 0, 0, 1, 0, 0, '0', '', '2024-01-08 15:46:17', '', NULL, NULL, '', NULL); +INSERT INTO `iot_things_model_template` VALUES (514, 'B相正(市电)有功电能高字节', 1, 'admin', 'k41', 1, 'integer', '{\"max\": 1, \"min\": 0, \"step\": 0, \"type\": \"integer\", \"unit\": \"\"}', 1, 0, 0, 0, 1, 0, 0, '0', '', '2024-01-08 15:46:17', '', NULL, NULL, '', NULL); +INSERT INTO `iot_things_model_template` VALUES (515, 'B相正(市电)有功电能低字节', 1, 'admin', 'k42', 1, 'integer', '{\"max\": 1, \"min\": 0, \"step\": 0, \"type\": \"integer\", \"unit\": \"\"}', 1, 0, 0, 0, 1, 0, 0, '0', '', '2024-01-08 15:46:17', '', NULL, NULL, '', NULL); +INSERT INTO `iot_things_model_template` VALUES (516, 'C相正(市电)有功电能高字节', 1, 'admin', 'k43', 1, 'integer', '{\"max\": 1, \"min\": 0, \"step\": 0, \"type\": \"integer\", \"unit\": \"\"}', 1, 0, 0, 0, 1, 0, 0, '0', '', '2024-01-08 15:46:17', '', NULL, NULL, '', NULL); +INSERT INTO `iot_things_model_template` VALUES (517, 'C相正(市电)有功电能低字节', 1, 'admin', 'k44', 1, 'integer', '{\"max\": 1, \"min\": 0, \"step\": 0, \"type\": \"integer\", \"unit\": \"\"}', 1, 0, 0, 0, 1, 0, 0, '0', '', '2024-01-08 15:46:17', '', NULL, NULL, '', NULL); +INSERT INTO `iot_things_model_template` VALUES (518, 'A相有功功率', 1, 'admin', 'k57', 1, 'integer', '{\"max\": 44, \"min\": 0, \"step\": 0, \"type\": \"integer\", \"unit\": \"kW\"}', 1, 0, 0, 0, 1, 0, 0, '0', '', '2024-01-08 15:46:17', '', NULL, NULL, '', NULL); +INSERT INTO `iot_things_model_template` VALUES (519, 'B相有功功率', 1, 'admin', 'k58', 1, 'integer', '{\"max\": 44, \"min\": 0, \"step\": 0, \"type\": \"integer\", \"unit\": \"kW\"}', 1, 0, 0, 0, 1, 0, 0, '0', '', '2024-01-08 15:46:17', '', NULL, NULL, '', NULL); +INSERT INTO `iot_things_model_template` VALUES (520, 'C相有功功率', 1, 'admin', 'k59', 1, 'integer', '{\"max\": 44, \"min\": 0, \"step\": 0, \"type\": \"integer\", \"unit\": \"kW\"}', 1, 0, 0, 0, 1, 0, 0, '0', '', '2024-01-08 15:46:17', '', NULL, NULL, '', NULL); +INSERT INTO `iot_things_model_template` VALUES (521, 'A相无功功率', 1, 'admin', 'k66', 1, 'integer', '{\"max\": 44, \"min\": 0, \"step\": 0, \"type\": \"integer\", \"unit\": \"kW\"}', 1, 0, 0, 0, 1, 0, 0, '0', '', '2024-01-08 15:46:17', '', NULL, NULL, '', NULL); +INSERT INTO `iot_things_model_template` VALUES (522, 'B相无功功率', 1, 'admin', 'k67', 1, 'integer', '{\"max\": 44, \"min\": 0, \"step\": 0, \"type\": \"integer\", \"unit\": \"kW\"}', 1, 0, 0, 0, 1, 0, 0, '0', '', '2024-01-08 15:46:17', '', NULL, NULL, '', NULL); +INSERT INTO `iot_things_model_template` VALUES (523, 'C相无功功率', 1, 'admin', 'k68', 1, 'integer', '{\"max\": 44, \"min\": 0, \"step\": 0, \"type\": \"integer\", \"unit\": \"kW\"}', 1, 0, 0, 0, 1, 0, 0, '0', '', '2024-01-08 15:46:17', '', NULL, NULL, '', NULL); +INSERT INTO `iot_things_model_template` VALUES (524, 'A相视在功率', 1, 'admin', 'k69', 1, 'integer', '{\"max\": 44, \"min\": 0, \"step\": 0, \"type\": \"integer\", \"unit\": \"kW\"}', 1, 0, 0, 0, 1, 0, 0, '0', '', '2024-01-08 15:46:17', '', NULL, NULL, '', NULL); +INSERT INTO `iot_things_model_template` VALUES (525, 'B相视在功率', 1, 'admin', 'k70', 1, 'integer', '{\"max\": 44, \"min\": 0, \"step\": 0, \"type\": \"integer\", \"unit\": \"kW\"}', 1, 0, 0, 0, 1, 0, 0, '0', '', '2024-01-08 15:46:17', '', NULL, NULL, '', NULL); +INSERT INTO `iot_things_model_template` VALUES (526, 'C相视在功率', 1, 'admin', 'k71', 1, 'integer', '{\"max\": 44, \"min\": 0, \"step\": 0, \"type\": \"integer\", \"unit\": \"kW\"}', 1, 0, 0, 0, 1, 0, 0, '0', '', '2024-01-08 15:46:17', '', NULL, NULL, '', NULL); +INSERT INTO `iot_things_model_template` VALUES (527, '三相总视在功率', 1, 'admin', 'k72', 1, 'integer', '{\"max\": 44, \"min\": 0, \"step\": 0, \"type\": \"integer\", \"unit\": \"kW\"}', 1, 0, 0, 0, 1, 0, 0, '0', '', '2024-01-08 15:46:17', '', NULL, NULL, '', NULL); +INSERT INTO `iot_things_model_template` VALUES (528, 'A相功率因数', 1, 'admin', 'k75', 1, 'integer', '{\"max\": 1, \"min\": -1, \"step\": 0, \"type\": \"integer\", \"unit\": \"\"}', 1, 0, 0, 0, 1, 0, 0, '0', '', '2024-01-08 15:46:17', '', NULL, NULL, '', NULL); +INSERT INTO `iot_things_model_template` VALUES (529, 'B相功率因数', 1, 'admin', 'k76', 1, 'integer', '{\"max\": 1, \"min\": -1, \"step\": 0, \"type\": \"integer\", \"unit\": \"\"}', 1, 0, 0, 0, 1, 0, 0, '0', '', '2024-01-08 15:46:17', '', NULL, NULL, '', NULL); +INSERT INTO `iot_things_model_template` VALUES (530, 'C相功率因数', 1, 'admin', 'k77', 1, 'integer', '{\"max\": 1, \"min\": -1, \"step\": 0, \"type\": \"integer\", \"unit\": \"\"}', 1, 0, 0, 0, 1, 0, 0, '0', '', '2024-01-08 15:46:17', '', NULL, NULL, '', NULL); +INSERT INTO `iot_things_model_template` VALUES (531, 'A相正(市电)无功电能高字节', 1, 'admin', 'k84', 1, 'integer', '{\"max\": 1, \"min\": 0, \"step\": 0, \"type\": \"integer\", \"unit\": \"\"}', 1, 0, 0, 0, 1, 0, 0, '0', '', '2024-01-08 15:46:17', '', NULL, NULL, '', NULL); +INSERT INTO `iot_things_model_template` VALUES (532, 'A相正(市电)无功电能低字节', 1, 'admin', 'k85', 1, 'integer', '{\"max\": 1, \"min\": 0, \"step\": 0, \"type\": \"integer\", \"unit\": \"\"}', 1, 0, 0, 0, 1, 0, 0, '0', '', '2024-01-08 15:46:17', '', NULL, NULL, '', NULL); +INSERT INTO `iot_things_model_template` VALUES (533, 'B相正(市电)无功电能高字节', 1, 'admin', 'k86', 1, 'integer', '{\"max\": 1, \"min\": 0, \"step\": 0, \"type\": \"integer\", \"unit\": \"\"}', 1, 0, 0, 0, 1, 0, 0, '0', '', '2024-01-08 15:46:17', '', NULL, NULL, '', NULL); +INSERT INTO `iot_things_model_template` VALUES (534, 'B相正(市电)无功电能低字节', 1, 'admin', 'k87', 1, 'integer', '{\"max\": 1, \"min\": 0, \"step\": 0, \"type\": \"integer\", \"unit\": \"\"}', 1, 0, 0, 0, 1, 0, 0, '0', '', '2024-01-08 15:46:17', '', NULL, NULL, '', NULL); +INSERT INTO `iot_things_model_template` VALUES (535, 'C相正(市电)无功电能高字节', 1, 'admin', 'k88', 1, 'integer', '{\"max\": 1, \"min\": 0, \"step\": 0, \"type\": \"integer\", \"unit\": \"\"}', 1, 0, 0, 0, 1, 0, 0, '0', '', '2024-01-08 15:46:17', '', NULL, NULL, '', NULL); +INSERT INTO `iot_things_model_template` VALUES (536, 'C相正(市电)无功电能低字节', 1, 'admin', 'k89', 1, 'integer', '{\"max\": 1, \"min\": 0, \"step\": 0, \"type\": \"integer\", \"unit\": \"\"}', 1, 0, 0, 0, 1, 0, 0, '0', '', '2024-01-08 15:46:17', '', NULL, NULL, '', NULL); +INSERT INTO `iot_things_model_template` VALUES (537, '三相回路正(市电)总有功电能高字节', 1, 'admin', 'k112', 1, 'integer', '{\"max\": 1, \"min\": 0, \"step\": 0, \"type\": \"integer\", \"unit\": \"\"}', 1, 0, 0, 0, 1, 0, 0, '0', '', '2024-01-08 15:46:17', '', NULL, NULL, '', NULL); +INSERT INTO `iot_things_model_template` VALUES (538, '三相回路正(市电)总有功电能低字节', 1, 'admin', 'k113', 1, 'integer', '{\"max\": 1, \"min\": 0, \"step\": 0, \"type\": \"integer\", \"unit\": \"\"}', 1, 0, 0, 0, 1, 0, 0, '0', '', '2024-01-08 15:46:17', '', NULL, NULL, '', NULL); +INSERT INTO `iot_things_model_template` VALUES (539, '三相回路正(市电)总无功电能高字节', 1, 'admin', 'k118', 1, 'integer', '{\"max\": 1, \"min\": 0, \"step\": 0, \"type\": \"integer\", \"unit\": \"\"}', 1, 0, 0, 0, 1, 0, 0, '0', '', '2024-01-08 15:46:17', '', NULL, NULL, '', NULL); +INSERT INTO `iot_things_model_template` VALUES (540, '三相回路正(市电)总无功电能低字节', 1, 'admin', 'k119', 1, 'integer', '{\"max\": 1, \"min\": 0, \"step\": 0, \"type\": \"integer\", \"unit\": \"\"}', 1, 0, 0, 0, 1, 0, 0, '0', '', '2024-01-08 15:46:17', '', NULL, NULL, '', NULL); +INSERT INTO `iot_things_model_template` VALUES (541, 'DS18B20温度数据 ', 1, 'admin', '0', 1, 'integer', '{\"max\": 100, \"min\": 0, \"step\": 0, \"type\": \"integer\", \"unit\": \"摄氏度\"}', 1, 0, 0, 0, 1, 0, 0, '0', '', '2024-01-08 17:03:03', '', NULL, NULL, '%s*0.01', NULL); +INSERT INTO `iot_things_model_template` VALUES (542, 'CO2二氧化碳数据 ', 1, 'admin', '1', 1, 'integer', '{\"max\": 100, \"min\": 0, \"step\": 0, \"type\": \"integer\", \"unit\": \"\"}', 1, 0, 0, 0, 1, 0, 0, '0', '', '2024-01-08 17:03:03', '', NULL, NULL, '', NULL); +INSERT INTO `iot_things_model_template` VALUES (543, 'ADC1的AD值 ', 1, 'admin', '2', 1, 'integer', '{\"max\": 100, \"min\": 0, \"step\": 0, \"type\": \"integer\", \"unit\": \"\"}', 1, 0, 0, 0, 1, 0, 0, '0', '', '2024-01-08 17:03:03', '', NULL, NULL, '', NULL); +INSERT INTO `iot_things_model_template` VALUES (544, '光照值高16位', 1, 'admin', '3', 1, 'integer', '{\"max\": 100, \"min\": 0, \"step\": 0, \"type\": \"integer\", \"unit\": \"\"}', 1, 0, 0, 0, 1, 0, 0, '0', '', '2024-01-08 17:03:03', '', NULL, NULL, '', NULL); +INSERT INTO `iot_things_model_template` VALUES (545, '光照值低16位', 1, 'admin', '4', 1, 'integer', '{\"max\": 100, \"min\": 0, \"step\": 0, \"type\": \"integer\", \"unit\": \"\"}', 1, 0, 0, 0, 1, 0, 0, '0', '', '2024-01-08 17:03:03', '', NULL, NULL, '', NULL); +INSERT INTO `iot_things_model_template` VALUES (546, '空气温度', 1, 'admin', '5', 1, 'integer', '{\"max\": 100, \"min\": 0, \"step\": 0, \"type\": \"integer\", \"unit\": \"\"}', 1, 0, 0, 0, 1, 0, 0, '0', '', '2024-01-08 17:03:03', '', NULL, NULL, '%s*0.01', NULL); +INSERT INTO `iot_things_model_template` VALUES (547, '空气湿度', 1, 'admin', '6', 1, 'integer', '{\"max\": 100, \"min\": 0, \"step\": 0, \"type\": \"integer\", \"unit\": \"\"}', 1, 0, 0, 0, 1, 0, 0, '0', '', '2024-01-08 17:03:03', '', NULL, NULL, '%s*0.01', NULL); +INSERT INTO `iot_things_model_template` VALUES (548, '485的地址 ', 1, 'admin', '7', 1, 'integer', '{\"max\": 254, \"min\": 1, \"step\": 0, \"type\": \"integer\", \"unit\": \"\"}', 1, 0, 0, 0, 1, 0, 0, '0', '', '2024-01-08 17:03:03', '', NULL, NULL, '', NULL); +INSERT INTO `iot_things_model_template` VALUES (549, 'RSSI ', 1, 'admin', '8', 1, 'integer', '{\"max\": 100, \"min\": 0, \"step\": 0, \"type\": \"integer\", \"unit\": \"\"}', 1, 0, 0, 0, 0, 0, 0, '0', '', '2024-01-08 17:03:03', '', NULL, NULL, '', NULL); +INSERT INTO `iot_things_model_template` VALUES (550, 'CO2补偿 ', 1, 'admin', '9', 1, 'integer', '{\"max\": 100, \"min\": 0, \"step\": 0, \"type\": \"integer\", \"unit\": \"\"}', 1, 0, 0, 0, 1, 0, 0, '0', '', '2024-01-08 17:03:03', '', NULL, NULL, '', NULL); +INSERT INTO `iot_things_model_template` VALUES (551, 'PM25', 1, 'admin', '10', 1, 'integer', '{\"max\": 100, \"min\": 0, \"step\": 0, \"type\": \"integer\", \"unit\": \"\"}', 1, 0, 0, 0, 1, 0, 0, '0', '', '2024-01-08 17:03:03', '', NULL, NULL, '', NULL); +INSERT INTO `iot_things_model_template` VALUES (552, 'PM10', 1, 'admin', '11', 1, 'integer', '{\"max\": 100, \"min\": 0, \"step\": 0, \"type\": \"integer\", \"unit\": \"\"}', 1, 0, 0, 0, 1, 0, 0, '0', '', '2024-01-08 17:03:03', '', NULL, NULL, '', NULL); +INSERT INTO `iot_things_model_template` VALUES (553, '电池电压ADC值', 1, 'admin', '12', 1, 'integer', '{\"max\": 100, \"min\": 0, \"step\": 0, \"type\": \"integer\", \"unit\": \"\"}', 1, 0, 0, 0, 1, 0, 0, '0', '', '2024-01-08 17:03:03', '', NULL, NULL, '', NULL); +INSERT INTO `iot_things_model_template` VALUES (554, '输入电压ADC值', 1, 'admin', '13', 1, 'integer', '{\"max\": 100, \"min\": 0, \"step\": 0, \"type\": \"integer\", \"unit\": \"\"}', 1, 0, 0, 0, 1, 0, 0, '0', '', '2024-01-08 17:03:03', '', NULL, NULL, '%s*10', NULL); +INSERT INTO `iot_things_model_template` VALUES (555, '系统运行模式 ', 1, 'admin', '14', 1, 'enum', '{\"type\": \"enum\", \"enumList\": [{\"text\": \"一直运行\", \"value\": \"1\"}, {\"text\": \"定时运行\", \"value\": \"0\"}, {\"text\": \"立即进入低功耗定时运行\", \"value\": \"2\"}]}', 1, 0, 0, 0, 1, 0, 0, '0', '', '2024-01-08 17:03:03', '', NULL, NULL, '', NULL); +INSERT INTO `iot_things_model_template` VALUES (556, '定时运行时间秒 ', 1, 'admin', '15', 2, 'integer', '{\"max\": 100, \"min\": 0, \"step\": 0, \"type\": \"integer\", \"unit\": \"秒\"}', 1, 0, 0, 0, 0, 0, 0, '0', '', '2024-01-08 17:03:03', '', NULL, NULL, '', NULL); +INSERT INTO `iot_things_model_template` VALUES (557, '定时睡眠时间秒', 1, 'admin', '16', 2, 'integer', '{\"max\": 100, \"min\": 0, \"step\": 0, \"type\": \"integer\", \"unit\": \"秒\"}', 1, 0, 0, 0, 0, 0, 0, '0', '', '2024-01-08 17:03:03', '', NULL, NULL, '', NULL); +INSERT INTO `iot_things_model_template` VALUES (558, '低功耗模式中当前的运行时间', 1, 'admin', '17', 1, 'integer', '{\"max\": 100, \"min\": 0, \"step\": 0, \"type\": \"integer\", \"unit\": \"秒\"}', 1, 0, 0, 0, 1, 0, 0, '0', '', '2024-01-08 17:03:03', '', NULL, NULL, '', NULL); +INSERT INTO `iot_things_model_template` VALUES (559, '低功耗模式中当前的睡眠时间', 1, 'admin', '18', 1, 'integer', '{\"max\": 100, \"min\": 0, \"step\": 0, \"type\": \"integer\", \"unit\": \"秒\"}', 1, 0, 0, 0, 1, 0, 0, '0', '', '2024-01-08 17:03:03', '', NULL, NULL, '', NULL); + +-- ---------------------------- +-- Table structure for iot_things_model_template_translate +-- ---------------------------- +DROP TABLE IF EXISTS `iot_things_model_template_translate`; +CREATE TABLE `iot_things_model_template_translate` ( + `id` bigint NOT NULL COMMENT 'ID', + `zh_cn` varchar(200) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT NULL COMMENT 'zh_CN', + `en_us` varchar(200) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT NULL COMMENT 'en_US', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb3 COLLATE = utf8mb3_general_ci COMMENT = '物模型模板翻译表' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of iot_things_model_template_translate +-- ---------------------------- + +-- ---------------------------- +-- Table structure for iot_things_model_translate +-- ---------------------------- +DROP TABLE IF EXISTS `iot_things_model_translate`; +CREATE TABLE `iot_things_model_translate` ( + `id` bigint NOT NULL COMMENT 'ID', + `zh_cn` varchar(200) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT NULL COMMENT 'zh_CN', + `en_us` varchar(200) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT NULL COMMENT 'en_US', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb3 COLLATE = utf8mb3_general_ci COMMENT = '物模型翻译表' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of iot_things_model_translate +-- ---------------------------- + +-- ---------------------------- +-- Table structure for iot_var_temp +-- ---------------------------- +DROP TABLE IF EXISTS `iot_var_temp`; +CREATE TABLE `iot_var_temp` ( + `template_id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键id', + `template_name` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_ci NOT NULL COMMENT '模板名称', + `type` tinyint NULL DEFAULT NULL, + `polling_method` tinyint NOT NULL COMMENT '采集方式 1.云端轮询 2.云端边缘计算', + `user_id` int NULL DEFAULT NULL COMMENT '模板所属用户', + `slave_total` bigint NULL DEFAULT NULL COMMENT '从机总数', + `point_total` bigint NULL DEFAULT NULL COMMENT '总采集点数', + `share` tinyint NULL DEFAULT NULL COMMENT '是否分享', + `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间', + `create_by` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_ci NULL DEFAULT NULL COMMENT '创建用户', + `update_time` datetime NULL DEFAULT NULL COMMENT '更新时间', + `update_by` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_ci NULL DEFAULT NULL COMMENT '更新用户', + PRIMARY KEY (`template_id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 27 CHARACTER SET = utf8mb3 COLLATE = utf8mb3_unicode_ci COMMENT = '设备采集变量模板对象' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of iot_var_temp +-- ---------------------------- +INSERT INTO `iot_var_temp` VALUES (1, 'modbus从机组', NULL, 0, 1, NULL, NULL, NULL, '2023-02-28 14:20:29', NULL, NULL, NULL); +INSERT INTO `iot_var_temp` VALUES (2, '边缘网关-MCU', NULL, 1, 1, NULL, NULL, NULL, '2023-08-26 19:25:56', NULL, NULL, NULL); +INSERT INTO `iot_var_temp` VALUES (3, '工程数据采集模板', NULL, 0, 1, NULL, NULL, NULL, '2023-08-28 14:20:21', NULL, NULL, NULL); +INSERT INTO `iot_var_temp` VALUES (4, '测试网关', NULL, 1, 1, NULL, NULL, NULL, '2023-08-29 18:20:10', NULL, NULL, NULL); +INSERT INTO `iot_var_temp` VALUES (6, '温湿度模板', NULL, 0, 1, NULL, NULL, NULL, '2023-08-30 14:04:56', NULL, NULL, NULL); +INSERT INTO `iot_var_temp` VALUES (7, '测试采集点', NULL, 0, 1, NULL, NULL, NULL, '2023-10-13 16:46:24', NULL, NULL, NULL); +INSERT INTO `iot_var_temp` VALUES (11, 'T200测试12.6.1', NULL, 0, 1, NULL, NULL, NULL, '2023-12-06 16:29:25', NULL, NULL, NULL); +INSERT INTO `iot_var_temp` VALUES (13, 'IO088测试12.11.01', NULL, 0, 1, NULL, NULL, NULL, '2023-12-11 10:33:19', NULL, NULL, NULL); +INSERT INTO `iot_var_temp` VALUES (18, 'IO088-12.11.02', NULL, 0, 1, NULL, NULL, NULL, '2023-12-11 13:30:30', NULL, NULL, NULL); +INSERT INTO `iot_var_temp` VALUES (19, 'IO088-12.11.03', NULL, 0, 1, NULL, NULL, NULL, '2023-12-11 13:39:22', NULL, NULL, NULL); +INSERT INTO `iot_var_temp` VALUES (22, 'CAT-T200 TCP测试', NULL, 0, 1, NULL, NULL, NULL, '2023-12-20 10:13:24', NULL, NULL, NULL); +INSERT INTO `iot_var_temp` VALUES (23, 'gjz-test', NULL, 1, 1, NULL, NULL, NULL, '2023-12-20 10:15:06', NULL, '2023-12-20 10:18:01', NULL); +INSERT INTO `iot_var_temp` VALUES (25, '测试模板', NULL, 1, 1, NULL, NULL, NULL, '2024-01-08 15:41:40', NULL, NULL, NULL); +INSERT INTO `iot_var_temp` VALUES (26, '1-9', NULL, 0, 1, NULL, NULL, NULL, '2024-01-09 10:03:39', NULL, NULL, NULL); + +-- ---------------------------- +-- Table structure for iot_var_temp_salve +-- ---------------------------- +DROP TABLE IF EXISTS `iot_var_temp_salve`; +CREATE TABLE `iot_var_temp_salve` ( + `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键id', + `device_temp_id` bigint NOT NULL COMMENT '关联的模板id', + `slave_addr` int NULL DEFAULT NULL COMMENT '从机编号', + `slave_index` int NULL DEFAULT NULL, + `slave_ip` varchar(32) CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_ci NULL DEFAULT NULL COMMENT '从机ip地址', + `slave_name` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_ci NOT NULL COMMENT '从机名称', + `slave_port` int NULL DEFAULT NULL COMMENT '从机端口', + `addr_start` bigint NULL DEFAULT NULL COMMENT '寄存器起始地址(10进制)', + `addr_end` bigint NULL DEFAULT NULL COMMENT '寄存器结束地址(10进制)', + `packet_length` int NULL DEFAULT 32 COMMENT '寄存器批量读取个数', + `timer` bigint NULL DEFAULT NULL COMMENT '批量获取轮询时间(默认5分钟)', + `status` tinyint NOT NULL COMMENT '状态 0-启动 1-失效', + `code` int NULL DEFAULT NULL COMMENT '功能编码', + `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间', + `create_by` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_ci NULL DEFAULT NULL COMMENT '创建用户', + `update_time` datetime NULL DEFAULT NULL COMMENT '更新时间', + `update_by` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_ci NULL DEFAULT NULL COMMENT '更新用户', + `remark` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_ci NULL DEFAULT NULL COMMENT '备注', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 38 CHARACTER SET = utf8mb3 COLLATE = utf8mb3_unicode_ci COMMENT = '变量模板设备从机对象' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of iot_var_temp_salve +-- ---------------------------- +INSERT INTO `iot_var_temp_salve` VALUES (1, 1, 1, NULL, NULL, '漏水器', NULL, 0, 0, 1, 300, 0, 4, '2023-02-28 14:43:24', NULL, '2023-04-11 19:02:06', NULL, NULL); +INSERT INTO `iot_var_temp_salve` VALUES (2, 1, 2, NULL, NULL, '温湿度计', NULL, 0, 1, 2, 300, 0, 4, '2023-02-28 15:25:00', NULL, '2023-04-11 19:02:04', NULL, NULL); +INSERT INTO `iot_var_temp_salve` VALUES (3, 1, 11, NULL, NULL, '电量仪', NULL, 0, 789, 20, 300, 0, 3, '2023-02-28 15:32:36', NULL, '2023-04-11 19:02:00', NULL, NULL); +INSERT INTO `iot_var_temp_salve` VALUES (4, 2, 1, NULL, NULL, '标靶#01', NULL, NULL, NULL, 32, NULL, 0, NULL, '2023-08-26 19:35:09', NULL, NULL, NULL, NULL); +INSERT INTO `iot_var_temp_salve` VALUES (5, 2, 2, NULL, NULL, '标靶#02', NULL, NULL, NULL, 32, NULL, 0, NULL, '2023-08-26 19:35:20', NULL, NULL, NULL, NULL); +INSERT INTO `iot_var_temp_salve` VALUES (7, 3, 1, NULL, NULL, '计件传感器', NULL, 0, 10, 10, 60, 0, NULL, '2023-08-28 14:22:09', NULL, NULL, NULL, NULL); +INSERT INTO `iot_var_temp_salve` VALUES (8, 3, 2, NULL, NULL, '机器参数传感器', NULL, 0, 10, 10, 60, 0, NULL, '2023-08-28 15:06:32', NULL, NULL, NULL, NULL); +INSERT INTO `iot_var_temp_salve` VALUES (13, 6, 1, NULL, NULL, '温湿度传感器', NULL, 0, 1, 2, 60, 0, NULL, '2023-08-30 14:05:26', NULL, NULL, NULL, NULL); +INSERT INTO `iot_var_temp_salve` VALUES (17, 2, 0, NULL, NULL, '采集设备', NULL, NULL, NULL, 32, NULL, 0, NULL, '2023-08-30 23:30:25', NULL, NULL, NULL, NULL); +INSERT INTO `iot_var_temp_salve` VALUES (18, 7, 1, NULL, NULL, '电表', NULL, 0, 100, 64, 60, 0, NULL, '2023-10-13 16:46:58', NULL, NULL, NULL, NULL); +INSERT INTO `iot_var_temp_salve` VALUES (21, 11, 1, NULL, NULL, '电表', NULL, 37, 49, 13, 60, 0, NULL, '2023-12-06 16:31:12', NULL, NULL, NULL, NULL); +INSERT INTO `iot_var_temp_salve` VALUES (22, 11, 2, NULL, NULL, '电表2', NULL, 37, 49, 13, 60, 0, NULL, '2023-12-07 16:40:36', NULL, '2023-12-07 17:03:18', NULL, NULL); +INSERT INTO `iot_var_temp_salve` VALUES (24, 13, 1, NULL, NULL, 'IO088.12.11.01', NULL, 0, 7, 8, 60, 0, NULL, '2023-12-11 10:34:16', NULL, '2023-12-11 10:53:58', NULL, NULL); +INSERT INTO `iot_var_temp_salve` VALUES (28, 18, 1, NULL, NULL, 'IO088-12.11.02', NULL, 0, 8, 8, 60, 0, NULL, '2023-12-11 13:30:57', NULL, '2023-12-11 13:37:56', NULL, NULL); +INSERT INTO `iot_var_temp_salve` VALUES (29, 19, 1, NULL, NULL, 'IO088.12.11.03', NULL, 0, 8, 9, 60, 0, NULL, '2023-12-11 13:39:47', NULL, NULL, NULL, NULL); +INSERT INTO `iot_var_temp_salve` VALUES (32, 22, 1, NULL, NULL, '测试', NULL, 0, 5, 6, 60, 0, NULL, '2023-12-20 10:13:37', NULL, NULL, NULL, NULL); +INSERT INTO `iot_var_temp_salve` VALUES (34, 23, 1, NULL, NULL, 'json-test', NULL, NULL, NULL, 32, NULL, 0, NULL, '2023-12-20 15:35:16', NULL, NULL, NULL, NULL); +INSERT INTO `iot_var_temp_salve` VALUES (35, 25, 1, NULL, NULL, '设备1', NULL, NULL, NULL, 32, NULL, 0, NULL, '2024-01-08 15:46:04', NULL, NULL, NULL, NULL); +INSERT INTO `iot_var_temp_salve` VALUES (36, 2, 6, NULL, NULL, '设备1', NULL, NULL, NULL, 32, NULL, 0, NULL, '2024-01-08 17:02:04', NULL, NULL, NULL, NULL); +INSERT INTO `iot_var_temp_salve` VALUES (37, 26, 1, NULL, NULL, '1-9', NULL, 0, 9, 10, 60, 0, NULL, '2024-01-09 10:03:52', NULL, '2024-01-09 10:44:21', NULL, NULL); + +-- ---------------------------- +-- Table structure for media_server +-- ---------------------------- +DROP TABLE IF EXISTS `media_server`; +CREATE TABLE `media_server` ( + `id` bigint NOT NULL AUTO_INCREMENT COMMENT '流媒体配置ID', + `server_id` varchar(30) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL DEFAULT '' COMMENT '服务器标识', + `tenant_id` bigint NOT NULL COMMENT '租户ID', + `tenant_name` varchar(30) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL DEFAULT '' COMMENT '租户名称', + `enabled` tinyint(1) NULL DEFAULT NULL COMMENT '使能开关', + `protocol` varchar(10) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL DEFAULT '' COMMENT '默认播放协议', + `ip` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL DEFAULT '' COMMENT '服务器ip', + `domain` varchar(128) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL DEFAULT '' COMMENT '服务器域名', + `hookurl` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL DEFAULT '' COMMENT '回调服务器地址', + `secret` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL DEFAULT '' COMMENT '流媒体密钥', + `port_http` int NOT NULL DEFAULT 0 COMMENT 'http端口', + `port_https` int NOT NULL DEFAULT 0 COMMENT 'https端口', + `port_rtmp` int NOT NULL DEFAULT 0 COMMENT 'rtmp端口', + `port_rtsp` int NOT NULL DEFAULT 0 COMMENT 'rtsp端口', + `rtp_proxy_port` int NOT NULL DEFAULT 0 COMMENT 'RTP收流端口', + `rtp_enable` tinyint(1) NOT NULL DEFAULT 0 COMMENT '是否使用多端口模式', + `rtp_port_range` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL DEFAULT '' COMMENT 'rtp端口范围', + `record_port` int NOT NULL DEFAULT 0 COMMENT '录像服务端口', + `auto_config` tinyint(1) NOT NULL DEFAULT 0 COMMENT '是否自动同步配置ZLM', + `status` tinyint(1) NOT NULL DEFAULT 0 COMMENT '状态', + `del_flag` char(1) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL DEFAULT '0' COMMENT '删除标志(0代表存在 2代表删除)', + `create_by` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL DEFAULT '' COMMENT '创建者', + `create_time` datetime NOT NULL COMMENT '创建时间', + `update_by` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT '' COMMENT '更新者', + `update_time` datetime NULL DEFAULT NULL COMMENT '更新时间', + `remark` varchar(500) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT NULL COMMENT '备注', + `port_ws` int NULL DEFAULT NULL COMMENT 'ws端口', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 8 CHARACTER SET = utf8mb3 COLLATE = utf8mb3_general_ci COMMENT = '流媒体服务器配置' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of media_server +-- ---------------------------- +INSERT INTO `media_server` VALUES (7, 'gongkongbang', 1, 'admin', 1, 'http', '1.14.72.242', 'lot.keruixinda.com', '1.14.72.242:8080', '035c73f7-bb6b-4889-a715-d9eb2d192xxx', 8082, 8443, 1935, 554, 0, 1, '30000,30103', 18081, 1, 0, '0', '', '2023-09-26 21:11:43', '', '2025-01-08 15:39:00', NULL, NULL); + +-- ---------------------------- +-- Table structure for news +-- ---------------------------- +DROP TABLE IF EXISTS `news`; +CREATE TABLE `news` ( + `news_id` bigint NOT NULL AUTO_INCREMENT COMMENT '新闻ID', + `title` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL COMMENT '标题', + `content` text CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL COMMENT '内容', + `img_url` varchar(128) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL COMMENT '封面', + `is_top` tinyint(1) NOT NULL DEFAULT 0 COMMENT '是否置顶(0-置顶 1-置顶)', + `is_banner` tinyint(1) NOT NULL DEFAULT 0 COMMENT '是否banner(0-是banner 1-不是banner)', + `category_id` bigint NOT NULL COMMENT '分类ID', + `category_name` varchar(32) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL COMMENT '分类名称', + `status` tinyint(1) NOT NULL DEFAULT 0 COMMENT '新闻状态(0-未发布,1-已发布)', + `author` varchar(50) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL COMMENT '作者', + `del_flag` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '0' COMMENT '删除标志(0代表存在 2代表删除)', + `create_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '创建者', + `create_time` datetime NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '创建时间', + `update_by` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT '' COMMENT '更新者', + `update_time` datetime NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', + `remark` varchar(500) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT NULL COMMENT '备注', + PRIMARY KEY (`news_id`) USING BTREE, + INDEX `news_index_category_id`(`category_id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 9 CHARACTER SET = utf8mb3 COLLATE = utf8mb3_general_ci COMMENT = '新闻资讯' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of news +-- ---------------------------- + +-- ---------------------------- +-- Table structure for news_category +-- ---------------------------- +DROP TABLE IF EXISTS `news_category`; +CREATE TABLE `news_category` ( + `category_id` bigint NOT NULL AUTO_INCREMENT COMMENT '分类ID', + `category_name` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL COMMENT '分类名称', + `order_num` int NOT NULL COMMENT '显示顺序', + `del_flag` char(1) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT '0' COMMENT '删除标志(0代表存在 2代表删除)', + `create_by` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT '' COMMENT '创建者', + `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间', + `update_by` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT '' COMMENT '更新者', + `update_time` datetime NULL DEFAULT NULL COMMENT '更新时间', + `remark` varchar(500) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT NULL COMMENT '备注', + PRIMARY KEY (`category_id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 3 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '新闻分类' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of news_category +-- ---------------------------- +INSERT INTO `news_category` VALUES (1, '新闻资讯', 3, '0', '', '2022-04-11 20:53:55', '', '2022-04-13 15:30:22', '新闻资讯信息'); +INSERT INTO `news_category` VALUES (2, '相关产品', 2, '0', '', '2022-04-11 20:54:16', '', '2022-04-13 15:30:15', '相关产品推荐'); + +-- ---------------------------- +-- Table structure for notify_channel +-- ---------------------------- +DROP TABLE IF EXISTS `notify_channel`; +CREATE TABLE `notify_channel` ( + `id` bigint NOT NULL AUTO_INCREMENT COMMENT '编号', + `name` varchar(20) CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_ci NOT NULL COMMENT '通知名称', + `channel_type` varchar(20) CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_ci NOT NULL COMMENT '渠道类型', + `provider` varchar(20) CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_ci NOT NULL COMMENT '服务商', + `config_content` varchar(1024) CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_ci NOT NULL COMMENT '配置内容', + `tenant_id` bigint NULL DEFAULT NULL COMMENT '租户id', + `tenant_name` varchar(30) CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_ci NULL DEFAULT NULL COMMENT '租户名称', + `create_by` varchar(50) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT NULL COMMENT '创建人', + `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `update_by` varchar(50) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT NULL COMMENT '更新人', + `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', + `del_flag` tinyint NOT NULL DEFAULT 0 COMMENT '逻辑删除标识', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 12 CHARACTER SET = utf8mb3 COLLATE = utf8mb3_unicode_ci COMMENT = '通知渠道' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of notify_channel +-- ---------------------------- +INSERT INTO `notify_channel` VALUES (1, '阿里云短信', 'sms', 'alibaba', '{\"accessKeyId\":\"LTAI5tFVCwhmWL5BE1RH1dtQ\",\"accessKeySecret\":\"\"}', 1, 'admin', NULL, '2024-01-25 17:24:24', NULL, '2024-02-06 10:02:24', 0); +INSERT INTO `notify_channel` VALUES (2, '阿里云语音', 'voice', 'alibaba', '{\"accessKeyId\":\"LTAI5tFVCwhmWL5BE1RH1dtQ\",\"accessKeySecret\":\"\"}', 1, 'admin', NULL, '2024-01-25 17:24:47', NULL, '2024-02-06 10:02:19', 0); +INSERT INTO `notify_channel` VALUES (3, '腾讯云短信', 'sms', 'tencent', '{\"accessKeyId\":\"AKIDhGe5Pmz3zkIeszuc6VkrBYqEYmvwyV1N\",\"accessKeySecret\":\"\"}', 1, 'admin', NULL, '2024-01-25 17:25:31', NULL, '2024-02-06 10:02:14', 0); +INSERT INTO `notify_channel` VALUES (4, '腾讯云语音', 'voice', 'tencent', '{\"accessKeyId\":\"AKIDhGe5Pmz3zkIeszuc6VkrBYqEYmvwyV1N\",\"accessKeySecret\":\"\"}', 1, 'admin', NULL, '2024-01-25 17:26:01', NULL, '2024-02-06 10:02:09', 0); +INSERT INTO `notify_channel` VALUES (5, 'QQ邮箱', 'email', 'qq', '{\"smtpServer\":\"smtp.qq.com\",\"port\":\"465\",\"username\":\"164770707@qq.com\",\"password\":\"acmhjosxxvotbidj\",\"sslEnable\":true,\"authEnable\":true,\"retryInterval\":\"5\",\"maxRetries\":\"1\"}', 1, 'admin', NULL, '2024-01-25 17:27:34', NULL, '2024-01-25 17:27:34', 0); +INSERT INTO `notify_channel` VALUES (6, '163邮箱', 'email', '163', '{\"smtpServer\":\"smtp.163.com\",\"port\":\"465\",\"username\":\"15752221201@163.com\",\"password\":\"VARNCAWFARESRTCG\",\"sslEnable\":true,\"authEnable\":true,\"retryInterval\":\"5\",\"maxRetries\":\"1\"}', 1, 'admin', NULL, '2024-01-25 17:27:58', NULL, '2024-01-25 17:27:58', 0); +INSERT INTO `notify_channel` VALUES (7, '微信小程序', 'wechat', 'mini_program', '{\"appId\":\"wx5bfbadf52adc17f3\",\"appSecret\":\"1faddfc3fa6ab2f9ce937f41fcfc7c52\"}', 1, 'admin', NULL, '2024-01-25 17:28:24', NULL, '2024-01-31 14:32:39', 0); +INSERT INTO `notify_channel` VALUES (8, '企业微信群机器人', 'wechat', 'wecom_robot', '{\"webHook\":\"https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=e87fbfd0-bcac-4c82-8803-247a8845e887\"}', 1, 'admin', NULL, '2024-01-25 17:29:06', NULL, '2024-01-31 14:50:38', 0); +INSERT INTO `notify_channel` VALUES (9, '企业微信应用消息', 'wechat', 'wecom_apply', '{\"corpId\":\"ww4761023a5d81550f\",\"corpSecret\":\"\",\"agentId\":\"1000005\"}', 1, 'admin', NULL, '2024-01-25 17:30:47', NULL, '2024-02-06 10:01:58', 0); +INSERT INTO `notify_channel` VALUES (10, '钉钉消息通知', 'dingtalk', 'work', '{\"appKey\":\"dingpy8h6c7cft1knlwl\",\"appSecret\":\"\",\"agentId\":\"2862570717\"}', 1, 'admin', NULL, '2024-01-25 17:35:53', NULL, '2024-02-06 10:01:52', 0); +INSERT INTO `notify_channel` VALUES (11, '钉钉群机器人', 'dingtalk', 'group_robot', '{\"webHook\":\"https://oapi.dingtalk.com/robot/send?access_token=47881b7982c55d61b1dc71faa6c4d9d41525b23ac4c2d7cdbb505593e83a34b3\"}', 1, 'admin', NULL, '2024-01-25 17:38:58', NULL, '2024-01-31 15:26:39', 0); + +-- ---------------------------- +-- Table structure for notify_log +-- ---------------------------- +DROP TABLE IF EXISTS `notify_log`; +CREATE TABLE `notify_log` ( + `id` bigint NOT NULL AUTO_INCREMENT COMMENT '通知日志ID', + `channel_id` bigint NOT NULL COMMENT '渠道编号', + `notify_template_id` bigint NOT NULL COMMENT '通知模版编号', + `msg_content` text CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_ci NULL COMMENT '消息内容', + `send_account` varchar(500) CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_ci NULL DEFAULT NULL COMMENT '发送账号', + `send_status` tinyint NOT NULL COMMENT '发送状态', + `result_content` text CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_ci NULL COMMENT '返回内容', + `service_code` varchar(50) CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_ci NULL DEFAULT NULL COMMENT '业务编码(唯一启用)', + `create_by` varchar(50) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT NULL COMMENT '创建人', + `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `update_by` varchar(50) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT NULL COMMENT '更新人', + `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', + `del_flag` tinyint NOT NULL DEFAULT 0 COMMENT '逻辑删除标识', + `tenant_id` bigint NULL DEFAULT NULL COMMENT '租户id', + `tenant_name` varchar(30) CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_ci NULL DEFAULT NULL COMMENT '租户名称', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb3 COLLATE = utf8mb3_unicode_ci COMMENT = '通知日志' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of notify_log +-- ---------------------------- + +-- ---------------------------- +-- Table structure for notify_template +-- ---------------------------- +DROP TABLE IF EXISTS `notify_template`; +CREATE TABLE `notify_template` ( + `id` bigint NOT NULL AUTO_INCREMENT COMMENT '编号', + `name` varchar(50) CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_ci NOT NULL COMMENT '渠道名称', + `service_code` varchar(50) CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_ci NOT NULL COMMENT '业务编码(唯一启用)', + `channel_id` bigint NULL DEFAULT NULL COMMENT '通知渠道账号', + `channel_type` varchar(20) CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_ci NOT NULL COMMENT '渠道类型', + `provider` varchar(50) CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_ci NOT NULL COMMENT '服务商', + `msg_params` text CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_ci NULL COMMENT '模板配置参数', + `status` tinyint(1) UNSIGNED ZEROFILL NOT NULL DEFAULT 0 COMMENT '是否启用 0-不启用 1-启用', + `create_by` varchar(50) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT NULL COMMENT '创建人', + `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `update_by` varchar(50) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT NULL COMMENT '更新人', + `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', + `del_flag` tinyint NOT NULL DEFAULT 0 COMMENT '逻辑删除标识', + `tenant_id` bigint NULL DEFAULT NULL COMMENT '租户id', + `tenant_name` varchar(30) CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_ci NULL DEFAULT NULL COMMENT '租户名称', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 14 CHARACTER SET = utf8mb3 COLLATE = utf8mb3_unicode_ci COMMENT = '通知模版' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of notify_template +-- ---------------------------- + +-- ---------------------------- +-- Table structure for oauth_access_token +-- ---------------------------- +DROP TABLE IF EXISTS `oauth_access_token`; +CREATE TABLE `oauth_access_token` ( + `token_id` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `token` blob NULL, + `authentication_id` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `user_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `client_id` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `authentication` blob NULL, + `refresh_token` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `open_id` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `user_id` bigint NULL DEFAULT NULL, + `expires_time` datetime NULL DEFAULT NULL +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of oauth_access_token +-- ---------------------------- + +-- ---------------------------- +-- Table structure for oauth_approvals +-- ---------------------------- +DROP TABLE IF EXISTS `oauth_approvals`; +CREATE TABLE `oauth_approvals` ( + `userId` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `clientId` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `scope` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `status` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `expiresAt` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + `lastModifiedAt` timestamp NULL DEFAULT CURRENT_TIMESTAMP +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of oauth_approvals +-- ---------------------------- + +-- ---------------------------- +-- Table structure for oauth_client_details +-- ---------------------------- +DROP TABLE IF EXISTS `oauth_client_details`; +CREATE TABLE `oauth_client_details` ( + `id` bigint NOT NULL AUTO_INCREMENT COMMENT '编号', + `client_id` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '客户端ID', + `resource_ids` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '客户端所能访问的资源id集合,多个资源时用逗号(,)分隔', + `client_secret` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '客户端秘钥', + `scope` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '权限范围,可选值包括read,write,trust;若有多个权限范围用逗号(,)分隔', + `authorized_grant_types` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '授权模式,可选值包括authorization_code,password,refresh_token,implicit,client_credentials, 若支持多个grant_type用逗号(,)分隔', + `web_server_redirect_uri` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '回调地址', + `authorities` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '权限', + `access_token_validity` int NULL DEFAULT NULL COMMENT '设定客户端的access_token的有效时间值(单位:秒)', + `refresh_token_validity` int NULL DEFAULT NULL COMMENT '设定客户端的refresh_token的有效时间值(单位:秒)', + `additional_information` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '预留的字段,在Oauth的流程中没有实际的使用,可选,但若设置值,必须是JSON格式的数据', + `autoapprove` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '设置用户是否自动Approval操作, 默认值为 \'false\', 可选值包括 \'true\',\'false\', \'read\',\'write\'. \n该字段只适用于grant_type=\"authorization_code\"的情况,当用户登录成功后,若该值为\'true\'或支持的scope值,则会跳过用户Approve的页面, 直接授权. ', + `type` tinyint(1) NULL DEFAULT NULL COMMENT '1=小度(DuerOS),2=天猫精灵(ALiGenie),3=小米小爱', + `status` tinyint NULL DEFAULT 0 COMMENT '启用状态', + `icon` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '图标', + `cloud_skill_id` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '云技能id', + `tenant_id` bigint NOT NULL COMMENT '租户id', + `tenant_name` varchar(30) CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_ci NULL DEFAULT NULL COMMENT '租户名称', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of oauth_client_details +-- ---------------------------- + +-- ---------------------------- +-- Table structure for oauth_client_token +-- ---------------------------- +DROP TABLE IF EXISTS `oauth_client_token`; +CREATE TABLE `oauth_client_token` ( + `token_id` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `token` blob NULL, + `authentication_id` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `user_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `client_id` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of oauth_client_token +-- ---------------------------- + +-- ---------------------------- +-- Table structure for oauth_code +-- ---------------------------- +DROP TABLE IF EXISTS `oauth_code`; +CREATE TABLE `oauth_code` ( + `code` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `authentication` blob NULL, + `user_id` bigint NULL DEFAULT NULL +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of oauth_code +-- ---------------------------- + +-- ---------------------------- +-- Table structure for oauth_refresh_token +-- ---------------------------- +DROP TABLE IF EXISTS `oauth_refresh_token`; +CREATE TABLE `oauth_refresh_token` ( + `token_id` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `token` blob NULL, + `authentication` blob NULL +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of oauth_refresh_token +-- ---------------------------- + +-- ---------------------------- +-- Table structure for order_control +-- ---------------------------- +DROP TABLE IF EXISTS `order_control`; +CREATE TABLE `order_control` ( + `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键id', + `tenant_id` bigint NOT NULL COMMENT '租户id', + `select_order` varchar(500) CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_ci NULL DEFAULT NULL COMMENT '逗号分隔', + `status` tinyint(1) NULL DEFAULT NULL COMMENT '是否生效 0-否 1-是', + `user_id` bigint NULL DEFAULT NULL COMMENT '被限制的用户id', + `device_id` bigint NULL DEFAULT NULL COMMENT '设备id', + `count` int NULL DEFAULT NULL COMMENT '可操作次数', + `start_time` datetime NULL DEFAULT NULL COMMENT '开始时间', + `end_time` datetime NULL DEFAULT NULL COMMENT '结束时间', + `create_by` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT '' COMMENT '创建者', + `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间', + `update_by` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT '' COMMENT '更新者', + `update_time` datetime NULL DEFAULT NULL COMMENT '更新时间', + `remark` varchar(500) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT NULL COMMENT '备注', + `file_path` varchar(128) CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_ci NULL DEFAULT NULL COMMENT '文件路径', + `img_url` varchar(128) CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_ci NULL DEFAULT NULL COMMENT '图片路径', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb3 COLLATE = utf8mb3_unicode_ci COMMENT = '指令权限控制' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of order_control +-- ---------------------------- + +-- ---------------------------- +-- Table structure for oss_config +-- ---------------------------- +DROP TABLE IF EXISTS `oss_config`; +CREATE TABLE `oss_config` ( + `id` int UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 'id', + `tenant_id` bigint NOT NULL DEFAULT 1 COMMENT '租户ID', + `tenant_name` varchar(30) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL DEFAULT '' COMMENT '租户名称', + `config_key` varchar(20) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL DEFAULT '' COMMENT '配置key', + `access_key` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL DEFAULT '' COMMENT 'accessKey', + `secret_key` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL DEFAULT '' COMMENT '秘钥', + `bucket_name` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL DEFAULT '' COMMENT '桶名称', + `prefix` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL DEFAULT '' COMMENT '前缀', + `endpoint` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL DEFAULT '' COMMENT '访问站点', + `domain` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL DEFAULT '' COMMENT '自定义域名', + `is_https` char(1) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL DEFAULT 'N' COMMENT '是否https(Y=是,N=否)', + `region` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL DEFAULT '' COMMENT '域', + `access_policy` char(1) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL DEFAULT '0' COMMENT '桶权限类型(0=private 1=public 2=custom)', + `status` char(1) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL DEFAULT '1' COMMENT '是否默认(0=是,1=否)', + `ext1` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL DEFAULT '' COMMENT '扩展字段', + `del_flag` char(1) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL DEFAULT '0' COMMENT '删除标志(0代表存在 2代表删除)', + `create_by` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL DEFAULT '' COMMENT '创建者', + `create_time` datetime NOT NULL COMMENT '创建时间', + `update_by` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT '' COMMENT '更新者', + `update_time` datetime NULL DEFAULT NULL COMMENT '更新时间', + `remark` varchar(500) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT NULL COMMENT '备注', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 3 CHARACTER SET = utf8mb3 COLLATE = utf8mb3_general_ci COMMENT = '对象存储配置表' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of oss_config +-- ---------------------------- +INSERT INTO `oss_config` VALUES (1, 1, 'admin', 'aliyun', 'XXXXXXXXXXXXXXX', 'XXXXXXXXXXXXXXX', 'keruixinda', '', 'oss-cn-beijing.aliyuncs.com', '', 'N', '', '0', '1', '', '0', '', '2023-02-25 23:15:57', '', '2025-01-08 15:06:22', NULL); +INSERT INTO `oss_config` VALUES (2, 1, 'admin', 'qiniu', 'XXXXXXXXXXXXXXX', 'XXXXXXXXXXXXXXX', 'keruixinda', '', 's3-cn-north-1.qiniucs.com', '', 'N', '', '1', '1', '', '0', '', '2023-02-25 23:15:57', '', '2025-01-08 15:06:31', NULL); +INSERT INTO `oss_config` VALUES (3, 1, 'admin', 'tengxunyun', 'AKIDfKtGQMLF3qTxHPKBpX8WgcNuGRXjy2tX', 'Zx99vXw99vVs2kHckhU9cAa4OURCm9rZ', 'keruixinda-1258644249', 'krxd', 'cos.ap-chengdu.myqcloud.com', 'cos.keruixinda.com', 'N', 'ap-chengdu', '1', '0', '', '0', '', '2025-01-08 15:06:00', '', '2025-01-08 15:26:17', NULL); + +-- ---------------------------- +-- Table structure for oss_detail +-- ---------------------------- +DROP TABLE IF EXISTS `oss_detail`; +CREATE TABLE `oss_detail` ( + `id` int UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '文件id', + `tenant_id` bigint NOT NULL DEFAULT 1 COMMENT '租户ID', + `tenant_name` varchar(30) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL DEFAULT '' COMMENT '租户名称', + `file_name` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL DEFAULT '' COMMENT '文件名', + `original_name` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL DEFAULT '' COMMENT '原名', + `file_suffix` varchar(10) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL DEFAULT '' COMMENT '文件后缀名', + `url` varchar(500) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL DEFAULT '' COMMENT 'URL地址', + `service` varchar(20) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL DEFAULT 'aliyun' COMMENT '服务商', + `del_flag` char(1) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL DEFAULT '0' COMMENT '删除标志(0代表存在 2代表删除)', + `create_by` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL DEFAULT '' COMMENT '创建者', + `create_time` datetime NOT NULL COMMENT '创建时间', + `update_by` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT '' COMMENT '更新者', + `update_time` datetime NULL DEFAULT NULL COMMENT '更新时间', + `remark` varchar(500) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT NULL COMMENT '备注', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb3 COLLATE = utf8mb3_general_ci COMMENT = '文件记录表' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of oss_detail +-- ---------------------------- +INSERT INTO `oss_detail` VALUES (1, 1, '', 'krxd/2025/01/08/4fb35313df0b4313acb1a84b632060ee.txt', 'gitee设置.txt', '.txt', 'http://cos.keruixinda.com/krxd/2025/01/08/4fb35313df0b4313acb1a84b632060ee.txt', 'tengxunyun', '0', '', '2025-01-08 15:26:26', '', NULL, NULL); + +-- ---------------------------- +-- Table structure for qrtz_blob_triggers +-- ---------------------------- +DROP TABLE IF EXISTS `qrtz_blob_triggers`; +CREATE TABLE `qrtz_blob_triggers` ( + `sched_name` varchar(120) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '调度名称', + `trigger_name` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT 'qrtz_triggers表trigger_name的外键', + `trigger_group` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT 'qrtz_triggers表trigger_group的外键', + `blob_data` blob NULL COMMENT '存放持久化Trigger对象', + PRIMARY KEY (`sched_name`, `trigger_name`, `trigger_group`) USING BTREE, + CONSTRAINT `QRTZ_BLOB_TRIGGERS_ibfk_1` FOREIGN KEY (`sched_name`, `trigger_name`, `trigger_group`) REFERENCES `qrtz_triggers` (`sched_name`, `trigger_name`, `trigger_group`) ON DELETE RESTRICT ON UPDATE RESTRICT +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = 'Blob类型的触发器表' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of qrtz_blob_triggers +-- ---------------------------- + +-- ---------------------------- +-- Table structure for qrtz_calendars +-- ---------------------------- +DROP TABLE IF EXISTS `qrtz_calendars`; +CREATE TABLE `qrtz_calendars` ( + `sched_name` varchar(120) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '调度名称', + `calendar_name` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '日历名称', + `calendar` blob NOT NULL COMMENT '存放持久化calendar对象', + PRIMARY KEY (`sched_name`, `calendar_name`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '日历信息表' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of qrtz_calendars +-- ---------------------------- + +-- ---------------------------- +-- Table structure for qrtz_cron_triggers +-- ---------------------------- +DROP TABLE IF EXISTS `qrtz_cron_triggers`; +CREATE TABLE `qrtz_cron_triggers` ( + `sched_name` varchar(120) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '调度名称', + `trigger_name` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT 'qrtz_triggers表trigger_name的外键', + `trigger_group` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT 'qrtz_triggers表trigger_group的外键', + `cron_expression` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT 'cron表达式', + `time_zone_id` varchar(80) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '时区', + PRIMARY KEY (`sched_name`, `trigger_name`, `trigger_group`) USING BTREE, + CONSTRAINT `QRTZ_CRON_TRIGGERS_ibfk_1` FOREIGN KEY (`sched_name`, `trigger_name`, `trigger_group`) REFERENCES `qrtz_triggers` (`sched_name`, `trigger_name`, `trigger_group`) ON DELETE RESTRICT ON UPDATE RESTRICT +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = 'Cron类型的触发器表' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of qrtz_cron_triggers +-- ---------------------------- +INSERT INTO `qrtz_cron_triggers` VALUES ('RuoyiScheduler', 'TASK_CLASS_NAME1', 'DEFAULT', '0/10 * * * * ?', 'Asia/Shanghai'); +INSERT INTO `qrtz_cron_triggers` VALUES ('RuoyiScheduler', 'TASK_CLASS_NAME2', 'DEFAULT', '0/15 * * * * ?', 'Asia/Shanghai'); +INSERT INTO `qrtz_cron_triggers` VALUES ('RuoyiScheduler', 'TASK_CLASS_NAME3', 'DEFAULT', '0/20 * * * * ?', 'Asia/Shanghai'); +INSERT INTO `qrtz_cron_triggers` VALUES ('RuoyiScheduler', 'TASK_CLASS_NAME4', 'SYSTEM', '0 0/4 * * * ? ', 'Asia/Shanghai'); +INSERT INTO `qrtz_cron_triggers` VALUES ('RuoyiScheduler', 'TASK_CLASS_NAME5', 'SYSTEM', '0 0/1 * * * ? ', 'Asia/Shanghai'); + +-- ---------------------------- +-- Table structure for qrtz_fired_triggers +-- ---------------------------- +DROP TABLE IF EXISTS `qrtz_fired_triggers`; +CREATE TABLE `qrtz_fired_triggers` ( + `sched_name` varchar(120) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '调度名称', + `entry_id` varchar(95) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '调度器实例id', + `trigger_name` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT 'qrtz_triggers表trigger_name的外键', + `trigger_group` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT 'qrtz_triggers表trigger_group的外键', + `instance_name` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '调度器实例名', + `fired_time` bigint NOT NULL COMMENT '触发的时间', + `sched_time` bigint NOT NULL COMMENT '定时器制定的时间', + `priority` int NOT NULL COMMENT '优先级', + `state` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '状态', + `job_name` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '任务名称', + `job_group` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '任务组名', + `is_nonconcurrent` varchar(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '是否并发', + `requests_recovery` varchar(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '是否接受恢复执行', + PRIMARY KEY (`sched_name`, `entry_id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '已触发的触发器表' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of qrtz_fired_triggers +-- ---------------------------- + +-- ---------------------------- +-- Table structure for qrtz_job_details +-- ---------------------------- +DROP TABLE IF EXISTS `qrtz_job_details`; +CREATE TABLE `qrtz_job_details` ( + `sched_name` varchar(120) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '调度名称', + `job_name` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '任务名称', + `job_group` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '任务组名', + `description` varchar(250) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '相关介绍', + `job_class_name` varchar(250) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '执行任务类名称', + `is_durable` varchar(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '是否持久化', + `is_nonconcurrent` varchar(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '是否并发', + `is_update_data` varchar(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '是否更新数据', + `requests_recovery` varchar(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '是否接受恢复执行', + `job_data` blob NULL COMMENT '存放持久化job对象', + PRIMARY KEY (`sched_name`, `job_name`, `job_group`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '任务详细信息表' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of qrtz_job_details +-- ---------------------------- +INSERT INTO `qrtz_job_details` VALUES ('RuoyiScheduler', 'TASK_CLASS_NAME1', 'DEFAULT', NULL, 'com.xinda.quartz.util.QuartzDisallowConcurrentExecution', '0', '1', '0', '0', 0xACED0005737200156F72672E71756172747A2E4A6F62446174614D61709FB083E8BFA9B0CB020000787200266F72672E71756172747A2E7574696C732E537472696E674B65794469727479466C61674D61708208E8C3FBC55D280200015A0013616C6C6F77735472616E7369656E74446174617872001D6F72672E71756172747A2E7574696C732E4469727479466C61674D617013E62EAD28760ACE0200025A000564697274794C00036D617074000F4C6A6176612F7574696C2F4D61703B787001737200116A6176612E7574696C2E486173684D61700507DAC1C31660D103000246000A6C6F6164466163746F724900097468726573686F6C6478703F4000000000000C7708000000100000000174000F5441534B5F50524F5045525449455373720020636F6D2E666173746265652E71756172747A2E646F6D61696E2E5379734A6F6200000000000000010200084C000A636F6E63757272656E747400124C6A6176612F6C616E672F537472696E673B4C000E63726F6E45787072657373696F6E71007E00094C000C696E766F6B6554617267657471007E00094C00086A6F6247726F757071007E00094C00056A6F6249647400104C6A6176612F6C616E672F4C6F6E673B4C00076A6F624E616D6571007E00094C000D6D697366697265506F6C69637971007E00094C000673746174757371007E000978720029636F6D2E666173746265652E636F6D6D6F6E2E636F72652E646F6D61696E2E42617365456E7469747900000000000000010200074C0008637265617465427971007E00094C000A63726561746554696D657400104C6A6176612F7574696C2F446174653B4C0006706172616D7371007E00034C000672656D61726B71007E00094C000B73656172636856616C756571007E00094C0008757064617465427971007E00094C000A75706461746554696D6571007E000C787074000561646D696E7372000E6A6176612E7574696C2E44617465686A81014B597419030000787077080000017DBE4ED85078707400007070707400013174000E302F3130202A202A202A202A203F74001172795461736B2E72794E6F506172616D7374000744454641554C547372000E6A6176612E6C616E672E4C6F6E673B8BE490CC8F23DF0200014A000576616C7565787200106A6176612E6C616E672E4E756D62657286AC951D0B94E08B02000078700000000000000001740018E7B3BBE7BB9FE9BB98E8AEA4EFBC88E697A0E58F82EFBC8974000133740001307800); +INSERT INTO `qrtz_job_details` VALUES ('RuoyiScheduler', 'TASK_CLASS_NAME2', 'DEFAULT', NULL, 'com.xinda.quartz.util.QuartzDisallowConcurrentExecution', '0', '1', '0', '0', 0xACED0005737200156F72672E71756172747A2E4A6F62446174614D61709FB083E8BFA9B0CB020000787200266F72672E71756172747A2E7574696C732E537472696E674B65794469727479466C61674D61708208E8C3FBC55D280200015A0013616C6C6F77735472616E7369656E74446174617872001D6F72672E71756172747A2E7574696C732E4469727479466C61674D617013E62EAD28760ACE0200025A000564697274794C00036D617074000F4C6A6176612F7574696C2F4D61703B787001737200116A6176612E7574696C2E486173684D61700507DAC1C31660D103000246000A6C6F6164466163746F724900097468726573686F6C6478703F4000000000000C7708000000100000000174000F5441534B5F50524F5045525449455373720020636F6D2E666173746265652E71756172747A2E646F6D61696E2E5379734A6F6200000000000000010200084C000A636F6E63757272656E747400124C6A6176612F6C616E672F537472696E673B4C000E63726F6E45787072657373696F6E71007E00094C000C696E766F6B6554617267657471007E00094C00086A6F6247726F757071007E00094C00056A6F6249647400104C6A6176612F6C616E672F4C6F6E673B4C00076A6F624E616D6571007E00094C000D6D697366697265506F6C69637971007E00094C000673746174757371007E000978720029636F6D2E666173746265652E636F6D6D6F6E2E636F72652E646F6D61696E2E42617365456E7469747900000000000000010200074C0008637265617465427971007E00094C000A63726561746554696D657400104C6A6176612F7574696C2F446174653B4C0006706172616D7371007E00034C000672656D61726B71007E00094C000B73656172636856616C756571007E00094C0008757064617465427971007E00094C000A75706461746554696D6571007E000C787074000561646D696E7372000E6A6176612E7574696C2E44617465686A81014B597419030000787077080000017DBE4ED85078707400007070707400013174000E302F3135202A202A202A202A203F74001572795461736B2E7279506172616D7328277279272974000744454641554C547372000E6A6176612E6C616E672E4C6F6E673B8BE490CC8F23DF0200014A000576616C7565787200106A6176612E6C616E672E4E756D62657286AC951D0B94E08B02000078700000000000000002740018E7B3BBE7BB9FE9BB98E8AEA4EFBC88E69C89E58F82EFBC8974000133740001317800); +INSERT INTO `qrtz_job_details` VALUES ('RuoyiScheduler', 'TASK_CLASS_NAME3', 'DEFAULT', NULL, 'com.xinda.quartz.util.QuartzDisallowConcurrentExecution', '0', '1', '0', '0', 0xACED0005737200156F72672E71756172747A2E4A6F62446174614D61709FB083E8BFA9B0CB020000787200266F72672E71756172747A2E7574696C732E537472696E674B65794469727479466C61674D61708208E8C3FBC55D280200015A0013616C6C6F77735472616E7369656E74446174617872001D6F72672E71756172747A2E7574696C732E4469727479466C61674D617013E62EAD28760ACE0200025A000564697274794C00036D617074000F4C6A6176612F7574696C2F4D61703B787001737200116A6176612E7574696C2E486173684D61700507DAC1C31660D103000246000A6C6F6164466163746F724900097468726573686F6C6478703F4000000000000C7708000000100000000174000F5441534B5F50524F5045525449455373720020636F6D2E666173746265652E71756172747A2E646F6D61696E2E5379734A6F6200000000000000010200084C000A636F6E63757272656E747400124C6A6176612F6C616E672F537472696E673B4C000E63726F6E45787072657373696F6E71007E00094C000C696E766F6B6554617267657471007E00094C00086A6F6247726F757071007E00094C00056A6F6249647400104C6A6176612F6C616E672F4C6F6E673B4C00076A6F624E616D6571007E00094C000D6D697366697265506F6C69637971007E00094C000673746174757371007E000978720029636F6D2E666173746265652E636F6D6D6F6E2E636F72652E646F6D61696E2E42617365456E7469747900000000000000010200074C0008637265617465427971007E00094C000A63726561746554696D657400104C6A6176612F7574696C2F446174653B4C0006706172616D7371007E00034C000672656D61726B71007E00094C000B73656172636856616C756571007E00094C0008757064617465427971007E00094C000A75706461746554696D6571007E000C787074000561646D696E7372000E6A6176612E7574696C2E44617465686A81014B597419030000787077080000017DBE4ED85078707400007070707400013174000E302F3230202A202A202A202A203F74003872795461736B2E72794D756C7469706C65506172616D7328277279272C20747275652C20323030304C2C203331362E3530442C203130302974000744454641554C547372000E6A6176612E6C616E672E4C6F6E673B8BE490CC8F23DF0200014A000576616C7565787200106A6176612E6C616E672E4E756D62657286AC951D0B94E08B02000078700000000000000003740018E7B3BBE7BB9FE9BB98E8AEA4EFBC88E5A49AE58F82EFBC8974000133740001317800); +INSERT INTO `qrtz_job_details` VALUES ('RuoyiScheduler', 'TASK_CLASS_NAME4', 'SYSTEM', NULL, 'com.xinda.quartz.util.QuartzJobExecution', '0', '0', '0', '0', 0xACED0005737200156F72672E71756172747A2E4A6F62446174614D61709FB083E8BFA9B0CB020000787200266F72672E71756172747A2E7574696C732E537472696E674B65794469727479466C61674D61708208E8C3FBC55D280200015A0013616C6C6F77735472616E7369656E74446174617872001D6F72672E71756172747A2E7574696C732E4469727479466C61674D617013E62EAD28760ACE0200025A000564697274794C00036D617074000F4C6A6176612F7574696C2F4D61703B787001737200116A6176612E7574696C2E486173684D61700507DAC1C31660D103000246000A6C6F6164466163746F724900097468726573686F6C6478703F4000000000000C7708000000100000000174000F5441534B5F50524F5045525449455373720020636F6D2E666173746265652E71756172747A2E646F6D61696E2E5379734A6F6200000000000000010200084C000A636F6E63757272656E747400124C6A6176612F6C616E672F537472696E673B4C000E63726F6E45787072657373696F6E71007E00094C000C696E766F6B6554617267657471007E00094C00086A6F6247726F757071007E00094C00056A6F6249647400104C6A6176612F6C616E672F4C6F6E673B4C00076A6F624E616D6571007E00094C000D6D697366697265506F6C69637971007E00094C000673746174757371007E000978720029636F6D2E666173746265652E636F6D6D6F6E2E636F72652E646F6D61696E2E42617365456E7469747900000000000000010200074C0008637265617465427971007E00094C000A63726561746554696D657400104C6A6176612F7574696C2F446174653B4C0006706172616D7371007E00034C000672656D61726B71007E00094C000B73656172636856616C756571007E00094C0008757064617465427971007E00094C000A75706461746554696D6571007E000C787074000561646D696E7372000E6A6176612E7574696C2E44617465686A81014B59741903000078707708000001869759B0B878707400007070707400013074000E3020302F34202A202A202A203F2074002070726F7047657453657276696365496D706C2E666574636850726F706572747974000653595354454D7372000E6A6176612E6C616E672E4C6F6E673B8BE490CC8F23DF0200014A000576616C7565787200106A6176612E6C616E672E4E756D62657286AC951D0B94E08B020000787000000000000000047400126D6F64627573E4BA91E7ABAFE8BDAEE8AFA274000131740001307800); +INSERT INTO `qrtz_job_details` VALUES ('RuoyiScheduler', 'TASK_CLASS_NAME5', 'SYSTEM', NULL, 'com.xinda.quartz.util.QuartzDisallowConcurrentExecution', '0', '1', '0', '0', 0xACED0005737200156F72672E71756172747A2E4A6F62446174614D61709FB083E8BFA9B0CB020000787200266F72672E71756172747A2E7574696C732E537472696E674B65794469727479466C61674D61708208E8C3FBC55D280200015A0013616C6C6F77735472616E7369656E74446174617872001D6F72672E71756172747A2E7574696C732E4469727479466C61674D617013E62EAD28760ACE0200025A000564697274794C00036D617074000F4C6A6176612F7574696C2F4D61703B787001737200116A6176612E7574696C2E486173684D61700507DAC1C31660D103000246000A6C6F6164466163746F724900097468726573686F6C6478703F4000000000000C7708000000100000000174000F5441534B5F50524F5045525449455373720020636F6D2E666173746265652E71756172747A2E646F6D61696E2E5379734A6F6200000000000000010200084C000A636F6E63757272656E747400124C6A6176612F6C616E672F537472696E673B4C000E63726F6E45787072657373696F6E71007E00094C000C696E766F6B6554617267657471007E00094C00086A6F6247726F757071007E00094C00056A6F6249647400104C6A6176612F6C616E672F4C6F6E673B4C00076A6F624E616D6571007E00094C000D6D697366697265506F6C69637971007E00094C000673746174757371007E000978720029636F6D2E666173746265652E636F6D6D6F6E2E636F72652E646F6D61696E2E42617365456E7469747900000000000000010200074C0008637265617465427971007E00094C000A63726561746554696D657400104C6A6176612F7574696C2F446174653B4C0006706172616D7371007E00034C000672656D61726B71007E00094C000B73656172636856616C756571007E00094C0008757064617465427971007E00094C000A75706461746554696D6571007E000C787074000561646D696E7372000E6A6176612E7574696C2E44617465686A81014B5974190300007870770800000187118D07E078707400007070707400013174000E3020302F31202A202A202A203F207400286465766963654A6F622E74696D696E6755706461746544657669636553746174757353746174757374000653595354454D7372000E6A6176612E6C616E672E4C6F6E673B8BE490CC8F23DF0200014A000576616C7565787200106A6176612E6C616E672E4E756D62657286AC951D0B94E08B02000078700000000000000005740012E8AEBEE5A487E5AE9AE697B6E4BBBBE58AA174000131740001307800); + +-- ---------------------------- +-- Table structure for qrtz_locks +-- ---------------------------- +DROP TABLE IF EXISTS `qrtz_locks`; +CREATE TABLE `qrtz_locks` ( + `sched_name` varchar(120) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '调度名称', + `lock_name` varchar(40) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '悲观锁名称', + PRIMARY KEY (`sched_name`, `lock_name`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '存储的悲观锁信息表' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of qrtz_locks +-- ---------------------------- + +-- ---------------------------- +-- Table structure for qrtz_paused_trigger_grps +-- ---------------------------- +DROP TABLE IF EXISTS `qrtz_paused_trigger_grps`; +CREATE TABLE `qrtz_paused_trigger_grps` ( + `sched_name` varchar(120) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '调度名称', + `trigger_group` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT 'qrtz_triggers表trigger_group的外键', + PRIMARY KEY (`sched_name`, `trigger_group`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '暂停的触发器表' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of qrtz_paused_trigger_grps +-- ---------------------------- + +-- ---------------------------- +-- Table structure for qrtz_scheduler_state +-- ---------------------------- +DROP TABLE IF EXISTS `qrtz_scheduler_state`; +CREATE TABLE `qrtz_scheduler_state` ( + `sched_name` varchar(120) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '调度名称', + `instance_name` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '实例名称', + `last_checkin_time` bigint NOT NULL COMMENT '上次检查时间', + `checkin_interval` bigint NOT NULL COMMENT '检查间隔时间', + PRIMARY KEY (`sched_name`, `instance_name`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '调度器状态表' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of qrtz_scheduler_state +-- ---------------------------- +INSERT INTO `qrtz_scheduler_state` VALUES ('RuoyiScheduler', 'beecue1680023933011', 1680023961720, 15000); + +-- ---------------------------- +-- Table structure for qrtz_simple_triggers +-- ---------------------------- +DROP TABLE IF EXISTS `qrtz_simple_triggers`; +CREATE TABLE `qrtz_simple_triggers` ( + `sched_name` varchar(120) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '调度名称', + `trigger_name` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT 'qrtz_triggers表trigger_name的外键', + `trigger_group` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT 'qrtz_triggers表trigger_group的外键', + `repeat_count` bigint NOT NULL COMMENT '重复的次数统计', + `repeat_interval` bigint NOT NULL COMMENT '重复的间隔时间', + `times_triggered` bigint NOT NULL COMMENT '已经触发的次数', + PRIMARY KEY (`sched_name`, `trigger_name`, `trigger_group`) USING BTREE, + CONSTRAINT `QRTZ_SIMPLE_TRIGGERS_ibfk_1` FOREIGN KEY (`sched_name`, `trigger_name`, `trigger_group`) REFERENCES `qrtz_triggers` (`sched_name`, `trigger_name`, `trigger_group`) ON DELETE RESTRICT ON UPDATE RESTRICT +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '简单触发器的信息表' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of qrtz_simple_triggers +-- ---------------------------- + +-- ---------------------------- +-- Table structure for qrtz_simprop_triggers +-- ---------------------------- +DROP TABLE IF EXISTS `qrtz_simprop_triggers`; +CREATE TABLE `qrtz_simprop_triggers` ( + `sched_name` varchar(120) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '调度名称', + `trigger_name` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT 'qrtz_triggers表trigger_name的外键', + `trigger_group` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT 'qrtz_triggers表trigger_group的外键', + `str_prop_1` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT 'String类型的trigger的第一个参数', + `str_prop_2` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT 'String类型的trigger的第二个参数', + `str_prop_3` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT 'String类型的trigger的第三个参数', + `int_prop_1` int NULL DEFAULT NULL COMMENT 'int类型的trigger的第一个参数', + `int_prop_2` int NULL DEFAULT NULL COMMENT 'int类型的trigger的第二个参数', + `long_prop_1` bigint NULL DEFAULT NULL COMMENT 'long类型的trigger的第一个参数', + `long_prop_2` bigint NULL DEFAULT NULL COMMENT 'long类型的trigger的第二个参数', + `dec_prop_1` decimal(13, 4) NULL DEFAULT NULL COMMENT 'decimal类型的trigger的第一个参数', + `dec_prop_2` decimal(13, 4) NULL DEFAULT NULL COMMENT 'decimal类型的trigger的第二个参数', + `bool_prop_1` varchar(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT 'Boolean类型的trigger的第一个参数', + `bool_prop_2` varchar(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT 'Boolean类型的trigger的第二个参数', + PRIMARY KEY (`sched_name`, `trigger_name`, `trigger_group`) USING BTREE, + CONSTRAINT `QRTZ_SIMPROP_TRIGGERS_ibfk_1` FOREIGN KEY (`sched_name`, `trigger_name`, `trigger_group`) REFERENCES `qrtz_triggers` (`sched_name`, `trigger_name`, `trigger_group`) ON DELETE RESTRICT ON UPDATE RESTRICT +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '同步机制的行锁表' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of qrtz_simprop_triggers +-- ---------------------------- + +-- ---------------------------- +-- Table structure for qrtz_triggers +-- ---------------------------- +DROP TABLE IF EXISTS `qrtz_triggers`; +CREATE TABLE `qrtz_triggers` ( + `sched_name` varchar(120) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '调度名称', + `trigger_name` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '触发器的名字', + `trigger_group` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '触发器所属组的名字', + `job_name` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT 'qrtz_job_details表job_name的外键', + `job_group` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT 'qrtz_job_details表job_group的外键', + `description` varchar(250) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '相关介绍', + `next_fire_time` bigint NULL DEFAULT NULL COMMENT '上一次触发时间(毫秒)', + `prev_fire_time` bigint NULL DEFAULT NULL COMMENT '下一次触发时间(默认为-1表示不触发)', + `priority` int NULL DEFAULT NULL COMMENT '优先级', + `trigger_state` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '触发器状态', + `trigger_type` varchar(8) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '触发器的类型', + `start_time` bigint NOT NULL COMMENT '开始时间', + `end_time` bigint NULL DEFAULT NULL COMMENT '结束时间', + `calendar_name` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '日程表名称', + `misfire_instr` smallint NULL DEFAULT NULL COMMENT '补偿执行的策略', + `job_data` blob NULL COMMENT '存放持久化job对象', + PRIMARY KEY (`sched_name`, `trigger_name`, `trigger_group`) USING BTREE, + INDEX `sched_name`(`sched_name`, `job_name`, `job_group`) USING BTREE, + CONSTRAINT `QRTZ_TRIGGERS_ibfk_1` FOREIGN KEY (`sched_name`, `job_name`, `job_group`) REFERENCES `qrtz_job_details` (`sched_name`, `job_name`, `job_group`) ON DELETE RESTRICT ON UPDATE RESTRICT +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '触发器详细信息表' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of qrtz_triggers +-- ---------------------------- +INSERT INTO `qrtz_triggers` VALUES ('RuoyiScheduler', 'TASK_CLASS_NAME1', 'DEFAULT', 'TASK_CLASS_NAME1', 'DEFAULT', NULL, 1680023970000, 1680023960000, 5, 'WAITING', 'CRON', 1680023946000, 0, NULL, 2, ''); +INSERT INTO `qrtz_triggers` VALUES ('RuoyiScheduler', 'TASK_CLASS_NAME2', 'DEFAULT', 'TASK_CLASS_NAME2', 'DEFAULT', NULL, 1680023955000, -1, 5, 'PAUSED', 'CRON', 1680023947000, 0, NULL, 2, ''); +INSERT INTO `qrtz_triggers` VALUES ('RuoyiScheduler', 'TASK_CLASS_NAME3', 'DEFAULT', 'TASK_CLASS_NAME3', 'DEFAULT', NULL, 1680023960000, -1, 5, 'PAUSED', 'CRON', 1680023948000, 0, NULL, 2, ''); +INSERT INTO `qrtz_triggers` VALUES ('RuoyiScheduler', 'TASK_CLASS_NAME4', 'SYSTEM', 'TASK_CLASS_NAME4', 'SYSTEM', NULL, 1680024000000, -1, 5, 'WAITING', 'CRON', 1680023950000, 0, NULL, -1, ''); +INSERT INTO `qrtz_triggers` VALUES ('RuoyiScheduler', 'TASK_CLASS_NAME5', 'SYSTEM', 'TASK_CLASS_NAME5', 'SYSTEM', NULL, 1680024000000, -1, 5, 'WAITING', 'CRON', 1680023951000, 0, NULL, -1, ''); + +-- ---------------------------- +-- Table structure for scada +-- ---------------------------- +DROP TABLE IF EXISTS `scada`; +CREATE TABLE `scada` ( + `id` bigint NOT NULL AUTO_INCREMENT COMMENT 'id唯一标识', + `guid` varchar(128) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT NULL COMMENT '组态id', + `scada_data` longtext CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL COMMENT '组态信息', + `serial_numbers` varchar(50) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT NULL COMMENT '设备编号', + `device_name` varchar(128) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT NULL COMMENT '设备名称', + `is_main_page` int NULL DEFAULT NULL COMMENT '是否主界面', + `page_name` varchar(20) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT NULL COMMENT '页面名称', + `page_resolution` varchar(20) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT NULL COMMENT '页面大小', + `is_share` int NULL DEFAULT NULL COMMENT '是否分享', + `share_url` longtext CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL COMMENT '分享链接', + `share_pass` varchar(50) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT NULL COMMENT '分享密码', + `page_image` varchar(2000) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT NULL COMMENT '页面图片', + `tenant_id` bigint NULL DEFAULT NULL COMMENT '租户id', + `tenant_name` varchar(30) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT NULL COMMENT '租户名称', + `create_by` varchar(50) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT NULL COMMENT '创建人', + `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `update_by` varchar(50) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT NULL COMMENT '更新人', + `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', + `del_flag` tinyint NOT NULL DEFAULT 0 COMMENT '逻辑删除标识', + `remark` varchar(800) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '备注', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 6 CHARACTER SET = utf8mb3 COLLATE = utf8mb3_general_ci COMMENT = '组态页面' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of scada +-- ---------------------------- +INSERT INTO `scada` VALUES (2, 'fd5e1ef8-408a-4d26-9970-50f486eae951', '{\"name\":\"--\",\"layer\":{\"backColor\":\"\",\"backgroundImage\":\"/dev-api/profile/upload/2025/01/01/638357514753139453708_20250101213218A022.png\",\"widthHeightRatio\":\"\",\"width\":1920,\"height\":1080,\"dragZoom\":true},\"components\":[{\"type\":\"image\",\"componentShow\":[\"动画\",\"单击\",\"组件颜色\",\"滤镜渲染\",\"组件填充\",\"参数绑定\"],\"action\":[],\"hdClassName\":\"\",\"dataBind\":{\"action\":\"\",\"productId\":\"\",\"serialNumber\":\"\",\"identifier\":\"\",\"modelName\":\"\",\"modelValue\":\"\",\"redirectUrl\":\"\",\"stateList\":[]},\"dataAction\":{\"serialNumber\":\"\",\"identifier\":\"\",\"modelName\":\"\",\"paramJudge\":\"\",\"paramJudgeData\":\"\",\"rotationSpeed\":\"中\",\"translateList\":[]},\"style\":{\"position\":{\"x\":599,\"y\":245,\"w\":100,\"h\":100},\"backColor\":\"rgba(255, 255, 255, 0)\",\"foreColor\":\"\",\"zIndex\":1,\"transform\":0,\"url\":\"/dev-api/profile/avatar/chuxuguan (191).svg\",\"transformType\":\"rotate(0deg)\",\"isFilter\":true,\"visible\":true,\"borderWidth\":0,\"borderStyle\":\"solid\",\"borderColor\":\"#ccccccff\",\"temp\":{\"position\":{\"x\":599,\"y\":245}}},\"identifier\":\"8c065ef5-9854-3019-a96d-4f117aa6e208\",\"name\":\"image0\"}]}', NULL, NULL, NULL, '未知页面1735709486337', '1920x1080', NULL, NULL, NULL, '/profile/upload/2025/01/01/file_1735738451097_20250101213411A024.png', NULL, NULL, '1', '2025-01-01 13:31:25', NULL, '2025-01-01 21:34:11', 0, NULL); +INSERT INTO `scada` VALUES (4, '01088850-ea01-4420-9f95-f814ea5ff249', '{\"name\":\"--\",\"layer\":{\"backColor\":\"\",\"backgroundImage\":\"/dev-api/profile/upload/2025/01/01/ec7132eedc176082cbbd35c2ab8daff4_20250101213223A023.png\",\"widthHeightRatio\":\"\",\"width\":1920,\"height\":null,\"dragZoom\":true},\"components\":[]}', NULL, NULL, NULL, '组态', '1920xNaN', NULL, NULL, NULL, '/profile/upload/2025/01/01/file_1735738491235_20250101213451A025.png', NULL, NULL, '1', '2025-01-01 13:28:31', NULL, '2025-01-01 21:34:51', 0, ''); +INSERT INTO `scada` VALUES (5, '6e40f1fd-9b47-4595-a9b5-75faed199ad7', '{\"name\":\"--\",\"layer\":{\"backColor\":\"\",\"backgroundImage\":\"/dev-api/profile/upload/2025/01/01/13dcbc91-fb5b-478e-91ea-b8453a9ccb6f_20250101214101A027.jpg\",\"widthHeightRatio\":\"\",\"width\":1920,\"height\":1080},\"components\":[{\"type\":\"image\",\"componentShow\":[\"动画\",\"单击\",\"组件颜色\",\"滤镜渲染\",\"组件填充\",\"参数绑定\"],\"action\":[],\"hdClassName\":\"\",\"dataBind\":{\"action\":\"\",\"productId\":\"\",\"serialNumber\":\"\",\"identifier\":\"\",\"modelName\":\"\",\"modelValue\":\"\",\"redirectUrl\":\"\",\"stateList\":[]},\"dataAction\":{\"serialNumber\":\"\",\"identifier\":\"\",\"modelName\":\"\",\"paramJudge\":\"\",\"paramJudgeData\":\"\",\"rotationSpeed\":\"中\",\"translateList\":[]},\"style\":{\"position\":{\"x\":591,\"y\":318,\"w\":100,\"h\":100},\"backColor\":\"rgba(255, 255, 255, 0)\",\"foreColor\":\"\",\"zIndex\":1,\"transform\":0,\"url\":\"/dev-api/profile/avatar/kongtiaoxitong (148).svg\",\"transformType\":\"rotate(0deg)\",\"isFilter\":true,\"visible\":true,\"borderWidth\":0,\"borderStyle\":\"solid\",\"borderColor\":\"#ccccccff\"},\"identifier\":\"9e155b48-02f6-cf56-6fc9-c1bba777e84f\",\"name\":\"image1\"},{\"type\":\"image\",\"componentShow\":[\"动画\",\"单击\",\"组件颜色\",\"滤镜渲染\",\"组件填充\",\"参数绑定\"],\"action\":[],\"hdClassName\":\"\",\"dataBind\":{\"action\":\"\",\"productId\":\"\",\"serialNumber\":\"\",\"identifier\":\"\",\"modelName\":\"\",\"modelValue\":\"\",\"redirectUrl\":\"\",\"stateList\":[]},\"dataAction\":{\"serialNumber\":\"\",\"identifier\":\"\",\"modelName\":\"\",\"paramJudge\":\"\",\"paramJudgeData\":\"\",\"rotationSpeed\":\"中\",\"translateList\":[]},\"style\":{\"position\":{\"x\":688,\"y\":361,\"w\":100,\"h\":100},\"backColor\":\"rgba(255, 255, 255, 0)\",\"foreColor\":\"\",\"zIndex\":1,\"transform\":0,\"url\":\"/dev-api/profile/avatar/787.png\",\"transformType\":\"rotate(0deg)\",\"isFilter\":true,\"visible\":true,\"borderWidth\":0,\"borderStyle\":\"solid\",\"borderColor\":\"#ccccccff\",\"temp\":{\"position\":{\"x\":719,\"y\":402}}},\"identifier\":\"ec0943ef-181c-a651-acc2-2de5d74624e7\",\"name\":\"image1\"},{\"type\":\"image\",\"componentShow\":[\"动画\",\"单击\",\"组件颜色\",\"滤镜渲染\",\"组件填充\",\"参数绑定\"],\"action\":[],\"hdClassName\":\"\",\"dataBind\":{\"action\":\"\",\"productId\":\"\",\"serialNumber\":\"\",\"identifier\":\"\",\"modelName\":\"\",\"modelValue\":\"\",\"redirectUrl\":\"\",\"stateList\":[]},\"dataAction\":{\"serialNumber\":\"\",\"identifier\":\"\",\"modelName\":\"\",\"paramJudge\":\"\",\"paramJudgeData\":\"\",\"rotationSpeed\":\"中\",\"translateList\":[]},\"style\":{\"position\":{\"x\":952,\"y\":180,\"w\":100,\"h\":100},\"backColor\":\"rgba(255, 255, 255, 0)\",\"foreColor\":\"\",\"zIndex\":1,\"transform\":0,\"url\":\"/dev-api/profile/avatar/指示灯 (38).svg\",\"transformType\":\"rotate(0deg)\",\"isFilter\":true,\"visible\":true,\"borderWidth\":0,\"borderStyle\":\"solid\",\"borderColor\":\"#ccccccff\"},\"identifier\":\"53325294-953f-f39c-09d5-b05a2fc3fded\",\"name\":\"image2\"},{\"type\":\"image\",\"componentShow\":[\"动画\",\"单击\",\"组件颜色\",\"滤镜渲染\",\"组件填充\",\"参数绑定\"],\"action\":[],\"hdClassName\":\"\",\"dataBind\":{\"action\":\"\",\"productId\":\"\",\"serialNumber\":\"\",\"identifier\":\"\",\"modelName\":\"\",\"modelValue\":\"\",\"redirectUrl\":\"\",\"stateList\":[]},\"dataAction\":{\"serialNumber\":\"\",\"identifier\":\"\",\"modelName\":\"\",\"paramJudge\":\"\",\"paramJudgeData\":\"\",\"rotationSpeed\":\"中\",\"translateList\":[]},\"style\":{\"position\":{\"x\":954,\"y\":336,\"w\":100,\"h\":100},\"backColor\":\"rgba(255, 255, 255, 0)\",\"foreColor\":\"\",\"zIndex\":1,\"transform\":0,\"url\":\"/dev-api/profile/avatar/指示灯 (42).svg\",\"transformType\":\"rotate(0deg)\",\"isFilter\":true,\"visible\":true,\"borderWidth\":0,\"borderStyle\":\"solid\",\"borderColor\":\"#ccccccff\",\"temp\":{\"position\":{\"x\":960,\"y\":336}}},\"identifier\":\"eb238409-0005-105d-4dac-4a9d37167c20\",\"name\":\"image3\"},{\"type\":\"image\",\"componentShow\":[\"动画\",\"单击\",\"组件颜色\",\"滤镜渲染\",\"组件填充\",\"参数绑定\"],\"action\":[],\"hdClassName\":\"\",\"dataBind\":{\"action\":\"\",\"productId\":\"\",\"serialNumber\":\"\",\"identifier\":\"\",\"modelName\":\"\",\"modelValue\":\"\",\"redirectUrl\":\"\",\"stateList\":[]},\"dataAction\":{\"serialNumber\":\"\",\"identifier\":\"\",\"modelName\":\"\",\"paramJudge\":\"\",\"paramJudgeData\":\"\",\"rotationSpeed\":\"中\",\"translateList\":[]},\"style\":{\"position\":{\"x\":259,\"y\":138,\"w\":224,\"h\":207},\"backColor\":\"rgba(255, 255, 255, 0)\",\"foreColor\":\"\",\"zIndex\":1,\"transform\":0,\"url\":\"/dev-api/profile/avatar/jianzhuwu (109).svg\",\"transformType\":\"rotate(0deg)\",\"isFilter\":true,\"visible\":true,\"borderWidth\":0,\"borderStyle\":\"solid\",\"borderColor\":\"#ccccccff\",\"temp\":{\"position\":{\"x\":259,\"y\":138}}},\"identifier\":\"38a954cb-cc9e-40d4-3a2c-85f28394d000\",\"name\":\"image4\"}]}', NULL, NULL, NULL, '测试01', '1920x1080', NULL, NULL, NULL, '/profile/upload/2025/01/01/file_1735738910887_20250101214150A030.png', NULL, NULL, '1', '2025-01-01 20:19:13', NULL, '2025-01-01 21:41:51', 0, '111'); + +-- ---------------------------- +-- Table structure for scada_component +-- ---------------------------- +DROP TABLE IF EXISTS `scada_component`; +CREATE TABLE `scada_component` ( + `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键id', + `component_name` varchar(20) CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_ci NULL DEFAULT NULL COMMENT '组件名称', + `component_template` longtext CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_ci NULL COMMENT '组件模版', + `component_style` longtext CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_ci NULL COMMENT '组件风格', + `component_script` longtext CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_ci NULL COMMENT '组件脚本', + `component_image` varchar(100) CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_ci NULL DEFAULT NULL COMMENT '组件缩略图', + `tenant_id` bigint NULL DEFAULT NULL COMMENT '租户id', + `tenant_name` varchar(30) CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_ci NULL DEFAULT NULL COMMENT '租户名称', + `create_by` varchar(50) CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_ci NULL DEFAULT NULL COMMENT '创建人', + `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `update_by` varchar(50) CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_ci NULL DEFAULT NULL COMMENT '更新人', + `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', + `del_flag` tinyint NOT NULL DEFAULT 0 COMMENT '逻辑删除标识', + `is_share` int NULL DEFAULT 1 COMMENT '分享类型(0-私有;1-公有)', + `user_id` bigint NULL DEFAULT NULL COMMENT '用户id', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 2 CHARACTER SET = utf8mb3 COLLATE = utf8mb3_unicode_ci COMMENT = '组态组件表' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of scada_component +-- ---------------------------- +INSERT INTO `scada_component` VALUES (1, '组件', '
\n \n\n
', 'h2 {\n color:#409EFF\n}\n\nh4 {\n color:#F56C6C\n}', ' export default {\n data() {\n return {\n value: true\n }\n }\n };', '/profile/upload/2025/01/01/file_1735737705385_20250101212145A017.png', NULL, NULL, NULL, '2025-01-01 21:10:19', NULL, '2025-01-01 21:21:45', 0, 1, 1); + +-- ---------------------------- +-- Table structure for scada_device_bind +-- ---------------------------- +DROP TABLE IF EXISTS `scada_device_bind`; +CREATE TABLE `scada_device_bind` ( + `id` bigint NOT NULL AUTO_INCREMENT COMMENT 'id唯一标识', + `serial_number` varchar(20) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT NULL COMMENT '设备编号', + `scada_guid` varchar(128) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT NULL COMMENT '组态guid', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 58 CHARACTER SET = utf8mb3 COLLATE = utf8mb3_general_ci COMMENT = '组态设备关联表' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of scada_device_bind +-- ---------------------------- +INSERT INTO `scada_device_bind` VALUES (56, '37112200001310000001', '4b2464ed-f159-4db6-8639-003e9047ac3b'); +INSERT INTO `scada_device_bind` VALUES (57, 'D1ELV3A5TOJS', '01088850-ea01-4420-9f95-f814ea5ff249'); + +-- ---------------------------- +-- Table structure for scada_echart +-- ---------------------------- +DROP TABLE IF EXISTS `scada_echart`; +CREATE TABLE `scada_echart` ( + `id` bigint NOT NULL AUTO_INCREMENT COMMENT 'id', + `guid` varchar(128) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT NULL, + `echart_name` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '图表名称', + `echart_type` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '图表类别', + `echart_data` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '图表内容', + `echart_imgae` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '图表图片', + `tenant_id` bigint NULL DEFAULT NULL COMMENT '租户id', + `tenant_name` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '租户名称', + `create_by` varchar(50) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT NULL COMMENT '创建人', + `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `update_by` varchar(50) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT NULL COMMENT '更新人', + `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', + `del_flag` tinyint NOT NULL DEFAULT 0 COMMENT '逻辑删除标识', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 9 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '图表管理' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of scada_echart +-- ---------------------------- +INSERT INTO `scada_echart` VALUES (1, NULL, '折线图', '折线图', 'var data = {\r\n title: \'折线图堆叠MOCK\',\r\n xAxisData: [\'周一\',\'周二\',\'周三\',\'周四\',\'周五\',\'周六\',\'周日\'],\r\n series: [\r\n {\r\n \"name\":\"新增事件\",\r\n \"type\":\"line\",\r\n \"stack\":\"总量\",\r\n \"data\":[180,132,101,134,90,230,210],\r\n smooth: false\r\n }\r\n ]\r\n}\r\n\r\noption = {\r\n title: {\r\n text: data.title\r\n },\r\n tooltip: {\r\n trigger: \'axis\'\r\n },\r\n xAxis: {\r\n type: \'category\',\r\n data: data.xAxisData\r\n },\r\n yAxis: {\r\n type: \'value\'\r\n },\r\n series: data.series\r\n};', '/profile/upload/2025/01/01/file_1735734422935_20250101202702A007.png', NULL, NULL, NULL, '2025-01-01 20:26:36', NULL, '2025-01-01 20:27:03', 0); +INSERT INTO `scada_echart` VALUES (2, NULL, '饼图', '饼图', ' var data = [\r\n { value: 120, name: \'苹果\' },\r\n { value: 180, name: \'香蕉\' },\r\n { value: 90, name: \'橙子\' },\r\n { value: 60, name: \'葡萄\' },\r\n { value: 150, name: \'草莓\' }\r\n ];\r\n\r\n // 配置选项\r\n var option = {\r\n title: {\r\n text: \'水果销量饼状图\',\r\n left: \'center\'\r\n },\r\n tooltip: {\r\n trigger: \'item\'\r\n },\r\n legend: {\r\n orient: \'vertical\',\r\n left: \'left\'\r\n },\r\n series: [\r\n {\r\n name: \'水果销量\',\r\n type: \'pie\',\r\n radius: \'50%\',\r\n data: data,\r\n emphasis: {\r\n itemStyle: {\r\n shadowBlur: 10,\r\n shadowOffsetX: 0,\r\n shadowColor: \'rgba(0, 0, 0, 0.5)\'\r\n }\r\n }\r\n }\r\n ]\r\n };', '/profile/upload/2025/01/01/file_1735734486783_20250101202806A008.png', NULL, NULL, NULL, '2025-01-01 20:27:57', NULL, '2025-01-01 20:28:07', 0); +INSERT INTO `scada_echart` VALUES (3, NULL, '地图下钻', '3D地图', 'var img = \'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMYAAADGCAYAAACJm/9dAAABS2lUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4KPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxMzggNzkuMTU5ODI0LCAyMDE2LzA5LzE0LTAxOjA5OjAxICAgICAgICAiPgogPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIi8+CiA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgo8P3hwYWNrZXQgZW5kPSJyIj8+IEmuOgAAE/9JREFUeJztnXmQVeWZxn/dIA2UgsriGmNNrEQNTqSio0IEFXeFkqi4kpngEhXjqMm4MIldkrE1bnGIMmPcUkOiIi6gJIragLKI0Songo5ZJlHGFTADaoRuhZ4/nnPmnO4+l+7bfc85d3l+VV18373n3Ptyvve53/5+da1L6jDdYjgwBhgNHALMBn6Sq0VdcxlwGvACsAx4HliTq0VlRlNzY+LrfTO2o5LoDxwOHAmMA/4WiP+KzM3DqCJpAA4K/i4F2oBXgWbgWWAxsDEv48oZC6M9Q4EJwInAMcDAfM0pOXXA14K/y4FPgQXAfOBxYF1+ppUXFgYMBiYCp6PaoU+B694HFqEmyVJgVSbW9Y6bgCeBb6Am4GHALrH3B6L/+0RgM6pFHgQeAzZkaWi5UVejfYx64AjgXOAk1OToSCtqajyFHGZlVsalzH7oB+BYJJR+Cde0oKbi3cBCYEtWxmVNoT5GrQljGHAecD7wxYT3P0bNirlIEB9lZ1ouDEICOQk1H7dLuOYt4C7gZ8Da7EzLhloXxv7AJcCZdK4dWpAIHkDt7FrtjA5A/aszkFiSntP9wAzgP7M1LT0KCaM+YzuyZixy+leAb9O+sN9AHdDd0S/mbGpXFKD/+2z0LHZHz+aN2PsN6Bm+gjrsY7M2MEuqVRhHoU7yYjS6FPI5MAc4FNgHzUN4JKYz69Cz2Qc9qzno2YUcjZ7t8iBddVSbMEYDzwFPA6Nir28Afgx8CZiERpVM91iKntnfoGcYH606BNUez6GRr6qhWoSxF/AoKsQxsdfXAj9AHe2rgNXZm1Y1/A96hl8E/pn2HfExwBJUBntlb1rpqXRhbA/cDLyGxuJDPgSuBPYErqPGx+RLzAagCT3bK9GzDpmIyuJmVDYVS6UKow74e+APwPeIxuI/AX6Emkw3opldkw6fome8F3rmnwSv90Nl8gdURhU57FmJwtgHdfx+jpZwgCag7gW+DFyDa4gsWY+e+ZdRGYSTgUNRGS1GZVZRVJIwtgF+iMbQ4/2IF4ADgHOA93Kwy4j3UBkcgMokZAwqsx+iMqwIKkUYI4AXgelEzab1wAVoNOSVnOwynXkFlckFqIxAZTYdleGInOwqinIXRh1wMfASMDL2+hxgb+BOqngdTwWzBZXN3qisQkaisryYMu97lLMwhgHzgJ+ivRGgIcJJwd8HOdllus8HROUVDu/2R2U6D5VxWVKuwjgEVcnjY689jqrhOYl3mHJmDiq7x2OvjUdlfEguFnVBOQrju2gmdbcgvwmYitbweFtm5bIGleFUVKagMn4OlXlZUU7C6A/MQqs3w9GLN4ADgZloW6apbNpQWR5ItEBxG1Tms4iazLlTLsLYCW2IOTv22iNor3Il7JQzxbEKle0jsdfORj6wUy4WdaAchDEC+A1RW3MzcAVwKtW/UaiW+QiV8RWozEE+8Bu0yzBX8hbGwaiNuUeQ/xi1Q2/CTadaoA2V9Umo7EG+8Dw57/fIUxhHAs8AOwb5t9Cy8fm5WWTyYj4q+7eC/PZoOfspeRmUlzBOBn4FbBvkX0XVaLUEHDDFsxL5wG+DfAOKWHJOHsbkIYwpaAtluLRjEdol5nVO5j20tmpRkO+DAjFclLUhWQvjUhSSJYzdNA84DneyTcRHyCfmBfk64HYUbjQzshTGVOBWojUys9GoREuGNpjKoAX5xuwgXwfcQoY1R1bCmILWx4SimAWcBXyW0febyuMz5COzgnxYc0zJ4suzEMZEFKwrFMVDKAzL5oJ3GCM2I195KMjXIV86Ke0vTlsYR6CRhbBPMReYjEVhus9mNCseRpfvg5pYR6T5pWkKYz8UNSIcfVqIzmpoTfE7TXXyGfKdhUG+H/Kt1GbI0xLGMODXKJI4aIz6m1gUpue0Ih8Kw4MORj6Wyp6ONITRADyBwjyC4hEdjwMUmN6zAUU+fDPI7458LSlafa9IQxh3oZWToP/ICcDbKXyPqU3WouDT4Q/tQcjnSkqphXEJ6lyDOk2T8TIPU3pW0n4QZzLyvZJRSmGMQislQ65C1ZwxafAEioQYchPt4xX3ilIJYygaaw5HoB5BM5XGpMmtwMNBuh/ywaGFL+8+pRBGHYpAF+7R/h2anfR+CpM2bWj1bbhNdjfki70OzVMKYVxEFM1jE955Z7Il3AkYHvoznhKsqeqtML6KIluHfB93tk32rEK+F3Iz8s0e0xth9EXVVhjZ4QkUAcKYPPg3orhV/YH76MVx3b0RxhXA3wXpdehoYPcrTF60oRN5w6PjDkQ+2iN6Kox9UOj3kAtxMDSTP2uQL4ZcA+zbkw/qiTDqULUVTsM/RDRkZkzePEy0TL0B+WrRo1Q9Eca3iEKbrKfEM47GlIBLgP8N0mPQyU5FUawwdqDz7Lajjpty4wPg6lj+RqIwTd2iWGE0Ei3zXUEKi7eMKRF3IR8F+ew1W7m2E8UI4ytEEydbUIRqH9piypWOPnoR8uFuUYwwbiKKQj4LeLmIe43Jg5eJgilsQ/tuwFbprjBGEy37+IT27TdjypmriY5aHo/OB+yS7grjulj6JzhqoKkc3gNui+X/pTs3dUcYRxMNz/4FLyc3lcfNyHdBvnxMVzd0RxiNsfQNeO+2qTw2IN8N6XKEqithjCXaFbUWuKNndhmTOzOJ1lGNoovzN7oSxrRY+jbg057bZUyu/BX1j0OmFboQti6Mkah/AVr64SXlptKZiXwZ5NsjC124NWFcGkvfHftAYyqV9bRfrXFpoQvrWpckLjwcigKl9Qc+B74ErC6hgcbkxR7Af6NNTK3Abk3Njes6XlSoxvgO0c68R7EoTPWwGvk0KLLIBUkXJQmjHu3GC5lRWruMyZ24T58zbdy1nXSQJIxxwJ5B+nVgWentMiZXliHfBvn6kR0vSBJG/JTMu0tvkzFlQdy3O53S1LHzPRht8mhA56DtTjQpYkw1MQR4h8jXd25qbvz/kdeONcZEor3cT2FRmOrlQ3S+Bsjn2x1f1lEYZ8TSD6RolDHlwP2x9JnxN+JNqWHAu2h892NgZ7wExFQ3A4H3ge3QkQK7NjU3roH2NcaJRJHb5mNRmOrnU+TroEMvw8147YQxIZaeizG1QdzXTwwTYVNqAOpoD0Q99GGoOWVMtTMIRTBsQBHThzQ1N24Ma4zDkCgAFmNRmBqhqbnxI+C5IDsAOByiplR85m9BhnYZUw48FUsfCcnCeCYzc4wpD+I+Pw7UxxiOhqzq0HDtbgk3GlOVNDUrpMG0cde+A+yKjhPYuR7F2QknM57PxTpj8ifsZ9QBh9ajYGohS7O3x5iyIL6KfFQ9cHDsBQvD1Cpx3z+4LzAHnV3Whg75M6YWWQVciZpSrYX2fBtTE4Sd746U4pxvY6oOC8OYBCwMYxKwMIxJwMIwJgELw5gELAxjErAwjEnAwjAmAQvDmAQsDGMSsDCMScDCMCYBC8OYBCwMYxKwMIxJwMIwJgELw5gELAxjErAwjEnAwjAmAQvDmAQsDGMSsDCMScDCMCYBC8OYBCwMYxKwMIxJwMIwJgELw5gELAxjErAwjEnAwjAmAQvDmAQsDGMSsDCMScDCMCYBC8OYBCwMYxLoC1wKNABtwC3A5lwtMiYHpo27tg/wPaAOaO0LnAqMCt5fAPw2J9uMyZMRwI+D9PJ6YEXszW9kb48xZUHc91fUA8sKvGlMLTE6ll5eDyxF/QuAMdnbY0xZMDb4tw1YUg+sAVYGL+6K2lrG1AzTxl07Avk+wMqm5sY14XBtc+y6o7I1y5jcift8M0TzGM/E3jgmM3OMKQ+OjaWfBahrXVIHMABYBwwEWoBhwMdZW2dMDgxC3YkGYCMwpKm5cWNYY2wEng7SDcBx2dtnTC4ci3weYEFTc+NGaL8k5IlY+qSsrDImZ+K+/qsw0VEYnwfpE1GzyphqZgDyddBSqMfDN+LCWAssCtLbAeMzMc2Y/DgB+TrAwqbmxjXhGx1X194fS5+WtlXG5MyZsfQD8Tc6CmMuGpUCOB4YkqJRxuTJEOTjIJ9/LP5mR2GsR+IA9dS/lappxuTHZKLRqLlNzY3r428mbVS6N5Y+Ny2rjMmZuG/f2/HNJGE8C7wZpPel/apDY6qB0cBXg/SbBLPdcZKEsQW4J5a/pORmGZMvcZ++p6m5cUvHCwrt+f53ok74N4E9SmyYMXmxB/JpgFbk650oJIx1wOwg3Rf4bklNMyY/LkY+DfBgU3PjuqSLthYl5LZY+lxg+xIZZkxeDAbOi+VvK3Th1oTxCtHCwu2BC3tvlzG5chHRD/wzyMcT6SquVFMsfRleP2Uql4HIh0Ou39rFXQnjOWB5kB4GTO25XcbkylTkwyCfXrSVa7sViXB6LH0VaqcZU0kMRr4b8qOubuiOMBagmgNgR+Dy4u0yJle+j3wX5MtPdXVDd2PX/iCWvhzYpTi7jMmNXVAY2pAfFLowTneFsZRoh9+2dNFxMaaMuB75LMiHl3bnpmKinf8T8FmQngwcUMS9xuTBAchXQb57RXdvLEYYvwNmxu77aZH3G5MlHX10JvBGMTcXw3S0BRbgYNrPIhpTTpyHfBS0xGn6Vq7tRLHC+AtqUoVcD+xU5GcYkzbDad8PvgL5brfpSVPoP4iGb3cA/rUHn2FMmsxAvgnwPPDzYj+gJ8JoQ+umwmXppwGn9OBzjEmDU4gCebQgX20rfHkyPe08/xft22wzUfVlTJ4MB+6I5acDr/fkg3ozqnQj8FKQHgbchc4vMyYP6pAPhj/QLyMf7RG9EcbnwLeBTUF+Al6abvLjQuSDoCbUPxBF1iya3s5DvEb7SZNbgP16+ZnGFMsI4OZY/irkmz2mFBN0twPzg3R/YA4KrW5MFgxCPjcgyD9JCUZKSyGMNmAK8E6Q/wqK0+P+hkmbOhTRZu8g/w5qQhU9CtWRUi3pWIuGyFqD/MnoMHFj0uRyoqmCVuSDawpf3n1KudZpGe1nxW/AEdNNeownOrAe5HvLClxbNKVeBDgD+EWQ7gPMwp1xU3r2Q77VJ8j/AvleyUhjdex5wItBejA6pWb3FL7H1CbD0AEv4RbrF0lhMWsawtiExpPfDvJfAH6N94qb3jMYhXTaM8i/jXxtU6Ebekpa+ynWoLMHNgT5/YBHgX4pfZ+pfvohH9o/yG9APlaSznZH0txotBLFCA1Hqo5AYT8tDlMs2yDfOSLItyLfWpnWF6a9A28hcBY6+A90Qma802RMV/RBnevwdNXN6IiwhWl+aRZbUx8GvkM06TIJuA+Lw3RNH+Qrk4J8G3A+8EjaX5zVnu170JkEoTgmA79EVaQxSWyDaoowmEEb8qFOpx+lQZbBDG5HM5WhOE4DHsJ9DtOZfsg3Tg/ybSho2u1ZGZB1lI/bUFUY73M8hRcdmohBaCFg2KdoQ+ez3JqlEXmEv7mb9uuqDkd7yB3d0OyMfCEcfdqMfkjvKHhHSuQVF+oR4ETgr0F+fxSB2stHapcRwAtE8xQtwBnohzRz8gyY9gxwJFFYkz3RIrAT8jLI5MYJ6IdxzyC/HjgO7bPIhbwjCa4ADgNWB/ntgHlopaT3c1Q/dahTPQ+VPcgXxtLF+RVpk7cwQLOXB6FqFDR2fSPeCVjthDvvbiKa01qBfOHVvIwKKQdhALyPOly/jL12Mlo5OSIXi0yajEBle3LstfvRQMz7uVjUgXIRBmiF5NnAPxJFVd8bhei5CDetqoE6VJYvEW1H/QyV+VmksEq2p5STMEJmoF+OcA95fzRcNxcHdatkhqMyvAOVKaiMD6PEm4xKQTkKAzQ6NRJtcgqZgPojp+ZikekNp6CymxB7bT4q4+WJd+RMuQoDFGBhPKpmwyp2OFoqMBtHWa8EhgMPok52WNtvQjPZE4iOlCg7ylkYoOUAM4ADaX9Y+SQUP/d8yv//UIvUo7J5gyjAMqgMD0Rrnnod4iZNKsWpVqFhvEaipSQ7AHcCS1CVbMqDkahM7iQKxd+Kyu4gVJZlT6UIAzR6MZ3owYeMQgF878HrrfJkF1QGL6MyCQl/uKYTjTaWPZUkjJDX0czoFHSEFOj/MQX4PXAtDryQJYPRM/89KoPQp9YF+bH0MBR/nlSiMEDt0/vQWPhMoqjW2wLXAH9Ey0oG5mJdbTAQPeM/omceHhn8OSqTfVAZlXVfohCVKoyQD4GpwNdQiJ6QoWhZyZ+BaXhpSSkZhJ7pn9EzHhp770lUFlOJavOKpNKFEfI6WqF5KO37H8OB69DCtBtQjCvTM76ADnxcjZ5pfLJ1CXr2x1OBzaYkqkUYIUuBMcAxRIsSQe3gK4E/oTmQ0dmbVrGMRs/sT+jciXj/bQVwLHrmS7M3LT2qTRghT6ORkcODdEhfNAeyFB0schmwY+bWlT9D0LN5DT2rSejZhTyNnu0hwILMrcuAahVGyGJUe3wdHWnbEntvX7SP+F3gMbTUZAC1ywAkgMfQGqZb0TMKaUHP8OvomS7O1rxsqWtdUlOLVoejGdnzgD0S3v8IreGZi4I0fJydabmwHWoKTUR9tKRBitXo0MefkVI4zDxpam5MfL3WhBFSj/Z/nI/W7DQkXNOCdpE9jbbhVsSMbTcYARwFHI2aQ4X+748jQTQDWzKzLmMKCaNv4qvVzxbg2eBve/SLeTowjmg3WQP6NT02yL+Lmg/Lgr9VRGGAypU+SAijg7/DgF0LXLsZiWA2Cp68PgP7ypZarTEKMQzVIOPRr+rWJgivRkPA5cxVaIi1EJ+i2vAJVEOU7WrXtHCN0T3WovU+96DO6OEoksk4FNqn0n9F2tC+iGZUWy4CNuZqUZliYRRmI5pND2fUd0JDwKPRMGVLgfvKiRa0EegF1PxbDnyQq0UVwv8BNYmwIpIWBvwAAAAASUVORK5CYII=\';\r\n\r\nvar trafficWay = [{\r\n name: \'火车\',\r\n value: 20\r\n},{\r\n name: \'飞机\',\r\n value: 10\r\n},{\r\n name: \'客车\',\r\n value: 30\r\n},{\r\n name: \'轮渡\',\r\n value: 40\r\n}];\r\n\r\nvar data = [];\r\nvar color=[\'#00ffff\',\'#00cfff\',\'#006ced\',\'#ffe000\',\'#ffa800\',\'#ff5b00\',\'#ff3000\']\r\nfor (var i = 0; i < trafficWay.length; i++) {\r\n data.push({\r\n value: trafficWay[i].value,\r\n name: trafficWay[i].name,\r\n itemStyle: {\r\n normal: {\r\n borderWidth: 5,\r\n shadowBlur: 20,\r\n borderColor:color[i],\r\n shadowColor: color[i]\r\n }\r\n }\r\n }, {\r\n value: 2,\r\n name: \'\',\r\n itemStyle: {\r\n normal: {\r\n label: {\r\n show: false\r\n },\r\n labelLine: {\r\n show: false\r\n },\r\n color: \'rgba(0, 0, 0, 0)\',\r\n borderColor: \'rgba(0, 0, 0, 0)\',\r\n borderWidth: 0\r\n }\r\n}\r\n });\r\n}\r\nvar seriesOption = [{\r\n name: \'\',\r\n type: \'pie\',\r\n clockWise: false,\r\n radius: [105, 109],\r\n hoverAnimation: false,\r\n itemStyle: {\r\n normal: {\r\n label: {\r\n show: true,\r\n position: \'outside\',\r\n color: \'#ddd\',\r\n formatter: function(params) {\r\n var percent = 0;\r\n var total = 0;\r\n for (var i = 0; i < trafficWay.length; i++) {\r\n total += trafficWay[i].value;\r\n }\r\n percent = ((params.value / total) * 100).toFixed(0);\r\n if(params.name !== \'\') {\r\n return \'交通方式:\' + params.name + \'\\n\' + \'\\n\' + \'占百分比:\' + percent + \'%\';\r\n }else {\r\n return \'\';\r\n }\r\n },\r\n },\r\n labelLine: {\r\n length:30,\r\n length2:100,\r\n show: true,\r\n color:\'#00ffff\'\r\n }\r\n }\r\n },\r\n data: data\r\n}];\r\noption = {\r\n backgroundColor: \'#0A2E5D\',\r\n color : color,\r\n title: {\r\n text: \'交通方式\',\r\n top: \'48%\',\r\n textAlign: \"center\",\r\n left: \"49%\",\r\n textStyle: {\r\n color: \'#fff\',\r\n fontSize: 22,\r\n fontWeight: \'400\'\r\n }\r\n },\r\n graphic: {\r\n elements: [{\r\n type: \"image\",\r\n z: 3,\r\n style: {\r\n image: img,\r\n width: 178,\r\n height: 178\r\n },\r\n left: \'center\',\r\n top: \'center\',\r\n position: [100, 100]\r\n }]\r\n },\r\n tooltip: {\r\n show: false\r\n },\r\n legend: {\r\n icon: \"circle\",\r\n orient: \'horizontal\',\r\n // x: \'left\',\r\n data:[\'火车\',\'飞机\',\'客车\',\'轮渡\'],\r\n right: 340,\r\n bottom: 150,\r\n align: \'right\',\r\n textStyle: {\r\n color: \"#fff\"\r\n },\r\n itemGap: 20\r\n },\r\n toolbox: {\r\n show: false\r\n },\r\n series: seriesOption\r\n}', '/profile/upload/2025/01/01/file_1735734979751_20250101203619A009.png', NULL, NULL, NULL, '2025-01-01 20:34:57', NULL, '2025-01-01 20:36:20', 0); +INSERT INTO `scada_echart` VALUES (4, NULL, '折线图', '折线图', ' let data = [582, 421.2, 622.1, 625.3, 265, 224]\r\n let indicator = [{\r\n name: \'套餐1\',\r\n max: 1000\r\n },\r\n {\r\n name: \'套餐2\',\r\n max: 1000\r\n },\r\n {\r\n name: \'套餐3\',\r\n max: 1000\r\n },\r\n {\r\n name: \'套餐4\',\r\n max: 1000\r\n },\r\n {\r\n name: \'套餐5\',\r\n max: 1000\r\n },\r\n {\r\n name: \'套餐6\',\r\n max: 1000\r\n },\r\n ]\r\n\r\n option = {\r\n \r\n radar: {\r\n center: [\'50%\', \'50%\'],\r\n radius: \'75%\',\r\n name: {\r\n formatter: function(name, indicator) {\r\n let arr;\r\n // if(name==\'开卡绑定数\'||name==\'渠道批量办理业务\'){\r\n // arr = [\r\n // \'{a|\'+name+\'}{b|\'+indicator.value+\'万}\'\r\n // ]\r\n // }else{\r\n arr = [\r\n \'{a|\' + name + \'}\'\r\n ]\r\n // }\r\n\r\n return arr.join(\'\\n\')\r\n },\r\n textStyle: {\r\n rich: { //根据文字的组设置格式\r\n a: {\r\n color: \'#BCDCFF\',\r\n fontSize: 14,\r\n fontWeight: 600,\r\n fontFamily: \'Source Han Sans CN\',\r\n },\r\n // b:{\r\n // fontSize:14,\r\n // verticalAlign:\'top\',\r\n // width:57,\r\n // color:\'#8E88FE\',\r\n // fontWeight:600,\r\n // align:\'center\'\r\n // },\r\n }\r\n\r\n }\r\n },\r\n nameGap: 0,\r\n indicator: indicator,\r\n splitLine: {\r\n show: false\r\n\r\n },\r\n splitArea: {\r\n show: false\r\n },\r\n axisLine: {\r\n show: false\r\n }\r\n },\r\n series: [{\r\n // name: \'家庭融合包\',\r\n type: \'radar\',\r\n data: [data],\r\n // value:14,\r\n label: {\r\n show: true,\r\n formatter: function(params) {\r\n console.log(params)\r\n return params.value + \'万\';\r\n },\r\n color: \'#8E88FE\',\r\n // position:[-20,-10,-10,-10],\r\n align: \'right\',\r\n distance: 10,\r\n align: \'right\'\r\n },\r\n symbolSize: [6, 6],\r\n lineStyle: { //边缘颜色\r\n width: 0\r\n },\r\n itemStyle: {\r\n borderWidth: 1,\r\n color: \'#fff\',\r\n borderColor: \'#F2F063\',\r\n },\r\n areaStyle: {\r\n color: \'#7D77F1\',\r\n opacity: 0.6\r\n }\r\n },\r\n {\r\n type: \'radar\',\r\n data: [\r\n [1000, 1000, 1000, 1000, 1000, 1000],\r\n ],\r\n symbol: \'none\',\r\n lineStyle: {\r\n width: 0\r\n },\r\n itemStyle: {\r\n color: \'#4175F5\'\r\n },\r\n\r\n areaStyle: {\r\n color: \'#4175F5\',\r\n opacity: 0.06\r\n }\r\n },\r\n {\r\n type: \'radar\',\r\n data: [\r\n [900, 900, 900, 900, 900, 900],\r\n ],\r\n\r\n symbol: \'none\',\r\n lineStyle: {\r\n width: 0\r\n },\r\n itemStyle: {\r\n color: \'#2C72C8\'\r\n },\r\n\r\n areaStyle: {\r\n color: \'#2C72C8\',\r\n opacity: 0.12\r\n }\r\n },\r\n {\r\n type: \'radar\',\r\n data: [\r\n [800, 800, 800, 800, 800, 800]\r\n ],\r\n\r\n symbol: \'none\',\r\n lineStyle: {\r\n width: 0\r\n },\r\n itemStyle: {\r\n color: \'#4175F5\'\r\n },\r\n\r\n areaStyle: {\r\n color: \'#4175F5\',\r\n opacity: 0.18\r\n }\r\n },\r\n {\r\n type: \'radar\',\r\n data: [\r\n [700, 700, 700, 700, 700, 700]\r\n ],\r\n\r\n symbol: \'none\',\r\n lineStyle: {\r\n width: 0\r\n },\r\n itemStyle: {\r\n color: \'#4175F5\'\r\n },\r\n\r\n areaStyle: {\r\n color: \'#4175F5\',\r\n opacity: 0.19\r\n }\r\n },\r\n {\r\n type: \'radar\',\r\n data: [\r\n [600, 600, 600, 600, 600, 600],\r\n ],\r\n\r\n symbol: \'none\',\r\n lineStyle: {\r\n width: 0\r\n },\r\n itemStyle: {\r\n color: \'#4175F5\'\r\n },\r\n\r\n areaStyle: {\r\n color: \'#4175F5\',\r\n opacity: 0.17\r\n }\r\n },\r\n {\r\n type: \'radar\',\r\n data: [\r\n [500, 500, 500, 500, 500, 500],\r\n ],\r\n symbol: \'none\',\r\n lineStyle: {\r\n width: 0\r\n },\r\n itemStyle: {\r\n color: \'#4175F5\'\r\n },\r\n\r\n areaStyle: {\r\n color: \'#4175F5\',\r\n opacity: 0.16\r\n }\r\n },\r\n {\r\n type: \'radar\',\r\n data: [\r\n [400, 400, 400, 400, 400, 400],\r\n ],\r\n\r\n symbol: \'none\',\r\n lineStyle: {\r\n width: 0\r\n },\r\n itemStyle: {\r\n color: \'#4175F5\'\r\n },\r\n\r\n areaStyle: {\r\n color: \'#4175F5\',\r\n opacity: 0.13\r\n }\r\n },\r\n ]\r\n };', '/profile/upload/2025/01/01/file_1735736170706_20250101205610A010.png', NULL, NULL, NULL, '2025-01-01 20:37:21', NULL, '2025-01-01 20:56:11', 0); +INSERT INTO `scada_echart` VALUES (5, NULL, '柱状图', '柱状图', 'app.title = \'堆叠条形图\';\r\n\r\noption = {\r\n backgroundColor: \'#0E2A43\',\r\n legend: {\r\n bottom: 20,\r\n textStyle:{\r\n color:\'#fff\',\r\n },\r\n data: [\'钥匙量\', \'有效房源量\']\r\n },\r\n grid: {\r\n left: \'3%\',\r\n right: \'4%\',\r\n bottom: \'10%\',\r\n containLabel: true\r\n },\r\n \r\n tooltip: {\r\n show:\"true\",\r\n trigger: \'axis\',\r\n axisPointer: { // 坐标轴指示器,坐标轴触发有效\r\n type: \'shadow\' // 默认为直线,可选为:\'line\' | \'shadow\'\r\n }\r\n },\r\n xAxis: {\r\n type: \'value\',\r\n axisTick : {show: false},\r\n axisLine: {\r\n show: false,\r\n lineStyle:{\r\n color:\'#fff\',\r\n }\r\n },\r\n splitLine: {\r\n show: false\r\n },\r\n },\r\n yAxis: [\r\n {\r\n type: \'category\',\r\n axisTick : {show: false},\r\n axisLine: {\r\n show: true,\r\n lineStyle:{\r\n color:\'#fff\',\r\n }\r\n },\r\n data: [\'广州\',\'深圳\',\'东莞\',\'天津\',\'惠州\',\'北京三级\',\'成都\',\'南京\',\'重庆\',\'长沙\']\r\n },\r\n {\r\n type: \'category\',\r\n axisLine: {show:false},\r\n axisTick: {show:false},\r\n axisLabel: {show:false},\r\n splitArea: {show:false},\r\n splitLine: {show:false},\r\n data: [\'广州\',\'深圳\',\'东莞\',\'天津\',\'惠州\',\'北京三级\',\'成都\',\'南京\',\'重庆\',\'长沙\']\r\n },\r\n \r\n ],\r\n series: [\r\n {\r\n name: \'有效房源量\',\r\n type: \'bar\',\r\n yAxisIndex:1,\r\n \r\n itemStyle:{\r\n normal: {\r\n show: true,\r\n color: \'#277ace\',\r\n barBorderRadius:50,\r\n borderWidth:0,\r\n borderColor:\'#333\',\r\n }\r\n },\r\n barGap:\'0%\',\r\n barCategoryGap:\'50%\',\r\n data: [120, 132, 101, 134, 90, 230, 210, 125, 231, 132]\r\n },\r\n {\r\n name: \'钥匙量\',\r\n type: \'bar\',\r\n itemStyle:{\r\n normal: {\r\n show: true,\r\n color: \'#5de3e1\',\r\n barBorderRadius:50,\r\n borderWidth:0,\r\n borderColor:\'#333\',\r\n }\r\n },\r\n barGap:\'0%\',\r\n barCategoryGap:\'50%\',\r\n data: [32, 52, 41, 64, 15, 10, 32, 25, 210, 32]\r\n }\r\n \r\n ]\r\n};', '/profile/upload/2025/01/01/file_1735736263009_20250101205743A011.png', NULL, NULL, NULL, '2025-01-01 20:56:54', NULL, '2025-01-01 20:57:43', 0); +INSERT INTO `scada_echart` VALUES (6, NULL, '散点图', '散点图', 'var sourceData = [{\r\n name: \'王小虎\',\r\n sales: 142.56,\r\n services: 64.5\r\n}, {\r\n name: \'王小明\',\r\n sales: 471.14,\r\n services: 76.2\r\n}, {\r\n name: \'王小乐\',\r\n sales: 42.1,\r\n services: 34.8\r\n}, {\r\n name: \'王小波\',\r\n sales: 63.2,\r\n services: 97.4\r\n}, {\r\n name: \'王小龙\',\r\n sales: 97.3,\r\n services: 67.5\r\n}, {\r\n name: \'王小宇\',\r\n sales: 782.1,\r\n services: 37.7\r\n}, {\r\n name: \'王小禾\',\r\n sales: 41.1,\r\n services: 12.8\r\n}]\r\n\r\nvar seriesData = sourceData.map(function(item, index, array) {\r\n return {\r\n name: item[\'name\'],\r\n value: [item[\'sales\'], item[\'services\']]\r\n }\r\n})\r\n\r\nvar computeServicesAvgLine = function() {\r\n let sum = 0\r\n sourceData.forEach(function(item) {\r\n sum += item[\'services\']\r\n })\r\n return sum / sourceData.length\r\n}\r\n\r\nvar computeSalesAvgLine = function() {\r\n let sum = 0\r\n sourceData.forEach(function(item) {\r\n sum += item[\'sales\']\r\n })\r\n return sum / sourceData.length\r\n}\r\nvar avg = {\r\n servicesAvgLine: computeServicesAvgLine(),\r\n salesAvgLine: computeSalesAvgLine()\r\n}\r\n\r\noption = {\r\n title: {\r\n text: \'服务四象限图\'\r\n },\r\n tooltip: {\r\n trigger: \'item\',\r\n axisPointer: {\r\n show: true,\r\n type: \'cross\',\r\n lineStyle: {\r\n type: \'dashed\',\r\n width: 1\r\n },\r\n },\r\n formatter: function(obj) {\r\n if (obj.componentType == \"series\") {\r\n return \'
\' +\r\n obj.name +\r\n \'
\' +\r\n \'\' +\r\n \'销售额\' +\r\n \'\' +\r\n \' : \' + obj.data.value[0] + \'(元)\' +\r\n \'
\' +\r\n \'\' +\r\n \'服务能力\' +\r\n \'\' +\r\n \' : \' + obj.data.value[1] + \'%\'\r\n }\r\n }\r\n },\r\n label: {\r\n normal: {\r\n show: true,\r\n position: \'bottom\',\r\n formatter: function(params) {\r\n return params.name\r\n }\r\n },\r\n emphasis: {\r\n show: true,\r\n position: \'bottom\',\r\n }\r\n },\r\n xAxis: {\r\n name: \'营业额\',\r\n type: \'value\',\r\n scale: true,\r\n axisLabel: {\r\n formatter: \'{value} 元\'\r\n },\r\n splitLine: {\r\n show: false\r\n },\r\n axisLine: {\r\n lineStyle: {\r\n color: \'#3259B8\'\r\n }\r\n }\r\n },\r\n yAxis: {\r\n name: \'服务能力\',\r\n type: \'value\',\r\n scale: true,\r\n axisLabel: {\r\n formatter: \'{value} %\'\r\n },\r\n splitLine: {\r\n show: false\r\n },\r\n axisLine: {\r\n lineStyle: {\r\n color: \'#3259B8\'\r\n }\r\n }\r\n },\r\n toolbox: {\r\n feature: {\r\n dataZoom: {}\r\n }\r\n },\r\n visualMap: {\r\n min: 0,\r\n max: 800,\r\n dimension: 0,\r\n left: \'right\',\r\n top: \'top\',\r\n text: [\'高\', \'低\'], // 文本,默认为数值文本\r\n calculable: true,\r\n itemWidth: 18,\r\n itemHeight: 160,\r\n textStyle: {\r\n color: \'#3259B8\',\r\n height: 56,\r\n fontSize: 11,\r\n lineHeight: 60,\r\n },\r\n inRange: {\r\n color: [\'#7AB7F7\', \'#b45ef7\']\r\n },\r\n padding: [50, 20],\r\n orient: \'horizontal\',\r\n },\r\n series: [{\r\n type: \'scatter\',\r\n data: seriesData,\r\n symbolSize: 20,\r\n markLine: {\r\n label: {\r\n normal: {\r\n formatter: function(params) {\r\n if (params.dataIndex == 0) {\r\n return params.value + \"元\";\r\n } else if (params.dataIndex == 1) {\r\n return params.value + \"%\";\r\n }\r\n return params.value;\r\n }\r\n }\r\n },\r\n lineStyle: {\r\n normal: {\r\n color: \"#626c91\",\r\n type: \'solid\',\r\n width: 1,\r\n },\r\n emphasis: {\r\n color: \"#d9def7\"\r\n }\r\n },\r\n data: [{\r\n xAxis: avg.salesAvgLine,\r\n name: \'营业额平均线\',\r\n itemStyle: {\r\n normal: {\r\n color: \"#b84a58\",\r\n }\r\n }\r\n }, {\r\n yAxis: avg.servicesAvgLine,\r\n name: \'服务能力平均线\',\r\n itemStyle: {\r\n normal: {\r\n color: \"#b84a58\",\r\n }\r\n }\r\n }]\r\n },\r\n markArea: {\r\n silent: true,\r\n data: [\r\n [{\r\n name: \'改进\',\r\n itemStyle: {\r\n normal: {\r\n color: \'transparent\'\r\n },\r\n },\r\n label: {\r\n normal: {\r\n show: true,\r\n position: \'insideTopLeft\',\r\n fontStyle: \'normal\',\r\n color: \"#409EFF\",\r\n fontSize: 20,\r\n }\r\n },\r\n coord: [avg.salesAvgLine, avg.servicesAvgLine],\r\n }, {\r\n coord: [Number.MAX_VALUE, 0],\r\n }],\r\n [{\r\n name: \'淘汰\',\r\n itemStyle: {\r\n normal: {\r\n color: \'transparent\',\r\n },\r\n },\r\n label: {\r\n normal: {\r\n show: true,\r\n position: \'insideTopRight\',\r\n fontStyle: \'normal\',\r\n color: \"#409EFF\",\r\n fontSize: 20,\r\n }\r\n },\r\n coord: [0, 0],\r\n }, {\r\n coord: [avg.salesAvgLine, avg.servicesAvgLine],\r\n }],\r\n [{\r\n name: \'保持\',\r\n itemStyle: {\r\n normal: {\r\n color: \'transparent\',\r\n },\r\n },\r\n label: {\r\n normal: {\r\n show: true,\r\n position: \'insideBottomLeft\',\r\n fontStyle: \'normal\',\r\n color: \"#409EFF\",\r\n fontSize: 20,\r\n }\r\n },\r\n coord: [avg.salesAvgLine, avg.servicesAvgLine],\r\n }, {\r\n coord: [Number.MAX_VALUE, Number.MAX_VALUE],\r\n }],\r\n [{\r\n name: \'激励\',\r\n itemStyle: {\r\n normal: {\r\n color: \'transparent\',\r\n },\r\n },\r\n label: {\r\n normal: {\r\n show: true,\r\n position: \'insideBottomRight\',\r\n fontStyle: \'normal\',\r\n color: \"#409EFF\",\r\n fontSize: 20,\r\n }\r\n },\r\n coord: [0, Number.MAX_VALUE],\r\n }, {\r\n coord: [avg.salesAvgLine, avg.servicesAvgLine],\r\n }],\r\n ]\r\n }\r\n }]\r\n};', '/profile/upload/2025/01/01/file_1735736443224_20250101210043A013.png', NULL, NULL, NULL, '2025-01-01 20:58:57', NULL, '2025-01-01 21:00:43', 0); +INSERT INTO `scada_echart` VALUES (7, NULL, '仪表1', '仪表图', ' \r\n\r\n\r\nlet angle = 0;//角度,用来做简单的动画效果的\r\nlet value = 55.33;\r\noption = {\r\nbackgroundColor:\"#061740\",\r\ntitle: {\r\n text: \'{a|\'+ value +\'}{c|%}\',\r\n x: \'center\',\r\n y: \'center\',\r\n textStyle: {\r\n rich:{\r\n a: {\r\n fontSize: 48,\r\n color: \'#29EEF3\'\r\n },\r\n \r\n c: {\r\n fontSize: 20,\r\n color: \'#ffffff\',\r\n // padding: [5,0]\r\n }\r\n }\r\n }\r\n },\r\n legend: {\r\n type: \"plain\",\r\n orient: \"vertical\",\r\n right: 0,\r\n top: \"10%\",\r\n align: \"auto\",\r\n data: [{\r\n name: \'涨价后没吃过\',\r\n icon: \"circle\"\r\n }, {\r\n name: \'天天吃\',\r\n icon: \"circle\"\r\n }, {\r\n name: \'三五天吃一次\',\r\n icon: \"circle\"\r\n }, {\r\n name: \'半个月吃一次\',\r\n icon: \"circle\"\r\n }],\r\n textStyle: {\r\n color: \"white\",\r\n fontSize: 16,\r\n padding: [10, 1, 10, 0]\r\n },\r\n selectedMode:false\r\n },\r\n series: [ {\r\n name: \"ring5\",\r\n type: \'custom\',\r\n coordinateSystem: \"none\",\r\n renderItem: function(params, api) {\r\n return {\r\n type: \'arc\',\r\n shape: {\r\n cx: api.getWidth() / 2,\r\n cy: api.getHeight() / 2,\r\n r: Math.min(api.getWidth(), api.getHeight()) / 2 * 0.6,\r\n startAngle: (0+angle) * Math.PI / 180,\r\n endAngle: (90+angle) * Math.PI / 180\r\n },\r\n style: {\r\n stroke: \"#0CD3DB\",\r\n fill: \"transparent\",\r\n lineWidth: 1.5\r\n },\r\n silent: true\r\n };\r\n },\r\n data: [0]\r\n }, {\r\n name: \"ring5\",\r\n type: \'custom\',\r\n coordinateSystem: \"none\",\r\n renderItem: function(params, api) {\r\n return {\r\n type: \'arc\',\r\n shape: {\r\n cx: api.getWidth() / 2,\r\n cy: api.getHeight() / 2,\r\n r: Math.min(api.getWidth(), api.getHeight()) / 2 * 0.6,\r\n startAngle: (180+angle) * Math.PI / 180,\r\n endAngle: (270+angle) * Math.PI / 180\r\n },\r\n style: {\r\n stroke: \"#0CD3DB\",\r\n fill: \"transparent\",\r\n lineWidth: 1.5\r\n },\r\n silent: true\r\n };\r\n },\r\n data: [0]\r\n }, {\r\n name: \"ring5\",\r\n type: \'custom\',\r\n coordinateSystem: \"none\",\r\n renderItem: function(params, api) {\r\n return {\r\n type: \'arc\',\r\n shape: {\r\n cx: api.getWidth() / 2,\r\n cy: api.getHeight() / 2,\r\n r: Math.min(api.getWidth(), api.getHeight()) / 2 * 0.65,\r\n startAngle: (270+-angle) * Math.PI / 180,\r\n endAngle: (40+-angle) * Math.PI / 180\r\n },\r\n style: {\r\n stroke: \"#0CD3DB\",\r\n fill: \"transparent\",\r\n lineWidth: 1.5\r\n },\r\n silent: true\r\n };\r\n },\r\n data: [0]\r\n }, {\r\n name: \"ring5\",\r\n type: \'custom\',\r\n coordinateSystem: \"none\",\r\n renderItem: function(params, api) {\r\n return {\r\n type: \'arc\',\r\n shape: {\r\n cx: api.getWidth() / 2,\r\n cy: api.getHeight() / 2,\r\n r: Math.min(api.getWidth(), api.getHeight()) / 2 * 0.65,\r\n startAngle: (90+-angle) * Math.PI / 180,\r\n endAngle: (220+-angle) * Math.PI / 180\r\n },\r\n style: {\r\n stroke: \"#0CD3DB\",\r\n fill: \"transparent\",\r\n lineWidth: 1.5\r\n },\r\n silent: true\r\n };\r\n },\r\n data: [0]\r\n }, {\r\n name: \"ring5\",\r\n type: \'custom\',\r\n coordinateSystem: \"none\",\r\n renderItem: function(params, api) {\r\n let x0 = api.getWidth() / 2;\r\n let y0 = api.getHeight() / 2;\r\n let r = Math.min(api.getWidth(), api.getHeight()) / 2 * 0.65;\r\n let point = getCirlPoint(x0, y0, r, (90+-angle))\r\n return {\r\n type: \'circle\',\r\n shape: {\r\n cx: point.x,\r\n cy: point.y,\r\n r: 4\r\n },\r\n style: {\r\n stroke: \"#0CD3DB\",//粉\r\n fill: \"#0CD3DB\"\r\n },\r\n silent: true\r\n };\r\n },\r\n data: [0]\r\n }, {\r\n name: \"ring5\", //绿点\r\n type: \'custom\',\r\n coordinateSystem: \"none\",\r\n renderItem: function(params, api) {\r\n let x0 = api.getWidth() / 2;\r\n let y0 = api.getHeight() / 2;\r\n let r = Math.min(api.getWidth(), api.getHeight()) / 2 * 0.65;\r\n let point = getCirlPoint(x0, y0, r, (270+-angle))\r\n return {\r\n type: \'circle\',\r\n shape: {\r\n cx: point.x,\r\n cy: point.y,\r\n r: 4\r\n },\r\n style: {\r\n stroke: \"#0CD3DB\", //绿\r\n fill: \"#0CD3DB\"\r\n },\r\n silent: true\r\n };\r\n },\r\n data: [0]\r\n }, {\r\n name: \'吃猪肉频率\',\r\n type: \'pie\',\r\n radius: [\'58%\', \'45%\'],\r\n silent: true,\r\n clockwise: true,\r\n startAngle: 90,\r\n z: 0,\r\n zlevel: 0,\r\n label: {\r\n normal: {\r\n position: \"center\",\r\n\r\n }\r\n },\r\n data: [{\r\n value: value,\r\n name: \"\",\r\n itemStyle: {\r\n normal: {\r\n color: { // 完成的圆环的颜色\r\n colorStops: [{\r\n offset: 0,\r\n color: \'#4FADFD\' // 0% 处的颜色\r\n }, {\r\n offset: 1,\r\n color: \'#28E8FA\' // 100% 处的颜色\r\n }]\r\n },\r\n }\r\n }\r\n },\r\n {\r\n value: 100-value,\r\n name: \"\",\r\n label: {\r\n normal: {\r\n show: false\r\n }\r\n },\r\n itemStyle: {\r\n normal: {\r\n color: \"#173164\"\r\n }\r\n }\r\n }\r\n ]\r\n },\r\n \r\n {\r\n name: \"\",\r\n type: \"gauge\",\r\n radius: \"58%\",\r\n center: [\'50%\', \'50%\'],\r\n startAngle: 0,\r\n endAngle: 359.9,\r\n splitNumber: 8,\r\n hoverAnimation: true,\r\n axisTick: {\r\n show: false\r\n },\r\n splitLine: {\r\n length: 60,\r\n lineStyle: {\r\n width: 5,\r\n color: \"#061740\"\r\n }\r\n },\r\n axisLabel: {\r\n show: false\r\n },\r\n pointer: {\r\n show: false\r\n },\r\n axisLine: {\r\n lineStyle: {\r\n opacity: 0\r\n }\r\n },\r\n detail: {\r\n show: false\r\n },\r\n data: [{\r\n value: 0,\r\n name: \"\"\r\n }]\r\n },\r\n \r\n ]\r\n};\r\n\r\n//获取圆上面某点的坐标(x0,y0表示坐标,r半径,angle角度)\r\nfunction getCirlPoint(x0, y0, r, angle) {\r\n let x1 = x0 + r * Math.cos(angle * Math.PI / 180)\r\n let y1 = y0 + r * Math.sin(angle * Math.PI / 180)\r\n return {\r\n x: x1,\r\n y: y1\r\n }\r\n}\r\n\r\nfunction draw(){\r\n angle = angle+3\r\n myChart.setOption(option, true)\r\n //window.requestAnimationFrame(draw);\r\n}\r\n\r\nsetInterval(function() {\r\n //用setInterval做动画感觉有问题\r\n draw()\r\n}, 100);\r\n', '/profile/upload/2025/01/01/file_1735736501425_20250101210141A014.png', NULL, NULL, NULL, '2025-01-01 21:01:32', NULL, '2025-01-01 21:01:41', 0); +INSERT INTO `scada_echart` VALUES (8, NULL, '仪表2', '仪表图', 'var myRate1 = 1000;\r\noption = {\r\n backgroundColor: \'#031845\',\r\n title: [{\r\n x: \"12%\",\r\n bottom: 100,\r\n text: \'累计办结\',\r\n textStyle: {\r\n fontWeight: \'normal\',\r\n fontSize: 30,\r\n color: \"#fff\"\r\n },\r\n }, {\r\n x: \"42%\",\r\n bottom: 100,\r\n text: \'累计受理数\',\r\n textStyle: {\r\n fontWeight: \'normal\',\r\n fontSize: 30,\r\n color: \"#fff\"\r\n },\r\n }, {\r\n x: \"75%\",\r\n bottom: 100,\r\n text: \'未处理\',\r\n textStyle: {\r\n fontWeight: \'normal\',\r\n fontSize: 30,\r\n color: \"#fff\"\r\n },\r\n }],\r\n tooltip: {\r\n show: true,\r\n\r\n\r\n },\r\n series: [{\r\n type: \'gauge\',\r\n center: [\'50%\', \'55%\'], // 默认全局居中 \r\n radius: \'50%\',\r\n splitNumber: 10, //刻度数量\r\n min: 0,\r\n max: 1000,\r\n startAngle: 200,\r\n endAngle: -20,\r\n clockwise: true,\r\n axisLine: {\r\n show: true,\r\n lineStyle: {\r\n width: 2,\r\n shadowBlur: 0,\r\n color: [\r\n [1, \'#03B7C9\']\r\n ]\r\n }\r\n },\r\n axisTick: {\r\n show: true,\r\n lineStyle: {\r\n color: \'#03B7C9\',\r\n width: 1\r\n },\r\n length: -15,\r\n splitNumber: 10\r\n },\r\n splitLine: {\r\n show: true,\r\n length: -20,\r\n lineStyle: {\r\n color: \'#03B7C9\',\r\n }\r\n },\r\n axisLabel: {\r\n distance: -20,\r\n textStyle: {\r\n color: \"#03B7C9\",\r\n fontSize: \"15\",\r\n fontWeight: \"bold\"\r\n }\r\n },\r\n pointer: { //仪表盘指针\r\n show: 0\r\n },\r\n detail: {\r\n show: false\r\n },\r\n data: [{\r\n name: \"\",\r\n value: myRate1\r\n }]\r\n }, {\r\n startAngle: 200,\r\n endAngle: -20,\r\n type: \'gauge\',\r\n center: [\'50%\', \'55%\'], // 默认全局居中 \r\n radius: \'45%\',\r\n min: 0,\r\n max: 1000,\r\n splitNumber: 0,\r\n axisLine: { // 坐标轴线 \r\n lineStyle: {\r\n color: [\r\n [0.66, \'#dddddd\'],\r\n [1, \'#dddddd\']\r\n ], // 属性lineStyle控制线条样式 \r\n width: 4\r\n }\r\n },\r\n\r\n\r\n axisLabel: { // 坐标轴小标记 \r\n textStyle: { // 属性lineStyle控制线条样式 \r\n fontWeight: \'bolder\',\r\n fontSize: 16,\r\n color: \'rgba(30,144,255,0)\',\r\n }\r\n },\r\n splitLine: { // 分隔线 \r\n length: 10, // 属性length控制线长 \r\n lineStyle: { // 属性lineStyle(详见lineStyle)控制线条样式 \r\n width: 0,\r\n color: \'#444\'\r\n }\r\n },\r\n pointer: { // 分隔线 指针 \r\n color: \'#666666\',\r\n width: 0,\r\n length: 230\r\n },\r\n detail: {\r\n show: false\r\n },\r\n\r\n }, {\r\n name: \'累计受理\',\r\n type: \'gauge\',\r\n startAngle: 200,\r\n endAngle: -20,\r\n radius: \'40%\',\r\n center: [\'50%\', \'55%\'], // 默认全局居中 \r\n\r\n min: 0,\r\n max: 1000,\r\n\r\n axisLine: {\r\n show: false,\r\n lineStyle: {\r\n width: 25,\r\n shadowBlur: 0,\r\n color: [\r\n [0.2, \'#00FAFC\'],\r\n [0.4, \'#3BD542\'],\r\n [0.6, \'#E3F424\'],\r\n [0.8, \'#7E48DA\'],\r\n [1, \'#E531A8\']\r\n ]\r\n }\r\n },\r\n axisTick: {\r\n show: false,\r\n\r\n },\r\n splitLine: {\r\n show: false,\r\n length: 20,\r\n\r\n },\r\n\r\n axisLabel: {\r\n show: false\r\n },\r\n pointer: {\r\n show: true,\r\n },\r\n detail: {\r\n show: true,\r\n offsetCenter: [0, \'40%\'],\r\n textStyle: {\r\n fontSize: 30\r\n }\r\n },\r\n itemStyle: {\r\n normal: {\r\n color: \"#03B7C9\",\r\n\r\n }\r\n },\r\n data: [{\r\n value: 436\r\n }]\r\n }, {\r\n type: \'gauge\',\r\n center: [\'20%\', \'55%\'], // 默认全局居中 \r\n radius: \'35%\',\r\n splitNumber: 10, //刻度数量\r\n min: 0,\r\n max: 1000,\r\n endAngle: 45,\r\n clockwise: true,\r\n axisLine: {\r\n show: true,\r\n lineStyle: {\r\n width: 2,\r\n shadowBlur: 0,\r\n color: [\r\n [1, \'#03B7C9\']\r\n ]\r\n }\r\n },\r\n axisTick: {\r\n show: true,\r\n lineStyle: {\r\n color: \'#03B7C9\',\r\n width: 1\r\n },\r\n length: -15,\r\n splitNumber: 10\r\n },\r\n splitLine: {\r\n show: true,\r\n length: -20,\r\n lineStyle: {\r\n color: \'#03B7C9\',\r\n }\r\n },\r\n axisLabel: {\r\n distance: -20,\r\n textStyle: {\r\n color: \"#03B7C9\",\r\n fontSize: \"15\",\r\n fontWeight: \"bold\"\r\n }\r\n },\r\n pointer: { //仪表盘指针\r\n show: 0\r\n },\r\n detail: {\r\n show: false\r\n },\r\n data: [{\r\n name: \"\",\r\n value: myRate1\r\n }]\r\n }, {\r\n type: \'gauge\',\r\n center: [\'20%\', \'55%\'], // 默认全局居中 \r\n radius: \'30%\',\r\n min: 0,\r\n max: 1000,\r\n endAngle: 45,\r\n splitNumber: 0,\r\n axisLine: { // 坐标轴线 \r\n lineStyle: {\r\n color: [\r\n [0.66, \'#dddddd\'],\r\n [1, \'#dddddd\']\r\n ], // 属性lineStyle控制线条样式 \r\n width: 4\r\n }\r\n },\r\n\r\n\r\n axisLabel: { // 坐标轴小标记 \r\n textStyle: { // 属性lineStyle控制线条样式 \r\n fontWeight: \'bolder\',\r\n fontSize: 16,\r\n color: \'rgba(30,144,255,0)\',\r\n }\r\n },\r\n splitLine: { // 分隔线 \r\n length: 10, // 属性length控制线长 \r\n lineStyle: { // 属性lineStyle(详见lineStyle)控制线条样式 \r\n width: 0,\r\n color: \'#444\'\r\n }\r\n },\r\n pointer: { // 分隔线 指针 \r\n color: \'#666666\',\r\n width: 0,\r\n length: 230\r\n },\r\n detail: {\r\n show: false\r\n },\r\n\r\n }, {\r\n name: \'累计办结\',\r\n type: \'gauge\',\r\n endAngle: 45,\r\n radius: \'25%\',\r\n center: [\'20%\', \'55%\'], // 默认全局居中 \r\n\r\n min: 0,\r\n max: 1000,\r\n\r\n axisLine: {\r\n show: false,\r\n lineStyle: {\r\n width: 25,\r\n shadowBlur: 0,\r\n color: [\r\n [0.2, \'#00FAFC\'],\r\n [0.4, \'#3BD542\'],\r\n [0.6, \'#E3F424\'],\r\n [0.8, \'#7E48DA\'],\r\n [1, \'#E531A8\']\r\n ]\r\n }\r\n },\r\n axisTick: {\r\n show: false,\r\n\r\n },\r\n splitLine: {\r\n show: false,\r\n length: 20,\r\n\r\n },\r\n\r\n axisLabel: {\r\n show: false\r\n },\r\n pointer: {\r\n show: true,\r\n },\r\n detail: {\r\n show: true,\r\n offsetCenter: [0, \'40%\'],\r\n textStyle: {\r\n fontSize: 30\r\n }\r\n },\r\n itemStyle: {\r\n normal: {\r\n color: \"#03B7C9\",\r\n\r\n }\r\n },\r\n data: [{\r\n value: 245\r\n }]\r\n }, {\r\n type: \'gauge\',\r\n center: [\'80%\', \'55%\'], // 默认全局居中 \r\n radius: \'35%\',\r\n splitNumber: 10, //刻度数量\r\n min: 0,\r\n max: 1000,\r\n startAngle: 140,\r\n endAngle: -45,\r\n clockwise: true,\r\n axisLine: {\r\n show: true,\r\n lineStyle: {\r\n width: 2,\r\n shadowBlur: 0,\r\n color: [\r\n [1, \'#03B7C9\']\r\n ]\r\n }\r\n },\r\n axisTick: {\r\n show: true,\r\n lineStyle: {\r\n color: \'#03B7C9\',\r\n width: 1\r\n },\r\n length: -15,\r\n splitNumber: 10\r\n },\r\n splitLine: {\r\n show: true,\r\n length: -20,\r\n lineStyle: {\r\n color: \'#03B7C9\',\r\n }\r\n },\r\n axisLabel: {\r\n distance: -20,\r\n textStyle: {\r\n color: \"#03B7C9\",\r\n fontSize: \"15\",\r\n fontWeight: \"bold\"\r\n }\r\n },\r\n pointer: { //仪表盘指针\r\n show: 0\r\n },\r\n detail: {\r\n show: false\r\n },\r\n data: [{\r\n name: \"\",\r\n value: myRate1\r\n }]\r\n }, {\r\n type: \'gauge\',\r\n center: [\'80%\', \'55%\'], // 默认全局居中 \r\n radius: \'30%\',\r\n min: 0,\r\n max: 1000,\r\n startAngle: 140,\r\n endAngle: -45,\r\n splitNumber: 0,\r\n axisLine: { // 坐标轴线 \r\n lineStyle: {\r\n color: [\r\n [0.66, \'#dddddd\'],\r\n [1, \'#dddddd\']\r\n ], // 属性lineStyle控制线条样式 \r\n width: 4\r\n }\r\n },\r\n\r\n\r\n axisLabel: { // 坐标轴小标记 \r\n textStyle: { // 属性lineStyle控制线条样式 \r\n fontWeight: \'bolder\',\r\n fontSize: 16,\r\n color: \'rgba(30,144,255,0)\',\r\n }\r\n },\r\n splitLine: { // 分隔线 \r\n length: 10, // 属性length控制线长 \r\n lineStyle: { // 属性lineStyle(详见lineStyle)控制线条样式 \r\n width: 0,\r\n color: \'#444\'\r\n }\r\n },\r\n pointer: { // 分隔线 指针 \r\n color: \'#666666\',\r\n width: 0,\r\n length: 230\r\n },\r\n detail: {\r\n show: false\r\n },\r\n\r\n }, {\r\n name: \'未处理\',\r\n type: \'gauge\',\r\n startAngle: 140,\r\n endAngle: -45,\r\n radius: \'25%\',\r\n center: [\'80%\', \'55%\'], // 默认全局居中 \r\n\r\n min: 0,\r\n max: 1000,\r\n\r\n axisLine: {\r\n show: false,\r\n lineStyle: {\r\n width: 25,\r\n shadowBlur: 0,\r\n color: [\r\n [0.2, \'#00FAFC\'],\r\n [0.4, \'#3BD542\'],\r\n [0.6, \'#E3F424\'],\r\n [0.8, \'#7E48DA\'],\r\n [1, \'#E531A8\']\r\n ]\r\n }\r\n },\r\n axisTick: {\r\n show: false,\r\n\r\n },\r\n splitLine: {\r\n show: false,\r\n length: 20,\r\n\r\n },\r\n\r\n axisLabel: {\r\n show: false\r\n },\r\n pointer: {\r\n show: true,\r\n },\r\n detail: {\r\n show: true,\r\n offsetCenter: [0, \'40%\'],\r\n textStyle: {\r\n fontSize: 30\r\n }\r\n },\r\n itemStyle: {\r\n normal: {\r\n color: \"#03B7C9\",\r\n\r\n }\r\n },\r\n data: [{\r\n value: 135\r\n }]\r\n }]\r\n};', '/profile/upload/2025/01/01/file_1735736552278_20250101210232A015.png', NULL, NULL, NULL, '2025-01-01 21:02:10', NULL, '2025-01-01 21:02:32', 0); + +-- ---------------------------- +-- Table structure for scada_gallery +-- ---------------------------- +DROP TABLE IF EXISTS `scada_gallery`; +CREATE TABLE `scada_gallery` ( + `id` bigint NOT NULL AUTO_INCREMENT COMMENT 'id唯一标识', + `file_name` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT NULL COMMENT '文件名称', + `category_name` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT NULL COMMENT '分类名称', + `resource_url` varchar(512) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT NULL COMMENT '资源请求路径', + `tenant_id` bigint NULL DEFAULT NULL COMMENT '租户id', + `tenant_name` varchar(30) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT NULL COMMENT '租户名称', + `create_by` varchar(50) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT NULL COMMENT '创建人', + `create_time` datetime NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `update_by` varchar(50) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT NULL COMMENT '更新人', + `update_time` datetime NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', + `del_flag` tinyint NULL DEFAULT 0 COMMENT '逻辑删除标识', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 3902 CHARACTER SET = utf8mb3 COLLATE = utf8mb3_general_ci COMMENT = '组态图库表' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of scada_gallery +-- ---------------------------- +INSERT INTO `scada_gallery` VALUES (1, '按钮', '按钮', '/profile/upload/按钮开关 (1).svg', NULL, NULL, NULL, '2023-07-01 14:00:43', 'admin', '2023-12-18 17:47:08', 0); +INSERT INTO `scada_gallery` VALUES (2, '按钮', '按钮', '/profile/avatar/按钮开关 (1).svg', NULL, NULL, NULL, '2023-07-01 14:00:43', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3, '按钮', '按钮', '/profile/avatar/按钮开关 (4).svg', NULL, NULL, NULL, '2023-07-01 14:00:44', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (4, '按钮', '按钮', '/profile/avatar/按钮开关 (2).svg', NULL, NULL, NULL, '2023-07-01 14:00:44', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (5, '按钮', '按钮', '/profile/avatar/按钮开关 (3).svg', NULL, NULL, NULL, '2023-07-01 14:00:44', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (6, '按钮', '按钮', '/profile/avatar/按钮开关 (6).svg', NULL, NULL, NULL, '2023-07-01 14:00:44', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (7, '按钮', '按钮', '/profile/avatar/按钮开关 (5).svg', NULL, NULL, NULL, '2023-07-01 14:00:44', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (8, '按钮', '按钮', '/profile/avatar/按钮开关 (7).svg', NULL, NULL, NULL, '2023-07-01 14:00:44', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (9, '按钮', '按钮', '/profile/avatar/按钮开关 (8).svg', NULL, NULL, NULL, '2023-07-01 14:00:44', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (10, '按钮', '按钮', '/profile/avatar/按钮开关 (9).svg', NULL, NULL, NULL, '2023-07-01 14:00:44', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (11, '按钮', '按钮', '/profile/avatar/按钮开关 (10).svg', NULL, NULL, NULL, '2023-07-01 14:00:44', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (12, '按钮', '按钮', '/profile/avatar/按钮开关 (11).svg', NULL, NULL, NULL, '2023-07-01 14:00:44', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (13, '按钮', '按钮', '/profile/avatar/按钮开关 (13).svg', NULL, NULL, NULL, '2023-07-01 14:00:44', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (14, '按钮', '按钮', '/profile/avatar/按钮开关 (12).svg', NULL, NULL, NULL, '2023-07-01 14:00:44', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (15, '按钮', '按钮', '/profile/avatar/按钮开关 (14).svg', NULL, NULL, NULL, '2023-07-01 14:00:45', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (16, '按钮', '按钮', '/profile/avatar/按钮开关 (15).svg', NULL, NULL, NULL, '2023-07-01 14:00:45', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (17, '按钮', '按钮', '/profile/avatar/按钮开关 (16).svg', NULL, NULL, NULL, '2023-07-01 14:00:45', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (18, '按钮', '按钮', '/profile/avatar/按钮开关 (17).svg', NULL, NULL, NULL, '2023-07-01 14:00:45', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (19, '按钮', '按钮', '/profile/avatar/按钮开关 (19).svg', NULL, NULL, NULL, '2023-07-01 14:00:45', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (20, '按钮', '按钮', '/profile/avatar/按钮开关 (18).svg', NULL, NULL, NULL, '2023-07-01 14:00:45', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (21, '按钮', '按钮', '/profile/avatar/按钮开关 (20).svg', NULL, NULL, NULL, '2023-07-01 14:00:45', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (22, '按钮', '按钮', '/profile/avatar/按钮开关 (22).svg', NULL, NULL, NULL, '2023-07-01 14:00:45', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (23, '按钮', '按钮', '/profile/avatar/按钮开关 (21).svg', NULL, NULL, NULL, '2023-07-01 14:00:45', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (24, '按钮', '按钮', '/profile/avatar/按钮开关 (23).svg', NULL, NULL, NULL, '2023-07-01 14:00:45', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (25, '按钮', '按钮', '/profile/avatar/按钮开关 (24).svg', NULL, NULL, NULL, '2023-07-01 14:00:45', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (26, '按钮', '按钮', '/profile/avatar/按钮开关 (25).svg', NULL, NULL, NULL, '2023-07-01 14:00:45', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (27, '按钮', '按钮', '/profile/avatar/按钮开关 (27).svg', NULL, NULL, NULL, '2023-07-01 14:00:46', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (28, '按钮', '按钮', '/profile/avatar/按钮开关 (26).svg', NULL, NULL, NULL, '2023-07-01 14:00:46', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (29, '按钮', '按钮', '/profile/avatar/按钮开关 (28).svg', NULL, NULL, NULL, '2023-07-01 14:00:46', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (30, '按钮', '按钮', '/profile/avatar/按钮开关 (29).svg', NULL, NULL, NULL, '2023-07-01 14:00:46', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (31, '按钮', '按钮', '/profile/avatar/按钮开关 (30).svg', NULL, NULL, NULL, '2023-07-01 14:00:46', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (32, '按钮', '按钮', '/profile/avatar/按钮开关 (31).svg', NULL, NULL, NULL, '2023-07-01 14:00:46', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (33, '按钮', '按钮', '/profile/avatar/按钮开关 (32).svg', NULL, NULL, NULL, '2023-07-01 14:00:46', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (34, '按钮', '按钮', '/profile/avatar/按钮开关 (33).svg', NULL, NULL, NULL, '2023-07-01 14:00:46', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (35, '按钮', '按钮', '/profile/avatar/按钮开关 (35).svg', NULL, NULL, NULL, '2023-07-01 14:00:46', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (36, '按钮', '按钮', '/profile/avatar/按钮开关 (37).svg', NULL, NULL, NULL, '2023-07-01 14:00:46', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (37, '按钮', '按钮', '/profile/avatar/按钮开关 (34).svg', NULL, NULL, NULL, '2023-07-01 14:00:46', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (38, '按钮', '按钮', '/profile/avatar/按钮开关 (36).svg', NULL, NULL, NULL, '2023-07-01 14:00:46', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (39, '按钮', '按钮', '/profile/avatar/按钮开关 (38).svg', NULL, NULL, NULL, '2023-07-01 14:00:46', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (40, '按钮', '按钮', '/profile/avatar/按钮开关 (41).svg', NULL, NULL, NULL, '2023-07-01 14:00:46', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (41, '按钮', '按钮', '/profile/avatar/按钮开关 (43).svg', NULL, NULL, NULL, '2023-07-01 14:00:46', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (42, '按钮', '按钮', '/profile/avatar/按钮开关 (39).svg', NULL, NULL, NULL, '2023-07-01 14:00:46', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (43, '按钮', '按钮', '/profile/avatar/按钮开关 (40).svg', NULL, NULL, NULL, '2023-07-01 14:00:46', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (44, '按钮', '按钮', '/profile/avatar/按钮开关 (42).svg', NULL, NULL, NULL, '2023-07-01 14:00:46', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (45, '按钮', '按钮', '/profile/avatar/按钮开关 (46).svg', NULL, NULL, NULL, '2023-07-01 14:00:47', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (46, '按钮', '按钮', '/profile/avatar/按钮开关 (45).svg', NULL, NULL, NULL, '2023-07-01 14:00:47', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (47, '按钮', '按钮', '/profile/avatar/按钮开关 (44).svg', NULL, NULL, NULL, '2023-07-01 14:00:47', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (48, '按钮', '按钮', '/profile/avatar/按钮开关 (49).svg', NULL, NULL, NULL, '2023-07-01 14:00:47', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (49, '按钮', '按钮', '/profile/avatar/按钮开关 (47).svg', NULL, NULL, NULL, '2023-07-01 14:00:47', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (50, '按钮', '按钮', '/profile/avatar/按钮开关 (48).svg', NULL, NULL, NULL, '2023-07-01 14:00:47', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (51, '按钮', '按钮', '/profile/avatar/按钮开关 (50).svg', NULL, NULL, NULL, '2023-07-01 14:00:47', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (52, '按钮', '按钮', '/profile/avatar/按钮开关 (51).svg', NULL, NULL, NULL, '2023-07-01 14:00:47', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (53, '按钮', '按钮', '/profile/avatar/按钮开关 (53).svg', NULL, NULL, NULL, '2023-07-01 14:00:47', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (54, '按钮', '按钮', '/profile/avatar/按钮开关 (55).svg', NULL, NULL, NULL, '2023-07-01 14:00:47', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (55, '按钮', '按钮', '/profile/avatar/按钮开关 (54).svg', NULL, NULL, NULL, '2023-07-01 14:00:47', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (56, '按钮', '按钮', '/profile/avatar/按钮开关 (52).svg', NULL, NULL, NULL, '2023-07-01 14:00:47', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (57, '按钮', '按钮', '/profile/avatar/按钮开关 (56).svg', NULL, NULL, NULL, '2023-07-01 14:00:48', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (58, '按钮', '按钮', '/profile/avatar/按钮开关 (57).svg', NULL, NULL, NULL, '2023-07-01 14:00:48', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (59, '传送带', '传送带', '/profile/avatar/传送带 (1).svg', NULL, NULL, NULL, '2023-07-01 14:06:59', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (60, '传送带', '传送带', '/profile/avatar/传送带 (2).svg', NULL, NULL, NULL, '2023-07-01 14:07:00', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (61, '传送带', '传送带', '/profile/avatar/传送带 (3).svg', NULL, NULL, NULL, '2023-07-01 14:07:00', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (62, '传送带', '传送带', '/profile/avatar/传送带 (4).svg', NULL, NULL, NULL, '2023-07-01 14:07:00', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (63, '传送带', '传送带', '/profile/avatar/传送带 (6).svg', NULL, NULL, NULL, '2023-07-01 14:07:00', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (64, '传送带', '传送带', '/profile/avatar/传送带 (5).svg', NULL, NULL, NULL, '2023-07-01 14:07:00', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (65, '传送带', '传送带', '/profile/avatar/传送带 (7).svg', NULL, NULL, NULL, '2023-07-01 14:07:00', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (66, '传送带', '传送带', '/profile/avatar/传送带 (9).svg', NULL, NULL, NULL, '2023-07-01 14:07:00', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (67, '传送带', '传送带', '/profile/avatar/传送带 (10).svg', NULL, NULL, NULL, '2023-07-01 14:07:00', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (68, '传送带', '传送带', '/profile/avatar/传送带 (8).svg', NULL, NULL, NULL, '2023-07-01 14:07:00', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (69, '传送带', '传送带', '/profile/avatar/传送带 (12).svg', NULL, NULL, NULL, '2023-07-01 14:07:00', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (70, '传送带', '传送带', '/profile/avatar/传送带 (11).svg', NULL, NULL, NULL, '2023-07-01 14:07:00', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (71, '传送带', '传送带', '/profile/avatar/传送带 (13).svg', NULL, NULL, NULL, '2023-07-01 14:07:00', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (72, '传送带', '传送带', '/profile/avatar/传送带 (14).svg', NULL, NULL, NULL, '2023-07-01 14:07:00', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (73, '传送带', '传送带', '/profile/avatar/传送带 (15).svg', NULL, NULL, NULL, '2023-07-01 14:07:00', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (74, '传送带', '传送带', '/profile/avatar/传送带 (17).svg', NULL, NULL, NULL, '2023-07-01 14:07:01', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (75, '传送带', '传送带', '/profile/avatar/传送带 (19).svg', NULL, NULL, NULL, '2023-07-01 14:07:01', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (76, '传送带', '传送带', '/profile/avatar/传送带 (18).svg', NULL, NULL, NULL, '2023-07-01 14:07:01', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (77, '传送带', '传送带', '/profile/avatar/传送带 (16).svg', NULL, NULL, NULL, '2023-07-01 14:07:01', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (78, '传送带', '传送带', '/profile/avatar/传送带 (20).svg', NULL, NULL, NULL, '2023-07-01 14:07:01', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (79, '传送带', '传送带', '/profile/avatar/传送带 (22).svg', NULL, NULL, NULL, '2023-07-01 14:07:01', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (80, '传送带', '传送带', '/profile/avatar/传送带 (21).svg', NULL, NULL, NULL, '2023-07-01 14:07:01', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (81, '传送带', '传送带', '/profile/avatar/传送带 (23).svg', NULL, NULL, NULL, '2023-07-01 14:07:01', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (82, '传送带', '传送带', '/profile/avatar/传送带 (28).svg', NULL, NULL, NULL, '2023-07-01 14:07:01', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (83, '传送带', '传送带', '/profile/avatar/传送带 (24).svg', NULL, NULL, NULL, '2023-07-01 14:07:01', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (84, '传送带', '传送带', '/profile/avatar/传送带 (27).svg', NULL, NULL, NULL, '2023-07-01 14:07:01', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (85, '传送带', '传送带', '/profile/avatar/传送带 (26).svg', NULL, NULL, NULL, '2023-07-01 14:07:02', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (86, '传送带', '传送带', '/profile/avatar/传送带 (30).svg', NULL, NULL, NULL, '2023-07-01 14:07:02', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (87, '传送带', '传送带', '/profile/avatar/传送带 (31).svg', NULL, NULL, NULL, '2023-07-01 14:07:02', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (88, '传送带', '传送带', '/profile/avatar/传送带 (29).svg', NULL, NULL, NULL, '2023-07-01 14:07:02', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (89, '传送带', '传送带', '/profile/avatar/传送带 (25).svg', NULL, NULL, NULL, '2023-07-01 14:07:02', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (90, '传送带', '传送带', '/profile/avatar/传送带 (34).svg', NULL, NULL, NULL, '2023-07-01 14:07:02', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (91, '传送带', '传送带', '/profile/avatar/传送带 (32).svg', NULL, NULL, NULL, '2023-07-01 14:07:02', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (92, '传送带', '传送带', '/profile/avatar/传送带 (33).svg', NULL, NULL, NULL, '2023-07-01 14:07:02', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (93, '传送带', '传送带', '/profile/avatar/传送带 (37).svg', NULL, NULL, NULL, '2023-07-01 14:07:02', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (94, '传送带', '传送带', '/profile/avatar/传送带 (36).svg', NULL, NULL, NULL, '2023-07-01 14:07:02', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (95, '传送带', '传送带', '/profile/avatar/传送带 (35).svg', NULL, NULL, NULL, '2023-07-01 14:07:02', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (96, '传送带', '传送带', '/profile/avatar/传送带 (38).svg', NULL, NULL, NULL, '2023-07-01 14:07:02', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (97, '传送带', '传送带', '/profile/avatar/传送带 (39).svg', NULL, NULL, NULL, '2023-07-01 14:07:02', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (98, '传送带', '传送带', '/profile/avatar/传送带 (40).svg', NULL, NULL, NULL, '2023-07-01 14:07:02', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (99, '传送带', '传送带', '/profile/avatar/传送带 (41).svg', NULL, NULL, NULL, '2023-07-01 14:07:02', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (100, '传送带', '传送带', '/profile/avatar/传送带 (43).svg', NULL, NULL, NULL, '2023-07-01 14:07:02', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (101, '传送带', '传送带', '/profile/avatar/传送带 (42).svg', NULL, NULL, NULL, '2023-07-01 14:07:02', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (102, '传送带', '传送带', '/profile/avatar/传送带 (44).svg', NULL, NULL, NULL, '2023-07-01 14:07:03', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (103, '传送带', '传送带', '/profile/avatar/传送带 (46).svg', NULL, NULL, NULL, '2023-07-01 14:07:03', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (104, '传送带', '传送带', '/profile/avatar/传送带 (47).svg', NULL, NULL, NULL, '2023-07-01 14:07:03', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (105, '传送带', '传送带', '/profile/avatar/传送带 (45).svg', NULL, NULL, NULL, '2023-07-01 14:07:03', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (106, '传送带', '传送带', '/profile/avatar/传送带 (48).svg', NULL, NULL, NULL, '2023-07-01 14:07:03', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (107, '传送带', '传送带', '/profile/avatar/传送带 (49).svg', NULL, NULL, NULL, '2023-07-01 14:07:03', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (108, '传送带', '传送带', '/profile/avatar/传送带 (50).svg', NULL, NULL, NULL, '2023-07-01 14:07:03', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (109, '传送带', '传送带', '/profile/avatar/传送带 (51).svg', NULL, NULL, NULL, '2023-07-01 14:07:03', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (110, '传送带', '传送带', '/profile/avatar/传送带 (52).svg', NULL, NULL, NULL, '2023-07-01 14:07:03', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (111, '传送带', '传送带', '/profile/avatar/传送带 (54).svg', NULL, NULL, NULL, '2023-07-01 14:07:03', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (112, '传送带', '传送带', '/profile/avatar/传送带 (55).svg', NULL, NULL, NULL, '2023-07-01 14:07:03', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (113, '传送带', '传送带', '/profile/avatar/传送带 (53).svg', NULL, NULL, NULL, '2023-07-01 14:07:03', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (114, '传送带', '传送带', '/profile/avatar/传送带 (57).svg', NULL, NULL, NULL, '2023-07-01 14:07:04', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (115, '传送带', '传送带', '/profile/avatar/传送带 (56).svg', NULL, NULL, NULL, '2023-07-01 14:07:04', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (116, '传感器', '传感器', '/profile/avatar/传感器 (1).svg', NULL, NULL, NULL, '2023-07-01 14:08:14', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (117, '传感器', '传感器', '/profile/avatar/传感器 (3).svg', NULL, NULL, NULL, '2023-07-01 14:08:14', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (118, '传感器', '传感器', '/profile/avatar/传感器 (2).svg', NULL, NULL, NULL, '2023-07-01 14:08:14', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (119, '传感器', '传感器', '/profile/avatar/传感器 (6).svg', NULL, NULL, NULL, '2023-07-01 14:08:14', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (120, '传感器', '传感器', '/profile/avatar/传感器 (5).svg', NULL, NULL, NULL, '2023-07-01 14:08:14', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (121, '传感器', '传感器', '/profile/avatar/传感器 (4).svg', NULL, NULL, NULL, '2023-07-01 14:08:14', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (122, '传感器', '传感器', '/profile/avatar/传感器 (7).svg', NULL, NULL, NULL, '2023-07-01 14:08:14', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (123, '传感器', '传感器', '/profile/avatar/传感器 (8).svg', NULL, NULL, NULL, '2023-07-01 14:08:15', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (124, '传感器', '传感器', '/profile/avatar/传感器 (9).svg', NULL, NULL, NULL, '2023-07-01 14:08:15', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (125, '传感器', '传感器', '/profile/avatar/传感器 (15).svg', NULL, NULL, NULL, '2023-07-01 14:08:15', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (126, '传感器', '传感器', '/profile/avatar/传感器 (16).svg', NULL, NULL, NULL, '2023-07-01 14:08:15', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (127, '传感器', '传感器', '/profile/avatar/传感器 (11).svg', NULL, NULL, NULL, '2023-07-01 14:08:15', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (128, '传感器', '传感器', '/profile/avatar/传感器 (10).svg', NULL, NULL, NULL, '2023-07-01 14:08:15', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (129, '传感器', '传感器', '/profile/avatar/传感器 (12).svg', NULL, NULL, NULL, '2023-07-01 14:08:15', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (130, '传感器', '传感器', '/profile/avatar/传感器 (13).svg', NULL, NULL, NULL, '2023-07-01 14:08:15', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (131, '传感器', '传感器', '/profile/avatar/传感器 (17).svg', NULL, NULL, NULL, '2023-07-01 14:08:15', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (132, '传感器', '传感器', '/profile/avatar/传感器 (18).svg', NULL, NULL, NULL, '2023-07-01 14:08:15', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (133, '传感器', '传感器', '/profile/avatar/传感器 (20).svg', NULL, NULL, NULL, '2023-07-01 14:08:15', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (134, '传感器', '传感器', '/profile/avatar/传感器 (14).svg', NULL, NULL, NULL, '2023-07-01 14:08:15', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (135, '传感器', '传感器', '/profile/avatar/传感器 (19).svg', NULL, NULL, NULL, '2023-07-01 14:08:15', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (136, '传感器', '传感器', '/profile/avatar/传感器 (21).svg', NULL, NULL, NULL, '2023-07-01 14:08:16', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (137, '传感器', '传感器', '/profile/avatar/传感器 (25).svg', NULL, NULL, NULL, '2023-07-01 14:08:16', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (138, '传感器', '传感器', '/profile/avatar/传感器 (23).svg', NULL, NULL, NULL, '2023-07-01 14:08:16', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (139, '传感器', '传感器', '/profile/avatar/传感器 (22).svg', NULL, NULL, NULL, '2023-07-01 14:08:16', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (140, '传感器', '传感器', '/profile/avatar/传感器 (24).svg', NULL, NULL, NULL, '2023-07-01 14:08:16', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (141, '传感器', '传感器', '/profile/avatar/传感器 (27).svg', NULL, NULL, NULL, '2023-07-01 14:08:16', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (142, '传感器', '传感器', '/profile/avatar/传感器 (26).svg', NULL, NULL, NULL, '2023-07-01 14:08:16', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (143, '传感器', '传感器', '/profile/avatar/传感器 (28).svg', NULL, NULL, NULL, '2023-07-01 14:08:16', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (144, '传感器', '传感器', '/profile/avatar/传感器 (31).svg', NULL, NULL, NULL, '2023-07-01 14:08:16', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (145, '传感器', '传感器', '/profile/avatar/传感器 (30).svg', NULL, NULL, NULL, '2023-07-01 14:08:16', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (146, '传感器', '传感器', '/profile/avatar/传感器 (29).svg', NULL, NULL, NULL, '2023-07-01 14:08:16', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (147, '传感器', '传感器', '/profile/avatar/传感器 (32).svg', NULL, NULL, NULL, '2023-07-01 14:08:16', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (148, '传感器', '传感器', '/profile/avatar/传感器 (33).svg', NULL, NULL, NULL, '2023-07-01 14:08:16', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (149, '传感器', '传感器', '/profile/avatar/传感器 (34).svg', NULL, NULL, NULL, '2023-07-01 14:08:16', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (150, '传感器', '传感器', '/profile/avatar/传感器 (38).svg', NULL, NULL, NULL, '2023-07-01 14:08:17', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (151, '传感器', '传感器', '/profile/avatar/传感器 (36).svg', NULL, NULL, NULL, '2023-07-01 14:08:17', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (152, '传感器', '传感器', '/profile/avatar/传感器 (35).svg', NULL, NULL, NULL, '2023-07-01 14:08:17', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (153, '传感器', '传感器', '/profile/avatar/传感器 (37).svg', NULL, NULL, NULL, '2023-07-01 14:08:17', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (154, '传感器', '传感器', '/profile/avatar/传感器 (39).svg', NULL, NULL, NULL, '2023-07-01 14:08:17', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (155, '传感器', '传感器', '/profile/avatar/传感器 (40).svg', NULL, NULL, NULL, '2023-07-01 14:08:17', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (156, '传感器', '传感器', '/profile/avatar/传感器 (41).svg', NULL, NULL, NULL, '2023-07-01 14:08:17', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (157, '传感器', '传感器', '/profile/avatar/传感器 (42).svg', NULL, NULL, NULL, '2023-07-01 14:08:17', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (158, '传感器', '传感器', '/profile/avatar/传感器 (43).svg', NULL, NULL, NULL, '2023-07-01 14:08:17', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (159, '传感器', '传感器', '/profile/avatar/传感器 (44).svg', NULL, NULL, NULL, '2023-07-01 14:08:17', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (160, '传感器', '传感器', '/profile/avatar/传感器 (45).svg', NULL, NULL, NULL, '2023-07-01 14:08:17', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (161, '传感器', '传感器', '/profile/avatar/传感器 (46).svg', NULL, NULL, NULL, '2023-07-01 14:08:17', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (162, '传感器', '传感器', '/profile/avatar/传感器 (47).svg', NULL, NULL, NULL, '2023-07-01 14:08:17', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (163, '传感器', '传感器', '/profile/avatar/传感器 (49).svg', NULL, NULL, NULL, '2023-07-01 14:08:17', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (164, '传感器', '传感器', '/profile/avatar/传感器 (50).svg', NULL, NULL, NULL, '2023-07-01 14:08:18', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (165, '传感器', '传感器', '/profile/avatar/传感器 (48).svg', NULL, NULL, NULL, '2023-07-01 14:08:18', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (166, '传感器', '传感器', '/profile/avatar/传感器 (51).svg', NULL, NULL, NULL, '2023-07-01 14:08:18', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (167, '传感器', '传感器', '/profile/avatar/传感器 (52).svg', NULL, NULL, NULL, '2023-07-01 14:08:18', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (168, '传感器', '传感器', '/profile/avatar/传感器 (53).svg', NULL, NULL, NULL, '2023-07-01 14:08:18', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (169, '采矿 (1).svg', '采矿', '/profile/avatar/采矿 (1).svg', NULL, NULL, NULL, '2023-07-01 14:09:42', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (170, '采矿 (4).svg', '采矿', '/profile/avatar/采矿 (4).svg', NULL, NULL, NULL, '2023-07-01 14:09:42', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (171, '采矿 (7).svg', '采矿', '/profile/avatar/采矿 (7).svg', NULL, NULL, NULL, '2023-07-01 14:09:42', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (172, '采矿 (3).svg', '采矿', '/profile/avatar/采矿 (3).svg', NULL, NULL, NULL, '2023-07-01 14:09:42', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (173, '采矿 (2).svg', '采矿', '/profile/avatar/采矿 (2).svg', NULL, NULL, NULL, '2023-07-01 14:09:42', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (174, '采矿 (5).svg', '采矿', '/profile/avatar/采矿 (5).svg', NULL, NULL, NULL, '2023-07-01 14:09:42', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (175, '采矿 (6).svg', '采矿', '/profile/avatar/采矿 (6).svg', NULL, NULL, NULL, '2023-07-01 14:09:42', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (176, '采矿 (8).svg', '采矿', '/profile/avatar/采矿 (8).svg', NULL, NULL, NULL, '2023-07-01 14:09:42', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (177, '采矿', '采矿', '/profile/avatar/采矿 (11).svg', NULL, NULL, NULL, '2023-07-01 14:09:42', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (178, '采矿', '采矿', '/profile/avatar/采矿 (10).svg', NULL, NULL, NULL, '2023-07-01 14:09:42', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (179, '采矿 (9).svg', '采矿', '/profile/avatar/采矿 (9).svg', NULL, NULL, NULL, '2023-07-01 14:09:42', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (180, '采矿', '采矿', '/profile/avatar/采矿 (13).svg', NULL, NULL, NULL, '2023-07-01 14:09:42', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (181, '采矿', '采矿', '/profile/avatar/采矿 (12).svg', NULL, NULL, NULL, '2023-07-01 14:09:42', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (182, '采矿', '采矿', '/profile/avatar/采矿 (14).svg', NULL, NULL, NULL, '2023-07-01 14:09:43', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (183, '采矿', '采矿', '/profile/avatar/采矿 (15).svg', NULL, NULL, NULL, '2023-07-01 14:09:43', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (184, '采矿', '采矿', '/profile/avatar/采矿 (17).svg', NULL, NULL, NULL, '2023-07-01 14:09:43', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (185, '采矿', '采矿', '/profile/avatar/采矿 (16).svg', NULL, NULL, NULL, '2023-07-01 14:09:43', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (186, '采矿', '采矿', '/profile/avatar/采矿 (18).svg', NULL, NULL, NULL, '2023-07-01 14:09:43', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (187, '采矿', '采矿', '/profile/avatar/采矿 (19).svg', NULL, NULL, NULL, '2023-07-01 14:09:43', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (188, '采矿', '采矿', '/profile/avatar/采矿 (22).svg', NULL, NULL, NULL, '2023-07-01 14:09:43', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (189, '采矿', '采矿', '/profile/avatar/采矿 (21).svg', NULL, NULL, NULL, '2023-07-01 14:09:43', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (190, '采矿', '采矿', '/profile/avatar/采矿 (23).svg', NULL, NULL, NULL, '2023-07-01 14:09:43', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (191, '采矿', '采矿', '/profile/avatar/采矿 (26).svg', NULL, NULL, NULL, '2023-07-01 14:09:43', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (192, '采矿', '采矿', '/profile/avatar/采矿 (24).svg', NULL, NULL, NULL, '2023-07-01 14:09:43', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (193, '采矿', '采矿', '/profile/avatar/采矿 (20).svg', NULL, NULL, NULL, '2023-07-01 14:09:43', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (194, '采矿', '采矿', '/profile/avatar/采矿 (25).svg', NULL, NULL, NULL, '2023-07-01 14:09:43', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (195, '采矿', '采矿', '/profile/avatar/采矿 (27).svg', NULL, NULL, NULL, '2023-07-01 14:09:44', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (196, '采矿', '采矿', '/profile/avatar/采矿 (28).svg', NULL, NULL, NULL, '2023-07-01 14:09:44', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (197, '采矿', '采矿', '/profile/avatar/采矿 (29).svg', NULL, NULL, NULL, '2023-07-01 14:09:44', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (198, '采矿', '采矿', '/profile/avatar/采矿 (31).svg', NULL, NULL, NULL, '2023-07-01 14:09:44', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (199, '采矿', '采矿', '/profile/avatar/采矿 (30).svg', NULL, NULL, NULL, '2023-07-01 14:09:44', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (200, '采矿', '采矿', '/profile/avatar/采矿 (32).svg', NULL, NULL, NULL, '2023-07-01 14:09:44', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (201, '采矿', '采矿', '/profile/avatar/采矿 (33).svg', NULL, NULL, NULL, '2023-07-01 14:09:44', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (202, '采矿', '采矿', '/profile/avatar/采矿 (35).svg', NULL, NULL, NULL, '2023-07-01 14:09:44', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (203, '采矿', '采矿', '/profile/avatar/采矿 (34).svg', NULL, NULL, NULL, '2023-07-01 14:09:44', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (204, '采矿', '采矿', '/profile/avatar/采矿 (36).svg', NULL, NULL, NULL, '2023-07-01 14:09:44', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (205, '采矿', '采矿', '/profile/avatar/采矿 (38).svg', NULL, NULL, NULL, '2023-07-01 14:09:44', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (206, '采矿', '采矿', '/profile/avatar/采矿 (37).svg', NULL, NULL, NULL, '2023-07-01 14:09:44', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (207, '采矿', '采矿', '/profile/avatar/采矿 (39).svg', NULL, NULL, NULL, '2023-07-01 14:09:44', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (208, '采矿', '采矿', '/profile/avatar/采矿 (41).svg', NULL, NULL, NULL, '2023-07-01 14:09:44', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (209, '采矿', '采矿', '/profile/avatar/采矿 (40).svg', NULL, NULL, NULL, '2023-07-01 14:09:44', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (210, '采矿', '采矿', '/profile/avatar/采矿 (44).svg', NULL, NULL, NULL, '2023-07-01 14:09:44', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (211, '采矿', '采矿', '/profile/avatar/采矿 (42).svg', NULL, NULL, NULL, '2023-07-01 14:09:44', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (212, '采矿', '采矿', '/profile/avatar/采矿 (46).svg', NULL, NULL, NULL, '2023-07-01 14:09:45', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (213, '采矿', '采矿', '/profile/avatar/采矿 (43).svg', NULL, NULL, NULL, '2023-07-01 14:09:45', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (214, '采矿', '采矿', '/profile/avatar/采矿 (45).svg', NULL, NULL, NULL, '2023-07-01 14:09:45', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (215, '采矿', '采矿', '/profile/avatar/采矿 (48).svg', NULL, NULL, NULL, '2023-07-01 14:09:45', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (216, '采矿', '采矿', '/profile/avatar/采矿 (47).svg', NULL, NULL, NULL, '2023-07-01 14:09:45', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (217, '采矿', '采矿', '/profile/avatar/采矿 (49).svg', NULL, NULL, NULL, '2023-07-01 14:09:45', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (218, '采矿', '采矿', '/profile/avatar/采矿 (50).svg', NULL, NULL, NULL, '2023-07-01 14:09:45', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (219, '采矿', '采矿', '/profile/avatar/采矿 (51).svg', NULL, NULL, NULL, '2023-07-01 14:09:45', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (220, '采矿', '采矿', '/profile/avatar/采矿 (52).svg', NULL, NULL, NULL, '2023-07-01 14:09:45', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (221, '采矿', '采矿', '/profile/avatar/采矿 (54).svg', NULL, NULL, NULL, '2023-07-01 14:09:45', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (222, '采矿', '采矿', '/profile/avatar/采矿 (56).svg', NULL, NULL, NULL, '2023-07-01 14:09:45', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (223, '采矿', '采矿', '/profile/avatar/采矿 (53).svg', NULL, NULL, NULL, '2023-07-01 14:09:45', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (224, '采矿', '采矿', '/profile/avatar/采矿 (55).svg', NULL, NULL, NULL, '2023-07-01 14:09:46', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (225, '采矿', '采矿', '/profile/avatar/采矿 (58).svg', NULL, NULL, NULL, '2023-07-01 14:09:46', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (226, '采矿', '采矿', '/profile/avatar/采矿 (59).svg', NULL, NULL, NULL, '2023-07-01 14:09:46', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (227, '采矿', '采矿', '/profile/avatar/采矿 (57).svg', NULL, NULL, NULL, '2023-07-01 14:09:46', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (228, '采矿', '采矿', '/profile/avatar/采矿 (60).svg', NULL, NULL, NULL, '2023-07-01 14:09:46', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (229, '采矿', '采矿', '/profile/avatar/采矿 (61).svg', NULL, NULL, NULL, '2023-07-01 14:09:46', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (230, '采矿', '采矿', '/profile/avatar/采矿 (62).svg', NULL, NULL, NULL, '2023-07-01 14:09:46', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (231, '泵 (1).svg', '泵', '/profile/avatar/泵 (1).svg', NULL, NULL, NULL, '2023-07-01 14:10:29', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (232, '泵 (2).svg', '泵', '/profile/avatar/泵 (2).svg', NULL, NULL, NULL, '2023-07-01 14:10:30', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (233, '泵 (3).svg', '泵', '/profile/avatar/泵 (3).svg', NULL, NULL, NULL, '2023-07-01 14:10:30', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (234, '泵 (4).svg', '泵', '/profile/avatar/泵 (4).svg', NULL, NULL, NULL, '2023-07-01 14:10:30', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (235, '泵 (6).svg', '泵', '/profile/avatar/泵 (6).svg', NULL, NULL, NULL, '2023-07-01 14:10:30', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (236, '泵 (5).svg', '泵', '/profile/avatar/泵 (5).svg', NULL, NULL, NULL, '2023-07-01 14:10:30', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (237, '泵 (7).svg', '泵', '/profile/avatar/泵 (7).svg', NULL, NULL, NULL, '2023-07-01 14:10:30', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (238, '泵 (8).svg', '泵', '/profile/avatar/泵 (8).svg', NULL, NULL, NULL, '2023-07-01 14:10:30', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (239, '泵 (9).svg', '泵', '/profile/avatar/泵 (9).svg', NULL, NULL, NULL, '2023-07-01 14:10:30', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (240, '泵 (10).svg', '泵', '/profile/avatar/泵 (10).svg', NULL, NULL, NULL, '2023-07-01 14:10:30', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (241, '泵 (11).svg', '泵', '/profile/avatar/泵 (11).svg', NULL, NULL, NULL, '2023-07-01 14:10:30', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (242, '泵 (12).svg', '泵', '/profile/avatar/泵 (12).svg', NULL, NULL, NULL, '2023-07-01 14:10:30', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (243, '泵 (13).svg', '泵', '/profile/avatar/泵 (13).svg', NULL, NULL, NULL, '2023-07-01 14:10:30', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (244, '泵 (15).svg', '泵', '/profile/avatar/泵 (15).svg', NULL, NULL, NULL, '2023-07-01 14:10:30', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (245, '泵 (14).svg', '泵', '/profile/avatar/泵 (14).svg', NULL, NULL, NULL, '2023-07-01 14:10:30', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (246, '泵 (16).svg', '泵', '/profile/avatar/泵 (16).svg', NULL, NULL, NULL, '2023-07-01 14:10:30', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (247, '泵 (18).svg', '泵', '/profile/avatar/泵 (18).svg', NULL, NULL, NULL, '2023-07-01 14:10:30', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (248, '泵 (19).svg', '泵', '/profile/avatar/泵 (19).svg', NULL, NULL, NULL, '2023-07-01 14:10:30', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (249, '泵 (17).svg', '泵', '/profile/avatar/泵 (17).svg', NULL, NULL, NULL, '2023-07-01 14:10:30', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (250, '泵 (20).svg', '泵', '/profile/avatar/泵 (20).svg', NULL, NULL, NULL, '2023-07-01 14:10:31', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (251, '泵 (26).svg', '泵', '/profile/avatar/泵 (26).svg', NULL, NULL, NULL, '2023-07-01 14:10:31', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (252, '泵 (21).svg', '泵', '/profile/avatar/泵 (21).svg', NULL, NULL, NULL, '2023-07-01 14:10:31', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (253, '泵 (22).svg', '泵', '/profile/avatar/泵 (22).svg', NULL, NULL, NULL, '2023-07-01 14:10:31', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (254, '泵 (24).svg', '泵', '/profile/avatar/泵 (24).svg', NULL, NULL, NULL, '2023-07-01 14:10:31', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (255, '泵 (25).svg', '泵', '/profile/avatar/泵 (25).svg', NULL, NULL, NULL, '2023-07-01 14:10:31', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (256, '泵 (28).svg', '泵', '/profile/avatar/泵 (28).svg', NULL, NULL, NULL, '2023-07-01 14:10:31', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (257, '泵 (23).svg', '泵', '/profile/avatar/泵 (23).svg', NULL, NULL, NULL, '2023-07-01 14:10:31', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (258, '泵 (31).svg', '泵', '/profile/avatar/泵 (31).svg', NULL, NULL, NULL, '2023-07-01 14:10:31', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (259, '泵 (30).svg', '泵', '/profile/avatar/泵 (30).svg', NULL, NULL, NULL, '2023-07-01 14:10:31', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (260, '泵 (27).svg', '泵', '/profile/avatar/泵 (27).svg', NULL, NULL, NULL, '2023-07-01 14:10:31', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (261, '泵 (29).svg', '泵', '/profile/avatar/泵 (29).svg', NULL, NULL, NULL, '2023-07-01 14:10:31', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (262, '泵 (32).svg', '泵', '/profile/avatar/泵 (32).svg', NULL, NULL, NULL, '2023-07-01 14:10:32', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (263, '泵 (34).svg', '泵', '/profile/avatar/泵 (34).svg', NULL, NULL, NULL, '2023-07-01 14:10:32', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (264, '泵 (33).svg', '泵', '/profile/avatar/泵 (33).svg', NULL, NULL, NULL, '2023-07-01 14:10:32', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (265, '泵 (37).svg', '泵', '/profile/avatar/泵 (37).svg', NULL, NULL, NULL, '2023-07-01 14:10:32', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (266, '泵 (35).svg', '泵', '/profile/avatar/泵 (35).svg', NULL, NULL, NULL, '2023-07-01 14:10:32', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (267, '泵 (36).svg', '泵', '/profile/avatar/泵 (36).svg', NULL, NULL, NULL, '2023-07-01 14:10:32', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (268, '泵 (38).svg', '泵', '/profile/avatar/泵 (38).svg', NULL, NULL, NULL, '2023-07-01 14:10:32', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (269, '泵 (39).svg', '泵', '/profile/avatar/泵 (39).svg', NULL, NULL, NULL, '2023-07-01 14:10:32', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (270, '泵 (41).svg', '泵', '/profile/avatar/泵 (41).svg', NULL, NULL, NULL, '2023-07-01 14:10:32', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (271, '泵 (42).svg', '泵', '/profile/avatar/泵 (42).svg', NULL, NULL, NULL, '2023-07-01 14:10:32', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (272, '泵 (43).svg', '泵', '/profile/avatar/泵 (43).svg', NULL, NULL, NULL, '2023-07-01 14:10:32', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (273, '泵 (40).svg', '泵', '/profile/avatar/泵 (40).svg', NULL, NULL, NULL, '2023-07-01 14:10:32', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (274, '泵 (44).svg', '泵', '/profile/avatar/泵 (44).svg', NULL, NULL, NULL, '2023-07-01 14:10:32', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (275, '泵 (45).svg', '泵', '/profile/avatar/泵 (45).svg', NULL, NULL, NULL, '2023-07-01 14:10:32', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (276, '泵 (49).svg', '泵', '/profile/avatar/泵 (49).svg', NULL, NULL, NULL, '2023-07-01 14:10:33', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (277, '泵 (48).svg', '泵', '/profile/avatar/泵 (48).svg', NULL, NULL, NULL, '2023-07-01 14:10:33', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (278, '泵 (47).svg', '泵', '/profile/avatar/泵 (47).svg', NULL, NULL, NULL, '2023-07-01 14:10:33', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (279, '泵 (46).svg', '泵', '/profile/avatar/泵 (46).svg', NULL, NULL, NULL, '2023-07-01 14:10:33', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (280, '泵 (50).svg', '泵', '/profile/avatar/泵 (50).svg', NULL, NULL, NULL, '2023-07-01 14:10:33', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (281, '泵 (51).svg', '泵', '/profile/avatar/泵 (51).svg', NULL, NULL, NULL, '2023-07-01 14:10:33', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (282, '泵 (52).svg', '泵', '/profile/avatar/泵 (52).svg', NULL, NULL, NULL, '2023-07-01 14:10:33', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (283, '泵 (54).svg', '泵', '/profile/avatar/泵 (54).svg', NULL, NULL, NULL, '2023-07-01 14:10:33', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (284, '泵 (55).svg', '泵', '/profile/avatar/泵 (55).svg', NULL, NULL, NULL, '2023-07-01 14:10:33', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (285, '泵 (53).svg', '泵', '/profile/avatar/泵 (53).svg', NULL, NULL, NULL, '2023-07-01 14:10:33', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (286, '泵 (57).svg', '泵', '/profile/avatar/泵 (57).svg', NULL, NULL, NULL, '2023-07-01 14:10:33', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (287, '泵 (58).svg', '泵', '/profile/avatar/泵 (58).svg', NULL, NULL, NULL, '2023-07-01 14:10:33', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (288, '泵 (56).svg', '泵', '/profile/avatar/泵 (56).svg', NULL, NULL, NULL, '2023-07-01 14:10:33', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (289, '泵 (59).svg', '泵', '/profile/avatar/泵 (59).svg', NULL, NULL, NULL, '2023-07-01 14:10:34', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (290, '泵 (60).svg', '泵', '/profile/avatar/泵 (60).svg', NULL, NULL, NULL, '2023-07-01 14:10:34', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (291, '泵 (61).svg', '泵', '/profile/avatar/泵 (61).svg', NULL, NULL, NULL, '2023-07-01 14:10:34', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (292, '泵 (62).svg', '泵', '/profile/avatar/泵 (62).svg', NULL, NULL, NULL, '2023-07-01 14:10:34', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (293, '泵 (63).svg', '泵', '/profile/avatar/泵 (63).svg', NULL, NULL, NULL, '2023-07-01 14:10:34', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (294, '泵 (64).svg', '泵', '/profile/avatar/泵 (64).svg', NULL, NULL, NULL, '2023-07-01 14:10:34', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (295, '泵 (66).svg', '泵', '/profile/avatar/泵 (66).svg', NULL, NULL, NULL, '2023-07-01 14:10:34', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (296, '泵 (68).svg', '泵', '/profile/avatar/泵 (68).svg', NULL, NULL, NULL, '2023-07-01 14:10:34', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (297, '泵 (65).svg', '泵', '/profile/avatar/泵 (65).svg', NULL, NULL, NULL, '2023-07-01 14:10:34', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (298, '泵 (67).svg', '泵', '/profile/avatar/泵 (67).svg', NULL, NULL, NULL, '2023-07-01 14:10:34', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (299, '泵 (69).svg', '泵', '/profile/avatar/泵 (69).svg', NULL, NULL, NULL, '2023-07-01 14:10:34', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (300, '泵 (70).svg', '泵', '/profile/avatar/泵 (70).svg', NULL, NULL, NULL, '2023-07-01 14:10:34', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (301, '泵 (71).svg', '泵', '/profile/avatar/泵 (71).svg', NULL, NULL, NULL, '2023-07-01 14:10:34', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (302, '泵 (72).svg', '泵', '/profile/avatar/泵 (72).svg', NULL, NULL, NULL, '2023-07-01 14:10:34', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (303, '泵 (73).svg', '泵', '/profile/avatar/泵 (73).svg', NULL, NULL, NULL, '2023-07-01 14:10:34', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (304, '泵 (76).svg', '泵', '/profile/avatar/泵 (76).svg', NULL, NULL, NULL, '2023-07-01 14:10:35', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (305, '泵 (74).svg', '泵', '/profile/avatar/泵 (74).svg', NULL, NULL, NULL, '2023-07-01 14:10:35', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (306, '泵 (75).svg', '泵', '/profile/avatar/泵 (75).svg', NULL, NULL, NULL, '2023-07-01 14:10:35', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (307, '泵 (78).svg', '泵', '/profile/avatar/泵 (78).svg', NULL, NULL, NULL, '2023-07-01 14:10:35', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (308, '泵 (77).svg', '泵', '/profile/avatar/泵 (77).svg', NULL, NULL, NULL, '2023-07-01 14:10:35', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (309, '泵 (79).svg', '泵', '/profile/avatar/泵 (79).svg', NULL, NULL, NULL, '2023-07-01 14:10:35', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (310, '泵 (80).svg', '泵', '/profile/avatar/泵 (80).svg', NULL, NULL, NULL, '2023-07-01 14:10:35', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (311, '泵 (81).svg', '泵', '/profile/avatar/泵 (81).svg', NULL, NULL, NULL, '2023-07-01 14:10:35', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (312, '泵 (82).svg', '泵', '/profile/avatar/泵 (82).svg', NULL, NULL, NULL, '2023-07-01 14:10:35', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (313, '泵 (85).svg', '泵', '/profile/avatar/泵 (85).svg', NULL, NULL, NULL, '2023-07-01 14:10:35', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (314, '泵 (83).svg', '泵', '/profile/avatar/泵 (83).svg', NULL, NULL, NULL, '2023-07-01 14:10:35', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (315, '泵 (84).svg', '泵', '/profile/avatar/泵 (84).svg', NULL, NULL, NULL, '2023-07-01 14:10:35', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (316, '泵 (86).svg', '泵', '/profile/avatar/泵 (86).svg', NULL, NULL, NULL, '2023-07-01 14:10:36', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (317, '泵 (88).svg', '泵', '/profile/avatar/泵 (88).svg', NULL, NULL, NULL, '2023-07-01 14:10:36', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (318, '泵 (87).svg', '泵', '/profile/avatar/泵 (87).svg', NULL, NULL, NULL, '2023-07-01 14:10:36', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (319, '泵 (92).svg', '泵', '/profile/avatar/泵 (92).svg', NULL, NULL, NULL, '2023-07-01 14:10:36', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (320, '泵 (89).svg', '泵', '/profile/avatar/泵 (89).svg', NULL, NULL, NULL, '2023-07-01 14:10:36', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (321, '泵 (90).svg', '泵', '/profile/avatar/泵 (90).svg', NULL, NULL, NULL, '2023-07-01 14:10:36', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (322, '泵 (91).svg', '泵', '/profile/avatar/泵 (91).svg', NULL, NULL, NULL, '2023-07-01 14:10:36', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (323, '泵 (93).svg', '泵', '/profile/avatar/泵 (93).svg', NULL, NULL, NULL, '2023-07-01 14:10:36', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (324, '泵 (94).svg', '泵', '/profile/avatar/泵 (94).svg', NULL, NULL, NULL, '2023-07-01 14:10:36', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (325, '泵 (95).svg', '泵', '/profile/avatar/泵 (95).svg', NULL, NULL, NULL, '2023-07-01 14:10:36', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (326, '泵 (96).svg', '泵', '/profile/avatar/泵 (96).svg', NULL, NULL, NULL, '2023-07-01 14:10:36', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (327, 'HVAC暖通空调', 'HVAC暖通空调', '/profile/avatar/HVAC (1).svg', NULL, NULL, NULL, '2023-07-01 14:12:22', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (328, 'HVAC暖通空调', 'HVAC暖通空调', '/profile/avatar/HVAC (4).svg', NULL, NULL, NULL, '2023-07-01 14:12:22', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (329, 'HVAC暖通空调', 'HVAC暖通空调', '/profile/avatar/HVAC (5).svg', NULL, NULL, NULL, '2023-07-01 14:12:22', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (330, 'HVAC暖通空调', 'HVAC暖通空调', '/profile/avatar/HVAC (2).svg', NULL, NULL, NULL, '2023-07-01 14:12:22', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (331, 'HVAC暖通空调', 'HVAC暖通空调', '/profile/avatar/HVAC (6).svg', NULL, NULL, NULL, '2023-07-01 14:12:22', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (332, 'HVAC暖通空调', 'HVAC暖通空调', '/profile/avatar/HVAC (3).svg', NULL, NULL, NULL, '2023-07-01 14:12:22', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (333, 'HVAC暖通空调', 'HVAC暖通空调', '/profile/avatar/HVAC (7).svg', NULL, NULL, NULL, '2023-07-01 14:12:22', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (334, 'HVAC暖通空调', 'HVAC暖通空调', '/profile/avatar/HVAC (8).svg', NULL, NULL, NULL, '2023-07-01 14:12:22', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (335, 'HVAC暖通空调', 'HVAC暖通空调', '/profile/avatar/HVAC (10).svg', NULL, NULL, NULL, '2023-07-01 14:12:22', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (336, 'HVAC暖通空调', 'HVAC暖通空调', '/profile/avatar/HVAC (9).svg', NULL, NULL, NULL, '2023-07-01 14:12:22', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (337, 'HVAC暖通空调', 'HVAC暖通空调', '/profile/avatar/HVAC (13).svg', NULL, NULL, NULL, '2023-07-01 14:12:22', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (338, 'HVAC暖通空调', 'HVAC暖通空调', '/profile/avatar/HVAC (11).svg', NULL, NULL, NULL, '2023-07-01 14:12:22', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (339, 'HVAC暖通空调', 'HVAC暖通空调', '/profile/avatar/HVAC (12).svg', NULL, NULL, NULL, '2023-07-01 14:12:22', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (340, 'HVAC暖通空调', 'HVAC暖通空调', '/profile/avatar/HVAC (14).svg', NULL, NULL, NULL, '2023-07-01 14:12:23', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (341, 'HVAC暖通空调', 'HVAC暖通空调', '/profile/avatar/HVAC (15).svg', NULL, NULL, NULL, '2023-07-01 14:12:23', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (342, 'HVAC暖通空调', 'HVAC暖通空调', '/profile/avatar/HVAC (16).svg', NULL, NULL, NULL, '2023-07-01 14:12:23', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (343, 'HVAC暖通空调', 'HVAC暖通空调', '/profile/avatar/HVAC (20).svg', NULL, NULL, NULL, '2023-07-01 14:12:23', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (344, 'HVAC暖通空调', 'HVAC暖通空调', '/profile/avatar/HVAC (18).svg', NULL, NULL, NULL, '2023-07-01 14:12:23', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (345, 'HVAC暖通空调', 'HVAC暖通空调', '/profile/avatar/HVAC (17).svg', NULL, NULL, NULL, '2023-07-01 14:12:23', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (346, 'HVAC暖通空调', 'HVAC暖通空调', '/profile/avatar/HVAC (19).svg', NULL, NULL, NULL, '2023-07-01 14:12:23', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (347, 'HVAC暖通空调', 'HVAC暖通空调', '/profile/avatar/HVAC (21).svg', NULL, NULL, NULL, '2023-07-01 14:12:23', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (348, 'HVAC暖通空调', 'HVAC暖通空调', '/profile/avatar/HVAC (22).svg', NULL, NULL, NULL, '2023-07-01 14:12:23', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (349, 'HVAC暖通空调', 'HVAC暖通空调', '/profile/avatar/HVAC (23).svg', NULL, NULL, NULL, '2023-07-01 14:12:23', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (350, 'HVAC暖通空调', 'HVAC暖通空调', '/profile/avatar/HVAC (24).svg', NULL, NULL, NULL, '2023-07-01 14:12:23', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (351, 'HVAC暖通空调', 'HVAC暖通空调', '/profile/avatar/HVAC (25).svg', NULL, NULL, NULL, '2023-07-01 14:12:23', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (352, 'HVAC暖通空调', 'HVAC暖通空调', '/profile/avatar/HVAC (26).svg', NULL, NULL, NULL, '2023-07-01 14:12:24', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (353, 'HVAC暖通空调', 'HVAC暖通空调', '/profile/avatar/HVAC (27).svg', NULL, NULL, NULL, '2023-07-01 14:12:24', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (354, 'HVAC暖通空调', 'HVAC暖通空调', '/profile/avatar/HVAC (28).svg', NULL, NULL, NULL, '2023-07-01 14:12:24', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (355, 'HVAC暖通空调', 'HVAC暖通空调', '/profile/avatar/HVAC (29).svg', NULL, NULL, NULL, '2023-07-01 14:12:24', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (356, 'HVAC暖通空调', 'HVAC暖通空调', '/profile/avatar/HVAC (32).svg', NULL, NULL, NULL, '2023-07-01 14:12:24', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (357, 'HVAC暖通空调', 'HVAC暖通空调', '/profile/avatar/HVAC (30).svg', NULL, NULL, NULL, '2023-07-01 14:12:24', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (358, 'HVAC暖通空调', 'HVAC暖通空调', '/profile/avatar/HVAC (31).svg', NULL, NULL, NULL, '2023-07-01 14:12:24', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (359, 'HVAC暖通空调', 'HVAC暖通空调', '/profile/avatar/HVAC (35).svg', NULL, NULL, NULL, '2023-07-01 14:12:24', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (360, 'HVAC暖通空调', 'HVAC暖通空调', '/profile/avatar/HVAC (33).svg', NULL, NULL, NULL, '2023-07-01 14:12:24', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (361, 'HVAC暖通空调', 'HVAC暖通空调', '/profile/avatar/HVAC (34).svg', NULL, NULL, NULL, '2023-07-01 14:12:24', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (362, 'HVAC暖通空调', 'HVAC暖通空调', '/profile/avatar/HVAC (36).svg', NULL, NULL, NULL, '2023-07-01 14:12:24', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (363, 'HVAC暖通空调', 'HVAC暖通空调', '/profile/avatar/HVAC (37).svg', NULL, NULL, NULL, '2023-07-01 14:12:24', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (364, 'HVAC暖通空调', 'HVAC暖通空调', '/profile/avatar/HVAC (38).svg', NULL, NULL, NULL, '2023-07-01 14:12:25', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (365, 'HVAC暖通空调', 'HVAC暖通空调', '/profile/avatar/HVAC (39).svg', NULL, NULL, NULL, '2023-07-01 14:12:25', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (366, 'HVAC暖通空调', 'HVAC暖通空调', '/profile/avatar/HVAC (40).svg', NULL, NULL, NULL, '2023-07-01 14:12:25', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (367, 'HVAC暖通空调', 'HVAC暖通空调', '/profile/avatar/HVAC (43).svg', NULL, NULL, NULL, '2023-07-01 14:12:25', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (368, 'HVAC暖通空调', 'HVAC暖通空调', '/profile/avatar/HVAC (41).svg', NULL, NULL, NULL, '2023-07-01 14:12:25', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (369, 'HVAC暖通空调', 'HVAC暖通空调', '/profile/avatar/HVAC (42).svg', NULL, NULL, NULL, '2023-07-01 14:12:25', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (370, 'HVAC暖通空调', 'HVAC暖通空调', '/profile/avatar/HVAC (45).svg', NULL, NULL, NULL, '2023-07-01 14:12:25', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (371, 'HVAC暖通空调', 'HVAC暖通空调', '/profile/avatar/HVAC (44).svg', NULL, NULL, NULL, '2023-07-01 14:12:25', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (372, 'HVAC暖通空调', 'HVAC暖通空调', '/profile/avatar/HVAC (47).svg', NULL, NULL, NULL, '2023-07-01 14:12:25', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (373, 'HVAC暖通空调', 'HVAC暖通空调', '/profile/avatar/HVAC (49).svg', NULL, NULL, NULL, '2023-07-01 14:12:25', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (374, 'HVAC暖通空调', 'HVAC暖通空调', '/profile/avatar/HVAC (46).svg', NULL, NULL, NULL, '2023-07-01 14:12:25', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (375, 'HVAC暖通空调', 'HVAC暖通空调', '/profile/avatar/HVAC (48).svg', NULL, NULL, NULL, '2023-07-01 14:12:25', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (376, 'HVAC暖通空调', 'HVAC暖通空调', '/profile/avatar/HVAC (50).svg', NULL, NULL, NULL, '2023-07-01 14:12:25', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (377, 'HVAC暖通空调', 'HVAC暖通空调', '/profile/avatar/HVAC (51).svg', NULL, NULL, NULL, '2023-07-01 14:12:25', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (378, 'HVAC暖通空调', 'HVAC暖通空调', '/profile/avatar/HVAC (52).svg', NULL, NULL, NULL, '2023-07-01 14:12:26', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (379, 'HVAC暖通空调', 'HVAC暖通空调', '/profile/avatar/HVAC (54).svg', NULL, NULL, NULL, '2023-07-01 14:12:26', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (380, 'HVAC暖通空调', 'HVAC暖通空调', '/profile/avatar/HVAC (56).svg', NULL, NULL, NULL, '2023-07-01 14:12:26', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (381, 'HVAC暖通空调', 'HVAC暖通空调', '/profile/avatar/HVAC (53).svg', NULL, NULL, NULL, '2023-07-01 14:12:26', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (382, 'HVAC暖通空调', 'HVAC暖通空调', '/profile/avatar/HVAC (55).svg', NULL, NULL, NULL, '2023-07-01 14:12:26', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (383, 'HVAC暖通空调', 'HVAC暖通空调', '/profile/avatar/HVAC (57).svg', NULL, NULL, NULL, '2023-07-01 14:12:26', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (384, 'HVAC暖通空调', 'HVAC暖通空调', '/profile/avatar/HVAC (58).svg', NULL, NULL, NULL, '2023-07-01 14:12:26', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (385, 'HVAC暖通空调', 'HVAC暖通空调', '/profile/avatar/HVAC (59).svg', NULL, NULL, NULL, '2023-07-01 14:12:26', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (386, 'HVAC暖通空调', 'HVAC暖通空调', '/profile/avatar/HVAC (60).svg', NULL, NULL, NULL, '2023-07-01 14:12:26', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (387, 'HVAC暖通空调', 'HVAC暖通空调', '/profile/avatar/HVAC (61).svg', NULL, NULL, NULL, '2023-07-01 14:12:26', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (388, 'HVAC暖通空调', 'HVAC暖通空调', '/profile/avatar/HVAC (62).svg', NULL, NULL, NULL, '2023-07-01 14:12:26', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (389, 'HVAC暖通空调', 'HVAC暖通空调', '/profile/avatar/HVAC (63).svg', NULL, NULL, NULL, '2023-07-01 14:12:26', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (390, 'HVAC暖通空调', 'HVAC暖通空调', '/profile/avatar/HVAC (65).svg', NULL, NULL, NULL, '2023-07-01 14:12:26', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (391, 'HVAC暖通空调', 'HVAC暖通空调', '/profile/avatar/HVAC (66).svg', NULL, NULL, NULL, '2023-07-01 14:12:26', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (392, 'HVAC暖通空调', 'HVAC暖通空调', '/profile/avatar/HVAC (67).svg', NULL, NULL, NULL, '2023-07-01 14:12:26', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (393, 'HVAC暖通空调', 'HVAC暖通空调', '/profile/avatar/HVAC (64).svg', NULL, NULL, NULL, '2023-07-01 14:12:26', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (394, 'HVAC暖通空调', 'HVAC暖通空调', '/profile/avatar/HVAC (68).svg', NULL, NULL, NULL, '2023-07-01 14:12:27', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (395, 'HVAC暖通空调', 'HVAC暖通空调', '/profile/avatar/HVAC (70).svg', NULL, NULL, NULL, '2023-07-01 14:12:27', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (396, 'HVAC暖通空调', 'HVAC暖通空调', '/profile/avatar/HVAC (69).svg', NULL, NULL, NULL, '2023-07-01 14:12:27', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (397, 'HVAC暖通空调', 'HVAC暖通空调', '/profile/avatar/HVAC (71).svg', NULL, NULL, NULL, '2023-07-01 14:12:27', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (398, 'HVAC暖通空调', 'HVAC暖通空调', '/profile/avatar/HVAC (73).svg', NULL, NULL, NULL, '2023-07-01 14:12:27', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (399, 'HVAC暖通空调', 'HVAC暖通空调', '/profile/avatar/HVAC (72).svg', NULL, NULL, NULL, '2023-07-01 14:12:27', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (400, 'HVAC暖通空调', 'HVAC暖通空调', '/profile/avatar/HVAC (74).svg', NULL, NULL, NULL, '2023-07-01 14:12:27', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (401, 'ISA符号', 'ISA符号', '/profile/avatar/ISA1 (1).svg', NULL, NULL, NULL, '2023-07-01 14:14:19', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (402, 'ISA符号', 'ISA符号', '/profile/avatar/ISA1 (6).svg', NULL, NULL, NULL, '2023-07-01 14:14:19', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (403, 'ISA符号', 'ISA符号', '/profile/avatar/ISA1 (4).svg', NULL, NULL, NULL, '2023-07-01 14:14:19', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (404, 'ISA符号', 'ISA符号', '/profile/avatar/ISA1 (3).svg', NULL, NULL, NULL, '2023-07-01 14:14:19', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (405, 'ISA符号', 'ISA符号', '/profile/avatar/ISA1 (2).svg', NULL, NULL, NULL, '2023-07-01 14:14:19', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (406, 'ISA符号', 'ISA符号', '/profile/avatar/ISA1 (5).svg', NULL, NULL, NULL, '2023-07-01 14:14:19', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (407, 'ISA符号', 'ISA符号', '/profile/avatar/ISA1 (7).svg', NULL, NULL, NULL, '2023-07-01 14:14:19', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (408, 'ISA符号', 'ISA符号', '/profile/avatar/ISA1 (8).svg', NULL, NULL, NULL, '2023-07-01 14:14:20', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (409, 'ISA符号', 'ISA符号', '/profile/avatar/ISA1 (9).svg', NULL, NULL, NULL, '2023-07-01 14:14:20', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (410, 'ISA符号', 'ISA符号', '/profile/avatar/ISA1 (10).svg', NULL, NULL, NULL, '2023-07-01 14:14:20', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (411, 'ISA符号', 'ISA符号', '/profile/avatar/ISA1 (11).svg', NULL, NULL, NULL, '2023-07-01 14:14:20', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (412, 'ISA符号', 'ISA符号', '/profile/avatar/ISA1 (12).svg', NULL, NULL, NULL, '2023-07-01 14:14:20', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (413, 'ISA符号', 'ISA符号', '/profile/avatar/ISA1 (13).svg', NULL, NULL, NULL, '2023-07-01 14:14:20', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (414, 'ISA符号', 'ISA符号', '/profile/avatar/ISA1 (14).svg', NULL, NULL, NULL, '2023-07-01 14:14:20', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (415, 'ISA符号', 'ISA符号', '/profile/avatar/ISA1 (15).svg', NULL, NULL, NULL, '2023-07-01 14:14:20', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (416, 'ISA符号', 'ISA符号', '/profile/avatar/ISA1 (18).svg', NULL, NULL, NULL, '2023-07-01 14:14:20', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (417, 'ISA符号', 'ISA符号', '/profile/avatar/ISA1 (17).svg', NULL, NULL, NULL, '2023-07-01 14:14:20', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (418, 'ISA符号', 'ISA符号', '/profile/avatar/ISA1 (19).svg', NULL, NULL, NULL, '2023-07-01 14:14:20', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (419, 'ISA符号', 'ISA符号', '/profile/avatar/ISA1 (16).svg', NULL, NULL, NULL, '2023-07-01 14:14:20', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (420, 'ISA符号', 'ISA符号', '/profile/avatar/ISA1 (23).svg', NULL, NULL, NULL, '2023-07-01 14:14:21', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (421, 'ISA符号', 'ISA符号', '/profile/avatar/ISA1 (20).svg', NULL, NULL, NULL, '2023-07-01 14:14:21', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (422, 'ISA符号', 'ISA符号', '/profile/avatar/ISA1 (21).svg', NULL, NULL, NULL, '2023-07-01 14:14:21', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (423, 'ISA符号', 'ISA符号', '/profile/avatar/ISA1 (24).svg', NULL, NULL, NULL, '2023-07-01 14:14:21', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (424, 'ISA符号', 'ISA符号', '/profile/avatar/ISA1 (25).svg', NULL, NULL, NULL, '2023-07-01 14:14:21', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (425, 'ISA符号', 'ISA符号', '/profile/avatar/ISA1 (22).svg', NULL, NULL, NULL, '2023-07-01 14:14:21', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (426, 'ISA符号', 'ISA符号', '/profile/avatar/ISA1 (26).svg', NULL, NULL, NULL, '2023-07-01 14:14:21', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (427, 'ISA符号', 'ISA符号', '/profile/avatar/ISA1 (28).svg', NULL, NULL, NULL, '2023-07-01 14:14:21', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (428, 'ISA符号', 'ISA符号', '/profile/avatar/ISA1 (30).svg', NULL, NULL, NULL, '2023-07-01 14:14:21', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (429, 'ISA符号', 'ISA符号', '/profile/avatar/ISA1 (27).svg', NULL, NULL, NULL, '2023-07-01 14:14:21', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (430, 'ISA符号', 'ISA符号', '/profile/avatar/ISA1 (29).svg', NULL, NULL, NULL, '2023-07-01 14:14:21', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (431, 'ISA符号', 'ISA符号', '/profile/avatar/ISA1 (31).svg', NULL, NULL, NULL, '2023-07-01 14:14:21', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (432, 'ISA符号', 'ISA符号', '/profile/avatar/ISA1 (32).svg', NULL, NULL, NULL, '2023-07-01 14:14:21', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (433, 'ISA符号', 'ISA符号', '/profile/avatar/ISA1 (34).svg', NULL, NULL, NULL, '2023-07-01 14:14:21', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (434, 'ISA符号', 'ISA符号', '/profile/avatar/ISA1 (35).svg', NULL, NULL, NULL, '2023-07-01 14:14:22', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (435, 'ISA符号', 'ISA符号', '/profile/avatar/ISA1 (33).svg', NULL, NULL, NULL, '2023-07-01 14:14:22', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (436, 'ISA符号', 'ISA符号', '/profile/avatar/ISA1 (36).svg', NULL, NULL, NULL, '2023-07-01 14:14:22', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (437, 'ISA符号', 'ISA符号', '/profile/avatar/ISA1 (37).svg', NULL, NULL, NULL, '2023-07-01 14:14:22', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (438, 'ISA符号', 'ISA符号', '/profile/avatar/ISA1 (38).svg', NULL, NULL, NULL, '2023-07-01 14:14:22', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (439, 'ISA符号', 'ISA符号', '/profile/avatar/ISA1 (40).svg', NULL, NULL, NULL, '2023-07-01 14:14:22', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (440, 'ISA符号', 'ISA符号', '/profile/avatar/ISA1 (41).svg', NULL, NULL, NULL, '2023-07-01 14:14:22', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (441, 'ISA符号', 'ISA符号', '/profile/avatar/ISA1 (42).svg', NULL, NULL, NULL, '2023-07-01 14:14:22', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (442, 'ISA符号', 'ISA符号', '/profile/avatar/ISA1 (39).svg', NULL, NULL, NULL, '2023-07-01 14:14:22', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (443, 'ISA符号', 'ISA符号', '/profile/avatar/ISA1 (43).svg', NULL, NULL, NULL, '2023-07-01 14:14:22', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (444, 'ISA符号', 'ISA符号', '/profile/avatar/ISA1 (47).svg', NULL, NULL, NULL, '2023-07-01 14:14:22', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (445, 'ISA符号', 'ISA符号', '/profile/avatar/ISA1 (44).svg', NULL, NULL, NULL, '2023-07-01 14:14:22', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (446, 'ISA符号', 'ISA符号', '/profile/avatar/ISA1 (45).svg', NULL, NULL, NULL, '2023-07-01 14:14:22', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (447, 'ISA符号', 'ISA符号', '/profile/avatar/ISA1 (48).svg', NULL, NULL, NULL, '2023-07-01 14:14:22', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (448, 'ISA符号', 'ISA符号', '/profile/avatar/ISA1 (46).svg', NULL, NULL, NULL, '2023-07-01 14:14:22', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (449, 'ISA符号', 'ISA符号', '/profile/avatar/ISA1 (49).svg', NULL, NULL, NULL, '2023-07-01 14:14:22', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (450, 'ISA符号', 'ISA符号', '/profile/avatar/ISA1 (50).svg', NULL, NULL, NULL, '2023-07-01 14:14:23', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (451, 'ISA符号', 'ISA符号', '/profile/avatar/ISA1 (51).svg', NULL, NULL, NULL, '2023-07-01 14:14:23', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (452, 'ISA符号', 'ISA符号', '/profile/avatar/ISA1 (54).svg', NULL, NULL, NULL, '2023-07-01 14:14:23', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (453, 'ISA符号', 'ISA符号', '/profile/avatar/ISA1 (55).svg', NULL, NULL, NULL, '2023-07-01 14:14:23', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (454, 'ISA符号', 'ISA符号', '/profile/avatar/ISA1 (52).svg', NULL, NULL, NULL, '2023-07-01 14:14:23', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (455, 'ISA符号', 'ISA符号', '/profile/avatar/ISA1 (53).svg', NULL, NULL, NULL, '2023-07-01 14:14:23', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (456, 'ISA符号', 'ISA符号', '/profile/avatar/ISA1 (57).svg', NULL, NULL, NULL, '2023-07-01 14:14:23', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (457, 'ISA符号', 'ISA符号', '/profile/avatar/ISA1 (56).svg', NULL, NULL, NULL, '2023-07-01 14:14:23', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (458, 'ISA符号', 'ISA符号', '/profile/avatar/ISA1 (58).svg', NULL, NULL, NULL, '2023-07-01 14:14:23', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (459, 'ISA符号', 'ISA符号', '/profile/avatar/ISA1 (59).svg', NULL, NULL, NULL, '2023-07-01 14:14:23', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (460, 'ISA符号', 'ISA符号', '/profile/avatar/ISA1 (60).svg', NULL, NULL, NULL, '2023-07-01 14:14:23', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (461, 'ISA符号', 'ISA符号', '/profile/avatar/ISA1 (62).svg', NULL, NULL, NULL, '2023-07-01 14:14:23', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (462, 'ISA符号', 'ISA符号', '/profile/avatar/ISA1 (61).svg', NULL, NULL, NULL, '2023-07-01 14:14:23', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (463, 'ISA符号', 'ISA符号', '/profile/avatar/ISA1 (63).svg', NULL, NULL, NULL, '2023-07-01 14:14:23', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (464, 'ISA符号', 'ISA符号', '/profile/avatar/ISA1 (66).svg', NULL, NULL, NULL, '2023-07-01 14:14:24', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (465, 'ISA符号', 'ISA符号', '/profile/avatar/ISA1 (64).svg', NULL, NULL, NULL, '2023-07-01 14:14:24', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (466, 'ISA符号', 'ISA符号', '/profile/avatar/ISA1 (65).svg', NULL, NULL, NULL, '2023-07-01 14:14:24', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (467, 'ISA符号', 'ISA符号', '/profile/avatar/ISA1 (68).svg', NULL, NULL, NULL, '2023-07-01 14:14:24', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (468, 'ISA符号', 'ISA符号', '/profile/avatar/ISA1 (67).svg', NULL, NULL, NULL, '2023-07-01 14:14:24', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (469, 'ISA符号', 'ISA符号', '/profile/avatar/ISA1 (69).svg', NULL, NULL, NULL, '2023-07-01 14:14:24', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (470, 'ISA符号', 'ISA符号', '/profile/avatar/ISA1 (70).svg', NULL, NULL, NULL, '2023-07-01 14:14:24', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (471, 'ISA符号', 'ISA符号', '/profile/avatar/ISA1 (72).svg', NULL, NULL, NULL, '2023-07-01 14:14:24', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (472, 'ISA符号', 'ISA符号', '/profile/avatar/ISA1 (75).svg', NULL, NULL, NULL, '2023-07-01 14:14:24', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (473, 'ISA符号', 'ISA符号', '/profile/avatar/ISA1 (71).svg', NULL, NULL, NULL, '2023-07-01 14:14:24', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (474, 'ISA符号', 'ISA符号', '/profile/avatar/ISA1 (74).svg', NULL, NULL, NULL, '2023-07-01 14:14:24', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (475, 'ISA符号', 'ISA符号', '/profile/avatar/ISA1 (73).svg', NULL, NULL, NULL, '2023-07-01 14:14:24', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (476, 'ISA符号', 'ISA符号', '/profile/avatar/ISA1 (77).svg', NULL, NULL, NULL, '2023-07-01 14:14:25', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (477, 'ISA符号', 'ISA符号', '/profile/avatar/ISA1 (76).svg', NULL, NULL, NULL, '2023-07-01 14:14:25', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (478, 'ISA符号', 'ISA符号', '/profile/avatar/ISA1 (80).svg', NULL, NULL, NULL, '2023-07-01 14:14:25', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (479, 'ISA符号', 'ISA符号', '/profile/avatar/ISA1 (78).svg', NULL, NULL, NULL, '2023-07-01 14:14:25', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (480, 'ISA符号', 'ISA符号', '/profile/avatar/ISA1 (79).svg', NULL, NULL, NULL, '2023-07-01 14:14:25', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (481, 'ISA符号', 'ISA符号', '/profile/avatar/ISA1 (81).svg', NULL, NULL, NULL, '2023-07-01 14:14:25', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (482, 'ISA符号', 'ISA符号', '/profile/avatar/ISA1 (82).svg', NULL, NULL, NULL, '2023-07-01 14:14:25', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (483, 'ISA符号', 'ISA符号', '/profile/avatar/ISA1 (83).svg', NULL, NULL, NULL, '2023-07-01 14:14:25', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (484, 'ISA符号', 'ISA符号', '/profile/avatar/ISA1 (84).svg', NULL, NULL, NULL, '2023-07-01 14:14:25', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (485, 'ISA符号', 'ISA符号', '/profile/avatar/ISA1 (85).svg', NULL, NULL, NULL, '2023-07-01 14:14:25', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (486, 'ISA符号', 'ISA符号', '/profile/avatar/ISA1 (86).svg', NULL, NULL, NULL, '2023-07-01 14:14:25', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (487, 'ISA符号', 'ISA符号', '/profile/avatar/ISA1 (87).svg', NULL, NULL, NULL, '2023-07-01 14:14:25', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (488, 'ISA符号', 'ISA符号', '/profile/avatar/ISA1 (88).svg', NULL, NULL, NULL, '2023-07-01 14:14:25', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (489, 'ISA符号', 'ISA符号', '/profile/avatar/ISA1 (89).svg', NULL, NULL, NULL, '2023-07-01 14:14:25', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (490, 'ISA符号', 'ISA符号', '/profile/avatar/ISA1 (90).svg', NULL, NULL, NULL, '2023-07-01 14:14:26', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (491, 'ISA符号', 'ISA符号', '/profile/avatar/ISA1 (92).svg', NULL, NULL, NULL, '2023-07-01 14:14:26', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (492, 'ISA符号', 'ISA符号', '/profile/avatar/ISA1 (91).svg', NULL, NULL, NULL, '2023-07-01 14:14:26', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (493, 'ISA符号', 'ISA符号', '/profile/avatar/ISA1 (94).svg', NULL, NULL, NULL, '2023-07-01 14:14:26', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (494, 'ISA符号', 'ISA符号', '/profile/avatar/ISA1 (93).svg', NULL, NULL, NULL, '2023-07-01 14:14:26', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (495, 'ISA符号', 'ISA符号', '/profile/avatar/ISA1 (95).svg', NULL, NULL, NULL, '2023-07-01 14:14:26', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (496, 'ISA符号', 'ISA符号', '/profile/avatar/ISA1 (96).svg', NULL, NULL, NULL, '2023-07-01 14:14:26', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (497, 'ISA符号', 'ISA符号', '/profile/avatar/ISA1 (97).svg', NULL, NULL, NULL, '2023-07-01 14:14:26', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (498, 'ISA符号', 'ISA符号', '/profile/avatar/ISA1 (98).svg', NULL, NULL, NULL, '2023-07-01 14:14:26', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (499, 'ISA符号', 'ISA符号', '/profile/avatar/ISA1 (99).svg', NULL, NULL, NULL, '2023-07-01 14:14:26', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (500, 'ISA符号', 'ISA符号', '/profile/avatar/ISA1 (100).svg', NULL, NULL, NULL, '2023-07-01 14:14:26', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (501, 'ISA符号', 'ISA符号', '/profile/avatar/ISA1 (101).svg', NULL, NULL, NULL, '2023-07-01 14:14:26', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (502, 'ISA符号', 'ISA符号', '/profile/avatar/ISA1 (102).svg', NULL, NULL, NULL, '2023-07-01 14:14:26', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (503, 'ISA符号', 'ISA符号', '/profile/avatar/ISA1 (106).svg', NULL, NULL, NULL, '2023-07-01 14:14:26', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (504, 'ISA符号', 'ISA符号', '/profile/avatar/ISA1 (104).svg', NULL, NULL, NULL, '2023-07-01 14:14:26', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (505, 'ISA符号', 'ISA符号', '/profile/avatar/ISA1 (103).svg', NULL, NULL, NULL, '2023-07-01 14:14:26', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (506, 'ISA符号', 'ISA符号', '/profile/avatar/ISA1 (105).svg', NULL, NULL, NULL, '2023-07-01 14:14:27', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (507, 'ISA符号', 'ISA符号', '/profile/avatar/ISA1 (108).svg', NULL, NULL, NULL, '2023-07-01 14:14:27', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (508, 'ISA符号', 'ISA符号', '/profile/avatar/ISA1 (107).svg', NULL, NULL, NULL, '2023-07-01 14:14:27', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (509, 'ISA符号', 'ISA符号', '/profile/avatar/ISA1 (109).svg', NULL, NULL, NULL, '2023-07-01 14:14:27', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (510, 'ISA符号', 'ISA符号', '/profile/avatar/ISA1 (110).svg', NULL, NULL, NULL, '2023-07-01 14:14:27', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (511, 'ISA符号', 'ISA符号', '/profile/avatar/ISA1 (111).svg', NULL, NULL, NULL, '2023-07-01 14:14:27', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (512, 'ISA符号', 'ISA符号', '/profile/avatar/ISA1 (113).svg', NULL, NULL, NULL, '2023-07-01 14:14:27', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (513, 'ISA符号', 'ISA符号', '/profile/avatar/ISA1 (112).svg', NULL, NULL, NULL, '2023-07-01 14:14:27', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (514, 'ISA符号', 'ISA符号', '/profile/avatar/ISA1 (114).svg', NULL, NULL, NULL, '2023-07-01 14:14:27', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (515, 'ISA符号', 'ISA符号', '/profile/avatar/ISA1 (115).svg', NULL, NULL, NULL, '2023-07-01 14:14:27', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (516, 'ISA符号', 'ISA符号', '/profile/avatar/ISA1 (118).svg', NULL, NULL, NULL, '2023-07-01 14:14:27', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (517, 'ISA符号', 'ISA符号', '/profile/avatar/ISA1 (117).svg', NULL, NULL, NULL, '2023-07-01 14:14:27', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (518, 'ISA符号', 'ISA符号', '/profile/avatar/ISA1 (116).svg', NULL, NULL, NULL, '2023-07-01 14:14:27', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (519, 'ISA符号', 'ISA符号', '/profile/avatar/ISA1 (120).svg', NULL, NULL, NULL, '2023-07-01 14:14:27', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (520, 'ISA符号', 'ISA符号', '/profile/avatar/ISA1 (119).svg', NULL, NULL, NULL, '2023-07-01 14:14:28', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (521, 'ISA符号', 'ISA符号', '/profile/avatar/ISA1 (123).svg', NULL, NULL, NULL, '2023-07-01 14:14:28', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (522, 'ISA符号', 'ISA符号', '/profile/avatar/ISA1 (121).svg', NULL, NULL, NULL, '2023-07-01 14:14:28', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (523, 'ISA符号', 'ISA符号', '/profile/avatar/ISA1 (122).svg', NULL, NULL, NULL, '2023-07-01 14:14:28', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (524, 'ISA符号', 'ISA符号', '/profile/avatar/ISA1 (124).svg', NULL, NULL, NULL, '2023-07-01 14:14:28', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (525, 'ISA符号', 'ISA符号', '/profile/avatar/ISA1 (125).svg', NULL, NULL, NULL, '2023-07-01 14:14:28', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (526, 'ISA符号', 'ISA符号', '/profile/avatar/ISA1 (126).svg', NULL, NULL, NULL, '2023-07-01 14:14:28', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (527, 'ISA符号', 'ISA符号', '/profile/avatar/ISA1 (127).svg', NULL, NULL, NULL, '2023-07-01 14:14:28', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (528, 'ISA符号', 'ISA符号', '/profile/avatar/ISA1 (130).svg', NULL, NULL, NULL, '2023-07-01 14:14:28', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (529, 'ISA符号', 'ISA符号', '/profile/avatar/ISA1 (129).svg', NULL, NULL, NULL, '2023-07-01 14:14:28', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (530, 'ISA符号', 'ISA符号', '/profile/avatar/ISA1 (128).svg', NULL, NULL, NULL, '2023-07-01 14:14:28', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (531, 'ISA符号', 'ISA符号', '/profile/avatar/ISA1 (131).svg', NULL, NULL, NULL, '2023-07-01 14:14:28', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (532, 'ISA符号', 'ISA符号', '/profile/avatar/ISA1 (132).svg', NULL, NULL, NULL, '2023-07-01 14:14:28', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (533, 'ISA符号', 'ISA符号', '/profile/avatar/ISA1 (133).svg', NULL, NULL, NULL, '2023-07-01 14:14:29', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (534, 'ISA符号', 'ISA符号', '/profile/avatar/ISA1 (134).svg', NULL, NULL, NULL, '2023-07-01 14:14:29', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (535, 'ISA符号', 'ISA符号', '/profile/avatar/ISA1 (135).svg', NULL, NULL, NULL, '2023-07-01 14:14:29', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (536, 'ISA符号', 'ISA符号', '/profile/avatar/ISA1 (136).svg', NULL, NULL, NULL, '2023-07-01 14:14:29', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (537, 'ISA符号', 'ISA符号', '/profile/avatar/ISA1 (137).svg', NULL, NULL, NULL, '2023-07-01 14:14:29', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (538, 'ISA符号', 'ISA符号', '/profile/avatar/ISA1 (138).svg', NULL, NULL, NULL, '2023-07-01 14:14:29', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (539, 'ISA符号', 'ISA符号', '/profile/avatar/ISA1 (139).svg', NULL, NULL, NULL, '2023-07-01 14:14:29', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (540, 'ISA符号', 'ISA符号', '/profile/avatar/ISA1 (141).svg', NULL, NULL, NULL, '2023-07-01 14:14:29', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (541, 'ISA符号', 'ISA符号', '/profile/avatar/ISA1 (140).svg', NULL, NULL, NULL, '2023-07-01 14:14:29', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (542, 'ISA符号', 'ISA符号', '/profile/avatar/ISA1 (143).svg', NULL, NULL, NULL, '2023-07-01 14:14:29', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (543, 'ISA符号', 'ISA符号', '/profile/avatar/ISA1 (142).svg', NULL, NULL, NULL, '2023-07-01 14:14:29', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (544, 'ISA符号', 'ISA符号', '/profile/avatar/ISA1 (144).svg', NULL, NULL, NULL, '2023-07-01 14:14:29', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (545, 'ISA符号', 'ISA符号', '/profile/avatar/ISA1 (146).svg', NULL, NULL, NULL, '2023-07-01 14:14:29', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (546, 'ISA符号', 'ISA符号', '/profile/avatar/ISA1 (148).svg', NULL, NULL, NULL, '2023-07-01 14:14:30', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (547, 'ISA符号', 'ISA符号', '/profile/avatar/ISA1 (145).svg', NULL, NULL, NULL, '2023-07-01 14:14:30', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (548, 'ISA符号', 'ISA符号', '/profile/avatar/ISA1 (147).svg', NULL, NULL, NULL, '2023-07-01 14:14:30', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (549, 'ISA符号', 'ISA符号', '/profile/avatar/ISA1 (149).svg', NULL, NULL, NULL, '2023-07-01 14:14:30', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (550, 'ISA符号', 'ISA符号', '/profile/avatar/ISA1 (150).svg', NULL, NULL, NULL, '2023-07-01 14:14:30', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (551, 'ISA符号', 'ISA符号', '/profile/avatar/ISA1 (152).svg', NULL, NULL, NULL, '2023-07-01 14:14:30', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (552, 'ISA符号', 'ISA符号', '/profile/avatar/ISA1 (151).svg', NULL, NULL, NULL, '2023-07-01 14:14:30', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (553, 'ISA符号', 'ISA符号', '/profile/avatar/ISA1 (154).svg', NULL, NULL, NULL, '2023-07-01 14:14:30', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (554, 'ISA符号', 'ISA符号', '/profile/avatar/ISA1 (153).svg', NULL, NULL, NULL, '2023-07-01 14:14:30', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (555, 'ISA符号', 'ISA符号', '/profile/avatar/ISA1 (156).svg', NULL, NULL, NULL, '2023-07-01 14:14:30', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (556, 'ISA符号', 'ISA符号', '/profile/avatar/ISA1 (155).svg', NULL, NULL, NULL, '2023-07-01 14:14:30', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (557, 'ISA符号', 'ISA符号', '/profile/avatar/ISA1 (157).svg', NULL, NULL, NULL, '2023-07-01 14:14:30', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (558, 'ISA符号', 'ISA符号', '/profile/avatar/ISA1 (160).svg', NULL, NULL, NULL, '2023-07-01 14:14:30', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (559, 'ISA符号', 'ISA符号', '/profile/avatar/ISA1 (158).svg', NULL, NULL, NULL, '2023-07-01 14:14:30', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (560, 'ISA符号', 'ISA符号', '/profile/avatar/ISA1 (159).svg', NULL, NULL, NULL, '2023-07-01 14:14:30', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (561, 'ISA符号', 'ISA符号', '/profile/avatar/ISA1 (161).svg', NULL, NULL, NULL, '2023-07-01 14:14:31', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (562, 'ISA符号', 'ISA符号', '/profile/avatar/ISA1 (163).svg', NULL, NULL, NULL, '2023-07-01 14:14:31', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (563, 'ISA符号', 'ISA符号', '/profile/avatar/ISA1 (162).svg', NULL, NULL, NULL, '2023-07-01 14:14:31', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (564, 'ISA符号', 'ISA符号', '/profile/avatar/ISA1 (164).svg', NULL, NULL, NULL, '2023-07-01 14:14:31', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (565, 'ISA符号', 'ISA符号', '/profile/avatar/ISA1 (165).svg', NULL, NULL, NULL, '2023-07-01 14:14:31', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (566, 'ISA符号', 'ISA符号', '/profile/avatar/ISA1 (166).svg', NULL, NULL, NULL, '2023-07-01 14:14:31', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (567, 'ISA符号', 'ISA符号', '/profile/avatar/ISA1 (168).svg', NULL, NULL, NULL, '2023-07-01 14:14:31', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (568, 'ISA符号', 'ISA符号', '/profile/avatar/ISA1 (167).svg', NULL, NULL, NULL, '2023-07-01 14:14:31', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (569, 'ISA符号', 'ISA符号', '/profile/avatar/ISA1 (169).svg', NULL, NULL, NULL, '2023-07-01 14:14:31', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (570, 'ISA符号', 'ISA符号', '/profile/avatar/ISA1 (170).svg', NULL, NULL, NULL, '2023-07-01 14:14:31', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (571, 'ISA符号', 'ISA符号', '/profile/avatar/ISA1 (171).svg', NULL, NULL, NULL, '2023-07-01 14:14:31', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (572, 'ISA符号', 'ISA符号', '/profile/avatar/ISA1 (172).svg', NULL, NULL, NULL, '2023-07-01 14:14:31', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (573, 'ISA符号', 'ISA符号', '/profile/avatar/ISA1 (174).svg', NULL, NULL, NULL, '2023-07-01 14:14:32', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (574, 'ISA符号', 'ISA符号', '/profile/avatar/ISA1 (173).svg', NULL, NULL, NULL, '2023-07-01 14:14:32', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (575, 'ISA符号', 'ISA符号', '/profile/avatar/ISA1 (175).svg', NULL, NULL, NULL, '2023-07-01 14:14:32', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (576, 'ISA符号', 'ISA符号', '/profile/avatar/ISA1 (176).svg', NULL, NULL, NULL, '2023-07-01 14:14:32', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (577, 'ISA符号', 'ISA符号', '/profile/avatar/ISA1 (177).svg', NULL, NULL, NULL, '2023-07-01 14:14:32', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (578, 'ISA符号', 'ISA符号', '/profile/avatar/ISA1 (178).svg', NULL, NULL, NULL, '2023-07-01 14:14:32', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (579, 'ISA符号', 'ISA符号', '/profile/avatar/ISA1 (179).svg', NULL, NULL, NULL, '2023-07-01 14:14:32', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (580, 'ISA符号-3D', 'ISA符号-3D', '/profile/avatar/ISA-3D (1).svg', NULL, NULL, NULL, '2023-07-01 14:15:16', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (581, 'ISA符号-3D', 'ISA符号-3D', '/profile/avatar/ISA-3D (5).svg', NULL, NULL, NULL, '2023-07-01 14:15:16', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (582, 'ISA符号-3D', 'ISA符号-3D', '/profile/avatar/ISA-3D (4).svg', NULL, NULL, NULL, '2023-07-01 14:15:16', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (583, 'ISA符号-3D', 'ISA符号-3D', '/profile/avatar/ISA-3D (3).svg', NULL, NULL, NULL, '2023-07-01 14:15:16', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (584, 'ISA符号-3D', 'ISA符号-3D', '/profile/avatar/ISA-3D (6).svg', NULL, NULL, NULL, '2023-07-01 14:15:16', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (585, 'ISA符号-3D', 'ISA符号-3D', '/profile/avatar/ISA-3D (2).svg', NULL, NULL, NULL, '2023-07-01 14:15:16', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (586, 'ISA符号-3D', 'ISA符号-3D', '/profile/avatar/ISA-3D (7).svg', NULL, NULL, NULL, '2023-07-01 14:15:16', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (587, 'ISA符号-3D', 'ISA符号-3D', '/profile/avatar/ISA-3D (8).svg', NULL, NULL, NULL, '2023-07-01 14:15:16', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (588, 'ISA符号-3D', 'ISA符号-3D', '/profile/avatar/ISA-3D (11).svg', NULL, NULL, NULL, '2023-07-01 14:15:16', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (589, 'ISA符号-3D', 'ISA符号-3D', '/profile/avatar/ISA-3D (10).svg', NULL, NULL, NULL, '2023-07-01 14:15:16', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (590, 'ISA符号-3D', 'ISA符号-3D', '/profile/avatar/ISA-3D (13).svg', NULL, NULL, NULL, '2023-07-01 14:15:16', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (591, 'ISA符号-3D', 'ISA符号-3D', '/profile/avatar/ISA-3D (9).svg', NULL, NULL, NULL, '2023-07-01 14:15:16', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (592, 'ISA符号-3D', 'ISA符号-3D', '/profile/avatar/ISA-3D (12).svg', NULL, NULL, NULL, '2023-07-01 14:15:16', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (593, 'ISA符号-3D', 'ISA符号-3D', '/profile/avatar/ISA-3D (14).svg', NULL, NULL, NULL, '2023-07-01 14:15:17', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (594, 'ISA符号-3D', 'ISA符号-3D', '/profile/avatar/ISA-3D (16).svg', NULL, NULL, NULL, '2023-07-01 14:15:17', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (595, 'ISA符号-3D', 'ISA符号-3D', '/profile/avatar/ISA-3D (15).svg', NULL, NULL, NULL, '2023-07-01 14:15:17', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (596, 'ISA符号-3D', 'ISA符号-3D', '/profile/avatar/ISA-3D (17).svg', NULL, NULL, NULL, '2023-07-01 14:15:17', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (597, 'ISA符号-3D', 'ISA符号-3D', '/profile/avatar/ISA-3D (19).svg', NULL, NULL, NULL, '2023-07-01 14:15:17', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (598, 'ISA符号-3D', 'ISA符号-3D', '/profile/avatar/ISA-3D (18).svg', NULL, NULL, NULL, '2023-07-01 14:15:17', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (599, 'ISA符号-3D', 'ISA符号-3D', '/profile/avatar/ISA-3D (21).svg', NULL, NULL, NULL, '2023-07-01 14:15:17', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (600, 'ISA符号-3D', 'ISA符号-3D', '/profile/avatar/ISA-3D (20).svg', NULL, NULL, NULL, '2023-07-01 14:15:17', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (601, 'ISA符号-3D', 'ISA符号-3D', '/profile/avatar/ISA-3D (22).svg', NULL, NULL, NULL, '2023-07-01 14:15:17', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (602, 'ISA符号-3D', 'ISA符号-3D', '/profile/avatar/ISA-3D (23).svg', NULL, NULL, NULL, '2023-07-01 14:15:17', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (603, 'ISA符号-3D', 'ISA符号-3D', '/profile/avatar/ISA-3D (24).svg', NULL, NULL, NULL, '2023-07-01 14:15:17', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (604, 'ISA符号-3D', 'ISA符号-3D', '/profile/avatar/ISA-3D (25).svg', NULL, NULL, NULL, '2023-07-01 14:15:18', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (605, 'ISA符号-3D', 'ISA符号-3D', '/profile/avatar/ISA-3D (26).svg', NULL, NULL, NULL, '2023-07-01 14:15:18', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (606, 'ISA符号-3D', 'ISA符号-3D', '/profile/avatar/ISA-3D (27).svg', NULL, NULL, NULL, '2023-07-01 14:15:18', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (607, 'ISA符号-3D', 'ISA符号-3D', '/profile/avatar/ISA-3D (28).svg', NULL, NULL, NULL, '2023-07-01 14:15:18', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (608, 'ISA符号-3D', 'ISA符号-3D', '/profile/avatar/ISA-3D (29).svg', NULL, NULL, NULL, '2023-07-01 14:15:18', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (609, 'ISA符号-3D', 'ISA符号-3D', '/profile/avatar/ISA-3D (30).svg', NULL, NULL, NULL, '2023-07-01 14:15:18', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (610, 'ISA符号-3D', 'ISA符号-3D', '/profile/avatar/ISA-3D (31).svg', NULL, NULL, NULL, '2023-07-01 14:15:18', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (611, 'ISA符号-3D', 'ISA符号-3D', '/profile/avatar/ISA-3D (32).svg', NULL, NULL, NULL, '2023-07-01 14:15:18', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (612, 'ISA符号-3D', 'ISA符号-3D', '/profile/avatar/ISA-3D (35).svg', NULL, NULL, NULL, '2023-07-01 14:15:18', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (613, 'ISA符号-3D', 'ISA符号-3D', '/profile/avatar/ISA-3D (34).svg', NULL, NULL, NULL, '2023-07-01 14:15:18', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (614, 'ISA符号-3D', 'ISA符号-3D', '/profile/avatar/ISA-3D (33).svg', NULL, NULL, NULL, '2023-07-01 14:15:18', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (615, 'ISA符号-3D', 'ISA符号-3D', '/profile/avatar/ISA-3D (36).svg', NULL, NULL, NULL, '2023-07-01 14:15:18', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (616, 'ISA符号-3D', 'ISA符号-3D', '/profile/avatar/ISA-3D (38).svg', NULL, NULL, NULL, '2023-07-01 14:15:18', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (617, 'ISA符号-3D', 'ISA符号-3D', '/profile/avatar/ISA-3D (37).svg', NULL, NULL, NULL, '2023-07-01 14:15:18', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (618, 'ISA符号-3D', 'ISA符号-3D', '/profile/avatar/ISA-3D (39).svg', NULL, NULL, NULL, '2023-07-01 14:15:19', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (619, 'ISA符号-3D', 'ISA符号-3D', '/profile/avatar/ISA-3D (41).svg', NULL, NULL, NULL, '2023-07-01 14:15:19', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (620, 'ISA符号-3D', 'ISA符号-3D', '/profile/avatar/ISA-3D (40).svg', NULL, NULL, NULL, '2023-07-01 14:15:19', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (621, 'ISA符号-3D', 'ISA符号-3D', '/profile/avatar/ISA-3D (42).svg', NULL, NULL, NULL, '2023-07-01 14:15:19', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (622, 'ISA符号-3D', 'ISA符号-3D', '/profile/avatar/ISA-3D (43).svg', NULL, NULL, NULL, '2023-07-01 14:15:19', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (623, 'ISA符号-3D', 'ISA符号-3D', '/profile/avatar/ISA-3D (44).svg', NULL, NULL, NULL, '2023-07-01 14:15:19', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (624, 'ISA符号-3D', 'ISA符号-3D', '/profile/avatar/ISA-3D (45).svg', NULL, NULL, NULL, '2023-07-01 14:15:19', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (625, 'ISA符号-3D', 'ISA符号-3D', '/profile/avatar/ISA-3D (46).svg', NULL, NULL, NULL, '2023-07-01 14:15:19', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (626, 'ISA符号-3D', 'ISA符号-3D', '/profile/avatar/ISA-3D (49).svg', NULL, NULL, NULL, '2023-07-01 14:15:19', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (627, 'ISA符号-3D', 'ISA符号-3D', '/profile/avatar/ISA-3D (47).svg', NULL, NULL, NULL, '2023-07-01 14:15:19', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (628, 'ISA符号-3D', 'ISA符号-3D', '/profile/avatar/ISA-3D (50).svg', NULL, NULL, NULL, '2023-07-01 14:15:19', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (629, 'ISA符号-3D', 'ISA符号-3D', '/profile/avatar/ISA-3D (48).svg', NULL, NULL, NULL, '2023-07-01 14:15:19', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (630, 'ISA符号-3D', 'ISA符号-3D', '/profile/avatar/ISA-3D (51).svg', NULL, NULL, NULL, '2023-07-01 14:15:19', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (631, 'ISA符号-3D', 'ISA符号-3D', '/profile/avatar/ISA-3D (53).svg', NULL, NULL, NULL, '2023-07-01 14:15:20', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (632, 'ISA符号-3D', 'ISA符号-3D', '/profile/avatar/ISA-3D (52).svg', NULL, NULL, NULL, '2023-07-01 14:15:20', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (633, 'ISA符号-3D', 'ISA符号-3D', '/profile/avatar/ISA-3D (54).svg', NULL, NULL, NULL, '2023-07-01 14:15:20', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (634, 'ISA符号-3D', 'ISA符号-3D', '/profile/avatar/ISA-3D (56).svg', NULL, NULL, NULL, '2023-07-01 14:15:20', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (635, 'ISA符号-3D', 'ISA符号-3D', '/profile/avatar/ISA-3D (55).svg', NULL, NULL, NULL, '2023-07-01 14:15:20', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (636, 'ISA符号-3D', 'ISA符号-3D', '/profile/avatar/ISA-3D (57).svg', NULL, NULL, NULL, '2023-07-01 14:15:20', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (637, 'ISA符号-3D', 'ISA符号-3D', '/profile/avatar/ISA-3D (59).svg', NULL, NULL, NULL, '2023-07-01 14:15:20', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (638, 'ISA符号-3D', 'ISA符号-3D', '/profile/avatar/ISA-3D (60).svg', NULL, NULL, NULL, '2023-07-01 14:15:20', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (639, 'ISA符号-3D', 'ISA符号-3D', '/profile/avatar/ISA-3D (58).svg', NULL, NULL, NULL, '2023-07-01 14:15:20', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (640, 'ISA符号-3D', 'ISA符号-3D', '/profile/avatar/ISA-3D (61).svg', NULL, NULL, NULL, '2023-07-01 14:15:20', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (641, 'ISA符号-3D', 'ISA符号-3D', '/profile/avatar/ISA-3D (64).svg', NULL, NULL, NULL, '2023-07-01 14:15:20', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (642, 'ISA符号-3D', 'ISA符号-3D', '/profile/avatar/ISA-3D (62).svg', NULL, NULL, NULL, '2023-07-01 14:15:21', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (643, 'ISA符号-3D', 'ISA符号-3D', '/profile/avatar/ISA-3D (65).svg', NULL, NULL, NULL, '2023-07-01 14:15:21', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (644, 'ISA符号-3D', 'ISA符号-3D', '/profile/avatar/ISA-3D (63).svg', NULL, NULL, NULL, '2023-07-01 14:15:21', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (645, 'ISA符号-3D', 'ISA符号-3D', '/profile/avatar/ISA-3D (66).svg', NULL, NULL, NULL, '2023-07-01 14:15:21', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (646, 'ISA符号-3D', 'ISA符号-3D', '/profile/avatar/ISA-3D (67).svg', NULL, NULL, NULL, '2023-07-01 14:15:21', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (647, 'ISA符号-3D', 'ISA符号-3D', '/profile/avatar/ISA-3D (68).svg', NULL, NULL, NULL, '2023-07-01 14:15:21', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (648, 'ISA符号-3D', 'ISA符号-3D', '/profile/avatar/ISA-3D (69).svg', NULL, NULL, NULL, '2023-07-01 14:15:21', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (649, 'ISA符号-3D', 'ISA符号-3D', '/profile/avatar/ISA-3D (71).svg', NULL, NULL, NULL, '2023-07-01 14:15:21', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (650, 'ISA符号-3D', 'ISA符号-3D', '/profile/avatar/ISA-3D (70).svg', NULL, NULL, NULL, '2023-07-01 14:15:21', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (651, 'ISA符号-3D', 'ISA符号-3D', '/profile/avatar/ISA-3D (72).svg', NULL, NULL, NULL, '2023-07-01 14:15:21', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (652, 'ISA符号-3D', 'ISA符号-3D', '/profile/avatar/ISA-3D (73).svg', NULL, NULL, NULL, '2023-07-01 14:15:21', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (653, 'ISA符号-3D', 'ISA符号-3D', '/profile/avatar/ISA-3D (74).svg', NULL, NULL, NULL, '2023-07-01 14:15:21', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (654, 'ISA符号-3D', 'ISA符号-3D', '/profile/avatar/ISA-3D (75).svg', NULL, NULL, NULL, '2023-07-01 14:15:22', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (655, 'ISA符号-3D', 'ISA符号-3D', '/profile/avatar/ISA-3D (76).svg', NULL, NULL, NULL, '2023-07-01 14:15:22', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (656, 'ISA符号-3D', 'ISA符号-3D', '/profile/avatar/ISA-3D (77).svg', NULL, NULL, NULL, '2023-07-01 14:15:22', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (657, 'ISA符号-3D', 'ISA符号-3D', '/profile/avatar/ISA-3D (78).svg', NULL, NULL, NULL, '2023-07-01 14:15:22', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (658, 'ISA符号-3D', 'ISA符号-3D', '/profile/avatar/ISA-3D (79).svg', NULL, NULL, NULL, '2023-07-01 14:15:22', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (659, 'ISA符号-3D', 'ISA符号-3D', '/profile/avatar/ISA-3D (80).svg', NULL, NULL, NULL, '2023-07-01 14:15:22', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (660, 'ISA符号-3D', 'ISA符号-3D', '/profile/avatar/ISA-3D (81).svg', NULL, NULL, NULL, '2023-07-01 14:15:22', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (661, 'ISA符号-3D', 'ISA符号-3D', '/profile/avatar/ISA-3D (82).svg', NULL, NULL, NULL, '2023-07-01 14:15:22', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (662, 'ISA符号-3D', 'ISA符号-3D', '/profile/avatar/ISA-3D (83).svg', NULL, NULL, NULL, '2023-07-01 14:15:22', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (663, 'ISA符号-3D', 'ISA符号-3D', '/profile/avatar/ISA-3D (84).svg', NULL, NULL, NULL, '2023-07-01 14:15:22', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (664, 'ISA符号-3D', 'ISA符号-3D', '/profile/avatar/ISA-3D (85).svg', NULL, NULL, NULL, '2023-07-01 14:15:22', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (665, 'ISA符号-3D', 'ISA符号-3D', '/profile/avatar/ISA-3D (86).svg', NULL, NULL, NULL, '2023-07-01 14:15:22', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (666, 'ISA符号-3D', 'ISA符号-3D', '/profile/avatar/ISA-3D (87).svg', NULL, NULL, NULL, '2023-07-01 14:15:23', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (667, 'ISA符号-3D', 'ISA符号-3D', '/profile/avatar/ISA-3D (89).svg', NULL, NULL, NULL, '2023-07-01 14:15:23', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (668, 'ISA符号-3D', 'ISA符号-3D', '/profile/avatar/ISA-3D (88).svg', NULL, NULL, NULL, '2023-07-01 14:15:23', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (669, 'ISA符号-3D', 'ISA符号-3D', '/profile/avatar/ISA-3D (90).svg', NULL, NULL, NULL, '2023-07-01 14:15:23', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (670, 'ISA符号-3D', 'ISA符号-3D', '/profile/avatar/ISA-3D (91).svg', NULL, NULL, NULL, '2023-07-01 14:15:23', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (671, 'ISA符号-3D', 'ISA符号-3D', '/profile/avatar/ISA-3D (93).svg', NULL, NULL, NULL, '2023-07-01 14:15:23', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (672, 'ISA符号-3D', 'ISA符号-3D', '/profile/avatar/ISA-3D (94).svg', NULL, NULL, NULL, '2023-07-01 14:15:23', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (673, 'ISA符号-3D', 'ISA符号-3D', '/profile/avatar/ISA-3D (92).svg', NULL, NULL, NULL, '2023-07-01 14:15:23', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (674, 'ISA符号-3D', 'ISA符号-3D', '/profile/avatar/ISA-3D (95).svg', NULL, NULL, NULL, '2023-07-01 14:15:23', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (675, 'ISA符号-3D', 'ISA符号-3D', '/profile/avatar/ISA-3D (98).svg', NULL, NULL, NULL, '2023-07-01 14:15:23', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (676, 'ISA符号-3D', 'ISA符号-3D', '/profile/avatar/ISA-3D (96).svg', NULL, NULL, NULL, '2023-07-01 14:15:23', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (677, 'ISA符号-3D', 'ISA符号-3D', '/profile/avatar/ISA-3D (97).svg', NULL, NULL, NULL, '2023-07-01 14:15:23', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (678, 'ISA符号-3D', 'ISA符号-3D', '/profile/avatar/ISA-3D (99).svg', NULL, NULL, NULL, '2023-07-01 14:15:24', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (679, 'ISA符号-3D', 'ISA符号-3D', '/profile/avatar/ISA-3D (102).svg', NULL, NULL, NULL, '2023-07-01 14:15:24', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (680, 'ISA符号-3D', 'ISA符号-3D', '/profile/avatar/ISA-3D (103).svg', NULL, NULL, NULL, '2023-07-01 14:15:24', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (681, 'ISA符号-3D', 'ISA符号-3D', '/profile/avatar/ISA-3D (104).svg', NULL, NULL, NULL, '2023-07-01 14:15:24', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (682, 'ISA符号-3D', 'ISA符号-3D', '/profile/avatar/ISA-3D (105).svg', NULL, NULL, NULL, '2023-07-01 14:15:24', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (683, 'ISA符号-3D', 'ISA符号-3D', '/profile/avatar/ISA-3D (106).svg', NULL, NULL, NULL, '2023-07-01 14:15:24', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (684, 'ISA符号-3D', 'ISA符号-3D', '/profile/avatar/ISA-3D (100).svg', NULL, NULL, NULL, '2023-07-01 14:15:24', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (685, 'ISA符号-3D', 'ISA符号-3D', '/profile/avatar/ISA-3D (109).svg', NULL, NULL, NULL, '2023-07-01 14:15:24', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (686, 'ISA符号-3D', 'ISA符号-3D', '/profile/avatar/ISA-3D (101).svg', NULL, NULL, NULL, '2023-07-01 14:15:24', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (687, 'ISA符号-3D', 'ISA符号-3D', '/profile/avatar/ISA-3D (108).svg', NULL, NULL, NULL, '2023-07-01 14:15:24', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (688, 'ISA符号-3D', 'ISA符号-3D', '/profile/avatar/ISA-3D (107).svg', NULL, NULL, NULL, '2023-07-01 14:15:24', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (689, 'ISA符号-3D', 'ISA符号-3D', '/profile/avatar/ISA-3D (110).svg', NULL, NULL, NULL, '2023-07-01 14:15:24', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (690, 'ISA符号-3D', 'ISA符号-3D', '/profile/avatar/ISA-3D (111).svg', NULL, NULL, NULL, '2023-07-01 14:15:25', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (691, 'ISA符号-3D', 'ISA符号-3D', '/profile/avatar/ISA-3D (116).svg', NULL, NULL, NULL, '2023-07-01 14:15:25', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (692, 'ISA符号-3D', 'ISA符号-3D', '/profile/avatar/ISA-3D (114).svg', NULL, NULL, NULL, '2023-07-01 14:15:25', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (693, 'ISA符号-3D', 'ISA符号-3D', '/profile/avatar/ISA-3D (112).svg', NULL, NULL, NULL, '2023-07-01 14:15:25', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (694, 'ISA符号-3D', 'ISA符号-3D', '/profile/avatar/ISA-3D (113).svg', NULL, NULL, NULL, '2023-07-01 14:15:25', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (695, 'ISA符号-3D', 'ISA符号-3D', '/profile/avatar/ISA-3D (115).svg', NULL, NULL, NULL, '2023-07-01 14:15:25', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (696, 'ISA符号-3D', 'ISA符号-3D', '/profile/avatar/ISA-3D (117).svg', NULL, NULL, NULL, '2023-07-01 14:15:25', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (697, 'ISA符号-3D', 'ISA符号-3D', '/profile/avatar/ISA-3D (118).svg', NULL, NULL, NULL, '2023-07-01 14:15:25', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (698, 'ISA符号-3D', 'ISA符号-3D', '/profile/avatar/ISA-3D (121).svg', NULL, NULL, NULL, '2023-07-01 14:15:25', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (699, 'ISA符号-3D', 'ISA符号-3D', '/profile/avatar/ISA-3D (119).svg', NULL, NULL, NULL, '2023-07-01 14:15:25', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (700, 'ISA符号-3D', 'ISA符号-3D', '/profile/avatar/ISA-3D (120).svg', NULL, NULL, NULL, '2023-07-01 14:15:25', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (701, 'ISA符号-3D', 'ISA符号-3D', '/profile/avatar/ISA-3D (122).svg', NULL, NULL, NULL, '2023-07-01 14:15:25', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (702, 'ISA符号-3D', 'ISA符号-3D', '/profile/avatar/ISA-3D (123).svg', NULL, NULL, NULL, '2023-07-01 14:15:25', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (703, '电机', '电机', '/profile/avatar/电动机 (1).svg', NULL, NULL, NULL, '2023-07-01 14:17:18', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (704, '电机', '电机', '/profile/avatar/电动机 (4).svg', NULL, NULL, NULL, '2023-07-01 14:17:18', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (705, '电机', '电机', '/profile/avatar/电动机 (5).svg', NULL, NULL, NULL, '2023-07-01 14:17:18', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (706, '电机', '电机', '/profile/avatar/电动机 (3).svg', NULL, NULL, NULL, '2023-07-01 14:17:18', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (707, '电机', '电机', '/profile/avatar/电动机 (2).svg', NULL, NULL, NULL, '2023-07-01 14:17:18', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (708, '电机', '电机', '/profile/avatar/电动机 (6).svg', NULL, NULL, NULL, '2023-07-01 14:17:18', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (709, '电机', '电机', '/profile/avatar/电动机 (7).svg', NULL, NULL, NULL, '2023-07-01 14:17:18', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (710, '电机', '电机', '/profile/avatar/电动机 (8).svg', NULL, NULL, NULL, '2023-07-01 14:17:19', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (711, '电机', '电机', '/profile/avatar/电动机 (10).svg', NULL, NULL, NULL, '2023-07-01 14:17:19', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (712, '电机', '电机', '/profile/avatar/电动机 (9).svg', NULL, NULL, NULL, '2023-07-01 14:17:19', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (713, '电机', '电机', '/profile/avatar/电动机 (14).svg', NULL, NULL, NULL, '2023-07-01 14:17:19', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (714, '电机', '电机', '/profile/avatar/电动机 (13).svg', NULL, NULL, NULL, '2023-07-01 14:17:19', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (715, '电机', '电机', '/profile/avatar/电动机 (18).svg', NULL, NULL, NULL, '2023-07-01 14:17:19', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (716, '电机', '电机', '/profile/avatar/电动机 (12).svg', NULL, NULL, NULL, '2023-07-01 14:17:19', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (717, '电机', '电机', '/profile/avatar/电动机 (20).svg', NULL, NULL, NULL, '2023-07-01 14:17:19', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (718, '电机', '电机', '/profile/avatar/电动机 (16).svg', NULL, NULL, NULL, '2023-07-01 14:17:19', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (719, '电机', '电机', '/profile/avatar/电动机 (17).svg', NULL, NULL, NULL, '2023-07-01 14:17:19', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (720, '电机', '电机', '/profile/avatar/电动机 (15).svg', NULL, NULL, NULL, '2023-07-01 14:17:19', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (721, '电机', '电机', '/profile/avatar/电动机 (11).svg', NULL, NULL, NULL, '2023-07-01 14:17:19', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (722, '电机', '电机', '/profile/avatar/电动机 (19).svg', NULL, NULL, NULL, '2023-07-01 14:17:20', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (723, '电机', '电机', '/profile/avatar/电动机 (21).svg', NULL, NULL, NULL, '2023-07-01 14:17:20', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (724, '电机', '电机', '/profile/avatar/电动机 (24).svg', NULL, NULL, NULL, '2023-07-01 14:17:20', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (725, '电机', '电机', '/profile/avatar/电动机 (23).svg', NULL, NULL, NULL, '2023-07-01 14:17:20', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (726, '电机', '电机', '/profile/avatar/电动机 (25).svg', NULL, NULL, NULL, '2023-07-01 14:17:20', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (727, '电机', '电机', '/profile/avatar/电动机 (22).svg', NULL, NULL, NULL, '2023-07-01 14:17:20', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (728, '电机', '电机', '/profile/avatar/电动机 (26).svg', NULL, NULL, NULL, '2023-07-01 14:17:20', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (729, '电机', '电机', '/profile/avatar/电动机 (27).svg', NULL, NULL, NULL, '2023-07-01 14:17:20', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (730, '电机', '电机', '/profile/avatar/电动机 (29).svg', NULL, NULL, NULL, '2023-07-01 14:17:20', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (731, '电机', '电机', '/profile/avatar/电动机 (28).svg', NULL, NULL, NULL, '2023-07-01 14:17:20', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (732, '电机', '电机', '/profile/avatar/电动机 (31).svg', NULL, NULL, NULL, '2023-07-01 14:17:20', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (733, '电机', '电机', '/profile/avatar/电动机 (30).svg', NULL, NULL, NULL, '2023-07-01 14:17:20', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (734, '电机', '电机', '/profile/avatar/电动机 (32).svg', NULL, NULL, NULL, '2023-07-01 14:17:20', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (735, '电机', '电机', '/profile/avatar/电动机 (33).svg', NULL, NULL, NULL, '2023-07-01 14:17:21', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (736, '电力 (1).svg', '电力', '/profile/avatar/电力 (1).svg', NULL, NULL, NULL, '2023-07-01 14:18:18', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (737, '电力 (5).svg', '电力', '/profile/avatar/电力 (5).svg', NULL, NULL, NULL, '2023-07-01 14:18:19', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (738, '电力 (3).svg', '电力', '/profile/avatar/电力 (3).svg', NULL, NULL, NULL, '2023-07-01 14:18:19', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (739, '电力 (4).svg', '电力', '/profile/avatar/电力 (4).svg', NULL, NULL, NULL, '2023-07-01 14:18:19', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (740, '电力 (2).svg', '电力', '/profile/avatar/电力 (2).svg', NULL, NULL, NULL, '2023-07-01 14:18:19', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (741, '电力 (6).svg', '电力', '/profile/avatar/电力 (6).svg', NULL, NULL, NULL, '2023-07-01 14:18:19', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (742, '电力 (7).svg', '电力', '/profile/avatar/电力 (7).svg', NULL, NULL, NULL, '2023-07-01 14:18:19', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (743, '电力 (8).svg', '电力', '/profile/avatar/电力 (8).svg', NULL, NULL, NULL, '2023-07-01 14:18:19', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (744, '电力 (9).svg', '电力', '/profile/avatar/电力 (9).svg', NULL, NULL, NULL, '2023-07-01 14:18:19', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (745, '电力', '电力', '/profile/avatar/电力 (10).svg', NULL, NULL, NULL, '2023-07-01 14:18:19', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (746, '电力', '电力', '/profile/avatar/电力 (11).svg', NULL, NULL, NULL, '2023-07-01 14:18:19', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (747, '电力', '电力', '/profile/avatar/电力 (12).svg', NULL, NULL, NULL, '2023-07-01 14:18:19', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (748, '电力', '电力', '/profile/avatar/电力 (13).svg', NULL, NULL, NULL, '2023-07-01 14:18:19', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (749, '电力', '电力', '/profile/avatar/电力 (14).svg', NULL, NULL, NULL, '2023-07-01 14:18:20', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (750, '电力', '电力', '/profile/avatar/电力 (17).svg', NULL, NULL, NULL, '2023-07-01 14:18:20', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (751, '电力', '电力', '/profile/avatar/电力 (18).svg', NULL, NULL, NULL, '2023-07-01 14:18:20', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (752, '电力', '电力', '/profile/avatar/电力 (15).svg', NULL, NULL, NULL, '2023-07-01 14:18:20', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (753, '电力', '电力', '/profile/avatar/电力 (19).svg', NULL, NULL, NULL, '2023-07-01 14:18:20', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (754, '电力', '电力', '/profile/avatar/电力 (16).svg', NULL, NULL, NULL, '2023-07-01 14:18:20', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (755, '电力', '电力', '/profile/avatar/电力 (20).svg', NULL, NULL, NULL, '2023-07-01 14:18:20', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (756, '电力', '电力', '/profile/avatar/电力 (21).svg', NULL, NULL, NULL, '2023-07-01 14:18:20', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (757, '电力', '电力', '/profile/avatar/电力 (26).svg', NULL, NULL, NULL, '2023-07-01 14:18:20', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (758, '电力', '电力', '/profile/avatar/电力 (22).svg', NULL, NULL, NULL, '2023-07-01 14:18:20', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (759, '电力', '电力', '/profile/avatar/电力 (25).svg', NULL, NULL, NULL, '2023-07-01 14:18:20', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (760, '电力', '电力', '/profile/avatar/电力 (23).svg', NULL, NULL, NULL, '2023-07-01 14:18:20', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (761, '电力', '电力', '/profile/avatar/电力 (24).svg', NULL, NULL, NULL, '2023-07-01 14:18:20', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (762, '电力', '电力', '/profile/avatar/电力 (28).svg', NULL, NULL, NULL, '2023-07-01 14:18:20', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (763, '电力', '电力', '/profile/avatar/电力 (27).svg', NULL, NULL, NULL, '2023-07-01 14:18:21', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (764, '电力', '电力', '/profile/avatar/电力 (30).svg', NULL, NULL, NULL, '2023-07-01 14:18:21', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (765, '电力', '电力', '/profile/avatar/电力 (31).svg', NULL, NULL, NULL, '2023-07-01 14:18:21', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (766, '电力', '电力', '/profile/avatar/电力 (29).svg', NULL, NULL, NULL, '2023-07-01 14:18:21', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (767, '电力', '电力', '/profile/avatar/电力 (32).svg', NULL, NULL, NULL, '2023-07-01 14:18:21', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (768, '电力', '电力', '/profile/avatar/电力 (35).svg', NULL, NULL, NULL, '2023-07-01 14:18:21', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (769, '电力', '电力', '/profile/avatar/电力 (36).svg', NULL, NULL, NULL, '2023-07-01 14:18:21', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (770, '电力', '电力', '/profile/avatar/电力 (33).svg', NULL, NULL, NULL, '2023-07-01 14:18:21', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (771, '电力', '电力', '/profile/avatar/电力 (34).svg', NULL, NULL, NULL, '2023-07-01 14:18:21', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (772, '电力', '电力', '/profile/avatar/电力 (37).svg', NULL, NULL, NULL, '2023-07-01 14:18:21', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (773, '电力', '电力', '/profile/avatar/电力 (38).svg', NULL, NULL, NULL, '2023-07-01 14:18:21', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (774, '电力', '电力', '/profile/avatar/电力 (40).svg', NULL, NULL, NULL, '2023-07-01 14:18:21', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (775, '电力', '电力', '/profile/avatar/电力 (43).svg', NULL, NULL, NULL, '2023-07-01 14:18:21', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (776, '电力', '电力', '/profile/avatar/电力 (39).svg', NULL, NULL, NULL, '2023-07-01 14:18:21', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (777, '电力', '电力', '/profile/avatar/电力 (41).svg', NULL, NULL, NULL, '2023-07-01 14:18:21', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (778, '电力', '电力', '/profile/avatar/电力 (44).svg', NULL, NULL, NULL, '2023-07-01 14:18:21', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (779, '电力', '电力', '/profile/avatar/电力 (46).svg', NULL, NULL, NULL, '2023-07-01 14:18:22', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (780, '电力', '电力', '/profile/avatar/电力 (42).svg', NULL, NULL, NULL, '2023-07-01 14:18:22', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (781, '电力', '电力', '/profile/avatar/电力 (47).svg', NULL, NULL, NULL, '2023-07-01 14:18:22', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (782, '电力', '电力', '/profile/avatar/电力 (49).svg', NULL, NULL, NULL, '2023-07-01 14:18:22', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (783, '电力', '电力', '/profile/avatar/电力 (45).svg', NULL, NULL, NULL, '2023-07-01 14:18:22', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (784, '电力', '电力', '/profile/avatar/电力 (48).svg', NULL, NULL, NULL, '2023-07-01 14:18:22', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (785, '电力', '电力', '/profile/avatar/电力 (50).svg', NULL, NULL, NULL, '2023-07-01 14:18:22', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (786, '电力', '电力', '/profile/avatar/电力 (51).svg', NULL, NULL, NULL, '2023-07-01 14:18:22', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (787, '电力', '电力', '/profile/avatar/电力 (54).svg', NULL, NULL, NULL, '2023-07-01 14:18:22', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (788, '电力', '电力', '/profile/avatar/电力 (53).svg', NULL, NULL, NULL, '2023-07-01 14:18:22', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (789, '电力', '电力', '/profile/avatar/电力 (52).svg', NULL, NULL, NULL, '2023-07-01 14:18:22', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (790, '电力', '电力', '/profile/avatar/电力 (56).svg', NULL, NULL, NULL, '2023-07-01 14:18:22', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (791, '电力', '电力', '/profile/avatar/电力 (55).svg', NULL, NULL, NULL, '2023-07-01 14:18:23', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (792, '电力', '电力', '/profile/avatar/电力 (57).svg', NULL, NULL, NULL, '2023-07-01 14:18:23', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (793, '电力', '电力', '/profile/avatar/电力 (59).svg', NULL, NULL, NULL, '2023-07-01 14:18:23', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (794, '电力', '电力', '/profile/avatar/电力 (58).svg', NULL, NULL, NULL, '2023-07-01 14:18:23', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (795, '电气符号', '电气符号', '/profile/avatar/电力符号 (1).svg', NULL, NULL, NULL, '2023-07-01 14:18:54', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (796, '电气符号', '电气符号', '/profile/avatar/电力符号 (3).svg', NULL, NULL, NULL, '2023-07-01 14:18:55', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (797, '电气符号', '电气符号', '/profile/avatar/电力符号 (5).svg', NULL, NULL, NULL, '2023-07-01 14:18:55', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (798, '电气符号', '电气符号', '/profile/avatar/电力符号 (4).svg', NULL, NULL, NULL, '2023-07-01 14:18:55', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (799, '电气符号', '电气符号', '/profile/avatar/电力符号 (6).svg', NULL, NULL, NULL, '2023-07-01 14:18:55', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (800, '电气符号', '电气符号', '/profile/avatar/电力符号 (2).svg', NULL, NULL, NULL, '2023-07-01 14:18:55', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (801, '电气符号', '电气符号', '/profile/avatar/电力符号 (7).svg', NULL, NULL, NULL, '2023-07-01 14:18:55', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (802, '电气符号', '电气符号', '/profile/avatar/电力符号 (8).svg', NULL, NULL, NULL, '2023-07-01 14:18:55', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (803, '电气符号', '电气符号', '/profile/avatar/电力符号 (9).svg', NULL, NULL, NULL, '2023-07-01 14:18:55', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (804, '电气符号', '电气符号', '/profile/avatar/电力符号 (12).svg', NULL, NULL, NULL, '2023-07-01 14:18:55', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (805, '电气符号', '电气符号', '/profile/avatar/电力符号 (11).svg', NULL, NULL, NULL, '2023-07-01 14:18:55', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (806, '电气符号', '电气符号', '/profile/avatar/电力符号 (10).svg', NULL, NULL, NULL, '2023-07-01 14:18:55', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (807, '电气符号', '电气符号', '/profile/avatar/电力符号 (15).svg', NULL, NULL, NULL, '2023-07-01 14:18:55', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (808, '电气符号', '电气符号', '/profile/avatar/电力符号 (14).svg', NULL, NULL, NULL, '2023-07-01 14:18:55', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (809, '电气符号', '电气符号', '/profile/avatar/电力符号 (13).svg', NULL, NULL, NULL, '2023-07-01 14:18:55', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (810, '电气符号', '电气符号', '/profile/avatar/电力符号 (16).svg', NULL, NULL, NULL, '2023-07-01 14:18:55', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (811, '电气符号', '电气符号', '/profile/avatar/电力符号 (17).svg', NULL, NULL, NULL, '2023-07-01 14:18:55', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (812, '电气符号', '电气符号', '/profile/avatar/电力符号 (19).svg', NULL, NULL, NULL, '2023-07-01 14:18:55', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (813, '电气符号', '电气符号', '/profile/avatar/电力符号 (18).svg', NULL, NULL, NULL, '2023-07-01 14:18:56', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (814, '电气符号', '电气符号', '/profile/avatar/电力符号 (21).svg', NULL, NULL, NULL, '2023-07-01 14:18:56', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (815, '电气符号', '电气符号', '/profile/avatar/电力符号 (20).svg', NULL, NULL, NULL, '2023-07-01 14:18:56', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (816, '电气符号', '电气符号', '/profile/avatar/电力符号 (27).svg', NULL, NULL, NULL, '2023-07-01 14:18:56', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (817, '电气符号', '电气符号', '/profile/avatar/电力符号 (23).svg', NULL, NULL, NULL, '2023-07-01 14:18:56', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (818, '电气符号', '电气符号', '/profile/avatar/电力符号 (24).svg', NULL, NULL, NULL, '2023-07-01 14:18:56', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (819, '电气符号', '电气符号', '/profile/avatar/电力符号 (22).svg', NULL, NULL, NULL, '2023-07-01 14:18:56', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (820, '电气符号', '电气符号', '/profile/avatar/电力符号 (25).svg', NULL, NULL, NULL, '2023-07-01 14:18:56', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (821, '电气符号', '电气符号', '/profile/avatar/电力符号 (26).svg', NULL, NULL, NULL, '2023-07-01 14:18:57', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (822, '电气符号', '电气符号', '/profile/avatar/电力符号 (31).svg', NULL, NULL, NULL, '2023-07-01 14:18:57', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (823, '电气符号', '电气符号', '/profile/avatar/电力符号 (28).svg', NULL, NULL, NULL, '2023-07-01 14:18:57', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (824, '电气符号', '电气符号', '/profile/avatar/电力符号 (30).svg', NULL, NULL, NULL, '2023-07-01 14:18:57', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (825, '电气符号', '电气符号', '/profile/avatar/电力符号 (29).svg', NULL, NULL, NULL, '2023-07-01 14:18:57', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (826, '电气符号', '电气符号', '/profile/avatar/电力符号 (32).svg', NULL, NULL, NULL, '2023-07-01 14:18:57', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (827, '电气符号', '电气符号', '/profile/avatar/电力符号 (33).svg', NULL, NULL, NULL, '2023-07-01 14:18:57', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (828, '电气符号', '电气符号', '/profile/avatar/电力符号 (35).svg', NULL, NULL, NULL, '2023-07-01 14:18:57', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (829, '电气符号', '电气符号', '/profile/avatar/电力符号 (37).svg', NULL, NULL, NULL, '2023-07-01 14:18:57', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (830, '电气符号', '电气符号', '/profile/avatar/电力符号 (34).svg', NULL, NULL, NULL, '2023-07-01 14:18:57', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (831, '电气符号', '电气符号', '/profile/avatar/电力符号 (38).svg', NULL, NULL, NULL, '2023-07-01 14:18:57', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (832, '电气符号', '电气符号', '/profile/avatar/电力符号 (36).svg', NULL, NULL, NULL, '2023-07-01 14:18:57', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (833, '电气符号', '电气符号', '/profile/avatar/电力符号 (39).svg', NULL, NULL, NULL, '2023-07-01 14:18:57', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (834, '电气符号', '电气符号', '/profile/avatar/电力符号 (40).svg', NULL, NULL, NULL, '2023-07-01 14:18:58', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (835, '电气符号', '电气符号', '/profile/avatar/电力符号 (42).svg', NULL, NULL, NULL, '2023-07-01 14:18:58', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (836, '电气符号', '电气符号', '/profile/avatar/电力符号 (41).svg', NULL, NULL, NULL, '2023-07-01 14:18:58', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (837, '电气符号', '电气符号', '/profile/avatar/电力符号 (44).svg', NULL, NULL, NULL, '2023-07-01 14:18:58', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (838, '电气符号', '电气符号', '/profile/avatar/电力符号 (43).svg', NULL, NULL, NULL, '2023-07-01 14:18:58', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (839, '电气符号', '电气符号', '/profile/avatar/电力符号 (45).svg', NULL, NULL, NULL, '2023-07-01 14:18:58', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (840, '电气符号', '电气符号', '/profile/avatar/电力符号 (46).svg', NULL, NULL, NULL, '2023-07-01 14:18:58', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (841, '电气符号', '电气符号', '/profile/avatar/电力符号 (52).svg', NULL, NULL, NULL, '2023-07-01 14:18:58', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (842, '电气符号', '电气符号', '/profile/avatar/电力符号 (50).svg', NULL, NULL, NULL, '2023-07-01 14:18:58', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (843, '电气符号', '电气符号', '/profile/avatar/电力符号 (47).svg', NULL, NULL, NULL, '2023-07-01 14:18:58', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (844, '电气符号', '电气符号', '/profile/avatar/电力符号 (49).svg', NULL, NULL, NULL, '2023-07-01 14:18:58', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (845, '电气符号', '电气符号', '/profile/avatar/电力符号 (53).svg', NULL, NULL, NULL, '2023-07-01 14:18:58', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (846, '电气符号', '电气符号', '/profile/avatar/电力符号 (51).svg', NULL, NULL, NULL, '2023-07-01 14:18:58', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (847, '电气符号', '电气符号', '/profile/avatar/电力符号 (48).svg', NULL, NULL, NULL, '2023-07-01 14:18:59', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (848, '电气符号', '电气符号', '/profile/avatar/电力符号 (54).svg', NULL, NULL, NULL, '2023-07-01 14:18:59', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (849, '电气符号', '电气符号', '/profile/avatar/电力符号 (56).svg', NULL, NULL, NULL, '2023-07-01 14:18:59', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (850, '电气符号', '电气符号', '/profile/avatar/电力符号 (55).svg', NULL, NULL, NULL, '2023-07-01 14:18:59', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (851, '电气符号', '电气符号', '/profile/avatar/电力符号 (57).svg', NULL, NULL, NULL, '2023-07-01 14:18:59', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (852, '电气符号', '电气符号', '/profile/avatar/电力符号 (58).svg', NULL, NULL, NULL, '2023-07-01 14:18:59', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (853, '电气符号', '电气符号', '/profile/avatar/电力符号 (60).svg', NULL, NULL, NULL, '2023-07-01 14:18:59', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (854, '电气符号', '电气符号', '/profile/avatar/电力符号 (59).svg', NULL, NULL, NULL, '2023-07-01 14:18:59', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (855, '电气符号', '电气符号', '/profile/avatar/电力符号 (61).svg', NULL, NULL, NULL, '2023-07-01 14:18:59', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (856, '电气符号', '电气符号', '/profile/avatar/电力符号 (63).svg', NULL, NULL, NULL, '2023-07-01 14:18:59', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (857, '电气符号', '电气符号', '/profile/avatar/电力符号 (62).svg', NULL, NULL, NULL, '2023-07-01 14:18:59', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (858, '电气符号', '电气符号', '/profile/avatar/电力符号 (65).svg', NULL, NULL, NULL, '2023-07-01 14:18:59', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (859, '电气符号', '电气符号', '/profile/avatar/电力符号 (64).svg', NULL, NULL, NULL, '2023-07-01 14:19:00', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (860, '电气符号', '电气符号', '/profile/avatar/电力符号 (66).svg', NULL, NULL, NULL, '2023-07-01 14:19:00', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (861, '电气符号', '电气符号', '/profile/avatar/电力符号 (67).svg', NULL, NULL, NULL, '2023-07-01 14:19:00', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (862, '电气符号', '电气符号', '/profile/avatar/电力符号 (68).svg', NULL, NULL, NULL, '2023-07-01 14:19:00', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (863, '电气符号', '电气符号', '/profile/avatar/电力符号 (70).svg', NULL, NULL, NULL, '2023-07-01 14:19:00', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (864, '电气符号', '电气符号', '/profile/avatar/电力符号 (69).svg', NULL, NULL, NULL, '2023-07-01 14:19:00', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (865, '电气符号', '电气符号', '/profile/avatar/电力符号 (71).svg', NULL, NULL, NULL, '2023-07-01 14:19:00', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (866, '电气符号', '电气符号', '/profile/avatar/电力符号 (72).svg', NULL, NULL, NULL, '2023-07-01 14:19:00', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (867, '电气符号', '电气符号', '/profile/avatar/电力符号 (73).svg', NULL, NULL, NULL, '2023-07-01 14:19:00', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (868, '定标器标尺', '定标器标尺', '/profile/avatar/dingbiaoqi (1).svg', NULL, NULL, NULL, '2023-07-01 14:20:48', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (869, '定标器标尺', '定标器标尺', '/profile/avatar/dingbiaoqi (2).svg', NULL, NULL, NULL, '2023-07-01 14:20:48', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (870, '定标器标尺', '定标器标尺', '/profile/avatar/dingbiaoqi (3).svg', NULL, NULL, NULL, '2023-07-01 14:20:48', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (871, '定标器标尺', '定标器标尺', '/profile/avatar/dingbiaoqi (6).svg', NULL, NULL, NULL, '2023-07-01 14:20:48', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (872, '定标器标尺', '定标器标尺', '/profile/avatar/dingbiaoqi (4).svg', NULL, NULL, NULL, '2023-07-01 14:20:48', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (873, '定标器标尺', '定标器标尺', '/profile/avatar/dingbiaoqi (5).svg', NULL, NULL, NULL, '2023-07-01 14:20:48', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (874, '定标器标尺', '定标器标尺', '/profile/avatar/dingbiaoqi (7).svg', NULL, NULL, NULL, '2023-07-01 14:20:49', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (875, '定标器标尺', '定标器标尺', '/profile/avatar/dingbiaoqi (9).svg', NULL, NULL, NULL, '2023-07-01 14:20:49', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (876, '定标器标尺', '定标器标尺', '/profile/avatar/dingbiaoqi (8).svg', NULL, NULL, NULL, '2023-07-01 14:20:49', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (877, '定标器标尺', '定标器标尺', '/profile/avatar/dingbiaoqi (12).svg', NULL, NULL, NULL, '2023-07-01 14:20:49', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (878, '定标器标尺', '定标器标尺', '/profile/avatar/dingbiaoqi (10).svg', NULL, NULL, NULL, '2023-07-01 14:20:49', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (879, '定标器标尺', '定标器标尺', '/profile/avatar/dingbiaoqi (11).svg', NULL, NULL, NULL, '2023-07-01 14:20:49', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (880, '方形管道', '方形管道', '/profile/avatar/fangxingguandao (1).svg', NULL, NULL, NULL, '2023-07-01 14:22:22', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (881, '方形管道', '方形管道', '/profile/avatar/fangxingguandao (2).svg', NULL, NULL, NULL, '2023-07-01 14:22:22', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (882, '方形管道', '方形管道', '/profile/avatar/fangxingguandao (4).svg', NULL, NULL, NULL, '2023-07-01 14:22:22', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (883, '方形管道', '方形管道', '/profile/avatar/fangxingguandao (5).svg', NULL, NULL, NULL, '2023-07-01 14:22:22', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (884, '方形管道', '方形管道', '/profile/avatar/fangxingguandao (6).svg', NULL, NULL, NULL, '2023-07-01 14:22:22', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (885, '方形管道', '方形管道', '/profile/avatar/fangxingguandao (3).svg', NULL, NULL, NULL, '2023-07-01 14:22:22', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (886, '方形管道', '方形管道', '/profile/avatar/fangxingguandao (7).svg', NULL, NULL, NULL, '2023-07-01 14:22:22', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (887, '方形管道', '方形管道', '/profile/avatar/fangxingguandao (8).svg', NULL, NULL, NULL, '2023-07-01 14:22:22', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (888, '方形管道', '方形管道', '/profile/avatar/fangxingguandao (11).svg', NULL, NULL, NULL, '2023-07-01 14:22:22', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (889, '方形管道', '方形管道', '/profile/avatar/fangxingguandao (10).svg', NULL, NULL, NULL, '2023-07-01 14:22:22', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (890, '方形管道', '方形管道', '/profile/avatar/fangxingguandao (9).svg', NULL, NULL, NULL, '2023-07-01 14:22:22', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (891, '方形管道', '方形管道', '/profile/avatar/fangxingguandao (13).svg', NULL, NULL, NULL, '2023-07-01 14:22:22', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (892, '方形管道', '方形管道', '/profile/avatar/fangxingguandao (12).svg', NULL, NULL, NULL, '2023-07-01 14:22:22', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (893, '方形管道', '方形管道', '/profile/avatar/fangxingguandao (15).svg', NULL, NULL, NULL, '2023-07-01 14:22:23', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (894, '方形管道', '方形管道', '/profile/avatar/fangxingguandao (17).svg', NULL, NULL, NULL, '2023-07-01 14:22:23', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (895, '方形管道', '方形管道', '/profile/avatar/fangxingguandao (18).svg', NULL, NULL, NULL, '2023-07-01 14:22:23', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (896, '方形管道', '方形管道', '/profile/avatar/fangxingguandao (14).svg', NULL, NULL, NULL, '2023-07-01 14:22:23', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (897, '方形管道', '方形管道', '/profile/avatar/fangxingguandao (16).svg', NULL, NULL, NULL, '2023-07-01 14:22:23', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (898, '方形管道', '方形管道', '/profile/avatar/fangxingguandao (19).svg', NULL, NULL, NULL, '2023-07-01 14:22:23', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (899, '方形管道', '方形管道', '/profile/avatar/fangxingguandao (20).svg', NULL, NULL, NULL, '2023-07-01 14:22:23', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (900, '方形管道', '方形管道', '/profile/avatar/fangxingguandao (21).svg', NULL, NULL, NULL, '2023-07-01 14:22:23', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (901, '方形管道', '方形管道', '/profile/avatar/fangxingguandao (24).svg', NULL, NULL, NULL, '2023-07-01 14:22:23', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (902, '方形管道', '方形管道', '/profile/avatar/fangxingguandao (25).svg', NULL, NULL, NULL, '2023-07-01 14:22:23', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (903, '方形管道', '方形管道', '/profile/avatar/fangxingguandao (23).svg', NULL, NULL, NULL, '2023-07-01 14:22:23', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (904, '方形管道', '方形管道', '/profile/avatar/fangxingguandao (22).svg', NULL, NULL, NULL, '2023-07-01 14:22:23', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (905, '方形管道', '方形管道', '/profile/avatar/fangxingguandao (27).svg', NULL, NULL, NULL, '2023-07-01 14:22:24', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (906, '方形管道', '方形管道', '/profile/avatar/fangxingguandao (29).svg', NULL, NULL, NULL, '2023-07-01 14:22:24', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (907, '方形管道', '方形管道', '/profile/avatar/fangxingguandao (28).svg', NULL, NULL, NULL, '2023-07-01 14:22:24', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (908, '方形管道', '方形管道', '/profile/avatar/fangxingguandao (30).svg', NULL, NULL, NULL, '2023-07-01 14:22:24', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (909, '方形管道', '方形管道', '/profile/avatar/fangxingguandao (32).svg', NULL, NULL, NULL, '2023-07-01 14:22:24', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (910, '方形管道', '方形管道', '/profile/avatar/fangxingguandao (31).svg', NULL, NULL, NULL, '2023-07-01 14:22:24', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (911, '方形管道', '方形管道', '/profile/avatar/fangxingguandao (33).svg', NULL, NULL, NULL, '2023-07-01 14:22:24', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (912, '方形管道', '方形管道', '/profile/avatar/fangxingguandao (26).svg', NULL, NULL, NULL, '2023-07-01 14:22:24', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (913, '方形管道', '方形管道', '/profile/avatar/fangxingguandao (34).svg', NULL, NULL, NULL, '2023-07-01 14:22:24', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (914, '方形管道', '方形管道', '/profile/avatar/fangxingguandao (36).svg', NULL, NULL, NULL, '2023-07-01 14:22:24', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (915, '方形管道', '方形管道', '/profile/avatar/fangxingguandao (35).svg', NULL, NULL, NULL, '2023-07-01 14:22:24', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (916, '方形管道', '方形管道', '/profile/avatar/fangxingguandao (37).svg', NULL, NULL, NULL, '2023-07-01 14:22:24', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (917, '方形管道', '方形管道', '/profile/avatar/fangxingguandao (39).svg', NULL, NULL, NULL, '2023-07-01 14:22:24', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (918, '方形管道', '方形管道', '/profile/avatar/fangxingguandao (38).svg', NULL, NULL, NULL, '2023-07-01 14:22:24', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (919, '方形管道', '方形管道', '/profile/avatar/fangxingguandao (43).svg', NULL, NULL, NULL, '2023-07-01 14:22:25', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (920, '方形管道', '方形管道', '/profile/avatar/fangxingguandao (42).svg', NULL, NULL, NULL, '2023-07-01 14:22:25', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (921, '方形管道', '方形管道', '/profile/avatar/fangxingguandao (40).svg', NULL, NULL, NULL, '2023-07-01 14:22:25', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (922, '方形管道', '方形管道', '/profile/avatar/fangxingguandao (41).svg', NULL, NULL, NULL, '2023-07-01 14:22:25', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (923, '方形管道', '方形管道', '/profile/avatar/fangxingguandao (44).svg', NULL, NULL, NULL, '2023-07-01 14:22:25', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (924, '方形管道', '方形管道', '/profile/avatar/fangxingguandao (45).svg', NULL, NULL, NULL, '2023-07-01 14:22:25', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (925, '方形管道', '方形管道', '/profile/avatar/fangxingguandao (47).svg', NULL, NULL, NULL, '2023-07-01 14:22:25', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (926, '方形管道', '方形管道', '/profile/avatar/fangxingguandao (48).svg', NULL, NULL, NULL, '2023-07-01 14:22:25', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (927, '方形管道', '方形管道', '/profile/avatar/fangxingguandao (46).svg', NULL, NULL, NULL, '2023-07-01 14:22:25', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (928, '分段管道', '分段管道', '/profile/avatar/fenduanguandao (1).svg', NULL, NULL, NULL, '2023-07-01 14:23:05', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (929, '分段管道', '分段管道', '/profile/avatar/fenduanguandao (3).svg', NULL, NULL, NULL, '2023-07-01 14:23:05', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (930, '分段管道', '分段管道', '/profile/avatar/fenduanguandao (5).svg', NULL, NULL, NULL, '2023-07-01 14:23:05', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (931, '分段管道', '分段管道', '/profile/avatar/fenduanguandao (2).svg', NULL, NULL, NULL, '2023-07-01 14:23:05', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (932, '分段管道', '分段管道', '/profile/avatar/fenduanguandao (4).svg', NULL, NULL, NULL, '2023-07-01 14:23:05', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (933, '分段管道', '分段管道', '/profile/avatar/fenduanguandao (6).svg', NULL, NULL, NULL, '2023-07-01 14:23:05', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (934, '分段管道', '分段管道', '/profile/avatar/fenduanguandao (7).svg', NULL, NULL, NULL, '2023-07-01 14:23:05', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (935, '分段管道', '分段管道', '/profile/avatar/fenduanguandao (12).svg', NULL, NULL, NULL, '2023-07-01 14:23:05', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (936, '分段管道', '分段管道', '/profile/avatar/fenduanguandao (9).svg', NULL, NULL, NULL, '2023-07-01 14:23:05', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (937, '分段管道', '分段管道', '/profile/avatar/fenduanguandao (10).svg', NULL, NULL, NULL, '2023-07-01 14:23:05', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (938, '分段管道', '分段管道', '/profile/avatar/fenduanguandao (11).svg', NULL, NULL, NULL, '2023-07-01 14:23:05', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (939, '分段管道', '分段管道', '/profile/avatar/fenduanguandao (8).svg', NULL, NULL, NULL, '2023-07-01 14:23:05', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (940, '分段管道', '分段管道', '/profile/avatar/fenduanguandao (15).svg', NULL, NULL, NULL, '2023-07-01 14:23:05', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (941, '分段管道', '分段管道', '/profile/avatar/fenduanguandao (13).svg', NULL, NULL, NULL, '2023-07-01 14:23:06', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (942, '分段管道', '分段管道', '/profile/avatar/fenduanguandao (14).svg', NULL, NULL, NULL, '2023-07-01 14:23:06', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (943, '分段管道', '分段管道', '/profile/avatar/fenduanguandao (16).svg', NULL, NULL, NULL, '2023-07-01 14:23:06', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (944, '分段管道', '分段管道', '/profile/avatar/fenduanguandao (19).svg', NULL, NULL, NULL, '2023-07-01 14:23:06', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (945, '分段管道', '分段管道', '/profile/avatar/fenduanguandao (18).svg', NULL, NULL, NULL, '2023-07-01 14:23:06', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (946, '分段管道', '分段管道', '/profile/avatar/fenduanguandao (17).svg', NULL, NULL, NULL, '2023-07-01 14:23:06', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (947, '分段管道', '分段管道', '/profile/avatar/fenduanguandao (20).svg', NULL, NULL, NULL, '2023-07-01 14:23:06', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (948, '分段管道', '分段管道', '/profile/avatar/fenduanguandao (22).svg', NULL, NULL, NULL, '2023-07-01 14:23:06', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (949, '分段管道', '分段管道', '/profile/avatar/fenduanguandao (23).svg', NULL, NULL, NULL, '2023-07-01 14:23:06', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (950, '分段管道', '分段管道', '/profile/avatar/fenduanguandao (21).svg', NULL, NULL, NULL, '2023-07-01 14:23:06', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (951, '分段管道', '分段管道', '/profile/avatar/fenduanguandao (24).svg', NULL, NULL, NULL, '2023-07-01 14:23:06', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (952, '分段管道', '分段管道', '/profile/avatar/fenduanguandao (26).svg', NULL, NULL, NULL, '2023-07-01 14:23:07', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (953, '分段管道', '分段管道', '/profile/avatar/fenduanguandao (28).svg', NULL, NULL, NULL, '2023-07-01 14:23:07', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (954, '分段管道', '分段管道', '/profile/avatar/fenduanguandao (25).svg', NULL, NULL, NULL, '2023-07-01 14:23:07', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (955, '分段管道', '分段管道', '/profile/avatar/fenduanguandao (30).svg', NULL, NULL, NULL, '2023-07-01 14:23:07', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (956, '分段管道', '分段管道', '/profile/avatar/fenduanguandao (32).svg', NULL, NULL, NULL, '2023-07-01 14:23:07', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (957, '分段管道', '分段管道', '/profile/avatar/fenduanguandao (33).svg', NULL, NULL, NULL, '2023-07-01 14:23:07', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (958, '分段管道', '分段管道', '/profile/avatar/fenduanguandao (27).svg', NULL, NULL, NULL, '2023-07-01 14:23:07', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (959, '分段管道', '分段管道', '/profile/avatar/fenduanguandao (31).svg', NULL, NULL, NULL, '2023-07-01 14:23:07', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (960, '分段管道', '分段管道', '/profile/avatar/fenduanguandao (34).svg', NULL, NULL, NULL, '2023-07-01 14:23:07', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (961, '分段管道', '分段管道', '/profile/avatar/fenduanguandao (29).svg', NULL, NULL, NULL, '2023-07-01 14:23:07', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (962, '分段管道', '分段管道', '/profile/avatar/fenduanguandao (35).svg', NULL, NULL, NULL, '2023-07-01 14:23:07', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (963, '分段管道', '分段管道', '/profile/avatar/fenduanguandao (36).svg', NULL, NULL, NULL, '2023-07-01 14:23:07', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (964, '分段管道', '分段管道', '/profile/avatar/fenduanguandao (37).svg', NULL, NULL, NULL, '2023-07-01 14:23:08', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (965, '分段管道', '分段管道', '/profile/avatar/fenduanguandao (38).svg', NULL, NULL, NULL, '2023-07-01 14:23:08', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (966, '分段管道', '分段管道', '/profile/avatar/fenduanguandao (39).svg', NULL, NULL, NULL, '2023-07-01 14:23:08', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (967, '分段管道', '分段管道', '/profile/avatar/fenduanguandao (40).svg', NULL, NULL, NULL, '2023-07-01 14:23:08', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (968, '分段管道', '分段管道', '/profile/avatar/fenduanguandao (41).svg', NULL, NULL, NULL, '2023-07-01 14:23:08', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (969, '工厂设施', '工厂设施', '/profile/avatar/gongchangsheshi (1).svg', NULL, NULL, NULL, '2023-07-01 14:24:20', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (970, '工厂设施', '工厂设施', '/profile/avatar/gongchangsheshi (2).svg', NULL, NULL, NULL, '2023-07-01 14:24:20', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (971, '工厂设施', '工厂设施', '/profile/avatar/gongchangsheshi (3).svg', NULL, NULL, NULL, '2023-07-01 14:24:20', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (972, '工厂设施', '工厂设施', '/profile/avatar/gongchangsheshi (4).svg', NULL, NULL, NULL, '2023-07-01 14:24:20', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (973, '工厂设施', '工厂设施', '/profile/avatar/gongchangsheshi (6).svg', NULL, NULL, NULL, '2023-07-01 14:24:20', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (974, '工厂设施', '工厂设施', '/profile/avatar/gongchangsheshi (5).svg', NULL, NULL, NULL, '2023-07-01 14:24:20', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (975, '工厂设施', '工厂设施', '/profile/avatar/gongchangsheshi (7).svg', NULL, NULL, NULL, '2023-07-01 14:24:21', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (976, '工厂设施', '工厂设施', '/profile/avatar/gongchangsheshi (8).svg', NULL, NULL, NULL, '2023-07-01 14:24:21', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (977, '工厂设施', '工厂设施', '/profile/avatar/gongchangsheshi (9).svg', NULL, NULL, NULL, '2023-07-01 14:24:21', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (978, '工厂设施', '工厂设施', '/profile/avatar/gongchangsheshi (11).svg', NULL, NULL, NULL, '2023-07-01 14:24:21', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (979, '工厂设施', '工厂设施', '/profile/avatar/gongchangsheshi (12).svg', NULL, NULL, NULL, '2023-07-01 14:24:21', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (980, '工厂设施', '工厂设施', '/profile/avatar/gongchangsheshi (10).svg', NULL, NULL, NULL, '2023-07-01 14:24:21', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (981, '工厂设施', '工厂设施', '/profile/avatar/gongchangsheshi (13).svg', NULL, NULL, NULL, '2023-07-01 14:24:21', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (982, '工厂设施', '工厂设施', '/profile/avatar/gongchangsheshi (14).svg', NULL, NULL, NULL, '2023-07-01 14:24:21', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (983, '工厂设施', '工厂设施', '/profile/avatar/gongchangsheshi (15).svg', NULL, NULL, NULL, '2023-07-01 14:24:21', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (984, '工厂设施', '工厂设施', '/profile/avatar/gongchangsheshi (17).svg', NULL, NULL, NULL, '2023-07-01 14:24:21', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (985, '工厂设施', '工厂设施', '/profile/avatar/gongchangsheshi (19).svg', NULL, NULL, NULL, '2023-07-01 14:24:21', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (986, '工厂设施', '工厂设施', '/profile/avatar/gongchangsheshi (18).svg', NULL, NULL, NULL, '2023-07-01 14:24:21', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (987, '工厂设施', '工厂设施', '/profile/avatar/gongchangsheshi (16).svg', NULL, NULL, NULL, '2023-07-01 14:24:22', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (988, '工厂设施', '工厂设施', '/profile/avatar/gongchangsheshi (20).svg', NULL, NULL, NULL, '2023-07-01 14:24:22', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (989, '工厂设施', '工厂设施', '/profile/avatar/gongchangsheshi (21).svg', NULL, NULL, NULL, '2023-07-01 14:24:22', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (990, '工厂设施', '工厂设施', '/profile/avatar/gongchangsheshi (22).svg', NULL, NULL, NULL, '2023-07-01 14:24:22', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (991, '工厂设施', '工厂设施', '/profile/avatar/gongchangsheshi (25).svg', NULL, NULL, NULL, '2023-07-01 14:24:22', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (992, '工厂设施', '工厂设施', '/profile/avatar/gongchangsheshi (23).svg', NULL, NULL, NULL, '2023-07-01 14:24:22', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (993, '工厂设施', '工厂设施', '/profile/avatar/gongchangsheshi (26).svg', NULL, NULL, NULL, '2023-07-01 14:24:22', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (994, '工厂设施', '工厂设施', '/profile/avatar/gongchangsheshi (24).svg', NULL, NULL, NULL, '2023-07-01 14:24:22', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (995, '工厂设施', '工厂设施', '/profile/avatar/gongchangsheshi (27).svg', NULL, NULL, NULL, '2023-07-01 14:24:22', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (996, '工厂设施', '工厂设施', '/profile/avatar/gongchangsheshi (31).svg', NULL, NULL, NULL, '2023-07-01 14:24:23', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (997, '工厂设施', '工厂设施', '/profile/avatar/gongchangsheshi (29).svg', NULL, NULL, NULL, '2023-07-01 14:24:23', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (998, '工厂设施', '工厂设施', '/profile/avatar/gongchangsheshi (30).svg', NULL, NULL, NULL, '2023-07-01 14:24:23', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (999, '工厂设施', '工厂设施', '/profile/avatar/gongchangsheshi (28).svg', NULL, NULL, NULL, '2023-07-01 14:24:23', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1000, '工厂设施', '工厂设施', '/profile/avatar/gongchangsheshi (33).svg', NULL, NULL, NULL, '2023-07-01 14:24:23', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1001, '工厂设施', '工厂设施', '/profile/avatar/gongchangsheshi (32).svg', NULL, NULL, NULL, '2023-07-01 14:24:23', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1002, '工厂设施', '工厂设施', '/profile/avatar/gongchangsheshi (34).svg', NULL, NULL, NULL, '2023-07-01 14:24:23', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1003, '工厂设施', '工厂设施', '/profile/avatar/gongchangsheshi (36).svg', NULL, NULL, NULL, '2023-07-01 14:24:23', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1004, '工厂设施', '工厂设施', '/profile/avatar/gongchangsheshi (37).svg', NULL, NULL, NULL, '2023-07-01 14:24:23', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1005, '工厂设施', '工厂设施', '/profile/avatar/gongchangsheshi (35).svg', NULL, NULL, NULL, '2023-07-01 14:24:23', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1006, '工厂设施', '工厂设施', '/profile/avatar/gongchangsheshi (38).svg', NULL, NULL, NULL, '2023-07-01 14:24:23', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1007, '工厂设施', '工厂设施', '/profile/avatar/gongchangsheshi (39).svg', NULL, NULL, NULL, '2023-07-01 14:24:23', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1008, '工厂设施', '工厂设施', '/profile/avatar/gongchangsheshi (40).svg', NULL, NULL, NULL, '2023-07-01 14:24:23', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1009, '工厂设施', '工厂设施', '/profile/avatar/gongchangsheshi (41).svg', NULL, NULL, NULL, '2023-07-01 14:24:23', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1010, '工厂设施', '工厂设施', '/profile/avatar/gongchangsheshi (44).svg', NULL, NULL, NULL, '2023-07-01 14:24:23', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1011, '工厂设施', '工厂设施', '/profile/avatar/gongchangsheshi (42).svg', NULL, NULL, NULL, '2023-07-01 14:24:23', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1012, '工厂设施', '工厂设施', '/profile/avatar/gongchangsheshi (43).svg', NULL, NULL, NULL, '2023-07-01 14:24:24', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1013, '工厂设施', '工厂设施', '/profile/avatar/gongchangsheshi (46).svg', NULL, NULL, NULL, '2023-07-01 14:24:24', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1014, '工厂设施', '工厂设施', '/profile/avatar/gongchangsheshi (45).svg', NULL, NULL, NULL, '2023-07-01 14:24:24', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1015, '工厂设施', '工厂设施', '/profile/avatar/gongchangsheshi (47).svg', NULL, NULL, NULL, '2023-07-01 14:24:24', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1016, '工业冷却', '工业冷却', '/profile/avatar/gongyelengque (1).svg', NULL, NULL, NULL, '2023-07-01 14:25:50', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1017, '工业冷却', '工业冷却', '/profile/avatar/gongyelengque (5).svg', NULL, NULL, NULL, '2023-07-01 14:25:50', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1018, '工业冷却', '工业冷却', '/profile/avatar/gongyelengque (6).svg', NULL, NULL, NULL, '2023-07-01 14:25:50', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1019, '工业冷却', '工业冷却', '/profile/avatar/gongyelengque (4).svg', NULL, NULL, NULL, '2023-07-01 14:25:50', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1020, '工业冷却', '工业冷却', '/profile/avatar/gongyelengque (3).svg', NULL, NULL, NULL, '2023-07-01 14:25:50', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1021, '工业冷却', '工业冷却', '/profile/avatar/gongyelengque (2).svg', NULL, NULL, NULL, '2023-07-01 14:25:50', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1022, '工业冷却', '工业冷却', '/profile/avatar/gongyelengque (7).svg', NULL, NULL, NULL, '2023-07-01 14:25:50', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1023, '工业冷却', '工业冷却', '/profile/avatar/gongyelengque (8).svg', NULL, NULL, NULL, '2023-07-01 14:25:50', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1024, '工业冷却', '工业冷却', '/profile/avatar/gongyelengque (9).svg', NULL, NULL, NULL, '2023-07-01 14:25:50', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1025, '工业冷却', '工业冷却', '/profile/avatar/gongyelengque (10).svg', NULL, NULL, NULL, '2023-07-01 14:25:50', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1026, '工业冷却', '工业冷却', '/profile/avatar/gongyelengque (14).svg', NULL, NULL, NULL, '2023-07-01 14:25:50', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1027, '工业冷却', '工业冷却', '/profile/avatar/gongyelengque (12).svg', NULL, NULL, NULL, '2023-07-01 14:25:50', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1028, '工业冷却', '工业冷却', '/profile/avatar/gongyelengque (11).svg', NULL, NULL, NULL, '2023-07-01 14:25:50', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1029, '工业冷却', '工业冷却', '/profile/avatar/gongyelengque (15).svg', NULL, NULL, NULL, '2023-07-01 14:25:51', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1030, '工业冷却', '工业冷却', '/profile/avatar/gongyelengque (13).svg', NULL, NULL, NULL, '2023-07-01 14:25:51', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1031, '工业冷却', '工业冷却', '/profile/avatar/gongyelengque (16).svg', NULL, NULL, NULL, '2023-07-01 14:25:51', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1032, '工业冷却', '工业冷却', '/profile/avatar/gongyelengque (17).svg', NULL, NULL, NULL, '2023-07-01 14:25:51', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1033, '工艺加热', '工艺加热', '/profile/avatar/gongyijiare (1).svg', NULL, NULL, NULL, '2023-07-01 14:26:46', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1034, '工艺加热', '工艺加热', '/profile/avatar/gongyijiare (3).svg', NULL, NULL, NULL, '2023-07-01 14:26:47', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1035, '工艺加热', '工艺加热', '/profile/avatar/gongyijiare (2).svg', NULL, NULL, NULL, '2023-07-01 14:26:47', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1036, '工艺加热', '工艺加热', '/profile/avatar/gongyijiare (6).svg', NULL, NULL, NULL, '2023-07-01 14:26:47', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1037, '工艺加热', '工艺加热', '/profile/avatar/gongyijiare (4).svg', NULL, NULL, NULL, '2023-07-01 14:26:47', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1038, '工艺加热', '工艺加热', '/profile/avatar/gongyijiare (5).svg', NULL, NULL, NULL, '2023-07-01 14:26:47', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1039, '工艺加热', '工艺加热', '/profile/avatar/gongyijiare (7).svg', NULL, NULL, NULL, '2023-07-01 14:26:47', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1040, '工艺加热', '工艺加热', '/profile/avatar/gongyijiare (8).svg', NULL, NULL, NULL, '2023-07-01 14:26:47', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1041, '工艺加热', '工艺加热', '/profile/avatar/gongyijiare (10).svg', NULL, NULL, NULL, '2023-07-01 14:26:47', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1042, '工艺加热', '工艺加热', '/profile/avatar/gongyijiare (9).svg', NULL, NULL, NULL, '2023-07-01 14:26:47', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1043, '工艺加热', '工艺加热', '/profile/avatar/gongyijiare (11).svg', NULL, NULL, NULL, '2023-07-01 14:26:47', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1044, '工艺加热', '工艺加热', '/profile/avatar/gongyijiare (12).svg', NULL, NULL, NULL, '2023-07-01 14:26:47', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1045, '工艺加热', '工艺加热', '/profile/avatar/gongyijiare (13).svg', NULL, NULL, NULL, '2023-07-01 14:26:47', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1046, '工艺加热', '工艺加热', '/profile/avatar/gongyijiare (15).svg', NULL, NULL, NULL, '2023-07-01 14:26:48', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1047, '工艺加热', '工艺加热', '/profile/avatar/gongyijiare (14).svg', NULL, NULL, NULL, '2023-07-01 14:26:48', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1048, '工艺加热', '工艺加热', '/profile/avatar/gongyijiare (16).svg', NULL, NULL, NULL, '2023-07-01 14:26:48', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1049, '工艺加热', '工艺加热', '/profile/avatar/gongyijiare (19).svg', NULL, NULL, NULL, '2023-07-01 14:26:48', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1050, '工艺加热', '工艺加热', '/profile/avatar/gongyijiare (17).svg', NULL, NULL, NULL, '2023-07-01 14:26:48', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1051, '工艺加热', '工艺加热', '/profile/avatar/gongyijiare (18).svg', NULL, NULL, NULL, '2023-07-01 14:26:48', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1052, '工艺加热', '工艺加热', '/profile/avatar/gongyijiare (20).svg', NULL, NULL, NULL, '2023-07-01 14:26:48', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1053, '工艺加热', '工艺加热', '/profile/avatar/gongyijiare (24).svg', NULL, NULL, NULL, '2023-07-01 14:26:48', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1054, '工艺加热', '工艺加热', '/profile/avatar/gongyijiare (21).svg', NULL, NULL, NULL, '2023-07-01 14:26:48', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1055, '工艺加热', '工艺加热', '/profile/avatar/gongyijiare (23).svg', NULL, NULL, NULL, '2023-07-01 14:26:48', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1056, '工艺加热', '工艺加热', '/profile/avatar/gongyijiare (25).svg', NULL, NULL, NULL, '2023-07-01 14:26:48', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1057, '工艺加热', '工艺加热', '/profile/avatar/gongyijiare (26).svg', NULL, NULL, NULL, '2023-07-01 14:26:48', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1058, '工艺加热', '工艺加热', '/profile/avatar/gongyijiare (22).svg', NULL, NULL, NULL, '2023-07-01 14:26:49', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1059, '工艺加热', '工艺加热', '/profile/avatar/gongyijiare (30).svg', NULL, NULL, NULL, '2023-07-01 14:26:49', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1060, '工艺加热', '工艺加热', '/profile/avatar/gongyijiare (29).svg', NULL, NULL, NULL, '2023-07-01 14:26:49', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1061, '工艺加热', '工艺加热', '/profile/avatar/gongyijiare (28).svg', NULL, NULL, NULL, '2023-07-01 14:26:49', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1062, '工艺加热', '工艺加热', '/profile/avatar/gongyijiare (27).svg', NULL, NULL, NULL, '2023-07-01 14:26:49', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1063, '工艺加热', '工艺加热', '/profile/avatar/gongyijiare (31).svg', NULL, NULL, NULL, '2023-07-01 14:26:49', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1064, '工艺加热', '工艺加热', '/profile/avatar/gongyijiare (34).svg', NULL, NULL, NULL, '2023-07-01 14:26:49', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1065, '工艺加热', '工艺加热', '/profile/avatar/gongyijiare (35).svg', NULL, NULL, NULL, '2023-07-01 14:26:49', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1066, '工艺加热', '工艺加热', '/profile/avatar/gongyijiare (33).svg', NULL, NULL, NULL, '2023-07-01 14:26:49', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1067, '工艺加热', '工艺加热', '/profile/avatar/gongyijiare (36).svg', NULL, NULL, NULL, '2023-07-01 14:26:49', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1068, '工艺加热', '工艺加热', '/profile/avatar/gongyijiare (32).svg', NULL, NULL, NULL, '2023-07-01 14:26:49', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1069, '工艺加热', '工艺加热', '/profile/avatar/gongyijiare (37).svg', NULL, NULL, NULL, '2023-07-01 14:26:49', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1070, '工艺加热', '工艺加热', '/profile/avatar/gongyijiare (39).svg', NULL, NULL, NULL, '2023-07-01 14:26:50', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1071, '工艺加热', '工艺加热', '/profile/avatar/gongyijiare (38).svg', NULL, NULL, NULL, '2023-07-01 14:26:50', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1072, '工艺加热', '工艺加热', '/profile/avatar/gongyijiare (42).svg', NULL, NULL, NULL, '2023-07-01 14:26:50', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1073, '工艺加热', '工艺加热', '/profile/avatar/gongyijiare (40).svg', NULL, NULL, NULL, '2023-07-01 14:26:50', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1074, '工艺加热', '工艺加热', '/profile/avatar/gongyijiare (41).svg', NULL, NULL, NULL, '2023-07-01 14:26:50', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1075, '工艺加热', '工艺加热', '/profile/avatar/gongyijiare (43).svg', NULL, NULL, NULL, '2023-07-01 14:26:50', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1076, '工艺加热', '工艺加热', '/profile/avatar/gongyijiare (44).svg', NULL, NULL, NULL, '2023-07-01 14:26:50', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1077, '工艺加热', '工艺加热', '/profile/avatar/gongyijiare (46).svg', NULL, NULL, NULL, '2023-07-01 14:26:50', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1078, '工艺加热', '工艺加热', '/profile/avatar/gongyijiare (47).svg', NULL, NULL, NULL, '2023-07-01 14:26:50', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1079, '工艺加热', '工艺加热', '/profile/avatar/gongyijiare (48).svg', NULL, NULL, NULL, '2023-07-01 14:26:50', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1080, '工艺加热', '工艺加热', '/profile/avatar/gongyijiare (45).svg', NULL, NULL, NULL, '2023-07-01 14:26:50', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1081, '工艺加热', '工艺加热', '/profile/avatar/gongyijiare (49).svg', NULL, NULL, NULL, '2023-07-01 14:26:50', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1082, '工艺加热', '工艺加热', '/profile/avatar/gongyijiare (51).svg', NULL, NULL, NULL, '2023-07-01 14:26:50', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1083, '工艺加热', '工艺加热', '/profile/avatar/gongyijiare (56).svg', NULL, NULL, NULL, '2023-07-01 14:26:51', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1084, '工艺加热', '工艺加热', '/profile/avatar/gongyijiare (53).svg', NULL, NULL, NULL, '2023-07-01 14:26:51', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1085, '工艺加热', '工艺加热', '/profile/avatar/gongyijiare (52).svg', NULL, NULL, NULL, '2023-07-01 14:26:51', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1086, '工艺加热', '工艺加热', '/profile/avatar/gongyijiare (50).svg', NULL, NULL, NULL, '2023-07-01 14:26:51', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1087, '工艺加热', '工艺加热', '/profile/avatar/gongyijiare (55).svg', NULL, NULL, NULL, '2023-07-01 14:26:51', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1088, '工艺加热', '工艺加热', '/profile/avatar/gongyijiare (54).svg', NULL, NULL, NULL, '2023-07-01 14:26:51', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1089, '工艺加热', '工艺加热', '/profile/avatar/gongyijiare (57).svg', NULL, NULL, NULL, '2023-07-01 14:26:51', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1090, '工艺加热', '工艺加热', '/profile/avatar/gongyijiare (58).svg', NULL, NULL, NULL, '2023-07-01 14:26:51', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1091, '工艺加热', '工艺加热', '/profile/avatar/gongyijiare (59).svg', NULL, NULL, NULL, '2023-07-01 14:26:51', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1092, '供暖符号', '供暖符号', '/profile/avatar/gongruanfuhao (1).svg', NULL, NULL, NULL, '2023-07-01 14:27:52', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1093, '供暖符号', '供暖符号', '/profile/avatar/gongruanfuhao (2).svg', NULL, NULL, NULL, '2023-07-01 14:27:53', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1094, '供暖符号', '供暖符号', '/profile/avatar/gongruanfuhao (4).svg', NULL, NULL, NULL, '2023-07-01 14:27:53', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1095, '供暖符号', '供暖符号', '/profile/avatar/gongruanfuhao (6).svg', NULL, NULL, NULL, '2023-07-01 14:27:53', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1096, '供暖符号', '供暖符号', '/profile/avatar/gongruanfuhao (3).svg', NULL, NULL, NULL, '2023-07-01 14:27:53', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1097, '供暖符号', '供暖符号', '/profile/avatar/gongruanfuhao (5).svg', NULL, NULL, NULL, '2023-07-01 14:27:53', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1098, '供暖符号', '供暖符号', '/profile/avatar/gongruanfuhao (9).svg', NULL, NULL, NULL, '2023-07-01 14:27:53', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1099, '供暖符号', '供暖符号', '/profile/avatar/gongruanfuhao (10).svg', NULL, NULL, NULL, '2023-07-01 14:27:53', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1100, '供暖符号', '供暖符号', '/profile/avatar/gongruanfuhao (11).svg', NULL, NULL, NULL, '2023-07-01 14:27:53', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1101, '供暖符号', '供暖符号', '/profile/avatar/gongruanfuhao (8).svg', NULL, NULL, NULL, '2023-07-01 14:27:53', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1102, '供暖符号', '供暖符号', '/profile/avatar/gongruanfuhao (7).svg', NULL, NULL, NULL, '2023-07-01 14:27:53', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1103, '供暖符号', '供暖符号', '/profile/avatar/gongruanfuhao (12).svg', NULL, NULL, NULL, '2023-07-01 14:27:53', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1104, '供暖符号', '供暖符号', '/profile/avatar/gongruanfuhao (14).svg', NULL, NULL, NULL, '2023-07-01 14:27:53', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1105, '供暖符号', '供暖符号', '/profile/avatar/gongruanfuhao (13).svg', NULL, NULL, NULL, '2023-07-01 14:27:54', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1106, '供暖符号', '供暖符号', '/profile/avatar/gongruanfuhao (15).svg', NULL, NULL, NULL, '2023-07-01 14:27:54', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1107, '供暖符号', '供暖符号', '/profile/avatar/gongruanfuhao (16).svg', NULL, NULL, NULL, '2023-07-01 14:27:54', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1108, '供暖符号', '供暖符号', '/profile/avatar/gongruanfuhao (17).svg', NULL, NULL, NULL, '2023-07-01 14:27:54', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1109, '供暖符号', '供暖符号', '/profile/avatar/gongruanfuhao (18).svg', NULL, NULL, NULL, '2023-07-01 14:27:54', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1110, '供暖符号', '供暖符号', '/profile/avatar/gongruanfuhao (19).svg', NULL, NULL, NULL, '2023-07-01 14:27:54', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1111, '供暖符号', '供暖符号', '/profile/avatar/gongruanfuhao (20).svg', NULL, NULL, NULL, '2023-07-01 14:27:54', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1112, '供暖符号', '供暖符号', '/profile/avatar/gongruanfuhao (21).svg', NULL, NULL, NULL, '2023-07-01 14:27:54', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1113, '供暖符号', '供暖符号', '/profile/avatar/gongruanfuhao (22).svg', NULL, NULL, NULL, '2023-07-01 14:27:54', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1114, '供暖符号', '供暖符号', '/profile/avatar/gongruanfuhao (23).svg', NULL, NULL, NULL, '2023-07-01 14:27:54', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1115, '供暖符号', '供暖符号', '/profile/avatar/gongruanfuhao (25).svg', NULL, NULL, NULL, '2023-07-01 14:27:55', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1116, '供暖符号', '供暖符号', '/profile/avatar/gongruanfuhao (24).svg', NULL, NULL, NULL, '2023-07-01 14:27:55', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1117, '供暖符号', '供暖符号', '/profile/avatar/gongruanfuhao (26).svg', NULL, NULL, NULL, '2023-07-01 14:27:55', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1118, '供暖符号', '供暖符号', '/profile/avatar/gongruanfuhao (27).svg', NULL, NULL, NULL, '2023-07-01 14:27:55', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1119, '供暖符号', '供暖符号', '/profile/avatar/gongruanfuhao (29).svg', NULL, NULL, NULL, '2023-07-01 14:27:55', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1120, '供暖符号', '供暖符号', '/profile/avatar/gongruanfuhao (28).svg', NULL, NULL, NULL, '2023-07-01 14:27:55', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1121, '供暖符号', '供暖符号', '/profile/avatar/gongruanfuhao (31).svg', NULL, NULL, NULL, '2023-07-01 14:27:55', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1122, '供暖符号', '供暖符号', '/profile/avatar/gongruanfuhao (30).svg', NULL, NULL, NULL, '2023-07-01 14:27:55', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1123, '供暖符号', '供暖符号', '/profile/avatar/gongruanfuhao (34).svg', NULL, NULL, NULL, '2023-07-01 14:27:55', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1124, '供暖符号', '供暖符号', '/profile/avatar/gongruanfuhao (32).svg', NULL, NULL, NULL, '2023-07-01 14:27:55', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1125, '供暖符号', '供暖符号', '/profile/avatar/gongruanfuhao (35).svg', NULL, NULL, NULL, '2023-07-01 14:27:55', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1126, '供暖符号', '供暖符号', '/profile/avatar/gongruanfuhao (33).svg', NULL, NULL, NULL, '2023-07-01 14:27:55', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1127, '供暖符号', '供暖符号', '/profile/avatar/gongruanfuhao (36).svg', NULL, NULL, NULL, '2023-07-01 14:27:55', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1128, '供暖符号', '供暖符号', '/profile/avatar/gongruanfuhao (37).svg', NULL, NULL, NULL, '2023-07-01 14:27:55', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1129, '供暖符号', '供暖符号', '/profile/avatar/gongruanfuhao (38).svg', NULL, NULL, NULL, '2023-07-01 14:27:56', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1130, '供暖符号', '供暖符号', '/profile/avatar/gongruanfuhao (40).svg', NULL, NULL, NULL, '2023-07-01 14:27:56', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1131, '供暖符号', '供暖符号', '/profile/avatar/gongruanfuhao (39).svg', NULL, NULL, NULL, '2023-07-01 14:27:56', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1132, '供暖符号', '供暖符号', '/profile/avatar/gongruanfuhao (41).svg', NULL, NULL, NULL, '2023-07-01 14:27:56', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1133, '供暖符号', '供暖符号', '/profile/avatar/gongruanfuhao (42).svg', NULL, NULL, NULL, '2023-07-01 14:27:56', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1134, '供暖符号', '供暖符号', '/profile/avatar/gongruanfuhao (43).svg', NULL, NULL, NULL, '2023-07-01 14:27:56', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1135, '供暖符号', '供暖符号', '/profile/avatar/gongruanfuhao (44).svg', NULL, NULL, NULL, '2023-07-01 14:27:56', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1136, '供暖符号', '供暖符号', '/profile/avatar/gongruanfuhao (45).svg', NULL, NULL, NULL, '2023-07-01 14:27:56', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1137, '供暖符号', '供暖符号', '/profile/avatar/gongruanfuhao (46).svg', NULL, NULL, NULL, '2023-07-01 14:27:56', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1138, '供暖符号', '供暖符号', '/profile/avatar/gongruanfuhao (50).svg', NULL, NULL, NULL, '2023-07-01 14:27:56', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1139, '供暖符号', '供暖符号', '/profile/avatar/gongruanfuhao (47).svg', NULL, NULL, NULL, '2023-07-01 14:27:56', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1140, '供暖符号', '供暖符号', '/profile/avatar/gongruanfuhao (48).svg', NULL, NULL, NULL, '2023-07-01 14:27:56', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1141, '供暖符号', '供暖符号', '/profile/avatar/gongruanfuhao (49).svg', NULL, NULL, NULL, '2023-07-01 14:27:56', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1142, '供暖符号', '供暖符号', '/profile/avatar/gongruanfuhao (51).svg', NULL, NULL, NULL, '2023-07-01 14:27:56', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1143, '供暖符号', '供暖符号', '/profile/avatar/gongruanfuhao (52).svg', NULL, NULL, NULL, '2023-07-01 14:27:57', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1144, '供暖符号', '供暖符号', '/profile/avatar/gongruanfuhao (54).svg', NULL, NULL, NULL, '2023-07-01 14:27:57', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1145, '供暖符号', '供暖符号', '/profile/avatar/gongruanfuhao (55).svg', NULL, NULL, NULL, '2023-07-01 14:27:57', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1146, '供暖符号', '供暖符号', '/profile/avatar/gongruanfuhao (53).svg', NULL, NULL, NULL, '2023-07-01 14:27:57', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1147, '供暖符号', '供暖符号', '/profile/avatar/gongruanfuhao (56).svg', NULL, NULL, NULL, '2023-07-01 14:27:57', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1148, '供暖符号', '供暖符号', '/profile/avatar/gongruanfuhao (57).svg', NULL, NULL, NULL, '2023-07-01 14:27:57', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1149, '供暖符号', '供暖符号', '/profile/avatar/gongruanfuhao (59).svg', NULL, NULL, NULL, '2023-07-01 14:27:57', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1150, '供暖符号', '供暖符号', '/profile/avatar/gongruanfuhao (61).svg', NULL, NULL, NULL, '2023-07-01 14:27:57', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1151, '供暖符号', '供暖符号', '/profile/avatar/gongruanfuhao (58).svg', NULL, NULL, NULL, '2023-07-01 14:27:57', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1152, '供暖符号', '供暖符号', '/profile/avatar/gongruanfuhao (60).svg', NULL, NULL, NULL, '2023-07-01 14:27:57', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1153, '供暖符号', '供暖符号', '/profile/avatar/gongruanfuhao (62).svg', NULL, NULL, NULL, '2023-07-01 14:27:57', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1154, '供暖符号', '供暖符号', '/profile/avatar/gongruanfuhao (66).svg', NULL, NULL, NULL, '2023-07-01 14:27:57', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1155, '供暖符号', '供暖符号', '/profile/avatar/gongruanfuhao (67).svg', NULL, NULL, NULL, '2023-07-01 14:27:57', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1156, '供暖符号', '供暖符号', '/profile/avatar/gongruanfuhao (65).svg', NULL, NULL, NULL, '2023-07-01 14:27:58', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1157, '供暖符号', '供暖符号', '/profile/avatar/gongruanfuhao (64).svg', NULL, NULL, NULL, '2023-07-01 14:27:58', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1158, '供暖符号', '供暖符号', '/profile/avatar/gongruanfuhao (63).svg', NULL, NULL, NULL, '2023-07-01 14:27:58', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1159, '供暖符号', '供暖符号', '/profile/avatar/gongruanfuhao (71).svg', NULL, NULL, NULL, '2023-07-01 14:27:58', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1160, '供暖符号', '供暖符号', '/profile/avatar/gongruanfuhao (69).svg', NULL, NULL, NULL, '2023-07-01 14:27:58', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1161, '供暖符号', '供暖符号', '/profile/avatar/gongruanfuhao (72).svg', NULL, NULL, NULL, '2023-07-01 14:27:58', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1162, '供暖符号', '供暖符号', '/profile/avatar/gongruanfuhao (70).svg', NULL, NULL, NULL, '2023-07-01 14:27:58', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1163, '供暖符号', '供暖符号', '/profile/avatar/gongruanfuhao (73).svg', NULL, NULL, NULL, '2023-07-01 14:27:58', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1164, '供暖符号', '供暖符号', '/profile/avatar/gongruanfuhao (74).svg', NULL, NULL, NULL, '2023-07-01 14:27:58', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1165, '供暖符号', '供暖符号', '/profile/avatar/gongruanfuhao (76).svg', NULL, NULL, NULL, '2023-07-01 14:27:58', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1166, '供暖符号', '供暖符号', '/profile/avatar/gongruanfuhao (75).svg', NULL, NULL, NULL, '2023-07-01 14:27:58', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1167, '供暖符号', '供暖符号', '/profile/avatar/gongruanfuhao (77).svg', NULL, NULL, NULL, '2023-07-01 14:27:58', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1168, '供暖符号', '供暖符号', '/profile/avatar/gongruanfuhao (78).svg', NULL, NULL, NULL, '2023-07-01 14:27:58', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1169, '供暖符号', '供暖符号', '/profile/avatar/gongruanfuhao (68).svg', NULL, NULL, NULL, '2023-07-01 14:27:58', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1170, '供暖符号', '供暖符号', '/profile/avatar/gongruanfuhao (79).svg', NULL, NULL, NULL, '2023-07-01 14:27:58', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1171, '供暖符号', '供暖符号', '/profile/avatar/gongruanfuhao (80).svg', NULL, NULL, NULL, '2023-07-01 14:27:59', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1172, '供暖符号', '供暖符号', '/profile/avatar/gongruanfuhao (81).svg', NULL, NULL, NULL, '2023-07-01 14:27:59', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1173, '供暖符号', '供暖符号', '/profile/avatar/gongruanfuhao (83).svg', NULL, NULL, NULL, '2023-07-01 14:27:59', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1174, '供暖符号', '供暖符号', '/profile/avatar/gongruanfuhao (82).svg', NULL, NULL, NULL, '2023-07-01 14:27:59', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1175, '供暖符号', '供暖符号', '/profile/avatar/gongruanfuhao (84).svg', NULL, NULL, NULL, '2023-07-01 14:27:59', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1176, '供暖符号', '供暖符号', '/profile/avatar/gongruanfuhao (86).svg', NULL, NULL, NULL, '2023-07-01 14:27:59', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1177, '供暖符号', '供暖符号', '/profile/avatar/gongruanfuhao (87).svg', NULL, NULL, NULL, '2023-07-01 14:27:59', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1178, '供暖符号', '供暖符号', '/profile/avatar/gongruanfuhao (85).svg', NULL, NULL, NULL, '2023-07-01 14:27:59', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1179, '供暖符号', '供暖符号', '/profile/avatar/gongruanfuhao (88).svg', NULL, NULL, NULL, '2023-07-01 14:27:59', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1180, '供暖符号', '供暖符号', '/profile/avatar/gongruanfuhao (90).svg', NULL, NULL, NULL, '2023-07-01 14:27:59', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1181, '供暖符号', '供暖符号', '/profile/avatar/gongruanfuhao (91).svg', NULL, NULL, NULL, '2023-07-01 14:27:59', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1182, '供暖符号', '供暖符号', '/profile/avatar/gongruanfuhao (92).svg', NULL, NULL, NULL, '2023-07-01 14:27:59', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1183, '供暖符号', '供暖符号', '/profile/avatar/gongruanfuhao (89).svg', NULL, NULL, NULL, '2023-07-01 14:27:59', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1184, '供暖符号', '供暖符号', '/profile/avatar/gongruanfuhao (93).svg', NULL, NULL, NULL, '2023-07-01 14:28:00', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1185, '供暖符号', '供暖符号', '/profile/avatar/gongruanfuhao (94).svg', NULL, NULL, NULL, '2023-07-01 14:28:00', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1186, '供暖符号', '供暖符号', '/profile/avatar/gongruanfuhao (96).svg', NULL, NULL, NULL, '2023-07-01 14:28:00', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1187, '供暖符号', '供暖符号', '/profile/avatar/gongruanfuhao (95).svg', NULL, NULL, NULL, '2023-07-01 14:28:00', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1188, '供暖符号', '供暖符号', '/profile/avatar/gongruanfuhao (97).svg', NULL, NULL, NULL, '2023-07-01 14:28:00', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1189, '供暖符号', '供暖符号', '/profile/avatar/gongruanfuhao (98).svg', NULL, NULL, NULL, '2023-07-01 14:28:00', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1190, '供暖符号', '供暖符号', '/profile/avatar/gongruanfuhao (99).svg', NULL, NULL, NULL, '2023-07-01 14:28:00', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1191, '供暖符号', '供暖符号', '/profile/avatar/gongruanfuhao (101).svg', NULL, NULL, NULL, '2023-07-01 14:28:00', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1192, '供暖符号', '供暖符号', '/profile/avatar/gongruanfuhao (100).svg', NULL, NULL, NULL, '2023-07-01 14:28:00', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1193, '供暖符号', '供暖符号', '/profile/avatar/gongruanfuhao (102).svg', NULL, NULL, NULL, '2023-07-01 14:28:00', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1194, '存储罐剖面', '存储罐剖面', '/profile/avatar/guantipaomian (1).svg', NULL, NULL, NULL, '2023-07-01 14:31:37', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1195, '存储罐剖面', '存储罐剖面', '/profile/avatar/guantipaomian (5).svg', NULL, NULL, NULL, '2023-07-01 14:31:38', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1196, '存储罐剖面', '存储罐剖面', '/profile/avatar/guantipaomian (6).svg', NULL, NULL, NULL, '2023-07-01 14:31:38', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1197, '存储罐剖面', '存储罐剖面', '/profile/avatar/guantipaomian (4).svg', NULL, NULL, NULL, '2023-07-01 14:31:38', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1198, '存储罐剖面', '存储罐剖面', '/profile/avatar/guantipaomian (3).svg', NULL, NULL, NULL, '2023-07-01 14:31:38', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1199, '存储罐剖面', '存储罐剖面', '/profile/avatar/guantipaomian (2).svg', NULL, NULL, NULL, '2023-07-01 14:31:38', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1200, '存储罐剖面', '存储罐剖面', '/profile/avatar/guantipaomian (7).svg', NULL, NULL, NULL, '2023-07-01 14:31:38', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1201, '存储罐剖面', '存储罐剖面', '/profile/avatar/guantipaomian (9).svg', NULL, NULL, NULL, '2023-07-01 14:31:38', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1202, '存储罐剖面', '存储罐剖面', '/profile/avatar/guantipaomian (10).svg', NULL, NULL, NULL, '2023-07-01 14:31:38', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1203, '存储罐剖面', '存储罐剖面', '/profile/avatar/guantipaomian (8).svg', NULL, NULL, NULL, '2023-07-01 14:31:38', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1204, '存储罐剖面', '存储罐剖面', '/profile/avatar/guantipaomian (11).svg', NULL, NULL, NULL, '2023-07-01 14:31:38', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1205, '存储罐剖面', '存储罐剖面', '/profile/avatar/guantipaomian (12).svg', NULL, NULL, NULL, '2023-07-01 14:31:38', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1206, '存储罐剖面', '存储罐剖面', '/profile/avatar/guantipaomian (13).svg', NULL, NULL, NULL, '2023-07-01 14:31:38', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1207, '存储罐剖面', '存储罐剖面', '/profile/avatar/guantipaomian (14).svg', NULL, NULL, NULL, '2023-07-01 14:31:38', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1208, '存储罐剖面', '存储罐剖面', '/profile/avatar/guantipaomian (15).svg', NULL, NULL, NULL, '2023-07-01 14:31:39', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1209, '存储罐剖面', '存储罐剖面', '/profile/avatar/guantipaomian (18).svg', NULL, NULL, NULL, '2023-07-01 14:31:39', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1210, '存储罐剖面', '存储罐剖面', '/profile/avatar/guantipaomian (16).svg', NULL, NULL, NULL, '2023-07-01 14:31:39', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1211, '存储罐剖面', '存储罐剖面', '/profile/avatar/guantipaomian (19).svg', NULL, NULL, NULL, '2023-07-01 14:31:39', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1212, '存储罐剖面', '存储罐剖面', '/profile/avatar/guantipaomian (17).svg', NULL, NULL, NULL, '2023-07-01 14:31:39', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1213, '存储罐剖面', '存储罐剖面', '/profile/avatar/guantipaomian (20).svg', NULL, NULL, NULL, '2023-07-01 14:31:39', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1214, '化工灌/塔', '化工灌/塔', '/profile/avatar/huagongta (1).svg', NULL, NULL, NULL, '2023-07-01 14:33:25', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1215, '化工灌/塔', '化工灌/塔', '/profile/avatar/huagongta (6).svg', NULL, NULL, NULL, '2023-07-01 14:33:25', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1216, '化工灌/塔', '化工灌/塔', '/profile/avatar/huagongta (3).svg', NULL, NULL, NULL, '2023-07-01 14:33:25', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1217, '化工灌/塔', '化工灌/塔', '/profile/avatar/huagongta (4).svg', NULL, NULL, NULL, '2023-07-01 14:33:25', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1218, '化工灌/塔', '化工灌/塔', '/profile/avatar/huagongta (2).svg', NULL, NULL, NULL, '2023-07-01 14:33:25', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1219, '化工灌/塔', '化工灌/塔', '/profile/avatar/huagongta (5).svg', NULL, NULL, NULL, '2023-07-01 14:33:25', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1220, '化工灌/塔', '化工灌/塔', '/profile/avatar/huagongta (7).svg', NULL, NULL, NULL, '2023-07-01 14:33:25', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1221, '化工灌/塔', '化工灌/塔', '/profile/avatar/huagongta (8).svg', NULL, NULL, NULL, '2023-07-01 14:33:25', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1222, '化工灌/塔', '化工灌/塔', '/profile/avatar/huagongta (10).svg', NULL, NULL, NULL, '2023-07-01 14:33:26', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1223, '化工灌/塔', '化工灌/塔', '/profile/avatar/huagongta (11).svg', NULL, NULL, NULL, '2023-07-01 14:33:26', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1224, '化工灌/塔', '化工灌/塔', '/profile/avatar/huagongta (12).svg', NULL, NULL, NULL, '2023-07-01 14:33:26', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1225, '化工灌/塔', '化工灌/塔', '/profile/avatar/huagongta (9).svg', NULL, NULL, NULL, '2023-07-01 14:33:26', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1226, '化工灌/塔', '化工灌/塔', '/profile/avatar/huagongta (13).svg', NULL, NULL, NULL, '2023-07-01 14:33:26', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1227, '化工灌/塔', '化工灌/塔', '/profile/avatar/huagongta (15).svg', NULL, NULL, NULL, '2023-07-01 14:33:26', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1228, '化工灌/塔', '化工灌/塔', '/profile/avatar/huagongta (14).svg', NULL, NULL, NULL, '2023-07-01 14:33:26', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1229, '化工灌/塔', '化工灌/塔', '/profile/avatar/huagongta (18).svg', NULL, NULL, NULL, '2023-07-01 14:33:26', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1230, '化工灌/塔', '化工灌/塔', '/profile/avatar/huagongta (16).svg', NULL, NULL, NULL, '2023-07-01 14:33:26', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1231, '化工灌/塔', '化工灌/塔', '/profile/avatar/huagongta (17).svg', NULL, NULL, NULL, '2023-07-01 14:33:26', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1232, '化工灌/塔', '化工灌/塔', '/profile/avatar/huagongta (20).svg', NULL, NULL, NULL, '2023-07-01 14:33:26', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1233, '化工灌/塔', '化工灌/塔', '/profile/avatar/huagongta (19).svg', NULL, NULL, NULL, '2023-07-01 14:33:26', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1234, '化工灌/塔', '化工灌/塔', '/profile/avatar/huagongta (24).svg', NULL, NULL, NULL, '2023-07-01 14:33:27', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1235, '化工灌/塔', '化工灌/塔', '/profile/avatar/huagongta (21).svg', NULL, NULL, NULL, '2023-07-01 14:33:27', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1236, '化工灌/塔', '化工灌/塔', '/profile/avatar/huagongta (23).svg', NULL, NULL, NULL, '2023-07-01 14:33:27', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1237, '化工灌/塔', '化工灌/塔', '/profile/avatar/huagongta (25).svg', NULL, NULL, NULL, '2023-07-01 14:33:27', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1238, '化工灌/塔', '化工灌/塔', '/profile/avatar/huagongta (22).svg', NULL, NULL, NULL, '2023-07-01 14:33:27', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1239, '化工灌/塔', '化工灌/塔', '/profile/avatar/huagongta (26).svg', NULL, NULL, NULL, '2023-07-01 14:33:27', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1240, '化工灌/塔', '化工灌/塔', '/profile/avatar/huagongta (27).svg', NULL, NULL, NULL, '2023-07-01 14:33:27', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1241, '化工灌/塔', '化工灌/塔', '/profile/avatar/huagongta (28).svg', NULL, NULL, NULL, '2023-07-01 14:33:27', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1242, '化工灌/塔', '化工灌/塔', '/profile/avatar/huagongta (29).svg', NULL, NULL, NULL, '2023-07-01 14:33:27', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1243, '化工灌/塔', '化工灌/塔', '/profile/avatar/huagongta (30).svg', NULL, NULL, NULL, '2023-07-01 14:33:27', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1244, '化工灌/塔', '化工灌/塔', '/profile/avatar/huagongta (31).svg', NULL, NULL, NULL, '2023-07-01 14:33:27', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1245, '化工灌/塔', '化工灌/塔', '/profile/avatar/huagongta (33).svg', NULL, NULL, NULL, '2023-07-01 14:33:27', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1246, '化工灌/塔', '化工灌/塔', '/profile/avatar/huagongta (32).svg', NULL, NULL, NULL, '2023-07-01 14:33:28', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1247, '化工灌/塔', '化工灌/塔', '/profile/avatar/huagongta (34).svg', NULL, NULL, NULL, '2023-07-01 14:33:28', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1248, '化工灌/塔', '化工灌/塔', '/profile/avatar/huagongta (35).svg', NULL, NULL, NULL, '2023-07-01 14:33:28', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1249, '化工灌/塔', '化工灌/塔', '/profile/avatar/huagongta (36).svg', NULL, NULL, NULL, '2023-07-01 14:33:28', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1250, '化工灌/塔', '化工灌/塔', '/profile/avatar/huagongta (37).svg', NULL, NULL, NULL, '2023-07-01 14:33:28', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1251, '化工灌/塔', '化工灌/塔', '/profile/avatar/huagongta (38).svg', NULL, NULL, NULL, '2023-07-01 14:33:28', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1252, '化工灌/塔', '化工灌/塔', '/profile/avatar/huagongta (39).svg', NULL, NULL, NULL, '2023-07-01 14:33:28', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1253, '化工灌/塔', '化工灌/塔', '/profile/avatar/huagongta (40).svg', NULL, NULL, NULL, '2023-07-01 14:33:28', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1254, '化工灌/塔', '化工灌/塔', '/profile/avatar/huagongta (41).svg', NULL, NULL, NULL, '2023-07-01 14:33:28', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1255, '化工灌/塔', '化工灌/塔', '/profile/avatar/huagongta (42).svg', NULL, NULL, NULL, '2023-07-01 14:33:28', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1256, '化工灌/塔', '化工灌/塔', '/profile/avatar/huagongta (44).svg', NULL, NULL, NULL, '2023-07-01 14:33:28', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1257, '化工灌/塔', '化工灌/塔', '/profile/avatar/huagongta (43).svg', NULL, NULL, NULL, '2023-07-01 14:33:28', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1258, '基本形状', '基本形状', '/profile/avatar/jibenxingzhuang (1).svg', NULL, NULL, NULL, '2023-07-01 14:36:14', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1259, '基本形状', '基本形状', '/profile/avatar/jibenxingzhuang (5).svg', NULL, NULL, NULL, '2023-07-01 14:36:14', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1260, '基本形状', '基本形状', '/profile/avatar/jibenxingzhuang (2).svg', NULL, NULL, NULL, '2023-07-01 14:36:14', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1261, '基本形状', '基本形状', '/profile/avatar/jibenxingzhuang (6).svg', NULL, NULL, NULL, '2023-07-01 14:36:14', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1262, '基本形状', '基本形状', '/profile/avatar/jibenxingzhuang (3).svg', NULL, NULL, NULL, '2023-07-01 14:36:14', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1263, '基本形状', '基本形状', '/profile/avatar/jibenxingzhuang (4).svg', NULL, NULL, NULL, '2023-07-01 14:36:14', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1264, '基本形状', '基本形状', '/profile/avatar/jibenxingzhuang (7).svg', NULL, NULL, NULL, '2023-07-01 14:36:14', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1265, '基本形状', '基本形状', '/profile/avatar/jibenxingzhuang (9).svg', NULL, NULL, NULL, '2023-07-01 14:36:14', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1266, '基本形状', '基本形状', '/profile/avatar/jibenxingzhuang (8).svg', NULL, NULL, NULL, '2023-07-01 14:36:15', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1267, '基本形状', '基本形状', '/profile/avatar/jibenxingzhuang (14).svg', NULL, NULL, NULL, '2023-07-01 14:36:15', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1268, '基本形状', '基本形状', '/profile/avatar/jibenxingzhuang (10).svg', NULL, NULL, NULL, '2023-07-01 14:36:15', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1269, '基本形状', '基本形状', '/profile/avatar/jibenxingzhuang (11).svg', NULL, NULL, NULL, '2023-07-01 14:36:15', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1270, '基本形状', '基本形状', '/profile/avatar/jibenxingzhuang (12).svg', NULL, NULL, NULL, '2023-07-01 14:36:15', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1271, '基本形状', '基本形状', '/profile/avatar/jibenxingzhuang (13).svg', NULL, NULL, NULL, '2023-07-01 14:36:15', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1272, '基本形状', '基本形状', '/profile/avatar/jibenxingzhuang (15).svg', NULL, NULL, NULL, '2023-07-01 14:36:15', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1273, '基本形状', '基本形状', '/profile/avatar/jibenxingzhuang (17).svg', NULL, NULL, NULL, '2023-07-01 14:36:15', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1274, '基本形状', '基本形状', '/profile/avatar/jibenxingzhuang (16).svg', NULL, NULL, NULL, '2023-07-01 14:36:15', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1275, '基本形状', '基本形状', '/profile/avatar/jibenxingzhuang (19).svg', NULL, NULL, NULL, '2023-07-01 14:36:15', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1276, '基本形状', '基本形状', '/profile/avatar/jibenxingzhuang (18).svg', NULL, NULL, NULL, '2023-07-01 14:36:15', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1277, '基本形状', '基本形状', '/profile/avatar/jibenxingzhuang (20).svg', NULL, NULL, NULL, '2023-07-01 14:36:15', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1278, '基本形状', '基本形状', '/profile/avatar/jibenxingzhuang (21).svg', NULL, NULL, NULL, '2023-07-01 14:36:15', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1279, '基本形状', '基本形状', '/profile/avatar/jibenxingzhuang (23).svg', NULL, NULL, NULL, '2023-07-01 14:36:15', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1280, '基本形状', '基本形状', '/profile/avatar/jibenxingzhuang (22).svg', NULL, NULL, NULL, '2023-07-01 14:36:15', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1281, '基本形状', '基本形状', '/profile/avatar/jibenxingzhuang (24).svg', NULL, NULL, NULL, '2023-07-01 14:36:15', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1282, '基本形状', '基本形状', '/profile/avatar/jibenxingzhuang (25).svg', NULL, NULL, NULL, '2023-07-01 14:36:16', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1283, '基本形状', '基本形状', '/profile/avatar/jibenxingzhuang (26).svg', NULL, NULL, NULL, '2023-07-01 14:36:16', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1284, '基本形状', '基本形状', '/profile/avatar/jibenxingzhuang (30).svg', NULL, NULL, NULL, '2023-07-01 14:36:16', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1285, '基本形状', '基本形状', '/profile/avatar/jibenxingzhuang (27).svg', NULL, NULL, NULL, '2023-07-01 14:36:16', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1286, '基本形状', '基本形状', '/profile/avatar/jibenxingzhuang (28).svg', NULL, NULL, NULL, '2023-07-01 14:36:16', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1287, '基本形状', '基本形状', '/profile/avatar/jibenxingzhuang (29).svg', NULL, NULL, NULL, '2023-07-01 14:36:16', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1288, '基本形状', '基本形状', '/profile/avatar/jibenxingzhuang (32).svg', NULL, NULL, NULL, '2023-07-01 14:36:16', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1289, '基本形状', '基本形状', '/profile/avatar/jibenxingzhuang (31).svg', NULL, NULL, NULL, '2023-07-01 14:36:16', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1290, '基本形状', '基本形状', '/profile/avatar/jibenxingzhuang (33).svg', NULL, NULL, NULL, '2023-07-01 14:36:16', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1291, '基本形状', '基本形状', '/profile/avatar/jibenxingzhuang (34).svg', NULL, NULL, NULL, '2023-07-01 14:36:16', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1292, '基本形状', '基本形状', '/profile/avatar/jibenxingzhuang (36).svg', NULL, NULL, NULL, '2023-07-01 14:36:16', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1293, '基本形状', '基本形状', '/profile/avatar/jibenxingzhuang (35).svg', NULL, NULL, NULL, '2023-07-01 14:36:16', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1294, '基本形状', '基本形状', '/profile/avatar/jibenxingzhuang (38).svg', NULL, NULL, NULL, '2023-07-01 14:36:16', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1295, '基本形状', '基本形状', '/profile/avatar/jibenxingzhuang (37).svg', NULL, NULL, NULL, '2023-07-01 14:36:16', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1296, '基本形状', '基本形状', '/profile/avatar/jibenxingzhuang (39).svg', NULL, NULL, NULL, '2023-07-01 14:36:17', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1297, '基本形状', '基本形状', '/profile/avatar/jibenxingzhuang (40).svg', NULL, NULL, NULL, '2023-07-01 14:36:17', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1298, '基本形状', '基本形状', '/profile/avatar/jibenxingzhuang (42).svg', NULL, NULL, NULL, '2023-07-01 14:36:17', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1299, '基本形状', '基本形状', '/profile/avatar/jibenxingzhuang (41).svg', NULL, NULL, NULL, '2023-07-01 14:36:17', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1300, '基本形状', '基本形状', '/profile/avatar/jibenxingzhuang (43).svg', NULL, NULL, NULL, '2023-07-01 14:36:17', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1301, '基本形状', '基本形状', '/profile/avatar/jibenxingzhuang (44).svg', NULL, NULL, NULL, '2023-07-01 14:36:17', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1302, '基本形状', '基本形状', '/profile/avatar/jibenxingzhuang (45).svg', NULL, NULL, NULL, '2023-07-01 14:36:17', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1303, '基本形状', '基本形状', '/profile/avatar/jibenxingzhuang (46).svg', NULL, NULL, NULL, '2023-07-01 14:36:17', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1304, '基本形状', '基本形状', '/profile/avatar/jibenxingzhuang (48).svg', NULL, NULL, NULL, '2023-07-01 14:36:17', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1305, '基本形状', '基本形状', '/profile/avatar/jibenxingzhuang (47).svg', NULL, NULL, NULL, '2023-07-01 14:36:17', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1306, '基本形状', '基本形状', '/profile/avatar/jibenxingzhuang (49).svg', NULL, NULL, NULL, '2023-07-01 14:36:17', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1307, '基本形状-3D', '基本形状-3D', '/profile/avatar/jibenxingzhuang-3D (2).svg', NULL, NULL, NULL, '2023-07-01 14:36:58', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1308, '基本形状-3D', '基本形状-3D', '/profile/avatar/jibenxingzhuang-3D (1).svg', NULL, NULL, NULL, '2023-07-01 14:36:58', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1309, '基本形状-3D', '基本形状-3D', '/profile/avatar/jibenxingzhuang-3D (3).svg', NULL, NULL, NULL, '2023-07-01 14:36:59', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1310, '基本形状-3D', '基本形状-3D', '/profile/avatar/jibenxingzhuang-3D (4).svg', NULL, NULL, NULL, '2023-07-01 14:36:59', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1311, '基本形状-3D', '基本形状-3D', '/profile/avatar/jibenxingzhuang-3D (5).svg', NULL, NULL, NULL, '2023-07-01 14:36:59', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1312, '基本形状-3D', '基本形状-3D', '/profile/avatar/jibenxingzhuang-3D (7).svg', NULL, NULL, NULL, '2023-07-01 14:36:59', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1313, '基本形状-3D', '基本形状-3D', '/profile/avatar/jibenxingzhuang-3D (8).svg', NULL, NULL, NULL, '2023-07-01 14:36:59', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1314, '基本形状-3D', '基本形状-3D', '/profile/avatar/jibenxingzhuang-3D (6).svg', NULL, NULL, NULL, '2023-07-01 14:36:59', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1315, '基本形状-3D', '基本形状-3D', '/profile/avatar/jibenxingzhuang-3D (11).svg', NULL, NULL, NULL, '2023-07-01 14:36:59', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1316, '基本形状-3D', '基本形状-3D', '/profile/avatar/jibenxingzhuang-3D (9).svg', NULL, NULL, NULL, '2023-07-01 14:36:59', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1317, '基本形状-3D', '基本形状-3D', '/profile/avatar/jibenxingzhuang-3D (12).svg', NULL, NULL, NULL, '2023-07-01 14:36:59', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1318, '基本形状-3D', '基本形状-3D', '/profile/avatar/jibenxingzhuang-3D (10).svg', NULL, NULL, NULL, '2023-07-01 14:36:59', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1319, '基本形状-3D', '基本形状-3D', '/profile/avatar/jibenxingzhuang-3D (13).svg', NULL, NULL, NULL, '2023-07-01 14:36:59', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1320, '基本形状-3D', '基本形状-3D', '/profile/avatar/jibenxingzhuang-3D (14).svg', NULL, NULL, NULL, '2023-07-01 14:36:59', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1321, '基本形状-3D', '基本形状-3D', '/profile/avatar/jibenxingzhuang-3D (15).svg', NULL, NULL, NULL, '2023-07-01 14:36:59', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1322, '基本形状-3D', '基本形状-3D', '/profile/avatar/jibenxingzhuang-3D (18).svg', NULL, NULL, NULL, '2023-07-01 14:36:59', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1323, '基本形状-3D', '基本形状-3D', '/profile/avatar/jibenxingzhuang-3D (16).svg', NULL, NULL, NULL, '2023-07-01 14:36:59', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1324, '基本形状-3D', '基本形状-3D', '/profile/avatar/jibenxingzhuang-3D (17).svg', NULL, NULL, NULL, '2023-07-01 14:36:59', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1325, '基本形状-3D', '基本形状-3D', '/profile/avatar/jibenxingzhuang-3D (19).svg', NULL, NULL, NULL, '2023-07-01 14:37:00', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1326, '基本形状-3D', '基本形状-3D', '/profile/avatar/jibenxingzhuang-3D (20).svg', NULL, NULL, NULL, '2023-07-01 14:37:00', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1327, '基本形状-3D', '基本形状-3D', '/profile/avatar/jibenxingzhuang-3D (22).svg', NULL, NULL, NULL, '2023-07-01 14:37:00', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1328, '基本形状-3D', '基本形状-3D', '/profile/avatar/jibenxingzhuang-3D (23).svg', NULL, NULL, NULL, '2023-07-01 14:37:00', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1329, '基本形状-3D', '基本形状-3D', '/profile/avatar/jibenxingzhuang-3D (21).svg', NULL, NULL, NULL, '2023-07-01 14:37:00', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1330, '基本形状-3D', '基本形状-3D', '/profile/avatar/jibenxingzhuang-3D (25).svg', NULL, NULL, NULL, '2023-07-01 14:37:00', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1331, '基本形状-3D', '基本形状-3D', '/profile/avatar/jibenxingzhuang-3D (24).svg', NULL, NULL, NULL, '2023-07-01 14:37:00', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1332, '基本形状-3D', '基本形状-3D', '/profile/avatar/jibenxingzhuang-3D (26).svg', NULL, NULL, NULL, '2023-07-01 14:37:00', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1333, '基本形状-3D', '基本形状-3D', '/profile/avatar/jibenxingzhuang-3D (28).svg', NULL, NULL, NULL, '2023-07-01 14:37:00', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1334, '基本形状-3D', '基本形状-3D', '/profile/avatar/jibenxingzhuang-3D (30).svg', NULL, NULL, NULL, '2023-07-01 14:37:00', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1335, '基本形状-3D', '基本形状-3D', '/profile/avatar/jibenxingzhuang-3D (29).svg', NULL, NULL, NULL, '2023-07-01 14:37:00', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1336, '基本形状-3D', '基本形状-3D', '/profile/avatar/jibenxingzhuang-3D (27).svg', NULL, NULL, NULL, '2023-07-01 14:37:00', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1337, '建筑物', '建筑物', '/profile/avatar/jianzhu (1).svg', NULL, NULL, NULL, '2023-07-01 14:37:27', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1338, '建筑物', '建筑物', '/profile/avatar/jianzhu (2).svg', NULL, NULL, NULL, '2023-07-01 14:37:27', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1339, '建筑物', '建筑物', '/profile/avatar/jianzhu (4).svg', NULL, NULL, NULL, '2023-07-01 14:37:27', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1340, '建筑物', '建筑物', '/profile/avatar/jianzhu (3).svg', NULL, NULL, NULL, '2023-07-01 14:37:27', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1341, '建筑物', '建筑物', '/profile/avatar/jianzhu (6).svg', NULL, NULL, NULL, '2023-07-01 14:37:27', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1342, '建筑物', '建筑物', '/profile/avatar/jianzhu (5).svg', NULL, NULL, NULL, '2023-07-01 14:37:27', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1343, '建筑物', '建筑物', '/profile/avatar/jianzhu (7).svg', NULL, NULL, NULL, '2023-07-01 14:37:27', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1344, '建筑物', '建筑物', '/profile/avatar/jianzhu (8).svg', NULL, NULL, NULL, '2023-07-01 14:37:28', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1345, '建筑物', '建筑物', '/profile/avatar/jianzhu (12).svg', NULL, NULL, NULL, '2023-07-01 14:37:28', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1346, '建筑物', '建筑物', '/profile/avatar/jianzhu (11).svg', NULL, NULL, NULL, '2023-07-01 14:37:28', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1347, '建筑物', '建筑物', '/profile/avatar/jianzhu (9).svg', NULL, NULL, NULL, '2023-07-01 14:37:28', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1348, '建筑物', '建筑物', '/profile/avatar/jianzhu (10).svg', NULL, NULL, NULL, '2023-07-01 14:37:28', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1349, '建筑物', '建筑物', '/profile/avatar/jianzhu (13).svg', NULL, NULL, NULL, '2023-07-01 14:37:28', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1350, '建筑物', '建筑物', '/profile/avatar/jianzhu (14).svg', NULL, NULL, NULL, '2023-07-01 14:37:28', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1351, '建筑物', '建筑物', '/profile/avatar/jianzhu (18).svg', NULL, NULL, NULL, '2023-07-01 14:37:28', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1352, '建筑物', '建筑物', '/profile/avatar/jianzhu (21).svg', NULL, NULL, NULL, '2023-07-01 14:37:28', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1353, '建筑物', '建筑物', '/profile/avatar/jianzhu (15).svg', NULL, NULL, NULL, '2023-07-01 14:37:28', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1354, '建筑物', '建筑物', '/profile/avatar/jianzhu (16).svg', NULL, NULL, NULL, '2023-07-01 14:37:28', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1355, '建筑物', '建筑物', '/profile/avatar/jianzhu (17).svg', NULL, NULL, NULL, '2023-07-01 14:37:28', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1356, '建筑物', '建筑物', '/profile/avatar/jianzhu (19).svg', NULL, NULL, NULL, '2023-07-01 14:37:29', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1357, '建筑物', '建筑物', '/profile/avatar/jianzhu (24).svg', NULL, NULL, NULL, '2023-07-01 14:37:29', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1358, '建筑物', '建筑物', '/profile/avatar/jianzhu (22).svg', NULL, NULL, NULL, '2023-07-01 14:37:29', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1359, '建筑物', '建筑物', '/profile/avatar/jianzhu (23).svg', NULL, NULL, NULL, '2023-07-01 14:37:29', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1360, '建筑物', '建筑物', '/profile/avatar/jianzhu (20).svg', NULL, NULL, NULL, '2023-07-01 14:37:29', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1361, '建筑物', '建筑物', '/profile/avatar/jianzhu (25).svg', NULL, NULL, NULL, '2023-07-01 14:37:29', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1362, '建筑物', '建筑物', '/profile/avatar/jianzhu (26).svg', NULL, NULL, NULL, '2023-07-01 14:37:29', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1363, '建筑物', '建筑物', '/profile/avatar/jianzhu (28).svg', NULL, NULL, NULL, '2023-07-01 14:37:29', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1364, '建筑物', '建筑物', '/profile/avatar/jianzhu (27).svg', NULL, NULL, NULL, '2023-07-01 14:37:29', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1365, '建筑物', '建筑物', '/profile/avatar/jianzhu (29).svg', NULL, NULL, NULL, '2023-07-01 14:37:29', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1366, '建筑物', '建筑物', '/profile/avatar/jianzhu (31).svg', NULL, NULL, NULL, '2023-07-01 14:37:29', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1367, '建筑物', '建筑物', '/profile/avatar/jianzhu (30).svg', NULL, NULL, NULL, '2023-07-01 14:37:29', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1368, '建筑物', '建筑物', '/profile/avatar/jianzhu (34).svg', NULL, NULL, NULL, '2023-07-01 14:37:29', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1369, '建筑物', '建筑物', '/profile/avatar/jianzhu (33).svg', NULL, NULL, NULL, '2023-07-01 14:37:30', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1370, '建筑物', '建筑物', '/profile/avatar/jianzhu (32).svg', NULL, NULL, NULL, '2023-07-01 14:37:30', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1371, '建筑物', '建筑物', '/profile/avatar/jianzhu (35).svg', NULL, NULL, NULL, '2023-07-01 14:37:30', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1372, '建筑物', '建筑物', '/profile/avatar/jianzhu (36).svg', NULL, NULL, NULL, '2023-07-01 14:37:30', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1373, '建筑物', '建筑物', '/profile/avatar/jianzhu (37).svg', NULL, NULL, NULL, '2023-07-01 14:37:30', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1374, '建筑物', '建筑物', '/profile/avatar/jianzhu (38).svg', NULL, NULL, NULL, '2023-07-01 14:37:30', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1375, '建筑物', '建筑物', '/profile/avatar/jianzhu (40).svg', NULL, NULL, NULL, '2023-07-01 14:37:30', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1376, '建筑物', '建筑物', '/profile/avatar/jianzhu (39).svg', NULL, NULL, NULL, '2023-07-01 14:37:30', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1377, '建筑物', '建筑物', '/profile/avatar/jianzhu (41).svg', NULL, NULL, NULL, '2023-07-01 14:37:30', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1378, '建筑物', '建筑物', '/profile/avatar/jianzhu (42).svg', NULL, NULL, NULL, '2023-07-01 14:37:30', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1379, '建筑物', '建筑物', '/profile/avatar/jianzhu (43).svg', NULL, NULL, NULL, '2023-07-01 14:37:30', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1380, '建筑物', '建筑物', '/profile/avatar/jianzhu (44).svg', NULL, NULL, NULL, '2023-07-01 14:37:30', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1381, '箭头', '箭头', '/profile/avatar/jiantou (1).svg', NULL, NULL, NULL, '2023-07-01 14:38:42', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1382, '箭头', '箭头', '/profile/avatar/jiantou (2).svg', NULL, NULL, NULL, '2023-07-01 14:38:42', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1383, '箭头', '箭头', '/profile/avatar/jiantou (3).svg', NULL, NULL, NULL, '2023-07-01 14:38:42', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1384, '箭头', '箭头', '/profile/avatar/jiantou (4).svg', NULL, NULL, NULL, '2023-07-01 14:38:42', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1385, '箭头', '箭头', '/profile/avatar/jiantou (6).svg', NULL, NULL, NULL, '2023-07-01 14:38:42', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1386, '箭头', '箭头', '/profile/avatar/jiantou (5).svg', NULL, NULL, NULL, '2023-07-01 14:38:42', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1387, '箭头', '箭头', '/profile/avatar/jiantou (8).svg', NULL, NULL, NULL, '2023-07-01 14:38:43', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1388, '箭头', '箭头', '/profile/avatar/jiantou (9).svg', NULL, NULL, NULL, '2023-07-01 14:38:43', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1389, '箭头', '箭头', '/profile/avatar/jiantou (7).svg', NULL, NULL, NULL, '2023-07-01 14:38:43', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1390, '箭头', '箭头', '/profile/avatar/jiantou (10).svg', NULL, NULL, NULL, '2023-07-01 14:38:43', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1391, '箭头', '箭头', '/profile/avatar/jiantou (11).svg', NULL, NULL, NULL, '2023-07-01 14:38:43', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1392, '箭头', '箭头', '/profile/avatar/jiantou (14).svg', NULL, NULL, NULL, '2023-07-01 14:38:43', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1393, '箭头', '箭头', '/profile/avatar/jiantou (12).svg', NULL, NULL, NULL, '2023-07-01 14:38:43', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1394, '箭头', '箭头', '/profile/avatar/jiantou (13).svg', NULL, NULL, NULL, '2023-07-01 14:38:43', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1395, '箭头', '箭头', '/profile/avatar/jiantou (15).svg', NULL, NULL, NULL, '2023-07-01 14:38:43', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1396, '箭头', '箭头', '/profile/avatar/jiantou (17).svg', NULL, NULL, NULL, '2023-07-01 14:38:43', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1397, '箭头', '箭头', '/profile/avatar/jiantou (16).svg', NULL, NULL, NULL, '2023-07-01 14:38:43', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1398, '箭头', '箭头', '/profile/avatar/jiantou (18).svg', NULL, NULL, NULL, '2023-07-01 14:38:43', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1399, '箭头', '箭头', '/profile/avatar/jiantou (20).svg', NULL, NULL, NULL, '2023-07-01 14:38:43', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1400, '箭头', '箭头', '/profile/avatar/jiantou (19).svg', NULL, NULL, NULL, '2023-07-01 14:38:44', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1401, '箭头', '箭头', '/profile/avatar/jiantou (22).svg', NULL, NULL, NULL, '2023-07-01 14:38:44', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1402, '箭头', '箭头', '/profile/avatar/jiantou (23).svg', NULL, NULL, NULL, '2023-07-01 14:38:44', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1403, '箭头', '箭头', '/profile/avatar/jiantou (25).svg', NULL, NULL, NULL, '2023-07-01 14:38:44', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1404, '箭头', '箭头', '/profile/avatar/jiantou (24).svg', NULL, NULL, NULL, '2023-07-01 14:38:44', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1405, '箭头', '箭头', '/profile/avatar/jiantou (21).svg', NULL, NULL, NULL, '2023-07-01 14:38:44', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1406, '箭头', '箭头', '/profile/avatar/jiantou (26).svg', NULL, NULL, NULL, '2023-07-01 14:38:44', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1407, '箭头', '箭头', '/profile/avatar/jiantou (27).svg', NULL, NULL, NULL, '2023-07-01 14:38:44', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1408, '箭头', '箭头', '/profile/avatar/jiantou (28).svg', NULL, NULL, NULL, '2023-07-01 14:38:44', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1409, '箭头', '箭头', '/profile/avatar/jiantou (30).svg', NULL, NULL, NULL, '2023-07-01 14:38:44', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1410, '箭头', '箭头', '/profile/avatar/jiantou (29).svg', NULL, NULL, NULL, '2023-07-01 14:38:44', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1411, '箭头', '箭头', '/profile/avatar/jiantou (32).svg', NULL, NULL, NULL, '2023-07-01 14:38:44', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1412, '箭头', '箭头', '/profile/avatar/jiantou (33).svg', NULL, NULL, NULL, '2023-07-01 14:38:44', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1413, '箭头', '箭头', '/profile/avatar/jiantou (31).svg', NULL, NULL, NULL, '2023-07-01 14:38:44', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1414, '箭头', '箭头', '/profile/avatar/jiantou (34).svg', NULL, NULL, NULL, '2023-07-01 14:38:45', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1415, '箭头', '箭头', '/profile/avatar/jiantou (35).svg', NULL, NULL, NULL, '2023-07-01 14:38:45', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1416, '箭头', '箭头', '/profile/avatar/jiantou (37).svg', NULL, NULL, NULL, '2023-07-01 14:38:45', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1417, '箭头', '箭头', '/profile/avatar/jiantou (36).svg', NULL, NULL, NULL, '2023-07-01 14:38:45', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1418, '箭头', '箭头', '/profile/avatar/jiantou (38).svg', NULL, NULL, NULL, '2023-07-01 14:38:45', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1419, '箭头', '箭头', '/profile/avatar/jiantou (41).svg', NULL, NULL, NULL, '2023-07-01 14:38:45', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1420, '箭头', '箭头', '/profile/avatar/jiantou (39).svg', NULL, NULL, NULL, '2023-07-01 14:38:45', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1421, '箭头', '箭头', '/profile/avatar/jiantou (42).svg', NULL, NULL, NULL, '2023-07-01 14:38:45', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1422, '箭头', '箭头', '/profile/avatar/jiantou (40).svg', NULL, NULL, NULL, '2023-07-01 14:38:45', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1423, '箭头', '箭头', '/profile/avatar/jiantou (43).svg', NULL, NULL, NULL, '2023-07-01 14:38:45', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1424, '箭头', '箭头', '/profile/avatar/jiantou (44).svg', NULL, NULL, NULL, '2023-07-01 14:38:45', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1425, '箭头', '箭头', '/profile/avatar/jiantou (45).svg', NULL, NULL, NULL, '2023-07-01 14:38:45', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1426, '箭头', '箭头', '/profile/avatar/jiantou (46).svg', NULL, NULL, NULL, '2023-07-01 14:38:45', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1427, '箭头', '箭头', '/profile/avatar/jiantou (47).svg', NULL, NULL, NULL, '2023-07-01 14:38:45', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1428, '箭头', '箭头', '/profile/avatar/jiantou (48).svg', NULL, NULL, NULL, '2023-07-01 14:38:46', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1429, '箭头', '箭头', '/profile/avatar/jiantou (50).svg', NULL, NULL, NULL, '2023-07-01 14:38:46', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1430, '箭头', '箭头', '/profile/avatar/jiantou (49).svg', NULL, NULL, NULL, '2023-07-01 14:38:46', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1431, '箭头', '箭头', '/profile/avatar/jiantou (51).svg', NULL, NULL, NULL, '2023-07-01 14:38:46', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1432, '箭头', '箭头', '/profile/avatar/jiantou (52).svg', NULL, NULL, NULL, '2023-07-01 14:38:46', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1433, '箭头', '箭头', '/profile/avatar/jiantou (53).svg', NULL, NULL, NULL, '2023-07-01 14:38:46', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1434, '箭头', '箭头', '/profile/avatar/jiantou (54).svg', NULL, NULL, NULL, '2023-07-01 14:38:46', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1435, '箭头', '箭头', '/profile/avatar/jiantou (55).svg', NULL, NULL, NULL, '2023-07-01 14:38:46', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1436, '箭头', '箭头', '/profile/avatar/jiantou (56).svg', NULL, NULL, NULL, '2023-07-01 14:38:46', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1437, '箭头', '箭头', '/profile/avatar/jiantou (57).svg', NULL, NULL, NULL, '2023-07-01 14:38:46', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1438, '箭头', '箭头', '/profile/avatar/jiantou (58).svg', NULL, NULL, NULL, '2023-07-01 14:38:46', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1439, '箭头', '箭头', '/profile/avatar/jiantou (59).svg', NULL, NULL, NULL, '2023-07-01 14:38:46', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1440, '箭头', '箭头', '/profile/avatar/jiantou (61).svg', NULL, NULL, NULL, '2023-07-01 14:38:47', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1441, '箭头', '箭头', '/profile/avatar/jiantou (60).svg', NULL, NULL, NULL, '2023-07-01 14:38:47', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1442, '箭头', '箭头', '/profile/avatar/jiantou (63).svg', NULL, NULL, NULL, '2023-07-01 14:38:47', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1443, '箭头', '箭头', '/profile/avatar/jiantou (62).svg', NULL, NULL, NULL, '2023-07-01 14:38:47', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1444, '搅拌机', '搅拌机', '/profile/avatar/搅拌器 (2).svg', NULL, NULL, NULL, '2023-07-01 14:40:24', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1445, '搅拌机', '搅拌机', '/profile/avatar/搅拌器 (1).svg', NULL, NULL, NULL, '2023-07-01 14:40:24', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1446, '搅拌机', '搅拌机', '/profile/avatar/搅拌器 (3).svg', NULL, NULL, NULL, '2023-07-01 14:40:24', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1447, '搅拌机', '搅拌机', '/profile/avatar/搅拌器 (4).svg', NULL, NULL, NULL, '2023-07-01 14:40:24', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1448, '搅拌机', '搅拌机', '/profile/avatar/搅拌器 (6).svg', NULL, NULL, NULL, '2023-07-01 14:40:24', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1449, '搅拌机', '搅拌机', '/profile/avatar/搅拌器 (5).svg', NULL, NULL, NULL, '2023-07-01 14:40:24', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1450, '搅拌机', '搅拌机', '/profile/avatar/搅拌器 (8).svg', NULL, NULL, NULL, '2023-07-01 14:40:24', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1451, '搅拌机', '搅拌机', '/profile/avatar/搅拌器 (9).svg', NULL, NULL, NULL, '2023-07-01 14:40:24', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1452, '搅拌机', '搅拌机', '/profile/avatar/搅拌器 (7).svg', NULL, NULL, NULL, '2023-07-01 14:40:24', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1453, '搅拌机', '搅拌机', '/profile/avatar/搅拌器 (13).svg', NULL, NULL, NULL, '2023-07-01 14:40:24', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1454, '搅拌机', '搅拌机', '/profile/avatar/搅拌器 (10).svg', NULL, NULL, NULL, '2023-07-01 14:40:24', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1455, '搅拌机', '搅拌机', '/profile/avatar/搅拌器 (11).svg', NULL, NULL, NULL, '2023-07-01 14:40:24', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1456, '搅拌机', '搅拌机', '/profile/avatar/搅拌器 (12).svg', NULL, NULL, NULL, '2023-07-01 14:40:25', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1457, '搅拌机', '搅拌机', '/profile/avatar/搅拌器 (14).svg', NULL, NULL, NULL, '2023-07-01 14:40:25', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1458, '搅拌机', '搅拌机', '/profile/avatar/搅拌器 (15).svg', NULL, NULL, NULL, '2023-07-01 14:40:25', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1459, '搅拌机', '搅拌机', '/profile/avatar/搅拌器 (16).svg', NULL, NULL, NULL, '2023-07-01 14:40:25', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1460, '搅拌机', '搅拌机', '/profile/avatar/搅拌器 (17).svg', NULL, NULL, NULL, '2023-07-01 14:40:25', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1461, '搅拌机', '搅拌机', '/profile/avatar/搅拌器 (18).svg', NULL, NULL, NULL, '2023-07-01 14:40:25', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1462, '搅拌机', '搅拌机', '/profile/avatar/搅拌器 (19).svg', NULL, NULL, NULL, '2023-07-01 14:40:25', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1463, '搅拌机', '搅拌机', '/profile/avatar/搅拌器 (21).svg', NULL, NULL, NULL, '2023-07-01 14:40:25', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1464, '搅拌机', '搅拌机', '/profile/avatar/搅拌器 (20).svg', NULL, NULL, NULL, '2023-07-01 14:40:25', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1465, '搅拌机', '搅拌机', '/profile/avatar/搅拌器 (23).svg', NULL, NULL, NULL, '2023-07-01 14:40:25', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1466, '搅拌机', '搅拌机', '/profile/avatar/搅拌器 (24).svg', NULL, NULL, NULL, '2023-07-01 14:40:25', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1467, '搅拌机', '搅拌机', '/profile/avatar/搅拌器 (22).svg', NULL, NULL, NULL, '2023-07-01 14:40:25', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1468, '搅拌机', '搅拌机', '/profile/avatar/搅拌器 (25).svg', NULL, NULL, NULL, '2023-07-01 14:40:26', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1469, '控制柜', '控制柜', '/profile/avatar/kongzhigui (1).svg', NULL, NULL, NULL, '2023-07-01 14:41:20', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1470, '控制柜', '控制柜', '/profile/avatar/kongzhigui (2).svg', NULL, NULL, NULL, '2023-07-01 14:41:20', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1471, '控制柜', '控制柜', '/profile/avatar/kongzhigui (5).svg', NULL, NULL, NULL, '2023-07-01 14:41:20', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1472, '控制柜', '控制柜', '/profile/avatar/kongzhigui (4).svg', NULL, NULL, NULL, '2023-07-01 14:41:20', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1473, '控制柜', '控制柜', '/profile/avatar/kongzhigui (3).svg', NULL, NULL, NULL, '2023-07-01 14:41:20', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1474, '控制柜', '控制柜', '/profile/avatar/kongzhigui (6).svg', NULL, NULL, NULL, '2023-07-01 14:41:20', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1475, '控制柜', '控制柜', '/profile/avatar/kongzhigui (7).svg', NULL, NULL, NULL, '2023-07-01 14:41:20', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1476, '控制柜', '控制柜', '/profile/avatar/kongzhigui (8).svg', NULL, NULL, NULL, '2023-07-01 14:41:21', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1477, '控制柜', '控制柜', '/profile/avatar/kongzhigui (9).svg', NULL, NULL, NULL, '2023-07-01 14:41:21', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1478, '控制柜', '控制柜', '/profile/avatar/kongzhigui (11).svg', NULL, NULL, NULL, '2023-07-01 14:41:21', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1479, '控制柜', '控制柜', '/profile/avatar/kongzhigui (12).svg', NULL, NULL, NULL, '2023-07-01 14:41:21', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1480, '控制柜', '控制柜', '/profile/avatar/kongzhigui (10).svg', NULL, NULL, NULL, '2023-07-01 14:41:21', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1481, '控制柜', '控制柜', '/profile/avatar/kongzhigui (15).svg', NULL, NULL, NULL, '2023-07-01 14:41:21', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1482, '控制柜', '控制柜', '/profile/avatar/kongzhigui (13).svg', NULL, NULL, NULL, '2023-07-01 14:41:21', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1483, '控制柜', '控制柜', '/profile/avatar/kongzhigui (17).svg', NULL, NULL, NULL, '2023-07-01 14:41:21', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1484, '控制柜', '控制柜', '/profile/avatar/kongzhigui (14).svg', NULL, NULL, NULL, '2023-07-01 14:41:21', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1485, '控制柜', '控制柜', '/profile/avatar/kongzhigui (18).svg', NULL, NULL, NULL, '2023-07-01 14:41:21', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1486, '控制柜', '控制柜', '/profile/avatar/kongzhigui (16).svg', NULL, NULL, NULL, '2023-07-01 14:41:21', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1487, '控制柜', '控制柜', '/profile/avatar/kongzhigui (19).svg', NULL, NULL, NULL, '2023-07-01 14:41:21', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1488, '控制柜', '控制柜', '/profile/avatar/kongzhigui (20).svg', NULL, NULL, NULL, '2023-07-01 14:41:22', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1489, '控制柜', '控制柜', '/profile/avatar/kongzhigui (22).svg', NULL, NULL, NULL, '2023-07-01 14:41:22', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1490, '控制柜', '控制柜', '/profile/avatar/kongzhigui (21).svg', NULL, NULL, NULL, '2023-07-01 14:41:22', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1491, '控制柜', '控制柜', '/profile/avatar/kongzhigui (24).svg', NULL, NULL, NULL, '2023-07-01 14:41:22', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1492, '控制柜', '控制柜', '/profile/avatar/kongzhigui (23).svg', NULL, NULL, NULL, '2023-07-01 14:41:22', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1493, '控制柜', '控制柜', '/profile/avatar/kongzhigui (27).svg', NULL, NULL, NULL, '2023-07-01 14:41:22', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1494, '控制柜', '控制柜', '/profile/avatar/kongzhigui (28).svg', NULL, NULL, NULL, '2023-07-01 14:41:23', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1495, '控制柜', '控制柜', '/profile/avatar/kongzhigui (26).svg', NULL, NULL, NULL, '2023-07-01 14:41:23', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1496, '控制柜', '控制柜', '/profile/avatar/kongzhigui (29).svg', NULL, NULL, NULL, '2023-07-01 14:41:23', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1497, '控制柜', '控制柜', '/profile/avatar/kongzhigui (25).svg', NULL, NULL, NULL, '2023-07-01 14:41:23', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1498, '控制柜', '控制柜', '/profile/avatar/kongzhigui (32).svg', NULL, NULL, NULL, '2023-07-01 14:41:23', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1499, '控制柜', '控制柜', '/profile/avatar/kongzhigui (30).svg', NULL, NULL, NULL, '2023-07-01 14:41:23', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1500, '控制柜', '控制柜', '/profile/avatar/kongzhigui (33).svg', NULL, NULL, NULL, '2023-07-01 14:41:23', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1501, '控制柜', '控制柜', '/profile/avatar/kongzhigui (31).svg', NULL, NULL, NULL, '2023-07-01 14:41:23', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1502, '控制柜', '控制柜', '/profile/avatar/kongzhigui (34).svg', NULL, NULL, NULL, '2023-07-01 14:41:23', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1503, '流量计', '流量计', '/profile/avatar/liuliangji (1).svg', NULL, NULL, NULL, '2023-07-01 14:42:08', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1504, '流量计', '流量计', '/profile/avatar/liuliangji (2).svg', NULL, NULL, NULL, '2023-07-01 14:42:08', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1505, '流量计', '流量计', '/profile/avatar/liuliangji (5).svg', NULL, NULL, NULL, '2023-07-01 14:42:08', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1506, '流量计', '流量计', '/profile/avatar/liuliangji (4).svg', NULL, NULL, NULL, '2023-07-01 14:42:08', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1507, '流量计', '流量计', '/profile/avatar/liuliangji (3).svg', NULL, NULL, NULL, '2023-07-01 14:42:08', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1508, '流量计', '流量计', '/profile/avatar/liuliangji (6).svg', NULL, NULL, NULL, '2023-07-01 14:42:08', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1509, '流量计', '流量计', '/profile/avatar/liuliangji (7).svg', NULL, NULL, NULL, '2023-07-01 14:42:08', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1510, '流量计', '流量计', '/profile/avatar/liuliangji (11).svg', NULL, NULL, NULL, '2023-07-01 14:42:08', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1511, '流量计', '流量计', '/profile/avatar/liuliangji (12).svg', NULL, NULL, NULL, '2023-07-01 14:42:08', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1512, '流量计', '流量计', '/profile/avatar/liuliangji (8).svg', NULL, NULL, NULL, '2023-07-01 14:42:08', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1513, '流量计', '流量计', '/profile/avatar/liuliangji (9).svg', NULL, NULL, NULL, '2023-07-01 14:42:08', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1514, '流量计', '流量计', '/profile/avatar/liuliangji (10).svg', NULL, NULL, NULL, '2023-07-01 14:42:08', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1515, '流量计', '流量计', '/profile/avatar/liuliangji (13).svg', NULL, NULL, NULL, '2023-07-01 14:42:09', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1516, '流量计', '流量计', '/profile/avatar/liuliangji (14).svg', NULL, NULL, NULL, '2023-07-01 14:42:09', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1517, '流量计', '流量计', '/profile/avatar/liuliangji (16).svg', NULL, NULL, NULL, '2023-07-01 14:42:09', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1518, '流量计', '流量计', '/profile/avatar/liuliangji (15).svg', NULL, NULL, NULL, '2023-07-01 14:42:09', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1519, '流量计', '流量计', '/profile/avatar/liuliangji (18).svg', NULL, NULL, NULL, '2023-07-01 14:42:09', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1520, '流量计', '流量计', '/profile/avatar/liuliangji (17).svg', NULL, NULL, NULL, '2023-07-01 14:42:09', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1521, '流量计', '流量计', '/profile/avatar/liuliangji (20).svg', NULL, NULL, NULL, '2023-07-01 14:42:09', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1522, '流量计', '流量计', '/profile/avatar/liuliangji (21).svg', NULL, NULL, NULL, '2023-07-01 14:42:09', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1523, '流量计', '流量计', '/profile/avatar/liuliangji (19).svg', NULL, NULL, NULL, '2023-07-01 14:42:09', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1524, '流量计', '流量计', '/profile/avatar/liuliangji (22).svg', NULL, NULL, NULL, '2023-07-01 14:42:09', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1525, '流量计', '流量计', '/profile/avatar/liuliangji (23).svg', NULL, NULL, NULL, '2023-07-01 14:42:09', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1526, '流量计', '流量计', '/profile/avatar/liuliangji (24).svg', NULL, NULL, NULL, '2023-07-01 14:42:09', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1527, '流量计', '流量计', '/profile/avatar/liuliangji (25).svg', NULL, NULL, NULL, '2023-07-01 14:42:10', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1528, '流量计', '流量计', '/profile/avatar/liuliangji (26).svg', NULL, NULL, NULL, '2023-07-01 14:42:10', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1529, '流量计', '流量计', '/profile/avatar/liuliangji (27).svg', NULL, NULL, NULL, '2023-07-01 14:42:10', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1530, '流量计', '流量计', '/profile/avatar/liuliangji (29).svg', NULL, NULL, NULL, '2023-07-01 14:42:10', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1531, '流量计', '流量计', '/profile/avatar/liuliangji (28).svg', NULL, NULL, NULL, '2023-07-01 14:42:10', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1532, '流量计', '流量计', '/profile/avatar/liuliangji (30).svg', NULL, NULL, NULL, '2023-07-01 14:42:10', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1533, '软管', '软管', '/profile/avatar/ruanguan (1).svg', NULL, NULL, NULL, '2023-07-01 14:43:07', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1534, '软管', '软管', '/profile/avatar/ruanguan (2).svg', NULL, NULL, NULL, '2023-07-01 14:43:08', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1535, '软管', '软管', '/profile/avatar/ruanguan (6).svg', NULL, NULL, NULL, '2023-07-01 14:43:08', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1536, '软管', '软管', '/profile/avatar/ruanguan (5).svg', NULL, NULL, NULL, '2023-07-01 14:43:08', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1537, '软管', '软管', '/profile/avatar/ruanguan (3).svg', NULL, NULL, NULL, '2023-07-01 14:43:08', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1538, '软管', '软管', '/profile/avatar/ruanguan (4).svg', NULL, NULL, NULL, '2023-07-01 14:43:08', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1539, '软管', '软管', '/profile/avatar/ruanguan (7).svg', NULL, NULL, NULL, '2023-07-01 14:43:08', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1540, '软管', '软管', '/profile/avatar/ruanguan (8).svg', NULL, NULL, NULL, '2023-07-01 14:43:08', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1541, '软管', '软管', '/profile/avatar/ruanguan (10).svg', NULL, NULL, NULL, '2023-07-01 14:43:08', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1542, '软管', '软管', '/profile/avatar/ruanguan (9).svg', NULL, NULL, NULL, '2023-07-01 14:43:08', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1543, '软管', '软管', '/profile/avatar/ruanguan (12).svg', NULL, NULL, NULL, '2023-07-01 14:43:08', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1544, '软管', '软管', '/profile/avatar/ruanguan (11).svg', NULL, NULL, NULL, '2023-07-01 14:43:08', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1545, '软管', '软管', '/profile/avatar/ruanguan (13).svg', NULL, NULL, NULL, '2023-07-01 14:43:08', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1546, '软管', '软管', '/profile/avatar/ruanguan (14).svg', NULL, NULL, NULL, '2023-07-01 14:43:09', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1547, '软管', '软管', '/profile/avatar/ruanguan (15).svg', NULL, NULL, NULL, '2023-07-01 14:43:09', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1548, '软管', '软管', '/profile/avatar/ruanguan (18).svg', NULL, NULL, NULL, '2023-07-01 14:43:09', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1549, '软管', '软管', '/profile/avatar/ruanguan (17).svg', NULL, NULL, NULL, '2023-07-01 14:43:09', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1550, '软管', '软管', '/profile/avatar/ruanguan (19).svg', NULL, NULL, NULL, '2023-07-01 14:43:09', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1551, '软管', '软管', '/profile/avatar/ruanguan (16).svg', NULL, NULL, NULL, '2023-07-01 14:43:09', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1552, '软管', '软管', '/profile/avatar/ruanguan (22).svg', NULL, NULL, NULL, '2023-07-01 14:43:09', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1553, '软管', '软管', '/profile/avatar/ruanguan (20).svg', NULL, NULL, NULL, '2023-07-01 14:43:09', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1554, '软管', '软管', '/profile/avatar/ruanguan (23).svg', NULL, NULL, NULL, '2023-07-01 14:43:09', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1555, '软管', '软管', '/profile/avatar/ruanguan (24).svg', NULL, NULL, NULL, '2023-07-01 14:43:09', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1556, '软管', '软管', '/profile/avatar/ruanguan (21).svg', NULL, NULL, NULL, '2023-07-01 14:43:09', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1557, '水处理设备', '水处理设备', '/profile/avatar/shuichuli (1).svg', NULL, NULL, NULL, '2023-07-01 14:44:11', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1558, '水处理设备', '水处理设备', '/profile/avatar/shuichuli (2).svg', NULL, NULL, NULL, '2023-07-01 14:44:12', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1559, '水处理设备', '水处理设备', '/profile/avatar/shuichuli (3).svg', NULL, NULL, NULL, '2023-07-01 14:44:12', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1560, '水处理设备', '水处理设备', '/profile/avatar/shuichuli (4).svg', NULL, NULL, NULL, '2023-07-01 14:44:12', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1561, '水处理设备', '水处理设备', '/profile/avatar/shuichuli (6).svg', NULL, NULL, NULL, '2023-07-01 14:44:12', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1562, '水处理设备', '水处理设备', '/profile/avatar/shuichuli (5).svg', NULL, NULL, NULL, '2023-07-01 14:44:12', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1563, '水处理设备', '水处理设备', '/profile/avatar/shuichuli (7).svg', NULL, NULL, NULL, '2023-07-01 14:44:12', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1564, '水处理设备', '水处理设备', '/profile/avatar/shuichuli (9).svg', NULL, NULL, NULL, '2023-07-01 14:44:12', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1565, '水处理设备', '水处理设备', '/profile/avatar/shuichuli (8).svg', NULL, NULL, NULL, '2023-07-01 14:44:12', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1566, '水处理设备', '水处理设备', '/profile/avatar/shuichuli (10).svg', NULL, NULL, NULL, '2023-07-01 14:44:12', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1567, '水处理设备', '水处理设备', '/profile/avatar/shuichuli (13).svg', NULL, NULL, NULL, '2023-07-01 14:44:12', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1568, '水处理设备', '水处理设备', '/profile/avatar/shuichuli (11).svg', NULL, NULL, NULL, '2023-07-01 14:44:12', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1569, '水处理设备', '水处理设备', '/profile/avatar/shuichuli (12).svg', NULL, NULL, NULL, '2023-07-01 14:44:12', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1570, '水处理设备', '水处理设备', '/profile/avatar/shuichuli (15).svg', NULL, NULL, NULL, '2023-07-01 14:44:12', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1571, '水处理设备', '水处理设备', '/profile/avatar/shuichuli (17).svg', NULL, NULL, NULL, '2023-07-01 14:44:13', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1572, '水处理设备', '水处理设备', '/profile/avatar/shuichuli (14).svg', NULL, NULL, NULL, '2023-07-01 14:44:13', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1573, '水处理设备', '水处理设备', '/profile/avatar/shuichuli (18).svg', NULL, NULL, NULL, '2023-07-01 14:44:13', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1574, '水处理设备', '水处理设备', '/profile/avatar/shuichuli (19).svg', NULL, NULL, NULL, '2023-07-01 14:44:13', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1575, '水处理设备', '水处理设备', '/profile/avatar/shuichuli (20).svg', NULL, NULL, NULL, '2023-07-01 14:44:13', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1576, '水处理设备', '水处理设备', '/profile/avatar/shuichuli (16).svg', NULL, NULL, NULL, '2023-07-01 14:44:13', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1577, '水处理设备', '水处理设备', '/profile/avatar/shuichuli (24).svg', NULL, NULL, NULL, '2023-07-01 14:44:13', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1578, '水处理设备', '水处理设备', '/profile/avatar/shuichuli (22).svg', NULL, NULL, NULL, '2023-07-01 14:44:13', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1579, '水处理设备', '水处理设备', '/profile/avatar/shuichuli (21).svg', NULL, NULL, NULL, '2023-07-01 14:44:13', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1580, '水处理设备', '水处理设备', '/profile/avatar/shuichuli (27).svg', NULL, NULL, NULL, '2023-07-01 14:44:13', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1581, '水处理设备', '水处理设备', '/profile/avatar/shuichuli (23).svg', NULL, NULL, NULL, '2023-07-01 14:44:13', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1582, '水处理设备', '水处理设备', '/profile/avatar/shuichuli (26).svg', NULL, NULL, NULL, '2023-07-01 14:44:13', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1583, '水处理设备', '水处理设备', '/profile/avatar/shuichuli (31).svg', NULL, NULL, NULL, '2023-07-01 14:44:14', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1584, '水处理设备', '水处理设备', '/profile/avatar/shuichuli (25).svg', NULL, NULL, NULL, '2023-07-01 14:44:14', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1585, '水处理设备', '水处理设备', '/profile/avatar/shuichuli (28).svg', NULL, NULL, NULL, '2023-07-01 14:44:14', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1586, '水处理设备', '水处理设备', '/profile/avatar/shuichuli (30).svg', NULL, NULL, NULL, '2023-07-01 14:44:14', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1587, '水处理设备', '水处理设备', '/profile/avatar/shuichuli (29).svg', NULL, NULL, NULL, '2023-07-01 14:44:14', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1588, '水处理设备', '水处理设备', '/profile/avatar/shuichuli (32).svg', NULL, NULL, NULL, '2023-07-01 14:44:14', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1589, '水处理设备', '水处理设备', '/profile/avatar/shuichuli (33).svg', NULL, NULL, NULL, '2023-07-01 14:44:14', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1590, '水处理设备', '水处理设备', '/profile/avatar/shuichuli (37).svg', NULL, NULL, NULL, '2023-07-01 14:44:14', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1591, '水处理设备', '水处理设备', '/profile/avatar/shuichuli (36).svg', NULL, NULL, NULL, '2023-07-01 14:44:14', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1592, '水处理设备', '水处理设备', '/profile/avatar/shuichuli (35).svg', NULL, NULL, NULL, '2023-07-01 14:44:14', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1593, '水处理设备', '水处理设备', '/profile/avatar/shuichuli (34).svg', NULL, NULL, NULL, '2023-07-01 14:44:14', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1594, '水处理设备', '水处理设备', '/profile/avatar/shuichuli (38).svg', NULL, NULL, NULL, '2023-07-01 14:44:14', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1595, '水处理设备', '水处理设备', '/profile/avatar/shuichuli (39).svg', NULL, NULL, NULL, '2023-07-01 14:44:14', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1596, '水处理设备', '水处理设备', '/profile/avatar/shuichuli (42).svg', NULL, NULL, NULL, '2023-07-01 14:44:14', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1597, '水处理设备', '水处理设备', '/profile/avatar/shuichuli (40).svg', NULL, NULL, NULL, '2023-07-01 14:44:14', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1598, '水处理设备', '水处理设备', '/profile/avatar/shuichuli (43).svg', NULL, NULL, NULL, '2023-07-01 14:44:14', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1599, '水处理设备', '水处理设备', '/profile/avatar/shuichuli (41).svg', NULL, NULL, NULL, '2023-07-01 14:44:14', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1600, '水处理设备', '水处理设备', '/profile/avatar/shuichuli (44).svg', NULL, NULL, NULL, '2023-07-01 14:44:15', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1601, '水处理设备', '水处理设备', '/profile/avatar/shuichuli (46).svg', NULL, NULL, NULL, '2023-07-01 14:44:15', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1602, '水处理设备', '水处理设备', '/profile/avatar/shuichuli (45).svg', NULL, NULL, NULL, '2023-07-01 14:44:15', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1603, '水处理设备', '水处理设备', '/profile/avatar/shuichuli (47).svg', NULL, NULL, NULL, '2023-07-01 14:44:15', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1604, '水处理设备', '水处理设备', '/profile/avatar/shuichuli (49).svg', NULL, NULL, NULL, '2023-07-01 14:44:15', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1605, '水处理设备', '水处理设备', '/profile/avatar/shuichuli (48).svg', NULL, NULL, NULL, '2023-07-01 14:44:15', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1606, '水处理设备', '水处理设备', '/profile/avatar/shuichuli (50).svg', NULL, NULL, NULL, '2023-07-01 14:44:15', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1607, '水处理设备', '水处理设备', '/profile/avatar/shuichuli (52).svg', NULL, NULL, NULL, '2023-07-01 14:44:15', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1608, '水处理设备', '水处理设备', '/profile/avatar/shuichuli (51).svg', NULL, NULL, NULL, '2023-07-01 14:44:15', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1609, '水处理设备', '水处理设备', '/profile/avatar/shuichuli (54).svg', NULL, NULL, NULL, '2023-07-01 14:44:15', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1610, '水处理设备', '水处理设备', '/profile/avatar/shuichuli (55).svg', NULL, NULL, NULL, '2023-07-01 14:44:15', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1611, '水处理设备', '水处理设备', '/profile/avatar/shuichuli (53).svg', NULL, NULL, NULL, '2023-07-01 14:44:15', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1612, '水处理设备', '水处理设备', '/profile/avatar/shuichuli (56).svg', NULL, NULL, NULL, '2023-07-01 14:44:16', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1613, '水处理设备', '水处理设备', '/profile/avatar/shuichuli (57).svg', NULL, NULL, NULL, '2023-07-01 14:44:16', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1614, '水处理设备', '水处理设备', '/profile/avatar/shuichuli (58).svg', NULL, NULL, NULL, '2023-07-01 14:44:16', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1615, '水处理设备', '水处理设备', '/profile/avatar/shuichuli (60).svg', NULL, NULL, NULL, '2023-07-01 14:44:16', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1616, '水处理设备', '水处理设备', '/profile/avatar/shuichuli (61).svg', NULL, NULL, NULL, '2023-07-01 14:44:16', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1617, '水处理设备', '水处理设备', '/profile/avatar/shuichuli (59).svg', NULL, NULL, NULL, '2023-07-01 14:44:16', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1618, '水处理设备', '水处理设备', '/profile/avatar/shuichuli (62).svg', NULL, NULL, NULL, '2023-07-01 14:44:16', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1619, '水处理设备', '水处理设备', '/profile/avatar/shuichuli (63).svg', NULL, NULL, NULL, '2023-07-01 14:44:16', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1620, '水处理设备', '水处理设备', '/profile/avatar/shuichuli (65).svg', NULL, NULL, NULL, '2023-07-01 14:44:16', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1621, '水处理设备', '水处理设备', '/profile/avatar/shuichuli (66).svg', NULL, NULL, NULL, '2023-07-01 14:44:16', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1622, '水处理设备', '水处理设备', '/profile/avatar/shuichuli (64).svg', NULL, NULL, NULL, '2023-07-01 14:44:16', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1623, '水处理设备', '水处理设备', '/profile/avatar/shuichuli (67).svg', NULL, NULL, NULL, '2023-07-01 14:44:16', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1624, '水处理设备', '水处理设备', '/profile/avatar/shuichuli (69).svg', NULL, NULL, NULL, '2023-07-01 14:44:16', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1625, '水处理设备', '水处理设备', '/profile/avatar/shuichuli (68).svg', NULL, NULL, NULL, '2023-07-01 14:44:16', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1626, '水处理设备', '水处理设备', '/profile/avatar/shuichuli (70).svg', NULL, NULL, NULL, '2023-07-01 14:44:17', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1627, '水处理设备', '水处理设备', '/profile/avatar/shuichuli (73).svg', NULL, NULL, NULL, '2023-07-01 14:44:17', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1628, '水处理设备', '水处理设备', '/profile/avatar/shuichuli (72).svg', NULL, NULL, NULL, '2023-07-01 14:44:17', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1629, '水处理设备', '水处理设备', '/profile/avatar/shuichuli (71).svg', NULL, NULL, NULL, '2023-07-01 14:44:17', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1630, '水处理设备', '水处理设备', '/profile/avatar/shuichuli (74).svg', NULL, NULL, NULL, '2023-07-01 14:44:17', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1631, '水处理设备', '水处理设备', '/profile/avatar/shuichuli (75).svg', NULL, NULL, NULL, '2023-07-01 14:44:17', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1632, '水处理设备', '水处理设备', '/profile/avatar/shuichuli (76).svg', NULL, NULL, NULL, '2023-07-01 14:44:17', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1633, '水处理设备', '水处理设备', '/profile/avatar/shuichuli (77).svg', NULL, NULL, NULL, '2023-07-01 14:44:17', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1634, '水处理设备', '水处理设备', '/profile/avatar/shuichuli (78).svg', NULL, NULL, NULL, '2023-07-01 14:44:17', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1635, '水处理设备', '水处理设备', '/profile/avatar/shuichuli (80).svg', NULL, NULL, NULL, '2023-07-01 14:44:17', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1636, '水处理设备', '水处理设备', '/profile/avatar/shuichuli (79).svg', NULL, NULL, NULL, '2023-07-01 14:44:17', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1637, '水处理设备', '水处理设备', '/profile/avatar/shuichuli (82).svg', NULL, NULL, NULL, '2023-07-01 14:44:17', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1638, '水处理设备', '水处理设备', '/profile/avatar/shuichuli (84).svg', NULL, NULL, NULL, '2023-07-01 14:44:17', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1639, '水处理设备', '水处理设备', '/profile/avatar/shuichuli (85).svg', NULL, NULL, NULL, '2023-07-01 14:44:17', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1640, '水处理设备', '水处理设备', '/profile/avatar/shuichuli (83).svg', NULL, NULL, NULL, '2023-07-01 14:44:17', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1641, '水处理设备', '水处理设备', '/profile/avatar/shuichuli (81).svg', NULL, NULL, NULL, '2023-07-01 14:44:18', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1642, '水处理设备', '水处理设备', '/profile/avatar/shuichuli (86).svg', NULL, NULL, NULL, '2023-07-01 14:44:18', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1643, '水处理设备', '水处理设备', '/profile/avatar/shuichuli (87).svg', NULL, NULL, NULL, '2023-07-01 14:44:18', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1644, '水处理设备', '水处理设备', '/profile/avatar/shuichuli (88).svg', NULL, NULL, NULL, '2023-07-01 14:44:18', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1645, '圆形管道', '圆形管道', '/profile/avatar/yuanxingguandao (1).svg', NULL, NULL, NULL, '2023-07-01 14:45:59', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1646, '圆形管道', '圆形管道', '/profile/avatar/yuanxingguandao (3).svg', NULL, NULL, NULL, '2023-07-01 14:46:00', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1647, '圆形管道', '圆形管道', '/profile/avatar/yuanxingguandao (2).svg', NULL, NULL, NULL, '2023-07-01 14:46:00', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1648, '圆形管道', '圆形管道', '/profile/avatar/yuanxingguandao (4).svg', NULL, NULL, NULL, '2023-07-01 14:46:00', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1649, '圆形管道', '圆形管道', '/profile/avatar/yuanxingguandao (5).svg', NULL, NULL, NULL, '2023-07-01 14:46:00', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1650, '圆形管道', '圆形管道', '/profile/avatar/yuanxingguandao (6).svg', NULL, NULL, NULL, '2023-07-01 14:46:00', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1651, '圆形管道', '圆形管道', '/profile/avatar/yuanxingguandao (7).svg', NULL, NULL, NULL, '2023-07-01 14:46:00', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1652, '圆形管道', '圆形管道', '/profile/avatar/yuanxingguandao (9).svg', NULL, NULL, NULL, '2023-07-01 14:46:00', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1653, '圆形管道', '圆形管道', '/profile/avatar/yuanxingguandao (8).svg', NULL, NULL, NULL, '2023-07-01 14:46:00', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1654, '圆形管道', '圆形管道', '/profile/avatar/yuanxingguandao (10).svg', NULL, NULL, NULL, '2023-07-01 14:46:00', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1655, '圆形管道', '圆形管道', '/profile/avatar/yuanxingguandao (11).svg', NULL, NULL, NULL, '2023-07-01 14:46:00', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1656, '圆形管道', '圆形管道', '/profile/avatar/yuanxingguandao (12).svg', NULL, NULL, NULL, '2023-07-01 14:46:00', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1657, '圆形管道', '圆形管道', '/profile/avatar/yuanxingguandao (13).svg', NULL, NULL, NULL, '2023-07-01 14:46:00', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1658, '圆形管道', '圆形管道', '/profile/avatar/yuanxingguandao (14).svg', NULL, NULL, NULL, '2023-07-01 14:46:00', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1659, '圆形管道', '圆形管道', '/profile/avatar/yuanxingguandao (15).svg', NULL, NULL, NULL, '2023-07-01 14:46:01', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1660, '圆形管道', '圆形管道', '/profile/avatar/yuanxingguandao (17).svg', NULL, NULL, NULL, '2023-07-01 14:46:01', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1661, '圆形管道', '圆形管道', '/profile/avatar/yuanxingguandao (19).svg', NULL, NULL, NULL, '2023-07-01 14:46:01', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1662, '圆形管道', '圆形管道', '/profile/avatar/yuanxingguandao (16).svg', NULL, NULL, NULL, '2023-07-01 14:46:01', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1663, '圆形管道', '圆形管道', '/profile/avatar/yuanxingguandao (20).svg', NULL, NULL, NULL, '2023-07-01 14:46:01', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1664, '圆形管道', '圆形管道', '/profile/avatar/yuanxingguandao (18).svg', NULL, NULL, NULL, '2023-07-01 14:46:01', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1665, '圆形管道', '圆形管道', '/profile/avatar/yuanxingguandao (21).svg', NULL, NULL, NULL, '2023-07-01 14:46:01', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1666, '圆形管道', '圆形管道', '/profile/avatar/yuanxingguandao (22).svg', NULL, NULL, NULL, '2023-07-01 14:46:01', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1667, '圆形管道', '圆形管道', '/profile/avatar/yuanxingguandao (25).svg', NULL, NULL, NULL, '2023-07-01 14:46:01', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1668, '圆形管道', '圆形管道', '/profile/avatar/yuanxingguandao (24).svg', NULL, NULL, NULL, '2023-07-01 14:46:01', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1669, '圆形管道', '圆形管道', '/profile/avatar/yuanxingguandao (23).svg', NULL, NULL, NULL, '2023-07-01 14:46:01', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1670, '圆形管道', '圆形管道', '/profile/avatar/yuanxingguandao (26).svg', NULL, NULL, NULL, '2023-07-01 14:46:01', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1671, '圆形管道', '圆形管道', '/profile/avatar/yuanxingguandao (28).svg', NULL, NULL, NULL, '2023-07-01 14:46:01', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1672, '圆形管道', '圆形管道', '/profile/avatar/yuanxingguandao (27).svg', NULL, NULL, NULL, '2023-07-01 14:46:01', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1673, '圆形管道', '圆形管道', '/profile/avatar/yuanxingguandao (30).svg', NULL, NULL, NULL, '2023-07-01 14:46:01', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1674, '圆形管道', '圆形管道', '/profile/avatar/yuanxingguandao (29).svg', NULL, NULL, NULL, '2023-07-01 14:46:01', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1675, '圆形管道', '圆形管道', '/profile/avatar/yuanxingguandao (31).svg', NULL, NULL, NULL, '2023-07-01 14:46:01', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1676, '圆形管道', '圆形管道', '/profile/avatar/yuanxingguandao (32).svg', NULL, NULL, NULL, '2023-07-01 14:46:02', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1677, '圆形管道', '圆形管道', '/profile/avatar/yuanxingguandao (33).svg', NULL, NULL, NULL, '2023-07-01 14:46:02', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1678, '圆形管道', '圆形管道', '/profile/avatar/yuanxingguandao (37).svg', NULL, NULL, NULL, '2023-07-01 14:46:02', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1679, '圆形管道', '圆形管道', '/profile/avatar/yuanxingguandao (36).svg', NULL, NULL, NULL, '2023-07-01 14:46:02', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1680, '圆形管道', '圆形管道', '/profile/avatar/yuanxingguandao (35).svg', NULL, NULL, NULL, '2023-07-01 14:46:02', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1681, '圆形管道', '圆形管道', '/profile/avatar/yuanxingguandao (34).svg', NULL, NULL, NULL, '2023-07-01 14:46:02', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1682, '圆形管道', '圆形管道', '/profile/avatar/yuanxingguandao (38).svg', NULL, NULL, NULL, '2023-07-01 14:46:02', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1683, '圆形管道', '圆形管道', '/profile/avatar/yuanxingguandao (40).svg', NULL, NULL, NULL, '2023-07-01 14:46:02', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1684, '圆形管道', '圆形管道', '/profile/avatar/yuanxingguandao (41).svg', NULL, NULL, NULL, '2023-07-01 14:46:02', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1685, '圆形管道', '圆形管道', '/profile/avatar/yuanxingguandao (39).svg', NULL, NULL, NULL, '2023-07-01 14:46:02', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1686, '圆形管道', '圆形管道', '/profile/avatar/yuanxingguandao (45).svg', NULL, NULL, NULL, '2023-07-01 14:46:02', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1687, '圆形管道', '圆形管道', '/profile/avatar/yuanxingguandao (42).svg', NULL, NULL, NULL, '2023-07-01 14:46:02', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1688, '圆形管道', '圆形管道', '/profile/avatar/yuanxingguandao (44).svg', NULL, NULL, NULL, '2023-07-01 14:46:02', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1689, '圆形管道', '圆形管道', '/profile/avatar/yuanxingguandao (43).svg', NULL, NULL, NULL, '2023-07-01 14:46:03', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1690, '圆形管道', '圆形管道', '/profile/avatar/yuanxingguandao (47).svg', NULL, NULL, NULL, '2023-07-01 14:46:03', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1691, '圆形管道', '圆形管道', '/profile/avatar/yuanxingguandao (49).svg', NULL, NULL, NULL, '2023-07-01 14:46:03', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1692, '圆形管道', '圆形管道', '/profile/avatar/yuanxingguandao (46).svg', NULL, NULL, NULL, '2023-07-01 14:46:03', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1693, '圆形管道', '圆形管道', '/profile/avatar/yuanxingguandao (48).svg', NULL, NULL, NULL, '2023-07-01 14:46:03', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1694, '圆形管道', '圆形管道', '/profile/avatar/yuanxingguandao (50).svg', NULL, NULL, NULL, '2023-07-01 14:46:03', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1695, '圆形管道', '圆形管道', '/profile/avatar/yuanxingguandao (52).svg', NULL, NULL, NULL, '2023-07-01 14:46:03', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1696, '圆形管道', '圆形管道', '/profile/avatar/yuanxingguandao (51).svg', NULL, NULL, NULL, '2023-07-01 14:46:03', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1697, '圆形管道', '圆形管道', '/profile/avatar/yuanxingguandao (53).svg', NULL, NULL, NULL, '2023-07-01 14:46:03', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1698, '圆形管道', '圆形管道', '/profile/avatar/yuanxingguandao (55).svg', NULL, NULL, NULL, '2023-07-01 14:46:03', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1699, '圆形管道', '圆形管道', '/profile/avatar/yuanxingguandao (54).svg', NULL, NULL, NULL, '2023-07-01 14:46:03', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1700, '圆形管道', '圆形管道', '/profile/avatar/yuanxingguandao (56).svg', NULL, NULL, NULL, '2023-07-01 14:46:03', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1701, '圆形管道', '圆形管道', '/profile/avatar/yuanxingguandao (58).svg', NULL, NULL, NULL, '2023-07-01 14:46:03', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1702, '圆形管道', '圆形管道', '/profile/avatar/yuanxingguandao (60).svg', NULL, NULL, NULL, '2023-07-01 14:46:03', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1703, '圆形管道', '圆形管道', '/profile/avatar/yuanxingguandao (57).svg', NULL, NULL, NULL, '2023-07-01 14:46:03', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1704, '圆形管道', '圆形管道', '/profile/avatar/yuanxingguandao (59).svg', NULL, NULL, NULL, '2023-07-01 14:46:03', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1705, '圆形管道', '圆形管道', '/profile/avatar/yuanxingguandao (61).svg', NULL, NULL, NULL, '2023-07-01 14:46:03', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1706, '圆形管道', '圆形管道', '/profile/avatar/yuanxingguandao (62).svg', NULL, NULL, NULL, '2023-07-01 14:46:04', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1707, '圆形管道', '圆形管道', '/profile/avatar/yuanxingguandao (63).svg', NULL, NULL, NULL, '2023-07-01 14:46:04', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1708, '圆形管道', '圆形管道', '/profile/avatar/yuanxingguandao (66).svg', NULL, NULL, NULL, '2023-07-01 14:46:04', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1709, '圆形管道', '圆形管道', '/profile/avatar/yuanxingguandao (67).svg', NULL, NULL, NULL, '2023-07-01 14:46:04', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1710, '圆形管道', '圆形管道', '/profile/avatar/yuanxingguandao (64).svg', NULL, NULL, NULL, '2023-07-01 14:46:04', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1711, '圆形管道', '圆形管道', '/profile/avatar/yuanxingguandao (68).svg', NULL, NULL, NULL, '2023-07-01 14:46:04', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1712, '圆形管道', '圆形管道', '/profile/avatar/yuanxingguandao (65).svg', NULL, NULL, NULL, '2023-07-01 14:46:04', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1713, '圆形管道', '圆形管道', '/profile/avatar/yuanxingguandao (69).svg', NULL, NULL, NULL, '2023-07-01 14:46:04', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1714, '圆形管道', '圆形管道', '/profile/avatar/yuanxingguandao (73).svg', NULL, NULL, NULL, '2023-07-01 14:46:04', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1715, '圆形管道', '圆形管道', '/profile/avatar/yuanxingguandao (71).svg', NULL, NULL, NULL, '2023-07-01 14:46:04', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1716, '圆形管道', '圆形管道', '/profile/avatar/yuanxingguandao (72).svg', NULL, NULL, NULL, '2023-07-01 14:46:04', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1717, '圆形管道', '圆形管道', '/profile/avatar/yuanxingguandao (70).svg', NULL, NULL, NULL, '2023-07-01 14:46:04', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1718, '圆形管道', '圆形管道', '/profile/avatar/yuanxingguandao (74).svg', NULL, NULL, NULL, '2023-07-01 14:46:05', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1719, '圆形管道', '圆形管道', '/profile/avatar/yuanxingguandao (75).svg', NULL, NULL, NULL, '2023-07-01 14:46:05', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1720, '圆形管道', '圆形管道', '/profile/avatar/yuanxingguandao (76).svg', NULL, NULL, NULL, '2023-07-01 14:46:05', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1721, '圆形管道', '圆形管道', '/profile/avatar/yuanxingguandao (77).svg', NULL, NULL, NULL, '2023-07-01 14:46:05', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1722, '圆形管道', '圆形管道', '/profile/avatar/yuanxingguandao (78).svg', NULL, NULL, NULL, '2023-07-01 14:46:05', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1723, '圆形管道', '圆形管道', '/profile/avatar/yuanxingguandao (79).svg', NULL, NULL, NULL, '2023-07-01 14:46:05', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1724, '圆形管道', '圆形管道', '/profile/avatar/yuanxingguandao (80).svg', NULL, NULL, NULL, '2023-07-01 14:46:05', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1725, '圆形管道', '圆形管道', '/profile/avatar/yuanxingguandao (81).svg', NULL, NULL, NULL, '2023-07-01 14:46:05', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1726, '圆形管道', '圆形管道', '/profile/avatar/yuanxingguandao (82).svg', NULL, NULL, NULL, '2023-07-01 14:46:05', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1727, '圆形管道', '圆形管道', '/profile/avatar/yuanxingguandao (83).svg', NULL, NULL, NULL, '2023-07-01 14:46:05', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1728, '圆形管道', '圆形管道', '/profile/avatar/yuanxingguandao (84).svg', NULL, NULL, NULL, '2023-07-01 14:46:05', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1729, '圆形管道', '圆形管道', '/profile/avatar/yuanxingguandao (85).svg', NULL, NULL, NULL, '2023-07-01 14:46:05', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1730, '圆形管道', '圆形管道', '/profile/avatar/yuanxingguandao (86).svg', NULL, NULL, NULL, '2023-07-01 14:46:05', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1731, '圆形管道', '圆形管道', '/profile/avatar/yuanxingguandao (87).svg', NULL, NULL, NULL, '2023-07-01 14:46:06', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1732, '圆形管道', '圆形管道', '/profile/avatar/yuanxingguandao (88).svg', NULL, NULL, NULL, '2023-07-01 14:46:06', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1733, '圆形管道', '圆形管道', '/profile/avatar/yuanxingguandao (90).svg', NULL, NULL, NULL, '2023-07-01 14:46:06', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1734, '圆形管道', '圆形管道', '/profile/avatar/yuanxingguandao (89).svg', NULL, NULL, NULL, '2023-07-01 14:46:06', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1735, '圆形管道', '圆形管道', '/profile/avatar/yuanxingguandao (91).svg', NULL, NULL, NULL, '2023-07-01 14:46:06', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1736, '圆形管道', '圆形管道', '/profile/avatar/yuanxingguandao (92).svg', NULL, NULL, NULL, '2023-07-01 14:46:06', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1737, '圆形管道', '圆形管道', '/profile/avatar/yuanxingguandao (93).svg', NULL, NULL, NULL, '2023-07-01 14:46:06', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1738, '圆形管道', '圆形管道', '/profile/avatar/yuanxingguandao (94).svg', NULL, NULL, NULL, '2023-07-01 14:46:06', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1739, '圆形管道', '圆形管道', '/profile/avatar/yuanxingguandao (97).svg', NULL, NULL, NULL, '2023-07-01 14:46:06', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1740, '圆形管道', '圆形管道', '/profile/avatar/yuanxingguandao (95).svg', NULL, NULL, NULL, '2023-07-01 14:46:06', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1741, '圆形管道', '圆形管道', '/profile/avatar/yuanxingguandao (96).svg', NULL, NULL, NULL, '2023-07-01 14:46:06', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1742, '圆形管道', '圆形管道', '/profile/avatar/yuanxingguandao (98).svg', NULL, NULL, NULL, '2023-07-01 14:46:06', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1743, '圆形管道', '圆形管道', '/profile/avatar/yuanxingguandao (99).svg', NULL, NULL, NULL, '2023-07-01 14:46:07', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1744, '圆形管道', '圆形管道', '/profile/avatar/yuanxingguandao (100).svg', NULL, NULL, NULL, '2023-07-01 14:46:07', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1745, '圆形管道', '圆形管道', '/profile/avatar/yuanxingguandao (101).svg', NULL, NULL, NULL, '2023-07-01 14:46:07', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1746, '圆形管道', '圆形管道', '/profile/avatar/yuanxingguandao (102).svg', NULL, NULL, NULL, '2023-07-01 14:46:07', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1747, '圆形管道', '圆形管道', '/profile/avatar/yuanxingguandao (104).svg', NULL, NULL, NULL, '2023-07-01 14:46:07', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1748, '圆形管道', '圆形管道', '/profile/avatar/yuanxingguandao (103).svg', NULL, NULL, NULL, '2023-07-01 14:46:07', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1749, '圆形管道', '圆形管道', '/profile/avatar/yuanxingguandao (106).svg', NULL, NULL, NULL, '2023-07-01 14:46:07', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1750, '圆形管道', '圆形管道', '/profile/avatar/yuanxingguandao (107).svg', NULL, NULL, NULL, '2023-07-01 14:46:07', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1751, '圆形管道', '圆形管道', '/profile/avatar/yuanxingguandao (108).svg', NULL, NULL, NULL, '2023-07-01 14:46:07', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1752, '圆形管道', '圆形管道', '/profile/avatar/yuanxingguandao (105).svg', NULL, NULL, NULL, '2023-07-01 14:46:07', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1753, '圆形管道', '圆形管道', '/profile/avatar/yuanxingguandao (109).svg', NULL, NULL, NULL, '2023-07-01 14:46:07', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1754, '圆形管道', '圆形管道', '/profile/avatar/yuanxingguandao (110).svg', NULL, NULL, NULL, '2023-07-01 14:46:07', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1755, '风机', '风机', '/profile/avatar/fengji (1).svg', NULL, NULL, NULL, '2023-07-01 14:47:40', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1756, '风机', '风机', '/profile/avatar/fengji (3).svg', NULL, NULL, NULL, '2023-07-01 14:47:41', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1757, '风机', '风机', '/profile/avatar/fengji (4).svg', NULL, NULL, NULL, '2023-07-01 14:47:41', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1758, '风机', '风机', '/profile/avatar/fengji (2).svg', NULL, NULL, NULL, '2023-07-01 14:47:41', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1759, '风机', '风机', '/profile/avatar/fengji (5).svg', NULL, NULL, NULL, '2023-07-01 14:47:41', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1760, '风机', '风机', '/profile/avatar/fengji (6).svg', NULL, NULL, NULL, '2023-07-01 14:47:41', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1761, '风机', '风机', '/profile/avatar/fengji (7).svg', NULL, NULL, NULL, '2023-07-01 14:47:41', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1762, '风机', '风机', '/profile/avatar/fengji (8).svg', NULL, NULL, NULL, '2023-07-01 14:47:41', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1763, '风机', '风机', '/profile/avatar/fengji (9).svg', NULL, NULL, NULL, '2023-07-01 14:47:41', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1764, '风机', '风机', '/profile/avatar/fengji (10).svg', NULL, NULL, NULL, '2023-07-01 14:47:41', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1765, '风机', '风机', '/profile/avatar/fengji (11).svg', NULL, NULL, NULL, '2023-07-01 14:47:41', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1766, '风机', '风机', '/profile/avatar/fengji (12).svg', NULL, NULL, NULL, '2023-07-01 14:47:41', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1767, '风机', '风机', '/profile/avatar/fengji (13).svg', NULL, NULL, NULL, '2023-07-01 14:47:41', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1768, '风机', '风机', '/profile/avatar/fengji (14).svg', NULL, NULL, NULL, '2023-07-01 14:47:42', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1769, '风机', '风机', '/profile/avatar/fengji (16).svg', NULL, NULL, NULL, '2023-07-01 14:47:42', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1770, '风机', '风机', '/profile/avatar/fengji (18).svg', NULL, NULL, NULL, '2023-07-01 14:47:42', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1771, '风机', '风机', '/profile/avatar/fengji (15).svg', NULL, NULL, NULL, '2023-07-01 14:47:42', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1772, '风机', '风机', '/profile/avatar/fengji (17).svg', NULL, NULL, NULL, '2023-07-01 14:47:42', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1773, '风机', '风机', '/profile/avatar/fengji (19).svg', NULL, NULL, NULL, '2023-07-01 14:47:42', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1774, '风机', '风机', '/profile/avatar/fengji (20).svg', NULL, NULL, NULL, '2023-07-01 14:47:42', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1775, '风机', '风机', '/profile/avatar/fengji (24).svg', NULL, NULL, NULL, '2023-07-01 14:47:42', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1776, '风机', '风机', '/profile/avatar/fengji (22).svg', NULL, NULL, NULL, '2023-07-01 14:47:42', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1777, '风机', '风机', '/profile/avatar/fengji (21).svg', NULL, NULL, NULL, '2023-07-01 14:47:42', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1778, '风机', '风机', '/profile/avatar/fengji (23).svg', NULL, NULL, NULL, '2023-07-01 14:47:42', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1779, '风机', '风机', '/profile/avatar/fengji (25).svg', NULL, NULL, NULL, '2023-07-01 14:47:43', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1780, '风机', '风机', '/profile/avatar/fengji (26).svg', NULL, NULL, NULL, '2023-07-01 14:47:43', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1781, '风机', '风机', '/profile/avatar/fengji (30).svg', NULL, NULL, NULL, '2023-07-01 14:47:43', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1782, '风机', '风机', '/profile/avatar/fengji (28).svg', NULL, NULL, NULL, '2023-07-01 14:47:43', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1783, '风机', '风机', '/profile/avatar/fengji (27).svg', NULL, NULL, NULL, '2023-07-01 14:47:43', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1784, '风机', '风机', '/profile/avatar/fengji (29).svg', NULL, NULL, NULL, '2023-07-01 14:47:43', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1785, '风机', '风机', '/profile/avatar/fengji (31).svg', NULL, NULL, NULL, '2023-07-01 14:47:43', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1786, '风机', '风机', '/profile/avatar/fengji (32).svg', NULL, NULL, NULL, '2023-07-01 14:47:43', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1787, '风机', '风机', '/profile/avatar/fengji (33).svg', NULL, NULL, NULL, '2023-07-01 14:47:43', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1788, '按钮', '按钮', '/profile/avatar/anniu (1).gif', NULL, NULL, NULL, '2023-07-01 14:49:26', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1789, '按钮', '按钮', '/profile/avatar/anniu (1).png', NULL, NULL, NULL, '2023-07-01 14:49:26', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1790, '按钮', '按钮', '/profile/avatar/anniu (1).svg', NULL, NULL, NULL, '2023-07-01 14:49:26', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1791, '按钮', '按钮', '/profile/avatar/anniu (1).jpg', NULL, NULL, NULL, '2023-07-01 14:49:26', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1792, '按钮', '按钮', '/profile/avatar/anniu (2).jpg', NULL, NULL, NULL, '2023-07-01 14:49:26', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1793, '按钮', '按钮', '/profile/avatar/anniu (2).png', NULL, NULL, NULL, '2023-07-01 14:49:26', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1794, '按钮', '按钮', '/profile/avatar/anniu (2).svg', NULL, NULL, NULL, '2023-07-01 14:49:26', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1795, '按钮', '按钮', '/profile/avatar/anniu (3).svg', NULL, NULL, NULL, '2023-07-01 14:49:27', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1796, '按钮', '按钮', '/profile/avatar/anniu (3).png', NULL, NULL, NULL, '2023-07-01 14:49:27', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1797, '按钮', '按钮', '/profile/avatar/anniu (4).png', NULL, NULL, NULL, '2023-07-01 14:49:27', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1798, '按钮', '按钮', '/profile/avatar/anniu (4).svg', NULL, NULL, NULL, '2023-07-01 14:49:27', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1799, '按钮', '按钮', '/profile/avatar/anniu (5).png', NULL, NULL, NULL, '2023-07-01 14:49:27', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1800, '按钮', '按钮', '/profile/avatar/anniu (6).png', NULL, NULL, NULL, '2023-07-01 14:49:27', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1801, '按钮', '按钮', '/profile/avatar/anniu (5).svg', NULL, NULL, NULL, '2023-07-01 14:49:27', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1802, '按钮', '按钮', '/profile/avatar/anniu (6).svg', NULL, NULL, NULL, '2023-07-01 14:49:27', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1803, '按钮', '按钮', '/profile/avatar/anniu (7).png', NULL, NULL, NULL, '2023-07-01 14:49:27', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1804, '按钮', '按钮', '/profile/avatar/anniu (7).svg', NULL, NULL, NULL, '2023-07-01 14:49:27', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1805, '按钮', '按钮', '/profile/avatar/anniu (8).png', NULL, NULL, NULL, '2023-07-01 14:49:27', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1806, '按钮', '按钮', '/profile/avatar/anniu (8).svg', NULL, NULL, NULL, '2023-07-01 14:49:27', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1807, '按钮', '按钮', '/profile/avatar/anniu (9).png', NULL, NULL, NULL, '2023-07-01 14:49:28', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1808, '按钮', '按钮', '/profile/avatar/anniu (9).svg', NULL, NULL, NULL, '2023-07-01 14:49:28', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1809, '按钮', '按钮', '/profile/avatar/anniu (10).png', NULL, NULL, NULL, '2023-07-01 14:49:28', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1810, '按钮', '按钮', '/profile/avatar/anniu (11).svg', NULL, NULL, NULL, '2023-07-01 14:49:28', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1811, '按钮', '按钮', '/profile/avatar/anniu (10).svg', NULL, NULL, NULL, '2023-07-01 14:49:28', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1812, '按钮', '按钮', '/profile/avatar/anniu (11).png', NULL, NULL, NULL, '2023-07-01 14:49:28', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1813, '按钮', '按钮', '/profile/avatar/anniu (12).png', NULL, NULL, NULL, '2023-07-01 14:49:28', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1814, '按钮', '按钮', '/profile/avatar/anniu (13).png', NULL, NULL, NULL, '2023-07-01 14:49:28', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1815, '按钮', '按钮', '/profile/avatar/anniu (12).svg', NULL, NULL, NULL, '2023-07-01 14:49:28', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1816, '按钮', '按钮', '/profile/avatar/anniu (13).svg', NULL, NULL, NULL, '2023-07-01 14:49:28', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1817, '按钮', '按钮', '/profile/avatar/anniu (14).png', NULL, NULL, NULL, '2023-07-01 14:49:28', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1818, '按钮', '按钮', '/profile/avatar/anniu (14).svg', NULL, NULL, NULL, '2023-07-01 14:49:28', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1819, '按钮', '按钮', '/profile/avatar/anniu (15).png', NULL, NULL, NULL, '2023-07-01 14:49:28', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1820, '按钮', '按钮', '/profile/avatar/anniu (15).svg', NULL, NULL, NULL, '2023-07-01 14:49:29', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1821, '按钮', '按钮', '/profile/avatar/anniu (16).png', NULL, NULL, NULL, '2023-07-01 14:49:29', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1822, '按钮', '按钮', '/profile/avatar/anniu (17).png', NULL, NULL, NULL, '2023-07-01 14:49:29', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1823, '按钮', '按钮', '/profile/avatar/anniu (17).svg', NULL, NULL, NULL, '2023-07-01 14:49:29', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1824, '按钮', '按钮', '/profile/avatar/anniu (18).png', NULL, NULL, NULL, '2023-07-01 14:49:29', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1825, '按钮', '按钮', '/profile/avatar/anniu (16).svg', NULL, NULL, NULL, '2023-07-01 14:49:29', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1826, '按钮', '按钮', '/profile/avatar/anniu (18).svg', NULL, NULL, NULL, '2023-07-01 14:49:29', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1827, '按钮', '按钮', '/profile/avatar/anniu (19).svg', NULL, NULL, NULL, '2023-07-01 14:49:29', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1828, '按钮', '按钮', '/profile/avatar/anniu (19).png', NULL, NULL, NULL, '2023-07-01 14:49:29', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1829, '按钮', '按钮', '/profile/avatar/anniu (21).png', NULL, NULL, NULL, '2023-07-01 14:49:29', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1830, '按钮', '按钮', '/profile/avatar/anniu (20).svg', NULL, NULL, NULL, '2023-07-01 14:49:29', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1831, '按钮', '按钮', '/profile/avatar/anniu (20).png', NULL, NULL, NULL, '2023-07-01 14:49:29', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1832, '按钮', '按钮', '/profile/avatar/anniu (22).png', NULL, NULL, NULL, '2023-07-01 14:49:30', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1833, '按钮', '按钮', '/profile/avatar/anniu (21).svg', NULL, NULL, NULL, '2023-07-01 14:49:30', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1834, '按钮', '按钮', '/profile/avatar/anniu (23).png', NULL, NULL, NULL, '2023-07-01 14:49:30', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1835, '按钮', '按钮', '/profile/avatar/anniu (23).svg', NULL, NULL, NULL, '2023-07-01 14:49:30', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1836, '按钮', '按钮', '/profile/avatar/anniu (24).svg', NULL, NULL, NULL, '2023-07-01 14:49:30', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1837, '按钮', '按钮', '/profile/avatar/anniu (22).svg', NULL, NULL, NULL, '2023-07-01 14:49:30', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1838, '按钮', '按钮', '/profile/avatar/anniu (25).svg', NULL, NULL, NULL, '2023-07-01 14:49:30', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1839, '按钮', '按钮', '/profile/avatar/anniu (27).svg', NULL, NULL, NULL, '2023-07-01 14:49:30', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1840, '按钮', '按钮', '/profile/avatar/anniu (26).svg', NULL, NULL, NULL, '2023-07-01 14:49:30', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1841, '按钮', '按钮', '/profile/avatar/anniu (28).svg', NULL, NULL, NULL, '2023-07-01 14:49:30', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1842, '按钮', '按钮', '/profile/avatar/anniu (29).svg', NULL, NULL, NULL, '2023-07-01 14:49:30', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1843, '按钮', '按钮', '/profile/avatar/anniu (32).svg', NULL, NULL, NULL, '2023-07-01 14:49:30', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1844, '按钮', '按钮', '/profile/avatar/anniu (30).svg', NULL, NULL, NULL, '2023-07-01 14:49:30', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1845, '按钮', '按钮', '/profile/avatar/anniu (31).svg', NULL, NULL, NULL, '2023-07-01 14:49:30', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1846, '按钮', '按钮', '/profile/avatar/anniu (33).svg', NULL, NULL, NULL, '2023-07-01 14:49:31', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1847, '按钮', '按钮', '/profile/avatar/anniu (35).svg', NULL, NULL, NULL, '2023-07-01 14:49:31', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1848, '按钮', '按钮', '/profile/avatar/anniu (36).svg', NULL, NULL, NULL, '2023-07-01 14:49:31', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1849, '按钮', '按钮', '/profile/avatar/anniu (34).svg', NULL, NULL, NULL, '2023-07-01 14:49:31', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1850, '按钮', '按钮', '/profile/avatar/anniu (37).svg', NULL, NULL, NULL, '2023-07-01 14:49:31', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1851, '按钮', '按钮', '/profile/avatar/anniu (38).svg', NULL, NULL, NULL, '2023-07-01 14:49:31', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1852, '按钮', '按钮', '/profile/avatar/anniu (39).svg', NULL, NULL, NULL, '2023-07-01 14:49:31', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1853, '按钮', '按钮', '/profile/avatar/anniu (42).svg', NULL, NULL, NULL, '2023-07-01 14:49:31', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1854, '按钮', '按钮', '/profile/avatar/anniu (40).svg', NULL, NULL, NULL, '2023-07-01 14:49:31', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1855, '按钮', '按钮', '/profile/avatar/anniu (41).svg', NULL, NULL, NULL, '2023-07-01 14:49:31', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1856, '按钮', '按钮', '/profile/avatar/anniu (44).svg', NULL, NULL, NULL, '2023-07-01 14:49:31', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1857, '按钮', '按钮', '/profile/avatar/anniu (43).svg', NULL, NULL, NULL, '2023-07-01 14:49:31', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1858, '按钮', '按钮', '/profile/avatar/anniu (45).svg', NULL, NULL, NULL, '2023-07-01 14:49:31', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1859, '按钮', '按钮', '/profile/avatar/anniu (47).svg', NULL, NULL, NULL, '2023-07-01 14:49:32', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1860, '按钮', '按钮', '/profile/avatar/anniu (48).svg', NULL, NULL, NULL, '2023-07-01 14:49:32', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1861, '按钮', '按钮', '/profile/avatar/anniu (46).svg', NULL, NULL, NULL, '2023-07-01 14:49:32', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1862, '按钮', '按钮', '/profile/avatar/anniu (49).svg', NULL, NULL, NULL, '2023-07-01 14:49:32', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1863, '按钮', '按钮', '/profile/avatar/anniu (50).svg', NULL, NULL, NULL, '2023-07-01 14:49:32', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1864, '按钮', '按钮', '/profile/avatar/anniu (51).svg', NULL, NULL, NULL, '2023-07-01 14:49:32', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1865, '按钮', '按钮', '/profile/avatar/anniu (53).svg', NULL, NULL, NULL, '2023-07-01 14:49:32', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1866, '按钮', '按钮', '/profile/avatar/anniu (52).svg', NULL, NULL, NULL, '2023-07-01 14:49:32', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1867, '按钮', '按钮', '/profile/avatar/anniu (54).svg', NULL, NULL, NULL, '2023-07-01 14:49:32', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1868, '按钮', '按钮', '/profile/avatar/anniu (56).svg', NULL, NULL, NULL, '2023-07-01 14:49:32', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1869, '按钮', '按钮', '/profile/avatar/anniu (55).svg', NULL, NULL, NULL, '2023-07-01 14:49:32', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1870, '按钮', '按钮', '/profile/avatar/anniu (57).svg', NULL, NULL, NULL, '2023-07-01 14:49:32', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1871, '按钮', '按钮', '/profile/avatar/anniu (59).svg', NULL, NULL, NULL, '2023-07-01 14:49:32', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1872, '按钮', '按钮', '/profile/avatar/anniu (60).svg', NULL, NULL, NULL, '2023-07-01 14:49:32', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1873, '按钮', '按钮', '/profile/avatar/anniu (58).svg', NULL, NULL, NULL, '2023-07-01 14:49:32', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1874, '按钮', '按钮', '/profile/avatar/anniu (61).svg', NULL, NULL, NULL, '2023-07-01 14:49:33', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1875, '按钮', '按钮', '/profile/avatar/anniu (63).svg', NULL, NULL, NULL, '2023-07-01 14:49:33', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1876, '按钮', '按钮', '/profile/avatar/anniu (64).svg', NULL, NULL, NULL, '2023-07-01 14:49:33', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1877, '按钮', '按钮', '/profile/avatar/anniu (62).svg', NULL, NULL, NULL, '2023-07-01 14:49:33', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1878, '按钮', '按钮', '/profile/avatar/anniu (66).svg', NULL, NULL, NULL, '2023-07-01 14:49:33', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1879, '按钮', '按钮', '/profile/avatar/anniu (65).svg', NULL, NULL, NULL, '2023-07-01 14:49:33', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1880, '按钮', '按钮', '/profile/avatar/anniu (68).svg', NULL, NULL, NULL, '2023-07-01 14:49:33', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1881, '按钮', '按钮', '/profile/avatar/anniu (67).svg', NULL, NULL, NULL, '2023-07-01 14:49:33', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1882, '按钮', '按钮', '/profile/avatar/anniu (70).svg', NULL, NULL, NULL, '2023-07-01 14:49:33', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1883, '按钮', '按钮', '/profile/avatar/anniu (71).svg', NULL, NULL, NULL, '2023-07-01 14:49:33', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1884, '按钮', '按钮', '/profile/avatar/anniu (69).svg', NULL, NULL, NULL, '2023-07-01 14:49:33', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1885, '按钮', '按钮', '/profile/avatar/anniu (72).svg', NULL, NULL, NULL, '2023-07-01 14:49:33', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1886, '按钮', '按钮', '/profile/avatar/anniu (74).svg', NULL, NULL, NULL, '2023-07-01 14:49:34', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1887, '按钮', '按钮', '/profile/avatar/anniu (73).svg', NULL, NULL, NULL, '2023-07-01 14:49:34', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1888, '按钮', '按钮', '/profile/avatar/anniu (75).svg', NULL, NULL, NULL, '2023-07-01 14:49:34', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1889, '按钮', '按钮', '/profile/avatar/anniu (77).svg', NULL, NULL, NULL, '2023-07-01 14:49:34', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1890, '按钮', '按钮', '/profile/avatar/anniu (76).svg', NULL, NULL, NULL, '2023-07-01 14:49:34', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1891, '按钮', '按钮', '/profile/avatar/anniu (78).svg', NULL, NULL, NULL, '2023-07-01 14:49:34', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1892, '按钮', '按钮', '/profile/avatar/anniu (79).svg', NULL, NULL, NULL, '2023-07-01 14:49:34', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1893, '按钮', '按钮', '/profile/avatar/anniu (82).svg', NULL, NULL, NULL, '2023-07-01 14:49:34', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1894, '按钮', '按钮', '/profile/avatar/anniu (81).svg', NULL, NULL, NULL, '2023-07-01 14:49:34', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1895, '按钮', '按钮', '/profile/avatar/anniu (80).svg', NULL, NULL, NULL, '2023-07-01 14:49:34', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1896, '按钮', '按钮', '/profile/avatar/anniu (83).svg', NULL, NULL, NULL, '2023-07-01 14:49:34', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1897, '储蓄罐', '储蓄罐', '/profile/avatar/chuxuguan (1).svg', NULL, NULL, NULL, '2023-07-01 15:14:44', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1898, '储蓄罐', '储蓄罐', '/profile/avatar/chuxuguan (3).svg', NULL, NULL, NULL, '2023-07-01 15:14:44', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1899, '储蓄罐', '储蓄罐', '/profile/avatar/chuxuguan (6).svg', NULL, NULL, NULL, '2023-07-01 15:14:44', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1900, '储蓄罐', '储蓄罐', '/profile/avatar/chuxuguan (4).svg', NULL, NULL, NULL, '2023-07-01 15:14:44', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1901, '储蓄罐', '储蓄罐', '/profile/avatar/chuxuguan (5).svg', NULL, NULL, NULL, '2023-07-01 15:14:44', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1902, '储蓄罐', '储蓄罐', '/profile/avatar/chuxuguan (2).svg', NULL, NULL, NULL, '2023-07-01 15:14:44', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1903, '储蓄罐', '储蓄罐', '/profile/avatar/chuxuguan (7).svg', NULL, NULL, NULL, '2023-07-01 15:14:44', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1904, '储蓄罐', '储蓄罐', '/profile/avatar/chuxuguan (8).svg', NULL, NULL, NULL, '2023-07-01 15:14:44', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1905, '储蓄罐', '储蓄罐', '/profile/avatar/chuxuguan (9).svg', NULL, NULL, NULL, '2023-07-01 15:14:44', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1906, '储蓄罐', '储蓄罐', '/profile/avatar/chuxuguan (11).svg', NULL, NULL, NULL, '2023-07-01 15:14:44', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1907, '储蓄罐', '储蓄罐', '/profile/avatar/chuxuguan (10).svg', NULL, NULL, NULL, '2023-07-01 15:14:44', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1908, '储蓄罐', '储蓄罐', '/profile/avatar/chuxuguan (12).svg', NULL, NULL, NULL, '2023-07-01 15:14:44', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1909, '储蓄罐', '储蓄罐', '/profile/avatar/chuxuguan (13).svg', NULL, NULL, NULL, '2023-07-01 15:14:45', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1910, '储蓄罐', '储蓄罐', '/profile/avatar/chuxuguan (15).svg', NULL, NULL, NULL, '2023-07-01 15:14:45', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1911, '储蓄罐', '储蓄罐', '/profile/avatar/chuxuguan (16).svg', NULL, NULL, NULL, '2023-07-01 15:14:45', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1912, '储蓄罐', '储蓄罐', '/profile/avatar/chuxuguan (17).svg', NULL, NULL, NULL, '2023-07-01 15:14:45', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1913, '储蓄罐', '储蓄罐', '/profile/avatar/chuxuguan (14).svg', NULL, NULL, NULL, '2023-07-01 15:14:45', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1914, '储蓄罐', '储蓄罐', '/profile/avatar/chuxuguan (18).svg', NULL, NULL, NULL, '2023-07-01 15:14:45', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1915, '储蓄罐', '储蓄罐', '/profile/avatar/chuxuguan (19).svg', NULL, NULL, NULL, '2023-07-01 15:14:45', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1916, '储蓄罐', '储蓄罐', '/profile/avatar/chuxuguan (20).svg', NULL, NULL, NULL, '2023-07-01 15:14:45', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1917, '储蓄罐', '储蓄罐', '/profile/avatar/chuxuguan (22).svg', NULL, NULL, NULL, '2023-07-01 15:14:45', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1918, '储蓄罐', '储蓄罐', '/profile/avatar/chuxuguan (24).svg', NULL, NULL, NULL, '2023-07-01 15:14:45', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1919, '储蓄罐', '储蓄罐', '/profile/avatar/chuxuguan (23).svg', NULL, NULL, NULL, '2023-07-01 15:14:45', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1920, '储蓄罐', '储蓄罐', '/profile/avatar/chuxuguan (21).svg', NULL, NULL, NULL, '2023-07-01 15:14:45', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1921, '储蓄罐', '储蓄罐', '/profile/avatar/chuxuguan (28).svg', NULL, NULL, NULL, '2023-07-01 15:14:46', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1922, '储蓄罐', '储蓄罐', '/profile/avatar/chuxuguan (25).svg', NULL, NULL, NULL, '2023-07-01 15:14:46', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1923, '储蓄罐', '储蓄罐', '/profile/avatar/chuxuguan (26).svg', NULL, NULL, NULL, '2023-07-01 15:14:46', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1924, '储蓄罐', '储蓄罐', '/profile/avatar/chuxuguan (27).svg', NULL, NULL, NULL, '2023-07-01 15:14:46', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1925, '储蓄罐', '储蓄罐', '/profile/avatar/chuxuguan (30).svg', NULL, NULL, NULL, '2023-07-01 15:14:46', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1926, '储蓄罐', '储蓄罐', '/profile/avatar/chuxuguan (29).svg', NULL, NULL, NULL, '2023-07-01 15:14:46', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1927, '储蓄罐', '储蓄罐', '/profile/avatar/chuxuguan (31).svg', NULL, NULL, NULL, '2023-07-01 15:14:46', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1928, '储蓄罐', '储蓄罐', '/profile/avatar/chuxuguan (32).svg', NULL, NULL, NULL, '2023-07-01 15:14:46', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1929, '储蓄罐', '储蓄罐', '/profile/avatar/chuxuguan (33).svg', NULL, NULL, NULL, '2023-07-01 15:14:46', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1930, '储蓄罐', '储蓄罐', '/profile/avatar/chuxuguan (35).svg', NULL, NULL, NULL, '2023-07-01 15:14:46', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1931, '储蓄罐', '储蓄罐', '/profile/avatar/chuxuguan (34).svg', NULL, NULL, NULL, '2023-07-01 15:14:46', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1932, '储蓄罐', '储蓄罐', '/profile/avatar/chuxuguan (36).svg', NULL, NULL, NULL, '2023-07-01 15:14:46', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1933, '储蓄罐', '储蓄罐', '/profile/avatar/chuxuguan (37).svg', NULL, NULL, NULL, '2023-07-01 15:14:46', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1934, '储蓄罐', '储蓄罐', '/profile/avatar/chuxuguan (38).svg', NULL, NULL, NULL, '2023-07-01 15:14:46', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1935, '储蓄罐', '储蓄罐', '/profile/avatar/chuxuguan (39).svg', NULL, NULL, NULL, '2023-07-01 15:14:47', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1936, '储蓄罐', '储蓄罐', '/profile/avatar/chuxuguan (41).svg', NULL, NULL, NULL, '2023-07-01 15:14:47', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1937, '储蓄罐', '储蓄罐', '/profile/avatar/chuxuguan (40).svg', NULL, NULL, NULL, '2023-07-01 15:14:47', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1938, '储蓄罐', '储蓄罐', '/profile/avatar/chuxuguan (42).svg', NULL, NULL, NULL, '2023-07-01 15:14:47', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1939, '储蓄罐', '储蓄罐', '/profile/avatar/chuxuguan (45).svg', NULL, NULL, NULL, '2023-07-01 15:14:47', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1940, '储蓄罐', '储蓄罐', '/profile/avatar/chuxuguan (43).svg', NULL, NULL, NULL, '2023-07-01 15:14:47', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1941, '储蓄罐', '储蓄罐', '/profile/avatar/chuxuguan (44).svg', NULL, NULL, NULL, '2023-07-01 15:14:47', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1942, '储蓄罐', '储蓄罐', '/profile/avatar/chuxuguan (46).svg', NULL, NULL, NULL, '2023-07-01 15:14:47', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1943, '储蓄罐', '储蓄罐', '/profile/avatar/chuxuguan (49).svg', NULL, NULL, NULL, '2023-07-01 15:14:47', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1944, '储蓄罐', '储蓄罐', '/profile/avatar/chuxuguan (47).svg', NULL, NULL, NULL, '2023-07-01 15:14:47', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1945, '储蓄罐', '储蓄罐', '/profile/avatar/chuxuguan (48).svg', NULL, NULL, NULL, '2023-07-01 15:14:47', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1946, '储蓄罐', '储蓄罐', '/profile/avatar/chuxuguan (52).svg', NULL, NULL, NULL, '2023-07-01 15:14:47', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1947, '储蓄罐', '储蓄罐', '/profile/avatar/chuxuguan (51).svg', NULL, NULL, NULL, '2023-07-01 15:14:47', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1948, '储蓄罐', '储蓄罐', '/profile/avatar/chuxuguan (50).svg', NULL, NULL, NULL, '2023-07-01 15:14:48', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1949, '储蓄罐', '储蓄罐', '/profile/avatar/chuxuguan (53).svg', NULL, NULL, NULL, '2023-07-01 15:14:48', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1950, '储蓄罐', '储蓄罐', '/profile/avatar/chuxuguan (54).svg', NULL, NULL, NULL, '2023-07-01 15:14:48', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1951, '储蓄罐', '储蓄罐', '/profile/avatar/chuxuguan (55).svg', NULL, NULL, NULL, '2023-07-01 15:14:48', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1952, '储蓄罐', '储蓄罐', '/profile/avatar/chuxuguan (57).svg', NULL, NULL, NULL, '2023-07-01 15:14:48', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1953, '储蓄罐', '储蓄罐', '/profile/avatar/chuxuguan (56).svg', NULL, NULL, NULL, '2023-07-01 15:14:48', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1954, '储蓄罐', '储蓄罐', '/profile/avatar/chuxuguan (58).svg', NULL, NULL, NULL, '2023-07-01 15:14:48', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1955, '储蓄罐', '储蓄罐', '/profile/avatar/chuxuguan (59).svg', NULL, NULL, NULL, '2023-07-01 15:14:48', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1956, '储蓄罐', '储蓄罐', '/profile/avatar/chuxuguan (60).svg', NULL, NULL, NULL, '2023-07-01 15:14:48', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1957, '储蓄罐', '储蓄罐', '/profile/avatar/chuxuguan (61).svg', NULL, NULL, NULL, '2023-07-01 15:14:48', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1958, '储蓄罐', '储蓄罐', '/profile/avatar/chuxuguan (64).svg', NULL, NULL, NULL, '2023-07-01 15:14:48', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1959, '储蓄罐', '储蓄罐', '/profile/avatar/chuxuguan (62).svg', NULL, NULL, NULL, '2023-07-01 15:14:48', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1960, '储蓄罐', '储蓄罐', '/profile/avatar/chuxuguan (63).svg', NULL, NULL, NULL, '2023-07-01 15:14:49', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1961, '储蓄罐', '储蓄罐', '/profile/avatar/chuxuguan (66).svg', NULL, NULL, NULL, '2023-07-01 15:14:49', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1962, '储蓄罐', '储蓄罐', '/profile/avatar/chuxuguan (68).svg', NULL, NULL, NULL, '2023-07-01 15:14:49', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1963, '储蓄罐', '储蓄罐', '/profile/avatar/chuxuguan (65).svg', NULL, NULL, NULL, '2023-07-01 15:14:49', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1964, '储蓄罐', '储蓄罐', '/profile/avatar/chuxuguan (69).svg', NULL, NULL, NULL, '2023-07-01 15:14:49', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1965, '储蓄罐', '储蓄罐', '/profile/avatar/chuxuguan (67).svg', NULL, NULL, NULL, '2023-07-01 15:14:49', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1966, '储蓄罐', '储蓄罐', '/profile/avatar/chuxuguan (70).svg', NULL, NULL, NULL, '2023-07-01 15:14:49', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1967, '储蓄罐', '储蓄罐', '/profile/avatar/chuxuguan (71).svg', NULL, NULL, NULL, '2023-07-01 15:14:49', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1968, '储蓄罐', '储蓄罐', '/profile/avatar/chuxuguan (72).svg', NULL, NULL, NULL, '2023-07-01 15:14:49', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1969, '储蓄罐', '储蓄罐', '/profile/avatar/chuxuguan (73).svg', NULL, NULL, NULL, '2023-07-01 15:14:49', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1970, '储蓄罐', '储蓄罐', '/profile/avatar/chuxuguan (76).svg', NULL, NULL, NULL, '2023-07-01 15:14:49', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1971, '储蓄罐', '储蓄罐', '/profile/avatar/chuxuguan (74).svg', NULL, NULL, NULL, '2023-07-01 15:14:49', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1972, '储蓄罐', '储蓄罐', '/profile/avatar/chuxuguan (75).svg', NULL, NULL, NULL, '2023-07-01 15:14:49', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1973, '储蓄罐', '储蓄罐', '/profile/avatar/chuxuguan (78).svg', NULL, NULL, NULL, '2023-07-01 15:14:49', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1974, '储蓄罐', '储蓄罐', '/profile/avatar/chuxuguan (77).svg', NULL, NULL, NULL, '2023-07-01 15:14:50', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1975, '储蓄罐', '储蓄罐', '/profile/avatar/chuxuguan (80).svg', NULL, NULL, NULL, '2023-07-01 15:14:50', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1976, '储蓄罐', '储蓄罐', '/profile/avatar/chuxuguan (81).svg', NULL, NULL, NULL, '2023-07-01 15:14:50', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1977, '储蓄罐', '储蓄罐', '/profile/avatar/chuxuguan (79).svg', NULL, NULL, NULL, '2023-07-01 15:14:50', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1978, '储蓄罐', '储蓄罐', '/profile/avatar/chuxuguan (83).svg', NULL, NULL, NULL, '2023-07-01 15:14:50', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1979, '储蓄罐', '储蓄罐', '/profile/avatar/chuxuguan (82).svg', NULL, NULL, NULL, '2023-07-01 15:14:50', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1980, '储蓄罐', '储蓄罐', '/profile/avatar/chuxuguan (84).svg', NULL, NULL, NULL, '2023-07-01 15:14:50', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1981, '储蓄罐', '储蓄罐', '/profile/avatar/chuxuguan (85).svg', NULL, NULL, NULL, '2023-07-01 15:14:50', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1982, '储蓄罐', '储蓄罐', '/profile/avatar/chuxuguan (88).svg', NULL, NULL, NULL, '2023-07-01 15:14:50', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1983, '储蓄罐', '储蓄罐', '/profile/avatar/chuxuguan (87).svg', NULL, NULL, NULL, '2023-07-01 15:14:50', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1984, '储蓄罐', '储蓄罐', '/profile/avatar/chuxuguan (89).svg', NULL, NULL, NULL, '2023-07-01 15:14:50', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1985, '储蓄罐', '储蓄罐', '/profile/avatar/chuxuguan (86).svg', NULL, NULL, NULL, '2023-07-01 15:14:50', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1986, '储蓄罐', '储蓄罐', '/profile/avatar/chuxuguan (90).svg', NULL, NULL, NULL, '2023-07-01 15:14:50', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1987, '储蓄罐', '储蓄罐', '/profile/avatar/chuxuguan (92).svg', NULL, NULL, NULL, '2023-07-01 15:14:51', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1988, '储蓄罐', '储蓄罐', '/profile/avatar/chuxuguan (93).svg', NULL, NULL, NULL, '2023-07-01 15:14:51', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1989, '储蓄罐', '储蓄罐', '/profile/avatar/chuxuguan (91).svg', NULL, NULL, NULL, '2023-07-01 15:14:51', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1990, '储蓄罐', '储蓄罐', '/profile/avatar/chuxuguan (94).svg', NULL, NULL, NULL, '2023-07-01 15:14:51', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1991, '储蓄罐', '储蓄罐', '/profile/avatar/chuxuguan (95).svg', NULL, NULL, NULL, '2023-07-01 15:14:51', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1992, '储蓄罐', '储蓄罐', '/profile/avatar/chuxuguan (96).svg', NULL, NULL, NULL, '2023-07-01 15:14:51', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1993, '储蓄罐', '储蓄罐', '/profile/avatar/chuxuguan (98).svg', NULL, NULL, NULL, '2023-07-01 15:14:51', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1994, '储蓄罐', '储蓄罐', '/profile/avatar/chuxuguan (99).svg', NULL, NULL, NULL, '2023-07-01 15:14:51', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1995, '储蓄罐', '储蓄罐', '/profile/avatar/chuxuguan (97).svg', NULL, NULL, NULL, '2023-07-01 15:14:51', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1996, '储蓄罐', '储蓄罐', '/profile/avatar/chuxuguan (100).svg', NULL, NULL, NULL, '2023-07-01 15:14:51', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1997, '储蓄罐', '储蓄罐', '/profile/avatar/chuxuguan (102).svg', NULL, NULL, NULL, '2023-07-01 15:14:51', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1998, '储蓄罐', '储蓄罐', '/profile/avatar/chuxuguan (101).svg', NULL, NULL, NULL, '2023-07-01 15:14:51', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (1999, '储蓄罐', '储蓄罐', '/profile/avatar/chuxuguan (103).svg', NULL, NULL, NULL, '2023-07-01 15:14:51', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2000, '储蓄罐', '储蓄罐', '/profile/avatar/chuxuguan (104).svg', NULL, NULL, NULL, '2023-07-01 15:14:51', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2001, '储蓄罐', '储蓄罐', '/profile/avatar/chuxuguan (105).svg', NULL, NULL, NULL, '2023-07-01 15:14:51', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2002, '储蓄罐', '储蓄罐', '/profile/avatar/chuxuguan (106).svg', NULL, NULL, NULL, '2023-07-01 15:14:52', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2003, '储蓄罐', '储蓄罐', '/profile/avatar/chuxuguan (107).svg', NULL, NULL, NULL, '2023-07-01 15:14:52', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2004, '储蓄罐', '储蓄罐', '/profile/avatar/chuxuguan (108).svg', NULL, NULL, NULL, '2023-07-01 15:14:52', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2005, '储蓄罐', '储蓄罐', '/profile/avatar/chuxuguan (109).svg', NULL, NULL, NULL, '2023-07-01 15:14:52', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2006, '储蓄罐', '储蓄罐', '/profile/avatar/chuxuguan (110).svg', NULL, NULL, NULL, '2023-07-01 15:14:52', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2007, '储蓄罐', '储蓄罐', '/profile/avatar/chuxuguan (111).svg', NULL, NULL, NULL, '2023-07-01 15:14:52', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2008, '储蓄罐', '储蓄罐', '/profile/avatar/chuxuguan (115).svg', NULL, NULL, NULL, '2023-07-01 15:14:52', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2009, '储蓄罐', '储蓄罐', '/profile/avatar/chuxuguan (114).svg', NULL, NULL, NULL, '2023-07-01 15:14:52', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2010, '储蓄罐', '储蓄罐', '/profile/avatar/chuxuguan (112).svg', NULL, NULL, NULL, '2023-07-01 15:14:52', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2011, '储蓄罐', '储蓄罐', '/profile/avatar/chuxuguan (117).svg', NULL, NULL, NULL, '2023-07-01 15:14:52', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2012, '储蓄罐', '储蓄罐', '/profile/avatar/chuxuguan (116).svg', NULL, NULL, NULL, '2023-07-01 15:14:52', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2013, '储蓄罐', '储蓄罐', '/profile/avatar/chuxuguan (113).svg', NULL, NULL, NULL, '2023-07-01 15:14:52', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2014, '储蓄罐', '储蓄罐', '/profile/avatar/chuxuguan (118).svg', NULL, NULL, NULL, '2023-07-01 15:14:52', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2015, '储蓄罐', '储蓄罐', '/profile/avatar/chuxuguan (121).svg', NULL, NULL, NULL, '2023-07-01 15:14:53', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2016, '储蓄罐', '储蓄罐', '/profile/avatar/chuxuguan (119).svg', NULL, NULL, NULL, '2023-07-01 15:14:53', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2017, '储蓄罐', '储蓄罐', '/profile/avatar/chuxuguan (120).svg', NULL, NULL, NULL, '2023-07-01 15:14:53', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2018, '储蓄罐', '储蓄罐', '/profile/avatar/chuxuguan (124).svg', NULL, NULL, NULL, '2023-07-01 15:14:53', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2019, '储蓄罐', '储蓄罐', '/profile/avatar/chuxuguan (122).svg', NULL, NULL, NULL, '2023-07-01 15:14:53', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2020, '储蓄罐', '储蓄罐', '/profile/avatar/chuxuguan (123).svg', NULL, NULL, NULL, '2023-07-01 15:14:53', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2021, '储蓄罐', '储蓄罐', '/profile/avatar/chuxuguan (125).svg', NULL, NULL, NULL, '2023-07-01 15:14:53', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2022, '储蓄罐', '储蓄罐', '/profile/avatar/chuxuguan (126).svg', NULL, NULL, NULL, '2023-07-01 15:14:53', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2023, '储蓄罐', '储蓄罐', '/profile/avatar/chuxuguan (127).svg', NULL, NULL, NULL, '2023-07-01 15:14:53', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2024, '储蓄罐', '储蓄罐', '/profile/avatar/chuxuguan (129).svg', NULL, NULL, NULL, '2023-07-01 15:14:53', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2025, '储蓄罐', '储蓄罐', '/profile/avatar/chuxuguan (128).svg', NULL, NULL, NULL, '2023-07-01 15:14:53', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2026, '储蓄罐', '储蓄罐', '/profile/avatar/chuxuguan (130).svg', NULL, NULL, NULL, '2023-07-01 15:14:53', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2027, '储蓄罐', '储蓄罐', '/profile/avatar/chuxuguan (131).svg', NULL, NULL, NULL, '2023-07-01 15:14:54', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2028, '储蓄罐', '储蓄罐', '/profile/avatar/chuxuguan (134).svg', NULL, NULL, NULL, '2023-07-01 15:14:54', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2029, '储蓄罐', '储蓄罐', '/profile/avatar/chuxuguan (133).svg', NULL, NULL, NULL, '2023-07-01 15:14:54', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2030, '储蓄罐', '储蓄罐', '/profile/avatar/chuxuguan (132).svg', NULL, NULL, NULL, '2023-07-01 15:14:54', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2031, '储蓄罐', '储蓄罐', '/profile/avatar/chuxuguan (135).svg', NULL, NULL, NULL, '2023-07-01 15:14:54', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2032, '储蓄罐', '储蓄罐', '/profile/avatar/chuxuguan (136).svg', NULL, NULL, NULL, '2023-07-01 15:14:54', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2033, '储蓄罐', '储蓄罐', '/profile/avatar/chuxuguan (137).svg', NULL, NULL, NULL, '2023-07-01 15:14:54', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2034, '储蓄罐', '储蓄罐', '/profile/avatar/chuxuguan (138).svg', NULL, NULL, NULL, '2023-07-01 15:14:54', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2035, '储蓄罐', '储蓄罐', '/profile/avatar/chuxuguan (142).svg', NULL, NULL, NULL, '2023-07-01 15:14:54', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2036, '储蓄罐', '储蓄罐', '/profile/avatar/chuxuguan (140).svg', NULL, NULL, NULL, '2023-07-01 15:14:54', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2037, '储蓄罐', '储蓄罐', '/profile/avatar/chuxuguan (139).svg', NULL, NULL, NULL, '2023-07-01 15:14:54', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2038, '储蓄罐', '储蓄罐', '/profile/avatar/chuxuguan (141).svg', NULL, NULL, NULL, '2023-07-01 15:14:54', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2039, '储蓄罐', '储蓄罐', '/profile/avatar/chuxuguan (143).svg', NULL, NULL, NULL, '2023-07-01 15:14:54', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2040, '储蓄罐', '储蓄罐', '/profile/avatar/chuxuguan (144).svg', NULL, NULL, NULL, '2023-07-01 15:14:55', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2041, '储蓄罐', '储蓄罐', '/profile/avatar/chuxuguan (147).svg', NULL, NULL, NULL, '2023-07-01 15:14:55', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2042, '储蓄罐', '储蓄罐', '/profile/avatar/chuxuguan (145).svg', NULL, NULL, NULL, '2023-07-01 15:14:55', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2043, '储蓄罐', '储蓄罐', '/profile/avatar/chuxuguan (146).svg', NULL, NULL, NULL, '2023-07-01 15:14:55', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2044, '储蓄罐', '储蓄罐', '/profile/avatar/chuxuguan (149).svg', NULL, NULL, NULL, '2023-07-01 15:14:55', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2045, '储蓄罐', '储蓄罐', '/profile/avatar/chuxuguan (148).svg', NULL, NULL, NULL, '2023-07-01 15:14:55', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2046, '储蓄罐', '储蓄罐', '/profile/avatar/chuxuguan (150).svg', NULL, NULL, NULL, '2023-07-01 15:14:55', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2047, '储蓄罐', '储蓄罐', '/profile/avatar/chuxuguan (151).svg', NULL, NULL, NULL, '2023-07-01 15:14:55', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2048, '储蓄罐', '储蓄罐', '/profile/avatar/chuxuguan (154).svg', NULL, NULL, NULL, '2023-07-01 15:14:55', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2049, '储蓄罐', '储蓄罐', '/profile/avatar/chuxuguan (152).svg', NULL, NULL, NULL, '2023-07-01 15:14:55', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2050, '储蓄罐', '储蓄罐', '/profile/avatar/chuxuguan (153).svg', NULL, NULL, NULL, '2023-07-01 15:14:55', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2051, '储蓄罐', '储蓄罐', '/profile/avatar/chuxuguan (155).svg', NULL, NULL, NULL, '2023-07-01 15:14:55', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2052, '储蓄罐', '储蓄罐', '/profile/avatar/chuxuguan (156).svg', NULL, NULL, NULL, '2023-07-01 15:14:55', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2053, '储蓄罐', '储蓄罐', '/profile/avatar/chuxuguan (157).svg', NULL, NULL, NULL, '2023-07-01 15:14:56', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2054, '储蓄罐', '储蓄罐', '/profile/avatar/chuxuguan (158).svg', NULL, NULL, NULL, '2023-07-01 15:14:56', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2055, '储蓄罐', '储蓄罐', '/profile/avatar/chuxuguan (160).svg', NULL, NULL, NULL, '2023-07-01 15:14:56', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2056, '储蓄罐', '储蓄罐', '/profile/avatar/chuxuguan (159).svg', NULL, NULL, NULL, '2023-07-01 15:14:56', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2057, '储蓄罐', '储蓄罐', '/profile/avatar/chuxuguan (162).svg', NULL, NULL, NULL, '2023-07-01 15:14:56', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2058, '储蓄罐', '储蓄罐', '/profile/avatar/chuxuguan (161).svg', NULL, NULL, NULL, '2023-07-01 15:14:56', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2059, '储蓄罐', '储蓄罐', '/profile/avatar/chuxuguan (165).svg', NULL, NULL, NULL, '2023-07-01 15:14:56', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2060, '储蓄罐', '储蓄罐', '/profile/avatar/chuxuguan (164).svg', NULL, NULL, NULL, '2023-07-01 15:14:56', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2061, '储蓄罐', '储蓄罐', '/profile/avatar/chuxuguan (166).svg', NULL, NULL, NULL, '2023-07-01 15:14:56', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2062, '储蓄罐', '储蓄罐', '/profile/avatar/chuxuguan (163).svg', NULL, NULL, NULL, '2023-07-01 15:14:56', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2063, '储蓄罐', '储蓄罐', '/profile/avatar/chuxuguan (167).svg', NULL, NULL, NULL, '2023-07-01 15:14:56', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2064, '储蓄罐', '储蓄罐', '/profile/avatar/chuxuguan (168).svg', NULL, NULL, NULL, '2023-07-01 15:14:56', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2065, '储蓄罐', '储蓄罐', '/profile/avatar/chuxuguan (172).svg', NULL, NULL, NULL, '2023-07-01 15:14:57', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2066, '储蓄罐', '储蓄罐', '/profile/avatar/chuxuguan (169).svg', NULL, NULL, NULL, '2023-07-01 15:14:57', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2067, '储蓄罐', '储蓄罐', '/profile/avatar/chuxuguan (170).svg', NULL, NULL, NULL, '2023-07-01 15:14:57', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2068, '储蓄罐', '储蓄罐', '/profile/avatar/chuxuguan (171).svg', NULL, NULL, NULL, '2023-07-01 15:14:57', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2069, '储蓄罐', '储蓄罐', '/profile/avatar/chuxuguan (173).svg', NULL, NULL, NULL, '2023-07-01 15:14:57', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2070, '储蓄罐', '储蓄罐', '/profile/avatar/chuxuguan (174).svg', NULL, NULL, NULL, '2023-07-01 15:14:57', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2071, '储蓄罐', '储蓄罐', '/profile/avatar/chuxuguan (175).svg', NULL, NULL, NULL, '2023-07-01 15:14:57', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2072, '储蓄罐', '储蓄罐', '/profile/avatar/chuxuguan (176).svg', NULL, NULL, NULL, '2023-07-01 15:14:57', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2073, '储蓄罐', '储蓄罐', '/profile/avatar/chuxuguan (177).svg', NULL, NULL, NULL, '2023-07-01 15:14:57', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2074, '储蓄罐', '储蓄罐', '/profile/avatar/chuxuguan (179).svg', NULL, NULL, NULL, '2023-07-01 15:14:57', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2075, '储蓄罐', '储蓄罐', '/profile/avatar/chuxuguan (178).svg', NULL, NULL, NULL, '2023-07-01 15:14:57', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2076, '储蓄罐', '储蓄罐', '/profile/avatar/chuxuguan (180).svg', NULL, NULL, NULL, '2023-07-01 15:14:57', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2077, '储蓄罐', '储蓄罐', '/profile/avatar/chuxuguan (184).svg', NULL, NULL, NULL, '2023-07-01 15:14:57', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2078, '储蓄罐', '储蓄罐', '/profile/avatar/chuxuguan (183).svg', NULL, NULL, NULL, '2023-07-01 15:14:57', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2079, '储蓄罐', '储蓄罐', '/profile/avatar/chuxuguan (182).svg', NULL, NULL, NULL, '2023-07-01 15:14:57', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2080, '储蓄罐', '储蓄罐', '/profile/avatar/chuxuguan (181).svg', NULL, NULL, NULL, '2023-07-01 15:14:57', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2081, '储蓄罐', '储蓄罐', '/profile/avatar/chuxuguan (185).svg', NULL, NULL, NULL, '2023-07-01 15:14:58', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2082, '储蓄罐', '储蓄罐', '/profile/avatar/chuxuguan (186).svg', NULL, NULL, NULL, '2023-07-01 15:14:58', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2083, '储蓄罐', '储蓄罐', '/profile/avatar/chuxuguan (187).svg', NULL, NULL, NULL, '2023-07-01 15:14:58', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2084, '储蓄罐', '储蓄罐', '/profile/avatar/chuxuguan (188).svg', NULL, NULL, NULL, '2023-07-01 15:14:58', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2085, '储蓄罐', '储蓄罐', '/profile/avatar/chuxuguan (190).svg', NULL, NULL, NULL, '2023-07-01 15:14:58', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2086, '储蓄罐', '储蓄罐', '/profile/avatar/chuxuguan (189).svg', NULL, NULL, NULL, '2023-07-01 15:14:58', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2087, '储蓄罐', '储蓄罐', '/profile/avatar/chuxuguan (191).svg', NULL, NULL, NULL, '2023-07-01 15:14:58', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2088, '阀门', '阀门', '/profile/avatar/famen (1).svg', NULL, NULL, NULL, '2023-07-01 15:17:32', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2089, '阀门', '阀门', '/profile/avatar/famen (6).svg', NULL, NULL, NULL, '2023-07-01 15:17:32', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2090, '阀门', '阀门', '/profile/avatar/famen (3).svg', NULL, NULL, NULL, '2023-07-01 15:17:32', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2091, '阀门', '阀门', '/profile/avatar/famen (4).svg', NULL, NULL, NULL, '2023-07-01 15:17:32', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2092, '阀门', '阀门', '/profile/avatar/famen (5).svg', NULL, NULL, NULL, '2023-07-01 15:17:32', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2093, '阀门', '阀门', '/profile/avatar/famen (2).svg', NULL, NULL, NULL, '2023-07-01 15:17:32', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2094, '阀门', '阀门', '/profile/avatar/famen (8).svg', NULL, NULL, NULL, '2023-07-01 15:17:32', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2095, '阀门', '阀门', '/profile/avatar/famen (7).svg', NULL, NULL, NULL, '2023-07-01 15:17:32', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2096, '阀门', '阀门', '/profile/avatar/famen (10).svg', NULL, NULL, NULL, '2023-07-01 15:17:32', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2097, '阀门', '阀门', '/profile/avatar/famen (11).svg', NULL, NULL, NULL, '2023-07-01 15:17:32', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2098, '阀门', '阀门', '/profile/avatar/famen (9).svg', NULL, NULL, NULL, '2023-07-01 15:17:32', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2099, '阀门', '阀门', '/profile/avatar/famen (12).svg', NULL, NULL, NULL, '2023-07-01 15:17:32', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2100, '阀门', '阀门', '/profile/avatar/famen (15).svg', NULL, NULL, NULL, '2023-07-01 15:17:32', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2101, '阀门', '阀门', '/profile/avatar/famen (13).svg', NULL, NULL, NULL, '2023-07-01 15:17:33', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2102, '阀门', '阀门', '/profile/avatar/famen (14).svg', NULL, NULL, NULL, '2023-07-01 15:17:33', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2103, '阀门', '阀门', '/profile/avatar/famen (16).svg', NULL, NULL, NULL, '2023-07-01 15:17:33', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2104, '阀门', '阀门', '/profile/avatar/famen (18).svg', NULL, NULL, NULL, '2023-07-01 15:17:33', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2105, '阀门', '阀门', '/profile/avatar/famen (17).svg', NULL, NULL, NULL, '2023-07-01 15:17:33', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2106, '阀门', '阀门', '/profile/avatar/famen (19).svg', NULL, NULL, NULL, '2023-07-01 15:17:33', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2107, '阀门', '阀门', '/profile/avatar/famen (23).svg', NULL, NULL, NULL, '2023-07-01 15:17:33', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2108, '阀门', '阀门', '/profile/avatar/famen (24).svg', NULL, NULL, NULL, '2023-07-01 15:17:33', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2109, '阀门', '阀门', '/profile/avatar/famen (20).svg', NULL, NULL, NULL, '2023-07-01 15:17:33', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2110, '阀门', '阀门', '/profile/avatar/famen (21).svg', NULL, NULL, NULL, '2023-07-01 15:17:33', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2111, '阀门', '阀门', '/profile/avatar/famen (25).svg', NULL, NULL, NULL, '2023-07-01 15:17:33', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2112, '阀门', '阀门', '/profile/avatar/famen (22).svg', NULL, NULL, NULL, '2023-07-01 15:17:33', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2113, '阀门', '阀门', '/profile/avatar/famen (26).svg', NULL, NULL, NULL, '2023-07-01 15:17:34', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2114, '阀门', '阀门', '/profile/avatar/famen (27).svg', NULL, NULL, NULL, '2023-07-01 15:17:34', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2115, '阀门', '阀门', '/profile/avatar/famen (29).svg', NULL, NULL, NULL, '2023-07-01 15:17:34', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2116, '阀门', '阀门', '/profile/avatar/famen (31).svg', NULL, NULL, NULL, '2023-07-01 15:17:34', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2117, '阀门', '阀门', '/profile/avatar/famen (30).svg', NULL, NULL, NULL, '2023-07-01 15:17:34', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2118, '阀门', '阀门', '/profile/avatar/famen (28).svg', NULL, NULL, NULL, '2023-07-01 15:17:34', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2119, '阀门', '阀门', '/profile/avatar/famen (32).svg', NULL, NULL, NULL, '2023-07-01 15:17:34', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2120, '阀门', '阀门', '/profile/avatar/famen (36).svg', NULL, NULL, NULL, '2023-07-01 15:17:34', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2121, '阀门', '阀门', '/profile/avatar/famen (33).svg', NULL, NULL, NULL, '2023-07-01 15:17:34', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2122, '阀门', '阀门', '/profile/avatar/famen (37).svg', NULL, NULL, NULL, '2023-07-01 15:17:34', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2123, '阀门', '阀门', '/profile/avatar/famen (34).svg', NULL, NULL, NULL, '2023-07-01 15:17:34', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2124, '阀门', '阀门', '/profile/avatar/famen (35).svg', NULL, NULL, NULL, '2023-07-01 15:17:34', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2125, '阀门', '阀门', '/profile/avatar/famen (38).svg', NULL, NULL, NULL, '2023-07-01 15:17:34', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2126, '阀门', '阀门', '/profile/avatar/famen (39).svg', NULL, NULL, NULL, '2023-07-01 15:17:35', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2127, '阀门', '阀门', '/profile/avatar/famen (40).svg', NULL, NULL, NULL, '2023-07-01 15:17:35', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2128, '阀门', '阀门', '/profile/avatar/famen (41).svg', NULL, NULL, NULL, '2023-07-01 15:17:35', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2129, '阀门', '阀门', '/profile/avatar/famen (42).svg', NULL, NULL, NULL, '2023-07-01 15:17:35', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2130, '阀门', '阀门', '/profile/avatar/famen (45).svg', NULL, NULL, NULL, '2023-07-01 15:17:35', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2131, '阀门', '阀门', '/profile/avatar/famen (44).svg', NULL, NULL, NULL, '2023-07-01 15:17:35', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2132, '阀门', '阀门', '/profile/avatar/famen (43).svg', NULL, NULL, NULL, '2023-07-01 15:17:35', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2133, '阀门', '阀门', '/profile/avatar/famen (46).svg', NULL, NULL, NULL, '2023-07-01 15:17:35', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2134, '阀门', '阀门', '/profile/avatar/famen (47).svg', NULL, NULL, NULL, '2023-07-01 15:17:35', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2135, '阀门', '阀门', '/profile/avatar/famen (48).svg', NULL, NULL, NULL, '2023-07-01 15:17:35', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2136, '阀门', '阀门', '/profile/avatar/famen (50).svg', NULL, NULL, NULL, '2023-07-01 15:17:35', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2137, '阀门', '阀门', '/profile/avatar/famen (51).svg', NULL, NULL, NULL, '2023-07-01 15:17:35', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2138, '阀门', '阀门', '/profile/avatar/famen (49).svg', NULL, NULL, NULL, '2023-07-01 15:17:36', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2139, '阀门', '阀门', '/profile/avatar/famen (52).svg', NULL, NULL, NULL, '2023-07-01 15:17:36', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2140, '阀门', '阀门', '/profile/avatar/famen (53).svg', NULL, NULL, NULL, '2023-07-01 15:17:36', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2141, '阀门', '阀门', '/profile/avatar/famen (54).svg', NULL, NULL, NULL, '2023-07-01 15:17:36', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2142, '阀门', '阀门', '/profile/avatar/famen (56).svg', NULL, NULL, NULL, '2023-07-01 15:17:36', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2143, '阀门', '阀门', '/profile/avatar/famen (55).svg', NULL, NULL, NULL, '2023-07-01 15:17:36', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2144, '阀门', '阀门', '/profile/avatar/famen (57).svg', NULL, NULL, NULL, '2023-07-01 15:17:36', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2145, '阀门', '阀门', '/profile/avatar/famen (59).svg', NULL, NULL, NULL, '2023-07-01 15:17:36', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2146, '阀门', '阀门', '/profile/avatar/famen (58).svg', NULL, NULL, NULL, '2023-07-01 15:17:36', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2147, '阀门', '阀门', '/profile/avatar/famen (65).svg', NULL, NULL, NULL, '2023-07-01 15:17:36', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2148, '阀门', '阀门', '/profile/avatar/famen (60).svg', NULL, NULL, NULL, '2023-07-01 15:17:36', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2149, '阀门', '阀门', '/profile/avatar/famen (61).svg', NULL, NULL, NULL, '2023-07-01 15:17:36', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2150, '阀门', '阀门', '/profile/avatar/famen (63).svg', NULL, NULL, NULL, '2023-07-01 15:17:37', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2151, '阀门', '阀门', '/profile/avatar/famen (62).svg', NULL, NULL, NULL, '2023-07-01 15:17:37', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2152, '阀门', '阀门', '/profile/avatar/famen (64).svg', NULL, NULL, NULL, '2023-07-01 15:17:37', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2153, '阀门', '阀门', '/profile/avatar/famen (66).svg', NULL, NULL, NULL, '2023-07-01 15:17:37', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2154, '阀门', '阀门', '/profile/avatar/famen (67).svg', NULL, NULL, NULL, '2023-07-01 15:17:37', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2155, '阀门', '阀门', '/profile/avatar/famen (69).svg', NULL, NULL, NULL, '2023-07-01 15:17:37', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2156, '阀门', '阀门', '/profile/avatar/famen (71).svg', NULL, NULL, NULL, '2023-07-01 15:17:37', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2157, '阀门', '阀门', '/profile/avatar/famen (70).svg', NULL, NULL, NULL, '2023-07-01 15:17:37', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2158, '阀门', '阀门', '/profile/avatar/famen (68).svg', NULL, NULL, NULL, '2023-07-01 15:17:37', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2159, '阀门', '阀门', '/profile/avatar/famen (72).svg', NULL, NULL, NULL, '2023-07-01 15:17:37', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2160, '阀门', '阀门', '/profile/avatar/famen (74).svg', NULL, NULL, NULL, '2023-07-01 15:17:37', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2161, '阀门', '阀门', '/profile/avatar/famen (73).svg', NULL, NULL, NULL, '2023-07-01 15:17:37', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2162, '阀门', '阀门', '/profile/avatar/famen (76).svg', NULL, NULL, NULL, '2023-07-01 15:17:37', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2163, '阀门', '阀门', '/profile/avatar/famen (75).svg', NULL, NULL, NULL, '2023-07-01 15:17:37', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2164, '阀门', '阀门', '/profile/avatar/famen (77).svg', NULL, NULL, NULL, '2023-07-01 15:17:37', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2165, '阀门', '阀门', '/profile/avatar/famen (78).svg', NULL, NULL, NULL, '2023-07-01 15:17:38', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2166, '阀门', '阀门', '/profile/avatar/famen (82).svg', NULL, NULL, NULL, '2023-07-01 15:17:38', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2167, '阀门', '阀门', '/profile/avatar/famen (79).svg', NULL, NULL, NULL, '2023-07-01 15:17:38', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2168, '阀门', '阀门', '/profile/avatar/famen (81).svg', NULL, NULL, NULL, '2023-07-01 15:17:38', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2169, '阀门', '阀门', '/profile/avatar/famen (83).svg', NULL, NULL, NULL, '2023-07-01 15:17:38', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2170, '阀门', '阀门', '/profile/avatar/famen (80).svg', NULL, NULL, NULL, '2023-07-01 15:17:38', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2171, '阀门', '阀门', '/profile/avatar/famen (84).svg', NULL, NULL, NULL, '2023-07-01 15:17:38', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2172, '阀门', '阀门', '/profile/avatar/famen (85).svg', NULL, NULL, NULL, '2023-07-01 15:17:38', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2173, '阀门', '阀门', '/profile/avatar/famen (86).svg', NULL, NULL, NULL, '2023-07-01 15:17:38', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2174, '阀门', '阀门', '/profile/avatar/famen (87).svg', NULL, NULL, NULL, '2023-07-01 15:17:38', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2175, '阀门', '阀门', '/profile/avatar/famen (88).svg', NULL, NULL, NULL, '2023-07-01 15:17:38', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2176, '阀门', '阀门', '/profile/avatar/famen (89).svg', NULL, NULL, NULL, '2023-07-01 15:17:38', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2177, '阀门', '阀门', '/profile/avatar/famen (91).svg', NULL, NULL, NULL, '2023-07-01 15:17:39', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2178, '阀门', '阀门', '/profile/avatar/famen (92).svg', NULL, NULL, NULL, '2023-07-01 15:17:39', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2179, '阀门', '阀门', '/profile/avatar/famen (90).svg', NULL, NULL, NULL, '2023-07-01 15:17:39', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2180, '阀门', '阀门', '/profile/avatar/famen (94).svg', NULL, NULL, NULL, '2023-07-01 15:17:39', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2181, '阀门', '阀门', '/profile/avatar/famen (95).svg', NULL, NULL, NULL, '2023-07-01 15:17:39', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2182, '阀门', '阀门', '/profile/avatar/famen (93).svg', NULL, NULL, NULL, '2023-07-01 15:17:39', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2183, '阀门', '阀门', '/profile/avatar/famen (98).svg', NULL, NULL, NULL, '2023-07-01 15:17:39', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2184, '阀门', '阀门', '/profile/avatar/famen (96).svg', NULL, NULL, NULL, '2023-07-01 15:17:39', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2185, '阀门', '阀门', '/profile/avatar/famen (97).svg', NULL, NULL, NULL, '2023-07-01 15:17:39', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2186, '阀门', '阀门', '/profile/avatar/famen (99).svg', NULL, NULL, NULL, '2023-07-01 15:17:39', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2187, '阀门', '阀门', '/profile/avatar/famen (100).svg', NULL, NULL, NULL, '2023-07-01 15:17:39', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2188, '阀门', '阀门', '/profile/avatar/famen (101).svg', NULL, NULL, NULL, '2023-07-01 15:17:39', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2189, '阀门', '阀门', '/profile/avatar/famen (102).svg', NULL, NULL, NULL, '2023-07-01 15:17:40', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2190, '阀门', '阀门', '/profile/avatar/famen (104).svg', NULL, NULL, NULL, '2023-07-01 15:17:40', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2191, '阀门', '阀门', '/profile/avatar/famen (103).svg', NULL, NULL, NULL, '2023-07-01 15:17:40', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2192, '阀门', '阀门', '/profile/avatar/famen (105).svg', NULL, NULL, NULL, '2023-07-01 15:17:40', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2193, '阀门', '阀门', '/profile/avatar/famen (107).svg', NULL, NULL, NULL, '2023-07-01 15:17:40', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2194, '阀门', '阀门', '/profile/avatar/famen (106).svg', NULL, NULL, NULL, '2023-07-01 15:17:40', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2195, '阀门', '阀门', '/profile/avatar/famen (108).svg', NULL, NULL, NULL, '2023-07-01 15:17:40', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2196, '反应器', '反应器', '/profile/avatar/fanyingqi (1).svg', NULL, NULL, NULL, '2023-07-01 15:20:16', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2197, '反应器', '反应器', '/profile/avatar/fanyingqi (2).svg', NULL, NULL, NULL, '2023-07-01 15:20:16', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2198, '反应器', '反应器', '/profile/avatar/fanyingqi (3).svg', NULL, NULL, NULL, '2023-07-01 15:20:16', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2199, '反应器', '反应器', '/profile/avatar/fanyingqi (6).svg', NULL, NULL, NULL, '2023-07-01 15:20:16', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2200, '反应器', '反应器', '/profile/avatar/fanyingqi (5).svg', NULL, NULL, NULL, '2023-07-01 15:20:16', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2201, '反应器', '反应器', '/profile/avatar/fanyingqi (4).svg', NULL, NULL, NULL, '2023-07-01 15:20:16', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2202, '反应器', '反应器', '/profile/avatar/fanyingqi (7).svg', NULL, NULL, NULL, '2023-07-01 15:20:16', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2203, '反应器', '反应器', '/profile/avatar/fanyingqi (8).svg', NULL, NULL, NULL, '2023-07-01 15:20:16', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2204, '反应器', '反应器', '/profile/avatar/fanyingqi (9).svg', NULL, NULL, NULL, '2023-07-01 15:20:17', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2205, '反应器', '反应器', '/profile/avatar/fanyingqi (10).svg', NULL, NULL, NULL, '2023-07-01 15:20:17', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2206, '反应器', '反应器', '/profile/avatar/fanyingqi (11).svg', NULL, NULL, NULL, '2023-07-01 15:20:17', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2207, '反应器', '反应器', '/profile/avatar/fanyingqi (13).svg', NULL, NULL, NULL, '2023-07-01 15:20:17', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2208, '反应器', '反应器', '/profile/avatar/fanyingqi (12).svg', NULL, NULL, NULL, '2023-07-01 15:20:17', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2209, '反应器', '反应器', '/profile/avatar/fanyingqi (14).svg', NULL, NULL, NULL, '2023-07-01 15:20:17', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2210, '反应器', '反应器', '/profile/avatar/fanyingqi (15).svg', NULL, NULL, NULL, '2023-07-01 15:20:17', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2211, '反应器', '反应器', '/profile/avatar/fanyingqi (20).svg', NULL, NULL, NULL, '2023-07-01 15:20:17', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2212, '反应器', '反应器', '/profile/avatar/fanyingqi (17).svg', NULL, NULL, NULL, '2023-07-01 15:20:17', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2213, '反应器', '反应器', '/profile/avatar/fanyingqi (16).svg', NULL, NULL, NULL, '2023-07-01 15:20:17', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2214, '反应器', '反应器', '/profile/avatar/fanyingqi (18).svg', NULL, NULL, NULL, '2023-07-01 15:20:17', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2215, '反应器', '反应器', '/profile/avatar/fanyingqi (19).svg', NULL, NULL, NULL, '2023-07-01 15:20:17', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2216, '反应器', '反应器', '/profile/avatar/fanyingqi (21).svg', NULL, NULL, NULL, '2023-07-01 15:20:18', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2217, '反应器', '反应器', '/profile/avatar/fanyingqi (22).svg', NULL, NULL, NULL, '2023-07-01 15:20:18', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2218, '反应器', '反应器', '/profile/avatar/fanyingqi (23).svg', NULL, NULL, NULL, '2023-07-01 15:20:18', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2219, '反应器', '反应器', '/profile/avatar/fanyingqi (24).svg', NULL, NULL, NULL, '2023-07-01 15:20:18', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2220, '反应器', '反应器', '/profile/avatar/fanyingqi (25).svg', NULL, NULL, NULL, '2023-07-01 15:20:18', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2221, '反应器', '反应器', '/profile/avatar/fanyingqi (26).svg', NULL, NULL, NULL, '2023-07-01 15:20:18', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2222, '反应器', '反应器', '/profile/avatar/fanyingqi (27).svg', NULL, NULL, NULL, '2023-07-01 15:20:18', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2223, '反应器', '反应器', '/profile/avatar/fanyingqi (29).svg', NULL, NULL, NULL, '2023-07-01 15:20:18', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2224, '反应器', '反应器', '/profile/avatar/fanyingqi (30).svg', NULL, NULL, NULL, '2023-07-01 15:20:18', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2225, '反应器', '反应器', '/profile/avatar/fanyingqi (28).svg', NULL, NULL, NULL, '2023-07-01 15:20:18', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2226, '反应器', '反应器', '/profile/avatar/fanyingqi (31).svg', NULL, NULL, NULL, '2023-07-01 15:20:18', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2227, '反应器', '反应器', '/profile/avatar/fanyingqi (33).svg', NULL, NULL, NULL, '2023-07-01 15:20:18', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2228, '反应器', '反应器', '/profile/avatar/fanyingqi (32).svg', NULL, NULL, NULL, '2023-07-01 15:20:19', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2229, '反应器', '反应器', '/profile/avatar/fanyingqi (34).svg', NULL, NULL, NULL, '2023-07-01 15:20:19', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2230, '反应器', '反应器', '/profile/avatar/fanyingqi (37).svg', NULL, NULL, NULL, '2023-07-01 15:20:19', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2231, '反应器', '反应器', '/profile/avatar/fanyingqi (36).svg', NULL, NULL, NULL, '2023-07-01 15:20:19', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2232, '反应器', '反应器', '/profile/avatar/fanyingqi (35).svg', NULL, NULL, NULL, '2023-07-01 15:20:19', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2233, '反应器', '反应器', '/profile/avatar/fanyingqi (39).svg', NULL, NULL, NULL, '2023-07-01 15:20:19', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2234, '反应器', '反应器', '/profile/avatar/fanyingqi (38).svg', NULL, NULL, NULL, '2023-07-01 15:20:19', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2235, '反应器', '反应器', '/profile/avatar/fanyingqi (40).svg', NULL, NULL, NULL, '2023-07-01 15:20:19', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2236, '反应器', '反应器', '/profile/avatar/fanyingqi (41).svg', NULL, NULL, NULL, '2023-07-01 15:20:19', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2237, '反应器', '反应器', '/profile/avatar/fanyingqi (42).svg', NULL, NULL, NULL, '2023-07-01 15:20:19', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2238, '反应器', '反应器', '/profile/avatar/fanyingqi (43).svg', NULL, NULL, NULL, '2023-07-01 15:20:19', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2239, '反应器', '反应器', '/profile/avatar/fanyingqi (46).svg', NULL, NULL, NULL, '2023-07-01 15:20:20', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2240, '反应器', '反应器', '/profile/avatar/fanyingqi (44).svg', NULL, NULL, NULL, '2023-07-01 15:20:20', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2241, '反应器', '反应器', '/profile/avatar/fanyingqi (45).svg', NULL, NULL, NULL, '2023-07-01 15:20:20', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2242, '反应器', '反应器', '/profile/avatar/fanyingqi (48).svg', NULL, NULL, NULL, '2023-07-01 15:20:20', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2243, '反应器', '反应器', '/profile/avatar/fanyingqi (49).svg', NULL, NULL, NULL, '2023-07-01 15:20:20', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2244, '反应器', '反应器', '/profile/avatar/fanyingqi (47).svg', NULL, NULL, NULL, '2023-07-01 15:20:20', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2245, '反应器', '反应器', '/profile/avatar/fanyingqi (50).svg', NULL, NULL, NULL, '2023-07-01 15:20:20', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2246, '反应器', '反应器', '/profile/avatar/fanyingqi (53).svg', NULL, NULL, NULL, '2023-07-01 15:20:20', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2247, '反应器', '反应器', '/profile/avatar/fanyingqi (51).svg', NULL, NULL, NULL, '2023-07-01 15:20:20', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2248, '反应器', '反应器', '/profile/avatar/fanyingqi (52).svg', NULL, NULL, NULL, '2023-07-01 15:20:20', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2249, '反应器', '反应器', '/profile/avatar/fanyingqi (56).svg', NULL, NULL, NULL, '2023-07-01 15:20:20', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2250, '反应器', '反应器', '/profile/avatar/fanyingqi (54).svg', NULL, NULL, NULL, '2023-07-01 15:20:20', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2251, '反应器', '反应器', '/profile/avatar/fanyingqi (55).svg', NULL, NULL, NULL, '2023-07-01 15:20:21', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2252, '反应器', '反应器', '/profile/avatar/fanyingqi (58).svg', NULL, NULL, NULL, '2023-07-01 15:20:21', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2253, '反应器', '反应器', '/profile/avatar/fanyingqi (57).svg', NULL, NULL, NULL, '2023-07-01 15:20:21', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2254, '反应器', '反应器', '/profile/avatar/fanyingqi (59).svg', NULL, NULL, NULL, '2023-07-01 15:20:21', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2255, '反应器', '反应器', '/profile/avatar/fanyingqi (64).svg', NULL, NULL, NULL, '2023-07-01 15:20:21', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2256, '反应器', '反应器', '/profile/avatar/fanyingqi (63).svg', NULL, NULL, NULL, '2023-07-01 15:20:21', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2257, '反应器', '反应器', '/profile/avatar/fanyingqi (61).svg', NULL, NULL, NULL, '2023-07-01 15:20:21', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2258, '反应器', '反应器', '/profile/avatar/fanyingqi (65).svg', NULL, NULL, NULL, '2023-07-01 15:20:21', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2259, '反应器', '反应器', '/profile/avatar/fanyingqi (66).svg', NULL, NULL, NULL, '2023-07-01 15:20:21', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2260, '反应器', '反应器', '/profile/avatar/fanyingqi (60).svg', NULL, NULL, NULL, '2023-07-01 15:20:21', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2261, '反应器', '反应器', '/profile/avatar/fanyingqi (62).svg', NULL, NULL, NULL, '2023-07-01 15:20:21', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2262, '反应器', '反应器', '/profile/avatar/fanyingqi (67).svg', NULL, NULL, NULL, '2023-07-01 15:20:21', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2263, '反应器', '反应器', '/profile/avatar/fanyingqi (69).svg', NULL, NULL, NULL, '2023-07-01 15:20:22', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2264, '反应器', '反应器', '/profile/avatar/fanyingqi (68).svg', NULL, NULL, NULL, '2023-07-01 15:20:22', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2265, '反应器', '反应器', '/profile/avatar/fanyingqi (70).svg', NULL, NULL, NULL, '2023-07-01 15:20:22', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2266, '反应器', '反应器', '/profile/avatar/fanyingqi (71).svg', NULL, NULL, NULL, '2023-07-01 15:20:22', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2267, '反应器', '反应器', '/profile/avatar/fanyingqi (72).svg', NULL, NULL, NULL, '2023-07-01 15:20:22', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2268, '反应器', '反应器', '/profile/avatar/fanyingqi (73).svg', NULL, NULL, NULL, '2023-07-01 15:20:22', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2269, '反应器', '反应器', '/profile/avatar/fanyingqi (75).svg', NULL, NULL, NULL, '2023-07-01 15:20:22', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2270, '反应器', '反应器', '/profile/avatar/fanyingqi (78).svg', NULL, NULL, NULL, '2023-07-01 15:20:22', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2271, '反应器', '反应器', '/profile/avatar/fanyingqi (77).svg', NULL, NULL, NULL, '2023-07-01 15:20:22', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2272, '反应器', '反应器', '/profile/avatar/fanyingqi (76).svg', NULL, NULL, NULL, '2023-07-01 15:20:22', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2273, '反应器', '反应器', '/profile/avatar/fanyingqi (79).svg', NULL, NULL, NULL, '2023-07-01 15:20:22', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2274, '反应器', '反应器', '/profile/avatar/fanyingqi (80).svg', NULL, NULL, NULL, '2023-07-01 15:20:22', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2275, '反应器', '反应器', '/profile/avatar/fanyingqi (74).svg', NULL, NULL, NULL, '2023-07-01 15:20:22', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2276, '反应器', '反应器', '/profile/avatar/fanyingqi (82).svg', NULL, NULL, NULL, '2023-07-01 15:20:22', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2277, '反应器', '反应器', '/profile/avatar/fanyingqi (81).svg', NULL, NULL, NULL, '2023-07-01 15:20:23', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2278, '反应器', '反应器', '/profile/avatar/fanyingqi (85).svg', NULL, NULL, NULL, '2023-07-01 15:20:23', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2279, '反应器', '反应器', '/profile/avatar/fanyingqi (83).svg', NULL, NULL, NULL, '2023-07-01 15:20:23', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2280, '反应器', '反应器', '/profile/avatar/fanyingqi (87).svg', NULL, NULL, NULL, '2023-07-01 15:20:23', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2281, '反应器', '反应器', '/profile/avatar/fanyingqi (84).svg', NULL, NULL, NULL, '2023-07-01 15:20:23', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2282, '反应器', '反应器', '/profile/avatar/fanyingqi (86).svg', NULL, NULL, NULL, '2023-07-01 15:20:23', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2283, '反应器', '反应器', '/profile/avatar/fanyingqi (89).svg', NULL, NULL, NULL, '2023-07-01 15:20:23', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2284, '反应器', '反应器', '/profile/avatar/fanyingqi (88).svg', NULL, NULL, NULL, '2023-07-01 15:20:23', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2285, '反应器', '反应器', '/profile/avatar/fanyingqi (90).svg', NULL, NULL, NULL, '2023-07-01 15:20:23', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2286, '反应器', '反应器', '/profile/avatar/fanyingqi (91).svg', NULL, NULL, NULL, '2023-07-01 15:20:23', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2287, '反应器', '反应器', '/profile/avatar/fanyingqi (93).svg', NULL, NULL, NULL, '2023-07-01 15:20:23', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2288, '反应器', '反应器', '/profile/avatar/fanyingqi (92).svg', NULL, NULL, NULL, '2023-07-01 15:20:23', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2289, '反应器', '反应器', '/profile/avatar/fanyingqi (94).svg', NULL, NULL, NULL, '2023-07-01 15:20:24', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2290, '反应器', '反应器', '/profile/avatar/fanyingqi (96).svg', NULL, NULL, NULL, '2023-07-01 15:20:24', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2291, '反应器', '反应器', '/profile/avatar/fanyingqi (95).svg', NULL, NULL, NULL, '2023-07-01 15:20:24', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2292, '风机', '风机', '/profile/avatar/fengji (1).svg', NULL, NULL, NULL, '2023-07-01 15:20:49', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2293, '风机', '风机', '/profile/avatar/fengji (4).svg', NULL, NULL, NULL, '2023-07-01 15:20:50', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2294, '风机', '风机', '/profile/avatar/fengji (2).svg', NULL, NULL, NULL, '2023-07-01 15:20:50', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2295, '风机', '风机', '/profile/avatar/fengji (5).svg', NULL, NULL, NULL, '2023-07-01 15:20:50', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2296, '风机', '风机', '/profile/avatar/fengji (6).svg', NULL, NULL, NULL, '2023-07-01 15:20:50', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2297, '风机', '风机', '/profile/avatar/fengji (3).svg', NULL, NULL, NULL, '2023-07-01 15:20:50', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2298, '风机', '风机', '/profile/avatar/fengji (8).svg', NULL, NULL, NULL, '2023-07-01 15:20:50', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2299, '风机', '风机', '/profile/avatar/fengji (7).svg', NULL, NULL, NULL, '2023-07-01 15:20:50', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2300, '风机', '风机', '/profile/avatar/fengji (9).svg', NULL, NULL, NULL, '2023-07-01 15:20:50', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2301, '风机', '风机', '/profile/avatar/fengji (10).svg', NULL, NULL, NULL, '2023-07-01 15:20:50', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2302, '风机', '风机', '/profile/avatar/fengji (12).svg', NULL, NULL, NULL, '2023-07-01 15:20:50', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2303, '风机', '风机', '/profile/avatar/fengji (11).svg', NULL, NULL, NULL, '2023-07-01 15:20:50', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2304, '风机', '风机', '/profile/avatar/fengji (13).svg', NULL, NULL, NULL, '2023-07-01 15:20:50', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2305, '风机', '风机', '/profile/avatar/fengji (14).svg', NULL, NULL, NULL, '2023-07-01 15:20:50', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2306, '风机', '风机', '/profile/avatar/fengji (15).svg', NULL, NULL, NULL, '2023-07-01 15:20:51', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2307, '风机', '风机', '/profile/avatar/fengji (16).svg', NULL, NULL, NULL, '2023-07-01 15:20:51', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2308, '风机', '风机', '/profile/avatar/fengji (18).svg', NULL, NULL, NULL, '2023-07-01 15:20:51', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2309, '风机', '风机', '/profile/avatar/fengji (17).svg', NULL, NULL, NULL, '2023-07-01 15:20:51', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2310, '风机', '风机', '/profile/avatar/fengji (19).svg', NULL, NULL, NULL, '2023-07-01 15:20:51', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2311, '风机', '风机', '/profile/avatar/fengji (20).svg', NULL, NULL, NULL, '2023-07-01 15:20:51', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2312, '风机', '风机', '/profile/avatar/fengji (21).svg', NULL, NULL, NULL, '2023-07-01 15:20:51', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2313, '风机', '风机', '/profile/avatar/fengji (23).svg', NULL, NULL, NULL, '2023-07-01 15:20:51', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2314, '风机', '风机', '/profile/avatar/fengji (22).svg', NULL, NULL, NULL, '2023-07-01 15:20:51', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2315, '风机', '风机', '/profile/avatar/fengji (25).svg', NULL, NULL, NULL, '2023-07-01 15:20:51', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2316, '风机', '风机', '/profile/avatar/fengji (24).svg', NULL, NULL, NULL, '2023-07-01 15:20:51', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2317, '风机', '风机', '/profile/avatar/fengji (26).svg', NULL, NULL, NULL, '2023-07-01 15:20:51', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2318, '风机', '风机', '/profile/avatar/fengji (27).svg', NULL, NULL, NULL, '2023-07-01 15:20:51', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2319, '风机', '风机', '/profile/avatar/fengji (28).svg', NULL, NULL, NULL, '2023-07-01 15:20:52', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2320, '风机', '风机', '/profile/avatar/fengji (30).svg', NULL, NULL, NULL, '2023-07-01 15:20:52', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2321, '风机', '风机', '/profile/avatar/fengji (29).svg', NULL, NULL, NULL, '2023-07-01 15:20:52', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2322, '风机', '风机', '/profile/avatar/fengji (32).svg', NULL, NULL, NULL, '2023-07-01 15:20:52', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2323, '风机', '风机', '/profile/avatar/fengji (31).svg', NULL, NULL, NULL, '2023-07-01 15:20:52', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2324, '风机', '风机', '/profile/avatar/fengji (33).svg', NULL, NULL, NULL, '2023-07-01 15:20:52', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2325, '锅炉', '锅炉', '/profile/avatar/guolu (4).svg', NULL, NULL, NULL, '2023-07-01 15:24:29', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2326, '锅炉', '锅炉', '/profile/avatar/guolu (6).svg', NULL, NULL, NULL, '2023-07-01 15:24:29', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2327, '锅炉', '锅炉', '/profile/avatar/guolu (3).svg', NULL, NULL, NULL, '2023-07-01 15:24:29', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2328, '锅炉', '锅炉', '/profile/avatar/guolu (1).svg', NULL, NULL, NULL, '2023-07-01 15:24:29', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2329, '锅炉', '锅炉', '/profile/avatar/guolu (5).svg', NULL, NULL, NULL, '2023-07-01 15:24:29', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2330, '锅炉', '锅炉', '/profile/avatar/guolu (2).svg', NULL, NULL, NULL, '2023-07-01 15:24:29', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2331, '锅炉', '锅炉', '/profile/avatar/guolu (7).svg', NULL, NULL, NULL, '2023-07-01 15:24:29', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2332, '锅炉', '锅炉', '/profile/avatar/guolu (8).svg', NULL, NULL, NULL, '2023-07-01 15:24:29', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2333, '锅炉', '锅炉', '/profile/avatar/guolu (10).svg', NULL, NULL, NULL, '2023-07-01 15:24:30', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2334, '锅炉', '锅炉', '/profile/avatar/guolu (11).svg', NULL, NULL, NULL, '2023-07-01 15:24:30', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2335, '锅炉', '锅炉', '/profile/avatar/guolu (9).svg', NULL, NULL, NULL, '2023-07-01 15:24:30', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2336, '锅炉', '锅炉', '/profile/avatar/guolu (12).svg', NULL, NULL, NULL, '2023-07-01 15:24:30', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2337, '锅炉', '锅炉', '/profile/avatar/guolu (13).svg', NULL, NULL, NULL, '2023-07-01 15:24:30', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2338, '锅炉', '锅炉', '/profile/avatar/guolu (14).svg', NULL, NULL, NULL, '2023-07-01 15:24:30', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2339, '锅炉', '锅炉', '/profile/avatar/guolu (16).svg', NULL, NULL, NULL, '2023-07-01 15:24:30', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2340, '锅炉', '锅炉', '/profile/avatar/guolu (18).svg', NULL, NULL, NULL, '2023-07-01 15:24:30', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2341, '锅炉', '锅炉', '/profile/avatar/guolu (19).svg', NULL, NULL, NULL, '2023-07-01 15:24:30', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2342, '锅炉', '锅炉', '/profile/avatar/guolu (15).svg', NULL, NULL, NULL, '2023-07-01 15:24:30', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2343, '锅炉', '锅炉', '/profile/avatar/guolu (17).svg', NULL, NULL, NULL, '2023-07-01 15:24:30', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2344, '锅炉', '锅炉', '/profile/avatar/guolu (20).svg', NULL, NULL, NULL, '2023-07-01 15:24:31', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2345, '锅炉', '锅炉', '/profile/avatar/guolu (21).svg', NULL, NULL, NULL, '2023-07-01 15:24:31', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2346, '锅炉', '锅炉', '/profile/avatar/guolu (23).svg', NULL, NULL, NULL, '2023-07-01 15:24:31', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2347, '锅炉', '锅炉', '/profile/avatar/guolu (22).svg', NULL, NULL, NULL, '2023-07-01 15:24:31', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2348, '锅炉', '锅炉', '/profile/avatar/guolu (24).svg', NULL, NULL, NULL, '2023-07-01 15:24:31', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2349, '锅炉', '锅炉', '/profile/avatar/guolu (25).svg', NULL, NULL, NULL, '2023-07-01 15:24:31', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2350, '锅炉', '锅炉', '/profile/avatar/guolu (26).svg', NULL, NULL, NULL, '2023-07-01 15:24:31', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2351, '锅炉', '锅炉', '/profile/avatar/guolu (28).svg', NULL, NULL, NULL, '2023-07-01 15:24:31', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2352, '锅炉', '锅炉', '/profile/avatar/guolu (27).svg', NULL, NULL, NULL, '2023-07-01 15:24:31', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2353, '锅炉', '锅炉', '/profile/avatar/guolu (29).svg', NULL, NULL, NULL, '2023-07-01 15:24:31', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2354, '锅炉', '锅炉', '/profile/avatar/guolu (30).svg', NULL, NULL, NULL, '2023-07-01 15:24:31', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2355, '锅炉', '锅炉', '/profile/avatar/guolu (32).svg', NULL, NULL, NULL, '2023-07-01 15:24:31', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2356, '锅炉', '锅炉', '/profile/avatar/guolu (31).svg', NULL, NULL, NULL, '2023-07-01 15:24:31', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2357, '锅炉', '锅炉', '/profile/avatar/guolu (34).svg', NULL, NULL, NULL, '2023-07-01 15:24:31', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2358, '锅炉', '锅炉', '/profile/avatar/guolu (35).svg', NULL, NULL, NULL, '2023-07-01 15:24:32', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2359, '锅炉', '锅炉', '/profile/avatar/guolu (33).svg', NULL, NULL, NULL, '2023-07-01 15:24:32', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2360, '锅炉', '锅炉', '/profile/avatar/guolu (36).svg', NULL, NULL, NULL, '2023-07-01 15:24:32', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2361, '锅炉', '锅炉', '/profile/avatar/guolu (38).svg', NULL, NULL, NULL, '2023-07-01 15:24:32', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2362, '锅炉', '锅炉', '/profile/avatar/guolu (39).svg', NULL, NULL, NULL, '2023-07-01 15:24:32', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2363, '锅炉', '锅炉', '/profile/avatar/guolu (40).svg', NULL, NULL, NULL, '2023-07-01 15:24:32', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2364, '锅炉', '锅炉', '/profile/avatar/guolu (37).svg', NULL, NULL, NULL, '2023-07-01 15:24:32', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2365, '锅炉', '锅炉', '/profile/avatar/guolu (41).svg', NULL, NULL, NULL, '2023-07-01 15:24:32', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2366, '778.png', '换热站', '/profile/avatar/778.png', NULL, NULL, NULL, '2023-07-01 15:25:38', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2367, '780.png', '换热站', '/profile/avatar/780.png', NULL, NULL, NULL, '2023-07-01 15:25:38', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2368, '782.png', '换热站', '/profile/avatar/782.png', NULL, NULL, NULL, '2023-07-01 15:25:38', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2369, '781.png', '换热站', '/profile/avatar/781.png', NULL, NULL, NULL, '2023-07-01 15:25:38', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2370, '779.png', '换热站', '/profile/avatar/779.png', NULL, NULL, NULL, '2023-07-01 15:25:38', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2371, '783.png', '换热站', '/profile/avatar/783.png', NULL, NULL, NULL, '2023-07-01 15:25:38', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2372, '784.png', '换热站', '/profile/avatar/784.png', NULL, NULL, NULL, '2023-07-01 15:25:38', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2373, '786.png', '换热站', '/profile/avatar/786.png', NULL, NULL, NULL, '2023-07-01 15:25:39', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2374, '785.png', '换热站', '/profile/avatar/785.png', NULL, NULL, NULL, '2023-07-01 15:25:39', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2375, '801.png', '换热站', '/profile/avatar/801.png', NULL, NULL, NULL, '2023-07-01 15:25:39', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2376, '800.gif', '换热站', '/profile/avatar/800.gif', NULL, NULL, NULL, '2023-07-01 15:25:39', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2377, '787.png', '换热站', '/profile/avatar/787.png', NULL, NULL, NULL, '2023-07-01 15:25:39', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2378, '788.gif', '换热站', '/profile/avatar/788.gif', NULL, NULL, NULL, '2023-07-01 15:25:39', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2379, '机械设备', '机械设备', '/profile/avatar/机械设备 (1).svg', NULL, NULL, NULL, '2023-07-01 15:26:48', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2380, '机械设备', '机械设备', '/profile/avatar/机械设备 (5).svg', NULL, NULL, NULL, '2023-07-01 15:26:49', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2381, '机械设备', '机械设备', '/profile/avatar/机械设备 (2).svg', NULL, NULL, NULL, '2023-07-01 15:26:49', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2382, '机械设备', '机械设备', '/profile/avatar/机械设备 (4).svg', NULL, NULL, NULL, '2023-07-01 15:26:49', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2383, '机械设备', '机械设备', '/profile/avatar/机械设备 (3).svg', NULL, NULL, NULL, '2023-07-01 15:26:49', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2384, '机械设备', '机械设备', '/profile/avatar/机械设备 (6).svg', NULL, NULL, NULL, '2023-07-01 15:26:49', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2385, '机械设备', '机械设备', '/profile/avatar/机械设备 (7).svg', NULL, NULL, NULL, '2023-07-01 15:26:49', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2386, '机械设备', '机械设备', '/profile/avatar/机械设备 (8).svg', NULL, NULL, NULL, '2023-07-01 15:26:49', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2387, '机械设备', '机械设备', '/profile/avatar/机械设备 (9).svg', NULL, NULL, NULL, '2023-07-01 15:26:49', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2388, '机械设备', '机械设备', '/profile/avatar/机械设备 (10).svg', NULL, NULL, NULL, '2023-07-01 15:26:49', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2389, '机械设备', '机械设备', '/profile/avatar/机械设备 (12).svg', NULL, NULL, NULL, '2023-07-01 15:26:49', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2390, '机械设备', '机械设备', '/profile/avatar/机械设备 (11).svg', NULL, NULL, NULL, '2023-07-01 15:26:49', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2391, '机械设备', '机械设备', '/profile/avatar/机械设备 (13).svg', NULL, NULL, NULL, '2023-07-01 15:26:49', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2392, '机械设备', '机械设备', '/profile/avatar/机械设备 (14).svg', NULL, NULL, NULL, '2023-07-01 15:26:50', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2393, '机械设备', '机械设备', '/profile/avatar/机械设备 (15).svg', NULL, NULL, NULL, '2023-07-01 15:26:50', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2394, '机械设备', '机械设备', '/profile/avatar/机械设备 (16).svg', NULL, NULL, NULL, '2023-07-01 15:26:50', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2395, '机械设备', '机械设备', '/profile/avatar/机械设备 (17).svg', NULL, NULL, NULL, '2023-07-01 15:26:50', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2396, '机械设备', '机械设备', '/profile/avatar/机械设备 (18).svg', NULL, NULL, NULL, '2023-07-01 15:26:50', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2397, '机械设备', '机械设备', '/profile/avatar/机械设备 (20).svg', NULL, NULL, NULL, '2023-07-01 15:26:50', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2398, '机械设备', '机械设备', '/profile/avatar/机械设备 (19).svg', NULL, NULL, NULL, '2023-07-01 15:26:50', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2399, '机械设备', '机械设备', '/profile/avatar/机械设备 (22).svg', NULL, NULL, NULL, '2023-07-01 15:26:50', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2400, '机械设备', '机械设备', '/profile/avatar/机械设备 (21).svg', NULL, NULL, NULL, '2023-07-01 15:26:50', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2401, '机械设备', '机械设备', '/profile/avatar/机械设备 (24).svg', NULL, NULL, NULL, '2023-07-01 15:26:50', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2402, '机械设备', '机械设备', '/profile/avatar/机械设备 (26).svg', NULL, NULL, NULL, '2023-07-01 15:26:50', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2403, '机械设备', '机械设备', '/profile/avatar/机械设备 (23).svg', NULL, NULL, NULL, '2023-07-01 15:26:50', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2404, '机械设备', '机械设备', '/profile/avatar/机械设备 (25).svg', NULL, NULL, NULL, '2023-07-01 15:26:51', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2405, '机械设备', '机械设备', '/profile/avatar/机械设备 (27).svg', NULL, NULL, NULL, '2023-07-01 15:26:51', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2406, '机械设备', '机械设备', '/profile/avatar/机械设备 (28).svg', NULL, NULL, NULL, '2023-07-01 15:26:51', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2407, '机械设备', '机械设备', '/profile/avatar/机械设备 (31).svg', NULL, NULL, NULL, '2023-07-01 15:26:51', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2408, '机械设备', '机械设备', '/profile/avatar/机械设备 (30).svg', NULL, NULL, NULL, '2023-07-01 15:26:51', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2409, '机械设备', '机械设备', '/profile/avatar/机械设备 (29).svg', NULL, NULL, NULL, '2023-07-01 15:26:51', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2410, '机械设备', '机械设备', '/profile/avatar/机械设备 (32).svg', NULL, NULL, NULL, '2023-07-01 15:26:51', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2411, '机械设备', '机械设备', '/profile/avatar/机械设备 (34).svg', NULL, NULL, NULL, '2023-07-01 15:26:51', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2412, '机械设备', '机械设备', '/profile/avatar/机械设备 (33).svg', NULL, NULL, NULL, '2023-07-01 15:26:51', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2413, '机械设备', '机械设备', '/profile/avatar/机械设备 (35).svg', NULL, NULL, NULL, '2023-07-01 15:26:51', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2414, '机械设备', '机械设备', '/profile/avatar/机械设备 (36).svg', NULL, NULL, NULL, '2023-07-01 15:26:51', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2415, '机械设备', '机械设备', '/profile/avatar/机械设备 (37).svg', NULL, NULL, NULL, '2023-07-01 15:26:51', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2416, '机械设备', '机械设备', '/profile/avatar/机械设备 (38).svg', NULL, NULL, NULL, '2023-07-01 15:26:51', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2417, '机械设备', '机械设备', '/profile/avatar/机械设备 (40).svg', NULL, NULL, NULL, '2023-07-01 15:26:51', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2418, '机械设备', '机械设备', '/profile/avatar/机械设备 (39).svg', NULL, NULL, NULL, '2023-07-01 15:26:52', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2419, '机械设备', '机械设备', '/profile/avatar/机械设备 (41).svg', NULL, NULL, NULL, '2023-07-01 15:26:52', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2420, '机械设备', '机械设备', '/profile/avatar/机械设备 (43).svg', NULL, NULL, NULL, '2023-07-01 15:26:52', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2421, '机械设备', '机械设备', '/profile/avatar/机械设备 (42).svg', NULL, NULL, NULL, '2023-07-01 15:26:52', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2422, '机械设备', '机械设备', '/profile/avatar/机械设备 (46).svg', NULL, NULL, NULL, '2023-07-01 15:26:52', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2423, '机械设备', '机械设备', '/profile/avatar/机械设备 (44).svg', NULL, NULL, NULL, '2023-07-01 15:26:52', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2424, '机械设备', '机械设备', '/profile/avatar/机械设备 (45).svg', NULL, NULL, NULL, '2023-07-01 15:26:52', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2425, '机械设备', '机械设备', '/profile/avatar/机械设备 (48).svg', NULL, NULL, NULL, '2023-07-01 15:26:52', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2426, '机械设备', '机械设备', '/profile/avatar/机械设备 (50).svg', NULL, NULL, NULL, '2023-07-01 15:26:52', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2427, '机械设备', '机械设备', '/profile/avatar/机械设备 (49).svg', NULL, NULL, NULL, '2023-07-01 15:26:52', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2428, '机械设备', '机械设备', '/profile/avatar/机械设备 (47).svg', NULL, NULL, NULL, '2023-07-01 15:26:52', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2429, '机械设备', '机械设备', '/profile/avatar/机械设备 (51).svg', NULL, NULL, NULL, '2023-07-01 15:26:52', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2430, '机械设备', '机械设备', '/profile/avatar/机械设备 (54).svg', NULL, NULL, NULL, '2023-07-01 15:26:52', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2431, '机械设备', '机械设备', '/profile/avatar/机械设备 (52).svg', NULL, NULL, NULL, '2023-07-01 15:26:53', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2432, '机械设备', '机械设备', '/profile/avatar/机械设备 (53).svg', NULL, NULL, NULL, '2023-07-01 15:26:53', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2433, '机械设备', '机械设备', '/profile/avatar/机械设备 (55).svg', NULL, NULL, NULL, '2023-07-01 15:26:53', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2434, '机械设备', '机械设备', '/profile/avatar/机械设备 (56).svg', NULL, NULL, NULL, '2023-07-01 15:26:53', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2435, '机械设备', '机械设备', '/profile/avatar/机械设备 (57).svg', NULL, NULL, NULL, '2023-07-01 15:26:53', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2436, '机械设备', '机械设备', '/profile/avatar/机械设备 (58).svg', NULL, NULL, NULL, '2023-07-01 15:26:53', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2437, '机械设备', '机械设备', '/profile/avatar/机械设备 (59).svg', NULL, NULL, NULL, '2023-07-01 15:26:53', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2438, '机械设备', '机械设备', '/profile/avatar/机械设备 (61).svg', NULL, NULL, NULL, '2023-07-01 15:26:53', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2439, '机械设备', '机械设备', '/profile/avatar/机械设备 (63).svg', NULL, NULL, NULL, '2023-07-01 15:26:53', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2440, '机械设备', '机械设备', '/profile/avatar/机械设备 (60).svg', NULL, NULL, NULL, '2023-07-01 15:26:53', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2441, '机械设备', '机械设备', '/profile/avatar/机械设备 (62).svg', NULL, NULL, NULL, '2023-07-01 15:26:53', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2442, '机械设备', '机械设备', '/profile/avatar/机械设备 (65).svg', NULL, NULL, NULL, '2023-07-01 15:26:53', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2443, '机械设备', '机械设备', '/profile/avatar/机械设备 (64).svg', NULL, NULL, NULL, '2023-07-01 15:26:53', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2444, '机械设备', '机械设备', '/profile/avatar/机械设备 (66).svg', NULL, NULL, NULL, '2023-07-01 15:26:53', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2445, '机械设备', '机械设备', '/profile/avatar/机械设备 (70).svg', NULL, NULL, NULL, '2023-07-01 15:26:54', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2446, '机械设备', '机械设备', '/profile/avatar/机械设备 (68).svg', NULL, NULL, NULL, '2023-07-01 15:26:54', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2447, '机械设备', '机械设备', '/profile/avatar/机械设备 (67).svg', NULL, NULL, NULL, '2023-07-01 15:26:54', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2448, '机械设备', '机械设备', '/profile/avatar/机械设备 (71).svg', NULL, NULL, NULL, '2023-07-01 15:26:54', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2449, '机械设备', '机械设备', '/profile/avatar/机械设备 (69).svg', NULL, NULL, NULL, '2023-07-01 15:26:54', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2450, '机械设备', '机械设备', '/profile/avatar/机械设备 (73).svg', NULL, NULL, NULL, '2023-07-01 15:26:54', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2451, '机械设备', '机械设备', '/profile/avatar/机械设备 (76).svg', NULL, NULL, NULL, '2023-07-01 15:26:54', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2452, '机械设备', '机械设备', '/profile/avatar/机械设备 (72).svg', NULL, NULL, NULL, '2023-07-01 15:26:54', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2453, '机械设备', '机械设备', '/profile/avatar/机械设备 (74).svg', NULL, NULL, NULL, '2023-07-01 15:26:54', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2454, '机械设备', '机械设备', '/profile/avatar/机械设备 (75).svg', NULL, NULL, NULL, '2023-07-01 15:26:54', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2455, '机械设备', '机械设备', '/profile/avatar/机械设备 (77).svg', NULL, NULL, NULL, '2023-07-01 15:26:54', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2456, '机械设备', '机械设备', '/profile/avatar/机械设备 (79).svg', NULL, NULL, NULL, '2023-07-01 15:26:54', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2457, '机械设备', '机械设备', '/profile/avatar/机械设备 (81).svg', NULL, NULL, NULL, '2023-07-01 15:26:54', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2458, '机械设备', '机械设备', '/profile/avatar/机械设备 (78).svg', NULL, NULL, NULL, '2023-07-01 15:26:54', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2459, '机械设备', '机械设备', '/profile/avatar/机械设备 (80).svg', NULL, NULL, NULL, '2023-07-01 15:26:54', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2460, '机械设备', '机械设备', '/profile/avatar/机械设备 (82).svg', NULL, NULL, NULL, '2023-07-01 15:26:54', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2461, '机械设备', '机械设备', '/profile/avatar/机械设备 (83).svg', NULL, NULL, NULL, '2023-07-01 15:26:55', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2462, '机械设备', '机械设备', '/profile/avatar/机械设备 (84).svg', NULL, NULL, NULL, '2023-07-01 15:26:55', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2463, '机械设备', '机械设备', '/profile/avatar/机械设备 (85).svg', NULL, NULL, NULL, '2023-07-01 15:26:55', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2464, '机械设备', '机械设备', '/profile/avatar/机械设备 (87).svg', NULL, NULL, NULL, '2023-07-01 15:26:55', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2465, '机械设备', '机械设备', '/profile/avatar/机械设备 (86).svg', NULL, NULL, NULL, '2023-07-01 15:26:55', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2466, '机械设备', '机械设备', '/profile/avatar/机械设备 (88).svg', NULL, NULL, NULL, '2023-07-01 15:26:55', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2467, '机械设备', '机械设备', '/profile/avatar/机械设备 (89).svg', NULL, NULL, NULL, '2023-07-01 15:26:55', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2468, '机械设备', '机械设备', '/profile/avatar/机械设备 (90).svg', NULL, NULL, NULL, '2023-07-01 15:26:55', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2469, '机械设备', '机械设备', '/profile/avatar/机械设备 (91).svg', NULL, NULL, NULL, '2023-07-01 15:26:55', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2470, '机械设备', '机械设备', '/profile/avatar/机械设备 (92).svg', NULL, NULL, NULL, '2023-07-01 15:26:55', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2471, '机械设备', '机械设备', '/profile/avatar/机械设备 (93).svg', NULL, NULL, NULL, '2023-07-01 15:26:55', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2472, '机械设备', '机械设备', '/profile/avatar/机械设备 (94).svg', NULL, NULL, NULL, '2023-07-01 15:26:55', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2473, '机械设备', '机械设备', '/profile/avatar/机械设备 (95).svg', NULL, NULL, NULL, '2023-07-01 15:26:56', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2474, '机械设备', '机械设备', '/profile/avatar/机械设备 (97).svg', NULL, NULL, NULL, '2023-07-01 15:26:56', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2475, '机械设备', '机械设备', '/profile/avatar/机械设备 (98).svg', NULL, NULL, NULL, '2023-07-01 15:26:56', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2476, '机械设备', '机械设备', '/profile/avatar/机械设备 (96).svg', NULL, NULL, NULL, '2023-07-01 15:26:56', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2477, '机械设备', '机械设备', '/profile/avatar/机械设备 (100).svg', NULL, NULL, NULL, '2023-07-01 15:26:56', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2478, '机械设备', '机械设备', '/profile/avatar/机械设备 (99).svg', NULL, NULL, NULL, '2023-07-01 15:26:56', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2479, '机械设备', '机械设备', '/profile/avatar/机械设备 (101).svg', NULL, NULL, NULL, '2023-07-01 15:26:56', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2480, '机械设备', '机械设备', '/profile/avatar/机械设备 (102).svg', NULL, NULL, NULL, '2023-07-01 15:26:56', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2481, '机械设备', '机械设备', '/profile/avatar/机械设备 (103).svg', NULL, NULL, NULL, '2023-07-01 15:26:56', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2482, '机械设备', '机械设备', '/profile/avatar/机械设备 (105).svg', NULL, NULL, NULL, '2023-07-01 15:26:56', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2483, '机械设备', '机械设备', '/profile/avatar/机械设备 (106).svg', NULL, NULL, NULL, '2023-07-01 15:26:56', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2484, '机械设备', '机械设备', '/profile/avatar/机械设备 (104).svg', NULL, NULL, NULL, '2023-07-01 15:26:56', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2485, '机械设备', '机械设备', '/profile/avatar/机械设备 (107).svg', NULL, NULL, NULL, '2023-07-01 15:26:57', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2486, '机械设备', '机械设备', '/profile/avatar/机械设备 (108).svg', NULL, NULL, NULL, '2023-07-01 15:26:57', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2487, '机械设备', '机械设备', '/profile/avatar/机械设备 (109).svg', NULL, NULL, NULL, '2023-07-01 15:26:57', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2488, '机械设备', '机械设备', '/profile/avatar/机械设备 (111).svg', NULL, NULL, NULL, '2023-07-01 15:26:57', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2489, '机械设备', '机械设备', '/profile/avatar/机械设备 (110).svg', NULL, NULL, NULL, '2023-07-01 15:26:57', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2490, '机械设备', '机械设备', '/profile/avatar/机械设备 (112).svg', NULL, NULL, NULL, '2023-07-01 15:26:57', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2491, '机械设备', '机械设备', '/profile/avatar/机械设备 (113).svg', NULL, NULL, NULL, '2023-07-01 15:26:57', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2492, '机械设备', '机械设备', '/profile/avatar/机械设备 (114).svg', NULL, NULL, NULL, '2023-07-01 15:26:57', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2493, '机械设备', '机械设备', '/profile/avatar/机械设备 (115).svg', NULL, NULL, NULL, '2023-07-01 15:26:57', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2494, '机械设备', '机械设备', '/profile/avatar/机械设备 (117).svg', NULL, NULL, NULL, '2023-07-01 15:26:57', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2495, '机械设备', '机械设备', '/profile/avatar/机械设备 (119).svg', NULL, NULL, NULL, '2023-07-01 15:26:57', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2496, '机械设备', '机械设备', '/profile/avatar/机械设备 (116).svg', NULL, NULL, NULL, '2023-07-01 15:26:57', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2497, '机械设备', '机械设备', '/profile/avatar/机械设备 (118).svg', NULL, NULL, NULL, '2023-07-01 15:26:57', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2498, '机械设备', '机械设备', '/profile/avatar/机械设备 (120).svg', NULL, NULL, NULL, '2023-07-01 15:26:57', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2499, '机械设备', '机械设备', '/profile/avatar/机械设备 (121).svg', NULL, NULL, NULL, '2023-07-01 15:26:58', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2500, '机械设备', '机械设备', '/profile/avatar/机械设备 (122).svg', NULL, NULL, NULL, '2023-07-01 15:26:58', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2501, '机械设备', '机械设备', '/profile/avatar/机械设备 (123).svg', NULL, NULL, NULL, '2023-07-01 15:26:58', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2502, '机械设备', '机械设备', '/profile/avatar/机械设备 (124).svg', NULL, NULL, NULL, '2023-07-01 15:26:58', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2503, '机械设备', '机械设备', '/profile/avatar/机械设备 (125).svg', NULL, NULL, NULL, '2023-07-01 15:26:58', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2504, '机械设备', '机械设备', '/profile/avatar/机械设备 (126).svg', NULL, NULL, NULL, '2023-07-01 15:26:58', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2505, '机械设备', '机械设备', '/profile/avatar/机械设备 (127).svg', NULL, NULL, NULL, '2023-07-01 15:26:58', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2506, '机械设备', '机械设备', '/profile/avatar/机械设备 (128).svg', NULL, NULL, NULL, '2023-07-01 15:26:58', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2507, '机械设备', '机械设备', '/profile/avatar/机械设备 (130).svg', NULL, NULL, NULL, '2023-07-01 15:26:58', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2508, '机械设备', '机械设备', '/profile/avatar/机械设备 (129).svg', NULL, NULL, NULL, '2023-07-01 15:26:58', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2509, '机械设备', '机械设备', '/profile/avatar/机械设备 (131).svg', NULL, NULL, NULL, '2023-07-01 15:26:58', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2510, '机械设备', '机械设备', '/profile/avatar/机械设备 (132).svg', NULL, NULL, NULL, '2023-07-01 15:26:58', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2511, '机械设备', '机械设备', '/profile/avatar/机械设备 (133).svg', NULL, NULL, NULL, '2023-07-01 15:26:58', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2512, '机械设备', '机械设备', '/profile/avatar/机械设备 (134).svg', NULL, NULL, NULL, '2023-07-01 15:26:59', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2513, '机械设备', '机械设备', '/profile/avatar/机械设备 (135).svg', NULL, NULL, NULL, '2023-07-01 15:26:59', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2514, '机械设备', '机械设备', '/profile/avatar/机械设备 (136).svg', NULL, NULL, NULL, '2023-07-01 15:26:59', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2515, '机械设备', '机械设备', '/profile/avatar/机械设备 (137).svg', NULL, NULL, NULL, '2023-07-01 15:26:59', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2516, '机械设备', '机械设备', '/profile/avatar/机械设备 (138).svg', NULL, NULL, NULL, '2023-07-01 15:26:59', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2517, '机械设备', '机械设备', '/profile/avatar/机械设备 (139).svg', NULL, NULL, NULL, '2023-07-01 15:26:59', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2518, '机械设备', '机械设备', '/profile/avatar/机械设备 (142).svg', NULL, NULL, NULL, '2023-07-01 15:26:59', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2519, '机械设备', '机械设备', '/profile/avatar/机械设备 (141).svg', NULL, NULL, NULL, '2023-07-01 15:26:59', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2520, '机械设备', '机械设备', '/profile/avatar/机械设备 (140).svg', NULL, NULL, NULL, '2023-07-01 15:26:59', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2521, '机械设备', '机械设备', '/profile/avatar/机械设备 (143).svg', NULL, NULL, NULL, '2023-07-01 15:26:59', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2522, '机械设备', '机械设备', '/profile/avatar/机械设备 (144).svg', NULL, NULL, NULL, '2023-07-01 15:26:59', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2523, '机械设备', '机械设备', '/profile/avatar/机械设备 (145).svg', NULL, NULL, NULL, '2023-07-01 15:26:59', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2524, '机械设备', '机械设备', '/profile/avatar/机械设备 (146).svg', NULL, NULL, NULL, '2023-07-01 15:26:59', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2525, '机械设备', '机械设备', '/profile/avatar/机械设备 (148).svg', NULL, NULL, NULL, '2023-07-01 15:27:00', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2526, '机械设备', '机械设备', '/profile/avatar/机械设备 (147).svg', NULL, NULL, NULL, '2023-07-01 15:27:00', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2527, '机械设备', '机械设备', '/profile/avatar/机械设备 (149).svg', NULL, NULL, NULL, '2023-07-01 15:27:00', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2528, '机械设备', '机械设备', '/profile/avatar/机械设备 (150).svg', NULL, NULL, NULL, '2023-07-01 15:27:00', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2529, '机械设备', '机械设备', '/profile/avatar/机械设备 (152).svg', NULL, NULL, NULL, '2023-07-01 15:27:00', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2530, '机械设备', '机械设备', '/profile/avatar/机械设备 (151).svg', NULL, NULL, NULL, '2023-07-01 15:27:00', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2531, '机械设备', '机械设备', '/profile/avatar/机械设备 (154).svg', NULL, NULL, NULL, '2023-07-01 15:27:00', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2532, '机械设备', '机械设备', '/profile/avatar/机械设备 (153).svg', NULL, NULL, NULL, '2023-07-01 15:27:00', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2533, '机械设备', '机械设备', '/profile/avatar/机械设备 (155).svg', NULL, NULL, NULL, '2023-07-01 15:27:00', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2534, '机械设备', '机械设备', '/profile/avatar/机械设备 (157).svg', NULL, NULL, NULL, '2023-07-01 15:27:00', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2535, '机械设备', '机械设备', '/profile/avatar/机械设备 (156).svg', NULL, NULL, NULL, '2023-07-01 15:27:00', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2536, '机械设备', '机械设备', '/profile/avatar/机械设备 (158).svg', NULL, NULL, NULL, '2023-07-01 15:27:01', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2537, '机械设备', '机械设备', '/profile/avatar/机械设备 (160).svg', NULL, NULL, NULL, '2023-07-01 15:27:01', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2538, '机械设备', '机械设备', '/profile/avatar/机械设备 (159).svg', NULL, NULL, NULL, '2023-07-01 15:27:01', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2539, '机械设备', '机械设备', '/profile/avatar/机械设备 (163).svg', NULL, NULL, NULL, '2023-07-01 15:27:01', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2540, '机械设备', '机械设备', '/profile/avatar/机械设备 (162).svg', NULL, NULL, NULL, '2023-07-01 15:27:01', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2541, '机械设备', '机械设备', '/profile/avatar/机械设备 (161).svg', NULL, NULL, NULL, '2023-07-01 15:27:01', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2542, '机械设备', '机械设备', '/profile/avatar/机械设备 (165).svg', NULL, NULL, NULL, '2023-07-01 15:27:01', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2543, '机械设备', '机械设备', '/profile/avatar/机械设备 (164).svg', NULL, NULL, NULL, '2023-07-01 15:27:01', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2544, '机械设备', '机械设备', '/profile/avatar/机械设备 (168).svg', NULL, NULL, NULL, '2023-07-01 15:27:01', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2545, '机械设备', '机械设备', '/profile/avatar/机械设备 (167).svg', NULL, NULL, NULL, '2023-07-01 15:27:01', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2546, '机械设备', '机械设备', '/profile/avatar/机械设备 (166).svg', NULL, NULL, NULL, '2023-07-01 15:27:01', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2547, '机械设备', '机械设备', '/profile/avatar/机械设备 (169).svg', NULL, NULL, NULL, '2023-07-01 15:27:01', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2548, '机械设备', '机械设备', '/profile/avatar/机械设备 (172).svg', NULL, NULL, NULL, '2023-07-01 15:27:01', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2549, '机械设备', '机械设备', '/profile/avatar/机械设备 (170).svg', NULL, NULL, NULL, '2023-07-01 15:27:01', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2550, '机械设备', '机械设备', '/profile/avatar/机械设备 (171).svg', NULL, NULL, NULL, '2023-07-01 15:27:01', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2551, '机械设备', '机械设备', '/profile/avatar/机械设备 (173).svg', NULL, NULL, NULL, '2023-07-01 15:27:02', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2552, '机械设备', '机械设备', '/profile/avatar/机械设备 (174).svg', NULL, NULL, NULL, '2023-07-01 15:27:02', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2553, '机械设备', '机械设备', '/profile/avatar/机械设备 (175).svg', NULL, NULL, NULL, '2023-07-01 15:27:02', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2554, '机械设备', '机械设备', '/profile/avatar/机械设备 (176).svg', NULL, NULL, NULL, '2023-07-01 15:27:02', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2555, '机械设备', '机械设备', '/profile/avatar/机械设备 (177).svg', NULL, NULL, NULL, '2023-07-01 15:27:02', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2556, '机械设备', '机械设备', '/profile/avatar/机械设备 (178).svg', NULL, NULL, NULL, '2023-07-01 15:27:02', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2557, '机械设备', '机械设备', '/profile/avatar/机械设备 (179).svg', NULL, NULL, NULL, '2023-07-01 15:27:02', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2558, '机械设备', '机械设备', '/profile/avatar/机械设备 (180).svg', NULL, NULL, NULL, '2023-07-01 15:27:02', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2559, '机械设备', '机械设备', '/profile/avatar/机械设备 (181).svg', NULL, NULL, NULL, '2023-07-01 15:27:02', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2560, '机械设备', '机械设备', '/profile/avatar/机械设备 (182).svg', NULL, NULL, NULL, '2023-07-01 15:27:02', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2561, '机械设备', '机械设备', '/profile/avatar/机械设备 (183).svg', NULL, NULL, NULL, '2023-07-01 15:27:02', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2562, '机械设备', '机械设备', '/profile/avatar/机械设备 (185).svg', NULL, NULL, NULL, '2023-07-01 15:27:03', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2563, '机械设备', '机械设备', '/profile/avatar/机械设备 (184).svg', NULL, NULL, NULL, '2023-07-01 15:27:03', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2564, '机械设备', '机械设备', '/profile/avatar/机械设备 (186).svg', NULL, NULL, NULL, '2023-07-01 15:27:03', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2565, '机械设备', '机械设备', '/profile/avatar/机械设备 (187).svg', NULL, NULL, NULL, '2023-07-01 15:27:03', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2566, '机械设备', '机械设备', '/profile/avatar/机械设备 (188).svg', NULL, NULL, NULL, '2023-07-01 15:27:03', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2567, '机械设备', '机械设备', '/profile/avatar/机械设备 (189).svg', NULL, NULL, NULL, '2023-07-01 15:27:03', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2568, '机械设备', '机械设备', '/profile/avatar/机械设备 (190).svg', NULL, NULL, NULL, '2023-07-01 15:27:03', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2569, '机械设备', '机械设备', '/profile/avatar/机械设备 (191).svg', NULL, NULL, NULL, '2023-07-01 15:27:03', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2570, '机械设备', '机械设备', '/profile/avatar/机械设备 (193).svg', NULL, NULL, NULL, '2023-07-01 15:27:03', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2571, '机械设备', '机械设备', '/profile/avatar/机械设备 (194).svg', NULL, NULL, NULL, '2023-07-01 15:27:03', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2572, '机械设备', '机械设备', '/profile/avatar/机械设备 (192).svg', NULL, NULL, NULL, '2023-07-01 15:27:03', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2573, '机械设备', '机械设备', '/profile/avatar/机械设备 (196).svg', NULL, NULL, NULL, '2023-07-01 15:27:03', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2574, '机械设备', '机械设备', '/profile/avatar/机械设备 (195).svg', NULL, NULL, NULL, '2023-07-01 15:27:03', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2575, '机械设备', '机械设备', '/profile/avatar/机械设备 (197).svg', NULL, NULL, NULL, '2023-07-01 15:27:03', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2576, '机械设备', '机械设备', '/profile/avatar/机械设备 (198).svg', NULL, NULL, NULL, '2023-07-01 15:27:04', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2577, '机械设备', '机械设备', '/profile/avatar/机械设备 (199).svg', NULL, NULL, NULL, '2023-07-01 15:27:04', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2578, '机械设备', '机械设备', '/profile/avatar/机械设备 (200).svg', NULL, NULL, NULL, '2023-07-01 15:27:04', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2579, '机械设备', '机械设备', '/profile/avatar/机械设备 (201).svg', NULL, NULL, NULL, '2023-07-01 15:27:04', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2580, '机械设备', '机械设备', '/profile/avatar/机械设备 (203).svg', NULL, NULL, NULL, '2023-07-01 15:27:04', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2581, '机械设备', '机械设备', '/profile/avatar/机械设备 (204).svg', NULL, NULL, NULL, '2023-07-01 15:27:04', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2582, '机械设备', '机械设备', '/profile/avatar/机械设备 (202).svg', NULL, NULL, NULL, '2023-07-01 15:27:04', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2583, '机械设备', '机械设备', '/profile/avatar/机械设备 (206).svg', NULL, NULL, NULL, '2023-07-01 15:27:04', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2584, '机械设备', '机械设备', '/profile/avatar/机械设备 (205).svg', NULL, NULL, NULL, '2023-07-01 15:27:04', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2585, '机械设备', '机械设备', '/profile/avatar/机械设备 (208).svg', NULL, NULL, NULL, '2023-07-01 15:27:04', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2586, '机械设备', '机械设备', '/profile/avatar/机械设备 (212).svg', NULL, NULL, NULL, '2023-07-01 15:27:05', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2587, '机械设备', '机械设备', '/profile/avatar/机械设备 (207).svg', NULL, NULL, NULL, '2023-07-01 15:27:05', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2588, '机械设备', '机械设备', '/profile/avatar/机械设备 (209).svg', NULL, NULL, NULL, '2023-07-01 15:27:05', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2589, '机械设备', '机械设备', '/profile/avatar/机械设备 (210).svg', NULL, NULL, NULL, '2023-07-01 15:27:05', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2590, '机械设备', '机械设备', '/profile/avatar/机械设备 (211).svg', NULL, NULL, NULL, '2023-07-01 15:27:05', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2591, '机械设备', '机械设备', '/profile/avatar/机械设备 (213).svg', NULL, NULL, NULL, '2023-07-01 15:27:05', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2592, '机械设备', '机械设备', '/profile/avatar/机械设备 (216).svg', NULL, NULL, NULL, '2023-07-01 15:27:05', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2593, '机械设备', '机械设备', '/profile/avatar/机械设备 (215).svg', NULL, NULL, NULL, '2023-07-01 15:27:05', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2594, '机械设备', '机械设备', '/profile/avatar/机械设备 (218).svg', NULL, NULL, NULL, '2023-07-01 15:27:05', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2595, '机械设备', '机械设备', '/profile/avatar/机械设备 (214).svg', NULL, NULL, NULL, '2023-07-01 15:27:05', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2596, '机械设备', '机械设备', '/profile/avatar/机械设备 (217).svg', NULL, NULL, NULL, '2023-07-01 15:27:05', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2597, '机械设备', '机械设备', '/profile/avatar/机械设备 (220).svg', NULL, NULL, NULL, '2023-07-01 15:27:05', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2598, '机械设备', '机械设备', '/profile/avatar/机械设备 (221).svg', NULL, NULL, NULL, '2023-07-01 15:27:05', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2599, '机械设备', '机械设备', '/profile/avatar/机械设备 (219).svg', NULL, NULL, NULL, '2023-07-01 15:27:05', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2600, '机械设备', '机械设备', '/profile/avatar/机械设备 (222).svg', NULL, NULL, NULL, '2023-07-01 15:27:05', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2601, '机械设备', '机械设备', '/profile/avatar/机械设备 (223).svg', NULL, NULL, NULL, '2023-07-01 15:27:05', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2602, '机械设备', '机械设备', '/profile/avatar/机械设备 (224).svg', NULL, NULL, NULL, '2023-07-01 15:27:06', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2603, '机械设备', '机械设备', '/profile/avatar/机械设备 (225).svg', NULL, NULL, NULL, '2023-07-01 15:27:06', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2604, '机械设备', '机械设备', '/profile/avatar/机械设备 (226).svg', NULL, NULL, NULL, '2023-07-01 15:27:06', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2605, '机械设备', '机械设备', '/profile/avatar/机械设备 (229).svg', NULL, NULL, NULL, '2023-07-01 15:27:06', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2606, '机械设备', '机械设备', '/profile/avatar/机械设备 (228).svg', NULL, NULL, NULL, '2023-07-01 15:27:06', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2607, '机械设备', '机械设备', '/profile/avatar/机械设备 (227).svg', NULL, NULL, NULL, '2023-07-01 15:27:06', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2608, '机械设备', '机械设备', '/profile/avatar/机械设备 (230).svg', NULL, NULL, NULL, '2023-07-01 15:27:06', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2609, '机械设备', '机械设备', '/profile/avatar/机械设备 (231).svg', NULL, NULL, NULL, '2023-07-01 15:27:06', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2610, '机械设备', '机械设备', '/profile/avatar/机械设备 (232).svg', NULL, NULL, NULL, '2023-07-01 15:27:06', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2611, '机械设备', '机械设备', '/profile/avatar/机械设备 (233).svg', NULL, NULL, NULL, '2023-07-01 15:27:06', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2612, '机械设备', '机械设备', '/profile/avatar/机械设备 (234).svg', NULL, NULL, NULL, '2023-07-01 15:27:06', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2613, '机械设备', '机械设备', '/profile/avatar/机械设备 (235).svg', NULL, NULL, NULL, '2023-07-01 15:27:06', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2614, '机械设备', '机械设备', '/profile/avatar/机械设备 (236).svg', NULL, NULL, NULL, '2023-07-01 15:27:07', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2615, '机械设备', '机械设备', '/profile/avatar/机械设备 (237).svg', NULL, NULL, NULL, '2023-07-01 15:27:07', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2616, '机械设备', '机械设备', '/profile/avatar/机械设备 (241).svg', NULL, NULL, NULL, '2023-07-01 15:27:07', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2617, '机械设备', '机械设备', '/profile/avatar/机械设备 (238).svg', NULL, NULL, NULL, '2023-07-01 15:27:07', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2618, '机械设备', '机械设备', '/profile/avatar/机械设备 (239).svg', NULL, NULL, NULL, '2023-07-01 15:27:07', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2619, '机械设备', '机械设备', '/profile/avatar/机械设备 (240).svg', NULL, NULL, NULL, '2023-07-01 15:27:07', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2620, '机械设备', '机械设备', '/profile/avatar/机械设备 (243).svg', NULL, NULL, NULL, '2023-07-01 15:27:07', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2621, '机械设备', '机械设备', '/profile/avatar/机械设备 (242).svg', NULL, NULL, NULL, '2023-07-01 15:27:07', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2622, '机械设备', '机械设备', '/profile/avatar/机械设备 (246).svg', NULL, NULL, NULL, '2023-07-01 15:27:07', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2623, '机械设备', '机械设备', '/profile/avatar/机械设备 (244).svg', NULL, NULL, NULL, '2023-07-01 15:27:07', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2624, '机械设备', '机械设备', '/profile/avatar/机械设备 (245).svg', NULL, NULL, NULL, '2023-07-01 15:27:07', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2625, '机械设备', '机械设备', '/profile/avatar/机械设备 (247).svg', NULL, NULL, NULL, '2023-07-01 15:27:07', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2626, '机械设备', '机械设备', '/profile/avatar/机械设备 (248).svg', NULL, NULL, NULL, '2023-07-01 15:27:07', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2627, '机械设备', '机械设备', '/profile/avatar/机械设备 (249).svg', NULL, NULL, NULL, '2023-07-01 15:27:08', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2628, '机械设备', '机械设备', '/profile/avatar/机械设备 (251).svg', NULL, NULL, NULL, '2023-07-01 15:27:08', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2629, '机械设备', '机械设备', '/profile/avatar/机械设备 (250).svg', NULL, NULL, NULL, '2023-07-01 15:27:08', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2630, '机械设备', '机械设备', '/profile/avatar/机械设备 (253).svg', NULL, NULL, NULL, '2023-07-01 15:27:08', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2631, '机械设备', '机械设备', '/profile/avatar/机械设备 (252).svg', NULL, NULL, NULL, '2023-07-01 15:27:08', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2632, '机械设备', '机械设备', '/profile/avatar/机械设备 (254).svg', NULL, NULL, NULL, '2023-07-01 15:27:08', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2633, '建筑物', '建筑物', '/profile/avatar/jianzhuwu (1).svg', NULL, NULL, NULL, '2023-07-01 15:28:10', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2634, '建筑物', '建筑物', '/profile/avatar/jianzhuwu (2).svg', NULL, NULL, NULL, '2023-07-01 15:28:10', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2635, '建筑物', '建筑物', '/profile/avatar/jianzhuwu (5).svg', NULL, NULL, NULL, '2023-07-01 15:28:10', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2636, '建筑物', '建筑物', '/profile/avatar/jianzhuwu (6).svg', NULL, NULL, NULL, '2023-07-01 15:28:10', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2637, '建筑物', '建筑物', '/profile/avatar/jianzhuwu (4).svg', NULL, NULL, NULL, '2023-07-01 15:28:10', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2638, '建筑物', '建筑物', '/profile/avatar/jianzhuwu (3).svg', NULL, NULL, NULL, '2023-07-01 15:28:10', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2639, '建筑物', '建筑物', '/profile/avatar/jianzhuwu (7).svg', NULL, NULL, NULL, '2023-07-01 15:28:10', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2640, '建筑物', '建筑物', '/profile/avatar/jianzhuwu (8).svg', NULL, NULL, NULL, '2023-07-01 15:28:10', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2641, '建筑物', '建筑物', '/profile/avatar/jianzhuwu (9).svg', NULL, NULL, NULL, '2023-07-01 15:28:11', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2642, '建筑物', '建筑物', '/profile/avatar/jianzhuwu (12).svg', NULL, NULL, NULL, '2023-07-01 15:28:11', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2643, '建筑物', '建筑物', '/profile/avatar/jianzhuwu (10).svg', NULL, NULL, NULL, '2023-07-01 15:28:11', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2644, '建筑物', '建筑物', '/profile/avatar/jianzhuwu (11).svg', NULL, NULL, NULL, '2023-07-01 15:28:11', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2645, '建筑物', '建筑物', '/profile/avatar/jianzhuwu (13).svg', NULL, NULL, NULL, '2023-07-01 15:28:11', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2646, '建筑物', '建筑物', '/profile/avatar/jianzhuwu (14).svg', NULL, NULL, NULL, '2023-07-01 15:28:11', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2647, '建筑物', '建筑物', '/profile/avatar/jianzhuwu (15).svg', NULL, NULL, NULL, '2023-07-01 15:28:11', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2648, '建筑物', '建筑物', '/profile/avatar/jianzhuwu (16).svg', NULL, NULL, NULL, '2023-07-01 15:28:11', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2649, '建筑物', '建筑物', '/profile/avatar/jianzhuwu (17).svg', NULL, NULL, NULL, '2023-07-01 15:28:11', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2650, '建筑物', '建筑物', '/profile/avatar/jianzhuwu (19).svg', NULL, NULL, NULL, '2023-07-01 15:28:11', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2651, '建筑物', '建筑物', '/profile/avatar/jianzhuwu (18).svg', NULL, NULL, NULL, '2023-07-01 15:28:11', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2652, '建筑物', '建筑物', '/profile/avatar/jianzhuwu (20).svg', NULL, NULL, NULL, '2023-07-01 15:28:11', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2653, '建筑物', '建筑物', '/profile/avatar/jianzhuwu (21).svg', NULL, NULL, NULL, '2023-07-01 15:28:12', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2654, '建筑物', '建筑物', '/profile/avatar/jianzhuwu (22).svg', NULL, NULL, NULL, '2023-07-01 15:28:12', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2655, '建筑物', '建筑物', '/profile/avatar/jianzhuwu (27).svg', NULL, NULL, NULL, '2023-07-01 15:28:12', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2656, '建筑物', '建筑物', '/profile/avatar/jianzhuwu (23).svg', NULL, NULL, NULL, '2023-07-01 15:28:12', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2657, '建筑物', '建筑物', '/profile/avatar/jianzhuwu (26).svg', NULL, NULL, NULL, '2023-07-01 15:28:12', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2658, '建筑物', '建筑物', '/profile/avatar/jianzhuwu (25).svg', NULL, NULL, NULL, '2023-07-01 15:28:12', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2659, '建筑物', '建筑物', '/profile/avatar/jianzhuwu (24).svg', NULL, NULL, NULL, '2023-07-01 15:28:12', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2660, '建筑物', '建筑物', '/profile/avatar/jianzhuwu (28).svg', NULL, NULL, NULL, '2023-07-01 15:28:12', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2661, '建筑物', '建筑物', '/profile/avatar/jianzhuwu (29).svg', NULL, NULL, NULL, '2023-07-01 15:28:12', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2662, '建筑物', '建筑物', '/profile/avatar/jianzhuwu (30).svg', NULL, NULL, NULL, '2023-07-01 15:28:12', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2663, '建筑物', '建筑物', '/profile/avatar/jianzhuwu (32).svg', NULL, NULL, NULL, '2023-07-01 15:28:13', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2664, '建筑物', '建筑物', '/profile/avatar/jianzhuwu (31).svg', NULL, NULL, NULL, '2023-07-01 15:28:13', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2665, '建筑物', '建筑物', '/profile/avatar/jianzhuwu (33).svg', NULL, NULL, NULL, '2023-07-01 15:28:13', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2666, '建筑物', '建筑物', '/profile/avatar/jianzhuwu (36).svg', NULL, NULL, NULL, '2023-07-01 15:28:13', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2667, '建筑物', '建筑物', '/profile/avatar/jianzhuwu (34).svg', NULL, NULL, NULL, '2023-07-01 15:28:13', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2668, '建筑物', '建筑物', '/profile/avatar/jianzhuwu (35).svg', NULL, NULL, NULL, '2023-07-01 15:28:13', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2669, '建筑物', '建筑物', '/profile/avatar/jianzhuwu (37).svg', NULL, NULL, NULL, '2023-07-01 15:28:13', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2670, '建筑物', '建筑物', '/profile/avatar/jianzhuwu (38).svg', NULL, NULL, NULL, '2023-07-01 15:28:13', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2671, '建筑物', '建筑物', '/profile/avatar/jianzhuwu (39).svg', NULL, NULL, NULL, '2023-07-01 15:28:13', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2672, '建筑物', '建筑物', '/profile/avatar/jianzhuwu (40).svg', NULL, NULL, NULL, '2023-07-01 15:28:13', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2673, '建筑物', '建筑物', '/profile/avatar/jianzhuwu (43).svg', NULL, NULL, NULL, '2023-07-01 15:28:13', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2674, '建筑物', '建筑物', '/profile/avatar/jianzhuwu (41).svg', NULL, NULL, NULL, '2023-07-01 15:28:13', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2675, '建筑物', '建筑物', '/profile/avatar/jianzhuwu (42).svg', NULL, NULL, NULL, '2023-07-01 15:28:13', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2676, '建筑物', '建筑物', '/profile/avatar/jianzhuwu (44).svg', NULL, NULL, NULL, '2023-07-01 15:28:13', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2677, '建筑物', '建筑物', '/profile/avatar/jianzhuwu (45).svg', NULL, NULL, NULL, '2023-07-01 15:28:13', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2678, '建筑物', '建筑物', '/profile/avatar/jianzhuwu (46).svg', NULL, NULL, NULL, '2023-07-01 15:28:14', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2679, '建筑物', '建筑物', '/profile/avatar/jianzhuwu (48).svg', NULL, NULL, NULL, '2023-07-01 15:28:14', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2680, '建筑物', '建筑物', '/profile/avatar/jianzhuwu (47).svg', NULL, NULL, NULL, '2023-07-01 15:28:14', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2681, '建筑物', '建筑物', '/profile/avatar/jianzhuwu (49).svg', NULL, NULL, NULL, '2023-07-01 15:28:14', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2682, '建筑物', '建筑物', '/profile/avatar/jianzhuwu (50).svg', NULL, NULL, NULL, '2023-07-01 15:28:14', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2683, '建筑物', '建筑物', '/profile/avatar/jianzhuwu (51).svg', NULL, NULL, NULL, '2023-07-01 15:28:14', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2684, '建筑物', '建筑物', '/profile/avatar/jianzhuwu (54).svg', NULL, NULL, NULL, '2023-07-01 15:28:14', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2685, '建筑物', '建筑物', '/profile/avatar/jianzhuwu (55).svg', NULL, NULL, NULL, '2023-07-01 15:28:14', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2686, '建筑物', '建筑物', '/profile/avatar/jianzhuwu (52).svg', NULL, NULL, NULL, '2023-07-01 15:28:14', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2687, '建筑物', '建筑物', '/profile/avatar/jianzhuwu (56).svg', NULL, NULL, NULL, '2023-07-01 15:28:14', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2688, '建筑物', '建筑物', '/profile/avatar/jianzhuwu (53).svg', NULL, NULL, NULL, '2023-07-01 15:28:14', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2689, '建筑物', '建筑物', '/profile/avatar/jianzhuwu (57).svg', NULL, NULL, NULL, '2023-07-01 15:28:14', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2690, '建筑物', '建筑物', '/profile/avatar/jianzhuwu (58).svg', NULL, NULL, NULL, '2023-07-01 15:28:14', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2691, '建筑物', '建筑物', '/profile/avatar/jianzhuwu (60).svg', NULL, NULL, NULL, '2023-07-01 15:28:14', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2692, '建筑物', '建筑物', '/profile/avatar/jianzhuwu (59).svg', NULL, NULL, NULL, '2023-07-01 15:28:14', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2693, '建筑物', '建筑物', '/profile/avatar/jianzhuwu (61).svg', NULL, NULL, NULL, '2023-07-01 15:28:15', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2694, '建筑物', '建筑物', '/profile/avatar/jianzhuwu (62).svg', NULL, NULL, NULL, '2023-07-01 15:28:15', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2695, '建筑物', '建筑物', '/profile/avatar/jianzhuwu (64).svg', NULL, NULL, NULL, '2023-07-01 15:28:15', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2696, '建筑物', '建筑物', '/profile/avatar/jianzhuwu (63).svg', NULL, NULL, NULL, '2023-07-01 15:28:15', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2697, '建筑物', '建筑物', '/profile/avatar/jianzhuwu (65).svg', NULL, NULL, NULL, '2023-07-01 15:28:15', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2698, '建筑物', '建筑物', '/profile/avatar/jianzhuwu (66).svg', NULL, NULL, NULL, '2023-07-01 15:28:15', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2699, '建筑物', '建筑物', '/profile/avatar/jianzhuwu (67).svg', NULL, NULL, NULL, '2023-07-01 15:28:15', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2700, '建筑物', '建筑物', '/profile/avatar/jianzhuwu (68).svg', NULL, NULL, NULL, '2023-07-01 15:28:15', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2701, '建筑物', '建筑物', '/profile/avatar/jianzhuwu (69).svg', NULL, NULL, NULL, '2023-07-01 15:28:15', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2702, '建筑物', '建筑物', '/profile/avatar/jianzhuwu (71).svg', NULL, NULL, NULL, '2023-07-01 15:28:16', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2703, '建筑物', '建筑物', '/profile/avatar/jianzhuwu (73).svg', NULL, NULL, NULL, '2023-07-01 15:28:16', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2704, '建筑物', '建筑物', '/profile/avatar/jianzhuwu (72).svg', NULL, NULL, NULL, '2023-07-01 15:28:16', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2705, '建筑物', '建筑物', '/profile/avatar/jianzhuwu (76).svg', NULL, NULL, NULL, '2023-07-01 15:28:16', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2706, '建筑物', '建筑物', '/profile/avatar/jianzhuwu (74).svg', NULL, NULL, NULL, '2023-07-01 15:28:16', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2707, '建筑物', '建筑物', '/profile/avatar/jianzhuwu (70).svg', NULL, NULL, NULL, '2023-07-01 15:28:16', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2708, '建筑物', '建筑物', '/profile/avatar/jianzhuwu (77).svg', NULL, NULL, NULL, '2023-07-01 15:28:16', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2709, '建筑物', '建筑物', '/profile/avatar/jianzhuwu (78).svg', NULL, NULL, NULL, '2023-07-01 15:28:16', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2710, '建筑物', '建筑物', '/profile/avatar/jianzhuwu (75).svg', NULL, NULL, NULL, '2023-07-01 15:28:16', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2711, '建筑物', '建筑物', '/profile/avatar/jianzhuwu (79).svg', NULL, NULL, NULL, '2023-07-01 15:28:16', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2712, '建筑物', '建筑物', '/profile/avatar/jianzhuwu (80).svg', NULL, NULL, NULL, '2023-07-01 15:28:16', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2713, '建筑物', '建筑物', '/profile/avatar/jianzhuwu (81).svg', NULL, NULL, NULL, '2023-07-01 15:28:16', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2714, '建筑物', '建筑物', '/profile/avatar/jianzhuwu (82).svg', NULL, NULL, NULL, '2023-07-01 15:28:16', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2715, '建筑物', '建筑物', '/profile/avatar/jianzhuwu (83).svg', NULL, NULL, NULL, '2023-07-01 15:28:17', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2716, '建筑物', '建筑物', '/profile/avatar/jianzhuwu (84).svg', NULL, NULL, NULL, '2023-07-01 15:28:17', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2717, '建筑物', '建筑物', '/profile/avatar/jianzhuwu (86).svg', NULL, NULL, NULL, '2023-07-01 15:28:17', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2718, '建筑物', '建筑物', '/profile/avatar/jianzhuwu (88).svg', NULL, NULL, NULL, '2023-07-01 15:28:17', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2719, '建筑物', '建筑物', '/profile/avatar/jianzhuwu (85).svg', NULL, NULL, NULL, '2023-07-01 15:28:17', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2720, '建筑物', '建筑物', '/profile/avatar/jianzhuwu (91).svg', NULL, NULL, NULL, '2023-07-01 15:28:17', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2721, '建筑物', '建筑物', '/profile/avatar/jianzhuwu (89).svg', NULL, NULL, NULL, '2023-07-01 15:28:17', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2722, '建筑物', '建筑物', '/profile/avatar/jianzhuwu (87).svg', NULL, NULL, NULL, '2023-07-01 15:28:17', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2723, '建筑物', '建筑物', '/profile/avatar/jianzhuwu (90).svg', NULL, NULL, NULL, '2023-07-01 15:28:17', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2724, '建筑物', '建筑物', '/profile/avatar/jianzhuwu (92).svg', NULL, NULL, NULL, '2023-07-01 15:28:17', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2725, '建筑物', '建筑物', '/profile/avatar/jianzhuwu (93).svg', NULL, NULL, NULL, '2023-07-01 15:28:17', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2726, '建筑物', '建筑物', '/profile/avatar/jianzhuwu (95).svg', NULL, NULL, NULL, '2023-07-01 15:28:17', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2727, '建筑物', '建筑物', '/profile/avatar/jianzhuwu (97).svg', NULL, NULL, NULL, '2023-07-01 15:28:17', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2728, '建筑物', '建筑物', '/profile/avatar/jianzhuwu (96).svg', NULL, NULL, NULL, '2023-07-01 15:28:17', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2729, '建筑物', '建筑物', '/profile/avatar/jianzhuwu (94).svg', NULL, NULL, NULL, '2023-07-01 15:28:17', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2730, '建筑物', '建筑物', '/profile/avatar/jianzhuwu (99).svg', NULL, NULL, NULL, '2023-07-01 15:28:18', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2731, '建筑物', '建筑物', '/profile/avatar/jianzhuwu (98).svg', NULL, NULL, NULL, '2023-07-01 15:28:18', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2732, '建筑物', '建筑物', '/profile/avatar/jianzhuwu (100).svg', NULL, NULL, NULL, '2023-07-01 15:28:18', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2733, '建筑物', '建筑物', '/profile/avatar/jianzhuwu (103).svg', NULL, NULL, NULL, '2023-07-01 15:28:18', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2734, '建筑物', '建筑物', '/profile/avatar/jianzhuwu (102).svg', NULL, NULL, NULL, '2023-07-01 15:28:18', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2735, '建筑物', '建筑物', '/profile/avatar/jianzhuwu (101).svg', NULL, NULL, NULL, '2023-07-01 15:28:18', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2736, '建筑物', '建筑物', '/profile/avatar/jianzhuwu (105).svg', NULL, NULL, NULL, '2023-07-01 15:28:18', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2737, '建筑物', '建筑物', '/profile/avatar/jianzhuwu (106).svg', NULL, NULL, NULL, '2023-07-01 15:28:18', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2738, '建筑物', '建筑物', '/profile/avatar/jianzhuwu (107).svg', NULL, NULL, NULL, '2023-07-01 15:28:19', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2739, '建筑物', '建筑物', '/profile/avatar/jianzhuwu (108).svg', NULL, NULL, NULL, '2023-07-01 15:28:19', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2740, '建筑物', '建筑物', '/profile/avatar/jianzhuwu (109).svg', NULL, NULL, NULL, '2023-07-01 15:28:19', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2741, '建筑物', '建筑物', '/profile/avatar/jianzhuwu (104).svg', NULL, NULL, NULL, '2023-07-01 15:28:19', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2742, '建筑物', '建筑物', '/profile/avatar/jianzhuwu (110).svg', NULL, NULL, NULL, '2023-07-01 15:28:19', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2743, '建筑物', '建筑物', '/profile/avatar/jianzhuwu (111).svg', NULL, NULL, NULL, '2023-07-01 15:28:19', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2744, '建筑物', '建筑物', '/profile/avatar/jianzhuwu (112).svg', NULL, NULL, NULL, '2023-07-01 15:28:19', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2745, '交通', '交通', '/profile/avatar/jiaotong (1).svg', NULL, NULL, NULL, '2023-07-01 15:29:37', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2746, '交通', '交通', '/profile/avatar/jiaotong (4).svg', NULL, NULL, NULL, '2023-07-01 15:29:38', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2747, '交通', '交通', '/profile/avatar/jiaotong (3).svg', NULL, NULL, NULL, '2023-07-01 15:29:38', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2748, '交通', '交通', '/profile/avatar/jiaotong (5).svg', NULL, NULL, NULL, '2023-07-01 15:29:38', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2749, '交通', '交通', '/profile/avatar/jiaotong (2).svg', NULL, NULL, NULL, '2023-07-01 15:29:38', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2750, '交通', '交通', '/profile/avatar/jiaotong (6).svg', NULL, NULL, NULL, '2023-07-01 15:29:38', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2751, '交通', '交通', '/profile/avatar/jiaotong (7).svg', NULL, NULL, NULL, '2023-07-01 15:29:38', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2752, '交通', '交通', '/profile/avatar/jiaotong (8).svg', NULL, NULL, NULL, '2023-07-01 15:29:38', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2753, '交通', '交通', '/profile/avatar/jiaotong (9).svg', NULL, NULL, NULL, '2023-07-01 15:29:38', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2754, '交通', '交通', '/profile/avatar/jiaotong (10).svg', NULL, NULL, NULL, '2023-07-01 15:29:38', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2755, '交通', '交通', '/profile/avatar/jiaotong (16).svg', NULL, NULL, NULL, '2023-07-01 15:29:38', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2756, '交通', '交通', '/profile/avatar/jiaotong (17).svg', NULL, NULL, NULL, '2023-07-01 15:29:38', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2757, '交通', '交通', '/profile/avatar/jiaotong (18).svg', NULL, NULL, NULL, '2023-07-01 15:29:38', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2758, '交通', '交通', '/profile/avatar/jiaotong (12).svg', NULL, NULL, NULL, '2023-07-01 15:29:38', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2759, '交通', '交通', '/profile/avatar/jiaotong (14).svg', NULL, NULL, NULL, '2023-07-01 15:29:39', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2760, '交通', '交通', '/profile/avatar/jiaotong (19).svg', NULL, NULL, NULL, '2023-07-01 15:29:39', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2761, '交通', '交通', '/profile/avatar/jiaotong (13).svg', NULL, NULL, NULL, '2023-07-01 15:29:39', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2762, '交通', '交通', '/profile/avatar/jiaotong (11).svg', NULL, NULL, NULL, '2023-07-01 15:29:39', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2763, '交通', '交通', '/profile/avatar/jiaotong (15).svg', NULL, NULL, NULL, '2023-07-01 15:29:39', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2764, '交通', '交通', '/profile/avatar/jiaotong (22).svg', NULL, NULL, NULL, '2023-07-01 15:29:39', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2765, '交通', '交通', '/profile/avatar/jiaotong (24).svg', NULL, NULL, NULL, '2023-07-01 15:29:39', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2766, '交通', '交通', '/profile/avatar/jiaotong (23).svg', NULL, NULL, NULL, '2023-07-01 15:29:39', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2767, '交通', '交通', '/profile/avatar/jiaotong (21).svg', NULL, NULL, NULL, '2023-07-01 15:29:39', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2768, '交通', '交通', '/profile/avatar/jiaotong (20).svg', NULL, NULL, NULL, '2023-07-01 15:29:39', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2769, '交通', '交通', '/profile/avatar/jiaotong (25).svg', NULL, NULL, NULL, '2023-07-01 15:29:39', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2770, '交通', '交通', '/profile/avatar/jiaotong (26).svg', NULL, NULL, NULL, '2023-07-01 15:29:39', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2771, '交通', '交通', '/profile/avatar/jiaotong (27).svg', NULL, NULL, NULL, '2023-07-01 15:29:39', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2772, '交通', '交通', '/profile/avatar/jiaotong (30).svg', NULL, NULL, NULL, '2023-07-01 15:29:39', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2773, '交通', '交通', '/profile/avatar/jiaotong (28).svg', NULL, NULL, NULL, '2023-07-01 15:29:39', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2774, '交通', '交通', '/profile/avatar/jiaotong (31).svg', NULL, NULL, NULL, '2023-07-01 15:29:39', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2775, '交通', '交通', '/profile/avatar/jiaotong (29).svg', NULL, NULL, NULL, '2023-07-01 15:29:39', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2776, '交通', '交通', '/profile/avatar/jiaotong (32).svg', NULL, NULL, NULL, '2023-07-01 15:29:40', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2777, '交通', '交通', '/profile/avatar/jiaotong (33).svg', NULL, NULL, NULL, '2023-07-01 15:29:40', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2778, '警示与标志', '警示与标志', '/profile/avatar/jingshibiaozhi (1).svg', NULL, NULL, NULL, '2023-07-01 15:30:11', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2779, '警示与标志', '警示与标志', '/profile/avatar/jingshibiaozhi (2).svg', NULL, NULL, NULL, '2023-07-01 15:30:11', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2780, '警示与标志', '警示与标志', '/profile/avatar/jingshibiaozhi (3).svg', NULL, NULL, NULL, '2023-07-01 15:30:11', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2781, '警示与标志', '警示与标志', '/profile/avatar/jingshibiaozhi (4).svg', NULL, NULL, NULL, '2023-07-01 15:30:11', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2782, '警示与标志', '警示与标志', '/profile/avatar/jingshibiaozhi (6).svg', NULL, NULL, NULL, '2023-07-01 15:30:11', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2783, '警示与标志', '警示与标志', '/profile/avatar/jingshibiaozhi (5).svg', NULL, NULL, NULL, '2023-07-01 15:30:11', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2784, '警示与标志', '警示与标志', '/profile/avatar/jingshibiaozhi (9).svg', NULL, NULL, NULL, '2023-07-01 15:30:11', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2785, '警示与标志', '警示与标志', '/profile/avatar/jingshibiaozhi (10).svg', NULL, NULL, NULL, '2023-07-01 15:30:11', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2786, '警示与标志', '警示与标志', '/profile/avatar/jingshibiaozhi (8).svg', NULL, NULL, NULL, '2023-07-01 15:30:11', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2787, '警示与标志', '警示与标志', '/profile/avatar/jingshibiaozhi (7).svg', NULL, NULL, NULL, '2023-07-01 15:30:11', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2788, '警示与标志', '警示与标志', '/profile/avatar/jingshibiaozhi (14).svg', NULL, NULL, NULL, '2023-07-01 15:30:11', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2789, '警示与标志', '警示与标志', '/profile/avatar/jingshibiaozhi (13).svg', NULL, NULL, NULL, '2023-07-01 15:30:11', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2790, '警示与标志', '警示与标志', '/profile/avatar/jingshibiaozhi (12).svg', NULL, NULL, NULL, '2023-07-01 15:30:11', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2791, '警示与标志', '警示与标志', '/profile/avatar/jingshibiaozhi (11).svg', NULL, NULL, NULL, '2023-07-01 15:30:12', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2792, '警示与标志', '警示与标志', '/profile/avatar/jingshibiaozhi (15).svg', NULL, NULL, NULL, '2023-07-01 15:30:12', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2793, '警示与标志', '警示与标志', '/profile/avatar/jingshibiaozhi (17).svg', NULL, NULL, NULL, '2023-07-01 15:30:12', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2794, '警示与标志', '警示与标志', '/profile/avatar/jingshibiaozhi (16).svg', NULL, NULL, NULL, '2023-07-01 15:30:12', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2795, '警示与标志', '警示与标志', '/profile/avatar/jingshibiaozhi (18).svg', NULL, NULL, NULL, '2023-07-01 15:30:12', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2796, '警示与标志', '警示与标志', '/profile/avatar/jingshibiaozhi (19).svg', NULL, NULL, NULL, '2023-07-01 15:30:12', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2797, '警示与标志', '警示与标志', '/profile/avatar/jingshibiaozhi (21).svg', NULL, NULL, NULL, '2023-07-01 15:30:12', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2798, '警示与标志', '警示与标志', '/profile/avatar/jingshibiaozhi (20).svg', NULL, NULL, NULL, '2023-07-01 15:30:12', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2799, '警示与标志', '警示与标志', '/profile/avatar/jingshibiaozhi (24).svg', NULL, NULL, NULL, '2023-07-01 15:30:12', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2800, '警示与标志', '警示与标志', '/profile/avatar/jingshibiaozhi (23).svg', NULL, NULL, NULL, '2023-07-01 15:30:12', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2801, '警示与标志', '警示与标志', '/profile/avatar/jingshibiaozhi (22).svg', NULL, NULL, NULL, '2023-07-01 15:30:12', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2802, '警示与标志', '警示与标志', '/profile/avatar/jingshibiaozhi (25).svg', NULL, NULL, NULL, '2023-07-01 15:30:12', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2803, '警示与标志', '警示与标志', '/profile/avatar/jingshibiaozhi (26).svg', NULL, NULL, NULL, '2023-07-01 15:30:12', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2804, '警示与标志', '警示与标志', '/profile/avatar/jingshibiaozhi (30).svg', NULL, NULL, NULL, '2023-07-01 15:30:12', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2805, '警示与标志', '警示与标志', '/profile/avatar/jingshibiaozhi (34).svg', NULL, NULL, NULL, '2023-07-01 15:30:13', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2806, '警示与标志', '警示与标志', '/profile/avatar/jingshibiaozhi (32).svg', NULL, NULL, NULL, '2023-07-01 15:30:13', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2807, '警示与标志', '警示与标志', '/profile/avatar/jingshibiaozhi (28).svg', NULL, NULL, NULL, '2023-07-01 15:30:13', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2808, '警示与标志', '警示与标志', '/profile/avatar/jingshibiaozhi (29).svg', NULL, NULL, NULL, '2023-07-01 15:30:13', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2809, '警示与标志', '警示与标志', '/profile/avatar/jingshibiaozhi (33).svg', NULL, NULL, NULL, '2023-07-01 15:30:13', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2810, '警示与标志', '警示与标志', '/profile/avatar/jingshibiaozhi (31).svg', NULL, NULL, NULL, '2023-07-01 15:30:13', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2811, '警示与标志', '警示与标志', '/profile/avatar/jingshibiaozhi (36).svg', NULL, NULL, NULL, '2023-07-01 15:30:13', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2812, '警示与标志', '警示与标志', '/profile/avatar/jingshibiaozhi (27).svg', NULL, NULL, NULL, '2023-07-01 15:30:13', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2813, '警示与标志', '警示与标志', '/profile/avatar/jingshibiaozhi (35).svg', NULL, NULL, NULL, '2023-07-01 15:30:13', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2814, '警示与标志', '警示与标志', '/profile/avatar/jingshibiaozhi (37).svg', NULL, NULL, NULL, '2023-07-01 15:30:13', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2815, '警示与标志', '警示与标志', '/profile/avatar/jingshibiaozhi (38).svg', NULL, NULL, NULL, '2023-07-01 15:30:13', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2816, '警示与标志', '警示与标志', '/profile/avatar/jingshibiaozhi (40).svg', NULL, NULL, NULL, '2023-07-01 15:30:13', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2817, '警示与标志', '警示与标志', '/profile/avatar/jingshibiaozhi (42).svg', NULL, NULL, NULL, '2023-07-01 15:30:13', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2818, '警示与标志', '警示与标志', '/profile/avatar/jingshibiaozhi (43).svg', NULL, NULL, NULL, '2023-07-01 15:30:13', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2819, '警示与标志', '警示与标志', '/profile/avatar/jingshibiaozhi (41).svg', NULL, NULL, NULL, '2023-07-01 15:30:13', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2820, '警示与标志', '警示与标志', '/profile/avatar/jingshibiaozhi (39).svg', NULL, NULL, NULL, '2023-07-01 15:30:13', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2821, '警示与标志', '警示与标志', '/profile/avatar/jingshibiaozhi (44).svg', NULL, NULL, NULL, '2023-07-01 15:30:14', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2822, '警示与标志', '警示与标志', '/profile/avatar/jingshibiaozhi (46).svg', NULL, NULL, NULL, '2023-07-01 15:30:14', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2823, '警示与标志', '警示与标志', '/profile/avatar/jingshibiaozhi (45).svg', NULL, NULL, NULL, '2023-07-01 15:30:14', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2824, '警示与标志', '警示与标志', '/profile/avatar/jingshibiaozhi (47).svg', NULL, NULL, NULL, '2023-07-01 15:30:14', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2825, '警示与标志', '警示与标志', '/profile/avatar/jingshibiaozhi (51).svg', NULL, NULL, NULL, '2023-07-01 15:30:14', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2826, '警示与标志', '警示与标志', '/profile/avatar/jingshibiaozhi (50).svg', NULL, NULL, NULL, '2023-07-01 15:30:14', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2827, '警示与标志', '警示与标志', '/profile/avatar/jingshibiaozhi (49).svg', NULL, NULL, NULL, '2023-07-01 15:30:14', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2828, '警示与标志', '警示与标志', '/profile/avatar/jingshibiaozhi (48).svg', NULL, NULL, NULL, '2023-07-01 15:30:14', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2829, '卡片', '卡片', '/profile/avatar/kapian (1).gif', NULL, NULL, NULL, '2023-07-01 15:30:51', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2830, '卡片', '卡片', '/profile/avatar/kapian (2).gif', NULL, NULL, NULL, '2023-07-01 15:30:51', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2831, '卡片', '卡片', '/profile/avatar/kapian (1).png', NULL, NULL, NULL, '2023-07-01 15:30:51', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2832, '卡片', '卡片', '/profile/avatar/kapian (1).jpg', NULL, NULL, NULL, '2023-07-01 15:30:51', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2833, '卡片', '卡片', '/profile/avatar/kapian (2).png', NULL, NULL, NULL, '2023-07-01 15:30:51', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2834, '卡片', '卡片', '/profile/avatar/kapian (2).jpg', NULL, NULL, NULL, '2023-07-01 15:30:51', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2835, '卡片', '卡片', '/profile/avatar/kapian (3).jpg', NULL, NULL, NULL, '2023-07-01 15:30:51', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2836, '卡片', '卡片', '/profile/avatar/kapian (3).gif', NULL, NULL, NULL, '2023-07-01 15:30:51', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2837, '卡片', '卡片', '/profile/avatar/kapian (4).jpg', NULL, NULL, NULL, '2023-07-01 15:30:51', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2838, '卡片', '卡片', '/profile/avatar/kapian (4).gif', NULL, NULL, NULL, '2023-07-01 15:30:51', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2839, '卡片', '卡片', '/profile/avatar/kapian (3).png', NULL, NULL, NULL, '2023-07-01 15:30:51', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2840, '卡片', '卡片', '/profile/avatar/kapian (4).png', NULL, NULL, NULL, '2023-07-01 15:30:51', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2841, '卡片', '卡片', '/profile/avatar/kapian (6).png', NULL, NULL, NULL, '2023-07-01 15:30:52', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2842, '卡片', '卡片', '/profile/avatar/kapian (5).gif', NULL, NULL, NULL, '2023-07-01 15:30:52', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2843, '卡片', '卡片', '/profile/avatar/kapian (7).png', NULL, NULL, NULL, '2023-07-01 15:30:52', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2844, '卡片', '卡片', '/profile/avatar/kapian (8).png', NULL, NULL, NULL, '2023-07-01 15:30:52', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2845, '卡片', '卡片', '/profile/avatar/kapian (5).png', NULL, NULL, NULL, '2023-07-01 15:30:52', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2846, '卡片', '卡片', '/profile/avatar/kapian (10).png', NULL, NULL, NULL, '2023-07-01 15:30:52', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2847, '卡片', '卡片', '/profile/avatar/kapian (12).png', NULL, NULL, NULL, '2023-07-01 15:30:52', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2848, '卡片', '卡片', '/profile/avatar/kapian (15).png', NULL, NULL, NULL, '2023-07-01 15:30:52', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2849, '卡片', '卡片', '/profile/avatar/kapian (14).png', NULL, NULL, NULL, '2023-07-01 15:30:52', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2850, '卡片', '卡片', '/profile/avatar/kapian (9).png', NULL, NULL, NULL, '2023-07-01 15:30:52', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2851, '卡片', '卡片', '/profile/avatar/kapian (13).png', NULL, NULL, NULL, '2023-07-01 15:30:52', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2852, '卡片', '卡片', '/profile/avatar/kapian (11).png', NULL, NULL, NULL, '2023-07-01 15:30:52', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2853, '卡片', '卡片', '/profile/avatar/kapian (16).png', NULL, NULL, NULL, '2023-07-01 15:30:53', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2854, '卡片', '卡片', '/profile/avatar/kapian (17).png', NULL, NULL, NULL, '2023-07-01 15:30:53', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2855, '卡片', '卡片', '/profile/avatar/kapian (19).png', NULL, NULL, NULL, '2023-07-01 15:30:53', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2856, '卡片', '卡片', '/profile/avatar/kapian (20).png', NULL, NULL, NULL, '2023-07-01 15:30:53', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2857, '卡片', '卡片', '/profile/avatar/kapian (18).png', NULL, NULL, NULL, '2023-07-01 15:30:53', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2858, '卡片', '卡片', '/profile/avatar/kapian (21).png', NULL, NULL, NULL, '2023-07-01 15:30:53', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2859, '卡片', '卡片', '/profile/avatar/kapian (22).png', NULL, NULL, NULL, '2023-07-01 15:30:53', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2860, '卡片', '卡片', '/profile/avatar/kapian (24).png', NULL, NULL, NULL, '2023-07-01 15:30:53', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2861, '卡片', '卡片', '/profile/avatar/kapian (23).png', NULL, NULL, NULL, '2023-07-01 15:30:53', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2862, '卡片', '卡片', '/profile/avatar/kapian (25).png', NULL, NULL, NULL, '2023-07-01 15:30:53', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2863, '卡片', '卡片', '/profile/avatar/kapian (26).png', NULL, NULL, NULL, '2023-07-01 15:30:53', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2864, '卡片', '卡片', '/profile/avatar/kapian (27).png', NULL, NULL, NULL, '2023-07-01 15:30:53', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2865, '卡片', '卡片', '/profile/avatar/kapian (28).png', NULL, NULL, NULL, '2023-07-01 15:30:54', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2866, '卡片', '卡片', '/profile/avatar/kapian (29).png', NULL, NULL, NULL, '2023-07-01 15:30:54', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2867, '卡片', '卡片', '/profile/avatar/kapian (30).png', NULL, NULL, NULL, '2023-07-01 15:30:54', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2868, '卡片', '卡片', '/profile/avatar/kapian (31).png', NULL, NULL, NULL, '2023-07-01 15:30:54', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2869, '卡片', '卡片', '/profile/avatar/kapian (32).png', NULL, NULL, NULL, '2023-07-01 15:30:54', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2870, '卡片', '卡片', '/profile/avatar/kapian (33).png', NULL, NULL, NULL, '2023-07-01 15:30:54', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2871, '卡片', '卡片', '/profile/avatar/kapian (34).png', NULL, NULL, NULL, '2023-07-01 15:30:54', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2872, '卡片', '卡片', '/profile/avatar/kapian (35).png', NULL, NULL, NULL, '2023-07-01 15:30:54', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2873, '卡片', '卡片', '/profile/avatar/kapian (36).png', NULL, NULL, NULL, '2023-07-01 15:30:54', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2874, '卡片', '卡片', '/profile/avatar/kapian (37).png', NULL, NULL, NULL, '2023-07-01 15:30:54', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2875, '卡片', '卡片', '/profile/avatar/kapian (39).png', NULL, NULL, NULL, '2023-07-01 15:30:54', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2876, '卡片', '卡片', '/profile/avatar/kapian (38).png', NULL, NULL, NULL, '2023-07-01 15:30:55', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2877, '卡片', '卡片', '/profile/avatar/kapian (40).png', NULL, NULL, NULL, '2023-07-01 15:30:55', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2878, '卡片', '卡片', '/profile/avatar/kapian (41).png', NULL, NULL, NULL, '2023-07-01 15:30:55', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2879, '卡片', '卡片', '/profile/avatar/kapian (44).png', NULL, NULL, NULL, '2023-07-01 15:30:55', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2880, '卡片', '卡片', '/profile/avatar/kapian (43).png', NULL, NULL, NULL, '2023-07-01 15:30:55', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2881, '卡片', '卡片', '/profile/avatar/kapian (42).png', NULL, NULL, NULL, '2023-07-01 15:30:55', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2882, '卡片', '卡片', '/profile/avatar/kapian (45).png', NULL, NULL, NULL, '2023-07-01 15:30:55', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2883, '卡片', '卡片', '/profile/avatar/kapian (46).png', NULL, NULL, NULL, '2023-07-01 15:30:55', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2884, '卡片', '卡片', '/profile/avatar/kapian (50).png', NULL, NULL, NULL, '2023-07-01 15:30:55', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2885, '卡片', '卡片', '/profile/avatar/kapian (48).png', NULL, NULL, NULL, '2023-07-01 15:30:55', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2886, '卡片', '卡片', '/profile/avatar/kapian (47).png', NULL, NULL, NULL, '2023-07-01 15:30:55', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2887, '卡片', '卡片', '/profile/avatar/kapian (49).png', NULL, NULL, NULL, '2023-07-01 15:30:55', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2888, '卡片', '卡片', '/profile/avatar/kapian (51).png', NULL, NULL, NULL, '2023-07-01 15:30:55', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2889, '卡片', '卡片', '/profile/avatar/kapian (52).png', NULL, NULL, NULL, '2023-07-01 15:30:56', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2890, '卡片', '卡片', '/profile/avatar/kapian (53).png', NULL, NULL, NULL, '2023-07-01 15:30:56', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2891, '卡片', '卡片', '/profile/avatar/kapian (56).png', NULL, NULL, NULL, '2023-07-01 15:30:56', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2892, '卡片', '卡片', '/profile/avatar/kapian (54).png', NULL, NULL, NULL, '2023-07-01 15:30:56', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2893, '卡片', '卡片', '/profile/avatar/kapian (57).png', NULL, NULL, NULL, '2023-07-01 15:30:56', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2894, '卡片', '卡片', '/profile/avatar/kapian (55).png', NULL, NULL, NULL, '2023-07-01 15:30:56', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2895, '卡片', '卡片', '/profile/avatar/kapian (58).png', NULL, NULL, NULL, '2023-07-01 15:30:56', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2896, '卡片', '卡片', '/profile/avatar/kapian (62).png', NULL, NULL, NULL, '2023-07-01 15:30:56', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2897, '卡片', '卡片', '/profile/avatar/kapian (59).png', NULL, NULL, NULL, '2023-07-01 15:30:56', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2898, '卡片', '卡片', '/profile/avatar/kapian (61).png', NULL, NULL, NULL, '2023-07-01 15:30:56', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2899, '卡片', '卡片', '/profile/avatar/kapian (64).png', NULL, NULL, NULL, '2023-07-01 15:30:56', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2900, '卡片', '卡片', '/profile/avatar/kapian (60).png', NULL, NULL, NULL, '2023-07-01 15:30:56', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2901, '卡片', '卡片', '/profile/avatar/kapian (63).png', NULL, NULL, NULL, '2023-07-01 15:30:56', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2902, '卡片', '卡片', '/profile/avatar/kapian (65).png', NULL, NULL, NULL, '2023-07-01 15:30:57', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2903, '卡片', '卡片', '/profile/avatar/kapian (66).png', NULL, NULL, NULL, '2023-07-01 15:30:57', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2904, '卡片', '卡片', '/profile/avatar/kapian (69).png', NULL, NULL, NULL, '2023-07-01 15:30:57', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2905, '卡片', '卡片', '/profile/avatar/kapian (68).png', NULL, NULL, NULL, '2023-07-01 15:30:57', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2906, '卡片', '卡片', '/profile/avatar/kapian (67).png', NULL, NULL, NULL, '2023-07-01 15:30:57', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2907, '卡片', '卡片', '/profile/avatar/kapian (70).png', NULL, NULL, NULL, '2023-07-01 15:30:57', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2908, '卡片', '卡片', '/profile/avatar/kapian (71).png', NULL, NULL, NULL, '2023-07-01 15:30:57', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2909, '卡片', '卡片', '/profile/avatar/kapian (72).png', NULL, NULL, NULL, '2023-07-01 15:30:57', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2910, '卡片', '卡片', '/profile/avatar/kapian (73).png', NULL, NULL, NULL, '2023-07-01 15:30:57', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2911, '卡片', '卡片', '/profile/avatar/kapian (74).png', NULL, NULL, NULL, '2023-07-01 15:30:57', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2912, '卡片', '卡片', '/profile/avatar/kapian (75).png', NULL, NULL, NULL, '2023-07-01 15:30:57', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2913, '卡片', '卡片', '/profile/avatar/kapian (76).png', NULL, NULL, NULL, '2023-07-01 15:30:57', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2914, '卡片', '卡片', '/profile/avatar/kapian (78).png', NULL, NULL, NULL, '2023-07-01 15:30:57', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2915, '卡片', '卡片', '/profile/avatar/kapian (77).png', NULL, NULL, NULL, '2023-07-01 15:30:57', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2916, '卡片', '卡片', '/profile/avatar/kapian (80).png', NULL, NULL, NULL, '2023-07-01 15:30:58', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2917, '卡片', '卡片', '/profile/avatar/kapian (79).png', NULL, NULL, NULL, '2023-07-01 15:30:58', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2918, '卡片', '卡片', '/profile/avatar/kapian (82).png', NULL, NULL, NULL, '2023-07-01 15:30:58', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2919, '卡片', '卡片', '/profile/avatar/kapian (81).png', NULL, NULL, NULL, '2023-07-01 15:30:58', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2920, '卡片', '卡片', '/profile/avatar/kapian (84).png', NULL, NULL, NULL, '2023-07-01 15:30:58', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2921, '卡片', '卡片', '/profile/avatar/kapian (83).png', NULL, NULL, NULL, '2023-07-01 15:30:58', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2922, '卡片', '卡片', '/profile/avatar/kapian (85).png', NULL, NULL, NULL, '2023-07-01 15:30:58', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2923, '卡片', '卡片', '/profile/avatar/kapian (87).png', NULL, NULL, NULL, '2023-07-01 15:30:58', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2924, '卡片', '卡片', '/profile/avatar/kapian (86).png', NULL, NULL, NULL, '2023-07-01 15:30:58', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2925, '卡片', '卡片', '/profile/avatar/kapian (88).png', NULL, NULL, NULL, '2023-07-01 15:30:58', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2926, '卡片', '卡片', '/profile/avatar/kapian (89).png', NULL, NULL, NULL, '2023-07-01 15:30:58', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2927, '卡片', '卡片', '/profile/avatar/kapian (90).png', NULL, NULL, NULL, '2023-07-01 15:30:58', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2928, '卡片', '卡片', '/profile/avatar/kapian (92).png', NULL, NULL, NULL, '2023-07-01 15:30:58', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2929, '卡片', '卡片', '/profile/avatar/kapian (93).png', NULL, NULL, NULL, '2023-07-01 15:30:58', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2930, '卡片', '卡片', '/profile/avatar/kapian (91).png', NULL, NULL, NULL, '2023-07-01 15:30:58', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2931, '卡片', '卡片', '/profile/avatar/kapian (94).png', NULL, NULL, NULL, '2023-07-01 15:30:59', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2932, '卡片', '卡片', '/profile/avatar/kapian (95).png', NULL, NULL, NULL, '2023-07-01 15:30:59', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2933, '卡片', '卡片', '/profile/avatar/kapian (96).png', NULL, NULL, NULL, '2023-07-01 15:30:59', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2934, '卡片', '卡片', '/profile/avatar/kapian (97).png', NULL, NULL, NULL, '2023-07-01 15:30:59', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2935, '卡片', '卡片', '/profile/avatar/kapian (98).png', NULL, NULL, NULL, '2023-07-01 15:30:59', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2936, '空调系统', '空调系统', '/profile/avatar/kongtiaoxitong (1).svg', NULL, NULL, NULL, '2023-07-01 15:31:46', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2937, '空调系统', '空调系统', '/profile/avatar/kongtiaoxitong (3).svg', NULL, NULL, NULL, '2023-07-01 15:31:46', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2938, '空调系统', '空调系统', '/profile/avatar/kongtiaoxitong (2).svg', NULL, NULL, NULL, '2023-07-01 15:31:46', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2939, '空调系统', '空调系统', '/profile/avatar/kongtiaoxitong (4).svg', NULL, NULL, NULL, '2023-07-01 15:31:46', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2940, '空调系统', '空调系统', '/profile/avatar/kongtiaoxitong (5).svg', NULL, NULL, NULL, '2023-07-01 15:31:46', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2941, '空调系统', '空调系统', '/profile/avatar/kongtiaoxitong (6).svg', NULL, NULL, NULL, '2023-07-01 15:31:47', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2942, '空调系统', '空调系统', '/profile/avatar/kongtiaoxitong (7).svg', NULL, NULL, NULL, '2023-07-01 15:31:47', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2943, '空调系统', '空调系统', '/profile/avatar/kongtiaoxitong (8).svg', NULL, NULL, NULL, '2023-07-01 15:31:47', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2944, '空调系统', '空调系统', '/profile/avatar/kongtiaoxitong (11).svg', NULL, NULL, NULL, '2023-07-01 15:31:47', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2945, '空调系统', '空调系统', '/profile/avatar/kongtiaoxitong (9).svg', NULL, NULL, NULL, '2023-07-01 15:31:47', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2946, '空调系统', '空调系统', '/profile/avatar/kongtiaoxitong (10).svg', NULL, NULL, NULL, '2023-07-01 15:31:47', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2947, '空调系统', '空调系统', '/profile/avatar/kongtiaoxitong (12).svg', NULL, NULL, NULL, '2023-07-01 15:31:47', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2948, '空调系统', '空调系统', '/profile/avatar/kongtiaoxitong (13).svg', NULL, NULL, NULL, '2023-07-01 15:31:47', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2949, '空调系统', '空调系统', '/profile/avatar/kongtiaoxitong (14).svg', NULL, NULL, NULL, '2023-07-01 15:31:47', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2950, '空调系统', '空调系统', '/profile/avatar/kongtiaoxitong (17).svg', NULL, NULL, NULL, '2023-07-01 15:31:47', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2951, '空调系统', '空调系统', '/profile/avatar/kongtiaoxitong (18).svg', NULL, NULL, NULL, '2023-07-01 15:31:47', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2952, '空调系统', '空调系统', '/profile/avatar/kongtiaoxitong (16).svg', NULL, NULL, NULL, '2023-07-01 15:31:47', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2953, '空调系统', '空调系统', '/profile/avatar/kongtiaoxitong (19).svg', NULL, NULL, NULL, '2023-07-01 15:31:47', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2954, '空调系统', '空调系统', '/profile/avatar/kongtiaoxitong (15).svg', NULL, NULL, NULL, '2023-07-01 15:31:48', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2955, '空调系统', '空调系统', '/profile/avatar/kongtiaoxitong (20).svg', NULL, NULL, NULL, '2023-07-01 15:31:48', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2956, '空调系统', '空调系统', '/profile/avatar/kongtiaoxitong (21).svg', NULL, NULL, NULL, '2023-07-01 15:31:48', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2957, '空调系统', '空调系统', '/profile/avatar/kongtiaoxitong (23).svg', NULL, NULL, NULL, '2023-07-01 15:31:48', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2958, '空调系统', '空调系统', '/profile/avatar/kongtiaoxitong (22).svg', NULL, NULL, NULL, '2023-07-01 15:31:48', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2959, '空调系统', '空调系统', '/profile/avatar/kongtiaoxitong (25).svg', NULL, NULL, NULL, '2023-07-01 15:31:48', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2960, '空调系统', '空调系统', '/profile/avatar/kongtiaoxitong (24).svg', NULL, NULL, NULL, '2023-07-01 15:31:48', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2961, '空调系统', '空调系统', '/profile/avatar/kongtiaoxitong (26).svg', NULL, NULL, NULL, '2023-07-01 15:31:48', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2962, '空调系统', '空调系统', '/profile/avatar/kongtiaoxitong (27).svg', NULL, NULL, NULL, '2023-07-01 15:31:48', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2963, '空调系统', '空调系统', '/profile/avatar/kongtiaoxitong (28).svg', NULL, NULL, NULL, '2023-07-01 15:31:48', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2964, '空调系统', '空调系统', '/profile/avatar/kongtiaoxitong (29).svg', NULL, NULL, NULL, '2023-07-01 15:31:48', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2965, '空调系统', '空调系统', '/profile/avatar/kongtiaoxitong (31).svg', NULL, NULL, NULL, '2023-07-01 15:31:48', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2966, '空调系统', '空调系统', '/profile/avatar/kongtiaoxitong (30).svg', NULL, NULL, NULL, '2023-07-01 15:31:49', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2967, '空调系统', '空调系统', '/profile/avatar/kongtiaoxitong (32).svg', NULL, NULL, NULL, '2023-07-01 15:31:49', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2968, '空调系统', '空调系统', '/profile/avatar/kongtiaoxitong (34).svg', NULL, NULL, NULL, '2023-07-01 15:31:49', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2969, '空调系统', '空调系统', '/profile/avatar/kongtiaoxitong (35).svg', NULL, NULL, NULL, '2023-07-01 15:31:49', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2970, '空调系统', '空调系统', '/profile/avatar/kongtiaoxitong (33).svg', NULL, NULL, NULL, '2023-07-01 15:31:49', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2971, '空调系统', '空调系统', '/profile/avatar/kongtiaoxitong (36).svg', NULL, NULL, NULL, '2023-07-01 15:31:49', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2972, '空调系统', '空调系统', '/profile/avatar/kongtiaoxitong (39).svg', NULL, NULL, NULL, '2023-07-01 15:31:49', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2973, '空调系统', '空调系统', '/profile/avatar/kongtiaoxitong (37).svg', NULL, NULL, NULL, '2023-07-01 15:31:49', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2974, '空调系统', '空调系统', '/profile/avatar/kongtiaoxitong (41).svg', NULL, NULL, NULL, '2023-07-01 15:31:49', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2975, '空调系统', '空调系统', '/profile/avatar/kongtiaoxitong (40).svg', NULL, NULL, NULL, '2023-07-01 15:31:49', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2976, '空调系统', '空调系统', '/profile/avatar/kongtiaoxitong (42).svg', NULL, NULL, NULL, '2023-07-01 15:31:49', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2977, '空调系统', '空调系统', '/profile/avatar/kongtiaoxitong (38).svg', NULL, NULL, NULL, '2023-07-01 15:31:49', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2978, '空调系统', '空调系统', '/profile/avatar/kongtiaoxitong (43).svg', NULL, NULL, NULL, '2023-07-01 15:31:49', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2979, '空调系统', '空调系统', '/profile/avatar/kongtiaoxitong (44).svg', NULL, NULL, NULL, '2023-07-01 15:31:50', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2980, '空调系统', '空调系统', '/profile/avatar/kongtiaoxitong (45).svg', NULL, NULL, NULL, '2023-07-01 15:31:50', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2981, '空调系统', '空调系统', '/profile/avatar/kongtiaoxitong (46).svg', NULL, NULL, NULL, '2023-07-01 15:31:50', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2982, '空调系统', '空调系统', '/profile/avatar/kongtiaoxitong (47).svg', NULL, NULL, NULL, '2023-07-01 15:31:50', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2983, '空调系统', '空调系统', '/profile/avatar/kongtiaoxitong (48).svg', NULL, NULL, NULL, '2023-07-01 15:31:50', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2984, '空调系统', '空调系统', '/profile/avatar/kongtiaoxitong (49).svg', NULL, NULL, NULL, '2023-07-01 15:31:50', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2985, '空调系统', '空调系统', '/profile/avatar/kongtiaoxitong (50).svg', NULL, NULL, NULL, '2023-07-01 15:31:50', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2986, '空调系统', '空调系统', '/profile/avatar/kongtiaoxitong (52).svg', NULL, NULL, NULL, '2023-07-01 15:31:50', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2987, '空调系统', '空调系统', '/profile/avatar/kongtiaoxitong (54).svg', NULL, NULL, NULL, '2023-07-01 15:31:50', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2988, '空调系统', '空调系统', '/profile/avatar/kongtiaoxitong (53).svg', NULL, NULL, NULL, '2023-07-01 15:31:50', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2989, '空调系统', '空调系统', '/profile/avatar/kongtiaoxitong (51).svg', NULL, NULL, NULL, '2023-07-01 15:31:50', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2990, '空调系统', '空调系统', '/profile/avatar/kongtiaoxitong (55).svg', NULL, NULL, NULL, '2023-07-01 15:31:50', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2991, '空调系统', '空调系统', '/profile/avatar/kongtiaoxitong (56).svg', NULL, NULL, NULL, '2023-07-01 15:31:50', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2992, '空调系统', '空调系统', '/profile/avatar/kongtiaoxitong (57).svg', NULL, NULL, NULL, '2023-07-01 15:31:51', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2993, '空调系统', '空调系统', '/profile/avatar/kongtiaoxitong (59).svg', NULL, NULL, NULL, '2023-07-01 15:31:51', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2994, '空调系统', '空调系统', '/profile/avatar/kongtiaoxitong (60).svg', NULL, NULL, NULL, '2023-07-01 15:31:51', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2995, '空调系统', '空调系统', '/profile/avatar/kongtiaoxitong (58).svg', NULL, NULL, NULL, '2023-07-01 15:31:51', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2996, '空调系统', '空调系统', '/profile/avatar/kongtiaoxitong (62).svg', NULL, NULL, NULL, '2023-07-01 15:31:51', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2997, '空调系统', '空调系统', '/profile/avatar/kongtiaoxitong (61).svg', NULL, NULL, NULL, '2023-07-01 15:31:51', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2998, '空调系统', '空调系统', '/profile/avatar/kongtiaoxitong (63).svg', NULL, NULL, NULL, '2023-07-01 15:31:51', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (2999, '空调系统', '空调系统', '/profile/avatar/kongtiaoxitong (64).svg', NULL, NULL, NULL, '2023-07-01 15:31:51', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3000, '空调系统', '空调系统', '/profile/avatar/kongtiaoxitong (66).svg', NULL, NULL, NULL, '2023-07-01 15:31:51', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3001, '空调系统', '空调系统', '/profile/avatar/kongtiaoxitong (68).svg', NULL, NULL, NULL, '2023-07-01 15:31:51', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3002, '空调系统', '空调系统', '/profile/avatar/kongtiaoxitong (65).svg', NULL, NULL, NULL, '2023-07-01 15:31:51', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3003, '空调系统', '空调系统', '/profile/avatar/kongtiaoxitong (67).svg', NULL, NULL, NULL, '2023-07-01 15:31:51', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3004, '空调系统', '空调系统', '/profile/avatar/kongtiaoxitong (69).svg', NULL, NULL, NULL, '2023-07-01 15:31:51', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3005, '空调系统', '空调系统', '/profile/avatar/kongtiaoxitong (71).svg', NULL, NULL, NULL, '2023-07-01 15:31:52', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3006, '空调系统', '空调系统', '/profile/avatar/kongtiaoxitong (74).svg', NULL, NULL, NULL, '2023-07-01 15:31:52', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3007, '空调系统', '空调系统', '/profile/avatar/kongtiaoxitong (72).svg', NULL, NULL, NULL, '2023-07-01 15:31:52', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3008, '空调系统', '空调系统', '/profile/avatar/kongtiaoxitong (73).svg', NULL, NULL, NULL, '2023-07-01 15:31:52', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3009, '空调系统', '空调系统', '/profile/avatar/kongtiaoxitong (70).svg', NULL, NULL, NULL, '2023-07-01 15:31:52', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3010, '空调系统', '空调系统', '/profile/avatar/kongtiaoxitong (75).svg', NULL, NULL, NULL, '2023-07-01 15:31:52', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3011, '空调系统', '空调系统', '/profile/avatar/kongtiaoxitong (76).svg', NULL, NULL, NULL, '2023-07-01 15:31:52', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3012, '空调系统', '空调系统', '/profile/avatar/kongtiaoxitong (79).svg', NULL, NULL, NULL, '2023-07-01 15:31:52', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3013, '空调系统', '空调系统', '/profile/avatar/kongtiaoxitong (78).svg', NULL, NULL, NULL, '2023-07-01 15:31:52', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3014, '空调系统', '空调系统', '/profile/avatar/kongtiaoxitong (81).svg', NULL, NULL, NULL, '2023-07-01 15:31:52', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3015, '空调系统', '空调系统', '/profile/avatar/kongtiaoxitong (77).svg', NULL, NULL, NULL, '2023-07-01 15:31:52', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3016, '空调系统', '空调系统', '/profile/avatar/kongtiaoxitong (80).svg', NULL, NULL, NULL, '2023-07-01 15:31:52', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3017, '空调系统', '空调系统', '/profile/avatar/kongtiaoxitong (82).svg', NULL, NULL, NULL, '2023-07-01 15:31:52', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3018, '空调系统', '空调系统', '/profile/avatar/kongtiaoxitong (84).svg', NULL, NULL, NULL, '2023-07-01 15:31:53', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3019, '空调系统', '空调系统', '/profile/avatar/kongtiaoxitong (86).svg', NULL, NULL, NULL, '2023-07-01 15:31:53', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3020, '空调系统', '空调系统', '/profile/avatar/kongtiaoxitong (85).svg', NULL, NULL, NULL, '2023-07-01 15:31:53', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3021, '空调系统', '空调系统', '/profile/avatar/kongtiaoxitong (83).svg', NULL, NULL, NULL, '2023-07-01 15:31:53', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3022, '空调系统', '空调系统', '/profile/avatar/kongtiaoxitong (87).svg', NULL, NULL, NULL, '2023-07-01 15:31:53', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3023, '空调系统', '空调系统', '/profile/avatar/kongtiaoxitong (88).svg', NULL, NULL, NULL, '2023-07-01 15:31:53', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3024, '空调系统', '空调系统', '/profile/avatar/kongtiaoxitong (89).svg', NULL, NULL, NULL, '2023-07-01 15:31:53', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3025, '空调系统', '空调系统', '/profile/avatar/kongtiaoxitong (90).svg', NULL, NULL, NULL, '2023-07-01 15:31:53', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3026, '空调系统', '空调系统', '/profile/avatar/kongtiaoxitong (92).svg', NULL, NULL, NULL, '2023-07-01 15:31:53', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3027, '空调系统', '空调系统', '/profile/avatar/kongtiaoxitong (91).svg', NULL, NULL, NULL, '2023-07-01 15:31:53', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3028, '空调系统', '空调系统', '/profile/avatar/kongtiaoxitong (94).svg', NULL, NULL, NULL, '2023-07-01 15:31:53', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3029, '空调系统', '空调系统', '/profile/avatar/kongtiaoxitong (93).svg', NULL, NULL, NULL, '2023-07-01 15:31:53', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3030, '空调系统', '空调系统', '/profile/avatar/kongtiaoxitong (95).svg', NULL, NULL, NULL, '2023-07-01 15:31:53', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3031, '空调系统', '空调系统', '/profile/avatar/kongtiaoxitong (98).svg', NULL, NULL, NULL, '2023-07-01 15:31:54', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3032, '空调系统', '空调系统', '/profile/avatar/kongtiaoxitong (97).svg', NULL, NULL, NULL, '2023-07-01 15:31:54', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3033, '空调系统', '空调系统', '/profile/avatar/kongtiaoxitong (96).svg', NULL, NULL, NULL, '2023-07-01 15:31:54', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3034, '空调系统', '空调系统', '/profile/avatar/kongtiaoxitong (100).svg', NULL, NULL, NULL, '2023-07-01 15:31:54', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3035, '空调系统', '空调系统', '/profile/avatar/kongtiaoxitong (99).svg', NULL, NULL, NULL, '2023-07-01 15:31:54', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3036, '空调系统', '空调系统', '/profile/avatar/kongtiaoxitong (101).svg', NULL, NULL, NULL, '2023-07-01 15:31:54', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3037, '空调系统', '空调系统', '/profile/avatar/kongtiaoxitong (102).svg', NULL, NULL, NULL, '2023-07-01 15:31:54', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3038, '空调系统', '空调系统', '/profile/avatar/kongtiaoxitong (105).svg', NULL, NULL, NULL, '2023-07-01 15:31:54', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3039, '空调系统', '空调系统', '/profile/avatar/kongtiaoxitong (104).svg', NULL, NULL, NULL, '2023-07-01 15:31:54', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3040, '空调系统', '空调系统', '/profile/avatar/kongtiaoxitong (103).svg', NULL, NULL, NULL, '2023-07-01 15:31:54', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3041, '空调系统', '空调系统', '/profile/avatar/kongtiaoxitong (107).svg', NULL, NULL, NULL, '2023-07-01 15:31:54', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3042, '空调系统', '空调系统', '/profile/avatar/kongtiaoxitong (106).svg', NULL, NULL, NULL, '2023-07-01 15:31:54', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3043, '空调系统', '空调系统', '/profile/avatar/kongtiaoxitong (108).svg', NULL, NULL, NULL, '2023-07-01 15:31:54', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3044, '空调系统', '空调系统', '/profile/avatar/kongtiaoxitong (109).svg', NULL, NULL, NULL, '2023-07-01 15:31:55', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3045, '空调系统', '空调系统', '/profile/avatar/kongtiaoxitong (110).svg', NULL, NULL, NULL, '2023-07-01 15:31:55', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3046, '空调系统', '空调系统', '/profile/avatar/kongtiaoxitong (111).svg', NULL, NULL, NULL, '2023-07-01 15:31:55', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3047, '空调系统', '空调系统', '/profile/avatar/kongtiaoxitong (112).svg', NULL, NULL, NULL, '2023-07-01 15:31:55', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3048, '空调系统', '空调系统', '/profile/avatar/kongtiaoxitong (113).svg', NULL, NULL, NULL, '2023-07-01 15:31:55', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3049, '空调系统', '空调系统', '/profile/avatar/kongtiaoxitong (114).svg', NULL, NULL, NULL, '2023-07-01 15:31:55', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3050, '空调系统', '空调系统', '/profile/avatar/kongtiaoxitong (117).svg', NULL, NULL, NULL, '2023-07-01 15:31:55', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3051, '空调系统', '空调系统', '/profile/avatar/kongtiaoxitong (115).svg', NULL, NULL, NULL, '2023-07-01 15:31:55', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3052, '空调系统', '空调系统', '/profile/avatar/kongtiaoxitong (116).svg', NULL, NULL, NULL, '2023-07-01 15:31:55', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3053, '空调系统', '空调系统', '/profile/avatar/kongtiaoxitong (118).svg', NULL, NULL, NULL, '2023-07-01 15:31:55', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3054, '空调系统', '空调系统', '/profile/avatar/kongtiaoxitong (119).svg', NULL, NULL, NULL, '2023-07-01 15:31:55', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3055, '空调系统', '空调系统', '/profile/avatar/kongtiaoxitong (120).svg', NULL, NULL, NULL, '2023-07-01 15:31:55', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3056, '空调系统', '空调系统', '/profile/avatar/kongtiaoxitong (121).svg', NULL, NULL, NULL, '2023-07-01 15:31:55', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3057, '空调系统', '空调系统', '/profile/avatar/kongtiaoxitong (122).svg', NULL, NULL, NULL, '2023-07-01 15:31:55', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3058, '空调系统', '空调系统', '/profile/avatar/kongtiaoxitong (123).svg', NULL, NULL, NULL, '2023-07-01 15:31:56', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3059, '空调系统', '空调系统', '/profile/avatar/kongtiaoxitong (124).svg', NULL, NULL, NULL, '2023-07-01 15:31:56', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3060, '空调系统', '空调系统', '/profile/avatar/kongtiaoxitong (125).svg', NULL, NULL, NULL, '2023-07-01 15:31:56', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3061, '空调系统', '空调系统', '/profile/avatar/kongtiaoxitong (126).svg', NULL, NULL, NULL, '2023-07-01 15:31:56', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3062, '空调系统', '空调系统', '/profile/avatar/kongtiaoxitong (127).svg', NULL, NULL, NULL, '2023-07-01 15:31:56', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3063, '空调系统', '空调系统', '/profile/avatar/kongtiaoxitong (129).svg', NULL, NULL, NULL, '2023-07-01 15:31:56', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3064, '空调系统', '空调系统', '/profile/avatar/kongtiaoxitong (130).svg', NULL, NULL, NULL, '2023-07-01 15:31:56', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3065, '空调系统', '空调系统', '/profile/avatar/kongtiaoxitong (128).svg', NULL, NULL, NULL, '2023-07-01 15:31:56', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3066, '空调系统', '空调系统', '/profile/avatar/kongtiaoxitong (132).svg', NULL, NULL, NULL, '2023-07-01 15:31:56', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3067, '空调系统', '空调系统', '/profile/avatar/kongtiaoxitong (131).svg', NULL, NULL, NULL, '2023-07-01 15:31:56', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3068, '空调系统', '空调系统', '/profile/avatar/kongtiaoxitong (134).svg', NULL, NULL, NULL, '2023-07-01 15:31:56', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3069, '空调系统', '空调系统', '/profile/avatar/kongtiaoxitong (133).svg', NULL, NULL, NULL, '2023-07-01 15:31:56', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3070, '空调系统', '空调系统', '/profile/avatar/kongtiaoxitong (135).svg', NULL, NULL, NULL, '2023-07-01 15:31:56', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3071, '空调系统', '空调系统', '/profile/avatar/kongtiaoxitong (136).svg', NULL, NULL, NULL, '2023-07-01 15:31:56', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3072, '空调系统', '空调系统', '/profile/avatar/kongtiaoxitong (137).svg', NULL, NULL, NULL, '2023-07-01 15:31:57', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3073, '空调系统', '空调系统', '/profile/avatar/kongtiaoxitong (138).svg', NULL, NULL, NULL, '2023-07-01 15:31:57', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3074, '空调系统', '空调系统', '/profile/avatar/kongtiaoxitong (140).svg', NULL, NULL, NULL, '2023-07-01 15:31:57', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3075, '空调系统', '空调系统', '/profile/avatar/kongtiaoxitong (139).svg', NULL, NULL, NULL, '2023-07-01 15:31:57', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3076, '空调系统', '空调系统', '/profile/avatar/kongtiaoxitong (141).svg', NULL, NULL, NULL, '2023-07-01 15:31:57', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3077, '空调系统', '空调系统', '/profile/avatar/kongtiaoxitong (142).svg', NULL, NULL, NULL, '2023-07-01 15:31:57', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3078, '空调系统', '空调系统', '/profile/avatar/kongtiaoxitong (143).svg', NULL, NULL, NULL, '2023-07-01 15:31:57', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3079, '空调系统', '空调系统', '/profile/avatar/kongtiaoxitong (145).svg', NULL, NULL, NULL, '2023-07-01 15:31:57', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3080, '空调系统', '空调系统', '/profile/avatar/kongtiaoxitong (144).svg', NULL, NULL, NULL, '2023-07-01 15:31:57', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3081, '空调系统', '空调系统', '/profile/avatar/kongtiaoxitong (146).svg', NULL, NULL, NULL, '2023-07-01 15:31:57', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3082, '空调系统', '空调系统', '/profile/avatar/kongtiaoxitong (147).svg', NULL, NULL, NULL, '2023-07-01 15:31:57', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3083, '空调系统', '空调系统', '/profile/avatar/kongtiaoxitong (148).svg', NULL, NULL, NULL, '2023-07-01 15:31:57', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3084, '空调系统', '空调系统', '/profile/avatar/kongtiaoxitong (149).svg', NULL, NULL, NULL, '2023-07-01 15:31:58', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3085, '空调系统', '空调系统', '/profile/avatar/kongtiaoxitong (150).svg', NULL, NULL, NULL, '2023-07-01 15:31:58', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3086, '空调系统', '空调系统', '/profile/avatar/kongtiaoxitong (151).svg', NULL, NULL, NULL, '2023-07-01 15:31:58', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3087, '空调系统', '空调系统', '/profile/avatar/kongtiaoxitong (152).svg', NULL, NULL, NULL, '2023-07-01 15:31:58', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3088, '空调系统', '空调系统', '/profile/avatar/kongtiaoxitong (153).svg', NULL, NULL, NULL, '2023-07-01 15:31:58', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3089, '空调系统', '空调系统', '/profile/avatar/kongtiaoxitong (154).svg', NULL, NULL, NULL, '2023-07-01 15:31:58', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3090, '空调系统', '空调系统', '/profile/avatar/kongtiaoxitong (156).svg', NULL, NULL, NULL, '2023-07-01 15:31:58', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3091, '空调系统', '空调系统', '/profile/avatar/kongtiaoxitong (155).svg', NULL, NULL, NULL, '2023-07-01 15:31:58', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3092, '指示灯', '指示灯', '/profile/avatar/指示灯 (1).gif', NULL, NULL, NULL, '2023-07-01 15:33:02', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3093, '指示灯', '指示灯', '/profile/avatar/指示灯 (1).svg', NULL, NULL, NULL, '2023-07-01 15:33:02', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3094, '指示灯', '指示灯', '/profile/avatar/指示灯 (1).jpg', NULL, NULL, NULL, '2023-07-01 15:33:02', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3095, '指示灯', '指示灯', '/profile/avatar/指示灯 (2).gif', NULL, NULL, NULL, '2023-07-01 15:33:02', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3096, '指示灯', '指示灯', '/profile/avatar/指示灯 (2).svg', NULL, NULL, NULL, '2023-07-01 15:33:02', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3097, '指示灯', '指示灯', '/profile/avatar/指示灯 (3).gif', NULL, NULL, NULL, '2023-07-01 15:33:02', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3098, '指示灯', '指示灯', '/profile/avatar/指示灯 (4).gif', NULL, NULL, NULL, '2023-07-01 15:33:03', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3099, '指示灯', '指示灯', '/profile/avatar/指示灯 (3).svg', NULL, NULL, NULL, '2023-07-01 15:33:03', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3100, '指示灯', '指示灯', '/profile/avatar/指示灯 (4).svg', NULL, NULL, NULL, '2023-07-01 15:33:03', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3101, '指示灯', '指示灯', '/profile/avatar/指示灯 (5).svg', NULL, NULL, NULL, '2023-07-01 15:33:03', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3102, '指示灯', '指示灯', '/profile/avatar/指示灯 (6).gif', NULL, NULL, NULL, '2023-07-01 15:33:03', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3103, '指示灯', '指示灯', '/profile/avatar/指示灯 (5).gif', NULL, NULL, NULL, '2023-07-01 15:33:03', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3104, '指示灯', '指示灯', '/profile/avatar/指示灯 (6).svg', NULL, NULL, NULL, '2023-07-01 15:33:03', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3105, '指示灯', '指示灯', '/profile/avatar/指示灯 (8).gif', NULL, NULL, NULL, '2023-07-01 15:33:03', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3106, '指示灯', '指示灯', '/profile/avatar/指示灯 (7).svg', NULL, NULL, NULL, '2023-07-01 15:33:03', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3107, '指示灯', '指示灯', '/profile/avatar/指示灯 (8).svg', NULL, NULL, NULL, '2023-07-01 15:33:03', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3108, '指示灯', '指示灯', '/profile/avatar/指示灯 (7).gif', NULL, NULL, NULL, '2023-07-01 15:33:03', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3109, '指示灯', '指示灯', '/profile/avatar/指示灯 (9).gif', NULL, NULL, NULL, '2023-07-01 15:33:03', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3110, '指示灯', '指示灯', '/profile/avatar/指示灯 (10).svg', NULL, NULL, NULL, '2023-07-01 15:33:04', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3111, '指示灯', '指示灯', '/profile/avatar/指示灯 (9).svg', NULL, NULL, NULL, '2023-07-01 15:33:04', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3112, '指示灯', '指示灯', '/profile/avatar/指示灯 (10).gif', NULL, NULL, NULL, '2023-07-01 15:33:04', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3113, '指示灯', '指示灯', '/profile/avatar/指示灯 (11).svg', NULL, NULL, NULL, '2023-07-01 15:33:04', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3114, '指示灯', '指示灯', '/profile/avatar/指示灯 (11).gif', NULL, NULL, NULL, '2023-07-01 15:33:04', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3115, '指示灯', '指示灯', '/profile/avatar/指示灯 (14).svg', NULL, NULL, NULL, '2023-07-01 15:33:04', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3116, '指示灯', '指示灯', '/profile/avatar/指示灯 (12).svg', NULL, NULL, NULL, '2023-07-01 15:33:04', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3117, '指示灯', '指示灯', '/profile/avatar/指示灯 (13).svg', NULL, NULL, NULL, '2023-07-01 15:33:04', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3118, '指示灯', '指示灯', '/profile/avatar/指示灯 (16).svg', NULL, NULL, NULL, '2023-07-01 15:33:04', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3119, '指示灯', '指示灯', '/profile/avatar/指示灯 (15).svg', NULL, NULL, NULL, '2023-07-01 15:33:04', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3120, '指示灯', '指示灯', '/profile/avatar/指示灯 (17).svg', NULL, NULL, NULL, '2023-07-01 15:33:04', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3121, '指示灯', '指示灯', '/profile/avatar/指示灯 (18).svg', NULL, NULL, NULL, '2023-07-01 15:33:04', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3122, '指示灯', '指示灯', '/profile/avatar/指示灯 (19).svg', NULL, NULL, NULL, '2023-07-01 15:33:04', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3123, '指示灯', '指示灯', '/profile/avatar/指示灯 (20).svg', NULL, NULL, NULL, '2023-07-01 15:33:05', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3124, '指示灯', '指示灯', '/profile/avatar/指示灯 (22).svg', NULL, NULL, NULL, '2023-07-01 15:33:05', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3125, '指示灯', '指示灯', '/profile/avatar/指示灯 (21).svg', NULL, NULL, NULL, '2023-07-01 15:33:05', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3126, '指示灯', '指示灯', '/profile/avatar/指示灯 (26).svg', NULL, NULL, NULL, '2023-07-01 15:33:05', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3127, '指示灯', '指示灯', '/profile/avatar/指示灯 (23).svg', NULL, NULL, NULL, '2023-07-01 15:33:05', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3128, '指示灯', '指示灯', '/profile/avatar/指示灯 (24).svg', NULL, NULL, NULL, '2023-07-01 15:33:05', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3129, '指示灯', '指示灯', '/profile/avatar/指示灯 (25).svg', NULL, NULL, NULL, '2023-07-01 15:33:05', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3130, '指示灯', '指示灯', '/profile/avatar/指示灯 (27).svg', NULL, NULL, NULL, '2023-07-01 15:33:05', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3131, '指示灯', '指示灯', '/profile/avatar/指示灯 (29).svg', NULL, NULL, NULL, '2023-07-01 15:33:05', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3132, '指示灯', '指示灯', '/profile/avatar/指示灯 (28).svg', NULL, NULL, NULL, '2023-07-01 15:33:05', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3133, '指示灯', '指示灯', '/profile/avatar/指示灯 (30).svg', NULL, NULL, NULL, '2023-07-01 15:33:05', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3134, '指示灯', '指示灯', '/profile/avatar/指示灯 (32).svg', NULL, NULL, NULL, '2023-07-01 15:33:05', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3135, '指示灯', '指示灯', '/profile/avatar/指示灯 (31).svg', NULL, NULL, NULL, '2023-07-01 15:33:05', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3136, '指示灯', '指示灯', '/profile/avatar/指示灯 (33).svg', NULL, NULL, NULL, '2023-07-01 15:33:06', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3137, '指示灯', '指示灯', '/profile/avatar/指示灯 (35).svg', NULL, NULL, NULL, '2023-07-01 15:33:06', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3138, '指示灯', '指示灯', '/profile/avatar/指示灯 (34).svg', NULL, NULL, NULL, '2023-07-01 15:33:06', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3139, '指示灯', '指示灯', '/profile/avatar/指示灯 (36).svg', NULL, NULL, NULL, '2023-07-01 15:33:06', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3140, '指示灯', '指示灯', '/profile/avatar/指示灯 (37).svg', NULL, NULL, NULL, '2023-07-01 15:33:06', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3141, '指示灯', '指示灯', '/profile/avatar/指示灯 (38).svg', NULL, NULL, NULL, '2023-07-01 15:33:06', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3142, '指示灯', '指示灯', '/profile/avatar/指示灯 (39).svg', NULL, NULL, NULL, '2023-07-01 15:33:06', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3143, '指示灯', '指示灯', '/profile/avatar/指示灯 (41).svg', NULL, NULL, NULL, '2023-07-01 15:33:06', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3144, '指示灯', '指示灯', '/profile/avatar/指示灯 (42).svg', NULL, NULL, NULL, '2023-07-01 15:33:06', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3145, '指示灯', '指示灯', '/profile/avatar/指示灯 (40).svg', NULL, NULL, NULL, '2023-07-01 15:33:06', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3146, '1139.png', '背景模板', '/profile/avatar/1139.png', NULL, NULL, NULL, '2023-07-01 15:34:45', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3147, '1140.png', '背景模板', '/profile/avatar/1140.png', NULL, NULL, NULL, '2023-07-01 15:34:45', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3148, '1141.png', '背景模板', '/profile/avatar/1141.png', NULL, NULL, NULL, '2023-07-01 15:34:45', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3149, '1138.png', '背景模板', '/profile/avatar/1138.png', NULL, NULL, NULL, '2023-07-01 15:34:45', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3150, '1142.png', '背景模板', '/profile/avatar/1142.png', NULL, NULL, NULL, '2023-07-01 15:34:45', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3151, '1137.png', '背景模板', '/profile/avatar/1137.png', NULL, NULL, NULL, '2023-07-01 15:34:45', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3152, '1146.png', '背景模板', '/profile/avatar/1146.png', NULL, NULL, NULL, '2023-07-01 15:34:46', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3153, '1145.png', '背景模板', '/profile/avatar/1145.png', NULL, NULL, NULL, '2023-07-01 15:34:46', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3154, '1143.jpg', '背景模板', '/profile/avatar/1143.jpg', NULL, NULL, NULL, '2023-07-01 15:34:46', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3155, '1147.png', '背景模板', '/profile/avatar/1147.png', NULL, NULL, NULL, '2023-07-01 15:34:46', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3156, '1148.png', '背景模板', '/profile/avatar/1148.png', NULL, NULL, NULL, '2023-07-01 15:34:46', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3157, '1150.png', '背景模板', '/profile/avatar/1150.png', NULL, NULL, NULL, '2023-07-01 15:34:46', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3158, '1144.png', '背景模板', '/profile/avatar/1144.png', NULL, NULL, NULL, '2023-07-01 15:34:46', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3159, '1149.png', '背景模板', '/profile/avatar/1149.png', NULL, NULL, NULL, '2023-07-01 15:34:46', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3160, '1153.png', '背景模板', '/profile/avatar/1153.png', NULL, NULL, NULL, '2023-07-01 15:34:46', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3161, '1151.jpg', '背景模板', '/profile/avatar/1151.jpg', NULL, NULL, NULL, '2023-07-01 15:34:46', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3162, '1157.jpg', '背景模板', '/profile/avatar/1157.jpg', NULL, NULL, NULL, '2023-07-01 15:34:46', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3163, '1154.png', '背景模板', '/profile/avatar/1154.png', NULL, NULL, NULL, '2023-07-01 15:34:46', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3164, '1155.png', '背景模板', '/profile/avatar/1155.png', NULL, NULL, NULL, '2023-07-01 15:34:46', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3165, '1156.png', '背景模板', '/profile/avatar/1156.png', NULL, NULL, NULL, '2023-07-01 15:34:46', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3166, '1163.png', '背景模板', '/profile/avatar/1163.png', NULL, NULL, NULL, '2023-07-01 15:34:47', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3167, '1161.png', '背景模板', '/profile/avatar/1161.png', NULL, NULL, NULL, '2023-07-01 15:34:47', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3168, '1159.png', '背景模板', '/profile/avatar/1159.png', NULL, NULL, NULL, '2023-07-01 15:34:47', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3169, '1160.png', '背景模板', '/profile/avatar/1160.png', NULL, NULL, NULL, '2023-07-01 15:34:47', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3170, '1162.png', '背景模板', '/profile/avatar/1162.png', NULL, NULL, NULL, '2023-07-01 15:34:47', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3171, '1164.png', '背景模板', '/profile/avatar/1164.png', NULL, NULL, NULL, '2023-07-01 15:34:47', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3172, '1168.png', '背景模板', '/profile/avatar/1168.png', NULL, NULL, NULL, '2023-07-01 15:34:47', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3173, '1166.png', '背景模板', '/profile/avatar/1166.png', NULL, NULL, NULL, '2023-07-01 15:34:47', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3174, '1165.jpg', '背景模板', '/profile/avatar/1165.jpg', NULL, NULL, NULL, '2023-07-01 15:34:47', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3175, '1167.png', '背景模板', '/profile/avatar/1167.png', NULL, NULL, NULL, '2023-07-01 15:34:48', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3176, '1169.png', '背景模板', '/profile/avatar/1169.png', NULL, NULL, NULL, '2023-07-01 15:34:48', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3177, '1170.png', '背景模板', '/profile/avatar/1170.png', NULL, NULL, NULL, '2023-07-01 15:34:48', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3178, '1158.png', '背景模板', '/profile/avatar/1158.png', NULL, NULL, NULL, '2023-07-01 15:34:48', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3179, '1174.png', '背景模板', '/profile/avatar/1174.png', NULL, NULL, NULL, '2023-07-01 15:34:48', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3180, '1171.png', '背景模板', '/profile/avatar/1171.png', NULL, NULL, NULL, '2023-07-01 15:34:48', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3181, '1172.png', '背景模板', '/profile/avatar/1172.png', NULL, NULL, NULL, '2023-07-01 15:34:48', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3182, '1173.jpg', '背景模板', '/profile/avatar/1173.jpg', NULL, NULL, NULL, '2023-07-01 15:34:48', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3183, '1175.png', '背景模板', '/profile/avatar/1175.png', NULL, NULL, NULL, '2023-07-01 15:34:48', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3184, '1177.jpg', '背景模板', '/profile/avatar/1177.jpg', NULL, NULL, NULL, '2023-07-01 15:34:48', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3185, '1176.png', '背景模板', '/profile/avatar/1176.png', NULL, NULL, NULL, '2023-07-01 15:34:49', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3186, '1178.png', '背景模板', '/profile/avatar/1178.png', NULL, NULL, NULL, '2023-07-01 15:34:49', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3187, '1180.png', '背景模板', '/profile/avatar/1180.png', NULL, NULL, NULL, '2023-07-01 15:34:49', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3188, '1181.png', '背景模板', '/profile/avatar/1181.png', NULL, NULL, NULL, '2023-07-01 15:34:49', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3189, '1179.png', '背景模板', '/profile/avatar/1179.png', NULL, NULL, NULL, '2023-07-01 15:34:49', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3190, '1186.png', '背景模板', '/profile/avatar/1186.png', NULL, NULL, NULL, '2023-07-01 15:34:49', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3191, '1185.png', '背景模板', '/profile/avatar/1185.png', NULL, NULL, NULL, '2023-07-01 15:34:49', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3192, '1187.jpg', '背景模板', '/profile/avatar/1187.jpg', NULL, NULL, NULL, '2023-07-01 15:34:49', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3193, '1182.png', '背景模板', '/profile/avatar/1182.png', NULL, NULL, NULL, '2023-07-01 15:34:49', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3194, '1188.jpg', '背景模板', '/profile/avatar/1188.jpg', NULL, NULL, NULL, '2023-07-01 15:34:50', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3195, '1183.png', '背景模板', '/profile/avatar/1183.png', NULL, NULL, NULL, '2023-07-01 15:34:50', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3196, '1189.png', '背景模板', '/profile/avatar/1189.png', NULL, NULL, NULL, '2023-07-01 15:34:50', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3197, '1191.png', '背景模板', '/profile/avatar/1191.png', NULL, NULL, NULL, '2023-07-01 15:34:50', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3198, '1184.png', '背景模板', '/profile/avatar/1184.png', NULL, NULL, NULL, '2023-07-01 15:34:50', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3199, '1152.png', '背景模板', '/profile/avatar/1152.png', NULL, NULL, NULL, '2023-07-01 15:34:50', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3200, '1193.png', '背景模板', '/profile/avatar/1193.png', NULL, NULL, NULL, '2023-07-01 15:34:50', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3201, '1190.png', '背景模板', '/profile/avatar/1190.png', NULL, NULL, NULL, '2023-07-01 15:34:50', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3202, '1192.png', '背景模板', '/profile/avatar/1192.png', NULL, NULL, NULL, '2023-07-01 15:34:50', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3203, '1256.jpg', '背景模板', '/profile/avatar/1256.jpg', NULL, NULL, NULL, '2023-07-01 15:34:51', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3204, '1258.jpg', '背景模板', '/profile/avatar/1258.jpg', NULL, NULL, NULL, '2023-07-01 15:34:51', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3205, '1293.png', '背景模板', '/profile/avatar/1293.png', NULL, NULL, NULL, '2023-07-01 15:34:51', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3206, '1259.jpg', '背景模板', '/profile/avatar/1259.jpg', NULL, NULL, NULL, '2023-07-01 15:34:51', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3207, '1261.jpg', '背景模板', '/profile/avatar/1261.jpg', NULL, NULL, NULL, '2023-07-01 15:34:51', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3208, '1260.jpg', '背景模板', '/profile/avatar/1260.jpg', NULL, NULL, NULL, '2023-07-01 15:34:51', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3209, '1257.jpg', '背景模板', '/profile/avatar/1257.jpg', NULL, NULL, NULL, '2023-07-01 15:34:51', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3210, '1262.jpg', '背景模板', '/profile/avatar/1262.jpg', NULL, NULL, NULL, '2023-07-01 15:34:51', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3211, '1294.png', '背景模板', '/profile/avatar/1294.png', NULL, NULL, NULL, '2023-07-01 15:34:51', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3212, '1296.png', '背景模板', '/profile/avatar/1296.png', NULL, NULL, NULL, '2023-07-01 15:34:51', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3213, '1292.jpg', '背景模板', '/profile/avatar/1292.jpg', NULL, NULL, NULL, '2023-07-01 15:34:51', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3214, '1263.jpg', '背景模板', '/profile/avatar/1263.jpg', NULL, NULL, NULL, '2023-07-01 15:34:52', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3215, '1295.png', '背景模板', '/profile/avatar/1295.png', NULL, NULL, NULL, '2023-07-01 15:34:52', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3216, '1299.png', '背景模板', '/profile/avatar/1299.png', NULL, NULL, NULL, '2023-07-01 15:34:52', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3217, '1298.png', '背景模板', '/profile/avatar/1298.png', NULL, NULL, NULL, '2023-07-01 15:34:52', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3218, '1300.png', '背景模板', '/profile/avatar/1300.png', NULL, NULL, NULL, '2023-07-01 15:34:52', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3219, '1301.png', '背景模板', '/profile/avatar/1301.png', NULL, NULL, NULL, '2023-07-01 15:34:52', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3220, '1297.jpg', '背景模板', '/profile/avatar/1297.jpg', NULL, NULL, NULL, '2023-07-01 15:34:52', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3221, '1303.png', '背景模板', '/profile/avatar/1303.png', NULL, NULL, NULL, '2023-07-01 15:34:52', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3222, '1302.png', '背景模板', '/profile/avatar/1302.png', NULL, NULL, NULL, '2023-07-01 15:34:52', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3223, '1304.png', '背景模板', '/profile/avatar/1304.png', NULL, NULL, NULL, '2023-07-01 15:34:52', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3224, '1305.png', '背景模板', '/profile/avatar/1305.png', NULL, NULL, NULL, '2023-07-01 15:34:52', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3225, '1318.png', '背景模板', '/profile/avatar/1318.png', NULL, NULL, NULL, '2023-07-01 15:34:52', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3226, '1316.png', '背景模板', '/profile/avatar/1316.png', NULL, NULL, NULL, '2023-07-01 15:34:53', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3227, '1317.png', '背景模板', '/profile/avatar/1317.png', NULL, NULL, NULL, '2023-07-01 15:34:53', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3228, '1320.png', '背景模板', '/profile/avatar/1320.png', NULL, NULL, NULL, '2023-07-01 15:34:53', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3229, '1322.png', '背景模板', '/profile/avatar/1322.png', NULL, NULL, NULL, '2023-07-01 15:34:53', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3230, '1315.jpg', '背景模板', '/profile/avatar/1315.jpg', NULL, NULL, NULL, '2023-07-01 15:34:53', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3231, '1321.jpg', '背景模板', '/profile/avatar/1321.jpg', NULL, NULL, NULL, '2023-07-01 15:34:53', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3232, '1319.png', '背景模板', '/profile/avatar/1319.png', NULL, NULL, NULL, '2023-07-01 15:34:53', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3233, '1323.png', '背景模板', '/profile/avatar/1323.png', NULL, NULL, NULL, '2023-07-01 15:34:53', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3234, '1324.png', '背景模板', '/profile/avatar/1324.png', NULL, NULL, NULL, '2023-07-01 15:34:53', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3235, '1328.png', '背景模板', '/profile/avatar/1328.png', NULL, NULL, NULL, '2023-07-01 15:34:53', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3236, '1325.png', '背景模板', '/profile/avatar/1325.png', NULL, NULL, NULL, '2023-07-01 15:34:53', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3237, '1327.png', '背景模板', '/profile/avatar/1327.png', NULL, NULL, NULL, '2023-07-01 15:34:53', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3238, '1326.png', '背景模板', '/profile/avatar/1326.png', NULL, NULL, NULL, '2023-07-01 15:34:54', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3239, '1329.png', '背景模板', '/profile/avatar/1329.png', NULL, NULL, NULL, '2023-07-01 15:34:54', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3240, '1775.jpg', '背景模板', '/profile/avatar/1775.jpg', NULL, NULL, NULL, '2023-07-01 15:34:54', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3241, '人物', '人物', '/profile/avatar/771029ce-d8e1-4fde-a90d-28559d083201.svg', NULL, NULL, NULL, '2023-07-01 15:34:59', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3242, '人物', '人物', '/profile/avatar/09e69b37-54bc-4013-b4f1-c54f57fe2bc8.svg', NULL, NULL, NULL, '2023-07-01 15:34:59', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3243, '天气', '天气', '/profile/avatar/tianqi (1).svg', NULL, NULL, NULL, '2023-07-01 15:35:18', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3244, '天气', '天气', '/profile/avatar/tianqi (4).svg', NULL, NULL, NULL, '2023-07-01 15:35:18', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3245, '天气', '天气', '/profile/avatar/tianqi (5).svg', NULL, NULL, NULL, '2023-07-01 15:35:18', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3246, '天气', '天气', '/profile/avatar/tianqi (3).svg', NULL, NULL, NULL, '2023-07-01 15:35:18', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3247, '天气', '天气', '/profile/avatar/tianqi (2).svg', NULL, NULL, NULL, '2023-07-01 15:35:18', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3248, '天气', '天气', '/profile/avatar/tianqi (6).svg', NULL, NULL, NULL, '2023-07-01 15:35:18', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3249, '天气', '天气', '/profile/avatar/tianqi (7).svg', NULL, NULL, NULL, '2023-07-01 15:35:19', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3250, '天气', '天气', '/profile/avatar/tianqi (8).svg', NULL, NULL, NULL, '2023-07-01 15:35:19', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3251, '天气', '天气', '/profile/avatar/tianqi (9).svg', NULL, NULL, NULL, '2023-07-01 15:35:19', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3252, '天气', '天气', '/profile/avatar/tianqi (12).svg', NULL, NULL, NULL, '2023-07-01 15:35:19', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3253, '天气', '天气', '/profile/avatar/tianqi (10).svg', NULL, NULL, NULL, '2023-07-01 15:35:19', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3254, '天气', '天气', '/profile/avatar/tianqi (11).svg', NULL, NULL, NULL, '2023-07-01 15:35:19', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3255, '天气', '天气', '/profile/avatar/tianqi (14).svg', NULL, NULL, NULL, '2023-07-01 15:35:19', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3256, '天气', '天气', '/profile/avatar/tianqi (16).svg', NULL, NULL, NULL, '2023-07-01 15:35:19', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3257, '天气', '天气', '/profile/avatar/tianqi (13).svg', NULL, NULL, NULL, '2023-07-01 15:35:19', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3258, '天气', '天气', '/profile/avatar/tianqi (15).svg', NULL, NULL, NULL, '2023-07-01 15:35:19', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3259, '物料运输', '物料运输', '/profile/avatar/wuliaoyunshu (1).svg', NULL, NULL, NULL, '2023-07-01 15:36:31', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3260, '物料运输', '物料运输', '/profile/avatar/wuliaoyunshu (2).svg', NULL, NULL, NULL, '2023-07-01 15:36:32', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3261, '物料运输', '物料运输', '/profile/avatar/wuliaoyunshu (5).svg', NULL, NULL, NULL, '2023-07-01 15:36:32', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3262, '物料运输', '物料运输', '/profile/avatar/wuliaoyunshu (3).svg', NULL, NULL, NULL, '2023-07-01 15:36:32', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3263, '物料运输', '物料运输', '/profile/avatar/wuliaoyunshu (4).svg', NULL, NULL, NULL, '2023-07-01 15:36:32', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3264, '物料运输', '物料运输', '/profile/avatar/wuliaoyunshu (6).svg', NULL, NULL, NULL, '2023-07-01 15:36:32', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3265, '物料运输', '物料运输', '/profile/avatar/wuliaoyunshu (7).svg', NULL, NULL, NULL, '2023-07-01 15:36:32', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3266, '物料运输', '物料运输', '/profile/avatar/wuliaoyunshu (8).svg', NULL, NULL, NULL, '2023-07-01 15:36:32', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3267, '物料运输', '物料运输', '/profile/avatar/wuliaoyunshu (10).svg', NULL, NULL, NULL, '2023-07-01 15:36:32', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3268, '物料运输', '物料运输', '/profile/avatar/wuliaoyunshu (12).svg', NULL, NULL, NULL, '2023-07-01 15:36:32', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3269, '物料运输', '物料运输', '/profile/avatar/wuliaoyunshu (9).svg', NULL, NULL, NULL, '2023-07-01 15:36:32', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3270, '物料运输', '物料运输', '/profile/avatar/wuliaoyunshu (11).svg', NULL, NULL, NULL, '2023-07-01 15:36:32', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3271, '物料运输', '物料运输', '/profile/avatar/wuliaoyunshu (13).svg', NULL, NULL, NULL, '2023-07-01 15:36:32', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3272, '物料运输', '物料运输', '/profile/avatar/wuliaoyunshu (14).svg', NULL, NULL, NULL, '2023-07-01 15:36:32', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3273, '物料运输', '物料运输', '/profile/avatar/wuliaoyunshu (15).svg', NULL, NULL, NULL, '2023-07-01 15:36:32', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3274, '物料运输', '物料运输', '/profile/avatar/wuliaoyunshu (18).svg', NULL, NULL, NULL, '2023-07-01 15:36:33', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3275, '物料运输', '物料运输', '/profile/avatar/wuliaoyunshu (17).svg', NULL, NULL, NULL, '2023-07-01 15:36:33', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3276, '物料运输', '物料运输', '/profile/avatar/wuliaoyunshu (16).svg', NULL, NULL, NULL, '2023-07-01 15:36:33', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3277, '物料运输', '物料运输', '/profile/avatar/wuliaoyunshu (19).svg', NULL, NULL, NULL, '2023-07-01 15:36:33', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3278, '物料运输', '物料运输', '/profile/avatar/wuliaoyunshu (20).svg', NULL, NULL, NULL, '2023-07-01 15:36:33', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3279, '物料运输', '物料运输', '/profile/avatar/wuliaoyunshu (23).svg', NULL, NULL, NULL, '2023-07-01 15:36:33', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3280, '物料运输', '物料运输', '/profile/avatar/wuliaoyunshu (24).svg', NULL, NULL, NULL, '2023-07-01 15:36:33', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3281, '物料运输', '物料运输', '/profile/avatar/wuliaoyunshu (21).svg', NULL, NULL, NULL, '2023-07-01 15:36:33', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3282, '物料运输', '物料运输', '/profile/avatar/wuliaoyunshu (25).svg', NULL, NULL, NULL, '2023-07-01 15:36:33', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3283, '物料运输', '物料运输', '/profile/avatar/wuliaoyunshu (22).svg', NULL, NULL, NULL, '2023-07-01 15:36:33', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3284, '物料运输', '物料运输', '/profile/avatar/wuliaoyunshu (26).svg', NULL, NULL, NULL, '2023-07-01 15:36:34', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3285, '物料运输', '物料运输', '/profile/avatar/wuliaoyunshu (27).svg', NULL, NULL, NULL, '2023-07-01 15:36:34', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3286, '物料运输', '物料运输', '/profile/avatar/wuliaoyunshu (29).svg', NULL, NULL, NULL, '2023-07-01 15:36:34', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3287, '物料运输', '物料运输', '/profile/avatar/wuliaoyunshu (28).svg', NULL, NULL, NULL, '2023-07-01 15:36:34', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3288, '物料运输', '物料运输', '/profile/avatar/wuliaoyunshu (30).svg', NULL, NULL, NULL, '2023-07-01 15:36:34', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3289, '物料运输', '物料运输', '/profile/avatar/wuliaoyunshu (31).svg', NULL, NULL, NULL, '2023-07-01 15:36:34', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3290, '物料运输', '物料运输', '/profile/avatar/wuliaoyunshu (32).svg', NULL, NULL, NULL, '2023-07-01 15:36:34', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3291, '物料运输', '物料运输', '/profile/avatar/wuliaoyunshu (34).svg', NULL, NULL, NULL, '2023-07-01 15:36:34', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3292, '物料运输', '物料运输', '/profile/avatar/wuliaoyunshu (33).svg', NULL, NULL, NULL, '2023-07-01 15:36:34', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3293, '物料运输', '物料运输', '/profile/avatar/wuliaoyunshu (35).svg', NULL, NULL, NULL, '2023-07-01 15:36:34', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3294, '物料运输', '物料运输', '/profile/avatar/wuliaoyunshu (37).svg', NULL, NULL, NULL, '2023-07-01 15:36:34', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3295, '物料运输', '物料运输', '/profile/avatar/wuliaoyunshu (38).svg', NULL, NULL, NULL, '2023-07-01 15:36:34', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3296, '物料运输', '物料运输', '/profile/avatar/wuliaoyunshu (39).svg', NULL, NULL, NULL, '2023-07-01 15:36:34', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3297, '物料运输', '物料运输', '/profile/avatar/wuliaoyunshu (36).svg', NULL, NULL, NULL, '2023-07-01 15:36:34', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3298, '物料运输', '物料运输', '/profile/avatar/wuliaoyunshu (40).svg', NULL, NULL, NULL, '2023-07-01 15:36:34', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3299, '物料运输', '物料运输', '/profile/avatar/wuliaoyunshu (41).svg', NULL, NULL, NULL, '2023-07-01 15:36:35', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3300, '物料运输', '物料运输', '/profile/avatar/wuliaoyunshu (42).svg', NULL, NULL, NULL, '2023-07-01 15:36:35', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3301, '物料运输', '物料运输', '/profile/avatar/wuliaoyunshu (44).svg', NULL, NULL, NULL, '2023-07-01 15:36:35', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3302, '物料运输', '物料运输', '/profile/avatar/wuliaoyunshu (46).svg', NULL, NULL, NULL, '2023-07-01 15:36:35', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3303, '物料运输', '物料运输', '/profile/avatar/wuliaoyunshu (43).svg', NULL, NULL, NULL, '2023-07-01 15:36:35', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3304, '物料运输', '物料运输', '/profile/avatar/wuliaoyunshu (47).svg', NULL, NULL, NULL, '2023-07-01 15:36:35', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3305, '物料运输', '物料运输', '/profile/avatar/wuliaoyunshu (45).svg', NULL, NULL, NULL, '2023-07-01 15:36:35', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3306, '物料运输', '物料运输', '/profile/avatar/wuliaoyunshu (48).svg', NULL, NULL, NULL, '2023-07-01 15:36:35', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3307, '物料运输', '物料运输', '/profile/avatar/wuliaoyunshu (49).svg', NULL, NULL, NULL, '2023-07-01 15:36:35', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3308, '物料运输', '物料运输', '/profile/avatar/wuliaoyunshu (51).svg', NULL, NULL, NULL, '2023-07-01 15:36:35', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3309, '物料运输', '物料运输', '/profile/avatar/wuliaoyunshu (50).svg', NULL, NULL, NULL, '2023-07-01 15:36:35', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3310, '物料运输', '物料运输', '/profile/avatar/wuliaoyunshu (52).svg', NULL, NULL, NULL, '2023-07-01 15:36:35', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3311, '物料运输', '物料运输', '/profile/avatar/wuliaoyunshu (56).svg', NULL, NULL, NULL, '2023-07-01 15:36:35', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3312, '物料运输', '物料运输', '/profile/avatar/wuliaoyunshu (53).svg', NULL, NULL, NULL, '2023-07-01 15:36:36', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3313, '物料运输', '物料运输', '/profile/avatar/wuliaoyunshu (54).svg', NULL, NULL, NULL, '2023-07-01 15:36:36', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3314, '物料运输', '物料运输', '/profile/avatar/wuliaoyunshu (55).svg', NULL, NULL, NULL, '2023-07-01 15:36:36', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3315, '物料运输', '物料运输', '/profile/avatar/wuliaoyunshu (58).svg', NULL, NULL, NULL, '2023-07-01 15:36:36', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3316, '物料运输', '物料运输', '/profile/avatar/wuliaoyunshu (59).svg', NULL, NULL, NULL, '2023-07-01 15:36:36', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3317, '物料运输', '物料运输', '/profile/avatar/wuliaoyunshu (57).svg', NULL, NULL, NULL, '2023-07-01 15:36:36', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3318, '物料运输', '物料运输', '/profile/avatar/wuliaoyunshu (61).svg', NULL, NULL, NULL, '2023-07-01 15:36:36', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3319, '物料运输', '物料运输', '/profile/avatar/wuliaoyunshu (63).svg', NULL, NULL, NULL, '2023-07-01 15:36:36', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3320, '物料运输', '物料运输', '/profile/avatar/wuliaoyunshu (60).svg', NULL, NULL, NULL, '2023-07-01 15:36:36', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3321, '物料运输', '物料运输', '/profile/avatar/wuliaoyunshu (64).svg', NULL, NULL, NULL, '2023-07-01 15:36:36', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3322, '物料运输', '物料运输', '/profile/avatar/wuliaoyunshu (66).svg', NULL, NULL, NULL, '2023-07-01 15:36:36', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3323, '物料运输', '物料运输', '/profile/avatar/wuliaoyunshu (62).svg', NULL, NULL, NULL, '2023-07-01 15:36:36', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3324, '物料运输', '物料运输', '/profile/avatar/wuliaoyunshu (65).svg', NULL, NULL, NULL, '2023-07-01 15:36:36', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3325, '物料运输', '物料运输', '/profile/avatar/wuliaoyunshu (69).svg', NULL, NULL, NULL, '2023-07-01 15:36:37', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3326, '物料运输', '物料运输', '/profile/avatar/wuliaoyunshu (68).svg', NULL, NULL, NULL, '2023-07-01 15:36:37', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3327, '物料运输', '物料运输', '/profile/avatar/wuliaoyunshu (72).svg', NULL, NULL, NULL, '2023-07-01 15:36:37', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3328, '物料运输', '物料运输', '/profile/avatar/wuliaoyunshu (70).svg', NULL, NULL, NULL, '2023-07-01 15:36:37', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3329, '物料运输', '物料运输', '/profile/avatar/wuliaoyunshu (67).svg', NULL, NULL, NULL, '2023-07-01 15:36:37', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3330, '物料运输', '物料运输', '/profile/avatar/wuliaoyunshu (71).svg', NULL, NULL, NULL, '2023-07-01 15:36:37', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3331, '物料运输', '物料运输', '/profile/avatar/wuliaoyunshu (73).svg', NULL, NULL, NULL, '2023-07-01 15:36:37', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3332, '物料运输', '物料运输', '/profile/avatar/wuliaoyunshu (74).svg', NULL, NULL, NULL, '2023-07-01 15:36:37', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3333, '物料运输', '物料运输', '/profile/avatar/wuliaoyunshu (78).svg', NULL, NULL, NULL, '2023-07-01 15:36:37', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3334, '物料运输', '物料运输', '/profile/avatar/wuliaoyunshu (75).svg', NULL, NULL, NULL, '2023-07-01 15:36:37', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3335, '物料运输', '物料运输', '/profile/avatar/wuliaoyunshu (77).svg', NULL, NULL, NULL, '2023-07-01 15:36:37', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3336, '物料运输', '物料运输', '/profile/avatar/wuliaoyunshu (76).svg', NULL, NULL, NULL, '2023-07-01 15:36:37', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3337, '物料运输', '物料运输', '/profile/avatar/wuliaoyunshu (80).svg', NULL, NULL, NULL, '2023-07-01 15:36:38', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3338, '物料运输', '物料运输', '/profile/avatar/wuliaoyunshu (79).svg', NULL, NULL, NULL, '2023-07-01 15:36:38', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3339, '物料运输', '物料运输', '/profile/avatar/wuliaoyunshu (83).svg', NULL, NULL, NULL, '2023-07-01 15:36:38', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3340, '物料运输', '物料运输', '/profile/avatar/wuliaoyunshu (82).svg', NULL, NULL, NULL, '2023-07-01 15:36:38', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3341, '物料运输', '物料运输', '/profile/avatar/wuliaoyunshu (81).svg', NULL, NULL, NULL, '2023-07-01 15:36:38', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3342, '物料运输', '物料运输', '/profile/avatar/wuliaoyunshu (84).svg', NULL, NULL, NULL, '2023-07-01 15:36:38', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3343, '物料运输', '物料运输', '/profile/avatar/wuliaoyunshu (85).svg', NULL, NULL, NULL, '2023-07-01 15:36:38', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3344, '物料运输', '物料运输', '/profile/avatar/wuliaoyunshu (86).svg', NULL, NULL, NULL, '2023-07-01 15:36:38', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3345, '物料运输', '物料运输', '/profile/avatar/wuliaoyunshu (88).svg', NULL, NULL, NULL, '2023-07-01 15:36:38', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3346, '物料运输', '物料运输', '/profile/avatar/wuliaoyunshu (90).svg', NULL, NULL, NULL, '2023-07-01 15:36:38', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3347, '物料运输', '物料运输', '/profile/avatar/wuliaoyunshu (87).svg', NULL, NULL, NULL, '2023-07-01 15:36:38', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3348, '物料运输', '物料运输', '/profile/avatar/wuliaoyunshu (92).svg', NULL, NULL, NULL, '2023-07-01 15:36:38', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3349, '物料运输', '物料运输', '/profile/avatar/wuliaoyunshu (89).svg', NULL, NULL, NULL, '2023-07-01 15:36:38', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3350, '物料运输', '物料运输', '/profile/avatar/wuliaoyunshu (91).svg', NULL, NULL, NULL, '2023-07-01 15:36:39', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3351, '仪表', '仪表', '/profile/avatar/yibiao (1).gif', NULL, NULL, NULL, '2023-07-01 15:37:05', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3352, '仪表', '仪表', '/profile/avatar/yibiao (3).svg', NULL, NULL, NULL, '2023-07-01 15:37:05', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3353, '仪表', '仪表', '/profile/avatar/yibiao (2).png', NULL, NULL, NULL, '2023-07-01 15:37:05', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3354, '仪表', '仪表', '/profile/avatar/yibiao (1).png', NULL, NULL, NULL, '2023-07-01 15:37:05', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3355, '仪表', '仪表', '/profile/avatar/yibiao (1).svg', NULL, NULL, NULL, '2023-07-01 15:37:05', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3356, '仪表', '仪表', '/profile/avatar/yibiao (3).png', NULL, NULL, NULL, '2023-07-01 15:37:05', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3357, '仪表', '仪表', '/profile/avatar/yibiao (2).svg', NULL, NULL, NULL, '2023-07-01 15:37:05', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3358, '仪表', '仪表', '/profile/avatar/yibiao (4).png', NULL, NULL, NULL, '2023-07-01 15:37:06', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3359, '仪表', '仪表', '/profile/avatar/yibiao (4).svg', NULL, NULL, NULL, '2023-07-01 15:37:06', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3360, '仪表', '仪表', '/profile/avatar/yibiao (5).png', NULL, NULL, NULL, '2023-07-01 15:37:06', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3361, '仪表', '仪表', '/profile/avatar/yibiao (5).svg', NULL, NULL, NULL, '2023-07-01 15:37:06', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3362, '仪表', '仪表', '/profile/avatar/yibiao (6).svg', NULL, NULL, NULL, '2023-07-01 15:37:06', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3363, '仪表', '仪表', '/profile/avatar/yibiao (8).svg', NULL, NULL, NULL, '2023-07-01 15:37:06', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3364, '仪表', '仪表', '/profile/avatar/yibiao (7).svg', NULL, NULL, NULL, '2023-07-01 15:37:06', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3365, '仪表', '仪表', '/profile/avatar/yibiao (10).svg', NULL, NULL, NULL, '2023-07-01 15:37:06', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3366, '仪表', '仪表', '/profile/avatar/yibiao (9).svg', NULL, NULL, NULL, '2023-07-01 15:37:06', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3367, '仪表', '仪表', '/profile/avatar/yibiao (11).svg', NULL, NULL, NULL, '2023-07-01 15:37:06', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3368, '仪表', '仪表', '/profile/avatar/yibiao (12).svg', NULL, NULL, NULL, '2023-07-01 15:37:06', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3369, '仪表', '仪表', '/profile/avatar/yibiao (13).svg', NULL, NULL, NULL, '2023-07-01 15:37:06', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3370, '仪表', '仪表', '/profile/avatar/yibiao (14).svg', NULL, NULL, NULL, '2023-07-01 15:37:07', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3371, '仪表', '仪表', '/profile/avatar/yibiao (16).svg', NULL, NULL, NULL, '2023-07-01 15:37:07', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3372, '仪表', '仪表', '/profile/avatar/yibiao (19).svg', NULL, NULL, NULL, '2023-07-01 15:37:07', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3373, '仪表', '仪表', '/profile/avatar/yibiao (15).svg', NULL, NULL, NULL, '2023-07-01 15:37:07', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3374, '仪表', '仪表', '/profile/avatar/yibiao (17).svg', NULL, NULL, NULL, '2023-07-01 15:37:07', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3375, '仪表', '仪表', '/profile/avatar/yibiao (20).svg', NULL, NULL, NULL, '2023-07-01 15:37:07', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3376, '仪表', '仪表', '/profile/avatar/yibiao (18).svg', NULL, NULL, NULL, '2023-07-01 15:37:07', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3377, '仪表', '仪表', '/profile/avatar/yibiao (22).svg', NULL, NULL, NULL, '2023-07-01 15:37:07', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3378, '仪表', '仪表', '/profile/avatar/yibiao (21).svg', NULL, NULL, NULL, '2023-07-01 15:37:07', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3379, '仪表', '仪表', '/profile/avatar/yibiao (23).svg', NULL, NULL, NULL, '2023-07-01 15:37:07', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3380, '仪表', '仪表', '/profile/avatar/yibiao (25).svg', NULL, NULL, NULL, '2023-07-01 15:37:07', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3381, '仪表', '仪表', '/profile/avatar/yibiao (24).svg', NULL, NULL, NULL, '2023-07-01 15:37:07', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3382, '仪表', '仪表', '/profile/avatar/yibiao (26).svg', NULL, NULL, NULL, '2023-07-01 15:37:08', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3383, '仪表', '仪表', '/profile/avatar/yibiao (27).svg', NULL, NULL, NULL, '2023-07-01 15:37:08', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3384, '仪表', '仪表', '/profile/avatar/yibiao (28).svg', NULL, NULL, NULL, '2023-07-01 15:37:08', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3385, '仪表', '仪表', '/profile/avatar/yibiao (30).svg', NULL, NULL, NULL, '2023-07-01 15:37:08', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3386, '仪表', '仪表', '/profile/avatar/yibiao (29).svg', NULL, NULL, NULL, '2023-07-01 15:37:08', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3387, '仪表', '仪表', '/profile/avatar/yibiao (31).svg', NULL, NULL, NULL, '2023-07-01 15:37:08', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3388, '仪表', '仪表', '/profile/avatar/yibiao (32).svg', NULL, NULL, NULL, '2023-07-01 15:37:08', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3389, '仪表', '仪表', '/profile/avatar/yibiao (33).svg', NULL, NULL, NULL, '2023-07-01 15:37:08', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3390, '仪表', '仪表', '/profile/avatar/yibiao (35).svg', NULL, NULL, NULL, '2023-07-01 15:37:08', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3391, '仪表', '仪表', '/profile/avatar/yibiao (34).svg', NULL, NULL, NULL, '2023-07-01 15:37:08', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3392, '仪表', '仪表', '/profile/avatar/yibiao (36).svg', NULL, NULL, NULL, '2023-07-01 15:37:08', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3393, '仪表', '仪表', '/profile/avatar/yibiao (37).svg', NULL, NULL, NULL, '2023-07-01 15:37:08', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3394, '仪表', '仪表', '/profile/avatar/yibiao (38).svg', NULL, NULL, NULL, '2023-07-01 15:37:08', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3395, '仪表', '仪表', '/profile/avatar/yibiao (39).svg', NULL, NULL, NULL, '2023-07-01 15:37:09', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3396, '仪表', '仪表', '/profile/avatar/yibiao (40).svg', NULL, NULL, NULL, '2023-07-01 15:37:09', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3397, '仪表', '仪表', '/profile/avatar/yibiao (44).svg', NULL, NULL, NULL, '2023-07-01 15:37:09', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3398, '仪表', '仪表', '/profile/avatar/yibiao (41).svg', NULL, NULL, NULL, '2023-07-01 15:37:09', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3399, '仪表', '仪表', '/profile/avatar/yibiao (42).svg', NULL, NULL, NULL, '2023-07-01 15:37:09', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3400, '仪表', '仪表', '/profile/avatar/yibiao (43).svg', NULL, NULL, NULL, '2023-07-01 15:37:09', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3401, '仪表', '仪表', '/profile/avatar/yibiao (45).svg', NULL, NULL, NULL, '2023-07-01 15:37:09', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3402, '仪表', '仪表', '/profile/avatar/yibiao (46).svg', NULL, NULL, NULL, '2023-07-01 15:37:09', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3403, '仪表', '仪表', '/profile/avatar/yibiao (48).svg', NULL, NULL, NULL, '2023-07-01 15:37:09', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3404, '仪表', '仪表', '/profile/avatar/yibiao (49).svg', NULL, NULL, NULL, '2023-07-01 15:37:09', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3405, '仪表', '仪表', '/profile/avatar/yibiao (47).svg', NULL, NULL, NULL, '2023-07-01 15:37:09', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3406, '仪表', '仪表', '/profile/avatar/yibiao (50).svg', NULL, NULL, NULL, '2023-07-01 15:37:09', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3407, '仪表', '仪表', '/profile/avatar/yibiao (51).svg', NULL, NULL, NULL, '2023-07-01 15:37:09', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3408, '仪表', '仪表', '/profile/avatar/yibiao (52).svg', NULL, NULL, NULL, '2023-07-01 15:37:10', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3409, '仪表', '仪表', '/profile/avatar/yibiao (55).svg', NULL, NULL, NULL, '2023-07-01 15:37:10', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3410, '仪表', '仪表', '/profile/avatar/yibiao (53).svg', NULL, NULL, NULL, '2023-07-01 15:37:10', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3411, '仪表', '仪表', '/profile/avatar/yibiao (54).svg', NULL, NULL, NULL, '2023-07-01 15:37:10', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3412, '仪表', '仪表', '/profile/avatar/yibiao (57).svg', NULL, NULL, NULL, '2023-07-01 15:37:10', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3413, '仪表', '仪表', '/profile/avatar/yibiao (58).svg', NULL, NULL, NULL, '2023-07-01 15:37:10', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3414, '仪表', '仪表', '/profile/avatar/yibiao (56).svg', NULL, NULL, NULL, '2023-07-01 15:37:10', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3415, '仪表', '仪表', '/profile/avatar/yibiao (59).svg', NULL, NULL, NULL, '2023-07-01 15:37:10', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3416, '仪表', '仪表', '/profile/avatar/yibiao (60).svg', NULL, NULL, NULL, '2023-07-01 15:37:10', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3417, '仪表', '仪表', '/profile/avatar/yibiao (61).svg', NULL, NULL, NULL, '2023-07-01 15:37:10', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3418, '仪表', '仪表', '/profile/avatar/yibiao (62).svg', NULL, NULL, NULL, '2023-07-01 15:37:10', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3419, '仪表', '仪表', '/profile/avatar/yibiao (63).svg', NULL, NULL, NULL, '2023-07-01 15:37:10', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3420, '仪表', '仪表', '/profile/avatar/yibiao (64).svg', NULL, NULL, NULL, '2023-07-01 15:37:11', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3421, '仪表', '仪表', '/profile/avatar/yibiao (65).svg', NULL, NULL, NULL, '2023-07-01 15:37:11', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3422, '仪表', '仪表', '/profile/avatar/yibiao (66).svg', NULL, NULL, NULL, '2023-07-01 15:37:11', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3423, '仪表', '仪表', '/profile/avatar/yibiao (67).svg', NULL, NULL, NULL, '2023-07-01 15:37:11', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3424, '仪表', '仪表', '/profile/avatar/yibiao (68).svg', NULL, NULL, NULL, '2023-07-01 15:37:11', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3425, '仪表', '仪表', '/profile/avatar/yibiao (69).svg', NULL, NULL, NULL, '2023-07-01 15:37:11', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3426, '仪表', '仪表', '/profile/avatar/yibiao (70).svg', NULL, NULL, NULL, '2023-07-01 15:37:11', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3427, '仪表', '仪表', '/profile/avatar/yibiao (74).svg', NULL, NULL, NULL, '2023-07-01 15:37:11', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3428, '仪表', '仪表', '/profile/avatar/yibiao (71).svg', NULL, NULL, NULL, '2023-07-01 15:37:11', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3429, '仪表', '仪表', '/profile/avatar/yibiao (73).svg', NULL, NULL, NULL, '2023-07-01 15:37:11', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3430, '仪表', '仪表', '/profile/avatar/yibiao (72).svg', NULL, NULL, NULL, '2023-07-01 15:37:11', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3431, '仪表', '仪表', '/profile/avatar/yibiao (75).svg', NULL, NULL, NULL, '2023-07-01 15:37:11', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3432, '仪表', '仪表', '/profile/avatar/yibiao (77).svg', NULL, NULL, NULL, '2023-07-01 15:37:11', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3433, '仪表', '仪表', '/profile/avatar/yibiao (79).svg', NULL, NULL, NULL, '2023-07-01 15:37:12', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3434, '仪表', '仪表', '/profile/avatar/yibiao (81).svg', NULL, NULL, NULL, '2023-07-01 15:37:12', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3435, '仪表', '仪表', '/profile/avatar/yibiao (78).svg', NULL, NULL, NULL, '2023-07-01 15:37:12', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3436, '仪表', '仪表', '/profile/avatar/yibiao (76).svg', NULL, NULL, NULL, '2023-07-01 15:37:12', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3437, '仪表', '仪表', '/profile/avatar/yibiao (80).svg', NULL, NULL, NULL, '2023-07-01 15:37:12', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3438, '仪表', '仪表', '/profile/avatar/yibiao (82).svg', NULL, NULL, NULL, '2023-07-01 15:37:12', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3439, '仪表', '仪表', '/profile/avatar/yibiao (85).svg', NULL, NULL, NULL, '2023-07-01 15:37:12', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3440, '仪表', '仪表', '/profile/avatar/yibiao (86).svg', NULL, NULL, NULL, '2023-07-01 15:37:12', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3441, '仪表', '仪表', '/profile/avatar/yibiao (84).svg', NULL, NULL, NULL, '2023-07-01 15:37:12', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3442, '仪表', '仪表', '/profile/avatar/yibiao (83).svg', NULL, NULL, NULL, '2023-07-01 15:37:12', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3443, '仪表', '仪表', '/profile/avatar/yibiao (88).svg', NULL, NULL, NULL, '2023-07-01 15:37:12', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3444, '仪表', '仪表', '/profile/avatar/yibiao (87).svg', NULL, NULL, NULL, '2023-07-01 15:37:12', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3445, '仪表', '仪表', '/profile/avatar/yibiao (89).svg', NULL, NULL, NULL, '2023-07-01 15:37:12', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3446, '仪表', '仪表', '/profile/avatar/yibiao (90).svg', NULL, NULL, NULL, '2023-07-01 15:37:12', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3447, '仪表', '仪表', '/profile/avatar/yibiao (92).svg', NULL, NULL, NULL, '2023-07-01 15:37:13', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3448, '仪表', '仪表', '/profile/avatar/yibiao (91).svg', NULL, NULL, NULL, '2023-07-01 15:37:13', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3449, '仪表', '仪表', '/profile/avatar/yibiao (93).svg', NULL, NULL, NULL, '2023-07-01 15:37:13', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3450, '仪表', '仪表', '/profile/avatar/yibiao (94).svg', NULL, NULL, NULL, '2023-07-01 15:37:13', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3451, '仪表', '仪表', '/profile/avatar/yibiao (95).svg', NULL, NULL, NULL, '2023-07-01 15:37:13', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3452, '仪表', '仪表', '/profile/avatar/yibiao (96).svg', NULL, NULL, NULL, '2023-07-01 15:37:13', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3453, '仪表', '仪表', '/profile/avatar/yibiao (97).svg', NULL, NULL, NULL, '2023-07-01 15:37:13', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3454, '仪表', '仪表', '/profile/avatar/yibiao (98).svg', NULL, NULL, NULL, '2023-07-01 15:37:13', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3455, '仪表', '仪表', '/profile/avatar/yibiao (99).svg', NULL, NULL, NULL, '2023-07-01 15:37:13', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3456, '仪表', '仪表', '/profile/avatar/yibiao (101).svg', NULL, NULL, NULL, '2023-07-01 15:37:13', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3457, '仪表', '仪表', '/profile/avatar/yibiao (102).svg', NULL, NULL, NULL, '2023-07-01 15:37:13', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3458, '仪表', '仪表', '/profile/avatar/yibiao (100).svg', NULL, NULL, NULL, '2023-07-01 15:37:13', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3459, '仪表', '仪表', '/profile/avatar/yibiao (103).svg', NULL, NULL, NULL, '2023-07-01 15:37:13', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3460, '仪表', '仪表', '/profile/avatar/yibiao (104).svg', NULL, NULL, NULL, '2023-07-01 15:37:13', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3461, '仪表', '仪表', '/profile/avatar/yibiao (105).svg', NULL, NULL, NULL, '2023-07-01 15:37:14', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3462, '仪表', '仪表', '/profile/avatar/yibiao (106).svg', NULL, NULL, NULL, '2023-07-01 15:37:14', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3463, '仪表', '仪表', '/profile/avatar/yibiao (107).svg', NULL, NULL, NULL, '2023-07-01 15:37:14', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3464, '仪表', '仪表', '/profile/avatar/yibiao (108).svg', NULL, NULL, NULL, '2023-07-01 15:37:14', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3465, '仪表', '仪表', '/profile/avatar/yibiao (110).svg', NULL, NULL, NULL, '2023-07-01 15:37:14', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3466, '仪表', '仪表', '/profile/avatar/yibiao (109).svg', NULL, NULL, NULL, '2023-07-01 15:37:14', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3467, '仪表', '仪表', '/profile/avatar/yibiao (111).svg', NULL, NULL, NULL, '2023-07-01 15:37:14', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3468, '仪表', '仪表', '/profile/avatar/yibiao (112).svg', NULL, NULL, NULL, '2023-07-01 15:37:14', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3469, '仪表', '仪表', '/profile/avatar/yibiao (113).svg', NULL, NULL, NULL, '2023-07-01 15:37:14', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3470, '仪表', '仪表', '/profile/avatar/yibiao (114).svg', NULL, NULL, NULL, '2023-07-01 15:37:14', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3471, '仪表', '仪表', '/profile/avatar/yibiao (115).svg', NULL, NULL, NULL, '2023-07-01 15:37:14', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3472, '仪表', '仪表', '/profile/avatar/yibiao (116).svg', NULL, NULL, NULL, '2023-07-01 15:37:14', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3473, '装饰-背景', '装饰-背景', '/profile/avatar/1f433f24-6709-41de-ae1f-6f49b7d6e626.jpg', NULL, NULL, NULL, '2023-07-01 15:38:37', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3474, '装饰-背景', '装饰-背景', '/profile/avatar/6d74ec1e-bae3-4c02-a545-7272b1f06d32.jpg', NULL, NULL, NULL, '2023-07-01 15:38:37', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3475, '装饰-背景', '装饰-背景', '/profile/avatar/9d3fc87f-0e54-49dc-a0f6-3e6db4f498fa.jpg', NULL, NULL, NULL, '2023-07-01 15:38:37', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3476, '装饰-背景', '装饰-背景', '/profile/avatar/8c647b15-932a-4a6d-a54a-973ea0ab5f96.jpg', NULL, NULL, NULL, '2023-07-01 15:38:37', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3477, '装饰-背景', '装饰-背景', '/profile/avatar/70e803ba-50be-4856-a2f9-ce8b6afe5aab.jpg', NULL, NULL, NULL, '2023-07-01 15:38:37', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3478, '装饰-背景', '装饰-背景', '/profile/avatar/9fb0143e-8ee4-4d12-ac69-15d5df6e6c39.jpg', NULL, NULL, NULL, '2023-07-01 15:38:38', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3479, '装饰-背景', '装饰-背景', '/profile/avatar/33bf7981-ae64-492f-9c79-1aafa5ba555e.jpg', NULL, NULL, NULL, '2023-07-01 15:38:38', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3480, '装饰-背景', '装饰-背景', '/profile/avatar/93f7956b-786c-4811-b86e-2d9b8da253ce.jpg', NULL, NULL, NULL, '2023-07-01 15:38:38', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3481, '装饰-背景', '装饰-背景', '/profile/avatar/65ba0560-6191-4562-968d-7af3779d7eac.jpg', NULL, NULL, NULL, '2023-07-01 15:38:38', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3482, '装饰-背景', '装饰-背景', '/profile/avatar/7ba6475d-7f98-4812-a1ab-cdbe43a89448.jpg', NULL, NULL, NULL, '2023-07-01 15:38:38', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3483, '装饰-背景', '装饰-背景', '/profile/avatar/903d3f26-c5ca-46d6-b354-2f96a242b6da.jpg', NULL, NULL, NULL, '2023-07-01 15:38:38', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3484, '装饰-背景', '装饰-背景', '/profile/avatar/232cedf4-3091-43fc-936d-4aa757bb60bd.jpg', NULL, NULL, NULL, '2023-07-01 15:38:38', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3485, '装饰-背景', '装饰-背景', '/profile/avatar/105e5a78-9416-4700-a07e-53a380d1dc16.jpg', NULL, NULL, NULL, '2023-07-01 15:38:38', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3486, '装饰-背景', '装饰-背景', '/profile/avatar/508af479-a941-4f6a-bc92-c3a1c8cc38ce.jpg', NULL, NULL, NULL, '2023-07-01 15:38:39', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3487, '装饰-背景', '装饰-背景', '/profile/avatar/56321b56-bc58-417a-a855-f9286e8a3bc9.jpg', NULL, NULL, NULL, '2023-07-01 15:38:39', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3488, '装饰-背景', '装饰-背景', '/profile/avatar/6608c14f-5069-4ad9-9d1f-88816850e598.jpg', NULL, NULL, NULL, '2023-07-01 15:38:39', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3489, '装饰-背景', '装饰-背景', '/profile/avatar/f2ca6010-f3b3-4ba6-9e59-f86d598e7313.jpg', NULL, NULL, NULL, '2023-07-01 15:38:39', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3490, '装饰-背景', '装饰-背景', '/profile/avatar/b4fb769e-0543-42ec-bad9-68e2ce645cac.jpg', NULL, NULL, NULL, '2023-07-01 15:38:40', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3491, '装饰-背景', '装饰-背景', '/profile/avatar/f984ebe0-9f5c-4f74-b0b2-0e4bb7331f9a.jpg', NULL, NULL, NULL, '2023-07-01 15:38:40', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3492, '装饰-背景', '装饰-背景', '/profile/avatar/ab2e9ad1-bba6-4ff6-a40d-e850646bdb4f.jpg', NULL, NULL, NULL, '2023-07-01 15:38:40', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3493, '装饰-背景', '装饰-背景', '/profile/avatar/ff9d0f44-b6ee-4b5e-bace-278101035d2b.jpg', NULL, NULL, NULL, '2023-07-01 15:38:40', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3494, '装饰-标题', '装饰-标题', '/profile/avatar/1f7db675-593c-4f51-8df3-9769cc3f1fa8.png', NULL, NULL, NULL, '2023-07-01 15:39:27', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3495, '装饰-标题', '装饰-标题', '/profile/avatar/8bb01daf-53ad-4f55-b27a-e7475ba6073a.png', NULL, NULL, NULL, '2023-07-01 15:39:27', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3496, '装饰-标题', '装饰-标题', '/profile/avatar/8fc7b5bc-3561-41f7-ae82-cdcd57958976.png', NULL, NULL, NULL, '2023-07-01 15:39:27', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3497, '装饰-标题', '装饰-标题', '/profile/avatar/26eb0cd3-de72-4eb7-93a4-872c7e835989.png', NULL, NULL, NULL, '2023-07-01 15:39:27', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3498, '装饰-标题', '装饰-标题', '/profile/avatar/9e82f66f-e3b9-4f08-ae96-1c6288ca3264.png', NULL, NULL, NULL, '2023-07-01 15:39:27', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3499, '装饰-标题', '装饰-标题', '/profile/avatar/4b9387e3-43e5-422f-b38e-461b6013d029.png', NULL, NULL, NULL, '2023-07-01 15:39:27', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3500, '装饰-标题', '装饰-标题', '/profile/avatar/4cb226ac-c828-448d-a5eb-59a383ef204b.png', NULL, NULL, NULL, '2023-07-01 15:39:27', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3501, '装饰-标题', '装饰-标题', '/profile/avatar/44e8ab46-67bc-43d9-830e-93a084b6a09f.png', NULL, NULL, NULL, '2023-07-01 15:39:28', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3502, '装饰-标题', '装饰-标题', '/profile/avatar/53cd90f7-047a-45b4-b7dc-90ff672c6ca7.png', NULL, NULL, NULL, '2023-07-01 15:39:28', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3503, '装饰-标题', '装饰-标题', '/profile/avatar/10a9dfd6-a3c6-47a2-9cef-602d50746e4d.png', NULL, NULL, NULL, '2023-07-01 15:39:28', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3504, '装饰-标题', '装饰-标题', '/profile/avatar/5402d79f-2426-430d-8dcc-d597f0b5264f.png', NULL, NULL, NULL, '2023-07-01 15:39:28', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3505, '装饰-标题', '装饰-标题', '/profile/avatar/59cf9469-b8ce-442f-a394-22456c190520.png', NULL, NULL, NULL, '2023-07-01 15:39:28', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3506, '装饰-标题', '装饰-标题', '/profile/avatar/60d49885-864d-4e63-bd33-88659e40866d.png', NULL, NULL, NULL, '2023-07-01 15:39:28', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3507, '装饰-标题', '装饰-标题', '/profile/avatar/cc4e12fe-ca81-4fb3-aa98-b1d2cf4bee85.png', NULL, NULL, NULL, '2023-07-01 15:39:28', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3508, '装饰-标题', '装饰-标题', '/profile/avatar/10477c9a-25aa-4bf0-911c-75edd2fa676f.png', NULL, NULL, NULL, '2023-07-01 15:39:28', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3509, '装饰-标题', '装饰-标题', '/profile/avatar/a2da0c24-802a-4cc7-a7f9-9244eba58700.png', NULL, NULL, NULL, '2023-07-01 15:39:28', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3510, '装饰-标题', '装饰-标题', '/profile/avatar/73ef7590-03aa-4779-af19-3f261da4989e.png', NULL, NULL, NULL, '2023-07-01 15:39:28', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3511, '装饰-标题', '装饰-标题', '/profile/avatar/d8f83025-5db1-4d9b-b8c2-18d50056f583.png', NULL, NULL, NULL, '2023-07-01 15:39:28', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3512, '装饰-标题', '装饰-标题', '/profile/avatar/bbd345e3-0c8a-499d-a1d3-f936143d54a0.png', NULL, NULL, NULL, '2023-07-01 15:39:29', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3513, '装饰-标题', '装饰-标题', '/profile/avatar/c62e0d71-64ee-47b1-9bab-c0b4d7f08560.png', NULL, NULL, NULL, '2023-07-01 15:39:29', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3514, '装饰-框', '装饰-框', '/profile/avatar/0a643991-fbb0-44e3-8b02-dbe3796de997.png', NULL, NULL, NULL, '2023-07-01 15:40:25', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3515, '装饰-框', '装饰-框', '/profile/avatar/01e8778a-5893-4360-be3d-a5edc5369d7e.png', NULL, NULL, NULL, '2023-07-01 15:40:25', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3516, '装饰-框', '装饰-框', '/profile/avatar/1ab22781-bcdd-4e13-8f6e-640e3bb659db.png', NULL, NULL, NULL, '2023-07-01 15:40:25', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3517, '装饰-框', '装饰-框', '/profile/avatar/1a75e4b1-afba-48ff-8549-c3bdcd3ba5bd.png', NULL, NULL, NULL, '2023-07-01 15:40:25', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3518, '装饰-框', '装饰-框', '/profile/avatar/1d2a33a2-abc7-4211-b508-990aac27165c.png', NULL, NULL, NULL, '2023-07-01 15:40:25', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3519, '装饰-框', '装饰-框', '/profile/avatar/2b2859eb-c628-4d1f-8291-1e57644e97a8.png', NULL, NULL, NULL, '2023-07-01 15:40:26', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3520, '装饰-框', '装饰-框', '/profile/avatar/2c3327a3-e99b-41c9-a749-18456df9849c.png', NULL, NULL, NULL, '2023-07-01 15:40:26', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3521, '装饰-框', '装饰-框', '/profile/avatar/2cc19e23-7133-4c65-9973-88f363e58181.png', NULL, NULL, NULL, '2023-07-01 15:40:26', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3522, '装饰-框', '装饰-框', '/profile/avatar/2e26b5fd-cba8-47c6-b0dd-cfae01f48042.png', NULL, NULL, NULL, '2023-07-01 15:40:26', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3523, '装饰-框', '装饰-框', '/profile/avatar/0e8e0b6e-05e3-49c9-92b7-2088e944bf99.png', NULL, NULL, NULL, '2023-07-01 15:40:26', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3524, '装饰-框', '装饰-框', '/profile/avatar/0bdeb82e-9329-4a6b-b846-84315ea2c681.png', NULL, NULL, NULL, '2023-07-01 15:40:26', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3525, '装饰-框', '装饰-框', '/profile/avatar/4b5149ef-41dc-4ba4-a1bd-997631890010.png', NULL, NULL, NULL, '2023-07-01 15:40:26', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3526, '装饰-框', '装饰-框', '/profile/avatar/3a50b9a5-b9a5-417b-aa89-27df19f1bbf9.png', NULL, NULL, NULL, '2023-07-01 15:40:26', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3527, '装饰-框', '装饰-框', '/profile/avatar/4c45dfed-4e88-412e-badf-59466eb061d5.png', NULL, NULL, NULL, '2023-07-01 15:40:26', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3528, '装饰-框', '装饰-框', '/profile/avatar/3b521308-962c-40b7-8f05-802ba3878f6c.png', NULL, NULL, NULL, '2023-07-01 15:40:26', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3529, '装饰-框', '装饰-框', '/profile/avatar/4fbc3005-b802-4a68-8319-26f8d8adebf0.png', NULL, NULL, NULL, '2023-07-01 15:40:26', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3530, '装饰-框', '装饰-框', '/profile/avatar/5a51e6f2-a032-4e05-aef0-4c9ab87646b6.png', NULL, NULL, NULL, '2023-07-01 15:40:27', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3531, '装饰-框', '装饰-框', '/profile/avatar/5ace3326-6381-4ffe-aa6a-d56726298b06.png', NULL, NULL, NULL, '2023-07-01 15:40:27', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3532, '装饰-框', '装饰-框', '/profile/avatar/6cd01f2f-4363-46c4-8c22-3b35b454c701.png', NULL, NULL, NULL, '2023-07-01 15:40:27', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3533, '装饰-框', '装饰-框', '/profile/avatar/6ffd0bdd-3610-47c3-bae3-540a89d2a6f6.png', NULL, NULL, NULL, '2023-07-01 15:40:27', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3534, '装饰-框', '装饰-框', '/profile/avatar/9bca7492-7da1-45f3-9803-52b2e25c6da7.png', NULL, NULL, NULL, '2023-07-01 15:40:27', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3535, '装饰-框', '装饰-框', '/profile/avatar/5e9d8723-7e69-4a85-a65d-9c7467fb36b2.png', NULL, NULL, NULL, '2023-07-01 15:40:27', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3536, '装饰-框', '装饰-框', '/profile/avatar/8c024da7-ac70-49f1-bb51-aa7402fa53ed.png', NULL, NULL, NULL, '2023-07-01 15:40:28', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3537, '装饰-框', '装饰-框', '/profile/avatar/5a53d683-5f28-432c-bb90-ea9eed2f1b37.png', NULL, NULL, NULL, '2023-07-01 15:40:28', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3538, '装饰-框', '装饰-框', '/profile/avatar/7bb942d8-d4b5-4d96-82a5-ccc7260d87f5.png', NULL, NULL, NULL, '2023-07-01 15:40:28', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3539, '装饰-框', '装饰-框', '/profile/avatar/7d269e89-33d8-4c8d-a891-2042046aee29.png', NULL, NULL, NULL, '2023-07-01 15:40:28', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3540, '装饰-框', '装饰-框', '/profile/avatar/9cda4235-92ed-42aa-8664-9bd02a859f91.png', NULL, NULL, NULL, '2023-07-01 15:40:28', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3541, '装饰-框', '装饰-框', '/profile/avatar/11dae082-4a10-429d-b8be-29f0440c8aaf.png', NULL, NULL, NULL, '2023-07-01 15:40:28', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3542, '装饰-框', '装饰-框', '/profile/avatar/015ec80a-2846-41df-a88f-c6c4df2e0433.png', NULL, NULL, NULL, '2023-07-01 15:40:28', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3543, '装饰-框', '装饰-框', '/profile/avatar/7ae7c663-a2b2-4309-88b9-0f271f7e5a0b.png', NULL, NULL, NULL, '2023-07-01 15:40:28', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3544, '装饰-框', '装饰-框', '/profile/avatar/12d75ee9-c26c-4c5a-9ce4-bd1b529e139e.png', NULL, NULL, NULL, '2023-07-01 15:40:28', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3545, '装饰-框', '装饰-框', '/profile/avatar/9da894f0-b68a-4673-89e4-ed5156bb1ede.png', NULL, NULL, NULL, '2023-07-01 15:40:28', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3546, '装饰-框', '装饰-框', '/profile/avatar/9fe3569d-0f25-47dd-8745-4e32811ab962.png', NULL, NULL, NULL, '2023-07-01 15:40:28', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3547, '装饰-框', '装饰-框', '/profile/avatar/9ea5bf93-3081-475f-bf73-7c90831bdf3a.png', NULL, NULL, NULL, '2023-07-01 15:40:29', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3548, '装饰-框', '装饰-框', '/profile/avatar/36c4ea0b-14ee-4956-ad2d-b9147072c47f.png', NULL, NULL, NULL, '2023-07-01 15:40:29', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3549, '装饰-框', '装饰-框', '/profile/avatar/15b8ac7a-de80-446f-9130-6ab73f9390a1.png', NULL, NULL, NULL, '2023-07-01 15:40:29', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3550, '装饰-框', '装饰-框', '/profile/avatar/37d1875b-9e20-45fa-8a92-5348d9194b87.png', NULL, NULL, NULL, '2023-07-01 15:40:29', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3551, '装饰-框', '装饰-框', '/profile/avatar/15ee1396-b535-4768-8802-afead2fcc6e5.png', NULL, NULL, NULL, '2023-07-01 15:40:29', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3552, '装饰-框', '装饰-框', '/profile/avatar/23e4fdb2-bc54-47f0-9fd0-9ad5c8910a26.png', NULL, NULL, NULL, '2023-07-01 15:40:29', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3553, '装饰-框', '装饰-框', '/profile/avatar/40fc0ad1-97e6-4878-b97d-c9be01ddc7cc.png', NULL, NULL, NULL, '2023-07-01 15:40:29', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3554, '装饰-框', '装饰-框', '/profile/avatar/26eea155-b412-461c-8665-2ca448ffc381.png', NULL, NULL, NULL, '2023-07-01 15:40:29', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3555, '装饰-框', '装饰-框', '/profile/avatar/035dc722-78a7-4411-9c20-1d70cd947e57.png', NULL, NULL, NULL, '2023-07-01 15:40:29', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3556, '装饰-框', '装饰-框', '/profile/avatar/50e67e29-67c4-4b64-9c03-65b0183829b3.png', NULL, NULL, NULL, '2023-07-01 15:40:29', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3557, '装饰-框', '装饰-框', '/profile/avatar/58eea2d3-8e8c-4c68-887c-712195468966.png', NULL, NULL, NULL, '2023-07-01 15:40:29', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3558, '装饰-框', '装饰-框', '/profile/avatar/61b9c6be-0192-4602-8b11-aff7109bb99b.png', NULL, NULL, NULL, '2023-07-01 15:40:30', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3559, '装饰-框', '装饰-框', '/profile/avatar/61c53844-7e9d-4997-97d1-c66710816b48.png', NULL, NULL, NULL, '2023-07-01 15:40:30', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3560, '装饰-框', '装饰-框', '/profile/avatar/61ebae36-47a6-4739-8b9f-92a91a76907c.png', NULL, NULL, NULL, '2023-07-01 15:40:30', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3561, '装饰-框', '装饰-框', '/profile/avatar/62a7ffeb-f436-42ce-a1eb-96b39e65f689.png', NULL, NULL, NULL, '2023-07-01 15:40:30', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3562, '装饰-框', '装饰-框', '/profile/avatar/69d68445-437a-4ea1-b2ee-065950f803d5.png', NULL, NULL, NULL, '2023-07-01 15:40:30', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3563, '装饰-框', '装饰-框', '/profile/avatar/74df5cdb-7341-4324-81b0-454541f74795.png', NULL, NULL, NULL, '2023-07-01 15:40:30', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3564, '装饰-框', '装饰-框', '/profile/avatar/77aeb941-0e77-4240-bd13-afee89dfdfc8.png', NULL, NULL, NULL, '2023-07-01 15:40:30', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3565, '装饰-框', '装饰-框', '/profile/avatar/35dae363-64d0-4311-936a-288478744a93.png', NULL, NULL, NULL, '2023-07-01 15:40:30', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3566, '装饰-框', '装饰-框', '/profile/avatar/96fd8a07-f488-495b-b7db-21b8ae783490.png', NULL, NULL, NULL, '2023-07-01 15:40:30', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3567, '装饰-框', '装饰-框', '/profile/avatar/91cbfe9b-7dd8-4b3d-9df5-657723ca3572.png', NULL, NULL, NULL, '2023-07-01 15:40:30', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3568, '装饰-框', '装饰-框', '/profile/avatar/97bff09f-01f3-4275-94d7-b210270cc68e.png', NULL, NULL, NULL, '2023-07-01 15:40:30', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3569, '装饰-框', '装饰-框', '/profile/avatar/115d3a06-cfbb-4d24-8655-e63712250fe6.png', NULL, NULL, NULL, '2023-07-01 15:40:30', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3570, '装饰-框', '装饰-框', '/profile/avatar/315b3d08-3a0b-429e-80df-0772e1e435ed.png', NULL, NULL, NULL, '2023-07-01 15:40:31', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3571, '装饰-框', '装饰-框', '/profile/avatar/333a401f-81f3-44f3-b629-ea30ade71d06.png', NULL, NULL, NULL, '2023-07-01 15:40:31', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3572, '装饰-框', '装饰-框', '/profile/avatar/362d4bfe-04a4-441c-b8f4-0a32204e1e80.png', NULL, NULL, NULL, '2023-07-01 15:40:31', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3573, '装饰-框', '装饰-框', '/profile/avatar/529d567b-fb5a-4121-8f7b-c64ab8753f03.png', NULL, NULL, NULL, '2023-07-01 15:40:31', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3574, '装饰-框', '装饰-框', '/profile/avatar/414d39d4-300a-4942-a619-40d6ddbf05da.png', NULL, NULL, NULL, '2023-07-01 15:40:31', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3575, '装饰-框', '装饰-框', '/profile/avatar/682f6089-bb1b-4654-813e-ccdde2cb9af4.png', NULL, NULL, NULL, '2023-07-01 15:40:31', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3576, '装饰-框', '装饰-框', '/profile/avatar/777be2e2-ca0b-47fb-bfec-d018e4ed584c.png', NULL, NULL, NULL, '2023-07-01 15:40:31', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3577, '装饰-框', '装饰-框', '/profile/avatar/972b1ca2-5628-41a6-a47e-4df6821d386b.png', NULL, NULL, NULL, '2023-07-01 15:40:31', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3578, '装饰-框', '装饰-框', '/profile/avatar/838b98b3-ce7e-4bbc-9acc-71e5d1ed79f6.png', NULL, NULL, NULL, '2023-07-01 15:40:31', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3579, '装饰-框', '装饰-框', '/profile/avatar/3260e6d2-0303-458d-a29b-8ea266dda0e8.png', NULL, NULL, NULL, '2023-07-01 15:40:31', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3580, '装饰-框', '装饰-框', '/profile/avatar/705ae068-4aae-4c61-b489-973cdf2a1f79.png', NULL, NULL, NULL, '2023-07-01 15:40:31', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3581, '装饰-框', '装饰-框', '/profile/avatar/993a3cd1-b66b-44eb-955a-cb84031101ca.png', NULL, NULL, NULL, '2023-07-01 15:40:31', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3582, '装饰-框', '装饰-框', '/profile/avatar/6319b7e7-1659-4e9b-bce9-f76f4cd4e080.png', NULL, NULL, NULL, '2023-07-01 15:40:32', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3583, '装饰-框', '装饰-框', '/profile/avatar/5170e55f-d6ff-4baa-9d70-2204eb933ddf.png', NULL, NULL, NULL, '2023-07-01 15:40:32', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3584, '装饰-框', '装饰-框', '/profile/avatar/6152ad1d-fdbc-4975-9b90-38cb40d5b5d8.png', NULL, NULL, NULL, '2023-07-01 15:40:32', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3585, '装饰-框', '装饰-框', '/profile/avatar/06924e0e-1aef-4186-b600-885b072b3beb.png', NULL, NULL, NULL, '2023-07-01 15:40:32', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3586, '装饰-框', '装饰-框', '/profile/avatar/8293ba3e-a3d9-46ea-8556-2431ac90dc3a.png', NULL, NULL, NULL, '2023-07-01 15:40:32', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3587, '装饰-框', '装饰-框', '/profile/avatar/8446fa70-0ceb-4a5b-87d1-50e51209e77f.png', NULL, NULL, NULL, '2023-07-01 15:40:32', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3588, '装饰-框', '装饰-框', '/profile/avatar/18304ed5-b3bc-435b-95e3-3783610adfdb.png', NULL, NULL, NULL, '2023-07-01 15:40:32', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3589, '装饰-框', '装饰-框', '/profile/avatar/9492ff9f-2f52-4cd1-99d6-974f15bb5be3.png', NULL, NULL, NULL, '2023-07-01 15:40:32', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3590, '装饰-框', '装饰-框', '/profile/avatar/9970bae2-0bfc-47be-b51b-e68202756f02.png', NULL, NULL, NULL, '2023-07-01 15:40:32', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3591, '装饰-框', '装饰-框', '/profile/avatar/31776fc8-173a-4fb3-8646-62f0e5a08702.png', NULL, NULL, NULL, '2023-07-01 15:40:32', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3592, '装饰-框', '装饰-框', '/profile/avatar/47639d9b-0b78-4847-a1e0-5d78745b8a6b.png', NULL, NULL, NULL, '2023-07-01 15:40:32', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3593, '装饰-框', '装饰-框', '/profile/avatar/23176ac7-05dd-4b94-bbe0-41b6bae6cae6.png', NULL, NULL, NULL, '2023-07-01 15:40:33', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3594, '装饰-框', '装饰-框', '/profile/avatar/84662c5e-8a93-45c2-b629-1f54dd6b9698.png', NULL, NULL, NULL, '2023-07-01 15:40:33', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3595, '装饰-框', '装饰-框', '/profile/avatar/82283ebc-a21a-4736-a356-aaf51051bfc8.png', NULL, NULL, NULL, '2023-07-01 15:40:33', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3596, '装饰-框', '装饰-框', '/profile/avatar/87744be8-9e67-4cf3-b720-a6bb27144313.png', NULL, NULL, NULL, '2023-07-01 15:40:33', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3597, '装饰-框', '装饰-框', '/profile/avatar/1909808d-7307-45a0-a9d4-4dfcb2032816.png', NULL, NULL, NULL, '2023-07-01 15:40:33', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3598, '装饰-框', '装饰-框', '/profile/avatar/169055c2-856a-438d-9c64-34cee30563ce.png', NULL, NULL, NULL, '2023-07-01 15:40:33', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3599, '装饰-框', '装饰-框', '/profile/avatar/758817b8-536a-46b1-b351-d40f260116e8.png', NULL, NULL, NULL, '2023-07-01 15:40:33', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3600, '装饰-框', '装饰-框', '/profile/avatar/54254fc4-c7de-48a4-9a15-69c0b6c18be5.png', NULL, NULL, NULL, '2023-07-01 15:40:33', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3601, '装饰-框', '装饰-框', '/profile/avatar/936558e2-9681-4de0-ae49-4bb20d3983e1.png', NULL, NULL, NULL, '2023-07-01 15:40:33', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3602, '装饰-框', '装饰-框', '/profile/avatar/07560539-a285-46c7-b432-71752c8c54d0.png', NULL, NULL, NULL, '2023-07-01 15:40:34', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3603, '装饰-框', '装饰-框', '/profile/avatar/7605332c-a329-43e5-80b9-b0c2796380a4.png', NULL, NULL, NULL, '2023-07-01 15:40:34', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3604, '装饰-框', '装饰-框', '/profile/avatar/09695349-3925-443b-8fc9-fa5f7ce4dd6f.png', NULL, NULL, NULL, '2023-07-01 15:40:34', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3605, '装饰-框', '装饰-框', '/profile/avatar/23630040-a7ee-4207-9a55-6aef8132198d.png', NULL, NULL, NULL, '2023-07-01 15:40:34', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3606, '装饰-框', '装饰-框', '/profile/avatar/85055531-b513-493b-b202-70a0c998356c.png', NULL, NULL, NULL, '2023-07-01 15:40:34', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3607, '装饰-框', '装饰-框', '/profile/avatar/48940137-73de-45c8-881b-d4c17319e9fe.png', NULL, NULL, NULL, '2023-07-01 15:40:34', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3608, '装饰-框', '装饰-框', '/profile/avatar/a868a359-14ea-470b-b84a-0436e7f35e6f.png', NULL, NULL, NULL, '2023-07-01 15:40:35', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3609, '装饰-框', '装饰-框', '/profile/avatar/a3b4175a-9dfb-4fe5-ba19-37b1c948d84b.png', NULL, NULL, NULL, '2023-07-01 15:40:35', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3610, '装饰-框', '装饰-框', '/profile/avatar/13744526-a2af-4e57-8821-d817d3959465.png', NULL, NULL, NULL, '2023-07-01 15:40:35', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3611, '装饰-框', '装饰-框', '/profile/avatar/a6342b1d-66c2-4a4b-b8d1-b6de0085d47e.png', NULL, NULL, NULL, '2023-07-01 15:40:35', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3612, '装饰-框', '装饰-框', '/profile/avatar/a7d4e45f-e994-47c8-93b6-5e7169b7d6d8.png', NULL, NULL, NULL, '2023-07-01 15:40:35', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3613, '装饰-框', '装饰-框', '/profile/avatar/a8758e86-b0ea-4e69-a140-9746f64d2be7.png', NULL, NULL, NULL, '2023-07-01 15:40:35', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3614, '装饰-框', '装饰-框', '/profile/avatar/aa1ff2fb-8349-442d-8a1d-65cb7ab07dfc.png', NULL, NULL, NULL, '2023-07-01 15:40:35', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3615, '装饰-框', '装饰-框', '/profile/avatar/b2b813a5-7afd-4ae3-879a-f4ef0a117b8b.png', NULL, NULL, NULL, '2023-07-01 15:40:35', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3616, '装饰-框', '装饰-框', '/profile/avatar/ad6d404d-9494-4535-9a4d-9348bce0d96a.png', NULL, NULL, NULL, '2023-07-01 15:40:35', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3617, '装饰-框', '装饰-框', '/profile/avatar/adcfe52e-7906-4f02-9de5-00ca8d2ed337.png', NULL, NULL, NULL, '2023-07-01 15:40:35', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3618, '装饰-框', '装饰-框', '/profile/avatar/8958309d-ebea-4171-aa36-654054439de2.png', NULL, NULL, NULL, '2023-07-01 15:40:35', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3619, '装饰-框', '装饰-框', '/profile/avatar/b8e3212f-47b5-491f-82ca-ca3d3b236b79.png', NULL, NULL, NULL, '2023-07-01 15:40:35', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3620, '装饰-框', '装饰-框', '/profile/avatar/b08cc17c-454d-41d2-80c7-1e8cbe32c317.png', NULL, NULL, NULL, '2023-07-01 15:40:35', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3621, '装饰-框', '装饰-框', '/profile/avatar/b011c4c4-f41e-49c5-8b28-6996f2825738.png', NULL, NULL, NULL, '2023-07-01 15:40:36', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3622, '装饰-框', '装饰-框', '/profile/avatar/b26eb33a-fabe-4e61-817f-03787266f702.png', NULL, NULL, NULL, '2023-07-01 15:40:36', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3623, '装饰-框', '装饰-框', '/profile/avatar/b873b295-e5b0-4c36-8352-da84e9de9e6e.png', NULL, NULL, NULL, '2023-07-01 15:40:36', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3624, '装饰-框', '装饰-框', '/profile/avatar/b249032d-2591-47ab-8a5a-b1ad6b52f661.png', NULL, NULL, NULL, '2023-07-01 15:40:36', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3625, '装饰-框', '装饰-框', '/profile/avatar/a1333a83-588b-4b46-b937-afd145e8eb9a.png', NULL, NULL, NULL, '2023-07-01 15:40:36', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3626, '装饰-框', '装饰-框', '/profile/avatar/bcbc0aee-2c72-4f86-9a4e-88f7e2e7baf6.png', NULL, NULL, NULL, '2023-07-01 15:40:36', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3627, '装饰-框', '装饰-框', '/profile/avatar/be0baaa0-7328-423e-b36e-947063430b83.png', NULL, NULL, NULL, '2023-07-01 15:40:36', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3628, '装饰-框', '装饰-框', '/profile/avatar/bebdbb3c-6a5a-4112-a4bb-fdd66d1544ae.png', NULL, NULL, NULL, '2023-07-01 15:40:36', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3629, '装饰-框', '装饰-框', '/profile/avatar/bd23b0f4-e77a-4ed6-9b7c-5a2159b54f79.png', NULL, NULL, NULL, '2023-07-01 15:40:36', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3630, '装饰-框', '装饰-框', '/profile/avatar/c2e86f6f-5aaf-4ef7-89fb-fbc11749e9bf.png', NULL, NULL, NULL, '2023-07-01 15:40:36', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3631, '装饰-框', '装饰-框', '/profile/avatar/c3c4b9bf-ceb7-4bce-b60d-5646780fa617.png', NULL, NULL, NULL, '2023-07-01 15:40:36', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3632, '装饰-框', '装饰-框', '/profile/avatar/c5e8b4b0-f890-48e2-8909-d13e9c0053c0.png', NULL, NULL, NULL, '2023-07-01 15:40:37', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3633, '装饰-框', '装饰-框', '/profile/avatar/c7f4750d-74de-47f1-9e02-81c4319cd131.png', NULL, NULL, NULL, '2023-07-01 15:40:37', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3634, '装饰-框', '装饰-框', '/profile/avatar/c069e054-07be-4331-962d-4e05bb7001a7.png', NULL, NULL, NULL, '2023-07-01 15:40:37', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3635, '装饰-框', '装饰-框', '/profile/avatar/c850d2f2-eec4-4f22-af18-5e8ef676be05.png', NULL, NULL, NULL, '2023-07-01 15:40:37', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3636, '装饰-框', '装饰-框', '/profile/avatar/c817eece-d018-45b6-af98-0eccf9a7f2ba.png', NULL, NULL, NULL, '2023-07-01 15:40:37', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3637, '装饰-框', '装饰-框', '/profile/avatar/cbf81a52-ea58-46ca-a350-0b383a769f54.png', NULL, NULL, NULL, '2023-07-01 15:40:37', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3638, '装饰-框', '装饰-框', '/profile/avatar/cd4be7fa-1fab-41d6-b66f-81cc23ad2eba.png', NULL, NULL, NULL, '2023-07-01 15:40:37', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3639, '装饰-框', '装饰-框', '/profile/avatar/cc8ce752-7b58-4c87-b6c2-cc9e8865e120.png', NULL, NULL, NULL, '2023-07-01 15:40:37', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3640, '装饰-框', '装饰-框', '/profile/avatar/ceda5467-6a6c-410e-a2e9-05bf43e114f0.png', NULL, NULL, NULL, '2023-07-01 15:40:37', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3641, '装饰-框', '装饰-框', '/profile/avatar/d28e4875-896e-4b68-b34e-25012affa525.png', NULL, NULL, NULL, '2023-07-01 15:40:37', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3642, '装饰-框', '装饰-框', '/profile/avatar/cfb907a7-e7ed-42b1-9114-0233d6eba224.png', NULL, NULL, NULL, '2023-07-01 15:40:37', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3643, '装饰-框', '装饰-框', '/profile/avatar/d29d5fed-827f-448b-aae2-9a9bd720dfb6.png', NULL, NULL, NULL, '2023-07-01 15:40:37', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3644, '装饰-框', '装饰-框', '/profile/avatar/d40649db-aec2-4fac-8127-79cd08adba7a.png', NULL, NULL, NULL, '2023-07-01 15:40:38', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3645, '装饰-框', '装饰-框', '/profile/avatar/d4555cc4-f0d1-4431-9023-af1360b923cf.png', NULL, NULL, NULL, '2023-07-01 15:40:38', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3646, '装饰-框', '装饰-框', '/profile/avatar/d98184bc-dba1-4b52-af18-2ef494f8e1d3.png', NULL, NULL, NULL, '2023-07-01 15:40:38', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3647, '装饰-框', '装饰-框', '/profile/avatar/da2a04c9-e5bc-48eb-b641-3c10baabb5a3.png', NULL, NULL, NULL, '2023-07-01 15:40:38', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3648, '装饰-框', '装饰-框', '/profile/avatar/dd5df4c1-e0e8-4e66-9dc4-a39af59340df.png', NULL, NULL, NULL, '2023-07-01 15:40:38', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3649, '装饰-框', '装饰-框', '/profile/avatar/d80f48c8-b196-49f5-b832-1fba4fced247.png', NULL, NULL, NULL, '2023-07-01 15:40:38', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3650, '装饰-框', '装饰-框', '/profile/avatar/defd5371-8dfc-4bc5-adc5-2edb7a53c04e.png', NULL, NULL, NULL, '2023-07-01 15:40:38', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3651, '装饰-框', '装饰-框', '/profile/avatar/e3d75095-c432-4e40-8219-b7487bafa101.png', NULL, NULL, NULL, '2023-07-01 15:40:38', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3652, '装饰-框', '装饰-框', '/profile/avatar/e11b1a06-996f-4935-9abc-acfbac0de8ac.png', NULL, NULL, NULL, '2023-07-01 15:40:38', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3653, '装饰-框', '装饰-框', '/profile/avatar/dff7db0c-1fd9-4467-9964-c3eb829e270d.png', NULL, NULL, NULL, '2023-07-01 15:40:38', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3654, '装饰-框', '装饰-框', '/profile/avatar/dfa1064d-7383-427a-9627-4716f6813218.png', NULL, NULL, NULL, '2023-07-01 15:40:38', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3655, '装饰-框', '装饰-框', '/profile/avatar/e28eef2e-97ae-4954-8272-c032fefb3fce.png', NULL, NULL, NULL, '2023-07-01 15:40:38', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3656, '装饰-框', '装饰-框', '/profile/avatar/e5a185e0-f062-42f8-b902-3a833b8592cb.png', NULL, NULL, NULL, '2023-07-01 15:40:38', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3657, '装饰-框', '装饰-框', '/profile/avatar/e67a14f5-dee1-418c-92d5-bb8d0ea9af96.png', NULL, NULL, NULL, '2023-07-01 15:40:39', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3658, '装饰-框', '装饰-框', '/profile/avatar/e080e853-bd7f-4f52-99eb-446176370e14.png', NULL, NULL, NULL, '2023-07-01 15:40:39', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3659, '装饰-框', '装饰-框', '/profile/avatar/ea8bba1d-1fc7-4d94-8fde-dbb15fc07635.png', NULL, NULL, NULL, '2023-07-01 15:40:39', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3660, '装饰-框', '装饰-框', '/profile/avatar/f504e905-0164-45bf-bda9-fce8a0403ba2.png', NULL, NULL, NULL, '2023-07-01 15:40:39', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3661, '装饰-框', '装饰-框', '/profile/avatar/e491031f-0164-48da-9799-78db170aa349.png', NULL, NULL, NULL, '2023-07-01 15:40:39', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3662, '装饰-框', '装饰-框', '/profile/avatar/ea20a512-856e-4fd9-a00f-fad9be962a93.png', NULL, NULL, NULL, '2023-07-01 15:40:39', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3663, '装饰-框', '装饰-框', '/profile/avatar/f5847e51-a1b3-4880-8070-9f0b77c28892.png', NULL, NULL, NULL, '2023-07-01 15:40:39', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3664, '装饰-框', '装饰-框', '/profile/avatar/f6173700-d987-4d21-86ba-18efa981caca.png', NULL, NULL, NULL, '2023-07-01 15:40:39', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3665, '装饰-框', '装饰-框', '/profile/avatar/fb779b69-3110-47a3-982e-1477fa76a012.png', NULL, NULL, NULL, '2023-07-01 15:40:39', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3666, '装饰-框', '装饰-框', '/profile/avatar/fcce3d88-2e2d-478a-9157-9ce2cf68fa24.png', NULL, NULL, NULL, '2023-07-01 15:40:39', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3667, '装饰-框', '装饰-框', '/profile/avatar/fb90ca78-a6d3-426b-a62a-400c98e5d88e.png', NULL, NULL, NULL, '2023-07-01 15:40:39', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3668, '装饰-框', '装饰-框', '/profile/avatar/fe1315e0-8e3d-4335-a164-2cc600c53fd7.png', NULL, NULL, NULL, '2023-07-01 15:40:39', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3669, '装饰-其他', '装饰-其他', '/profile/avatar/0a9a2a46-a318-4758-8097-c79e49f0429e.png', NULL, NULL, NULL, '2023-07-01 15:41:36', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3670, '装饰-其他', '装饰-其他', '/profile/avatar/2c46a7af-b59d-4100-8c87-198691ebbcf7.png', NULL, NULL, NULL, '2023-07-01 15:41:37', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3671, '装饰-其他', '装饰-其他', '/profile/avatar/0ab273d4-af42-4775-b8b1-1035257d1bb0.png', NULL, NULL, NULL, '2023-07-01 15:41:37', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3672, '装饰-其他', '装饰-其他', '/profile/avatar/2fc035da-ea0b-4b5e-9a17-0574adaa83f3.png', NULL, NULL, NULL, '2023-07-01 15:41:37', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3673, '装饰-其他', '装饰-其他', '/profile/avatar/04c093cb-7501-48fe-a6d4-a47e92b3d393.png', NULL, NULL, NULL, '2023-07-01 15:41:37', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3674, '装饰-其他', '装饰-其他', '/profile/avatar/4c04da44-2143-4878-98e5-0241d6f42e6f.png', NULL, NULL, NULL, '2023-07-01 15:41:37', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3675, '装饰-其他', '装饰-其他', '/profile/avatar/3e7ac5c1-ea3e-4213-8268-ece80d8f82b6.png', NULL, NULL, NULL, '2023-07-01 15:41:37', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3676, '装饰-其他', '装饰-其他', '/profile/avatar/5f463c04-0ae9-421b-bd52-b6374abef434.png', NULL, NULL, NULL, '2023-07-01 15:41:37', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3677, '装饰-其他', '装饰-其他', '/profile/avatar/6d3dbf43-6448-477d-bfb0-95b74153f400.png', NULL, NULL, NULL, '2023-07-01 15:41:38', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3678, '装饰-其他', '装饰-其他', '/profile/avatar/6f95825a-cba2-4c83-9c73-3ee21ea9a292.png', NULL, NULL, NULL, '2023-07-01 15:41:38', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3679, '装饰-其他', '装饰-其他', '/profile/avatar/2d32e67e-d443-435c-97d0-19bb4d6ba870.png', NULL, NULL, NULL, '2023-07-01 15:41:38', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3680, '装饰-其他', '装饰-其他', '/profile/avatar/6ef6ed8f-3e2a-4980-81a3-1ae808185fc6.png', NULL, NULL, NULL, '2023-07-01 15:41:38', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3681, '装饰-其他', '装饰-其他', '/profile/avatar/7e7a1c8a-df60-4281-b1c9-73972008301b.png', NULL, NULL, NULL, '2023-07-01 15:41:38', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3682, '装饰-其他', '装饰-其他', '/profile/avatar/5b08a6e9-90ad-482e-8c08-3cdd56e34748.png', NULL, NULL, NULL, '2023-07-01 15:41:38', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3683, '装饰-其他', '装饰-其他', '/profile/avatar/08b0e35f-8c04-48c9-870d-4aac24751a19.png', NULL, NULL, NULL, '2023-07-01 15:41:38', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3684, '装饰-其他', '装饰-其他', '/profile/avatar/54a8d94c-4db6-46d8-a0de-b0f59af55145.png', NULL, NULL, NULL, '2023-07-01 15:41:39', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3685, '装饰-其他', '装饰-其他', '/profile/avatar/9ec14435-77c4-4388-8b02-8a199426d3cc.png', NULL, NULL, NULL, '2023-07-01 15:41:39', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3686, '装饰-其他', '装饰-其他', '/profile/avatar/61dcd595-737e-4c13-9b14-368b45852bf7.png', NULL, NULL, NULL, '2023-07-01 15:41:39', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3687, '装饰-其他', '装饰-其他', '/profile/avatar/27efac0f-980b-49be-98fd-c53fef7e65a4.png', NULL, NULL, NULL, '2023-07-01 15:41:39', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3688, '装饰-其他', '装饰-其他', '/profile/avatar/6f4d98f1-fab8-48e0-aa73-e053e667b97c.png', NULL, NULL, NULL, '2023-07-01 15:41:39', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3689, '装饰-其他', '装饰-其他', '/profile/avatar/17a723d4-f84d-4262-b593-cecfce88f4bd.png', NULL, NULL, NULL, '2023-07-01 15:41:39', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3690, '装饰-其他', '装饰-其他', '/profile/avatar/12f52611-9c39-4089-a2ab-e34a4a54db18.png', NULL, NULL, NULL, '2023-07-01 15:41:39', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3691, '装饰-其他', '装饰-其他', '/profile/avatar/69c3fe6c-6fae-4831-b36f-9f4c3364c98a.png', NULL, NULL, NULL, '2023-07-01 15:41:39', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3692, '装饰-其他', '装饰-其他', '/profile/avatar/773c5019-b875-458a-96e8-e8a8975cb714.png', NULL, NULL, NULL, '2023-07-01 15:41:40', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3693, '装饰-其他', '装饰-其他', '/profile/avatar/534ab2dd-a255-40f7-8172-f352b3d4ccc6.png', NULL, NULL, NULL, '2023-07-01 15:41:40', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3694, '装饰-其他', '装饰-其他', '/profile/avatar/119c17f5-58c7-45ca-a983-0bec4dfaf69b.png', NULL, NULL, NULL, '2023-07-01 15:41:40', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3695, '装饰-其他', '装饰-其他', '/profile/avatar/580f793f-eb5d-4609-8c6c-458b0b624864.png', NULL, NULL, NULL, '2023-07-01 15:41:40', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3696, '装饰-其他', '装饰-其他', '/profile/avatar/2159f1da-19e7-4e98-a9f4-1a2722af1557.png', NULL, NULL, NULL, '2023-07-01 15:41:40', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3697, '装饰-其他', '装饰-其他', '/profile/avatar/780aa9f0-8f5a-418a-8935-88c7ca326b74.png', NULL, NULL, NULL, '2023-07-01 15:41:40', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3698, '装饰-其他', '装饰-其他', '/profile/avatar/66ddbbd5-a2c9-4b47-8537-066d7f84262d.png', NULL, NULL, NULL, '2023-07-01 15:41:40', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3699, '装饰-其他', '装饰-其他', '/profile/avatar/9764d175-427d-4e37-a64d-93122957f5f2.png', NULL, NULL, NULL, '2023-07-01 15:41:40', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3700, '装饰-其他', '装饰-其他', '/profile/avatar/61200d1a-60ea-4cc2-9016-87524503becc.png', NULL, NULL, NULL, '2023-07-01 15:41:40', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3701, '装饰-其他', '装饰-其他', '/profile/avatar/819e7145-1e45-46c6-96bd-29d0dc4ebc72.png', NULL, NULL, NULL, '2023-07-01 15:41:40', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3702, '装饰-其他', '装饰-其他', '/profile/avatar/844ac6fe-e4c4-4262-81ff-e320d00b5a19.png', NULL, NULL, NULL, '2023-07-01 15:41:41', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3703, '装饰-其他', '装饰-其他', '/profile/avatar/682781f0-1271-476f-904a-cc0f60af0aeb.png', NULL, NULL, NULL, '2023-07-01 15:41:41', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3704, '装饰-其他', '装饰-其他', '/profile/avatar/236280f4-a323-4216-b009-7ec7f4ef74ad.png', NULL, NULL, NULL, '2023-07-01 15:41:41', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3705, '装饰-其他', '装饰-其他', '/profile/avatar/4135205e-b621-4f7e-b069-bb5201223139.png', NULL, NULL, NULL, '2023-07-01 15:41:41', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3706, '装饰-其他', '装饰-其他', '/profile/avatar/59395528-cec2-48cf-9492-25ff82684898.png', NULL, NULL, NULL, '2023-07-01 15:41:41', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3707, '装饰-其他', '装饰-其他', '/profile/avatar/1862fa6f-6f02-48a2-b22f-c1a07a3581c1.png', NULL, NULL, NULL, '2023-07-01 15:41:41', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3708, '装饰-其他', '装饰-其他', '/profile/avatar/a0aaee71-3c3a-47b5-86ae-fb88c0bc14cf.png', NULL, NULL, NULL, '2023-07-01 15:41:41', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3709, '装饰-其他', '装饰-其他', '/profile/avatar/a4bec079-5ef8-4e57-bc46-26fc78ce2309.png', NULL, NULL, NULL, '2023-07-01 15:41:41', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3710, '装饰-其他', '装饰-其他', '/profile/avatar/a4d324aa-c75c-43e6-8a63-618e80217219.png', NULL, NULL, NULL, '2023-07-01 15:41:41', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3711, '装饰-其他', '装饰-其他', '/profile/avatar/a491a41c-abfe-47c5-8757-44c2c2d4f259.png', NULL, NULL, NULL, '2023-07-01 15:41:41', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3712, '装饰-其他', '装饰-其他', '/profile/avatar/a5195777-6d78-49b3-b9f4-cac642c4aef6.png', NULL, NULL, NULL, '2023-07-01 15:41:41', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3713, '装饰-其他', '装饰-其他', '/profile/avatar/b6159011-eb4f-4079-8a4b-674ffe8c0196.png', NULL, NULL, NULL, '2023-07-01 15:41:42', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3714, '装饰-其他', '装饰-其他', '/profile/avatar/bacded48-d1d5-49de-8c7c-4b0e2a660fce.png', NULL, NULL, NULL, '2023-07-01 15:41:42', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3715, '装饰-其他', '装饰-其他', '/profile/avatar/d8c6d61b-efc5-4e29-9042-a879e260590e.png', NULL, NULL, NULL, '2023-07-01 15:41:42', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3716, '装饰-其他', '装饰-其他', '/profile/avatar/d83dd92d-8708-4e8a-91c3-c9ec474752e6.png', NULL, NULL, NULL, '2023-07-01 15:41:42', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3717, '装饰-其他', '装饰-其他', '/profile/avatar/d096bb4b-1ba4-448d-9c24-ec9e947e3fa5.png', NULL, NULL, NULL, '2023-07-01 15:41:42', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3718, '装饰-其他', '装饰-其他', '/profile/avatar/d340e7f3-75d2-4d46-a226-e96b0238ac68.png', NULL, NULL, NULL, '2023-07-01 15:41:42', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3719, '装饰-其他', '装饰-其他', '/profile/avatar/d80194d5-df3a-4af9-a797-e88213310b90.png', NULL, NULL, NULL, '2023-07-01 15:41:42', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3720, '装饰-其他', '装饰-其他', '/profile/avatar/dbd22409-e83b-47c8-b834-ad9e2581a151.png', NULL, NULL, NULL, '2023-07-01 15:41:42', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3721, '装饰-其他', '装饰-其他', '/profile/avatar/e70f94c5-88cd-4a79-95af-b84bf640136f.png', NULL, NULL, NULL, '2023-07-01 15:41:42', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3722, '装饰-其他', '装饰-其他', '/profile/avatar/d299434e-1bfb-4e89-91f3-6990137c73d6.png', NULL, NULL, NULL, '2023-07-01 15:41:42', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3723, '装饰-其他', '装饰-其他', '/profile/avatar/ebc44b4e-bfc8-4599-9b77-9d37362db852.png', NULL, NULL, NULL, '2023-07-01 15:41:43', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3724, '装饰-其他', '装饰-其他', '/profile/avatar/f8849490-d857-41d2-9516-4eac02bcc31c.png', NULL, NULL, NULL, '2023-07-01 15:41:43', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3725, '装饰-其他', '装饰-其他', '/profile/avatar/ef851626-32c8-4a04-be1a-ef342d4621b8.png', NULL, NULL, NULL, '2023-07-01 15:41:43', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3726, '装饰-其他', '装饰-其他', '/profile/avatar/ea0e977c-be5f-487d-977e-678b85f48251.png', NULL, NULL, NULL, '2023-07-01 15:41:43', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3727, '装饰-其他', '装饰-其他', '/profile/avatar/e6688df4-231a-48d9-84d4-191952038918.png', NULL, NULL, NULL, '2023-07-01 15:41:43', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3728, '装饰-其他', '装饰-其他', '/profile/avatar/efefafe1-d217-4b02-ac53-dd17606001e7.png', NULL, NULL, NULL, '2023-07-01 15:41:43', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3729, '装饰-其他', '装饰-其他', '/profile/avatar/fc027d5c-396e-47ac-ba03-7c5007f7c3ad.png', NULL, NULL, NULL, '2023-07-01 15:41:43', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3730, '装饰-其他', '装饰-其他', '/profile/avatar/fc27b1d1-d9d4-43cc-8a12-ea815d17287c.png', NULL, NULL, NULL, '2023-07-01 15:41:43', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3731, '装饰-其他', '装饰-其他', '/profile/avatar/fef1487e-705e-43b1-abee-3b75dad4b70b.png', NULL, NULL, NULL, '2023-07-01 15:41:43', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3732, '装饰-其他', '装饰-其他', '/profile/avatar/fe71743c-09db-4d5d-979b-5bea713d9d84.png', NULL, NULL, NULL, '2023-07-01 15:41:43', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3733, '装饰-其他', '装饰-其他', '/profile/avatar/ff75a287-e083-420f-bc96-be7f897be07b.png', NULL, NULL, NULL, '2023-07-01 15:41:43', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3734, '装饰-圆形', '装饰-圆形', '/profile/avatar/01ea09d5-4f6a-4375-bdfe-6185d5015de0.png', NULL, NULL, NULL, '2023-07-01 15:42:18', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3735, '装饰-圆形', '装饰-圆形', '/profile/avatar/1f33e55a-713d-4b28-a034-0bbcb710aa49.png', NULL, NULL, NULL, '2023-07-01 15:42:18', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3736, '装饰-圆形', '装饰-圆形', '/profile/avatar/2bfcd352-5ac9-4166-bfed-6c254b93d041.png', NULL, NULL, NULL, '2023-07-01 15:42:18', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3737, '装饰-圆形', '装饰-圆形', '/profile/avatar/1a33d274-b561-4a94-978d-0031ca187b2b.png', NULL, NULL, NULL, '2023-07-01 15:42:19', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3738, '装饰-圆形', '装饰-圆形', '/profile/avatar/2a34d7ba-a764-4a32-b528-c7eabc93771b.png', NULL, NULL, NULL, '2023-07-01 15:42:19', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3739, '装饰-圆形', '装饰-圆形', '/profile/avatar/2c941efe-45ca-412b-bdbc-724c67d38254.png', NULL, NULL, NULL, '2023-07-01 15:42:19', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3740, '装饰-圆形', '装饰-圆形', '/profile/avatar/2daa4b91-5095-400b-be18-528e7db07545.png', NULL, NULL, NULL, '2023-07-01 15:42:19', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3741, '装饰-圆形', '装饰-圆形', '/profile/avatar/4eebfc45-75e9-4b05-b6af-cd8167c35698.png', NULL, NULL, NULL, '2023-07-01 15:42:19', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3742, '装饰-圆形', '装饰-圆形', '/profile/avatar/2de3a60c-8ab9-4312-b3f0-3c85dadb84b5.png', NULL, NULL, NULL, '2023-07-01 15:42:19', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3743, '装饰-圆形', '装饰-圆形', '/profile/avatar/5b273469-06b3-415d-a914-f339c8cc41f9.png', NULL, NULL, NULL, '2023-07-01 15:42:20', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3744, '装饰-圆形', '装饰-圆形', '/profile/avatar/5d7315bc-e07a-44d6-8c91-b3be63d4a6c7.png', NULL, NULL, NULL, '2023-07-01 15:42:20', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3745, '装饰-圆形', '装饰-圆形', '/profile/avatar/5d6adff8-1d41-4120-82de-fdb1e7d0d925.png', NULL, NULL, NULL, '2023-07-01 15:42:20', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3746, '装饰-圆形', '装饰-圆形', '/profile/avatar/5b608572-4d85-4e68-8fa4-4bc50251fd7f.png', NULL, NULL, NULL, '2023-07-01 15:42:20', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3747, '装饰-圆形', '装饰-圆形', '/profile/avatar/5cff964d-c403-4f39-966b-15a96266a44c.png', NULL, NULL, NULL, '2023-07-01 15:42:20', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3748, '装饰-圆形', '装饰-圆形', '/profile/avatar/7e5c3c38-751e-466a-8e05-ac12d4a9f788.png', NULL, NULL, NULL, '2023-07-01 15:42:20', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3749, '装饰-圆形', '装饰-圆形', '/profile/avatar/7ee71af5-383f-4c30-abed-b8a4bb2afd5c.png', NULL, NULL, NULL, '2023-07-01 15:42:20', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3750, '装饰-圆形', '装饰-圆形', '/profile/avatar/7ae90e3a-44f4-4ed6-acd6-f06d74a2bc95.png', NULL, NULL, NULL, '2023-07-01 15:42:21', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3751, '装饰-圆形', '装饰-圆形', '/profile/avatar/6ddc39f6-ad0e-4e20-89bc-1e8f3b32bd6a.png', NULL, NULL, NULL, '2023-07-01 15:42:21', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3752, '装饰-圆形', '装饰-圆形', '/profile/avatar/6dd5a43e-002f-44fa-8d34-34ef20499aff.png', NULL, NULL, NULL, '2023-07-01 15:42:21', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3753, '装饰-圆形', '装饰-圆形', '/profile/avatar/9d45bf09-2717-450d-8d62-f4a4e16043b3.png', NULL, NULL, NULL, '2023-07-01 15:42:21', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3754, '装饰-圆形', '装饰-圆形', '/profile/avatar/9e91889b-4bd7-4fc8-b034-4c41ec65f388.png', NULL, NULL, NULL, '2023-07-01 15:42:21', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3755, '装饰-圆形', '装饰-圆形', '/profile/avatar/9fc7e504-aae9-4a30-8d48-cd7a35186729.png', NULL, NULL, NULL, '2023-07-01 15:42:21', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3756, '装饰-圆形', '装饰-圆形', '/profile/avatar/8e6a4ac5-7b4d-4fd2-9e8c-8fc60eddc7bb.png', NULL, NULL, NULL, '2023-07-01 15:42:21', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3757, '装饰-圆形', '装饰-圆形', '/profile/avatar/17a2fc38-1fbf-49df-a345-e1af71465e21.png', NULL, NULL, NULL, '2023-07-01 15:42:21', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3758, '装饰-圆形', '装饰-圆形', '/profile/avatar/18bb3996-77d6-4065-b5cc-ce7a65cdd2be.png', NULL, NULL, NULL, '2023-07-01 15:42:21', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3759, '装饰-圆形', '装饰-圆形', '/profile/avatar/7eff7a03-d67f-480e-be62-bdce75647669.png', NULL, NULL, NULL, '2023-07-01 15:42:22', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3760, '装饰-圆形', '装饰-圆形', '/profile/avatar/17c2d75e-a83b-48ec-8956-6ffd9c48827b.png', NULL, NULL, NULL, '2023-07-01 15:42:22', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3761, '装饰-圆形', '装饰-圆形', '/profile/avatar/20f81f45-c2cc-4a3d-8be6-824e4e179da1.png', NULL, NULL, NULL, '2023-07-01 15:42:22', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3762, '装饰-圆形', '装饰-圆形', '/profile/avatar/22e2c7c6-6965-4656-8ea5-e538fa44f84b.png', NULL, NULL, NULL, '2023-07-01 15:42:22', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3763, '装饰-圆形', '装饰-圆形', '/profile/avatar/035a73e9-4a62-42e9-b531-90fce7edb3e1.png', NULL, NULL, NULL, '2023-07-01 15:42:22', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3764, '装饰-圆形', '装饰-圆形', '/profile/avatar/42b884a6-2f52-4312-9c79-3d6d537d6100.png', NULL, NULL, NULL, '2023-07-01 15:42:22', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3765, '装饰-圆形', '装饰-圆形', '/profile/avatar/26f11d13-3914-48f2-92b2-158294baa2fb.png', NULL, NULL, NULL, '2023-07-01 15:42:22', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3766, '装饰-圆形', '装饰-圆形', '/profile/avatar/21f2b3a6-0cb7-47fa-b33e-04a5bb416a2c.png', NULL, NULL, NULL, '2023-07-01 15:42:23', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3767, '装饰-圆形', '装饰-圆形', '/profile/avatar/45f08f6e-9051-4f0c-b691-217c1ab46d22.png', NULL, NULL, NULL, '2023-07-01 15:42:23', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3768, '装饰-圆形', '装饰-圆形', '/profile/avatar/19b004be-a8a1-4ade-a6a4-3803c1e7a0ed.png', NULL, NULL, NULL, '2023-07-01 15:42:23', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3769, '装饰-圆形', '装饰-圆形', '/profile/avatar/052c1270-d70a-4315-8156-cd69b41f9487.png', NULL, NULL, NULL, '2023-07-01 15:42:23', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3770, '装饰-圆形', '装饰-圆形', '/profile/avatar/64d28ffb-090a-419a-9144-93ca61ab1822.png', NULL, NULL, NULL, '2023-07-01 15:42:23', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3771, '装饰-圆形', '装饰-圆形', '/profile/avatar/69b98583-86ad-4143-9cc2-eb8ffd528e40.png', NULL, NULL, NULL, '2023-07-01 15:42:23', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3772, '装饰-圆形', '装饰-圆形', '/profile/avatar/73a13a6b-368d-4273-a9ab-916bffc2e515.png', NULL, NULL, NULL, '2023-07-01 15:42:23', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3773, '装饰-圆形', '装饰-圆形', '/profile/avatar/97c63ae6-16cd-4e6e-865e-d8e653d2030f.png', NULL, NULL, NULL, '2023-07-01 15:42:23', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3774, '装饰-圆形', '装饰-圆形', '/profile/avatar/82b86481-6b35-4353-86a6-90b402ad40fe.png', NULL, NULL, NULL, '2023-07-01 15:42:23', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3775, '装饰-圆形', '装饰-圆形', '/profile/avatar/91d092b9-cefa-457e-8b07-0b3c11a6bebd.png', NULL, NULL, NULL, '2023-07-01 15:42:23', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3776, '装饰-圆形', '装饰-圆形', '/profile/avatar/582a174f-43ea-4c1c-99f3-440a30b889d1.png', NULL, NULL, NULL, '2023-07-01 15:42:23', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3777, '装饰-圆形', '装饰-圆形', '/profile/avatar/260d1822-cb2b-4035-8b9d-a95a110d2266.png', NULL, NULL, NULL, '2023-07-01 15:42:23', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3778, '装饰-圆形', '装饰-圆形', '/profile/avatar/526a4c5a-a2ca-43eb-af05-0d6db4e5f470.png', NULL, NULL, NULL, '2023-07-01 15:42:24', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3779, '装饰-圆形', '装饰-圆形', '/profile/avatar/684b03a7-02b0-4166-842a-f01c9e9a8f7b.png', NULL, NULL, NULL, '2023-07-01 15:42:24', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3780, '装饰-圆形', '装饰-圆形', '/profile/avatar/546c4f5a-df41-400e-a45c-c8522bd3188c.png', NULL, NULL, NULL, '2023-07-01 15:42:24', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3781, '装饰-圆形', '装饰-圆形', '/profile/avatar/703a5867-71c1-45a1-80fb-622ad65ef260.png', NULL, NULL, NULL, '2023-07-01 15:42:24', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3782, '装饰-圆形', '装饰-圆形', '/profile/avatar/717e2c7c-f9b3-4339-a192-18cd0c2fd652.png', NULL, NULL, NULL, '2023-07-01 15:42:24', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3783, '装饰-圆形', '装饰-圆形', '/profile/avatar/822a5fa1-a57c-4b7b-a083-68b51b5210c3.png', NULL, NULL, NULL, '2023-07-01 15:42:24', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3784, '装饰-圆形', '装饰-圆形', '/profile/avatar/989f94b9-218f-428f-9570-b52bb8498394.png', NULL, NULL, NULL, '2023-07-01 15:42:24', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3785, '装饰-圆形', '装饰-圆形', '/profile/avatar/8077a2e9-73b9-4853-8cf9-06ed27320d98.png', NULL, NULL, NULL, '2023-07-01 15:42:25', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3786, '装饰-圆形', '装饰-圆形', '/profile/avatar/8411adf1-b015-462f-8d3d-c01362856f39.png', NULL, NULL, NULL, '2023-07-01 15:42:25', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3787, '装饰-圆形', '装饰-圆形', '/profile/avatar/9872bdbb-a539-4bfe-92d5-113571c990b6.png', NULL, NULL, NULL, '2023-07-01 15:42:25', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3788, '装饰-圆形', '装饰-圆形', '/profile/avatar/37233d12-27e9-4af4-997b-0e1e49148a5b.png', NULL, NULL, NULL, '2023-07-01 15:42:25', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3789, '装饰-圆形', '装饰-圆形', '/profile/avatar/55402ebe-ffa7-4ba0-ae22-57c7b149701e.png', NULL, NULL, NULL, '2023-07-01 15:42:25', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3790, '装饰-圆形', '装饰-圆形', '/profile/avatar/3716f38d-918a-4c64-9a83-72e99074e5ad.png', NULL, NULL, NULL, '2023-07-01 15:42:26', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3791, '装饰-圆形', '装饰-圆形', '/profile/avatar/82426dae-e33c-404d-921b-a665b56721e4.png', NULL, NULL, NULL, '2023-07-01 15:42:26', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3792, '装饰-圆形', '装饰-圆形', '/profile/avatar/3390cac0-085a-464d-b1af-139558301ec3.png', NULL, NULL, NULL, '2023-07-01 15:42:26', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3793, '装饰-圆形', '装饰-圆形', '/profile/avatar/61634ce2-6d21-46d9-b3c5-af753a21630b.png', NULL, NULL, NULL, '2023-07-01 15:42:26', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3794, '装饰-圆形', '装饰-圆形', '/profile/avatar/27425ce2-3599-4b01-967b-99970c7571ab.png', NULL, NULL, NULL, '2023-07-01 15:42:26', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3795, '装饰-圆形', '装饰-圆形', '/profile/avatar/76002cc3-5b3d-4a52-b2ae-25e6d8b7b7df.png', NULL, NULL, NULL, '2023-07-01 15:42:27', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3796, '装饰-圆形', '装饰-圆形', '/profile/avatar/88639a08-a9d3-498e-bf9e-e62db7a27667.png', NULL, NULL, NULL, '2023-07-01 15:42:27', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3797, '装饰-圆形', '装饰-圆形', '/profile/avatar/97223ebe-cf1b-48eb-bf49-7671e9e350ec.png', NULL, NULL, NULL, '2023-07-01 15:42:27', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3798, '装饰-圆形', '装饰-圆形', '/profile/avatar/4155066a-b5bc-4d68-be57-49308b890092.png', NULL, NULL, NULL, '2023-07-01 15:42:27', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3799, '装饰-圆形', '装饰-圆形', '/profile/avatar/252053c7-e060-40fd-b635-a4d8d19d0c78.png', NULL, NULL, NULL, '2023-07-01 15:42:27', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3800, '装饰-圆形', '装饰-圆形', '/profile/avatar/44667477-c11b-4445-820d-a248807c351f.png', NULL, NULL, NULL, '2023-07-01 15:42:27', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3801, '装饰-圆形', '装饰-圆形', '/profile/avatar/5546f4a8-f13a-4dbc-9b84-626017c4a572.png', NULL, NULL, NULL, '2023-07-01 15:42:27', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3802, '装饰-圆形', '装饰-圆形', '/profile/avatar/47848798-e58a-42e0-8e1a-3a93403e7186.png', NULL, NULL, NULL, '2023-07-01 15:42:27', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3803, '装饰-圆形', '装饰-圆形', '/profile/avatar/a86649ac-c805-4c70-aa06-6be3a5e3bd0e.png', NULL, NULL, NULL, '2023-07-01 15:42:28', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3804, '装饰-圆形', '装饰-圆形', '/profile/avatar/af108c4a-5c02-487b-9b13-5dd1eeff8629.png', NULL, NULL, NULL, '2023-07-01 15:42:28', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3805, '装饰-圆形', '装饰-圆形', '/profile/avatar/a7207913-a774-4f2a-8c24-d06b4931d8ba.png', NULL, NULL, NULL, '2023-07-01 15:42:28', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3806, '装饰-圆形', '装饰-圆形', '/profile/avatar/a2c7a87a-2511-40fe-b6c2-280bda7ad0d9.png', NULL, NULL, NULL, '2023-07-01 15:42:28', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3807, '装饰-圆形', '装饰-圆形', '/profile/avatar/a83cdf72-c4af-41d4-a754-482edf222f9f.png', NULL, NULL, NULL, '2023-07-01 15:42:28', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3808, '装饰-圆形', '装饰-圆形', '/profile/avatar/ac97ca1e-ffb0-424f-bd11-cfd001d31ed1.png', NULL, NULL, NULL, '2023-07-01 15:42:28', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3809, '装饰-圆形', '装饰-圆形', '/profile/avatar/b3ebb81d-0524-4af8-a6e5-280766a78962.png', NULL, NULL, NULL, '2023-07-01 15:42:29', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3810, '装饰-圆形', '装饰-圆形', '/profile/avatar/af38218b-8cac-4c48-b4f7-b1dd684a8e7f.png', NULL, NULL, NULL, '2023-07-01 15:42:29', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3811, '装饰-圆形', '装饰-圆形', '/profile/avatar/b7979fc1-847a-439c-9ef6-c57c9fb49022.png', NULL, NULL, NULL, '2023-07-01 15:42:29', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3812, '装饰-圆形', '装饰-圆形', '/profile/avatar/b70237bb-5509-48a6-b9f0-c76e7c421358.png', NULL, NULL, NULL, '2023-07-01 15:42:29', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3813, '装饰-圆形', '装饰-圆形', '/profile/avatar/c6a9ba28-17ed-4f44-92a4-c1c7e14fa25e.png', NULL, NULL, NULL, '2023-07-01 15:42:29', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3814, '装饰-圆形', '装饰-圆形', '/profile/avatar/ca8149d2-da2c-4077-af04-511d29823c0e.png', NULL, NULL, NULL, '2023-07-01 15:42:29', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3815, '装饰-圆形', '装饰-圆形', '/profile/avatar/cf1a164b-f47f-418d-9f79-207bea2cf38a.png', NULL, NULL, NULL, '2023-07-01 15:42:29', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3816, '装饰-圆形', '装饰-圆形', '/profile/avatar/c5c1fae5-a0be-471d-a38e-6e7f1e803358.png', NULL, NULL, NULL, '2023-07-01 15:42:29', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3817, '装饰-圆形', '装饰-圆形', '/profile/avatar/b4f9b1b7-b8a0-4148-b480-765d268dabe2.png', NULL, NULL, NULL, '2023-07-01 15:42:29', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3818, '装饰-圆形', '装饰-圆形', '/profile/avatar/d65b67a5-2b60-48e0-88b3-c9cc40cd070e.png', NULL, NULL, NULL, '2023-07-01 15:42:30', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3819, '装饰-圆形', '装饰-圆形', '/profile/avatar/d8aa5227-52ee-4d9b-9655-cf023ee86cd3.png', NULL, NULL, NULL, '2023-07-01 15:42:30', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3820, '装饰-圆形', '装饰-圆形', '/profile/avatar/d47257e0-6019-4677-ba60-ff2baf7c7536.png', NULL, NULL, NULL, '2023-07-01 15:42:30', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3821, '装饰-圆形', '装饰-圆形', '/profile/avatar/db3d9d3b-e9b4-479e-a0e6-8e7499d2d5b8.png', NULL, NULL, NULL, '2023-07-01 15:42:31', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3822, '装饰-圆形', '装饰-圆形', '/profile/avatar/e91114f4-db2c-4dcd-9468-18575c64f0e4.png', NULL, NULL, NULL, '2023-07-01 15:42:31', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3823, '装饰-圆形', '装饰-圆形', '/profile/avatar/e2dc5b03-2784-4779-95bc-96e4f46f9580.png', NULL, NULL, NULL, '2023-07-01 15:42:31', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3824, '装饰-圆形', '装饰-圆形', '/profile/avatar/e8f9cce4-c379-4b7c-b174-5a1b343120f7.png', NULL, NULL, NULL, '2023-07-01 15:42:31', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3825, '装饰-圆形', '装饰-圆形', '/profile/avatar/c8c3dc7a-2e01-4973-a3a1-e64172a23261.png', NULL, NULL, NULL, '2023-07-01 15:42:31', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3826, '装饰-圆形', '装饰-圆形', '/profile/avatar/e086cbeb-f5a9-4252-96e2-0f0ef1058712.png', NULL, NULL, NULL, '2023-07-01 15:42:31', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3827, '装饰-圆形', '装饰-圆形', '/profile/avatar/e91190a3-6119-4375-9135-991d7afe71ae.png', NULL, NULL, NULL, '2023-07-01 15:42:32', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3828, '装饰-圆形', '装饰-圆形', '/profile/avatar/e562d1b3-10f5-40bd-a6fd-83e05ea213a9.png', NULL, NULL, NULL, '2023-07-01 15:42:32', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3829, '装饰-圆形', '装饰-圆形', '/profile/avatar/e656772b-e826-4db2-ad17-17427b5d932c.png', NULL, NULL, NULL, '2023-07-01 15:42:32', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3830, '装饰-圆形', '装饰-圆形', '/profile/avatar/e7abbb17-9c62-400d-91e1-4eb3b6ef04e2.png', NULL, NULL, NULL, '2023-07-01 15:42:32', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3831, '装饰-圆形', '装饰-圆形', '/profile/avatar/eb6bee5e-daf2-48aa-989d-a72fc9ac0f78.png', NULL, NULL, NULL, '2023-07-01 15:42:32', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3832, '装饰-圆形', '装饰-圆形', '/profile/avatar/f0479ab4-ef2a-4eea-a68e-945c96c3f31e.png', NULL, NULL, NULL, '2023-07-01 15:42:32', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3833, '装饰-圆形', '装饰-圆形', '/profile/avatar/fd41ad24-1c48-435c-bbef-f3554bbb1924.png', NULL, NULL, NULL, '2023-07-01 15:42:33', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3834, '装饰-圆形', '装饰-圆形', '/profile/avatar/fb739dd2-a59e-404f-8d55-472bf7362f6a.png', NULL, NULL, NULL, '2023-07-01 15:42:33', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3835, '装饰-圆形', '装饰-圆形', '/profile/avatar/eace15fe-495d-424a-b9bb-df9f81701a8e.png', NULL, NULL, NULL, '2023-07-01 15:42:33', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3836, '圆形1', '装饰-圆形', '/profile/avatar/feae3b67-6d11-4253-9410-af4625792a06.png', NULL, NULL, NULL, '2023-07-01 15:42:33', 'admin', '2023-12-21 15:15:42', 0); +INSERT INTO `scada_gallery` VALUES (3837, '圆形', '装饰', '/profile/avatar/ea9696ac-dafc-425c-baa7-a08c2d8a0f07.png', NULL, NULL, NULL, '2023-07-01 15:42:33', 'admin', '2023-12-21 16:16:34', 0); +INSERT INTO `scada_gallery` VALUES (3838, '自然', '自然', '/profile/avatar/ziran (1).png', NULL, NULL, NULL, '2023-07-01 15:43:54', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3839, '自然', '自然', '/profile/avatar/ziran (4).svg', NULL, NULL, NULL, '2023-07-01 15:43:54', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3840, '自然', '自然', '/profile/avatar/ziran (1).svg', NULL, NULL, NULL, '2023-07-01 15:43:54', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3841, '自然', '自然', '/profile/avatar/ziran (2).svg', NULL, NULL, NULL, '2023-07-01 15:43:54', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3842, '自然', '自然', '/profile/avatar/ziran (2).png', NULL, NULL, NULL, '2023-07-01 15:43:54', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3843, '自然', '自然', '/profile/avatar/ziran (3).svg', NULL, NULL, NULL, '2023-07-01 15:43:54', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3844, '自然', '自然', '/profile/avatar/ziran (3).png', NULL, NULL, NULL, '2023-07-01 15:43:54', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3845, '自然', '自然', '/profile/avatar/ziran (5).png', NULL, NULL, NULL, '2023-07-01 15:43:54', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3846, '自然', '自然', '/profile/avatar/ziran (4).png', NULL, NULL, NULL, '2023-07-01 15:43:54', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3847, '自然', '自然', '/profile/avatar/ziran (5).svg', NULL, NULL, NULL, '2023-07-01 15:43:54', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3848, '自然', '自然', '/profile/avatar/ziran (6).svg', NULL, NULL, NULL, '2023-07-01 15:43:54', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3849, '自然', '自然', '/profile/avatar/ziran (7).svg', NULL, NULL, NULL, '2023-07-01 15:43:55', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3850, '自然', '自然', '/profile/avatar/ziran (6).png', NULL, NULL, NULL, '2023-07-01 15:43:55', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3851, '自然', '自然', '/profile/avatar/ziran (8).svg', NULL, NULL, NULL, '2023-07-01 15:43:55', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3852, '自然', '自然', '/profile/avatar/ziran (8).png', NULL, NULL, NULL, '2023-07-01 15:43:55', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3853, '自然', '自然', '/profile/avatar/ziran (9).svg', NULL, NULL, NULL, '2023-07-01 15:43:55', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3854, '自然', '自然', '/profile/avatar/ziran (7).png', NULL, NULL, NULL, '2023-07-01 15:43:55', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3855, '自然', '自然', '/profile/avatar/ziran (9).png', NULL, NULL, NULL, '2023-07-01 15:43:55', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3856, '自然', '自然', '/profile/avatar/ziran (10).svg', NULL, NULL, NULL, '2023-07-01 15:43:55', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3857, '自然', '自然', '/profile/avatar/ziran (11).svg', NULL, NULL, NULL, '2023-07-01 15:43:55', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3858, '自然', '自然', '/profile/avatar/ziran (14).svg', NULL, NULL, NULL, '2023-07-01 15:43:55', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3859, '自然', '自然', '/profile/avatar/ziran (13).svg', NULL, NULL, NULL, '2023-07-01 15:43:55', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3860, '自然', '自然', '/profile/avatar/ziran (12).svg', NULL, NULL, NULL, '2023-07-01 15:43:55', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3861, '自然', '自然', '/profile/avatar/ziran (15).svg', NULL, NULL, NULL, '2023-07-01 15:43:55', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3862, '自然', '自然', '/profile/avatar/ziran (17).svg', NULL, NULL, NULL, '2023-07-01 15:43:56', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3863, '自然', '自然', '/profile/avatar/ziran (16).svg', NULL, NULL, NULL, '2023-07-01 15:43:56', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3864, '自然', '自然', '/profile/avatar/ziran (20).svg', NULL, NULL, NULL, '2023-07-01 15:43:56', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3865, '自然', '自然', '/profile/avatar/ziran (19).svg', NULL, NULL, NULL, '2023-07-01 15:43:56', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3866, '自然', '自然', '/profile/avatar/ziran (18).svg', NULL, NULL, NULL, '2023-07-01 15:43:56', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3867, '自然', '自然', '/profile/avatar/ziran (22).svg', NULL, NULL, NULL, '2023-07-01 15:43:56', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3868, '自然', '自然', '/profile/avatar/ziran (21).svg', NULL, NULL, NULL, '2023-07-01 15:43:56', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3869, '自然', '自然', '/profile/avatar/ziran (23).svg', NULL, NULL, NULL, '2023-07-01 15:43:56', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3870, '自然', '自然', '/profile/avatar/ziran (25).svg', NULL, NULL, NULL, '2023-07-01 15:43:56', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3871, '自然', '自然', '/profile/avatar/ziran (27).svg', NULL, NULL, NULL, '2023-07-01 15:43:56', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3872, '自然', '自然', '/profile/avatar/ziran (26).svg', NULL, NULL, NULL, '2023-07-01 15:43:56', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3873, '自然', '自然', '/profile/avatar/ziran (24).svg', NULL, NULL, NULL, '2023-07-01 15:43:56', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3874, '自然', '自然', '/profile/avatar/ziran (29).svg', NULL, NULL, NULL, '2023-07-01 15:43:57', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3875, '自然', '自然', '/profile/avatar/ziran (28).svg', NULL, NULL, NULL, '2023-07-01 15:43:57', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3876, '自然', '自然', '/profile/avatar/ziran (30).svg', NULL, NULL, NULL, '2023-07-01 15:43:57', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3877, '自然', '自然', '/profile/avatar/ziran (31).svg', NULL, NULL, NULL, '2023-07-01 15:43:57', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3878, '自然', '自然', '/profile/avatar/ziran (33).svg', NULL, NULL, NULL, '2023-07-01 15:43:57', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3879, '自然', '自然', '/profile/avatar/ziran (32).svg', NULL, NULL, NULL, '2023-07-01 15:43:57', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3880, '自然', '自然', '/profile/avatar/ziran (34).svg', NULL, NULL, NULL, '2023-07-01 15:43:57', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3881, '自然', '自然', '/profile/avatar/ziran (35).svg', NULL, NULL, NULL, '2023-07-01 15:43:57', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3882, '自然', '自然', '/profile/avatar/ziran (36).svg', NULL, NULL, NULL, '2023-07-01 15:43:57', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3883, '自然', '自然', '/profile/avatar/ziran (37).svg', NULL, NULL, NULL, '2023-07-01 15:43:57', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3884, '自然', '自然', '/profile/avatar/ziran (40).svg', NULL, NULL, NULL, '2023-07-01 15:43:57', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3885, '自然', '自然', '/profile/avatar/ziran (41).svg', NULL, NULL, NULL, '2023-07-01 15:43:57', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3886, '自然', '自然', '/profile/avatar/ziran (42).svg', NULL, NULL, NULL, '2023-07-01 15:43:58', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3887, '自然', '自然', '/profile/avatar/ziran (39).svg', NULL, NULL, NULL, '2023-07-01 15:43:58', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3888, '自然', '自然', '/profile/avatar/ziran (47).svg', NULL, NULL, NULL, '2023-07-01 15:43:58', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3889, '自然', '自然', '/profile/avatar/ziran (43).svg', NULL, NULL, NULL, '2023-07-01 15:43:58', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3890, '自然', '自然', '/profile/avatar/ziran (38).svg', NULL, NULL, NULL, '2023-07-01 15:43:58', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3891, '自然', '自然', '/profile/avatar/ziran (44).svg', NULL, NULL, NULL, '2023-07-01 15:43:58', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3892, '自然', '自然', '/profile/avatar/ziran (46).svg', NULL, NULL, NULL, '2023-07-01 15:43:58', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3893, '自然', '自然', '/profile/avatar/ziran (45).svg', NULL, NULL, NULL, '2023-07-01 15:43:58', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3894, '自然', '自然', '/profile/avatar/ziran (48).svg', NULL, NULL, NULL, '2023-07-01 15:43:58', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3895, '自然', '自然', '/profile/avatar/ziran (48).svg', NULL, NULL, NULL, '2023-07-01 15:43:58', 'admin', '2023-12-18 17:37:17', 0); +INSERT INTO `scada_gallery` VALUES (3897, '638357514753139453708.png', '3D图画', '/profile/upload/2025/01/01/638357514753139453708_20250101213218A022.png', NULL, NULL, NULL, '2025-01-01 21:32:18', NULL, '2025-01-01 21:32:18', 0); +INSERT INTO `scada_gallery` VALUES (3898, 'ec7132eedc176082cbbd35c2ab8daff4.png', '3D图画', '/profile/upload/2025/01/01/ec7132eedc176082cbbd35c2ab8daff4_20250101213223A023.png', NULL, NULL, NULL, '2025-01-01 21:32:23', NULL, '2025-01-01 21:32:23', 0); +INSERT INTO `scada_gallery` VALUES (3899, '13dcbc91-fb5b-478e-91ea-b8453a9ccb6f.jpg', '3D图画', '/profile/upload/2025/01/01/13dcbc91-fb5b-478e-91ea-b8453a9ccb6f_20250101214101A027.jpg', NULL, NULL, NULL, '2025-01-01 21:41:01', NULL, '2025-01-01 21:41:01', 0); + +-- ---------------------------- +-- Table structure for scada_model +-- ---------------------------- +DROP TABLE IF EXISTS `scada_model`; +CREATE TABLE `scada_model` ( + `id` bigint NOT NULL AUTO_INCREMENT, + `model_name` varchar(50) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT NULL COMMENT '模型名称', + `model_url` varchar(512) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT NULL COMMENT '模型地址', + `status` int NULL DEFAULT NULL COMMENT '是否弃用', + `image_url` varchar(512) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT NULL COMMENT '缩略图url', + `tenant_id` bigint NULL DEFAULT NULL COMMENT '租户id', + `tenant_name` varchar(30) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT NULL COMMENT '租户名称', + `create_by` varchar(50) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT NULL COMMENT '创建人', + `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `update_by` varchar(50) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT NULL COMMENT '更新人', + `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', + `del_flag` tinyint NOT NULL DEFAULT 0 COMMENT '逻辑删除标识', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 2 CHARACTER SET = utf8mb3 COLLATE = utf8mb3_general_ci COMMENT = '三维配置表' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of scada_model +-- ---------------------------- +INSERT INTO `scada_model` VALUES (1, '组件1', 'https://www.zcool.com.cn/work/ZNjQ5NzEzNjQ=.html', NULL, '', NULL, NULL, NULL, '2025-01-01 21:09:44', NULL, '2025-01-01 21:27:42', 0); + +-- ---------------------------- +-- Table structure for scene_model +-- ---------------------------- +DROP TABLE IF EXISTS `scene_model`; +CREATE TABLE `scene_model` ( + `scene_model_id` bigint NOT NULL AUTO_INCREMENT COMMENT '场景管理id', + `tenant_id` bigint NOT NULL COMMENT '所属租户id', + `scene_model_name` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL COMMENT '场景管理名称', + `status` int NOT NULL DEFAULT 1 COMMENT '场景状态 0-停用 1-启用', + `guid` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT NULL COMMENT '关联的组态id', + `desc` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT NULL COMMENT '场景描述', + `del_flag` char(1) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT '0' COMMENT '删除标志(0代表存在 2代表删除)', + `create_by` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT '' COMMENT '创建者', + `create_time` datetime NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `update_by` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT '' COMMENT '更新者', + `update_time` datetime NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', + `remark` varchar(500) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT NULL COMMENT '备注', + `img_url` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT NULL COMMENT '图片地址', + PRIMARY KEY (`scene_model_id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb3 COLLATE = utf8mb3_general_ci COMMENT = '场景管理' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of scene_model +-- ---------------------------- +INSERT INTO `scene_model` VALUES (1, 1, '测试场景', 1, NULL, '', '0', 'admin', '2025-01-08 15:56:14', 'admin', '2025-01-08 15:56:14', NULL, ''); + +-- ---------------------------- +-- Table structure for scene_model_data +-- ---------------------------- +DROP TABLE IF EXISTS `scene_model_data`; +CREATE TABLE `scene_model_data` ( + `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键id', + `scene_model_id` bigint NULL DEFAULT NULL COMMENT '场景管理id', + `scene_model_device_id` bigint NULL DEFAULT NULL COMMENT '场景关联数据来源id', + `variable_type` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_ci NULL DEFAULT NULL COMMENT '来源类型(0设备 1录入型 2运算型)', + `datasource_id` bigint NULL DEFAULT NULL COMMENT '物模型或变量id', + `enable` tinyint NOT NULL DEFAULT 1 COMMENT '启用(0未启用 1启用)', + `del_flag` char(1) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL DEFAULT '0' COMMENT '删除标志(0代表存在 2代表删除)', + `source_name` varchar(50) CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_ci NULL DEFAULT NULL COMMENT '物模型或变量名称', + `identifier` varchar(32) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT NULL COMMENT '标识符', + `type` tinyint(1) NULL DEFAULT NULL COMMENT '模型类别(1-属性,2-功能,3-事件)', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb3 COLLATE = utf8mb3_unicode_ci ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of scene_model_data +-- ---------------------------- + +-- ---------------------------- +-- Table structure for scene_model_device +-- ---------------------------- +DROP TABLE IF EXISTS `scene_model_device`; +CREATE TABLE `scene_model_device` ( + `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键id', + `scene_model_id` bigint NOT NULL COMMENT '场景id', + `cus_device_id` bigint NULL DEFAULT NULL COMMENT '关联设备id', + `sort` int NULL DEFAULT NULL COMMENT '排序', + `del_flag` char(1) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT '0' COMMENT '删除标志(0代表存在 2代表删除)', + `create_by` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT '' COMMENT '创建者', + `create_time` datetime NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `update_by` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT '' COMMENT '更新者', + `update_time` datetime NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', + `remark` varchar(500) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT NULL COMMENT '备注', + `variable_type` tinyint NOT NULL COMMENT '类型(0设备 1录入型 2运算型)', + `all_enable` tinyint NULL DEFAULT NULL COMMENT '全部启用(0否 1是)', + `name` varchar(50) CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_ci NULL DEFAULT NULL COMMENT '名称', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb3 COLLATE = utf8mb3_unicode_ci COMMENT = '场景管理关联设备' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of scene_model_device +-- ---------------------------- +INSERT INTO `scene_model_device` VALUES (1, 1, NULL, 2, '0', 'admin', '2025-01-08 15:56:14', '', '2025-01-08 15:56:14', NULL, 2, 1, '录入型变量'); +INSERT INTO `scene_model_device` VALUES (2, 1, NULL, 3, '0', 'admin', '2025-01-08 15:56:14', '', '2025-01-08 15:56:14', NULL, 3, 1, '运算型变量'); + +-- ---------------------------- +-- Table structure for scene_model_tag +-- ---------------------------- +DROP TABLE IF EXISTS `scene_model_tag`; +CREATE TABLE `scene_model_tag` ( + `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键id', + `scene_model_id` bigint NOT NULL COMMENT '场景id', + `name` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_ci NOT NULL COMMENT '录入型变量名', + `unit` varchar(20) CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_ci NULL DEFAULT NULL COMMENT '单位', + `data_type` varchar(20) CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_ci NULL DEFAULT NULL COMMENT '数据类型', + `default_value` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_ci NULL DEFAULT NULL COMMENT '默认值', + `is_readonly` int NOT NULL DEFAULT 0 COMMENT '是否只读 0-否 1-是,默认0', + `storage` int NOT NULL DEFAULT 1 COMMENT '存储方式 0-不存储 1-存储', + `variable_type` int NULL DEFAULT NULL COMMENT '变量类型 2-录入型变量 3-运算型变量', + `del_flag` char(1) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT '0' COMMENT '删除标志(0代表存在 2代表删除)', + `create_by` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT '' COMMENT '创建者', + `create_time` datetime NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `update_by` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT '' COMMENT '更新者', + `update_time` datetime NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', + `remark` varchar(500) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT NULL COMMENT '备注', + `cycle_executed` tinyint NULL DEFAULT 0 COMMENT '周期执行(0未执行 1执行)', + `formule` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_ci NULL DEFAULT NULL COMMENT '计算公式 ${id} + ${id}', + `alias_formule` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_ci NULL DEFAULT NULL COMMENT '显示的计算公式 A+B', + `cycle_type` int NULL DEFAULT NULL COMMENT '时间周期方式 1-周期计算 2-自定义时间段', + `cycle` json NULL COMMENT '时间周期内容', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb3 COLLATE = utf8mb3_unicode_ci COMMENT = '场景录入型变量' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of scene_model_tag +-- ---------------------------- + +-- ---------------------------- +-- Table structure for scene_tag_points +-- ---------------------------- +DROP TABLE IF EXISTS `scene_tag_points`; +CREATE TABLE `scene_tag_points` ( + `id` bigint NOT NULL AUTO_INCREMENT COMMENT '运算型变量点id', + `name` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_ci NOT NULL COMMENT '变量点名称', + `alias` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_ci NOT NULL COMMENT '点别名,如 A', + `tag_id` bigint NOT NULL COMMENT '关联的变量id', + `operation` int NOT NULL COMMENT '统计方式 ,用字典定义,暂时是”原值“', + `variable_type` int NULL DEFAULT NULL COMMENT '数据来源方式 1-设备物模型 2-录入型变量 3-运算型变量', + `scene_model_data_id` bigint NULL DEFAULT NULL COMMENT '数据源id,对应scene_model_data表id', + `del_flag` char(1) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT '0' COMMENT '删除标志(0代表存在 2代表删除)', + `create_by` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT '' COMMENT '创建者', + `create_time` datetime NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `update_by` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT '' COMMENT '更新者', + `update_time` datetime NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', + `remark` varchar(500) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT NULL COMMENT '备注', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb3 COLLATE = utf8mb3_unicode_ci COMMENT = '运算型变量点表' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of scene_tag_points +-- ---------------------------- + +-- ---------------------------- +-- Table structure for sip_config +-- ---------------------------- +DROP TABLE IF EXISTS `sip_config`; +CREATE TABLE `sip_config` ( + `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键', + `product_id` bigint NOT NULL COMMENT '产品ID', + `product_name` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL DEFAULT '' COMMENT '产品名称', + `enabled` tinyint(1) NULL DEFAULT NULL COMMENT '使能开关', + `isdefault` tinyint(1) NULL DEFAULT NULL COMMENT '系统默认配置', + `seniorSdp` tinyint(1) NULL DEFAULT NULL COMMENT '拓展sdp', + `domain` varchar(10) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL DEFAULT '' COMMENT '服务器域', + `server_sipid` varchar(20) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL DEFAULT '' COMMENT '服务器sipid', + `password` varchar(20) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL DEFAULT '' COMMENT 'sip认证密码', + `ip` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT 'sip接入IP', + `port` bigint NULL DEFAULT NULL COMMENT 'sip接入端口号', + `del_flag` char(1) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL DEFAULT '0' COMMENT '删除标志(0代表存在 2代表删除)', + `create_by` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL DEFAULT '' COMMENT '创建者', + `create_time` datetime NOT NULL COMMENT '创建时间', + `update_by` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT '' COMMENT '更新者', + `update_time` datetime NULL DEFAULT NULL COMMENT '更新时间', + `remark` varchar(500) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT NULL COMMENT '备注', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 42 CHARACTER SET = utf8mb3 COLLATE = utf8mb3_general_ci COMMENT = 'sip系统配置' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of sip_config +-- ---------------------------- +INSERT INTO `sip_config` VALUES (38, 117, '', 1, 1, NULL, '3402000000', '34020000002000000001', '12345678', '10.0.0.5', 5061, '0', '', '2023-03-16 21:26:18', '', '2023-03-16 21:26:24', NULL); +INSERT INTO `sip_config` VALUES (39, 118, '', 1, 1, NULL, '3402000000', '34020000002000000001', '12345678', '10.0.0.5', 5061, '0', '', '2023-04-11 21:11:54', '', NULL, NULL); +INSERT INTO `sip_config` VALUES (41, 135, '', 1, 1, NULL, '3402000000', '34020000002000000001', '12345678', '10.0.0.5', 5061, '0', '', '2024-01-08 22:14:35', '', NULL, NULL); + +-- ---------------------------- +-- Table structure for sip_device +-- ---------------------------- +DROP TABLE IF EXISTS `sip_device`; +CREATE TABLE `sip_device` ( + `device_id` bigint NOT NULL AUTO_INCREMENT COMMENT '设备ID', + `product_id` bigint NOT NULL DEFAULT 0 COMMENT '产品ID', + `product_name` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL DEFAULT '' COMMENT '产品名称', + `device_sip_id` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL COMMENT '设备SipID', + `device_name` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL DEFAULT '' COMMENT '设备名称', + `manufacturer` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL DEFAULT '' COMMENT '厂商名称', + `model` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL DEFAULT '' COMMENT '产品型号', + `firmware` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL DEFAULT '' COMMENT '固件版本', + `transport` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL DEFAULT 'UDP' COMMENT '传输模式', + `streamMode` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL DEFAULT 'UDP' COMMENT '流模式', + `online` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL DEFAULT '' COMMENT '在线状态', + `registerTime` datetime NOT NULL COMMENT '注册时间', + `lastConnectTime` datetime NULL DEFAULT NULL COMMENT '最后上线时间', + `active_time` datetime NULL DEFAULT NULL COMMENT '激活时间', + `ip` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '设备入网IP', + `port` bigint NULL DEFAULT NULL COMMENT '设备接入端口号', + `hostAddress` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '设备地址', + `del_flag` char(1) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT '0' COMMENT '删除标志(0代表存在 2代表删除)', + `create_by` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT '' COMMENT '创建者', + `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间', + `update_by` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT '' COMMENT '更新者', + `update_time` datetime NULL DEFAULT NULL COMMENT '更新时间', + `remark` varchar(500) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT NULL COMMENT '备注', + PRIMARY KEY (`device_id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 23 CHARACTER SET = utf8mb3 COLLATE = utf8mb3_general_ci COMMENT = '监控设备' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of sip_device +-- ---------------------------- +INSERT INTO `sip_device` VALUES (9, 0, '', '13030300001170000008', '8E085C3RAJE156F', 'Dahua', 'DH-3H3205-ADW', '2.810.0000027.0.R,2022-08-26', 'UDP', 'UDP', '', '2023-02-27 12:07:35', '2023-02-26 23:36:45', NULL, '177.7.0.1', 35332, '177.7.0.1:35332', '0', '', NULL, '', NULL, NULL); +INSERT INTO `sip_device` VALUES (12, 0, '', '11010100001320000001', '海康威视摄像头', 'Hikvision', 'iDS-2DE2402IX-D3/W/XM', 'V5.7.4', 'UDP', 'UDP', '', '2024-01-09 23:29:52', '2024-01-09 23:35:00', NULL, '192.168.2.119', 5065, '192.168.2.119:5065', '0', '', NULL, '', NULL, NULL); +INSERT INTO `sip_device` VALUES (13, 0, '', '11010200001320000017', '', '', '', '', 'UDP', 'UDP', '', '2023-03-16 21:41:45', '2023-03-16 21:52:50', NULL, '192.168.2.119', 5060, '192.168.2.119:5060', '0', '', NULL, '', NULL, NULL); +INSERT INTO `sip_device` VALUES (16, 0, '', '12010100001320000003', 'IP DOME', 'Hikvision', 'iDS-2DE2402IX-D3/W/XM', 'V5.7.4', 'UDP', 'UDP', '', '2023-04-11 21:08:07', '2023-04-11 21:13:16', NULL, '192.168.2.119', 5060, '192.168.2.119:5060', '0', '', NULL, '', NULL, NULL); +INSERT INTO `sip_device` VALUES (18, 0, '', '13030100001320000001', '', 'ABCD', 'TEST001', 'V1.0', 'UDP', 'UDP', '', '2023-03-28 16:06:45', '2023-03-28 16:09:52', NULL, '192.168.205.250', 5063, '192.168.205.250:5063', '0', '', NULL, '', NULL, NULL); +INSERT INTO `sip_device` VALUES (19, 0, '', '11010200001320000001', '海康威视摄像头', 'Hikvision', 'iDS-2DE2402IX-D3/W/XM', 'V5.7.4', 'UDP', 'UDP', '', '2024-01-08 22:08:27', '2024-01-08 22:16:32', NULL, '192.168.2.119', 5065, '192.168.2.119:5065', '0', '', NULL, '', NULL, NULL); +INSERT INTO `sip_device` VALUES (21, 0, '', '51011400001320000001', '', '', '', '', 'UDP', 'UDP', '', '2025-01-07 11:18:09', '2025-01-07 11:18:13', NULL, '171.214.161.209', 25200, '171.214.161.209:25200', '0', '', NULL, '', NULL, NULL); +INSERT INTO `sip_device` VALUES (22, 0, '', '34020000002000000003', 'IP CAMERA', 'Hikvision', 'DS-2DE2Q120MY-T/GL2', 'V5.8.31', 'UDP', 'UDP', '', '2025-01-09 14:46:29', '2025-01-09 14:46:19', NULL, '171.221.105.110', 30337, '171.221.105.110:30337', '0', '', NULL, '', NULL, NULL); + +-- ---------------------------- +-- Table structure for sip_device_channel +-- ---------------------------- +DROP TABLE IF EXISTS `sip_device_channel`; +CREATE TABLE `sip_device_channel` ( + `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键', + `tenant_id` bigint NULL DEFAULT 1, + `tenant_name` varchar(30) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL DEFAULT '' COMMENT '租户名称', + `product_id` bigint NOT NULL DEFAULT 0 COMMENT '产品ID', + `product_name` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL DEFAULT '' COMMENT '产品名称', + `user_id` bigint NOT NULL DEFAULT 0 COMMENT '产品ID', + `user_name` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL DEFAULT '' COMMENT '产品名称', + `device_sip_id` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL COMMENT '设备SipID', + `channel_sip_id` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL COMMENT '通道SipID', + `channel_name` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL DEFAULT '' COMMENT '通道名称', + `register_time` datetime NULL DEFAULT NULL COMMENT '注册时间', + `device_type` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT '' COMMENT '设备类型', + `channel_type` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT '' COMMENT '通道类型', + `cityCode` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL DEFAULT '' COMMENT '城市编码', + `civilCode` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL DEFAULT '' COMMENT '行政区域', + `manufacture` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL DEFAULT '' COMMENT '厂商名称', + `model` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL DEFAULT '' COMMENT '产品型号', + `owner` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL DEFAULT '' COMMENT '设备归属', + `block` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL DEFAULT '' COMMENT '警区', + `address` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL DEFAULT '' COMMENT '安装地址', + `parentId` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL DEFAULT '' COMMENT '父级id', + `ipAddress` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '设备入网IP', + `port` bigint NULL DEFAULT 0 COMMENT '设备接入端口号', + `password` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL DEFAULT '' COMMENT '密码', + `PTZType` bigint NOT NULL DEFAULT 0 COMMENT 'PTZ类型', + `PTZTypeText` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL DEFAULT '' COMMENT 'PTZ类型描述字符串', + `status` tinyint(1) NOT NULL DEFAULT 1 COMMENT '设备状态(1-未激活,2-禁用,3-在线,4-离线)', + `longitude` double(11, 6) NULL DEFAULT NULL COMMENT '设备经度', + `latitude` double(11, 6) NULL DEFAULT NULL COMMENT '设备纬度', + `streamId` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL DEFAULT '' COMMENT '流媒体ID', + `subCount` bigint NOT NULL DEFAULT 0 COMMENT '子设备数', + `parental` tinyint(1) NOT NULL DEFAULT 1 COMMENT '是否有子设备(1-有, 0-没有)', + `hasAudio` tinyint(1) NOT NULL DEFAULT 1 COMMENT '是否含有音频(1-有, 0-没有)', + `del_flag` char(1) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL DEFAULT '0' COMMENT '删除标志(0代表存在 2代表删除)', + `create_by` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL DEFAULT '' COMMENT '创建者', + `create_time` datetime NOT NULL COMMENT '创建时间', + `update_by` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT '' COMMENT '更新者', + `update_time` datetime NULL DEFAULT NULL COMMENT '更新时间', + `remark` varchar(500) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT NULL COMMENT '备注', + PRIMARY KEY (`id`, `device_sip_id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 106 CHARACTER SET = utf8mb3 COLLATE = utf8mb3_general_ci COMMENT = '监控设备通道信息' ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of sip_device_channel +-- ---------------------------- +INSERT INTO `sip_device_channel` VALUES (105, 1, 'admin', 135, '视频监控', 0, '', '34020000002000000003', '51011400001320000002', 'Camera 01', '2025-01-09 14:46:29', '', '', '', '3402000000', 'Hikvision', 'IP Camera', 'Owner', '', 'Address', '34020000002000000001', '192.168.1.107', 5061, '', 0, '', 3, 0.000000, 0.000000, '', 0, 0, 0, '0', '', '2025-01-07 12:04:47', '', NULL, NULL); + +-- ---------------------------- +-- Table structure for sys_auth_user +-- ---------------------------- +DROP TABLE IF EXISTS `sys_auth_user`; +CREATE TABLE `sys_auth_user` ( + `auth_id` bigint NOT NULL AUTO_INCREMENT COMMENT '授权ID', + `uuid` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '第三方平台用户唯一ID', + `user_id` bigint NOT NULL COMMENT '系统用户ID', + `login_name` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '登录账号', + `user_name` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '用户昵称', + `avatar` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '头像地址', + `email` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '用户邮箱', + `source` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '用户来源', + `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间', + PRIMARY KEY (`auth_id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '第三方授权表' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of sys_auth_user +-- ---------------------------- + +-- ---------------------------- +-- Table structure for sys_client +-- ---------------------------- +DROP TABLE IF EXISTS `sys_client`; +CREATE TABLE `sys_client` ( + `id` bigint NOT NULL AUTO_INCREMENT COMMENT 'id唯一标识', + `client_key` varchar(32) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT NULL COMMENT '客户端key', + `client_secret` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT NULL COMMENT '客户端秘钥', + `token` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT NULL COMMENT '客户端token', + `grant_type` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT NULL COMMENT '授权类型', + `device_type` varchar(32) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT NULL COMMENT '设备类型', + `timeout` int NULL DEFAULT 604800 COMMENT 'token固定超时', + `enable` char(1) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT '1' COMMENT '是否生效(0-不生效,1-生效)', + `del_flag` char(1) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT '0' COMMENT '删除标志(0代表存在 2代表删除)', + `create_by` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT '' COMMENT '创建者', + `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间', + `update_by` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT '' COMMENT '更新者', + `update_time` datetime NULL DEFAULT NULL COMMENT '更新时间', + `remark` varchar(500) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT NULL COMMENT '备注', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb3 COLLATE = utf8mb3_general_ci COMMENT = '系统授权表' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of sys_client +-- ---------------------------- + +-- ---------------------------- +-- Table structure for sys_config +-- ---------------------------- +DROP TABLE IF EXISTS `sys_config`; +CREATE TABLE `sys_config` ( + `config_id` int NOT NULL AUTO_INCREMENT COMMENT '参数主键', + `config_name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '参数名称', + `config_key` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '参数键名', + `config_value` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '参数键值', + `config_type` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT 'N' COMMENT '系统内置(Y是 N否)', + `create_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '创建者', + `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间', + `update_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '更新者', + `update_time` datetime NULL DEFAULT NULL COMMENT '更新时间', + `remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '备注', + PRIMARY KEY (`config_id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 7 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '参数配置表' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of sys_config +-- ---------------------------- +INSERT INTO `sys_config` VALUES (1, '主框架页-默认皮肤样式名称', 'sys.index.skinName', ' skin-blue', 'Y', 'admin', '2021-12-15 21:36:18', 'admin', '2025-01-08 15:43:23', '蓝色 skin-blue、绿色 skin-green、紫色 skin-purple、红色 skin-red、黄色 skin-yellow'); +INSERT INTO `sys_config` VALUES (2, '用户管理-账号初始密码', 'sys.user.initPassword', '123456', 'Y', 'admin', '2021-12-15 21:36:18', '', NULL, '初始化密码 123456'); +INSERT INTO `sys_config` VALUES (3, '主框架页-侧边栏主题', 'sys.index.sideTheme', 'theme-dark', 'Y', 'admin', '2021-12-15 21:36:18', 'admin', '2025-01-07 14:03:15', '深色主题theme-dark,浅色主题theme-light'); +INSERT INTO `sys_config` VALUES (5, '账号自助-是否开启用户注册功能', 'sys.account.registerUser', 'true', 'Y', 'admin', '2021-12-15 21:36:18', 'admin', '2025-01-09 01:25:06', '是否开启注册用户功能(true开启,false关闭)'); +INSERT INTO `sys_config` VALUES (6, '账号自助-验证码开关', 'sys.account.captchaEnabled', 'true', 'Y', 'admin', '2023-03-10 23:29:21', 'admin', '2025-01-08 14:16:23', '是否开启验证码功能(true开启,false关闭)'); + +-- ---------------------------- +-- Table structure for sys_dept +-- ---------------------------- +DROP TABLE IF EXISTS `sys_dept`; +CREATE TABLE `sys_dept` ( + `dept_id` bigint NOT NULL AUTO_INCREMENT COMMENT '机构id', + `dept_user_id` bigint NULL DEFAULT NULL COMMENT '机构系统账号ID', + `parent_id` bigint NOT NULL DEFAULT 0 COMMENT '上级机构id', + `ancestors` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '祖级列表', + `dept_name` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '机构名称', + `order_num` int NULL DEFAULT 0 COMMENT '显示顺序', + `leader` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '联系人', + `phone` varchar(11) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '联系电话', + `status` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '0' COMMENT '机构状态(0正常 1停用)', + `del_flag` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '0' COMMENT '删除标志(0代表存在 2代表删除)', + `create_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '创建者', + `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间', + `update_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '更新者', + `update_time` datetime NULL DEFAULT NULL COMMENT '更新时间', + `email` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `dept_type` tinyint NULL DEFAULT NULL COMMENT '机构类型', + PRIMARY KEY (`dept_id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 102 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '机构表' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of sys_dept +-- ---------------------------- +INSERT INTO `sys_dept` VALUES (100, 1, 0, '0', '信达物联', 0, '马春雷', '15888888888', '0', '0', 'admin', '2021-12-15 21:36:18', 'admin', '2025-01-07 22:15:06', '164770707@qq.com', 1); +INSERT INTO `sys_dept` VALUES (101, 7, 100, '0,100', 'web端注册用户归属机构', 0, 'gongkongbang', '15888888885', '0', '0', 'admin', '2024-05-08 16:35:48', 'admin', '2025-01-07 22:15:20', NULL, 2); + +-- ---------------------------- +-- Table structure for sys_dict_data +-- ---------------------------- +DROP TABLE IF EXISTS `sys_dict_data`; +CREATE TABLE `sys_dict_data` ( + `dict_code` bigint NOT NULL AUTO_INCREMENT COMMENT '字典编码', + `dict_sort` int NULL DEFAULT 0 COMMENT '字典排序', + `dict_label` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '字典标签', + `dict_value` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '字典键值', + `dict_type` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '字典类型', + `css_class` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '样式属性(其他样式扩展)', + `list_class` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '表格回显样式', + `is_default` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT 'N' COMMENT '是否默认(Y是 N否)', + `status` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '0' COMMENT '状态(0正常 1停用)', + `create_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '创建者', + `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间', + `update_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '更新者', + `update_time` datetime NULL DEFAULT NULL COMMENT '更新时间', + `remark` varchar(800) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '备注', + PRIMARY KEY (`dict_code`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 801 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '字典数据表' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of sys_dict_data +-- ---------------------------- +INSERT INTO `sys_dict_data` VALUES (1, 1, '男', '0', 'sys_user_sex', '', '', 'Y', '0', 'admin', '2021-12-15 21:36:18', '', NULL, '性别男'); +INSERT INTO `sys_dict_data` VALUES (2, 2, '女', '1', 'sys_user_sex', '', '', 'N', '0', 'admin', '2021-12-15 21:36:18', '', NULL, '性别女'); +INSERT INTO `sys_dict_data` VALUES (3, 3, '未知', '2', 'sys_user_sex', '', '', 'N', '0', 'admin', '2021-12-15 21:36:18', '', NULL, '性别未知'); +INSERT INTO `sys_dict_data` VALUES (4, 1, '显示', '0', 'sys_show_hide', '', 'primary', 'Y', '0', 'admin', '2021-12-15 21:36:18', '', NULL, '显示菜单'); +INSERT INTO `sys_dict_data` VALUES (5, 2, '隐藏', '1', 'sys_show_hide', '', 'danger', 'N', '0', 'admin', '2021-12-15 21:36:18', '', NULL, '隐藏菜单'); +INSERT INTO `sys_dict_data` VALUES (6, 1, '正常', '0', 'sys_normal_disable', '', 'primary', 'Y', '0', 'admin', '2021-12-15 21:36:18', '', NULL, '正常状态'); +INSERT INTO `sys_dict_data` VALUES (7, 2, '停用', '1', 'sys_normal_disable', '', 'danger', 'N', '0', 'admin', '2021-12-15 21:36:18', '', NULL, '停用状态'); +INSERT INTO `sys_dict_data` VALUES (8, 1, '正常', '0', 'sys_job_status', '', 'primary', 'Y', '0', 'admin', '2021-12-15 21:36:18', '', NULL, '正常状态'); +INSERT INTO `sys_dict_data` VALUES (9, 2, '暂停', '1', 'sys_job_status', '', 'danger', 'N', '0', 'admin', '2021-12-15 21:36:18', '', NULL, '停用状态'); +INSERT INTO `sys_dict_data` VALUES (10, 1, '默认', 'DEFAULT', 'sys_job_group', '', '', 'Y', '0', 'admin', '2021-12-15 21:36:18', '', NULL, '默认分组'); +INSERT INTO `sys_dict_data` VALUES (11, 2, '系统', 'SYSTEM', 'sys_job_group', '', '', 'N', '0', 'admin', '2021-12-15 21:36:18', '', NULL, '系统分组'); +INSERT INTO `sys_dict_data` VALUES (12, 1, '是', 'Y', 'sys_yes_no', '', 'primary', 'Y', '0', 'admin', '2021-12-15 21:36:18', '', NULL, '系统默认是'); +INSERT INTO `sys_dict_data` VALUES (13, 2, '否', 'N', 'sys_yes_no', '', 'danger', 'N', '0', 'admin', '2021-12-15 21:36:18', '', NULL, '系统默认否'); +INSERT INTO `sys_dict_data` VALUES (14, 1, '通知', '1', 'sys_notice_type', '', 'warning', 'Y', '0', 'admin', '2021-12-15 21:36:18', '', NULL, '通知'); +INSERT INTO `sys_dict_data` VALUES (15, 2, '公告', '2', 'sys_notice_type', '', 'success', 'N', '0', 'admin', '2021-12-15 21:36:18', '', NULL, '公告'); +INSERT INTO `sys_dict_data` VALUES (16, 1, '正常', '0', 'sys_notice_status', '', 'primary', 'Y', '0', 'admin', '2021-12-15 21:36:18', '', NULL, '正常状态'); +INSERT INTO `sys_dict_data` VALUES (17, 2, '关闭', '1', 'sys_notice_status', '', 'danger', 'N', '0', 'admin', '2021-12-15 21:36:18', '', NULL, '关闭状态'); +INSERT INTO `sys_dict_data` VALUES (18, 1, '新增', '1', 'sys_oper_type', '', 'info', 'N', '0', 'admin', '2021-12-15 21:36:18', '', NULL, '新增操作'); +INSERT INTO `sys_dict_data` VALUES (19, 2, '修改', '2', 'sys_oper_type', '', 'info', 'N', '0', 'admin', '2021-12-15 21:36:18', '', NULL, '修改操作'); +INSERT INTO `sys_dict_data` VALUES (20, 3, '删除', '3', 'sys_oper_type', '', 'danger', 'N', '0', 'admin', '2021-12-15 21:36:18', '', NULL, '删除操作'); +INSERT INTO `sys_dict_data` VALUES (21, 4, '授权', '4', 'sys_oper_type', '', 'primary', 'N', '0', 'admin', '2021-12-15 21:36:18', '', NULL, '授权操作'); +INSERT INTO `sys_dict_data` VALUES (22, 5, '导出', '5', 'sys_oper_type', '', 'warning', 'N', '0', 'admin', '2021-12-15 21:36:18', '', NULL, '导出操作'); +INSERT INTO `sys_dict_data` VALUES (23, 6, '导入', '6', 'sys_oper_type', '', 'warning', 'N', '0', 'admin', '2021-12-15 21:36:18', '', NULL, '导入操作'); +INSERT INTO `sys_dict_data` VALUES (24, 7, '强退', '7', 'sys_oper_type', '', 'danger', 'N', '0', 'admin', '2021-12-15 21:36:18', '', NULL, '强退操作'); +INSERT INTO `sys_dict_data` VALUES (25, 8, '生成代码', '8', 'sys_oper_type', '', 'warning', 'N', '0', 'admin', '2021-12-15 21:36:18', '', NULL, '生成操作'); +INSERT INTO `sys_dict_data` VALUES (26, 9, '清空数据', '9', 'sys_oper_type', '', 'danger', 'N', '0', 'admin', '2021-12-15 21:36:18', '', NULL, '清空操作'); +INSERT INTO `sys_dict_data` VALUES (27, 1, '成功', '0', 'sys_common_status', '', 'primary', 'N', '0', 'admin', '2021-12-15 21:36:18', '', NULL, '正常状态'); +INSERT INTO `sys_dict_data` VALUES (28, 2, '失败', '1', 'sys_common_status', '', 'danger', 'N', '0', 'admin', '2021-12-15 21:36:18', '', NULL, '停用状态'); +INSERT INTO `sys_dict_data` VALUES (100, 1, '属性', '1', 'iot_things_type', '', 'primary', 'Y', '0', 'admin', '2021-12-12 16:41:15', 'admin', '2021-12-15 22:49:37', ''); +INSERT INTO `sys_dict_data` VALUES (101, 2, '功能', '2', 'iot_things_type', '', 'success', 'Y', '0', 'admin', '2021-12-12 16:43:33', 'admin', '2021-12-14 16:33:11', ''); +INSERT INTO `sys_dict_data` VALUES (102, 3, '事件', '3', 'iot_things_type', NULL, 'warning', 'Y', '0', 'admin', '2021-12-12 16:46:04', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (103, 1, '整数', 'integer', 'iot_data_type', '', '', 'Y', '0', 'admin', '2021-12-12 20:20:46', 'admin', '2021-12-14 16:09:56', ''); +INSERT INTO `sys_dict_data` VALUES (104, 2, '小数', 'decimal', 'iot_data_type', NULL, 'default', 'Y', '0', 'admin', '2021-12-12 20:21:21', 'admin', '2021-12-15 22:51:07', NULL); +INSERT INTO `sys_dict_data` VALUES (105, 3, '布尔', 'bool', 'iot_data_type', NULL, 'default', 'Y', '0', 'admin', '2021-12-12 20:22:12', 'admin', '2021-12-15 22:51:02', NULL); +INSERT INTO `sys_dict_data` VALUES (106, 4, '枚举', 'enum', 'iot_data_type', NULL, 'default', 'Y', '0', 'admin', '2021-12-12 20:22:37', 'admin', '2021-12-15 22:50:57', NULL); +INSERT INTO `sys_dict_data` VALUES (107, 5, '字符串', 'string', 'iot_data_type', NULL, 'default', 'Y', '0', 'admin', '2021-12-12 20:22:54', 'admin', '2021-12-15 22:50:52', NULL); +INSERT INTO `sys_dict_data` VALUES (108, 1, '是', '1', 'iot_yes_no', '', 'success', 'Y', '0', 'admin', '2021-12-12 20:25:14', 'admin', '2023-12-15 16:40:49', ''); +INSERT INTO `sys_dict_data` VALUES (109, 2, '否', '0', 'iot_yes_no', '', 'danger', 'Y', '0', 'admin', '2021-12-12 20:25:25', 'admin', '2023-12-15 16:41:01', ''); +INSERT INTO `sys_dict_data` VALUES (110, 6, '数组', 'array', 'iot_data_type', NULL, 'default', 'Y', '0', 'admin', '2021-12-13 18:18:04', 'admin', '2021-12-15 22:50:42', NULL); +INSERT INTO `sys_dict_data` VALUES (111, 1, '未发布', '1', 'iot_product_status', NULL, 'info', 'N', '0', 'admin', '2021-12-19 15:01:18', 'admin', '2021-12-19 15:01:55', NULL); +INSERT INTO `sys_dict_data` VALUES (112, 2, '已发布', '2', 'iot_product_status', NULL, 'success', 'N', '0', 'admin', '2021-12-19 15:01:43', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (113, 1, '直连设备', '1', 'iot_device_type', NULL, 'default', 'N', '0', 'admin', '2021-12-19 15:03:49', 'admin', '2021-12-19 15:10:13', NULL); +INSERT INTO `sys_dict_data` VALUES (114, 2, '网关设备', '2', 'iot_device_type', NULL, 'default', 'N', '0', 'admin', '2021-12-19 15:04:28', 'admin', '2023-02-09 16:25:46', NULL); +INSERT INTO `sys_dict_data` VALUES (116, 1, 'WIFI', '1', 'iot_network_method', NULL, 'default', 'N', '0', 'admin', '2021-12-19 15:07:35', 'admin', '2021-12-22 00:11:19', NULL); +INSERT INTO `sys_dict_data` VALUES (117, 2, '蜂窝(2G/3G/4G/5G)', '2', 'iot_network_method', NULL, 'default', 'N', '0', 'admin', '2021-12-19 15:08:30', 'admin', '2022-01-14 02:12:27', NULL); +INSERT INTO `sys_dict_data` VALUES (118, 3, '以太网', '3', 'iot_network_method', NULL, 'default', 'N', '0', 'admin', '2021-12-19 15:09:08', 'admin', '2022-01-14 02:12:39', NULL); +INSERT INTO `sys_dict_data` VALUES (119, 1, '简单认证', '1', 'iot_vertificate_method', NULL, 'default', 'N', '0', 'admin', '2021-12-19 15:13:16', 'admin', '2022-06-05 00:14:48', NULL); +INSERT INTO `sys_dict_data` VALUES (120, 2, '加密认证', '2', 'iot_vertificate_method', NULL, 'default', 'N', '0', 'admin', '2021-12-19 15:13:26', 'admin', '2022-06-05 00:14:57', NULL); +INSERT INTO `sys_dict_data` VALUES (122, 1, 'ESP8266/Arduino', '1', 'iot_device_chip', NULL, 'default', 'N', '0', 'admin', '2021-12-24 15:54:52', 'admin', '2021-12-24 16:07:31', NULL); +INSERT INTO `sys_dict_data` VALUES (123, 3, 'ESP32/Arduino', '2', 'iot_device_chip', NULL, 'default', 'N', '0', 'admin', '2021-12-24 15:55:04', 'admin', '2021-12-24 16:07:26', NULL); +INSERT INTO `sys_dict_data` VALUES (124, 2, 'ESP8266/RTOS', '3', 'iot_device_chip', NULL, 'default', 'N', '0', 'admin', '2021-12-24 15:56:08', 'admin', '2021-12-24 16:07:17', NULL); +INSERT INTO `sys_dict_data` VALUES (127, 4, 'ESP32/ESP-IDF', '4', 'iot_device_chip', NULL, 'default', 'N', '0', 'admin', '2021-12-24 16:07:54', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (128, 5, '树莓派/Python', '5', 'iot_device_chip', NULL, 'default', 'N', '0', 'admin', '2021-12-24 16:08:31', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (129, 0, '未激活', '1', 'iot_device_status', NULL, 'warning', 'N', '0', 'admin', '2021-12-27 22:21:04', 'admin', '2021-12-27 22:22:09', NULL); +INSERT INTO `sys_dict_data` VALUES (130, 0, '禁用', '2', 'iot_device_status', NULL, 'danger', 'N', '0', 'admin', '2021-12-27 22:21:22', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (131, 0, '在线', '3', 'iot_device_status', NULL, 'success', 'N', '0', 'admin', '2021-12-27 22:21:42', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (132, 0, '离线', '4', 'iot_device_status', NULL, 'info', 'N', '0', 'admin', '2021-12-27 22:22:01', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (133, 0, '启用', '1', 'iot_is_enable', NULL, 'success', 'N', '0', 'admin', '2022-01-12 23:25:08', 'admin', '2022-01-12 23:25:30', NULL); +INSERT INTO `sys_dict_data` VALUES (134, 0, '禁用', '0', 'iot_is_enable', NULL, 'info', 'N', '0', 'admin', '2022-01-12 23:25:19', 'admin', '2022-01-12 23:25:38', NULL); +INSERT INTO `sys_dict_data` VALUES (135, 0, '提醒通知', '1', 'iot_alert_level', NULL, 'success', 'N', '0', 'admin', '2022-01-13 14:58:10', 'admin', '2022-01-13 14:58:31', NULL); +INSERT INTO `sys_dict_data` VALUES (136, 0, '轻微问题', '2', 'iot_alert_level', NULL, 'warning', 'N', '0', 'admin', '2022-01-13 14:59:00', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (137, 0, '严重警告', '3', 'iot_alert_level', NULL, 'danger', 'N', '0', 'admin', '2022-01-13 14:59:16', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (138, 0, '不需要处理', '1', 'iot_process_status', NULL, 'default', 'N', '0', 'admin', '2022-01-13 15:06:03', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (139, 0, '未处理', '2', 'iot_process_status', NULL, 'default', 'N', '0', 'admin', '2022-01-13 15:06:14', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (140, 0, '已处理', '3', 'iot_process_status', NULL, 'default', 'N', '0', 'admin', '2022-01-13 15:06:24', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (141, 1, '属性上报', '1', 'iot_device_log_type', NULL, 'primary', 'N', '0', 'admin', '2022-01-13 15:10:32', 'admin', '2022-03-13 00:20:25', NULL); +INSERT INTO `sys_dict_data` VALUES (142, 3, '事件上报', '3', 'iot_device_log_type', NULL, 'danger', 'N', '0', 'admin', '2022-01-13 15:10:43', 'admin', '2022-03-13 00:21:00', NULL); +INSERT INTO `sys_dict_data` VALUES (143, 2, '功能调用', '2', 'iot_device_log_type', NULL, 'warning', 'N', '0', 'admin', '2022-01-13 15:10:55', 'admin', '2022-03-13 00:20:32', NULL); +INSERT INTO `sys_dict_data` VALUES (144, 4, '设备升级', '4', 'iot_device_log_type', NULL, 'success', 'N', '0', 'admin', '2022-01-13 15:11:08', 'admin', '2022-03-13 00:21:06', NULL); +INSERT INTO `sys_dict_data` VALUES (145, 5, '设备上线', '5', 'iot_device_log_type', NULL, 'success', 'N', '0', 'admin', '2022-01-13 15:11:23', 'admin', '2022-03-13 00:21:26', NULL); +INSERT INTO `sys_dict_data` VALUES (146, 6, '设备离线', '6', 'iot_device_log_type', NULL, 'info', 'N', '0', 'admin', '2022-01-13 15:11:32', 'admin', '2022-03-13 00:21:13', NULL); +INSERT INTO `sys_dict_data` VALUES (147, 4, '其他', '4', 'iot_network_method', NULL, 'default', 'N', '0', 'admin', '2022-01-14 02:12:49', 'admin', '2022-01-14 02:13:03', NULL); +INSERT INTO `sys_dict_data` VALUES (148, 6, '安卓/Android', '6', 'iot_device_chip', NULL, 'default', 'N', '0', 'admin', '2022-01-16 12:39:27', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (149, 7, '其他', '7', 'iot_device_chip', NULL, 'default', 'N', '0', 'admin', '2022-01-16 12:39:55', 'admin', '2022-01-16 12:40:13', NULL); +INSERT INTO `sys_dict_data` VALUES (150, 1, '小度平台', '1', 'oauth_platform', NULL, 'primary', 'N', '0', 'admin', '2022-02-07 20:29:23', 'admin', '2022-02-07 22:24:28', NULL); +INSERT INTO `sys_dict_data` VALUES (151, 2, '天猫精灵', '2', 'oauth_platform', NULL, 'danger', 'N', '0', 'admin', '2022-02-07 20:29:41', 'admin', '2022-02-07 22:23:14', NULL); +INSERT INTO `sys_dict_data` VALUES (152, 3, '小米小爱', '3', 'oauth_platform', NULL, 'success', 'N', '0', 'admin', '2022-02-07 20:30:07', 'admin', '2022-02-07 22:23:24', NULL); +INSERT INTO `sys_dict_data` VALUES (153, 4, '其他平台', '4', 'oauth_platform', NULL, 'warning', 'N', '0', 'admin', '2022-02-07 22:23:52', 'admin', '2022-02-07 22:24:02', NULL); +INSERT INTO `sys_dict_data` VALUES (154, 1, '微信登录', 'WECHAT', 'iot_social_platform', NULL, 'default', 'N', '0', 'admin', '2022-04-20 16:41:33', 'admin', '2023-09-22 10:27:54', NULL); +INSERT INTO `sys_dict_data` VALUES (155, 2, 'QQ登录', 'QQ', 'iot_social_platform', NULL, 'default', 'N', '0', 'admin', '2022-04-20 16:42:46', 'admin', '2023-09-22 10:28:03', NULL); +INSERT INTO `sys_dict_data` VALUES (156, 0, '启用', '0', 'iot_social_platform_status', NULL, 'success', 'N', '0', 'admin', '2022-04-20 17:02:48', 'admin', '2022-05-12 17:39:40', '启用'); +INSERT INTO `sys_dict_data` VALUES (157, 1, '未启用', '1', 'iot_social_platform_status', NULL, 'info', 'N', '0', 'admin', '2022-04-20 17:03:15', 'admin', '2022-05-21 13:44:13', '禁用'); +INSERT INTO `sys_dict_data` VALUES (158, 3, '支付宝', 'ALIPAY', 'iot_social_platform', NULL, 'default', 'N', '0', 'admin', '2022-05-12 17:49:24', 'admin', '2022-05-12 17:50:21', NULL); +INSERT INTO `sys_dict_data` VALUES (159, 1, '自动定位', '1', 'iot_location_way', NULL, 'success', 'N', '0', 'admin', '2022-05-21 13:46:51', 'admin', '2022-05-21 13:53:23', 'IP定位,精确到城市'); +INSERT INTO `sys_dict_data` VALUES (160, 2, '设备定位', '2', 'iot_location_way', NULL, 'warning', 'N', '0', 'admin', '2022-05-21 13:46:51', 'admin', '2022-05-21 13:49:21', '最精确定位'); +INSERT INTO `sys_dict_data` VALUES (161, 3, '自定义位置', '3', 'iot_location_way', NULL, 'primary', 'N', '0', 'admin', '2022-05-21 13:48:50', 'admin', '2022-05-21 13:55:45', '位置自定义'); +INSERT INTO `sys_dict_data` VALUES (162, 3, '简单+加密', '3', 'iot_vertificate_method', NULL, 'default', 'N', '0', 'admin', '2022-06-05 00:15:46', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (163, 1, '未使用', '1', 'iot_auth_status', NULL, 'info', 'N', '0', 'admin', '2022-06-07 17:39:22', 'admin', '2022-06-07 17:40:10', NULL); +INSERT INTO `sys_dict_data` VALUES (164, 2, '已使用', '2', 'iot_auth_status', NULL, 'success', 'N', '0', 'admin', '2022-06-07 17:40:01', 'admin', '2022-06-07 23:21:49', NULL); +INSERT INTO `sys_dict_data` VALUES (165, 7, '对象', 'object', 'iot_data_type', NULL, 'default', 'N', '0', 'admin', '2023-02-09 16:20:57', 'admin', '2023-02-09 16:21:08', NULL); +INSERT INTO `sys_dict_data` VALUES (166, 3, '监控设备', '3', 'iot_device_type', NULL, 'default', 'N', '0', 'admin', '2023-02-09 16:26:00', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (167, 1, '未使用', '1', 'sip_gen_status', NULL, 'info', 'N', '0', 'admin', '2023-02-19 15:49:04', 'admin', '2023-02-19 15:50:03', NULL); +INSERT INTO `sys_dict_data` VALUES (168, 2, '在线', '2', 'sip_gen_status', NULL, 'success', 'N', '0', 'admin', '2023-02-19 15:49:24', 'admin', '2023-02-24 21:36:29', NULL); +INSERT INTO `sys_dict_data` VALUES (169, 0, 'DVR', '111', 'video_type', NULL, 'default', 'N', '0', 'admin', '2023-02-22 01:07:06', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (170, 1, 'NVR', '118', 'video_type', NULL, 'default', 'N', '0', 'admin', '2023-02-22 01:07:59', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (171, 2, '报警控制器', '117', 'video_type', NULL, 'default', 'N', '0', 'admin', '2023-02-22 01:08:13', 'admin', '2023-02-22 01:08:35', NULL); +INSERT INTO `sys_dict_data` VALUES (172, 4, '摄像机', '131', 'video_type', NULL, 'default', 'N', '0', 'admin', '2023-02-22 01:08:52', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (173, 5, 'IPC', '132', 'video_type', NULL, 'default', 'N', '0', 'admin', '2023-02-22 01:09:11', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (174, 6, '显示器', '133', 'video_type', NULL, 'default', 'N', '0', 'admin', '2023-02-22 01:09:30', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (175, 7, '报警输入设备', '134', 'video_type', NULL, 'default', 'N', '0', 'admin', '2023-02-22 01:09:49', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (176, 8, '报警输出设备', '135', 'video_type', NULL, 'default', 'N', '0', 'admin', '2023-02-22 01:10:08', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (177, 9, '语音输入设备', '136', 'video_type', NULL, 'default', 'N', '0', 'admin', '2023-02-22 01:10:29', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (178, 10, '语音输出设备', '137', 'video_type', NULL, 'default', 'N', '0', 'admin', '2023-02-22 01:10:46', 'admin', '2023-02-22 01:10:51', NULL); +INSERT INTO `sys_dict_data` VALUES (179, 11, '移动传输设备', '138', 'video_type', NULL, 'default', 'N', '0', 'admin', '2023-02-22 01:11:09', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (180, 0, '报警控制器', '117', 'channel_type', NULL, 'default', 'N', '0', 'admin', '2023-02-22 01:12:09', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (181, 1, '摄像机', '131', 'channel_type', NULL, 'default', 'N', '0', 'admin', '2023-02-22 01:12:24', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (182, 2, 'IPC', '132', 'channel_type', NULL, 'default', 'N', '0', 'admin', '2023-02-22 01:12:39', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (183, 3, '显示器', '133', 'channel_type', NULL, 'default', 'N', '0', 'admin', '2023-02-22 01:12:57', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (184, 5, '报警输入设备', '134', 'channel_type', NULL, 'default', 'N', '0', 'admin', '2023-02-22 01:13:14', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (185, 6, '报警输出设备', '135', 'channel_type', NULL, 'default', 'N', '0', 'admin', '2023-02-22 01:13:29', 'admin', '2023-02-22 01:13:49', NULL); +INSERT INTO `sys_dict_data` VALUES (186, 7, '语音输入设备', '136', 'channel_type', NULL, 'default', 'N', '0', 'admin', '2023-02-22 01:14:14', 'admin', '2023-02-22 01:14:24', NULL); +INSERT INTO `sys_dict_data` VALUES (187, 8, '语音输出设备', '137', 'channel_type', NULL, 'default', 'N', '0', 'admin', '2023-02-22 01:14:50', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (188, 9, '移动传输设备', '138', 'channel_type', NULL, 'default', 'N', '0', 'admin', '2023-02-22 01:15:11', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (189, 3, '离线', '3', 'sip_gen_status', NULL, 'warning', 'N', '0', 'admin', '2023-02-24 21:36:53', 'admin', '2023-02-24 21:37:11', NULL); +INSERT INTO `sys_dict_data` VALUES (190, 4, '禁用', '4', 'sip_gen_status', NULL, 'danger', 'N', '0', 'admin', '2023-02-24 21:37:39', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (191, 0, '云端轮询', '0', 'data_collect_type', NULL, 'default', 'N', '0', 'admin', '2023-02-28 13:56:16', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (192, 0, '边缘采集', '1', 'data_collect_type', NULL, 'default', 'N', '0', 'admin', '2023-02-28 13:56:28', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (193, 0, '1分钟', '60', 'iot_modbus_poll_time', NULL, 'default', 'N', '0', 'admin', '2023-02-28 14:39:07', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (194, 0, '2分钟', '120', 'iot_modbus_poll_time', NULL, 'default', 'N', '0', 'admin', '2023-02-28 14:39:20', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (195, 0, '5分钟', '300', 'iot_modbus_poll_time', NULL, 'default', 'N', '0', 'admin', '2023-02-28 14:39:29', 'admin', '2023-02-28 14:39:35', NULL); +INSERT INTO `sys_dict_data` VALUES (196, 1, '03(读保持寄存器)', '3', 'iot_modbus_status_code', NULL, 'default', 'N', '0', 'admin', '2023-02-28 15:19:46', 'admin', '2023-12-21 14:33:17', NULL); +INSERT INTO `sys_dict_data` VALUES (197, 0, '01(读线圈)', '1', 'iot_modbus_status_code', NULL, 'default', 'N', '0', 'admin', '2023-02-28 15:20:06', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (198, 0, 'MQTT', 'MQTT', 'iot_transport_type', NULL, 'default', 'N', '0', 'admin', '2023-02-28 16:35:40', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (199, 1, 'TCP', 'TCP', 'iot_transport_type', NULL, 'default', 'N', '0', 'admin', '2023-02-28 16:35:51', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (200, 2, 'COAP', 'COAP', 'iot_transport_type', NULL, 'default', 'N', '0', 'admin', '2023-02-28 16:36:00', 'admin', '2023-02-28 16:36:22', NULL); +INSERT INTO `sys_dict_data` VALUES (201, 3, 'UDP', 'UDP', 'iot_transport_type', NULL, 'default', 'N', '0', 'admin', '2023-02-28 16:36:15', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (230, 99, '其他', '0', 'sys_oper_type', '', 'info', 'N', '0', 'admin', '2023-03-10 23:28:32', '', NULL, '其他操作'); +INSERT INTO `sys_dict_data` VALUES (231, 0, '事件上报', '3', 'iot_event_type', NULL, 'danger', 'N', '0', 'admin', '2023-03-29 00:25:28', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (232, 0, '设备上线', '5', 'iot_event_type', NULL, 'success', 'N', '0', 'admin', '2023-03-29 00:25:52', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (233, 0, '设备离线', '6', 'iot_event_type', NULL, 'info', 'N', '0', 'admin', '2023-03-29 00:26:09', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (234, 0, '服务下发', '1', 'iot_function_type', NULL, 'primary', 'N', '0', 'admin', '2023-03-29 00:38:26', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (235, 0, '属性获取', '2', 'iot_function_type', NULL, 'success', 'N', '0', 'admin', '2023-03-29 00:38:44', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (236, 0, 'OTA升级', '3', 'iot_function_type', NULL, 'warning', 'N', '0', 'admin', '2023-03-29 00:39:08', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (237, 0, '读写', '0', 'iot_data_read_write', NULL, 'primary', 'N', '0', 'admin', '2023-04-09 02:12:05', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (238, 0, '只读', '1', 'iot_data_read_write', NULL, 'info', 'N', '0', 'admin', '2023-04-09 02:12:19', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (239, 0, '全部设备', '1', 'oat_update_limit', NULL, 'default', 'N', '0', 'admin', '2023-04-09 23:57:06', 'admin', '2023-04-11 11:53:57', NULL); +INSERT INTO `sys_dict_data` VALUES (240, 1, '指定设备', '2', 'oat_update_limit', NULL, 'default', 'N', '0', 'admin', '2023-04-11 11:53:28', 'admin', '2023-04-11 11:53:52', NULL); +INSERT INTO `sys_dict_data` VALUES (241, 4, 'GB28181', 'GB28181', 'iot_transport_type', NULL, 'primary', 'N', '0', 'admin', '2023-05-12 14:25:39', 'admin', '2023-05-12 14:26:09', NULL); +INSERT INTO `sys_dict_data` VALUES (242, 1, '02(读离散量输入)', '2', 'iot_modbus_status_code', NULL, 'default', 'N', '0', 'admin', '2023-07-03 10:16:48', 'admin', '2023-07-03 10:17:35', NULL); +INSERT INTO `sys_dict_data` VALUES (243, 3, '04(读输入寄存器)', '4', 'iot_modbus_status_code', NULL, 'default', 'N', '0', 'admin', '2023-07-03 10:17:18', 'admin', '2023-07-03 10:17:58', NULL); +INSERT INTO `sys_dict_data` VALUES (244, 4, '微信开放平台网站应用', 'wechat_open_web', 'iot_social_platform', NULL, 'default', 'N', '0', 'admin', '2023-08-23 11:28:15', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (245, 5, '微信开放平台移动应用', 'wechat_open_mobile', 'iot_social_platform', NULL, 'default', 'N', '0', 'admin', '2023-08-23 11:29:14', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (246, 6, '微信开放平台小程序', 'wechat_open_mini_program', 'iot_social_platform', NULL, 'default', 'N', '0', 'admin', '2023-08-23 11:38:12', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (247, 7, '微信开放平台网站应用个人中心绑定', 'wechat_open_web_bind', 'iot_social_platform', NULL, 'default', 'N', '0', 'admin', '2023-10-09 11:28:15', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (248, 0, '16位 无符号', 'ushort', 'iot_modbus_data_type', NULL, 'default', 'N', '0', 'admin', '2023-09-04 14:11:54', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (249, 1, '16位 有符号', 'short', 'iot_modbus_data_type', NULL, 'default', 'N', '0', 'admin', '2023-09-04 14:12:26', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (250, 2, '32位 有符号(ABCD)', 'long-ABCD', 'iot_modbus_data_type', NULL, 'default', 'N', '0', 'admin', '2023-09-04 14:12:53', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (251, 3, '32位 有符号(CDAB)', 'long-CDAB', 'iot_modbus_data_type', NULL, 'default', 'N', '0', 'admin', '2023-09-04 14:13:21', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (252, 4, '32位 无符号(ABCD)', 'ulong-ABCD', 'iot_modbus_data_type', NULL, 'default', 'N', '0', 'admin', '2023-09-04 14:13:42', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (253, 5, '32位 无符号(CDAB)', 'ulong-CDAB', 'iot_modbus_data_type', NULL, 'default', 'N', '0', 'admin', '2023-09-04 14:14:06', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (254, 6, '32位 浮点数(ABCD)', 'float-ABCD', 'iot_modbus_data_type', NULL, 'default', 'N', '0', 'admin', '2023-09-04 14:14:28', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (255, 7, '32位 浮点数(CDAB)', 'float-CDAB', 'iot_modbus_data_type', NULL, 'default', 'N', '0', 'admin', '2023-09-04 14:14:50', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (256, 8, '位', 'bit', 'iot_modbus_data_type', NULL, 'default', 'N', '0', 'admin', '2023-09-04 14:15:13', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (257, 1, 'Java脚本引擎', 'java', 'rule_script_language', NULL, 'default', 'N', '0', 'admin', '2023-11-04 01:51:09', 'admin', '2023-11-04 01:51:42', NULL); +INSERT INTO `sys_dict_data` VALUES (258, 2, 'JavaScript脚本引擎', 'js', 'rule_script_language', NULL, 'default', 'N', '0', 'admin', '2023-11-04 01:51:36', 'admin', '2023-11-05 10:28:30', NULL); +INSERT INTO `sys_dict_data` VALUES (259, 1, '普通脚本节点', 'script', 'rule_script_type', NULL, 'default', 'N', '0', 'admin', '2023-11-04 01:53:11', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (260, 2, '选择脚本节点 (switch)', 'switch_script', 'rule_script_type', NULL, 'default', 'N', '0', 'admin', '2023-11-04 01:53:32', 'admin', '2023-11-04 01:56:44', NULL); +INSERT INTO `sys_dict_data` VALUES (261, 3, '条件脚本节点 (if)', 'if_script', 'rule_script_type', NULL, 'default', 'N', '0', 'admin', '2023-11-04 01:53:48', 'admin', '2023-11-04 01:56:55', NULL); +INSERT INTO `sys_dict_data` VALUES (262, 4, '数量循环节点 (for)', 'for_script', 'rule_script_type', NULL, 'default', 'N', '0', 'admin', '2023-11-04 01:54:11', 'admin', '2023-11-04 01:57:07', NULL); +INSERT INTO `sys_dict_data` VALUES (263, 5, '条件循环节点 (while)', 'while_script', 'rule_script_type', NULL, 'default', 'N', '0', 'admin', '2023-11-04 01:54:30', 'admin', '2023-11-04 01:57:16', NULL); +INSERT INTO `sys_dict_data` VALUES (264, 6, '退出循环节点 (break)', 'break_script', 'rule_script_type', NULL, 'default', 'N', '0', 'admin', '2023-11-04 01:54:50', 'admin', '2023-11-04 01:57:29', NULL); +INSERT INTO `sys_dict_data` VALUES (265, 3, 'groovy脚本引擎', 'groovy', 'rule_script_language', NULL, 'default', 'N', '0', 'admin', '2023-11-05 10:29:14', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (266, 0, '其他', 'OTHER', 'dueros_related_device', '', 'default', 'N', '0', 'admin', '2023-08-23 11:28:15', 'admin', '2023-12-08 09:46:54', ''); +INSERT INTO `sys_dict_data` VALUES (267, 1, '电灯', 'LIGHT', 'dueros_related_device', NULL, 'default', 'N', '0', 'admin', '2023-08-23 11:28:15', 'admin', '2023-12-08 16:22:53', ''); +INSERT INTO `sys_dict_data` VALUES (268, 1, '空调', 'AIR_CONDITION', 'dueros_related_device', NULL, 'default', 'N', '0', 'admin', '2023-08-23 11:28:15', 'admin', '2023-11-23 15:57:38', 'name,connectivity,turnOnState,mode,temperature,targetTemperature,fanSpeed'); +INSERT INTO `sys_dict_data` VALUES (269, 1, '窗帘', 'CURTAIN', 'dueros_related_device', NULL, 'default', 'N', '0', 'admin', '2023-08-23 11:28:15', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (270, 1, '窗纱', 'CURT_SIMP', 'dueros_related_device', NULL, 'default', 'N', '0', 'admin', '2023-08-23 11:28:15', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (271, 1, '插座', 'SOCKET', 'dueros_related_device', NULL, 'default', 'N', '0', 'admin', '2023-08-23 11:28:15', 'admin', '2023-11-23 15:56:44', 'name,connectivity,turnOnState'); +INSERT INTO `sys_dict_data` VALUES (272, 1, '开关', 'SWITCH', 'dueros_related_device', NULL, 'default', 'N', '0', 'admin', '2023-08-23 11:28:15', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (273, 1, '冰箱', 'FRIDGE', 'dueros_related_device', NULL, 'default', 'N', '0', 'admin', '2023-08-23 11:28:15', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (274, 1, '净水器', 'WATER_PURIFIER', 'dueros_related_device', NULL, 'default', 'N', '0', 'admin', '2023-08-23 11:28:15', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (275, 1, '加湿器', 'HUMIDIFIER', 'dueros_related_device', NULL, 'default', 'N', '0', 'admin', '2023-08-23 11:28:15', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (276, 1, '除湿器', 'DEHUMIDIFIER', 'dueros_related_device', NULL, 'default', 'N', '0', 'admin', '2023-08-23 11:28:15', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (277, 1, '电磁炉', 'INDUCTION_COOKER', 'dueros_related_device', NULL, 'default', 'N', '0', 'admin', '2023-08-23 11:28:15', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (278, 1, '空气净化器', 'AIR_PURIFIER', 'dueros_related_device', NULL, 'default', 'N', '0', 'admin', '2023-08-23 11:28:15', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (279, 1, '洗衣机', 'WASHING_MACHINE', 'dueros_related_device', NULL, 'default', 'N', '0', 'admin', '2023-08-23 11:28:15', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (280, 1, '热水器', 'WATER_HEATER', 'dueros_related_device', NULL, 'default', 'N', '0', 'admin', '2023-08-23 11:28:15', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (281, 1, '燃气灶', 'GAS_STOVE', 'dueros_related_device', NULL, 'default', 'N', '0', 'admin', '2023-08-23 11:28:15', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (282, 1, '电视机', 'TV_SET', 'dueros_related_device', NULL, 'default', 'N', '0', 'admin', '2023-08-23 11:28:15', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (283, 1, '网络盒子', 'OTT_BOX', 'dueros_related_device', NULL, 'default', 'N', '0', 'admin', '2023-08-23 11:28:15', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (284, 1, '油烟机', 'RANGE_HOOD', 'dueros_related_device', NULL, 'default', 'N', '0', 'admin', '2023-08-23 11:28:15', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (285, 1, '电风扇', 'FAN', 'dueros_related_device', NULL, 'default', 'N', '0', 'admin', '2023-08-23 11:28:15', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (286, 1, '投影仪', 'PROJECTOR', 'dueros_related_device', NULL, 'default', 'N', '0', 'admin', '2023-08-23 11:28:15', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (287, 1, '扫地机器人', 'SWEEPING_ROBOT', 'dueros_related_device', NULL, 'default', 'N', '0', 'admin', '2023-08-23 11:28:15', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (288, 1, '热水壶', 'KETTLE', 'dueros_related_device', NULL, 'default', 'N', '0', 'admin', '2023-08-23 11:28:15', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (289, 1, '微波炉', 'MICROWAVE_OVEN', 'dueros_related_device', NULL, 'default', 'N', '0', 'admin', '2023-08-23 11:28:15', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (290, 1, '压力锅', 'PRESSURE_COOKER', 'dueros_related_device', NULL, 'default', 'N', '0', 'admin', '2023-08-23 11:28:15', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (291, 1, '电饭煲', 'RICE_COOKER', 'dueros_related_device', NULL, 'default', 'N', '0', 'admin', '2023-08-23 11:28:15', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (292, 1, '破壁机', 'HIGH_SPEED_BLENDER', 'dueros_related_device', NULL, 'default', 'N', '0', 'admin', '2023-08-23 11:28:15', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (293, 1, '新风机', 'AIR_FRESHER', 'dueros_related_device', NULL, 'default', 'N', '0', 'admin', '2023-08-23 11:28:15', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (294, 1, '晾衣架', 'CLOTHES_RACK', 'dueros_related_device', NULL, 'default', 'N', '0', 'admin', '2023-08-23 11:28:15', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (295, 1, '烤箱设备', 'OVEN', 'dueros_related_device', NULL, 'default', 'N', '0', 'admin', '2023-08-23 11:28:15', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (296, 1, '蒸烤箱', 'STEAM_OVEN', 'dueros_related_device', NULL, 'default', 'N', '0', 'admin', '2023-08-23 11:28:15', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (297, 1, '蒸箱', 'STEAM_BOX', 'dueros_related_device', NULL, 'default', 'N', '0', 'admin', '2023-08-23 11:28:15', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (298, 1, '电暖器', 'HEATER', 'dueros_related_device', NULL, 'default', 'N', '0', 'admin', '2023-08-23 11:28:15', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (299, 1, '开窗器', 'WINDOW_OPENER', 'dueros_related_device', NULL, 'default', 'N', '0', 'admin', '2023-08-23 11:28:15', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (300, 1, '摄像头', 'WEBCAM', 'dueros_related_device', NULL, 'default', 'N', '0', 'admin', '2023-08-23 11:28:15', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (301, 1, '相机', 'CAMERA', 'dueros_related_device', NULL, 'default', 'N', '0', 'admin', '2023-08-23 11:28:15', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (302, 1, '机器人', 'ROBOT', 'dueros_related_device', NULL, 'default', 'N', '0', 'admin', '2023-08-23 11:28:15', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (303, 1, '打印机', 'PRINTER', 'dueros_related_device', NULL, 'default', 'N', '0', 'admin', '2023-08-23 11:28:15', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (304, 1, '饮水机', 'WATER_COOLER', 'dueros_related_device', NULL, 'default', 'N', '0', 'admin', '2023-08-23 11:28:15', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (305, 1, '鱼缸', 'FISH_TANK', 'dueros_related_device', NULL, 'default', 'N', '0', 'admin', '2023-08-23 11:28:15', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (306, 1, '浇花器', 'WATERING_DEVICE', 'dueros_related_device', NULL, 'default', 'N', '0', 'admin', '2023-08-23 11:28:15', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (307, 1, '机顶盒', 'SET_TOP_BOX', 'dueros_related_device', NULL, 'default', 'N', '0', 'admin', '2023-08-23 11:28:15', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (308, 1, '香薰机', 'AROMATHERAPY_MACHINE', 'dueros_related_device', NULL, 'default', 'N', '0', 'admin', '2023-08-23 11:28:15', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (309, 1, 'DVD', 'DVD', 'dueros_related_device', NULL, 'default', 'N', '0', 'admin', '2023-08-23 11:28:15', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (310, 1, '鞋柜', 'SHOE_CABINET', 'dueros_related_device', NULL, 'default', 'N', '0', 'admin', '2023-08-23 11:28:15', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (311, 1, '走步机', 'WALKING_MACHINE', 'dueros_related_device', NULL, 'default', 'N', '0', 'admin', '2023-08-23 11:28:15', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (312, 1, '跑步机', 'TREADMILL', 'dueros_related_device', NULL, 'default', 'N', '0', 'admin', '2023-08-23 11:28:15', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (313, 1, '床', 'BED', 'dueros_related_device', NULL, 'default', 'N', '0', 'admin', '2023-08-23 11:28:15', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (314, 1, '浴霸', 'YUBA', 'dueros_related_device', NULL, 'default', 'N', '0', 'admin', '2023-08-23 11:28:15', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (315, 1, '花洒', 'SHOWER', 'dueros_related_device', NULL, 'default', 'N', '0', 'admin', '2023-08-23 11:28:15', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (316, 1, '浴缸', 'BATHTUB', 'dueros_related_device', NULL, 'default', 'N', '0', 'admin', '2023-08-23 11:28:15', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (317, 1, '消毒柜', 'DISINFECTION_CABINET', 'dueros_related_device', NULL, 'default', 'N', '0', 'admin', '2023-08-23 11:28:15', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (318, 1, '洗碗机', 'DISHWASHER', 'dueros_related_device', NULL, 'default', 'N', '0', 'admin', '2023-08-23 11:28:15', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (319, 1, '沙发品类', 'SOFA', 'dueros_related_device', NULL, 'default', 'N', '0', 'admin', '2023-08-23 11:28:15', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (320, 1, '门铃', 'DOOR_BELL', 'dueros_related_device', NULL, 'default', 'N', '0', 'admin', '2023-08-23 11:28:15', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (321, 1, '电梯', 'ELEVATOR', 'dueros_related_device', NULL, 'default', 'N', '0', 'admin', '2023-08-23 11:28:15', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (322, 1, '体重秤', 'WEIGHT_SCALE', 'dueros_related_device', NULL, 'default', 'N', '0', 'admin', '2023-08-23 11:28:15', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (323, 1, '体脂秤', 'BODY_FAT_SCALE', 'dueros_related_device', NULL, 'default', 'N', '0', 'admin', '2023-08-23 11:28:15', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (324, 1, '壁挂炉', 'WALL_HUNG_GAS_BOILER', 'dueros_related_device', NULL, 'default', 'N', '0', 'admin', '2023-08-23 11:28:15', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (325, 1, '特定设备的组合场景', 'SCENE_TRIGGER', 'dueros_related_device', NULL, 'default', 'N', '1', 'admin', '2023-08-23 11:28:15', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (326, 1, '特定设备的组合场景', 'ACTIVITY_TRIGGER', 'dueros_related_device', NULL, 'default', 'N', '1', 'admin', '2023-08-23 11:28:15', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (327, 1, '打开', 'turnOn', 'dueros_actions', NULL, 'default', 'N', '0', 'admin', '2023-09-22 10:35:15', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (328, 1, '关闭', 'turnOff', 'dueros_actions', NULL, 'default', 'N', '0', 'admin', '2023-09-22 10:35:15', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (329, 1, '定时打开', 'timingTurnOn', 'dueros_actions', NULL, 'default', 'N', '0', 'admin', '2023-09-22 10:35:15', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (330, 1, '定时关闭', 'timingTurnOff', 'dueros_actions', NULL, 'default', 'N', '0', 'admin', '2023-09-22 10:35:15', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (331, 1, '查询开关状态', 'getTurnOnState', 'dueros_actions', NULL, 'default', 'N', '0', 'admin', '2023-09-22 10:35:15', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (332, 1, '设备启动', 'startUp', 'dueros_actions', NULL, 'default', 'N', '0', 'admin', '2023-09-22 10:35:15', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (333, 1, '设置灯光亮度', 'setBrightnessPercentage', 'dueros_actions', NULL, 'default', 'N', '0', 'admin', '2023-09-22 10:35:15', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (334, 1, '调亮灯光', 'incrementBrightnessPercentage', 'dueros_actions', NULL, 'default', 'N', '0', 'admin', '2023-09-22 10:35:15', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (335, 1, '调暗灯光', 'decrementBrightnessPercentage', 'dueros_actions', NULL, 'default', 'N', '0', 'admin', '2023-09-22 10:35:15', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (336, 1, '升高温度', 'incrementTemperature', 'dueros_actions', NULL, 'default', 'N', '0', 'admin', '2023-09-22 10:35:15', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (337, 1, '降低温度', 'decrementTemperature', 'dueros_actions', NULL, 'default', 'N', '0', 'admin', '2023-09-22 10:35:15', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (338, 1, '设置温度', 'setTemperature', 'dueros_actions', NULL, 'default', 'N', '0', 'admin', '2023-09-22 10:35:15', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (339, 1, '查询温度(当前温度和目标温度)', 'getTemperature', 'dueros_actions', NULL, 'default', 'N', '1', 'admin', '2023-09-22 10:35:15', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (340, 1, '查询当前温度', 'getTemperatureReading', 'dueros_actions', NULL, 'default', 'N', '0', 'admin', '2023-09-22 10:35:15', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (341, 1, '查询目标温度', 'getTargetTemperature', 'dueros_actions', NULL, 'default', 'N', '1', 'admin', '2023-09-22 10:35:15', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (342, 1, '设置湿度模式', 'setHumidity', 'dueros_actions', NULL, 'default', 'N', '0', 'admin', '2023-09-22 10:35:15', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (343, 1, '增大湿度', 'incrementHumidity', 'dueros_actions', NULL, 'default', 'N', '0', 'admin', '2023-09-22 10:35:15', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (344, 1, '降低湿度', 'decrementHumidity', 'dueros_actions', NULL, 'default', 'N', '0', 'admin', '2023-09-22 10:35:15', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (345, 1, '查询湿度', 'getHumidity', 'dueros_actions', NULL, 'default', 'N', '0', 'admin', '2023-09-22 10:35:15', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (346, 1, '查询目标湿度', 'getTargetHumidity', 'dueros_actions', NULL, 'default', 'N', '0', 'admin', '2023-09-22 10:35:15', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (347, 1, '查询二氧化碳含量', 'getCO2Quantity', 'dueros_actions', NULL, 'default', 'N', '0', 'admin', '2023-09-22 10:35:15', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (348, 1, '暂停', 'pause', 'dueros_actions', NULL, 'default', 'N', '0', 'admin', '2023-09-22 10:35:15', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (349, 1, '继续', 'continue', 'dueros_actions', NULL, 'default', 'N', '0', 'admin', '2023-09-22 10:35:15', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (350, 1, '调高音量', 'incrementVolume', 'dueros_actions', NULL, 'default', 'N', '0', 'admin', '2023-09-22 10:35:15', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (351, 1, '调低音量', 'decrementVolume', 'dueros_actions', NULL, 'default', 'N', '0', 'admin', '2023-09-22 10:35:15', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (352, 1, '设置音量', 'setVolume', 'dueros_actions', NULL, 'default', 'N', '0', 'admin', '2023-09-22 10:35:15', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (353, 1, '设置静音状态', 'setVolumeMute', 'dueros_actions', NULL, 'default', 'N', '0', 'admin', '2023-09-22 10:35:15', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (354, 1, '查询设备所在位置', 'getLocation', 'dueros_actions', NULL, 'default', 'N', '0', 'admin', '2023-09-22 10:35:15', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (355, 1, '设置清扫位置', 'setCleaningLocation', 'dueros_actions', NULL, 'default', 'N', '0', 'admin', '2023-09-22 10:35:15', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (356, 1, '上锁/解锁', 'setLockState', 'dueros_actions', NULL, 'default', 'N', '0', 'admin', '2023-09-22 10:35:15', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (357, 1, '设置颜色', 'setColor', 'dueros_actions', NULL, 'default', 'N', '0', 'admin', '2023-09-22 10:35:15', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (358, 1, '查询电量', 'getElectricityCapacity', 'dueros_actions', NULL, 'default', 'N', '0', 'admin', '2023-09-22 10:35:15', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (359, 1, '开始充电', 'chargeTurnOn', 'dueros_actions', NULL, 'default', 'N', '0', 'admin', '2023-09-22 10:35:15', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (360, 1, '停止充电', 'chargeTurnOff', 'dueros_actions', NULL, 'default', 'N', '0', 'admin', '2023-09-22 10:35:15', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (361, 1, '设置灯光色温', 'setColorTemperature', 'dueros_actions', NULL, 'default', 'N', '0', 'admin', '2023-09-22 10:35:15', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (362, 1, '增高灯光色温', 'incrementColorTemperature', 'dueros_actions', NULL, 'default', 'N', '0', 'admin', '2023-09-22 10:35:15', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (363, 1, '降低灯光色温', 'decrementColorTemperature', 'dueros_actions', NULL, 'default', 'N', '0', 'admin', '2023-09-22 10:35:15', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (364, 1, '查询风速', 'getFanSpeed', 'dueros_actions', NULL, 'default', 'N', '0', 'admin', '2023-09-22 10:35:15', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (365, 1, '设置风速', 'setFanSpeed', 'dueros_actions', NULL, 'default', 'N', '0', 'admin', '2023-09-22 10:35:15', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (366, 1, '增加风速', 'incrementFanSpeed', 'dueros_actions', NULL, 'default', 'N', '0', 'admin', '2023-09-22 10:35:15', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (367, 1, '减小风速', 'decrementFanSpeed', 'dueros_actions', NULL, 'default', 'N', '0', 'admin', '2023-09-22 10:35:15', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (368, 1, '查询空气质量', 'getAirQualityIndex', 'dueros_actions', NULL, 'default', 'N', '0', 'admin', '2023-09-22 10:35:15', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (369, 1, '设置吸力', 'setSuction', 'dueros_actions', NULL, 'default', 'N', '0', 'admin', '2023-09-22 10:35:15', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (370, 1, '设置水量', 'setWaterLevel', 'dueros_actions', NULL, 'default', 'N', '0', 'admin', '2023-09-22 10:35:15', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (371, 1, '上一个频道', 'decrementTVChannel', 'dueros_actions', NULL, 'default', 'N', '0', 'admin', '2023-09-22 10:35:15', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (372, 1, '下一个频道', 'incrementTVChannel', 'dueros_actions', NULL, 'default', 'N', '0', 'admin', '2023-09-22 10:35:15', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (373, 1, '设置频道', 'setTVChannel', 'dueros_actions', NULL, 'default', 'N', '0', 'admin', '2023-09-22 10:35:15', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (374, 1, '返回上个频道', 'returnTVChannel', 'dueros_actions', NULL, 'default', 'N', '1', 'admin', '2023-09-22 10:35:15', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (375, 1, '设置移动方向', 'setDirection', 'dueros_actions', NULL, 'default', 'N', '0', 'admin', '2023-09-22 10:35:15', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (376, 1, '设置模式', 'setMode', 'dueros_actions', NULL, 'default', 'N', '0', 'admin', '2023-09-22 10:35:15', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (377, 1, '取消设置的模式', 'unSetMode', 'dueros_actions', NULL, 'default', 'N', '0', 'admin', '2023-09-22 10:35:15', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (378, 1, '定时设置模式', 'timingSetMode', 'dueros_actions', NULL, 'default', 'N', '0', 'admin', '2023-09-22 10:35:15', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (379, 1, '定时取消设置的模式', 'timingUnsetMode', 'dueros_actions', NULL, 'default', 'N', '0', 'admin', '2023-09-22 10:35:15', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (380, 1, '查询水质', 'getWaterQuality', 'dueros_actions', NULL, 'default', 'N', '0', 'admin', '2023-09-22 10:35:15', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (381, 1, '设置电梯楼层', 'setFloor', 'dueros_actions', NULL, 'default', 'N', '1', 'admin', '2023-09-22 10:35:15', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (382, 1, '电梯按下', 'decrementFloor', 'dueros_actions', NULL, 'default', 'N', '0', 'admin', '2023-09-22 10:35:15', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (383, 1, '电梯按上', 'incrementFloor', 'dueros_actions', NULL, 'default', 'N', '0', 'admin', '2023-09-22 10:35:15', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (384, 1, '升高高度', 'incrementHeight', 'dueros_actions', NULL, 'default', 'N', '0', 'admin', '2023-09-22 10:35:15', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (385, 1, '降低高度', 'decrementHeight', 'dueros_actions', NULL, 'default', 'N', '0', 'admin', '2023-09-22 10:35:15', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (386, 1, '查询运行时间', 'getRunningTime', 'dueros_actions', NULL, 'default', 'N', '0', 'admin', '2023-09-22 10:35:15', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (387, 1, '查询剩余时间', 'getTimeLeft', 'dueros_actions', NULL, 'default', 'N', '0', 'admin', '2023-09-22 10:35:15', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (388, 1, '查询运行状态', 'getRunningStatus', 'dueros_actions', NULL, 'default', 'N', '1', 'admin', '2023-09-22 10:35:15', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (389, 1, '增加速度', 'incrementSpeed', 'dueros_actions', NULL, 'default', 'N', '1', 'admin', '2023-09-22 10:35:15', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (390, 1, '降低速度', 'decrementSpeed', 'dueros_actions', NULL, 'default', 'N', '1', 'admin', '2023-09-22 10:35:15', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (391, 1, '设置速度', 'setSpeed', 'dueros_actions', NULL, 'default', 'N', '1', 'admin', '2023-09-22 10:35:15', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (392, 1, '获取速度', 'getSpeed', 'dueros_actions', NULL, 'default', 'N', '1', 'admin', '2023-09-22 10:35:15', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (393, 1, '设置档位', 'setGear', 'dueros_actions', NULL, 'default', 'N', '1', 'admin', '2023-09-22 10:35:15', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (394, 1, '查询设备所有状态', 'getState', 'dueros_actions', NULL, 'default', 'N', '1', 'admin', '2023-09-22 10:35:15', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (395, 1, '查询PM2.5', 'getAirPM25', 'dueros_actions', NULL, 'default', 'N', '1', 'admin', '2023-09-22 10:35:15', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (396, 1, '查询PM10', 'getAirPM10', 'dueros_actions', NULL, 'default', 'N', '1', 'admin', '2023-09-22 10:35:15', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (397, 1, '获取跑步信息', 'getMotionInfo', 'dueros_actions', NULL, 'default', 'N', '1', 'admin', '2023-09-22 10:35:15', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (398, 1, '设置水流', 'setFlow', 'dueros_actions', NULL, 'default', 'N', '1', 'admin', '2023-09-22 10:35:15', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (399, 1, '执行自定义复杂动作', 'setComplexActions', 'dueros_actions', NULL, 'default', 'N', '1', 'admin', '2023-09-22 10:35:15', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (400, 1, '设备定时', 'setTimer', 'dueros_actions', NULL, 'default', 'N', '1', 'admin', '2023-09-22 10:35:15', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (401, 1, '取消设备定时', 'timingCancel', 'dueros_actions', NULL, 'default', 'N', '1', 'admin', '2023-09-22 10:35:15', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (402, 1, '设备复位', 'reset', 'dueros_actions', NULL, 'default', 'N', '1', 'admin', '2023-09-22 10:35:15', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (403, 0, '设置功率', 'setPower', 'dueros_actions', NULL, 'default', 'N', '0', 'admin', '2023-09-22 10:35:15', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (404, 0, '增大功率', 'incrementPower', 'dueros_actions', NULL, 'default', 'N', '0', 'admin', '2023-09-22 10:35:15', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (405, 0, '减小功率', 'decrementPower', 'dueros_actions', NULL, 'default', 'N', '0', 'admin', '2023-09-22 10:35:15', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (406, 0, '查询油量', 'getOilCapacity', 'dueros_actions', NULL, 'default', 'N', '0', 'admin', '2023-09-22 10:35:15', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (407, 0, '打印', 'submitPrint', 'dueros_actions', NULL, 'default', 'N', '1', 'admin', '2023-09-22 10:35:15', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (408, 0, '设置摆风角度', 'setSwingAngle', 'dueros_actions', NULL, 'default', 'N', '0', 'admin', '2023-09-22 10:35:15', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (409, 0, '增大雾量', 'incrementMist', 'dueros_actions', NULL, 'default', 'N', '0', 'admin', '2023-09-22 10:35:15', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (410, 0, '见效雾量', 'decrementMist', 'dueros_actions', NULL, 'default', 'N', '0', 'admin', '2023-09-22 10:35:15', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (411, 0, '设置雾量', 'setMist', 'dueros_actions', NULL, 'default', 'N', '0', 'admin', '2023-09-22 10:35:15', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (412, 0, '打开灶眼', 'turnOnBurner', 'dueros_actions', NULL, 'default', 'N', '0', 'admin', '2023-09-22 10:35:15', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (413, 0, '关闭灶眼', 'turnOffBurner', 'dueros_actions', NULL, 'default', 'N', '0', 'admin', '2023-09-22 10:35:15', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (414, 0, '定时打开灶眼', 'timingTurnOnBurner', 'dueros_actions', NULL, 'default', 'N', '0', 'admin', '2023-09-22 10:35:15', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (415, 0, '定时关闭灶眼', 'timingTurnOffBurner', 'dueros_actions', NULL, 'default', 'N', '0', 'admin', '2023-09-22 10:35:15', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (416, 1, '设备的开关状态属性', 'turnOnState', 'dueros_attributes', NULL, 'default', 'N', '0', 'admin', '2023-08-23 11:28:15', '', NULL, '{\"type\":\"enum\",\"matchList\":[{\"text\":\"打开\",\"value\":\"ON\",\"thingsModelValue\":\"\"},{\"text\":\"关闭\",\"value\":\"OFF\",\"thingsModelValue\":\"\"}]}'); +INSERT INTO `sys_dict_data` VALUES (417, 1, '设备的亮度属性', 'brightness', 'dueros_attributes', NULL, 'default', 'N', '0', 'admin', '2023-08-23 11:28:15', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (418, 1, '设备对应的温度属性', 'temperature', 'dueros_attributes', NULL, 'default', 'N', '0', 'admin', '2023-08-23 11:28:15', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (419, 1, '湿度属性', 'humidity', 'dueros_attributes', NULL, 'default', 'N', '0', 'admin', '2023-08-23 11:28:15', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (420, 1, '空气中CO2的浓度', 'co2', 'dueros_attributes', NULL, 'default', 'N', '0', 'admin', '2023-08-23 11:28:15', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (421, 1, '设备的暂停属性', 'pauseState', 'dueros_attributes', NULL, 'default', 'N', '0', 'admin', '2023-08-23 11:28:15', '', NULL, '{\"type\":\"enum\",\"matchList\":[{\"text\":\"暂停\",\"value\":\"true\",\"thingsModelValue\":\"\"},{\"text\":\"未暂停\",\"value\":\"false\",\"thingsModelValue\":\"\"}]}'); +INSERT INTO `sys_dict_data` VALUES (422, 1, '设备的音量属性', 'volume', 'dueros_attributes', NULL, 'default', 'N', '0', 'admin', '2023-08-23 11:28:15', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (423, 1, '发声设备当前的静音属性', 'muteState', 'dueros_attributes', NULL, 'default', 'N', '0', 'admin', '2023-08-23 11:28:15', '', NULL, '{\"type\":\"enum\",\"matchList\":[{\"text\":\"静音\",\"value\":\"true\",\"thingsModelValue\":\"\"},{\"text\":\"未静音\",\"value\":\"false\",\"thingsModelValue\":\"\"}]}'); +INSERT INTO `sys_dict_data` VALUES (424, 1, '设备的位置属性', 'location', 'dueros_attributes', NULL, 'default', 'N', '0', 'admin', '2023-08-23 11:28:15', '', NULL, '{\"type\":\"enum\",\"matchList\":[{\"text\":\"主卧\",\"value\":\"MASTER_BEDROOM\",\"thingsModelValue\":\"\"},{\"text\":\"次卧\",\"value\":\"SECOND_BEDROOM\",\"thingsModelValue\":\"\"},{\"text\":\"客厅\",\"value\":\"LIVING_ROOM\",\"thingsModelValue\":\"\"},{\"text\":\"厨房\",\"value\":\"KITCHEN\",\"thingsModelValue\":\"\"},{\"text\":\"书房\",\"value\":\"STUDY\",\"thingsModelValue\":\"\"},{\"text\":\"餐厅\",\"value\":\"RESTAURANT\",\"thingsModelValue\":\"\"}]}'); +INSERT INTO `sys_dict_data` VALUES (425, 1, '锁的状态属性', 'lockState', 'dueros_attributes', NULL, 'default', 'N', '0', 'admin', '2023-08-23 11:28:15', '', NULL, '{\"type\":\"enum\",\"matchList\":[{\"text\":\"锁定\",\"value\":\"LOCKED\",\"thingsModelValue\":\"\"},{\"text\":\"未锁定\",\"value\":\"UNLOCKED\",\"thingsModelValue\":\"\"},{\"text\":\"未知\",\"value\":\"JAMMED\",\"thingsModelValue\":\"\"}]}'); +INSERT INTO `sys_dict_data` VALUES (426, 1, '设备的颜色', 'color', 'dueros_attributes', NULL, 'default', 'N', '0', 'admin', '2023-08-23 11:28:15', '', NULL, '{\"matchList\":[{\"text\":\"色相\",\"thingsModelValue\":\"\",\"value\":\"hue\"},{\"text\":\"饱和度\",\"thingsModelValue\":\"\",\"value\":\"saturation\"},{\"text\":\"明度\",\"thingsModelValue\":\"\",\"value\":\"brightness\"}],\"type\":\"object\"}'); +INSERT INTO `sys_dict_data` VALUES (427, 1, '设备电池的电量属性', 'electricityCapacity', 'dueros_attributes', NULL, 'default', 'N', '0', 'admin', '2023-08-23 11:28:15', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (428, 1, '自定义充电状态属性', 'chargeStatus', 'dueros_attributes', NULL, 'default', 'N', '0', 'admin', '2023-08-23 11:28:15', '', NULL, '{\"type\":\"enum\",\"matchList\":[{\"text\":\"充电\",\"value\":\"chargeTurnOn\",\"thingsModelValue\":\"\"},{\"text\":\"停止充电\",\"value\":\"chargeTurnOff\",\"thingsModelValue\":\"\"}]}'); +INSERT INTO `sys_dict_data` VALUES (429, 1, '设备的色温属性', 'colorTemperatureInKelvin', 'dueros_attributes', NULL, 'default', 'N', '0', 'admin', '2023-08-23 11:28:15', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (430, 1, '设备风速值属性', 'fanSpeed', 'dueros_attributes', NULL, 'default', 'N', '0', 'admin', '2023-08-23 11:28:15', '', NULL, '{\"matchList\":[{\"text\":\"风速值\",\"value\":\"value\"},{\"text\":\"风速挡位\",\"value\":\"level\",\"matchList\":[{\"text\":\"最小档\",\"thingsModelValue\":\"\",\"value\":\"min\"},{\"text\":\"低速档\",\"thingsModelValue\":\"\",\"value\":\"low\"},{\"text\":\"中速档\",\"thingsModelValue\":\"\",\"value\":\"middle\"},{\"text\":\"高速档\",\"thingsModelValue\":\"\",\"value\":\"high\"},{\"text\":\"最大档\",\"thingsModelValue\":\"\",\"value\":\"max\"},{\"text\":\"自动档\",\"thingsModelValue\":\"\",\"value\":\"auto\"}]}],\"select\":\"\",\"type\":\"enumSelect\"}'); +INSERT INTO `sys_dict_data` VALUES (431, 1, '空气质量的属性', 'airQuality', 'dueros_attributes', NULL, 'default', 'N', '0', 'admin', '2023-08-23 11:28:15', '', NULL, '{\"type\":\"enum\",\"matchList\":[{\"text\":\"优\",\"value\":\"优\",\"thingsModelValue\":\"\"},{\"text\":\"良\",\"value\":\"良\",\"thingsModelValue\":\"\"},{\"text\":\"差\",\"value\":\"差\",\"thingsModelValue\":\"\"},{\"text\":\"轻度污染\",\"value\":\"轻度污染\",\"thingsModelValue\":\"\"},{\"text\":\"中度污染\",\"value\":\"中度污染\",\"thingsModelValue\":\"\"},{\"text\":\"重度污染\",\"value\":\"重度污染\",\"thingsModelValue\":\"\"},{\"text\":\"严重污染\",\"value\":\"严重污染\",\"thingsModelValue\":\"\"}]}'); +INSERT INTO `sys_dict_data` VALUES (432, 1, '设备的吸力属性', 'suction', 'dueros_attributes', NULL, 'default', 'N', '0', 'admin', '2023-08-23 11:28:15', '', NULL, '{\"type\":\"enum\",\"matchList\":[{\"text\":\"标准档\",\"value\":\"STANDARD\",\"thingsModelValue\":\"\"},{\"text\":\"强劲档\",\"value\":\"STRONG\",\"thingsModelValue\":\"\"}]}'); +INSERT INTO `sys_dict_data` VALUES (433, 1, '设备的水量属性', 'waterLevel', 'dueros_attributes', NULL, 'default', 'N', '0', 'admin', '2023-08-23 11:28:15', '', NULL, '{\"type\":\"enum\",\"matchList\":[{\"text\":\"低档\",\"value\":\"LOW\",\"thingsModelValue\":\"\"},{\"text\":\"中档\",\"value\":\"MEDIUM\",\"thingsModelValue\":\"\"},{\"text\":\"高档\",\"value\":\"HIGH\",\"thingsModelValue\":\"\"}]}'); +INSERT INTO `sys_dict_data` VALUES (434, 1, '电视频道属性', 'channel', 'dueros_attributes', NULL, 'default', 'N', '0', 'admin', '2023-08-23 11:28:15', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (435, 1, '自定义方向属性', 'direction', 'dueros_attributes', NULL, 'default', 'N', '0', 'admin', '2023-08-23 11:28:15', '', NULL, '{\"type\":\"enum\",\"matchList\":[{\"text\":\"移动\",\"value\":\"MOVE\",\"thingsModelValue\":\"\"},{\"text\":\"吹风\",\"value\":\"BLOW\",\"thingsModelValue\":\"\"},{\"text\":\"摇摆\",\"value\":\"SWING\",\"thingsModelValue\":\"\"},{\"text\":\"向前\",\"value\":\"FORWARD\",\"thingsModelValue\":\"\"},{\"text\":\"向后\",\"value\":\"BACKWARD\",\"thingsModelValue\":\"\"},{\"text\":\"向左\",\"value\":\"LEFT\",\"thingsModelValue\":\"\"},{\"text\":\"向右\",\"value\":\"RIGHT\",\"thingsModelValue\":\"\"},{\"text\":\"顺时针旋转\",\"value\":\"CLOCKWISE\",\"thingsModelValue\":\"\"},{\"text\":\"逆时针旋转\",\"value\":\"COUNTERCLOCKWISE\",\"thingsModelValue\":\"\"}]}'); +INSERT INTO `sys_dict_data` VALUES (436, 1, '设备控制模式属性', 'mode', 'dueros_attributes', NULL, 'default', 'N', '0', 'admin', '2023-08-23 11:28:15', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (437, 1, '自定义水质属性', 'waterQuality', 'dueros_attributes', NULL, 'default', 'N', '1', 'admin', '2023-08-23 11:28:15', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (438, 1, '自定义楼梯属性', 'floor', 'dueros_attributes', NULL, 'default', 'N', '1', 'admin', '2023-08-23 11:28:15', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (439, 1, '自定义高度属性', 'height', 'dueros_attributes', NULL, 'default', 'N', '1', 'admin', '2023-08-23 11:28:15', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (440, 1, '自定义运行时间属性', 'runningTime', 'dueros_attributes', NULL, 'default', 'N', '1', 'admin', '2023-08-23 11:28:15', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (441, 1, '自定义剩余时间属性', 'timeLeft', 'dueros_attributes', NULL, 'default', 'N', '1', 'admin', '2023-08-23 11:28:15', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (442, 1, '自定义运行状态属性', 'runningStatus', 'dueros_attributes', NULL, 'default', 'N', '1', 'admin', '2023-08-23 11:28:15', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (443, 1, '设备速度值属性', 'speed', 'dueros_attributes', NULL, 'default', 'N', '1', 'admin', '2023-08-23 11:28:15', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (444, 1, '自定义档位属性', 'gear', 'dueros_attributes', NULL, 'default', 'N', '1', 'admin', '2023-08-23 11:28:15', '', NULL, '{\"type\":\"enum\",\"matchList\":[{\"text\":\"最小档\",\"value\":\"MIN\",\"thingsModelValue\":\"\"},{\"text\":\"低档\",\"value\":\"LOW\",\"thingsModelValue\":\"\"},{\"text\":\"中低档\",\"value\":\"MIDDLE_LOW\",\"thingsModelValue\":\"\"},{\"text\":\"中档\",\"value\":\"MIDDLE\",\"thingsModelValue\":\"\"},{\"text\":\"中高档\",\"value\":\"MIDDLE_HIGH\",\"thingsModelValue\":\"\"},{\"text\":\"高档\",\"value\":\"HIGH\",\"thingsModelValue\":\"\"},{\"text\":\"最大档\",\"value\":\"MAX\",\"thingsModelValue\":\"\"},{\"text\":\"自动档\",\"value\":\"AUTO\",\"thingsModelValue\":\"\"},{\"text\":\"随机档\",\"value\":\"RANDOM\",\"thingsModelValue\":\"\"}]}'); +INSERT INTO `sys_dict_data` VALUES (445, 1, '设备的状态属性', 'state', 'dueros_attributes', NULL, 'default', 'N', '1', 'admin', '2023-08-23 11:28:15', '', NULL, '{\"type\":\"enum\",\"matchList\":[{\"text\":\"\",\"value\":\"MIN\",\"thingsModelValue\":\"\"},{\"text\":\"清扫中\",\"value\":\"CLEANING\",\"thingsModelValue\":\"\"},{\"text\":\"充电中\",\"value\":\"CHARGING\",\"thingsModelValue\":\"\"},{\"text\":\"回充中\",\"value\":\"RECHARGING\",\"thingsModelValue\":\"\"},{\"text\":\"休眠中\",\"value\":\"SLEEPING\",\"thingsModelValue\":\"\"},{\"text\":\"待命中\",\"value\":\"STAND_BY\",\"thingsModelValue\":\"\"},{\"text\":\"报错\",\"value\":\"PEPORT_ERROR\",\"thingsModelValue\":\"\"},{\"text\":\"关机\",\"value\":\"SHUT_DOWN\",\"thingsModelValue\":\"\"},{\"text\":\"遥控中\",\"value\":\"REMOTE_CONTROLING\",\"thingsModelValue\":\"\"},{\"text\":\"已暂停\",\"value\":\"PAUSED\",\"thingsModelValue\":\"\"}]}'); +INSERT INTO `sys_dict_data` VALUES (446, 1, '空气中PM2.5的含量', 'pm2.5', 'dueros_attributes', NULL, 'default', 'N', '1', 'admin', '2023-08-23 11:28:15', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (447, 1, '空气中PM10的含量', 'pm10', 'dueros_attributes', NULL, 'default', 'N', '1', 'admin', '2023-08-23 11:28:15', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (448, 1, '运动信息属性', 'motionInfo', 'dueros_attributes', NULL, 'default', 'N', '1', 'admin', '2023-08-23 11:28:15', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (449, 1, '自定义水流属性', 'flow', 'dueros_attributes', NULL, 'default', 'N', '1', 'admin', '2023-08-23 11:28:15', '', NULL, '{\"matchList\":[{\"text\":\"动作\",\"thingsModelValue\":\"\",\"value\":\"action\",\"matchList\":[{\"text\":\"出水、排水\",\"thingsModelValue\":\"\",\"value\":\"POUR_WATER\"},{\"text\":\"加水、注水\",\"thingsModelValue\":\"\",\"value\":\"FILL_WATER\"}]},{\"text\":\"范围\",\"thingsModelValue\":\"\",\"value\":\"select\",\"matchList\":[{\"text\":\"顶部\",\"thingsModelValue\":\"\",\"value\":\"TOP\"},{\"text\":\"手持\",\"thingsModelValue\":\"\",\"value\":\"HANDLE_HELD\"},{\"text\":\"底部\",\"thingsModelValue\":\"\",\"value\":\"UNDER\"}]},{\"text\":\"控制\",\"thingsModelValue\":\"\",\"value\":\"control\",\"matchList\":[{\"text\":\"开始\",\"thingsModelValue\":\"\",\"value\":\"START\"},{\"text\":\"停止\",\"thingsModelValue\":\"\",\"value\":\"STOP\"}]}],\"type\":\"object\"}'); +INSERT INTO `sys_dict_data` VALUES (450, 1, '自定义复杂动作属性', 'complexActions', 'dueros_attributes', NULL, 'default', 'N', '1', 'admin', '2023-08-23 11:28:15', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (451, 1, '自定义定时动作属性', 'timer', 'dueros_attributes', NULL, 'default', 'N', '1', 'admin', '2023-08-23 11:28:15', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (452, 1, '自定义复位动作属性', 'reset', 'dueros_attributes', NULL, 'default', 'N', '1', 'admin', '2023-08-23 11:28:15', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (453, 1, '设备油箱的油量属性', 'oilCapacity', 'dueros_attributes', NULL, 'default', 'N', '1', 'admin', '2023-08-23 11:28:15', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (454, 1, '设备的工作状态属性', 'workState', 'dueros_attributes', NULL, 'default', 'N', '1', 'admin', '2023-08-23 11:28:15', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (455, 1, '设备是否可达属性', 'connectivity', 'dueros_attributes', NULL, 'default', 'N', '1', 'admin', '2023-08-23 11:28:15', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (456, 1, '设备通电状态的属性', 'powerState', 'dueros_attributes', NULL, 'default', 'N', '1', 'admin', '2023-08-23 11:28:15', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (457, 1, '设备的功率属性', 'powerLevel', 'dueros_attributes', NULL, 'default', 'N', '1', 'admin', '2023-08-23 11:28:15', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (458, 1, '空气中总挥发性有机化合物的浓度', 'tovc', 'dueros_attributes', NULL, 'default', 'N', '1', 'admin', '2023-08-23 11:28:15', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (459, 1, '空气中甲醛的浓度', 'formaldehyde', 'dueros_attributes', NULL, 'default', 'N', '1', 'admin', '2023-08-23 11:28:15', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (460, 1, '百分比属性', 'percentage', 'dueros_attributes', NULL, 'default', 'N', '1', 'admin', '2023-08-23 11:28:15', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (461, 1, '日期和时间属性', 'dateTime', 'dueros_attributes', NULL, 'default', 'N', '1', 'admin', '2023-08-23 11:28:15', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (462, 1, '设备可行驶距离属性', 'drivingDistance', 'dueros_attributes', NULL, 'default', 'N', '1', 'admin', '2023-08-23 11:28:15', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (463, 1, '设备的名称属性', 'name', 'dueros_attributes', NULL, 'default', 'N', '1', 'admin', '2023-08-23 11:28:15', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (528, 1, '授权码模式', 'authorization_code', 'oauth_authorization_model', NULL, 'default', 'N', '0', 'admin', '2023-11-27 14:23:59', 'admin', '2023-11-27 14:25:47', NULL); +INSERT INTO `sys_dict_data` VALUES (529, 1, '客户端模式', 'client_credentials', 'oauth_authorization_model', NULL, 'default', 'N', '0', 'admin', '2023-11-27 14:24:35', 'admin', '2023-12-06 18:00:58', NULL); +INSERT INTO `sys_dict_data` VALUES (530, 1, '密码模式', 'password', 'oauth_authorization_model', NULL, 'default', 'N', '0', 'admin', '2023-11-27 14:24:50', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (531, 1, '简化模式', 'implicit', 'oauth_authorization_model', NULL, 'default', 'N', '0', 'admin', '2023-11-27 14:25:12', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (532, 1, '刷新Token', 'fresh_token', 'oauth_authorization_model', NULL, 'default', 'N', '0', 'admin', '2023-11-27 14:25:36', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (533, 1, '短信', 'sms', 'notify_channel_type', NULL, 'default', 'N', '0', 'admin', '2023-11-30 09:45:15', 'admin', '2023-12-21 10:31:54', NULL); +INSERT INTO `sys_dict_data` VALUES (535, 2, '微信', 'wechat', 'notify_channel_type', NULL, 'default', 'N', '0', 'admin', '2023-11-30 09:45:15', 'admin', '2024-01-05 16:24:15', NULL); +INSERT INTO `sys_dict_data` VALUES (536, 5, '钉钉', 'dingtalk', 'notify_channel_type', NULL, 'default', 'N', '0', 'admin', '2023-11-30 09:45:15', 'admin', '2024-01-10 15:28:06', NULL); +INSERT INTO `sys_dict_data` VALUES (537, 3, '语音', 'voice', 'notify_channel_type', NULL, 'default', 'N', '0', 'admin', '2023-11-30 09:45:15', 'admin', '2024-01-05 16:24:22', NULL); +INSERT INTO `sys_dict_data` VALUES (539, 1, '阿里云', 'alibaba', 'notify_channel_sms_provider', NULL, 'default', 'N', '0', 'admin', '2023-11-30 09:45:15', 'admin', '2024-01-05 16:49:10', ''); +INSERT INTO `sys_dict_data` VALUES (540, 1, 'QQ', 'qq', 'notify_channel_email_provider', NULL, 'default', 'N', '0', 'admin', '2023-11-30 09:45:15', 'admin', '2023-12-22 10:33:48', '{\"host\":\"\",\"port\":\"\",\"sender\":\"\",\"password\":\"\"}'); +INSERT INTO `sys_dict_data` VALUES (543, 4, '邮箱', 'email', 'notify_channel_type', NULL, 'default', 'N', '0', 'admin', '2023-12-11 23:43:14', 'admin', '2024-01-05 16:24:32', NULL); +INSERT INTO `sys_dict_data` VALUES (554, 1, '设备告警', 'alert', 'notify_service_code', NULL, 'default', 'N', '0', 'admin', '2023-12-18 14:58:40', 'admin', '2024-01-25 14:35:25', NULL); +INSERT INTO `sys_dict_data` VALUES (558, 2, '验证码', 'captcha', 'notify_service_code', NULL, 'default', 'N', '0', 'admin', '2023-12-18 14:59:59', 'admin', '2024-01-25 14:36:07', NULL); +INSERT INTO `sys_dict_data` VALUES (560, 1, '设备上报', '1', 'rule_script_event', NULL, 'primary', 'N', '0', 'admin', '2023-12-19 11:40:34', 'admin', '2023-12-20 02:23:43', NULL); +INSERT INTO `sys_dict_data` VALUES (561, 2, '平台下发', '2', 'rule_script_event', NULL, 'warning', 'N', '0', 'admin', '2023-12-19 11:40:46', 'admin', '2023-12-20 02:23:51', NULL); +INSERT INTO `sys_dict_data` VALUES (562, 3, '设备上线', '3', 'rule_script_event', NULL, 'success', 'N', '0', 'admin', '2023-12-19 11:40:58', 'admin', '2023-12-20 02:24:00', NULL); +INSERT INTO `sys_dict_data` VALUES (563, 4, '设备离线', '4', 'rule_script_event', NULL, 'info', 'N', '0', 'admin', '2023-12-19 11:41:09', 'admin', '2023-12-20 02:24:08', NULL); +INSERT INTO `sys_dict_data` VALUES (564, 1, '数据流', '1', 'rule_script_purpose', NULL, 'default', 'N', '0', 'admin', '2023-12-19 11:41:39', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (565, 2, '触发器', '2', 'rule_script_purpose', NULL, 'default', 'N', '0', 'admin', '2023-12-19 11:41:48', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (566, 3, '执行动作', '3', 'rule_script_purpose', NULL, 'default', 'N', '0', 'admin', '2023-12-19 11:41:59', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (567, 1, '消息重发', '1', 'rule_script_action', NULL, 'default', 'N', '0', 'admin', '2023-12-19 11:42:26', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (568, 2, '消息通知', '2', 'rule_script_action', NULL, 'default', 'N', '0', 'admin', '2023-12-19 11:43:18', 'admin', '2023-12-19 11:43:38', NULL); +INSERT INTO `sys_dict_data` VALUES (569, 3, 'Http推送', '3', 'rule_script_action', NULL, 'default', 'N', '0', 'admin', '2023-12-19 11:43:33', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (570, 4, 'Mqtt桥接', '4', 'rule_script_action', NULL, 'default', 'N', '0', 'admin', '2023-12-19 11:43:54', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (571, 5, '数据库存储', '5', 'rule_script_action', NULL, 'default', 'N', '0', 'admin', '2023-12-19 11:44:08', 'admin', '2023-12-20 17:08:35', NULL); +INSERT INTO `sys_dict_data` VALUES (572, 2, '腾讯云', 'tencent', 'notify_channel_sms_provider', NULL, 'default', 'N', '0', 'admin', '2023-12-21 10:11:25', 'admin', '2024-01-10 14:34:30', ''); +INSERT INTO `sys_dict_data` VALUES (573, 3, '天翼云', 'ctyun', 'notify_channel_sms_provider', NULL, 'default', 'N', '1', 'admin', '2023-12-21 10:11:51', 'admin', '2024-01-05 16:50:31', ''); +INSERT INTO `sys_dict_data` VALUES (574, 3, '华为云', 'huawei', 'notify_channel_sms_provider', NULL, 'default', 'N', '1', 'admin', '2023-12-21 10:12:07', 'admin', '2024-01-05 16:50:35', NULL); +INSERT INTO `sys_dict_data` VALUES (575, 3, '云片', 'yunpian', 'notify_channel_sms_provider', NULL, 'default', 'N', '1', 'admin', '2023-12-21 10:12:29', 'admin', '2024-01-05 16:50:39', NULL); +INSERT INTO `sys_dict_data` VALUES (576, 3, '亿美软通', 'emay', 'notify_channel_sms_provider', NULL, 'default', 'N', '1', 'admin', '2023-12-21 10:12:56', 'admin', '2024-01-05 16:49:52', NULL); +INSERT INTO `sys_dict_data` VALUES (577, 3, '容连云', 'cloopen', 'notify_channel_sms_provider', NULL, 'default', 'N', '1', 'admin', '2023-12-21 10:13:16', 'admin', '2024-01-05 16:49:58', NULL); +INSERT INTO `sys_dict_data` VALUES (578, 3, '京东云', 'jdcloud', 'notify_channel_sms_provider', NULL, 'default', 'N', '1', 'admin', '2023-12-21 10:13:37', 'admin', '2024-01-05 16:50:07', NULL); +INSERT INTO `sys_dict_data` VALUES (579, 3, '网易云', 'netease', 'notify_channel_sms_provider', NULL, 'default', 'N', '1', 'admin', '2023-12-21 10:13:57', 'admin', '2024-01-05 16:50:13', NULL); +INSERT INTO `sys_dict_data` VALUES (580, 1, '微信小程序(订阅消息)', 'mini_program', 'notify_channel_wechat_provider', NULL, 'default', 'N', '0', 'admin', '2023-12-21 10:41:04', 'admin', '2024-01-22 15:49:10', ''); +INSERT INTO `sys_dict_data` VALUES (581, 1, '163', '163', 'notify_channel_email_provider', NULL, 'default', 'N', '0', 'admin', '2023-12-21 10:41:52', 'admin', '2023-12-22 10:33:58', '{\"host\":\"\",\"port\":\"\",\"sender\":\"\",\"password\":\"\"}'); +INSERT INTO `sys_dict_data` VALUES (582, 1, '阿里云', 'alibaba', 'notify_channel_voice_provider', NULL, 'default', 'N', '0', 'admin', '2023-12-27 14:58:54', 'admin', '2024-01-11 09:59:44', ''); +INSERT INTO `sys_dict_data` VALUES (583, 1, '工作通知', 'work', 'notify_channel_dingtalk_provider', NULL, 'default', 'N', '0', 'admin', '2024-01-10 15:32:15', 'admin', '2024-02-02 17:19:11', NULL); +INSERT INTO `sys_dict_data` VALUES (584, 2, '群机器人', 'group_robot', 'notify_channel_dingtalk_provider', NULL, 'default', 'N', '0', 'admin', '2024-01-10 15:32:57', 'admin', '2024-01-22 15:47:06', NULL); +INSERT INTO `sys_dict_data` VALUES (585, 3, '营销通知', 'marketing', 'notify_service_code', NULL, 'default', 'N', '0', 'admin', '2024-01-11 09:56:07', 'admin', '2024-01-25 14:37:40', NULL); +INSERT INTO `sys_dict_data` VALUES (586, 2, '腾讯云', 'tencent', 'notify_channel_voice_provider', NULL, 'default', 'N', '0', 'admin', '2024-01-11 09:59:33', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (587, 1, '文本', 'text', 'dingtalk_msg_type', NULL, 'default', 'N', '0', 'admin', '2024-01-22 11:42:51', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (588, 2, 'markdown类型', 'markdown', 'dingtalk_msg_type', NULL, 'default', 'N', '0', 'admin', '2024-01-22 11:43:44', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (589, 2, '链接消息', 'link', 'dingtalk_msg_type', NULL, 'default', 'N', '0', 'admin', '2024-01-22 11:44:04', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (590, 2, '企业微信应用消息', 'wecom_apply', 'notify_channel_wechat_provider', NULL, 'default', 'N', '0', 'admin', '2024-01-22 15:40:11', 'admin', '2024-01-22 17:06:03', NULL); +INSERT INTO `sys_dict_data` VALUES (591, 3, '企业微信群机器人', 'wecom_robot', 'notify_channel_wechat_provider', NULL, 'default', 'N', '0', 'admin', '2024-01-22 15:40:33', 'admin', '2024-01-22 15:40:38', NULL); +INSERT INTO `sys_dict_data` VALUES (592, 1, '文本', 'text', 'wecom_msg_type', NULL, 'default', 'N', '0', 'admin', '2024-01-22 15:51:48', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (593, 2, 'markdown', 'markdown', 'wecom_msg_type', NULL, 'default', 'N', '0', 'admin', '2024-01-22 15:52:04', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (595, 4, '图文', 'news', 'wecom_msg_type', NULL, 'default', 'N', '0', 'admin', '2024-01-22 15:52:29', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (596, 1, '厂商', '1', 'department_type', NULL, 'success', 'N', '0', 'admin', '2024-02-29 14:07:54', 'admin', '2024-03-20 11:55:36', '2,3,4'); +INSERT INTO `sys_dict_data` VALUES (597, 2, '生产厂商', '2', 'department_type', NULL, 'primary', 'N', '0', 'admin', '2024-02-29 14:09:06', 'admin', '2024-03-20 11:55:45', '3,4'); +INSERT INTO `sys_dict_data` VALUES (598, 2, '经销商', '3', 'department_type', NULL, 'warning', 'N', '0', 'admin', '2024-02-29 14:09:25', 'admin', '2024-03-20 11:55:52', '3,4'); +INSERT INTO `sys_dict_data` VALUES (599, 4, '服务商', '4', 'department_type', NULL, 'info', 'N', '0', 'admin', '2024-02-29 14:09:34', 'admin', '2024-03-20 11:55:57', '4'); +INSERT INTO `sys_dict_data` VALUES (600, 8, '微信开放平台公众号', 'wechat_open_public_account', 'iot_social_platform', NULL, 'default', 'N', '0', 'admin', '2024-03-08 17:56:56', '', NULL, '感谢您关注工控帮!'); +INSERT INTO `sys_dict_data` VALUES (601, 4, '微信公众号', 'public_account', 'notify_channel_wechat_provider', NULL, 'default', 'N', '0', 'admin', '2024-03-09 11:11:57', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (602, 4, '网关子设备', '4', 'iot_device_type', NULL, 'default', 'N', '0', 'admin', '2024-05-28 01:37:54', 'admin', '2024-05-28 10:55:33', NULL); +INSERT INTO `sys_dict_data` VALUES (603, 0, 'WIFI', '1', 'sub_gateway_type', NULL, 'default', 'N', '0', 'admin', '2024-05-28 11:31:19', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (604, 1, '以太网', '1', 'sub_gateway_type', NULL, 'default', 'N', '0', 'admin', '2024-05-28 11:31:34', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (605, 2, 'RS485', '3', 'sub_gateway_type', NULL, 'default', 'N', '0', 'admin', '2024-05-28 11:31:46', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (606, 3, 'RS232', '4', 'sub_gateway_type', NULL, 'default', 'N', '0', 'admin', '2024-05-28 11:32:07', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (607, 4, 'LoRa', '5', 'sub_gateway_type', NULL, 'default', 'N', '0', 'admin', '2024-05-28 11:32:25', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (608, 5, 'ZigBee', '6', 'sub_gateway_type', NULL, 'default', 'N', '0', 'admin', '2024-05-28 11:32:42', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (609, 4, 'NB-IoT', '5', 'iot_network_method', NULL, 'default', 'N', '0', 'admin', '2024-05-28 11:35:14', 'admin', '2024-05-28 11:35:26', NULL); +INSERT INTO `sys_dict_data` VALUES (610, 0, '原值', '1', 'variable_operation_type', NULL, 'default', 'N', '0', 'admin', '2024-05-29 14:40:15', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (611, 1, '累计值', '2', 'variable_operation_type', NULL, 'default', 'N', '0', 'admin', '2024-05-29 14:40:50', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (612, 2, '平均值', '3', 'variable_operation_type', NULL, 'default', 'N', '0', 'admin', '2024-05-29 14:41:06', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (613, 3, '最大值', '4', 'variable_operation_type', NULL, 'default', 'N', '0', 'admin', '2024-05-29 14:41:18', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (614, 4, '最小值', '5', 'variable_operation_type', NULL, 'default', 'N', '0', 'admin', '2024-05-29 14:41:32', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (615, 0, '1分钟', '60', 'variable_operation_interval', NULL, 'default', 'N', '0', 'admin', '2024-05-29 15:00:20', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (616, 1, '3分钟', '180', 'variable_operation_interval', NULL, 'default', 'N', '0', 'admin', '2024-05-29 15:00:59', 'admin', '2024-05-29 15:01:52', NULL); +INSERT INTO `sys_dict_data` VALUES (617, 2, '5分钟', '300', 'variable_operation_interval', NULL, 'default', 'N', '0', 'admin', '2024-05-29 15:01:16', 'admin', '2024-05-29 15:01:44', NULL); +INSERT INTO `sys_dict_data` VALUES (618, 3, '10分钟', '600', 'variable_operation_interval', NULL, 'default', 'N', '0', 'admin', '2024-05-29 15:02:22', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (619, 4, '15分钟', '900', 'variable_operation_interval', NULL, 'default', 'N', '0', 'admin', '2024-05-29 15:02:47', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (620, 5, '20分钟', '1200', 'variable_operation_interval', '', 'default', 'N', '0', 'admin', '2024-05-29 15:03:11', 'admin', '2024-05-29 15:03:30', NULL); +INSERT INTO `sys_dict_data` VALUES (621, 6, '30分钟', '1800', 'variable_operation_interval', NULL, 'default', 'N', '0', 'admin', '2024-05-29 15:03:56', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (622, 7, '5小时', '18000', 'variable_operation_interval', NULL, 'default', 'N', '0', 'admin', '2024-05-29 15:04:56', 'admin', '2024-05-29 15:05:08', NULL); +INSERT INTO `sys_dict_data` VALUES (623, 8, '时', 'hour', 'variable_operation_interval', NULL, 'default', 'N', '0', 'admin', '2024-05-29 15:06:31', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (624, 9, '日', 'day', 'variable_operation_interval', NULL, 'default', 'N', '0', 'admin', '2024-05-29 15:07:54', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (625, 10, '周', 'week', 'variable_operation_interval', NULL, 'default', 'N', '0', 'admin', '2024-05-29 15:08:19', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (626, 11, '月', 'month', 'variable_operation_interval', NULL, 'default', 'N', '0', 'admin', '2024-05-29 15:08:32', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (627, 0, '00时', '00', 'variable_operation_time', NULL, 'default', 'N', '0', 'admin', '2024-05-29 15:24:20', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (628, 1, '01时', '01', 'variable_operation_time', NULL, 'default', 'N', '0', 'admin', '2024-05-29 15:24:31', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (629, 2, '02时', '02', 'variable_operation_time', NULL, 'default', 'N', '0', 'admin', '2024-05-29 15:24:58', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (630, 3, '03时', '03', 'variable_operation_time', NULL, 'default', 'N', '0', 'admin', '2024-05-29 15:28:14', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (631, 4, '04时', '04', 'variable_operation_time', NULL, 'default', 'N', '0', 'admin', '2024-05-29 15:28:33', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (632, 5, '05时', '05', 'variable_operation_time', NULL, 'default', 'N', '0', 'admin', '2024-05-29 15:28:48', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (633, 6, '06时', '06', 'variable_operation_time', NULL, 'default', 'N', '0', 'admin', '2024-05-29 15:29:10', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (634, 7, '07时', '07', 'variable_operation_time', NULL, 'default', 'N', '0', 'admin', '2024-05-29 15:29:24', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (635, 8, '08时', '08', 'variable_operation_time', NULL, 'default', 'N', '0', 'admin', '2024-05-29 15:30:50', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (636, 9, '09时', '09', 'variable_operation_time', NULL, 'default', 'N', '0', 'admin', '2024-05-29 15:31:03', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (637, 10, '10时', '10', 'variable_operation_time', NULL, 'default', 'N', '0', 'admin', '2024-05-29 15:31:20', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (638, 11, '11时', '11', 'variable_operation_time', NULL, 'default', 'N', '0', 'admin', '2024-05-29 15:33:42', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (639, 12, '12时', '12', 'variable_operation_time', NULL, 'default', 'N', '0', 'admin', '2024-05-29 15:34:00', 'admin', '2024-05-29 15:34:27', NULL); +INSERT INTO `sys_dict_data` VALUES (640, 13, '13时', '13', 'variable_operation_time', NULL, 'default', 'N', '0', 'admin', '2024-05-29 15:34:12', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (641, 14, '14时', '14', 'variable_operation_time', NULL, 'default', 'N', '0', 'admin', '2024-05-29 15:34:39', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (642, 15, '15时', '15', 'variable_operation_time', NULL, 'default', 'N', '0', 'admin', '2024-05-29 15:34:52', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (643, 16, '16时', '16', 'variable_operation_time', NULL, 'default', 'N', '0', 'admin', '2024-05-29 15:35:04', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (644, 17, '17时', '17', 'variable_operation_time', NULL, 'default', 'N', '0', 'admin', '2024-05-29 15:35:36', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (645, 18, '18时', '18', 'variable_operation_time', NULL, 'default', 'N', '0', 'admin', '2024-05-29 15:35:51', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (646, 19, '19时', '19', 'variable_operation_time', NULL, 'default', 'N', '0', 'admin', '2024-05-29 15:36:03', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (647, 20, '20时', '20', 'variable_operation_time', NULL, 'default', 'N', '0', 'admin', '2024-05-29 15:36:18', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (648, 21, '21时', '21', 'variable_operation_time', NULL, 'default', 'N', '0', 'admin', '2024-05-29 15:36:33', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (649, 22, '22时', '22', 'variable_operation_time', NULL, 'default', 'N', '0', 'admin', '2024-05-29 15:36:44', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (650, 23, '23时', '23', 'variable_operation_time', NULL, 'default', 'N', '0', 'admin', '2024-05-29 15:36:54', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (651, 0, '周一', '1', 'variable_operation_week', NULL, 'default', 'N', '0', 'admin', '2024-05-29 15:41:27', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (652, 1, '周二', '2', 'variable_operation_week', NULL, 'default', 'N', '0', 'admin', '2024-05-29 15:41:35', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (653, 2, '周三', '3', 'variable_operation_week', NULL, 'default', 'N', '0', 'admin', '2024-05-29 15:41:47', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (654, 3, '周四', '4', 'variable_operation_week', NULL, 'default', 'N', '0', 'admin', '2024-05-29 15:42:01', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (655, 4, '周五', '5', 'variable_operation_week', NULL, 'default', 'N', '0', 'admin', '2024-05-29 15:42:14', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (656, 5, '周六', '6', 'variable_operation_week', NULL, 'default', 'N', '0', 'admin', '2024-05-29 15:42:25', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (657, 6, '周日', '7', 'variable_operation_week', NULL, 'default', 'N', '0', 'admin', '2024-05-29 15:42:41', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (658, 0, '1日', '1', 'variable_operation_day', NULL, 'default', 'N', '0', 'admin', '2024-05-29 15:49:28', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (659, 1, '2日', '2', 'variable_operation_day', NULL, 'default', 'N', '0', 'admin', '2024-05-29 15:49:38', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (660, 2, '3日', '3', 'variable_operation_day', NULL, 'default', 'N', '0', 'admin', '2024-05-29 15:51:48', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (661, 3, '4日', '4', 'variable_operation_day', NULL, 'default', 'N', '0', 'admin', '2024-05-29 15:52:18', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (662, 4, '5日', '5', 'variable_operation_day', NULL, 'default', 'N', '0', 'admin', '2024-05-29 15:52:28', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (663, 5, '6日', '6', 'variable_operation_day', NULL, 'default', 'N', '0', 'admin', '2024-05-29 15:52:40', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (664, 6, '7日', '7', 'variable_operation_day', NULL, 'default', 'N', '0', 'admin', '2024-05-29 15:52:52', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (665, 7, '8日', '8', 'variable_operation_day', NULL, 'default', 'N', '0', 'admin', '2024-05-29 15:53:01', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (666, 8, '9日', '9', 'variable_operation_day', NULL, 'default', 'N', '0', 'admin', '2024-05-29 15:53:17', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (667, 9, '10日', '10', 'variable_operation_day', NULL, 'default', 'N', '0', 'admin', '2024-05-29 15:53:34', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (668, 10, '11日', '11', 'variable_operation_day', NULL, 'default', 'N', '0', 'admin', '2024-05-29 15:53:48', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (669, 11, '12日', '12', 'variable_operation_day', NULL, 'default', 'N', '0', 'admin', '2024-05-29 15:54:02', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (670, 12, '13日', '13', 'variable_operation_day', NULL, 'default', 'N', '0', 'admin', '2024-05-29 15:54:11', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (671, 13, '14日', '14', 'variable_operation_day', NULL, 'default', 'N', '0', 'admin', '2024-05-29 15:54:23', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (672, 14, '15日', '15', 'variable_operation_day', NULL, 'default', 'N', '0', 'admin', '2024-05-29 15:54:39', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (673, 15, '16日', '16', 'variable_operation_day', NULL, 'default', 'N', '0', 'admin', '2024-05-29 15:54:53', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (674, 16, '17日', '17', 'variable_operation_day', NULL, 'default', 'N', '0', 'admin', '2024-05-29 15:55:22', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (675, 17, '18日', '18', 'variable_operation_day', NULL, 'default', 'N', '0', 'admin', '2024-05-29 15:55:35', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (676, 18, '19日', '19', 'variable_operation_day', NULL, 'default', 'N', '0', 'admin', '2024-05-29 15:55:52', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (677, 19, '20日', '20', 'variable_operation_day', NULL, 'default', 'N', '0', 'admin', '2024-05-29 15:56:10', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (678, 20, '21日', '21', 'variable_operation_day', NULL, 'default', 'N', '0', 'admin', '2024-05-29 15:56:23', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (679, 21, '22日', '22', 'variable_operation_day', NULL, 'default', 'N', '0', 'admin', '2024-05-29 15:56:40', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (680, 22, '23日', '23', 'variable_operation_day', NULL, 'default', 'N', '0', 'admin', '2024-05-29 15:56:57', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (681, 23, '24日', '24', 'variable_operation_day', NULL, 'default', 'N', '0', 'admin', '2024-05-29 15:57:17', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (682, 0, '25日', '25', 'variable_operation_day', '24', 'default', 'N', '0', 'admin', '2024-05-29 15:57:28', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (683, 25, '26日', '26', 'variable_operation_day', NULL, 'default', 'N', '0', 'admin', '2024-05-29 15:57:41', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (684, 24, '25日', '25', 'variable_operation_day', NULL, 'default', 'N', '0', 'admin', '2024-05-29 15:57:59', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (685, 26, '27日', '27', 'variable_operation_day', NULL, 'default', 'N', '0', 'admin', '2024-05-29 15:58:16', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (686, 27, '28日', '28', 'variable_operation_day', NULL, 'default', 'N', '0', 'admin', '2024-05-29 15:58:39', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (687, 28, '29日', '29', 'variable_operation_day', NULL, 'default', 'N', '0', 'admin', '2024-05-29 15:58:53', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (688, 29, '30日', '30', 'variable_operation_day', NULL, 'default', 'N', '0', 'admin', '2024-05-29 15:59:10', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (689, 30, '31日', '31', 'variable_operation_day', NULL, 'default', 'N', '0', 'admin', '2024-05-29 15:59:37', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (690, 0, '设备数据', '1', 'device_status_deter', NULL, 'default', 'N', '0', 'admin', '2024-05-30 20:12:04', 'admin', '2024-06-27 00:44:49', NULL); +INSERT INTO `sys_dict_data` VALUES (691, 1, '网关', '2', 'device_status_deter', NULL, 'default', 'N', '0', 'admin', '2024-05-30 20:12:17', 'admin', '2024-06-27 00:44:53', NULL); +INSERT INTO `sys_dict_data` VALUES (692, 3, '10分钟', '600', 'iot_modbus_poll_time', NULL, 'default', 'N', '0', 'admin', '2024-05-30 20:20:56', 'admin', '2024-05-30 20:21:07', NULL); +INSERT INTO `sys_dict_data` VALUES (693, 5, 'http接入', '5', 'rule_script_event', NULL, 'primary', 'N', '0', 'admin', '2024-07-22 11:56:41', 'admin', '2024-07-22 11:57:20', NULL); +INSERT INTO `sys_dict_data` VALUES (694, 6, 'mqtt接入', '6', 'rule_script_event', NULL, 'primary', 'N', '0', 'admin', '2024-07-22 11:57:36', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (695, 0, '失败', 'o', 'common_status_type', NULL, 'default', 'N', '0', 'admin', '2024-07-18 17:48:57', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (696, 1, '成功', '1', 'common_status_type', NULL, 'default', 'N', '0', 'admin', '2024-07-18 17:49:07', '', NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (697, 1, '折线图', '折线图', 'scada_echart_type', NULL, 'default', 'N', '0', 'admin', '2023-11-09 17:54:14', NULL, NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (698, 1, '柱状图', '柱状图', 'scada_echart_type', NULL, 'default', 'N', '0', 'admin', '2023-11-09 17:54:14', NULL, NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (699, 1, '饼图', '饼图', 'scada_echart_type', NULL, 'default', 'N', '0', 'admin', '2023-11-09 17:54:14', NULL, NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (700, 1, '散点图', '散点图', 'scada_echart_type', NULL, 'default', 'N', '0', 'admin', '2023-11-09 17:54:14', NULL, NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (701, 1, 'K线图', 'K线图', 'scada_echart_type', NULL, 'default', 'N', '0', 'admin', '2023-11-09 17:54:14', NULL, NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (702, 1, '雷达图', '雷达图', 'scada_echart_type', NULL, 'default', 'N', '0', 'admin', '2023-11-09 17:54:14', NULL, NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (703, 1, '盒须图', '盒须图', 'scada_echart_type', NULL, 'default', 'N', '0', 'admin', '2023-11-09 17:54:14', NULL, NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (704, 1, '热力图', '热力图', 'scada_echart_type', NULL, 'default', 'N', '0', 'admin', '2023-11-09 17:54:14', NULL, NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (705, 1, '关系图', '关系图', 'scada_echart_type', NULL, 'default', 'N', '0', 'admin', '2023-11-09 17:54:14', NULL, NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (706, 1, '水球图', '水球图', 'scada_echart_type', NULL, 'default', 'N', '0', 'admin', '2023-11-09 17:54:14', NULL, NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (707, 1, '树图', '树图', 'scada_echart_type', NULL, 'default', 'N', '0', 'admin', '2023-11-09 17:54:14', NULL, NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (708, 1, '矩形树图', '矩形树图', 'scada_echart_type', NULL, 'default', 'N', '0', 'admin', '2023-11-09 17:54:14', NULL, NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (709, 1, '旭日图', '旭日图', 'scada_echart_type', NULL, 'default', 'N', '0', 'admin', '2023-11-09 17:54:14', NULL, NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (710, 1, '平行坐标系', '平行坐标系', 'scada_echart_type', NULL, 'default', 'N', '0', 'admin', '2023-11-09 17:54:14', NULL, NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (711, 1, '桑葚图', '桑葚图', 'scada_echart_type', NULL, 'default', 'N', '0', 'admin', '2023-11-09 17:54:14', NULL, NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (712, 1, '漏斗图', '漏斗图', 'scada_echart_type', NULL, 'default', 'N', '0', 'admin', '2023-11-09 17:54:14', NULL, NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (713, 1, '仪表图', '仪表图', 'scada_echart_type', NULL, 'default', 'N', '0', 'admin', '2023-11-09 17:54:14', NULL, NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (714, 1, '象形柱图', '象形柱图', 'scada_echart_type', NULL, 'default', 'N', '0', 'admin', '2023-11-09 17:54:14', NULL, NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (715, 1, '主题河流', '主题河流图', 'scada_echart_type', NULL, 'default', 'N', '0', 'admin', '2023-11-09 17:54:14', NULL, NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (716, 1, '路径图', '路径图', 'scada_echart_type', NULL, 'default', 'N', '0', 'admin', '2023-11-09 17:54:14', NULL, NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (717, 1, '3D柱图', '3D柱图', 'scada_echart_type', NULL, 'default', 'N', '0', 'admin', '2023-11-09 17:54:14', NULL, NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (718, 1, '3D地图', '3D地图', 'scada_echart_type', NULL, 'default', 'N', '0', 'admin', '2023-11-09 17:54:14', NULL, NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (719, 1, '词云图', '词云图', 'scada_echart_type', NULL, 'default', 'N', '0', 'admin', '2023-11-09 17:54:14', NULL, NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (720, 1, '其他图表', '其他图表', 'scada_echart_type', NULL, 'default', 'N', '0', 'admin', '2023-11-09 17:54:14', NULL, NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (721, 1, '按钮', '按钮', 'scada_gallery_type', NULL, 'default', 'N', '0', 'admin', '2023-11-09 18:05:42', NULL, NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (722, 1, '指示灯', '指示灯', 'scada_gallery_type', NULL, 'default', 'N', '0', 'admin', '2023-11-09 18:05:42', NULL, NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (723, 1, '工业泵', '工业泵', 'scada_gallery_type', NULL, 'default', 'N', '0', 'admin', '2023-11-09 18:05:42', NULL, NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (724, 1, '储蓄罐', '储蓄罐', 'scada_gallery_type', NULL, 'default', 'N', '0', 'admin', '2023-11-09 18:05:42', NULL, NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (725, 1, '电机', '电机', 'scada_gallery_type', NULL, 'default', 'N', '0', 'admin', '2023-11-09 18:05:42', NULL, NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (726, 1, '电力符号', '电力符号', 'scada_gallery_type', NULL, 'default', 'N', '0', 'admin', '2023-11-09 18:05:42', NULL, NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (727, 1, '阀门', '阀门', 'scada_gallery_type', NULL, 'default', 'N', '0', 'admin', '2023-11-09 18:05:42', NULL, NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (728, 1, '反应器', '反应器', 'scada_gallery_type', NULL, 'default', 'N', '0', 'admin', '2023-11-09 18:05:42', NULL, NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (729, 1, '风机', '风机', 'scada_gallery_type', NULL, 'default', 'N', '0', 'admin', '2023-11-09 18:05:42', NULL, NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (730, 1, '管道', '管道', 'scada_gallery_type', NULL, 'default', 'N', '0', 'admin', '2023-11-09 18:05:42', NULL, NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (731, 1, '建筑物', '建筑物', 'scada_gallery_type', NULL, 'default', 'N', '0', 'admin', '2023-11-09 18:05:42', NULL, NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (732, 1, '锅炉', '锅炉', 'scada_gallery_type', NULL, 'default', 'N', '0', 'admin', '2023-11-09 18:05:42', NULL, NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (733, 1, '换热站', '换热站', 'scada_gallery_type', NULL, 'default', 'N', '0', 'admin', '2023-11-09 18:05:42', NULL, NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (734, 1, '机械设备', '机械设备', 'scada_gallery_type', NULL, 'default', 'N', '0', 'admin', '2023-11-09 18:05:42', NULL, NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (735, 1, '交通', '交通', 'scada_gallery_type', NULL, 'default', 'N', '0', 'admin', '2023-11-09 18:05:42', NULL, NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (736, 1, '警示与标志', '警示与标志', 'scada_gallery_type', NULL, 'default', 'N', '0', 'admin', '2023-11-09 18:05:42', NULL, NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (737, 1, '卡片', '卡片', 'scada_gallery_type', NULL, 'default', 'N', '0', 'admin', '2023-11-09 18:05:42', NULL, NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (738, 1, '空调系统', '空调系统', 'scada_gallery_type', NULL, 'default', 'N', '0', 'admin', '2023-11-09 18:05:42', NULL, NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (739, 1, '流体符号', '流体符号', 'scada_gallery_type', NULL, 'default', 'N', '0', 'admin', '2023-11-09 18:05:42', NULL, NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (740, 1, '背景模版', '背景模版', 'scada_gallery_type', NULL, 'default', 'N', '0', 'admin', '2023-11-09 18:05:42', NULL, NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (741, 1, '人物', '人物', 'scada_gallery_type', NULL, 'default', 'N', '0', 'admin', '2023-11-09 18:05:42', NULL, NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (742, 1, '天气', '天气', 'scada_gallery_type', NULL, 'default', 'N', '0', 'admin', '2023-11-09 18:05:42', NULL, NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (743, 1, '物料运输', '物料运输', 'scada_gallery_type', NULL, 'default', 'N', '0', 'admin', '2023-11-09 18:05:42', NULL, NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (744, 1, '仪表', '仪表', 'scada_gallery_type', NULL, 'default', 'N', '0', 'admin', '2023-11-09 18:05:42', NULL, NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (745, 1, '装饰', '装饰', 'scada_gallery_type', NULL, 'default', 'N', '0', 'admin', '2023-11-09 18:05:42', NULL, NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (746, 1, '自然', '自然', 'scada_gallery_type', NULL, 'default', 'N', '0', 'admin', '2023-11-09 18:05:42', NULL, NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (747, 1, '全景', '全景', 'scada_gallery_type', NULL, 'default', 'N', '0', 'admin', '2023-11-09 18:05:42', NULL, NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (748, 1, '3D图画', '3D图画', 'scada_gallery_type', NULL, 'default', 'N', '0', 'admin', '2023-11-09 18:05:42', NULL, NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (749, 1, '960×600', '960×600', 'sys_page_size', NULL, 'default', 'N', '0', 'admin', '2023-11-09 18:05:42', NULL, NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (750, 1, '1024×768', '1024×768', 'sys_page_size', NULL, 'default', 'N', '0', 'admin', '2023-11-09 18:05:42', NULL, NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (751, 1, '1280×1024', '1280×1024', 'sys_page_size', NULL, 'default', 'N', '0', 'admin', '2023-11-09 18:05:42', NULL, NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (752, 1, '1366×768', '1366×768', 'sys_page_size', NULL, 'default', 'N', '0', 'admin', '2023-11-09 18:05:42', NULL, NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (753, 1, '1440×900', '1440×900', 'sys_page_size', NULL, 'default', 'N', '0', 'admin', '2023-11-09 18:05:42', NULL, NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (754, 1, '1920×960', '1920×960', 'sys_page_size', NULL, 'default', 'N', '0', 'admin', '2023-11-09 18:05:42', NULL, NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (755, 1, '1920×1080', '1920×1080', 'sys_page_size', NULL, 'default', 'N', '0', 'admin', '2023-11-09 18:05:42', NULL, NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (756, 1, '2048×858', '2048×858', 'sys_page_size', NULL, 'default', 'N', '0', 'admin', '2023-11-09 18:05:42', NULL, NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (757, 1, '2048×1080', '2048×1080', 'sys_page_size', NULL, 'default', 'N', '0', 'admin', '2023-11-09 18:05:42', NULL, NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (758, 1, '3840×2160', '3840×2160', 'sys_page_size', NULL, 'default', 'N', '0', 'admin', '2023-11-09 18:05:42', NULL, NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (759, 1, '3656×2664', '3656×2664', 'sys_page_size', NULL, 'default', 'N', '0', 'admin', '2023-11-09 18:05:42', NULL, NULL, NULL); +INSERT INTO `sys_dict_data` VALUES (760, 1, '4096×3112', '4096×3112', 'sys_page_size', NULL, 'default', 'N', '0', 'admin', '2023-11-09 18:05:42', NULL, NULL, NULL); + +-- ---------------------------- +-- Table structure for sys_dict_data_translate +-- ---------------------------- +DROP TABLE IF EXISTS `sys_dict_data_translate`; +CREATE TABLE `sys_dict_data_translate` ( + `id` bigint NOT NULL COMMENT 'ID', + `zh_cn` varchar(200) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT NULL COMMENT 'zh_CN', + `en_us` varchar(200) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT NULL COMMENT 'en_US', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb3 COLLATE = utf8mb3_general_ci COMMENT = '字典数据翻译表' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of sys_dict_data_translate +-- ---------------------------- +INSERT INTO `sys_dict_data_translate` VALUES (1, '男', 'man'); +INSERT INTO `sys_dict_data_translate` VALUES (2, '女', 'woman'); +INSERT INTO `sys_dict_data_translate` VALUES (3, '未知', 'Unknown'); +INSERT INTO `sys_dict_data_translate` VALUES (4, '显示', 'display'); +INSERT INTO `sys_dict_data_translate` VALUES (5, '隐藏', 'hide'); +INSERT INTO `sys_dict_data_translate` VALUES (6, '正常', 'normal'); +INSERT INTO `sys_dict_data_translate` VALUES (7, '停用', 'Deactivated'); +INSERT INTO `sys_dict_data_translate` VALUES (8, '正常', 'normal'); +INSERT INTO `sys_dict_data_translate` VALUES (9, '暂停', 'Time out'); +INSERT INTO `sys_dict_data_translate` VALUES (10, '默认', 'default'); +INSERT INTO `sys_dict_data_translate` VALUES (11, '系统', 'system'); +INSERT INTO `sys_dict_data_translate` VALUES (12, '是', 'be'); +INSERT INTO `sys_dict_data_translate` VALUES (13, '否', 'not'); +INSERT INTO `sys_dict_data_translate` VALUES (14, '通知', 'notice'); +INSERT INTO `sys_dict_data_translate` VALUES (15, '公告', 'announcement'); +INSERT INTO `sys_dict_data_translate` VALUES (16, '正常', 'normal'); +INSERT INTO `sys_dict_data_translate` VALUES (17, '关闭', 'Shut down'); +INSERT INTO `sys_dict_data_translate` VALUES (18, '新增', 'New'); +INSERT INTO `sys_dict_data_translate` VALUES (19, '修改', 'revise'); +INSERT INTO `sys_dict_data_translate` VALUES (20, '删除', 'Delete'); +INSERT INTO `sys_dict_data_translate` VALUES (21, '授权', 'authorization'); +INSERT INTO `sys_dict_data_translate` VALUES (22, '导出', 'Export'); +INSERT INTO `sys_dict_data_translate` VALUES (23, '导入', 'Import'); +INSERT INTO `sys_dict_data_translate` VALUES (24, '强退', 'Forced retreat'); +INSERT INTO `sys_dict_data_translate` VALUES (25, '生成代码', 'Generate code'); +INSERT INTO `sys_dict_data_translate` VALUES (26, '清空数据', 'Clear the data'); +INSERT INTO `sys_dict_data_translate` VALUES (27, '成功', 'succeed'); +INSERT INTO `sys_dict_data_translate` VALUES (28, '失败', 'fail'); +INSERT INTO `sys_dict_data_translate` VALUES (100, '属性', 'attribute'); +INSERT INTO `sys_dict_data_translate` VALUES (101, '功能', 'function'); +INSERT INTO `sys_dict_data_translate` VALUES (102, '事件', 'event'); +INSERT INTO `sys_dict_data_translate` VALUES (103, '整数', 'integer'); +INSERT INTO `sys_dict_data_translate` VALUES (104, '小数', 'decimal fraction'); +INSERT INTO `sys_dict_data_translate` VALUES (105, '布尔', 'Boolean'); +INSERT INTO `sys_dict_data_translate` VALUES (106, '枚举', 'enumerate'); +INSERT INTO `sys_dict_data_translate` VALUES (107, '字符串', 'string'); +INSERT INTO `sys_dict_data_translate` VALUES (108, '是', 'be'); +INSERT INTO `sys_dict_data_translate` VALUES (109, '否', 'not'); +INSERT INTO `sys_dict_data_translate` VALUES (110, '数组', 'array'); +INSERT INTO `sys_dict_data_translate` VALUES (111, '未发布', 'Unpublished'); +INSERT INTO `sys_dict_data_translate` VALUES (112, '已发布', 'Published'); +INSERT INTO `sys_dict_data_translate` VALUES (113, '直连设备', 'Directly connected devices'); +INSERT INTO `sys_dict_data_translate` VALUES (114, '网关设备', 'Gateway devices'); +INSERT INTO `sys_dict_data_translate` VALUES (116, 'WIFI', 'WIFI'); +INSERT INTO `sys_dict_data_translate` VALUES (117, '蜂窝(2G/3G/4G/5G)', 'Cellular (2G/3G/4G/5G)'); +INSERT INTO `sys_dict_data_translate` VALUES (118, '以太网', 'Ethernet'); +INSERT INTO `sys_dict_data_translate` VALUES (119, '简单认证', 'Simple authentication'); +INSERT INTO `sys_dict_data_translate` VALUES (120, '加密认证', 'Cryptographic authentication'); +INSERT INTO `sys_dict_data_translate` VALUES (122, 'ESP8266/Arduino', 'ESP8266/Arduino'); +INSERT INTO `sys_dict_data_translate` VALUES (123, 'ESP32/Arduino', 'ESP32/Arduino'); +INSERT INTO `sys_dict_data_translate` VALUES (124, 'ESP8266/RTOS', 'ESP8266/RTOS'); +INSERT INTO `sys_dict_data_translate` VALUES (127, 'ESP32/ESP-IDF', 'ESP32/ESP-IDF'); +INSERT INTO `sys_dict_data_translate` VALUES (128, '树莓派/Python', 'Raspberry Pi/Python'); +INSERT INTO `sys_dict_data_translate` VALUES (129, '未激活', 'Not activated'); +INSERT INTO `sys_dict_data_translate` VALUES (130, '禁用', 'disable'); +INSERT INTO `sys_dict_data_translate` VALUES (131, '在线', 'online'); +INSERT INTO `sys_dict_data_translate` VALUES (132, '离线', 'offline'); +INSERT INTO `sys_dict_data_translate` VALUES (133, '启用', 'enable'); +INSERT INTO `sys_dict_data_translate` VALUES (134, '禁用', 'disable'); +INSERT INTO `sys_dict_data_translate` VALUES (135, '提醒通知', 'Reminder notifications'); +INSERT INTO `sys_dict_data_translate` VALUES (136, '轻微问题', 'Minor issues'); +INSERT INTO `sys_dict_data_translate` VALUES (137, '严重警告', 'Serious warning'); +INSERT INTO `sys_dict_data_translate` VALUES (138, '不需要处理', 'No processing is required'); +INSERT INTO `sys_dict_data_translate` VALUES (139, '未处理', 'Not processed'); +INSERT INTO `sys_dict_data_translate` VALUES (140, '已处理', 'Processed'); +INSERT INTO `sys_dict_data_translate` VALUES (141, '属性上报', 'Attribute escalation'); +INSERT INTO `sys_dict_data_translate` VALUES (142, '事件上报', 'Event escalation'); +INSERT INTO `sys_dict_data_translate` VALUES (143, '功能调用', 'Function calls'); +INSERT INTO `sys_dict_data_translate` VALUES (144, '设备升级', 'Equipment upgrades'); +INSERT INTO `sys_dict_data_translate` VALUES (145, '设备上线', 'The device goes online'); +INSERT INTO `sys_dict_data_translate` VALUES (146, '设备离线', 'The device is offline'); +INSERT INTO `sys_dict_data_translate` VALUES (147, '其他', 'other'); +INSERT INTO `sys_dict_data_translate` VALUES (148, '安卓/Android', 'Android/Android'); +INSERT INTO `sys_dict_data_translate` VALUES (149, '其他', 'other'); +INSERT INTO `sys_dict_data_translate` VALUES (150, '小度平台', 'Small platform'); +INSERT INTO `sys_dict_data_translate` VALUES (151, '天猫精灵', 'Tmall Genie'); +INSERT INTO `sys_dict_data_translate` VALUES (152, '小米小爱', 'Xiaomi Xiaoai'); +INSERT INTO `sys_dict_data_translate` VALUES (153, '其他平台', 'Other platforms'); +INSERT INTO `sys_dict_data_translate` VALUES (154, '微信登录', 'WeChat login'); +INSERT INTO `sys_dict_data_translate` VALUES (155, 'QQ登录', 'QQ login'); +INSERT INTO `sys_dict_data_translate` VALUES (156, '启用', 'enable'); +INSERT INTO `sys_dict_data_translate` VALUES (157, '未启用', 'Not enabled'); +INSERT INTO `sys_dict_data_translate` VALUES (158, '支付宝', 'Alipay'); +INSERT INTO `sys_dict_data_translate` VALUES (159, '自动定位', 'Auto-target'); +INSERT INTO `sys_dict_data_translate` VALUES (160, '设备定位', 'Device positioning'); +INSERT INTO `sys_dict_data_translate` VALUES (161, '自定义位置', 'Custom location'); +INSERT INTO `sys_dict_data_translate` VALUES (162, '简单+加密', 'Simple + Encrypted'); +INSERT INTO `sys_dict_data_translate` VALUES (163, '未使用', 'Unused'); +INSERT INTO `sys_dict_data_translate` VALUES (164, '已使用', 'Used'); +INSERT INTO `sys_dict_data_translate` VALUES (165, '对象', 'object'); +INSERT INTO `sys_dict_data_translate` VALUES (166, '监控设备', 'Monitor the device'); +INSERT INTO `sys_dict_data_translate` VALUES (167, '未使用', 'Unused'); +INSERT INTO `sys_dict_data_translate` VALUES (168, '在线', 'online'); +INSERT INTO `sys_dict_data_translate` VALUES (169, 'DVR', 'DVR'); +INSERT INTO `sys_dict_data_translate` VALUES (170, 'NVR', 'NVR'); +INSERT INTO `sys_dict_data_translate` VALUES (171, '报警控制器', 'Alarm controller'); +INSERT INTO `sys_dict_data_translate` VALUES (172, '摄像机', 'camera'); +INSERT INTO `sys_dict_data_translate` VALUES (173, 'IPC', 'IPC'); +INSERT INTO `sys_dict_data_translate` VALUES (174, '显示器', 'display'); +INSERT INTO `sys_dict_data_translate` VALUES (175, '报警输入设备', 'Alarm input device'); +INSERT INTO `sys_dict_data_translate` VALUES (176, '报警输出设备', 'Alarm output device'); +INSERT INTO `sys_dict_data_translate` VALUES (177, '语音输入设备', 'Voice input devices'); +INSERT INTO `sys_dict_data_translate` VALUES (178, '语音输出设备', 'Voice output devices'); +INSERT INTO `sys_dict_data_translate` VALUES (179, '移动传输设备', 'Mobile Transmission Devices'); +INSERT INTO `sys_dict_data_translate` VALUES (180, '报警控制器', 'Alarm controller'); +INSERT INTO `sys_dict_data_translate` VALUES (181, '摄像机', 'camera'); +INSERT INTO `sys_dict_data_translate` VALUES (182, 'IPC', 'IPC'); +INSERT INTO `sys_dict_data_translate` VALUES (183, '显示器', 'display'); +INSERT INTO `sys_dict_data_translate` VALUES (184, '报警输入设备', 'Alarm input device'); +INSERT INTO `sys_dict_data_translate` VALUES (185, '报警输出设备', 'Alarm output device'); +INSERT INTO `sys_dict_data_translate` VALUES (186, '语音输入设备', 'Voice input devices'); +INSERT INTO `sys_dict_data_translate` VALUES (187, '语音输出设备', 'Voice output devices'); +INSERT INTO `sys_dict_data_translate` VALUES (188, '移动传输设备', 'Mobile Transmission Devices'); +INSERT INTO `sys_dict_data_translate` VALUES (189, '离线', 'offline'); +INSERT INTO `sys_dict_data_translate` VALUES (190, '禁用', 'disable'); +INSERT INTO `sys_dict_data_translate` VALUES (191, '云端轮询', 'Cloud polling'); +INSERT INTO `sys_dict_data_translate` VALUES (192, '边缘采集', 'Edge acquisition'); +INSERT INTO `sys_dict_data_translate` VALUES (193, '1分钟', '1 minute'); +INSERT INTO `sys_dict_data_translate` VALUES (194, '2分钟', '2 minutes'); +INSERT INTO `sys_dict_data_translate` VALUES (195, '5分钟', '5 minutes'); +INSERT INTO `sys_dict_data_translate` VALUES (196, '03(读保持寄存器)', '03 (Read Hold Register)'); +INSERT INTO `sys_dict_data_translate` VALUES (197, '01(读线圈)', '01 (Reading coil)'); +INSERT INTO `sys_dict_data_translate` VALUES (198, 'MQTT', 'MQTT'); +INSERT INTO `sys_dict_data_translate` VALUES (199, 'TCP', 'TCP'); +INSERT INTO `sys_dict_data_translate` VALUES (200, 'COAP', 'COAP'); +INSERT INTO `sys_dict_data_translate` VALUES (201, 'UDP', 'UDP'); +INSERT INTO `sys_dict_data_translate` VALUES (230, '其他', 'other'); +INSERT INTO `sys_dict_data_translate` VALUES (231, '事件上报', 'Event escalation'); +INSERT INTO `sys_dict_data_translate` VALUES (232, '设备上线', 'The device goes online'); +INSERT INTO `sys_dict_data_translate` VALUES (233, '设备离线', 'The device is offline'); +INSERT INTO `sys_dict_data_translate` VALUES (234, '服务下发', 'Service delivery'); +INSERT INTO `sys_dict_data_translate` VALUES (235, '属性获取', 'Attribute acquisition'); +INSERT INTO `sys_dict_data_translate` VALUES (236, 'OTA升级', 'OTA upgrades'); +INSERT INTO `sys_dict_data_translate` VALUES (237, '读写', 'Read and write'); +INSERT INTO `sys_dict_data_translate` VALUES (238, '只读', 'read only'); +INSERT INTO `sys_dict_data_translate` VALUES (239, '全部设备', 'All equipment'); +INSERT INTO `sys_dict_data_translate` VALUES (240, '指定设备', 'Specify the device'); +INSERT INTO `sys_dict_data_translate` VALUES (241, 'GB28181', 'GB28181'); +INSERT INTO `sys_dict_data_translate` VALUES (242, '02(读离散量输入)', '02 (Read Discrete Input)'); +INSERT INTO `sys_dict_data_translate` VALUES (243, '04(读输入寄存器)', '04 (Read Input Register)'); +INSERT INTO `sys_dict_data_translate` VALUES (244, '微信开放平台网站应用', 'WeChat open platform website application'); +INSERT INTO `sys_dict_data_translate` VALUES (245, '微信开放平台移动应用', 'WeChat open platform mobile application'); +INSERT INTO `sys_dict_data_translate` VALUES (246, '微信开放平台小程序', 'WeChat Open Platform Mini Program'); +INSERT INTO `sys_dict_data_translate` VALUES (247, '微信开放平台网站应用个人中心绑定', 'WeChat open platform website application personal center binding'); +INSERT INTO `sys_dict_data_translate` VALUES (248, '16位 无符号', '16-bit unsigned'); +INSERT INTO `sys_dict_data_translate` VALUES (249, '16位 有符号', '16-bit signed'); +INSERT INTO `sys_dict_data_translate` VALUES (250, '32位 有符号(ABCD)', '32-bit Signed (ABCD)'); +INSERT INTO `sys_dict_data_translate` VALUES (251, '32位 有符号(CDAB)', '32-bit Signed (CDAB)'); +INSERT INTO `sys_dict_data_translate` VALUES (252, '32位 无符号(ABCD)', '32-bit Unsigned (ABCD)'); +INSERT INTO `sys_dict_data_translate` VALUES (253, '32位 无符号(CDAB)', '32-bit Unsigned (CDAB)'); +INSERT INTO `sys_dict_data_translate` VALUES (254, '32位 浮点数(ABCD)', '32-bit floating-point (ABCD)'); +INSERT INTO `sys_dict_data_translate` VALUES (255, '32位 浮点数(CDAB)', '32-bit Floating-Point (CDAB)'); +INSERT INTO `sys_dict_data_translate` VALUES (257, 'Java脚本引擎', 'Java Scripting Engine'); +INSERT INTO `sys_dict_data_translate` VALUES (258, 'JavaScript脚本引擎', 'JavaScript scripting engine'); +INSERT INTO `sys_dict_data_translate` VALUES (259, '普通脚本节点', 'Normal script nodes'); +INSERT INTO `sys_dict_data_translate` VALUES (260, '选择脚本节点 (switch)', 'Selecting a Script Node (switch)'); +INSERT INTO `sys_dict_data_translate` VALUES (261, '条件脚本节点 (if)', 'Conditional Script Node (if)'); +INSERT INTO `sys_dict_data_translate` VALUES (262, '数量循环节点 (for)', 'Quantity Cycle Node (for)'); +INSERT INTO `sys_dict_data_translate` VALUES (263, '条件循环节点 (while)', 'Conditional Loop Node (while)'); +INSERT INTO `sys_dict_data_translate` VALUES (264, '退出循环节点 (break)', 'Exit Loop Node (Break)'); +INSERT INTO `sys_dict_data_translate` VALUES (265, 'groovy脚本引擎', 'Groovy scripting engine'); +INSERT INTO `sys_dict_data_translate` VALUES (266, '其他', 'other'); +INSERT INTO `sys_dict_data_translate` VALUES (267, '电灯', 'lamp'); +INSERT INTO `sys_dict_data_translate` VALUES (268, '空调', 'air conditioning'); +INSERT INTO `sys_dict_data_translate` VALUES (269, '窗帘', 'curtain'); +INSERT INTO `sys_dict_data_translate` VALUES (270, '窗纱', 'Screens'); +INSERT INTO `sys_dict_data_translate` VALUES (271, '插座', 'receptacle'); +INSERT INTO `sys_dict_data_translate` VALUES (272, '开关', 'switch'); +INSERT INTO `sys_dict_data_translate` VALUES (273, '冰箱', 'Refrigerator'); +INSERT INTO `sys_dict_data_translate` VALUES (274, '净水器', 'Water purifiers'); +INSERT INTO `sys_dict_data_translate` VALUES (275, '加湿器', 'Humidifier'); +INSERT INTO `sys_dict_data_translate` VALUES (276, '除湿器', 'Dehumidifiers'); +INSERT INTO `sys_dict_data_translate` VALUES (277, '电磁炉', 'Induction'); +INSERT INTO `sys_dict_data_translate` VALUES (278, '空气净化器', 'air purifier'); +INSERT INTO `sys_dict_data_translate` VALUES (279, '洗衣机', 'washer'); +INSERT INTO `sys_dict_data_translate` VALUES (280, '热水器', 'water heater'); +INSERT INTO `sys_dict_data_translate` VALUES (281, '燃气灶', 'Gas stoves'); +INSERT INTO `sys_dict_data_translate` VALUES (282, '电视机', 'television set'); +INSERT INTO `sys_dict_data_translate` VALUES (283, '网络盒子', 'Cyberbox'); +INSERT INTO `sys_dict_data_translate` VALUES (284, '油烟机', 'Range hood'); +INSERT INTO `sys_dict_data_translate` VALUES (285, '电风扇', 'fan'); +INSERT INTO `sys_dict_data_translate` VALUES (286, '投影仪', 'Projector'); +INSERT INTO `sys_dict_data_translate` VALUES (287, '扫地机器人', 'Robot vacuums'); +INSERT INTO `sys_dict_data_translate` VALUES (288, '热水壶', 'Kettle'); +INSERT INTO `sys_dict_data_translate` VALUES (289, '微波炉', 'microwave oven'); +INSERT INTO `sys_dict_data_translate` VALUES (290, '压力锅', 'pressure cooker'); +INSERT INTO `sys_dict_data_translate` VALUES (291, '电饭煲', 'rice cooker'); +INSERT INTO `sys_dict_data_translate` VALUES (292, '破壁机', 'Wall breaker'); +INSERT INTO `sys_dict_data_translate` VALUES (293, '新风机', 'Fresh air fan'); +INSERT INTO `sys_dict_data_translate` VALUES (294, '晾衣架', 'Drying racks'); +INSERT INTO `sys_dict_data_translate` VALUES (295, '烤箱设备', 'Oven equipment'); +INSERT INTO `sys_dict_data_translate` VALUES (296, '蒸烤箱', 'Steam oven'); +INSERT INTO `sys_dict_data_translate` VALUES (297, '蒸箱', 'Steamer'); +INSERT INTO `sys_dict_data_translate` VALUES (298, '电暖器', 'Electric heaters'); +INSERT INTO `sys_dict_data_translate` VALUES (299, '开窗器', 'Window opener'); +INSERT INTO `sys_dict_data_translate` VALUES (300, '摄像头', 'Camera'); +INSERT INTO `sys_dict_data_translate` VALUES (301, '相机', 'camera'); +INSERT INTO `sys_dict_data_translate` VALUES (302, '机器人', 'robot'); +INSERT INTO `sys_dict_data_translate` VALUES (303, '打印机', 'printer'); +INSERT INTO `sys_dict_data_translate` VALUES (304, '饮水机', 'Water dispenser'); +INSERT INTO `sys_dict_data_translate` VALUES (305, '鱼缸', 'fish tank'); +INSERT INTO `sys_dict_data_translate` VALUES (306, '浇花器', 'Flower waterer'); +INSERT INTO `sys_dict_data_translate` VALUES (307, '机顶盒', 'Stb'); +INSERT INTO `sys_dict_data_translate` VALUES (308, '香薰机', 'Aroma diffuser'); +INSERT INTO `sys_dict_data_translate` VALUES (309, 'DVD', 'DVD'); +INSERT INTO `sys_dict_data_translate` VALUES (310, '鞋柜', 'Shoe cabinet'); +INSERT INTO `sys_dict_data_translate` VALUES (311, '走步机', 'Walking machine'); +INSERT INTO `sys_dict_data_translate` VALUES (312, '跑步机', 'Treadmill'); +INSERT INTO `sys_dict_data_translate` VALUES (313, '床', 'bed'); +INSERT INTO `sys_dict_data_translate` VALUES (314, '浴霸', 'Bath bombs'); +INSERT INTO `sys_dict_data_translate` VALUES (315, '花洒', 'Showerhead'); +INSERT INTO `sys_dict_data_translate` VALUES (316, '浴缸', 'bathtub'); +INSERT INTO `sys_dict_data_translate` VALUES (317, '消毒柜', 'Sterilizer'); +INSERT INTO `sys_dict_data_translate` VALUES (318, '洗碗机', 'dishwasher'); +INSERT INTO `sys_dict_data_translate` VALUES (319, '沙发品类', 'Sofa category'); +INSERT INTO `sys_dict_data_translate` VALUES (320, '门铃', 'doorbell'); +INSERT INTO `sys_dict_data_translate` VALUES (321, '电梯', 'lift'); +INSERT INTO `sys_dict_data_translate` VALUES (322, '体重秤', 'Scales'); +INSERT INTO `sys_dict_data_translate` VALUES (323, '体脂秤', 'Body fat scales'); +INSERT INTO `sys_dict_data_translate` VALUES (324, '壁挂炉', 'Wall-hung boiler'); +INSERT INTO `sys_dict_data_translate` VALUES (325, '特定设备的组合场景', 'A combination of device-specific scenarios'); +INSERT INTO `sys_dict_data_translate` VALUES (326, '特定设备的组合场景', 'A combination of device-specific scenarios'); +INSERT INTO `sys_dict_data_translate` VALUES (327, '打开', 'Open it'); +INSERT INTO `sys_dict_data_translate` VALUES (328, '关闭', 'Shut down'); +INSERT INTO `sys_dict_data_translate` VALUES (329, '定时打开', 'Turn on at a timer'); +INSERT INTO `sys_dict_data_translate` VALUES (330, '定时关闭', 'Timed shutdown'); +INSERT INTO `sys_dict_data_translate` VALUES (331, '查询开关状态', 'Query the switching status'); +INSERT INTO `sys_dict_data_translate` VALUES (332, '设备启动', 'The device boots up'); +INSERT INTO `sys_dict_data_translate` VALUES (333, '设置灯光亮度', 'Set the brightness of the light'); +INSERT INTO `sys_dict_data_translate` VALUES (334, '调亮灯光', 'Turn the lights on'); +INSERT INTO `sys_dict_data_translate` VALUES (335, '调暗灯光', 'Dim the lights'); +INSERT INTO `sys_dict_data_translate` VALUES (336, '升高温度', 'Increase the temperature'); +INSERT INTO `sys_dict_data_translate` VALUES (337, '降低温度', 'Reduce the temperature'); +INSERT INTO `sys_dict_data_translate` VALUES (338, '设置温度', 'Set the temperature'); +INSERT INTO `sys_dict_data_translate` VALUES (339, '查询温度(当前温度和目标温度)', 'Query temperature (current temperature and target temperature)'); +INSERT INTO `sys_dict_data_translate` VALUES (340, '查询当前温度', 'Query the current temperature'); +INSERT INTO `sys_dict_data_translate` VALUES (341, '查询目标温度', 'Query the target temperature'); +INSERT INTO `sys_dict_data_translate` VALUES (342, '设置湿度模式', 'Set the humidity mode'); +INSERT INTO `sys_dict_data_translate` VALUES (343, '增大湿度', 'Increase humidity'); +INSERT INTO `sys_dict_data_translate` VALUES (344, '降低湿度', 'Reduce humidity'); +INSERT INTO `sys_dict_data_translate` VALUES (345, '查询湿度', 'Check the humidity'); +INSERT INTO `sys_dict_data_translate` VALUES (346, '查询目标湿度', 'Query the target humidity'); +INSERT INTO `sys_dict_data_translate` VALUES (347, '查询二氧化碳含量', 'Check the carbon dioxide content'); +INSERT INTO `sys_dict_data_translate` VALUES (348, '暂停', 'Time out'); +INSERT INTO `sys_dict_data_translate` VALUES (349, '继续', 'Go on'); +INSERT INTO `sys_dict_data_translate` VALUES (350, '调高音量', 'Turn up the volume'); +INSERT INTO `sys_dict_data_translate` VALUES (351, '调低音量', 'Turn down the volume'); +INSERT INTO `sys_dict_data_translate` VALUES (352, '设置音量', 'Set the volume'); +INSERT INTO `sys_dict_data_translate` VALUES (353, '设置静音状态', 'Set the mute status'); +INSERT INTO `sys_dict_data_translate` VALUES (354, '查询设备所在位置', 'Query the location of the device'); +INSERT INTO `sys_dict_data_translate` VALUES (355, '设置清扫位置', 'Set the sweeping position'); +INSERT INTO `sys_dict_data_translate` VALUES (356, '上锁/解锁', 'Locked/unlocked'); +INSERT INTO `sys_dict_data_translate` VALUES (357, '设置颜色', 'Set the color'); +INSERT INTO `sys_dict_data_translate` VALUES (358, '查询电量', 'Query the battery level'); +INSERT INTO `sys_dict_data_translate` VALUES (359, '开始充电', 'Start charging'); +INSERT INTO `sys_dict_data_translate` VALUES (360, '停止充电', 'Stop charging'); +INSERT INTO `sys_dict_data_translate` VALUES (361, '设置灯光色温', 'Set the color temperature of the light'); +INSERT INTO `sys_dict_data_translate` VALUES (362, '增高灯光色温', 'Increase the color temperature of the light'); +INSERT INTO `sys_dict_data_translate` VALUES (363, '降低灯光色温', 'Reduce the color temperature of the light'); +INSERT INTO `sys_dict_data_translate` VALUES (364, '查询风速', 'Query the wind speed'); +INSERT INTO `sys_dict_data_translate` VALUES (365, '设置风速', 'Set the wind speed'); +INSERT INTO `sys_dict_data_translate` VALUES (366, '增加风速', 'Increase wind speed'); +INSERT INTO `sys_dict_data_translate` VALUES (367, '减小风速', 'Reduce wind speed'); +INSERT INTO `sys_dict_data_translate` VALUES (368, '查询空气质量', 'Check the air quality'); +INSERT INTO `sys_dict_data_translate` VALUES (369, '设置吸力', 'Set the suction'); +INSERT INTO `sys_dict_data_translate` VALUES (370, '设置水量', 'Set the amount of water'); +INSERT INTO `sys_dict_data_translate` VALUES (371, '上一个频道', 'Previous channel'); +INSERT INTO `sys_dict_data_translate` VALUES (372, '下一个频道', 'Next channel'); +INSERT INTO `sys_dict_data_translate` VALUES (373, '设置频道', 'Set up a channel'); +INSERT INTO `sys_dict_data_translate` VALUES (374, '返回上个频道', 'Go back to the previous channel'); +INSERT INTO `sys_dict_data_translate` VALUES (375, '设置移动方向', 'Set the direction of movement'); +INSERT INTO `sys_dict_data_translate` VALUES (376, '设置模式', 'Set the mode'); +INSERT INTO `sys_dict_data_translate` VALUES (377, '取消设置的模式', 'Cancel the set mode'); +INSERT INTO `sys_dict_data_translate` VALUES (378, '定时设置模式', 'Timed setting mode'); +INSERT INTO `sys_dict_data_translate` VALUES (379, '定时取消设置的模式', 'The mode of scheduled unsetting'); +INSERT INTO `sys_dict_data_translate` VALUES (380, '查询水质', 'Check the water quality'); +INSERT INTO `sys_dict_data_translate` VALUES (381, '设置电梯楼层', 'Set up elevator floors'); +INSERT INTO `sys_dict_data_translate` VALUES (382, '电梯按下', 'The elevator presses'); +INSERT INTO `sys_dict_data_translate` VALUES (383, '电梯按上', 'The elevator presses on'); +INSERT INTO `sys_dict_data_translate` VALUES (384, '升高高度', 'Raise height'); +INSERT INTO `sys_dict_data_translate` VALUES (385, '降低高度', 'Lower the height'); +INSERT INTO `sys_dict_data_translate` VALUES (386, '查询运行时间', 'Query the run time'); +INSERT INTO `sys_dict_data_translate` VALUES (387, '查询剩余时间', 'Query the remaining time'); +INSERT INTO `sys_dict_data_translate` VALUES (388, '查询运行状态', 'Query the running status'); +INSERT INTO `sys_dict_data_translate` VALUES (389, '增加速度', 'Increase speed'); +INSERT INTO `sys_dict_data_translate` VALUES (390, '降低速度', 'Reduce the speed'); +INSERT INTO `sys_dict_data_translate` VALUES (391, '设置速度', 'Set the speed'); +INSERT INTO `sys_dict_data_translate` VALUES (392, '获取速度', 'Get speed'); +INSERT INTO `sys_dict_data_translate` VALUES (393, '设置档位', 'Set the gear'); +INSERT INTO `sys_dict_data_translate` VALUES (394, '查询设备所有状态', 'Query all device statuses'); +INSERT INTO `sys_dict_data_translate` VALUES (395, '查询PM2.5', 'Check PM2. 5'); +INSERT INTO `sys_dict_data_translate` VALUES (396, '查询PM10', 'Query PM10'); +INSERT INTO `sys_dict_data_translate` VALUES (397, '获取跑步信息', 'Get running information'); +INSERT INTO `sys_dict_data_translate` VALUES (398, '设置水流', 'Set the water flow'); +INSERT INTO `sys_dict_data_translate` VALUES (399, '执行自定义复杂动作', 'Perform custom complex actions'); +INSERT INTO `sys_dict_data_translate` VALUES (400, '设备定时', 'Device timing'); +INSERT INTO `sys_dict_data_translate` VALUES (401, '取消设备定时', 'Cancel the device schedule'); +INSERT INTO `sys_dict_data_translate` VALUES (402, '设备复位', 'The device resets'); +INSERT INTO `sys_dict_data_translate` VALUES (403, '设置功率', 'Set the power'); +INSERT INTO `sys_dict_data_translate` VALUES (404, '增大功率', 'Increase the power'); +INSERT INTO `sys_dict_data_translate` VALUES (405, '减小功率', 'Reduce power'); +INSERT INTO `sys_dict_data_translate` VALUES (406, '查询油量', 'Check the oil level'); +INSERT INTO `sys_dict_data_translate` VALUES (407, '打印', 'print'); +INSERT INTO `sys_dict_data_translate` VALUES (408, '设置摆风角度', 'Set the swing angle'); +INSERT INTO `sys_dict_data_translate` VALUES (409, '增大雾量', 'Increase the amount of fog'); +INSERT INTO `sys_dict_data_translate` VALUES (410, '见效雾量', 'Effective fog volume'); +INSERT INTO `sys_dict_data_translate` VALUES (411, '设置雾量', 'Set the amount of fog'); +INSERT INTO `sys_dict_data_translate` VALUES (412, '打开灶眼', 'Open the hearth'); +INSERT INTO `sys_dict_data_translate` VALUES (413, '关闭灶眼', 'Close the hearth'); +INSERT INTO `sys_dict_data_translate` VALUES (414, '定时打开灶眼', 'Open the stove eye regularly'); +INSERT INTO `sys_dict_data_translate` VALUES (415, '定时关闭灶眼', 'Close the burner regularly'); +INSERT INTO `sys_dict_data_translate` VALUES (416, '设备的开关状态属性', 'The on/off status properties of the device'); +INSERT INTO `sys_dict_data_translate` VALUES (417, '设备的亮度属性', 'The brightness attribute of the device'); +INSERT INTO `sys_dict_data_translate` VALUES (418, '设备对应的温度属性', 'The temperature attribute of the device'); +INSERT INTO `sys_dict_data_translate` VALUES (419, '湿度属性', 'Humidity attributes'); +INSERT INTO `sys_dict_data_translate` VALUES (420, '空气中CO2的浓度', 'The concentration of CO2 in the air'); +INSERT INTO `sys_dict_data_translate` VALUES (421, '设备的暂停属性', 'The pause properties of the device'); +INSERT INTO `sys_dict_data_translate` VALUES (422, '设备的音量属性', 'The volume attribute of the device'); +INSERT INTO `sys_dict_data_translate` VALUES (423, '发声设备当前的静音属性', 'The current mute properties of the sounding device'); +INSERT INTO `sys_dict_data_translate` VALUES (424, '设备的位置属性', 'The location properties of the device'); +INSERT INTO `sys_dict_data_translate` VALUES (425, '锁的状态属性', 'The state attribute of the lock'); +INSERT INTO `sys_dict_data_translate` VALUES (426, '设备的颜色', 'The color of the device'); +INSERT INTO `sys_dict_data_translate` VALUES (427, '设备电池的电量属性', 'The battery level attribute of the device'); +INSERT INTO `sys_dict_data_translate` VALUES (428, '自定义充电状态属性', 'Customize state-of-charge attributes'); +INSERT INTO `sys_dict_data_translate` VALUES (429, '设备的色温属性', 'The color temperature properties of the device'); +INSERT INTO `sys_dict_data_translate` VALUES (430, '设备风速值属性', 'The wind speed value attribute of the device'); +INSERT INTO `sys_dict_data_translate` VALUES (431, '空气质量的属性', 'Attributes of air quality'); +INSERT INTO `sys_dict_data_translate` VALUES (432, '设备的吸力属性', 'Suction properties of the device'); +INSERT INTO `sys_dict_data_translate` VALUES (433, '设备的水量属性', 'The water volume attribute of the device'); +INSERT INTO `sys_dict_data_translate` VALUES (434, '电视频道属性', 'TV channel attributes'); +INSERT INTO `sys_dict_data_translate` VALUES (435, '自定义方向属性', 'Custom orientation attributes'); +INSERT INTO `sys_dict_data_translate` VALUES (436, '设备控制模式属性', 'Device control mode properties'); +INSERT INTO `sys_dict_data_translate` VALUES (437, '自定义水质属性', 'Customize water quality attributes'); +INSERT INTO `sys_dict_data_translate` VALUES (438, '自定义楼梯属性', 'Customize stair properties'); +INSERT INTO `sys_dict_data_translate` VALUES (439, '自定义高度属性', 'Custom height attributes'); +INSERT INTO `sys_dict_data_translate` VALUES (440, '自定义运行时间属性', 'Customize runtime properties'); +INSERT INTO `sys_dict_data_translate` VALUES (441, '自定义剩余时间属性', 'Customize the time remaining attributes'); +INSERT INTO `sys_dict_data_translate` VALUES (442, '自定义运行状态属性', 'Customize the running status properties'); +INSERT INTO `sys_dict_data_translate` VALUES (443, '设备速度值属性', 'Device speed value attributes'); +INSERT INTO `sys_dict_data_translate` VALUES (444, '自定义档位属性', 'Customize gear properties'); +INSERT INTO `sys_dict_data_translate` VALUES (445, '设备的状态属性', 'The status properties of the device'); +INSERT INTO `sys_dict_data_translate` VALUES (446, '空气中PM2.5的含量', 'PM2 in the air. 5 content'); +INSERT INTO `sys_dict_data_translate` VALUES (447, '空气中PM10的含量', 'The amount of PM10 in the air'); +INSERT INTO `sys_dict_data_translate` VALUES (448, '运动信息属性', 'Motion information attributes'); +INSERT INTO `sys_dict_data_translate` VALUES (449, '自定义水流属性', 'Customize water flow attributes'); +INSERT INTO `sys_dict_data_translate` VALUES (450, '自定义复杂动作属性', 'Customize complex action attributes'); +INSERT INTO `sys_dict_data_translate` VALUES (451, '自定义定时动作属性', 'Customize timed action properties'); +INSERT INTO `sys_dict_data_translate` VALUES (452, '自定义复位动作属性', 'Customize the properties of the reset action'); +INSERT INTO `sys_dict_data_translate` VALUES (453, '设备油箱的油量属性', 'The fuel level attribute of the device\'s fuel tank'); +INSERT INTO `sys_dict_data_translate` VALUES (454, '设备的工作状态属性', 'The work status attribute of the device'); +INSERT INTO `sys_dict_data_translate` VALUES (455, '设备是否可达属性', 'Whether the device is reachable or not'); +INSERT INTO `sys_dict_data_translate` VALUES (456, '设备通电状态的属性', 'The properties of the power-on status of the device'); +INSERT INTO `sys_dict_data_translate` VALUES (457, '设备的功率属性', 'The power attribute of the device'); +INSERT INTO `sys_dict_data_translate` VALUES (458, '空气中总挥发性有机化合物的浓度', 'The concentration of total volatile organic compounds in the air'); +INSERT INTO `sys_dict_data_translate` VALUES (459, '空气中甲醛的浓度', 'The concentration of formaldehyde in the air'); +INSERT INTO `sys_dict_data_translate` VALUES (460, '百分比属性', 'Percentage attributes'); +INSERT INTO `sys_dict_data_translate` VALUES (461, '日期和时间属性', 'Date and time attributes'); +INSERT INTO `sys_dict_data_translate` VALUES (462, '设备可行驶距离属性', 'The distance that can be traveled by the device attributes'); +INSERT INTO `sys_dict_data_translate` VALUES (463, '设备的名称属性', 'Name attribute of the device'); +INSERT INTO `sys_dict_data_translate` VALUES (464, '折线图', 'Line chart'); +INSERT INTO `sys_dict_data_translate` VALUES (465, '柱状图', 'histogram'); +INSERT INTO `sys_dict_data_translate` VALUES (466, '饼图', 'Pie charts'); +INSERT INTO `sys_dict_data_translate` VALUES (467, '散点图', 'Scatter plot'); +INSERT INTO `sys_dict_data_translate` VALUES (468, 'K线图', 'Candlestick chart'); +INSERT INTO `sys_dict_data_translate` VALUES (469, '雷达图', 'Radar chart'); +INSERT INTO `sys_dict_data_translate` VALUES (470, '盒须图', 'Box whisker diagram'); +INSERT INTO `sys_dict_data_translate` VALUES (471, '热力图', 'Heatmap'); +INSERT INTO `sys_dict_data_translate` VALUES (472, '关系图', 'Diagrams'); +INSERT INTO `sys_dict_data_translate` VALUES (473, '水球图', 'Water polo diagram'); +INSERT INTO `sys_dict_data_translate` VALUES (474, '树图', 'Tree diagram'); +INSERT INTO `sys_dict_data_translate` VALUES (475, '矩形树图', 'Rectangular tree diagram'); +INSERT INTO `sys_dict_data_translate` VALUES (476, '旭日图', 'Diagram of the Rising Sun'); +INSERT INTO `sys_dict_data_translate` VALUES (477, '平行坐标系', 'Parallel coordinate system'); +INSERT INTO `sys_dict_data_translate` VALUES (478, '桑葚图', 'Mulberry diagram'); +INSERT INTO `sys_dict_data_translate` VALUES (479, '漏斗图', 'Funnel charts'); +INSERT INTO `sys_dict_data_translate` VALUES (480, '仪表图', 'Gauge diagram'); +INSERT INTO `sys_dict_data_translate` VALUES (481, '象形柱图', 'Pictogram bar chart'); +INSERT INTO `sys_dict_data_translate` VALUES (482, '主题河流', 'Theme river'); +INSERT INTO `sys_dict_data_translate` VALUES (483, '路径图', 'Road map'); +INSERT INTO `sys_dict_data_translate` VALUES (484, '3D柱图', '3D bar chart'); +INSERT INTO `sys_dict_data_translate` VALUES (485, '3D地图', '3D maps'); +INSERT INTO `sys_dict_data_translate` VALUES (486, '词云图', 'Word cloud diagrams'); +INSERT INTO `sys_dict_data_translate` VALUES (487, '其他图表', 'Other charts'); +INSERT INTO `sys_dict_data_translate` VALUES (488, '按钮', 'button'); +INSERT INTO `sys_dict_data_translate` VALUES (489, '指示灯', 'Light'); +INSERT INTO `sys_dict_data_translate` VALUES (490, '工业泵', 'Industrial pumps'); +INSERT INTO `sys_dict_data_translate` VALUES (491, '储蓄罐', 'Piggy bank'); +INSERT INTO `sys_dict_data_translate` VALUES (492, '电机', 'Motor'); +INSERT INTO `sys_dict_data_translate` VALUES (493, '电力符号', 'Electricity symbol'); +INSERT INTO `sys_dict_data_translate` VALUES (494, '阀门', 'valve'); +INSERT INTO `sys_dict_data_translate` VALUES (495, '反应器', 'reactor'); +INSERT INTO `sys_dict_data_translate` VALUES (496, '风机', 'Fans'); +INSERT INTO `sys_dict_data_translate` VALUES (497, '管道', 'pipeline'); +INSERT INTO `sys_dict_data_translate` VALUES (498, '建筑物', 'building'); +INSERT INTO `sys_dict_data_translate` VALUES (499, '锅炉', 'boiler'); +INSERT INTO `sys_dict_data_translate` VALUES (500, '换热站', 'Heat exchange station'); +INSERT INTO `sys_dict_data_translate` VALUES (501, '机械设备', 'Machinery and equipment'); +INSERT INTO `sys_dict_data_translate` VALUES (502, '交通', 'traffic'); +INSERT INTO `sys_dict_data_translate` VALUES (503, '警示与标志', 'Warnings & Signs'); +INSERT INTO `sys_dict_data_translate` VALUES (504, '卡片', 'card'); +INSERT INTO `sys_dict_data_translate` VALUES (505, '空调系统', 'Air conditioning system'); +INSERT INTO `sys_dict_data_translate` VALUES (506, '流体符号', 'Fluid symbols'); +INSERT INTO `sys_dict_data_translate` VALUES (507, '背景模版', 'Background templates'); +INSERT INTO `sys_dict_data_translate` VALUES (508, '人物', 'figure'); +INSERT INTO `sys_dict_data_translate` VALUES (509, '天气', 'Weather'); +INSERT INTO `sys_dict_data_translate` VALUES (510, '物料运输', 'Material transport'); +INSERT INTO `sys_dict_data_translate` VALUES (511, '仪表', 'appearance'); +INSERT INTO `sys_dict_data_translate` VALUES (512, '装饰', 'ornament'); +INSERT INTO `sys_dict_data_translate` VALUES (513, '自然', 'nature'); +INSERT INTO `sys_dict_data_translate` VALUES (514, '全景', 'panorama'); +INSERT INTO `sys_dict_data_translate` VALUES (515, '3D图画', '3D drawings'); +INSERT INTO `sys_dict_data_translate` VALUES (516, '960x600', '960x600'); +INSERT INTO `sys_dict_data_translate` VALUES (517, '1024x768', '1024x768'); +INSERT INTO `sys_dict_data_translate` VALUES (518, '1280x1024', '1280x1024'); +INSERT INTO `sys_dict_data_translate` VALUES (519, '1366x768', '1366x768'); +INSERT INTO `sys_dict_data_translate` VALUES (520, '1440x900', '1440x900'); +INSERT INTO `sys_dict_data_translate` VALUES (521, '1920x960', '1920x960'); +INSERT INTO `sys_dict_data_translate` VALUES (522, '1920x1080', '1920x1080'); +INSERT INTO `sys_dict_data_translate` VALUES (523, '2048x858', '2048x858'); +INSERT INTO `sys_dict_data_translate` VALUES (524, '2048x1080', '2048x1080'); +INSERT INTO `sys_dict_data_translate` VALUES (525, '3840x2160', '3840x2160'); +INSERT INTO `sys_dict_data_translate` VALUES (526, '3656x2664', '3656x2664'); +INSERT INTO `sys_dict_data_translate` VALUES (527, '4096x3112', '4096x3112'); +INSERT INTO `sys_dict_data_translate` VALUES (528, '授权码模式', 'Authorization code mode'); +INSERT INTO `sys_dict_data_translate` VALUES (529, '客户端模式', 'Client-side mode'); +INSERT INTO `sys_dict_data_translate` VALUES (530, '密码模式', 'Password mode'); +INSERT INTO `sys_dict_data_translate` VALUES (531, '简化模式', 'Simplified mode'); +INSERT INTO `sys_dict_data_translate` VALUES (532, '刷新Token', 'Refresh the token'); +INSERT INTO `sys_dict_data_translate` VALUES (533, '短信', 'Sms'); +INSERT INTO `sys_dict_data_translate` VALUES (535, '微信', 'Wechat'); +INSERT INTO `sys_dict_data_translate` VALUES (536, '钉钉', 'DingTalk'); +INSERT INTO `sys_dict_data_translate` VALUES (537, '语音', 'Voice'); +INSERT INTO `sys_dict_data_translate` VALUES (539, '阿里云', 'Alibaba Cloud'); +INSERT INTO `sys_dict_data_translate` VALUES (540, 'QQ', 'QQ'); +INSERT INTO `sys_dict_data_translate` VALUES (543, '邮箱', 'mailbox'); +INSERT INTO `sys_dict_data_translate` VALUES (554, '设备告警', 'Device alarms'); +INSERT INTO `sys_dict_data_translate` VALUES (558, '验证码', 'Captcha'); +INSERT INTO `sys_dict_data_translate` VALUES (560, '设备上报', 'The device is escalated'); +INSERT INTO `sys_dict_data_translate` VALUES (561, '平台下发', 'Distributed by the platform'); +INSERT INTO `sys_dict_data_translate` VALUES (562, '设备上线', 'The device goes online'); +INSERT INTO `sys_dict_data_translate` VALUES (563, '设备离线', 'The device is offline'); +INSERT INTO `sys_dict_data_translate` VALUES (564, '数据流', 'data stream'); +INSERT INTO `sys_dict_data_translate` VALUES (565, '触发器', 'trigger'); +INSERT INTO `sys_dict_data_translate` VALUES (566, '执行动作', 'Perform the action'); +INSERT INTO `sys_dict_data_translate` VALUES (567, '消息重发', 'The message is retransmitted'); +INSERT INTO `sys_dict_data_translate` VALUES (568, '消息通知', 'Message notifications'); +INSERT INTO `sys_dict_data_translate` VALUES (569, 'Http推送', 'HTTP push'); +INSERT INTO `sys_dict_data_translate` VALUES (570, 'Mqtt桥接', 'MQTT bridging'); +INSERT INTO `sys_dict_data_translate` VALUES (571, '数据库存储', 'Database storage'); +INSERT INTO `sys_dict_data_translate` VALUES (572, '腾讯云', 'Tencent Cloud'); +INSERT INTO `sys_dict_data_translate` VALUES (573, '天翼云', 'Wing clouds'); +INSERT INTO `sys_dict_data_translate` VALUES (574, '华为云', 'HUAWEI CLOUD'); +INSERT INTO `sys_dict_data_translate` VALUES (575, '云片', 'Cloud sheets'); +INSERT INTO `sys_dict_data_translate` VALUES (576, '亿美软通', 'Yimei SoftStone'); +INSERT INTO `sys_dict_data_translate` VALUES (577, '容连云', 'Rong Lianyun'); +INSERT INTO `sys_dict_data_translate` VALUES (578, '京东云', 'JD Cloud'); +INSERT INTO `sys_dict_data_translate` VALUES (579, '网易云', 'NetEase Cloud'); +INSERT INTO `sys_dict_data_translate` VALUES (580, '微信小程序(订阅消息)', 'WeChat Mini Program (Subscribe to Messages) '); +INSERT INTO `sys_dict_data_translate` VALUES (581, '163', '163'); +INSERT INTO `sys_dict_data_translate` VALUES (582, '阿里云', 'Alibaba Cloud'); +INSERT INTO `sys_dict_data_translate` VALUES (583, '工作通知', 'Job Notices'); +INSERT INTO `sys_dict_data_translate` VALUES (584, '群机器人', 'Swarm bots'); +INSERT INTO `sys_dict_data_translate` VALUES (585, '营销通知', 'Marketing Notifications'); +INSERT INTO `sys_dict_data_translate` VALUES (586, '腾讯云', 'Tencent Cloud'); +INSERT INTO `sys_dict_data_translate` VALUES (587, '文本', 'text'); +INSERT INTO `sys_dict_data_translate` VALUES (588, 'markdown类型', 'Markdown type'); +INSERT INTO `sys_dict_data_translate` VALUES (589, '链接消息', 'Link messages'); +INSERT INTO `sys_dict_data_translate` VALUES (590, '企业微信应用消息', 'WeCom app messages'); +INSERT INTO `sys_dict_data_translate` VALUES (591, '企业微信群机器人', 'Enterprise WeChat group robot'); +INSERT INTO `sys_dict_data_translate` VALUES (592, '文本', 'text'); +INSERT INTO `sys_dict_data_translate` VALUES (593, 'markdown', 'markdown'); +INSERT INTO `sys_dict_data_translate` VALUES (595, '图文', 'Graphic'); +INSERT INTO `sys_dict_data_translate` VALUES (596, '厂商', 'Manufacturers'); +INSERT INTO `sys_dict_data_translate` VALUES (597, '生产厂商', 'Manufacturer'); +INSERT INTO `sys_dict_data_translate` VALUES (598, '经销商', 'dealer'); +INSERT INTO `sys_dict_data_translate` VALUES (599, '服务商', 'Service'); +INSERT INTO `sys_dict_data_translate` VALUES (600, '微信开放平台公众号', 'WeChat open platform public account'); +INSERT INTO `sys_dict_data_translate` VALUES (601, '微信公众号', 'WeChat public account'); +INSERT INTO `sys_dict_data_translate` VALUES (602, '网关子设备', 'Gateway sub-device'); +INSERT INTO `sys_dict_data_translate` VALUES (603, 'WIFI', 'WIFI'); +INSERT INTO `sys_dict_data_translate` VALUES (604, '以太网', 'Ethernet'); +INSERT INTO `sys_dict_data_translate` VALUES (605, 'RS485', 'RS485'); +INSERT INTO `sys_dict_data_translate` VALUES (606, 'RS232', 'RS232'); +INSERT INTO `sys_dict_data_translate` VALUES (607, 'LoRa', 'LoRa'); +INSERT INTO `sys_dict_data_translate` VALUES (608, 'ZigBee', 'ZigBee'); +INSERT INTO `sys_dict_data_translate` VALUES (609, 'NB-IoT', 'NB-IoT'); +INSERT INTO `sys_dict_data_translate` VALUES (610, '原值', 'Original value'); +INSERT INTO `sys_dict_data_translate` VALUES (611, '累计值', 'Cumulative'); +INSERT INTO `sys_dict_data_translate` VALUES (612, '平均值', 'average value'); +INSERT INTO `sys_dict_data_translate` VALUES (613, '最大值', 'maximum'); +INSERT INTO `sys_dict_data_translate` VALUES (614, '最小值', 'minimum'); +INSERT INTO `sys_dict_data_translate` VALUES (615, '1分钟', '1 minute'); +INSERT INTO `sys_dict_data_translate` VALUES (616, '3分钟', '3 minutes'); +INSERT INTO `sys_dict_data_translate` VALUES (617, '5分钟', '5 minutes'); +INSERT INTO `sys_dict_data_translate` VALUES (618, '10分钟', '10 minutes'); +INSERT INTO `sys_dict_data_translate` VALUES (619, '15分钟', '15 minutes'); +INSERT INTO `sys_dict_data_translate` VALUES (620, '20分钟', '20 minutes'); +INSERT INTO `sys_dict_data_translate` VALUES (621, '30分钟', '30 minutes'); +INSERT INTO `sys_dict_data_translate` VALUES (622, '5小时', '5 hours'); +INSERT INTO `sys_dict_data_translate` VALUES (623, '时', 'time'); +INSERT INTO `sys_dict_data_translate` VALUES (624, '日', 'day'); +INSERT INTO `sys_dict_data_translate` VALUES (625, '周', 'week'); +INSERT INTO `sys_dict_data_translate` VALUES (626, '月', 'month'); +INSERT INTO `sys_dict_data_translate` VALUES (627, '00时', '00 hours'); +INSERT INTO `sys_dict_data_translate` VALUES (628, '01时', '01 hour'); +INSERT INTO `sys_dict_data_translate` VALUES (629, '02时', '02 hours'); +INSERT INTO `sys_dict_data_translate` VALUES (630, '03时', '03 hours'); +INSERT INTO `sys_dict_data_translate` VALUES (631, '04时', '04 hours'); +INSERT INTO `sys_dict_data_translate` VALUES (632, '05时', '05 hours'); +INSERT INTO `sys_dict_data_translate` VALUES (633, '06时', '06 hours'); +INSERT INTO `sys_dict_data_translate` VALUES (634, '07时', '07 hours'); +INSERT INTO `sys_dict_data_translate` VALUES (635, '08时', '08 hours'); +INSERT INTO `sys_dict_data_translate` VALUES (636, '09时', '09 hours'); +INSERT INTO `sys_dict_data_translate` VALUES (637, '10时', '10 o\'clock'); +INSERT INTO `sys_dict_data_translate` VALUES (638, '11时', '11 o\'clock'); +INSERT INTO `sys_dict_data_translate` VALUES (639, '12时', '12 o\'clock'); +INSERT INTO `sys_dict_data_translate` VALUES (640, '13时', '13 o\'clock'); +INSERT INTO `sys_dict_data_translate` VALUES (641, '14时', '14 o\'clock'); +INSERT INTO `sys_dict_data_translate` VALUES (642, '15时', '15 o\'clock'); +INSERT INTO `sys_dict_data_translate` VALUES (643, '16时', '16 o\'clock'); +INSERT INTO `sys_dict_data_translate` VALUES (644, '17时', '17 o\'clock'); +INSERT INTO `sys_dict_data_translate` VALUES (645, '18时', '18 o\'clock'); +INSERT INTO `sys_dict_data_translate` VALUES (646, '19时', '19 o\'clock'); +INSERT INTO `sys_dict_data_translate` VALUES (647, '20时', '20 o\'clock'); +INSERT INTO `sys_dict_data_translate` VALUES (648, '21时', '21 o\'clock'); +INSERT INTO `sys_dict_data_translate` VALUES (649, '22时', '22 o\'clock'); +INSERT INTO `sys_dict_data_translate` VALUES (650, '23时', '23 o\'clock'); +INSERT INTO `sys_dict_data_translate` VALUES (651, '周一', 'Monday'); +INSERT INTO `sys_dict_data_translate` VALUES (652, '周二', 'Tuesday'); +INSERT INTO `sys_dict_data_translate` VALUES (653, '周三', 'Wednesday'); +INSERT INTO `sys_dict_data_translate` VALUES (654, '周四', 'Thursday'); +INSERT INTO `sys_dict_data_translate` VALUES (655, '周五', 'Friday'); +INSERT INTO `sys_dict_data_translate` VALUES (656, '周六', 'Saturday'); +INSERT INTO `sys_dict_data_translate` VALUES (657, '周日', 'Sunday'); +INSERT INTO `sys_dict_data_translate` VALUES (658, '1日', '1 day'); +INSERT INTO `sys_dict_data_translate` VALUES (659, '2日', '2nd'); +INSERT INTO `sys_dict_data_translate` VALUES (660, '3日', '3rd'); +INSERT INTO `sys_dict_data_translate` VALUES (661, '4日', '4th'); +INSERT INTO `sys_dict_data_translate` VALUES (662, '5日', '5th'); +INSERT INTO `sys_dict_data_translate` VALUES (663, '6日', '6th'); +INSERT INTO `sys_dict_data_translate` VALUES (664, '7日', '7th'); +INSERT INTO `sys_dict_data_translate` VALUES (665, '8日', '8th'); +INSERT INTO `sys_dict_data_translate` VALUES (666, '9日', '9th'); +INSERT INTO `sys_dict_data_translate` VALUES (667, '10日', '10th'); +INSERT INTO `sys_dict_data_translate` VALUES (668, '11日', '11th'); +INSERT INTO `sys_dict_data_translate` VALUES (669, '12日', '12th'); +INSERT INTO `sys_dict_data_translate` VALUES (670, '13日', '13th'); +INSERT INTO `sys_dict_data_translate` VALUES (671, '14日', '14th'); +INSERT INTO `sys_dict_data_translate` VALUES (672, '15日', '15th'); +INSERT INTO `sys_dict_data_translate` VALUES (673, '16日', '16th'); +INSERT INTO `sys_dict_data_translate` VALUES (674, '17日', '17th'); +INSERT INTO `sys_dict_data_translate` VALUES (675, '18日', '18th'); +INSERT INTO `sys_dict_data_translate` VALUES (676, '19日', '19th'); +INSERT INTO `sys_dict_data_translate` VALUES (677, '20日', '20th'); +INSERT INTO `sys_dict_data_translate` VALUES (678, '21日', '21st'); +INSERT INTO `sys_dict_data_translate` VALUES (679, '22日', '22nd'); +INSERT INTO `sys_dict_data_translate` VALUES (680, '23日', '23rd'); +INSERT INTO `sys_dict_data_translate` VALUES (681, '24日', '24th'); +INSERT INTO `sys_dict_data_translate` VALUES (682, '25日', '25th'); +INSERT INTO `sys_dict_data_translate` VALUES (683, '26日', '26th'); +INSERT INTO `sys_dict_data_translate` VALUES (684, '25日', '25th'); +INSERT INTO `sys_dict_data_translate` VALUES (685, '27日', '27th'); +INSERT INTO `sys_dict_data_translate` VALUES (686, '28日', '28th'); +INSERT INTO `sys_dict_data_translate` VALUES (687, '29日', '29th'); +INSERT INTO `sys_dict_data_translate` VALUES (688, '30日', '30th'); +INSERT INTO `sys_dict_data_translate` VALUES (689, '31日', '31st'); +INSERT INTO `sys_dict_data_translate` VALUES (690, '设备数据', 'Device Data'); +INSERT INTO `sys_dict_data_translate` VALUES (691, '网关', 'gateway'); +INSERT INTO `sys_dict_data_translate` VALUES (692, '10分钟', '10 minutes'); +INSERT INTO `sys_dict_data_translate` VALUES (693, 'http接入', 'HTTP access'); +INSERT INTO `sys_dict_data_translate` VALUES (694, 'mqtt接入', 'MQTT access'); +INSERT INTO `sys_dict_data_translate` VALUES (695, '失败', 'fail'); +INSERT INTO `sys_dict_data_translate` VALUES (696, '成功', 'success'); +INSERT INTO `sys_dict_data_translate` VALUES (697, '折线图', NULL); +INSERT INTO `sys_dict_data_translate` VALUES (698, '柱状图', NULL); +INSERT INTO `sys_dict_data_translate` VALUES (699, '饼图', NULL); +INSERT INTO `sys_dict_data_translate` VALUES (700, '散点图', NULL); +INSERT INTO `sys_dict_data_translate` VALUES (701, 'K线图', NULL); +INSERT INTO `sys_dict_data_translate` VALUES (702, '雷达图', NULL); +INSERT INTO `sys_dict_data_translate` VALUES (703, '盒须图', NULL); +INSERT INTO `sys_dict_data_translate` VALUES (704, '热力图', NULL); +INSERT INTO `sys_dict_data_translate` VALUES (705, '关系图', NULL); +INSERT INTO `sys_dict_data_translate` VALUES (706, '水球图', NULL); +INSERT INTO `sys_dict_data_translate` VALUES (707, '树图', NULL); +INSERT INTO `sys_dict_data_translate` VALUES (708, '矩形树图', NULL); +INSERT INTO `sys_dict_data_translate` VALUES (709, '旭日图', NULL); +INSERT INTO `sys_dict_data_translate` VALUES (710, '平行坐标系', NULL); +INSERT INTO `sys_dict_data_translate` VALUES (711, '桑葚图', NULL); +INSERT INTO `sys_dict_data_translate` VALUES (712, '漏斗图', NULL); +INSERT INTO `sys_dict_data_translate` VALUES (713, '仪表图', NULL); +INSERT INTO `sys_dict_data_translate` VALUES (714, '象形柱图', NULL); +INSERT INTO `sys_dict_data_translate` VALUES (715, '主题河流', NULL); +INSERT INTO `sys_dict_data_translate` VALUES (716, '路径图', NULL); +INSERT INTO `sys_dict_data_translate` VALUES (717, '3D柱图', NULL); +INSERT INTO `sys_dict_data_translate` VALUES (718, '3D地图', NULL); +INSERT INTO `sys_dict_data_translate` VALUES (719, '词云图', NULL); +INSERT INTO `sys_dict_data_translate` VALUES (720, '其他图表', NULL); +INSERT INTO `sys_dict_data_translate` VALUES (721, '按钮', NULL); +INSERT INTO `sys_dict_data_translate` VALUES (722, '指示灯', NULL); +INSERT INTO `sys_dict_data_translate` VALUES (723, '工业泵', NULL); +INSERT INTO `sys_dict_data_translate` VALUES (724, '储蓄罐', NULL); +INSERT INTO `sys_dict_data_translate` VALUES (725, '电机', NULL); +INSERT INTO `sys_dict_data_translate` VALUES (726, '电力符号', NULL); +INSERT INTO `sys_dict_data_translate` VALUES (727, '阀门', NULL); +INSERT INTO `sys_dict_data_translate` VALUES (728, '反应器', NULL); +INSERT INTO `sys_dict_data_translate` VALUES (729, '风机', NULL); +INSERT INTO `sys_dict_data_translate` VALUES (730, '管道', NULL); +INSERT INTO `sys_dict_data_translate` VALUES (731, '建筑物', NULL); +INSERT INTO `sys_dict_data_translate` VALUES (732, '锅炉', NULL); +INSERT INTO `sys_dict_data_translate` VALUES (733, '换热站', NULL); +INSERT INTO `sys_dict_data_translate` VALUES (734, '机械设备', NULL); +INSERT INTO `sys_dict_data_translate` VALUES (735, '交通', NULL); +INSERT INTO `sys_dict_data_translate` VALUES (736, '警示与标志', NULL); +INSERT INTO `sys_dict_data_translate` VALUES (737, '卡片', NULL); +INSERT INTO `sys_dict_data_translate` VALUES (738, '空调系统', NULL); +INSERT INTO `sys_dict_data_translate` VALUES (739, '流体符号', NULL); +INSERT INTO `sys_dict_data_translate` VALUES (740, '背景模版', NULL); +INSERT INTO `sys_dict_data_translate` VALUES (741, '人物', NULL); +INSERT INTO `sys_dict_data_translate` VALUES (742, '天气', NULL); +INSERT INTO `sys_dict_data_translate` VALUES (743, '物料运输', NULL); +INSERT INTO `sys_dict_data_translate` VALUES (744, '仪表', NULL); +INSERT INTO `sys_dict_data_translate` VALUES (745, '装饰', NULL); +INSERT INTO `sys_dict_data_translate` VALUES (746, '自然', NULL); +INSERT INTO `sys_dict_data_translate` VALUES (747, '全景', NULL); +INSERT INTO `sys_dict_data_translate` VALUES (748, '3D图画', NULL); +INSERT INTO `sys_dict_data_translate` VALUES (749, '960×600', NULL); +INSERT INTO `sys_dict_data_translate` VALUES (750, '1024×768', NULL); +INSERT INTO `sys_dict_data_translate` VALUES (751, '1280×1024', NULL); +INSERT INTO `sys_dict_data_translate` VALUES (752, '1366×768', NULL); +INSERT INTO `sys_dict_data_translate` VALUES (753, '1440×900', NULL); +INSERT INTO `sys_dict_data_translate` VALUES (754, '1920×960', NULL); +INSERT INTO `sys_dict_data_translate` VALUES (755, '1920×1080', NULL); +INSERT INTO `sys_dict_data_translate` VALUES (756, '2048×858', NULL); +INSERT INTO `sys_dict_data_translate` VALUES (757, '2048×1080', NULL); +INSERT INTO `sys_dict_data_translate` VALUES (758, '3840×2160', NULL); +INSERT INTO `sys_dict_data_translate` VALUES (759, '3656×2664', NULL); +INSERT INTO `sys_dict_data_translate` VALUES (760, '4096×3112', NULL); + +-- ---------------------------- +-- Table structure for sys_dict_type +-- ---------------------------- +DROP TABLE IF EXISTS `sys_dict_type`; +CREATE TABLE `sys_dict_type` ( + `dict_id` bigint NOT NULL AUTO_INCREMENT COMMENT '字典主键', + `dict_name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '字典名称', + `dict_type` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '字典类型', + `status` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '0' COMMENT '状态(0正常 1停用)', + `create_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '创建者', + `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间', + `update_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '更新者', + `update_time` datetime NULL DEFAULT NULL COMMENT '更新时间', + `remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '备注', + PRIMARY KEY (`dict_id`) USING BTREE, + UNIQUE INDEX `dict_type`(`dict_type`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 169 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '字典类型表' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of sys_dict_type +-- ---------------------------- +INSERT INTO `sys_dict_type` VALUES (1, '用户性别', 'sys_user_sex', '0', 'admin', '2021-12-15 21:36:18', '', NULL, '用户性别列表'); +INSERT INTO `sys_dict_type` VALUES (2, '菜单状态', 'sys_show_hide', '0', 'admin', '2021-12-15 21:36:18', '', NULL, '菜单状态列表'); +INSERT INTO `sys_dict_type` VALUES (3, '系统开关', 'sys_normal_disable', '0', 'admin', '2021-12-15 21:36:18', '', NULL, '系统开关列表'); +INSERT INTO `sys_dict_type` VALUES (4, '任务状态', 'sys_job_status', '0', 'admin', '2021-12-15 21:36:18', '', NULL, '任务状态列表'); +INSERT INTO `sys_dict_type` VALUES (5, '任务分组', 'sys_job_group', '0', 'admin', '2021-12-15 21:36:18', '', NULL, '任务分组列表'); +INSERT INTO `sys_dict_type` VALUES (6, '系统是否', 'sys_yes_no', '0', 'admin', '2021-12-15 21:36:18', '', NULL, '系统是否列表'); +INSERT INTO `sys_dict_type` VALUES (7, '通知类型', 'sys_notice_type', '0', 'admin', '2021-12-15 21:36:18', '', NULL, '通知类型列表'); +INSERT INTO `sys_dict_type` VALUES (8, '通知状态', 'sys_notice_status', '0', 'admin', '2021-12-15 21:36:18', '', NULL, '通知状态列表'); +INSERT INTO `sys_dict_type` VALUES (9, '操作类型', 'sys_oper_type', '0', 'admin', '2021-12-15 21:36:18', '', NULL, '操作类型列表'); +INSERT INTO `sys_dict_type` VALUES (10, '系统状态', 'sys_common_status', '0', 'admin', '2021-12-15 21:36:18', '', NULL, '登录状态列表'); +INSERT INTO `sys_dict_type` VALUES (100, '物模型类别', 'iot_things_type', '0', 'admin', '2021-12-12 16:39:47', 'admin', '2021-12-15 22:49:19', '属性、动作、事件'); +INSERT INTO `sys_dict_type` VALUES (101, '数据类型', 'iot_data_type', '0', 'admin', '2021-12-12 20:16:48', 'admin', '2021-12-12 20:17:54', 'integer、decimal、bool、string、enum'); +INSERT INTO `sys_dict_type` VALUES (102, '是否', 'iot_yes_no', '0', 'admin', '2021-12-12 20:24:51', 'admin', '2021-12-19 15:12:35', '是、否'); +INSERT INTO `sys_dict_type` VALUES (103, '产品状态', 'iot_product_status', '0', 'admin', '2021-12-19 15:00:13', '', NULL, '未发布、已发布(不能修改)'); +INSERT INTO `sys_dict_type` VALUES (104, '设备类型', 'iot_device_type', '0', 'admin', '2021-12-19 15:03:06', '', NULL, '直连设备、网关子设备、网关设备'); +INSERT INTO `sys_dict_type` VALUES (105, '联网方式', 'iot_network_method', '0', 'admin', '2021-12-19 15:07:12', 'admin', '2022-01-14 02:11:58', 'wifi、蜂窝(2G/3G/4G/5G)、以太网、其他'); +INSERT INTO `sys_dict_type` VALUES (106, '认证方式', 'iot_vertificate_method', '0', 'admin', '2021-12-19 15:11:48', 'admin', '2022-06-05 12:57:02', '1=简单认证、2=加密认证、3=简单+加密'); +INSERT INTO `sys_dict_type` VALUES (107, '设备芯片', 'iot_device_chip', '0', 'admin', '2021-12-24 15:53:27', 'admin', '2022-01-22 00:14:23', 'ESP8266、ESP32、树莓派'); +INSERT INTO `sys_dict_type` VALUES (109, '设备状态', 'iot_device_status', '0', 'admin', '2021-12-27 22:19:55', 'admin', '2021-12-27 22:20:13', '未激活、禁用、在线、离线'); +INSERT INTO `sys_dict_type` VALUES (110, '是否启用', 'iot_is_enable', '0', 'admin', '2022-01-12 23:24:01', 'admin', '2022-01-12 23:24:15', '启用、禁用'); +INSERT INTO `sys_dict_type` VALUES (111, '告警类型', 'iot_alert_level', '0', 'admin', '2022-01-13 14:56:44', 'admin', '2022-01-13 15:04:46', '1=提醒通知,2=轻微问题,3=严重警告'); +INSERT INTO `sys_dict_type` VALUES (112, '处理状态', 'iot_process_status', '0', 'admin', '2022-01-13 15:04:06', 'admin', '2022-01-13 15:06:39', '1=不需要处理,2=未处理,3=已处理'); +INSERT INTO `sys_dict_type` VALUES (113, '设备日志类型', 'iot_device_log_type', '0', 'admin', '2022-01-13 15:09:49', 'admin', '2022-03-13 00:22:43', '1=属性上报,2=调用功能,3=事件上报,4=设备升级,5=设备上线,6=设备离线'); +INSERT INTO `sys_dict_type` VALUES (114, 'Oauth开放平台', 'oauth_platform', '0', 'admin', '2022-02-07 20:27:48', 'admin', '2022-05-21 13:44:50', '1=小度,2=天猫精灵,3=小爱,4=其他'); +INSERT INTO `sys_dict_type` VALUES (115, '第三方登录平台', 'iot_social_platform', '0', 'admin', '2022-04-12 15:28:13', 'admin', '2022-04-12 15:37:48', 'Wechat、QQ、'); +INSERT INTO `sys_dict_type` VALUES (116, '第三方登录平台状态', 'iot_social_platform_status', '0', 'admin', '2022-04-20 17:02:13', 'admin', '2022-04-20 17:02:23', '第三方登录平台状态'); +INSERT INTO `sys_dict_type` VALUES (117, '设备定位方式', 'iot_location_way', '0', 'admin', '2022-05-21 13:45:16', 'admin', '2022-05-21 13:46:06', '1=IP自动定位,2=设备定位,3=自定义'); +INSERT INTO `sys_dict_type` VALUES (118, '授权码状态', 'iot_auth_status', '0', 'admin', '2022-06-07 17:38:56', '', NULL, '1=未分配,2=使用中'); +INSERT INTO `sys_dict_type` VALUES (119, 'SipID状态', 'sip_gen_status', '0', 'admin', '2023-02-19 15:43:36', 'admin', '2023-02-19 15:45:54', '1=未使用,2=使用中'); +INSERT INTO `sys_dict_type` VALUES (120, '监控设备类型', 'video_type', '0', 'admin', '2023-02-22 01:06:38', '', NULL, NULL); +INSERT INTO `sys_dict_type` VALUES (121, '通道类型', 'channel_type', '0', 'admin', '2023-02-22 01:11:51', '', NULL, NULL); +INSERT INTO `sys_dict_type` VALUES (122, '轮询方式', 'data_collect_type', '0', 'admin', '2023-02-28 13:55:45', '', NULL, NULL); +INSERT INTO `sys_dict_type` VALUES (123, '批量采集时间', 'iot_modbus_poll_time', '0', 'admin', '2023-02-28 14:38:21', '', NULL, NULL); +INSERT INTO `sys_dict_type` VALUES (124, '寄存器功能码', 'iot_modbus_status_code', '0', 'admin', '2023-02-28 15:19:02', '', NULL, NULL); +INSERT INTO `sys_dict_type` VALUES (125, '传输协议类型', 'iot_transport_type', '0', 'admin', '2023-02-28 16:35:20', '', NULL, NULL); +INSERT INTO `sys_dict_type` VALUES (126, '设备事件类型', 'iot_event_type', '0', 'admin', '2023-03-29 00:24:51', '', NULL, NULL); +INSERT INTO `sys_dict_type` VALUES (127, '指令下发类型', 'iot_function_type', '0', 'admin', '2023-03-29 00:37:51', '', NULL, NULL); +INSERT INTO `sys_dict_type` VALUES (128, '读写类型', 'iot_data_read_write', '0', 'admin', '2023-04-09 02:11:14', '', NULL, NULL); +INSERT INTO `sys_dict_type` VALUES (129, '升级范围', 'oat_update_limit', '0', 'admin', '2023-04-09 23:51:45', '', NULL, NULL); +INSERT INTO `sys_dict_type` VALUES (130, '云存储平台类型', 'oss_platform_type', '0', 'admin', '2023-04-12 00:26:09', '', NULL, NULL); +INSERT INTO `sys_dict_type` VALUES (131, 'modbus数据类型', 'iot_modbus_data_type', '0', 'admin', '2023-09-04 13:54:17', '', NULL, NULL); +INSERT INTO `sys_dict_type` VALUES (132, '小度音箱关联设备', 'dueros_related_device', '0', 'admin', '2023-09-22 09:45:15', 'admin', '2023-09-22 09:45:15', '小度音箱支持的设备、场景类型,在设备下配置关联'); +INSERT INTO `sys_dict_type` VALUES (133, '小度音箱操作类型', 'dueros_actions', '0', 'admin', '2023-09-22 09:45:15', 'admin', '2023-09-22 09:45:15', '小度音箱智能家居设备操作类型,在产品物模型下配置'); +INSERT INTO `sys_dict_type` VALUES (134, '小度音箱设备属性', 'dueros_attributes', '0', 'admin', '2023-09-22 09:45:15', 'admin', '2023-09-22 09:45:15', '物模型对应小度音箱智能家居关联设备属性,在产品物模型下配置'); +INSERT INTO `sys_dict_type` VALUES (140, '规则脚本类型', 'rule_script_type', '0', 'admin', '2023-11-04 01:48:50', 'admin', '2023-11-04 01:50:16', NULL); +INSERT INTO `sys_dict_type` VALUES (141, '规则脚本语言', 'rule_script_language', '0', 'admin', '2023-11-04 01:50:06', '', NULL, NULL); +INSERT INTO `sys_dict_type` VALUES (143, 'Oauth授权模式', 'oauth_authorization_model', '0', 'admin', '2023-11-27 14:21:39', '', NULL, NULL); +INSERT INTO `sys_dict_type` VALUES (144, '通知渠道类型', 'notify_channel_type', '0', 'admin', '2023-11-30 09:45:15', 'admin', '2023-11-30 09:45:15', '通知渠道'); +INSERT INTO `sys_dict_type` VALUES (145, '通知短信服务商', 'notify_channel_sms_provider', '0', 'admin', '2023-11-30 09:45:15', 'admin', '2023-11-30 09:45:15', '短信服务商'); +INSERT INTO `sys_dict_type` VALUES (146, '通知邮箱服务商', 'notify_channel_email_provider', '0', 'admin', '2023-11-30 09:45:15', 'admin', '2023-11-30 09:45:15', '邮箱服务商'); +INSERT INTO `sys_dict_type` VALUES (148, '通知业务编码', 'notify_service_code', '0', 'admin', '2023-12-18 14:56:57', '', NULL, NULL); +INSERT INTO `sys_dict_type` VALUES (149, '规则脚本事件', 'rule_script_event', '0', 'admin', '2023-12-19 11:33:48', '', NULL, '1=设备上报,2=平台下发,3=设备上线,4=设备离线'); +INSERT INTO `sys_dict_type` VALUES (150, '规则脚本用途', 'rule_script_purpose', '0', 'admin', '2023-12-19 11:38:18', '', NULL, '1=数据流,2=触发器,3=执行动作'); +INSERT INTO `sys_dict_type` VALUES (151, '规则脚本动作', 'rule_script_action', '0', 'admin', '2023-12-19 11:39:58', '', NULL, '1=消息重发,2=消息通知,3=Http推送,4=Mqtt桥接,5=数据库存储'); +INSERT INTO `sys_dict_type` VALUES (152, '通知微信服务商', 'notify_channel_wechat_provider', '0', 'admin', '2023-12-21 10:37:25', '', NULL, NULL); +INSERT INTO `sys_dict_type` VALUES (153, '通知语音服务商', 'notify_channel_voice_provider', '0', 'admin', '2023-12-27 14:58:23', '', NULL, NULL); +INSERT INTO `sys_dict_type` VALUES (154, '通知钉钉服务商', 'notify_channel_dingtalk_provider', '0', 'admin', '2024-01-10 15:27:28', '', NULL, NULL); +INSERT INTO `sys_dict_type` VALUES (155, '通知钉钉消息类型', 'dingtalk_msg_type', '0', 'admin', '2024-01-22 11:41:26', 'admin', '2024-01-22 11:44:20', NULL); +INSERT INTO `sys_dict_type` VALUES (156, '通知企业微信消息类型', 'wecom_msg_type', '0', 'admin', '2024-01-22 11:49:03', 'admin', '2024-01-22 11:51:27', NULL); +INSERT INTO `sys_dict_type` VALUES (157, '机构类型', 'department_type', '0', 'admin', '2024-02-29 11:38:14', '', NULL, NULL); +INSERT INTO `sys_dict_type` VALUES (158, '网关子设备通讯方式', 'sub_gateway_type', '0', 'admin', '2024-05-28 11:31:00', '', NULL, NULL); +INSERT INTO `sys_dict_type` VALUES (159, '变量统计方式', 'variable_operation_type', '0', 'admin', '2024-05-29 14:39:14', '', NULL, NULL); +INSERT INTO `sys_dict_type` VALUES (160, '时间周期间隔', 'variable_operation_interval', '0', 'admin', '2024-05-29 14:58:33', '', NULL, NULL); +INSERT INTO `sys_dict_type` VALUES (161, '时间周期时间', 'variable_operation_time', '0', 'admin', '2024-05-29 15:23:45', '', NULL, NULL); +INSERT INTO `sys_dict_type` VALUES (162, '时间周期周', 'variable_operation_week', '0', 'admin', '2024-05-29 15:40:33', '', NULL, NULL); +INSERT INTO `sys_dict_type` VALUES (163, '时间周期日', 'variable_operation_day', '0', 'admin', '2024-05-29 15:49:03', '', NULL, NULL); +INSERT INTO `sys_dict_type` VALUES (164, '设备状态判断方式', 'device_status_deter', '0', 'admin', '2024-05-30 20:11:43', '', NULL, '用于网关子设备的状态判断'); +INSERT INTO `sys_dict_type` VALUES (165, '公共状态', 'common_status_type', '0', 'admin', '2024-07-18 17:48:28', '', NULL, NULL); +INSERT INTO `sys_dict_type` VALUES (166, '组态图表类型', 'scada_echart_type', '0', 'admin', '2023-11-09 17:47:44', '', NULL, NULL); +INSERT INTO `sys_dict_type` VALUES (167, '组态图库类型', 'scada_gallery_type', '0', 'admin', '2023-11-09 17:50:09', '', NULL, NULL); +INSERT INTO `sys_dict_type` VALUES (168, '页面大小', 'sys_page_size', '0', 'admin', '2023-11-09 17:50:09', '', NULL, NULL); + +-- ---------------------------- +-- Table structure for sys_dict_type_translate +-- ---------------------------- +DROP TABLE IF EXISTS `sys_dict_type_translate`; +CREATE TABLE `sys_dict_type_translate` ( + `id` bigint NOT NULL COMMENT 'ID', + `zh_cn` varchar(200) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT NULL COMMENT 'zh_CN', + `en_us` varchar(200) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT NULL COMMENT 'en_US', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb3 COLLATE = utf8mb3_general_ci COMMENT = '字典类型翻译表' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of sys_dict_type_translate +-- ---------------------------- +INSERT INTO `sys_dict_type_translate` VALUES (1, '用户性别', 'User gender'); +INSERT INTO `sys_dict_type_translate` VALUES (2, '菜单状态', 'Menu status'); +INSERT INTO `sys_dict_type_translate` VALUES (3, '系统开关', 'System switches'); +INSERT INTO `sys_dict_type_translate` VALUES (4, '任务状态', 'Task status'); +INSERT INTO `sys_dict_type_translate` VALUES (5, '任务分组', 'Task grouping'); +INSERT INTO `sys_dict_type_translate` VALUES (6, '系统是否', 'Whether the system is'); +INSERT INTO `sys_dict_type_translate` VALUES (7, '通知类型', 'Notification type'); +INSERT INTO `sys_dict_type_translate` VALUES (8, '通知状态', 'Notification status'); +INSERT INTO `sys_dict_type_translate` VALUES (9, '操作类型', 'The type of operation'); +INSERT INTO `sys_dict_type_translate` VALUES (10, '系统状态', 'System status'); +INSERT INTO `sys_dict_type_translate` VALUES (100, '物模型类别', 'TSL model category'); +INSERT INTO `sys_dict_type_translate` VALUES (101, '数据类型', 'data type'); +INSERT INTO `sys_dict_type_translate` VALUES (102, '是否', 'Whether'); +INSERT INTO `sys_dict_type_translate` VALUES (103, '产品状态', 'Product status'); +INSERT INTO `sys_dict_type_translate` VALUES (104, '设备类型', 'Device type'); +INSERT INTO `sys_dict_type_translate` VALUES (105, '联网方式', 'Networking'); +INSERT INTO `sys_dict_type_translate` VALUES (106, '认证方式', 'Authentication method'); +INSERT INTO `sys_dict_type_translate` VALUES (107, '设备芯片', 'Device chips'); +INSERT INTO `sys_dict_type_translate` VALUES (109, '设备状态', 'Device status'); +INSERT INTO `sys_dict_type_translate` VALUES (110, '是否启用', 'Whether it is enabled'); +INSERT INTO `sys_dict_type_translate` VALUES (111, '告警类型', 'Alarm type'); +INSERT INTO `sys_dict_type_translate` VALUES (112, '处理状态', 'Processing status'); +INSERT INTO `sys_dict_type_translate` VALUES (113, '设备日志类型', 'Device log type'); +INSERT INTO `sys_dict_type_translate` VALUES (114, 'Oauth开放平台', 'OAuth Open Platform'); +INSERT INTO `sys_dict_type_translate` VALUES (115, '第三方登录平台', 'Third-party login platform'); +INSERT INTO `sys_dict_type_translate` VALUES (116, '第三方登录平台状态', 'Third-party login platform status'); +INSERT INTO `sys_dict_type_translate` VALUES (117, '设备定位方式', 'How the device is located'); +INSERT INTO `sys_dict_type_translate` VALUES (118, '授权码状态', 'Authorization code status'); +INSERT INTO `sys_dict_type_translate` VALUES (119, 'SipID状态', 'SipID status'); +INSERT INTO `sys_dict_type_translate` VALUES (120, '监控设备类型', 'Monitor device types'); +INSERT INTO `sys_dict_type_translate` VALUES (121, '通道类型', 'Channel type'); +INSERT INTO `sys_dict_type_translate` VALUES (122, '轮询方式', 'Polling method'); +INSERT INTO `sys_dict_type_translate` VALUES (123, '批量采集时间', 'Batch collection time'); +INSERT INTO `sys_dict_type_translate` VALUES (124, '寄存器功能码', 'Register function code'); +INSERT INTO `sys_dict_type_translate` VALUES (125, '传输协议类型', 'The type of transport protocol'); +INSERT INTO `sys_dict_type_translate` VALUES (126, '设备事件类型', 'Device event type'); +INSERT INTO `sys_dict_type_translate` VALUES (127, '指令下发类型', 'The type of command delivery'); +INSERT INTO `sys_dict_type_translate` VALUES (128, '读写类型', 'Read and write type'); +INSERT INTO `sys_dict_type_translate` VALUES (129, '升级范围', 'Scope of upgrade'); +INSERT INTO `sys_dict_type_translate` VALUES (130, '云存储平台类型', 'The type of cloud storage platform'); +INSERT INTO `sys_dict_type_translate` VALUES (131, 'modbus数据类型', 'Modbus data type'); +INSERT INTO `sys_dict_type_translate` VALUES (132, '小度音箱关联设备', 'Small speakers are associated with devices'); +INSERT INTO `sys_dict_type_translate` VALUES (133, '小度音箱操作类型', 'Small speaker operation type'); +INSERT INTO `sys_dict_type_translate` VALUES (134, '小度音箱设备属性', 'Small speaker device attributes'); +INSERT INTO `sys_dict_type_translate` VALUES (135, '组态图表类型', 'Configure the chart type'); +INSERT INTO `sys_dict_type_translate` VALUES (136, '组态图库类型', 'Configure the library type'); +INSERT INTO `sys_dict_type_translate` VALUES (140, '规则脚本类型', 'The type of rule script'); +INSERT INTO `sys_dict_type_translate` VALUES (141, '规则脚本语言', 'Rule scripting language'); +INSERT INTO `sys_dict_type_translate` VALUES (142, '页面大小', 'Page size'); +INSERT INTO `sys_dict_type_translate` VALUES (143, 'Oauth授权模式', 'OAuth authorization model'); +INSERT INTO `sys_dict_type_translate` VALUES (144, '通知渠道类型', 'The type of notification channel'); +INSERT INTO `sys_dict_type_translate` VALUES (145, '通知短信服务商', 'Notify the SMS provider'); +INSERT INTO `sys_dict_type_translate` VALUES (146, '通知邮箱服务商', 'Notify your email service provider'); +INSERT INTO `sys_dict_type_translate` VALUES (148, '通知业务编码', 'Notification service code'); +INSERT INTO `sys_dict_type_translate` VALUES (149, '规则脚本事件', 'Rule script events'); +INSERT INTO `sys_dict_type_translate` VALUES (150, '规则脚本用途', 'Rule script usage'); +INSERT INTO `sys_dict_type_translate` VALUES (151, '规则脚本动作', 'Rule script actions'); +INSERT INTO `sys_dict_type_translate` VALUES (152, '通知微信服务商', 'Notify the WeChat service provider'); +INSERT INTO `sys_dict_type_translate` VALUES (153, '通知语音服务商', 'Notify the voice service provider'); +INSERT INTO `sys_dict_type_translate` VALUES (154, '通知钉钉服务商', 'Notify the DingTalk service provider'); +INSERT INTO `sys_dict_type_translate` VALUES (155, '通知钉钉消息类型', 'Notification DingTalk message type'); +INSERT INTO `sys_dict_type_translate` VALUES (156, '通知企业微信消息类型', 'Notify the WeCom message type'); +INSERT INTO `sys_dict_type_translate` VALUES (157, '机构类型', 'Type of institution'); +INSERT INTO `sys_dict_type_translate` VALUES (158, '网关子设备通讯方式', 'The communication mode of the gateway sub-device'); +INSERT INTO `sys_dict_type_translate` VALUES (159, '变量统计方式', 'How variables are counted'); +INSERT INTO `sys_dict_type_translate` VALUES (160, '时间周期间隔', 'Time period intervals'); +INSERT INTO `sys_dict_type_translate` VALUES (161, '时间周期时间', 'Time period time'); +INSERT INTO `sys_dict_type_translate` VALUES (162, '时间周期周', 'Time period week'); +INSERT INTO `sys_dict_type_translate` VALUES (163, '时间周期日', 'Time period day'); +INSERT INTO `sys_dict_type_translate` VALUES (164, '设备状态判断方式', 'How to determine the device status'); +INSERT INTO `sys_dict_type_translate` VALUES (165, '公共状态', 'Public status'); +INSERT INTO `sys_dict_type_translate` VALUES (166, '组态图表类型', 'scada_echart_type'); +INSERT INTO `sys_dict_type_translate` VALUES (167, '组态图库类型', 'scada_gallery_type'); +INSERT INTO `sys_dict_type_translate` VALUES (168, '页面大小', 'sys_page_size'); + +-- ---------------------------- +-- Table structure for sys_job +-- ---------------------------- +DROP TABLE IF EXISTS `sys_job`; +CREATE TABLE `sys_job` ( + `job_id` bigint NOT NULL AUTO_INCREMENT COMMENT '任务ID', + `job_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '任务名称', + `job_group` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT 'DEFAULT' COMMENT '任务组名', + `invoke_target` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '调用目标字符串', + `cron_expression` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT 'cron执行表达式', + `misfire_policy` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '3' COMMENT '计划执行错误策略(1立即执行 2执行一次 3放弃执行)', + `concurrent` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '1' COMMENT '是否并发执行(0允许 1禁止)', + `status` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '0' COMMENT '状态(0正常 1暂停)', + `create_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '创建者', + `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间', + `update_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '更新者', + `update_time` datetime NULL DEFAULT NULL COMMENT '更新时间', + `remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '备注信息', + PRIMARY KEY (`job_id`, `job_name`, `job_group`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 7 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '定时任务调度表' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of sys_job +-- ---------------------------- +INSERT INTO `sys_job` VALUES (5, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '0 0/1 * * * ? ', '1', '1', '0', 'admin', '2023-03-24 10:57:48', 'admin', '2024-07-20 10:00:32', ''); +INSERT INTO `sys_job` VALUES (6, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '0 0/2 * * * ?', '1', '0', '0', 'admin', '2023-04-14 16:18:54', 'admin', '2024-07-20 10:00:34', ''); + +-- ---------------------------- +-- Table structure for sys_job_log +-- ---------------------------- +DROP TABLE IF EXISTS `sys_job_log`; +CREATE TABLE `sys_job_log` ( + `job_log_id` bigint NOT NULL AUTO_INCREMENT COMMENT '任务日志ID', + `job_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '任务名称', + `job_group` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '任务组名', + `invoke_target` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '调用目标字符串', + `job_message` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '日志信息', + `status` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '0' COMMENT '执行状态(0正常 1失败)', + `exception_info` varchar(2000) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '异常信息', + `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间', + PRIMARY KEY (`job_log_id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 6778 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '定时任务调度日志表' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of sys_job_log +-- ---------------------------- +INSERT INTO `sys_job_log` VALUES (1, 'modbus云端轮询', 'SYSTEM', 'propGetServiceImpl.fetchProperty', 'modbus云端轮询 总共耗时:3毫秒', '0', '', '2024-02-07 15:32:00'); +INSERT INTO `sys_job_log` VALUES (2, 'modbus云端轮询', 'SYSTEM', 'propGetServiceImpl.fetchProperty', 'modbus云端轮询 总共耗时:44毫秒', '0', '', '2024-02-07 15:32:00'); +INSERT INTO `sys_job_log` VALUES (3, 'modbus云端轮询', 'SYSTEM', 'propGetServiceImpl.fetchProperty', 'modbus云端轮询 总共耗时:32毫秒', '0', '', '2024-02-07 15:32:00'); +INSERT INTO `sys_job_log` VALUES (4, 'modbus云端轮询', 'SYSTEM', 'propGetServiceImpl.fetchProperty', 'modbus云端轮询 总共耗时:15毫秒', '0', '', '2024-02-07 15:32:10'); +INSERT INTO `sys_job_log` VALUES (5, 'modbus云端轮询', 'SYSTEM', 'propGetServiceImpl.fetchProperty', 'modbus云端轮询 总共耗时:3毫秒', '0', '', '2024-02-07 15:33:00'); +INSERT INTO `sys_job_log` VALUES (6, 'modbus云端轮询', 'SYSTEM', 'propGetServiceImpl.fetchProperty', 'modbus云端轮询 总共耗时:44毫秒', '0', '', '2024-02-07 15:33:00'); +INSERT INTO `sys_job_log` VALUES (7, 'modbus云端轮询', 'SYSTEM', 'propGetServiceImpl.fetchProperty', 'modbus云端轮询 总共耗时:32毫秒', '0', '', '2024-02-07 15:33:00'); +INSERT INTO `sys_job_log` VALUES (8, 'modbus云端轮询', 'SYSTEM', 'propGetServiceImpl.fetchProperty', 'modbus云端轮询 总共耗时:14毫秒', '0', '', '2024-02-07 15:33:10'); +INSERT INTO `sys_job_log` VALUES (9, 'modbus云端轮询', 'SYSTEM', 'propGetServiceImpl.fetchProperty', 'modbus云端轮询 总共耗时:3毫秒', '0', '', '2024-02-07 15:34:00'); +INSERT INTO `sys_job_log` VALUES (10, 'modbus云端轮询', 'SYSTEM', 'propGetServiceImpl.fetchProperty', 'modbus云端轮询 总共耗时:44毫秒', '0', '', '2024-02-07 15:34:00'); +INSERT INTO `sys_job_log` VALUES (11, 'modbus云端轮询', 'SYSTEM', 'propGetServiceImpl.fetchProperty', 'modbus云端轮询 总共耗时:31毫秒', '0', '', '2024-02-07 15:34:00'); +INSERT INTO `sys_job_log` VALUES (12, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:241毫秒', '0', '', '2024-12-29 15:13:57'); +INSERT INTO `sys_job_log` VALUES (13, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:586毫秒', '0', '', '2024-12-29 15:13:57'); +INSERT INTO `sys_job_log` VALUES (14, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:28毫秒', '0', '', '2024-12-29 15:14:57'); +INSERT INTO `sys_job_log` VALUES (15, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:33毫秒', '0', '', '2024-12-29 15:15:57'); +INSERT INTO `sys_job_log` VALUES (16, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:590毫秒', '0', '', '2024-12-29 15:15:57'); +INSERT INTO `sys_job_log` VALUES (17, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:31毫秒', '0', '', '2024-12-29 15:16:57'); +INSERT INTO `sys_job_log` VALUES (18, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:36毫秒', '0', '', '2024-12-29 15:17:57'); +INSERT INTO `sys_job_log` VALUES (19, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:600毫秒', '0', '', '2024-12-29 15:17:57'); +INSERT INTO `sys_job_log` VALUES (20, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:34毫秒', '0', '', '2024-12-29 15:18:57'); +INSERT INTO `sys_job_log` VALUES (21, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2024-12-29 15:19:57'); +INSERT INTO `sys_job_log` VALUES (22, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:585毫秒', '0', '', '2024-12-29 15:19:57'); +INSERT INTO `sys_job_log` VALUES (23, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:30毫秒', '0', '', '2024-12-29 15:20:57'); +INSERT INTO `sys_job_log` VALUES (24, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:33毫秒', '0', '', '2024-12-29 15:21:57'); +INSERT INTO `sys_job_log` VALUES (25, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:564毫秒', '0', '', '2024-12-29 15:21:57'); +INSERT INTO `sys_job_log` VALUES (26, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:35毫秒', '0', '', '2024-12-29 15:22:57'); +INSERT INTO `sys_job_log` VALUES (27, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:29毫秒', '0', '', '2024-12-29 15:23:57'); +INSERT INTO `sys_job_log` VALUES (28, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:558毫秒', '0', '', '2024-12-29 15:23:57'); +INSERT INTO `sys_job_log` VALUES (29, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:35毫秒', '0', '', '2024-12-29 15:24:57'); +INSERT INTO `sys_job_log` VALUES (30, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:32毫秒', '0', '', '2024-12-29 15:25:57'); +INSERT INTO `sys_job_log` VALUES (31, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:541毫秒', '0', '', '2024-12-29 15:25:57'); +INSERT INTO `sys_job_log` VALUES (32, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:35毫秒', '0', '', '2024-12-29 15:26:57'); +INSERT INTO `sys_job_log` VALUES (33, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:30毫秒', '0', '', '2024-12-29 15:27:57'); +INSERT INTO `sys_job_log` VALUES (34, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:594毫秒', '0', '', '2024-12-29 15:27:57'); +INSERT INTO `sys_job_log` VALUES (35, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:34毫秒', '0', '', '2024-12-29 15:28:57'); +INSERT INTO `sys_job_log` VALUES (36, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:29毫秒', '0', '', '2024-12-29 15:29:57'); +INSERT INTO `sys_job_log` VALUES (37, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:559毫秒', '0', '', '2024-12-29 15:29:57'); +INSERT INTO `sys_job_log` VALUES (38, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:29毫秒', '0', '', '2024-12-29 15:30:57'); +INSERT INTO `sys_job_log` VALUES (39, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:32毫秒', '0', '', '2024-12-29 15:31:57'); +INSERT INTO `sys_job_log` VALUES (40, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:562毫秒', '0', '', '2024-12-29 15:31:57'); +INSERT INTO `sys_job_log` VALUES (41, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:30毫秒', '0', '', '2024-12-29 15:32:57'); +INSERT INTO `sys_job_log` VALUES (42, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:31毫秒', '0', '', '2024-12-29 15:33:57'); +INSERT INTO `sys_job_log` VALUES (43, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:568毫秒', '0', '', '2024-12-29 15:33:57'); +INSERT INTO `sys_job_log` VALUES (44, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:29毫秒', '0', '', '2024-12-29 15:34:57'); +INSERT INTO `sys_job_log` VALUES (45, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:607毫秒', '0', '', '2024-12-29 15:35:57'); +INSERT INTO `sys_job_log` VALUES (46, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:1260毫秒', '0', '', '2024-12-29 15:35:58'); +INSERT INTO `sys_job_log` VALUES (47, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:31毫秒', '0', '', '2024-12-29 15:36:57'); +INSERT INTO `sys_job_log` VALUES (48, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:38毫秒', '0', '', '2024-12-29 15:37:57'); +INSERT INTO `sys_job_log` VALUES (49, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:1124毫秒', '0', '', '2024-12-29 15:37:58'); +INSERT INTO `sys_job_log` VALUES (50, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:31毫秒', '0', '', '2024-12-29 15:38:57'); +INSERT INTO `sys_job_log` VALUES (51, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:33毫秒', '0', '', '2024-12-29 15:39:57'); +INSERT INTO `sys_job_log` VALUES (52, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:1691毫秒', '0', '', '2024-12-29 15:39:58'); +INSERT INTO `sys_job_log` VALUES (53, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:34毫秒', '0', '', '2024-12-29 15:40:57'); +INSERT INTO `sys_job_log` VALUES (54, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:34毫秒', '0', '', '2024-12-29 15:41:57'); +INSERT INTO `sys_job_log` VALUES (55, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:578毫秒', '0', '', '2024-12-29 15:41:57'); +INSERT INTO `sys_job_log` VALUES (56, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:31毫秒', '0', '', '2024-12-29 15:42:57'); +INSERT INTO `sys_job_log` VALUES (57, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:27毫秒', '0', '', '2024-12-29 15:43:57'); +INSERT INTO `sys_job_log` VALUES (58, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:572毫秒', '0', '', '2024-12-29 15:43:57'); +INSERT INTO `sys_job_log` VALUES (59, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:32毫秒', '0', '', '2024-12-29 15:44:57'); +INSERT INTO `sys_job_log` VALUES (60, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:30毫秒', '0', '', '2024-12-29 15:45:57'); +INSERT INTO `sys_job_log` VALUES (61, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:571毫秒', '0', '', '2024-12-29 15:45:57'); +INSERT INTO `sys_job_log` VALUES (62, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:34毫秒', '0', '', '2024-12-29 15:46:57'); +INSERT INTO `sys_job_log` VALUES (63, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:31毫秒', '0', '', '2024-12-29 15:47:57'); +INSERT INTO `sys_job_log` VALUES (64, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:556毫秒', '0', '', '2024-12-29 15:47:57'); +INSERT INTO `sys_job_log` VALUES (65, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:35毫秒', '0', '', '2024-12-29 15:48:57'); +INSERT INTO `sys_job_log` VALUES (66, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:31毫秒', '0', '', '2024-12-29 15:49:57'); +INSERT INTO `sys_job_log` VALUES (67, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:534毫秒', '0', '', '2024-12-29 15:49:57'); +INSERT INTO `sys_job_log` VALUES (68, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:30毫秒', '0', '', '2024-12-29 15:50:57'); +INSERT INTO `sys_job_log` VALUES (69, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:33毫秒', '0', '', '2024-12-29 15:51:57'); +INSERT INTO `sys_job_log` VALUES (70, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:553毫秒', '0', '', '2024-12-29 15:51:57'); +INSERT INTO `sys_job_log` VALUES (71, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:29毫秒', '0', '', '2024-12-29 15:52:57'); +INSERT INTO `sys_job_log` VALUES (72, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:29毫秒', '0', '', '2024-12-29 15:53:57'); +INSERT INTO `sys_job_log` VALUES (73, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:560毫秒', '0', '', '2024-12-29 15:53:57'); +INSERT INTO `sys_job_log` VALUES (74, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:30毫秒', '0', '', '2024-12-29 15:54:57'); +INSERT INTO `sys_job_log` VALUES (75, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:29毫秒', '0', '', '2024-12-29 15:55:57'); +INSERT INTO `sys_job_log` VALUES (76, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:558毫秒', '0', '', '2024-12-29 15:55:57'); +INSERT INTO `sys_job_log` VALUES (77, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:30毫秒', '0', '', '2024-12-29 15:56:57'); +INSERT INTO `sys_job_log` VALUES (78, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:31毫秒', '0', '', '2024-12-29 15:57:57'); +INSERT INTO `sys_job_log` VALUES (79, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:574毫秒', '0', '', '2024-12-29 15:57:57'); +INSERT INTO `sys_job_log` VALUES (80, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:32毫秒', '0', '', '2024-12-29 15:58:57'); +INSERT INTO `sys_job_log` VALUES (81, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:27毫秒', '0', '', '2024-12-29 15:59:57'); +INSERT INTO `sys_job_log` VALUES (82, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:552毫秒', '0', '', '2024-12-29 15:59:57'); +INSERT INTO `sys_job_log` VALUES (83, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:30毫秒', '0', '', '2024-12-29 16:00:57'); +INSERT INTO `sys_job_log` VALUES (84, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:29毫秒', '0', '', '2024-12-29 16:01:57'); +INSERT INTO `sys_job_log` VALUES (85, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:560毫秒', '0', '', '2024-12-29 16:01:57'); +INSERT INTO `sys_job_log` VALUES (86, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:34毫秒', '0', '', '2024-12-29 16:02:57'); +INSERT INTO `sys_job_log` VALUES (87, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:39毫秒', '0', '', '2024-12-29 16:03:57'); +INSERT INTO `sys_job_log` VALUES (88, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:572毫秒', '0', '', '2024-12-29 16:03:57'); +INSERT INTO `sys_job_log` VALUES (89, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:30毫秒', '0', '', '2024-12-29 16:04:57'); +INSERT INTO `sys_job_log` VALUES (90, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:29毫秒', '0', '', '2024-12-29 16:05:57'); +INSERT INTO `sys_job_log` VALUES (91, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:549毫秒', '0', '', '2024-12-29 16:05:57'); +INSERT INTO `sys_job_log` VALUES (92, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:28毫秒', '0', '', '2024-12-29 16:06:57'); +INSERT INTO `sys_job_log` VALUES (93, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:30毫秒', '0', '', '2024-12-29 16:07:57'); +INSERT INTO `sys_job_log` VALUES (94, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:571毫秒', '0', '', '2024-12-29 16:07:57'); +INSERT INTO `sys_job_log` VALUES (95, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:28毫秒', '0', '', '2024-12-29 16:08:57'); +INSERT INTO `sys_job_log` VALUES (96, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:33毫秒', '0', '', '2024-12-29 16:09:57'); +INSERT INTO `sys_job_log` VALUES (97, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:565毫秒', '0', '', '2024-12-29 16:09:57'); +INSERT INTO `sys_job_log` VALUES (98, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:34毫秒', '0', '', '2024-12-29 16:10:57'); +INSERT INTO `sys_job_log` VALUES (99, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:29毫秒', '0', '', '2024-12-29 16:11:57'); +INSERT INTO `sys_job_log` VALUES (100, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:552毫秒', '0', '', '2024-12-29 16:11:57'); +INSERT INTO `sys_job_log` VALUES (101, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:35毫秒', '0', '', '2024-12-29 16:12:57'); +INSERT INTO `sys_job_log` VALUES (102, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:30毫秒', '0', '', '2024-12-29 16:13:57'); +INSERT INTO `sys_job_log` VALUES (103, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:569毫秒', '0', '', '2024-12-29 16:13:57'); +INSERT INTO `sys_job_log` VALUES (104, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:28毫秒', '0', '', '2024-12-29 16:14:57'); +INSERT INTO `sys_job_log` VALUES (105, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:32毫秒', '0', '', '2024-12-29 16:15:57'); +INSERT INTO `sys_job_log` VALUES (106, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:573毫秒', '0', '', '2024-12-29 16:15:57'); +INSERT INTO `sys_job_log` VALUES (107, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:31毫秒', '0', '', '2024-12-29 16:16:57'); +INSERT INTO `sys_job_log` VALUES (108, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:31毫秒', '0', '', '2024-12-29 16:17:57'); +INSERT INTO `sys_job_log` VALUES (109, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:558毫秒', '0', '', '2024-12-29 16:17:57'); +INSERT INTO `sys_job_log` VALUES (110, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:32毫秒', '0', '', '2024-12-29 16:18:57'); +INSERT INTO `sys_job_log` VALUES (111, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:29毫秒', '0', '', '2024-12-29 16:19:57'); +INSERT INTO `sys_job_log` VALUES (112, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:537毫秒', '0', '', '2024-12-29 16:19:57'); +INSERT INTO `sys_job_log` VALUES (113, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:34毫秒', '0', '', '2024-12-29 16:20:57'); +INSERT INTO `sys_job_log` VALUES (114, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:37毫秒', '0', '', '2024-12-29 16:21:57'); +INSERT INTO `sys_job_log` VALUES (115, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:591毫秒', '0', '', '2024-12-29 16:21:57'); +INSERT INTO `sys_job_log` VALUES (116, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:29毫秒', '0', '', '2024-12-29 16:22:57'); +INSERT INTO `sys_job_log` VALUES (117, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:31毫秒', '0', '', '2024-12-29 16:23:57'); +INSERT INTO `sys_job_log` VALUES (118, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:535毫秒', '0', '', '2024-12-29 16:23:57'); +INSERT INTO `sys_job_log` VALUES (119, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:43毫秒', '0', '', '2024-12-29 16:24:57'); +INSERT INTO `sys_job_log` VALUES (120, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:30毫秒', '0', '', '2024-12-29 16:25:57'); +INSERT INTO `sys_job_log` VALUES (121, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:565毫秒', '0', '', '2024-12-29 16:25:57'); +INSERT INTO `sys_job_log` VALUES (122, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:31毫秒', '0', '', '2024-12-29 16:26:57'); +INSERT INTO `sys_job_log` VALUES (123, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:31毫秒', '0', '', '2024-12-29 16:27:57'); +INSERT INTO `sys_job_log` VALUES (124, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:563毫秒', '0', '', '2024-12-29 16:27:57'); +INSERT INTO `sys_job_log` VALUES (125, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:32毫秒', '0', '', '2024-12-29 16:28:57'); +INSERT INTO `sys_job_log` VALUES (126, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:33毫秒', '0', '', '2024-12-29 16:29:57'); +INSERT INTO `sys_job_log` VALUES (127, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:540毫秒', '0', '', '2024-12-29 16:29:57'); +INSERT INTO `sys_job_log` VALUES (128, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:28毫秒', '0', '', '2024-12-29 16:30:56'); +INSERT INTO `sys_job_log` VALUES (129, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:31毫秒', '0', '', '2024-12-29 16:31:57'); +INSERT INTO `sys_job_log` VALUES (130, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:558毫秒', '0', '', '2024-12-29 16:31:57'); +INSERT INTO `sys_job_log` VALUES (131, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:36毫秒', '0', '', '2024-12-29 16:32:57'); +INSERT INTO `sys_job_log` VALUES (132, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:30毫秒', '0', '', '2024-12-29 16:33:57'); +INSERT INTO `sys_job_log` VALUES (133, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:558毫秒', '0', '', '2024-12-29 16:33:57'); +INSERT INTO `sys_job_log` VALUES (134, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:29毫秒', '0', '', '2024-12-29 16:34:56'); +INSERT INTO `sys_job_log` VALUES (135, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:30毫秒', '0', '', '2024-12-29 16:35:57'); +INSERT INTO `sys_job_log` VALUES (136, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:551毫秒', '0', '', '2024-12-29 16:35:57'); +INSERT INTO `sys_job_log` VALUES (137, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:29毫秒', '0', '', '2024-12-29 16:36:56'); +INSERT INTO `sys_job_log` VALUES (138, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:36毫秒', '0', '', '2024-12-29 16:37:57'); +INSERT INTO `sys_job_log` VALUES (139, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:553毫秒', '0', '', '2024-12-29 16:37:57'); +INSERT INTO `sys_job_log` VALUES (140, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:32毫秒', '0', '', '2024-12-29 16:38:56'); +INSERT INTO `sys_job_log` VALUES (141, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:34毫秒', '0', '', '2024-12-29 16:39:57'); +INSERT INTO `sys_job_log` VALUES (142, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:585毫秒', '0', '', '2024-12-29 16:39:57'); +INSERT INTO `sys_job_log` VALUES (143, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1877毫秒', '0', '', '2024-12-29 16:40:59'); +INSERT INTO `sys_job_log` VALUES (144, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:31毫秒', '0', '', '2024-12-29 16:41:56'); +INSERT INTO `sys_job_log` VALUES (145, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:534毫秒', '0', '', '2024-12-29 16:41:57'); +INSERT INTO `sys_job_log` VALUES (146, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:32毫秒', '0', '', '2024-12-29 16:42:56'); +INSERT INTO `sys_job_log` VALUES (147, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:66毫秒', '0', '', '2024-12-29 16:43:57'); +INSERT INTO `sys_job_log` VALUES (148, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:520毫秒', '0', '', '2024-12-29 16:43:57'); +INSERT INTO `sys_job_log` VALUES (149, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:34毫秒', '0', '', '2024-12-29 16:44:56'); +INSERT INTO `sys_job_log` VALUES (150, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:89毫秒', '0', '', '2024-12-29 16:45:57'); +INSERT INTO `sys_job_log` VALUES (151, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:569毫秒', '0', '', '2024-12-29 16:45:57'); +INSERT INTO `sys_job_log` VALUES (152, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:28毫秒', '0', '', '2024-12-29 16:46:56'); +INSERT INTO `sys_job_log` VALUES (153, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:29毫秒', '0', '', '2024-12-29 16:47:56'); +INSERT INTO `sys_job_log` VALUES (154, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:534毫秒', '0', '', '2024-12-29 16:47:57'); +INSERT INTO `sys_job_log` VALUES (155, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:28毫秒', '0', '', '2024-12-29 16:48:56'); +INSERT INTO `sys_job_log` VALUES (156, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:33毫秒', '0', '', '2024-12-29 16:49:56'); +INSERT INTO `sys_job_log` VALUES (157, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:543毫秒', '0', '', '2024-12-29 16:49:57'); +INSERT INTO `sys_job_log` VALUES (158, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:29毫秒', '0', '', '2024-12-29 16:50:56'); +INSERT INTO `sys_job_log` VALUES (159, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:31毫秒', '0', '', '2024-12-29 16:51:56'); +INSERT INTO `sys_job_log` VALUES (160, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:564毫秒', '0', '', '2024-12-29 16:51:57'); +INSERT INTO `sys_job_log` VALUES (161, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:29毫秒', '0', '', '2024-12-29 16:52:56'); +INSERT INTO `sys_job_log` VALUES (162, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:30毫秒', '0', '', '2024-12-29 16:53:56'); +INSERT INTO `sys_job_log` VALUES (163, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:546毫秒', '0', '', '2024-12-29 16:53:57'); +INSERT INTO `sys_job_log` VALUES (164, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:33毫秒', '0', '', '2024-12-29 16:54:56'); +INSERT INTO `sys_job_log` VALUES (165, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:54毫秒', '0', '', '2024-12-29 16:55:56'); +INSERT INTO `sys_job_log` VALUES (166, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:524毫秒', '0', '', '2024-12-29 16:55:57'); +INSERT INTO `sys_job_log` VALUES (167, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:27毫秒', '0', '', '2024-12-29 16:56:56'); +INSERT INTO `sys_job_log` VALUES (168, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:32毫秒', '0', '', '2024-12-29 16:57:56'); +INSERT INTO `sys_job_log` VALUES (169, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:542毫秒', '0', '', '2024-12-29 16:57:57'); +INSERT INTO `sys_job_log` VALUES (170, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:31毫秒', '0', '', '2024-12-29 16:58:56'); +INSERT INTO `sys_job_log` VALUES (171, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:36毫秒', '0', '', '2024-12-29 16:59:56'); +INSERT INTO `sys_job_log` VALUES (172, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:566毫秒', '0', '', '2024-12-29 16:59:57'); +INSERT INTO `sys_job_log` VALUES (173, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:27毫秒', '0', '', '2024-12-29 17:00:56'); +INSERT INTO `sys_job_log` VALUES (174, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:66毫秒', '0', '', '2024-12-29 17:01:56'); +INSERT INTO `sys_job_log` VALUES (175, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:526毫秒', '0', '', '2024-12-29 17:01:57'); +INSERT INTO `sys_job_log` VALUES (176, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:30毫秒', '0', '', '2024-12-29 17:02:56'); +INSERT INTO `sys_job_log` VALUES (177, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:56毫秒', '0', '', '2024-12-30 19:56:56'); +INSERT INTO `sys_job_log` VALUES (178, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:43毫秒', '0', '', '2024-12-30 19:57:56'); +INSERT INTO `sys_job_log` VALUES (179, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:843毫秒', '0', '', '2024-12-30 19:57:57'); +INSERT INTO `sys_job_log` VALUES (180, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:42毫秒', '0', '', '2024-12-30 19:58:56'); +INSERT INTO `sys_job_log` VALUES (181, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:49毫秒', '0', '', '2024-12-30 19:59:56'); +INSERT INTO `sys_job_log` VALUES (182, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:1097毫秒', '0', '', '2024-12-30 19:59:57'); +INSERT INTO `sys_job_log` VALUES (183, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:45毫秒', '0', '', '2024-12-30 20:00:56'); +INSERT INTO `sys_job_log` VALUES (184, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:42毫秒', '0', '', '2024-12-30 20:01:56'); +INSERT INTO `sys_job_log` VALUES (185, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:794毫秒', '0', '', '2024-12-30 20:01:57'); +INSERT INTO `sys_job_log` VALUES (186, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:48毫秒', '0', '', '2024-12-30 20:02:56'); +INSERT INTO `sys_job_log` VALUES (187, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:51毫秒', '0', '', '2024-12-30 20:03:56'); +INSERT INTO `sys_job_log` VALUES (188, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:806毫秒', '0', '', '2024-12-30 20:03:57'); +INSERT INTO `sys_job_log` VALUES (189, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:43毫秒', '0', '', '2024-12-30 20:04:56'); +INSERT INTO `sys_job_log` VALUES (190, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:37毫秒', '0', '', '2024-12-31 08:59:59'); +INSERT INTO `sys_job_log` VALUES (191, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:126毫秒', '0', '', '2024-12-31 08:59:59'); +INSERT INTO `sys_job_log` VALUES (192, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:4毫秒', '0', '', '2024-12-31 09:00:55'); +INSERT INTO `sys_job_log` VALUES (193, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:5毫秒', '0', '', '2024-12-31 09:01:55'); +INSERT INTO `sys_job_log` VALUES (194, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:54毫秒', '0', '', '2024-12-31 09:01:55'); +INSERT INTO `sys_job_log` VALUES (195, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:5毫秒', '0', '', '2024-12-31 09:02:55'); +INSERT INTO `sys_job_log` VALUES (196, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:4毫秒', '0', '', '2024-12-31 09:03:55'); +INSERT INTO `sys_job_log` VALUES (197, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:54毫秒', '0', '', '2024-12-31 09:03:55'); +INSERT INTO `sys_job_log` VALUES (198, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:5毫秒', '0', '', '2024-12-31 09:04:55'); +INSERT INTO `sys_job_log` VALUES (199, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:4毫秒', '0', '', '2024-12-31 09:05:55'); +INSERT INTO `sys_job_log` VALUES (200, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:48毫秒', '0', '', '2024-12-31 09:05:55'); +INSERT INTO `sys_job_log` VALUES (201, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:5毫秒', '0', '', '2024-12-31 09:06:55'); +INSERT INTO `sys_job_log` VALUES (202, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:5毫秒', '0', '', '2024-12-31 09:07:55'); +INSERT INTO `sys_job_log` VALUES (203, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:61毫秒', '0', '', '2024-12-31 09:07:55'); +INSERT INTO `sys_job_log` VALUES (204, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:4毫秒', '0', '', '2024-12-31 09:08:55'); +INSERT INTO `sys_job_log` VALUES (205, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:4毫秒', '0', '', '2024-12-31 09:09:55'); +INSERT INTO `sys_job_log` VALUES (206, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:41毫秒', '0', '', '2024-12-31 09:09:55'); +INSERT INTO `sys_job_log` VALUES (207, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:4毫秒', '0', '', '2024-12-31 09:10:55'); +INSERT INTO `sys_job_log` VALUES (208, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2024-12-31 09:11:55'); +INSERT INTO `sys_job_log` VALUES (209, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:46毫秒', '0', '', '2024-12-31 09:11:55'); +INSERT INTO `sys_job_log` VALUES (210, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:4毫秒', '0', '', '2024-12-31 09:12:55'); +INSERT INTO `sys_job_log` VALUES (211, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2024-12-31 09:13:55'); +INSERT INTO `sys_job_log` VALUES (212, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:46毫秒', '0', '', '2024-12-31 09:13:55'); +INSERT INTO `sys_job_log` VALUES (213, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:4毫秒', '0', '', '2024-12-31 09:14:55'); +INSERT INTO `sys_job_log` VALUES (214, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2024-12-31 09:15:55'); +INSERT INTO `sys_job_log` VALUES (215, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:40毫秒', '0', '', '2024-12-31 09:15:55'); +INSERT INTO `sys_job_log` VALUES (216, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2024-12-31 09:16:55'); +INSERT INTO `sys_job_log` VALUES (217, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2024-12-31 09:17:55'); +INSERT INTO `sys_job_log` VALUES (218, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:44毫秒', '0', '', '2024-12-31 09:17:55'); +INSERT INTO `sys_job_log` VALUES (219, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2024-12-31 09:18:55'); +INSERT INTO `sys_job_log` VALUES (220, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2024-12-31 09:19:55'); +INSERT INTO `sys_job_log` VALUES (221, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:43毫秒', '0', '', '2024-12-31 09:19:55'); +INSERT INTO `sys_job_log` VALUES (222, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2024-12-31 09:20:55'); +INSERT INTO `sys_job_log` VALUES (223, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2024-12-31 09:21:55'); +INSERT INTO `sys_job_log` VALUES (224, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:39毫秒', '0', '', '2024-12-31 09:21:55'); +INSERT INTO `sys_job_log` VALUES (225, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 09:22:55'); +INSERT INTO `sys_job_log` VALUES (226, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2024-12-31 09:23:55'); +INSERT INTO `sys_job_log` VALUES (227, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:39毫秒', '0', '', '2024-12-31 09:23:55'); +INSERT INTO `sys_job_log` VALUES (228, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2024-12-31 09:24:55'); +INSERT INTO `sys_job_log` VALUES (229, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2024-12-31 09:25:55'); +INSERT INTO `sys_job_log` VALUES (230, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:38毫秒', '0', '', '2024-12-31 09:25:55'); +INSERT INTO `sys_job_log` VALUES (231, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2024-12-31 09:26:55'); +INSERT INTO `sys_job_log` VALUES (232, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2024-12-31 09:27:55'); +INSERT INTO `sys_job_log` VALUES (233, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:36毫秒', '0', '', '2024-12-31 09:27:55'); +INSERT INTO `sys_job_log` VALUES (234, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2024-12-31 09:28:55'); +INSERT INTO `sys_job_log` VALUES (235, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2024-12-31 09:29:55'); +INSERT INTO `sys_job_log` VALUES (236, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:37毫秒', '0', '', '2024-12-31 09:29:55'); +INSERT INTO `sys_job_log` VALUES (237, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2024-12-31 09:30:55'); +INSERT INTO `sys_job_log` VALUES (238, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 09:31:55'); +INSERT INTO `sys_job_log` VALUES (239, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:74毫秒', '0', '', '2024-12-31 09:31:55'); +INSERT INTO `sys_job_log` VALUES (240, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2024-12-31 09:32:55'); +INSERT INTO `sys_job_log` VALUES (241, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2024-12-31 09:33:55'); +INSERT INTO `sys_job_log` VALUES (242, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:36毫秒', '0', '', '2024-12-31 09:33:55'); +INSERT INTO `sys_job_log` VALUES (243, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2024-12-31 09:34:55'); +INSERT INTO `sys_job_log` VALUES (244, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2024-12-31 09:35:55'); +INSERT INTO `sys_job_log` VALUES (245, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:38毫秒', '0', '', '2024-12-31 09:35:55'); +INSERT INTO `sys_job_log` VALUES (246, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2024-12-31 09:36:55'); +INSERT INTO `sys_job_log` VALUES (247, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2024-12-31 09:37:55'); +INSERT INTO `sys_job_log` VALUES (248, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:36毫秒', '0', '', '2024-12-31 09:37:55'); +INSERT INTO `sys_job_log` VALUES (249, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2024-12-31 09:38:55'); +INSERT INTO `sys_job_log` VALUES (250, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2024-12-31 09:39:55'); +INSERT INTO `sys_job_log` VALUES (251, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:38毫秒', '0', '', '2024-12-31 09:39:55'); +INSERT INTO `sys_job_log` VALUES (252, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2024-12-31 09:40:55'); +INSERT INTO `sys_job_log` VALUES (253, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 09:41:55'); +INSERT INTO `sys_job_log` VALUES (254, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:35毫秒', '0', '', '2024-12-31 09:41:55'); +INSERT INTO `sys_job_log` VALUES (255, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2024-12-31 09:42:55'); +INSERT INTO `sys_job_log` VALUES (256, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2024-12-31 09:43:55'); +INSERT INTO `sys_job_log` VALUES (257, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:36毫秒', '0', '', '2024-12-31 09:43:55'); +INSERT INTO `sys_job_log` VALUES (258, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2024-12-31 09:44:55'); +INSERT INTO `sys_job_log` VALUES (259, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2024-12-31 09:45:55'); +INSERT INTO `sys_job_log` VALUES (260, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:38毫秒', '0', '', '2024-12-31 09:45:55'); +INSERT INTO `sys_job_log` VALUES (261, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2024-12-31 09:46:55'); +INSERT INTO `sys_job_log` VALUES (262, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2024-12-31 09:47:55'); +INSERT INTO `sys_job_log` VALUES (263, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:35毫秒', '0', '', '2024-12-31 09:47:55'); +INSERT INTO `sys_job_log` VALUES (264, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2024-12-31 09:48:55'); +INSERT INTO `sys_job_log` VALUES (265, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2024-12-31 09:49:55'); +INSERT INTO `sys_job_log` VALUES (266, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:34毫秒', '0', '', '2024-12-31 09:49:55'); +INSERT INTO `sys_job_log` VALUES (267, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2024-12-31 09:50:55'); +INSERT INTO `sys_job_log` VALUES (268, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2024-12-31 09:51:55'); +INSERT INTO `sys_job_log` VALUES (269, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:34毫秒', '0', '', '2024-12-31 09:51:55'); +INSERT INTO `sys_job_log` VALUES (270, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2024-12-31 09:52:55'); +INSERT INTO `sys_job_log` VALUES (271, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2024-12-31 09:53:55'); +INSERT INTO `sys_job_log` VALUES (272, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:35毫秒', '0', '', '2024-12-31 09:53:55'); +INSERT INTO `sys_job_log` VALUES (273, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2024-12-31 09:54:55'); +INSERT INTO `sys_job_log` VALUES (274, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 09:55:55'); +INSERT INTO `sys_job_log` VALUES (275, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:35毫秒', '0', '', '2024-12-31 09:55:55'); +INSERT INTO `sys_job_log` VALUES (276, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2024-12-31 09:56:55'); +INSERT INTO `sys_job_log` VALUES (277, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2024-12-31 09:57:55'); +INSERT INTO `sys_job_log` VALUES (278, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:36毫秒', '0', '', '2024-12-31 09:57:55'); +INSERT INTO `sys_job_log` VALUES (279, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2024-12-31 09:58:55'); +INSERT INTO `sys_job_log` VALUES (280, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 09:59:55'); +INSERT INTO `sys_job_log` VALUES (281, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:35毫秒', '0', '', '2024-12-31 09:59:55'); +INSERT INTO `sys_job_log` VALUES (282, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2024-12-31 10:00:55'); +INSERT INTO `sys_job_log` VALUES (283, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 10:01:55'); +INSERT INTO `sys_job_log` VALUES (284, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:34毫秒', '0', '', '2024-12-31 10:01:55'); +INSERT INTO `sys_job_log` VALUES (285, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2024-12-31 10:02:55'); +INSERT INTO `sys_job_log` VALUES (286, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 10:03:55'); +INSERT INTO `sys_job_log` VALUES (287, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:35毫秒', '0', '', '2024-12-31 10:03:55'); +INSERT INTO `sys_job_log` VALUES (288, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2024-12-31 10:04:55'); +INSERT INTO `sys_job_log` VALUES (289, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2024-12-31 10:05:55'); +INSERT INTO `sys_job_log` VALUES (290, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:33毫秒', '0', '', '2024-12-31 10:05:55'); +INSERT INTO `sys_job_log` VALUES (291, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2024-12-31 10:06:55'); +INSERT INTO `sys_job_log` VALUES (292, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2024-12-31 10:07:55'); +INSERT INTO `sys_job_log` VALUES (293, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:33毫秒', '0', '', '2024-12-31 10:07:55'); +INSERT INTO `sys_job_log` VALUES (294, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 10:08:55'); +INSERT INTO `sys_job_log` VALUES (295, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 10:09:55'); +INSERT INTO `sys_job_log` VALUES (296, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:34毫秒', '0', '', '2024-12-31 10:09:55'); +INSERT INTO `sys_job_log` VALUES (297, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:4毫秒', '0', '', '2024-12-31 10:10:55'); +INSERT INTO `sys_job_log` VALUES (298, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 10:11:55'); +INSERT INTO `sys_job_log` VALUES (299, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:34毫秒', '0', '', '2024-12-31 10:11:55'); +INSERT INTO `sys_job_log` VALUES (300, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2024-12-31 10:12:55'); +INSERT INTO `sys_job_log` VALUES (301, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2024-12-31 10:13:55'); +INSERT INTO `sys_job_log` VALUES (302, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:39毫秒', '0', '', '2024-12-31 10:13:55'); +INSERT INTO `sys_job_log` VALUES (303, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2024-12-31 10:14:55'); +INSERT INTO `sys_job_log` VALUES (304, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2024-12-31 10:15:55'); +INSERT INTO `sys_job_log` VALUES (305, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:42毫秒', '0', '', '2024-12-31 10:15:55'); +INSERT INTO `sys_job_log` VALUES (306, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2024-12-31 10:16:55'); +INSERT INTO `sys_job_log` VALUES (307, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:4毫秒', '0', '', '2024-12-31 10:17:55'); +INSERT INTO `sys_job_log` VALUES (308, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:41毫秒', '0', '', '2024-12-31 10:17:55'); +INSERT INTO `sys_job_log` VALUES (309, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2024-12-31 10:18:55'); +INSERT INTO `sys_job_log` VALUES (310, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2024-12-31 10:19:55'); +INSERT INTO `sys_job_log` VALUES (311, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:38毫秒', '0', '', '2024-12-31 10:19:55'); +INSERT INTO `sys_job_log` VALUES (312, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2024-12-31 10:20:55'); +INSERT INTO `sys_job_log` VALUES (313, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2024-12-31 10:21:55'); +INSERT INTO `sys_job_log` VALUES (314, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:36毫秒', '0', '', '2024-12-31 10:21:55'); +INSERT INTO `sys_job_log` VALUES (315, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:4毫秒', '0', '', '2024-12-31 10:22:55'); +INSERT INTO `sys_job_log` VALUES (316, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2024-12-31 10:23:55'); +INSERT INTO `sys_job_log` VALUES (317, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:35毫秒', '0', '', '2024-12-31 10:23:55'); +INSERT INTO `sys_job_log` VALUES (318, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2024-12-31 10:24:55'); +INSERT INTO `sys_job_log` VALUES (319, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2024-12-31 10:25:55'); +INSERT INTO `sys_job_log` VALUES (320, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:35毫秒', '0', '', '2024-12-31 10:25:55'); +INSERT INTO `sys_job_log` VALUES (321, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2024-12-31 10:26:55'); +INSERT INTO `sys_job_log` VALUES (322, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 10:27:55'); +INSERT INTO `sys_job_log` VALUES (323, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:35毫秒', '0', '', '2024-12-31 10:27:55'); +INSERT INTO `sys_job_log` VALUES (324, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2024-12-31 10:28:55'); +INSERT INTO `sys_job_log` VALUES (325, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2024-12-31 10:29:55'); +INSERT INTO `sys_job_log` VALUES (326, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:34毫秒', '0', '', '2024-12-31 10:29:55'); +INSERT INTO `sys_job_log` VALUES (327, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 10:30:55'); +INSERT INTO `sys_job_log` VALUES (328, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 10:31:55'); +INSERT INTO `sys_job_log` VALUES (329, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:34毫秒', '0', '', '2024-12-31 10:31:55'); +INSERT INTO `sys_job_log` VALUES (330, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2024-12-31 10:32:55'); +INSERT INTO `sys_job_log` VALUES (331, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 10:33:55'); +INSERT INTO `sys_job_log` VALUES (332, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:34毫秒', '0', '', '2024-12-31 10:33:55'); +INSERT INTO `sys_job_log` VALUES (333, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2024-12-31 10:34:55'); +INSERT INTO `sys_job_log` VALUES (334, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2024-12-31 10:35:55'); +INSERT INTO `sys_job_log` VALUES (335, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:35毫秒', '0', '', '2024-12-31 10:35:55'); +INSERT INTO `sys_job_log` VALUES (336, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2024-12-31 10:36:55'); +INSERT INTO `sys_job_log` VALUES (337, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 10:37:55'); +INSERT INTO `sys_job_log` VALUES (338, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:34毫秒', '0', '', '2024-12-31 10:37:55'); +INSERT INTO `sys_job_log` VALUES (339, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2024-12-31 10:38:55'); +INSERT INTO `sys_job_log` VALUES (340, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 10:39:55'); +INSERT INTO `sys_job_log` VALUES (341, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:34毫秒', '0', '', '2024-12-31 10:39:55'); +INSERT INTO `sys_job_log` VALUES (342, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:6毫秒', '0', '', '2024-12-31 10:40:55'); +INSERT INTO `sys_job_log` VALUES (343, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 10:41:55'); +INSERT INTO `sys_job_log` VALUES (344, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:35毫秒', '0', '', '2024-12-31 10:41:55'); +INSERT INTO `sys_job_log` VALUES (345, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2024-12-31 10:42:55'); +INSERT INTO `sys_job_log` VALUES (346, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 10:43:55'); +INSERT INTO `sys_job_log` VALUES (347, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:35毫秒', '0', '', '2024-12-31 10:43:55'); +INSERT INTO `sys_job_log` VALUES (348, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2024-12-31 10:44:55'); +INSERT INTO `sys_job_log` VALUES (349, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 10:45:55'); +INSERT INTO `sys_job_log` VALUES (350, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:36毫秒', '0', '', '2024-12-31 10:45:55'); +INSERT INTO `sys_job_log` VALUES (351, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2024-12-31 10:46:55'); +INSERT INTO `sys_job_log` VALUES (352, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2024-12-31 10:47:55'); +INSERT INTO `sys_job_log` VALUES (353, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:35毫秒', '0', '', '2024-12-31 10:47:55'); +INSERT INTO `sys_job_log` VALUES (354, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2024-12-31 10:48:55'); +INSERT INTO `sys_job_log` VALUES (355, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2024-12-31 10:49:55'); +INSERT INTO `sys_job_log` VALUES (356, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:34毫秒', '0', '', '2024-12-31 10:49:55'); +INSERT INTO `sys_job_log` VALUES (357, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 10:50:55'); +INSERT INTO `sys_job_log` VALUES (358, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2024-12-31 10:51:55'); +INSERT INTO `sys_job_log` VALUES (359, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:34毫秒', '0', '', '2024-12-31 10:51:55'); +INSERT INTO `sys_job_log` VALUES (360, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 10:52:55'); +INSERT INTO `sys_job_log` VALUES (361, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2024-12-31 10:53:55'); +INSERT INTO `sys_job_log` VALUES (362, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:34毫秒', '0', '', '2024-12-31 10:53:55'); +INSERT INTO `sys_job_log` VALUES (363, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 10:54:55'); +INSERT INTO `sys_job_log` VALUES (364, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 10:55:55'); +INSERT INTO `sys_job_log` VALUES (365, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:34毫秒', '0', '', '2024-12-31 10:55:55'); +INSERT INTO `sys_job_log` VALUES (366, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 10:56:55'); +INSERT INTO `sys_job_log` VALUES (367, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2024-12-31 10:57:55'); +INSERT INTO `sys_job_log` VALUES (368, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:33毫秒', '0', '', '2024-12-31 10:57:55'); +INSERT INTO `sys_job_log` VALUES (369, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2024-12-31 10:58:55'); +INSERT INTO `sys_job_log` VALUES (370, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 10:59:55'); +INSERT INTO `sys_job_log` VALUES (371, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:34毫秒', '0', '', '2024-12-31 10:59:55'); +INSERT INTO `sys_job_log` VALUES (372, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 11:00:55'); +INSERT INTO `sys_job_log` VALUES (373, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 11:01:55'); +INSERT INTO `sys_job_log` VALUES (374, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:35毫秒', '0', '', '2024-12-31 11:01:55'); +INSERT INTO `sys_job_log` VALUES (375, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 11:02:55'); +INSERT INTO `sys_job_log` VALUES (376, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:4毫秒', '0', '', '2024-12-31 11:03:55'); +INSERT INTO `sys_job_log` VALUES (377, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:70毫秒', '0', '', '2024-12-31 11:03:55'); +INSERT INTO `sys_job_log` VALUES (378, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2024-12-31 11:04:55'); +INSERT INTO `sys_job_log` VALUES (379, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 11:05:55'); +INSERT INTO `sys_job_log` VALUES (380, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:34毫秒', '0', '', '2024-12-31 11:05:55'); +INSERT INTO `sys_job_log` VALUES (381, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2024-12-31 11:06:55'); +INSERT INTO `sys_job_log` VALUES (382, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2024-12-31 11:07:55'); +INSERT INTO `sys_job_log` VALUES (383, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:34毫秒', '0', '', '2024-12-31 11:07:55'); +INSERT INTO `sys_job_log` VALUES (384, 'P', 'DEFAULT', '★温湿度开关', 'P 总共耗时:37毫秒', '0', '', '2024-12-31 11:07:55'); +INSERT INTO `sys_job_log` VALUES (385, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 11:08:55'); +INSERT INTO `sys_job_log` VALUES (386, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 11:09:55'); +INSERT INTO `sys_job_log` VALUES (387, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:34毫秒', '0', '', '2024-12-31 11:09:55'); +INSERT INTO `sys_job_log` VALUES (388, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2024-12-31 11:10:55'); +INSERT INTO `sys_job_log` VALUES (389, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 11:11:55'); +INSERT INTO `sys_job_log` VALUES (390, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:34毫秒', '0', '', '2024-12-31 11:11:55'); +INSERT INTO `sys_job_log` VALUES (391, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2024-12-31 11:12:55'); +INSERT INTO `sys_job_log` VALUES (392, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 11:13:55'); +INSERT INTO `sys_job_log` VALUES (393, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:33毫秒', '0', '', '2024-12-31 11:13:55'); +INSERT INTO `sys_job_log` VALUES (394, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 11:14:55'); +INSERT INTO `sys_job_log` VALUES (395, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2024-12-31 11:15:55'); +INSERT INTO `sys_job_log` VALUES (396, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:35毫秒', '0', '', '2024-12-31 11:15:55'); +INSERT INTO `sys_job_log` VALUES (397, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 11:16:55'); +INSERT INTO `sys_job_log` VALUES (398, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 11:17:55'); +INSERT INTO `sys_job_log` VALUES (399, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:35毫秒', '0', '', '2024-12-31 11:17:55'); +INSERT INTO `sys_job_log` VALUES (400, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 11:18:55'); +INSERT INTO `sys_job_log` VALUES (401, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 11:19:55'); +INSERT INTO `sys_job_log` VALUES (402, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:34毫秒', '0', '', '2024-12-31 11:19:55'); +INSERT INTO `sys_job_log` VALUES (403, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 11:20:55'); +INSERT INTO `sys_job_log` VALUES (404, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 11:21:55'); +INSERT INTO `sys_job_log` VALUES (405, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:34毫秒', '0', '', '2024-12-31 11:21:55'); +INSERT INTO `sys_job_log` VALUES (406, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2024-12-31 11:22:55'); +INSERT INTO `sys_job_log` VALUES (407, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 11:23:55'); +INSERT INTO `sys_job_log` VALUES (408, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:34毫秒', '0', '', '2024-12-31 11:23:55'); +INSERT INTO `sys_job_log` VALUES (409, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 11:24:55'); +INSERT INTO `sys_job_log` VALUES (410, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 11:25:55'); +INSERT INTO `sys_job_log` VALUES (411, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:37毫秒', '0', '', '2024-12-31 11:25:55'); +INSERT INTO `sys_job_log` VALUES (412, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 11:26:55'); +INSERT INTO `sys_job_log` VALUES (413, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 11:27:55'); +INSERT INTO `sys_job_log` VALUES (414, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:34毫秒', '0', '', '2024-12-31 11:27:55'); +INSERT INTO `sys_job_log` VALUES (415, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2024-12-31 11:28:55'); +INSERT INTO `sys_job_log` VALUES (416, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 11:29:55'); +INSERT INTO `sys_job_log` VALUES (417, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:33毫秒', '0', '', '2024-12-31 11:29:55'); +INSERT INTO `sys_job_log` VALUES (418, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 11:30:55'); +INSERT INTO `sys_job_log` VALUES (419, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 11:31:55'); +INSERT INTO `sys_job_log` VALUES (420, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:33毫秒', '0', '', '2024-12-31 11:31:55'); +INSERT INTO `sys_job_log` VALUES (421, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2024-12-31 11:32:55'); +INSERT INTO `sys_job_log` VALUES (422, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 11:33:55'); +INSERT INTO `sys_job_log` VALUES (423, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:33毫秒', '0', '', '2024-12-31 11:33:55'); +INSERT INTO `sys_job_log` VALUES (424, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 11:34:55'); +INSERT INTO `sys_job_log` VALUES (425, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 11:35:55'); +INSERT INTO `sys_job_log` VALUES (426, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:33毫秒', '0', '', '2024-12-31 11:35:55'); +INSERT INTO `sys_job_log` VALUES (427, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 11:36:55'); +INSERT INTO `sys_job_log` VALUES (428, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 11:37:55'); +INSERT INTO `sys_job_log` VALUES (429, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:34毫秒', '0', '', '2024-12-31 11:37:55'); +INSERT INTO `sys_job_log` VALUES (430, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 11:38:55'); +INSERT INTO `sys_job_log` VALUES (431, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 11:39:55'); +INSERT INTO `sys_job_log` VALUES (432, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:34毫秒', '0', '', '2024-12-31 11:39:55'); +INSERT INTO `sys_job_log` VALUES (433, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2024-12-31 11:40:55'); +INSERT INTO `sys_job_log` VALUES (434, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2024-12-31 11:41:55'); +INSERT INTO `sys_job_log` VALUES (435, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:33毫秒', '0', '', '2024-12-31 11:41:55'); +INSERT INTO `sys_job_log` VALUES (436, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2024-12-31 11:42:55'); +INSERT INTO `sys_job_log` VALUES (437, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 11:43:55'); +INSERT INTO `sys_job_log` VALUES (438, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:34毫秒', '0', '', '2024-12-31 11:43:55'); +INSERT INTO `sys_job_log` VALUES (439, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2024-12-31 11:44:55'); +INSERT INTO `sys_job_log` VALUES (440, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 11:45:55'); +INSERT INTO `sys_job_log` VALUES (441, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:35毫秒', '0', '', '2024-12-31 11:45:55'); +INSERT INTO `sys_job_log` VALUES (442, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2024-12-31 11:46:55'); +INSERT INTO `sys_job_log` VALUES (443, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2024-12-31 11:47:55'); +INSERT INTO `sys_job_log` VALUES (444, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:34毫秒', '0', '', '2024-12-31 11:47:55'); +INSERT INTO `sys_job_log` VALUES (445, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2024-12-31 11:48:55'); +INSERT INTO `sys_job_log` VALUES (446, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:4毫秒', '0', '', '2024-12-31 11:49:55'); +INSERT INTO `sys_job_log` VALUES (447, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:33毫秒', '0', '', '2024-12-31 11:49:55'); +INSERT INTO `sys_job_log` VALUES (448, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 11:50:55'); +INSERT INTO `sys_job_log` VALUES (449, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 11:51:55'); +INSERT INTO `sys_job_log` VALUES (450, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:34毫秒', '0', '', '2024-12-31 11:51:55'); +INSERT INTO `sys_job_log` VALUES (451, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 11:52:55'); +INSERT INTO `sys_job_log` VALUES (452, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 11:53:55'); +INSERT INTO `sys_job_log` VALUES (453, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:35毫秒', '0', '', '2024-12-31 11:53:55'); +INSERT INTO `sys_job_log` VALUES (454, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 11:54:55'); +INSERT INTO `sys_job_log` VALUES (455, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 11:55:55'); +INSERT INTO `sys_job_log` VALUES (456, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:37毫秒', '0', '', '2024-12-31 11:55:55'); +INSERT INTO `sys_job_log` VALUES (457, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2024-12-31 11:56:55'); +INSERT INTO `sys_job_log` VALUES (458, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 11:57:55'); +INSERT INTO `sys_job_log` VALUES (459, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:34毫秒', '0', '', '2024-12-31 11:57:55'); +INSERT INTO `sys_job_log` VALUES (460, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2024-12-31 11:58:55'); +INSERT INTO `sys_job_log` VALUES (461, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 11:59:55'); +INSERT INTO `sys_job_log` VALUES (462, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:40毫秒', '0', '', '2024-12-31 11:59:55'); +INSERT INTO `sys_job_log` VALUES (463, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2024-12-31 12:00:55'); +INSERT INTO `sys_job_log` VALUES (464, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 12:01:55'); +INSERT INTO `sys_job_log` VALUES (465, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:34毫秒', '0', '', '2024-12-31 12:01:55'); +INSERT INTO `sys_job_log` VALUES (466, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 12:02:55'); +INSERT INTO `sys_job_log` VALUES (467, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 12:03:55'); +INSERT INTO `sys_job_log` VALUES (468, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:34毫秒', '0', '', '2024-12-31 12:03:55'); +INSERT INTO `sys_job_log` VALUES (469, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 12:04:55'); +INSERT INTO `sys_job_log` VALUES (470, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 12:05:55'); +INSERT INTO `sys_job_log` VALUES (471, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:36毫秒', '0', '', '2024-12-31 12:05:55'); +INSERT INTO `sys_job_log` VALUES (472, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2024-12-31 12:06:55'); +INSERT INTO `sys_job_log` VALUES (473, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 12:07:55'); +INSERT INTO `sys_job_log` VALUES (474, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:36毫秒', '0', '', '2024-12-31 12:07:55'); +INSERT INTO `sys_job_log` VALUES (475, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 12:08:55'); +INSERT INTO `sys_job_log` VALUES (476, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 12:09:55'); +INSERT INTO `sys_job_log` VALUES (477, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:33毫秒', '0', '', '2024-12-31 12:09:55'); +INSERT INTO `sys_job_log` VALUES (478, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 12:10:55'); +INSERT INTO `sys_job_log` VALUES (479, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 12:11:55'); +INSERT INTO `sys_job_log` VALUES (480, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:34毫秒', '0', '', '2024-12-31 12:11:55'); +INSERT INTO `sys_job_log` VALUES (481, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 12:12:55'); +INSERT INTO `sys_job_log` VALUES (482, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2024-12-31 12:13:55'); +INSERT INTO `sys_job_log` VALUES (483, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:35毫秒', '0', '', '2024-12-31 12:13:55'); +INSERT INTO `sys_job_log` VALUES (484, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2024-12-31 12:14:55'); +INSERT INTO `sys_job_log` VALUES (485, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 12:15:55'); +INSERT INTO `sys_job_log` VALUES (486, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:35毫秒', '0', '', '2024-12-31 12:15:55'); +INSERT INTO `sys_job_log` VALUES (487, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 12:16:55'); +INSERT INTO `sys_job_log` VALUES (488, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2024-12-31 12:17:55'); +INSERT INTO `sys_job_log` VALUES (489, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:34毫秒', '0', '', '2024-12-31 12:17:55'); +INSERT INTO `sys_job_log` VALUES (490, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2024-12-31 12:18:55'); +INSERT INTO `sys_job_log` VALUES (491, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 12:19:55'); +INSERT INTO `sys_job_log` VALUES (492, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:34毫秒', '0', '', '2024-12-31 12:19:55'); +INSERT INTO `sys_job_log` VALUES (493, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2024-12-31 12:20:55'); +INSERT INTO `sys_job_log` VALUES (494, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 12:21:55'); +INSERT INTO `sys_job_log` VALUES (495, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:35毫秒', '0', '', '2024-12-31 12:21:55'); +INSERT INTO `sys_job_log` VALUES (496, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2024-12-31 12:22:55'); +INSERT INTO `sys_job_log` VALUES (497, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 12:23:55'); +INSERT INTO `sys_job_log` VALUES (498, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:39毫秒', '0', '', '2024-12-31 12:23:55'); +INSERT INTO `sys_job_log` VALUES (499, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 12:24:55'); +INSERT INTO `sys_job_log` VALUES (500, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2024-12-31 12:25:55'); +INSERT INTO `sys_job_log` VALUES (501, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:36毫秒', '0', '', '2024-12-31 12:25:55'); +INSERT INTO `sys_job_log` VALUES (502, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 12:26:55'); +INSERT INTO `sys_job_log` VALUES (503, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2024-12-31 12:27:55'); +INSERT INTO `sys_job_log` VALUES (504, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:32毫秒', '0', '', '2024-12-31 12:27:55'); +INSERT INTO `sys_job_log` VALUES (505, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 12:28:55'); +INSERT INTO `sys_job_log` VALUES (506, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 12:29:55'); +INSERT INTO `sys_job_log` VALUES (507, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:34毫秒', '0', '', '2024-12-31 12:29:55'); +INSERT INTO `sys_job_log` VALUES (508, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 12:30:55'); +INSERT INTO `sys_job_log` VALUES (509, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2024-12-31 12:31:55'); +INSERT INTO `sys_job_log` VALUES (510, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:33毫秒', '0', '', '2024-12-31 12:31:55'); +INSERT INTO `sys_job_log` VALUES (511, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2024-12-31 12:32:55'); +INSERT INTO `sys_job_log` VALUES (512, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:4毫秒', '0', '', '2024-12-31 12:33:55'); +INSERT INTO `sys_job_log` VALUES (513, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:33毫秒', '0', '', '2024-12-31 12:33:55'); +INSERT INTO `sys_job_log` VALUES (514, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 12:34:55'); +INSERT INTO `sys_job_log` VALUES (515, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 12:35:55'); +INSERT INTO `sys_job_log` VALUES (516, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:34毫秒', '0', '', '2024-12-31 12:35:55'); +INSERT INTO `sys_job_log` VALUES (517, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2024-12-31 12:36:55'); +INSERT INTO `sys_job_log` VALUES (518, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 12:37:55'); +INSERT INTO `sys_job_log` VALUES (519, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:34毫秒', '0', '', '2024-12-31 12:37:55'); +INSERT INTO `sys_job_log` VALUES (520, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2024-12-31 12:38:55'); +INSERT INTO `sys_job_log` VALUES (521, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 12:39:55'); +INSERT INTO `sys_job_log` VALUES (522, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:34毫秒', '0', '', '2024-12-31 12:39:55'); +INSERT INTO `sys_job_log` VALUES (523, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 12:40:55'); +INSERT INTO `sys_job_log` VALUES (524, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 12:41:55'); +INSERT INTO `sys_job_log` VALUES (525, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:35毫秒', '0', '', '2024-12-31 12:41:55'); +INSERT INTO `sys_job_log` VALUES (526, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 12:42:55'); +INSERT INTO `sys_job_log` VALUES (527, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 12:43:55'); +INSERT INTO `sys_job_log` VALUES (528, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:35毫秒', '0', '', '2024-12-31 12:43:55'); +INSERT INTO `sys_job_log` VALUES (529, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2024-12-31 12:44:55'); +INSERT INTO `sys_job_log` VALUES (530, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 12:45:55'); +INSERT INTO `sys_job_log` VALUES (531, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:38毫秒', '0', '', '2024-12-31 12:45:55'); +INSERT INTO `sys_job_log` VALUES (532, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 12:46:55'); +INSERT INTO `sys_job_log` VALUES (533, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 12:47:55'); +INSERT INTO `sys_job_log` VALUES (534, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:35毫秒', '0', '', '2024-12-31 12:47:55'); +INSERT INTO `sys_job_log` VALUES (535, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2024-12-31 12:48:55'); +INSERT INTO `sys_job_log` VALUES (536, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 12:49:55'); +INSERT INTO `sys_job_log` VALUES (537, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:35毫秒', '0', '', '2024-12-31 12:49:55'); +INSERT INTO `sys_job_log` VALUES (538, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 12:50:55'); +INSERT INTO `sys_job_log` VALUES (539, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 12:51:55'); +INSERT INTO `sys_job_log` VALUES (540, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:36毫秒', '0', '', '2024-12-31 12:51:55'); +INSERT INTO `sys_job_log` VALUES (541, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2024-12-31 12:52:55'); +INSERT INTO `sys_job_log` VALUES (542, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 12:53:55'); +INSERT INTO `sys_job_log` VALUES (543, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:41毫秒', '0', '', '2024-12-31 12:53:55'); +INSERT INTO `sys_job_log` VALUES (544, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 12:54:55'); +INSERT INTO `sys_job_log` VALUES (545, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 12:55:55'); +INSERT INTO `sys_job_log` VALUES (546, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:34毫秒', '0', '', '2024-12-31 12:55:55'); +INSERT INTO `sys_job_log` VALUES (547, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 12:56:55'); +INSERT INTO `sys_job_log` VALUES (548, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 12:57:55'); +INSERT INTO `sys_job_log` VALUES (549, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:34毫秒', '0', '', '2024-12-31 12:57:55'); +INSERT INTO `sys_job_log` VALUES (550, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:4毫秒', '0', '', '2024-12-31 12:58:55'); +INSERT INTO `sys_job_log` VALUES (551, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 12:59:55'); +INSERT INTO `sys_job_log` VALUES (552, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:33毫秒', '0', '', '2024-12-31 12:59:55'); +INSERT INTO `sys_job_log` VALUES (553, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2024-12-31 13:00:55'); +INSERT INTO `sys_job_log` VALUES (554, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2024-12-31 13:01:55'); +INSERT INTO `sys_job_log` VALUES (555, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:33毫秒', '0', '', '2024-12-31 13:01:55'); +INSERT INTO `sys_job_log` VALUES (556, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 13:02:55'); +INSERT INTO `sys_job_log` VALUES (557, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 13:03:55'); +INSERT INTO `sys_job_log` VALUES (558, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:34毫秒', '0', '', '2024-12-31 13:03:55'); +INSERT INTO `sys_job_log` VALUES (559, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2024-12-31 13:04:55'); +INSERT INTO `sys_job_log` VALUES (560, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 13:05:55'); +INSERT INTO `sys_job_log` VALUES (561, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:34毫秒', '0', '', '2024-12-31 13:05:55'); +INSERT INTO `sys_job_log` VALUES (562, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 13:06:55'); +INSERT INTO `sys_job_log` VALUES (563, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2024-12-31 13:07:55'); +INSERT INTO `sys_job_log` VALUES (564, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:49毫秒', '0', '', '2024-12-31 13:07:55'); +INSERT INTO `sys_job_log` VALUES (565, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 13:08:55'); +INSERT INTO `sys_job_log` VALUES (566, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 13:09:55'); +INSERT INTO `sys_job_log` VALUES (567, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:33毫秒', '0', '', '2024-12-31 13:09:55'); +INSERT INTO `sys_job_log` VALUES (568, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 13:10:55'); +INSERT INTO `sys_job_log` VALUES (569, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 13:11:55'); +INSERT INTO `sys_job_log` VALUES (570, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:34毫秒', '0', '', '2024-12-31 13:11:55'); +INSERT INTO `sys_job_log` VALUES (571, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 13:12:55'); +INSERT INTO `sys_job_log` VALUES (572, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 13:13:55'); +INSERT INTO `sys_job_log` VALUES (573, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:34毫秒', '0', '', '2024-12-31 13:13:55'); +INSERT INTO `sys_job_log` VALUES (574, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2024-12-31 13:14:55'); +INSERT INTO `sys_job_log` VALUES (575, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2024-12-31 13:15:55'); +INSERT INTO `sys_job_log` VALUES (576, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:32毫秒', '0', '', '2024-12-31 13:15:55'); +INSERT INTO `sys_job_log` VALUES (577, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 13:16:55'); +INSERT INTO `sys_job_log` VALUES (578, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 13:17:55'); +INSERT INTO `sys_job_log` VALUES (579, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:34毫秒', '0', '', '2024-12-31 13:17:55'); +INSERT INTO `sys_job_log` VALUES (580, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2024-12-31 13:18:55'); +INSERT INTO `sys_job_log` VALUES (581, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 13:19:55'); +INSERT INTO `sys_job_log` VALUES (582, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:33毫秒', '0', '', '2024-12-31 13:19:55'); +INSERT INTO `sys_job_log` VALUES (583, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 13:20:55'); +INSERT INTO `sys_job_log` VALUES (584, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 13:21:55'); +INSERT INTO `sys_job_log` VALUES (585, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:33毫秒', '0', '', '2024-12-31 13:21:55'); +INSERT INTO `sys_job_log` VALUES (586, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 13:22:55'); +INSERT INTO `sys_job_log` VALUES (587, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2024-12-31 13:23:55'); +INSERT INTO `sys_job_log` VALUES (588, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:34毫秒', '0', '', '2024-12-31 13:23:55'); +INSERT INTO `sys_job_log` VALUES (589, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2024-12-31 13:24:55'); +INSERT INTO `sys_job_log` VALUES (590, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 13:25:55'); +INSERT INTO `sys_job_log` VALUES (591, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:34毫秒', '0', '', '2024-12-31 13:25:55'); +INSERT INTO `sys_job_log` VALUES (592, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 13:26:55'); +INSERT INTO `sys_job_log` VALUES (593, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 13:27:55'); +INSERT INTO `sys_job_log` VALUES (594, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:34毫秒', '0', '', '2024-12-31 13:27:55'); +INSERT INTO `sys_job_log` VALUES (595, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 13:28:55'); +INSERT INTO `sys_job_log` VALUES (596, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 13:29:55'); +INSERT INTO `sys_job_log` VALUES (597, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:33毫秒', '0', '', '2024-12-31 13:29:55'); +INSERT INTO `sys_job_log` VALUES (598, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2024-12-31 13:30:55'); +INSERT INTO `sys_job_log` VALUES (599, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 13:31:55'); +INSERT INTO `sys_job_log` VALUES (600, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:34毫秒', '0', '', '2024-12-31 13:31:55'); +INSERT INTO `sys_job_log` VALUES (601, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2024-12-31 13:32:55'); +INSERT INTO `sys_job_log` VALUES (602, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 13:33:55'); +INSERT INTO `sys_job_log` VALUES (603, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:33毫秒', '0', '', '2024-12-31 13:33:55'); +INSERT INTO `sys_job_log` VALUES (604, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 13:34:55'); +INSERT INTO `sys_job_log` VALUES (605, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 13:35:55'); +INSERT INTO `sys_job_log` VALUES (606, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:33毫秒', '0', '', '2024-12-31 13:35:55'); +INSERT INTO `sys_job_log` VALUES (607, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 13:36:55'); +INSERT INTO `sys_job_log` VALUES (608, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 13:37:55'); +INSERT INTO `sys_job_log` VALUES (609, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:34毫秒', '0', '', '2024-12-31 13:37:55'); +INSERT INTO `sys_job_log` VALUES (610, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2024-12-31 13:38:55'); +INSERT INTO `sys_job_log` VALUES (611, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 13:39:55'); +INSERT INTO `sys_job_log` VALUES (612, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:35毫秒', '0', '', '2024-12-31 13:39:55'); +INSERT INTO `sys_job_log` VALUES (613, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 13:40:55'); +INSERT INTO `sys_job_log` VALUES (614, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 13:41:55'); +INSERT INTO `sys_job_log` VALUES (615, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:34毫秒', '0', '', '2024-12-31 13:41:55'); +INSERT INTO `sys_job_log` VALUES (616, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2024-12-31 13:42:55'); +INSERT INTO `sys_job_log` VALUES (617, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 13:43:55'); +INSERT INTO `sys_job_log` VALUES (618, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:33毫秒', '0', '', '2024-12-31 13:43:55'); +INSERT INTO `sys_job_log` VALUES (619, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 13:44:55'); +INSERT INTO `sys_job_log` VALUES (620, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 13:45:55'); +INSERT INTO `sys_job_log` VALUES (621, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:35毫秒', '0', '', '2024-12-31 13:45:55'); +INSERT INTO `sys_job_log` VALUES (622, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 13:46:55'); +INSERT INTO `sys_job_log` VALUES (623, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 13:47:55'); +INSERT INTO `sys_job_log` VALUES (624, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:33毫秒', '0', '', '2024-12-31 13:47:55'); +INSERT INTO `sys_job_log` VALUES (625, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2024-12-31 13:48:55'); +INSERT INTO `sys_job_log` VALUES (626, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 13:49:55'); +INSERT INTO `sys_job_log` VALUES (627, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:34毫秒', '0', '', '2024-12-31 13:49:55'); +INSERT INTO `sys_job_log` VALUES (628, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 13:50:55'); +INSERT INTO `sys_job_log` VALUES (629, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 13:51:55'); +INSERT INTO `sys_job_log` VALUES (630, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:34毫秒', '0', '', '2024-12-31 13:51:55'); +INSERT INTO `sys_job_log` VALUES (631, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 13:52:55'); +INSERT INTO `sys_job_log` VALUES (632, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 13:53:55'); +INSERT INTO `sys_job_log` VALUES (633, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:33毫秒', '0', '', '2024-12-31 13:53:55'); +INSERT INTO `sys_job_log` VALUES (634, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 13:54:55'); +INSERT INTO `sys_job_log` VALUES (635, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 13:55:55'); +INSERT INTO `sys_job_log` VALUES (636, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:35毫秒', '0', '', '2024-12-31 13:55:55'); +INSERT INTO `sys_job_log` VALUES (637, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 13:56:55'); +INSERT INTO `sys_job_log` VALUES (638, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 13:57:55'); +INSERT INTO `sys_job_log` VALUES (639, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:33毫秒', '0', '', '2024-12-31 13:57:55'); +INSERT INTO `sys_job_log` VALUES (640, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 13:58:55'); +INSERT INTO `sys_job_log` VALUES (641, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 13:59:55'); +INSERT INTO `sys_job_log` VALUES (642, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:34毫秒', '0', '', '2024-12-31 13:59:55'); +INSERT INTO `sys_job_log` VALUES (643, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 14:00:55'); +INSERT INTO `sys_job_log` VALUES (644, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 14:01:55'); +INSERT INTO `sys_job_log` VALUES (645, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:33毫秒', '0', '', '2024-12-31 14:01:55'); +INSERT INTO `sys_job_log` VALUES (646, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2024-12-31 14:02:55'); +INSERT INTO `sys_job_log` VALUES (647, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2024-12-31 14:03:55'); +INSERT INTO `sys_job_log` VALUES (648, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:36毫秒', '0', '', '2024-12-31 14:03:55'); +INSERT INTO `sys_job_log` VALUES (649, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2024-12-31 14:04:55'); +INSERT INTO `sys_job_log` VALUES (650, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 14:05:55'); +INSERT INTO `sys_job_log` VALUES (651, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:34毫秒', '0', '', '2024-12-31 14:05:55'); +INSERT INTO `sys_job_log` VALUES (652, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 14:06:55'); +INSERT INTO `sys_job_log` VALUES (653, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 14:07:55'); +INSERT INTO `sys_job_log` VALUES (654, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:33毫秒', '0', '', '2024-12-31 14:07:55'); +INSERT INTO `sys_job_log` VALUES (655, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2024-12-31 14:08:55'); +INSERT INTO `sys_job_log` VALUES (656, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 14:09:55'); +INSERT INTO `sys_job_log` VALUES (657, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:34毫秒', '0', '', '2024-12-31 14:09:55'); +INSERT INTO `sys_job_log` VALUES (658, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 14:10:55'); +INSERT INTO `sys_job_log` VALUES (659, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2024-12-31 14:11:55'); +INSERT INTO `sys_job_log` VALUES (660, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:33毫秒', '0', '', '2024-12-31 14:11:55'); +INSERT INTO `sys_job_log` VALUES (661, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 14:12:55'); +INSERT INTO `sys_job_log` VALUES (662, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 14:13:55'); +INSERT INTO `sys_job_log` VALUES (663, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:34毫秒', '0', '', '2024-12-31 14:13:55'); +INSERT INTO `sys_job_log` VALUES (664, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 14:14:55'); +INSERT INTO `sys_job_log` VALUES (665, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 14:15:55'); +INSERT INTO `sys_job_log` VALUES (666, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:32毫秒', '0', '', '2024-12-31 14:15:55'); +INSERT INTO `sys_job_log` VALUES (667, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 14:16:55'); +INSERT INTO `sys_job_log` VALUES (668, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2024-12-31 14:17:55'); +INSERT INTO `sys_job_log` VALUES (669, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:38毫秒', '0', '', '2024-12-31 14:17:55'); +INSERT INTO `sys_job_log` VALUES (670, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 14:18:55'); +INSERT INTO `sys_job_log` VALUES (671, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 14:19:55'); +INSERT INTO `sys_job_log` VALUES (672, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:34毫秒', '0', '', '2024-12-31 14:19:55'); +INSERT INTO `sys_job_log` VALUES (673, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 14:20:55'); +INSERT INTO `sys_job_log` VALUES (674, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 14:21:55'); +INSERT INTO `sys_job_log` VALUES (675, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:32毫秒', '0', '', '2024-12-31 14:21:55'); +INSERT INTO `sys_job_log` VALUES (676, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2024-12-31 14:22:55'); +INSERT INTO `sys_job_log` VALUES (677, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 14:23:55'); +INSERT INTO `sys_job_log` VALUES (678, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:34毫秒', '0', '', '2024-12-31 14:23:55'); +INSERT INTO `sys_job_log` VALUES (679, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2024-12-31 14:24:55'); +INSERT INTO `sys_job_log` VALUES (680, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 14:25:55'); +INSERT INTO `sys_job_log` VALUES (681, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:37毫秒', '0', '', '2024-12-31 14:25:55'); +INSERT INTO `sys_job_log` VALUES (682, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 14:26:55'); +INSERT INTO `sys_job_log` VALUES (683, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 14:27:55'); +INSERT INTO `sys_job_log` VALUES (684, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:39毫秒', '0', '', '2024-12-31 14:27:55'); +INSERT INTO `sys_job_log` VALUES (685, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 14:28:55'); +INSERT INTO `sys_job_log` VALUES (686, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 14:29:55'); +INSERT INTO `sys_job_log` VALUES (687, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:33毫秒', '0', '', '2024-12-31 14:29:55'); +INSERT INTO `sys_job_log` VALUES (688, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 14:30:55'); +INSERT INTO `sys_job_log` VALUES (689, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 14:31:55'); +INSERT INTO `sys_job_log` VALUES (690, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:32毫秒', '0', '', '2024-12-31 14:31:55'); +INSERT INTO `sys_job_log` VALUES (691, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2024-12-31 14:32:55'); +INSERT INTO `sys_job_log` VALUES (692, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 14:33:55'); +INSERT INTO `sys_job_log` VALUES (693, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:34毫秒', '0', '', '2024-12-31 14:33:55'); +INSERT INTO `sys_job_log` VALUES (694, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 14:34:55'); +INSERT INTO `sys_job_log` VALUES (695, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 14:35:55'); +INSERT INTO `sys_job_log` VALUES (696, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:33毫秒', '0', '', '2024-12-31 14:35:55'); +INSERT INTO `sys_job_log` VALUES (697, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 14:36:55'); +INSERT INTO `sys_job_log` VALUES (698, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 14:37:55'); +INSERT INTO `sys_job_log` VALUES (699, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:33毫秒', '0', '', '2024-12-31 14:37:55'); +INSERT INTO `sys_job_log` VALUES (700, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2024-12-31 14:38:55'); +INSERT INTO `sys_job_log` VALUES (701, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2024-12-31 14:39:55'); +INSERT INTO `sys_job_log` VALUES (702, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:34毫秒', '0', '', '2024-12-31 14:39:55'); +INSERT INTO `sys_job_log` VALUES (703, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 14:40:55'); +INSERT INTO `sys_job_log` VALUES (704, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 14:41:55'); +INSERT INTO `sys_job_log` VALUES (705, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:35毫秒', '0', '', '2024-12-31 14:41:55'); +INSERT INTO `sys_job_log` VALUES (706, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 14:42:55'); +INSERT INTO `sys_job_log` VALUES (707, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 14:43:55'); +INSERT INTO `sys_job_log` VALUES (708, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:33毫秒', '0', '', '2024-12-31 14:43:55'); +INSERT INTO `sys_job_log` VALUES (709, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 14:44:55'); +INSERT INTO `sys_job_log` VALUES (710, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 14:45:55'); +INSERT INTO `sys_job_log` VALUES (711, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:33毫秒', '0', '', '2024-12-31 14:45:55'); +INSERT INTO `sys_job_log` VALUES (712, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2024-12-31 14:46:55'); +INSERT INTO `sys_job_log` VALUES (713, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 14:47:55'); +INSERT INTO `sys_job_log` VALUES (714, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:33毫秒', '0', '', '2024-12-31 14:47:55'); +INSERT INTO `sys_job_log` VALUES (715, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 14:48:55'); +INSERT INTO `sys_job_log` VALUES (716, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 14:49:55'); +INSERT INTO `sys_job_log` VALUES (717, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:33毫秒', '0', '', '2024-12-31 14:49:55'); +INSERT INTO `sys_job_log` VALUES (718, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2024-12-31 14:50:55'); +INSERT INTO `sys_job_log` VALUES (719, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2024-12-31 14:51:55'); +INSERT INTO `sys_job_log` VALUES (720, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:33毫秒', '0', '', '2024-12-31 14:51:55'); +INSERT INTO `sys_job_log` VALUES (721, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 14:52:55'); +INSERT INTO `sys_job_log` VALUES (722, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 14:53:55'); +INSERT INTO `sys_job_log` VALUES (723, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:33毫秒', '0', '', '2024-12-31 14:53:55'); +INSERT INTO `sys_job_log` VALUES (724, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 14:54:55'); +INSERT INTO `sys_job_log` VALUES (725, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 14:55:55'); +INSERT INTO `sys_job_log` VALUES (726, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:33毫秒', '0', '', '2024-12-31 14:55:55'); +INSERT INTO `sys_job_log` VALUES (727, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2024-12-31 14:56:55'); +INSERT INTO `sys_job_log` VALUES (728, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 14:57:55'); +INSERT INTO `sys_job_log` VALUES (729, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:33毫秒', '0', '', '2024-12-31 14:57:55'); +INSERT INTO `sys_job_log` VALUES (730, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 14:58:55'); +INSERT INTO `sys_job_log` VALUES (731, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 14:59:55'); +INSERT INTO `sys_job_log` VALUES (732, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:38毫秒', '0', '', '2024-12-31 14:59:55'); +INSERT INTO `sys_job_log` VALUES (733, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 15:00:55'); +INSERT INTO `sys_job_log` VALUES (734, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2024-12-31 15:01:55'); +INSERT INTO `sys_job_log` VALUES (735, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:33毫秒', '0', '', '2024-12-31 15:01:55'); +INSERT INTO `sys_job_log` VALUES (736, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 15:02:55'); +INSERT INTO `sys_job_log` VALUES (737, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 15:03:55'); +INSERT INTO `sys_job_log` VALUES (738, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:33毫秒', '0', '', '2024-12-31 15:03:55'); +INSERT INTO `sys_job_log` VALUES (739, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 15:04:55'); +INSERT INTO `sys_job_log` VALUES (740, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 15:05:55'); +INSERT INTO `sys_job_log` VALUES (741, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:33毫秒', '0', '', '2024-12-31 15:05:55'); +INSERT INTO `sys_job_log` VALUES (742, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 15:06:55'); +INSERT INTO `sys_job_log` VALUES (743, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2024-12-31 15:07:55'); +INSERT INTO `sys_job_log` VALUES (744, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:36毫秒', '0', '', '2024-12-31 15:07:55'); +INSERT INTO `sys_job_log` VALUES (745, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 15:08:55'); +INSERT INTO `sys_job_log` VALUES (746, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 15:09:55'); +INSERT INTO `sys_job_log` VALUES (747, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:35毫秒', '0', '', '2024-12-31 15:09:55'); +INSERT INTO `sys_job_log` VALUES (748, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 15:10:55'); +INSERT INTO `sys_job_log` VALUES (749, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2024-12-31 15:11:55'); +INSERT INTO `sys_job_log` VALUES (750, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:38毫秒', '0', '', '2024-12-31 15:11:55'); +INSERT INTO `sys_job_log` VALUES (751, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 15:12:55'); +INSERT INTO `sys_job_log` VALUES (752, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2024-12-31 15:13:55'); +INSERT INTO `sys_job_log` VALUES (753, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:34毫秒', '0', '', '2024-12-31 15:13:55'); +INSERT INTO `sys_job_log` VALUES (754, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 15:14:55'); +INSERT INTO `sys_job_log` VALUES (755, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 15:15:55'); +INSERT INTO `sys_job_log` VALUES (756, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:32毫秒', '0', '', '2024-12-31 15:15:55'); +INSERT INTO `sys_job_log` VALUES (757, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 15:16:55'); +INSERT INTO `sys_job_log` VALUES (758, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 15:17:55'); +INSERT INTO `sys_job_log` VALUES (759, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:33毫秒', '0', '', '2024-12-31 15:17:55'); +INSERT INTO `sys_job_log` VALUES (760, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 15:18:55'); +INSERT INTO `sys_job_log` VALUES (761, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 15:19:55'); +INSERT INTO `sys_job_log` VALUES (762, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:33毫秒', '0', '', '2024-12-31 15:19:55'); +INSERT INTO `sys_job_log` VALUES (763, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 15:20:55'); +INSERT INTO `sys_job_log` VALUES (764, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2024-12-31 15:21:55'); +INSERT INTO `sys_job_log` VALUES (765, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:33毫秒', '0', '', '2024-12-31 15:21:55'); +INSERT INTO `sys_job_log` VALUES (766, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 15:22:55'); +INSERT INTO `sys_job_log` VALUES (767, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2024-12-31 15:23:55'); +INSERT INTO `sys_job_log` VALUES (768, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:32毫秒', '0', '', '2024-12-31 15:23:55'); +INSERT INTO `sys_job_log` VALUES (769, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2024-12-31 15:24:55'); +INSERT INTO `sys_job_log` VALUES (770, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 15:25:55'); +INSERT INTO `sys_job_log` VALUES (771, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:33毫秒', '0', '', '2024-12-31 15:25:55'); +INSERT INTO `sys_job_log` VALUES (772, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 15:26:55'); +INSERT INTO `sys_job_log` VALUES (773, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 15:27:55'); +INSERT INTO `sys_job_log` VALUES (774, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:32毫秒', '0', '', '2024-12-31 15:27:55'); +INSERT INTO `sys_job_log` VALUES (775, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2024-12-31 15:28:55'); +INSERT INTO `sys_job_log` VALUES (776, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 15:29:55'); +INSERT INTO `sys_job_log` VALUES (777, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:33毫秒', '0', '', '2024-12-31 15:29:55'); +INSERT INTO `sys_job_log` VALUES (778, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 15:30:55'); +INSERT INTO `sys_job_log` VALUES (779, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 15:31:55'); +INSERT INTO `sys_job_log` VALUES (780, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:33毫秒', '0', '', '2024-12-31 15:31:55'); +INSERT INTO `sys_job_log` VALUES (781, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 15:32:55'); +INSERT INTO `sys_job_log` VALUES (782, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 15:33:55'); +INSERT INTO `sys_job_log` VALUES (783, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:33毫秒', '0', '', '2024-12-31 15:33:55'); +INSERT INTO `sys_job_log` VALUES (784, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 15:34:55'); +INSERT INTO `sys_job_log` VALUES (785, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 15:35:55'); +INSERT INTO `sys_job_log` VALUES (786, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:39毫秒', '0', '', '2024-12-31 15:35:55'); +INSERT INTO `sys_job_log` VALUES (787, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2024-12-31 15:36:55'); +INSERT INTO `sys_job_log` VALUES (788, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 15:37:55'); +INSERT INTO `sys_job_log` VALUES (789, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:33毫秒', '0', '', '2024-12-31 15:37:55'); +INSERT INTO `sys_job_log` VALUES (790, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2024-12-31 15:38:55'); +INSERT INTO `sys_job_log` VALUES (791, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2024-12-31 15:39:55'); +INSERT INTO `sys_job_log` VALUES (792, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:33毫秒', '0', '', '2024-12-31 15:39:55'); +INSERT INTO `sys_job_log` VALUES (793, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2024-12-31 15:40:55'); +INSERT INTO `sys_job_log` VALUES (794, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 15:41:55'); +INSERT INTO `sys_job_log` VALUES (795, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:36毫秒', '0', '', '2024-12-31 15:41:55'); +INSERT INTO `sys_job_log` VALUES (796, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2024-12-31 15:42:55'); +INSERT INTO `sys_job_log` VALUES (797, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2024-12-31 15:43:55'); +INSERT INTO `sys_job_log` VALUES (798, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:36毫秒', '0', '', '2024-12-31 15:43:55'); +INSERT INTO `sys_job_log` VALUES (799, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2024-12-31 15:44:55'); +INSERT INTO `sys_job_log` VALUES (800, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 15:45:55'); +INSERT INTO `sys_job_log` VALUES (801, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:36毫秒', '0', '', '2024-12-31 15:45:55'); +INSERT INTO `sys_job_log` VALUES (802, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2024-12-31 15:46:55'); +INSERT INTO `sys_job_log` VALUES (803, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2024-12-31 15:47:55'); +INSERT INTO `sys_job_log` VALUES (804, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:38毫秒', '0', '', '2024-12-31 15:47:55'); +INSERT INTO `sys_job_log` VALUES (805, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 15:48:55'); +INSERT INTO `sys_job_log` VALUES (806, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2024-12-31 15:49:55'); +INSERT INTO `sys_job_log` VALUES (807, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:36毫秒', '0', '', '2024-12-31 15:49:55'); +INSERT INTO `sys_job_log` VALUES (808, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2024-12-31 15:50:55'); +INSERT INTO `sys_job_log` VALUES (809, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 15:51:55'); +INSERT INTO `sys_job_log` VALUES (810, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:34毫秒', '0', '', '2024-12-31 15:51:55'); +INSERT INTO `sys_job_log` VALUES (811, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 15:52:55'); +INSERT INTO `sys_job_log` VALUES (812, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2024-12-31 15:53:55'); +INSERT INTO `sys_job_log` VALUES (813, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:36毫秒', '0', '', '2024-12-31 15:53:55'); +INSERT INTO `sys_job_log` VALUES (814, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2024-12-31 15:54:55'); +INSERT INTO `sys_job_log` VALUES (815, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 15:55:55'); +INSERT INTO `sys_job_log` VALUES (816, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:36毫秒', '0', '', '2024-12-31 15:55:55'); +INSERT INTO `sys_job_log` VALUES (817, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2024-12-31 15:56:55'); +INSERT INTO `sys_job_log` VALUES (818, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2024-12-31 15:57:55'); +INSERT INTO `sys_job_log` VALUES (819, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:40毫秒', '0', '', '2024-12-31 15:57:55'); +INSERT INTO `sys_job_log` VALUES (820, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2024-12-31 15:58:55'); +INSERT INTO `sys_job_log` VALUES (821, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 15:59:55'); +INSERT INTO `sys_job_log` VALUES (822, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:34毫秒', '0', '', '2024-12-31 15:59:55'); +INSERT INTO `sys_job_log` VALUES (823, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2024-12-31 16:00:55'); +INSERT INTO `sys_job_log` VALUES (824, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 16:01:55'); +INSERT INTO `sys_job_log` VALUES (825, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:35毫秒', '0', '', '2024-12-31 16:01:55'); +INSERT INTO `sys_job_log` VALUES (826, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2024-12-31 16:02:55'); +INSERT INTO `sys_job_log` VALUES (827, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 16:03:55'); +INSERT INTO `sys_job_log` VALUES (828, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:35毫秒', '0', '', '2024-12-31 16:03:55'); +INSERT INTO `sys_job_log` VALUES (829, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2024-12-31 16:04:54'); +INSERT INTO `sys_job_log` VALUES (830, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:4毫秒', '0', '', '2024-12-31 16:05:54'); +INSERT INTO `sys_job_log` VALUES (831, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:36毫秒', '0', '', '2024-12-31 16:05:55'); +INSERT INTO `sys_job_log` VALUES (832, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2024-12-31 16:06:54'); +INSERT INTO `sys_job_log` VALUES (833, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 16:07:54'); +INSERT INTO `sys_job_log` VALUES (834, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:34毫秒', '0', '', '2024-12-31 16:07:55'); +INSERT INTO `sys_job_log` VALUES (835, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 16:08:55'); +INSERT INTO `sys_job_log` VALUES (836, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 16:09:54'); +INSERT INTO `sys_job_log` VALUES (837, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:34毫秒', '0', '', '2024-12-31 16:09:55'); +INSERT INTO `sys_job_log` VALUES (838, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2024-12-31 16:10:54'); +INSERT INTO `sys_job_log` VALUES (839, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2024-12-31 16:11:54'); +INSERT INTO `sys_job_log` VALUES (840, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:35毫秒', '0', '', '2024-12-31 16:11:55'); +INSERT INTO `sys_job_log` VALUES (841, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2024-12-31 16:12:54'); +INSERT INTO `sys_job_log` VALUES (842, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2024-12-31 16:13:54'); +INSERT INTO `sys_job_log` VALUES (843, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:37毫秒', '0', '', '2024-12-31 16:13:55'); +INSERT INTO `sys_job_log` VALUES (844, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 16:14:54'); +INSERT INTO `sys_job_log` VALUES (845, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 16:15:54'); +INSERT INTO `sys_job_log` VALUES (846, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:35毫秒', '0', '', '2024-12-31 16:15:55'); +INSERT INTO `sys_job_log` VALUES (847, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 16:16:54'); +INSERT INTO `sys_job_log` VALUES (848, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2024-12-31 16:17:54'); +INSERT INTO `sys_job_log` VALUES (849, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:35毫秒', '0', '', '2024-12-31 16:17:55'); +INSERT INTO `sys_job_log` VALUES (850, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2024-12-31 16:18:54'); +INSERT INTO `sys_job_log` VALUES (851, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2024-12-31 16:19:54'); +INSERT INTO `sys_job_log` VALUES (852, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:41毫秒', '0', '', '2024-12-31 16:19:55'); +INSERT INTO `sys_job_log` VALUES (853, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 16:20:54'); +INSERT INTO `sys_job_log` VALUES (854, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 16:21:54'); +INSERT INTO `sys_job_log` VALUES (855, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:35毫秒', '0', '', '2024-12-31 16:21:55'); +INSERT INTO `sys_job_log` VALUES (856, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 16:22:54'); +INSERT INTO `sys_job_log` VALUES (857, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 16:23:54'); +INSERT INTO `sys_job_log` VALUES (858, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:35毫秒', '0', '', '2024-12-31 16:23:55'); +INSERT INTO `sys_job_log` VALUES (859, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 16:24:54'); +INSERT INTO `sys_job_log` VALUES (860, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 16:25:54'); +INSERT INTO `sys_job_log` VALUES (861, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:34毫秒', '0', '', '2024-12-31 16:25:55'); +INSERT INTO `sys_job_log` VALUES (862, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2024-12-31 16:26:54'); +INSERT INTO `sys_job_log` VALUES (863, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2024-12-31 16:27:54'); +INSERT INTO `sys_job_log` VALUES (864, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:39毫秒', '0', '', '2024-12-31 16:27:55'); +INSERT INTO `sys_job_log` VALUES (865, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 16:28:54'); +INSERT INTO `sys_job_log` VALUES (866, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 16:29:54'); +INSERT INTO `sys_job_log` VALUES (867, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:33毫秒', '0', '', '2024-12-31 16:29:54'); +INSERT INTO `sys_job_log` VALUES (868, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 16:30:54'); +INSERT INTO `sys_job_log` VALUES (869, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2024-12-31 16:31:54'); +INSERT INTO `sys_job_log` VALUES (870, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:37毫秒', '0', '', '2024-12-31 16:31:54'); +INSERT INTO `sys_job_log` VALUES (871, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2024-12-31 16:32:54'); +INSERT INTO `sys_job_log` VALUES (872, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 16:33:54'); +INSERT INTO `sys_job_log` VALUES (873, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:38毫秒', '0', '', '2024-12-31 16:33:54'); +INSERT INTO `sys_job_log` VALUES (874, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 16:34:54'); +INSERT INTO `sys_job_log` VALUES (875, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 16:35:54'); +INSERT INTO `sys_job_log` VALUES (876, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:37毫秒', '0', '', '2024-12-31 16:35:54'); +INSERT INTO `sys_job_log` VALUES (877, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2024-12-31 16:36:54'); +INSERT INTO `sys_job_log` VALUES (878, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 16:37:54'); +INSERT INTO `sys_job_log` VALUES (879, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:35毫秒', '0', '', '2024-12-31 16:37:54'); +INSERT INTO `sys_job_log` VALUES (880, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 16:38:54'); +INSERT INTO `sys_job_log` VALUES (881, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2024-12-31 16:39:54'); +INSERT INTO `sys_job_log` VALUES (882, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:34毫秒', '0', '', '2024-12-31 16:39:54'); +INSERT INTO `sys_job_log` VALUES (883, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2024-12-31 16:40:54'); +INSERT INTO `sys_job_log` VALUES (884, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 16:41:54'); +INSERT INTO `sys_job_log` VALUES (885, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:41毫秒', '0', '', '2024-12-31 16:41:54'); +INSERT INTO `sys_job_log` VALUES (886, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 16:42:54'); +INSERT INTO `sys_job_log` VALUES (887, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2024-12-31 16:43:54'); +INSERT INTO `sys_job_log` VALUES (888, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:32毫秒', '0', '', '2024-12-31 16:43:54'); +INSERT INTO `sys_job_log` VALUES (889, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 16:44:54'); +INSERT INTO `sys_job_log` VALUES (890, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 16:45:54'); +INSERT INTO `sys_job_log` VALUES (891, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:40毫秒', '0', '', '2024-12-31 16:45:54'); +INSERT INTO `sys_job_log` VALUES (892, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2024-12-31 16:46:54'); +INSERT INTO `sys_job_log` VALUES (893, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2024-12-31 16:47:54'); +INSERT INTO `sys_job_log` VALUES (894, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:36毫秒', '0', '', '2024-12-31 16:47:54'); +INSERT INTO `sys_job_log` VALUES (895, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2024-12-31 16:48:54'); +INSERT INTO `sys_job_log` VALUES (896, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 16:49:54'); +INSERT INTO `sys_job_log` VALUES (897, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:37毫秒', '0', '', '2024-12-31 16:49:54'); +INSERT INTO `sys_job_log` VALUES (898, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2024-12-31 16:50:54'); +INSERT INTO `sys_job_log` VALUES (899, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 16:51:54'); +INSERT INTO `sys_job_log` VALUES (900, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:33毫秒', '0', '', '2024-12-31 16:51:54'); +INSERT INTO `sys_job_log` VALUES (901, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 16:52:54'); +INSERT INTO `sys_job_log` VALUES (902, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 16:53:54'); +INSERT INTO `sys_job_log` VALUES (903, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:36毫秒', '0', '', '2024-12-31 16:53:54'); +INSERT INTO `sys_job_log` VALUES (904, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2024-12-31 16:54:54'); +INSERT INTO `sys_job_log` VALUES (905, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 16:55:54'); +INSERT INTO `sys_job_log` VALUES (906, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:33毫秒', '0', '', '2024-12-31 16:55:54'); +INSERT INTO `sys_job_log` VALUES (907, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 16:56:54'); +INSERT INTO `sys_job_log` VALUES (908, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 16:57:54'); +INSERT INTO `sys_job_log` VALUES (909, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:38毫秒', '0', '', '2024-12-31 16:57:54'); +INSERT INTO `sys_job_log` VALUES (910, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2024-12-31 16:58:54'); +INSERT INTO `sys_job_log` VALUES (911, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2024-12-31 16:59:54'); +INSERT INTO `sys_job_log` VALUES (912, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:34毫秒', '0', '', '2024-12-31 16:59:54'); +INSERT INTO `sys_job_log` VALUES (913, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 17:00:54'); +INSERT INTO `sys_job_log` VALUES (914, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 17:01:54'); +INSERT INTO `sys_job_log` VALUES (915, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:33毫秒', '0', '', '2024-12-31 17:01:54'); +INSERT INTO `sys_job_log` VALUES (916, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 17:02:54'); +INSERT INTO `sys_job_log` VALUES (917, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 17:03:54'); +INSERT INTO `sys_job_log` VALUES (918, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:37毫秒', '0', '', '2024-12-31 17:03:54'); +INSERT INTO `sys_job_log` VALUES (919, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2024-12-31 17:04:54'); +INSERT INTO `sys_job_log` VALUES (920, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2024-12-31 17:05:54'); +INSERT INTO `sys_job_log` VALUES (921, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:35毫秒', '0', '', '2024-12-31 17:05:54'); +INSERT INTO `sys_job_log` VALUES (922, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 17:06:54'); +INSERT INTO `sys_job_log` VALUES (923, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 17:07:54'); +INSERT INTO `sys_job_log` VALUES (924, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:38毫秒', '0', '', '2024-12-31 17:07:54'); +INSERT INTO `sys_job_log` VALUES (925, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2024-12-31 17:08:54'); +INSERT INTO `sys_job_log` VALUES (926, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2024-12-31 17:09:54'); +INSERT INTO `sys_job_log` VALUES (927, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:36毫秒', '0', '', '2024-12-31 17:09:54'); +INSERT INTO `sys_job_log` VALUES (928, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 17:10:54'); +INSERT INTO `sys_job_log` VALUES (929, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 17:11:54'); +INSERT INTO `sys_job_log` VALUES (930, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:36毫秒', '0', '', '2024-12-31 17:11:54'); +INSERT INTO `sys_job_log` VALUES (931, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 17:12:54'); +INSERT INTO `sys_job_log` VALUES (932, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2024-12-31 17:13:54'); +INSERT INTO `sys_job_log` VALUES (933, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:33毫秒', '0', '', '2024-12-31 17:13:54'); +INSERT INTO `sys_job_log` VALUES (934, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 17:14:54'); +INSERT INTO `sys_job_log` VALUES (935, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 17:15:54'); +INSERT INTO `sys_job_log` VALUES (936, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:34毫秒', '0', '', '2024-12-31 17:15:54'); +INSERT INTO `sys_job_log` VALUES (937, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 17:16:54'); +INSERT INTO `sys_job_log` VALUES (938, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 17:17:54'); +INSERT INTO `sys_job_log` VALUES (939, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:34毫秒', '0', '', '2024-12-31 17:17:54'); +INSERT INTO `sys_job_log` VALUES (940, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2024-12-31 17:18:54'); +INSERT INTO `sys_job_log` VALUES (941, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 17:19:54'); +INSERT INTO `sys_job_log` VALUES (942, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:34毫秒', '0', '', '2024-12-31 17:19:54'); +INSERT INTO `sys_job_log` VALUES (943, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 17:20:54'); +INSERT INTO `sys_job_log` VALUES (944, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 17:21:59'); +INSERT INTO `sys_job_log` VALUES (945, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:34毫秒', '0', '', '2024-12-31 17:22:00'); +INSERT INTO `sys_job_log` VALUES (946, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 17:22:59'); +INSERT INTO `sys_job_log` VALUES (947, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 17:23:59'); +INSERT INTO `sys_job_log` VALUES (948, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:35毫秒', '0', '', '2024-12-31 17:24:00'); +INSERT INTO `sys_job_log` VALUES (949, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 17:24:59'); +INSERT INTO `sys_job_log` VALUES (950, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 17:25:59'); +INSERT INTO `sys_job_log` VALUES (951, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:33毫秒', '0', '', '2024-12-31 17:26:00'); +INSERT INTO `sys_job_log` VALUES (952, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2024-12-31 17:26:59'); +INSERT INTO `sys_job_log` VALUES (953, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 17:27:59'); +INSERT INTO `sys_job_log` VALUES (954, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:34毫秒', '0', '', '2024-12-31 17:28:00'); +INSERT INTO `sys_job_log` VALUES (955, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2024-12-31 17:28:59'); +INSERT INTO `sys_job_log` VALUES (956, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 17:29:59'); +INSERT INTO `sys_job_log` VALUES (957, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:34毫秒', '0', '', '2024-12-31 17:30:00'); +INSERT INTO `sys_job_log` VALUES (958, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 17:30:59'); +INSERT INTO `sys_job_log` VALUES (959, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2024-12-31 17:31:59'); +INSERT INTO `sys_job_log` VALUES (960, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:33毫秒', '0', '', '2024-12-31 17:32:00'); +INSERT INTO `sys_job_log` VALUES (961, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 17:32:59'); +INSERT INTO `sys_job_log` VALUES (962, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 17:33:59'); +INSERT INTO `sys_job_log` VALUES (963, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:41毫秒', '0', '', '2024-12-31 17:34:00'); +INSERT INTO `sys_job_log` VALUES (964, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2024-12-31 17:34:59'); +INSERT INTO `sys_job_log` VALUES (965, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 17:35:59'); +INSERT INTO `sys_job_log` VALUES (966, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:33毫秒', '0', '', '2024-12-31 17:35:59'); +INSERT INTO `sys_job_log` VALUES (967, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 17:36:59'); +INSERT INTO `sys_job_log` VALUES (968, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 17:37:59'); +INSERT INTO `sys_job_log` VALUES (969, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:35毫秒', '0', '', '2024-12-31 17:37:59'); +INSERT INTO `sys_job_log` VALUES (970, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 17:38:59'); +INSERT INTO `sys_job_log` VALUES (971, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 17:39:59'); +INSERT INTO `sys_job_log` VALUES (972, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:35毫秒', '0', '', '2024-12-31 17:39:59'); +INSERT INTO `sys_job_log` VALUES (973, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 17:40:59'); +INSERT INTO `sys_job_log` VALUES (974, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 17:41:59'); +INSERT INTO `sys_job_log` VALUES (975, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:35毫秒', '0', '', '2024-12-31 17:41:59'); +INSERT INTO `sys_job_log` VALUES (976, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 17:42:59'); +INSERT INTO `sys_job_log` VALUES (977, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2024-12-31 17:43:59'); +INSERT INTO `sys_job_log` VALUES (978, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:33毫秒', '0', '', '2024-12-31 17:43:59'); +INSERT INTO `sys_job_log` VALUES (979, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 17:44:59'); +INSERT INTO `sys_job_log` VALUES (980, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 17:45:59'); +INSERT INTO `sys_job_log` VALUES (981, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:32毫秒', '0', '', '2024-12-31 17:45:59'); +INSERT INTO `sys_job_log` VALUES (982, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 17:46:59'); +INSERT INTO `sys_job_log` VALUES (983, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 17:47:59'); +INSERT INTO `sys_job_log` VALUES (984, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:34毫秒', '0', '', '2024-12-31 17:47:59'); +INSERT INTO `sys_job_log` VALUES (985, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2024-12-31 17:48:59'); +INSERT INTO `sys_job_log` VALUES (986, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2024-12-31 17:49:59'); +INSERT INTO `sys_job_log` VALUES (987, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:34毫秒', '0', '', '2024-12-31 17:49:59'); +INSERT INTO `sys_job_log` VALUES (988, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:4毫秒', '0', '', '2024-12-31 17:50:59'); +INSERT INTO `sys_job_log` VALUES (989, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:86毫秒', '0', '', '2025-01-01 12:26:03'); +INSERT INTO `sys_job_log` VALUES (990, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:597毫秒', '0', '', '2025-01-01 12:26:04'); +INSERT INTO `sys_job_log` VALUES (991, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:26毫秒', '0', '', '2025-01-01 12:26:58'); +INSERT INTO `sys_job_log` VALUES (992, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:62毫秒', '0', '', '2025-01-01 12:27:58'); +INSERT INTO `sys_job_log` VALUES (993, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:619毫秒', '0', '', '2025-01-01 12:27:59'); +INSERT INTO `sys_job_log` VALUES (994, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:77毫秒', '0', '', '2025-01-01 12:28:58'); +INSERT INTO `sys_job_log` VALUES (995, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:33毫秒', '0', '', '2025-01-01 12:29:58'); +INSERT INTO `sys_job_log` VALUES (996, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:700毫秒', '0', '', '2025-01-01 12:29:59'); +INSERT INTO `sys_job_log` VALUES (997, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:36毫秒', '0', '', '2025-01-01 12:30:58'); +INSERT INTO `sys_job_log` VALUES (998, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:33毫秒', '0', '', '2025-01-01 12:31:58'); +INSERT INTO `sys_job_log` VALUES (999, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:656毫秒', '0', '', '2025-01-01 12:31:59'); +INSERT INTO `sys_job_log` VALUES (1000, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:37毫秒', '0', '', '2025-01-01 12:32:58'); +INSERT INTO `sys_job_log` VALUES (1001, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:30毫秒', '0', '', '2025-01-01 12:33:58'); +INSERT INTO `sys_job_log` VALUES (1002, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:794毫秒', '0', '', '2025-01-01 12:33:59'); +INSERT INTO `sys_job_log` VALUES (1003, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:169毫秒', '0', '', '2025-01-01 12:34:58'); +INSERT INTO `sys_job_log` VALUES (1004, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:137毫秒', '0', '', '2025-01-01 12:35:58'); +INSERT INTO `sys_job_log` VALUES (1005, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:678毫秒', '0', '', '2025-01-01 12:35:59'); +INSERT INTO `sys_job_log` VALUES (1006, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:35毫秒', '0', '', '2025-01-01 12:36:58'); +INSERT INTO `sys_job_log` VALUES (1007, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:34毫秒', '0', '', '2025-01-01 12:37:58'); +INSERT INTO `sys_job_log` VALUES (1008, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:565毫秒', '0', '', '2025-01-01 12:37:59'); +INSERT INTO `sys_job_log` VALUES (1009, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:32毫秒', '0', '', '2025-01-01 12:38:58'); +INSERT INTO `sys_job_log` VALUES (1010, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:30毫秒', '0', '', '2025-01-01 12:39:58'); +INSERT INTO `sys_job_log` VALUES (1011, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:549毫秒', '0', '', '2025-01-01 12:39:59'); +INSERT INTO `sys_job_log` VALUES (1012, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:34毫秒', '0', '', '2025-01-01 12:40:58'); +INSERT INTO `sys_job_log` VALUES (1013, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:33毫秒', '0', '', '2025-01-01 12:41:58'); +INSERT INTO `sys_job_log` VALUES (1014, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:816毫秒', '0', '', '2025-01-01 12:41:59'); +INSERT INTO `sys_job_log` VALUES (1015, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:30毫秒', '0', '', '2025-01-01 12:42:58'); +INSERT INTO `sys_job_log` VALUES (1016, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:30毫秒', '0', '', '2025-01-01 12:43:58'); +INSERT INTO `sys_job_log` VALUES (1017, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:561毫秒', '0', '', '2025-01-01 12:43:59'); +INSERT INTO `sys_job_log` VALUES (1018, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:32毫秒', '0', '', '2025-01-01 12:44:58'); +INSERT INTO `sys_job_log` VALUES (1019, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:63毫秒', '0', '', '2025-01-01 12:45:58'); +INSERT INTO `sys_job_log` VALUES (1020, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:539毫秒', '0', '', '2025-01-01 12:45:59'); +INSERT INTO `sys_job_log` VALUES (1021, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:39毫秒', '0', '', '2025-01-01 12:46:58'); +INSERT INTO `sys_job_log` VALUES (1022, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:28毫秒', '0', '', '2025-01-01 12:47:58'); +INSERT INTO `sys_job_log` VALUES (1023, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:561毫秒', '0', '', '2025-01-01 12:47:59'); +INSERT INTO `sys_job_log` VALUES (1024, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:33毫秒', '0', '', '2025-01-01 12:48:58'); +INSERT INTO `sys_job_log` VALUES (1025, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:50毫秒', '0', '', '2025-01-01 12:49:58'); +INSERT INTO `sys_job_log` VALUES (1026, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:541毫秒', '0', '', '2025-01-01 12:49:59'); +INSERT INTO `sys_job_log` VALUES (1027, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:37毫秒', '0', '', '2025-01-01 12:50:58'); +INSERT INTO `sys_job_log` VALUES (1028, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:30毫秒', '0', '', '2025-01-01 12:51:58'); +INSERT INTO `sys_job_log` VALUES (1029, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:683毫秒', '0', '', '2025-01-01 12:51:59'); +INSERT INTO `sys_job_log` VALUES (1030, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:32毫秒', '0', '', '2025-01-01 12:52:58'); +INSERT INTO `sys_job_log` VALUES (1031, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:34毫秒', '0', '', '2025-01-01 12:53:58'); +INSERT INTO `sys_job_log` VALUES (1032, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:650毫秒', '0', '', '2025-01-01 12:53:59'); +INSERT INTO `sys_job_log` VALUES (1033, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:32毫秒', '0', '', '2025-01-01 12:54:58'); +INSERT INTO `sys_job_log` VALUES (1034, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:32毫秒', '0', '', '2025-01-01 12:55:58'); +INSERT INTO `sys_job_log` VALUES (1035, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:556毫秒', '0', '', '2025-01-01 12:55:59'); +INSERT INTO `sys_job_log` VALUES (1036, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:30毫秒', '0', '', '2025-01-01 12:56:58'); +INSERT INTO `sys_job_log` VALUES (1037, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:140毫秒', '0', '', '2025-01-01 12:57:58'); +INSERT INTO `sys_job_log` VALUES (1038, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:659毫秒', '0', '', '2025-01-01 12:57:59'); +INSERT INTO `sys_job_log` VALUES (1039, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:33毫秒', '0', '', '2025-01-01 12:58:58'); +INSERT INTO `sys_job_log` VALUES (1040, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:54毫秒', '0', '', '2025-01-01 12:59:58'); +INSERT INTO `sys_job_log` VALUES (1041, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:590毫秒', '0', '', '2025-01-01 12:59:59'); +INSERT INTO `sys_job_log` VALUES (1042, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:28毫秒', '0', '', '2025-01-01 13:00:58'); +INSERT INTO `sys_job_log` VALUES (1043, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:30毫秒', '0', '', '2025-01-01 13:01:58'); +INSERT INTO `sys_job_log` VALUES (1044, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:676毫秒', '0', '', '2025-01-01 13:01:59'); +INSERT INTO `sys_job_log` VALUES (1045, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:118毫秒', '0', '', '2025-01-01 13:02:58'); +INSERT INTO `sys_job_log` VALUES (1046, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:31毫秒', '0', '', '2025-01-01 13:03:58'); +INSERT INTO `sys_job_log` VALUES (1047, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:566毫秒', '0', '', '2025-01-01 13:03:59'); +INSERT INTO `sys_job_log` VALUES (1048, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:29毫秒', '0', '', '2025-01-01 13:04:58'); +INSERT INTO `sys_job_log` VALUES (1049, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:43毫秒', '0', '', '2025-01-01 13:07:58'); +INSERT INTO `sys_job_log` VALUES (1050, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:584毫秒', '0', '', '2025-01-01 13:07:59'); +INSERT INTO `sys_job_log` VALUES (1051, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:27毫秒', '0', '', '2025-01-01 13:08:58'); +INSERT INTO `sys_job_log` VALUES (1052, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:32毫秒', '0', '', '2025-01-01 13:09:58'); +INSERT INTO `sys_job_log` VALUES (1053, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:526毫秒', '0', '', '2025-01-01 13:09:59'); +INSERT INTO `sys_job_log` VALUES (1054, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:30毫秒', '0', '', '2025-01-01 13:10:58'); +INSERT INTO `sys_job_log` VALUES (1055, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:31毫秒', '0', '', '2025-01-01 13:11:58'); +INSERT INTO `sys_job_log` VALUES (1056, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:575毫秒', '0', '', '2025-01-01 13:11:59'); +INSERT INTO `sys_job_log` VALUES (1057, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:74毫秒', '0', '', '2025-01-01 13:12:58'); +INSERT INTO `sys_job_log` VALUES (1058, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:31毫秒', '0', '', '2025-01-01 13:13:58'); +INSERT INTO `sys_job_log` VALUES (1059, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:559毫秒', '0', '', '2025-01-01 13:13:59'); +INSERT INTO `sys_job_log` VALUES (1060, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:30毫秒', '0', '', '2025-01-01 13:14:58'); +INSERT INTO `sys_job_log` VALUES (1061, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:32毫秒', '0', '', '2025-01-01 13:15:58'); +INSERT INTO `sys_job_log` VALUES (1062, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:520毫秒', '0', '', '2025-01-01 13:15:59'); +INSERT INTO `sys_job_log` VALUES (1063, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:30毫秒', '0', '', '2025-01-01 13:16:58'); +INSERT INTO `sys_job_log` VALUES (1064, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:72毫秒', '0', '', '2025-01-01 13:17:58'); +INSERT INTO `sys_job_log` VALUES (1065, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:800毫秒', '0', '', '2025-01-01 13:17:59'); +INSERT INTO `sys_job_log` VALUES (1066, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:33毫秒', '0', '', '2025-01-01 13:18:58'); +INSERT INTO `sys_job_log` VALUES (1067, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:37毫秒', '0', '', '2025-01-01 13:19:58'); +INSERT INTO `sys_job_log` VALUES (1068, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:568毫秒', '0', '', '2025-01-01 13:19:59'); +INSERT INTO `sys_job_log` VALUES (1069, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:37毫秒', '0', '', '2025-01-01 13:20:58'); +INSERT INTO `sys_job_log` VALUES (1070, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:32毫秒', '0', '', '2025-01-01 13:21:58'); +INSERT INTO `sys_job_log` VALUES (1071, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:563毫秒', '0', '', '2025-01-01 13:21:59'); +INSERT INTO `sys_job_log` VALUES (1072, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:30毫秒', '0', '', '2025-01-01 13:22:58'); +INSERT INTO `sys_job_log` VALUES (1073, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:32毫秒', '0', '', '2025-01-01 13:23:58'); +INSERT INTO `sys_job_log` VALUES (1074, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:643毫秒', '0', '', '2025-01-01 13:23:59'); +INSERT INTO `sys_job_log` VALUES (1075, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:30毫秒', '0', '', '2025-01-01 13:24:58'); +INSERT INTO `sys_job_log` VALUES (1076, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:32毫秒', '0', '', '2025-01-01 13:25:58'); +INSERT INTO `sys_job_log` VALUES (1077, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:548毫秒', '0', '', '2025-01-01 13:25:59'); +INSERT INTO `sys_job_log` VALUES (1078, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:33毫秒', '0', '', '2025-01-01 13:26:58'); +INSERT INTO `sys_job_log` VALUES (1079, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:28毫秒', '0', '', '2025-01-01 13:27:58'); +INSERT INTO `sys_job_log` VALUES (1080, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:541毫秒', '0', '', '2025-01-01 13:27:59'); +INSERT INTO `sys_job_log` VALUES (1081, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:30毫秒', '0', '', '2025-01-01 13:28:58'); +INSERT INTO `sys_job_log` VALUES (1082, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:35毫秒', '0', '', '2025-01-01 13:29:58'); +INSERT INTO `sys_job_log` VALUES (1083, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:608毫秒', '0', '', '2025-01-01 13:29:59'); +INSERT INTO `sys_job_log` VALUES (1084, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:31毫秒', '0', '', '2025-01-01 13:30:58'); +INSERT INTO `sys_job_log` VALUES (1085, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:46毫秒', '0', '', '2025-01-01 13:31:58'); +INSERT INTO `sys_job_log` VALUES (1086, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:1016毫秒', '0', '', '2025-01-01 13:31:59'); +INSERT INTO `sys_job_log` VALUES (1087, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:31毫秒', '0', '', '2025-01-01 13:32:58'); +INSERT INTO `sys_job_log` VALUES (1088, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:32毫秒', '0', '', '2025-01-01 13:33:58'); +INSERT INTO `sys_job_log` VALUES (1089, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:580毫秒', '0', '', '2025-01-01 13:33:59'); +INSERT INTO `sys_job_log` VALUES (1090, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:35毫秒', '0', '', '2025-01-01 13:34:58'); +INSERT INTO `sys_job_log` VALUES (1091, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:31毫秒', '0', '', '2025-01-01 13:35:58'); +INSERT INTO `sys_job_log` VALUES (1092, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:567毫秒', '0', '', '2025-01-01 13:35:59'); +INSERT INTO `sys_job_log` VALUES (1093, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:33毫秒', '0', '', '2025-01-01 13:36:58'); +INSERT INTO `sys_job_log` VALUES (1094, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:158毫秒', '0', '', '2025-01-01 13:37:58'); +INSERT INTO `sys_job_log` VALUES (1095, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:683毫秒', '0', '', '2025-01-01 13:37:59'); +INSERT INTO `sys_job_log` VALUES (1096, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:30毫秒', '0', '', '2025-01-01 13:38:58'); +INSERT INTO `sys_job_log` VALUES (1097, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:31毫秒', '0', '', '2025-01-01 13:39:58'); +INSERT INTO `sys_job_log` VALUES (1098, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:534毫秒', '0', '', '2025-01-01 13:39:59'); +INSERT INTO `sys_job_log` VALUES (1099, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:30毫秒', '0', '', '2025-01-01 13:40:58'); +INSERT INTO `sys_job_log` VALUES (1100, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:28毫秒', '0', '', '2025-01-01 13:41:58'); +INSERT INTO `sys_job_log` VALUES (1101, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:629毫秒', '0', '', '2025-01-01 13:41:59'); +INSERT INTO `sys_job_log` VALUES (1102, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:31毫秒', '0', '', '2025-01-01 13:42:58'); +INSERT INTO `sys_job_log` VALUES (1103, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:34毫秒', '0', '', '2025-01-01 13:43:58'); +INSERT INTO `sys_job_log` VALUES (1104, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:576毫秒', '0', '', '2025-01-01 13:43:59'); +INSERT INTO `sys_job_log` VALUES (1105, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:31毫秒', '0', '', '2025-01-01 13:44:58'); +INSERT INTO `sys_job_log` VALUES (1106, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:32毫秒', '0', '', '2025-01-01 13:45:58'); +INSERT INTO `sys_job_log` VALUES (1107, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:674毫秒', '0', '', '2025-01-01 13:45:59'); +INSERT INTO `sys_job_log` VALUES (1108, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:31毫秒', '0', '', '2025-01-01 13:46:58'); +INSERT INTO `sys_job_log` VALUES (1109, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:32毫秒', '0', '', '2025-01-01 13:47:58'); +INSERT INTO `sys_job_log` VALUES (1110, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:566毫秒', '0', '', '2025-01-01 13:47:59'); +INSERT INTO `sys_job_log` VALUES (1111, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:33毫秒', '0', '', '2025-01-01 13:48:58'); +INSERT INTO `sys_job_log` VALUES (1112, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:31毫秒', '0', '', '2025-01-01 13:49:58'); +INSERT INTO `sys_job_log` VALUES (1113, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:552毫秒', '0', '', '2025-01-01 13:49:59'); +INSERT INTO `sys_job_log` VALUES (1114, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:30毫秒', '0', '', '2025-01-01 13:50:58'); +INSERT INTO `sys_job_log` VALUES (1115, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:35毫秒', '0', '', '2025-01-01 13:51:58'); +INSERT INTO `sys_job_log` VALUES (1116, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:546毫秒', '0', '', '2025-01-01 13:51:58'); +INSERT INTO `sys_job_log` VALUES (1117, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:31毫秒', '0', '', '2025-01-01 13:52:58'); +INSERT INTO `sys_job_log` VALUES (1118, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:33毫秒', '0', '', '2025-01-01 13:53:58'); +INSERT INTO `sys_job_log` VALUES (1119, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:549毫秒', '0', '', '2025-01-01 13:53:58'); +INSERT INTO `sys_job_log` VALUES (1120, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:29毫秒', '0', '', '2025-01-01 13:54:58'); +INSERT INTO `sys_job_log` VALUES (1121, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:34毫秒', '0', '', '2025-01-01 13:55:58'); +INSERT INTO `sys_job_log` VALUES (1122, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:658毫秒', '0', '', '2025-01-01 13:55:59'); +INSERT INTO `sys_job_log` VALUES (1123, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:28毫秒', '0', '', '2025-01-01 13:56:58'); +INSERT INTO `sys_job_log` VALUES (1124, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:29毫秒', '0', '', '2025-01-01 13:57:58'); +INSERT INTO `sys_job_log` VALUES (1125, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:537毫秒', '0', '', '2025-01-01 13:57:58'); +INSERT INTO `sys_job_log` VALUES (1126, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:230毫秒', '0', '', '2025-01-01 13:58:58'); +INSERT INTO `sys_job_log` VALUES (1127, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:178毫秒', '0', '', '2025-01-01 13:59:58'); +INSERT INTO `sys_job_log` VALUES (1128, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:812毫秒', '0', '', '2025-01-01 13:59:59'); +INSERT INTO `sys_job_log` VALUES (1129, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-01 14:00:58'); +INSERT INTO `sys_job_log` VALUES (1130, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:222毫秒', '0', '', '2025-01-01 14:01:58'); +INSERT INTO `sys_job_log` VALUES (1131, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:982毫秒', '0', '', '2025-01-01 14:01:59'); +INSERT INTO `sys_job_log` VALUES (1132, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:253毫秒', '0', '', '2025-01-01 14:02:58'); +INSERT INTO `sys_job_log` VALUES (1133, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:314毫秒', '0', '', '2025-01-01 14:03:58'); +INSERT INTO `sys_job_log` VALUES (1134, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:1087毫秒', '0', '', '2025-01-01 14:03:59'); +INSERT INTO `sys_job_log` VALUES (1135, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:40毫秒', '0', '', '2025-01-01 14:04:58'); +INSERT INTO `sys_job_log` VALUES (1136, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:507毫秒', '0', '', '2025-01-01 14:05:59'); +INSERT INTO `sys_job_log` VALUES (1137, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:1207毫秒', '0', '', '2025-01-01 14:05:59'); +INSERT INTO `sys_job_log` VALUES (1138, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:306毫秒', '0', '', '2025-01-01 14:11:12'); +INSERT INTO `sys_job_log` VALUES (1139, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:166毫秒', '0', '', '2025-01-01 14:11:58'); +INSERT INTO `sys_job_log` VALUES (1140, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:1962毫秒', '0', '', '2025-01-01 14:12:00'); +INSERT INTO `sys_job_log` VALUES (1141, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:176毫秒', '0', '', '2025-01-01 14:12:58'); +INSERT INTO `sys_job_log` VALUES (1142, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:275毫秒', '0', '', '2025-01-01 14:13:58'); +INSERT INTO `sys_job_log` VALUES (1143, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:1920毫秒', '0', '', '2025-01-01 14:14:00'); +INSERT INTO `sys_job_log` VALUES (1144, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:53毫秒', '0', '', '2025-01-01 14:14:58'); +INSERT INTO `sys_job_log` VALUES (1145, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:204毫秒', '0', '', '2025-01-01 14:15:58'); +INSERT INTO `sys_job_log` VALUES (1146, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:1893毫秒', '0', '', '2025-01-01 14:16:00'); +INSERT INTO `sys_job_log` VALUES (1147, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:200毫秒', '0', '', '2025-01-01 14:16:58'); +INSERT INTO `sys_job_log` VALUES (1148, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:318毫秒', '0', '', '2025-01-01 14:17:59'); +INSERT INTO `sys_job_log` VALUES (1149, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:2182毫秒', '0', '', '2025-01-01 14:18:00'); +INSERT INTO `sys_job_log` VALUES (1150, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:59毫秒', '0', '', '2025-01-01 14:18:58'); +INSERT INTO `sys_job_log` VALUES (1151, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:156毫秒', '0', '', '2025-01-01 14:19:58'); +INSERT INTO `sys_job_log` VALUES (1152, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:2352毫秒', '0', '', '2025-01-01 14:20:00'); +INSERT INTO `sys_job_log` VALUES (1153, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:231毫秒', '0', '', '2025-01-01 14:20:58'); +INSERT INTO `sys_job_log` VALUES (1154, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:333毫秒', '0', '', '2025-01-01 14:21:58'); +INSERT INTO `sys_job_log` VALUES (1155, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:2510毫秒', '0', '', '2025-01-01 14:22:00'); +INSERT INTO `sys_job_log` VALUES (1156, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:38毫秒', '0', '', '2025-01-01 14:22:58'); +INSERT INTO `sys_job_log` VALUES (1157, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:34毫秒', '0', '', '2025-01-01 14:23:58'); +INSERT INTO `sys_job_log` VALUES (1158, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:2566毫秒', '0', '', '2025-01-01 14:24:00'); +INSERT INTO `sys_job_log` VALUES (1159, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:49毫秒', '0', '', '2025-01-01 14:24:58'); +INSERT INTO `sys_job_log` VALUES (1160, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:203毫秒', '0', '', '2025-01-01 14:26:00'); +INSERT INTO `sys_job_log` VALUES (1161, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:1883毫秒', '0', '', '2025-01-01 14:26:01'); +INSERT INTO `sys_job_log` VALUES (1162, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:65毫秒', '0', '', '2025-01-01 14:26:58'); +INSERT INTO `sys_job_log` VALUES (1163, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:59毫秒', '0', '', '2025-01-01 14:27:58'); +INSERT INTO `sys_job_log` VALUES (1164, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:622毫秒', '0', '', '2025-01-01 14:27:59'); +INSERT INTO `sys_job_log` VALUES (1165, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:41毫秒', '0', '', '2025-01-01 14:28:58'); +INSERT INTO `sys_job_log` VALUES (1166, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:36毫秒', '0', '', '2025-01-01 14:29:58'); +INSERT INTO `sys_job_log` VALUES (1167, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:639毫秒', '0', '', '2025-01-01 14:29:59'); +INSERT INTO `sys_job_log` VALUES (1168, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:39毫秒', '0', '', '2025-01-01 14:30:58'); +INSERT INTO `sys_job_log` VALUES (1169, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:42毫秒', '0', '', '2025-01-01 14:31:58'); +INSERT INTO `sys_job_log` VALUES (1170, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:675毫秒', '0', '', '2025-01-01 14:31:59'); +INSERT INTO `sys_job_log` VALUES (1171, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:35毫秒', '0', '', '2025-01-01 14:32:58'); +INSERT INTO `sys_job_log` VALUES (1172, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:34毫秒', '0', '', '2025-01-01 14:33:58'); +INSERT INTO `sys_job_log` VALUES (1173, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:649毫秒', '0', '', '2025-01-01 14:33:59'); +INSERT INTO `sys_job_log` VALUES (1174, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:37毫秒', '0', '', '2025-01-01 14:34:58'); +INSERT INTO `sys_job_log` VALUES (1175, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:32毫秒', '0', '', '2025-01-01 14:35:58'); +INSERT INTO `sys_job_log` VALUES (1176, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:688毫秒', '0', '', '2025-01-01 14:35:59'); +INSERT INTO `sys_job_log` VALUES (1177, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:37毫秒', '0', '', '2025-01-01 14:36:58'); +INSERT INTO `sys_job_log` VALUES (1178, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:38毫秒', '0', '', '2025-01-01 14:37:58'); +INSERT INTO `sys_job_log` VALUES (1179, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:683毫秒', '0', '', '2025-01-01 14:37:59'); +INSERT INTO `sys_job_log` VALUES (1180, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:39毫秒', '0', '', '2025-01-01 14:38:58'); +INSERT INTO `sys_job_log` VALUES (1181, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:35毫秒', '0', '', '2025-01-01 14:39:58'); +INSERT INTO `sys_job_log` VALUES (1182, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:722毫秒', '0', '', '2025-01-01 14:39:59'); +INSERT INTO `sys_job_log` VALUES (1183, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:41毫秒', '0', '', '2025-01-01 14:40:58'); +INSERT INTO `sys_job_log` VALUES (1184, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:40毫秒', '0', '', '2025-01-01 14:41:58'); +INSERT INTO `sys_job_log` VALUES (1185, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:631毫秒', '0', '', '2025-01-01 14:41:59'); +INSERT INTO `sys_job_log` VALUES (1186, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:41毫秒', '0', '', '2025-01-01 14:42:58'); +INSERT INTO `sys_job_log` VALUES (1187, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:35毫秒', '0', '', '2025-01-01 14:43:58'); +INSERT INTO `sys_job_log` VALUES (1188, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:699毫秒', '0', '', '2025-01-01 14:43:59'); +INSERT INTO `sys_job_log` VALUES (1189, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:35毫秒', '0', '', '2025-01-01 14:44:58'); +INSERT INTO `sys_job_log` VALUES (1190, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:36毫秒', '0', '', '2025-01-01 14:45:58'); +INSERT INTO `sys_job_log` VALUES (1191, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:636毫秒', '0', '', '2025-01-01 14:45:59'); +INSERT INTO `sys_job_log` VALUES (1192, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:34毫秒', '0', '', '2025-01-01 14:46:58'); +INSERT INTO `sys_job_log` VALUES (1193, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:37毫秒', '0', '', '2025-01-01 14:47:58'); +INSERT INTO `sys_job_log` VALUES (1194, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:640毫秒', '0', '', '2025-01-01 14:47:59'); +INSERT INTO `sys_job_log` VALUES (1195, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:41毫秒', '0', '', '2025-01-01 14:48:58'); +INSERT INTO `sys_job_log` VALUES (1196, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:40毫秒', '0', '', '2025-01-01 14:49:58'); +INSERT INTO `sys_job_log` VALUES (1197, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:636毫秒', '0', '', '2025-01-01 14:49:59'); +INSERT INTO `sys_job_log` VALUES (1198, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:41毫秒', '0', '', '2025-01-01 14:50:58'); +INSERT INTO `sys_job_log` VALUES (1199, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:37毫秒', '0', '', '2025-01-01 14:51:58'); +INSERT INTO `sys_job_log` VALUES (1200, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:660毫秒', '0', '', '2025-01-01 14:51:59'); +INSERT INTO `sys_job_log` VALUES (1201, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:32毫秒', '0', '', '2025-01-01 14:52:58'); +INSERT INTO `sys_job_log` VALUES (1202, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:35毫秒', '0', '', '2025-01-01 14:53:58'); +INSERT INTO `sys_job_log` VALUES (1203, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:731毫秒', '0', '', '2025-01-01 14:53:59'); +INSERT INTO `sys_job_log` VALUES (1204, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:35毫秒', '0', '', '2025-01-01 14:54:58'); +INSERT INTO `sys_job_log` VALUES (1205, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:39毫秒', '0', '', '2025-01-01 14:55:58'); +INSERT INTO `sys_job_log` VALUES (1206, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:689毫秒', '0', '', '2025-01-01 14:55:59'); +INSERT INTO `sys_job_log` VALUES (1207, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:35毫秒', '0', '', '2025-01-01 14:56:58'); +INSERT INTO `sys_job_log` VALUES (1208, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:56毫秒', '0', '', '2025-01-01 14:57:58'); +INSERT INTO `sys_job_log` VALUES (1209, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:867毫秒', '0', '', '2025-01-01 14:57:59'); +INSERT INTO `sys_job_log` VALUES (1210, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:40毫秒', '0', '', '2025-01-01 14:58:58'); +INSERT INTO `sys_job_log` VALUES (1211, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:37毫秒', '0', '', '2025-01-01 14:59:58'); +INSERT INTO `sys_job_log` VALUES (1212, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:664毫秒', '0', '', '2025-01-01 14:59:59'); +INSERT INTO `sys_job_log` VALUES (1213, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:37毫秒', '0', '', '2025-01-01 15:00:58'); +INSERT INTO `sys_job_log` VALUES (1214, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:72毫秒', '0', '', '2025-01-01 15:01:58'); +INSERT INTO `sys_job_log` VALUES (1215, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:604毫秒', '0', '', '2025-01-01 15:01:58'); +INSERT INTO `sys_job_log` VALUES (1216, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:39毫秒', '0', '', '2025-01-01 15:02:58'); +INSERT INTO `sys_job_log` VALUES (1217, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:36毫秒', '0', '', '2025-01-01 15:03:58'); +INSERT INTO `sys_job_log` VALUES (1218, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:656毫秒', '0', '', '2025-01-01 15:03:59'); +INSERT INTO `sys_job_log` VALUES (1219, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:35毫秒', '0', '', '2025-01-01 15:04:58'); +INSERT INTO `sys_job_log` VALUES (1220, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:37毫秒', '0', '', '2025-01-01 15:05:58'); +INSERT INTO `sys_job_log` VALUES (1221, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:826毫秒', '0', '', '2025-01-01 15:05:59'); +INSERT INTO `sys_job_log` VALUES (1222, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:36毫秒', '0', '', '2025-01-01 15:06:58'); +INSERT INTO `sys_job_log` VALUES (1223, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:36毫秒', '0', '', '2025-01-01 15:07:58'); +INSERT INTO `sys_job_log` VALUES (1224, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:665毫秒', '0', '', '2025-01-01 15:07:59'); +INSERT INTO `sys_job_log` VALUES (1225, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:39毫秒', '0', '', '2025-01-01 15:08:58'); +INSERT INTO `sys_job_log` VALUES (1226, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:37毫秒', '0', '', '2025-01-01 15:09:58'); +INSERT INTO `sys_job_log` VALUES (1227, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:668毫秒', '0', '', '2025-01-01 15:09:59'); +INSERT INTO `sys_job_log` VALUES (1228, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:39毫秒', '0', '', '2025-01-01 15:10:58'); +INSERT INTO `sys_job_log` VALUES (1229, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:41毫秒', '0', '', '2025-01-01 15:11:58'); +INSERT INTO `sys_job_log` VALUES (1230, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:666毫秒', '0', '', '2025-01-01 15:11:58'); +INSERT INTO `sys_job_log` VALUES (1231, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:33毫秒', '0', '', '2025-01-01 15:12:58'); +INSERT INTO `sys_job_log` VALUES (1232, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:43毫秒', '0', '', '2025-01-01 15:13:58'); +INSERT INTO `sys_job_log` VALUES (1233, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:636毫秒', '0', '', '2025-01-01 15:13:58'); +INSERT INTO `sys_job_log` VALUES (1234, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:36毫秒', '0', '', '2025-01-01 15:14:58'); +INSERT INTO `sys_job_log` VALUES (1235, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:39毫秒', '0', '', '2025-01-01 15:15:58'); +INSERT INTO `sys_job_log` VALUES (1236, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:672毫秒', '0', '', '2025-01-01 15:15:59'); +INSERT INTO `sys_job_log` VALUES (1237, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:37毫秒', '0', '', '2025-01-01 15:16:58'); +INSERT INTO `sys_job_log` VALUES (1238, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:35毫秒', '0', '', '2025-01-01 15:17:58'); +INSERT INTO `sys_job_log` VALUES (1239, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:702毫秒', '0', '', '2025-01-01 15:17:59'); +INSERT INTO `sys_job_log` VALUES (1240, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:36毫秒', '0', '', '2025-01-01 15:18:58'); +INSERT INTO `sys_job_log` VALUES (1241, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:35毫秒', '0', '', '2025-01-01 15:19:58'); +INSERT INTO `sys_job_log` VALUES (1242, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:638毫秒', '0', '', '2025-01-01 15:19:58'); +INSERT INTO `sys_job_log` VALUES (1243, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:37毫秒', '0', '', '2025-01-01 15:20:58'); +INSERT INTO `sys_job_log` VALUES (1244, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:39毫秒', '0', '', '2025-01-01 15:21:58'); +INSERT INTO `sys_job_log` VALUES (1245, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:686毫秒', '0', '', '2025-01-01 15:21:59'); +INSERT INTO `sys_job_log` VALUES (1246, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:42毫秒', '0', '', '2025-01-01 15:22:58'); +INSERT INTO `sys_job_log` VALUES (1247, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:39毫秒', '0', '', '2025-01-01 15:23:58'); +INSERT INTO `sys_job_log` VALUES (1248, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:780毫秒', '0', '', '2025-01-01 15:23:59'); +INSERT INTO `sys_job_log` VALUES (1249, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:37毫秒', '0', '', '2025-01-01 15:24:58'); +INSERT INTO `sys_job_log` VALUES (1250, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:36毫秒', '0', '', '2025-01-01 15:25:58'); +INSERT INTO `sys_job_log` VALUES (1251, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:656毫秒', '0', '', '2025-01-01 15:25:58'); +INSERT INTO `sys_job_log` VALUES (1252, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:36毫秒', '0', '', '2025-01-01 15:26:58'); +INSERT INTO `sys_job_log` VALUES (1253, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:32毫秒', '0', '', '2025-01-01 15:27:58'); +INSERT INTO `sys_job_log` VALUES (1254, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:599毫秒', '0', '', '2025-01-01 15:27:58'); +INSERT INTO `sys_job_log` VALUES (1255, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:40毫秒', '0', '', '2025-01-01 15:28:58'); +INSERT INTO `sys_job_log` VALUES (1256, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:43毫秒', '0', '', '2025-01-01 15:29:58'); +INSERT INTO `sys_job_log` VALUES (1257, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:615毫秒', '0', '', '2025-01-01 15:29:58'); +INSERT INTO `sys_job_log` VALUES (1258, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:34毫秒', '0', '', '2025-01-01 15:30:58'); +INSERT INTO `sys_job_log` VALUES (1259, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:86毫秒', '0', '', '2025-01-01 15:31:58'); +INSERT INTO `sys_job_log` VALUES (1260, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:767毫秒', '0', '', '2025-01-01 15:31:59'); +INSERT INTO `sys_job_log` VALUES (1261, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:38毫秒', '0', '', '2025-01-01 15:32:58'); +INSERT INTO `sys_job_log` VALUES (1262, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:41毫秒', '0', '', '2025-01-01 15:33:58'); +INSERT INTO `sys_job_log` VALUES (1263, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:652毫秒', '0', '', '2025-01-01 15:33:58'); +INSERT INTO `sys_job_log` VALUES (1264, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:39毫秒', '0', '', '2025-01-01 15:34:58'); +INSERT INTO `sys_job_log` VALUES (1265, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:40毫秒', '0', '', '2025-01-01 15:35:58'); +INSERT INTO `sys_job_log` VALUES (1266, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:624毫秒', '0', '', '2025-01-01 15:35:58'); +INSERT INTO `sys_job_log` VALUES (1267, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:38毫秒', '0', '', '2025-01-01 15:36:58'); +INSERT INTO `sys_job_log` VALUES (1268, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:40毫秒', '0', '', '2025-01-01 15:37:58'); +INSERT INTO `sys_job_log` VALUES (1269, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:636毫秒', '0', '', '2025-01-01 15:37:58'); +INSERT INTO `sys_job_log` VALUES (1270, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:95毫秒', '0', '', '2025-01-01 19:27:58'); +INSERT INTO `sys_job_log` VALUES (1271, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:721毫秒', '0', '', '2025-01-01 19:27:59'); +INSERT INTO `sys_job_log` VALUES (1272, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:139毫秒', '0', '', '2025-01-01 19:28:58'); +INSERT INTO `sys_job_log` VALUES (1273, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:35毫秒', '0', '', '2025-01-01 19:29:58'); +INSERT INTO `sys_job_log` VALUES (1274, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:669毫秒', '0', '', '2025-01-01 19:29:58'); +INSERT INTO `sys_job_log` VALUES (1275, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:42毫秒', '0', '', '2025-01-01 19:30:58'); +INSERT INTO `sys_job_log` VALUES (1276, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:33毫秒', '0', '', '2025-01-01 19:31:58'); +INSERT INTO `sys_job_log` VALUES (1277, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:828毫秒', '0', '', '2025-01-01 19:31:59'); +INSERT INTO `sys_job_log` VALUES (1278, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:34毫秒', '0', '', '2025-01-01 19:32:58'); +INSERT INTO `sys_job_log` VALUES (1279, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:31毫秒', '0', '', '2025-01-01 19:33:58'); +INSERT INTO `sys_job_log` VALUES (1280, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:607毫秒', '0', '', '2025-01-01 19:33:58'); +INSERT INTO `sys_job_log` VALUES (1281, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:38毫秒', '0', '', '2025-01-01 19:34:58'); +INSERT INTO `sys_job_log` VALUES (1282, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:36毫秒', '0', '', '2025-01-01 19:35:58'); +INSERT INTO `sys_job_log` VALUES (1283, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:587毫秒', '0', '', '2025-01-01 19:35:58'); +INSERT INTO `sys_job_log` VALUES (1284, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:78毫秒', '0', '', '2025-01-01 19:36:58'); +INSERT INTO `sys_job_log` VALUES (1285, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:32毫秒', '0', '', '2025-01-01 19:37:58'); +INSERT INTO `sys_job_log` VALUES (1286, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:760毫秒', '0', '', '2025-01-01 19:37:59'); +INSERT INTO `sys_job_log` VALUES (1287, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:33毫秒', '0', '', '2025-01-01 19:38:58'); +INSERT INTO `sys_job_log` VALUES (1288, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:123毫秒', '0', '', '2025-01-01 19:39:58'); +INSERT INTO `sys_job_log` VALUES (1289, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:687毫秒', '0', '', '2025-01-01 19:39:58'); +INSERT INTO `sys_job_log` VALUES (1290, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:44毫秒', '0', '', '2025-01-01 19:40:58'); +INSERT INTO `sys_job_log` VALUES (1291, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:36毫秒', '0', '', '2025-01-01 19:41:58'); +INSERT INTO `sys_job_log` VALUES (1292, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:611毫秒', '0', '', '2025-01-01 19:41:58'); +INSERT INTO `sys_job_log` VALUES (1293, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:35毫秒', '0', '', '2025-01-01 19:42:58'); +INSERT INTO `sys_job_log` VALUES (1294, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:35毫秒', '0', '', '2025-01-01 19:43:58'); +INSERT INTO `sys_job_log` VALUES (1295, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:602毫秒', '0', '', '2025-01-01 19:43:58'); +INSERT INTO `sys_job_log` VALUES (1296, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:33毫秒', '0', '', '2025-01-01 19:44:58'); +INSERT INTO `sys_job_log` VALUES (1297, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:36毫秒', '0', '', '2025-01-01 19:45:58'); +INSERT INTO `sys_job_log` VALUES (1298, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:584毫秒', '0', '', '2025-01-01 19:45:58'); +INSERT INTO `sys_job_log` VALUES (1299, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:50毫秒', '0', '', '2025-01-01 19:46:58'); +INSERT INTO `sys_job_log` VALUES (1300, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:36毫秒', '0', '', '2025-01-01 19:47:58'); +INSERT INTO `sys_job_log` VALUES (1301, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:827毫秒', '0', '', '2025-01-01 19:47:59'); +INSERT INTO `sys_job_log` VALUES (1302, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:38毫秒', '0', '', '2025-01-01 19:48:58'); +INSERT INTO `sys_job_log` VALUES (1303, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:255毫秒', '0', '', '2025-01-01 19:49:58'); +INSERT INTO `sys_job_log` VALUES (1304, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:801毫秒', '0', '', '2025-01-01 19:49:59'); +INSERT INTO `sys_job_log` VALUES (1305, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:43毫秒', '0', '', '2025-01-01 19:50:58'); +INSERT INTO `sys_job_log` VALUES (1306, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:33毫秒', '0', '', '2025-01-01 19:51:58'); +INSERT INTO `sys_job_log` VALUES (1307, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:791毫秒', '0', '', '2025-01-01 19:51:59'); +INSERT INTO `sys_job_log` VALUES (1308, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:35毫秒', '0', '', '2025-01-01 19:52:58'); +INSERT INTO `sys_job_log` VALUES (1309, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:35毫秒', '0', '', '2025-01-01 19:53:58'); +INSERT INTO `sys_job_log` VALUES (1310, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:588毫秒', '0', '', '2025-01-01 19:53:58'); +INSERT INTO `sys_job_log` VALUES (1311, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:33毫秒', '0', '', '2025-01-01 19:54:58'); +INSERT INTO `sys_job_log` VALUES (1312, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:34毫秒', '0', '', '2025-01-01 19:55:58'); +INSERT INTO `sys_job_log` VALUES (1313, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:807毫秒', '0', '', '2025-01-01 19:55:59'); +INSERT INTO `sys_job_log` VALUES (1314, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:32毫秒', '0', '', '2025-01-01 19:56:58'); +INSERT INTO `sys_job_log` VALUES (1315, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:36毫秒', '0', '', '2025-01-01 19:57:58'); +INSERT INTO `sys_job_log` VALUES (1316, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:786毫秒', '0', '', '2025-01-01 19:57:59'); +INSERT INTO `sys_job_log` VALUES (1317, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:32毫秒', '0', '', '2025-01-01 19:58:58'); +INSERT INTO `sys_job_log` VALUES (1318, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:34毫秒', '0', '', '2025-01-01 19:59:58'); +INSERT INTO `sys_job_log` VALUES (1319, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:1019毫秒', '0', '', '2025-01-01 19:59:59'); +INSERT INTO `sys_job_log` VALUES (1320, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:33毫秒', '0', '', '2025-01-01 20:00:58'); +INSERT INTO `sys_job_log` VALUES (1321, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:70毫秒', '0', '', '2025-01-01 20:01:58'); +INSERT INTO `sys_job_log` VALUES (1322, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:579毫秒', '0', '', '2025-01-01 20:01:58'); +INSERT INTO `sys_job_log` VALUES (1323, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:38毫秒', '0', '', '2025-01-01 20:02:58'); +INSERT INTO `sys_job_log` VALUES (1324, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:35毫秒', '0', '', '2025-01-01 20:03:58'); +INSERT INTO `sys_job_log` VALUES (1325, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:835毫秒', '0', '', '2025-01-01 20:03:59'); +INSERT INTO `sys_job_log` VALUES (1326, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:32毫秒', '0', '', '2025-01-01 20:04:58'); +INSERT INTO `sys_job_log` VALUES (1327, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:33毫秒', '0', '', '2025-01-01 20:05:58'); +INSERT INTO `sys_job_log` VALUES (1328, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:607毫秒', '0', '', '2025-01-01 20:05:58'); +INSERT INTO `sys_job_log` VALUES (1329, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:206毫秒', '0', '', '2025-01-01 20:06:58'); +INSERT INTO `sys_job_log` VALUES (1330, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:34毫秒', '0', '', '2025-01-01 20:07:58'); +INSERT INTO `sys_job_log` VALUES (1331, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:606毫秒', '0', '', '2025-01-01 20:07:58'); +INSERT INTO `sys_job_log` VALUES (1332, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:35毫秒', '0', '', '2025-01-01 20:08:58'); +INSERT INTO `sys_job_log` VALUES (1333, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:35毫秒', '0', '', '2025-01-01 20:09:58'); +INSERT INTO `sys_job_log` VALUES (1334, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:541毫秒', '0', '', '2025-01-01 20:09:58'); +INSERT INTO `sys_job_log` VALUES (1335, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:30毫秒', '0', '', '2025-01-01 20:10:58'); +INSERT INTO `sys_job_log` VALUES (1336, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:132毫秒', '0', '', '2025-01-01 20:11:58'); +INSERT INTO `sys_job_log` VALUES (1337, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:680毫秒', '0', '', '2025-01-01 20:11:58'); +INSERT INTO `sys_job_log` VALUES (1338, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:32毫秒', '0', '', '2025-01-01 20:12:58'); +INSERT INTO `sys_job_log` VALUES (1339, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:33毫秒', '0', '', '2025-01-01 20:13:58'); +INSERT INTO `sys_job_log` VALUES (1340, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:584毫秒', '0', '', '2025-01-01 20:13:58'); +INSERT INTO `sys_job_log` VALUES (1341, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:33毫秒', '0', '', '2025-01-01 20:14:58'); +INSERT INTO `sys_job_log` VALUES (1342, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:44毫秒', '0', '', '2025-01-01 20:15:58'); +INSERT INTO `sys_job_log` VALUES (1343, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:777毫秒', '0', '', '2025-01-01 20:15:59'); +INSERT INTO `sys_job_log` VALUES (1344, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:32毫秒', '0', '', '2025-01-01 20:16:58'); +INSERT INTO `sys_job_log` VALUES (1345, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:37毫秒', '0', '', '2025-01-01 20:17:58'); +INSERT INTO `sys_job_log` VALUES (1346, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:561毫秒', '0', '', '2025-01-01 20:17:58'); +INSERT INTO `sys_job_log` VALUES (1347, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:32毫秒', '0', '', '2025-01-01 20:18:58'); +INSERT INTO `sys_job_log` VALUES (1348, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:36毫秒', '0', '', '2025-01-01 20:19:58'); +INSERT INTO `sys_job_log` VALUES (1349, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:771毫秒', '0', '', '2025-01-01 20:19:59'); +INSERT INTO `sys_job_log` VALUES (1350, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:31毫秒', '0', '', '2025-01-01 20:20:58'); +INSERT INTO `sys_job_log` VALUES (1351, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:77毫秒', '0', '', '2025-01-01 20:21:58'); +INSERT INTO `sys_job_log` VALUES (1352, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:632毫秒', '0', '', '2025-01-01 20:21:58'); +INSERT INTO `sys_job_log` VALUES (1353, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:33毫秒', '0', '', '2025-01-01 20:22:58'); +INSERT INTO `sys_job_log` VALUES (1354, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:36毫秒', '0', '', '2025-01-01 20:23:58'); +INSERT INTO `sys_job_log` VALUES (1355, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:703毫秒', '0', '', '2025-01-01 20:23:58'); +INSERT INTO `sys_job_log` VALUES (1356, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:30毫秒', '0', '', '2025-01-01 20:24:58'); +INSERT INTO `sys_job_log` VALUES (1357, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:32毫秒', '0', '', '2025-01-01 20:25:58'); +INSERT INTO `sys_job_log` VALUES (1358, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:592毫秒', '0', '', '2025-01-01 20:25:58'); +INSERT INTO `sys_job_log` VALUES (1359, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:32毫秒', '0', '', '2025-01-01 20:26:58'); +INSERT INTO `sys_job_log` VALUES (1360, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:61毫秒', '0', '', '2025-01-01 20:27:58'); +INSERT INTO `sys_job_log` VALUES (1361, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:689毫秒', '0', '', '2025-01-01 20:27:58'); +INSERT INTO `sys_job_log` VALUES (1362, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:34毫秒', '0', '', '2025-01-01 20:28:58'); +INSERT INTO `sys_job_log` VALUES (1363, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:36毫秒', '0', '', '2025-01-01 20:29:58'); +INSERT INTO `sys_job_log` VALUES (1364, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:632毫秒', '0', '', '2025-01-01 20:29:58'); +INSERT INTO `sys_job_log` VALUES (1365, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:30毫秒', '0', '', '2025-01-01 20:30:58'); +INSERT INTO `sys_job_log` VALUES (1366, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:200毫秒', '0', '', '2025-01-01 20:31:58'); +INSERT INTO `sys_job_log` VALUES (1367, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:746毫秒', '0', '', '2025-01-01 20:31:58'); +INSERT INTO `sys_job_log` VALUES (1368, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:30毫秒', '0', '', '2025-01-01 20:32:58'); +INSERT INTO `sys_job_log` VALUES (1369, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:32毫秒', '0', '', '2025-01-01 20:33:58'); +INSERT INTO `sys_job_log` VALUES (1370, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:592毫秒', '0', '', '2025-01-01 20:33:58'); +INSERT INTO `sys_job_log` VALUES (1371, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:30毫秒', '0', '', '2025-01-01 20:34:58'); +INSERT INTO `sys_job_log` VALUES (1372, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:33毫秒', '0', '', '2025-01-01 20:35:58'); +INSERT INTO `sys_job_log` VALUES (1373, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:707毫秒', '0', '', '2025-01-01 20:35:58'); +INSERT INTO `sys_job_log` VALUES (1374, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:34毫秒', '0', '', '2025-01-01 20:36:58'); +INSERT INTO `sys_job_log` VALUES (1375, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:36毫秒', '0', '', '2025-01-01 20:37:58'); +INSERT INTO `sys_job_log` VALUES (1376, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:847毫秒', '0', '', '2025-01-01 20:37:59'); +INSERT INTO `sys_job_log` VALUES (1377, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:33毫秒', '0', '', '2025-01-01 20:38:58'); +INSERT INTO `sys_job_log` VALUES (1378, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:53毫秒', '0', '', '2025-01-01 20:39:58'); +INSERT INTO `sys_job_log` VALUES (1379, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:723毫秒', '0', '', '2025-01-01 20:39:58'); +INSERT INTO `sys_job_log` VALUES (1380, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:38毫秒', '0', '', '2025-01-01 20:40:58'); +INSERT INTO `sys_job_log` VALUES (1381, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:31毫秒', '0', '', '2025-01-01 20:41:58'); +INSERT INTO `sys_job_log` VALUES (1382, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:820毫秒', '0', '', '2025-01-01 20:41:59'); +INSERT INTO `sys_job_log` VALUES (1383, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:33毫秒', '0', '', '2025-01-01 20:42:58'); +INSERT INTO `sys_job_log` VALUES (1384, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:31毫秒', '0', '', '2025-01-01 20:43:58'); +INSERT INTO `sys_job_log` VALUES (1385, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:610毫秒', '0', '', '2025-01-01 20:43:58'); +INSERT INTO `sys_job_log` VALUES (1386, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:32毫秒', '0', '', '2025-01-01 20:44:58'); +INSERT INTO `sys_job_log` VALUES (1387, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:64毫秒', '0', '', '2025-01-01 20:45:58'); +INSERT INTO `sys_job_log` VALUES (1388, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:826毫秒', '0', '', '2025-01-01 20:45:59'); +INSERT INTO `sys_job_log` VALUES (1389, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:34毫秒', '0', '', '2025-01-01 20:46:58'); +INSERT INTO `sys_job_log` VALUES (1390, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:31毫秒', '0', '', '2025-01-01 20:47:58'); +INSERT INTO `sys_job_log` VALUES (1391, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:599毫秒', '0', '', '2025-01-01 20:47:58'); +INSERT INTO `sys_job_log` VALUES (1392, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:36毫秒', '0', '', '2025-01-01 20:48:58'); +INSERT INTO `sys_job_log` VALUES (1393, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:34毫秒', '0', '', '2025-01-01 20:49:58'); +INSERT INTO `sys_job_log` VALUES (1394, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:596毫秒', '0', '', '2025-01-01 20:49:58'); +INSERT INTO `sys_job_log` VALUES (1395, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:36毫秒', '0', '', '2025-01-01 20:50:58'); +INSERT INTO `sys_job_log` VALUES (1396, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:186毫秒', '0', '', '2025-01-01 20:51:58'); +INSERT INTO `sys_job_log` VALUES (1397, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:743毫秒', '0', '', '2025-01-01 20:51:58'); +INSERT INTO `sys_job_log` VALUES (1398, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:32毫秒', '0', '', '2025-01-01 20:52:58'); +INSERT INTO `sys_job_log` VALUES (1399, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:33毫秒', '0', '', '2025-01-01 20:53:58'); +INSERT INTO `sys_job_log` VALUES (1400, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:587毫秒', '0', '', '2025-01-01 20:53:58'); +INSERT INTO `sys_job_log` VALUES (1401, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:145毫秒', '0', '', '2025-01-01 20:54:58'); +INSERT INTO `sys_job_log` VALUES (1402, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:111毫秒', '0', '', '2025-01-01 20:55:58'); +INSERT INTO `sys_job_log` VALUES (1403, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:643毫秒', '0', '', '2025-01-01 20:55:58'); +INSERT INTO `sys_job_log` VALUES (1404, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:33毫秒', '0', '', '2025-01-01 20:56:58'); +INSERT INTO `sys_job_log` VALUES (1405, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:35毫秒', '0', '', '2025-01-01 20:57:58'); +INSERT INTO `sys_job_log` VALUES (1406, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:578毫秒', '0', '', '2025-01-01 20:57:58'); +INSERT INTO `sys_job_log` VALUES (1407, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:33毫秒', '0', '', '2025-01-01 20:58:58'); +INSERT INTO `sys_job_log` VALUES (1408, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:43毫秒', '0', '', '2025-01-01 20:59:58'); +INSERT INTO `sys_job_log` VALUES (1409, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:847毫秒', '0', '', '2025-01-01 20:59:59'); +INSERT INTO `sys_job_log` VALUES (1410, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:35毫秒', '0', '', '2025-01-01 21:00:58'); +INSERT INTO `sys_job_log` VALUES (1411, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:37毫秒', '0', '', '2025-01-01 21:01:58'); +INSERT INTO `sys_job_log` VALUES (1412, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:570毫秒', '0', '', '2025-01-01 21:01:58'); +INSERT INTO `sys_job_log` VALUES (1413, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:170毫秒', '0', '', '2025-01-01 21:02:58'); +INSERT INTO `sys_job_log` VALUES (1414, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:34毫秒', '0', '', '2025-01-01 21:03:58'); +INSERT INTO `sys_job_log` VALUES (1415, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:597毫秒', '0', '', '2025-01-01 21:03:58'); +INSERT INTO `sys_job_log` VALUES (1416, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:90毫秒', '0', '', '2025-01-01 21:04:58'); +INSERT INTO `sys_job_log` VALUES (1417, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:58毫秒', '0', '', '2025-01-01 21:05:58'); +INSERT INTO `sys_job_log` VALUES (1418, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:606毫秒', '0', '', '2025-01-01 21:05:58'); +INSERT INTO `sys_job_log` VALUES (1419, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:29毫秒', '0', '', '2025-01-01 21:06:58'); +INSERT INTO `sys_job_log` VALUES (1420, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:37毫秒', '0', '', '2025-01-01 21:07:58'); +INSERT INTO `sys_job_log` VALUES (1421, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:786毫秒', '0', '', '2025-01-01 21:07:58'); +INSERT INTO `sys_job_log` VALUES (1422, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:32毫秒', '0', '', '2025-01-01 21:08:58'); +INSERT INTO `sys_job_log` VALUES (1423, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:38毫秒', '0', '', '2025-01-01 21:09:58'); +INSERT INTO `sys_job_log` VALUES (1424, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:669毫秒', '0', '', '2025-01-01 21:09:58'); +INSERT INTO `sys_job_log` VALUES (1425, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:34毫秒', '0', '', '2025-01-01 21:10:58'); +INSERT INTO `sys_job_log` VALUES (1426, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:34毫秒', '0', '', '2025-01-01 21:11:58'); +INSERT INTO `sys_job_log` VALUES (1427, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:579毫秒', '0', '', '2025-01-01 21:11:58'); +INSERT INTO `sys_job_log` VALUES (1428, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:64毫秒', '0', '', '2025-01-01 21:12:58'); +INSERT INTO `sys_job_log` VALUES (1429, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:38毫秒', '0', '', '2025-01-01 21:13:58'); +INSERT INTO `sys_job_log` VALUES (1430, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:713毫秒', '0', '', '2025-01-01 21:13:58'); +INSERT INTO `sys_job_log` VALUES (1431, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:31毫秒', '0', '', '2025-01-01 21:14:58'); +INSERT INTO `sys_job_log` VALUES (1432, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:69毫秒', '0', '', '2025-01-01 21:15:58'); +INSERT INTO `sys_job_log` VALUES (1433, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:555毫秒', '0', '', '2025-01-01 21:15:58'); +INSERT INTO `sys_job_log` VALUES (1434, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:32毫秒', '0', '', '2025-01-01 21:16:58'); +INSERT INTO `sys_job_log` VALUES (1435, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:34毫秒', '0', '', '2025-01-01 21:17:58'); +INSERT INTO `sys_job_log` VALUES (1436, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:792毫秒', '0', '', '2025-01-01 21:17:58'); +INSERT INTO `sys_job_log` VALUES (1437, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:32毫秒', '0', '', '2025-01-01 21:18:58'); +INSERT INTO `sys_job_log` VALUES (1438, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:76毫秒', '0', '', '2025-01-01 21:19:58'); +INSERT INTO `sys_job_log` VALUES (1439, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:865毫秒', '0', '', '2025-01-01 21:19:59'); +INSERT INTO `sys_job_log` VALUES (1440, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:35毫秒', '0', '', '2025-01-01 21:20:58'); +INSERT INTO `sys_job_log` VALUES (1441, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:31毫秒', '0', '', '2025-01-01 21:22:00'); +INSERT INTO `sys_job_log` VALUES (1442, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:570毫秒', '0', '', '2025-01-01 21:22:00'); +INSERT INTO `sys_job_log` VALUES (1443, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:64毫秒', '0', '', '2025-01-01 21:23:00'); +INSERT INTO `sys_job_log` VALUES (1444, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:71毫秒', '0', '', '2025-01-01 21:24:00'); +INSERT INTO `sys_job_log` VALUES (1445, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:601毫秒', '0', '', '2025-01-01 21:24:00'); +INSERT INTO `sys_job_log` VALUES (1446, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:33毫秒', '0', '', '2025-01-01 21:25:00'); +INSERT INTO `sys_job_log` VALUES (1447, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:40毫秒', '0', '', '2025-01-01 21:26:00'); +INSERT INTO `sys_job_log` VALUES (1448, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:608毫秒', '0', '', '2025-01-01 21:26:00'); +INSERT INTO `sys_job_log` VALUES (1449, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1235毫秒', '0', '', '2025-01-01 21:27:01'); +INSERT INTO `sys_job_log` VALUES (1450, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:75毫秒', '0', '', '2025-01-01 21:28:01'); +INSERT INTO `sys_job_log` VALUES (1451, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:3972毫秒', '0', '', '2025-01-01 21:28:04'); +INSERT INTO `sys_job_log` VALUES (1452, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:127毫秒', '0', '', '2025-01-01 21:29:00'); +INSERT INTO `sys_job_log` VALUES (1453, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:65毫秒', '0', '', '2025-01-01 21:30:00'); +INSERT INTO `sys_job_log` VALUES (1454, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:801毫秒', '0', '', '2025-01-01 21:30:00'); +INSERT INTO `sys_job_log` VALUES (1455, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:38毫秒', '0', '', '2025-01-01 21:31:00'); +INSERT INTO `sys_job_log` VALUES (1456, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:34毫秒', '0', '', '2025-01-01 21:32:00'); +INSERT INTO `sys_job_log` VALUES (1457, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:792毫秒', '0', '', '2025-01-01 21:32:00'); +INSERT INTO `sys_job_log` VALUES (1458, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:31毫秒', '0', '', '2025-01-01 21:33:00'); +INSERT INTO `sys_job_log` VALUES (1459, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:202毫秒', '0', '', '2025-01-01 21:34:00'); +INSERT INTO `sys_job_log` VALUES (1460, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:712毫秒', '0', '', '2025-01-01 21:34:00'); +INSERT INTO `sys_job_log` VALUES (1461, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:35毫秒', '0', '', '2025-01-01 21:35:00'); +INSERT INTO `sys_job_log` VALUES (1462, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:241毫秒', '0', '', '2025-01-01 21:36:00'); +INSERT INTO `sys_job_log` VALUES (1463, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:753毫秒', '0', '', '2025-01-01 21:36:00'); +INSERT INTO `sys_job_log` VALUES (1464, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:35毫秒', '0', '', '2025-01-01 21:37:00'); +INSERT INTO `sys_job_log` VALUES (1465, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:32毫秒', '0', '', '2025-01-01 21:38:00'); +INSERT INTO `sys_job_log` VALUES (1466, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:700毫秒', '0', '', '2025-01-01 21:38:00'); +INSERT INTO `sys_job_log` VALUES (1467, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:53毫秒', '0', '', '2025-01-01 21:39:00'); +INSERT INTO `sys_job_log` VALUES (1468, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:33毫秒', '0', '', '2025-01-01 21:40:00'); +INSERT INTO `sys_job_log` VALUES (1469, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:817毫秒', '0', '', '2025-01-01 21:40:00'); +INSERT INTO `sys_job_log` VALUES (1470, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:33毫秒', '0', '', '2025-01-01 21:41:00'); +INSERT INTO `sys_job_log` VALUES (1471, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:32毫秒', '0', '', '2025-01-01 21:42:00'); +INSERT INTO `sys_job_log` VALUES (1472, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:556毫秒', '0', '', '2025-01-01 21:42:00'); +INSERT INTO `sys_job_log` VALUES (1473, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:38毫秒', '0', '', '2025-01-01 21:43:00'); +INSERT INTO `sys_job_log` VALUES (1474, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:92毫秒', '0', '', '2025-01-01 21:44:00'); +INSERT INTO `sys_job_log` VALUES (1475, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:1637毫秒', '0', '', '2025-01-01 21:44:01'); +INSERT INTO `sys_job_log` VALUES (1476, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:36毫秒', '0', '', '2025-01-01 21:45:00'); +INSERT INTO `sys_job_log` VALUES (1477, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:31毫秒', '0', '', '2025-01-01 21:46:00'); +INSERT INTO `sys_job_log` VALUES (1478, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:881毫秒', '0', '', '2025-01-01 21:46:00'); +INSERT INTO `sys_job_log` VALUES (1479, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:36毫秒', '0', '', '2025-01-01 21:47:00'); +INSERT INTO `sys_job_log` VALUES (1480, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:30毫秒', '0', '', '2025-01-01 21:48:00'); +INSERT INTO `sys_job_log` VALUES (1481, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:588毫秒', '0', '', '2025-01-01 21:48:00'); +INSERT INTO `sys_job_log` VALUES (1482, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:148毫秒', '0', '', '2025-01-01 21:49:00'); +INSERT INTO `sys_job_log` VALUES (1483, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:57毫秒', '0', '', '2025-01-01 21:50:00'); +INSERT INTO `sys_job_log` VALUES (1484, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:552毫秒', '0', '', '2025-01-01 21:50:00'); +INSERT INTO `sys_job_log` VALUES (1485, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:32毫秒', '0', '', '2025-01-01 21:51:00'); +INSERT INTO `sys_job_log` VALUES (1486, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:33毫秒', '0', '', '2025-01-01 21:52:00'); +INSERT INTO `sys_job_log` VALUES (1487, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:575毫秒', '0', '', '2025-01-01 21:52:00'); +INSERT INTO `sys_job_log` VALUES (1488, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1298毫秒', '0', '', '2025-01-01 21:53:01'); +INSERT INTO `sys_job_log` VALUES (1489, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:29毫秒', '0', '', '2025-01-03 14:05:59'); +INSERT INTO `sys_job_log` VALUES (1490, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:161毫秒', '0', '', '2025-01-03 14:05:59'); +INSERT INTO `sys_job_log` VALUES (1491, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:5毫秒', '0', '', '2025-01-03 14:06:59'); +INSERT INTO `sys_job_log` VALUES (1492, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:5毫秒', '0', '', '2025-01-03 14:07:59'); +INSERT INTO `sys_job_log` VALUES (1493, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:68毫秒', '0', '', '2025-01-03 14:07:59'); +INSERT INTO `sys_job_log` VALUES (1494, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:5毫秒', '0', '', '2025-01-03 14:08:59'); +INSERT INTO `sys_job_log` VALUES (1495, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:4毫秒', '0', '', '2025-01-03 14:09:59'); +INSERT INTO `sys_job_log` VALUES (1496, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:65毫秒', '0', '', '2025-01-03 14:09:59'); +INSERT INTO `sys_job_log` VALUES (1497, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:44毫秒', '0', '', '2025-01-06 22:59:11'); +INSERT INTO `sys_job_log` VALUES (1498, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:5毫秒', '0', '', '2025-01-06 23:00:00'); +INSERT INTO `sys_job_log` VALUES (1499, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:113毫秒', '0', '', '2025-01-06 23:00:00'); +INSERT INTO `sys_job_log` VALUES (1500, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:5毫秒', '0', '', '2025-01-06 23:01:00'); +INSERT INTO `sys_job_log` VALUES (1501, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:5毫秒', '0', '', '2025-01-06 23:02:00'); +INSERT INTO `sys_job_log` VALUES (1502, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:62毫秒', '0', '', '2025-01-06 23:02:00'); +INSERT INTO `sys_job_log` VALUES (1503, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:7毫秒', '0', '', '2025-01-06 23:03:00'); +INSERT INTO `sys_job_log` VALUES (1504, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:5毫秒', '0', '', '2025-01-06 23:04:00'); +INSERT INTO `sys_job_log` VALUES (1505, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:59毫秒', '0', '', '2025-01-06 23:04:00'); +INSERT INTO `sys_job_log` VALUES (1506, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:4毫秒', '0', '', '2025-01-06 23:05:00'); +INSERT INTO `sys_job_log` VALUES (1507, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:5毫秒', '0', '', '2025-01-06 23:06:00'); +INSERT INTO `sys_job_log` VALUES (1508, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:63毫秒', '0', '', '2025-01-06 23:06:00'); +INSERT INTO `sys_job_log` VALUES (1509, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:5毫秒', '0', '', '2025-01-06 23:07:00'); +INSERT INTO `sys_job_log` VALUES (1510, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:5毫秒', '0', '', '2025-01-06 23:08:00'); +INSERT INTO `sys_job_log` VALUES (1511, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:49毫秒', '0', '', '2025-01-06 23:08:00'); +INSERT INTO `sys_job_log` VALUES (1512, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:5毫秒', '0', '', '2025-01-06 23:09:00'); +INSERT INTO `sys_job_log` VALUES (1513, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:7毫秒', '0', '', '2025-01-06 23:10:00'); +INSERT INTO `sys_job_log` VALUES (1514, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:57毫秒', '0', '', '2025-01-06 23:10:00'); +INSERT INTO `sys_job_log` VALUES (1515, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:4毫秒', '0', '', '2025-01-06 23:11:00'); +INSERT INTO `sys_job_log` VALUES (1516, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:4毫秒', '0', '', '2025-01-06 23:12:00'); +INSERT INTO `sys_job_log` VALUES (1517, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:51毫秒', '0', '', '2025-01-06 23:12:00'); +INSERT INTO `sys_job_log` VALUES (1518, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:4毫秒', '0', '', '2025-01-06 23:13:00'); +INSERT INTO `sys_job_log` VALUES (1519, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:7毫秒', '0', '', '2025-01-06 23:14:00'); +INSERT INTO `sys_job_log` VALUES (1520, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:58毫秒', '0', '', '2025-01-06 23:14:00'); +INSERT INTO `sys_job_log` VALUES (1521, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:4毫秒', '0', '', '2025-01-06 23:15:00'); +INSERT INTO `sys_job_log` VALUES (1522, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:4毫秒', '0', '', '2025-01-06 23:16:00'); +INSERT INTO `sys_job_log` VALUES (1523, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:44毫秒', '0', '', '2025-01-06 23:16:00'); +INSERT INTO `sys_job_log` VALUES (1524, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:4毫秒', '0', '', '2025-01-06 23:17:00'); +INSERT INTO `sys_job_log` VALUES (1525, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:4毫秒', '0', '', '2025-01-06 23:18:00'); +INSERT INTO `sys_job_log` VALUES (1526, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:45毫秒', '0', '', '2025-01-06 23:18:00'); +INSERT INTO `sys_job_log` VALUES (1527, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:4毫秒', '0', '', '2025-01-06 23:19:00'); +INSERT INTO `sys_job_log` VALUES (1528, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:4毫秒', '0', '', '2025-01-06 23:20:00'); +INSERT INTO `sys_job_log` VALUES (1529, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:40毫秒', '0', '', '2025-01-06 23:20:00'); +INSERT INTO `sys_job_log` VALUES (1530, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:4毫秒', '0', '', '2025-01-06 23:21:00'); +INSERT INTO `sys_job_log` VALUES (1531, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2025-01-06 23:22:00'); +INSERT INTO `sys_job_log` VALUES (1532, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:43毫秒', '0', '', '2025-01-06 23:22:00'); +INSERT INTO `sys_job_log` VALUES (1533, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:4毫秒', '0', '', '2025-01-06 23:23:00'); +INSERT INTO `sys_job_log` VALUES (1534, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2025-01-06 23:24:00'); +INSERT INTO `sys_job_log` VALUES (1535, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:39毫秒', '0', '', '2025-01-06 23:24:00'); +INSERT INTO `sys_job_log` VALUES (1536, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:4毫秒', '0', '', '2025-01-06 23:25:00'); +INSERT INTO `sys_job_log` VALUES (1537, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:4毫秒', '0', '', '2025-01-06 23:26:00'); +INSERT INTO `sys_job_log` VALUES (1538, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:48毫秒', '0', '', '2025-01-06 23:26:00'); +INSERT INTO `sys_job_log` VALUES (1539, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2025-01-06 23:27:00'); +INSERT INTO `sys_job_log` VALUES (1540, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2025-01-06 23:28:00'); +INSERT INTO `sys_job_log` VALUES (1541, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:38毫秒', '0', '', '2025-01-06 23:28:00'); +INSERT INTO `sys_job_log` VALUES (1542, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:4毫秒', '0', '', '2025-01-06 23:29:00'); +INSERT INTO `sys_job_log` VALUES (1543, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:4毫秒', '0', '', '2025-01-06 23:30:00'); +INSERT INTO `sys_job_log` VALUES (1544, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:41毫秒', '0', '', '2025-01-06 23:30:00'); +INSERT INTO `sys_job_log` VALUES (1545, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:4毫秒', '0', '', '2025-01-06 23:31:00'); +INSERT INTO `sys_job_log` VALUES (1546, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:4毫秒', '0', '', '2025-01-06 23:32:00'); +INSERT INTO `sys_job_log` VALUES (1547, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:39毫秒', '0', '', '2025-01-06 23:32:00'); +INSERT INTO `sys_job_log` VALUES (1548, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2025-01-06 23:33:00'); +INSERT INTO `sys_job_log` VALUES (1549, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2025-01-06 23:34:00'); +INSERT INTO `sys_job_log` VALUES (1550, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:32毫秒', '0', '', '2025-01-06 23:34:00'); +INSERT INTO `sys_job_log` VALUES (1551, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2025-01-06 23:35:00'); +INSERT INTO `sys_job_log` VALUES (1552, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:4毫秒', '0', '', '2025-01-06 23:36:00'); +INSERT INTO `sys_job_log` VALUES (1553, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:42毫秒', '0', '', '2025-01-06 23:36:00'); +INSERT INTO `sys_job_log` VALUES (1554, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2025-01-06 23:37:00'); +INSERT INTO `sys_job_log` VALUES (1555, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:4毫秒', '0', '', '2025-01-06 23:38:00'); +INSERT INTO `sys_job_log` VALUES (1556, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:35毫秒', '0', '', '2025-01-06 23:38:00'); +INSERT INTO `sys_job_log` VALUES (1557, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2025-01-06 23:39:00'); +INSERT INTO `sys_job_log` VALUES (1558, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2025-01-06 23:40:00'); +INSERT INTO `sys_job_log` VALUES (1559, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:35毫秒', '0', '', '2025-01-06 23:40:00'); +INSERT INTO `sys_job_log` VALUES (1560, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:4毫秒', '0', '', '2025-01-06 23:41:00'); +INSERT INTO `sys_job_log` VALUES (1561, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2025-01-06 23:42:00'); +INSERT INTO `sys_job_log` VALUES (1562, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:35毫秒', '0', '', '2025-01-06 23:42:00'); +INSERT INTO `sys_job_log` VALUES (1563, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2025-01-06 23:43:00'); +INSERT INTO `sys_job_log` VALUES (1564, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2025-01-06 23:44:00'); +INSERT INTO `sys_job_log` VALUES (1565, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:33毫秒', '0', '', '2025-01-06 23:44:00'); +INSERT INTO `sys_job_log` VALUES (1566, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2025-01-06 23:45:00'); +INSERT INTO `sys_job_log` VALUES (1567, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:7毫秒', '0', '', '2025-01-06 23:50:00'); +INSERT INTO `sys_job_log` VALUES (1568, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:75毫秒', '0', '', '2025-01-06 23:50:00'); +INSERT INTO `sys_job_log` VALUES (1569, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:5毫秒', '0', '', '2025-01-06 23:51:00'); +INSERT INTO `sys_job_log` VALUES (1570, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:4毫秒', '0', '', '2025-01-06 23:52:00'); +INSERT INTO `sys_job_log` VALUES (1571, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:61毫秒', '0', '', '2025-01-06 23:52:00'); +INSERT INTO `sys_job_log` VALUES (1572, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:4毫秒', '0', '', '2025-01-06 23:53:00'); +INSERT INTO `sys_job_log` VALUES (1573, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:4毫秒', '0', '', '2025-01-06 23:54:00'); +INSERT INTO `sys_job_log` VALUES (1574, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:50毫秒', '0', '', '2025-01-06 23:54:00'); +INSERT INTO `sys_job_log` VALUES (1575, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:6毫秒', '0', '', '2025-01-06 23:55:00'); +INSERT INTO `sys_job_log` VALUES (1576, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:4毫秒', '0', '', '2025-01-06 23:56:00'); +INSERT INTO `sys_job_log` VALUES (1577, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:45毫秒', '0', '', '2025-01-06 23:56:00'); +INSERT INTO `sys_job_log` VALUES (1578, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:4毫秒', '0', '', '2025-01-06 23:57:00'); +INSERT INTO `sys_job_log` VALUES (1579, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:4毫秒', '0', '', '2025-01-06 23:58:00'); +INSERT INTO `sys_job_log` VALUES (1580, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:50毫秒', '0', '', '2025-01-06 23:58:00'); +INSERT INTO `sys_job_log` VALUES (1581, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2025-01-06 23:59:00'); +INSERT INTO `sys_job_log` VALUES (1582, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:15毫秒', '0', '', '2025-01-07 00:00:00'); +INSERT INTO `sys_job_log` VALUES (1583, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:97毫秒', '0', '', '2025-01-07 00:00:00'); +INSERT INTO `sys_job_log` VALUES (1584, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:4毫秒', '0', '', '2025-01-07 00:01:00'); +INSERT INTO `sys_job_log` VALUES (1585, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:4毫秒', '0', '', '2025-01-07 00:02:00'); +INSERT INTO `sys_job_log` VALUES (1586, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:46毫秒', '0', '', '2025-01-07 00:02:00'); +INSERT INTO `sys_job_log` VALUES (1587, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:4毫秒', '0', '', '2025-01-07 00:03:00'); +INSERT INTO `sys_job_log` VALUES (1588, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:4毫秒', '0', '', '2025-01-07 00:04:00'); +INSERT INTO `sys_job_log` VALUES (1589, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:46毫秒', '0', '', '2025-01-07 00:04:00'); +INSERT INTO `sys_job_log` VALUES (1590, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:4毫秒', '0', '', '2025-01-07 00:05:00'); +INSERT INTO `sys_job_log` VALUES (1591, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:4毫秒', '0', '', '2025-01-07 00:06:00'); +INSERT INTO `sys_job_log` VALUES (1592, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:39毫秒', '0', '', '2025-01-07 00:06:00'); +INSERT INTO `sys_job_log` VALUES (1593, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2025-01-07 00:07:00'); +INSERT INTO `sys_job_log` VALUES (1594, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:5毫秒', '0', '', '2025-01-07 00:08:00'); +INSERT INTO `sys_job_log` VALUES (1595, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:49毫秒', '0', '', '2025-01-07 00:08:00'); +INSERT INTO `sys_job_log` VALUES (1596, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2025-01-07 00:09:00'); +INSERT INTO `sys_job_log` VALUES (1597, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:4毫秒', '0', '', '2025-01-07 00:10:00'); +INSERT INTO `sys_job_log` VALUES (1598, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:42毫秒', '0', '', '2025-01-07 00:10:00'); +INSERT INTO `sys_job_log` VALUES (1599, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:4毫秒', '0', '', '2025-01-07 00:11:00'); +INSERT INTO `sys_job_log` VALUES (1600, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2025-01-07 00:12:00'); +INSERT INTO `sys_job_log` VALUES (1601, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:40毫秒', '0', '', '2025-01-07 00:12:00'); +INSERT INTO `sys_job_log` VALUES (1602, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2025-01-07 00:13:00'); +INSERT INTO `sys_job_log` VALUES (1603, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2025-01-07 00:14:00'); +INSERT INTO `sys_job_log` VALUES (1604, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:42毫秒', '0', '', '2025-01-07 00:14:00'); +INSERT INTO `sys_job_log` VALUES (1605, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2025-01-07 00:15:00'); +INSERT INTO `sys_job_log` VALUES (1606, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2025-01-07 00:16:00'); +INSERT INTO `sys_job_log` VALUES (1607, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:37毫秒', '0', '', '2025-01-07 00:16:00'); +INSERT INTO `sys_job_log` VALUES (1608, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2025-01-07 00:17:00'); +INSERT INTO `sys_job_log` VALUES (1609, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2025-01-07 00:18:00'); +INSERT INTO `sys_job_log` VALUES (1610, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:43毫秒', '0', '', '2025-01-07 00:18:00'); +INSERT INTO `sys_job_log` VALUES (1611, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2025-01-07 00:19:00'); +INSERT INTO `sys_job_log` VALUES (1612, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2025-01-07 00:20:00'); +INSERT INTO `sys_job_log` VALUES (1613, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:34毫秒', '0', '', '2025-01-07 00:20:00'); +INSERT INTO `sys_job_log` VALUES (1614, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:4毫秒', '0', '', '2025-01-07 00:21:00'); +INSERT INTO `sys_job_log` VALUES (1615, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2025-01-07 00:22:00'); +INSERT INTO `sys_job_log` VALUES (1616, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:33毫秒', '0', '', '2025-01-07 00:22:00'); +INSERT INTO `sys_job_log` VALUES (1617, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2025-01-07 00:23:00'); +INSERT INTO `sys_job_log` VALUES (1618, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 00:24:00'); +INSERT INTO `sys_job_log` VALUES (1619, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:40毫秒', '0', '', '2025-01-07 00:24:00'); +INSERT INTO `sys_job_log` VALUES (1620, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2025-01-07 00:25:00'); +INSERT INTO `sys_job_log` VALUES (1621, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2025-01-07 00:26:00'); +INSERT INTO `sys_job_log` VALUES (1622, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:33毫秒', '0', '', '2025-01-07 00:26:00'); +INSERT INTO `sys_job_log` VALUES (1623, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2025-01-07 00:27:00'); +INSERT INTO `sys_job_log` VALUES (1624, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2025-01-07 00:28:00'); +INSERT INTO `sys_job_log` VALUES (1625, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:30毫秒', '0', '', '2025-01-07 00:28:00'); +INSERT INTO `sys_job_log` VALUES (1626, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2025-01-07 00:29:00'); +INSERT INTO `sys_job_log` VALUES (1627, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:4毫秒', '0', '', '2025-01-07 00:30:00'); +INSERT INTO `sys_job_log` VALUES (1628, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:37毫秒', '0', '', '2025-01-07 00:30:00'); +INSERT INTO `sys_job_log` VALUES (1629, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:4毫秒', '0', '', '2025-01-07 00:31:00'); +INSERT INTO `sys_job_log` VALUES (1630, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:4毫秒', '0', '', '2025-01-07 00:32:00'); +INSERT INTO `sys_job_log` VALUES (1631, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:31毫秒', '0', '', '2025-01-07 00:32:00'); +INSERT INTO `sys_job_log` VALUES (1632, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 00:33:00'); +INSERT INTO `sys_job_log` VALUES (1633, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2025-01-07 00:34:00'); +INSERT INTO `sys_job_log` VALUES (1634, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:34毫秒', '0', '', '2025-01-07 00:34:00'); +INSERT INTO `sys_job_log` VALUES (1635, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2025-01-07 00:35:00'); +INSERT INTO `sys_job_log` VALUES (1636, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2025-01-07 00:36:00'); +INSERT INTO `sys_job_log` VALUES (1637, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:40毫秒', '0', '', '2025-01-07 00:36:00'); +INSERT INTO `sys_job_log` VALUES (1638, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2025-01-07 00:37:00'); +INSERT INTO `sys_job_log` VALUES (1639, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 00:38:00'); +INSERT INTO `sys_job_log` VALUES (1640, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:28毫秒', '0', '', '2025-01-07 00:38:00'); +INSERT INTO `sys_job_log` VALUES (1641, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2025-01-07 00:39:00'); +INSERT INTO `sys_job_log` VALUES (1642, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2025-01-07 00:40:00'); +INSERT INTO `sys_job_log` VALUES (1643, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:38毫秒', '0', '', '2025-01-07 00:40:00'); +INSERT INTO `sys_job_log` VALUES (1644, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2025-01-07 00:41:00'); +INSERT INTO `sys_job_log` VALUES (1645, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2025-01-07 00:42:00'); +INSERT INTO `sys_job_log` VALUES (1646, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:36毫秒', '0', '', '2025-01-07 00:42:00'); +INSERT INTO `sys_job_log` VALUES (1647, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 00:43:00'); +INSERT INTO `sys_job_log` VALUES (1648, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 00:44:00'); +INSERT INTO `sys_job_log` VALUES (1649, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:28毫秒', '0', '', '2025-01-07 00:44:00'); +INSERT INTO `sys_job_log` VALUES (1650, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 00:45:00'); +INSERT INTO `sys_job_log` VALUES (1651, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 00:46:00'); +INSERT INTO `sys_job_log` VALUES (1652, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:29毫秒', '0', '', '2025-01-07 00:46:00'); +INSERT INTO `sys_job_log` VALUES (1653, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 00:47:00'); +INSERT INTO `sys_job_log` VALUES (1654, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2025-01-07 00:48:00'); +INSERT INTO `sys_job_log` VALUES (1655, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:31毫秒', '0', '', '2025-01-07 00:48:00'); +INSERT INTO `sys_job_log` VALUES (1656, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 00:49:00'); +INSERT INTO `sys_job_log` VALUES (1657, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 00:50:00'); +INSERT INTO `sys_job_log` VALUES (1658, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:33毫秒', '0', '', '2025-01-07 00:50:00'); +INSERT INTO `sys_job_log` VALUES (1659, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 00:51:00'); +INSERT INTO `sys_job_log` VALUES (1660, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2025-01-07 00:52:00'); +INSERT INTO `sys_job_log` VALUES (1661, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:30毫秒', '0', '', '2025-01-07 00:52:00'); +INSERT INTO `sys_job_log` VALUES (1662, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2025-01-07 00:53:00'); +INSERT INTO `sys_job_log` VALUES (1663, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2025-01-07 00:54:00'); +INSERT INTO `sys_job_log` VALUES (1664, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:31毫秒', '0', '', '2025-01-07 00:54:00'); +INSERT INTO `sys_job_log` VALUES (1665, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2025-01-07 00:55:00'); +INSERT INTO `sys_job_log` VALUES (1666, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2025-01-07 00:56:00'); +INSERT INTO `sys_job_log` VALUES (1667, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:35毫秒', '0', '', '2025-01-07 00:56:00'); +INSERT INTO `sys_job_log` VALUES (1668, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 00:57:00'); +INSERT INTO `sys_job_log` VALUES (1669, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 00:58:00'); +INSERT INTO `sys_job_log` VALUES (1670, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:34毫秒', '0', '', '2025-01-07 00:58:00'); +INSERT INTO `sys_job_log` VALUES (1671, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 00:59:00'); +INSERT INTO `sys_job_log` VALUES (1672, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 01:00:00'); +INSERT INTO `sys_job_log` VALUES (1673, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:57毫秒', '0', '', '2025-01-07 01:00:00'); +INSERT INTO `sys_job_log` VALUES (1674, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2025-01-07 01:01:00'); +INSERT INTO `sys_job_log` VALUES (1675, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 01:02:00'); +INSERT INTO `sys_job_log` VALUES (1676, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:29毫秒', '0', '', '2025-01-07 01:02:00'); +INSERT INTO `sys_job_log` VALUES (1677, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2025-01-07 01:03:00'); +INSERT INTO `sys_job_log` VALUES (1678, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2025-01-07 01:04:00'); +INSERT INTO `sys_job_log` VALUES (1679, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:31毫秒', '0', '', '2025-01-07 01:04:00'); +INSERT INTO `sys_job_log` VALUES (1680, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 01:05:00'); +INSERT INTO `sys_job_log` VALUES (1681, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 01:06:00'); +INSERT INTO `sys_job_log` VALUES (1682, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:24毫秒', '0', '', '2025-01-07 01:06:00'); +INSERT INTO `sys_job_log` VALUES (1683, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 01:07:00'); +INSERT INTO `sys_job_log` VALUES (1684, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 01:08:00'); +INSERT INTO `sys_job_log` VALUES (1685, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:26毫秒', '0', '', '2025-01-07 01:08:00'); +INSERT INTO `sys_job_log` VALUES (1686, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2025-01-07 01:09:00'); +INSERT INTO `sys_job_log` VALUES (1687, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 01:10:00'); +INSERT INTO `sys_job_log` VALUES (1688, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:31毫秒', '0', '', '2025-01-07 01:10:00'); +INSERT INTO `sys_job_log` VALUES (1689, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2025-01-07 01:11:00'); +INSERT INTO `sys_job_log` VALUES (1690, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 01:12:00'); +INSERT INTO `sys_job_log` VALUES (1691, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:28毫秒', '0', '', '2025-01-07 01:12:00'); +INSERT INTO `sys_job_log` VALUES (1692, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 01:13:00'); +INSERT INTO `sys_job_log` VALUES (1693, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 01:14:00'); +INSERT INTO `sys_job_log` VALUES (1694, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:31毫秒', '0', '', '2025-01-07 01:14:00'); +INSERT INTO `sys_job_log` VALUES (1695, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2025-01-07 01:15:00'); +INSERT INTO `sys_job_log` VALUES (1696, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 01:16:00'); +INSERT INTO `sys_job_log` VALUES (1697, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:25毫秒', '0', '', '2025-01-07 01:16:00'); +INSERT INTO `sys_job_log` VALUES (1698, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2025-01-07 01:17:00'); +INSERT INTO `sys_job_log` VALUES (1699, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 01:18:00'); +INSERT INTO `sys_job_log` VALUES (1700, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:26毫秒', '0', '', '2025-01-07 01:18:00'); +INSERT INTO `sys_job_log` VALUES (1701, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 01:19:00'); +INSERT INTO `sys_job_log` VALUES (1702, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:4毫秒', '0', '', '2025-01-07 01:20:00'); +INSERT INTO `sys_job_log` VALUES (1703, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:26毫秒', '0', '', '2025-01-07 01:20:00'); +INSERT INTO `sys_job_log` VALUES (1704, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2025-01-07 01:21:00'); +INSERT INTO `sys_job_log` VALUES (1705, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2025-01-07 01:22:00'); +INSERT INTO `sys_job_log` VALUES (1706, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:28毫秒', '0', '', '2025-01-07 01:22:00'); +INSERT INTO `sys_job_log` VALUES (1707, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2025-01-07 01:23:00'); +INSERT INTO `sys_job_log` VALUES (1708, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2025-01-07 01:24:00'); +INSERT INTO `sys_job_log` VALUES (1709, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:27毫秒', '0', '', '2025-01-07 01:24:00'); +INSERT INTO `sys_job_log` VALUES (1710, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 01:25:00'); +INSERT INTO `sys_job_log` VALUES (1711, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 01:26:00'); +INSERT INTO `sys_job_log` VALUES (1712, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:27毫秒', '0', '', '2025-01-07 01:26:00'); +INSERT INTO `sys_job_log` VALUES (1713, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 01:27:00'); +INSERT INTO `sys_job_log` VALUES (1714, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2025-01-07 01:28:00'); +INSERT INTO `sys_job_log` VALUES (1715, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:26毫秒', '0', '', '2025-01-07 01:28:00'); +INSERT INTO `sys_job_log` VALUES (1716, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2025-01-07 01:29:00'); +INSERT INTO `sys_job_log` VALUES (1717, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 01:30:00'); +INSERT INTO `sys_job_log` VALUES (1718, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:24毫秒', '0', '', '2025-01-07 01:30:00'); +INSERT INTO `sys_job_log` VALUES (1719, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 01:31:00'); +INSERT INTO `sys_job_log` VALUES (1720, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 01:32:00'); +INSERT INTO `sys_job_log` VALUES (1721, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:27毫秒', '0', '', '2025-01-07 01:32:00'); +INSERT INTO `sys_job_log` VALUES (1722, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2025-01-07 01:33:00'); +INSERT INTO `sys_job_log` VALUES (1723, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 01:34:00'); +INSERT INTO `sys_job_log` VALUES (1724, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:27毫秒', '0', '', '2025-01-07 01:34:00'); +INSERT INTO `sys_job_log` VALUES (1725, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2025-01-07 01:35:00'); +INSERT INTO `sys_job_log` VALUES (1726, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 01:36:00'); +INSERT INTO `sys_job_log` VALUES (1727, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:31毫秒', '0', '', '2025-01-07 01:36:00'); +INSERT INTO `sys_job_log` VALUES (1728, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2025-01-07 01:37:00'); +INSERT INTO `sys_job_log` VALUES (1729, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2025-01-07 01:38:00'); +INSERT INTO `sys_job_log` VALUES (1730, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:28毫秒', '0', '', '2025-01-07 01:38:00'); +INSERT INTO `sys_job_log` VALUES (1731, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 01:39:00'); +INSERT INTO `sys_job_log` VALUES (1732, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2025-01-07 01:40:00'); +INSERT INTO `sys_job_log` VALUES (1733, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:24毫秒', '0', '', '2025-01-07 01:40:00'); +INSERT INTO `sys_job_log` VALUES (1734, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 01:41:00'); +INSERT INTO `sys_job_log` VALUES (1735, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2025-01-07 01:42:00'); +INSERT INTO `sys_job_log` VALUES (1736, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:31毫秒', '0', '', '2025-01-07 01:42:00'); +INSERT INTO `sys_job_log` VALUES (1737, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2025-01-07 01:43:00'); +INSERT INTO `sys_job_log` VALUES (1738, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2025-01-07 01:44:00'); +INSERT INTO `sys_job_log` VALUES (1739, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:27毫秒', '0', '', '2025-01-07 01:44:00'); +INSERT INTO `sys_job_log` VALUES (1740, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 01:45:00'); +INSERT INTO `sys_job_log` VALUES (1741, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 01:46:00'); +INSERT INTO `sys_job_log` VALUES (1742, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:30毫秒', '0', '', '2025-01-07 01:46:00'); +INSERT INTO `sys_job_log` VALUES (1743, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 01:47:00'); +INSERT INTO `sys_job_log` VALUES (1744, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2025-01-07 01:48:00'); +INSERT INTO `sys_job_log` VALUES (1745, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:27毫秒', '0', '', '2025-01-07 01:48:00'); +INSERT INTO `sys_job_log` VALUES (1746, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2025-01-07 01:49:00'); +INSERT INTO `sys_job_log` VALUES (1747, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 01:50:00'); +INSERT INTO `sys_job_log` VALUES (1748, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:30毫秒', '0', '', '2025-01-07 01:50:00'); +INSERT INTO `sys_job_log` VALUES (1749, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 01:51:00'); +INSERT INTO `sys_job_log` VALUES (1750, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 01:52:00'); +INSERT INTO `sys_job_log` VALUES (1751, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:28毫秒', '0', '', '2025-01-07 01:52:00'); +INSERT INTO `sys_job_log` VALUES (1752, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2025-01-07 01:53:00'); +INSERT INTO `sys_job_log` VALUES (1753, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 01:54:00'); +INSERT INTO `sys_job_log` VALUES (1754, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:34毫秒', '0', '', '2025-01-07 01:54:00'); +INSERT INTO `sys_job_log` VALUES (1755, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 01:55:00'); +INSERT INTO `sys_job_log` VALUES (1756, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 01:56:00'); +INSERT INTO `sys_job_log` VALUES (1757, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:33毫秒', '0', '', '2025-01-07 01:56:00'); +INSERT INTO `sys_job_log` VALUES (1758, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2025-01-07 01:57:00'); +INSERT INTO `sys_job_log` VALUES (1759, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2025-01-07 01:58:00'); +INSERT INTO `sys_job_log` VALUES (1760, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:33毫秒', '0', '', '2025-01-07 01:58:00'); +INSERT INTO `sys_job_log` VALUES (1761, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 01:59:00'); +INSERT INTO `sys_job_log` VALUES (1762, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2025-01-07 02:00:00'); +INSERT INTO `sys_job_log` VALUES (1763, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:28毫秒', '0', '', '2025-01-07 02:00:00'); +INSERT INTO `sys_job_log` VALUES (1764, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2025-01-07 02:01:00'); +INSERT INTO `sys_job_log` VALUES (1765, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 02:02:00'); +INSERT INTO `sys_job_log` VALUES (1766, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:27毫秒', '0', '', '2025-01-07 02:02:00'); +INSERT INTO `sys_job_log` VALUES (1767, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2025-01-07 02:03:00'); +INSERT INTO `sys_job_log` VALUES (1768, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2025-01-07 02:04:00'); +INSERT INTO `sys_job_log` VALUES (1769, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:30毫秒', '0', '', '2025-01-07 02:04:00'); +INSERT INTO `sys_job_log` VALUES (1770, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2025-01-07 02:05:00'); +INSERT INTO `sys_job_log` VALUES (1771, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 02:06:00'); +INSERT INTO `sys_job_log` VALUES (1772, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:28毫秒', '0', '', '2025-01-07 02:06:00'); +INSERT INTO `sys_job_log` VALUES (1773, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2025-01-07 02:07:00'); +INSERT INTO `sys_job_log` VALUES (1774, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 02:08:00'); +INSERT INTO `sys_job_log` VALUES (1775, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:25毫秒', '0', '', '2025-01-07 02:08:00'); +INSERT INTO `sys_job_log` VALUES (1776, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 02:09:00'); +INSERT INTO `sys_job_log` VALUES (1777, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 02:10:00'); +INSERT INTO `sys_job_log` VALUES (1778, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:26毫秒', '0', '', '2025-01-07 02:10:00'); +INSERT INTO `sys_job_log` VALUES (1779, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2025-01-07 02:11:00'); +INSERT INTO `sys_job_log` VALUES (1780, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2025-01-07 02:12:00'); +INSERT INTO `sys_job_log` VALUES (1781, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:24毫秒', '0', '', '2025-01-07 02:12:00'); +INSERT INTO `sys_job_log` VALUES (1782, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 02:13:00'); +INSERT INTO `sys_job_log` VALUES (1783, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2025-01-07 02:14:00'); +INSERT INTO `sys_job_log` VALUES (1784, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:28毫秒', '0', '', '2025-01-07 02:14:00'); +INSERT INTO `sys_job_log` VALUES (1785, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2025-01-07 02:15:00'); +INSERT INTO `sys_job_log` VALUES (1786, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2025-01-07 02:16:00'); +INSERT INTO `sys_job_log` VALUES (1787, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:24毫秒', '0', '', '2025-01-07 02:16:00'); +INSERT INTO `sys_job_log` VALUES (1788, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 02:17:00'); +INSERT INTO `sys_job_log` VALUES (1789, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2025-01-07 02:18:00'); +INSERT INTO `sys_job_log` VALUES (1790, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:27毫秒', '0', '', '2025-01-07 02:18:00'); +INSERT INTO `sys_job_log` VALUES (1791, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 02:19:00'); +INSERT INTO `sys_job_log` VALUES (1792, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2025-01-07 02:20:00'); +INSERT INTO `sys_job_log` VALUES (1793, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:30毫秒', '0', '', '2025-01-07 02:20:00'); +INSERT INTO `sys_job_log` VALUES (1794, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 02:21:00'); +INSERT INTO `sys_job_log` VALUES (1795, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 02:22:00'); +INSERT INTO `sys_job_log` VALUES (1796, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:25毫秒', '0', '', '2025-01-07 02:22:00'); +INSERT INTO `sys_job_log` VALUES (1797, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 02:23:00'); +INSERT INTO `sys_job_log` VALUES (1798, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 02:24:00'); +INSERT INTO `sys_job_log` VALUES (1799, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:25毫秒', '0', '', '2025-01-07 02:24:00'); +INSERT INTO `sys_job_log` VALUES (1800, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2025-01-07 02:25:00'); +INSERT INTO `sys_job_log` VALUES (1801, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 02:26:00'); +INSERT INTO `sys_job_log` VALUES (1802, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:31毫秒', '0', '', '2025-01-07 02:26:00'); +INSERT INTO `sys_job_log` VALUES (1803, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 02:27:00'); +INSERT INTO `sys_job_log` VALUES (1804, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 02:28:00'); +INSERT INTO `sys_job_log` VALUES (1805, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:27毫秒', '0', '', '2025-01-07 02:28:00'); +INSERT INTO `sys_job_log` VALUES (1806, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2025-01-07 02:29:00'); +INSERT INTO `sys_job_log` VALUES (1807, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 02:30:00'); +INSERT INTO `sys_job_log` VALUES (1808, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:26毫秒', '0', '', '2025-01-07 02:30:00'); +INSERT INTO `sys_job_log` VALUES (1809, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 02:31:00'); +INSERT INTO `sys_job_log` VALUES (1810, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 02:32:00'); +INSERT INTO `sys_job_log` VALUES (1811, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:27毫秒', '0', '', '2025-01-07 02:32:00'); +INSERT INTO `sys_job_log` VALUES (1812, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2025-01-07 02:33:00'); +INSERT INTO `sys_job_log` VALUES (1813, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 02:34:00'); +INSERT INTO `sys_job_log` VALUES (1814, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:28毫秒', '0', '', '2025-01-07 02:34:00'); +INSERT INTO `sys_job_log` VALUES (1815, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 02:35:00'); +INSERT INTO `sys_job_log` VALUES (1816, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 02:36:00'); +INSERT INTO `sys_job_log` VALUES (1817, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:27毫秒', '0', '', '2025-01-07 02:36:00'); +INSERT INTO `sys_job_log` VALUES (1818, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2025-01-07 02:37:00'); +INSERT INTO `sys_job_log` VALUES (1819, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 02:38:00'); +INSERT INTO `sys_job_log` VALUES (1820, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:26毫秒', '0', '', '2025-01-07 02:38:00'); +INSERT INTO `sys_job_log` VALUES (1821, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2025-01-07 02:39:00'); +INSERT INTO `sys_job_log` VALUES (1822, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 02:40:00'); +INSERT INTO `sys_job_log` VALUES (1823, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:30毫秒', '0', '', '2025-01-07 02:40:00'); +INSERT INTO `sys_job_log` VALUES (1824, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 02:41:00'); +INSERT INTO `sys_job_log` VALUES (1825, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 02:42:00'); +INSERT INTO `sys_job_log` VALUES (1826, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:27毫秒', '0', '', '2025-01-07 02:42:00'); +INSERT INTO `sys_job_log` VALUES (1827, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2025-01-07 02:43:00'); +INSERT INTO `sys_job_log` VALUES (1828, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 02:44:00'); +INSERT INTO `sys_job_log` VALUES (1829, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:29毫秒', '0', '', '2025-01-07 02:44:00'); +INSERT INTO `sys_job_log` VALUES (1830, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 02:45:00'); +INSERT INTO `sys_job_log` VALUES (1831, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 02:46:00'); +INSERT INTO `sys_job_log` VALUES (1832, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:23毫秒', '0', '', '2025-01-07 02:46:00'); +INSERT INTO `sys_job_log` VALUES (1833, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 02:47:00'); +INSERT INTO `sys_job_log` VALUES (1834, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 02:48:00'); +INSERT INTO `sys_job_log` VALUES (1835, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:24毫秒', '0', '', '2025-01-07 02:48:00'); +INSERT INTO `sys_job_log` VALUES (1836, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 02:49:00'); +INSERT INTO `sys_job_log` VALUES (1837, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2025-01-07 02:50:00'); +INSERT INTO `sys_job_log` VALUES (1838, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:26毫秒', '0', '', '2025-01-07 02:50:00'); +INSERT INTO `sys_job_log` VALUES (1839, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 02:51:00'); +INSERT INTO `sys_job_log` VALUES (1840, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2025-01-07 02:52:00'); +INSERT INTO `sys_job_log` VALUES (1841, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:25毫秒', '0', '', '2025-01-07 02:52:00'); +INSERT INTO `sys_job_log` VALUES (1842, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 02:53:00'); +INSERT INTO `sys_job_log` VALUES (1843, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2025-01-07 02:54:00'); +INSERT INTO `sys_job_log` VALUES (1844, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:26毫秒', '0', '', '2025-01-07 02:54:00'); +INSERT INTO `sys_job_log` VALUES (1845, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2025-01-07 02:55:00'); +INSERT INTO `sys_job_log` VALUES (1846, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 02:56:00'); +INSERT INTO `sys_job_log` VALUES (1847, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:27毫秒', '0', '', '2025-01-07 02:56:00'); +INSERT INTO `sys_job_log` VALUES (1848, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 02:57:00'); +INSERT INTO `sys_job_log` VALUES (1849, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 02:58:00'); +INSERT INTO `sys_job_log` VALUES (1850, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:29毫秒', '0', '', '2025-01-07 02:58:00'); +INSERT INTO `sys_job_log` VALUES (1851, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 02:59:00'); +INSERT INTO `sys_job_log` VALUES (1852, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2025-01-07 03:00:00'); +INSERT INTO `sys_job_log` VALUES (1853, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:24毫秒', '0', '', '2025-01-07 03:00:00'); +INSERT INTO `sys_job_log` VALUES (1854, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2025-01-07 03:01:00'); +INSERT INTO `sys_job_log` VALUES (1855, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 03:02:00'); +INSERT INTO `sys_job_log` VALUES (1856, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:27毫秒', '0', '', '2025-01-07 03:02:00'); +INSERT INTO `sys_job_log` VALUES (1857, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2025-01-07 03:03:00'); +INSERT INTO `sys_job_log` VALUES (1858, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 03:04:00'); +INSERT INTO `sys_job_log` VALUES (1859, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:25毫秒', '0', '', '2025-01-07 03:04:00'); +INSERT INTO `sys_job_log` VALUES (1860, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 03:05:00'); +INSERT INTO `sys_job_log` VALUES (1861, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 03:06:00'); +INSERT INTO `sys_job_log` VALUES (1862, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:22毫秒', '0', '', '2025-01-07 03:06:00'); +INSERT INTO `sys_job_log` VALUES (1863, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 03:07:00'); +INSERT INTO `sys_job_log` VALUES (1864, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 03:08:00'); +INSERT INTO `sys_job_log` VALUES (1865, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:27毫秒', '0', '', '2025-01-07 03:08:00'); +INSERT INTO `sys_job_log` VALUES (1866, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 03:09:00'); +INSERT INTO `sys_job_log` VALUES (1867, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 03:10:00'); +INSERT INTO `sys_job_log` VALUES (1868, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:27毫秒', '0', '', '2025-01-07 03:10:00'); +INSERT INTO `sys_job_log` VALUES (1869, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 03:11:00'); +INSERT INTO `sys_job_log` VALUES (1870, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 03:12:00'); +INSERT INTO `sys_job_log` VALUES (1871, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:34毫秒', '0', '', '2025-01-07 03:12:00'); +INSERT INTO `sys_job_log` VALUES (1872, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 03:13:00'); +INSERT INTO `sys_job_log` VALUES (1873, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 03:14:00'); +INSERT INTO `sys_job_log` VALUES (1874, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:26毫秒', '0', '', '2025-01-07 03:14:00'); +INSERT INTO `sys_job_log` VALUES (1875, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 03:15:00'); +INSERT INTO `sys_job_log` VALUES (1876, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2025-01-07 03:16:00'); +INSERT INTO `sys_job_log` VALUES (1877, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:27毫秒', '0', '', '2025-01-07 03:16:00'); +INSERT INTO `sys_job_log` VALUES (1878, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 03:17:00'); +INSERT INTO `sys_job_log` VALUES (1879, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 03:18:00'); +INSERT INTO `sys_job_log` VALUES (1880, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:28毫秒', '0', '', '2025-01-07 03:18:00'); +INSERT INTO `sys_job_log` VALUES (1881, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 03:19:00'); +INSERT INTO `sys_job_log` VALUES (1882, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2025-01-07 03:20:00'); +INSERT INTO `sys_job_log` VALUES (1883, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:29毫秒', '0', '', '2025-01-07 03:20:00'); +INSERT INTO `sys_job_log` VALUES (1884, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 03:21:00'); +INSERT INTO `sys_job_log` VALUES (1885, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 03:22:00'); +INSERT INTO `sys_job_log` VALUES (1886, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:28毫秒', '0', '', '2025-01-07 03:22:00'); +INSERT INTO `sys_job_log` VALUES (1887, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 03:23:00'); +INSERT INTO `sys_job_log` VALUES (1888, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 03:24:00'); +INSERT INTO `sys_job_log` VALUES (1889, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:25毫秒', '0', '', '2025-01-07 03:24:00'); +INSERT INTO `sys_job_log` VALUES (1890, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 03:25:00'); +INSERT INTO `sys_job_log` VALUES (1891, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 03:26:00'); +INSERT INTO `sys_job_log` VALUES (1892, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:26毫秒', '0', '', '2025-01-07 03:26:00'); +INSERT INTO `sys_job_log` VALUES (1893, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 03:27:00'); +INSERT INTO `sys_job_log` VALUES (1894, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2025-01-07 03:28:00'); +INSERT INTO `sys_job_log` VALUES (1895, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:23毫秒', '0', '', '2025-01-07 03:28:00'); +INSERT INTO `sys_job_log` VALUES (1896, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 03:29:00'); +INSERT INTO `sys_job_log` VALUES (1897, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 03:30:00'); +INSERT INTO `sys_job_log` VALUES (1898, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:25毫秒', '0', '', '2025-01-07 03:30:00'); +INSERT INTO `sys_job_log` VALUES (1899, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 03:31:00'); +INSERT INTO `sys_job_log` VALUES (1900, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2025-01-07 03:32:00'); +INSERT INTO `sys_job_log` VALUES (1901, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:24毫秒', '0', '', '2025-01-07 03:32:00'); +INSERT INTO `sys_job_log` VALUES (1902, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2025-01-07 03:33:00'); +INSERT INTO `sys_job_log` VALUES (1903, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2025-01-07 03:34:00'); +INSERT INTO `sys_job_log` VALUES (1904, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:23毫秒', '0', '', '2025-01-07 03:34:00'); +INSERT INTO `sys_job_log` VALUES (1905, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2025-01-07 03:35:00'); +INSERT INTO `sys_job_log` VALUES (1906, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 03:36:00'); +INSERT INTO `sys_job_log` VALUES (1907, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:24毫秒', '0', '', '2025-01-07 03:36:00'); +INSERT INTO `sys_job_log` VALUES (1908, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 03:37:00'); +INSERT INTO `sys_job_log` VALUES (1909, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 03:38:00'); +INSERT INTO `sys_job_log` VALUES (1910, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:26毫秒', '0', '', '2025-01-07 03:38:00'); +INSERT INTO `sys_job_log` VALUES (1911, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 03:39:00'); +INSERT INTO `sys_job_log` VALUES (1912, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2025-01-07 03:40:00'); +INSERT INTO `sys_job_log` VALUES (1913, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:29毫秒', '0', '', '2025-01-07 03:40:00'); +INSERT INTO `sys_job_log` VALUES (1914, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 03:41:00'); +INSERT INTO `sys_job_log` VALUES (1915, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 03:42:00'); +INSERT INTO `sys_job_log` VALUES (1916, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:24毫秒', '0', '', '2025-01-07 03:42:00'); +INSERT INTO `sys_job_log` VALUES (1917, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 03:43:00'); +INSERT INTO `sys_job_log` VALUES (1918, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 03:44:00'); +INSERT INTO `sys_job_log` VALUES (1919, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:25毫秒', '0', '', '2025-01-07 03:44:00'); +INSERT INTO `sys_job_log` VALUES (1920, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 03:45:00'); +INSERT INTO `sys_job_log` VALUES (1921, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 03:46:00'); +INSERT INTO `sys_job_log` VALUES (1922, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:23毫秒', '0', '', '2025-01-07 03:46:00'); +INSERT INTO `sys_job_log` VALUES (1923, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2025-01-07 03:47:00'); +INSERT INTO `sys_job_log` VALUES (1924, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 03:48:00'); +INSERT INTO `sys_job_log` VALUES (1925, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:30毫秒', '0', '', '2025-01-07 03:48:00'); +INSERT INTO `sys_job_log` VALUES (1926, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2025-01-07 03:49:00'); +INSERT INTO `sys_job_log` VALUES (1927, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 03:50:00'); +INSERT INTO `sys_job_log` VALUES (1928, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:27毫秒', '0', '', '2025-01-07 03:50:00'); +INSERT INTO `sys_job_log` VALUES (1929, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2025-01-07 03:51:00'); +INSERT INTO `sys_job_log` VALUES (1930, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 03:52:00'); +INSERT INTO `sys_job_log` VALUES (1931, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:24毫秒', '0', '', '2025-01-07 03:52:00'); +INSERT INTO `sys_job_log` VALUES (1932, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2025-01-07 03:53:00'); +INSERT INTO `sys_job_log` VALUES (1933, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2025-01-07 03:54:00'); +INSERT INTO `sys_job_log` VALUES (1934, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:26毫秒', '0', '', '2025-01-07 03:54:00'); +INSERT INTO `sys_job_log` VALUES (1935, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 03:55:00'); +INSERT INTO `sys_job_log` VALUES (1936, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 03:56:00'); +INSERT INTO `sys_job_log` VALUES (1937, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:27毫秒', '0', '', '2025-01-07 03:56:00'); +INSERT INTO `sys_job_log` VALUES (1938, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 03:57:00'); +INSERT INTO `sys_job_log` VALUES (1939, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 03:58:00'); +INSERT INTO `sys_job_log` VALUES (1940, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:24毫秒', '0', '', '2025-01-07 03:58:00'); +INSERT INTO `sys_job_log` VALUES (1941, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 03:59:00'); +INSERT INTO `sys_job_log` VALUES (1942, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 04:00:00'); +INSERT INTO `sys_job_log` VALUES (1943, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:28毫秒', '0', '', '2025-01-07 04:00:00'); +INSERT INTO `sys_job_log` VALUES (1944, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2025-01-07 04:01:00'); +INSERT INTO `sys_job_log` VALUES (1945, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 04:02:00'); +INSERT INTO `sys_job_log` VALUES (1946, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:24毫秒', '0', '', '2025-01-07 04:02:00'); +INSERT INTO `sys_job_log` VALUES (1947, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2025-01-07 04:03:00'); +INSERT INTO `sys_job_log` VALUES (1948, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 04:04:00'); +INSERT INTO `sys_job_log` VALUES (1949, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:28毫秒', '0', '', '2025-01-07 04:04:00'); +INSERT INTO `sys_job_log` VALUES (1950, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2025-01-07 04:05:00'); +INSERT INTO `sys_job_log` VALUES (1951, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 04:06:00'); +INSERT INTO `sys_job_log` VALUES (1952, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:29毫秒', '0', '', '2025-01-07 04:06:00'); +INSERT INTO `sys_job_log` VALUES (1953, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 04:07:00'); +INSERT INTO `sys_job_log` VALUES (1954, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 04:08:00'); +INSERT INTO `sys_job_log` VALUES (1955, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:27毫秒', '0', '', '2025-01-07 04:08:00'); +INSERT INTO `sys_job_log` VALUES (1956, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2025-01-07 04:09:00'); +INSERT INTO `sys_job_log` VALUES (1957, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2025-01-07 04:10:00'); +INSERT INTO `sys_job_log` VALUES (1958, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:25毫秒', '0', '', '2025-01-07 04:10:00'); +INSERT INTO `sys_job_log` VALUES (1959, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 04:11:00'); +INSERT INTO `sys_job_log` VALUES (1960, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 04:12:00'); +INSERT INTO `sys_job_log` VALUES (1961, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:29毫秒', '0', '', '2025-01-07 04:12:00'); +INSERT INTO `sys_job_log` VALUES (1962, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 04:13:00'); +INSERT INTO `sys_job_log` VALUES (1963, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 04:14:00'); +INSERT INTO `sys_job_log` VALUES (1964, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:27毫秒', '0', '', '2025-01-07 04:14:00'); +INSERT INTO `sys_job_log` VALUES (1965, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 04:15:00'); +INSERT INTO `sys_job_log` VALUES (1966, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2025-01-07 04:16:00'); +INSERT INTO `sys_job_log` VALUES (1967, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:26毫秒', '0', '', '2025-01-07 04:16:00'); +INSERT INTO `sys_job_log` VALUES (1968, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 04:17:00'); +INSERT INTO `sys_job_log` VALUES (1969, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 04:18:00'); +INSERT INTO `sys_job_log` VALUES (1970, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:29毫秒', '0', '', '2025-01-07 04:18:00'); +INSERT INTO `sys_job_log` VALUES (1971, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 04:19:00'); +INSERT INTO `sys_job_log` VALUES (1972, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 04:20:00'); +INSERT INTO `sys_job_log` VALUES (1973, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:23毫秒', '0', '', '2025-01-07 04:20:00'); +INSERT INTO `sys_job_log` VALUES (1974, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 04:21:00'); +INSERT INTO `sys_job_log` VALUES (1975, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 04:22:00'); +INSERT INTO `sys_job_log` VALUES (1976, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:24毫秒', '0', '', '2025-01-07 04:22:00'); +INSERT INTO `sys_job_log` VALUES (1977, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2025-01-07 04:23:00'); +INSERT INTO `sys_job_log` VALUES (1978, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 04:24:00'); +INSERT INTO `sys_job_log` VALUES (1979, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:23毫秒', '0', '', '2025-01-07 04:24:00'); +INSERT INTO `sys_job_log` VALUES (1980, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 04:25:00'); +INSERT INTO `sys_job_log` VALUES (1981, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 04:26:00'); +INSERT INTO `sys_job_log` VALUES (1982, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:24毫秒', '0', '', '2025-01-07 04:26:00'); +INSERT INTO `sys_job_log` VALUES (1983, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 04:27:00'); +INSERT INTO `sys_job_log` VALUES (1984, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 04:28:00'); +INSERT INTO `sys_job_log` VALUES (1985, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:25毫秒', '0', '', '2025-01-07 04:28:00'); +INSERT INTO `sys_job_log` VALUES (1986, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 04:29:00'); +INSERT INTO `sys_job_log` VALUES (1987, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 04:30:00'); +INSERT INTO `sys_job_log` VALUES (1988, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:23毫秒', '0', '', '2025-01-07 04:30:00'); +INSERT INTO `sys_job_log` VALUES (1989, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 04:31:00'); +INSERT INTO `sys_job_log` VALUES (1990, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 04:32:00'); +INSERT INTO `sys_job_log` VALUES (1991, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:25毫秒', '0', '', '2025-01-07 04:32:00'); +INSERT INTO `sys_job_log` VALUES (1992, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 04:33:00'); +INSERT INTO `sys_job_log` VALUES (1993, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 04:34:00'); +INSERT INTO `sys_job_log` VALUES (1994, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:22毫秒', '0', '', '2025-01-07 04:34:00'); +INSERT INTO `sys_job_log` VALUES (1995, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 04:35:00'); +INSERT INTO `sys_job_log` VALUES (1996, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2025-01-07 04:36:00'); +INSERT INTO `sys_job_log` VALUES (1997, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:22毫秒', '0', '', '2025-01-07 04:36:00'); +INSERT INTO `sys_job_log` VALUES (1998, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2025-01-07 04:37:00'); +INSERT INTO `sys_job_log` VALUES (1999, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2025-01-07 04:38:00'); +INSERT INTO `sys_job_log` VALUES (2000, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:25毫秒', '0', '', '2025-01-07 04:38:00'); +INSERT INTO `sys_job_log` VALUES (2001, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 04:39:00'); +INSERT INTO `sys_job_log` VALUES (2002, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 04:40:00'); +INSERT INTO `sys_job_log` VALUES (2003, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:24毫秒', '0', '', '2025-01-07 04:40:00'); +INSERT INTO `sys_job_log` VALUES (2004, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 04:41:00'); +INSERT INTO `sys_job_log` VALUES (2005, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2025-01-07 04:42:00'); +INSERT INTO `sys_job_log` VALUES (2006, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:23毫秒', '0', '', '2025-01-07 04:42:00'); +INSERT INTO `sys_job_log` VALUES (2007, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 04:43:00'); +INSERT INTO `sys_job_log` VALUES (2008, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 04:44:00'); +INSERT INTO `sys_job_log` VALUES (2009, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:22毫秒', '0', '', '2025-01-07 04:44:00'); +INSERT INTO `sys_job_log` VALUES (2010, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2025-01-07 04:45:00'); +INSERT INTO `sys_job_log` VALUES (2011, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 04:46:00'); +INSERT INTO `sys_job_log` VALUES (2012, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:26毫秒', '0', '', '2025-01-07 04:46:00'); +INSERT INTO `sys_job_log` VALUES (2013, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 04:47:00'); +INSERT INTO `sys_job_log` VALUES (2014, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 04:48:00'); +INSERT INTO `sys_job_log` VALUES (2015, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:24毫秒', '0', '', '2025-01-07 04:48:00'); +INSERT INTO `sys_job_log` VALUES (2016, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 04:49:00'); +INSERT INTO `sys_job_log` VALUES (2017, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 04:50:00'); +INSERT INTO `sys_job_log` VALUES (2018, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:26毫秒', '0', '', '2025-01-07 04:50:00'); +INSERT INTO `sys_job_log` VALUES (2019, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2025-01-07 04:51:00'); +INSERT INTO `sys_job_log` VALUES (2020, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 04:52:00'); +INSERT INTO `sys_job_log` VALUES (2021, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:24毫秒', '0', '', '2025-01-07 04:52:00'); +INSERT INTO `sys_job_log` VALUES (2022, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 04:53:00'); +INSERT INTO `sys_job_log` VALUES (2023, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 04:54:00'); +INSERT INTO `sys_job_log` VALUES (2024, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:24毫秒', '0', '', '2025-01-07 04:54:00'); +INSERT INTO `sys_job_log` VALUES (2025, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 04:55:00'); +INSERT INTO `sys_job_log` VALUES (2026, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 04:56:00'); +INSERT INTO `sys_job_log` VALUES (2027, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:23毫秒', '0', '', '2025-01-07 04:56:00'); +INSERT INTO `sys_job_log` VALUES (2028, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 04:57:00'); +INSERT INTO `sys_job_log` VALUES (2029, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 04:58:00'); +INSERT INTO `sys_job_log` VALUES (2030, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:26毫秒', '0', '', '2025-01-07 04:58:00'); +INSERT INTO `sys_job_log` VALUES (2031, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2025-01-07 04:59:00'); +INSERT INTO `sys_job_log` VALUES (2032, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 05:00:00'); +INSERT INTO `sys_job_log` VALUES (2033, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:24毫秒', '0', '', '2025-01-07 05:00:00'); +INSERT INTO `sys_job_log` VALUES (2034, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 05:01:00'); +INSERT INTO `sys_job_log` VALUES (2035, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 05:02:00'); +INSERT INTO `sys_job_log` VALUES (2036, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:23毫秒', '0', '', '2025-01-07 05:02:00'); +INSERT INTO `sys_job_log` VALUES (2037, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2025-01-07 05:03:00'); +INSERT INTO `sys_job_log` VALUES (2038, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 05:04:00'); +INSERT INTO `sys_job_log` VALUES (2039, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:26毫秒', '0', '', '2025-01-07 05:04:00'); +INSERT INTO `sys_job_log` VALUES (2040, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 05:05:00'); +INSERT INTO `sys_job_log` VALUES (2041, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 05:06:00'); +INSERT INTO `sys_job_log` VALUES (2042, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:47毫秒', '0', '', '2025-01-07 05:06:00'); +INSERT INTO `sys_job_log` VALUES (2043, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:4毫秒', '0', '', '2025-01-07 05:07:00'); +INSERT INTO `sys_job_log` VALUES (2044, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 05:08:00'); +INSERT INTO `sys_job_log` VALUES (2045, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:25毫秒', '0', '', '2025-01-07 05:08:00'); +INSERT INTO `sys_job_log` VALUES (2046, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 05:09:00'); +INSERT INTO `sys_job_log` VALUES (2047, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2025-01-07 05:10:00'); +INSERT INTO `sys_job_log` VALUES (2048, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:22毫秒', '0', '', '2025-01-07 05:10:00'); +INSERT INTO `sys_job_log` VALUES (2049, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 05:11:00'); +INSERT INTO `sys_job_log` VALUES (2050, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2025-01-07 05:12:00'); +INSERT INTO `sys_job_log` VALUES (2051, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:23毫秒', '0', '', '2025-01-07 05:12:00'); +INSERT INTO `sys_job_log` VALUES (2052, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 05:13:00'); +INSERT INTO `sys_job_log` VALUES (2053, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 05:14:00'); +INSERT INTO `sys_job_log` VALUES (2054, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:23毫秒', '0', '', '2025-01-07 05:14:00'); +INSERT INTO `sys_job_log` VALUES (2055, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 05:15:00'); +INSERT INTO `sys_job_log` VALUES (2056, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 05:16:00'); +INSERT INTO `sys_job_log` VALUES (2057, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:24毫秒', '0', '', '2025-01-07 05:16:00'); +INSERT INTO `sys_job_log` VALUES (2058, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 05:17:00'); +INSERT INTO `sys_job_log` VALUES (2059, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 05:18:00'); +INSERT INTO `sys_job_log` VALUES (2060, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:26毫秒', '0', '', '2025-01-07 05:18:00'); +INSERT INTO `sys_job_log` VALUES (2061, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 05:19:00'); +INSERT INTO `sys_job_log` VALUES (2062, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 05:20:00'); +INSERT INTO `sys_job_log` VALUES (2063, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:26毫秒', '0', '', '2025-01-07 05:20:00'); +INSERT INTO `sys_job_log` VALUES (2064, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 05:21:00'); +INSERT INTO `sys_job_log` VALUES (2065, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 05:22:00'); +INSERT INTO `sys_job_log` VALUES (2066, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:23毫秒', '0', '', '2025-01-07 05:22:00'); +INSERT INTO `sys_job_log` VALUES (2067, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 05:23:00'); +INSERT INTO `sys_job_log` VALUES (2068, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 05:24:00'); +INSERT INTO `sys_job_log` VALUES (2069, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:21毫秒', '0', '', '2025-01-07 05:24:00'); +INSERT INTO `sys_job_log` VALUES (2070, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 05:25:00'); +INSERT INTO `sys_job_log` VALUES (2071, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 05:26:00'); +INSERT INTO `sys_job_log` VALUES (2072, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:22毫秒', '0', '', '2025-01-07 05:26:00'); +INSERT INTO `sys_job_log` VALUES (2073, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 05:27:00'); +INSERT INTO `sys_job_log` VALUES (2074, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 05:28:00'); +INSERT INTO `sys_job_log` VALUES (2075, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:26毫秒', '0', '', '2025-01-07 05:28:00'); +INSERT INTO `sys_job_log` VALUES (2076, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 05:29:00'); +INSERT INTO `sys_job_log` VALUES (2077, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 05:30:00'); +INSERT INTO `sys_job_log` VALUES (2078, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:26毫秒', '0', '', '2025-01-07 05:30:00'); +INSERT INTO `sys_job_log` VALUES (2079, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 05:31:00'); +INSERT INTO `sys_job_log` VALUES (2080, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 05:32:00'); +INSERT INTO `sys_job_log` VALUES (2081, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:28毫秒', '0', '', '2025-01-07 05:32:00'); +INSERT INTO `sys_job_log` VALUES (2082, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2025-01-07 05:33:00'); +INSERT INTO `sys_job_log` VALUES (2083, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 05:34:00'); +INSERT INTO `sys_job_log` VALUES (2084, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:27毫秒', '0', '', '2025-01-07 05:34:00'); +INSERT INTO `sys_job_log` VALUES (2085, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 05:35:00'); +INSERT INTO `sys_job_log` VALUES (2086, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 05:36:00'); +INSERT INTO `sys_job_log` VALUES (2087, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:22毫秒', '0', '', '2025-01-07 05:36:00'); +INSERT INTO `sys_job_log` VALUES (2088, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 05:37:00'); +INSERT INTO `sys_job_log` VALUES (2089, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 05:38:00'); +INSERT INTO `sys_job_log` VALUES (2090, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:23毫秒', '0', '', '2025-01-07 05:38:00'); +INSERT INTO `sys_job_log` VALUES (2091, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 05:39:00'); +INSERT INTO `sys_job_log` VALUES (2092, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 05:40:00'); +INSERT INTO `sys_job_log` VALUES (2093, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:27毫秒', '0', '', '2025-01-07 05:40:00'); +INSERT INTO `sys_job_log` VALUES (2094, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2025-01-07 05:41:00'); +INSERT INTO `sys_job_log` VALUES (2095, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 05:42:00'); +INSERT INTO `sys_job_log` VALUES (2096, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:25毫秒', '0', '', '2025-01-07 05:42:00'); +INSERT INTO `sys_job_log` VALUES (2097, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2025-01-07 05:43:00'); +INSERT INTO `sys_job_log` VALUES (2098, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 05:44:00'); +INSERT INTO `sys_job_log` VALUES (2099, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:24毫秒', '0', '', '2025-01-07 05:44:00'); +INSERT INTO `sys_job_log` VALUES (2100, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 05:45:00'); +INSERT INTO `sys_job_log` VALUES (2101, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2025-01-07 05:46:00'); +INSERT INTO `sys_job_log` VALUES (2102, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:23毫秒', '0', '', '2025-01-07 05:46:00'); +INSERT INTO `sys_job_log` VALUES (2103, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 05:47:00'); +INSERT INTO `sys_job_log` VALUES (2104, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 05:48:00'); +INSERT INTO `sys_job_log` VALUES (2105, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:23毫秒', '0', '', '2025-01-07 05:48:00'); +INSERT INTO `sys_job_log` VALUES (2106, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 05:49:00'); +INSERT INTO `sys_job_log` VALUES (2107, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 05:50:00'); +INSERT INTO `sys_job_log` VALUES (2108, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:22毫秒', '0', '', '2025-01-07 05:50:00'); +INSERT INTO `sys_job_log` VALUES (2109, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2025-01-07 05:51:00'); +INSERT INTO `sys_job_log` VALUES (2110, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 05:52:00'); +INSERT INTO `sys_job_log` VALUES (2111, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:24毫秒', '0', '', '2025-01-07 05:52:00'); +INSERT INTO `sys_job_log` VALUES (2112, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2025-01-07 05:53:00'); +INSERT INTO `sys_job_log` VALUES (2113, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 05:54:00'); +INSERT INTO `sys_job_log` VALUES (2114, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:24毫秒', '0', '', '2025-01-07 05:54:00'); +INSERT INTO `sys_job_log` VALUES (2115, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 05:55:00'); +INSERT INTO `sys_job_log` VALUES (2116, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 05:56:00'); +INSERT INTO `sys_job_log` VALUES (2117, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:22毫秒', '0', '', '2025-01-07 05:56:00'); +INSERT INTO `sys_job_log` VALUES (2118, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 05:57:00'); +INSERT INTO `sys_job_log` VALUES (2119, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 05:58:00'); +INSERT INTO `sys_job_log` VALUES (2120, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:22毫秒', '0', '', '2025-01-07 05:58:00'); +INSERT INTO `sys_job_log` VALUES (2121, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 05:59:00'); +INSERT INTO `sys_job_log` VALUES (2122, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 06:00:00'); +INSERT INTO `sys_job_log` VALUES (2123, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:26毫秒', '0', '', '2025-01-07 06:00:00'); +INSERT INTO `sys_job_log` VALUES (2124, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 06:01:00'); +INSERT INTO `sys_job_log` VALUES (2125, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2025-01-07 06:02:00'); +INSERT INTO `sys_job_log` VALUES (2126, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:21毫秒', '0', '', '2025-01-07 06:02:00'); +INSERT INTO `sys_job_log` VALUES (2127, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 06:03:00'); +INSERT INTO `sys_job_log` VALUES (2128, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 06:04:00'); +INSERT INTO `sys_job_log` VALUES (2129, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:24毫秒', '0', '', '2025-01-07 06:04:00'); +INSERT INTO `sys_job_log` VALUES (2130, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 06:05:00'); +INSERT INTO `sys_job_log` VALUES (2131, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 06:06:00'); +INSERT INTO `sys_job_log` VALUES (2132, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:25毫秒', '0', '', '2025-01-07 06:06:00'); +INSERT INTO `sys_job_log` VALUES (2133, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 06:07:00'); +INSERT INTO `sys_job_log` VALUES (2134, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 06:08:00'); +INSERT INTO `sys_job_log` VALUES (2135, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:24毫秒', '0', '', '2025-01-07 06:08:00'); +INSERT INTO `sys_job_log` VALUES (2136, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 06:09:00'); +INSERT INTO `sys_job_log` VALUES (2137, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 06:10:00'); +INSERT INTO `sys_job_log` VALUES (2138, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:25毫秒', '0', '', '2025-01-07 06:10:00'); +INSERT INTO `sys_job_log` VALUES (2139, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 06:11:00'); +INSERT INTO `sys_job_log` VALUES (2140, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 06:12:00'); +INSERT INTO `sys_job_log` VALUES (2141, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:25毫秒', '0', '', '2025-01-07 06:12:00'); +INSERT INTO `sys_job_log` VALUES (2142, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 06:13:00'); +INSERT INTO `sys_job_log` VALUES (2143, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 06:14:00'); +INSERT INTO `sys_job_log` VALUES (2144, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:26毫秒', '0', '', '2025-01-07 06:14:00'); +INSERT INTO `sys_job_log` VALUES (2145, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 06:15:00'); +INSERT INTO `sys_job_log` VALUES (2146, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2025-01-07 06:16:00'); +INSERT INTO `sys_job_log` VALUES (2147, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:26毫秒', '0', '', '2025-01-07 06:16:00'); +INSERT INTO `sys_job_log` VALUES (2148, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2025-01-07 06:17:00'); +INSERT INTO `sys_job_log` VALUES (2149, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 06:18:00'); +INSERT INTO `sys_job_log` VALUES (2150, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:24毫秒', '0', '', '2025-01-07 06:18:00'); +INSERT INTO `sys_job_log` VALUES (2151, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2025-01-07 06:19:00'); +INSERT INTO `sys_job_log` VALUES (2152, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 06:20:00'); +INSERT INTO `sys_job_log` VALUES (2153, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:22毫秒', '0', '', '2025-01-07 06:20:00'); +INSERT INTO `sys_job_log` VALUES (2154, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 06:21:00'); +INSERT INTO `sys_job_log` VALUES (2155, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 06:22:00'); +INSERT INTO `sys_job_log` VALUES (2156, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:25毫秒', '0', '', '2025-01-07 06:22:00'); +INSERT INTO `sys_job_log` VALUES (2157, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 06:23:00'); +INSERT INTO `sys_job_log` VALUES (2158, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-07 06:24:00'); +INSERT INTO `sys_job_log` VALUES (2159, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:24毫秒', '0', '', '2025-01-07 06:24:00'); +INSERT INTO `sys_job_log` VALUES (2160, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 06:25:00'); +INSERT INTO `sys_job_log` VALUES (2161, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 06:26:00'); +INSERT INTO `sys_job_log` VALUES (2162, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:23毫秒', '0', '', '2025-01-07 06:26:00'); +INSERT INTO `sys_job_log` VALUES (2163, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 06:27:00'); +INSERT INTO `sys_job_log` VALUES (2164, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 06:28:00'); +INSERT INTO `sys_job_log` VALUES (2165, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:22毫秒', '0', '', '2025-01-07 06:28:00'); +INSERT INTO `sys_job_log` VALUES (2166, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 06:29:00'); +INSERT INTO `sys_job_log` VALUES (2167, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 06:30:00'); +INSERT INTO `sys_job_log` VALUES (2168, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:24毫秒', '0', '', '2025-01-07 06:30:00'); +INSERT INTO `sys_job_log` VALUES (2169, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 06:31:00'); +INSERT INTO `sys_job_log` VALUES (2170, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 06:32:00'); +INSERT INTO `sys_job_log` VALUES (2171, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:25毫秒', '0', '', '2025-01-07 06:32:00'); +INSERT INTO `sys_job_log` VALUES (2172, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 06:33:00'); +INSERT INTO `sys_job_log` VALUES (2173, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 06:34:00'); +INSERT INTO `sys_job_log` VALUES (2174, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:25毫秒', '0', '', '2025-01-07 06:34:00'); +INSERT INTO `sys_job_log` VALUES (2175, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 06:35:00'); +INSERT INTO `sys_job_log` VALUES (2176, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 06:36:00'); +INSERT INTO `sys_job_log` VALUES (2177, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:23毫秒', '0', '', '2025-01-07 06:36:00'); +INSERT INTO `sys_job_log` VALUES (2178, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 06:37:00'); +INSERT INTO `sys_job_log` VALUES (2179, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 06:38:00'); +INSERT INTO `sys_job_log` VALUES (2180, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:30毫秒', '0', '', '2025-01-07 06:38:00'); +INSERT INTO `sys_job_log` VALUES (2181, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2025-01-07 06:39:00'); +INSERT INTO `sys_job_log` VALUES (2182, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 06:40:00'); +INSERT INTO `sys_job_log` VALUES (2183, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:24毫秒', '0', '', '2025-01-07 06:40:00'); +INSERT INTO `sys_job_log` VALUES (2184, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 06:41:00'); +INSERT INTO `sys_job_log` VALUES (2185, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 06:42:00'); +INSERT INTO `sys_job_log` VALUES (2186, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:24毫秒', '0', '', '2025-01-07 06:42:00'); +INSERT INTO `sys_job_log` VALUES (2187, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 06:43:00'); +INSERT INTO `sys_job_log` VALUES (2188, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 06:44:00'); +INSERT INTO `sys_job_log` VALUES (2189, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:21毫秒', '0', '', '2025-01-07 06:44:00'); +INSERT INTO `sys_job_log` VALUES (2190, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2025-01-07 06:45:00'); +INSERT INTO `sys_job_log` VALUES (2191, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 06:46:00'); +INSERT INTO `sys_job_log` VALUES (2192, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:26毫秒', '0', '', '2025-01-07 06:46:00'); +INSERT INTO `sys_job_log` VALUES (2193, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 06:47:00'); +INSERT INTO `sys_job_log` VALUES (2194, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 06:48:00'); +INSERT INTO `sys_job_log` VALUES (2195, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:24毫秒', '0', '', '2025-01-07 06:48:00'); +INSERT INTO `sys_job_log` VALUES (2196, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 06:49:00'); +INSERT INTO `sys_job_log` VALUES (2197, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 06:50:00'); +INSERT INTO `sys_job_log` VALUES (2198, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:25毫秒', '0', '', '2025-01-07 06:50:00'); +INSERT INTO `sys_job_log` VALUES (2199, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 06:51:00'); +INSERT INTO `sys_job_log` VALUES (2200, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 06:52:00'); +INSERT INTO `sys_job_log` VALUES (2201, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:22毫秒', '0', '', '2025-01-07 06:52:00'); +INSERT INTO `sys_job_log` VALUES (2202, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 06:53:00'); +INSERT INTO `sys_job_log` VALUES (2203, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2025-01-07 06:54:00'); +INSERT INTO `sys_job_log` VALUES (2204, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:24毫秒', '0', '', '2025-01-07 06:54:00'); +INSERT INTO `sys_job_log` VALUES (2205, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 06:55:00'); +INSERT INTO `sys_job_log` VALUES (2206, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2025-01-07 06:56:00'); +INSERT INTO `sys_job_log` VALUES (2207, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:25毫秒', '0', '', '2025-01-07 06:56:00'); +INSERT INTO `sys_job_log` VALUES (2208, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 06:57:00'); +INSERT INTO `sys_job_log` VALUES (2209, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2025-01-07 06:58:00'); +INSERT INTO `sys_job_log` VALUES (2210, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:24毫秒', '0', '', '2025-01-07 06:58:00'); +INSERT INTO `sys_job_log` VALUES (2211, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 06:59:00'); +INSERT INTO `sys_job_log` VALUES (2212, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 07:00:00'); +INSERT INTO `sys_job_log` VALUES (2213, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:23毫秒', '0', '', '2025-01-07 07:00:00'); +INSERT INTO `sys_job_log` VALUES (2214, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 07:01:00'); +INSERT INTO `sys_job_log` VALUES (2215, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 07:02:00'); +INSERT INTO `sys_job_log` VALUES (2216, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:23毫秒', '0', '', '2025-01-07 07:02:00'); +INSERT INTO `sys_job_log` VALUES (2217, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 07:03:00'); +INSERT INTO `sys_job_log` VALUES (2218, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 07:04:00'); +INSERT INTO `sys_job_log` VALUES (2219, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:24毫秒', '0', '', '2025-01-07 07:04:00'); +INSERT INTO `sys_job_log` VALUES (2220, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 07:05:00'); +INSERT INTO `sys_job_log` VALUES (2221, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 07:06:00'); +INSERT INTO `sys_job_log` VALUES (2222, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:23毫秒', '0', '', '2025-01-07 07:06:00'); +INSERT INTO `sys_job_log` VALUES (2223, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 07:07:00'); +INSERT INTO `sys_job_log` VALUES (2224, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 07:08:00'); +INSERT INTO `sys_job_log` VALUES (2225, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:22毫秒', '0', '', '2025-01-07 07:08:00'); +INSERT INTO `sys_job_log` VALUES (2226, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 07:09:00'); +INSERT INTO `sys_job_log` VALUES (2227, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 07:10:00'); +INSERT INTO `sys_job_log` VALUES (2228, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:21毫秒', '0', '', '2025-01-07 07:10:00'); +INSERT INTO `sys_job_log` VALUES (2229, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 07:11:00'); +INSERT INTO `sys_job_log` VALUES (2230, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 07:12:00'); +INSERT INTO `sys_job_log` VALUES (2231, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:23毫秒', '0', '', '2025-01-07 07:12:00'); +INSERT INTO `sys_job_log` VALUES (2232, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 07:13:00'); +INSERT INTO `sys_job_log` VALUES (2233, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 07:14:00'); +INSERT INTO `sys_job_log` VALUES (2234, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:27毫秒', '0', '', '2025-01-07 07:14:00'); +INSERT INTO `sys_job_log` VALUES (2235, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 07:15:00'); +INSERT INTO `sys_job_log` VALUES (2236, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 07:16:00'); +INSERT INTO `sys_job_log` VALUES (2237, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:36毫秒', '0', '', '2025-01-07 07:16:00'); +INSERT INTO `sys_job_log` VALUES (2238, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 07:17:00'); +INSERT INTO `sys_job_log` VALUES (2239, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 07:18:00'); +INSERT INTO `sys_job_log` VALUES (2240, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:23毫秒', '0', '', '2025-01-07 07:18:00'); +INSERT INTO `sys_job_log` VALUES (2241, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 07:19:00'); +INSERT INTO `sys_job_log` VALUES (2242, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 07:20:00'); +INSERT INTO `sys_job_log` VALUES (2243, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:24毫秒', '0', '', '2025-01-07 07:20:00'); +INSERT INTO `sys_job_log` VALUES (2244, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 07:21:00'); +INSERT INTO `sys_job_log` VALUES (2245, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 07:22:00'); +INSERT INTO `sys_job_log` VALUES (2246, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:47毫秒', '0', '', '2025-01-07 07:22:00'); +INSERT INTO `sys_job_log` VALUES (2247, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 07:23:00'); +INSERT INTO `sys_job_log` VALUES (2248, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 07:24:00'); +INSERT INTO `sys_job_log` VALUES (2249, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:24毫秒', '0', '', '2025-01-07 07:24:00'); +INSERT INTO `sys_job_log` VALUES (2250, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 07:25:00'); +INSERT INTO `sys_job_log` VALUES (2251, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 07:26:00'); +INSERT INTO `sys_job_log` VALUES (2252, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:25毫秒', '0', '', '2025-01-07 07:26:00'); +INSERT INTO `sys_job_log` VALUES (2253, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2025-01-07 07:27:00'); +INSERT INTO `sys_job_log` VALUES (2254, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 07:28:00'); +INSERT INTO `sys_job_log` VALUES (2255, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:24毫秒', '0', '', '2025-01-07 07:28:00'); +INSERT INTO `sys_job_log` VALUES (2256, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 07:29:00'); +INSERT INTO `sys_job_log` VALUES (2257, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 07:30:00'); +INSERT INTO `sys_job_log` VALUES (2258, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:22毫秒', '0', '', '2025-01-07 07:30:00'); +INSERT INTO `sys_job_log` VALUES (2259, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 07:31:00'); +INSERT INTO `sys_job_log` VALUES (2260, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 07:32:00'); +INSERT INTO `sys_job_log` VALUES (2261, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:22毫秒', '0', '', '2025-01-07 07:32:00'); +INSERT INTO `sys_job_log` VALUES (2262, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 07:33:00'); +INSERT INTO `sys_job_log` VALUES (2263, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 07:34:00'); +INSERT INTO `sys_job_log` VALUES (2264, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:22毫秒', '0', '', '2025-01-07 07:34:00'); +INSERT INTO `sys_job_log` VALUES (2265, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 07:35:00'); +INSERT INTO `sys_job_log` VALUES (2266, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 07:36:00'); +INSERT INTO `sys_job_log` VALUES (2267, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:23毫秒', '0', '', '2025-01-07 07:36:00'); +INSERT INTO `sys_job_log` VALUES (2268, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 07:37:00'); +INSERT INTO `sys_job_log` VALUES (2269, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 07:38:00'); +INSERT INTO `sys_job_log` VALUES (2270, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:22毫秒', '0', '', '2025-01-07 07:38:00'); +INSERT INTO `sys_job_log` VALUES (2271, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 07:39:00'); +INSERT INTO `sys_job_log` VALUES (2272, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 07:40:00'); +INSERT INTO `sys_job_log` VALUES (2273, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:21毫秒', '0', '', '2025-01-07 07:40:00'); +INSERT INTO `sys_job_log` VALUES (2274, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 07:41:00'); +INSERT INTO `sys_job_log` VALUES (2275, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 07:42:00'); +INSERT INTO `sys_job_log` VALUES (2276, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:23毫秒', '0', '', '2025-01-07 07:42:00'); +INSERT INTO `sys_job_log` VALUES (2277, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 07:43:00'); +INSERT INTO `sys_job_log` VALUES (2278, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 07:44:00'); +INSERT INTO `sys_job_log` VALUES (2279, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:22毫秒', '0', '', '2025-01-07 07:44:00'); +INSERT INTO `sys_job_log` VALUES (2280, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 07:45:00'); +INSERT INTO `sys_job_log` VALUES (2281, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 07:46:00'); +INSERT INTO `sys_job_log` VALUES (2282, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:22毫秒', '0', '', '2025-01-07 07:46:00'); +INSERT INTO `sys_job_log` VALUES (2283, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 07:47:00'); +INSERT INTO `sys_job_log` VALUES (2284, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 07:48:00'); +INSERT INTO `sys_job_log` VALUES (2285, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:23毫秒', '0', '', '2025-01-07 07:48:00'); +INSERT INTO `sys_job_log` VALUES (2286, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 07:49:00'); +INSERT INTO `sys_job_log` VALUES (2287, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2025-01-07 07:50:00'); +INSERT INTO `sys_job_log` VALUES (2288, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:27毫秒', '0', '', '2025-01-07 07:50:00'); +INSERT INTO `sys_job_log` VALUES (2289, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 07:51:00'); +INSERT INTO `sys_job_log` VALUES (2290, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 07:52:00'); +INSERT INTO `sys_job_log` VALUES (2291, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:24毫秒', '0', '', '2025-01-07 07:52:00'); +INSERT INTO `sys_job_log` VALUES (2292, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 07:53:00'); +INSERT INTO `sys_job_log` VALUES (2293, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 07:54:00'); +INSERT INTO `sys_job_log` VALUES (2294, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:26毫秒', '0', '', '2025-01-07 07:54:00'); +INSERT INTO `sys_job_log` VALUES (2295, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 07:55:00'); +INSERT INTO `sys_job_log` VALUES (2296, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 07:56:00'); +INSERT INTO `sys_job_log` VALUES (2297, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:23毫秒', '0', '', '2025-01-07 07:56:00'); +INSERT INTO `sys_job_log` VALUES (2298, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 07:57:00'); +INSERT INTO `sys_job_log` VALUES (2299, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 07:58:00'); +INSERT INTO `sys_job_log` VALUES (2300, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:27毫秒', '0', '', '2025-01-07 07:58:00'); +INSERT INTO `sys_job_log` VALUES (2301, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2025-01-07 07:59:00'); +INSERT INTO `sys_job_log` VALUES (2302, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 08:00:00'); +INSERT INTO `sys_job_log` VALUES (2303, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:26毫秒', '0', '', '2025-01-07 08:00:00'); +INSERT INTO `sys_job_log` VALUES (2304, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 08:01:00'); +INSERT INTO `sys_job_log` VALUES (2305, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 08:02:00'); +INSERT INTO `sys_job_log` VALUES (2306, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:21毫秒', '0', '', '2025-01-07 08:02:00'); +INSERT INTO `sys_job_log` VALUES (2307, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 08:03:00'); +INSERT INTO `sys_job_log` VALUES (2308, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 08:04:00'); +INSERT INTO `sys_job_log` VALUES (2309, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:28毫秒', '0', '', '2025-01-07 08:04:00'); +INSERT INTO `sys_job_log` VALUES (2310, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 08:05:00'); +INSERT INTO `sys_job_log` VALUES (2311, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 08:06:00'); +INSERT INTO `sys_job_log` VALUES (2312, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:25毫秒', '0', '', '2025-01-07 08:06:00'); +INSERT INTO `sys_job_log` VALUES (2313, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 08:07:00'); +INSERT INTO `sys_job_log` VALUES (2314, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 08:08:00'); +INSERT INTO `sys_job_log` VALUES (2315, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:22毫秒', '0', '', '2025-01-07 08:08:00'); +INSERT INTO `sys_job_log` VALUES (2316, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 08:09:00'); +INSERT INTO `sys_job_log` VALUES (2317, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 08:10:00'); +INSERT INTO `sys_job_log` VALUES (2318, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:24毫秒', '0', '', '2025-01-07 08:10:00'); +INSERT INTO `sys_job_log` VALUES (2319, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 08:11:00'); +INSERT INTO `sys_job_log` VALUES (2320, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 08:12:00'); +INSERT INTO `sys_job_log` VALUES (2321, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:21毫秒', '0', '', '2025-01-07 08:12:00'); +INSERT INTO `sys_job_log` VALUES (2322, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 08:13:00'); +INSERT INTO `sys_job_log` VALUES (2323, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 08:14:00'); +INSERT INTO `sys_job_log` VALUES (2324, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:24毫秒', '0', '', '2025-01-07 08:14:00'); +INSERT INTO `sys_job_log` VALUES (2325, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 08:15:00'); +INSERT INTO `sys_job_log` VALUES (2326, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 08:16:00'); +INSERT INTO `sys_job_log` VALUES (2327, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:28毫秒', '0', '', '2025-01-07 08:16:00'); +INSERT INTO `sys_job_log` VALUES (2328, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 08:17:00'); +INSERT INTO `sys_job_log` VALUES (2329, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 08:18:00'); +INSERT INTO `sys_job_log` VALUES (2330, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:24毫秒', '0', '', '2025-01-07 08:18:00'); +INSERT INTO `sys_job_log` VALUES (2331, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 08:19:00'); +INSERT INTO `sys_job_log` VALUES (2332, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 08:20:00'); +INSERT INTO `sys_job_log` VALUES (2333, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:22毫秒', '0', '', '2025-01-07 08:20:00'); +INSERT INTO `sys_job_log` VALUES (2334, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 08:21:00'); +INSERT INTO `sys_job_log` VALUES (2335, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 08:22:00'); +INSERT INTO `sys_job_log` VALUES (2336, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:22毫秒', '0', '', '2025-01-07 08:22:00'); +INSERT INTO `sys_job_log` VALUES (2337, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 08:23:00'); +INSERT INTO `sys_job_log` VALUES (2338, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 08:24:00'); +INSERT INTO `sys_job_log` VALUES (2339, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:21毫秒', '0', '', '2025-01-07 08:24:00'); +INSERT INTO `sys_job_log` VALUES (2340, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 08:25:00'); +INSERT INTO `sys_job_log` VALUES (2341, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 08:26:00'); +INSERT INTO `sys_job_log` VALUES (2342, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:25毫秒', '0', '', '2025-01-07 08:26:00'); +INSERT INTO `sys_job_log` VALUES (2343, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 08:27:00'); +INSERT INTO `sys_job_log` VALUES (2344, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 08:28:00'); +INSERT INTO `sys_job_log` VALUES (2345, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:25毫秒', '0', '', '2025-01-07 08:28:00'); +INSERT INTO `sys_job_log` VALUES (2346, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 08:29:00'); +INSERT INTO `sys_job_log` VALUES (2347, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 08:30:00'); +INSERT INTO `sys_job_log` VALUES (2348, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:26毫秒', '0', '', '2025-01-07 08:30:00'); +INSERT INTO `sys_job_log` VALUES (2349, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 08:31:00'); +INSERT INTO `sys_job_log` VALUES (2350, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 08:32:00'); +INSERT INTO `sys_job_log` VALUES (2351, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:22毫秒', '0', '', '2025-01-07 08:32:00'); +INSERT INTO `sys_job_log` VALUES (2352, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2025-01-07 08:33:00'); +INSERT INTO `sys_job_log` VALUES (2353, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 08:34:00'); +INSERT INTO `sys_job_log` VALUES (2354, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:27毫秒', '0', '', '2025-01-07 08:34:00'); +INSERT INTO `sys_job_log` VALUES (2355, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 08:35:00'); +INSERT INTO `sys_job_log` VALUES (2356, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 08:36:00'); +INSERT INTO `sys_job_log` VALUES (2357, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:21毫秒', '0', '', '2025-01-07 08:36:00'); +INSERT INTO `sys_job_log` VALUES (2358, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 08:37:00'); +INSERT INTO `sys_job_log` VALUES (2359, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 08:38:00'); +INSERT INTO `sys_job_log` VALUES (2360, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:24毫秒', '0', '', '2025-01-07 08:38:00'); +INSERT INTO `sys_job_log` VALUES (2361, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 08:39:00'); +INSERT INTO `sys_job_log` VALUES (2362, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 08:40:00'); +INSERT INTO `sys_job_log` VALUES (2363, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:24毫秒', '0', '', '2025-01-07 08:40:00'); +INSERT INTO `sys_job_log` VALUES (2364, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 08:41:00'); +INSERT INTO `sys_job_log` VALUES (2365, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 08:42:00'); +INSERT INTO `sys_job_log` VALUES (2366, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:34毫秒', '0', '', '2025-01-07 08:42:00'); +INSERT INTO `sys_job_log` VALUES (2367, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-07 08:43:00'); +INSERT INTO `sys_job_log` VALUES (2368, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 08:44:00'); +INSERT INTO `sys_job_log` VALUES (2369, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:25毫秒', '0', '', '2025-01-07 08:44:00'); +INSERT INTO `sys_job_log` VALUES (2370, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 08:45:00'); +INSERT INTO `sys_job_log` VALUES (2371, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 08:46:00'); +INSERT INTO `sys_job_log` VALUES (2372, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:27毫秒', '0', '', '2025-01-07 08:46:00'); +INSERT INTO `sys_job_log` VALUES (2373, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 08:47:00'); +INSERT INTO `sys_job_log` VALUES (2374, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 08:48:00'); +INSERT INTO `sys_job_log` VALUES (2375, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:25毫秒', '0', '', '2025-01-07 08:48:00'); +INSERT INTO `sys_job_log` VALUES (2376, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2025-01-07 08:49:00'); +INSERT INTO `sys_job_log` VALUES (2377, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 08:50:00'); +INSERT INTO `sys_job_log` VALUES (2378, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:20毫秒', '0', '', '2025-01-07 08:50:00'); +INSERT INTO `sys_job_log` VALUES (2379, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 08:51:00'); +INSERT INTO `sys_job_log` VALUES (2380, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 08:52:00'); +INSERT INTO `sys_job_log` VALUES (2381, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:24毫秒', '0', '', '2025-01-07 08:52:00'); +INSERT INTO `sys_job_log` VALUES (2382, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-07 08:53:00'); +INSERT INTO `sys_job_log` VALUES (2383, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 08:54:00'); +INSERT INTO `sys_job_log` VALUES (2384, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:23毫秒', '0', '', '2025-01-07 08:54:00'); +INSERT INTO `sys_job_log` VALUES (2385, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 08:55:00'); +INSERT INTO `sys_job_log` VALUES (2386, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 08:56:00'); +INSERT INTO `sys_job_log` VALUES (2387, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:21毫秒', '0', '', '2025-01-07 08:56:00'); +INSERT INTO `sys_job_log` VALUES (2388, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 08:57:00'); +INSERT INTO `sys_job_log` VALUES (2389, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 08:58:00'); +INSERT INTO `sys_job_log` VALUES (2390, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:22毫秒', '0', '', '2025-01-07 08:58:00'); +INSERT INTO `sys_job_log` VALUES (2391, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 08:59:00'); +INSERT INTO `sys_job_log` VALUES (2392, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 09:00:00'); +INSERT INTO `sys_job_log` VALUES (2393, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:23毫秒', '0', '', '2025-01-07 09:00:00'); +INSERT INTO `sys_job_log` VALUES (2394, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 09:01:00'); +INSERT INTO `sys_job_log` VALUES (2395, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 09:02:00'); +INSERT INTO `sys_job_log` VALUES (2396, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:21毫秒', '0', '', '2025-01-07 09:02:00'); +INSERT INTO `sys_job_log` VALUES (2397, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 09:03:00'); +INSERT INTO `sys_job_log` VALUES (2398, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 09:04:00'); +INSERT INTO `sys_job_log` VALUES (2399, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:21毫秒', '0', '', '2025-01-07 09:04:00'); +INSERT INTO `sys_job_log` VALUES (2400, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 09:05:00'); +INSERT INTO `sys_job_log` VALUES (2401, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 09:06:00'); +INSERT INTO `sys_job_log` VALUES (2402, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:21毫秒', '0', '', '2025-01-07 09:06:00'); +INSERT INTO `sys_job_log` VALUES (2403, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 09:07:00'); +INSERT INTO `sys_job_log` VALUES (2404, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 09:08:00'); +INSERT INTO `sys_job_log` VALUES (2405, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:22毫秒', '0', '', '2025-01-07 09:08:00'); +INSERT INTO `sys_job_log` VALUES (2406, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 09:09:00'); +INSERT INTO `sys_job_log` VALUES (2407, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 09:10:00'); +INSERT INTO `sys_job_log` VALUES (2408, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:29毫秒', '0', '', '2025-01-07 09:10:00'); +INSERT INTO `sys_job_log` VALUES (2409, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 09:11:00'); +INSERT INTO `sys_job_log` VALUES (2410, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2025-01-07 09:12:00'); +INSERT INTO `sys_job_log` VALUES (2411, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:28毫秒', '0', '', '2025-01-07 09:12:00'); +INSERT INTO `sys_job_log` VALUES (2412, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 09:13:00'); +INSERT INTO `sys_job_log` VALUES (2413, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 09:14:00'); +INSERT INTO `sys_job_log` VALUES (2414, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:22毫秒', '0', '', '2025-01-07 09:14:00'); +INSERT INTO `sys_job_log` VALUES (2415, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 09:15:00'); +INSERT INTO `sys_job_log` VALUES (2416, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 09:16:00'); +INSERT INTO `sys_job_log` VALUES (2417, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:21毫秒', '0', '', '2025-01-07 09:16:00'); +INSERT INTO `sys_job_log` VALUES (2418, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 09:17:00'); +INSERT INTO `sys_job_log` VALUES (2419, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 09:18:00'); +INSERT INTO `sys_job_log` VALUES (2420, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:21毫秒', '0', '', '2025-01-07 09:18:00'); +INSERT INTO `sys_job_log` VALUES (2421, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 09:19:00'); +INSERT INTO `sys_job_log` VALUES (2422, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 09:20:00'); +INSERT INTO `sys_job_log` VALUES (2423, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:22毫秒', '0', '', '2025-01-07 09:20:00'); +INSERT INTO `sys_job_log` VALUES (2424, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 09:21:00'); +INSERT INTO `sys_job_log` VALUES (2425, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 09:22:00'); +INSERT INTO `sys_job_log` VALUES (2426, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:20毫秒', '0', '', '2025-01-07 09:22:00'); +INSERT INTO `sys_job_log` VALUES (2427, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 09:23:00'); +INSERT INTO `sys_job_log` VALUES (2428, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 09:24:00'); +INSERT INTO `sys_job_log` VALUES (2429, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:21毫秒', '0', '', '2025-01-07 09:24:00'); +INSERT INTO `sys_job_log` VALUES (2430, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 09:25:00'); +INSERT INTO `sys_job_log` VALUES (2431, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2025-01-07 09:26:00'); +INSERT INTO `sys_job_log` VALUES (2432, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:26毫秒', '0', '', '2025-01-07 09:26:00'); +INSERT INTO `sys_job_log` VALUES (2433, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 09:27:00'); +INSERT INTO `sys_job_log` VALUES (2434, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-07 09:28:00'); +INSERT INTO `sys_job_log` VALUES (2435, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:19毫秒', '0', '', '2025-01-07 09:28:00'); +INSERT INTO `sys_job_log` VALUES (2436, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 09:29:00'); +INSERT INTO `sys_job_log` VALUES (2437, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 09:30:00'); +INSERT INTO `sys_job_log` VALUES (2438, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:28毫秒', '0', '', '2025-01-07 09:30:00'); +INSERT INTO `sys_job_log` VALUES (2439, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 09:31:00'); +INSERT INTO `sys_job_log` VALUES (2440, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 09:32:00'); +INSERT INTO `sys_job_log` VALUES (2441, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:21毫秒', '0', '', '2025-01-07 09:32:00'); +INSERT INTO `sys_job_log` VALUES (2442, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 09:33:00'); +INSERT INTO `sys_job_log` VALUES (2443, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 09:34:00'); +INSERT INTO `sys_job_log` VALUES (2444, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:21毫秒', '0', '', '2025-01-07 09:34:00'); +INSERT INTO `sys_job_log` VALUES (2445, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 09:35:00'); +INSERT INTO `sys_job_log` VALUES (2446, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 09:36:00'); +INSERT INTO `sys_job_log` VALUES (2447, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:22毫秒', '0', '', '2025-01-07 09:36:00'); +INSERT INTO `sys_job_log` VALUES (2448, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-07 09:37:00'); +INSERT INTO `sys_job_log` VALUES (2449, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 09:38:00'); +INSERT INTO `sys_job_log` VALUES (2450, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:21毫秒', '0', '', '2025-01-07 09:38:00'); +INSERT INTO `sys_job_log` VALUES (2451, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-07 09:39:00'); +INSERT INTO `sys_job_log` VALUES (2452, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 09:40:00'); +INSERT INTO `sys_job_log` VALUES (2453, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:21毫秒', '0', '', '2025-01-07 09:40:00'); +INSERT INTO `sys_job_log` VALUES (2454, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 09:41:00'); +INSERT INTO `sys_job_log` VALUES (2455, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-07 09:42:00'); +INSERT INTO `sys_job_log` VALUES (2456, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:20毫秒', '0', '', '2025-01-07 09:42:00'); +INSERT INTO `sys_job_log` VALUES (2457, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 09:43:00'); +INSERT INTO `sys_job_log` VALUES (2458, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 09:44:00'); +INSERT INTO `sys_job_log` VALUES (2459, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:21毫秒', '0', '', '2025-01-07 09:44:00'); +INSERT INTO `sys_job_log` VALUES (2460, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 09:45:00'); +INSERT INTO `sys_job_log` VALUES (2461, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-07 09:46:00'); +INSERT INTO `sys_job_log` VALUES (2462, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:20毫秒', '0', '', '2025-01-07 09:46:00'); +INSERT INTO `sys_job_log` VALUES (2463, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-07 09:47:00'); +INSERT INTO `sys_job_log` VALUES (2464, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 09:48:00'); +INSERT INTO `sys_job_log` VALUES (2465, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:25毫秒', '0', '', '2025-01-07 09:48:00'); +INSERT INTO `sys_job_log` VALUES (2466, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 09:49:00'); +INSERT INTO `sys_job_log` VALUES (2467, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 09:50:00'); +INSERT INTO `sys_job_log` VALUES (2468, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:24毫秒', '0', '', '2025-01-07 09:50:00'); +INSERT INTO `sys_job_log` VALUES (2469, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 09:51:00'); +INSERT INTO `sys_job_log` VALUES (2470, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 09:52:00'); +INSERT INTO `sys_job_log` VALUES (2471, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:45毫秒', '0', '', '2025-01-07 09:52:00'); +INSERT INTO `sys_job_log` VALUES (2472, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 09:53:00'); +INSERT INTO `sys_job_log` VALUES (2473, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 09:54:00'); +INSERT INTO `sys_job_log` VALUES (2474, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:20毫秒', '0', '', '2025-01-07 09:54:00'); +INSERT INTO `sys_job_log` VALUES (2475, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 09:55:00'); +INSERT INTO `sys_job_log` VALUES (2476, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 09:56:00'); +INSERT INTO `sys_job_log` VALUES (2477, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:23毫秒', '0', '', '2025-01-07 09:56:00'); +INSERT INTO `sys_job_log` VALUES (2478, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 09:57:00'); +INSERT INTO `sys_job_log` VALUES (2479, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 09:58:00'); +INSERT INTO `sys_job_log` VALUES (2480, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:24毫秒', '0', '', '2025-01-07 09:58:00'); +INSERT INTO `sys_job_log` VALUES (2481, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 09:59:00'); +INSERT INTO `sys_job_log` VALUES (2482, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-07 10:00:00'); +INSERT INTO `sys_job_log` VALUES (2483, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:22毫秒', '0', '', '2025-01-07 10:00:00'); +INSERT INTO `sys_job_log` VALUES (2484, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 10:01:00'); +INSERT INTO `sys_job_log` VALUES (2485, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 10:02:00'); +INSERT INTO `sys_job_log` VALUES (2486, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:21毫秒', '0', '', '2025-01-07 10:02:00'); +INSERT INTO `sys_job_log` VALUES (2487, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 10:03:00'); +INSERT INTO `sys_job_log` VALUES (2488, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 10:04:00'); +INSERT INTO `sys_job_log` VALUES (2489, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:22毫秒', '0', '', '2025-01-07 10:04:00'); +INSERT INTO `sys_job_log` VALUES (2490, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 10:05:00'); +INSERT INTO `sys_job_log` VALUES (2491, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 10:06:00'); +INSERT INTO `sys_job_log` VALUES (2492, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:21毫秒', '0', '', '2025-01-07 10:06:00'); +INSERT INTO `sys_job_log` VALUES (2493, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 10:07:00'); +INSERT INTO `sys_job_log` VALUES (2494, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-07 10:08:00'); +INSERT INTO `sys_job_log` VALUES (2495, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:20毫秒', '0', '', '2025-01-07 10:08:00'); +INSERT INTO `sys_job_log` VALUES (2496, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 10:09:00'); +INSERT INTO `sys_job_log` VALUES (2497, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 10:10:00'); +INSERT INTO `sys_job_log` VALUES (2498, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:20毫秒', '0', '', '2025-01-07 10:10:00'); +INSERT INTO `sys_job_log` VALUES (2499, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 10:11:00'); +INSERT INTO `sys_job_log` VALUES (2500, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2025-01-07 10:12:00'); +INSERT INTO `sys_job_log` VALUES (2501, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:23毫秒', '0', '', '2025-01-07 10:12:00'); +INSERT INTO `sys_job_log` VALUES (2502, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-07 10:13:00'); +INSERT INTO `sys_job_log` VALUES (2503, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 10:14:00'); +INSERT INTO `sys_job_log` VALUES (2504, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:23毫秒', '0', '', '2025-01-07 10:14:00'); +INSERT INTO `sys_job_log` VALUES (2505, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 10:15:00'); +INSERT INTO `sys_job_log` VALUES (2506, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 10:16:00'); +INSERT INTO `sys_job_log` VALUES (2507, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:24毫秒', '0', '', '2025-01-07 10:16:00'); +INSERT INTO `sys_job_log` VALUES (2508, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 10:17:00'); +INSERT INTO `sys_job_log` VALUES (2509, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-07 10:18:00'); +INSERT INTO `sys_job_log` VALUES (2510, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:25毫秒', '0', '', '2025-01-07 10:18:00'); +INSERT INTO `sys_job_log` VALUES (2511, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 10:19:00'); +INSERT INTO `sys_job_log` VALUES (2512, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-07 10:20:00'); +INSERT INTO `sys_job_log` VALUES (2513, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:20毫秒', '0', '', '2025-01-07 10:20:00'); +INSERT INTO `sys_job_log` VALUES (2514, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 10:21:00'); +INSERT INTO `sys_job_log` VALUES (2515, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 10:22:00'); +INSERT INTO `sys_job_log` VALUES (2516, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:22毫秒', '0', '', '2025-01-07 10:22:00'); +INSERT INTO `sys_job_log` VALUES (2517, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 10:23:00'); +INSERT INTO `sys_job_log` VALUES (2518, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-07 10:24:00'); +INSERT INTO `sys_job_log` VALUES (2519, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:19毫秒', '0', '', '2025-01-07 10:24:00'); +INSERT INTO `sys_job_log` VALUES (2520, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2025-01-07 10:25:00'); +INSERT INTO `sys_job_log` VALUES (2521, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 10:26:00'); +INSERT INTO `sys_job_log` VALUES (2522, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:21毫秒', '0', '', '2025-01-07 10:26:00'); +INSERT INTO `sys_job_log` VALUES (2523, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 10:27:00'); +INSERT INTO `sys_job_log` VALUES (2524, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-07 10:28:00'); +INSERT INTO `sys_job_log` VALUES (2525, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:20毫秒', '0', '', '2025-01-07 10:28:00'); +INSERT INTO `sys_job_log` VALUES (2526, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 10:29:00'); +INSERT INTO `sys_job_log` VALUES (2527, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 10:30:00'); +INSERT INTO `sys_job_log` VALUES (2528, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:27毫秒', '0', '', '2025-01-07 10:30:00'); +INSERT INTO `sys_job_log` VALUES (2529, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 10:31:00'); +INSERT INTO `sys_job_log` VALUES (2530, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 10:32:00'); +INSERT INTO `sys_job_log` VALUES (2531, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:21毫秒', '0', '', '2025-01-07 10:32:00'); +INSERT INTO `sys_job_log` VALUES (2532, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 10:33:00'); +INSERT INTO `sys_job_log` VALUES (2533, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-07 10:34:00'); +INSERT INTO `sys_job_log` VALUES (2534, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:20毫秒', '0', '', '2025-01-07 10:34:00'); +INSERT INTO `sys_job_log` VALUES (2535, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 10:35:00'); +INSERT INTO `sys_job_log` VALUES (2536, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 10:36:00'); +INSERT INTO `sys_job_log` VALUES (2537, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:21毫秒', '0', '', '2025-01-07 10:36:00'); +INSERT INTO `sys_job_log` VALUES (2538, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 10:37:00'); +INSERT INTO `sys_job_log` VALUES (2539, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 10:38:00'); +INSERT INTO `sys_job_log` VALUES (2540, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:23毫秒', '0', '', '2025-01-07 10:38:00'); +INSERT INTO `sys_job_log` VALUES (2541, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 10:39:00'); +INSERT INTO `sys_job_log` VALUES (2542, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 10:40:00'); +INSERT INTO `sys_job_log` VALUES (2543, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:22毫秒', '0', '', '2025-01-07 10:40:00'); +INSERT INTO `sys_job_log` VALUES (2544, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-07 10:41:00'); +INSERT INTO `sys_job_log` VALUES (2545, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 10:42:00'); +INSERT INTO `sys_job_log` VALUES (2546, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:21毫秒', '0', '', '2025-01-07 10:42:00'); +INSERT INTO `sys_job_log` VALUES (2547, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 10:43:00'); +INSERT INTO `sys_job_log` VALUES (2548, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 10:44:00'); +INSERT INTO `sys_job_log` VALUES (2549, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:25毫秒', '0', '', '2025-01-07 10:44:00'); +INSERT INTO `sys_job_log` VALUES (2550, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 10:45:00'); +INSERT INTO `sys_job_log` VALUES (2551, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 10:46:00'); +INSERT INTO `sys_job_log` VALUES (2552, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:21毫秒', '0', '', '2025-01-07 10:46:00'); +INSERT INTO `sys_job_log` VALUES (2553, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-07 10:47:00'); +INSERT INTO `sys_job_log` VALUES (2554, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 10:48:00'); +INSERT INTO `sys_job_log` VALUES (2555, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:22毫秒', '0', '', '2025-01-07 10:48:00'); +INSERT INTO `sys_job_log` VALUES (2556, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 10:49:00'); +INSERT INTO `sys_job_log` VALUES (2557, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:4毫秒', '0', '', '2025-01-07 10:50:00'); +INSERT INTO `sys_job_log` VALUES (2558, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:29毫秒', '0', '', '2025-01-07 10:50:00'); +INSERT INTO `sys_job_log` VALUES (2559, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 10:51:00'); +INSERT INTO `sys_job_log` VALUES (2560, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 10:52:00'); +INSERT INTO `sys_job_log` VALUES (2561, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:18毫秒', '0', '', '2025-01-07 10:52:00'); +INSERT INTO `sys_job_log` VALUES (2562, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 10:53:00'); +INSERT INTO `sys_job_log` VALUES (2563, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 10:54:00'); +INSERT INTO `sys_job_log` VALUES (2564, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:17毫秒', '0', '', '2025-01-07 10:54:00'); +INSERT INTO `sys_job_log` VALUES (2565, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 10:55:00'); +INSERT INTO `sys_job_log` VALUES (2566, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 10:56:00'); +INSERT INTO `sys_job_log` VALUES (2567, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:15毫秒', '0', '', '2025-01-07 10:56:00'); +INSERT INTO `sys_job_log` VALUES (2568, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 10:57:00'); +INSERT INTO `sys_job_log` VALUES (2569, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 10:58:00'); +INSERT INTO `sys_job_log` VALUES (2570, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:16毫秒', '0', '', '2025-01-07 10:58:00'); +INSERT INTO `sys_job_log` VALUES (2571, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 10:59:00'); +INSERT INTO `sys_job_log` VALUES (2572, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 11:00:00'); +INSERT INTO `sys_job_log` VALUES (2573, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:16毫秒', '0', '', '2025-01-07 11:00:00'); +INSERT INTO `sys_job_log` VALUES (2574, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-07 11:01:00'); +INSERT INTO `sys_job_log` VALUES (2575, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-07 11:02:00'); +INSERT INTO `sys_job_log` VALUES (2576, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:15毫秒', '0', '', '2025-01-07 11:02:00'); +INSERT INTO `sys_job_log` VALUES (2577, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 11:03:00'); +INSERT INTO `sys_job_log` VALUES (2578, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 11:04:00'); +INSERT INTO `sys_job_log` VALUES (2579, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:14毫秒', '0', '', '2025-01-07 11:04:00'); +INSERT INTO `sys_job_log` VALUES (2580, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 11:05:00'); +INSERT INTO `sys_job_log` VALUES (2581, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-07 11:06:00'); +INSERT INTO `sys_job_log` VALUES (2582, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:14毫秒', '0', '', '2025-01-07 11:06:00'); +INSERT INTO `sys_job_log` VALUES (2583, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 11:07:00'); +INSERT INTO `sys_job_log` VALUES (2584, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 11:08:00'); +INSERT INTO `sys_job_log` VALUES (2585, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:15毫秒', '0', '', '2025-01-07 11:08:00'); +INSERT INTO `sys_job_log` VALUES (2586, 'P', 'DEFAULT', '★温湿度开关', 'P 总共耗时:44毫秒', '0', '', '2025-01-07 11:08:00'); +INSERT INTO `sys_job_log` VALUES (2587, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 11:09:00'); +INSERT INTO `sys_job_log` VALUES (2588, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 11:10:00'); +INSERT INTO `sys_job_log` VALUES (2589, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:18毫秒', '0', '', '2025-01-07 11:10:00'); +INSERT INTO `sys_job_log` VALUES (2590, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 11:11:00'); +INSERT INTO `sys_job_log` VALUES (2591, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 11:12:00'); +INSERT INTO `sys_job_log` VALUES (2592, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-07 11:12:00'); +INSERT INTO `sys_job_log` VALUES (2593, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2025-01-07 11:13:00'); +INSERT INTO `sys_job_log` VALUES (2594, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 11:14:00'); +INSERT INTO `sys_job_log` VALUES (2595, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-07 11:14:00'); +INSERT INTO `sys_job_log` VALUES (2596, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 11:15:00'); +INSERT INTO `sys_job_log` VALUES (2597, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:6毫秒', '0', '', '2025-01-07 11:17:00'); +INSERT INTO `sys_job_log` VALUES (2598, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:4毫秒', '0', '', '2025-01-07 11:18:00'); +INSERT INTO `sys_job_log` VALUES (2599, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:33毫秒', '0', '', '2025-01-07 11:18:00'); +INSERT INTO `sys_job_log` VALUES (2600, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:4毫秒', '0', '', '2025-01-07 11:19:00'); +INSERT INTO `sys_job_log` VALUES (2601, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2025-01-07 11:20:00'); +INSERT INTO `sys_job_log` VALUES (2602, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:26毫秒', '0', '', '2025-01-07 11:20:00'); +INSERT INTO `sys_job_log` VALUES (2603, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2025-01-07 11:21:00'); +INSERT INTO `sys_job_log` VALUES (2604, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:5毫秒', '0', '', '2025-01-07 11:22:00'); +INSERT INTO `sys_job_log` VALUES (2605, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:27毫秒', '0', '', '2025-01-07 11:22:00'); +INSERT INTO `sys_job_log` VALUES (2606, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 11:23:00'); +INSERT INTO `sys_job_log` VALUES (2607, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:4毫秒', '0', '', '2025-01-07 11:24:00'); +INSERT INTO `sys_job_log` VALUES (2608, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:21毫秒', '0', '', '2025-01-07 11:24:00'); +INSERT INTO `sys_job_log` VALUES (2609, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 11:25:00'); +INSERT INTO `sys_job_log` VALUES (2610, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 11:26:00'); +INSERT INTO `sys_job_log` VALUES (2611, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:22毫秒', '0', '', '2025-01-07 11:26:00'); +INSERT INTO `sys_job_log` VALUES (2612, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 11:27:00'); +INSERT INTO `sys_job_log` VALUES (2613, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2025-01-07 11:28:00'); +INSERT INTO `sys_job_log` VALUES (2614, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:19毫秒', '0', '', '2025-01-07 11:28:00'); +INSERT INTO `sys_job_log` VALUES (2615, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 11:29:00'); +INSERT INTO `sys_job_log` VALUES (2616, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 11:30:00'); +INSERT INTO `sys_job_log` VALUES (2617, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:18毫秒', '0', '', '2025-01-07 11:30:00'); +INSERT INTO `sys_job_log` VALUES (2618, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 11:31:00'); +INSERT INTO `sys_job_log` VALUES (2619, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2025-01-07 11:32:00'); +INSERT INTO `sys_job_log` VALUES (2620, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:18毫秒', '0', '', '2025-01-07 11:32:00'); +INSERT INTO `sys_job_log` VALUES (2621, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2025-01-07 11:33:00'); +INSERT INTO `sys_job_log` VALUES (2622, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2025-01-07 11:34:00'); +INSERT INTO `sys_job_log` VALUES (2623, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:22毫秒', '0', '', '2025-01-07 11:34:00'); +INSERT INTO `sys_job_log` VALUES (2624, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2025-01-07 11:35:00'); +INSERT INTO `sys_job_log` VALUES (2625, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2025-01-07 11:36:00'); +INSERT INTO `sys_job_log` VALUES (2626, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:27毫秒', '0', '', '2025-01-07 11:36:00'); +INSERT INTO `sys_job_log` VALUES (2627, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2025-01-07 11:37:00'); +INSERT INTO `sys_job_log` VALUES (2628, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2025-01-07 11:38:00'); +INSERT INTO `sys_job_log` VALUES (2629, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:27毫秒', '0', '', '2025-01-07 11:38:00'); +INSERT INTO `sys_job_log` VALUES (2630, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 11:39:00'); +INSERT INTO `sys_job_log` VALUES (2631, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2025-01-07 11:40:00'); +INSERT INTO `sys_job_log` VALUES (2632, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:26毫秒', '0', '', '2025-01-07 11:40:00'); +INSERT INTO `sys_job_log` VALUES (2633, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2025-01-07 11:41:00'); +INSERT INTO `sys_job_log` VALUES (2634, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 11:42:00'); +INSERT INTO `sys_job_log` VALUES (2635, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:26毫秒', '0', '', '2025-01-07 11:42:00'); +INSERT INTO `sys_job_log` VALUES (2636, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 11:43:00'); +INSERT INTO `sys_job_log` VALUES (2637, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 11:44:00'); +INSERT INTO `sys_job_log` VALUES (2638, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:23毫秒', '0', '', '2025-01-07 11:44:00'); +INSERT INTO `sys_job_log` VALUES (2639, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2025-01-07 11:45:00'); +INSERT INTO `sys_job_log` VALUES (2640, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 11:46:00'); +INSERT INTO `sys_job_log` VALUES (2641, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:29毫秒', '0', '', '2025-01-07 11:46:00'); +INSERT INTO `sys_job_log` VALUES (2642, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2025-01-07 11:47:00'); +INSERT INTO `sys_job_log` VALUES (2643, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2025-01-07 11:48:00'); +INSERT INTO `sys_job_log` VALUES (2644, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:33毫秒', '0', '', '2025-01-07 11:48:00'); +INSERT INTO `sys_job_log` VALUES (2645, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 11:49:00'); +INSERT INTO `sys_job_log` VALUES (2646, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2025-01-07 11:50:00'); +INSERT INTO `sys_job_log` VALUES (2647, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:28毫秒', '0', '', '2025-01-07 11:50:00'); +INSERT INTO `sys_job_log` VALUES (2648, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 11:51:00'); +INSERT INTO `sys_job_log` VALUES (2649, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2025-01-07 11:52:00'); +INSERT INTO `sys_job_log` VALUES (2650, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:26毫秒', '0', '', '2025-01-07 11:52:00'); +INSERT INTO `sys_job_log` VALUES (2651, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2025-01-07 11:53:00'); +INSERT INTO `sys_job_log` VALUES (2652, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2025-01-07 11:54:00'); +INSERT INTO `sys_job_log` VALUES (2653, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:27毫秒', '0', '', '2025-01-07 11:54:00'); +INSERT INTO `sys_job_log` VALUES (2654, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 11:55:00'); +INSERT INTO `sys_job_log` VALUES (2655, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2025-01-07 11:56:00'); +INSERT INTO `sys_job_log` VALUES (2656, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:31毫秒', '0', '', '2025-01-07 11:56:00'); +INSERT INTO `sys_job_log` VALUES (2657, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 11:57:00'); +INSERT INTO `sys_job_log` VALUES (2658, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 11:58:00'); +INSERT INTO `sys_job_log` VALUES (2659, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:24毫秒', '0', '', '2025-01-07 11:58:00'); +INSERT INTO `sys_job_log` VALUES (2660, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 11:59:00'); +INSERT INTO `sys_job_log` VALUES (2661, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 12:00:00'); +INSERT INTO `sys_job_log` VALUES (2662, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:26毫秒', '0', '', '2025-01-07 12:00:00'); +INSERT INTO `sys_job_log` VALUES (2663, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:4毫秒', '0', '', '2025-01-07 12:01:00'); +INSERT INTO `sys_job_log` VALUES (2664, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 12:02:00'); +INSERT INTO `sys_job_log` VALUES (2665, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:24毫秒', '0', '', '2025-01-07 12:02:00'); +INSERT INTO `sys_job_log` VALUES (2666, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 12:03:00'); +INSERT INTO `sys_job_log` VALUES (2667, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 12:04:00'); +INSERT INTO `sys_job_log` VALUES (2668, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:22毫秒', '0', '', '2025-01-07 12:04:00'); +INSERT INTO `sys_job_log` VALUES (2669, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2025-01-07 12:05:00'); +INSERT INTO `sys_job_log` VALUES (2670, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 12:06:00'); +INSERT INTO `sys_job_log` VALUES (2671, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:28毫秒', '0', '', '2025-01-07 12:06:00'); +INSERT INTO `sys_job_log` VALUES (2672, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 12:07:00'); +INSERT INTO `sys_job_log` VALUES (2673, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 12:08:00'); +INSERT INTO `sys_job_log` VALUES (2674, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:26毫秒', '0', '', '2025-01-07 12:08:00'); +INSERT INTO `sys_job_log` VALUES (2675, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2025-01-07 12:09:00'); +INSERT INTO `sys_job_log` VALUES (2676, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 12:10:00'); +INSERT INTO `sys_job_log` VALUES (2677, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:27毫秒', '0', '', '2025-01-07 12:10:00'); +INSERT INTO `sys_job_log` VALUES (2678, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 12:11:00'); +INSERT INTO `sys_job_log` VALUES (2679, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 12:12:00'); +INSERT INTO `sys_job_log` VALUES (2680, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:23毫秒', '0', '', '2025-01-07 12:12:00'); +INSERT INTO `sys_job_log` VALUES (2681, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 12:13:00'); +INSERT INTO `sys_job_log` VALUES (2682, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 12:14:00'); +INSERT INTO `sys_job_log` VALUES (2683, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:26毫秒', '0', '', '2025-01-07 12:14:00'); +INSERT INTO `sys_job_log` VALUES (2684, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 12:15:00'); +INSERT INTO `sys_job_log` VALUES (2685, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 12:16:00'); +INSERT INTO `sys_job_log` VALUES (2686, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:33毫秒', '0', '', '2025-01-07 12:16:00'); +INSERT INTO `sys_job_log` VALUES (2687, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 12:17:00'); +INSERT INTO `sys_job_log` VALUES (2688, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 12:18:00'); +INSERT INTO `sys_job_log` VALUES (2689, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:31毫秒', '0', '', '2025-01-07 12:18:00'); +INSERT INTO `sys_job_log` VALUES (2690, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 12:19:00'); +INSERT INTO `sys_job_log` VALUES (2691, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 12:20:00'); +INSERT INTO `sys_job_log` VALUES (2692, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:26毫秒', '0', '', '2025-01-07 12:20:00'); +INSERT INTO `sys_job_log` VALUES (2693, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2025-01-07 12:21:00'); +INSERT INTO `sys_job_log` VALUES (2694, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 12:22:00'); +INSERT INTO `sys_job_log` VALUES (2695, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:26毫秒', '0', '', '2025-01-07 12:22:00'); +INSERT INTO `sys_job_log` VALUES (2696, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 12:23:00'); +INSERT INTO `sys_job_log` VALUES (2697, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-07 12:24:00'); +INSERT INTO `sys_job_log` VALUES (2698, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:22毫秒', '0', '', '2025-01-07 12:24:00'); +INSERT INTO `sys_job_log` VALUES (2699, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 12:25:00'); +INSERT INTO `sys_job_log` VALUES (2700, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 12:26:00'); +INSERT INTO `sys_job_log` VALUES (2701, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:28毫秒', '0', '', '2025-01-07 12:26:00'); +INSERT INTO `sys_job_log` VALUES (2702, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 12:27:00'); +INSERT INTO `sys_job_log` VALUES (2703, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 12:28:00'); +INSERT INTO `sys_job_log` VALUES (2704, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:23毫秒', '0', '', '2025-01-07 12:28:00'); +INSERT INTO `sys_job_log` VALUES (2705, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 12:29:00'); +INSERT INTO `sys_job_log` VALUES (2706, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 12:30:00'); +INSERT INTO `sys_job_log` VALUES (2707, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:24毫秒', '0', '', '2025-01-07 12:30:00'); +INSERT INTO `sys_job_log` VALUES (2708, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 12:31:00'); +INSERT INTO `sys_job_log` VALUES (2709, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 12:32:00'); +INSERT INTO `sys_job_log` VALUES (2710, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:20毫秒', '0', '', '2025-01-07 12:32:00'); +INSERT INTO `sys_job_log` VALUES (2711, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 12:33:00'); +INSERT INTO `sys_job_log` VALUES (2712, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 12:34:00'); +INSERT INTO `sys_job_log` VALUES (2713, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:22毫秒', '0', '', '2025-01-07 12:34:00'); +INSERT INTO `sys_job_log` VALUES (2714, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 12:35:00'); +INSERT INTO `sys_job_log` VALUES (2715, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 12:36:00'); +INSERT INTO `sys_job_log` VALUES (2716, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:23毫秒', '0', '', '2025-01-07 12:36:00'); +INSERT INTO `sys_job_log` VALUES (2717, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 12:37:00'); +INSERT INTO `sys_job_log` VALUES (2718, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 12:38:00'); +INSERT INTO `sys_job_log` VALUES (2719, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:24毫秒', '0', '', '2025-01-07 12:38:00'); +INSERT INTO `sys_job_log` VALUES (2720, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 12:39:00'); +INSERT INTO `sys_job_log` VALUES (2721, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 12:40:00'); +INSERT INTO `sys_job_log` VALUES (2722, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:24毫秒', '0', '', '2025-01-07 12:40:00'); +INSERT INTO `sys_job_log` VALUES (2723, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 12:41:00'); +INSERT INTO `sys_job_log` VALUES (2724, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 12:42:00'); +INSERT INTO `sys_job_log` VALUES (2725, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:23毫秒', '0', '', '2025-01-07 12:42:00'); +INSERT INTO `sys_job_log` VALUES (2726, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 12:43:00'); +INSERT INTO `sys_job_log` VALUES (2727, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 12:44:00'); +INSERT INTO `sys_job_log` VALUES (2728, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:23毫秒', '0', '', '2025-01-07 12:44:00'); +INSERT INTO `sys_job_log` VALUES (2729, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 12:45:00'); +INSERT INTO `sys_job_log` VALUES (2730, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 12:46:00'); +INSERT INTO `sys_job_log` VALUES (2731, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:24毫秒', '0', '', '2025-01-07 12:46:00'); +INSERT INTO `sys_job_log` VALUES (2732, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 12:47:00'); +INSERT INTO `sys_job_log` VALUES (2733, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 12:48:00'); +INSERT INTO `sys_job_log` VALUES (2734, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:29毫秒', '0', '', '2025-01-07 12:48:00'); +INSERT INTO `sys_job_log` VALUES (2735, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 12:49:00'); +INSERT INTO `sys_job_log` VALUES (2736, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 12:50:00'); +INSERT INTO `sys_job_log` VALUES (2737, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:29毫秒', '0', '', '2025-01-07 12:50:00'); +INSERT INTO `sys_job_log` VALUES (2738, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 12:51:00'); +INSERT INTO `sys_job_log` VALUES (2739, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 12:52:00'); +INSERT INTO `sys_job_log` VALUES (2740, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:22毫秒', '0', '', '2025-01-07 12:52:00'); +INSERT INTO `sys_job_log` VALUES (2741, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 12:53:00'); +INSERT INTO `sys_job_log` VALUES (2742, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 12:54:00'); +INSERT INTO `sys_job_log` VALUES (2743, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:23毫秒', '0', '', '2025-01-07 12:54:00'); +INSERT INTO `sys_job_log` VALUES (2744, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 12:55:00'); +INSERT INTO `sys_job_log` VALUES (2745, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 12:56:00'); +INSERT INTO `sys_job_log` VALUES (2746, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:26毫秒', '0', '', '2025-01-07 12:56:00'); +INSERT INTO `sys_job_log` VALUES (2747, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 12:57:00'); +INSERT INTO `sys_job_log` VALUES (2748, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:4毫秒', '0', '', '2025-01-07 12:58:00'); +INSERT INTO `sys_job_log` VALUES (2749, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:38毫秒', '0', '', '2025-01-07 12:58:00'); +INSERT INTO `sys_job_log` VALUES (2750, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 12:59:00'); +INSERT INTO `sys_job_log` VALUES (2751, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 13:00:00'); +INSERT INTO `sys_job_log` VALUES (2752, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:26毫秒', '0', '', '2025-01-07 13:00:00'); +INSERT INTO `sys_job_log` VALUES (2753, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 13:01:00'); +INSERT INTO `sys_job_log` VALUES (2754, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 13:02:00'); +INSERT INTO `sys_job_log` VALUES (2755, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:27毫秒', '0', '', '2025-01-07 13:02:00'); +INSERT INTO `sys_job_log` VALUES (2756, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 13:03:00'); +INSERT INTO `sys_job_log` VALUES (2757, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 13:04:00'); +INSERT INTO `sys_job_log` VALUES (2758, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:35毫秒', '0', '', '2025-01-07 13:04:00'); +INSERT INTO `sys_job_log` VALUES (2759, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 13:05:00'); +INSERT INTO `sys_job_log` VALUES (2760, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2025-01-07 13:06:00'); +INSERT INTO `sys_job_log` VALUES (2761, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:27毫秒', '0', '', '2025-01-07 13:06:00'); +INSERT INTO `sys_job_log` VALUES (2762, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 13:07:00'); +INSERT INTO `sys_job_log` VALUES (2763, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 13:08:00'); +INSERT INTO `sys_job_log` VALUES (2764, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:22毫秒', '0', '', '2025-01-07 13:08:00'); +INSERT INTO `sys_job_log` VALUES (2765, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 13:09:00'); +INSERT INTO `sys_job_log` VALUES (2766, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 13:10:00'); +INSERT INTO `sys_job_log` VALUES (2767, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:29毫秒', '0', '', '2025-01-07 13:10:00'); +INSERT INTO `sys_job_log` VALUES (2768, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 13:11:00'); +INSERT INTO `sys_job_log` VALUES (2769, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 13:12:00'); +INSERT INTO `sys_job_log` VALUES (2770, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:23毫秒', '0', '', '2025-01-07 13:12:00'); +INSERT INTO `sys_job_log` VALUES (2771, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 13:13:00'); +INSERT INTO `sys_job_log` VALUES (2772, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 13:14:00'); +INSERT INTO `sys_job_log` VALUES (2773, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:21毫秒', '0', '', '2025-01-07 13:14:00'); +INSERT INTO `sys_job_log` VALUES (2774, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 13:15:00'); +INSERT INTO `sys_job_log` VALUES (2775, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 13:16:00'); +INSERT INTO `sys_job_log` VALUES (2776, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:20毫秒', '0', '', '2025-01-07 13:16:00'); +INSERT INTO `sys_job_log` VALUES (2777, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 13:17:00'); +INSERT INTO `sys_job_log` VALUES (2778, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-07 13:18:00'); +INSERT INTO `sys_job_log` VALUES (2779, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:20毫秒', '0', '', '2025-01-07 13:18:00'); +INSERT INTO `sys_job_log` VALUES (2780, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 13:19:00'); +INSERT INTO `sys_job_log` VALUES (2781, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 13:20:00'); +INSERT INTO `sys_job_log` VALUES (2782, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:36毫秒', '0', '', '2025-01-07 13:20:00'); +INSERT INTO `sys_job_log` VALUES (2783, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 13:21:00'); +INSERT INTO `sys_job_log` VALUES (2784, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 13:22:00'); +INSERT INTO `sys_job_log` VALUES (2785, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:20毫秒', '0', '', '2025-01-07 13:22:00'); +INSERT INTO `sys_job_log` VALUES (2786, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2025-01-07 13:23:00'); +INSERT INTO `sys_job_log` VALUES (2787, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 13:24:00'); +INSERT INTO `sys_job_log` VALUES (2788, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:24毫秒', '0', '', '2025-01-07 13:24:00'); +INSERT INTO `sys_job_log` VALUES (2789, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 13:25:00'); +INSERT INTO `sys_job_log` VALUES (2790, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 13:26:00'); +INSERT INTO `sys_job_log` VALUES (2791, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:26毫秒', '0', '', '2025-01-07 13:26:00'); +INSERT INTO `sys_job_log` VALUES (2792, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 13:27:00'); +INSERT INTO `sys_job_log` VALUES (2793, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 13:28:00'); +INSERT INTO `sys_job_log` VALUES (2794, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:23毫秒', '0', '', '2025-01-07 13:28:00'); +INSERT INTO `sys_job_log` VALUES (2795, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:4毫秒', '0', '', '2025-01-07 13:29:00'); +INSERT INTO `sys_job_log` VALUES (2796, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-07 13:30:00'); +INSERT INTO `sys_job_log` VALUES (2797, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:22毫秒', '0', '', '2025-01-07 13:30:00'); +INSERT INTO `sys_job_log` VALUES (2798, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2025-01-07 13:31:00'); +INSERT INTO `sys_job_log` VALUES (2799, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 13:32:00'); +INSERT INTO `sys_job_log` VALUES (2800, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:27毫秒', '0', '', '2025-01-07 13:32:00'); +INSERT INTO `sys_job_log` VALUES (2801, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-07 13:33:00'); +INSERT INTO `sys_job_log` VALUES (2802, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 13:34:00'); +INSERT INTO `sys_job_log` VALUES (2803, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:21毫秒', '0', '', '2025-01-07 13:34:00'); +INSERT INTO `sys_job_log` VALUES (2804, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 13:35:00'); +INSERT INTO `sys_job_log` VALUES (2805, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2025-01-07 13:36:00'); +INSERT INTO `sys_job_log` VALUES (2806, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:22毫秒', '0', '', '2025-01-07 13:36:00'); +INSERT INTO `sys_job_log` VALUES (2807, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 13:37:00'); +INSERT INTO `sys_job_log` VALUES (2808, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 13:38:00'); +INSERT INTO `sys_job_log` VALUES (2809, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:20毫秒', '0', '', '2025-01-07 13:38:00'); +INSERT INTO `sys_job_log` VALUES (2810, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 13:39:00'); +INSERT INTO `sys_job_log` VALUES (2811, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 13:40:00'); +INSERT INTO `sys_job_log` VALUES (2812, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:25毫秒', '0', '', '2025-01-07 13:40:00'); +INSERT INTO `sys_job_log` VALUES (2813, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 13:41:00'); +INSERT INTO `sys_job_log` VALUES (2814, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 13:42:00'); +INSERT INTO `sys_job_log` VALUES (2815, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:24毫秒', '0', '', '2025-01-07 13:42:00'); +INSERT INTO `sys_job_log` VALUES (2816, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 13:43:00'); +INSERT INTO `sys_job_log` VALUES (2817, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 13:44:00'); +INSERT INTO `sys_job_log` VALUES (2818, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:19毫秒', '0', '', '2025-01-07 13:44:00'); +INSERT INTO `sys_job_log` VALUES (2819, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 13:45:00'); +INSERT INTO `sys_job_log` VALUES (2820, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 13:46:00'); +INSERT INTO `sys_job_log` VALUES (2821, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:21毫秒', '0', '', '2025-01-07 13:46:00'); +INSERT INTO `sys_job_log` VALUES (2822, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 13:47:00'); +INSERT INTO `sys_job_log` VALUES (2823, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 13:48:00'); +INSERT INTO `sys_job_log` VALUES (2824, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:25毫秒', '0', '', '2025-01-07 13:48:00'); +INSERT INTO `sys_job_log` VALUES (2825, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 13:49:00'); +INSERT INTO `sys_job_log` VALUES (2826, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 13:50:00'); +INSERT INTO `sys_job_log` VALUES (2827, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:21毫秒', '0', '', '2025-01-07 13:50:00'); +INSERT INTO `sys_job_log` VALUES (2828, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 13:51:00'); +INSERT INTO `sys_job_log` VALUES (2829, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 13:52:00'); +INSERT INTO `sys_job_log` VALUES (2830, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:22毫秒', '0', '', '2025-01-07 13:52:00'); +INSERT INTO `sys_job_log` VALUES (2831, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 13:53:00'); +INSERT INTO `sys_job_log` VALUES (2832, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 13:54:00'); +INSERT INTO `sys_job_log` VALUES (2833, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:25毫秒', '0', '', '2025-01-07 13:54:00'); +INSERT INTO `sys_job_log` VALUES (2834, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 13:55:00'); +INSERT INTO `sys_job_log` VALUES (2835, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-07 13:56:00'); +INSERT INTO `sys_job_log` VALUES (2836, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:19毫秒', '0', '', '2025-01-07 13:56:00'); +INSERT INTO `sys_job_log` VALUES (2837, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-07 13:57:00'); +INSERT INTO `sys_job_log` VALUES (2838, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 13:58:00'); +INSERT INTO `sys_job_log` VALUES (2839, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:23毫秒', '0', '', '2025-01-07 13:58:00'); +INSERT INTO `sys_job_log` VALUES (2840, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 13:59:00'); +INSERT INTO `sys_job_log` VALUES (2841, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-07 14:00:00'); +INSERT INTO `sys_job_log` VALUES (2842, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:22毫秒', '0', '', '2025-01-07 14:00:00'); +INSERT INTO `sys_job_log` VALUES (2843, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 14:01:00'); +INSERT INTO `sys_job_log` VALUES (2844, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-07 14:02:00'); +INSERT INTO `sys_job_log` VALUES (2845, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:18毫秒', '0', '', '2025-01-07 14:02:00'); +INSERT INTO `sys_job_log` VALUES (2846, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 14:03:00'); +INSERT INTO `sys_job_log` VALUES (2847, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 14:04:00'); +INSERT INTO `sys_job_log` VALUES (2848, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:20毫秒', '0', '', '2025-01-07 14:04:00'); +INSERT INTO `sys_job_log` VALUES (2849, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 14:05:00'); +INSERT INTO `sys_job_log` VALUES (2850, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 14:06:00'); +INSERT INTO `sys_job_log` VALUES (2851, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:20毫秒', '0', '', '2025-01-07 14:06:00'); +INSERT INTO `sys_job_log` VALUES (2852, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-07 14:07:00'); +INSERT INTO `sys_job_log` VALUES (2853, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 14:08:00'); +INSERT INTO `sys_job_log` VALUES (2854, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:19毫秒', '0', '', '2025-01-07 14:08:00'); +INSERT INTO `sys_job_log` VALUES (2855, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 14:09:00'); +INSERT INTO `sys_job_log` VALUES (2856, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 14:10:00'); +INSERT INTO `sys_job_log` VALUES (2857, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:20毫秒', '0', '', '2025-01-07 14:10:00'); +INSERT INTO `sys_job_log` VALUES (2858, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 14:11:00'); +INSERT INTO `sys_job_log` VALUES (2859, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 14:12:00'); +INSERT INTO `sys_job_log` VALUES (2860, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:19毫秒', '0', '', '2025-01-07 14:12:00'); +INSERT INTO `sys_job_log` VALUES (2861, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 14:13:00'); +INSERT INTO `sys_job_log` VALUES (2862, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 14:14:00'); +INSERT INTO `sys_job_log` VALUES (2863, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:23毫秒', '0', '', '2025-01-07 14:14:00'); +INSERT INTO `sys_job_log` VALUES (2864, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 14:15:00'); +INSERT INTO `sys_job_log` VALUES (2865, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-07 14:16:00'); +INSERT INTO `sys_job_log` VALUES (2866, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:20毫秒', '0', '', '2025-01-07 14:16:00'); +INSERT INTO `sys_job_log` VALUES (2867, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 14:17:00'); +INSERT INTO `sys_job_log` VALUES (2868, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 14:18:00'); +INSERT INTO `sys_job_log` VALUES (2869, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:19毫秒', '0', '', '2025-01-07 14:18:00'); +INSERT INTO `sys_job_log` VALUES (2870, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 14:19:00'); +INSERT INTO `sys_job_log` VALUES (2871, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 14:20:00'); +INSERT INTO `sys_job_log` VALUES (2872, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:18毫秒', '0', '', '2025-01-07 14:20:00'); +INSERT INTO `sys_job_log` VALUES (2873, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 14:21:00'); +INSERT INTO `sys_job_log` VALUES (2874, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 14:22:00'); +INSERT INTO `sys_job_log` VALUES (2875, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:22毫秒', '0', '', '2025-01-07 14:22:00'); +INSERT INTO `sys_job_log` VALUES (2876, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 14:23:00'); +INSERT INTO `sys_job_log` VALUES (2877, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 14:24:00'); +INSERT INTO `sys_job_log` VALUES (2878, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:20毫秒', '0', '', '2025-01-07 14:24:00'); +INSERT INTO `sys_job_log` VALUES (2879, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 14:25:00'); +INSERT INTO `sys_job_log` VALUES (2880, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 14:26:00'); +INSERT INTO `sys_job_log` VALUES (2881, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:20毫秒', '0', '', '2025-01-07 14:26:00'); +INSERT INTO `sys_job_log` VALUES (2882, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-07 14:27:00'); +INSERT INTO `sys_job_log` VALUES (2883, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 14:28:00'); +INSERT INTO `sys_job_log` VALUES (2884, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:19毫秒', '0', '', '2025-01-07 14:28:00'); +INSERT INTO `sys_job_log` VALUES (2885, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2025-01-07 14:29:00'); +INSERT INTO `sys_job_log` VALUES (2886, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 14:30:00'); +INSERT INTO `sys_job_log` VALUES (2887, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:19毫秒', '0', '', '2025-01-07 14:30:00'); +INSERT INTO `sys_job_log` VALUES (2888, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-07 14:31:00'); +INSERT INTO `sys_job_log` VALUES (2889, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-07 14:32:00'); +INSERT INTO `sys_job_log` VALUES (2890, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:18毫秒', '0', '', '2025-01-07 14:32:00'); +INSERT INTO `sys_job_log` VALUES (2891, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-07 14:33:00'); +INSERT INTO `sys_job_log` VALUES (2892, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 14:34:00'); +INSERT INTO `sys_job_log` VALUES (2893, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-07 14:34:00'); +INSERT INTO `sys_job_log` VALUES (2894, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-07 14:35:00'); +INSERT INTO `sys_job_log` VALUES (2895, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 14:36:00'); +INSERT INTO `sys_job_log` VALUES (2896, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-07 14:36:00'); +INSERT INTO `sys_job_log` VALUES (2897, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 14:37:00'); +INSERT INTO `sys_job_log` VALUES (2898, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 14:38:00'); +INSERT INTO `sys_job_log` VALUES (2899, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:15毫秒', '0', '', '2025-01-07 14:38:00'); +INSERT INTO `sys_job_log` VALUES (2900, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 14:39:00'); +INSERT INTO `sys_job_log` VALUES (2901, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 14:40:00'); +INSERT INTO `sys_job_log` VALUES (2902, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:15毫秒', '0', '', '2025-01-07 14:40:00'); +INSERT INTO `sys_job_log` VALUES (2903, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 14:41:00'); +INSERT INTO `sys_job_log` VALUES (2904, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 14:42:00'); +INSERT INTO `sys_job_log` VALUES (2905, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:14毫秒', '0', '', '2025-01-07 14:42:00'); +INSERT INTO `sys_job_log` VALUES (2906, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 14:43:00'); +INSERT INTO `sys_job_log` VALUES (2907, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 14:44:00'); +INSERT INTO `sys_job_log` VALUES (2908, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:14毫秒', '0', '', '2025-01-07 14:44:00'); +INSERT INTO `sys_job_log` VALUES (2909, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 14:45:00'); +INSERT INTO `sys_job_log` VALUES (2910, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 14:46:00'); +INSERT INTO `sys_job_log` VALUES (2911, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:15毫秒', '0', '', '2025-01-07 14:46:00'); +INSERT INTO `sys_job_log` VALUES (2912, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 14:47:00'); +INSERT INTO `sys_job_log` VALUES (2913, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 14:48:00'); +INSERT INTO `sys_job_log` VALUES (2914, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-07 14:48:00'); +INSERT INTO `sys_job_log` VALUES (2915, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 14:49:00'); +INSERT INTO `sys_job_log` VALUES (2916, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 14:50:00'); +INSERT INTO `sys_job_log` VALUES (2917, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:25毫秒', '0', '', '2025-01-07 14:50:00'); +INSERT INTO `sys_job_log` VALUES (2918, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 14:51:00'); +INSERT INTO `sys_job_log` VALUES (2919, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 14:52:00'); +INSERT INTO `sys_job_log` VALUES (2920, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-07 14:52:00'); +INSERT INTO `sys_job_log` VALUES (2921, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 14:53:00'); +INSERT INTO `sys_job_log` VALUES (2922, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-07 14:54:00'); +INSERT INTO `sys_job_log` VALUES (2923, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-07 14:54:00'); +INSERT INTO `sys_job_log` VALUES (2924, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 14:55:00'); +INSERT INTO `sys_job_log` VALUES (2925, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 14:56:00'); +INSERT INTO `sys_job_log` VALUES (2926, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:14毫秒', '0', '', '2025-01-07 14:56:00'); +INSERT INTO `sys_job_log` VALUES (2927, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-07 14:57:00'); +INSERT INTO `sys_job_log` VALUES (2928, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 14:58:00'); +INSERT INTO `sys_job_log` VALUES (2929, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:14毫秒', '0', '', '2025-01-07 14:58:00'); +INSERT INTO `sys_job_log` VALUES (2930, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 14:59:00'); +INSERT INTO `sys_job_log` VALUES (2931, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 15:00:00'); +INSERT INTO `sys_job_log` VALUES (2932, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:14毫秒', '0', '', '2025-01-07 15:00:00'); +INSERT INTO `sys_job_log` VALUES (2933, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 15:01:00'); +INSERT INTO `sys_job_log` VALUES (2934, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 15:02:00'); +INSERT INTO `sys_job_log` VALUES (2935, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-07 15:02:00'); +INSERT INTO `sys_job_log` VALUES (2936, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 15:03:00'); +INSERT INTO `sys_job_log` VALUES (2937, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 15:04:00'); +INSERT INTO `sys_job_log` VALUES (2938, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:12毫秒', '0', '', '2025-01-07 15:04:00'); +INSERT INTO `sys_job_log` VALUES (2939, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-07 15:05:00'); +INSERT INTO `sys_job_log` VALUES (2940, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-07 15:06:00'); +INSERT INTO `sys_job_log` VALUES (2941, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:14毫秒', '0', '', '2025-01-07 15:06:00'); +INSERT INTO `sys_job_log` VALUES (2942, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 15:07:00'); +INSERT INTO `sys_job_log` VALUES (2943, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-07 15:08:00'); +INSERT INTO `sys_job_log` VALUES (2944, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-07 15:08:00'); +INSERT INTO `sys_job_log` VALUES (2945, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 15:09:00'); +INSERT INTO `sys_job_log` VALUES (2946, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 15:10:00'); +INSERT INTO `sys_job_log` VALUES (2947, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:14毫秒', '0', '', '2025-01-07 15:10:00'); +INSERT INTO `sys_job_log` VALUES (2948, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-07 15:11:00'); +INSERT INTO `sys_job_log` VALUES (2949, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-07 15:12:00'); +INSERT INTO `sys_job_log` VALUES (2950, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-07 15:12:00'); +INSERT INTO `sys_job_log` VALUES (2951, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 15:13:00'); +INSERT INTO `sys_job_log` VALUES (2952, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 15:14:00'); +INSERT INTO `sys_job_log` VALUES (2953, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:12毫秒', '0', '', '2025-01-07 15:14:00'); +INSERT INTO `sys_job_log` VALUES (2954, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-07 15:15:00'); +INSERT INTO `sys_job_log` VALUES (2955, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-07 15:16:00'); +INSERT INTO `sys_job_log` VALUES (2956, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-07 15:16:00'); +INSERT INTO `sys_job_log` VALUES (2957, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 15:17:00'); +INSERT INTO `sys_job_log` VALUES (2958, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 15:18:00'); +INSERT INTO `sys_job_log` VALUES (2959, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:14毫秒', '0', '', '2025-01-07 15:18:00'); +INSERT INTO `sys_job_log` VALUES (2960, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 15:19:00'); +INSERT INTO `sys_job_log` VALUES (2961, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 15:20:00'); +INSERT INTO `sys_job_log` VALUES (2962, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-07 15:20:00'); +INSERT INTO `sys_job_log` VALUES (2963, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 15:21:00'); +INSERT INTO `sys_job_log` VALUES (2964, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-07 15:22:00'); +INSERT INTO `sys_job_log` VALUES (2965, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-07 15:22:00'); +INSERT INTO `sys_job_log` VALUES (2966, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 15:23:00'); +INSERT INTO `sys_job_log` VALUES (2967, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 15:24:00'); +INSERT INTO `sys_job_log` VALUES (2968, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-07 15:24:00'); +INSERT INTO `sys_job_log` VALUES (2969, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 15:25:00'); +INSERT INTO `sys_job_log` VALUES (2970, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 15:26:00'); +INSERT INTO `sys_job_log` VALUES (2971, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:14毫秒', '0', '', '2025-01-07 15:26:00'); +INSERT INTO `sys_job_log` VALUES (2972, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-07 15:27:00'); +INSERT INTO `sys_job_log` VALUES (2973, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 15:28:00'); +INSERT INTO `sys_job_log` VALUES (2974, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:15毫秒', '0', '', '2025-01-07 15:28:00'); +INSERT INTO `sys_job_log` VALUES (2975, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 15:29:00'); +INSERT INTO `sys_job_log` VALUES (2976, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 15:30:00'); +INSERT INTO `sys_job_log` VALUES (2977, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:14毫秒', '0', '', '2025-01-07 15:30:00'); +INSERT INTO `sys_job_log` VALUES (2978, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 15:31:00'); +INSERT INTO `sys_job_log` VALUES (2979, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 15:32:00'); +INSERT INTO `sys_job_log` VALUES (2980, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:17毫秒', '0', '', '2025-01-07 15:32:00'); +INSERT INTO `sys_job_log` VALUES (2981, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-07 15:33:00'); +INSERT INTO `sys_job_log` VALUES (2982, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 15:34:00'); +INSERT INTO `sys_job_log` VALUES (2983, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-07 15:34:00'); +INSERT INTO `sys_job_log` VALUES (2984, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 15:35:00'); +INSERT INTO `sys_job_log` VALUES (2985, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 15:36:00'); +INSERT INTO `sys_job_log` VALUES (2986, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:12毫秒', '0', '', '2025-01-07 15:36:00'); +INSERT INTO `sys_job_log` VALUES (2987, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 15:37:00'); +INSERT INTO `sys_job_log` VALUES (2988, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 15:38:00'); +INSERT INTO `sys_job_log` VALUES (2989, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:12毫秒', '0', '', '2025-01-07 15:38:00'); +INSERT INTO `sys_job_log` VALUES (2990, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 15:39:00'); +INSERT INTO `sys_job_log` VALUES (2991, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-07 15:40:00'); +INSERT INTO `sys_job_log` VALUES (2992, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-07 15:40:00'); +INSERT INTO `sys_job_log` VALUES (2993, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 15:41:00'); +INSERT INTO `sys_job_log` VALUES (2994, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 15:42:00'); +INSERT INTO `sys_job_log` VALUES (2995, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:14毫秒', '0', '', '2025-01-07 15:42:00'); +INSERT INTO `sys_job_log` VALUES (2996, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 15:43:00'); +INSERT INTO `sys_job_log` VALUES (2997, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 15:44:00'); +INSERT INTO `sys_job_log` VALUES (2998, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:14毫秒', '0', '', '2025-01-07 15:44:00'); +INSERT INTO `sys_job_log` VALUES (2999, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 15:45:00'); +INSERT INTO `sys_job_log` VALUES (3000, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 15:46:00'); +INSERT INTO `sys_job_log` VALUES (3001, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-07 15:46:00'); +INSERT INTO `sys_job_log` VALUES (3002, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 15:47:00'); +INSERT INTO `sys_job_log` VALUES (3003, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 15:48:00'); +INSERT INTO `sys_job_log` VALUES (3004, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:15毫秒', '0', '', '2025-01-07 15:48:00'); +INSERT INTO `sys_job_log` VALUES (3005, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 15:49:00'); +INSERT INTO `sys_job_log` VALUES (3006, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 15:50:00'); +INSERT INTO `sys_job_log` VALUES (3007, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:15毫秒', '0', '', '2025-01-07 15:50:00'); +INSERT INTO `sys_job_log` VALUES (3008, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 15:51:00'); +INSERT INTO `sys_job_log` VALUES (3009, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 15:52:00'); +INSERT INTO `sys_job_log` VALUES (3010, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-07 15:52:00'); +INSERT INTO `sys_job_log` VALUES (3011, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 15:53:00'); +INSERT INTO `sys_job_log` VALUES (3012, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 15:54:00'); +INSERT INTO `sys_job_log` VALUES (3013, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-07 15:54:00'); +INSERT INTO `sys_job_log` VALUES (3014, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-07 15:55:00'); +INSERT INTO `sys_job_log` VALUES (3015, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 15:56:00'); +INSERT INTO `sys_job_log` VALUES (3016, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-07 15:56:00'); +INSERT INTO `sys_job_log` VALUES (3017, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 15:57:00'); +INSERT INTO `sys_job_log` VALUES (3018, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 15:58:00'); +INSERT INTO `sys_job_log` VALUES (3019, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:17毫秒', '0', '', '2025-01-07 15:58:00'); +INSERT INTO `sys_job_log` VALUES (3020, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 15:59:00'); +INSERT INTO `sys_job_log` VALUES (3021, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 16:00:00'); +INSERT INTO `sys_job_log` VALUES (3022, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-07 16:00:00'); +INSERT INTO `sys_job_log` VALUES (3023, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 16:01:00'); +INSERT INTO `sys_job_log` VALUES (3024, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 16:02:00'); +INSERT INTO `sys_job_log` VALUES (3025, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:14毫秒', '0', '', '2025-01-07 16:02:00'); +INSERT INTO `sys_job_log` VALUES (3026, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 16:03:00'); +INSERT INTO `sys_job_log` VALUES (3027, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 16:04:00'); +INSERT INTO `sys_job_log` VALUES (3028, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:14毫秒', '0', '', '2025-01-07 16:04:00'); +INSERT INTO `sys_job_log` VALUES (3029, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 16:05:00'); +INSERT INTO `sys_job_log` VALUES (3030, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 16:06:00'); +INSERT INTO `sys_job_log` VALUES (3031, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:12毫秒', '0', '', '2025-01-07 16:06:00'); +INSERT INTO `sys_job_log` VALUES (3032, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-07 16:07:00'); +INSERT INTO `sys_job_log` VALUES (3033, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 16:08:00'); +INSERT INTO `sys_job_log` VALUES (3034, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:14毫秒', '0', '', '2025-01-07 16:08:00'); +INSERT INTO `sys_job_log` VALUES (3035, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 16:09:00'); +INSERT INTO `sys_job_log` VALUES (3036, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 16:10:00'); +INSERT INTO `sys_job_log` VALUES (3037, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-07 16:10:00'); +INSERT INTO `sys_job_log` VALUES (3038, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-07 16:11:00'); +INSERT INTO `sys_job_log` VALUES (3039, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 16:12:00'); +INSERT INTO `sys_job_log` VALUES (3040, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-07 16:12:00'); +INSERT INTO `sys_job_log` VALUES (3041, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 16:13:00'); +INSERT INTO `sys_job_log` VALUES (3042, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 16:14:00'); +INSERT INTO `sys_job_log` VALUES (3043, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-07 16:14:00'); +INSERT INTO `sys_job_log` VALUES (3044, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 16:15:00'); +INSERT INTO `sys_job_log` VALUES (3045, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 16:16:00'); +INSERT INTO `sys_job_log` VALUES (3046, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-07 16:16:00'); +INSERT INTO `sys_job_log` VALUES (3047, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 16:17:00'); +INSERT INTO `sys_job_log` VALUES (3048, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 16:18:00'); +INSERT INTO `sys_job_log` VALUES (3049, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:15毫秒', '0', '', '2025-01-07 16:18:00'); +INSERT INTO `sys_job_log` VALUES (3050, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 16:19:00'); +INSERT INTO `sys_job_log` VALUES (3051, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 16:20:00'); +INSERT INTO `sys_job_log` VALUES (3052, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:14毫秒', '0', '', '2025-01-07 16:20:00'); +INSERT INTO `sys_job_log` VALUES (3053, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 16:21:00'); +INSERT INTO `sys_job_log` VALUES (3054, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-07 16:22:00'); +INSERT INTO `sys_job_log` VALUES (3055, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-07 16:22:00'); +INSERT INTO `sys_job_log` VALUES (3056, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 16:23:00'); +INSERT INTO `sys_job_log` VALUES (3057, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-07 16:24:00'); +INSERT INTO `sys_job_log` VALUES (3058, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-07 16:24:00'); +INSERT INTO `sys_job_log` VALUES (3059, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 16:25:00'); +INSERT INTO `sys_job_log` VALUES (3060, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-07 16:26:00'); +INSERT INTO `sys_job_log` VALUES (3061, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-07 16:26:00'); +INSERT INTO `sys_job_log` VALUES (3062, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 16:27:00'); +INSERT INTO `sys_job_log` VALUES (3063, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 16:28:00'); +INSERT INTO `sys_job_log` VALUES (3064, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:14毫秒', '0', '', '2025-01-07 16:28:00'); +INSERT INTO `sys_job_log` VALUES (3065, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 16:29:00'); +INSERT INTO `sys_job_log` VALUES (3066, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 16:30:00'); +INSERT INTO `sys_job_log` VALUES (3067, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:14毫秒', '0', '', '2025-01-07 16:30:00'); +INSERT INTO `sys_job_log` VALUES (3068, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 16:31:00'); +INSERT INTO `sys_job_log` VALUES (3069, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 16:32:00'); +INSERT INTO `sys_job_log` VALUES (3070, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:15毫秒', '0', '', '2025-01-07 16:32:00'); +INSERT INTO `sys_job_log` VALUES (3071, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 16:33:00'); +INSERT INTO `sys_job_log` VALUES (3072, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 16:34:00'); +INSERT INTO `sys_job_log` VALUES (3073, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:12毫秒', '0', '', '2025-01-07 16:34:00'); +INSERT INTO `sys_job_log` VALUES (3074, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 16:35:00'); +INSERT INTO `sys_job_log` VALUES (3075, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-07 16:36:00'); +INSERT INTO `sys_job_log` VALUES (3076, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-07 16:36:00'); +INSERT INTO `sys_job_log` VALUES (3077, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 16:37:00'); +INSERT INTO `sys_job_log` VALUES (3078, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 16:38:00'); +INSERT INTO `sys_job_log` VALUES (3079, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-07 16:38:00'); +INSERT INTO `sys_job_log` VALUES (3080, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 16:39:00'); +INSERT INTO `sys_job_log` VALUES (3081, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 16:40:00'); +INSERT INTO `sys_job_log` VALUES (3082, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:12毫秒', '0', '', '2025-01-07 16:40:00'); +INSERT INTO `sys_job_log` VALUES (3083, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 16:41:00'); +INSERT INTO `sys_job_log` VALUES (3084, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 16:42:00'); +INSERT INTO `sys_job_log` VALUES (3085, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:15毫秒', '0', '', '2025-01-07 16:42:00'); +INSERT INTO `sys_job_log` VALUES (3086, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 16:43:00'); +INSERT INTO `sys_job_log` VALUES (3087, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 16:44:00'); +INSERT INTO `sys_job_log` VALUES (3088, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-07 16:44:00'); +INSERT INTO `sys_job_log` VALUES (3089, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 16:45:00'); +INSERT INTO `sys_job_log` VALUES (3090, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 16:46:00'); +INSERT INTO `sys_job_log` VALUES (3091, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:12毫秒', '0', '', '2025-01-07 16:46:00'); +INSERT INTO `sys_job_log` VALUES (3092, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-07 16:47:00'); +INSERT INTO `sys_job_log` VALUES (3093, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 16:48:00'); +INSERT INTO `sys_job_log` VALUES (3094, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:14毫秒', '0', '', '2025-01-07 16:48:00'); +INSERT INTO `sys_job_log` VALUES (3095, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 16:49:00'); +INSERT INTO `sys_job_log` VALUES (3096, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 16:50:00'); +INSERT INTO `sys_job_log` VALUES (3097, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-07 16:50:00'); +INSERT INTO `sys_job_log` VALUES (3098, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-07 16:51:00'); +INSERT INTO `sys_job_log` VALUES (3099, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-07 16:52:00'); +INSERT INTO `sys_job_log` VALUES (3100, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:12毫秒', '0', '', '2025-01-07 16:52:00'); +INSERT INTO `sys_job_log` VALUES (3101, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 16:53:00'); +INSERT INTO `sys_job_log` VALUES (3102, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 16:54:00'); +INSERT INTO `sys_job_log` VALUES (3103, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-07 16:54:00'); +INSERT INTO `sys_job_log` VALUES (3104, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 16:55:00'); +INSERT INTO `sys_job_log` VALUES (3105, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 16:56:00'); +INSERT INTO `sys_job_log` VALUES (3106, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:14毫秒', '0', '', '2025-01-07 16:56:00'); +INSERT INTO `sys_job_log` VALUES (3107, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 16:57:00'); +INSERT INTO `sys_job_log` VALUES (3108, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 16:58:00'); +INSERT INTO `sys_job_log` VALUES (3109, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:16毫秒', '0', '', '2025-01-07 16:58:00'); +INSERT INTO `sys_job_log` VALUES (3110, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 16:59:00'); +INSERT INTO `sys_job_log` VALUES (3111, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 17:00:00'); +INSERT INTO `sys_job_log` VALUES (3112, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-07 17:00:00'); +INSERT INTO `sys_job_log` VALUES (3113, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 17:01:00'); +INSERT INTO `sys_job_log` VALUES (3114, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 17:02:00'); +INSERT INTO `sys_job_log` VALUES (3115, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-07 17:02:00'); +INSERT INTO `sys_job_log` VALUES (3116, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-07 17:03:00'); +INSERT INTO `sys_job_log` VALUES (3117, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 17:04:00'); +INSERT INTO `sys_job_log` VALUES (3118, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-07 17:04:00'); +INSERT INTO `sys_job_log` VALUES (3119, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 17:05:00'); +INSERT INTO `sys_job_log` VALUES (3120, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 17:06:00'); +INSERT INTO `sys_job_log` VALUES (3121, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:14毫秒', '0', '', '2025-01-07 17:06:00'); +INSERT INTO `sys_job_log` VALUES (3122, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 17:07:00'); +INSERT INTO `sys_job_log` VALUES (3123, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 17:08:00'); +INSERT INTO `sys_job_log` VALUES (3124, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:14毫秒', '0', '', '2025-01-07 17:08:00'); +INSERT INTO `sys_job_log` VALUES (3125, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 17:09:00'); +INSERT INTO `sys_job_log` VALUES (3126, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-07 17:10:00'); +INSERT INTO `sys_job_log` VALUES (3127, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-07 17:10:00'); +INSERT INTO `sys_job_log` VALUES (3128, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-07 17:11:00'); +INSERT INTO `sys_job_log` VALUES (3129, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 17:12:00'); +INSERT INTO `sys_job_log` VALUES (3130, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-07 17:12:00'); +INSERT INTO `sys_job_log` VALUES (3131, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-07 17:13:00'); +INSERT INTO `sys_job_log` VALUES (3132, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 17:14:00'); +INSERT INTO `sys_job_log` VALUES (3133, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-07 17:14:00'); +INSERT INTO `sys_job_log` VALUES (3134, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 17:15:00'); +INSERT INTO `sys_job_log` VALUES (3135, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 17:16:00'); +INSERT INTO `sys_job_log` VALUES (3136, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:14毫秒', '0', '', '2025-01-07 17:16:00'); +INSERT INTO `sys_job_log` VALUES (3137, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 17:17:00'); +INSERT INTO `sys_job_log` VALUES (3138, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2025-01-07 17:18:00'); +INSERT INTO `sys_job_log` VALUES (3139, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-07 17:18:00'); +INSERT INTO `sys_job_log` VALUES (3140, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 17:19:00'); +INSERT INTO `sys_job_log` VALUES (3141, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 17:20:00'); +INSERT INTO `sys_job_log` VALUES (3142, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:14毫秒', '0', '', '2025-01-07 17:20:00'); +INSERT INTO `sys_job_log` VALUES (3143, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 17:21:00'); +INSERT INTO `sys_job_log` VALUES (3144, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 17:22:00'); +INSERT INTO `sys_job_log` VALUES (3145, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:14毫秒', '0', '', '2025-01-07 17:22:00'); +INSERT INTO `sys_job_log` VALUES (3146, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 17:23:00'); +INSERT INTO `sys_job_log` VALUES (3147, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-07 17:24:00'); +INSERT INTO `sys_job_log` VALUES (3148, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-07 17:24:00'); +INSERT INTO `sys_job_log` VALUES (3149, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 17:25:00'); +INSERT INTO `sys_job_log` VALUES (3150, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-07 17:26:00'); +INSERT INTO `sys_job_log` VALUES (3151, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-07 17:26:00'); +INSERT INTO `sys_job_log` VALUES (3152, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 17:27:00'); +INSERT INTO `sys_job_log` VALUES (3153, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-07 17:28:00'); +INSERT INTO `sys_job_log` VALUES (3154, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:12毫秒', '0', '', '2025-01-07 17:28:00'); +INSERT INTO `sys_job_log` VALUES (3155, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 17:29:00'); +INSERT INTO `sys_job_log` VALUES (3156, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 17:30:00'); +INSERT INTO `sys_job_log` VALUES (3157, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-07 17:30:00'); +INSERT INTO `sys_job_log` VALUES (3158, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 17:31:00'); +INSERT INTO `sys_job_log` VALUES (3159, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 17:32:00'); +INSERT INTO `sys_job_log` VALUES (3160, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-07 17:32:00'); +INSERT INTO `sys_job_log` VALUES (3161, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 17:33:00'); +INSERT INTO `sys_job_log` VALUES (3162, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-07 17:34:00'); +INSERT INTO `sys_job_log` VALUES (3163, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:14毫秒', '0', '', '2025-01-07 17:34:00'); +INSERT INTO `sys_job_log` VALUES (3164, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 17:35:00'); +INSERT INTO `sys_job_log` VALUES (3165, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 17:36:00'); +INSERT INTO `sys_job_log` VALUES (3166, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-07 17:36:00'); +INSERT INTO `sys_job_log` VALUES (3167, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-07 17:37:00'); +INSERT INTO `sys_job_log` VALUES (3168, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 17:38:00'); +INSERT INTO `sys_job_log` VALUES (3169, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:14毫秒', '0', '', '2025-01-07 17:38:00'); +INSERT INTO `sys_job_log` VALUES (3170, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 17:39:00'); +INSERT INTO `sys_job_log` VALUES (3171, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 17:40:00'); +INSERT INTO `sys_job_log` VALUES (3172, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:14毫秒', '0', '', '2025-01-07 17:40:00'); +INSERT INTO `sys_job_log` VALUES (3173, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 17:41:00'); +INSERT INTO `sys_job_log` VALUES (3174, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 17:42:00'); +INSERT INTO `sys_job_log` VALUES (3175, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-07 17:42:00'); +INSERT INTO `sys_job_log` VALUES (3176, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 17:43:00'); +INSERT INTO `sys_job_log` VALUES (3177, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 17:44:00'); +INSERT INTO `sys_job_log` VALUES (3178, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:14毫秒', '0', '', '2025-01-07 17:44:00'); +INSERT INTO `sys_job_log` VALUES (3179, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-07 17:45:00'); +INSERT INTO `sys_job_log` VALUES (3180, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-07 17:46:00'); +INSERT INTO `sys_job_log` VALUES (3181, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-07 17:46:00'); +INSERT INTO `sys_job_log` VALUES (3182, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-07 17:47:00'); +INSERT INTO `sys_job_log` VALUES (3183, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-07 17:48:00'); +INSERT INTO `sys_job_log` VALUES (3184, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:14毫秒', '0', '', '2025-01-07 17:48:00'); +INSERT INTO `sys_job_log` VALUES (3185, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 17:49:00'); +INSERT INTO `sys_job_log` VALUES (3186, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 17:50:00'); +INSERT INTO `sys_job_log` VALUES (3187, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:14毫秒', '0', '', '2025-01-07 17:50:00'); +INSERT INTO `sys_job_log` VALUES (3188, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-07 17:51:00'); +INSERT INTO `sys_job_log` VALUES (3189, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 17:52:00'); +INSERT INTO `sys_job_log` VALUES (3190, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-07 17:52:00'); +INSERT INTO `sys_job_log` VALUES (3191, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 17:53:00'); +INSERT INTO `sys_job_log` VALUES (3192, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 17:54:00'); +INSERT INTO `sys_job_log` VALUES (3193, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-07 17:54:00'); +INSERT INTO `sys_job_log` VALUES (3194, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 17:55:00'); +INSERT INTO `sys_job_log` VALUES (3195, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 17:56:00'); +INSERT INTO `sys_job_log` VALUES (3196, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-07 17:56:00'); +INSERT INTO `sys_job_log` VALUES (3197, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-07 17:57:00'); +INSERT INTO `sys_job_log` VALUES (3198, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 17:58:00'); +INSERT INTO `sys_job_log` VALUES (3199, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:14毫秒', '0', '', '2025-01-07 17:58:00'); +INSERT INTO `sys_job_log` VALUES (3200, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 17:59:00'); +INSERT INTO `sys_job_log` VALUES (3201, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 18:00:00'); +INSERT INTO `sys_job_log` VALUES (3202, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-07 18:00:00'); +INSERT INTO `sys_job_log` VALUES (3203, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 18:01:00'); +INSERT INTO `sys_job_log` VALUES (3204, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 18:02:00'); +INSERT INTO `sys_job_log` VALUES (3205, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:12毫秒', '0', '', '2025-01-07 18:02:00'); +INSERT INTO `sys_job_log` VALUES (3206, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-07 18:03:00'); +INSERT INTO `sys_job_log` VALUES (3207, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-07 18:04:00'); +INSERT INTO `sys_job_log` VALUES (3208, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:12毫秒', '0', '', '2025-01-07 18:04:00'); +INSERT INTO `sys_job_log` VALUES (3209, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 18:05:00'); +INSERT INTO `sys_job_log` VALUES (3210, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 18:06:00'); +INSERT INTO `sys_job_log` VALUES (3211, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:14毫秒', '0', '', '2025-01-07 18:06:00'); +INSERT INTO `sys_job_log` VALUES (3212, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-07 18:07:00'); +INSERT INTO `sys_job_log` VALUES (3213, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 18:08:00'); +INSERT INTO `sys_job_log` VALUES (3214, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-07 18:08:00'); +INSERT INTO `sys_job_log` VALUES (3215, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 18:09:00'); +INSERT INTO `sys_job_log` VALUES (3216, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 18:10:00'); +INSERT INTO `sys_job_log` VALUES (3217, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:14毫秒', '0', '', '2025-01-07 18:10:00'); +INSERT INTO `sys_job_log` VALUES (3218, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 18:11:00'); +INSERT INTO `sys_job_log` VALUES (3219, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 18:12:00'); +INSERT INTO `sys_job_log` VALUES (3220, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-07 18:12:00'); +INSERT INTO `sys_job_log` VALUES (3221, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 18:13:00'); +INSERT INTO `sys_job_log` VALUES (3222, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-07 18:14:00'); +INSERT INTO `sys_job_log` VALUES (3223, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:12毫秒', '0', '', '2025-01-07 18:14:00'); +INSERT INTO `sys_job_log` VALUES (3224, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-07 18:15:00'); +INSERT INTO `sys_job_log` VALUES (3225, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 18:16:00'); +INSERT INTO `sys_job_log` VALUES (3226, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-07 18:16:00'); +INSERT INTO `sys_job_log` VALUES (3227, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-07 18:17:00'); +INSERT INTO `sys_job_log` VALUES (3228, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 18:18:00'); +INSERT INTO `sys_job_log` VALUES (3229, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:14毫秒', '0', '', '2025-01-07 18:18:00'); +INSERT INTO `sys_job_log` VALUES (3230, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 18:19:00'); +INSERT INTO `sys_job_log` VALUES (3231, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-07 18:20:00'); +INSERT INTO `sys_job_log` VALUES (3232, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-07 18:20:00'); +INSERT INTO `sys_job_log` VALUES (3233, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 18:21:00'); +INSERT INTO `sys_job_log` VALUES (3234, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 18:22:00'); +INSERT INTO `sys_job_log` VALUES (3235, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:12毫秒', '0', '', '2025-01-07 18:22:00'); +INSERT INTO `sys_job_log` VALUES (3236, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 18:23:00'); +INSERT INTO `sys_job_log` VALUES (3237, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-07 18:24:00'); +INSERT INTO `sys_job_log` VALUES (3238, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:12毫秒', '0', '', '2025-01-07 18:24:00'); +INSERT INTO `sys_job_log` VALUES (3239, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 18:25:00'); +INSERT INTO `sys_job_log` VALUES (3240, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-07 18:26:00'); +INSERT INTO `sys_job_log` VALUES (3241, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-07 18:26:00'); +INSERT INTO `sys_job_log` VALUES (3242, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 18:27:00'); +INSERT INTO `sys_job_log` VALUES (3243, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 18:28:00'); +INSERT INTO `sys_job_log` VALUES (3244, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-07 18:28:00'); +INSERT INTO `sys_job_log` VALUES (3245, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 18:29:00'); +INSERT INTO `sys_job_log` VALUES (3246, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 18:30:00'); +INSERT INTO `sys_job_log` VALUES (3247, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-07 18:30:00'); +INSERT INTO `sys_job_log` VALUES (3248, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 18:31:00'); +INSERT INTO `sys_job_log` VALUES (3249, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-07 18:32:00'); +INSERT INTO `sys_job_log` VALUES (3250, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-07 18:32:00'); +INSERT INTO `sys_job_log` VALUES (3251, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-07 18:33:00'); +INSERT INTO `sys_job_log` VALUES (3252, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 18:34:00'); +INSERT INTO `sys_job_log` VALUES (3253, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:15毫秒', '0', '', '2025-01-07 18:34:00'); +INSERT INTO `sys_job_log` VALUES (3254, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 18:35:00'); +INSERT INTO `sys_job_log` VALUES (3255, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 18:36:00'); +INSERT INTO `sys_job_log` VALUES (3256, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-07 18:36:00'); +INSERT INTO `sys_job_log` VALUES (3257, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 18:37:00'); +INSERT INTO `sys_job_log` VALUES (3258, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 18:38:00'); +INSERT INTO `sys_job_log` VALUES (3259, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:14毫秒', '0', '', '2025-01-07 18:38:00'); +INSERT INTO `sys_job_log` VALUES (3260, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-07 18:39:00'); +INSERT INTO `sys_job_log` VALUES (3261, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 18:40:00'); +INSERT INTO `sys_job_log` VALUES (3262, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-07 18:40:00'); +INSERT INTO `sys_job_log` VALUES (3263, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 18:41:00'); +INSERT INTO `sys_job_log` VALUES (3264, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 18:42:00'); +INSERT INTO `sys_job_log` VALUES (3265, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-07 18:42:00'); +INSERT INTO `sys_job_log` VALUES (3266, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-07 18:43:00'); +INSERT INTO `sys_job_log` VALUES (3267, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-07 18:44:00'); +INSERT INTO `sys_job_log` VALUES (3268, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-07 18:44:00'); +INSERT INTO `sys_job_log` VALUES (3269, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 18:45:00'); +INSERT INTO `sys_job_log` VALUES (3270, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 18:46:00'); +INSERT INTO `sys_job_log` VALUES (3271, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-07 18:46:00'); +INSERT INTO `sys_job_log` VALUES (3272, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 18:47:00'); +INSERT INTO `sys_job_log` VALUES (3273, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 18:48:00'); +INSERT INTO `sys_job_log` VALUES (3274, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-07 18:48:00'); +INSERT INTO `sys_job_log` VALUES (3275, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 18:49:00'); +INSERT INTO `sys_job_log` VALUES (3276, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 18:50:00'); +INSERT INTO `sys_job_log` VALUES (3277, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:12毫秒', '0', '', '2025-01-07 18:50:00'); +INSERT INTO `sys_job_log` VALUES (3278, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-07 18:51:00'); +INSERT INTO `sys_job_log` VALUES (3279, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 18:52:00'); +INSERT INTO `sys_job_log` VALUES (3280, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:15毫秒', '0', '', '2025-01-07 18:52:00'); +INSERT INTO `sys_job_log` VALUES (3281, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 18:53:00'); +INSERT INTO `sys_job_log` VALUES (3282, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-07 18:54:00'); +INSERT INTO `sys_job_log` VALUES (3283, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-07 18:54:00'); +INSERT INTO `sys_job_log` VALUES (3284, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 18:55:00'); +INSERT INTO `sys_job_log` VALUES (3285, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 18:56:00'); +INSERT INTO `sys_job_log` VALUES (3286, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:16毫秒', '0', '', '2025-01-07 18:56:00'); +INSERT INTO `sys_job_log` VALUES (3287, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 18:57:00'); +INSERT INTO `sys_job_log` VALUES (3288, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 18:58:00'); +INSERT INTO `sys_job_log` VALUES (3289, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-07 18:58:00'); +INSERT INTO `sys_job_log` VALUES (3290, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 18:59:00'); +INSERT INTO `sys_job_log` VALUES (3291, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-07 19:00:00'); +INSERT INTO `sys_job_log` VALUES (3292, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-07 19:00:00'); +INSERT INTO `sys_job_log` VALUES (3293, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 19:01:00'); +INSERT INTO `sys_job_log` VALUES (3294, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 19:02:00'); +INSERT INTO `sys_job_log` VALUES (3295, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:14毫秒', '0', '', '2025-01-07 19:02:00'); +INSERT INTO `sys_job_log` VALUES (3296, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 19:03:00'); +INSERT INTO `sys_job_log` VALUES (3297, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 19:04:00'); +INSERT INTO `sys_job_log` VALUES (3298, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:14毫秒', '0', '', '2025-01-07 19:04:00'); +INSERT INTO `sys_job_log` VALUES (3299, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 19:05:00'); +INSERT INTO `sys_job_log` VALUES (3300, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 19:06:00'); +INSERT INTO `sys_job_log` VALUES (3301, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-07 19:06:00'); +INSERT INTO `sys_job_log` VALUES (3302, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 19:07:00'); +INSERT INTO `sys_job_log` VALUES (3303, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 19:08:00'); +INSERT INTO `sys_job_log` VALUES (3304, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:14毫秒', '0', '', '2025-01-07 19:08:00'); +INSERT INTO `sys_job_log` VALUES (3305, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-07 19:09:00'); +INSERT INTO `sys_job_log` VALUES (3306, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 19:10:00'); +INSERT INTO `sys_job_log` VALUES (3307, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:12毫秒', '0', '', '2025-01-07 19:10:00'); +INSERT INTO `sys_job_log` VALUES (3308, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-07 19:11:00'); +INSERT INTO `sys_job_log` VALUES (3309, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 19:12:00'); +INSERT INTO `sys_job_log` VALUES (3310, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-07 19:12:00'); +INSERT INTO `sys_job_log` VALUES (3311, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 19:13:00'); +INSERT INTO `sys_job_log` VALUES (3312, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-07 19:14:00'); +INSERT INTO `sys_job_log` VALUES (3313, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-07 19:14:00'); +INSERT INTO `sys_job_log` VALUES (3314, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 19:15:00'); +INSERT INTO `sys_job_log` VALUES (3315, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-07 19:16:00'); +INSERT INTO `sys_job_log` VALUES (3316, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-07 19:16:00'); +INSERT INTO `sys_job_log` VALUES (3317, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 19:17:00'); +INSERT INTO `sys_job_log` VALUES (3318, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-07 19:18:00'); +INSERT INTO `sys_job_log` VALUES (3319, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-07 19:18:00'); +INSERT INTO `sys_job_log` VALUES (3320, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 19:19:00'); +INSERT INTO `sys_job_log` VALUES (3321, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-07 19:20:00'); +INSERT INTO `sys_job_log` VALUES (3322, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:14毫秒', '0', '', '2025-01-07 19:20:00'); +INSERT INTO `sys_job_log` VALUES (3323, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 19:21:00'); +INSERT INTO `sys_job_log` VALUES (3324, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 19:22:00'); +INSERT INTO `sys_job_log` VALUES (3325, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:12毫秒', '0', '', '2025-01-07 19:22:00'); +INSERT INTO `sys_job_log` VALUES (3326, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 19:23:00'); +INSERT INTO `sys_job_log` VALUES (3327, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 19:24:00'); +INSERT INTO `sys_job_log` VALUES (3328, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:14毫秒', '0', '', '2025-01-07 19:24:00'); +INSERT INTO `sys_job_log` VALUES (3329, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 19:25:00'); +INSERT INTO `sys_job_log` VALUES (3330, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 19:26:00'); +INSERT INTO `sys_job_log` VALUES (3331, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:14毫秒', '0', '', '2025-01-07 19:26:00'); +INSERT INTO `sys_job_log` VALUES (3332, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 19:27:00'); +INSERT INTO `sys_job_log` VALUES (3333, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 19:28:00'); +INSERT INTO `sys_job_log` VALUES (3334, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-07 19:28:00'); +INSERT INTO `sys_job_log` VALUES (3335, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 19:29:00'); +INSERT INTO `sys_job_log` VALUES (3336, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 19:30:00'); +INSERT INTO `sys_job_log` VALUES (3337, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:14毫秒', '0', '', '2025-01-07 19:30:00'); +INSERT INTO `sys_job_log` VALUES (3338, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 19:31:00'); +INSERT INTO `sys_job_log` VALUES (3339, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 19:32:00'); +INSERT INTO `sys_job_log` VALUES (3340, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:12毫秒', '0', '', '2025-01-07 19:32:00'); +INSERT INTO `sys_job_log` VALUES (3341, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 19:33:00'); +INSERT INTO `sys_job_log` VALUES (3342, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 19:34:00'); +INSERT INTO `sys_job_log` VALUES (3343, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:12毫秒', '0', '', '2025-01-07 19:34:00'); +INSERT INTO `sys_job_log` VALUES (3344, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-07 19:35:00'); +INSERT INTO `sys_job_log` VALUES (3345, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 19:36:00'); +INSERT INTO `sys_job_log` VALUES (3346, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-07 19:36:00'); +INSERT INTO `sys_job_log` VALUES (3347, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 19:37:00'); +INSERT INTO `sys_job_log` VALUES (3348, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 19:38:00'); +INSERT INTO `sys_job_log` VALUES (3349, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-07 19:38:00'); +INSERT INTO `sys_job_log` VALUES (3350, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 19:39:00'); +INSERT INTO `sys_job_log` VALUES (3351, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 19:40:00'); +INSERT INTO `sys_job_log` VALUES (3352, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:14毫秒', '0', '', '2025-01-07 19:40:00'); +INSERT INTO `sys_job_log` VALUES (3353, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 19:41:00'); +INSERT INTO `sys_job_log` VALUES (3354, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 19:42:00'); +INSERT INTO `sys_job_log` VALUES (3355, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-07 19:42:00'); +INSERT INTO `sys_job_log` VALUES (3356, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 19:43:00'); +INSERT INTO `sys_job_log` VALUES (3357, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-07 19:44:00'); +INSERT INTO `sys_job_log` VALUES (3358, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-07 19:44:00'); +INSERT INTO `sys_job_log` VALUES (3359, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 19:45:00'); +INSERT INTO `sys_job_log` VALUES (3360, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 19:46:00'); +INSERT INTO `sys_job_log` VALUES (3361, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-07 19:46:00'); +INSERT INTO `sys_job_log` VALUES (3362, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 19:47:00'); +INSERT INTO `sys_job_log` VALUES (3363, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-07 19:48:00'); +INSERT INTO `sys_job_log` VALUES (3364, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:15毫秒', '0', '', '2025-01-07 19:48:00'); +INSERT INTO `sys_job_log` VALUES (3365, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 19:49:00'); +INSERT INTO `sys_job_log` VALUES (3366, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 19:50:00'); +INSERT INTO `sys_job_log` VALUES (3367, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-07 19:50:00'); +INSERT INTO `sys_job_log` VALUES (3368, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 19:51:00'); +INSERT INTO `sys_job_log` VALUES (3369, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 19:52:00'); +INSERT INTO `sys_job_log` VALUES (3370, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-07 19:52:00'); +INSERT INTO `sys_job_log` VALUES (3371, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 19:53:00'); +INSERT INTO `sys_job_log` VALUES (3372, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 19:54:00'); +INSERT INTO `sys_job_log` VALUES (3373, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-07 19:54:00'); +INSERT INTO `sys_job_log` VALUES (3374, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 19:55:00'); +INSERT INTO `sys_job_log` VALUES (3375, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-07 19:56:00'); +INSERT INTO `sys_job_log` VALUES (3376, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-07 19:56:00'); +INSERT INTO `sys_job_log` VALUES (3377, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 19:57:00'); +INSERT INTO `sys_job_log` VALUES (3378, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 19:58:00'); +INSERT INTO `sys_job_log` VALUES (3379, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-07 19:58:00'); +INSERT INTO `sys_job_log` VALUES (3380, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:64毫秒', '0', '', '2025-01-07 19:58:00'); +INSERT INTO `sys_job_log` VALUES (3381, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:767毫秒', '0', '', '2025-01-07 19:58:00'); +INSERT INTO `sys_job_log` VALUES (3382, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-07 19:59:00'); +INSERT INTO `sys_job_log` VALUES (3383, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-07 19:59:00'); +INSERT INTO `sys_job_log` VALUES (3384, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-07 20:00:00'); +INSERT INTO `sys_job_log` VALUES (3385, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-07 20:00:00'); +INSERT INTO `sys_job_log` VALUES (3386, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:50毫秒', '0', '', '2025-01-07 20:00:00'); +INSERT INTO `sys_job_log` VALUES (3387, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:801毫秒', '0', '', '2025-01-07 20:00:00'); +INSERT INTO `sys_job_log` VALUES (3388, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 20:01:00'); +INSERT INTO `sys_job_log` VALUES (3389, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:53毫秒', '0', '', '2025-01-07 20:01:00'); +INSERT INTO `sys_job_log` VALUES (3390, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 20:02:00'); +INSERT INTO `sys_job_log` VALUES (3391, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:14毫秒', '0', '', '2025-01-07 20:02:00'); +INSERT INTO `sys_job_log` VALUES (3392, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:51毫秒', '0', '', '2025-01-07 20:02:00'); +INSERT INTO `sys_job_log` VALUES (3393, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:787毫秒', '0', '', '2025-01-07 20:02:00'); +INSERT INTO `sys_job_log` VALUES (3394, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-07 20:03:00'); +INSERT INTO `sys_job_log` VALUES (3395, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:51毫秒', '0', '', '2025-01-07 20:03:00'); +INSERT INTO `sys_job_log` VALUES (3396, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 20:04:00'); +INSERT INTO `sys_job_log` VALUES (3397, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:14毫秒', '0', '', '2025-01-07 20:04:00'); +INSERT INTO `sys_job_log` VALUES (3398, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:51毫秒', '0', '', '2025-01-07 20:04:00'); +INSERT INTO `sys_job_log` VALUES (3399, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:764毫秒', '0', '', '2025-01-07 20:04:00'); +INSERT INTO `sys_job_log` VALUES (3400, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-07 20:05:00'); +INSERT INTO `sys_job_log` VALUES (3401, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:50毫秒', '0', '', '2025-01-07 20:05:00'); +INSERT INTO `sys_job_log` VALUES (3402, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:9毫秒', '0', '', '2025-01-07 20:06:00'); +INSERT INTO `sys_job_log` VALUES (3403, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:14毫秒', '0', '', '2025-01-07 20:06:00'); +INSERT INTO `sys_job_log` VALUES (3404, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:188毫秒', '0', '', '2025-01-07 20:06:00'); +INSERT INTO `sys_job_log` VALUES (3405, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:722毫秒', '0', '', '2025-01-07 20:06:00'); +INSERT INTO `sys_job_log` VALUES (3406, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:7毫秒', '0', '', '2025-01-07 20:07:00'); +INSERT INTO `sys_job_log` VALUES (3407, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:46毫秒', '0', '', '2025-01-07 20:07:00'); +INSERT INTO `sys_job_log` VALUES (3408, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-07 20:08:00'); +INSERT INTO `sys_job_log` VALUES (3409, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-07 20:08:00'); +INSERT INTO `sys_job_log` VALUES (3410, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:191毫秒', '0', '', '2025-01-07 20:08:00'); +INSERT INTO `sys_job_log` VALUES (3411, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:721毫秒', '0', '', '2025-01-07 20:08:00'); +INSERT INTO `sys_job_log` VALUES (3412, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 20:09:00'); +INSERT INTO `sys_job_log` VALUES (3413, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:48毫秒', '0', '', '2025-01-07 20:09:00'); +INSERT INTO `sys_job_log` VALUES (3414, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:7毫秒', '0', '', '2025-01-07 20:10:00'); +INSERT INTO `sys_job_log` VALUES (3415, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-07 20:10:00'); +INSERT INTO `sys_job_log` VALUES (3416, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-07 20:10:00'); +INSERT INTO `sys_job_log` VALUES (3417, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:720毫秒', '0', '', '2025-01-07 20:10:00'); +INSERT INTO `sys_job_log` VALUES (3418, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 20:11:00'); +INSERT INTO `sys_job_log` VALUES (3419, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:187毫秒', '0', '', '2025-01-07 20:11:00'); +INSERT INTO `sys_job_log` VALUES (3420, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:9毫秒', '0', '', '2025-01-07 20:12:00'); +INSERT INTO `sys_job_log` VALUES (3421, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:14毫秒', '0', '', '2025-01-07 20:12:00'); +INSERT INTO `sys_job_log` VALUES (3422, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:46毫秒', '0', '', '2025-01-07 20:12:00'); +INSERT INTO `sys_job_log` VALUES (3423, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:750毫秒', '0', '', '2025-01-07 20:12:00'); +INSERT INTO `sys_job_log` VALUES (3424, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 20:13:00'); +INSERT INTO `sys_job_log` VALUES (3425, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:188毫秒', '0', '', '2025-01-07 20:13:00'); +INSERT INTO `sys_job_log` VALUES (3426, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:8毫秒', '0', '', '2025-01-07 20:14:00'); +INSERT INTO `sys_job_log` VALUES (3427, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:14毫秒', '0', '', '2025-01-07 20:14:00'); +INSERT INTO `sys_job_log` VALUES (3428, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:187毫秒', '0', '', '2025-01-07 20:14:00'); +INSERT INTO `sys_job_log` VALUES (3429, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:765毫秒', '0', '', '2025-01-07 20:14:00'); +INSERT INTO `sys_job_log` VALUES (3430, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:8毫秒', '0', '', '2025-01-07 20:15:00'); +INSERT INTO `sys_job_log` VALUES (3431, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-07 20:15:00'); +INSERT INTO `sys_job_log` VALUES (3432, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 20:16:00'); +INSERT INTO `sys_job_log` VALUES (3433, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:14毫秒', '0', '', '2025-01-07 20:16:00'); +INSERT INTO `sys_job_log` VALUES (3434, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:188毫秒', '0', '', '2025-01-07 20:16:00'); +INSERT INTO `sys_job_log` VALUES (3435, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:766毫秒', '0', '', '2025-01-07 20:16:00'); +INSERT INTO `sys_job_log` VALUES (3436, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:10毫秒', '0', '', '2025-01-07 20:17:00'); +INSERT INTO `sys_job_log` VALUES (3437, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-07 20:17:00'); +INSERT INTO `sys_job_log` VALUES (3438, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 20:18:00'); +INSERT INTO `sys_job_log` VALUES (3439, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-07 20:18:00'); +INSERT INTO `sys_job_log` VALUES (3440, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-07 20:18:00'); +INSERT INTO `sys_job_log` VALUES (3441, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:750毫秒', '0', '', '2025-01-07 20:18:00'); +INSERT INTO `sys_job_log` VALUES (3442, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 20:19:00'); +INSERT INTO `sys_job_log` VALUES (3443, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-07 20:19:00'); +INSERT INTO `sys_job_log` VALUES (3444, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 20:20:00'); +INSERT INTO `sys_job_log` VALUES (3445, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:14毫秒', '0', '', '2025-01-07 20:20:00'); +INSERT INTO `sys_job_log` VALUES (3446, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-07 20:20:00'); +INSERT INTO `sys_job_log` VALUES (3447, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:765毫秒', '0', '', '2025-01-07 20:20:00'); +INSERT INTO `sys_job_log` VALUES (3448, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 20:21:00'); +INSERT INTO `sys_job_log` VALUES (3449, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-07 20:21:00'); +INSERT INTO `sys_job_log` VALUES (3450, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 20:22:00'); +INSERT INTO `sys_job_log` VALUES (3451, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-07 20:22:00'); +INSERT INTO `sys_job_log` VALUES (3452, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-07 20:22:00'); +INSERT INTO `sys_job_log` VALUES (3453, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:766毫秒', '0', '', '2025-01-07 20:22:00'); +INSERT INTO `sys_job_log` VALUES (3454, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 20:23:00'); +INSERT INTO `sys_job_log` VALUES (3455, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-07 20:23:00'); +INSERT INTO `sys_job_log` VALUES (3456, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-07 20:24:00'); +INSERT INTO `sys_job_log` VALUES (3457, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-07 20:24:00'); +INSERT INTO `sys_job_log` VALUES (3458, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:94毫秒', '0', '', '2025-01-07 20:24:00'); +INSERT INTO `sys_job_log` VALUES (3459, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:734毫秒', '0', '', '2025-01-07 20:24:00'); +INSERT INTO `sys_job_log` VALUES (3460, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-07 20:25:00'); +INSERT INTO `sys_job_log` VALUES (3461, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:31毫秒', '0', '', '2025-01-07 20:25:00'); +INSERT INTO `sys_job_log` VALUES (3462, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 20:26:00'); +INSERT INTO `sys_job_log` VALUES (3463, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:14毫秒', '0', '', '2025-01-07 20:26:00'); +INSERT INTO `sys_job_log` VALUES (3464, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-07 20:26:00'); +INSERT INTO `sys_job_log` VALUES (3465, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:750毫秒', '0', '', '2025-01-07 20:26:00'); +INSERT INTO `sys_job_log` VALUES (3466, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 20:27:00'); +INSERT INTO `sys_job_log` VALUES (3467, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-07 20:27:00'); +INSERT INTO `sys_job_log` VALUES (3468, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 20:28:00'); +INSERT INTO `sys_job_log` VALUES (3469, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:12毫秒', '0', '', '2025-01-07 20:28:00'); +INSERT INTO `sys_job_log` VALUES (3470, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-07 20:28:00'); +INSERT INTO `sys_job_log` VALUES (3471, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:766毫秒', '0', '', '2025-01-07 20:28:00'); +INSERT INTO `sys_job_log` VALUES (3472, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 20:29:00'); +INSERT INTO `sys_job_log` VALUES (3473, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-07 20:29:00'); +INSERT INTO `sys_job_log` VALUES (3474, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 20:30:00'); +INSERT INTO `sys_job_log` VALUES (3475, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:14毫秒', '0', '', '2025-01-07 20:30:00'); +INSERT INTO `sys_job_log` VALUES (3476, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-07 20:30:00'); +INSERT INTO `sys_job_log` VALUES (3477, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:750毫秒', '0', '', '2025-01-07 20:30:00'); +INSERT INTO `sys_job_log` VALUES (3478, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 20:31:00'); +INSERT INTO `sys_job_log` VALUES (3479, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:46毫秒', '0', '', '2025-01-07 20:31:00'); +INSERT INTO `sys_job_log` VALUES (3480, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 20:32:00'); +INSERT INTO `sys_job_log` VALUES (3481, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:14毫秒', '0', '', '2025-01-07 20:32:00'); +INSERT INTO `sys_job_log` VALUES (3482, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-07 20:32:00'); +INSERT INTO `sys_job_log` VALUES (3483, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:766毫秒', '0', '', '2025-01-07 20:32:00'); +INSERT INTO `sys_job_log` VALUES (3484, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 20:33:00'); +INSERT INTO `sys_job_log` VALUES (3485, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-07 20:33:00'); +INSERT INTO `sys_job_log` VALUES (3486, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 20:34:00'); +INSERT INTO `sys_job_log` VALUES (3487, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:12毫秒', '0', '', '2025-01-07 20:34:00'); +INSERT INTO `sys_job_log` VALUES (3488, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-07 20:34:00'); +INSERT INTO `sys_job_log` VALUES (3489, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:750毫秒', '0', '', '2025-01-07 20:34:00'); +INSERT INTO `sys_job_log` VALUES (3490, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 20:35:00'); +INSERT INTO `sys_job_log` VALUES (3491, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:31毫秒', '0', '', '2025-01-07 20:35:00'); +INSERT INTO `sys_job_log` VALUES (3492, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:8毫秒', '0', '', '2025-01-07 20:36:00'); +INSERT INTO `sys_job_log` VALUES (3493, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:14毫秒', '0', '', '2025-01-07 20:36:00'); +INSERT INTO `sys_job_log` VALUES (3494, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:31毫秒', '0', '', '2025-01-07 20:36:00'); +INSERT INTO `sys_job_log` VALUES (3495, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:767毫秒', '0', '', '2025-01-07 20:36:00'); +INSERT INTO `sys_job_log` VALUES (3496, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 20:37:00'); +INSERT INTO `sys_job_log` VALUES (3497, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:187毫秒', '0', '', '2025-01-07 20:37:00'); +INSERT INTO `sys_job_log` VALUES (3498, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:8毫秒', '0', '', '2025-01-07 20:38:00'); +INSERT INTO `sys_job_log` VALUES (3499, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-07 20:38:00'); +INSERT INTO `sys_job_log` VALUES (3500, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:188毫秒', '0', '', '2025-01-07 20:38:00'); +INSERT INTO `sys_job_log` VALUES (3501, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:766毫秒', '0', '', '2025-01-07 20:38:00'); +INSERT INTO `sys_job_log` VALUES (3502, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:7毫秒', '0', '', '2025-01-07 20:39:00'); +INSERT INTO `sys_job_log` VALUES (3503, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-07 20:39:00'); +INSERT INTO `sys_job_log` VALUES (3504, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:7毫秒', '0', '', '2025-01-07 20:40:00'); +INSERT INTO `sys_job_log` VALUES (3505, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-07 20:40:00'); +INSERT INTO `sys_job_log` VALUES (3506, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:362毫秒', '0', '', '2025-01-07 20:40:00'); +INSERT INTO `sys_job_log` VALUES (3507, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:758毫秒', '0', '', '2025-01-07 20:40:00'); +INSERT INTO `sys_job_log` VALUES (3508, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:12毫秒', '0', '', '2025-01-07 20:41:00'); +INSERT INTO `sys_job_log` VALUES (3509, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:46毫秒', '0', '', '2025-01-07 20:41:00'); +INSERT INTO `sys_job_log` VALUES (3510, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 20:42:00'); +INSERT INTO `sys_job_log` VALUES (3511, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-07 20:42:00'); +INSERT INTO `sys_job_log` VALUES (3512, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:334毫秒', '0', '', '2025-01-07 20:42:00'); +INSERT INTO `sys_job_log` VALUES (3513, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:821毫秒', '0', '', '2025-01-07 20:42:00'); +INSERT INTO `sys_job_log` VALUES (3514, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:16毫秒', '0', '', '2025-01-07 20:43:00'); +INSERT INTO `sys_job_log` VALUES (3515, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:49毫秒', '0', '', '2025-01-07 20:43:00'); +INSERT INTO `sys_job_log` VALUES (3516, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-07 20:44:00'); +INSERT INTO `sys_job_log` VALUES (3517, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-07 20:44:00'); +INSERT INTO `sys_job_log` VALUES (3518, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:334毫秒', '0', '', '2025-01-07 20:44:00'); +INSERT INTO `sys_job_log` VALUES (3519, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:758毫秒', '0', '', '2025-01-07 20:44:00'); +INSERT INTO `sys_job_log` VALUES (3520, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:14毫秒', '0', '', '2025-01-07 20:45:00'); +INSERT INTO `sys_job_log` VALUES (3521, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:31毫秒', '0', '', '2025-01-07 20:45:00'); +INSERT INTO `sys_job_log` VALUES (3522, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 20:46:00'); +INSERT INTO `sys_job_log` VALUES (3523, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:15毫秒', '0', '', '2025-01-07 20:46:00'); +INSERT INTO `sys_job_log` VALUES (3524, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:324毫秒', '0', '', '2025-01-07 20:46:00'); +INSERT INTO `sys_job_log` VALUES (3525, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:772毫秒', '0', '', '2025-01-07 20:46:00'); +INSERT INTO `sys_job_log` VALUES (3526, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:18毫秒', '0', '', '2025-01-07 20:47:00'); +INSERT INTO `sys_job_log` VALUES (3527, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:49毫秒', '0', '', '2025-01-07 20:47:00'); +INSERT INTO `sys_job_log` VALUES (3528, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-07 20:48:00'); +INSERT INTO `sys_job_log` VALUES (3529, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-07 20:48:00'); +INSERT INTO `sys_job_log` VALUES (3530, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:339毫秒', '0', '', '2025-01-07 20:48:00'); +INSERT INTO `sys_job_log` VALUES (3531, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:765毫秒', '0', '', '2025-01-07 20:48:00'); +INSERT INTO `sys_job_log` VALUES (3532, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:15毫秒', '0', '', '2025-01-07 20:49:00'); +INSERT INTO `sys_job_log` VALUES (3533, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:46毫秒', '0', '', '2025-01-07 20:49:00'); +INSERT INTO `sys_job_log` VALUES (3534, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 20:50:00'); +INSERT INTO `sys_job_log` VALUES (3535, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:12毫秒', '0', '', '2025-01-07 20:50:00'); +INSERT INTO `sys_job_log` VALUES (3536, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:334毫秒', '0', '', '2025-01-07 20:50:00'); +INSERT INTO `sys_job_log` VALUES (3537, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:761毫秒', '0', '', '2025-01-07 20:50:00'); +INSERT INTO `sys_job_log` VALUES (3538, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:16毫秒', '0', '', '2025-01-07 20:51:00'); +INSERT INTO `sys_job_log` VALUES (3539, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:50毫秒', '0', '', '2025-01-07 20:51:00'); +INSERT INTO `sys_job_log` VALUES (3540, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 20:52:00'); +INSERT INTO `sys_job_log` VALUES (3541, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-07 20:52:00'); +INSERT INTO `sys_job_log` VALUES (3542, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:376毫秒', '0', '', '2025-01-07 20:52:00'); +INSERT INTO `sys_job_log` VALUES (3543, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:766毫秒', '0', '', '2025-01-07 20:52:00'); +INSERT INTO `sys_job_log` VALUES (3544, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:16毫秒', '0', '', '2025-01-07 20:53:00'); +INSERT INTO `sys_job_log` VALUES (3545, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:45毫秒', '0', '', '2025-01-07 20:53:00'); +INSERT INTO `sys_job_log` VALUES (3546, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-07 20:54:00'); +INSERT INTO `sys_job_log` VALUES (3547, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-07 20:54:00'); +INSERT INTO `sys_job_log` VALUES (3548, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:341毫秒', '0', '', '2025-01-07 20:54:00'); +INSERT INTO `sys_job_log` VALUES (3549, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:767毫秒', '0', '', '2025-01-07 20:54:00'); +INSERT INTO `sys_job_log` VALUES (3550, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:14毫秒', '0', '', '2025-01-07 20:55:00'); +INSERT INTO `sys_job_log` VALUES (3551, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:48毫秒', '0', '', '2025-01-07 20:55:00'); +INSERT INTO `sys_job_log` VALUES (3552, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-07 20:56:00'); +INSERT INTO `sys_job_log` VALUES (3553, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-07 20:56:00'); +INSERT INTO `sys_job_log` VALUES (3554, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:382毫秒', '0', '', '2025-01-07 20:56:00'); +INSERT INTO `sys_job_log` VALUES (3555, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:763毫秒', '0', '', '2025-01-07 20:56:00'); +INSERT INTO `sys_job_log` VALUES (3556, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:11毫秒', '0', '', '2025-01-07 20:57:00'); +INSERT INTO `sys_job_log` VALUES (3557, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-07 20:57:00'); +INSERT INTO `sys_job_log` VALUES (3558, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 20:58:00'); +INSERT INTO `sys_job_log` VALUES (3559, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:14毫秒', '0', '', '2025-01-07 20:58:00'); +INSERT INTO `sys_job_log` VALUES (3560, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:379毫秒', '0', '', '2025-01-07 20:58:00'); +INSERT INTO `sys_job_log` VALUES (3561, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:777毫秒', '0', '', '2025-01-07 20:58:00'); +INSERT INTO `sys_job_log` VALUES (3562, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:14毫秒', '0', '', '2025-01-07 20:59:00'); +INSERT INTO `sys_job_log` VALUES (3563, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:50毫秒', '0', '', '2025-01-07 20:59:00'); +INSERT INTO `sys_job_log` VALUES (3564, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 21:00:00'); +INSERT INTO `sys_job_log` VALUES (3565, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-07 21:00:00'); +INSERT INTO `sys_job_log` VALUES (3566, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:341毫秒', '0', '', '2025-01-07 21:00:00'); +INSERT INTO `sys_job_log` VALUES (3567, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:773毫秒', '0', '', '2025-01-07 21:00:00'); +INSERT INTO `sys_job_log` VALUES (3568, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:11毫秒', '0', '', '2025-01-07 21:01:00'); +INSERT INTO `sys_job_log` VALUES (3569, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:50毫秒', '0', '', '2025-01-07 21:01:00'); +INSERT INTO `sys_job_log` VALUES (3570, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 21:02:00'); +INSERT INTO `sys_job_log` VALUES (3571, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-07 21:02:00'); +INSERT INTO `sys_job_log` VALUES (3572, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:338毫秒', '0', '', '2025-01-07 21:02:00'); +INSERT INTO `sys_job_log` VALUES (3573, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:720毫秒', '0', '', '2025-01-07 21:02:00'); +INSERT INTO `sys_job_log` VALUES (3574, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:12毫秒', '0', '', '2025-01-07 21:03:00'); +INSERT INTO `sys_job_log` VALUES (3575, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:45毫秒', '0', '', '2025-01-07 21:03:00'); +INSERT INTO `sys_job_log` VALUES (3576, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 21:04:00'); +INSERT INTO `sys_job_log` VALUES (3577, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-07 21:04:00'); +INSERT INTO `sys_job_log` VALUES (3578, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:317毫秒', '0', '', '2025-01-07 21:04:00'); +INSERT INTO `sys_job_log` VALUES (3579, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:762毫秒', '0', '', '2025-01-07 21:04:00'); +INSERT INTO `sys_job_log` VALUES (3580, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:12毫秒', '0', '', '2025-01-07 21:05:00'); +INSERT INTO `sys_job_log` VALUES (3581, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:45毫秒', '0', '', '2025-01-07 21:05:00'); +INSERT INTO `sys_job_log` VALUES (3582, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 21:06:00'); +INSERT INTO `sys_job_log` VALUES (3583, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:12毫秒', '0', '', '2025-01-07 21:06:00'); +INSERT INTO `sys_job_log` VALUES (3584, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:330毫秒', '0', '', '2025-01-07 21:06:00'); +INSERT INTO `sys_job_log` VALUES (3585, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:770毫秒', '0', '', '2025-01-07 21:06:00'); +INSERT INTO `sys_job_log` VALUES (3586, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:8毫秒', '0', '', '2025-01-07 21:07:00'); +INSERT INTO `sys_job_log` VALUES (3587, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:48毫秒', '0', '', '2025-01-07 21:07:00'); +INSERT INTO `sys_job_log` VALUES (3588, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-07 21:08:00'); +INSERT INTO `sys_job_log` VALUES (3589, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-07 21:08:00'); +INSERT INTO `sys_job_log` VALUES (3590, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:188毫秒', '0', '', '2025-01-07 21:08:00'); +INSERT INTO `sys_job_log` VALUES (3591, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:2470毫秒', '0', '', '2025-01-07 21:08:02'); +INSERT INTO `sys_job_log` VALUES (3592, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:7毫秒', '0', '', '2025-01-07 21:09:00'); +INSERT INTO `sys_job_log` VALUES (3593, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:46毫秒', '0', '', '2025-01-07 21:09:00'); +INSERT INTO `sys_job_log` VALUES (3594, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:9毫秒', '0', '', '2025-01-07 21:10:00'); +INSERT INTO `sys_job_log` VALUES (3595, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:14毫秒', '0', '', '2025-01-07 21:10:00'); +INSERT INTO `sys_job_log` VALUES (3596, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:195毫秒', '0', '', '2025-01-07 21:10:00'); +INSERT INTO `sys_job_log` VALUES (3597, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:726毫秒', '0', '', '2025-01-07 21:10:00'); +INSERT INTO `sys_job_log` VALUES (3598, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:6毫秒', '0', '', '2025-01-07 21:11:00'); +INSERT INTO `sys_job_log` VALUES (3599, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:190毫秒', '0', '', '2025-01-07 21:11:00'); +INSERT INTO `sys_job_log` VALUES (3600, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:8毫秒', '0', '', '2025-01-07 21:12:00'); +INSERT INTO `sys_job_log` VALUES (3601, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-07 21:12:00'); +INSERT INTO `sys_job_log` VALUES (3602, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:32毫秒', '0', '', '2025-01-07 21:12:00'); +INSERT INTO `sys_job_log` VALUES (3603, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:719毫秒', '0', '', '2025-01-07 21:12:00'); +INSERT INTO `sys_job_log` VALUES (3604, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-07 21:13:00'); +INSERT INTO `sys_job_log` VALUES (3605, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:193毫秒', '0', '', '2025-01-07 21:13:00'); +INSERT INTO `sys_job_log` VALUES (3606, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:10毫秒', '0', '', '2025-01-07 21:14:00'); +INSERT INTO `sys_job_log` VALUES (3607, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:14毫秒', '0', '', '2025-01-07 21:14:00'); +INSERT INTO `sys_job_log` VALUES (3608, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-07 21:14:00'); +INSERT INTO `sys_job_log` VALUES (3609, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:757毫秒', '0', '', '2025-01-07 21:14:00'); +INSERT INTO `sys_job_log` VALUES (3610, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 21:15:00'); +INSERT INTO `sys_job_log` VALUES (3611, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:193毫秒', '0', '', '2025-01-07 21:15:00'); +INSERT INTO `sys_job_log` VALUES (3612, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:7毫秒', '0', '', '2025-01-07 21:16:00'); +INSERT INTO `sys_job_log` VALUES (3613, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-07 21:16:00'); +INSERT INTO `sys_job_log` VALUES (3614, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:46毫秒', '0', '', '2025-01-07 21:16:00'); +INSERT INTO `sys_job_log` VALUES (3615, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:721毫秒', '0', '', '2025-01-07 21:16:00'); +INSERT INTO `sys_job_log` VALUES (3616, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:7毫秒', '0', '', '2025-01-07 21:17:00'); +INSERT INTO `sys_job_log` VALUES (3617, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-07 21:17:00'); +INSERT INTO `sys_job_log` VALUES (3618, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:8毫秒', '0', '', '2025-01-07 21:18:00'); +INSERT INTO `sys_job_log` VALUES (3619, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-07 21:18:00'); +INSERT INTO `sys_job_log` VALUES (3620, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:50毫秒', '0', '', '2025-01-07 21:18:00'); +INSERT INTO `sys_job_log` VALUES (3621, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:719毫秒', '0', '', '2025-01-07 21:18:00'); +INSERT INTO `sys_job_log` VALUES (3622, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:8毫秒', '0', '', '2025-01-07 21:19:00'); +INSERT INTO `sys_job_log` VALUES (3623, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:183毫秒', '0', '', '2025-01-07 21:19:00'); +INSERT INTO `sys_job_log` VALUES (3624, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:7毫秒', '0', '', '2025-01-07 21:20:00'); +INSERT INTO `sys_job_log` VALUES (3625, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:14毫秒', '0', '', '2025-01-07 21:20:00'); +INSERT INTO `sys_job_log` VALUES (3626, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:46毫秒', '0', '', '2025-01-07 21:20:00'); +INSERT INTO `sys_job_log` VALUES (3627, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:721毫秒', '0', '', '2025-01-07 21:20:00'); +INSERT INTO `sys_job_log` VALUES (3628, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:8毫秒', '0', '', '2025-01-07 21:21:00'); +INSERT INTO `sys_job_log` VALUES (3629, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:46毫秒', '0', '', '2025-01-07 21:21:00'); +INSERT INTO `sys_job_log` VALUES (3630, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:9毫秒', '0', '', '2025-01-07 21:22:00'); +INSERT INTO `sys_job_log` VALUES (3631, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-07 21:22:00'); +INSERT INTO `sys_job_log` VALUES (3632, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-07 21:22:00'); +INSERT INTO `sys_job_log` VALUES (3633, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:718毫秒', '0', '', '2025-01-07 21:22:00'); +INSERT INTO `sys_job_log` VALUES (3634, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:6毫秒', '0', '', '2025-01-07 21:23:00'); +INSERT INTO `sys_job_log` VALUES (3635, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:44毫秒', '0', '', '2025-01-07 21:23:00'); +INSERT INTO `sys_job_log` VALUES (3636, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 21:24:00'); +INSERT INTO `sys_job_log` VALUES (3637, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-07 21:24:00'); +INSERT INTO `sys_job_log` VALUES (3638, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:192毫秒', '0', '', '2025-01-07 21:24:00'); +INSERT INTO `sys_job_log` VALUES (3639, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:766毫秒', '0', '', '2025-01-07 21:24:00'); +INSERT INTO `sys_job_log` VALUES (3640, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:8毫秒', '0', '', '2025-01-07 21:25:00'); +INSERT INTO `sys_job_log` VALUES (3641, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:48毫秒', '0', '', '2025-01-07 21:25:00'); +INSERT INTO `sys_job_log` VALUES (3642, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 21:26:00'); +INSERT INTO `sys_job_log` VALUES (3643, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-07 21:26:00'); +INSERT INTO `sys_job_log` VALUES (3644, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:192毫秒', '0', '', '2025-01-07 21:26:00'); +INSERT INTO `sys_job_log` VALUES (3645, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:767毫秒', '0', '', '2025-01-07 21:26:00'); +INSERT INTO `sys_job_log` VALUES (3646, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:8毫秒', '0', '', '2025-01-07 21:27:00'); +INSERT INTO `sys_job_log` VALUES (3647, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:291毫秒', '0', '', '2025-01-07 21:27:00'); +INSERT INTO `sys_job_log` VALUES (3648, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:8毫秒', '0', '', '2025-01-07 21:28:00'); +INSERT INTO `sys_job_log` VALUES (3649, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:14毫秒', '0', '', '2025-01-07 21:28:00'); +INSERT INTO `sys_job_log` VALUES (3650, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:48毫秒', '0', '', '2025-01-07 21:28:00'); +INSERT INTO `sys_job_log` VALUES (3651, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:772毫秒', '0', '', '2025-01-07 21:28:00'); +INSERT INTO `sys_job_log` VALUES (3652, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 21:29:00'); +INSERT INTO `sys_job_log` VALUES (3653, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:184毫秒', '0', '', '2025-01-07 21:29:00'); +INSERT INTO `sys_job_log` VALUES (3654, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:9毫秒', '0', '', '2025-01-07 21:30:00'); +INSERT INTO `sys_job_log` VALUES (3655, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:15毫秒', '0', '', '2025-01-07 21:30:00'); +INSERT INTO `sys_job_log` VALUES (3656, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:242毫秒', '0', '', '2025-01-07 21:30:00'); +INSERT INTO `sys_job_log` VALUES (3657, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:720毫秒', '0', '', '2025-01-07 21:30:00'); +INSERT INTO `sys_job_log` VALUES (3658, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:8毫秒', '0', '', '2025-01-07 21:31:00'); +INSERT INTO `sys_job_log` VALUES (3659, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:46毫秒', '0', '', '2025-01-07 21:31:00'); +INSERT INTO `sys_job_log` VALUES (3660, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-07 21:32:00'); +INSERT INTO `sys_job_log` VALUES (3661, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-07 21:32:00'); +INSERT INTO `sys_job_log` VALUES (3662, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:188毫秒', '0', '', '2025-01-07 21:32:00'); +INSERT INTO `sys_job_log` VALUES (3663, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:767毫秒', '0', '', '2025-01-07 21:32:00'); +INSERT INTO `sys_job_log` VALUES (3664, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:8毫秒', '0', '', '2025-01-07 21:33:00'); +INSERT INTO `sys_job_log` VALUES (3665, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:46毫秒', '0', '', '2025-01-07 21:33:00'); +INSERT INTO `sys_job_log` VALUES (3666, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-07 21:34:00'); +INSERT INTO `sys_job_log` VALUES (3667, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-07 21:34:00'); +INSERT INTO `sys_job_log` VALUES (3668, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:187毫秒', '0', '', '2025-01-07 21:34:00'); +INSERT INTO `sys_job_log` VALUES (3669, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:765毫秒', '0', '', '2025-01-07 21:34:00'); +INSERT INTO `sys_job_log` VALUES (3670, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:7毫秒', '0', '', '2025-01-07 21:35:00'); +INSERT INTO `sys_job_log` VALUES (3671, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:32毫秒', '0', '', '2025-01-07 21:35:00'); +INSERT INTO `sys_job_log` VALUES (3672, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 21:36:00'); +INSERT INTO `sys_job_log` VALUES (3673, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-07 21:36:00'); +INSERT INTO `sys_job_log` VALUES (3674, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:188毫秒', '0', '', '2025-01-07 21:36:00'); +INSERT INTO `sys_job_log` VALUES (3675, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:766毫秒', '0', '', '2025-01-07 21:36:00'); +INSERT INTO `sys_job_log` VALUES (3676, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:7毫秒', '0', '', '2025-01-07 21:37:00'); +INSERT INTO `sys_job_log` VALUES (3677, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-07 21:37:00'); +INSERT INTO `sys_job_log` VALUES (3678, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 21:38:00'); +INSERT INTO `sys_job_log` VALUES (3679, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-07 21:38:00'); +INSERT INTO `sys_job_log` VALUES (3680, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:197毫秒', '0', '', '2025-01-07 21:38:00'); +INSERT INTO `sys_job_log` VALUES (3681, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:766毫秒', '0', '', '2025-01-07 21:38:00'); +INSERT INTO `sys_job_log` VALUES (3682, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:7毫秒', '0', '', '2025-01-07 21:39:00'); +INSERT INTO `sys_job_log` VALUES (3683, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:32毫秒', '0', '', '2025-01-07 21:39:00'); +INSERT INTO `sys_job_log` VALUES (3684, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 21:40:00'); +INSERT INTO `sys_job_log` VALUES (3685, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:12毫秒', '0', '', '2025-01-07 21:40:00'); +INSERT INTO `sys_job_log` VALUES (3686, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:235毫秒', '0', '', '2025-01-07 21:40:00'); +INSERT INTO `sys_job_log` VALUES (3687, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:719毫秒', '0', '', '2025-01-07 21:40:00'); +INSERT INTO `sys_job_log` VALUES (3688, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:7毫秒', '0', '', '2025-01-07 21:41:00'); +INSERT INTO `sys_job_log` VALUES (3689, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:46毫秒', '0', '', '2025-01-07 21:41:00'); +INSERT INTO `sys_job_log` VALUES (3690, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 21:42:00'); +INSERT INTO `sys_job_log` VALUES (3691, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-07 21:42:00'); +INSERT INTO `sys_job_log` VALUES (3692, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:243毫秒', '0', '', '2025-01-07 21:42:00'); +INSERT INTO `sys_job_log` VALUES (3693, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:719毫秒', '0', '', '2025-01-07 21:42:00'); +INSERT INTO `sys_job_log` VALUES (3694, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:8毫秒', '0', '', '2025-01-07 21:43:00'); +INSERT INTO `sys_job_log` VALUES (3695, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-07 21:43:00'); +INSERT INTO `sys_job_log` VALUES (3696, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 21:44:00'); +INSERT INTO `sys_job_log` VALUES (3697, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-07 21:44:00'); +INSERT INTO `sys_job_log` VALUES (3698, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:188毫秒', '0', '', '2025-01-07 21:44:00'); +INSERT INTO `sys_job_log` VALUES (3699, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:766毫秒', '0', '', '2025-01-07 21:44:00'); +INSERT INTO `sys_job_log` VALUES (3700, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:7毫秒', '0', '', '2025-01-07 21:45:00'); +INSERT INTO `sys_job_log` VALUES (3701, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:33毫秒', '0', '', '2025-01-07 21:45:00'); +INSERT INTO `sys_job_log` VALUES (3702, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 21:46:00'); +INSERT INTO `sys_job_log` VALUES (3703, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:14毫秒', '0', '', '2025-01-07 21:46:00'); +INSERT INTO `sys_job_log` VALUES (3704, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:187毫秒', '0', '', '2025-01-07 21:46:00'); +INSERT INTO `sys_job_log` VALUES (3705, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:766毫秒', '0', '', '2025-01-07 21:46:00'); +INSERT INTO `sys_job_log` VALUES (3706, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:7毫秒', '0', '', '2025-01-07 21:47:00'); +INSERT INTO `sys_job_log` VALUES (3707, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-07 21:47:00'); +INSERT INTO `sys_job_log` VALUES (3708, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-07 21:48:00'); +INSERT INTO `sys_job_log` VALUES (3709, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-07 21:48:00'); +INSERT INTO `sys_job_log` VALUES (3710, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:188毫秒', '0', '', '2025-01-07 21:48:00'); +INSERT INTO `sys_job_log` VALUES (3711, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:766毫秒', '0', '', '2025-01-07 21:48:00'); +INSERT INTO `sys_job_log` VALUES (3712, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:7毫秒', '0', '', '2025-01-07 21:49:00'); +INSERT INTO `sys_job_log` VALUES (3713, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:46毫秒', '0', '', '2025-01-07 21:49:00'); +INSERT INTO `sys_job_log` VALUES (3714, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-07 21:50:00'); +INSERT INTO `sys_job_log` VALUES (3715, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-07 21:50:00'); +INSERT INTO `sys_job_log` VALUES (3716, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:187毫秒', '0', '', '2025-01-07 21:50:00'); +INSERT INTO `sys_job_log` VALUES (3717, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:765毫秒', '0', '', '2025-01-07 21:50:00'); +INSERT INTO `sys_job_log` VALUES (3718, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:7毫秒', '0', '', '2025-01-07 21:51:00'); +INSERT INTO `sys_job_log` VALUES (3719, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:48毫秒', '0', '', '2025-01-07 21:51:00'); +INSERT INTO `sys_job_log` VALUES (3720, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-07 21:52:00'); +INSERT INTO `sys_job_log` VALUES (3721, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-07 21:52:00'); +INSERT INTO `sys_job_log` VALUES (3722, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:219毫秒', '0', '', '2025-01-07 21:52:00'); +INSERT INTO `sys_job_log` VALUES (3723, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:751毫秒', '0', '', '2025-01-07 21:52:00'); +INSERT INTO `sys_job_log` VALUES (3724, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:7毫秒', '0', '', '2025-01-07 21:53:00'); +INSERT INTO `sys_job_log` VALUES (3725, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-07 21:53:00'); +INSERT INTO `sys_job_log` VALUES (3726, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-07 21:54:00'); +INSERT INTO `sys_job_log` VALUES (3727, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-07 21:54:00'); +INSERT INTO `sys_job_log` VALUES (3728, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:187毫秒', '0', '', '2025-01-07 21:54:00'); +INSERT INTO `sys_job_log` VALUES (3729, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:765毫秒', '0', '', '2025-01-07 21:54:00'); +INSERT INTO `sys_job_log` VALUES (3730, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:8毫秒', '0', '', '2025-01-07 21:55:00'); +INSERT INTO `sys_job_log` VALUES (3731, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-07 21:55:00'); +INSERT INTO `sys_job_log` VALUES (3732, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 21:56:00'); +INSERT INTO `sys_job_log` VALUES (3733, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:14毫秒', '0', '', '2025-01-07 21:56:00'); +INSERT INTO `sys_job_log` VALUES (3734, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:172毫秒', '0', '', '2025-01-07 21:56:00'); +INSERT INTO `sys_job_log` VALUES (3735, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:765毫秒', '0', '', '2025-01-07 21:56:00'); +INSERT INTO `sys_job_log` VALUES (3736, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:7毫秒', '0', '', '2025-01-07 21:57:00'); +INSERT INTO `sys_job_log` VALUES (3737, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-07 21:57:00'); +INSERT INTO `sys_job_log` VALUES (3738, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-07 21:58:00'); +INSERT INTO `sys_job_log` VALUES (3739, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-07 21:58:00'); +INSERT INTO `sys_job_log` VALUES (3740, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:48毫秒', '0', '', '2025-01-07 21:58:00'); +INSERT INTO `sys_job_log` VALUES (3741, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:751毫秒', '0', '', '2025-01-07 21:58:00'); +INSERT INTO `sys_job_log` VALUES (3742, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-07 21:59:00'); +INSERT INTO `sys_job_log` VALUES (3743, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:329毫秒', '0', '', '2025-01-07 21:59:01'); +INSERT INTO `sys_job_log` VALUES (3744, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-07 22:00:00'); +INSERT INTO `sys_job_log` VALUES (3745, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:12毫秒', '0', '', '2025-01-07 22:00:00'); +INSERT INTO `sys_job_log` VALUES (3746, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:94毫秒', '0', '', '2025-01-07 22:00:00'); +INSERT INTO `sys_job_log` VALUES (3747, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:719毫秒', '0', '', '2025-01-07 22:00:00'); +INSERT INTO `sys_job_log` VALUES (3748, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 22:01:00'); +INSERT INTO `sys_job_log` VALUES (3749, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:46毫秒', '0', '', '2025-01-07 22:01:00'); +INSERT INTO `sys_job_log` VALUES (3750, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 22:02:00'); +INSERT INTO `sys_job_log` VALUES (3751, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-07 22:02:00'); +INSERT INTO `sys_job_log` VALUES (3752, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-07 22:02:00'); +INSERT INTO `sys_job_log` VALUES (3753, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:767毫秒', '0', '', '2025-01-07 22:02:00'); +INSERT INTO `sys_job_log` VALUES (3754, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 22:03:00'); +INSERT INTO `sys_job_log` VALUES (3755, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-07 22:03:00'); +INSERT INTO `sys_job_log` VALUES (3756, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-07 22:04:00'); +INSERT INTO `sys_job_log` VALUES (3757, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:12毫秒', '0', '', '2025-01-07 22:04:00'); +INSERT INTO `sys_job_log` VALUES (3758, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-07 22:04:00'); +INSERT INTO `sys_job_log` VALUES (3759, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:766毫秒', '0', '', '2025-01-07 22:04:00'); +INSERT INTO `sys_job_log` VALUES (3760, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 22:05:00'); +INSERT INTO `sys_job_log` VALUES (3761, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-07 22:05:00'); +INSERT INTO `sys_job_log` VALUES (3762, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-07 22:06:00'); +INSERT INTO `sys_job_log` VALUES (3763, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-07 22:06:00'); +INSERT INTO `sys_job_log` VALUES (3764, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-07 22:06:00'); +INSERT INTO `sys_job_log` VALUES (3765, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:766毫秒', '0', '', '2025-01-07 22:06:00'); +INSERT INTO `sys_job_log` VALUES (3766, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 22:07:00'); +INSERT INTO `sys_job_log` VALUES (3767, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:46毫秒', '0', '', '2025-01-07 22:07:00'); +INSERT INTO `sys_job_log` VALUES (3768, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 22:08:00'); +INSERT INTO `sys_job_log` VALUES (3769, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-07 22:08:00'); +INSERT INTO `sys_job_log` VALUES (3770, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:79毫秒', '0', '', '2025-01-07 22:08:00'); +INSERT INTO `sys_job_log` VALUES (3771, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:720毫秒', '0', '', '2025-01-07 22:08:00'); +INSERT INTO `sys_job_log` VALUES (3772, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 22:09:00'); +INSERT INTO `sys_job_log` VALUES (3773, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-07 22:09:00'); +INSERT INTO `sys_job_log` VALUES (3774, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-07 22:10:00'); +INSERT INTO `sys_job_log` VALUES (3775, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-07 22:10:00'); +INSERT INTO `sys_job_log` VALUES (3776, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:94毫秒', '0', '', '2025-01-07 22:10:00'); +INSERT INTO `sys_job_log` VALUES (3777, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:720毫秒', '0', '', '2025-01-07 22:10:00'); +INSERT INTO `sys_job_log` VALUES (3778, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 22:11:00'); +INSERT INTO `sys_job_log` VALUES (3779, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-07 22:11:00'); +INSERT INTO `sys_job_log` VALUES (3780, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-07 22:12:00'); +INSERT INTO `sys_job_log` VALUES (3781, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-07 22:12:00'); +INSERT INTO `sys_job_log` VALUES (3782, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-07 22:12:00'); +INSERT INTO `sys_job_log` VALUES (3783, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:766毫秒', '0', '', '2025-01-07 22:12:00'); +INSERT INTO `sys_job_log` VALUES (3784, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 22:13:00'); +INSERT INTO `sys_job_log` VALUES (3785, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:34毫秒', '0', '', '2025-01-07 22:13:00'); +INSERT INTO `sys_job_log` VALUES (3786, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 22:14:00'); +INSERT INTO `sys_job_log` VALUES (3787, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-07 22:14:00'); +INSERT INTO `sys_job_log` VALUES (3788, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:78毫秒', '0', '', '2025-01-07 22:14:00'); +INSERT INTO `sys_job_log` VALUES (3789, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:718毫秒', '0', '', '2025-01-07 22:14:00'); +INSERT INTO `sys_job_log` VALUES (3790, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 22:15:00'); +INSERT INTO `sys_job_log` VALUES (3791, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-07 22:15:00'); +INSERT INTO `sys_job_log` VALUES (3792, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 22:16:00'); +INSERT INTO `sys_job_log` VALUES (3793, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:14毫秒', '0', '', '2025-01-07 22:16:00'); +INSERT INTO `sys_job_log` VALUES (3794, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-07 22:16:00'); +INSERT INTO `sys_job_log` VALUES (3795, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:772毫秒', '0', '', '2025-01-07 22:16:00'); +INSERT INTO `sys_job_log` VALUES (3796, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 22:17:00'); +INSERT INTO `sys_job_log` VALUES (3797, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:49毫秒', '0', '', '2025-01-07 22:17:00'); +INSERT INTO `sys_job_log` VALUES (3798, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-07 22:18:00'); +INSERT INTO `sys_job_log` VALUES (3799, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:15毫秒', '0', '', '2025-01-07 22:18:00'); +INSERT INTO `sys_job_log` VALUES (3800, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:48毫秒', '0', '', '2025-01-07 22:18:00'); +INSERT INTO `sys_job_log` VALUES (3801, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:747毫秒', '0', '', '2025-01-07 22:18:00'); +INSERT INTO `sys_job_log` VALUES (3802, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 22:19:00'); +INSERT INTO `sys_job_log` VALUES (3803, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:32毫秒', '0', '', '2025-01-07 22:19:00'); +INSERT INTO `sys_job_log` VALUES (3804, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-07 22:20:00'); +INSERT INTO `sys_job_log` VALUES (3805, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:12毫秒', '0', '', '2025-01-07 22:20:00'); +INSERT INTO `sys_job_log` VALUES (3806, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:94毫秒', '0', '', '2025-01-07 22:20:00'); +INSERT INTO `sys_job_log` VALUES (3807, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:734毫秒', '0', '', '2025-01-07 22:20:00'); +INSERT INTO `sys_job_log` VALUES (3808, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 22:21:00'); +INSERT INTO `sys_job_log` VALUES (3809, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-07 22:21:00'); +INSERT INTO `sys_job_log` VALUES (3810, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 22:22:00'); +INSERT INTO `sys_job_log` VALUES (3811, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-07 22:22:00'); +INSERT INTO `sys_job_log` VALUES (3812, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:94毫秒', '0', '', '2025-01-07 22:22:00'); +INSERT INTO `sys_job_log` VALUES (3813, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:719毫秒', '0', '', '2025-01-07 22:22:00'); +INSERT INTO `sys_job_log` VALUES (3814, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 22:23:00'); +INSERT INTO `sys_job_log` VALUES (3815, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-07 22:23:00'); +INSERT INTO `sys_job_log` VALUES (3816, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-07 22:24:00'); +INSERT INTO `sys_job_log` VALUES (3817, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:14毫秒', '0', '', '2025-01-07 22:24:00'); +INSERT INTO `sys_job_log` VALUES (3818, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:78毫秒', '0', '', '2025-01-07 22:24:00'); +INSERT INTO `sys_job_log` VALUES (3819, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:720毫秒', '0', '', '2025-01-07 22:24:00'); +INSERT INTO `sys_job_log` VALUES (3820, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-07 22:25:00'); +INSERT INTO `sys_job_log` VALUES (3821, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:46毫秒', '0', '', '2025-01-07 22:25:00'); +INSERT INTO `sys_job_log` VALUES (3822, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-07 22:26:00'); +INSERT INTO `sys_job_log` VALUES (3823, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:12毫秒', '0', '', '2025-01-07 22:26:00'); +INSERT INTO `sys_job_log` VALUES (3824, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:80毫秒', '0', '', '2025-01-07 22:26:00'); +INSERT INTO `sys_job_log` VALUES (3825, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:705毫秒', '0', '', '2025-01-07 22:26:00'); +INSERT INTO `sys_job_log` VALUES (3826, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 22:27:00'); +INSERT INTO `sys_job_log` VALUES (3827, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-07 22:27:00'); +INSERT INTO `sys_job_log` VALUES (3828, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 22:28:00'); +INSERT INTO `sys_job_log` VALUES (3829, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-07 22:28:00'); +INSERT INTO `sys_job_log` VALUES (3830, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-07 22:28:00'); +INSERT INTO `sys_job_log` VALUES (3831, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:766毫秒', '0', '', '2025-01-07 22:28:00'); +INSERT INTO `sys_job_log` VALUES (3832, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 22:29:00'); +INSERT INTO `sys_job_log` VALUES (3833, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-07 22:29:00'); +INSERT INTO `sys_job_log` VALUES (3834, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-07 22:30:00'); +INSERT INTO `sys_job_log` VALUES (3835, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:16毫秒', '0', '', '2025-01-07 22:30:00'); +INSERT INTO `sys_job_log` VALUES (3836, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:80毫秒', '0', '', '2025-01-07 22:30:00'); +INSERT INTO `sys_job_log` VALUES (3837, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:719毫秒', '0', '', '2025-01-07 22:30:00'); +INSERT INTO `sys_job_log` VALUES (3838, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 22:31:00'); +INSERT INTO `sys_job_log` VALUES (3839, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-07 22:31:00'); +INSERT INTO `sys_job_log` VALUES (3840, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 22:32:00'); +INSERT INTO `sys_job_log` VALUES (3841, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:17毫秒', '0', '', '2025-01-07 22:32:00'); +INSERT INTO `sys_job_log` VALUES (3842, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:94毫秒', '0', '', '2025-01-07 22:32:00'); +INSERT INTO `sys_job_log` VALUES (3843, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:722毫秒', '0', '', '2025-01-07 22:32:00'); +INSERT INTO `sys_job_log` VALUES (3844, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 22:33:00'); +INSERT INTO `sys_job_log` VALUES (3845, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-07 22:33:00'); +INSERT INTO `sys_job_log` VALUES (3846, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 22:34:00'); +INSERT INTO `sys_job_log` VALUES (3847, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:29毫秒', '0', '', '2025-01-07 22:34:00'); +INSERT INTO `sys_job_log` VALUES (3848, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:49毫秒', '0', '', '2025-01-07 22:34:00'); +INSERT INTO `sys_job_log` VALUES (3849, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:769毫秒', '0', '', '2025-01-07 22:34:00'); +INSERT INTO `sys_job_log` VALUES (3850, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 22:35:00'); +INSERT INTO `sys_job_log` VALUES (3851, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:50毫秒', '0', '', '2025-01-07 22:35:00'); +INSERT INTO `sys_job_log` VALUES (3852, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 22:36:00'); +INSERT INTO `sys_job_log` VALUES (3853, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:14毫秒', '0', '', '2025-01-07 22:36:00'); +INSERT INTO `sys_job_log` VALUES (3854, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:48毫秒', '0', '', '2025-01-07 22:36:00'); +INSERT INTO `sys_job_log` VALUES (3855, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:765毫秒', '0', '', '2025-01-07 22:36:00'); +INSERT INTO `sys_job_log` VALUES (3856, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 22:37:00'); +INSERT INTO `sys_job_log` VALUES (3857, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:46毫秒', '0', '', '2025-01-07 22:37:00'); +INSERT INTO `sys_job_log` VALUES (3858, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 22:38:00'); +INSERT INTO `sys_job_log` VALUES (3859, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:14毫秒', '0', '', '2025-01-07 22:38:00'); +INSERT INTO `sys_job_log` VALUES (3860, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-07 22:38:00'); +INSERT INTO `sys_job_log` VALUES (3861, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:766毫秒', '0', '', '2025-01-07 22:38:00'); +INSERT INTO `sys_job_log` VALUES (3862, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 22:39:00'); +INSERT INTO `sys_job_log` VALUES (3863, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:45毫秒', '0', '', '2025-01-07 22:39:00'); +INSERT INTO `sys_job_log` VALUES (3864, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 22:40:00'); +INSERT INTO `sys_job_log` VALUES (3865, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:14毫秒', '0', '', '2025-01-07 22:40:00'); +INSERT INTO `sys_job_log` VALUES (3866, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:96毫秒', '0', '', '2025-01-07 22:40:00'); +INSERT INTO `sys_job_log` VALUES (3867, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:724毫秒', '0', '', '2025-01-07 22:40:00'); +INSERT INTO `sys_job_log` VALUES (3868, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-07 22:41:00'); +INSERT INTO `sys_job_log` VALUES (3869, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:49毫秒', '0', '', '2025-01-07 22:41:00'); +INSERT INTO `sys_job_log` VALUES (3870, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 22:42:00'); +INSERT INTO `sys_job_log` VALUES (3871, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:14毫秒', '0', '', '2025-01-07 22:42:00'); +INSERT INTO `sys_job_log` VALUES (3872, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:92毫秒', '0', '', '2025-01-07 22:42:00'); +INSERT INTO `sys_job_log` VALUES (3873, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:764毫秒', '0', '', '2025-01-07 22:42:00'); +INSERT INTO `sys_job_log` VALUES (3874, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-07 22:43:00'); +INSERT INTO `sys_job_log` VALUES (3875, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:48毫秒', '0', '', '2025-01-07 22:43:00'); +INSERT INTO `sys_job_log` VALUES (3876, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 22:44:00'); +INSERT INTO `sys_job_log` VALUES (3877, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-07 22:44:00'); +INSERT INTO `sys_job_log` VALUES (3878, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-07 22:44:00'); +INSERT INTO `sys_job_log` VALUES (3879, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:770毫秒', '0', '', '2025-01-07 22:44:00'); +INSERT INTO `sys_job_log` VALUES (3880, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-07 22:45:00'); +INSERT INTO `sys_job_log` VALUES (3881, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:45毫秒', '0', '', '2025-01-07 22:45:00'); +INSERT INTO `sys_job_log` VALUES (3882, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 22:46:00'); +INSERT INTO `sys_job_log` VALUES (3883, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-07 22:46:00'); +INSERT INTO `sys_job_log` VALUES (3884, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 22:47:00'); +INSERT INTO `sys_job_log` VALUES (3885, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:61毫秒', '0', '', '2025-01-07 22:47:00'); +INSERT INTO `sys_job_log` VALUES (3886, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 22:48:00'); +INSERT INTO `sys_job_log` VALUES (3887, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:12毫秒', '0', '', '2025-01-07 22:48:00'); +INSERT INTO `sys_job_log` VALUES (3888, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:48毫秒', '0', '', '2025-01-07 22:48:00'); +INSERT INTO `sys_job_log` VALUES (3889, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:777毫秒', '0', '', '2025-01-07 22:48:00'); +INSERT INTO `sys_job_log` VALUES (3890, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 22:49:00'); +INSERT INTO `sys_job_log` VALUES (3891, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:46毫秒', '0', '', '2025-01-07 22:49:00'); +INSERT INTO `sys_job_log` VALUES (3892, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 22:50:00'); +INSERT INTO `sys_job_log` VALUES (3893, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:14毫秒', '0', '', '2025-01-07 22:50:00'); +INSERT INTO `sys_job_log` VALUES (3894, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-07 22:50:00'); +INSERT INTO `sys_job_log` VALUES (3895, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:852毫秒', '0', '', '2025-01-07 22:50:00'); +INSERT INTO `sys_job_log` VALUES (3896, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-07 22:51:00'); +INSERT INTO `sys_job_log` VALUES (3897, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:49毫秒', '0', '', '2025-01-07 22:51:00'); +INSERT INTO `sys_job_log` VALUES (3898, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 22:52:00'); +INSERT INTO `sys_job_log` VALUES (3899, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-07 22:52:00'); +INSERT INTO `sys_job_log` VALUES (3900, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:401毫秒', '0', '', '2025-01-07 22:52:00'); +INSERT INTO `sys_job_log` VALUES (3901, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:1269毫秒', '0', '', '2025-01-07 22:52:01'); +INSERT INTO `sys_job_log` VALUES (3902, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-07 22:53:00'); +INSERT INTO `sys_job_log` VALUES (3903, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:48毫秒', '0', '', '2025-01-07 22:53:00'); +INSERT INTO `sys_job_log` VALUES (3904, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 22:54:00'); +INSERT INTO `sys_job_log` VALUES (3905, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-07 22:54:00'); +INSERT INTO `sys_job_log` VALUES (3906, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:49毫秒', '0', '', '2025-01-07 22:54:00'); +INSERT INTO `sys_job_log` VALUES (3907, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:765毫秒', '0', '', '2025-01-07 22:54:00'); +INSERT INTO `sys_job_log` VALUES (3908, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 22:55:00'); +INSERT INTO `sys_job_log` VALUES (3909, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-07 22:55:00'); +INSERT INTO `sys_job_log` VALUES (3910, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-07 22:56:00'); +INSERT INTO `sys_job_log` VALUES (3911, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:12毫秒', '0', '', '2025-01-07 22:56:00'); +INSERT INTO `sys_job_log` VALUES (3912, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:49毫秒', '0', '', '2025-01-07 22:56:00'); +INSERT INTO `sys_job_log` VALUES (3913, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:769毫秒', '0', '', '2025-01-07 22:56:00'); +INSERT INTO `sys_job_log` VALUES (3914, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 22:57:00'); +INSERT INTO `sys_job_log` VALUES (3915, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:46毫秒', '0', '', '2025-01-07 22:57:00'); +INSERT INTO `sys_job_log` VALUES (3916, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-07 22:58:00'); +INSERT INTO `sys_job_log` VALUES (3917, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-07 22:58:00'); +INSERT INTO `sys_job_log` VALUES (3918, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 22:59:00'); +INSERT INTO `sys_job_log` VALUES (3919, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 23:00:00'); +INSERT INTO `sys_job_log` VALUES (3920, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-07 23:00:00'); +INSERT INTO `sys_job_log` VALUES (3921, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:87毫秒', '0', '', '2025-01-07 23:00:12'); +INSERT INTO `sys_job_log` VALUES (3922, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:756毫秒', '0', '', '2025-01-07 23:00:13'); +INSERT INTO `sys_job_log` VALUES (3923, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 23:01:00'); +INSERT INTO `sys_job_log` VALUES (3924, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-07 23:02:00'); +INSERT INTO `sys_job_log` VALUES (3925, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:12毫秒', '0', '', '2025-01-07 23:02:00'); +INSERT INTO `sys_job_log` VALUES (3926, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:63毫秒', '0', '', '2025-01-07 23:02:00'); +INSERT INTO `sys_job_log` VALUES (3927, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:743毫秒', '0', '', '2025-01-07 23:02:00'); +INSERT INTO `sys_job_log` VALUES (3928, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 23:03:00'); +INSERT INTO `sys_job_log` VALUES (3929, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:45毫秒', '0', '', '2025-01-07 23:03:00'); +INSERT INTO `sys_job_log` VALUES (3930, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-07 23:04:00'); +INSERT INTO `sys_job_log` VALUES (3931, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:12毫秒', '0', '', '2025-01-07 23:04:00'); +INSERT INTO `sys_job_log` VALUES (3932, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-07 23:04:00'); +INSERT INTO `sys_job_log` VALUES (3933, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:814毫秒', '0', '', '2025-01-07 23:04:00'); +INSERT INTO `sys_job_log` VALUES (3934, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 23:05:00'); +INSERT INTO `sys_job_log` VALUES (3935, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-07 23:05:00'); +INSERT INTO `sys_job_log` VALUES (3936, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-07 23:06:00'); +INSERT INTO `sys_job_log` VALUES (3937, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-07 23:06:00'); +INSERT INTO `sys_job_log` VALUES (3938, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:51毫秒', '0', '', '2025-01-07 23:06:00'); +INSERT INTO `sys_job_log` VALUES (3939, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:1014毫秒', '0', '', '2025-01-07 23:06:01'); +INSERT INTO `sys_job_log` VALUES (3940, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 23:07:00'); +INSERT INTO `sys_job_log` VALUES (3941, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:170毫秒', '0', '', '2025-01-07 23:07:00'); +INSERT INTO `sys_job_log` VALUES (3942, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 23:08:00'); +INSERT INTO `sys_job_log` VALUES (3943, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:15毫秒', '0', '', '2025-01-07 23:08:00'); +INSERT INTO `sys_job_log` VALUES (3944, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:48毫秒', '0', '', '2025-01-07 23:08:00'); +INSERT INTO `sys_job_log` VALUES (3945, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:772毫秒', '0', '', '2025-01-07 23:08:00'); +INSERT INTO `sys_job_log` VALUES (3946, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 23:09:00'); +INSERT INTO `sys_job_log` VALUES (3947, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:46毫秒', '0', '', '2025-01-07 23:09:00'); +INSERT INTO `sys_job_log` VALUES (3948, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 23:10:00'); +INSERT INTO `sys_job_log` VALUES (3949, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:15毫秒', '0', '', '2025-01-07 23:10:00'); +INSERT INTO `sys_job_log` VALUES (3950, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:50毫秒', '0', '', '2025-01-07 23:10:00'); +INSERT INTO `sys_job_log` VALUES (3951, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:761毫秒', '0', '', '2025-01-07 23:10:00'); +INSERT INTO `sys_job_log` VALUES (3952, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 23:11:00'); +INSERT INTO `sys_job_log` VALUES (3953, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:49毫秒', '0', '', '2025-01-07 23:11:00'); +INSERT INTO `sys_job_log` VALUES (3954, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-07 23:12:00'); +INSERT INTO `sys_job_log` VALUES (3955, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:14毫秒', '0', '', '2025-01-07 23:12:00'); +INSERT INTO `sys_job_log` VALUES (3956, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:93毫秒', '0', '', '2025-01-07 23:12:00'); +INSERT INTO `sys_job_log` VALUES (3957, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:766毫秒', '0', '', '2025-01-07 23:12:00'); +INSERT INTO `sys_job_log` VALUES (3958, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 23:13:00'); +INSERT INTO `sys_job_log` VALUES (3959, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:46毫秒', '0', '', '2025-01-07 23:13:00'); +INSERT INTO `sys_job_log` VALUES (3960, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-07 23:14:00'); +INSERT INTO `sys_job_log` VALUES (3961, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-07 23:14:00'); +INSERT INTO `sys_job_log` VALUES (3962, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:45毫秒', '0', '', '2025-01-07 23:14:00'); +INSERT INTO `sys_job_log` VALUES (3963, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:762毫秒', '0', '', '2025-01-07 23:14:00'); +INSERT INTO `sys_job_log` VALUES (3964, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-07 23:15:00'); +INSERT INTO `sys_job_log` VALUES (3965, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:46毫秒', '0', '', '2025-01-07 23:15:00'); +INSERT INTO `sys_job_log` VALUES (3966, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-07 23:16:00'); +INSERT INTO `sys_job_log` VALUES (3967, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:14毫秒', '0', '', '2025-01-07 23:16:00'); +INSERT INTO `sys_job_log` VALUES (3968, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:91毫秒', '0', '', '2025-01-07 23:16:00'); +INSERT INTO `sys_job_log` VALUES (3969, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:725毫秒', '0', '', '2025-01-07 23:16:00'); +INSERT INTO `sys_job_log` VALUES (3970, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-07 23:17:00'); +INSERT INTO `sys_job_log` VALUES (3971, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:46毫秒', '0', '', '2025-01-07 23:17:00'); +INSERT INTO `sys_job_log` VALUES (3972, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 23:18:00'); +INSERT INTO `sys_job_log` VALUES (3973, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-07 23:18:00'); +INSERT INTO `sys_job_log` VALUES (3974, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:72毫秒', '0', '', '2025-01-07 23:18:00'); +INSERT INTO `sys_job_log` VALUES (3975, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:767毫秒', '0', '', '2025-01-07 23:18:00'); +INSERT INTO `sys_job_log` VALUES (3976, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 23:19:00'); +INSERT INTO `sys_job_log` VALUES (3977, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:48毫秒', '0', '', '2025-01-07 23:19:00'); +INSERT INTO `sys_job_log` VALUES (3978, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 23:20:00'); +INSERT INTO `sys_job_log` VALUES (3979, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-07 23:20:00'); +INSERT INTO `sys_job_log` VALUES (3980, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:94毫秒', '0', '', '2025-01-07 23:20:00'); +INSERT INTO `sys_job_log` VALUES (3981, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:722毫秒', '0', '', '2025-01-07 23:20:00'); +INSERT INTO `sys_job_log` VALUES (3982, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 23:21:00'); +INSERT INTO `sys_job_log` VALUES (3983, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:48毫秒', '0', '', '2025-01-07 23:21:00'); +INSERT INTO `sys_job_log` VALUES (3984, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 23:22:00'); +INSERT INTO `sys_job_log` VALUES (3985, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-07 23:22:00'); +INSERT INTO `sys_job_log` VALUES (3986, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:46毫秒', '0', '', '2025-01-07 23:22:00'); +INSERT INTO `sys_job_log` VALUES (3987, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:767毫秒', '0', '', '2025-01-07 23:22:00'); +INSERT INTO `sys_job_log` VALUES (3988, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 23:23:00'); +INSERT INTO `sys_job_log` VALUES (3989, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-07 23:23:00'); +INSERT INTO `sys_job_log` VALUES (3990, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 23:24:00'); +INSERT INTO `sys_job_log` VALUES (3991, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:15毫秒', '0', '', '2025-01-07 23:24:00'); +INSERT INTO `sys_job_log` VALUES (3992, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 23:25:00'); +INSERT INTO `sys_job_log` VALUES (3993, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-07 23:26:00'); +INSERT INTO `sys_job_log` VALUES (3994, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:12毫秒', '0', '', '2025-01-07 23:26:00'); +INSERT INTO `sys_job_log` VALUES (3995, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:118毫秒', '0', '', '2025-01-07 23:26:23'); +INSERT INTO `sys_job_log` VALUES (3996, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:815毫秒', '0', '', '2025-01-07 23:26:23'); +INSERT INTO `sys_job_log` VALUES (3997, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 23:27:00'); +INSERT INTO `sys_job_log` VALUES (3998, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:49毫秒', '0', '', '2025-01-07 23:27:00'); +INSERT INTO `sys_job_log` VALUES (3999, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 23:28:00'); +INSERT INTO `sys_job_log` VALUES (4000, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-07 23:28:00'); +INSERT INTO `sys_job_log` VALUES (4001, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-07 23:28:00'); +INSERT INTO `sys_job_log` VALUES (4002, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:782毫秒', '0', '', '2025-01-07 23:28:00'); +INSERT INTO `sys_job_log` VALUES (4003, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 23:29:00'); +INSERT INTO `sys_job_log` VALUES (4004, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:45毫秒', '0', '', '2025-01-07 23:29:00'); +INSERT INTO `sys_job_log` VALUES (4005, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 23:30:00'); +INSERT INTO `sys_job_log` VALUES (4006, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-07 23:30:00'); +INSERT INTO `sys_job_log` VALUES (4007, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:50毫秒', '0', '', '2025-01-07 23:30:00'); +INSERT INTO `sys_job_log` VALUES (4008, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:818毫秒', '0', '', '2025-01-07 23:30:00'); +INSERT INTO `sys_job_log` VALUES (4009, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-07 23:31:00'); +INSERT INTO `sys_job_log` VALUES (4010, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 23:32:00'); +INSERT INTO `sys_job_log` VALUES (4011, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-07 23:32:00'); +INSERT INTO `sys_job_log` VALUES (4012, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 23:33:00'); +INSERT INTO `sys_job_log` VALUES (4013, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 23:34:00'); +INSERT INTO `sys_job_log` VALUES (4014, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:14毫秒', '0', '', '2025-01-07 23:34:00'); +INSERT INTO `sys_job_log` VALUES (4015, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:113毫秒', '0', '', '2025-01-07 23:34:05'); +INSERT INTO `sys_job_log` VALUES (4016, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:824毫秒', '0', '', '2025-01-07 23:34:06'); +INSERT INTO `sys_job_log` VALUES (4017, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-07 23:35:00'); +INSERT INTO `sys_job_log` VALUES (4018, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-07 23:35:00'); +INSERT INTO `sys_job_log` VALUES (4019, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 23:36:00'); +INSERT INTO `sys_job_log` VALUES (4020, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-07 23:36:00'); +INSERT INTO `sys_job_log` VALUES (4021, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 23:37:00'); +INSERT INTO `sys_job_log` VALUES (4022, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:59毫秒', '0', '', '2025-01-07 23:37:00'); +INSERT INTO `sys_job_log` VALUES (4023, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 23:38:00'); +INSERT INTO `sys_job_log` VALUES (4024, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-07 23:38:00'); +INSERT INTO `sys_job_log` VALUES (4025, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:49毫秒', '0', '', '2025-01-07 23:38:00'); +INSERT INTO `sys_job_log` VALUES (4026, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:827毫秒', '0', '', '2025-01-07 23:38:00'); +INSERT INTO `sys_job_log` VALUES (4027, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-07 23:39:00'); +INSERT INTO `sys_job_log` VALUES (4028, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:52毫秒', '0', '', '2025-01-07 23:39:00'); +INSERT INTO `sys_job_log` VALUES (4029, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 23:40:00'); +INSERT INTO `sys_job_log` VALUES (4030, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-07 23:40:00'); +INSERT INTO `sys_job_log` VALUES (4031, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:49毫秒', '0', '', '2025-01-07 23:40:00'); +INSERT INTO `sys_job_log` VALUES (4032, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:726毫秒', '0', '', '2025-01-07 23:40:00'); +INSERT INTO `sys_job_log` VALUES (4033, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-07 23:41:00'); +INSERT INTO `sys_job_log` VALUES (4034, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:48毫秒', '0', '', '2025-01-07 23:41:00'); +INSERT INTO `sys_job_log` VALUES (4035, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 23:42:00'); +INSERT INTO `sys_job_log` VALUES (4036, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:14毫秒', '0', '', '2025-01-07 23:42:00'); +INSERT INTO `sys_job_log` VALUES (4037, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:50毫秒', '0', '', '2025-01-07 23:42:00'); +INSERT INTO `sys_job_log` VALUES (4038, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:776毫秒', '0', '', '2025-01-07 23:42:00'); +INSERT INTO `sys_job_log` VALUES (4039, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 23:43:00'); +INSERT INTO `sys_job_log` VALUES (4040, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:50毫秒', '0', '', '2025-01-07 23:43:00'); +INSERT INTO `sys_job_log` VALUES (4041, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 23:44:00'); +INSERT INTO `sys_job_log` VALUES (4042, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:14毫秒', '0', '', '2025-01-07 23:44:00'); +INSERT INTO `sys_job_log` VALUES (4043, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-07 23:44:00'); +INSERT INTO `sys_job_log` VALUES (4044, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:767毫秒', '0', '', '2025-01-07 23:44:00'); +INSERT INTO `sys_job_log` VALUES (4045, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 23:45:00'); +INSERT INTO `sys_job_log` VALUES (4046, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:46毫秒', '0', '', '2025-01-07 23:45:00'); +INSERT INTO `sys_job_log` VALUES (4047, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-07 23:46:00'); +INSERT INTO `sys_job_log` VALUES (4048, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-07 23:46:00'); +INSERT INTO `sys_job_log` VALUES (4049, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:49毫秒', '0', '', '2025-01-07 23:46:00'); +INSERT INTO `sys_job_log` VALUES (4050, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:721毫秒', '0', '', '2025-01-07 23:46:00'); +INSERT INTO `sys_job_log` VALUES (4051, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-07 23:47:00'); +INSERT INTO `sys_job_log` VALUES (4052, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:46毫秒', '0', '', '2025-01-07 23:47:00'); +INSERT INTO `sys_job_log` VALUES (4053, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 23:48:00'); +INSERT INTO `sys_job_log` VALUES (4054, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:12毫秒', '0', '', '2025-01-07 23:48:00'); +INSERT INTO `sys_job_log` VALUES (4055, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:94毫秒', '0', '', '2025-01-07 23:48:00'); +INSERT INTO `sys_job_log` VALUES (4056, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:726毫秒', '0', '', '2025-01-07 23:48:00'); +INSERT INTO `sys_job_log` VALUES (4057, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 23:49:00'); +INSERT INTO `sys_job_log` VALUES (4058, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-07 23:49:00'); +INSERT INTO `sys_job_log` VALUES (4059, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-07 23:50:00'); +INSERT INTO `sys_job_log` VALUES (4060, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-07 23:50:00'); +INSERT INTO `sys_job_log` VALUES (4061, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:42毫秒', '0', '', '2025-01-07 23:50:00'); +INSERT INTO `sys_job_log` VALUES (4062, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:765毫秒', '0', '', '2025-01-07 23:50:00'); +INSERT INTO `sys_job_log` VALUES (4063, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-07 23:51:00'); +INSERT INTO `sys_job_log` VALUES (4064, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:45毫秒', '0', '', '2025-01-07 23:51:00'); +INSERT INTO `sys_job_log` VALUES (4065, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-07 23:52:00'); +INSERT INTO `sys_job_log` VALUES (4066, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-07 23:52:00'); +INSERT INTO `sys_job_log` VALUES (4067, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:50毫秒', '0', '', '2025-01-07 23:52:00'); +INSERT INTO `sys_job_log` VALUES (4068, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:722毫秒', '0', '', '2025-01-07 23:52:00'); +INSERT INTO `sys_job_log` VALUES (4069, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-07 23:53:00'); +INSERT INTO `sys_job_log` VALUES (4070, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:48毫秒', '0', '', '2025-01-07 23:53:00'); +INSERT INTO `sys_job_log` VALUES (4071, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 23:54:00'); +INSERT INTO `sys_job_log` VALUES (4072, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-07 23:54:00'); +INSERT INTO `sys_job_log` VALUES (4073, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-07 23:54:00'); +INSERT INTO `sys_job_log` VALUES (4074, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:766毫秒', '0', '', '2025-01-07 23:54:00'); +INSERT INTO `sys_job_log` VALUES (4075, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 23:55:00'); +INSERT INTO `sys_job_log` VALUES (4076, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:49毫秒', '0', '', '2025-01-07 23:55:00'); +INSERT INTO `sys_job_log` VALUES (4077, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 23:56:00'); +INSERT INTO `sys_job_log` VALUES (4078, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:12毫秒', '0', '', '2025-01-07 23:56:00'); +INSERT INTO `sys_job_log` VALUES (4079, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-07 23:56:00'); +INSERT INTO `sys_job_log` VALUES (4080, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:750毫秒', '0', '', '2025-01-07 23:56:00'); +INSERT INTO `sys_job_log` VALUES (4081, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 23:57:00'); +INSERT INTO `sys_job_log` VALUES (4082, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:49毫秒', '0', '', '2025-01-07 23:57:00'); +INSERT INTO `sys_job_log` VALUES (4083, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 23:58:00'); +INSERT INTO `sys_job_log` VALUES (4084, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-07 23:58:00'); +INSERT INTO `sys_job_log` VALUES (4085, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:46毫秒', '0', '', '2025-01-07 23:58:00'); +INSERT INTO `sys_job_log` VALUES (4086, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:718毫秒', '0', '', '2025-01-07 23:58:00'); +INSERT INTO `sys_job_log` VALUES (4087, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-07 23:59:00'); +INSERT INTO `sys_job_log` VALUES (4088, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:34毫秒', '0', '', '2025-01-07 23:59:00'); +INSERT INTO `sys_job_log` VALUES (4089, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:8毫秒', '0', '', '2025-01-08 00:00:00'); +INSERT INTO `sys_job_log` VALUES (4090, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:30毫秒', '0', '', '2025-01-08 00:00:00'); +INSERT INTO `sys_job_log` VALUES (4091, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:52毫秒', '0', '', '2025-01-08 00:00:00'); +INSERT INTO `sys_job_log` VALUES (4092, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:750毫秒', '0', '', '2025-01-08 00:00:00'); +INSERT INTO `sys_job_log` VALUES (4093, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 00:01:00'); +INSERT INTO `sys_job_log` VALUES (4094, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:49毫秒', '0', '', '2025-01-08 00:01:00'); +INSERT INTO `sys_job_log` VALUES (4095, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 00:02:00'); +INSERT INTO `sys_job_log` VALUES (4096, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-08 00:02:00'); +INSERT INTO `sys_job_log` VALUES (4097, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:77毫秒', '0', '', '2025-01-08 00:02:00'); +INSERT INTO `sys_job_log` VALUES (4098, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:704毫秒', '0', '', '2025-01-08 00:02:00'); +INSERT INTO `sys_job_log` VALUES (4099, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 00:03:00'); +INSERT INTO `sys_job_log` VALUES (4100, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:48毫秒', '0', '', '2025-01-08 00:03:00'); +INSERT INTO `sys_job_log` VALUES (4101, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 00:04:00'); +INSERT INTO `sys_job_log` VALUES (4102, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:16毫秒', '0', '', '2025-01-08 00:04:00'); +INSERT INTO `sys_job_log` VALUES (4103, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:48毫秒', '0', '', '2025-01-08 00:04:00'); +INSERT INTO `sys_job_log` VALUES (4104, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:766毫秒', '0', '', '2025-01-08 00:04:00'); +INSERT INTO `sys_job_log` VALUES (4105, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 00:05:00'); +INSERT INTO `sys_job_log` VALUES (4106, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 00:05:00'); +INSERT INTO `sys_job_log` VALUES (4107, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 00:06:00'); +INSERT INTO `sys_job_log` VALUES (4108, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-08 00:06:00'); +INSERT INTO `sys_job_log` VALUES (4109, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 00:06:00'); +INSERT INTO `sys_job_log` VALUES (4110, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:719毫秒', '0', '', '2025-01-08 00:06:00'); +INSERT INTO `sys_job_log` VALUES (4111, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 00:07:00'); +INSERT INTO `sys_job_log` VALUES (4112, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:46毫秒', '0', '', '2025-01-08 00:07:00'); +INSERT INTO `sys_job_log` VALUES (4113, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 00:08:00'); +INSERT INTO `sys_job_log` VALUES (4114, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-08 00:08:00'); +INSERT INTO `sys_job_log` VALUES (4115, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 00:08:00'); +INSERT INTO `sys_job_log` VALUES (4116, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:766毫秒', '0', '', '2025-01-08 00:08:00'); +INSERT INTO `sys_job_log` VALUES (4117, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 00:09:00'); +INSERT INTO `sys_job_log` VALUES (4118, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:119毫秒', '0', '', '2025-01-08 00:09:00'); +INSERT INTO `sys_job_log` VALUES (4119, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:9毫秒', '0', '', '2025-01-08 00:10:00'); +INSERT INTO `sys_job_log` VALUES (4120, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:14毫秒', '0', '', '2025-01-08 00:10:00'); +INSERT INTO `sys_job_log` VALUES (4121, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:44毫秒', '0', '', '2025-01-08 00:10:00'); +INSERT INTO `sys_job_log` VALUES (4122, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:766毫秒', '0', '', '2025-01-08 00:10:00'); +INSERT INTO `sys_job_log` VALUES (4123, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 00:11:00'); +INSERT INTO `sys_job_log` VALUES (4124, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:191毫秒', '0', '', '2025-01-08 00:11:00'); +INSERT INTO `sys_job_log` VALUES (4125, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:9毫秒', '0', '', '2025-01-08 00:12:00'); +INSERT INTO `sys_job_log` VALUES (4126, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:14毫秒', '0', '', '2025-01-08 00:12:00'); +INSERT INTO `sys_job_log` VALUES (4127, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:48毫秒', '0', '', '2025-01-08 00:12:00'); +INSERT INTO `sys_job_log` VALUES (4128, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:761毫秒', '0', '', '2025-01-08 00:12:00'); +INSERT INTO `sys_job_log` VALUES (4129, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 00:13:00'); +INSERT INTO `sys_job_log` VALUES (4130, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:190毫秒', '0', '', '2025-01-08 00:13:00'); +INSERT INTO `sys_job_log` VALUES (4131, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:7毫秒', '0', '', '2025-01-08 00:14:00'); +INSERT INTO `sys_job_log` VALUES (4132, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:14毫秒', '0', '', '2025-01-08 00:14:00'); +INSERT INTO `sys_job_log` VALUES (4133, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:49毫秒', '0', '', '2025-01-08 00:14:00'); +INSERT INTO `sys_job_log` VALUES (4134, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:766毫秒', '0', '', '2025-01-08 00:14:00'); +INSERT INTO `sys_job_log` VALUES (4135, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 00:15:00'); +INSERT INTO `sys_job_log` VALUES (4136, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:189毫秒', '0', '', '2025-01-08 00:15:00'); +INSERT INTO `sys_job_log` VALUES (4137, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:7毫秒', '0', '', '2025-01-08 00:16:00'); +INSERT INTO `sys_job_log` VALUES (4138, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-08 00:16:00'); +INSERT INTO `sys_job_log` VALUES (4139, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:49毫秒', '0', '', '2025-01-08 00:16:00'); +INSERT INTO `sys_job_log` VALUES (4140, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:772毫秒', '0', '', '2025-01-08 00:16:00'); +INSERT INTO `sys_job_log` VALUES (4141, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 00:17:00'); +INSERT INTO `sys_job_log` VALUES (4142, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:46毫秒', '0', '', '2025-01-08 00:17:00'); +INSERT INTO `sys_job_log` VALUES (4143, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 00:18:00'); +INSERT INTO `sys_job_log` VALUES (4144, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-08 00:18:00'); +INSERT INTO `sys_job_log` VALUES (4145, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:30毫秒', '0', '', '2025-01-08 00:18:00'); +INSERT INTO `sys_job_log` VALUES (4146, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:717毫秒', '0', '', '2025-01-08 00:18:00'); +INSERT INTO `sys_job_log` VALUES (4147, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 00:19:00'); +INSERT INTO `sys_job_log` VALUES (4148, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:48毫秒', '0', '', '2025-01-08 00:19:00'); +INSERT INTO `sys_job_log` VALUES (4149, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 00:20:00'); +INSERT INTO `sys_job_log` VALUES (4150, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:14毫秒', '0', '', '2025-01-08 00:20:00'); +INSERT INTO `sys_job_log` VALUES (4151, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 00:20:00'); +INSERT INTO `sys_job_log` VALUES (4152, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:763毫秒', '0', '', '2025-01-08 00:20:00'); +INSERT INTO `sys_job_log` VALUES (4153, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 00:21:00'); +INSERT INTO `sys_job_log` VALUES (4154, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 00:21:00'); +INSERT INTO `sys_job_log` VALUES (4155, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 00:22:00'); +INSERT INTO `sys_job_log` VALUES (4156, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-08 00:22:00'); +INSERT INTO `sys_job_log` VALUES (4157, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:95毫秒', '0', '', '2025-01-08 00:22:00'); +INSERT INTO `sys_job_log` VALUES (4158, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:719毫秒', '0', '', '2025-01-08 00:22:00'); +INSERT INTO `sys_job_log` VALUES (4159, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 00:23:00'); +INSERT INTO `sys_job_log` VALUES (4160, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 00:23:00'); +INSERT INTO `sys_job_log` VALUES (4161, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 00:24:00'); +INSERT INTO `sys_job_log` VALUES (4162, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:12毫秒', '0', '', '2025-01-08 00:24:00'); +INSERT INTO `sys_job_log` VALUES (4163, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:79毫秒', '0', '', '2025-01-08 00:24:00'); +INSERT INTO `sys_job_log` VALUES (4164, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:720毫秒', '0', '', '2025-01-08 00:24:00'); +INSERT INTO `sys_job_log` VALUES (4165, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 00:25:00'); +INSERT INTO `sys_job_log` VALUES (4166, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 00:25:00'); +INSERT INTO `sys_job_log` VALUES (4167, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 00:26:00'); +INSERT INTO `sys_job_log` VALUES (4168, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:12毫秒', '0', '', '2025-01-08 00:26:00'); +INSERT INTO `sys_job_log` VALUES (4169, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:77毫秒', '0', '', '2025-01-08 00:26:00'); +INSERT INTO `sys_job_log` VALUES (4170, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:718毫秒', '0', '', '2025-01-08 00:26:00'); +INSERT INTO `sys_job_log` VALUES (4171, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 00:27:00'); +INSERT INTO `sys_job_log` VALUES (4172, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:35毫秒', '0', '', '2025-01-08 00:27:00'); +INSERT INTO `sys_job_log` VALUES (4173, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 00:28:00'); +INSERT INTO `sys_job_log` VALUES (4174, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:12毫秒', '0', '', '2025-01-08 00:28:00'); +INSERT INTO `sys_job_log` VALUES (4175, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 00:28:00'); +INSERT INTO `sys_job_log` VALUES (4176, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:750毫秒', '0', '', '2025-01-08 00:28:00'); +INSERT INTO `sys_job_log` VALUES (4177, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 00:29:00'); +INSERT INTO `sys_job_log` VALUES (4178, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:49毫秒', '0', '', '2025-01-08 00:29:00'); +INSERT INTO `sys_job_log` VALUES (4179, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 00:30:00'); +INSERT INTO `sys_job_log` VALUES (4180, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:12毫秒', '0', '', '2025-01-08 00:30:00'); +INSERT INTO `sys_job_log` VALUES (4181, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:95毫秒', '0', '', '2025-01-08 00:30:00'); +INSERT INTO `sys_job_log` VALUES (4182, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:718毫秒', '0', '', '2025-01-08 00:30:00'); +INSERT INTO `sys_job_log` VALUES (4183, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 00:31:00'); +INSERT INTO `sys_job_log` VALUES (4184, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:31毫秒', '0', '', '2025-01-08 00:31:00'); +INSERT INTO `sys_job_log` VALUES (4185, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 00:32:00'); +INSERT INTO `sys_job_log` VALUES (4186, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:12毫秒', '0', '', '2025-01-08 00:32:00'); +INSERT INTO `sys_job_log` VALUES (4187, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:93毫秒', '0', '', '2025-01-08 00:32:00'); +INSERT INTO `sys_job_log` VALUES (4188, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:718毫秒', '0', '', '2025-01-08 00:32:00'); +INSERT INTO `sys_job_log` VALUES (4189, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 00:33:00'); +INSERT INTO `sys_job_log` VALUES (4190, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:31毫秒', '0', '', '2025-01-08 00:33:00'); +INSERT INTO `sys_job_log` VALUES (4191, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 00:34:00'); +INSERT INTO `sys_job_log` VALUES (4192, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:12毫秒', '0', '', '2025-01-08 00:34:00'); +INSERT INTO `sys_job_log` VALUES (4193, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:48毫秒', '0', '', '2025-01-08 00:34:00'); +INSERT INTO `sys_job_log` VALUES (4194, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:765毫秒', '0', '', '2025-01-08 00:34:00'); +INSERT INTO `sys_job_log` VALUES (4195, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 00:35:00'); +INSERT INTO `sys_job_log` VALUES (4196, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 00:35:00'); +INSERT INTO `sys_job_log` VALUES (4197, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 00:36:00'); +INSERT INTO `sys_job_log` VALUES (4198, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-08 00:36:00'); +INSERT INTO `sys_job_log` VALUES (4199, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:94毫秒', '0', '', '2025-01-08 00:36:00'); +INSERT INTO `sys_job_log` VALUES (4200, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:720毫秒', '0', '', '2025-01-08 00:36:00'); +INSERT INTO `sys_job_log` VALUES (4201, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 00:37:00'); +INSERT INTO `sys_job_log` VALUES (4202, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 00:37:00'); +INSERT INTO `sys_job_log` VALUES (4203, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 00:38:00'); +INSERT INTO `sys_job_log` VALUES (4204, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-08 00:38:00'); +INSERT INTO `sys_job_log` VALUES (4205, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 00:38:00'); +INSERT INTO `sys_job_log` VALUES (4206, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:751毫秒', '0', '', '2025-01-08 00:38:00'); +INSERT INTO `sys_job_log` VALUES (4207, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 00:39:00'); +INSERT INTO `sys_job_log` VALUES (4208, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:31毫秒', '0', '', '2025-01-08 00:39:00'); +INSERT INTO `sys_job_log` VALUES (4209, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 00:40:00'); +INSERT INTO `sys_job_log` VALUES (4210, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-08 00:40:00'); +INSERT INTO `sys_job_log` VALUES (4211, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 00:40:00'); +INSERT INTO `sys_job_log` VALUES (4212, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:751毫秒', '0', '', '2025-01-08 00:40:00'); +INSERT INTO `sys_job_log` VALUES (4213, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 00:41:00'); +INSERT INTO `sys_job_log` VALUES (4214, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:46毫秒', '0', '', '2025-01-08 00:41:00'); +INSERT INTO `sys_job_log` VALUES (4215, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 00:42:00'); +INSERT INTO `sys_job_log` VALUES (4216, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:12毫秒', '0', '', '2025-01-08 00:42:00'); +INSERT INTO `sys_job_log` VALUES (4217, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 00:42:00'); +INSERT INTO `sys_job_log` VALUES (4218, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:750毫秒', '0', '', '2025-01-08 00:42:00'); +INSERT INTO `sys_job_log` VALUES (4219, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 00:43:00'); +INSERT INTO `sys_job_log` VALUES (4220, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:49毫秒', '0', '', '2025-01-08 00:43:00'); +INSERT INTO `sys_job_log` VALUES (4221, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 00:44:00'); +INSERT INTO `sys_job_log` VALUES (4222, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:12毫秒', '0', '', '2025-01-08 00:44:00'); +INSERT INTO `sys_job_log` VALUES (4223, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 00:44:00'); +INSERT INTO `sys_job_log` VALUES (4224, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:766毫秒', '0', '', '2025-01-08 00:44:00'); +INSERT INTO `sys_job_log` VALUES (4225, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 00:45:00'); +INSERT INTO `sys_job_log` VALUES (4226, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:51毫秒', '0', '', '2025-01-08 00:45:00'); +INSERT INTO `sys_job_log` VALUES (4227, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 00:46:00'); +INSERT INTO `sys_job_log` VALUES (4228, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:12毫秒', '0', '', '2025-01-08 00:46:00'); +INSERT INTO `sys_job_log` VALUES (4229, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 00:46:00'); +INSERT INTO `sys_job_log` VALUES (4230, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:751毫秒', '0', '', '2025-01-08 00:46:00'); +INSERT INTO `sys_job_log` VALUES (4231, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 00:47:00'); +INSERT INTO `sys_job_log` VALUES (4232, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:46毫秒', '0', '', '2025-01-08 00:47:00'); +INSERT INTO `sys_job_log` VALUES (4233, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 00:48:00'); +INSERT INTO `sys_job_log` VALUES (4234, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-08 00:48:00'); +INSERT INTO `sys_job_log` VALUES (4235, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:30毫秒', '0', '', '2025-01-08 00:48:00'); +INSERT INTO `sys_job_log` VALUES (4236, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:767毫秒', '0', '', '2025-01-08 00:48:00'); +INSERT INTO `sys_job_log` VALUES (4237, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 00:49:00'); +INSERT INTO `sys_job_log` VALUES (4238, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:34毫秒', '0', '', '2025-01-08 00:49:00'); +INSERT INTO `sys_job_log` VALUES (4239, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 00:50:00'); +INSERT INTO `sys_job_log` VALUES (4240, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:14毫秒', '0', '', '2025-01-08 00:50:00'); +INSERT INTO `sys_job_log` VALUES (4241, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:49毫秒', '0', '', '2025-01-08 00:50:00'); +INSERT INTO `sys_job_log` VALUES (4242, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:751毫秒', '0', '', '2025-01-08 00:50:00'); +INSERT INTO `sys_job_log` VALUES (4243, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 00:51:00'); +INSERT INTO `sys_job_log` VALUES (4244, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 00:51:00'); +INSERT INTO `sys_job_log` VALUES (4245, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 00:52:00'); +INSERT INTO `sys_job_log` VALUES (4246, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-08 00:52:00'); +INSERT INTO `sys_job_log` VALUES (4247, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:48毫秒', '0', '', '2025-01-08 00:52:00'); +INSERT INTO `sys_job_log` VALUES (4248, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:751毫秒', '0', '', '2025-01-08 00:52:00'); +INSERT INTO `sys_job_log` VALUES (4249, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 00:53:00'); +INSERT INTO `sys_job_log` VALUES (4250, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 00:53:00'); +INSERT INTO `sys_job_log` VALUES (4251, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 00:54:00'); +INSERT INTO `sys_job_log` VALUES (4252, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-08 00:54:00'); +INSERT INTO `sys_job_log` VALUES (4253, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:46毫秒', '0', '', '2025-01-08 00:54:00'); +INSERT INTO `sys_job_log` VALUES (4254, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:750毫秒', '0', '', '2025-01-08 00:54:00'); +INSERT INTO `sys_job_log` VALUES (4255, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 00:55:00'); +INSERT INTO `sys_job_log` VALUES (4256, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:32毫秒', '0', '', '2025-01-08 00:55:00'); +INSERT INTO `sys_job_log` VALUES (4257, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 00:56:00'); +INSERT INTO `sys_job_log` VALUES (4258, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-08 00:56:00'); +INSERT INTO `sys_job_log` VALUES (4259, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:85毫秒', '0', '', '2025-01-08 00:56:00'); +INSERT INTO `sys_job_log` VALUES (4260, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:710毫秒', '0', '', '2025-01-08 00:56:00'); +INSERT INTO `sys_job_log` VALUES (4261, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 00:57:00'); +INSERT INTO `sys_job_log` VALUES (4262, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 00:57:00'); +INSERT INTO `sys_job_log` VALUES (4263, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 00:58:00'); +INSERT INTO `sys_job_log` VALUES (4264, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-08 00:58:00'); +INSERT INTO `sys_job_log` VALUES (4265, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 00:58:00'); +INSERT INTO `sys_job_log` VALUES (4266, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:766毫秒', '0', '', '2025-01-08 00:58:00'); +INSERT INTO `sys_job_log` VALUES (4267, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 00:59:00'); +INSERT INTO `sys_job_log` VALUES (4268, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 00:59:00'); +INSERT INTO `sys_job_log` VALUES (4269, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 01:00:00'); +INSERT INTO `sys_job_log` VALUES (4270, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:12毫秒', '0', '', '2025-01-08 01:00:00'); +INSERT INTO `sys_job_log` VALUES (4271, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:50毫秒', '0', '', '2025-01-08 01:00:00'); +INSERT INTO `sys_job_log` VALUES (4272, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:749毫秒', '0', '', '2025-01-08 01:00:00'); +INSERT INTO `sys_job_log` VALUES (4273, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 01:01:00'); +INSERT INTO `sys_job_log` VALUES (4274, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:32毫秒', '0', '', '2025-01-08 01:01:00'); +INSERT INTO `sys_job_log` VALUES (4275, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 01:02:00'); +INSERT INTO `sys_job_log` VALUES (4276, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-08 01:02:00'); +INSERT INTO `sys_job_log` VALUES (4277, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:32毫秒', '0', '', '2025-01-08 01:02:00'); +INSERT INTO `sys_job_log` VALUES (4278, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:766毫秒', '0', '', '2025-01-08 01:02:00'); +INSERT INTO `sys_job_log` VALUES (4279, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 01:03:00'); +INSERT INTO `sys_job_log` VALUES (4280, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:48毫秒', '0', '', '2025-01-08 01:03:00'); +INSERT INTO `sys_job_log` VALUES (4281, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 01:04:00'); +INSERT INTO `sys_job_log` VALUES (4282, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-08 01:04:00'); +INSERT INTO `sys_job_log` VALUES (4283, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:79毫秒', '0', '', '2025-01-08 01:04:00'); +INSERT INTO `sys_job_log` VALUES (4284, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:722毫秒', '0', '', '2025-01-08 01:04:00'); +INSERT INTO `sys_job_log` VALUES (4285, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 01:05:00'); +INSERT INTO `sys_job_log` VALUES (4286, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:32毫秒', '0', '', '2025-01-08 01:05:00'); +INSERT INTO `sys_job_log` VALUES (4287, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 01:06:00'); +INSERT INTO `sys_job_log` VALUES (4288, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-08 01:06:00'); +INSERT INTO `sys_job_log` VALUES (4289, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:78毫秒', '0', '', '2025-01-08 01:06:00'); +INSERT INTO `sys_job_log` VALUES (4290, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:720毫秒', '0', '', '2025-01-08 01:06:00'); +INSERT INTO `sys_job_log` VALUES (4291, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 01:07:00'); +INSERT INTO `sys_job_log` VALUES (4292, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 01:07:00'); +INSERT INTO `sys_job_log` VALUES (4293, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 01:08:00'); +INSERT INTO `sys_job_log` VALUES (4294, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-08 01:08:00'); +INSERT INTO `sys_job_log` VALUES (4295, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:88毫秒', '0', '', '2025-01-08 01:08:00'); +INSERT INTO `sys_job_log` VALUES (4296, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:718毫秒', '0', '', '2025-01-08 01:08:00'); +INSERT INTO `sys_job_log` VALUES (4297, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 01:09:00'); +INSERT INTO `sys_job_log` VALUES (4298, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 01:09:00'); +INSERT INTO `sys_job_log` VALUES (4299, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 01:10:00'); +INSERT INTO `sys_job_log` VALUES (4300, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-08 01:10:00'); +INSERT INTO `sys_job_log` VALUES (4301, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:79毫秒', '0', '', '2025-01-08 01:10:00'); +INSERT INTO `sys_job_log` VALUES (4302, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:720毫秒', '0', '', '2025-01-08 01:10:00'); +INSERT INTO `sys_job_log` VALUES (4303, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 01:11:00'); +INSERT INTO `sys_job_log` VALUES (4304, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:42毫秒', '0', '', '2025-01-08 01:11:00'); +INSERT INTO `sys_job_log` VALUES (4305, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 01:12:00'); +INSERT INTO `sys_job_log` VALUES (4306, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:12毫秒', '0', '', '2025-01-08 01:12:00'); +INSERT INTO `sys_job_log` VALUES (4307, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 01:12:00'); +INSERT INTO `sys_job_log` VALUES (4308, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:766毫秒', '0', '', '2025-01-08 01:12:00'); +INSERT INTO `sys_job_log` VALUES (4309, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 01:13:00'); +INSERT INTO `sys_job_log` VALUES (4310, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:32毫秒', '0', '', '2025-01-08 01:13:00'); +INSERT INTO `sys_job_log` VALUES (4311, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 01:14:00'); +INSERT INTO `sys_job_log` VALUES (4312, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-08 01:14:00'); +INSERT INTO `sys_job_log` VALUES (4313, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:32毫秒', '0', '', '2025-01-08 01:14:00'); +INSERT INTO `sys_job_log` VALUES (4314, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:766毫秒', '0', '', '2025-01-08 01:14:00'); +INSERT INTO `sys_job_log` VALUES (4315, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 01:15:00'); +INSERT INTO `sys_job_log` VALUES (4316, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:46毫秒', '0', '', '2025-01-08 01:15:00'); +INSERT INTO `sys_job_log` VALUES (4317, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 01:16:00'); +INSERT INTO `sys_job_log` VALUES (4318, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:14毫秒', '0', '', '2025-01-08 01:16:00'); +INSERT INTO `sys_job_log` VALUES (4319, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 01:16:00'); +INSERT INTO `sys_job_log` VALUES (4320, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:765毫秒', '0', '', '2025-01-08 01:16:00'); +INSERT INTO `sys_job_log` VALUES (4321, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 01:17:00'); +INSERT INTO `sys_job_log` VALUES (4322, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 01:17:00'); +INSERT INTO `sys_job_log` VALUES (4323, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 01:18:00'); +INSERT INTO `sys_job_log` VALUES (4324, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:12毫秒', '0', '', '2025-01-08 01:18:00'); +INSERT INTO `sys_job_log` VALUES (4325, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:46毫秒', '0', '', '2025-01-08 01:18:00'); +INSERT INTO `sys_job_log` VALUES (4326, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:750毫秒', '0', '', '2025-01-08 01:18:00'); +INSERT INTO `sys_job_log` VALUES (4327, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 01:19:00'); +INSERT INTO `sys_job_log` VALUES (4328, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:45毫秒', '0', '', '2025-01-08 01:19:00'); +INSERT INTO `sys_job_log` VALUES (4329, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 01:20:00'); +INSERT INTO `sys_job_log` VALUES (4330, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-08 01:20:00'); +INSERT INTO `sys_job_log` VALUES (4331, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 01:20:00'); +INSERT INTO `sys_job_log` VALUES (4332, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:765毫秒', '0', '', '2025-01-08 01:20:00'); +INSERT INTO `sys_job_log` VALUES (4333, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 01:21:00'); +INSERT INTO `sys_job_log` VALUES (4334, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:48毫秒', '0', '', '2025-01-08 01:21:00'); +INSERT INTO `sys_job_log` VALUES (4335, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 01:22:00'); +INSERT INTO `sys_job_log` VALUES (4336, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:12毫秒', '0', '', '2025-01-08 01:22:00'); +INSERT INTO `sys_job_log` VALUES (4337, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:46毫秒', '0', '', '2025-01-08 01:22:00'); +INSERT INTO `sys_job_log` VALUES (4338, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:764毫秒', '0', '', '2025-01-08 01:22:00'); +INSERT INTO `sys_job_log` VALUES (4339, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 01:23:00'); +INSERT INTO `sys_job_log` VALUES (4340, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:31毫秒', '0', '', '2025-01-08 01:23:00'); +INSERT INTO `sys_job_log` VALUES (4341, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 01:24:00'); +INSERT INTO `sys_job_log` VALUES (4342, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:12毫秒', '0', '', '2025-01-08 01:24:00'); +INSERT INTO `sys_job_log` VALUES (4343, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 01:24:00'); +INSERT INTO `sys_job_log` VALUES (4344, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:766毫秒', '0', '', '2025-01-08 01:24:00'); +INSERT INTO `sys_job_log` VALUES (4345, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 01:25:00'); +INSERT INTO `sys_job_log` VALUES (4346, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:31毫秒', '0', '', '2025-01-08 01:25:00'); +INSERT INTO `sys_job_log` VALUES (4347, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 01:26:00'); +INSERT INTO `sys_job_log` VALUES (4348, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:12毫秒', '0', '', '2025-01-08 01:26:00'); +INSERT INTO `sys_job_log` VALUES (4349, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 01:26:00'); +INSERT INTO `sys_job_log` VALUES (4350, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:751毫秒', '0', '', '2025-01-08 01:26:00'); +INSERT INTO `sys_job_log` VALUES (4351, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 01:27:00'); +INSERT INTO `sys_job_log` VALUES (4352, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:32毫秒', '0', '', '2025-01-08 01:27:00'); +INSERT INTO `sys_job_log` VALUES (4353, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 01:28:00'); +INSERT INTO `sys_job_log` VALUES (4354, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-08 01:28:00'); +INSERT INTO `sys_job_log` VALUES (4355, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:88毫秒', '0', '', '2025-01-08 01:28:00'); +INSERT INTO `sys_job_log` VALUES (4356, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:719毫秒', '0', '', '2025-01-08 01:28:00'); +INSERT INTO `sys_job_log` VALUES (4357, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 01:29:00'); +INSERT INTO `sys_job_log` VALUES (4358, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 01:29:00'); +INSERT INTO `sys_job_log` VALUES (4359, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 01:30:00'); +INSERT INTO `sys_job_log` VALUES (4360, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-08 01:30:00'); +INSERT INTO `sys_job_log` VALUES (4361, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 01:30:00'); +INSERT INTO `sys_job_log` VALUES (4362, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:750毫秒', '0', '', '2025-01-08 01:30:00'); +INSERT INTO `sys_job_log` VALUES (4363, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 01:31:00'); +INSERT INTO `sys_job_log` VALUES (4364, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 01:31:00'); +INSERT INTO `sys_job_log` VALUES (4365, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 01:32:00'); +INSERT INTO `sys_job_log` VALUES (4366, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-08 01:32:00'); +INSERT INTO `sys_job_log` VALUES (4367, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 01:32:00'); +INSERT INTO `sys_job_log` VALUES (4368, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:750毫秒', '0', '', '2025-01-08 01:32:00'); +INSERT INTO `sys_job_log` VALUES (4369, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 01:33:00'); +INSERT INTO `sys_job_log` VALUES (4370, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 01:33:00'); +INSERT INTO `sys_job_log` VALUES (4371, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 01:34:00'); +INSERT INTO `sys_job_log` VALUES (4372, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-08 01:34:00'); +INSERT INTO `sys_job_log` VALUES (4373, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:93毫秒', '0', '', '2025-01-08 01:34:00'); +INSERT INTO `sys_job_log` VALUES (4374, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:718毫秒', '0', '', '2025-01-08 01:34:00'); +INSERT INTO `sys_job_log` VALUES (4375, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 01:35:00'); +INSERT INTO `sys_job_log` VALUES (4376, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:46毫秒', '0', '', '2025-01-08 01:35:00'); +INSERT INTO `sys_job_log` VALUES (4377, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 01:36:00'); +INSERT INTO `sys_job_log` VALUES (4378, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:12毫秒', '0', '', '2025-01-08 01:36:00'); +INSERT INTO `sys_job_log` VALUES (4379, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:78毫秒', '0', '', '2025-01-08 01:36:00'); +INSERT INTO `sys_job_log` VALUES (4380, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:718毫秒', '0', '', '2025-01-08 01:36:00'); +INSERT INTO `sys_job_log` VALUES (4381, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 01:37:00'); +INSERT INTO `sys_job_log` VALUES (4382, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 01:37:00'); +INSERT INTO `sys_job_log` VALUES (4383, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 01:38:00'); +INSERT INTO `sys_job_log` VALUES (4384, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-08 01:38:00'); +INSERT INTO `sys_job_log` VALUES (4385, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:95毫秒', '0', '', '2025-01-08 01:38:00'); +INSERT INTO `sys_job_log` VALUES (4386, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:702毫秒', '0', '', '2025-01-08 01:38:00'); +INSERT INTO `sys_job_log` VALUES (4387, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 01:39:00'); +INSERT INTO `sys_job_log` VALUES (4388, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:31毫秒', '0', '', '2025-01-08 01:39:00'); +INSERT INTO `sys_job_log` VALUES (4389, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 01:40:00'); +INSERT INTO `sys_job_log` VALUES (4390, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-08 01:40:00'); +INSERT INTO `sys_job_log` VALUES (4391, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:96毫秒', '0', '', '2025-01-08 01:40:00'); +INSERT INTO `sys_job_log` VALUES (4392, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:703毫秒', '0', '', '2025-01-08 01:40:00'); +INSERT INTO `sys_job_log` VALUES (4393, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 01:41:00'); +INSERT INTO `sys_job_log` VALUES (4394, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:31毫秒', '0', '', '2025-01-08 01:41:00'); +INSERT INTO `sys_job_log` VALUES (4395, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 01:42:00'); +INSERT INTO `sys_job_log` VALUES (4396, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:25毫秒', '0', '', '2025-01-08 01:42:00'); +INSERT INTO `sys_job_log` VALUES (4397, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:94毫秒', '0', '', '2025-01-08 01:42:00'); +INSERT INTO `sys_job_log` VALUES (4398, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:953毫秒', '0', '', '2025-01-08 01:42:00'); +INSERT INTO `sys_job_log` VALUES (4399, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 01:43:00'); +INSERT INTO `sys_job_log` VALUES (4400, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:31毫秒', '0', '', '2025-01-08 01:43:00'); +INSERT INTO `sys_job_log` VALUES (4401, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 01:44:00'); +INSERT INTO `sys_job_log` VALUES (4402, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:18毫秒', '0', '', '2025-01-08 01:44:00'); +INSERT INTO `sys_job_log` VALUES (4403, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 01:44:00'); +INSERT INTO `sys_job_log` VALUES (4404, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:984毫秒', '0', '', '2025-01-08 01:44:00'); +INSERT INTO `sys_job_log` VALUES (4405, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 01:45:00'); +INSERT INTO `sys_job_log` VALUES (4406, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 01:45:00'); +INSERT INTO `sys_job_log` VALUES (4407, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 01:46:00'); +INSERT INTO `sys_job_log` VALUES (4408, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:19毫秒', '0', '', '2025-01-08 01:46:00'); +INSERT INTO `sys_job_log` VALUES (4409, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:78毫秒', '0', '', '2025-01-08 01:46:00'); +INSERT INTO `sys_job_log` VALUES (4410, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:937毫秒', '0', '', '2025-01-08 01:46:00'); +INSERT INTO `sys_job_log` VALUES (4411, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 01:47:00'); +INSERT INTO `sys_job_log` VALUES (4412, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:31毫秒', '0', '', '2025-01-08 01:47:00'); +INSERT INTO `sys_job_log` VALUES (4413, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 01:48:00'); +INSERT INTO `sys_job_log` VALUES (4414, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:18毫秒', '0', '', '2025-01-08 01:48:00'); +INSERT INTO `sys_job_log` VALUES (4415, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:78毫秒', '0', '', '2025-01-08 01:48:00'); +INSERT INTO `sys_job_log` VALUES (4416, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:969毫秒', '0', '', '2025-01-08 01:48:00'); +INSERT INTO `sys_job_log` VALUES (4417, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 01:49:00'); +INSERT INTO `sys_job_log` VALUES (4418, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 01:49:00'); +INSERT INTO `sys_job_log` VALUES (4419, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 01:50:00'); +INSERT INTO `sys_job_log` VALUES (4420, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:19毫秒', '0', '', '2025-01-08 01:50:00'); +INSERT INTO `sys_job_log` VALUES (4421, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:93毫秒', '0', '', '2025-01-08 01:50:00'); +INSERT INTO `sys_job_log` VALUES (4422, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:905毫秒', '0', '', '2025-01-08 01:50:00'); +INSERT INTO `sys_job_log` VALUES (4423, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 01:51:00'); +INSERT INTO `sys_job_log` VALUES (4424, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 01:51:00'); +INSERT INTO `sys_job_log` VALUES (4425, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 01:52:00'); +INSERT INTO `sys_job_log` VALUES (4426, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:19毫秒', '0', '', '2025-01-08 01:52:00'); +INSERT INTO `sys_job_log` VALUES (4427, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:79毫秒', '0', '', '2025-01-08 01:52:00'); +INSERT INTO `sys_job_log` VALUES (4428, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:907毫秒', '0', '', '2025-01-08 01:52:00'); +INSERT INTO `sys_job_log` VALUES (4429, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 01:53:00'); +INSERT INTO `sys_job_log` VALUES (4430, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:31毫秒', '0', '', '2025-01-08 01:53:00'); +INSERT INTO `sys_job_log` VALUES (4431, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 01:54:00'); +INSERT INTO `sys_job_log` VALUES (4432, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:19毫秒', '0', '', '2025-01-08 01:54:00'); +INSERT INTO `sys_job_log` VALUES (4433, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:49毫秒', '0', '', '2025-01-08 01:54:00'); +INSERT INTO `sys_job_log` VALUES (4434, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:954毫秒', '0', '', '2025-01-08 01:54:00'); +INSERT INTO `sys_job_log` VALUES (4435, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 01:55:00'); +INSERT INTO `sys_job_log` VALUES (4436, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:46毫秒', '0', '', '2025-01-08 01:55:00'); +INSERT INTO `sys_job_log` VALUES (4437, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 01:56:00'); +INSERT INTO `sys_job_log` VALUES (4438, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:19毫秒', '0', '', '2025-01-08 01:56:00'); +INSERT INTO `sys_job_log` VALUES (4439, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:46毫秒', '0', '', '2025-01-08 01:56:00'); +INSERT INTO `sys_job_log` VALUES (4440, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:953毫秒', '0', '', '2025-01-08 01:56:00'); +INSERT INTO `sys_job_log` VALUES (4441, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 01:57:00'); +INSERT INTO `sys_job_log` VALUES (4442, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:48毫秒', '0', '', '2025-01-08 01:57:00'); +INSERT INTO `sys_job_log` VALUES (4443, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 01:58:00'); +INSERT INTO `sys_job_log` VALUES (4444, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:18毫秒', '0', '', '2025-01-08 01:58:00'); +INSERT INTO `sys_job_log` VALUES (4445, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:48毫秒', '0', '', '2025-01-08 01:58:00'); +INSERT INTO `sys_job_log` VALUES (4446, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:938毫秒', '0', '', '2025-01-08 01:58:00'); +INSERT INTO `sys_job_log` VALUES (4447, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 01:59:00'); +INSERT INTO `sys_job_log` VALUES (4448, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:31毫秒', '0', '', '2025-01-08 01:59:00'); +INSERT INTO `sys_job_log` VALUES (4449, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 02:00:00'); +INSERT INTO `sys_job_log` VALUES (4450, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:19毫秒', '0', '', '2025-01-08 02:00:00'); +INSERT INTO `sys_job_log` VALUES (4451, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 02:00:00'); +INSERT INTO `sys_job_log` VALUES (4452, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:954毫秒', '0', '', '2025-01-08 02:00:00'); +INSERT INTO `sys_job_log` VALUES (4453, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 02:01:00'); +INSERT INTO `sys_job_log` VALUES (4454, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 02:01:00'); +INSERT INTO `sys_job_log` VALUES (4455, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 02:02:00'); +INSERT INTO `sys_job_log` VALUES (4456, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:19毫秒', '0', '', '2025-01-08 02:02:00'); +INSERT INTO `sys_job_log` VALUES (4457, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 02:02:00'); +INSERT INTO `sys_job_log` VALUES (4458, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:938毫秒', '0', '', '2025-01-08 02:02:00'); +INSERT INTO `sys_job_log` VALUES (4459, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 02:03:00'); +INSERT INTO `sys_job_log` VALUES (4460, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:48毫秒', '0', '', '2025-01-08 02:03:00'); +INSERT INTO `sys_job_log` VALUES (4461, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 02:04:00'); +INSERT INTO `sys_job_log` VALUES (4462, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:20毫秒', '0', '', '2025-01-08 02:04:00'); +INSERT INTO `sys_job_log` VALUES (4463, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:95毫秒', '0', '', '2025-01-08 02:04:00'); +INSERT INTO `sys_job_log` VALUES (4464, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:890毫秒', '0', '', '2025-01-08 02:04:00'); +INSERT INTO `sys_job_log` VALUES (4465, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 02:05:00'); +INSERT INTO `sys_job_log` VALUES (4466, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:46毫秒', '0', '', '2025-01-08 02:05:00'); +INSERT INTO `sys_job_log` VALUES (4467, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 02:06:00'); +INSERT INTO `sys_job_log` VALUES (4468, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:22毫秒', '0', '', '2025-01-08 02:06:00'); +INSERT INTO `sys_job_log` VALUES (4469, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:46毫秒', '0', '', '2025-01-08 02:06:00'); +INSERT INTO `sys_job_log` VALUES (4470, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:1031毫秒', '0', '', '2025-01-08 02:06:01'); +INSERT INTO `sys_job_log` VALUES (4471, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 02:07:00'); +INSERT INTO `sys_job_log` VALUES (4472, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:46毫秒', '0', '', '2025-01-08 02:07:00'); +INSERT INTO `sys_job_log` VALUES (4473, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 02:08:00'); +INSERT INTO `sys_job_log` VALUES (4474, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:18毫秒', '0', '', '2025-01-08 02:08:00'); +INSERT INTO `sys_job_log` VALUES (4475, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:55毫秒', '0', '', '2025-01-08 02:08:00'); +INSERT INTO `sys_job_log` VALUES (4476, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:954毫秒', '0', '', '2025-01-08 02:08:00'); +INSERT INTO `sys_job_log` VALUES (4477, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 02:09:00'); +INSERT INTO `sys_job_log` VALUES (4478, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 02:09:00'); +INSERT INTO `sys_job_log` VALUES (4479, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 02:10:00'); +INSERT INTO `sys_job_log` VALUES (4480, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:17毫秒', '0', '', '2025-01-08 02:10:00'); +INSERT INTO `sys_job_log` VALUES (4481, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 02:10:00'); +INSERT INTO `sys_job_log` VALUES (4482, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:953毫秒', '0', '', '2025-01-08 02:10:00'); +INSERT INTO `sys_job_log` VALUES (4483, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 02:11:00'); +INSERT INTO `sys_job_log` VALUES (4484, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 02:11:00'); +INSERT INTO `sys_job_log` VALUES (4485, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 02:12:00'); +INSERT INTO `sys_job_log` VALUES (4486, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:18毫秒', '0', '', '2025-01-08 02:12:00'); +INSERT INTO `sys_job_log` VALUES (4487, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:48毫秒', '0', '', '2025-01-08 02:12:00'); +INSERT INTO `sys_job_log` VALUES (4488, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:1007毫秒', '0', '', '2025-01-08 02:12:01'); +INSERT INTO `sys_job_log` VALUES (4489, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 02:13:00'); +INSERT INTO `sys_job_log` VALUES (4490, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:32毫秒', '0', '', '2025-01-08 02:13:00'); +INSERT INTO `sys_job_log` VALUES (4491, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 02:14:00'); +INSERT INTO `sys_job_log` VALUES (4492, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:18毫秒', '0', '', '2025-01-08 02:14:00'); +INSERT INTO `sys_job_log` VALUES (4493, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:94毫秒', '0', '', '2025-01-08 02:14:00'); +INSERT INTO `sys_job_log` VALUES (4494, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:906毫秒', '0', '', '2025-01-08 02:14:00'); +INSERT INTO `sys_job_log` VALUES (4495, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 02:15:00'); +INSERT INTO `sys_job_log` VALUES (4496, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:32毫秒', '0', '', '2025-01-08 02:15:00'); +INSERT INTO `sys_job_log` VALUES (4497, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 02:16:00'); +INSERT INTO `sys_job_log` VALUES (4498, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:18毫秒', '0', '', '2025-01-08 02:16:00'); +INSERT INTO `sys_job_log` VALUES (4499, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:93毫秒', '0', '', '2025-01-08 02:16:00'); +INSERT INTO `sys_job_log` VALUES (4500, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:906毫秒', '0', '', '2025-01-08 02:16:00'); +INSERT INTO `sys_job_log` VALUES (4501, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 02:17:00'); +INSERT INTO `sys_job_log` VALUES (4502, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:45毫秒', '0', '', '2025-01-08 02:17:00'); +INSERT INTO `sys_job_log` VALUES (4503, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 02:18:00'); +INSERT INTO `sys_job_log` VALUES (4504, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:19毫秒', '0', '', '2025-01-08 02:18:00'); +INSERT INTO `sys_job_log` VALUES (4505, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:93毫秒', '0', '', '2025-01-08 02:18:00'); +INSERT INTO `sys_job_log` VALUES (4506, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:891毫秒', '0', '', '2025-01-08 02:18:00'); +INSERT INTO `sys_job_log` VALUES (4507, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 02:19:00'); +INSERT INTO `sys_job_log` VALUES (4508, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:32毫秒', '0', '', '2025-01-08 02:19:00'); +INSERT INTO `sys_job_log` VALUES (4509, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 02:20:00'); +INSERT INTO `sys_job_log` VALUES (4510, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:19毫秒', '0', '', '2025-01-08 02:20:00'); +INSERT INTO `sys_job_log` VALUES (4511, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:78毫秒', '0', '', '2025-01-08 02:20:00'); +INSERT INTO `sys_job_log` VALUES (4512, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:890毫秒', '0', '', '2025-01-08 02:20:00'); +INSERT INTO `sys_job_log` VALUES (4513, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 02:21:00'); +INSERT INTO `sys_job_log` VALUES (4514, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:32毫秒', '0', '', '2025-01-08 02:21:00'); +INSERT INTO `sys_job_log` VALUES (4515, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 02:22:00'); +INSERT INTO `sys_job_log` VALUES (4516, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:19毫秒', '0', '', '2025-01-08 02:22:00'); +INSERT INTO `sys_job_log` VALUES (4517, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 02:22:00'); +INSERT INTO `sys_job_log` VALUES (4518, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:954毫秒', '0', '', '2025-01-08 02:22:00'); +INSERT INTO `sys_job_log` VALUES (4519, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 02:23:00'); +INSERT INTO `sys_job_log` VALUES (4520, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 02:23:00'); +INSERT INTO `sys_job_log` VALUES (4521, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 02:24:00'); +INSERT INTO `sys_job_log` VALUES (4522, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:19毫秒', '0', '', '2025-01-08 02:24:00'); +INSERT INTO `sys_job_log` VALUES (4523, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:78毫秒', '0', '', '2025-01-08 02:24:00'); +INSERT INTO `sys_job_log` VALUES (4524, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:907毫秒', '0', '', '2025-01-08 02:24:00'); +INSERT INTO `sys_job_log` VALUES (4525, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 02:25:00'); +INSERT INTO `sys_job_log` VALUES (4526, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:32毫秒', '0', '', '2025-01-08 02:25:00'); +INSERT INTO `sys_job_log` VALUES (4527, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 02:26:00'); +INSERT INTO `sys_job_log` VALUES (4528, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:21毫秒', '0', '', '2025-01-08 02:26:00'); +INSERT INTO `sys_job_log` VALUES (4529, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:80毫秒', '0', '', '2025-01-08 02:26:00'); +INSERT INTO `sys_job_log` VALUES (4530, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:906毫秒', '0', '', '2025-01-08 02:26:00'); +INSERT INTO `sys_job_log` VALUES (4531, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 02:27:00'); +INSERT INTO `sys_job_log` VALUES (4532, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 02:27:00'); +INSERT INTO `sys_job_log` VALUES (4533, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 02:28:00'); +INSERT INTO `sys_job_log` VALUES (4534, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:24毫秒', '0', '', '2025-01-08 02:28:00'); +INSERT INTO `sys_job_log` VALUES (4535, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:94毫秒', '0', '', '2025-01-08 02:28:00'); +INSERT INTO `sys_job_log` VALUES (4536, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:906毫秒', '0', '', '2025-01-08 02:28:00'); +INSERT INTO `sys_job_log` VALUES (4537, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 02:29:00'); +INSERT INTO `sys_job_log` VALUES (4538, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:46毫秒', '0', '', '2025-01-08 02:29:00'); +INSERT INTO `sys_job_log` VALUES (4539, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 02:30:00'); +INSERT INTO `sys_job_log` VALUES (4540, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:19毫秒', '0', '', '2025-01-08 02:30:00'); +INSERT INTO `sys_job_log` VALUES (4541, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:46毫秒', '0', '', '2025-01-08 02:30:00'); +INSERT INTO `sys_job_log` VALUES (4542, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:953毫秒', '0', '', '2025-01-08 02:30:00'); +INSERT INTO `sys_job_log` VALUES (4543, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 02:31:00'); +INSERT INTO `sys_job_log` VALUES (4544, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 02:31:00'); +INSERT INTO `sys_job_log` VALUES (4545, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 02:32:00'); +INSERT INTO `sys_job_log` VALUES (4546, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:17毫秒', '0', '', '2025-01-08 02:32:00'); +INSERT INTO `sys_job_log` VALUES (4547, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:78毫秒', '0', '', '2025-01-08 02:32:00'); +INSERT INTO `sys_job_log` VALUES (4548, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:913毫秒', '0', '', '2025-01-08 02:32:00'); +INSERT INTO `sys_job_log` VALUES (4549, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 02:33:00'); +INSERT INTO `sys_job_log` VALUES (4550, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 02:33:00'); +INSERT INTO `sys_job_log` VALUES (4551, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 02:34:00'); +INSERT INTO `sys_job_log` VALUES (4552, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:17毫秒', '0', '', '2025-01-08 02:34:00'); +INSERT INTO `sys_job_log` VALUES (4553, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:95毫秒', '0', '', '2025-01-08 02:34:00'); +INSERT INTO `sys_job_log` VALUES (4554, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:907毫秒', '0', '', '2025-01-08 02:34:00'); +INSERT INTO `sys_job_log` VALUES (4555, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 02:35:00'); +INSERT INTO `sys_job_log` VALUES (4556, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 02:35:00'); +INSERT INTO `sys_job_log` VALUES (4557, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 02:36:00'); +INSERT INTO `sys_job_log` VALUES (4558, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:20毫秒', '0', '', '2025-01-08 02:36:00'); +INSERT INTO `sys_job_log` VALUES (4559, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:93毫秒', '0', '', '2025-01-08 02:36:00'); +INSERT INTO `sys_job_log` VALUES (4560, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:906毫秒', '0', '', '2025-01-08 02:36:00'); +INSERT INTO `sys_job_log` VALUES (4561, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 02:37:00'); +INSERT INTO `sys_job_log` VALUES (4562, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:31毫秒', '0', '', '2025-01-08 02:37:00'); +INSERT INTO `sys_job_log` VALUES (4563, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 02:38:00'); +INSERT INTO `sys_job_log` VALUES (4564, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:19毫秒', '0', '', '2025-01-08 02:38:00'); +INSERT INTO `sys_job_log` VALUES (4565, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 02:38:00'); +INSERT INTO `sys_job_log` VALUES (4566, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:938毫秒', '0', '', '2025-01-08 02:38:00'); +INSERT INTO `sys_job_log` VALUES (4567, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 02:39:00'); +INSERT INTO `sys_job_log` VALUES (4568, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:33毫秒', '0', '', '2025-01-08 02:39:00'); +INSERT INTO `sys_job_log` VALUES (4569, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 02:40:00'); +INSERT INTO `sys_job_log` VALUES (4570, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:18毫秒', '0', '', '2025-01-08 02:40:00'); +INSERT INTO `sys_job_log` VALUES (4571, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 02:40:00'); +INSERT INTO `sys_job_log` VALUES (4572, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:938毫秒', '0', '', '2025-01-08 02:40:00'); +INSERT INTO `sys_job_log` VALUES (4573, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 02:41:00'); +INSERT INTO `sys_job_log` VALUES (4574, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:51毫秒', '0', '', '2025-01-08 02:41:00'); +INSERT INTO `sys_job_log` VALUES (4575, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 02:42:00'); +INSERT INTO `sys_job_log` VALUES (4576, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:17毫秒', '0', '', '2025-01-08 02:42:00'); +INSERT INTO `sys_job_log` VALUES (4577, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:78毫秒', '0', '', '2025-01-08 02:42:00'); +INSERT INTO `sys_job_log` VALUES (4578, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:891毫秒', '0', '', '2025-01-08 02:42:00'); +INSERT INTO `sys_job_log` VALUES (4579, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 02:43:00'); +INSERT INTO `sys_job_log` VALUES (4580, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:32毫秒', '0', '', '2025-01-08 02:43:00'); +INSERT INTO `sys_job_log` VALUES (4581, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 02:44:00'); +INSERT INTO `sys_job_log` VALUES (4582, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:18毫秒', '0', '', '2025-01-08 02:44:00'); +INSERT INTO `sys_job_log` VALUES (4583, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:78毫秒', '0', '', '2025-01-08 02:44:00'); +INSERT INTO `sys_job_log` VALUES (4584, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:908毫秒', '0', '', '2025-01-08 02:44:00'); +INSERT INTO `sys_job_log` VALUES (4585, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 02:45:00'); +INSERT INTO `sys_job_log` VALUES (4586, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:31毫秒', '0', '', '2025-01-08 02:45:00'); +INSERT INTO `sys_job_log` VALUES (4587, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 02:46:00'); +INSERT INTO `sys_job_log` VALUES (4588, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:17毫秒', '0', '', '2025-01-08 02:46:00'); +INSERT INTO `sys_job_log` VALUES (4589, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:94毫秒', '0', '', '2025-01-08 02:46:00'); +INSERT INTO `sys_job_log` VALUES (4590, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:890毫秒', '0', '', '2025-01-08 02:46:00'); +INSERT INTO `sys_job_log` VALUES (4591, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 02:47:00'); +INSERT INTO `sys_job_log` VALUES (4592, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 02:47:00'); +INSERT INTO `sys_job_log` VALUES (4593, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 02:48:00'); +INSERT INTO `sys_job_log` VALUES (4594, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:18毫秒', '0', '', '2025-01-08 02:48:00'); +INSERT INTO `sys_job_log` VALUES (4595, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:31毫秒', '0', '', '2025-01-08 02:48:00'); +INSERT INTO `sys_job_log` VALUES (4596, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:953毫秒', '0', '', '2025-01-08 02:48:00'); +INSERT INTO `sys_job_log` VALUES (4597, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 02:49:00'); +INSERT INTO `sys_job_log` VALUES (4598, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:29毫秒', '0', '', '2025-01-08 02:49:00'); +INSERT INTO `sys_job_log` VALUES (4599, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 02:50:00'); +INSERT INTO `sys_job_log` VALUES (4600, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:18毫秒', '0', '', '2025-01-08 02:50:00'); +INSERT INTO `sys_job_log` VALUES (4601, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 02:50:00'); +INSERT INTO `sys_job_log` VALUES (4602, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:954毫秒', '0', '', '2025-01-08 02:50:00'); +INSERT INTO `sys_job_log` VALUES (4603, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 02:51:00'); +INSERT INTO `sys_job_log` VALUES (4604, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:32毫秒', '0', '', '2025-01-08 02:51:00'); +INSERT INTO `sys_job_log` VALUES (4605, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 02:52:00'); +INSERT INTO `sys_job_log` VALUES (4606, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:18毫秒', '0', '', '2025-01-08 02:52:00'); +INSERT INTO `sys_job_log` VALUES (4607, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:34毫秒', '0', '', '2025-01-08 02:52:00'); +INSERT INTO `sys_job_log` VALUES (4608, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:959毫秒', '0', '', '2025-01-08 02:52:00'); +INSERT INTO `sys_job_log` VALUES (4609, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 02:53:00'); +INSERT INTO `sys_job_log` VALUES (4610, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 02:53:00'); +INSERT INTO `sys_job_log` VALUES (4611, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 02:54:00'); +INSERT INTO `sys_job_log` VALUES (4612, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:20毫秒', '0', '', '2025-01-08 02:54:00'); +INSERT INTO `sys_job_log` VALUES (4613, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:77毫秒', '0', '', '2025-01-08 02:54:00'); +INSERT INTO `sys_job_log` VALUES (4614, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:906毫秒', '0', '', '2025-01-08 02:54:00'); +INSERT INTO `sys_job_log` VALUES (4615, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 02:55:00'); +INSERT INTO `sys_job_log` VALUES (4616, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:29毫秒', '0', '', '2025-01-08 02:55:00'); +INSERT INTO `sys_job_log` VALUES (4617, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 02:56:00'); +INSERT INTO `sys_job_log` VALUES (4618, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:20毫秒', '0', '', '2025-01-08 02:56:00'); +INSERT INTO `sys_job_log` VALUES (4619, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:79毫秒', '0', '', '2025-01-08 02:56:00'); +INSERT INTO `sys_job_log` VALUES (4620, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:906毫秒', '0', '', '2025-01-08 02:56:00'); +INSERT INTO `sys_job_log` VALUES (4621, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 02:57:00'); +INSERT INTO `sys_job_log` VALUES (4622, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:31毫秒', '0', '', '2025-01-08 02:57:00'); +INSERT INTO `sys_job_log` VALUES (4623, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 02:58:00'); +INSERT INTO `sys_job_log` VALUES (4624, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:18毫秒', '0', '', '2025-01-08 02:58:00'); +INSERT INTO `sys_job_log` VALUES (4625, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 02:58:00'); +INSERT INTO `sys_job_log` VALUES (4626, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:953毫秒', '0', '', '2025-01-08 02:58:00'); +INSERT INTO `sys_job_log` VALUES (4627, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 02:59:00'); +INSERT INTO `sys_job_log` VALUES (4628, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:48毫秒', '0', '', '2025-01-08 02:59:00'); +INSERT INTO `sys_job_log` VALUES (4629, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 03:00:00'); +INSERT INTO `sys_job_log` VALUES (4630, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:19毫秒', '0', '', '2025-01-08 03:00:00'); +INSERT INTO `sys_job_log` VALUES (4631, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:92毫秒', '0', '', '2025-01-08 03:00:00'); +INSERT INTO `sys_job_log` VALUES (4632, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:889毫秒', '0', '', '2025-01-08 03:00:00'); +INSERT INTO `sys_job_log` VALUES (4633, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 03:01:00'); +INSERT INTO `sys_job_log` VALUES (4634, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:31毫秒', '0', '', '2025-01-08 03:01:00'); +INSERT INTO `sys_job_log` VALUES (4635, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 03:02:00'); +INSERT INTO `sys_job_log` VALUES (4636, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:18毫秒', '0', '', '2025-01-08 03:02:00'); +INSERT INTO `sys_job_log` VALUES (4637, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:94毫秒', '0', '', '2025-01-08 03:02:00'); +INSERT INTO `sys_job_log` VALUES (4638, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:906毫秒', '0', '', '2025-01-08 03:02:00'); +INSERT INTO `sys_job_log` VALUES (4639, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 03:03:00'); +INSERT INTO `sys_job_log` VALUES (4640, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:32毫秒', '0', '', '2025-01-08 03:03:00'); +INSERT INTO `sys_job_log` VALUES (4641, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 03:04:00'); +INSERT INTO `sys_job_log` VALUES (4642, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:20毫秒', '0', '', '2025-01-08 03:04:00'); +INSERT INTO `sys_job_log` VALUES (4643, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:95毫秒', '0', '', '2025-01-08 03:04:00'); +INSERT INTO `sys_job_log` VALUES (4644, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:893毫秒', '0', '', '2025-01-08 03:04:00'); +INSERT INTO `sys_job_log` VALUES (4645, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 03:05:00'); +INSERT INTO `sys_job_log` VALUES (4646, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 03:05:00'); +INSERT INTO `sys_job_log` VALUES (4647, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 03:06:00'); +INSERT INTO `sys_job_log` VALUES (4648, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:17毫秒', '0', '', '2025-01-08 03:06:00'); +INSERT INTO `sys_job_log` VALUES (4649, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:95毫秒', '0', '', '2025-01-08 03:06:00'); +INSERT INTO `sys_job_log` VALUES (4650, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:907毫秒', '0', '', '2025-01-08 03:06:00'); +INSERT INTO `sys_job_log` VALUES (4651, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 03:07:00'); +INSERT INTO `sys_job_log` VALUES (4652, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:37毫秒', '0', '', '2025-01-08 03:07:00'); +INSERT INTO `sys_job_log` VALUES (4653, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 03:08:00'); +INSERT INTO `sys_job_log` VALUES (4654, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:17毫秒', '0', '', '2025-01-08 03:08:00'); +INSERT INTO `sys_job_log` VALUES (4655, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:109毫秒', '0', '', '2025-01-08 03:08:00'); +INSERT INTO `sys_job_log` VALUES (4656, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:935毫秒', '0', '', '2025-01-08 03:08:00'); +INSERT INTO `sys_job_log` VALUES (4657, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 03:09:00'); +INSERT INTO `sys_job_log` VALUES (4658, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:46毫秒', '0', '', '2025-01-08 03:09:00'); +INSERT INTO `sys_job_log` VALUES (4659, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 03:10:00'); +INSERT INTO `sys_job_log` VALUES (4660, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:18毫秒', '0', '', '2025-01-08 03:10:00'); +INSERT INTO `sys_job_log` VALUES (4661, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:78毫秒', '0', '', '2025-01-08 03:10:00'); +INSERT INTO `sys_job_log` VALUES (4662, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:891毫秒', '0', '', '2025-01-08 03:10:00'); +INSERT INTO `sys_job_log` VALUES (4663, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 03:11:00'); +INSERT INTO `sys_job_log` VALUES (4664, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:49毫秒', '0', '', '2025-01-08 03:11:00'); +INSERT INTO `sys_job_log` VALUES (4665, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 03:12:00'); +INSERT INTO `sys_job_log` VALUES (4666, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:17毫秒', '0', '', '2025-01-08 03:12:00'); +INSERT INTO `sys_job_log` VALUES (4667, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:77毫秒', '0', '', '2025-01-08 03:12:00'); +INSERT INTO `sys_job_log` VALUES (4668, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:905毫秒', '0', '', '2025-01-08 03:12:00'); +INSERT INTO `sys_job_log` VALUES (4669, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 03:13:00'); +INSERT INTO `sys_job_log` VALUES (4670, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 03:13:00'); +INSERT INTO `sys_job_log` VALUES (4671, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 03:14:00'); +INSERT INTO `sys_job_log` VALUES (4672, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:18毫秒', '0', '', '2025-01-08 03:14:00'); +INSERT INTO `sys_job_log` VALUES (4673, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:95毫秒', '0', '', '2025-01-08 03:14:00'); +INSERT INTO `sys_job_log` VALUES (4674, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:907毫秒', '0', '', '2025-01-08 03:14:00'); +INSERT INTO `sys_job_log` VALUES (4675, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 03:15:00'); +INSERT INTO `sys_job_log` VALUES (4676, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:48毫秒', '0', '', '2025-01-08 03:15:00'); +INSERT INTO `sys_job_log` VALUES (4677, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 03:16:00'); +INSERT INTO `sys_job_log` VALUES (4678, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:19毫秒', '0', '', '2025-01-08 03:16:00'); +INSERT INTO `sys_job_log` VALUES (4679, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:79毫秒', '0', '', '2025-01-08 03:16:00'); +INSERT INTO `sys_job_log` VALUES (4680, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:922毫秒', '0', '', '2025-01-08 03:16:00'); +INSERT INTO `sys_job_log` VALUES (4681, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 03:17:00'); +INSERT INTO `sys_job_log` VALUES (4682, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:49毫秒', '0', '', '2025-01-08 03:17:00'); +INSERT INTO `sys_job_log` VALUES (4683, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 03:18:00'); +INSERT INTO `sys_job_log` VALUES (4684, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:18毫秒', '0', '', '2025-01-08 03:18:00'); +INSERT INTO `sys_job_log` VALUES (4685, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:49毫秒', '0', '', '2025-01-08 03:18:00'); +INSERT INTO `sys_job_log` VALUES (4686, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:937毫秒', '0', '', '2025-01-08 03:18:00'); +INSERT INTO `sys_job_log` VALUES (4687, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 03:19:00'); +INSERT INTO `sys_job_log` VALUES (4688, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:48毫秒', '0', '', '2025-01-08 03:19:00'); +INSERT INTO `sys_job_log` VALUES (4689, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 03:20:00'); +INSERT INTO `sys_job_log` VALUES (4690, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:22毫秒', '0', '', '2025-01-08 03:20:00'); +INSERT INTO `sys_job_log` VALUES (4691, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:94毫秒', '0', '', '2025-01-08 03:20:00'); +INSERT INTO `sys_job_log` VALUES (4692, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:905毫秒', '0', '', '2025-01-08 03:20:00'); +INSERT INTO `sys_job_log` VALUES (4693, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 03:21:00'); +INSERT INTO `sys_job_log` VALUES (4694, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 03:21:00'); +INSERT INTO `sys_job_log` VALUES (4695, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 03:22:00'); +INSERT INTO `sys_job_log` VALUES (4696, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:18毫秒', '0', '', '2025-01-08 03:22:00'); +INSERT INTO `sys_job_log` VALUES (4697, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 03:22:00'); +INSERT INTO `sys_job_log` VALUES (4698, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:953毫秒', '0', '', '2025-01-08 03:22:00'); +INSERT INTO `sys_job_log` VALUES (4699, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 03:23:00'); +INSERT INTO `sys_job_log` VALUES (4700, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:46毫秒', '0', '', '2025-01-08 03:23:00'); +INSERT INTO `sys_job_log` VALUES (4701, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 03:24:00'); +INSERT INTO `sys_job_log` VALUES (4702, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:19毫秒', '0', '', '2025-01-08 03:24:00'); +INSERT INTO `sys_job_log` VALUES (4703, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 03:24:00'); +INSERT INTO `sys_job_log` VALUES (4704, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:938毫秒', '0', '', '2025-01-08 03:24:00'); +INSERT INTO `sys_job_log` VALUES (4705, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 03:25:00'); +INSERT INTO `sys_job_log` VALUES (4706, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 03:25:00'); +INSERT INTO `sys_job_log` VALUES (4707, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 03:26:00'); +INSERT INTO `sys_job_log` VALUES (4708, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:18毫秒', '0', '', '2025-01-08 03:26:00'); +INSERT INTO `sys_job_log` VALUES (4709, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 03:26:00'); +INSERT INTO `sys_job_log` VALUES (4710, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:951毫秒', '0', '', '2025-01-08 03:26:00'); +INSERT INTO `sys_job_log` VALUES (4711, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 03:27:00'); +INSERT INTO `sys_job_log` VALUES (4712, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 03:27:00'); +INSERT INTO `sys_job_log` VALUES (4713, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 03:28:00'); +INSERT INTO `sys_job_log` VALUES (4714, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:20毫秒', '0', '', '2025-01-08 03:28:00'); +INSERT INTO `sys_job_log` VALUES (4715, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 03:28:00'); +INSERT INTO `sys_job_log` VALUES (4716, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:950毫秒', '0', '', '2025-01-08 03:28:00'); +INSERT INTO `sys_job_log` VALUES (4717, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 03:29:00'); +INSERT INTO `sys_job_log` VALUES (4718, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:33毫秒', '0', '', '2025-01-08 03:29:00'); +INSERT INTO `sys_job_log` VALUES (4719, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 03:30:00'); +INSERT INTO `sys_job_log` VALUES (4720, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:19毫秒', '0', '', '2025-01-08 03:30:00'); +INSERT INTO `sys_job_log` VALUES (4721, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:93毫秒', '0', '', '2025-01-08 03:30:00'); +INSERT INTO `sys_job_log` VALUES (4722, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:905毫秒', '0', '', '2025-01-08 03:30:00'); +INSERT INTO `sys_job_log` VALUES (4723, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 03:31:00'); +INSERT INTO `sys_job_log` VALUES (4724, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:32毫秒', '0', '', '2025-01-08 03:31:00'); +INSERT INTO `sys_job_log` VALUES (4725, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 03:32:00'); +INSERT INTO `sys_job_log` VALUES (4726, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:19毫秒', '0', '', '2025-01-08 03:32:00'); +INSERT INTO `sys_job_log` VALUES (4727, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:96毫秒', '0', '', '2025-01-08 03:32:00'); +INSERT INTO `sys_job_log` VALUES (4728, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:907毫秒', '0', '', '2025-01-08 03:32:00'); +INSERT INTO `sys_job_log` VALUES (4729, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 03:33:00'); +INSERT INTO `sys_job_log` VALUES (4730, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:32毫秒', '0', '', '2025-01-08 03:33:00'); +INSERT INTO `sys_job_log` VALUES (4731, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 03:34:00'); +INSERT INTO `sys_job_log` VALUES (4732, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:18毫秒', '0', '', '2025-01-08 03:34:00'); +INSERT INTO `sys_job_log` VALUES (4733, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:78毫秒', '0', '', '2025-01-08 03:34:00'); +INSERT INTO `sys_job_log` VALUES (4734, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:906毫秒', '0', '', '2025-01-08 03:34:00'); +INSERT INTO `sys_job_log` VALUES (4735, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 03:35:00'); +INSERT INTO `sys_job_log` VALUES (4736, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:46毫秒', '0', '', '2025-01-08 03:35:00'); +INSERT INTO `sys_job_log` VALUES (4737, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 03:36:00'); +INSERT INTO `sys_job_log` VALUES (4738, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:17毫秒', '0', '', '2025-01-08 03:36:00'); +INSERT INTO `sys_job_log` VALUES (4739, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:94毫秒', '0', '', '2025-01-08 03:36:00'); +INSERT INTO `sys_job_log` VALUES (4740, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:906毫秒', '0', '', '2025-01-08 03:36:00'); +INSERT INTO `sys_job_log` VALUES (4741, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 03:37:00'); +INSERT INTO `sys_job_log` VALUES (4742, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 03:37:00'); +INSERT INTO `sys_job_log` VALUES (4743, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 03:38:00'); +INSERT INTO `sys_job_log` VALUES (4744, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:21毫秒', '0', '', '2025-01-08 03:38:00'); +INSERT INTO `sys_job_log` VALUES (4745, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:92毫秒', '0', '', '2025-01-08 03:38:00'); +INSERT INTO `sys_job_log` VALUES (4746, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:905毫秒', '0', '', '2025-01-08 03:38:00'); +INSERT INTO `sys_job_log` VALUES (4747, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 03:39:00'); +INSERT INTO `sys_job_log` VALUES (4748, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 03:39:00'); +INSERT INTO `sys_job_log` VALUES (4749, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 03:40:00'); +INSERT INTO `sys_job_log` VALUES (4750, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:18毫秒', '0', '', '2025-01-08 03:40:00'); +INSERT INTO `sys_job_log` VALUES (4751, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:78毫秒', '0', '', '2025-01-08 03:40:00'); +INSERT INTO `sys_job_log` VALUES (4752, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:905毫秒', '0', '', '2025-01-08 03:40:00'); +INSERT INTO `sys_job_log` VALUES (4753, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 03:41:00'); +INSERT INTO `sys_job_log` VALUES (4754, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 03:41:00'); +INSERT INTO `sys_job_log` VALUES (4755, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 03:42:00'); +INSERT INTO `sys_job_log` VALUES (4756, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:17毫秒', '0', '', '2025-01-08 03:42:00'); +INSERT INTO `sys_job_log` VALUES (4757, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:78毫秒', '0', '', '2025-01-08 03:42:00'); +INSERT INTO `sys_job_log` VALUES (4758, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:907毫秒', '0', '', '2025-01-08 03:42:00'); +INSERT INTO `sys_job_log` VALUES (4759, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 03:43:00'); +INSERT INTO `sys_job_log` VALUES (4760, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:31毫秒', '0', '', '2025-01-08 03:43:00'); +INSERT INTO `sys_job_log` VALUES (4761, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 03:44:00'); +INSERT INTO `sys_job_log` VALUES (4762, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:19毫秒', '0', '', '2025-01-08 03:44:00'); +INSERT INTO `sys_job_log` VALUES (4763, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:78毫秒', '0', '', '2025-01-08 03:44:00'); +INSERT INTO `sys_job_log` VALUES (4764, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:907毫秒', '0', '', '2025-01-08 03:44:00'); +INSERT INTO `sys_job_log` VALUES (4765, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 03:45:00'); +INSERT INTO `sys_job_log` VALUES (4766, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:48毫秒', '0', '', '2025-01-08 03:45:00'); +INSERT INTO `sys_job_log` VALUES (4767, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 03:46:00'); +INSERT INTO `sys_job_log` VALUES (4768, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:18毫秒', '0', '', '2025-01-08 03:46:00'); +INSERT INTO `sys_job_log` VALUES (4769, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:79毫秒', '0', '', '2025-01-08 03:46:00'); +INSERT INTO `sys_job_log` VALUES (4770, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:907毫秒', '0', '', '2025-01-08 03:46:00'); +INSERT INTO `sys_job_log` VALUES (4771, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 03:47:00'); +INSERT INTO `sys_job_log` VALUES (4772, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:46毫秒', '0', '', '2025-01-08 03:47:00'); +INSERT INTO `sys_job_log` VALUES (4773, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 03:48:00'); +INSERT INTO `sys_job_log` VALUES (4774, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:19毫秒', '0', '', '2025-01-08 03:48:00'); +INSERT INTO `sys_job_log` VALUES (4775, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:86毫秒', '0', '', '2025-01-08 03:48:00'); +INSERT INTO `sys_job_log` VALUES (4776, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:907毫秒', '0', '', '2025-01-08 03:48:00'); +INSERT INTO `sys_job_log` VALUES (4777, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 03:49:00'); +INSERT INTO `sys_job_log` VALUES (4778, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:31毫秒', '0', '', '2025-01-08 03:49:00'); +INSERT INTO `sys_job_log` VALUES (4779, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 03:50:00'); +INSERT INTO `sys_job_log` VALUES (4780, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:19毫秒', '0', '', '2025-01-08 03:50:00'); +INSERT INTO `sys_job_log` VALUES (4781, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:92毫秒', '0', '', '2025-01-08 03:50:00'); +INSERT INTO `sys_job_log` VALUES (4782, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:907毫秒', '0', '', '2025-01-08 03:50:00'); +INSERT INTO `sys_job_log` VALUES (4783, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 03:51:00'); +INSERT INTO `sys_job_log` VALUES (4784, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 03:51:00'); +INSERT INTO `sys_job_log` VALUES (4785, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 03:52:00'); +INSERT INTO `sys_job_log` VALUES (4786, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:18毫秒', '0', '', '2025-01-08 03:52:00'); +INSERT INTO `sys_job_log` VALUES (4787, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 03:52:00'); +INSERT INTO `sys_job_log` VALUES (4788, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:946毫秒', '0', '', '2025-01-08 03:52:00'); +INSERT INTO `sys_job_log` VALUES (4789, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 03:53:00'); +INSERT INTO `sys_job_log` VALUES (4790, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:49毫秒', '0', '', '2025-01-08 03:53:00'); +INSERT INTO `sys_job_log` VALUES (4791, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 03:54:00'); +INSERT INTO `sys_job_log` VALUES (4792, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:18毫秒', '0', '', '2025-01-08 03:54:00'); +INSERT INTO `sys_job_log` VALUES (4793, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:97毫秒', '0', '', '2025-01-08 03:54:00'); +INSERT INTO `sys_job_log` VALUES (4794, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:906毫秒', '0', '', '2025-01-08 03:54:00'); +INSERT INTO `sys_job_log` VALUES (4795, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 03:55:00'); +INSERT INTO `sys_job_log` VALUES (4796, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 03:55:00'); +INSERT INTO `sys_job_log` VALUES (4797, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 03:56:00'); +INSERT INTO `sys_job_log` VALUES (4798, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:18毫秒', '0', '', '2025-01-08 03:56:00'); +INSERT INTO `sys_job_log` VALUES (4799, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:94毫秒', '0', '', '2025-01-08 03:56:00'); +INSERT INTO `sys_job_log` VALUES (4800, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:906毫秒', '0', '', '2025-01-08 03:56:00'); +INSERT INTO `sys_job_log` VALUES (4801, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 03:57:00'); +INSERT INTO `sys_job_log` VALUES (4802, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:126毫秒', '0', '', '2025-01-08 03:57:00'); +INSERT INTO `sys_job_log` VALUES (4803, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 03:58:00'); +INSERT INTO `sys_job_log` VALUES (4804, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:20毫秒', '0', '', '2025-01-08 03:58:00'); +INSERT INTO `sys_job_log` VALUES (4805, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:78毫秒', '0', '', '2025-01-08 03:58:00'); +INSERT INTO `sys_job_log` VALUES (4806, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:906毫秒', '0', '', '2025-01-08 03:58:00'); +INSERT INTO `sys_job_log` VALUES (4807, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 03:59:00'); +INSERT INTO `sys_job_log` VALUES (4808, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:31毫秒', '0', '', '2025-01-08 03:59:00'); +INSERT INTO `sys_job_log` VALUES (4809, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 04:00:00'); +INSERT INTO `sys_job_log` VALUES (4810, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:18毫秒', '0', '', '2025-01-08 04:00:00'); +INSERT INTO `sys_job_log` VALUES (4811, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:49毫秒', '0', '', '2025-01-08 04:00:00'); +INSERT INTO `sys_job_log` VALUES (4812, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:948毫秒', '0', '', '2025-01-08 04:00:00'); +INSERT INTO `sys_job_log` VALUES (4813, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 04:01:00'); +INSERT INTO `sys_job_log` VALUES (4814, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:35毫秒', '0', '', '2025-01-08 04:01:00'); +INSERT INTO `sys_job_log` VALUES (4815, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 04:02:00'); +INSERT INTO `sys_job_log` VALUES (4816, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:18毫秒', '0', '', '2025-01-08 04:02:00'); +INSERT INTO `sys_job_log` VALUES (4817, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 04:02:00'); +INSERT INTO `sys_job_log` VALUES (4818, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:953毫秒', '0', '', '2025-01-08 04:02:00'); +INSERT INTO `sys_job_log` VALUES (4819, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 04:03:00'); +INSERT INTO `sys_job_log` VALUES (4820, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 04:03:00'); +INSERT INTO `sys_job_log` VALUES (4821, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 04:04:00'); +INSERT INTO `sys_job_log` VALUES (4822, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:20毫秒', '0', '', '2025-01-08 04:04:00'); +INSERT INTO `sys_job_log` VALUES (4823, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 04:04:00'); +INSERT INTO `sys_job_log` VALUES (4824, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:949毫秒', '0', '', '2025-01-08 04:04:00'); +INSERT INTO `sys_job_log` VALUES (4825, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 04:05:00'); +INSERT INTO `sys_job_log` VALUES (4826, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:46毫秒', '0', '', '2025-01-08 04:05:00'); +INSERT INTO `sys_job_log` VALUES (4827, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 04:06:00'); +INSERT INTO `sys_job_log` VALUES (4828, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:18毫秒', '0', '', '2025-01-08 04:06:00'); +INSERT INTO `sys_job_log` VALUES (4829, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:93毫秒', '0', '', '2025-01-08 04:06:00'); +INSERT INTO `sys_job_log` VALUES (4830, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:906毫秒', '0', '', '2025-01-08 04:06:00'); +INSERT INTO `sys_job_log` VALUES (4831, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 04:07:00'); +INSERT INTO `sys_job_log` VALUES (4832, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:32毫秒', '0', '', '2025-01-08 04:07:00'); +INSERT INTO `sys_job_log` VALUES (4833, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 04:08:00'); +INSERT INTO `sys_job_log` VALUES (4834, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:17毫秒', '0', '', '2025-01-08 04:08:00'); +INSERT INTO `sys_job_log` VALUES (4835, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:32毫秒', '0', '', '2025-01-08 04:08:00'); +INSERT INTO `sys_job_log` VALUES (4836, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:953毫秒', '0', '', '2025-01-08 04:08:00'); +INSERT INTO `sys_job_log` VALUES (4837, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 04:09:00'); +INSERT INTO `sys_job_log` VALUES (4838, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:48毫秒', '0', '', '2025-01-08 04:09:00'); +INSERT INTO `sys_job_log` VALUES (4839, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 04:10:00'); +INSERT INTO `sys_job_log` VALUES (4840, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:18毫秒', '0', '', '2025-01-08 04:10:00'); +INSERT INTO `sys_job_log` VALUES (4841, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:94毫秒', '0', '', '2025-01-08 04:10:00'); +INSERT INTO `sys_job_log` VALUES (4842, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:905毫秒', '0', '', '2025-01-08 04:10:00'); +INSERT INTO `sys_job_log` VALUES (4843, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 04:11:00'); +INSERT INTO `sys_job_log` VALUES (4844, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:46毫秒', '0', '', '2025-01-08 04:11:00'); +INSERT INTO `sys_job_log` VALUES (4845, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 04:12:00'); +INSERT INTO `sys_job_log` VALUES (4846, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:20毫秒', '0', '', '2025-01-08 04:12:00'); +INSERT INTO `sys_job_log` VALUES (4847, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:89毫秒', '0', '', '2025-01-08 04:12:00'); +INSERT INTO `sys_job_log` VALUES (4848, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:906毫秒', '0', '', '2025-01-08 04:12:00'); +INSERT INTO `sys_job_log` VALUES (4849, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 04:13:00'); +INSERT INTO `sys_job_log` VALUES (4850, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:32毫秒', '0', '', '2025-01-08 04:13:00'); +INSERT INTO `sys_job_log` VALUES (4851, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 04:14:00'); +INSERT INTO `sys_job_log` VALUES (4852, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:25毫秒', '0', '', '2025-01-08 04:14:00'); +INSERT INTO `sys_job_log` VALUES (4853, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 04:14:00'); +INSERT INTO `sys_job_log` VALUES (4854, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:953毫秒', '0', '', '2025-01-08 04:14:00'); +INSERT INTO `sys_job_log` VALUES (4855, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 04:15:00'); +INSERT INTO `sys_job_log` VALUES (4856, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:45毫秒', '0', '', '2025-01-08 04:15:00'); +INSERT INTO `sys_job_log` VALUES (4857, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 04:16:00'); +INSERT INTO `sys_job_log` VALUES (4858, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:18毫秒', '0', '', '2025-01-08 04:16:00'); +INSERT INTO `sys_job_log` VALUES (4859, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:93毫秒', '0', '', '2025-01-08 04:16:00'); +INSERT INTO `sys_job_log` VALUES (4860, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:906毫秒', '0', '', '2025-01-08 04:16:00'); +INSERT INTO `sys_job_log` VALUES (4861, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 04:17:00'); +INSERT INTO `sys_job_log` VALUES (4862, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:41毫秒', '0', '', '2025-01-08 04:17:00'); +INSERT INTO `sys_job_log` VALUES (4863, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 04:18:00'); +INSERT INTO `sys_job_log` VALUES (4864, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:18毫秒', '0', '', '2025-01-08 04:18:00'); +INSERT INTO `sys_job_log` VALUES (4865, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:85毫秒', '0', '', '2025-01-08 04:18:00'); +INSERT INTO `sys_job_log` VALUES (4866, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:904毫秒', '0', '', '2025-01-08 04:18:00'); +INSERT INTO `sys_job_log` VALUES (4867, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 04:19:00'); +INSERT INTO `sys_job_log` VALUES (4868, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:46毫秒', '0', '', '2025-01-08 04:19:00'); +INSERT INTO `sys_job_log` VALUES (4869, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 04:20:00'); +INSERT INTO `sys_job_log` VALUES (4870, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:20毫秒', '0', '', '2025-01-08 04:20:00'); +INSERT INTO `sys_job_log` VALUES (4871, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:95毫秒', '0', '', '2025-01-08 04:20:00'); +INSERT INTO `sys_job_log` VALUES (4872, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:891毫秒', '0', '', '2025-01-08 04:20:00'); +INSERT INTO `sys_job_log` VALUES (4873, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 04:21:00'); +INSERT INTO `sys_job_log` VALUES (4874, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:31毫秒', '0', '', '2025-01-08 04:21:00'); +INSERT INTO `sys_job_log` VALUES (4875, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 04:22:00'); +INSERT INTO `sys_job_log` VALUES (4876, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:32毫秒', '0', '', '2025-01-08 04:22:00'); +INSERT INTO `sys_job_log` VALUES (4877, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:17毫秒', '0', '', '2025-01-08 04:22:00'); +INSERT INTO `sys_job_log` VALUES (4878, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:951毫秒', '0', '', '2025-01-08 04:22:00'); +INSERT INTO `sys_job_log` VALUES (4879, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 04:23:00'); +INSERT INTO `sys_job_log` VALUES (4880, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:46毫秒', '0', '', '2025-01-08 04:23:00'); +INSERT INTO `sys_job_log` VALUES (4881, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 04:24:00'); +INSERT INTO `sys_job_log` VALUES (4882, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:20毫秒', '0', '', '2025-01-08 04:24:00'); +INSERT INTO `sys_job_log` VALUES (4883, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:94毫秒', '0', '', '2025-01-08 04:24:00'); +INSERT INTO `sys_job_log` VALUES (4884, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:908毫秒', '0', '', '2025-01-08 04:24:00'); +INSERT INTO `sys_job_log` VALUES (4885, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 04:25:00'); +INSERT INTO `sys_job_log` VALUES (4886, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:46毫秒', '0', '', '2025-01-08 04:25:00'); +INSERT INTO `sys_job_log` VALUES (4887, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 04:26:00'); +INSERT INTO `sys_job_log` VALUES (4888, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:49毫秒', '0', '', '2025-01-08 04:26:00'); +INSERT INTO `sys_job_log` VALUES (4889, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:27毫秒', '0', '', '2025-01-08 04:26:00'); +INSERT INTO `sys_job_log` VALUES (4890, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:937毫秒', '0', '', '2025-01-08 04:26:00'); +INSERT INTO `sys_job_log` VALUES (4891, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 04:27:00'); +INSERT INTO `sys_job_log` VALUES (4892, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:31毫秒', '0', '', '2025-01-08 04:27:00'); +INSERT INTO `sys_job_log` VALUES (4893, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 04:28:00'); +INSERT INTO `sys_job_log` VALUES (4894, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:18毫秒', '0', '', '2025-01-08 04:28:00'); +INSERT INTO `sys_job_log` VALUES (4895, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:94毫秒', '0', '', '2025-01-08 04:28:00'); +INSERT INTO `sys_job_log` VALUES (4896, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:907毫秒', '0', '', '2025-01-08 04:28:00'); +INSERT INTO `sys_job_log` VALUES (4897, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 04:29:00'); +INSERT INTO `sys_job_log` VALUES (4898, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 04:29:00'); +INSERT INTO `sys_job_log` VALUES (4899, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 04:30:00'); +INSERT INTO `sys_job_log` VALUES (4900, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:18毫秒', '0', '', '2025-01-08 04:30:00'); +INSERT INTO `sys_job_log` VALUES (4901, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:95毫秒', '0', '', '2025-01-08 04:30:00'); +INSERT INTO `sys_job_log` VALUES (4902, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:904毫秒', '0', '', '2025-01-08 04:30:00'); +INSERT INTO `sys_job_log` VALUES (4903, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 04:31:00'); +INSERT INTO `sys_job_log` VALUES (4904, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:49毫秒', '0', '', '2025-01-08 04:31:00'); +INSERT INTO `sys_job_log` VALUES (4905, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 04:32:00'); +INSERT INTO `sys_job_log` VALUES (4906, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:18毫秒', '0', '', '2025-01-08 04:32:00'); +INSERT INTO `sys_job_log` VALUES (4907, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:78毫秒', '0', '', '2025-01-08 04:32:00'); +INSERT INTO `sys_job_log` VALUES (4908, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:904毫秒', '0', '', '2025-01-08 04:32:00'); +INSERT INTO `sys_job_log` VALUES (4909, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 04:33:00'); +INSERT INTO `sys_job_log` VALUES (4910, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 04:33:00'); +INSERT INTO `sys_job_log` VALUES (4911, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 04:34:00'); +INSERT INTO `sys_job_log` VALUES (4912, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:18毫秒', '0', '', '2025-01-08 04:34:00'); +INSERT INTO `sys_job_log` VALUES (4913, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:94毫秒', '0', '', '2025-01-08 04:34:00'); +INSERT INTO `sys_job_log` VALUES (4914, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:908毫秒', '0', '', '2025-01-08 04:34:00'); +INSERT INTO `sys_job_log` VALUES (4915, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 04:35:00'); +INSERT INTO `sys_job_log` VALUES (4916, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:31毫秒', '0', '', '2025-01-08 04:35:00'); +INSERT INTO `sys_job_log` VALUES (4917, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 04:36:00'); +INSERT INTO `sys_job_log` VALUES (4918, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:18毫秒', '0', '', '2025-01-08 04:36:00'); +INSERT INTO `sys_job_log` VALUES (4919, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 04:36:00'); +INSERT INTO `sys_job_log` VALUES (4920, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:953毫秒', '0', '', '2025-01-08 04:36:00'); +INSERT INTO `sys_job_log` VALUES (4921, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 04:37:00'); +INSERT INTO `sys_job_log` VALUES (4922, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 04:37:00'); +INSERT INTO `sys_job_log` VALUES (4923, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 04:38:00'); +INSERT INTO `sys_job_log` VALUES (4924, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:17毫秒', '0', '', '2025-01-08 04:38:00'); +INSERT INTO `sys_job_log` VALUES (4925, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:66毫秒', '0', '', '2025-01-08 04:38:00'); +INSERT INTO `sys_job_log` VALUES (4926, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:997毫秒', '0', '', '2025-01-08 04:38:00'); +INSERT INTO `sys_job_log` VALUES (4927, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 04:39:00'); +INSERT INTO `sys_job_log` VALUES (4928, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 04:39:00'); +INSERT INTO `sys_job_log` VALUES (4929, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 04:40:00'); +INSERT INTO `sys_job_log` VALUES (4930, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:19毫秒', '0', '', '2025-01-08 04:40:00'); +INSERT INTO `sys_job_log` VALUES (4931, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:96毫秒', '0', '', '2025-01-08 04:40:00'); +INSERT INTO `sys_job_log` VALUES (4932, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:907毫秒', '0', '', '2025-01-08 04:40:00'); +INSERT INTO `sys_job_log` VALUES (4933, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 04:41:00'); +INSERT INTO `sys_job_log` VALUES (4934, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:33毫秒', '0', '', '2025-01-08 04:41:00'); +INSERT INTO `sys_job_log` VALUES (4935, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 04:42:00'); +INSERT INTO `sys_job_log` VALUES (4936, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:18毫秒', '0', '', '2025-01-08 04:42:00'); +INSERT INTO `sys_job_log` VALUES (4937, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:79毫秒', '0', '', '2025-01-08 04:42:00'); +INSERT INTO `sys_job_log` VALUES (4938, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:910毫秒', '0', '', '2025-01-08 04:42:00'); +INSERT INTO `sys_job_log` VALUES (4939, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 04:43:00'); +INSERT INTO `sys_job_log` VALUES (4940, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:31毫秒', '0', '', '2025-01-08 04:43:00'); +INSERT INTO `sys_job_log` VALUES (4941, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 04:44:00'); +INSERT INTO `sys_job_log` VALUES (4942, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:19毫秒', '0', '', '2025-01-08 04:44:00'); +INSERT INTO `sys_job_log` VALUES (4943, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 04:44:00'); +INSERT INTO `sys_job_log` VALUES (4944, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:938毫秒', '0', '', '2025-01-08 04:44:00'); +INSERT INTO `sys_job_log` VALUES (4945, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 04:45:00'); +INSERT INTO `sys_job_log` VALUES (4946, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:31毫秒', '0', '', '2025-01-08 04:45:00'); +INSERT INTO `sys_job_log` VALUES (4947, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 04:46:00'); +INSERT INTO `sys_job_log` VALUES (4948, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:20毫秒', '0', '', '2025-01-08 04:46:00'); +INSERT INTO `sys_job_log` VALUES (4949, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:80毫秒', '0', '', '2025-01-08 04:46:00'); +INSERT INTO `sys_job_log` VALUES (4950, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:908毫秒', '0', '', '2025-01-08 04:46:00'); +INSERT INTO `sys_job_log` VALUES (4951, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 04:47:00'); +INSERT INTO `sys_job_log` VALUES (4952, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:42毫秒', '0', '', '2025-01-08 04:47:00'); +INSERT INTO `sys_job_log` VALUES (4953, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 04:48:00'); +INSERT INTO `sys_job_log` VALUES (4954, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:31毫秒', '0', '', '2025-01-08 04:48:00'); +INSERT INTO `sys_job_log` VALUES (4955, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:19毫秒', '0', '', '2025-01-08 04:48:00'); +INSERT INTO `sys_job_log` VALUES (4956, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:952毫秒', '0', '', '2025-01-08 04:48:00'); +INSERT INTO `sys_job_log` VALUES (4957, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 04:49:00'); +INSERT INTO `sys_job_log` VALUES (4958, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:46毫秒', '0', '', '2025-01-08 04:49:00'); +INSERT INTO `sys_job_log` VALUES (4959, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 04:50:00'); +INSERT INTO `sys_job_log` VALUES (4960, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:20毫秒', '0', '', '2025-01-08 04:50:00'); +INSERT INTO `sys_job_log` VALUES (4961, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:78毫秒', '0', '', '2025-01-08 04:50:00'); +INSERT INTO `sys_job_log` VALUES (4962, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:906毫秒', '0', '', '2025-01-08 04:50:00'); +INSERT INTO `sys_job_log` VALUES (4963, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 04:51:00'); +INSERT INTO `sys_job_log` VALUES (4964, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:46毫秒', '0', '', '2025-01-08 04:51:00'); +INSERT INTO `sys_job_log` VALUES (4965, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 04:52:00'); +INSERT INTO `sys_job_log` VALUES (4966, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:18毫秒', '0', '', '2025-01-08 04:52:00'); +INSERT INTO `sys_job_log` VALUES (4967, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:79毫秒', '0', '', '2025-01-08 04:52:00'); +INSERT INTO `sys_job_log` VALUES (4968, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:906毫秒', '0', '', '2025-01-08 04:52:00'); +INSERT INTO `sys_job_log` VALUES (4969, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 04:53:00'); +INSERT INTO `sys_job_log` VALUES (4970, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:48毫秒', '0', '', '2025-01-08 04:53:00'); +INSERT INTO `sys_job_log` VALUES (4971, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 04:54:00'); +INSERT INTO `sys_job_log` VALUES (4972, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:18毫秒', '0', '', '2025-01-08 04:54:00'); +INSERT INTO `sys_job_log` VALUES (4973, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:93毫秒', '0', '', '2025-01-08 04:54:00'); +INSERT INTO `sys_job_log` VALUES (4974, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:905毫秒', '0', '', '2025-01-08 04:54:00'); +INSERT INTO `sys_job_log` VALUES (4975, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 04:55:00'); +INSERT INTO `sys_job_log` VALUES (4976, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 04:55:00'); +INSERT INTO `sys_job_log` VALUES (4977, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 04:56:00'); +INSERT INTO `sys_job_log` VALUES (4978, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:18毫秒', '0', '', '2025-01-08 04:56:00'); +INSERT INTO `sys_job_log` VALUES (4979, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:93毫秒', '0', '', '2025-01-08 04:56:00'); +INSERT INTO `sys_job_log` VALUES (4980, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:906毫秒', '0', '', '2025-01-08 04:56:00'); +INSERT INTO `sys_job_log` VALUES (4981, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 04:57:00'); +INSERT INTO `sys_job_log` VALUES (4982, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 04:57:00'); +INSERT INTO `sys_job_log` VALUES (4983, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 04:58:00'); +INSERT INTO `sys_job_log` VALUES (4984, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:17毫秒', '0', '', '2025-01-08 04:58:00'); +INSERT INTO `sys_job_log` VALUES (4985, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:94毫秒', '0', '', '2025-01-08 04:58:00'); +INSERT INTO `sys_job_log` VALUES (4986, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:907毫秒', '0', '', '2025-01-08 04:58:00'); +INSERT INTO `sys_job_log` VALUES (4987, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 04:59:00'); +INSERT INTO `sys_job_log` VALUES (4988, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:46毫秒', '0', '', '2025-01-08 04:59:00'); +INSERT INTO `sys_job_log` VALUES (4989, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 05:00:00'); +INSERT INTO `sys_job_log` VALUES (4990, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:18毫秒', '0', '', '2025-01-08 05:00:00'); +INSERT INTO `sys_job_log` VALUES (4991, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:78毫秒', '0', '', '2025-01-08 05:00:00'); +INSERT INTO `sys_job_log` VALUES (4992, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:907毫秒', '0', '', '2025-01-08 05:00:00'); +INSERT INTO `sys_job_log` VALUES (4993, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 05:01:00'); +INSERT INTO `sys_job_log` VALUES (4994, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:31毫秒', '0', '', '2025-01-08 05:01:00'); +INSERT INTO `sys_job_log` VALUES (4995, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 05:02:00'); +INSERT INTO `sys_job_log` VALUES (4996, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:18毫秒', '0', '', '2025-01-08 05:02:00'); +INSERT INTO `sys_job_log` VALUES (4997, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:93毫秒', '0', '', '2025-01-08 05:02:00'); +INSERT INTO `sys_job_log` VALUES (4998, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:891毫秒', '0', '', '2025-01-08 05:02:00'); +INSERT INTO `sys_job_log` VALUES (4999, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 05:03:00'); +INSERT INTO `sys_job_log` VALUES (5000, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 05:03:00'); +INSERT INTO `sys_job_log` VALUES (5001, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 05:04:00'); +INSERT INTO `sys_job_log` VALUES (5002, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:17毫秒', '0', '', '2025-01-08 05:04:00'); +INSERT INTO `sys_job_log` VALUES (5003, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:93毫秒', '0', '', '2025-01-08 05:04:00'); +INSERT INTO `sys_job_log` VALUES (5004, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:906毫秒', '0', '', '2025-01-08 05:04:00'); +INSERT INTO `sys_job_log` VALUES (5005, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 05:05:00'); +INSERT INTO `sys_job_log` VALUES (5006, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:48毫秒', '0', '', '2025-01-08 05:05:00'); +INSERT INTO `sys_job_log` VALUES (5007, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 05:06:00'); +INSERT INTO `sys_job_log` VALUES (5008, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:18毫秒', '0', '', '2025-01-08 05:06:00'); +INSERT INTO `sys_job_log` VALUES (5009, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:78毫秒', '0', '', '2025-01-08 05:06:00'); +INSERT INTO `sys_job_log` VALUES (5010, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:908毫秒', '0', '', '2025-01-08 05:06:00'); +INSERT INTO `sys_job_log` VALUES (5011, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 05:07:00'); +INSERT INTO `sys_job_log` VALUES (5012, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:46毫秒', '0', '', '2025-01-08 05:07:00'); +INSERT INTO `sys_job_log` VALUES (5013, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 05:08:00'); +INSERT INTO `sys_job_log` VALUES (5014, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:18毫秒', '0', '', '2025-01-08 05:08:00'); +INSERT INTO `sys_job_log` VALUES (5015, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:78毫秒', '0', '', '2025-01-08 05:08:00'); +INSERT INTO `sys_job_log` VALUES (5016, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:911毫秒', '0', '', '2025-01-08 05:08:00'); +INSERT INTO `sys_job_log` VALUES (5017, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 05:09:00'); +INSERT INTO `sys_job_log` VALUES (5018, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:31毫秒', '0', '', '2025-01-08 05:09:00'); +INSERT INTO `sys_job_log` VALUES (5019, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 05:10:00'); +INSERT INTO `sys_job_log` VALUES (5020, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:19毫秒', '0', '', '2025-01-08 05:10:00'); +INSERT INTO `sys_job_log` VALUES (5021, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 05:10:00'); +INSERT INTO `sys_job_log` VALUES (5022, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:938毫秒', '0', '', '2025-01-08 05:10:00'); +INSERT INTO `sys_job_log` VALUES (5023, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 05:11:00'); +INSERT INTO `sys_job_log` VALUES (5024, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:31毫秒', '0', '', '2025-01-08 05:11:00'); +INSERT INTO `sys_job_log` VALUES (5025, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 05:12:00'); +INSERT INTO `sys_job_log` VALUES (5026, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:17毫秒', '0', '', '2025-01-08 05:12:00'); +INSERT INTO `sys_job_log` VALUES (5027, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:94毫秒', '0', '', '2025-01-08 05:12:00'); +INSERT INTO `sys_job_log` VALUES (5028, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:914毫秒', '0', '', '2025-01-08 05:12:00'); +INSERT INTO `sys_job_log` VALUES (5029, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 05:13:00'); +INSERT INTO `sys_job_log` VALUES (5030, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 05:13:00'); +INSERT INTO `sys_job_log` VALUES (5031, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 05:14:00'); +INSERT INTO `sys_job_log` VALUES (5032, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:17毫秒', '0', '', '2025-01-08 05:14:00'); +INSERT INTO `sys_job_log` VALUES (5033, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:92毫秒', '0', '', '2025-01-08 05:14:00'); +INSERT INTO `sys_job_log` VALUES (5034, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:904毫秒', '0', '', '2025-01-08 05:14:00'); +INSERT INTO `sys_job_log` VALUES (5035, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 05:15:00'); +INSERT INTO `sys_job_log` VALUES (5036, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:31毫秒', '0', '', '2025-01-08 05:15:00'); +INSERT INTO `sys_job_log` VALUES (5037, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 05:16:00'); +INSERT INTO `sys_job_log` VALUES (5038, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 05:16:00'); +INSERT INTO `sys_job_log` VALUES (5039, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:17毫秒', '0', '', '2025-01-08 05:16:00'); +INSERT INTO `sys_job_log` VALUES (5040, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:938毫秒', '0', '', '2025-01-08 05:16:00'); +INSERT INTO `sys_job_log` VALUES (5041, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 05:17:00'); +INSERT INTO `sys_job_log` VALUES (5042, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 05:17:00'); +INSERT INTO `sys_job_log` VALUES (5043, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 05:18:00'); +INSERT INTO `sys_job_log` VALUES (5044, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:48毫秒', '0', '', '2025-01-08 05:18:00'); +INSERT INTO `sys_job_log` VALUES (5045, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:18毫秒', '0', '', '2025-01-08 05:18:00'); +INSERT INTO `sys_job_log` VALUES (5046, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:938毫秒', '0', '', '2025-01-08 05:18:00'); +INSERT INTO `sys_job_log` VALUES (5047, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 05:19:00'); +INSERT INTO `sys_job_log` VALUES (5048, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:32毫秒', '0', '', '2025-01-08 05:19:00'); +INSERT INTO `sys_job_log` VALUES (5049, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 05:20:00'); +INSERT INTO `sys_job_log` VALUES (5050, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 05:20:00'); +INSERT INTO `sys_job_log` VALUES (5051, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:19毫秒', '0', '', '2025-01-08 05:20:00'); +INSERT INTO `sys_job_log` VALUES (5052, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:951毫秒', '0', '', '2025-01-08 05:20:00'); +INSERT INTO `sys_job_log` VALUES (5053, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 05:21:00'); +INSERT INTO `sys_job_log` VALUES (5054, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:32毫秒', '0', '', '2025-01-08 05:21:00'); +INSERT INTO `sys_job_log` VALUES (5055, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 05:22:00'); +INSERT INTO `sys_job_log` VALUES (5056, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:31毫秒', '0', '', '2025-01-08 05:22:00'); +INSERT INTO `sys_job_log` VALUES (5057, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:18毫秒', '0', '', '2025-01-08 05:22:00'); +INSERT INTO `sys_job_log` VALUES (5058, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:953毫秒', '0', '', '2025-01-08 05:22:00'); +INSERT INTO `sys_job_log` VALUES (5059, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 05:23:00'); +INSERT INTO `sys_job_log` VALUES (5060, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 05:23:00'); +INSERT INTO `sys_job_log` VALUES (5061, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 05:24:00'); +INSERT INTO `sys_job_log` VALUES (5062, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:19毫秒', '0', '', '2025-01-08 05:24:00'); +INSERT INTO `sys_job_log` VALUES (5063, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:93毫秒', '0', '', '2025-01-08 05:24:00'); +INSERT INTO `sys_job_log` VALUES (5064, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:891毫秒', '0', '', '2025-01-08 05:24:00'); +INSERT INTO `sys_job_log` VALUES (5065, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 05:25:00'); +INSERT INTO `sys_job_log` VALUES (5066, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 05:25:00'); +INSERT INTO `sys_job_log` VALUES (5067, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 05:26:00'); +INSERT INTO `sys_job_log` VALUES (5068, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:19毫秒', '0', '', '2025-01-08 05:26:00'); +INSERT INTO `sys_job_log` VALUES (5069, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:94毫秒', '0', '', '2025-01-08 05:26:00'); +INSERT INTO `sys_job_log` VALUES (5070, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:906毫秒', '0', '', '2025-01-08 05:26:00'); +INSERT INTO `sys_job_log` VALUES (5071, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 05:27:00'); +INSERT INTO `sys_job_log` VALUES (5072, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 05:27:00'); +INSERT INTO `sys_job_log` VALUES (5073, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 05:28:00'); +INSERT INTO `sys_job_log` VALUES (5074, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 05:28:00'); +INSERT INTO `sys_job_log` VALUES (5075, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:20毫秒', '0', '', '2025-01-08 05:28:00'); +INSERT INTO `sys_job_log` VALUES (5076, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:951毫秒', '0', '', '2025-01-08 05:28:00'); +INSERT INTO `sys_job_log` VALUES (5077, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 05:29:00'); +INSERT INTO `sys_job_log` VALUES (5078, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:31毫秒', '0', '', '2025-01-08 05:29:00'); +INSERT INTO `sys_job_log` VALUES (5079, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 05:30:00'); +INSERT INTO `sys_job_log` VALUES (5080, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:17毫秒', '0', '', '2025-01-08 05:30:00'); +INSERT INTO `sys_job_log` VALUES (5081, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:94毫秒', '0', '', '2025-01-08 05:30:00'); +INSERT INTO `sys_job_log` VALUES (5082, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:891毫秒', '0', '', '2025-01-08 05:30:00'); +INSERT INTO `sys_job_log` VALUES (5083, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 05:31:00'); +INSERT INTO `sys_job_log` VALUES (5084, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:32毫秒', '0', '', '2025-01-08 05:31:00'); +INSERT INTO `sys_job_log` VALUES (5085, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 05:32:00'); +INSERT INTO `sys_job_log` VALUES (5086, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:20毫秒', '0', '', '2025-01-08 05:32:00'); +INSERT INTO `sys_job_log` VALUES (5087, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:95毫秒', '0', '', '2025-01-08 05:32:00'); +INSERT INTO `sys_job_log` VALUES (5088, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:907毫秒', '0', '', '2025-01-08 05:32:00'); +INSERT INTO `sys_job_log` VALUES (5089, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:31毫秒', '0', '', '2025-01-08 05:33:00'); +INSERT INTO `sys_job_log` VALUES (5090, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 05:33:00'); +INSERT INTO `sys_job_log` VALUES (5091, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 05:34:00'); +INSERT INTO `sys_job_log` VALUES (5092, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:18毫秒', '0', '', '2025-01-08 05:34:00'); +INSERT INTO `sys_job_log` VALUES (5093, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:85毫秒', '0', '', '2025-01-08 05:34:00'); +INSERT INTO `sys_job_log` VALUES (5094, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:905毫秒', '0', '', '2025-01-08 05:34:00'); +INSERT INTO `sys_job_log` VALUES (5095, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 05:35:00'); +INSERT INTO `sys_job_log` VALUES (5096, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 05:35:00'); +INSERT INTO `sys_job_log` VALUES (5097, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 05:36:00'); +INSERT INTO `sys_job_log` VALUES (5098, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:17毫秒', '0', '', '2025-01-08 05:36:00'); +INSERT INTO `sys_job_log` VALUES (5099, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:78毫秒', '0', '', '2025-01-08 05:36:00'); +INSERT INTO `sys_job_log` VALUES (5100, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:891毫秒', '0', '', '2025-01-08 05:36:00'); +INSERT INTO `sys_job_log` VALUES (5101, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 05:37:00'); +INSERT INTO `sys_job_log` VALUES (5102, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 05:37:00'); +INSERT INTO `sys_job_log` VALUES (5103, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 05:38:00'); +INSERT INTO `sys_job_log` VALUES (5104, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 05:38:00'); +INSERT INTO `sys_job_log` VALUES (5105, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:18毫秒', '0', '', '2025-01-08 05:38:00'); +INSERT INTO `sys_job_log` VALUES (5106, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:945毫秒', '0', '', '2025-01-08 05:38:00'); +INSERT INTO `sys_job_log` VALUES (5107, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 05:39:00'); +INSERT INTO `sys_job_log` VALUES (5108, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 05:39:00'); +INSERT INTO `sys_job_log` VALUES (5109, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 05:40:00'); +INSERT INTO `sys_job_log` VALUES (5110, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:18毫秒', '0', '', '2025-01-08 05:40:00'); +INSERT INTO `sys_job_log` VALUES (5111, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:79毫秒', '0', '', '2025-01-08 05:40:00'); +INSERT INTO `sys_job_log` VALUES (5112, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:907毫秒', '0', '', '2025-01-08 05:40:00'); +INSERT INTO `sys_job_log` VALUES (5113, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 05:41:00'); +INSERT INTO `sys_job_log` VALUES (5114, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:31毫秒', '0', '', '2025-01-08 05:41:00'); +INSERT INTO `sys_job_log` VALUES (5115, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 05:42:00'); +INSERT INTO `sys_job_log` VALUES (5116, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:18毫秒', '0', '', '2025-01-08 05:42:00'); +INSERT INTO `sys_job_log` VALUES (5117, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:94毫秒', '0', '', '2025-01-08 05:42:00'); +INSERT INTO `sys_job_log` VALUES (5118, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:891毫秒', '0', '', '2025-01-08 05:42:00'); +INSERT INTO `sys_job_log` VALUES (5119, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 05:43:00'); +INSERT INTO `sys_job_log` VALUES (5120, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:49毫秒', '0', '', '2025-01-08 05:43:00'); +INSERT INTO `sys_job_log` VALUES (5121, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 05:44:00'); +INSERT INTO `sys_job_log` VALUES (5122, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:21毫秒', '0', '', '2025-01-08 05:44:00'); +INSERT INTO `sys_job_log` VALUES (5123, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:94毫秒', '0', '', '2025-01-08 05:44:00'); +INSERT INTO `sys_job_log` VALUES (5124, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:908毫秒', '0', '', '2025-01-08 05:44:00'); +INSERT INTO `sys_job_log` VALUES (5125, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 05:45:00'); +INSERT INTO `sys_job_log` VALUES (5126, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:31毫秒', '0', '', '2025-01-08 05:45:00'); +INSERT INTO `sys_job_log` VALUES (5127, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 05:46:00'); +INSERT INTO `sys_job_log` VALUES (5128, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:17毫秒', '0', '', '2025-01-08 05:46:00'); +INSERT INTO `sys_job_log` VALUES (5129, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:78毫秒', '0', '', '2025-01-08 05:46:00'); +INSERT INTO `sys_job_log` VALUES (5130, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:890毫秒', '0', '', '2025-01-08 05:46:00'); +INSERT INTO `sys_job_log` VALUES (5131, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 05:47:00'); +INSERT INTO `sys_job_log` VALUES (5132, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:43毫秒', '0', '', '2025-01-08 05:47:00'); +INSERT INTO `sys_job_log` VALUES (5133, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 05:48:00'); +INSERT INTO `sys_job_log` VALUES (5134, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:18毫秒', '0', '', '2025-01-08 05:48:00'); +INSERT INTO `sys_job_log` VALUES (5135, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:94毫秒', '0', '', '2025-01-08 05:48:00'); +INSERT INTO `sys_job_log` VALUES (5136, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:907毫秒', '0', '', '2025-01-08 05:48:00'); +INSERT INTO `sys_job_log` VALUES (5137, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 05:49:00'); +INSERT INTO `sys_job_log` VALUES (5138, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:46毫秒', '0', '', '2025-01-08 05:49:00'); +INSERT INTO `sys_job_log` VALUES (5139, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 05:50:00'); +INSERT INTO `sys_job_log` VALUES (5140, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 05:50:00'); +INSERT INTO `sys_job_log` VALUES (5141, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:20毫秒', '0', '', '2025-01-08 05:50:00'); +INSERT INTO `sys_job_log` VALUES (5142, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:938毫秒', '0', '', '2025-01-08 05:50:00'); +INSERT INTO `sys_job_log` VALUES (5143, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 05:51:00'); +INSERT INTO `sys_job_log` VALUES (5144, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 05:51:00'); +INSERT INTO `sys_job_log` VALUES (5145, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 05:52:00'); +INSERT INTO `sys_job_log` VALUES (5146, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:18毫秒', '0', '', '2025-01-08 05:52:00'); +INSERT INTO `sys_job_log` VALUES (5147, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:78毫秒', '0', '', '2025-01-08 05:52:00'); +INSERT INTO `sys_job_log` VALUES (5148, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:891毫秒', '0', '', '2025-01-08 05:52:00'); +INSERT INTO `sys_job_log` VALUES (5149, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 05:53:00'); +INSERT INTO `sys_job_log` VALUES (5150, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:32毫秒', '0', '', '2025-01-08 05:53:00'); +INSERT INTO `sys_job_log` VALUES (5151, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 05:54:00'); +INSERT INTO `sys_job_log` VALUES (5152, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 05:54:00'); +INSERT INTO `sys_job_log` VALUES (5153, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:17毫秒', '0', '', '2025-01-08 05:54:00'); +INSERT INTO `sys_job_log` VALUES (5154, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:954毫秒', '0', '', '2025-01-08 05:54:00'); +INSERT INTO `sys_job_log` VALUES (5155, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 05:55:00'); +INSERT INTO `sys_job_log` VALUES (5156, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 05:55:00'); +INSERT INTO `sys_job_log` VALUES (5157, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 05:56:00'); +INSERT INTO `sys_job_log` VALUES (5158, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 05:56:00'); +INSERT INTO `sys_job_log` VALUES (5159, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:18毫秒', '0', '', '2025-01-08 05:56:00'); +INSERT INTO `sys_job_log` VALUES (5160, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:948毫秒', '0', '', '2025-01-08 05:56:00'); +INSERT INTO `sys_job_log` VALUES (5161, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 05:57:00'); +INSERT INTO `sys_job_log` VALUES (5162, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:48毫秒', '0', '', '2025-01-08 05:57:00'); +INSERT INTO `sys_job_log` VALUES (5163, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 05:58:00'); +INSERT INTO `sys_job_log` VALUES (5164, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 05:58:00'); +INSERT INTO `sys_job_log` VALUES (5165, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:19毫秒', '0', '', '2025-01-08 05:58:00'); +INSERT INTO `sys_job_log` VALUES (5166, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:954毫秒', '0', '', '2025-01-08 05:58:00'); +INSERT INTO `sys_job_log` VALUES (5167, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 05:59:00'); +INSERT INTO `sys_job_log` VALUES (5168, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:46毫秒', '0', '', '2025-01-08 05:59:00'); +INSERT INTO `sys_job_log` VALUES (5169, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 06:00:00'); +INSERT INTO `sys_job_log` VALUES (5170, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 06:00:00'); +INSERT INTO `sys_job_log` VALUES (5171, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:17毫秒', '0', '', '2025-01-08 06:00:00'); +INSERT INTO `sys_job_log` VALUES (5172, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:953毫秒', '0', '', '2025-01-08 06:00:00'); +INSERT INTO `sys_job_log` VALUES (5173, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 06:01:00'); +INSERT INTO `sys_job_log` VALUES (5174, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:52毫秒', '0', '', '2025-01-08 06:01:00'); +INSERT INTO `sys_job_log` VALUES (5175, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 06:02:00'); +INSERT INTO `sys_job_log` VALUES (5176, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:20毫秒', '0', '', '2025-01-08 06:02:00'); +INSERT INTO `sys_job_log` VALUES (5177, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:96毫秒', '0', '', '2025-01-08 06:02:00'); +INSERT INTO `sys_job_log` VALUES (5178, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:907毫秒', '0', '', '2025-01-08 06:02:00'); +INSERT INTO `sys_job_log` VALUES (5179, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:30毫秒', '0', '', '2025-01-08 06:03:00'); +INSERT INTO `sys_job_log` VALUES (5180, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 06:03:00'); +INSERT INTO `sys_job_log` VALUES (5181, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 06:04:00'); +INSERT INTO `sys_job_log` VALUES (5182, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 06:04:00'); +INSERT INTO `sys_job_log` VALUES (5183, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:19毫秒', '0', '', '2025-01-08 06:04:00'); +INSERT INTO `sys_job_log` VALUES (5184, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:954毫秒', '0', '', '2025-01-08 06:04:00'); +INSERT INTO `sys_job_log` VALUES (5185, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 06:05:00'); +INSERT INTO `sys_job_log` VALUES (5186, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:54毫秒', '0', '', '2025-01-08 06:05:00'); +INSERT INTO `sys_job_log` VALUES (5187, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 06:06:00'); +INSERT INTO `sys_job_log` VALUES (5188, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:18毫秒', '0', '', '2025-01-08 06:06:00'); +INSERT INTO `sys_job_log` VALUES (5189, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:78毫秒', '0', '', '2025-01-08 06:06:00'); +INSERT INTO `sys_job_log` VALUES (5190, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:905毫秒', '0', '', '2025-01-08 06:06:00'); +INSERT INTO `sys_job_log` VALUES (5191, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 06:07:00'); +INSERT INTO `sys_job_log` VALUES (5192, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:31毫秒', '0', '', '2025-01-08 06:07:00'); +INSERT INTO `sys_job_log` VALUES (5193, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 06:08:00'); +INSERT INTO `sys_job_log` VALUES (5194, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:18毫秒', '0', '', '2025-01-08 06:08:00'); +INSERT INTO `sys_job_log` VALUES (5195, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:78毫秒', '0', '', '2025-01-08 06:08:00'); +INSERT INTO `sys_job_log` VALUES (5196, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:906毫秒', '0', '', '2025-01-08 06:08:00'); +INSERT INTO `sys_job_log` VALUES (5197, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 06:09:00'); +INSERT INTO `sys_job_log` VALUES (5198, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:34毫秒', '0', '', '2025-01-08 06:09:00'); +INSERT INTO `sys_job_log` VALUES (5199, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 06:10:00'); +INSERT INTO `sys_job_log` VALUES (5200, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:18毫秒', '0', '', '2025-01-08 06:10:00'); +INSERT INTO `sys_job_log` VALUES (5201, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:84毫秒', '0', '', '2025-01-08 06:10:00'); +INSERT INTO `sys_job_log` VALUES (5202, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:912毫秒', '0', '', '2025-01-08 06:10:00'); +INSERT INTO `sys_job_log` VALUES (5203, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 06:11:00'); +INSERT INTO `sys_job_log` VALUES (5204, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:44毫秒', '0', '', '2025-01-08 06:11:00'); +INSERT INTO `sys_job_log` VALUES (5205, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 06:12:00'); +INSERT INTO `sys_job_log` VALUES (5206, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:17毫秒', '0', '', '2025-01-08 06:12:00'); +INSERT INTO `sys_job_log` VALUES (5207, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:79毫秒', '0', '', '2025-01-08 06:12:00'); +INSERT INTO `sys_job_log` VALUES (5208, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:907毫秒', '0', '', '2025-01-08 06:12:00'); +INSERT INTO `sys_job_log` VALUES (5209, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2025-01-08 06:13:00'); +INSERT INTO `sys_job_log` VALUES (5210, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 06:13:00'); +INSERT INTO `sys_job_log` VALUES (5211, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 06:14:00'); +INSERT INTO `sys_job_log` VALUES (5212, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:18毫秒', '0', '', '2025-01-08 06:14:00'); +INSERT INTO `sys_job_log` VALUES (5213, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:79毫秒', '0', '', '2025-01-08 06:14:00'); +INSERT INTO `sys_job_log` VALUES (5214, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:907毫秒', '0', '', '2025-01-08 06:14:00'); +INSERT INTO `sys_job_log` VALUES (5215, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 06:15:00'); +INSERT INTO `sys_job_log` VALUES (5216, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:48毫秒', '0', '', '2025-01-08 06:15:00'); +INSERT INTO `sys_job_log` VALUES (5217, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 06:16:00'); +INSERT INTO `sys_job_log` VALUES (5218, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:21毫秒', '0', '', '2025-01-08 06:16:00'); +INSERT INTO `sys_job_log` VALUES (5219, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:78毫秒', '0', '', '2025-01-08 06:16:00'); +INSERT INTO `sys_job_log` VALUES (5220, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:901毫秒', '0', '', '2025-01-08 06:16:00'); +INSERT INTO `sys_job_log` VALUES (5221, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:31毫秒', '0', '', '2025-01-08 06:17:00'); +INSERT INTO `sys_job_log` VALUES (5222, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 06:17:00'); +INSERT INTO `sys_job_log` VALUES (5223, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 06:18:00'); +INSERT INTO `sys_job_log` VALUES (5224, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:18毫秒', '0', '', '2025-01-08 06:18:00'); +INSERT INTO `sys_job_log` VALUES (5225, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:78毫秒', '0', '', '2025-01-08 06:18:00'); +INSERT INTO `sys_job_log` VALUES (5226, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:906毫秒', '0', '', '2025-01-08 06:18:00'); +INSERT INTO `sys_job_log` VALUES (5227, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:31毫秒', '0', '', '2025-01-08 06:19:00'); +INSERT INTO `sys_job_log` VALUES (5228, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 06:19:00'); +INSERT INTO `sys_job_log` VALUES (5229, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 06:20:00'); +INSERT INTO `sys_job_log` VALUES (5230, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:17毫秒', '0', '', '2025-01-08 06:20:00'); +INSERT INTO `sys_job_log` VALUES (5231, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:79毫秒', '0', '', '2025-01-08 06:20:00'); +INSERT INTO `sys_job_log` VALUES (5232, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:907毫秒', '0', '', '2025-01-08 06:20:00'); +INSERT INTO `sys_job_log` VALUES (5233, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:32毫秒', '0', '', '2025-01-08 06:21:00'); +INSERT INTO `sys_job_log` VALUES (5234, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 06:21:00'); +INSERT INTO `sys_job_log` VALUES (5235, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 06:22:00'); +INSERT INTO `sys_job_log` VALUES (5236, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:17毫秒', '0', '', '2025-01-08 06:22:00'); +INSERT INTO `sys_job_log` VALUES (5237, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:95毫秒', '0', '', '2025-01-08 06:22:00'); +INSERT INTO `sys_job_log` VALUES (5238, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:906毫秒', '0', '', '2025-01-08 06:22:00'); +INSERT INTO `sys_job_log` VALUES (5239, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:32毫秒', '0', '', '2025-01-08 06:22:59'); +INSERT INTO `sys_job_log` VALUES (5240, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 06:23:00'); +INSERT INTO `sys_job_log` VALUES (5241, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 06:24:00'); +INSERT INTO `sys_job_log` VALUES (5242, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:19毫秒', '0', '', '2025-01-08 06:24:00'); +INSERT INTO `sys_job_log` VALUES (5243, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:94毫秒', '0', '', '2025-01-08 06:24:00'); +INSERT INTO `sys_job_log` VALUES (5244, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:907毫秒', '0', '', '2025-01-08 06:24:00'); +INSERT INTO `sys_job_log` VALUES (5245, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 06:25:00'); +INSERT INTO `sys_job_log` VALUES (5246, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 06:25:00'); +INSERT INTO `sys_job_log` VALUES (5247, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 06:26:00'); +INSERT INTO `sys_job_log` VALUES (5248, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:19毫秒', '0', '', '2025-01-08 06:26:00'); +INSERT INTO `sys_job_log` VALUES (5249, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:94毫秒', '0', '', '2025-01-08 06:26:00'); +INSERT INTO `sys_job_log` VALUES (5250, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:891毫秒', '0', '', '2025-01-08 06:26:00'); +INSERT INTO `sys_job_log` VALUES (5251, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:46毫秒', '0', '', '2025-01-08 06:27:00'); +INSERT INTO `sys_job_log` VALUES (5252, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 06:27:00'); +INSERT INTO `sys_job_log` VALUES (5253, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 06:28:00'); +INSERT INTO `sys_job_log` VALUES (5254, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 06:28:00'); +INSERT INTO `sys_job_log` VALUES (5255, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:19毫秒', '0', '', '2025-01-08 06:28:00'); +INSERT INTO `sys_job_log` VALUES (5256, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:954毫秒', '0', '', '2025-01-08 06:28:00'); +INSERT INTO `sys_job_log` VALUES (5257, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 06:29:00'); +INSERT INTO `sys_job_log` VALUES (5258, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 06:29:00'); +INSERT INTO `sys_job_log` VALUES (5259, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 06:30:00'); +INSERT INTO `sys_job_log` VALUES (5260, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:19毫秒', '0', '', '2025-01-08 06:30:00'); +INSERT INTO `sys_job_log` VALUES (5261, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:77毫秒', '0', '', '2025-01-08 06:30:00'); +INSERT INTO `sys_job_log` VALUES (5262, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:904毫秒', '0', '', '2025-01-08 06:30:00'); +INSERT INTO `sys_job_log` VALUES (5263, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:31毫秒', '0', '', '2025-01-08 06:31:00'); +INSERT INTO `sys_job_log` VALUES (5264, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 06:31:00'); +INSERT INTO `sys_job_log` VALUES (5265, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 06:32:00'); +INSERT INTO `sys_job_log` VALUES (5266, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:18毫秒', '0', '', '2025-01-08 06:32:00'); +INSERT INTO `sys_job_log` VALUES (5267, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:110毫秒', '0', '', '2025-01-08 06:32:00'); +INSERT INTO `sys_job_log` VALUES (5268, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:947毫秒', '0', '', '2025-01-08 06:32:00'); +INSERT INTO `sys_job_log` VALUES (5269, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 06:33:00'); +INSERT INTO `sys_job_log` VALUES (5270, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 06:33:00'); +INSERT INTO `sys_job_log` VALUES (5271, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 06:34:00'); +INSERT INTO `sys_job_log` VALUES (5272, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:18毫秒', '0', '', '2025-01-08 06:34:00'); +INSERT INTO `sys_job_log` VALUES (5273, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:79毫秒', '0', '', '2025-01-08 06:34:00'); +INSERT INTO `sys_job_log` VALUES (5274, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:909毫秒', '0', '', '2025-01-08 06:34:00'); +INSERT INTO `sys_job_log` VALUES (5275, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 06:35:00'); +INSERT INTO `sys_job_log` VALUES (5276, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:46毫秒', '0', '', '2025-01-08 06:35:00'); +INSERT INTO `sys_job_log` VALUES (5277, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 06:36:00'); +INSERT INTO `sys_job_log` VALUES (5278, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 06:36:00'); +INSERT INTO `sys_job_log` VALUES (5279, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:20毫秒', '0', '', '2025-01-08 06:36:00'); +INSERT INTO `sys_job_log` VALUES (5280, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:954毫秒', '0', '', '2025-01-08 06:36:00'); +INSERT INTO `sys_job_log` VALUES (5281, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:32毫秒', '0', '', '2025-01-08 06:36:59'); +INSERT INTO `sys_job_log` VALUES (5282, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 06:37:00'); +INSERT INTO `sys_job_log` VALUES (5283, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:31毫秒', '0', '', '2025-01-08 06:37:59'); +INSERT INTO `sys_job_log` VALUES (5284, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 06:38:00'); +INSERT INTO `sys_job_log` VALUES (5285, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:19毫秒', '0', '', '2025-01-08 06:38:00'); +INSERT INTO `sys_job_log` VALUES (5286, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:954毫秒', '0', '', '2025-01-08 06:38:00'); +INSERT INTO `sys_job_log` VALUES (5287, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 06:38:59'); +INSERT INTO `sys_job_log` VALUES (5288, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 06:39:00'); +INSERT INTO `sys_job_log` VALUES (5289, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 06:39:59'); +INSERT INTO `sys_job_log` VALUES (5290, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 06:40:00'); +INSERT INTO `sys_job_log` VALUES (5291, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:23毫秒', '0', '', '2025-01-08 06:40:00'); +INSERT INTO `sys_job_log` VALUES (5292, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:948毫秒', '0', '', '2025-01-08 06:40:00'); +INSERT INTO `sys_job_log` VALUES (5293, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:32毫秒', '0', '', '2025-01-08 06:40:59'); +INSERT INTO `sys_job_log` VALUES (5294, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 06:41:00'); +INSERT INTO `sys_job_log` VALUES (5295, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 06:42:00'); +INSERT INTO `sys_job_log` VALUES (5296, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:18毫秒', '0', '', '2025-01-08 06:42:00'); +INSERT INTO `sys_job_log` VALUES (5297, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:78毫秒', '0', '', '2025-01-08 06:42:00'); +INSERT INTO `sys_job_log` VALUES (5298, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:891毫秒', '0', '', '2025-01-08 06:42:00'); +INSERT INTO `sys_job_log` VALUES (5299, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:31毫秒', '0', '', '2025-01-08 06:42:59'); +INSERT INTO `sys_job_log` VALUES (5300, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 06:43:00'); +INSERT INTO `sys_job_log` VALUES (5301, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 06:44:00'); +INSERT INTO `sys_job_log` VALUES (5302, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:18毫秒', '0', '', '2025-01-08 06:44:00'); +INSERT INTO `sys_job_log` VALUES (5303, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:95毫秒', '0', '', '2025-01-08 06:44:00'); +INSERT INTO `sys_job_log` VALUES (5304, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:891毫秒', '0', '', '2025-01-08 06:44:00'); +INSERT INTO `sys_job_log` VALUES (5305, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:31毫秒', '0', '', '2025-01-08 06:44:59'); +INSERT INTO `sys_job_log` VALUES (5306, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 06:45:00'); +INSERT INTO `sys_job_log` VALUES (5307, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 06:46:00'); +INSERT INTO `sys_job_log` VALUES (5308, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:18毫秒', '0', '', '2025-01-08 06:46:00'); +INSERT INTO `sys_job_log` VALUES (5309, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:96毫秒', '0', '', '2025-01-08 06:46:00'); +INSERT INTO `sys_job_log` VALUES (5310, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:891毫秒', '0', '', '2025-01-08 06:46:00'); +INSERT INTO `sys_job_log` VALUES (5311, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:34毫秒', '0', '', '2025-01-08 06:46:59'); +INSERT INTO `sys_job_log` VALUES (5312, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 06:47:00'); +INSERT INTO `sys_job_log` VALUES (5313, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 06:48:00'); +INSERT INTO `sys_job_log` VALUES (5314, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:18毫秒', '0', '', '2025-01-08 06:48:00'); +INSERT INTO `sys_job_log` VALUES (5315, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:94毫秒', '0', '', '2025-01-08 06:48:00'); +INSERT INTO `sys_job_log` VALUES (5316, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:906毫秒', '0', '', '2025-01-08 06:48:00'); +INSERT INTO `sys_job_log` VALUES (5317, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:31毫秒', '0', '', '2025-01-08 06:48:59'); +INSERT INTO `sys_job_log` VALUES (5318, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 06:49:00'); +INSERT INTO `sys_job_log` VALUES (5319, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 06:50:00'); +INSERT INTO `sys_job_log` VALUES (5320, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:18毫秒', '0', '', '2025-01-08 06:50:00'); +INSERT INTO `sys_job_log` VALUES (5321, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:79毫秒', '0', '', '2025-01-08 06:50:00'); +INSERT INTO `sys_job_log` VALUES (5322, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:906毫秒', '0', '', '2025-01-08 06:50:00'); +INSERT INTO `sys_job_log` VALUES (5323, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:31毫秒', '0', '', '2025-01-08 06:50:59'); +INSERT INTO `sys_job_log` VALUES (5324, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 06:51:00'); +INSERT INTO `sys_job_log` VALUES (5325, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 06:52:00'); +INSERT INTO `sys_job_log` VALUES (5326, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:19毫秒', '0', '', '2025-01-08 06:52:00'); +INSERT INTO `sys_job_log` VALUES (5327, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:79毫秒', '0', '', '2025-01-08 06:52:00'); +INSERT INTO `sys_job_log` VALUES (5328, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:909毫秒', '0', '', '2025-01-08 06:52:00'); +INSERT INTO `sys_job_log` VALUES (5329, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:32毫秒', '0', '', '2025-01-08 06:52:59'); +INSERT INTO `sys_job_log` VALUES (5330, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 06:53:00'); +INSERT INTO `sys_job_log` VALUES (5331, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 06:54:00'); +INSERT INTO `sys_job_log` VALUES (5332, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:27毫秒', '0', '', '2025-01-08 06:54:00'); +INSERT INTO `sys_job_log` VALUES (5333, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:78毫秒', '0', '', '2025-01-08 06:54:00'); +INSERT INTO `sys_job_log` VALUES (5334, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:905毫秒', '0', '', '2025-01-08 06:54:00'); +INSERT INTO `sys_job_log` VALUES (5335, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:31毫秒', '0', '', '2025-01-08 06:54:59'); +INSERT INTO `sys_job_log` VALUES (5336, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 06:55:00'); +INSERT INTO `sys_job_log` VALUES (5337, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 06:56:00'); +INSERT INTO `sys_job_log` VALUES (5338, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:22毫秒', '0', '', '2025-01-08 06:56:00'); +INSERT INTO `sys_job_log` VALUES (5339, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:78毫秒', '0', '', '2025-01-08 06:56:00'); +INSERT INTO `sys_job_log` VALUES (5340, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:907毫秒', '0', '', '2025-01-08 06:56:00'); +INSERT INTO `sys_job_log` VALUES (5341, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 06:57:00'); +INSERT INTO `sys_job_log` VALUES (5342, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 06:57:00'); +INSERT INTO `sys_job_log` VALUES (5343, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 06:58:00'); +INSERT INTO `sys_job_log` VALUES (5344, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:18毫秒', '0', '', '2025-01-08 06:58:00'); +INSERT INTO `sys_job_log` VALUES (5345, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:94毫秒', '0', '', '2025-01-08 06:58:00'); +INSERT INTO `sys_job_log` VALUES (5346, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:905毫秒', '0', '', '2025-01-08 06:58:00'); +INSERT INTO `sys_job_log` VALUES (5347, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:46毫秒', '0', '', '2025-01-08 06:59:00'); +INSERT INTO `sys_job_log` VALUES (5348, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 06:59:00'); +INSERT INTO `sys_job_log` VALUES (5349, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:31毫秒', '0', '', '2025-01-08 06:59:59'); +INSERT INTO `sys_job_log` VALUES (5350, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 07:00:00'); +INSERT INTO `sys_job_log` VALUES (5351, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:21毫秒', '0', '', '2025-01-08 07:00:00'); +INSERT INTO `sys_job_log` VALUES (5352, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:940毫秒', '0', '', '2025-01-08 07:00:00'); +INSERT INTO `sys_job_log` VALUES (5353, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:33毫秒', '0', '', '2025-01-08 07:00:59'); +INSERT INTO `sys_job_log` VALUES (5354, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 07:01:00'); +INSERT INTO `sys_job_log` VALUES (5355, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 07:02:00'); +INSERT INTO `sys_job_log` VALUES (5356, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:18毫秒', '0', '', '2025-01-08 07:02:00'); +INSERT INTO `sys_job_log` VALUES (5357, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:79毫秒', '0', '', '2025-01-08 07:02:00'); +INSERT INTO `sys_job_log` VALUES (5358, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:907毫秒', '0', '', '2025-01-08 07:02:00'); +INSERT INTO `sys_job_log` VALUES (5359, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:32毫秒', '0', '', '2025-01-08 07:02:59'); +INSERT INTO `sys_job_log` VALUES (5360, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 07:03:00'); +INSERT INTO `sys_job_log` VALUES (5361, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 07:03:59'); +INSERT INTO `sys_job_log` VALUES (5362, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 07:04:00'); +INSERT INTO `sys_job_log` VALUES (5363, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:18毫秒', '0', '', '2025-01-08 07:04:00'); +INSERT INTO `sys_job_log` VALUES (5364, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:953毫秒', '0', '', '2025-01-08 07:04:00'); +INSERT INTO `sys_job_log` VALUES (5365, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:46毫秒', '0', '', '2025-01-08 07:04:59'); +INSERT INTO `sys_job_log` VALUES (5366, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 07:05:00'); +INSERT INTO `sys_job_log` VALUES (5367, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 07:06:00'); +INSERT INTO `sys_job_log` VALUES (5368, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:19毫秒', '0', '', '2025-01-08 07:06:00'); +INSERT INTO `sys_job_log` VALUES (5369, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:78毫秒', '0', '', '2025-01-08 07:06:00'); +INSERT INTO `sys_job_log` VALUES (5370, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:906毫秒', '0', '', '2025-01-08 07:06:00'); +INSERT INTO `sys_job_log` VALUES (5371, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 07:07:00'); +INSERT INTO `sys_job_log` VALUES (5372, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:48毫秒', '0', '', '2025-01-08 07:07:00'); +INSERT INTO `sys_job_log` VALUES (5373, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:53毫秒', '0', '', '2025-01-08 07:08:00'); +INSERT INTO `sys_job_log` VALUES (5374, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 07:08:00'); +INSERT INTO `sys_job_log` VALUES (5375, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:19毫秒', '0', '', '2025-01-08 07:08:00'); +INSERT INTO `sys_job_log` VALUES (5376, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:938毫秒', '0', '', '2025-01-08 07:08:00'); +INSERT INTO `sys_job_log` VALUES (5377, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:32毫秒', '0', '', '2025-01-08 07:08:59'); +INSERT INTO `sys_job_log` VALUES (5378, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 07:09:00'); +INSERT INTO `sys_job_log` VALUES (5379, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 07:10:00'); +INSERT INTO `sys_job_log` VALUES (5380, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:18毫秒', '0', '', '2025-01-08 07:10:00'); +INSERT INTO `sys_job_log` VALUES (5381, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:95毫秒', '0', '', '2025-01-08 07:10:00'); +INSERT INTO `sys_job_log` VALUES (5382, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:919毫秒', '0', '', '2025-01-08 07:10:00'); +INSERT INTO `sys_job_log` VALUES (5383, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:32毫秒', '0', '', '2025-01-08 07:10:59'); +INSERT INTO `sys_job_log` VALUES (5384, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 07:11:00'); +INSERT INTO `sys_job_log` VALUES (5385, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 07:11:59'); +INSERT INTO `sys_job_log` VALUES (5386, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 07:12:00'); +INSERT INTO `sys_job_log` VALUES (5387, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:19毫秒', '0', '', '2025-01-08 07:12:00'); +INSERT INTO `sys_job_log` VALUES (5388, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:969毫秒', '0', '', '2025-01-08 07:12:00'); +INSERT INTO `sys_job_log` VALUES (5389, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:46毫秒', '0', '', '2025-01-08 07:12:59'); +INSERT INTO `sys_job_log` VALUES (5390, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 07:13:00'); +INSERT INTO `sys_job_log` VALUES (5391, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 07:13:59'); +INSERT INTO `sys_job_log` VALUES (5392, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 07:14:00'); +INSERT INTO `sys_job_log` VALUES (5393, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:19毫秒', '0', '', '2025-01-08 07:14:00'); +INSERT INTO `sys_job_log` VALUES (5394, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:938毫秒', '0', '', '2025-01-08 07:14:00'); +INSERT INTO `sys_job_log` VALUES (5395, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:32毫秒', '0', '', '2025-01-08 07:14:59'); +INSERT INTO `sys_job_log` VALUES (5396, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 07:15:00'); +INSERT INTO `sys_job_log` VALUES (5397, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 07:16:00'); +INSERT INTO `sys_job_log` VALUES (5398, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:17毫秒', '0', '', '2025-01-08 07:16:00'); +INSERT INTO `sys_job_log` VALUES (5399, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:94毫秒', '0', '', '2025-01-08 07:16:00'); +INSERT INTO `sys_job_log` VALUES (5400, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:906毫秒', '0', '', '2025-01-08 07:16:00'); +INSERT INTO `sys_job_log` VALUES (5401, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:48毫秒', '0', '', '2025-01-08 07:16:59'); +INSERT INTO `sys_job_log` VALUES (5402, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 07:17:00'); +INSERT INTO `sys_job_log` VALUES (5403, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 07:18:00'); +INSERT INTO `sys_job_log` VALUES (5404, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:18毫秒', '0', '', '2025-01-08 07:18:00'); +INSERT INTO `sys_job_log` VALUES (5405, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:94毫秒', '0', '', '2025-01-08 07:18:00'); +INSERT INTO `sys_job_log` VALUES (5406, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:907毫秒', '0', '', '2025-01-08 07:18:00'); +INSERT INTO `sys_job_log` VALUES (5407, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:46毫秒', '0', '', '2025-01-08 07:18:59'); +INSERT INTO `sys_job_log` VALUES (5408, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 07:19:00'); +INSERT INTO `sys_job_log` VALUES (5409, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 07:20:00'); +INSERT INTO `sys_job_log` VALUES (5410, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:17毫秒', '0', '', '2025-01-08 07:20:00'); +INSERT INTO `sys_job_log` VALUES (5411, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:84毫秒', '0', '', '2025-01-08 07:20:00'); +INSERT INTO `sys_job_log` VALUES (5412, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:907毫秒', '0', '', '2025-01-08 07:20:00'); +INSERT INTO `sys_job_log` VALUES (5413, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 07:20:59'); +INSERT INTO `sys_job_log` VALUES (5414, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 07:21:00'); +INSERT INTO `sys_job_log` VALUES (5415, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 07:22:00'); +INSERT INTO `sys_job_log` VALUES (5416, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:18毫秒', '0', '', '2025-01-08 07:22:00'); +INSERT INTO `sys_job_log` VALUES (5417, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:77毫秒', '0', '', '2025-01-08 07:22:00'); +INSERT INTO `sys_job_log` VALUES (5418, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:913毫秒', '0', '', '2025-01-08 07:22:00'); +INSERT INTO `sys_job_log` VALUES (5419, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 07:22:59'); +INSERT INTO `sys_job_log` VALUES (5420, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 07:23:00'); +INSERT INTO `sys_job_log` VALUES (5421, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 07:24:00'); +INSERT INTO `sys_job_log` VALUES (5422, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:19毫秒', '0', '', '2025-01-08 07:24:00'); +INSERT INTO `sys_job_log` VALUES (5423, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:76毫秒', '0', '', '2025-01-08 07:24:00'); +INSERT INTO `sys_job_log` VALUES (5424, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:902毫秒', '0', '', '2025-01-08 07:24:00'); +INSERT INTO `sys_job_log` VALUES (5425, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:31毫秒', '0', '', '2025-01-08 07:24:59'); +INSERT INTO `sys_job_log` VALUES (5426, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 07:25:00'); +INSERT INTO `sys_job_log` VALUES (5427, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 07:26:00'); +INSERT INTO `sys_job_log` VALUES (5428, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:17毫秒', '0', '', '2025-01-08 07:26:00'); +INSERT INTO `sys_job_log` VALUES (5429, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:78毫秒', '0', '', '2025-01-08 07:26:00'); +INSERT INTO `sys_job_log` VALUES (5430, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:906毫秒', '0', '', '2025-01-08 07:26:00'); +INSERT INTO `sys_job_log` VALUES (5431, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:32毫秒', '0', '', '2025-01-08 07:26:59'); +INSERT INTO `sys_job_log` VALUES (5432, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 07:27:00'); +INSERT INTO `sys_job_log` VALUES (5433, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 07:28:00'); +INSERT INTO `sys_job_log` VALUES (5434, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:19毫秒', '0', '', '2025-01-08 07:28:00'); +INSERT INTO `sys_job_log` VALUES (5435, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:79毫秒', '0', '', '2025-01-08 07:28:00'); +INSERT INTO `sys_job_log` VALUES (5436, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:899毫秒', '0', '', '2025-01-08 07:28:00'); +INSERT INTO `sys_job_log` VALUES (5437, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:46毫秒', '0', '', '2025-01-08 07:28:59'); +INSERT INTO `sys_job_log` VALUES (5438, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 07:29:00'); +INSERT INTO `sys_job_log` VALUES (5439, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 07:30:00'); +INSERT INTO `sys_job_log` VALUES (5440, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:17毫秒', '0', '', '2025-01-08 07:30:00'); +INSERT INTO `sys_job_log` VALUES (5441, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:94毫秒', '0', '', '2025-01-08 07:30:00'); +INSERT INTO `sys_job_log` VALUES (5442, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:906毫秒', '0', '', '2025-01-08 07:30:00'); +INSERT INTO `sys_job_log` VALUES (5443, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 07:30:59'); +INSERT INTO `sys_job_log` VALUES (5444, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 07:31:00'); +INSERT INTO `sys_job_log` VALUES (5445, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 07:32:00'); +INSERT INTO `sys_job_log` VALUES (5446, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:18毫秒', '0', '', '2025-01-08 07:32:00'); +INSERT INTO `sys_job_log` VALUES (5447, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:78毫秒', '0', '', '2025-01-08 07:32:00'); +INSERT INTO `sys_job_log` VALUES (5448, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:902毫秒', '0', '', '2025-01-08 07:32:00'); +INSERT INTO `sys_job_log` VALUES (5449, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 07:32:59'); +INSERT INTO `sys_job_log` VALUES (5450, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 07:33:00'); +INSERT INTO `sys_job_log` VALUES (5451, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 07:34:00'); +INSERT INTO `sys_job_log` VALUES (5452, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:18毫秒', '0', '', '2025-01-08 07:34:00'); +INSERT INTO `sys_job_log` VALUES (5453, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:93毫秒', '0', '', '2025-01-08 07:34:00'); +INSERT INTO `sys_job_log` VALUES (5454, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:905毫秒', '0', '', '2025-01-08 07:34:00'); +INSERT INTO `sys_job_log` VALUES (5455, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 07:34:59'); +INSERT INTO `sys_job_log` VALUES (5456, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 07:35:00'); +INSERT INTO `sys_job_log` VALUES (5457, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:48毫秒', '0', '', '2025-01-08 07:35:59'); +INSERT INTO `sys_job_log` VALUES (5458, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 07:36:00'); +INSERT INTO `sys_job_log` VALUES (5459, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:18毫秒', '0', '', '2025-01-08 07:36:00'); +INSERT INTO `sys_job_log` VALUES (5460, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:938毫秒', '0', '', '2025-01-08 07:36:00'); +INSERT INTO `sys_job_log` VALUES (5461, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:31毫秒', '0', '', '2025-01-08 07:36:59'); +INSERT INTO `sys_job_log` VALUES (5462, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 07:37:00'); +INSERT INTO `sys_job_log` VALUES (5463, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 07:38:00'); +INSERT INTO `sys_job_log` VALUES (5464, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:17毫秒', '0', '', '2025-01-08 07:38:00'); +INSERT INTO `sys_job_log` VALUES (5465, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:78毫秒', '0', '', '2025-01-08 07:38:00'); +INSERT INTO `sys_job_log` VALUES (5466, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:906毫秒', '0', '', '2025-01-08 07:38:00'); +INSERT INTO `sys_job_log` VALUES (5467, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:30毫秒', '0', '', '2025-01-08 07:38:59'); +INSERT INTO `sys_job_log` VALUES (5468, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 07:39:00'); +INSERT INTO `sys_job_log` VALUES (5469, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:36毫秒', '0', '', '2025-01-08 07:39:59'); +INSERT INTO `sys_job_log` VALUES (5470, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 07:40:00'); +INSERT INTO `sys_job_log` VALUES (5471, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:17毫秒', '0', '', '2025-01-08 07:40:00'); +INSERT INTO `sys_job_log` VALUES (5472, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:954毫秒', '0', '', '2025-01-08 07:40:00'); +INSERT INTO `sys_job_log` VALUES (5473, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 07:40:59'); +INSERT INTO `sys_job_log` VALUES (5474, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 07:41:00'); +INSERT INTO `sys_job_log` VALUES (5475, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:48毫秒', '0', '', '2025-01-08 07:41:59'); +INSERT INTO `sys_job_log` VALUES (5476, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 07:42:00'); +INSERT INTO `sys_job_log` VALUES (5477, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:18毫秒', '0', '', '2025-01-08 07:42:00'); +INSERT INTO `sys_job_log` VALUES (5478, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:952毫秒', '0', '', '2025-01-08 07:42:00'); +INSERT INTO `sys_job_log` VALUES (5479, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:31毫秒', '0', '', '2025-01-08 07:42:59'); +INSERT INTO `sys_job_log` VALUES (5480, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 07:43:00'); +INSERT INTO `sys_job_log` VALUES (5481, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:46毫秒', '0', '', '2025-01-08 07:43:59'); +INSERT INTO `sys_job_log` VALUES (5482, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 07:44:00'); +INSERT INTO `sys_job_log` VALUES (5483, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:18毫秒', '0', '', '2025-01-08 07:44:00'); +INSERT INTO `sys_job_log` VALUES (5484, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:953毫秒', '0', '', '2025-01-08 07:44:00'); +INSERT INTO `sys_job_log` VALUES (5485, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:31毫秒', '0', '', '2025-01-08 07:44:59'); +INSERT INTO `sys_job_log` VALUES (5486, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 07:45:00'); +INSERT INTO `sys_job_log` VALUES (5487, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:33毫秒', '0', '', '2025-01-08 07:45:59'); +INSERT INTO `sys_job_log` VALUES (5488, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 07:46:00'); +INSERT INTO `sys_job_log` VALUES (5489, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:18毫秒', '0', '', '2025-01-08 07:46:00'); +INSERT INTO `sys_job_log` VALUES (5490, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:952毫秒', '0', '', '2025-01-08 07:46:00'); +INSERT INTO `sys_job_log` VALUES (5491, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:31毫秒', '0', '', '2025-01-08 07:46:59'); +INSERT INTO `sys_job_log` VALUES (5492, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 07:47:00'); +INSERT INTO `sys_job_log` VALUES (5493, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 07:48:00'); +INSERT INTO `sys_job_log` VALUES (5494, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:19毫秒', '0', '', '2025-01-08 07:48:00'); +INSERT INTO `sys_job_log` VALUES (5495, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:94毫秒', '0', '', '2025-01-08 07:48:00'); +INSERT INTO `sys_job_log` VALUES (5496, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:907毫秒', '0', '', '2025-01-08 07:48:00'); +INSERT INTO `sys_job_log` VALUES (5497, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:45毫秒', '0', '', '2025-01-08 07:48:59'); +INSERT INTO `sys_job_log` VALUES (5498, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 07:49:00'); +INSERT INTO `sys_job_log` VALUES (5499, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:48毫秒', '0', '', '2025-01-08 07:49:59'); +INSERT INTO `sys_job_log` VALUES (5500, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 07:50:00'); +INSERT INTO `sys_job_log` VALUES (5501, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:17毫秒', '0', '', '2025-01-08 07:50:00'); +INSERT INTO `sys_job_log` VALUES (5502, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:958毫秒', '0', '', '2025-01-08 07:50:00'); +INSERT INTO `sys_job_log` VALUES (5503, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 07:50:59'); +INSERT INTO `sys_job_log` VALUES (5504, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 07:51:00'); +INSERT INTO `sys_job_log` VALUES (5505, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 07:52:00'); +INSERT INTO `sys_job_log` VALUES (5506, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:17毫秒', '0', '', '2025-01-08 07:52:00'); +INSERT INTO `sys_job_log` VALUES (5507, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:78毫秒', '0', '', '2025-01-08 07:52:00'); +INSERT INTO `sys_job_log` VALUES (5508, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:906毫秒', '0', '', '2025-01-08 07:52:00'); +INSERT INTO `sys_job_log` VALUES (5509, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:46毫秒', '0', '', '2025-01-08 07:52:59'); +INSERT INTO `sys_job_log` VALUES (5510, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 07:53:00'); +INSERT INTO `sys_job_log` VALUES (5511, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 07:54:00'); +INSERT INTO `sys_job_log` VALUES (5512, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:19毫秒', '0', '', '2025-01-08 07:54:00'); +INSERT INTO `sys_job_log` VALUES (5513, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:78毫秒', '0', '', '2025-01-08 07:54:00'); +INSERT INTO `sys_job_log` VALUES (5514, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:907毫秒', '0', '', '2025-01-08 07:54:00'); +INSERT INTO `sys_job_log` VALUES (5515, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 07:54:59'); +INSERT INTO `sys_job_log` VALUES (5516, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 07:55:00'); +INSERT INTO `sys_job_log` VALUES (5517, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 07:56:00'); +INSERT INTO `sys_job_log` VALUES (5518, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:18毫秒', '0', '', '2025-01-08 07:56:00'); +INSERT INTO `sys_job_log` VALUES (5519, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:79毫秒', '0', '', '2025-01-08 07:56:00'); +INSERT INTO `sys_job_log` VALUES (5520, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:910毫秒', '0', '', '2025-01-08 07:56:00'); +INSERT INTO `sys_job_log` VALUES (5521, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 07:56:59'); +INSERT INTO `sys_job_log` VALUES (5522, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 07:57:00'); +INSERT INTO `sys_job_log` VALUES (5523, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 07:58:00'); +INSERT INTO `sys_job_log` VALUES (5524, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:23毫秒', '0', '', '2025-01-08 07:58:00'); +INSERT INTO `sys_job_log` VALUES (5525, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:93毫秒', '0', '', '2025-01-08 07:58:00'); +INSERT INTO `sys_job_log` VALUES (5526, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:906毫秒', '0', '', '2025-01-08 07:58:00'); +INSERT INTO `sys_job_log` VALUES (5527, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:39毫秒', '0', '', '2025-01-08 07:58:59'); +INSERT INTO `sys_job_log` VALUES (5528, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 07:59:00'); +INSERT INTO `sys_job_log` VALUES (5529, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:51毫秒', '0', '', '2025-01-08 07:59:59'); +INSERT INTO `sys_job_log` VALUES (5530, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 08:00:00'); +INSERT INTO `sys_job_log` VALUES (5531, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:18毫秒', '0', '', '2025-01-08 08:00:00'); +INSERT INTO `sys_job_log` VALUES (5532, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:953毫秒', '0', '', '2025-01-08 08:00:00'); +INSERT INTO `sys_job_log` VALUES (5533, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:46毫秒', '0', '', '2025-01-08 08:00:59'); +INSERT INTO `sys_job_log` VALUES (5534, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 08:01:00'); +INSERT INTO `sys_job_log` VALUES (5535, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 08:02:00'); +INSERT INTO `sys_job_log` VALUES (5536, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:18毫秒', '0', '', '2025-01-08 08:02:00'); +INSERT INTO `sys_job_log` VALUES (5537, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:78毫秒', '0', '', '2025-01-08 08:02:00'); +INSERT INTO `sys_job_log` VALUES (5538, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:906毫秒', '0', '', '2025-01-08 08:02:00'); +INSERT INTO `sys_job_log` VALUES (5539, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:46毫秒', '0', '', '2025-01-08 08:02:59'); +INSERT INTO `sys_job_log` VALUES (5540, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 08:03:00'); +INSERT INTO `sys_job_log` VALUES (5541, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 08:04:00'); +INSERT INTO `sys_job_log` VALUES (5542, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:20毫秒', '0', '', '2025-01-08 08:04:00'); +INSERT INTO `sys_job_log` VALUES (5543, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:79毫秒', '0', '', '2025-01-08 08:04:00'); +INSERT INTO `sys_job_log` VALUES (5544, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:951毫秒', '0', '', '2025-01-08 08:04:00'); +INSERT INTO `sys_job_log` VALUES (5545, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 08:05:00'); +INSERT INTO `sys_job_log` VALUES (5546, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:63毫秒', '0', '', '2025-01-08 08:05:00'); +INSERT INTO `sys_job_log` VALUES (5547, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 08:05:59'); +INSERT INTO `sys_job_log` VALUES (5548, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 08:06:00'); +INSERT INTO `sys_job_log` VALUES (5549, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:17毫秒', '0', '', '2025-01-08 08:06:00'); +INSERT INTO `sys_job_log` VALUES (5550, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:953毫秒', '0', '', '2025-01-08 08:06:00'); +INSERT INTO `sys_job_log` VALUES (5551, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:49毫秒', '0', '', '2025-01-08 08:06:59'); +INSERT INTO `sys_job_log` VALUES (5552, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 08:07:00'); +INSERT INTO `sys_job_log` VALUES (5553, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 08:07:59'); +INSERT INTO `sys_job_log` VALUES (5554, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:7毫秒', '0', '', '2025-01-08 08:08:00'); +INSERT INTO `sys_job_log` VALUES (5555, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:19毫秒', '0', '', '2025-01-08 08:08:00'); +INSERT INTO `sys_job_log` VALUES (5556, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:969毫秒', '0', '', '2025-01-08 08:08:00'); +INSERT INTO `sys_job_log` VALUES (5557, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 08:09:00'); +INSERT INTO `sys_job_log` VALUES (5558, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:226毫秒', '0', '', '2025-01-08 08:09:00'); +INSERT INTO `sys_job_log` VALUES (5559, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 08:09:59'); +INSERT INTO `sys_job_log` VALUES (5560, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 08:10:00'); +INSERT INTO `sys_job_log` VALUES (5561, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:18毫秒', '0', '', '2025-01-08 08:10:00'); +INSERT INTO `sys_job_log` VALUES (5562, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:952毫秒', '0', '', '2025-01-08 08:10:00'); +INSERT INTO `sys_job_log` VALUES (5563, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:32毫秒', '0', '', '2025-01-08 08:10:59'); +INSERT INTO `sys_job_log` VALUES (5564, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 08:11:00'); +INSERT INTO `sys_job_log` VALUES (5565, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 08:12:00'); +INSERT INTO `sys_job_log` VALUES (5566, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:19毫秒', '0', '', '2025-01-08 08:12:00'); +INSERT INTO `sys_job_log` VALUES (5567, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:92毫秒', '0', '', '2025-01-08 08:12:00'); +INSERT INTO `sys_job_log` VALUES (5568, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:918毫秒', '0', '', '2025-01-08 08:12:00'); +INSERT INTO `sys_job_log` VALUES (5569, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 08:12:59'); +INSERT INTO `sys_job_log` VALUES (5570, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 08:13:00'); +INSERT INTO `sys_job_log` VALUES (5571, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 08:14:00'); +INSERT INTO `sys_job_log` VALUES (5572, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:18毫秒', '0', '', '2025-01-08 08:14:00'); +INSERT INTO `sys_job_log` VALUES (5573, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:93毫秒', '0', '', '2025-01-08 08:14:00'); +INSERT INTO `sys_job_log` VALUES (5574, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:921毫秒', '0', '', '2025-01-08 08:14:00'); +INSERT INTO `sys_job_log` VALUES (5575, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 08:14:59'); +INSERT INTO `sys_job_log` VALUES (5576, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 08:15:00'); +INSERT INTO `sys_job_log` VALUES (5577, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 08:16:00'); +INSERT INTO `sys_job_log` VALUES (5578, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:18毫秒', '0', '', '2025-01-08 08:16:00'); +INSERT INTO `sys_job_log` VALUES (5579, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:98毫秒', '0', '', '2025-01-08 08:16:00'); +INSERT INTO `sys_job_log` VALUES (5580, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:906毫秒', '0', '', '2025-01-08 08:16:00'); +INSERT INTO `sys_job_log` VALUES (5581, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 08:16:59'); +INSERT INTO `sys_job_log` VALUES (5582, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 08:17:00'); +INSERT INTO `sys_job_log` VALUES (5583, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 08:17:59'); +INSERT INTO `sys_job_log` VALUES (5584, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 08:18:00'); +INSERT INTO `sys_job_log` VALUES (5585, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:20毫秒', '0', '', '2025-01-08 08:18:00'); +INSERT INTO `sys_job_log` VALUES (5586, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:956毫秒', '0', '', '2025-01-08 08:18:00'); +INSERT INTO `sys_job_log` VALUES (5587, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:46毫秒', '0', '', '2025-01-08 08:18:59'); +INSERT INTO `sys_job_log` VALUES (5588, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 08:19:00'); +INSERT INTO `sys_job_log` VALUES (5589, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:46毫秒', '0', '', '2025-01-08 08:19:59'); +INSERT INTO `sys_job_log` VALUES (5590, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 08:20:00'); +INSERT INTO `sys_job_log` VALUES (5591, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:17毫秒', '0', '', '2025-01-08 08:20:00'); +INSERT INTO `sys_job_log` VALUES (5592, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:1124毫秒', '0', '', '2025-01-08 08:20:01'); +INSERT INTO `sys_job_log` VALUES (5593, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 08:20:59'); +INSERT INTO `sys_job_log` VALUES (5594, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 08:21:00'); +INSERT INTO `sys_job_log` VALUES (5595, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 08:22:00'); +INSERT INTO `sys_job_log` VALUES (5596, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:17毫秒', '0', '', '2025-01-08 08:22:00'); +INSERT INTO `sys_job_log` VALUES (5597, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:79毫秒', '0', '', '2025-01-08 08:22:00'); +INSERT INTO `sys_job_log` VALUES (5598, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:907毫秒', '0', '', '2025-01-08 08:22:00'); +INSERT INTO `sys_job_log` VALUES (5599, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:46毫秒', '0', '', '2025-01-08 08:22:59'); +INSERT INTO `sys_job_log` VALUES (5600, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 08:23:00'); +INSERT INTO `sys_job_log` VALUES (5601, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:46毫秒', '0', '', '2025-01-08 08:23:59'); +INSERT INTO `sys_job_log` VALUES (5602, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 08:24:00'); +INSERT INTO `sys_job_log` VALUES (5603, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:18毫秒', '0', '', '2025-01-08 08:24:00'); +INSERT INTO `sys_job_log` VALUES (5604, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:953毫秒', '0', '', '2025-01-08 08:24:00'); +INSERT INTO `sys_job_log` VALUES (5605, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 08:25:00'); +INSERT INTO `sys_job_log` VALUES (5606, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:375毫秒', '0', '', '2025-01-08 08:25:00'); +INSERT INTO `sys_job_log` VALUES (5607, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 08:26:00'); +INSERT INTO `sys_job_log` VALUES (5608, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:18毫秒', '0', '', '2025-01-08 08:26:00'); +INSERT INTO `sys_job_log` VALUES (5609, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:5235毫秒', '0', '', '2025-01-08 08:26:06'); +INSERT INTO `sys_job_log` VALUES (5610, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:18422毫秒', '0', '', '2025-01-08 08:26:18'); +INSERT INTO `sys_job_log` VALUES (5611, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 08:27:00'); +INSERT INTO `sys_job_log` VALUES (5612, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:157毫秒', '0', '', '2025-01-08 08:27:00'); +INSERT INTO `sys_job_log` VALUES (5613, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 08:27:59'); +INSERT INTO `sys_job_log` VALUES (5614, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 08:28:00'); +INSERT INTO `sys_job_log` VALUES (5615, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:18毫秒', '0', '', '2025-01-08 08:28:00'); +INSERT INTO `sys_job_log` VALUES (5616, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:953毫秒', '0', '', '2025-01-08 08:28:00'); +INSERT INTO `sys_job_log` VALUES (5617, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:31毫秒', '0', '', '2025-01-08 08:28:59'); +INSERT INTO `sys_job_log` VALUES (5618, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 08:29:00'); +INSERT INTO `sys_job_log` VALUES (5619, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:31毫秒', '0', '', '2025-01-08 08:29:59'); +INSERT INTO `sys_job_log` VALUES (5620, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 08:30:00'); +INSERT INTO `sys_job_log` VALUES (5621, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:20毫秒', '0', '', '2025-01-08 08:30:00'); +INSERT INTO `sys_job_log` VALUES (5622, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:954毫秒', '0', '', '2025-01-08 08:30:00'); +INSERT INTO `sys_job_log` VALUES (5623, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:45毫秒', '0', '', '2025-01-08 08:30:59'); +INSERT INTO `sys_job_log` VALUES (5624, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 08:31:00'); +INSERT INTO `sys_job_log` VALUES (5625, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 08:32:00'); +INSERT INTO `sys_job_log` VALUES (5626, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:19毫秒', '0', '', '2025-01-08 08:32:00'); +INSERT INTO `sys_job_log` VALUES (5627, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:95毫秒', '0', '', '2025-01-08 08:32:00'); +INSERT INTO `sys_job_log` VALUES (5628, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:1299毫秒', '0', '', '2025-01-08 08:32:01'); +INSERT INTO `sys_job_log` VALUES (5629, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 08:32:59'); +INSERT INTO `sys_job_log` VALUES (5630, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 08:33:00'); +INSERT INTO `sys_job_log` VALUES (5631, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 08:34:00'); +INSERT INTO `sys_job_log` VALUES (5632, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:19毫秒', '0', '', '2025-01-08 08:34:00'); +INSERT INTO `sys_job_log` VALUES (5633, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:78毫秒', '0', '', '2025-01-08 08:34:00'); +INSERT INTO `sys_job_log` VALUES (5634, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:907毫秒', '0', '', '2025-01-08 08:34:00'); +INSERT INTO `sys_job_log` VALUES (5635, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:31毫秒', '0', '', '2025-01-08 08:34:59'); +INSERT INTO `sys_job_log` VALUES (5636, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 08:35:00'); +INSERT INTO `sys_job_log` VALUES (5637, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 08:36:00'); +INSERT INTO `sys_job_log` VALUES (5638, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:18毫秒', '0', '', '2025-01-08 08:36:00'); +INSERT INTO `sys_job_log` VALUES (5639, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:77毫秒', '0', '', '2025-01-08 08:36:00'); +INSERT INTO `sys_job_log` VALUES (5640, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:905毫秒', '0', '', '2025-01-08 08:36:00'); +INSERT INTO `sys_job_log` VALUES (5641, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:35毫秒', '0', '', '2025-01-08 08:36:59'); +INSERT INTO `sys_job_log` VALUES (5642, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 08:37:00'); +INSERT INTO `sys_job_log` VALUES (5643, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 08:38:00'); +INSERT INTO `sys_job_log` VALUES (5644, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:18毫秒', '0', '', '2025-01-08 08:38:00'); +INSERT INTO `sys_job_log` VALUES (5645, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:78毫秒', '0', '', '2025-01-08 08:38:00'); +INSERT INTO `sys_job_log` VALUES (5646, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:923毫秒', '0', '', '2025-01-08 08:38:00'); +INSERT INTO `sys_job_log` VALUES (5647, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 08:38:59'); +INSERT INTO `sys_job_log` VALUES (5648, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 08:39:00'); +INSERT INTO `sys_job_log` VALUES (5649, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:31毫秒', '0', '', '2025-01-08 08:39:59'); +INSERT INTO `sys_job_log` VALUES (5650, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 08:40:00'); +INSERT INTO `sys_job_log` VALUES (5651, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:17毫秒', '0', '', '2025-01-08 08:40:00'); +INSERT INTO `sys_job_log` VALUES (5652, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:953毫秒', '0', '', '2025-01-08 08:40:00'); +INSERT INTO `sys_job_log` VALUES (5653, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:48毫秒', '0', '', '2025-01-08 08:40:59'); +INSERT INTO `sys_job_log` VALUES (5654, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 08:41:00'); +INSERT INTO `sys_job_log` VALUES (5655, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:32毫秒', '0', '', '2025-01-08 08:41:59'); +INSERT INTO `sys_job_log` VALUES (5656, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 08:42:00'); +INSERT INTO `sys_job_log` VALUES (5657, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:19毫秒', '0', '', '2025-01-08 08:42:00'); +INSERT INTO `sys_job_log` VALUES (5658, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:968毫秒', '0', '', '2025-01-08 08:42:00'); +INSERT INTO `sys_job_log` VALUES (5659, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 08:42:59'); +INSERT INTO `sys_job_log` VALUES (5660, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 08:43:00'); +INSERT INTO `sys_job_log` VALUES (5661, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 08:43:59'); +INSERT INTO `sys_job_log` VALUES (5662, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 08:44:00'); +INSERT INTO `sys_job_log` VALUES (5663, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:18毫秒', '0', '', '2025-01-08 08:44:00'); +INSERT INTO `sys_job_log` VALUES (5664, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:954毫秒', '0', '', '2025-01-08 08:44:00'); +INSERT INTO `sys_job_log` VALUES (5665, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:48毫秒', '0', '', '2025-01-08 08:44:59'); +INSERT INTO `sys_job_log` VALUES (5666, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 08:45:00'); +INSERT INTO `sys_job_log` VALUES (5667, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 08:46:00'); +INSERT INTO `sys_job_log` VALUES (5668, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:17毫秒', '0', '', '2025-01-08 08:46:00'); +INSERT INTO `sys_job_log` VALUES (5669, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:94毫秒', '0', '', '2025-01-08 08:46:00'); +INSERT INTO `sys_job_log` VALUES (5670, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:939毫秒', '0', '', '2025-01-08 08:46:00'); +INSERT INTO `sys_job_log` VALUES (5671, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 08:46:59'); +INSERT INTO `sys_job_log` VALUES (5672, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 08:47:00'); +INSERT INTO `sys_job_log` VALUES (5673, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 08:48:00'); +INSERT INTO `sys_job_log` VALUES (5674, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:18毫秒', '0', '', '2025-01-08 08:48:00'); +INSERT INTO `sys_job_log` VALUES (5675, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:78毫秒', '0', '', '2025-01-08 08:48:00'); +INSERT INTO `sys_job_log` VALUES (5676, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:905毫秒', '0', '', '2025-01-08 08:48:00'); +INSERT INTO `sys_job_log` VALUES (5677, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 08:48:59'); +INSERT INTO `sys_job_log` VALUES (5678, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 08:49:00'); +INSERT INTO `sys_job_log` VALUES (5679, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 08:49:59'); +INSERT INTO `sys_job_log` VALUES (5680, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 08:50:00'); +INSERT INTO `sys_job_log` VALUES (5681, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:18毫秒', '0', '', '2025-01-08 08:50:00'); +INSERT INTO `sys_job_log` VALUES (5682, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:954毫秒', '0', '', '2025-01-08 08:50:00'); +INSERT INTO `sys_job_log` VALUES (5683, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 08:50:59'); +INSERT INTO `sys_job_log` VALUES (5684, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 08:51:00'); +INSERT INTO `sys_job_log` VALUES (5685, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:31毫秒', '0', '', '2025-01-08 08:51:59'); +INSERT INTO `sys_job_log` VALUES (5686, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 08:52:00'); +INSERT INTO `sys_job_log` VALUES (5687, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:17毫秒', '0', '', '2025-01-08 08:52:00'); +INSERT INTO `sys_job_log` VALUES (5688, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:951毫秒', '0', '', '2025-01-08 08:52:00'); +INSERT INTO `sys_job_log` VALUES (5689, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 08:52:59'); +INSERT INTO `sys_job_log` VALUES (5690, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 08:53:00'); +INSERT INTO `sys_job_log` VALUES (5691, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:31毫秒', '0', '', '2025-01-08 08:53:59'); +INSERT INTO `sys_job_log` VALUES (5692, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 08:54:00'); +INSERT INTO `sys_job_log` VALUES (5693, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:18毫秒', '0', '', '2025-01-08 08:54:00'); +INSERT INTO `sys_job_log` VALUES (5694, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:979毫秒', '0', '', '2025-01-08 08:54:00'); +INSERT INTO `sys_job_log` VALUES (5695, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:46毫秒', '0', '', '2025-01-08 08:54:59'); +INSERT INTO `sys_job_log` VALUES (5696, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 08:55:00'); +INSERT INTO `sys_job_log` VALUES (5697, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 08:56:00'); +INSERT INTO `sys_job_log` VALUES (5698, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 08:56:00'); +INSERT INTO `sys_job_log` VALUES (5699, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:18毫秒', '0', '', '2025-01-08 08:56:00'); +INSERT INTO `sys_job_log` VALUES (5700, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:969毫秒', '0', '', '2025-01-08 08:56:00'); +INSERT INTO `sys_job_log` VALUES (5701, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 08:56:59'); +INSERT INTO `sys_job_log` VALUES (5702, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 08:57:00'); +INSERT INTO `sys_job_log` VALUES (5703, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 08:58:00'); +INSERT INTO `sys_job_log` VALUES (5704, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:17毫秒', '0', '', '2025-01-08 08:58:00'); +INSERT INTO `sys_job_log` VALUES (5705, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:93毫秒', '0', '', '2025-01-08 08:58:00'); +INSERT INTO `sys_job_log` VALUES (5706, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:905毫秒', '0', '', '2025-01-08 08:58:00'); +INSERT INTO `sys_job_log` VALUES (5707, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:31毫秒', '0', '', '2025-01-08 08:58:59'); +INSERT INTO `sys_job_log` VALUES (5708, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 08:59:00'); +INSERT INTO `sys_job_log` VALUES (5709, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:50毫秒', '0', '', '2025-01-08 08:59:59'); +INSERT INTO `sys_job_log` VALUES (5710, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 09:00:00'); +INSERT INTO `sys_job_log` VALUES (5711, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:19毫秒', '0', '', '2025-01-08 09:00:00'); +INSERT INTO `sys_job_log` VALUES (5712, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:950毫秒', '0', '', '2025-01-08 09:00:00'); +INSERT INTO `sys_job_log` VALUES (5713, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:29毫秒', '0', '', '2025-01-08 09:00:59'); +INSERT INTO `sys_job_log` VALUES (5714, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 09:01:00'); +INSERT INTO `sys_job_log` VALUES (5715, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:31毫秒', '0', '', '2025-01-08 09:01:59'); +INSERT INTO `sys_job_log` VALUES (5716, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 09:02:00'); +INSERT INTO `sys_job_log` VALUES (5717, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:18毫秒', '0', '', '2025-01-08 09:02:00'); +INSERT INTO `sys_job_log` VALUES (5718, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:954毫秒', '0', '', '2025-01-08 09:02:00'); +INSERT INTO `sys_job_log` VALUES (5719, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 09:02:59'); +INSERT INTO `sys_job_log` VALUES (5720, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 09:03:00'); +INSERT INTO `sys_job_log` VALUES (5721, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:46毫秒', '0', '', '2025-01-08 09:03:59'); +INSERT INTO `sys_job_log` VALUES (5722, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 09:04:00'); +INSERT INTO `sys_job_log` VALUES (5723, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:18毫秒', '0', '', '2025-01-08 09:04:00'); +INSERT INTO `sys_job_log` VALUES (5724, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:953毫秒', '0', '', '2025-01-08 09:04:00'); +INSERT INTO `sys_job_log` VALUES (5725, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:31毫秒', '0', '', '2025-01-08 09:04:59'); +INSERT INTO `sys_job_log` VALUES (5726, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 09:05:00'); +INSERT INTO `sys_job_log` VALUES (5727, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:46毫秒', '0', '', '2025-01-08 09:05:59'); +INSERT INTO `sys_job_log` VALUES (5728, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 09:06:00'); +INSERT INTO `sys_job_log` VALUES (5729, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:17毫秒', '0', '', '2025-01-08 09:06:00'); +INSERT INTO `sys_job_log` VALUES (5730, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:973毫秒', '0', '', '2025-01-08 09:06:00'); +INSERT INTO `sys_job_log` VALUES (5731, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 09:06:59'); +INSERT INTO `sys_job_log` VALUES (5732, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 09:07:00'); +INSERT INTO `sys_job_log` VALUES (5733, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 09:08:00'); +INSERT INTO `sys_job_log` VALUES (5734, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:18毫秒', '0', '', '2025-01-08 09:08:00'); +INSERT INTO `sys_job_log` VALUES (5735, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:93毫秒', '0', '', '2025-01-08 09:08:00'); +INSERT INTO `sys_job_log` VALUES (5736, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:1047毫秒', '0', '', '2025-01-08 09:08:01'); +INSERT INTO `sys_job_log` VALUES (5737, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:43毫秒', '0', '', '2025-01-08 09:08:59'); +INSERT INTO `sys_job_log` VALUES (5738, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 09:09:00'); +INSERT INTO `sys_job_log` VALUES (5739, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:31毫秒', '0', '', '2025-01-08 09:09:59'); +INSERT INTO `sys_job_log` VALUES (5740, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 09:10:00'); +INSERT INTO `sys_job_log` VALUES (5741, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:18毫秒', '0', '', '2025-01-08 09:10:00'); +INSERT INTO `sys_job_log` VALUES (5742, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:953毫秒', '0', '', '2025-01-08 09:10:00'); +INSERT INTO `sys_job_log` VALUES (5743, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:32毫秒', '0', '', '2025-01-08 09:10:59'); +INSERT INTO `sys_job_log` VALUES (5744, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 09:11:00'); +INSERT INTO `sys_job_log` VALUES (5745, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 09:12:00'); +INSERT INTO `sys_job_log` VALUES (5746, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:19毫秒', '0', '', '2025-01-08 09:12:00'); +INSERT INTO `sys_job_log` VALUES (5747, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:118毫秒', '0', '', '2025-01-08 09:12:00'); +INSERT INTO `sys_job_log` VALUES (5748, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:922毫秒', '0', '', '2025-01-08 09:12:00'); +INSERT INTO `sys_job_log` VALUES (5749, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:38毫秒', '0', '', '2025-01-08 09:12:59'); +INSERT INTO `sys_job_log` VALUES (5750, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 09:13:00'); +INSERT INTO `sys_job_log` VALUES (5751, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:62毫秒', '0', '', '2025-01-08 09:14:00'); +INSERT INTO `sys_job_log` VALUES (5752, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 09:14:00'); +INSERT INTO `sys_job_log` VALUES (5753, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:19毫秒', '0', '', '2025-01-08 09:14:00'); +INSERT INTO `sys_job_log` VALUES (5754, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:1139毫秒', '0', '', '2025-01-08 09:14:01'); +INSERT INTO `sys_job_log` VALUES (5755, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 09:14:59'); +INSERT INTO `sys_job_log` VALUES (5756, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 09:15:00'); +INSERT INTO `sys_job_log` VALUES (5757, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 09:15:59'); +INSERT INTO `sys_job_log` VALUES (5758, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 09:16:00'); +INSERT INTO `sys_job_log` VALUES (5759, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:17毫秒', '0', '', '2025-01-08 09:16:00'); +INSERT INTO `sys_job_log` VALUES (5760, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:968毫秒', '0', '', '2025-01-08 09:16:00'); +INSERT INTO `sys_job_log` VALUES (5761, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 09:16:59'); +INSERT INTO `sys_job_log` VALUES (5762, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 09:17:00'); +INSERT INTO `sys_job_log` VALUES (5763, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 09:17:59'); +INSERT INTO `sys_job_log` VALUES (5764, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 09:18:00'); +INSERT INTO `sys_job_log` VALUES (5765, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:27毫秒', '0', '', '2025-01-08 09:18:00'); +INSERT INTO `sys_job_log` VALUES (5766, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:969毫秒', '0', '', '2025-01-08 09:18:00'); +INSERT INTO `sys_job_log` VALUES (5767, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:32毫秒', '0', '', '2025-01-08 09:18:59'); +INSERT INTO `sys_job_log` VALUES (5768, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 09:19:00'); +INSERT INTO `sys_job_log` VALUES (5769, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:32毫秒', '0', '', '2025-01-08 09:19:59'); +INSERT INTO `sys_job_log` VALUES (5770, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 09:20:00'); +INSERT INTO `sys_job_log` VALUES (5771, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:19毫秒', '0', '', '2025-01-08 09:20:00'); +INSERT INTO `sys_job_log` VALUES (5772, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:1064毫秒', '0', '', '2025-01-08 09:20:01'); +INSERT INTO `sys_job_log` VALUES (5773, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 09:20:59'); +INSERT INTO `sys_job_log` VALUES (5774, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 09:21:00'); +INSERT INTO `sys_job_log` VALUES (5775, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 09:22:00'); +INSERT INTO `sys_job_log` VALUES (5776, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:21毫秒', '0', '', '2025-01-08 09:22:00'); +INSERT INTO `sys_job_log` VALUES (5777, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:93毫秒', '0', '', '2025-01-08 09:22:00'); +INSERT INTO `sys_job_log` VALUES (5778, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:908毫秒', '0', '', '2025-01-08 09:22:00'); +INSERT INTO `sys_job_log` VALUES (5779, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 09:22:59'); +INSERT INTO `sys_job_log` VALUES (5780, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 09:23:00'); +INSERT INTO `sys_job_log` VALUES (5781, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:49毫秒', '0', '', '2025-01-08 09:23:59'); +INSERT INTO `sys_job_log` VALUES (5782, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 09:24:00'); +INSERT INTO `sys_job_log` VALUES (5783, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:18毫秒', '0', '', '2025-01-08 09:24:00'); +INSERT INTO `sys_job_log` VALUES (5784, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:938毫秒', '0', '', '2025-01-08 09:24:00'); +INSERT INTO `sys_job_log` VALUES (5785, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 09:24:59'); +INSERT INTO `sys_job_log` VALUES (5786, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 09:25:00'); +INSERT INTO `sys_job_log` VALUES (5787, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:31毫秒', '0', '', '2025-01-08 09:25:59'); +INSERT INTO `sys_job_log` VALUES (5788, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 09:26:00'); +INSERT INTO `sys_job_log` VALUES (5789, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:17毫秒', '0', '', '2025-01-08 09:26:00'); +INSERT INTO `sys_job_log` VALUES (5790, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:953毫秒', '0', '', '2025-01-08 09:26:00'); +INSERT INTO `sys_job_log` VALUES (5791, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:46毫秒', '0', '', '2025-01-08 09:26:59'); +INSERT INTO `sys_job_log` VALUES (5792, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 09:27:00'); +INSERT INTO `sys_job_log` VALUES (5793, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:46毫秒', '0', '', '2025-01-08 09:27:59'); +INSERT INTO `sys_job_log` VALUES (5794, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 09:28:00'); +INSERT INTO `sys_job_log` VALUES (5795, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:17毫秒', '0', '', '2025-01-08 09:28:00'); +INSERT INTO `sys_job_log` VALUES (5796, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:1030毫秒', '0', '', '2025-01-08 09:28:00'); +INSERT INTO `sys_job_log` VALUES (5797, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:32毫秒', '0', '', '2025-01-08 09:28:59'); +INSERT INTO `sys_job_log` VALUES (5798, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 09:29:00'); +INSERT INTO `sys_job_log` VALUES (5799, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:49毫秒', '0', '', '2025-01-08 09:29:59'); +INSERT INTO `sys_job_log` VALUES (5800, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 09:30:00'); +INSERT INTO `sys_job_log` VALUES (5801, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:18毫秒', '0', '', '2025-01-08 09:30:00'); +INSERT INTO `sys_job_log` VALUES (5802, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:984毫秒', '0', '', '2025-01-08 09:30:00'); +INSERT INTO `sys_job_log` VALUES (5803, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:31毫秒', '0', '', '2025-01-08 09:30:59'); +INSERT INTO `sys_job_log` VALUES (5804, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 09:31:00'); +INSERT INTO `sys_job_log` VALUES (5805, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 09:31:59'); +INSERT INTO `sys_job_log` VALUES (5806, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 09:32:00'); +INSERT INTO `sys_job_log` VALUES (5807, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:17毫秒', '0', '', '2025-01-08 09:32:00'); +INSERT INTO `sys_job_log` VALUES (5808, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:958毫秒', '0', '', '2025-01-08 09:32:00'); +INSERT INTO `sys_job_log` VALUES (5809, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:46毫秒', '0', '', '2025-01-08 09:32:59'); +INSERT INTO `sys_job_log` VALUES (5810, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 09:33:00'); +INSERT INTO `sys_job_log` VALUES (5811, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 09:33:59'); +INSERT INTO `sys_job_log` VALUES (5812, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 09:34:00'); +INSERT INTO `sys_job_log` VALUES (5813, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:19毫秒', '0', '', '2025-01-08 09:34:00'); +INSERT INTO `sys_job_log` VALUES (5814, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:953毫秒', '0', '', '2025-01-08 09:34:00'); +INSERT INTO `sys_job_log` VALUES (5815, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 09:34:59'); +INSERT INTO `sys_job_log` VALUES (5816, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 09:35:00'); +INSERT INTO `sys_job_log` VALUES (5817, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:46毫秒', '0', '', '2025-01-08 09:35:59'); +INSERT INTO `sys_job_log` VALUES (5818, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 09:36:00'); +INSERT INTO `sys_job_log` VALUES (5819, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:18毫秒', '0', '', '2025-01-08 09:36:00'); +INSERT INTO `sys_job_log` VALUES (5820, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:952毫秒', '0', '', '2025-01-08 09:36:00'); +INSERT INTO `sys_job_log` VALUES (5821, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:32毫秒', '0', '', '2025-01-08 09:36:59'); +INSERT INTO `sys_job_log` VALUES (5822, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 09:37:00'); +INSERT INTO `sys_job_log` VALUES (5823, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 09:37:59'); +INSERT INTO `sys_job_log` VALUES (5824, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 09:38:00'); +INSERT INTO `sys_job_log` VALUES (5825, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:17毫秒', '0', '', '2025-01-08 09:38:00'); +INSERT INTO `sys_job_log` VALUES (5826, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:953毫秒', '0', '', '2025-01-08 09:38:00'); +INSERT INTO `sys_job_log` VALUES (5827, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:46毫秒', '0', '', '2025-01-08 09:38:59'); +INSERT INTO `sys_job_log` VALUES (5828, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 09:39:00'); +INSERT INTO `sys_job_log` VALUES (5829, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 09:40:00'); +INSERT INTO `sys_job_log` VALUES (5830, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:77毫秒', '0', '', '2025-01-08 09:40:00'); +INSERT INTO `sys_job_log` VALUES (5831, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:18毫秒', '0', '', '2025-01-08 09:40:00'); +INSERT INTO `sys_job_log` VALUES (5832, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:906毫秒', '0', '', '2025-01-08 09:40:00'); +INSERT INTO `sys_job_log` VALUES (5833, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 09:40:59'); +INSERT INTO `sys_job_log` VALUES (5834, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 09:41:00'); +INSERT INTO `sys_job_log` VALUES (5835, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:46毫秒', '0', '', '2025-01-08 09:41:59'); +INSERT INTO `sys_job_log` VALUES (5836, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 09:42:00'); +INSERT INTO `sys_job_log` VALUES (5837, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:18毫秒', '0', '', '2025-01-08 09:42:00'); +INSERT INTO `sys_job_log` VALUES (5838, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:953毫秒', '0', '', '2025-01-08 09:42:00'); +INSERT INTO `sys_job_log` VALUES (5839, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:32毫秒', '0', '', '2025-01-08 09:42:59'); +INSERT INTO `sys_job_log` VALUES (5840, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 09:43:00'); +INSERT INTO `sys_job_log` VALUES (5841, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 09:44:00'); +INSERT INTO `sys_job_log` VALUES (5842, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:20毫秒', '0', '', '2025-01-08 09:44:00'); +INSERT INTO `sys_job_log` VALUES (5843, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:94毫秒', '0', '', '2025-01-08 09:44:00'); +INSERT INTO `sys_job_log` VALUES (5844, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:906毫秒', '0', '', '2025-01-08 09:44:00'); +INSERT INTO `sys_job_log` VALUES (5845, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 09:44:59'); +INSERT INTO `sys_job_log` VALUES (5846, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 09:45:00'); +INSERT INTO `sys_job_log` VALUES (5847, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 09:46:00'); +INSERT INTO `sys_job_log` VALUES (5848, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:18毫秒', '0', '', '2025-01-08 09:46:00'); +INSERT INTO `sys_job_log` VALUES (5849, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:94毫秒', '0', '', '2025-01-08 09:46:00'); +INSERT INTO `sys_job_log` VALUES (5850, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:927毫秒', '0', '', '2025-01-08 09:46:00'); +INSERT INTO `sys_job_log` VALUES (5851, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:32毫秒', '0', '', '2025-01-08 09:46:59'); +INSERT INTO `sys_job_log` VALUES (5852, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 09:47:00'); +INSERT INTO `sys_job_log` VALUES (5853, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 09:48:00'); +INSERT INTO `sys_job_log` VALUES (5854, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:19毫秒', '0', '', '2025-01-08 09:48:00'); +INSERT INTO `sys_job_log` VALUES (5855, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:93毫秒', '0', '', '2025-01-08 09:48:00'); +INSERT INTO `sys_job_log` VALUES (5856, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:921毫秒', '0', '', '2025-01-08 09:48:00'); +INSERT INTO `sys_job_log` VALUES (5857, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 09:48:59'); +INSERT INTO `sys_job_log` VALUES (5858, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 09:49:00'); +INSERT INTO `sys_job_log` VALUES (5859, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 09:50:00'); +INSERT INTO `sys_job_log` VALUES (5860, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:20毫秒', '0', '', '2025-01-08 09:50:00'); +INSERT INTO `sys_job_log` VALUES (5861, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:99毫秒', '0', '', '2025-01-08 09:50:00'); +INSERT INTO `sys_job_log` VALUES (5862, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:931毫秒', '0', '', '2025-01-08 09:50:00'); +INSERT INTO `sys_job_log` VALUES (5863, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:46毫秒', '0', '', '2025-01-08 09:50:59'); +INSERT INTO `sys_job_log` VALUES (5864, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 09:51:00'); +INSERT INTO `sys_job_log` VALUES (5865, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 09:52:00'); +INSERT INTO `sys_job_log` VALUES (5866, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:18毫秒', '0', '', '2025-01-08 09:52:00'); +INSERT INTO `sys_job_log` VALUES (5867, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:94毫秒', '0', '', '2025-01-08 09:52:00'); +INSERT INTO `sys_job_log` VALUES (5868, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:907毫秒', '0', '', '2025-01-08 09:52:00'); +INSERT INTO `sys_job_log` VALUES (5869, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 09:52:59'); +INSERT INTO `sys_job_log` VALUES (5870, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 09:53:00'); +INSERT INTO `sys_job_log` VALUES (5871, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 09:53:59'); +INSERT INTO `sys_job_log` VALUES (5872, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 09:54:00'); +INSERT INTO `sys_job_log` VALUES (5873, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:19毫秒', '0', '', '2025-01-08 09:54:00'); +INSERT INTO `sys_job_log` VALUES (5874, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:1360毫秒', '0', '', '2025-01-08 09:54:01'); +INSERT INTO `sys_job_log` VALUES (5875, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:48毫秒', '0', '', '2025-01-08 09:54:59'); +INSERT INTO `sys_job_log` VALUES (5876, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 09:55:00'); +INSERT INTO `sys_job_log` VALUES (5877, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 09:56:00'); +INSERT INTO `sys_job_log` VALUES (5878, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:19毫秒', '0', '', '2025-01-08 09:56:00'); +INSERT INTO `sys_job_log` VALUES (5879, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:93毫秒', '0', '', '2025-01-08 09:56:00'); +INSERT INTO `sys_job_log` VALUES (5880, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:1093毫秒', '0', '', '2025-01-08 09:56:01'); +INSERT INTO `sys_job_log` VALUES (5881, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 09:56:59'); +INSERT INTO `sys_job_log` VALUES (5882, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 09:57:00'); +INSERT INTO `sys_job_log` VALUES (5883, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 09:58:00'); +INSERT INTO `sys_job_log` VALUES (5884, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:20毫秒', '0', '', '2025-01-08 09:58:00'); +INSERT INTO `sys_job_log` VALUES (5885, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:94毫秒', '0', '', '2025-01-08 09:58:00'); +INSERT INTO `sys_job_log` VALUES (5886, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:907毫秒', '0', '', '2025-01-08 09:58:00'); +INSERT INTO `sys_job_log` VALUES (5887, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:31毫秒', '0', '', '2025-01-08 09:58:59'); +INSERT INTO `sys_job_log` VALUES (5888, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 09:59:00'); +INSERT INTO `sys_job_log` VALUES (5889, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 10:00:00'); +INSERT INTO `sys_job_log` VALUES (5890, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:75毫秒', '0', '', '2025-01-08 10:00:00'); +INSERT INTO `sys_job_log` VALUES (5891, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:18毫秒', '0', '', '2025-01-08 10:00:00'); +INSERT INTO `sys_job_log` VALUES (5892, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:919毫秒', '0', '', '2025-01-08 10:00:00'); +INSERT INTO `sys_job_log` VALUES (5893, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 10:00:59'); +INSERT INTO `sys_job_log` VALUES (5894, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 10:01:00'); +INSERT INTO `sys_job_log` VALUES (5895, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 10:01:59'); +INSERT INTO `sys_job_log` VALUES (5896, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 10:02:00'); +INSERT INTO `sys_job_log` VALUES (5897, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:18毫秒', '0', '', '2025-01-08 10:02:00'); +INSERT INTO `sys_job_log` VALUES (5898, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:1110毫秒', '0', '', '2025-01-08 10:02:01'); +INSERT INTO `sys_job_log` VALUES (5899, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 10:02:59'); +INSERT INTO `sys_job_log` VALUES (5900, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 10:03:00'); +INSERT INTO `sys_job_log` VALUES (5901, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:46毫秒', '0', '', '2025-01-08 10:03:59'); +INSERT INTO `sys_job_log` VALUES (5902, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 10:04:00'); +INSERT INTO `sys_job_log` VALUES (5903, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:18毫秒', '0', '', '2025-01-08 10:04:00'); +INSERT INTO `sys_job_log` VALUES (5904, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:1015毫秒', '0', '', '2025-01-08 10:04:00'); +INSERT INTO `sys_job_log` VALUES (5905, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:32毫秒', '0', '', '2025-01-08 10:04:59'); +INSERT INTO `sys_job_log` VALUES (5906, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 10:05:00'); +INSERT INTO `sys_job_log` VALUES (5907, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:31毫秒', '0', '', '2025-01-08 10:05:59'); +INSERT INTO `sys_job_log` VALUES (5908, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 10:06:00'); +INSERT INTO `sys_job_log` VALUES (5909, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:19毫秒', '0', '', '2025-01-08 10:06:00'); +INSERT INTO `sys_job_log` VALUES (5910, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:936毫秒', '0', '', '2025-01-08 10:06:00'); +INSERT INTO `sys_job_log` VALUES (5911, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:46毫秒', '0', '', '2025-01-08 10:06:59'); +INSERT INTO `sys_job_log` VALUES (5912, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 10:07:00'); +INSERT INTO `sys_job_log` VALUES (5913, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 10:08:00'); +INSERT INTO `sys_job_log` VALUES (5914, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:49毫秒', '0', '', '2025-01-08 10:08:00'); +INSERT INTO `sys_job_log` VALUES (5915, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:18毫秒', '0', '', '2025-01-08 10:08:00'); +INSERT INTO `sys_job_log` VALUES (5916, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:985毫秒', '0', '', '2025-01-08 10:08:00'); +INSERT INTO `sys_job_log` VALUES (5917, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 10:08:59'); +INSERT INTO `sys_job_log` VALUES (5918, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 10:09:00'); +INSERT INTO `sys_job_log` VALUES (5919, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 10:09:59'); +INSERT INTO `sys_job_log` VALUES (5920, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 10:10:00'); +INSERT INTO `sys_job_log` VALUES (5921, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:18毫秒', '0', '', '2025-01-08 10:10:00'); +INSERT INTO `sys_job_log` VALUES (5922, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:969毫秒', '0', '', '2025-01-08 10:10:00'); +INSERT INTO `sys_job_log` VALUES (5923, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 10:10:59'); +INSERT INTO `sys_job_log` VALUES (5924, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 10:11:00'); +INSERT INTO `sys_job_log` VALUES (5925, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 10:11:59'); +INSERT INTO `sys_job_log` VALUES (5926, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 10:12:00'); +INSERT INTO `sys_job_log` VALUES (5927, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:18毫秒', '0', '', '2025-01-08 10:12:00'); +INSERT INTO `sys_job_log` VALUES (5928, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:972毫秒', '0', '', '2025-01-08 10:12:00'); +INSERT INTO `sys_job_log` VALUES (5929, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:49毫秒', '0', '', '2025-01-08 10:12:59'); +INSERT INTO `sys_job_log` VALUES (5930, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 10:13:00'); +INSERT INTO `sys_job_log` VALUES (5931, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:31毫秒', '0', '', '2025-01-08 10:13:59'); +INSERT INTO `sys_job_log` VALUES (5932, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 10:14:00'); +INSERT INTO `sys_job_log` VALUES (5933, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:19毫秒', '0', '', '2025-01-08 10:14:00'); +INSERT INTO `sys_job_log` VALUES (5934, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:968毫秒', '0', '', '2025-01-08 10:14:00'); +INSERT INTO `sys_job_log` VALUES (5935, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 10:14:59'); +INSERT INTO `sys_job_log` VALUES (5936, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 10:15:00'); +INSERT INTO `sys_job_log` VALUES (5937, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:46毫秒', '0', '', '2025-01-08 10:15:59'); +INSERT INTO `sys_job_log` VALUES (5938, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 10:16:00'); +INSERT INTO `sys_job_log` VALUES (5939, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:18毫秒', '0', '', '2025-01-08 10:16:00'); +INSERT INTO `sys_job_log` VALUES (5940, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:952毫秒', '0', '', '2025-01-08 10:16:00'); +INSERT INTO `sys_job_log` VALUES (5941, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:31毫秒', '0', '', '2025-01-08 10:16:59'); +INSERT INTO `sys_job_log` VALUES (5942, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 10:17:00'); +INSERT INTO `sys_job_log` VALUES (5943, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:31毫秒', '0', '', '2025-01-08 10:17:59'); +INSERT INTO `sys_job_log` VALUES (5944, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 10:18:00'); +INSERT INTO `sys_job_log` VALUES (5945, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:18毫秒', '0', '', '2025-01-08 10:18:00'); +INSERT INTO `sys_job_log` VALUES (5946, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:969毫秒', '0', '', '2025-01-08 10:18:00'); +INSERT INTO `sys_job_log` VALUES (5947, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:45毫秒', '0', '', '2025-01-08 10:18:59'); +INSERT INTO `sys_job_log` VALUES (5948, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 10:19:00'); +INSERT INTO `sys_job_log` VALUES (5949, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 10:19:59'); +INSERT INTO `sys_job_log` VALUES (5950, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 10:20:00'); +INSERT INTO `sys_job_log` VALUES (5951, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:17毫秒', '0', '', '2025-01-08 10:20:00'); +INSERT INTO `sys_job_log` VALUES (5952, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:969毫秒', '0', '', '2025-01-08 10:20:00'); +INSERT INTO `sys_job_log` VALUES (5953, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:32毫秒', '0', '', '2025-01-08 10:20:59'); +INSERT INTO `sys_job_log` VALUES (5954, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 10:21:00'); +INSERT INTO `sys_job_log` VALUES (5955, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 10:21:59'); +INSERT INTO `sys_job_log` VALUES (5956, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 10:22:00'); +INSERT INTO `sys_job_log` VALUES (5957, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:17毫秒', '0', '', '2025-01-08 10:22:00'); +INSERT INTO `sys_job_log` VALUES (5958, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:1336毫秒', '0', '', '2025-01-08 10:22:01'); +INSERT INTO `sys_job_log` VALUES (5959, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 10:22:59'); +INSERT INTO `sys_job_log` VALUES (5960, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 10:23:00'); +INSERT INTO `sys_job_log` VALUES (5961, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 10:24:00'); +INSERT INTO `sys_job_log` VALUES (5962, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:18毫秒', '0', '', '2025-01-08 10:24:00'); +INSERT INTO `sys_job_log` VALUES (5963, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:180毫秒', '0', '', '2025-01-08 10:24:00'); +INSERT INTO `sys_job_log` VALUES (5964, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:1148毫秒', '0', '', '2025-01-08 10:24:01'); +INSERT INTO `sys_job_log` VALUES (5965, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 10:24:59'); +INSERT INTO `sys_job_log` VALUES (5966, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 10:25:00'); +INSERT INTO `sys_job_log` VALUES (5967, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 10:26:00'); +INSERT INTO `sys_job_log` VALUES (5968, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:94毫秒', '0', '', '2025-01-08 10:26:00'); +INSERT INTO `sys_job_log` VALUES (5969, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:18毫秒', '0', '', '2025-01-08 10:26:00'); +INSERT INTO `sys_job_log` VALUES (5970, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:947毫秒', '0', '', '2025-01-08 10:26:00'); +INSERT INTO `sys_job_log` VALUES (5971, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 10:26:59'); +INSERT INTO `sys_job_log` VALUES (5972, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 10:27:00'); +INSERT INTO `sys_job_log` VALUES (5973, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 10:28:00'); +INSERT INTO `sys_job_log` VALUES (5974, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:94毫秒', '0', '', '2025-01-08 10:28:00'); +INSERT INTO `sys_job_log` VALUES (5975, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:19毫秒', '0', '', '2025-01-08 10:28:00'); +INSERT INTO `sys_job_log` VALUES (5976, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:918毫秒', '0', '', '2025-01-08 10:28:00'); +INSERT INTO `sys_job_log` VALUES (5977, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:31毫秒', '0', '', '2025-01-08 10:28:59'); +INSERT INTO `sys_job_log` VALUES (5978, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 10:29:00'); +INSERT INTO `sys_job_log` VALUES (5979, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 10:30:00'); +INSERT INTO `sys_job_log` VALUES (5980, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:93毫秒', '0', '', '2025-01-08 10:30:00'); +INSERT INTO `sys_job_log` VALUES (5981, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:21毫秒', '0', '', '2025-01-08 10:30:00'); +INSERT INTO `sys_job_log` VALUES (5982, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:905毫秒', '0', '', '2025-01-08 10:30:00'); +INSERT INTO `sys_job_log` VALUES (5983, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 10:31:00'); +INSERT INTO `sys_job_log` VALUES (5984, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:88毫秒', '0', '', '2025-01-08 10:31:00'); +INSERT INTO `sys_job_log` VALUES (5985, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 10:32:00'); +INSERT INTO `sys_job_log` VALUES (5986, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:77毫秒', '0', '', '2025-01-08 10:32:00'); +INSERT INTO `sys_job_log` VALUES (5987, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:18毫秒', '0', '', '2025-01-08 10:32:00'); +INSERT INTO `sys_job_log` VALUES (5988, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:906毫秒', '0', '', '2025-01-08 10:32:00'); +INSERT INTO `sys_job_log` VALUES (5989, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:48毫秒', '0', '', '2025-01-08 10:32:59'); +INSERT INTO `sys_job_log` VALUES (5990, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 10:33:00'); +INSERT INTO `sys_job_log` VALUES (5991, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 10:34:00'); +INSERT INTO `sys_job_log` VALUES (5992, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:92毫秒', '0', '', '2025-01-08 10:34:00'); +INSERT INTO `sys_job_log` VALUES (5993, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:20毫秒', '0', '', '2025-01-08 10:34:00'); +INSERT INTO `sys_job_log` VALUES (5994, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:1219毫秒', '0', '', '2025-01-08 10:34:01'); +INSERT INTO `sys_job_log` VALUES (5995, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:68毫秒', '0', '', '2025-01-08 10:34:59'); +INSERT INTO `sys_job_log` VALUES (5996, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 10:35:00'); +INSERT INTO `sys_job_log` VALUES (5997, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 10:36:00'); +INSERT INTO `sys_job_log` VALUES (5998, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:92毫秒', '0', '', '2025-01-08 10:36:00'); +INSERT INTO `sys_job_log` VALUES (5999, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:17毫秒', '0', '', '2025-01-08 10:36:00'); +INSERT INTO `sys_job_log` VALUES (6000, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:923毫秒', '0', '', '2025-01-08 10:36:00'); +INSERT INTO `sys_job_log` VALUES (6001, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 10:36:59'); +INSERT INTO `sys_job_log` VALUES (6002, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 10:37:00'); +INSERT INTO `sys_job_log` VALUES (6003, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:49毫秒', '0', '', '2025-01-08 10:37:59'); +INSERT INTO `sys_job_log` VALUES (6004, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 10:38:00'); +INSERT INTO `sys_job_log` VALUES (6005, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:17毫秒', '0', '', '2025-01-08 10:38:00'); +INSERT INTO `sys_job_log` VALUES (6006, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:1001毫秒', '0', '', '2025-01-08 10:38:00'); +INSERT INTO `sys_job_log` VALUES (6007, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:31毫秒', '0', '', '2025-01-08 10:38:59'); +INSERT INTO `sys_job_log` VALUES (6008, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 10:39:00'); +INSERT INTO `sys_job_log` VALUES (6009, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 10:39:59'); +INSERT INTO `sys_job_log` VALUES (6010, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 10:40:00'); +INSERT INTO `sys_job_log` VALUES (6011, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:18毫秒', '0', '', '2025-01-08 10:40:00'); +INSERT INTO `sys_job_log` VALUES (6012, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:985毫秒', '0', '', '2025-01-08 10:40:00'); +INSERT INTO `sys_job_log` VALUES (6013, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:32毫秒', '0', '', '2025-01-08 10:40:59'); +INSERT INTO `sys_job_log` VALUES (6014, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 10:41:00'); +INSERT INTO `sys_job_log` VALUES (6015, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 10:41:59'); +INSERT INTO `sys_job_log` VALUES (6016, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 10:42:00'); +INSERT INTO `sys_job_log` VALUES (6017, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:20毫秒', '0', '', '2025-01-08 10:42:00'); +INSERT INTO `sys_job_log` VALUES (6018, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:938毫秒', '0', '', '2025-01-08 10:42:00'); +INSERT INTO `sys_job_log` VALUES (6019, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 10:42:59'); +INSERT INTO `sys_job_log` VALUES (6020, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 10:43:00'); +INSERT INTO `sys_job_log` VALUES (6021, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 10:44:00'); +INSERT INTO `sys_job_log` VALUES (6022, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:19毫秒', '0', '', '2025-01-08 10:44:00'); +INSERT INTO `sys_job_log` VALUES (6023, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:94毫秒', '0', '', '2025-01-08 10:44:00'); +INSERT INTO `sys_job_log` VALUES (6024, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:907毫秒', '0', '', '2025-01-08 10:44:00'); +INSERT INTO `sys_job_log` VALUES (6025, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 10:44:59'); +INSERT INTO `sys_job_log` VALUES (6026, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 10:45:00'); +INSERT INTO `sys_job_log` VALUES (6027, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 10:45:59'); +INSERT INTO `sys_job_log` VALUES (6028, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 10:46:00'); +INSERT INTO `sys_job_log` VALUES (6029, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:18毫秒', '0', '', '2025-01-08 10:46:00'); +INSERT INTO `sys_job_log` VALUES (6030, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:938毫秒', '0', '', '2025-01-08 10:46:00'); +INSERT INTO `sys_job_log` VALUES (6031, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:46毫秒', '0', '', '2025-01-08 10:46:59'); +INSERT INTO `sys_job_log` VALUES (6032, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 10:47:00'); +INSERT INTO `sys_job_log` VALUES (6033, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:32毫秒', '0', '', '2025-01-08 10:47:59'); +INSERT INTO `sys_job_log` VALUES (6034, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 10:48:00'); +INSERT INTO `sys_job_log` VALUES (6035, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:18毫秒', '0', '', '2025-01-08 10:48:00'); +INSERT INTO `sys_job_log` VALUES (6036, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:990毫秒', '0', '', '2025-01-08 10:48:00'); +INSERT INTO `sys_job_log` VALUES (6037, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 10:49:00'); +INSERT INTO `sys_job_log` VALUES (6038, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:65毫秒', '0', '', '2025-01-08 10:49:00'); +INSERT INTO `sys_job_log` VALUES (6039, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 10:49:59'); +INSERT INTO `sys_job_log` VALUES (6040, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 10:50:00'); +INSERT INTO `sys_job_log` VALUES (6041, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:18毫秒', '0', '', '2025-01-08 10:50:00'); +INSERT INTO `sys_job_log` VALUES (6042, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:1030毫秒', '0', '', '2025-01-08 10:50:00'); +INSERT INTO `sys_job_log` VALUES (6043, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 10:50:59'); +INSERT INTO `sys_job_log` VALUES (6044, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 10:51:00'); +INSERT INTO `sys_job_log` VALUES (6045, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:61毫秒', '0', '', '2025-01-08 10:51:59'); +INSERT INTO `sys_job_log` VALUES (6046, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 10:52:00'); +INSERT INTO `sys_job_log` VALUES (6047, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:18毫秒', '0', '', '2025-01-08 10:52:00'); +INSERT INTO `sys_job_log` VALUES (6048, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:983毫秒', '0', '', '2025-01-08 10:52:00'); +INSERT INTO `sys_job_log` VALUES (6049, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:48毫秒', '0', '', '2025-01-08 10:52:59'); +INSERT INTO `sys_job_log` VALUES (6050, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 10:53:00'); +INSERT INTO `sys_job_log` VALUES (6051, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 10:54:00'); +INSERT INTO `sys_job_log` VALUES (6052, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:94毫秒', '0', '', '2025-01-08 10:54:00'); +INSERT INTO `sys_job_log` VALUES (6053, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:20毫秒', '0', '', '2025-01-08 10:54:00'); +INSERT INTO `sys_job_log` VALUES (6054, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:969毫秒', '0', '', '2025-01-08 10:54:00'); +INSERT INTO `sys_job_log` VALUES (6055, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 10:54:59'); +INSERT INTO `sys_job_log` VALUES (6056, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 10:55:00'); +INSERT INTO `sys_job_log` VALUES (6057, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 10:55:59'); +INSERT INTO `sys_job_log` VALUES (6058, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 10:56:00'); +INSERT INTO `sys_job_log` VALUES (6059, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:19毫秒', '0', '', '2025-01-08 10:56:00'); +INSERT INTO `sys_job_log` VALUES (6060, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:969毫秒', '0', '', '2025-01-08 10:56:00'); +INSERT INTO `sys_job_log` VALUES (6061, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 10:57:00'); +INSERT INTO `sys_job_log` VALUES (6062, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 10:57:00'); +INSERT INTO `sys_job_log` VALUES (6063, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:48毫秒', '0', '', '2025-01-08 10:57:59'); +INSERT INTO `sys_job_log` VALUES (6064, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 10:58:00'); +INSERT INTO `sys_job_log` VALUES (6065, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:20毫秒', '0', '', '2025-01-08 10:58:00'); +INSERT INTO `sys_job_log` VALUES (6066, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:938毫秒', '0', '', '2025-01-08 10:58:00'); +INSERT INTO `sys_job_log` VALUES (6067, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 10:58:59'); +INSERT INTO `sys_job_log` VALUES (6068, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 10:59:00'); +INSERT INTO `sys_job_log` VALUES (6069, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 11:00:00'); +INSERT INTO `sys_job_log` VALUES (6070, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:91毫秒', '0', '', '2025-01-08 11:00:00'); +INSERT INTO `sys_job_log` VALUES (6071, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:19毫秒', '0', '', '2025-01-08 11:00:00'); +INSERT INTO `sys_job_log` VALUES (6072, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:921毫秒', '0', '', '2025-01-08 11:00:00'); +INSERT INTO `sys_job_log` VALUES (6073, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:31毫秒', '0', '', '2025-01-08 11:00:59'); +INSERT INTO `sys_job_log` VALUES (6074, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 11:01:00'); +INSERT INTO `sys_job_log` VALUES (6075, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 11:02:00'); +INSERT INTO `sys_job_log` VALUES (6076, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:94毫秒', '0', '', '2025-01-08 11:02:00'); +INSERT INTO `sys_job_log` VALUES (6077, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:17毫秒', '0', '', '2025-01-08 11:02:00'); +INSERT INTO `sys_job_log` VALUES (6078, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:938毫秒', '0', '', '2025-01-08 11:02:00'); +INSERT INTO `sys_job_log` VALUES (6079, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 11:02:59'); +INSERT INTO `sys_job_log` VALUES (6080, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 11:03:00'); +INSERT INTO `sys_job_log` VALUES (6081, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 11:04:00'); +INSERT INTO `sys_job_log` VALUES (6082, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:94毫秒', '0', '', '2025-01-08 11:04:00'); +INSERT INTO `sys_job_log` VALUES (6083, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:18毫秒', '0', '', '2025-01-08 11:04:00'); +INSERT INTO `sys_job_log` VALUES (6084, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:915毫秒', '0', '', '2025-01-08 11:04:00'); +INSERT INTO `sys_job_log` VALUES (6085, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:33毫秒', '0', '', '2025-01-08 11:04:59'); +INSERT INTO `sys_job_log` VALUES (6086, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 11:05:00'); +INSERT INTO `sys_job_log` VALUES (6087, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 11:05:59'); +INSERT INTO `sys_job_log` VALUES (6088, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 11:06:00'); +INSERT INTO `sys_job_log` VALUES (6089, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:18毫秒', '0', '', '2025-01-08 11:06:00'); +INSERT INTO `sys_job_log` VALUES (6090, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:969毫秒', '0', '', '2025-01-08 11:06:00'); +INSERT INTO `sys_job_log` VALUES (6091, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 11:06:59'); +INSERT INTO `sys_job_log` VALUES (6092, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 11:07:00'); +INSERT INTO `sys_job_log` VALUES (6093, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 11:08:00'); +INSERT INTO `sys_job_log` VALUES (6094, 'P', 'DEFAULT', '★温湿度开关', 'P 总共耗时:18毫秒', '0', '', '2025-01-08 11:08:00'); +INSERT INTO `sys_job_log` VALUES (6095, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:22毫秒', '0', '', '2025-01-08 11:08:00'); +INSERT INTO `sys_job_log` VALUES (6096, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:78毫秒', '0', '', '2025-01-08 11:08:00'); +INSERT INTO `sys_job_log` VALUES (6097, 'P', 'DEFAULT', '★温湿度开关', 'P 总共耗时:372毫秒', '0', '', '2025-01-08 11:08:00'); +INSERT INTO `sys_job_log` VALUES (6098, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:939毫秒', '0', '', '2025-01-08 11:08:00'); +INSERT INTO `sys_job_log` VALUES (6099, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:32毫秒', '0', '', '2025-01-08 11:08:59'); +INSERT INTO `sys_job_log` VALUES (6100, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:4毫秒', '0', '', '2025-01-08 11:09:00'); +INSERT INTO `sys_job_log` VALUES (6101, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 11:09:59'); +INSERT INTO `sys_job_log` VALUES (6102, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2025-01-08 11:10:00'); +INSERT INTO `sys_job_log` VALUES (6103, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:27毫秒', '0', '', '2025-01-08 11:10:00'); +INSERT INTO `sys_job_log` VALUES (6104, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:967毫秒', '0', '', '2025-01-08 11:10:00'); +INSERT INTO `sys_job_log` VALUES (6105, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:51毫秒', '0', '', '2025-01-08 11:10:59'); +INSERT INTO `sys_job_log` VALUES (6106, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 11:11:00'); +INSERT INTO `sys_job_log` VALUES (6107, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:48毫秒', '0', '', '2025-01-08 11:11:59'); +INSERT INTO `sys_job_log` VALUES (6108, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 11:12:00'); +INSERT INTO `sys_job_log` VALUES (6109, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:19毫秒', '0', '', '2025-01-08 11:12:00'); +INSERT INTO `sys_job_log` VALUES (6110, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:984毫秒', '0', '', '2025-01-08 11:12:00'); +INSERT INTO `sys_job_log` VALUES (6111, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:31毫秒', '0', '', '2025-01-08 11:12:59'); +INSERT INTO `sys_job_log` VALUES (6112, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 11:13:00'); +INSERT INTO `sys_job_log` VALUES (6113, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 11:13:59'); +INSERT INTO `sys_job_log` VALUES (6114, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 11:14:00'); +INSERT INTO `sys_job_log` VALUES (6115, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:17毫秒', '0', '', '2025-01-08 11:14:00'); +INSERT INTO `sys_job_log` VALUES (6116, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:954毫秒', '0', '', '2025-01-08 11:14:00'); +INSERT INTO `sys_job_log` VALUES (6117, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 11:14:59'); +INSERT INTO `sys_job_log` VALUES (6118, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 11:15:00'); +INSERT INTO `sys_job_log` VALUES (6119, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 11:15:59'); +INSERT INTO `sys_job_log` VALUES (6120, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 11:16:00'); +INSERT INTO `sys_job_log` VALUES (6121, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:20毫秒', '0', '', '2025-01-08 11:16:00'); +INSERT INTO `sys_job_log` VALUES (6122, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:907毫秒', '0', '', '2025-01-08 11:16:00'); +INSERT INTO `sys_job_log` VALUES (6123, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 11:17:00'); +INSERT INTO `sys_job_log` VALUES (6124, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:202毫秒', '0', '', '2025-01-08 11:17:00'); +INSERT INTO `sys_job_log` VALUES (6125, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 11:18:00'); +INSERT INTO `sys_job_log` VALUES (6126, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:94毫秒', '0', '', '2025-01-08 11:18:00'); +INSERT INTO `sys_job_log` VALUES (6127, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:21毫秒', '0', '', '2025-01-08 11:18:00'); +INSERT INTO `sys_job_log` VALUES (6128, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:907毫秒', '0', '', '2025-01-08 11:18:00'); +INSERT INTO `sys_job_log` VALUES (6129, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 11:18:59'); +INSERT INTO `sys_job_log` VALUES (6130, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 11:19:00'); +INSERT INTO `sys_job_log` VALUES (6131, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 11:19:59'); +INSERT INTO `sys_job_log` VALUES (6132, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 11:20:00'); +INSERT INTO `sys_job_log` VALUES (6133, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:18毫秒', '0', '', '2025-01-08 11:20:00'); +INSERT INTO `sys_job_log` VALUES (6134, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:984毫秒', '0', '', '2025-01-08 11:20:00'); +INSERT INTO `sys_job_log` VALUES (6135, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:44毫秒', '0', '', '2025-01-08 11:20:59'); +INSERT INTO `sys_job_log` VALUES (6136, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 11:21:00'); +INSERT INTO `sys_job_log` VALUES (6137, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:46毫秒', '0', '', '2025-01-08 11:21:59'); +INSERT INTO `sys_job_log` VALUES (6138, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 11:22:00'); +INSERT INTO `sys_job_log` VALUES (6139, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:18毫秒', '0', '', '2025-01-08 11:22:00'); +INSERT INTO `sys_job_log` VALUES (6140, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:952毫秒', '0', '', '2025-01-08 11:22:00'); +INSERT INTO `sys_job_log` VALUES (6141, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:31毫秒', '0', '', '2025-01-08 11:22:59'); +INSERT INTO `sys_job_log` VALUES (6142, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 11:23:00'); +INSERT INTO `sys_job_log` VALUES (6143, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 11:24:00'); +INSERT INTO `sys_job_log` VALUES (6144, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:93毫秒', '0', '', '2025-01-08 11:24:00'); +INSERT INTO `sys_job_log` VALUES (6145, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:20毫秒', '0', '', '2025-01-08 11:24:00'); +INSERT INTO `sys_job_log` VALUES (6146, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:921毫秒', '0', '', '2025-01-08 11:24:00'); +INSERT INTO `sys_job_log` VALUES (6147, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 11:24:59'); +INSERT INTO `sys_job_log` VALUES (6148, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 11:25:00'); +INSERT INTO `sys_job_log` VALUES (6149, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 11:25:59'); +INSERT INTO `sys_job_log` VALUES (6150, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 11:26:00'); +INSERT INTO `sys_job_log` VALUES (6151, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:17毫秒', '0', '', '2025-01-08 11:26:00'); +INSERT INTO `sys_job_log` VALUES (6152, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:1015毫秒', '0', '', '2025-01-08 11:26:00'); +INSERT INTO `sys_job_log` VALUES (6153, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:37毫秒', '0', '', '2025-01-08 11:26:59'); +INSERT INTO `sys_job_log` VALUES (6154, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 11:27:00'); +INSERT INTO `sys_job_log` VALUES (6155, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 11:27:59'); +INSERT INTO `sys_job_log` VALUES (6156, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 11:28:00'); +INSERT INTO `sys_job_log` VALUES (6157, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:19毫秒', '0', '', '2025-01-08 11:28:00'); +INSERT INTO `sys_job_log` VALUES (6158, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:1016毫秒', '0', '', '2025-01-08 11:28:00'); +INSERT INTO `sys_job_log` VALUES (6159, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:48毫秒', '0', '', '2025-01-08 11:28:59'); +INSERT INTO `sys_job_log` VALUES (6160, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 11:29:00'); +INSERT INTO `sys_job_log` VALUES (6161, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 11:30:00'); +INSERT INTO `sys_job_log` VALUES (6162, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:19毫秒', '0', '', '2025-01-08 11:30:00'); +INSERT INTO `sys_job_log` VALUES (6163, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:97毫秒', '0', '', '2025-01-08 11:30:00'); +INSERT INTO `sys_job_log` VALUES (6164, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:999毫秒', '0', '', '2025-01-08 11:30:00'); +INSERT INTO `sys_job_log` VALUES (6165, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 11:30:59'); +INSERT INTO `sys_job_log` VALUES (6166, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 11:31:00'); +INSERT INTO `sys_job_log` VALUES (6167, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 11:31:59'); +INSERT INTO `sys_job_log` VALUES (6168, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 11:32:00'); +INSERT INTO `sys_job_log` VALUES (6169, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:19毫秒', '0', '', '2025-01-08 11:32:00'); +INSERT INTO `sys_job_log` VALUES (6170, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:954毫秒', '0', '', '2025-01-08 11:32:00'); +INSERT INTO `sys_job_log` VALUES (6171, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:48毫秒', '0', '', '2025-01-08 11:32:59'); +INSERT INTO `sys_job_log` VALUES (6172, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 11:33:00'); +INSERT INTO `sys_job_log` VALUES (6173, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:45毫秒', '0', '', '2025-01-08 11:33:59'); +INSERT INTO `sys_job_log` VALUES (6174, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 11:34:00'); +INSERT INTO `sys_job_log` VALUES (6175, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:18毫秒', '0', '', '2025-01-08 11:34:00'); +INSERT INTO `sys_job_log` VALUES (6176, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:990毫秒', '0', '', '2025-01-08 11:34:00'); +INSERT INTO `sys_job_log` VALUES (6177, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:32毫秒', '0', '', '2025-01-08 11:34:59'); +INSERT INTO `sys_job_log` VALUES (6178, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 11:35:00'); +INSERT INTO `sys_job_log` VALUES (6179, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:48毫秒', '0', '', '2025-01-08 11:35:59'); +INSERT INTO `sys_job_log` VALUES (6180, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 11:36:00'); +INSERT INTO `sys_job_log` VALUES (6181, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:20毫秒', '0', '', '2025-01-08 11:36:00'); +INSERT INTO `sys_job_log` VALUES (6182, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:938毫秒', '0', '', '2025-01-08 11:36:00'); +INSERT INTO `sys_job_log` VALUES (6183, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:31毫秒', '0', '', '2025-01-08 11:36:59'); +INSERT INTO `sys_job_log` VALUES (6184, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 11:37:00'); +INSERT INTO `sys_job_log` VALUES (6185, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 11:38:00'); +INSERT INTO `sys_job_log` VALUES (6186, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:94毫秒', '0', '', '2025-01-08 11:38:00'); +INSERT INTO `sys_job_log` VALUES (6187, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:19毫秒', '0', '', '2025-01-08 11:38:00'); +INSERT INTO `sys_job_log` VALUES (6188, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:953毫秒', '0', '', '2025-01-08 11:38:00'); +INSERT INTO `sys_job_log` VALUES (6189, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 11:38:59'); +INSERT INTO `sys_job_log` VALUES (6190, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 11:39:00'); +INSERT INTO `sys_job_log` VALUES (6191, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 11:40:00'); +INSERT INTO `sys_job_log` VALUES (6192, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:17毫秒', '0', '', '2025-01-08 11:40:00'); +INSERT INTO `sys_job_log` VALUES (6193, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:188毫秒', '0', '', '2025-01-08 11:40:00'); +INSERT INTO `sys_job_log` VALUES (6194, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:1016毫秒', '0', '', '2025-01-08 11:40:00'); +INSERT INTO `sys_job_log` VALUES (6195, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:46毫秒', '0', '', '2025-01-08 11:40:59'); +INSERT INTO `sys_job_log` VALUES (6196, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 11:41:00'); +INSERT INTO `sys_job_log` VALUES (6197, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 11:41:59'); +INSERT INTO `sys_job_log` VALUES (6198, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 11:42:00'); +INSERT INTO `sys_job_log` VALUES (6199, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:19毫秒', '0', '', '2025-01-08 11:42:00'); +INSERT INTO `sys_job_log` VALUES (6200, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:954毫秒', '0', '', '2025-01-08 11:42:00'); +INSERT INTO `sys_job_log` VALUES (6201, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 11:42:59'); +INSERT INTO `sys_job_log` VALUES (6202, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 11:43:00'); +INSERT INTO `sys_job_log` VALUES (6203, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 11:43:59'); +INSERT INTO `sys_job_log` VALUES (6204, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 11:44:00'); +INSERT INTO `sys_job_log` VALUES (6205, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:19毫秒', '0', '', '2025-01-08 11:44:00'); +INSERT INTO `sys_job_log` VALUES (6206, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:1141毫秒', '0', '', '2025-01-08 11:44:01'); +INSERT INTO `sys_job_log` VALUES (6207, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:46毫秒', '0', '', '2025-01-08 11:44:59'); +INSERT INTO `sys_job_log` VALUES (6208, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 11:45:00'); +INSERT INTO `sys_job_log` VALUES (6209, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:34毫秒', '0', '', '2025-01-08 11:45:59'); +INSERT INTO `sys_job_log` VALUES (6210, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 11:46:00'); +INSERT INTO `sys_job_log` VALUES (6211, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:22毫秒', '0', '', '2025-01-08 11:46:00'); +INSERT INTO `sys_job_log` VALUES (6212, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:968毫秒', '0', '', '2025-01-08 11:46:00'); +INSERT INTO `sys_job_log` VALUES (6213, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:70毫秒', '0', '', '2025-01-08 11:46:59'); +INSERT INTO `sys_job_log` VALUES (6214, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 11:47:00'); +INSERT INTO `sys_job_log` VALUES (6215, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 11:47:59'); +INSERT INTO `sys_job_log` VALUES (6216, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 11:48:00'); +INSERT INTO `sys_job_log` VALUES (6217, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:18毫秒', '0', '', '2025-01-08 11:48:00'); +INSERT INTO `sys_job_log` VALUES (6218, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:952毫秒', '0', '', '2025-01-08 11:48:00'); +INSERT INTO `sys_job_log` VALUES (6219, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:31毫秒', '0', '', '2025-01-08 11:48:59'); +INSERT INTO `sys_job_log` VALUES (6220, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 11:49:00'); +INSERT INTO `sys_job_log` VALUES (6221, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 11:50:00'); +INSERT INTO `sys_job_log` VALUES (6222, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:26毫秒', '0', '', '2025-01-08 11:50:00'); +INSERT INTO `sys_job_log` VALUES (6223, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:205毫秒', '0', '', '2025-01-08 11:50:00'); +INSERT INTO `sys_job_log` VALUES (6224, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:1016毫秒', '0', '', '2025-01-08 11:50:00'); +INSERT INTO `sys_job_log` VALUES (6225, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:49毫秒', '0', '', '2025-01-08 11:50:59'); +INSERT INTO `sys_job_log` VALUES (6226, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 11:51:00'); +INSERT INTO `sys_job_log` VALUES (6227, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:46毫秒', '0', '', '2025-01-08 11:51:59'); +INSERT INTO `sys_job_log` VALUES (6228, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 11:52:00'); +INSERT INTO `sys_job_log` VALUES (6229, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:20毫秒', '0', '', '2025-01-08 11:52:00'); +INSERT INTO `sys_job_log` VALUES (6230, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:953毫秒', '0', '', '2025-01-08 11:52:00'); +INSERT INTO `sys_job_log` VALUES (6231, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:31毫秒', '0', '', '2025-01-08 11:52:59'); +INSERT INTO `sys_job_log` VALUES (6232, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 11:53:00'); +INSERT INTO `sys_job_log` VALUES (6233, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:50毫秒', '0', '', '2025-01-08 11:53:59'); +INSERT INTO `sys_job_log` VALUES (6234, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 11:54:00'); +INSERT INTO `sys_job_log` VALUES (6235, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:18毫秒', '0', '', '2025-01-08 11:54:00'); +INSERT INTO `sys_job_log` VALUES (6236, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:1015毫秒', '0', '', '2025-01-08 11:54:00'); +INSERT INTO `sys_job_log` VALUES (6237, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 11:54:59'); +INSERT INTO `sys_job_log` VALUES (6238, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 11:55:00'); +INSERT INTO `sys_job_log` VALUES (6239, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 11:56:00'); +INSERT INTO `sys_job_log` VALUES (6240, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:94毫秒', '0', '', '2025-01-08 11:56:00'); +INSERT INTO `sys_job_log` VALUES (6241, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:19毫秒', '0', '', '2025-01-08 11:56:00'); +INSERT INTO `sys_job_log` VALUES (6242, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:907毫秒', '0', '', '2025-01-08 11:56:00'); +INSERT INTO `sys_job_log` VALUES (6243, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:48毫秒', '0', '', '2025-01-08 11:56:59'); +INSERT INTO `sys_job_log` VALUES (6244, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 11:57:00'); +INSERT INTO `sys_job_log` VALUES (6245, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 11:57:59'); +INSERT INTO `sys_job_log` VALUES (6246, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 11:58:00'); +INSERT INTO `sys_job_log` VALUES (6247, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:18毫秒', '0', '', '2025-01-08 11:58:00'); +INSERT INTO `sys_job_log` VALUES (6248, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:969毫秒', '0', '', '2025-01-08 11:58:00'); +INSERT INTO `sys_job_log` VALUES (6249, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:32毫秒', '0', '', '2025-01-08 11:58:59'); +INSERT INTO `sys_job_log` VALUES (6250, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 11:59:00'); +INSERT INTO `sys_job_log` VALUES (6251, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:34毫秒', '0', '', '2025-01-08 11:59:59'); +INSERT INTO `sys_job_log` VALUES (6252, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 12:00:00'); +INSERT INTO `sys_job_log` VALUES (6253, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:18毫秒', '0', '', '2025-01-08 12:00:00'); +INSERT INTO `sys_job_log` VALUES (6254, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:983毫秒', '0', '', '2025-01-08 12:00:00'); +INSERT INTO `sys_job_log` VALUES (6255, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:45毫秒', '0', '', '2025-01-08 12:00:59'); +INSERT INTO `sys_job_log` VALUES (6256, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 12:01:00'); +INSERT INTO `sys_job_log` VALUES (6257, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 12:01:59'); +INSERT INTO `sys_job_log` VALUES (6258, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 12:02:00'); +INSERT INTO `sys_job_log` VALUES (6259, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:21毫秒', '0', '', '2025-01-08 12:02:00'); +INSERT INTO `sys_job_log` VALUES (6260, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:1016毫秒', '0', '', '2025-01-08 12:02:00'); +INSERT INTO `sys_job_log` VALUES (6261, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 12:03:00'); +INSERT INTO `sys_job_log` VALUES (6262, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 12:03:00'); +INSERT INTO `sys_job_log` VALUES (6263, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:79毫秒', '0', '', '2025-01-08 12:03:59'); +INSERT INTO `sys_job_log` VALUES (6264, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 12:04:00'); +INSERT INTO `sys_job_log` VALUES (6265, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:18毫秒', '0', '', '2025-01-08 12:04:00'); +INSERT INTO `sys_job_log` VALUES (6266, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:954毫秒', '0', '', '2025-01-08 12:04:00'); +INSERT INTO `sys_job_log` VALUES (6267, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:31毫秒', '0', '', '2025-01-08 12:04:59'); +INSERT INTO `sys_job_log` VALUES (6268, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 12:05:00'); +INSERT INTO `sys_job_log` VALUES (6269, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 12:05:59'); +INSERT INTO `sys_job_log` VALUES (6270, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 12:06:00'); +INSERT INTO `sys_job_log` VALUES (6271, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:30毫秒', '0', '', '2025-01-08 12:06:00'); +INSERT INTO `sys_job_log` VALUES (6272, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:1125毫秒', '0', '', '2025-01-08 12:06:01'); +INSERT INTO `sys_job_log` VALUES (6273, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:34毫秒', '0', '', '2025-01-08 12:06:59'); +INSERT INTO `sys_job_log` VALUES (6274, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 12:07:00'); +INSERT INTO `sys_job_log` VALUES (6275, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:34毫秒', '0', '', '2025-01-08 12:07:59'); +INSERT INTO `sys_job_log` VALUES (6276, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 12:08:00'); +INSERT INTO `sys_job_log` VALUES (6277, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:28毫秒', '0', '', '2025-01-08 12:08:00'); +INSERT INTO `sys_job_log` VALUES (6278, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:954毫秒', '0', '', '2025-01-08 12:08:00'); +INSERT INTO `sys_job_log` VALUES (6279, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 12:08:59'); +INSERT INTO `sys_job_log` VALUES (6280, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 12:09:00'); +INSERT INTO `sys_job_log` VALUES (6281, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:31毫秒', '0', '', '2025-01-08 12:09:59'); +INSERT INTO `sys_job_log` VALUES (6282, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 12:10:00'); +INSERT INTO `sys_job_log` VALUES (6283, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:18毫秒', '0', '', '2025-01-08 12:10:00'); +INSERT INTO `sys_job_log` VALUES (6284, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:1046毫秒', '0', '', '2025-01-08 12:10:00'); +INSERT INTO `sys_job_log` VALUES (6285, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:46毫秒', '0', '', '2025-01-08 12:10:59'); +INSERT INTO `sys_job_log` VALUES (6286, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 12:11:00'); +INSERT INTO `sys_job_log` VALUES (6287, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 12:11:59'); +INSERT INTO `sys_job_log` VALUES (6288, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 12:12:00'); +INSERT INTO `sys_job_log` VALUES (6289, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:18毫秒', '0', '', '2025-01-08 12:12:00'); +INSERT INTO `sys_job_log` VALUES (6290, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:1047毫秒', '0', '', '2025-01-08 12:12:00'); +INSERT INTO `sys_job_log` VALUES (6291, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 12:12:59'); +INSERT INTO `sys_job_log` VALUES (6292, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 12:13:00'); +INSERT INTO `sys_job_log` VALUES (6293, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:46毫秒', '0', '', '2025-01-08 12:13:59'); +INSERT INTO `sys_job_log` VALUES (6294, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 12:14:00'); +INSERT INTO `sys_job_log` VALUES (6295, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:18毫秒', '0', '', '2025-01-08 12:14:00'); +INSERT INTO `sys_job_log` VALUES (6296, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:1110毫秒', '0', '', '2025-01-08 12:14:01'); +INSERT INTO `sys_job_log` VALUES (6297, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 12:14:59'); +INSERT INTO `sys_job_log` VALUES (6298, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 12:15:00'); +INSERT INTO `sys_job_log` VALUES (6299, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 12:15:59'); +INSERT INTO `sys_job_log` VALUES (6300, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 12:16:00'); +INSERT INTO `sys_job_log` VALUES (6301, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:18毫秒', '0', '', '2025-01-08 12:16:00'); +INSERT INTO `sys_job_log` VALUES (6302, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:968毫秒', '0', '', '2025-01-08 12:16:00'); +INSERT INTO `sys_job_log` VALUES (6303, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:31毫秒', '0', '', '2025-01-08 12:16:59'); +INSERT INTO `sys_job_log` VALUES (6304, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 12:17:00'); +INSERT INTO `sys_job_log` VALUES (6305, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 12:17:59'); +INSERT INTO `sys_job_log` VALUES (6306, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 12:18:00'); +INSERT INTO `sys_job_log` VALUES (6307, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:18毫秒', '0', '', '2025-01-08 12:18:00'); +INSERT INTO `sys_job_log` VALUES (6308, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:1033毫秒', '0', '', '2025-01-08 12:18:00'); +INSERT INTO `sys_job_log` VALUES (6309, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:46毫秒', '0', '', '2025-01-08 12:18:59'); +INSERT INTO `sys_job_log` VALUES (6310, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 12:19:00'); +INSERT INTO `sys_job_log` VALUES (6311, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 12:20:00'); +INSERT INTO `sys_job_log` VALUES (6312, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:78毫秒', '0', '', '2025-01-08 12:20:00'); +INSERT INTO `sys_job_log` VALUES (6313, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:20毫秒', '0', '', '2025-01-08 12:20:00'); +INSERT INTO `sys_job_log` VALUES (6314, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:1000毫秒', '0', '', '2025-01-08 12:20:00'); +INSERT INTO `sys_job_log` VALUES (6315, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:32毫秒', '0', '', '2025-01-08 12:20:59'); +INSERT INTO `sys_job_log` VALUES (6316, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 12:21:00'); +INSERT INTO `sys_job_log` VALUES (6317, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:46毫秒', '0', '', '2025-01-08 12:21:59'); +INSERT INTO `sys_job_log` VALUES (6318, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 12:22:00'); +INSERT INTO `sys_job_log` VALUES (6319, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:18毫秒', '0', '', '2025-01-08 12:22:00'); +INSERT INTO `sys_job_log` VALUES (6320, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:984毫秒', '0', '', '2025-01-08 12:22:00'); +INSERT INTO `sys_job_log` VALUES (6321, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:48毫秒', '0', '', '2025-01-08 12:22:59'); +INSERT INTO `sys_job_log` VALUES (6322, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 12:23:00'); +INSERT INTO `sys_job_log` VALUES (6323, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 12:23:59'); +INSERT INTO `sys_job_log` VALUES (6324, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 12:24:00'); +INSERT INTO `sys_job_log` VALUES (6325, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:21毫秒', '0', '', '2025-01-08 12:24:00'); +INSERT INTO `sys_job_log` VALUES (6326, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:953毫秒', '0', '', '2025-01-08 12:24:00'); +INSERT INTO `sys_job_log` VALUES (6327, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:31毫秒', '0', '', '2025-01-08 12:24:59'); +INSERT INTO `sys_job_log` VALUES (6328, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 12:25:00'); +INSERT INTO `sys_job_log` VALUES (6329, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:32毫秒', '0', '', '2025-01-08 12:25:59'); +INSERT INTO `sys_job_log` VALUES (6330, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 12:26:00'); +INSERT INTO `sys_job_log` VALUES (6331, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:19毫秒', '0', '', '2025-01-08 12:26:00'); +INSERT INTO `sys_job_log` VALUES (6332, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:954毫秒', '0', '', '2025-01-08 12:26:00'); +INSERT INTO `sys_job_log` VALUES (6333, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 12:26:59'); +INSERT INTO `sys_job_log` VALUES (6334, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 12:27:00'); +INSERT INTO `sys_job_log` VALUES (6335, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:44毫秒', '0', '', '2025-01-08 12:28:00'); +INSERT INTO `sys_job_log` VALUES (6336, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 12:28:00'); +INSERT INTO `sys_job_log` VALUES (6337, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:21毫秒', '0', '', '2025-01-08 12:28:00'); +INSERT INTO `sys_job_log` VALUES (6338, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:995毫秒', '0', '', '2025-01-08 12:28:00'); +INSERT INTO `sys_job_log` VALUES (6339, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 12:28:59'); +INSERT INTO `sys_job_log` VALUES (6340, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 12:29:00'); +INSERT INTO `sys_job_log` VALUES (6341, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:78毫秒', '0', '', '2025-01-08 12:29:59'); +INSERT INTO `sys_job_log` VALUES (6342, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 12:30:00'); +INSERT INTO `sys_job_log` VALUES (6343, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:19毫秒', '0', '', '2025-01-08 12:30:00'); +INSERT INTO `sys_job_log` VALUES (6344, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:917毫秒', '0', '', '2025-01-08 12:30:00'); +INSERT INTO `sys_job_log` VALUES (6345, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:62毫秒', '0', '', '2025-01-08 12:31:00'); +INSERT INTO `sys_job_log` VALUES (6346, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 12:31:00'); +INSERT INTO `sys_job_log` VALUES (6347, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 12:31:59'); +INSERT INTO `sys_job_log` VALUES (6348, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 12:32:00'); +INSERT INTO `sys_job_log` VALUES (6349, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:20毫秒', '0', '', '2025-01-08 12:32:00'); +INSERT INTO `sys_job_log` VALUES (6350, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:1188毫秒', '0', '', '2025-01-08 12:32:01'); +INSERT INTO `sys_job_log` VALUES (6351, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 12:32:59'); +INSERT INTO `sys_job_log` VALUES (6352, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 12:33:00'); +INSERT INTO `sys_job_log` VALUES (6353, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 12:33:59'); +INSERT INTO `sys_job_log` VALUES (6354, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 12:34:00'); +INSERT INTO `sys_job_log` VALUES (6355, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:18毫秒', '0', '', '2025-01-08 12:34:00'); +INSERT INTO `sys_job_log` VALUES (6356, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:954毫秒', '0', '', '2025-01-08 12:34:00'); +INSERT INTO `sys_job_log` VALUES (6357, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 12:34:59'); +INSERT INTO `sys_job_log` VALUES (6358, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 12:35:00'); +INSERT INTO `sys_job_log` VALUES (6359, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 12:35:59'); +INSERT INTO `sys_job_log` VALUES (6360, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 12:36:00'); +INSERT INTO `sys_job_log` VALUES (6361, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:21毫秒', '0', '', '2025-01-08 12:36:00'); +INSERT INTO `sys_job_log` VALUES (6362, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:969毫秒', '0', '', '2025-01-08 12:36:00'); +INSERT INTO `sys_job_log` VALUES (6363, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:46毫秒', '0', '', '2025-01-08 12:36:59'); +INSERT INTO `sys_job_log` VALUES (6364, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 12:37:00'); +INSERT INTO `sys_job_log` VALUES (6365, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:31毫秒', '0', '', '2025-01-08 12:37:59'); +INSERT INTO `sys_job_log` VALUES (6366, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 12:38:00'); +INSERT INTO `sys_job_log` VALUES (6367, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:18毫秒', '0', '', '2025-01-08 12:38:00'); +INSERT INTO `sys_job_log` VALUES (6368, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:985毫秒', '0', '', '2025-01-08 12:38:00'); +INSERT INTO `sys_job_log` VALUES (6369, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 12:38:59'); +INSERT INTO `sys_job_log` VALUES (6370, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 12:39:00'); +INSERT INTO `sys_job_log` VALUES (6371, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:78毫秒', '0', '', '2025-01-08 12:39:59'); +INSERT INTO `sys_job_log` VALUES (6372, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 12:40:00'); +INSERT INTO `sys_job_log` VALUES (6373, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:18毫秒', '0', '', '2025-01-08 12:40:00'); +INSERT INTO `sys_job_log` VALUES (6374, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:969毫秒', '0', '', '2025-01-08 12:40:00'); +INSERT INTO `sys_job_log` VALUES (6375, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:64毫秒', '0', '', '2025-01-08 12:40:59'); +INSERT INTO `sys_job_log` VALUES (6376, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 12:41:00'); +INSERT INTO `sys_job_log` VALUES (6377, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:48毫秒', '0', '', '2025-01-08 12:41:59'); +INSERT INTO `sys_job_log` VALUES (6378, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 12:42:00'); +INSERT INTO `sys_job_log` VALUES (6379, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:18毫秒', '0', '', '2025-01-08 12:42:00'); +INSERT INTO `sys_job_log` VALUES (6380, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:1088毫秒', '0', '', '2025-01-08 12:42:00'); +INSERT INTO `sys_job_log` VALUES (6381, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 12:42:59'); +INSERT INTO `sys_job_log` VALUES (6382, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 12:43:00'); +INSERT INTO `sys_job_log` VALUES (6383, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:66毫秒', '0', '', '2025-01-08 12:43:59'); +INSERT INTO `sys_job_log` VALUES (6384, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 12:44:00'); +INSERT INTO `sys_job_log` VALUES (6385, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:17毫秒', '0', '', '2025-01-08 12:44:00'); +INSERT INTO `sys_job_log` VALUES (6386, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:983毫秒', '0', '', '2025-01-08 12:44:00'); +INSERT INTO `sys_job_log` VALUES (6387, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 12:44:59'); +INSERT INTO `sys_job_log` VALUES (6388, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 12:45:00'); +INSERT INTO `sys_job_log` VALUES (6389, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 12:45:59'); +INSERT INTO `sys_job_log` VALUES (6390, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 12:46:00'); +INSERT INTO `sys_job_log` VALUES (6391, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:18毫秒', '0', '', '2025-01-08 12:46:00'); +INSERT INTO `sys_job_log` VALUES (6392, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:1031毫秒', '0', '', '2025-01-08 12:46:00'); +INSERT INTO `sys_job_log` VALUES (6393, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:46毫秒', '0', '', '2025-01-08 12:46:59'); +INSERT INTO `sys_job_log` VALUES (6394, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 12:47:00'); +INSERT INTO `sys_job_log` VALUES (6395, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:95毫秒', '0', '', '2025-01-08 12:48:00'); +INSERT INTO `sys_job_log` VALUES (6396, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 12:48:00'); +INSERT INTO `sys_job_log` VALUES (6397, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:17毫秒', '0', '', '2025-01-08 12:48:00'); +INSERT INTO `sys_job_log` VALUES (6398, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:907毫秒', '0', '', '2025-01-08 12:48:00'); +INSERT INTO `sys_job_log` VALUES (6399, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 12:48:59'); +INSERT INTO `sys_job_log` VALUES (6400, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 12:49:00'); +INSERT INTO `sys_job_log` VALUES (6401, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:46毫秒', '0', '', '2025-01-08 12:49:59'); +INSERT INTO `sys_job_log` VALUES (6402, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 12:50:00'); +INSERT INTO `sys_job_log` VALUES (6403, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:18毫秒', '0', '', '2025-01-08 12:50:00'); +INSERT INTO `sys_job_log` VALUES (6404, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:952毫秒', '0', '', '2025-01-08 12:50:00'); +INSERT INTO `sys_job_log` VALUES (6405, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:46毫秒', '0', '', '2025-01-08 12:50:59'); +INSERT INTO `sys_job_log` VALUES (6406, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 12:51:00'); +INSERT INTO `sys_job_log` VALUES (6407, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:96毫秒', '0', '', '2025-01-08 12:51:59'); +INSERT INTO `sys_job_log` VALUES (6408, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 12:52:00'); +INSERT INTO `sys_job_log` VALUES (6409, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:18毫秒', '0', '', '2025-01-08 12:52:00'); +INSERT INTO `sys_job_log` VALUES (6410, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:922毫秒', '0', '', '2025-01-08 12:52:00'); +INSERT INTO `sys_job_log` VALUES (6411, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:50毫秒', '0', '', '2025-01-08 12:52:59'); +INSERT INTO `sys_job_log` VALUES (6412, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 12:53:00'); +INSERT INTO `sys_job_log` VALUES (6413, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:52毫秒', '0', '', '2025-01-08 12:53:59'); +INSERT INTO `sys_job_log` VALUES (6414, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 12:54:00'); +INSERT INTO `sys_job_log` VALUES (6415, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:17毫秒', '0', '', '2025-01-08 12:54:00'); +INSERT INTO `sys_job_log` VALUES (6416, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:965毫秒', '0', '', '2025-01-08 12:54:00'); +INSERT INTO `sys_job_log` VALUES (6417, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 12:54:59'); +INSERT INTO `sys_job_log` VALUES (6418, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 12:55:00'); +INSERT INTO `sys_job_log` VALUES (6419, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:46毫秒', '0', '', '2025-01-08 12:55:59'); +INSERT INTO `sys_job_log` VALUES (6420, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 12:56:00'); +INSERT INTO `sys_job_log` VALUES (6421, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:18毫秒', '0', '', '2025-01-08 12:56:00'); +INSERT INTO `sys_job_log` VALUES (6422, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:952毫秒', '0', '', '2025-01-08 12:56:00'); +INSERT INTO `sys_job_log` VALUES (6423, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:33毫秒', '0', '', '2025-01-08 12:56:59'); +INSERT INTO `sys_job_log` VALUES (6424, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 12:57:00'); +INSERT INTO `sys_job_log` VALUES (6425, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 12:57:59'); +INSERT INTO `sys_job_log` VALUES (6426, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 12:58:00'); +INSERT INTO `sys_job_log` VALUES (6427, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:18毫秒', '0', '', '2025-01-08 12:58:00'); +INSERT INTO `sys_job_log` VALUES (6428, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:1047毫秒', '0', '', '2025-01-08 12:58:00'); +INSERT INTO `sys_job_log` VALUES (6429, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 12:59:00'); +INSERT INTO `sys_job_log` VALUES (6430, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 12:59:00'); +INSERT INTO `sys_job_log` VALUES (6431, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 12:59:59'); +INSERT INTO `sys_job_log` VALUES (6432, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 13:00:00'); +INSERT INTO `sys_job_log` VALUES (6433, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:19毫秒', '0', '', '2025-01-08 13:00:00'); +INSERT INTO `sys_job_log` VALUES (6434, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:1004毫秒', '0', '', '2025-01-08 13:00:00'); +INSERT INTO `sys_job_log` VALUES (6435, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:32毫秒', '0', '', '2025-01-08 13:00:59'); +INSERT INTO `sys_job_log` VALUES (6436, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 13:01:00'); +INSERT INTO `sys_job_log` VALUES (6437, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 13:01:59'); +INSERT INTO `sys_job_log` VALUES (6438, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 13:02:00'); +INSERT INTO `sys_job_log` VALUES (6439, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:18毫秒', '0', '', '2025-01-08 13:02:00'); +INSERT INTO `sys_job_log` VALUES (6440, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:954毫秒', '0', '', '2025-01-08 13:02:00'); +INSERT INTO `sys_job_log` VALUES (6441, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 13:02:59'); +INSERT INTO `sys_job_log` VALUES (6442, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 13:03:00'); +INSERT INTO `sys_job_log` VALUES (6443, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:54毫秒', '0', '', '2025-01-08 13:03:59'); +INSERT INTO `sys_job_log` VALUES (6444, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 13:04:00'); +INSERT INTO `sys_job_log` VALUES (6445, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:17毫秒', '0', '', '2025-01-08 13:04:00'); +INSERT INTO `sys_job_log` VALUES (6446, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:1001毫秒', '0', '', '2025-01-08 13:04:00'); +INSERT INTO `sys_job_log` VALUES (6447, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:33毫秒', '0', '', '2025-01-08 13:04:59'); +INSERT INTO `sys_job_log` VALUES (6448, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 13:05:00'); +INSERT INTO `sys_job_log` VALUES (6449, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 13:05:59'); +INSERT INTO `sys_job_log` VALUES (6450, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 13:06:00'); +INSERT INTO `sys_job_log` VALUES (6451, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:20毫秒', '0', '', '2025-01-08 13:06:00'); +INSERT INTO `sys_job_log` VALUES (6452, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:954毫秒', '0', '', '2025-01-08 13:06:00'); +INSERT INTO `sys_job_log` VALUES (6453, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 13:06:59'); +INSERT INTO `sys_job_log` VALUES (6454, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 13:07:00'); +INSERT INTO `sys_job_log` VALUES (6455, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 13:07:59'); +INSERT INTO `sys_job_log` VALUES (6456, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 13:08:00'); +INSERT INTO `sys_job_log` VALUES (6457, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:19毫秒', '0', '', '2025-01-08 13:08:00'); +INSERT INTO `sys_job_log` VALUES (6458, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:973毫秒', '0', '', '2025-01-08 13:08:00'); +INSERT INTO `sys_job_log` VALUES (6459, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:32毫秒', '0', '', '2025-01-08 13:08:59'); +INSERT INTO `sys_job_log` VALUES (6460, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 13:09:00'); +INSERT INTO `sys_job_log` VALUES (6461, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:78毫秒', '0', '', '2025-01-08 13:09:59'); +INSERT INTO `sys_job_log` VALUES (6462, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 13:10:00'); +INSERT INTO `sys_job_log` VALUES (6463, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:18毫秒', '0', '', '2025-01-08 13:10:00'); +INSERT INTO `sys_job_log` VALUES (6464, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:907毫秒', '0', '', '2025-01-08 13:10:00'); +INSERT INTO `sys_job_log` VALUES (6465, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:30毫秒', '0', '', '2025-01-08 13:10:59'); +INSERT INTO `sys_job_log` VALUES (6466, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 13:11:00'); +INSERT INTO `sys_job_log` VALUES (6467, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 13:11:59'); +INSERT INTO `sys_job_log` VALUES (6468, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 13:12:00'); +INSERT INTO `sys_job_log` VALUES (6469, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:18毫秒', '0', '', '2025-01-08 13:12:00'); +INSERT INTO `sys_job_log` VALUES (6470, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:1079毫秒', '0', '', '2025-01-08 13:12:00'); +INSERT INTO `sys_job_log` VALUES (6471, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 13:12:59'); +INSERT INTO `sys_job_log` VALUES (6472, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 13:13:00'); +INSERT INTO `sys_job_log` VALUES (6473, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 13:14:00'); +INSERT INTO `sys_job_log` VALUES (6474, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:17毫秒', '0', '', '2025-01-08 13:14:00'); +INSERT INTO `sys_job_log` VALUES (6475, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:295毫秒', '0', '', '2025-01-08 13:14:00'); +INSERT INTO `sys_job_log` VALUES (6476, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:1217毫秒', '0', '', '2025-01-08 13:14:01'); +INSERT INTO `sys_job_log` VALUES (6477, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:46毫秒', '0', '', '2025-01-08 13:14:59'); +INSERT INTO `sys_job_log` VALUES (6478, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 13:15:00'); +INSERT INTO `sys_job_log` VALUES (6479, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:32毫秒', '0', '', '2025-01-08 13:15:59'); +INSERT INTO `sys_job_log` VALUES (6480, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 13:16:00'); +INSERT INTO `sys_job_log` VALUES (6481, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:20毫秒', '0', '', '2025-01-08 13:16:00'); +INSERT INTO `sys_job_log` VALUES (6482, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:939毫秒', '0', '', '2025-01-08 13:16:00'); +INSERT INTO `sys_job_log` VALUES (6483, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 13:17:00'); +INSERT INTO `sys_job_log` VALUES (6484, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 13:17:00'); +INSERT INTO `sys_job_log` VALUES (6485, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:62毫秒', '0', '', '2025-01-08 13:17:59'); +INSERT INTO `sys_job_log` VALUES (6486, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 13:18:00'); +INSERT INTO `sys_job_log` VALUES (6487, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:17毫秒', '0', '', '2025-01-08 13:18:00'); +INSERT INTO `sys_job_log` VALUES (6488, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:990毫秒', '0', '', '2025-01-08 13:18:00'); +INSERT INTO `sys_job_log` VALUES (6489, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:30毫秒', '0', '', '2025-01-08 13:18:59'); +INSERT INTO `sys_job_log` VALUES (6490, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 13:19:00'); +INSERT INTO `sys_job_log` VALUES (6491, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:48毫秒', '0', '', '2025-01-08 13:19:59'); +INSERT INTO `sys_job_log` VALUES (6492, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 13:20:00'); +INSERT INTO `sys_job_log` VALUES (6493, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:17毫秒', '0', '', '2025-01-08 13:20:00'); +INSERT INTO `sys_job_log` VALUES (6494, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:1094毫秒', '0', '', '2025-01-08 13:20:00'); +INSERT INTO `sys_job_log` VALUES (6495, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:46毫秒', '0', '', '2025-01-08 13:20:59'); +INSERT INTO `sys_job_log` VALUES (6496, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 13:21:00'); +INSERT INTO `sys_job_log` VALUES (6497, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 13:22:00'); +INSERT INTO `sys_job_log` VALUES (6498, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:109毫秒', '0', '', '2025-01-08 13:22:00'); +INSERT INTO `sys_job_log` VALUES (6499, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:19毫秒', '0', '', '2025-01-08 13:22:00'); +INSERT INTO `sys_job_log` VALUES (6500, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:938毫秒', '0', '', '2025-01-08 13:22:00'); +INSERT INTO `sys_job_log` VALUES (6501, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:78毫秒', '0', '', '2025-01-08 13:22:59'); +INSERT INTO `sys_job_log` VALUES (6502, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 13:23:00'); +INSERT INTO `sys_job_log` VALUES (6503, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 13:23:59'); +INSERT INTO `sys_job_log` VALUES (6504, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 13:24:00'); +INSERT INTO `sys_job_log` VALUES (6505, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:17毫秒', '0', '', '2025-01-08 13:24:00'); +INSERT INTO `sys_job_log` VALUES (6506, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:954毫秒', '0', '', '2025-01-08 13:24:00'); +INSERT INTO `sys_job_log` VALUES (6507, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:48毫秒', '0', '', '2025-01-08 13:24:59'); +INSERT INTO `sys_job_log` VALUES (6508, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 13:25:00'); +INSERT INTO `sys_job_log` VALUES (6509, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 13:25:59'); +INSERT INTO `sys_job_log` VALUES (6510, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 13:26:00'); +INSERT INTO `sys_job_log` VALUES (6511, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:23毫秒', '0', '', '2025-01-08 13:26:00'); +INSERT INTO `sys_job_log` VALUES (6512, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:985毫秒', '0', '', '2025-01-08 13:26:00'); +INSERT INTO `sys_job_log` VALUES (6513, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:32毫秒', '0', '', '2025-01-08 13:26:59'); +INSERT INTO `sys_job_log` VALUES (6514, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 13:27:00'); +INSERT INTO `sys_job_log` VALUES (6515, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:49毫秒', '0', '', '2025-01-08 13:27:59'); +INSERT INTO `sys_job_log` VALUES (6516, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 13:28:00'); +INSERT INTO `sys_job_log` VALUES (6517, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:19毫秒', '0', '', '2025-01-08 13:28:00'); +INSERT INTO `sys_job_log` VALUES (6518, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:952毫秒', '0', '', '2025-01-08 13:28:00'); +INSERT INTO `sys_job_log` VALUES (6519, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 13:28:59'); +INSERT INTO `sys_job_log` VALUES (6520, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 13:29:00'); +INSERT INTO `sys_job_log` VALUES (6521, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:48毫秒', '0', '', '2025-01-08 13:29:59'); +INSERT INTO `sys_job_log` VALUES (6522, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 13:30:00'); +INSERT INTO `sys_job_log` VALUES (6523, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:19毫秒', '0', '', '2025-01-08 13:30:00'); +INSERT INTO `sys_job_log` VALUES (6524, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:944毫秒', '0', '', '2025-01-08 13:30:00'); +INSERT INTO `sys_job_log` VALUES (6525, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:44毫秒', '0', '', '2025-01-08 13:30:59'); +INSERT INTO `sys_job_log` VALUES (6526, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 13:31:00'); +INSERT INTO `sys_job_log` VALUES (6527, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 13:31:59'); +INSERT INTO `sys_job_log` VALUES (6528, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 13:32:00'); +INSERT INTO `sys_job_log` VALUES (6529, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:19毫秒', '0', '', '2025-01-08 13:32:00'); +INSERT INTO `sys_job_log` VALUES (6530, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:954毫秒', '0', '', '2025-01-08 13:32:00'); +INSERT INTO `sys_job_log` VALUES (6531, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 13:33:00'); +INSERT INTO `sys_job_log` VALUES (6532, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 13:33:00'); +INSERT INTO `sys_job_log` VALUES (6533, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:48毫秒', '0', '', '2025-01-08 13:33:59'); +INSERT INTO `sys_job_log` VALUES (6534, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 13:34:00'); +INSERT INTO `sys_job_log` VALUES (6535, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:18毫秒', '0', '', '2025-01-08 13:34:00'); +INSERT INTO `sys_job_log` VALUES (6536, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:967毫秒', '0', '', '2025-01-08 13:34:00'); +INSERT INTO `sys_job_log` VALUES (6537, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 13:34:59'); +INSERT INTO `sys_job_log` VALUES (6538, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 13:35:00'); +INSERT INTO `sys_job_log` VALUES (6539, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 13:35:59'); +INSERT INTO `sys_job_log` VALUES (6540, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 13:36:00'); +INSERT INTO `sys_job_log` VALUES (6541, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:18毫秒', '0', '', '2025-01-08 13:36:00'); +INSERT INTO `sys_job_log` VALUES (6542, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:953毫秒', '0', '', '2025-01-08 13:36:00'); +INSERT INTO `sys_job_log` VALUES (6543, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:46毫秒', '0', '', '2025-01-08 13:36:59'); +INSERT INTO `sys_job_log` VALUES (6544, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 13:37:00'); +INSERT INTO `sys_job_log` VALUES (6545, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 13:37:59'); +INSERT INTO `sys_job_log` VALUES (6546, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 13:38:00'); +INSERT INTO `sys_job_log` VALUES (6547, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:18毫秒', '0', '', '2025-01-08 13:38:00'); +INSERT INTO `sys_job_log` VALUES (6548, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:1011毫秒', '0', '', '2025-01-08 13:38:00'); +INSERT INTO `sys_job_log` VALUES (6549, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 13:38:59'); +INSERT INTO `sys_job_log` VALUES (6550, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 13:39:00'); +INSERT INTO `sys_job_log` VALUES (6551, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:95毫秒', '0', '', '2025-01-08 13:39:59'); +INSERT INTO `sys_job_log` VALUES (6552, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 13:40:00'); +INSERT INTO `sys_job_log` VALUES (6553, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:19毫秒', '0', '', '2025-01-08 13:40:00'); +INSERT INTO `sys_job_log` VALUES (6554, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:905毫秒', '0', '', '2025-01-08 13:40:00'); +INSERT INTO `sys_job_log` VALUES (6555, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 13:41:00'); +INSERT INTO `sys_job_log` VALUES (6556, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:113毫秒', '0', '', '2025-01-08 13:41:00'); +INSERT INTO `sys_job_log` VALUES (6557, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:88毫秒', '0', '', '2025-01-08 13:41:59'); +INSERT INTO `sys_job_log` VALUES (6558, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 13:42:00'); +INSERT INTO `sys_job_log` VALUES (6559, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:19毫秒', '0', '', '2025-01-08 13:42:00'); +INSERT INTO `sys_job_log` VALUES (6560, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:962毫秒', '0', '', '2025-01-08 13:42:00'); +INSERT INTO `sys_job_log` VALUES (6561, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 13:42:59'); +INSERT INTO `sys_job_log` VALUES (6562, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 13:43:00'); +INSERT INTO `sys_job_log` VALUES (6563, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:60毫秒', '0', '', '2025-01-08 13:43:59'); +INSERT INTO `sys_job_log` VALUES (6564, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 13:44:00'); +INSERT INTO `sys_job_log` VALUES (6565, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:17毫秒', '0', '', '2025-01-08 13:44:00'); +INSERT INTO `sys_job_log` VALUES (6566, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:1036毫秒', '0', '', '2025-01-08 13:44:00'); +INSERT INTO `sys_job_log` VALUES (6567, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 13:44:59'); +INSERT INTO `sys_job_log` VALUES (6568, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 13:45:00'); +INSERT INTO `sys_job_log` VALUES (6569, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:94毫秒', '0', '', '2025-01-08 13:45:59'); +INSERT INTO `sys_job_log` VALUES (6570, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 13:46:00'); +INSERT INTO `sys_job_log` VALUES (6571, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:19毫秒', '0', '', '2025-01-08 13:46:00'); +INSERT INTO `sys_job_log` VALUES (6572, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:1070毫秒', '0', '', '2025-01-08 13:46:00'); +INSERT INTO `sys_job_log` VALUES (6573, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:48毫秒', '0', '', '2025-01-08 13:46:59'); +INSERT INTO `sys_job_log` VALUES (6574, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 13:47:00'); +INSERT INTO `sys_job_log` VALUES (6575, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:49毫秒', '0', '', '2025-01-08 13:47:59'); +INSERT INTO `sys_job_log` VALUES (6576, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 13:48:00'); +INSERT INTO `sys_job_log` VALUES (6577, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:18毫秒', '0', '', '2025-01-08 13:48:00'); +INSERT INTO `sys_job_log` VALUES (6578, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:968毫秒', '0', '', '2025-01-08 13:48:00'); +INSERT INTO `sys_job_log` VALUES (6579, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:64毫秒', '0', '', '2025-01-08 13:48:59'); +INSERT INTO `sys_job_log` VALUES (6580, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 13:49:00'); +INSERT INTO `sys_job_log` VALUES (6581, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:93毫秒', '0', '', '2025-01-08 13:49:59'); +INSERT INTO `sys_job_log` VALUES (6582, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 13:50:00'); +INSERT INTO `sys_job_log` VALUES (6583, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:18毫秒', '0', '', '2025-01-08 13:50:00'); +INSERT INTO `sys_job_log` VALUES (6584, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:906毫秒', '0', '', '2025-01-08 13:50:00'); +INSERT INTO `sys_job_log` VALUES (6585, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:31毫秒', '0', '', '2025-01-08 13:50:59'); +INSERT INTO `sys_job_log` VALUES (6586, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 13:51:00'); +INSERT INTO `sys_job_log` VALUES (6587, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 13:52:00'); +INSERT INTO `sys_job_log` VALUES (6588, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:109毫秒', '0', '', '2025-01-08 13:52:00'); +INSERT INTO `sys_job_log` VALUES (6589, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:22毫秒', '0', '', '2025-01-08 13:52:00'); +INSERT INTO `sys_job_log` VALUES (6590, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:921毫秒', '0', '', '2025-01-08 13:52:00'); +INSERT INTO `sys_job_log` VALUES (6591, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 13:52:59'); +INSERT INTO `sys_job_log` VALUES (6592, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 13:53:00'); +INSERT INTO `sys_job_log` VALUES (6593, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:46毫秒', '0', '', '2025-01-08 13:53:59'); +INSERT INTO `sys_job_log` VALUES (6594, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 13:54:00'); +INSERT INTO `sys_job_log` VALUES (6595, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:20毫秒', '0', '', '2025-01-08 13:54:00'); +INSERT INTO `sys_job_log` VALUES (6596, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:954毫秒', '0', '', '2025-01-08 13:54:00'); +INSERT INTO `sys_job_log` VALUES (6597, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:46毫秒', '0', '', '2025-01-08 13:54:59'); +INSERT INTO `sys_job_log` VALUES (6598, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 13:55:00'); +INSERT INTO `sys_job_log` VALUES (6599, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:46毫秒', '0', '', '2025-01-08 13:55:59'); +INSERT INTO `sys_job_log` VALUES (6600, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 13:56:00'); +INSERT INTO `sys_job_log` VALUES (6601, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:17毫秒', '0', '', '2025-01-08 13:56:00'); +INSERT INTO `sys_job_log` VALUES (6602, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:999毫秒', '0', '', '2025-01-08 13:56:00'); +INSERT INTO `sys_job_log` VALUES (6603, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 13:57:00'); +INSERT INTO `sys_job_log` VALUES (6604, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:96毫秒', '0', '', '2025-01-08 13:57:00'); +INSERT INTO `sys_job_log` VALUES (6605, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 13:58:00'); +INSERT INTO `sys_job_log` VALUES (6606, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:94毫秒', '0', '', '2025-01-08 13:58:00'); +INSERT INTO `sys_job_log` VALUES (6607, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:20毫秒', '0', '', '2025-01-08 13:58:00'); +INSERT INTO `sys_job_log` VALUES (6608, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:922毫秒', '0', '', '2025-01-08 13:58:00'); +INSERT INTO `sys_job_log` VALUES (6609, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 13:58:59'); +INSERT INTO `sys_job_log` VALUES (6610, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 13:59:00'); +INSERT INTO `sys_job_log` VALUES (6611, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 13:59:59'); +INSERT INTO `sys_job_log` VALUES (6612, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 14:00:00'); +INSERT INTO `sys_job_log` VALUES (6613, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:20毫秒', '0', '', '2025-01-08 14:00:00'); +INSERT INTO `sys_job_log` VALUES (6614, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:985毫秒', '0', '', '2025-01-08 14:00:00'); +INSERT INTO `sys_job_log` VALUES (6615, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:31毫秒', '0', '', '2025-01-08 14:00:59'); +INSERT INTO `sys_job_log` VALUES (6616, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 14:01:00'); +INSERT INTO `sys_job_log` VALUES (6617, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 14:02:00'); +INSERT INTO `sys_job_log` VALUES (6618, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:17毫秒', '0', '', '2025-01-08 14:02:00'); +INSERT INTO `sys_job_log` VALUES (6619, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:110毫秒', '0', '', '2025-01-08 14:02:00'); +INSERT INTO `sys_job_log` VALUES (6620, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:1437毫秒', '0', '', '2025-01-08 14:02:01'); +INSERT INTO `sys_job_log` VALUES (6621, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 14:02:59'); +INSERT INTO `sys_job_log` VALUES (6622, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 14:03:00'); +INSERT INTO `sys_job_log` VALUES (6623, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:94毫秒', '0', '', '2025-01-08 14:03:59'); +INSERT INTO `sys_job_log` VALUES (6624, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 14:04:00'); +INSERT INTO `sys_job_log` VALUES (6625, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:18毫秒', '0', '', '2025-01-08 14:04:00'); +INSERT INTO `sys_job_log` VALUES (6626, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:1063毫秒', '0', '', '2025-01-08 14:04:00'); +INSERT INTO `sys_job_log` VALUES (6627, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:49毫秒', '0', '', '2025-01-08 14:04:59'); +INSERT INTO `sys_job_log` VALUES (6628, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 14:05:00'); +INSERT INTO `sys_job_log` VALUES (6629, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:48毫秒', '0', '', '2025-01-08 14:05:59'); +INSERT INTO `sys_job_log` VALUES (6630, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 14:06:00'); +INSERT INTO `sys_job_log` VALUES (6631, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:20毫秒', '0', '', '2025-01-08 14:06:00'); +INSERT INTO `sys_job_log` VALUES (6632, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:1282毫秒', '0', '', '2025-01-08 14:06:01'); +INSERT INTO `sys_job_log` VALUES (6633, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:45毫秒', '0', '', '2025-01-08 14:06:59'); +INSERT INTO `sys_job_log` VALUES (6634, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 14:07:00'); +INSERT INTO `sys_job_log` VALUES (6635, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 14:07:59'); +INSERT INTO `sys_job_log` VALUES (6636, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 14:08:00'); +INSERT INTO `sys_job_log` VALUES (6637, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:17毫秒', '0', '', '2025-01-08 14:08:00'); +INSERT INTO `sys_job_log` VALUES (6638, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:969毫秒', '0', '', '2025-01-08 14:08:00'); +INSERT INTO `sys_job_log` VALUES (6639, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 14:08:59'); +INSERT INTO `sys_job_log` VALUES (6640, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 14:09:00'); +INSERT INTO `sys_job_log` VALUES (6641, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 14:09:59'); +INSERT INTO `sys_job_log` VALUES (6642, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 14:10:00'); +INSERT INTO `sys_job_log` VALUES (6643, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:19毫秒', '0', '', '2025-01-08 14:10:00'); +INSERT INTO `sys_job_log` VALUES (6644, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:955毫秒', '0', '', '2025-01-08 14:10:00'); +INSERT INTO `sys_job_log` VALUES (6645, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:48毫秒', '0', '', '2025-01-08 14:10:59'); +INSERT INTO `sys_job_log` VALUES (6646, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 14:11:00'); +INSERT INTO `sys_job_log` VALUES (6647, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 14:12:00'); +INSERT INTO `sys_job_log` VALUES (6648, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:18毫秒', '0', '', '2025-01-08 14:12:00'); +INSERT INTO `sys_job_log` VALUES (6649, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:87毫秒', '0', '', '2025-01-08 14:12:00'); +INSERT INTO `sys_job_log` VALUES (6650, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:1499毫秒', '0', '', '2025-01-08 14:12:01'); +INSERT INTO `sys_job_log` VALUES (6651, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:58毫秒', '0', '', '2025-01-08 14:12:59'); +INSERT INTO `sys_job_log` VALUES (6652, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 14:13:00'); +INSERT INTO `sys_job_log` VALUES (6653, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:94毫秒', '0', '', '2025-01-08 14:13:59'); +INSERT INTO `sys_job_log` VALUES (6654, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 14:14:00'); +INSERT INTO `sys_job_log` VALUES (6655, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:18毫秒', '0', '', '2025-01-08 14:14:00'); +INSERT INTO `sys_job_log` VALUES (6656, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:938毫秒', '0', '', '2025-01-08 14:14:00'); +INSERT INTO `sys_job_log` VALUES (6657, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:46毫秒', '0', '', '2025-01-08 14:14:59'); +INSERT INTO `sys_job_log` VALUES (6658, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 14:15:00'); +INSERT INTO `sys_job_log` VALUES (6659, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 14:15:59'); +INSERT INTO `sys_job_log` VALUES (6660, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 14:16:00'); +INSERT INTO `sys_job_log` VALUES (6661, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:17毫秒', '0', '', '2025-01-08 14:16:00'); +INSERT INTO `sys_job_log` VALUES (6662, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:954毫秒', '0', '', '2025-01-08 14:16:00'); +INSERT INTO `sys_job_log` VALUES (6663, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:48毫秒', '0', '', '2025-01-08 14:16:59'); +INSERT INTO `sys_job_log` VALUES (6664, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 14:17:00'); +INSERT INTO `sys_job_log` VALUES (6665, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 14:18:00'); +INSERT INTO `sys_job_log` VALUES (6666, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:29毫秒', '0', '', '2025-01-08 14:18:00'); +INSERT INTO `sys_job_log` VALUES (6667, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 14:19:00'); +INSERT INTO `sys_job_log` VALUES (6668, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:62毫秒', '0', '', '2025-01-08 14:19:00'); +INSERT INTO `sys_job_log` VALUES (6669, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 14:19:59'); +INSERT INTO `sys_job_log` VALUES (6670, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 14:20:00'); +INSERT INTO `sys_job_log` VALUES (6671, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:18毫秒', '0', '', '2025-01-08 14:20:00'); +INSERT INTO `sys_job_log` VALUES (6672, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:1034毫秒', '0', '', '2025-01-08 14:20:00'); +INSERT INTO `sys_job_log` VALUES (6673, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:68毫秒', '0', '', '2025-01-08 14:20:59'); +INSERT INTO `sys_job_log` VALUES (6674, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 14:21:00'); +INSERT INTO `sys_job_log` VALUES (6675, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:46毫秒', '0', '', '2025-01-08 14:21:59'); +INSERT INTO `sys_job_log` VALUES (6676, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 14:22:00'); +INSERT INTO `sys_job_log` VALUES (6677, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:21毫秒', '0', '', '2025-01-08 14:22:00'); +INSERT INTO `sys_job_log` VALUES (6678, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:983毫秒', '0', '', '2025-01-08 14:22:00'); +INSERT INTO `sys_job_log` VALUES (6679, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 14:22:59'); +INSERT INTO `sys_job_log` VALUES (6680, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 14:23:00'); +INSERT INTO `sys_job_log` VALUES (6681, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:47毫秒', '0', '', '2025-01-08 14:23:59'); +INSERT INTO `sys_job_log` VALUES (6682, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 14:24:00'); +INSERT INTO `sys_job_log` VALUES (6683, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:17毫秒', '0', '', '2025-01-08 14:24:00'); +INSERT INTO `sys_job_log` VALUES (6684, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:1021毫秒', '0', '', '2025-01-08 14:24:00'); +INSERT INTO `sys_job_log` VALUES (6685, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:62毫秒', '0', '', '2025-01-08 14:24:59'); +INSERT INTO `sys_job_log` VALUES (6686, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:6毫秒', '0', '', '2025-01-08 14:25:00'); +INSERT INTO `sys_job_log` VALUES (6687, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:7毫秒', '0', '', '2025-01-08 14:26:00'); +INSERT INTO `sys_job_log` VALUES (6688, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:19毫秒', '0', '', '2025-01-08 14:26:00'); +INSERT INTO `sys_job_log` VALUES (6689, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:187毫秒', '0', '', '2025-01-08 14:26:00'); +INSERT INTO `sys_job_log` VALUES (6690, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:982毫秒', '0', '', '2025-01-08 14:26:00'); +INSERT INTO `sys_job_log` VALUES (6691, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:7毫秒', '0', '', '2025-01-08 14:27:00'); +INSERT INTO `sys_job_log` VALUES (6692, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:187毫秒', '0', '', '2025-01-08 14:27:00'); +INSERT INTO `sys_job_log` VALUES (6693, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:7毫秒', '0', '', '2025-01-08 14:28:00'); +INSERT INTO `sys_job_log` VALUES (6694, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:18毫秒', '0', '', '2025-01-08 14:28:00'); +INSERT INTO `sys_job_log` VALUES (6695, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:192毫秒', '0', '', '2025-01-08 14:28:00'); +INSERT INTO `sys_job_log` VALUES (6696, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:971毫秒', '0', '', '2025-01-08 14:28:00'); +INSERT INTO `sys_job_log` VALUES (6697, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:7毫秒', '0', '', '2025-01-08 14:29:00'); +INSERT INTO `sys_job_log` VALUES (6698, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:187毫秒', '0', '', '2025-01-08 14:29:00'); +INSERT INTO `sys_job_log` VALUES (6699, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 14:30:00'); +INSERT INTO `sys_job_log` VALUES (6700, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:17毫秒', '0', '', '2025-01-08 14:30:00'); +INSERT INTO `sys_job_log` VALUES (6701, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:282毫秒', '0', '', '2025-01-08 14:30:00'); +INSERT INTO `sys_job_log` VALUES (6702, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:985毫秒', '0', '', '2025-01-08 14:30:00'); +INSERT INTO `sys_job_log` VALUES (6703, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:48毫秒', '0', '', '2025-01-08 14:30:59'); +INSERT INTO `sys_job_log` VALUES (6704, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:12毫秒', '0', '', '2025-01-08 14:31:00'); +INSERT INTO `sys_job_log` VALUES (6705, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:7毫秒', '0', '', '2025-01-08 14:32:00'); +INSERT INTO `sys_job_log` VALUES (6706, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:19毫秒', '0', '', '2025-01-08 14:32:00'); +INSERT INTO `sys_job_log` VALUES (6707, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:344毫秒', '0', '', '2025-01-08 14:32:00'); +INSERT INTO `sys_job_log` VALUES (6708, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:956毫秒', '0', '', '2025-01-08 14:32:00'); +INSERT INTO `sys_job_log` VALUES (6709, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:11毫秒', '0', '', '2025-01-08 14:33:00'); +INSERT INTO `sys_job_log` VALUES (6710, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:190毫秒', '0', '', '2025-01-08 14:33:00'); +INSERT INTO `sys_job_log` VALUES (6711, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:6毫秒', '0', '', '2025-01-08 14:34:00'); +INSERT INTO `sys_job_log` VALUES (6712, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:17毫秒', '0', '', '2025-01-08 14:34:00'); +INSERT INTO `sys_job_log` VALUES (6713, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:408毫秒', '0', '', '2025-01-08 14:34:00'); +INSERT INTO `sys_job_log` VALUES (6714, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:1066毫秒', '0', '', '2025-01-08 14:34:00'); +INSERT INTO `sys_job_log` VALUES (6715, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:12毫秒', '0', '', '2025-01-08 14:35:00'); +INSERT INTO `sys_job_log` VALUES (6716, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:188毫秒', '0', '', '2025-01-08 14:35:00'); +INSERT INTO `sys_job_log` VALUES (6717, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:7毫秒', '0', '', '2025-01-08 14:36:00'); +INSERT INTO `sys_job_log` VALUES (6718, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:20毫秒', '0', '', '2025-01-08 14:36:00'); +INSERT INTO `sys_job_log` VALUES (6719, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:345毫秒', '0', '', '2025-01-08 14:36:00'); +INSERT INTO `sys_job_log` VALUES (6720, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:969毫秒', '0', '', '2025-01-08 14:36:00'); +INSERT INTO `sys_job_log` VALUES (6721, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:12毫秒', '0', '', '2025-01-08 14:37:00'); +INSERT INTO `sys_job_log` VALUES (6722, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:188毫秒', '0', '', '2025-01-08 14:37:00'); +INSERT INTO `sys_job_log` VALUES (6723, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:7毫秒', '0', '', '2025-01-08 14:38:00'); +INSERT INTO `sys_job_log` VALUES (6724, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:18毫秒', '0', '', '2025-01-08 14:38:00'); +INSERT INTO `sys_job_log` VALUES (6725, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:346毫秒', '0', '', '2025-01-08 14:38:00'); +INSERT INTO `sys_job_log` VALUES (6726, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:995毫秒', '0', '', '2025-01-08 14:38:00'); +INSERT INTO `sys_job_log` VALUES (6727, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:11毫秒', '0', '', '2025-01-08 14:39:00'); +INSERT INTO `sys_job_log` VALUES (6728, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:215毫秒', '0', '', '2025-01-08 14:39:00'); +INSERT INTO `sys_job_log` VALUES (6729, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:19毫秒', '0', '', '2025-01-08 14:40:00'); +INSERT INTO `sys_job_log` VALUES (6730, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:115毫秒', '0', '', '2025-01-08 14:40:00'); +INSERT INTO `sys_job_log` VALUES (6731, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:375毫秒', '0', '', '2025-01-08 14:40:00'); +INSERT INTO `sys_job_log` VALUES (6732, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:992毫秒', '0', '', '2025-01-08 14:40:00'); +INSERT INTO `sys_job_log` VALUES (6733, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:45毫秒', '0', '', '2025-01-08 14:40:59'); +INSERT INTO `sys_job_log` VALUES (6734, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:12毫秒', '0', '', '2025-01-08 14:41:00'); +INSERT INTO `sys_job_log` VALUES (6735, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:13毫秒', '0', '', '2025-01-08 14:42:00'); +INSERT INTO `sys_job_log` VALUES (6736, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:19毫秒', '0', '', '2025-01-08 14:42:00'); +INSERT INTO `sys_job_log` VALUES (6737, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:219毫秒', '0', '', '2025-01-08 14:42:00'); +INSERT INTO `sys_job_log` VALUES (6738, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:997毫秒', '0', '', '2025-01-08 14:42:00'); +INSERT INTO `sys_job_log` VALUES (6739, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:6毫秒', '0', '', '2025-01-08 14:43:00'); +INSERT INTO `sys_job_log` VALUES (6740, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:21562毫秒', '0', '', '2025-01-08 14:43:23'); +INSERT INTO `sys_job_log` VALUES (6741, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:49毫秒', '0', '', '2025-01-08 14:43:59'); +INSERT INTO `sys_job_log` VALUES (6742, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:12毫秒', '0', '', '2025-01-08 14:44:00'); +INSERT INTO `sys_job_log` VALUES (6743, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-08 14:44:00'); +INSERT INTO `sys_job_log` VALUES (6744, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:720毫秒', '0', '', '2025-01-08 14:44:00'); +INSERT INTO `sys_job_log` VALUES (6745, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:15毫秒', '0', '', '2025-01-08 14:45:00'); +INSERT INTO `sys_job_log` VALUES (6746, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:192毫秒', '0', '', '2025-01-08 14:45:00'); +INSERT INTO `sys_job_log` VALUES (6747, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-08 14:46:00'); +INSERT INTO `sys_job_log` VALUES (6748, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:15毫秒', '0', '', '2025-01-08 14:46:00'); +INSERT INTO `sys_job_log` VALUES (6749, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:291毫秒', '0', '', '2025-01-08 14:46:00'); +INSERT INTO `sys_job_log` VALUES (6750, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:1201毫秒', '0', '', '2025-01-08 14:46:01'); +INSERT INTO `sys_job_log` VALUES (6751, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:12毫秒', '0', '', '2025-01-08 14:47:00'); +INSERT INTO `sys_job_log` VALUES (6752, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:190毫秒', '0', '', '2025-01-08 14:47:00'); +INSERT INTO `sys_job_log` VALUES (6753, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:13毫秒', '0', '', '2025-01-08 14:48:00'); +INSERT INTO `sys_job_log` VALUES (6754, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:14毫秒', '0', '', '2025-01-08 14:48:00'); +INSERT INTO `sys_job_log` VALUES (6755, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:186毫秒', '0', '', '2025-01-08 14:48:00'); +INSERT INTO `sys_job_log` VALUES (6756, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:974毫秒', '0', '', '2025-01-08 14:48:00'); +INSERT INTO `sys_job_log` VALUES (6757, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 14:49:00'); +INSERT INTO `sys_job_log` VALUES (6758, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 14:50:00'); +INSERT INTO `sys_job_log` VALUES (6759, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-08 14:50:00'); +INSERT INTO `sys_job_log` VALUES (6760, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:74毫秒', '0', '', '2025-01-08 14:50:25'); +INSERT INTO `sys_job_log` VALUES (6761, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:962毫秒', '0', '', '2025-01-08 14:50:26'); +INSERT INTO `sys_job_log` VALUES (6762, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:57毫秒', '0', '', '2025-01-08 14:50:59'); +INSERT INTO `sys_job_log` VALUES (6763, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:6毫秒', '0', '', '2025-01-08 14:51:00'); +INSERT INTO `sys_job_log` VALUES (6764, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:6毫秒', '0', '', '2025-01-08 14:52:00'); +INSERT INTO `sys_job_log` VALUES (6765, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-08 14:52:00'); +INSERT INTO `sys_job_log` VALUES (6766, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:194毫秒', '0', '', '2025-01-08 14:52:00'); +INSERT INTO `sys_job_log` VALUES (6767, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:809毫秒', '0', '', '2025-01-08 14:52:00'); +INSERT INTO `sys_job_log` VALUES (6768, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:7毫秒', '0', '', '2025-01-08 14:53:00'); +INSERT INTO `sys_job_log` VALUES (6769, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:189毫秒', '0', '', '2025-01-08 14:53:00'); +INSERT INTO `sys_job_log` VALUES (6770, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 14:54:00'); +INSERT INTO `sys_job_log` VALUES (6771, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-08 14:54:00'); +INSERT INTO `sys_job_log` VALUES (6772, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:51毫秒', '0', '', '2025-01-08 14:54:59'); +INSERT INTO `sys_job_log` VALUES (6773, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:9毫秒', '0', '', '2025-01-08 14:55:00'); +INSERT INTO `sys_job_log` VALUES (6774, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:8毫秒', '0', '', '2025-01-08 14:56:00'); +INSERT INTO `sys_job_log` VALUES (6775, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-08 14:56:00'); +INSERT INTO `sys_job_log` VALUES (6776, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:190毫秒', '0', '', '2025-01-08 14:56:00'); +INSERT INTO `sys_job_log` VALUES (6777, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:772毫秒', '0', '', '2025-01-08 14:56:00'); +INSERT INTO `sys_job_log` VALUES (6778, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 14:57:00'); +INSERT INTO `sys_job_log` VALUES (6779, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 14:58:00'); +INSERT INTO `sys_job_log` VALUES (6780, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-08 14:58:00'); +INSERT INTO `sys_job_log` VALUES (6781, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 14:59:00'); +INSERT INTO `sys_job_log` VALUES (6782, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 15:00:00'); +INSERT INTO `sys_job_log` VALUES (6783, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:14毫秒', '0', '', '2025-01-08 15:00:00'); +INSERT INTO `sys_job_log` VALUES (6784, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 15:01:00'); +INSERT INTO `sys_job_log` VALUES (6785, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 15:02:00'); +INSERT INTO `sys_job_log` VALUES (6786, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:12毫秒', '0', '', '2025-01-08 15:02:00'); +INSERT INTO `sys_job_log` VALUES (6787, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 15:03:00'); +INSERT INTO `sys_job_log` VALUES (6788, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 15:04:00'); +INSERT INTO `sys_job_log` VALUES (6789, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-08 15:04:00'); +INSERT INTO `sys_job_log` VALUES (6790, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 15:05:00'); +INSERT INTO `sys_job_log` VALUES (6791, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 15:06:00'); +INSERT INTO `sys_job_log` VALUES (6792, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:12毫秒', '0', '', '2025-01-08 15:06:00'); +INSERT INTO `sys_job_log` VALUES (6793, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 15:07:00'); +INSERT INTO `sys_job_log` VALUES (6794, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 15:08:00'); +INSERT INTO `sys_job_log` VALUES (6795, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:12毫秒', '0', '', '2025-01-08 15:08:00'); +INSERT INTO `sys_job_log` VALUES (6796, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 15:09:00'); +INSERT INTO `sys_job_log` VALUES (6797, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 15:10:00'); +INSERT INTO `sys_job_log` VALUES (6798, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-08 15:10:00'); +INSERT INTO `sys_job_log` VALUES (6799, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 15:11:00'); +INSERT INTO `sys_job_log` VALUES (6800, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 15:12:00'); +INSERT INTO `sys_job_log` VALUES (6801, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:12毫秒', '0', '', '2025-01-08 15:12:00'); +INSERT INTO `sys_job_log` VALUES (6802, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 15:13:00'); +INSERT INTO `sys_job_log` VALUES (6803, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 15:14:00'); +INSERT INTO `sys_job_log` VALUES (6804, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:14毫秒', '0', '', '2025-01-08 15:14:00'); +INSERT INTO `sys_job_log` VALUES (6805, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 15:15:00'); +INSERT INTO `sys_job_log` VALUES (6806, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 15:16:00'); +INSERT INTO `sys_job_log` VALUES (6807, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-08 15:16:00'); +INSERT INTO `sys_job_log` VALUES (6808, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 15:17:00'); +INSERT INTO `sys_job_log` VALUES (6809, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 15:18:00'); +INSERT INTO `sys_job_log` VALUES (6810, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-08 15:18:00'); +INSERT INTO `sys_job_log` VALUES (6811, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 15:19:00'); +INSERT INTO `sys_job_log` VALUES (6812, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 15:20:00'); +INSERT INTO `sys_job_log` VALUES (6813, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:12毫秒', '0', '', '2025-01-08 15:20:00'); +INSERT INTO `sys_job_log` VALUES (6814, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 15:21:00'); +INSERT INTO `sys_job_log` VALUES (6815, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 15:22:00'); +INSERT INTO `sys_job_log` VALUES (6816, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:14毫秒', '0', '', '2025-01-08 15:22:00'); +INSERT INTO `sys_job_log` VALUES (6817, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 15:23:00'); +INSERT INTO `sys_job_log` VALUES (6818, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 15:24:00'); +INSERT INTO `sys_job_log` VALUES (6819, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:12毫秒', '0', '', '2025-01-08 15:24:00'); +INSERT INTO `sys_job_log` VALUES (6820, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 15:25:00'); +INSERT INTO `sys_job_log` VALUES (6821, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 15:26:00'); +INSERT INTO `sys_job_log` VALUES (6822, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:12毫秒', '0', '', '2025-01-08 15:26:00'); +INSERT INTO `sys_job_log` VALUES (6823, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 15:27:00'); +INSERT INTO `sys_job_log` VALUES (6824, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 15:28:00'); +INSERT INTO `sys_job_log` VALUES (6825, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-08 15:28:00'); +INSERT INTO `sys_job_log` VALUES (6826, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 15:29:00'); +INSERT INTO `sys_job_log` VALUES (6827, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 15:30:00'); +INSERT INTO `sys_job_log` VALUES (6828, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:16毫秒', '0', '', '2025-01-08 15:30:00'); +INSERT INTO `sys_job_log` VALUES (6829, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 15:31:00'); +INSERT INTO `sys_job_log` VALUES (6830, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 15:32:00'); +INSERT INTO `sys_job_log` VALUES (6831, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:12毫秒', '0', '', '2025-01-08 15:32:00'); +INSERT INTO `sys_job_log` VALUES (6832, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 15:33:00'); +INSERT INTO `sys_job_log` VALUES (6833, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 15:34:00'); +INSERT INTO `sys_job_log` VALUES (6834, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:12毫秒', '0', '', '2025-01-08 15:34:00'); +INSERT INTO `sys_job_log` VALUES (6835, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 15:35:00'); +INSERT INTO `sys_job_log` VALUES (6836, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 15:36:00'); +INSERT INTO `sys_job_log` VALUES (6837, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-08 15:36:00'); +INSERT INTO `sys_job_log` VALUES (6838, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 15:37:00'); +INSERT INTO `sys_job_log` VALUES (6839, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 15:38:00'); +INSERT INTO `sys_job_log` VALUES (6840, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-08 15:38:00'); +INSERT INTO `sys_job_log` VALUES (6841, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 15:39:00'); +INSERT INTO `sys_job_log` VALUES (6842, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 15:40:00'); +INSERT INTO `sys_job_log` VALUES (6843, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:14毫秒', '0', '', '2025-01-08 15:40:00'); +INSERT INTO `sys_job_log` VALUES (6844, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:5毫秒', '0', '', '2025-01-08 15:41:00'); +INSERT INTO `sys_job_log` VALUES (6845, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 15:42:00'); +INSERT INTO `sys_job_log` VALUES (6846, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-08 15:42:00'); +INSERT INTO `sys_job_log` VALUES (6847, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 15:43:00'); +INSERT INTO `sys_job_log` VALUES (6848, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 15:44:00'); +INSERT INTO `sys_job_log` VALUES (6849, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-08 15:44:00'); +INSERT INTO `sys_job_log` VALUES (6850, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 15:45:00'); +INSERT INTO `sys_job_log` VALUES (6851, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 15:46:00'); +INSERT INTO `sys_job_log` VALUES (6852, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-08 15:46:00'); +INSERT INTO `sys_job_log` VALUES (6853, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 15:47:00'); +INSERT INTO `sys_job_log` VALUES (6854, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 15:48:00'); +INSERT INTO `sys_job_log` VALUES (6855, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:14毫秒', '0', '', '2025-01-08 15:48:00'); +INSERT INTO `sys_job_log` VALUES (6856, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 15:49:00'); +INSERT INTO `sys_job_log` VALUES (6857, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 15:50:00'); +INSERT INTO `sys_job_log` VALUES (6858, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:12毫秒', '0', '', '2025-01-08 15:50:00'); +INSERT INTO `sys_job_log` VALUES (6859, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 15:51:00'); +INSERT INTO `sys_job_log` VALUES (6860, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 15:52:00'); +INSERT INTO `sys_job_log` VALUES (6861, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-08 15:52:00'); +INSERT INTO `sys_job_log` VALUES (6862, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 15:53:00'); +INSERT INTO `sys_job_log` VALUES (6863, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 15:54:00'); +INSERT INTO `sys_job_log` VALUES (6864, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-08 15:54:00'); +INSERT INTO `sys_job_log` VALUES (6865, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 15:55:00'); +INSERT INTO `sys_job_log` VALUES (6866, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 15:56:00'); +INSERT INTO `sys_job_log` VALUES (6867, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-08 15:56:00'); +INSERT INTO `sys_job_log` VALUES (6868, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 15:57:00'); +INSERT INTO `sys_job_log` VALUES (6869, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 15:58:00'); +INSERT INTO `sys_job_log` VALUES (6870, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:14毫秒', '0', '', '2025-01-08 15:58:00'); +INSERT INTO `sys_job_log` VALUES (6871, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 15:59:00'); +INSERT INTO `sys_job_log` VALUES (6872, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 16:00:00'); +INSERT INTO `sys_job_log` VALUES (6873, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-08 16:00:00'); +INSERT INTO `sys_job_log` VALUES (6874, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 16:01:00'); +INSERT INTO `sys_job_log` VALUES (6875, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 16:02:00'); +INSERT INTO `sys_job_log` VALUES (6876, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-08 16:02:00'); +INSERT INTO `sys_job_log` VALUES (6877, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 16:03:00'); +INSERT INTO `sys_job_log` VALUES (6878, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 16:04:00'); +INSERT INTO `sys_job_log` VALUES (6879, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:12毫秒', '0', '', '2025-01-08 16:04:00'); +INSERT INTO `sys_job_log` VALUES (6880, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 16:05:00'); +INSERT INTO `sys_job_log` VALUES (6881, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 16:06:00'); +INSERT INTO `sys_job_log` VALUES (6882, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:12毫秒', '0', '', '2025-01-08 16:06:00'); +INSERT INTO `sys_job_log` VALUES (6883, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 16:07:00'); +INSERT INTO `sys_job_log` VALUES (6884, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 16:08:00'); +INSERT INTO `sys_job_log` VALUES (6885, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:12毫秒', '0', '', '2025-01-08 16:08:00'); +INSERT INTO `sys_job_log` VALUES (6886, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 16:09:00'); +INSERT INTO `sys_job_log` VALUES (6887, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 16:10:00'); +INSERT INTO `sys_job_log` VALUES (6888, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-08 16:10:00'); +INSERT INTO `sys_job_log` VALUES (6889, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 16:11:00'); +INSERT INTO `sys_job_log` VALUES (6890, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 16:12:00'); +INSERT INTO `sys_job_log` VALUES (6891, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:14毫秒', '0', '', '2025-01-08 16:12:00'); +INSERT INTO `sys_job_log` VALUES (6892, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 16:13:00'); +INSERT INTO `sys_job_log` VALUES (6893, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 16:14:00'); +INSERT INTO `sys_job_log` VALUES (6894, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-08 16:14:00'); +INSERT INTO `sys_job_log` VALUES (6895, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 16:15:00'); +INSERT INTO `sys_job_log` VALUES (6896, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 16:16:00'); +INSERT INTO `sys_job_log` VALUES (6897, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-08 16:16:00'); +INSERT INTO `sys_job_log` VALUES (6898, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 16:17:00'); +INSERT INTO `sys_job_log` VALUES (6899, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 16:18:00'); +INSERT INTO `sys_job_log` VALUES (6900, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-08 16:18:00'); +INSERT INTO `sys_job_log` VALUES (6901, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 16:19:00'); +INSERT INTO `sys_job_log` VALUES (6902, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 16:20:00'); +INSERT INTO `sys_job_log` VALUES (6903, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-08 16:20:00'); +INSERT INTO `sys_job_log` VALUES (6904, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 16:21:00'); +INSERT INTO `sys_job_log` VALUES (6905, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 16:22:00'); +INSERT INTO `sys_job_log` VALUES (6906, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-08 16:22:00'); +INSERT INTO `sys_job_log` VALUES (6907, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 16:23:00'); +INSERT INTO `sys_job_log` VALUES (6908, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 16:24:00'); +INSERT INTO `sys_job_log` VALUES (6909, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-08 16:24:00'); +INSERT INTO `sys_job_log` VALUES (6910, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 16:25:00'); +INSERT INTO `sys_job_log` VALUES (6911, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 16:26:00'); +INSERT INTO `sys_job_log` VALUES (6912, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:24毫秒', '0', '', '2025-01-08 16:26:00'); +INSERT INTO `sys_job_log` VALUES (6913, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 16:27:00'); +INSERT INTO `sys_job_log` VALUES (6914, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 16:28:00'); +INSERT INTO `sys_job_log` VALUES (6915, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:12毫秒', '0', '', '2025-01-08 16:28:00'); +INSERT INTO `sys_job_log` VALUES (6916, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 16:29:00'); +INSERT INTO `sys_job_log` VALUES (6917, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 16:30:00'); +INSERT INTO `sys_job_log` VALUES (6918, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-08 16:30:00'); +INSERT INTO `sys_job_log` VALUES (6919, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 16:31:00'); +INSERT INTO `sys_job_log` VALUES (6920, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 16:32:00'); +INSERT INTO `sys_job_log` VALUES (6921, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:12毫秒', '0', '', '2025-01-08 16:32:00'); +INSERT INTO `sys_job_log` VALUES (6922, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 16:33:00'); +INSERT INTO `sys_job_log` VALUES (6923, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 16:34:00'); +INSERT INTO `sys_job_log` VALUES (6924, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-08 16:34:00'); +INSERT INTO `sys_job_log` VALUES (6925, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 16:35:00'); +INSERT INTO `sys_job_log` VALUES (6926, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 16:36:00'); +INSERT INTO `sys_job_log` VALUES (6927, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:12毫秒', '0', '', '2025-01-08 16:36:00'); +INSERT INTO `sys_job_log` VALUES (6928, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 16:37:00'); +INSERT INTO `sys_job_log` VALUES (6929, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 16:38:00'); +INSERT INTO `sys_job_log` VALUES (6930, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-08 16:38:00'); +INSERT INTO `sys_job_log` VALUES (6931, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 16:39:00'); +INSERT INTO `sys_job_log` VALUES (6932, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 16:40:00'); +INSERT INTO `sys_job_log` VALUES (6933, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:14毫秒', '0', '', '2025-01-08 16:40:00'); +INSERT INTO `sys_job_log` VALUES (6934, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 16:41:00'); +INSERT INTO `sys_job_log` VALUES (6935, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 16:42:00'); +INSERT INTO `sys_job_log` VALUES (6936, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:12毫秒', '0', '', '2025-01-08 16:42:00'); +INSERT INTO `sys_job_log` VALUES (6937, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 16:43:00'); +INSERT INTO `sys_job_log` VALUES (6938, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 16:44:00'); +INSERT INTO `sys_job_log` VALUES (6939, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:12毫秒', '0', '', '2025-01-08 16:44:00'); +INSERT INTO `sys_job_log` VALUES (6940, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 16:45:00'); +INSERT INTO `sys_job_log` VALUES (6941, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 16:46:00'); +INSERT INTO `sys_job_log` VALUES (6942, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:12毫秒', '0', '', '2025-01-08 16:46:00'); +INSERT INTO `sys_job_log` VALUES (6943, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 16:47:00'); +INSERT INTO `sys_job_log` VALUES (6944, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 16:48:00'); +INSERT INTO `sys_job_log` VALUES (6945, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-08 16:48:00'); +INSERT INTO `sys_job_log` VALUES (6946, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 16:49:00'); +INSERT INTO `sys_job_log` VALUES (6947, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 16:50:00'); +INSERT INTO `sys_job_log` VALUES (6948, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-08 16:50:00'); +INSERT INTO `sys_job_log` VALUES (6949, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 16:51:00'); +INSERT INTO `sys_job_log` VALUES (6950, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 16:52:00'); +INSERT INTO `sys_job_log` VALUES (6951, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:16毫秒', '0', '', '2025-01-08 16:52:00'); +INSERT INTO `sys_job_log` VALUES (6952, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 16:53:00'); +INSERT INTO `sys_job_log` VALUES (6953, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 16:54:00'); +INSERT INTO `sys_job_log` VALUES (6954, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-08 16:54:00'); +INSERT INTO `sys_job_log` VALUES (6955, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 16:55:00'); +INSERT INTO `sys_job_log` VALUES (6956, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2025-01-08 16:56:00'); +INSERT INTO `sys_job_log` VALUES (6957, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:16毫秒', '0', '', '2025-01-08 16:56:00'); +INSERT INTO `sys_job_log` VALUES (6958, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2025-01-08 16:57:00'); +INSERT INTO `sys_job_log` VALUES (6959, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2025-01-08 16:58:00'); +INSERT INTO `sys_job_log` VALUES (6960, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:15毫秒', '0', '', '2025-01-08 16:58:00'); +INSERT INTO `sys_job_log` VALUES (6961, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 16:59:00'); +INSERT INTO `sys_job_log` VALUES (6962, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 17:00:00'); +INSERT INTO `sys_job_log` VALUES (6963, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-08 17:00:00'); +INSERT INTO `sys_job_log` VALUES (6964, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 17:01:00'); +INSERT INTO `sys_job_log` VALUES (6965, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 17:02:00'); +INSERT INTO `sys_job_log` VALUES (6966, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-08 17:02:00'); +INSERT INTO `sys_job_log` VALUES (6967, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 17:03:00'); +INSERT INTO `sys_job_log` VALUES (6968, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 17:04:00'); +INSERT INTO `sys_job_log` VALUES (6969, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:15毫秒', '0', '', '2025-01-08 17:04:00'); +INSERT INTO `sys_job_log` VALUES (6970, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 17:05:00'); +INSERT INTO `sys_job_log` VALUES (6971, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 17:06:00'); +INSERT INTO `sys_job_log` VALUES (6972, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-08 17:06:00'); +INSERT INTO `sys_job_log` VALUES (6973, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 17:07:00'); +INSERT INTO `sys_job_log` VALUES (6974, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 17:08:00'); +INSERT INTO `sys_job_log` VALUES (6975, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-08 17:08:00'); +INSERT INTO `sys_job_log` VALUES (6976, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 17:09:00'); +INSERT INTO `sys_job_log` VALUES (6977, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 17:10:00'); +INSERT INTO `sys_job_log` VALUES (6978, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-08 17:10:00'); +INSERT INTO `sys_job_log` VALUES (6979, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 17:11:00'); +INSERT INTO `sys_job_log` VALUES (6980, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 17:12:00'); +INSERT INTO `sys_job_log` VALUES (6981, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:12毫秒', '0', '', '2025-01-08 17:12:00'); +INSERT INTO `sys_job_log` VALUES (6982, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 17:13:00'); +INSERT INTO `sys_job_log` VALUES (6983, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 17:14:00'); +INSERT INTO `sys_job_log` VALUES (6984, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-08 17:14:00'); +INSERT INTO `sys_job_log` VALUES (6985, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 17:15:00'); +INSERT INTO `sys_job_log` VALUES (6986, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 17:16:00'); +INSERT INTO `sys_job_log` VALUES (6987, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-08 17:16:00'); +INSERT INTO `sys_job_log` VALUES (6988, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 17:17:00'); +INSERT INTO `sys_job_log` VALUES (6989, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 17:18:00'); +INSERT INTO `sys_job_log` VALUES (6990, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:12毫秒', '0', '', '2025-01-08 17:18:00'); +INSERT INTO `sys_job_log` VALUES (6991, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 17:19:00'); +INSERT INTO `sys_job_log` VALUES (6992, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 17:20:00'); +INSERT INTO `sys_job_log` VALUES (6993, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-08 17:20:00'); +INSERT INTO `sys_job_log` VALUES (6994, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 17:21:00'); +INSERT INTO `sys_job_log` VALUES (6995, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 17:22:00'); +INSERT INTO `sys_job_log` VALUES (6996, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-08 17:22:00'); +INSERT INTO `sys_job_log` VALUES (6997, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 17:23:00'); +INSERT INTO `sys_job_log` VALUES (6998, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 17:24:00'); +INSERT INTO `sys_job_log` VALUES (6999, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:12毫秒', '0', '', '2025-01-08 17:24:00'); +INSERT INTO `sys_job_log` VALUES (7000, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 17:25:00'); +INSERT INTO `sys_job_log` VALUES (7001, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 17:26:00'); +INSERT INTO `sys_job_log` VALUES (7002, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-08 17:26:00'); +INSERT INTO `sys_job_log` VALUES (7003, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 17:27:00'); +INSERT INTO `sys_job_log` VALUES (7004, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 17:28:00'); +INSERT INTO `sys_job_log` VALUES (7005, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-08 17:28:00'); +INSERT INTO `sys_job_log` VALUES (7006, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 17:29:00'); +INSERT INTO `sys_job_log` VALUES (7007, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 17:30:00'); +INSERT INTO `sys_job_log` VALUES (7008, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-08 17:30:00'); +INSERT INTO `sys_job_log` VALUES (7009, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 17:31:00'); +INSERT INTO `sys_job_log` VALUES (7010, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 17:32:00'); +INSERT INTO `sys_job_log` VALUES (7011, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:12毫秒', '0', '', '2025-01-08 17:32:00'); +INSERT INTO `sys_job_log` VALUES (7012, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 17:33:00'); +INSERT INTO `sys_job_log` VALUES (7013, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 17:34:00'); +INSERT INTO `sys_job_log` VALUES (7014, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:12毫秒', '0', '', '2025-01-08 17:34:00'); +INSERT INTO `sys_job_log` VALUES (7015, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 17:35:00'); +INSERT INTO `sys_job_log` VALUES (7016, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 17:36:00'); +INSERT INTO `sys_job_log` VALUES (7017, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-08 17:36:00'); +INSERT INTO `sys_job_log` VALUES (7018, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 17:37:00'); +INSERT INTO `sys_job_log` VALUES (7019, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 17:38:00'); +INSERT INTO `sys_job_log` VALUES (7020, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-08 17:38:00'); +INSERT INTO `sys_job_log` VALUES (7021, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 17:39:00'); +INSERT INTO `sys_job_log` VALUES (7022, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 17:40:00'); +INSERT INTO `sys_job_log` VALUES (7023, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-08 17:40:00'); +INSERT INTO `sys_job_log` VALUES (7024, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 17:41:00'); +INSERT INTO `sys_job_log` VALUES (7025, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 17:42:00'); +INSERT INTO `sys_job_log` VALUES (7026, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-08 17:42:00'); +INSERT INTO `sys_job_log` VALUES (7027, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 17:43:00'); +INSERT INTO `sys_job_log` VALUES (7028, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 17:44:00'); +INSERT INTO `sys_job_log` VALUES (7029, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-08 17:44:00'); +INSERT INTO `sys_job_log` VALUES (7030, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 17:45:00'); +INSERT INTO `sys_job_log` VALUES (7031, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 17:46:00'); +INSERT INTO `sys_job_log` VALUES (7032, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-08 17:46:00'); +INSERT INTO `sys_job_log` VALUES (7033, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 17:47:00'); +INSERT INTO `sys_job_log` VALUES (7034, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 17:48:00'); +INSERT INTO `sys_job_log` VALUES (7035, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:14毫秒', '0', '', '2025-01-08 17:48:00'); +INSERT INTO `sys_job_log` VALUES (7036, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 17:49:00'); +INSERT INTO `sys_job_log` VALUES (7037, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 17:50:00'); +INSERT INTO `sys_job_log` VALUES (7038, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-08 17:50:00'); +INSERT INTO `sys_job_log` VALUES (7039, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 17:51:00'); +INSERT INTO `sys_job_log` VALUES (7040, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 17:52:00'); +INSERT INTO `sys_job_log` VALUES (7041, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:12毫秒', '0', '', '2025-01-08 17:52:00'); +INSERT INTO `sys_job_log` VALUES (7042, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 17:53:00'); +INSERT INTO `sys_job_log` VALUES (7043, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 17:54:00'); +INSERT INTO `sys_job_log` VALUES (7044, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-08 17:54:00'); +INSERT INTO `sys_job_log` VALUES (7045, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 17:55:00'); +INSERT INTO `sys_job_log` VALUES (7046, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 17:56:00'); +INSERT INTO `sys_job_log` VALUES (7047, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-08 17:56:00'); +INSERT INTO `sys_job_log` VALUES (7048, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 17:57:00'); +INSERT INTO `sys_job_log` VALUES (7049, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 17:58:00'); +INSERT INTO `sys_job_log` VALUES (7050, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:12毫秒', '0', '', '2025-01-08 17:58:00'); +INSERT INTO `sys_job_log` VALUES (7051, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 17:59:00'); +INSERT INTO `sys_job_log` VALUES (7052, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 18:00:00'); +INSERT INTO `sys_job_log` VALUES (7053, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-08 18:00:00'); +INSERT INTO `sys_job_log` VALUES (7054, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 18:01:00'); +INSERT INTO `sys_job_log` VALUES (7055, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 18:02:00'); +INSERT INTO `sys_job_log` VALUES (7056, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:12毫秒', '0', '', '2025-01-08 18:02:00'); +INSERT INTO `sys_job_log` VALUES (7057, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 18:03:00'); +INSERT INTO `sys_job_log` VALUES (7058, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 18:04:00'); +INSERT INTO `sys_job_log` VALUES (7059, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:12毫秒', '0', '', '2025-01-08 18:04:00'); +INSERT INTO `sys_job_log` VALUES (7060, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 18:05:00'); +INSERT INTO `sys_job_log` VALUES (7061, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 18:06:00'); +INSERT INTO `sys_job_log` VALUES (7062, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:12毫秒', '0', '', '2025-01-08 18:06:00'); +INSERT INTO `sys_job_log` VALUES (7063, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 18:07:00'); +INSERT INTO `sys_job_log` VALUES (7064, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 18:08:00'); +INSERT INTO `sys_job_log` VALUES (7065, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-08 18:08:00'); +INSERT INTO `sys_job_log` VALUES (7066, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 18:09:00'); +INSERT INTO `sys_job_log` VALUES (7067, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 18:10:00'); +INSERT INTO `sys_job_log` VALUES (7068, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:12毫秒', '0', '', '2025-01-08 18:10:00'); +INSERT INTO `sys_job_log` VALUES (7069, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 18:11:00'); +INSERT INTO `sys_job_log` VALUES (7070, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 18:12:00'); +INSERT INTO `sys_job_log` VALUES (7071, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:12毫秒', '0', '', '2025-01-08 18:12:00'); +INSERT INTO `sys_job_log` VALUES (7072, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 18:13:00'); +INSERT INTO `sys_job_log` VALUES (7073, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 18:14:00'); +INSERT INTO `sys_job_log` VALUES (7074, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-08 18:14:00'); +INSERT INTO `sys_job_log` VALUES (7075, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 18:15:00'); +INSERT INTO `sys_job_log` VALUES (7076, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 18:16:00'); +INSERT INTO `sys_job_log` VALUES (7077, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:14毫秒', '0', '', '2025-01-08 18:16:00'); +INSERT INTO `sys_job_log` VALUES (7078, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 18:17:00'); +INSERT INTO `sys_job_log` VALUES (7079, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 18:18:00'); +INSERT INTO `sys_job_log` VALUES (7080, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-08 18:18:00'); +INSERT INTO `sys_job_log` VALUES (7081, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 18:19:00'); +INSERT INTO `sys_job_log` VALUES (7082, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 18:20:00'); +INSERT INTO `sys_job_log` VALUES (7083, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-08 18:20:00'); +INSERT INTO `sys_job_log` VALUES (7084, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 18:21:00'); +INSERT INTO `sys_job_log` VALUES (7085, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 18:22:00'); +INSERT INTO `sys_job_log` VALUES (7086, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-08 18:22:00'); +INSERT INTO `sys_job_log` VALUES (7087, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 18:23:00'); +INSERT INTO `sys_job_log` VALUES (7088, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 18:24:00'); +INSERT INTO `sys_job_log` VALUES (7089, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:12毫秒', '0', '', '2025-01-08 18:24:00'); +INSERT INTO `sys_job_log` VALUES (7090, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 18:25:00'); +INSERT INTO `sys_job_log` VALUES (7091, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 18:26:00'); +INSERT INTO `sys_job_log` VALUES (7092, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:15毫秒', '0', '', '2025-01-08 18:26:00'); +INSERT INTO `sys_job_log` VALUES (7093, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 18:27:00'); +INSERT INTO `sys_job_log` VALUES (7094, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 18:28:00'); +INSERT INTO `sys_job_log` VALUES (7095, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-08 18:28:00'); +INSERT INTO `sys_job_log` VALUES (7096, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 18:29:00'); +INSERT INTO `sys_job_log` VALUES (7097, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 18:30:00'); +INSERT INTO `sys_job_log` VALUES (7098, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-08 18:30:00'); +INSERT INTO `sys_job_log` VALUES (7099, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 18:31:00'); +INSERT INTO `sys_job_log` VALUES (7100, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 18:32:00'); +INSERT INTO `sys_job_log` VALUES (7101, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:12毫秒', '0', '', '2025-01-08 18:32:00'); +INSERT INTO `sys_job_log` VALUES (7102, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 18:33:00'); +INSERT INTO `sys_job_log` VALUES (7103, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 18:34:00'); +INSERT INTO `sys_job_log` VALUES (7104, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-08 18:34:00'); +INSERT INTO `sys_job_log` VALUES (7105, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 18:35:00'); +INSERT INTO `sys_job_log` VALUES (7106, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 18:36:00'); +INSERT INTO `sys_job_log` VALUES (7107, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-08 18:36:00'); +INSERT INTO `sys_job_log` VALUES (7108, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 18:37:00'); +INSERT INTO `sys_job_log` VALUES (7109, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 18:38:00'); +INSERT INTO `sys_job_log` VALUES (7110, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-08 18:38:00'); +INSERT INTO `sys_job_log` VALUES (7111, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 18:39:00'); +INSERT INTO `sys_job_log` VALUES (7112, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 18:40:00'); +INSERT INTO `sys_job_log` VALUES (7113, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-08 18:40:00'); +INSERT INTO `sys_job_log` VALUES (7114, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 18:41:00'); +INSERT INTO `sys_job_log` VALUES (7115, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 18:42:00'); +INSERT INTO `sys_job_log` VALUES (7116, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:12毫秒', '0', '', '2025-01-08 18:42:00'); +INSERT INTO `sys_job_log` VALUES (7117, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 18:43:00'); +INSERT INTO `sys_job_log` VALUES (7118, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 18:44:00'); +INSERT INTO `sys_job_log` VALUES (7119, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-08 18:44:00'); +INSERT INTO `sys_job_log` VALUES (7120, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 18:45:00'); +INSERT INTO `sys_job_log` VALUES (7121, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 18:46:00'); +INSERT INTO `sys_job_log` VALUES (7122, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:14毫秒', '0', '', '2025-01-08 18:46:00'); +INSERT INTO `sys_job_log` VALUES (7123, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 18:47:00'); +INSERT INTO `sys_job_log` VALUES (7124, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 18:48:00'); +INSERT INTO `sys_job_log` VALUES (7125, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:12毫秒', '0', '', '2025-01-08 18:48:00'); +INSERT INTO `sys_job_log` VALUES (7126, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 18:49:00'); +INSERT INTO `sys_job_log` VALUES (7127, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 18:50:00'); +INSERT INTO `sys_job_log` VALUES (7128, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:12毫秒', '0', '', '2025-01-08 18:50:00'); +INSERT INTO `sys_job_log` VALUES (7129, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 18:51:00'); +INSERT INTO `sys_job_log` VALUES (7130, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 18:52:00'); +INSERT INTO `sys_job_log` VALUES (7131, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-08 18:52:00'); +INSERT INTO `sys_job_log` VALUES (7132, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 18:53:00'); +INSERT INTO `sys_job_log` VALUES (7133, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 18:54:00'); +INSERT INTO `sys_job_log` VALUES (7134, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-08 18:54:00'); +INSERT INTO `sys_job_log` VALUES (7135, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 18:55:00'); +INSERT INTO `sys_job_log` VALUES (7136, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 18:56:00'); +INSERT INTO `sys_job_log` VALUES (7137, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:12毫秒', '0', '', '2025-01-08 18:56:00'); +INSERT INTO `sys_job_log` VALUES (7138, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 18:57:00'); +INSERT INTO `sys_job_log` VALUES (7139, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 18:58:00'); +INSERT INTO `sys_job_log` VALUES (7140, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:12毫秒', '0', '', '2025-01-08 18:58:00'); +INSERT INTO `sys_job_log` VALUES (7141, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 18:59:00'); +INSERT INTO `sys_job_log` VALUES (7142, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 19:00:00'); +INSERT INTO `sys_job_log` VALUES (7143, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-08 19:00:00'); +INSERT INTO `sys_job_log` VALUES (7144, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 19:01:00'); +INSERT INTO `sys_job_log` VALUES (7145, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 19:02:00'); +INSERT INTO `sys_job_log` VALUES (7146, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-08 19:02:00'); +INSERT INTO `sys_job_log` VALUES (7147, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 19:03:00'); +INSERT INTO `sys_job_log` VALUES (7148, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 19:04:00'); +INSERT INTO `sys_job_log` VALUES (7149, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:16毫秒', '0', '', '2025-01-08 19:04:00'); +INSERT INTO `sys_job_log` VALUES (7150, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 19:05:00'); +INSERT INTO `sys_job_log` VALUES (7151, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 19:06:00'); +INSERT INTO `sys_job_log` VALUES (7152, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-08 19:06:00'); +INSERT INTO `sys_job_log` VALUES (7153, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 19:07:00'); +INSERT INTO `sys_job_log` VALUES (7154, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 19:08:00'); +INSERT INTO `sys_job_log` VALUES (7155, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:14毫秒', '0', '', '2025-01-08 19:08:00'); +INSERT INTO `sys_job_log` VALUES (7156, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 19:09:00'); +INSERT INTO `sys_job_log` VALUES (7157, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 19:10:00'); +INSERT INTO `sys_job_log` VALUES (7158, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:12毫秒', '0', '', '2025-01-08 19:10:00'); +INSERT INTO `sys_job_log` VALUES (7159, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 19:11:00'); +INSERT INTO `sys_job_log` VALUES (7160, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 19:12:00'); +INSERT INTO `sys_job_log` VALUES (7161, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-08 19:12:00'); +INSERT INTO `sys_job_log` VALUES (7162, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 19:13:00'); +INSERT INTO `sys_job_log` VALUES (7163, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 19:14:00'); +INSERT INTO `sys_job_log` VALUES (7164, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:12毫秒', '0', '', '2025-01-08 19:14:00'); +INSERT INTO `sys_job_log` VALUES (7165, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 19:15:00'); +INSERT INTO `sys_job_log` VALUES (7166, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 19:16:00'); +INSERT INTO `sys_job_log` VALUES (7167, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-08 19:16:00'); +INSERT INTO `sys_job_log` VALUES (7168, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 19:17:00'); +INSERT INTO `sys_job_log` VALUES (7169, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 19:18:00'); +INSERT INTO `sys_job_log` VALUES (7170, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-08 19:18:00'); +INSERT INTO `sys_job_log` VALUES (7171, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 19:19:00'); +INSERT INTO `sys_job_log` VALUES (7172, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 19:20:00'); +INSERT INTO `sys_job_log` VALUES (7173, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-08 19:20:00'); +INSERT INTO `sys_job_log` VALUES (7174, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 19:21:00'); +INSERT INTO `sys_job_log` VALUES (7175, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 19:22:00'); +INSERT INTO `sys_job_log` VALUES (7176, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-08 19:22:00'); +INSERT INTO `sys_job_log` VALUES (7177, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 19:23:00'); +INSERT INTO `sys_job_log` VALUES (7178, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 19:24:00'); +INSERT INTO `sys_job_log` VALUES (7179, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:12毫秒', '0', '', '2025-01-08 19:24:00'); +INSERT INTO `sys_job_log` VALUES (7180, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 19:25:00'); +INSERT INTO `sys_job_log` VALUES (7181, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 19:26:00'); +INSERT INTO `sys_job_log` VALUES (7182, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-08 19:26:00'); +INSERT INTO `sys_job_log` VALUES (7183, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 19:27:00'); +INSERT INTO `sys_job_log` VALUES (7184, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 19:28:00'); +INSERT INTO `sys_job_log` VALUES (7185, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:14毫秒', '0', '', '2025-01-08 19:28:00'); +INSERT INTO `sys_job_log` VALUES (7186, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 19:29:00'); +INSERT INTO `sys_job_log` VALUES (7187, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 19:30:00'); +INSERT INTO `sys_job_log` VALUES (7188, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-08 19:30:00'); +INSERT INTO `sys_job_log` VALUES (7189, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 19:31:00'); +INSERT INTO `sys_job_log` VALUES (7190, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 19:32:00'); +INSERT INTO `sys_job_log` VALUES (7191, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-08 19:32:00'); +INSERT INTO `sys_job_log` VALUES (7192, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 19:33:00'); +INSERT INTO `sys_job_log` VALUES (7193, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 19:34:00'); +INSERT INTO `sys_job_log` VALUES (7194, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-08 19:34:00'); +INSERT INTO `sys_job_log` VALUES (7195, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 19:35:00'); +INSERT INTO `sys_job_log` VALUES (7196, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 19:36:00'); +INSERT INTO `sys_job_log` VALUES (7197, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:12毫秒', '0', '', '2025-01-08 19:36:00'); +INSERT INTO `sys_job_log` VALUES (7198, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 19:37:00'); +INSERT INTO `sys_job_log` VALUES (7199, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 19:38:00'); +INSERT INTO `sys_job_log` VALUES (7200, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:12毫秒', '0', '', '2025-01-08 19:38:00'); +INSERT INTO `sys_job_log` VALUES (7201, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 19:39:00'); +INSERT INTO `sys_job_log` VALUES (7202, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 19:40:00'); +INSERT INTO `sys_job_log` VALUES (7203, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-08 19:40:00'); +INSERT INTO `sys_job_log` VALUES (7204, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 19:41:00'); +INSERT INTO `sys_job_log` VALUES (7205, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 19:42:00'); +INSERT INTO `sys_job_log` VALUES (7206, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:14毫秒', '0', '', '2025-01-08 19:42:00'); +INSERT INTO `sys_job_log` VALUES (7207, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 19:43:00'); +INSERT INTO `sys_job_log` VALUES (7208, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 19:44:00'); +INSERT INTO `sys_job_log` VALUES (7209, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:12毫秒', '0', '', '2025-01-08 19:44:00'); +INSERT INTO `sys_job_log` VALUES (7210, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 19:45:00'); +INSERT INTO `sys_job_log` VALUES (7211, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 19:46:00'); +INSERT INTO `sys_job_log` VALUES (7212, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:14毫秒', '0', '', '2025-01-08 19:46:00'); +INSERT INTO `sys_job_log` VALUES (7213, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 19:47:00'); +INSERT INTO `sys_job_log` VALUES (7214, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 19:48:00'); +INSERT INTO `sys_job_log` VALUES (7215, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-08 19:48:00'); +INSERT INTO `sys_job_log` VALUES (7216, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 19:49:00'); +INSERT INTO `sys_job_log` VALUES (7217, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 19:50:00'); +INSERT INTO `sys_job_log` VALUES (7218, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-08 19:50:00'); +INSERT INTO `sys_job_log` VALUES (7219, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 19:51:00'); +INSERT INTO `sys_job_log` VALUES (7220, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 19:52:00'); +INSERT INTO `sys_job_log` VALUES (7221, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:12毫秒', '0', '', '2025-01-08 19:52:00'); +INSERT INTO `sys_job_log` VALUES (7222, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 19:53:00'); +INSERT INTO `sys_job_log` VALUES (7223, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 19:54:00'); +INSERT INTO `sys_job_log` VALUES (7224, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-08 19:54:00'); +INSERT INTO `sys_job_log` VALUES (7225, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 19:55:00'); +INSERT INTO `sys_job_log` VALUES (7226, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 19:56:00'); +INSERT INTO `sys_job_log` VALUES (7227, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:14毫秒', '0', '', '2025-01-08 19:56:00'); +INSERT INTO `sys_job_log` VALUES (7228, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 19:57:00'); +INSERT INTO `sys_job_log` VALUES (7229, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 19:58:00'); +INSERT INTO `sys_job_log` VALUES (7230, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-08 19:58:00'); +INSERT INTO `sys_job_log` VALUES (7231, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 19:59:00'); +INSERT INTO `sys_job_log` VALUES (7232, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 20:00:00'); +INSERT INTO `sys_job_log` VALUES (7233, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:12毫秒', '0', '', '2025-01-08 20:00:00'); +INSERT INTO `sys_job_log` VALUES (7234, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 20:01:00'); +INSERT INTO `sys_job_log` VALUES (7235, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 20:02:00'); +INSERT INTO `sys_job_log` VALUES (7236, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-08 20:02:00'); +INSERT INTO `sys_job_log` VALUES (7237, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 20:03:00'); +INSERT INTO `sys_job_log` VALUES (7238, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 20:04:00'); +INSERT INTO `sys_job_log` VALUES (7239, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-08 20:04:00'); +INSERT INTO `sys_job_log` VALUES (7240, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 20:05:00'); +INSERT INTO `sys_job_log` VALUES (7241, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 20:06:00'); +INSERT INTO `sys_job_log` VALUES (7242, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-08 20:06:00'); +INSERT INTO `sys_job_log` VALUES (7243, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 20:07:00'); +INSERT INTO `sys_job_log` VALUES (7244, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 20:08:00'); +INSERT INTO `sys_job_log` VALUES (7245, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:16毫秒', '0', '', '2025-01-08 20:08:00'); +INSERT INTO `sys_job_log` VALUES (7246, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 20:09:00'); +INSERT INTO `sys_job_log` VALUES (7247, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 20:10:00'); +INSERT INTO `sys_job_log` VALUES (7248, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:12毫秒', '0', '', '2025-01-08 20:10:00'); +INSERT INTO `sys_job_log` VALUES (7249, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 20:11:00'); +INSERT INTO `sys_job_log` VALUES (7250, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 20:12:00'); +INSERT INTO `sys_job_log` VALUES (7251, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:12毫秒', '0', '', '2025-01-08 20:12:00'); +INSERT INTO `sys_job_log` VALUES (7252, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 20:13:00'); +INSERT INTO `sys_job_log` VALUES (7253, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 20:14:00'); +INSERT INTO `sys_job_log` VALUES (7254, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-08 20:14:00'); +INSERT INTO `sys_job_log` VALUES (7255, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 20:15:00'); +INSERT INTO `sys_job_log` VALUES (7256, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 20:16:00'); +INSERT INTO `sys_job_log` VALUES (7257, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:15毫秒', '0', '', '2025-01-08 20:16:00'); +INSERT INTO `sys_job_log` VALUES (7258, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 20:17:00'); +INSERT INTO `sys_job_log` VALUES (7259, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 20:18:00'); +INSERT INTO `sys_job_log` VALUES (7260, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-08 20:18:00'); +INSERT INTO `sys_job_log` VALUES (7261, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 20:19:00'); +INSERT INTO `sys_job_log` VALUES (7262, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 20:20:00'); +INSERT INTO `sys_job_log` VALUES (7263, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-08 20:20:00'); +INSERT INTO `sys_job_log` VALUES (7264, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 20:21:00'); +INSERT INTO `sys_job_log` VALUES (7265, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 20:22:00'); +INSERT INTO `sys_job_log` VALUES (7266, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-08 20:22:00'); +INSERT INTO `sys_job_log` VALUES (7267, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 20:23:00'); +INSERT INTO `sys_job_log` VALUES (7268, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 20:24:00'); +INSERT INTO `sys_job_log` VALUES (7269, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:12毫秒', '0', '', '2025-01-08 20:24:00'); +INSERT INTO `sys_job_log` VALUES (7270, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 20:25:00'); +INSERT INTO `sys_job_log` VALUES (7271, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 20:26:00'); +INSERT INTO `sys_job_log` VALUES (7272, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-08 20:26:00'); +INSERT INTO `sys_job_log` VALUES (7273, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 20:27:00'); +INSERT INTO `sys_job_log` VALUES (7274, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 20:28:00'); +INSERT INTO `sys_job_log` VALUES (7275, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-08 20:28:00'); +INSERT INTO `sys_job_log` VALUES (7276, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 20:29:00'); +INSERT INTO `sys_job_log` VALUES (7277, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 20:30:00'); +INSERT INTO `sys_job_log` VALUES (7278, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:12毫秒', '0', '', '2025-01-08 20:30:00'); +INSERT INTO `sys_job_log` VALUES (7279, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 20:31:00'); +INSERT INTO `sys_job_log` VALUES (7280, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 20:32:00'); +INSERT INTO `sys_job_log` VALUES (7281, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:14毫秒', '0', '', '2025-01-08 20:32:00'); +INSERT INTO `sys_job_log` VALUES (7282, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 20:33:00'); +INSERT INTO `sys_job_log` VALUES (7283, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 20:34:00'); +INSERT INTO `sys_job_log` VALUES (7284, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-08 20:34:00'); +INSERT INTO `sys_job_log` VALUES (7285, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 20:35:00'); +INSERT INTO `sys_job_log` VALUES (7286, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 20:36:00'); +INSERT INTO `sys_job_log` VALUES (7287, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:12毫秒', '0', '', '2025-01-08 20:36:00'); +INSERT INTO `sys_job_log` VALUES (7288, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 20:37:00'); +INSERT INTO `sys_job_log` VALUES (7289, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 20:38:00'); +INSERT INTO `sys_job_log` VALUES (7290, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:12毫秒', '0', '', '2025-01-08 20:38:00'); +INSERT INTO `sys_job_log` VALUES (7291, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 20:39:00'); +INSERT INTO `sys_job_log` VALUES (7292, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 20:40:00'); +INSERT INTO `sys_job_log` VALUES (7293, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:12毫秒', '0', '', '2025-01-08 20:40:00'); +INSERT INTO `sys_job_log` VALUES (7294, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:4毫秒', '0', '', '2025-01-08 20:41:00'); +INSERT INTO `sys_job_log` VALUES (7295, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 20:42:00'); +INSERT INTO `sys_job_log` VALUES (7296, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-08 20:42:00'); +INSERT INTO `sys_job_log` VALUES (7297, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 20:43:00'); +INSERT INTO `sys_job_log` VALUES (7298, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 20:44:00'); +INSERT INTO `sys_job_log` VALUES (7299, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:12毫秒', '0', '', '2025-01-08 20:44:00'); +INSERT INTO `sys_job_log` VALUES (7300, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 20:45:00'); +INSERT INTO `sys_job_log` VALUES (7301, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 20:46:00'); +INSERT INTO `sys_job_log` VALUES (7302, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-08 20:46:00'); +INSERT INTO `sys_job_log` VALUES (7303, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 20:47:00'); +INSERT INTO `sys_job_log` VALUES (7304, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 20:48:00'); +INSERT INTO `sys_job_log` VALUES (7305, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:12毫秒', '0', '', '2025-01-08 20:48:00'); +INSERT INTO `sys_job_log` VALUES (7306, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 20:49:00'); +INSERT INTO `sys_job_log` VALUES (7307, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 20:50:00'); +INSERT INTO `sys_job_log` VALUES (7308, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:12毫秒', '0', '', '2025-01-08 20:50:00'); +INSERT INTO `sys_job_log` VALUES (7309, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 20:51:00'); +INSERT INTO `sys_job_log` VALUES (7310, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 20:52:00'); +INSERT INTO `sys_job_log` VALUES (7311, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:12毫秒', '0', '', '2025-01-08 20:52:00'); +INSERT INTO `sys_job_log` VALUES (7312, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 20:53:00'); +INSERT INTO `sys_job_log` VALUES (7313, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 20:54:00'); +INSERT INTO `sys_job_log` VALUES (7314, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-08 20:54:00'); +INSERT INTO `sys_job_log` VALUES (7315, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 20:55:00'); +INSERT INTO `sys_job_log` VALUES (7316, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 20:56:00'); +INSERT INTO `sys_job_log` VALUES (7317, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-08 20:56:00'); +INSERT INTO `sys_job_log` VALUES (7318, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 20:57:00'); +INSERT INTO `sys_job_log` VALUES (7319, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 20:58:00'); +INSERT INTO `sys_job_log` VALUES (7320, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:12毫秒', '0', '', '2025-01-08 20:58:00'); +INSERT INTO `sys_job_log` VALUES (7321, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 20:59:00'); +INSERT INTO `sys_job_log` VALUES (7322, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 21:00:00'); +INSERT INTO `sys_job_log` VALUES (7323, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-08 21:00:00'); +INSERT INTO `sys_job_log` VALUES (7324, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 21:01:00'); +INSERT INTO `sys_job_log` VALUES (7325, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 21:02:00'); +INSERT INTO `sys_job_log` VALUES (7326, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-08 21:02:00'); +INSERT INTO `sys_job_log` VALUES (7327, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 21:03:00'); +INSERT INTO `sys_job_log` VALUES (7328, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 21:04:00'); +INSERT INTO `sys_job_log` VALUES (7329, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-08 21:04:00'); +INSERT INTO `sys_job_log` VALUES (7330, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 21:05:00'); +INSERT INTO `sys_job_log` VALUES (7331, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 21:06:00'); +INSERT INTO `sys_job_log` VALUES (7332, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-08 21:06:00'); +INSERT INTO `sys_job_log` VALUES (7333, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 21:07:00'); +INSERT INTO `sys_job_log` VALUES (7334, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 21:08:00'); +INSERT INTO `sys_job_log` VALUES (7335, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:12毫秒', '0', '', '2025-01-08 21:08:00'); +INSERT INTO `sys_job_log` VALUES (7336, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 21:09:00'); +INSERT INTO `sys_job_log` VALUES (7337, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 21:10:00'); +INSERT INTO `sys_job_log` VALUES (7338, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-08 21:10:00'); +INSERT INTO `sys_job_log` VALUES (7339, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 21:11:00'); +INSERT INTO `sys_job_log` VALUES (7340, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 21:12:00'); +INSERT INTO `sys_job_log` VALUES (7341, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:12毫秒', '0', '', '2025-01-08 21:12:00'); +INSERT INTO `sys_job_log` VALUES (7342, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 21:13:00'); +INSERT INTO `sys_job_log` VALUES (7343, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 21:14:00'); +INSERT INTO `sys_job_log` VALUES (7344, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:12毫秒', '0', '', '2025-01-08 21:14:00'); +INSERT INTO `sys_job_log` VALUES (7345, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 21:15:00'); +INSERT INTO `sys_job_log` VALUES (7346, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 21:16:00'); +INSERT INTO `sys_job_log` VALUES (7347, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-08 21:16:00'); +INSERT INTO `sys_job_log` VALUES (7348, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 21:17:00'); +INSERT INTO `sys_job_log` VALUES (7349, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 21:18:00'); +INSERT INTO `sys_job_log` VALUES (7350, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-08 21:18:00'); +INSERT INTO `sys_job_log` VALUES (7351, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 21:19:00'); +INSERT INTO `sys_job_log` VALUES (7352, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 21:20:00'); +INSERT INTO `sys_job_log` VALUES (7353, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-08 21:20:00'); +INSERT INTO `sys_job_log` VALUES (7354, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 21:21:00'); +INSERT INTO `sys_job_log` VALUES (7355, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 21:22:00'); +INSERT INTO `sys_job_log` VALUES (7356, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:12毫秒', '0', '', '2025-01-08 21:22:00'); +INSERT INTO `sys_job_log` VALUES (7357, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 21:23:00'); +INSERT INTO `sys_job_log` VALUES (7358, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 21:24:00'); +INSERT INTO `sys_job_log` VALUES (7359, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:12毫秒', '0', '', '2025-01-08 21:24:00'); +INSERT INTO `sys_job_log` VALUES (7360, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 21:25:00'); +INSERT INTO `sys_job_log` VALUES (7361, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 21:26:00'); +INSERT INTO `sys_job_log` VALUES (7362, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:20毫秒', '0', '', '2025-01-08 21:26:00'); +INSERT INTO `sys_job_log` VALUES (7363, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 21:27:00'); +INSERT INTO `sys_job_log` VALUES (7364, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 21:28:00'); +INSERT INTO `sys_job_log` VALUES (7365, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:12毫秒', '0', '', '2025-01-08 21:28:00'); +INSERT INTO `sys_job_log` VALUES (7366, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 21:29:00'); +INSERT INTO `sys_job_log` VALUES (7367, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 21:30:00'); +INSERT INTO `sys_job_log` VALUES (7368, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:12毫秒', '0', '', '2025-01-08 21:30:00'); +INSERT INTO `sys_job_log` VALUES (7369, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 21:31:00'); +INSERT INTO `sys_job_log` VALUES (7370, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 21:32:00'); +INSERT INTO `sys_job_log` VALUES (7371, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:12毫秒', '0', '', '2025-01-08 21:32:00'); +INSERT INTO `sys_job_log` VALUES (7372, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 21:33:00'); +INSERT INTO `sys_job_log` VALUES (7373, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 21:34:00'); +INSERT INTO `sys_job_log` VALUES (7374, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:14毫秒', '0', '', '2025-01-08 21:34:00'); +INSERT INTO `sys_job_log` VALUES (7375, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 21:35:00'); +INSERT INTO `sys_job_log` VALUES (7376, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 21:36:00'); +INSERT INTO `sys_job_log` VALUES (7377, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-08 21:36:00'); +INSERT INTO `sys_job_log` VALUES (7378, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 21:37:00'); +INSERT INTO `sys_job_log` VALUES (7379, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 21:38:00'); +INSERT INTO `sys_job_log` VALUES (7380, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:12毫秒', '0', '', '2025-01-08 21:38:00'); +INSERT INTO `sys_job_log` VALUES (7381, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 21:39:00'); +INSERT INTO `sys_job_log` VALUES (7382, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 21:40:00'); +INSERT INTO `sys_job_log` VALUES (7383, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-08 21:40:00'); +INSERT INTO `sys_job_log` VALUES (7384, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 21:41:00'); +INSERT INTO `sys_job_log` VALUES (7385, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 21:42:00'); +INSERT INTO `sys_job_log` VALUES (7386, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:12毫秒', '0', '', '2025-01-08 21:42:00'); +INSERT INTO `sys_job_log` VALUES (7387, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 21:43:00'); +INSERT INTO `sys_job_log` VALUES (7388, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 21:44:00'); +INSERT INTO `sys_job_log` VALUES (7389, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-08 21:44:00'); +INSERT INTO `sys_job_log` VALUES (7390, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 21:45:00'); +INSERT INTO `sys_job_log` VALUES (7391, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 21:46:00'); +INSERT INTO `sys_job_log` VALUES (7392, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-08 21:46:00'); +INSERT INTO `sys_job_log` VALUES (7393, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 21:47:00'); +INSERT INTO `sys_job_log` VALUES (7394, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 21:48:00'); +INSERT INTO `sys_job_log` VALUES (7395, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:14毫秒', '0', '', '2025-01-08 21:48:00'); +INSERT INTO `sys_job_log` VALUES (7396, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 21:49:00'); +INSERT INTO `sys_job_log` VALUES (7397, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 21:50:00'); +INSERT INTO `sys_job_log` VALUES (7398, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-08 21:50:00'); +INSERT INTO `sys_job_log` VALUES (7399, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 21:51:00'); +INSERT INTO `sys_job_log` VALUES (7400, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 21:52:00'); +INSERT INTO `sys_job_log` VALUES (7401, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:14毫秒', '0', '', '2025-01-08 21:52:00'); +INSERT INTO `sys_job_log` VALUES (7402, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 21:53:00'); +INSERT INTO `sys_job_log` VALUES (7403, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 21:54:00'); +INSERT INTO `sys_job_log` VALUES (7404, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-08 21:54:00'); +INSERT INTO `sys_job_log` VALUES (7405, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 21:55:00'); +INSERT INTO `sys_job_log` VALUES (7406, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 21:56:00'); +INSERT INTO `sys_job_log` VALUES (7407, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:12毫秒', '0', '', '2025-01-08 21:56:00'); +INSERT INTO `sys_job_log` VALUES (7408, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 21:57:00'); +INSERT INTO `sys_job_log` VALUES (7409, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 21:58:00'); +INSERT INTO `sys_job_log` VALUES (7410, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-08 21:58:00'); +INSERT INTO `sys_job_log` VALUES (7411, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 21:59:00'); +INSERT INTO `sys_job_log` VALUES (7412, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 22:00:00'); +INSERT INTO `sys_job_log` VALUES (7413, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:12毫秒', '0', '', '2025-01-08 22:00:00'); +INSERT INTO `sys_job_log` VALUES (7414, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 22:01:00'); +INSERT INTO `sys_job_log` VALUES (7415, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 22:02:00'); +INSERT INTO `sys_job_log` VALUES (7416, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-08 22:02:00'); +INSERT INTO `sys_job_log` VALUES (7417, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 22:03:00'); +INSERT INTO `sys_job_log` VALUES (7418, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 22:04:00'); +INSERT INTO `sys_job_log` VALUES (7419, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:12毫秒', '0', '', '2025-01-08 22:04:00'); +INSERT INTO `sys_job_log` VALUES (7420, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 22:05:00'); +INSERT INTO `sys_job_log` VALUES (7421, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 22:06:00'); +INSERT INTO `sys_job_log` VALUES (7422, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:11毫秒', '0', '', '2025-01-08 22:06:00'); +INSERT INTO `sys_job_log` VALUES (7423, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 22:07:00'); +INSERT INTO `sys_job_log` VALUES (7424, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 22:08:00'); +INSERT INTO `sys_job_log` VALUES (7425, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:12毫秒', '0', '', '2025-01-08 22:08:00'); +INSERT INTO `sys_job_log` VALUES (7426, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 22:09:00'); +INSERT INTO `sys_job_log` VALUES (7427, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 22:10:00'); +INSERT INTO `sys_job_log` VALUES (7428, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:12毫秒', '0', '', '2025-01-08 22:10:00'); +INSERT INTO `sys_job_log` VALUES (7429, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 22:11:00'); +INSERT INTO `sys_job_log` VALUES (7430, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 22:12:00'); +INSERT INTO `sys_job_log` VALUES (7431, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-08 22:12:00'); +INSERT INTO `sys_job_log` VALUES (7432, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 22:13:00'); +INSERT INTO `sys_job_log` VALUES (7433, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 22:14:00'); +INSERT INTO `sys_job_log` VALUES (7434, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:14毫秒', '0', '', '2025-01-08 22:14:00'); +INSERT INTO `sys_job_log` VALUES (7435, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 22:15:00'); +INSERT INTO `sys_job_log` VALUES (7436, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 22:16:00'); +INSERT INTO `sys_job_log` VALUES (7437, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:14毫秒', '0', '', '2025-01-08 22:16:00'); +INSERT INTO `sys_job_log` VALUES (7438, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 22:17:00'); +INSERT INTO `sys_job_log` VALUES (7439, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 22:18:00'); +INSERT INTO `sys_job_log` VALUES (7440, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-08 22:18:00'); +INSERT INTO `sys_job_log` VALUES (7441, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 22:19:00'); +INSERT INTO `sys_job_log` VALUES (7442, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 22:20:00'); +INSERT INTO `sys_job_log` VALUES (7443, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:12毫秒', '0', '', '2025-01-08 22:20:00'); +INSERT INTO `sys_job_log` VALUES (7444, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 22:21:00'); +INSERT INTO `sys_job_log` VALUES (7445, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 22:22:00'); +INSERT INTO `sys_job_log` VALUES (7446, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:12毫秒', '0', '', '2025-01-08 22:22:00'); +INSERT INTO `sys_job_log` VALUES (7447, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 22:23:00'); +INSERT INTO `sys_job_log` VALUES (7448, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 22:24:00'); +INSERT INTO `sys_job_log` VALUES (7449, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-08 22:24:00'); +INSERT INTO `sys_job_log` VALUES (7450, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 22:25:00'); +INSERT INTO `sys_job_log` VALUES (7451, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 22:26:00'); +INSERT INTO `sys_job_log` VALUES (7452, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-08 22:26:00'); +INSERT INTO `sys_job_log` VALUES (7453, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 22:27:00'); +INSERT INTO `sys_job_log` VALUES (7454, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 22:28:00'); +INSERT INTO `sys_job_log` VALUES (7455, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:14毫秒', '0', '', '2025-01-08 22:28:00'); +INSERT INTO `sys_job_log` VALUES (7456, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 22:29:00'); +INSERT INTO `sys_job_log` VALUES (7457, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 22:30:00'); +INSERT INTO `sys_job_log` VALUES (7458, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:12毫秒', '0', '', '2025-01-08 22:30:00'); +INSERT INTO `sys_job_log` VALUES (7459, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 22:31:00'); +INSERT INTO `sys_job_log` VALUES (7460, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 22:32:00'); +INSERT INTO `sys_job_log` VALUES (7461, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:12毫秒', '0', '', '2025-01-08 22:32:00'); +INSERT INTO `sys_job_log` VALUES (7462, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 22:33:00'); +INSERT INTO `sys_job_log` VALUES (7463, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 22:34:00'); +INSERT INTO `sys_job_log` VALUES (7464, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-08 22:34:00'); +INSERT INTO `sys_job_log` VALUES (7465, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 22:35:00'); +INSERT INTO `sys_job_log` VALUES (7466, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 22:36:00'); +INSERT INTO `sys_job_log` VALUES (7467, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-08 22:36:00'); +INSERT INTO `sys_job_log` VALUES (7468, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 22:37:00'); +INSERT INTO `sys_job_log` VALUES (7469, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 22:38:00'); +INSERT INTO `sys_job_log` VALUES (7470, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-08 22:38:00'); +INSERT INTO `sys_job_log` VALUES (7471, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 22:39:00'); +INSERT INTO `sys_job_log` VALUES (7472, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 22:40:00'); +INSERT INTO `sys_job_log` VALUES (7473, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:11毫秒', '0', '', '2025-01-08 22:40:00'); +INSERT INTO `sys_job_log` VALUES (7474, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 22:41:00'); +INSERT INTO `sys_job_log` VALUES (7475, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 22:42:00'); +INSERT INTO `sys_job_log` VALUES (7476, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-08 22:42:00'); +INSERT INTO `sys_job_log` VALUES (7477, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 22:43:00'); +INSERT INTO `sys_job_log` VALUES (7478, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 22:44:00'); +INSERT INTO `sys_job_log` VALUES (7479, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:12毫秒', '0', '', '2025-01-08 22:44:00'); +INSERT INTO `sys_job_log` VALUES (7480, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 22:45:00'); +INSERT INTO `sys_job_log` VALUES (7481, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 22:46:00'); +INSERT INTO `sys_job_log` VALUES (7482, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:21毫秒', '0', '', '2025-01-08 22:46:00'); +INSERT INTO `sys_job_log` VALUES (7483, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 22:47:00'); +INSERT INTO `sys_job_log` VALUES (7484, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 22:48:00'); +INSERT INTO `sys_job_log` VALUES (7485, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-08 22:48:00'); +INSERT INTO `sys_job_log` VALUES (7486, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 22:49:00'); +INSERT INTO `sys_job_log` VALUES (7487, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 22:50:00'); +INSERT INTO `sys_job_log` VALUES (7488, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:26毫秒', '0', '', '2025-01-08 22:50:00'); +INSERT INTO `sys_job_log` VALUES (7489, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 22:51:00'); +INSERT INTO `sys_job_log` VALUES (7490, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 22:52:00'); +INSERT INTO `sys_job_log` VALUES (7491, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:18毫秒', '0', '', '2025-01-08 22:52:00'); +INSERT INTO `sys_job_log` VALUES (7492, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 22:53:00'); +INSERT INTO `sys_job_log` VALUES (7493, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 22:54:00'); +INSERT INTO `sys_job_log` VALUES (7494, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:17毫秒', '0', '', '2025-01-08 22:54:00'); +INSERT INTO `sys_job_log` VALUES (7495, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 22:55:00'); +INSERT INTO `sys_job_log` VALUES (7496, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 22:56:00'); +INSERT INTO `sys_job_log` VALUES (7497, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:19毫秒', '0', '', '2025-01-08 22:56:00'); +INSERT INTO `sys_job_log` VALUES (7498, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 22:57:00'); +INSERT INTO `sys_job_log` VALUES (7499, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 22:58:00'); +INSERT INTO `sys_job_log` VALUES (7500, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:18毫秒', '0', '', '2025-01-08 22:58:00'); +INSERT INTO `sys_job_log` VALUES (7501, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 22:59:00'); +INSERT INTO `sys_job_log` VALUES (7502, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 23:00:00'); +INSERT INTO `sys_job_log` VALUES (7503, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:19毫秒', '0', '', '2025-01-08 23:00:00'); +INSERT INTO `sys_job_log` VALUES (7504, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 23:01:00'); +INSERT INTO `sys_job_log` VALUES (7505, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 23:02:00'); +INSERT INTO `sys_job_log` VALUES (7506, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:18毫秒', '0', '', '2025-01-08 23:02:00'); +INSERT INTO `sys_job_log` VALUES (7507, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 23:03:00'); +INSERT INTO `sys_job_log` VALUES (7508, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 23:04:00'); +INSERT INTO `sys_job_log` VALUES (7509, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:26毫秒', '0', '', '2025-01-08 23:04:00'); +INSERT INTO `sys_job_log` VALUES (7510, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 23:05:00'); +INSERT INTO `sys_job_log` VALUES (7511, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 23:06:00'); +INSERT INTO `sys_job_log` VALUES (7512, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:19毫秒', '0', '', '2025-01-08 23:06:00'); +INSERT INTO `sys_job_log` VALUES (7513, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 23:07:00'); +INSERT INTO `sys_job_log` VALUES (7514, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 23:08:00'); +INSERT INTO `sys_job_log` VALUES (7515, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:19毫秒', '0', '', '2025-01-08 23:08:00'); +INSERT INTO `sys_job_log` VALUES (7516, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 23:09:00'); +INSERT INTO `sys_job_log` VALUES (7517, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 23:10:00'); +INSERT INTO `sys_job_log` VALUES (7518, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:18毫秒', '0', '', '2025-01-08 23:10:00'); +INSERT INTO `sys_job_log` VALUES (7519, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 23:11:00'); +INSERT INTO `sys_job_log` VALUES (7520, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 23:12:00'); +INSERT INTO `sys_job_log` VALUES (7521, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:19毫秒', '0', '', '2025-01-08 23:12:00'); +INSERT INTO `sys_job_log` VALUES (7522, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 23:13:00'); +INSERT INTO `sys_job_log` VALUES (7523, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 23:14:00'); +INSERT INTO `sys_job_log` VALUES (7524, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:14毫秒', '0', '', '2025-01-08 23:14:00'); +INSERT INTO `sys_job_log` VALUES (7525, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 23:15:00'); +INSERT INTO `sys_job_log` VALUES (7526, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 23:16:00'); +INSERT INTO `sys_job_log` VALUES (7527, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-08 23:16:00'); +INSERT INTO `sys_job_log` VALUES (7528, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 23:17:00'); +INSERT INTO `sys_job_log` VALUES (7529, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 23:18:00'); +INSERT INTO `sys_job_log` VALUES (7530, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:14毫秒', '0', '', '2025-01-08 23:18:00'); +INSERT INTO `sys_job_log` VALUES (7531, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 23:19:00'); +INSERT INTO `sys_job_log` VALUES (7532, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 23:20:00'); +INSERT INTO `sys_job_log` VALUES (7533, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-08 23:20:00'); +INSERT INTO `sys_job_log` VALUES (7534, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 23:21:00'); +INSERT INTO `sys_job_log` VALUES (7535, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 23:22:00'); +INSERT INTO `sys_job_log` VALUES (7536, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:14毫秒', '0', '', '2025-01-08 23:22:00'); +INSERT INTO `sys_job_log` VALUES (7537, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 23:23:00'); +INSERT INTO `sys_job_log` VALUES (7538, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 23:24:00'); +INSERT INTO `sys_job_log` VALUES (7539, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-08 23:24:00'); +INSERT INTO `sys_job_log` VALUES (7540, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 23:25:00'); +INSERT INTO `sys_job_log` VALUES (7541, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 23:26:00'); +INSERT INTO `sys_job_log` VALUES (7542, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-08 23:26:00'); +INSERT INTO `sys_job_log` VALUES (7543, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 23:27:00'); +INSERT INTO `sys_job_log` VALUES (7544, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 23:28:00'); +INSERT INTO `sys_job_log` VALUES (7545, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:15毫秒', '0', '', '2025-01-08 23:28:00'); +INSERT INTO `sys_job_log` VALUES (7546, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 23:29:00'); +INSERT INTO `sys_job_log` VALUES (7547, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 23:30:00'); +INSERT INTO `sys_job_log` VALUES (7548, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:14毫秒', '0', '', '2025-01-08 23:30:00'); +INSERT INTO `sys_job_log` VALUES (7549, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 23:31:00'); +INSERT INTO `sys_job_log` VALUES (7550, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 23:32:00'); +INSERT INTO `sys_job_log` VALUES (7551, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:16毫秒', '0', '', '2025-01-08 23:32:00'); +INSERT INTO `sys_job_log` VALUES (7552, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 23:33:00'); +INSERT INTO `sys_job_log` VALUES (7553, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 23:34:00'); +INSERT INTO `sys_job_log` VALUES (7554, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:12毫秒', '0', '', '2025-01-08 23:34:00'); +INSERT INTO `sys_job_log` VALUES (7555, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 23:35:00'); +INSERT INTO `sys_job_log` VALUES (7556, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 23:36:00'); +INSERT INTO `sys_job_log` VALUES (7557, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-08 23:36:00'); +INSERT INTO `sys_job_log` VALUES (7558, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 23:37:00'); +INSERT INTO `sys_job_log` VALUES (7559, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 23:38:00'); +INSERT INTO `sys_job_log` VALUES (7560, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-08 23:38:00'); +INSERT INTO `sys_job_log` VALUES (7561, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 23:39:00'); +INSERT INTO `sys_job_log` VALUES (7562, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:11毫秒', '0', '', '2025-01-08 23:40:00'); +INSERT INTO `sys_job_log` VALUES (7563, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:14毫秒', '0', '', '2025-01-08 23:40:00'); +INSERT INTO `sys_job_log` VALUES (7564, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 23:41:00'); +INSERT INTO `sys_job_log` VALUES (7565, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2025-01-08 23:42:00'); +INSERT INTO `sys_job_log` VALUES (7566, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:14毫秒', '0', '', '2025-01-08 23:42:00'); +INSERT INTO `sys_job_log` VALUES (7567, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 23:43:00'); +INSERT INTO `sys_job_log` VALUES (7568, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 23:44:00'); +INSERT INTO `sys_job_log` VALUES (7569, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:12毫秒', '0', '', '2025-01-08 23:44:00'); +INSERT INTO `sys_job_log` VALUES (7570, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 23:45:00'); +INSERT INTO `sys_job_log` VALUES (7571, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 23:46:00'); +INSERT INTO `sys_job_log` VALUES (7572, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-08 23:46:00'); +INSERT INTO `sys_job_log` VALUES (7573, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 23:47:00'); +INSERT INTO `sys_job_log` VALUES (7574, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 23:48:00'); +INSERT INTO `sys_job_log` VALUES (7575, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:14毫秒', '0', '', '2025-01-08 23:48:00'); +INSERT INTO `sys_job_log` VALUES (7576, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 23:49:00'); +INSERT INTO `sys_job_log` VALUES (7577, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 23:50:00'); +INSERT INTO `sys_job_log` VALUES (7578, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-08 23:50:00'); +INSERT INTO `sys_job_log` VALUES (7579, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 23:51:00'); +INSERT INTO `sys_job_log` VALUES (7580, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-08 23:52:00'); +INSERT INTO `sys_job_log` VALUES (7581, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-08 23:52:00'); +INSERT INTO `sys_job_log` VALUES (7582, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 23:53:00'); +INSERT INTO `sys_job_log` VALUES (7583, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 23:54:00'); +INSERT INTO `sys_job_log` VALUES (7584, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-08 23:54:00'); +INSERT INTO `sys_job_log` VALUES (7585, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 23:55:00'); +INSERT INTO `sys_job_log` VALUES (7586, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 23:56:00'); +INSERT INTO `sys_job_log` VALUES (7587, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:12毫秒', '0', '', '2025-01-08 23:56:00'); +INSERT INTO `sys_job_log` VALUES (7588, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 23:57:00'); +INSERT INTO `sys_job_log` VALUES (7589, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2025-01-08 23:58:00'); +INSERT INTO `sys_job_log` VALUES (7590, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-08 23:58:00'); +INSERT INTO `sys_job_log` VALUES (7591, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-08 23:59:00'); +INSERT INTO `sys_job_log` VALUES (7592, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:7毫秒', '0', '', '2025-01-09 00:00:00'); +INSERT INTO `sys_job_log` VALUES (7593, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:23毫秒', '0', '', '2025-01-09 00:00:00'); +INSERT INTO `sys_job_log` VALUES (7594, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 00:01:00'); +INSERT INTO `sys_job_log` VALUES (7595, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 00:02:00'); +INSERT INTO `sys_job_log` VALUES (7596, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-09 00:02:00'); +INSERT INTO `sys_job_log` VALUES (7597, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 00:03:00'); +INSERT INTO `sys_job_log` VALUES (7598, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 00:04:00'); +INSERT INTO `sys_job_log` VALUES (7599, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-09 00:04:00'); +INSERT INTO `sys_job_log` VALUES (7600, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 00:05:00'); +INSERT INTO `sys_job_log` VALUES (7601, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 00:06:00'); +INSERT INTO `sys_job_log` VALUES (7602, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-09 00:06:00'); +INSERT INTO `sys_job_log` VALUES (7603, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 00:07:00'); +INSERT INTO `sys_job_log` VALUES (7604, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 00:08:00'); +INSERT INTO `sys_job_log` VALUES (7605, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:12毫秒', '0', '', '2025-01-09 00:08:00'); +INSERT INTO `sys_job_log` VALUES (7606, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 00:09:00'); +INSERT INTO `sys_job_log` VALUES (7607, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 00:10:00'); +INSERT INTO `sys_job_log` VALUES (7608, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-09 00:10:00'); +INSERT INTO `sys_job_log` VALUES (7609, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 00:11:00'); +INSERT INTO `sys_job_log` VALUES (7610, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 00:12:00'); +INSERT INTO `sys_job_log` VALUES (7611, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:12毫秒', '0', '', '2025-01-09 00:12:00'); +INSERT INTO `sys_job_log` VALUES (7612, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 00:13:00'); +INSERT INTO `sys_job_log` VALUES (7613, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 00:14:00'); +INSERT INTO `sys_job_log` VALUES (7614, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:14毫秒', '0', '', '2025-01-09 00:14:00'); +INSERT INTO `sys_job_log` VALUES (7615, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 00:15:00'); +INSERT INTO `sys_job_log` VALUES (7616, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 00:16:00'); +INSERT INTO `sys_job_log` VALUES (7617, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:14毫秒', '0', '', '2025-01-09 00:16:00'); +INSERT INTO `sys_job_log` VALUES (7618, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 00:17:00'); +INSERT INTO `sys_job_log` VALUES (7619, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2025-01-09 00:18:00'); +INSERT INTO `sys_job_log` VALUES (7620, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:14毫秒', '0', '', '2025-01-09 00:18:00'); +INSERT INTO `sys_job_log` VALUES (7621, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 00:19:00'); +INSERT INTO `sys_job_log` VALUES (7622, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 00:20:00'); +INSERT INTO `sys_job_log` VALUES (7623, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-09 00:20:00'); +INSERT INTO `sys_job_log` VALUES (7624, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 00:21:00'); +INSERT INTO `sys_job_log` VALUES (7625, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 00:22:00'); +INSERT INTO `sys_job_log` VALUES (7626, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-09 00:22:00'); +INSERT INTO `sys_job_log` VALUES (7627, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 00:23:00'); +INSERT INTO `sys_job_log` VALUES (7628, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 00:24:00'); +INSERT INTO `sys_job_log` VALUES (7629, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-09 00:24:00'); +INSERT INTO `sys_job_log` VALUES (7630, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2025-01-09 00:25:00'); +INSERT INTO `sys_job_log` VALUES (7631, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 00:26:00'); +INSERT INTO `sys_job_log` VALUES (7632, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:14毫秒', '0', '', '2025-01-09 00:26:00'); +INSERT INTO `sys_job_log` VALUES (7633, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 00:27:00'); +INSERT INTO `sys_job_log` VALUES (7634, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 00:28:00'); +INSERT INTO `sys_job_log` VALUES (7635, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:12毫秒', '0', '', '2025-01-09 00:28:00'); +INSERT INTO `sys_job_log` VALUES (7636, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2025-01-09 00:29:00'); +INSERT INTO `sys_job_log` VALUES (7637, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 00:30:00'); +INSERT INTO `sys_job_log` VALUES (7638, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-09 00:30:00'); +INSERT INTO `sys_job_log` VALUES (7639, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 00:31:00'); +INSERT INTO `sys_job_log` VALUES (7640, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 00:32:00'); +INSERT INTO `sys_job_log` VALUES (7641, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-09 00:32:00'); +INSERT INTO `sys_job_log` VALUES (7642, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 00:33:00'); +INSERT INTO `sys_job_log` VALUES (7643, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 00:34:00'); +INSERT INTO `sys_job_log` VALUES (7644, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-09 00:34:00'); +INSERT INTO `sys_job_log` VALUES (7645, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 00:35:00'); +INSERT INTO `sys_job_log` VALUES (7646, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 00:36:00'); +INSERT INTO `sys_job_log` VALUES (7647, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-09 00:36:00'); +INSERT INTO `sys_job_log` VALUES (7648, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 00:37:00'); +INSERT INTO `sys_job_log` VALUES (7649, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 00:38:00'); +INSERT INTO `sys_job_log` VALUES (7650, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-09 00:38:00'); +INSERT INTO `sys_job_log` VALUES (7651, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 00:39:00'); +INSERT INTO `sys_job_log` VALUES (7652, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 00:40:00'); +INSERT INTO `sys_job_log` VALUES (7653, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:14毫秒', '0', '', '2025-01-09 00:40:00'); +INSERT INTO `sys_job_log` VALUES (7654, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 00:41:00'); +INSERT INTO `sys_job_log` VALUES (7655, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 00:42:00'); +INSERT INTO `sys_job_log` VALUES (7656, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-09 00:42:00'); +INSERT INTO `sys_job_log` VALUES (7657, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 00:43:00'); +INSERT INTO `sys_job_log` VALUES (7658, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 00:44:00'); +INSERT INTO `sys_job_log` VALUES (7659, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-09 00:44:00'); +INSERT INTO `sys_job_log` VALUES (7660, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 00:45:00'); +INSERT INTO `sys_job_log` VALUES (7661, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 00:46:00'); +INSERT INTO `sys_job_log` VALUES (7662, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-09 00:46:00'); +INSERT INTO `sys_job_log` VALUES (7663, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 00:47:00'); +INSERT INTO `sys_job_log` VALUES (7664, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 00:48:00'); +INSERT INTO `sys_job_log` VALUES (7665, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-09 00:48:00'); +INSERT INTO `sys_job_log` VALUES (7666, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 00:49:00'); +INSERT INTO `sys_job_log` VALUES (7667, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2025-01-09 00:50:00'); +INSERT INTO `sys_job_log` VALUES (7668, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:12毫秒', '0', '', '2025-01-09 00:50:00'); +INSERT INTO `sys_job_log` VALUES (7669, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 00:51:00'); +INSERT INTO `sys_job_log` VALUES (7670, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 00:52:00'); +INSERT INTO `sys_job_log` VALUES (7671, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:14毫秒', '0', '', '2025-01-09 00:52:00'); +INSERT INTO `sys_job_log` VALUES (7672, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 00:53:00'); +INSERT INTO `sys_job_log` VALUES (7673, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 00:54:00'); +INSERT INTO `sys_job_log` VALUES (7674, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:14毫秒', '0', '', '2025-01-09 00:54:00'); +INSERT INTO `sys_job_log` VALUES (7675, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 00:55:00'); +INSERT INTO `sys_job_log` VALUES (7676, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 00:56:00'); +INSERT INTO `sys_job_log` VALUES (7677, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-09 00:56:00'); +INSERT INTO `sys_job_log` VALUES (7678, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2025-01-09 00:57:00'); +INSERT INTO `sys_job_log` VALUES (7679, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 00:58:00'); +INSERT INTO `sys_job_log` VALUES (7680, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:20毫秒', '0', '', '2025-01-09 00:58:00'); +INSERT INTO `sys_job_log` VALUES (7681, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 00:59:00'); +INSERT INTO `sys_job_log` VALUES (7682, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 01:00:00'); +INSERT INTO `sys_job_log` VALUES (7683, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-09 01:00:00'); +INSERT INTO `sys_job_log` VALUES (7684, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 01:01:00'); +INSERT INTO `sys_job_log` VALUES (7685, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 01:02:00'); +INSERT INTO `sys_job_log` VALUES (7686, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-09 01:02:00'); +INSERT INTO `sys_job_log` VALUES (7687, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 01:03:00'); +INSERT INTO `sys_job_log` VALUES (7688, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 01:04:00'); +INSERT INTO `sys_job_log` VALUES (7689, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-09 01:04:00'); +INSERT INTO `sys_job_log` VALUES (7690, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 01:05:00'); +INSERT INTO `sys_job_log` VALUES (7691, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 01:06:00'); +INSERT INTO `sys_job_log` VALUES (7692, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-09 01:06:00'); +INSERT INTO `sys_job_log` VALUES (7693, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 01:07:00'); +INSERT INTO `sys_job_log` VALUES (7694, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 01:08:00'); +INSERT INTO `sys_job_log` VALUES (7695, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-09 01:08:00'); +INSERT INTO `sys_job_log` VALUES (7696, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 01:09:00'); +INSERT INTO `sys_job_log` VALUES (7697, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 01:10:00'); +INSERT INTO `sys_job_log` VALUES (7698, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:14毫秒', '0', '', '2025-01-09 01:10:00'); +INSERT INTO `sys_job_log` VALUES (7699, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 01:11:00'); +INSERT INTO `sys_job_log` VALUES (7700, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 01:12:00'); +INSERT INTO `sys_job_log` VALUES (7701, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-09 01:12:00'); +INSERT INTO `sys_job_log` VALUES (7702, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2025-01-09 01:13:00'); +INSERT INTO `sys_job_log` VALUES (7703, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 01:14:00'); +INSERT INTO `sys_job_log` VALUES (7704, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-09 01:14:00'); +INSERT INTO `sys_job_log` VALUES (7705, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 01:15:00'); +INSERT INTO `sys_job_log` VALUES (7706, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 01:16:00'); +INSERT INTO `sys_job_log` VALUES (7707, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-09 01:16:00'); +INSERT INTO `sys_job_log` VALUES (7708, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 01:17:00'); +INSERT INTO `sys_job_log` VALUES (7709, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 01:18:00'); +INSERT INTO `sys_job_log` VALUES (7710, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:14毫秒', '0', '', '2025-01-09 01:18:00'); +INSERT INTO `sys_job_log` VALUES (7711, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 01:19:00'); +INSERT INTO `sys_job_log` VALUES (7712, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 01:20:00'); +INSERT INTO `sys_job_log` VALUES (7713, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-09 01:20:00'); +INSERT INTO `sys_job_log` VALUES (7714, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 01:21:00'); +INSERT INTO `sys_job_log` VALUES (7715, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 01:22:00'); +INSERT INTO `sys_job_log` VALUES (7716, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-09 01:22:00'); +INSERT INTO `sys_job_log` VALUES (7717, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 01:23:00'); +INSERT INTO `sys_job_log` VALUES (7718, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 01:24:00'); +INSERT INTO `sys_job_log` VALUES (7719, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:14毫秒', '0', '', '2025-01-09 01:24:00'); +INSERT INTO `sys_job_log` VALUES (7720, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 01:25:00'); +INSERT INTO `sys_job_log` VALUES (7721, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 01:26:00'); +INSERT INTO `sys_job_log` VALUES (7722, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-09 01:26:00'); +INSERT INTO `sys_job_log` VALUES (7723, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 01:27:00'); +INSERT INTO `sys_job_log` VALUES (7724, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 01:28:00'); +INSERT INTO `sys_job_log` VALUES (7725, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-09 01:28:00'); +INSERT INTO `sys_job_log` VALUES (7726, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 01:29:00'); +INSERT INTO `sys_job_log` VALUES (7727, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 01:30:00'); +INSERT INTO `sys_job_log` VALUES (7728, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-09 01:30:00'); +INSERT INTO `sys_job_log` VALUES (7729, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 01:31:00'); +INSERT INTO `sys_job_log` VALUES (7730, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 01:32:00'); +INSERT INTO `sys_job_log` VALUES (7731, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:12毫秒', '0', '', '2025-01-09 01:32:00'); +INSERT INTO `sys_job_log` VALUES (7732, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 01:33:00'); +INSERT INTO `sys_job_log` VALUES (7733, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 01:34:00'); +INSERT INTO `sys_job_log` VALUES (7734, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-09 01:34:00'); +INSERT INTO `sys_job_log` VALUES (7735, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 01:35:00'); +INSERT INTO `sys_job_log` VALUES (7736, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 01:36:00'); +INSERT INTO `sys_job_log` VALUES (7737, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-09 01:36:00'); +INSERT INTO `sys_job_log` VALUES (7738, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 01:37:00'); +INSERT INTO `sys_job_log` VALUES (7739, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 01:38:00'); +INSERT INTO `sys_job_log` VALUES (7740, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:14毫秒', '0', '', '2025-01-09 01:38:00'); +INSERT INTO `sys_job_log` VALUES (7741, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 01:39:00'); +INSERT INTO `sys_job_log` VALUES (7742, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 01:40:00'); +INSERT INTO `sys_job_log` VALUES (7743, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-09 01:40:00'); +INSERT INTO `sys_job_log` VALUES (7744, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 01:41:00'); +INSERT INTO `sys_job_log` VALUES (7745, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 01:42:00'); +INSERT INTO `sys_job_log` VALUES (7746, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-09 01:42:00'); +INSERT INTO `sys_job_log` VALUES (7747, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 01:43:00'); +INSERT INTO `sys_job_log` VALUES (7748, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 01:44:00'); +INSERT INTO `sys_job_log` VALUES (7749, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-09 01:44:00'); +INSERT INTO `sys_job_log` VALUES (7750, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 01:45:00'); +INSERT INTO `sys_job_log` VALUES (7751, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 01:46:00'); +INSERT INTO `sys_job_log` VALUES (7752, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:16毫秒', '0', '', '2025-01-09 01:46:00'); +INSERT INTO `sys_job_log` VALUES (7753, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 01:47:00'); +INSERT INTO `sys_job_log` VALUES (7754, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 01:48:00'); +INSERT INTO `sys_job_log` VALUES (7755, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-09 01:48:00'); +INSERT INTO `sys_job_log` VALUES (7756, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 01:49:00'); +INSERT INTO `sys_job_log` VALUES (7757, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 01:50:00'); +INSERT INTO `sys_job_log` VALUES (7758, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-09 01:50:00'); +INSERT INTO `sys_job_log` VALUES (7759, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 01:51:00'); +INSERT INTO `sys_job_log` VALUES (7760, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 01:52:00'); +INSERT INTO `sys_job_log` VALUES (7761, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:15毫秒', '0', '', '2025-01-09 01:52:00'); +INSERT INTO `sys_job_log` VALUES (7762, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 01:53:00'); +INSERT INTO `sys_job_log` VALUES (7763, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 01:54:00'); +INSERT INTO `sys_job_log` VALUES (7764, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:14毫秒', '0', '', '2025-01-09 01:54:00'); +INSERT INTO `sys_job_log` VALUES (7765, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 01:55:00'); +INSERT INTO `sys_job_log` VALUES (7766, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 01:56:00'); +INSERT INTO `sys_job_log` VALUES (7767, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-09 01:56:00'); +INSERT INTO `sys_job_log` VALUES (7768, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 01:57:00'); +INSERT INTO `sys_job_log` VALUES (7769, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 01:58:00'); +INSERT INTO `sys_job_log` VALUES (7770, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-09 01:58:00'); +INSERT INTO `sys_job_log` VALUES (7771, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 01:59:00'); +INSERT INTO `sys_job_log` VALUES (7772, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 02:00:00'); +INSERT INTO `sys_job_log` VALUES (7773, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:14毫秒', '0', '', '2025-01-09 02:00:00'); +INSERT INTO `sys_job_log` VALUES (7774, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 02:01:00'); +INSERT INTO `sys_job_log` VALUES (7775, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 02:02:00'); +INSERT INTO `sys_job_log` VALUES (7776, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-09 02:02:00'); +INSERT INTO `sys_job_log` VALUES (7777, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 02:03:00'); +INSERT INTO `sys_job_log` VALUES (7778, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 02:04:00'); +INSERT INTO `sys_job_log` VALUES (7779, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:12毫秒', '0', '', '2025-01-09 02:04:00'); +INSERT INTO `sys_job_log` VALUES (7780, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 02:05:00'); +INSERT INTO `sys_job_log` VALUES (7781, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 02:06:00'); +INSERT INTO `sys_job_log` VALUES (7782, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-09 02:06:00'); +INSERT INTO `sys_job_log` VALUES (7783, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 02:07:00'); +INSERT INTO `sys_job_log` VALUES (7784, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2025-01-09 02:08:00'); +INSERT INTO `sys_job_log` VALUES (7785, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-09 02:08:00'); +INSERT INTO `sys_job_log` VALUES (7786, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 02:09:00'); +INSERT INTO `sys_job_log` VALUES (7787, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 02:10:00'); +INSERT INTO `sys_job_log` VALUES (7788, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:12毫秒', '0', '', '2025-01-09 02:10:00'); +INSERT INTO `sys_job_log` VALUES (7789, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 02:11:00'); +INSERT INTO `sys_job_log` VALUES (7790, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 02:12:00'); +INSERT INTO `sys_job_log` VALUES (7791, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-09 02:12:00'); +INSERT INTO `sys_job_log` VALUES (7792, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 02:13:00'); +INSERT INTO `sys_job_log` VALUES (7793, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2025-01-09 02:14:00'); +INSERT INTO `sys_job_log` VALUES (7794, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-09 02:14:00'); +INSERT INTO `sys_job_log` VALUES (7795, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 02:15:00'); +INSERT INTO `sys_job_log` VALUES (7796, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 02:16:00'); +INSERT INTO `sys_job_log` VALUES (7797, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:14毫秒', '0', '', '2025-01-09 02:16:00'); +INSERT INTO `sys_job_log` VALUES (7798, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 02:17:00'); +INSERT INTO `sys_job_log` VALUES (7799, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 02:18:00'); +INSERT INTO `sys_job_log` VALUES (7800, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:14毫秒', '0', '', '2025-01-09 02:18:00'); +INSERT INTO `sys_job_log` VALUES (7801, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 02:19:00'); +INSERT INTO `sys_job_log` VALUES (7802, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 02:20:00'); +INSERT INTO `sys_job_log` VALUES (7803, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-09 02:20:00'); +INSERT INTO `sys_job_log` VALUES (7804, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 02:21:00'); +INSERT INTO `sys_job_log` VALUES (7805, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 02:22:00'); +INSERT INTO `sys_job_log` VALUES (7806, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-09 02:22:00'); +INSERT INTO `sys_job_log` VALUES (7807, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 02:23:00'); +INSERT INTO `sys_job_log` VALUES (7808, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 02:24:00'); +INSERT INTO `sys_job_log` VALUES (7809, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:14毫秒', '0', '', '2025-01-09 02:24:00'); +INSERT INTO `sys_job_log` VALUES (7810, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 02:25:00'); +INSERT INTO `sys_job_log` VALUES (7811, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 02:26:00'); +INSERT INTO `sys_job_log` VALUES (7812, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-09 02:26:00'); +INSERT INTO `sys_job_log` VALUES (7813, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 02:27:00'); +INSERT INTO `sys_job_log` VALUES (7814, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 02:28:00'); +INSERT INTO `sys_job_log` VALUES (7815, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-09 02:28:00'); +INSERT INTO `sys_job_log` VALUES (7816, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 02:29:00'); +INSERT INTO `sys_job_log` VALUES (7817, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 02:30:00'); +INSERT INTO `sys_job_log` VALUES (7818, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:12毫秒', '0', '', '2025-01-09 02:30:00'); +INSERT INTO `sys_job_log` VALUES (7819, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 02:31:00'); +INSERT INTO `sys_job_log` VALUES (7820, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 02:32:00'); +INSERT INTO `sys_job_log` VALUES (7821, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-09 02:32:00'); +INSERT INTO `sys_job_log` VALUES (7822, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 02:33:00'); +INSERT INTO `sys_job_log` VALUES (7823, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 02:34:00'); +INSERT INTO `sys_job_log` VALUES (7824, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-09 02:34:00'); +INSERT INTO `sys_job_log` VALUES (7825, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 02:35:00'); +INSERT INTO `sys_job_log` VALUES (7826, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 02:36:00'); +INSERT INTO `sys_job_log` VALUES (7827, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-09 02:36:00'); +INSERT INTO `sys_job_log` VALUES (7828, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 02:37:00'); +INSERT INTO `sys_job_log` VALUES (7829, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 02:38:00'); +INSERT INTO `sys_job_log` VALUES (7830, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-09 02:38:00'); +INSERT INTO `sys_job_log` VALUES (7831, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 02:39:00'); +INSERT INTO `sys_job_log` VALUES (7832, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 02:40:00'); +INSERT INTO `sys_job_log` VALUES (7833, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:12毫秒', '0', '', '2025-01-09 02:40:00'); +INSERT INTO `sys_job_log` VALUES (7834, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 02:41:00'); +INSERT INTO `sys_job_log` VALUES (7835, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 02:42:00'); +INSERT INTO `sys_job_log` VALUES (7836, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-09 02:42:00'); +INSERT INTO `sys_job_log` VALUES (7837, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 02:43:00'); +INSERT INTO `sys_job_log` VALUES (7838, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 02:44:00'); +INSERT INTO `sys_job_log` VALUES (7839, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-09 02:44:00'); +INSERT INTO `sys_job_log` VALUES (7840, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 02:45:00'); +INSERT INTO `sys_job_log` VALUES (7841, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 02:46:00'); +INSERT INTO `sys_job_log` VALUES (7842, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-09 02:46:00'); +INSERT INTO `sys_job_log` VALUES (7843, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 02:47:00'); +INSERT INTO `sys_job_log` VALUES (7844, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 02:48:00'); +INSERT INTO `sys_job_log` VALUES (7845, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:14毫秒', '0', '', '2025-01-09 02:48:00'); +INSERT INTO `sys_job_log` VALUES (7846, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 02:49:00'); +INSERT INTO `sys_job_log` VALUES (7847, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 02:50:00'); +INSERT INTO `sys_job_log` VALUES (7848, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-09 02:50:00'); +INSERT INTO `sys_job_log` VALUES (7849, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 02:51:00'); +INSERT INTO `sys_job_log` VALUES (7850, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 02:52:00'); +INSERT INTO `sys_job_log` VALUES (7851, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-09 02:52:00'); +INSERT INTO `sys_job_log` VALUES (7852, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 02:53:00'); +INSERT INTO `sys_job_log` VALUES (7853, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 02:54:00'); +INSERT INTO `sys_job_log` VALUES (7854, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:14毫秒', '0', '', '2025-01-09 02:54:00'); +INSERT INTO `sys_job_log` VALUES (7855, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 02:55:00'); +INSERT INTO `sys_job_log` VALUES (7856, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 02:56:00'); +INSERT INTO `sys_job_log` VALUES (7857, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-09 02:56:00'); +INSERT INTO `sys_job_log` VALUES (7858, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 02:57:00'); +INSERT INTO `sys_job_log` VALUES (7859, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 02:58:00'); +INSERT INTO `sys_job_log` VALUES (7860, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:14毫秒', '0', '', '2025-01-09 02:58:00'); +INSERT INTO `sys_job_log` VALUES (7861, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 02:59:00'); +INSERT INTO `sys_job_log` VALUES (7862, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 03:00:00'); +INSERT INTO `sys_job_log` VALUES (7863, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:14毫秒', '0', '', '2025-01-09 03:00:00'); +INSERT INTO `sys_job_log` VALUES (7864, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 03:01:00'); +INSERT INTO `sys_job_log` VALUES (7865, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 03:02:00'); +INSERT INTO `sys_job_log` VALUES (7866, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-09 03:02:00'); +INSERT INTO `sys_job_log` VALUES (7867, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 03:03:00'); +INSERT INTO `sys_job_log` VALUES (7868, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 03:04:00'); +INSERT INTO `sys_job_log` VALUES (7869, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-09 03:04:00'); +INSERT INTO `sys_job_log` VALUES (7870, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 03:05:00'); +INSERT INTO `sys_job_log` VALUES (7871, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 03:06:00'); +INSERT INTO `sys_job_log` VALUES (7872, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:12毫秒', '0', '', '2025-01-09 03:06:00'); +INSERT INTO `sys_job_log` VALUES (7873, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 03:07:00'); +INSERT INTO `sys_job_log` VALUES (7874, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 03:08:00'); +INSERT INTO `sys_job_log` VALUES (7875, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-09 03:08:00'); +INSERT INTO `sys_job_log` VALUES (7876, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 03:09:00'); +INSERT INTO `sys_job_log` VALUES (7877, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 03:10:00'); +INSERT INTO `sys_job_log` VALUES (7878, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:14毫秒', '0', '', '2025-01-09 03:10:00'); +INSERT INTO `sys_job_log` VALUES (7879, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 03:11:00'); +INSERT INTO `sys_job_log` VALUES (7880, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 03:12:00'); +INSERT INTO `sys_job_log` VALUES (7881, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-09 03:12:00'); +INSERT INTO `sys_job_log` VALUES (7882, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 03:13:00'); +INSERT INTO `sys_job_log` VALUES (7883, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 03:14:00'); +INSERT INTO `sys_job_log` VALUES (7884, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:16毫秒', '0', '', '2025-01-09 03:14:00'); +INSERT INTO `sys_job_log` VALUES (7885, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 03:15:00'); +INSERT INTO `sys_job_log` VALUES (7886, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 03:16:00'); +INSERT INTO `sys_job_log` VALUES (7887, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-09 03:16:00'); +INSERT INTO `sys_job_log` VALUES (7888, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 03:17:00'); +INSERT INTO `sys_job_log` VALUES (7889, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 03:18:00'); +INSERT INTO `sys_job_log` VALUES (7890, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:12毫秒', '0', '', '2025-01-09 03:18:00'); +INSERT INTO `sys_job_log` VALUES (7891, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 03:19:00'); +INSERT INTO `sys_job_log` VALUES (7892, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 03:20:00'); +INSERT INTO `sys_job_log` VALUES (7893, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-09 03:20:00'); +INSERT INTO `sys_job_log` VALUES (7894, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 03:21:00'); +INSERT INTO `sys_job_log` VALUES (7895, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 03:22:00'); +INSERT INTO `sys_job_log` VALUES (7896, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-09 03:22:00'); +INSERT INTO `sys_job_log` VALUES (7897, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 03:23:00'); +INSERT INTO `sys_job_log` VALUES (7898, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 03:24:00'); +INSERT INTO `sys_job_log` VALUES (7899, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-09 03:24:00'); +INSERT INTO `sys_job_log` VALUES (7900, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 03:25:00'); +INSERT INTO `sys_job_log` VALUES (7901, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 03:26:00'); +INSERT INTO `sys_job_log` VALUES (7902, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-09 03:26:00'); +INSERT INTO `sys_job_log` VALUES (7903, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 03:27:00'); +INSERT INTO `sys_job_log` VALUES (7904, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 03:28:00'); +INSERT INTO `sys_job_log` VALUES (7905, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-09 03:28:00'); +INSERT INTO `sys_job_log` VALUES (7906, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 03:29:00'); +INSERT INTO `sys_job_log` VALUES (7907, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2025-01-09 03:30:00'); +INSERT INTO `sys_job_log` VALUES (7908, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:14毫秒', '0', '', '2025-01-09 03:30:00'); +INSERT INTO `sys_job_log` VALUES (7909, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 03:31:00'); +INSERT INTO `sys_job_log` VALUES (7910, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 03:32:00'); +INSERT INTO `sys_job_log` VALUES (7911, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:15毫秒', '0', '', '2025-01-09 03:32:00'); +INSERT INTO `sys_job_log` VALUES (7912, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 03:33:00'); +INSERT INTO `sys_job_log` VALUES (7913, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 03:34:00'); +INSERT INTO `sys_job_log` VALUES (7914, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-09 03:34:00'); +INSERT INTO `sys_job_log` VALUES (7915, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 03:35:00'); +INSERT INTO `sys_job_log` VALUES (7916, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 03:36:00'); +INSERT INTO `sys_job_log` VALUES (7917, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-09 03:36:00'); +INSERT INTO `sys_job_log` VALUES (7918, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 03:37:00'); +INSERT INTO `sys_job_log` VALUES (7919, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 03:38:00'); +INSERT INTO `sys_job_log` VALUES (7920, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-09 03:38:00'); +INSERT INTO `sys_job_log` VALUES (7921, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 03:39:00'); +INSERT INTO `sys_job_log` VALUES (7922, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 03:40:00'); +INSERT INTO `sys_job_log` VALUES (7923, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-09 03:40:00'); +INSERT INTO `sys_job_log` VALUES (7924, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 03:41:00'); +INSERT INTO `sys_job_log` VALUES (7925, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 03:42:00'); +INSERT INTO `sys_job_log` VALUES (7926, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:14毫秒', '0', '', '2025-01-09 03:42:00'); +INSERT INTO `sys_job_log` VALUES (7927, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 03:43:00'); +INSERT INTO `sys_job_log` VALUES (7928, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 03:44:00'); +INSERT INTO `sys_job_log` VALUES (7929, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-09 03:44:00'); +INSERT INTO `sys_job_log` VALUES (7930, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 03:45:00'); +INSERT INTO `sys_job_log` VALUES (7931, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 03:46:00'); +INSERT INTO `sys_job_log` VALUES (7932, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:14毫秒', '0', '', '2025-01-09 03:46:00'); +INSERT INTO `sys_job_log` VALUES (7933, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 03:47:00'); +INSERT INTO `sys_job_log` VALUES (7934, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 03:48:00'); +INSERT INTO `sys_job_log` VALUES (7935, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:14毫秒', '0', '', '2025-01-09 03:48:00'); +INSERT INTO `sys_job_log` VALUES (7936, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 03:49:00'); +INSERT INTO `sys_job_log` VALUES (7937, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 03:50:00'); +INSERT INTO `sys_job_log` VALUES (7938, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-09 03:50:00'); +INSERT INTO `sys_job_log` VALUES (7939, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 03:51:00'); +INSERT INTO `sys_job_log` VALUES (7940, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 03:52:00'); +INSERT INTO `sys_job_log` VALUES (7941, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-09 03:52:00'); +INSERT INTO `sys_job_log` VALUES (7942, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 03:53:00'); +INSERT INTO `sys_job_log` VALUES (7943, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2025-01-09 03:54:00'); +INSERT INTO `sys_job_log` VALUES (7944, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:14毫秒', '0', '', '2025-01-09 03:54:00'); +INSERT INTO `sys_job_log` VALUES (7945, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 03:55:00'); +INSERT INTO `sys_job_log` VALUES (7946, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 03:56:00'); +INSERT INTO `sys_job_log` VALUES (7947, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-09 03:56:00'); +INSERT INTO `sys_job_log` VALUES (7948, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 03:57:00'); +INSERT INTO `sys_job_log` VALUES (7949, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 03:58:00'); +INSERT INTO `sys_job_log` VALUES (7950, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-09 03:58:00'); +INSERT INTO `sys_job_log` VALUES (7951, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 03:59:00'); +INSERT INTO `sys_job_log` VALUES (7952, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 04:00:00'); +INSERT INTO `sys_job_log` VALUES (7953, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-09 04:00:00'); +INSERT INTO `sys_job_log` VALUES (7954, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 04:01:00'); +INSERT INTO `sys_job_log` VALUES (7955, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 04:02:00'); +INSERT INTO `sys_job_log` VALUES (7956, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:14毫秒', '0', '', '2025-01-09 04:02:00'); +INSERT INTO `sys_job_log` VALUES (7957, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 04:03:00'); +INSERT INTO `sys_job_log` VALUES (7958, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 04:04:00'); +INSERT INTO `sys_job_log` VALUES (7959, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:21毫秒', '0', '', '2025-01-09 04:04:00'); +INSERT INTO `sys_job_log` VALUES (7960, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 04:05:00'); +INSERT INTO `sys_job_log` VALUES (7961, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 04:06:00'); +INSERT INTO `sys_job_log` VALUES (7962, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:15毫秒', '0', '', '2025-01-09 04:06:00'); +INSERT INTO `sys_job_log` VALUES (7963, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 04:07:00'); +INSERT INTO `sys_job_log` VALUES (7964, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 04:08:00'); +INSERT INTO `sys_job_log` VALUES (7965, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:12毫秒', '0', '', '2025-01-09 04:08:00'); +INSERT INTO `sys_job_log` VALUES (7966, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 04:09:00'); +INSERT INTO `sys_job_log` VALUES (7967, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 04:10:00'); +INSERT INTO `sys_job_log` VALUES (7968, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:12毫秒', '0', '', '2025-01-09 04:10:00'); +INSERT INTO `sys_job_log` VALUES (7969, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 04:11:00'); +INSERT INTO `sys_job_log` VALUES (7970, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 04:12:00'); +INSERT INTO `sys_job_log` VALUES (7971, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:12毫秒', '0', '', '2025-01-09 04:12:00'); +INSERT INTO `sys_job_log` VALUES (7972, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 04:13:00'); +INSERT INTO `sys_job_log` VALUES (7973, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 04:14:00'); +INSERT INTO `sys_job_log` VALUES (7974, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-09 04:14:00'); +INSERT INTO `sys_job_log` VALUES (7975, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 04:15:00'); +INSERT INTO `sys_job_log` VALUES (7976, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 04:16:00'); +INSERT INTO `sys_job_log` VALUES (7977, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-09 04:16:00'); +INSERT INTO `sys_job_log` VALUES (7978, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 04:17:00'); +INSERT INTO `sys_job_log` VALUES (7979, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 04:18:00'); +INSERT INTO `sys_job_log` VALUES (7980, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:12毫秒', '0', '', '2025-01-09 04:18:00'); +INSERT INTO `sys_job_log` VALUES (7981, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 04:19:00'); +INSERT INTO `sys_job_log` VALUES (7982, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 04:20:00'); +INSERT INTO `sys_job_log` VALUES (7983, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-09 04:20:00'); +INSERT INTO `sys_job_log` VALUES (7984, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 04:21:00'); +INSERT INTO `sys_job_log` VALUES (7985, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 04:22:00'); +INSERT INTO `sys_job_log` VALUES (7986, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-09 04:22:00'); +INSERT INTO `sys_job_log` VALUES (7987, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 04:23:00'); +INSERT INTO `sys_job_log` VALUES (7988, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 04:24:00'); +INSERT INTO `sys_job_log` VALUES (7989, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:14毫秒', '0', '', '2025-01-09 04:24:00'); +INSERT INTO `sys_job_log` VALUES (7990, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 04:25:00'); +INSERT INTO `sys_job_log` VALUES (7991, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 04:26:00'); +INSERT INTO `sys_job_log` VALUES (7992, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-09 04:26:00'); +INSERT INTO `sys_job_log` VALUES (7993, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 04:27:00'); +INSERT INTO `sys_job_log` VALUES (7994, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 04:28:00'); +INSERT INTO `sys_job_log` VALUES (7995, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-09 04:28:00'); +INSERT INTO `sys_job_log` VALUES (7996, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 04:29:00'); +INSERT INTO `sys_job_log` VALUES (7997, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 04:30:00'); +INSERT INTO `sys_job_log` VALUES (7998, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:15毫秒', '0', '', '2025-01-09 04:30:00'); +INSERT INTO `sys_job_log` VALUES (7999, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 04:31:00'); +INSERT INTO `sys_job_log` VALUES (8000, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 04:32:00'); +INSERT INTO `sys_job_log` VALUES (8001, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-09 04:32:00'); +INSERT INTO `sys_job_log` VALUES (8002, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 04:33:00'); +INSERT INTO `sys_job_log` VALUES (8003, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 04:34:00'); +INSERT INTO `sys_job_log` VALUES (8004, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-09 04:34:00'); +INSERT INTO `sys_job_log` VALUES (8005, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 04:35:00'); +INSERT INTO `sys_job_log` VALUES (8006, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 04:36:00'); +INSERT INTO `sys_job_log` VALUES (8007, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-09 04:36:00'); +INSERT INTO `sys_job_log` VALUES (8008, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 04:37:00'); +INSERT INTO `sys_job_log` VALUES (8009, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 04:38:00'); +INSERT INTO `sys_job_log` VALUES (8010, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-09 04:38:00'); +INSERT INTO `sys_job_log` VALUES (8011, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 04:39:00'); +INSERT INTO `sys_job_log` VALUES (8012, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 04:40:00'); +INSERT INTO `sys_job_log` VALUES (8013, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:14毫秒', '0', '', '2025-01-09 04:40:00'); +INSERT INTO `sys_job_log` VALUES (8014, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 04:41:00'); +INSERT INTO `sys_job_log` VALUES (8015, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 04:42:00'); +INSERT INTO `sys_job_log` VALUES (8016, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-09 04:42:00'); +INSERT INTO `sys_job_log` VALUES (8017, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 04:43:00'); +INSERT INTO `sys_job_log` VALUES (8018, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 04:44:00'); +INSERT INTO `sys_job_log` VALUES (8019, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-09 04:44:00'); +INSERT INTO `sys_job_log` VALUES (8020, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 04:45:00'); +INSERT INTO `sys_job_log` VALUES (8021, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 04:46:00'); +INSERT INTO `sys_job_log` VALUES (8022, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:12毫秒', '0', '', '2025-01-09 04:46:00'); +INSERT INTO `sys_job_log` VALUES (8023, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 04:47:00'); +INSERT INTO `sys_job_log` VALUES (8024, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 04:48:00'); +INSERT INTO `sys_job_log` VALUES (8025, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-09 04:48:00'); +INSERT INTO `sys_job_log` VALUES (8026, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 04:49:00'); +INSERT INTO `sys_job_log` VALUES (8027, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 04:50:00'); +INSERT INTO `sys_job_log` VALUES (8028, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:14毫秒', '0', '', '2025-01-09 04:50:00'); +INSERT INTO `sys_job_log` VALUES (8029, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 04:51:00'); +INSERT INTO `sys_job_log` VALUES (8030, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 04:52:00'); +INSERT INTO `sys_job_log` VALUES (8031, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:14毫秒', '0', '', '2025-01-09 04:52:00'); +INSERT INTO `sys_job_log` VALUES (8032, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 04:53:00'); +INSERT INTO `sys_job_log` VALUES (8033, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 04:54:00'); +INSERT INTO `sys_job_log` VALUES (8034, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-09 04:54:00'); +INSERT INTO `sys_job_log` VALUES (8035, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 04:55:00'); +INSERT INTO `sys_job_log` VALUES (8036, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 04:56:00'); +INSERT INTO `sys_job_log` VALUES (8037, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-09 04:56:00'); +INSERT INTO `sys_job_log` VALUES (8038, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 04:57:00'); +INSERT INTO `sys_job_log` VALUES (8039, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 04:58:00'); +INSERT INTO `sys_job_log` VALUES (8040, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-09 04:58:00'); +INSERT INTO `sys_job_log` VALUES (8041, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 04:59:00'); +INSERT INTO `sys_job_log` VALUES (8042, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 05:00:00'); +INSERT INTO `sys_job_log` VALUES (8043, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:21毫秒', '0', '', '2025-01-09 05:00:00'); +INSERT INTO `sys_job_log` VALUES (8044, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 05:01:00'); +INSERT INTO `sys_job_log` VALUES (8045, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 05:02:00'); +INSERT INTO `sys_job_log` VALUES (8046, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:14毫秒', '0', '', '2025-01-09 05:02:00'); +INSERT INTO `sys_job_log` VALUES (8047, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 05:03:00'); +INSERT INTO `sys_job_log` VALUES (8048, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:9毫秒', '0', '', '2025-01-09 05:04:00'); +INSERT INTO `sys_job_log` VALUES (8049, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:15毫秒', '0', '', '2025-01-09 05:04:00'); +INSERT INTO `sys_job_log` VALUES (8050, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 05:05:00'); +INSERT INTO `sys_job_log` VALUES (8051, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 05:06:00'); +INSERT INTO `sys_job_log` VALUES (8052, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-09 05:06:00'); +INSERT INTO `sys_job_log` VALUES (8053, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 05:07:00'); +INSERT INTO `sys_job_log` VALUES (8054, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 05:08:00'); +INSERT INTO `sys_job_log` VALUES (8055, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-09 05:08:00'); +INSERT INTO `sys_job_log` VALUES (8056, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 05:09:00'); +INSERT INTO `sys_job_log` VALUES (8057, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 05:10:00'); +INSERT INTO `sys_job_log` VALUES (8058, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:14毫秒', '0', '', '2025-01-09 05:10:00'); +INSERT INTO `sys_job_log` VALUES (8059, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 05:11:00'); +INSERT INTO `sys_job_log` VALUES (8060, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 05:12:00'); +INSERT INTO `sys_job_log` VALUES (8061, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-09 05:12:00'); +INSERT INTO `sys_job_log` VALUES (8062, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 05:13:00'); +INSERT INTO `sys_job_log` VALUES (8063, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 05:14:00'); +INSERT INTO `sys_job_log` VALUES (8064, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:14毫秒', '0', '', '2025-01-09 05:14:00'); +INSERT INTO `sys_job_log` VALUES (8065, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 05:15:00'); +INSERT INTO `sys_job_log` VALUES (8066, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 05:16:00'); +INSERT INTO `sys_job_log` VALUES (8067, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-09 05:16:00'); +INSERT INTO `sys_job_log` VALUES (8068, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 05:17:00'); +INSERT INTO `sys_job_log` VALUES (8069, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 05:18:00'); +INSERT INTO `sys_job_log` VALUES (8070, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:12毫秒', '0', '', '2025-01-09 05:18:00'); +INSERT INTO `sys_job_log` VALUES (8071, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 05:19:00'); +INSERT INTO `sys_job_log` VALUES (8072, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 05:20:00'); +INSERT INTO `sys_job_log` VALUES (8073, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:14毫秒', '0', '', '2025-01-09 05:20:00'); +INSERT INTO `sys_job_log` VALUES (8074, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 05:21:00'); +INSERT INTO `sys_job_log` VALUES (8075, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 05:22:00'); +INSERT INTO `sys_job_log` VALUES (8076, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:12毫秒', '0', '', '2025-01-09 05:22:00'); +INSERT INTO `sys_job_log` VALUES (8077, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 05:23:00'); +INSERT INTO `sys_job_log` VALUES (8078, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 05:24:00'); +INSERT INTO `sys_job_log` VALUES (8079, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-09 05:24:00'); +INSERT INTO `sys_job_log` VALUES (8080, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 05:25:00'); +INSERT INTO `sys_job_log` VALUES (8081, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 05:26:00'); +INSERT INTO `sys_job_log` VALUES (8082, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:12毫秒', '0', '', '2025-01-09 05:26:00'); +INSERT INTO `sys_job_log` VALUES (8083, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 05:27:00'); +INSERT INTO `sys_job_log` VALUES (8084, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 05:28:00'); +INSERT INTO `sys_job_log` VALUES (8085, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-09 05:28:00'); +INSERT INTO `sys_job_log` VALUES (8086, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 05:29:00'); +INSERT INTO `sys_job_log` VALUES (8087, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 05:30:00'); +INSERT INTO `sys_job_log` VALUES (8088, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-09 05:30:00'); +INSERT INTO `sys_job_log` VALUES (8089, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 05:31:00'); +INSERT INTO `sys_job_log` VALUES (8090, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 05:32:00'); +INSERT INTO `sys_job_log` VALUES (8091, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:12毫秒', '0', '', '2025-01-09 05:32:00'); +INSERT INTO `sys_job_log` VALUES (8092, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 05:33:00'); +INSERT INTO `sys_job_log` VALUES (8093, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 05:34:00'); +INSERT INTO `sys_job_log` VALUES (8094, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:14毫秒', '0', '', '2025-01-09 05:34:00'); +INSERT INTO `sys_job_log` VALUES (8095, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 05:35:00'); +INSERT INTO `sys_job_log` VALUES (8096, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 05:36:00'); +INSERT INTO `sys_job_log` VALUES (8097, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-09 05:36:00'); +INSERT INTO `sys_job_log` VALUES (8098, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 05:37:00'); +INSERT INTO `sys_job_log` VALUES (8099, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 05:38:00'); +INSERT INTO `sys_job_log` VALUES (8100, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-09 05:38:00'); +INSERT INTO `sys_job_log` VALUES (8101, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 05:39:00'); +INSERT INTO `sys_job_log` VALUES (8102, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 05:40:00'); +INSERT INTO `sys_job_log` VALUES (8103, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-09 05:40:00'); +INSERT INTO `sys_job_log` VALUES (8104, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 05:41:00'); +INSERT INTO `sys_job_log` VALUES (8105, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 05:42:00'); +INSERT INTO `sys_job_log` VALUES (8106, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-09 05:42:00'); +INSERT INTO `sys_job_log` VALUES (8107, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 05:43:00'); +INSERT INTO `sys_job_log` VALUES (8108, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 05:44:00'); +INSERT INTO `sys_job_log` VALUES (8109, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:14毫秒', '0', '', '2025-01-09 05:44:00'); +INSERT INTO `sys_job_log` VALUES (8110, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 05:45:00'); +INSERT INTO `sys_job_log` VALUES (8111, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 05:46:00'); +INSERT INTO `sys_job_log` VALUES (8112, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:12毫秒', '0', '', '2025-01-09 05:46:00'); +INSERT INTO `sys_job_log` VALUES (8113, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 05:47:00'); +INSERT INTO `sys_job_log` VALUES (8114, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 05:48:00'); +INSERT INTO `sys_job_log` VALUES (8115, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-09 05:48:00'); +INSERT INTO `sys_job_log` VALUES (8116, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 05:49:00'); +INSERT INTO `sys_job_log` VALUES (8117, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 05:50:00'); +INSERT INTO `sys_job_log` VALUES (8118, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:14毫秒', '0', '', '2025-01-09 05:50:00'); +INSERT INTO `sys_job_log` VALUES (8119, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 05:51:00'); +INSERT INTO `sys_job_log` VALUES (8120, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 05:52:00'); +INSERT INTO `sys_job_log` VALUES (8121, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:14毫秒', '0', '', '2025-01-09 05:52:00'); +INSERT INTO `sys_job_log` VALUES (8122, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 05:53:00'); +INSERT INTO `sys_job_log` VALUES (8123, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 05:54:00'); +INSERT INTO `sys_job_log` VALUES (8124, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-09 05:54:00'); +INSERT INTO `sys_job_log` VALUES (8125, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 05:55:00'); +INSERT INTO `sys_job_log` VALUES (8126, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:4毫秒', '0', '', '2025-01-09 05:56:00'); +INSERT INTO `sys_job_log` VALUES (8127, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:19毫秒', '0', '', '2025-01-09 05:56:00'); +INSERT INTO `sys_job_log` VALUES (8128, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 05:57:00'); +INSERT INTO `sys_job_log` VALUES (8129, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 05:58:00'); +INSERT INTO `sys_job_log` VALUES (8130, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:14毫秒', '0', '', '2025-01-09 05:58:00'); +INSERT INTO `sys_job_log` VALUES (8131, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 05:59:00'); +INSERT INTO `sys_job_log` VALUES (8132, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 06:00:00'); +INSERT INTO `sys_job_log` VALUES (8133, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-09 06:00:00'); +INSERT INTO `sys_job_log` VALUES (8134, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 06:01:00'); +INSERT INTO `sys_job_log` VALUES (8135, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 06:02:00'); +INSERT INTO `sys_job_log` VALUES (8136, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-09 06:02:00'); +INSERT INTO `sys_job_log` VALUES (8137, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 06:03:00'); +INSERT INTO `sys_job_log` VALUES (8138, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 06:04:00'); +INSERT INTO `sys_job_log` VALUES (8139, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:12毫秒', '0', '', '2025-01-09 06:04:00'); +INSERT INTO `sys_job_log` VALUES (8140, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 06:05:00'); +INSERT INTO `sys_job_log` VALUES (8141, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 06:06:00'); +INSERT INTO `sys_job_log` VALUES (8142, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-09 06:06:00'); +INSERT INTO `sys_job_log` VALUES (8143, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 06:07:00'); +INSERT INTO `sys_job_log` VALUES (8144, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 06:08:00'); +INSERT INTO `sys_job_log` VALUES (8145, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:12毫秒', '0', '', '2025-01-09 06:08:00'); +INSERT INTO `sys_job_log` VALUES (8146, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 06:09:00'); +INSERT INTO `sys_job_log` VALUES (8147, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 06:10:00'); +INSERT INTO `sys_job_log` VALUES (8148, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-09 06:10:00'); +INSERT INTO `sys_job_log` VALUES (8149, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 06:11:00'); +INSERT INTO `sys_job_log` VALUES (8150, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2025-01-09 06:12:00'); +INSERT INTO `sys_job_log` VALUES (8151, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:14毫秒', '0', '', '2025-01-09 06:12:00'); +INSERT INTO `sys_job_log` VALUES (8152, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 06:13:00'); +INSERT INTO `sys_job_log` VALUES (8153, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 06:14:00'); +INSERT INTO `sys_job_log` VALUES (8154, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:14毫秒', '0', '', '2025-01-09 06:14:00'); +INSERT INTO `sys_job_log` VALUES (8155, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 06:15:00'); +INSERT INTO `sys_job_log` VALUES (8156, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 06:16:00'); +INSERT INTO `sys_job_log` VALUES (8157, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-09 06:16:00'); +INSERT INTO `sys_job_log` VALUES (8158, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 06:17:00'); +INSERT INTO `sys_job_log` VALUES (8159, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 06:18:00'); +INSERT INTO `sys_job_log` VALUES (8160, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:14毫秒', '0', '', '2025-01-09 06:18:00'); +INSERT INTO `sys_job_log` VALUES (8161, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 06:19:00'); +INSERT INTO `sys_job_log` VALUES (8162, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 06:20:00'); +INSERT INTO `sys_job_log` VALUES (8163, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:14毫秒', '0', '', '2025-01-09 06:20:00'); +INSERT INTO `sys_job_log` VALUES (8164, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 06:21:00'); +INSERT INTO `sys_job_log` VALUES (8165, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 06:22:00'); +INSERT INTO `sys_job_log` VALUES (8166, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-09 06:22:00'); +INSERT INTO `sys_job_log` VALUES (8167, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 06:23:00'); +INSERT INTO `sys_job_log` VALUES (8168, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 06:24:00'); +INSERT INTO `sys_job_log` VALUES (8169, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-09 06:24:00'); +INSERT INTO `sys_job_log` VALUES (8170, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 06:25:00'); +INSERT INTO `sys_job_log` VALUES (8171, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 06:26:00'); +INSERT INTO `sys_job_log` VALUES (8172, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:12毫秒', '0', '', '2025-01-09 06:26:00'); +INSERT INTO `sys_job_log` VALUES (8173, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 06:27:00'); +INSERT INTO `sys_job_log` VALUES (8174, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 06:28:00'); +INSERT INTO `sys_job_log` VALUES (8175, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-09 06:28:00'); +INSERT INTO `sys_job_log` VALUES (8176, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 06:29:00'); +INSERT INTO `sys_job_log` VALUES (8177, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2025-01-09 06:30:00'); +INSERT INTO `sys_job_log` VALUES (8178, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-09 06:30:00'); +INSERT INTO `sys_job_log` VALUES (8179, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 06:31:00'); +INSERT INTO `sys_job_log` VALUES (8180, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 06:32:00'); +INSERT INTO `sys_job_log` VALUES (8181, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:15毫秒', '0', '', '2025-01-09 06:32:00'); +INSERT INTO `sys_job_log` VALUES (8182, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 06:33:00'); +INSERT INTO `sys_job_log` VALUES (8183, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 06:34:00'); +INSERT INTO `sys_job_log` VALUES (8184, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-09 06:34:00'); +INSERT INTO `sys_job_log` VALUES (8185, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 06:35:00'); +INSERT INTO `sys_job_log` VALUES (8186, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 06:36:00'); +INSERT INTO `sys_job_log` VALUES (8187, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-09 06:36:00'); +INSERT INTO `sys_job_log` VALUES (8188, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 06:37:00'); +INSERT INTO `sys_job_log` VALUES (8189, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 06:38:00'); +INSERT INTO `sys_job_log` VALUES (8190, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-09 06:38:00'); +INSERT INTO `sys_job_log` VALUES (8191, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 06:39:00'); +INSERT INTO `sys_job_log` VALUES (8192, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 06:40:00'); +INSERT INTO `sys_job_log` VALUES (8193, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:12毫秒', '0', '', '2025-01-09 06:40:00'); +INSERT INTO `sys_job_log` VALUES (8194, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 06:41:00'); +INSERT INTO `sys_job_log` VALUES (8195, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 06:42:00'); +INSERT INTO `sys_job_log` VALUES (8196, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:12毫秒', '0', '', '2025-01-09 06:42:00'); +INSERT INTO `sys_job_log` VALUES (8197, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 06:43:00'); +INSERT INTO `sys_job_log` VALUES (8198, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 06:44:00'); +INSERT INTO `sys_job_log` VALUES (8199, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:21毫秒', '0', '', '2025-01-09 06:44:00'); +INSERT INTO `sys_job_log` VALUES (8200, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 06:45:00'); +INSERT INTO `sys_job_log` VALUES (8201, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 06:46:00'); +INSERT INTO `sys_job_log` VALUES (8202, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-09 06:46:00'); +INSERT INTO `sys_job_log` VALUES (8203, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 06:47:00'); +INSERT INTO `sys_job_log` VALUES (8204, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 06:48:00'); +INSERT INTO `sys_job_log` VALUES (8205, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-09 06:48:00'); +INSERT INTO `sys_job_log` VALUES (8206, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 06:49:00'); +INSERT INTO `sys_job_log` VALUES (8207, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 06:50:00'); +INSERT INTO `sys_job_log` VALUES (8208, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:12毫秒', '0', '', '2025-01-09 06:50:00'); +INSERT INTO `sys_job_log` VALUES (8209, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 06:51:00'); +INSERT INTO `sys_job_log` VALUES (8210, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 06:52:00'); +INSERT INTO `sys_job_log` VALUES (8211, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:12毫秒', '0', '', '2025-01-09 06:52:00'); +INSERT INTO `sys_job_log` VALUES (8212, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 06:53:00'); +INSERT INTO `sys_job_log` VALUES (8213, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 06:54:00'); +INSERT INTO `sys_job_log` VALUES (8214, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:12毫秒', '0', '', '2025-01-09 06:54:00'); +INSERT INTO `sys_job_log` VALUES (8215, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 06:55:00'); +INSERT INTO `sys_job_log` VALUES (8216, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 06:56:00'); +INSERT INTO `sys_job_log` VALUES (8217, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:12毫秒', '0', '', '2025-01-09 06:56:00'); +INSERT INTO `sys_job_log` VALUES (8218, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 06:57:00'); +INSERT INTO `sys_job_log` VALUES (8219, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 06:58:00'); +INSERT INTO `sys_job_log` VALUES (8220, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-09 06:58:00'); +INSERT INTO `sys_job_log` VALUES (8221, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 06:59:00'); +INSERT INTO `sys_job_log` VALUES (8222, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 07:00:00'); +INSERT INTO `sys_job_log` VALUES (8223, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-09 07:00:00'); +INSERT INTO `sys_job_log` VALUES (8224, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 07:01:00'); +INSERT INTO `sys_job_log` VALUES (8225, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 07:02:00'); +INSERT INTO `sys_job_log` VALUES (8226, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-09 07:02:00'); +INSERT INTO `sys_job_log` VALUES (8227, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 07:03:00'); +INSERT INTO `sys_job_log` VALUES (8228, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 07:04:00'); +INSERT INTO `sys_job_log` VALUES (8229, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:14毫秒', '0', '', '2025-01-09 07:04:00'); +INSERT INTO `sys_job_log` VALUES (8230, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 07:05:00'); +INSERT INTO `sys_job_log` VALUES (8231, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 07:06:00'); +INSERT INTO `sys_job_log` VALUES (8232, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:14毫秒', '0', '', '2025-01-09 07:06:00'); +INSERT INTO `sys_job_log` VALUES (8233, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 07:07:00'); +INSERT INTO `sys_job_log` VALUES (8234, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 07:08:00'); +INSERT INTO `sys_job_log` VALUES (8235, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:14毫秒', '0', '', '2025-01-09 07:08:00'); +INSERT INTO `sys_job_log` VALUES (8236, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 07:09:00'); +INSERT INTO `sys_job_log` VALUES (8237, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 07:10:00'); +INSERT INTO `sys_job_log` VALUES (8238, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-09 07:10:00'); +INSERT INTO `sys_job_log` VALUES (8239, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 07:11:00'); +INSERT INTO `sys_job_log` VALUES (8240, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 07:12:00'); +INSERT INTO `sys_job_log` VALUES (8241, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-09 07:12:00'); +INSERT INTO `sys_job_log` VALUES (8242, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 07:13:00'); +INSERT INTO `sys_job_log` VALUES (8243, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 07:14:00'); +INSERT INTO `sys_job_log` VALUES (8244, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:12毫秒', '0', '', '2025-01-09 07:14:00'); +INSERT INTO `sys_job_log` VALUES (8245, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 07:15:00'); +INSERT INTO `sys_job_log` VALUES (8246, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 07:16:00'); +INSERT INTO `sys_job_log` VALUES (8247, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:12毫秒', '0', '', '2025-01-09 07:16:00'); +INSERT INTO `sys_job_log` VALUES (8248, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 07:17:00'); +INSERT INTO `sys_job_log` VALUES (8249, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 07:18:00'); +INSERT INTO `sys_job_log` VALUES (8250, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:12毫秒', '0', '', '2025-01-09 07:18:00'); +INSERT INTO `sys_job_log` VALUES (8251, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 07:19:00'); +INSERT INTO `sys_job_log` VALUES (8252, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 07:20:00'); +INSERT INTO `sys_job_log` VALUES (8253, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:14毫秒', '0', '', '2025-01-09 07:20:00'); +INSERT INTO `sys_job_log` VALUES (8254, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 07:21:00'); +INSERT INTO `sys_job_log` VALUES (8255, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 07:22:00'); +INSERT INTO `sys_job_log` VALUES (8256, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:12毫秒', '0', '', '2025-01-09 07:22:00'); +INSERT INTO `sys_job_log` VALUES (8257, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 07:23:00'); +INSERT INTO `sys_job_log` VALUES (8258, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 07:24:00'); +INSERT INTO `sys_job_log` VALUES (8259, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:12毫秒', '0', '', '2025-01-09 07:24:00'); +INSERT INTO `sys_job_log` VALUES (8260, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 07:25:00'); +INSERT INTO `sys_job_log` VALUES (8261, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 07:26:00'); +INSERT INTO `sys_job_log` VALUES (8262, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:12毫秒', '0', '', '2025-01-09 07:26:00'); +INSERT INTO `sys_job_log` VALUES (8263, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 07:27:00'); +INSERT INTO `sys_job_log` VALUES (8264, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 07:28:00'); +INSERT INTO `sys_job_log` VALUES (8265, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:14毫秒', '0', '', '2025-01-09 07:28:00'); +INSERT INTO `sys_job_log` VALUES (8266, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 07:29:00'); +INSERT INTO `sys_job_log` VALUES (8267, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 07:30:00'); +INSERT INTO `sys_job_log` VALUES (8268, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:12毫秒', '0', '', '2025-01-09 07:30:00'); +INSERT INTO `sys_job_log` VALUES (8269, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 07:31:00'); +INSERT INTO `sys_job_log` VALUES (8270, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 07:32:00'); +INSERT INTO `sys_job_log` VALUES (8271, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:12毫秒', '0', '', '2025-01-09 07:32:00'); +INSERT INTO `sys_job_log` VALUES (8272, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 07:33:00'); +INSERT INTO `sys_job_log` VALUES (8273, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:13毫秒', '0', '', '2025-01-09 07:34:00'); +INSERT INTO `sys_job_log` VALUES (8274, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:23毫秒', '0', '', '2025-01-09 07:34:00'); +INSERT INTO `sys_job_log` VALUES (8275, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 07:35:00'); +INSERT INTO `sys_job_log` VALUES (8276, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 07:36:00'); +INSERT INTO `sys_job_log` VALUES (8277, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-09 07:36:00'); +INSERT INTO `sys_job_log` VALUES (8278, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 07:37:00'); +INSERT INTO `sys_job_log` VALUES (8279, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 07:38:00'); +INSERT INTO `sys_job_log` VALUES (8280, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:12毫秒', '0', '', '2025-01-09 07:38:00'); +INSERT INTO `sys_job_log` VALUES (8281, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 07:39:00'); +INSERT INTO `sys_job_log` VALUES (8282, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 07:40:00'); +INSERT INTO `sys_job_log` VALUES (8283, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-09 07:40:00'); +INSERT INTO `sys_job_log` VALUES (8284, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 07:41:00'); +INSERT INTO `sys_job_log` VALUES (8285, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 07:42:00'); +INSERT INTO `sys_job_log` VALUES (8286, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-09 07:42:00'); +INSERT INTO `sys_job_log` VALUES (8287, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 07:43:00'); +INSERT INTO `sys_job_log` VALUES (8288, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 07:44:00'); +INSERT INTO `sys_job_log` VALUES (8289, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-09 07:44:00'); +INSERT INTO `sys_job_log` VALUES (8290, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 07:45:00'); +INSERT INTO `sys_job_log` VALUES (8291, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 07:46:00'); +INSERT INTO `sys_job_log` VALUES (8292, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-09 07:46:00'); +INSERT INTO `sys_job_log` VALUES (8293, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 07:47:00'); +INSERT INTO `sys_job_log` VALUES (8294, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 07:48:00'); +INSERT INTO `sys_job_log` VALUES (8295, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:12毫秒', '0', '', '2025-01-09 07:48:00'); +INSERT INTO `sys_job_log` VALUES (8296, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 07:49:00'); +INSERT INTO `sys_job_log` VALUES (8297, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 07:50:00'); +INSERT INTO `sys_job_log` VALUES (8298, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-09 07:50:00'); +INSERT INTO `sys_job_log` VALUES (8299, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 07:51:00'); +INSERT INTO `sys_job_log` VALUES (8300, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 07:52:00'); +INSERT INTO `sys_job_log` VALUES (8301, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-09 07:52:00'); +INSERT INTO `sys_job_log` VALUES (8302, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 07:53:00'); +INSERT INTO `sys_job_log` VALUES (8303, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 07:54:00'); +INSERT INTO `sys_job_log` VALUES (8304, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-09 07:54:00'); +INSERT INTO `sys_job_log` VALUES (8305, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 07:55:00'); +INSERT INTO `sys_job_log` VALUES (8306, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 07:56:00'); +INSERT INTO `sys_job_log` VALUES (8307, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:12毫秒', '0', '', '2025-01-09 07:56:00'); +INSERT INTO `sys_job_log` VALUES (8308, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 07:57:00'); +INSERT INTO `sys_job_log` VALUES (8309, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 07:58:00'); +INSERT INTO `sys_job_log` VALUES (8310, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-09 07:58:00'); +INSERT INTO `sys_job_log` VALUES (8311, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 07:59:00'); +INSERT INTO `sys_job_log` VALUES (8312, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 08:00:00'); +INSERT INTO `sys_job_log` VALUES (8313, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:12毫秒', '0', '', '2025-01-09 08:00:00'); +INSERT INTO `sys_job_log` VALUES (8314, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 08:01:00'); +INSERT INTO `sys_job_log` VALUES (8315, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 08:02:00'); +INSERT INTO `sys_job_log` VALUES (8316, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:21毫秒', '0', '', '2025-01-09 08:02:00'); +INSERT INTO `sys_job_log` VALUES (8317, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 08:03:00'); +INSERT INTO `sys_job_log` VALUES (8318, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 08:04:00'); +INSERT INTO `sys_job_log` VALUES (8319, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:15毫秒', '0', '', '2025-01-09 08:04:00'); +INSERT INTO `sys_job_log` VALUES (8320, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 08:05:00'); +INSERT INTO `sys_job_log` VALUES (8321, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 08:06:00'); +INSERT INTO `sys_job_log` VALUES (8322, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:14毫秒', '0', '', '2025-01-09 08:06:00'); +INSERT INTO `sys_job_log` VALUES (8323, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 08:07:00'); +INSERT INTO `sys_job_log` VALUES (8324, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 08:08:00'); +INSERT INTO `sys_job_log` VALUES (8325, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-09 08:08:00'); +INSERT INTO `sys_job_log` VALUES (8326, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 08:09:00'); +INSERT INTO `sys_job_log` VALUES (8327, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 08:10:00'); +INSERT INTO `sys_job_log` VALUES (8328, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-09 08:10:00'); +INSERT INTO `sys_job_log` VALUES (8329, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 08:11:00'); +INSERT INTO `sys_job_log` VALUES (8330, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 08:12:00'); +INSERT INTO `sys_job_log` VALUES (8331, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:15毫秒', '0', '', '2025-01-09 08:12:00'); +INSERT INTO `sys_job_log` VALUES (8332, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 08:13:00'); +INSERT INTO `sys_job_log` VALUES (8333, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 08:14:00'); +INSERT INTO `sys_job_log` VALUES (8334, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-09 08:14:00'); +INSERT INTO `sys_job_log` VALUES (8335, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 08:15:00'); +INSERT INTO `sys_job_log` VALUES (8336, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 08:16:00'); +INSERT INTO `sys_job_log` VALUES (8337, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-09 08:16:00'); +INSERT INTO `sys_job_log` VALUES (8338, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 08:17:00'); +INSERT INTO `sys_job_log` VALUES (8339, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 08:18:00'); +INSERT INTO `sys_job_log` VALUES (8340, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:12毫秒', '0', '', '2025-01-09 08:18:00'); +INSERT INTO `sys_job_log` VALUES (8341, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 08:19:00'); +INSERT INTO `sys_job_log` VALUES (8342, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 08:20:00'); +INSERT INTO `sys_job_log` VALUES (8343, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:14毫秒', '0', '', '2025-01-09 08:20:00'); +INSERT INTO `sys_job_log` VALUES (8344, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 08:21:00'); +INSERT INTO `sys_job_log` VALUES (8345, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 08:22:00'); +INSERT INTO `sys_job_log` VALUES (8346, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:12毫秒', '0', '', '2025-01-09 08:22:00'); +INSERT INTO `sys_job_log` VALUES (8347, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 08:23:00'); +INSERT INTO `sys_job_log` VALUES (8348, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 08:24:00'); +INSERT INTO `sys_job_log` VALUES (8349, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-09 08:24:00'); +INSERT INTO `sys_job_log` VALUES (8350, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 08:25:00'); +INSERT INTO `sys_job_log` VALUES (8351, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 08:26:00'); +INSERT INTO `sys_job_log` VALUES (8352, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:12毫秒', '0', '', '2025-01-09 08:26:00'); +INSERT INTO `sys_job_log` VALUES (8353, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 08:27:00'); +INSERT INTO `sys_job_log` VALUES (8354, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 08:28:00'); +INSERT INTO `sys_job_log` VALUES (8355, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:14毫秒', '0', '', '2025-01-09 08:28:00'); +INSERT INTO `sys_job_log` VALUES (8356, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 08:29:00'); +INSERT INTO `sys_job_log` VALUES (8357, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 08:30:00'); +INSERT INTO `sys_job_log` VALUES (8358, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:12毫秒', '0', '', '2025-01-09 08:30:00'); +INSERT INTO `sys_job_log` VALUES (8359, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 08:31:00'); +INSERT INTO `sys_job_log` VALUES (8360, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 08:32:00'); +INSERT INTO `sys_job_log` VALUES (8361, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-09 08:32:00'); +INSERT INTO `sys_job_log` VALUES (8362, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 08:33:00'); +INSERT INTO `sys_job_log` VALUES (8363, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 08:34:00'); +INSERT INTO `sys_job_log` VALUES (8364, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:12毫秒', '0', '', '2025-01-09 08:34:00'); +INSERT INTO `sys_job_log` VALUES (8365, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 08:35:00'); +INSERT INTO `sys_job_log` VALUES (8366, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 08:36:00'); +INSERT INTO `sys_job_log` VALUES (8367, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:14毫秒', '0', '', '2025-01-09 08:36:00'); +INSERT INTO `sys_job_log` VALUES (8368, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 08:37:00'); +INSERT INTO `sys_job_log` VALUES (8369, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 08:38:00'); +INSERT INTO `sys_job_log` VALUES (8370, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:12毫秒', '0', '', '2025-01-09 08:38:00'); +INSERT INTO `sys_job_log` VALUES (8371, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 08:39:00'); +INSERT INTO `sys_job_log` VALUES (8372, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 08:40:00'); +INSERT INTO `sys_job_log` VALUES (8373, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:15毫秒', '0', '', '2025-01-09 08:40:00'); +INSERT INTO `sys_job_log` VALUES (8374, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 08:41:00'); +INSERT INTO `sys_job_log` VALUES (8375, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 08:42:00'); +INSERT INTO `sys_job_log` VALUES (8376, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:12毫秒', '0', '', '2025-01-09 08:42:00'); +INSERT INTO `sys_job_log` VALUES (8377, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 08:43:00'); +INSERT INTO `sys_job_log` VALUES (8378, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 08:44:00'); +INSERT INTO `sys_job_log` VALUES (8379, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-09 08:44:00'); +INSERT INTO `sys_job_log` VALUES (8380, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 08:45:00'); +INSERT INTO `sys_job_log` VALUES (8381, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 08:46:00'); +INSERT INTO `sys_job_log` VALUES (8382, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-09 08:46:00'); +INSERT INTO `sys_job_log` VALUES (8383, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 08:47:00'); +INSERT INTO `sys_job_log` VALUES (8384, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 08:48:00'); +INSERT INTO `sys_job_log` VALUES (8385, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-09 08:48:00'); +INSERT INTO `sys_job_log` VALUES (8386, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 08:49:00'); +INSERT INTO `sys_job_log` VALUES (8387, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 08:50:00'); +INSERT INTO `sys_job_log` VALUES (8388, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:14毫秒', '0', '', '2025-01-09 08:50:00'); +INSERT INTO `sys_job_log` VALUES (8389, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 08:51:00'); +INSERT INTO `sys_job_log` VALUES (8390, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 08:52:00'); +INSERT INTO `sys_job_log` VALUES (8391, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-09 08:52:00'); +INSERT INTO `sys_job_log` VALUES (8392, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 08:53:00'); +INSERT INTO `sys_job_log` VALUES (8393, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 08:54:00'); +INSERT INTO `sys_job_log` VALUES (8394, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-09 08:54:00'); +INSERT INTO `sys_job_log` VALUES (8395, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 08:55:00'); +INSERT INTO `sys_job_log` VALUES (8396, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 08:56:00'); +INSERT INTO `sys_job_log` VALUES (8397, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-09 08:56:00'); +INSERT INTO `sys_job_log` VALUES (8398, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 08:57:00'); +INSERT INTO `sys_job_log` VALUES (8399, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 08:58:00'); +INSERT INTO `sys_job_log` VALUES (8400, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:12毫秒', '0', '', '2025-01-09 08:58:00'); +INSERT INTO `sys_job_log` VALUES (8401, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 08:59:00'); +INSERT INTO `sys_job_log` VALUES (8402, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 09:00:00'); +INSERT INTO `sys_job_log` VALUES (8403, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-09 09:00:00'); +INSERT INTO `sys_job_log` VALUES (8404, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 09:01:00'); +INSERT INTO `sys_job_log` VALUES (8405, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 09:02:00'); +INSERT INTO `sys_job_log` VALUES (8406, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:12毫秒', '0', '', '2025-01-09 09:02:00'); +INSERT INTO `sys_job_log` VALUES (8407, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 09:03:00'); +INSERT INTO `sys_job_log` VALUES (8408, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 09:04:00'); +INSERT INTO `sys_job_log` VALUES (8409, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:12毫秒', '0', '', '2025-01-09 09:04:00'); +INSERT INTO `sys_job_log` VALUES (8410, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 09:05:00'); +INSERT INTO `sys_job_log` VALUES (8411, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 09:06:00'); +INSERT INTO `sys_job_log` VALUES (8412, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-09 09:06:00'); +INSERT INTO `sys_job_log` VALUES (8413, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 09:07:00'); +INSERT INTO `sys_job_log` VALUES (8414, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 09:08:00'); +INSERT INTO `sys_job_log` VALUES (8415, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:14毫秒', '0', '', '2025-01-09 09:08:00'); +INSERT INTO `sys_job_log` VALUES (8416, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 09:09:00'); +INSERT INTO `sys_job_log` VALUES (8417, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 09:10:00'); +INSERT INTO `sys_job_log` VALUES (8418, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-09 09:10:00'); +INSERT INTO `sys_job_log` VALUES (8419, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 09:11:00'); +INSERT INTO `sys_job_log` VALUES (8420, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 09:12:00'); +INSERT INTO `sys_job_log` VALUES (8421, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-09 09:12:00'); +INSERT INTO `sys_job_log` VALUES (8422, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 09:13:00'); +INSERT INTO `sys_job_log` VALUES (8423, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 09:14:00'); +INSERT INTO `sys_job_log` VALUES (8424, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:14毫秒', '0', '', '2025-01-09 09:14:00'); +INSERT INTO `sys_job_log` VALUES (8425, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 09:15:00'); +INSERT INTO `sys_job_log` VALUES (8426, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 09:16:00'); +INSERT INTO `sys_job_log` VALUES (8427, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-09 09:16:00'); +INSERT INTO `sys_job_log` VALUES (8428, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 09:17:00'); +INSERT INTO `sys_job_log` VALUES (8429, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 09:18:00'); +INSERT INTO `sys_job_log` VALUES (8430, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-09 09:18:00'); +INSERT INTO `sys_job_log` VALUES (8431, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 09:19:00'); +INSERT INTO `sys_job_log` VALUES (8432, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 09:20:00'); +INSERT INTO `sys_job_log` VALUES (8433, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-09 09:20:00'); +INSERT INTO `sys_job_log` VALUES (8434, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 09:21:00'); +INSERT INTO `sys_job_log` VALUES (8435, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 09:22:00'); +INSERT INTO `sys_job_log` VALUES (8436, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-09 09:22:00'); +INSERT INTO `sys_job_log` VALUES (8437, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 09:23:00'); +INSERT INTO `sys_job_log` VALUES (8438, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 09:24:00'); +INSERT INTO `sys_job_log` VALUES (8439, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-09 09:24:00'); +INSERT INTO `sys_job_log` VALUES (8440, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 09:25:00'); +INSERT INTO `sys_job_log` VALUES (8441, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 09:26:00'); +INSERT INTO `sys_job_log` VALUES (8442, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:12毫秒', '0', '', '2025-01-09 09:26:00'); +INSERT INTO `sys_job_log` VALUES (8443, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 09:27:00'); +INSERT INTO `sys_job_log` VALUES (8444, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 09:28:00'); +INSERT INTO `sys_job_log` VALUES (8445, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:12毫秒', '0', '', '2025-01-09 09:28:00'); +INSERT INTO `sys_job_log` VALUES (8446, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 09:29:00'); +INSERT INTO `sys_job_log` VALUES (8447, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 09:30:00'); +INSERT INTO `sys_job_log` VALUES (8448, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-09 09:30:00'); +INSERT INTO `sys_job_log` VALUES (8449, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 09:31:00'); +INSERT INTO `sys_job_log` VALUES (8450, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 09:32:00'); +INSERT INTO `sys_job_log` VALUES (8451, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-09 09:32:00'); +INSERT INTO `sys_job_log` VALUES (8452, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 09:33:00'); +INSERT INTO `sys_job_log` VALUES (8453, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 09:34:00'); +INSERT INTO `sys_job_log` VALUES (8454, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:16毫秒', '0', '', '2025-01-09 09:34:00'); +INSERT INTO `sys_job_log` VALUES (8455, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 09:35:00'); +INSERT INTO `sys_job_log` VALUES (8456, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 09:36:00'); +INSERT INTO `sys_job_log` VALUES (8457, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:12毫秒', '0', '', '2025-01-09 09:36:00'); +INSERT INTO `sys_job_log` VALUES (8458, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 09:37:00'); +INSERT INTO `sys_job_log` VALUES (8459, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 09:38:00'); +INSERT INTO `sys_job_log` VALUES (8460, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-09 09:38:00'); +INSERT INTO `sys_job_log` VALUES (8461, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 09:39:00'); +INSERT INTO `sys_job_log` VALUES (8462, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 09:40:00'); +INSERT INTO `sys_job_log` VALUES (8463, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-09 09:40:00'); +INSERT INTO `sys_job_log` VALUES (8464, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 09:41:00'); +INSERT INTO `sys_job_log` VALUES (8465, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 09:42:00'); +INSERT INTO `sys_job_log` VALUES (8466, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:14毫秒', '0', '', '2025-01-09 09:42:00'); +INSERT INTO `sys_job_log` VALUES (8467, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 09:43:00'); +INSERT INTO `sys_job_log` VALUES (8468, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 09:44:00'); +INSERT INTO `sys_job_log` VALUES (8469, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-09 09:44:00'); +INSERT INTO `sys_job_log` VALUES (8470, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 09:45:00'); +INSERT INTO `sys_job_log` VALUES (8471, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 09:46:00'); +INSERT INTO `sys_job_log` VALUES (8472, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-09 09:46:00'); +INSERT INTO `sys_job_log` VALUES (8473, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 09:47:00'); +INSERT INTO `sys_job_log` VALUES (8474, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 09:48:00'); +INSERT INTO `sys_job_log` VALUES (8475, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:12毫秒', '0', '', '2025-01-09 09:48:00'); +INSERT INTO `sys_job_log` VALUES (8476, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 09:49:00'); +INSERT INTO `sys_job_log` VALUES (8477, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 09:50:00'); +INSERT INTO `sys_job_log` VALUES (8478, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:14毫秒', '0', '', '2025-01-09 09:50:00'); +INSERT INTO `sys_job_log` VALUES (8479, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 09:51:00'); +INSERT INTO `sys_job_log` VALUES (8480, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 09:52:00'); +INSERT INTO `sys_job_log` VALUES (8481, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:12毫秒', '0', '', '2025-01-09 09:52:00'); +INSERT INTO `sys_job_log` VALUES (8482, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 09:53:00'); +INSERT INTO `sys_job_log` VALUES (8483, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 09:54:00'); +INSERT INTO `sys_job_log` VALUES (8484, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:15毫秒', '0', '', '2025-01-09 09:54:00'); +INSERT INTO `sys_job_log` VALUES (8485, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 09:55:00'); +INSERT INTO `sys_job_log` VALUES (8486, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 09:56:00'); +INSERT INTO `sys_job_log` VALUES (8487, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-09 09:56:00'); +INSERT INTO `sys_job_log` VALUES (8488, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 09:57:00'); +INSERT INTO `sys_job_log` VALUES (8489, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 09:58:00'); +INSERT INTO `sys_job_log` VALUES (8490, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-09 09:58:00'); +INSERT INTO `sys_job_log` VALUES (8491, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 09:59:00'); +INSERT INTO `sys_job_log` VALUES (8492, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 10:00:00'); +INSERT INTO `sys_job_log` VALUES (8493, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-09 10:00:00'); +INSERT INTO `sys_job_log` VALUES (8494, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 10:01:00'); +INSERT INTO `sys_job_log` VALUES (8495, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 10:02:00'); +INSERT INTO `sys_job_log` VALUES (8496, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-09 10:02:00'); +INSERT INTO `sys_job_log` VALUES (8497, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 10:03:00'); +INSERT INTO `sys_job_log` VALUES (8498, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 10:04:00'); +INSERT INTO `sys_job_log` VALUES (8499, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-09 10:04:00'); +INSERT INTO `sys_job_log` VALUES (8500, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 10:05:00'); +INSERT INTO `sys_job_log` VALUES (8501, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 10:06:00'); +INSERT INTO `sys_job_log` VALUES (8502, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:12毫秒', '0', '', '2025-01-09 10:06:00'); +INSERT INTO `sys_job_log` VALUES (8503, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 10:07:00'); +INSERT INTO `sys_job_log` VALUES (8504, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 10:08:00'); +INSERT INTO `sys_job_log` VALUES (8505, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-09 10:08:00'); +INSERT INTO `sys_job_log` VALUES (8506, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 10:09:00'); +INSERT INTO `sys_job_log` VALUES (8507, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 10:10:00'); +INSERT INTO `sys_job_log` VALUES (8508, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-09 10:10:00'); +INSERT INTO `sys_job_log` VALUES (8509, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 10:11:00'); +INSERT INTO `sys_job_log` VALUES (8510, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 10:12:00'); +INSERT INTO `sys_job_log` VALUES (8511, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-09 10:12:00'); +INSERT INTO `sys_job_log` VALUES (8512, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 10:13:00'); +INSERT INTO `sys_job_log` VALUES (8513, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 10:14:00'); +INSERT INTO `sys_job_log` VALUES (8514, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:12毫秒', '0', '', '2025-01-09 10:14:00'); +INSERT INTO `sys_job_log` VALUES (8515, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 10:15:00'); +INSERT INTO `sys_job_log` VALUES (8516, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 10:16:00'); +INSERT INTO `sys_job_log` VALUES (8517, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:12毫秒', '0', '', '2025-01-09 10:16:00'); +INSERT INTO `sys_job_log` VALUES (8518, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 10:17:00'); +INSERT INTO `sys_job_log` VALUES (8519, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 10:18:00'); +INSERT INTO `sys_job_log` VALUES (8520, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-09 10:18:00'); +INSERT INTO `sys_job_log` VALUES (8521, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 10:19:00'); +INSERT INTO `sys_job_log` VALUES (8522, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 10:20:00'); +INSERT INTO `sys_job_log` VALUES (8523, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-09 10:20:00'); +INSERT INTO `sys_job_log` VALUES (8524, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 10:21:00'); +INSERT INTO `sys_job_log` VALUES (8525, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 10:22:00'); +INSERT INTO `sys_job_log` VALUES (8526, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:14毫秒', '0', '', '2025-01-09 10:22:00'); +INSERT INTO `sys_job_log` VALUES (8527, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 10:23:00'); +INSERT INTO `sys_job_log` VALUES (8528, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 10:24:00'); +INSERT INTO `sys_job_log` VALUES (8529, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-09 10:24:00'); +INSERT INTO `sys_job_log` VALUES (8530, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 10:25:00'); +INSERT INTO `sys_job_log` VALUES (8531, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 10:26:00'); +INSERT INTO `sys_job_log` VALUES (8532, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-09 10:26:00'); +INSERT INTO `sys_job_log` VALUES (8533, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 10:27:00'); +INSERT INTO `sys_job_log` VALUES (8534, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 10:28:00'); +INSERT INTO `sys_job_log` VALUES (8535, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-09 10:28:00'); +INSERT INTO `sys_job_log` VALUES (8536, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 10:29:00'); +INSERT INTO `sys_job_log` VALUES (8537, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 10:30:00'); +INSERT INTO `sys_job_log` VALUES (8538, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-09 10:30:00'); +INSERT INTO `sys_job_log` VALUES (8539, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 10:31:00'); +INSERT INTO `sys_job_log` VALUES (8540, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 10:32:00'); +INSERT INTO `sys_job_log` VALUES (8541, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-09 10:32:00'); +INSERT INTO `sys_job_log` VALUES (8542, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 10:33:00'); +INSERT INTO `sys_job_log` VALUES (8543, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 10:34:00'); +INSERT INTO `sys_job_log` VALUES (8544, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:12毫秒', '0', '', '2025-01-09 10:34:00'); +INSERT INTO `sys_job_log` VALUES (8545, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 10:35:00'); +INSERT INTO `sys_job_log` VALUES (8546, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 10:36:00'); +INSERT INTO `sys_job_log` VALUES (8547, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:12毫秒', '0', '', '2025-01-09 10:36:00'); +INSERT INTO `sys_job_log` VALUES (8548, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 10:37:00'); +INSERT INTO `sys_job_log` VALUES (8549, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 10:38:00'); +INSERT INTO `sys_job_log` VALUES (8550, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-09 10:38:00'); +INSERT INTO `sys_job_log` VALUES (8551, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 10:39:00'); +INSERT INTO `sys_job_log` VALUES (8552, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 10:40:00'); +INSERT INTO `sys_job_log` VALUES (8553, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:12毫秒', '0', '', '2025-01-09 10:40:00'); +INSERT INTO `sys_job_log` VALUES (8554, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 10:41:00'); +INSERT INTO `sys_job_log` VALUES (8555, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 10:42:00'); +INSERT INTO `sys_job_log` VALUES (8556, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-09 10:42:00'); +INSERT INTO `sys_job_log` VALUES (8557, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 10:43:00'); +INSERT INTO `sys_job_log` VALUES (8558, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 10:44:00'); +INSERT INTO `sys_job_log` VALUES (8559, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:12毫秒', '0', '', '2025-01-09 10:44:00'); +INSERT INTO `sys_job_log` VALUES (8560, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 10:45:00'); +INSERT INTO `sys_job_log` VALUES (8561, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 10:46:00'); +INSERT INTO `sys_job_log` VALUES (8562, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-09 10:46:00'); +INSERT INTO `sys_job_log` VALUES (8563, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 10:47:00'); +INSERT INTO `sys_job_log` VALUES (8564, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 10:48:00'); +INSERT INTO `sys_job_log` VALUES (8565, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:12毫秒', '0', '', '2025-01-09 10:48:00'); +INSERT INTO `sys_job_log` VALUES (8566, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 10:49:00'); +INSERT INTO `sys_job_log` VALUES (8567, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 10:50:00'); +INSERT INTO `sys_job_log` VALUES (8568, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-09 10:50:00'); +INSERT INTO `sys_job_log` VALUES (8569, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 10:51:00'); +INSERT INTO `sys_job_log` VALUES (8570, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 10:52:00'); +INSERT INTO `sys_job_log` VALUES (8571, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-09 10:52:00'); +INSERT INTO `sys_job_log` VALUES (8572, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 10:53:00'); +INSERT INTO `sys_job_log` VALUES (8573, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 10:54:00'); +INSERT INTO `sys_job_log` VALUES (8574, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:14毫秒', '0', '', '2025-01-09 10:54:00'); +INSERT INTO `sys_job_log` VALUES (8575, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 10:55:00'); +INSERT INTO `sys_job_log` VALUES (8576, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 10:56:00'); +INSERT INTO `sys_job_log` VALUES (8577, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:20毫秒', '0', '', '2025-01-09 10:56:00'); +INSERT INTO `sys_job_log` VALUES (8578, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 10:57:00'); +INSERT INTO `sys_job_log` VALUES (8579, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 10:58:00'); +INSERT INTO `sys_job_log` VALUES (8580, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:14毫秒', '0', '', '2025-01-09 10:58:00'); +INSERT INTO `sys_job_log` VALUES (8581, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 10:59:00'); +INSERT INTO `sys_job_log` VALUES (8582, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 11:00:00'); +INSERT INTO `sys_job_log` VALUES (8583, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:12毫秒', '0', '', '2025-01-09 11:00:00'); +INSERT INTO `sys_job_log` VALUES (8584, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 11:01:00'); +INSERT INTO `sys_job_log` VALUES (8585, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 11:02:00'); +INSERT INTO `sys_job_log` VALUES (8586, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-09 11:02:00'); +INSERT INTO `sys_job_log` VALUES (8587, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 11:03:00'); +INSERT INTO `sys_job_log` VALUES (8588, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 11:04:00'); +INSERT INTO `sys_job_log` VALUES (8589, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-09 11:04:00'); +INSERT INTO `sys_job_log` VALUES (8590, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 11:05:00'); +INSERT INTO `sys_job_log` VALUES (8591, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 11:06:00'); +INSERT INTO `sys_job_log` VALUES (8592, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:12毫秒', '0', '', '2025-01-09 11:06:00'); +INSERT INTO `sys_job_log` VALUES (8593, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 11:07:00'); +INSERT INTO `sys_job_log` VALUES (8594, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 11:08:00'); +INSERT INTO `sys_job_log` VALUES (8595, 'P', 'DEFAULT', '★温湿度开关', 'P 总共耗时:2毫秒', '0', '', '2025-01-09 11:08:00'); +INSERT INTO `sys_job_log` VALUES (8596, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:18毫秒', '0', '', '2025-01-09 11:08:00'); +INSERT INTO `sys_job_log` VALUES (8597, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 11:09:00'); +INSERT INTO `sys_job_log` VALUES (8598, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:4毫秒', '0', '', '2025-01-09 11:10:00'); +INSERT INTO `sys_job_log` VALUES (8599, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:16毫秒', '0', '', '2025-01-09 11:10:00'); +INSERT INTO `sys_job_log` VALUES (8600, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 11:11:00'); +INSERT INTO `sys_job_log` VALUES (8601, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 11:12:00'); +INSERT INTO `sys_job_log` VALUES (8602, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-09 11:12:00'); +INSERT INTO `sys_job_log` VALUES (8603, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 11:13:00'); +INSERT INTO `sys_job_log` VALUES (8604, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 11:14:00'); +INSERT INTO `sys_job_log` VALUES (8605, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-09 11:14:00'); +INSERT INTO `sys_job_log` VALUES (8606, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 11:15:00'); +INSERT INTO `sys_job_log` VALUES (8607, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 11:16:00'); +INSERT INTO `sys_job_log` VALUES (8608, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:15毫秒', '0', '', '2025-01-09 11:16:00'); +INSERT INTO `sys_job_log` VALUES (8609, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 11:17:00'); +INSERT INTO `sys_job_log` VALUES (8610, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 11:18:00'); +INSERT INTO `sys_job_log` VALUES (8611, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:17毫秒', '0', '', '2025-01-09 11:18:00'); +INSERT INTO `sys_job_log` VALUES (8612, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 11:19:00'); +INSERT INTO `sys_job_log` VALUES (8613, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 11:20:00'); +INSERT INTO `sys_job_log` VALUES (8614, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:16毫秒', '0', '', '2025-01-09 11:20:00'); +INSERT INTO `sys_job_log` VALUES (8615, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 11:21:00'); +INSERT INTO `sys_job_log` VALUES (8616, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 11:22:00'); +INSERT INTO `sys_job_log` VALUES (8617, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:15毫秒', '0', '', '2025-01-09 11:22:00'); +INSERT INTO `sys_job_log` VALUES (8618, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 11:23:00'); +INSERT INTO `sys_job_log` VALUES (8619, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 11:24:00'); +INSERT INTO `sys_job_log` VALUES (8620, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:23毫秒', '0', '', '2025-01-09 11:24:00'); +INSERT INTO `sys_job_log` VALUES (8621, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 11:25:00'); +INSERT INTO `sys_job_log` VALUES (8622, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 11:26:00'); +INSERT INTO `sys_job_log` VALUES (8623, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-09 11:26:00'); +INSERT INTO `sys_job_log` VALUES (8624, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 11:27:00'); +INSERT INTO `sys_job_log` VALUES (8625, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 11:28:00'); +INSERT INTO `sys_job_log` VALUES (8626, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-09 11:28:00'); +INSERT INTO `sys_job_log` VALUES (8627, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 11:29:00'); +INSERT INTO `sys_job_log` VALUES (8628, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 11:30:00'); +INSERT INTO `sys_job_log` VALUES (8629, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:14毫秒', '0', '', '2025-01-09 11:30:00'); +INSERT INTO `sys_job_log` VALUES (8630, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 11:31:00'); +INSERT INTO `sys_job_log` VALUES (8631, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 11:32:00'); +INSERT INTO `sys_job_log` VALUES (8632, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:12毫秒', '0', '', '2025-01-09 11:32:00'); +INSERT INTO `sys_job_log` VALUES (8633, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 11:33:00'); +INSERT INTO `sys_job_log` VALUES (8634, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 11:34:00'); +INSERT INTO `sys_job_log` VALUES (8635, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:12毫秒', '0', '', '2025-01-09 11:34:00'); +INSERT INTO `sys_job_log` VALUES (8636, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 11:35:00'); +INSERT INTO `sys_job_log` VALUES (8637, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 11:36:00'); +INSERT INTO `sys_job_log` VALUES (8638, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:14毫秒', '0', '', '2025-01-09 11:36:00'); +INSERT INTO `sys_job_log` VALUES (8639, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 11:37:00'); +INSERT INTO `sys_job_log` VALUES (8640, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 11:38:00'); +INSERT INTO `sys_job_log` VALUES (8641, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-09 11:38:00'); +INSERT INTO `sys_job_log` VALUES (8642, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 11:39:00'); +INSERT INTO `sys_job_log` VALUES (8643, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 11:40:00'); +INSERT INTO `sys_job_log` VALUES (8644, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-09 11:40:00'); +INSERT INTO `sys_job_log` VALUES (8645, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 11:41:00'); +INSERT INTO `sys_job_log` VALUES (8646, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 11:42:00'); +INSERT INTO `sys_job_log` VALUES (8647, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-09 11:42:00'); +INSERT INTO `sys_job_log` VALUES (8648, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 11:43:00'); +INSERT INTO `sys_job_log` VALUES (8649, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 11:44:00'); +INSERT INTO `sys_job_log` VALUES (8650, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-09 11:44:00'); +INSERT INTO `sys_job_log` VALUES (8651, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 11:45:00'); +INSERT INTO `sys_job_log` VALUES (8652, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 11:46:00'); +INSERT INTO `sys_job_log` VALUES (8653, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:12毫秒', '0', '', '2025-01-09 11:46:00'); +INSERT INTO `sys_job_log` VALUES (8654, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 11:47:00'); +INSERT INTO `sys_job_log` VALUES (8655, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 11:48:00'); +INSERT INTO `sys_job_log` VALUES (8656, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:12毫秒', '0', '', '2025-01-09 11:48:00'); +INSERT INTO `sys_job_log` VALUES (8657, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 11:49:00'); +INSERT INTO `sys_job_log` VALUES (8658, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 11:50:00'); +INSERT INTO `sys_job_log` VALUES (8659, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-09 11:50:00'); +INSERT INTO `sys_job_log` VALUES (8660, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 11:51:00'); +INSERT INTO `sys_job_log` VALUES (8661, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 11:52:00'); +INSERT INTO `sys_job_log` VALUES (8662, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-09 11:52:00'); +INSERT INTO `sys_job_log` VALUES (8663, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 11:53:00'); +INSERT INTO `sys_job_log` VALUES (8664, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 11:54:00'); +INSERT INTO `sys_job_log` VALUES (8665, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-09 11:54:00'); +INSERT INTO `sys_job_log` VALUES (8666, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 11:55:00'); +INSERT INTO `sys_job_log` VALUES (8667, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 11:56:00'); +INSERT INTO `sys_job_log` VALUES (8668, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-09 11:56:00'); +INSERT INTO `sys_job_log` VALUES (8669, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 11:57:00'); +INSERT INTO `sys_job_log` VALUES (8670, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 11:58:00'); +INSERT INTO `sys_job_log` VALUES (8671, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:14毫秒', '0', '', '2025-01-09 11:58:00'); +INSERT INTO `sys_job_log` VALUES (8672, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 11:59:00'); +INSERT INTO `sys_job_log` VALUES (8673, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 12:00:00'); +INSERT INTO `sys_job_log` VALUES (8674, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-09 12:00:00'); +INSERT INTO `sys_job_log` VALUES (8675, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 12:01:00'); +INSERT INTO `sys_job_log` VALUES (8676, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 12:02:00'); +INSERT INTO `sys_job_log` VALUES (8677, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-09 12:02:00'); +INSERT INTO `sys_job_log` VALUES (8678, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 12:03:00'); +INSERT INTO `sys_job_log` VALUES (8679, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 12:04:00'); +INSERT INTO `sys_job_log` VALUES (8680, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-09 12:04:00'); +INSERT INTO `sys_job_log` VALUES (8681, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 12:05:00'); +INSERT INTO `sys_job_log` VALUES (8682, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 12:06:00'); +INSERT INTO `sys_job_log` VALUES (8683, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:12毫秒', '0', '', '2025-01-09 12:06:00'); +INSERT INTO `sys_job_log` VALUES (8684, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 12:07:00'); +INSERT INTO `sys_job_log` VALUES (8685, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 12:08:00'); +INSERT INTO `sys_job_log` VALUES (8686, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:12毫秒', '0', '', '2025-01-09 12:08:00'); +INSERT INTO `sys_job_log` VALUES (8687, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 12:09:00'); +INSERT INTO `sys_job_log` VALUES (8688, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 12:10:00'); +INSERT INTO `sys_job_log` VALUES (8689, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-09 12:10:00'); +INSERT INTO `sys_job_log` VALUES (8690, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 12:11:00'); +INSERT INTO `sys_job_log` VALUES (8691, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 12:12:00'); +INSERT INTO `sys_job_log` VALUES (8692, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:12毫秒', '0', '', '2025-01-09 12:12:00'); +INSERT INTO `sys_job_log` VALUES (8693, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 12:13:00'); +INSERT INTO `sys_job_log` VALUES (8694, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 12:14:00'); +INSERT INTO `sys_job_log` VALUES (8695, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:12毫秒', '0', '', '2025-01-09 12:14:00'); +INSERT INTO `sys_job_log` VALUES (8696, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 12:15:00'); +INSERT INTO `sys_job_log` VALUES (8697, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 12:16:00'); +INSERT INTO `sys_job_log` VALUES (8698, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:12毫秒', '0', '', '2025-01-09 12:16:00'); +INSERT INTO `sys_job_log` VALUES (8699, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 12:17:00'); +INSERT INTO `sys_job_log` VALUES (8700, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 12:18:00'); +INSERT INTO `sys_job_log` VALUES (8701, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:12毫秒', '0', '', '2025-01-09 12:18:00'); +INSERT INTO `sys_job_log` VALUES (8702, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 12:19:00'); +INSERT INTO `sys_job_log` VALUES (8703, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 12:20:00'); +INSERT INTO `sys_job_log` VALUES (8704, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:12毫秒', '0', '', '2025-01-09 12:20:00'); +INSERT INTO `sys_job_log` VALUES (8705, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 12:21:00'); +INSERT INTO `sys_job_log` VALUES (8706, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 12:22:00'); +INSERT INTO `sys_job_log` VALUES (8707, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-09 12:22:00'); +INSERT INTO `sys_job_log` VALUES (8708, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 12:23:00'); +INSERT INTO `sys_job_log` VALUES (8709, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 12:24:00'); +INSERT INTO `sys_job_log` VALUES (8710, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-09 12:24:00'); +INSERT INTO `sys_job_log` VALUES (8711, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 12:25:00'); +INSERT INTO `sys_job_log` VALUES (8712, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 12:26:00'); +INSERT INTO `sys_job_log` VALUES (8713, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:12毫秒', '0', '', '2025-01-09 12:26:00'); +INSERT INTO `sys_job_log` VALUES (8714, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 12:27:00'); +INSERT INTO `sys_job_log` VALUES (8715, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 12:28:00'); +INSERT INTO `sys_job_log` VALUES (8716, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:20毫秒', '0', '', '2025-01-09 12:28:00'); +INSERT INTO `sys_job_log` VALUES (8717, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 12:29:00'); +INSERT INTO `sys_job_log` VALUES (8718, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 12:30:00'); +INSERT INTO `sys_job_log` VALUES (8719, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:12毫秒', '0', '', '2025-01-09 12:30:00'); +INSERT INTO `sys_job_log` VALUES (8720, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 12:31:00'); +INSERT INTO `sys_job_log` VALUES (8721, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 12:32:00'); +INSERT INTO `sys_job_log` VALUES (8722, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:12毫秒', '0', '', '2025-01-09 12:32:00'); +INSERT INTO `sys_job_log` VALUES (8723, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 12:33:00'); +INSERT INTO `sys_job_log` VALUES (8724, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 12:34:00'); +INSERT INTO `sys_job_log` VALUES (8725, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:12毫秒', '0', '', '2025-01-09 12:34:00'); +INSERT INTO `sys_job_log` VALUES (8726, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 12:35:00'); +INSERT INTO `sys_job_log` VALUES (8727, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 12:36:00'); +INSERT INTO `sys_job_log` VALUES (8728, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:12毫秒', '0', '', '2025-01-09 12:36:00'); +INSERT INTO `sys_job_log` VALUES (8729, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 12:37:00'); +INSERT INTO `sys_job_log` VALUES (8730, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 12:38:00'); +INSERT INTO `sys_job_log` VALUES (8731, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-09 12:38:00'); +INSERT INTO `sys_job_log` VALUES (8732, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 12:39:00'); +INSERT INTO `sys_job_log` VALUES (8733, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 12:40:00'); +INSERT INTO `sys_job_log` VALUES (8734, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:14毫秒', '0', '', '2025-01-09 12:40:00'); +INSERT INTO `sys_job_log` VALUES (8735, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 12:41:00'); +INSERT INTO `sys_job_log` VALUES (8736, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 12:42:00'); +INSERT INTO `sys_job_log` VALUES (8737, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-09 12:42:00'); +INSERT INTO `sys_job_log` VALUES (8738, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 12:43:00'); +INSERT INTO `sys_job_log` VALUES (8739, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 12:44:00'); +INSERT INTO `sys_job_log` VALUES (8740, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:12毫秒', '0', '', '2025-01-09 12:44:00'); +INSERT INTO `sys_job_log` VALUES (8741, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 12:45:00'); +INSERT INTO `sys_job_log` VALUES (8742, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2025-01-09 12:46:00'); +INSERT INTO `sys_job_log` VALUES (8743, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-09 12:46:00'); +INSERT INTO `sys_job_log` VALUES (8744, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 12:47:00'); +INSERT INTO `sys_job_log` VALUES (8745, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 12:48:00'); +INSERT INTO `sys_job_log` VALUES (8746, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-09 12:48:00'); +INSERT INTO `sys_job_log` VALUES (8747, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 12:49:00'); +INSERT INTO `sys_job_log` VALUES (8748, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 12:50:00'); +INSERT INTO `sys_job_log` VALUES (8749, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:14毫秒', '0', '', '2025-01-09 12:50:00'); +INSERT INTO `sys_job_log` VALUES (8750, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 12:51:00'); +INSERT INTO `sys_job_log` VALUES (8751, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 12:52:00'); +INSERT INTO `sys_job_log` VALUES (8752, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-09 12:52:00'); +INSERT INTO `sys_job_log` VALUES (8753, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 12:53:00'); +INSERT INTO `sys_job_log` VALUES (8754, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 12:54:00'); +INSERT INTO `sys_job_log` VALUES (8755, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-09 12:54:00'); +INSERT INTO `sys_job_log` VALUES (8756, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 12:55:00'); +INSERT INTO `sys_job_log` VALUES (8757, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 12:56:00'); +INSERT INTO `sys_job_log` VALUES (8758, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-09 12:56:00'); +INSERT INTO `sys_job_log` VALUES (8759, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 12:57:00'); +INSERT INTO `sys_job_log` VALUES (8760, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 12:58:00'); +INSERT INTO `sys_job_log` VALUES (8761, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:12毫秒', '0', '', '2025-01-09 12:58:00'); +INSERT INTO `sys_job_log` VALUES (8762, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 12:59:00'); +INSERT INTO `sys_job_log` VALUES (8763, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 13:00:00'); +INSERT INTO `sys_job_log` VALUES (8764, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:12毫秒', '0', '', '2025-01-09 13:00:00'); +INSERT INTO `sys_job_log` VALUES (8765, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 13:01:00'); +INSERT INTO `sys_job_log` VALUES (8766, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 13:02:00'); +INSERT INTO `sys_job_log` VALUES (8767, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-09 13:02:00'); +INSERT INTO `sys_job_log` VALUES (8768, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 13:03:00'); +INSERT INTO `sys_job_log` VALUES (8769, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 13:04:00'); +INSERT INTO `sys_job_log` VALUES (8770, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-09 13:04:00'); +INSERT INTO `sys_job_log` VALUES (8771, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 13:05:00'); +INSERT INTO `sys_job_log` VALUES (8772, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 13:06:00'); +INSERT INTO `sys_job_log` VALUES (8773, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-09 13:06:00'); +INSERT INTO `sys_job_log` VALUES (8774, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 13:07:00'); +INSERT INTO `sys_job_log` VALUES (8775, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 13:08:00'); +INSERT INTO `sys_job_log` VALUES (8776, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-09 13:08:00'); +INSERT INTO `sys_job_log` VALUES (8777, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 13:09:00'); +INSERT INTO `sys_job_log` VALUES (8778, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 13:10:00'); +INSERT INTO `sys_job_log` VALUES (8779, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-09 13:10:00'); +INSERT INTO `sys_job_log` VALUES (8780, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 13:11:00'); +INSERT INTO `sys_job_log` VALUES (8781, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 13:12:00'); +INSERT INTO `sys_job_log` VALUES (8782, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:21毫秒', '0', '', '2025-01-09 13:12:00'); +INSERT INTO `sys_job_log` VALUES (8783, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 13:13:00'); +INSERT INTO `sys_job_log` VALUES (8784, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 13:14:00'); +INSERT INTO `sys_job_log` VALUES (8785, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-09 13:14:00'); +INSERT INTO `sys_job_log` VALUES (8786, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 13:15:00'); +INSERT INTO `sys_job_log` VALUES (8787, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 13:16:00'); +INSERT INTO `sys_job_log` VALUES (8788, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-09 13:16:00'); +INSERT INTO `sys_job_log` VALUES (8789, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 13:17:00'); +INSERT INTO `sys_job_log` VALUES (8790, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 13:18:00'); +INSERT INTO `sys_job_log` VALUES (8791, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:12毫秒', '0', '', '2025-01-09 13:18:00'); +INSERT INTO `sys_job_log` VALUES (8792, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 13:19:00'); +INSERT INTO `sys_job_log` VALUES (8793, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 13:20:00'); +INSERT INTO `sys_job_log` VALUES (8794, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-09 13:20:00'); +INSERT INTO `sys_job_log` VALUES (8795, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 13:21:00'); +INSERT INTO `sys_job_log` VALUES (8796, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 13:22:00'); +INSERT INTO `sys_job_log` VALUES (8797, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-09 13:22:00'); +INSERT INTO `sys_job_log` VALUES (8798, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 13:23:00'); +INSERT INTO `sys_job_log` VALUES (8799, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 13:24:00'); +INSERT INTO `sys_job_log` VALUES (8800, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:12毫秒', '0', '', '2025-01-09 13:24:00'); +INSERT INTO `sys_job_log` VALUES (8801, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 13:25:00'); +INSERT INTO `sys_job_log` VALUES (8802, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 13:26:00'); +INSERT INTO `sys_job_log` VALUES (8803, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:12毫秒', '0', '', '2025-01-09 13:26:00'); +INSERT INTO `sys_job_log` VALUES (8804, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 13:27:00'); +INSERT INTO `sys_job_log` VALUES (8805, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 13:28:00'); +INSERT INTO `sys_job_log` VALUES (8806, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:12毫秒', '0', '', '2025-01-09 13:28:00'); +INSERT INTO `sys_job_log` VALUES (8807, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 13:29:00'); +INSERT INTO `sys_job_log` VALUES (8808, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 13:30:00'); +INSERT INTO `sys_job_log` VALUES (8809, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:12毫秒', '0', '', '2025-01-09 13:30:00'); +INSERT INTO `sys_job_log` VALUES (8810, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 13:31:00'); +INSERT INTO `sys_job_log` VALUES (8811, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 13:32:00'); +INSERT INTO `sys_job_log` VALUES (8812, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:12毫秒', '0', '', '2025-01-09 13:32:00'); +INSERT INTO `sys_job_log` VALUES (8813, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 13:33:00'); +INSERT INTO `sys_job_log` VALUES (8814, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 13:34:00'); +INSERT INTO `sys_job_log` VALUES (8815, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-09 13:34:00'); +INSERT INTO `sys_job_log` VALUES (8816, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 13:35:00'); +INSERT INTO `sys_job_log` VALUES (8817, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 13:36:00'); +INSERT INTO `sys_job_log` VALUES (8818, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:12毫秒', '0', '', '2025-01-09 13:36:00'); +INSERT INTO `sys_job_log` VALUES (8819, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 13:37:00'); +INSERT INTO `sys_job_log` VALUES (8820, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 13:38:00'); +INSERT INTO `sys_job_log` VALUES (8821, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-09 13:38:00'); +INSERT INTO `sys_job_log` VALUES (8822, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 13:39:00'); +INSERT INTO `sys_job_log` VALUES (8823, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 13:40:00'); +INSERT INTO `sys_job_log` VALUES (8824, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:14毫秒', '0', '', '2025-01-09 13:40:00'); +INSERT INTO `sys_job_log` VALUES (8825, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 13:41:00'); +INSERT INTO `sys_job_log` VALUES (8826, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 13:42:00'); +INSERT INTO `sys_job_log` VALUES (8827, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-09 13:42:00'); +INSERT INTO `sys_job_log` VALUES (8828, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 13:43:00'); +INSERT INTO `sys_job_log` VALUES (8829, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 13:44:00'); +INSERT INTO `sys_job_log` VALUES (8830, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:12毫秒', '0', '', '2025-01-09 13:44:00'); +INSERT INTO `sys_job_log` VALUES (8831, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 13:45:00'); +INSERT INTO `sys_job_log` VALUES (8832, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 13:46:00'); +INSERT INTO `sys_job_log` VALUES (8833, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-09 13:46:00'); +INSERT INTO `sys_job_log` VALUES (8834, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 13:47:00'); +INSERT INTO `sys_job_log` VALUES (8835, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 13:48:00'); +INSERT INTO `sys_job_log` VALUES (8836, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-09 13:48:00'); +INSERT INTO `sys_job_log` VALUES (8837, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 13:49:00'); +INSERT INTO `sys_job_log` VALUES (8838, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 13:50:00'); +INSERT INTO `sys_job_log` VALUES (8839, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:12毫秒', '0', '', '2025-01-09 13:50:00'); +INSERT INTO `sys_job_log` VALUES (8840, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 13:51:00'); +INSERT INTO `sys_job_log` VALUES (8841, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 13:52:00'); +INSERT INTO `sys_job_log` VALUES (8842, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:12毫秒', '0', '', '2025-01-09 13:52:00'); +INSERT INTO `sys_job_log` VALUES (8843, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 13:53:00'); +INSERT INTO `sys_job_log` VALUES (8844, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 13:54:00'); +INSERT INTO `sys_job_log` VALUES (8845, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-09 13:54:00'); +INSERT INTO `sys_job_log` VALUES (8846, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 13:55:00'); +INSERT INTO `sys_job_log` VALUES (8847, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 13:56:00'); +INSERT INTO `sys_job_log` VALUES (8848, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-09 13:56:00'); +INSERT INTO `sys_job_log` VALUES (8849, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 13:57:00'); +INSERT INTO `sys_job_log` VALUES (8850, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 13:58:00'); +INSERT INTO `sys_job_log` VALUES (8851, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-09 13:58:00'); +INSERT INTO `sys_job_log` VALUES (8852, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 13:59:00'); +INSERT INTO `sys_job_log` VALUES (8853, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 14:00:00'); +INSERT INTO `sys_job_log` VALUES (8854, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-09 14:00:00'); +INSERT INTO `sys_job_log` VALUES (8855, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 14:01:00'); +INSERT INTO `sys_job_log` VALUES (8856, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 14:02:00'); +INSERT INTO `sys_job_log` VALUES (8857, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-09 14:02:00'); +INSERT INTO `sys_job_log` VALUES (8858, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 14:03:00'); +INSERT INTO `sys_job_log` VALUES (8859, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 14:04:00'); +INSERT INTO `sys_job_log` VALUES (8860, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-09 14:04:00'); +INSERT INTO `sys_job_log` VALUES (8861, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 14:05:00'); +INSERT INTO `sys_job_log` VALUES (8862, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 14:06:00'); +INSERT INTO `sys_job_log` VALUES (8863, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:14毫秒', '0', '', '2025-01-09 14:06:00'); +INSERT INTO `sys_job_log` VALUES (8864, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 14:07:00'); +INSERT INTO `sys_job_log` VALUES (8865, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 14:08:00'); +INSERT INTO `sys_job_log` VALUES (8866, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-09 14:08:00'); +INSERT INTO `sys_job_log` VALUES (8867, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 14:09:00'); +INSERT INTO `sys_job_log` VALUES (8868, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 14:10:00'); +INSERT INTO `sys_job_log` VALUES (8869, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:12毫秒', '0', '', '2025-01-09 14:10:00'); +INSERT INTO `sys_job_log` VALUES (8870, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 14:11:00'); +INSERT INTO `sys_job_log` VALUES (8871, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 14:12:00'); +INSERT INTO `sys_job_log` VALUES (8872, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:14毫秒', '0', '', '2025-01-09 14:12:00'); +INSERT INTO `sys_job_log` VALUES (8873, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 14:13:00'); +INSERT INTO `sys_job_log` VALUES (8874, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 14:14:00'); +INSERT INTO `sys_job_log` VALUES (8875, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-09 14:14:00'); +INSERT INTO `sys_job_log` VALUES (8876, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 14:15:00'); +INSERT INTO `sys_job_log` VALUES (8877, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 14:16:00'); +INSERT INTO `sys_job_log` VALUES (8878, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:12毫秒', '0', '', '2025-01-09 14:16:00'); +INSERT INTO `sys_job_log` VALUES (8879, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 14:17:00'); +INSERT INTO `sys_job_log` VALUES (8880, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 14:18:00'); +INSERT INTO `sys_job_log` VALUES (8881, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:12毫秒', '0', '', '2025-01-09 14:18:00'); +INSERT INTO `sys_job_log` VALUES (8882, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 14:19:00'); +INSERT INTO `sys_job_log` VALUES (8883, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 14:20:00'); +INSERT INTO `sys_job_log` VALUES (8884, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:15毫秒', '0', '', '2025-01-09 14:20:00'); +INSERT INTO `sys_job_log` VALUES (8885, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 14:21:00'); +INSERT INTO `sys_job_log` VALUES (8886, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 14:22:00'); +INSERT INTO `sys_job_log` VALUES (8887, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:12毫秒', '0', '', '2025-01-09 14:22:00'); +INSERT INTO `sys_job_log` VALUES (8888, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 14:23:00'); +INSERT INTO `sys_job_log` VALUES (8889, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 14:24:00'); +INSERT INTO `sys_job_log` VALUES (8890, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-09 14:24:00'); +INSERT INTO `sys_job_log` VALUES (8891, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 14:25:00'); +INSERT INTO `sys_job_log` VALUES (8892, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 14:26:00'); +INSERT INTO `sys_job_log` VALUES (8893, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:14毫秒', '0', '', '2025-01-09 14:26:00'); +INSERT INTO `sys_job_log` VALUES (8894, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 14:27:00'); +INSERT INTO `sys_job_log` VALUES (8895, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 14:28:00'); +INSERT INTO `sys_job_log` VALUES (8896, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:14毫秒', '0', '', '2025-01-09 14:28:00'); +INSERT INTO `sys_job_log` VALUES (8897, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 14:29:00'); +INSERT INTO `sys_job_log` VALUES (8898, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 14:30:00'); +INSERT INTO `sys_job_log` VALUES (8899, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:14毫秒', '0', '', '2025-01-09 14:30:00'); +INSERT INTO `sys_job_log` VALUES (8900, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 14:31:00'); +INSERT INTO `sys_job_log` VALUES (8901, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 14:32:00'); +INSERT INTO `sys_job_log` VALUES (8902, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:14毫秒', '0', '', '2025-01-09 14:32:00'); +INSERT INTO `sys_job_log` VALUES (8903, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 14:33:00'); +INSERT INTO `sys_job_log` VALUES (8904, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:3毫秒', '0', '', '2025-01-09 14:34:00'); +INSERT INTO `sys_job_log` VALUES (8905, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:15毫秒', '0', '', '2025-01-09 14:34:00'); +INSERT INTO `sys_job_log` VALUES (8906, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 14:35:00'); +INSERT INTO `sys_job_log` VALUES (8907, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 14:36:00'); +INSERT INTO `sys_job_log` VALUES (8908, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:14毫秒', '0', '', '2025-01-09 14:36:00'); +INSERT INTO `sys_job_log` VALUES (8909, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 14:37:00'); +INSERT INTO `sys_job_log` VALUES (8910, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 14:38:00'); +INSERT INTO `sys_job_log` VALUES (8911, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:14毫秒', '0', '', '2025-01-09 14:38:00'); +INSERT INTO `sys_job_log` VALUES (8912, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 14:39:00'); +INSERT INTO `sys_job_log` VALUES (8913, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 14:40:00'); +INSERT INTO `sys_job_log` VALUES (8914, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-09 14:40:00'); +INSERT INTO `sys_job_log` VALUES (8915, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 14:41:00'); +INSERT INTO `sys_job_log` VALUES (8916, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 14:42:00'); +INSERT INTO `sys_job_log` VALUES (8917, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-09 14:42:00'); +INSERT INTO `sys_job_log` VALUES (8918, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 14:43:00'); +INSERT INTO `sys_job_log` VALUES (8919, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 14:44:00'); +INSERT INTO `sys_job_log` VALUES (8920, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:12毫秒', '0', '', '2025-01-09 14:44:00'); +INSERT INTO `sys_job_log` VALUES (8921, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:1毫秒', '0', '', '2025-01-09 14:45:00'); +INSERT INTO `sys_job_log` VALUES (8922, '设备定时同步', 'SYSTEM', 'syncDeviceStatusJob.syncDeviceStatus', '设备定时同步 总共耗时:2毫秒', '0', '', '2025-01-09 14:46:00'); +INSERT INTO `sys_job_log` VALUES (8923, '监控在线状态更新', 'SYSTEM', 'deviceJob.updateSipDeviceOnlineStatus(90)', '监控在线状态更新 总共耗时:13毫秒', '0', '', '2025-01-09 14:46:00'); + +-- ---------------------------- +-- Table structure for sys_logininfor +-- ---------------------------- +DROP TABLE IF EXISTS `sys_logininfor`; +CREATE TABLE `sys_logininfor` ( + `info_id` bigint NOT NULL AUTO_INCREMENT COMMENT '访问ID', + `user_name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '用户账号', + `ipaddr` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '登录IP地址', + `login_location` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '登录地点', + `browser` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '浏览器类型', + `os` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '操作系统', + `status` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '0' COMMENT '登录状态(0成功 1失败)', + `msg` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '提示消息', + `login_time` datetime NULL DEFAULT NULL COMMENT '访问时间', + PRIMARY KEY (`info_id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 33 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '系统访问记录' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of sys_logininfor +-- ---------------------------- +INSERT INTO `sys_logininfor` VALUES (1, 'admin', '127.0.0.1', '内网IP', 'Chrome 12', 'Windows 10', '0', '登录成功', '2024-12-29 15:25:40'); +INSERT INTO `sys_logininfor` VALUES (2, 'admin', '127.0.0.1', '内网IP', 'Chrome 12', 'Windows 10', '0', '登录成功', '2024-12-30 19:56:47'); +INSERT INTO `sys_logininfor` VALUES (3, 'admin', '127.0.0.1', '内网IP', 'Chrome 12', 'Windows 10', '0', '登录成功', '2024-12-31 09:02:09'); +INSERT INTO `sys_logininfor` VALUES (4, 'admin', '127.0.0.1', '内网IP', 'Chrome 12', 'Windows 10', '0', '登录成功', '2025-01-01 12:26:19'); +INSERT INTO `sys_logininfor` VALUES (5, 'admin', '127.0.0.1', '内网IP', 'Chrome 12', 'Windows 10', '0', '登录成功', '2025-01-01 13:08:06'); +INSERT INTO `sys_logininfor` VALUES (6, 'admin', '127.0.0.1', '内网IP', 'Chrome 12', 'Windows 10', '0', '登录成功', '2025-01-01 14:11:31'); +INSERT INTO `sys_logininfor` VALUES (7, 'admin', '127.0.0.1', '内网IP', 'Chrome 12', 'Windows 10', '0', '登录成功', '2025-01-01 19:32:07'); +INSERT INTO `sys_logininfor` VALUES (8, 'admin', '61.179.246.105', '山东省 日照市', 'Chrome 12', 'Windows 10', '0', '登录成功', '2025-01-06 23:12:53'); +INSERT INTO `sys_logininfor` VALUES (9, 'admin', '127.0.0.1', '内网IP', 'Chrome 12', 'Windows 10', '1', '密码输入错误1次', '2025-01-07 10:48:49'); +INSERT INTO `sys_logininfor` VALUES (10, 'admin', '127.0.0.1', '内网IP', 'Chrome 12', 'Windows 10', '1', '用户不存在/密码错误', '2025-01-07 10:48:49'); +INSERT INTO `sys_logininfor` VALUES (11, 'admin', '127.0.0.1', '内网IP', 'Chrome 12', 'Windows 10', '0', '登录成功', '2025-01-07 10:49:00'); +INSERT INTO `sys_logininfor` VALUES (12, 'admin', '61.179.246.105', '山东省 日照市', 'Chrome 12', 'Windows 10', '0', '登录成功', '2025-01-07 10:59:32'); +INSERT INTO `sys_logininfor` VALUES (13, 'admin', '49.118.81.126', 'XX XX', 'Chrome 12', 'Windows 10', '1', '密码输入错误1次', '2025-01-07 12:47:39'); +INSERT INTO `sys_logininfor` VALUES (14, 'admin', '49.118.81.126', 'XX XX', 'Chrome 12', 'Windows 10', '1', '用户不存在/密码错误', '2025-01-07 12:47:39'); +INSERT INTO `sys_logininfor` VALUES (15, 'admin', '182.149.80.109', '四川省 成都市', 'Chrome 12', 'Windows 10', '0', '登录成功', '2025-01-07 12:47:43'); +INSERT INTO `sys_logininfor` VALUES (16, 'admin', '49.118.81.126', 'XX XX', 'Chrome 12', 'Windows 10', '0', '登录成功', '2025-01-07 12:47:56'); +INSERT INTO `sys_logininfor` VALUES (17, 'gongkongbang', '127.0.0.1', '内网IP', 'Chrome 13', 'Windows 10', '1', '登录用户:gongkongbang 不存在', '2025-01-07 16:14:06'); +INSERT INTO `sys_logininfor` VALUES (18, 'gongkongbang', '127.0.0.1', '内网IP', 'Chrome 13', 'Windows 10', '1', '验证码错误', '2025-01-07 16:14:13'); +INSERT INTO `sys_logininfor` VALUES (19, 'gongkongbang', '127.0.0.1', '内网IP', 'Chrome 13', 'Windows 10', '1', '登录用户:gongkongbang 不存在', '2025-01-07 16:14:34'); +INSERT INTO `sys_logininfor` VALUES (20, 'admin', '127.0.0.1', '内网IP', 'Chrome 13', 'Windows 10', '1', '验证码已失效', '2025-01-07 16:16:53'); +INSERT INTO `sys_logininfor` VALUES (21, 'admin', '127.0.0.1', '内网IP', 'Chrome 13', 'Windows 10', '0', '登录成功', '2025-01-07 16:17:00'); +INSERT INTO `sys_logininfor` VALUES (22, 'admin', '127.0.0.1', '内网IP', 'Chrome 13', 'Windows 10', '0', '退出成功', '2025-01-07 17:27:24'); +INSERT INTO `sys_logininfor` VALUES (23, 'admin', '127.0.0.1', '内网IP', 'Chrome 13', 'Windows 10', '0', '登录成功', '2025-01-07 17:38:43'); +INSERT INTO `sys_logininfor` VALUES (24, 'admin', '127.0.0.1', '内网IP', 'Chrome 13', 'Windows 10', '0', '登录成功', '2025-01-07 20:00:51'); +INSERT INTO `sys_logininfor` VALUES (25, 'admin', '61.179.246.105', 'XX XX', 'Chrome 12', 'Windows 10', '0', '登录成功', '2025-01-07 21:26:47'); +INSERT INTO `sys_logininfor` VALUES (26, 'admin', '127.0.0.1', '内网IP', 'Chrome 13', 'Windows 10', '0', '登录成功', '2025-01-07 22:25:17'); +INSERT INTO `sys_logininfor` VALUES (27, 'admin', '127.0.0.1', '内网IP', 'Chrome 13', 'Windows 10', '0', '退出成功', '2025-01-07 23:07:32'); +INSERT INTO `sys_logininfor` VALUES (28, 'admin', '61.179.246.105', '山东省 日照市', 'Chrome 12', 'Windows 10', '0', '登录成功', '2025-01-08 14:15:51'); +INSERT INTO `sys_logininfor` VALUES (29, 'admin', '61.179.246.105', 'XX XX', 'Chrome 12', 'Windows 10', '0', '退出成功', '2025-01-08 14:16:30'); +INSERT INTO `sys_logininfor` VALUES (30, 'admin', '127.0.0.1', '内网IP', 'Chrome 12', 'Windows 10', '1', '密码输入错误1次', '2025-01-08 14:23:11'); +INSERT INTO `sys_logininfor` VALUES (31, 'admin', '127.0.0.1', '内网IP', 'Chrome 12', 'Windows 10', '1', '用户不存在/密码错误', '2025-01-08 14:23:11'); +INSERT INTO `sys_logininfor` VALUES (32, 'admin', '127.0.0.1', '内网IP', 'Chrome 12', 'Windows 10', '0', '登录成功', '2025-01-08 14:23:22'); +INSERT INTO `sys_logininfor` VALUES (33, 'admin', '127.0.0.1', '内网IP', 'Chrome 13', 'Windows 10', '0', '登录成功', '2025-01-08 20:40:39'); +INSERT INTO `sys_logininfor` VALUES (34, 'admin', '127.0.0.1', '内网IP', 'Chrome 13', 'Windows 10', '0', '退出成功', '2025-01-08 20:43:32'); +INSERT INTO `sys_logininfor` VALUES (35, 'admin', '127.0.0.1', '内网IP', 'Chrome 13', 'Windows 10', '0', '登录成功', '2025-01-08 20:45:26'); +INSERT INTO `sys_logininfor` VALUES (36, 'admin', '127.0.0.1', '内网IP', 'Chrome 13', 'Windows 10', '0', '退出成功', '2025-01-08 21:29:38'); +INSERT INTO `sys_logininfor` VALUES (37, 'admin', '127.0.0.1', '内网IP', 'Chrome 13', 'Windows 10', '0', '登录成功', '2025-01-08 21:32:11'); +INSERT INTO `sys_logininfor` VALUES (38, 'admin', '127.0.0.1', '内网IP', 'Chrome 13', 'Windows 10', '0', '退出成功', '2025-01-08 22:30:09'); +INSERT INTO `sys_logininfor` VALUES (39, 'admin', '127.0.0.1', '内网IP', 'Chrome 13', 'Windows 10', '0', '登录成功', '2025-01-08 22:33:17'); +INSERT INTO `sys_logininfor` VALUES (40, 'admin', '192.168.1.103', '内网IP', 'Chrome 12', 'Windows 10', '1', '验证码错误', '2025-01-08 23:22:07'); +INSERT INTO `sys_logininfor` VALUES (41, 'admin', '192.168.1.103', '内网IP', 'Chrome 12', 'Windows 10', '1', '密码输入错误1次', '2025-01-08 23:22:11'); +INSERT INTO `sys_logininfor` VALUES (42, 'admin', '192.168.1.103', '内网IP', 'Chrome 12', 'Windows 10', '1', '用户不存在/密码错误', '2025-01-08 23:22:11'); +INSERT INTO `sys_logininfor` VALUES (43, 'admin', '192.168.1.103', '内网IP', 'Chrome 12', 'Windows 10', '0', '登录成功', '2025-01-08 23:22:22'); +INSERT INTO `sys_logininfor` VALUES (44, 'admin', '192.168.1.103', '内网IP', 'Chrome 12', 'Windows 10', '0', '退出成功', '2025-01-09 00:58:25'); +INSERT INTO `sys_logininfor` VALUES (45, 'admin', '192.168.1.103', '内网IP', 'Chrome 12', 'Windows 10', '1', '密码输入错误1次', '2025-01-09 01:11:05'); +INSERT INTO `sys_logininfor` VALUES (46, 'admin', '192.168.1.103', '内网IP', 'Chrome 12', 'Windows 10', '1', '用户不存在/密码错误', '2025-01-09 01:11:05'); +INSERT INTO `sys_logininfor` VALUES (47, 'admin', '192.168.1.103', '内网IP', 'Chrome 12', 'Windows 10', '0', '登录成功', '2025-01-09 01:11:15'); +INSERT INTO `sys_logininfor` VALUES (48, 'admin', '192.168.1.103', '内网IP', 'Chrome 12', 'Windows 10', '0', '退出成功', '2025-01-09 01:23:29'); +INSERT INTO `sys_logininfor` VALUES (49, 'admin', '192.168.1.103', '内网IP', 'Chrome 12', 'Windows 10', '0', '登录成功', '2025-01-09 01:23:58'); + +-- ---------------------------- +-- Table structure for sys_menu +-- ---------------------------- +DROP TABLE IF EXISTS `sys_menu`; +CREATE TABLE `sys_menu` ( + `menu_id` bigint NOT NULL AUTO_INCREMENT COMMENT '菜单ID', + `menu_name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '菜单名称', + `parent_id` bigint NULL DEFAULT 0 COMMENT '父菜单ID', + `order_num` int NULL DEFAULT 0 COMMENT '显示顺序', + `path` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '路由地址', + `component` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '组件路径', + `query` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '路由参数', + `is_frame` int NULL DEFAULT 1 COMMENT '是否为外链(0是 1否)', + `is_cache` int NULL DEFAULT 0 COMMENT '是否缓存(0缓存 1不缓存)', + `menu_type` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '菜单类型(M目录 C菜单 F按钮)', + `visible` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '0' COMMENT '菜单状态(0显示 1隐藏)', + `status` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '0' COMMENT '菜单状态(0正常 1停用)', + `perms` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '权限标识', + `icon` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '#' COMMENT '菜单图标', + `create_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '创建者', + `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间', + `update_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '更新者', + `update_time` datetime NULL DEFAULT NULL COMMENT '更新时间', + `remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '备注', + PRIMARY KEY (`menu_id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 3390 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '菜单权限表' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of sys_menu +-- ---------------------------- +INSERT INTO `sys_menu` VALUES (1, '系统管理', 0, 6, 'system', NULL, '', 1, 0, 'M', '0', '0', '', 'system', 'admin', '2021-12-15 21:36:18', 'admin', '2023-07-06 16:29:14', '系统管理目录'); +INSERT INTO `sys_menu` VALUES (2, '系统监控', 0, 6, 'monitor', NULL, '', 1, 0, 'M', '0', '0', '', 'monitor', 'admin', '2021-12-15 21:36:18', 'admin', '2023-07-06 16:24:01', '系统监控目录'); +INSERT INTO `sys_menu` VALUES (3, '系统工具', 0, 8, 'tool', NULL, '', 1, 0, 'M', '0', '0', '', 'tool', 'admin', '2021-12-15 21:36:18', 'admin', '2023-07-06 16:26:26', '系统工具目录'); +INSERT INTO `sys_menu` VALUES (4, '信达物联', 0, 99, 'https://lot.keruixinda.com/', NULL, '', 0, 0, 'M', '1', '0', '', 'guide', 'admin', '2021-12-15 21:36:18', 'admin', '2025-01-08 16:01:43', '若依官网地址'); +INSERT INTO `sys_menu` VALUES (5, '企业管理', 0, 5, 'enterprise', NULL, '', 1, 0, 'M', '0', '0', '', 'authenticate', 'admin', '2021-12-15 21:36:18', 'admin', '2024-03-20 15:57:01', '企业管理目录'); +INSERT INTO `sys_menu` VALUES (100, '用户管理', 5, 1, 'user', 'system/user/index', '', 1, 0, 'C', '0', '0', 'system:user:list', 'user', 'admin', '2021-12-15 21:36:18', '', NULL, '用户管理菜单'); +INSERT INTO `sys_menu` VALUES (101, '角色管理', 5, 2, 'role', 'system/role/index', '', 1, 0, 'C', '0', '0', 'system:role:list', 'peoples', 'admin', '2021-12-15 21:36:18', '', NULL, '角色管理菜单'); +INSERT INTO `sys_menu` VALUES (102, '菜单管理', 5, 3, 'menu', 'system/menu/index', '', 1, 0, 'C', '0', '0', 'system:menu:list', 'tree-table', 'admin', '2021-12-15 21:36:18', '', NULL, '菜单管理菜单'); +INSERT INTO `sys_menu` VALUES (103, '机构管理', 5, 4, 'dept', 'system/dept/index', '', 1, 0, 'C', '0', '0', 'system:dept:list', 'tree', 'admin', '2021-12-15 21:36:18', '', NULL, '部门管理菜单'); +INSERT INTO `sys_menu` VALUES (104, '岗位管理', 1, 5, 'post', 'system/post/index', '', 1, 0, 'C', '0', '0', 'system:post:list', 'post', 'admin', '2021-12-15 21:36:18', '', NULL, '岗位管理菜单'); +INSERT INTO `sys_menu` VALUES (105, '字典管理', 1, 6, 'dict', 'system/dict/index', '', 1, 0, 'C', '0', '0', 'system:dict:list', 'dict', 'admin', '2021-12-15 21:36:18', '', NULL, '字典管理菜单'); +INSERT INTO `sys_menu` VALUES (106, '参数设置', 1, 7, 'config', 'system/config/index', '', 1, 0, 'C', '0', '0', 'system:config:list', 'edit', 'admin', '2021-12-15 21:36:18', '', NULL, '参数设置菜单'); +INSERT INTO `sys_menu` VALUES (107, '通知公告', 1, 8, 'notice', 'system/notice/index', '', 1, 0, 'C', '0', '0', 'system:notice:list', 'message', 'admin', '2021-12-15 21:36:18', '', NULL, '通知公告菜单'); +INSERT INTO `sys_menu` VALUES (108, '日志管理', 1, 9, 'log', '', '', 1, 0, 'M', '0', '0', '', 'log', 'admin', '2021-12-15 21:36:18', '', NULL, '日志管理菜单'); +INSERT INTO `sys_menu` VALUES (109, '在线用户', 2, 1, 'online', 'monitor/online/index', '', 1, 0, 'C', '0', '0', 'monitor:online:list', 'online', 'admin', '2021-12-15 21:36:18', '', NULL, '在线用户菜单'); +INSERT INTO `sys_menu` VALUES (110, '定时任务', 2, 2, 'job', 'monitor/job/index', '', 1, 0, 'C', '0', '0', 'monitor:job:list', 'job', 'admin', '2021-12-15 21:36:18', '', NULL, '定时任务菜单'); +INSERT INTO `sys_menu` VALUES (111, '数据监控', 2, 3, 'druid', 'monitor/druid/index', '', 1, 0, 'C', '0', '0', 'monitor:druid:list', 'druid', 'admin', '2021-12-15 21:36:18', '', NULL, '数据监控菜单'); +INSERT INTO `sys_menu` VALUES (112, '服务监控', 2, 4, 'server', 'monitor/server/index', '', 1, 0, 'C', '0', '0', 'monitor:server:list', 'server', 'admin', '2021-12-15 21:36:18', '', NULL, '服务监控菜单'); +INSERT INTO `sys_menu` VALUES (113, '缓存监控', 2, 5, 'cache', 'monitor/cache/index', '', 1, 0, 'C', '0', '0', 'monitor:cache:list', 'redis', 'admin', '2021-12-15 21:36:18', '', NULL, '缓存监控菜单'); +INSERT INTO `sys_menu` VALUES (114, '表单构建', 3, 1, 'build', 'tool/build/index', '', 1, 0, 'C', '0', '0', 'tool:build:list', 'build', 'admin', '2021-12-15 21:36:18', '', NULL, '表单构建菜单'); +INSERT INTO `sys_menu` VALUES (115, '代码生成', 3, 2, 'gen', 'tool/gen/index', '', 1, 0, 'C', '0', '0', 'tool:gen:list', 'code', 'admin', '2021-12-15 21:36:18', '', NULL, '代码生成菜单'); +INSERT INTO `sys_menu` VALUES (116, '系统接口', 3, 3, 'swagger', 'tool/swagger/index', '', 1, 0, 'C', '0', '0', 'tool:swagger:list', 'swagger', 'admin', '2021-12-15 21:36:18', '', NULL, '系统接口菜单'); +INSERT INTO `sys_menu` VALUES (124, '缓存列表', 2, 6, 'cacheList', 'monitor/cache/list', '', 1, 0, 'C', '0', '0', 'monitor:cache:list', 'redis-list', 'admin', '2023-03-10 23:22:42', '', NULL, '缓存列表菜单'); +INSERT INTO `sys_menu` VALUES (500, '操作日志', 108, 1, 'operlog', 'monitor/operlog/index', '', 1, 0, 'C', '0', '0', 'monitor:operlog:list', 'form', 'admin', '2021-12-15 21:36:18', '', NULL, '操作日志菜单'); +INSERT INTO `sys_menu` VALUES (501, '登录日志', 108, 2, 'logininfor', 'monitor/logininfor/index', '', 1, 0, 'C', '0', '0', 'monitor:logininfor:list', 'logininfor', 'admin', '2021-12-15 21:36:18', '', NULL, '登录日志菜单'); +INSERT INTO `sys_menu` VALUES (1001, '用户查询', 100, 1, '', '', '', 1, 0, 'F', '0', '0', 'system:user:query', '#', 'admin', '2021-12-15 21:36:18', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (1002, '用户新增', 100, 2, '', '', '', 1, 0, 'F', '0', '0', 'system:user:add', '#', 'admin', '2021-12-15 21:36:18', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (1003, '用户修改', 100, 3, '', '', '', 1, 0, 'F', '0', '0', 'system:user:edit', '#', 'admin', '2021-12-15 21:36:18', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (1004, '用户删除', 100, 4, '', '', '', 1, 0, 'F', '0', '0', 'system:user:remove', '#', 'admin', '2021-12-15 21:36:18', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (1005, '用户导出', 100, 5, '', '', '', 1, 0, 'F', '0', '0', 'system:user:export', '#', 'admin', '2021-12-15 21:36:18', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (1006, '用户导入', 100, 6, '', '', '', 1, 0, 'F', '0', '0', 'system:user:import', '#', 'admin', '2021-12-15 21:36:18', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (1007, '重置密码', 100, 7, '', '', '', 1, 0, 'F', '0', '0', 'system:user:resetPwd', '#', 'admin', '2021-12-15 21:36:18', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (1008, '角色查询', 101, 1, '', '', '', 1, 0, 'F', '0', '0', 'system:role:query', '#', 'admin', '2021-12-15 21:36:18', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (1009, '角色新增', 101, 2, '', '', '', 1, 0, 'F', '0', '0', 'system:role:add', '#', 'admin', '2021-12-15 21:36:18', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (1010, '角色修改', 101, 3, '', '', '', 1, 0, 'F', '0', '0', 'system:role:edit', '#', 'admin', '2021-12-15 21:36:18', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (1011, '角色删除', 101, 4, '', '', '', 1, 0, 'F', '0', '0', 'system:role:remove', '#', 'admin', '2021-12-15 21:36:18', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (1012, '角色导出', 101, 5, '', '', '', 1, 0, 'F', '0', '0', 'system:role:export', '#', 'admin', '2021-12-15 21:36:18', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (1013, '菜单查询', 102, 1, '', '', '', 1, 0, 'F', '0', '0', 'system:menu:query', '#', 'admin', '2021-12-15 21:36:18', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (1014, '菜单新增', 102, 2, '', '', '', 1, 0, 'F', '0', '0', 'system:menu:add', '#', 'admin', '2021-12-15 21:36:18', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (1015, '菜单修改', 102, 3, '', '', '', 1, 0, 'F', '0', '0', 'system:menu:edit', '#', 'admin', '2021-12-15 21:36:18', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (1016, '菜单删除', 102, 4, '', '', '', 1, 0, 'F', '0', '0', 'system:menu:remove', '#', 'admin', '2021-12-15 21:36:18', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (1017, '部门查询', 103, 1, '', '', '', 1, 0, 'F', '0', '0', 'system:dept:query', '#', 'admin', '2021-12-15 21:36:18', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (1018, '部门新增', 103, 2, '', '', '', 1, 0, 'F', '0', '0', 'system:dept:add', '#', 'admin', '2021-12-15 21:36:18', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (1019, '部门修改', 103, 3, '', '', '', 1, 0, 'F', '0', '0', 'system:dept:edit', '#', 'admin', '2021-12-15 21:36:18', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (1020, '部门删除', 103, 4, '', '', '', 1, 0, 'F', '0', '0', 'system:dept:remove', '#', 'admin', '2021-12-15 21:36:18', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (1021, '岗位查询', 104, 1, '', '', '', 1, 0, 'F', '0', '0', 'system:post:query', '#', 'admin', '2021-12-15 21:36:18', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (1022, '岗位新增', 104, 2, '', '', '', 1, 0, 'F', '0', '0', 'system:post:add', '#', 'admin', '2021-12-15 21:36:18', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (1023, '岗位修改', 104, 3, '', '', '', 1, 0, 'F', '0', '0', 'system:post:edit', '#', 'admin', '2021-12-15 21:36:18', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (1024, '岗位删除', 104, 4, '', '', '', 1, 0, 'F', '0', '0', 'system:post:remove', '#', 'admin', '2021-12-15 21:36:18', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (1025, '岗位导出', 104, 5, '', '', '', 1, 0, 'F', '0', '0', 'system:post:export', '#', 'admin', '2021-12-15 21:36:18', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (1026, '字典查询', 105, 1, '#', '', '', 1, 0, 'F', '0', '0', 'system:dict:query', '#', 'admin', '2021-12-15 21:36:18', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (1027, '字典新增', 105, 2, '#', '', '', 1, 0, 'F', '0', '0', 'system:dict:add', '#', 'admin', '2021-12-15 21:36:18', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (1028, '字典修改', 105, 3, '#', '', '', 1, 0, 'F', '0', '0', 'system:dict:edit', '#', 'admin', '2021-12-15 21:36:18', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (1029, '字典删除', 105, 4, '#', '', '', 1, 0, 'F', '0', '0', 'system:dict:remove', '#', 'admin', '2021-12-15 21:36:18', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (1030, '字典导出', 105, 5, '#', '', '', 1, 0, 'F', '0', '0', 'system:dict:export', '#', 'admin', '2021-12-15 21:36:18', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (1031, '参数查询', 106, 1, '#', '', '', 1, 0, 'F', '0', '0', 'system:config:query', '#', 'admin', '2021-12-15 21:36:18', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (1032, '参数新增', 106, 2, '#', '', '', 1, 0, 'F', '0', '0', 'system:config:add', '#', 'admin', '2021-12-15 21:36:18', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (1033, '参数修改', 106, 3, '#', '', '', 1, 0, 'F', '0', '0', 'system:config:edit', '#', 'admin', '2021-12-15 21:36:18', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (1034, '参数删除', 106, 4, '#', '', '', 1, 0, 'F', '0', '0', 'system:config:remove', '#', 'admin', '2021-12-15 21:36:18', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (1035, '参数导出', 106, 5, '#', '', '', 1, 0, 'F', '0', '0', 'system:config:export', '#', 'admin', '2021-12-15 21:36:18', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (1036, '公告查询', 107, 1, '#', '', '', 1, 0, 'F', '0', '0', 'system:notice:query', '#', 'admin', '2021-12-15 21:36:18', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (1037, '公告新增', 107, 2, '#', '', '', 1, 0, 'F', '0', '0', 'system:notice:add', '#', 'admin', '2021-12-15 21:36:18', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (1038, '公告修改', 107, 3, '#', '', '', 1, 0, 'F', '0', '0', 'system:notice:edit', '#', 'admin', '2021-12-15 21:36:18', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (1039, '公告删除', 107, 4, '#', '', '', 1, 0, 'F', '0', '0', 'system:notice:remove', '#', 'admin', '2021-12-15 21:36:18', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (1040, '操作查询', 500, 1, '#', '', '', 1, 0, 'F', '0', '0', 'monitor:operlog:query', '#', 'admin', '2021-12-15 21:36:18', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (1041, '操作删除', 500, 2, '#', '', '', 1, 0, 'F', '0', '0', 'monitor:operlog:remove', '#', 'admin', '2021-12-15 21:36:18', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (1042, '日志导出', 500, 4, '#', '', '', 1, 0, 'F', '0', '0', 'monitor:operlog:export', '#', 'admin', '2021-12-15 21:36:18', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (1043, '登录查询', 501, 1, '#', '', '', 1, 0, 'F', '0', '0', 'monitor:logininfor:query', '#', 'admin', '2021-12-15 21:36:18', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (1044, '登录删除', 501, 2, '#', '', '', 1, 0, 'F', '0', '0', 'monitor:logininfor:remove', '#', 'admin', '2021-12-15 21:36:18', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (1045, '日志导出', 501, 3, '#', '', '', 1, 0, 'F', '0', '0', 'monitor:logininfor:export', '#', 'admin', '2021-12-15 21:36:18', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (1046, '在线查询', 109, 1, '#', '', '', 1, 0, 'F', '0', '0', 'monitor:online:query', '#', 'admin', '2021-12-15 21:36:18', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (1047, '批量强退', 109, 2, '#', '', '', 1, 0, 'F', '0', '0', 'monitor:online:batchLogout', '#', 'admin', '2021-12-15 21:36:18', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (1048, '单条强退', 109, 3, '#', '', '', 1, 0, 'F', '0', '0', 'monitor:online:forceLogout', '#', 'admin', '2021-12-15 21:36:18', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (1049, '任务查询', 110, 1, '#', '', '', 1, 0, 'F', '0', '0', 'monitor:job:query', '#', 'admin', '2021-12-15 21:36:18', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (1050, '任务新增', 110, 2, '#', '', '', 1, 0, 'F', '0', '0', 'monitor:job:add', '#', 'admin', '2021-12-15 21:36:18', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (1051, '任务修改', 110, 3, '#', '', '', 1, 0, 'F', '0', '0', 'monitor:job:edit', '#', 'admin', '2021-12-15 21:36:18', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (1052, '任务删除', 110, 4, '#', '', '', 1, 0, 'F', '0', '0', 'monitor:job:remove', '#', 'admin', '2021-12-15 21:36:18', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (1053, '状态修改', 110, 5, '#', '', '', 1, 0, 'F', '0', '0', 'monitor:job:changeStatus', '#', 'admin', '2021-12-15 21:36:18', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (1054, '任务导出', 110, 7, '#', '', '', 1, 0, 'F', '0', '0', 'monitor:job:export', '#', 'admin', '2021-12-15 21:36:18', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (1055, '生成查询', 115, 1, '#', '', '', 1, 0, 'F', '0', '0', 'tool:gen:query', '#', 'admin', '2021-12-15 21:36:18', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (1056, '生成修改', 115, 2, '#', '', '', 1, 0, 'F', '0', '0', 'tool:gen:edit', '#', 'admin', '2021-12-15 21:36:18', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (1057, '生成删除', 115, 3, '#', '', '', 1, 0, 'F', '0', '0', 'tool:gen:remove', '#', 'admin', '2021-12-15 21:36:18', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (1058, '导入代码', 115, 2, '#', '', '', 1, 0, 'F', '0', '0', 'tool:gen:import', '#', 'admin', '2021-12-15 21:36:18', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (1059, '预览代码', 115, 4, '#', '', '', 1, 0, 'F', '0', '0', 'tool:gen:preview', '#', 'admin', '2021-12-15 21:36:18', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (1060, '生成代码', 115, 5, '#', '', '', 1, 0, 'F', '0', '0', 'tool:gen:code', '#', 'admin', '2021-12-15 21:36:18', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (1065, '账户解锁', 501, 4, '#', '', '', 1, 0, 'F', '0', '0', 'monitor:logininfor:unlock', '#', 'admin', '2023-03-10 23:23:04', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (2000, '设备管理', 0, 0, 'iot', NULL, NULL, 1, 0, 'M', '0', '0', '', 'iot', 'admin', '2021-12-15 23:57:06', 'admin', '2021-12-26 23:55:54', ''); +INSERT INTO `sys_menu` VALUES (2001, '产品分类', 2000, 2, 'category', 'iot/category/index', NULL, 1, 0, 'C', '0', '0', 'iot:category:list', 'category', 'admin', '2021-12-16 00:40:02', 'admin', '2021-12-26 23:56:20', '产品分类菜单'); +INSERT INTO `sys_menu` VALUES (2002, '产品分类查询', 2001, 1, '#', '', NULL, 1, 0, 'F', '0', '0', 'iot:category:query', '#', 'admin', '2021-12-16 00:40:02', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (2003, '产品分类新增', 2001, 2, '#', '', NULL, 1, 0, 'F', '0', '0', 'iot:category:add', '#', 'admin', '2021-12-16 00:40:02', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (2004, '产品分类修改', 2001, 3, '#', '', NULL, 1, 0, 'F', '0', '0', 'iot:category:edit', '#', 'admin', '2021-12-16 00:40:02', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (2005, '产品分类删除', 2001, 4, '#', '', NULL, 1, 0, 'F', '0', '0', 'iot:category:remove', '#', 'admin', '2021-12-16 00:40:02', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (2006, '产品分类导出', 2001, 5, '#', '', NULL, 1, 0, 'F', '0', '0', 'iot:category:export', '#', 'admin', '2021-12-16 00:40:02', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (2007, '设备管理', 2000, 6, 'device', 'iot/device/index', NULL, 1, 0, 'C', '0', '0', 'iot:device:list', 'device', 'admin', '2021-12-16 00:40:12', 'admin', '2022-01-08 15:47:14', '设备菜单'); +INSERT INTO `sys_menu` VALUES (2008, '设备查询', 2007, 1, '#', '', NULL, 1, 0, 'F', '0', '0', 'iot:device:query', '#', 'admin', '2021-12-16 00:40:12', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (2009, '设备新增', 2007, 2, '#', '', NULL, 1, 0, 'F', '0', '0', 'iot:device:add', '#', 'admin', '2021-12-16 00:40:12', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (2010, '设备修改', 2007, 4, '#', '', NULL, 1, 0, 'F', '0', '0', 'iot:device:edit', '#', 'admin', '2021-12-16 00:40:12', 'admin', '2024-01-19 11:55:42', ''); +INSERT INTO `sys_menu` VALUES (2011, '设备删除', 2007, 5, '#', '', NULL, 1, 0, 'F', '0', '0', 'iot:device:remove', '#', 'admin', '2021-12-16 00:40:12', 'admin', '2024-01-19 11:39:07', ''); +INSERT INTO `sys_menu` VALUES (2012, '设备导出', 2007, 8, '#', '', NULL, 1, 0, 'F', '0', '0', 'iot:device:export', '#', 'admin', '2021-12-16 00:40:12', 'admin', '2024-01-19 11:39:33', ''); +INSERT INTO `sys_menu` VALUES (2013, '产品固件', 3000, 4, 'firmware', 'iot/firmware/index', NULL, 1, 0, 'C', '0', '0', 'iot:firmware:list', 'firmware', 'admin', '2021-12-16 00:40:20', 'admin', '2021-12-26 23:56:42', '产品固件菜单'); +INSERT INTO `sys_menu` VALUES (2014, '产品固件查询', 2013, 1, '#', '', NULL, 1, 0, 'F', '0', '0', 'iot:firmware:query', '#', 'admin', '2021-12-16 00:40:20', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (2015, '产品固件新增', 2013, 2, '#', '', NULL, 1, 0, 'F', '0', '0', 'iot:firmware:add', '#', 'admin', '2021-12-16 00:40:20', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (2016, '产品固件修改', 2013, 3, '#', '', NULL, 1, 0, 'F', '0', '0', 'iot:firmware:edit', '#', 'admin', '2021-12-16 00:40:20', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (2017, '产品固件删除', 2013, 4, '#', '', NULL, 1, 0, 'F', '0', '0', 'iot:firmware:remove', '#', 'admin', '2021-12-16 00:40:20', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (2018, '产品固件导出', 2013, 5, '#', '', NULL, 1, 0, 'F', '0', '0', 'iot:firmware:export', '#', 'admin', '2021-12-16 00:40:20', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (2019, '设备分组', 2000, 5, 'group', 'iot/group/index', NULL, 1, 0, 'C', '0', '0', 'iot:group:list', 'group', 'admin', '2021-12-16 00:40:31', 'admin', '2021-12-26 23:56:54', '设备分组菜单'); +INSERT INTO `sys_menu` VALUES (2020, '设备分组查询', 2019, 1, '#', '', NULL, 1, 0, 'F', '0', '0', 'iot:group:query', '#', 'admin', '2021-12-16 00:40:31', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (2021, '设备分组新增', 2019, 2, '#', '', NULL, 1, 0, 'F', '0', '0', 'iot:group:add', '#', 'admin', '2021-12-16 00:40:31', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (2022, '设备分组修改', 2019, 3, '#', '', NULL, 1, 0, 'F', '0', '0', 'iot:group:edit', '#', 'admin', '2021-12-16 00:40:31', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (2023, '设备分组删除', 2019, 4, '#', '', NULL, 1, 0, 'F', '0', '0', 'iot:group:remove', '#', 'admin', '2021-12-16 00:40:31', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (2024, '设备分组导出', 2019, 5, '#', '', NULL, 1, 0, 'F', '0', '0', 'iot:group:export', '#', 'admin', '2021-12-16 00:40:31', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (2043, '产品管理', 2000, 3, 'product', 'iot/product/index', NULL, 1, 0, 'C', '0', '0', 'iot:product:list', 'product', 'admin', '2021-12-16 00:41:18', 'admin', '2021-12-26 23:58:44', '产品菜单'); +INSERT INTO `sys_menu` VALUES (2044, '产品查询', 2043, 1, '#', '', NULL, 1, 0, 'F', '0', '0', 'iot:product:query', '#', 'admin', '2021-12-16 00:41:18', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (2045, '产品新增', 2043, 2, '#', '', NULL, 1, 0, 'F', '0', '0', 'iot:product:add', '#', 'admin', '2021-12-16 00:41:18', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (2046, '产品修改', 2043, 3, '#', '', NULL, 1, 0, 'F', '0', '0', 'iot:product:edit', '#', 'admin', '2021-12-16 00:41:18', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (2047, '产品删除', 2043, 4, '#', '', NULL, 1, 0, 'F', '0', '0', 'iot:product:remove', '#', 'admin', '2021-12-16 00:41:18', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (2048, '产品导出', 2043, 5, '#', '', NULL, 1, 0, 'F', '0', '0', 'iot:product:export', '#', 'admin', '2021-12-16 00:41:18', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (2049, '通用模型', 2000, 1, 'template', 'iot/template/index', NULL, 1, 0, 'C', '0', '0', 'iot:template:list', 'model', 'admin', '2021-12-16 00:41:28', 'admin', '2025-01-09 01:12:33', '通用物模型菜单'); +INSERT INTO `sys_menu` VALUES (2050, '通用物模型查询', 2049, 1, '#', '', NULL, 1, 0, 'F', '0', '0', 'iot:template:query', '#', 'admin', '2021-12-16 00:41:28', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (2051, '通用物模型新增', 2049, 2, '#', '', NULL, 1, 0, 'F', '0', '0', 'iot:template:add', '#', 'admin', '2021-12-16 00:41:28', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (2052, '通用物模型修改', 2049, 3, '#', '', NULL, 1, 0, 'F', '0', '0', 'iot:template:edit', '#', 'admin', '2021-12-16 00:41:28', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (2053, '通用物模型删除', 2049, 4, '#', '', NULL, 1, 0, 'F', '0', '0', 'iot:template:remove', '#', 'admin', '2021-12-16 00:41:28', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (2054, '通用物模型导出', 2049, 5, '#', '', NULL, 1, 0, 'F', '0', '0', 'iot:template:export', '#', 'admin', '2021-12-16 00:41:28', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (2067, '告警记录', 3051, 7, 'alertLog', 'iot/alert/log', NULL, 1, 0, 'C', '0', '0', 'iot:alertLog:list', 'log', 'admin', '2022-01-13 17:16:15', 'admin', '2024-04-25 09:35:41', '设备告警菜单'); +INSERT INTO `sys_menu` VALUES (2068, '设备告警查询', 2067, 1, '#', '', NULL, 1, 0, 'F', '0', '0', 'iot:alertLog:query', '#', 'admin', '2022-01-13 17:16:15', 'admin', '2022-06-11 00:38:10', ''); +INSERT INTO `sys_menu` VALUES (2069, '设备告警新增', 2067, 2, '#', '', NULL, 1, 0, 'F', '0', '0', 'iot:alertLog:add', '#', 'admin', '2022-01-13 17:16:15', 'admin', '2022-06-11 00:38:20', ''); +INSERT INTO `sys_menu` VALUES (2070, '设备告警修改', 2067, 3, '#', '', NULL, 1, 0, 'F', '0', '0', 'iot:alertLog:edit', '#', 'admin', '2022-01-13 17:16:15', 'admin', '2022-06-11 00:38:29', ''); +INSERT INTO `sys_menu` VALUES (2071, '设备告警删除', 2067, 4, '#', '', NULL, 1, 0, 'F', '0', '0', 'iot:alertLog:remove', '#', 'admin', '2022-01-13 17:16:15', 'admin', '2022-06-11 00:38:38', ''); +INSERT INTO `sys_menu` VALUES (2072, '设备告警导出', 2067, 5, '#', '', NULL, 1, 0, 'F', '0', '0', 'iot:alertLog:export', '#', 'admin', '2022-01-13 17:16:15', 'admin', '2022-06-11 00:38:46', ''); +INSERT INTO `sys_menu` VALUES (2085, '场景联动', 3051, 8, 'scene', 'iot/scene/index', NULL, 1, 0, 'C', '0', '0', 'iot:scene:list', 'scene', 'admin', '2022-01-13 17:16:45', 'admin', '2022-11-02 22:01:32', '场景联动菜单'); +INSERT INTO `sys_menu` VALUES (2086, '场景联动查询', 2085, 1, '#', '', NULL, 1, 0, 'F', '0', '0', 'iot:scene:query', '#', 'admin', '2022-01-13 17:16:45', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (2087, '场景联动新增', 2085, 2, '#', '', NULL, 1, 0, 'F', '0', '0', 'iot:scene:add', '#', 'admin', '2022-01-13 17:16:45', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (2088, '场景联动修改', 2085, 3, '#', '', NULL, 1, 0, 'F', '0', '0', 'iot:scene:edit', '#', 'admin', '2022-01-13 17:16:45', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (2089, '场景联动删除', 2085, 4, '#', '', NULL, 1, 0, 'F', '0', '0', 'iot:scene:remove', '#', 'admin', '2022-01-13 17:16:45', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (2090, '场景联动导出', 2085, 5, '#', '', NULL, 1, 0, 'F', '0', '0', 'iot:scene:export', '#', 'admin', '2022-01-13 17:16:45', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (2099, '云云对接查询', 3191, 1, '#', '', NULL, 1, 0, 'F', '0', '0', 'iot:clientDetails:query', '#', 'admin', '2022-02-07 22:08:59', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (2100, '云云对接新增', 3191, 2, '#', '', NULL, 1, 0, 'F', '0', '0', 'iot:clientDetails:add', '#', 'admin', '2022-02-07 22:08:59', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (2101, '云云对接修改', 3191, 3, '#', '', NULL, 1, 0, 'F', '0', '0', 'iot:clientDetails:edit', '#', 'admin', '2022-02-07 22:08:59', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (2102, '云云对接删除', 3191, 4, '#', '', NULL, 1, 0, 'F', '0', '0', 'iot:clientDetails:remove', '#', 'admin', '2022-02-07 22:08:59', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (2103, '云云对接导出', 3191, 5, '#', '', NULL, 1, 0, 'F', '0', '0', 'iot:clientDetails:export', '#', 'admin', '2022-02-07 22:08:59', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (2104, 'EMQ管理', 0, 3, 'emqx', NULL, NULL, 1, 0, 'M', '1', '0', '', 'mq', 'admin', '2022-02-26 00:42:12', 'admin', '2025-01-09 01:13:33', ''); +INSERT INTO `sys_menu` VALUES (2123, '新闻分类', 1, 10, 'newsCategory', 'iot/newsCategory/index', NULL, 1, 0, 'C', '0', '0', 'iot:newsCategory:list', 'category', 'admin', '2022-04-11 16:47:27', 'admin', '2022-05-12 17:20:51', '新闻分类菜单'); +INSERT INTO `sys_menu` VALUES (2124, '新闻分类查询', 2123, 1, '#', '', NULL, 1, 0, 'F', '0', '0', 'iot:newsCategory:query', '#', 'admin', '2022-04-11 16:47:27', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (2125, '新闻分类新增', 2123, 2, '#', '', NULL, 1, 0, 'F', '0', '0', 'iot:newsCategory:add', '#', 'admin', '2022-04-11 16:47:27', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (2126, '新闻分类修改', 2123, 3, '#', '', NULL, 1, 0, 'F', '0', '0', 'iot:newsCategory:edit', '#', 'admin', '2022-04-11 16:47:27', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (2127, '新闻分类删除', 2123, 4, '#', '', NULL, 1, 0, 'F', '0', '0', 'iot:newsCategory:remove', '#', 'admin', '2022-04-11 16:47:27', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (2128, '新闻分类导出', 2123, 5, '#', '', NULL, 1, 0, 'F', '0', '0', 'iot:newsCategory:export', '#', 'admin', '2022-04-11 16:47:27', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (2129, '新闻资讯', 1, 11, 'news', 'iot/news/index', NULL, 1, 0, 'C', '0', '0', 'iot:news:list', 'documentation', 'admin', '2022-04-11 16:47:46', 'admin', '2022-05-12 17:20:58', '新闻资讯菜单'); +INSERT INTO `sys_menu` VALUES (2130, '新闻资讯查询', 2129, 1, '#', '', NULL, 1, 0, 'F', '0', '0', 'iot:news:query', '#', 'admin', '2022-04-11 16:47:46', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (2131, '新闻资讯新增', 2129, 2, '#', '', NULL, 1, 0, 'F', '0', '0', 'iot:news:add', '#', 'admin', '2022-04-11 16:47:46', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (2132, '新闻资讯修改', 2129, 3, '#', '', NULL, 1, 0, 'F', '0', '0', 'iot:news:edit', '#', 'admin', '2022-04-11 16:47:46', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (2133, '新闻资讯删除', 2129, 4, '#', '', NULL, 1, 0, 'F', '0', '0', 'iot:news:remove', '#', 'admin', '2022-04-11 16:47:46', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (2134, '新闻资讯导出', 2129, 5, '#', '', NULL, 1, 0, 'F', '0', '0', 'iot:news:export', '#', 'admin', '2022-04-11 16:47:46', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (2136, '产品授权码查询', 2043, 6, '#', '', NULL, 1, 0, 'F', '0', '0', 'iot:authorize:query', '#', 'admin', '2022-04-11 17:17:53', 'admin', '2022-06-04 21:21:40', ''); +INSERT INTO `sys_menu` VALUES (2137, '产品授权码新增', 2043, 7, '#', '', NULL, 1, 0, 'F', '0', '0', 'iot:authorize:add', '#', 'admin', '2022-04-11 17:17:53', 'admin', '2022-06-04 21:21:59', ''); +INSERT INTO `sys_menu` VALUES (2138, '产品授权码修改', 2043, 8, '#', '', NULL, 1, 0, 'F', '0', '0', 'iot:authorize:edit', '#', 'admin', '2022-04-11 17:17:53', 'admin', '2022-06-04 21:22:08', ''); +INSERT INTO `sys_menu` VALUES (2139, '产品授权码删除', 2043, 9, '#', '', NULL, 1, 0, 'F', '0', '0', 'iot:authorize:remove', '#', 'admin', '2022-04-11 17:17:53', 'admin', '2022-06-04 21:22:26', ''); +INSERT INTO `sys_menu` VALUES (2140, '产品授权码导出', 2043, 5, '#', '', NULL, 1, 0, 'F', '0', '0', 'iot:authorize:export', '#', 'admin', '2022-04-11 17:17:53', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (2141, '三方登录', 1, 12, 'platform', 'iot/platform/index', NULL, 1, 1, 'C', '0', '0', 'iot:platform:list', 'cloud', 'admin', '2022-04-11 18:55:34', 'admin', '2023-08-31 11:10:47', ''); +INSERT INTO `sys_menu` VALUES (2142, '平台查询', 2142, 1, '', NULL, NULL, 1, 0, 'F', '0', '0', 'iot:platform:query', '#', 'admin', '2022-04-11 19:10:28', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (2147, '设备用户列表', 2007, 6, '', NULL, NULL, 1, 0, 'F', '0', '0', 'iot:device:user:list', '#', 'admin', '2022-06-10 01:08:40', 'admin', '2022-06-10 01:10:46', ''); +INSERT INTO `sys_menu` VALUES (2148, '设备定时', 2007, 7, '', NULL, NULL, 1, 0, 'F', '0', '0', 'iot:device:timer:list', '#', 'admin', '2022-06-10 01:10:30', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (2149, '固定大屏', 3049, 2, 'https://lot.keruixinda.com/bigScreen', NULL, NULL, 0, 0, 'C', '0', '0', '', 'monitor', 'admin', '2022-08-13 22:32:11', 'admin', '2023-11-09 15:59:21', ''); +INSERT INTO `sys_menu` VALUES (2167, '可视化管理', 3049, 0, 'https://lot.keruixinda.com/view/#/project/items', NULL, NULL, 0, 0, 'C', '0', '0', '', 'eye-open', 'admin', '2022-11-06 21:44:50', 'zzy', '2024-04-25 12:02:27', ''); +INSERT INTO `sys_menu` VALUES (2168, '通道管理', 3046, 1, 'sip', 'iot/sip/index', NULL, 1, 0, 'C', '0', '0', 'iot:video:list', 'live', 'admin', '2023-02-21 00:21:39', 'admin', '2023-09-24 18:17:12', ''); +INSERT INTO `sys_menu` VALUES (2169, '视频配置查询', 2168, 1, '', NULL, NULL, 1, 0, 'F', '0', '0', 'iot:video:query', '#', 'admin', '2023-02-22 07:55:16', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (2170, '视频配置新增', 2168, 2, '', NULL, NULL, 1, 0, 'F', '0', '0', ' iot:video:add', '#', 'admin', '2023-02-22 07:56:41', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (2171, '视频配置修改', 2168, 3, '', NULL, NULL, 1, 0, 'F', '0', '0', 'iot:video:edit', '#', 'admin', '2023-02-22 07:57:26', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (2172, '视频配置删除', 2168, 4, '', NULL, NULL, 1, 0, 'F', '0', '0', 'iot:video:remove', '#', 'admin', '2023-02-22 07:58:03', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (2173, '固件任务', 3000, 1, 'task', '', NULL, 1, 0, 'F', '0', '0', 'iot:task:list', '#', 'admin', '2023-02-28 01:17:55', '', NULL, '【请填写功能名称】菜单'); +INSERT INTO `sys_menu` VALUES (2174, '固件任务查询', 2173, 1, '#', '', NULL, 1, 0, 'F', '0', '0', 'iot:task:query', '#', 'admin', '2023-02-28 01:18:07', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (2175, '固件任务新增', 2173, 2, '#', '', NULL, 1, 0, 'F', '0', '0', 'iot:task:add', '#', 'admin', '2023-02-28 01:18:07', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (2176, '固件任务修改', 2173, 3, '#', '', NULL, 1, 0, 'F', '0', '0', 'iot:task:edit', '#', 'admin', '2023-02-28 01:18:07', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (2177, '固件任务删除', 2173, 4, '#', '', NULL, 1, 0, 'F', '0', '0', 'iot:task:remove', '#', 'admin', '2023-02-28 01:18:07', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (2178, '固件任务导出', 2173, 5, '#', '', NULL, 1, 0, 'F', '0', '0', 'iot:task:export', '#', 'admin', '2023-02-28 01:18:07', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (2179, '固件详情', 3000, 1, 'detail', '', NULL, 1, 0, 'F', '0', '0', 'iot:detail:list', '#', 'admin', '2023-02-28 01:20:13', '', NULL, '固件详情菜单'); +INSERT INTO `sys_menu` VALUES (2180, '固件详情查询', 2179, 1, '#', '', NULL, 1, 0, 'F', '0', '0', 'iot:detail:query', '#', 'admin', '2023-02-28 01:20:13', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (2181, '固件详情新增', 2179, 2, '#', '', NULL, 1, 0, 'F', '0', '0', 'iot:detail:add', '#', 'admin', '2023-02-28 01:20:13', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (2182, '固件详情修改', 2179, 3, '#', '', NULL, 1, 0, 'F', '0', '0', 'iot:detail:edit', '#', 'admin', '2023-02-28 01:20:13', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (2183, '固件详情删除', 2179, 4, '#', '', NULL, 1, 0, 'F', '0', '0', 'iot:detail:remove', '#', 'admin', '2023-02-28 01:20:13', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (2184, '固件详情导出', 2179, 5, '#', '', NULL, 1, 0, 'F', '0', '0', 'iot:detail:export', '#', 'admin', '2023-02-28 01:20:13', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (3000, '运维管理', 0, 1, 'template', NULL, NULL, 1, 0, 'M', '0', '0', '', 'tree', 'admin', '2021-12-15 23:57:06', 'admin', '2023-02-28 11:51:36', ''); +INSERT INTO `sys_menu` VALUES (3001, '设备服务下发日志', 2000, 1, 'log', 'iot/log/index', NULL, 1, 0, 'F', '0', '0', 'iot:log:list', '#', 'admin', '2023-02-28 11:22:19', '', NULL, '设备服务下发日志菜单'); +INSERT INTO `sys_menu` VALUES (3002, '设备服务下发日志查询', 3001, 1, '#', '', NULL, 1, 0, 'F', '0', '0', 'iot:log:query', '#', 'admin', '2023-02-28 11:22:19', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (3003, '设备服务下发日志新增', 3001, 2, '#', '', NULL, 1, 0, 'F', '0', '0', 'iot:log:add', '#', 'admin', '2023-02-28 11:22:19', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (3004, '设备服务下发日志修改', 3001, 3, '#', '', NULL, 1, 0, 'F', '0', '0', 'iot:log:edit', '#', 'admin', '2023-02-28 11:22:19', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (3005, '设备服务下发日志删除', 3001, 4, '#', '', NULL, 1, 0, 'F', '0', '0', 'iot:log:remove', '#', 'admin', '2023-02-28 11:22:19', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (3006, '设备服务下发日志导出', 3001, 5, '#', '', NULL, 1, 0, 'F', '0', '0', 'iot:log:export', '#', 'admin', '2023-02-28 11:22:19', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (3007, '协议管理', 3000, 1, 'protocol', 'iot/protocol/index', NULL, 1, 0, 'C', '0', '0', 'iot:protocol:list', 'connect', 'admin', '2023-02-28 11:26:54', 'admin', '2023-04-12 22:02:14', '协议菜单'); +INSERT INTO `sys_menu` VALUES (3008, '协议查询', 3007, 1, '#', '', NULL, 1, 0, 'F', '0', '0', 'iot:protocol:query', '#', 'admin', '2023-02-28 11:26:54', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (3009, '协议新增', 3007, 2, '#', '', NULL, 1, 0, 'F', '0', '0', 'iot:protocol:add', '#', 'admin', '2023-02-28 11:26:54', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (3010, '协议修改', 3007, 3, '#', '', NULL, 1, 0, 'F', '0', '0', 'iot:protocol:edit', '#', 'admin', '2023-02-28 11:26:54', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (3011, '协议删除', 3007, 4, '#', '', NULL, 1, 0, 'F', '0', '0', 'iot:protocol:remove', '#', 'admin', '2023-02-28 11:26:54', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (3012, '协议导出', 3007, 5, '#', '', NULL, 1, 0, 'F', '0', '0', 'iot:protocol:export', '#', 'admin', '2023-02-28 11:26:55', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (3031, 'Netty管理', 0, 7, 'netty', NULL, NULL, 1, 0, 'M', '0', '0', '', 'mq', 'admin', '2022-02-26 00:42:12', 'admin', '2023-09-27 01:48:40', ''); +INSERT INTO `sys_menu` VALUES (3032, '客户端', 3031, 1, 'client', 'iot/netty/clients', NULL, 1, 0, 'C', '0', '0', 'iot:emqx:client', 'client', 'admin', '2022-02-26 00:45:39', 'admin', '2022-06-03 14:11:22', ''); +INSERT INTO `sys_menu` VALUES (3033, '事件日志', 2000, 1, 'log', 'iot/log/index', NULL, 1, 0, 'F', '0', '0', 'iot:event:list', '#', 'admin', '2023-03-28 14:23:52', '', NULL, '事件日志菜单'); +INSERT INTO `sys_menu` VALUES (3034, '事件日志查询', 3033, 1, '#', '', NULL, 1, 0, 'F', '0', '0', 'iot:event:query', '#', 'admin', '2023-03-28 14:23:52', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (3035, '事件日志新增', 3033, 2, '#', '', NULL, 1, 0, 'F', '0', '0', 'iot:event:add', '#', 'admin', '2023-03-28 14:23:52', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (3036, '事件日志修改', 3033, 3, '#', '', NULL, 1, 0, 'F', '0', '0', 'iot:event:edit', '#', 'admin', '2023-03-28 14:23:52', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (3037, '事件日志删除', 3033, 4, '#', '', NULL, 1, 0, 'F', '0', '0', 'iot:event:remove', '#', 'admin', '2023-03-28 14:23:52', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (3038, '事件日志导出', 3033, 5, '#', '', NULL, 1, 0, 'F', '0', '0', 'iot:event:export', '#', 'admin', '2023-03-28 14:23:52', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (3044, '服务下发', 2007, 9, '', NULL, NULL, 1, 0, 'F', '0', '0', 'iot:service:invoke', '#', 'admin', '2023-06-29 22:55:58', 'admin', '2024-01-19 11:40:10', ''); +INSERT INTO `sys_menu` VALUES (3046, '视频中心', 0, 3, 'video', NULL, NULL, 1, 0, 'M', '0', '0', '', 'build', 'admin', '2023-05-16 22:05:11', 'admin', '2023-07-06 16:22:36', ''); +INSERT INTO `sys_menu` VALUES (3047, '分屏显示', 3046, 0, 'splitview', 'iot/sip/splitview', NULL, 1, 0, 'C', '0', '0', '', 'build', 'admin', '2023-05-16 22:08:33', 'admin', '2023-05-20 15:31:06', ''); +INSERT INTO `sys_menu` VALUES (3048, '视频配置', 3046, 2, 'mediaServer', 'iot/sip/mediaServer', NULL, 1, 0, 'C', '0', '0', '', 'edit', 'admin', '2023-05-16 22:09:10', 'admin', '2023-09-24 18:17:22', ''); +INSERT INTO `sys_menu` VALUES (3049, '数字孪生', 0, 4, 'screen', NULL, NULL, 1, 0, 'M', '0', '0', '', 'monitor-a', 'admin', '2023-07-06 16:16:31', 'admin', '2025-01-07 14:04:11', ''); +INSERT INTO `sys_menu` VALUES (3051, '规则引擎', 0, 4, 'ruleengine', NULL, NULL, 1, 0, 'M', '0', '0', '', 'channel', 'admin', '2023-07-03 21:22:19', 'admin', '2023-11-13 10:46:00', ''); +INSERT INTO `sys_menu` VALUES (3052, '可视化大屏', 3049, 3, 'https://lot.keruixinda.com/view/#/chart/preview/8bfbff4471264767a6b34f9da254de44', NULL, NULL, 0, 0, 'C', '0', '0', '', 'monitor', 'admin', '2023-07-06 16:52:01', 'admin', '2023-11-09 15:59:52', ''); +INSERT INTO `sys_menu` VALUES (3055, '规则脚本', 3051, 2, 'script', 'iot/scene/script', NULL, 1, 0, 'C', '0', '0', 'iot:script:list', 'code', 'admin', '2023-07-06 21:03:14', 'admin', '2024-02-18 16:27:50', ''); +INSERT INTO `sys_menu` VALUES (3099, '录像管理', 3046, 3, 'record', 'iot/record/record', NULL, 1, 0, 'C', '0', '0', '', 'video', 'admin', '2023-05-16 22:09:34', 'admin', '2023-09-24 18:14:42', ''); +INSERT INTO `sys_menu` VALUES (3100, 'Mqtt统计', 3031, 2, 'mqtt', 'iot/netty/mqtt', NULL, 1, 0, 'C', '0', '0', 'monitor:server:list', 'monitor', 'admin', '2023-09-02 22:16:21', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (3102, '通知渠道', 3000, 7, 'channel', 'notify/channel/index', NULL, 1, 0, 'C', '0', '0', 'notify:channel:list', 'notify_channel', 'admin', '2023-12-01 10:18:40', 'admin', '2024-01-03 11:00:37', '通知渠道菜单'); +INSERT INTO `sys_menu` VALUES (3103, '通知渠道查询', 3102, 1, '#', '', NULL, 1, 0, 'F', '0', '0', 'notify:channel:query', '#', 'admin', '2023-12-01 10:18:40', 'admin', '2024-01-03 11:01:24', ''); +INSERT INTO `sys_menu` VALUES (3104, '通知渠道新增', 3102, 2, '#', '', NULL, 1, 0, 'F', '0', '0', 'notify:channel:add', '#', 'admin', '2023-12-01 10:18:40', 'admin', '2024-01-03 11:01:31', ''); +INSERT INTO `sys_menu` VALUES (3105, '通知渠道修改', 3102, 3, '#', '', NULL, 1, 0, 'F', '0', '0', 'notify:channel:edit', '#', 'admin', '2023-12-01 10:18:40', 'admin', '2024-01-03 11:01:36', ''); +INSERT INTO `sys_menu` VALUES (3106, '通知渠道删除', 3102, 4, '#', '', NULL, 1, 0, 'F', '0', '0', 'notify:channel:remove', '#', 'admin', '2023-12-01 10:18:40', 'admin', '2024-01-03 11:01:41', ''); +INSERT INTO `sys_menu` VALUES (3107, '通知渠道导出', 3102, 5, '#', '', NULL, 1, 0, 'F', '0', '0', 'notify:channel:export', '#', 'admin', '2023-12-01 10:18:41', 'admin', '2024-01-03 11:01:52', ''); +INSERT INTO `sys_menu` VALUES (3108, '通知模板', 3000, 7, 'notifyTemplate', 'notify/template/index', NULL, 1, 0, 'C', '0', '0', 'notify:template:list', 'template', 'admin', '2023-12-22 15:19:44', 'admin', '2024-01-03 11:02:12', ''); +INSERT INTO `sys_menu` VALUES (3109, '通知模板查询', 3108, 1, '', NULL, NULL, 1, 0, 'F', '0', '0', 'notify:template:query', '#', 'admin', '2024-01-03 11:02:55', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (3110, '通知模板新增', 3108, 2, '', NULL, NULL, 1, 0, 'F', '0', '0', 'notify:template:add', '#', 'admin', '2024-01-03 11:03:23', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (3111, '通知模板修改', 3108, 3, '', NULL, NULL, 1, 0, 'F', '0', '0', 'notify:template:edit', '#', 'admin', '2024-01-03 11:03:40', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (3112, '通知模板删除', 3108, 4, '', NULL, NULL, 1, 0, 'F', '0', '0', 'notify:template:remove', '#', 'admin', '2024-01-03 11:03:55', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (3113, '通知模板导出', 3108, 5, '', NULL, NULL, 1, 0, 'F', '0', '0', 'notify:template:export', '#', 'admin', '2024-01-03 11:04:16', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (3114, '通知模板测试', 3108, 6, '', NULL, NULL, 1, 0, 'F', '0', '0', 'notify:template:send', '#', 'admin', '2024-01-03 11:07:19', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (3115, '通知日志', 3000, 7, 'notifylog', 'notify/log/index', NULL, 1, 0, 'C', '0', '0', 'notify:log:list', 'notify_log', 'admin', '2023-12-28 10:10:52', 'admin', '2024-01-03 11:05:11', ''); +INSERT INTO `sys_menu` VALUES (3116, '通知日志导出', 3115, 2, '', NULL, NULL, 1, 0, 'F', '0', '0', 'notify:log:export', '#', 'admin', '2024-01-03 11:06:11', 'admin', '2024-02-19 09:08:12', ''); +INSERT INTO `sys_menu` VALUES (3117, '通知日志删除', 3115, 3, '', NULL, NULL, 1, 0, 'F', '0', '0', 'notify:log:remove', '#', 'admin', '2024-01-03 11:06:31', 'admin', '2024-02-19 09:08:16', ''); +INSERT INTO `sys_menu` VALUES (3147, '告警配置', 3051, 6, 'alert', 'iot/alert/index', NULL, 1, 0, 'C', '0', '0', 'iot:alert:list', 'alert', 'admin', '2023-11-12 10:58:01', 'admin', '2024-02-01 02:36:17', ''); +INSERT INTO `sys_menu` VALUES (3148, '规则脚本导出', 3055, 5, '', NULL, NULL, 1, 0, 'F', '0', '0', 'iot:script:export', '#', 'admin', '2024-02-18 16:29:02', 'admin', '2024-02-18 16:38:04', ''); +INSERT INTO `sys_menu` VALUES (3149, '规则脚本查询', 3055, 1, '', NULL, NULL, 1, 0, 'F', '0', '0', 'iot:script:query', '#', 'admin', '2024-02-18 16:29:22', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (3150, '规则脚本新增', 3055, 2, '', NULL, NULL, 1, 0, 'F', '0', '0', 'iot:script:add', '#', 'admin', '2024-02-18 16:29:41', 'admin', '2024-02-18 16:37:42', ''); +INSERT INTO `sys_menu` VALUES (3151, '规则脚本修改', 3055, 3, '', NULL, NULL, 1, 0, 'F', '0', '0', 'iot:script:edit', '#', 'admin', '2024-02-18 16:30:03', 'admin', '2024-02-18 16:37:50', ''); +INSERT INTO `sys_menu` VALUES (3152, '规则脚本删除', 3055, 4, '', NULL, NULL, 1, 0, 'F', '0', '0', 'iot:script:remove', '#', 'admin', '2024-02-18 16:30:20', 'admin', '2024-02-18 16:37:59', ''); +INSERT INTO `sys_menu` VALUES (3153, '告警配置导出', 3147, 5, '', NULL, NULL, 1, 0, 'F', '0', '0', 'iot:alert:export', '#', 'admin', '2024-02-18 16:35:43', 'admin', '2024-02-18 16:38:29', ''); +INSERT INTO `sys_menu` VALUES (3154, '告警配置查询', 3147, 1, '', NULL, NULL, 1, 0, 'F', '0', '0', 'iot:alert:query', '#', 'admin', '2024-02-18 16:36:07', 'admin', '2024-02-18 16:38:22', ''); +INSERT INTO `sys_menu` VALUES (3155, '告警配置新增', 3147, 2, '', NULL, NULL, 1, 0, 'F', '0', '0', 'iot:alert:add', '#', 'admin', '2024-02-18 16:36:35', 'admin', '2024-02-18 16:38:35', ''); +INSERT INTO `sys_menu` VALUES (3156, '告警配置修改', 3147, 3, '', NULL, NULL, 1, 0, 'F', '0', '0', 'iot:alert:edit', '#', 'admin', '2024-02-18 16:37:00', 'admin', '2024-02-18 16:38:40', ''); +INSERT INTO `sys_menu` VALUES (3157, '告警配置删除', 3147, 4, '', NULL, NULL, 1, 0, 'F', '0', '0', 'iot:alert:remove', '#', 'admin', '2024-02-18 16:37:22', 'admin', '2024-02-18 16:38:46', ''); +INSERT INTO `sys_menu` VALUES (3158, '通知日志详情', 3115, 1, '', NULL, NULL, 1, 0, 'F', '0', '0', 'notify:log:query', '#', 'admin', '2024-02-19 09:08:06', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (3190, '音箱对接', 0, 3, 'speaker', NULL, NULL, 1, 0, 'M', '1', '0', '', 'cloud', 'admin', '2023-10-17 09:14:05', 'admin', '2025-01-08 16:00:21', ''); +INSERT INTO `sys_menu` VALUES (3191, '音箱配置', 3190, 1, 'clientDetails', 'speaker/clientDetails/index', NULL, 1, 0, 'C', '0', '0', 'iot:clientDetails:list', 'speaker', 'admin', '2022-02-07 22:08:58', 'admin', '2023-12-11 15:55:43', '云云对接菜单'); +INSERT INTO `sys_menu` VALUES (3197, '小度音箱', 3190, 2, 'dueros', 'speaker/dueros/index', NULL, 1, 0, 'C', '0', '0', 'dueros:relatedProduct:list', 'dueros', 'admin', '2023-10-19 17:03:10', 'admin', '2023-12-07 11:13:45', '小度音箱'); +INSERT INTO `sys_menu` VALUES (3198, '关联产品查询', 3197, 0, '', NULL, NULL, 1, 0, 'F', '0', '0', 'dueros:relatedProduct:query', '#', 'admin', '2023-12-06 11:10:41', 'admin', '2023-12-06 15:13:56', ''); +INSERT INTO `sys_menu` VALUES (3199, '关联物模查询', 3197, 4, '', NULL, NULL, 1, 0, 'F', '0', '0', 'dueros:relatedThingsModel:query', '#', 'admin', '2023-12-06 11:14:27', 'admin', '2023-12-06 15:15:28', ''); +INSERT INTO `sys_menu` VALUES (3200, '关联产品新增', 3197, 1, '#', '', NULL, 1, 0, 'F', '0', '0', 'dueros:relatedProduct:add', '#', 'admin', '2023-10-19 17:03:10', 'admin', '2023-12-06 15:14:55', ''); +INSERT INTO `sys_menu` VALUES (3201, '关联产品删除', 3197, 3, '#', '', NULL, 1, 0, 'F', '0', '0', 'dueros:relatedProduct:delete', '#', 'admin', '2023-10-19 17:03:10', 'admin', '2023-12-06 15:15:16', ''); +INSERT INTO `sys_menu` VALUES (3202, '关联产品编辑', 3197, 2, '#', '', NULL, 1, 0, 'F', '0', '0', 'dueros:relatedProduct:edit', '#', 'admin', '2023-10-19 17:03:10', 'admin', '2023-12-06 15:15:08', ''); +INSERT INTO `sys_menu` VALUES (3203, '关联物模编辑', 3197, 5, '#', '', NULL, 1, 0, 'F', '0', '0', 'dueros:relatedThingsModel:edit', '#', 'admin', '2023-10-19 17:03:10', 'admin', '2023-12-06 15:17:28', ''); +INSERT INTO `sys_menu` VALUES (3204, '关联物模删除', 3197, 6, '#', '', NULL, 1, 0, 'F', '0', '0', 'dueros:relatedThingsModel:delete', '#', 'admin', '2023-10-19 17:03:10', 'admin', '2023-12-06 15:17:35', ''); +INSERT INTO `sys_menu` VALUES (3206, '产品模型列表', 2043, 10, '', NULL, NULL, 1, 0, 'F', '0', '0', 'iot:model:list', '#', 'admin', '2024-03-18 17:01:05', 'admin', '2024-03-18 17:01:17', ''); +INSERT INTO `sys_menu` VALUES (3207, '产品模型详情', 2043, 11, '', NULL, NULL, 1, 0, 'F', '0', '0', 'iot:model:query', '#', 'admin', '2024-03-18 17:01:05', 'admin', '2024-03-18 17:01:17', ''); +INSERT INTO `sys_menu` VALUES (3208, '产品模型导入', 2043, 12, '', NULL, NULL, 1, 0, 'F', '0', '0', 'iot:model:import', '#', 'admin', '2024-03-18 17:01:05', 'admin', '2024-03-18 17:01:17', ''); +INSERT INTO `sys_menu` VALUES (3209, '产品模型新增', 2043, 13, '', NULL, NULL, 1, 0, 'F', '0', '0', 'iot:model:add', '#', 'admin', '2024-03-18 17:01:05', 'admin', '2024-03-18 17:01:17', ''); +INSERT INTO `sys_menu` VALUES (3210, '产品模型修改', 2043, 14, '', NULL, NULL, 1, 0, 'F', '0', '0', 'iot:model:edit', '#', 'admin', '2024-03-18 17:01:05', 'admin', '2024-03-18 17:01:17', ''); +INSERT INTO `sys_menu` VALUES (3211, '产品模型删除', 2043, 15, '', NULL, NULL, 1, 0, 'F', '0', '0', 'iot:model:remove', '#', 'admin', '2024-03-18 17:01:05', 'admin', '2024-03-18 17:01:17', ''); +INSERT INTO `sys_menu` VALUES (3214, '设备定时详情', 2148, 1, '', NULL, NULL, 1, 0, 'F', '0', '0', 'iot:device:timer:query', '#', 'admin', '2024-03-19 11:18:22', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (3215, '设备定时新增', 2148, 2, '', NULL, NULL, 1, 0, 'F', '0', '0', 'iot:device:timer:add', '#', 'admin', '2024-03-19 11:18:22', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (3216, '设备定时修改', 2148, 3, '', NULL, NULL, 1, 0, 'F', '0', '0', 'iot:device:timer:edit', '#', 'admin', '2024-03-19 11:18:22', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (3217, '设备定时执行', 2148, 4, '', NULL, NULL, 1, 0, 'F', '0', '0', 'iot:device:timer:execute', '#', 'admin', '2024-03-19 11:18:22', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (3218, '设备定时删除', 2148, 5, '', NULL, NULL, 1, 0, 'F', '0', '0', 'iot:device:timer:remove', '#', 'admin', '2024-03-19 11:18:22', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (3219, '设备用户详情', 2147, 1, '', NULL, NULL, 1, 0, 'F', '0', '0', 'iot:device:user:query', '#', 'admin', '2024-03-19 11:18:22', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (3220, '分享设备', 2147, 1, '', NULL, NULL, 1, 0, 'F', '0', '0', 'iot:device:user:share', '#', 'admin', '2024-03-19 11:18:22', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (3221, '设备用户修改', 2147, 2, '', NULL, NULL, 1, 0, 'F', '0', '0', 'iot:device:user:edit', '#', 'admin', '2024-03-19 11:18:22', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (3222, '取消分享', 2147, 3, '', NULL, NULL, 1, 0, 'F', '0', '0', 'iot:device:user:remove', '#', 'admin', '2024-03-19 11:18:22', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (3223, '录像管理列表', 3099, 1, '', NULL, NULL, 1, 0, 'F', '0', '0', 'iot:sip:record:list', '#', 'admin', '2024-03-19 11:18:22', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (3224, '查看录像', 3099, 1, '', NULL, NULL, 1, 0, 'F', '0', '0', 'iot:sip:record:query', '#', 'admin', '2024-03-19 11:18:22', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (3225, '录像下载', 3099, 1, '', NULL, NULL, 1, 0, 'F', '0', '0', 'iot:sip:record:download', '#', 'admin', '2024-03-19 11:18:22', 'admin', '2024-03-19 15:48:36', ''); +INSERT INTO `sys_menu` VALUES (3226, '场景联动执行', 2085, 6, '', NULL, NULL, 1, 0, 'F', '0', '0', 'iot:scene:run', '#', 'admin', '2024-03-19 16:15:22', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (3227, '字典刷新', 105, 6, '', NULL, NULL, 1, 0, 'F', '0', '0', 'system:dict:refresh', '#', 'admin', '2024-03-19 16:38:13', 'admin', '2024-03-19 16:38:35', ''); +INSERT INTO `sys_menu` VALUES (3228, '参数刷新', 106, 6, '', NULL, NULL, 1, 0, 'F', '0', '0', 'system:config:refresh', '#', 'admin', '2024-03-19 16:40:31', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (3229, '三方登录详情', 2141, 1, '', NULL, NULL, 1, 0, 'F', '0', '0', 'iot:platform:query', '#', 'admin', '2024-03-19 11:18:22', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (3230, '三方登录新增', 2141, 1, '', NULL, NULL, 1, 0, 'F', '0', '0', 'iot:platform:add', '#', 'admin', '2024-03-19 11:18:22', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (3231, '三方登录修改', 2141, 1, '', NULL, NULL, 1, 0, 'F', '0', '0', 'iot:platform:edit', '#', 'admin', '2024-03-19 11:18:22', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (3232, '三方登录导出', 2141, 1, '', NULL, NULL, 1, 0, 'F', '0', '0', 'iot:platform:export', '#', 'admin', '2024-03-19 11:18:22', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (3233, '三方登录删除', 2141, 1, '', NULL, NULL, 1, 0, 'F', '0', '0', 'iot:platform:remove', '#', 'admin', '2024-03-19 11:18:22', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (3234, '任务执行', 110, 8, '', NULL, NULL, 1, 0, 'F', '0', '0', 'monitor:job:run', '#', 'admin', '2024-03-19 17:05:29', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (3235, '缓存列表', 124, 1, '', NULL, NULL, 1, 0, 'F', '0', '0', 'monitor:cache:list', '#', 'admin', '2024-03-19 17:09:49', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (3236, '缓存删除', 124, 2, '', NULL, NULL, 1, 0, 'F', '0', '0', 'monitor:cache:remove', '#', 'admin', '2024-03-19 17:10:15', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (3237, '客户端列表', 3032, 1, '', NULL, NULL, 1, 0, 'F', '0', '0', 'iot:emqx:client:list', '#', 'admin', '2024-03-19 17:19:32', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (3238, '客户端踢出', 3032, 2, '', NULL, NULL, 1, 0, 'F', '0', '0', 'iot:emqx:client:remove', '#', 'admin', '2024-03-19 17:20:00', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (3239, '设备分配', 2007, 10, '', NULL, NULL, 1, 0, 'F', '0', '0', 'iot:device:assignment', '#', 'admin', '2024-04-10 09:40:59', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (3240, '设备回收', 2007, 11, '', NULL, NULL, 1, 0, 'F', '0', '0', 'iot:device:recovery', '#', 'admin', '2024-04-10 09:41:16', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (3247, '设备分享列表', 2007, 1, 'share', 'iot/share/index', NULL, 1, 0, 'C', '0', '0', 'iot:share:list', '#', 'admin', '2024-04-17 14:33:01', '', NULL, '设备分享菜单'); +INSERT INTO `sys_menu` VALUES (3248, '设备分享用户', 3247, 1, '#', '', NULL, 1, 0, 'F', '0', '0', 'iot:share:user', '#', 'admin', '2024-04-17 14:33:01', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (3249, '设备分享详情', 3247, 1, '#', '', NULL, 1, 0, 'F', '0', '0', 'iot:share:query', '#', 'admin', '2024-04-17 14:33:01', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (3250, '设备分享新增', 3247, 2, '#', '', NULL, 1, 0, 'F', '0', '0', 'iot:share:add', '#', 'admin', '2024-04-17 14:33:01', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (3251, '设备分享修改', 3247, 3, '#', '', NULL, 1, 0, 'F', '0', '0', 'iot:share:edit', '#', 'admin', '2024-04-17 14:33:01', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (3252, '设备分享删除', 3247, 4, '#', '', NULL, 1, 0, 'F', '0', '0', 'iot:share:remove', '#', 'admin', '2024-04-17 14:33:01', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (3253, '设备分享导出', 3247, 5, '#', '', NULL, 1, 0, 'F', '0', '0', 'iot:share:export', '#', 'admin', '2024-04-17 14:33:01', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (3254, '设备定时导出', 2148, 5, '', NULL, NULL, 1, 0, 'F', '0', '0', 'iot:device:timer:export', '#', 'admin', '2024-03-19 11:18:22', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (3255, '设备联动', 2000, 7, 'linkage', 'iot/device/device-linkage', NULL, 1, 0, 'C', '0', '0', NULL, 'tree-table', 'admin', '2024-05-10 17:54:12', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (3256, '终端用户', 5, 5, 'terminal', 'system/terminalUser/index', NULL, 1, 0, 'C', '0', '0', NULL, 'build', 'admin', '2024-05-10 17:55:00', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (3257, '告警用户', 2007, 1, 'user', 'iot/device/alert/user', NULL, 1, 0, 'C', '0', '0', 'iot:device:alert:user:list', '#', 'admin', '2024-05-16 10:50:44', '', NULL, '设备告警用户菜单'); +INSERT INTO `sys_menu` VALUES (3258, '告警用户查询', 3257, 1, '#', '', NULL, 1, 0, 'F', '0', '0', 'iot:device:alert:user:query', '#', 'admin', '2024-05-16 10:50:44', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (3259, '告警用户新增', 3257, 2, '#', '', NULL, 1, 0, 'F', '0', '0', 'iot:device:alert:user:add', '#', 'admin', '2024-05-16 10:50:45', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (3260, '告警用户删除', 3257, 3, '#', '', NULL, 1, 0, 'F', '0', '0', 'iot:device:alert:user:remove', '#', 'admin', '2024-05-16 10:50:45', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (3261, '文件记录', 3046, 4, 'detail', 'system/oss/index', NULL, 1, 0, 'C', '0', '0', 'oss:detail:list', 'documentation', 'admin', '2024-07-29 17:32:41', '', NULL, '文件记录菜单'); +INSERT INTO `sys_menu` VALUES (3262, '文件记录查询', 3261, 1, '#', '', NULL, 1, 0, 'F', '0', '0', 'oss:detail:query', '#', 'admin', '2024-07-29 17:32:41', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (3263, '文件记录新增', 3261, 2, '#', '', NULL, 1, 0, 'F', '0', '0', 'oss:detail:add', '#', 'admin', '2024-07-29 17:32:41', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (3264, '文件记录修改', 3261, 3, '#', '', NULL, 1, 0, 'F', '0', '0', 'oss:detail:edit', '#', 'admin', '2024-07-29 17:32:41', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (3265, '文件记录删除', 3261, 4, '#', '', NULL, 1, 0, 'F', '0', '0', 'oss:detail:remove', '#', 'admin', '2024-07-29 17:32:41', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (3266, '文件记录导出', 3261, 5, '#', '', NULL, 1, 0, 'F', '0', '0', 'oss:detail:export', '#', 'admin', '2024-07-29 17:32:41', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (3267, '文件存储配置新增', 3261, 6, '', NULL, NULL, 1, 0, 'F', '0', '0', 'oss:config:add', '#', 'admin', '2024-07-29 17:32:41', 'admin', NULL, ''); +INSERT INTO `sys_menu` VALUES (3268, '文件存储配置修改', 3261, 7, '', NULL, NULL, 1, 0, 'F', '0', '0', 'oss:config:edit', '#', 'admin', '2024-07-29 17:32:41', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (3269, '文件存储配置删除', 3261, 8, '', NULL, NULL, 1, 0, 'F', '0', '0', 'oss:config:remove', '#', 'admin', '2024-07-29 17:32:41', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (3270, '数据桥接', 3051, 1, 'bridge', 'iot/bridge/index', NULL, 1, 0, 'C', '0', '0', 'iot:bridge:list', 'mq', 'admin', '2024-07-29 17:33:34', '', NULL, '数据桥接菜单'); +INSERT INTO `sys_menu` VALUES (3271, '数据桥接查询', 3270, 1, '#', '', NULL, 1, 0, 'F', '0', '0', 'iot:bridge:query', '#', 'admin', '2024-07-29 17:33:34', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (3272, '数据桥接新增', 3270, 2, '#', '', NULL, 1, 0, 'F', '0', '0', 'iot:bridge:add', '#', 'admin', '2024-07-29 17:33:34', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (3273, '数据桥接修改', 3270, 3, '#', '', NULL, 1, 0, 'F', '0', '0', 'iot:bridge:edit', '#', 'admin', '2024-07-29 17:33:34', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (3274, '数据桥接删除', 3270, 4, '#', '', NULL, 1, 0, 'F', '0', '0', 'iot:bridge:remove', '#', 'admin', '2024-07-29 17:33:34', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (3275, '数据桥接导出', 3270, 5, '#', '', NULL, 1, 0, 'F', '0', '0', 'iot:bridge:export', '#', 'admin', '2024-07-29 17:33:34', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (3276, '密码修改', 5, 6, '', NULL, NULL, 1, 0, 'F', '0', '0', 'systerm:user:updatePwd', '#', 'admin', '2024-07-12 15:25:46', 'admin', '2024-07-12 15:26:36', ''); +INSERT INTO `sys_menu` VALUES (3277, '设备编号批量生成', 2007, 14, '', NULL, NULL, 1, 0, 'F', '0', '0', 'iot:device:batchGenerator', '#', 'admin', '2024-07-19 15:28:56', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (3278, '设备记录导出', 2007, 13, '', NULL, NULL, 1, 0, 'F', '0', '0', 'iot:device:record:export', '#', 'admin', '2024-07-19 15:28:25', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (3279, '设备记录', 2007, 12, '', NULL, NULL, 1, 0, 'F', '0', '0', 'iot:device:record:list', '#', 'admin', '2024-07-19 15:28:01', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (3280, '系统授权', 3, 1, 'sysclient', 'system/sysclient/index', NULL, 1, 0, 'C', '0', '0', 'system:sysclient:list', 'authenticate', 'admin', '2024-07-29 17:33:34', '', NULL, '系统授权菜单'); +INSERT INTO `sys_menu` VALUES (3281, '系统授权查询', 3280, 1, '#', '', NULL, 1, 0, 'F', '0', '0', 'system:sysclient:query', '#', 'admin', '2024-07-29 17:33:34', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (3282, '系统授权新增', 3280, 2, '#', '', NULL, 1, 0, 'F', '0', '0', 'system:sysclient:add', '#', 'admin', '2024-07-29 17:33:34', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (3283, '系统授权修改', 3280, 3, '#', '', NULL, 1, 0, 'F', '0', '0', 'system:sysclient:edit', '#', 'admin', '2024-07-29 17:33:34', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (3284, '系统授权删除', 3280, 4, '#', '', NULL, 1, 0, 'F', '0', '0', 'system:sysclient:remove', '#', 'admin', '2024-07-29 17:33:34', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (3285, '系统授权导出', 3280, 5, '#', '', NULL, 1, 0, 'F', '0', '0', 'system:sysclient:export', '#', 'admin', '2024-07-29 17:33:34', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (3286, '产品modbus配置参数', 2043, 1, 'params', '', NULL, 1, 0, 'M', '0', '0', 'modbus:params:list', '#', 'admin', '2024-07-22 14:51:08', '', NULL, '产品modbus配置参数菜单'); +INSERT INTO `sys_menu` VALUES (3287, '产品modbus配置参数查询', 3286, 1, '#', '', NULL, 1, 0, 'F', '0', '0', 'modbus:params:query', '#', 'admin', '2024-07-22 14:51:08', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (3288, '产品modbus配置参数新增', 3286, 2, '#', '', NULL, 1, 0, 'F', '0', '0', 'modbus:params:add', '#', 'admin', '2024-07-22 14:51:08', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (3289, '产品modbus配置参数修改', 3286, 3, '#', '', NULL, 1, 0, 'F', '0', '0', 'modbus:params:edit', '#', 'admin', '2024-07-22 14:51:08', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (3290, '产品modbus配置参数删除', 3286, 4, '#', '', NULL, 1, 0, 'F', '0', '0', 'modbus:params:remove', '#', 'admin', '2024-07-22 14:51:08', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (3291, '产品modbus配置参数导出', 3286, 5, '#', '', NULL, 1, 0, 'F', '0', '0', 'modbus:params:export', '#', 'admin', '2024-07-22 14:51:08', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (3292, '轮训任务', 2007, 1, 'modbusjob', '', NULL, 1, 0, 'M', '0', '0', 'modbus:job:list', '#', 'admin', '2024-07-22 14:51:08', '', NULL, '轮训任务列菜单'); +INSERT INTO `sys_menu` VALUES (3293, '轮训任务查询', 3292, 1, '#', '', NULL, 1, 0, 'F', '0', '0', 'modbus:job:query', '#', 'admin', '2024-07-22 14:51:08', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (3294, '轮训任务新增', 3292, 2, '#', '', NULL, 1, 0, 'F', '0', '0', 'modbus:job:add', '#', 'admin', '2024-07-22 14:51:08', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (3295, '轮训任务修改', 3292, 3, '#', '', NULL, 1, 0, 'F', '0', '0', 'modbus:job:edit', '#', 'admin', '2024-07-22 14:51:08', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (3296, '轮训任务删除', 3292, 4, '#', '', NULL, 1, 0, 'F', '0', '0', 'modbus:job:remove', '#', 'admin', '2024-07-22 14:51:09', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (3297, '轮训任务导出', 3292, 5, '#', '', NULL, 1, 0, 'F', '0', '0', 'modbus:job:export', '#', 'admin', '2024-07-22 14:51:09', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (3298, 'modbus配置', 2043, 1, 'config', '', NULL, 1, 0, 'M', '0', '0', 'modbus:config:list', '#', 'admin', '2024-07-22 14:51:09', '', NULL, 'modbus配置菜单'); +INSERT INTO `sys_menu` VALUES (3299, 'modbus配置查询', 3298, 1, '#', '', NULL, 1, 0, 'F', '0', '0', 'modbus:config:query', '#', 'admin', '2024-07-22 14:51:09', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (3300, 'modbus配置新增', 3298, 2, '#', '', NULL, 1, 0, 'F', '0', '0', 'modbus:config:add', '#', 'admin', '2024-07-22 14:51:09', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (3301, 'modbus配置修改', 3298, 3, '#', '', NULL, 1, 0, 'F', '0', '0', 'modbus:config:edit', '#', 'admin', '2024-07-22 14:51:09', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (3302, 'modbus配置删除', 3298, 4, '#', '', NULL, 1, 0, 'F', '0', '0', 'modbus:config:remove', '#', 'admin', '2024-07-22 14:51:09', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (3303, 'modbus配置导出', 3298, 5, '#', '', NULL, 1, 0, 'F', '0', '0', 'modbus:config:export', '#', 'admin', '2024-07-22 14:51:09', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (3304, '指令偏好设置', 2007, 1, 'preferences', '', NULL, 1, 0, 'M', '0', '0', 'order:preferences:list', '#', 'admin', '2024-07-22 14:51:09', '', NULL, '指令偏好设置菜单'); +INSERT INTO `sys_menu` VALUES (3305, '指令偏好设置查询', 3304, 1, '#', '', NULL, 1, 0, 'F', '0', '0', 'order:preferences:query', '#', 'admin', '2024-07-22 14:51:09', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (3306, '指令偏好设置新增', 3304, 2, '#', '', NULL, 1, 0, 'F', '0', '0', 'order:preferences:add', '#', 'admin', '2024-07-22 14:51:09', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (3307, '指令偏好设置修改', 3304, 3, '#', '', NULL, 1, 0, 'F', '0', '0', 'order:preferences:edit', '#', 'admin', '2024-07-22 14:51:09', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (3308, '指令偏好设置删除', 3304, 4, '#', '', NULL, 1, 0, 'F', '0', '0', 'order:preferences:remove', '#', 'admin', '2024-07-22 14:51:09', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (3309, '指令偏好设置导出', 3304, 5, '#', '', NULL, 1, 0, 'F', '0', '0', 'order:preferences:export', '#', 'admin', '2024-07-22 14:51:09', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (3310, '指令权限', 3000, 1, 'control', 'iot/order/index', NULL, 1, 0, 'C', '0', '0', 'order:control:list', 'switch', 'admin', '2024-07-15 22:57:16', 'admin', '2024-07-18 13:56:56', '指令权限控制菜单'); +INSERT INTO `sys_menu` VALUES (3311, '指令权限控制查询', 3310, 1, '#', '', NULL, 1, 0, 'F', '0', '0', 'order:control:query', '#', 'admin', '2024-07-15 22:57:16', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (3312, '指令权限控制新增', 3310, 2, '#', '', NULL, 1, 0, 'F', '0', '0', 'order:control:add', '#', 'admin', '2024-07-15 22:57:16', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (3313, '指令权限控制修改', 3310, 3, '#', '', NULL, 1, 0, 'F', '0', '0', 'order:control:edit', '#', 'admin', '2024-07-15 22:57:16', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (3314, '指令权限控制删除', 3310, 4, '#', '', NULL, 1, 0, 'F', '0', '0', 'order:control:remove', '#', 'admin', '2024-07-15 22:57:16', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (3315, '指令权限控制导出', 3310, 5, '#', '', NULL, 1, 0, 'F', '0', '0', 'order:control:export', '#', 'admin', '2024-07-15 22:57:16', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (3316, '场景管理', 0, 1, 'scene', NULL, NULL, 1, 0, 'M', '0', '0', '', 'scene', 'admin', '2024-05-17 17:28:11', 'admin', '2024-05-23 11:43:31', ''); +INSERT INTO `sys_menu` VALUES (3317, '场景列表', 3316, 1, 'list/index', 'scene/list/index', '', 1, 0, 'C', '0', '0', 'scene:model:list', 'product', 'admin', '2024-05-17 17:33:46', 'admin', '2024-05-23 11:37:49', ''); +INSERT INTO `sys_menu` VALUES (3318, '变量列表', 3317, 1, '', NULL, NULL, 1, 0, 'F', '0', '0', 'scene:modelData:list', '#', 'admin', '2024-07-29 14:40:54', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (3319, '场景变量启用', 3317, 2, '', NULL, NULL, 1, 0, 'F', '0', '0', 'scene:modelData:editEnable', '#', 'admin', '2024-07-29 10:28:14', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (3320, '场景列表查询', 3317, 3, '#', '', NULL, 1, 0, 'F', '0', '0', 'scene:model:query', '#', 'admin', '2024-05-20 00:54:36', 'admin', '2024-05-23 11:37:58', ''); +INSERT INTO `sys_menu` VALUES (3321, '场景列表新增', 3317, 4, '#', '', NULL, 1, 0, 'F', '0', '0', 'scene:model:add', '#', 'admin', '2024-05-20 00:54:36', 'admin', '2024-05-23 11:38:05', ''); +INSERT INTO `sys_menu` VALUES (3322, '场景列表修改', 3317, 5, '#', '', NULL, 1, 0, 'F', '0', '0', 'scene:model:edit', '#', 'admin', '2024-05-20 00:54:36', 'admin', '2024-05-23 11:38:10', ''); +INSERT INTO `sys_menu` VALUES (3323, '场景列表删除', 3317, 6, '#', '', NULL, 1, 0, 'F', '0', '0', 'scene:model:remove', '#', 'admin', '2024-05-20 00:54:37', 'admin', '2024-05-23 11:38:20', ''); +INSERT INTO `sys_menu` VALUES (3324, '场景组态设计', 3317, 7, '', NULL, NULL, 1, 0, 'F', '0', '0', 'scene:model:scada:design', '#', 'admin', '2024-05-23 16:08:28', 'admin', '2024-05-23 16:09:48', ''); +INSERT INTO `sys_menu` VALUES (3325, '场景组态运行', 3317, 8, '', NULL, NULL, 1, 0, 'F', '0', '0', 'scene:model:scada:run', '#', 'admin', '2024-05-23 16:10:15', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (3326, '视频监控', 3317, 9, '', NULL, NULL, 1, 0, 'F', '0', '0', 'scene:SipRelation:list', '#', 'admin', '2024-07-29 10:22:40', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (3327, '设备配置列表', 3316, 2, '', NULL, NULL, 1, 0, 'F', '0', '0', 'scene:modelDevice:list', '#', 'admin', '2024-07-29 10:06:31', 'admin', '2024-07-29 10:17:33', ''); +INSERT INTO `sys_menu` VALUES (3328, '设备配置新增', 3327, 2, '', NULL, NULL, 1, 0, 'F', '0', '0', 'scene:modelDevice:add', '#', 'admin', '2024-07-29 10:07:00', 'admin', '2024-07-29 10:12:22', ''); +INSERT INTO `sys_menu` VALUES (3329, '设备配置修改', 3327, 3, '', NULL, NULL, 1, 0, 'F', '0', '0', 'scene:modelDevice:edit', '#', 'admin', '2024-07-29 10:07:49', 'admin', '2024-07-29 10:12:29', ''); +INSERT INTO `sys_menu` VALUES (3330, '设备配置删除', 3327, 4, '', NULL, NULL, 1, 0, 'F', '0', '0', 'scene:modelDevice:remove', '#', 'admin', '2024-07-29 10:08:17', 'admin', '2024-07-29 10:12:32', ''); +INSERT INTO `sys_menu` VALUES (3331, '设备变量列表', 3316, 1, '', NULL, NULL, 1, 0, 'F', '0', '0', 'scene:modelDeviceData:list', '#', 'admin', '2024-07-29 10:12:17', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (3332, '场景变量列表', 3331, 3, '', NULL, NULL, 1, 0, 'F', '0', '0', 'scene:modelTag:list', '#', 'admin', '2024-07-29 10:17:27', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (3333, '场景变量查看', 3331, 1, '', NULL, NULL, 1, 0, 'F', '0', '0', 'scene:modelTag:query', '#', 'admin', '2024-07-29 10:25:05', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (3334, '场景变量新增', 3331, 2, '', NULL, NULL, 1, 0, 'F', '0', '0', 'scene:modelTag:add', '#', 'admin', '2024-07-29 10:25:29', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (3335, '场景变量修改', 3331, 3, '', NULL, NULL, 1, 0, 'F', '0', '0', 'scene:modelTag:edit', '#', 'admin', '2024-07-29 10:26:47', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (3336, '场景变量删除', 3331, 4, '', NULL, NULL, 1, 0, 'F', '0', '0', 'scene:modelTag:remove', '#', 'admin', '2024-07-29 10:27:11', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (3337, '国际化配置', 1, 2, 'appLang', 'system/app/lang', NULL, 1, 0, 'C', '0', '0', 'app:language:list', 'international', 'sunrain', '2024-05-20 14:15:35', 'sunrain', '2024-05-22 17:33:56', ''); +INSERT INTO `sys_menu` VALUES (3338, '国际化配置新增', 3337, 1, '', NULL, NULL, 1, 0, 'F', '0', '0', 'app:language:add', '#', 'sunrain', '2024-05-20 14:16:11', 'sunrain', '2024-05-20 14:27:09', ''); +INSERT INTO `sys_menu` VALUES (3339, '国际化配置查询', 3337, 2, '', NULL, NULL, 1, 0, 'F', '0', '0', 'app:language:query', '#', 'sunrain', '2024-05-20 14:16:40', 'sunrain', '2024-05-20 14:27:32', ''); +INSERT INTO `sys_menu` VALUES (3340, '国际化配置修改', 3337, 3, '', NULL, NULL, 1, 0, 'F', '0', '0', 'app:language:edit', '#', 'sunrain', '2024-05-20 14:17:54', 'sunrain', '2024-05-20 14:27:21', ''); +INSERT INTO `sys_menu` VALUES (3341, '国际化配置删除', 3337, 4, '', NULL, NULL, 1, 0, 'F', '0', '0', 'app:language:remove', '#', 'sunrain', '2024-05-20 14:19:19', 'sunrain', '2024-05-20 14:27:41', ''); +INSERT INTO `sys_menu` VALUES (3342, '国际化配置导出', 3337, 5, '', NULL, NULL, 1, 0, 'F', '0', '0', 'app:language:export', '#', 'sunrain', '2024-05-20 14:19:53', 'sunrain', '2024-05-20 14:27:48', ''); +INSERT INTO `sys_menu` VALUES (3343, '数据中心', 0, 4, 'dataCenter', NULL, NULL, 1, 0, 'M', '0', '0', NULL, 'column-chart', 'admin', '2024-05-24 14:42:04', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (3344, '数据分析', 3343, 2, 'analysis', 'dataCenter/analysis', NULL, 1, 0, 'C', '0', '0', 'dataCenter:analysis:list', 'curve-chart', 'admin', '2024-06-11 15:46:19', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (3345, '历史记录', 3343, 1, 'history', 'dataCenter/history', NULL, 1, 0, 'C', '0', '0', 'dataCenter:history:list', 'excel', 'admin', '2024-05-24 14:44:58', 'admin', '2024-05-24 14:46:07', ''); +INSERT INTO `sys_menu` VALUES (3346, '历史记录查询', 3345, 1, '', NULL, NULL, 1, 0, 'F', '0', '0', 'dataCenter:history:query', '#', 'admin', '2024-05-24 14:46:27', 'admin', '2024-05-24 14:47:26', ''); +INSERT INTO `sys_menu` VALUES (3349, '平台下发指令', 2007, 10, '', NULL, NULL, 1, 0, 'F', '0', '0', 'iot:message:post', '#', 'admin', '2024-08-02 09:59:50', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (3350, '指令编码', 2007, 11, '', NULL, NULL, 1, 0, 'F', '0', '0', 'iot:message:encode', '#', 'admin', '2024-08-02 10:00:10', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (3351, '指令解码', 2007, 12, '', NULL, NULL, 1, 0, 'F', '0', '0', 'iot:message:decode', '#', 'admin', '2024-08-02 10:00:25', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (3352, '子设备', 2007, 10, '', NULL, NULL, 1, 0, 'F', '0', '0', 'sub:gateway:list', '#', 'admin', '2024-08-06 14:26:36', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (3353, '子设备详情', 3352, 1, '', NULL, NULL, 1, 0, 'F', '0', '0', 'sub:gateway:query', '#', 'admin', '2024-08-06 14:27:26', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (3354, '子设备新增', 3352, 2, '', NULL, NULL, 1, 0, 'F', '0', '0', 'sub:gateway:add', '#', 'admin', '2024-08-06 14:27:37', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (3355, '子设备修改', 3352, 3, '', NULL, NULL, 1, 0, 'F', '0', '0', 'sub:gateway:edit', '#', 'admin', '2024-08-06 14:28:08', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (3356, '子设备删除', 3352, 4, '', NULL, NULL, 1, 0, 'F', '0', '0', 'sub:gateway:remove', '#', 'admin', '2024-08-06 14:28:27', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (3357, '组态管理', 0, 8, 'scada', NULL, NULL, 1, 0, 'M', '0', '0', NULL, 'monitor-a', 'admin', '2023-11-10 09:56:35', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (3358, '组态中心', 3357, 1, 'center', 'scada/center/index', NULL, 1, 0, 'C', '0', '0', 'scada:center:list', '#', 'admin', '2025-01-01 13:05:03', '', NULL, '组态中心菜单'); +INSERT INTO `sys_menu` VALUES (3359, '组态中心查询', 3358, 1, '#', '', NULL, 1, 0, 'F', '0', '0', 'scada:center:query', '#', 'admin', '2025-01-01 13:05:03', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (3360, '组态中心新增', 3358, 2, '#', '', NULL, 1, 0, 'F', '0', '0', 'scada:center:add', '#', 'admin', '2025-01-01 13:05:03', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (3361, '组态中心修改', 3358, 3, '#', '', NULL, 1, 0, 'F', '0', '0', 'scada:center:edit', '#', 'admin', '2025-01-01 13:05:03', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (3362, '组态中心删除', 3358, 4, '#', '', NULL, 1, 0, 'F', '0', '0', 'scada:center:remove', '#', 'admin', '2025-01-01 13:05:03', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (3363, '组态中心导出', 3358, 5, '#', '', NULL, 1, 0, 'F', '0', '0', 'scada:center:export', '#', 'admin', '2025-01-01 13:05:03', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (3364, '组态中心预览', 3358, 6, '#', '', NULL, 1, 0, 'F', '0', '0', 'scada:center:preview', '#', 'admin', '2025-01-01 13:05:03', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (3365, '图表管理', 3357, 2, 'echart', 'scada/echart/index', NULL, 1, 0, 'C', '0', '0', 'scada:echart:list', '#', 'admin', '2025-01-01 13:05:03', '', NULL, '图表管理菜单'); +INSERT INTO `sys_menu` VALUES (3366, '图表管理查询', 3365, 1, '#', '', NULL, 1, 0, 'F', '0', '0', 'scada:echart:query', '#', 'admin', '2025-01-01 13:05:03', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (3367, '图表管理新增', 3365, 2, '#', '', NULL, 1, 0, 'F', '0', '0', 'scada:echart:add', '#', 'admin', '2025-01-01 13:05:03', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (3368, '图表管理修改', 3365, 3, '#', '', NULL, 1, 0, 'F', '0', '0', 'scada:echart:edit', '#', 'admin', '2025-01-01 13:05:03', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (3369, '图表管理删除', 3365, 4, '#', '', NULL, 1, 0, 'F', '0', '0', 'scada:echart:remove', '#', 'admin', '2025-01-01 13:05:03', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (3370, '图表管理导出', 3365, 5, '#', '', NULL, 1, 0, 'F', '0', '0', 'scada:echart:export', '#', 'admin', '2025-01-01 13:05:03', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (3371, '图库管理', 3357, 3, 'gallery', 'scada/gallery/index', NULL, 1, 0, 'C', '0', '0', 'scada:gallery:list', '#', 'admin', '2025-01-01 13:05:03', '', NULL, '图库管理菜单'); +INSERT INTO `sys_menu` VALUES (3372, '图库管理查询', 3371, 1, '#', '', NULL, 1, 0, 'F', '0', '0', 'scada:gallery:query', '#', 'admin', '2025-01-01 13:05:03', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (3373, '图库管理新增', 3371, 2, '#', '', NULL, 1, 0, 'F', '0', '0', 'scada:gallery:add', '#', 'admin', '2025-01-01 13:05:03', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (3374, '图库管理修改', 3371, 3, '#', '', NULL, 1, 0, 'F', '0', '0', 'scada:gallery:edit', '#', 'admin', '2025-01-01 13:05:03', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (3375, '图库管理删除', 3371, 4, '#', '', NULL, 1, 0, 'F', '0', '0', 'scada:gallery:remove', '#', 'admin', '2025-01-01 13:05:03', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (3376, '图库管理导出', 3371, 5, '#', '', NULL, 1, 0, 'F', '0', '0', 'scada:gallery:export', '#', 'admin', '2025-01-01 13:05:03', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (3377, '模型管理', 3357, 4, 'model', 'scada/model/index', NULL, 1, 0, 'C', '0', '0', 'scada:model:list', '#', 'admin', '2025-01-01 13:05:03', '', NULL, '模型管理菜单'); +INSERT INTO `sys_menu` VALUES (3378, '模型管理查询', 3377, 1, '#', '', NULL, 1, 0, 'F', '0', '0', 'scada:model:query', '#', 'admin', '2025-01-01 13:05:03', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (3379, '模型管理新增', 3377, 2, '#', '', NULL, 1, 0, 'F', '0', '0', 'scada:model:add', '#', 'admin', '2025-01-01 13:05:03', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (3380, '模型管理修改', 3377, 3, '#', '', NULL, 1, 0, 'F', '0', '0', 'scada:model:edit', '#', 'admin', '2025-01-01 13:05:03', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (3381, '模型管理删除', 3377, 4, '#', '', NULL, 1, 0, 'F', '0', '0', 'scada:model:remove', '#', 'admin', '2025-01-01 13:05:03', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (3382, '模型管理导出', 3377, 5, '#', '', NULL, 1, 0, 'F', '0', '0', 'scada:model:export', '#', 'admin', '2025-01-01 13:05:03', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (3383, '模型管理预览', 3377, 6, '#', '', NULL, 1, 0, 'F', '0', '0', 'scada:model:preview', '#', 'admin', '2025-01-01 13:05:03', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (3384, '组件管理', 3357, 5, 'component', 'scada/component/index', NULL, 1, 0, 'C', '0', '0', 'scada:component:list', '#', 'admin', '2025-01-01 13:05:03', '', NULL, '组件管理菜单'); +INSERT INTO `sys_menu` VALUES (3385, '组件管理查询', 3384, 1, '#', '', NULL, 1, 0, 'F', '0', '0', 'scada:component:query', '#', 'admin', '2025-01-01 13:05:03', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (3386, '组件管理新增', 3384, 2, '#', '', NULL, 1, 0, 'F', '0', '0', 'scada:component:add', '#', 'admin', '2025-01-01 13:05:03', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (3387, '组件管理修改', 3384, 3, '#', '', NULL, 1, 0, 'F', '0', '0', 'scada:component:edit', '#', 'admin', '2025-01-01 13:05:03', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (3388, '组件管理删除', 3384, 4, '#', '', NULL, 1, 0, 'F', '0', '0', 'scada:component:remove', '#', 'admin', '2025-01-01 13:05:03', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (3389, '组件管理导出', 3384, 5, '#', '', NULL, 1, 0, 'F', '0', '0', 'scada:component:export', '#', 'admin', '2025-01-01 13:05:03', '', NULL, ''); + +-- ---------------------------- +-- Table structure for sys_menu_translate +-- ---------------------------- +DROP TABLE IF EXISTS `sys_menu_translate`; +CREATE TABLE `sys_menu_translate` ( + `id` bigint NOT NULL COMMENT '菜单ID', + `zh_cn` varchar(200) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT NULL COMMENT 'zh_CN菜单名称', + `en_us` varchar(200) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT NULL COMMENT 'en菜单名称', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb3 COLLATE = utf8mb3_general_ci COMMENT = '菜单名称翻译表' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of sys_menu_translate +-- ---------------------------- +INSERT INTO `sys_menu_translate` VALUES (1, '系统管理', 'system management'); +INSERT INTO `sys_menu_translate` VALUES (2, '系统监控', 'System monitoring'); +INSERT INTO `sys_menu_translate` VALUES (3, '系统工具', 'System Tools'); +INSERT INTO `sys_menu_translate` VALUES (4, '工控帮', 'Bee Trust IoT'); +INSERT INTO `sys_menu_translate` VALUES (5, '企业管理', 'business management'); +INSERT INTO `sys_menu_translate` VALUES (100, '用户管理', 'user management '); +INSERT INTO `sys_menu_translate` VALUES (101, '角色管理', 'Role management'); +INSERT INTO `sys_menu_translate` VALUES (102, '菜单管理', 'Menu management'); +INSERT INTO `sys_menu_translate` VALUES (103, '机构管理', 'organizational management'); +INSERT INTO `sys_menu_translate` VALUES (104, '岗位管理', 'Job management'); +INSERT INTO `sys_menu_translate` VALUES (105, '字典管理', 'Dictionary management'); +INSERT INTO `sys_menu_translate` VALUES (106, '参数设置', 'Parameter settings'); +INSERT INTO `sys_menu_translate` VALUES (107, '通知公告', 'Notice Announcement'); +INSERT INTO `sys_menu_translate` VALUES (108, '日志管理', 'Log management'); +INSERT INTO `sys_menu_translate` VALUES (109, '在线用户', 'Online users'); +INSERT INTO `sys_menu_translate` VALUES (110, '定时任务', 'Scheduled tasks'); +INSERT INTO `sys_menu_translate` VALUES (111, '数据监控', 'Data monitoring'); +INSERT INTO `sys_menu_translate` VALUES (112, '服务监控', 'Service monitoring'); +INSERT INTO `sys_menu_translate` VALUES (113, '缓存监控', 'Cache monitoring'); +INSERT INTO `sys_menu_translate` VALUES (114, '表单构建', 'Form construction'); +INSERT INTO `sys_menu_translate` VALUES (115, '代码生成', 'code generation'); +INSERT INTO `sys_menu_translate` VALUES (116, '系统接口', 'system interface '); +INSERT INTO `sys_menu_translate` VALUES (124, '缓存列表', 'Cache List'); +INSERT INTO `sys_menu_translate` VALUES (500, '操作日志', 'Operation log'); +INSERT INTO `sys_menu_translate` VALUES (501, '登录日志', 'Login log'); +INSERT INTO `sys_menu_translate` VALUES (1001, '用户查询', 'User query'); +INSERT INTO `sys_menu_translate` VALUES (1002, '用户新增', 'User addition'); +INSERT INTO `sys_menu_translate` VALUES (1003, '用户修改', 'User modification'); +INSERT INTO `sys_menu_translate` VALUES (1004, '用户删除', 'User deletion'); +INSERT INTO `sys_menu_translate` VALUES (1005, '用户导出', 'User export'); +INSERT INTO `sys_menu_translate` VALUES (1006, '用户导入', 'User import'); +INSERT INTO `sys_menu_translate` VALUES (1007, '重置密码', 'reset password '); +INSERT INTO `sys_menu_translate` VALUES (1008, '角色查询', 'Role query'); +INSERT INTO `sys_menu_translate` VALUES (1009, '角色新增', 'New role addition'); +INSERT INTO `sys_menu_translate` VALUES (1010, '角色修改', 'Role modification'); +INSERT INTO `sys_menu_translate` VALUES (1011, '角色删除', 'Role deletion'); +INSERT INTO `sys_menu_translate` VALUES (1012, '角色导出', 'Character export'); +INSERT INTO `sys_menu_translate` VALUES (1013, '菜单查询', 'Menu query'); +INSERT INTO `sys_menu_translate` VALUES (1014, '菜单新增', 'Menu addition'); +INSERT INTO `sys_menu_translate` VALUES (1015, '菜单修改', 'Menu modification'); +INSERT INTO `sys_menu_translate` VALUES (1016, '菜单删除', 'Menu deletion'); +INSERT INTO `sys_menu_translate` VALUES (1017, '部门查询', 'Departmental inquiry'); +INSERT INTO `sys_menu_translate` VALUES (1018, '部门新增', 'Department addition'); +INSERT INTO `sys_menu_translate` VALUES (1019, '部门修改', 'Department modification'); +INSERT INTO `sys_menu_translate` VALUES (1020, '部门删除', 'Department deletion'); +INSERT INTO `sys_menu_translate` VALUES (1021, '岗位查询', 'Job Search'); +INSERT INTO `sys_menu_translate` VALUES (1022, '岗位新增', 'Job addition'); +INSERT INTO `sys_menu_translate` VALUES (1023, '岗位修改', 'Position modification'); +INSERT INTO `sys_menu_translate` VALUES (1024, '岗位删除', 'Position deletion'); +INSERT INTO `sys_menu_translate` VALUES (1025, '岗位导出', 'Job export'); +INSERT INTO `sys_menu_translate` VALUES (1026, '字典查询', 'Dictionary query'); +INSERT INTO `sys_menu_translate` VALUES (1027, '字典新增', 'Dictionary addition'); +INSERT INTO `sys_menu_translate` VALUES (1028, '字典修改', 'Dictionary modification'); +INSERT INTO `sys_menu_translate` VALUES (1029, '字典删除', 'Dictionary deletion'); +INSERT INTO `sys_menu_translate` VALUES (1030, '字典导出', 'Dictionary export'); +INSERT INTO `sys_menu_translate` VALUES (1031, '参数查询', 'Parameter query'); +INSERT INTO `sys_menu_translate` VALUES (1032, '参数新增', 'Parameter addition'); +INSERT INTO `sys_menu_translate` VALUES (1033, '参数修改', 'Parameter modification'); +INSERT INTO `sys_menu_translate` VALUES (1034, '参数删除', 'Parameter deletion'); +INSERT INTO `sys_menu_translate` VALUES (1035, '参数导出', 'Parameter export'); +INSERT INTO `sys_menu_translate` VALUES (1036, '公告查询', 'Announcement inquiry'); +INSERT INTO `sys_menu_translate` VALUES (1037, '公告新增', 'Announcement added'); +INSERT INTO `sys_menu_translate` VALUES (1038, '公告修改', 'Announcement modification'); +INSERT INTO `sys_menu_translate` VALUES (1039, '公告删除', 'Announcement deletion'); +INSERT INTO `sys_menu_translate` VALUES (1040, '操作查询', 'Operation query'); +INSERT INTO `sys_menu_translate` VALUES (1041, '操作删除', 'Operation deletion'); +INSERT INTO `sys_menu_translate` VALUES (1042, '日志导出', 'Log export'); +INSERT INTO `sys_menu_translate` VALUES (1043, '登录查询', 'Login query'); +INSERT INTO `sys_menu_translate` VALUES (1044, '登录删除', 'Login Delete'); +INSERT INTO `sys_menu_translate` VALUES (1045, '日志导出', 'Log export'); +INSERT INTO `sys_menu_translate` VALUES (1046, '在线查询', 'Online inquiry'); +INSERT INTO `sys_menu_translate` VALUES (1047, '批量强退', 'Batch forced refunds'); +INSERT INTO `sys_menu_translate` VALUES (1048, '单条强退', 'Single strong refund'); +INSERT INTO `sys_menu_translate` VALUES (1049, '任务查询', 'Task query'); +INSERT INTO `sys_menu_translate` VALUES (1050, '任务新增', 'Task addition'); +INSERT INTO `sys_menu_translate` VALUES (1051, '任务修改', 'Task modification'); +INSERT INTO `sys_menu_translate` VALUES (1052, '任务删除', 'Task deletion'); +INSERT INTO `sys_menu_translate` VALUES (1053, '状态修改', 'Status modification'); +INSERT INTO `sys_menu_translate` VALUES (1054, '任务导出', 'Task export'); +INSERT INTO `sys_menu_translate` VALUES (1055, '生成查询', 'Generate query'); +INSERT INTO `sys_menu_translate` VALUES (1056, '生成修改', 'Generate modifications'); +INSERT INTO `sys_menu_translate` VALUES (1057, '生成删除', 'Generate Delete'); +INSERT INTO `sys_menu_translate` VALUES (1058, '导入代码', 'Import code'); +INSERT INTO `sys_menu_translate` VALUES (1059, '预览代码', 'Preview code'); +INSERT INTO `sys_menu_translate` VALUES (1060, '生成代码', 'Generate code'); +INSERT INTO `sys_menu_translate` VALUES (1065, '账户解锁', 'Account unlocking'); +INSERT INTO `sys_menu_translate` VALUES (2000, '设备管理', 'device management'); +INSERT INTO `sys_menu_translate` VALUES (2001, '产品分类', 'Product classification'); +INSERT INTO `sys_menu_translate` VALUES (2002, '产品分类查询', 'Product classification query'); +INSERT INTO `sys_menu_translate` VALUES (2003, '产品分类新增', 'Product classification added'); +INSERT INTO `sys_menu_translate` VALUES (2004, '产品分类修改', 'Product classification modification'); +INSERT INTO `sys_menu_translate` VALUES (2005, '产品分类删除', 'Delete product category'); +INSERT INTO `sys_menu_translate` VALUES (2006, '产品分类导出', 'Product classification export'); +INSERT INTO `sys_menu_translate` VALUES (2007, '设备管理', 'device management'); +INSERT INTO `sys_menu_translate` VALUES (2008, '设备查询', 'Equipment inquiry'); +INSERT INTO `sys_menu_translate` VALUES (2009, '设备新增', 'Equipment addition'); +INSERT INTO `sys_menu_translate` VALUES (2010, '设备修改', 'Equipment modification'); +INSERT INTO `sys_menu_translate` VALUES (2011, '设备删除', 'Device deletion'); +INSERT INTO `sys_menu_translate` VALUES (2012, '设备导出', 'Device export'); +INSERT INTO `sys_menu_translate` VALUES (2013, '产品固件', 'Product firmware'); +INSERT INTO `sys_menu_translate` VALUES (2014, '产品固件查询', 'Product firmware query'); +INSERT INTO `sys_menu_translate` VALUES (2015, '产品固件新增', 'Product firmware addition'); +INSERT INTO `sys_menu_translate` VALUES (2016, '产品固件修改', 'Product firmware modification'); +INSERT INTO `sys_menu_translate` VALUES (2017, '产品固件删除', 'Product firmware deletion'); +INSERT INTO `sys_menu_translate` VALUES (2018, '产品固件导出', 'Product firmware export'); +INSERT INTO `sys_menu_translate` VALUES (2019, '设备分组', 'Equipment grouping'); +INSERT INTO `sys_menu_translate` VALUES (2020, '设备分组查询', 'Equipment grouping query'); +INSERT INTO `sys_menu_translate` VALUES (2021, '设备分组新增', 'New equipment grouping'); +INSERT INTO `sys_menu_translate` VALUES (2022, '设备分组修改', 'Equipment grouping modification'); +INSERT INTO `sys_menu_translate` VALUES (2023, '设备分组删除', 'Device group deletion'); +INSERT INTO `sys_menu_translate` VALUES (2024, '设备分组导出', 'Equipment group export'); +INSERT INTO `sys_menu_translate` VALUES (2043, '产品管理', 'product management '); +INSERT INTO `sys_menu_translate` VALUES (2044, '产品查询', 'Product inquiry'); +INSERT INTO `sys_menu_translate` VALUES (2045, '产品新增', 'Product addition'); +INSERT INTO `sys_menu_translate` VALUES (2046, '产品修改', 'Product modification'); +INSERT INTO `sys_menu_translate` VALUES (2047, '产品删除', 'Product deletion'); +INSERT INTO `sys_menu_translate` VALUES (2048, '产品导出', 'Product export'); +INSERT INTO `sys_menu_translate` VALUES (2049, '通用物模型', 'Universal object model'); +INSERT INTO `sys_menu_translate` VALUES (2050, '通用物模型查询', 'General object model query'); +INSERT INTO `sys_menu_translate` VALUES (2051, '通用物模型新增', 'Addition of Universal Object Model'); +INSERT INTO `sys_menu_translate` VALUES (2052, '通用物模型修改', 'Modification of Universal Object Model'); +INSERT INTO `sys_menu_translate` VALUES (2053, '通用物模型删除', 'Universal object model deletion'); +INSERT INTO `sys_menu_translate` VALUES (2054, '通用物模型导出', 'Export of Universal Object Model'); +INSERT INTO `sys_menu_translate` VALUES (2067, '告警记录', 'Alarm Log '); +INSERT INTO `sys_menu_translate` VALUES (2068, '设备告警查询', 'Equipment alarm query'); +INSERT INTO `sys_menu_translate` VALUES (2069, '设备告警新增', 'Equipment alarm addition'); +INSERT INTO `sys_menu_translate` VALUES (2070, '设备告警修改', 'Equipment alarm modification'); +INSERT INTO `sys_menu_translate` VALUES (2071, '设备告警删除', 'Device alarm deletion'); +INSERT INTO `sys_menu_translate` VALUES (2072, '设备告警导出', 'Equipment alarm export'); +INSERT INTO `sys_menu_translate` VALUES (2085, '场景联动', 'Scene linkage'); +INSERT INTO `sys_menu_translate` VALUES (2086, '场景联动查询', 'Scene linkage query'); +INSERT INTO `sys_menu_translate` VALUES (2087, '场景联动新增', 'New scene linkage'); +INSERT INTO `sys_menu_translate` VALUES (2088, '场景联动修改', 'Scene linkage modification'); +INSERT INTO `sys_menu_translate` VALUES (2089, '场景联动删除', 'Scene linkage deletion'); +INSERT INTO `sys_menu_translate` VALUES (2090, '场景联动导出', 'Scene linkage export'); +INSERT INTO `sys_menu_translate` VALUES (2099, '云云对接查询', 'Cloud to cloud docking query'); +INSERT INTO `sys_menu_translate` VALUES (2100, '云云对接新增', 'Cloud to Cloud Connection Added'); +INSERT INTO `sys_menu_translate` VALUES (2101, '云云对接修改', 'Yunyun docking modification'); +INSERT INTO `sys_menu_translate` VALUES (2102, '云云对接删除', 'Cloud docking deletion'); +INSERT INTO `sys_menu_translate` VALUES (2103, '云云对接导出', 'Cloud docking export'); +INSERT INTO `sys_menu_translate` VALUES (2104, 'EMQ管理', 'EMQ Management'); +INSERT INTO `sys_menu_translate` VALUES (2123, '新闻分类', 'News classification'); +INSERT INTO `sys_menu_translate` VALUES (2124, '新闻分类查询', 'News classification query'); +INSERT INTO `sys_menu_translate` VALUES (2125, '新闻分类新增', 'New news category added'); +INSERT INTO `sys_menu_translate` VALUES (2126, '新闻分类修改', 'News classification modification'); +INSERT INTO `sys_menu_translate` VALUES (2127, '新闻分类删除', 'Delete news category'); +INSERT INTO `sys_menu_translate` VALUES (2128, '新闻分类导出', 'Export news categories'); +INSERT INTO `sys_menu_translate` VALUES (2129, '新闻资讯', 'News and Information'); +INSERT INTO `sys_menu_translate` VALUES (2130, '新闻资讯查询', 'News and Information Inquiry'); +INSERT INTO `sys_menu_translate` VALUES (2131, '新闻资讯新增', 'New news and information added'); +INSERT INTO `sys_menu_translate` VALUES (2132, '新闻资讯修改', 'News and Information Modification'); +INSERT INTO `sys_menu_translate` VALUES (2133, '新闻资讯删除', 'Delete news and information'); +INSERT INTO `sys_menu_translate` VALUES (2134, '新闻资讯导出', 'Export news and information'); +INSERT INTO `sys_menu_translate` VALUES (2136, '产品授权码查询', 'Product authorization code query'); +INSERT INTO `sys_menu_translate` VALUES (2137, '产品授权码新增', 'Product authorization code added'); +INSERT INTO `sys_menu_translate` VALUES (2138, '产品授权码修改', 'Product authorization code modification'); +INSERT INTO `sys_menu_translate` VALUES (2139, '产品授权码删除', 'Product authorization code deletion'); +INSERT INTO `sys_menu_translate` VALUES (2140, '产品授权码导出', 'Export of Product Authorization Code'); +INSERT INTO `sys_menu_translate` VALUES (2141, '三方登录', 'Three party login'); +INSERT INTO `sys_menu_translate` VALUES (2142, '平台查询', 'Platform query'); +INSERT INTO `sys_menu_translate` VALUES (2147, '设备用户列表', 'List of device users'); +INSERT INTO `sys_menu_translate` VALUES (2148, '设备定时', 'Equipment timing'); +INSERT INTO `sys_menu_translate` VALUES (2149, '固定大屏', 'Fixed large screen'); +INSERT INTO `sys_menu_translate` VALUES (2167, '可视化管理', 'Visual management'); +INSERT INTO `sys_menu_translate` VALUES (2168, '通道管理', 'Channel management'); +INSERT INTO `sys_menu_translate` VALUES (2169, '视频配置查询', 'Video configuration query'); +INSERT INTO `sys_menu_translate` VALUES (2170, '视频配置新增', 'Video configuration added'); +INSERT INTO `sys_menu_translate` VALUES (2171, '视频配置修改', 'Video configuration modification'); +INSERT INTO `sys_menu_translate` VALUES (2172, '视频配置删除', 'Video configuration deletion'); +INSERT INTO `sys_menu_translate` VALUES (2173, '固件任务', 'Firmware task'); +INSERT INTO `sys_menu_translate` VALUES (2174, '固件任务查询', 'Firmware task query'); +INSERT INTO `sys_menu_translate` VALUES (2175, '固件任务新增', 'New firmware task added'); +INSERT INTO `sys_menu_translate` VALUES (2176, '固件任务修改', 'Firmware task modification'); +INSERT INTO `sys_menu_translate` VALUES (2177, '固件任务删除', 'Firmware task deletion'); +INSERT INTO `sys_menu_translate` VALUES (2178, '固件任务导出', 'Firmware task export'); +INSERT INTO `sys_menu_translate` VALUES (2179, '固件详情', 'Firmware Details'); +INSERT INTO `sys_menu_translate` VALUES (2180, '固件详情查询', 'Firmware Details Query'); +INSERT INTO `sys_menu_translate` VALUES (2181, '固件详情新增', 'Firmware details added'); +INSERT INTO `sys_menu_translate` VALUES (2182, '固件详情修改', 'Firmware details modification'); +INSERT INTO `sys_menu_translate` VALUES (2183, '固件详情删除', 'Firmware details deleted'); +INSERT INTO `sys_menu_translate` VALUES (2184, '固件详情导出', 'Firmware details export'); +INSERT INTO `sys_menu_translate` VALUES (3000, '运维管理', 'Mocha ITOM '); +INSERT INTO `sys_menu_translate` VALUES (3001, '设备服务下发日志', 'Device service issuance log'); +INSERT INTO `sys_menu_translate` VALUES (3002, '设备服务下发日志查询', 'Device service issuance log query'); +INSERT INTO `sys_menu_translate` VALUES (3003, '设备服务下发日志新增', 'Add new logs for device service issuance'); +INSERT INTO `sys_menu_translate` VALUES (3004, '设备服务下发日志修改', 'Device service issue log modification'); +INSERT INTO `sys_menu_translate` VALUES (3005, '设备服务下发日志删除', 'Device service issues log deletion'); +INSERT INTO `sys_menu_translate` VALUES (3006, '设备服务下发日志导出', 'Export logs issued by device services'); +INSERT INTO `sys_menu_translate` VALUES (3007, '协议管理', 'Protocol management'); +INSERT INTO `sys_menu_translate` VALUES (3008, '协议查询', 'Protocol inquiry'); +INSERT INTO `sys_menu_translate` VALUES (3009, '协议新增', 'Protocol addition'); +INSERT INTO `sys_menu_translate` VALUES (3010, '协议修改', 'Protocol modification'); +INSERT INTO `sys_menu_translate` VALUES (3011, '协议删除', 'Protocol deletion'); +INSERT INTO `sys_menu_translate` VALUES (3012, '协议导出', 'Protocol export'); +INSERT INTO `sys_menu_translate` VALUES (3031, 'Netty管理', 'Netty Management'); +INSERT INTO `sys_menu_translate` VALUES (3032, '客户端', 'client'); +INSERT INTO `sys_menu_translate` VALUES (3033, '事件日志', 'Event log'); +INSERT INTO `sys_menu_translate` VALUES (3034, '事件日志查询', 'Event log query'); +INSERT INTO `sys_menu_translate` VALUES (3035, '事件日志新增', 'Event log addition'); +INSERT INTO `sys_menu_translate` VALUES (3036, '事件日志修改', 'Event log modification'); +INSERT INTO `sys_menu_translate` VALUES (3037, '事件日志删除', 'Event log deletion'); +INSERT INTO `sys_menu_translate` VALUES (3038, '事件日志导出', 'Event log export'); +INSERT INTO `sys_menu_translate` VALUES (3044, '服务下发', 'Service Issuance'); +INSERT INTO `sys_menu_translate` VALUES (3046, '视频中心', 'Video Center'); +INSERT INTO `sys_menu_translate` VALUES (3047, '分屏显示', 'Split screen display'); +INSERT INTO `sys_menu_translate` VALUES (3048, '视频配置', 'Video configuration'); +INSERT INTO `sys_menu_translate` VALUES (3049, '数据可视化', 'Data visualization'); +INSERT INTO `sys_menu_translate` VALUES (3051, '规则引擎', 'Rule engine'); +INSERT INTO `sys_menu_translate` VALUES (3052, '可视化大屏', 'Visual large screen'); +INSERT INTO `sys_menu_translate` VALUES (3055, '规则脚本', 'Rule Script'); +INSERT INTO `sys_menu_translate` VALUES (3099, '录像管理', 'Video management'); +INSERT INTO `sys_menu_translate` VALUES (3100, 'Mqtt统计', 'Mqtt statistics'); +INSERT INTO `sys_menu_translate` VALUES (3102, '通知渠道', 'Notification channels'); +INSERT INTO `sys_menu_translate` VALUES (3103, '通知渠道查询', 'Notification channel inquiry'); +INSERT INTO `sys_menu_translate` VALUES (3104, '通知渠道新增', 'Notification channel added'); +INSERT INTO `sys_menu_translate` VALUES (3105, '通知渠道修改', 'Notification channel modification'); +INSERT INTO `sys_menu_translate` VALUES (3106, '通知渠道删除', 'Notification channel deletion'); +INSERT INTO `sys_menu_translate` VALUES (3107, '通知渠道导出', 'Notification channel export'); +INSERT INTO `sys_menu_translate` VALUES (3108, '通知模板', 'Notification Template'); +INSERT INTO `sys_menu_translate` VALUES (3109, '通知模板查询', 'Notification template query'); +INSERT INTO `sys_menu_translate` VALUES (3110, '通知模板新增', 'Notification Template Added'); +INSERT INTO `sys_menu_translate` VALUES (3111, '通知模板修改', 'Notification Template Modification'); +INSERT INTO `sys_menu_translate` VALUES (3112, '通知模板删除', 'Notification template deletion'); +INSERT INTO `sys_menu_translate` VALUES (3113, '通知模板导出', 'Notification Template Export'); +INSERT INTO `sys_menu_translate` VALUES (3114, '通知模板测试', 'Notification Template Testing'); +INSERT INTO `sys_menu_translate` VALUES (3115, '通知日志', 'Notification log'); +INSERT INTO `sys_menu_translate` VALUES (3116, '通知日志导出', 'Notification log export'); +INSERT INTO `sys_menu_translate` VALUES (3117, '通知日志删除', 'Notification log deletion'); +INSERT INTO `sys_menu_translate` VALUES (3147, '告警配置', 'Alarm configuration'); +INSERT INTO `sys_menu_translate` VALUES (3148, '规则脚本导出', 'Rule script export'); +INSERT INTO `sys_menu_translate` VALUES (3149, '规则脚本查询', 'Rule script query'); +INSERT INTO `sys_menu_translate` VALUES (3150, '规则脚本新增', 'New rule script added'); +INSERT INTO `sys_menu_translate` VALUES (3151, '规则脚本修改', 'Rule script modification'); +INSERT INTO `sys_menu_translate` VALUES (3152, '规则脚本删除', 'Rule script deletion'); +INSERT INTO `sys_menu_translate` VALUES (3153, '告警配置导出', 'Alarm configuration export'); +INSERT INTO `sys_menu_translate` VALUES (3154, '告警配置查询', 'Alarm configuration query'); +INSERT INTO `sys_menu_translate` VALUES (3155, '告警配置新增', 'Alarm configuration added'); +INSERT INTO `sys_menu_translate` VALUES (3156, '告警配置修改', 'Alarm configuration modification'); +INSERT INTO `sys_menu_translate` VALUES (3157, '告警配置删除', 'Alarm configuration deletion'); +INSERT INTO `sys_menu_translate` VALUES (3158, '通知日志详情', 'Notification log details'); +INSERT INTO `sys_menu_translate` VALUES (3159, '组态管理', 'Configuration management'); +INSERT INTO `sys_menu_translate` VALUES (3160, '独立组态', 'Independent configuration'); +INSERT INTO `sys_menu_translate` VALUES (3161, '组态中心查询', 'Configuration Center Query'); +INSERT INTO `sys_menu_translate` VALUES (3162, '组态中心新增', 'New configuration center added'); +INSERT INTO `sys_menu_translate` VALUES (3163, '组态中心修改', 'Configuration Center Modification'); +INSERT INTO `sys_menu_translate` VALUES (3164, '组态中心删除', 'Delete configuration center'); +INSERT INTO `sys_menu_translate` VALUES (3165, '组态中心导出', 'Export from Configuration Center'); +INSERT INTO `sys_menu_translate` VALUES (3166, '图表管理', 'Chart management'); +INSERT INTO `sys_menu_translate` VALUES (3167, '图表管理查询', 'Chart management query'); +INSERT INTO `sys_menu_translate` VALUES (3168, '图表管理新增', 'Chart Management Added'); +INSERT INTO `sys_menu_translate` VALUES (3169, '图表管理修改', 'Chart management modification'); +INSERT INTO `sys_menu_translate` VALUES (3170, '图表管理删除', 'Chart management deletion'); +INSERT INTO `sys_menu_translate` VALUES (3171, '图表管理导出', 'Chart management export'); +INSERT INTO `sys_menu_translate` VALUES (3172, '图库管理', 'Library Management'); +INSERT INTO `sys_menu_translate` VALUES (3173, '图库管理查询', 'Library management query'); +INSERT INTO `sys_menu_translate` VALUES (3174, '图库管理新增', 'Library Management Added'); +INSERT INTO `sys_menu_translate` VALUES (3175, '图库管理修改', 'Library management modification'); +INSERT INTO `sys_menu_translate` VALUES (3176, '图库管理删除', 'Library Management Delete'); +INSERT INTO `sys_menu_translate` VALUES (3177, '图库管理导出', 'Library Management Export'); +INSERT INTO `sys_menu_translate` VALUES (3178, '模型管理', 'Model management'); +INSERT INTO `sys_menu_translate` VALUES (3179, '模型管理查询', 'Model management query'); +INSERT INTO `sys_menu_translate` VALUES (3180, '模型管理新增', 'New Model Management'); +INSERT INTO `sys_menu_translate` VALUES (3181, '模型管理修改', 'Model management modification'); +INSERT INTO `sys_menu_translate` VALUES (3182, '模型管理删除', 'Model management deletion'); +INSERT INTO `sys_menu_translate` VALUES (3183, '模型管理导出', 'Model management export'); +INSERT INTO `sys_menu_translate` VALUES (3184, '组件管理', 'Component Management'); +INSERT INTO `sys_menu_translate` VALUES (3185, '组件管理查询', 'Component management query'); +INSERT INTO `sys_menu_translate` VALUES (3186, '组件管理新增', 'New Component Management'); +INSERT INTO `sys_menu_translate` VALUES (3187, '组件管理修改', 'Component management modification'); +INSERT INTO `sys_menu_translate` VALUES (3188, '组件管理删除', 'Component management deletion'); +INSERT INTO `sys_menu_translate` VALUES (3189, '组件管理导出', 'Component management export'); +INSERT INTO `sys_menu_translate` VALUES (3190, '云云对接', 'Cloud to Cloud Connection'); +INSERT INTO `sys_menu_translate` VALUES (3191, '音箱配置', 'Speaker configuration'); +INSERT INTO `sys_menu_translate` VALUES (3197, '小度音箱', 'Xiaodu speaker'); +INSERT INTO `sys_menu_translate` VALUES (3198, '关联产品查询', 'Related product query'); +INSERT INTO `sys_menu_translate` VALUES (3199, '关联物模查询', 'Related Model Query'); +INSERT INTO `sys_menu_translate` VALUES (3200, '关联产品新增', 'Add related products'); +INSERT INTO `sys_menu_translate` VALUES (3201, '关联产品删除', 'Related product deletion'); +INSERT INTO `sys_menu_translate` VALUES (3202, '关联产品编辑', 'Related product editing'); +INSERT INTO `sys_menu_translate` VALUES (3203, '关联物模编辑', 'Related Model Editing'); +INSERT INTO `sys_menu_translate` VALUES (3204, '关联物模删除', 'Related object model deletion'); +INSERT INTO `sys_menu_translate` VALUES (3205, '组态详情预览', 'Preview of configuration details'); +INSERT INTO `sys_menu_translate` VALUES (3206, '产品模型列表', 'Product Model List'); +INSERT INTO `sys_menu_translate` VALUES (3207, '产品模型详情', 'Product Model Details'); +INSERT INTO `sys_menu_translate` VALUES (3208, '产品模型导入', 'Product model import'); +INSERT INTO `sys_menu_translate` VALUES (3209, '产品模型新增', 'Product Model Addition'); +INSERT INTO `sys_menu_translate` VALUES (3210, '产品模型修改', 'Product model modification'); +INSERT INTO `sys_menu_translate` VALUES (3211, '产品模型删除', 'Product model deletion'); +INSERT INTO `sys_menu_translate` VALUES (3214, '设备定时详情', 'Equipment timing details'); +INSERT INTO `sys_menu_translate` VALUES (3215, '设备定时新增', 'Equipment scheduled addition'); +INSERT INTO `sys_menu_translate` VALUES (3216, '设备定时修改', 'Equipment scheduled modification'); +INSERT INTO `sys_menu_translate` VALUES (3217, '设备定时执行', 'Equipment scheduled execution'); +INSERT INTO `sys_menu_translate` VALUES (3218, '设备定时删除', 'Equipment scheduled deletion'); +INSERT INTO `sys_menu_translate` VALUES (3219, '设备用户详情', 'Device User Details'); +INSERT INTO `sys_menu_translate` VALUES (3220, '分享设备', 'Share devices'); +INSERT INTO `sys_menu_translate` VALUES (3221, '设备用户修改', 'Device user modification'); +INSERT INTO `sys_menu_translate` VALUES (3222, '取消分享', 'Cancel sharing'); +INSERT INTO `sys_menu_translate` VALUES (3223, '录像管理列表', 'Video management list'); +INSERT INTO `sys_menu_translate` VALUES (3224, '查看录像', 'View video recording'); +INSERT INTO `sys_menu_translate` VALUES (3225, '录像下载', 'Video download'); +INSERT INTO `sys_menu_translate` VALUES (3226, '场景联动执行', 'Scene linkage execution'); +INSERT INTO `sys_menu_translate` VALUES (3227, '字典刷新', 'Dictionary refresh'); +INSERT INTO `sys_menu_translate` VALUES (3228, '参数刷新', 'Parameter refresh'); +INSERT INTO `sys_menu_translate` VALUES (3229, '三方登录详情', 'Three party login details'); +INSERT INTO `sys_menu_translate` VALUES (3230, '三方登录新增', 'Three party login added'); +INSERT INTO `sys_menu_translate` VALUES (3231, '三方登录修改', 'Three party login modification'); +INSERT INTO `sys_menu_translate` VALUES (3232, '三方登录导出', 'Three party login export'); +INSERT INTO `sys_menu_translate` VALUES (3233, '三方登录删除', 'Three party login deletion'); +INSERT INTO `sys_menu_translate` VALUES (3234, '任务执行', 'Task Execution'); +INSERT INTO `sys_menu_translate` VALUES (3235, '缓存列表', 'Cache List'); +INSERT INTO `sys_menu_translate` VALUES (3236, '缓存删除', 'Cache deletion'); +INSERT INTO `sys_menu_translate` VALUES (3237, '客户端列表', 'Client List'); +INSERT INTO `sys_menu_translate` VALUES (3238, '客户端踢出', 'Client kicked out'); +INSERT INTO `sys_menu_translate` VALUES (3239, '设备分配', 'Equipment allocation'); +INSERT INTO `sys_menu_translate` VALUES (3240, '设备回收', 'Equipment recycling'); +INSERT INTO `sys_menu_translate` VALUES (3247, '设备分享列表', 'Equipment Sharing List'); +INSERT INTO `sys_menu_translate` VALUES (3248, '设备分享用户', 'Device Sharing Users'); +INSERT INTO `sys_menu_translate` VALUES (3249, '设备分享详情', 'Device Sharing Details'); +INSERT INTO `sys_menu_translate` VALUES (3250, '设备分享新增', 'New device sharing'); +INSERT INTO `sys_menu_translate` VALUES (3251, '设备分享修改', 'Device sharing and modification'); +INSERT INTO `sys_menu_translate` VALUES (3252, '设备分享删除', 'Device sharing and deletion'); +INSERT INTO `sys_menu_translate` VALUES (3253, '设备分享导出', 'Device sharing export'); +INSERT INTO `sys_menu_translate` VALUES (3254, '设备定时导出', 'Equipment timed export'); +INSERT INTO `sys_menu_translate` VALUES (3255, '设备联动', 'Equipment linkage'); +INSERT INTO `sys_menu_translate` VALUES (3256, '终端用户', 'end user'); +INSERT INTO `sys_menu_translate` VALUES (3257, '告警用户', 'Alert user'); +INSERT INTO `sys_menu_translate` VALUES (3258, '告警用户查询', 'Alarm user query'); +INSERT INTO `sys_menu_translate` VALUES (3259, '告警用户新增', 'Alarm user addition'); +INSERT INTO `sys_menu_translate` VALUES (3260, '告警用户删除', 'Alarm user to delete'); +INSERT INTO `sys_menu_translate` VALUES (3261, '文件记录', 'files recording'); +INSERT INTO `sys_menu_translate` VALUES (3262, '文件记录查询', 'File record query'); +INSERT INTO `sys_menu_translate` VALUES (3263, '文件记录新增', 'File record addition'); +INSERT INTO `sys_menu_translate` VALUES (3264, '文件记录修改', 'Document record modification'); +INSERT INTO `sys_menu_translate` VALUES (3265, '文件记录删除', 'File record deletion'); +INSERT INTO `sys_menu_translate` VALUES (3266, '文件记录导出', 'Export file records'); +INSERT INTO `sys_menu_translate` VALUES (3267, '文件存储配置新增', 'New file storage configuration added'); +INSERT INTO `sys_menu_translate` VALUES (3268, '文件存储配置修改', 'File storage configuration modification'); +INSERT INTO `sys_menu_translate` VALUES (3269, '文件存储配置删除', 'File storage configuration deletion'); +INSERT INTO `sys_menu_translate` VALUES (3270, '数据桥接', 'Data bridging'); +INSERT INTO `sys_menu_translate` VALUES (3271, '数据桥接查询', 'Data bridging query'); +INSERT INTO `sys_menu_translate` VALUES (3272, '数据桥接新增', 'New addition of data bridging'); +INSERT INTO `sys_menu_translate` VALUES (3273, '数据桥接修改', 'Data bridging modification'); +INSERT INTO `sys_menu_translate` VALUES (3274, '数据桥接删除', 'Data bridging deletion'); +INSERT INTO `sys_menu_translate` VALUES (3275, '数据桥接导出', 'Data Bridge Export'); +INSERT INTO `sys_menu_translate` VALUES (3276, '密码修改', 'Password modification'); +INSERT INTO `sys_menu_translate` VALUES (3277, '设备编号批量生成', 'Batch generation of device numbers'); +INSERT INTO `sys_menu_translate` VALUES (3278, '设备记录导出', 'Export device records'); +INSERT INTO `sys_menu_translate` VALUES (3279, '设备记录', 'Equipment records'); +INSERT INTO `sys_menu_translate` VALUES (3280, '系统授权', 'System authorization'); +INSERT INTO `sys_menu_translate` VALUES (3281, '系统授权查询', 'System authorization query'); +INSERT INTO `sys_menu_translate` VALUES (3282, '系统授权新增', 'System authorization added'); +INSERT INTO `sys_menu_translate` VALUES (3283, '系统授权修改', 'System authorization modification'); +INSERT INTO `sys_menu_translate` VALUES (3284, '系统授权删除', 'System authorization deletion'); +INSERT INTO `sys_menu_translate` VALUES (3285, '系统授权导出', 'System authorization export'); +INSERT INTO `sys_menu_translate` VALUES (3286, '产品modbus配置参数', 'Product Modbus configuration parameters'); +INSERT INTO `sys_menu_translate` VALUES (3287, '产品modbus配置参数查询', 'Product Modbus configuration parameter query'); +INSERT INTO `sys_menu_translate` VALUES (3288, '产品modbus配置参数新增', 'New configuration parameters for product Modbus'); +INSERT INTO `sys_menu_translate` VALUES (3289, '产品modbus配置参数修改', 'Product Modbus configuration parameter modification'); +INSERT INTO `sys_menu_translate` VALUES (3290, '产品modbus配置参数删除', 'Product Modbus configuration parameter deletion'); +INSERT INTO `sys_menu_translate` VALUES (3291, '产品modbus配置参数导出', 'Product Modbus configuration parameter export'); +INSERT INTO `sys_menu_translate` VALUES (3292, '轮训任务', 'Rotation training task'); +INSERT INTO `sys_menu_translate` VALUES (3293, '轮训任务查询', 'Rotation training task query'); +INSERT INTO `sys_menu_translate` VALUES (3294, '轮训任务新增', 'New rotation training tasks added'); +INSERT INTO `sys_menu_translate` VALUES (3295, '轮训任务修改', 'Modification of rotation training tasks'); +INSERT INTO `sys_menu_translate` VALUES (3296, '轮训任务删除', 'Delete rotation training task'); +INSERT INTO `sys_menu_translate` VALUES (3297, '轮训任务导出', 'Export rotation training tasks'); +INSERT INTO `sys_menu_translate` VALUES (3298, 'modbus配置', 'Modbus configuration'); +INSERT INTO `sys_menu_translate` VALUES (3299, 'modbus配置查询', 'Modbus configuration query'); +INSERT INTO `sys_menu_translate` VALUES (3300, 'modbus配置新增', 'Modbus configuration added'); +INSERT INTO `sys_menu_translate` VALUES (3301, 'modbus配置修改', 'Modbus configuration modification'); +INSERT INTO `sys_menu_translate` VALUES (3302, 'modbus配置删除', 'Modbus configuration deletion'); +INSERT INTO `sys_menu_translate` VALUES (3303, 'modbus配置导出', 'Modbus configuration export'); +INSERT INTO `sys_menu_translate` VALUES (3304, '指令偏好设置', 'Instruction preference settings'); +INSERT INTO `sys_menu_translate` VALUES (3305, '指令偏好设置查询', 'Instruction preference setting query'); +INSERT INTO `sys_menu_translate` VALUES (3306, '指令偏好设置新增', 'New instruction preference settings added'); +INSERT INTO `sys_menu_translate` VALUES (3307, '指令偏好设置修改', 'Command preference setting modification'); +INSERT INTO `sys_menu_translate` VALUES (3308, '指令偏好设置删除', 'Delete command preference settings'); +INSERT INTO `sys_menu_translate` VALUES (3309, '指令偏好设置导出', 'Export command preference settings'); +INSERT INTO `sys_menu_translate` VALUES (3310, '指令权限', 'Command Authority'); +INSERT INTO `sys_menu_translate` VALUES (3311, '指令权限控制查询', 'Command permission control query'); +INSERT INTO `sys_menu_translate` VALUES (3312, '指令权限控制新增', 'Instruction permission control added'); +INSERT INTO `sys_menu_translate` VALUES (3313, '指令权限控制修改', 'Command permission control modification'); +INSERT INTO `sys_menu_translate` VALUES (3314, '指令权限控制删除', 'Command permission control deletion'); +INSERT INTO `sys_menu_translate` VALUES (3315, '指令权限控制导出', 'Command permission control export'); +INSERT INTO `sys_menu_translate` VALUES (3316, '场景管理', 'Scene management'); +INSERT INTO `sys_menu_translate` VALUES (3317, '场景列表', 'Scene List'); +INSERT INTO `sys_menu_translate` VALUES (3318, '变量列表', 'Variable List'); +INSERT INTO `sys_menu_translate` VALUES (3319, '场景变量启用', 'Enable scene variables'); +INSERT INTO `sys_menu_translate` VALUES (3320, '场景列表查询', 'Scene List Query'); +INSERT INTO `sys_menu_translate` VALUES (3321, '场景列表新增', 'New scene list added'); +INSERT INTO `sys_menu_translate` VALUES (3322, '场景列表修改', 'Scene list modification'); +INSERT INTO `sys_menu_translate` VALUES (3323, '场景列表删除', 'Scene list deletion'); +INSERT INTO `sys_menu_translate` VALUES (3324, '场景组态设计', 'Scene configuration design'); +INSERT INTO `sys_menu_translate` VALUES (3325, '场景组态运行', 'Scenario configuration operation'); +INSERT INTO `sys_menu_translate` VALUES (3326, '视频监控', 'Video surveillance'); +INSERT INTO `sys_menu_translate` VALUES (3327, '设备配置列表', 'Equipment configuration list'); +INSERT INTO `sys_menu_translate` VALUES (3328, '设备配置新增', 'New device configuration'); +INSERT INTO `sys_menu_translate` VALUES (3329, '设备配置修改', 'Equipment configuration modification'); +INSERT INTO `sys_menu_translate` VALUES (3330, '设备配置删除', 'Device configuration deletion'); +INSERT INTO `sys_menu_translate` VALUES (3331, '设备变量列表', 'List of device variables'); +INSERT INTO `sys_menu_translate` VALUES (3332, '场景变量列表', 'List of scene variables'); +INSERT INTO `sys_menu_translate` VALUES (3333, '场景变量查看', 'View scene variables'); +INSERT INTO `sys_menu_translate` VALUES (3334, '场景变量新增', 'New scene variables added'); +INSERT INTO `sys_menu_translate` VALUES (3335, '场景变量修改', 'Scene variable modification'); +INSERT INTO `sys_menu_translate` VALUES (3336, '场景变量删除', 'Scene variable deletion'); +INSERT INTO `sys_menu_translate` VALUES (3337, '国际化配置', 'International configuration'); +INSERT INTO `sys_menu_translate` VALUES (3338, '国际化配置新增', 'International configuration added'); +INSERT INTO `sys_menu_translate` VALUES (3339, '国际化配置查询', 'Internationalization configuration query'); +INSERT INTO `sys_menu_translate` VALUES (3340, '国际化配置修改', 'Internationalization configuration modification'); +INSERT INTO `sys_menu_translate` VALUES (3341, '国际化配置删除', 'Internationalization configuration deletion'); +INSERT INTO `sys_menu_translate` VALUES (3342, '国际化配置导出', 'International configuration export'); +INSERT INTO `sys_menu_translate` VALUES (3343, '数据中心', 'Data Center'); +INSERT INTO `sys_menu_translate` VALUES (3344, '数据分析', 'Data analysis'); +INSERT INTO `sys_menu_translate` VALUES (3345, '历史记录', 'Historical records'); +INSERT INTO `sys_menu_translate` VALUES (3346, '历史记录查询', 'Historical record query'); +INSERT INTO `sys_menu_translate` VALUES (3347, '模板组态', 'Template configuration'); +INSERT INTO `sys_menu_translate` VALUES (3348, '场景组态', 'Scene configuration'); +INSERT INTO `sys_menu_translate` VALUES (3349, '平台下发指令', 'Platform issues instructions'); +INSERT INTO `sys_menu_translate` VALUES (3350, '指令编码', 'Instruction encoding'); +INSERT INTO `sys_menu_translate` VALUES (3351, '指令解码', 'Instruction decoding'); +INSERT INTO `sys_menu_translate` VALUES (3352, '子设备', 'Sub devices'); +INSERT INTO `sys_menu_translate` VALUES (3353, '子设备详情', 'Details of sub devices'); +INSERT INTO `sys_menu_translate` VALUES (3354, '子设备新增', 'Addition of sub devices'); +INSERT INTO `sys_menu_translate` VALUES (3355, '子设备修改', 'Sub device modification'); +INSERT INTO `sys_menu_translate` VALUES (3356, '子设备删除', 'Delete sub devices'); + +-- ---------------------------- +-- Table structure for sys_notice +-- ---------------------------- +DROP TABLE IF EXISTS `sys_notice`; +CREATE TABLE `sys_notice` ( + `notice_id` int NOT NULL AUTO_INCREMENT COMMENT '公告ID', + `notice_title` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '公告标题', + `notice_type` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '公告类型(1通知 2公告)', + `notice_content` longblob NULL COMMENT '公告内容', + `status` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '0' COMMENT '公告状态(0正常 1关闭)', + `create_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '创建者', + `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间', + `update_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '更新者', + `update_time` datetime NULL DEFAULT NULL COMMENT '更新时间', + `remark` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '备注', + PRIMARY KEY (`notice_id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 3 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '通知公告表' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of sys_notice +-- ---------------------------- +INSERT INTO `sys_notice` VALUES (1, '信达物联工控邦V1.0.1版本发布', '2', 0x3C703EE8BF99E698AFE6B58BE8AF95E58685E5AEB9EFBC8CE696B0E78988E69CACE58A9FE883BDEFBC9A3C2F703E3C703E3C62723E3C2F703E3C6F6C3E3C6C693EE694AFE68C81E5A49AE7A79FE688B73C2F6C693E3C6C693EE694AFE68C81E8AEBEE5A487E58886E4BAAB3C2F6C693E3C6C693EE694AFE68C81E697B6E5BA8FE695B0E68DAEE5BA933C2F6C693E3C6C693EE7AE80E58D95E8AEA4E8AF81E5928CE58AA0E5AF86E8AEA4E8AF81E7BB9FE4B8803C2F6C693E3C2F6F6C3E, '0', 'admin', '2021-12-15 21:36:18', 'admin', '2025-01-08 16:04:44', '管理员'); +INSERT INTO `sys_notice` VALUES (2, '信达物联工控邦 sdk支持树莓派', '1', 0x3C703EE8BF99E698AFE6B58BE8AF95E58685E5AEB9EFBC8CE79BAEE5898D73646BE694AFE68C81E79A84E78988E69CAC3A3C2F703E3C703E3C62723E3C2F703E3C703E3C62723E3C2F703E3C703E3C62723E3C2F703E3C6F6C3E3C6C693E41726475696E6F20657370383236363C2F6C693E3C6C693E41726475696E6F2065737033323C2F6C693E3C6C693E6573702D6964663C2F6C693E3C6C693E72617370626572727920E6A091E88E93E6B4BE3C2F6C693E3C2F6F6C3E, '0', 'admin', '2021-12-15 21:36:18', 'admin', '2025-01-08 16:05:05', '管理员'); + +-- ---------------------------- +-- Table structure for sys_oper_log +-- ---------------------------- +DROP TABLE IF EXISTS `sys_oper_log`; +CREATE TABLE `sys_oper_log` ( + `oper_id` bigint NOT NULL AUTO_INCREMENT COMMENT '操作日志ID', + `title` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '模块标题', + `business_type` int NULL DEFAULT 0 COMMENT '业务类型(0其它 1新增 2修改 3删除)', + `method` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '方法名称', + `request_method` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '请求方式', + `operator_type` int NULL DEFAULT 0 COMMENT '操作类别(0其它 1后台用户 2手机端用户)', + `oper_name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '操作人员', + `dept_name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '部门名称', + `oper_url` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '请求URL', + `oper_ip` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '主机地址', + `oper_location` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '操作地点', + `oper_param` varchar(2000) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '请求参数', + `json_result` varchar(2000) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '返回参数', + `status` int NULL DEFAULT 0 COMMENT '操作状态(0正常 1异常)', + `error_msg` varchar(2000) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '错误消息', + `oper_time` datetime NULL DEFAULT NULL COMMENT '操作时间', + PRIMARY KEY (`oper_id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 173 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '操作日志记录' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of sys_oper_log +-- ---------------------------- +INSERT INTO `sys_oper_log` VALUES (131, '图库管理', 3, 'com.xinda.scada.controller.ScadaGalleryController.remove()', 'DELETE', 1, 'admin', NULL, '/scada/gallery/3901', '61.179.246.105', '山东省 日照市', '{}', '{\"msg\":\"操作成功\",\"code\":200}', 0, NULL, '2025-01-07 16:22:06'); +INSERT INTO `sys_oper_log` VALUES (132, '参数管理', 2, 'com.xinda.web.controller.system.SysConfigController.edit()', 'PUT', 1, 'admin', NULL, '/system/config', '127.0.0.1', '内网IP', '{\"configId\":5,\"configKey\":\"sys.account.registerUser\",\"configName\":\"账号自助-是否开启用户注册功能\",\"configType\":\"Y\",\"configValue\":\"false\",\"createBy\":\"admin\",\"createTime\":\"2021-12-15 21:36:18\",\"params\":{},\"remark\":\"是否开启注册用户功能(true开启,false关闭)\",\"updateBy\":\"admin\",\"updateTime\":\"2021-12-24 22:43:33\"}', '{\"msg\":\"操作成功\",\"code\":200}', 0, NULL, '2025-01-07 21:43:52'); +INSERT INTO `sys_oper_log` VALUES (133, '参数管理', 2, 'com.xinda.web.controller.system.SysConfigController.edit()', 'PUT', 1, 'admin', NULL, '/system/config', '127.0.0.1', '内网IP', '{\"configId\":6,\"configKey\":\"sys.account.captchaEnabled\",\"configName\":\"账号自助-验证码开关\",\"configType\":\"Y\",\"configValue\":\"false\",\"createBy\":\"admin\",\"createTime\":\"2023-03-10 23:29:21\",\"params\":{},\"remark\":\"是否开启验证码功能(true开启,false关闭)\",\"updateBy\":\"admin\"}', '{\"msg\":\"操作成功\",\"code\":200}', 0, NULL, '2025-01-07 21:43:58'); +INSERT INTO `sys_oper_log` VALUES (134, '新闻资讯', 3, 'com.xinda.data.controller.NewsController.remove()', 'DELETE', 1, 'admin', NULL, '/iot/news/8,7,6,5,4,3,2,1', '127.0.0.1', '内网IP', '{}', '{\"msg\":\"操作成功\",\"code\":200}', 0, NULL, '2025-01-07 21:44:26'); +INSERT INTO `sys_oper_log` VALUES (135, '菜单管理', 3, 'com.xinda.web.controller.system.SysMenuController.remove()', 'DELETE', 1, 'admin', NULL, '/system/menu/4', '127.0.0.1', '内网IP', '{}', '{\"msg\":\"菜单已分配,不允许删除\",\"code\":601}', 0, NULL, '2025-01-07 21:45:08'); +INSERT INTO `sys_oper_log` VALUES (136, '机构管理', 2, 'com.xinda.web.controller.system.SysDeptController.edit()', 'PUT', 1, 'admin', NULL, '/system/dept', '127.0.0.1', '内网IP', '{\"ancestors\":\"0\",\"children\":[],\"deptId\":100,\"deptName\":\"信达物联\",\"deptType\":1,\"deptUserId\":1,\"email\":\"164770707@qq.com\",\"leader\":\"XinDa\",\"orderNum\":0,\"params\":{},\"parentId\":0,\"phone\":\"15888888888\",\"showOwner\":true,\"status\":\"0\",\"updateBy\":\"admin\",\"userName\":\"admin\"}', '{\"msg\":\"操作成功\",\"code\":200}', 0, NULL, '2025-01-07 22:14:35'); +INSERT INTO `sys_oper_log` VALUES (137, '机构管理', 2, 'com.xinda.web.controller.system.SysDeptController.edit()', 'PUT', 1, 'admin', NULL, '/system/dept', '127.0.0.1', '内网IP', '{\"ancestors\":\"0\",\"children\":[],\"deptId\":100,\"deptName\":\"信达物联\",\"deptType\":1,\"deptUserId\":1,\"email\":\"164770707@qq.com\",\"leader\":\"马春雷\",\"orderNum\":0,\"params\":{},\"parentId\":0,\"phone\":\"15888888888\",\"showOwner\":true,\"status\":\"0\",\"updateBy\":\"admin\",\"userName\":\"admin\"}', '{\"msg\":\"操作成功\",\"code\":200}', 0, NULL, '2025-01-07 22:15:06'); +INSERT INTO `sys_oper_log` VALUES (138, '机构管理', 2, 'com.xinda.web.controller.system.SysDeptController.edit()', 'PUT', 1, 'admin', NULL, '/system/dept', '127.0.0.1', '内网IP', '{\"ancestors\":\"0,100\",\"children\":[],\"deptId\":101,\"deptName\":\"web端注册用户归属机构\",\"deptType\":2,\"deptUserId\":7,\"leader\":\"gongkongbang\",\"orderNum\":0,\"params\":{},\"parentId\":100,\"parentName\":\"信达物联\",\"phone\":\"15888888885\",\"showOwner\":true,\"status\":\"0\",\"updateBy\":\"admin\",\"userName\":\"xinda-web\"}', '{\"msg\":\"操作成功\",\"code\":200}', 0, NULL, '2025-01-07 22:15:20'); +INSERT INTO `sys_oper_log` VALUES (139, '用户管理', 2, 'com.xinda.web.controller.system.SysUserController.edit()', 'PUT', 1, 'admin', NULL, '/system/user', '127.0.0.1', '内网IP', '{\"admin\":false,\"avatar\":\"\",\"createBy\":\"\",\"createTime\":\"2024-05-08 16:35:49\",\"delFlag\":\"0\",\"dept\":{\"ancestors\":\"0,100\",\"children\":[],\"deptId\":101,\"deptName\":\"web端注册用户归属机构\",\"deptUserId\":7,\"deptUserName\":\"xinda-web\",\"leader\":\"gongkongbang\",\"orderNum\":0,\"params\":{},\"parentId\":100,\"status\":\"0\"},\"deptId\":101,\"email\":\"\",\"loginIp\":\"\",\"nickName\":\"gongkongbang\",\"params\":{},\"phonenumber\":\"15888888885\",\"postIds\":[],\"roleIds\":[7],\"roles\":[{\"admin\":false,\"dataScope\":\"1\",\"deptCheckStrictly\":false,\"flag\":false,\"menuCheckStrictly\":false,\"params\":{},\"roleId\":7,\"roleKey\":\"manager\",\"roleName\":\"管理员\",\"roleSort\":1,\"status\":\"0\"}],\"sex\":\"0\",\"status\":\"0\",\"updateBy\":\"admin\",\"userId\":7,\"userName\":\"xinda-web\"}', '{\"msg\":\"操作成功\",\"code\":200}', 0, NULL, '2025-01-07 22:15:39'); +INSERT INTO `sys_oper_log` VALUES (140, '用户管理', 2, 'com.xinda.web.controller.system.SysUserController.resetPwd()', 'PUT', 1, 'admin', NULL, '/system/user/resetPwd', '127.0.0.1', '内网IP', '{\"admin\":false,\"params\":{},\"updateBy\":\"admin\",\"userId\":7}', '{\"msg\":\"操作成功\",\"code\":200}', 0, NULL, '2025-01-07 22:15:48'); +INSERT INTO `sys_oper_log` VALUES (141, '用户管理', 2, 'com.xinda.web.controller.system.SysUserController.edit()', 'PUT', 1, 'admin', NULL, '/system/user', '127.0.0.1', '内网IP', '{\"admin\":false,\"avatar\":\"\",\"createBy\":\"admin\",\"createTime\":\"2022-04-15 16:21:25\",\"delFlag\":\"0\",\"dept\":{\"ancestors\":\"0\",\"children\":[],\"deptId\":100,\"deptName\":\"信达物联\",\"deptUserId\":1,\"deptUserName\":\"admin\",\"leader\":\"马春雷\",\"orderNum\":0,\"params\":{},\"parentId\":0,\"status\":\"0\"},\"deptId\":100,\"email\":\"\",\"loginDate\":\"2023-08-29 14:52:27\",\"loginIp\":\"61.145.97.26\",\"nickName\":\"信达租户壹\",\"params\":{},\"phonenumber\":\"15888888880\",\"postIds\":[],\"roleIds\":[2],\"roles\":[{\"admin\":false,\"dataScope\":\"5\",\"deptCheckStrictly\":false,\"flag\":false,\"menuCheckStrictly\":false,\"params\":{},\"roleId\":2,\"roleKey\":\"tenant\",\"roleName\":\"设备租户\",\"roleSort\":2,\"status\":\"0\"}],\"sex\":\"0\",\"status\":\"0\",\"updateBy\":\"admin\",\"userId\":2,\"userName\":\"xinda-t1\"}', '{\"msg\":\"操作成功\",\"code\":200}', 0, NULL, '2025-01-07 22:16:14'); +INSERT INTO `sys_oper_log` VALUES (142, '用户管理', 2, 'com.xinda.web.controller.system.SysUserController.edit()', 'PUT', 1, 'admin', NULL, '/system/user', '127.0.0.1', '内网IP', '{\"admin\":false,\"avatar\":\"\",\"createBy\":\"admin\",\"createTime\":\"2022-04-15 16:21:25\",\"delFlag\":\"0\",\"dept\":{\"ancestors\":\"0\",\"children\":[],\"deptId\":100,\"deptName\":\"信达物联\",\"deptUserId\":1,\"deptUserName\":\"admin\",\"leader\":\"马春雷\",\"orderNum\":0,\"params\":{},\"parentId\":0,\"status\":\"0\"},\"deptId\":100,\"email\":\"\",\"loginDate\":\"2023-08-29 14:52:27\",\"loginIp\":\"61.145.97.26\",\"nickName\":\"信达租户壹\",\"params\":{},\"phonenumber\":\"15888888880\",\"postIds\":[],\"roleIds\":[2],\"roles\":[{\"admin\":false,\"dataScope\":\"5\",\"deptCheckStrictly\":false,\"flag\":false,\"menuCheckStrictly\":false,\"params\":{},\"roleId\":2,\"roleKey\":\"tenant\",\"roleName\":\"设备租户\",\"roleSort\":2,\"status\":\"0\"}],\"sex\":\"0\",\"status\":\"0\",\"updateBy\":\"admin\",\"userId\":2,\"userName\":\"xinda-t1\"}', '{\"msg\":\"操作成功\",\"code\":200}', 0, NULL, '2025-01-07 22:16:22'); +INSERT INTO `sys_oper_log` VALUES (143, '用户管理', 2, 'com.xinda.web.controller.system.SysUserController.edit()', 'PUT', 1, 'admin', NULL, '/system/user', '127.0.0.1', '内网IP', '{\"admin\":false,\"avatar\":\"\",\"createBy\":\"admin\",\"createTime\":\"2022-04-15 16:22:08\",\"delFlag\":\"0\",\"dept\":{\"ancestors\":\"0\",\"children\":[],\"deptId\":100,\"deptName\":\"信达物联\",\"deptUserId\":1,\"deptUserName\":\"admin\",\"leader\":\"马春雷\",\"orderNum\":0,\"params\":{},\"parentId\":0,\"status\":\"0\"},\"deptId\":100,\"email\":\"\",\"loginDate\":\"2022-06-12 00:54:28\",\"loginIp\":\"127.0.0.1\",\"nickName\":\"信达租户贰\",\"params\":{},\"phonenumber\":\"15888888881\",\"postIds\":[],\"roleIds\":[2],\"roles\":[{\"admin\":false,\"dataScope\":\"5\",\"deptCheckStrictly\":false,\"flag\":false,\"menuCheckStrictly\":false,\"params\":{},\"roleId\":2,\"roleKey\":\"tenant\",\"roleName\":\"设备租户\",\"roleSort\":2,\"status\":\"0\"}],\"sex\":\"0\",\"status\":\"0\",\"updateBy\":\"admin\",\"userId\":3,\"userName\":\"xinda-t2\"}', '{\"msg\":\"操作成功\",\"code\":200}', 0, NULL, '2025-01-07 22:16:34'); +INSERT INTO `sys_oper_log` VALUES (144, '用户管理', 2, 'com.xinda.web.controller.system.SysUserController.edit()', 'PUT', 1, 'admin', NULL, '/system/user', '127.0.0.1', '内网IP', '{\"admin\":false,\"avatar\":\"\",\"createBy\":\"admin\",\"createTime\":\"2022-04-15 16:22:37\",\"delFlag\":\"0\",\"dept\":{\"ancestors\":\"0\",\"children\":[],\"deptId\":100,\"deptName\":\"信达物联\",\"deptUserId\":1,\"deptUserName\":\"admin\",\"leader\":\"马春雷\",\"orderNum\":0,\"params\":{},\"parentId\":0,\"status\":\"0\"},\"deptId\":100,\"email\":\"\",\"loginDate\":\"2024-01-23 10:42:28\",\"loginIp\":\"127.0.0.1\",\"nickName\":\"信达用户壹\",\"params\":{},\"phonenumber\":\"15888888882\",\"postIds\":[],\"roleIds\":[3],\"roles\":[{\"admin\":false,\"dataScope\":\"5\",\"deptCheckStrictly\":false,\"flag\":false,\"menuCheckStrictly\":false,\"params\":{},\"roleId\":3,\"roleKey\":\"general\",\"roleName\":\"普通用户\",\"roleSort\":3,\"status\":\"0\"}],\"sex\":\"0\",\"status\":\"0\",\"updateBy\":\"admin\",\"userId\":4,\"userName\":\"xinda-u1\"}', '{\"msg\":\"操作成功\",\"code\":200}', 0, NULL, '2025-01-07 22:16:47'); +INSERT INTO `sys_oper_log` VALUES (145, '用户管理', 2, 'com.fastbee.web.controller.system.SysUserController.edit()', 'PUT', 1, 'admin', NULL, '/system/user', '127.0.0.1', '内网IP', '{\"admin\":false,\"avatar\":\"\",\"createBy\":\"admin\",\"createTime\":\"2022-04-15 16:23:13\",\"delFlag\":\"0\",\"dept\":{\"ancestors\":\"0\",\"children\":[],\"deptId\":100,\"deptName\":\"信达物联\",\"deptUserId\":1,\"deptUserName\":\"admin\",\"leader\":\"马春雷\",\"orderNum\":0,\"params\":{},\"parentId\":0,\"status\":\"0\"},\"deptId\":100,\"email\":\"\",\"loginDate\":\"2022-06-12 00:55:45\",\"loginIp\":\"127.0.0.1\",\"nickName\":\"信达用户贰\",\"params\":{},\"phonenumber\":\"15888888883\",\"postIds\":[],\"roleIds\":[3],\"roles\":[{\"admin\":false,\"dataScope\":\"5\",\"deptCheckStrictly\":false,\"flag\":false,\"menuCheckStrictly\":false,\"params\":{},\"roleId\":3,\"roleKey\":\"general\",\"roleName\":\"普通用户\",\"roleSort\":3,\"status\":\"0\"}],\"sex\":\"0\",\"status\":\"0\",\"updateBy\":\"admin\",\"userId\":5,\"userName\":\"fastbee-u2\"}', '{\"msg\":\"操作成功\",\"code\":200}', 0, NULL, '2025-01-07 22:16:55'); +INSERT INTO `sys_oper_log` VALUES (146, '个人信息', 2, 'com.fastbee.web.controller.system.SysProfileController.updateProfile()', 'PUT', 1, 'admin', NULL, '/system/user/profile', '127.0.0.1', '内网IP', '{\"admin\":true,\"createBy\":\"admin\",\"createTime\":\"2021-12-15 21:36:18\",\"delFlag\":\"0\",\"dept\":{\"ancestors\":\"0\",\"children\":[],\"deptId\":100,\"deptName\":\"工控帮\",\"deptUserId\":1,\"deptUserName\":\"admin\",\"leader\":\"XinDa\",\"orderNum\":0,\"params\":{},\"parentId\":0,\"status\":\"0\"},\"deptId\":100,\"email\":\"164770707@qq.com\",\"language\":\"zh-CN\",\"loginDate\":\"2025-01-07 20:00:52\",\"loginIp\":\"127.0.0.1\",\"nickName\":\"信达管理员\",\"params\":{},\"phonenumber\":\"15888888888\",\"remark\":\"管理员\",\"roles\":[{\"admin\":true,\"dataScope\":\"1\",\"deptCheckStrictly\":false,\"flag\":false,\"menuCheckStrictly\":false,\"params\":{},\"roleId\":1,\"roleKey\":\"admin\",\"roleName\":\"超级管理员\",\"roleSort\":1,\"status\":\"0\"}],\"sex\":\"0\",\"status\":\"0\",\"userId\":1,\"userName\":\"admin\"}', '{\"msg\":\"操作成功\",\"code\":200}', 0, NULL, '2025-01-07 22:17:10'); +INSERT INTO `sys_oper_log` VALUES (147, '个人信息', 2, 'com.fastbee.web.controller.system.SysProfileController.updateProfile()', 'PUT', 1, 'admin', NULL, '/system/user/profile', '127.0.0.1', '内网IP', '{\"admin\":true,\"createBy\":\"admin\",\"createTime\":\"2021-12-15 21:36:18\",\"delFlag\":\"0\",\"dept\":{\"ancestors\":\"0\",\"children\":[],\"deptId\":100,\"deptName\":\"工控帮\",\"deptUserId\":1,\"deptUserName\":\"admin\",\"leader\":\"XinDa\",\"orderNum\":0,\"params\":{},\"parentId\":0,\"status\":\"0\"},\"deptId\":100,\"email\":\"329487255@qq.com\",\"language\":\"zh-CN\",\"loginDate\":\"2025-01-07 20:00:52\",\"loginIp\":\"127.0.0.1\",\"nickName\":\"信达管理员\",\"params\":{},\"phonenumber\":\"15888888888\",\"remark\":\"管理员\",\"roles\":[{\"admin\":true,\"dataScope\":\"1\",\"deptCheckStrictly\":false,\"flag\":false,\"menuCheckStrictly\":false,\"params\":{},\"roleId\":1,\"roleKey\":\"admin\",\"roleName\":\"超级管理员\",\"roleSort\":1,\"status\":\"0\"}],\"sex\":\"0\",\"status\":\"0\",\"userId\":1,\"userName\":\"admin\"}', '{\"msg\":\"操作成功\",\"code\":200}', 0, NULL, '2025-01-07 22:17:17'); +INSERT INTO `sys_oper_log` VALUES (148, '用户头像', 2, 'com.fastbee.web.controller.system.SysProfileController.avatar()', 'POST', 1, 'admin', NULL, '/system/user/profile/avatar', '127.0.0.1', '内网IP', '', '{\"msg\":\"操作成功\",\"imgUrl\":\"/profile/avatar/2025/01/07/blob_20250107221833A002.png\",\"code\":200}', 0, NULL, '2025-01-07 22:18:33'); +INSERT INTO `sys_oper_log` VALUES (149, '个人信息', 2, 'com.fastbee.web.controller.system.SysProfileController.updateProfile()', 'PUT', 1, 'admin', NULL, '/system/user/profile', '127.0.0.1', '内网IP', '{\"admin\":true,\"createBy\":\"admin\",\"createTime\":\"2021-12-15 21:36:18\",\"delFlag\":\"0\",\"dept\":{\"ancestors\":\"0\",\"children\":[],\"deptId\":100,\"deptName\":\"工控帮\",\"deptUserId\":1,\"deptUserName\":\"admin\",\"leader\":\"XinDa\",\"orderNum\":0,\"params\":{},\"parentId\":0,\"status\":\"0\"},\"deptId\":100,\"email\":\"329487255@qq.com\",\"language\":\"zh-CN\",\"loginDate\":\"2025-01-07 20:00:52\",\"loginIp\":\"127.0.0.1\",\"nickName\":\"信达管理员\",\"params\":{},\"phonenumber\":\"15888888888\",\"remark\":\"管理员\",\"roles\":[{\"admin\":true,\"dataScope\":\"1\",\"deptCheckStrictly\":false,\"flag\":false,\"menuCheckStrictly\":false,\"params\":{},\"roleId\":1,\"roleKey\":\"admin\",\"roleName\":\"超级管理员\",\"roleSort\":1,\"status\":\"0\"}],\"sex\":\"1\",\"status\":\"0\",\"userId\":1,\"userName\":\"admin\"}', '{\"msg\":\"操作成功\",\"code\":200}', 0, NULL, '2025-01-07 22:18:36'); +INSERT INTO `sys_oper_log` VALUES (150, '在线用户', 7, 'com.fastbee.web.controller.monitor.SysUserOnlineController.forceLogout()', 'DELETE', 1, 'admin', NULL, '/monitor/online/3a8dffc7-9062-4db2-8128-59a914f2732c', '127.0.0.1', '内网IP', '{}', '{\"msg\":\"操作成功\",\"code\":200}', 0, NULL, '2025-01-07 22:21:39'); +INSERT INTO `sys_oper_log` VALUES (151, '在线用户', 7, 'com.fastbee.web.controller.monitor.SysUserOnlineController.forceLogout()', 'DELETE', 1, 'admin', NULL, '/monitor/online/c69529ec-cb6a-47e4-bd67-9210b11e4ab4', '127.0.0.1', '内网IP', '{}', '{\"msg\":\"操作成功\",\"code\":200}', 0, NULL, '2025-01-07 22:21:42'); +INSERT INTO `sys_oper_log` VALUES (152, '在线用户', 7, 'com.fastbee.web.controller.monitor.SysUserOnlineController.forceLogout()', 'DELETE', 1, 'admin', NULL, '/monitor/online/d05295b4-8de2-4900-8efd-381726771821', '127.0.0.1', '内网IP', '{}', '{\"msg\":\"操作成功\",\"code\":200}', 0, NULL, '2025-01-07 22:21:44'); +INSERT INTO `sys_oper_log` VALUES (153, '在线用户', 7, 'com.fastbee.web.controller.monitor.SysUserOnlineController.forceLogout()', 'DELETE', 1, 'admin', NULL, '/monitor/online/b085f436-0daa-46ba-82fd-7bd939f70d65', '127.0.0.1', '内网IP', '{}', '{\"msg\":\"操作成功\",\"code\":200}', 0, NULL, '2025-01-07 22:21:46'); +INSERT INTO `sys_oper_log` VALUES (154, '添加产品', 1, 'com.fastbee.data.controller.ProductController.add()', 'POST', 1, 'admin', NULL, '/iot/product', '127.0.0.1', '内网IP', '{\"categoryId\":1,\"categoryName\":\"工控网关\",\"createTime\":\"2025-01-07 23:39:55.08\",\"deviceType\":1,\"imgUrl\":\"\",\"isAuthorize\":0,\"isSys\":0,\"locationWay\":1,\"mqttAccount\":\"XinDa\",\"mqttPassword\":\"P86O045RRI11H265\",\"mqttSecret\":\"KD1W717142P6SDZH\",\"networkMethod\":1,\"params\":{},\"productId\":136,\"productName\":\"工控帮华泰数智网关\",\"protocolCode\":\"GONGKONGBANG-HTSZ\",\"status\":1,\"tenantId\":1,\"tenantName\":\"admin\",\"transport\":\"MQTT\",\"vertificateMethod\":3}', '{\"msg\":\"操作成功\",\"code\":200,\"data\":{\"categoryId\":1,\"categoryName\":\"工控网关\",\"createTime\":\"2025-01-07 23:39:55.08\",\"deviceType\":1,\"imgUrl\":\"\",\"isAuthorize\":0,\"isSys\":0,\"locationWay\":1,\"mqttAccount\":\"XinDa\",\"mqttPassword\":\"P86O045RRI11H265\",\"mqttSecret\":\"KD1W717142P6SDZH\",\"networkMethod\":1,\"params\":{},\"productId\":136,\"productName\":\"工控帮华泰数智网关\",\"protocolCode\":\"GONGKONGBANG-HTSZ\",\"status\":1,\"tenantId\":1,\"tenantName\":\"admin\",\"transport\":\"MQTT\",\"vertificateMethod\":3}}', 0, NULL, '2025-01-07 23:39:55'); +INSERT INTO `sys_oper_log` VALUES (155, '物模型', 1, 'com.fastbee.data.controller.ThingsModelController.add()', 'POST', 1, 'admin', NULL, '/iot/model', '127.0.0.1', '内网IP', '{\"createTime\":\"2025-01-07 23:40:49.61\",\"datatype\":\"decimal\",\"identifier\":\"AD1\",\"isChart\":1,\"isHistory\":1,\"isMonitor\":1,\"isReadonly\":1,\"isSharePerm\":1,\"modelId\":883,\"modelName\":\"AD1\",\"modelOrder\":0,\"params\":{},\"productId\":136,\"productName\":\"工控帮华泰数智网关\",\"specs\":\"{\\\"type\\\":\\\"decimal\\\",\\\"min\\\":0,\\\"max\\\":100,\\\"unit\\\":\\\"\\\",\\\"step\\\":1}\",\"tenantId\":1,\"tenantName\":\"admin\",\"type\":1}', '{\"msg\":\"操作成功\",\"code\":200}', 0, NULL, '2025-01-07 23:40:50'); +INSERT INTO `sys_oper_log` VALUES (156, '物模型', 1, 'com.fastbee.data.controller.ThingsModelController.add()', 'POST', 1, 'admin', NULL, '/iot/model', '127.0.0.1', '内网IP', '{\"createTime\":\"2025-01-07 23:41:09.493\",\"datatype\":\"decimal\",\"identifier\":\"AD2\",\"isChart\":1,\"isHistory\":1,\"isMonitor\":1,\"isReadonly\":1,\"isSharePerm\":1,\"modelId\":884,\"modelName\":\"AD2\",\"modelOrder\":1,\"params\":{},\"productId\":136,\"productName\":\"工控帮华泰数智网关\",\"specs\":\"{\\\"type\\\":\\\"decimal\\\",\\\"min\\\":0,\\\"max\\\":100,\\\"unit\\\":\\\"\\\",\\\"step\\\":1}\",\"tenantId\":1,\"tenantName\":\"admin\",\"type\":1}', '{\"msg\":\"操作成功\",\"code\":200}', 0, NULL, '2025-01-07 23:41:09'); +INSERT INTO `sys_oper_log` VALUES (157, '物模型', 1, 'com.fastbee.data.controller.ThingsModelController.add()', 'POST', 1, 'admin', NULL, '/iot/model', '127.0.0.1', '内网IP', '{\"createTime\":\"2025-01-07 23:42:04.639\",\"datatype\":\"decimal\",\"identifier\":\"AD3\",\"isChart\":1,\"isHistory\":1,\"isMonitor\":1,\"isReadonly\":1,\"isSharePerm\":1,\"modelId\":885,\"modelName\":\"AD3\",\"modelOrder\":2,\"params\":{},\"productId\":136,\"productName\":\"工控帮华泰数智网关\",\"specs\":\"{\\\"type\\\":\\\"decimal\\\",\\\"min\\\":0,\\\"max\\\":100,\\\"unit\\\":\\\"\\\",\\\"step\\\":1}\",\"tenantId\":1,\"tenantName\":\"admin\",\"type\":1}', '{\"msg\":\"操作成功\",\"code\":200}', 0, NULL, '2025-01-07 23:42:05'); +INSERT INTO `sys_oper_log` VALUES (158, '物模型', 1, 'com.fastbee.data.controller.ThingsModelController.add()', 'POST', 1, 'admin', NULL, '/iot/model', '127.0.0.1', '内网IP', '{\"createTime\":\"2025-01-07 23:42:34.875\",\"datatype\":\"decimal\",\"identifier\":\"AD4\",\"isChart\":1,\"isHistory\":1,\"isMonitor\":1,\"isReadonly\":1,\"isSharePerm\":1,\"modelId\":886,\"modelName\":\"AD4\",\"modelOrder\":3,\"params\":{},\"productId\":136,\"productName\":\"工控帮华泰数智网关\",\"specs\":\"{\\\"type\\\":\\\"decimal\\\",\\\"min\\\":0,\\\"max\\\":100,\\\"unit\\\":\\\"\\\",\\\"step\\\":1}\",\"tenantId\":1,\"tenantName\":\"admin\",\"type\":1}', '{\"msg\":\"操作成功\",\"code\":200}', 0, NULL, '2025-01-07 23:42:35'); +INSERT INTO `sys_oper_log` VALUES (159, '物模型', 1, 'com.fastbee.data.controller.ThingsModelController.add()', 'POST', 1, 'admin', NULL, '/iot/model', '127.0.0.1', '内网IP', '{\"createTime\":\"2025-01-07 23:43:04.924\",\"datatype\":\"decimal\",\"identifier\":\"AD5\",\"isChart\":1,\"isHistory\":1,\"isMonitor\":1,\"isReadonly\":1,\"isSharePerm\":1,\"modelId\":887,\"modelName\":\"AD5\",\"modelOrder\":4,\"params\":{},\"productId\":136,\"productName\":\"工控帮华泰数智网关\",\"specs\":\"{\\\"type\\\":\\\"decimal\\\",\\\"min\\\":0,\\\"max\\\":100,\\\"unit\\\":\\\"\\\",\\\"step\\\":1}\",\"tenantId\":1,\"tenantName\":\"admin\",\"type\":1}', '{\"msg\":\"操作成功\",\"code\":200}', 0, NULL, '2025-01-07 23:43:05'); +INSERT INTO `sys_oper_log` VALUES (160, '物模型', 1, 'com.fastbee.data.controller.ThingsModelController.add()', 'POST', 1, 'admin', NULL, '/iot/model', '127.0.0.1', '内网IP', '{\"createTime\":\"2025-01-07 23:43:41.099\",\"datatype\":\"decimal\",\"identifier\":\"AD6\",\"isChart\":1,\"isHistory\":1,\"isMonitor\":1,\"isReadonly\":1,\"isSharePerm\":1,\"modelId\":888,\"modelName\":\"AD6\",\"modelOrder\":5,\"params\":{},\"productId\":136,\"productName\":\"工控帮华泰数智网关\",\"specs\":\"{\\\"type\\\":\\\"decimal\\\",\\\"min\\\":0,\\\"max\\\":100,\\\"unit\\\":\\\"\\\",\\\"step\\\":1}\",\"tenantId\":1,\"tenantName\":\"admin\",\"type\":1}', '{\"msg\":\"操作成功\",\"code\":200}', 0, NULL, '2025-01-07 23:43:41'); +INSERT INTO `sys_oper_log` VALUES (161, '更新产品状态', 2, 'com.fastbee.data.controller.ProductController.changeProductStatus()', 'PUT', 1, 'admin', NULL, '/iot/product/status/', '127.0.0.1', '内网IP', '{\"deviceType\":1,\"productId\":136,\"status\":2}', '{\"msg\":\"操作成功\",\"code\":200}', 0, NULL, '2025-01-07 23:45:55'); +INSERT INTO `sys_oper_log` VALUES (162, '更新产品状态', 2, 'com.fastbee.data.controller.ProductController.changeProductStatus()', 'PUT', 1, 'admin', NULL, '/iot/product/status/', '127.0.0.1', '内网IP', '{\"deviceType\":1,\"productId\":136,\"status\":1}', '{\"msg\":\"操作成功\",\"code\":200}', 0, NULL, '2025-01-07 23:46:07'); +INSERT INTO `sys_oper_log` VALUES (163, '物模型', 1, 'com.fastbee.data.controller.ThingsModelController.add()', 'POST', 1, 'admin', NULL, '/iot/model', '127.0.0.1', '内网IP', '{\"createTime\":\"2025-01-07 23:46:28.554\",\"datatype\":\"decimal\",\"identifier\":\"AD7\",\"isChart\":1,\"isHistory\":1,\"isMonitor\":1,\"isReadonly\":1,\"isSharePerm\":1,\"modelId\":889,\"modelName\":\"AD7\",\"modelOrder\":6,\"params\":{},\"productId\":136,\"productName\":\"工控帮华泰数智网关\",\"specs\":\"{\\\"type\\\":\\\"decimal\\\",\\\"min\\\":0,\\\"max\\\":100,\\\"unit\\\":\\\"\\\",\\\"step\\\":1}\",\"tenantId\":1,\"tenantName\":\"admin\",\"type\":1}', '{\"msg\":\"操作成功\",\"code\":200}', 0, NULL, '2025-01-07 23:46:29'); +INSERT INTO `sys_oper_log` VALUES (164, '物模型', 1, 'com.fastbee.data.controller.ThingsModelController.add()', 'POST', 1, 'admin', NULL, '/iot/model', '127.0.0.1', '内网IP', '{\"createTime\":\"2025-01-07 23:54:47.042\",\"datatype\":\"bool\",\"identifier\":\"I0.1\",\"isChart\":0,\"isHistory\":1,\"isMonitor\":0,\"isReadonly\":1,\"isSharePerm\":1,\"modelId\":899,\"modelName\":\"I0.1\",\"modelOrder\":0,\"params\":{},\"productId\":136,\"productName\":\"工控帮华泰数智网关\",\"specs\":\"{\\\"type\\\":\\\"bool\\\",\\\"falseText\\\":\\\"断开\\\",\\\"trueText\\\":\\\"闭合\\\"}\",\"tenantId\":1,\"tenantName\":\"admin\",\"type\":1}', '{\"msg\":\"操作成功\",\"code\":200}', 0, NULL, '2025-01-07 23:54:47'); +INSERT INTO `sys_oper_log` VALUES (165, '物模型', 1, 'com.fastbee.data.controller.ThingsModelController.add()', 'POST', 1, 'admin', NULL, '/iot/model', '127.0.0.1', '内网IP', '{\"createTime\":\"2025-01-07 23:58:35.166\",\"datatype\":\"decimal\",\"identifier\":\"lng\",\"isChart\":1,\"isHistory\":1,\"isMonitor\":1,\"isReadonly\":1,\"isSharePerm\":1,\"modelId\":905,\"modelName\":\"lng\",\"modelOrder\":0,\"params\":{},\"productId\":136,\"productName\":\"工控帮华泰数智网关\",\"specs\":\"{\\\"type\\\":\\\"decimal\\\",\\\"min\\\":0,\\\"max\\\":100,\\\"unit\\\":\\\"\\\",\\\"step\\\":1}\",\"tenantId\":1,\"tenantName\":\"admin\",\"type\":1}', '{\"msg\":\"操作成功\",\"code\":200}', 0, NULL, '2025-01-07 23:58:35'); +INSERT INTO `sys_oper_log` VALUES (166, '物模型', 1, 'com.fastbee.data.controller.ThingsModelController.add()', 'POST', 1, 'admin', NULL, '/iot/model', '127.0.0.1', '内网IP', '{\"createTime\":\"2025-01-07 23:59:00.663\",\"datatype\":\"decimal\",\"identifier\":\"lat\",\"isChart\":1,\"isHistory\":1,\"isMonitor\":1,\"isReadonly\":1,\"isSharePerm\":1,\"modelId\":906,\"modelName\":\"lat\",\"modelOrder\":0,\"params\":{},\"productId\":136,\"productName\":\"工控帮华泰数智网关\",\"specs\":\"{\\\"type\\\":\\\"decimal\\\",\\\"min\\\":0,\\\"max\\\":100,\\\"unit\\\":\\\"\\\",\\\"step\\\":1}\",\"tenantId\":1,\"tenantName\":\"admin\",\"type\":1}', '{\"msg\":\"操作成功\",\"code\":200}', 0, NULL, '2025-01-07 23:59:01'); +INSERT INTO `sys_oper_log` VALUES (167, '物模型', 1, 'com.fastbee.data.controller.ThingsModelController.add()', 'POST', 1, 'admin', NULL, '/iot/model', '127.0.0.1', '内网IP', '{\"createTime\":\"2025-01-07 23:59:45.743\",\"datatype\":\"integer\",\"identifier\":\"PAD\",\"isChart\":1,\"isHistory\":1,\"isMonitor\":1,\"isReadonly\":1,\"isSharePerm\":1,\"modelId\":907,\"modelName\":\"PAD\",\"modelOrder\":0,\"params\":{},\"productId\":136,\"productName\":\"工控帮华泰数智网关\",\"specs\":\"{\\\"type\\\":\\\"integer\\\",\\\"min\\\":0,\\\"max\\\":100,\\\"unit\\\":\\\"\\\",\\\"step\\\":1}\",\"tenantId\":1,\"tenantName\":\"admin\",\"type\":1}', '{\"msg\":\"操作成功\",\"code\":200}', 0, NULL, '2025-01-07 23:59:46'); +INSERT INTO `sys_oper_log` VALUES (168, '物模型', 1, 'com.fastbee.data.controller.ThingsModelController.add()', 'POST', 1, 'admin', NULL, '/iot/model', '127.0.0.1', '内网IP', '{\"createTime\":\"2025-01-08 00:02:03.433\",\"datatype\":\"bool\",\"identifier\":\"Q0.1\",\"isChart\":0,\"isHistory\":1,\"isMonitor\":0,\"isReadonly\":0,\"isSharePerm\":1,\"modelId\":908,\"modelName\":\"Q0.1\",\"modelOrder\":0,\"params\":{},\"productId\":136,\"productName\":\"工控帮华泰数智网关\",\"specs\":\"{\\\"type\\\":\\\"bool\\\",\\\"falseText\\\":\\\"断开\\\",\\\"trueText\\\":\\\"闭合\\\"}\",\"tenantId\":1,\"tenantName\":\"admin\",\"type\":2}', '{\"msg\":\"操作成功\",\"code\":200}', 0, NULL, '2025-01-08 00:02:03'); +INSERT INTO `sys_oper_log` VALUES (169, '物模型', 1, 'com.fastbee.data.controller.ThingsModelController.add()', 'POST', 1, 'admin', NULL, '/iot/model', '127.0.0.1', '内网IP', '{\"createTime\":\"2025-01-08 00:07:03.605\",\"datatype\":\"integer\",\"identifier\":\"TIME\",\"isChart\":0,\"isHistory\":1,\"isMonitor\":0,\"isReadonly\":0,\"isSharePerm\":1,\"modelId\":914,\"modelName\":\"TIME\",\"modelOrder\":0,\"params\":{},\"productId\":136,\"productName\":\"工控帮华泰数智网关\",\"specs\":\"{\\\"type\\\":\\\"integer\\\",\\\"min\\\":1,\\\"max\\\":100,\\\"unit\\\":\\\"\\\",\\\"step\\\":1}\",\"tenantId\":1,\"tenantName\":\"admin\",\"type\":2}', '{\"msg\":\"操作成功\",\"code\":200}', 0, NULL, '2025-01-08 00:07:04'); +INSERT INTO `sys_oper_log` VALUES (170, '参数管理', 2, 'com.fastbee.web.controller.system.SysConfigController.edit()', 'PUT', 1, 'admin', NULL, '/system/config', '61.179.246.105', '山东省 日照市', '{\"configId\":6,\"configKey\":\"sys.account.captchaEnabled\",\"configName\":\"账号自助-验证码开关\",\"configType\":\"Y\",\"configValue\":\"true\",\"createBy\":\"admin\",\"createTime\":\"2023-03-10 23:29:21\",\"params\":{},\"remark\":\"是否开启验证码功能(true开启,false关闭)\",\"updateBy\":\"admin\",\"updateTime\":\"2025-01-07 21:43:58\"}', '{\"msg\":\"操作成功\",\"code\":200}', 0, NULL, '2025-01-08 14:16:24'); +INSERT INTO `sys_oper_log` VALUES (171, '更新产品状态', 2, 'com.fastbee.data.controller.ProductController.changeProductStatus()', 'PUT', 1, 'admin', NULL, '/iot/product/status/', '127.0.0.1', '内网IP', '{\"deviceType\":1,\"productId\":136,\"status\":2}', '{\"msg\":\"操作成功\",\"code\":200}', 0, NULL, '2025-01-08 14:33:20'); +INSERT INTO `sys_oper_log` VALUES (172, '添加设备', 1, 'com.fastbee.data.controller.DeviceController.add()', 'POST', 1, 'admin', NULL, '/iot/device', '127.0.0.1', '内网IP', '{\"createTime\":\"2025-01-08 14:33:58.315\",\"deviceId\":232,\"deviceName\":\"工控帮测试设备\",\"deviceType\":1,\"firmwareVersion\":1,\"imgUrl\":\"\",\"isShadow\":0,\"isSimulate\":0,\"locationWay\":1,\"networkAddress\":\"内网IP\",\"networkIp\":\"127.0.0.1\",\"params\":{},\"productId\":136,\"productName\":\"工控帮华泰数智网关\",\"rssi\":0,\"serialNumber\":\"D15SPS058P39\",\"status\":1,\"tenantId\":1,\"tenantName\":\"admin\"}', '{\"msg\":\"操作成功\",\"code\":200,\"data\":{\"createTime\":\"2025-01-08 14:33:58.315\",\"deviceId\":232,\"deviceName\":\"工控帮测试设备\",\"deviceType\":1,\"firmwareVersion\":1,\"imgUrl\":\"\",\"isShadow\":0,\"isSimulate\":0,\"locationWay\":1,\"networkAddress\":\"内网IP\",\"networkIp\":\"127.0.0.1\",\"params\":{},\"productId\":136,\"productName\":\"工控帮华泰数智网关\",\"rssi\":0,\"serialNumber\":\"D15SPS058P39\",\"status\":1,\"tenantId\":1,\"tenantName\":\"admin\"}}', 0, NULL, '2025-01-08 14:33:58'); +INSERT INTO `sys_oper_log` VALUES (173, '对象存储配置', 1, 'com.fastbee.oss.controller.OssConfigController.add()', 'POST', 1, 'admin', NULL, '/oss/config', '127.0.0.1', '内网IP', '{\"accessKey\":\"AKIDfKtGQMLF3qTxHPKBpX8WgcNuGRXjy2tX\",\"accessPolicy\":\"1\",\"bucketName\":\"keruixinda-1258644249\",\"configKey\":\"tengxunyun\",\"createTime\":\"2025-01-08 15:05:59.912\",\"domain\":\"cos.keruixinda.com\",\"endpoint\":\"cos.ap-beijing.myqcloud.com\",\"id\":3,\"isHttps\":\"N\",\"params\":{},\"secretKey\":\"Zx99vXw99vVs2kHckhU9cAa4OURCm9rZ\",\"tenantId\":1,\"tenantName\":\"admin\"}', '{\"msg\":\"操作成功\",\"code\":200}', 0, NULL, '2025-01-08 15:05:59'); +INSERT INTO `sys_oper_log` VALUES (174, '对象存储配置', 2, 'com.fastbee.oss.controller.OssConfigController.edit()', 'PUT', 1, 'admin', NULL, '/oss/config', '127.0.0.1', '内网IP', '{\"accessKey\":\"XXXXXXXXXXXXXXX\",\"accessPolicy\":\"0\",\"bucketName\":\"keruixinda\",\"configKey\":\"aliyun\",\"createBy\":\"\",\"createTime\":\"2023-02-25 23:15:57\",\"delFlag\":\"0\",\"domain\":\"\",\"endpoint\":\"oss-cn-beijing.aliyuncs.com\",\"ext1\":\"\",\"id\":1,\"isHttps\":\"N\",\"params\":{},\"prefix\":\"\",\"region\":\"\",\"secretKey\":\"XXXXXXXXXXXXXXX\",\"status\":\"0\",\"tenantId\":1,\"tenantName\":\"admin\",\"updateBy\":\"\",\"updateTime\":\"2025-01-08 15:06:22.138\"}', '{\"msg\":\"操作成功\",\"code\":200}', 0, NULL, '2025-01-08 15:06:22'); +INSERT INTO `sys_oper_log` VALUES (175, '对象存储配置', 2, 'com.fastbee.oss.controller.OssConfigController.edit()', 'PUT', 1, 'admin', NULL, '/oss/config', '127.0.0.1', '内网IP', '{\"accessKey\":\"XXXXXXXXXXXXXXX\",\"accessPolicy\":\"1\",\"bucketName\":\"keruixinda\",\"configKey\":\"qiniu\",\"createBy\":\"\",\"createTime\":\"2023-02-25 23:15:57\",\"delFlag\":\"0\",\"domain\":\"\",\"endpoint\":\"s3-cn-north-1.qiniucs.com\",\"ext1\":\"\",\"id\":2,\"isHttps\":\"N\",\"params\":{},\"prefix\":\"\",\"region\":\"\",\"secretKey\":\"XXXXXXXXXXXXXXX\",\"status\":\"1\",\"tenantId\":1,\"tenantName\":\"admin\",\"updateBy\":\"\",\"updateTime\":\"2025-01-08 15:06:31.081\"}', '{\"msg\":\"操作成功\",\"code\":200}', 0, NULL, '2025-01-08 15:06:31'); +INSERT INTO `sys_oper_log` VALUES (176, '对象存储状态修改', 2, 'com.fastbee.oss.controller.OssConfigController.changeStatus()', 'PUT', 1, 'admin', NULL, '/oss/config/changeStatus', '127.0.0.1', '内网IP', '{\"accessKey\":\"AKIDfKtGQMLF3qTxHPKBpX8WgcNuGRXjy2tX\",\"accessPolicy\":\"1\",\"bucketName\":\"keruixinda-1258644249\",\"configKey\":\"tengxunyun\",\"createBy\":\"\",\"createTime\":\"2025-01-08 15:06:00\",\"delFlag\":\"0\",\"domain\":\"cos.keruixinda.com\",\"endpoint\":\"cos.ap-beijing.myqcloud.com\",\"ext1\":\"\",\"id\":3,\"isHttps\":\"N\",\"params\":{},\"prefix\":\"\",\"region\":\"\",\"secretKey\":\"Zx99vXw99vVs2kHckhU9cAa4OURCm9rZ\",\"status\":\"0\",\"tenantId\":1,\"tenantName\":\"admin\",\"updateBy\":\"\"}', '{\"msg\":\"操作成功\",\"code\":200}', 0, NULL, '2025-01-08 15:06:39'); +INSERT INTO `sys_oper_log` VALUES (177, 'OSS对象存储', 1, 'com.fastbee.oss.controller.OssDetailController.upload()', 'POST', 1, 'admin', NULL, '/oss/detail/upload', '127.0.0.1', '内网IP', '', NULL, 1, '创建Bucket失败, 请核对配置信息:[The requested bucket has already existed in other region. (Service: Amazon S3; Status Code: 409; Error Code: BucketAlreadyExists; Request ID: Njc3ZTI1N2NfMjBiMzI0MDlfNzZhY19iZDI4NjRl; S3 Extended Request ID: null; Proxy: null)]', '2025-01-08 15:13:00'); +INSERT INTO `sys_oper_log` VALUES (178, '对象存储配置', 2, 'com.fastbee.oss.controller.OssConfigController.edit()', 'PUT', 1, 'admin', NULL, '/oss/config', '127.0.0.1', '内网IP', '{\"accessKey\":\"AKIDfKtGQMLF3qTxHPKBpX8WgcNuGRXjy2tX\",\"accessPolicy\":\"1\",\"bucketName\":\"keruixinda-1258644249\",\"configKey\":\"tengxunyun\",\"createBy\":\"\",\"createTime\":\"2025-01-08 15:06:00\",\"delFlag\":\"0\",\"domain\":\"http://cos.keruixinda.com\",\"endpoint\":\"http://cos.ap-beijing.myqcloud.com\",\"ext1\":\"\",\"id\":3,\"isHttps\":\"N\",\"params\":{},\"prefix\":\"\",\"region\":\"\",\"secretKey\":\"Zx99vXw99vVs2kHckhU9cAa4OURCm9rZ\",\"status\":\"0\",\"tenantId\":1,\"tenantName\":\"admin\",\"updateBy\":\"\",\"updateTime\":\"2025-01-08 15:13:51.754\"}', '{\"msg\":\"操作成功\",\"code\":200}', 0, NULL, '2025-01-08 15:13:51'); +INSERT INTO `sys_oper_log` VALUES (179, 'OSS对象存储', 1, 'com.fastbee.oss.controller.OssDetailController.upload()', 'POST', 1, 'admin', NULL, '/oss/detail/upload', '127.0.0.1', '内网IP', '', NULL, 1, '创建Bucket失败, 请核对配置信息:[Access Denied. (Service: Amazon S3; Status Code: 403; Error Code: AccessDenied; Request ID: Njc3ZTI1YzRfOWE4NjQwOV8xMGUzM18zZTk1NGUx; S3 Extended Request ID: null; Proxy: null)]', '2025-01-08 15:14:12'); +INSERT INTO `sys_oper_log` VALUES (180, '对象存储配置', 2, 'com.fastbee.oss.controller.OssConfigController.edit()', 'PUT', 1, 'admin', NULL, '/oss/config', '127.0.0.1', '内网IP', '{\"accessKey\":\"AKIDfKtGQMLF3qTxHPKBpX8WgcNuGRXjy2tX\",\"accessPolicy\":\"1\",\"bucketName\":\"keruixinda-1258644249\",\"configKey\":\"tengxunyun\",\"createBy\":\"\",\"createTime\":\"2025-01-08 15:06:00\",\"delFlag\":\"0\",\"domain\":\"cos.keruixinda.com\",\"endpoint\":\"cos.ap-beijing.myqcloud.com\",\"ext1\":\"\",\"id\":3,\"isHttps\":\"N\",\"params\":{},\"prefix\":\"krxd\",\"region\":\"ap-chengdu\",\"secretKey\":\"Zx99vXw99vVs2kHckhU9cAa4OURCm9rZ\",\"status\":\"0\",\"tenantId\":1,\"tenantName\":\"admin\",\"updateBy\":\"\",\"updateTime\":\"2025-01-08 15:16:22.63\"}', '{\"msg\":\"操作成功\",\"code\":200}', 0, NULL, '2025-01-08 15:16:22'); +INSERT INTO `sys_oper_log` VALUES (181, 'OSS对象存储', 1, 'com.fastbee.oss.controller.OssDetailController.upload()', 'POST', 1, 'admin', NULL, '/oss/detail/upload', '127.0.0.1', '内网IP', '', NULL, 1, '创建Bucket失败, 请核对配置信息:[The requested bucket has already existed in other region. (Service: Amazon S3; Status Code: 409; Error Code: BucketAlreadyExists; Request ID: Njc3ZTI2NTZfMjBiN2MyMDlfZjhmMF85M2QyMjAw; S3 Extended Request ID: null; Proxy: null)]', '2025-01-08 15:16:38'); +INSERT INTO `sys_oper_log` VALUES (182, '对象存储配置', 2, 'com.fastbee.oss.controller.OssConfigController.edit()', 'PUT', 1, 'admin', NULL, '/oss/config', '127.0.0.1', '内网IP', '{\"accessKey\":\"AKIDfKtGQMLF3qTxHPKBpX8WgcNuGRXjy2tX\",\"accessPolicy\":\"1\",\"bucketName\":\"keruixinda-1258644249\",\"configKey\":\"tengxunyun\",\"createBy\":\"\",\"createTime\":\"2025-01-08 15:06:00\",\"delFlag\":\"0\",\"domain\":\"cos.keruixinda.com\",\"endpoint\":\"https://keruixinda-1258644249.cos.ap-chengdu.myqcloud.com\",\"ext1\":\"\",\"id\":3,\"isHttps\":\"Y\",\"params\":{},\"prefix\":\"krxd\",\"region\":\"ap-chengdu\",\"secretKey\":\"Zx99vXw99vVs2kHckhU9cAa4OURCm9rZ\",\"status\":\"0\",\"tenantId\":1,\"tenantName\":\"admin\",\"updateBy\":\"\",\"updateTime\":\"2025-01-08 15:19:17.068\"}', '{\"msg\":\"操作成功\",\"code\":200}', 0, NULL, '2025-01-08 15:19:17'); +INSERT INTO `sys_oper_log` VALUES (183, 'OSS对象存储', 1, 'com.fastbee.oss.controller.OssDetailController.upload()', 'POST', 1, 'admin', NULL, '/oss/detail/upload', '127.0.0.1', '内网IP', '', NULL, 1, '创建Bucket失败, 请核对配置信息:[The specified region is invalid or unreachable. (Service: Amazon S3; Status Code: 400; Error Code: InvalidRegionName; Request ID: Njc3ZTI2ZmRfMTgyMDYzNjRfZjdmZl80NDkzMGFh; S3 Extended Request ID: null; Proxy: null)]', '2025-01-08 15:19:25'); +INSERT INTO `sys_oper_log` VALUES (184, 'OSS对象存储', 1, 'com.fastbee.oss.controller.OssDetailController.upload()', 'POST', 1, 'admin', NULL, '/oss/detail/upload', '127.0.0.1', '内网IP', '', NULL, 1, '创建Bucket失败, 请核对配置信息:[The specified region is invalid or unreachable. (Service: Amazon S3; Status Code: 400; Error Code: InvalidRegionName; Request ID: Njc3ZTI3MGRfMTA4ZjM1MGJfOGQwXzQ0NWE4MWI=; S3 Extended Request ID: null; Proxy: null)]', '2025-01-08 15:19:41'); +INSERT INTO `sys_oper_log` VALUES (185, '对象存储配置', 2, 'com.fastbee.oss.controller.OssConfigController.edit()', 'PUT', 1, 'admin', NULL, '/oss/config', '127.0.0.1', '内网IP', '{\"accessKey\":\"AKIDfKtGQMLF3qTxHPKBpX8WgcNuGRXjy2tX\",\"accessPolicy\":\"1\",\"bucketName\":\"keruixinda-1258644249\",\"configKey\":\"tengxunyun\",\"createBy\":\"\",\"createTime\":\"2025-01-08 15:06:00\",\"delFlag\":\"0\",\"domain\":\"cos.keruixinda.com\",\"endpoint\":\"keruixinda-1258644249.cos.ap-chengdu.myqcloud.com\",\"ext1\":\"\",\"id\":3,\"isHttps\":\"N\",\"params\":{},\"prefix\":\"krxd\",\"region\":\"ap-chengdu\",\"secretKey\":\"Zx99vXw99vVs2kHckhU9cAa4OURCm9rZ\",\"status\":\"0\",\"tenantId\":1,\"tenantName\":\"admin\",\"updateBy\":\"\",\"updateTime\":\"2025-01-08 15:20:01.584\"}', '{\"msg\":\"操作成功\",\"code\":200}', 0, NULL, '2025-01-08 15:20:01'); +INSERT INTO `sys_oper_log` VALUES (186, 'OSS对象存储', 1, 'com.fastbee.oss.controller.OssDetailController.upload()', 'POST', 1, 'admin', NULL, '/oss/detail/upload', '127.0.0.1', '内网IP', '', NULL, 1, '创建Bucket失败, 请核对配置信息:[The specified region is invalid or unreachable. (Service: Amazon S3; Status Code: 400; Error Code: InvalidRegionName; Request ID: Njc3ZTI3MzdfZTMyMTYzNjRfYjI3MF80MDhiOGRh; S3 Extended Request ID: null; Proxy: null)]', '2025-01-08 15:20:23'); +INSERT INTO `sys_oper_log` VALUES (187, '对象存储配置', 2, 'com.fastbee.oss.controller.OssConfigController.edit()', 'PUT', 1, 'admin', NULL, '/oss/config', '127.0.0.1', '内网IP', '{\"accessKey\":\"AKIDfKtGQMLF3qTxHPKBpX8WgcNuGRXjy2tX\",\"accessPolicy\":\"1\",\"bucketName\":\"keruixinda-1258644249\",\"configKey\":\"tengxunyun\",\"createBy\":\"\",\"createTime\":\"2025-01-08 15:06:00\",\"delFlag\":\"0\",\"domain\":\"cos.keruixinda.com\",\"endpoint\":\"keruixinda-1258644249.cos.ap-chengdu.myqcloud.com\",\"ext1\":\"\",\"id\":3,\"isHttps\":\"N\",\"params\":{},\"prefix\":\"krxd\",\"region\":\"ap-chengdu\",\"secretKey\":\"Zx99vXw99vVs2kHckhU9cAa4OURCm9rZ\",\"status\":\"0\",\"tenantId\":1,\"tenantName\":\"admin\",\"updateBy\":\"\",\"updateTime\":\"2025-01-08 15:23:54.924\"}', '{\"msg\":\"操作成功\",\"code\":200}', 0, NULL, '2025-01-08 15:23:54'); +INSERT INTO `sys_oper_log` VALUES (188, 'OSS对象存储', 1, 'com.fastbee.oss.controller.OssDetailController.upload()', 'POST', 1, 'admin', NULL, '/oss/detail/upload', '127.0.0.1', '内网IP', '', NULL, 1, '创建Bucket失败, 请核对配置信息:[The specified region is invalid or unreachable. (Service: Amazon S3; Status Code: 400; Error Code: InvalidRegionName; Request ID: Njc3ZTI4MTJfMWUyNjYzNjRfMTM4MWVfNDQyMmJkMQ==; S3 Extended Request ID: null; Proxy: null)]', '2025-01-08 15:24:02'); +INSERT INTO `sys_oper_log` VALUES (189, '对象存储配置', 2, 'com.fastbee.oss.controller.OssConfigController.edit()', 'PUT', 1, 'admin', NULL, '/oss/config', '127.0.0.1', '内网IP', '{\"accessKey\":\"AKIDfKtGQMLF3qTxHPKBpX8WgcNuGRXjy2tX\",\"accessPolicy\":\"1\",\"bucketName\":\"keruixinda-1258644249\",\"configKey\":\"tengxunyun\",\"createBy\":\"\",\"createTime\":\"2025-01-08 15:06:00\",\"delFlag\":\"0\",\"domain\":\"cos.keruixinda.com\",\"endpoint\":\"cos.ap-chengdu.myqcloud.com\",\"ext1\":\"\",\"id\":3,\"isHttps\":\"N\",\"params\":{},\"prefix\":\"krxd\",\"region\":\"ap-chengdu\",\"secretKey\":\"Zx99vXw99vVs2kHckhU9cAa4OURCm9rZ\",\"status\":\"0\",\"tenantId\":1,\"tenantName\":\"admin\",\"updateBy\":\"\",\"updateTime\":\"2025-01-08 15:26:16.758\"}', '{\"msg\":\"操作成功\",\"code\":200}', 0, NULL, '2025-01-08 15:26:16'); +INSERT INTO `sys_oper_log` VALUES (190, 'OSS对象存储', 1, 'com.fastbee.oss.controller.OssDetailController.upload()', 'POST', 1, 'admin', NULL, '/oss/detail/upload', '127.0.0.1', '内网IP', '', '{\"msg\":\"操作成功\",\"code\":200,\"data\":{\"createTime\":\"2025-01-08 15:26:25.993\",\"fileName\":\"krxd/2025/01/08/4fb35313df0b4313acb1a84b632060ee.txt\",\"fileSuffix\":\".txt\",\"id\":1,\"originalName\":\"gitee设置.txt\",\"params\":{},\"service\":\"tengxunyun\",\"tenantId\":1,\"url\":\"http://cos.keruixinda.com/krxd/2025/01/08/4fb35313df0b4313acb1a84b632060ee.txt\"}}', 0, NULL, '2025-01-08 15:26:26'); +INSERT INTO `sys_oper_log` VALUES (191, '流媒体服务器配置', 2, 'com.fastbee.data.controller.media.MediaServerController.edit()', 'PUT', 1, 'admin', NULL, '/sip/mediaserver', '127.0.0.1', '内网IP', '{\"autoConfig\":1,\"createBy\":\"\",\"createTime\":\"2023-09-26 21:11:43\",\"delFlag\":\"0\",\"domain\":\"lot.keruixinda.com\",\"enabled\":1,\"hookurl\":\"1.14.72.242:8080\",\"id\":7,\"ip\":\"1.14.72.242\",\"params\":{},\"portHttp\":8082,\"portHttps\":8443,\"portRtmp\":1935,\"portRtsp\":554,\"protocol\":\"http\",\"recordPort\":18081,\"rtpEnable\":1,\"rtpPortRange\":\"30000,30103\",\"rtpProxyPort\":0,\"secret\":\"035c73f7-bb6b-4889-a715-d9eb2d192xxx\",\"serverId\":\"gongkongbang\",\"status\":0,\"tenantId\":1,\"tenantName\":\"admin\",\"updateBy\":\"\",\"updateTime\":\"2025-01-08 15:32:58.852\"}', '{\"msg\":\"操作成功\",\"code\":200}', 0, NULL, '2025-01-08 15:32:58'); +INSERT INTO `sys_oper_log` VALUES (192, '流媒体服务器配置', 2, 'com.fastbee.data.controller.media.MediaServerController.edit()', 'PUT', 1, 'admin', NULL, '/sip/mediaserver', '127.0.0.1', '内网IP', '{\"autoConfig\":1,\"createBy\":\"\",\"createTime\":\"2023-09-26 21:11:43\",\"delFlag\":\"0\",\"domain\":\"lot.keruixinda.com\",\"enabled\":1,\"hookurl\":\"1.14.72.242:8080\",\"id\":7,\"ip\":\"1.14.72.242\",\"params\":{},\"portHttp\":8082,\"portHttps\":8443,\"portRtmp\":1935,\"portRtsp\":554,\"protocol\":\"http\",\"recordPort\":18081,\"rtpEnable\":1,\"rtpPortRange\":\"30000,30103\",\"rtpProxyPort\":0,\"secret\":\"035c73f7-bb6b-4889-a715-d9eb2d192xxx\",\"serverId\":\"gongkongbang\",\"status\":0,\"tenantId\":1,\"tenantName\":\"admin\",\"updateBy\":\"\",\"updateTime\":\"2025-01-08 15:38:59.556\"}', '{\"msg\":\"操作成功\",\"code\":200}', 0, NULL, '2025-01-08 15:38:59'); +INSERT INTO `sys_oper_log` VALUES (193, '参数管理', 2, 'com.fastbee.web.controller.system.SysConfigController.edit()', 'PUT', 1, 'admin', NULL, '/system/config', '127.0.0.1', '内网IP', '{\"configId\":1,\"configKey\":\"sys.index.skinName\",\"configName\":\"主框架页-默认皮肤样式名称\",\"configType\":\"Y\",\"configValue\":\" skin-blue\",\"createBy\":\"admin\",\"createTime\":\"2021-12-15 21:36:18\",\"params\":{},\"remark\":\"蓝色 skin-blue、绿色 skin-green、紫色 skin-purple、红色 skin-red、黄色 skin-yellow\",\"updateBy\":\"admin\",\"updateTime\":\"2025-01-07 14:02:53\"}', '{\"msg\":\"操作成功\",\"code\":200}', 0, NULL, '2025-01-08 15:43:23'); +INSERT INTO `sys_oper_log` VALUES (194, '菜单管理', 2, 'com.fastbee.web.controller.system.SysMenuController.edit()', 'PUT', 1, 'admin', NULL, '/system/menu', '127.0.0.1', '内网IP', '{\"children\":[],\"createTime\":\"2021-12-15 21:36:18\",\"icon\":\"guide\",\"isCache\":\"0\",\"isFrame\":\"0\",\"menuId\":4,\"menuName\":\"信达物联\",\"menuType\":\"M\",\"orderNum\":99,\"params\":{},\"parentId\":0,\"path\":\"https://lot.keruixinda.com/\",\"perms\":\"\",\"query\":\"\",\"status\":\"1\",\"updateBy\":\"admin\",\"visible\":\"0\"}', '{\"msg\":\"操作成功\",\"code\":200}', 0, NULL, '2025-01-08 15:52:53'); +INSERT INTO `sys_oper_log` VALUES (195, '菜单管理', 2, 'com.fastbee.web.controller.system.SysMenuController.edit()', 'PUT', 1, 'admin', NULL, '/system/menu', '127.0.0.1', '内网IP', '{\"children\":[],\"createTime\":\"2021-12-15 21:36:18\",\"icon\":\"guide\",\"isCache\":\"0\",\"isFrame\":\"0\",\"menuId\":4,\"menuName\":\"信达物联\",\"menuType\":\"M\",\"orderNum\":99,\"params\":{},\"parentId\":0,\"path\":\"https://lot.keruixinda.com/\",\"perms\":\"\",\"query\":\"\",\"status\":\"0\",\"updateBy\":\"admin\",\"visible\":\"0\"}', '{\"msg\":\"操作成功\",\"code\":200}', 0, NULL, '2025-01-08 15:52:59'); +INSERT INTO `sys_oper_log` VALUES (196, '场景管理', 1, 'com.fastbee.data.controller.sceneModel.SceneModelController.add()', 'POST', 1, 'admin', NULL, '/scene/model', '127.0.0.1', '内网IP', '{\"createBy\":\"admin\",\"deptId\":100,\"desc\":\"\",\"imgUrl\":\"\",\"params\":{},\"sceneModelId\":1,\"sceneModelName\":\"测试场景\",\"tenantId\":1,\"updateBy\":\"admin\"}', '{\"msg\":\"操作成功\",\"code\":200}', 0, NULL, '2025-01-08 15:56:14'); +INSERT INTO `sys_oper_log` VALUES (197, '删除设备', 3, 'com.fastbee.data.controller.DeviceController.remove()', 'DELETE', 1, 'admin', NULL, '/iot/device/108', '127.0.0.1', '内网IP', '{}', '{\"msg\":\"操作成功\",\"code\":200}', 0, NULL, '2025-01-08 15:59:09'); +INSERT INTO `sys_oper_log` VALUES (198, '删除设备', 3, 'com.fastbee.data.controller.DeviceController.remove()', 'DELETE', 1, 'admin', NULL, '/iot/device/109', '127.0.0.1', '内网IP', '{}', '{\"msg\":\"操作成功\",\"code\":200}', 0, NULL, '2025-01-08 15:59:18'); +INSERT INTO `sys_oper_log` VALUES (199, '菜单管理', 2, 'com.fastbee.web.controller.system.SysMenuController.edit()', 'PUT', 1, 'admin', NULL, '/system/menu', '127.0.0.1', '内网IP', '{\"children\":[],\"createTime\":\"2023-10-17 09:14:05\",\"icon\":\"cloud\",\"isCache\":\"0\",\"isFrame\":\"1\",\"menuId\":3190,\"menuName\":\"音箱对接\",\"menuType\":\"M\",\"orderNum\":3,\"params\":{},\"parentId\":0,\"path\":\"speaker\",\"perms\":\"\",\"status\":\"0\",\"updateBy\":\"admin\",\"visible\":\"1\"}', '{\"msg\":\"操作成功\",\"code\":200}', 0, NULL, '2025-01-08 16:00:21'); +INSERT INTO `sys_oper_log` VALUES (200, '菜单管理', 2, 'com.fastbee.web.controller.system.SysMenuController.edit()', 'PUT', 1, 'admin', NULL, '/system/menu', '127.0.0.1', '内网IP', '{\"children\":[],\"createTime\":\"2021-12-15 21:36:18\",\"icon\":\"guide\",\"isCache\":\"0\",\"isFrame\":\"0\",\"menuId\":4,\"menuName\":\"信达物联\",\"menuType\":\"M\",\"orderNum\":99,\"params\":{},\"parentId\":0,\"path\":\"https://lot.keruixinda.com/\",\"perms\":\"\",\"query\":\"\",\"status\":\"0\",\"updateBy\":\"admin\",\"visible\":\"1\"}', '{\"msg\":\"操作成功\",\"code\":200}', 0, NULL, '2025-01-08 16:01:43'); +INSERT INTO `sys_oper_log` VALUES (201, '通知公告', 2, 'com.fastbee.web.controller.system.SysNoticeController.edit()', 'PUT', 1, 'admin', NULL, '/system/notice', '127.0.0.1', '内网IP', '{\"createBy\":\"admin\",\"createTime\":\"2021-12-15 21:36:18\",\"noticeContent\":\"

这是测试内容,新版本功能:


  1. 支持多租户
  2. 支持设备分享
  3. 支持时序数据库
  4. 简单认证和加密认证统一
\",\"noticeId\":1,\"noticeTitle\":\"信达物联工控邦V1.0.1版本发布\",\"noticeType\":\"2\",\"params\":{},\"remark\":\"管理员\",\"status\":\"0\",\"updateBy\":\"admin\",\"updateTime\":\"2023-09-26 21:21:30\"}', '{\"msg\":\"操作成功\",\"code\":200}', 0, NULL, '2025-01-08 16:04:44'); +INSERT INTO `sys_oper_log` VALUES (202, '通知公告', 2, 'com.fastbee.web.controller.system.SysNoticeController.edit()', 'PUT', 1, 'admin', NULL, '/system/notice', '127.0.0.1', '内网IP', '{\"createBy\":\"admin\",\"createTime\":\"2021-12-15 21:36:18\",\"noticeContent\":\"

这是测试内容,目前sdk支持的版本:




  1. Arduino esp8266
  2. Arduino esp32
  3. esp-idf
  4. raspberry 树莓派
\",\"noticeId\":2,\"noticeTitle\":\"信达物联工控邦 sdk支持树莓派\",\"noticeType\":\"1\",\"params\":{},\"remark\":\"管理员\",\"status\":\"0\",\"updateBy\":\"admin\",\"updateTime\":\"2023-09-26 21:21:41\"}', '{\"msg\":\"操作成功\",\"code\":200}', 0, NULL, '2025-01-08 16:05:05'); +INSERT INTO `sys_oper_log` VALUES (203, '用户管理', 3, 'com.fastbee.web.controller.system.SysUserController.remove()', 'DELETE', 1, 'admin', NULL, '/system/user/2', '127.0.0.1', '内网IP', '{}', '{\"msg\":\"操作成功\",\"code\":200}', 0, NULL, '2025-01-08 16:08:53'); +INSERT INTO `sys_oper_log` VALUES (204, '用户管理', 3, 'com.fastbee.web.controller.system.SysUserController.remove()', 'DELETE', 1, 'admin', NULL, '/system/user/3', '127.0.0.1', '内网IP', '{}', '{\"msg\":\"操作成功\",\"code\":200}', 0, NULL, '2025-01-08 16:08:56'); +INSERT INTO `sys_oper_log` VALUES (205, '用户管理', 3, 'com.fastbee.web.controller.system.SysUserController.remove()', 'DELETE', 1, 'admin', NULL, '/system/user/4', '127.0.0.1', '内网IP', '{}', '{\"msg\":\"操作成功\",\"code\":200}', 0, NULL, '2025-01-08 16:08:59'); +INSERT INTO `sys_oper_log` VALUES (206, '用户管理', 3, 'com.fastbee.web.controller.system.SysUserController.remove()', 'DELETE', 1, 'admin', NULL, '/system/user/5', '127.0.0.1', '内网IP', '{}', '{\"msg\":\"操作成功\",\"code\":200}', 0, NULL, '2025-01-08 16:09:03'); +INSERT INTO `sys_oper_log` VALUES (207, '用户管理', 3, 'com.fastbee.web.controller.system.SysUserController.remove()', 'DELETE', 1, 'admin', NULL, '/system/user/6', '127.0.0.1', '内网IP', '{}', '{\"msg\":\"操作成功\",\"code\":200}', 0, NULL, '2025-01-08 16:09:13'); +INSERT INTO `sys_oper_log` VALUES (208, '更新产品状态', 2, 'com.fastbee.data.controller.ProductController.changeProductStatus()', 'PUT', 1, 'admin', NULL, '/iot/product/status/', '127.0.0.1', '内网IP', '{\"deviceType\":1,\"productId\":41,\"status\":1}', '{\"msg\":\"操作成功\",\"code\":200}', 0, NULL, '2025-01-08 16:56:12'); +INSERT INTO `sys_oper_log` VALUES (209, 'sip系统配置', 3, 'com.fastbee.data.controller.media.SipConfigController.removeByProductId()', 'DELETE', 1, 'admin', NULL, '/sip/sipconfig/product/41', '127.0.0.1', '内网IP', '{}', '{\"msg\":\"操作成功\",\"code\":200,\"data\":0}', 0, NULL, '2025-01-08 16:56:23'); +INSERT INTO `sys_oper_log` VALUES (210, '产品', 3, 'com.fastbee.data.controller.ProductController.remove()', 'DELETE', 1, 'admin', NULL, '/iot/product/41', '127.0.0.1', '内网IP', '{}', '{\"msg\":\"删除成功\",\"code\":200}', 0, NULL, '2025-01-08 16:56:23'); +INSERT INTO `sys_oper_log` VALUES (211, '更新产品状态', 2, 'com.fastbee.data.controller.ProductController.changeProductStatus()', 'PUT', 1, 'admin', NULL, '/iot/product/status/', '127.0.0.1', '内网IP', '{\"deviceType\":2,\"productId\":96,\"status\":1}', '{\"msg\":\"操作成功\",\"code\":200}', 0, NULL, '2025-01-08 16:56:37'); +INSERT INTO `sys_oper_log` VALUES (212, '个人信息', 2, 'com.fastbee.web.controller.system.SysProfileController.updatePwd()', 'PUT', 1, 'admin', NULL, '/system/user/profile/updatePwd', '192.168.1.103', '内网IP', '\"admin123\" \"123456\"', '{\"msg\":\"操作成功\",\"code\":200}', 0, NULL, '2025-01-08 23:22:46'); +INSERT INTO `sys_oper_log` VALUES (213, '菜单管理', 2, 'com.fastbee.web.controller.system.SysMenuController.edit()', 'PUT', 1, 'admin', NULL, '/system/menu', '192.168.1.103', '内网IP', '{\"children\":[],\"component\":\"iot/template/index\",\"createTime\":\"2021-12-16 00:41:28\",\"icon\":\"model\",\"isCache\":\"0\",\"isFrame\":\"1\",\"menuId\":2049,\"menuName\":\"通用模型\",\"menuType\":\"C\",\"orderNum\":1,\"params\":{},\"parentId\":2000,\"path\":\"template\",\"perms\":\"iot:template:list\",\"status\":\"0\",\"updateBy\":\"admin\",\"visible\":\"0\"}', '{\"msg\":\"操作成功\",\"code\":200}', 0, NULL, '2025-01-09 01:12:33'); +INSERT INTO `sys_oper_log` VALUES (214, '菜单管理', 2, 'com.fastbee.web.controller.system.SysMenuController.edit()', 'PUT', 1, 'admin', NULL, '/system/menu', '192.168.1.103', '内网IP', '{\"children\":[],\"createTime\":\"2022-02-26 00:42:12\",\"icon\":\"mq\",\"isCache\":\"0\",\"isFrame\":\"1\",\"menuId\":2104,\"menuName\":\"EMQ管理\",\"menuType\":\"M\",\"orderNum\":3,\"params\":{},\"parentId\":0,\"path\":\"emqx\",\"perms\":\"\",\"status\":\"0\",\"updateBy\":\"admin\",\"visible\":\"0\"}', '{\"msg\":\"操作成功\",\"code\":200}', 0, NULL, '2025-01-09 01:13:06'); +INSERT INTO `sys_oper_log` VALUES (215, '菜单管理', 2, 'com.fastbee.web.controller.system.SysMenuController.edit()', 'PUT', 1, 'admin', NULL, '/system/menu', '192.168.1.103', '内网IP', '{\"children\":[],\"createTime\":\"2022-02-26 00:42:12\",\"icon\":\"mq\",\"isCache\":\"0\",\"isFrame\":\"1\",\"menuId\":2104,\"menuName\":\"EMQ管理\",\"menuType\":\"M\",\"orderNum\":3,\"params\":{},\"parentId\":0,\"path\":\"emqx\",\"perms\":\"\",\"status\":\"0\",\"updateBy\":\"admin\",\"visible\":\"1\"}', '{\"msg\":\"操作成功\",\"code\":200}', 0, NULL, '2025-01-09 01:13:33'); +INSERT INTO `sys_oper_log` VALUES (216, '第三方登录平台控制', 2, 'com.fastbee.data.controller.SocialPlatformController.edit()', 'PUT', 1, 'admin', NULL, '/iot/platform', '192.168.1.103', '内网IP', '{\"bindUri\":\"http://localhost\",\"clientId\":\"wx26b1bf6041ab6339\",\"createBy\":\"admin\",\"createTime\":\"2024-04-22 14:04:59\",\"delFlag\":\"0\",\"errorMsgUri\":\"http://localhost\",\"params\":{},\"platform\":\"wechat_open_public_account\",\"redirectLoginUri\":\"http://localhost\",\"redirectUri\":\"http://localhost\",\"remark\":\"感谢您关注信达物联!\",\"secretKey\":\"http://localhost\",\"socialPlatformId\":6,\"status\":\"0\",\"updateBy\":\"admin\",\"updateTime\":\"2025-01-09 01:22:24.184\"}', '{\"msg\":\"操作成功\",\"code\":200}', 0, NULL, '2025-01-09 01:22:24'); +INSERT INTO `sys_oper_log` VALUES (217, '参数管理', 2, 'com.fastbee.web.controller.system.SysConfigController.edit()', 'PUT', 1, 'admin', NULL, '/system/config', '192.168.1.103', '内网IP', '{\"configId\":5,\"configKey\":\"sys.account.registerUser\",\"configName\":\"账号自助-是否开启用户注册功能\",\"configType\":\"Y\",\"configValue\":\"true\",\"createBy\":\"admin\",\"createTime\":\"2021-12-15 21:36:18\",\"params\":{},\"remark\":\"是否开启注册用户功能(true开启,false关闭)\",\"updateBy\":\"admin\",\"updateTime\":\"2025-01-07 21:43:52\"}', '{\"msg\":\"操作成功\",\"code\":200}', 0, NULL, '2025-01-09 01:25:06'); +INSERT INTO `sys_oper_log` VALUES (218, '修改产品', 2, 'com.fastbee.data.controller.ProductController.edit()', 'PUT', 1, 'admin', NULL, '/iot/product', '192.168.1.103', '内网IP', '{\"categoryId\":1,\"categoryName\":\"电工照明\",\"createTime\":\"2025-02-25 22:51:39\",\"deviceType\":2,\"isAuthorize\":0,\"isOwner\":1,\"isSys\":0,\"locationWay\":1,\"mqttAccount\":\"XinDa\",\"mqttPassword\":\"P467433O1MT8MXS2\",\"mqttSecret\":\"KWF32S3H95LH14LO\",\"networkMethod\":1,\"params\":{},\"productId\":96,\"productName\":\"物联网开发板\",\"protocolCode\":\"JSON\",\"status\":1,\"tenantId\":1,\"tenantName\":\"admin\",\"transport\":\"MQTT\",\"updateTime\":\"2025-01-09 01:29:00.419\",\"vertificateMethod\":3}', '{\"msg\":\"操作成功\",\"code\":200}', 0, NULL, '2025-01-09 01:29:00'); +INSERT INTO `sys_oper_log` VALUES (219, '更新产品状态', 2, 'com.fastbee.data.controller.ProductController.changeProductStatus()', 'PUT', 1, 'admin', NULL, '/iot/product/status/', '192.168.1.103', '内网IP', '{\"deviceType\":2,\"productId\":96,\"status\":2}', '{\"msg\":\"操作成功\",\"code\":200}', 0, NULL, '2025-01-09 01:29:10'); +INSERT INTO `sys_oper_log` VALUES (220, '更新产品状态', 2, 'com.fastbee.data.controller.ProductController.changeProductStatus()', 'PUT', 1, 'admin', NULL, '/iot/product/status/', '192.168.1.103', '内网IP', '{\"deviceType\":2,\"productId\":96,\"status\":1}', '{\"msg\":\"操作成功\",\"code\":200}', 0, NULL, '2025-01-09 01:30:30'); +INSERT INTO `sys_oper_log` VALUES (221, '物模型', 3, 'com.fastbee.data.controller.ThingsModelController.remove()', 'DELETE', 1, 'admin', NULL, '/iot/model/167', '192.168.1.103', '内网IP', '{}', '{\"msg\":\"操作成功\",\"code\":200}', 0, NULL, '2025-01-09 01:30:54'); +INSERT INTO `sys_oper_log` VALUES (222, '物模型', 3, 'com.fastbee.data.controller.ThingsModelController.remove()', 'DELETE', 1, 'admin', NULL, '/iot/model/167', '192.168.1.103', '内网IP', '{}', NULL, 1, '', '2025-01-09 01:30:57'); +INSERT INTO `sys_oper_log` VALUES (223, '物模型', 3, 'com.fastbee.data.controller.ThingsModelController.remove()', 'DELETE', 1, 'admin', NULL, '/iot/model/161', '192.168.1.103', '内网IP', '{}', '{\"msg\":\"操作成功\",\"code\":200}', 0, NULL, '2025-01-09 01:30:59'); +INSERT INTO `sys_oper_log` VALUES (224, '物模型', 3, 'com.fastbee.data.controller.ThingsModelController.remove()', 'DELETE', 1, 'admin', NULL, '/iot/model/162', '192.168.1.103', '内网IP', '{}', '{\"msg\":\"操作成功\",\"code\":200}', 0, NULL, '2025-01-09 01:31:01'); +INSERT INTO `sys_oper_log` VALUES (225, '物模型', 3, 'com.fastbee.data.controller.ThingsModelController.remove()', 'DELETE', 1, 'admin', NULL, '/iot/model/164', '192.168.1.103', '内网IP', '{}', '{\"msg\":\"操作成功\",\"code\":200}', 0, NULL, '2025-01-09 01:31:03'); +INSERT INTO `sys_oper_log` VALUES (226, '物模型', 3, 'com.fastbee.data.controller.ThingsModelController.remove()', 'DELETE', 1, 'admin', NULL, '/iot/model/165', '192.168.1.103', '内网IP', '{}', '{\"msg\":\"操作成功\",\"code\":200}', 0, NULL, '2025-01-09 01:31:06'); +INSERT INTO `sys_oper_log` VALUES (227, '物模型', 3, 'com.fastbee.data.controller.ThingsModelController.remove()', 'DELETE', 1, 'admin', NULL, '/iot/model/174', '192.168.1.103', '内网IP', '{}', '{\"msg\":\"操作成功\",\"code\":200}', 0, NULL, '2025-01-09 01:31:10'); +INSERT INTO `sys_oper_log` VALUES (228, '物模型', 3, 'com.fastbee.data.controller.ThingsModelController.remove()', 'DELETE', 1, 'admin', NULL, '/iot/model/170', '192.168.1.103', '内网IP', '{}', '{\"msg\":\"操作成功\",\"code\":200}', 0, NULL, '2025-01-09 01:31:12'); +INSERT INTO `sys_oper_log` VALUES (229, '物模型', 3, 'com.fastbee.data.controller.ThingsModelController.remove()', 'DELETE', 1, 'admin', NULL, '/iot/model/171', '192.168.1.103', '内网IP', '{}', '{\"msg\":\"操作成功\",\"code\":200}', 0, NULL, '2025-01-09 01:31:14'); +INSERT INTO `sys_oper_log` VALUES (230, '物模型', 3, 'com.fastbee.data.controller.ThingsModelController.remove()', 'DELETE', 1, 'admin', NULL, '/iot/model/163', '192.168.1.103', '内网IP', '{}', '{\"msg\":\"操作成功\",\"code\":200}', 0, NULL, '2025-01-09 01:31:16'); +INSERT INTO `sys_oper_log` VALUES (231, '物模型', 3, 'com.fastbee.data.controller.ThingsModelController.remove()', 'DELETE', 1, 'admin', NULL, '/iot/model/166', '192.168.1.103', '内网IP', '{}', '{\"msg\":\"操作成功\",\"code\":200}', 0, NULL, '2025-01-09 01:31:18'); +INSERT INTO `sys_oper_log` VALUES (232, '物模型', 3, 'com.fastbee.data.controller.ThingsModelController.remove()', 'DELETE', 1, 'admin', NULL, '/iot/model/168', '192.168.1.103', '内网IP', '{}', '{\"msg\":\"操作成功\",\"code\":200}', 0, NULL, '2025-01-09 01:31:20'); +INSERT INTO `sys_oper_log` VALUES (233, '物模型', 3, 'com.fastbee.data.controller.ThingsModelController.remove()', 'DELETE', 1, 'admin', NULL, '/iot/model/169', '192.168.1.103', '内网IP', '{}', '{\"msg\":\"操作成功\",\"code\":200}', 0, NULL, '2025-01-09 01:31:23'); +INSERT INTO `sys_oper_log` VALUES (234, '物模型', 1, 'com.fastbee.data.controller.ThingsModelController.add()', 'POST', 1, 'admin', NULL, '/iot/model', '192.168.1.103', '内网IP', '{\"createTime\":\"2025-01-09 01:34:25.687\",\"datatype\":\"integer\",\"identifier\":\"temperature\",\"isChart\":1,\"isHistory\":1,\"isMonitor\":1,\"isReadonly\":1,\"isSharePerm\":1,\"modelId\":915,\"modelName\":\"环境温度\",\"modelOrder\":1,\"params\":{},\"productId\":96,\"productName\":\"物联网开发板\",\"specs\":\"{\\\"type\\\":\\\"integer\\\",\\\"min\\\":-20,\\\"max\\\":100,\\\"unit\\\":\\\"°C\\\",\\\"step\\\":1}\",\"tenantId\":1,\"tenantName\":\"admin\",\"type\":1}', '{\"msg\":\"操作成功\",\"code\":200}', 0, NULL, '2025-01-09 01:34:25'); +INSERT INTO `sys_oper_log` VALUES (235, '根据数量批量新增产品授权码', 1, 'com.fastbee.data.controller.ProductAuthorizeController.addProductAuthorizeByNum()', 'POST', 1, 'admin', NULL, '/iot/authorize/addProductAuthorizeByNum', '192.168.1.103', '内网IP', '{\"createNum\":1,\"productId\":96}', '{\"msg\":\"操作成功\",\"code\":200}', 0, NULL, '2025-01-09 01:34:48'); +INSERT INTO `sys_oper_log` VALUES (236, '更新产品状态', 2, 'com.fastbee.data.controller.ProductController.changeProductStatus()', 'PUT', 1, 'admin', NULL, '/iot/product/status/', '192.168.1.103', '内网IP', '{\"deviceType\":2,\"productId\":96,\"status\":2}', '{\"msg\":\"操作成功\",\"code\":200}', 0, NULL, '2025-01-09 01:34:52'); +INSERT INTO `sys_oper_log` VALUES (237, '删除设备', 3, 'com.fastbee.data.controller.DeviceController.remove()', 'DELETE', 1, 'admin', NULL, '/iot/device/228', '192.168.1.103', '内网IP', '{}', '{\"msg\":\"操作成功\",\"code\":200}', 0, NULL, '2025-01-09 01:40:33'); +INSERT INTO `sys_oper_log` VALUES (238, '添加设备', 1, 'com.fastbee.data.controller.DeviceController.add()', 'POST', 1, 'admin', NULL, '/iot/device', '192.168.1.103', '内网IP', '{\"createTime\":\"2025-01-09 01:41:01.058\",\"deviceId\":233,\"deviceName\":\"物联网开发板\",\"deviceType\":2,\"firmwareVersion\":1,\"isShadow\":0,\"isSimulate\":0,\"locationWay\":1,\"networkAddress\":\" 局域网\",\"networkIp\":\"192.168.1.103\",\"params\":{},\"productId\":96,\"productName\":\"物联网开发板\",\"rssi\":0,\"serialNumber\":\"D1Q1PH1H92G9\",\"status\":1,\"tenantId\":1,\"tenantName\":\"admin\"}', '{\"msg\":\"操作成功\",\"code\":200,\"data\":{\"createTime\":\"2025-01-09 01:41:01.058\",\"deviceId\":233,\"deviceName\":\"物联网开发板\",\"deviceType\":2,\"firmwareVersion\":1,\"isShadow\":0,\"isSimulate\":0,\"locationWay\":1,\"networkAddress\":\" 局域网\",\"networkIp\":\"192.168.1.103\",\"params\":{},\"productId\":96,\"productName\":\"物联网开发板\",\"rssi\":0,\"serialNumber\":\"D1Q1PH1H92G9\",\"status\":1,\"tenantId\":1,\"tenantName\":\"admin\"}}', 0, NULL, '2025-01-09 01:41:04'); +INSERT INTO `sys_oper_log` VALUES (239, '更新产品状态', 2, 'com.fastbee.data.controller.ProductController.changeProductStatus()', 'PUT', 1, 'admin', NULL, '/iot/product/status/', '192.168.1.103', '内网IP', '{\"deviceType\":2,\"productId\":96,\"status\":1}', '{\"msg\":\"操作成功\",\"code\":200}', 0, NULL, '2025-01-09 01:41:39'); +INSERT INTO `sys_oper_log` VALUES (240, '更新产品状态', 2, 'com.fastbee.data.controller.ProductController.changeProductStatus()', 'PUT', 1, 'admin', NULL, '/iot/product/status/', '192.168.1.103', '内网IP', '{\"deviceType\":2,\"productId\":96,\"status\":2}', '{\"msg\":\"操作成功\",\"code\":200}', 0, NULL, '2025-01-09 01:41:50'); +INSERT INTO `sys_oper_log` VALUES (241, '更新产品状态', 2, 'com.fastbee.data.controller.ProductController.changeProductStatus()', 'PUT', 1, 'admin', NULL, '/iot/product/status/', '127.0.0.1', '内网IP', '{\"deviceType\":2,\"productId\":96,\"status\":1}', '{\"msg\":\"操作成功\",\"code\":200}', 0, NULL, '2025-01-09 07:29:46'); +INSERT INTO `sys_oper_log` VALUES (242, '修改产品', 2, 'com.fastbee.data.controller.ProductController.edit()', 'PUT', 1, 'admin', NULL, '/iot/product', '127.0.0.1', '内网IP', '{\"categoryId\":1,\"categoryName\":\"电工照明\",\"createTime\":\"2025-02-25 22:51:39\",\"deviceType\":2,\"isAuthorize\":0,\"isOwner\":1,\"isSys\":0,\"locationWay\":1,\"mqttAccount\":\"XinDa\",\"mqttPassword\":\"P467433O1MT8MXS2\",\"mqttSecret\":\"KWF32S3H95LH14LO\",\"networkMethod\":1,\"params\":{},\"productId\":96,\"productName\":\"物联网开发板\",\"protocolCode\":\"JSON\",\"status\":1,\"tenantId\":1,\"tenantName\":\"admin\",\"transport\":\"MQTT\",\"updateTime\":\"2025-01-09 07:29:51.889\",\"vertificateMethod\":3}', '{\"msg\":\"操作成功\",\"code\":200}', 0, NULL, '2025-01-09 07:29:51'); +INSERT INTO `sys_oper_log` VALUES (243, '更新产品状态', 2, 'com.fastbee.data.controller.ProductController.changeProductStatus()', 'PUT', 1, 'admin', NULL, '/iot/product/status/', '127.0.0.1', '内网IP', '{\"deviceType\":2,\"productId\":96,\"status\":2}', '{\"msg\":\"操作成功\",\"code\":200}', 0, NULL, '2025-01-09 07:29:55'); +INSERT INTO `sys_oper_log` VALUES (244, '修改设备', 2, 'com.fastbee.data.controller.DeviceController.edit()', 'PUT', 1, 'admin', NULL, '/iot/device', '192.168.1.103', '内网IP', '{\"activeTime\":\"2025-01-09 00:00:00\",\"createTime\":\"2025-01-09 01:41:01\",\"deviceId\":233,\"deviceName\":\"物联网开发板\",\"deviceType\":2,\"firmwareVersion\":1,\"isOwner\":1,\"isShadow\":0,\"isSimulate\":0,\"latitude\":30.578994,\"locationWay\":1,\"longitude\":104.072747,\"networkAddress\":\"四川省成都市 电信\",\"networkIp\":\"171.221.105.110\",\"params\":{},\"rssi\":0,\"serialNumber\":\"D1Q1PH1H92G9\",\"sipRelationList\":[],\"status\":4,\"tenantId\":1,\"tenantName\":\"admin\",\"thingsModelValue\":\"[{\\\"id\\\":\\\"temperature\\\",\\\"shadow\\\":\\\"\\\",\\\"value\\\":\\\"\\\"}]\",\"updateTime\":\"2025-01-09 08:00:58.931\"}', '{\"msg\":\"操作成功\",\"total\":1,\"code\":200,\"data\":\"修改成功\"}', 0, NULL, '2025-01-09 08:00:58'); +INSERT INTO `sys_oper_log` VALUES (245, '删除设备', 3, 'com.fastbee.data.controller.DeviceController.remove()', 'DELETE', 1, 'admin', NULL, '/iot/device/233', '192.168.1.103', '内网IP', '{}', '{\"msg\":\"操作成功\",\"code\":200}', 0, NULL, '2025-01-09 08:01:30'); +INSERT INTO `sys_oper_log` VALUES (246, '添加设备', 1, 'com.fastbee.data.controller.DeviceController.add()', 'POST', 1, 'admin', NULL, '/iot/device', '192.168.1.103', '内网IP', '{\"createTime\":\"2025-01-09 08:02:55.669\",\"deviceId\":234,\"deviceName\":\"物联网开发板\",\"deviceType\":2,\"firmwareVersion\":1,\"isShadow\":0,\"isSimulate\":0,\"locationWay\":1,\"networkAddress\":\" 局域网\",\"networkIp\":\"192.168.1.103\",\"params\":{},\"productId\":96,\"productName\":\"物联网开发板\",\"rssi\":0,\"serialNumber\":\"D1J4798YESR2\",\"status\":1,\"tenantId\":1,\"tenantName\":\"admin\"}', '{\"msg\":\"操作成功\",\"code\":200,\"data\":{\"createTime\":\"2025-01-09 08:02:55.669\",\"deviceId\":234,\"deviceName\":\"物联网开发板\",\"deviceType\":2,\"firmwareVersion\":1,\"isShadow\":0,\"isSimulate\":0,\"locationWay\":1,\"networkAddress\":\" 局域网\",\"networkIp\":\"192.168.1.103\",\"params\":{},\"productId\":96,\"productName\":\"物联网开发板\",\"rssi\":0,\"serialNumber\":\"D1J4798YESR2\",\"status\":1,\"tenantId\":1,\"tenantName\":\"admin\"}}', 0, NULL, '2025-01-09 08:02:59'); +INSERT INTO `sys_oper_log` VALUES (247, '添加设备', 1, 'com.fastbee.data.controller.DeviceController.add()', 'POST', 1, 'admin', NULL, '/iot/device', '192.168.1.103', '内网IP', '{\"createTime\":\"2025-01-09 08:02:58.476\",\"deviceId\":0,\"deviceName\":\"物联网开发板\",\"deviceType\":2,\"firmwareVersion\":1,\"isShadow\":0,\"isSimulate\":0,\"locationWay\":1,\"networkAddress\":\" 局域网\",\"networkIp\":\"192.168.1.103\",\"params\":{},\"productId\":96,\"productName\":\"物联网开发板\",\"rssi\":0,\"serialNumber\":\"D1J4798YESR2\",\"status\":1,\"tenantId\":1,\"tenantName\":\"admin\"}', NULL, 1, '\n### Error updating database. Cause: java.sql.SQLIntegrityConstraintViolationException: Duplicate entry \'D1J4798YESR2\' for key \'iot_device.iot_device_index_serial_number\'\n### The error may exist in URL [jar:file:/www/wwwroot/gongkongbang/gongkongbang.jar!/BOOT-INF/lib/fastbee-iot-service-3.8.5.jar!/mapper/iot/DeviceMapper.xml]\n### The error may involve com.fastbee.iot.mapper.DeviceMapper.insertDevice-Inline\n### The error occurred while setting parameters\n### SQL: insert into iot_device ( device_name, product_id, product_name, tenant_id, tenant_name, serial_number, firmware_version, status, rssi, is_shadow, location_way, network_address, network_ip, create_time, is_simulate ) values ( ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ? )\n### Cause: java.sql.SQLIntegrityConstraintViolationException: Duplicate entry \'D1J4798YESR2\' for key \'iot_device.iot_device_index_serial_number\'\n; Duplicate entry \'D1J4798YESR2\' for key \'iot_device.iot_device_index_serial_number\'; nested exception is java.sql.SQLIntegrityConstraintViolationException: Duplicate entry \'D1J4798YESR2\' for key \'iot_device.iot_device_index_serial_number\'', '2025-01-09 08:03:05'); +INSERT INTO `sys_oper_log` VALUES (248, '设备告警用户', 1, 'com.fastbee.data.controller.DeviceAlertUserController.add()', 'POST', 1, 'admin', NULL, '/iot/deviceAlertUser', '192.168.1.103', '内网IP', '{\"deviceId\":234,\"userIdList\":[1]}', '{\"msg\":\"操作成功\",\"code\":200}', 0, NULL, '2025-01-09 08:03:29'); + +-- ---------------------------- +-- Table structure for sys_post +-- ---------------------------- +DROP TABLE IF EXISTS `sys_post`; +CREATE TABLE `sys_post` ( + `post_id` bigint NOT NULL AUTO_INCREMENT COMMENT '岗位ID', + `post_code` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '岗位编码', + `post_name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '岗位名称', + `post_sort` int NOT NULL COMMENT '显示顺序', + `status` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '状态(0正常 1停用)', + `create_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '创建者', + `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间', + `update_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '更新者', + `update_time` datetime NULL DEFAULT NULL COMMENT '更新时间', + `remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '备注', + PRIMARY KEY (`post_id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '岗位信息表' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of sys_post +-- ---------------------------- + +-- ---------------------------- +-- Table structure for sys_role +-- ---------------------------- +DROP TABLE IF EXISTS `sys_role`; +CREATE TABLE `sys_role` ( + `role_id` bigint NOT NULL AUTO_INCREMENT COMMENT '角色ID', + `role_name` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '角色名称', + `role_key` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '角色权限字符串', + `role_sort` int NOT NULL COMMENT '显示顺序', + `data_scope` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '1' COMMENT '数据范围(1:全部数据权限 2:自定数据权限 3:本部门数据权限 4:本部门及以下数据权限)', + `menu_check_strictly` tinyint(1) NULL DEFAULT 1 COMMENT '菜单树选择项是否关联显示', + `dept_check_strictly` tinyint(1) NULL DEFAULT 1 COMMENT '部门树选择项是否关联显示', + `status` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '角色状态(0正常 1停用)', + `del_flag` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '0' COMMENT '删除标志(0代表存在 2代表删除)', + `create_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '创建者', + `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间', + `update_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '更新者', + `update_time` datetime NULL DEFAULT NULL COMMENT '更新时间', + `remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '备注', + PRIMARY KEY (`role_id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 9 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '角色信息表' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of sys_role +-- ---------------------------- +INSERT INTO `sys_role` VALUES (1, '超级管理员', 'admin', 1, '1', 1, 1, '0', '0', 'admin', '2021-12-15 21:36:18', '', NULL, '超级管理员'); +INSERT INTO `sys_role` VALUES (2, '设备租户', 'tenant', 2, '5', 1, 1, '0', '0', 'admin', '2021-12-16 16:41:30', 'admin', '2023-04-12 19:53:34', '管理产品和设备'); +INSERT INTO `sys_role` VALUES (3, '普通用户', 'general', 3, '5', 1, 1, '0', '0', 'admin', '2021-12-15 21:36:18', 'admin', '2024-02-07 15:29:09', '设备的最终用户,只能管理设备和分组'); +INSERT INTO `sys_role` VALUES (4, '游客', 'visitor', 4, '1', 1, 1, '0', '0', 'admin', '2021-12-16 16:44:30', 'admin', '2023-12-07 12:03:51', '只能查询和新增系统数据'); +INSERT INTO `sys_role` VALUES (5, '管理员', 'manager', 5, '1', 1, 1, '0', '0', 'admin', '2022-06-10 13:54:29', 'admin', '2023-04-12 19:50:29', '普通管理员'); +INSERT INTO `sys_role` VALUES (6, '景区运维员', ' @PreAuthorize( @ss.hasRole(admin\'))', 5, '1', 1, 1, '0', '2', '18926529123', '2023-11-10 12:32:22', '', NULL, NULL); +INSERT INTO `sys_role` VALUES (7, '管理员', 'manager', 1, '1', 0, 0, '0', '0', '', '2024-05-08 16:35:49', '', NULL, NULL); +INSERT INTO `sys_role` VALUES (8, 'web端注册用户', 'general', 0, '1', 1, 1, '0', '0', 'fastbee-web', '2024-05-08 16:55:16', '', NULL, NULL); + +-- ---------------------------- +-- Table structure for sys_role_dept +-- ---------------------------- +DROP TABLE IF EXISTS `sys_role_dept`; +CREATE TABLE `sys_role_dept` ( + `role_id` bigint NOT NULL COMMENT '角色ID', + `dept_id` bigint NOT NULL COMMENT '部门ID', + PRIMARY KEY (`role_id`, `dept_id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '角色和部门关联表' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of sys_role_dept +-- ---------------------------- +INSERT INTO `sys_role_dept` VALUES (1, 100); +INSERT INTO `sys_role_dept` VALUES (2, 100); +INSERT INTO `sys_role_dept` VALUES (3, 100); +INSERT INTO `sys_role_dept` VALUES (4, 100); +INSERT INTO `sys_role_dept` VALUES (5, 100); +INSERT INTO `sys_role_dept` VALUES (6, 100); +INSERT INTO `sys_role_dept` VALUES (7, 101); +INSERT INTO `sys_role_dept` VALUES (8, 101); + +-- ---------------------------- +-- Table structure for sys_role_menu +-- ---------------------------- +DROP TABLE IF EXISTS `sys_role_menu`; +CREATE TABLE `sys_role_menu` ( + `role_id` bigint NOT NULL COMMENT '角色ID', + `menu_id` bigint NOT NULL COMMENT '菜单ID', + PRIMARY KEY (`role_id`, `menu_id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '角色和菜单关联表' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of sys_role_menu +-- ---------------------------- +INSERT INTO `sys_role_menu` VALUES (2, 1); +INSERT INTO `sys_role_menu` VALUES (2, 4); +INSERT INTO `sys_role_menu` VALUES (2, 107); +INSERT INTO `sys_role_menu` VALUES (2, 1036); +INSERT INTO `sys_role_menu` VALUES (2, 2000); +INSERT INTO `sys_role_menu` VALUES (2, 2001); +INSERT INTO `sys_role_menu` VALUES (2, 2002); +INSERT INTO `sys_role_menu` VALUES (2, 2003); +INSERT INTO `sys_role_menu` VALUES (2, 2004); +INSERT INTO `sys_role_menu` VALUES (2, 2005); +INSERT INTO `sys_role_menu` VALUES (2, 2006); +INSERT INTO `sys_role_menu` VALUES (2, 2007); +INSERT INTO `sys_role_menu` VALUES (2, 2008); +INSERT INTO `sys_role_menu` VALUES (2, 2009); +INSERT INTO `sys_role_menu` VALUES (2, 2010); +INSERT INTO `sys_role_menu` VALUES (2, 2011); +INSERT INTO `sys_role_menu` VALUES (2, 2012); +INSERT INTO `sys_role_menu` VALUES (2, 2013); +INSERT INTO `sys_role_menu` VALUES (2, 2014); +INSERT INTO `sys_role_menu` VALUES (2, 2015); +INSERT INTO `sys_role_menu` VALUES (2, 2016); +INSERT INTO `sys_role_menu` VALUES (2, 2017); +INSERT INTO `sys_role_menu` VALUES (2, 2018); +INSERT INTO `sys_role_menu` VALUES (2, 2019); +INSERT INTO `sys_role_menu` VALUES (2, 2020); +INSERT INTO `sys_role_menu` VALUES (2, 2021); +INSERT INTO `sys_role_menu` VALUES (2, 2022); +INSERT INTO `sys_role_menu` VALUES (2, 2023); +INSERT INTO `sys_role_menu` VALUES (2, 2024); +INSERT INTO `sys_role_menu` VALUES (2, 2043); +INSERT INTO `sys_role_menu` VALUES (2, 2044); +INSERT INTO `sys_role_menu` VALUES (2, 2045); +INSERT INTO `sys_role_menu` VALUES (2, 2046); +INSERT INTO `sys_role_menu` VALUES (2, 2047); +INSERT INTO `sys_role_menu` VALUES (2, 2048); +INSERT INTO `sys_role_menu` VALUES (2, 2049); +INSERT INTO `sys_role_menu` VALUES (2, 2050); +INSERT INTO `sys_role_menu` VALUES (2, 2051); +INSERT INTO `sys_role_menu` VALUES (2, 2052); +INSERT INTO `sys_role_menu` VALUES (2, 2053); +INSERT INTO `sys_role_menu` VALUES (2, 2054); +INSERT INTO `sys_role_menu` VALUES (2, 2067); +INSERT INTO `sys_role_menu` VALUES (2, 2068); +INSERT INTO `sys_role_menu` VALUES (2, 2069); +INSERT INTO `sys_role_menu` VALUES (2, 2070); +INSERT INTO `sys_role_menu` VALUES (2, 2071); +INSERT INTO `sys_role_menu` VALUES (2, 2072); +INSERT INTO `sys_role_menu` VALUES (2, 2085); +INSERT INTO `sys_role_menu` VALUES (2, 2086); +INSERT INTO `sys_role_menu` VALUES (2, 2087); +INSERT INTO `sys_role_menu` VALUES (2, 2088); +INSERT INTO `sys_role_menu` VALUES (2, 2089); +INSERT INTO `sys_role_menu` VALUES (2, 2090); +INSERT INTO `sys_role_menu` VALUES (2, 2098); +INSERT INTO `sys_role_menu` VALUES (2, 2099); +INSERT INTO `sys_role_menu` VALUES (2, 2100); +INSERT INTO `sys_role_menu` VALUES (2, 2101); +INSERT INTO `sys_role_menu` VALUES (2, 2102); +INSERT INTO `sys_role_menu` VALUES (2, 2103); +INSERT INTO `sys_role_menu` VALUES (2, 2129); +INSERT INTO `sys_role_menu` VALUES (2, 2130); +INSERT INTO `sys_role_menu` VALUES (2, 2136); +INSERT INTO `sys_role_menu` VALUES (2, 2137); +INSERT INTO `sys_role_menu` VALUES (2, 2138); +INSERT INTO `sys_role_menu` VALUES (2, 2139); +INSERT INTO `sys_role_menu` VALUES (2, 2140); +INSERT INTO `sys_role_menu` VALUES (2, 2147); +INSERT INTO `sys_role_menu` VALUES (2, 2148); +INSERT INTO `sys_role_menu` VALUES (2, 2168); +INSERT INTO `sys_role_menu` VALUES (2, 2169); +INSERT INTO `sys_role_menu` VALUES (2, 2170); +INSERT INTO `sys_role_menu` VALUES (2, 2171); +INSERT INTO `sys_role_menu` VALUES (2, 2172); +INSERT INTO `sys_role_menu` VALUES (2, 3000); +INSERT INTO `sys_role_menu` VALUES (3, 1); +INSERT INTO `sys_role_menu` VALUES (3, 4); +INSERT INTO `sys_role_menu` VALUES (3, 107); +INSERT INTO `sys_role_menu` VALUES (3, 1036); +INSERT INTO `sys_role_menu` VALUES (3, 2000); +INSERT INTO `sys_role_menu` VALUES (3, 2007); +INSERT INTO `sys_role_menu` VALUES (3, 2008); +INSERT INTO `sys_role_menu` VALUES (3, 2009); +INSERT INTO `sys_role_menu` VALUES (3, 2010); +INSERT INTO `sys_role_menu` VALUES (3, 2011); +INSERT INTO `sys_role_menu` VALUES (3, 2012); +INSERT INTO `sys_role_menu` VALUES (3, 2019); +INSERT INTO `sys_role_menu` VALUES (3, 2020); +INSERT INTO `sys_role_menu` VALUES (3, 2021); +INSERT INTO `sys_role_menu` VALUES (3, 2022); +INSERT INTO `sys_role_menu` VALUES (3, 2023); +INSERT INTO `sys_role_menu` VALUES (3, 2024); +INSERT INTO `sys_role_menu` VALUES (3, 2043); +INSERT INTO `sys_role_menu` VALUES (3, 2067); +INSERT INTO `sys_role_menu` VALUES (3, 2068); +INSERT INTO `sys_role_menu` VALUES (3, 2070); +INSERT INTO `sys_role_menu` VALUES (3, 2085); +INSERT INTO `sys_role_menu` VALUES (3, 2086); +INSERT INTO `sys_role_menu` VALUES (3, 2087); +INSERT INTO `sys_role_menu` VALUES (3, 2088); +INSERT INTO `sys_role_menu` VALUES (3, 2089); +INSERT INTO `sys_role_menu` VALUES (3, 2090); +INSERT INTO `sys_role_menu` VALUES (3, 2129); +INSERT INTO `sys_role_menu` VALUES (3, 2130); +INSERT INTO `sys_role_menu` VALUES (3, 2147); +INSERT INTO `sys_role_menu` VALUES (3, 2148); +INSERT INTO `sys_role_menu` VALUES (3, 2168); +INSERT INTO `sys_role_menu` VALUES (3, 2169); +INSERT INTO `sys_role_menu` VALUES (3, 2170); +INSERT INTO `sys_role_menu` VALUES (3, 2171); +INSERT INTO `sys_role_menu` VALUES (3, 2172); +INSERT INTO `sys_role_menu` VALUES (3, 3001); +INSERT INTO `sys_role_menu` VALUES (3, 3002); +INSERT INTO `sys_role_menu` VALUES (3, 3003); +INSERT INTO `sys_role_menu` VALUES (3, 3004); +INSERT INTO `sys_role_menu` VALUES (3, 3005); +INSERT INTO `sys_role_menu` VALUES (3, 3006); +INSERT INTO `sys_role_menu` VALUES (3, 3031); +INSERT INTO `sys_role_menu` VALUES (3, 3032); +INSERT INTO `sys_role_menu` VALUES (3, 3033); +INSERT INTO `sys_role_menu` VALUES (3, 3034); +INSERT INTO `sys_role_menu` VALUES (3, 3035); +INSERT INTO `sys_role_menu` VALUES (3, 3036); +INSERT INTO `sys_role_menu` VALUES (3, 3037); +INSERT INTO `sys_role_menu` VALUES (3, 3038); +INSERT INTO `sys_role_menu` VALUES (3, 3044); +INSERT INTO `sys_role_menu` VALUES (3, 3046); +INSERT INTO `sys_role_menu` VALUES (3, 3051); +INSERT INTO `sys_role_menu` VALUES (3, 3159); +INSERT INTO `sys_role_menu` VALUES (3, 3178); +INSERT INTO `sys_role_menu` VALUES (3, 3206); +INSERT INTO `sys_role_menu` VALUES (3, 3207); +INSERT INTO `sys_role_menu` VALUES (3, 3226); +INSERT INTO `sys_role_menu` VALUES (3, 3238); +INSERT INTO `sys_role_menu` VALUES (3, 3247); +INSERT INTO `sys_role_menu` VALUES (3, 3249); +INSERT INTO `sys_role_menu` VALUES (3, 3250); +INSERT INTO `sys_role_menu` VALUES (3, 3251); +INSERT INTO `sys_role_menu` VALUES (3, 3252); +INSERT INTO `sys_role_menu` VALUES (4, 1); +INSERT INTO `sys_role_menu` VALUES (4, 2); +INSERT INTO `sys_role_menu` VALUES (4, 3); +INSERT INTO `sys_role_menu` VALUES (4, 4); +INSERT INTO `sys_role_menu` VALUES (4, 100); +INSERT INTO `sys_role_menu` VALUES (4, 101); +INSERT INTO `sys_role_menu` VALUES (4, 102); +INSERT INTO `sys_role_menu` VALUES (4, 103); +INSERT INTO `sys_role_menu` VALUES (4, 104); +INSERT INTO `sys_role_menu` VALUES (4, 105); +INSERT INTO `sys_role_menu` VALUES (4, 106); +INSERT INTO `sys_role_menu` VALUES (4, 107); +INSERT INTO `sys_role_menu` VALUES (4, 108); +INSERT INTO `sys_role_menu` VALUES (4, 109); +INSERT INTO `sys_role_menu` VALUES (4, 110); +INSERT INTO `sys_role_menu` VALUES (4, 111); +INSERT INTO `sys_role_menu` VALUES (4, 112); +INSERT INTO `sys_role_menu` VALUES (4, 113); +INSERT INTO `sys_role_menu` VALUES (4, 114); +INSERT INTO `sys_role_menu` VALUES (4, 115); +INSERT INTO `sys_role_menu` VALUES (4, 116); +INSERT INTO `sys_role_menu` VALUES (4, 124); +INSERT INTO `sys_role_menu` VALUES (4, 500); +INSERT INTO `sys_role_menu` VALUES (4, 501); +INSERT INTO `sys_role_menu` VALUES (4, 1001); +INSERT INTO `sys_role_menu` VALUES (4, 1008); +INSERT INTO `sys_role_menu` VALUES (4, 1013); +INSERT INTO `sys_role_menu` VALUES (4, 1017); +INSERT INTO `sys_role_menu` VALUES (4, 1021); +INSERT INTO `sys_role_menu` VALUES (4, 1026); +INSERT INTO `sys_role_menu` VALUES (4, 1031); +INSERT INTO `sys_role_menu` VALUES (4, 1036); +INSERT INTO `sys_role_menu` VALUES (4, 1040); +INSERT INTO `sys_role_menu` VALUES (4, 1043); +INSERT INTO `sys_role_menu` VALUES (4, 1046); +INSERT INTO `sys_role_menu` VALUES (4, 1049); +INSERT INTO `sys_role_menu` VALUES (4, 1055); +INSERT INTO `sys_role_menu` VALUES (4, 2000); +INSERT INTO `sys_role_menu` VALUES (4, 2001); +INSERT INTO `sys_role_menu` VALUES (4, 2002); +INSERT INTO `sys_role_menu` VALUES (4, 2003); +INSERT INTO `sys_role_menu` VALUES (4, 2007); +INSERT INTO `sys_role_menu` VALUES (4, 2008); +INSERT INTO `sys_role_menu` VALUES (4, 2009); +INSERT INTO `sys_role_menu` VALUES (4, 2013); +INSERT INTO `sys_role_menu` VALUES (4, 2014); +INSERT INTO `sys_role_menu` VALUES (4, 2015); +INSERT INTO `sys_role_menu` VALUES (4, 2019); +INSERT INTO `sys_role_menu` VALUES (4, 2020); +INSERT INTO `sys_role_menu` VALUES (4, 2021); +INSERT INTO `sys_role_menu` VALUES (4, 2043); +INSERT INTO `sys_role_menu` VALUES (4, 2044); +INSERT INTO `sys_role_menu` VALUES (4, 2045); +INSERT INTO `sys_role_menu` VALUES (4, 2049); +INSERT INTO `sys_role_menu` VALUES (4, 2050); +INSERT INTO `sys_role_menu` VALUES (4, 2051); +INSERT INTO `sys_role_menu` VALUES (4, 2067); +INSERT INTO `sys_role_menu` VALUES (4, 2068); +INSERT INTO `sys_role_menu` VALUES (4, 2069); +INSERT INTO `sys_role_menu` VALUES (4, 2085); +INSERT INTO `sys_role_menu` VALUES (4, 2086); +INSERT INTO `sys_role_menu` VALUES (4, 2087); +INSERT INTO `sys_role_menu` VALUES (4, 2104); +INSERT INTO `sys_role_menu` VALUES (4, 2123); +INSERT INTO `sys_role_menu` VALUES (4, 2124); +INSERT INTO `sys_role_menu` VALUES (4, 2125); +INSERT INTO `sys_role_menu` VALUES (4, 2129); +INSERT INTO `sys_role_menu` VALUES (4, 2130); +INSERT INTO `sys_role_menu` VALUES (4, 2131); +INSERT INTO `sys_role_menu` VALUES (4, 2136); +INSERT INTO `sys_role_menu` VALUES (4, 2137); +INSERT INTO `sys_role_menu` VALUES (4, 2141); +INSERT INTO `sys_role_menu` VALUES (4, 2147); +INSERT INTO `sys_role_menu` VALUES (4, 2148); +INSERT INTO `sys_role_menu` VALUES (4, 2149); +INSERT INTO `sys_role_menu` VALUES (4, 2167); +INSERT INTO `sys_role_menu` VALUES (4, 2168); +INSERT INTO `sys_role_menu` VALUES (4, 2169); +INSERT INTO `sys_role_menu` VALUES (4, 2170); +INSERT INTO `sys_role_menu` VALUES (4, 2173); +INSERT INTO `sys_role_menu` VALUES (4, 2174); +INSERT INTO `sys_role_menu` VALUES (4, 2175); +INSERT INTO `sys_role_menu` VALUES (4, 2179); +INSERT INTO `sys_role_menu` VALUES (4, 2180); +INSERT INTO `sys_role_menu` VALUES (4, 2181); +INSERT INTO `sys_role_menu` VALUES (4, 3000); +INSERT INTO `sys_role_menu` VALUES (4, 3001); +INSERT INTO `sys_role_menu` VALUES (4, 3002); +INSERT INTO `sys_role_menu` VALUES (4, 3003); +INSERT INTO `sys_role_menu` VALUES (4, 3007); +INSERT INTO `sys_role_menu` VALUES (4, 3008); +INSERT INTO `sys_role_menu` VALUES (4, 3009); +INSERT INTO `sys_role_menu` VALUES (4, 3013); +INSERT INTO `sys_role_menu` VALUES (4, 3014); +INSERT INTO `sys_role_menu` VALUES (4, 3015); +INSERT INTO `sys_role_menu` VALUES (4, 3019); +INSERT INTO `sys_role_menu` VALUES (4, 3020); +INSERT INTO `sys_role_menu` VALUES (4, 3021); +INSERT INTO `sys_role_menu` VALUES (4, 3025); +INSERT INTO `sys_role_menu` VALUES (4, 3026); +INSERT INTO `sys_role_menu` VALUES (4, 3027); +INSERT INTO `sys_role_menu` VALUES (4, 3031); +INSERT INTO `sys_role_menu` VALUES (4, 3032); +INSERT INTO `sys_role_menu` VALUES (4, 3033); +INSERT INTO `sys_role_menu` VALUES (4, 3034); +INSERT INTO `sys_role_menu` VALUES (4, 3035); +INSERT INTO `sys_role_menu` VALUES (4, 3039); +INSERT INTO `sys_role_menu` VALUES (4, 3040); +INSERT INTO `sys_role_menu` VALUES (4, 3041); +INSERT INTO `sys_role_menu` VALUES (4, 3044); +INSERT INTO `sys_role_menu` VALUES (4, 3045); +INSERT INTO `sys_role_menu` VALUES (4, 3046); +INSERT INTO `sys_role_menu` VALUES (4, 3047); +INSERT INTO `sys_role_menu` VALUES (4, 3048); +INSERT INTO `sys_role_menu` VALUES (4, 3049); +INSERT INTO `sys_role_menu` VALUES (4, 3051); +INSERT INTO `sys_role_menu` VALUES (4, 3055); +INSERT INTO `sys_role_menu` VALUES (4, 3147); +INSERT INTO `sys_role_menu` VALUES (4, 3157); +INSERT INTO `sys_role_menu` VALUES (4, 3159); +INSERT INTO `sys_role_menu` VALUES (4, 3166); +INSERT INTO `sys_role_menu` VALUES (4, 3167); +INSERT INTO `sys_role_menu` VALUES (4, 3168); +INSERT INTO `sys_role_menu` VALUES (4, 3169); +INSERT INTO `sys_role_menu` VALUES (4, 3172); +INSERT INTO `sys_role_menu` VALUES (4, 3173); +INSERT INTO `sys_role_menu` VALUES (4, 3174); +INSERT INTO `sys_role_menu` VALUES (4, 3175); +INSERT INTO `sys_role_menu` VALUES (4, 3176); +INSERT INTO `sys_role_menu` VALUES (4, 3178); +INSERT INTO `sys_role_menu` VALUES (4, 3179); +INSERT INTO `sys_role_menu` VALUES (4, 3180); +INSERT INTO `sys_role_menu` VALUES (4, 3181); +INSERT INTO `sys_role_menu` VALUES (4, 3184); +INSERT INTO `sys_role_menu` VALUES (4, 3185); +INSERT INTO `sys_role_menu` VALUES (4, 3186); +INSERT INTO `sys_role_menu` VALUES (4, 3187); +INSERT INTO `sys_role_menu` VALUES (4, 3189); +INSERT INTO `sys_role_menu` VALUES (4, 3190); +INSERT INTO `sys_role_menu` VALUES (4, 3191); +INSERT INTO `sys_role_menu` VALUES (4, 3192); +INSERT INTO `sys_role_menu` VALUES (4, 3196); +INSERT INTO `sys_role_menu` VALUES (4, 3197); +INSERT INTO `sys_role_menu` VALUES (4, 3198); +INSERT INTO `sys_role_menu` VALUES (4, 3199); +INSERT INTO `sys_role_menu` VALUES (4, 3200); +INSERT INTO `sys_role_menu` VALUES (4, 3202); +INSERT INTO `sys_role_menu` VALUES (4, 3203); +INSERT INTO `sys_role_menu` VALUES (4, 3204); +INSERT INTO `sys_role_menu` VALUES (4, 3205); +INSERT INTO `sys_role_menu` VALUES (4, 3206); +INSERT INTO `sys_role_menu` VALUES (4, 3207); +INSERT INTO `sys_role_menu` VALUES (4, 3208); +INSERT INTO `sys_role_menu` VALUES (4, 3210); +INSERT INTO `sys_role_menu` VALUES (4, 3211); +INSERT INTO `sys_role_menu` VALUES (4, 3212); +INSERT INTO `sys_role_menu` VALUES (4, 3213); +INSERT INTO `sys_role_menu` VALUES (4, 3214); +INSERT INTO `sys_role_menu` VALUES (4, 3217); +INSERT INTO `sys_role_menu` VALUES (4, 3218); +INSERT INTO `sys_role_menu` VALUES (4, 3219); +INSERT INTO `sys_role_menu` VALUES (4, 3220); +INSERT INTO `sys_role_menu` VALUES (4, 3223); +INSERT INTO `sys_role_menu` VALUES (4, 3224); +INSERT INTO `sys_role_menu` VALUES (4, 3225); +INSERT INTO `sys_role_menu` VALUES (4, 3226); +INSERT INTO `sys_role_menu` VALUES (4, 3229); +INSERT INTO `sys_role_menu` VALUES (4, 3230); +INSERT INTO `sys_role_menu` VALUES (4, 3231); +INSERT INTO `sys_role_menu` VALUES (4, 3232); +INSERT INTO `sys_role_menu` VALUES (4, 3235); +INSERT INTO `sys_role_menu` VALUES (4, 3236); +INSERT INTO `sys_role_menu` VALUES (4, 3237); +INSERT INTO `sys_role_menu` VALUES (4, 3238); +INSERT INTO `sys_role_menu` VALUES (4, 3239); +INSERT INTO `sys_role_menu` VALUES (4, 3240); +INSERT INTO `sys_role_menu` VALUES (4, 3243); +INSERT INTO `sys_role_menu` VALUES (4, 3244); +INSERT INTO `sys_role_menu` VALUES (4, 3249); +INSERT INTO `sys_role_menu` VALUES (4, 3250); +INSERT INTO `sys_role_menu` VALUES (4, 3251); +INSERT INTO `sys_role_menu` VALUES (4, 3252); +INSERT INTO `sys_role_menu` VALUES (4, 3253); +INSERT INTO `sys_role_menu` VALUES (4, 3256); +INSERT INTO `sys_role_menu` VALUES (4, 3269); +INSERT INTO `sys_role_menu` VALUES (4, 3270); +INSERT INTO `sys_role_menu` VALUES (4, 3271); +INSERT INTO `sys_role_menu` VALUES (4, 3277); +INSERT INTO `sys_role_menu` VALUES (5, 1); +INSERT INTO `sys_role_menu` VALUES (5, 2); +INSERT INTO `sys_role_menu` VALUES (5, 3); +INSERT INTO `sys_role_menu` VALUES (5, 4); +INSERT INTO `sys_role_menu` VALUES (5, 100); +INSERT INTO `sys_role_menu` VALUES (5, 101); +INSERT INTO `sys_role_menu` VALUES (5, 102); +INSERT INTO `sys_role_menu` VALUES (5, 103); +INSERT INTO `sys_role_menu` VALUES (5, 104); +INSERT INTO `sys_role_menu` VALUES (5, 105); +INSERT INTO `sys_role_menu` VALUES (5, 106); +INSERT INTO `sys_role_menu` VALUES (5, 107); +INSERT INTO `sys_role_menu` VALUES (5, 108); +INSERT INTO `sys_role_menu` VALUES (5, 109); +INSERT INTO `sys_role_menu` VALUES (5, 110); +INSERT INTO `sys_role_menu` VALUES (5, 111); +INSERT INTO `sys_role_menu` VALUES (5, 112); +INSERT INTO `sys_role_menu` VALUES (5, 113); +INSERT INTO `sys_role_menu` VALUES (5, 114); +INSERT INTO `sys_role_menu` VALUES (5, 115); +INSERT INTO `sys_role_menu` VALUES (5, 116); +INSERT INTO `sys_role_menu` VALUES (5, 124); +INSERT INTO `sys_role_menu` VALUES (5, 500); +INSERT INTO `sys_role_menu` VALUES (5, 501); +INSERT INTO `sys_role_menu` VALUES (5, 1001); +INSERT INTO `sys_role_menu` VALUES (5, 1002); +INSERT INTO `sys_role_menu` VALUES (5, 1003); +INSERT INTO `sys_role_menu` VALUES (5, 1004); +INSERT INTO `sys_role_menu` VALUES (5, 1005); +INSERT INTO `sys_role_menu` VALUES (5, 1006); +INSERT INTO `sys_role_menu` VALUES (5, 1007); +INSERT INTO `sys_role_menu` VALUES (5, 1008); +INSERT INTO `sys_role_menu` VALUES (5, 1009); +INSERT INTO `sys_role_menu` VALUES (5, 1010); +INSERT INTO `sys_role_menu` VALUES (5, 1011); +INSERT INTO `sys_role_menu` VALUES (5, 1012); +INSERT INTO `sys_role_menu` VALUES (5, 1013); +INSERT INTO `sys_role_menu` VALUES (5, 1014); +INSERT INTO `sys_role_menu` VALUES (5, 1015); +INSERT INTO `sys_role_menu` VALUES (5, 1016); +INSERT INTO `sys_role_menu` VALUES (5, 1017); +INSERT INTO `sys_role_menu` VALUES (5, 1018); +INSERT INTO `sys_role_menu` VALUES (5, 1019); +INSERT INTO `sys_role_menu` VALUES (5, 1020); +INSERT INTO `sys_role_menu` VALUES (5, 1021); +INSERT INTO `sys_role_menu` VALUES (5, 1022); +INSERT INTO `sys_role_menu` VALUES (5, 1023); +INSERT INTO `sys_role_menu` VALUES (5, 1024); +INSERT INTO `sys_role_menu` VALUES (5, 1025); +INSERT INTO `sys_role_menu` VALUES (5, 1026); +INSERT INTO `sys_role_menu` VALUES (5, 1027); +INSERT INTO `sys_role_menu` VALUES (5, 1028); +INSERT INTO `sys_role_menu` VALUES (5, 1029); +INSERT INTO `sys_role_menu` VALUES (5, 1030); +INSERT INTO `sys_role_menu` VALUES (5, 1031); +INSERT INTO `sys_role_menu` VALUES (5, 1032); +INSERT INTO `sys_role_menu` VALUES (5, 1033); +INSERT INTO `sys_role_menu` VALUES (5, 1034); +INSERT INTO `sys_role_menu` VALUES (5, 1035); +INSERT INTO `sys_role_menu` VALUES (5, 1036); +INSERT INTO `sys_role_menu` VALUES (5, 1037); +INSERT INTO `sys_role_menu` VALUES (5, 1038); +INSERT INTO `sys_role_menu` VALUES (5, 1039); +INSERT INTO `sys_role_menu` VALUES (5, 1040); +INSERT INTO `sys_role_menu` VALUES (5, 1041); +INSERT INTO `sys_role_menu` VALUES (5, 1042); +INSERT INTO `sys_role_menu` VALUES (5, 1043); +INSERT INTO `sys_role_menu` VALUES (5, 1044); +INSERT INTO `sys_role_menu` VALUES (5, 1045); +INSERT INTO `sys_role_menu` VALUES (5, 1046); +INSERT INTO `sys_role_menu` VALUES (5, 1047); +INSERT INTO `sys_role_menu` VALUES (5, 1048); +INSERT INTO `sys_role_menu` VALUES (5, 1049); +INSERT INTO `sys_role_menu` VALUES (5, 1050); +INSERT INTO `sys_role_menu` VALUES (5, 1051); +INSERT INTO `sys_role_menu` VALUES (5, 1052); +INSERT INTO `sys_role_menu` VALUES (5, 1053); +INSERT INTO `sys_role_menu` VALUES (5, 1054); +INSERT INTO `sys_role_menu` VALUES (5, 1055); +INSERT INTO `sys_role_menu` VALUES (5, 1056); +INSERT INTO `sys_role_menu` VALUES (5, 1057); +INSERT INTO `sys_role_menu` VALUES (5, 1058); +INSERT INTO `sys_role_menu` VALUES (5, 1059); +INSERT INTO `sys_role_menu` VALUES (5, 1060); +INSERT INTO `sys_role_menu` VALUES (5, 1065); +INSERT INTO `sys_role_menu` VALUES (5, 2000); +INSERT INTO `sys_role_menu` VALUES (5, 2001); +INSERT INTO `sys_role_menu` VALUES (5, 2002); +INSERT INTO `sys_role_menu` VALUES (5, 2003); +INSERT INTO `sys_role_menu` VALUES (5, 2004); +INSERT INTO `sys_role_menu` VALUES (5, 2005); +INSERT INTO `sys_role_menu` VALUES (5, 2006); +INSERT INTO `sys_role_menu` VALUES (5, 2007); +INSERT INTO `sys_role_menu` VALUES (5, 2008); +INSERT INTO `sys_role_menu` VALUES (5, 2009); +INSERT INTO `sys_role_menu` VALUES (5, 2010); +INSERT INTO `sys_role_menu` VALUES (5, 2011); +INSERT INTO `sys_role_menu` VALUES (5, 2012); +INSERT INTO `sys_role_menu` VALUES (5, 2013); +INSERT INTO `sys_role_menu` VALUES (5, 2014); +INSERT INTO `sys_role_menu` VALUES (5, 2015); +INSERT INTO `sys_role_menu` VALUES (5, 2016); +INSERT INTO `sys_role_menu` VALUES (5, 2017); +INSERT INTO `sys_role_menu` VALUES (5, 2018); +INSERT INTO `sys_role_menu` VALUES (5, 2019); +INSERT INTO `sys_role_menu` VALUES (5, 2020); +INSERT INTO `sys_role_menu` VALUES (5, 2021); +INSERT INTO `sys_role_menu` VALUES (5, 2022); +INSERT INTO `sys_role_menu` VALUES (5, 2023); +INSERT INTO `sys_role_menu` VALUES (5, 2024); +INSERT INTO `sys_role_menu` VALUES (5, 2043); +INSERT INTO `sys_role_menu` VALUES (5, 2044); +INSERT INTO `sys_role_menu` VALUES (5, 2045); +INSERT INTO `sys_role_menu` VALUES (5, 2046); +INSERT INTO `sys_role_menu` VALUES (5, 2047); +INSERT INTO `sys_role_menu` VALUES (5, 2048); +INSERT INTO `sys_role_menu` VALUES (5, 2049); +INSERT INTO `sys_role_menu` VALUES (5, 2050); +INSERT INTO `sys_role_menu` VALUES (5, 2051); +INSERT INTO `sys_role_menu` VALUES (5, 2052); +INSERT INTO `sys_role_menu` VALUES (5, 2053); +INSERT INTO `sys_role_menu` VALUES (5, 2054); +INSERT INTO `sys_role_menu` VALUES (5, 2067); +INSERT INTO `sys_role_menu` VALUES (5, 2068); +INSERT INTO `sys_role_menu` VALUES (5, 2069); +INSERT INTO `sys_role_menu` VALUES (5, 2070); +INSERT INTO `sys_role_menu` VALUES (5, 2071); +INSERT INTO `sys_role_menu` VALUES (5, 2072); +INSERT INTO `sys_role_menu` VALUES (5, 2085); +INSERT INTO `sys_role_menu` VALUES (5, 2086); +INSERT INTO `sys_role_menu` VALUES (5, 2087); +INSERT INTO `sys_role_menu` VALUES (5, 2088); +INSERT INTO `sys_role_menu` VALUES (5, 2089); +INSERT INTO `sys_role_menu` VALUES (5, 2090); +INSERT INTO `sys_role_menu` VALUES (5, 2098); +INSERT INTO `sys_role_menu` VALUES (5, 2099); +INSERT INTO `sys_role_menu` VALUES (5, 2100); +INSERT INTO `sys_role_menu` VALUES (5, 2101); +INSERT INTO `sys_role_menu` VALUES (5, 2102); +INSERT INTO `sys_role_menu` VALUES (5, 2103); +INSERT INTO `sys_role_menu` VALUES (5, 2104); +INSERT INTO `sys_role_menu` VALUES (5, 2105); +INSERT INTO `sys_role_menu` VALUES (5, 2106); +INSERT INTO `sys_role_menu` VALUES (5, 2107); +INSERT INTO `sys_role_menu` VALUES (5, 2108); +INSERT INTO `sys_role_menu` VALUES (5, 2109); +INSERT INTO `sys_role_menu` VALUES (5, 2111); +INSERT INTO `sys_role_menu` VALUES (5, 2112); +INSERT INTO `sys_role_menu` VALUES (5, 2123); +INSERT INTO `sys_role_menu` VALUES (5, 2124); +INSERT INTO `sys_role_menu` VALUES (5, 2125); +INSERT INTO `sys_role_menu` VALUES (5, 2126); +INSERT INTO `sys_role_menu` VALUES (5, 2127); +INSERT INTO `sys_role_menu` VALUES (5, 2128); +INSERT INTO `sys_role_menu` VALUES (5, 2129); +INSERT INTO `sys_role_menu` VALUES (5, 2130); +INSERT INTO `sys_role_menu` VALUES (5, 2131); +INSERT INTO `sys_role_menu` VALUES (5, 2132); +INSERT INTO `sys_role_menu` VALUES (5, 2133); +INSERT INTO `sys_role_menu` VALUES (5, 2134); +INSERT INTO `sys_role_menu` VALUES (5, 2136); +INSERT INTO `sys_role_menu` VALUES (5, 2137); +INSERT INTO `sys_role_menu` VALUES (5, 2138); +INSERT INTO `sys_role_menu` VALUES (5, 2139); +INSERT INTO `sys_role_menu` VALUES (5, 2140); +INSERT INTO `sys_role_menu` VALUES (5, 2141); +INSERT INTO `sys_role_menu` VALUES (5, 2143); +INSERT INTO `sys_role_menu` VALUES (5, 2144); +INSERT INTO `sys_role_menu` VALUES (5, 2145); +INSERT INTO `sys_role_menu` VALUES (5, 2146); +INSERT INTO `sys_role_menu` VALUES (5, 2147); +INSERT INTO `sys_role_menu` VALUES (5, 2148); +INSERT INTO `sys_role_menu` VALUES (5, 2149); +INSERT INTO `sys_role_menu` VALUES (5, 2167); +INSERT INTO `sys_role_menu` VALUES (5, 2168); +INSERT INTO `sys_role_menu` VALUES (5, 2169); +INSERT INTO `sys_role_menu` VALUES (5, 2170); +INSERT INTO `sys_role_menu` VALUES (5, 2171); +INSERT INTO `sys_role_menu` VALUES (5, 2172); +INSERT INTO `sys_role_menu` VALUES (5, 2179); +INSERT INTO `sys_role_menu` VALUES (5, 2180); +INSERT INTO `sys_role_menu` VALUES (5, 2181); +INSERT INTO `sys_role_menu` VALUES (5, 2182); +INSERT INTO `sys_role_menu` VALUES (5, 2183); +INSERT INTO `sys_role_menu` VALUES (5, 2184); +INSERT INTO `sys_role_menu` VALUES (5, 3000); +INSERT INTO `sys_role_menu` VALUES (5, 3001); +INSERT INTO `sys_role_menu` VALUES (5, 3002); +INSERT INTO `sys_role_menu` VALUES (5, 3003); +INSERT INTO `sys_role_menu` VALUES (5, 3004); +INSERT INTO `sys_role_menu` VALUES (5, 3005); +INSERT INTO `sys_role_menu` VALUES (5, 3006); +INSERT INTO `sys_role_menu` VALUES (5, 3007); +INSERT INTO `sys_role_menu` VALUES (5, 3008); +INSERT INTO `sys_role_menu` VALUES (5, 3009); +INSERT INTO `sys_role_menu` VALUES (5, 3010); +INSERT INTO `sys_role_menu` VALUES (5, 3011); +INSERT INTO `sys_role_menu` VALUES (5, 3012); +INSERT INTO `sys_role_menu` VALUES (5, 3013); +INSERT INTO `sys_role_menu` VALUES (5, 3014); +INSERT INTO `sys_role_menu` VALUES (5, 3015); +INSERT INTO `sys_role_menu` VALUES (5, 3016); +INSERT INTO `sys_role_menu` VALUES (5, 3017); +INSERT INTO `sys_role_menu` VALUES (5, 3018); +INSERT INTO `sys_role_menu` VALUES (5, 3019); +INSERT INTO `sys_role_menu` VALUES (5, 3020); +INSERT INTO `sys_role_menu` VALUES (5, 3021); +INSERT INTO `sys_role_menu` VALUES (5, 3022); +INSERT INTO `sys_role_menu` VALUES (5, 3023); +INSERT INTO `sys_role_menu` VALUES (5, 3024); +INSERT INTO `sys_role_menu` VALUES (5, 3025); +INSERT INTO `sys_role_menu` VALUES (5, 3026); +INSERT INTO `sys_role_menu` VALUES (5, 3027); +INSERT INTO `sys_role_menu` VALUES (5, 3028); +INSERT INTO `sys_role_menu` VALUES (5, 3029); +INSERT INTO `sys_role_menu` VALUES (5, 3030); +INSERT INTO `sys_role_menu` VALUES (5, 3031); +INSERT INTO `sys_role_menu` VALUES (5, 3032); +INSERT INTO `sys_role_menu` VALUES (5, 3033); +INSERT INTO `sys_role_menu` VALUES (5, 3034); +INSERT INTO `sys_role_menu` VALUES (5, 3035); +INSERT INTO `sys_role_menu` VALUES (5, 3036); +INSERT INTO `sys_role_menu` VALUES (5, 3037); +INSERT INTO `sys_role_menu` VALUES (5, 3038); +INSERT INTO `sys_role_menu` VALUES (5, 3039); +INSERT INTO `sys_role_menu` VALUES (5, 3040); +INSERT INTO `sys_role_menu` VALUES (5, 3041); +INSERT INTO `sys_role_menu` VALUES (5, 3042); +INSERT INTO `sys_role_menu` VALUES (5, 3043); +INSERT INTO `sys_role_menu` VALUES (7, 3); +INSERT INTO `sys_role_menu` VALUES (7, 4); +INSERT INTO `sys_role_menu` VALUES (7, 5); +INSERT INTO `sys_role_menu` VALUES (7, 100); +INSERT INTO `sys_role_menu` VALUES (7, 101); +INSERT INTO `sys_role_menu` VALUES (7, 103); +INSERT INTO `sys_role_menu` VALUES (7, 114); +INSERT INTO `sys_role_menu` VALUES (7, 115); +INSERT INTO `sys_role_menu` VALUES (7, 116); +INSERT INTO `sys_role_menu` VALUES (7, 1001); +INSERT INTO `sys_role_menu` VALUES (7, 1002); +INSERT INTO `sys_role_menu` VALUES (7, 1003); +INSERT INTO `sys_role_menu` VALUES (7, 1004); +INSERT INTO `sys_role_menu` VALUES (7, 1005); +INSERT INTO `sys_role_menu` VALUES (7, 1006); +INSERT INTO `sys_role_menu` VALUES (7, 1007); +INSERT INTO `sys_role_menu` VALUES (7, 1008); +INSERT INTO `sys_role_menu` VALUES (7, 1009); +INSERT INTO `sys_role_menu` VALUES (7, 1010); +INSERT INTO `sys_role_menu` VALUES (7, 1011); +INSERT INTO `sys_role_menu` VALUES (7, 1012); +INSERT INTO `sys_role_menu` VALUES (7, 1017); +INSERT INTO `sys_role_menu` VALUES (7, 1018); +INSERT INTO `sys_role_menu` VALUES (7, 1019); +INSERT INTO `sys_role_menu` VALUES (7, 1020); +INSERT INTO `sys_role_menu` VALUES (7, 1055); +INSERT INTO `sys_role_menu` VALUES (7, 1056); +INSERT INTO `sys_role_menu` VALUES (7, 1057); +INSERT INTO `sys_role_menu` VALUES (7, 1058); +INSERT INTO `sys_role_menu` VALUES (7, 1059); +INSERT INTO `sys_role_menu` VALUES (7, 1060); +INSERT INTO `sys_role_menu` VALUES (7, 2000); +INSERT INTO `sys_role_menu` VALUES (7, 2001); +INSERT INTO `sys_role_menu` VALUES (7, 2002); +INSERT INTO `sys_role_menu` VALUES (7, 2003); +INSERT INTO `sys_role_menu` VALUES (7, 2006); +INSERT INTO `sys_role_menu` VALUES (7, 2007); +INSERT INTO `sys_role_menu` VALUES (7, 2008); +INSERT INTO `sys_role_menu` VALUES (7, 2009); +INSERT INTO `sys_role_menu` VALUES (7, 2010); +INSERT INTO `sys_role_menu` VALUES (7, 2011); +INSERT INTO `sys_role_menu` VALUES (7, 2012); +INSERT INTO `sys_role_menu` VALUES (7, 2013); +INSERT INTO `sys_role_menu` VALUES (7, 2014); +INSERT INTO `sys_role_menu` VALUES (7, 2015); +INSERT INTO `sys_role_menu` VALUES (7, 2016); +INSERT INTO `sys_role_menu` VALUES (7, 2017); +INSERT INTO `sys_role_menu` VALUES (7, 2018); +INSERT INTO `sys_role_menu` VALUES (7, 2019); +INSERT INTO `sys_role_menu` VALUES (7, 2020); +INSERT INTO `sys_role_menu` VALUES (7, 2021); +INSERT INTO `sys_role_menu` VALUES (7, 2022); +INSERT INTO `sys_role_menu` VALUES (7, 2023); +INSERT INTO `sys_role_menu` VALUES (7, 2024); +INSERT INTO `sys_role_menu` VALUES (7, 2043); +INSERT INTO `sys_role_menu` VALUES (7, 2044); +INSERT INTO `sys_role_menu` VALUES (7, 2045); +INSERT INTO `sys_role_menu` VALUES (7, 2046); +INSERT INTO `sys_role_menu` VALUES (7, 2047); +INSERT INTO `sys_role_menu` VALUES (7, 2048); +INSERT INTO `sys_role_menu` VALUES (7, 2049); +INSERT INTO `sys_role_menu` VALUES (7, 2050); +INSERT INTO `sys_role_menu` VALUES (7, 2051); +INSERT INTO `sys_role_menu` VALUES (7, 2054); +INSERT INTO `sys_role_menu` VALUES (7, 2067); +INSERT INTO `sys_role_menu` VALUES (7, 2068); +INSERT INTO `sys_role_menu` VALUES (7, 2069); +INSERT INTO `sys_role_menu` VALUES (7, 2070); +INSERT INTO `sys_role_menu` VALUES (7, 2071); +INSERT INTO `sys_role_menu` VALUES (7, 2072); +INSERT INTO `sys_role_menu` VALUES (7, 2085); +INSERT INTO `sys_role_menu` VALUES (7, 2086); +INSERT INTO `sys_role_menu` VALUES (7, 2087); +INSERT INTO `sys_role_menu` VALUES (7, 2088); +INSERT INTO `sys_role_menu` VALUES (7, 2089); +INSERT INTO `sys_role_menu` VALUES (7, 2090); +INSERT INTO `sys_role_menu` VALUES (7, 2099); +INSERT INTO `sys_role_menu` VALUES (7, 2100); +INSERT INTO `sys_role_menu` VALUES (7, 2101); +INSERT INTO `sys_role_menu` VALUES (7, 2102); +INSERT INTO `sys_role_menu` VALUES (7, 2103); +INSERT INTO `sys_role_menu` VALUES (7, 2104); +INSERT INTO `sys_role_menu` VALUES (7, 2105); +INSERT INTO `sys_role_menu` VALUES (7, 2106); +INSERT INTO `sys_role_menu` VALUES (7, 2107); +INSERT INTO `sys_role_menu` VALUES (7, 2108); +INSERT INTO `sys_role_menu` VALUES (7, 2109); +INSERT INTO `sys_role_menu` VALUES (7, 2111); +INSERT INTO `sys_role_menu` VALUES (7, 2112); +INSERT INTO `sys_role_menu` VALUES (7, 2136); +INSERT INTO `sys_role_menu` VALUES (7, 2137); +INSERT INTO `sys_role_menu` VALUES (7, 2138); +INSERT INTO `sys_role_menu` VALUES (7, 2139); +INSERT INTO `sys_role_menu` VALUES (7, 2140); +INSERT INTO `sys_role_menu` VALUES (7, 2143); +INSERT INTO `sys_role_menu` VALUES (7, 2144); +INSERT INTO `sys_role_menu` VALUES (7, 2145); +INSERT INTO `sys_role_menu` VALUES (7, 2146); +INSERT INTO `sys_role_menu` VALUES (7, 2147); +INSERT INTO `sys_role_menu` VALUES (7, 2148); +INSERT INTO `sys_role_menu` VALUES (7, 2149); +INSERT INTO `sys_role_menu` VALUES (7, 2167); +INSERT INTO `sys_role_menu` VALUES (7, 2168); +INSERT INTO `sys_role_menu` VALUES (7, 2169); +INSERT INTO `sys_role_menu` VALUES (7, 2170); +INSERT INTO `sys_role_menu` VALUES (7, 2171); +INSERT INTO `sys_role_menu` VALUES (7, 2172); +INSERT INTO `sys_role_menu` VALUES (7, 2173); +INSERT INTO `sys_role_menu` VALUES (7, 2174); +INSERT INTO `sys_role_menu` VALUES (7, 2175); +INSERT INTO `sys_role_menu` VALUES (7, 2176); +INSERT INTO `sys_role_menu` VALUES (7, 2177); +INSERT INTO `sys_role_menu` VALUES (7, 2178); +INSERT INTO `sys_role_menu` VALUES (7, 2179); +INSERT INTO `sys_role_menu` VALUES (7, 2180); +INSERT INTO `sys_role_menu` VALUES (7, 2181); +INSERT INTO `sys_role_menu` VALUES (7, 2182); +INSERT INTO `sys_role_menu` VALUES (7, 2183); +INSERT INTO `sys_role_menu` VALUES (7, 2184); +INSERT INTO `sys_role_menu` VALUES (7, 3000); +INSERT INTO `sys_role_menu` VALUES (7, 3001); +INSERT INTO `sys_role_menu` VALUES (7, 3002); +INSERT INTO `sys_role_menu` VALUES (7, 3003); +INSERT INTO `sys_role_menu` VALUES (7, 3004); +INSERT INTO `sys_role_menu` VALUES (7, 3005); +INSERT INTO `sys_role_menu` VALUES (7, 3006); +INSERT INTO `sys_role_menu` VALUES (7, 3007); +INSERT INTO `sys_role_menu` VALUES (7, 3008); +INSERT INTO `sys_role_menu` VALUES (7, 3009); +INSERT INTO `sys_role_menu` VALUES (7, 3010); +INSERT INTO `sys_role_menu` VALUES (7, 3011); +INSERT INTO `sys_role_menu` VALUES (7, 3012); +INSERT INTO `sys_role_menu` VALUES (7, 3013); +INSERT INTO `sys_role_menu` VALUES (7, 3014); +INSERT INTO `sys_role_menu` VALUES (7, 3015); +INSERT INTO `sys_role_menu` VALUES (7, 3016); +INSERT INTO `sys_role_menu` VALUES (7, 3017); +INSERT INTO `sys_role_menu` VALUES (7, 3018); +INSERT INTO `sys_role_menu` VALUES (7, 3019); +INSERT INTO `sys_role_menu` VALUES (7, 3020); +INSERT INTO `sys_role_menu` VALUES (7, 3021); +INSERT INTO `sys_role_menu` VALUES (7, 3022); +INSERT INTO `sys_role_menu` VALUES (7, 3023); +INSERT INTO `sys_role_menu` VALUES (7, 3024); +INSERT INTO `sys_role_menu` VALUES (7, 3025); +INSERT INTO `sys_role_menu` VALUES (7, 3026); +INSERT INTO `sys_role_menu` VALUES (7, 3027); +INSERT INTO `sys_role_menu` VALUES (7, 3028); +INSERT INTO `sys_role_menu` VALUES (7, 3029); +INSERT INTO `sys_role_menu` VALUES (7, 3030); +INSERT INTO `sys_role_menu` VALUES (7, 3031); +INSERT INTO `sys_role_menu` VALUES (7, 3032); +INSERT INTO `sys_role_menu` VALUES (7, 3033); +INSERT INTO `sys_role_menu` VALUES (7, 3034); +INSERT INTO `sys_role_menu` VALUES (7, 3035); +INSERT INTO `sys_role_menu` VALUES (7, 3036); +INSERT INTO `sys_role_menu` VALUES (7, 3037); +INSERT INTO `sys_role_menu` VALUES (7, 3038); +INSERT INTO `sys_role_menu` VALUES (7, 3039); +INSERT INTO `sys_role_menu` VALUES (7, 3040); +INSERT INTO `sys_role_menu` VALUES (7, 3041); +INSERT INTO `sys_role_menu` VALUES (7, 3042); +INSERT INTO `sys_role_menu` VALUES (7, 3043); +INSERT INTO `sys_role_menu` VALUES (7, 3044); +INSERT INTO `sys_role_menu` VALUES (7, 3046); +INSERT INTO `sys_role_menu` VALUES (7, 3047); +INSERT INTO `sys_role_menu` VALUES (7, 3048); +INSERT INTO `sys_role_menu` VALUES (7, 3049); +INSERT INTO `sys_role_menu` VALUES (7, 3051); +INSERT INTO `sys_role_menu` VALUES (7, 3052); +INSERT INTO `sys_role_menu` VALUES (7, 3055); +INSERT INTO `sys_role_menu` VALUES (7, 3099); +INSERT INTO `sys_role_menu` VALUES (7, 3100); +INSERT INTO `sys_role_menu` VALUES (7, 3102); +INSERT INTO `sys_role_menu` VALUES (7, 3103); +INSERT INTO `sys_role_menu` VALUES (7, 3104); +INSERT INTO `sys_role_menu` VALUES (7, 3105); +INSERT INTO `sys_role_menu` VALUES (7, 3106); +INSERT INTO `sys_role_menu` VALUES (7, 3107); +INSERT INTO `sys_role_menu` VALUES (7, 3108); +INSERT INTO `sys_role_menu` VALUES (7, 3109); +INSERT INTO `sys_role_menu` VALUES (7, 3110); +INSERT INTO `sys_role_menu` VALUES (7, 3111); +INSERT INTO `sys_role_menu` VALUES (7, 3112); +INSERT INTO `sys_role_menu` VALUES (7, 3113); +INSERT INTO `sys_role_menu` VALUES (7, 3114); +INSERT INTO `sys_role_menu` VALUES (7, 3115); +INSERT INTO `sys_role_menu` VALUES (7, 3116); +INSERT INTO `sys_role_menu` VALUES (7, 3117); +INSERT INTO `sys_role_menu` VALUES (7, 3147); +INSERT INTO `sys_role_menu` VALUES (7, 3148); +INSERT INTO `sys_role_menu` VALUES (7, 3149); +INSERT INTO `sys_role_menu` VALUES (7, 3150); +INSERT INTO `sys_role_menu` VALUES (7, 3151); +INSERT INTO `sys_role_menu` VALUES (7, 3152); +INSERT INTO `sys_role_menu` VALUES (7, 3153); +INSERT INTO `sys_role_menu` VALUES (7, 3154); +INSERT INTO `sys_role_menu` VALUES (7, 3155); +INSERT INTO `sys_role_menu` VALUES (7, 3156); +INSERT INTO `sys_role_menu` VALUES (7, 3157); +INSERT INTO `sys_role_menu` VALUES (7, 3158); +INSERT INTO `sys_role_menu` VALUES (7, 3159); +INSERT INTO `sys_role_menu` VALUES (7, 3160); +INSERT INTO `sys_role_menu` VALUES (7, 3161); +INSERT INTO `sys_role_menu` VALUES (7, 3162); +INSERT INTO `sys_role_menu` VALUES (7, 3163); +INSERT INTO `sys_role_menu` VALUES (7, 3164); +INSERT INTO `sys_role_menu` VALUES (7, 3165); +INSERT INTO `sys_role_menu` VALUES (7, 3166); +INSERT INTO `sys_role_menu` VALUES (7, 3167); +INSERT INTO `sys_role_menu` VALUES (7, 3168); +INSERT INTO `sys_role_menu` VALUES (7, 3169); +INSERT INTO `sys_role_menu` VALUES (7, 3170); +INSERT INTO `sys_role_menu` VALUES (7, 3171); +INSERT INTO `sys_role_menu` VALUES (7, 3172); +INSERT INTO `sys_role_menu` VALUES (7, 3173); +INSERT INTO `sys_role_menu` VALUES (7, 3174); +INSERT INTO `sys_role_menu` VALUES (7, 3175); +INSERT INTO `sys_role_menu` VALUES (7, 3176); +INSERT INTO `sys_role_menu` VALUES (7, 3177); +INSERT INTO `sys_role_menu` VALUES (7, 3178); +INSERT INTO `sys_role_menu` VALUES (7, 3179); +INSERT INTO `sys_role_menu` VALUES (7, 3180); +INSERT INTO `sys_role_menu` VALUES (7, 3181); +INSERT INTO `sys_role_menu` VALUES (7, 3182); +INSERT INTO `sys_role_menu` VALUES (7, 3183); +INSERT INTO `sys_role_menu` VALUES (7, 3184); +INSERT INTO `sys_role_menu` VALUES (7, 3185); +INSERT INTO `sys_role_menu` VALUES (7, 3186); +INSERT INTO `sys_role_menu` VALUES (7, 3187); +INSERT INTO `sys_role_menu` VALUES (7, 3188); +INSERT INTO `sys_role_menu` VALUES (7, 3189); +INSERT INTO `sys_role_menu` VALUES (7, 3190); +INSERT INTO `sys_role_menu` VALUES (7, 3191); +INSERT INTO `sys_role_menu` VALUES (7, 3197); +INSERT INTO `sys_role_menu` VALUES (7, 3198); +INSERT INTO `sys_role_menu` VALUES (7, 3199); +INSERT INTO `sys_role_menu` VALUES (7, 3200); +INSERT INTO `sys_role_menu` VALUES (7, 3201); +INSERT INTO `sys_role_menu` VALUES (7, 3202); +INSERT INTO `sys_role_menu` VALUES (7, 3203); +INSERT INTO `sys_role_menu` VALUES (7, 3204); +INSERT INTO `sys_role_menu` VALUES (7, 3205); +INSERT INTO `sys_role_menu` VALUES (7, 3206); +INSERT INTO `sys_role_menu` VALUES (7, 3207); +INSERT INTO `sys_role_menu` VALUES (7, 3208); +INSERT INTO `sys_role_menu` VALUES (7, 3209); +INSERT INTO `sys_role_menu` VALUES (7, 3210); +INSERT INTO `sys_role_menu` VALUES (7, 3211); +INSERT INTO `sys_role_menu` VALUES (7, 3214); +INSERT INTO `sys_role_menu` VALUES (7, 3215); +INSERT INTO `sys_role_menu` VALUES (7, 3216); +INSERT INTO `sys_role_menu` VALUES (7, 3217); +INSERT INTO `sys_role_menu` VALUES (7, 3218); +INSERT INTO `sys_role_menu` VALUES (7, 3219); +INSERT INTO `sys_role_menu` VALUES (7, 3220); +INSERT INTO `sys_role_menu` VALUES (7, 3221); +INSERT INTO `sys_role_menu` VALUES (7, 3222); +INSERT INTO `sys_role_menu` VALUES (7, 3223); +INSERT INTO `sys_role_menu` VALUES (7, 3224); +INSERT INTO `sys_role_menu` VALUES (7, 3225); +INSERT INTO `sys_role_menu` VALUES (7, 3226); +INSERT INTO `sys_role_menu` VALUES (7, 3237); +INSERT INTO `sys_role_menu` VALUES (7, 3238); +INSERT INTO `sys_role_menu` VALUES (7, 3239); +INSERT INTO `sys_role_menu` VALUES (7, 3240); +INSERT INTO `sys_role_menu` VALUES (7, 3247); +INSERT INTO `sys_role_menu` VALUES (7, 3248); +INSERT INTO `sys_role_menu` VALUES (7, 3249); +INSERT INTO `sys_role_menu` VALUES (7, 3250); +INSERT INTO `sys_role_menu` VALUES (7, 3251); +INSERT INTO `sys_role_menu` VALUES (7, 3252); +INSERT INTO `sys_role_menu` VALUES (7, 3253); +INSERT INTO `sys_role_menu` VALUES (8, 2000); +INSERT INTO `sys_role_menu` VALUES (8, 2007); +INSERT INTO `sys_role_menu` VALUES (8, 2008); +INSERT INTO `sys_role_menu` VALUES (8, 2009); +INSERT INTO `sys_role_menu` VALUES (8, 2010); +INSERT INTO `sys_role_menu` VALUES (8, 2011); +INSERT INTO `sys_role_menu` VALUES (8, 2012); +INSERT INTO `sys_role_menu` VALUES (8, 2013); +INSERT INTO `sys_role_menu` VALUES (8, 2014); +INSERT INTO `sys_role_menu` VALUES (8, 2015); +INSERT INTO `sys_role_menu` VALUES (8, 2016); +INSERT INTO `sys_role_menu` VALUES (8, 2017); +INSERT INTO `sys_role_menu` VALUES (8, 2018); +INSERT INTO `sys_role_menu` VALUES (8, 2019); +INSERT INTO `sys_role_menu` VALUES (8, 2020); +INSERT INTO `sys_role_menu` VALUES (8, 2021); +INSERT INTO `sys_role_menu` VALUES (8, 2043); +INSERT INTO `sys_role_menu` VALUES (8, 2044); +INSERT INTO `sys_role_menu` VALUES (8, 2147); +INSERT INTO `sys_role_menu` VALUES (8, 2148); +INSERT INTO `sys_role_menu` VALUES (8, 3000); +INSERT INTO `sys_role_menu` VALUES (8, 3001); +INSERT INTO `sys_role_menu` VALUES (8, 3002); +INSERT INTO `sys_role_menu` VALUES (8, 3003); +INSERT INTO `sys_role_menu` VALUES (8, 3007); +INSERT INTO `sys_role_menu` VALUES (8, 3008); +INSERT INTO `sys_role_menu` VALUES (8, 3013); +INSERT INTO `sys_role_menu` VALUES (8, 3014); +INSERT INTO `sys_role_menu` VALUES (8, 3015); +INSERT INTO `sys_role_menu` VALUES (8, 3016); +INSERT INTO `sys_role_menu` VALUES (8, 3017); +INSERT INTO `sys_role_menu` VALUES (8, 3018); +INSERT INTO `sys_role_menu` VALUES (8, 3019); +INSERT INTO `sys_role_menu` VALUES (8, 3020); +INSERT INTO `sys_role_menu` VALUES (8, 3021); +INSERT INTO `sys_role_menu` VALUES (8, 3022); +INSERT INTO `sys_role_menu` VALUES (8, 3023); +INSERT INTO `sys_role_menu` VALUES (8, 3024); +INSERT INTO `sys_role_menu` VALUES (8, 3025); +INSERT INTO `sys_role_menu` VALUES (8, 3026); +INSERT INTO `sys_role_menu` VALUES (8, 3027); +INSERT INTO `sys_role_menu` VALUES (8, 3028); +INSERT INTO `sys_role_menu` VALUES (8, 3029); +INSERT INTO `sys_role_menu` VALUES (8, 3030); +INSERT INTO `sys_role_menu` VALUES (8, 3033); +INSERT INTO `sys_role_menu` VALUES (8, 3034); +INSERT INTO `sys_role_menu` VALUES (8, 3035); +INSERT INTO `sys_role_menu` VALUES (8, 3039); +INSERT INTO `sys_role_menu` VALUES (8, 3040); +INSERT INTO `sys_role_menu` VALUES (8, 3041); +INSERT INTO `sys_role_menu` VALUES (8, 3042); +INSERT INTO `sys_role_menu` VALUES (8, 3043); +INSERT INTO `sys_role_menu` VALUES (8, 3044); +INSERT INTO `sys_role_menu` VALUES (8, 3206); +INSERT INTO `sys_role_menu` VALUES (8, 3207); +INSERT INTO `sys_role_menu` VALUES (8, 3208); +INSERT INTO `sys_role_menu` VALUES (8, 3209); +INSERT INTO `sys_role_menu` VALUES (8, 3210); +INSERT INTO `sys_role_menu` VALUES (8, 3214); +INSERT INTO `sys_role_menu` VALUES (8, 3215); +INSERT INTO `sys_role_menu` VALUES (8, 3216); +INSERT INTO `sys_role_menu` VALUES (8, 3217); +INSERT INTO `sys_role_menu` VALUES (8, 3218); +INSERT INTO `sys_role_menu` VALUES (8, 3219); +INSERT INTO `sys_role_menu` VALUES (8, 3220); +INSERT INTO `sys_role_menu` VALUES (8, 3221); +INSERT INTO `sys_role_menu` VALUES (8, 3222); +INSERT INTO `sys_role_menu` VALUES (8, 3247); +INSERT INTO `sys_role_menu` VALUES (8, 3248); +INSERT INTO `sys_role_menu` VALUES (8, 3249); +INSERT INTO `sys_role_menu` VALUES (8, 3250); +INSERT INTO `sys_role_menu` VALUES (8, 3251); +INSERT INTO `sys_role_menu` VALUES (8, 3252); +INSERT INTO `sys_role_menu` VALUES (8, 3253); + +-- ---------------------------- +-- Table structure for sys_user +-- ---------------------------- +DROP TABLE IF EXISTS `sys_user`; +CREATE TABLE `sys_user` ( + `user_id` bigint NOT NULL AUTO_INCREMENT COMMENT '用户ID', + `dept_id` bigint NULL DEFAULT NULL COMMENT '部门ID', + `user_name` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '用户账号', + `nick_name` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '用户昵称', + `user_type` varchar(2) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '00' COMMENT '用户类型(00系统用户)', + `email` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '用户邮箱', + `phonenumber` varchar(11) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '手机号码', + `sex` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '0' COMMENT '用户性别(0男 1女 2未知)', + `avatar` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '头像地址', + `password` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '密码', + `status` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '0' COMMENT '帐号状态(0正常 1停用)', + `del_flag` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '0' COMMENT '删除标志(0代表存在 2代表删除)', + `login_ip` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '最后登录IP', + `login_date` datetime NULL DEFAULT NULL COMMENT '最后登录时间', + `create_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '创建者', + `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间', + `update_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '更新者', + `update_time` datetime NULL DEFAULT NULL COMMENT '更新时间', + `remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '备注', + PRIMARY KEY (`user_id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 8 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '用户信息表' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of sys_user +-- ---------------------------- +INSERT INTO `sys_user` VALUES (1, 100, 'admin', '信达管理员', '00', '329487255@qq.com', '15888888888', '1', '/profile/avatar/2025/01/07/blob_20250107221833A002.png', '$2a$10$hghJ6rrKoUaPM/ZNIDo9m.vqngbUGkhpwssVVW7gljserpD/KRX7G', '0', '0', '192.168.1.103', '2025-01-09 01:23:59', 'admin', '2021-12-15 21:36:18', '', '2025-01-09 01:23:58', '管理员'); +INSERT INTO `sys_user` VALUES (2, 100, 'fastbee-t1', '信达租户壹', '00', '', '15888888880', '0', '', '$2a$10$BAWId9C2Nrcwklzl1Ikoau4iqL8XRGvfRjq6Wl.PXWpzwAw0sXMdK', '0', '2', '61.145.97.26', '2023-08-29 14:52:27', 'admin', '2022-04-15 16:21:25', 'admin', '2025-01-07 22:16:22', NULL); +INSERT INTO `sys_user` VALUES (3, 100, 'fastbee-t2', '信达租户贰', '00', '', '15888888881', '0', '', '$2a$10$1zMlbW7hGpzA59gpzWGO/ObeASziQ296evjMjHrYdZnxKBLU4WUum', '0', '2', '127.0.0.1', '2022-06-12 00:54:28', 'admin', '2022-04-15 16:22:08', 'admin', '2025-01-07 22:16:34', NULL); +INSERT INTO `sys_user` VALUES (4, 100, 'fastbee-u1', '信达用户壹', '00', '', '15888888882', '0', '', '$2a$10$691RJMXZ9HM4sgNTExLPfO5Nw6J6cWgCvcoF9V.jKMnPk5o/8c9VS', '0', '2', '127.0.0.1', '2024-01-23 10:42:28', 'admin', '2022-04-15 16:22:37', 'admin', '2025-01-07 22:16:47', NULL); +INSERT INTO `sys_user` VALUES (5, 100, 'fastbee-u2', '信达用户贰', '00', '', '15888888883', '0', '', '$2a$10$x3rM39rewwbi7ayvriGMEOKUHoPCqcL2CYXPLTJRCWYPVvykFIYJq', '0', '2', '127.0.0.1', '2022-06-12 00:55:45', 'admin', '2022-04-15 16:23:13', 'admin', '2025-01-07 22:16:55', NULL); +INSERT INTO `sys_user` VALUES (6, 100, 'fastbee', '游客账号', '00', '221112@qq.com', '15888888884', '0', '', '$2a$10$VJgxhCwmqjO69RXPtQPbxu8YIJ3rdA89004FVJf3Z9tKJxRGjQ4Nu', '0', '2', '219.134.168.219', '2024-01-30 11:46:58', 'admin', '2022-03-09 16:49:19', 'admin', '2024-01-30 11:46:57', NULL); +INSERT INTO `sys_user` VALUES (7, 101, 'fastbee-web', 'gongkongbang', '00', '', '15888888885', '0', '', '$2a$10$bk5Z0nsul7SlVpvC6SNPWOZqpKcFl2uS9PrQ2lNYTEusrfRuPRR.q', '0', '0', '', NULL, '', '2024-05-08 16:35:49', 'admin', '2025-01-07 22:15:48', NULL); + +-- ---------------------------- +-- Table structure for sys_user_post +-- ---------------------------- +DROP TABLE IF EXISTS `sys_user_post`; +CREATE TABLE `sys_user_post` ( + `user_id` bigint NOT NULL COMMENT '用户ID', + `post_id` bigint NOT NULL COMMENT '岗位ID', + PRIMARY KEY (`user_id`, `post_id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '用户与岗位关联表' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of sys_user_post +-- ---------------------------- + +-- ---------------------------- +-- Table structure for sys_user_relation +-- ---------------------------- +DROP TABLE IF EXISTS `sys_user_relation`; +CREATE TABLE `sys_user_relation` ( + `root_id` bigint NOT NULL COMMENT '根节点用户id', + `depth` int NOT NULL COMMENT '根节点到该节点的深度', + `is_leaf` tinyint(1) NOT NULL COMMENT '该节点是否为叶子节点', + `user_id` bigint NOT NULL COMMENT '该节点的用户id', + PRIMARY KEY (`root_id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb3 COLLATE = utf8mb3_unicode_ci COMMENT = '用户关系与深度存储表' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of sys_user_relation +-- ---------------------------- + +-- ---------------------------- +-- Table structure for sys_user_role +-- ---------------------------- +DROP TABLE IF EXISTS `sys_user_role`; +CREATE TABLE `sys_user_role` ( + `user_id` bigint NOT NULL COMMENT '用户ID', + `role_id` bigint NOT NULL COMMENT '角色ID', + PRIMARY KEY (`user_id`, `role_id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '用户和角色关联表' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of sys_user_role +-- ---------------------------- +INSERT INTO `sys_user_role` VALUES (1, 1); +INSERT INTO `sys_user_role` VALUES (7, 7); + +SET FOREIGN_KEY_CHECKS = 1; diff --git a/xinda-admin/pom.xml b/xinda-admin/pom.xml new file mode 100644 index 0000000..1e2e737 --- /dev/null +++ b/xinda-admin/pom.xml @@ -0,0 +1,172 @@ + + + + xinda + com.xinda + 3.8.5 + + 4.0.0 + jar + gongkongbang + + + web服务入口 + + + + + + + org.springframework.boot + spring-boot-devtools + true + + + + + io.springfox + springfox-boot-starter + + + + + io.swagger + swagger-models + 1.6.2 + + + + + mysql + mysql-connector-java + + + + + com.xinda + xinda-framework + + + + + com.xinda + xinda-quartz + + + + + com.xinda + xinda-generator + + + + com.xinda + xinda-oss + + + + + com.xinda + xinda-open-api + + + + com.xinda + boot-strap + + + + com.xinda + gateway-boot + + + + com.xinda + http-server + + + + com.xinda + sip-server + + + + com.xinda + xinda-http + + + + com.yomahub + liteflow-core + ${liteflow.version} + + + + + com.xinda + xinda-notify-web + + + + com.xinda + xinda-notify-core + + + + + com.xinda + xinda-oauth + + + + com.github.ben-manes.caffeine + caffeine + + + + + + + + + + + com.xinda + xinda-scada + + + + + + + + org.springframework.boot + spring-boot-maven-plugin + 2.1.1.RELEASE + + true + + + + + repackage + + + + + + org.apache.maven.plugins + maven-war-plugin + 3.1.0 + + false + ${project.artifactId} + + + + ${project.artifactId} + + + diff --git a/xinda-admin/src/main/java/com/xinda/XinDaApplication.java b/xinda-admin/src/main/java/com/xinda/XinDaApplication.java new file mode 100644 index 0000000..e0d3b71 --- /dev/null +++ b/xinda-admin/src/main/java/com/xinda/XinDaApplication.java @@ -0,0 +1,22 @@ +package com.xinda; + +import com.dtflys.forest.springboot.annotation.ForestScan; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration; + +/** + * 启动程序 + * + * @author ruoyi + */ +@SpringBootApplication(exclude = { DataSourceAutoConfiguration.class }) +@ForestScan(basePackages = "com.xinda.http.client") +public class XinDaApplication +{ + public static void main(String[] args) + { + // System.setProperty("spring.devtools.restart.enabled", "false"); + SpringApplication.run(XinDaApplication.class, args); + } +} diff --git a/xinda-admin/src/main/java/com/xinda/XinDaServletInitializer.java b/xinda-admin/src/main/java/com/xinda/XinDaServletInitializer.java new file mode 100644 index 0000000..ec2f313 --- /dev/null +++ b/xinda-admin/src/main/java/com/xinda/XinDaServletInitializer.java @@ -0,0 +1,18 @@ +package com.xinda; + +import org.springframework.boot.builder.SpringApplicationBuilder; +import org.springframework.boot.web.servlet.support.SpringBootServletInitializer; + +/** + * web容器中进行部署 + * + * @author ruoyi + */ +public class XinDaServletInitializer extends SpringBootServletInitializer +{ + @Override + protected SpringApplicationBuilder configure(SpringApplicationBuilder application) + { + return application.sources(XinDaApplication.class); + } +} diff --git a/xinda-admin/src/main/java/com/xinda/web/controller/common/CaptchaController.java b/xinda-admin/src/main/java/com/xinda/web/controller/common/CaptchaController.java new file mode 100644 index 0000000..d587e35 --- /dev/null +++ b/xinda-admin/src/main/java/com/xinda/web/controller/common/CaptchaController.java @@ -0,0 +1,99 @@ +package com.xinda.web.controller.common; + +import java.awt.image.BufferedImage; +import java.io.IOException; +import java.util.concurrent.TimeUnit; +import javax.annotation.Resource; +import javax.imageio.ImageIO; +import javax.servlet.http.HttpServletResponse; + +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.util.FastByteArrayOutputStream; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RestController; +import com.google.code.kaptcha.Producer; +import com.xinda.common.config.RuoYiConfig; +import com.xinda.common.constant.CacheConstants; +import com.xinda.common.constant.Constants; +import com.xinda.common.core.domain.AjaxResult; +import com.xinda.common.core.redis.RedisCache; +import com.xinda.common.utils.sign.Base64; +import com.xinda.common.utils.uuid.IdUtils; +import com.xinda.system.service.ISysConfigService; + +/** + * 验证码操作处理 + * + * @author ruoyi + */ +@Api(tags = "验证码操作") +@RestController +public class CaptchaController +{ + @Resource(name = "captchaProducer") + private Producer captchaProducer; + + @Resource(name = "captchaProducerMath") + private Producer captchaProducerMath; + + @Autowired + private RedisCache redisCache; + + @Autowired + private ISysConfigService configService; + /** + * 生成验证码 + */ + @ApiOperation("获取验证码") + @GetMapping("/captchaImage") + public AjaxResult getCode(HttpServletResponse response) throws IOException + { + AjaxResult ajax = AjaxResult.success(); + boolean captchaEnabled = configService.selectCaptchaEnabled(); + ajax.put("captchaEnabled", captchaEnabled); + if (!captchaEnabled) + { + return ajax; + } + + // 保存验证码信息 + String uuid = IdUtils.simpleUUID(); + String verifyKey = CacheConstants.CAPTCHA_CODE_KEY + uuid; + + String capStr = null, code = null; + BufferedImage image = null; + + // 生成验证码 + String captchaType = RuoYiConfig.getCaptchaType(); + if ("math".equals(captchaType)) + { + String capText = captchaProducerMath.createText(); + capStr = capText.substring(0, capText.lastIndexOf("@")); + code = capText.substring(capText.lastIndexOf("@") + 1); + image = captchaProducerMath.createImage(capStr); + } + else if ("char".equals(captchaType)) + { + capStr = code = captchaProducer.createText(); + image = captchaProducer.createImage(capStr); + } + + redisCache.setCacheObject(verifyKey, code, Constants.CAPTCHA_EXPIRATION, TimeUnit.MINUTES); + // 转换流信息写出 + FastByteArrayOutputStream os = new FastByteArrayOutputStream(); + try + { + ImageIO.write(image, "jpg", os); + } + catch (IOException e) + { + return AjaxResult.error(e.getMessage()); + } + + ajax.put("uuid", uuid); + ajax.put("img", Base64.encode(os.toByteArray())); + return ajax; + } +} diff --git a/xinda-admin/src/main/java/com/xinda/web/controller/common/CommonController.java b/xinda-admin/src/main/java/com/xinda/web/controller/common/CommonController.java new file mode 100644 index 0000000..045eb6d --- /dev/null +++ b/xinda-admin/src/main/java/com/xinda/web/controller/common/CommonController.java @@ -0,0 +1,172 @@ +package com.xinda.web.controller.common; + +import java.util.ArrayList; +import java.util.List; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import com.xinda.common.utils.MessageUtils; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.MediaType; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.multipart.MultipartFile; +import com.xinda.common.config.RuoYiConfig; +import com.xinda.common.constant.Constants; +import com.xinda.common.core.domain.AjaxResult; +import com.xinda.common.utils.StringUtils; +import com.xinda.common.utils.file.FileUploadUtils; +import com.xinda.common.utils.file.FileUtils; +import com.xinda.framework.config.ServerConfig; + +/** + * 通用请求处理 + * + * @author ruoyi + */ +@Api(tags = "通用请求处理") +@RestController +@RequestMapping("/common") +public class CommonController +{ + private static final Logger log = LoggerFactory.getLogger(CommonController.class); + + @Autowired + private ServerConfig serverConfig; + + private static final String FILE_DELIMETER = ","; + + /** + * 通用下载请求 + * + * @param fileName 文件名称 + * @param delete 是否删除 + */ + @ApiOperation("文件下载") + @GetMapping("/download") + public void fileDownload(String fileName, Boolean delete, HttpServletResponse response, HttpServletRequest request) + { + try + { + if (!FileUtils.checkAllowDownload(fileName)) + { + throw new Exception(StringUtils.format(MessageUtils.message("download.filename.not.valid"), fileName)); + } + String realFileName = System.currentTimeMillis() + fileName.substring(fileName.indexOf("_") + 1); + String filePath = RuoYiConfig.getDownloadPath() + fileName; + + response.setContentType(MediaType.APPLICATION_OCTET_STREAM_VALUE); + FileUtils.setAttachmentResponseHeader(response, realFileName); + FileUtils.writeBytes(filePath, response.getOutputStream()); + if (delete) + { + FileUtils.deleteFile(filePath); + } + } + catch (Exception e) + { + log.error("下载文件失败", e); + } + } + + /** + * 通用上传请求(单个) + */ + @ApiOperation("单个文件上传") + @PostMapping("/upload") + public AjaxResult uploadFile(MultipartFile file) throws Exception + { + try + { + // 上传文件路径 + String filePath = RuoYiConfig.getUploadPath(); + // 上传并返回新文件名称 + String fileName = FileUploadUtils.upload(filePath, file); + String url = serverConfig.getUrl() + fileName; + AjaxResult ajax = AjaxResult.success(); + ajax.put("url", url); + ajax.put("fileName", fileName); + ajax.put("newFileName", FileUtils.getName(fileName)); + ajax.put("originalFilename", file.getOriginalFilename()); + return ajax; + } + catch (Exception e) + { + return AjaxResult.error(e.getMessage()); + } + } + + /** + * 通用上传请求(多个) + */ + @ApiOperation("多个文件上传") + @PostMapping("/uploads") + public AjaxResult uploadFiles(List files) throws Exception + { + try + { + // 上传文件路径 + String filePath = RuoYiConfig.getUploadPath(); + List urls = new ArrayList(); + List fileNames = new ArrayList(); + List newFileNames = new ArrayList(); + List originalFilenames = new ArrayList(); + for (MultipartFile file : files) + { + // 上传并返回新文件名称 + String fileName = FileUploadUtils.upload(filePath, file); + String url = serverConfig.getUrl() + fileName; + urls.add(url); + fileNames.add(fileName); + newFileNames.add(FileUtils.getName(fileName)); + originalFilenames.add(file.getOriginalFilename()); + } + AjaxResult ajax = AjaxResult.success(); + ajax.put("urls", StringUtils.join(urls, FILE_DELIMETER)); + ajax.put("fileNames", StringUtils.join(fileNames, FILE_DELIMETER)); + ajax.put("newFileNames", StringUtils.join(newFileNames, FILE_DELIMETER)); + ajax.put("originalFilenames", StringUtils.join(originalFilenames, FILE_DELIMETER)); + return ajax; + } + catch (Exception e) + { + return AjaxResult.error(e.getMessage()); + } + } + + /** + * 本地资源通用下载 + */ + @GetMapping("/download/resource") + @ApiOperation("本地资源通用下载") + public void resourceDownload(String resource, HttpServletRequest request, HttpServletResponse response) + throws Exception + { + try + { + if (!FileUtils.checkAllowDownload(resource)) + { + throw new Exception(StringUtils.format(MessageUtils.message("download.resource.not.valid"), resource)); + } + // 本地资源路径 + String localPath = RuoYiConfig.getProfile(); + // 数据库资源地址 + String downloadPath = localPath + StringUtils.substringAfter(resource, Constants.RESOURCE_PREFIX); + // 下载名称 + String downloadName = StringUtils.substringAfterLast(downloadPath, "/"); + response.setContentType(MediaType.APPLICATION_OCTET_STREAM_VALUE); + FileUtils.setAttachmentResponseHeader(response, downloadName); + FileUtils.writeBytes(downloadPath, response.getOutputStream()); + } + catch (Exception e) + { + log.error("下载文件失败", e); + } + } +} diff --git a/xinda-admin/src/main/java/com/xinda/web/controller/monitor/CacheController.java b/xinda-admin/src/main/java/com/xinda/web/controller/monitor/CacheController.java new file mode 100644 index 0000000..070bcfe --- /dev/null +++ b/xinda-admin/src/main/java/com/xinda/web/controller/monitor/CacheController.java @@ -0,0 +1,131 @@ +package com.xinda.web.controller.monitor; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Properties; +import java.util.Set; + +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.redis.core.RedisCallback; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import com.xinda.common.constant.CacheConstants; +import com.xinda.common.core.domain.AjaxResult; +import com.xinda.common.utils.StringUtils; +import com.xinda.system.domain.SysCache; + +/** + * 缓存监控 + * + * @author ruoyi + */ +@Api(tags = "缓存监控") +@RestController +@RequestMapping("/monitor/cache") +public class CacheController +{ + @Autowired + private RedisTemplate redisTemplate; + + private final static List caches = new ArrayList(); + { + caches.add(new SysCache(CacheConstants.LOGIN_TOKEN_KEY, "用户信息")); + caches.add(new SysCache(CacheConstants.SYS_CONFIG_KEY, "配置信息")); + caches.add(new SysCache(CacheConstants.SYS_DICT_KEY, "数据字典")); + caches.add(new SysCache(CacheConstants.CAPTCHA_CODE_KEY, "验证码")); + caches.add(new SysCache(CacheConstants.REPEAT_SUBMIT_KEY, "防重提交")); + caches.add(new SysCache(CacheConstants.RATE_LIMIT_KEY, "限流处理")); + caches.add(new SysCache(CacheConstants.PWD_ERR_CNT_KEY, "密码错误次数")); + } + + @ApiOperation("获取缓存信息") + @PreAuthorize("@ss.hasPermi('monitor:cache:list')") + @GetMapping() + public AjaxResult getInfo() throws Exception + { + Properties info = (Properties) redisTemplate.execute((RedisCallback) connection -> connection.info()); + Properties commandStats = (Properties) redisTemplate.execute((RedisCallback) connection -> connection.info("commandstats")); + Object dbSize = redisTemplate.execute((RedisCallback) connection -> connection.dbSize()); + + Map result = new HashMap<>(3); + result.put("info", info); + result.put("dbSize", dbSize); + + List> pieList = new ArrayList<>(); + commandStats.stringPropertyNames().forEach(key -> { + Map data = new HashMap<>(2); + String property = commandStats.getProperty(key); + data.put("name", StringUtils.removeStart(key, "cmdstat_")); + data.put("value", StringUtils.substringBetween(property, "calls=", ",usec")); + pieList.add(data); + }); + result.put("commandStats", pieList); + return AjaxResult.success(result); + } + + @ApiOperation("缓存列表") + @PreAuthorize("@ss.hasPermi('monitor:cache:list')") + @GetMapping("/getNames") + public AjaxResult cache() + { + return AjaxResult.success(caches); + } + + @ApiOperation("键名列表") + @PreAuthorize("@ss.hasPermi('monitor:cache:list')") + @GetMapping("/getKeys/{cacheName}") + public AjaxResult getCacheKeys(@PathVariable String cacheName) + { + Set cacheKeys = redisTemplate.keys(cacheName + "*"); + return AjaxResult.success(cacheKeys); + } + + @ApiOperation("缓存内容") + @PreAuthorize("@ss.hasPermi('monitor:cache:list')") + @GetMapping("/getValue/{cacheName}/{cacheKey}") + public AjaxResult getCacheValue(@PathVariable String cacheName, @PathVariable String cacheKey) + { + String cacheValue = redisTemplate.opsForValue().get(cacheKey); + SysCache sysCache = new SysCache(cacheName, cacheKey, cacheValue); + return AjaxResult.success(sysCache); + } + + @ApiOperation("清理缓存名称") + @PreAuthorize("@ss.hasPermi('monitor:cache:remove')") + @DeleteMapping("/clearCacheName/{cacheName}") + public AjaxResult clearCacheName(@PathVariable String cacheName) + { + Collection cacheKeys = redisTemplate.keys(cacheName + "*"); + redisTemplate.delete(cacheKeys); + return AjaxResult.success(); + } + + @ApiOperation("清理缓存键名") + @PreAuthorize("@ss.hasPermi('monitor:cache:remove')") + @DeleteMapping("/clearCacheKey/{cacheKey}") + public AjaxResult clearCacheKey(@PathVariable String cacheKey) + { + redisTemplate.delete(cacheKey); + return AjaxResult.success(); + } + + @ApiOperation("清理所有缓存内容") + @PreAuthorize("@ss.hasPermi('monitor:cache:remove')") + @DeleteMapping("/clearCacheAll") + public AjaxResult clearCacheAll() + { + Collection cacheKeys = redisTemplate.keys("*"); + redisTemplate.delete(cacheKeys); + return AjaxResult.success(); + } +} diff --git a/xinda-admin/src/main/java/com/xinda/web/controller/monitor/ServerController.java b/xinda-admin/src/main/java/com/xinda/web/controller/monitor/ServerController.java new file mode 100644 index 0000000..8e1b87a --- /dev/null +++ b/xinda-admin/src/main/java/com/xinda/web/controller/monitor/ServerController.java @@ -0,0 +1,31 @@ +package com.xinda.web.controller.monitor; + +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import com.xinda.common.core.domain.AjaxResult; +import com.xinda.framework.web.domain.Server; + +/** + * 服务器监控 + * + * @author ruoyi + */ +@Api(tags = "服务器监控") +@RestController +@RequestMapping("/monitor/server") +public class ServerController +{ + @ApiOperation("获取服务器信息") + @PreAuthorize("@ss.hasPermi('monitor:server:list')") + @GetMapping() + public AjaxResult getInfo() throws Exception + { + Server server = new Server(); + server.copyTo(); + return AjaxResult.success(server); + } +} diff --git a/xinda-admin/src/main/java/com/xinda/web/controller/monitor/SysLogininforController.java b/xinda-admin/src/main/java/com/xinda/web/controller/monitor/SysLogininforController.java new file mode 100644 index 0000000..0e39b7c --- /dev/null +++ b/xinda-admin/src/main/java/com/xinda/web/controller/monitor/SysLogininforController.java @@ -0,0 +1,91 @@ +package com.xinda.web.controller.monitor; + +import java.util.List; +import javax.servlet.http.HttpServletResponse; + +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import com.xinda.common.annotation.Log; +import com.xinda.common.core.controller.BaseController; +import com.xinda.common.core.domain.AjaxResult; +import com.xinda.common.core.page.TableDataInfo; +import com.xinda.common.enums.BusinessType; +import com.xinda.common.utils.poi.ExcelUtil; +import com.xinda.framework.web.service.SysPasswordService; +import com.xinda.system.domain.SysLogininfor; +import com.xinda.system.service.ISysLogininforService; + +/** + * 系统访问记录 + * + * @author ruoyi + */ +@Api(tags = "日志管理:登录日志") +@RestController +@RequestMapping("/monitor/logininfor") +public class SysLogininforController extends BaseController +{ + @Autowired + private ISysLogininforService logininforService; + + @Autowired + private SysPasswordService passwordService; + + @ApiOperation("获取列表登录信息") + @PreAuthorize("@ss.hasPermi('monitor:logininfor:list')") + @GetMapping("/list") + public TableDataInfo list(SysLogininfor logininfor) + { + startPage(); + List list = logininforService.selectLogininforList(logininfor); + return getDataTable(list); + } + + @ApiOperation("导出登录日志列表") + @Log(title = "登录日志", businessType = BusinessType.EXPORT) + @PreAuthorize("@ss.hasPermi('monitor:logininfor:export')") + @PostMapping("/export") + public void export(HttpServletResponse response, SysLogininfor logininfor) + { + List list = logininforService.selectLogininforList(logininfor); + ExcelUtil util = new ExcelUtil(SysLogininfor.class); + util.exportExcel(response, list, "登录日志"); + } + + @ApiOperation("批量删除登录日志") + @PreAuthorize("@ss.hasPermi('monitor:logininfor:remove')") + @Log(title = "登录日志", businessType = BusinessType.DELETE) + @DeleteMapping("/{infoIds}") + public AjaxResult remove(@PathVariable Long[] infoIds) + { + return toAjax(logininforService.deleteLogininforByIds(infoIds)); + } + + @ApiOperation("清空登录日志信息") + @PreAuthorize("@ss.hasPermi('monitor:logininfor:remove')") + @Log(title = "登录日志", businessType = BusinessType.CLEAN) + @DeleteMapping("/clean") + public AjaxResult clean() + { + logininforService.cleanLogininfor(); + return success(); + } + + @ApiOperation("账户解锁") + @PreAuthorize("@ss.hasPermi('monitor:logininfor:unlock')") + @Log(title = "账户解锁", businessType = BusinessType.OTHER) + @GetMapping("/unlock/{userName}") + public AjaxResult unlock(@PathVariable("userName") String userName) + { + passwordService.clearLoginRecordCache(userName); + return success(); + } +} diff --git a/xinda-admin/src/main/java/com/xinda/web/controller/monitor/SysOperlogController.java b/xinda-admin/src/main/java/com/xinda/web/controller/monitor/SysOperlogController.java new file mode 100644 index 0000000..e6edfbc --- /dev/null +++ b/xinda-admin/src/main/java/com/xinda/web/controller/monitor/SysOperlogController.java @@ -0,0 +1,77 @@ +package com.xinda.web.controller.monitor; + +import java.util.List; +import javax.servlet.http.HttpServletResponse; + +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import com.xinda.common.annotation.Log; +import com.xinda.common.core.controller.BaseController; +import com.xinda.common.core.domain.AjaxResult; +import com.xinda.common.core.page.TableDataInfo; +import com.xinda.common.enums.BusinessType; +import com.xinda.common.utils.poi.ExcelUtil; +import com.xinda.system.domain.SysOperLog; +import com.xinda.system.service.ISysOperLogService; + +/** + * 操作日志记录 + * + * @author ruoyi + */ +@Api(tags = "日志管理:操作日志") +@RestController +@RequestMapping("/monitor/operlog") +public class SysOperlogController extends BaseController +{ + @Autowired + private ISysOperLogService operLogService; + + @ApiOperation("获取操作日志列表") + @PreAuthorize("@ss.hasPermi('monitor:operlog:list')") + @GetMapping("/list") + public TableDataInfo list(SysOperLog operLog) + { + startPage(); + List list = operLogService.selectOperLogList(operLog); + return getDataTable(list); + } + + @ApiOperation("导出操作日志") + @Log(title = "操作日志", businessType = BusinessType.EXPORT) + @PreAuthorize("@ss.hasPermi('monitor:operlog:export')") + @PostMapping("/export") + public void export(HttpServletResponse response, SysOperLog operLog) + { + List list = operLogService.selectOperLogList(operLog); + ExcelUtil util = new ExcelUtil(SysOperLog.class); + util.exportExcel(response, list, "操作日志"); + } + + @ApiOperation("批量删除操作日志") + @Log(title = "操作日志", businessType = BusinessType.DELETE) + @PreAuthorize("@ss.hasPermi('monitor:operlog:remove')") + @DeleteMapping("/{operIds}") + public AjaxResult remove(@PathVariable Long[] operIds) + { + return toAjax(operLogService.deleteOperLogByIds(operIds)); + } + + @ApiOperation("清空操作日志") + @Log(title = "操作日志", businessType = BusinessType.CLEAN) + @PreAuthorize("@ss.hasPermi('monitor:operlog:remove')") + @DeleteMapping("/clean") + public AjaxResult clean() + { + operLogService.cleanOperLog(); + return success(); + } +} diff --git a/xinda-admin/src/main/java/com/xinda/web/controller/monitor/SysUserOnlineController.java b/xinda-admin/src/main/java/com/xinda/web/controller/monitor/SysUserOnlineController.java new file mode 100644 index 0000000..a624f55 --- /dev/null +++ b/xinda-admin/src/main/java/com/xinda/web/controller/monitor/SysUserOnlineController.java @@ -0,0 +1,98 @@ +package com.xinda.web.controller.monitor; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; +import java.util.List; + +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import com.xinda.common.annotation.Log; +import com.xinda.common.constant.CacheConstants; +import com.xinda.common.core.controller.BaseController; +import com.xinda.common.core.domain.AjaxResult; +import com.xinda.common.core.domain.model.LoginUser; +import com.xinda.common.core.page.TableDataInfo; +import com.xinda.common.core.redis.RedisCache; +import com.xinda.common.enums.BusinessType; +import com.xinda.common.utils.StringUtils; +import com.xinda.system.domain.SysUserOnline; +import com.xinda.system.service.ISysUserOnlineService; + +/** + * 在线用户监控 + * + * @author ruoyi + */ +@Api(tags = "在线用户监控") +@RestController +@RequestMapping("/monitor/online") +public class SysUserOnlineController extends BaseController +{ + @Autowired + private ISysUserOnlineService userOnlineService; + + @Autowired + private RedisCache redisCache; + + @ApiOperation("获取在线用户列表") + @PreAuthorize("@ss.hasPermi('monitor:online:list')") + @GetMapping("/list") + public TableDataInfo list(String ipaddr, String userName) + { + Collection keys = redisCache.keys(CacheConstants.LOGIN_TOKEN_KEY + "*"); + List userOnlineList = new ArrayList(); + for (String key : keys) + { + LoginUser user = redisCache.getCacheObject(key); + if (StringUtils.isNotEmpty(ipaddr) && StringUtils.isNotEmpty(userName)) + { + if (StringUtils.equals(ipaddr, user.getIpaddr()) && StringUtils.equals(userName, user.getUsername())) + { + userOnlineList.add(userOnlineService.selectOnlineByInfo(ipaddr, userName, user)); + } + } + else if (StringUtils.isNotEmpty(ipaddr)) + { + if (StringUtils.equals(ipaddr, user.getIpaddr())) + { + userOnlineList.add(userOnlineService.selectOnlineByIpaddr(ipaddr, user)); + } + } + else if (StringUtils.isNotEmpty(userName) && StringUtils.isNotNull(user.getUser())) + { + if (StringUtils.equals(userName, user.getUsername())) + { + userOnlineList.add(userOnlineService.selectOnlineByUserName(userName, user)); + } + } + else + { + userOnlineList.add(userOnlineService.loginUserToUserOnline(user)); + } + } + Collections.reverse(userOnlineList); + userOnlineList.removeAll(Collections.singleton(null)); + return getDataTable(userOnlineList); + } + + /** + * 强退用户 + */ + @ApiOperation("强制退出在线用户") + @PreAuthorize("@ss.hasPermi('monitor:online:forceLogout')") + @Log(title = "在线用户", businessType = BusinessType.FORCE) + @DeleteMapping("/{tokenId}") + public AjaxResult forceLogout(@PathVariable String tokenId) + { + redisCache.deleteObject(CacheConstants.LOGIN_TOKEN_KEY + tokenId); + return success(); + } +} diff --git a/xinda-admin/src/main/java/com/xinda/web/controller/system/SysClientController.java b/xinda-admin/src/main/java/com/xinda/web/controller/system/SysClientController.java new file mode 100644 index 0000000..8793f0f --- /dev/null +++ b/xinda-admin/src/main/java/com/xinda/web/controller/system/SysClientController.java @@ -0,0 +1,109 @@ +package com.xinda.web.controller.system; + +import java.util.List; +import javax.servlet.http.HttpServletResponse; + +import com.xinda.common.core.domain.entity.SysUser; +import com.xinda.framework.web.service.TokenService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import com.xinda.common.core.controller.BaseController; +import com.xinda.common.core.domain.AjaxResult; +import com.xinda.system.domain.SysClient; +import com.xinda.system.service.ISysClientService; +import com.xinda.common.utils.poi.ExcelUtil; +import com.xinda.common.core.page.TableDataInfo; + +import static com.xinda.common.utils.SecurityUtils.getLoginUser; + +/** + * 系统授权Controller + * + * @author zhuangpeng.li + * @date 2024-07-26 + */ +@RestController +@RequestMapping("/system/sysclient") +@Api(tags = "系统授权") +public class SysClientController extends BaseController { + @Autowired + private ISysClientService sysClientService; + @Autowired + private TokenService tokenService; + + /** + * 查询系统授权列表 + */ + @PreAuthorize("@ss.hasPermi('system:sysclient:list')") + @GetMapping("/list") + @ApiOperation("查询系统授权列表") + public TableDataInfo list(SysClient sysClient) { + startPage(); + List list = sysClientService.selectSysClientList(sysClient); + return getDataTable(list); + } + + /** + * 导出系统授权列表 + */ + @ApiOperation("导出系统授权列表") + @PreAuthorize("@ss.hasPermi('system:sysclient:export')") + @PostMapping("/export") + public void export(HttpServletResponse response, SysClient sysClient) { + List list = sysClientService.selectSysClientList(sysClient); + ExcelUtil util = new ExcelUtil(SysClient.class); + util.exportExcel(response, list, "系统授权数据"); + } + + /** + * 获取系统授权详细信息 + */ + @PreAuthorize("@ss.hasPermi('system:sysclient:query')") + @GetMapping(value = "/{id}") + @ApiOperation("获取系统授权详细信息") + public AjaxResult getInfo(@PathVariable("id") Long id) { + return success(sysClientService.selectSysClientById(id)); + } + + /** + * 新增系统授权 + */ + @PreAuthorize("@ss.hasPermi('system:sysclient:add')") + @PostMapping + @ApiOperation("新增系统授权") + public AjaxResult add(@RequestBody SysClient sysClient) { + SysUser user = getLoginUser().getUser(); + return toAjax(tokenService.addToken(user, sysClient)); + } + + /** + * 修改系统授权 + */ + @PreAuthorize("@ss.hasPermi('system:sysclient:edit')") + @PutMapping + @ApiOperation("修改系统授权") + public AjaxResult edit(@RequestBody SysClient sysClient) { + SysUser user = getLoginUser().getUser(); + return toAjax(tokenService.updateToken(user, sysClient)); + } + + /** + * 删除系统授权 + */ + @PreAuthorize("@ss.hasPermi('system:sysclient:remove')") + @DeleteMapping("/{ids}") + @ApiOperation("删除系统授权") + public AjaxResult remove(@PathVariable Long[] ids) { + return toAjax(sysClientService.deleteSysClientByIds(ids)); + } +} diff --git a/xinda-admin/src/main/java/com/xinda/web/controller/system/SysConfigController.java b/xinda-admin/src/main/java/com/xinda/web/controller/system/SysConfigController.java new file mode 100644 index 0000000..5e40cc4 --- /dev/null +++ b/xinda-admin/src/main/java/com/xinda/web/controller/system/SysConfigController.java @@ -0,0 +1,146 @@ +package com.xinda.web.controller.system; + +import java.util.List; +import javax.servlet.http.HttpServletResponse; + +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import com.xinda.common.annotation.Log; +import com.xinda.common.constant.UserConstants; +import com.xinda.common.core.controller.BaseController; +import com.xinda.common.core.domain.AjaxResult; +import com.xinda.common.core.page.TableDataInfo; +import com.xinda.common.enums.BusinessType; +import com.xinda.common.utils.poi.ExcelUtil; +import com.xinda.system.domain.SysConfig; +import com.xinda.system.service.ISysConfigService; + +/** + * 参数配置 信息操作处理 + * + * @author ruoyi + */ +@Api(tags = "参数设置") +@RestController +@RequestMapping("/system/config") +public class SysConfigController extends BaseController +{ + @Autowired + private ISysConfigService configService; + + /** + * 获取参数配置列表 + */ + @ApiOperation("获取参数配置列表") + @PreAuthorize("@ss.hasPermi('system:config:list')") + @GetMapping("/list") + public TableDataInfo list(SysConfig config) + { + startPage(); + List list = configService.selectConfigList(config); + return getDataTable(list); + } + + @ApiOperation("导出参数配置列表") + @Log(title = "参数管理", businessType = BusinessType.EXPORT) + @PreAuthorize("@ss.hasPermi('system:config:export')") + @PostMapping("/export") + public void export(HttpServletResponse response, SysConfig config) + { + List list = configService.selectConfigList(config); + ExcelUtil util = new ExcelUtil(SysConfig.class); + util.exportExcel(response, list, "参数数据"); + } + + /** + * 根据参数编号获取详细信息 + */ + @ApiOperation("根据参数编号获取详细信息") + @PreAuthorize("@ss.hasPermi('system:config:query')") + @GetMapping(value = "/{configId}") + public AjaxResult getInfo(@PathVariable Long configId) + { + return success(configService.selectConfigById(configId)); + } + + /** + * 根据参数键名查询参数值 + */ + @ApiOperation("根据参数键名查询参数值") + @GetMapping(value = "/configKey/{configKey}") + public AjaxResult getConfigKey(@PathVariable String configKey) + { + return success(configService.selectConfigByKey(configKey)); + } + + /** + * 新增参数配置 + */ + @ApiOperation("新增参数配置") + @PreAuthorize("@ss.hasPermi('system:config:add')") + @Log(title = "参数管理", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@Validated @RequestBody SysConfig config) + { + if (UserConstants.NOT_UNIQUE.equals(configService.checkConfigKeyUnique(config))) + { + return error("新增参数'" + config.getConfigName() + "'失败,参数键名已存在"); + } + config.setCreateBy(getUsername()); + return toAjax(configService.insertConfig(config)); + } + + /** + * 修改参数配置 + */ + @ApiOperation("修改参数配置") + @PreAuthorize("@ss.hasPermi('system:config:edit')") + @Log(title = "参数管理", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@Validated @RequestBody SysConfig config) + { + if (UserConstants.NOT_UNIQUE.equals(configService.checkConfigKeyUnique(config))) + { + return error("修改参数'" + config.getConfigName() + "'失败,参数键名已存在"); + } + config.setUpdateBy(getUsername()); + return toAjax(configService.updateConfig(config)); + } + + /** + * 删除参数配置 + */ + @ApiOperation("批量删除参数配置") + @PreAuthorize("@ss.hasPermi('system:config:remove')") + @Log(title = "参数管理", businessType = BusinessType.DELETE) + @DeleteMapping("/{configIds}") + public AjaxResult remove(@PathVariable Long[] configIds) + { + configService.deleteConfigByIds(configIds); + return success(); + } + + /** + * 刷新参数缓存 + */ + @ApiOperation("刷新参数缓存") + @PreAuthorize("@ss.hasPermi('system:config:refresh')") + @Log(title = "参数管理", businessType = BusinessType.CLEAN) + @DeleteMapping("/refreshCache") + public AjaxResult refreshCache() + { + configService.resetConfigCache(); + return success(); + } +} diff --git a/xinda-admin/src/main/java/com/xinda/web/controller/system/SysDeptController.java b/xinda-admin/src/main/java/com/xinda/web/controller/system/SysDeptController.java new file mode 100644 index 0000000..557d455 --- /dev/null +++ b/xinda-admin/src/main/java/com/xinda/web/controller/system/SysDeptController.java @@ -0,0 +1,292 @@ +package com.xinda.web.controller.system; + +import cn.hutool.core.util.ObjectUtil; +import com.xinda.common.annotation.Log; +import com.xinda.common.constant.UserConstants; +import com.xinda.common.core.controller.BaseController; +import com.xinda.common.core.domain.AjaxResult; +import com.xinda.common.core.domain.entity.*; +import com.xinda.common.enums.BusinessType; +import com.xinda.common.exception.ServiceException; +import com.xinda.common.utils.StringUtils; +import com.xinda.iot.mapper.DeviceMapper; +import com.xinda.iot.model.RegisterUserInput; +import com.xinda.iot.model.RegisterUserOutput; +import com.xinda.iot.service.IToolService; +import com.xinda.system.domain.SysRoleDept; +import com.xinda.system.domain.SysRoleMenu; +import com.xinda.system.domain.SysUserRole; +import com.xinda.system.domain.vo.SysDeptTypeVO; +import com.xinda.system.mapper.SysRoleDeptMapper; +import com.xinda.system.mapper.SysRoleMenuMapper; +import com.xinda.system.mapper.SysUserRoleMapper; +import com.xinda.common.utils.MessageUtils; + +import com.xinda.system.service.*; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang3.ArrayUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.stream.Collectors; + +import javax.servlet.http.HttpServletRequest; + +import static com.xinda.common.constant.Constants.LANGUAGE; + +/** + * 机构信息 + * + * @author ruoyi + */ +@Api(tags = "机构管理") +@RestController +@RequestMapping("/system/dept") +public class SysDeptController extends BaseController +{ + @Autowired + private ISysDeptService deptService; + + @Resource + private IToolService toolService; + + @Resource + private ISysUserService sysUserService; + + @Resource + private SysRoleDeptMapper sysRoleDeptMapper; + + @Resource + private ISysDictDataService sysDictDataService; + + @Resource + private ISysRoleService sysRoleService; + + @Resource + private ISysMenuService sysMenuService; + + @Resource + private DeviceMapper deviceMapper; + + /** + * 获取机构列表 + */ + @ApiOperation("获取机构列表") + @PreAuthorize("@ss.hasPermi('system:dept:list')") + @GetMapping("/list") + public AjaxResult list(SysDept dept) + { + List depts = deptService.selectDeptList(dept); + return success(depts); + } + + /** + * 查询机构列表(排除节点) + */ + @ApiOperation("查询机构列表(排除节点)") + @PreAuthorize("@ss.hasPermi('system:dept:list')") + @GetMapping("/list/exclude/{deptId}") + public AjaxResult excludeChild(@PathVariable(value = "deptId", required = false) Long deptId) + { + List depts = deptService.selectDeptList(new SysDept()); + depts.removeIf(d -> d.getDeptId().intValue() == deptId || ArrayUtils.contains(StringUtils.split(d.getAncestors(), ","), deptId + "")); + return success(depts); + } + + /** + * 根据机构编号获取详细信息 + */ + @ApiOperation("根据机构编号获取详细信息") + @PreAuthorize("@ss.hasPermi('system:dept:query')") + @Transactional(rollbackFor = Exception.class) + @GetMapping(value = "/{deptId}") + public AjaxResult getInfo(@PathVariable Long deptId) + { + deptService.checkDeptDataScope(deptId); + SysDept sysDept = deptService.selectDeptById(deptId); + if (null != sysDept && null != sysDept.getDeptUserId()) { + SysUser sysUser = sysUserService.selectUserById(sysDept.getDeptUserId()); + sysDept.setUserName(sysUser.getUserName()); + sysDept.setPhone(sysUser.getPhonenumber()); + } + return success(sysDept); + } + + /** + * 新增机构 + */ + @ApiOperation("新增机构") + @PreAuthorize("@ss.hasPermi('system:dept:add')") + @Log(title = "机构管理", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(HttpServletRequest request, @Validated @RequestBody SysDept dept) + { + if (UserConstants.NOT_UNIQUE.equals(deptService.checkDeptNameUnique(dept))) + { + return error(StringUtils.format(MessageUtils.message("dept.add.failed.name.exists"), dept.getDeptName())); + } + dept.setCreateBy(getUsername()); + // 校验系统账号信息 + if (StringUtils.isNotEmpty(dept.getUserName())) { + SysUser sysUser = sysUserService.selectUserByUserName(dept.getUserName()); + if (ObjectUtil.isNotNull(sysUser)) { + throw new ServiceException(MessageUtils.message("user.username.exists")); + } + if (!dept.getPassword().equals(dept.getConfirmPassword())) { + throw new ServiceException(MessageUtils.message("user.password.differ")); + } + } + int result = deptService.insertDept(dept); + // 新增机构关联系统账号 + if (result > 0) { + // 添加管理员角色,给所有权限 + // 查询所有权限 +// List sysMenuList = sysMenuService.selectMenuList(new SysMenu(), 1L, request.getHeader(LANGUAGE)); + SysDept sysDept = deptService.selectDeptById(dept.getParentId()); + List sysMenuList = sysMenuService.selectMenuList(new SysMenu(), sysDept.getDeptUserId()); + Long[] menuIdList = sysMenuList.stream().map(SysMenu::getMenuId).toArray(Long[]::new); + SysRole sysRole = new SysRole(); + sysRole.setRoleName("管理员"); + sysRole.setRoleKey("manager"); + sysRole.setRoleSort(1); + sysRole.setStatus("0"); + sysRole.setDeptId(dept.getDeptId()); + sysRole.setMenuIds(menuIdList); + sysRoleService.insertRole(sysRole); + + // 注册机构管理员用户 + RegisterUserInput registerUserInput = new RegisterUserInput(); + registerUserInput.setUsername(dept.getUserName()); + registerUserInput.setPassword(dept.getPassword()); + registerUserInput.setPhonenumber(dept.getPhone()); + registerUserInput.setDeptId(dept.getDeptId()); + registerUserInput.setRoleIds(new Long[]{sysRole.getRoleId()}); + RegisterUserOutput registerUserOutput = toolService.registerNoCaptcha(registerUserInput); + if (StringUtils.isNotEmpty(registerUserOutput.getMsg())) { + deptService.deleteDeptById(dept.getDeptId()); + sysRoleService.deleteRoleById(sysRole.getRoleId()); + return AjaxResult.error(registerUserOutput.getMsg()); + } + // 更新机构管理员角色绑定信息 + deptService.updateDeptUserId(dept.getDeptId(), registerUserOutput.getSysUserId()); + } + return toAjax(result); + } + + /** + * 修改机构 + */ + @ApiOperation("修改机构") + @PreAuthorize("@ss.hasPermi('system:dept:edit')") + @Log(title = "机构管理", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@Validated @RequestBody SysDept dept) + { + Long deptId = dept.getDeptId(); + deptService.checkDeptDataScope(deptId); + if (UserConstants.NOT_UNIQUE.equals(deptService.checkDeptNameUnique(dept))) + { + return error(StringUtils.format(MessageUtils.message("dept.update.failed.name.exists"), dept.getDeptName())); + } + else if (dept.getParentId().equals(deptId)) + { + return error(StringUtils.format(MessageUtils.message("dept.update.failed.parent.not.valid"), dept.getDeptName())); + } + else if (StringUtils.equals(UserConstants.DEPT_DISABLE, dept.getStatus()) && deptService.selectNormalChildrenDeptById(deptId) > 0) + { + return error(MessageUtils.message("dept.update.failed.child.not.valid")); + } + dept.setUpdateBy(getUsername()); + return toAjax(deptService.updateDept(dept)); + } + + /** + * 删除机构 + */ + @ApiOperation("根据机构编号删除机构") + @PreAuthorize("@ss.hasPermi('system:dept:remove')") + @Log(title = "机构管理", businessType = BusinessType.DELETE) + @DeleteMapping("/{deptId}") + public AjaxResult remove(@PathVariable Long deptId) + { + if (deptService.hasChildByDeptId(deptId)) + { + return warn(MessageUtils.message("dept.delete.failed.child.exists")); + } +// if (deptService.checkDeptExistUser(deptId)) +// { +// return warn(MessageUtils.message("dept.delete.failed.user.exists")); +// } + deptService.checkDeptDataScope(deptId); + // 删除机构绑定角色和用户 + List roleIdList = sysRoleDeptMapper.selectByDeptId(deptId); + if (!org.springframework.util.CollectionUtils.isEmpty(roleIdList)) { + sysRoleService.deleteRoleByIds(roleIdList.toArray(new Long[roleIdList.size()])); + sysUserService.deleteUserByDeptID(deptId); + } + return toAjax(deptService.deleteDeptById(deptId)); + } + + /** + * 获取机构类型 + * @param deptType 父级类型 + * @return com.xinda.common.core.domain.AjaxResult + */ + @GetMapping("/getDeptType") + public AjaxResult getDeptType(HttpServletRequest request, Integer deptType, Boolean showOwner) { + SysDictData sysDictData = new SysDictData(); + sysDictData.setDictType("department_type"); + List sysDictDataList = sysDictDataService.selectDictDataList(sysDictData); + if (CollectionUtils.isEmpty(sysDictDataList)) { + return success(); + } + List result = new ArrayList<>(); + for (SysDictData dictData : sysDictDataList) { + SysDeptTypeVO sysDeptTypeVO = new SysDeptTypeVO(); + sysDeptTypeVO.setDeptType(Integer.valueOf(dictData.getDictValue())); + sysDeptTypeVO.setDeptTypeName(dictData.getDictLabel()); + sysDeptTypeVO.setAncestors(dictData.getRemark()); + result.add(sysDeptTypeVO); + } + if (null == deptType) { + return success(result); + } + SysDeptTypeVO sysDeptTypeVO = result.stream().filter(d -> deptType.equals(d.getDeptType())).findFirst().orElse(null); + if (ObjectUtil.isNull(sysDeptTypeVO)) { + return success(new ArrayList<>()); + } + String ancestors = sysDeptTypeVO.getAncestors(); + result = result.stream().filter(d -> ancestors.contains(d.getDeptType().toString())).collect(Collectors.toList()); + if (showOwner) { + List newResult = new ArrayList<>(); + newResult.add(sysDeptTypeVO); + newResult.addAll(result); + return success(newResult); + } + return success(result); + } + + /** + * 获取机构角色 + * @param deptId 机构id + * @return com.xinda.common.core.domain.AjaxResult + */ + @GetMapping("/getRole") + public AjaxResult getRole(Long deptId) { + AjaxResult success = AjaxResult.success(); + List sysRoleList = deptService.getRole(deptId); + success.put("roles", sysRoleList); + success.put("roleIds", sysRoleList.stream().map(SysRole::getRoleId).collect(Collectors.toList())); + return success; + } + +} diff --git a/xinda-admin/src/main/java/com/xinda/web/controller/system/SysDictDataController.java b/xinda-admin/src/main/java/com/xinda/web/controller/system/SysDictDataController.java new file mode 100644 index 0000000..edc4b01 --- /dev/null +++ b/xinda-admin/src/main/java/com/xinda/web/controller/system/SysDictDataController.java @@ -0,0 +1,122 @@ +package com.xinda.web.controller.system; + +import java.util.ArrayList; +import java.util.List; +import javax.servlet.http.HttpServletResponse; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import com.xinda.common.annotation.Log; +import com.xinda.common.core.controller.BaseController; +import com.xinda.common.core.domain.AjaxResult; +import com.xinda.common.core.domain.entity.SysDictData; +import com.xinda.common.core.page.TableDataInfo; +import com.xinda.common.enums.BusinessType; +import com.xinda.common.utils.StringUtils; +import com.xinda.common.utils.poi.ExcelUtil; +import com.xinda.system.service.ISysDictDataService; +import com.xinda.system.service.ISysDictTypeService; + +/** + * 数据字典信息 + * + * @author ruoyi + */ + +@RestController +@RequestMapping("/system/dict/data") +public class SysDictDataController extends BaseController +{ + @Autowired + private ISysDictDataService dictDataService; + + @Autowired + private ISysDictTypeService dictTypeService; + + @PreAuthorize("@ss.hasPermi('system:dict:list')") + @GetMapping("/list") + public TableDataInfo list(SysDictData dictData) + { + startPage(); + List list = dictDataService.selectDictDataList(dictData); + return getDataTable(list); + } + + @Log(title = "字典数据", businessType = BusinessType.EXPORT) + @PreAuthorize("@ss.hasPermi('system:dict:export')") + @PostMapping("/export") + public void export(HttpServletResponse response, SysDictData dictData) + { + List list = dictDataService.selectDictDataList(dictData); + ExcelUtil util = new ExcelUtil<>(SysDictData.class); + util.exportExcel(response, list, "字典数据"); + } + + /** + * 查询字典数据详细 + */ + @PreAuthorize("@ss.hasPermi('system:dict:query')") + @GetMapping(value = "/{dictCode}") + public AjaxResult getInfo(@PathVariable Long dictCode) + { + return success(dictDataService.selectDictDataById(dictCode)); + } + + /** + * 根据字典类型查询字典数据信息 + */ + @GetMapping(value = "/type/{dictType}") + public AjaxResult dictType(@PathVariable String dictType) + { + List data = dictTypeService.selectDictDataByType(dictType); + if (StringUtils.isNull(data)) + { + data = new ArrayList<>(); + } + return success(data); + } + + /** + * 新增字典类型 + */ + @PreAuthorize("@ss.hasPermi('system:dict:add')") + @Log(title = "字典数据", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@Validated @RequestBody SysDictData dict) + { + dict.setCreateBy(getUsername()); + return toAjax(dictDataService.insertDictData(dict)); + } + + /** + * 修改保存字典类型 + */ + @PreAuthorize("@ss.hasPermi('system:dict:edit')") + @Log(title = "字典数据", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@Validated @RequestBody SysDictData dict) + { + dict.setUpdateBy(getUsername()); + return toAjax(dictDataService.updateDictData(dict)); + } + + /** + * 删除字典类型 + */ + @PreAuthorize("@ss.hasPermi('system:dict:remove')") + @Log(title = "字典类型", businessType = BusinessType.DELETE) + @DeleteMapping("/{dictCodes}") + public AjaxResult remove(@PathVariable Long[] dictCodes) + { + dictDataService.deleteDictDataByIds(dictCodes); + return success(); + } +} diff --git a/xinda-admin/src/main/java/com/xinda/web/controller/system/SysDictTypeController.java b/xinda-admin/src/main/java/com/xinda/web/controller/system/SysDictTypeController.java new file mode 100644 index 0000000..ac27cfc --- /dev/null +++ b/xinda-admin/src/main/java/com/xinda/web/controller/system/SysDictTypeController.java @@ -0,0 +1,146 @@ +package com.xinda.web.controller.system; + +import java.util.List; +import javax.servlet.http.HttpServletResponse; + +import com.xinda.common.utils.MessageUtils; +import com.xinda.common.utils.StringUtils; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import com.xinda.common.annotation.Log; +import com.xinda.common.constant.UserConstants; +import com.xinda.common.core.controller.BaseController; +import com.xinda.common.core.domain.AjaxResult; +import com.xinda.common.core.domain.entity.SysDictType; +import com.xinda.common.core.page.TableDataInfo; +import com.xinda.common.enums.BusinessType; +import com.xinda.common.utils.poi.ExcelUtil; +import com.xinda.system.service.ISysDictTypeService; + +/** + * 数据字典信息 + * + * @author ruoyi + */ +@Api(tags = "字典管理") +@RestController +@RequestMapping("/system/dict/type") +public class SysDictTypeController extends BaseController +{ + @Autowired + private ISysDictTypeService dictTypeService; + + @ApiOperation("获取字典分页列表") + @PreAuthorize("@ss.hasPermi('system:dict:list')") + @GetMapping("/list") + public TableDataInfo list(SysDictType dictType) + { + startPage(); + List list = dictTypeService.selectDictTypeList(dictType); + return getDataTable(list); + } + + @ApiOperation("导出字典列表") + @Log(title = "字典类型", businessType = BusinessType.EXPORT) + @PreAuthorize("@ss.hasPermi('system:dict:export')") + @PostMapping("/export") + public void export(HttpServletResponse response, SysDictType dictType) + { + List list = dictTypeService.selectDictTypeList(dictType); + ExcelUtil util = new ExcelUtil(SysDictType.class); + util.exportExcel(response, list, "字典类型"); + } + + /** + * 查询字典类型详细 + */ + @ApiOperation("查询字典类型详细") + @PreAuthorize("@ss.hasPermi('system:dict:query')") + @GetMapping(value = "/{dictId}") + public AjaxResult getInfo(@PathVariable Long dictId) + { + return success(dictTypeService.selectDictTypeById(dictId)); + } + + /** + * 新增字典类型 + */ + @ApiOperation("新增字典类型") + @PreAuthorize("@ss.hasPermi('system:dict:add')") + @Log(title = "字典类型", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@Validated @RequestBody SysDictType dict) + { + if (UserConstants.NOT_UNIQUE.equals(dictTypeService.checkDictTypeUnique(dict))) + { + return error(StringUtils.format(MessageUtils.message("dict.add.failed.type.exists"), dict.getDictName())); + } + dict.setCreateBy(getUsername()); + return toAjax(dictTypeService.insertDictType(dict)); + } + + /** + * 修改字典类型 + */ + @ApiOperation("新增字典类型") + @PreAuthorize("@ss.hasPermi('system:dict:edit')") + @Log(title = "字典类型", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@Validated @RequestBody SysDictType dict) + { + if (UserConstants.NOT_UNIQUE.equals(dictTypeService.checkDictTypeUnique(dict))) + { + return error(StringUtils.format(MessageUtils.message("dict.update.failed.type.exists"), dict.getDictName())); + } + dict.setUpdateBy(getUsername()); + return toAjax(dictTypeService.updateDictType(dict)); + } + + /** + * 删除字典类型 + */ + @ApiOperation("删除字典类型") + @PreAuthorize("@ss.hasPermi('system:dict:remove')") + @Log(title = "字典类型", businessType = BusinessType.DELETE) + @DeleteMapping("/{dictIds}") + public AjaxResult remove(@PathVariable Long[] dictIds) + { + dictTypeService.deleteDictTypeByIds(dictIds); + return success(); + } + + /** + * 刷新字典缓存 + */ + @ApiOperation("刷新字典缓存") + @PreAuthorize("@ss.hasPermi('system:dict:refresh')") + @Log(title = "字典类型", businessType = BusinessType.CLEAN) + @DeleteMapping("/refreshCache") + public AjaxResult refreshCache() + { + dictTypeService.resetDictCache(); + return success(); + } + + /** + * 获取字典选择框列表 + */ + @ApiOperation("获取字典选择框列表") + @GetMapping("/optionselect") + public AjaxResult optionselect() + { + List dictTypes = dictTypeService.selectDictTypeAll(); + return success(dictTypes); + } +} diff --git a/xinda-admin/src/main/java/com/xinda/web/controller/system/SysIndexController.java b/xinda-admin/src/main/java/com/xinda/web/controller/system/SysIndexController.java new file mode 100644 index 0000000..19d209f --- /dev/null +++ b/xinda-admin/src/main/java/com/xinda/web/controller/system/SysIndexController.java @@ -0,0 +1,30 @@ +package com.xinda.web.controller.system; + +import com.xinda.common.utils.MessageUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import com.xinda.common.config.RuoYiConfig; +import com.xinda.common.utils.StringUtils; + +/** + * 首页 + * + * @author ruoyi + */ +@RestController +public class SysIndexController +{ + /** 系统基础配置 */ + @Autowired + private RuoYiConfig ruoyiConfig; + + /** + * 访问首页,提示语 + */ + @RequestMapping("/") + public String index() + { + return StringUtils.format(MessageUtils.message("index.welcome.message"), ruoyiConfig.getName(), ruoyiConfig.getVersion()); + } +} diff --git a/xinda-admin/src/main/java/com/xinda/web/controller/system/SysLoginController.java b/xinda-admin/src/main/java/com/xinda/web/controller/system/SysLoginController.java new file mode 100644 index 0000000..0885727 --- /dev/null +++ b/xinda-admin/src/main/java/com/xinda/web/controller/system/SysLoginController.java @@ -0,0 +1,110 @@ +package com.xinda.web.controller.system; + +import java.util.List; +import java.util.Set; + +import com.xinda.system.domain.AppPreferences; +import com.xinda.system.service.IAppPreferencesService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RestController; +import com.xinda.common.constant.Constants; +import com.xinda.common.core.domain.AjaxResult; +import com.xinda.common.core.domain.entity.SysMenu; +import com.xinda.common.core.domain.entity.SysUser; +import com.xinda.common.core.domain.model.LoginBody; +import com.xinda.common.utils.SecurityUtils; +import com.xinda.framework.web.service.SysLoginService; +import com.xinda.framework.web.service.SysPermissionService; +import com.xinda.system.service.ISysMenuService; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; + +import static com.xinda.common.constant.Constants.LANGUAGE; + +/** + * 登录验证 + * + * @author ruoyi + */ +@Api(tags = "登录验证") +@RestController +public class SysLoginController +{ + @Autowired + private SysLoginService loginService; + + @Autowired + private ISysMenuService menuService; + + @Autowired + private SysPermissionService permissionService; + @Value("${server.broker.enabled}") + private Boolean enabled; + @Resource + private IAppPreferencesService appPreferencesService; + + + /** + * 登录方法 + * + * @param loginBody 登录信息 + * @return 结果 + */ + @ApiOperation("用户登录") + @PostMapping("/login") + public AjaxResult login(HttpServletRequest request, @RequestBody LoginBody loginBody) + { + AjaxResult ajax = AjaxResult.success(); + // 生成令牌 + String token = loginService.login(loginBody.getUsername(), loginBody.getPassword(), loginBody.getCode(), + loginBody.getUuid(), loginBody.getSourceType(), request.getHeader(LANGUAGE)); + ajax.put(Constants.TOKEN, token); + return ajax; + } + + /** + * 获取用户信息 + * + * @return 用户信息 + */ + @ApiOperation("获取用户信息") + @GetMapping("getInfo") + public AjaxResult getInfo() + { + SysUser user = SecurityUtils.getLoginUser().getUser(); + // 角色集合 + Set roles = permissionService.getRolePermission(user); + // 权限集合 + Set permissions = permissionService.getMenuPermission(user); + AppPreferences appPreferences = appPreferencesService.selectAppPreferencesByUserId(user.getUserId()); + AjaxResult ajax = AjaxResult.success(); + ajax.put("user", user); + ajax.put("roles", roles); + ajax.put("permissions", permissions); + ajax.put("mqtt",enabled); + ajax.put("language", appPreferences.getLanguage()); + return ajax; + } + + + /** + * 获取路由信息 + * + * @return 路由信息 + */ + @ApiOperation("获取路由信息") + @GetMapping("getRouters") + public AjaxResult getRouters(HttpServletRequest request) + { + Long userId = SecurityUtils.getUserId(); + List menus = menuService.selectMenuTreeByUserId(userId, request.getHeader(LANGUAGE)); + return AjaxResult.success(menuService.buildMenus(menus)); + } +} diff --git a/xinda-admin/src/main/java/com/xinda/web/controller/system/SysMenuController.java b/xinda-admin/src/main/java/com/xinda/web/controller/system/SysMenuController.java new file mode 100644 index 0000000..88731ba --- /dev/null +++ b/xinda-admin/src/main/java/com/xinda/web/controller/system/SysMenuController.java @@ -0,0 +1,159 @@ +package com.xinda.web.controller.system; + +import java.util.List; + +import com.xinda.common.utils.MessageUtils; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; +import com.xinda.common.annotation.Log; +import com.xinda.common.constant.UserConstants; +import com.xinda.common.core.controller.BaseController; +import com.xinda.common.core.domain.AjaxResult; +import com.xinda.common.core.domain.entity.SysMenu; +import com.xinda.common.enums.BusinessType; +import com.xinda.common.utils.StringUtils; +import com.xinda.system.service.ISysMenuService; + +/** + * 菜单信息 + * + * @author ruoyi + */ +@Api(tags = "菜单管理") +@RestController +@RequestMapping("/system/menu") +public class SysMenuController extends BaseController +{ + @Autowired + private ISysMenuService menuService; + + /** + * 获取菜单列表 + */ + @ApiOperation("获取菜单列表") + @PreAuthorize("@ss.hasPermi('system:menu:list')") + @GetMapping("/list") + public AjaxResult list(SysMenu menu) + { + List menus = menuService.selectMenuList(menu, getUserId()); + return success(menus); + } + + /** + * 根据菜单编号获取详细信息 + */ + @ApiOperation("根据菜单编号获取详细信息") + @PreAuthorize("@ss.hasPermi('system:menu:query')") + @GetMapping(value = "/{menuId}") + public AjaxResult getInfo(@PathVariable Long menuId) + { + return success(menuService.selectMenuById(menuId)); + } + + /** + * 获取菜单下拉树列表 + */ + @ApiOperation("获取菜单下拉树列表") + @GetMapping("/treeselect") + public AjaxResult treeselect(SysMenu menu) + { + List menus = menuService.selectMenuList(menu, getUserId()); + return success(menuService.buildMenuTreeSelect(menus)); + } + + /** + * 加载对应角色菜单列表树 + */ + @ApiOperation("加载对应角色菜单列表树") + @GetMapping(value = "/roleMenuTreeselect") + public AjaxResult roleMenuTreeselect(@RequestParam Long roleId, @RequestParam Long deptId) + { + List menus = menuService.deptRoleMenuTreeselect(deptId, roleId); +// List menus = menuService.selectMenuList(getUserId(), request.getHeader(LANGUAGE)); + AjaxResult ajax = AjaxResult.success(); + ajax.put("checkedKeys", menuService.selectMenuListByRoleId(roleId)); + ajax.put("menus", menuService.buildMenuTreeSelect(menus)); + return ajax; + } + + /** + * 新增菜单 + */ + @ApiOperation("新增菜单") + @PreAuthorize("@ss.hasPermi('system:menu:add')") + @Log(title = "菜单管理", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@Validated @RequestBody SysMenu menu) + { + if (UserConstants.NOT_UNIQUE.equals(menuService.checkMenuNameUnique(menu))) + { + return error(StringUtils.format(MessageUtils.message("menu.add.failed.name.exists"), menu.getMenuName())); + } + else if (UserConstants.YES_FRAME.equals(menu.getIsFrame()) && !StringUtils.ishttp(menu.getPath())) + { + return error(StringUtils.format(MessageUtils.message("menu.add.failed.path.not.valid"), menu.getMenuName())); + } + menu.setCreateBy(getUsername()); + return toAjax(menuService.insertMenu(menu)); + } + + /** + * 修改菜单 + */ + @ApiOperation("修改菜单") + @PreAuthorize("@ss.hasPermi('system:menu:edit')") + @Log(title = "菜单管理", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@Validated @RequestBody SysMenu menu) + { + if (UserConstants.NOT_UNIQUE.equals(menuService.checkMenuNameUnique(menu))) + { + return error(StringUtils.format(MessageUtils.message("menu.update.failed.name.exists"), menu.getMenuName())); + } + else if (UserConstants.YES_FRAME.equals(menu.getIsFrame()) && !StringUtils.ishttp(menu.getPath())) + { + return error(StringUtils.format(MessageUtils.message("menu.update.failed.path.not.valid"), menu.getMenuName())); + } + else if (menu.getMenuId().equals(menu.getParentId())) + { + return error(StringUtils.format(MessageUtils.message("menu.update.failed.parent.not.valid"), menu.getMenuName())); + } + menu.setUpdateBy(getUsername()); + return toAjax(menuService.updateMenu(menu)); + } + + /** + * 删除菜单 + */ + @ApiOperation("删除菜单") + @PreAuthorize("@ss.hasPermi('system:menu:remove')") + @Log(title = "菜单管理", businessType = BusinessType.DELETE) + @DeleteMapping("/{menuId}") + public AjaxResult remove(@PathVariable("menuId") Long menuId) + { + if (menuService.hasChildByMenuId(menuId)) + { + return warn(MessageUtils.message("menu.delete.failed.child.exists")); + } + if (menuService.checkMenuExistRole(menuId)) + { + return warn(MessageUtils.message("menu.delete.failed.role.exists")); + } + return toAjax(menuService.deleteMenuById(menuId)); + } + + /** + * 加载对应部门菜单列表树 + */ + @ApiOperation("加载对应部门菜单列表树") + @GetMapping(value = "/deptMenuTreeselect/{deptId}") + public AjaxResult deptMenuTreeselect(@PathVariable("deptId") Long deptId) + { + List menus = menuService.deptMenuTreeselect(deptId); + return success(menuService.buildMenuTreeSelect(menus)); + } +} diff --git a/xinda-admin/src/main/java/com/xinda/web/controller/system/SysNoticeController.java b/xinda-admin/src/main/java/com/xinda/web/controller/system/SysNoticeController.java new file mode 100644 index 0000000..614003c --- /dev/null +++ b/xinda-admin/src/main/java/com/xinda/web/controller/system/SysNoticeController.java @@ -0,0 +1,100 @@ +package com.xinda.web.controller.system; + +import java.util.List; + +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import com.xinda.common.annotation.Log; +import com.xinda.common.core.controller.BaseController; +import com.xinda.common.core.domain.AjaxResult; +import com.xinda.common.core.page.TableDataInfo; +import com.xinda.common.enums.BusinessType; +import com.xinda.system.domain.SysNotice; +import com.xinda.system.service.ISysNoticeService; + +/** + * 公告 信息操作处理 + * + * @author ruoyi + */ +@Api(tags = "通知公告") +@RestController +@RequestMapping("/system/notice") +public class SysNoticeController extends BaseController +{ + @Autowired + private ISysNoticeService noticeService; + + /** + * 获取通知公告列表 + */ + @ApiOperation("获取通知公告列表") + @PreAuthorize("@ss.hasPermi('system:notice:list')") + @GetMapping("/list") + public TableDataInfo list(SysNotice notice) + { + startPage(); + List list = noticeService.selectNoticeList(notice); + return getDataTable(list); + } + + /** + * 根据通知公告编号获取详细信息 + */ + @ApiOperation("根据通知公告编号获取详细信息") + @PreAuthorize("@ss.hasPermi('system:notice:query')") + @GetMapping(value = "/{noticeId}") + public AjaxResult getInfo(@PathVariable Long noticeId) + { + return success(noticeService.selectNoticeById(noticeId)); + } + + /** + * 新增通知公告 + */ + @ApiOperation("新增通知公告") + @PreAuthorize("@ss.hasPermi('system:notice:add')") + @Log(title = "通知公告", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@Validated @RequestBody SysNotice notice) + { + notice.setCreateBy(getUsername()); + return toAjax(noticeService.insertNotice(notice)); + } + + /** + * 修改通知公告 + */ + @ApiOperation("修改通知公告") + @PreAuthorize("@ss.hasPermi('system:notice:edit')") + @Log(title = "通知公告", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@Validated @RequestBody SysNotice notice) + { + notice.setUpdateBy(getUsername()); + return toAjax(noticeService.updateNotice(notice)); + } + + /** + * 删除通知公告 + */ + @ApiOperation("删除通知公告") + @PreAuthorize("@ss.hasPermi('system:notice:remove')") + @Log(title = "通知公告", businessType = BusinessType.DELETE) + @DeleteMapping("/{noticeIds}") + public AjaxResult remove(@PathVariable Long[] noticeIds) + { + return toAjax(noticeService.deleteNoticeByIds(noticeIds)); + } +} diff --git a/xinda-admin/src/main/java/com/xinda/web/controller/system/SysPostController.java b/xinda-admin/src/main/java/com/xinda/web/controller/system/SysPostController.java new file mode 100644 index 0000000..fa98a5c --- /dev/null +++ b/xinda-admin/src/main/java/com/xinda/web/controller/system/SysPostController.java @@ -0,0 +1,143 @@ +package com.xinda.web.controller.system; + +import java.util.List; +import javax.servlet.http.HttpServletResponse; + +import com.xinda.common.utils.MessageUtils; +import com.xinda.common.utils.StringUtils; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import com.xinda.common.annotation.Log; +import com.xinda.common.constant.UserConstants; +import com.xinda.common.core.controller.BaseController; +import com.xinda.common.core.domain.AjaxResult; +import com.xinda.common.core.page.TableDataInfo; +import com.xinda.common.enums.BusinessType; +import com.xinda.common.utils.poi.ExcelUtil; +import com.xinda.system.domain.SysPost; +import com.xinda.system.service.ISysPostService; + +/** + * 岗位信息操作处理 + * + * @author ruoyi + */ +@Api(tags = "岗位管理") +@RestController +@RequestMapping("/system/post") +public class SysPostController extends BaseController +{ + @Autowired + private ISysPostService postService; + + /** + * 获取岗位列表 + */ + @ApiOperation("获取岗位列表") + @PreAuthorize("@ss.hasPermi('system:post:list')") + @GetMapping("/list") + public TableDataInfo list(SysPost post) + { + startPage(); + List list = postService.selectPostList(post); + return getDataTable(list); + } + + @ApiOperation("导出岗位列表") + @Log(title = "岗位管理", businessType = BusinessType.EXPORT) + @PreAuthorize("@ss.hasPermi('system:post:export')") + @PostMapping("/export") + public void export(HttpServletResponse response, SysPost post) + { + List list = postService.selectPostList(post); + ExcelUtil util = new ExcelUtil(SysPost.class); + util.exportExcel(response, list, "岗位数据"); + } + + /** + * 根据岗位编号获取详细信息 + */ + @ApiOperation("根据岗位编号获取详细信息") + @PreAuthorize("@ss.hasPermi('system:post:query')") + @GetMapping(value = "/{postId}") + public AjaxResult getInfo(@PathVariable Long postId) + { + return success(postService.selectPostById(postId)); + } + + /** + * 新增岗位 + */ + @ApiOperation("新增岗位") + @PreAuthorize("@ss.hasPermi('system:post:add')") + @Log(title = "岗位管理", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@Validated @RequestBody SysPost post) + { + if (UserConstants.NOT_UNIQUE.equals(postService.checkPostNameUnique(post))) + { + return error(StringUtils.format(MessageUtils.message("post.add.failed.name.exists"), post.getPostName())); + } + else if (UserConstants.NOT_UNIQUE.equals(postService.checkPostCodeUnique(post))) + { + return error(StringUtils.format(MessageUtils.message("post.add.failed.code.exists"), post.getPostName())); + } + post.setCreateBy(getUsername()); + return toAjax(postService.insertPost(post)); + } + + /** + * 修改岗位 + */ + @ApiOperation("修改岗位") + @PreAuthorize("@ss.hasPermi('system:post:edit')") + @Log(title = "岗位管理", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@Validated @RequestBody SysPost post) + { + if (UserConstants.NOT_UNIQUE.equals(postService.checkPostNameUnique(post))) + { + return error(StringUtils.format(MessageUtils.message("post.update.failed.name.exists"), post.getPostName())); + } + else if (UserConstants.NOT_UNIQUE.equals(postService.checkPostCodeUnique(post))) + { + return error(StringUtils.format(MessageUtils.message("post.update.failed.code.exists"), post.getPostName())); + } + post.setUpdateBy(getUsername()); + return toAjax(postService.updatePost(post)); + } + + /** + * 删除岗位 + */ + @ApiOperation("删除岗位") + @PreAuthorize("@ss.hasPermi('system:post:remove')") + @Log(title = "岗位管理", businessType = BusinessType.DELETE) + @DeleteMapping("/{postIds}") + public AjaxResult remove(@PathVariable Long[] postIds) + { + return toAjax(postService.deletePostByIds(postIds)); + } + + /** + * 获取岗位选择框列表 + */ + @ApiOperation("获取岗位选择框列表") + @GetMapping("/optionselect") + public AjaxResult optionselect() + { + List posts = postService.selectPostAll(); + return success(posts); + } +} diff --git a/xinda-admin/src/main/java/com/xinda/web/controller/system/SysProfileController.java b/xinda-admin/src/main/java/com/xinda/web/controller/system/SysProfileController.java new file mode 100644 index 0000000..e3e807e --- /dev/null +++ b/xinda-admin/src/main/java/com/xinda/web/controller/system/SysProfileController.java @@ -0,0 +1,166 @@ +package com.xinda.web.controller.system; + +import com.xinda.common.annotation.Log; +import com.xinda.common.config.RuoYiConfig; +import com.xinda.common.constant.UserConstants; +import com.xinda.common.core.controller.BaseController; +import com.xinda.common.core.domain.AjaxResult; +import com.xinda.common.core.domain.entity.SysUser; +import com.xinda.common.core.domain.model.LoginUser; +import com.xinda.common.enums.BusinessType; +import com.xinda.common.enums.SocialPlatformType; +import com.xinda.common.utils.MessageUtils; +import com.xinda.common.utils.SecurityUtils; +import com.xinda.common.utils.StringUtils; +import com.xinda.common.utils.file.FileUploadUtils; +import com.xinda.common.utils.file.MimeTypeUtils; +import com.xinda.framework.web.service.TokenService; +import com.xinda.iot.domain.UserSocialProfile; +import com.xinda.iot.service.IUserSocialProfileService; +import com.xinda.system.service.ISysUserService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.multipart.MultipartFile; + +import java.util.List; + +/** + * 个人信息 业务处理 + * + * @author ruoyi + */ +@Api(tags = "个人中心") +@RestController +@RequestMapping("/system/user/profile") +public class SysProfileController extends BaseController +{ + @Autowired + private ISysUserService userService; + + @Autowired + private TokenService tokenService; + + @Autowired + private IUserSocialProfileService iUserSocialProfileService; + + /** + * 个人信息 + */ + @ApiOperation("获取个人信息") + @GetMapping + public AjaxResult profile() + { + LoginUser loginUser = getLoginUser(); + SysUser user = loginUser.getUser(); + AjaxResult ajax = AjaxResult.success(user); + ajax.put("roleGroup", userService.selectUserRoleGroup(loginUser.getUsername())); + ajax.put("postGroup", userService.selectUserPostGroup(loginUser.getUsername())); + List socialProfileList = iUserSocialProfileService.selectUserSocialProfile(loginUser.getUserId()); + UserSocialProfile userSocialProfile = socialProfileList.stream().filter(s -> SocialPlatformType.listWechatPlatform.contains(s.getSourceClient()) && "1".equals(s.getStatus())).findFirst().orElse(null); + ajax.put("socialGroup", socialProfileList); + ajax.put("wxBind", userSocialProfile != null); + return ajax; + } + + /** + * 修改用户 + */ + @ApiOperation("修改个人信息") + @Log(title = "个人信息", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult updateProfile(@RequestBody SysUser user) + { + LoginUser loginUser = getLoginUser(); + SysUser sysUser = loginUser.getUser(); + user.setUserName(sysUser.getUserName()); + if (StringUtils.isNotEmpty(user.getPhonenumber()) + && UserConstants.NOT_UNIQUE.equals(userService.checkPhoneUnique(user))) + { + return error(StringUtils.format(MessageUtils.message("user.update.failed.phone.exists"), user.getUserName())); + } + if (StringUtils.isNotEmpty(user.getEmail()) + && UserConstants.NOT_UNIQUE.equals(userService.checkEmailUnique(user))) + { + return error(StringUtils.format(MessageUtils.message("user.update.failed.email.exists"), user.getUserName())); + } + user.setUserId(sysUser.getUserId()); + user.setPassword(null); + user.setAvatar(null); + user.setDeptId(sysUser.getDeptId()); + if (userService.updateUserProfile(user) > 0) + { + // 更新缓存用户信息 + sysUser.setNickName(user.getNickName()); + sysUser.setPhonenumber(user.getPhonenumber()); + sysUser.setEmail(user.getEmail()); + sysUser.setSex(user.getSex()); + tokenService.setLoginUser(loginUser); + return success(); + } + return error(MessageUtils.message("user.update.failed")); + } + + /** + * 重置密码 + */ + @ApiOperation("重置密码") + @PreAuthorize("@ss.hasPermi('systerm:user:updatePwd')") + @Log(title = "个人信息", businessType = BusinessType.UPDATE) + @PutMapping("/updatePwd") + public AjaxResult updatePwd(String oldPassword, String newPassword) + { + LoginUser loginUser = getLoginUser(); + String userName = loginUser.getUsername(); + String password = loginUser.getPassword(); + if (!SecurityUtils.matchesPassword(oldPassword, password)) + { + return error(MessageUtils.message("user.update.failed.password.wrong")); + } + if (SecurityUtils.matchesPassword(newPassword, password)) + { + return error(MessageUtils.message("user.update.failed.password.same")); + } + if (userService.resetUserPwd(userName, SecurityUtils.encryptPassword(newPassword)) > 0) + { + // 更新缓存用户密码 + loginUser.getUser().setPassword(SecurityUtils.encryptPassword(newPassword)); + tokenService.setLoginUser(loginUser); + return success(); + } + return error(MessageUtils.message("user.update.password.failed")); + } + + /** + * 头像上传 + */ + @ApiOperation("头像上传") + @Log(title = "用户头像", businessType = BusinessType.UPDATE) + @PostMapping("/avatar") + public AjaxResult avatar(@RequestParam("avatarfile") MultipartFile file) throws Exception + { + if (!file.isEmpty()) + { + LoginUser loginUser = getLoginUser(); + String avatar = FileUploadUtils.upload(RuoYiConfig.getAvatarPath(), file, MimeTypeUtils.IMAGE_EXTENSION); + if (userService.updateUserAvatar(loginUser.getUsername(), avatar)) + { + AjaxResult ajax = AjaxResult.success(); + ajax.put("imgUrl", avatar); + // 更新缓存用户头像 + loginUser.getUser().setAvatar(avatar); + tokenService.setLoginUser(loginUser); + return ajax; + } + } + return error(MessageUtils.message("user.upload.avatar.failed")); + } +} diff --git a/xinda-admin/src/main/java/com/xinda/web/controller/system/SysRegisterController.java b/xinda-admin/src/main/java/com/xinda/web/controller/system/SysRegisterController.java new file mode 100644 index 0000000..4253b19 --- /dev/null +++ b/xinda-admin/src/main/java/com/xinda/web/controller/system/SysRegisterController.java @@ -0,0 +1,42 @@ +package com.xinda.web.controller.system; + +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RestController; +import com.xinda.common.core.controller.BaseController; +import com.xinda.common.core.domain.AjaxResult; +import com.xinda.common.core.domain.model.RegisterBody; +import com.xinda.common.utils.StringUtils; +import com.xinda.framework.web.service.SysRegisterService; +import com.xinda.system.service.ISysConfigService; + +/** + * 注册验证 + * + * @author ruoyi + */ +@Api(tags = "注册账号") +@RestController +public class SysRegisterController extends BaseController +{ + @Autowired + private SysRegisterService registerService; + + @Autowired + private ISysConfigService configService; + + @ApiOperation("注册账号") + @PostMapping("/register") + public AjaxResult register(@RequestBody RegisterBody user) + { + if (!("true".equals(configService.selectConfigByKey("sys.account.registerUser")))) + { + return error("当前系统没有开启注册功能!"); + } + String msg = registerService.register(user); + return StringUtils.isEmpty(msg) ? success() : error(msg); + } +} diff --git a/xinda-admin/src/main/java/com/xinda/web/controller/system/SysRoleController.java b/xinda-admin/src/main/java/com/xinda/web/controller/system/SysRoleController.java new file mode 100644 index 0000000..f317df1 --- /dev/null +++ b/xinda-admin/src/main/java/com/xinda/web/controller/system/SysRoleController.java @@ -0,0 +1,300 @@ +package com.xinda.web.controller.system; + +import java.util.List; +import javax.servlet.http.HttpServletResponse; + +import com.xinda.common.constant.HttpStatus; +import com.xinda.common.utils.MessageUtils; +import com.xinda.common.utils.collection.CollectionUtils; +import com.github.pagehelper.PageInfo; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import com.xinda.common.annotation.Log; +import com.xinda.common.constant.UserConstants; +import com.xinda.common.core.controller.BaseController; +import com.xinda.common.core.domain.AjaxResult; +import com.xinda.common.core.domain.entity.SysDept; +import com.xinda.common.core.domain.entity.SysRole; +import com.xinda.common.core.domain.entity.SysUser; +import com.xinda.common.core.domain.model.LoginUser; +import com.xinda.common.core.page.TableDataInfo; +import com.xinda.common.enums.BusinessType; +import com.xinda.common.utils.StringUtils; +import com.xinda.common.utils.poi.ExcelUtil; +import com.xinda.framework.web.service.SysPermissionService; +import com.xinda.framework.web.service.TokenService; +import com.xinda.system.domain.SysUserRole; +import com.xinda.system.service.ISysDeptService; +import com.xinda.system.service.ISysRoleService; +import com.xinda.system.service.ISysUserService; + +/** + * 角色信息 + * + * @author ruoyi + */ +@Api(tags = "角色管理") +@RestController +@RequestMapping("/system/role") +public class SysRoleController extends BaseController +{ + @Autowired + private ISysRoleService roleService; + + @Autowired + private TokenService tokenService; + + @Autowired + private SysPermissionService permissionService; + + @Autowired + private ISysUserService userService; + + @Autowired + private ISysDeptService deptService; + + @ApiOperation("获取角色分页列表") + @PreAuthorize("@ss.hasPermi('system:role:list')") + @GetMapping("/list") + public TableDataInfo list(SysRole role, Integer pageNum, Integer pageSize) + { +// startPage(); + List list = roleService.selectRoleList(role); + TableDataInfo tableDataInfo = new TableDataInfo(); + tableDataInfo.setCode(HttpStatus.SUCCESS); + tableDataInfo.setMsg(MessageUtils.message("query.success")); + if (org.apache.commons.collections4.CollectionUtils.isEmpty(list)) { + tableDataInfo.setRows(list); + tableDataInfo.setTotal(0); + } else { + List list1 = CollectionUtils.startPage(list, pageNum, pageSize); + tableDataInfo.setRows(list1); + tableDataInfo.setTotal(new PageInfo(list).getTotal()); + } + return tableDataInfo; + } + + @ApiOperation("导出角色列表") + @Log(title = "角色管理", businessType = BusinessType.EXPORT) + @PreAuthorize("@ss.hasPermi('system:role:export')") + @PostMapping("/export") + public void export(HttpServletResponse response, SysRole role) + { + List list = roleService.selectRoleList(role); + ExcelUtil util = new ExcelUtil(SysRole.class); + util.exportExcel(response, list, "角色数据"); + } + + /** + * 根据角色编号获取详细信息 + */ + @ApiOperation("根据角色编号获取详细信息") + @PreAuthorize("@ss.hasPermi('system:role:query')") + @GetMapping(value = "/{roleId}") + public AjaxResult getInfo(@PathVariable Long roleId) + { + roleService.checkRoleDataScope(roleId); + return success(roleService.selectRoleById(roleId)); + } + + /** + * 新增角色 + */ + @ApiOperation("新增角色") + @PreAuthorize("@ss.hasPermi('system:role:add')") + @Log(title = "角色管理", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@Validated @RequestBody SysRole role) + { +// if (UserConstants.NOT_UNIQUE.equals(roleService.checkRoleNameUnique(role))) +// { +// return error(StringUtils.format(MessageUtils.message("role.add.failed.name.exists"), role.getRoleName())); +// } +// else if (UserConstants.NOT_UNIQUE.equals(roleService.checkRoleKeyUnique(role))) +// { +// return error(StringUtils.format(MessageUtils.message("role.add.failed.key.exists"), role.getRoleName())); +// } + if ("manager".equals(role.getRoleKey())) { + return error(MessageUtils.message("role.add.manager.failed")); + } + role.setCreateBy(getUsername()); + return toAjax(roleService.insertRole(role)); + + } + + /** + * 修改保存角色 + */ + @ApiOperation("修改角色") + @PreAuthorize("@ss.hasPermi('system:role:edit')") + @Log(title = "角色管理", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@Validated @RequestBody SysRole role) + { + roleService.checkRoleAllowed(role); + roleService.checkRoleDataScope(role.getRoleId()); +// if (UserConstants.NOT_UNIQUE.equals(roleService.checkRoleNameUnique(role))) +// { +// return error(StringUtils.format(MessageUtils.message("role.update.failed.name.exists"), role.getRoleName())); +// } +// else if (UserConstants.NOT_UNIQUE.equals(roleService.checkRoleKeyUnique(role))) +// { +// return error(StringUtils.format(MessageUtils.message("role.update.failed.key.exists"), role.getRoleName())); +// } + role.setUpdateBy(getUsername()); + + if (roleService.updateRole(role) > 0) + { + // 更新缓存用户权限 + LoginUser loginUser = getLoginUser(); + if (StringUtils.isNotNull(loginUser.getUser()) && !loginUser.getUser().isAdmin()) + { + loginUser.setPermissions(permissionService.getMenuPermission(loginUser.getUser())); + loginUser.setUser(userService.selectUserByUserName(loginUser.getUser().getUserName())); + tokenService.setLoginUser(loginUser); + } + return success(); + } + return error(StringUtils.format(MessageUtils.message("role.update.failed"), role.getRoleName())); + } + + /** + * 修改保存数据权限 + */ + @ApiOperation("修改保存数据权限") + @PreAuthorize("@ss.hasPermi('system:role:edit')") + @Log(title = "角色管理", businessType = BusinessType.UPDATE) + @PutMapping("/dataScope") + public AjaxResult dataScope(@RequestBody SysRole role) + { + roleService.checkRoleAllowed(role); + roleService.checkRoleDataScope(role.getRoleId()); + return toAjax(roleService.authDataScope(role)); + } + + /** + * 状态修改 + */ + @ApiOperation("修改角色状态") + @PreAuthorize("@ss.hasPermi('system:role:edit')") + @Log(title = "角色管理", businessType = BusinessType.UPDATE) + @PutMapping("/changeStatus") + public AjaxResult changeStatus(@RequestBody SysRole role) + { + roleService.checkRoleAllowed(role); + roleService.checkRoleDataScope(role.getRoleId()); + role.setUpdateBy(getUsername()); + return toAjax(roleService.updateRoleStatus(role)); + } + + /** + * 删除角色 + */ + @ApiOperation("删除角色") + @PreAuthorize("@ss.hasPermi('system:role:remove')") + @Log(title = "角色管理", businessType = BusinessType.DELETE) + @DeleteMapping("/{roleIds}") + public AjaxResult remove(@PathVariable Long[] roleIds) + { + return toAjax(roleService.deleteRoleByIds(roleIds)); + } + + /** + * 获取角色选择框列表 + */ + @ApiOperation("获取角色选择框列表") + @PreAuthorize("@ss.hasPermi('system:role:query')") + @GetMapping("/optionselect") + public AjaxResult optionselect() + { + return success(roleService.selectRoleAll()); + } + + /** + * 查询已分配用户角色列表 + */ + @ApiOperation("查询已分配用户角色列表") + @PreAuthorize("@ss.hasPermi('system:role:list')") + @GetMapping("/authUser/allocatedList") + public TableDataInfo allocatedList(SysUser user) + { + startPage(); + List list = userService.selectAllocatedList(user); + return getDataTable(list); + } + + /** + * 查询未分配用户角色列表 + */ + @ApiOperation("查询未分配用户角色列表") + @PreAuthorize("@ss.hasPermi('system:role:list')") + @GetMapping("/authUser/unallocatedList") + public TableDataInfo unallocatedList(SysUser user) + { + startPage(); + List list = userService.selectUnallocatedList(user); + return getDataTable(list); + } + + /** + * 取消授权用户 + */ + @ApiOperation("取消授权用户") + @PreAuthorize("@ss.hasPermi('system:role:edit')") + @Log(title = "角色管理", businessType = BusinessType.GRANT) + @PutMapping("/authUser/cancel") + public AjaxResult cancelAuthUser(@RequestBody SysUserRole userRole) + { + return toAjax(roleService.deleteAuthUser(userRole)); + } + + /** + * 批量取消授权用户 + */ + @ApiOperation("批量取消授权用户") + @PreAuthorize("@ss.hasPermi('system:role:edit')") + @Log(title = "角色管理", businessType = BusinessType.GRANT) + @PutMapping("/authUser/cancelAll") + public AjaxResult cancelAuthUserAll(Long roleId, Long[] userIds) + { + return toAjax(roleService.deleteAuthUsers(roleId, userIds)); + } + + /** + * 批量选择用户授权 + */ + @ApiOperation("批量选择用户授权") + @PreAuthorize("@ss.hasPermi('system:role:edit')") + @Log(title = "角色管理", businessType = BusinessType.GRANT) + @PutMapping("/authUser/selectAll") + public AjaxResult selectAuthUserAll(Long roleId, Long[] userIds) + { + roleService.checkRoleDataScope(roleId); + return toAjax(roleService.insertAuthUsers(roleId, userIds)); + } + + /** + * 获取对应角色部门树列表 + */ + @ApiOperation("获取对应角色部门树列表") + @PreAuthorize("@ss.hasPermi('system:role:query')") + @GetMapping(value = "/deptTree/{roleId}") + public AjaxResult deptTree(@PathVariable("roleId") Long roleId) + { + AjaxResult ajax = AjaxResult.success(); + ajax.put("checkedKeys", deptService.selectDeptListByRoleId(roleId)); + ajax.put("depts", deptService.selectDeptTreeList(new SysDept())); + return ajax; + } +} diff --git a/xinda-admin/src/main/java/com/xinda/web/controller/system/SysTranslateController.java b/xinda-admin/src/main/java/com/xinda/web/controller/system/SysTranslateController.java new file mode 100644 index 0000000..deef267 --- /dev/null +++ b/xinda-admin/src/main/java/com/xinda/web/controller/system/SysTranslateController.java @@ -0,0 +1,77 @@ +package com.xinda.web.controller.system; + +import com.xinda.common.core.controller.BaseController; +import com.xinda.common.core.domain.AjaxResult; +import com.xinda.common.core.domain.entity.SysTranslate; +import com.xinda.common.utils.MessageUtils; +import com.xinda.common.utils.StringUtils; +import com.xinda.common.utils.poi.ExcelUtil; +import com.xinda.system.service.ISysTranslateService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.apache.commons.collections4.CollectionUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; + +import javax.servlet.http.HttpServletResponse; +import java.util.List; + +/** + * 翻译表管理 + * + * @author ruoyi + */ +@Api(tags = "翻译表管理") +@RestController +@RequestMapping("/system/translate") +public class SysTranslateController extends BaseController +{ + @Autowired + private ISysTranslateService sysTranslateService; + + /** + * 导入翻译列表 + */ + @ApiOperation("导入翻译列表") + @PreAuthorize("@ss.hasPermi('system:translate:import')") + @PostMapping("/import") + public AjaxResult importSysTranslate(MultipartFile file, String type, Long productId) throws Exception { + if (null == file) { + return error(MessageUtils.message("import.failed.file.null")); + } + if (StringUtils.isEmpty(type)) { + return error(); + } + ExcelUtil util = new ExcelUtil<>(SysTranslate.class); + List list = util.importExcel(file.getInputStream()); + if (CollectionUtils.isEmpty(list)) { + return error(MessageUtils.message("import.failed.data.null")); + } + sysTranslateService.importSysTranslate(list, type, productId); + return success(MessageUtils.message("import.success")); + } + + /** + * 导出翻译列表 + */ + @ApiOperation("导出翻译列表") + @PreAuthorize("@ss.hasPermi('system:translate:export')") + @PostMapping("/export") + public void export(HttpServletResponse response, SysTranslate sysTranslate, String type, @RequestParam(name = "isSource", required = false, defaultValue = "0") Boolean isSource) + { + if (StringUtils.isEmpty(type)) { + return; + } + List list; + if (isSource) { + list = sysTranslateService.selectSourceList(type, sysTranslate.getProductId()); + } else { + list = sysTranslateService.selectSysTranslateList(sysTranslate, type); + } + ExcelUtil util = new ExcelUtil<>(SysTranslate.class); + util.exportExcel(response, list, "翻译列表"); + } + +} diff --git a/xinda-admin/src/main/java/com/xinda/web/controller/system/SysUserController.java b/xinda-admin/src/main/java/com/xinda/web/controller/system/SysUserController.java new file mode 100644 index 0000000..1b9a9e3 --- /dev/null +++ b/xinda-admin/src/main/java/com/xinda/web/controller/system/SysUserController.java @@ -0,0 +1,316 @@ +package com.xinda.web.controller.system; + +import java.util.List; +import java.util.stream.Collectors; +import javax.servlet.http.HttpServletResponse; + +import com.xinda.common.utils.MessageUtils; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.apache.commons.lang3.ArrayUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.multipart.MultipartFile; +import com.xinda.common.annotation.Log; +import com.xinda.common.constant.UserConstants; +import com.xinda.common.core.controller.BaseController; +import com.xinda.common.core.domain.AjaxResult; +import com.xinda.common.core.domain.entity.SysDept; +import com.xinda.common.core.domain.entity.SysRole; +import com.xinda.common.core.domain.entity.SysUser; +import com.xinda.common.core.page.TableDataInfo; +import com.xinda.common.enums.BusinessType; +import com.xinda.common.utils.SecurityUtils; +import com.xinda.common.utils.StringUtils; +import com.xinda.common.utils.poi.ExcelUtil; +import com.xinda.system.service.ISysDeptService; +import com.xinda.system.service.ISysPostService; +import com.xinda.system.service.ISysRoleService; +import com.xinda.system.service.ISysUserService; + +/** + * 用户信息 + * + * @author ruoyi + */ +@Api(tags = "用户管理") +@RestController +@RequestMapping("/system/user") +public class SysUserController extends BaseController +{ + @Autowired + private ISysUserService userService; + + @Autowired + private ISysRoleService roleService; + + @Autowired + private ISysDeptService deptService; + + @Autowired + private ISysPostService postService; + + /** + * 获取用户列表 + */ + @ApiOperation("获取用户分页列表") + @PreAuthorize("@ss.hasPermi('system:user:list')") + @GetMapping("/list") + public TableDataInfo list(SysUser user) + { + startPage(); + if (null == user.getDeptId()) { + user.setDeptId(getLoginUser().getDeptId()); + } + List list = userService.selectUserList(user); + return getDataTable(list); + } + + @ApiOperation("导出用户列表") + @Log(title = "用户管理", businessType = BusinessType.EXPORT) + @PreAuthorize("@ss.hasPermi('system:user:export')") + @PostMapping("/export") + public void export(HttpServletResponse response, SysUser user) + { + if (null == user.getDeptId()) { + user.setDeptId(getLoginUser().getDeptId()); + } + List list = userService.selectUserList(user); + ExcelUtil util = new ExcelUtil(SysUser.class); + util.exportExcel(response, list, "用户数据"); + } + + @ApiOperation("批量导入用户") + @Log(title = "用户管理", businessType = BusinessType.IMPORT) + @PreAuthorize("@ss.hasPermi('system:user:import')") + @PostMapping("/importData") + public AjaxResult importData(MultipartFile file, boolean updateSupport) throws Exception + { + ExcelUtil util = new ExcelUtil(SysUser.class); + List userList = util.importExcel(file.getInputStream()); + String operName = getUsername(); + String message = userService.importUser(userList, updateSupport, operName); + return success(message); + } + + + @ApiOperation("下载用户导入模板") + @PostMapping("/importTemplate") + public void importTemplate(HttpServletResponse response) + { + ExcelUtil util = new ExcelUtil(SysUser.class); + util.importTemplateExcel(response, "用户数据"); + } + + /** + * 根据用户编号获取详细信息 + */ + @ApiOperation("根据用户编号获取详细信息") + @PreAuthorize("@ss.hasPermi('system:user:query')") + @GetMapping(value = { "/", "/{userId}" }) + public AjaxResult getInfo(@PathVariable(value = "userId", required = false) Long userId) + { + userService.checkUserDataScope(userId); + AjaxResult ajax = AjaxResult.success(); +// List roles = roleService.selectRoleAll(); +// ajax.put("roles", SysUser.isAdmin(userId) ? roles : roles.stream().filter(r -> !r.isAdmin()).collect(Collectors.toList())); + ajax.put("posts", postService.selectPostAll()); + if (StringUtils.isNotNull(userId)) + { + SysUser sysUser = userService.selectUserById(userId); + ajax.put(AjaxResult.DATA_TAG, sysUser); + ajax.put("postIds", postService.selectPostListByUserId(userId)); + SysRole sysRole = new SysRole(); + sysRole.setDeptId(sysUser.getDeptId()); + sysRole.setShowChild(false); + List sysRoleList = roleService.selectRoleList(sysRole); + ajax.put("roles", sysRoleList); + ajax.put("roleIds", sysUser.getRoles().stream().map(SysRole::getRoleId).collect(Collectors.toList())); + } + return ajax; + } + + /** + * 新增用户 + */ + @ApiOperation("新增用户") + @PreAuthorize("@ss.hasPermi('system:user:add')") + @Log(title = "用户管理", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@Validated @RequestBody SysUser user) + { + if (UserConstants.NOT_UNIQUE.equals(userService.checkUserNameUnique(user))) + { + return error(StringUtils.format(MessageUtils.message("user.add.failed.name.exists"), user.getUserName())); + } + else if (StringUtils.isNotEmpty(user.getPhonenumber()) + && UserConstants.NOT_UNIQUE.equals(userService.checkPhoneUnique(user))) + { + return error(StringUtils.format(MessageUtils.message("user.add.failed.phone.exists"), user.getUserName())); + } + else if (StringUtils.isNotEmpty(user.getEmail()) + && UserConstants.NOT_UNIQUE.equals(userService.checkEmailUnique(user))) + { + return error(StringUtils.format(MessageUtils.message("user.add.failed.email.exists"), user.getUserName())); + } + user.setCreateBy(getUsername()); + user.setPassword(SecurityUtils.encryptPassword(user.getPassword())); + return toAjax(userService.insertUser(user)); + } + + /** + * 修改用户 + */ + @ApiOperation("修改用户") + @PreAuthorize("@ss.hasPermi('system:user:edit')") + @Log(title = "用户管理", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@Validated @RequestBody SysUser user) + { + userService.checkUserAllowed(user); + userService.checkUserDataScope(user.getUserId()); + if (UserConstants.NOT_UNIQUE.equals(userService.checkUserNameUnique(user))) + { + return error(StringUtils.format(MessageUtils.message("user.update.failed.name.exists"), user.getUserName())); + } + else if (StringUtils.isNotEmpty(user.getPhonenumber()) + && UserConstants.NOT_UNIQUE.equals(userService.checkPhoneUnique(user))) + { + return error(StringUtils.format(MessageUtils.message("user.update.failed.phone.exists"), user.getUserName())); + } + else if (StringUtils.isNotEmpty(user.getEmail()) + && UserConstants.NOT_UNIQUE.equals(userService.checkEmailUnique(user))) + { + return error(StringUtils.format(MessageUtils.message("user.update.failed.email.exists"), user.getUserName())); + } + user.setUpdateBy(getUsername()); + return toAjax(userService.updateUser(user)); + } + + /** + * 删除用户 + */ + @ApiOperation("删除用户") + @PreAuthorize("@ss.hasPermi('system:user:remove')") + @Log(title = "用户管理", businessType = BusinessType.DELETE) + @DeleteMapping("/{userIds}") + public AjaxResult remove(@PathVariable Long[] userIds) + { + if (ArrayUtils.contains(userIds, getUserId())) + { + return error(MessageUtils.message("user.delete.failed")); + } + return toAjax(userService.deleteUserByIds(userIds)); + } + + /** + * 重置密码 + */ + @ApiOperation("重置用户密码") + @PreAuthorize("@ss.hasPermi('system:user:resetPwd')") + @Log(title = "用户管理", businessType = BusinessType.UPDATE) + @PutMapping("/resetPwd") + public AjaxResult resetPwd(@RequestBody SysUser user) + { + userService.checkUserAllowed(user); + userService.checkUserDataScope(user.getUserId()); + user.setPassword(SecurityUtils.encryptPassword(user.getPassword())); + user.setUpdateBy(getUsername()); + return toAjax(userService.resetPwd(user)); + } + + /** + * 状态修改 + */ + @ApiOperation("修改用户状态") + @PreAuthorize("@ss.hasPermi('system:user:edit')") + @Log(title = "用户管理", businessType = BusinessType.UPDATE) + @PutMapping("/changeStatus") + public AjaxResult changeStatus(@RequestBody SysUser user) + { + userService.checkUserAllowed(user); + userService.checkUserDataScope(user.getUserId()); + user.setUpdateBy(getUsername()); + return toAjax(userService.updateUserStatus(user)); + } + + /** + * 根据用户编号获取授权角色 + */ + @ApiOperation("根据用户编号获取授权角色") + @PreAuthorize("@ss.hasPermi('system:user:query')") + @GetMapping("/authRole/{userId}") + public AjaxResult authRole(@PathVariable("userId") Long userId) + { + AjaxResult ajax = AjaxResult.success(); + SysUser user = userService.selectUserById(userId); + List roles = roleService.selectRolesByUserId(userId); + ajax.put("user", user); + ajax.put("roles", SysUser.isAdmin(userId) ? roles : roles.stream().filter(r -> !r.isAdmin()).collect(Collectors.toList())); + return ajax; + } + + /** + * 用户授权角色 + */ + @ApiOperation("为用户授权角色") + @PreAuthorize("@ss.hasPermi('system:user:edit')") + @Log(title = "用户管理", businessType = BusinessType.GRANT) + @PutMapping("/authRole") + public AjaxResult insertAuthRole(Long userId, Long[] roleIds) + { + userService.checkUserDataScope(userId); + userService.insertUserAuth(userId, roleIds); + return success(); + } + + /** + * 获取部门树列表 + */ + @ApiOperation("获取部门树列表") + @PreAuthorize("@ss.hasPermi('system:user:list')") + @GetMapping("/deptTree") + public AjaxResult deptTree(SysDept dept) + { + return success(deptService.selectDeptTreeList(dept)); + } + + /** + * 获取终端用户列表 + * @param user 用户信息 + * @return com.xinda.common.core.page.TableDataInfo + */ + @ApiOperation("获取用户分页列表") + @PreAuthorize("@ss.hasPermi('system:user:list')") + @GetMapping("/listTerminal") + public TableDataInfo listTerminal(SysUser user) + { + startPage(); + List list = userService.listTerminal(user); + return getDataTable(list); + } + + + /** + * 根据机构id获取当前用户列表 + */ + @ApiOperation("根据机构id获取当前用户列表") + @PreAuthorize("@ss.hasPermi('system:user:list')") + @GetMapping("/getByDeptId") + public TableDataInfo getByDeptId() + { + startPage(); + List list = userService.selectByDeptId(); + return getDataTable(list); + } + +} diff --git a/xinda-admin/src/main/java/com/xinda/web/controller/tool/SwaggerController.java b/xinda-admin/src/main/java/com/xinda/web/controller/tool/SwaggerController.java new file mode 100644 index 0000000..6108cad --- /dev/null +++ b/xinda-admin/src/main/java/com/xinda/web/controller/tool/SwaggerController.java @@ -0,0 +1,24 @@ +package com.xinda.web.controller.tool; + +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import com.xinda.common.core.controller.BaseController; + +/** + * swagger 接口 + * + * @author ruoyi + */ +@Controller +@RequestMapping("/tool/swagger") +public class SwaggerController extends BaseController +{ + @PreAuthorize("@ss.hasPermi('tool:swagger:view')") + @GetMapping() + public String index() + { + return redirect("/swagger-ui.html"); + } +} diff --git a/xinda-admin/src/main/java/com/xinda/web/controller/tool/TestController.java b/xinda-admin/src/main/java/com/xinda/web/controller/tool/TestController.java new file mode 100644 index 0000000..c7d405d --- /dev/null +++ b/xinda-admin/src/main/java/com/xinda/web/controller/tool/TestController.java @@ -0,0 +1,185 @@ +package com.xinda.web.controller.tool; + +import java.util.ArrayList; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import com.xinda.common.core.controller.BaseController; +import com.xinda.common.core.domain.R; +import com.xinda.common.utils.StringUtils; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiImplicitParams; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import io.swagger.annotations.ApiOperation; + +import javax.annotation.Resource; + +/** + * swagger 用户测试方法 + * + * @author ruoyi + */ +@Api("swagger 用户测试方法") +@RestController +@RequestMapping("/test/user") +public class TestController extends BaseController +{ + private final static Map users = new LinkedHashMap(); + { + users.put(1, new UserEntity(1, "admin", "admin123", "15888888888")); + users.put(2, new UserEntity(2, "ry", "admin123", "15666666666")); + } + + @ApiOperation("获取用户列表") + @GetMapping("/list") + public R> userList() + { + List userList = new ArrayList(users.values()); + return R.ok(userList); + } + + @ApiOperation("获取用户详细") + @ApiImplicitParam(name = "userId", value = "用户ID", required = true, dataType = "int", paramType = "path", dataTypeClass = Integer.class) + @GetMapping("/{userId}") + public R getUser(@PathVariable Integer userId) + { + if (!users.isEmpty() && users.containsKey(userId)) + { + return R.ok(users.get(userId)); + } + else + { + return R.fail("用户不存在"); + } + } + + @ApiOperation("新增用户") + @ApiImplicitParams({ + @ApiImplicitParam(name = "userId", value = "用户id", dataType = "Integer", dataTypeClass = Integer.class), + @ApiImplicitParam(name = "username", value = "用户名称", dataType = "String", dataTypeClass = String.class), + @ApiImplicitParam(name = "password", value = "用户密码", dataType = "String", dataTypeClass = String.class), + @ApiImplicitParam(name = "mobile", value = "用户手机", dataType = "String", dataTypeClass = String.class) + }) + @PostMapping("/save") + public R save(UserEntity user) + { + if (StringUtils.isNull(user) || StringUtils.isNull(user.getUserId())) + { + return R.fail("用户ID不能为空"); + } + users.put(user.getUserId(), user); + return R.ok(); + } + + @ApiOperation("更新用户") + @PutMapping("/update") + public R update(@RequestBody UserEntity user) + { + if (StringUtils.isNull(user) || StringUtils.isNull(user.getUserId())) + { + return R.fail("用户ID不能为空"); + } + if (users.isEmpty() || !users.containsKey(user.getUserId())) + { + return R.fail("用户不存在"); + } + users.remove(user.getUserId()); + users.put(user.getUserId(), user); + return R.ok(); + } + + @ApiOperation("删除用户信息") + @ApiImplicitParam(name = "userId", value = "用户ID", required = true, dataType = "int", paramType = "path", dataTypeClass = Integer.class) + @DeleteMapping("/{userId}") + public R delete(@PathVariable Integer userId) + { + if (!users.isEmpty() && users.containsKey(userId)) + { + users.remove(userId); + return R.ok(); + } + else + { + return R.fail("用户不存在"); + } + } +} + +@ApiModel(value = "UserEntity", description = "用户实体") +class UserEntity +{ + @ApiModelProperty("用户ID") + private Integer userId; + + @ApiModelProperty("用户名称") + private String username; + + @ApiModelProperty("用户密码") + private String password; + + @ApiModelProperty("用户手机") + private String mobile; + + public UserEntity() + { + + } + + public UserEntity(Integer userId, String username, String password, String mobile) + { + this.userId = userId; + this.username = username; + this.password = password; + this.mobile = mobile; + } + + public Integer getUserId() + { + return userId; + } + + public void setUserId(Integer userId) + { + this.userId = userId; + } + + public String getUsername() + { + return username; + } + + public void setUsername(String username) + { + this.username = username; + } + + public String getPassword() + { + return password; + } + + public void setPassword(String password) + { + this.password = password; + } + + public String getMobile() + { + return mobile; + } + + public void setMobile(String mobile) + { + this.mobile = mobile; + } +} diff --git a/xinda-admin/src/main/java/com/xinda/web/controller/tool/TestController2.java b/xinda-admin/src/main/java/com/xinda/web/controller/tool/TestController2.java new file mode 100644 index 0000000..defd7c9 --- /dev/null +++ b/xinda-admin/src/main/java/com/xinda/web/controller/tool/TestController2.java @@ -0,0 +1,218 @@ +package com.xinda.web.controller.tool; + +import com.alibaba.fastjson2.JSON; +import com.xinda.iot.domain.DeviceJob; +import com.xinda.iot.domain.DeviceLog; +import com.xinda.iot.mapper.DeviceJobMapper; +import com.xinda.iot.mapper.DeviceLogMapper; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import javax.annotation.Resource; +import java.util.*; +import java.util.function.Function; +import java.util.stream.Collectors; +import com.xinda.common.annotation.Anonymous; +import com.xinda.common.core.domain.ImportExcelVO; +import com.xinda.common.core.domain.OutputExcelVO; +import com.xinda.common.utils.StringUtils; +import com.xinda.common.utils.poi.ExcelUtil; +import com.xinda.iot.domain.AlertLog; +import com.xinda.iot.mapper.AlertLogMapper; +import com.xinda.iot.mapper.DeviceMapper; +import com.xinda.iot.model.DeviceRelateAlertLogVO; +import org.apache.commons.collections4.CollectionUtils; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; + + +/** + * 测试类 + * @author fastb + * @date 2023-09-13 11:42 + */ +@Anonymous +@RestController +@RequestMapping("/test2") +public class TestController2 { + + @Resource + private AlertLogMapper alertLogMapper; + @Resource + private DeviceMapper deviceMapper; + + @Resource + private DeviceJobMapper deviceJobMapper; + @Resource + private DeviceLogMapper deviceLogMapper; + + @GetMapping("/add") + public void add() + { + Set deviceNumbers = new HashSet<>(); + deviceNumbers.add("D1PGLPG58K88"); + deviceNumbers.add("D1F0L7P84D8Z"); + deviceNumbers.add("D1F0L7P84D8Z_2"); + List deviceRelateAlertLogVOList = deviceMapper.selectDeviceBySerialNumbers(deviceNumbers); + Map deviceRelateAlertLogVOMap = deviceRelateAlertLogVOList.stream().collect(Collectors.toMap(DeviceRelateAlertLogVO::getSerialNumber, Function.identity())); + + ArrayList alertLogList = new ArrayList<>(); + for (String deviceNumber : deviceNumbers) { + AlertLog alertLog = new AlertLog(); + alertLog.setSerialNumber(deviceNumber); + alertLog.setAlertName("温度告警测试"); + alertLog.setAlertLevel(1L); + alertLog.setStatus(1); + alertLog.setProductId(1L); + alertLog.setDetail("111"); + alertLog.setCreateTime(new Date()); + // 添加设备关联信息 + if (deviceRelateAlertLogVOMap.containsKey(deviceNumber)) { + DeviceRelateAlertLogVO deviceRelateAlertLogVO = deviceRelateAlertLogVOMap.get(deviceNumber); + alertLog.setDeviceName(deviceRelateAlertLogVO.getDeviceName()); + alertLog.setUserId(deviceRelateAlertLogVO.getUserId()); + } + alertLogList.add(alertLog); + } + + // 批量插入告警日志 + alertLogMapper.insertAlertLogBatch(alertLogList); + } + + @PostMapping("/handleExcel") + public String handleExcel(@RequestParam("file") MultipartFile file) throws Exception + { + if (null == file) { + return "导入失败,请先上传文件!"; + } + ExcelUtil util = new ExcelUtil<>(ImportExcelVO.class); + List importExcelVOList = util.importExcel(file.getInputStream()); + if (CollectionUtils.isEmpty(importExcelVOList)) { + return "导入失败,模板数据不能为空!"; + } + System.out.println(importExcelVOList.size()); + List oneCityName = new ArrayList<>(); + List twoCityName = new ArrayList<>(); + List threeCityName = new ArrayList<>(); + + List oneCityList = new ArrayList<>(); + Map> twoCityMap = new HashMap<>(2); + Map> threeCityMap = new HashMap<>(2); + + for (ImportExcelVO vo : importExcelVOList) { + String city = vo.getCity(); + List cityNameList = StringUtils.str2List(city, "/", true, true); + int size = cityNameList.size(); + if (1 == size) { + String name = cityNameList.get(0); + if (!oneCityName.contains(name)) { + oneCityName.add(name); + OutputExcelVO outputExcelVO = new OutputExcelVO(); + outputExcelVO.setName(name); + outputExcelVO.setCode(vo.getCode()); + outputExcelVO.setLat(vo.getLat()); + outputExcelVO.setLon(vo.getLon()); + oneCityList.add(outputExcelVO); + twoCityMap.put(name, new ArrayList<>()); + } + } else if (2 == size) { + String oneName = cityNameList.get(0); + if (!oneCityName.contains(oneName)) { + oneCityName.add(oneName); + OutputExcelVO outputExcelVO = new OutputExcelVO(); + outputExcelVO.setName(oneName); + oneCityList.add(outputExcelVO); + twoCityMap.put(oneName, new ArrayList<>()); + } + String twoName = cityNameList.get(1); + OutputExcelVO outputExcelVO = new OutputExcelVO(); + outputExcelVO.setName(twoName); + outputExcelVO.setCode(vo.getCode()); + outputExcelVO.setLat(vo.getLat()); + outputExcelVO.setLon(vo.getLon()); + if (!twoCityName.contains(twoName)) { + twoCityName.add(twoName); + List twoList = twoCityMap.get(oneName); + twoList.add(outputExcelVO); + twoCityMap.put(oneName, twoList); + threeCityMap.put(twoName, new ArrayList<>()); + } + } else if (3 == size) { + String oneName = cityNameList.get(0); + if (!oneCityName.contains(oneName)) { + oneCityName.add(oneName); + OutputExcelVO outputExcelVO = new OutputExcelVO(); + outputExcelVO.setName(oneName); + oneCityList.add(outputExcelVO); + twoCityMap.put(oneName, new ArrayList<>()); + } + String twoName = cityNameList.get(1); + if (!twoCityName.contains(twoName)) { + twoCityName.add(twoName); + OutputExcelVO outputExcelVO = new OutputExcelVO(); + outputExcelVO.setName(twoName); + List twoList = twoCityMap.get(oneName); + twoList.add(outputExcelVO); + twoCityMap.put(oneName, twoList); + threeCityMap.put(twoName, new ArrayList<>()); + } + String threeName = cityNameList.get(2); + if (!threeCityName.contains(threeName)) { + threeCityName.add(threeName); + OutputExcelVO outputExcelVO = new OutputExcelVO(); + outputExcelVO.setName(threeName); + outputExcelVO.setCode(vo.getCode()); + outputExcelVO.setLat(vo.getLat()); + outputExcelVO.setLon(vo.getLon()); + List twoList = threeCityMap.get(twoName); + twoList.add(outputExcelVO); + threeCityMap.put(twoName, twoList); + } + } + } + int total = 0; + total = total + oneCityList.size(); + for (OutputExcelVO outputExcelVO : oneCityList) { + List voList = twoCityMap.get(outputExcelVO.getName()); + if (CollectionUtils.isNotEmpty(voList)) { + total = total + voList.size(); + outputExcelVO.setChildren(voList); + for (OutputExcelVO excelVO : voList) { + List voList1 = threeCityMap.get(excelVO.getName()); + if (CollectionUtils.isNotEmpty(voList1)) { + total = total + voList1.size(); + excelVO.setChildren(voList1); + } + } + } + } + System.out.println(total); + return JSON.toJSONString(oneCityList); + } + + /** + * 计算场景运算型变量的值 + * @param id + * @return java.lang.String + */ + @GetMapping("/getJobList") + public String getJobList() { + Long[] ids = {1L, 2L}; + List deviceJobList = deviceJobMapper.selectListByJobTypeAndDatasourceIds(ids, 3); + return JSON.toJSONString(deviceJobList); + } + + @GetMapping("/getStatsValue") + public String getStatsValue() { + DeviceLog deviceLog = new DeviceLog(); + deviceLog.setLogType(1); + deviceLog.setIdentity("k1"); + deviceLog.setSerialNumber("D10I741UL2P3_1"); + deviceLog.setBeginTime("2024-05-17 00:00:00"); + deviceLog.setEndTime("2024-05-17 23:59:59"); +// deviceLog.setOperation(5); + List list = deviceLogMapper.selectStatsValue(deviceLog); + return JSON.toJSONString(list); + } + +} diff --git a/xinda-admin/src/main/java/com/xinda/web/core/config/SwaggerConfig.java b/xinda-admin/src/main/java/com/xinda/web/core/config/SwaggerConfig.java new file mode 100644 index 0000000..43dafd4 --- /dev/null +++ b/xinda-admin/src/main/java/com/xinda/web/core/config/SwaggerConfig.java @@ -0,0 +1,125 @@ +package com.xinda.web.core.config; + +import java.util.ArrayList; +import java.util.List; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import com.xinda.common.config.RuoYiConfig; +import io.swagger.annotations.ApiOperation; +import io.swagger.models.auth.In; +import springfox.documentation.builders.ApiInfoBuilder; +import springfox.documentation.builders.PathSelectors; +import springfox.documentation.builders.RequestHandlerSelectors; +import springfox.documentation.service.ApiInfo; +import springfox.documentation.service.ApiKey; +import springfox.documentation.service.AuthorizationScope; +import springfox.documentation.service.Contact; +import springfox.documentation.service.SecurityReference; +import springfox.documentation.service.SecurityScheme; +import springfox.documentation.spi.DocumentationType; +import springfox.documentation.spi.service.contexts.SecurityContext; +import springfox.documentation.spring.web.plugins.Docket; + +/** + * Swagger2的接口配置 + * + * @author ruoyi + */ +@Configuration +public class SwaggerConfig +{ + /** 系统基础配置 */ + @Autowired + private RuoYiConfig ruoyiConfig; + + /** 是否开启swagger */ + @Value("${swagger.enabled}") + private boolean enabled; + + /** 设置请求的统一前缀 */ + @Value("${swagger.pathMapping}") + private String pathMapping; + + /** + * 创建API + */ + @Bean + public Docket createRestApi() + { + return new Docket(DocumentationType.OAS_30) + // 是否启用Swagger + .enable(enabled) + // 用来创建该API的基本信息,展示在文档的页面中(自定义展示的信息) + .apiInfo(apiInfo()) + // 设置哪些接口暴露给Swagger展示 + .select() + // 扫描所有有注解的api,用这种方式更灵活 + .apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class)) + // 扫描指定包中的swagger注解 + // .apis(RequestHandlerSelectors.basePackage("com.xinda.project.tool.swagger")) + // 扫描所有 .apis(RequestHandlerSelectors.any()) + .paths(PathSelectors.any()) + .build() + /* 设置安全模式,swagger可以设置访问token */ + .securitySchemes(securitySchemes()) + .securityContexts(securityContexts()) + .pathMapping(pathMapping); + } + + /** + * 安全模式,这里指定token通过Authorization头请求头传递 + */ + private List securitySchemes() + { + List apiKeyList = new ArrayList(); + apiKeyList.add(new ApiKey("Authorization", "Authorization", In.HEADER.toValue())); + return apiKeyList; + } + + /** + * 安全上下文 + */ + private List securityContexts() + { + List securityContexts = new ArrayList<>(); + securityContexts.add( + SecurityContext.builder() + .securityReferences(defaultAuth()) + .operationSelector(o -> o.requestMappingPattern().matches("/.*")) + .build()); + return securityContexts; + } + + /** + * 默认的安全上引用 + */ + private List defaultAuth() + { + AuthorizationScope authorizationScope = new AuthorizationScope("global", "accessEverything"); + AuthorizationScope[] authorizationScopes = new AuthorizationScope[1]; + authorizationScopes[0] = authorizationScope; + List securityReferences = new ArrayList<>(); + securityReferences.add(new SecurityReference("Authorization", authorizationScopes)); + return securityReferences; + } + + /** + * 添加摘要信息 + */ + private ApiInfo apiInfo() + { + // 用ApiInfoBuilder进行定制 + return new ApiInfoBuilder() + // 设置标题 + .title("XinDa物联网平台接口文档") + // 描述 + .description("描述:XinDa物联网平台") + // 作者信息 + .contact(new Contact(ruoyiConfig.getName(), null, null)) + // 版本 + .version("版本号:" + ruoyiConfig.getVersion()) + .build(); + } +} diff --git a/xinda-admin/src/main/resources/META-INF/spring-devtools.properties b/xinda-admin/src/main/resources/META-INF/spring-devtools.properties new file mode 100644 index 0000000..37e7b58 --- /dev/null +++ b/xinda-admin/src/main/resources/META-INF/spring-devtools.properties @@ -0,0 +1 @@ +restart.include.json=/com.alibaba.fastjson2.*.jar \ No newline at end of file diff --git a/xinda-admin/src/main/resources/application-dev.yml b/xinda-admin/src/main/resources/application-dev.yml new file mode 100644 index 0000000..a6aef7f --- /dev/null +++ b/xinda-admin/src/main/resources/application-dev.yml @@ -0,0 +1,164 @@ +# 数据源配置 +spring: + datasource: + type: com.alibaba.druid.pool.DruidDataSource + driverClassName: com.mysql.cj.jdbc.Driver + druid: + # 主库数据源 + master: +# url: jdbc:mysql://1.14.72.242:3306/gongkongbang?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8 +# username: gongkongbang +# password: pRePNKSeawMMpKpJ + url: jdbc:mysql://127.0.0.1:3306/gongkongbang?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8 + username: gongkongbang + password: pRePNKSeawMMpKpJ + # 从库数据源 + slave: + enabled: false # 从数据源开关/默认关闭 + url: + username: + password: + # TDengine数据库 +# tdengine-server: +# enabled: false # 默认不启用TDengine,true=启用,false=不启用 +# driverClassName: com.taosdata.jdbc.TSDBDriver +# url: jdbc:TAOS://xinda:6030/xinda_log?timezone=UTC-8&charset=utf-8 +# username: root +# password: taosdata +# dbName: xinda_log + + initialSize: 5 # 初始连接数 + minIdle: 10 # 最小连接池数量 + maxActive: 20 # 最大连接池数量 + maxWait: 60000 # 配置获取连接等待超时的时间 + timeBetweenEvictionRunsMillis: 60000 # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 + minEvictableIdleTimeMillis: 300000 # 配置一个连接在池中最小生存的时间,单位是毫秒 + maxEvictableIdleTimeMillis: 900000 # 配置一个连接在池中最大生存的时间,单位是毫秒 + validationQuery: SELECT 1 FROM DUAL # 配置检测连接是否有效 + testWhileIdle: true + testOnBorrow: false + testOnReturn: false + webStatFilter: + enabled: true + statViewServlet: + enabled: true + # 设置白名单,不填则允许所有访问 + allow: + url-pattern: /druid/* + # 控制台管理用户名和密码 + login-username: xinda + login-password: xinda + filter: + stat: + enabled: true + # 慢SQL记录 + log-slow-sql: true + slow-sql-millis: 1000 + merge-sql: true + wall: + config: + multi-statement-allow: true + # redis 配置 + redis: + host: 127.0.0.1 # 地址 + port: 6379 # 端口,默认为6379 + database: 11 # 数据库索引 + password: 841503 # 密码 + timeout: 10s # 连接超时时间 + lettuce: + pool: + min-idle: 0 # 连接池中的最小空闲连接 + max-idle: 8 # 连接池中的最大空闲连接 + max-active: 8 # 连接池的最大数据库连接数 + max-wait: -1ms # 连接池最大阻塞等待时间(使用负值表示没有限制) + # mqtt 配置 + mqtt: + username: xinda # 账号 + password: xinda # 密码 + host-url: tcp://127.0.0.1:1883 # mqtt连接tcp地址 + client-id: ${random.int} # 客户端Id,不能相同,采用随机数 ${random.value} + default-topic: test # 默认主题 + timeout: 30 # 超时时间 + keepalive: 30 # 保持连接 + clearSession: true # 清除会话(设置为false,断开连接,重连后使用原来的会话 保留订阅的主题,能接收离线期间的消息) + +# redisson 配置 +redisson: + # redis key前缀 + keyPrefix: + # 线程池数量 + threads: 4 + # Netty线程池数量 + nettyThreads: 8 + # 单节点配置 + singleServerConfig: + # 客户端名称 + clientName: ${xinda.name} + # 最小空闲连接数 + connectionMinimumIdleSize: 8 + # 连接池大小 + connectionPoolSize: 32 + # 连接空闲超时,单位:毫秒 + idleConnectionTimeout: 10000 + # 命令等待超时,单位:毫秒 + timeout: 3000 + # 发布和订阅连接池大小 + subscriptionConnectionPoolSize: 50 + +# sip 配置 +sip: + enabled: true # 是否启用视频监控SIP,true为启用 + ## 本地调试时,绑定网卡局域网IP,设备在同一局域网,设备接入IP填写绑定IP + ## 部署服务端时,默认绑定容器IP,设备接入IP填写服务器公网IP + ip: 10.0.0.5 + port: 5061 # SIP端口(保持默认) + domain: 3402000000 # 由省级、市级、区级、基层编号组成 + id: 34020000002000000001 # 同上,另外增加编号,(可保持默认) + password: 12345678 # 监控设备接入的密码 + +# 日志配置 +logging: + level: + com.xinda: debug + com.yomahub: debug + org.dromara: warn + org.springframework: warn + +# Swagger配置 +swagger: + enabled: true # 是否开启swagger + pathMapping: /dev-api # 请求前缀 + +liteflow: + #FlowExecutor的execute2Future的线程数,默认为64 + main-executor-works: 64 + #FlowExecutor的execute2Future的自定义线程池Builder + main-executor-class: com.xinda.ruleEngine.config.MainExecutorBuilder + #并行节点的线程池Builder + thread-executor-class: com.xinda.ruleEngine.config.WhenExecutorBuilder + rule-source-ext-data-map: + # 应用名称,规则链和脚本组件名称需要一致,不要修改 + applicationName: xinda + #是否开启SQL日志 + sqlLogEnabled: true + # 规则多时,启用快速加载模式 + fast-load: false + #是否开启SQL数据轮询自动刷新机制 默认不开启 + pollingEnabled: false + pollingIntervalSeconds: 60 + pollingStartSeconds: 60 + #以下是chain表的配置 + chainTableName: iot_scene + chainApplicationNameField: application_name + chainNameField: chain_name + elDataField: el_data + chainEnableField: enable + #以下是script表的配置 + scriptTableName: iot_script + scriptApplicationNameField: application_name + scriptIdField: script_id + scriptNameField: script_name + scriptDataField: script_data + scriptTypeField: script_type + scriptLanguageField: script_language + scriptEnableField: enable diff --git a/xinda-admin/src/main/resources/application-prod.yml b/xinda-admin/src/main/resources/application-prod.yml new file mode 100644 index 0000000..9a8b1ca --- /dev/null +++ b/xinda-admin/src/main/resources/application-prod.yml @@ -0,0 +1,163 @@ +# 数据源配置 +spring: + datasource: + type: com.alibaba.druid.pool.DruidDataSource + driverClassName: com.mysql.cj.jdbc.Driver + druid: + # 主库数据源 + master: + url: jdbc:mysql://127.0.0.1:3306/gongkongbang?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8 + username: gongkongbang + password: pRePNKSeawMMpKpJ + # 从库数据源 + slave: + enabled: false # 从数据源开关/默认关闭 + url: + username: + password: + # TDengine数据库 +# tdengine-server: +# enabled: false # 默认不启用TDengine,true=启用,false=不启用 +# driverClassName: com.taosdata.jdbc.TSDBDriver +# url: jdbc:TAOS://xinda:6030/xinda_log?timezone=UTC-8&charset=utf-8 +# username: root +# password: taosdata +# dbName: xinda_log + + initialSize: 5 # 初始连接数 + minIdle: 10 # 最小连接池数量 + maxActive: 20 # 最大连接池数量 + maxWait: 60000 # 配置获取连接等待超时的时间 + timeBetweenEvictionRunsMillis: 60000 # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 + minEvictableIdleTimeMillis: 300000 # 配置一个连接在池中最小生存的时间,单位是毫秒 + maxEvictableIdleTimeMillis: 900000 # 配置一个连接在池中最大生存的时间,单位是毫秒 + validationQuery: SELECT 1 FROM DUAL # 配置检测连接是否有效 + testWhileIdle: true + testOnBorrow: false + testOnReturn: false + webStatFilter: + enabled: true + statViewServlet: + enabled: true + # 设置白名单,不填则允许所有访问 + allow: + url-pattern: /druid/* + # 控制台管理用户名和密码 + login-username: xinda + login-password: xinda + filter: + stat: + enabled: true + # 慢SQL记录 + log-slow-sql: true + slow-sql-millis: 1000 + merge-sql: true + wall: + config: + multi-statement-allow: true + # redis 配置 + redis: + host: localhost # 地址 + port: 6379 # 端口,默认为6379 + database: 0 # 数据库索引 + password: 841503 # 密码 + timeout: 10s # 连接超时时间 + lettuce: + pool: + min-idle: 0 # 连接池中的最小空闲连接 + max-idle: 8 # 连接池中的最大空闲连接 + max-active: 8 # 连接池的最大数据库连接数 + max-wait: -1ms # 连接池最大阻塞等待时间(使用负值表示没有限制) + # mqtt 配置 + mqtt: + username: xinda # 账号(仅用于后端自认证) + password: xinda # 密码(仅用于后端自认证) + host-url: tcp://1.14.72.242:1883 # 连接 Emqx 消息服务器地址 + # host-url: tcp://192.168.1.103:1883 # 内置netty mqtt broker地址 + client-id: ${random.int} # 客户端Id,不能相同,采用随机数 ${random.value} + default-topic: test # 默认主题 + timeout: 30 # 超时时间 + keepalive: 30 # 保持连接 + clearSession: true # 清除会话(设置为false,断开连接,重连后使用原来的会话 保留订阅的主题,能接收离线期间的消息) + +# redisson 配置 +redisson: + # redis key前缀 + keyPrefix: + # 线程池数量 + threads: 4 + # Netty线程池数量 + nettyThreads: 8 + # 单节点配置 + singleServerConfig: + # 客户端名称 + clientName: ${xinda.name} + # 最小空闲连接数 + connectionMinimumIdleSize: 8 + # 连接池大小 + connectionPoolSize: 32 + # 连接空闲超时,单位:毫秒 + idleConnectionTimeout: 10000 + # 命令等待超时,单位:毫秒 + timeout: 3000 + # 发布和订阅连接池大小 + subscriptionConnectionPoolSize: 50 +# sip 配置 +sip: + enabled: true # 是否启用视频监控SIP,true为启用 + ## 本地调试时,绑定网卡局域网IP,设备在同一局域网,设备接入IP填写绑定IP + ## 部署服务端时,默认绑定容器IP,设备接入IP填写服务器公网IP + ip: 1.14.72.242 + # ip: 192.168.1.103 + port: 5061 # SIP端口(保持默认) + domain: 3402000000 # 由省级、市级、区级、基层编号组成 + id: 34020000002000000001 # 同上,另外增加编号,(可保持默认) + password: 12345678 # 监控设备接入的密码 + +# 日志配置 +logging: + level: + com.xinda: debug + com.yomahub: warn + org.dromara: warn + org.springframework: warn + +# Swagger配置 +swagger: + enabled: true # 是否开启swagger + pathMapping: /prod-api # 请求前缀 + + +liteflow: + #FlowExecutor的execute2Future的线程数 + main-executor-works: 128 + #FlowExecutor的execute2Future的自定义线程池Builder + main-executor-class: com.xinda.ruleEngine.config.MainExecutorBuilder + #并行节点的线程池Builder + thread-executor-class: com.xinda.ruleEngine.config.WhenExecutorBuilder + rule-source-ext-data-map: + # 应用名称,规则链和脚本组件名称需要一致,不要修改 + applicationName: xinda + #是否开启SQL日志 + sqlLogEnabled: true + # 规则多时,启用快速加载模式 + fast-load: false + #是否开启SQL数据轮询自动刷新机制 默认不开启 + pollingEnabled: false + pollingIntervalSeconds: 60 + pollingStartSeconds: 60 + #以下是chain表的配置 + chainTableName: iot_scene + chainApplicationNameField: application_name + chainNameField: chain_name + elDataField: el_data + chainEnableField: enable + #以下是script表的配置 + scriptTableName: iot_script + scriptApplicationNameField: application_name + scriptIdField: script_id + scriptNameField: script_name + scriptDataField: script_data + scriptTypeField: script_type + scriptLanguageField: script_language + scriptEnableField: enable diff --git a/xinda-admin/src/main/resources/application.yml b/xinda-admin/src/main/resources/application.yml new file mode 100644 index 0000000..1fb1033 --- /dev/null +++ b/xinda-admin/src/main/resources/application.yml @@ -0,0 +1,159 @@ +# 项目相关配置 +xinda: + name: xinda # 名称 + version: 3.8.5 # 版本 + copyrightYear: 2025 # 版权年份 + demoEnabled: true # 实例演示开关 + # 文件路径,以uploadPath结尾 示例( Windows配置 D:/uploadPath,Linux配置 /uploadPath) + profile: /uploadPath + addressEnabled: true # 获取ip地址开关 + captchaType: char # 验证码类型 math 数组计算 char 字符验证 + +# 开发环境配置 +server: + port: 8080 # 服务器的HTTP端口,默认为8080 + servlet: + context-path: / # 应用的访问路径 + tomcat: + uri-encoding: UTF-8 # tomcat的URI编码 + accept-count: 1000 # 连接数满后的排队数,默认为100 + threads: + max: 800 # tomcat最大线程数,默认为200 + min-spare: 100 # Tomcat启动初始化的线程数,默认值10 + # 基于netty的服务器 + broker: + enabled: true # mqttBroker类型选择, true: 基于netty的mqttBroker和webSocket false: emq的mqttBroker + broker-node: node1 # 服务器集群节点 + port: 1883 + openws: true # 控制webSocket是否开启 + websocket-port: 8083 + websocket-path: /mqtt + keep-alive: 60 # 默认的全部客户端心跳上传时间 + #TCP服务端口 + tcp: + enabled: true # 控制tcp端口是否开启 + port: 8888 + keep-alive: 70 + delimiter: 0x7e + udp: + enabled: true # 控制udp端口是否开启 + port: 8889 + read-idle: 300 # udp保活时间 默认5分钟 + http: + enabled: true + port: 8081 + auth: + type: Basic # 支持Basic,Digest + user: + name: xinda + password: xinda + coap: + enabled: true + port: 5683 + + #平台判断离线时间 是心跳时间的2倍 + device: + platform: + expried: 120 + +# Spring配置 +spring: + # 环境配置,dev=开发环境,prod=生产环境 + profiles: + active: dev # 环境配置,dev=开发环境,prod=生产环境 + # 资源信息 + messages: + # 国际化资源文件路径 + basename: i18n/messages + # 文件上传 + servlet: + multipart: + max-file-size: 10MB # 单个文件大小 + max-request-size: 20MB # 设置总上传的文件大小 + # 服务模块 + devtools: + restart: + enabled: false # 热部署开关 + task: + execution: + pool: + core-size: 20 # 最小连接数 + max-size: 200 # 最大连接数 + queue-capacity: 3000 # 最大容量 + keep-alive: 60 + # 缓存配置 + cache: + enable: true + type: redis # none=不使用缓存 redis=使用redis缓存 + ttl: 60 # 缓存过期时间(默认60秒) + +#集群配置 +cluster: + enable: true + type: redis + +# 用户配置 +user: + password: + maxRetryCount: 5 # 密码最大错误次数 + lockTime: 10 # 密码锁定时间(默认10分钟) + +# token配置 +token: + header: Authorization # 令牌自定义标识 + secret: abcdefghijklxindasmartrstuvwxyz # 令牌密钥 + expireTime: 1440 # 令牌有效期(默认30分钟)1440为一天 + +# MyBatis配置 +#mybatis: +# typeAliasesPackage: com.xinda.**.domain # 搜索指定包别名 +# mapperLocations: classpath*:mapper/**/*Mapper.xml # 配置mapper的扫描,找到所有的mapper.xml映射文件 +# configLocation: classpath:mybatis/mybatis-config.xml # 加载全局的配置文件 + +# mybatis-plus配置 +mybatis-plus: + typeAliasesPackage: com.xinda.**.domain # 搜索指定包别名 + mapperLocations: classpath*:mapper/**/*Mapper.xml # 配置mapper的扫描,找到所有的mapper.xml映射文件 + configLocation: classpath:mybatis/mybatis-config.xml # 加载全局的配置文件 + global-config: + db-config: + id-type: AUTO # 自增 ID + logic-delete-value: 1 # 逻辑已删除值(默认为 1) + logic-not-delete-value: 0 # 逻辑未删除值(默认为 0) + +# PageHelper分页插件 +pagehelper: + helperDialect: mysql + supportMethodsArguments: true + params: count=countSql + +# 防止XSS攻击 +xss: + enabled: true # 过滤开关 + excludes: /system/notice # 排除链接(多个用逗号分隔) + urlPatterns: /system/*,/monitor/*,/tool/* # 匹配链接 + +# EMQX API配置需要在运行emqx之后去EMQX管理后S台手动创建API Key和Secret,并配置到application.yml中 +emqx: + host: localhost # EMQX服务器地址 + port: 8083 + ApiKey: ApiKey # EMQX API Key + ApiSecret: ApiSecret # EMQX API Secret + +forest: # Forest配置 版本为1.5.36 + backend: okhttp3 # 后端HTTP框架(默认为 okhttp3) + max-connections: 1000 # 连接池最大连接数(默认为 500) + max-route-connections: 500 # 每个路由的最大连接数(默认为 500) + max-request-queue-size: 100 # [自v1.5.22版本起可用] 最大请求等待队列大小 + max-async-thread-size: 300 # [自v1.5.21版本起可用] 最大异步线程数 + max-async-queue-size: 16 # [自v1.5.22版本起可用] 最大异步线程池队列大小 + connect-timeout: 3000 # 连接超时时间,单位为毫秒(默认为 timeout) + read-timeout: 3000 # 数据读取超时时间,单位为毫秒(默认为 timeout) + max-retry-count: 0 # 请求失败后重试次数(默认为 0 次不重试) + ssl-protocol: TLS # 单向验证的HTTPS的默认TLS协议(默认为 TLS) + log-enabled: true # 打开或关闭日志(默认为 true) + log-request: true # 打开/关闭Forest请求日志(默认为 true) + log-response-status: true # 打开/关闭Forest响应状态日志(默认为 true) + log-response-content: true # 打开/关闭Forest响应内容日志(默认为 false) + async-mode: platform # [自v1.5.27版本起可用] 异步模式(默认为 platform) + diff --git a/xinda-admin/src/main/resources/banner.txt b/xinda-admin/src/main/resources/banner.txt new file mode 100644 index 0000000..8e10ed6 --- /dev/null +++ b/xinda-admin/src/main/resources/banner.txt @@ -0,0 +1,2 @@ +Application Version: ${xinda.version} +Spring Boot Version: ${spring-boot.version} \ No newline at end of file diff --git a/xinda-admin/src/main/resources/i18n/messages.properties b/xinda-admin/src/main/resources/i18n/messages.properties new file mode 100644 index 0000000..0831261 --- /dev/null +++ b/xinda-admin/src/main/resources/i18n/messages.properties @@ -0,0 +1,210 @@ +#\u9519\u8BEF\u6D88\u606F +not.null=* \u5FC5\u987B\u586B\u5199 +user.jcaptcha.error=\u9A8C\u8BC1\u7801\u9519\u8BEF +user.jcaptcha.expire=\u9A8C\u8BC1\u7801\u5DF2\u5931\u6548 +user.not.exists=\u7528\u6237\u4E0D\u5B58\u5728/\u5BC6\u7801\u9519\u8BEF +user.password.not.match=\u7528\u6237\u4E0D\u5B58\u5728/\u5BC6\u7801\u9519\u8BEF +user.password.retry.limit.count=\u5BC6\u7801\u8F93\u5165\u9519\u8BEF{0}\u6B21 +user.password.retry.limit.exceed=\u5BC6\u7801\u8F93\u5165\u9519\u8BEF{0}\u6B21\uFF0C\u5E10\u6237\u9501\u5B9A{1}\u5206\u949F +user.password.delete=\u5BF9\u4E0D\u8D77\uFF0C\u60A8\u7684\u8D26\u53F7\u5DF2\u88AB\u5220\u9664 +user.blocked=\u7528\u6237\u5DF2\u5C01\u7981\uFF0C\u8BF7\u8054\u7CFB\u7BA1\u7406\u5458 +role.blocked=\u89D2\u8272\u5DF2\u5C01\u7981\uFF0C\u8BF7\u8054\u7CFB\u7BA1\u7406\u5458 +user.logout.success=\u9000\u51FA\u6210\u529F + +length.not.valid=\u957F\u5EA6\u5FC5\u987B\u5728{min}\u5230{max}\u4E2A\u5B57\u7B26\u4E4B\u95F4 + +user.username.not.valid=* 2\u523020\u4E2A\u6C49\u5B57\u3001\u5B57\u6BCD\u3001\u6570\u5B57\u6216\u4E0B\u5212\u7EBF\u7EC4\u6210\uFF0C\u4E14\u5FC5\u987B\u4EE5\u975E\u6570\u5B57\u5F00\u5934 +user.password.not.valid=* 5-50\u4E2A\u5B57\u7B26 + +user.email.not.valid=\u90AE\u7BB1\u683C\u5F0F\u9519\u8BEF +user.mobile.phone.number.not.valid=\u624B\u673A\u53F7\u683C\u5F0F\u9519\u8BEF +user.login.success=\u767B\u5F55\u6210\u529F +user.register.success=\u6CE8\u518C\u6210\u529F +user.notfound=\u8BF7\u91CD\u65B0\u767B\u5F55 +user.forcelogout=\u7BA1\u7406\u5458\u5F3A\u5236\u9000\u51FA\uFF0C\u8BF7\u91CD\u65B0\u767B\u5F55 +user.unknown.error=\u672A\u77E5\u9519\u8BEF\uFF0C\u8BF7\u91CD\u65B0\u767B\u5F55 + +##\u6743\u9650 +no.permission=\u60A8\u6CA1\u6709\u6570\u636E\u7684\u6743\u9650\uFF0C\u8BF7\u8054\u7CFB\u7BA1\u7406\u5458\u6DFB\u52A0\u6743\u9650 [{0}] +no.create.permission=\u60A8\u6CA1\u6709\u521B\u5EFA\u6570\u636E\u7684\u6743\u9650\uFF0C\u8BF7\u8054\u7CFB\u7BA1\u7406\u5458\u6DFB\u52A0\u6743\u9650 [{0}] +no.update.permission=\u60A8\u6CA1\u6709\u4FEE\u6539\u6570\u636E\u7684\u6743\u9650\uFF0C\u8BF7\u8054\u7CFB\u7BA1\u7406\u5458\u6DFB\u52A0\u6743\u9650 [{0}] +no.delete.permission=\u60A8\u6CA1\u6709\u5220\u9664\u6570\u636E\u7684\u6743\u9650\uFF0C\u8BF7\u8054\u7CFB\u7BA1\u7406\u5458\u6DFB\u52A0\u6743\u9650 [{0}] +no.export.permission=\u60A8\u6CA1\u6709\u5BFC\u51FA\u6570\u636E\u7684\u6743\u9650\uFF0C\u8BF7\u8054\u7CFB\u7BA1\u7406\u5458\u6DFB\u52A0\u6743\u9650 [{0}] +no.view.permission=\u60A8\u6CA1\u6709\u67E5\u770B\u6570\u636E\u7684\u6743\u9650\uFF0C\u8BF7\u8054\u7CFB\u7BA1\u7406\u5458\u6DFB\u52A0\u6743\u9650 [{0}] + +##\u6587\u4EF6\u4E0A\u4F20\u6D88\u606F +upload.exceed.maxSize=\u4E0A\u4F20\u7684\u6587\u4EF6\u5927\u5C0F\u8D85\u51FA\u9650\u5236\u7684\u6587\u4EF6\u5927\u5C0F\uFF01
\u5141\u8BB8\u7684\u6587\u4EF6\u6700\u5927\u5927\u5C0F\u662F\uFF1A{0}MB\uFF01 +upload.filename.exceed.length=\u4E0A\u4F20\u7684\u6587\u4EF6\u540D\u6700\u957F{0}\u4E2A\u5B57\u7B26 +upload.success=\u4E0A\u4F20\u6210\u529F + +##\u6587\u4EF6\u4E0B\u8F7D\u6D88\u606F +download.filename.not.valid=\u6587\u4EF6\u540D\u79F0[{}]\u975E\u6CD5\uFF0C\u4E0D\u5141\u8BB8\u4E0B\u8F7D +download.file.failed=\u4E0B\u8F7D\u6587\u4EF6\u5931\u8D25 +download.resource.not.valid=\u8D44\u6E90\u6587\u4EF6[{}]\u975E\u6CD5\uFF0C\u4E0D\u5141\u8BB8\u4E0B\u8F7D + +##Dept +dept.add.failed.name.exists=\u65B0\u589E\u673A\u6784[{}]\u5931\u8D25\uFF0C\u673A\u6784\u540D\u79F0\u5DF2\u5B58\u5728 +dept.update.failed.name.exists=\u4FEE\u6539\u673A\u6784[{}]\u5931\u8D25\uFF0C\u673A\u6784\u540D\u79F0\u5DF2\u5B58\u5728 +dept.update.failed.parent.not.valid=\u4FEE\u6539\u673A\u6784[{}]\u5931\u8D25\uFF0C\u4E0A\u7EA7\u673A\u6784\u4E0D\u80FD\u662F\u81EA\u5DF1 +dept.update.failed.child.not.valid=\u8BE5\u673A\u6784\u5305\u542B\u672A\u505C\u7528\u7684\u5B50\u673A\u6784\uFF01 +dept.delete.failed.child.exists=\u5B58\u5728\u4E0B\u7EA7\u673A\u6784\uFF0C\u4E0D\u5141\u8BB8\u5220\u9664 +dept.delete.failed.user.exists=\u673A\u6784\u5B58\u5728\u7528\u6237\uFF0C\u4E0D\u5141\u8BB8\u5220\u9664 + +##Dict +dict.add.failed.type.exists=\u65B0\u589E\u5B57\u5178[{}]\u5931\u8D25\uFF0C\u5B57\u5178\u7C7B\u578B\u5DF2\u5B58\u5728 +dict.update.failed.type.exists=\u65B0\u589E\u5B57\u5178[{}]\u5931\u8D25\uFF0C\u5B57\u5178\u7C7B\u578B\u5DF2\u5B58\u5728 + +##Index +index.welcome.message=\u6B22\u8FCE\u4F7F\u7528{}\u540E\u53F0\u7BA1\u7406\u6846\u67B6\uFF0C\u5F53\u524D\u7248\u672C\uFF1Av{}\uFF0C\u8BF7\u901A\u8FC7\u524D\u7AEF\u5730\u5740\u8BBF\u95EE\u3002 + +##Menu +menu.add.failed.name.exists=\u65B0\u589E\u83DC\u5355[{}]\u5931\u8D25\uFF0C\u83DC\u5355\u540D\u79F0\u5DF2\u5B58\u5728 +menu.add.failed.path.not.valid=\u65B0\u589E\u83DC\u5355[{}]\u5931\u8D25\uFF0C\u5730\u5740\u5FC5\u987B\u4EE5http(s)://\u5F00\u5934 +menu.update.failed.name.exists=\u4FEE\u6539\u83DC\u5355[{}]\u5931\u8D25\uFF0C\u83DC\u5355\u540D\u79F0\u5DF2\u5B58\u5728 +menu.update.failed.path.not.valid=\u4FEE\u6539\u83DC\u5355[{}]\u5931\u8D25\uFF0C\u5730\u5740\u5FC5\u987B\u4EE5http(s)://\u5F00\u5934 +menu.update.failed.parent.not.valid=\u4FEE\u6539\u83DC\u5355[{}]\u5931\u8D25\uFF0C\u4E0A\u7EA7\u83DC\u5355\u4E0D\u80FD\u9009\u62E9\u81EA\u5DF1 +menu.delete.failed.child.exists=\u5B58\u5728\u5B50\u83DC\u5355,\u4E0D\u5141\u8BB8\u5220\u9664 +menu.delete.failed.role.exists=\u83DC\u5355\u5DF2\u5206\u914D,\u4E0D\u5141\u8BB8\u5220\u9664 + +##Post +post.add.failed.name.exists=\u65B0\u589E\u5C97\u4F4D[{}]\u5931\u8D25\uFF0C\u5C97\u4F4D\u540D\u79F0\u5DF2\u5B58\u5728 +post.add.failed.code.exists=\u65B0\u589E\u5C97\u4F4D[{}]\u5931\u8D25\uFF0C\u5C97\u4F4D\u7F16\u7801\u5DF2\u5B58\u5728 +post.update.failed.name.exists=\u4FEE\u6539\u5C97\u4F4D[{}]\u5931\u8D25\uFF0C\u5C97\u4F4D\u540D\u79F0\u5DF2\u5B58\u5728 +post.update.failed.code.exists=\u4FEE\u6539\u5C97\u4F4D[{}]\u5931\u8D25\uFF0C\u5C97\u4F4D\u7F16\u7801\u5DF2\u5B58\u5728 + +##User +user.username.exists=\u7CFB\u7EDF\u8D26\u53F7\u540D\u79F0\u5DF2\u5B58\u5728\uFF0C\u8BF7\u4FEE\u6539\u540E\u91CD\u8BD5 +user.password.differ=\u4E24\u6B21\u5BC6\u7801\u4E0D\u4E00\u81F4\uFF0C\u8BF7\u91CD\u65B0\u8F93\u5165 +user.add.failed.name.exists=\u65B0\u589E\u7528\u6237[{}]\u5931\u8D25\uFF0C\u767B\u5F55\u8D26\u53F7\u5DF2\u5B58\u5728 +user.add.failed.phone.exists=\u65B0\u589E\u7528\u6237[{}]\u5931\u8D25\uFF0C\u624B\u673A\u53F7\u7801\u5DF2\u5B58\u5728 +user.add.failed.email.exists=\u65B0\u589E\u7528\u6237[{}]\u5931\u8D25\uFF0C\u90AE\u7BB1\u8D26\u53F7\u5DF2\u5B58\u5728 +user.update.failed.password.wrong=\u4FEE\u6539\u5BC6\u7801\u5931\u8D25\uFF0C\u65E7\u5BC6\u7801\u9519\u8BEF +user.update.failed.password.repeat=\u65B0\u5BC6\u7801\u4E0D\u80FD\u4E0E\u65E7\u5BC6\u7801\u76F8\u540C +user.update.password.failed=\u4FEE\u6539\u5BC6\u7801\u5F02\u5E38\uFF0C\u8BF7\u8054\u7CFB\u7BA1\u7406\u5458 +user.update.failed.name.exists=\u65B0\u589E\u7528\u6237[{}]\u5931\u8D25\uFF0C\u767B\u5F55\u8D26\u53F7\u5DF2\u5B58\u5728 +user.update.failed.phone.exists=\u4FEE\u6539\u7528\u6237[{}]\u5931\u8D25\uFF0C\u624B\u673A\u53F7\u7801\u5DF2\u5B58\u5728 +user.update.failed.email.exists=\u4FEE\u6539\u7528\u6237[{}]\u5931\u8D25\uFF0C\u90AE\u7BB1\u8D26\u53F7\u5DF2\u5B58\u5728 +user.update.failed=\u4FEE\u6539\u4E2A\u4EBA\u4FE1\u606F\u5F02\u5E38\uFF0C\u8BF7\u8054\u7CFB\u7BA1\u7406\u5458 +user.delete.failed=\u5F53\u524D\u7528\u6237\u4E0D\u80FD\u5220\u9664 +user.upload.avatar.failed=\u4E0A\u4F20\u56FE\u7247\u5F02\u5E38\uFF0C\u8BF7\u8054\u7CFB\u7BA1\u7406\u5458 +user.not.login=\u8BF7\u767B\u5F55\u540E\u91CD\u8BD5 +user.access.denied=\u7528\u6237\u62D2\u7EDD\u8BBF\u95EE + +##Role +role.add.manager.failed=\u4E0D\u5141\u8BB8\u8BBE\u7F6E\u7BA1\u7406\u5458\u89D2\u8272\u6807\u8BC6 +role.add.failed.name.exists=\u65B0\u589E\u89D2\u8272[{}]\u5931\u8D25\uFF0C\u89D2\u8272\u540D\u79F0\u5DF2\u5B58\u5728 +role.add.failed.key.exists=\u65B0\u589E\u89D2\u8272[{}]\u5931\u8D25\uFF0C\u89D2\u8272\u6743\u9650\u5DF2\u5B58\u5728 +role.update.failed.name.exists=\u4FEE\u6539\u89D2\u8272[{}]\u5931\u8D25\uFF0C\u89D2\u8272\u540D\u79F0\u5DF2\u5B58\u5728 +role.update.failed.key.exists=\u4FEE\u6539\u89D2\u8272[{}]\u5931\u8D25\uFF0C\u89D2\u8272\u6743\u9650\u5DF2\u5B58\u5728 +role.update.failed=\u4FEE\u6539\u89D2\u8272[{}]\u5931\u8D25\uFF0C\u8BF7\u8054\u7CFB\u7BA1\u7406\u5458 + +##Import +import.failed.file.null=\u5BFC\u5165\u5931\u8D25\uFF0C\u8BF7\u5148\u4E0A\u4F20\u6587\u4EF6\uFF01 +import.failed.data.null=\u5BFC\u5165\u5931\u8D25\uFF0C\u5BFC\u5165\u6570\u636E\u4E3A\u7A7A\uFF01 +import.failed.device.name.null=\u5BFC\u5165\u5931\u8D25\uFF0C\u6A21\u677F\u91CC\u8BBE\u5907\u540D\u79F0\u4E0D\u80FD\u4E3A\u7A7A\uFF01 +import.success=\u5BFC\u5165\u6210\u529F + +##General +success=\u6210\u529F +fail=\u5931\u8D25 +query.success=\u67E5\u8BE2\u6210\u529F +operate.success=\u64CD\u4F5C\u6210\u529F +create.success=\u521B\u5EFA\u6210\u529F +create.failed=\u521B\u5EFA\u5931\u8D25 +save.success=\u4FDD\u5B58\u6210\u529F +save.failed=\u4FDD\u5B58\u5931\u8D25 +authorization.success=\u6388\u6743\u6210\u529F + +##Email +email.format.error=\u90AE\u7BB1\u683C\u5F0F\u9519\u8BEF +email.verification.code.send=\u90AE\u7BB1\u9A8C\u8BC1\u7801\u5DF2\u53D1\u9001 + +##Firmware +firmware.task.upgrade.failed.time.not.valid=\u9884\u5B9A\u5347\u7EA7\u65F6\u95F4\u5E94\u5927\u4E8E\u5F53\u524D\u65F6\u95F4 +##Media +media.record.query.failed=\u8FDE\u63A5\u8D85\u65F6\u6216\u53D1\u751F\u9519\u8BEF\uFF0C\u672A\u83B7\u53D6\u5230\u6570\u636E +##Modbus +modbus.type.null=\u7C7B\u578B\u4E3A\u7A7A +##Netty +netty.client.not.exists=\u5BA2\u6237\u7AEF\u4E0D\u5B58\u5728 +##Runtime +runtime.message.id.null=\u6D88\u606Fid\u4E3A\u7A7A +##Wechat +wechat.verify.type.null=\u8BF7\u4F20\u5165\u9A8C\u8BC1\u65B9\u5F0F +wechat.bind.message.id.null=\u8BF7\u4F20\u5165\u7ED1\u5B9A\u4FE1\u606FID +##AuthResource +auth.resource.product.query.success=\u67E5\u8BE2\u4EA7\u54C1\u5217\u8868\u6210\u529F +##Device +device.user.id.null=\u7528\u6237ID\u4E0D\u80FD\u4E3A\u7A7A +device.product.id.null=\u8BBE\u5907\u7F16\u53F7\u548C\u4EA7\u54C1ID\u4E0D\u80FD\u4E3A\u7A7A +device.dept.id.null=\u8BF7\u9009\u62E9\u5206\u914D\u673A\u6784 +device.id.null=\u8BF7\u9009\u62E9\u8BBE\u5907 +##DeviceJob +job.add.failed.cron.not.valid=\u65B0\u589E\u4EFB\u52A1[{}]\u5931\u8D25\uFF0CCron\u8868\u8FBE\u5F0F\u4E0D\u6B63\u786E +job.add.failed.rmi.not.valid=\u65B0\u589E\u4EFB\u52A1[{}]\u5931\u8D25\uFF0C\u76EE\u6807\u5B57\u7B26\u4E32\u4E0D\u5141\u8BB8'rmi'\u8C03\u7528 +job.add.failed.ldap.not.valid=\u65B0\u589E\u4EFB\u52A1[{}]\u5931\u8D25\uFF0C\u76EE\u6807\u5B57\u7B26\u4E32\u4E0D\u5141\u8BB8'ldap(s)'\u8C03\u7528 +job.add.failed.http.not.valid=\u65B0\u589E\u4EFB\u52A1[{}]\u5931\u8D25\uFF0C\u76EE\u6807\u5B57\u7B26\u4E32\u4E0D\u5141\u8BB8'http(s)'\u8C03\u7528 +job.add.failed.string.error=\u65B0\u589E\u4EFB\u52A1[{}]\u5931\u8D25\uFF0C\u76EE\u6807\u5B57\u7B26\u4E32\u5B58\u5728\u8FDD\u89C4 +job.add.failed.string.not.valid=\u65B0\u589E\u4EFB\u52A1[{}]\u5931\u8D25\uFF0C\u76EE\u6807\u5B57\u7B26\u4E32\u4E0D\u5728\u767D\u540D\u5355\u5185 +job.update.failed.cron.not.valid=\u4FEE\u6539\u4EFB\u52A1[{}]\u5931\u8D25\uFF0CCron\u8868\u8FBE\u5F0F\u4E0D\u6B63\u786E +job.update.failed.rmi.not.valid=\u4FEE\u6539\u4EFB\u52A1[{}]\u5931\u8D25\uFF0C\u76EE\u6807\u5B57\u7B26\u4E32\u4E0D\u5141\u8BB8'rmi'\u8C03\u7528 +job.update.failed.ldap.not.valid=\u4FEE\u6539\u4EFB\u52A1[{}]\u5931\u8D25\uFF0C\u76EE\u6807\u5B57\u7B26\u4E32\u4E0D\u5141\u8BB8'ldap(s)'\u8C03\u7528 +job.update.failed.http.not.valid=\u4FEE\u6539\u4EFB\u52A1[{}]\u5931\u8D25\uFF0C\u76EE\u6807\u5B57\u7B26\u4E32\u4E0D\u5141\u8BB8'http(s)'\u8C03\u7528 +job.update.failed.string.error=\u4FEE\u6539\u4EFB\u52A1[{}]\u5931\u8D25\uFF0C\u76EE\u6807\u5B57\u7B26\u4E32\u5B58\u5728\u8FDD\u89C4 +job.update.failed.string.not.valid=\u4FEE\u6539\u4EFB\u52A1[{}]\u5931\u8D25\uFF0C\u76EE\u6807\u5B57\u7B26\u4E32\u4E0D\u5728\u767D\u540D\u5355\u5185 +job.not.exists=\u4EFB\u52A1\u4E0D\u5B58\u5728\u6216\u5DF2\u8FC7\u671F +##DeviceUser +device.user.delete.failed.user.not.valid=\u8BBE\u5907\u6240\u6709\u8005\u4E0D\u80FD\u5220\u9664 +##GoviewProject +goview.project.data.save.failed.id.null=\u6CA1\u6709\u8BE5\u9879\u76EEID +goview.project.data.execute.sql.failed=\u8BF7\u7F16\u5199sql\u8BED\u53E5 +##ThingsModel +things.model.identifier.repeat=\u4EA7\u54C1\u4E0B\u7684\u6807\u8BC6\u7B26\u4E0D\u80FD\u91CD\u590D +things.model.import.failed.identifier.repeat=[{}]\u6761\u6570\u636E\u672A\u5BFC\u5165\uFF0C\u6807\u8BC6\u7B26\u91CD\u590D +##MQTT +mqtt.unauthorized=mqtt\u8D26\u53F7\u548C\u5BC6\u7801\u4E0E\u8BA4\u8BC1\u670D\u52A1\u5668\u914D\u7F6E\u4E0D\u5339\u914D +##Oauth +oauth.response.type.not.valid=response_type\u53C2\u6570\u503C\u53EA\u5141\u8BB8code\u548Ctoken +oauth.grant.type.null=\u672A\u77E5\u6388\u6743\u7C7B\u578B +oauth.grant.type.implicit.not.support=Token\u63A5\u53E3\u4E0D\u652F\u6301implicit\u6388\u6743\u6A21\u5F0F +oauth.access.token.null=\u8BBF\u95EE\u4EE4\u724C\u4E0D\u80FD\u4E3A\u7A7A +obtain.basic.authorization.failed=client_id\u6216client_secret\u672A\u6B63\u786E\u4F20\u9012 +##Record +record.app.null=app\u4E0D\u80FD\u4E3A\u7A7A +record.stream.null=stream\u4E0D\u80FD\u4E3A\u7A7A +record.time.not.valid=\u9519\u8BEF\u7684\u5F00\u59CB\u65F6\u95F4\u6216\u7ED3\u675F\u65F6\u95F4 +record.file.null=\u672A\u627E\u5230\u89C6\u9891\u6587\u4EF6 + +##ErrorCodeConstants +app.not.found=App \u4E0D\u5B58\u5728 +app.is.disable=App \u5DF2\u7ECF\u88AB\u7981\u7528 +app.exist.order.cant.delete=\u652F\u4ED8\u5E94\u7528\u5B58\u5728\u652F\u4ED8\u8BA2\u5355\uFF0C\u65E0\u6CD5\u5220\u9664 +app.exist.refund.cant.delete=\u652F\u4ED8\u5E94\u7528\u5B58\u5728\u9000\u6B3E\u8BA2\u5355\uFF0C\u65E0\u6CD5\u5220\u9664 +channel.not.found=\u652F\u4ED8\u6E20\u9053\u7684\u914D\u7F6E\u4E0D\u5B58\u5728 +channel.is.disable=\u652F\u4ED8\u6E20\u9053\u5DF2\u7ECF\u7981\u7528 +channel.exists.same.channel.error=\u5DF2\u5B58\u5728\u76F8\u540C\u7684\u6E20\u9053 +order.not.found=\u652F\u4ED8\u8BA2\u5355\u4E0D\u5B58\u5728 +order.status.is.not.waiting=\u652F\u4ED8\u8BA2\u5355\u4E0D\u5904\u4E8E\u5F85\u652F\u4ED8 +order.status.is.success=\u8BA2\u5355\u5DF2\u652F\u4ED8\uFF0C\u8BF7\u5237\u65B0\u9875\u9762 +order.is.expired=\u652F\u4ED8\u8BA2\u5355\u5DF2\u7ECF\u8FC7\u671F +order.submit.channel.error=\u53D1\u8D77\u652F\u4ED8\u62A5\u9519\uFF0C\u9519\u8BEF\u7801\uFF1A{}\uFF0C\u9519\u8BEF\u63D0\u793A\uFF1A{} +order.refund.fail.status.error=\u652F\u4ED8\u8BA2\u5355\u9000\u6B3E\u5931\u8D25\uFF0C\u539F\u56E0\uFF1A\u72B6\u6001\u4E0D\u662F\u5DF2\u652F\u4ED8\u6216\u5DF2\u9000\u6B3E +order.extension.not.found=\u652F\u4ED8\u4EA4\u6613\u62D3\u5C55\u5355\u4E0D\u5B58\u5728 +order.extension.status.is.not.waiting=\u652F\u4ED8\u4EA4\u6613\u62D3\u5C55\u5355\u4E0D\u5904\u4E8E\u5F85\u652F\u4ED8 +order.extension.is.paid=\u8BA2\u5355\u5DF2\u652F\u4ED8\uFF0C\u8BF7\u7B49\u5F85\u652F\u4ED8\u7ED3\u679C +refund.price.exceed=\u9000\u6B3E\u91D1\u989D\u8D85\u8FC7\u8BA2\u5355\u53EF\u9000\u6B3E\u91D1\u989D +refund.has.refunding=\u5DF2\u7ECF\u6709\u9000\u6B3E\u5728\u5904\u7406\u4E2D +refund.exists=\u5DF2\u7ECF\u5B58\u5728\u9000\u6B3E\u5355 +refund.not.found=\u652F\u4ED8\u9000\u6B3E\u5355\u4E0D\u5B58\u5728 +refund.statue.is.not.waiting=\u652F\u4ED8\u9000\u6B3E\u5355\u4E0D\u5904\u4E8E\u5F85\u9000\u6B3E +demo.order.not.found=\u793A\u4F8B\u8BA2\u5355\u4E0D\u5B58\u5728 +demo.order.update.paid.status.not.unpaid=\u793A\u4F8B\u8BA2\u5355\u66F4\u65B0\u652F\u4ED8\u72B6\u6001\u5931\u8D25\uFF0C\u8BA2\u5355\u4E0D\u662F\u3010\u672A\u652F\u4ED8\u3011\u72B6\u6001 +demo.order.update.paid.fail.pay.order.id.error=\u793A\u4F8B\u8BA2\u5355\u66F4\u65B0\u652F\u4ED8\u72B6\u6001\u5931\u8D25\uFF0C\u652F\u4ED8\u5355\u7F16\u53F7\u4E0D\u5339\u914D +demo.order.update.paid.fail.pay.order.status.not.success=\u793A\u4F8B\u8BA2\u5355\u66F4\u65B0\u652F\u4ED8\u72B6\u6001\u5931\u8D25\uFF0C\u652F\u4ED8\u5355\u72B6\u6001\u4E0D\u662F\u3010\u652F\u4ED8\u6210\u529F\u3011\u72B6\u6001 +demo.order.update.paid.fail.pay.price.not.match=\u793A\u4F8B\u8BA2\u5355\u66F4\u65B0\u652F\u4ED8\u72B6\u6001\u5931\u8D25\uFF0C\u652F\u4ED8\u5355\u91D1\u989D\u4E0D\u5339\u914D +demo.order.refund.fail.not.paid=\u53D1\u8D77\u9000\u6B3E\u5931\u8D25\uFF0C\u793A\u4F8B\u8BA2\u5355\u672A\u652F\u4ED8 +demo.order.refund.fail.refunded=\u53D1\u8D77\u9000\u6B3E\u5931\u8D25\uFF0C\u793A\u4F8B\u8BA2\u5355\u5DF2\u9000\u6B3E +demo.order.refund.fail.refund.not.found=\u53D1\u8D77\u9000\u6B3E\u5931\u8D25\uFF0C\u9000\u6B3E\u8BA2\u5355\u4E0D\u5B58\u5728 +demo.order.refund.fail.refund.not.success=\u53D1\u8D77\u9000\u6B3E\u5931\u8D25\uFF0C\u9000\u6B3E\u8BA2\u5355\u672A\u9000\u6B3E\u6210\u529F +demo.order.refund.fail.refund.order.id.error=\u53D1\u8D77\u9000\u6B3E\u5931\u8D25\uFF0C\u9000\u6B3E\u5355\u7F16\u53F7\u4E0D\u5339\u914D +demo.order.refund.fail.refund.price.not.match=\u53D1\u8D77\u9000\u6B3E\u5931\u8D25\uFF0C\u9000\u6B3E\u5355\u91D1\u989D\u4E0D\u5339\u914D diff --git a/xinda-admin/src/main/resources/i18n/messages_en_US.properties b/xinda-admin/src/main/resources/i18n/messages_en_US.properties new file mode 100644 index 0000000..2d300aa --- /dev/null +++ b/xinda-admin/src/main/resources/i18n/messages_en_US.properties @@ -0,0 +1,211 @@ +#\u9519\u8BEF\u6D88\u606F +not.null=* \u5FC5\u987B\u586B\u5199 +user.jcaptcha.error=\u9A8C\u8BC1\u7801\u9519\u8BEF +user.jcaptcha.expire=\u9A8C\u8BC1\u7801\u5DF2\u5931\u6548 +user.not.exists=\u7528\u6237\u4E0D\u5B58\u5728/\u5BC6\u7801\u9519\u8BEF +user.password.not.match=\u7528\u6237\u4E0D\u5B58\u5728/\u5BC6\u7801\u9519\u8BEF +user.password.retry.limit.count=\u5BC6\u7801\u8F93\u5165\u9519\u8BEF{0}\u6B21 +user.password.retry.limit.exceed=\u5BC6\u7801\u8F93\u5165\u9519\u8BEF{0}\u6B21\uFF0C\u5E10\u6237\u9501\u5B9A{1}\u5206\u949F +user.password.delete=\u5BF9\u4E0D\u8D77\uFF0C\u60A8\u7684\u8D26\u53F7\u5DF2\u88AB\u5220\u9664 +user.blocked=\u7528\u6237\u5DF2\u5C01\u7981\uFF0C\u8BF7\u8054\u7CFB\u7BA1\u7406\u5458 +role.blocked=\u89D2\u8272\u5DF2\u5C01\u7981\uFF0C\u8BF7\u8054\u7CFB\u7BA1\u7406\u5458 +user.logout.success=\u9000\u51FA\u6210\u529F + +length.not.valid=\u957F\u5EA6\u5FC5\u987B\u5728{min}\u5230{max}\u4E2A\u5B57\u7B26\u4E4B\u95F4 + +user.username.not.valid=* 2\u523020\u4E2A\u6C49\u5B57\u3001\u5B57\u6BCD\u3001\u6570\u5B57\u6216\u4E0B\u5212\u7EBF\u7EC4\u6210\uFF0C\u4E14\u5FC5\u987B\u4EE5\u975E\u6570\u5B57\u5F00\u5934 +user.password.not.valid=* 5-50\u4E2A\u5B57\u7B26 + +user.email.not.valid=\u90AE\u7BB1\u683C\u5F0F\u9519\u8BEF +user.mobile.phone.number.not.valid=\u624B\u673A\u53F7\u683C\u5F0F\u9519\u8BEF +user.login.success=\u767B\u5F55\u6210\u529F +user.register.success=\u6CE8\u518C\u6210\u529F +user.notfound=\u8BF7\u91CD\u65B0\u767B\u5F55 +user.forcelogout=\u7BA1\u7406\u5458\u5F3A\u5236\u9000\u51FA\uFF0C\u8BF7\u91CD\u65B0\u767B\u5F55 +user.unknown.error=\u672A\u77E5\u9519\u8BEF\uFF0C\u8BF7\u91CD\u65B0\u767B\u5F55 + +##\u6743\u9650 +no.permission=\u60A8\u6CA1\u6709\u6570\u636E\u7684\u6743\u9650\uFF0C\u8BF7\u8054\u7CFB\u7BA1\u7406\u5458\u6DFB\u52A0\u6743\u9650 [{0}] +no.create.permission=\u60A8\u6CA1\u6709\u521B\u5EFA\u6570\u636E\u7684\u6743\u9650\uFF0C\u8BF7\u8054\u7CFB\u7BA1\u7406\u5458\u6DFB\u52A0\u6743\u9650 [{0}] +no.update.permission=\u60A8\u6CA1\u6709\u4FEE\u6539\u6570\u636E\u7684\u6743\u9650\uFF0C\u8BF7\u8054\u7CFB\u7BA1\u7406\u5458\u6DFB\u52A0\u6743\u9650 [{0}] +no.delete.permission=\u60A8\u6CA1\u6709\u5220\u9664\u6570\u636E\u7684\u6743\u9650\uFF0C\u8BF7\u8054\u7CFB\u7BA1\u7406\u5458\u6DFB\u52A0\u6743\u9650 [{0}] +no.export.permission=\u60A8\u6CA1\u6709\u5BFC\u51FA\u6570\u636E\u7684\u6743\u9650\uFF0C\u8BF7\u8054\u7CFB\u7BA1\u7406\u5458\u6DFB\u52A0\u6743\u9650 [{0}] +no.view.permission=\u60A8\u6CA1\u6709\u67E5\u770B\u6570\u636E\u7684\u6743\u9650\uFF0C\u8BF7\u8054\u7CFB\u7BA1\u7406\u5458\u6DFB\u52A0\u6743\u9650 [{0}] + +##\u6587\u4EF6\u4E0A\u4F20\u6D88\u606F +upload.exceed.maxSize=\u4E0A\u4F20\u7684\u6587\u4EF6\u5927\u5C0F\u8D85\u51FA\u9650\u5236\u7684\u6587\u4EF6\u5927\u5C0F\uFF01
\u5141\u8BB8\u7684\u6587\u4EF6\u6700\u5927\u5927\u5C0F\u662F\uFF1A{0}MB\uFF01 +upload.filename.exceed.length=\u4E0A\u4F20\u7684\u6587\u4EF6\u540D\u6700\u957F{0}\u4E2A\u5B57\u7B26 +upload.success=\u4E0A\u4F20\u6210\u529F + +##\u6587\u4EF6\u4E0B\u8F7D\u6D88\u606F +download.filename.not.valid=\u6587\u4EF6\u540D\u79F0[{}]\u975E\u6CD5\uFF0C\u4E0D\u5141\u8BB8\u4E0B\u8F7D +download.file.failed=\u4E0B\u8F7D\u6587\u4EF6\u5931\u8D25 +download.resource.not.valid=\u8D44\u6E90\u6587\u4EF6[{}]\u975E\u6CD5\uFF0C\u4E0D\u5141\u8BB8\u4E0B\u8F7D + +##Dept +dept.add.failed.name.exists=\u65B0\u589E\u673A\u6784[{}]\u5931\u8D25\uFF0C\u673A\u6784\u540D\u79F0\u5DF2\u5B58\u5728 +dept.update.failed.name.exists=\u4FEE\u6539\u673A\u6784[{}]\u5931\u8D25\uFF0C\u673A\u6784\u540D\u79F0\u5DF2\u5B58\u5728 +dept.update.failed.parent.not.valid=\u4FEE\u6539\u673A\u6784[{}]\u5931\u8D25\uFF0C\u4E0A\u7EA7\u673A\u6784\u4E0D\u80FD\u662F\u81EA\u5DF1 +dept.update.failed.child.not.valid=\u8BE5\u673A\u6784\u5305\u542B\u672A\u505C\u7528\u7684\u5B50\u673A\u6784\uFF01 +dept.delete.failed.child.exists=\u5B58\u5728\u4E0B\u7EA7\u673A\u6784\uFF0C\u4E0D\u5141\u8BB8\u5220\u9664 +dept.delete.failed.user.exists=\u673A\u6784\u5B58\u5728\u7528\u6237\uFF0C\u4E0D\u5141\u8BB8\u5220\u9664 + +##Dict +dict.add.failed.type.exists=\u65B0\u589E\u5B57\u5178[{}]\u5931\u8D25\uFF0C\u5B57\u5178\u7C7B\u578B\u5DF2\u5B58\u5728 +dict.update.failed.type.exists=\u65B0\u589E\u5B57\u5178[{}]\u5931\u8D25\uFF0C\u5B57\u5178\u7C7B\u578B\u5DF2\u5B58\u5728 + +##Index +index.welcome.message=\u6B22\u8FCE\u4F7F\u7528{}\u540E\u53F0\u7BA1\u7406\u6846\u67B6\uFF0C\u5F53\u524D\u7248\u672C\uFF1Av{}\uFF0C\u8BF7\u901A\u8FC7\u524D\u7AEF\u5730\u5740\u8BBF\u95EE\u3002 + +##Menu +menu.add.failed.name.exists=\u65B0\u589E\u83DC\u5355[{}]\u5931\u8D25\uFF0C\u83DC\u5355\u540D\u79F0\u5DF2\u5B58\u5728 +menu.add.failed.path.not.valid=\u65B0\u589E\u83DC\u5355[{}]\u5931\u8D25\uFF0C\u5730\u5740\u5FC5\u987B\u4EE5http(s)://\u5F00\u5934 +menu.update.failed.name.exists=\u4FEE\u6539\u83DC\u5355[{}]\u5931\u8D25\uFF0C\u83DC\u5355\u540D\u79F0\u5DF2\u5B58\u5728 +menu.update.failed.path.not.valid=\u4FEE\u6539\u83DC\u5355[{}]\u5931\u8D25\uFF0C\u5730\u5740\u5FC5\u987B\u4EE5http(s)://\u5F00\u5934 +menu.update.failed.parent.not.valid=\u4FEE\u6539\u83DC\u5355[{}]\u5931\u8D25\uFF0C\u4E0A\u7EA7\u83DC\u5355\u4E0D\u80FD\u9009\u62E9\u81EA\u5DF1 +menu.delete.failed.child.exists=\u5B58\u5728\u5B50\u83DC\u5355,\u4E0D\u5141\u8BB8\u5220\u9664 +menu.delete.failed.role.exists=\u83DC\u5355\u5DF2\u5206\u914D,\u4E0D\u5141\u8BB8\u5220\u9664 + +##Post +post.add.failed.name.exists=\u65B0\u589E\u5C97\u4F4D[{}]\u5931\u8D25\uFF0C\u5C97\u4F4D\u540D\u79F0\u5DF2\u5B58\u5728 +post.add.failed.code.exists=\u65B0\u589E\u5C97\u4F4D[{}]\u5931\u8D25\uFF0C\u5C97\u4F4D\u7F16\u7801\u5DF2\u5B58\u5728 +post.update.failed.name.exists=\u4FEE\u6539\u5C97\u4F4D[{}]\u5931\u8D25\uFF0C\u5C97\u4F4D\u540D\u79F0\u5DF2\u5B58\u5728 +post.update.failed.code.exists=\u4FEE\u6539\u5C97\u4F4D[{}]\u5931\u8D25\uFF0C\u5C97\u4F4D\u7F16\u7801\u5DF2\u5B58\u5728 + +##User +user.username.exists=\u7CFB\u7EDF\u8D26\u53F7\u540D\u79F0\u5DF2\u5B58\u5728\uFF0C\u8BF7\u4FEE\u6539\u540E\u91CD\u8BD5 +user.password.differ=\u4E24\u6B21\u5BC6\u7801\u4E0D\u4E00\u81F4\uFF0C\u8BF7\u91CD\u65B0\u8F93\u5165 +user.add.failed.name.exists=\u65B0\u589E\u7528\u6237[{}]\u5931\u8D25\uFF0C\u767B\u5F55\u8D26\u53F7\u5DF2\u5B58\u5728 +user.add.failed.phone.exists=\u65B0\u589E\u7528\u6237[{}]\u5931\u8D25\uFF0C\u624B\u673A\u53F7\u7801\u5DF2\u5B58\u5728 +user.add.failed.email.exists=\u65B0\u589E\u7528\u6237[{}]\u5931\u8D25\uFF0C\u90AE\u7BB1\u8D26\u53F7\u5DF2\u5B58\u5728 +user.update.failed.password.wrong=\u4FEE\u6539\u5BC6\u7801\u5931\u8D25\uFF0C\u65E7\u5BC6\u7801\u9519\u8BEF +user.update.failed.password.repeat=\u65B0\u5BC6\u7801\u4E0D\u80FD\u4E0E\u65E7\u5BC6\u7801\u76F8\u540C +user.update.password.failed=\u4FEE\u6539\u5BC6\u7801\u5F02\u5E38\uFF0C\u8BF7\u8054\u7CFB\u7BA1\u7406\u5458 +user.update.failed.name.exists=\u65B0\u589E\u7528\u6237[{}]\u5931\u8D25\uFF0C\u767B\u5F55\u8D26\u53F7\u5DF2\u5B58\u5728 +user.update.failed.phone.exists=\u4FEE\u6539\u7528\u6237[{}]\u5931\u8D25\uFF0C\u624B\u673A\u53F7\u7801\u5DF2\u5B58\u5728 +user.update.failed.email.exists=\u4FEE\u6539\u7528\u6237[{}]\u5931\u8D25\uFF0C\u90AE\u7BB1\u8D26\u53F7\u5DF2\u5B58\u5728 +user.update.failed=\u4FEE\u6539\u4E2A\u4EBA\u4FE1\u606F\u5F02\u5E38\uFF0C\u8BF7\u8054\u7CFB\u7BA1\u7406\u5458 +user.delete.failed=\u5F53\u524D\u7528\u6237\u4E0D\u80FD\u5220\u9664 +user.upload.avatar.failed=\u4E0A\u4F20\u56FE\u7247\u5F02\u5E38\uFF0C\u8BF7\u8054\u7CFB\u7BA1\u7406\u5458 +user.not.login=\u8BF7\u767B\u5F55\u540E\u91CD\u8BD5 +user.access.denied=\u7528\u6237\u62D2\u7EDD\u8BBF\u95EE + +##Role +role.add.manager.failed=\u4E0D\u5141\u8BB8\u8BBE\u7F6E\u7BA1\u7406\u5458\u89D2\u8272\u6807\u8BC6 +role.add.failed.name.exists=\u65B0\u589E\u89D2\u8272[{}]\u5931\u8D25\uFF0C\u89D2\u8272\u540D\u79F0\u5DF2\u5B58\u5728 +role.add.failed.key.exists=\u65B0\u589E\u89D2\u8272[{}]\u5931\u8D25\uFF0C\u89D2\u8272\u6743\u9650\u5DF2\u5B58\u5728 +role.update.failed.name.exists=\u4FEE\u6539\u89D2\u8272[{}]\u5931\u8D25\uFF0C\u89D2\u8272\u540D\u79F0\u5DF2\u5B58\u5728 +role.update.failed.key.exists=\u4FEE\u6539\u89D2\u8272[{}]\u5931\u8D25\uFF0C\u89D2\u8272\u6743\u9650\u5DF2\u5B58\u5728 +role.update.failed=\u4FEE\u6539\u89D2\u8272[{}]\u5931\u8D25\uFF0C\u8BF7\u8054\u7CFB\u7BA1\u7406\u5458 + +##Import +import.failed.file.null=\u5BFC\u5165\u5931\u8D25\uFF0C\u8BF7\u5148\u4E0A\u4F20\u6587\u4EF6\uFF01 +import.failed.data.null=\u5BFC\u5165\u5931\u8D25\uFF0C\u5BFC\u5165\u6570\u636E\u4E3A\u7A7A\uFF01 +import.failed.device.name.null=\u5BFC\u5165\u5931\u8D25\uFF0C\u6A21\u677F\u91CC\u8BBE\u5907\u540D\u79F0\u4E0D\u80FD\u4E3A\u7A7A\uFF01 +import.success=\u5BFC\u5165\u6210\u529F + +##General +success=\u6210\u529F +fail=\u5931\u8D25 +query.success=\u67E5\u8BE2\u6210\u529F +operate.success=\u64CD\u4F5C\u6210\u529F +create.success=\u521B\u5EFA\u6210\u529F +create.failed=\u521B\u5EFA\u5931\u8D25 +save.success=\u4FDD\u5B58\u6210\u529F +save.failed=\u4FDD\u5B58\u5931\u8D25 +authorization.success=\u6388\u6743\u6210\u529F + +##Email +email.format.error=\u90AE\u7BB1\u683C\u5F0F\u9519\u8BEF +email.verification.code.send=\u90AE\u7BB1\u9A8C\u8BC1\u7801\u5DF2\u53D1\u9001 + +##Firmware +firmware.task.upgrade.failed.time.not.valid=\u9884\u5B9A\u5347\u7EA7\u65F6\u95F4\u5E94\u5927\u4E8E\u5F53\u524D\u65F6\u95F4 +##Media +media.record.query.failed=\u8FDE\u63A5\u8D85\u65F6\u6216\u53D1\u751F\u9519\u8BEF\uFF0C\u672A\u83B7\u53D6\u5230\u6570\u636E +##Modbus +modbus.type.null=\u7C7B\u578B\u4E3A\u7A7A +##Netty +netty.client.not.exists=\u5BA2\u6237\u7AEF\u4E0D\u5B58\u5728 +##Runtime +runtime.message.id.null=\u6D88\u606Fid\u4E3A\u7A7A +##Wechat +wechat.verify.type.null=\u8BF7\u4F20\u5165\u9A8C\u8BC1\u65B9\u5F0F +wechat.bind.message.id.null=\u8BF7\u4F20\u5165\u7ED1\u5B9A\u4FE1\u606FID +##AuthResource +auth.resource.product.query.success=\u67E5\u8BE2\u4EA7\u54C1\u5217\u8868\u6210\u529F +##Device +device.user.id.null=\u7528\u6237ID\u4E0D\u80FD\u4E3A\u7A7A +device.product.id.null=\u8BBE\u5907\u7F16\u53F7\u548C\u4EA7\u54C1ID\u4E0D\u80FD\u4E3A\u7A7A +device.dept.id.null=\u8BF7\u9009\u62E9\u5206\u914D\u673A\u6784 +device.id.null=\u8BF7\u9009\u62E9\u8BBE\u5907 +##DeviceJob +job.add.failed.cron.not.valid=\u65B0\u589E\u4EFB\u52A1[{}]\u5931\u8D25\uFF0CCron\u8868\u8FBE\u5F0F\u4E0D\u6B63\u786E +job.add.failed.rmi.not.valid=\u65B0\u589E\u4EFB\u52A1[{}]\u5931\u8D25\uFF0C\u76EE\u6807\u5B57\u7B26\u4E32\u4E0D\u5141\u8BB8'rmi'\u8C03\u7528 +job.add.failed.ldap.not.valid=\u65B0\u589E\u4EFB\u52A1[{}]\u5931\u8D25\uFF0C\u76EE\u6807\u5B57\u7B26\u4E32\u4E0D\u5141\u8BB8'ldap(s)'\u8C03\u7528 +job.add.failed.http.not.valid=\u65B0\u589E\u4EFB\u52A1[{}]\u5931\u8D25\uFF0C\u76EE\u6807\u5B57\u7B26\u4E32\u4E0D\u5141\u8BB8'http(s)'\u8C03\u7528 +job.add.failed.string.error=\u65B0\u589E\u4EFB\u52A1[{}]\u5931\u8D25\uFF0C\u76EE\u6807\u5B57\u7B26\u4E32\u5B58\u5728\u8FDD\u89C4 +job.add.failed.string.not.valid=\u65B0\u589E\u4EFB\u52A1[{}]\u5931\u8D25\uFF0C\u76EE\u6807\u5B57\u7B26\u4E32\u4E0D\u5728\u767D\u540D\u5355\u5185 +job.update.failed.cron.not.valid=\u4FEE\u6539\u4EFB\u52A1[{}]\u5931\u8D25\uFF0CCron\u8868\u8FBE\u5F0F\u4E0D\u6B63\u786E +job.update.failed.rmi.not.valid=\u4FEE\u6539\u4EFB\u52A1[{}]\u5931\u8D25\uFF0C\u76EE\u6807\u5B57\u7B26\u4E32\u4E0D\u5141\u8BB8'rmi'\u8C03\u7528 +job.update.failed.ldap.not.valid=\u4FEE\u6539\u4EFB\u52A1[{}]\u5931\u8D25\uFF0C\u76EE\u6807\u5B57\u7B26\u4E32\u4E0D\u5141\u8BB8'ldap(s)'\u8C03\u7528 +job.update.failed.http.not.valid=\u4FEE\u6539\u4EFB\u52A1[{}]\u5931\u8D25\uFF0C\u76EE\u6807\u5B57\u7B26\u4E32\u4E0D\u5141\u8BB8'http(s)'\u8C03\u7528 +job.update.failed.string.error=\u4FEE\u6539\u4EFB\u52A1[{}]\u5931\u8D25\uFF0C\u76EE\u6807\u5B57\u7B26\u4E32\u5B58\u5728\u8FDD\u89C4 +job.update.failed.string.not.valid=\u4FEE\u6539\u4EFB\u52A1[{}]\u5931\u8D25\uFF0C\u76EE\u6807\u5B57\u7B26\u4E32\u4E0D\u5728\u767D\u540D\u5355\u5185 +job.not.exists=\u4EFB\u52A1\u4E0D\u5B58\u5728\u6216\u5DF2\u8FC7\u671F +##DeviceUser +device.user.delete.failed.user.not.valid=\u8BBE\u5907\u6240\u6709\u8005\u4E0D\u80FD\u5220\u9664 +##GoviewProject +goview.project.data.save.failed.id.null=\u6CA1\u6709\u8BE5\u9879\u76EEID +goview.project.data.execute.sql.failed=\u8BF7\u7F16\u5199sql\u8BED\u53E5 +##ThingsModel +things.model.identifier.repeat=\u4EA7\u54C1\u4E0B\u7684\u6807\u8BC6\u7B26\u4E0D\u80FD\u91CD\u590D +things.model.import.failed.identifier.repeat=[{}]\u6761\u6570\u636E\u672A\u5BFC\u5165\uFF0C\u6807\u8BC6\u7B26\u91CD\u590D +##MQTT +mqtt.unauthorized=mqtt\u8D26\u53F7\u548C\u5BC6\u7801\u4E0E\u8BA4\u8BC1\u670D\u52A1\u5668\u914D\u7F6E\u4E0D\u5339\u914D +##Oauth +oauth.response.type.not.valid=response_type\u53C2\u6570\u503C\u53EA\u5141\u8BB8code\u548Ctoken +oauth.grant.type.null=\u672A\u77E5\u6388\u6743\u7C7B\u578B +oauth.grant.type.implicit.not.support=Token\u63A5\u53E3\u4E0D\u652F\u6301implicit\u6388\u6743\u6A21\u5F0F +oauth.access.token.null=\u8BBF\u95EE\u4EE4\u724C\u4E0D\u80FD\u4E3A\u7A7A +obtain.basic.authorization.failed=client_id\u6216client_secret\u672A\u6B63\u786E\u4F20\u9012 +##Record +record.app.null=app\u4E0D\u80FD\u4E3A\u7A7A +record.stream.null=stream\u4E0D\u80FD\u4E3A\u7A7A +record.time.not.valid=\u9519\u8BEF\u7684\u5F00\u59CB\u65F6\u95F4\u6216\u7ED3\u675F\u65F6\u95F4 +record.file.null=\u672A\u627E\u5230\u89C6\u9891\u6587\u4EF6 + +##ErrorCodeConstants +app.not.found=App \u4E0D\u5B58\u5728 +app.is.disable=App \u5DF2\u7ECF\u88AB\u7981\u7528 +app.exist.order.cant.delete=\u652F\u4ED8\u5E94\u7528\u5B58\u5728\u652F\u4ED8\u8BA2\u5355\uFF0C\u65E0\u6CD5\u5220\u9664 +app.exist.refund.cant.delete=\u652F\u4ED8\u5E94\u7528\u5B58\u5728\u9000\u6B3E\u8BA2\u5355\uFF0C\u65E0\u6CD5\u5220\u9664 +channel.not.found=\u652F\u4ED8\u6E20\u9053\u7684\u914D\u7F6E\u4E0D\u5B58\u5728 +channel.is.disable=\u652F\u4ED8\u6E20\u9053\u5DF2\u7ECF\u7981\u7528 +channel.exists.same.channel.error=\u5DF2\u5B58\u5728\u76F8\u540C\u7684\u6E20\u9053 +order.not.found=\u652F\u4ED8\u8BA2\u5355\u4E0D\u5B58\u5728 +order.status.is.not.waiting=\u652F\u4ED8\u8BA2\u5355\u4E0D\u5904\u4E8E\u5F85\u652F\u4ED8 +order.status.is.success=\u8BA2\u5355\u5DF2\u652F\u4ED8\uFF0C\u8BF7\u5237\u65B0\u9875\u9762 +order.is.expired=\u652F\u4ED8\u8BA2\u5355\u5DF2\u7ECF\u8FC7\u671F +order.submit.channel.error=\u53D1\u8D77\u652F\u4ED8\u62A5\u9519\uFF0C\u9519\u8BEF\u7801\uFF1A{}\uFF0C\u9519\u8BEF\u63D0\u793A\uFF1A{} +order.refund.fail.status.error=\u652F\u4ED8\u8BA2\u5355\u9000\u6B3E\u5931\u8D25\uFF0C\u539F\u56E0\uFF1A\u72B6\u6001\u4E0D\u662F\u5DF2\u652F\u4ED8\u6216\u5DF2\u9000\u6B3E +order.extension.not.found=\u652F\u4ED8\u4EA4\u6613\u62D3\u5C55\u5355\u4E0D\u5B58\u5728 +order.extension.status.is.not.waiting=\u652F\u4ED8\u4EA4\u6613\u62D3\u5C55\u5355\u4E0D\u5904\u4E8E\u5F85\u652F\u4ED8 +order.extension.is.paid=\u8BA2\u5355\u5DF2\u652F\u4ED8\uFF0C\u8BF7\u7B49\u5F85\u652F\u4ED8\u7ED3\u679C +refund.price.exceed=\u9000\u6B3E\u91D1\u989D\u8D85\u8FC7\u8BA2\u5355\u53EF\u9000\u6B3E\u91D1\u989D +refund.has.refunding=\u5DF2\u7ECF\u6709\u9000\u6B3E\u5728\u5904\u7406\u4E2D +refund.exists=\u5DF2\u7ECF\u5B58\u5728\u9000\u6B3E\u5355 +refund.not.found=\u652F\u4ED8\u9000\u6B3E\u5355\u4E0D\u5B58\u5728 +refund.statue.is.not.waiting=\u652F\u4ED8\u9000\u6B3E\u5355\u4E0D\u5904\u4E8E\u5F85\u9000\u6B3E +demo.order.not.found=\u793A\u4F8B\u8BA2\u5355\u4E0D\u5B58\u5728 +demo.order.update.paid.status.not.unpaid=\u793A\u4F8B\u8BA2\u5355\u66F4\u65B0\u652F\u4ED8\u72B6\u6001\u5931\u8D25\uFF0C\u8BA2\u5355\u4E0D\u662F\u3010\u672A\u652F\u4ED8\u3011\u72B6\u6001 +demo.order.update.paid.fail.pay.order.id.error=\u793A\u4F8B\u8BA2\u5355\u66F4\u65B0\u652F\u4ED8\u72B6\u6001\u5931\u8D25\uFF0C\u652F\u4ED8\u5355\u7F16\u53F7\u4E0D\u5339\u914D +demo.order.update.paid.fail.pay.order.status.not.success=\u793A\u4F8B\u8BA2\u5355\u66F4\u65B0\u652F\u4ED8\u72B6\u6001\u5931\u8D25\uFF0C\u652F\u4ED8\u5355\u72B6\u6001\u4E0D\u662F\u3010\u652F\u4ED8\u6210\u529F\u3011\u72B6\u6001 +demo.order.update.paid.fail.pay.price.not.match=\u793A\u4F8B\u8BA2\u5355\u66F4\u65B0\u652F\u4ED8\u72B6\u6001\u5931\u8D25\uFF0C\u652F\u4ED8\u5355\u91D1\u989D\u4E0D\u5339\u914D +demo.order.refund.fail.not.paid=\u53D1\u8D77\u9000\u6B3E\u5931\u8D25\uFF0C\u793A\u4F8B\u8BA2\u5355\u672A\u652F\u4ED8 +demo.order.refund.fail.refunded=\u53D1\u8D77\u9000\u6B3E\u5931\u8D25\uFF0C\u793A\u4F8B\u8BA2\u5355\u5DF2\u9000\u6B3E +demo.order.refund.fail.refund.not.found=\u53D1\u8D77\u9000\u6B3E\u5931\u8D25\uFF0C\u9000\u6B3E\u8BA2\u5355\u4E0D\u5B58\u5728 +demo.order.refund.fail.refund.not.success=\u53D1\u8D77\u9000\u6B3E\u5931\u8D25\uFF0C\u9000\u6B3E\u8BA2\u5355\u672A\u9000\u6B3E\u6210\u529F +demo.order.refund.fail.refund.order.id.error=\u53D1\u8D77\u9000\u6B3E\u5931\u8D25\uFF0C\u9000\u6B3E\u5355\u7F16\u53F7\u4E0D\u5339\u914D +demo.order.refund.fail.refund.price.not.match=\u53D1\u8D77\u9000\u6B3E\u5931\u8D25\uFF0C\u9000\u6B3E\u5355\u91D1\u989D\u4E0D\u5339\u914D +device.can.send=No permission operation at present diff --git a/xinda-admin/src/main/resources/i18n/messages_zh_CN.properties b/xinda-admin/src/main/resources/i18n/messages_zh_CN.properties new file mode 100644 index 0000000..d1a8c07 --- /dev/null +++ b/xinda-admin/src/main/resources/i18n/messages_zh_CN.properties @@ -0,0 +1,211 @@ +#\u9519\u8BEF\u6D88\u606F +not.null=* \u5FC5\u987B\u586B\u5199 +user.jcaptcha.error=\u9A8C\u8BC1\u7801\u9519\u8BEF +user.jcaptcha.expire=\u9A8C\u8BC1\u7801\u5DF2\u5931\u6548 +user.not.exists=\u7528\u6237\u4E0D\u5B58\u5728/\u5BC6\u7801\u9519\u8BEF +user.password.not.match=\u7528\u6237\u4E0D\u5B58\u5728/\u5BC6\u7801\u9519\u8BEF +user.password.retry.limit.count=\u5BC6\u7801\u8F93\u5165\u9519\u8BEF{0}\u6B21 +user.password.retry.limit.exceed=\u5BC6\u7801\u8F93\u5165\u9519\u8BEF{0}\u6B21\uFF0C\u5E10\u6237\u9501\u5B9A{1}\u5206\u949F +user.password.delete=\u5BF9\u4E0D\u8D77\uFF0C\u60A8\u7684\u8D26\u53F7\u5DF2\u88AB\u5220\u9664 +user.blocked=\u7528\u6237\u5DF2\u5C01\u7981\uFF0C\u8BF7\u8054\u7CFB\u7BA1\u7406\u5458 +role.blocked=\u89D2\u8272\u5DF2\u5C01\u7981\uFF0C\u8BF7\u8054\u7CFB\u7BA1\u7406\u5458 +user.logout.success=\u9000\u51FA\u6210\u529F + +length.not.valid=\u957F\u5EA6\u5FC5\u987B\u5728{min}\u5230{max}\u4E2A\u5B57\u7B26\u4E4B\u95F4 + +user.username.not.valid=* 2\u523020\u4E2A\u6C49\u5B57\u3001\u5B57\u6BCD\u3001\u6570\u5B57\u6216\u4E0B\u5212\u7EBF\u7EC4\u6210\uFF0C\u4E14\u5FC5\u987B\u4EE5\u975E\u6570\u5B57\u5F00\u5934 +user.password.not.valid=* 5-50\u4E2A\u5B57\u7B26 + +user.email.not.valid=\u90AE\u7BB1\u683C\u5F0F\u9519\u8BEF +user.mobile.phone.number.not.valid=\u624B\u673A\u53F7\u683C\u5F0F\u9519\u8BEF +user.login.success=\u767B\u5F55\u6210\u529F +user.register.success=\u6CE8\u518C\u6210\u529F +user.notfound=\u8BF7\u91CD\u65B0\u767B\u5F55 +user.forcelogout=\u7BA1\u7406\u5458\u5F3A\u5236\u9000\u51FA\uFF0C\u8BF7\u91CD\u65B0\u767B\u5F55 +user.unknown.error=\u672A\u77E5\u9519\u8BEF\uFF0C\u8BF7\u91CD\u65B0\u767B\u5F55 + +##\u6743\u9650 +no.permission=\u60A8\u6CA1\u6709\u6570\u636E\u7684\u6743\u9650\uFF0C\u8BF7\u8054\u7CFB\u7BA1\u7406\u5458\u6DFB\u52A0\u6743\u9650 [{0}] +no.create.permission=\u60A8\u6CA1\u6709\u521B\u5EFA\u6570\u636E\u7684\u6743\u9650\uFF0C\u8BF7\u8054\u7CFB\u7BA1\u7406\u5458\u6DFB\u52A0\u6743\u9650 [{0}] +no.update.permission=\u60A8\u6CA1\u6709\u4FEE\u6539\u6570\u636E\u7684\u6743\u9650\uFF0C\u8BF7\u8054\u7CFB\u7BA1\u7406\u5458\u6DFB\u52A0\u6743\u9650 [{0}] +no.delete.permission=\u60A8\u6CA1\u6709\u5220\u9664\u6570\u636E\u7684\u6743\u9650\uFF0C\u8BF7\u8054\u7CFB\u7BA1\u7406\u5458\u6DFB\u52A0\u6743\u9650 [{0}] +no.export.permission=\u60A8\u6CA1\u6709\u5BFC\u51FA\u6570\u636E\u7684\u6743\u9650\uFF0C\u8BF7\u8054\u7CFB\u7BA1\u7406\u5458\u6DFB\u52A0\u6743\u9650 [{0}] +no.view.permission=\u60A8\u6CA1\u6709\u67E5\u770B\u6570\u636E\u7684\u6743\u9650\uFF0C\u8BF7\u8054\u7CFB\u7BA1\u7406\u5458\u6DFB\u52A0\u6743\u9650 [{0}] + +##\u6587\u4EF6\u4E0A\u4F20\u6D88\u606F +upload.exceed.maxSize=\u4E0A\u4F20\u7684\u6587\u4EF6\u5927\u5C0F\u8D85\u51FA\u9650\u5236\u7684\u6587\u4EF6\u5927\u5C0F\uFF01
\u5141\u8BB8\u7684\u6587\u4EF6\u6700\u5927\u5927\u5C0F\u662F\uFF1A{0}MB\uFF01 +upload.filename.exceed.length=\u4E0A\u4F20\u7684\u6587\u4EF6\u540D\u6700\u957F{0}\u4E2A\u5B57\u7B26 +upload.success=\u4E0A\u4F20\u6210\u529F + +##\u6587\u4EF6\u4E0B\u8F7D\u6D88\u606F +download.filename.not.valid=\u6587\u4EF6\u540D\u79F0[{}]\u975E\u6CD5\uFF0C\u4E0D\u5141\u8BB8\u4E0B\u8F7D +download.file.failed=\u4E0B\u8F7D\u6587\u4EF6\u5931\u8D25 +download.resource.not.valid=\u8D44\u6E90\u6587\u4EF6[{}]\u975E\u6CD5\uFF0C\u4E0D\u5141\u8BB8\u4E0B\u8F7D + +##Dept +dept.add.failed.name.exists=\u65B0\u589E\u673A\u6784[{}]\u5931\u8D25\uFF0C\u673A\u6784\u540D\u79F0\u5DF2\u5B58\u5728 +dept.update.failed.name.exists=\u4FEE\u6539\u673A\u6784[{}]\u5931\u8D25\uFF0C\u673A\u6784\u540D\u79F0\u5DF2\u5B58\u5728 +dept.update.failed.parent.not.valid=\u4FEE\u6539\u673A\u6784[{}]\u5931\u8D25\uFF0C\u4E0A\u7EA7\u673A\u6784\u4E0D\u80FD\u662F\u81EA\u5DF1 +dept.update.failed.child.not.valid=\u8BE5\u673A\u6784\u5305\u542B\u672A\u505C\u7528\u7684\u5B50\u673A\u6784\uFF01 +dept.delete.failed.child.exists=\u5B58\u5728\u4E0B\u7EA7\u673A\u6784\uFF0C\u4E0D\u5141\u8BB8\u5220\u9664 +dept.delete.failed.user.exists=\u673A\u6784\u5B58\u5728\u7528\u6237\uFF0C\u4E0D\u5141\u8BB8\u5220\u9664 + +##Dict +dict.add.failed.type.exists=\u65B0\u589E\u5B57\u5178[{}]\u5931\u8D25\uFF0C\u5B57\u5178\u7C7B\u578B\u5DF2\u5B58\u5728 +dict.update.failed.type.exists=\u65B0\u589E\u5B57\u5178[{}]\u5931\u8D25\uFF0C\u5B57\u5178\u7C7B\u578B\u5DF2\u5B58\u5728 + +##Index +index.welcome.message=\u6B22\u8FCE\u4F7F\u7528{}\u540E\u53F0\u7BA1\u7406\u6846\u67B6\uFF0C\u5F53\u524D\u7248\u672C\uFF1Av{}\uFF0C\u8BF7\u901A\u8FC7\u524D\u7AEF\u5730\u5740\u8BBF\u95EE\u3002 + +##Menu +menu.add.failed.name.exists=\u65B0\u589E\u83DC\u5355[{}]\u5931\u8D25\uFF0C\u83DC\u5355\u540D\u79F0\u5DF2\u5B58\u5728 +menu.add.failed.path.not.valid=\u65B0\u589E\u83DC\u5355[{}]\u5931\u8D25\uFF0C\u5730\u5740\u5FC5\u987B\u4EE5http(s)://\u5F00\u5934 +menu.update.failed.name.exists=\u4FEE\u6539\u83DC\u5355[{}]\u5931\u8D25\uFF0C\u83DC\u5355\u540D\u79F0\u5DF2\u5B58\u5728 +menu.update.failed.path.not.valid=\u4FEE\u6539\u83DC\u5355[{}]\u5931\u8D25\uFF0C\u5730\u5740\u5FC5\u987B\u4EE5http(s)://\u5F00\u5934 +menu.update.failed.parent.not.valid=\u4FEE\u6539\u83DC\u5355[{}]\u5931\u8D25\uFF0C\u4E0A\u7EA7\u83DC\u5355\u4E0D\u80FD\u9009\u62E9\u81EA\u5DF1 +menu.delete.failed.child.exists=\u5B58\u5728\u5B50\u83DC\u5355,\u4E0D\u5141\u8BB8\u5220\u9664 +menu.delete.failed.role.exists=\u83DC\u5355\u5DF2\u5206\u914D,\u4E0D\u5141\u8BB8\u5220\u9664 + +##Post +post.add.failed.name.exists=\u65B0\u589E\u5C97\u4F4D[{}]\u5931\u8D25\uFF0C\u5C97\u4F4D\u540D\u79F0\u5DF2\u5B58\u5728 +post.add.failed.code.exists=\u65B0\u589E\u5C97\u4F4D[{}]\u5931\u8D25\uFF0C\u5C97\u4F4D\u7F16\u7801\u5DF2\u5B58\u5728 +post.update.failed.name.exists=\u4FEE\u6539\u5C97\u4F4D[{}]\u5931\u8D25\uFF0C\u5C97\u4F4D\u540D\u79F0\u5DF2\u5B58\u5728 +post.update.failed.code.exists=\u4FEE\u6539\u5C97\u4F4D[{}]\u5931\u8D25\uFF0C\u5C97\u4F4D\u7F16\u7801\u5DF2\u5B58\u5728 + +##User +user.username.exists=\u7CFB\u7EDF\u8D26\u53F7\u540D\u79F0\u5DF2\u5B58\u5728\uFF0C\u8BF7\u4FEE\u6539\u540E\u91CD\u8BD5 +user.password.differ=\u4E24\u6B21\u5BC6\u7801\u4E0D\u4E00\u81F4\uFF0C\u8BF7\u91CD\u65B0\u8F93\u5165 +user.add.failed.name.exists=\u65B0\u589E\u7528\u6237[{}]\u5931\u8D25\uFF0C\u767B\u5F55\u8D26\u53F7\u5DF2\u5B58\u5728 +user.add.failed.phone.exists=\u65B0\u589E\u7528\u6237[{}]\u5931\u8D25\uFF0C\u624B\u673A\u53F7\u7801\u5DF2\u5B58\u5728 +user.add.failed.email.exists=\u65B0\u589E\u7528\u6237[{}]\u5931\u8D25\uFF0C\u90AE\u7BB1\u8D26\u53F7\u5DF2\u5B58\u5728 +user.update.failed.password.wrong=\u4FEE\u6539\u5BC6\u7801\u5931\u8D25\uFF0C\u65E7\u5BC6\u7801\u9519\u8BEF +user.update.failed.password.repeat=\u65B0\u5BC6\u7801\u4E0D\u80FD\u4E0E\u65E7\u5BC6\u7801\u76F8\u540C +user.update.password.failed=\u4FEE\u6539\u5BC6\u7801\u5F02\u5E38\uFF0C\u8BF7\u8054\u7CFB\u7BA1\u7406\u5458 +user.update.failed.name.exists=\u65B0\u589E\u7528\u6237[{}]\u5931\u8D25\uFF0C\u767B\u5F55\u8D26\u53F7\u5DF2\u5B58\u5728 +user.update.failed.phone.exists=\u4FEE\u6539\u7528\u6237[{}]\u5931\u8D25\uFF0C\u624B\u673A\u53F7\u7801\u5DF2\u5B58\u5728 +user.update.failed.email.exists=\u4FEE\u6539\u7528\u6237[{}]\u5931\u8D25\uFF0C\u90AE\u7BB1\u8D26\u53F7\u5DF2\u5B58\u5728 +user.update.failed=\u4FEE\u6539\u4E2A\u4EBA\u4FE1\u606F\u5F02\u5E38\uFF0C\u8BF7\u8054\u7CFB\u7BA1\u7406\u5458 +user.delete.failed=\u5F53\u524D\u7528\u6237\u4E0D\u80FD\u5220\u9664 +user.upload.avatar.failed=\u4E0A\u4F20\u56FE\u7247\u5F02\u5E38\uFF0C\u8BF7\u8054\u7CFB\u7BA1\u7406\u5458 +user.not.login=\u8BF7\u767B\u5F55\u540E\u91CD\u8BD5 +user.access.denied=\u7528\u6237\u62D2\u7EDD\u8BBF\u95EE + +##Role +role.add.manager.failed=\u4E0D\u5141\u8BB8\u8BBE\u7F6E\u7BA1\u7406\u5458\u89D2\u8272\u6807\u8BC6 +role.add.failed.name.exists=\u65B0\u589E\u89D2\u8272[{}]\u5931\u8D25\uFF0C\u89D2\u8272\u540D\u79F0\u5DF2\u5B58\u5728 +role.add.failed.key.exists=\u65B0\u589E\u89D2\u8272[{}]\u5931\u8D25\uFF0C\u89D2\u8272\u6743\u9650\u5DF2\u5B58\u5728 +role.update.failed.name.exists=\u4FEE\u6539\u89D2\u8272[{}]\u5931\u8D25\uFF0C\u89D2\u8272\u540D\u79F0\u5DF2\u5B58\u5728 +role.update.failed.key.exists=\u4FEE\u6539\u89D2\u8272[{}]\u5931\u8D25\uFF0C\u89D2\u8272\u6743\u9650\u5DF2\u5B58\u5728 +role.update.failed=\u4FEE\u6539\u89D2\u8272[{}]\u5931\u8D25\uFF0C\u8BF7\u8054\u7CFB\u7BA1\u7406\u5458 + +##Import +import.failed.file.null=\u5BFC\u5165\u5931\u8D25\uFF0C\u8BF7\u5148\u4E0A\u4F20\u6587\u4EF6\uFF01 +import.failed.data.null=\u5BFC\u5165\u5931\u8D25\uFF0C\u5BFC\u5165\u6570\u636E\u4E3A\u7A7A\uFF01 +import.failed.device.name.null=\u5BFC\u5165\u5931\u8D25\uFF0C\u6A21\u677F\u91CC\u8BBE\u5907\u540D\u79F0\u4E0D\u80FD\u4E3A\u7A7A\uFF01 +import.success=\u5BFC\u5165\u6210\u529F + +##General +success=\u6210\u529F +fail=\u5931\u8D25 +query.success=\u67E5\u8BE2\u6210\u529F +operate.success=\u64CD\u4F5C\u6210\u529F +create.success=\u521B\u5EFA\u6210\u529F +create.failed=\u521B\u5EFA\u5931\u8D25 +save.success=\u4FDD\u5B58\u6210\u529F +save.failed=\u4FDD\u5B58\u5931\u8D25 +authorization.success=\u6388\u6743\u6210\u529F + +##Email +email.format.error=\u90AE\u7BB1\u683C\u5F0F\u9519\u8BEF +email.verification.code.send=\u90AE\u7BB1\u9A8C\u8BC1\u7801\u5DF2\u53D1\u9001 + +##Firmware +firmware.task.upgrade.failed.time.not.valid=\u9884\u5B9A\u5347\u7EA7\u65F6\u95F4\u5E94\u5927\u4E8E\u5F53\u524D\u65F6\u95F4 +##Media +media.record.query.failed=\u8FDE\u63A5\u8D85\u65F6\u6216\u53D1\u751F\u9519\u8BEF\uFF0C\u672A\u83B7\u53D6\u5230\u6570\u636E +##Modbus +modbus.type.null=\u7C7B\u578B\u4E3A\u7A7A +##Netty +netty.client.not.exists=\u5BA2\u6237\u7AEF\u4E0D\u5B58\u5728 +##Runtime +runtime.message.id.null=\u6D88\u606Fid\u4E3A\u7A7A +##Wechat +wechat.verify.type.null=\u8BF7\u4F20\u5165\u9A8C\u8BC1\u65B9\u5F0F +wechat.bind.message.id.null=\u8BF7\u4F20\u5165\u7ED1\u5B9A\u4FE1\u606FID +##AuthResource +auth.resource.product.query.success=\u67E5\u8BE2\u4EA7\u54C1\u5217\u8868\u6210\u529F +##Device +device.user.id.null=\u7528\u6237ID\u4E0D\u80FD\u4E3A\u7A7A +device.product.id.null=\u8BBE\u5907\u7F16\u53F7\u548C\u4EA7\u54C1ID\u4E0D\u80FD\u4E3A\u7A7A +device.dept.id.null=\u8BF7\u9009\u62E9\u5206\u914D\u673A\u6784 +device.id.null=\u8BF7\u9009\u62E9\u8BBE\u5907 +##DeviceJob +job.add.failed.cron.not.valid=\u65B0\u589E\u4EFB\u52A1[{}]\u5931\u8D25\uFF0CCron\u8868\u8FBE\u5F0F\u4E0D\u6B63\u786E +job.add.failed.rmi.not.valid=\u65B0\u589E\u4EFB\u52A1[{}]\u5931\u8D25\uFF0C\u76EE\u6807\u5B57\u7B26\u4E32\u4E0D\u5141\u8BB8'rmi'\u8C03\u7528 +job.add.failed.ldap.not.valid=\u65B0\u589E\u4EFB\u52A1[{}]\u5931\u8D25\uFF0C\u76EE\u6807\u5B57\u7B26\u4E32\u4E0D\u5141\u8BB8'ldap(s)'\u8C03\u7528 +job.add.failed.http.not.valid=\u65B0\u589E\u4EFB\u52A1[{}]\u5931\u8D25\uFF0C\u76EE\u6807\u5B57\u7B26\u4E32\u4E0D\u5141\u8BB8'http(s)'\u8C03\u7528 +job.add.failed.string.error=\u65B0\u589E\u4EFB\u52A1[{}]\u5931\u8D25\uFF0C\u76EE\u6807\u5B57\u7B26\u4E32\u5B58\u5728\u8FDD\u89C4 +job.add.failed.string.not.valid=\u65B0\u589E\u4EFB\u52A1[{}]\u5931\u8D25\uFF0C\u76EE\u6807\u5B57\u7B26\u4E32\u4E0D\u5728\u767D\u540D\u5355\u5185 +job.update.failed.cron.not.valid=\u4FEE\u6539\u4EFB\u52A1[{}]\u5931\u8D25\uFF0CCron\u8868\u8FBE\u5F0F\u4E0D\u6B63\u786E +job.update.failed.rmi.not.valid=\u4FEE\u6539\u4EFB\u52A1[{}]\u5931\u8D25\uFF0C\u76EE\u6807\u5B57\u7B26\u4E32\u4E0D\u5141\u8BB8'rmi'\u8C03\u7528 +job.update.failed.ldap.not.valid=\u4FEE\u6539\u4EFB\u52A1[{}]\u5931\u8D25\uFF0C\u76EE\u6807\u5B57\u7B26\u4E32\u4E0D\u5141\u8BB8'ldap(s)'\u8C03\u7528 +job.update.failed.http.not.valid=\u4FEE\u6539\u4EFB\u52A1[{}]\u5931\u8D25\uFF0C\u76EE\u6807\u5B57\u7B26\u4E32\u4E0D\u5141\u8BB8'http(s)'\u8C03\u7528 +job.update.failed.string.error=\u4FEE\u6539\u4EFB\u52A1[{}]\u5931\u8D25\uFF0C\u76EE\u6807\u5B57\u7B26\u4E32\u5B58\u5728\u8FDD\u89C4 +job.update.failed.string.not.valid=\u4FEE\u6539\u4EFB\u52A1[{}]\u5931\u8D25\uFF0C\u76EE\u6807\u5B57\u7B26\u4E32\u4E0D\u5728\u767D\u540D\u5355\u5185 +job.not.exists=\u4EFB\u52A1\u4E0D\u5B58\u5728\u6216\u5DF2\u8FC7\u671F +##DeviceUser +device.user.delete.failed.user.not.valid=\u8BBE\u5907\u6240\u6709\u8005\u4E0D\u80FD\u5220\u9664 +##GoviewProject +goview.project.data.save.failed.id.null=\u6CA1\u6709\u8BE5\u9879\u76EEID +goview.project.data.execute.sql.failed=\u8BF7\u7F16\u5199sql\u8BED\u53E5 +##ThingsModel +things.model.identifier.repeat=\u4EA7\u54C1\u4E0B\u7684\u6807\u8BC6\u7B26\u4E0D\u80FD\u91CD\u590D +things.model.import.failed.identifier.repeat=[{}]\u6761\u6570\u636E\u672A\u5BFC\u5165\uFF0C\u6807\u8BC6\u7B26\u91CD\u590D +##MQTT +mqtt.unauthorized=mqtt\u8D26\u53F7\u548C\u5BC6\u7801\u4E0E\u8BA4\u8BC1\u670D\u52A1\u5668\u914D\u7F6E\u4E0D\u5339\u914D +##Oauth +oauth.response.type.not.valid=response_type\u53C2\u6570\u503C\u53EA\u5141\u8BB8code\u548Ctoken +oauth.grant.type.null=\u672A\u77E5\u6388\u6743\u7C7B\u578B +oauth.grant.type.implicit.not.support=Token\u63A5\u53E3\u4E0D\u652F\u6301implicit\u6388\u6743\u6A21\u5F0F +oauth.access.token.null=\u8BBF\u95EE\u4EE4\u724C\u4E0D\u80FD\u4E3A\u7A7A +obtain.basic.authorization.failed=client_id\u6216client_secret\u672A\u6B63\u786E\u4F20\u9012 +##Record +record.app.null=app\u4E0D\u80FD\u4E3A\u7A7A +record.stream.null=stream\u4E0D\u80FD\u4E3A\u7A7A +record.time.not.valid=\u9519\u8BEF\u7684\u5F00\u59CB\u65F6\u95F4\u6216\u7ED3\u675F\u65F6\u95F4 +record.file.null=\u672A\u627E\u5230\u89C6\u9891\u6587\u4EF6 + +##ErrorCodeConstants +app.not.found=App \u4E0D\u5B58\u5728 +app.is.disable=App \u5DF2\u7ECF\u88AB\u7981\u7528 +app.exist.order.cant.delete=\u652F\u4ED8\u5E94\u7528\u5B58\u5728\u652F\u4ED8\u8BA2\u5355\uFF0C\u65E0\u6CD5\u5220\u9664 +app.exist.refund.cant.delete=\u652F\u4ED8\u5E94\u7528\u5B58\u5728\u9000\u6B3E\u8BA2\u5355\uFF0C\u65E0\u6CD5\u5220\u9664 +channel.not.found=\u652F\u4ED8\u6E20\u9053\u7684\u914D\u7F6E\u4E0D\u5B58\u5728 +channel.is.disable=\u652F\u4ED8\u6E20\u9053\u5DF2\u7ECF\u7981\u7528 +channel.exists.same.channel.error=\u5DF2\u5B58\u5728\u76F8\u540C\u7684\u6E20\u9053 +order.not.found=\u652F\u4ED8\u8BA2\u5355\u4E0D\u5B58\u5728 +order.status.is.not.waiting=\u652F\u4ED8\u8BA2\u5355\u4E0D\u5904\u4E8E\u5F85\u652F\u4ED8 +order.status.is.success=\u8BA2\u5355\u5DF2\u652F\u4ED8\uFF0C\u8BF7\u5237\u65B0\u9875\u9762 +order.is.expired=\u652F\u4ED8\u8BA2\u5355\u5DF2\u7ECF\u8FC7\u671F +order.submit.channel.error=\u53D1\u8D77\u652F\u4ED8\u62A5\u9519\uFF0C\u9519\u8BEF\u7801\uFF1A{}\uFF0C\u9519\u8BEF\u63D0\u793A\uFF1A{} +order.refund.fail.status.error=\u652F\u4ED8\u8BA2\u5355\u9000\u6B3E\u5931\u8D25\uFF0C\u539F\u56E0\uFF1A\u72B6\u6001\u4E0D\u662F\u5DF2\u652F\u4ED8\u6216\u5DF2\u9000\u6B3E +order.extension.not.found=\u652F\u4ED8\u4EA4\u6613\u62D3\u5C55\u5355\u4E0D\u5B58\u5728 +order.extension.status.is.not.waiting=\u652F\u4ED8\u4EA4\u6613\u62D3\u5C55\u5355\u4E0D\u5904\u4E8E\u5F85\u652F\u4ED8 +order.extension.is.paid=\u8BA2\u5355\u5DF2\u652F\u4ED8\uFF0C\u8BF7\u7B49\u5F85\u652F\u4ED8\u7ED3\u679C +refund.price.exceed=\u9000\u6B3E\u91D1\u989D\u8D85\u8FC7\u8BA2\u5355\u53EF\u9000\u6B3E\u91D1\u989D +refund.has.refunding=\u5DF2\u7ECF\u6709\u9000\u6B3E\u5728\u5904\u7406\u4E2D +refund.exists=\u5DF2\u7ECF\u5B58\u5728\u9000\u6B3E\u5355 +refund.not.found=\u652F\u4ED8\u9000\u6B3E\u5355\u4E0D\u5B58\u5728 +refund.statue.is.not.waiting=\u652F\u4ED8\u9000\u6B3E\u5355\u4E0D\u5904\u4E8E\u5F85\u9000\u6B3E +demo.order.not.found=\u793A\u4F8B\u8BA2\u5355\u4E0D\u5B58\u5728 +demo.order.update.paid.status.not.unpaid=\u793A\u4F8B\u8BA2\u5355\u66F4\u65B0\u652F\u4ED8\u72B6\u6001\u5931\u8D25\uFF0C\u8BA2\u5355\u4E0D\u662F\u3010\u672A\u652F\u4ED8\u3011\u72B6\u6001 +demo.order.update.paid.fail.pay.order.id.error=\u793A\u4F8B\u8BA2\u5355\u66F4\u65B0\u652F\u4ED8\u72B6\u6001\u5931\u8D25\uFF0C\u652F\u4ED8\u5355\u7F16\u53F7\u4E0D\u5339\u914D +demo.order.update.paid.fail.pay.order.status.not.success=\u793A\u4F8B\u8BA2\u5355\u66F4\u65B0\u652F\u4ED8\u72B6\u6001\u5931\u8D25\uFF0C\u652F\u4ED8\u5355\u72B6\u6001\u4E0D\u662F\u3010\u652F\u4ED8\u6210\u529F\u3011\u72B6\u6001 +demo.order.update.paid.fail.pay.price.not.match=\u793A\u4F8B\u8BA2\u5355\u66F4\u65B0\u652F\u4ED8\u72B6\u6001\u5931\u8D25\uFF0C\u652F\u4ED8\u5355\u91D1\u989D\u4E0D\u5339\u914D +demo.order.refund.fail.not.paid=\u53D1\u8D77\u9000\u6B3E\u5931\u8D25\uFF0C\u793A\u4F8B\u8BA2\u5355\u672A\u652F\u4ED8 +demo.order.refund.fail.refunded=\u53D1\u8D77\u9000\u6B3E\u5931\u8D25\uFF0C\u793A\u4F8B\u8BA2\u5355\u5DF2\u9000\u6B3E +demo.order.refund.fail.refund.not.found=\u53D1\u8D77\u9000\u6B3E\u5931\u8D25\uFF0C\u9000\u6B3E\u8BA2\u5355\u4E0D\u5B58\u5728 +demo.order.refund.fail.refund.not.success=\u53D1\u8D77\u9000\u6B3E\u5931\u8D25\uFF0C\u9000\u6B3E\u8BA2\u5355\u672A\u9000\u6B3E\u6210\u529F +demo.order.refund.fail.refund.order.id.error=\u53D1\u8D77\u9000\u6B3E\u5931\u8D25\uFF0C\u9000\u6B3E\u5355\u7F16\u53F7\u4E0D\u5339\u914D +demo.order.refund.fail.refund.price.not.match=\u53D1\u8D77\u9000\u6B3E\u5931\u8D25\uFF0C\u9000\u6B3E\u5355\u91D1\u989D\u4E0D\u5339\u914D +device.can.send=\u6682\u65E0\u6743\u9650\u64CD\u4F5C diff --git a/xinda-admin/src/main/resources/logback.xml b/xinda-admin/src/main/resources/logback.xml new file mode 100644 index 0000000..28d49ee --- /dev/null +++ b/xinda-admin/src/main/resources/logback.xml @@ -0,0 +1,150 @@ + + + + + + + + + + + ${log.pattern} + + + + + + + ${log.path}/sys-debug.log + + + + ${log.path}/sys-debug.%d{yyyy-MM-dd}.log + + 10 + + + ${log.pattern} + + + + DEBUG + + ACCEPT + + DENY + + + + + + ${log.path}/sys-info.log + + + + ${log.path}/sys-info.%d{yyyy-MM-dd}.log + + 10 + + + ${log.pattern} + + + + INFO + + ACCEPT + + DENY + + + + + ${log.path}/sys-error.log + + + + ${log.path}/sys-error.%d{yyyy-MM-dd}.log + + 10 + + + ${log.pattern} + + + + ERROR + + ACCEPT + + DENY + + + + + + ${log.path}/sys-user.log + + + ${log.path}/sys-user.%d{yyyy-MM-dd}.log + + 10 + + + ${log.pattern} + + + + + + + scriptId + 0 + + + + ${log.path}/script/${scriptId}.log + true + --> + + ${log.path}/rule.%d{yyyy-MM}.log + + 3 + + + %d{HH:mm:ss.SSS} [%method,%line] - %msg%n + + + INFO + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/xinda-admin/src/main/resources/mybatis/mybatis-config.xml b/xinda-admin/src/main/resources/mybatis/mybatis-config.xml new file mode 100644 index 0000000..ac47c03 --- /dev/null +++ b/xinda-admin/src/main/resources/mybatis/mybatis-config.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + diff --git a/xinda-common/pom.xml b/xinda-common/pom.xml new file mode 100644 index 0000000..af8e2a9 --- /dev/null +++ b/xinda-common/pom.xml @@ -0,0 +1,213 @@ + + + + xinda + com.xinda + 3.8.5 + + 4.0.0 + + xinda-common + + + common通用工具 + + + + + + + org.springframework + spring-context-support + + + + + org.springframework + spring-web + + + + + org.springframework.boot + spring-boot-starter-security + + + + + com.baomidou + mybatis-plus-boot-starter + + + com.baomidou + mybatis-plus-generator + ${mybatis-plus-generator.version} + + + + + com.github.pagehelper + pagehelper-spring-boot-starter + + + + + org.springframework.boot + spring-boot-starter-validation + + + + + org.apache.commons + commons-lang3 + + + + + com.fasterxml.jackson.core + jackson-databind + + + + + com.baomidou + dynamic-datasource-spring-boot-starter + 3.5.2 + + + + + com.alibaba.fastjson2 + fastjson2 + + + + + commons-io + commons-io + + + + + commons-fileupload + commons-fileupload + + + + + org.apache.poi + poi-ooxml + + + + + org.yaml + snakeyaml + + + + + io.jsonwebtoken + jjwt + + + + + javax.xml.bind + jaxb-api + + + + + org.springframework.boot + spring-boot-starter-data-redis + + + + + org.apache.commons + commons-pool2 + + + + + eu.bitwalker + UserAgentUtils + + + + + javax.servlet + javax.servlet-api + + + + org.projectlombok + lombok + + + + io.swagger + swagger-annotations + 1.6.2 + compile + + + + org.eclipse.paho + org.eclipse.paho.client.mqttv3 + 1.2.5 + compile + + + + cn.hutool + hutool-all + + + + com.fasterxml.jackson.datatype + jackson-datatype-jsr310 + + + + + com.google.guava + guava + + + + + + + + + com.alibaba + easyexcel-core + + + + + org.dromara.sms4j + sms4j-spring-boot-starter + 3.0.4 + + + + org.mapstruct + mapstruct + + + org.mapstruct + mapstruct-jdk8 + + + org.mapstruct + mapstruct-processor + + + + + diff --git a/xinda-common/src/main/java/com/xinda/common/annotation/Anonymous.java b/xinda-common/src/main/java/com/xinda/common/annotation/Anonymous.java new file mode 100644 index 0000000..47d4395 --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/annotation/Anonymous.java @@ -0,0 +1,19 @@ +package com.xinda.common.annotation; + +import java.lang.annotation.Documented; +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +/** + * 匿名访问不鉴权注解 + * + * @author ruoyi + */ +@Target({ ElementType.METHOD, ElementType.TYPE }) +@Retention(RetentionPolicy.RUNTIME) +@Documented +public @interface Anonymous +{ +} diff --git a/xinda-common/src/main/java/com/xinda/common/annotation/DataScope.java b/xinda-common/src/main/java/com/xinda/common/annotation/DataScope.java new file mode 100644 index 0000000..f1d12b2 --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/annotation/DataScope.java @@ -0,0 +1,33 @@ +package com.xinda.common.annotation; + +import java.lang.annotation.Documented; +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +/** + * 数据权限过滤注解 + * + * @author ruoyi + */ +@Target(ElementType.METHOD) +@Retention(RetentionPolicy.RUNTIME) +@Documented +public @interface DataScope +{ + /** + * 部门表的别名 + */ + public String deptAlias() default ""; + + /** + * 用户表的别名 + */ + public String userAlias() default ""; + + /** + * 权限字符(用于多个角色匹配符合要求的权限)默认根据权限注解@ss获取,多个权限用逗号分隔开来 + */ + public String permission() default ""; +} diff --git a/xinda-common/src/main/java/com/xinda/common/annotation/DataSource.java b/xinda-common/src/main/java/com/xinda/common/annotation/DataSource.java new file mode 100644 index 0000000..8dcce96 --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/annotation/DataSource.java @@ -0,0 +1,28 @@ +package com.xinda.common.annotation; + +import java.lang.annotation.Documented; +import java.lang.annotation.ElementType; +import java.lang.annotation.Inherited; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; +import com.xinda.common.enums.DataSourceType; + +/** + * 自定义多数据源切换注解 + * + * 优先级:先方法,后类,如果方法覆盖了类上的数据源类型,以方法的为准,否则以类上的为准 + * + * @author ruoyi + */ +@Target({ ElementType.METHOD, ElementType.TYPE }) +@Retention(RetentionPolicy.RUNTIME) +@Documented +@Inherited +public @interface DataSource +{ + /** + * 切换数据源名称 + */ + public DataSourceType value() default DataSourceType.MASTER; +} diff --git a/xinda-common/src/main/java/com/xinda/common/annotation/DictFormat.java b/xinda-common/src/main/java/com/xinda/common/annotation/DictFormat.java new file mode 100644 index 0000000..e4e26c7 --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/annotation/DictFormat.java @@ -0,0 +1,22 @@ +package com.xinda.common.annotation; + +import java.lang.annotation.*; + +/** + * 字典格式化 + * + * 实现将字典数据的值,格式化成字典数据的标签 + */ +@Target({ElementType.FIELD}) +@Retention(RetentionPolicy.RUNTIME) +@Inherited +public @interface DictFormat { + + /** + * 例如说,SysDictTypeConstants、InfDictTypeConstants + * + * @return 字典类型 + */ + String value(); + +} diff --git a/xinda-common/src/main/java/com/xinda/common/annotation/Excel.java b/xinda-common/src/main/java/com/xinda/common/annotation/Excel.java new file mode 100644 index 0000000..79d660e --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/annotation/Excel.java @@ -0,0 +1,187 @@ +package com.xinda.common.annotation; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; +import java.math.BigDecimal; +import org.apache.poi.ss.usermodel.HorizontalAlignment; +import org.apache.poi.ss.usermodel.IndexedColors; +import com.xinda.common.utils.poi.ExcelHandlerAdapter; + +/** + * 自定义导出Excel数据注解 + * + * @author ruoyi + */ +@Retention(RetentionPolicy.RUNTIME) +@Target(ElementType.FIELD) +public @interface Excel +{ + /** + * 导出时在excel中排序 + */ + public int sort() default Integer.MAX_VALUE; + + /** + * 导出到Excel中的名字. + */ + public String name() default ""; + + /** + * 日期格式, 如: yyyy-MM-dd + */ + public String dateFormat() default ""; + + /** + * 如果是字典类型,请设置字典的type值 (如: sys_user_sex) + */ + public String dictType() default ""; + + /** + * 读取内容转表达式 (如: 0=男,1=女,2=未知) + */ + public String readConverterExp() default ""; + + /** + * 分隔符,读取字符串组内容 + */ + public String separator() default ","; + + /** + * BigDecimal 精度 默认:-1(默认不开启BigDecimal格式化) + */ + public int scale() default -1; + + /** + * BigDecimal 舍入规则 默认:BigDecimal.ROUND_HALF_EVEN + */ + public int roundingMode() default BigDecimal.ROUND_HALF_EVEN; + + /** + * 导出时在excel中每个列的高度 单位为字符 + */ + public double height() default 14; + + /** + * 导出时在excel中每个列的宽 单位为字符 + */ + public double width() default 16; + + /** + * 文字后缀,如% 90 变成90% + */ + public String suffix() default ""; + + /** + * 当值为空时,字段的默认值 + */ + public String defaultValue() default ""; + + /** + * 提示信息 + */ + public String prompt() default ""; + + /** + * 设置只能选择不能输入的列内容. + */ + public String[] combo() default {}; + + /** + * 是否需要纵向合并单元格,应对需求:含有list集合单元格) + */ + public boolean needMerge() default false; + + /** + * 是否导出数据,应对需求:有时我们需要导出一份模板,这是标题需要但内容需要用户手工填写. + */ + public boolean isExport() default true; + + /** + * 另一个类中的属性名称,支持多级获取,以小数点隔开 + */ + public String targetAttr() default ""; + + /** + * 是否自动统计数据,在最后追加一行统计数据总和 + */ + public boolean isStatistics() default false; + + /** + * 导出类型(0数字 1字符串 2图片) + */ + public ColumnType cellType() default ColumnType.STRING; + + /** + * 导出列头背景色 + */ + public IndexedColors headerBackgroundColor() default IndexedColors.GREY_50_PERCENT; + + /** + * 导出列头字体颜色 + */ + public IndexedColors headerColor() default IndexedColors.WHITE; + + /** + * 导出单元格背景色 + */ + public IndexedColors backgroundColor() default IndexedColors.WHITE; + + /** + * 导出单元格字体颜色 + */ + public IndexedColors color() default IndexedColors.BLACK; + + /** + * 导出字段对齐方式 + */ + public HorizontalAlignment align() default HorizontalAlignment.CENTER; + + /** + * 自定义数据处理器 + */ + public Class handler() default ExcelHandlerAdapter.class; + + /** + * 自定义数据处理器参数 + */ + public String[] args() default {}; + + /** + * 字段类型(0:导出导入;1:仅导出;2:仅导入) + */ + Type type() default Type.ALL; + + public enum Type + { + ALL(0), EXPORT(1), IMPORT(2); + private final int value; + + Type(int value) + { + this.value = value; + } + + public int value() + { + return this.value; + } + } + + public enum ColumnType + { + NUMERIC(0), STRING(1), IMAGE(2); + private final int value; + + ColumnType(int value) + { + this.value = value; + } + + public int value() + { + return this.value; + } + } +} \ No newline at end of file diff --git a/xinda-common/src/main/java/com/xinda/common/annotation/Excels.java b/xinda-common/src/main/java/com/xinda/common/annotation/Excels.java new file mode 100644 index 0000000..8f7f7fe --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/annotation/Excels.java @@ -0,0 +1,18 @@ +package com.xinda.common.annotation; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +/** + * Excel注解集 + * + * @author ruoyi + */ +@Target(ElementType.FIELD) +@Retention(RetentionPolicy.RUNTIME) +public @interface Excels +{ + public Excel[] value(); +} diff --git a/xinda-common/src/main/java/com/xinda/common/annotation/Log.java b/xinda-common/src/main/java/com/xinda/common/annotation/Log.java new file mode 100644 index 0000000..e0c7988 --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/annotation/Log.java @@ -0,0 +1,46 @@ +package com.xinda.common.annotation; + +import java.lang.annotation.Documented; +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; +import com.xinda.common.enums.BusinessType; +import com.xinda.common.enums.OperatorType; + +/** + * 自定义操作日志记录注解 + * + * @author ruoyi + * + */ +@Target({ ElementType.PARAMETER, ElementType.METHOD }) +@Retention(RetentionPolicy.RUNTIME) +@Documented +public @interface Log +{ + /** + * 模块 + */ + public String title() default ""; + + /** + * 功能 + */ + public BusinessType businessType() default BusinessType.OTHER; + + /** + * 操作人类别 + */ + public OperatorType operatorType() default OperatorType.MANAGE; + + /** + * 是否保存请求的参数 + */ + public boolean isSaveRequestData() default true; + + /** + * 是否保存响应的参数 + */ + public boolean isSaveResponseData() default true; +} diff --git a/xinda-common/src/main/java/com/xinda/common/annotation/RateLimiter.java b/xinda-common/src/main/java/com/xinda/common/annotation/RateLimiter.java new file mode 100644 index 0000000..2e33587 --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/annotation/RateLimiter.java @@ -0,0 +1,40 @@ +package com.xinda.common.annotation; + +import java.lang.annotation.Documented; +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; +import com.xinda.common.constant.CacheConstants; +import com.xinda.common.enums.LimitType; + +/** + * 限流注解 + * + * @author ruoyi + */ +@Target(ElementType.METHOD) +@Retention(RetentionPolicy.RUNTIME) +@Documented +public @interface RateLimiter +{ + /** + * 限流key + */ + public String key() default CacheConstants.RATE_LIMIT_KEY; + + /** + * 限流时间,单位秒 + */ + public int time() default 60; + + /** + * 限流次数 + */ + public int count() default 100; + + /** + * 限流类型 + */ + public LimitType limitType() default LimitType.DEFAULT; +} diff --git a/xinda-common/src/main/java/com/xinda/common/annotation/RepeatSubmit.java b/xinda-common/src/main/java/com/xinda/common/annotation/RepeatSubmit.java new file mode 100644 index 0000000..666417a --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/annotation/RepeatSubmit.java @@ -0,0 +1,31 @@ +package com.xinda.common.annotation; + +import java.lang.annotation.Documented; +import java.lang.annotation.ElementType; +import java.lang.annotation.Inherited; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +/** + * 自定义注解防止表单重复提交 + * + * @author ruoyi + * + */ +@Inherited +@Target(ElementType.METHOD) +@Retention(RetentionPolicy.RUNTIME) +@Documented +public @interface RepeatSubmit +{ + /** + * 间隔时间(ms),小于此时间视为重复提交 + */ + public int interval() default 5000; + + /** + * 提示消息 + */ + public String message() default "不允许重复提交,请稍候再试"; +} diff --git a/xinda-common/src/main/java/com/xinda/common/annotation/SysProtocol.java b/xinda-common/src/main/java/com/xinda/common/annotation/SysProtocol.java new file mode 100644 index 0000000..24b35ea --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/annotation/SysProtocol.java @@ -0,0 +1,21 @@ +package com.xinda.common.annotation; + +import java.lang.annotation.*; + +/** + * 表示系统内部协议解析器 + * @author gsb + * @date 2022/10/24 10:33 + */ +@Target(ElementType.TYPE) +@Retention(RetentionPolicy.RUNTIME) +@Documented +public @interface SysProtocol { + + /*协议名*/ + String name() default ""; + /*协议编码*/ + String protocolCode() default ""; + //协议描述 + String description() default ""; +} diff --git a/xinda-common/src/main/java/com/xinda/common/config/DeviceTask.java b/xinda-common/src/main/java/com/xinda/common/config/DeviceTask.java new file mode 100644 index 0000000..a99b8d4 --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/config/DeviceTask.java @@ -0,0 +1,109 @@ +package com.xinda.common.config; + +import com.xinda.common.constant.XinDaConstant; +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.scheduling.annotation.EnableAsync; +import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; + +import java.util.concurrent.Executor; +import java.util.concurrent.ThreadPoolExecutor; + +/** + * 设备报文处理线程池 + * @author bill + */ +@Configuration +@EnableAsync +@ConfigurationProperties(prefix = "spring.task.execution.pool") +@Data +public class DeviceTask { + + private int coreSize; + + private int maxSize; + + private int queueCapacity; + + private int keepAlive; + + /*设备状态池*/ + @Bean(XinDaConstant.TASK.DEVICE_STATUS_TASK) + public Executor deviceStatusTaskExecutor() { + return builder(XinDaConstant.TASK.DEVICE_STATUS_TASK); + } + + /*平台自动获取线程池(例如定时获取设备信息)*/ + @Bean(XinDaConstant.TASK.DEVICE_FETCH_PROP_TASK) + public Executor deviceFetchTaskExecutor() { + return builder(XinDaConstant.TASK.DEVICE_FETCH_PROP_TASK); + } + + /*设备回调信息(下发指令(服务)设备应答信息)*/ + @Bean(XinDaConstant.TASK.DEVICE_REPLY_MESSAGE_TASK) + public Executor deviceReplyTaskExecutor() { + return builder(XinDaConstant.TASK.DEVICE_REPLY_MESSAGE_TASK); + } + + /*设备主动上报(设备数据有变化主动上报)*/ + @Bean(XinDaConstant.TASK.DEVICE_UP_MESSAGE_TASK) + public Executor deviceUpMessageTaskExecutor() { + return builder(XinDaConstant.TASK.DEVICE_UP_MESSAGE_TASK); + } + + /*指令下发(服务下发)*/ + @Bean(XinDaConstant.TASK.FUNCTION_INVOKE_TASK) + public Executor functionInvokeTaskExecutor() { + return builder(XinDaConstant.TASK.FUNCTION_INVOKE_TASK); + } + + /*内部消费线程*/ + @Bean(XinDaConstant.TASK.MESSAGE_CONSUME_TASK) + public Executor messageConsumeTaskExecutor() { + return builder(XinDaConstant.TASK.MESSAGE_CONSUME_TASK); + } + + @Bean(XinDaConstant.TASK.MESSAGE_CONSUME_TASK_PUB) + public Executor messageConsumePubTaskExecutor(){ + return builder(XinDaConstant.TASK.MESSAGE_CONSUME_TASK_PUB); + } + + @Bean(XinDaConstant.TASK.MESSAGE_CONSUME_TASK_FETCH) + public Executor messageConsumeFetchTaskExecutor(){ + return builder(XinDaConstant.TASK.MESSAGE_CONSUME_TASK_FETCH); + } + + @Bean(XinDaConstant.TASK.DELAY_UPGRADE_TASK) + public Executor delayedTaskExecutor(){ + return builder(XinDaConstant.TASK.DELAY_UPGRADE_TASK); + } + + /*设备其他消息处理*/ + @Bean(XinDaConstant.TASK.DEVICE_OTHER_TASK) + public Executor deviceOtherTaskExecutor(){ + return builder(XinDaConstant.TASK.DEVICE_OTHER_TASK); + } + + @Bean(XinDaConstant.TASK.DEVICE_TEST_TASK) + public Executor deviceTestTaskExecutor(){ + return builder(XinDaConstant.TASK.DEVICE_TEST_TASK); + } + + /*组装线程池*/ + private ThreadPoolTaskExecutor builder(String threadNamePrefix){ + ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor(); + executor.setCorePoolSize(coreSize); + executor.setMaxPoolSize(maxSize); + executor.setKeepAliveSeconds(keepAlive); + executor.setQueueCapacity(queueCapacity); + // 线程池对拒绝任务的处理策略 + executor.setRejectedExecutionHandler(new ThreadPoolExecutor.DiscardOldestPolicy()); + //线程池名的前缀 + executor.setThreadNamePrefix(threadNamePrefix); + executor.initialize(); + return executor; + } + +} diff --git a/xinda-common/src/main/java/com/xinda/common/config/RuoYiConfig.java b/xinda-common/src/main/java/com/xinda/common/config/RuoYiConfig.java new file mode 100644 index 0000000..a1e9fd8 --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/config/RuoYiConfig.java @@ -0,0 +1,135 @@ +package com.xinda.common.config; + +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.stereotype.Component; + +/** + * 读取项目相关配置 + * + * @author ruoyi + */ +@Component +@ConfigurationProperties(prefix = "xinda") +public class RuoYiConfig +{ + /** 项目名称 */ + private String name; + + /** 版本 */ + private String version; + + /** 版权年份 */ + private String copyrightYear; + + /** 实例演示开关 */ + private boolean demoEnabled; + + /** 上传路径 */ + private static String profile; + + /** 获取地址开关 */ + private static boolean addressEnabled; + + /** 验证码类型 */ + private static String captchaType; + + public String getName() + { + return name; + } + + public void setName(String name) + { + this.name = name; + } + + public String getVersion() + { + return version; + } + + public void setVersion(String version) + { + this.version = version; + } + + public String getCopyrightYear() + { + return copyrightYear; + } + + public void setCopyrightYear(String copyrightYear) + { + this.copyrightYear = copyrightYear; + } + + public boolean isDemoEnabled() + { + return demoEnabled; + } + + public void setDemoEnabled(boolean demoEnabled) + { + this.demoEnabled = demoEnabled; + } + + public static String getProfile() + { + return profile; + } + + public void setProfile(String profile) + { + RuoYiConfig.profile = profile; + } + + public static boolean isAddressEnabled() + { + return addressEnabled; + } + + public void setAddressEnabled(boolean addressEnabled) + { + RuoYiConfig.addressEnabled = addressEnabled; + } + + public static String getCaptchaType() { + return captchaType; + } + + public void setCaptchaType(String captchaType) { + RuoYiConfig.captchaType = captchaType; + } + + /** + * 获取导入上传路径 + */ + public static String getImportPath() + { + return getProfile() + "/import"; + } + + /** + * 获取头像上传路径 + */ + public static String getAvatarPath() + { + return getProfile() + "/avatar"; + } + + /** + * 获取下载路径 + */ + public static String getDownloadPath() + { + return getProfile() + "/download/"; + } + + /** + * 获取上传路径 + */ + public static String getUploadPath() + { + return getProfile() + "/upload"; + } +} diff --git a/xinda-common/src/main/java/com/xinda/common/constant/CacheConstants.java b/xinda-common/src/main/java/com/xinda/common/constant/CacheConstants.java new file mode 100644 index 0000000..e46d751 --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/constant/CacheConstants.java @@ -0,0 +1,64 @@ +package com.xinda.common.constant; + +/** + * 缓存的key 常量 + * + * @author ruoyi + */ +public class CacheConstants +{ + /** + * 登录用户 redis key + */ + public static final String LOGIN_TOKEN_KEY = "login_tokens:"; + + /** + * 登录用户 redis key + */ + public static final String LOGIN_USERID_KEY = "login_userId:"; + + /** + * 验证码 redis key + */ + public static final String CAPTCHA_CODE_KEY = "captcha_codes:"; + + /** + * 参数管理 cache key + */ + public static final String SYS_CONFIG_KEY = "sys_config:"; + + /** + * 字典管理 cache key + */ + public static final String SYS_DICT_KEY = "sys_dict:"; + + /** + * 防重提交 redis key + */ + public static final String REPEAT_SUBMIT_KEY = "repeat_submit:"; + + /** + * 限流 redis key + */ + public static final String RATE_LIMIT_KEY = "rate_limit:"; + + /** + * 登录账户密码错误次数 redis key + */ + public static final String PWD_ERR_CNT_KEY = "pwd_err_cnt:"; + + /** + * 短信登录验证码 redis key + */ + public static final String LOGIN_SMS_CAPTCHA_PHONE = "login_sms_captcha_phone:"; + + /** + * 微信获取accessToken redis key + */ + public static final String WECHAT_GET_ACCESS_TOKEN_APPID = "wechat_get_accessToken:"; + + /** + * 短信注册验证码 redis key + */ + public static final String REGISTER_SMS_CAPTCHA_PHONE = "register_sms_captcha_phone:"; +} diff --git a/xinda-common/src/main/java/com/xinda/common/constant/Constants.java b/xinda-common/src/main/java/com/xinda/common/constant/Constants.java new file mode 100644 index 0000000..082e7c8 --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/constant/Constants.java @@ -0,0 +1,158 @@ +package com.xinda.common.constant; + +import io.jsonwebtoken.Claims; + +/** + * 通用常量信息 + * + * @author ruoyi + */ +public class Constants +{ + /** + * UTF-8 字符集 + */ + public static final String UTF8 = "UTF-8"; + + /** + * GBK 字符集 + */ + public static final String GBK = "GBK"; + + /** + * www主域 + */ + public static final String WWW = "www."; + + /** + * http请求 + */ + public static final String HTTP = "http://"; + + /** + * https请求 + */ + public static final String HTTPS = "https://"; + + /** + * 通用成功标识 + */ + public static final String SUCCESS = "0"; + + /** + * 通用失败标识 + */ + public static final String FAIL = "1"; + + /** + * 登录成功 + */ + public static final String LOGIN_SUCCESS = "Success"; + + /** + * 注销 + */ + public static final String LOGOUT = "Logout"; + + /** + * 注册 + */ + public static final String REGISTER = "Register"; + + /** + * 登录失败 + */ + public static final String LOGIN_FAIL = "Error"; + + /** + * 验证码有效期(分钟) + */ + public static final Integer CAPTCHA_EXPIRATION = 2; + + /** + * 令牌 + */ + public static final String TOKEN = "token"; + + /** + * 令牌前缀 + */ + public static final String TOKEN_PREFIX = "Bearer "; + + /** + * 令牌前缀 + */ + public static final String LOGIN_USER_KEY = "login_user_key"; + + /** + * 用户ID + */ + public static final String JWT_USERID = "userid"; + + /** + * 用户名称 + */ + public static final String JWT_USERNAME = Claims.SUBJECT; + + /** + * 用户头像 + */ + public static final String JWT_AVATAR = "avatar"; + + /** + * 创建时间 + */ + public static final String JWT_CREATED = "created"; + + /** + * 用户权限 + */ + public static final String JWT_AUTHORITIES = "authorities"; + + /** + * 资源映射路径 前缀 + */ + public static final String RESOURCE_PREFIX = "/profile"; + + /** + * RMI 远程方法调用 + */ + public static final String LOOKUP_RMI = "rmi:"; + + /** + * LDAP 远程方法调用 + */ + public static final String LOOKUP_LDAP = "ldap:"; + + /** + * LDAPS 远程方法调用 + */ + public static final String LOOKUP_LDAPS = "ldaps:"; + + /** + * 定时任务白名单配置(仅允许访问的包名,如其他需要可以自行添加) + */ + public static final String[] JOB_WHITELIST_STR = { "com.xinda" }; + + /** + * 定时任务违规的字符 + */ + public static final String[] JOB_ERROR_STR = { "java.net.URL", "javax.naming.InitialContext", "org.yaml.snakeyaml", + "org.springframework", "org.apache", "com.xinda.common.utils.file", "com.xinda.common.config" }; + + /** + * 语言类型 + */ + public static final String LANGUAGE = "language"; + public static final String ZH_CN = "zh-CN"; + public static final String EN_US = "en-US"; + + /** + * 翻译数据类型 + */ + public static final String MENU = "menu"; + public static final String DICT_DATA = "dict_data"; + public static final String DICT_TYPE = "dict_type"; + public static final String THINGS_MODEL = "things_model"; + public static final String THINGS_MODEL_TEMPLATE = "things_model_template"; +} diff --git a/xinda-common/src/main/java/com/xinda/common/constant/GenConstants.java b/xinda-common/src/main/java/com/xinda/common/constant/GenConstants.java new file mode 100644 index 0000000..3122532 --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/constant/GenConstants.java @@ -0,0 +1,117 @@ +package com.xinda.common.constant; + +/** + * 代码生成通用常量 + * + * @author ruoyi + */ +public class GenConstants +{ + /** 单表(增删改查) */ + public static final String TPL_CRUD = "crud"; + + /** 树表(增删改查) */ + public static final String TPL_TREE = "tree"; + + /** 主子表(增删改查) */ + public static final String TPL_SUB = "sub"; + + /** 树编码字段 */ + public static final String TREE_CODE = "treeCode"; + + /** 树父编码字段 */ + public static final String TREE_PARENT_CODE = "treeParentCode"; + + /** 树名称字段 */ + public static final String TREE_NAME = "treeName"; + + /** 上级菜单ID字段 */ + public static final String PARENT_MENU_ID = "parentMenuId"; + + /** 上级菜单名称字段 */ + public static final String PARENT_MENU_NAME = "parentMenuName"; + + /** 数据库字符串类型 */ + public static final String[] COLUMNTYPE_STR = { "char", "varchar", "nvarchar", "varchar2" }; + + /** 数据库文本类型 */ + public static final String[] COLUMNTYPE_TEXT = { "tinytext", "text", "mediumtext", "longtext" }; + + /** 数据库时间类型 */ + public static final String[] COLUMNTYPE_TIME = { "datetime", "time", "date", "timestamp" }; + + /** 数据库数字类型 */ + public static final String[] COLUMNTYPE_NUMBER = { "tinyint", "smallint", "mediumint", "int", "number", "integer", + "bit", "bigint", "float", "double", "decimal" }; + + /** 页面不需要编辑字段 */ + public static final String[] COLUMNNAME_NOT_EDIT = { "id", "create_by", "create_time", "del_flag" }; + + /** 页面不需要显示的列表字段 */ + public static final String[] COLUMNNAME_NOT_LIST = { "id", "create_by", "create_time", "del_flag", "update_by", + "update_time" }; + + /** 页面不需要查询字段 */ + public static final String[] COLUMNNAME_NOT_QUERY = { "id", "create_by", "create_time", "del_flag", "update_by", + "update_time", "remark" }; + + /** Entity基类字段 */ + public static final String[] BASE_ENTITY = { "createBy", "createTime", "updateBy", "updateTime", "remark" }; + + /** Tree基类字段 */ + public static final String[] TREE_ENTITY = { "parentName", "parentId", "orderNum", "ancestors", "children" }; + + /** 文本框 */ + public static final String HTML_INPUT = "input"; + + /** 文本域 */ + public static final String HTML_TEXTAREA = "textarea"; + + /** 下拉框 */ + public static final String HTML_SELECT = "select"; + + /** 单选框 */ + public static final String HTML_RADIO = "radio"; + + /** 复选框 */ + public static final String HTML_CHECKBOX = "checkbox"; + + /** 日期控件 */ + public static final String HTML_DATETIME = "datetime"; + + /** 图片上传控件 */ + public static final String HTML_IMAGE_UPLOAD = "imageUpload"; + + /** 文件上传控件 */ + public static final String HTML_FILE_UPLOAD = "fileUpload"; + + /** 富文本控件 */ + public static final String HTML_EDITOR = "editor"; + + /** 字符串类型 */ + public static final String TYPE_STRING = "String"; + + /** 整型 */ + public static final String TYPE_INTEGER = "Integer"; + + /** 长整型 */ + public static final String TYPE_LONG = "Long"; + + /** 浮点型 */ + public static final String TYPE_DOUBLE = "Double"; + + /** 高精度计算类型 */ + public static final String TYPE_BIGDECIMAL = "BigDecimal"; + + /** 时间类型 */ + public static final String TYPE_DATE = "Date"; + + /** 模糊查询 */ + public static final String QUERY_LIKE = "LIKE"; + + /** 相等查询 */ + public static final String QUERY_EQ = "EQ"; + + /** 需要 */ + public static final String REQUIRE = "1"; +} diff --git a/xinda-common/src/main/java/com/xinda/common/constant/HttpStatus.java b/xinda-common/src/main/java/com/xinda/common/constant/HttpStatus.java new file mode 100644 index 0000000..7ac000a --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/constant/HttpStatus.java @@ -0,0 +1,105 @@ +package com.xinda.common.constant; + +/** + * 返回状态码 + * + * @author ruoyi + */ +public class HttpStatus +{ + /** + * 操作成功 + */ + public static final int SUCCESS = 200; + + /** + * 对象创建成功 + */ + public static final int CREATED = 201; + + /** + * 请求已经被接受 + */ + public static final int ACCEPTED = 202; + + /** + * 操作已经执行成功,但是没有返回数据 + */ + public static final int NO_CONTENT = 204; + + /** + * 资源已被移除 + */ + public static final int MOVED_PERM = 301; + + /** + * 重定向 + */ + public static final int SEE_OTHER = 303; + + /** + * 资源没有被修改 + */ + public static final int NOT_MODIFIED = 304; + + /** + * 参数列表错误(缺少,格式不匹配) + */ + public static final int BAD_REQUEST = 400; + + /** + * 未授权 + */ + public static final int UNAUTHORIZED = 401; + + /** + * 访问受限,授权过期 + */ + public static final int FORBIDDEN = 403; + + /** + * 资源,服务未找到 + */ + public static final int NOT_FOUND = 404; + + /** + * 不允许的http方法 + */ + public static final int BAD_METHOD = 405; + + /** + * 资源冲突,或者资源被锁 + */ + public static final int CONFLICT = 409; + + /** + * 不支持的数据,媒体类型 + */ + public static final int UNSUPPORTED_TYPE = 415; + + /** + * 用户不存在 + */ + public static final int USER_NO_EXIST = 450; + + /** + * 系统内部错误 + */ + public static final int ERROR = 500; + + /** + * 接口未实现 + */ + public static final int NOT_IMPLEMENTED = 501; + + /** + * 不弹窗显示 + */ + public static final int NO_MESSAGE_ALERT = 502; + + + /** + * 系统警告消息 + */ + public static final int WARN = 601; +} diff --git a/xinda-common/src/main/java/com/xinda/common/constant/MagicValueConstants.java b/xinda-common/src/main/java/com/xinda/common/constant/MagicValueConstants.java new file mode 100644 index 0000000..e8c1378 --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/constant/MagicValueConstants.java @@ -0,0 +1,21 @@ +package com.xinda.common.constant; + +/** + * 魔法值常量 + * + * @author ruoyi + */ +public class MagicValueConstants +{ + /** + * 3600 + */ + public static final Integer VALUE_3600 = 3600; + + /** + * 60 + */ + public static final Integer VALUE_60 = 60; + + +} diff --git a/xinda-common/src/main/java/com/xinda/common/constant/ProductAuthConstant.java b/xinda-common/src/main/java/com/xinda/common/constant/ProductAuthConstant.java new file mode 100644 index 0000000..b08232a --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/constant/ProductAuthConstant.java @@ -0,0 +1,41 @@ +package com.xinda.common.constant; + +/** + * + * @author fastb + * @date 2023-08-03 10:20 + */ +public class ProductAuthConstant { + + /** + * 产品设备认证方式-简单认证 + */ + public static final Integer AUTH_WAY_SIMPLE = 1; + /** + * 产品设备认证方式-简单认证 + */ + public static final Integer AUTH_WAY_ENCRYPT = 2; + /** + * 产品设备认证方式-简单认证 + */ + public static final Integer AUTH_WAY_SIMPLE_AND_ENCRYPT = 3; + + /** + * 产品设备客户端ID认证类型-简单认证 + */ + public static final String CLIENT_ID_AUTH_TYPE_SIMPLE = "S"; + + /** + * 产品设备客户端ID认证类型-简单认证 + */ + public static final String CLIENT_ID_AUTH_TYPE_ENCRYPT = "E"; + /** + * 设备授权 + */ + public static final Integer AUTHORIZE = 1; + /** + * 设备没有授权 + */ + public static final Integer NO_AUTHORIZE = 1; + +} diff --git a/xinda-common/src/main/java/com/xinda/common/constant/ScadaConstant.java b/xinda-common/src/main/java/com/xinda/common/constant/ScadaConstant.java new file mode 100644 index 0000000..10847c1 --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/constant/ScadaConstant.java @@ -0,0 +1,14 @@ +package com.xinda.common.constant; + +/** + * @author fastb + * @version 1.0 + * @description: 组态常量类 + * @date 2024-01-02 14:40 + */ +public class ScadaConstant { + + public static final String COMPONENT_TEMPLATE_DEFAULT = "
\n

自定义组件案例

\n

支持element ui、样式自定义、vue的语法等

\n 点击按钮\n
"; + public static final String COMPONENT_SCRIPT_DEFAULT = "export default {\n data() {\n return {}\n },\n created() {\n\n },\n mounted(){\n\n },\n methods:{\n handleClick(){\n this.$message('这是一条消息提示');\n }\n }\n}"; + public static final String COMPONENT_STYLE_DEFAULT = "h2 {\n color:#409EFF\n}\n\nh4 {\n color:#F56C6C\n}"; +} diff --git a/xinda-common/src/main/java/com/xinda/common/constant/SceneModelConstants.java b/xinda-common/src/main/java/com/xinda/common/constant/SceneModelConstants.java new file mode 100644 index 0000000..e07122c --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/constant/SceneModelConstants.java @@ -0,0 +1,47 @@ +package com.xinda.common.constant; + +/** + * @author fastb + * @version 1.0 + * @description: 场景相关的场景 + * @date 2024-06-04 15:26 + */ +public class SceneModelConstants { + + /** + * 时 + */ + public static final String CYCLE_HOUR = "hour"; + + /** + * 日 + */ + public static final String CYCLE_DAY = "day"; + + /** + * 周 + */ + public static final String CYCLE_WEEK = "week"; + + /** + * 月 + */ + public static final String CYCLE_MONTH = "month"; + + /** + * 当日 + */ + public static final Integer CYCLE_TO_TYPE_NOW_DAY = 1; + /** + * 次日 + */ + public static final Integer CYCLE_TO_TYPE_SECOND_DAY = 2; + /** + * 周 + */ + public static final Integer CYCLE_TO_TYPE_WEEK = 3; + /** + * 月 + */ + public static final Integer CYCLE_TO_TYPE_MONTH = 4; +} diff --git a/xinda-common/src/main/java/com/xinda/common/constant/ScheduleConstants.java b/xinda-common/src/main/java/com/xinda/common/constant/ScheduleConstants.java new file mode 100644 index 0000000..c030139 --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/constant/ScheduleConstants.java @@ -0,0 +1,50 @@ +package com.xinda.common.constant; + +/** + * 任务调度通用常量 + * + * @author ruoyi + */ +public class ScheduleConstants +{ + public static final String TASK_CLASS_NAME = "TASK_CLASS_NAME"; + + /** 执行目标key */ + public static final String TASK_PROPERTIES = "TASK_PROPERTIES"; + + /** 默认 */ + public static final String MISFIRE_DEFAULT = "0"; + + /** 立即触发执行 */ + public static final String MISFIRE_IGNORE_MISFIRES = "1"; + + /** 触发一次执行 */ + public static final String MISFIRE_FIRE_AND_PROCEED = "2"; + + /** 不触发立即执行 */ + public static final String MISFIRE_DO_NOTHING = "3"; + + public enum Status + { + /** + * 正常 + */ + NORMAL("0"), + /** + * 暂停 + */ + PAUSE("1"); + + private String value; + + private Status(String value) + { + this.value = value; + } + + public String getValue() + { + return value; + } + } +} diff --git a/xinda-common/src/main/java/com/xinda/common/constant/SipConstants.java b/xinda-common/src/main/java/com/xinda/common/constant/SipConstants.java new file mode 100644 index 0000000..3d94ec5 --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/constant/SipConstants.java @@ -0,0 +1,9 @@ +package com.xinda.common.constant; + +public class SipConstants { + public static final String MESSAGE_CATALOG = "Catalog"; + public static final String MESSAGE_KEEP_ALIVE = "Keepalive"; + public static final String MESSAGE_DEVICE_INFO = "DeviceInfo"; + public static final String MESSAGE_RECORD_INFO = "RecordInfo"; + public static final String MESSAGE_MEDIA_STATUS = "MediaStatus"; +} diff --git a/xinda-common/src/main/java/com/xinda/common/constant/UserConstants.java b/xinda-common/src/main/java/com/xinda/common/constant/UserConstants.java new file mode 100644 index 0000000..ee1119d --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/constant/UserConstants.java @@ -0,0 +1,78 @@ +package com.xinda.common.constant; + +/** + * 用户常量信息 + * + * @author ruoyi + */ +public class UserConstants +{ + /** + * 平台内系统用户的唯一标志 + */ + public static final String SYS_USER = "SYS_USER"; + + /** 正常状态 */ + public static final String NORMAL = "0"; + + /** 异常状态 */ + public static final String EXCEPTION = "1"; + + /** 用户封禁状态 */ + public static final String USER_DISABLE = "1"; + + /** 角色封禁状态 */ + public static final String ROLE_DISABLE = "1"; + + /** 部门正常状态 */ + public static final String DEPT_NORMAL = "0"; + + /** 部门停用状态 */ + public static final String DEPT_DISABLE = "1"; + + /** 字典正常状态 */ + public static final String DICT_NORMAL = "0"; + + /** 是否为系统默认(是) */ + public static final String YES = "Y"; + + /** 是否菜单外链(是) */ + public static final String YES_FRAME = "0"; + + /** 是否菜单外链(否) */ + public static final String NO_FRAME = "1"; + + /** 菜单类型(目录) */ + public static final String TYPE_DIR = "M"; + + /** 菜单类型(菜单) */ + public static final String TYPE_MENU = "C"; + + /** 菜单类型(按钮) */ + public static final String TYPE_BUTTON = "F"; + + /** Layout组件标识 */ + public final static String LAYOUT = "Layout"; + + /** ParentView组件标识 */ + public final static String PARENT_VIEW = "ParentView"; + + /** InnerLink组件标识 */ + public final static String INNER_LINK = "InnerLink"; + + /** 校验返回结果码 */ + public final static String UNIQUE = "0"; + public final static String NOT_UNIQUE = "1"; + + /** + * 用户名长度限制 + */ + public static final int USERNAME_MIN_LENGTH = 2; + public static final int USERNAME_MAX_LENGTH = 20; + + /** + * 密码长度限制 + */ + public static final int PASSWORD_MIN_LENGTH = 5; + public static final int PASSWORD_MAX_LENGTH = 20; +} diff --git a/xinda-common/src/main/java/com/xinda/common/constant/XinDaConstant.java b/xinda-common/src/main/java/com/xinda/common/constant/XinDaConstant.java new file mode 100644 index 0000000..479608d --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/constant/XinDaConstant.java @@ -0,0 +1,327 @@ +package com.xinda.common.constant; + +/** + * 常量 + * @author bill + */ +public interface XinDaConstant { + + interface SERVER{ + String UFT8 = "UTF-8"; + String GB2312 = "GB2312"; + + + String MQTT = "mqtt"; + String PORT = "port"; + String ADAPTER = "adapter"; + String FRAMEDECODER ="frameDecoder"; + String DISPATCHER = "dispatcher"; + String DECODER = "decoder"; + String ENCODER = "encoder"; + String MAXFRAMELENGTH = "maxFrameLength"; + String SLICER = "slicer"; + String DELIMITERS = "delimiters"; + String IDLE = "idle"; + String WS_PREFIX = "web-"; + String WM_PREFIX = "server-"; + String FAST_PHONE = "phone-"; + + /*MQTT平台判定离线时间 keepAlive*1.5 */ + Long DEVICE_PING_EXPIRED = 90000L; + } + + interface CLIENT{ + //加盐 + String TOKEN = "xinda-smart!@#$123"; + } + + /*webSocket配置*/ + interface WS{ + String HEART_BEAT = "heartbeat"; + String HTTP_SERVER_CODEC = "httpServerCodec"; + String AGGREGATOR = "aggregator"; + String COMPRESSOR = "compressor"; + String PROTOCOL = "protocol"; + String MQTT_WEBSOCKET = "mqttWebsocket"; + String DECODER = "decoder"; + String ENCODER = "encoder"; + String BROKER_HANDLER = "brokerHandler"; + + } + + interface TASK{ + /**设备上下线任务*/ + String DEVICE_STATUS_TASK = "deviceStatusTask"; + /**设备主动上报任务*/ + String DEVICE_UP_MESSAGE_TASK = "deviceUpMessageTask"; + /**设备回调任务*/ + String DEVICE_REPLY_MESSAGE_TASK = "deviceReplyMessageTask"; + /**设备下行任务*/ + String DEVICE_DOWN_MESSAGE_TASK = "deviceDownMessageTask"; + /**服务调用(指令下发)任务*/ + String FUNCTION_INVOKE_TASK = "functionInvokeTask"; + /**属性读取任务,区分服务调用*/ + String DEVICE_FETCH_PROP_TASK = "deviceFetchPropTask"; + /** + * 设备其他消息处理 + */ + String DEVICE_OTHER_TASK = "deviceOtherMsgTask"; + /** + * 数据调试任务 + */ + String DEVICE_TEST_TASK = "deviceTestMsgTask"; + /**消息消费线程*/ + String MESSAGE_CONSUME_TASK = "messageConsumeTask"; + /*内部消费线程publish*/ + String MESSAGE_CONSUME_TASK_PUB = "messageConsumeTaskPub"; + /*内部消费线程Fetch*/ + String MESSAGE_CONSUME_TASK_FETCH = "messageConsumeTaskFetch"; + /*OTA升级延迟队列*/ + String DELAY_UPGRADE_TASK = "delayUpgradeTask"; + + } + + interface MQTT{ + //*上报平台前缀*//* + String UP_TOPIC_SUFFIX = "post"; + //*下发设备前缀*//* + String DOWN_TOPIC_SUFFIX = "get"; + + /*模拟设备后缀*/ + String PROPERTY_GET_SIMULATE = "simulate"; + + String PREDIX = "/+/+"; + + String DUP = "dup"; + String QOS = "qos"; + String RETAIN = "retain"; + String CLEAN_SESSION = "cleanSession"; + + /*集群方式*/ + String REDIS_CHANNEL = "redis"; + String ROCKET_MQ = "rocketmq"; + } + + /*集群,全局发布的消息类型*/ + interface CHANNEL { + /*设备状态*/ + String DEVICE_STATUS = "device_status"; + /*平台读取属性*/ + String PROP_READ = "prop_read"; + /*推送消息*/ + String PUBLISH = "publish"; + /*服务下发*/ + String FUNCTION_INVOKE = "function_invoke"; + /*事件*/ + String EVENT = "event"; + /*other*/ + String OTHER = "other"; + /*Qos1 推送应答*/ + String PUBLISH_ACK = "publish_ack"; + /*Qos2 发布消息收到*/ + String PUB_REC = "pub_rec"; + /*Qos 发布消息释放*/ + String PUB_REL = "pub_rel"; + /*Qos2 发布消息完成*/ + String PUB_COMP = "pub_comp"; + + String UPGRADE = "upgrade"; + + /*-------------------------ROCKETMQ-------------------------*/ + String SUFFIX = "group"; + /*设备状态*/ + String DEVICE_STATUS_GROUP = DEVICE_STATUS +SUFFIX; + String PROP_READ_GROUP = PROP_READ + SUFFIX; + /*服务下发*/ + String FUNCTION_INVOKE_GROUP = FUNCTION_INVOKE + SUFFIX; + /*推送消息*/ + String PUBLISH_GROUP = PUBLISH + SUFFIX; + /*Qos1 推送应答*/ + String PUBLISH_ACK_GROUP = PUBLISH_ACK +SUFFIX; + /*Qos2 发布消息收到*/ + String PUB_REC_GROUP = PUB_REC + SUFFIX; + /*Qos 发布消息释放*/ + String PUB_REL_GROUP = PUB_REL + SUFFIX; + /*Qos2 发布消息完成*/ + String PUB_COMP_GROUP = PUB_COMP + SUFFIX; + /*OTA升级*/ + String UPGRADE_GROUP = UPGRADE + SUFFIX; + } + + + + /**redisKey 定义*/ + interface REDIS{ + /*redis全局前缀*/ + String GLOBAL_PREFIX_KEY = "xinda:"; + /*设备在线状态*/ + String DEVICE_STATUS_KEY = "device:status"; + /*在线设备列表*/ + String DEVICE_ONLINE_LIST = "device:online:list"; + /*设备实时状态key*/ + String DEVICE_RUNTIME_DATA = "device:runtime:"; + /*通讯协议参数*/ + String DEVICE_PROTOCOL_PARAM = "device:param:"; + /**设备消息id缓存key*/ + String DEVICE_MESSAGE_ID = "device:messageId:"; + /**固件版本key*/ + String FIRMWARE_VERSION = "device:firmware:"; + /** + * 设备信息 + */ + String DEVICE_MSG = "device:msg:"; + + /**采集点变更记录缓存key*/ + String COLLECT_POINT_CHANGE = "collect:point:change:"; + /**属性下发回调*/ + String PROP_READ_STORE = "prop:read:store:"; + /**sip*/ + String RECORDINFO_KEY = "sip:recordinfo:"; + String DEVICEID_KEY = "sip:deviceid:"; + String STREAM_KEY = "sip:stream:"; + String INVITE_KEY = "sip:invite:"; + String SIP_CSEQ_PREFIX = "sip:CSEQ:"; + String DEFAULT_SIP_CONFIG = "sip:config"; + String DEFAULT_MEDIA_CONFIG = "sip:mediaconfig"; + + /**rule*/ + String RULE_SILENT_TIME = "rule:SilentTime"; + + + /**当前连接数*/ + String MESSAGE_CONNECT_COUNT = "messages:connect:count"; + /**总保留消息*/ + String MESSAGE_RETAIN_TOTAL = "message:retain:total"; + + /**主题数*/ + String MESSAGE_TOPIC_TOTAL = "message:topic:total"; + /*发送消息数*/ + String MESSAGE_SEND_TOTAL = "message:send:total"; + /*接收消息数*/ + String MESSAGE_RECEIVE_TOTAL = "message:receive:total"; + /*连接次数*/ + String MESSAGE_CONNECT_TOTAL = "message:connect:total"; + /**认证次数*/ + String MESSAGE_AUTH_TOTAL = "message:auth:total"; + /**订阅次数*/ + String MESSAGE_SUBSCRIBE_TOTAL = "message:subscribe:total"; + + /**今日接收消息*/ + String MESSAGE_RECEIVE_TODAY = "message:receive:today"; + /**今日发送消息*/ + String MESSAGE_SEND_TODAY = "message:send:today"; + + + // 物模型值命名空间:Key:TSLV:{productId}_{deviceNumber} HKey:{identity#V/identity#S/identity#M/identity#N} + /** + * v-值 + * s-影子值 + * m-是否为检测值 + * n-名称 + */ + String DEVICE_PRE_KEY = "TSLV:"; + + // 物模型命名空间:Key:TSL:{productId} + String TSL_PRE_KEY ="TSL:"; + + String MODBUS_PRE_KEY = "MODBUS:"; + + /**modbus缓存指令*/ + String POLL_MODBUS_KEY = "MODBUS:POLL:"; + /** + * modbus运行时数据 + */ + String MODBUS_RUNTIME = "MODBUS:RUNTIME:"; + + String MODBUS_LOCK = "MODBUS:LOCK:"; + + /** + * 通知企业微信应用消息accessToken缓存key + */ + String NOTIFY_WECOM_APPLY_ACCESSTOKEN ="notify:wecom:apply:"; + + // 场景变量命名空间:Key:SMTV:{sceneModelTagId} + String SCENE_MODEL_TAG_ID ="SMTV:"; + + + } + + interface TOPIC{ + /*属性上报*/ + String PROP = "properties"; + //事件 + String EVENT = "events"; + //功能 + String FUNCTION = "functions"; + /*非OTA消息回复*/ + String MSG_REPLY = "message/reply"; + /*OTA升级回复*/ + String UPGRADE_REPLY = "upgrade/reply"; + /*网关子设备结尾*/ + String SUB = "/sub"; + } + + interface PROTOCOL { + String ModbusRtu = "MODBUS-RTU"; + String YinErDa = "YinErDa"; + String JsonObject = "JSONOBJECT"; + String JsonArray = "JSON"; + String ModbusRtuPak = "MODBUS-RTU-PAK"; + String FlowMeter = "FlowMeter"; + String RJ45 = "RJ45"; + String ModbusToJson = "MODBUS-JSON"; + String ModbusToJsonHP = "MODBUS-JSON-HP"; + String ModbusToJsonZQWL = "MODBUS-JSON-ZQWL"; + String JsonObject_ChenYi = "JSONOBJECT-CHENYI"; + String GEC6100D = "MODBUS-JSON-GEC6100D"; + String SGZ = "SGZ"; + String CH = "CH"; + String GONGKONGBANG_HTSZ = "GONGKONGBANG-HTSZ"; + + + } + + interface URL { + /** + * 微信小程序订阅消息推送url前缀 + */ + String WX_MINI_PROGRAM_PUSH_URL_PREFIX = "https://api.weixin.qq.com/cgi-bin/message/subscribe/send"; + /** + * 微信网站、移动应用登录获取用户access_token + */ + String WX_GET_ACCESS_TOKEN_URL_PREFIX = "https://api.weixin.qq.com/sns/oauth2/access_token"; + /** + * 微信小程序登录获取用户会话参数 + */ + String WX_MINI_PROGRAM_GET_USER_SESSION_URL_PREFIX = "https://api.weixin.qq.com/sns/jscode2session"; + /** + * 微信小程序、公众号获取access_token + */ + String WX_MINI_PROGRAM_GET_ACCESS_TOKEN_URL_PREFIX = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential"; + /** + * 微信获取用户信息 + */ + String WX_GET_USER_INFO_URL_PREFIX = "https://api.weixin.qq.com/sns/userinfo"; + /** + * 获取用户手机号信息 + */ + String WX_GET_USER_PHONE_URL_PREFIX = "https://api.weixin.qq.com/wxa/business/getuserphonenumber?access_token="; + /** + * 企业微信获取accessToken + */ + String WECOM_GET_ACCESSTOKEN = "https://qyapi.weixin.qq.com/cgi-bin/gettoken"; + /** + * 企业微信发送应用消息 + */ + String WECOM_APPLY_SEND = "https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token="; + /** + * 微信公众号获取用户信息 + */ + String WX_PUBLIC_ACCOUNT_GET_USER_INFO_URL_PREFIX = "https://api.weixin.qq.com/cgi-bin/user/info"; + /** + * 微信公众号发送模版消息 + */ + String WX_PUBLIC_ACCOUNT_TEMPLATE_SEND_URL_PREFIX = "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token="; + } + +} diff --git a/xinda-common/src/main/java/com/xinda/common/core/controller/BaseController.java b/xinda-common/src/main/java/com/xinda/common/core/controller/BaseController.java new file mode 100644 index 0000000..37122ba --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/core/controller/BaseController.java @@ -0,0 +1,195 @@ +package com.xinda.common.core.controller; + +import com.xinda.common.constant.CacheConstants; +import com.xinda.common.constant.HttpStatus; +import com.xinda.common.core.domain.AjaxResult; +import com.xinda.common.core.domain.model.LoginUser; +import com.xinda.common.core.page.PageDomain; +import com.xinda.common.core.page.TableDataInfo; +import com.xinda.common.core.page.TableSupport; +import com.xinda.common.core.redis.RedisCache; +import com.xinda.common.utils.*; +import com.xinda.common.utils.sql.SqlUtil; +import com.github.pagehelper.PageHelper; +import com.github.pagehelper.PageInfo; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.web.bind.WebDataBinder; +import org.springframework.web.bind.annotation.InitBinder; + +import javax.annotation.Resource; +import java.beans.PropertyEditorSupport; +import java.util.Date; +import java.util.List; + +/** + * web层通用数据处理 + * + * @author ruoyi + */ +public class BaseController { + protected final Logger logger = LoggerFactory.getLogger(this.getClass()); + + @Resource + private RedisCache redisCache; + + /** + * 将前台传递过来的日期格式的字符串,自动转化为Date类型 + */ + @InitBinder + public void initBinder(WebDataBinder binder) { + // Date 类型转换 + binder.registerCustomEditor(Date.class, new PropertyEditorSupport() { + @Override + public void setAsText(String text) { + setValue(DateUtils.parseDate(text)); + } + }); + } + + /** + * 设置请求分页数据 + */ + protected void startPage() { + PageUtils.startPage(); + } + + /** + * 设置请求排序数据 + */ + protected void startOrderBy() { + PageDomain pageDomain = TableSupport.buildPageRequest(); + if (StringUtils.isNotEmpty(pageDomain.getOrderBy())) { + String orderBy = SqlUtil.escapeOrderBySql(pageDomain.getOrderBy()); + PageHelper.orderBy(orderBy); + } + } + + /** + * 清理分页的线程变量 + */ + protected void clearPage() { + PageUtils.clearPage(); + } + + /** + * 响应请求分页数据 + */ + @SuppressWarnings({"rawtypes", "unchecked"}) + protected TableDataInfo getDataTable(List list) { + TableDataInfo rspData = new TableDataInfo(); + rspData.setCode(HttpStatus.SUCCESS); + rspData.setMsg(MessageUtils.message("query.success")); + rspData.setRows(list); + rspData.setTotal(new PageInfo(list).getTotal()); + return rspData; + } + + /** + * 返回成功 + */ + public AjaxResult success() { + return AjaxResult.success(); + } + + /** + * 返回失败消息 + */ + public AjaxResult error() { + return AjaxResult.error(); + } + + /** + * 返回成功消息 + */ + public AjaxResult success(String message) { + return AjaxResult.success(message); + } + + /** + * 返回成功消息 + */ + public AjaxResult success(Object data) { + return AjaxResult.success(data); + } + + /** + * 返回失败消息 + */ + public AjaxResult error(String message) { + return AjaxResult.error(message); + } + + /** + * 返回警告消息 + */ + public AjaxResult warn(String message) { + return AjaxResult.warn(message); + } + + /** + * 响应返回结果 + * + * @param rows 影响行数 + * @return 操作结果 + */ + protected AjaxResult toAjax(int rows) { + return rows > 0 ? AjaxResult.success() : AjaxResult.error(); + } + + /** + * 响应返回结果 + * + * @param result 结果 + * @return 操作结果 + */ + protected AjaxResult toAjax(boolean result) { + return result ? success() : error(); + } + + protected AjaxResult toAjax(Object result) { + return result != null ? success(result) : error(); + } + + /** + * 页面跳转 + */ + public String redirect(String url) { + return StringUtils.format("redirect:{}", url); + } + + /** + * 获取用户缓存信息 + * 由于不同端不能获取最新用户信息,所以优先以用户id缓存key获取用户信息 + */ + public LoginUser getLoginUser() { + LoginUser loginUser = SecurityUtils.getLoginUser(); + Long userId = loginUser.getUserId(); + if (userId != null) { + String userKey = CacheConstants.LOGIN_USERID_KEY + userId; + return redisCache.getCacheObject(userKey); + } + return loginUser; + } + + /** + * 获取登录用户id + */ + public Long getUserId() { + return getLoginUser().getUserId(); + } + + /** + * 获取登录部门id + */ + public Long getDeptId() { + return getLoginUser().getDeptId(); + } + + /** + * 获取登录用户名 + */ + public String getUsername() { + return getLoginUser().getUsername(); + } +} diff --git a/xinda-common/src/main/java/com/xinda/common/core/device/DeviceAndProtocol.java b/xinda-common/src/main/java/com/xinda/common/core/device/DeviceAndProtocol.java new file mode 100644 index 0000000..a47e707 --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/core/device/DeviceAndProtocol.java @@ -0,0 +1,66 @@ +package com.xinda.common.core.device; + +import lombok.Data; + +/** + * @author gsb + * @date 2024/6/14 9:25 + */ +@Data +public class DeviceAndProtocol { + + /** + * 子设备编号 + */ + private Long deviceId; + /** + * 设备编号 + */ + private String serialNumber; + /** + * 协议编号 + */ + private String protocolCode; + /** + * 产品id + */ + private Long productId; + + private String transport; + + /** + * 设备类型 + */ + private Integer deviceType; + /** + * 子设备地址 + */ + private Integer slaveId; + /** + * 网关绑定的子设备地址 + */ + private Integer proSlaveId; + /** + * 网关设备id + */ + private Long gwDeviceId; + /** + * 网关设备产品id + */ + private Long gwProductId; + /** + * 网关设备编号 + */ + private String gwSerialNumber; + /** + * 网关设备名 + */ + private String gwDeviceName; + /** + * 网关产品名 + */ + private String gwProductName; + + private Long tenantId; + +} diff --git a/xinda-common/src/main/java/com/xinda/common/core/domain/AjaxResult.java b/xinda-common/src/main/java/com/xinda/common/core/domain/AjaxResult.java new file mode 100644 index 0000000..15da86c --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/core/domain/AjaxResult.java @@ -0,0 +1,214 @@ +package com.xinda.common.core.domain; + +import java.util.HashMap; +import com.xinda.common.constant.HttpStatus; +import com.xinda.common.utils.StringUtils; + +/** + * 操作消息提醒 + * + * @author ruoyi + */ +public class AjaxResult extends HashMap +{ + private static final long serialVersionUID = 1L; + + /** 状态码 */ + public static final String CODE_TAG = "code"; + + /** 返回内容 */ + public static final String MSG_TAG = "msg"; + + /** 数据对象 */ + public static final String DATA_TAG = "data"; + + /** + * 初始化一个新创建的 AjaxResult 对象,使其表示一个空消息。 + */ + public AjaxResult() + { + } + + /** + * 初始化一个新创建的 AjaxResult 对象 + * + * @param code 状态码 + * @param msg 返回内容 + */ + public AjaxResult(int code, String msg) + { + super.put(CODE_TAG, code); + super.put(MSG_TAG, msg); + } + + /** + * 初始化一个新创建的 AjaxResult 对象 + * + * @param code 状态码 + * @param msg 返回内容 + * @param data 数据对象 + */ + public AjaxResult(int code, String msg, Object data) + { + super.put(CODE_TAG, code); + super.put(MSG_TAG, msg); + if (StringUtils.isNotNull(data)) + { + super.put(DATA_TAG, data); + } + } + + + /** + * 初始化一个新创建的 AjaxResult 对象 + * + * @param code 状态码 + * @param msg 返回内容 + * @param data 数据对象 + */ + public AjaxResult(int code, String msg, Object data,int total) + { + super.put(CODE_TAG, code); + super.put(MSG_TAG, msg); + if (StringUtils.isNotNull(data)) + { + super.put(DATA_TAG, data); + } + super.put("total",total); + } + + /** + * 返回成功消息 + * + * @return 成功消息 + */ + public static AjaxResult success() + { + return AjaxResult.success("操作成功"); + } + + /** + * 返回成功数据 + * + * @return 成功消息 + */ + public static AjaxResult success(Object data) + { + return AjaxResult.success("操作成功", data); + } + + /** + * 返回成功数据 + * + * @return 成功消息 + */ + public static AjaxResult success(Object data,int total) + { + return new AjaxResult(HttpStatus.SUCCESS, "操作成功", data,total); + } + + /** + * 返回成功消息 + * + * @param msg 返回内容 + * @return 成功消息 + */ + public static AjaxResult success(String msg) + { + return AjaxResult.success(msg, null); + } + + /** + * 返回成功消息 + * + * @param msg 返回内容 + * @param data 数据对象 + * @return 成功消息 + */ + public static AjaxResult success(String msg, Object data) + { + return new AjaxResult(HttpStatus.SUCCESS, msg, data); + } + + /** + * 返回警告消息 + * + * @param msg 返回内容 + * @return 警告消息 + */ + public static AjaxResult warn(String msg) + { + return AjaxResult.warn(msg, null); + } + + /** + * 返回警告消息 + * + * @param msg 返回内容 + * @param data 数据对象 + * @return 警告消息 + */ + public static AjaxResult warn(String msg, Object data) + { + return new AjaxResult(HttpStatus.WARN, msg, data); + } + + /** + * 返回错误消息 + * + * @return 错误消息 + */ + public static AjaxResult error() + { + return AjaxResult.error("操作失败"); + } + + /** + * 返回错误消息 + * + * @param msg 返回内容 + * @return 错误消息 + */ + public static AjaxResult error(String msg) + { + return AjaxResult.error(msg, null); + } + + /** + * 返回错误消息 + * + * @param msg 返回内容 + * @param data 数据对象 + * @return 错误消息 + */ + public static AjaxResult error(String msg, Object data) + { + return new AjaxResult(HttpStatus.ERROR, msg, data); + } + + /** + * 返回错误消息 + * + * @param code 状态码 + * @param msg 返回内容 + * @return 错误消息 + */ + public static AjaxResult error(int code, String msg) + { + return new AjaxResult(code, msg, null); + } + + /** + * 方便链式调用 + * + * @param key 键 + * @param value 值 + * @return 数据对象 + */ + @Override + public AjaxResult put(String key, Object value) + { + super.put(key, value); + return this; + } +} diff --git a/xinda-common/src/main/java/com/xinda/common/core/domain/BaseDO.java b/xinda-common/src/main/java/com/xinda/common/core/domain/BaseDO.java new file mode 100644 index 0000000..f15e598 --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/core/domain/BaseDO.java @@ -0,0 +1,43 @@ +package com.xinda.common.core.domain; + +import com.baomidou.mybatisplus.annotation.TableLogic; +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; +import java.time.LocalDateTime; + +/** + * 基类,时间类型改为LocalDateTime + * @author fastb + * @date 2023-08-22 9:11 + */ +@Data +public class BaseDO implements Serializable { + private static final long serialVersionUID = 1L; + + /** 创建者 */ + @ApiModelProperty("创建者") + private String createBy; + + /** 创建时间 */ + @ApiModelProperty("创建时间") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private LocalDateTime createTime; + + /** 更新者 */ + @ApiModelProperty("更新者") + private String updateBy; + + /** 更新时间 */ + @ApiModelProperty("更新时间") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private LocalDateTime updateTime; + + /** 逻辑删除 */ + @ApiModelProperty("逻辑删除") + @TableLogic + private Boolean delFlag; + +} diff --git a/xinda-common/src/main/java/com/xinda/common/core/domain/BaseEntity.java b/xinda-common/src/main/java/com/xinda/common/core/domain/BaseEntity.java new file mode 100644 index 0000000..aa8fd94 --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/core/domain/BaseEntity.java @@ -0,0 +1,129 @@ +package com.xinda.common.core.domain; + +import java.io.Serializable; +import java.util.Date; +import java.util.HashMap; +import java.util.Map; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.fasterxml.jackson.annotation.JsonFormat; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonInclude; +import io.swagger.annotations.ApiModelProperty; + +/** + * Entity基类 + * + * @author ruoyi + */ +public class BaseEntity implements Serializable +{ + private static final long serialVersionUID = 1L; + + /** 搜索值 */ + @ApiModelProperty("搜索值") + @JsonIgnore + private String searchValue; + + /** 创建者 */ + @ApiModelProperty("创建者") + private String createBy; + + /** 创建时间 */ + @ApiModelProperty("创建时间") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private Date createTime; + + /** 更新者 */ + @ApiModelProperty("更新者") + private String updateBy; + + /** 更新时间 */ + @ApiModelProperty("更新时间") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private Date updateTime; + + /** 备注 */ + @ApiModelProperty("备注") + private String remark; + + /** 请求参数 */ + @TableField(exist = false) + @ApiModelProperty("请求参数") + @JsonInclude(JsonInclude.Include.NON_EMPTY) + private Map params; + + public String getSearchValue() + { + return searchValue; + } + + public void setSearchValue(String searchValue) + { + this.searchValue = searchValue; + } + + public String getCreateBy() + { + return createBy; + } + + public void setCreateBy(String createBy) + { + this.createBy = createBy; + } + + public Date getCreateTime() + { + return createTime; + } + + public void setCreateTime(Date createTime) + { + this.createTime = createTime; + } + + public String getUpdateBy() + { + return updateBy; + } + + public void setUpdateBy(String updateBy) + { + this.updateBy = updateBy; + } + + public Date getUpdateTime() + { + return updateTime; + } + + public void setUpdateTime(Date updateTime) + { + this.updateTime = updateTime; + } + + public String getRemark() + { + return remark; + } + + public void setRemark(String remark) + { + this.remark = remark; + } + + public Map getParams() + { + if (params == null) + { + params = new HashMap<>(); + } + return params; + } + + public void setParams(Map params) + { + this.params = params; + } +} diff --git a/xinda-common/src/main/java/com/xinda/common/core/domain/CommonResult.java b/xinda-common/src/main/java/com/xinda/common/core/domain/CommonResult.java new file mode 100644 index 0000000..1a900b3 --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/core/domain/CommonResult.java @@ -0,0 +1,112 @@ +package com.xinda.common.core.domain; + +import com.xinda.common.enums.GlobalErrorCodeConstants; +import com.xinda.common.exception.ErrorCode; +import com.xinda.common.exception.ServiceException; +import com.fasterxml.jackson.annotation.JsonIgnore; +import lombok.Data; +import org.springframework.util.Assert; + +import java.io.Serializable; +import java.util.Objects; + +/** + * 通用返回 + * + * @param 数据泛型 + */ +@Data +public class CommonResult implements Serializable { + + /** + * 错误码 + * + * @see ErrorCode#getCode() + */ + private Integer code; + /** + * 返回数据 + */ + private T data; + /** + * 错误提示,用户可阅读 + * + * @see ErrorCode#getMsg() () + */ + private String msg; + + /** + * 将传入的 result 对象,转换成另外一个泛型结果的对象 + * + * 因为 A 方法返回的 CommonResult 对象,不满足调用其的 B 方法的返回,所以需要进行转换。 + * + * @param result 传入的 result 对象 + * @param 返回的泛型 + * @return 新的 CommonResult 对象 + */ + public static CommonResult error(CommonResult result) { + return error(result.getCode(), result.getMsg()); + } + + public static CommonResult error(Integer code, String message) { + Assert.isTrue(!GlobalErrorCodeConstants.SUCCESS.getCode().equals(code), "code 必须是错误的!"); + CommonResult result = new CommonResult<>(); + result.code = code; + result.msg = message; + return result; + } + + public static CommonResult error(ErrorCode errorCode) { + return error(errorCode.getCode(), errorCode.getMsg()); + } + + public static CommonResult success(T data) { + CommonResult result = new CommonResult<>(); + result.code = GlobalErrorCodeConstants.SUCCESS.getCode(); + result.data = data; + result.msg = ""; + return result; + } + + public static boolean isSuccess(Integer code) { + return Objects.equals(code, GlobalErrorCodeConstants.SUCCESS.getCode()); + } + + @JsonIgnore // 避免 jackson 序列化 + public boolean isSuccess() { + return isSuccess(code); + } + + @JsonIgnore // 避免 jackson 序列化 + public boolean isError() { + return !isSuccess(); + } + + // ========= 和 Exception 异常体系集成 ========= + + /** + * 判断是否有异常。如果有,则抛出 {@link ServiceException} 异常 + */ + public void checkError() throws ServiceException { + if (isSuccess()) { + return; + } + // 业务异常 + throw new ServiceException(code, msg); + } + + /** + * 判断是否有异常。如果有,则抛出 {@link ServiceException} 异常 + * 如果没有,则返回 {@link #data} 数据 + */ + @JsonIgnore // 避免 jackson 序列化 + public T getCheckedData() { + checkError(); + return data; + } + + public static CommonResult error(ServiceException serviceException) { + return error(serviceException.getCode(), serviceException.getMessage()); + } + +} diff --git a/xinda-common/src/main/java/com/xinda/common/core/domain/ImportExcelVO.java b/xinda-common/src/main/java/com/xinda/common/core/domain/ImportExcelVO.java new file mode 100644 index 0000000..e20201b --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/core/domain/ImportExcelVO.java @@ -0,0 +1,36 @@ +package com.xinda.common.core.domain; + +import com.xinda.common.annotation.Excel; +import lombok.Data; + +/** + * @author admin + * @version 1.0 + * @description: TODO + * @date 2024-07-12 16:20 + */ +@Data +public class ImportExcelVO { + + @Excel(name = "ID") + private Long id; + + @Excel(name = "城市ID") + private String code; + + @Excel(name = "行政归属") + private String city; + + @Excel(name = "城市简称") + private String simCity; + + @Excel(name = "拼音") + private String cn; + + @Excel(name = "lat") + private String lat; + + @Excel(name = "lon") + private String lon; + +} diff --git a/xinda-common/src/main/java/com/xinda/common/core/domain/OutputExcelVO.java b/xinda-common/src/main/java/com/xinda/common/core/domain/OutputExcelVO.java new file mode 100644 index 0000000..747e950 --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/core/domain/OutputExcelVO.java @@ -0,0 +1,25 @@ +package com.xinda.common.core.domain; + +import lombok.Data; + +import java.util.List; + +/** + * @author admin + * @version 1.0 + * @description: TODO + * @date 2024-07-12 16:25 + */ +@Data +public class OutputExcelVO { + + private String code; + + private String name; + + private String lat; + + private String lon; + + private List children; +} diff --git a/xinda-common/src/main/java/com/xinda/common/core/domain/PageParam.java b/xinda-common/src/main/java/com/xinda/common/core/domain/PageParam.java new file mode 100644 index 0000000..05682f9 --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/core/domain/PageParam.java @@ -0,0 +1,25 @@ +package com.xinda.common.core.domain; + +import lombok.Data; + +import javax.validation.constraints.Max; +import javax.validation.constraints.Min; +import javax.validation.constraints.NotNull; +import java.io.Serializable; + +@Data +public class PageParam implements Serializable { + + private static final Integer PAGE_NO = 1; + private static final Integer PAGE_SIZE = 10; + + @NotNull(message = "页码不能为空") + @Min(value = 1, message = "页码最小值为 1") + private Integer pageNo = PAGE_NO; + + @NotNull(message = "每页条数不能为空") + @Min(value = 1, message = "每页条数最小值为 1") + @Max(value = 100, message = "每页条数最大值为 100") + private Integer pageSize = PAGE_SIZE; + +} diff --git a/xinda-common/src/main/java/com/xinda/common/core/domain/PageResult.java b/xinda-common/src/main/java/com/xinda/common/core/domain/PageResult.java new file mode 100644 index 0000000..04002d4 --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/core/domain/PageResult.java @@ -0,0 +1,42 @@ +package com.xinda.common.core.domain; + +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; +import java.util.ArrayList; +import java.util.List; + +@Api(tags = "分页结果") +@Data +public final class PageResult implements Serializable { + + @ApiModelProperty(value = "数据", required = true) + private List list; + + @ApiModelProperty(value = "总量", required = true) + private Long total; + + public PageResult() { + } + + public PageResult(List list, Long total) { + this.list = list; + this.total = total; + } + + public PageResult(Long total) { + this.list = new ArrayList<>(); + this.total = total; + } + + public static PageResult empty() { + return new PageResult<>(0L); + } + + public static PageResult empty(Long total) { + return new PageResult<>(total); + } + +} diff --git a/xinda-common/src/main/java/com/xinda/common/core/domain/R.java b/xinda-common/src/main/java/com/xinda/common/core/domain/R.java new file mode 100644 index 0000000..7908b19 --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/core/domain/R.java @@ -0,0 +1,115 @@ +package com.xinda.common.core.domain; + +import java.io.Serializable; +import com.xinda.common.constant.HttpStatus; + +/** + * 响应信息主体 + * + * @author ruoyi + */ +public class R implements Serializable +{ + private static final long serialVersionUID = 1L; + + /** 成功 */ + public static final int SUCCESS = HttpStatus.SUCCESS; + + /** 失败 */ + public static final int FAIL = HttpStatus.ERROR; + + private int code; + + private String msg; + + private T data; + + public static R ok() + { + return restResult(null, SUCCESS, "操作成功"); + } + + public static R ok(T data) + { + return restResult(data, SUCCESS, "操作成功"); + } + + public static R ok(T data, String msg) + { + return restResult(data, SUCCESS, msg); + } + + public static R fail() + { + return restResult(null, FAIL, "操作失败"); + } + + public static R fail(String msg) + { + return restResult(null, FAIL, msg); + } + + public static R fail(T data) + { + return restResult(data, FAIL, "操作失败"); + } + + public static R fail(T data, String msg) + { + return restResult(data, FAIL, msg); + } + + public static R fail(int code, String msg) + { + return restResult(null, code, msg); + } + + private static R restResult(T data, int code, String msg) + { + R apiResult = new R<>(); + apiResult.setCode(code); + apiResult.setData(data); + apiResult.setMsg(msg); + return apiResult; + } + + public int getCode() + { + return code; + } + + public void setCode(int code) + { + this.code = code; + } + + public String getMsg() + { + return msg; + } + + public void setMsg(String msg) + { + this.msg = msg; + } + + public T getData() + { + return data; + } + + public void setData(T data) + { + this.data = data; + } + + public static Boolean isError(R ret) + { + return !isSuccess(ret); + } + + public static Boolean isSuccess(R ret) + { + return R.SUCCESS == ret.getCode(); + } +} diff --git a/xinda-common/src/main/java/com/xinda/common/core/domain/SortingField.java b/xinda-common/src/main/java/com/xinda/common/core/domain/SortingField.java new file mode 100644 index 0000000..efaedba --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/core/domain/SortingField.java @@ -0,0 +1,56 @@ +package com.xinda.common.core.domain; + +import java.io.Serializable; + +/** + * 排序字段 DTO + * + * 类名加了 ing 的原因是,避免和 ES SortField 重名。 + */ +public class SortingField implements Serializable { + + /** + * 顺序 - 升序 + */ + public static final String ORDER_ASC = "asc"; + /** + * 顺序 - 降序 + */ + public static final String ORDER_DESC = "desc"; + + /** + * 字段 + */ + private String field; + /** + * 顺序 + */ + private String order; + + // 空构造方法,解决反序列化 + public SortingField() { + } + + public SortingField(String field, String order) { + this.field = field; + this.order = order; + } + + public String getField() { + return field; + } + + public SortingField setField(String field) { + this.field = field; + return this; + } + + public String getOrder() { + return order; + } + + public SortingField setOrder(String order) { + this.order = order; + return this; + } +} diff --git a/xinda-common/src/main/java/com/xinda/common/core/domain/TenantBaseDO.java b/xinda-common/src/main/java/com/xinda/common/core/domain/TenantBaseDO.java new file mode 100644 index 0000000..9d89397 --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/core/domain/TenantBaseDO.java @@ -0,0 +1,20 @@ +package com.xinda.common.core.domain; + +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * 拓展多租户的 BaseDO 基类 + * + * @author xinda + */ +@Data +@EqualsAndHashCode(callSuper = true) +public abstract class TenantBaseDO extends BaseDO { + + /** + * 多租户编号 + */ + private Long tenantId; + +} diff --git a/xinda-common/src/main/java/com/xinda/common/core/domain/TreeEntity.java b/xinda-common/src/main/java/com/xinda/common/core/domain/TreeEntity.java new file mode 100644 index 0000000..9484ba8 --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/core/domain/TreeEntity.java @@ -0,0 +1,79 @@ +package com.xinda.common.core.domain; + +import java.util.ArrayList; +import java.util.List; + +/** + * Tree基类 + * + * @author ruoyi + */ +public class TreeEntity extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 父菜单名称 */ + private String parentName; + + /** 父菜单ID */ + private Long parentId; + + /** 显示顺序 */ + private Integer orderNum; + + /** 祖级列表 */ + private String ancestors; + + /** 子部门 */ + private List children = new ArrayList<>(); + + public String getParentName() + { + return parentName; + } + + public void setParentName(String parentName) + { + this.parentName = parentName; + } + + public Long getParentId() + { + return parentId; + } + + public void setParentId(Long parentId) + { + this.parentId = parentId; + } + + public Integer getOrderNum() + { + return orderNum; + } + + public void setOrderNum(Integer orderNum) + { + this.orderNum = orderNum; + } + + public String getAncestors() + { + return ancestors; + } + + public void setAncestors(String ancestors) + { + this.ancestors = ancestors; + } + + public List getChildren() + { + return children; + } + + public void setChildren(List children) + { + this.children = children; + } +} diff --git a/xinda-common/src/main/java/com/xinda/common/core/domain/TreeSelect.java b/xinda-common/src/main/java/com/xinda/common/core/domain/TreeSelect.java new file mode 100644 index 0000000..93de9b2 --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/core/domain/TreeSelect.java @@ -0,0 +1,77 @@ +package com.xinda.common.core.domain; + +import java.io.Serializable; +import java.util.List; +import java.util.stream.Collectors; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.xinda.common.core.domain.entity.SysDept; +import com.xinda.common.core.domain.entity.SysMenu; + +/** + * Treeselect树结构实体类 + * + * @author ruoyi + */ +public class TreeSelect implements Serializable +{ + private static final long serialVersionUID = 1L; + + /** 节点ID */ + private Long id; + + /** 节点名称 */ + private String label; + + /** 子节点 */ + @JsonInclude(JsonInclude.Include.NON_EMPTY) + private List children; + + public TreeSelect() + { + + } + + public TreeSelect(SysDept dept) + { + this.id = dept.getDeptId(); + this.label = dept.getDeptName(); + this.children = dept.getChildren().stream().map(TreeSelect::new).collect(Collectors.toList()); + } + + public TreeSelect(SysMenu menu) + { + this.id = menu.getMenuId(); + this.label = menu.getMenuName(); + this.children = menu.getChildren().stream().map(TreeSelect::new).collect(Collectors.toList()); + } + + public Long getId() + { + return id; + } + + public void setId(Long id) + { + this.id = id; + } + + public String getLabel() + { + return label; + } + + public void setLabel(String label) + { + this.label = label; + } + + public List getChildren() + { + return children; + } + + public void setChildren(List children) + { + this.children = children; + } +} diff --git a/xinda-common/src/main/java/com/xinda/common/core/domain/entity/SysDept.java b/xinda-common/src/main/java/com/xinda/common/core/domain/entity/SysDept.java new file mode 100644 index 0000000..ea64cae --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/core/domain/entity/SysDept.java @@ -0,0 +1,311 @@ +package com.xinda.common.core.domain.entity; + +import java.util.ArrayList; +import java.util.List; +import javax.validation.constraints.Email; +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; +import javax.validation.constraints.Size; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; +import com.xinda.common.core.domain.BaseEntity; + +/** + * 部门表 sys_dept + * + * @author ruoyi + */ +@ApiModel(value = "SysDept", description = "部门表 sys_dept") +public class SysDept extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 部门ID */ + @ApiModelProperty("部门ID") + private Long deptId; + + /** + * 机构系统账号ID + */ + private Long deptUserId; + + /** 父部门ID */ + @ApiModelProperty("父部门ID") + private Long parentId; + + /** 祖级列表 */ + @ApiModelProperty("祖级列表") + private String ancestors; + + /** 部门名称 */ + @ApiModelProperty("部门名称") + private String deptName; + + /** 显示顺序 */ + @ApiModelProperty("显示顺序") + private Integer orderNum; + + /** 负责人 */ + @ApiModelProperty("负责人") + private String leader; + + /** 联系电话 */ + @ApiModelProperty("联系电话") + private String phone; + + /** 邮箱 */ + @ApiModelProperty("邮箱") + private String email; + + /** 部门状态:0正常,1停用 */ + @ApiModelProperty("部门状态:0正常,1停用") + private String status; + + /** 删除标志(0代表存在 2代表删除) */ + @ApiModelProperty("删除标志(0代表存在 2代表删除)") + private String delFlag; + + /** 父部门名称 */ + @ApiModelProperty("父部门名称") + private String parentName; + + /** 子部门 */ + @ApiModelProperty("子部门") + private List children = new ArrayList(); + + /** + * 系统账号名称 + */ + private String userName; + + /** + * 系统账号密码 + */ + private String password; + + /** + * 确认密码 + */ + private String confirmPassword; + + /** + * 机构类型 + */ + private Integer deptType; + + public Boolean getShowOwner() { + return showOwner; + } + + public void setShowOwner(Boolean showOwner) { + this.showOwner = showOwner; + } + + /** + * 是否显示自己 + */ + private Boolean showOwner; + + /** + * 管理员姓名 + */ + private String deptUserName; + + public String getDeptUserName() { + return deptUserName; + } + + public void setDeptUserName(String deptUserName) { + this.deptUserName = deptUserName; + } + + public Integer getDeptType() { + return deptType; + } + + public void setDeptType(Integer deptType) { + this.deptType = deptType; + } + + public String getUserName() { + return userName; + } + + public void setUserName(String userName) { + this.userName = userName; + } + + public String getPassword() { + return password; + } + + public void setPassword(String password) { + this.password = password; + } + + public String getConfirmPassword() { + return confirmPassword; + } + + public void setConfirmPassword(String confirmPassword) { + this.confirmPassword = confirmPassword; + } + + public Long getDeptUserId() { + return deptUserId; + } + + public void setDeptUserId(Long deptUserId) { + this.deptUserId = deptUserId; + } + + public Long getDeptId() + { + return deptId; + } + + public void setDeptId(Long deptId) + { + this.deptId = deptId; + } + + public Long getParentId() + { + return parentId; + } + + public void setParentId(Long parentId) + { + this.parentId = parentId; + } + + public String getAncestors() + { + return ancestors; + } + + public void setAncestors(String ancestors) + { + this.ancestors = ancestors; + } + + @NotBlank(message = "部门名称不能为空") + @Size(min = 0, max = 30, message = "部门名称长度不能超过30个字符") + public String getDeptName() + { + return deptName; + } + + public void setDeptName(String deptName) + { + this.deptName = deptName; + } + + @NotNull(message = "显示顺序不能为空") + public Integer getOrderNum() + { + return orderNum; + } + + public void setOrderNum(Integer orderNum) + { + this.orderNum = orderNum; + } + + public String getLeader() + { + return leader; + } + + public void setLeader(String leader) + { + this.leader = leader; + } + + @Size(min = 0, max = 11, message = "联系电话长度不能超过11个字符") + public String getPhone() + { + return phone; + } + + public void setPhone(String phone) + { + this.phone = phone; + } + + @Email(message = "邮箱格式不正确") + @Size(min = 0, max = 50, message = "邮箱长度不能超过50个字符") + public String getEmail() + { + return email; + } + + public void setEmail(String email) + { + this.email = email; + } + + public String getStatus() + { + return status; + } + + public void setStatus(String status) + { + this.status = status; + } + + public String getDelFlag() + { + return delFlag; + } + + public void setDelFlag(String delFlag) + { + this.delFlag = delFlag; + } + + public String getParentName() + { + return parentName; + } + + public void setParentName(String parentName) + { + this.parentName = parentName; + } + + public List getChildren() + { + return children; + } + + public void setChildren(List children) + { + this.children = children; + } + + @Override + public String toString() { + return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) + .append("deptId", getDeptId()) + .append("deptUserId", getDeptUserId()) + .append("parentId", getParentId()) + .append("ancestors", getAncestors()) + .append("deptName", getDeptName()) + .append("orderNum", getOrderNum()) + .append("leader", getLeader()) + .append("phone", getPhone()) + .append("email", getEmail()) + .append("status", getStatus()) + .append("delFlag", getDelFlag()) + .append("createBy", getCreateBy()) + .append("createTime", getCreateTime()) + .append("updateBy", getUpdateBy()) + .append("updateTime", getUpdateTime()) + .toString(); + } +} diff --git a/xinda-common/src/main/java/com/xinda/common/core/domain/entity/SysDictData.java b/xinda-common/src/main/java/com/xinda/common/core/domain/entity/SysDictData.java new file mode 100644 index 0000000..cd97b47 --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/core/domain/entity/SysDictData.java @@ -0,0 +1,210 @@ +package com.xinda.common.core.domain.entity; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.Size; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; +import com.xinda.common.annotation.Excel; +import com.xinda.common.annotation.Excel.ColumnType; +import com.xinda.common.constant.UserConstants; +import com.xinda.common.core.domain.BaseEntity; + +/** + * 字典数据表 sys_dict_data + * + * @author ruoyi + */ +@Data +@ApiModel(value = "SysDictData", description = "字典数据表 sys_dict_data") +public class SysDictData extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 字典编码 */ + @ApiModelProperty("字典编码") + @Excel(name = "字典编码", cellType = ColumnType.NUMERIC) + private Long dictCode; + + /** 字典排序 */ + @ApiModelProperty("字典排序") + @Excel(name = "字典排序", cellType = ColumnType.NUMERIC) + private Long dictSort; + + /** 字典标签 */ + @ApiModelProperty("字典标签") + @Excel(name = "字典标签") + private String dictLabel; + + /** 字典标签 */ + @ApiModelProperty("中文字典标签") + private String dictLabel_zh_CN; + + /** 字典标签 */ + @ApiModelProperty("英文字典标签") + private String dictLabel_en_US; + + /** 字典键值 */ + @ApiModelProperty("字典键值") + @Excel(name = "字典键值") + private String dictValue; + + /** 字典类型 */ + @ApiModelProperty("字典类型") + @Excel(name = "字典类型") + private String dictType; + + /** 样式属性(其他样式扩展) */ + @ApiModelProperty("样式属性(其他样式扩展)") + private String cssClass; + + /** 表格字典样式 */ + @ApiModelProperty("表格字典样式") + private String listClass; + + /** 是否默认(Y是 N否) */ + @ApiModelProperty("是否默认(Y是 N否)") + @Excel(name = "是否默认", readConverterExp = "Y=是,N=否") + private String isDefault; + + /** 状态(0正常 1停用) */ + @ApiModelProperty("状态(0正常 1停用)") + @Excel(name = "状态", readConverterExp = "0=正常,1=停用") + private String status; + + @Deprecated + private String language; + + public Long getDictCode() + { + return dictCode; + } + + public void setDictCode(Long dictCode) + { + this.dictCode = dictCode; + } + + public Long getDictSort() + { + return dictSort; + } + + public void setDictSort(Long dictSort) + { + this.dictSort = dictSort; + } + + @NotBlank(message = "字典标签不能为空") + @Size(min = 0, max = 100, message = "字典标签长度不能超过100个字符") + public String getDictLabel() + { + return dictLabel; + } + + public void setDictLabel(String dictLabel) + { + this.dictLabel = dictLabel; + } + + @NotBlank(message = "字典键值不能为空") + @Size(min = 0, max = 100, message = "字典键值长度不能超过100个字符") + public String getDictValue() + { + return dictValue; + } + + public void setDictValue(String dictValue) + { + this.dictValue = dictValue; + } + + @NotBlank(message = "字典类型不能为空") + @Size(min = 0, max = 100, message = "字典类型长度不能超过100个字符") + public String getDictType() + { + return dictType; + } + + public void setDictType(String dictType) + { + this.dictType = dictType; + } + + @Size(min = 0, max = 100, message = "样式属性长度不能超过100个字符") + public String getCssClass() + { + return cssClass; + } + + public void setCssClass(String cssClass) + { + this.cssClass = cssClass; + } + + public String getListClass() + { + return listClass; + } + + public void setListClass(String listClass) + { + this.listClass = listClass; + } + + public boolean getDefault() + { + return UserConstants.YES.equals(this.isDefault); + } + + public String getIsDefault() + { + return isDefault; + } + + public void setIsDefault(String isDefault) + { + this.isDefault = isDefault; + } + + public String getStatus() + { + return status; + } + + public void setStatus(String status) + { + this.status = status; + } + + public String getLanguage() { + return language; + } + + public void setLanguage(String language) { + this.language = language; + } + + @Override + public String toString() { + return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) + .append("dictCode", getDictCode()) + .append("dictSort", getDictSort()) + .append("dictLabel", getDictLabel()) + .append("dictValue", getDictValue()) + .append("dictType", getDictType()) + .append("cssClass", getCssClass()) + .append("listClass", getListClass()) + .append("isDefault", getIsDefault()) + .append("status", getStatus()) + .append("createBy", getCreateBy()) + .append("createTime", getCreateTime()) + .append("updateBy", getUpdateBy()) + .append("updateTime", getUpdateTime()) + .append("remark", getRemark()) + .toString(); + } +} diff --git a/xinda-common/src/main/java/com/xinda/common/core/domain/entity/SysDictType.java b/xinda-common/src/main/java/com/xinda/common/core/domain/entity/SysDictType.java new file mode 100644 index 0000000..436129a --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/core/domain/entity/SysDictType.java @@ -0,0 +1,118 @@ +package com.xinda.common.core.domain.entity; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.Pattern; +import javax.validation.constraints.Size; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; +import com.xinda.common.annotation.Excel; +import com.xinda.common.annotation.Excel.ColumnType; +import com.xinda.common.core.domain.BaseEntity; + +/** + * 字典类型表 sys_dict_type + * + * @author ruoyi + */ +@ApiModel(value = "SysDictType", description = "字典类型表 sys_dict_type") +public class SysDictType extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 字典主键 */ + @ApiModelProperty("字典主键") + @Excel(name = "字典主键", cellType = ColumnType.NUMERIC) + private Long dictId; + + /** 字典名称 */ + @ApiModelProperty("字典名称") + @Excel(name = "字典名称") + private String dictName; + + /** 字典类型 */ + @ApiModelProperty("字典类型") + @Excel(name = "字典类型") + private String dictType; + + /** 状态(0正常 1停用) */ + @ApiModelProperty("状态(0正常 1停用)") + @Excel(name = "状态", readConverterExp = "0=正常,1=停用") + private String status; + + @Deprecated + private String language; + + + public Long getDictId() + { + return dictId; + } + + public void setDictId(Long dictId) + { + this.dictId = dictId; + } + + @NotBlank(message = "字典名称不能为空") + @Size(min = 0, max = 100, message = "字典类型名称长度不能超过100个字符") + public String getDictName() + { + return dictName; + } + + public void setDictName(String dictName) + { + this.dictName = dictName; + } + + @NotBlank(message = "字典类型不能为空") + @Size(min = 0, max = 100, message = "字典类型类型长度不能超过100个字符") + @Pattern(regexp = "^[a-z][a-z0-9_]*$", message = "字典类型必须以字母开头,且只能为(小写字母,数字,下滑线)") + public String getDictType() + { + return dictType; + } + + public void setDictType(String dictType) + { + this.dictType = dictType; + } + + public String getStatus() + { + return status; + } + + public void setStatus(String status) + { + this.status = status; + } + + + public String getLanguage() { + return language; + } + + public void setLanguage(String language) { + this.language = language; + } + + + @Override + public String toString() { + return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) + .append("dictId", getDictId()) + .append("dictName", getDictName()) + .append("dictType", getDictType()) + .append("status", getStatus()) + .append("createBy", getCreateBy()) + .append("createTime", getCreateTime()) + .append("updateBy", getUpdateBy()) + .append("updateTime", getUpdateTime()) + .append("remark", getRemark()) + .toString(); + } +} diff --git a/xinda-common/src/main/java/com/xinda/common/core/domain/entity/SysMenu.java b/xinda-common/src/main/java/com/xinda/common/core/domain/entity/SysMenu.java new file mode 100644 index 0000000..110eb94 --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/core/domain/entity/SysMenu.java @@ -0,0 +1,305 @@ +package com.xinda.common.core.domain.entity; + +import java.util.ArrayList; +import java.util.List; +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; +import javax.validation.constraints.Size; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; +import com.xinda.common.core.domain.BaseEntity; + +/** + * 菜单权限表 sys_menu + * + * @author ruoyi + */ +@ApiModel(value = "SysMenu", description = "菜单权限表 sys_menu") +public class SysMenu extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 菜单ID */ + @ApiModelProperty("菜单ID") + private Long menuId; + + /** 菜单名称 */ + @ApiModelProperty("菜单名称") + private String menuName; + + /** 父菜单名称 */ + @ApiModelProperty("父菜单名称") + private String parentName; + + /** 父菜单ID */ + @ApiModelProperty("父菜单ID") + private Long parentId; + + /** 显示顺序 */ + @ApiModelProperty("显示顺序") + private Integer orderNum; + + /** 路由地址 */ + @ApiModelProperty("路由地址") + private String path; + + /** 组件路径 */ + @ApiModelProperty("组件路径") + private String component; + + /** 路由参数 */ + @ApiModelProperty("路由参数") + private String query; + + /** 是否为外链(0是 1否) */ + @ApiModelProperty("是否为外链(0是 1否)") + private String isFrame; + + /** 是否缓存(0缓存 1不缓存) */ + @ApiModelProperty("是否缓存(0缓存 1不缓存)") + private String isCache; + + /** 类型(M目录 C菜单 F按钮) */ + @ApiModelProperty("类型(M目录 C菜单 F按钮)") + private String menuType; + + /** 显示状态(0显示 1隐藏) */ + @ApiModelProperty("显示状态(0显示 1隐藏)") + private String visible; + + /** 菜单状态(0正常 1停用) */ + @ApiModelProperty("菜单状态(0正常 1停用)") + private String status; + + /** 权限字符串 */ + @ApiModelProperty("权限字符串") + private String perms; + + /** 菜单图标 */ + @ApiModelProperty("菜单图标") + private String icon; + + /** 子菜单 */ + @ApiModelProperty("子菜单") + private List children = new ArrayList(); + + /** + * 部门id + */ + private Long deptId; + + /** 菜单语言 */ + @Deprecated + private String language; + + public void setLanguage(String language) { + this.language = language; + } + + public String getLanguage() { + return language; + } + + + public Long getDeptId() { + return deptId; + } + + public void setDeptId(Long deptId) { + this.deptId = deptId; + } + + public Long getMenuId() + { + return menuId; + } + + public void setMenuId(Long menuId) + { + this.menuId = menuId; + } + + @NotBlank(message = "菜单名称不能为空") + @Size(min = 0, max = 50, message = "菜单名称长度不能超过50个字符") + public String getMenuName() + { + return menuName; + } + + public void setMenuName(String menuName) + { + this.menuName = menuName; + } + + public String getParentName() + { + return parentName; + } + + public void setParentName(String parentName) + { + this.parentName = parentName; + } + + public Long getParentId() + { + return parentId; + } + + public void setParentId(Long parentId) + { + this.parentId = parentId; + } + + @NotNull(message = "显示顺序不能为空") + public Integer getOrderNum() + { + return orderNum; + } + + public void setOrderNum(Integer orderNum) + { + this.orderNum = orderNum; + } + + @Size(min = 0, max = 200, message = "路由地址不能超过200个字符") + public String getPath() + { + return path; + } + + public void setPath(String path) + { + this.path = path; + } + + @Size(min = 0, max = 200, message = "组件路径不能超过255个字符") + public String getComponent() + { + return component; + } + + public void setComponent(String component) + { + this.component = component; + } + + public String getQuery() + { + return query; + } + + public void setQuery(String query) + { + this.query = query; + } + + public String getIsFrame() + { + return isFrame; + } + + public void setIsFrame(String isFrame) + { + this.isFrame = isFrame; + } + + public String getIsCache() + { + return isCache; + } + + public void setIsCache(String isCache) + { + this.isCache = isCache; + } + + @NotBlank(message = "菜单类型不能为空") + public String getMenuType() + { + return menuType; + } + + public void setMenuType(String menuType) + { + this.menuType = menuType; + } + + public String getVisible() + { + return visible; + } + + public void setVisible(String visible) + { + this.visible = visible; + } + + public String getStatus() + { + return status; + } + + public void setStatus(String status) + { + this.status = status; + } + + @Size(min = 0, max = 100, message = "权限标识长度不能超过100个字符") + public String getPerms() + { + return perms; + } + + public void setPerms(String perms) + { + this.perms = perms; + } + + public String getIcon() + { + return icon; + } + + public void setIcon(String icon) + { + this.icon = icon; + } + + public List getChildren() + { + return children; + } + + public void setChildren(List children) + { + this.children = children; + } + + @Override + public String toString() { + return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) + .append("menuId", getMenuId()) + .append("menuName", getMenuName()) + .append("parentId", getParentId()) + .append("orderNum", getOrderNum()) + .append("path", getPath()) + .append("component", getComponent()) + .append("isFrame", getIsFrame()) + .append("IsCache", getIsCache()) + .append("menuType", getMenuType()) + .append("visible", getVisible()) + .append("status ", getStatus()) + .append("perms", getPerms()) + .append("icon", getIcon()) + .append("createBy", getCreateBy()) + .append("createTime", getCreateTime()) + .append("updateBy", getUpdateBy()) + .append("updateTime", getUpdateTime()) + .append("remark", getRemark()) + .toString(); + } +} diff --git a/xinda-common/src/main/java/com/xinda/common/core/domain/entity/SysRole.java b/xinda-common/src/main/java/com/xinda/common/core/domain/entity/SysRole.java new file mode 100644 index 0000000..7f55eea --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/core/domain/entity/SysRole.java @@ -0,0 +1,322 @@ +package com.xinda.common.core.domain.entity; + +import java.util.Set; +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; +import javax.validation.constraints.Size; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; +import com.xinda.common.annotation.Excel; +import com.xinda.common.annotation.Excel.ColumnType; +import com.xinda.common.core.domain.BaseEntity; + +/** + * 角色表 sys_role + * + * @author ruoyi + */ +@ApiModel(value = "SysRole", description = "角色表 sys_role") +public class SysRole extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 角色ID */ + @ApiModelProperty("角色ID") + @Excel(name = "角色序号", cellType = ColumnType.NUMERIC) + private Long roleId; + + /** 角色名称 */ + @ApiModelProperty("角色名称") + @Excel(name = "角色名称") + private String roleName; + + /** 角色权限 */ + @ApiModelProperty("角色权限") + @Excel(name = "角色权限") + private String roleKey; + + /** 角色排序 */ + @ApiModelProperty("角色排序") + @Excel(name = "角色排序") + private Integer roleSort; + + /** 数据范围(1:所有数据权限;2:自定义数据权限;3:本部门数据权限;4:本部门及以下数据权限;5:仅本人数据权限) */ + @ApiModelProperty(value = "数据范围", notes = "(1:所有数据权限;2:自定义数据权限;3:本部门数据权限;4:本部门及以下数据权限;5:仅本人数据权限)") + @Excel(name = "数据范围", readConverterExp = "1=所有数据权限,2=自定义数据权限,3=本部门数据权限,4=本部门及以下数据权限,5=仅本人数据权限") + private String dataScope; + + /** 菜单树选择项是否关联显示( 0:父子不互相关联显示 1:父子互相关联显示) */ + @ApiModelProperty(value = "菜单树选择项是否关联显示", notes = "( 0:父子不互相关联显示 1:父子互相关联显示)") + private boolean menuCheckStrictly; + + /** 部门树选择项是否关联显示(0:父子不互相关联显示 1:父子互相关联显示 ) */ + @ApiModelProperty(value = "部门树选择项是否关联显示", notes = "(0:父子不互相关联显示 1:父子互相关联显示 )") + private boolean deptCheckStrictly; + + /** 角色状态(0正常 1停用) */ + @ApiModelProperty("角色状态(0正常 1停用)") + @Excel(name = "角色状态", readConverterExp = "0=正常,1=停用") + private String status; + + /** 删除标志(0代表存在 2代表删除) */ + @ApiModelProperty("删除标志") + private String delFlag; + + /** 用户是否存在此角色标识 默认不存在 */ + private boolean flag = false; + + /** 菜单组 */ + @ApiModelProperty("菜单组") + private Long[] menuIds; + + /** 部门组(数据权限) */ + @ApiModelProperty("部门组") + private Long[] deptIds; + + /** 角色菜单权限 */ + @ApiModelProperty("角色菜单权限") + private Set permissions; + + /** + * 部门id + */ + private Long deptId; + + /** + * 部门名称 + */ + private String deptName; + + /** + * 是否显示下级机构数据 + */ + private Boolean showChild; + + /** + * 是否可以修改用户角色 + */ + private Boolean canEditRole; + + /** + * 是否是机构管理员角色 + */ + private Boolean manager; + + public Boolean getManager() { + return manager; + } + + public void setManager(Boolean manager) { + this.manager = manager; + } + + public Boolean getCanEditRole() { + return canEditRole; + } + + public void setCanEditRole(Boolean canEditRole) { + this.canEditRole = canEditRole; + } + + public Boolean getShowChild() { + return showChild; + } + + public void setShowChild(Boolean showChild) { + this.showChild = showChild; + } + + public Long getDeptId() { + return deptId; + } + + public void setDeptId(Long deptId) { + this.deptId = deptId; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public SysRole() + { + + } + + public SysRole(Long roleId) + { + this.roleId = roleId; + } + + public Long getRoleId() + { + return roleId; + } + + public void setRoleId(Long roleId) + { + this.roleId = roleId; + } + + public boolean isAdmin() + { + return isAdmin(this.roleId); + } + + public static boolean isAdmin(Long roleId) + { + return roleId != null && 1L == roleId; + } + + @NotBlank(message = "角色名称不能为空") + @Size(min = 0, max = 30, message = "角色名称长度不能超过30个字符") + public String getRoleName() + { + return roleName; + } + + public void setRoleName(String roleName) + { + this.roleName = roleName; + } + + @NotBlank(message = "权限字符不能为空") + @Size(min = 0, max = 100, message = "权限字符长度不能超过100个字符") + public String getRoleKey() + { + return roleKey; + } + + public void setRoleKey(String roleKey) + { + this.roleKey = roleKey; + } + + @NotNull(message = "显示顺序不能为空") + public Integer getRoleSort() + { + return roleSort; + } + + public void setRoleSort(Integer roleSort) + { + this.roleSort = roleSort; + } + + public String getDataScope() + { + return dataScope; + } + + public void setDataScope(String dataScope) + { + this.dataScope = dataScope; + } + + public boolean isMenuCheckStrictly() + { + return menuCheckStrictly; + } + + public void setMenuCheckStrictly(boolean menuCheckStrictly) + { + this.menuCheckStrictly = menuCheckStrictly; + } + + public boolean isDeptCheckStrictly() + { + return deptCheckStrictly; + } + + public void setDeptCheckStrictly(boolean deptCheckStrictly) + { + this.deptCheckStrictly = deptCheckStrictly; + } + + public String getStatus() + { + return status; + } + + public void setStatus(String status) + { + this.status = status; + } + + public String getDelFlag() + { + return delFlag; + } + + public void setDelFlag(String delFlag) + { + this.delFlag = delFlag; + } + + public boolean isFlag() + { + return flag; + } + + public void setFlag(boolean flag) + { + this.flag = flag; + } + + public Long[] getMenuIds() + { + return menuIds; + } + + public void setMenuIds(Long[] menuIds) + { + this.menuIds = menuIds; + } + + public Long[] getDeptIds() + { + return deptIds; + } + + public void setDeptIds(Long[] deptIds) + { + this.deptIds = deptIds; + } + + public Set getPermissions() + { + return permissions; + } + + public void setPermissions(Set permissions) + { + this.permissions = permissions; + } + + @Override + public String toString() { + return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) + .append("roleId", getRoleId()) + .append("roleName", getRoleName()) + .append("roleKey", getRoleKey()) + .append("roleSort", getRoleSort()) + .append("dataScope", getDataScope()) + .append("menuCheckStrictly", isMenuCheckStrictly()) + .append("deptCheckStrictly", isDeptCheckStrictly()) + .append("status", getStatus()) + .append("delFlag", getDelFlag()) + .append("createBy", getCreateBy()) + .append("createTime", getCreateTime()) + .append("updateBy", getUpdateBy()) + .append("updateTime", getUpdateTime()) + .append("remark", getRemark()) + .toString(); + } +} diff --git a/xinda-common/src/main/java/com/xinda/common/core/domain/entity/SysTranslate.java b/xinda-common/src/main/java/com/xinda/common/core/domain/entity/SysTranslate.java new file mode 100644 index 0000000..97e72ee --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/core/domain/entity/SysTranslate.java @@ -0,0 +1,34 @@ +package com.xinda.common.core.domain.entity; + +import com.xinda.common.annotation.Excel; +import com.xinda.common.core.domain.BaseEntity; +import lombok.Data; + +/** + * 翻译对象 sys_translate + * + * @author ruoyi + */ +@Data +public class SysTranslate extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** ID */ + @Excel(name = "ID") + private Long id; + + /** zh_CN */ + @Excel(name = "zh-CN") + private String zh_CN; + + /** en_US */ + @Excel(name = "en-US") + private String en_US; + + /** 物模型翻译表使用 */ + private Long productId; + + private String tableName; + +} diff --git a/xinda-common/src/main/java/com/xinda/common/core/domain/entity/SysUser.java b/xinda-common/src/main/java/com/xinda/common/core/domain/entity/SysUser.java new file mode 100644 index 0000000..d539dbf --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/core/domain/entity/SysUser.java @@ -0,0 +1,396 @@ +package com.xinda.common.core.domain.entity; + +import java.util.Date; +import java.util.List; +import javax.validation.constraints.*; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; +import com.xinda.common.annotation.Excel; +import com.xinda.common.annotation.Excel.ColumnType; +import com.xinda.common.annotation.Excel.Type; +import com.xinda.common.annotation.Excels; +import com.xinda.common.core.domain.BaseEntity; +import com.xinda.common.xss.Xss; + +/** + * 用户对象 sys_user + * + * @author ruoyi + */ +@ApiModel(value = "SysUser", description = "用户对象 sys_user") +public class SysUser extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 用户ID */ + @ApiModelProperty("用户ID") + @Excel(name = "用户序号", cellType = ColumnType.NUMERIC, prompt = "用户编号") + private Long userId; + + /** 部门ID */ + @ApiModelProperty("部门ID") + @Excel(name = "部门编号", type = Type.IMPORT) + private Long deptId; + + /** 用户账号 */ + @ApiModelProperty("用户账号") + @Excel(name = "登录名称") + private String userName; + + /** 用户昵称 */ + @ApiModelProperty("用户昵称") + @Excel(name = "用户名称") + private String nickName; + + /** 用户邮箱 */ + @ApiModelProperty("用户邮箱") + @Excel(name = "用户邮箱") + private String email; + + /** 手机号码 */ + @ApiModelProperty("手机号码") + @Excel(name = "手机号码") + private String phonenumber; + + /** 用户性别 */ + @ApiModelProperty("用户性别") + @Excel(name = "用户性别", readConverterExp = "0=男,1=女,2=未知") + private String sex; + + /** 用户头像 */ + @ApiModelProperty("用户头像") + private String avatar; + + /** 密码 */ + @ApiModelProperty("密码") + private String password; + + /** 帐号状态(0正常 1停用) */ + @ApiModelProperty("帐号状态(0正常 1停用)") + @Excel(name = "帐号状态", readConverterExp = "0=正常,1=停用") + private String status; + + /** 删除标志(0代表存在 2代表删除) */ + @ApiModelProperty("删除标志") + private String delFlag; + + /** 最后登录IP */ + @ApiModelProperty("最后登录IP") + @Excel(name = "最后登录IP", type = Type.EXPORT) + private String loginIp; + + /** 最后登录时间 */ + @ApiModelProperty("最后登录时间") + @Excel(name = "最后登录时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss", type = Type.EXPORT) + private Date loginDate; + + /** 部门对象 */ + @ApiModelProperty("部门对象") + @Excels({ + @Excel(name = "部门名称", targetAttr = "deptName", type = Type.EXPORT), + @Excel(name = "部门负责人", targetAttr = "leader", type = Type.EXPORT) + }) + private SysDept dept; + + /** 角色对象 */ + @ApiModelProperty("角色对象") + private List roles; + + /** 角色组 */ + @ApiModelProperty("角色组") + private Long[] roleIds; + + /** 岗位组 */ + @ApiModelProperty("岗位组") + private Long[] postIds; + + /** 角色ID */ + @ApiModelProperty("角色ID") + private Long roleId; + + /** + * 是否显示下级机构数据 + */ + private Boolean showChild; + + /** + * 是否是机构管理员 + */ + private Boolean manager; + /** + * 语言 + */ + private String language; + /** + * 时区 + */ + private String timeZone; + + public String getLanguage() { + return language; + } + + public void setLanguage(String language) { + this.language = language; + } + + public String getTimeZone() { + return timeZone; + } + + public void setTimeZone(String timeZone) { + this.timeZone = timeZone; + } + + public Boolean getManager() { + return manager; + } + + public void setManager(Boolean manager) { + this.manager = manager; + } + + public Boolean getShowChild() { + return showChild; + } + + public void setShowChild(Boolean showChild) { + this.showChild = showChild; + } + + public SysUser() + { + + } + + public SysUser(Long userId) + { + this.userId = userId; + } + + public Long getUserId() + { + return userId; + } + + public void setUserId(Long userId) + { + this.userId = userId; + } + + public boolean isAdmin() + { + return isAdmin(this.userId); + } + + public static boolean isAdmin(Long userId) + { + return userId != null && 1L == userId; + } + + public Long getDeptId() + { + return deptId; + } + + public void setDeptId(Long deptId) + { + this.deptId = deptId; + } + + @Xss(message = "用户昵称不能包含脚本字符") + @Size(min = 0, max = 30, message = "用户昵称长度不能超过30个字符") + public String getNickName() + { + return nickName; + } + + public void setNickName(String nickName) + { + this.nickName = nickName; + } + + @Xss(message = "用户账号不能包含脚本字符") + @NotBlank(message = "用户账号不能为空") + @Size(min = 0, max = 30, message = "用户账号长度不能超过30个字符") + public String getUserName() + { + return userName; + } + + public void setUserName(String userName) + { + this.userName = userName; + } + + @Email(message = "邮箱格式不正确") + @Size(min = 0, max = 50, message = "邮箱长度不能超过50个字符") + public String getEmail() + { + return email; + } + + public void setEmail(String email) + { + this.email = email; + } + + @Size(min = 0, max = 11, message = "手机号码长度不能超过11个字符") + public String getPhonenumber() + { + return phonenumber; + } + + public void setPhonenumber(String phonenumber) + { + this.phonenumber = phonenumber; + } + + public String getSex() + { + return sex; + } + + public void setSex(String sex) + { + this.sex = sex; + } + + public String getAvatar() + { + return avatar; + } + + public void setAvatar(String avatar) + { + this.avatar = avatar; + } + + public String getPassword() + { + return password; + } + + public void setPassword(String password) + { + this.password = password; + } + + public String getStatus() + { + return status; + } + + public void setStatus(String status) + { + this.status = status; + } + + public String getDelFlag() + { + return delFlag; + } + + public void setDelFlag(String delFlag) + { + this.delFlag = delFlag; + } + + public String getLoginIp() + { + return loginIp; + } + + public void setLoginIp(String loginIp) + { + this.loginIp = loginIp; + } + + public Date getLoginDate() + { + return loginDate; + } + + public void setLoginDate(Date loginDate) + { + this.loginDate = loginDate; + } + + public SysDept getDept() + { + return dept; + } + + public void setDept(SysDept dept) + { + this.dept = dept; + } + + public List getRoles() + { + return roles; + } + + public void setRoles(List roles) + { + this.roles = roles; + } + + public Long[] getRoleIds() + { + return roleIds; + } + + public void setRoleIds(Long[] roleIds) + { + this.roleIds = roleIds; + } + + public Long[] getPostIds() + { + return postIds; + } + + public void setPostIds(Long[] postIds) + { + this.postIds = postIds; + } + + public Long getRoleId() + { + return roleId; + } + + public void setRoleId(Long roleId) + { + this.roleId = roleId; + } + + @Override + public String toString() { + return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) + .append("userId", getUserId()) + .append("deptId", getDeptId()) + .append("userName", getUserName()) + .append("nickName", getNickName()) + .append("email", getEmail()) + .append("phonenumber", getPhonenumber()) + .append("sex", getSex()) + .append("avatar", getAvatar()) + .append("password", getPassword()) + .append("status", getStatus()) + .append("delFlag", getDelFlag()) + .append("loginIp", getLoginIp()) + .append("loginDate", getLoginDate()) + .append("createBy", getCreateBy()) + .append("createTime", getCreateTime()) + .append("updateBy", getUpdateBy()) + .append("updateTime", getUpdateTime()) + .append("remark", getRemark()) + .append("dept", getDept()) + .toString(); + } +} diff --git a/xinda-common/src/main/java/com/xinda/common/core/domain/model/BindLoginBody.java b/xinda-common/src/main/java/com/xinda/common/core/domain/model/BindLoginBody.java new file mode 100644 index 0000000..8978098 --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/core/domain/model/BindLoginBody.java @@ -0,0 +1,22 @@ +package com.xinda.common.core.domain.model; + +/** + * 用户登录对象 + * + * @author ruoyi + */ +public class BindLoginBody extends LoginBody +{ + /** + * 绑定id + */ + private String bindId; + + public String getBindId() { + return bindId; + } + + public void setBindId(String bindId) { + this.bindId = bindId; + } +} diff --git a/xinda-common/src/main/java/com/xinda/common/core/domain/model/BindRegisterBody.java b/xinda-common/src/main/java/com/xinda/common/core/domain/model/BindRegisterBody.java new file mode 100644 index 0000000..be15bea --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/core/domain/model/BindRegisterBody.java @@ -0,0 +1,21 @@ +package com.xinda.common.core.domain.model; + +/** + * 用户注册对象 + * + * @author ruoyi + */ +public class BindRegisterBody extends RegisterBody { + /** + * 绑定id + */ + private String bindId; + + public String getBindId() { + return bindId; + } + + public void setBindId(String bindId) { + this.bindId = bindId; + } +} diff --git a/xinda-common/src/main/java/com/xinda/common/core/domain/model/LoginBody.java b/xinda-common/src/main/java/com/xinda/common/core/domain/model/LoginBody.java new file mode 100644 index 0000000..44e55c2 --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/core/domain/model/LoginBody.java @@ -0,0 +1,109 @@ +package com.xinda.common.core.domain.model; + +/** + * 用户登录对象 + * + * @author ruoyi + */ +public class LoginBody +{ + /** + * 用户名 + */ + private String username; + + /** + * 用户密码 + */ + private String password; + + /** + * 验证码 + */ + private String code; + + /** + * 唯一标识 + */ + private String uuid; + + /** + * 手机号 + */ + private String phonenumber; + + /** + * 登录平台 1-web端;2-移动端;3-小程序 + */ + private Integer sourceType; + + /** + * 短信验证码 + */ + private String smsCode; + + public String getSmsCode() { + return smsCode; + } + + public void setSmsCode(String smsCode) { + this.smsCode = smsCode; + } + + + public Integer getSourceType() { + return sourceType; + } + + public void setSourceType(Integer sourceType) { + this.sourceType = sourceType; + } + + public String getPhonenumber() { + return phonenumber; + } + + public void setPhonenumber(String phonenumber) { + this.phonenumber = phonenumber; + } + + public String getUsername() + { + return username; + } + + public void setUsername(String username) + { + this.username = username; + } + + public String getPassword() + { + return password; + } + + public void setPassword(String password) + { + this.password = password; + } + + public String getCode() + { + return code; + } + + public void setCode(String code) + { + this.code = code; + } + + public String getUuid() + { + return uuid; + } + + public void setUuid(String uuid) + { + this.uuid = uuid; + } +} diff --git a/xinda-common/src/main/java/com/xinda/common/core/domain/model/LoginUser.java b/xinda-common/src/main/java/com/xinda/common/core/domain/model/LoginUser.java new file mode 100644 index 0000000..c114681 --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/core/domain/model/LoginUser.java @@ -0,0 +1,287 @@ +package com.xinda.common.core.domain.model; + +import java.util.Collection; +import java.util.Set; +import org.springframework.security.core.GrantedAuthority; +import org.springframework.security.core.userdetails.UserDetails; +import com.alibaba.fastjson2.annotation.JSONField; +import com.xinda.common.core.domain.entity.SysUser; + +/** + * 登录用户身份权限 + * + * @author ruoyi + */ +public class LoginUser implements UserDetails +{ + private static final long serialVersionUID = 1L; + + /** + * 用户ID + */ + private Long userId; + + /** + * 部门ID + */ + private Long deptId; + + /** + * 用户唯一标识 + */ + private String token; + + /** + * 登录时间 + */ + private Long loginTime; + + /** + * 过期时间 + */ + private Long expireTime; + + /** + * 登录IP地址 + */ + private String ipaddr; + + /** + * 登录地点 + */ + private String loginLocation; + + /** + * 浏览器类型 + */ + private String browser; + + /** + * 操作系统 + */ + private String os; + + /** + * 权限列表 + */ + private Set permissions; + + /** + * 用户信息 + */ + private SysUser user; + + private String language; + + private Long deptUserId; + + public String getLanguage() { + return language; + } + + public Long getDeptUserId() { + return deptUserId; + } + + public void setDeptUserId(Long deptUserId) { + this.deptUserId = deptUserId; + } + + public void setLanguage(String language) { + this.language = language; + } + + public Long getUserId() + { + return userId; + } + + public void setUserId(Long userId) + { + this.userId = userId; + } + + public Long getDeptId() + { + return deptId; + } + + public void setDeptId(Long deptId) + { + this.deptId = deptId; + } + + public String getToken() + { + return token; + } + + public void setToken(String token) + { + this.token = token; + } + + public LoginUser() + { + } + + public LoginUser(SysUser user, Set permissions) + { + this.user = user; + this.permissions = permissions; + } + + public LoginUser(Long userId, Long deptId,String language, SysUser user, Set permissions) + { + this.userId = userId; + this.deptId = deptId; + this.user = user; + this.language = language; + this.permissions = permissions; + } + + @JSONField(serialize = false) + @Override + public String getPassword() + { + return user.getPassword(); + } + + @Override + public String getUsername() + { + return user.getUserName(); + } + + /** + * 账户是否未过期,过期无法验证 + */ + @JSONField(serialize = false) + @Override + public boolean isAccountNonExpired() + { + return true; + } + + /** + * 指定用户是否解锁,锁定的用户无法进行身份验证 + * + * @return + */ + @JSONField(serialize = false) + @Override + public boolean isAccountNonLocked() + { + return true; + } + + /** + * 指示是否已过期的用户的凭据(密码),过期的凭据防止认证 + * + * @return + */ + @JSONField(serialize = false) + @Override + public boolean isCredentialsNonExpired() + { + return true; + } + + /** + * 是否可用 ,禁用的用户不能身份验证 + * + * @return + */ + @JSONField(serialize = false) + @Override + public boolean isEnabled() + { + return true; + } + + public Long getLoginTime() + { + return loginTime; + } + + public void setLoginTime(Long loginTime) + { + this.loginTime = loginTime; + } + + public String getIpaddr() + { + return ipaddr; + } + + public void setIpaddr(String ipaddr) + { + this.ipaddr = ipaddr; + } + + public String getLoginLocation() + { + return loginLocation; + } + + public void setLoginLocation(String loginLocation) + { + this.loginLocation = loginLocation; + } + + public String getBrowser() + { + return browser; + } + + public void setBrowser(String browser) + { + this.browser = browser; + } + + public String getOs() + { + return os; + } + + public void setOs(String os) + { + this.os = os; + } + + public Long getExpireTime() + { + return expireTime; + } + + public void setExpireTime(Long expireTime) + { + this.expireTime = expireTime; + } + + public Set getPermissions() + { + return permissions; + } + + public void setPermissions(Set permissions) + { + this.permissions = permissions; + } + + public SysUser getUser() + { + return user; + } + + public void setUser(SysUser user) + { + this.user = user; + } + + @Override + public Collection getAuthorities() + { + return null; + } +} diff --git a/xinda-common/src/main/java/com/xinda/common/core/domain/model/RegisterBody.java b/xinda-common/src/main/java/com/xinda/common/core/domain/model/RegisterBody.java new file mode 100644 index 0000000..0e8aa11 --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/core/domain/model/RegisterBody.java @@ -0,0 +1,11 @@ +package com.xinda.common.core.domain.model; + +/** + * 用户注册对象 + * + * @author ruoyi + */ +public class RegisterBody extends LoginBody +{ + +} diff --git a/xinda-common/src/main/java/com/xinda/common/core/iot/response/DashDeviceTotalDto.java b/xinda-common/src/main/java/com/xinda/common/core/iot/response/DashDeviceTotalDto.java new file mode 100644 index 0000000..726b4a0 --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/core/iot/response/DashDeviceTotalDto.java @@ -0,0 +1,22 @@ +package com.xinda.common.core.iot.response; + +import lombok.Data; + +/** + * 大屏设备总览数据 + * @author bill + */ +@Data +public class DashDeviceTotalDto { + + /*设备总数*/ + private Integer total; + /*在线设备总数*/ + private Integer onlineCount; + /*离线设备总数*/ + private Integer OfflineCount; + /*未激活设备数*/ + private Integer unActiveCount; + + +} diff --git a/xinda-common/src/main/java/com/xinda/common/core/iot/response/DeCodeBo.java b/xinda-common/src/main/java/com/xinda/common/core/iot/response/DeCodeBo.java new file mode 100644 index 0000000..7e5f66a --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/core/iot/response/DeCodeBo.java @@ -0,0 +1,26 @@ +package com.xinda.common.core.iot.response; + +import lombok.Data; + +/** + * @author gsb + * @date 2023/4/8 15:43 + */ +@Data +public class DeCodeBo { + + /**原始报文*/ + private String payload; + /**从机编号*/ + private Integer slaveId; + /**寄存器地址*/ + private Integer address; + /**功能码*/ + private Integer code; + /**读取个数*/ + private Integer count; + /**写入值*/ + private Integer writeData; + /**读写类型 1-解析 2-读指令 3-写指令 */ + private Integer type; +} diff --git a/xinda-common/src/main/java/com/xinda/common/core/iot/response/IdentityAndName.java b/xinda-common/src/main/java/com/xinda/common/core/iot/response/IdentityAndName.java new file mode 100644 index 0000000..de6a13f --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/core/iot/response/IdentityAndName.java @@ -0,0 +1,70 @@ +package com.xinda.common.core.iot.response; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * 物模型值的项 + * + * @author kerwincui + * @date 2021-12-16 + */ +@NoArgsConstructor +@AllArgsConstructor +@Data +public class IdentityAndName +{ + + public IdentityAndName(String id,String value){ + this.id=id; + this.value=value; + } + + public IdentityAndName(String id,Integer isHistory){ + this.id=id; + this.isHistory=isHistory; + } + + public IdentityAndName(String id, Integer isHistory, String specs, String name, Integer type){ + this.id = id; + this.isHistory = isHistory; + this.dataType = specs; + this.name = name; + this.type = type; + } + + /** 物模型唯一标识符 */ + private String id; + /** 物模型值 */ + private Object value; + + private Integer isChart; + + /**是否监控*/ + private Integer isHistory; + /** + * 数据定义 + */ + private String dataType; + /**物模型名称*/ + private String name; + /** + * 物模型类型 + */ + private Integer type; + /** + * 是否是参数 + */ + private Integer isParams; + + private String formula; + + private Integer slaveId; + + private Integer tempSlaveId; + + private Integer quantity; + + private String code; +} diff --git a/xinda-common/src/main/java/com/xinda/common/core/mq/DeviceReplyBo.java b/xinda-common/src/main/java/com/xinda/common/core/mq/DeviceReplyBo.java new file mode 100644 index 0000000..131af99 --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/core/mq/DeviceReplyBo.java @@ -0,0 +1,17 @@ +package com.xinda.common.core.mq; + +import lombok.Data; + +/** + * @author bill + */ +@Data +public class DeviceReplyBo { + + /*设备下发消息id*/ + private String messageId; + /*标识符*/ + private String id; + /**下发值*/ + private String value; +} diff --git a/xinda-common/src/main/java/com/xinda/common/core/mq/DeviceReport.java b/xinda-common/src/main/java/com/xinda/common/core/mq/DeviceReport.java new file mode 100644 index 0000000..861b027 --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/core/mq/DeviceReport.java @@ -0,0 +1,78 @@ +package com.xinda.common.core.mq; + +import com.xinda.common.core.mq.message.SubDeviceMessage; +import com.xinda.common.core.protocol.Message; +import com.xinda.common.core.thingsModel.ThingsModelSimpleItem; +import com.xinda.common.core.thingsModel.ThingsModelValuesInput; +import com.xinda.common.enums.FunctionReplyStatus; +import com.xinda.common.enums.ServerType; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.util.Date; +import java.util.List; + + +/** + * 设备上行数据model + * + * @author bill + */ +@EqualsAndHashCode(callSuper = true) +@Data +public class DeviceReport extends Message { + + /** + * 设备编号 + */ + private String serialNumber; + /** + * 产品ID + */ + private Long productId; + /** + * 平台时间 + */ + private Date platformDate; + /** + * 消息id + */ + private String messageId; + + /** 设备物模型值的集合 **/ + private List thingsModelSimpleItem; + + /** + * 是否设备回复数据 + */ + private Boolean isReply = false; + /** + * 原数据报文 + */ + private String sources; + + /** + * 设备回复消息 + */ + private String replyMessage; + /** + * 设备回复状态 + */ + private FunctionReplyStatus status; + /** + * 从机编号 + */ + private Integer slaveId; + /** + * 服务器类型 + */ + private ServerType serverType; + + private String protocolCode; + + private Long userId; + private String userName; + private String deviceName; + + private SubDeviceBo subDeviceBo; +} diff --git a/xinda-common/src/main/java/com/xinda/common/core/mq/DeviceReportBo.java b/xinda-common/src/main/java/com/xinda/common/core/mq/DeviceReportBo.java new file mode 100644 index 0000000..9b36054 --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/core/mq/DeviceReportBo.java @@ -0,0 +1,79 @@ +package com.xinda.common.core.mq; + +import com.xinda.common.core.mq.message.PropRead; +import com.xinda.common.core.thingsModel.ThingsModelSimpleItem; +import com.xinda.common.core.thingsModel.ThingsModelValuesInput; +import com.xinda.common.enums.FunctionReplyStatus; +import com.xinda.common.enums.ServerType; +import com.xinda.common.enums.ThingsModelType; +import io.netty.buffer.ByteBuf; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.Date; +import java.util.List; + +/** + * 设备上报 + * @author bill + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class DeviceReportBo { + + /*设备编号或IMEI号*/ + private String serialNumber; + /*产品ID*/ + private Long productId; + /*4G物联网卡CCID*/ + private String ccId; + /*topic*/ + private String topicName; + /*mqtt消息中的packetId*/ + private Long packetId; + /*上报时间*/ + private Date platformDate; + /*物模型类型 1=-属性,2-功能,3-事件 */ + private ThingsModelType type; + /*上报数据*/ + private byte[] data; + /*1-设备数据上报 2- 下发指令给设备,设备应答数据*/ + private Integer reportType; + /*消息id*/ + private String messageId; + /* modbus协议消息回调,记录数据*/ + private PropRead prop; + + /** 设备物模型值的集合 **/ + private List thingsModelSimpleItem; + /*处理的消息服务类型*/ + private ServerType serverType; + private Integer slaveId; + + /** + * 是否设备回复数据 + */ + private Boolean isReply = false; + + /** + * 设备回复消息 + */ + private String replyMessage; + /** + * 设备回复状态 + */ + private FunctionReplyStatus status; + /** + * 寄存器地址 + */ + private int address; + + private String protocolCode; + + private String sources; + +} diff --git a/xinda-common/src/main/java/com/xinda/common/core/mq/DeviceStatusBo.java b/xinda-common/src/main/java/com/xinda/common/core/mq/DeviceStatusBo.java new file mode 100644 index 0000000..0ad52dd --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/core/mq/DeviceStatusBo.java @@ -0,0 +1,37 @@ +package com.xinda.common.core.mq; + +import com.xinda.common.enums.DeviceStatus; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.Date; + +/** + * 设备状态 + * @author bill + */ +@AllArgsConstructor +@NoArgsConstructor +@Data +@Builder +public class DeviceStatusBo { + /** + * 设备客户端id + */ + private String serialNumber; + /**是否活跃*/ + private DeviceStatus status; + /**消息时间*/ + private Date timestamp; + /*host*/ + private String hostName; + /*port*/ + private Integer port; + + private String ip; + private String mqttAccount; + private String password; + +} diff --git a/xinda-common/src/main/java/com/xinda/common/core/mq/DeviceTestReportBo.java b/xinda-common/src/main/java/com/xinda/common/core/mq/DeviceTestReportBo.java new file mode 100644 index 0000000..d117084 --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/core/mq/DeviceTestReportBo.java @@ -0,0 +1,32 @@ +package com.xinda.common.core.mq; + +import com.xinda.common.core.thingsModel.ThingsModelSimpleItem; +import lombok.Data; + +import java.util.List; + +/** + * @author bill + */ +@Data +public class DeviceTestReportBo { + + private Long productId; + /** + * 设备编号 + */ + private String serialNumber; + /** + * 是否是回复数据 + */ + private Boolean isReply; + + /** + * 设备物模型值的集合 + */ + private List thingsModelSimpleItem; + /** + * 原报文 + */ + private Object sources; +} diff --git a/xinda-common/src/main/java/com/xinda/common/core/mq/InvokeReqDto.java b/xinda-common/src/main/java/com/xinda/common/core/mq/InvokeReqDto.java new file mode 100644 index 0000000..5c5b92c --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/core/mq/InvokeReqDto.java @@ -0,0 +1,63 @@ +package com.xinda.common.core.mq; + +import com.alibaba.fastjson2.JSONObject; +import com.xinda.common.enums.ThingsModelType; +import com.xinda.common.utils.DateUtils; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotNull; +import java.util.Date; +import java.util.Map; + +/** + * @author gsb + * @date 2022/12/5 11:26 + */ +@Data +public class InvokeReqDto { + + @ApiModelProperty(value = "设备编号") + private String serialNumber; + + @NotNull(message = "标识符不能为空") + @ApiModelProperty(value = "标识符") + private String identifier; + /**消息体*/ + @ApiModelProperty(value = "消息体") + private JSONObject params; + /**远程消息体*/ + @ApiModelProperty(value = "远程调用消息体") + private Map remoteCommand; + /**设备超时时间*/ + @ApiModelProperty(value = "设备超时响应时间,默认10s") + private Integer timeOut = 10; + + @ApiModelProperty(value = "下发物模型类型") + private Integer type = ThingsModelType.SERVICE.getCode(); + + @ApiModelProperty(value = "是否是影子模式") + private boolean isShadow ; + + @ApiModelProperty(value = "产品id") + private Long productId; + + /** + * 物模型名称 + */ + private String modelName; + + private Date timestamp = DateUtils.getNowDate(); + + /** + * 场景id + */ + private Long sceneModelId; + + /** + * 场景变量类型 + */ + private Integer variableType; + + private Long userId; +} diff --git a/xinda-common/src/main/java/com/xinda/common/core/mq/MQSendMessageBo.java b/xinda-common/src/main/java/com/xinda/common/core/mq/MQSendMessageBo.java new file mode 100644 index 0000000..b666abb --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/core/mq/MQSendMessageBo.java @@ -0,0 +1,57 @@ +package com.xinda.common.core.mq; + +import com.alibaba.fastjson2.JSONObject; +import com.xinda.common.core.device.DeviceAndProtocol; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * 服务(指令)下发对象 + * + * @author bill + */ +@Data +@NoArgsConstructor +public class MQSendMessageBo { + + /** + * 设备编号 + */ + private String serialNumber; + /** + * 下发属性标识符 + */ + private String identifier; + /** + * 下发参数 + */ + private JSONObject params; + + /** + * 下发的值 + */ + private String value; + /** + * messageId生成放到调用接口的时候生成 + */ + private String messageId; + /** + * 协议产品相关信息 + */ + private DeviceAndProtocol dp; + + /** + * 物模型 + */ + private String thingsModel; + /** + * 主题 + */ + private String topicName; + + + public boolean isShadow; + + public Long userId; + +} diff --git a/xinda-common/src/main/java/com/xinda/common/core/mq/MessageReplyBo.java b/xinda-common/src/main/java/com/xinda/common/core/mq/MessageReplyBo.java new file mode 100644 index 0000000..c2c5b60 --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/core/mq/MessageReplyBo.java @@ -0,0 +1,51 @@ +package com.xinda.common.core.mq; + +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.Date; + +/** + * 设备消息回调或者下发指令值 + * + * @author gsb + * @date 2022/5/11 9:27 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class MessageReplyBo { + + + private String id; + /** + * 消息回执的messageId,和下行消息呼应 + */ + private String messageId; + /** + * 设备处理消息的状态 + */ + private Integer status; + /** + * 抵达服务器时间 + */ + @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + private Date timestamp; + /** + * 设备上报的时间 + */ + @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + private Date deviceTimestamp; + /** + * 回执消息内容 + */ + private String body; + /*产品编号*/ + private Long productId; + /*设备编号*/ + private String serialNumber; +} diff --git a/xinda-common/src/main/java/com/xinda/common/core/mq/SubDeviceBo.java b/xinda-common/src/main/java/com/xinda/common/core/mq/SubDeviceBo.java new file mode 100644 index 0000000..53ec578 --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/core/mq/SubDeviceBo.java @@ -0,0 +1,35 @@ +package com.xinda.common.core.mq; + +import lombok.Data; + +/** + * @author bill + */ +@Data +public class SubDeviceBo { + /** + * 网关设备id + */ + + private Long gwDeviceId; + + /** + * 子设备id + */ + private Long subDeviceId; + + /** + * 从机地址 + */ + private Integer slaveId; + /** + * 子设备名称 + */ + private String subDeviceName; + /** + * 子设备编号 + */ + private String subDeviceNo; + + private Long subProductId; +} diff --git a/xinda-common/src/main/java/com/xinda/common/core/mq/message/DeviceData.java b/xinda-common/src/main/java/com/xinda/common/core/mq/message/DeviceData.java new file mode 100644 index 0000000..95690b0 --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/core/mq/message/DeviceData.java @@ -0,0 +1,43 @@ +package com.xinda.common.core.mq.message; + +import com.xinda.common.core.protocol.Message; +import com.xinda.common.core.protocol.modbus.ModbusCode; +import io.netty.buffer.ByteBuf; +import lombok.Builder; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * 消息解析model + * @author gsb + * @date 2022/10/10 15:53 + */ +@EqualsAndHashCode(callSuper = true) +@Data +@Builder +public class DeviceData extends Message { + + /*topic*/ + private String topicName; + + /*设备编号*/ + private String serialNumber; + + /*原数据*/ + private byte[] data; + + private ByteBuf buf; + + /*下发数据model*/ + private DeviceDownMessage downMessage; + + private Object body; + /*MQTT OR 其他*/ + private int type; + /*Modbus*/ + private ModbusCode code; + /**产品id*/ + private Long productId; + + private boolean isControlled; +} diff --git a/xinda-common/src/main/java/com/xinda/common/core/mq/message/DeviceDownMessage.java b/xinda-common/src/main/java/com/xinda/common/core/mq/message/DeviceDownMessage.java new file mode 100644 index 0000000..218f1ab --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/core/mq/message/DeviceDownMessage.java @@ -0,0 +1,60 @@ +package com.xinda.common.core.mq.message; + +import com.alibaba.fastjson2.JSONObject; +import com.xinda.common.core.protocol.modbus.ModbusCode; +import com.xinda.common.enums.ServerType; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + +/** + * 设备下发指令model + * + * @author gsb + * @date 2022/10/10 16:18 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class DeviceDownMessage { + + private String messageId; + /** + * 时间戳,单位毫秒 + */ + private Long timestamp; + /** + * 消息体 + */ + private Object body; + /*下发的指令,服务调用的时候就是服务标识符*/ + private String identifier; + /*产品id*/ + private Long productId; + /** + * 设备编码 + */ + private String serialNumber; + /** + * 从机编号 + */ + private Integer slaveId; + private ModbusCode code; + private String protocolCode; + + private List values; + private String topic; + private String subCode; + private ServerType serverType; + + public DeviceDownMessage(List values, String topic, String subCode,String transport) { + this.values = values; + this.topic = topic; + this.subCode = subCode; + this.serverType = ServerType.explain(transport); + } +} diff --git a/xinda-common/src/main/java/com/xinda/common/core/mq/message/DeviceFunctionMessage.java b/xinda-common/src/main/java/com/xinda/common/core/mq/message/DeviceFunctionMessage.java new file mode 100644 index 0000000..44f42d6 --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/core/mq/message/DeviceFunctionMessage.java @@ -0,0 +1,33 @@ +package com.xinda.common.core.mq.message; + +import lombok.Data; + +/** + * 平台下发指令数据model + * @author bill + */ +@Data +public class DeviceFunctionMessage { + + /*流水号,兼容modbus标准协议没有消息流水号*/ + private String seqNo; + /*平台时间*/ + private Long pfTimestamp; + /*下发的消息体*/ + private Object body; + /*下发的指令物模型标识符*/ + private String identifier; + /*下发的数据寄存器地址*/ + private String hexAddress; + /*产品ID*/ + private Long productId; + /*设备编号*/ + private String serialNumber; + /*网关设备编号*/ + private String protocolCode; + + /*是否有子设备 0-否,1-是*/ + private Integer hasSub; + /*子设备从机编号 例如 02 编号从机。通过主机集控下发的指定从机编号*/ + private String subDeviceCode; +} diff --git a/xinda-common/src/main/java/com/xinda/common/core/mq/message/DeviceMessage.java b/xinda-common/src/main/java/com/xinda/common/core/mq/message/DeviceMessage.java new file mode 100644 index 0000000..fed0beb --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/core/mq/message/DeviceMessage.java @@ -0,0 +1,29 @@ +package com.xinda.common.core.mq.message; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.fasterxml.jackson.annotation.JsonInclude; +import lombok.Data; + +import java.util.Date; + +/** + * 设备消息 + * @author bill + */ +@Data +@JsonInclude(JsonInclude.Include.NON_NULL) +public class DeviceMessage { + + /** 下发的数据*/ + private Object message; + + /** 下发的topic*/ + private String topicName; + + /** 设备编号*/ + private String serialNumber; + + /** 时间 */ + @JsonFormat(pattern ="yyyy-MM-dd HH:mm:ss:SSS") + private Date time; +} diff --git a/xinda-common/src/main/java/com/xinda/common/core/mq/message/FunctionCallBackBo.java b/xinda-common/src/main/java/com/xinda/common/core/mq/message/FunctionCallBackBo.java new file mode 100644 index 0000000..8bb6509 --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/core/mq/message/FunctionCallBackBo.java @@ -0,0 +1,24 @@ +package com.xinda.common.core.mq.message; + +import lombok.Data; + +/** + * 指令下发组将的model + * @author bill + */ +@Data +public class FunctionCallBackBo { + + /*下发的数据*/ + private byte[] message; + + /*MQTt-下发的topic*/ + private String topicName; + + /*设备编号*/ + private String serialNumber; + /** + * 原数据包 + */ + private String sources; +} diff --git a/xinda-common/src/main/java/com/xinda/common/core/mq/message/InstructionsMessage.java b/xinda-common/src/main/java/com/xinda/common/core/mq/message/InstructionsMessage.java new file mode 100644 index 0000000..21fbe91 --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/core/mq/message/InstructionsMessage.java @@ -0,0 +1,20 @@ +package com.xinda.common.core.mq.message; + +import lombok.Data; + +/** + * 指令下发组将的model + * @author bill + */ +@Data +public class InstructionsMessage { + + /*下发的数据*/ + private byte[] message; + + /*MQTt-下发的topic*/ + private String topicName; + + /*设备编号*/ + private String serialNumber; +} diff --git a/xinda-common/src/main/java/com/xinda/common/core/mq/message/ModbusPollMsg.java b/xinda-common/src/main/java/com/xinda/common/core/mq/message/ModbusPollMsg.java new file mode 100644 index 0000000..0b7e04c --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/core/mq/message/ModbusPollMsg.java @@ -0,0 +1,32 @@ +package com.xinda.common.core.mq.message; + +import lombok.Data; + +import java.util.List; + +/** + * @author gsb + * @date 2024/6/20 10:53 + */ +@Data +public class ModbusPollMsg { + + /** + * 下发指令 + */ + private List commandList; + /** + * 服务端类型 + */ + private Integer serverType; + /** + * 产品id + */ + private Long productId; + /** + * 设备编码 + */ + private String serialNumber; + + private String transport; +} diff --git a/xinda-common/src/main/java/com/xinda/common/core/mq/message/MqttBo.java b/xinda-common/src/main/java/com/xinda/common/core/mq/message/MqttBo.java new file mode 100644 index 0000000..49ce570 --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/core/mq/message/MqttBo.java @@ -0,0 +1,26 @@ +package com.xinda.common.core.mq.message; + +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.Data; + +import java.util.Date; + +/** + * @author bill + */ +@Data +public class MqttBo { + + /*主题*/ + private String topic; + /*数据*/ + private String data; + /*消息质量*/ + private int qos = 1; + /*发送方向*/ + private String direction; + /*时间*/ + @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + private Date ts; +} + diff --git a/xinda-common/src/main/java/com/xinda/common/core/mq/message/PropRead.java b/xinda-common/src/main/java/com/xinda/common/core/mq/message/PropRead.java new file mode 100644 index 0000000..fad22f8 --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/core/mq/message/PropRead.java @@ -0,0 +1,39 @@ +package com.xinda.common.core.mq.message; + +import com.xinda.common.core.protocol.modbus.ModbusCode; +import lombok.Data; + +/** + * @author gsb + * @date 2022/12/9 10:15 + */ +@Data +public class PropRead { + + /**设备编号*/ + private String serialNumber; + /**寄存器起始地址*/ + private int address; + /** + * 读取寄存器个数 + */ + private int count; + /**数据结果长度计算值*/ + private int length; + /** + * 从机地址 + */ + private int slaveId; + /** + * 读取个数 + */ + private int quantity; + /** + * 数据 + */ + private String data; + /** + * 功能码 + */ + private ModbusCode code; +} diff --git a/xinda-common/src/main/java/com/xinda/common/core/mq/message/ProtocolDto.java b/xinda-common/src/main/java/com/xinda/common/core/mq/message/ProtocolDto.java new file mode 100644 index 0000000..d05e22f --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/core/mq/message/ProtocolDto.java @@ -0,0 +1,21 @@ +package com.xinda.common.core.mq.message; + +import lombok.Data; + +/** + * 协议bean + * @author gsb + * @date 2022/10/25 14:54 + */ +@Data +public class ProtocolDto { + + /**协议编号*/ + private String code; + private String name; + /*外部协议url*/ + private String protocolUrl; + private String description; + /**协议类型 协议类型 0:系统协议 1:jar,2.js,3.c*/ + private Integer protocolType; +} diff --git a/xinda-common/src/main/java/com/xinda/common/core/mq/message/SubDeviceMessage.java b/xinda-common/src/main/java/com/xinda/common/core/mq/message/SubDeviceMessage.java new file mode 100644 index 0000000..017d86d --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/core/mq/message/SubDeviceMessage.java @@ -0,0 +1,18 @@ +package com.xinda.common.core.mq.message; + +import lombok.Data; + +/** + * 网关子设备model + * @author gsb + * @date 2022/10/10 10:18 + */ +@Data +public class SubDeviceMessage { + /*子设备编号或编码*/ + private String serialNumber; + /*数据*/ + private byte[] data; + /*消息id*/ + private String messageId; +} diff --git a/xinda-common/src/main/java/com/xinda/common/core/mq/ota/OtaReplyMessage.java b/xinda-common/src/main/java/com/xinda/common/core/mq/ota/OtaReplyMessage.java new file mode 100644 index 0000000..d0a41fd --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/core/mq/ota/OtaReplyMessage.java @@ -0,0 +1,17 @@ +package com.xinda.common.core.mq.ota; + +import lombok.Data; + +/** + * OTA升级回复model + * @author gsb + * @date 2022/10/24 17:20 + */ +@Data +public class OtaReplyMessage { + + private String messageId; + // 200成功 其他。。 + private int code; + private String msg; +} diff --git a/xinda-common/src/main/java/com/xinda/common/core/mq/ota/OtaUpgradeBo.java b/xinda-common/src/main/java/com/xinda/common/core/mq/ota/OtaUpgradeBo.java new file mode 100644 index 0000000..0364c4f --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/core/mq/ota/OtaUpgradeBo.java @@ -0,0 +1,46 @@ +package com.xinda.common.core.mq.ota; + +import com.fasterxml.jackson.annotation.JsonInclude; +import lombok.Builder; +import lombok.Data; + +import javax.validation.constraints.NotNull; + +/** + * OTA远程升级 + * @author gsb + * @date 2022/10/10 10:22 + */ +@Data +@Builder +@JsonInclude(JsonInclude.Include.NON_EMPTY) +public class OtaUpgradeBo { + + /**OTAId*/ + private Long otaId; + @NotNull(message = "上传地址为空") + private String otaUrl; + @NotNull(message = "固件版本号不能为空") + private String firmwareVersion; + private String firmwareName; + @NotNull(message = "流水号不能为空") + private String seqNo; + @NotNull(message = "产品ID不能为空") + private Long productId; + private String signType = "16md5"; + @NotNull(message = "签名不能为空") + private String signCode; + /*产品名称*/ + private String productName; + private String fileBase64; + private Integer pushType; + /*设备编码,逐个升级*/ + private String serialNumber; + private String deviceName; + /*任务ID*/ + private Long taskId; + /*消息id*/ + private String messageId; + /*平台描述消息*/ + private String msg; +} diff --git a/xinda-common/src/main/java/com/xinda/common/core/mq/ota/OtaUpgradeDelayTask.java b/xinda-common/src/main/java/com/xinda/common/core/mq/ota/OtaUpgradeDelayTask.java new file mode 100644 index 0000000..b3d8823 --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/core/mq/ota/OtaUpgradeDelayTask.java @@ -0,0 +1,54 @@ +package com.xinda.common.core.mq.ota; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.xinda.common.utils.DateUtils; +import lombok.Data; +import org.springframework.lang.NonNull; + +import java.lang.reflect.Member; +import java.util.Date; +import java.util.List; +import java.util.concurrent.Delayed; +import java.util.concurrent.TimeUnit; + +/** + * ota升级发送,实现Delayed延时接口 + * + * @author bill + */ +@Data +public class OtaUpgradeDelayTask implements Delayed { + + /*固件id*/ + private Long firmwareId; + private List devices; + /*任务id*/ + private Long taskId; + /*开始升级时间*/ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + private Date startTime; + + + /** + * 设置延迟执行时间 开始升级时间 -当前时间 + * + * @param unit + * @return + */ + @Override + public long getDelay(TimeUnit unit) { + return startTime.getTime() - DateUtils.getTimestamp(); + } + + @Override + public int compareTo(Delayed o) { + OtaUpgradeDelayTask delayTask = (OtaUpgradeDelayTask) o; + //比较 + long diff = this.startTime.getTime() - delayTask.startTime.getTime(); + if (diff <= 0) { + return -1; + } else { + return 1; + } + } +} diff --git a/xinda-common/src/main/java/com/xinda/common/core/notify/AlertPushParams.java b/xinda-common/src/main/java/com/xinda/common/core/notify/AlertPushParams.java new file mode 100644 index 0000000..7c5995e --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/core/notify/AlertPushParams.java @@ -0,0 +1,48 @@ +package com.xinda.common.core.notify; + +import lombok.Data; + +import java.util.Set; + +/** + * @author fastb + * @version 1.0 + * @description: TODO + * @date 2023-12-26 11:03 + */ +@Data +public class AlertPushParams { + + /** + * 通知模版id + */ + private Long notifyTemplateId; + /** + * 告警时间 + */ + private String alertTime; + /** + * 设备名称 + */ + private String deviceName; + /** + * 设备编号 + */ + private String serialNumber; + /** + * 告警发生地点 + */ + private String address; + /** + * 告警名称 + */ + private String alertName; + /** + * 告警推送手机号 + */ + private Set userPhoneSet; + /** + * 告警推送用户id + */ + private Set userIdSet; +} diff --git a/xinda-common/src/main/java/com/xinda/common/core/notify/AppGeTuiParams.java b/xinda-common/src/main/java/com/xinda/common/core/notify/AppGeTuiParams.java new file mode 100644 index 0000000..d993f3c --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/core/notify/AppGeTuiParams.java @@ -0,0 +1,33 @@ +package com.xinda.common.core.notify; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.experimental.Accessors; +import org.dromara.sms4j.provider.config.BaseConfig; + +/** + * 个推参数配置 + * @author gsb + * @date 2023/12/11 17:14 + */ +@Data +@Accessors(chain = true) +public class AppGeTuiParams extends BaseConfig { + + @ApiModelProperty("appId") + private String appId; + + @ApiModelProperty("appKey") + private String appKey; + + @ApiModelProperty("秘钥") + private String masterSecret; + + @ApiModelProperty("模板参数") + private String params; + + @Override + public String getSupplier() { + return null; + } +} diff --git a/xinda-common/src/main/java/com/xinda/common/core/notify/EnterpriseWeChatAPPParams.java b/xinda-common/src/main/java/com/xinda/common/core/notify/EnterpriseWeChatAPPParams.java new file mode 100644 index 0000000..8173364 --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/core/notify/EnterpriseWeChatAPPParams.java @@ -0,0 +1,35 @@ +package com.xinda.common.core.notify; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.experimental.Accessors; +import org.dromara.sms4j.provider.config.BaseConfig; + +/** + * 企业微信(应用消息) + * @author gsb + * @date 2023/12/11 17:25 + */ +@Data +@Accessors(chain = true) +public class EnterpriseWeChatAPPParams extends BaseConfig { + + @ApiModelProperty("企业ID") + private String corpId; + @ApiModelProperty("企业应用私钥OA") + private String corpSecret; + @ApiModelProperty("企业应用的id") + private Integer agentId; + //@ApiModelProperty("token") + //private String token; + //@ApiModelProperty("aes秘钥") + //private String aesKey; + + @ApiModelProperty("模板参数") + private String params; + + @Override + public String getSupplier() { + return null; + } +} diff --git a/xinda-common/src/main/java/com/xinda/common/core/notify/NotifyConfigVO.java b/xinda-common/src/main/java/com/xinda/common/core/notify/NotifyConfigVO.java new file mode 100644 index 0000000..7298ba1 --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/core/notify/NotifyConfigVO.java @@ -0,0 +1,37 @@ +package com.xinda.common.core.notify; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * @author fastb + * @version 1.0 + * @description: 通知配置参数属性VO类 + * @date 2024-01-09 14:01 + */ +@AllArgsConstructor +@NoArgsConstructor +@Data +public class NotifyConfigVO { + + /** + * 配置属性 + */ + private String attribute; + + /** + * 配置属性名称 + */ + private String name; + + /** + * 配置属性样式 string-字符串;text-富文本;file-文件;boolean-启用;int-整数 + */ + private String type; + + /** + * 值 + */ + private String value; +} diff --git a/xinda-common/src/main/java/com/xinda/common/core/notify/NotifySendResponse.java b/xinda-common/src/main/java/com/xinda/common/core/notify/NotifySendResponse.java new file mode 100644 index 0000000..127cd2b --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/core/notify/NotifySendResponse.java @@ -0,0 +1,33 @@ +package com.xinda.common.core.notify; + +import lombok.Data; + +/** + * @author fastb + * @version 1.0 + * @description: 通知发送响应类 + * @date 2024-01-11 16:06 + */ +@Data +public class NotifySendResponse { + + /** + * 发送结果 1-成功;0-失败 + */ + private Integer status = 0; + + /** + * 返回结果内容 + */ + private String resultContent = ""; + + /** + * 发送内容,变量替换后的 + */ + private String sendContent = ""; + + /** + * 不是使用sendAccount账号发送,而是像钉钉这种,发送所有人或部门,记录这个 + */ + private String otherSendAccount = ""; +} diff --git a/xinda-common/src/main/java/com/xinda/common/core/notify/WeChatServerParams.java b/xinda-common/src/main/java/com/xinda/common/core/notify/WeChatServerParams.java new file mode 100644 index 0000000..00d89e4 --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/core/notify/WeChatServerParams.java @@ -0,0 +1,32 @@ +package com.xinda.common.core.notify; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.experimental.Accessors; +import org.dromara.sms4j.provider.config.BaseConfig; + +/** + * 微信服务号推送参数 + * @author gsb + * @date 2023/12/11 17:11 + */ +@Data +@Accessors(chain = true) +public class WeChatServerParams { + + @ApiModelProperty("appId") + private String appId; + + @ApiModelProperty("app秘钥") + private String secret; + + @ApiModelProperty("模板ID") + private String templateId; + + @ApiModelProperty("跳转地址") + private String page; + + @ApiModelProperty("模板参数") + private String params; + +} diff --git a/xinda-common/src/main/java/com/xinda/common/core/notify/alertPush/AlertPushItem.java b/xinda-common/src/main/java/com/xinda/common/core/notify/alertPush/AlertPushItem.java new file mode 100644 index 0000000..fbf0353 --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/core/notify/alertPush/AlertPushItem.java @@ -0,0 +1,28 @@ +package com.xinda.common.core.notify.alertPush; + +import lombok.Data; + +/** + * 推送项item + * @author bill + */ +@Data +public class AlertPushItem { + + /** + * 告警时间 + */ + private String alertTime; + /** + * 设备编号 + */ + private String serialNumber; + /** + * 告警发生地点 + */ + private String address; + /** + * 告警名称 + */ + private String alertName; +} diff --git a/xinda-common/src/main/java/com/xinda/common/core/notify/alertPush/PushMsg.java b/xinda-common/src/main/java/com/xinda/common/core/notify/alertPush/PushMsg.java new file mode 100644 index 0000000..5a03d7e --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/core/notify/alertPush/PushMsg.java @@ -0,0 +1,32 @@ +package com.xinda.common.core.notify.alertPush; + +import lombok.Data; + +import java.util.List; + +/** + * 推送配置信息 + * @author bill + */ +@Data +public class PushMsg { + + /** + * 用户Id + */ + private Long userId; + /** + * 设备id + */ + private Long deviceId; + /** + * 告警id + */ + private Long alertId; + /** + * 推送内容值 + */ + private AlertPushItem item; + + private List values; +} diff --git a/xinda-common/src/main/java/com/xinda/common/core/notify/config/DingTalkConfigParams.java b/xinda-common/src/main/java/com/xinda/common/core/notify/config/DingTalkConfigParams.java new file mode 100644 index 0000000..b6de1e6 --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/core/notify/config/DingTalkConfigParams.java @@ -0,0 +1,21 @@ +package com.xinda.common.core.notify.config; + +import lombok.Data; + +/** + * @author fastb + * @version 1.0 + * @description: 钉钉渠道应用配置类 + * @date 2024-01-12 17:50 + */ +@Data +public class DingTalkConfigParams { + + private String appKey; + + private String appSecret; + + private String agentId; + + private String webHook; +} diff --git a/xinda-common/src/main/java/com/xinda/common/core/notify/config/EmailConfigParams.java b/xinda-common/src/main/java/com/xinda/common/core/notify/config/EmailConfigParams.java new file mode 100644 index 0000000..400db4b --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/core/notify/config/EmailConfigParams.java @@ -0,0 +1,48 @@ +package com.xinda.common.core.notify.config; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * 邮箱配置参数 + * @author gsb + * @date 2023/12/11 17:17 + */ +@Data +public class EmailConfigParams { + + @ApiModelProperty("服务器地址") + private String smtpServer; + + @ApiModelProperty("端口号") + private String port; + + @ApiModelProperty("账号(发件人地址)") + private String username; + + @ApiModelProperty("密码") + private String password; + + /** + * 是否开启ssl 默认开启 QQ之类的邮箱默认都需要ssl + */ + @ApiModelProperty("是否启动ssl") + private Boolean sslEnable; + + /** + * 是否开启验证 默认开启 + */ + @ApiModelProperty("启动ttl") + private Boolean authEnable; + + /** + * 重试间隔(单位:秒),默认为5秒 + */ + private Integer retryInterval = 5; + + /** + * 重试次数,默认为1次 + */ + private Integer maxRetries = 1; + +} diff --git a/xinda-common/src/main/java/com/xinda/common/core/notify/config/VoiceConfigParams.java b/xinda-common/src/main/java/com/xinda/common/core/notify/config/VoiceConfigParams.java new file mode 100644 index 0000000..d972d67 --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/core/notify/config/VoiceConfigParams.java @@ -0,0 +1,23 @@ +package com.xinda.common.core.notify.config; + +import lombok.Data; + +/** + * 语音配置 + * @author fastb + * @date 2023-12-09 17:32 + */ +@Data +public class VoiceConfigParams { + + /** + * 您的AccessKey ID + */ + private String accessKeyId; + + /** + * 您的AccessKey Secret + */ + private String accessKeySecret; + +} diff --git a/xinda-common/src/main/java/com/xinda/common/core/notify/config/WeChatConfigParams.java b/xinda-common/src/main/java/com/xinda/common/core/notify/config/WeChatConfigParams.java new file mode 100644 index 0000000..b1ced11 --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/core/notify/config/WeChatConfigParams.java @@ -0,0 +1,25 @@ +package com.xinda.common.core.notify.config; + +import lombok.Data; + +/** + * 微信推送配置参数 + * @author gsb + * @date 2023/12/11 17:11 + */ +@Data +public class WeChatConfigParams { + + private String appId; + + private String appSecret; + + private String corpId; + + private String corpSecret; + + private String agentId; + + private String webHook; + +} diff --git a/xinda-common/src/main/java/com/xinda/common/core/notify/msg/DingTalkMsgParams.java b/xinda-common/src/main/java/com/xinda/common/core/notify/msg/DingTalkMsgParams.java new file mode 100644 index 0000000..a008d3b --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/core/notify/msg/DingTalkMsgParams.java @@ -0,0 +1,53 @@ +package com.xinda.common.core.notify.msg; + +import lombok.Data; + +/** + * @author fastb + * @version 1.0 + * @description: 钉钉模版配置参数类 + * @date 2024-01-12 17:51 + */ +@Data +public class DingTalkMsgParams { + + /** + * 发送账号 + */ + private String sendAccount; + + /** + * 是否发送所有人 + */ + private String sendAllEnable; + + /** + * 发送什么类型的文本 + */ + private String msgType; + + /** + * 消息内容 + */ + private String content; + + /** + * 消息标题 + */ + private String title; + + /** + * 消息链接 + */ + private String messageUrl; + + /** + * 图片链接 + */ + private String picUrl; + + /** + * 所属部门id + */ + private String deptId; +} diff --git a/xinda-common/src/main/java/com/xinda/common/core/notify/msg/EmailMsgParams.java b/xinda-common/src/main/java/com/xinda/common/core/notify/msg/EmailMsgParams.java new file mode 100644 index 0000000..db7191b --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/core/notify/msg/EmailMsgParams.java @@ -0,0 +1,33 @@ +package com.xinda.common.core.notify.msg; + +import lombok.Data; + +/** + * @author fastb + * @version 1.0 + * @description: 邮箱模板消息参数 + * @date 2023-12-22 10:47 + */ +@Data +public class EmailMsgParams { + + /** + * 发送账号 + */ + private String sendAccount; + + /** + * 标题 + */ + private String title; + + /** + * 内容 + */ + private String content; + + /** + * 附件 + */ + private String attachment; +} diff --git a/xinda-common/src/main/java/com/xinda/common/core/notify/msg/VoiceMsgParams.java b/xinda-common/src/main/java/com/xinda/common/core/notify/msg/VoiceMsgParams.java new file mode 100644 index 0000000..61d825d --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/core/notify/msg/VoiceMsgParams.java @@ -0,0 +1,49 @@ +package com.xinda.common.core.notify.msg; + +import lombok.Data; + +/** + * @author fastb + * @version 1.0 + * @description: 语音消息模板参数 + * @date 2023-12-22 10:54 + */ +@Data +public class VoiceMsgParams { + + /** + * 发送账号 + */ + private String sendAccount; + + /** + * 模板ID + */ + private String templateId; + + /** + * 内容 + */ + private String content; + + /** + * 应用ID + */ + private String sdkAppId; + + /** + * 播放次数 1~3 + */ + private String playTimes = "1"; + + /** + * 播放音量 0-100 + */ + private String volume = "50"; + + /** + * 语速控制 -500-500 + */ + private String speed = "0"; + +} diff --git a/xinda-common/src/main/java/com/xinda/common/core/notify/msg/WeComMsgParams.java b/xinda-common/src/main/java/com/xinda/common/core/notify/msg/WeComMsgParams.java new file mode 100644 index 0000000..3d7ce90 --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/core/notify/msg/WeComMsgParams.java @@ -0,0 +1,43 @@ +package com.xinda.common.core.notify.msg; + +import lombok.Data; + +/** + * @author fastb + * @version 1.0 + * @description: 企业微信消息模板参数 + * @date 2023-12-22 10:57 + */ +@Data +public class WeComMsgParams { + + /** + * 发送账号 + */ + private String sendAccount; + + /** + * 消息类型 + */ + private String msgType; + /** + * 消息内容 + */ + private String content; + /** + * 消息标题 + */ + private String title; + /** + * 消息描述 + */ + private String description; + /** + * 跳转链接 + */ + private String url; + /** + * 图片链接 + */ + private String picUrl; +} diff --git a/xinda-common/src/main/java/com/xinda/common/core/notify/msg/WechatMsgParams.java b/xinda-common/src/main/java/com/xinda/common/core/notify/msg/WechatMsgParams.java new file mode 100644 index 0000000..04c958b --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/core/notify/msg/WechatMsgParams.java @@ -0,0 +1,43 @@ +package com.xinda.common.core.notify.msg; + +import lombok.Data; + +/** + * @author fastb + * @version 1.0 + * @description: 微信消息模板参数 + * @date 2023-12-22 10:57 + */ +@Data +public class WechatMsgParams { + + /** + * 发送账号 + */ + private String sendAccount; + + /** + * 模版id + */ + private String templateId; + + /** + * 内容 + */ + private String content; + + /** + * 跳转链接 + */ + private String redirectUrl; + + /** + * 跳转小程序appid + */ + private String appid; + + /** + * 小程序跳转路径 + */ + private String pagePath; +} diff --git a/xinda-common/src/main/java/com/xinda/common/core/page/PageDomain.java b/xinda-common/src/main/java/com/xinda/common/core/page/PageDomain.java new file mode 100644 index 0000000..9cb0072 --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/core/page/PageDomain.java @@ -0,0 +1,101 @@ +package com.xinda.common.core.page; + +import com.xinda.common.utils.StringUtils; + +/** + * 分页数据 + * + * @author ruoyi + */ +public class PageDomain +{ + /** 当前记录起始索引 */ + private Integer pageNum; + + /** 每页显示记录数 */ + private Integer pageSize; + + /** 排序列 */ + private String orderByColumn; + + /** 排序的方向desc或者asc */ + private String isAsc = "asc"; + + /** 分页参数合理化 */ + private Boolean reasonable = true; + + public String getOrderBy() + { + if (StringUtils.isEmpty(orderByColumn)) + { + return ""; + } + return StringUtils.toUnderScoreCase(orderByColumn) + " " + isAsc; + } + + public Integer getPageNum() + { + return pageNum; + } + + public void setPageNum(Integer pageNum) + { + this.pageNum = pageNum; + } + + public Integer getPageSize() + { + return pageSize; + } + + public void setPageSize(Integer pageSize) + { + this.pageSize = pageSize; + } + + public String getOrderByColumn() + { + return orderByColumn; + } + + public void setOrderByColumn(String orderByColumn) + { + this.orderByColumn = orderByColumn; + } + + public String getIsAsc() + { + return isAsc; + } + + public void setIsAsc(String isAsc) + { + if (StringUtils.isNotEmpty(isAsc)) + { + // 兼容前端排序类型 + if ("ascending".equals(isAsc)) + { + isAsc = "asc"; + } + else if ("descending".equals(isAsc)) + { + isAsc = "desc"; + } + this.isAsc = isAsc; + } + } + + public Boolean getReasonable() + { + if (StringUtils.isNull(reasonable)) + { + return Boolean.TRUE; + } + return reasonable; + } + + public void setReasonable(Boolean reasonable) + { + this.reasonable = reasonable; + } +} diff --git a/xinda-common/src/main/java/com/xinda/common/core/page/TableDataExtendInfo.java b/xinda-common/src/main/java/com/xinda/common/core/page/TableDataExtendInfo.java new file mode 100644 index 0000000..829ee3c --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/core/page/TableDataExtendInfo.java @@ -0,0 +1,99 @@ +package com.xinda.common.core.page; + +import java.io.Serializable; +import java.util.List; + +/** + * 表格分页数据对象 + * 可添加扩展参数 + * + * @author ruoyi + */ +public class TableDataExtendInfo implements Serializable +{ + private static final long serialVersionUID = 1L; + + /** 总记录数 */ + private long total; + + /** 列表数据 */ + private List rows; + + /** 消息状态码 */ + private int code; + + /** 消息内容 */ + private String msg; + + /** + * 全部启用 + */ + private Integer allEnable; + + public Integer getAllEnable() { + return allEnable; + } + + public void setAllEnable(Integer allEnable) { + this.allEnable = allEnable; + } + + /** + * 表格数据对象 + */ + public TableDataExtendInfo() + { + } + + /** + * 分页 + * + * @param list 列表数据 + * @param total 总记录数 + */ + public TableDataExtendInfo(List list, int total) + { + this.rows = list; + this.total = total; + } + + public long getTotal() + { + return total; + } + + public void setTotal(long total) + { + this.total = total; + } + + public List getRows() + { + return rows; + } + + public void setRows(List rows) + { + this.rows = rows; + } + + public int getCode() + { + return code; + } + + public void setCode(int code) + { + this.code = code; + } + + public String getMsg() + { + return msg; + } + + public void setMsg(String msg) + { + this.msg = msg; + } +} diff --git a/xinda-common/src/main/java/com/xinda/common/core/page/TableDataInfo.java b/xinda-common/src/main/java/com/xinda/common/core/page/TableDataInfo.java new file mode 100644 index 0000000..03c4414 --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/core/page/TableDataInfo.java @@ -0,0 +1,85 @@ +package com.xinda.common.core.page; + +import java.io.Serializable; +import java.util.List; + +/** + * 表格分页数据对象 + * + * @author ruoyi + */ +public class TableDataInfo implements Serializable +{ + private static final long serialVersionUID = 1L; + + /** 总记录数 */ + private long total; + + /** 列表数据 */ + private List rows; + + /** 消息状态码 */ + private int code; + + /** 消息内容 */ + private String msg; + + /** + * 表格数据对象 + */ + public TableDataInfo() + { + } + + /** + * 分页 + * + * @param list 列表数据 + * @param total 总记录数 + */ + public TableDataInfo(List list, int total) + { + this.rows = list; + this.total = total; + } + + public long getTotal() + { + return total; + } + + public void setTotal(long total) + { + this.total = total; + } + + public List getRows() + { + return rows; + } + + public void setRows(List rows) + { + this.rows = rows; + } + + public int getCode() + { + return code; + } + + public void setCode(int code) + { + this.code = code; + } + + public String getMsg() + { + return msg; + } + + public void setMsg(String msg) + { + this.msg = msg; + } +} diff --git a/xinda-common/src/main/java/com/xinda/common/core/page/TableSupport.java b/xinda-common/src/main/java/com/xinda/common/core/page/TableSupport.java new file mode 100644 index 0000000..542c036 --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/core/page/TableSupport.java @@ -0,0 +1,56 @@ +package com.xinda.common.core.page; + +import com.xinda.common.core.text.Convert; +import com.xinda.common.utils.ServletUtils; + +/** + * 表格数据处理 + * + * @author ruoyi + */ +public class TableSupport +{ + /** + * 当前记录起始索引 + */ + public static final String PAGE_NUM = "pageNum"; + + /** + * 每页显示记录数 + */ + public static final String PAGE_SIZE = "pageSize"; + + /** + * 排序列 + */ + public static final String ORDER_BY_COLUMN = "orderByColumn"; + + /** + * 排序的方向 "desc" 或者 "asc". + */ + public static final String IS_ASC = "isAsc"; + + /** + * 分页参数合理化 + */ + public static final String REASONABLE = "reasonable"; + + /** + * 封装分页对象 + */ + public static PageDomain getPageDomain() + { + PageDomain pageDomain = new PageDomain(); + pageDomain.setPageNum(Convert.toInt(ServletUtils.getParameter(PAGE_NUM), 1)); + pageDomain.setPageSize(Convert.toInt(ServletUtils.getParameter(PAGE_SIZE), 10)); + pageDomain.setOrderByColumn(ServletUtils.getParameter(ORDER_BY_COLUMN)); + pageDomain.setIsAsc(ServletUtils.getParameter(IS_ASC)); + pageDomain.setReasonable(ServletUtils.getParameterToBool(REASONABLE)); + return pageDomain; + } + + public static PageDomain buildPageRequest() + { + return getPageDomain(); + } +} diff --git a/xinda-common/src/main/java/com/xinda/common/core/protocol/Message.java b/xinda-common/src/main/java/com/xinda/common/core/protocol/Message.java new file mode 100644 index 0000000..932253b --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/core/protocol/Message.java @@ -0,0 +1,33 @@ +package com.xinda.common.core.protocol; + +import io.netty.buffer.ByteBuf; +import lombok.Data; + +import java.io.Serializable; + +/** + * 基础消息 + * + * @author bill + */ +@Data +public class Message implements Serializable { + + /*获取客户端id*/ + public String clientId; + /*消息类型*/ + public String messageId; + /*消息流水号*/ + public String serNo; + /**消息通道id*/ + public String channelId; + + public ByteBuf payload; + + /** + * 是否数据和注册包都封装到一起 + */ + private Boolean isPackage = false; + + private Object body; +} diff --git a/xinda-common/src/main/java/com/xinda/common/core/protocol/modbus/ModbusCode.java b/xinda-common/src/main/java/com/xinda/common/core/protocol/modbus/ModbusCode.java new file mode 100644 index 0000000..03a93ba --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/core/protocol/modbus/ModbusCode.java @@ -0,0 +1,88 @@ +package com.xinda.common.core.protocol.modbus; + +import com.xinda.common.exception.ServiceException; +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * Modbus功能码 + * @author bill + * + * {bit 位操作} + * 线圈寄存器: bit对应一个信号的开关状态。功能码里面又分为写单个线圈寄存器和写多个线圈寄存器。对应上面的功能码也就是:0x01 0x05 0x0f + * 离散输入寄存器:离散输入寄存器就 是 只读线圈寄存器,每个bit表示一个开关量,是不能够写的。 功能码: 0x02 + * + * {byte 字节操作} + * 保持寄存器: 两个byte,可读写的 写也分为单个写和多个写对应的三个:0x03 0x06 0x10 + * 输入寄存器: 和保持寄存器类似,只支持读而不能写,一般是读取各种实时数据。一个寄存器也是占据两个byte的空间。对应的功能码: 0x04 + * + */ +@Getter +@AllArgsConstructor +public enum ModbusCode { + + Read01("读线圈",(byte) 0x01,"1"), // 读线圈(读写位模式) + Read02("读离散量输入",(byte) 0x02,"2"), // 读离散量输入(位只读模式) + Read03("读保持寄存器",(byte) 0x03,"3"), // 读保持寄存器(字节读写模式) + Read04("读输入寄存器",(byte) 0x04,"4"), // 读输入寄存器(字节只读模式) + + Write05("写单个线圈(读写位模式)",(byte) 0x05,"5"), // 写单个线圈(读写位模式) + Write06("写多个线圈",(byte) 0x06,"6"), // 写单个保持寄存器 + Write0F("写多个线圈",(byte) 0x0F,"15"), // 写多个线圈 + Write10("写多个保持寄存器",(byte) 0x10,"16"), // 写多个保持寄存器 + UnKnow("未知功能码",(byte)0x0000,"100"); + + private String desc; + private byte code; + private String hex; + + public static ModbusCode getInstance(int code) { + switch ((byte)code) { + case 0x01: + return Read01; + case 0x02: + return Read02; + case 0x03: + return Read03; + case 0x04: + return Read04; + + case 0x05: + return Write05; + case 0x06: + return Write06; + case 0x0F: + return Write0F; + case 0x10: + return Write10; + + default: + throw new ServiceException("功能码[" + code + "],未定义"); + } + } + + public static String getDes(int code){ + switch ((byte)code) { + case 0x01: + return Read01.desc; + case 0x02: + return Read02.desc; + case 0x03: + return Read03.desc; + case 0x04: + return Read04.desc; + case 0x05: + return Write05.desc; + case 0x06: + return Write06.desc; + case 0x0F: + return Write0F.desc; + case 0x10: + return Write10.desc; + + default: + return "UNKOWN"; + } + } + +} diff --git a/xinda-common/src/main/java/com/xinda/common/core/redis/RedisCache.java b/xinda-common/src/main/java/com/xinda/common/core/redis/RedisCache.java new file mode 100644 index 0000000..5c1cd96 --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/core/redis/RedisCache.java @@ -0,0 +1,811 @@ +package com.xinda.common.core.redis; + +import com.alibaba.fastjson2.JSON; +import com.alibaba.fastjson2.JSONObject; +import com.xinda.common.utils.StringUtils; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.BooleanUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.redis.core.*; +import org.springframework.data.redis.support.atomic.RedisAtomicLong; +import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; + +import javax.annotation.Resource; +import java.util.*; +import java.util.concurrent.TimeUnit; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import static java.util.regex.Pattern.compile; + +/** + * spring redis 工具类 + * + * @author ruoyi + **/ +@SuppressWarnings(value = {"unchecked", "rawtypes"}) +@Component +@Slf4j +public class RedisCache { + @Resource + public RedisTemplate redisTemplate; + + @Resource + private StringRedisTemplate stringRedisTemplate; + + + /** + * 缓存基本的对象,Integer、String、实体类等 + * + * @param key 缓存的键值 + * @param value 缓存的值 + */ + public void setCacheObject(final String key, final T value) { + redisTemplate.opsForValue().set(key, value); + } + + /** + * 缓存基本的对象,Integer、String、实体类等 + * + * @param key 缓存的键值 + * @param value 缓存的值 + * @param timeout 时间 + * @param timeUnit 时间颗粒度 + */ + public void setCacheObject(final String key, final T value, final Integer timeout, final TimeUnit timeUnit) { + redisTemplate.opsForValue().set(key, value, timeout, timeUnit); + } + + /** + * 设置有效时间 + * + * @param key Redis键 + * @param timeout 超时时间 + * @return true=设置成功;false=设置失败 + */ + public boolean expire(final String key, final long timeout) { + return expire(key, timeout, TimeUnit.SECONDS); + } + + /** + * 设置有效时间 + * + * @param key Redis键 + * @param timeout 超时时间 + * @param unit 时间单位 + * @return true=设置成功;false=设置失败 + */ + public boolean expire(final String key, final long timeout, final TimeUnit unit) { + return redisTemplate.expire(key, timeout, unit); + } + + /** + * 获取有效时间 + * + * @param key Redis键 + * @return 有效时间 + */ + public long getExpire(final String key) { + return redisTemplate.getExpire(key); + } + + /** + * 判断 key是否存在 + * + * @param key 键 + * @return true 存在 false不存在 + */ + public Boolean hasKey(String key) { + return redisTemplate.hasKey(key); + } + + /** + * 获得缓存的基本对象。 + * + * @param key 缓存键值 + * @return 缓存键值对应的数据 + */ + public T getCacheObject(final String key) { + ValueOperations operation = redisTemplate.opsForValue(); + return operation.get(key); + } + + /** + * 删除单个对象 + * + * @param key + */ + public boolean deleteObject(final String key) { + return redisTemplate.delete(key); + } + + /** + * 删除集合对象 + * + * @param collection 多个对象 + * @return + */ + public boolean deleteObject(final Collection collection) { + return redisTemplate.delete(collection) > 0; + } + + /** + * 缓存List数据 + * + * @param key 缓存的键值 + * @param dataList 待缓存的List数据 + * @return 缓存的对象 + */ + public long setCacheList(final String key, final List dataList) { + Long count = redisTemplate.opsForList().rightPushAll(key, dataList); + return count == null ? 0 : count; + } + + /** + * 获得缓存的list对象 + * + * @param key 缓存的键值 + * @return 缓存键值对应的数据 + */ + public List getCacheList(final String key) { + return redisTemplate.opsForList().range(key, 0, -1); + } + + /** + * 缓存Set + * + * @param key 缓存键值 + * @param dataSet 缓存的数据 + * @return 缓存数据的对象 + */ + public BoundSetOperations setCacheSet(final String key, final Set dataSet) { + BoundSetOperations setOperation = redisTemplate.boundSetOps(key); + Iterator it = dataSet.iterator(); + while (it.hasNext()) { + setOperation.add(it.next()); + } + return setOperation; + } + + /** + * 获得缓存的set + * + * @param key + * @return + */ + public Set getCacheSet(final String key) { + return redisTemplate.opsForSet().members(key); + } + + /** + * 缓存Map + * + * @param key + * @param dataMap + */ + public void setCacheMap(final String key, final Map dataMap) { + if (dataMap != null) { + redisTemplate.opsForHash().putAll(key, dataMap); + } + } + + /** + * 获得缓存的Map + * + * @param key + * @return + */ + public Map getCacheMap(final String key) { + return redisTemplate.opsForHash().entries(key); + } + + /** + * 往Hash中存入数据 + * + * @param key Redis键 + * @param hKey Hash键 + * @param value 值 + */ + public void setCacheMapValue(final String key, final String hKey, final T value) { + redisTemplate.opsForHash().put(key, hKey, value); + } + + /** + * 获取Hash中的数据 + * + * @param key Redis键 + * @param hKey Hash键 + * @return Hash中的对象 + */ + public T getCacheMapValue(final String key, final String hKey) { + HashOperations opsForHash = redisTemplate.opsForHash(); + return opsForHash.get(key, hKey); + } + + /** + * 获取多个Hash中的数据 + * + * @param key Redis键 + * @param hKeys Hash键集合 + * @return Hash对象集合 + */ + public List getMultiCacheMapValue(final String key, final Collection hKeys) { + return redisTemplate.opsForHash().multiGet(key, hKeys); + } + + /** + * 删除Hash中的某条数据 + * + * @param key Redis键 + * @param hKey Hash键 + * @return 是否成功 + */ + public boolean deleteCacheMapValue(final String key, final String hKey) { + return redisTemplate.opsForHash().delete(key, hKey) > 0; + } + + /** + * 获得缓存的基本对象列表 + * + * @param pattern 字符串前缀 + * @return 对象列表 + */ + public Collection keys(final String pattern) { + return redisTemplate.keys(pattern); + } + + /** + * 是否存在key + * + * @param key 缓存key + * @return true:存在key ;false:key不存在或者已过期 + */ + public boolean containsKey(String key) { + return redisTemplate.hasKey(key); + } + + + /** + * 递增 + * + * @param key 键 + * @param delta 要增加几(大于0) + * @return + */ + public long incr(String key, long delta) { + if (delta < 0) { + throw new RuntimeException("递增因子必须大于0"); + } + return redisTemplate.opsForValue().increment(key, delta); + } + + /** + * redis 计数器自增 + * + * @param key key + * @param liveTime 过期时间,null不设置过期时间 + * @return 自增数 + */ + public Long incr2(String key, long liveTime) { + RedisAtomicLong entityIdCounter = new RedisAtomicLong(key, redisTemplate.getConnectionFactory()); + Long increment = entityIdCounter.getAndIncrement(); + + if (increment == 0 && liveTime > 0) {//初始设置过期时间 + entityIdCounter.expire(liveTime, TimeUnit.HOURS); + } + + return increment; + } + + /** + * 将数据放入set缓存 + * + * @param key 键 + * @param values 值 可以是多个 + * @return 成功个数 + */ + public long sAdd(String key, Object... values) { + try { + return redisTemplate.opsForSet().add(key, values); + } catch (Exception e) { + e.printStackTrace(); + return 0; + } + } + + /** + * 将set数据放入缓存 + * + * @param key 键 + * @param time 时间(秒) + * @param values 值 可以是多个 + * @return 成功个数 + */ + public long sSetAndTime(String key, long time, Object... values) { + try { + Long count = redisTemplate.opsForSet().add(key, values); + if (time > 0) expire(key, time); + return count; + } catch (Exception e) { + e.printStackTrace(); + return 0; + } + } + + /** + * 移除set集合值为value的 + * + * @param key 键 + * @param values 值 可以是多个 + * @return 移除的个数 + */ + public long setRemove(String key, Object... values) { + try { + Long count = redisTemplate.opsForSet().remove(key, values); + return count; + } catch (Exception e) { + e.printStackTrace(); + return 0; + } + } + + /** + * 添加一个元素, zset与set最大的区别就是每个元素都有一个score,因此有个排序的辅助功能; zadd + * + * @param key 键 + * @param value 值 + * @param score 分数 + */ + public boolean zSetAdd(String key, String value, double score) { + try { + Boolean aBoolean = stringRedisTemplate.opsForZSet().add(key, value, score); + return BooleanUtils.isTrue(aBoolean); + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } + + /** + * 移除一个zset有序集合的key的一个或者多个值 + * zrem key member [member ...] :移除有序集 key 中的一个或多个成员,不存在的成员将被忽略。当 key 存在但不是有序集类型时,返回一个错误。 + * + * @param key 集合的键key + * @param values 需要移除的value + * @return + */ + public boolean zRem(String key, Object... values) { + try { + Long aLong = stringRedisTemplate.opsForZSet().remove(key, values); + return aLong != null ? true : false; + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } + + /** + * 移除有序集 key 中,所有 score 值介于 min 和 max 之间(包括等于 min 或 max )的成员。 + * + * @param key String + * @param start double 最小score + * @param end double 最大score + */ + public Long zRemBySocre(String key, double start, double end) { + try { + return stringRedisTemplate.opsForZSet().removeRangeByScore(key, start, end); + } catch (Exception e) { + e.printStackTrace(); + return null; + } + } + + /** + * 判断value在zset中的排名 zrank命令 + * + * @param key 键 + * @param value 值 + * @return score 越小排名越高; + */ + public Long zRank(String key, String value) { + try { + return stringRedisTemplate.opsForZSet().rank(key, value); + } catch (Exception e) { + e.printStackTrace(); + return null; + } + } + + /** + * 查询zSet集合中指定顺序的值, 0 -1 表示获取全部的集合内容 zrange + * + * @param key 键 + * @param start 开始 + * @param end 结束 + * @return 返回有序的集合,score小的在前面 + */ + public Set zRange(String key, int start, int end) { + try { + return stringRedisTemplate.opsForZSet().range(key, start, end); + } catch (Exception e) { + e.printStackTrace(); + return null; + } + } + + /** + * 返回有序集 key 中,所有 score 值介于 min 和 max 之间(包括等于 min 或 max )的成员。 + * 有序集成员按 score 值递增(从小到大)次序排列。 + * + * @param key String + * @param start double 最小score + * @param end double 最大score + */ + public Set zRangeByScore(String key, double start, double end) { + try { + return stringRedisTemplate.opsForZSet().rangeByScore(key, start, end); + } catch (Exception e) { + e.printStackTrace(); + return null; + } + } + + /** + * 获取集合的元素, 从小到大排序 + * + * @param key 键 + * @param start 开始位置 + * @param end 结束位置, -1查询所有 + * @return + */ + public Set zRange(String key, long start, long end) { + try { + return stringRedisTemplate.opsForZSet().range(key, start, end); + }catch (Exception e) { + e.printStackTrace(); + return null; + } + } + + + /** + * 返回set集合的长度 + * + * @param key + * @return + */ + public Long zSize(String key) { + try { + return stringRedisTemplate.opsForZSet().zCard(key); + } catch (Exception e) { + e.printStackTrace(); + return null; + } + } + + /** + * 根据前缀获取所有的key + * 例如:pro_* + */ + public Set getListKeyByPrefix(String prefix) { + Set keys = redisTemplate.keys(prefix.concat("*")); + return keys; + } + + /** + * 匹配获取键值对,ScanOptions.NONE为获取全部键对 + * + * @param key + * @param options + * @return + */ + public Cursor> hashScan(String key, ScanOptions options) { + return redisTemplate.opsForHash().scan(key, options); + } + + /** + * 获取所有键值对集合 + * + * @param key + */ + public Map hashEntity(String key) { + return redisTemplate.boundHashOps(key).entries(); + } + + /** + * 以map集合的形式添加键值对 + * + * @param key + * @param maps + */ + public void hashPutAll(String key, Map maps) { + redisTemplate.opsForHash().putAll(key, maps); + } + + /** + * 以map集合的形式添加键值对 + * + * @param key + * @param maps + */ + public void hashPutAllObj(String key, Map maps) { + redisTemplate.opsForHash().putAll(key, maps); + } + + /** + * 批量获取设备物模型值 + * + * @param keys 键的集合 + * @param hkeyCondition 筛选字段 + * @return + */ + public Map hashGetAllByKeys(Set keys, String hkeyCondition) { + return (Map) redisTemplate.execute((RedisCallback) con -> { + Iterator it = keys.iterator(); + Map mapList = new HashMap<>(); + while (it.hasNext()) { + String key = it.next(); + Map result = con.hGetAll(key.getBytes()); + Map ans; + if (CollectionUtils.isEmpty(result)) { + return new HashMap<>(0); + } + ans = new HashMap<>(result.size()); + for (Map.Entry entry : result.entrySet()) { + String field = new String((byte[]) entry.getKey()); + if (!"".equals(hkeyCondition)) { + if (field.endsWith(hkeyCondition)) { + ans.put(new String((byte[]) entry.getKey()), new String((byte[]) entry.getValue())); + } + } else { + ans.put(new String((byte[]) entry.getKey()), new String((byte[]) entry.getValue())); + } + } + mapList.put(key, ans); + } + return mapList; + }); + } + + /** + * 批量获取匹配触发器的物模型值(定时告警使用) + * + * @param keys 键的集合 + * @param operator 操作符 + * @param triggerValue 触发的值 + * @return + */ + public Map hashGetAllMatchByKeys(Set keys, String operator, String id, String triggerValue, String modelIndex) { + // 数组或数组对象拼接id和获取值索引 + String matchId; + int indexValue; + if (id.startsWith("array_")) { + int index = id.indexOf("_", id.indexOf("_") + 1); + matchId = id.substring(index + 1); + List list = StringUtils.str2List(id, "_", true, true); + indexValue = Integer.parseInt(list.get(1)); + } else { + indexValue = -1; + matchId = id; + } + return (Map) redisTemplate.execute((RedisCallback) con -> { + Iterator it = keys.iterator(); + Map mapList = new HashMap<>(); + while (it.hasNext()) { + String key = it.next(); + Map result = con.hGetAll(key.getBytes()); + if (CollectionUtils.isEmpty(result)) { + return new HashMap<>(0); + } + for (Map.Entry entry : result.entrySet()) { + String field = new String((byte[]) entry.getKey()); + // 获取物模型值并且匹配规则,获取值的类型和匹配规则后续还要仔细测了然后优化 + if (field.equals(matchId) || field.equals(matchId + "#V")) { + String valueStr = new String((byte[]) entry.getValue()); + JSONObject jsonObject = JSONObject.parseObject((String) JSON.parse(valueStr)); + String value = (String) jsonObject.get("value"); + // 数组或数组对象元素索引 + if (indexValue >= 0) { + List list = StringUtils.str2List(value, ",", true, true); + value = org.apache.commons.collections4.CollectionUtils.isEmpty(list) ? "" : list.get(indexValue); + } + if (ruleResult(operator, value, triggerValue)) { + mapList.put(key, value); + } + } + } + } + return mapList; + }); + } + + /** + * 批量获取匹配触发器的物模型值 + * + * @param productId productId + * @param operator 操作符 + * @param triggerValue 触发的值 + * @return + */ + public Map CheckMatchByProductId(Long productId, String operator, String id, String triggerValue) { + Set keys = getListKeyByPrefix("TSLV:" + productId); + return (Map) redisTemplate.execute((RedisCallback) con -> { + Iterator it = keys.iterator(); + Map mapList = new HashMap<>(); + while (it.hasNext()) { + String key = it.next(); + String value = CheckMatchByCacheKey(key,operator,id,triggerValue); + if(!Objects.equals(value, "")) { + mapList.put(key,value); + } + } + return mapList; + }); + } + + /** + * 获取匹配触发器的物模型值 + * + * @param cacheKey 设备key + * @param operator 操作符 + * @param triggerValue 触发的值 + * @return + */ + public String CheckMatchByCacheKey(String cacheKey, String operator, String id, String triggerValue) { + String cacheValue = getCacheMapValue(cacheKey, id); + Map result = JSON.parseObject(cacheValue, Map.class); + if (CollectionUtils.isEmpty(result)) { + return ""; + } + for (Map.Entry entry : result.entrySet()) { + String field = (String) entry.getKey(); + if (field.equals("value")) { + String value = (String) entry.getValue(); + value = value.replace("\"", ""); + if (ruleResult(operator, value, triggerValue)) { + return value; + } + } + } + return ""; + } + + /** + * 根据key集合获取字符串 + * + * @param keys 键的集合 + * @return + */ + public Map getStringAllByKeys(Set keys) { + return (Map) redisTemplate.execute((RedisCallback) con -> { + Iterator it = keys.iterator(); + Map mapList = new HashMap<>(); + while (it.hasNext()) { + String key = it.next(); + byte[] result = con.get(key.getBytes()); + if (result == null) { + return new HashMap<>(0); + } + String ans = new String((byte[]) result); + mapList.put(key, ans); + } + return mapList; + }); + } + + /** + * 根据条件返回所有键 + * + * @param query + * @return + */ + public List scan(String query) { + Set keys = (Set) redisTemplate.execute((RedisCallback>) connection -> { + Set keysTmp = new HashSet<>(); + Cursor cursor = connection.scan(new ScanOptions.ScanOptionsBuilder().match("*" + query + "*").count(1000).build()); + while (cursor.hasNext()) { + keysTmp.add(new String(cursor.next())); + } + return keysTmp; + }); + return new ArrayList<>(keys); + } + + /** + * 规则匹配结果 + * + * @param operator 操作符 + * @param value 上报的值 + * @param triggerValue 触发器的值 + * @return + */ + private boolean ruleResult(String operator, String value, String triggerValue) { + boolean result = false; + if ("".equals(value)) { + return result; + } + // 操作符比较 + switch (operator) { + case "=": + result = value.equals(triggerValue); + break; + case "!=": + result = !value.equals(triggerValue); + break; + case ">": + if (isNumeric(value) && isNumeric(triggerValue)) { + result = Double.parseDouble(value) > Double.parseDouble(triggerValue); + } + break; + case "<": + if (isNumeric(value) && isNumeric(triggerValue)) { + result = Double.parseDouble(value) < Double.parseDouble(triggerValue); + } + break; + case ">=": + if (isNumeric(value) && isNumeric(triggerValue)) { + result = Double.parseDouble(value) >= Double.parseDouble(triggerValue); + } + break; + case "<=": + if (isNumeric(value) && isNumeric(triggerValue)) { + result = Double.parseDouble(value) <= Double.parseDouble(triggerValue); + } + break; + case "contain": + result = value.contains(triggerValue); + break; + case "notcontain": + result = !value.contains(triggerValue); + break; + default: + break; + } + return result; + } + + /** + * 判断字符串是否为整数或小数 + */ + private boolean isNumeric(String str) { + Pattern pattern = compile("[0-9]*\\.?[0-9]+"); + Matcher isNum = pattern.matcher(str); + if (!isNum.matches()) { + return false; + } + return true; + } + + public void publish(Object message, String channel) { + try { + redisTemplate.convertAndSend(channel, message); + } catch (Exception e) { + e.printStackTrace(); + } + } + + /** + * 往Hash中存入数据 + * + * @param key Redis键 + * @param hKey Hash键 + * @param value 值 + */ + public void setHashValue(final String key, final String hKey, final T value) { + redisTemplate.opsForHash().put(key, hKey, value); + } + + + /** + * 删除Hash中的数据 + * + * @param key + * @param hkey + */ + public void delHashValue(final String key, final String hkey) { + HashOperations hashOperations = redisTemplate.opsForHash(); + hashOperations.delete(key, hkey); + } + +} diff --git a/xinda-common/src/main/java/com/xinda/common/core/redis/RedisKeyBuilder.java b/xinda-common/src/main/java/com/xinda/common/core/redis/RedisKeyBuilder.java new file mode 100644 index 0000000..3413daa --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/core/redis/RedisKeyBuilder.java @@ -0,0 +1,122 @@ +package com.xinda.common.core.redis; + +import com.xinda.common.constant.XinDaConstant; + +/** + * 缓存key生成器 + * + * @author bill + */ +public class RedisKeyBuilder { + + /**设备在线列表缓存key*/ + public static String buildDeviceOnlineListKey(){ + return XinDaConstant.REDIS.DEVICE_ONLINE_LIST; + } + + /**设备实时数据key*/ + public static String buildDeviceRtCacheKey(String serialNumber){ + return XinDaConstant.REDIS.DEVICE_RUNTIME_DATA + serialNumber; + } + + /** + * 设备通讯协议参数 + */ + public static String buildDeviceRtParamsKey(String serialNumber){ + return XinDaConstant.REDIS.DEVICE_PROTOCOL_PARAM + serialNumber; + } + + /**固件版本缓存key*/ + public static String buildFirmwareCachedKey(Long firmwareId){ + return XinDaConstant.REDIS.FIRMWARE_VERSION + firmwareId; + } + + /**属性读取回调缓存key*/ + public static String buildPropReadCacheKey(String serialNumber){ + return XinDaConstant.REDIS.PROP_READ_STORE + serialNumber; + } + + /** + * 物模型值命名缓存key + * Key:TSLV:{productId}_{deviceNumber} HKey:{identity#V/identity#S/identity#M/identity#N} + */ + public static String buildTSLVCacheKey(Long productId,String serialNumber){ + return XinDaConstant.REDIS.DEVICE_PRE_KEY + productId + "_" + serialNumber.toUpperCase(); + } + + /** + * 物模型缓存key + * 物模型命名空间:Key:TSL:{productId} hkey: identity value: thingsModel + */ + public static String buildTSLCacheKey(Long productId){ + return XinDaConstant.REDIS.TSL_PRE_KEY + productId; + } + + public static String buildModbusKey(Long productId){ + return XinDaConstant.REDIS.MODBUS_PRE_KEY + productId; + } + + /**录像缓存key*/ + public static String buildSipRecordinfoCacheKey(String recordKey){ + return XinDaConstant.REDIS.RECORDINFO_KEY + recordKey; + } + + /**设备id缓存key*/ + public static String buildSipDeviceidCacheKey(String id){ + return XinDaConstant.REDIS.DEVICEID_KEY + id; + } + /**ipCSEQ缓存key*/ + public static String buildStreamCacheKey(String steamId){ + return XinDaConstant.REDIS.STREAM_KEY + steamId; + } + + public static String buildStreamCacheKey(String deviceId, String channelId, String stream, String ssrc){ + return XinDaConstant.REDIS.STREAM_KEY + deviceId + ":" + channelId + ":" + stream + ":" + ssrc; + } + + public static String buildInviteCacheKey(String type, String deviceId, String channelId, String stream, String ssrc){ + return XinDaConstant.REDIS.INVITE_KEY + type + ":"+ deviceId + ":" + channelId + ":" + stream + ":" + ssrc; + } + + /**ipCSEQ缓存key*/ + public static String buildSipCSEQCacheKey(String CSEQ){ + return XinDaConstant.REDIS.SIP_CSEQ_PREFIX + CSEQ; + } + + /**rule静默时间缓存key*/ + public static String buildSilentTimeacheKey(String key){ + return XinDaConstant.REDIS.RULE_SILENT_TIME + key; + } + + /**modbus指令缓存key*/ + public static String buildModbusPollCacheKey(String serialNumebr){ + return XinDaConstant.REDIS.POLL_MODBUS_KEY + serialNumebr; + } + /*缓存设备下发指令消息ID*/ + public static String buildDownMessageIdCacheKey(String serialNumber){ + return XinDaConstant.REDIS.DEVICE_MESSAGE_ID + serialNumber; + } + + /** + * 缓存产品id,设备编号,协议编号 + */ + public static String buildDeviceMsgCacheKey(String serialNumber){ + return XinDaConstant.REDIS.DEVICE_MSG + serialNumber; + } + + /** + * 缓存产品id,设备编号,协议编号 + */ + public static String buildSceneModelTagCacheKey(Long sceneModelId){ + return XinDaConstant.REDIS.SCENE_MODEL_TAG_ID + sceneModelId; + } + + public static String buildModbusRuntimeCacheKey(String serialNumber){ + return XinDaConstant.REDIS.MODBUS_RUNTIME + serialNumber; + } + + public static String buildModbusLockCacheKey(String serialNumber){ + return XinDaConstant.REDIS.MODBUS_LOCK + serialNumber; + } + +} diff --git a/xinda-common/src/main/java/com/xinda/common/core/redis/RedisKeyDefine.java b/xinda-common/src/main/java/com/xinda/common/core/redis/RedisKeyDefine.java new file mode 100644 index 0000000..366e220 --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/core/redis/RedisKeyDefine.java @@ -0,0 +1,113 @@ +package com.xinda.common.core.redis; + +import com.fasterxml.jackson.annotation.JsonValue; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.Getter; + +import java.time.Duration; + +/** + * Redis Key 定义类 + * + * @author xinda + */ +@Data +public class RedisKeyDefine { + + @Getter + @AllArgsConstructor + public enum KeyTypeEnum { + + STRING("String"), + LIST("List"), + HASH("Hash"), + SET("Set"), + ZSET("Sorted Set"), + STREAM("Stream"), + PUBSUB("Pub/Sub"); + + /** + * 类型 + */ + @JsonValue + private final String type; + + } + + @Getter + @AllArgsConstructor + public enum TimeoutTypeEnum { + + FOREVER(1), // 永不超时 + DYNAMIC(2), // 动态超时 + FIXED(3); // 固定超时 + + /** + * 类型 + */ + @JsonValue + private final Integer type; + + } + + /** + * Key 模板 + */ + private final String keyTemplate; + /** + * Key 类型的枚举 + */ + private final KeyTypeEnum keyType; + /** + * Value 类型 + * + * 如果是使用分布式锁,设置为 {@link java.util.concurrent.locks.Lock} 类型 + */ + private final Class valueType; + /** + * 超时类型 + */ + private final TimeoutTypeEnum timeoutType; + /** + * 过期时间 + */ + private final Duration timeout; + /** + * 备注 + */ + private final String memo; + + private RedisKeyDefine(String memo, String keyTemplate, KeyTypeEnum keyType, Class valueType, + TimeoutTypeEnum timeoutType, Duration timeout) { + this.memo = memo; + this.keyTemplate = keyTemplate; + this.keyType = keyType; + this.valueType = valueType; + this.timeout = timeout; + this.timeoutType = timeoutType; + // 添加注册表 + RedisKeyRegistry.add(this); + } + + public RedisKeyDefine(String memo, String keyTemplate, KeyTypeEnum keyType, Class valueType, Duration timeout) { + this(memo, keyTemplate, keyType, valueType, TimeoutTypeEnum.FIXED, timeout); + } + + public RedisKeyDefine(String memo, String keyTemplate, KeyTypeEnum keyType, Class valueType, TimeoutTypeEnum timeoutType) { + this(memo, keyTemplate, keyType, valueType, timeoutType, Duration.ZERO); + } + + /** + * 格式化 Key + * + * 注意,内部采用 {@link String#format(String, Object...)} 实现 + * + * @param args 格式化的参数 + * @return Key + */ + public String formatKey(Object... args) { + return String.format(keyTemplate, args); + } + +} diff --git a/xinda-common/src/main/java/com/xinda/common/core/redis/RedisKeyRegistry.java b/xinda-common/src/main/java/com/xinda/common/core/redis/RedisKeyRegistry.java new file mode 100644 index 0000000..f63bf5e --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/core/redis/RedisKeyRegistry.java @@ -0,0 +1,28 @@ +package com.xinda.common.core.redis; + +import java.util.ArrayList; +import java.util.List; + +/** + * {@link RedisKeyDefine} 注册表 + */ +public class RedisKeyRegistry { + + /** + * Redis RedisKeyDefine 数组 + */ + private static final List DEFINES = new ArrayList<>(); + + public static void add(RedisKeyDefine define) { + DEFINES.add(define); + } + + public static List list() { + return DEFINES; + } + + public static int size() { + return DEFINES.size(); + } + +} diff --git a/xinda-common/src/main/java/com/xinda/common/core/text/CharsetKit.java b/xinda-common/src/main/java/com/xinda/common/core/text/CharsetKit.java new file mode 100644 index 0000000..1784f44 --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/core/text/CharsetKit.java @@ -0,0 +1,86 @@ +package com.xinda.common.core.text; + +import java.nio.charset.Charset; +import java.nio.charset.StandardCharsets; +import com.xinda.common.utils.StringUtils; + +/** + * 字符集工具类 + * + * @author ruoyi + */ +public class CharsetKit +{ + /** ISO-8859-1 */ + public static final String ISO_8859_1 = "ISO-8859-1"; + /** UTF-8 */ + public static final String UTF_8 = "UTF-8"; + /** GBK */ + public static final String GBK = "GBK"; + + /** ISO-8859-1 */ + public static final Charset CHARSET_ISO_8859_1 = Charset.forName(ISO_8859_1); + /** UTF-8 */ + public static final Charset CHARSET_UTF_8 = Charset.forName(UTF_8); + /** GBK */ + public static final Charset CHARSET_GBK = Charset.forName(GBK); + + /** + * 转换为Charset对象 + * + * @param charset 字符集,为空则返回默认字符集 + * @return Charset + */ + public static Charset charset(String charset) + { + return StringUtils.isEmpty(charset) ? Charset.defaultCharset() : Charset.forName(charset); + } + + /** + * 转换字符串的字符集编码 + * + * @param source 字符串 + * @param srcCharset 源字符集,默认ISO-8859-1 + * @param destCharset 目标字符集,默认UTF-8 + * @return 转换后的字符集 + */ + public static String convert(String source, String srcCharset, String destCharset) + { + return convert(source, Charset.forName(srcCharset), Charset.forName(destCharset)); + } + + /** + * 转换字符串的字符集编码 + * + * @param source 字符串 + * @param srcCharset 源字符集,默认ISO-8859-1 + * @param destCharset 目标字符集,默认UTF-8 + * @return 转换后的字符集 + */ + public static String convert(String source, Charset srcCharset, Charset destCharset) + { + if (null == srcCharset) + { + srcCharset = StandardCharsets.ISO_8859_1; + } + + if (null == destCharset) + { + destCharset = StandardCharsets.UTF_8; + } + + if (StringUtils.isEmpty(source) || srcCharset.equals(destCharset)) + { + return source; + } + return new String(source.getBytes(srcCharset), destCharset); + } + + /** + * @return 系统字符集编码 + */ + public static String systemCharset() + { + return Charset.defaultCharset().name(); + } +} diff --git a/xinda-common/src/main/java/com/xinda/common/core/text/Convert.java b/xinda-common/src/main/java/com/xinda/common/core/text/Convert.java new file mode 100644 index 0000000..182f801 --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/core/text/Convert.java @@ -0,0 +1,1000 @@ +package com.xinda.common.core.text; + +import java.math.BigDecimal; +import java.math.BigInteger; +import java.nio.ByteBuffer; +import java.nio.charset.Charset; +import java.text.NumberFormat; +import java.util.Set; +import com.xinda.common.utils.StringUtils; +import org.apache.commons.lang3.ArrayUtils; + +/** + * 类型转换器 + * + * @author ruoyi + */ +public class Convert +{ + /** + * 转换为字符串
+ * 如果给定的值为null,或者转换失败,返回默认值
+ * 转换失败不会报错 + * + * @param value 被转换的值 + * @param defaultValue 转换错误时的默认值 + * @return 结果 + */ + public static String toStr(Object value, String defaultValue) + { + if (null == value) + { + return defaultValue; + } + if (value instanceof String) + { + return (String) value; + } + return value.toString(); + } + + /** + * 转换为字符串
+ * 如果给定的值为null,或者转换失败,返回默认值null
+ * 转换失败不会报错 + * + * @param value 被转换的值 + * @return 结果 + */ + public static String toStr(Object value) + { + return toStr(value, null); + } + + /** + * 转换为字符
+ * 如果给定的值为null,或者转换失败,返回默认值
+ * 转换失败不会报错 + * + * @param value 被转换的值 + * @param defaultValue 转换错误时的默认值 + * @return 结果 + */ + public static Character toChar(Object value, Character defaultValue) + { + if (null == value) + { + return defaultValue; + } + if (value instanceof Character) + { + return (Character) value; + } + + final String valueStr = toStr(value, null); + return StringUtils.isEmpty(valueStr) ? defaultValue : valueStr.charAt(0); + } + + /** + * 转换为字符
+ * 如果给定的值为null,或者转换失败,返回默认值null
+ * 转换失败不会报错 + * + * @param value 被转换的值 + * @return 结果 + */ + public static Character toChar(Object value) + { + return toChar(value, null); + } + + /** + * 转换为byte
+ * 如果给定的值为null,或者转换失败,返回默认值
+ * 转换失败不会报错 + * + * @param value 被转换的值 + * @param defaultValue 转换错误时的默认值 + * @return 结果 + */ + public static Byte toByte(Object value, Byte defaultValue) + { + if (value == null) + { + return defaultValue; + } + if (value instanceof Byte) + { + return (Byte) value; + } + if (value instanceof Number) + { + return ((Number) value).byteValue(); + } + final String valueStr = toStr(value, null); + if (StringUtils.isEmpty(valueStr)) + { + return defaultValue; + } + try + { + return Byte.parseByte(valueStr); + } + catch (Exception e) + { + return defaultValue; + } + } + + /** + * 转换为byte
+ * 如果给定的值为null,或者转换失败,返回默认值null
+ * 转换失败不会报错 + * + * @param value 被转换的值 + * @return 结果 + */ + public static Byte toByte(Object value) + { + return toByte(value, null); + } + + /** + * 转换为Short
+ * 如果给定的值为null,或者转换失败,返回默认值
+ * 转换失败不会报错 + * + * @param value 被转换的值 + * @param defaultValue 转换错误时的默认值 + * @return 结果 + */ + public static Short toShort(Object value, Short defaultValue) + { + if (value == null) + { + return defaultValue; + } + if (value instanceof Short) + { + return (Short) value; + } + if (value instanceof Number) + { + return ((Number) value).shortValue(); + } + final String valueStr = toStr(value, null); + if (StringUtils.isEmpty(valueStr)) + { + return defaultValue; + } + try + { + return Short.parseShort(valueStr.trim()); + } + catch (Exception e) + { + return defaultValue; + } + } + + /** + * 转换为Short
+ * 如果给定的值为null,或者转换失败,返回默认值null
+ * 转换失败不会报错 + * + * @param value 被转换的值 + * @return 结果 + */ + public static Short toShort(Object value) + { + return toShort(value, null); + } + + /** + * 转换为Number
+ * 如果给定的值为空,或者转换失败,返回默认值
+ * 转换失败不会报错 + * + * @param value 被转换的值 + * @param defaultValue 转换错误时的默认值 + * @return 结果 + */ + public static Number toNumber(Object value, Number defaultValue) + { + if (value == null) + { + return defaultValue; + } + if (value instanceof Number) + { + return (Number) value; + } + final String valueStr = toStr(value, null); + if (StringUtils.isEmpty(valueStr)) + { + return defaultValue; + } + try + { + return NumberFormat.getInstance().parse(valueStr); + } + catch (Exception e) + { + return defaultValue; + } + } + + /** + * 转换为Number
+ * 如果给定的值为空,或者转换失败,返回默认值null
+ * 转换失败不会报错 + * + * @param value 被转换的值 + * @return 结果 + */ + public static Number toNumber(Object value) + { + return toNumber(value, null); + } + + /** + * 转换为int
+ * 如果给定的值为空,或者转换失败,返回默认值
+ * 转换失败不会报错 + * + * @param value 被转换的值 + * @param defaultValue 转换错误时的默认值 + * @return 结果 + */ + public static Integer toInt(Object value, Integer defaultValue) + { + if (value == null) + { + return defaultValue; + } + if (value instanceof Integer) + { + return (Integer) value; + } + if (value instanceof Number) + { + return ((Number) value).intValue(); + } + final String valueStr = toStr(value, null); + if (StringUtils.isEmpty(valueStr)) + { + return defaultValue; + } + try + { + return Integer.parseInt(valueStr.trim()); + } + catch (Exception e) + { + return defaultValue; + } + } + + /** + * 转换为int
+ * 如果给定的值为null,或者转换失败,返回默认值null
+ * 转换失败不会报错 + * + * @param value 被转换的值 + * @return 结果 + */ + public static Integer toInt(Object value) + { + return toInt(value, null); + } + + /** + * 转换为Integer数组
+ * + * @param str 被转换的值 + * @return 结果 + */ + public static Integer[] toIntArray(String str) + { + return toIntArray(",", str); + } + + /** + * 转换为Long数组
+ * + * @param str 被转换的值 + * @return 结果 + */ + public static Long[] toLongArray(String str) + { + return toLongArray(",", str); + } + + /** + * 转换为Integer数组
+ * + * @param split 分隔符 + * @param split 被转换的值 + * @return 结果 + */ + public static Integer[] toIntArray(String split, String str) + { + if (StringUtils.isEmpty(str)) + { + return new Integer[] {}; + } + String[] arr = str.split(split); + final Integer[] ints = new Integer[arr.length]; + for (int i = 0; i < arr.length; i++) + { + final Integer v = toInt(arr[i], 0); + ints[i] = v; + } + return ints; + } + + /** + * 转换为Long数组
+ * + * @param split 分隔符 + * @param str 被转换的值 + * @return 结果 + */ + public static Long[] toLongArray(String split, String str) + { + if (StringUtils.isEmpty(str)) + { + return new Long[] {}; + } + String[] arr = str.split(split); + final Long[] longs = new Long[arr.length]; + for (int i = 0; i < arr.length; i++) + { + final Long v = toLong(arr[i], null); + longs[i] = v; + } + return longs; + } + + /** + * 转换为String数组
+ * + * @param str 被转换的值 + * @return 结果 + */ + public static String[] toStrArray(String str) + { + return toStrArray(",", str); + } + + /** + * 转换为String数组
+ * + * @param split 分隔符 + * @param split 被转换的值 + * @return 结果 + */ + public static String[] toStrArray(String split, String str) + { + return str.split(split); + } + + /** + * 转换为long
+ * 如果给定的值为空,或者转换失败,返回默认值
+ * 转换失败不会报错 + * + * @param value 被转换的值 + * @param defaultValue 转换错误时的默认值 + * @return 结果 + */ + public static Long toLong(Object value, Long defaultValue) + { + if (value == null) + { + return defaultValue; + } + if (value instanceof Long) + { + return (Long) value; + } + if (value instanceof Number) + { + return ((Number) value).longValue(); + } + final String valueStr = toStr(value, null); + if (StringUtils.isEmpty(valueStr)) + { + return defaultValue; + } + try + { + // 支持科学计数法 + return new BigDecimal(valueStr.trim()).longValue(); + } + catch (Exception e) + { + return defaultValue; + } + } + + /** + * 转换为long
+ * 如果给定的值为null,或者转换失败,返回默认值null
+ * 转换失败不会报错 + * + * @param value 被转换的值 + * @return 结果 + */ + public static Long toLong(Object value) + { + return toLong(value, null); + } + + /** + * 转换为double
+ * 如果给定的值为空,或者转换失败,返回默认值
+ * 转换失败不会报错 + * + * @param value 被转换的值 + * @param defaultValue 转换错误时的默认值 + * @return 结果 + */ + public static Double toDouble(Object value, Double defaultValue) + { + if (value == null) + { + return defaultValue; + } + if (value instanceof Double) + { + return (Double) value; + } + if (value instanceof Number) + { + return ((Number) value).doubleValue(); + } + final String valueStr = toStr(value, null); + if (StringUtils.isEmpty(valueStr)) + { + return defaultValue; + } + try + { + // 支持科学计数法 + return new BigDecimal(valueStr.trim()).doubleValue(); + } + catch (Exception e) + { + return defaultValue; + } + } + + /** + * 转换为double
+ * 如果给定的值为空,或者转换失败,返回默认值null
+ * 转换失败不会报错 + * + * @param value 被转换的值 + * @return 结果 + */ + public static Double toDouble(Object value) + { + return toDouble(value, null); + } + + /** + * 转换为Float
+ * 如果给定的值为空,或者转换失败,返回默认值
+ * 转换失败不会报错 + * + * @param value 被转换的值 + * @param defaultValue 转换错误时的默认值 + * @return 结果 + */ + public static Float toFloat(Object value, Float defaultValue) + { + if (value == null) + { + return defaultValue; + } + if (value instanceof Float) + { + return (Float) value; + } + if (value instanceof Number) + { + return ((Number) value).floatValue(); + } + final String valueStr = toStr(value, null); + if (StringUtils.isEmpty(valueStr)) + { + return defaultValue; + } + try + { + return Float.parseFloat(valueStr.trim()); + } + catch (Exception e) + { + return defaultValue; + } + } + + /** + * 转换为Float
+ * 如果给定的值为空,或者转换失败,返回默认值null
+ * 转换失败不会报错 + * + * @param value 被转换的值 + * @return 结果 + */ + public static Float toFloat(Object value) + { + return toFloat(value, null); + } + + /** + * 转换为boolean
+ * String支持的值为:true、false、yes、ok、no,1,0 如果给定的值为空,或者转换失败,返回默认值
+ * 转换失败不会报错 + * + * @param value 被转换的值 + * @param defaultValue 转换错误时的默认值 + * @return 结果 + */ + public static Boolean toBool(Object value, Boolean defaultValue) + { + if (value == null) + { + return defaultValue; + } + if (value instanceof Boolean) + { + return (Boolean) value; + } + String valueStr = toStr(value, null); + if (StringUtils.isEmpty(valueStr)) + { + return defaultValue; + } + valueStr = valueStr.trim().toLowerCase(); + switch (valueStr) + { + case "true": + case "yes": + case "ok": + case "1": + return true; + case "false": + case "no": + case "0": + return false; + default: + return defaultValue; + } + } + + /** + * 转换为boolean
+ * 如果给定的值为空,或者转换失败,返回默认值null
+ * 转换失败不会报错 + * + * @param value 被转换的值 + * @return 结果 + */ + public static Boolean toBool(Object value) + { + return toBool(value, null); + } + + /** + * 转换为Enum对象
+ * 如果给定的值为空,或者转换失败,返回默认值
+ * + * @param clazz Enum的Class + * @param value 值 + * @param defaultValue 默认值 + * @return Enum + */ + public static > E toEnum(Class clazz, Object value, E defaultValue) + { + if (value == null) + { + return defaultValue; + } + if (clazz.isAssignableFrom(value.getClass())) + { + @SuppressWarnings("unchecked") + E myE = (E) value; + return myE; + } + final String valueStr = toStr(value, null); + if (StringUtils.isEmpty(valueStr)) + { + return defaultValue; + } + try + { + return Enum.valueOf(clazz, valueStr); + } + catch (Exception e) + { + return defaultValue; + } + } + + /** + * 转换为Enum对象
+ * 如果给定的值为空,或者转换失败,返回默认值null
+ * + * @param clazz Enum的Class + * @param value 值 + * @return Enum + */ + public static > E toEnum(Class clazz, Object value) + { + return toEnum(clazz, value, null); + } + + /** + * 转换为BigInteger
+ * 如果给定的值为空,或者转换失败,返回默认值
+ * 转换失败不会报错 + * + * @param value 被转换的值 + * @param defaultValue 转换错误时的默认值 + * @return 结果 + */ + public static BigInteger toBigInteger(Object value, BigInteger defaultValue) + { + if (value == null) + { + return defaultValue; + } + if (value instanceof BigInteger) + { + return (BigInteger) value; + } + if (value instanceof Long) + { + return BigInteger.valueOf((Long) value); + } + final String valueStr = toStr(value, null); + if (StringUtils.isEmpty(valueStr)) + { + return defaultValue; + } + try + { + return new BigInteger(valueStr); + } + catch (Exception e) + { + return defaultValue; + } + } + + /** + * 转换为BigInteger
+ * 如果给定的值为空,或者转换失败,返回默认值null
+ * 转换失败不会报错 + * + * @param value 被转换的值 + * @return 结果 + */ + public static BigInteger toBigInteger(Object value) + { + return toBigInteger(value, null); + } + + /** + * 转换为BigDecimal
+ * 如果给定的值为空,或者转换失败,返回默认值
+ * 转换失败不会报错 + * + * @param value 被转换的值 + * @param defaultValue 转换错误时的默认值 + * @return 结果 + */ + public static BigDecimal toBigDecimal(Object value, BigDecimal defaultValue) + { + if (value == null) + { + return defaultValue; + } + if (value instanceof BigDecimal) + { + return (BigDecimal) value; + } + if (value instanceof Long) + { + return new BigDecimal((Long) value); + } + if (value instanceof Double) + { + return BigDecimal.valueOf((Double) value); + } + if (value instanceof Integer) + { + return new BigDecimal((Integer) value); + } + final String valueStr = toStr(value, null); + if (StringUtils.isEmpty(valueStr)) + { + return defaultValue; + } + try + { + return new BigDecimal(valueStr); + } + catch (Exception e) + { + return defaultValue; + } + } + + /** + * 转换为BigDecimal
+ * 如果给定的值为空,或者转换失败,返回默认值
+ * 转换失败不会报错 + * + * @param value 被转换的值 + * @return 结果 + */ + public static BigDecimal toBigDecimal(Object value) + { + return toBigDecimal(value, null); + } + + /** + * 将对象转为字符串
+ * 1、Byte数组和ByteBuffer会被转换为对应字符串的数组 2、对象数组会调用Arrays.toString方法 + * + * @param obj 对象 + * @return 字符串 + */ + public static String utf8Str(Object obj) + { + return str(obj, CharsetKit.CHARSET_UTF_8); + } + + /** + * 将对象转为字符串
+ * 1、Byte数组和ByteBuffer会被转换为对应字符串的数组 2、对象数组会调用Arrays.toString方法 + * + * @param obj 对象 + * @param charsetName 字符集 + * @return 字符串 + */ + public static String str(Object obj, String charsetName) + { + return str(obj, Charset.forName(charsetName)); + } + + /** + * 将对象转为字符串
+ * 1、Byte数组和ByteBuffer会被转换为对应字符串的数组 2、对象数组会调用Arrays.toString方法 + * + * @param obj 对象 + * @param charset 字符集 + * @return 字符串 + */ + public static String str(Object obj, Charset charset) + { + if (null == obj) + { + return null; + } + + if (obj instanceof String) + { + return (String) obj; + } + else if (obj instanceof byte[]) + { + return str((byte[]) obj, charset); + } + else if (obj instanceof Byte[]) + { + byte[] bytes = ArrayUtils.toPrimitive((Byte[]) obj); + return str(bytes, charset); + } + else if (obj instanceof ByteBuffer) + { + return str((ByteBuffer) obj, charset); + } + return obj.toString(); + } + + /** + * 将byte数组转为字符串 + * + * @param bytes byte数组 + * @param charset 字符集 + * @return 字符串 + */ + public static String str(byte[] bytes, String charset) + { + return str(bytes, StringUtils.isEmpty(charset) ? Charset.defaultCharset() : Charset.forName(charset)); + } + + /** + * 解码字节码 + * + * @param data 字符串 + * @param charset 字符集,如果此字段为空,则解码的结果取决于平台 + * @return 解码后的字符串 + */ + public static String str(byte[] data, Charset charset) + { + if (data == null) + { + return null; + } + + if (null == charset) + { + return new String(data); + } + return new String(data, charset); + } + + /** + * 将编码的byteBuffer数据转换为字符串 + * + * @param data 数据 + * @param charset 字符集,如果为空使用当前系统字符集 + * @return 字符串 + */ + public static String str(ByteBuffer data, String charset) + { + if (data == null) + { + return null; + } + + return str(data, Charset.forName(charset)); + } + + /** + * 将编码的byteBuffer数据转换为字符串 + * + * @param data 数据 + * @param charset 字符集,如果为空使用当前系统字符集 + * @return 字符串 + */ + public static String str(ByteBuffer data, Charset charset) + { + if (null == charset) + { + charset = Charset.defaultCharset(); + } + return charset.decode(data).toString(); + } + + // ----------------------------------------------------------------------- 全角半角转换 + /** + * 半角转全角 + * + * @param input String. + * @return 全角字符串. + */ + public static String toSBC(String input) + { + return toSBC(input, null); + } + + /** + * 半角转全角 + * + * @param input String + * @param notConvertSet 不替换的字符集合 + * @return 全角字符串. + */ + public static String toSBC(String input, Set notConvertSet) + { + char[] c = input.toCharArray(); + for (int i = 0; i < c.length; i++) + { + if (null != notConvertSet && notConvertSet.contains(c[i])) + { + // 跳过不替换的字符 + continue; + } + + if (c[i] == ' ') + { + c[i] = '\u3000'; + } + else if (c[i] < '\177') + { + c[i] = (char) (c[i] + 65248); + + } + } + return new String(c); + } + + /** + * 全角转半角 + * + * @param input String. + * @return 半角字符串 + */ + public static String toDBC(String input) + { + return toDBC(input, null); + } + + /** + * 替换全角为半角 + * + * @param text 文本 + * @param notConvertSet 不替换的字符集合 + * @return 替换后的字符 + */ + public static String toDBC(String text, Set notConvertSet) + { + char[] c = text.toCharArray(); + for (int i = 0; i < c.length; i++) + { + if (null != notConvertSet && notConvertSet.contains(c[i])) + { + // 跳过不替换的字符 + continue; + } + + if (c[i] == '\u3000') + { + c[i] = ' '; + } + else if (c[i] > '\uFF00' && c[i] < '\uFF5F') + { + c[i] = (char) (c[i] - 65248); + } + } + String returnString = new String(c); + + return returnString; + } + + /** + * 数字金额大写转换 先写个完整的然后将如零拾替换成零 + * + * @param n 数字 + * @return 中文大写数字 + */ + public static String digitUppercase(double n) + { + String[] fraction = { "角", "分" }; + String[] digit = { "零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖" }; + String[][] unit = { { "元", "万", "亿" }, { "", "拾", "佰", "仟" } }; + + String head = n < 0 ? "负" : ""; + n = Math.abs(n); + + String s = ""; + for (int i = 0; i < fraction.length; i++) + { + s += (digit[(int) (Math.floor(n * 10 * Math.pow(10, i)) % 10)] + fraction[i]).replaceAll("(零.)+", ""); + } + if (s.length() < 1) + { + s = "整"; + } + int integerPart = (int) Math.floor(n); + + for (int i = 0; i < unit[0].length && integerPart > 0; i++) + { + String p = ""; + for (int j = 0; j < unit[1].length && n > 0; j++) + { + p = digit[integerPart % 10] + unit[1][j] + p; + integerPart = integerPart / 10; + } + s = p.replaceAll("(零.)*零$", "").replaceAll("^$", "零") + unit[0][i] + s; + } + return head + s.replaceAll("(零.)*零元", "元").replaceFirst("(零.)+", "").replaceAll("(零.)+", "零").replaceAll("^整$", "零元整"); + } +} diff --git a/xinda-common/src/main/java/com/xinda/common/core/text/IntArrayValuable.java b/xinda-common/src/main/java/com/xinda/common/core/text/IntArrayValuable.java new file mode 100644 index 0000000..6fa8449 --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/core/text/IntArrayValuable.java @@ -0,0 +1,13 @@ +package com.xinda.common.core.text; + +/** + * 可生成 Int 数组的接口 + */ +public interface IntArrayValuable { + + /** + * @return int 数组 + */ + int[] array(); + +} diff --git a/xinda-common/src/main/java/com/xinda/common/core/text/KeyValue.java b/xinda-common/src/main/java/com/xinda/common/core/text/KeyValue.java new file mode 100644 index 0000000..9263edb --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/core/text/KeyValue.java @@ -0,0 +1,20 @@ +package com.xinda.common.core.text; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * Key Value 的键值对 + * + * @author 芋道源码 + */ +@Data +@NoArgsConstructor +@AllArgsConstructor +public class KeyValue { + + private K key; + private V value; + +} diff --git a/xinda-common/src/main/java/com/xinda/common/core/text/StrFormatter.java b/xinda-common/src/main/java/com/xinda/common/core/text/StrFormatter.java new file mode 100644 index 0000000..7ad91ec --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/core/text/StrFormatter.java @@ -0,0 +1,92 @@ +package com.xinda.common.core.text; + +import com.xinda.common.utils.StringUtils; + +/** + * 字符串格式化 + * + * @author ruoyi + */ +public class StrFormatter +{ + public static final String EMPTY_JSON = "{}"; + public static final char C_BACKSLASH = '\\'; + public static final char C_DELIM_START = '{'; + public static final char C_DELIM_END = '}'; + + /** + * 格式化字符串
+ * 此方法只是简单将占位符 {} 按照顺序替换为参数
+ * 如果想输出 {} 使用 \\转义 { 即可,如果想输出 {} 之前的 \ 使用双转义符 \\\\ 即可
+ * 例:
+ * 通常使用:format("this is {} for {}", "a", "b") -> this is a for b
+ * 转义{}: format("this is \\{} for {}", "a", "b") -> this is \{} for a
+ * 转义\: format("this is \\\\{} for {}", "a", "b") -> this is \a for b
+ * + * @param strPattern 字符串模板 + * @param argArray 参数列表 + * @return 结果 + */ + public static String format(final String strPattern, final Object... argArray) + { + if (StringUtils.isEmpty(strPattern) || StringUtils.isEmpty(argArray)) + { + return strPattern; + } + final int strPatternLength = strPattern.length(); + + // 初始化定义好的长度以获得更好的性能 + StringBuilder sbuf = new StringBuilder(strPatternLength + 50); + + int handledPosition = 0; + int delimIndex;// 占位符所在位置 + for (int argIndex = 0; argIndex < argArray.length; argIndex++) + { + delimIndex = strPattern.indexOf(EMPTY_JSON, handledPosition); + if (delimIndex == -1) + { + if (handledPosition == 0) + { + return strPattern; + } + else + { // 字符串模板剩余部分不再包含占位符,加入剩余部分后返回结果 + sbuf.append(strPattern, handledPosition, strPatternLength); + return sbuf.toString(); + } + } + else + { + if (delimIndex > 0 && strPattern.charAt(delimIndex - 1) == C_BACKSLASH) + { + if (delimIndex > 1 && strPattern.charAt(delimIndex - 2) == C_BACKSLASH) + { + // 转义符之前还有一个转义符,占位符依旧有效 + sbuf.append(strPattern, handledPosition, delimIndex - 1); + sbuf.append(Convert.utf8Str(argArray[argIndex])); + handledPosition = delimIndex + 2; + } + else + { + // 占位符被转义 + argIndex--; + sbuf.append(strPattern, handledPosition, delimIndex - 1); + sbuf.append(C_DELIM_START); + handledPosition = delimIndex + 1; + } + } + else + { + // 正常占位符 + sbuf.append(strPattern, handledPosition, delimIndex); + sbuf.append(Convert.utf8Str(argArray[argIndex])); + handledPosition = delimIndex + 2; + } + } + } + // 加入最后一个占位符后所有的字符 + sbuf.append(strPattern, handledPosition, strPattern.length()); + + return sbuf.toString(); + } +} diff --git a/xinda-common/src/main/java/com/xinda/common/core/thingsModel/NeuronModel.java b/xinda-common/src/main/java/com/xinda/common/core/thingsModel/NeuronModel.java new file mode 100644 index 0000000..06ecab8 --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/core/thingsModel/NeuronModel.java @@ -0,0 +1,44 @@ +package com.xinda.common.core.thingsModel; + +import com.alibaba.fastjson2.JSONObject; +import lombok.Data; + +import java.util.Date; +import java.util.List; + +/** + * Neuron-JSON格式协议 + * @author gsb + * @date 2023/5/31 16:36 + */ +@Data +public class NeuronModel { + + /** + * 产品节点 + */ + private String node; + + /** + * 网关编号 + */ + private String group; + /** + * 上报时间 + */ + private Date timestamp; + + /** + * 上报JSON + */ + private JSONObject values; + /** + * 错误集合 + */ + private JSONObject errors; + /** + * 上报属性值集合 + */ + private List items; + +} diff --git a/xinda-common/src/main/java/com/xinda/common/core/thingsModel/SceneThingsModelItem.java b/xinda-common/src/main/java/com/xinda/common/core/thingsModel/SceneThingsModelItem.java new file mode 100644 index 0000000..b8ff830 --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/core/thingsModel/SceneThingsModelItem.java @@ -0,0 +1,42 @@ +package com.xinda.common.core.thingsModel; + +import com.xinda.common.utils.DateUtils; +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; + +import java.util.Date; + +/** + * 物模型值的项 + * + * @author kerwincui + * @date 2021-12-16 + */ +@AllArgsConstructor +@Builder +@Data +public class SceneThingsModelItem +{ + /** 物模型唯一标识符 */ + private String id; + + /** 物模型值 */ + private String value; + + /** 类型:1=属性, 2=功能,3=事件, 4=设备升级,5=设备上线,6=设备下线 ,*/ + private int type; + + /** 脚本ID */ + private String stripId; + + /** 场景ID*/ + private Long sceneId; + + /** 产品ID */ + private Long productId; + + /** 设备编号 */ + private String DeviceNumber; +} diff --git a/xinda-common/src/main/java/com/xinda/common/core/thingsModel/ThingsModelRuleItem.java b/xinda-common/src/main/java/com/xinda/common/core/thingsModel/ThingsModelRuleItem.java new file mode 100644 index 0000000..d0b07b1 --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/core/thingsModel/ThingsModelRuleItem.java @@ -0,0 +1,29 @@ +package com.xinda.common.core.thingsModel; + +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.Builder; +import lombok.Data; + +import java.util.Date; +@Data +@Builder +public class ThingsModelRuleItem { + /** 物模型唯一标识符 */ + private String id; + + /** 物模型值 */ + private String value; + private String operator; + private String triggerValue; + + /** + * 更新时间 + */ + @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + private Date ts; + + /** 备注 **/ + private String remark; + + private String timestamp; +} diff --git a/xinda-common/src/main/java/com/xinda/common/core/thingsModel/ThingsModelSimpleItem.java b/xinda-common/src/main/java/com/xinda/common/core/thingsModel/ThingsModelSimpleItem.java new file mode 100644 index 0000000..b84d0cf --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/core/thingsModel/ThingsModelSimpleItem.java @@ -0,0 +1,97 @@ +package com.xinda.common.core.thingsModel; + +import com.xinda.common.utils.DateUtils; +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.AllArgsConstructor; +import lombok.Builder; + +import java.util.Date; + +/** + * 物模型值的项 + * + * @author kerwincui + * @date 2021-12-16 + */ +@AllArgsConstructor +@Builder +public class ThingsModelSimpleItem +{ + /** 物模型唯一标识符 */ + private String id; + + /** 物模型值 */ + private String value; + + private String name; + + /** + * 更新时间 + */ + @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + private Date ts; + + /** 排序 */ + private Integer order; + + + /** 备注 **/ + private String remark; + + + public ThingsModelSimpleItem(String id, String value , String remark){ + this.id=id; + this.value=value; + this.remark=remark; + } + + public Date getTs() { + return ts; + } + + public void setTs(Date ts) { + this.ts = ts != null ? ts : DateUtils.getNowDate(); + } + + public ThingsModelSimpleItem(){} + + public String getRemark() { + return remark; + } + + public void setRemark(String remark) { + this.remark = remark; + } + + public String getValue() { + return value; + } + + public void setValue(String value) { + this.value = value; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public Integer getOrder() { + return order; + } + + public void setOrder(Integer order) { + this.order = order; + } +} diff --git a/xinda-common/src/main/java/com/xinda/common/core/thingsModel/ThingsModelValuesInput.java b/xinda-common/src/main/java/com/xinda/common/core/thingsModel/ThingsModelValuesInput.java new file mode 100644 index 0000000..b634b8c --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/core/thingsModel/ThingsModelValuesInput.java @@ -0,0 +1,56 @@ +package com.xinda.common.core.thingsModel; + +import java.util.List; + +/** + * 设备输入物模型值参数 + * + * @author kerwincui + * @date 2021-12-16 + */ +public class ThingsModelValuesInput +{ + /** 产品ID **/ + private Long productId; + + private Long deviceId; + /** 设备ID **/ + private String deviceNumber; + + private Integer deviceType; + + /** 设备物模型值的集合 **/ + private List thingsModelSimpleItem; + + public Long getDeviceId() { + return deviceId; + } + + public void setDeviceId(Long deviceId) { + this.deviceId = deviceId; + } + + public Long getProductId() { + return productId; + } + + public void setProductId(Long productId) { + this.productId = productId; + } + + public String getDeviceNumber() { + return deviceNumber; + } + + public void setDeviceNumber(String deviceNumber) { + this.deviceNumber = deviceNumber; + } + + public List getThingsModelValueRemarkItem() { + return thingsModelSimpleItem; + } + + public void setThingsModelValueRemarkItem(List thingsModelSimpleItem) { + this.thingsModelSimpleItem = thingsModelSimpleItem; + } +} diff --git a/xinda-common/src/main/java/com/xinda/common/enums/BusinessStatus.java b/xinda-common/src/main/java/com/xinda/common/enums/BusinessStatus.java new file mode 100644 index 0000000..a1418af --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/enums/BusinessStatus.java @@ -0,0 +1,20 @@ +package com.xinda.common.enums; + +/** + * 操作状态 + * + * @author ruoyi + * + */ +public enum BusinessStatus +{ + /** + * 成功 + */ + SUCCESS, + + /** + * 失败 + */ + FAIL, +} diff --git a/xinda-common/src/main/java/com/xinda/common/enums/BusinessType.java b/xinda-common/src/main/java/com/xinda/common/enums/BusinessType.java new file mode 100644 index 0000000..be7f169 --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/enums/BusinessType.java @@ -0,0 +1,59 @@ +package com.xinda.common.enums; + +/** + * 业务操作类型 + * + * @author ruoyi + */ +public enum BusinessType +{ + /** + * 其它 + */ + OTHER, + + /** + * 新增 + */ + INSERT, + + /** + * 修改 + */ + UPDATE, + + /** + * 删除 + */ + DELETE, + + /** + * 授权 + */ + GRANT, + + /** + * 导出 + */ + EXPORT, + + /** + * 导入 + */ + IMPORT, + + /** + * 强退 + */ + FORCE, + + /** + * 生成代码 + */ + GENCODE, + + /** + * 清空数据 + */ + CLEAN, +} diff --git a/xinda-common/src/main/java/com/xinda/common/enums/CommonStatusEnum.java b/xinda-common/src/main/java/com/xinda/common/enums/CommonStatusEnum.java new file mode 100644 index 0000000..318007b --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/enums/CommonStatusEnum.java @@ -0,0 +1,36 @@ +package com.xinda.common.enums; + +import com.xinda.common.core.text.IntArrayValuable; +import lombok.AllArgsConstructor; +import lombok.Getter; + +import java.util.Arrays; + +/** + * 通用状态枚举 + + */ +@Getter +@AllArgsConstructor +public enum CommonStatusEnum implements IntArrayValuable { + + ENABLE(0, "开启"), + DISABLE(1, "关闭"); + + public static final int[] ARRAYS = Arrays.stream(values()).mapToInt(CommonStatusEnum::getStatus).toArray(); + + /** + * 状态值 + */ + private final Integer status; + /** + * 状态名 + */ + private final String name; + + @Override + public int[] array() { + return ARRAYS; + } + +} diff --git a/xinda-common/src/main/java/com/xinda/common/enums/DataEnum.java b/xinda-common/src/main/java/com/xinda/common/enums/DataEnum.java new file mode 100644 index 0000000..546d25d --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/enums/DataEnum.java @@ -0,0 +1,37 @@ +package com.xinda.common.enums; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +import java.util.Objects; + +/** + * @author gsb + * @date 2023/6/3 14:09 + */ +@Getter +@AllArgsConstructor +public enum DataEnum { + + DECIMAL("decimal", "十进制"), + DOUBLE("double", "双精度"), + ENUM("enum","枚举"), + BOOLEAN("bool","布尔类型"), + INTEGER("integer","整形"), + OBJECT("object", "对象"), + STRING("string","字符串"), + ARRAY("array","数组"); + + String type; + String msg; + + public static DataEnum convert(String type){ + for (DataEnum value : DataEnum.values()) { + if (Objects.equals(value.type, type)){ + return value; + } + } + return DataEnum.STRING; + } + +} diff --git a/xinda-common/src/main/java/com/xinda/common/enums/DataSourceType.java b/xinda-common/src/main/java/com/xinda/common/enums/DataSourceType.java new file mode 100644 index 0000000..46d960d --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/enums/DataSourceType.java @@ -0,0 +1,19 @@ +package com.xinda.common.enums; + +/** + * 数据源 + * + * @author ruoyi + */ +public enum DataSourceType +{ + /** + * 主库 + */ + MASTER, + + /** + * 从库 + */ + SLAVE +} diff --git a/xinda-common/src/main/java/com/xinda/common/enums/DeviceDistributeTypeEnum.java b/xinda-common/src/main/java/com/xinda/common/enums/DeviceDistributeTypeEnum.java new file mode 100644 index 0000000..74fe3ab --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/enums/DeviceDistributeTypeEnum.java @@ -0,0 +1,41 @@ +package com.xinda.common.enums; + + +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * @description: + * @author admin + * @date 2024-07-18 14:52 + * @version 1.0 + */ +@Getter +@AllArgsConstructor +public enum DeviceDistributeTypeEnum { + + /** + * 确保唯一,不能重复 + */ + SELECT(1, "选择分配"), + IMPORT(2,"导入分配"); + + /** + * 渠道类型 + */ + private Integer type; + + /** + * 描述 + */ + private String desc; + + public static String getDesc(Integer type) { + for (DeviceDistributeTypeEnum item : DeviceDistributeTypeEnum.values()) { + if (item.getType().equals(type)) { + return item.getDesc(); + } + } + return ""; + } +} diff --git a/xinda-common/src/main/java/com/xinda/common/enums/DeviceLogTypeEnum.java b/xinda-common/src/main/java/com/xinda/common/enums/DeviceLogTypeEnum.java new file mode 100644 index 0000000..04ab471 --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/enums/DeviceLogTypeEnum.java @@ -0,0 +1,33 @@ +package com.xinda.common.enums; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +import java.util.Arrays; +import java.util.List; + +/** + * 场景管理物模型、变量类型枚举 + * 注意:以下4张表下的variable_type相关字段统一用该枚举,保持一致 + * scene_model_tag表、scene_tag_points表、scene_model_device表、scene_model_data表 + * @author fastb + * @date 2024-05-22 10:01 + * @version 1.0 + */ +@Getter +@AllArgsConstructor +public enum DeviceLogTypeEnum { + + ATTRIBUTE_REPORT(1, "属性上报"), + INVOKE_FUNCTION(2, "调用功能"), + EVENT_REPORT(3, "事件上报"), + DEVICE_UPDATE(4, "设备升级"), + DEVICE_ONLINE(5, "设备上线"), + DEVICE_OFFLINE(6, "设备离线"), + SCENE_VARIABLE_REPORT(7, "场景录入、运算变量上报下发"); + + private final Integer type; + + private final String desc; + +} diff --git a/xinda-common/src/main/java/com/xinda/common/enums/DeviceRecordTypeEnum.java b/xinda-common/src/main/java/com/xinda/common/enums/DeviceRecordTypeEnum.java new file mode 100644 index 0000000..f2646f7 --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/enums/DeviceRecordTypeEnum.java @@ -0,0 +1,35 @@ +package com.xinda.common.enums; + + +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * @description: + * @author admin + * @date 2024-07-18 14:52 + * @version 1.0 + */ +@Getter +@AllArgsConstructor +public enum DeviceRecordTypeEnum { + + /** + * 确保唯一,不能重复 + */ + IMPORT(1, "导入记录"), + RECOVERY(2,"回收记录"), + ASSIGNMENT(3,"分配记录"), + ASSIGNMENT_DETAIL(4,"分配详细记录"); + + + /** + * 渠道类型 + */ + private Integer type; + + /** + * 描述 + */ + private String desc; +} diff --git a/xinda-common/src/main/java/com/xinda/common/enums/DeviceStatus.java b/xinda-common/src/main/java/com/xinda/common/enums/DeviceStatus.java new file mode 100644 index 0000000..6dd4f82 --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/enums/DeviceStatus.java @@ -0,0 +1,36 @@ +package com.xinda.common.enums; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +@Getter +@AllArgsConstructor +public enum DeviceStatus { + + UNACTIVATED(1,"NOTACTIVE","未激活"), + FORBIDDEN(2,"DISABLE","禁用"), + ONLINE(3,"ONLINE","在线"), + OFFLINE(4,"OFFLINE","离线"); + + private int type; + private String code; + private String description; + + public static DeviceStatus convert(int type){ + for (DeviceStatus value : DeviceStatus.values()) { + if (value.type == type){ + return value; + } + } + return null; + } + + public static DeviceStatus convert(String code){ + for (DeviceStatus value : DeviceStatus.values()) { + if (value.code.equals(code)){ + return value; + } + } + return null; + } +} diff --git a/xinda-common/src/main/java/com/xinda/common/enums/ExceptionCode.java b/xinda-common/src/main/java/com/xinda/common/enums/ExceptionCode.java new file mode 100644 index 0000000..43f037f --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/enums/ExceptionCode.java @@ -0,0 +1,23 @@ +package com.xinda.common.enums; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.Getter; + +/** + * @author gsb + * @date 2022/11/3 11:05 + */ +@Getter +@AllArgsConstructor +public enum ExceptionCode { + + SUCCESS(200,"成功"), + TIMEOUT(400,"超时"), + OFFLINE(404,"设备断线"), + FAIL(500,"失败"); + ; + + public int code; + public String desc; +} diff --git a/xinda-common/src/main/java/com/xinda/common/enums/FunctionReplyStatus.java b/xinda-common/src/main/java/com/xinda/common/enums/FunctionReplyStatus.java new file mode 100644 index 0000000..ba57a67 --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/enums/FunctionReplyStatus.java @@ -0,0 +1,21 @@ +package com.xinda.common.enums; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * 设备回调状态 + * @author bill + */ +@Getter +@AllArgsConstructor +public enum FunctionReplyStatus { + SUCCESS(200,"设备执行成功"), + FAIl(201,"指令执行失败"), + UNKNOWN(204,"设备超时未回复"), + NORELY(203, "指令下发成功"); + + int code; + String message; + +} diff --git a/xinda-common/src/main/java/com/xinda/common/enums/GlobalErrorCodeConstants.java b/xinda-common/src/main/java/com/xinda/common/enums/GlobalErrorCodeConstants.java new file mode 100644 index 0000000..1ffb432 --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/enums/GlobalErrorCodeConstants.java @@ -0,0 +1,52 @@ +package com.xinda.common.enums; + + +import com.xinda.common.exception.ErrorCode; + +/** + * 全局错误码枚举 + * 0-999 系统异常编码保留 + * + * 一般情况下,使用 HTTP 响应状态码 https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Status + * 虽然说,HTTP 响应状态码作为业务使用表达能力偏弱,但是使用在系统层面还是非常不错的 + * 比较特殊的是,因为之前一直使用 0 作为成功,就不使用 200 啦。 + * + * @author xinda + */ +public interface GlobalErrorCodeConstants { + + ErrorCode SUCCESS = new ErrorCode(0, "成功"); + + // ========== 客户端错误段 ========== + + ErrorCode BAD_REQUEST = new ErrorCode(400, "请求参数不正确"); + ErrorCode UNAUTHORIZED = new ErrorCode(401, "账号未登录"); + ErrorCode FORBIDDEN = new ErrorCode(403, "没有该操作权限"); + ErrorCode NOT_FOUND = new ErrorCode(404, "请求未找到"); + ErrorCode METHOD_NOT_ALLOWED = new ErrorCode(405, "请求方法不正确"); + ErrorCode LOCKED = new ErrorCode(423, "请求失败,请稍后重试"); // 并发请求,不允许 + ErrorCode TOO_MANY_REQUESTS = new ErrorCode(429, "请求过于频繁,请稍后重试"); + + // ========== 服务端错误段 ========== + + ErrorCode INTERNAL_SERVER_ERROR = new ErrorCode(500, "系统异常"); + ErrorCode NOT_IMPLEMENTED = new ErrorCode(501, "功能未实现/未开启"); + + // ========== 自定义错误段 ========== + ErrorCode REPEATED_REQUESTS = new ErrorCode(900, "重复请求,请稍后重试"); // 重复请求 + ErrorCode DEMO_DENY = new ErrorCode(901, "演示模式,禁止写操作"); + + ErrorCode UNKNOWN = new ErrorCode(999, "未知错误"); + + /** + * 是否为服务端错误,参考 HTTP 5XX 错误码段 + * + * @param code 错误码 + * @return 是否 + */ + static boolean isServerErrorCode(Integer code) { + return code != null + && code >= INTERNAL_SERVER_ERROR.getCode() && code <= INTERNAL_SERVER_ERROR.getCode() + 99; + } + +} diff --git a/xinda-common/src/main/java/com/xinda/common/enums/HttpMethod.java b/xinda-common/src/main/java/com/xinda/common/enums/HttpMethod.java new file mode 100644 index 0000000..81b0a0b --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/enums/HttpMethod.java @@ -0,0 +1,36 @@ +package com.xinda.common.enums; + +import java.util.HashMap; +import java.util.Map; +import org.springframework.lang.Nullable; + +/** + * 请求方式 + * + * @author ruoyi + */ +public enum HttpMethod +{ + GET, HEAD, POST, PUT, PATCH, DELETE, OPTIONS, TRACE; + + private static final Map mappings = new HashMap<>(16); + + static + { + for (HttpMethod httpMethod : values()) + { + mappings.put(httpMethod.name(), httpMethod); + } + } + + @Nullable + public static HttpMethod resolve(@Nullable String method) + { + return (method != null ? mappings.get(method) : null); + } + + public boolean matches(String method) + { + return (this == resolve(method)); + } +} diff --git a/xinda-common/src/main/java/com/xinda/common/enums/IErrorCode.java b/xinda-common/src/main/java/com/xinda/common/enums/IErrorCode.java new file mode 100644 index 0000000..8af96e0 --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/enums/IErrorCode.java @@ -0,0 +1,14 @@ +package com.xinda.common.enums; + +/** + * 常用API返回对象接口 + */ +public interface IErrorCode { + + /**返回码*/ + int getCode(); + + /**返回信息*/ + String getMessage(); + +} \ No newline at end of file diff --git a/xinda-common/src/main/java/com/xinda/common/enums/JobType.java b/xinda-common/src/main/java/com/xinda/common/enums/JobType.java new file mode 100644 index 0000000..fcbc18a --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/enums/JobType.java @@ -0,0 +1,35 @@ +package com.xinda.common.enums; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +import java.util.Objects; + +@Getter +@AllArgsConstructor +public enum JobType { + //1==设备定时,2=设备告警,3=场景联动 4=规则引擎 + Device(1), + DeviceAlert(2), + Scene(3), + RuleEngine(4); + private final Integer value; + + public static JobType fromValue(Integer value) { + for (JobType type : JobType.values()) { + if (Objects.equals(type.getValue(), value)) { + return type; + } + } + return null; + } + + public static String getName(Integer value) { + for (JobType type : JobType.values()) { + if (Objects.equals(type.getValue(), value)) { + return type.name(); + } + } + return null; + } +} diff --git a/xinda-common/src/main/java/com/xinda/common/enums/LimitType.java b/xinda-common/src/main/java/com/xinda/common/enums/LimitType.java new file mode 100644 index 0000000..ed24d59 --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/enums/LimitType.java @@ -0,0 +1,20 @@ +package com.xinda.common.enums; + +/** + * 限流类型 + * + * @author ruoyi + */ + +public enum LimitType +{ + /** + * 默认策略全局限流 + */ + DEFAULT, + + /** + * 根据请求者IP进行限流 + */ + IP +} diff --git a/xinda-common/src/main/java/com/xinda/common/enums/ModbusDataType.java b/xinda-common/src/main/java/com/xinda/common/enums/ModbusDataType.java new file mode 100644 index 0000000..db89a4c --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/enums/ModbusDataType.java @@ -0,0 +1,38 @@ +package com.xinda.common.enums; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +import java.util.Objects; + +/** + * @author gsb + * @date 2023/9/4 14:46 + */ +@Getter +@AllArgsConstructor +public enum ModbusDataType { + + + U_SHORT("ushort","16位 无符号"), + SHORT("short","16位 有符号"), + LONG_ABCD("long-ABCD","32位 有符号(ABCD)"), + LONG_CDAB("long-CDAB","32位 有符号(CDAB)"), + U_LONG_ABCD("ulong-ABCD","32位 无符号(ABCD)"), + U_LONG_CDAB("ulong-CDAB","32位 无符号(CDAB)"), + FLOAT_ABCD("float-ABCD","32位 浮点数(ABCD)"), + FLOAT_CDAB("float-CDAB","32位 浮点数(CDAB)"), + BIT("bit","位"); + + String type; + String msg; + + public static ModbusDataType convert(String type){ + for (ModbusDataType value : ModbusDataType.values()) { + if (Objects.equals(value.type,type)){ + return value; + } + } + return ModbusDataType.U_SHORT; + } +} diff --git a/xinda-common/src/main/java/com/xinda/common/enums/NotifyChannelEnum.java b/xinda-common/src/main/java/com/xinda/common/enums/NotifyChannelEnum.java new file mode 100644 index 0000000..a9387c7 --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/enums/NotifyChannelEnum.java @@ -0,0 +1,46 @@ +package com.xinda.common.enums; + + +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * @description: 通知渠道枚举 + * @author fastb + * @date 2023-12-16 17:00 + * @version 1.0 + */ +@Getter +@AllArgsConstructor +public enum NotifyChannelEnum { + + /** + * 确保唯一,不能重复 + */ + SMS("sms", "短信"), + VOICE("voice","语音"), + WECHAT("wechat","微信"), + DING_TALK("dingtalk","钉钉"), + EMAIL("email", "邮箱"); + + + /** + * 渠道类型 + */ + private String type; + + /** + * 描述 + */ + private String desc; + + public static NotifyChannelEnum getNotifyChannelEnum(String type) { + for (NotifyChannelEnum notifyChannelEnum : NotifyChannelEnum.values()) { + if (type.equals(notifyChannelEnum.type)) { + return notifyChannelEnum; + } + } + return null; + } + +} diff --git a/xinda-common/src/main/java/com/xinda/common/enums/NotifyChannelProviderEnum.java b/xinda-common/src/main/java/com/xinda/common/enums/NotifyChannelProviderEnum.java new file mode 100644 index 0000000..e41a7a2 --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/enums/NotifyChannelProviderEnum.java @@ -0,0 +1,315 @@ +package com.xinda.common.enums; + +import com.xinda.common.core.notify.NotifyConfigVO; +import com.xinda.common.core.notify.config.DingTalkConfigParams; +import com.xinda.common.core.notify.config.EmailConfigParams; +import com.xinda.common.core.notify.config.VoiceConfigParams; +import com.xinda.common.core.notify.config.WeChatConfigParams; +import com.xinda.common.core.notify.msg.*; +import com.xinda.common.utils.StringUtils; +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; +import org.dromara.sms4j.aliyun.config.AlibabaConfig; +import org.dromara.sms4j.cloopen.config.CloopenConfig; +import org.dromara.sms4j.ctyun.config.CtyunConfig; +import org.dromara.sms4j.emay.config.EmayConfig; +import org.dromara.sms4j.huawei.config.HuaweiConfig; +import org.dromara.sms4j.jdcloud.config.JdCloudConfig; +import org.dromara.sms4j.netease.config.NeteaseConfig; +import org.dromara.sms4j.tencent.config.TencentConfig; +import org.dromara.sms4j.yunpian.config.YunpianConfig; + +import java.util.ArrayList; +import java.util.List; + +/** + * @author fastb + * @version 1.0 + * @description: 通知渠道枚举 + * @date 2023-12-18 11:52 + */ +@Getter +@AllArgsConstructor +@NoArgsConstructor +public enum NotifyChannelProviderEnum { + + /**** 短信 ******/ + SMS_ALIBABA("sms", "alibaba", "阿里云短信", AlibabaConfig.class, AlibabaConfig.class), + SMS_TENCENT("sms", "tencent", "腾讯云短信", TencentConfig.class, TencentConfig.class), + SMS_CTYUN("sms", "ctyun","天翼云短信", CtyunConfig.class, CtyunConfig.class), + SMS_HUAWEI("sms", "huawei", "华为云短信", HuaweiConfig.class, HuaweiConfig.class), + SMS_YUNPIAN("sms", "yunpian", "云片短信", YunpianConfig.class, YunpianConfig.class), + SMS_EMAY("sms", "emay","亿美软通短信", EmayConfig.class, EmayConfig.class), + SMS_CLOOPEN("sms", "cloopen","容连云短信", CloopenConfig.class, CloopenConfig.class), + SMS_JDCLOUD("sms", "jdcloud", "京东云短信", JdCloudConfig.class, JdCloudConfig.class), + SMS_NETEASE("sms", "netease", "网易云短信", NeteaseConfig.class, NeteaseConfig.class), + + /****** 语音 ******/ + VOICE_ALIBABA("voice", "alibaba", "阿里云语音", VoiceConfigParams.class, VoiceMsgParams.class), + VOICE_TENCENT("voice", "tencent", "腾讯云语音", VoiceMsgParams.class, VoiceMsgParams.class), + + /****** 邮箱 ******/ + EMAIL_QQ("email", "qq", "QQ邮箱", EmailConfigParams.class, EmailMsgParams.class), + EMAIL_163("email", "163", "163邮箱", EmailConfigParams.class, EmailMsgParams.class), + + /****** 微信 *****/ + WECHAT_MINI_PROGRAM("wechat", "mini_program", "微信小程序(订阅消息)", WeChatConfigParams.class, WechatMsgParams.class), + WECHAT_WECOM_APPLY("wechat", "wecom_apply", "企业微信应用消息", WeChatConfigParams.class, WechatMsgParams.class), + WECHAT_WECOM_ROBOT("wechat", "wecom_robot", "企业微信群机器人", WeChatConfigParams.class, WechatMsgParams.class), + WECHAT_PUBLIC_ACCOUNT("wechat", "public_account", "微信公众号", WeChatConfigParams.class, WechatMsgParams.class), + + /****** 钉钉 *****/ + DING_TALK_WORK("dingtalk", "work", "钉钉工作消息", DingTalkConfigParams.class, DingTalkMsgParams.class), + DING_TALK_GROUP_ROBOT("dingtalk", "group_robot", "钉钉群机器人", DingTalkConfigParams.class, DingTalkMsgParams.class); + + /** + * 渠道编码 + */ + private String channelType; + + /** + * 渠道编码 + */ + private String provider; + + /** + * 描述 + */ + private String desc; + + /** + * 渠道配置类 + */ + private Class configContentClass; + + /** + * 模板配置类 + */ + private Class msgParamsClass; + + + public static NotifyChannelProviderEnum getNotifyChannelCodeEnum(String channelCode) { + for (NotifyChannelProviderEnum channelCodeEnum : NotifyChannelProviderEnum.values()) { + if (channelCode.equals(channelCodeEnum.channelType)) { + return channelCodeEnum; + } + } + return null; + } + + public static NotifyChannelProviderEnum getByChannelTypeAndProvider(String channelType, String provider) { + for (NotifyChannelProviderEnum channelCodeEnum : NotifyChannelProviderEnum.values()) { + if (channelType.equals(channelCodeEnum.channelType) && provider.equals(channelCodeEnum.getProvider())) { + return channelCodeEnum; + } + } + return null; + } + + /** + * @description: 获取通知渠道配置信息 + * @param: type + * @return: java.lang.Object + */ + public static List getConfigContent(NotifyChannelProviderEnum type) { + List configVOList = new ArrayList<>(); + // 务必保证属性(attribute)参数名和各渠道对应配置类configContentClass里的属性名一致 + switch (type) { + case SMS_ALIBABA: + configVOList.add(new NotifyConfigVO("accessKeyId", "accessKeyId", "string", "")); + configVOList.add(new NotifyConfigVO("accessKeySecret", "accessKeySecret", "string", "")); + break; +// return new SmsAliConfigParams(); + case SMS_TENCENT: + configVOList.add(new NotifyConfigVO("accessKeyId", "accessKeyId", "string", "")); + configVOList.add(new NotifyConfigVO("accessKeySecret", "accessKeySecret", "string", "")); + break; +// return new SmsAliConfigParams(); +// case SMS_CTYUN: +// return new SmsAliConfigParams(); +// case SMS_HUAWEI: +// return new SmsAliConfigParams(); +// case SMS_YUNPIAN: +// return new SmsAliConfigParams(); +// case SMS_EMAY: +// return new SmsAliConfigParams(); +// case SMS_CLOOPEN: +// return new SmsAliConfigParams(); +// case SMS_JDCLOUD: +// return new SmsAliConfigParams(); +// case SMS_NETEASE: +// return new SmsAliConfigParams(); + case VOICE_ALIBABA: + case VOICE_TENCENT: + configVOList.add(new NotifyConfigVO("accessKeyId", "accessKeyId", "string", "")); + configVOList.add(new NotifyConfigVO("accessKeySecret", "accessKeySecret", "string", "")); + break; + case EMAIL_QQ: + case EMAIL_163: + if (EMAIL_QQ.equals(type)) { + configVOList.add(new NotifyConfigVO("smtpServer", "服务器地址", "string","smtp.qq.com")); + } + if (EMAIL_163.equals(type)) { + configVOList.add(new NotifyConfigVO("smtpServer", "服务器地址", "string","smtp.163.com")); + } + configVOList.add(new NotifyConfigVO("port", "端口号", "string", "465")); + configVOList.add(new NotifyConfigVO("username", "发件人账号", "string", "")); + configVOList.add(new NotifyConfigVO("password", "发件秘钥", "string", "")); + configVOList.add(new NotifyConfigVO("sslEnable", "是否启动ssl", "boolean", "true")); + configVOList.add(new NotifyConfigVO("authEnable", "开启验证", "boolean", "true")); + configVOList.add(new NotifyConfigVO("retryInterval", "重试间隔(秒)", "int", "5")); + configVOList.add(new NotifyConfigVO("maxRetries", "重试次数", "int","1")); + break; + case WECHAT_MINI_PROGRAM: + case WECHAT_PUBLIC_ACCOUNT: + configVOList.add(new NotifyConfigVO("appId", "appId", "string","")); + configVOList.add(new NotifyConfigVO("appSecret", "appSecret", "string","")); + break; + case WECHAT_WECOM_APPLY: + configVOList.add(new NotifyConfigVO("corpId", "企业ID", "string","")); + configVOList.add(new NotifyConfigVO("corpSecret", "应用Secret", "string","")); + configVOList.add(new NotifyConfigVO("agentId", "应用agentId", "string","")); + break; + case WECHAT_WECOM_ROBOT: + configVOList.add(new NotifyConfigVO("webHook", "webHook", "string","")); + break; + case DING_TALK_WORK: + configVOList.add(new NotifyConfigVO("appKey", "appKey", "string","")); + configVOList.add(new NotifyConfigVO("appSecret", "appSecret", "string","")); + configVOList.add(new NotifyConfigVO("agentId", "agentId", "string","")); + break; + case DING_TALK_GROUP_ROBOT: + configVOList.add(new NotifyConfigVO("webHook", "webHook", "string","")); + break; + default: + return configVOList; + } + return configVOList; + } + + /** + * @description: 获取通知模板配置信息 + * @param: type + * @return: java.lang.Object + */ + public static List getMsgParams(NotifyChannelProviderEnum type, String msgType) { + List configVOList = new ArrayList<>(); + switch (type) { + // 短信:配置参数来源于sms4j,务必属性字段名和sms4j配置参数字段名一致 + case SMS_ALIBABA: + configVOList.add(new NotifyConfigVO("sendAccount", "发送电话号", "string","")); + configVOList.add(new NotifyConfigVO("templateId", "模板CODE", "string","")); + configVOList.add(new NotifyConfigVO("signature", "签名", "string","")); + configVOList.add(new NotifyConfigVO("content", "模板内容", "string","")); + break; + case SMS_TENCENT: + configVOList.add(new NotifyConfigVO("sendAccount", "发送电话号", "string","")); + configVOList.add(new NotifyConfigVO("templateId", "模板ID", "string","")); + configVOList.add(new NotifyConfigVO("signature", "签名", "string","")); + configVOList.add(new NotifyConfigVO("sdkAppId", "应用SDKAppID", "string","")); + configVOList.add(new NotifyConfigVO("content", "模板内容", "string","")); + break; + // 邮箱 + case EMAIL_QQ: + case EMAIL_163: + configVOList.add(new NotifyConfigVO("sendAccount", "发送邮箱号", "string","")); + configVOList.add(new NotifyConfigVO("title", "标题", "string","")); + configVOList.add(new NotifyConfigVO("attachment", "附件", "file","")); + configVOList.add(new NotifyConfigVO("content", "邮箱正文", "text","")); + break; + case WECHAT_MINI_PROGRAM: + configVOList.add(new NotifyConfigVO("sendAccount", "发送用户ID", "string","")); + configVOList.add(new NotifyConfigVO("templateId", "模板ID", "string","")); + configVOList.add(new NotifyConfigVO("redirectUrl", "跳转链接", "string","")); + configVOList.add(new NotifyConfigVO("content", "模板内容", "string","")); + break; + case WECHAT_PUBLIC_ACCOUNT: + configVOList.add(new NotifyConfigVO("templateId", "模板ID", "string","")); + configVOList.add(new NotifyConfigVO("redirectUrl", "跳转链接", "string","")); + configVOList.add(new NotifyConfigVO("appid", "跳转小程序appid", "string","")); + configVOList.add(new NotifyConfigVO("pagePath", "跳转小程序路径", "string","")); + configVOList.add(new NotifyConfigVO("content", "模板内容", "string","")); + case WECHAT_WECOM_APPLY: + case WECHAT_WECOM_ROBOT: + if (StringUtils.isEmpty(msgType)) { + return configVOList; + } + if (type.equals(WECHAT_WECOM_APPLY)) { + configVOList.add(new NotifyConfigVO("sendAccount", "发送成员账号", "string","")); + } + switch (msgType) { + case "text": + case "markdown": + configVOList.add(new NotifyConfigVO("content", "消息内容", "string","")); + break; + case "news": + configVOList.add(new NotifyConfigVO("title", "消息标题", "string","")); + configVOList.add(new NotifyConfigVO("content", "消息内容", "string","")); + configVOList.add(new NotifyConfigVO("url", "跳转链接", "string","")); + configVOList.add(new NotifyConfigVO("picUrl", "图片链接", "file","")); + break; + default: + break; + } + break; + // 语音 + case VOICE_ALIBABA: + configVOList.add(new NotifyConfigVO("sendAccount", "发送电话号", "string","")); + configVOList.add(new NotifyConfigVO("templateId", "模板ID", "string","")); + configVOList.add(new NotifyConfigVO("content", "模板内容", "string","")); + configVOList.add(new NotifyConfigVO("playTimes", "播放次数 (1~3)", "int","2")); + configVOList.add(new NotifyConfigVO("volume", "播放音量 (0-100)", "string","50")); + configVOList.add(new NotifyConfigVO("speed", "语速控制 (-500-500)", "string","0")); + break; + case VOICE_TENCENT: + configVOList.add(new NotifyConfigVO("sendAccount", "发送电话号", "string","")); + configVOList.add(new NotifyConfigVO("sdkAppId", "应用SDKAppID", "string","")); + configVOList.add(new NotifyConfigVO("templateId", "模板ID", "string","")); + configVOList.add(new NotifyConfigVO("content", "模板内容", "string","")); + break; + // 钉钉 + case DING_TALK_WORK: + case DING_TALK_GROUP_ROBOT: + if (StringUtils.isEmpty(msgType)) { + return configVOList; + } + switch (msgType) { + case "text": + if (NotifyChannelProviderEnum.DING_TALK_WORK.equals(type)) { + configVOList.add(new NotifyConfigVO("deptId", "部门id", "string","")); + configVOList.add(new NotifyConfigVO("sendAllEnable", "发送所有人", "boolean","false")); + configVOList.add(new NotifyConfigVO("sendAccount", "员工UserID", "string","")); + } + configVOList.add(new NotifyConfigVO("content", "消息内容", "string","")); + break; + case "link": + if (NotifyChannelProviderEnum.DING_TALK_WORK.equals(type)) { + configVOList.add(new NotifyConfigVO("deptId", "部门id", "string","")); + configVOList.add(new NotifyConfigVO("sendAllEnable", "发送所有人", "boolean","false")); + configVOList.add(new NotifyConfigVO("sendAccount", "员工UserID", "string","")); + } + configVOList.add(new NotifyConfigVO("title", "消息标题", "string","")); + configVOList.add(new NotifyConfigVO("content", "消息内容", "string","")); + configVOList.add(new NotifyConfigVO("messageUrl", "消息链接", "string","")); + configVOList.add(new NotifyConfigVO("picUrl", "图片链接", "file","")); + break; + case "markdown": + if (NotifyChannelProviderEnum.DING_TALK_WORK.equals(type)) { + configVOList.add(new NotifyConfigVO("deptId", "部门id", "string","")); + configVOList.add(new NotifyConfigVO("sendAllEnable", "发送所有人", "boolean","false")); + configVOList.add(new NotifyConfigVO("sendAccount", "员工UserID", "string","")); + } + configVOList.add(new NotifyConfigVO("title", "消息标题", "string","")); + configVOList.add(new NotifyConfigVO("content", "消息内容", "string","")); + break; + default: + break; + } + break; + default: + return configVOList; + } + return configVOList; + } +} diff --git a/xinda-common/src/main/java/com/xinda/common/enums/NotifyServiceCodeEnum.java b/xinda-common/src/main/java/com/xinda/common/enums/NotifyServiceCodeEnum.java new file mode 100644 index 0000000..96d1dfd --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/enums/NotifyServiceCodeEnum.java @@ -0,0 +1,44 @@ +package com.xinda.common.enums; + + +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * @description: 通知业务编码枚举 + * @author fastb + * @date 2023-12-16 17:00 + * @version 1.0 + */ +@Getter +@AllArgsConstructor +public enum NotifyServiceCodeEnum { + + /** + * 确保唯一,不能重复 + */ + ALERT("alert", "设备告警"), + CAPTCHA("captcha","验证码"), + MARKETING("marketing", "营销通知"); + + + /** + * 业务编码 + */ + private String serviceCode; + + /** + * 描述 + */ + private String desc; + + public static NotifyServiceCodeEnum getNotifyServiceCodeEnum(String serviceCode) { + for (NotifyServiceCodeEnum notifyServiceCodeEnum : NotifyServiceCodeEnum.values()) { + if (serviceCode.equals(notifyServiceCodeEnum.serviceCode)) { + return notifyServiceCodeEnum; + } + } + return null; + } + +} diff --git a/xinda-common/src/main/java/com/xinda/common/enums/OTAUpgrade.java b/xinda-common/src/main/java/com/xinda/common/enums/OTAUpgrade.java new file mode 100644 index 0000000..7f3685b --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/enums/OTAUpgrade.java @@ -0,0 +1,37 @@ +package com.xinda.common.enums; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * OTA升级状态 + * @author gsb + * @date 2022/10/24 17:29 + */ +@AllArgsConstructor +@Getter +public enum OTAUpgrade { + + + AWAIT(0, "等待升级","未推送固件到设备"), + SEND(1, "已发送","已发送设备"), + REPLY(2, "升级中","设备OTA升级中"), + SUCCESS(3, "成功","升级成功"), + FAILED(4, "失败","升级失败"), + STOP(5, "停止","设备离线停止推送"), + UNKNOWN(404, "未知","未知错误码"); + Integer status; + String subMsg; + String des; + + public static OTAUpgrade parse(Integer code){ + for (OTAUpgrade item: OTAUpgrade.values()){ + if(item.status.equals(code)){ + return item; + } + } + + return UNKNOWN; + } + +} diff --git a/xinda-common/src/main/java/com/xinda/common/enums/OperatorType.java b/xinda-common/src/main/java/com/xinda/common/enums/OperatorType.java new file mode 100644 index 0000000..9b8d490 --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/enums/OperatorType.java @@ -0,0 +1,24 @@ +package com.xinda.common.enums; + +/** + * 操作人类别 + * + * @author ruoyi + */ +public enum OperatorType +{ + /** + * 其它 + */ + OTHER, + + /** + * 后台用户 + */ + MANAGE, + + /** + * 手机端用户 + */ + MOBILE +} diff --git a/xinda-common/src/main/java/com/xinda/common/enums/PushType.java b/xinda-common/src/main/java/com/xinda/common/enums/PushType.java new file mode 100644 index 0000000..c274f5b --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/enums/PushType.java @@ -0,0 +1,23 @@ +package com.xinda.common.enums; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * 推送类型 + * @author bill + */ +@Getter +@AllArgsConstructor +public enum PushType { + + WECHAT_SERVER_PUSH("wechat_server_push","微信小程序服务号推送"); + + + /** + * 业务编号 + */ + private String serviceCode; + + private String desc; +} diff --git a/xinda-common/src/main/java/com/xinda/common/enums/ResultCode.java b/xinda-common/src/main/java/com/xinda/common/enums/ResultCode.java new file mode 100644 index 0000000..f23467c --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/enums/ResultCode.java @@ -0,0 +1,37 @@ +package com.xinda.common.enums; + +import com.xinda.common.constant.HttpStatus; +import lombok.AllArgsConstructor; + +/** + * API返回对象 + */ +@AllArgsConstructor +public enum ResultCode implements IErrorCode { + + SUCCESS(HttpStatus.SUCCESS,"请求成功"), + FAILED(HttpStatus.ERROR,"系统内部错误"), + ACCEPTED(HttpStatus.ACCEPTED,"请求已接收"), + REDIRECT(HttpStatus.SEE_OTHER,"重定向"), + UNAUTHORIZED(HttpStatus.UNAUTHORIZED,"暂未登录或token过期"), + FORBIDDEN(HttpStatus.FORBIDDEN,"没有相关权限或授权过期"), + NOT_FOUND(HttpStatus.NOT_FOUND,"资源未找到"), + PARSE_MSG_EXCEPTION(4018, "解析协议异常"), + TIMEOUT(502, "响应超时!"), + FIRMWARE_VERSION_UNIQUE_ERROR(4022, "产品下已存在该版本固件"), + FIRMWARE_SEQ_UNIQUE_ERROR(4023, "产品下已存在该升级序列号"), + FIRMWARE_TASK_UNIQUE_ERROR(4024, "任务名已存在"), + REPLY_TIMEOUT(4001, "超时未回执"), + INVALID_USER_APP(4002, "用户信息不存在"), + INVALID_MQTT_USER(1003, "内部mqtt服务用户异常"), + DECODE_PROTOCOL_EXCEPTION(1000, "解析协议异常"), + MQTT_TOPIC_INVALID(1001, "MQTT订阅topic格式非法"); + + private int code; + private String message; + + public int getCode(){return code;} + + public String getMessage(){return message;} + +} diff --git a/xinda-common/src/main/java/com/xinda/common/enums/ServerType.java b/xinda-common/src/main/java/com/xinda/common/enums/ServerType.java new file mode 100644 index 0000000..ce534e1 --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/enums/ServerType.java @@ -0,0 +1,45 @@ +package com.xinda.common.enums; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * @author gsb + * @date 2022/9/15 9:10 + */ +@Getter +@AllArgsConstructor +public enum ServerType { + + MQTT(1, "MQTT","MQTT-BROKER"), + COAP(2, "COAP","COAP-SERVER"), + TCP(3, "TCP","TCP-SERVER"), + UDP(4, "UDP","UDP-SERVER"), + WEBSOCKET(5,"WEBSOCKET","WEBSOCKET-SERVER"), + GB28181(6,"GB28181","SIP-SERVER"), + HTTP(6,"HTTP","HTTP-SERVER"), + OTHER(999,"WEBSOCKET","MQTT-BROKER"); + + private int type; + private String code; + private String des; + + + + public static ServerType explain(String code) { + for (ServerType value : ServerType.values()) { + if (value.code.equals(code)) { + return value; + } + } + return ServerType.MQTT; + } + public static ServerType explainByType(int type) { + for (ServerType value : ServerType.values()) { + if (value.type == type) { + return value; + } + } + return ServerType.MQTT; + } +} diff --git a/xinda-common/src/main/java/com/xinda/common/enums/SocialPlatformType.java b/xinda-common/src/main/java/com/xinda/common/enums/SocialPlatformType.java new file mode 100644 index 0000000..aa6a2d5 --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/enums/SocialPlatformType.java @@ -0,0 +1,69 @@ +package com.xinda.common.enums; + +import java.util.Arrays; +import java.util.List; + +/** + * 第三方登录平台枚举 + * + * @author json + */ +public enum SocialPlatformType { + WECHAT_OPEN_WEB("wechat_open_web", "微信开放平台网站应用"), + WECHAT_OPEN_WEB_BIND("wechat_open_web_bind", "微信开放平台网站应用个人中心绑定"), + WECHAT_OPEN_MOBILE("wechat_open_mobile", "微信开放平台移动应用"), + WECHAT_OPEN_MINI_PROGRAM("wechat_open_mini_program", "微信开放平台小程序"), + WECHAT_OPEN_PUBLIC_ACCOUNT("wechat_open_public_account", "微信开放平台公众号"), + QQ_OPEN_WEB("qq_open_web", "QQ互联网站应用"), + QQ_OPEN_APP("qq_open_app", "QQ互联移动应用"), + QQ_OPEN_MINI_PROGRAM("qq_open_mini_program", "QQ互联小程序"); +// ALIPAY_OPEN_WEB("alipay_open_web", ""), +// ALIPAY_OPEN_APP("alipay_open_app", ""), +// ALIPAY_OPEN_MINI_PROGRAM("alipay_open_mini_program", ""); + + public String sourceClient; + + public String desc; + + SocialPlatformType(String sourceClient, String desc) { + this.sourceClient = sourceClient; + this.desc = desc; + } + + // 查询微信绑定来源集合 + public static final List listWechatPlatform = Arrays.asList(WECHAT_OPEN_WEB.sourceClient, WECHAT_OPEN_MOBILE.sourceClient, WECHAT_OPEN_MINI_PROGRAM.sourceClient); + + public static String getDesc(String sourceClient) { + for (SocialPlatformType socialPlatformType : SocialPlatformType.values()) { + if (socialPlatformType.getSourceClient().equals(sourceClient)) { + return socialPlatformType.getDesc(); + } + } + return null; + } + + public static SocialPlatformType getSocialPlatformType(String sourceClient) { + for (SocialPlatformType socialPlatformType : SocialPlatformType.values()) { + if (socialPlatformType.getSourceClient().equals(sourceClient)) { + return socialPlatformType; + } + } + return null; + } + + public String getSourceClient() { + return sourceClient; + } + + public void setSourceClient(String sourceClient) { + this.sourceClient = sourceClient; + } + + public String getDesc() { + return desc; + } + + public void setDesc(String desc) { + this.desc = desc; + } +} diff --git a/xinda-common/src/main/java/com/xinda/common/enums/StatusEnum.java b/xinda-common/src/main/java/com/xinda/common/enums/StatusEnum.java new file mode 100644 index 0000000..537ead2 --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/enums/StatusEnum.java @@ -0,0 +1,30 @@ +package com.xinda.common.enums; + +import com.xinda.common.core.text.IntArrayValuable; +import lombok.AllArgsConstructor; +import lombok.Getter; + +import java.util.Arrays; + +/** + * 通用状态枚举 + + */ +@Getter +@AllArgsConstructor +public enum StatusEnum { + + SUCCESS(1, "成功"), + FAIL(0, "失败"); + + + /** + * 状态值 + */ + private final Integer status; + /** + * 状态名 + */ + private final String name; + +} diff --git a/xinda-common/src/main/java/com/xinda/common/enums/ThingsModelType.java b/xinda-common/src/main/java/com/xinda/common/enums/ThingsModelType.java new file mode 100644 index 0000000..5983f62 --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/enums/ThingsModelType.java @@ -0,0 +1,50 @@ +package com.xinda.common.enums; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * 物模型类型 + * + * @author bill + */ +@Getter +@AllArgsConstructor +public enum ThingsModelType { + + PROP(1, "PROPERTY", "属性","properties"), + SERVICE(2, "FUNCTION", "服务","functions"), + EVENT(3, "EVENT", "事件","events"),; + + int code; + String type; + String name; + String list; + + public static ThingsModelType getType(int code) { + for (ThingsModelType value : ThingsModelType.values()) { + if (value.code == code) { + return value; + } + } + return ThingsModelType.PROP; + } + + public static ThingsModelType getType(String type) { + for (ThingsModelType value : ThingsModelType.values()) { + if (value.type.equals(type)) { + return value; + } + } + return ThingsModelType.PROP; + } + + public static String getName(int code) { + for (ThingsModelType value : ThingsModelType.values()) { + if (value.code == code) { + return value.list; + } + } + return ThingsModelType.PROP.list; + } +} diff --git a/xinda-common/src/main/java/com/xinda/common/enums/TopicType.java b/xinda-common/src/main/java/com/xinda/common/enums/TopicType.java new file mode 100644 index 0000000..4b44c2d --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/enums/TopicType.java @@ -0,0 +1,72 @@ +package com.xinda.common.enums; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * topic类型 + * @author gsb + */ +@Getter +@AllArgsConstructor +public enum TopicType { + + /** + * @param type 0:标记是订阅主题 1:标记是发布属性 + * @param order 排序 + * @param topicSuffix topic后缀 + * @param msg 描述信息 + */ + + /*** 通用设备上报主题(平台订阅) ***/ + PROPERTY_POST(0,1,"/property/post", "订阅属性"), + EVENT_POST(0,2,"/event/post", "订阅事件"), + FUNCTION_POST(0,3,"/function/post", "订阅功能"), + INFO_POST(0,4,"/info/post","订阅设备信息"), + NTP_POST(0,5,"/ntp/post","订阅时钟同步"), + SERVICE_INVOKE_REPLY(0,8,"/service/reply", "订阅功能调用返回结果"), + FIRMWARE_UPGRADE_REPLY(0,9,"/upgrade/reply", "订阅设备OTA升级结果"), + MESSAGE_POST(0,26,"/message/post","订阅设备上报消息"), + + /*** 通用设备订阅主题(平台下发)***/ + FUNCTION_GET(1,17,"/function/get", "发布功能"), + PROPERTY_GET(1,12,"/property/get" ,"发布设备属性读取"), + PROPERTY_SET(1,15,"/property/set" ,"设置设备属性读取"), + FIRMWARE_SET(1,14, "/upgrade/set","发布OTA升级"), + STATUS_POST(1,11,"/status/post","发布状态"), + NTP_GET(1,15,"/ntp/get","发布时钟同步"), + INFO_GET(1,18,"/info/get","发布设备信息"), + + + /*** 视频监控设备转协议发布 ***/ + DEV_INFO_POST(3,19,"/info/post","设备端发布设备信息"), + DEV_EVENT_POST(3,20,"/event/post","设备端发布事件"), + DEV_FUNCTION_POST(3,21,"/function/post", "设备端发布功能"), + DEV_PROPERTY_POST(3,22,"/property/post", "设备端发布属性"), + + + /*** webSocket转发前端使用 ***/ + WS_SERVICE_INVOKE(2,16,"/ws/service", "WS服务调用"), + WS_LOG_INVOKE(2,17,"/ws/log","ws下发指令日志"), + + + /*** 模拟设备使用 ***/ + WS_TEST_POST(2,24,"/ws/test/post", "数据调试设备下发"), + WS_TEST_POLL(2,25,"/ws/test/poll", "数据调试轮询指令下发"), + WS_TEST_GET(2,25,"/ws/test/get", "数据调试指令下发"); + + Integer type; + Integer order; + String topicSuffix; + String msg; + + public static TopicType getType(String topicSuffix) { + for (TopicType value : TopicType.values()) { + if (value.topicSuffix.equals(topicSuffix)) { + return value; + } + } + return TopicType.PROPERTY_POST; + } + +} diff --git a/xinda-common/src/main/java/com/xinda/common/enums/TranslateType.java b/xinda-common/src/main/java/com/xinda/common/enums/TranslateType.java new file mode 100644 index 0000000..6f2a613 --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/enums/TranslateType.java @@ -0,0 +1,24 @@ +package com.xinda.common.enums; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +import static com.xinda.common.constant.Constants.*; + +@Getter +@AllArgsConstructor +public enum TranslateType { + + MENU_TYPE(MENU, "sys_menu_translate", "sys_menu", "menu_id", "menu_name"), + DICT_DATA_TYPE(DICT_DATA, "sys_dict_data_translate", "sys_dict_data", "dict_code", "dict_label"), + DICT_TYPE_TYPE(DICT_TYPE, "sys_dict_type_translate", "sys_dict_type", "dict_id", "dict_name"), + THINGS_MODEL_TYPE(THINGS_MODEL, "iot_things_model_translate", "iot_things_model", "model_id", "model_name"), + THINGS_MODEL_TEMPLATE_TYPE(THINGS_MODEL_TEMPLATE, "iot_things_model_template_translate", "iot_things_model_template", "template_id", "template_name"); + + String value; + String translateTable; + String sourceTable; + String idColumn; + String nameColumn; + +} diff --git a/xinda-common/src/main/java/com/xinda/common/enums/UserStatus.java b/xinda-common/src/main/java/com/xinda/common/enums/UserStatus.java new file mode 100644 index 0000000..8518646 --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/enums/UserStatus.java @@ -0,0 +1,30 @@ +package com.xinda.common.enums; + +/** + * 用户状态 + * + * @author ruoyi + */ +public enum UserStatus +{ + OK("0", "正常"), DISABLE("1", "停用"), DELETED("2", "删除"); + + private final String code; + private final String info; + + UserStatus(String code, String info) + { + this.code = code; + this.info = info; + } + + public String getCode() + { + return code; + } + + public String getInfo() + { + return info; + } +} diff --git a/xinda-common/src/main/java/com/xinda/common/enums/VerifyTypeEnum.java b/xinda-common/src/main/java/com/xinda/common/enums/VerifyTypeEnum.java new file mode 100644 index 0000000..67f98fb --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/enums/VerifyTypeEnum.java @@ -0,0 +1,23 @@ +package com.xinda.common.enums; + +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; + +/** + * 验证类型枚举 + * @author fastb + * @date 2023-08-30 15:04 + */ +@Getter +@NoArgsConstructor +@AllArgsConstructor +public enum VerifyTypeEnum { + + PASSWORD(1, "账号密码验证"), + SMS(2, "短信验证"); + + private Integer verifyType; + + private String desc; +} diff --git a/xinda-common/src/main/java/com/xinda/common/enums/scenemodel/SceneModelTagOpreationEnum.java b/xinda-common/src/main/java/com/xinda/common/enums/scenemodel/SceneModelTagOpreationEnum.java new file mode 100644 index 0000000..0196455 --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/enums/scenemodel/SceneModelTagOpreationEnum.java @@ -0,0 +1,47 @@ +package com.xinda.common.enums.scenemodel; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * 场景变量统计方式 + * @author fastb + * @date 2024-06-05 10:42 + * @version 1.0 + */ +@AllArgsConstructor +@Getter +public enum SceneModelTagOpreationEnum { + /** + * 原值 + */ + ORIGINAL_VALUE(1, "原值"), + /** + * 累计值 + */ + CUMULATIVE(2, "累计值"), + /** + * 平均值 + */ + AVERAGE_VALUE(3, "平均值"), + /** + * 最大值 + */ + MAX_VALUE(4, "最大值"), + /** + * 最小值 + */ + MIN_VALUE(5,"最小值"); + + private final Integer code; + private final String desc; + + public static SceneModelTagOpreationEnum getByCode(Integer code) { + for (SceneModelTagOpreationEnum opreationEnum : SceneModelTagOpreationEnum.values()) { + if (opreationEnum.getCode().equals(code)) { + return opreationEnum; + } + } + return null; + } +} diff --git a/xinda-common/src/main/java/com/xinda/common/enums/scenemodel/SceneModelVariableTypeEnum.java b/xinda-common/src/main/java/com/xinda/common/enums/scenemodel/SceneModelVariableTypeEnum.java new file mode 100644 index 0000000..661b282 --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/enums/scenemodel/SceneModelVariableTypeEnum.java @@ -0,0 +1,33 @@ +package com.xinda.common.enums.scenemodel; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +/** + * 场景管理物模型、变量类型枚举 + * 注意:以下4张表下的variable_type相关字段统一用该枚举,保持一致 + * scene_model_tag表、scene_tag_points表、scene_model_device表、scene_model_data表 + * @author fastb + * @date 2024-05-22 10:01 + * @version 1.0 + */ +@Getter +@AllArgsConstructor +public enum SceneModelVariableTypeEnum { + //1==设备物模型(直采变量),2=录入型变量,3=运算型变量 + THINGS_MODEL(1, "设备配置"), + INPUT_VARIABLE(2, "录入型变量"), + OPERATION_VARIABLE(3, "运算型变量"); + + public final static List ADD_LIST = Arrays.asList(INPUT_VARIABLE, OPERATION_VARIABLE); + + + private final Integer type; + + private final String name; + +} diff --git a/xinda-common/src/main/java/com/xinda/common/exception/DemoModeException.java b/xinda-common/src/main/java/com/xinda/common/exception/DemoModeException.java new file mode 100644 index 0000000..a046e17 --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/exception/DemoModeException.java @@ -0,0 +1,15 @@ +package com.xinda.common.exception; + +/** + * 演示模式异常 + * + * @author ruoyi + */ +public class DemoModeException extends RuntimeException +{ + private static final long serialVersionUID = 1L; + + public DemoModeException() + { + } +} diff --git a/xinda-common/src/main/java/com/xinda/common/exception/ErrorCode.java b/xinda-common/src/main/java/com/xinda/common/exception/ErrorCode.java new file mode 100644 index 0000000..7890ea0 --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/exception/ErrorCode.java @@ -0,0 +1,28 @@ +package com.xinda.common.exception; + +import lombok.Data; +import lombok.experimental.Accessors; + +/** + * 错误码对象 + * + */ +@Data +@Accessors(chain = true) +public class ErrorCode { + + /** + * 错误码 + */ + private final Integer code; + /** + * 错误提示 + */ + private final String msg; + + public ErrorCode(Integer code, String message) { + this.code = code; + this.msg = message; + } + +} diff --git a/xinda-common/src/main/java/com/xinda/common/exception/GlobalException.java b/xinda-common/src/main/java/com/xinda/common/exception/GlobalException.java new file mode 100644 index 0000000..0571a9e --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/exception/GlobalException.java @@ -0,0 +1,58 @@ +package com.xinda.common.exception; + +/** + * 全局异常 + * + * @author ruoyi + */ +public class GlobalException extends RuntimeException +{ + private static final long serialVersionUID = 1L; + + /** + * 错误提示 + */ + private String message; + + /** + * 错误明细,内部调试错误 + * + * 和 {@link CommonResult#getDetailMessage()} 一致的设计 + */ + private String detailMessage; + + /** + * 空构造方法,避免反序列化问题 + */ + public GlobalException() + { + } + + public GlobalException(String message) + { + this.message = message; + } + + public String getDetailMessage() + { + return detailMessage; + } + + public GlobalException setDetailMessage(String detailMessage) + { + this.detailMessage = detailMessage; + return this; + } + + @Override + public String getMessage() + { + return message; + } + + public GlobalException setMessage(String message) + { + this.message = message; + return this; + } +} \ No newline at end of file diff --git a/xinda-common/src/main/java/com/xinda/common/exception/ServerException.java b/xinda-common/src/main/java/com/xinda/common/exception/ServerException.java new file mode 100644 index 0000000..fa31b6c --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/exception/ServerException.java @@ -0,0 +1,60 @@ +package com.xinda.common.exception; + +import com.xinda.common.enums.GlobalErrorCodeConstants; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * 服务器异常 Exception + */ +@Data +@EqualsAndHashCode(callSuper = true) +public final class ServerException extends RuntimeException { + + /** + * 全局错误码 + * + * @see GlobalErrorCodeConstants + */ + private Integer code; + /** + * 错误提示 + */ + private String message; + + /** + * 空构造方法,避免反序列化问题 + */ + public ServerException() { + } + + public ServerException(ErrorCode errorCode) { + this.code = errorCode.getCode(); + this.message = errorCode.getMsg(); + } + + public ServerException(Integer code, String message) { + this.code = code; + this.message = message; + } + + public Integer getCode() { + return code; + } + + public ServerException setCode(Integer code) { + this.code = code; + return this; + } + + @Override + public String getMessage() { + return message; + } + + public ServerException setMessage(String message) { + this.message = message; + return this; + } + +} diff --git a/xinda-common/src/main/java/com/xinda/common/exception/ServiceException.java b/xinda-common/src/main/java/com/xinda/common/exception/ServiceException.java new file mode 100644 index 0000000..a071571 --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/exception/ServiceException.java @@ -0,0 +1,80 @@ +package com.xinda.common.exception; + +/** + * 业务异常 + * + * @author ruoyi + */ +public final class ServiceException extends RuntimeException +{ + private static final long serialVersionUID = 1L; + + /** + * 错误码 + */ + private Integer code; + + /** + * 错误提示 + */ + private String message; + + /** + * 错误明细,内部调试错误 + * + * 和 {@link CommonResult#getDetailMessage()} 一致的设计 + */ + private String detailMessage; + + /** + * 空构造方法,避免反序列化问题 + */ + public ServiceException() + { + } + + public ServiceException(String message) + { + this.message = message; + } + + public ServiceException(String message, Integer code) + { + this.message = message; + this.code = code; + } + + public ServiceException(Integer code, String message) + { + this.code = code; + this.message = message; + } + + public String getDetailMessage() + { + return detailMessage; + } + + @Override + public String getMessage() + { + return message; + } + + public Integer getCode() + { + return code; + } + + public ServiceException setMessage(String message) + { + this.message = message; + return this; + } + + public ServiceException setDetailMessage(String detailMessage) + { + this.detailMessage = detailMessage; + return this; + } +} diff --git a/xinda-common/src/main/java/com/xinda/common/exception/ServiceExceptionUtil.java b/xinda-common/src/main/java/com/xinda/common/exception/ServiceExceptionUtil.java new file mode 100644 index 0000000..11453ce --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/exception/ServiceExceptionUtil.java @@ -0,0 +1,125 @@ +package com.xinda.common.exception; + +import com.xinda.common.enums.GlobalErrorCodeConstants; +import com.google.common.annotations.VisibleForTesting; +import lombok.extern.slf4j.Slf4j; + +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.ConcurrentMap; + +/** + * {@link ServiceException} 工具类 + * + * 目的在于,格式化异常信息提示。 + * 考虑到 String.format 在参数不正确时会报错,因此使用 {} 作为占位符,并使用 {@link #doFormat(int, String, Object...)} 方法来格式化 + * + * 因为 {@link #MESSAGES} 里面默认是没有异常信息提示的模板的,所以需要使用方自己初始化进去。目前想到的有几种方式: + * + * 1. 异常提示信息,写在枚举类中,例如说,cn.iocoder.oceans.user.api.constants.ErrorCodeEnum 类 + ServiceExceptionConfiguration + * 2. 异常提示信息,写在 .properties 等等配置文件 + * 3. 异常提示信息,写在 Apollo 等等配置中心中,从而实现可动态刷新 + * 4. 异常提示信息,存储在 db 等等数据库中,从而实现可动态刷新 + */ +@Slf4j +public class ServiceExceptionUtil { + + /** + * 错误码提示模板 + */ + private static final ConcurrentMap MESSAGES = new ConcurrentHashMap<>(); + + public static void putAll(Map messages) { + ServiceExceptionUtil.MESSAGES.putAll(messages); + } + + public static void put(Integer code, String message) { + ServiceExceptionUtil.MESSAGES.put(code, message); + } + + public static void delete(Integer code, String message) { + ServiceExceptionUtil.MESSAGES.remove(code, message); + } + + // ========== 和 ServiceException 的集成 ========== + + public static ServiceException exception(ErrorCode errorCode) { + String messagePattern = MESSAGES.getOrDefault(errorCode.getCode(), errorCode.getMsg()); + return exception0(errorCode.getCode(), messagePattern); + } + + public static ServiceException exception(ErrorCode errorCode, Object... params) { + String messagePattern = MESSAGES.getOrDefault(errorCode.getCode(), errorCode.getMsg()); + return exception0(errorCode.getCode(), messagePattern, params); + } + + /** + * 创建指定编号的 ServiceException 的异常 + * + * @param code 编号 + * @return 异常 + */ + public static ServiceException exception(Integer code) { + return exception0(code, MESSAGES.get(code)); + } + + /** + * 创建指定编号的 ServiceException 的异常 + * + * @param code 编号 + * @param params 消息提示的占位符对应的参数 + * @return 异常 + */ + public static ServiceException exception(Integer code, Object... params) { + return exception0(code, MESSAGES.get(code), params); + } + + public static ServiceException exception0(Integer code, String messagePattern, Object... params) { + String message = doFormat(code, messagePattern, params); + return new ServiceException(code, message); + } + + public static ServiceException invalidParamException(String messagePattern, Object... params) { + return exception0(GlobalErrorCodeConstants.BAD_REQUEST.getCode(), messagePattern, params); + } + + // ========== 格式化方法 ========== + + /** + * 将错误编号对应的消息使用 params 进行格式化。 + * + * @param code 错误编号 + * @param messagePattern 消息模版 + * @param params 参数 + * @return 格式化后的提示 + */ + @VisibleForTesting + public static String doFormat(int code, String messagePattern, Object... params) { + StringBuilder sbuf = new StringBuilder(messagePattern.length() + 50); + int i = 0; + int j; + int l; + for (l = 0; l < params.length; l++) { + j = messagePattern.indexOf("{}", i); + if (j == -1) { + log.error("[doFormat][参数过多:错误码({})|错误内容({})|参数({})", code, messagePattern, params); + if (i == 0) { + return messagePattern; + } else { + sbuf.append(messagePattern.substring(i)); + return sbuf.toString(); + } + } else { + sbuf.append(messagePattern, i, j); + sbuf.append(params[l]); + i = j + 2; + } + } + if (messagePattern.indexOf("{}", i) != -1) { + log.error("[doFormat][参数过少:错误码({})|错误内容({})|参数({})", code, messagePattern, params); + } + sbuf.append(messagePattern.substring(i)); + return sbuf.toString(); + } + +} diff --git a/xinda-common/src/main/java/com/xinda/common/exception/UtilException.java b/xinda-common/src/main/java/com/xinda/common/exception/UtilException.java new file mode 100644 index 0000000..b0c001c --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/exception/UtilException.java @@ -0,0 +1,26 @@ +package com.xinda.common.exception; + +/** + * 工具类异常 + * + * @author ruoyi + */ +public class UtilException extends RuntimeException +{ + private static final long serialVersionUID = 8247610319171014183L; + + public UtilException(Throwable e) + { + super(e.getMessage(), e); + } + + public UtilException(String message) + { + super(message); + } + + public UtilException(String message, Throwable throwable) + { + super(message, throwable); + } +} diff --git a/xinda-common/src/main/java/com/xinda/common/exception/base/BaseException.java b/xinda-common/src/main/java/com/xinda/common/exception/base/BaseException.java new file mode 100644 index 0000000..d2a2d08 --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/exception/base/BaseException.java @@ -0,0 +1,97 @@ +package com.xinda.common.exception.base; + +import com.xinda.common.utils.MessageUtils; +import com.xinda.common.utils.StringUtils; + +/** + * 基础异常 + * + * @author ruoyi + */ +public class BaseException extends RuntimeException +{ + private static final long serialVersionUID = 1L; + + /** + * 所属模块 + */ + private String module; + + /** + * 错误码 + */ + private String code; + + /** + * 错误码对应的参数 + */ + private Object[] args; + + /** + * 错误消息 + */ + private String defaultMessage; + + public BaseException(String module, String code, Object[] args, String defaultMessage) + { + this.module = module; + this.code = code; + this.args = args; + this.defaultMessage = defaultMessage; + } + + public BaseException(String module, String code, Object[] args) + { + this(module, code, args, null); + } + + public BaseException(String module, String defaultMessage) + { + this(module, null, null, defaultMessage); + } + + public BaseException(String code, Object[] args) + { + this(null, code, args, null); + } + + public BaseException(String defaultMessage) + { + this(null, null, null, defaultMessage); + } + + @Override + public String getMessage() + { + String message = null; + if (!StringUtils.isEmpty(code)) + { + message = MessageUtils.message(code, args); + } + if (message == null) + { + message = defaultMessage; + } + return message; + } + + public String getModule() + { + return module; + } + + public String getCode() + { + return code; + } + + public Object[] getArgs() + { + return args; + } + + public String getDefaultMessage() + { + return defaultMessage; + } +} diff --git a/xinda-common/src/main/java/com/xinda/common/exception/file/FileException.java b/xinda-common/src/main/java/com/xinda/common/exception/file/FileException.java new file mode 100644 index 0000000..6448932 --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/exception/file/FileException.java @@ -0,0 +1,19 @@ +package com.xinda.common.exception.file; + +import com.xinda.common.exception.base.BaseException; + +/** + * 文件信息异常类 + * + * @author ruoyi + */ +public class FileException extends BaseException +{ + private static final long serialVersionUID = 1L; + + public FileException(String code, Object[] args) + { + super("file", code, args, null); + } + +} diff --git a/xinda-common/src/main/java/com/xinda/common/exception/file/FileNameLengthLimitExceededException.java b/xinda-common/src/main/java/com/xinda/common/exception/file/FileNameLengthLimitExceededException.java new file mode 100644 index 0000000..31780e9 --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/exception/file/FileNameLengthLimitExceededException.java @@ -0,0 +1,16 @@ +package com.xinda.common.exception.file; + +/** + * 文件名称超长限制异常类 + * + * @author ruoyi + */ +public class FileNameLengthLimitExceededException extends FileException +{ + private static final long serialVersionUID = 1L; + + public FileNameLengthLimitExceededException(int defaultFileNameLength) + { + super("upload.filename.exceed.length", new Object[] { defaultFileNameLength }); + } +} diff --git a/xinda-common/src/main/java/com/xinda/common/exception/file/FileSizeLimitExceededException.java b/xinda-common/src/main/java/com/xinda/common/exception/file/FileSizeLimitExceededException.java new file mode 100644 index 0000000..e24c450 --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/exception/file/FileSizeLimitExceededException.java @@ -0,0 +1,16 @@ +package com.xinda.common.exception.file; + +/** + * 文件名大小限制异常类 + * + * @author ruoyi + */ +public class FileSizeLimitExceededException extends FileException +{ + private static final long serialVersionUID = 1L; + + public FileSizeLimitExceededException(long defaultMaxSize) + { + super("upload.exceed.maxSize", new Object[] { defaultMaxSize }); + } +} diff --git a/xinda-common/src/main/java/com/xinda/common/exception/file/InvalidExtensionException.java b/xinda-common/src/main/java/com/xinda/common/exception/file/InvalidExtensionException.java new file mode 100644 index 0000000..281f81d --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/exception/file/InvalidExtensionException.java @@ -0,0 +1,81 @@ +package com.xinda.common.exception.file; + +import java.util.Arrays; +import org.apache.commons.fileupload.FileUploadException; + +/** + * 文件上传 误异常类 + * + * @author ruoyi + */ +public class InvalidExtensionException extends FileUploadException +{ + private static final long serialVersionUID = 1L; + + private String[] allowedExtension; + private String extension; + private String filename; + + public InvalidExtensionException(String[] allowedExtension, String extension, String filename) + { + super("文件[" + filename + "]后缀[" + extension + "]不正确,请上传" + Arrays.toString(allowedExtension) + "格式"); + this.allowedExtension = allowedExtension; + this.extension = extension; + this.filename = filename; + } + + public String[] getAllowedExtension() + { + return allowedExtension; + } + + public String getExtension() + { + return extension; + } + + public String getFilename() + { + return filename; + } + + public static class InvalidImageExtensionException extends InvalidExtensionException + { + private static final long serialVersionUID = 1L; + + public InvalidImageExtensionException(String[] allowedExtension, String extension, String filename) + { + super(allowedExtension, extension, filename); + } + } + + public static class InvalidFlashExtensionException extends InvalidExtensionException + { + private static final long serialVersionUID = 1L; + + public InvalidFlashExtensionException(String[] allowedExtension, String extension, String filename) + { + super(allowedExtension, extension, filename); + } + } + + public static class InvalidMediaExtensionException extends InvalidExtensionException + { + private static final long serialVersionUID = 1L; + + public InvalidMediaExtensionException(String[] allowedExtension, String extension, String filename) + { + super(allowedExtension, extension, filename); + } + } + + public static class InvalidVideoExtensionException extends InvalidExtensionException + { + private static final long serialVersionUID = 1L; + + public InvalidVideoExtensionException(String[] allowedExtension, String extension, String filename) + { + super(allowedExtension, extension, filename); + } + } +} diff --git a/xinda-common/src/main/java/com/xinda/common/exception/iot/MqttAuthorizationException.java b/xinda-common/src/main/java/com/xinda/common/exception/iot/MqttAuthorizationException.java new file mode 100644 index 0000000..ed231d6 --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/exception/iot/MqttAuthorizationException.java @@ -0,0 +1,17 @@ +package com.xinda.common.exception.iot; + +import com.xinda.common.exception.GlobalException; +import lombok.NoArgsConstructor; + +/** + * mqtt客户端权限校验异常 + * @author gsb + * @date 2022/10/8 14:11 + */ +@NoArgsConstructor +public class MqttAuthorizationException extends GlobalException { + + public MqttAuthorizationException(String messageId){ + super(messageId); + } +} diff --git a/xinda-common/src/main/java/com/xinda/common/exception/iot/MqttClientUserNameOrPassException.java b/xinda-common/src/main/java/com/xinda/common/exception/iot/MqttClientUserNameOrPassException.java new file mode 100644 index 0000000..68815de --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/exception/iot/MqttClientUserNameOrPassException.java @@ -0,0 +1,17 @@ +package com.xinda.common.exception.iot; + +import com.xinda.common.exception.GlobalException; +import lombok.NoArgsConstructor; + +/** + * mqtt客户端校验 用户名或密码错误 + * @author gsb + * @date 2022/10/8 14:15 + */ +@NoArgsConstructor +public class MqttClientUserNameOrPassException extends GlobalException { + + public MqttClientUserNameOrPassException(String message){ + super(message); + } +} diff --git a/xinda-common/src/main/java/com/xinda/common/exception/job/TaskException.java b/xinda-common/src/main/java/com/xinda/common/exception/job/TaskException.java new file mode 100644 index 0000000..d35ba61 --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/exception/job/TaskException.java @@ -0,0 +1,34 @@ +package com.xinda.common.exception.job; + +/** + * 计划策略异常 + * + * @author ruoyi + */ +public class TaskException extends Exception +{ + private static final long serialVersionUID = 1L; + + private Code code; + + public TaskException(String msg, Code code) + { + this(msg, code, null); + } + + public TaskException(String msg, Code code, Exception nestedEx) + { + super(msg, nestedEx); + this.code = code; + } + + public Code getCode() + { + return code; + } + + public enum Code + { + TASK_EXISTS, NO_TASK_EXISTS, TASK_ALREADY_STARTED, UNKNOWN, CONFIG_ERROR, TASK_NODE_NOT_AVAILABLE + } +} \ No newline at end of file diff --git a/xinda-common/src/main/java/com/xinda/common/exception/user/CaptchaException.java b/xinda-common/src/main/java/com/xinda/common/exception/user/CaptchaException.java new file mode 100644 index 0000000..806e00e --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/exception/user/CaptchaException.java @@ -0,0 +1,16 @@ +package com.xinda.common.exception.user; + +/** + * 验证码错误异常类 + * + * @author ruoyi + */ +public class CaptchaException extends UserException +{ + private static final long serialVersionUID = 1L; + + public CaptchaException() + { + super("user.jcaptcha.error", null); + } +} diff --git a/xinda-common/src/main/java/com/xinda/common/exception/user/CaptchaExpireException.java b/xinda-common/src/main/java/com/xinda/common/exception/user/CaptchaExpireException.java new file mode 100644 index 0000000..206e199 --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/exception/user/CaptchaExpireException.java @@ -0,0 +1,16 @@ +package com.xinda.common.exception.user; + +/** + * 验证码失效异常类 + * + * @author ruoyi + */ +public class CaptchaExpireException extends UserException +{ + private static final long serialVersionUID = 1L; + + public CaptchaExpireException() + { + super("user.jcaptcha.expire", null); + } +} diff --git a/xinda-common/src/main/java/com/xinda/common/exception/user/UserException.java b/xinda-common/src/main/java/com/xinda/common/exception/user/UserException.java new file mode 100644 index 0000000..81ce8ea --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/exception/user/UserException.java @@ -0,0 +1,18 @@ +package com.xinda.common.exception.user; + +import com.xinda.common.exception.base.BaseException; + +/** + * 用户信息异常类 + * + * @author ruoyi + */ +public class UserException extends BaseException +{ + private static final long serialVersionUID = 1L; + + public UserException(String code, Object[] args) + { + super("user", code, args, null); + } +} diff --git a/xinda-common/src/main/java/com/xinda/common/exception/user/UserPasswordNotMatchException.java b/xinda-common/src/main/java/com/xinda/common/exception/user/UserPasswordNotMatchException.java new file mode 100644 index 0000000..cb13ef1 --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/exception/user/UserPasswordNotMatchException.java @@ -0,0 +1,16 @@ +package com.xinda.common.exception.user; + +/** + * 用户密码不正确或不符合规范异常类 + * + * @author ruoyi + */ +public class UserPasswordNotMatchException extends UserException +{ + private static final long serialVersionUID = 1L; + + public UserPasswordNotMatchException() + { + super("user.password.not.match", null); + } +} diff --git a/xinda-common/src/main/java/com/xinda/common/exception/user/UserPasswordRetryLimitExceedException.java b/xinda-common/src/main/java/com/xinda/common/exception/user/UserPasswordRetryLimitExceedException.java new file mode 100644 index 0000000..9ef06bc --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/exception/user/UserPasswordRetryLimitExceedException.java @@ -0,0 +1,16 @@ +package com.xinda.common.exception.user; + +/** + * 用户错误最大次数异常类 + * + * @author ruoyi + */ +public class UserPasswordRetryLimitExceedException extends UserException +{ + private static final long serialVersionUID = 1L; + + public UserPasswordRetryLimitExceedException(int retryLimitCount, int lockTime) + { + super("user.password.retry.limit.exceed", new Object[] { retryLimitCount, lockTime }); + } +} diff --git a/xinda-common/src/main/java/com/xinda/common/filter/PropertyPreExcludeFilter.java b/xinda-common/src/main/java/com/xinda/common/filter/PropertyPreExcludeFilter.java new file mode 100644 index 0000000..b753e9c --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/filter/PropertyPreExcludeFilter.java @@ -0,0 +1,24 @@ +package com.xinda.common.filter; + +import com.alibaba.fastjson2.filter.SimplePropertyPreFilter; + +/** + * 排除JSON敏感属性 + * + * @author ruoyi + */ +public class PropertyPreExcludeFilter extends SimplePropertyPreFilter +{ + public PropertyPreExcludeFilter() + { + } + + public PropertyPreExcludeFilter addExcludes(String... filters) + { + for (int i = 0; i < filters.length; i++) + { + this.getExcludes().add(filters[i]); + } + return this; + } +} diff --git a/xinda-common/src/main/java/com/xinda/common/filter/RepeatableFilter.java b/xinda-common/src/main/java/com/xinda/common/filter/RepeatableFilter.java new file mode 100644 index 0000000..26522fe --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/filter/RepeatableFilter.java @@ -0,0 +1,52 @@ +package com.xinda.common.filter; + +import java.io.IOException; +import javax.servlet.Filter; +import javax.servlet.FilterChain; +import javax.servlet.FilterConfig; +import javax.servlet.ServletException; +import javax.servlet.ServletRequest; +import javax.servlet.ServletResponse; +import javax.servlet.http.HttpServletRequest; +import org.springframework.http.MediaType; +import com.xinda.common.utils.StringUtils; + +/** + * Repeatable 过滤器 + * + * @author ruoyi + */ +public class RepeatableFilter implements Filter +{ + @Override + public void init(FilterConfig filterConfig) throws ServletException + { + + } + + @Override + public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) + throws IOException, ServletException + { + ServletRequest requestWrapper = null; + if (request instanceof HttpServletRequest + && StringUtils.startsWithIgnoreCase(request.getContentType(), MediaType.APPLICATION_JSON_VALUE)) + { + requestWrapper = new RepeatedlyRequestWrapper((HttpServletRequest) request, response); + } + if (null == requestWrapper) + { + chain.doFilter(request, response); + } + else + { + chain.doFilter(requestWrapper, response); + } + } + + @Override + public void destroy() + { + + } +} diff --git a/xinda-common/src/main/java/com/xinda/common/filter/RepeatedlyRequestWrapper.java b/xinda-common/src/main/java/com/xinda/common/filter/RepeatedlyRequestWrapper.java new file mode 100644 index 0000000..0193d9b --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/filter/RepeatedlyRequestWrapper.java @@ -0,0 +1,76 @@ +package com.xinda.common.filter; + +import java.io.BufferedReader; +import java.io.ByteArrayInputStream; +import java.io.IOException; +import java.io.InputStreamReader; +import javax.servlet.ReadListener; +import javax.servlet.ServletInputStream; +import javax.servlet.ServletResponse; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletRequestWrapper; +import com.xinda.common.utils.http.HttpHelper; +import com.xinda.common.constant.Constants; + +/** + * 构建可重复读取inputStream的request + * + * @author ruoyi + */ +public class RepeatedlyRequestWrapper extends HttpServletRequestWrapper +{ + private final byte[] body; + + public RepeatedlyRequestWrapper(HttpServletRequest request, ServletResponse response) throws IOException + { + super(request); + request.setCharacterEncoding(Constants.UTF8); + response.setCharacterEncoding(Constants.UTF8); + + body = HttpHelper.getBodyString(request).getBytes(Constants.UTF8); + } + + @Override + public BufferedReader getReader() throws IOException + { + return new BufferedReader(new InputStreamReader(getInputStream())); + } + + @Override + public ServletInputStream getInputStream() throws IOException + { + final ByteArrayInputStream bais = new ByteArrayInputStream(body); + return new ServletInputStream() + { + @Override + public int read() throws IOException + { + return bais.read(); + } + + @Override + public int available() throws IOException + { + return body.length; + } + + @Override + public boolean isFinished() + { + return false; + } + + @Override + public boolean isReady() + { + return false; + } + + @Override + public void setReadListener(ReadListener readListener) + { + + } + }; + } +} diff --git a/xinda-common/src/main/java/com/xinda/common/filter/XssFilter.java b/xinda-common/src/main/java/com/xinda/common/filter/XssFilter.java new file mode 100644 index 0000000..45b6d52 --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/filter/XssFilter.java @@ -0,0 +1,75 @@ +package com.xinda.common.filter; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; +import javax.servlet.Filter; +import javax.servlet.FilterChain; +import javax.servlet.FilterConfig; +import javax.servlet.ServletException; +import javax.servlet.ServletRequest; +import javax.servlet.ServletResponse; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import com.xinda.common.utils.StringUtils; +import com.xinda.common.enums.HttpMethod; + +/** + * 防止XSS攻击的过滤器 + * + * @author ruoyi + */ +public class XssFilter implements Filter +{ + /** + * 排除链接 + */ + public List excludes = new ArrayList<>(); + + @Override + public void init(FilterConfig filterConfig) throws ServletException + { + String tempExcludes = filterConfig.getInitParameter("excludes"); + if (StringUtils.isNotEmpty(tempExcludes)) + { + String[] url = tempExcludes.split(","); + for (int i = 0; url != null && i < url.length; i++) + { + excludes.add(url[i]); + } + } + } + + @Override + public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) + throws IOException, ServletException + { + HttpServletRequest req = (HttpServletRequest) request; + HttpServletResponse resp = (HttpServletResponse) response; + if (handleExcludeURL(req, resp)) + { + chain.doFilter(request, response); + return; + } + XssHttpServletRequestWrapper xssRequest = new XssHttpServletRequestWrapper((HttpServletRequest) request); + chain.doFilter(xssRequest, response); + } + + private boolean handleExcludeURL(HttpServletRequest request, HttpServletResponse response) + { + String url = request.getServletPath(); + String method = request.getMethod(); + // GET DELETE 不过滤 + if (method == null || HttpMethod.GET.matches(method) || HttpMethod.DELETE.matches(method)) + { + return true; + } + return StringUtils.matches(url, excludes); + } + + @Override + public void destroy() + { + + } +} \ No newline at end of file diff --git a/xinda-common/src/main/java/com/xinda/common/filter/XssHttpServletRequestWrapper.java b/xinda-common/src/main/java/com/xinda/common/filter/XssHttpServletRequestWrapper.java new file mode 100644 index 0000000..1a1247c --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/filter/XssHttpServletRequestWrapper.java @@ -0,0 +1,111 @@ +package com.xinda.common.filter; + +import java.io.ByteArrayInputStream; +import java.io.IOException; +import javax.servlet.ReadListener; +import javax.servlet.ServletInputStream; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletRequestWrapper; +import org.apache.commons.io.IOUtils; +import org.springframework.http.HttpHeaders; +import org.springframework.http.MediaType; +import com.xinda.common.utils.StringUtils; +import com.xinda.common.utils.html.EscapeUtil; + +/** + * XSS过滤处理 + * + * @author ruoyi + */ +public class XssHttpServletRequestWrapper extends HttpServletRequestWrapper +{ + /** + * @param request + */ + public XssHttpServletRequestWrapper(HttpServletRequest request) + { + super(request); + } + + @Override + public String[] getParameterValues(String name) + { + String[] values = super.getParameterValues(name); + if (values != null) + { + int length = values.length; + String[] escapesValues = new String[length]; + for (int i = 0; i < length; i++) + { + // 防xss攻击和过滤前后空格 + escapesValues[i] = EscapeUtil.clean(values[i]).trim(); + } + return escapesValues; + } + return super.getParameterValues(name); + } + + @Override + public ServletInputStream getInputStream() throws IOException + { + // 非json类型,直接返回 + if (!isJsonRequest()) + { + return super.getInputStream(); + } + + // 为空,直接返回 + String json = IOUtils.toString(super.getInputStream(), "utf-8"); + if (StringUtils.isEmpty(json)) + { + return super.getInputStream(); + } + + // xss过滤 + json = EscapeUtil.clean(json).trim(); + byte[] jsonBytes = json.getBytes("utf-8"); + final ByteArrayInputStream bis = new ByteArrayInputStream(jsonBytes); + return new ServletInputStream() + { + @Override + public boolean isFinished() + { + return true; + } + + @Override + public boolean isReady() + { + return true; + } + + @Override + public int available() throws IOException + { + return jsonBytes.length; + } + + @Override + public void setReadListener(ReadListener readListener) + { + } + + @Override + public int read() throws IOException + { + return bis.read(); + } + }; + } + + /** + * 是否是Json请求 + * + * @param request + */ + public boolean isJsonRequest() + { + String header = super.getHeader(HttpHeaders.CONTENT_TYPE); + return StringUtils.startsWithIgnoreCase(header, MediaType.APPLICATION_JSON_VALUE); + } +} \ No newline at end of file diff --git a/xinda-common/src/main/java/com/xinda/common/utils/Arith.java b/xinda-common/src/main/java/com/xinda/common/utils/Arith.java new file mode 100644 index 0000000..d808461 --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/utils/Arith.java @@ -0,0 +1,114 @@ +package com.xinda.common.utils; + +import java.math.BigDecimal; +import java.math.RoundingMode; + +/** + * 精确的浮点数运算 + * + * @author ruoyi + */ +public class Arith +{ + + /** 默认除法运算精度 */ + private static final int DEF_DIV_SCALE = 10; + + /** 这个类不能实例化 */ + private Arith() + { + } + + /** + * 提供精确的加法运算。 + * @param v1 被加数 + * @param v2 加数 + * @return 两个参数的和 + */ + public static double add(double v1, double v2) + { + BigDecimal b1 = new BigDecimal(Double.toString(v1)); + BigDecimal b2 = new BigDecimal(Double.toString(v2)); + return b1.add(b2).doubleValue(); + } + + /** + * 提供精确的减法运算。 + * @param v1 被减数 + * @param v2 减数 + * @return 两个参数的差 + */ + public static double sub(double v1, double v2) + { + BigDecimal b1 = new BigDecimal(Double.toString(v1)); + BigDecimal b2 = new BigDecimal(Double.toString(v2)); + return b1.subtract(b2).doubleValue(); + } + + /** + * 提供精确的乘法运算。 + * @param v1 被乘数 + * @param v2 乘数 + * @return 两个参数的积 + */ + public static double mul(double v1, double v2) + { + BigDecimal b1 = new BigDecimal(Double.toString(v1)); + BigDecimal b2 = new BigDecimal(Double.toString(v2)); + return b1.multiply(b2).doubleValue(); + } + + /** + * 提供(相对)精确的除法运算,当发生除不尽的情况时,精确到 + * 小数点以后10位,以后的数字四舍五入。 + * @param v1 被除数 + * @param v2 除数 + * @return 两个参数的商 + */ + public static double div(double v1, double v2) + { + return div(v1, v2, DEF_DIV_SCALE); + } + + /** + * 提供(相对)精确的除法运算。当发生除不尽的情况时,由scale参数指 + * 定精度,以后的数字四舍五入。 + * @param v1 被除数 + * @param v2 除数 + * @param scale 表示表示需要精确到小数点以后几位。 + * @return 两个参数的商 + */ + public static double div(double v1, double v2, int scale) + { + if (scale < 0) + { + throw new IllegalArgumentException( + "The scale must be a positive integer or zero"); + } + BigDecimal b1 = new BigDecimal(Double.toString(v1)); + BigDecimal b2 = new BigDecimal(Double.toString(v2)); + if (b1.compareTo(BigDecimal.ZERO) == 0) + { + return BigDecimal.ZERO.doubleValue(); + } + return b1.divide(b2, scale, RoundingMode.HALF_UP).doubleValue(); + } + + /** + * 提供精确的小数位四舍五入处理。 + * @param v 需要四舍五入的数字 + * @param scale 小数点后保留几位 + * @return 四舍五入后的结果 + */ + public static double round(double v, int scale) + { + if (scale < 0) + { + throw new IllegalArgumentException( + "The scale must be a positive integer or zero"); + } + BigDecimal b = new BigDecimal(Double.toString(v)); + BigDecimal one = BigDecimal.ONE; + return b.divide(one, scale, RoundingMode.HALF_UP).doubleValue(); + } +} diff --git a/xinda-common/src/main/java/com/xinda/common/utils/Base64ToMultipartFile.java b/xinda-common/src/main/java/com/xinda/common/utils/Base64ToMultipartFile.java new file mode 100644 index 0000000..68c02cf --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/utils/Base64ToMultipartFile.java @@ -0,0 +1,80 @@ +package com.xinda.common.utils; + +import org.springframework.web.multipart.MultipartFile; + +import java.io.*; +import java.nio.charset.StandardCharsets; +import java.util.Base64; + +/** + * @author fastb + * @version 1.0 + * @description: TODO + * @date 2023-12-26 9:27 + */ +public class Base64ToMultipartFile implements MultipartFile { + private final byte[] fileContent; + + private final String extension; + private final String contentType; + + + /** + * @param base64 + * @param dataUri 格式类似于: data:image/png;base64 + */ + public Base64ToMultipartFile(String base64, String dataUri) { + this.fileContent = Base64.getDecoder().decode(base64.getBytes(StandardCharsets.UTF_8)); + this.extension = dataUri.split(";")[0].split("/")[1]; + this.contentType = dataUri.split(";")[0].split(":")[1]; + } + + public Base64ToMultipartFile(String base64, String extension, String contentType) { + this.fileContent = Base64.getDecoder().decode(base64.getBytes(StandardCharsets.UTF_8)); + this.extension = extension; + this.contentType = contentType; + } + + @Override + public String getName() { + return "param_" + System.currentTimeMillis(); + } + + @Override + public String getOriginalFilename() { + return "file_" + System.currentTimeMillis() + "." + extension; + } + + @Override + public String getContentType() { + return contentType; + } + + @Override + public boolean isEmpty() { + return fileContent == null || fileContent.length == 0; + } + + @Override + public long getSize() { + return fileContent.length; + } + + @Override + public byte[] getBytes() throws IOException { + return fileContent; + } + + @Override + public InputStream getInputStream() throws IOException { + return new ByteArrayInputStream(fileContent); + } + + @Override + public void transferTo(File file) throws IOException, IllegalStateException { + try (FileOutputStream fos = new FileOutputStream(file)) { + fos.write(fileContent); + } + } + +} diff --git a/xinda-common/src/main/java/com/xinda/common/utils/BeanMapUtilByReflect.java b/xinda-common/src/main/java/com/xinda/common/utils/BeanMapUtilByReflect.java new file mode 100644 index 0000000..c3fac2c --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/utils/BeanMapUtilByReflect.java @@ -0,0 +1,73 @@ +package com.xinda.common.utils; + +import com.xinda.common.core.thingsModel.ThingsModelSimpleItem; + +import java.lang.reflect.Field; +import java.lang.reflect.Modifier; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +public class BeanMapUtilByReflect { + + /** + * 对象转Map + * @param object + * @return + * @throws IllegalAccessException + */ + public static Map beanToMap(Object object) throws IllegalAccessException { + Map map = new HashMap(); + Field[] fields = object.getClass().getDeclaredFields(); + for (Field field : fields) { + field.setAccessible(true); + map.put(field.getName(), field.get(object)); + } + return map; + } + + /** + * bean转item对象 + * @param object + * @return + * @throws IllegalAccessException + */ + public static List beanToItem(Object object) throws IllegalAccessException { + List result = new ArrayList<>(); + Field[] fields = object.getClass().getDeclaredFields(); + for (Field field : fields) { + field.setAccessible(true); + ThingsModelSimpleItem item = new ThingsModelSimpleItem(); + item.setId(field.getName()); + item.setValue(field.get(object)+""); + item.setTs(DateUtils.getNowDate()); + result.add(item); + } + return result; + } + + /** + * map转对象 + * @param map + * @param beanClass + * @param + * @return + * @throws Exception + */ + public static T mapToBean(Map map, Class beanClass) throws Exception { + T object = beanClass.newInstance(); + Field[] fields = object.getClass().getDeclaredFields(); + for (Field field : fields) { + int mod = field.getModifiers(); + if (Modifier.isStatic(mod) || Modifier.isFinal(mod)) { + continue; + } + field.setAccessible(true); + if (map.containsKey(field.getName())) { + field.set(object, map.get(field.getName())); + } + } + return object; + } +} \ No newline at end of file diff --git a/xinda-common/src/main/java/com/xinda/common/utils/BitUtils.java b/xinda-common/src/main/java/com/xinda/common/utils/BitUtils.java new file mode 100644 index 0000000..31ceead --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/utils/BitUtils.java @@ -0,0 +1,276 @@ +package com.xinda.common.utils; + +import java.util.Arrays; + +/** + * + * @description 位运算工具 + * 用途:将二进制数中的每位数字1或0代表着某种开关标记,1为是,0为否,则一个数字可以代表N位的开关标记值,可有效减少过多的变量定义 或 过多的表字段 + */ +public class BitUtils { + + /** + * 获取二进制数字中指定位数的结果,如:1011,指定第2位,则结果是0,第3位,则结果是1 + * + * @param num 二进制数(可以十进制数传入,也可使用0b开头的二进制数表示形式) + * @param bit 位数(第几位,从右往左,从0开始) + * @return + */ + public static int getBitFlag(long num, int bit) { + return (int) num >> bit & 1; + } + + /** + * 更新二进制数字中指定位的值 + * + * @param num 二进制数(可以十进制数传入,也可使用0b开头的二进制数表示形式) + * @param bit 位数(第几位,从右往左,从0开始) + * @param flagValue 位标记值(true=1,false=0) + * @return + */ + public static long updateBitValue(long num, int bit, boolean flagValue) { + if (flagValue) { + //将某位由0改为1 + return num | (1 << bit); + } else { + //将某位由1改为0 + return num ^ (getBitFlag(num, bit) << bit); + } + } + + /** + * 将数字转换为二制值形式字符串 + * + * @param num + * @return + */ + public static String toBinaryString(long num) { + return Long.toBinaryString(num); + } + + /** + * 判断10进制数,某位是0还是1 + * @param num + * @param i + * @return + */ + public static int deter(int num, int i) { + // 先将数字右移指定第i位,然后再用&与1运算 + return num >> (i-1) & 1; + } + + public static String bin2hex(String input) { + StringBuilder sb = new StringBuilder(); + int len = input.length(); + System.out.println("原数据长度:" + (len / 8) + "字节"); + + for (int i = 0; i < len / 4; i++){ + //每4个二进制位转换为1个十六进制位 + String temp = input.substring(i * 4, (i + 1) * 4); + int tempInt = Integer.parseInt(temp, 2); + String tempHex = Integer.toHexString(tempInt).toUpperCase(); + sb.append(tempHex); + } + + return sb.toString(); + } + public static int bin2Dec(String binaryString){ + int sum = 0; + for(int i = 0;i < binaryString.length();i++){ + char ch = binaryString.charAt(i); + if(ch > '2' || ch < '0') + throw new NumberFormatException(String.valueOf(i)); + sum = sum * 2 + (binaryString.charAt(i) - '0'); + } + return sum; + } + + public static int[] string2Ins(String input) { + StringBuilder in = new StringBuilder(input); + int remainder = in.length() % 8; + if (remainder > 0) + for (int i = 0; i < 8 - remainder; i++) + in.append("0"); + int[] result = new int[in.length() /8]; + + // Step 8 Apply compression + for (int i = 0; i < result.length; i++) + result[i] = Integer.parseInt(in.substring(i * 8, i * 8 + 8), 2); + + return result; + } + public static byte[] string2bytes(String input) { + StringBuilder in = new StringBuilder(input); + int remainder = in.length() % 8; + if (remainder > 0) + for (int i = 0; i < 8 - remainder; i++) + in.insert(0,"0"); + byte[] bts = new byte[in.length() / 8]; + + // Step 8 Apply compression + for (int i = 0; i < bts.length; i++) + bts[i] = (byte) Integer.parseInt(in.substring(i * 8, i * 8 + 8), 2); + + return bts; + } + + /** + * 取得十制数组的from~to位,并按照十六进制转化值 + * + * @param data + * @param from + * @param to + * @return + */ + private static String getOctFromHexBytes(byte[] data, Object from, Object... to) { + if (data != null && data.length > 0 && from != null) { + try { + byte[] value; + int fromIndex = Integer.parseInt(from.toString()); + if (to != null && to.length > 0) { + int toIndex = Integer.parseInt(to[0].toString()); + if (fromIndex >= toIndex || toIndex <= 0) { + value = Arrays.copyOfRange(data, fromIndex, fromIndex + 1); + } else { + value = Arrays.copyOfRange(data, fromIndex, toIndex + 1); + } + } else { + value = Arrays.copyOfRange(data, fromIndex, fromIndex + 1); + } + if (value != null && value.length > 0) { + long octValue = 0L; + int j = -1; + for (int i = value.length - 1; i >= 0; i--, j++) { + int d = value[i]; + if (d < 0) { + d += 256; + } + octValue += Math.round(d * Math.pow(16, 2 * j + 2)); + } + return new Long(octValue).toString(); + } + } catch (Exception e) { + e.printStackTrace(); + } + } + return null; + } + + /** + * 十进制的字符串表示转成字节数组 + * + * @param octString + * 十进制格式的字符串 + * @param capacity + * 需要填充的容量(可选) + * @return 转换后的字节数组 + **/ + private static byte[] octInt2ByteArray(Integer oct, int... capacity) { + return hexString2ByteArray(Integer.toHexString(oct), capacity); + } + /** + * 16进制的字符串表示转成字节数组 + * + * @param hexString + * 16进制格式的字符串 + * @param capacity + * 需要填充的容量(可选) + * @return 转换后的字节数组 + **/ + private static byte[] hexString2ByteArray(String hexString, int... capacity) { + hexString = hexString.toLowerCase(); + if (hexString.length() % 2 != 0) { + hexString = "0" + hexString; + } + int length = hexString.length() / 2; + if (length < 1) { + length = 1; + } + int size = length; + if (capacity != null && capacity.length > 0 && capacity[0] >= length) { + size = capacity[0]; + } + final byte[] byteArray = new byte[size]; + int k = 0; + for (int i = 0; i < size; i++) { + if (i < size - length) { + byteArray[i] = 0; + } else { + byte high = (byte) (Character.digit(hexString.charAt(k), 16) & 0xff); + if (k + 1 < hexString.length()) { + byte low = (byte) (Character.digit(hexString.charAt(k + 1), 16) & 0xff); + byteArray[i] = (byte) (high << 4 | low); + } else { + byteArray[i] = (byte) (high); + } + k += 2; + } + } + return byteArray; + + } + + /** + * 连接字节流 + * + * @return + */ + private static byte[] append(byte[] datas, byte[] data) { + if (datas == null) { + return data; + } + if (data == null) { + return datas; + } else { + return concat(datas, data); + } + } + + /** + * 字节流拼接 + * + * @param data + * 字节流 + * @return 拼接后的字节数组 + **/ + private static byte[] concat(byte[]... data) { + if (data != null && data.length > 0) { + int size = 0; + for (int i = 0; i < data.length; i++) { + size += data[i].length; + } + byte[] byteArray = new byte[size]; + int pos = 0; + for (int i = 0; i < data.length; i++) { + byte[] b = data[i]; + for (int j = 0; j < b.length; j++) { + byteArray[pos++] = b[j]; + } + } + return byteArray; + } + return null; + } + + public static byte[] hexStringToByteArray(String s) { + int len = s.length(); + byte[] data = new byte[len / 2]; + for (int i = 0; i < len; i += 2) { + data[i / 2] = (byte) ((Character.digit(s.charAt(i), 16) << 4) + + Character.digit(s.charAt(i+1), 16)); + } + return data; + } + + + + + public static void main(String[] args) { + String s = bin2hex("1111111000000000"); + int i = bin2Dec("1111111000000000"); + byte[] ints = string2bytes("111111000000000"); + System.out.println(s); + System.out.println(i); + } + +} diff --git a/xinda-common/src/main/java/com/xinda/common/utils/CaculateUtils.java b/xinda-common/src/main/java/com/xinda/common/utils/CaculateUtils.java new file mode 100644 index 0000000..a795d28 --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/utils/CaculateUtils.java @@ -0,0 +1,438 @@ +package com.xinda.common.utils; + +import com.xinda.common.enums.ModbusDataType; +import com.xinda.common.exception.ServiceException; +import io.netty.buffer.ByteBufUtil; +import org.apache.commons.codec.binary.Hex; + +import java.io.ByteArrayInputStream; +import java.io.DataInputStream; +import java.io.IOException; +import java.math.BigDecimal; +import java.nio.ByteBuffer; +import java.nio.ByteOrder; +import java.nio.charset.StandardCharsets; +import java.text.DecimalFormat; +import java.util.*; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +/** + * 字符串公式计算工具 + */ +public class CaculateUtils { + + /** + * /* + * 暂时只支持加减乘除及括号的应用 + */ + private static final String symbol = "+-,*/,(),%"; + + + /** + * 公式计算 字符串 + * + * @param exeStr + */ + public static BigDecimal execute(String exeStr, Map replaceMap) { + //替换掉占位符 + exeStr = caculateReplace(exeStr, replaceMap); + exeStr = exeStr.replaceAll("\\s*", ""); + List suffixList = suffixHandle(exeStr); + return caculateAnalyse(suffixList); + + } + + /** + * 公式计算 后序list + * + * @param suffixList + * @return + */ + public static BigDecimal caculateAnalyse(List suffixList) { + + BigDecimal a = BigDecimal.ZERO; + BigDecimal b = BigDecimal.ZERO; + // 构建一个操作数栈 每当获得操作符号时取出最上面两个数进行计算。 + Stack caculateStack = new Stack(); + if (suffixList.size() > 1) { + + for (int i = 0; i < suffixList.size(); i++) { + String temp = suffixList.get(i); + if (symbol.contains(temp)) { + b = caculateStack.pop(); + a = caculateStack.pop(); + a = caculate(a, b, temp.toCharArray()[0]); + caculateStack.push(a); + } else { + if (isNumber(suffixList.get(i))) { + caculateStack.push(new BigDecimal(suffixList.get(i))); + } else { + throw new RuntimeException("公式异常!"); + } + } + } + } else if (suffixList.size() == 1) { + String temp = suffixList.get(0); + if (isNumber(temp)) { + a = BigDecimal.valueOf(Double.parseDouble(temp)); + } else { + throw new RuntimeException("公式异常!"); + } + } + return a; + } + + + /** + * 计算 使用double 进行计算 如果需要可以在这里使用bigdecimal 进行计算 + * + * @param a + * @param b + * @param symbol + * @return + */ + public static BigDecimal caculate(BigDecimal a, BigDecimal b, char symbol) { + switch (symbol) { + case '+': { + return a.add(b).stripTrailingZeros(); + } + case '-': + return a.subtract(b).stripTrailingZeros(); + case '*': + return a.multiply(b); + case '/': + return a.divide(b); + case '%': + // 取余,如果不包含小数点,下面length处理会报错,这里做个处理 + if (!b.toString().contains(".0")) { + b = new BigDecimal(b + ".0"); + } + int length = b.toString().split("\\.")[1].length(); + return a.divide(b, length, BigDecimal.ROUND_HALF_UP); + default: + throw new RuntimeException("操作符号异常!"); + } + + } + + /** + * 字符串直接 转 后序 + */ + public static List suffixHandle(String exeStr) { + StringBuilder buf = new StringBuilder(); + Stack stack = new Stack(); + char[] exeChars = exeStr.toCharArray(); + List res = new ArrayList(); + for (char x : exeChars) { + // 判断是不是操作符号 + if (symbol.indexOf(x) > -1) { + // 不管怎样先将数据添加进列表 + if (buf.length() > 0) { + // 添加数据到res + String temp = buf.toString(); + // 验证是否为数 + if (!isNumber(temp)) throw new RuntimeException(buf.append(" 格式不对").toString()); + + // 添加到结果列表中 + res.add(temp); + // 清空临时buf + buf.delete(0, buf.length()); + } + if (stack.size() > 0) { + + //2.判断是不是开是括号 + if (x == '(') { + stack.push(x); + continue; + } + //3.判断是不是闭合括号 + if (x == ')') { + while (stack.size() > 0) { + char con = (char) stack.peek(); + if (con == '(') { + stack.pop(); + continue; + } else { + res.add(String.valueOf(stack.pop())); + } + } + continue; + } + // 取出最后最近的一个操作符 + char last = (char) stack.peek(); + if (compare(x, last) > 0) { + stack.push(x); + } else if (compare(x, last) <= 0) { + if (last != '(') { + res.add(String.valueOf(stack.pop())); + } + stack.push(x); + } + } else { + stack.push(x); + } + } else { + buf.append(x); + } + } + if (buf.length() > 0) res.add(buf.toString()); + while (stack.size() > 0) { + res.add(String.valueOf(stack.pop())); + } + return res; + + } + + + /** + * 比较两个操作符号的优先级 + * + * @param a + * @param b + * @return + */ + public static int compare(char a, char b) { + if (symbol.indexOf(a) - symbol.indexOf(b) > 1) { + return 1; + } else if (symbol.indexOf(a) - symbol.indexOf(b) < -1) { + return -1; + } else { + return 0; + } + } + + + /** + * 判断是否为数 字符串 + * + * @param str + * @return + */ + public static boolean isNumber(String str) { + Pattern pattern = Pattern.compile("[0-9]+\\.{0,1}[0-9]*"); + Matcher isNum = pattern.matcher(str); + return isNum.matches(); + } + + public static String caculateReplace(String str, Map map) { + for (Map.Entry entry : map.entrySet()) { + str = str.replaceAll(entry.getKey(), entry.getValue()==null ? "1" : entry.getValue()); + } + return str; + } + + public static String toFloat(byte[] bytes) throws IOException { + ByteArrayInputStream mByteArrayInputStream = new ByteArrayInputStream(bytes); + DataInputStream mDataInputStream = new DataInputStream(mByteArrayInputStream); + try { + float v = mDataInputStream.readFloat(); + return String.format("%.6f",v); + }catch (Exception e){ + throw new ServiceException("modbus16转浮点数错误"); + } + finally { + mDataInputStream.close(); + mByteArrayInputStream.close(); + } + } + + public static String handleToUnSign16(String value,String dataType){ + long l = Long.parseLong(value); + if (dataType.equals(ModbusDataType.U_SHORT.getType())){ + return toUnSign16(l); + }else { + return value; + } + } + + /** + * 转16位无符号整形 + * @param value + * @return + */ + public static String toUnSign16(long value) { + long unSigned = value & 0xFFFF; + return unSigned +""; // 将字节数组转换为十六进制字符串 + } + + /** + * 32位有符号CDAB数据类型 + * @param value + * @return + */ + public static String toSign32_CDAB(long value) { + byte[] bytes = intToBytes2((int) value); + return bytesToInt2(bytes)+""; + } + + /** + * 32位无符号ABCD数据类型 + * @param value + * @return + */ + public static String toUnSign32_ABCD(long value) { + return Integer.toUnsignedString((int) value); + } + + /** + * 32位无符号CDAB数据类型 + * @param value + * @return + */ + public static String toUnSign32_CDAB(long value) { + byte[] bytes = intToBytes2((int) value); + int val = bytesToInt2(bytes); + return Integer.toUnsignedString(val); + } + + /** + * 转32位浮点数 ABCD + * @param bytes + * @return + */ + public static float toFloat32_ABCD(byte[] bytes) { + int intValue = (bytes[0] << 24) | ((bytes[1] & 0xFF) << 16) | ((bytes[2] & 0xFF) << 8) | (bytes[3] & 0xFF); + return Float.intBitsToFloat(intValue); + } + + /** + * 转32位浮点数 CDAB + * @param bytes + * @return + */ + public static Float toFloat32_CDAB(byte[] bytes) { + int intValue = ((bytes[2] & 0xFF) << 24) | ((bytes[3] & 0xFF) << 16) | ((bytes[0] & 0xFF) << 8) | ((bytes[1] & 0xFF)) ; + return Float.intBitsToFloat(intValue); + } + + /** + * MODBUS数据类型转换 + * + * @param dataType 数据类型 + * @param hexString + * @return + */ + public static String parseValue(String dataType, String hexString) { + String value = ""; + Long val = Long.parseLong(hexString, 16); + byte[] bytes = ByteBufUtil.decodeHexDump(hexString); + if (StringUtils.isNotEmpty(dataType)) { + ModbusDataType type = ModbusDataType.convert(dataType); + switch (type) { + case U_SHORT: + value = CaculateUtils.toUnSign16(val); + break; + case SHORT: + case LONG_ABCD: + value = val + ""; + break; + case LONG_CDAB: + value = CaculateUtils.toSign32_CDAB(val); + break; + case U_LONG_ABCD: + value = CaculateUtils.toUnSign32_ABCD(val); + break; + case U_LONG_CDAB: + value = CaculateUtils.toUnSign32_CDAB(val); + break; + case FLOAT_ABCD: + value = CaculateUtils.toFloat32_ABCD(bytes) + ""; + break; + case FLOAT_CDAB: + value = CaculateUtils.toFloat32_CDAB(bytes) + ""; + break; + } + } + return value; + } + + + /** + * byte数组中取int数值,本方法适用于(低位在后,高位在前)的顺序。和intToBytes2()配套使用 + */ + public static int bytesToInt2(byte[] src) { + return (((src[2] & 0xFF) << 24) | ((src[3] & 0xFF) << 16) | ((src[0] & 0xFF) << 8) | (src[1] & 0xFF)); + } + + /** + * 将int数值转换为占四个字节的byte数组,本方法适用于(高位在前,低位在后)的顺序。 和bytesToInt2()配套使用 + */ + public static byte[] intToBytes2(int value) { + byte[] src = new byte[4]; + src[0] = (byte) ((value >> 24) & 0xFF); + src[1] = (byte) ((value >> 16) & 0xFF); + src[2] = (byte) ((value >> 8) & 0xFF); + src[3] = (byte) (value & 0xFF); + return src; + } + + public static String subHexValue(String hexString){ + //截取报文中的值 + String substring = hexString.substring(4, 6); + int index = Integer.parseInt(substring); + return hexString.substring(6, 6 + index*2); + } + + + public static void main(String[] args) throws IOException { + Map replaceMap = new HashMap<>(); + replaceMap.put("A", "1.5"); + replaceMap.put("B", "2.5"); + replaceMap.put("C", "3.5"); + replaceMap.put("D", "4.5"); + replaceMap.put("E", "10"); +// replaceMap.put("%s", "1"); +// replaceMap.put("%s1", "5"); + BigDecimal execute = execute("A + B * (C - D) % E", replaceMap); + System.out.println(execute); + + + Map map = new HashMap<>(); + map.put("%s", "10"); + String caculate = caculateReplace("%s*2", map); + System.out.println(caculate); + System.out.println(execute("%s%3.00",map)); + + String s4 = toUnSign16(-1); + System.out.println("转16位无符号:"+s4); + + String s1 = toSign32_CDAB(40100); + System.out.println("转32位有符号-CDAB序"+s1); + + String s2 = toUnSign32_ABCD(-10); + System.out.println("转32位无符号-ABCD序:"+s2); + + String s3 = toUnSign32_CDAB(123456789); + System.out.println("转32位无符号-CDAB序:"+s3); + + String hexToBytes = "3fea3d71"; + byte[] bytes = ByteBufUtil.decodeHexDump(hexToBytes); + + float v1 = toFloat32_ABCD(bytes); + System.out.println("转32位浮点型-ABCD序:"+v1); + + String hexToBytes1= "800041EE"; + long i = Long.parseLong(hexToBytes1, 16); + System.out.println(i); + byte[] bytes1 = ByteBufUtil.decodeHexDump(hexToBytes1); + + float v2 = toFloat32_CDAB(bytes1); + System.out.println("转32位浮点型-CDAB序:"+v2); + + int signedShort = -32627; // 16位有符号整形 + // 将有符号短整型转换为无符号短整型 + int unSignedInt = signedShort & 0xFFFF; + // 输出结果 + System.out.println(unSignedInt); // 输出: 0 + + long l = Long.parseLong("00501F40", 16); + System.out.println(l); + + int val1 = -6553510; + byte[] bytes2 = intToBytes2(val1); + int i1 = bytesToInt2(bytes2); + System.out.println(i1); + } + +} diff --git a/xinda-common/src/main/java/com/xinda/common/utils/CaculateVariableAndNumberUtils.java b/xinda-common/src/main/java/com/xinda/common/utils/CaculateVariableAndNumberUtils.java new file mode 100644 index 0000000..28dcf61 --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/utils/CaculateVariableAndNumberUtils.java @@ -0,0 +1,413 @@ +package com.xinda.common.utils; + +import com.xinda.common.exception.ServiceException; +import com.xinda.common.utils.StringUtils; + +import java.io.ByteArrayInputStream; +import java.io.DataInputStream; +import java.io.IOException; +import java.math.BigDecimal; +import java.util.*; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +/** + * 字符串公式计算工具 + */ +public class CaculateVariableAndNumberUtils { + + /** + * /* + * 暂时只支持加减乘除及括号的应用 + */ + private static final String symbol = "+-,*/,(),%"; + + private static final Map symbol_map = new HashMap(){{ + put("*", 1); + put("/", 1); + put("%", 1); + put("+", 2); + put("-", 2); + put("(", 3); + put(")", 3); + }}; + + + /** + * 公式计算 字符串 + * + * @param exeStr + */ + public static BigDecimal execute(String exeStr, Map replaceMap) { + List list = suffixHandle(exeStr); + System.out.println("计算结果: " + list); + List list1 = new ArrayList<>(); + for (String s : list) { + String o = replaceMap.get(s); + if (StringUtils.isNotEmpty(o)) { + list1.add(o); + } else { + list1.add(s); + } + } + return caculateAnalyse(list1); + + } + + /** + * 公式计算 后序list + * + * @param suffixList + * @return + */ + public static BigDecimal caculateAnalyse(List suffixList) { + + BigDecimal a = BigDecimal.ZERO; + BigDecimal b = BigDecimal.ZERO; + // 构建一个操作数栈 每当获得操作符号时取出最上面两个数进行计算。 + Stack caculateStack = new Stack(); + if (suffixList.size() > 1) { + + for (int i = 0; i < suffixList.size(); i++) { + String temp = suffixList.get(i); + if (symbol.contains(temp)) { + b = caculateStack.pop(); + a = caculateStack.pop(); + a = caculate(a, b, temp.toCharArray()[0]); + caculateStack.push(a); + } else { + if (isNumber(suffixList.get(i))) { + caculateStack.push(new BigDecimal(suffixList.get(i))); + } else { + throw new RuntimeException("公式异常!"); + } + } + } + } else if (suffixList.size() == 1) { + String temp = suffixList.get(0); + if (isNumber(temp)) { + a = BigDecimal.valueOf(Double.parseDouble(temp)); + } else { + throw new RuntimeException("公式异常!"); + } + } + return a; + } + + + /** + * 计算 使用double 进行计算 如果需要可以在这里使用bigdecimal 进行计算 + * + * @param a + * @param b + * @param symbol + * @return + */ + public static BigDecimal caculate(BigDecimal a, BigDecimal b, char symbol) { + switch (symbol) { + case '+': { + return a.add(b).stripTrailingZeros(); + } + case '-': + return a.subtract(b).stripTrailingZeros(); + case '*': + return a.multiply(b); + case '/': + case '%': + int length1 = getDivideLength(a, b); + return a.divide(b, length1, BigDecimal.ROUND_HALF_UP); + default: + throw new RuntimeException("操作符号异常!"); + } + + } + + private static int getDivideLength(BigDecimal a, BigDecimal b) { + String s1 = a.toString(); + String s2 = b.toString(); + int length1 = 0; + int length2 = 0; + if (s1.contains(".")) { + length1 = s1.split("\\.")[1].length(); + } + if (s2.contains(".")) { + length2 = s2.split("\\.")[1].length(); + } + if (length1 == 0 && length2 == 0) { + return 2; + } else { + return Math.max(length1, length2); + } + } + + /** + * 字符串直接 转 后序 + */ + public static List suffixHandle(String exeStr) { + StringBuilder buf = new StringBuilder(); + Stack stack = new Stack(); + char[] exeChars = exeStr.toCharArray(); + List res = new ArrayList<>(); + for (char x : exeChars) { + // 判断是不是操作符号 + if (symbol.indexOf(x) > -1) { + // 不管怎样先将数据添加进列表 + if (buf.length() > 0) { + // 添加数据到res + String temp = buf.toString(); + // 验证是否为变量或数字 + if (!isVariableAndNumber(temp)) { + throw new RuntimeException(buf.append(" 格式不对").toString()); + } + + // 添加到结果列表中 + res.add(temp); + // 清空临时buf + buf.delete(0, buf.length()); + } + if (!stack.isEmpty()) { + + //2.判断是不是开是括号 + if (x == '(') { + stack.push(x); + continue; + } + //3.判断是不是闭合括号 + if (x == ')') { + boolean a = false; + while (!stack.isEmpty()) { + char con = (char) stack.peek(); + if (con == '(' && !a) { + stack.pop(); + a = true; + } else if (!a) { + res.add(String.valueOf(stack.pop())); + } else { + break; + } + } + continue; + } + + // 遵循四则运算法则 + int size = stack.size(); + while (size > 0) { + char con = (char) stack.peek(); + if (compare(con, x) > 0) { + res.add(String.valueOf(stack.pop())); + } + size--; + } + stack.push(x); + + } else { + stack.push(x); + } + } else { + buf.append(x); + } + } + if (buf.length() > 0) { + res.add(buf.toString()); + } + while (!stack.isEmpty()) { + res.add(String.valueOf(stack.pop())); + } + return res; + + } + + /** + * 比较两个操作符号的优先级 + * + * @param a + * @param b + * @return + */ + public static int compare(char a, char b) { + String s1 = String.valueOf(a); + String s2 = String.valueOf(b); + Integer ai = symbol_map.get(s1); + Integer bi = symbol_map.get(s2); + if (null != ai && null != bi) { + if (ai <= bi) { + return 1; + } else { + return -1; + } + } else { + return 0; + } + } + + + /** + * 判断是否为数 字符串 + * + * @param str + * @return + */ + public static boolean isNumber(String str) { + Pattern pattern = Pattern.compile("[-+]?\\d+(?:\\.\\d+)?"); + Matcher isNum = pattern.matcher(str); + return isNum.matches(); + } + + /** + * 判断是否为数 字符串 + * + * @param str + * @return + */ + public static boolean isVariable(String str) { + Pattern pattern = Pattern.compile("^[A-Z]+$"); + Matcher isNum = pattern.matcher(str); + return isNum.matches(); + } + + /** + * 判断是否为数 字符串 + * + * @param str + * @return + */ + public static boolean isVariableAndNumber(String str) { + Pattern pattern = Pattern.compile("[A-Z]|-?\\d+(\\.\\d+)?"); + Matcher isNum = pattern.matcher(str); + return isNum.matches(); + } + + public static String caculateReplace(String str, Map map) { + for (Map.Entry entry : map.entrySet()) { + str = str.replaceAll(entry.getKey(), entry.getValue()==null ? "1" : entry.getValue()); + } + return str; + } + + public static String toFloat(byte[] bytes) throws IOException { + ByteArrayInputStream mByteArrayInputStream = new ByteArrayInputStream(bytes); + DataInputStream mDataInputStream = new DataInputStream(mByteArrayInputStream); + try { + float v = mDataInputStream.readFloat(); + return String.format("%.6f",v); + }catch (Exception e){ + throw new ServiceException("modbus16转浮点数错误"); + } + finally { + mDataInputStream.close(); + mByteArrayInputStream.close(); + } + } + + /** + * 转16位无符号整形 + * @param value + * @return + */ + public static String toUnSign16(long value) { + long unSigned = value & 0xFFFF; + return unSigned +""; // 将字节数组转换为十六进制字符串 + } + + /** + * 32位有符号CDAB数据类型 + * @param value + * @return + */ + public static String toSign32_CDAB(long value) { + byte[] bytes = intToBytes2((int) value); + return bytesToInt2(bytes)+""; + } + + /** + * 32位无符号ABCD数据类型 + * @param value + * @return + */ + public static String toUnSign32_ABCD(long value) { + return Integer.toUnsignedString((int) value); + } + + /** + * 32位无符号CDAB数据类型 + * @param value + * @return + */ + public static String toUnSign32_CDAB(long value) { + byte[] bytes = intToBytes2((int) value); + int val = bytesToInt2(bytes); + return Integer.toUnsignedString(val); + } + + /** + * 转32位浮点数 ABCD + * @param bytes + * @return + */ + public static float toFloat32_ABCD(byte[] bytes) { + int intValue = (bytes[0] << 24) | ((bytes[1] & 0xFF) << 16) | ((bytes[2] & 0xFF) << 8) | (bytes[3] & 0xFF); + return Float.intBitsToFloat(intValue); + } + + /** + * 转32位浮点数 CDAB + * @param bytes + * @return + */ + public static Float toFloat32_CDAB(byte[] bytes) { + int intValue = ((bytes[2] & 0xFF) << 24) | ((bytes[3] & 0xFF) << 16) | ((bytes[0] & 0xFF) << 8) | ((bytes[1] & 0xFF)) ; + return Float.intBitsToFloat(intValue); + } + + /** + * byte数组中取int数值,本方法适用于(低位在后,高位在前)的顺序。和intToBytes2()配套使用 + */ + public static int bytesToInt2(byte[] src) { + return (((src[2] & 0xFF) << 24) | ((src[3] & 0xFF) << 16) | ((src[0] & 0xFF) << 8) | (src[1] & 0xFF)); + } + + /** + * 将int数值转换为占四个字节的byte数组,本方法适用于(高位在前,低位在后)的顺序。 和bytesToInt2()配套使用 + */ + public static byte[] intToBytes2(int value) { + byte[] src = new byte[4]; + src[0] = (byte) ((value >> 24) & 0xFF); + src[1] = (byte) ((value >> 16) & 0xFF); + src[2] = (byte) ((value >> 8) & 0xFF); + src[3] = (byte) (value & 0xFF); + return src; + } + + public static String subHexValue(String hexString){ + //截取报文中的值 + String substring = hexString.substring(4, 6); + int index = Integer.parseInt(substring); + return hexString.substring(6, 6 + index*2); + } + + + public static void main(String[] args) throws IOException { + String s1 = "A/B*C"; // 1.5 + String s2 = "E-((A+B)-(C+D))%10"; // 10.4 + String s3 = "A-B-C*(D-E)+10*5"; // 67 + String s4 = "A-B-C*(D+E)-(A+B)+(2+3)"; // -41 + String s5 = "A-(A-(B-C)*(D+E))%10+B"; // 1.5 + String s6 = "A-(B+C)*D+10"; // -9 + String s7 = "1+2*3-2+2*(1-2+3*4+5-6/2+(2-1)+3*4-2)%10"; // 9.8 + + + boolean number = isNumber("-10"); + System.out.println(number); + + Map replaceMap = new HashMap<>(); + replaceMap.put("A", "1"); + replaceMap.put("B", "2"); + replaceMap.put("C", "3"); + replaceMap.put("D", "4"); + replaceMap.put("E", "10"); + BigDecimal execute = execute(s7, replaceMap); + System.out.println(execute); + + } + +} diff --git a/xinda-common/src/main/java/com/xinda/common/utils/DateUtils.java b/xinda-common/src/main/java/com/xinda/common/utils/DateUtils.java new file mode 100644 index 0000000..d7a3d58 --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/utils/DateUtils.java @@ -0,0 +1,263 @@ +package com.xinda.common.utils; + +import java.lang.management.ManagementFactory; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.LocalTime; +import java.time.ZoneId; +import java.time.ZonedDateTime; +import java.util.Date; +import java.util.Random; + +import org.apache.commons.lang3.time.DateFormatUtils; + +/** + * 时间工具类 + * + * @author ruoyi + */ +public class DateUtils extends org.apache.commons.lang3.time.DateUtils +{ + public static String YYYY = "yyyy"; + + public static String YYYY_MM = "yyyy-MM"; + + public static String YYYY_MM_DD = "yyyy-MM-dd"; + + public static String YYYYMMDDHHMMSS = "yyyyMMddHHmmss"; + + public static String YYYY_MM_DD_HH_MM_SS = "yyyy-MM-dd HH:mm:ss"; + + public static String SS_MM_HH_DD_HH_YY = "ssmmHHddMMyy"; + + public static String YY_MM_DD_HH_MM_SS = "yy-MM-dd HH:mm:ss"; + + private static String[] parsePatterns = { + "yyyy-MM-dd", "yyyy-MM-dd HH:mm:ss", "yyyy-MM-dd HH:mm", "yyyy-MM", + "yyyy/MM/dd", "yyyy/MM/dd HH:mm:ss", "yyyy/MM/dd HH:mm", "yyyy/MM", + "yyyy.MM.dd", "yyyy.MM.dd HH:mm:ss", "yyyy.MM.dd HH:mm", "yyyy.MM"}; + + public static String YYYY_MM_DD_HH_MM_SS_SSS = "yyyy-MM-dd HH:mm:ss.SSS"; + + /** + * 获取当前Date型日期 + * + * @return Date() 当前日期 + */ + public static Date getNowDate() + { + return new Date(); + } + + /** + * 获取当前日期, 默认格式为yyyy-MM-dd + * + * @return String + */ + public static String getDate() + { + return dateTimeNow(YYYY_MM_DD); + } + + public static final String getTime() + { + return dateTimeNow(YYYY_MM_DD_HH_MM_SS); + } + + public static final String dateTimeNow() + { + return dateTimeNow(YYYYMMDDHHMMSS); + } + + public static final String dateTimeNow(final String format) + { + return parseDateToStr(format, new Date()); + } + + public static final String dateTime(final Date date) + { + return parseDateToStr(YYYY_MM_DD, date); + } + + public static final String parseDateToStr(final String format, final Date date) + { + return new SimpleDateFormat(format).format(date); + } + + public static final Date dateTime(final String format, final String ts) + { + try + { + return new SimpleDateFormat(format).parse(ts); + } + catch (ParseException e) + { + throw new RuntimeException(e); + } + } + + /** + * 日期路径 即年/月/日 如2018/08/08 + */ + public static final String datePath() + { + Date now = new Date(); + return DateFormatUtils.format(now, "yyyy/MM/dd"); + } + + /** + * 日期路径 即年/月/日 如20180808 + */ + public static final String dateTime() + { + Date now = new Date(); + return DateFormatUtils.format(now, "yyyyMMdd"); + } + + + /** + * 日期路径 即年/月/日 如20180808 + */ + public static final String dateTimeYY(Date date) + { + return DateFormatUtils.format(date, YY_MM_DD_HH_MM_SS); + } + + /** + * 日期型字符串转化为日期 格式 + */ + public static Date parseDate(Object str) + { + if (str == null) + { + return null; + } + try + { + return parseDate(str.toString(), parsePatterns); + } + catch (ParseException e) + { + return null; + } + } + + /** + * 获取服务器启动时间 + */ + public static Date getServerStartDate() + { + long time = ManagementFactory.getRuntimeMXBean().getStartTime(); + return new Date(time); + } + + /** + * 计算相差天数 + */ + public static int differentDaysByMillisecond(Date date1, Date date2) + { + return Math.abs((int) ((date2.getTime() - date1.getTime()) / (1000 * 3600 * 24))); + } + + /** + * 计算相差秒数 + */ + public static int differentSeconds(Date date1, Date date2) + { + return Math.abs((int) ((date2.getTime() - date1.getTime()) / (1000))); + } + + /** + * 计算两个时间差 + */ + public static String getDatePoor(Date endDate, Date nowDate) + { + long nd = 1000 * 24 * 60 * 60; + long nh = 1000 * 60 * 60; + long nm = 1000 * 60; + // long ns = 1000; + // 获得两个时间的毫秒时间差异 + long diff = endDate.getTime() - nowDate.getTime(); + // 计算差多少天 + long day = diff / nd; + // 计算差多少小时 + long hour = diff % nd / nh; + // 计算差多少分钟 + long min = diff % nd % nh / nm; + // 计算差多少秒//输出结果 + // long sec = diff % nd % nh % nm / ns; + return day + "天" + hour + "小时" + min + "分钟"; + } + + /** + * 增加 LocalDateTime ==> Date + */ + public static Date toDate(LocalDateTime temporalAccessor) + { + ZonedDateTime zdt = temporalAccessor.atZone(ZoneId.systemDefault()); + return Date.from(zdt.toInstant()); + } + + /** + * 增加 LocalDate ==> Date + */ + public static Date toDate(LocalDate temporalAccessor) + { + LocalDateTime localDateTime = LocalDateTime.of(temporalAccessor, LocalTime.of(0, 0, 0)); + ZonedDateTime zdt = localDateTime.atZone(ZoneId.systemDefault()); + return Date.from(zdt.toInstant()); + } + + public static long getTimestamp(){ + return System.currentTimeMillis(); + } + + public static long getTimestampSeconds(){ + return System.currentTimeMillis()/1000; + } + + public static String generateRandomHex(int length) { + Random random = new Random(); + StringBuilder sb = new StringBuilder(length); + // 添加"D"作为开头 + sb.append("D"); + for (int i = 1; i < length; i++) { + int randomInt = random.nextInt(16); // 生成0到15的随机整数 + char hexChar = Character.toUpperCase(Character.forDigit(randomInt, 16)); // 将整数转换为十六进制字符并转为大写 + sb.append(hexChar); + } + return sb.toString(); + } + + public static void main(String[] args) { + Date date = DateUtils.dateTime(SS_MM_HH_DD_HH_YY, "434123181121"); + String s = DateUtils.dateTimeYY(date); + System.out.println(s); + + String s1 = generateRandomHex(12); + System.out.println(s1); + + } + + /** + * 字符串去除毫秒 + * @param time 时间字符串 + * @return java.lang.String + */ + public static String strRemoveMs(String time) { + Date date = DateUtils.dateTime(DateUtils.YYYY_MM_DD_HH_MM_SS_SSS, time); + return DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD_HH_MM_SS, date); + } + + /** + * 日期去除毫秒 + * @param time 时间 + * @return java.util.Date + */ + public static Date dateRemoveMs(Date time) { + String s = DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD_HH_MM_SS, time); + return DateUtils.dateTime(DateUtils.YYYY_MM_DD_HH_MM_SS, s); + } +} diff --git a/xinda-common/src/main/java/com/xinda/common/utils/DictUtils.java b/xinda-common/src/main/java/com/xinda/common/utils/DictUtils.java new file mode 100644 index 0000000..151c460 --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/utils/DictUtils.java @@ -0,0 +1,197 @@ +package com.xinda.common.utils; + +import java.util.Collection; +import java.util.List; +import com.alibaba.fastjson2.JSONArray; +import com.xinda.common.constant.CacheConstants; +import com.xinda.common.core.domain.entity.SysDictData; +import com.xinda.common.core.redis.RedisCache; +import com.xinda.common.utils.spring.SpringUtils; + +import static com.xinda.common.constant.Constants.EN_US; +import static com.xinda.common.constant.Constants.ZH_CN; + +/** + * 字典工具类 + * + * @author ruoyi + */ +public class DictUtils +{ + /** + * 分隔符 + */ + public static final String SEPARATOR = ","; + + /** + * 设置字典缓存 + * + * @param key 参数键 + * @param dictDatas 字典数据列表 + */ + public static void setDictCache(String key, List dictDatas) + { + SpringUtils.getBean(RedisCache.class).setCacheObject(getCacheKey(key), dictDatas); + } + + /** + * 获取字典缓存 + * + * @param key 参数键 + * @return dictDatas 字典数据列表 + */ + public static List getDictCache(String key) + { + JSONArray arrayCache = SpringUtils.getBean(RedisCache.class).getCacheObject(getCacheKey(key)); + if (StringUtils.isNotNull(arrayCache)) + { + return arrayCache.toList(SysDictData.class); + } + return null; + } + + /** + * 根据字典类型和字典值获取字典标签 + * + * @param dictType 字典类型 + * @param dictValue 字典值 + * @param language 语言 + * @return 字典标签 + */ + public static String getDictLabel(String dictType, String dictValue, String language) + { + return getDictLabel(dictType, dictValue, SEPARATOR, language); + } + + /** + * 根据字典类型和字典标签获取字典值 + * + * @param dictType 字典类型 + * @param dictLabel 字典标签 + * @return 字典值 + */ + public static String getDictValue(String dictType, String dictLabel) + { + return getDictValue(dictType, dictLabel, SEPARATOR); + } + + /** + * 根据字典类型和字典值获取字典标签 + * + * @param dictType 字典类型 + * @param dictValue 字典值 + * @param separator 分隔符 + * @param language 语言 + * @return 字典标签 + */ + public static String getDictLabel(String dictType, String dictValue, String separator, String language) + { + StringBuilder propertyString = new StringBuilder(); + List datas = getDictCache(dictType); + + if (StringUtils.isNotNull(datas)) + { + if (StringUtils.containsAny(separator, dictValue)) + { + for (SysDictData dict : datas) + { + for (String value : dictValue.split(separator)) + { + if (value.equals(dict.getDictValue())) + { + propertyString.append(dict.getDictLabel()).append(separator); + break; + } + } + } + } + else + { + for (SysDictData dict : datas) + { + if (dictValue.equals(dict.getDictValue())) + { + if (ZH_CN.equals(language)) { + return dict.getDictLabel_zh_CN(); + } else if (EN_US.equals(language)) { + return dict.getDictLabel_en_US(); + } else { + return dict.getDictLabel(); + } + } + } + } + } + return StringUtils.stripEnd(propertyString.toString(), separator); + } + + /** + * 根据字典类型和字典标签获取字典值 + * + * @param dictType 字典类型 + * @param dictLabel 字典标签 + * @param separator 分隔符 + * @return 字典值 + */ + public static String getDictValue(String dictType, String dictLabel, String separator) + { + StringBuilder propertyString = new StringBuilder(); + List datas = getDictCache(dictType); + + if (StringUtils.containsAny(separator, dictLabel) && StringUtils.isNotEmpty(datas)) + { + for (SysDictData dict : datas) + { + for (String label : dictLabel.split(separator)) + { + if (label.equals(dict.getDictLabel())) + { + propertyString.append(dict.getDictValue()).append(separator); + break; + } + } + } + } + else + { + for (SysDictData dict : datas) + { + if (dictLabel.equals(dict.getDictLabel())) + { + return dict.getDictValue(); + } + } + } + return StringUtils.stripEnd(propertyString.toString(), separator); + } + + /** + * 删除指定字典缓存 + * + * @param key 字典键 + */ + public static void removeDictCache(String key) + { + SpringUtils.getBean(RedisCache.class).deleteObject(getCacheKey(key)); + } + + /** + * 清空字典缓存 + */ + public static void clearDictCache() + { + Collection keys = SpringUtils.getBean(RedisCache.class).keys(CacheConstants.SYS_DICT_KEY + "*"); + SpringUtils.getBean(RedisCache.class).deleteObject(keys); + } + + /** + * 设置cache key + * + * @param configKey 参数键 + * @return 缓存键key + */ + public static String getCacheKey(String configKey) + { + return CacheConstants.SYS_DICT_KEY + configKey; + } +} diff --git a/xinda-common/src/main/java/com/xinda/common/utils/DigestUtils.java b/xinda-common/src/main/java/com/xinda/common/utils/DigestUtils.java new file mode 100644 index 0000000..0f9c798 --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/utils/DigestUtils.java @@ -0,0 +1,75 @@ +package com.xinda.common.utils; + +import com.xinda.common.utils.uuid.IdUtils; +import lombok.NoArgsConstructor; +import org.apache.commons.lang3.Validate; + +import java.io.IOException; +import java.io.InputStream; +import java.security.GeneralSecurityException; +import java.security.MessageDigest; +import java.security.SecureRandom; + +@NoArgsConstructor +public class DigestUtils { + private static SecureRandom random = new SecureRandom(); + private static IdUtils idUtils = new IdUtils(0,0); + + public static String getId(){ + return String.valueOf(Math.abs(random.nextLong())); + } + + public static String nextId(){ + return String.valueOf(idUtils.nextId()); + } + + + public static byte[] genSalt(int numBytes) { + Validate.isTrue(numBytes > 0, "numBytes argument must be a positive integer (1 or larger)", (long)numBytes); + byte[] bytes = new byte[numBytes]; + random.nextBytes(bytes); + return bytes; + } + + public static byte[] digest(byte[] input, String algorithm, byte[] salt, int iterations) { + try { + MessageDigest digest = MessageDigest.getInstance(algorithm); + if(salt != null) { + digest.update(salt); + } + + byte[] result = digest.digest(input); + + for(int i = 1; i < iterations; ++i) { + digest.reset(); + result = digest.digest(result); + } + + return result; + } catch (GeneralSecurityException var7) { + throw ExceptionUtils.unchecked(var7); + } + } + + public static byte[] digest(InputStream input, String algorithm) throws IOException { + try { + MessageDigest messageDigest = MessageDigest.getInstance(algorithm); + int bufferLength = 8192; + byte[] buffer = new byte[bufferLength]; + + for(int read = input.read(buffer, 0, bufferLength); read > -1; read = input.read(buffer, 0, bufferLength)) { + messageDigest.update(buffer, 0, read); + } + + return messageDigest.digest(); + } catch (GeneralSecurityException var6) { + throw ExceptionUtils.unchecked(var6); + } + } + + public static void main(String[] args) { + for (int i = 0; i < 10; i++) { + System.out.println(nextId()); + } + } +} diff --git a/xinda-common/src/main/java/com/xinda/common/utils/EmqxUtils.java b/xinda-common/src/main/java/com/xinda/common/utils/EmqxUtils.java new file mode 100644 index 0000000..c296c2f --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/utils/EmqxUtils.java @@ -0,0 +1,9 @@ +package com.xinda.common.utils; + +/** + * @author bill + */ +public class EmqxUtils { + + //获取 +} diff --git a/xinda-common/src/main/java/com/xinda/common/utils/EncodeUtils.java b/xinda-common/src/main/java/com/xinda/common/utils/EncodeUtils.java new file mode 100644 index 0000000..74c96a5 --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/utils/EncodeUtils.java @@ -0,0 +1,172 @@ +package com.xinda.common.utils; + +import org.apache.commons.codec.binary.Base64; +import org.apache.commons.lang3.StringEscapeUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.security.crypto.codec.Hex; +import org.springframework.web.multipart.MultipartFile; + +import java.io.UnsupportedEncodingException; +import java.net.URLDecoder; +import java.net.URLEncoder; +import java.util.regex.Pattern; + +public class EncodeUtils { + + private static final Logger logger = LoggerFactory.getLogger(EncodeUtils.class); + private static final String DEFAULT_URL_ENCODING = "UTF-8"; + private static final char[] BASE62 = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz".toCharArray(); + private static Pattern p1 = Pattern.compile("<\\s*(script|link|style|iframe)([\\s\\S]+?)<\\/\\s*\\1\\s*>", 2); + private static Pattern p2 = Pattern.compile("\\s*on[a-z]+\\s*=\\s*(\"[^\"]+\"|'[^']+'|[^\\s]+)\\s*(?=>)", 2); + private static Pattern p3 = Pattern.compile("\\s*(href|src)\\s*=\\s*(\"\\s*(javascript|vbscript):[^\"]+\"|'\\s*(javascript|vbscript):[^']+'|(javascript|vbscript):[^\\s]+)\\s*(?=>)", 2); + private static Pattern p4 = Pattern.compile("epression\\((.|\\n)*\\);?", 2); + private static Pattern p5 = Pattern.compile("(?:')|(?:--)|(/\\*(?:.|[\\n\\r])*?\\*/)|(\\b(select|update|and|or|delete|insert|trancate|char|into|substr|ascii|declare|exec|count|master|into|drop|execute)\\b)", 2); + + public EncodeUtils() { + } + + public static String encodeHex(byte[] input) { + return new String(Hex.encode(input)); + } + + public static byte[] decodeHex(String input) { + try { + return Hex.decode(input); + } catch (Exception var2) { + throw ExceptionUtils.unchecked(var2); + } + } + + public static String encodeBase64(byte[] input) { + return new String(Base64.encodeBase64(input)); + } + + public static String encodeBase64(String input) { + try { + return new String(Base64.encodeBase64(input.getBytes("UTF-8"))); + } catch (UnsupportedEncodingException var2) { + return ""; + } + } + + public static byte[] decodeBase64(String input) { + return Base64.decodeBase64(input.getBytes()); + } + + public static String decodeBase64String(String input) { + try { + return new String(Base64.decodeBase64(input.getBytes()), "UTF-8"); + } catch (UnsupportedEncodingException var2) { + return ""; + } + } + + public static String encodeBase62(byte[] input) { + char[] chars = new char[input.length]; + + for(int i = 0; i < input.length; ++i) { + chars[i] = BASE62[(input[i] & 255) % BASE62.length]; + } + + return new String(chars); + } + + public static String encodeHtml(String html) { + return StringEscapeUtils.escapeHtml4(html); + } + + public static String decodeHtml(String htmlEscaped) { + return StringEscapeUtils.unescapeHtml4(htmlEscaped); + } + + public static String encodeXml(String xml) { + return StringEscapeUtils.escapeXml(xml); + } + + public static String decodeXml(String xmlEscaped) { + return StringEscapeUtils.unescapeXml(xmlEscaped); + } + + public static String encodeUrl(String part) { + return encodeUrl(part, "UTF-8"); + } + + public static String encodeUrl(String part, String encoding) { + if(part == null) { + return null; + } else { + try { + return URLEncoder.encode(part, encoding); + } catch (UnsupportedEncodingException var3) { + throw ExceptionUtils.unchecked(var3); + } + } + } + + public static String decodeUrl(String part) { + return decodeUrl(part, "UTF-8"); + } + + public static String decodeUrl(String part, String encoding) { + try { + return URLDecoder.decode(part, encoding); + } catch (UnsupportedEncodingException var3) { + throw ExceptionUtils.unchecked(var3); + } + } + + public static String decodeUrl2(String part) { + return decodeUrl(decodeUrl(part)); + } + + public static String xssFilter(String text) { + if(text == null) { + return null; + } else { + String oriValue = StringUtils.trim(text); + String value = p1.matcher(oriValue).replaceAll(""); + value = p2.matcher(value).replaceAll(""); + value = p3.matcher(value).replaceAll(""); + value = p4.matcher(value).replaceAll(""); + if(!StringUtils.startsWithIgnoreCase(value, "") && !StringUtils.startsWithIgnoreCase(value, "", ">"); + } + + if(logger.isInfoEnabled() && !value.equals(oriValue)) { + logger.info("xssFilter: {} to {}", text, value); + } + + return value; + } + } + + public static String sqlFilter(String text) { + if(text != null) { + String value = p5.matcher(text).replaceAll(""); + if(logger.isWarnEnabled() && !value.equals(text)) { + logger.warn("sqlFilter: {} to {}", text, value); + return ""; + } else { + return value; + } + } else { + return null; + } + } + + public static MultipartFile base64toMultipartFile(String base64) { + final String[] base64Array = base64.split(","); + String dataUir, data; + if (base64Array.length > 1) { + dataUir = base64Array[0]; + data = base64Array[1]; + } else { + //根据你base64代表的具体文件构建 + dataUir = "data:image/png;base64"; + data = base64Array[0]; + } + return new Base64ToMultipartFile(data, dataUir); + } +} + diff --git a/xinda-common/src/main/java/com/xinda/common/utils/ExceptionUtil.java b/xinda-common/src/main/java/com/xinda/common/utils/ExceptionUtil.java new file mode 100644 index 0000000..9e68578 --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/utils/ExceptionUtil.java @@ -0,0 +1,39 @@ +package com.xinda.common.utils; + +import java.io.PrintWriter; +import java.io.StringWriter; +import org.apache.commons.lang3.exception.ExceptionUtils; + +/** + * 错误信息处理类。 + * + * @author ruoyi + */ +public class ExceptionUtil +{ + /** + * 获取exception的详细错误信息。 + */ + public static String getExceptionMessage(Throwable e) + { + StringWriter sw = new StringWriter(); + e.printStackTrace(new PrintWriter(sw, true)); + return sw.toString(); + } + + public static String getRootErrorMessage(Exception e) + { + Throwable root = ExceptionUtils.getRootCause(e); + root = (root == null ? e : root); + if (root == null) + { + return ""; + } + String msg = root.getMessage(); + if (msg == null) + { + return "null"; + } + return StringUtils.defaultString(msg); + } +} diff --git a/xinda-common/src/main/java/com/xinda/common/utils/ExceptionUtils.java b/xinda-common/src/main/java/com/xinda/common/utils/ExceptionUtils.java new file mode 100644 index 0000000..f663d7d --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/utils/ExceptionUtils.java @@ -0,0 +1,53 @@ +package com.xinda.common.utils; + +import lombok.NoArgsConstructor; + +import javax.servlet.http.HttpServletRequest; +import java.io.PrintWriter; +import java.io.StringWriter; + +@NoArgsConstructor +public class ExceptionUtils { + + + public static Throwable getThrowable(HttpServletRequest request) { + Throwable ex = null; + if(request.getAttribute("exception") != null) { + ex = (Throwable)request.getAttribute("exception"); + } else if(request.getAttribute("javax.servlet.error.exception") != null) { + ex = (Throwable)request.getAttribute("javax.servlet.error.exception"); + } + + return ex; + } + + public static String getStackTraceAsString(Throwable e) { + if(e == null) { + return ""; + } else { + StringWriter stringWriter = new StringWriter(); + e.printStackTrace(new PrintWriter(stringWriter)); + return stringWriter.toString(); + } + } + + public static boolean isCausedBy(Exception ex, Class... causeExceptionClasses) { + for(Throwable cause = ex.getCause(); cause != null; cause = cause.getCause()) { + Class[] var3 = causeExceptionClasses; + int var4 = causeExceptionClasses.length; + + for(int var5 = 0; var5 < var4; ++var5) { + Class causeClass = var3[var5]; + if(causeClass.isInstance(cause)) { + return true; + } + } + } + + return false; + } + + public static RuntimeException unchecked(Exception e) { + return e instanceof RuntimeException?(RuntimeException)e:new RuntimeException(e); + } +} diff --git a/xinda-common/src/main/java/com/xinda/common/utils/LogUtils.java b/xinda-common/src/main/java/com/xinda/common/utils/LogUtils.java new file mode 100644 index 0000000..f37a7dc --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/utils/LogUtils.java @@ -0,0 +1,18 @@ +package com.xinda.common.utils; + +/** + * 处理并记录日志文件 + * + * @author ruoyi + */ +public class LogUtils +{ + public static String getBlock(Object msg) + { + if (msg == null) + { + msg = ""; + } + return "[" + msg.toString() + "]"; + } +} diff --git a/xinda-common/src/main/java/com/xinda/common/utils/MapUtils.java b/xinda-common/src/main/java/com/xinda/common/utils/MapUtils.java new file mode 100644 index 0000000..e1c13cf --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/utils/MapUtils.java @@ -0,0 +1,66 @@ +package com.xinda.common.utils; + +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.collection.CollectionUtil; +import com.xinda.common.core.text.KeyValue; +import com.google.common.collect.Maps; +import com.google.common.collect.Multimap; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; +import java.util.Map; +import java.util.function.Consumer; + +/** + * Map 工具类 + * + * @author 芋道源码 + */ +public class MapUtils { + + /** + * 从哈希表表中,获得 keys 对应的所有 value 数组 + * + * @param multimap 哈希表 + * @param keys keys + * @return value 数组 + */ + public static List getList(Multimap multimap, Collection keys) { + List result = new ArrayList<>(); + keys.forEach(k -> { + Collection values = multimap.get(k); + if (CollectionUtil.isEmpty(values)) { + return; + } + result.addAll(values); + }); + return result; + } + + /** + * 从哈希表查找到 key 对应的 value,然后进一步处理 + * 注意,如果查找到的 value 为 null 时,不进行处理 + * + * @param map 哈希表 + * @param key key + * @param consumer 进一步处理的逻辑 + */ + public static void findAndThen(Map map, K key, Consumer consumer) { + if (CollUtil.isEmpty(map)) { + return; + } + V value = map.get(key); + if (value == null) { + return; + } + consumer.accept(value); + } + + public static Map convertMap(List> keyValues) { + Map map = Maps.newLinkedHashMapWithExpectedSize(keyValues.size()); + keyValues.forEach(keyValue -> map.put(keyValue.getKey(), keyValue.getValue())); + return map; + } + +} diff --git a/xinda-common/src/main/java/com/xinda/common/utils/Md5Utils.java b/xinda-common/src/main/java/com/xinda/common/utils/Md5Utils.java new file mode 100644 index 0000000..fa34814 --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/utils/Md5Utils.java @@ -0,0 +1,82 @@ +package com.xinda.common.utils; + +import lombok.NoArgsConstructor; + +import java.io.IOException; +import java.io.InputStream; +import java.io.UnsupportedEncodingException; + +@NoArgsConstructor +public class Md5Utils { + private static final String MD5 = "MD5"; + private static final String DEFAULT_ENCODING = "UTF-8"; + + + + public static String md5(String input) { + return md5((String) input, 1); + } + + public static String md5(String input, int iterations) { + try { + return EncodeUtils.encodeHex(DigestUtils.digest(input.getBytes("UTF-8"), "MD5", (byte[]) null, iterations)); + } catch (UnsupportedEncodingException var3) { + return ""; + } + } + + public static byte[] md5(byte[] input) { + return md5((byte[]) input, 1); + } + + public static byte[] md5(byte[] input, int iterations) { + return DigestUtils.digest(input, "MD5", (byte[]) null, iterations); + } + + public static byte[] md5(InputStream input) throws IOException { + return DigestUtils.digest(input, "MD5"); + } + + public static boolean isMd5(String str) { + int cnt = 0; + for (int i = 0; i < str.length(); ++i) { + switch (str.charAt(i)) { + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': + case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': + ++cnt; + if (32 <= cnt) return true; + break; + case '/': + if ((i + 10) < str.length()) {// "/storage/" + char ch1 = str.charAt(i + 1); + char ch2 = str.charAt(i + 8); + if ('/' == ch2 && ('s' == ch1 || 'S' == ch1)) return true; + } + default: + cnt = 0; + break; + } + } + return false; + } +} diff --git a/xinda-common/src/main/java/com/xinda/common/utils/MessageUtils.java b/xinda-common/src/main/java/com/xinda/common/utils/MessageUtils.java new file mode 100644 index 0000000..58b4142 --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/utils/MessageUtils.java @@ -0,0 +1,26 @@ +package com.xinda.common.utils; + +import org.springframework.context.MessageSource; +import org.springframework.context.i18n.LocaleContextHolder; +import com.xinda.common.utils.spring.SpringUtils; + +/** + * 获取i18n资源文件 + * + * @author ruoyi + */ +public class MessageUtils +{ + /** + * 根据消息键和参数 获取消息 委托给spring messageSource + * + * @param code 消息键 + * @param args 参数 + * @return 获取国际化翻译值 + */ + public static String message(String code, Object... args) + { + MessageSource messageSource = SpringUtils.getBean(MessageSource.class); + return messageSource.getMessage(code, args, LocaleContextHolder.getLocale()); + } +} diff --git a/xinda-common/src/main/java/com/xinda/common/utils/PageUtils.java b/xinda-common/src/main/java/com/xinda/common/utils/PageUtils.java new file mode 100644 index 0000000..074bfc2 --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/utils/PageUtils.java @@ -0,0 +1,35 @@ +package com.xinda.common.utils; + +import com.github.pagehelper.PageHelper; +import com.xinda.common.core.page.PageDomain; +import com.xinda.common.core.page.TableSupport; +import com.xinda.common.utils.sql.SqlUtil; + +/** + * 分页工具类 + * + * @author ruoyi + */ +public class PageUtils extends PageHelper +{ + /** + * 设置请求分页数据 + */ + public static void startPage() + { + PageDomain pageDomain = TableSupport.buildPageRequest(); + Integer pageNum = pageDomain.getPageNum(); + Integer pageSize = pageDomain.getPageSize(); + String orderBy = SqlUtil.escapeOrderBySql(pageDomain.getOrderBy()); + Boolean reasonable = pageDomain.getReasonable(); + PageHelper.startPage(pageNum, pageSize, orderBy).setReasonable(reasonable); + } + + /** + * 清理分页的线程变量 + */ + public static void clearPage() + { + PageHelper.clearPage(); + } +} diff --git a/xinda-common/src/main/java/com/xinda/common/utils/SecurityUtils.java b/xinda-common/src/main/java/com/xinda/common/utils/SecurityUtils.java new file mode 100644 index 0000000..83cd4e9 --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/utils/SecurityUtils.java @@ -0,0 +1,139 @@ +package com.xinda.common.utils; + +import org.springframework.security.core.Authentication; +import org.springframework.security.core.context.SecurityContextHolder; +import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; +import com.xinda.common.constant.HttpStatus; +import com.xinda.common.core.domain.model.LoginUser; +import com.xinda.common.exception.ServiceException; + +/** + * 安全服务工具类 + * + * @author ruoyi + */ +public class SecurityUtils +{ + /** + * 用户ID + **/ + public static Long getUserId() + { + try + { + return getLoginUser().getUserId(); + } + catch (Exception e) + { + throw new ServiceException("获取用户ID异常", HttpStatus.UNAUTHORIZED); + } + } + + /** + * 获取部门ID + **/ + public static Long getDeptId() + { + try + { + return getLoginUser().getDeptId(); + } + catch (Exception e) + { + throw new ServiceException("获取部门ID异常", HttpStatus.UNAUTHORIZED); + } + } + + /** + * 获取用户账户 + **/ + public static String getUsername() + { + try + { + return getLoginUser().getUsername(); + } + catch (Exception e) + { + throw new ServiceException("获取用户账户异常", HttpStatus.UNAUTHORIZED); + } + } + + /** + * 获取用户 + **/ + public static LoginUser getLoginUser() + { + try + { + return (LoginUser) getAuthentication().getPrincipal(); + } + catch (Exception e) + { + throw new ServiceException("获取用户信息异常", HttpStatus.UNAUTHORIZED); + } + } + + /** + * 获取Authentication + */ + public static Authentication getAuthentication() + { + return SecurityContextHolder.getContext().getAuthentication(); + } + + /** + * 生成BCryptPasswordEncoder密码 + * + * @param password 密码 + * @return 加密字符串 + */ + public static String encryptPassword(String password) + { + BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder(); + return passwordEncoder.encode(password); + } + + /** + * 判断密码是否相同 + * + * @param rawPassword 真实密码 + * @param encodedPassword 加密后字符 + * @return 结果 + */ + public static boolean matchesPassword(String rawPassword, String encodedPassword) + { + BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder(); + return passwordEncoder.matches(rawPassword, encodedPassword); + } + + /** + * 是否为管理员 + * + * @param userId 用户ID + * @return 结果 + */ + public static boolean isAdmin(Long userId) + { + return userId != null && 1L == userId; + } + + /** + * 获取语言 + * @return + */ + public static String getLanguage(){ + try + { + String language = getLoginUser().getLanguage(); + if (StringUtils.isEmpty(language)){ + return "en-US"; + } + return language; + } + catch (Exception e) + { + return "en-US"; + } + } +} diff --git a/xinda-common/src/main/java/com/xinda/common/utils/ServletUtils.java b/xinda-common/src/main/java/com/xinda/common/utils/ServletUtils.java new file mode 100644 index 0000000..faca9f0 --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/utils/ServletUtils.java @@ -0,0 +1,228 @@ +package com.xinda.common.utils; + +import java.io.IOException; +import java.io.UnsupportedEncodingException; +import java.net.URLDecoder; +import java.net.URLEncoder; +import java.util.Collections; +import java.util.HashMap; +import java.util.Map; +import javax.servlet.ServletRequest; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.servlet.http.HttpSession; + +import cn.hutool.extra.servlet.ServletUtil; +import org.springframework.web.context.request.RequestAttributes; +import org.springframework.web.context.request.RequestContextHolder; +import org.springframework.web.context.request.ServletRequestAttributes; +import com.xinda.common.constant.Constants; +import com.xinda.common.core.text.Convert; + +/** + * 客户端工具类 + * + * @author ruoyi + */ +public class ServletUtils +{ + /** + * 获取String参数 + */ + public static String getParameter(String name) + { + return getRequest().getParameter(name); + } + + /** + * 获取String参数 + */ + public static String getParameter(String name, String defaultValue) + { + return Convert.toStr(getRequest().getParameter(name), defaultValue); + } + + /** + * 获取Integer参数 + */ + public static Integer getParameterToInt(String name) + { + return Convert.toInt(getRequest().getParameter(name)); + } + + /** + * 获取Integer参数 + */ + public static Integer getParameterToInt(String name, Integer defaultValue) + { + return Convert.toInt(getRequest().getParameter(name), defaultValue); + } + + /** + * 获取Boolean参数 + */ + public static Boolean getParameterToBool(String name) + { + return Convert.toBool(getRequest().getParameter(name)); + } + + /** + * 获取Boolean参数 + */ + public static Boolean getParameterToBool(String name, Boolean defaultValue) + { + return Convert.toBool(getRequest().getParameter(name), defaultValue); + } + + /** + * 获得所有请求参数 + * + * @param request 请求对象{@link ServletRequest} + * @return Map + */ + public static Map getParams(ServletRequest request) + { + final Map map = request.getParameterMap(); + return Collections.unmodifiableMap(map); + } + + /** + * 获得所有请求参数 + * + * @param request 请求对象{@link ServletRequest} + * @return Map + */ + public static Map getParamMap(ServletRequest request) + { + Map params = new HashMap<>(); + for (Map.Entry entry : getParams(request).entrySet()) + { + params.put(entry.getKey(), StringUtils.join(entry.getValue(), ",")); + } + return params; + } + + /** + * 获取request + */ + public static HttpServletRequest getRequest() + { + return getRequestAttributes().getRequest(); + } + + /** + * 获取response + */ + public static HttpServletResponse getResponse() + { + return getRequestAttributes().getResponse(); + } + + /** + * 获取session + */ + public static HttpSession getSession() + { + return getRequest().getSession(); + } + + public static ServletRequestAttributes getRequestAttributes() + { + RequestAttributes attributes = RequestContextHolder.getRequestAttributes(); + return (ServletRequestAttributes) attributes; + } + + /** + * 将字符串渲染到客户端 + * + * @param response 渲染对象 + * @param string 待渲染的字符串 + */ + public static void renderString(HttpServletResponse response, String string) + { + try + { + response.setStatus(200); + response.setContentType("application/json"); + response.setCharacterEncoding("utf-8"); + response.getWriter().print(string); + } + catch (IOException e) + { + e.printStackTrace(); + } + } + + /** + * 是否是Ajax异步请求 + * + * @param request + */ + public static boolean isAjaxRequest(HttpServletRequest request) + { + String accept = request.getHeader("accept"); + if (accept != null && accept.contains("application/json")) + { + return true; + } + + String xRequestedWith = request.getHeader("X-Requested-With"); + if (xRequestedWith != null && xRequestedWith.contains("XMLHttpRequest")) + { + return true; + } + + String uri = request.getRequestURI(); + if (StringUtils.inStringIgnoreCase(uri, ".json", ".xml")) + { + return true; + } + + String ajax = request.getParameter("__ajax"); + return StringUtils.inStringIgnoreCase(ajax, "json", "xml"); + } + + /** + * 内容编码 + * + * @param str 内容 + * @return 编码后的内容 + */ + public static String urlEncode(String str) + { + try + { + return URLEncoder.encode(str, Constants.UTF8); + } + catch (UnsupportedEncodingException e) + { + return StringUtils.EMPTY; + } + } + + /** + * 内容解码 + * + * @param str 内容 + * @return 解码后的内容 + */ + public static String urlDecode(String str) + { + try + { + return URLDecoder.decode(str, Constants.UTF8); + } + catch (UnsupportedEncodingException e) + { + return StringUtils.EMPTY; + } + } + + public static String getClientIP() { + HttpServletRequest request = getRequest(); + if (request == null) { + return null; + } + return ServletUtil.getClientIP(request); + } +} diff --git a/xinda-common/src/main/java/com/xinda/common/utils/StringUtils.java b/xinda-common/src/main/java/com/xinda/common/utils/StringUtils.java new file mode 100644 index 0000000..ffe0983 --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/utils/StringUtils.java @@ -0,0 +1,832 @@ +package com.xinda.common.utils; + +import com.xinda.common.constant.Constants; +import com.xinda.common.core.text.StrFormatter; +import io.netty.buffer.ByteBuf; +import io.netty.buffer.ByteBufUtil; +import org.apache.commons.collections4.MapUtils; +import org.springframework.util.AntPathMatcher; + +import java.util.*; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +/** + * 字符串工具类 + * + * @author ruoyi + */ +public class StringUtils extends org.apache.commons.lang3.StringUtils { + /** + * 空字符串 + */ + private static final String NULLSTR = ""; + + /** + * 下划线 + */ + private static final char SEPARATOR = '_'; + + /** + * 获取参数不为空值 + * + * @param value defaultValue 要判断的value + * @return value 返回值 + */ + public static T nvl(T value, T defaultValue) { + return value != null ? value : defaultValue; + } + + /** + * * 判断一个Collection是否为空, 包含List,Set,Queue + * + * @param coll 要判断的Collection + * @return true:为空 false:非空 + */ + public static boolean isEmpty(Collection coll) { + return isNull(coll) || coll.isEmpty(); + } + + /** + * * 判断一个Collection是否非空,包含List,Set,Queue + * + * @param coll 要判断的Collection + * @return true:非空 false:空 + */ + public static boolean isNotEmpty(Collection coll) { + return !isEmpty(coll); + } + + /** + * * 判断一个对象数组是否为空 + * + * @param objects 要判断的对象数组 + * * @return true:为空 false:非空 + */ + public static boolean isEmpty(Object[] objects) { + return isNull(objects) || (objects.length == 0); + } + + /** + * * 判断一个对象数组是否非空 + * + * @param objects 要判断的对象数组 + * @return true:非空 false:空 + */ + public static boolean isNotEmpty(Object[] objects) { + return !isEmpty(objects); + } + + /** + * * 判断一个Map是否为空 + * + * @param map 要判断的Map + * @return true:为空 false:非空 + */ + public static boolean isEmpty(Map map) { + return isNull(map) || map.isEmpty(); + } + + /** + * * 判断一个Map是否为空 + * + * @param map 要判断的Map + * @return true:非空 false:空 + */ + public static boolean isNotEmpty(Map map) { + return !isEmpty(map); + } + + /** + * * 判断一个字符串是否为空串 + * + * @param str String + * @return true:为空 false:非空 + */ + public static boolean isEmpty(String str) { + return isNull(str) || NULLSTR.equals(str.trim()); + } + + /** + * * 判断一个字符串是否为非空串 + * + * @param str String + * @return true:非空串 false:空串 + */ + public static boolean isNotEmpty(String str) { + return !isEmpty(str); + } + + /** + * * 判断一个对象是否为空 + * + * @param object Object + * @return true:为空 false:非空 + */ + public static boolean isNull(Object object) { + return object == null; + } + + /** + * * 判断一个对象是否非空 + * + * @param object Object + * @return true:非空 false:空 + */ + public static boolean isNotNull(Object object) { + return !isNull(object); + } + + /** + * * 判断一个对象是否是数组类型(Java基本型别的数组) + * + * @param object 对象 + * @return true:是数组 false:不是数组 + */ + public static boolean isArray(Object object) { + return isNotNull(object) && object.getClass().isArray(); + } + + /** + * 去空格 + */ + public static String trim(String str) { + return (str == null ? "" : str.trim()); + } + + /** + * 截取字符串 + * + * @param str 字符串 + * @param start 开始 + * @return 结果 + */ + public static String substring(final String str, int start) { + if (str == null) { + return NULLSTR; + } + + if (start < 0) { + start = str.length() + start; + } + + if (start < 0) { + start = 0; + } + if (start > str.length()) { + return NULLSTR; + } + + return str.substring(start); + } + + /** + * 截取字符串 + * + * @param str 字符串 + * @param start 开始 + * @param end 结束 + * @return 结果 + */ + public static String substring(final String str, int start, int end) { + if (str == null) { + return NULLSTR; + } + + if (end < 0) { + end = str.length() + end; + } + if (start < 0) { + start = str.length() + start; + } + + if (end > str.length()) { + end = str.length(); + } + + if (start > end) { + return NULLSTR; + } + + if (start < 0) { + start = 0; + } + if (end < 0) { + end = 0; + } + + return str.substring(start, end); + } + + /** + * 格式化文本, {} 表示占位符
+ * 此方法只是简单将占位符 {} 按照顺序替换为参数
+ * 如果想输出 {} 使用 \\转义 { 即可,如果想输出 {} 之前的 \ 使用双转义符 \\\\ 即可
+ * 例:
+ * 通常使用:format("this is {} for {}", "a", "b") -> this is a for b
+ * 转义{}: format("this is \\{} for {}", "a", "b") -> this is \{} for a
+ * 转义\: format("this is \\\\{} for {}", "a", "b") -> this is \a for b
+ * + * @param template 文本模板,被替换的部分用 {} 表示 + * @param params 参数值 + * @return 格式化后的文本 + */ + public static String format(String template, Object... params) { + if (isEmpty(params) || isEmpty(template)) { + return template; + } + return StrFormatter.format(template, params); + } + + /** + * 是否为http(s)://开头 + * + * @param link 链接 + * @return 结果 + */ + public static boolean ishttp(String link) { + return StringUtils.startsWithAny(link, Constants.HTTP, Constants.HTTPS); + } + + /** + * 字符串转set + * + * @param str 字符串 + * @param sep 分隔符 + * @return set集合 + */ + public static final Set str2Set(String str, String sep) { + return new HashSet(str2List(str, sep, true, false)); + } + + /** + * 字符串转list + * + * @param str 字符串 + * @param sep 分隔符 + * @param filterBlank 过滤纯空白 + * @param trim 去掉首尾空白 + * @return list集合 + */ + public static final List str2List(String str, String sep, boolean filterBlank, boolean trim) { + List list = new ArrayList(); + if (StringUtils.isEmpty(str)) { + return list; + } + + // 过滤空白字符串 + if (filterBlank && StringUtils.isBlank(str)) { + return list; + } + String[] split = str.split(sep); + for (String string : split) { + if (filterBlank && StringUtils.isBlank(string)) { + continue; + } + if (trim) { + string = string.trim(); + } + list.add(string); + } + + return list; + } + + /** + * 判断给定的set列表中是否包含数组array 判断给定的数组array中是否包含给定的元素value + * + * @param set 给定的集合 + * @param array 给定的数组 + * @return boolean 结果 + */ + public static boolean containsAny(Collection collection, String... array) { + if (isEmpty(collection) || isEmpty(array)) { + return false; + } else { + for (String str : array) { + if (collection.contains(str)) { + return true; + } + } + return false; + } + } + + /** + * 查找指定字符串是否包含指定字符串列表中的任意一个字符串同时串忽略大小写 + * + * @param cs 指定字符串 + * @param searchCharSequences 需要检查的字符串数组 + * @return 是否包含任意一个字符串 + */ + public static boolean containsAnyIgnoreCase(CharSequence cs, CharSequence... searchCharSequences) { + if (isEmpty(cs) || isEmpty(searchCharSequences)) { + return false; + } + for (CharSequence testStr : searchCharSequences) { + if (containsIgnoreCase(cs, testStr)) { + return true; + } + } + return false; + } + + /** + * 驼峰转下划线命名 + */ + public static String toUnderScoreCase(String str) { + if (str == null) { + return null; + } + StringBuilder sb = new StringBuilder(); + // 前置字符是否大写 + boolean preCharIsUpperCase = true; + // 当前字符是否大写 + boolean curreCharIsUpperCase = true; + // 下一字符是否大写 + boolean nexteCharIsUpperCase = true; + for (int i = 0; i < str.length(); i++) { + char c = str.charAt(i); + if (i > 0) { + preCharIsUpperCase = Character.isUpperCase(str.charAt(i - 1)); + } else { + preCharIsUpperCase = false; + } + + curreCharIsUpperCase = Character.isUpperCase(c); + + if (i < (str.length() - 1)) { + nexteCharIsUpperCase = Character.isUpperCase(str.charAt(i + 1)); + } + + if (preCharIsUpperCase && curreCharIsUpperCase && !nexteCharIsUpperCase) { + sb.append(SEPARATOR); + } else if ((i != 0 && !preCharIsUpperCase) && curreCharIsUpperCase) { + sb.append(SEPARATOR); + } + sb.append(Character.toLowerCase(c)); + } + + return sb.toString(); + } + + /** + * 是否包含字符串 + * + * @param str 验证字符串 + * @param strs 字符串组 + * @return 包含返回true + */ + public static boolean inStringIgnoreCase(String str, String... strs) { + if (str != null && strs != null) { + for (String s : strs) { + if (str.equalsIgnoreCase(trim(s))) { + return true; + } + } + } + return false; + } + + /** + * 将下划线大写方式命名的字符串转换为驼峰式。如果转换前的下划线大写方式命名的字符串为空,则返回空字符串。 例如:HELLO_WORLD->HelloWorld + * + * @param name 转换前的下划线大写方式命名的字符串 + * @return 转换后的驼峰式命名的字符串 + */ + public static String convertToCamelCase(String name) { + StringBuilder result = new StringBuilder(); + // 快速检查 + if (name == null || name.isEmpty()) { + // 没必要转换 + return ""; + } else if (!name.contains("_")) { + // 不含下划线,仅将首字母大写 + return name.substring(0, 1).toUpperCase() + name.substring(1); + } + // 用下划线将原始字符串分割 + String[] camels = name.split("_"); + for (String camel : camels) { + // 跳过原始字符串中开头、结尾的下换线或双重下划线 + if (camel.isEmpty()) { + continue; + } + // 首字母大写 + result.append(camel.substring(0, 1).toUpperCase()); + result.append(camel.substring(1).toLowerCase()); + } + return result.toString(); + } + + /** + * 驼峰式命名法 例如:user_name->userName + */ + public static String toCamelCase(String s) { + if (s == null) { + return null; + } + s = s.toLowerCase(); + StringBuilder sb = new StringBuilder(s.length()); + boolean upperCase = false; + for (int i = 0; i < s.length(); i++) { + char c = s.charAt(i); + + if (c == SEPARATOR) { + upperCase = true; + } else if (upperCase) { + sb.append(Character.toUpperCase(c)); + upperCase = false; + } else { + sb.append(c); + } + } + return sb.toString(); + } + + /** + * 查找指定字符串是否匹配指定字符串列表中的任意一个字符串 + * + * @param str 指定字符串 + * @param strs 需要检查的字符串数组 + * @return 是否匹配 + */ + public static boolean matches(String str, List strs) { + if (isEmpty(str) || isEmpty(strs)) { + return false; + } + for (String pattern : strs) { + if (isMatch(pattern, str)) { + return true; + } + } + return false; + } + + /** + * 判断url是否与规则配置: + * ? 表示单个字符; + * * 表示一层路径内的任意字符串,不可跨层级; + * ** 表示任意层路径; + * + * @param pattern 匹配规则 + * @param url 需要匹配的url + * @return + */ + public static boolean isMatch(String pattern, String url) { + AntPathMatcher matcher = new AntPathMatcher(); + return matcher.match(pattern, url); + } + + @SuppressWarnings("unchecked") + public static T cast(Object obj) { + return (T) obj; + } + + /** + * 数字左边补齐0,使之达到指定长度。注意,如果数字转换为字符串后,长度大于size,则只保留 最后size个字符。 + * + * @param num 数字对象 + * @param size 字符串指定长度 + * @return 返回数字的字符串格式,该字符串为指定长度。 + */ + public static final String padl(final Number num, final int size) { + return padl(num.toString(), size, '0'); + } + + /** + * 字符串左补齐。如果原始字符串s长度大于size,则只保留最后size个字符。 + * + * @param s 原始字符串 + * @param size 字符串指定长度 + * @param c 用于补齐的字符 + * @return 返回指定长度的字符串,由原字符串左补齐或截取得到。 + */ + public static final String padl(final String s, final int size, final char c) { + final StringBuilder sb = new StringBuilder(size); + if (s != null) { + final int len = s.length(); + if (s.length() <= size) { + for (int i = size - len; i > 0; i--) { + sb.append(c); + } + sb.append(s); + } else { + return s.substring(len - size, len); + } + } else { + for (int i = size; i > 0; i--) { + sb.append(c); + } + } + return sb.toString(); + } + + /*将字符串转小写,首字母大写,其他小写*/ + public static String upperCase(String str) { + char[] ch = str.toLowerCase().toCharArray(); + if (ch[0] >= 'a' && ch[0] <= 'z') { + ch[0] = (char) (ch[0] - 32); + } + return new String(ch); + } + + public static String toString(Object value) { + if (value == null) { + return "null"; + } + if (value instanceof ByteBuf) { + return ByteBufUtil.hexDump((ByteBuf) value); + } + if (!value.getClass().isArray()) { + return value.toString(); + } + + StringBuilder root = new StringBuilder(32); + toString(value, root); + return root.toString(); + } + + public static StringBuilder toString(Object value, StringBuilder builder) { + if (value == null) { + return builder; + } + + builder.append('['); + int start = builder.length(); + + if (value instanceof long[]) { + long[] array = (long[]) value; + for (long t : array) { + builder.append(t).append(','); + } + + } else if (value instanceof int[]) { + int[] array = (int[]) value; + for (int t : array) { + builder.append(t).append(','); + } + + } else if (value instanceof short[]) { + short[] array = (short[]) value; + for (short t : array) { + builder.append(t).append(','); + } + + } else if (value instanceof byte[]) { + byte[] array = (byte[]) value; + for (byte t : array) { + builder.append(t).append(','); + } + + } else if (value instanceof char[]) { + char[] array = (char[]) value; + for (char t : array) { + builder.append(t).append(','); + } + + } else if (value instanceof double[]) { + double[] array = (double[]) value; + for (double t : array) { + builder.append(t).append(','); + } + + } else if (value instanceof float[]) { + float[] array = (float[]) value; + for (float t : array) { + builder.append(t).append(','); + } + + } else if (value instanceof boolean[]) { + boolean[] array = (boolean[]) value; + for (boolean t : array) { + builder.append(t).append(','); + } + + } else if (value instanceof String[]) { + String[] array = (String[]) value; + for (String t : array) { + builder.append(t).append(','); + } + + } else if (isArray1(value)) { + Object[] array = (Object[]) value; + for (Object t : array) { + toString(t, builder).append(','); + } + + } else if (value instanceof Object[]) { + Object[] array = (Object[]) value; + for (Object t : array) { + builder.append(t).append(','); + } + } + + int end = builder.length(); + if (end <= start) { + builder.append(']'); + } else { + builder.setCharAt(end - 1, ']'); + } + return builder; + } + + private static boolean isArray1(Object value) { + Class componentType = value.getClass().getComponentType(); + if (componentType == null) { + return false; + } + return componentType.isArray(); + } + + public static String leftPad(String str, int size, char ch) { + int length = str.length(); + int pads = size - length; + if (pads > 0) { + char[] result = new char[size]; + str.getChars(0, length, result, pads); + while (pads > 0) { + result[--pads] = ch; + } + return new String(result); + } + return str; + } + + /** + * 获取字符串中的数字 + * @param str + * @return + */ + public static Integer matcherNum(String str){ + Pattern pattern = Pattern.compile("\\d+"); + Matcher matcher = pattern.matcher(str); + while (matcher.find()){ + return Integer.parseInt(matcher.group()); + } + return 0; + } + + /** + * 获取字符串中的变量 + * @param variable 变量标识符合 + * @param: str 内容 + * @return java.util.List + */ + public static List getVariables(String variable, String str) { + List variables = new ArrayList<>(); + Pattern pattern = null; + switch (variable) { + case "${}": + pattern = Pattern.compile("\\$\\{([^}]+)}"); + break; + case "{{}}": + pattern = Pattern.compile("\\{\\{([^}]+)}}"); + break; + case "{}": + pattern = Pattern.compile("\\{([^}]+)}"); + break; + case "#{}": + pattern = Pattern.compile("#\\{([^}]+)}"); + break; + default: + break; + } + assert pattern != null; + Matcher matcher = pattern.matcher(str); + while (matcher.find()) { + variables.add(matcher.group(1)); + } + return variables; + } + + /** + * 获取微信小程序变量 + * @param content 内容 + * @return java.util.List + */ + public static List getWeChatMiniVariables(String content) { + List variables = new ArrayList<>(); + Pattern pattern = Pattern.compile("\\{\\{([^}]+)}}"); + Matcher matcher = pattern.matcher(content); + while (matcher.find()) { + variables.add(matcher.group(1).replace(".DATA", "")); + } + return variables; + } + + /** + * 将字符串text中由openToken和closeToken组成的占位符依次替换为args数组中的值 + * @param openToken + * @param closeToken + * @param text + * @param args + * @return + */ + public static String parse(String openToken, String closeToken, String text, Object... args) { + if (args == null || args.length <= 0) { + return text; + } + int argsIndex = 0; + + if (text == null || text.isEmpty()) { + return ""; + } + char[] src = text.toCharArray(); + int offset = 0; + // search open token + int start = text.indexOf(openToken, offset); + if (start == -1) { + return text; + } + final StringBuilder builder = new StringBuilder(); + StringBuilder expression = null; + while (start > -1) { + if (start > 0 && src[start - 1] == '\\') { + // this open token is escaped. remove the backslash and continue. + builder.append(src, offset, start - offset - 1).append(openToken); + offset = start + openToken.length(); + } else { + // found open token. let's search close token. + if (expression == null) { + expression = new StringBuilder(); + } else { + expression.setLength(0); + } + builder.append(src, offset, start - offset); + offset = start + openToken.length(); + int end = text.indexOf(closeToken, offset); + while (end > -1) { + if (end > offset && src[end - 1] == '\\') { + // this close token is escaped. remove the backslash and continue. + expression.append(src, offset, end - offset - 1).append(closeToken); + offset = end + closeToken.length(); + end = text.indexOf(closeToken, offset); + } else { + expression.append(src, offset, end - offset); + offset = end + closeToken.length(); + break; + } + } + if (end == -1) { + // close token was not found. + builder.append(src, start, src.length - start); + offset = src.length; + } else { + ///////////////////////////////////////仅仅修改了该else分支下的个别行代码//////////////////////// + + String value = (argsIndex <= args.length - 1) ? + (args[argsIndex] == null ? "" : args[argsIndex].toString()) : expression.toString(); + builder.append(value); + offset = end + closeToken.length(); + argsIndex++; + //////////////////////////////////////////////////////////////////////////////////////////////// + } + } + start = text.indexOf(openToken, offset); + } + if (offset < src.length) { + builder.append(src, offset, src.length - offset); + } + return builder.toString(); + } + + // + public static String reverse(String str) { + return new StringBuilder(str).reverse().toString(); + } + + /** + * @description: 替换 ${variable} + * @author fastb + * @date 2023-12-26 15:35 + * @version 1.0 + */ + public static String parseVariable(String text, Object... args) { + return parse("${", "}", text, args); + } + + public static String strReplaceVariable(String openIndex, String closeIndex, String content, LinkedHashMap map) { + if (StringUtils.isEmpty(content) || MapUtils.isEmpty(map)) { + return content; + } + StringBuilder sendContent = new StringBuilder(content); + for (Map.Entry m : map.entrySet()) { + sendContent = new StringBuilder(sendContent.toString().replace(openIndex + m.getKey() + closeIndex, m.getValue())); + } + return sendContent.toString(); + } + + public static List splitEvenly(String str, int size) { + List parts = new ArrayList<>(); + int length = str.length(); + if (size > length || size <= 0) { + throw new IllegalArgumentException("Size is too large or too small."); + } + + for (int i = 0; i < length; i += size) { + parts.add(str.substring(i, Math.min(length, i + size))); + } + + return parts; + } +} diff --git a/xinda-common/src/main/java/com/xinda/common/utils/Threads.java b/xinda-common/src/main/java/com/xinda/common/utils/Threads.java new file mode 100644 index 0000000..7fb4b48 --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/utils/Threads.java @@ -0,0 +1,99 @@ +package com.xinda.common.utils; + +import java.util.concurrent.CancellationException; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Future; +import java.util.concurrent.TimeUnit; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * 线程相关工具类. + * + * @author ruoyi + */ +public class Threads +{ + private static final Logger logger = LoggerFactory.getLogger(Threads.class); + + /** + * sleep等待,单位为毫秒 + */ + public static void sleep(long milliseconds) + { + try + { + Thread.sleep(milliseconds); + } + catch (InterruptedException e) + { + return; + } + } + + /** + * 停止线程池 + * 先使用shutdown, 停止接收新任务并尝试完成所有已存在任务. + * 如果超时, 则调用shutdownNow, 取消在workQueue中Pending的任务,并中断所有阻塞函数. + * 如果仍然超時,則強制退出. + * 另对在shutdown时线程本身被调用中断做了处理. + */ + public static void shutdownAndAwaitTermination(ExecutorService pool) + { + if (pool != null && !pool.isShutdown()) + { + pool.shutdown(); + try + { + if (!pool.awaitTermination(120, TimeUnit.SECONDS)) + { + pool.shutdownNow(); + if (!pool.awaitTermination(120, TimeUnit.SECONDS)) + { + logger.info("Pool did not terminate"); + } + } + } + catch (InterruptedException ie) + { + pool.shutdownNow(); + Thread.currentThread().interrupt(); + } + } + } + + /** + * 打印线程异常信息 + */ + public static void printException(Runnable r, Throwable t) + { + if (t == null && r instanceof Future) + { + try + { + Future future = (Future) r; + if (future.isDone()) + { + future.get(); + } + } + catch (CancellationException ce) + { + t = ce; + } + catch (ExecutionException ee) + { + t = ee.getCause(); + } + catch (InterruptedException ie) + { + Thread.currentThread().interrupt(); + } + } + if (t != null) + { + logger.error(t.getMessage(), t); + } + } +} diff --git a/xinda-common/src/main/java/com/xinda/common/utils/ValidationUtils.java b/xinda-common/src/main/java/com/xinda/common/utils/ValidationUtils.java new file mode 100644 index 0000000..e47c89c --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/utils/ValidationUtils.java @@ -0,0 +1,62 @@ +package com.xinda.common.utils; + +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.lang.Assert; +import org.springframework.util.StringUtils; + +import javax.validation.ConstraintViolation; +import javax.validation.ConstraintViolationException; +import javax.validation.Validation; +import javax.validation.Validator; +import java.util.Set; +import java.util.regex.Pattern; + +/** + * 校验工具类 + * + * @author xinda + */ +public class ValidationUtils { + + private static final Pattern PATTERN_MOBILE = Pattern.compile("^(?:(?:\\+|00)86)?1(?:(?:3[\\d])|(?:4[0,1,4-9])|(?:5[0-3,5-9])|(?:6[2,5-7])|(?:7[0-8])|(?:8[\\d])|(?:9[0-3,5-9]))\\d{8}$"); + + private static final Pattern PATTERN_URL = Pattern.compile("^(https?|ftp|file)://[-a-zA-Z0-9+&@#/%?=~_|!:,.;]*[-a-zA-Z0-9+&@#/%=~_|]"); + + private static final Pattern PATTERN_XML_NCNAME = Pattern.compile("[a-zA-Z_][\\-_.0-9_a-zA-Z$]*"); + + private static final Pattern PATTERN_EMAIL = Pattern.compile("^(\\w+([-.][A-Za-z0-9]+)*){3,18}@\\w+([-.][A-Za-z0-9]+)*\\.\\w+([-.][A-Za-z0-9]+)*$"); + + public static boolean isMobile(String mobile) { + return StringUtils.hasText(mobile) + && PATTERN_MOBILE.matcher(mobile).matches(); + } + + public static boolean isURL(String url) { + return StringUtils.hasText(url) + && PATTERN_URL.matcher(url).matches(); + } + + public static boolean isXmlNCName(String str) { + return StringUtils.hasText(str) + && PATTERN_XML_NCNAME.matcher(str).matches(); + } + + public static boolean isEmail(String email) { + return StringUtils.hasText(email) + && PATTERN_EMAIL.matcher(email).matches(); + } + + public static void validate(Object object, Class... groups) { + Validator validator = Validation.buildDefaultValidatorFactory().getValidator(); + Assert.notNull(validator); + validate(validator, object, groups); + } + + public static void validate(Validator validator, Object object, Class... groups) { + Set> constraintViolations = validator.validate(object, groups); + if (CollUtil.isNotEmpty(constraintViolations)) { + throw new ConstraintViolationException(constraintViolations); + } + } + +} diff --git a/xinda-common/src/main/java/com/xinda/common/utils/VerifyCodeUtils.java b/xinda-common/src/main/java/com/xinda/common/utils/VerifyCodeUtils.java new file mode 100644 index 0000000..036ce3b --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/utils/VerifyCodeUtils.java @@ -0,0 +1,228 @@ +package com.xinda.common.utils; + +import java.awt.Color; +import java.awt.Font; +import java.awt.Graphics; +import java.awt.Graphics2D; +import java.awt.RenderingHints; +import java.awt.geom.AffineTransform; +import java.awt.image.BufferedImage; +import java.io.IOException; +import java.io.OutputStream; +import java.security.SecureRandom; +import java.util.Arrays; +import java.util.Random; +import javax.imageio.ImageIO; + +/** + * 验证码工具类 + * + * @author ruoyi + */ +public class VerifyCodeUtils +{ + // 使用到Algerian字体,系统里没有的话需要安装字体,字体只显示大写,去掉了1,0,i,o几个容易混淆的字符 + public static final String VERIFY_CODES = "123456789ABCDEFGHJKLMNPQRSTUVWXYZ"; + + private static Random random = new SecureRandom(); + + /** + * 使用系统默认字符源生成验证码 + * + * @param verifySize 验证码长度 + * @return + */ + public static String generateVerifyCode(int verifySize) + { + return generateVerifyCode(verifySize, VERIFY_CODES); + } + + /** + * 使用指定源生成验证码 + * + * @param verifySize 验证码长度 + * @param sources 验证码字符源 + * @return + */ + public static String generateVerifyCode(int verifySize, String sources) + { + if (sources == null || sources.length() == 0) + { + sources = VERIFY_CODES; + } + int codesLen = sources.length(); + Random rand = new Random(System.currentTimeMillis()); + StringBuilder verifyCode = new StringBuilder(verifySize); + for (int i = 0; i < verifySize; i++) + { + verifyCode.append(sources.charAt(rand.nextInt(codesLen - 1))); + } + return verifyCode.toString(); + } + + /** + * 输出指定验证码图片流 + * + * @param w + * @param h + * @param os + * @param code + * @throws IOException + */ + public static void outputImage(int w, int h, OutputStream os, String code) throws IOException + { + int verifySize = code.length(); + BufferedImage image = new BufferedImage(w, h, BufferedImage.TYPE_INT_RGB); + Random rand = new Random(); + Graphics2D g2 = image.createGraphics(); + g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); + Color[] colors = new Color[5]; + Color[] colorSpaces = new Color[] { Color.WHITE, Color.CYAN, Color.GRAY, Color.LIGHT_GRAY, Color.MAGENTA, + Color.ORANGE, Color.PINK, Color.YELLOW }; + float[] fractions = new float[colors.length]; + for (int i = 0; i < colors.length; i++) + { + colors[i] = colorSpaces[rand.nextInt(colorSpaces.length)]; + fractions[i] = rand.nextFloat(); + } + Arrays.sort(fractions); + + g2.setColor(Color.GRAY);// 设置边框色 + g2.fillRect(0, 0, w, h); + + Color c = getRandColor(200, 250); + g2.setColor(c);// 设置背景色 + g2.fillRect(0, 2, w, h - 4); + + // 绘制干扰线 + Random random = new Random(); + g2.setColor(getRandColor(160, 200));// 设置线条的颜色 + for (int i = 0; i < 20; i++) + { + int x = random.nextInt(w - 1); + int y = random.nextInt(h - 1); + int xl = random.nextInt(6) + 1; + int yl = random.nextInt(12) + 1; + g2.drawLine(x, y, x + xl + 40, y + yl + 20); + } + + // 添加噪点 + float yawpRate = 0.05f;// 噪声率 + int area = (int) (yawpRate * w * h); + for (int i = 0; i < area; i++) + { + int x = random.nextInt(w); + int y = random.nextInt(h); + int rgb = getRandomIntColor(); + image.setRGB(x, y, rgb); + } + + shear(g2, w, h, c);// 使图片扭曲 + + g2.setColor(getRandColor(100, 160)); + int fontSize = h - 4; + Font font = new Font("Algerian", Font.ITALIC, fontSize); + g2.setFont(font); + char[] chars = code.toCharArray(); + for (int i = 0; i < verifySize; i++) + { + AffineTransform affine = new AffineTransform(); + affine.setToRotation(Math.PI / 4 * rand.nextDouble() * (rand.nextBoolean() ? 1 : -1), + (w / verifySize) * i + fontSize / 2, h / 2); + g2.setTransform(affine); + g2.drawChars(chars, i, 1, ((w - 10) / verifySize) * i + 5, h / 2 + fontSize / 2 - 10); + } + + g2.dispose(); + ImageIO.write(image, "jpg", os); + } + + private static Color getRandColor(int fc, int bc) + { + if (fc > 255) { + fc = 255; + } + if (bc > 255) { + bc = 255; + } + int r = fc + random.nextInt(bc - fc); + int g = fc + random.nextInt(bc - fc); + int b = fc + random.nextInt(bc - fc); + return new Color(r, g, b); + } + + private static int getRandomIntColor() + { + int[] rgb = getRandomRgb(); + int color = 0; + for (int c : rgb) + { + color = color << 8; + color = color | c; + } + return color; + } + + private static int[] getRandomRgb() + { + int[] rgb = new int[3]; + for (int i = 0; i < 3; i++) + { + rgb[i] = random.nextInt(255); + } + return rgb; + } + + private static void shear(Graphics g, int w1, int h1, Color color) + { + shearX(g, w1, h1, color); + shearY(g, w1, h1, color); + } + + private static void shearX(Graphics g, int w1, int h1, Color color) + { + + int period = random.nextInt(2); + + boolean borderGap = true; + int frames = 1; + int phase = random.nextInt(2); + + for (int i = 0; i < h1; i++) + { + double d = (double) (period >> 1) + * Math.sin((double) i / (double) period + (6.2831853071795862D * (double) phase) / (double) frames); + g.copyArea(0, i, w1, 1, (int) d, 0); + if (borderGap) + { + g.setColor(color); + g.drawLine((int) d, i, 0, i); + g.drawLine((int) d + w1, i, w1, i); + } + } + + } + + private static void shearY(Graphics g, int w1, int h1, Color color) + { + + int period = random.nextInt(40) + 10; // 50; + + boolean borderGap = true; + int frames = 20; + int phase = 7; + for (int i = 0; i < w1; i++) + { + double d = (double) (period >> 1) + * Math.sin((double) i / (double) period + (6.2831853071795862D * (double) phase) / (double) frames); + g.copyArea(i, 0, 1, h1, 0, (int) d); + if (borderGap) + { + g.setColor(color); + g.drawLine(i, (int) d, i, 0); + g.drawLine(i, (int) d + h1, i, h1); + } + + } + } +} \ No newline at end of file diff --git a/xinda-common/src/main/java/com/xinda/common/utils/bean/BeanUtils.java b/xinda-common/src/main/java/com/xinda/common/utils/bean/BeanUtils.java new file mode 100644 index 0000000..4ac1b9c --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/utils/bean/BeanUtils.java @@ -0,0 +1,110 @@ +package com.xinda.common.utils.bean; + +import java.lang.reflect.Method; +import java.util.ArrayList; +import java.util.List; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +/** + * Bean 工具类 + * + * @author ruoyi + */ +public class BeanUtils extends org.springframework.beans.BeanUtils +{ + /** Bean方法名中属性名开始的下标 */ + private static final int BEAN_METHOD_PROP_INDEX = 3; + + /** * 匹配getter方法的正则表达式 */ + private static final Pattern GET_PATTERN = Pattern.compile("get(\\p{javaUpperCase}\\w*)"); + + /** * 匹配setter方法的正则表达式 */ + private static final Pattern SET_PATTERN = Pattern.compile("set(\\p{javaUpperCase}\\w*)"); + + /** + * Bean属性复制工具方法。 + * + * @param dest 目标对象 + * @param src 源对象 + */ + public static void copyBeanProp(Object dest, Object src) + { + try + { + copyProperties(src, dest); + } + catch (Exception e) + { + e.printStackTrace(); + } + } + + /** + * 获取对象的setter方法。 + * + * @param obj 对象 + * @return 对象的setter方法列表 + */ + public static List getSetterMethods(Object obj) + { + // setter方法列表 + List setterMethods = new ArrayList(); + + // 获取所有方法 + Method[] methods = obj.getClass().getMethods(); + + // 查找setter方法 + + for (Method method : methods) + { + Matcher m = SET_PATTERN.matcher(method.getName()); + if (m.matches() && (method.getParameterTypes().length == 1)) + { + setterMethods.add(method); + } + } + // 返回setter方法列表 + return setterMethods; + } + + /** + * 获取对象的getter方法。 + * + * @param obj 对象 + * @return 对象的getter方法列表 + */ + + public static List getGetterMethods(Object obj) + { + // getter方法列表 + List getterMethods = new ArrayList(); + // 获取所有方法 + Method[] methods = obj.getClass().getMethods(); + // 查找getter方法 + for (Method method : methods) + { + Matcher m = GET_PATTERN.matcher(method.getName()); + if (m.matches() && (method.getParameterTypes().length == 0)) + { + getterMethods.add(method); + } + } + // 返回getter方法列表 + return getterMethods; + } + + /** + * 检查Bean方法名中的属性名是否相等。
+ * 如getName()和setName()属性名一样,getName()和setAge()属性名不一样。 + * + * @param m1 方法名1 + * @param m2 方法名2 + * @return 属性名一样返回true,否则返回false + */ + + public static boolean isMethodPropEquals(String m1, String m2) + { + return m1.substring(BEAN_METHOD_PROP_INDEX).equals(m2.substring(BEAN_METHOD_PROP_INDEX)); + } +} diff --git a/xinda-common/src/main/java/com/xinda/common/utils/bean/BeanValidators.java b/xinda-common/src/main/java/com/xinda/common/utils/bean/BeanValidators.java new file mode 100644 index 0000000..b7aaef1 --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/utils/bean/BeanValidators.java @@ -0,0 +1,24 @@ +package com.xinda.common.utils.bean; + +import java.util.Set; +import javax.validation.ConstraintViolation; +import javax.validation.ConstraintViolationException; +import javax.validation.Validator; + +/** + * bean对象属性验证 + * + * @author ruoyi + */ +public class BeanValidators +{ + public static void validateWithException(Validator validator, Object object, Class... groups) + throws ConstraintViolationException + { + Set> constraintViolations = validator.validate(object, groups); + if (!constraintViolations.isEmpty()) + { + throw new ConstraintViolationException(constraintViolations); + } + } +} diff --git a/xinda-common/src/main/java/com/xinda/common/utils/collection/CollectionUtils.java b/xinda-common/src/main/java/com/xinda/common/utils/collection/CollectionUtils.java new file mode 100644 index 0000000..7e8f44e --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/utils/collection/CollectionUtils.java @@ -0,0 +1,268 @@ +package com.xinda.common.utils.collection; + +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.collection.CollectionUtil; + +import java.util.*; +import java.util.function.BinaryOperator; +import java.util.function.Function; +import java.util.function.Predicate; +import java.util.function.Supplier; +import java.util.stream.Collectors; + +/** + * @author gsb + * @date 2022/9/15 16:52 + */ +public class CollectionUtils { + + /*数组复制*/ + public static String[] copy(String[] source){ + if(isEmpty(source)){ + return null; + } + int len = source.length; + String[] arr = new String[len]; + for(int i=0; i < len; i ++){ + arr[i] = source[i]; + } + return arr; + } + + + /*数组连接*/ + public static String concat(String[] source, String split){ + if(isEmpty(source)){ + return null; + } + String result = ""; + for(int i=0; i < source.length; i ++){ + result = result.concat(source[i]); + if(i != source.length - 1){ + result = result.concat(split); + } + } + return result; + } + + public static boolean isEmpty(String[] source){ + if(null == source){ + return true; + } + if(0 == source.length){ + return true; + } + return false; + } + + public static boolean containsAny(Object source, Object... targets) { + return Arrays.asList(targets).contains(source); + } + + public static boolean isAnyEmpty(Collection... collections) { + return Arrays.stream(collections).anyMatch(CollectionUtil::isEmpty); + } + + public static List filterList(Collection from, Predicate predicate) { + if (CollUtil.isEmpty(from)) { + return new ArrayList<>(); + } + return from.stream().filter(predicate).collect(Collectors.toList()); + } + + public static List distinct(Collection from, Function keyMapper) { + if (CollUtil.isEmpty(from)) { + return new ArrayList<>(); + } + return distinct(from, keyMapper, (t1, t2) -> t1); + } + + public static List distinct(Collection from, Function keyMapper, BinaryOperator cover) { + if (CollUtil.isEmpty(from)) { + return new ArrayList<>(); + } + return new ArrayList<>(convertMap(from, keyMapper, Function.identity(), cover).values()); + } + + public static List convertList(Collection from, Function func) { + if (CollUtil.isEmpty(from)) { + return new ArrayList<>(); + } + return from.stream().map(func).filter(Objects::nonNull).collect(Collectors.toList()); + } + + public static List convertList(Collection from, Function func, Predicate filter) { + if (CollUtil.isEmpty(from)) { + return new ArrayList<>(); + } + return from.stream().filter(filter).map(func).filter(Objects::nonNull).collect(Collectors.toList()); + } + + public static Set convertSet(Collection from, Function func) { + if (CollUtil.isEmpty(from)) { + return new HashSet<>(); + } + return from.stream().map(func).filter(Objects::nonNull).collect(Collectors.toSet()); + } + + public static Set convertSet(Collection from, Function func, Predicate filter) { + if (CollUtil.isEmpty(from)) { + return new HashSet<>(); + } + return from.stream().filter(filter).map(func).filter(Objects::nonNull).collect(Collectors.toSet()); + } + + public static Map convertMap(Collection from, Function keyFunc) { + if (CollUtil.isEmpty(from)) { + return new HashMap<>(); + } + return convertMap(from, keyFunc, Function.identity()); + } + + public static Map convertMap(Collection from, Function keyFunc, Supplier> supplier) { + if (CollUtil.isEmpty(from)) { + return supplier.get(); + } + return convertMap(from, keyFunc, Function.identity(), supplier); + } + + public static Map convertMap(Collection from, Function keyFunc, Function valueFunc) { + if (CollUtil.isEmpty(from)) { + return new HashMap<>(); + } + return convertMap(from, keyFunc, valueFunc, (v1, v2) -> v1); + } + + public static Map convertMap(Collection from, Function keyFunc, Function valueFunc, BinaryOperator mergeFunction) { + if (CollUtil.isEmpty(from)) { + return new HashMap<>(); + } + return convertMap(from, keyFunc, valueFunc, mergeFunction, HashMap::new); + } + + public static Map convertMap(Collection from, Function keyFunc, Function valueFunc, Supplier> supplier) { + if (CollUtil.isEmpty(from)) { + return supplier.get(); + } + return convertMap(from, keyFunc, valueFunc, (v1, v2) -> v1, supplier); + } + + public static Map convertMap(Collection from, Function keyFunc, Function valueFunc, BinaryOperator mergeFunction, Supplier> supplier) { + if (CollUtil.isEmpty(from)) { + return new HashMap<>(); + } + return from.stream().collect(Collectors.toMap(keyFunc, valueFunc, mergeFunction, supplier)); + } + + public static Map> convertMultiMap(Collection from, Function keyFunc) { + if (CollUtil.isEmpty(from)) { + return new HashMap<>(); + } + return from.stream().collect(Collectors.groupingBy(keyFunc, Collectors.mapping(t -> t, Collectors.toList()))); + } + + public static Map> convertMultiMap(Collection from, Function keyFunc, Function valueFunc) { + if (CollUtil.isEmpty(from)) { + return new HashMap<>(); + } + return from.stream() + .collect(Collectors.groupingBy(keyFunc, Collectors.mapping(valueFunc, Collectors.toList()))); + } + + // 暂时没想好名字,先以 2 结尾噶 + public static Map> convertMultiMap2(Collection from, Function keyFunc, Function valueFunc) { + if (CollUtil.isEmpty(from)) { + return new HashMap<>(); + } + return from.stream().collect(Collectors.groupingBy(keyFunc, Collectors.mapping(valueFunc, Collectors.toSet()))); + } + + + public static boolean containsAny(Collection source, Collection candidates) { + return org.springframework.util.CollectionUtils.containsAny(source, candidates); + } + + public static T getFirst(List from) { + return !CollectionUtil.isEmpty(from) ? from.get(0) : null; + } + + public static T findFirst(List from, Predicate predicate) { + if (CollUtil.isEmpty(from)) { + return null; + } + return from.stream().filter(predicate).findFirst().orElse(null); + } + + public static > V getMaxValue(List from, Function valueFunc) { + if (CollUtil.isEmpty(from)) { + return null; + } + assert from.size() > 0; // 断言,避免告警 + T t = from.stream().max(Comparator.comparing(valueFunc)).get(); + return valueFunc.apply(t); + } + + public static > V getMinValue(List from, Function valueFunc) { + if (CollUtil.isEmpty(from)) { + return null; + } + assert from.size() > 0; // 断言,避免告警 + T t = from.stream().min(Comparator.comparing(valueFunc)).get(); + return valueFunc.apply(t); + } + + public static > V getSumValue(List from, Function valueFunc, BinaryOperator accumulator) { + if (CollUtil.isEmpty(from)) { + return null; + } + assert from.size() > 0; // 断言,避免告警 + return from.stream().map(valueFunc).reduce(accumulator).get(); + } + + public static void addIfNotNull(Collection coll, T item) { + if (item == null) { + return; + } + coll.add(item); + } + + public static Collection singleton(T deptId) { + return deptId == null ? Collections.emptyList() : Collections.singleton(deptId); + } + + /** + * 开始分页 + * + * @param list 传入的list集合 + * @param pageNum 页码 + * @param pageSize 每页多少条数据 + * @return + */ + public static List startPage(List list, Integer pageNum, + Integer pageSize) { + if (list == null) { + return null; + } + if (list.size() == 0) { + return null; + } + Integer count = list.size(); // 记录总数 + Integer pageCount = 0; // 页数 + if (count % pageSize == 0) { + pageCount = count / pageSize; + } else { + pageCount = count / pageSize + 1; + } + int fromIndex = 0; // 开始索引 + int toIndex = 0; // 结束索引 + if (!pageNum.equals(pageCount)) { + fromIndex = (pageNum - 1) * pageSize; + toIndex = fromIndex + pageSize; + } else { + fromIndex = (pageNum - 1) * pageSize; + toIndex = count; + } + List pageList = list.subList(fromIndex, toIndex); + return pageList; + } +} diff --git a/xinda-common/src/main/java/com/xinda/common/utils/date/DateUtils.java b/xinda-common/src/main/java/com/xinda/common/utils/date/DateUtils.java new file mode 100644 index 0000000..f672e36 --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/utils/date/DateUtils.java @@ -0,0 +1,173 @@ +package com.xinda.common.utils.date; + +import cn.hutool.core.date.LocalDateTimeUtil; + +import java.time.*; +import java.util.Calendar; +import java.util.Date; + +/** + * 时间工具类 + * + * @author xinda + */ +public class DateUtils { + + /** + * 时区 - 默认 + */ + public static final String TIME_ZONE_DEFAULT = "GMT+8"; + + /** + * 秒转换成毫秒 + */ + public static final long SECOND_MILLIS = 1000; + + public static final String FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND = "yyyy-MM-dd HH:mm:ss"; + + public static final String FORMAT_HOUR_MINUTE_SECOND = "HH:mm:ss"; + + /** + * 将 LocalDateTime 转换成 Date + * + * @param date LocalDateTime + * @return LocalDateTime + */ + public static Date of(LocalDateTime date) { + // 将此日期时间与时区相结合以创建 ZonedDateTime + ZonedDateTime zonedDateTime = date.atZone(ZoneId.systemDefault()); + // 本地时间线 LocalDateTime 到即时时间线 Instant 时间戳 + Instant instant = zonedDateTime.toInstant(); + // UTC时间(世界协调时间,UTC + 00:00)转北京(北京,UTC + 8:00)时间 + return Date.from(instant); + } + + /** + * 将 Date 转换成 LocalDateTime + * + * @param date Date + * @return LocalDateTime + */ + public static LocalDateTime of(Date date) { + // 转为时间戳 + Instant instant = date.toInstant(); + // UTC时间(世界协调时间,UTC + 00:00)转北京(北京,UTC + 8:00)时间 + return LocalDateTime.ofInstant(instant, ZoneId.systemDefault()); + } + + @Deprecated + public static Date addTime(Duration duration) { + return new Date(System.currentTimeMillis() + duration.toMillis()); + } + + public static boolean isExpired(Date time) { + return System.currentTimeMillis() > time.getTime(); + } + + public static boolean isExpired(LocalDateTime time) { + LocalDateTime now = LocalDateTime.now(); + return now.isAfter(time); + } + + public static long diff(Date endTime, Date startTime) { + return endTime.getTime() - startTime.getTime(); + } + + /** + * 创建指定时间 + * + * @param year 年 + * @param mouth 月 + * @param day 日 + * @return 指定时间 + */ + public static Date buildTime(int year, int mouth, int day) { + return buildTime(year, mouth, day, 0, 0, 0); + } + + /** + * 创建指定时间 + * + * @param year 年 + * @param mouth 月 + * @param day 日 + * @param hour 小时 + * @param minute 分钟 + * @param second 秒 + * @return 指定时间 + */ + public static Date buildTime(int year, int mouth, int day, + int hour, int minute, int second) { + Calendar calendar = Calendar.getInstance(); + calendar.set(Calendar.YEAR, year); + calendar.set(Calendar.MONTH, mouth - 1); + calendar.set(Calendar.DAY_OF_MONTH, day); + calendar.set(Calendar.HOUR_OF_DAY, hour); + calendar.set(Calendar.MINUTE, minute); + calendar.set(Calendar.SECOND, second); + calendar.set(Calendar.MILLISECOND, 0); // 一般情况下,都是 0 毫秒 + return calendar.getTime(); + } + + public static Date max(Date a, Date b) { + if (a == null) { + return b; + } + if (b == null) { + return a; + } + return a.compareTo(b) > 0 ? a : b; + } + + public static LocalDateTime max(LocalDateTime a, LocalDateTime b) { + if (a == null) { + return b; + } + if (b == null) { + return a; + } + return a.isAfter(b) ? a : b; + } + + /** + * 计算当期时间相差的日期 + * + * @param field 日历字段.
eg:Calendar.MONTH,Calendar.DAY_OF_MONTH,
Calendar.HOUR_OF_DAY等. + * @param amount 相差的数值 + * @return 计算后的日志 + */ + public static Date addDate(int field, int amount) { + return addDate(null, field, amount); + } + + /** + * 计算当期时间相差的日期 + * + * @param date 设置时间 + * @param field 日历字段 例如说,{@link Calendar#DAY_OF_MONTH} 等 + * @param amount 相差的数值 + * @return 计算后的日志 + */ + public static Date addDate(Date date, int field, int amount) { + if (amount == 0) { + return date; + } + Calendar c = Calendar.getInstance(); + if (date != null) { + c.setTime(date); + } + c.add(field, amount); + return c.getTime(); + } + + /** + * 是否今天 + * + * @param date 日期 + * @return 是否 + */ + public static boolean isToday(LocalDateTime date) { + return LocalDateTimeUtil.isSameDay(date, LocalDateTime.now()); + } + +} diff --git a/xinda-common/src/main/java/com/xinda/common/utils/date/LocalDateTimeUtils.java b/xinda-common/src/main/java/com/xinda/common/utils/date/LocalDateTimeUtils.java new file mode 100644 index 0000000..db58224 --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/utils/date/LocalDateTimeUtils.java @@ -0,0 +1,76 @@ +package com.xinda.common.utils.date; + +import cn.hutool.core.date.LocalDateTimeUtil; + +import java.time.Duration; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; + +/** + * 时间工具类,用于 {@link LocalDateTime} + * + * @author xinda + */ +public class LocalDateTimeUtils { + + public static String YYYY_MM_DD_HH_MM_SS = "yyyy-MM-dd HH:mm:ss"; + + /** + * 空的 LocalDateTime 对象,主要用于 DB 唯一索引的默认值 + */ + public static LocalDateTime EMPTY = buildTime(1970, 1, 1); + + public static LocalDateTime addTime(Duration duration) { + return LocalDateTime.now().plus(duration); + } + + public static boolean beforeNow(LocalDateTime date) { + return date.isBefore(LocalDateTime.now()); + } + + public static boolean afterNow(LocalDateTime date) { + return date.isAfter(LocalDateTime.now()); + } + + /** + * 创建指定时间 + * + * @param year 年 + * @param mouth 月 + * @param day 日 + * @return 指定时间 + */ + public static LocalDateTime buildTime(int year, int mouth, int day) { + return LocalDateTime.of(year, mouth, day, 0, 0, 0); + } + + public static LocalDateTime[] buildBetweenTime(int year1, int mouth1, int day1, + int year2, int mouth2, int day2) { + return new LocalDateTime[]{buildTime(year1, mouth1, day1), buildTime(year2, mouth2, day2)}; + } + + /** + * 判断当前时间是否在该时间范围内 + * + * @param startTime 开始时间 + * @param endTime 结束时间 + * @return 是否 + */ + public static boolean isBetween(LocalDateTime startTime, LocalDateTime endTime) { + if (startTime == null || endTime == null) { + return false; + } + return LocalDateTimeUtil.isIn(LocalDateTime.now(), startTime, endTime); + } + + /** + * 时间转字符串 + * @param localDateTime 时间 + * @param: format 格式 + * @return java.lang.String + */ + public static String localDateTimeToStr(LocalDateTime localDateTime, String format) { + DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern(format); + return localDateTime.format(dateTimeFormatter); + } +} diff --git a/xinda-common/src/main/java/com/xinda/common/utils/file/FileTypeUtils.java b/xinda-common/src/main/java/com/xinda/common/utils/file/FileTypeUtils.java new file mode 100644 index 0000000..26ea640 --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/utils/file/FileTypeUtils.java @@ -0,0 +1,76 @@ +package com.xinda.common.utils.file; + +import java.io.File; +import org.apache.commons.lang3.StringUtils; + +/** + * 文件类型工具类 + * + * @author ruoyi + */ +public class FileTypeUtils +{ + /** + * 获取文件类型 + *

+ * 例如: xinda.txt, 返回: txt + * + * @param file 文件名 + * @return 后缀(不含".") + */ + public static String getFileType(File file) + { + if (null == file) + { + return StringUtils.EMPTY; + } + return getFileType(file.getName()); + } + + /** + * 获取文件类型 + *

+ * 例如: xinda.txt, 返回: txt + * + * @param fileName 文件名 + * @return 后缀(不含".") + */ + public static String getFileType(String fileName) + { + int separatorIndex = fileName.lastIndexOf("."); + if (separatorIndex < 0) + { + return ""; + } + return fileName.substring(separatorIndex + 1).toLowerCase(); + } + + /** + * 获取文件类型 + * + * @param photoByte 文件字节码 + * @return 后缀(不含".") + */ + public static String getFileExtendName(byte[] photoByte) + { + String strFileExtendName = "JPG"; + if ((photoByte[0] == 71) && (photoByte[1] == 73) && (photoByte[2] == 70) && (photoByte[3] == 56) + && ((photoByte[4] == 55) || (photoByte[4] == 57)) && (photoByte[5] == 97)) + { + strFileExtendName = "GIF"; + } + else if ((photoByte[6] == 74) && (photoByte[7] == 70) && (photoByte[8] == 73) && (photoByte[9] == 70)) + { + strFileExtendName = "JPG"; + } + else if ((photoByte[0] == 66) && (photoByte[1] == 77)) + { + strFileExtendName = "BMP"; + } + else if ((photoByte[1] == 80) && (photoByte[2] == 78) && (photoByte[3] == 71)) + { + strFileExtendName = "PNG"; + } + return strFileExtendName; + } +} \ No newline at end of file diff --git a/xinda-common/src/main/java/com/xinda/common/utils/file/FileUploadUtils.java b/xinda-common/src/main/java/com/xinda/common/utils/file/FileUploadUtils.java new file mode 100644 index 0000000..f0bd35a --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/utils/file/FileUploadUtils.java @@ -0,0 +1,232 @@ +package com.xinda.common.utils.file; + +import java.io.File; +import java.io.IOException; +import java.nio.file.Paths; +import java.util.Objects; +import org.apache.commons.io.FilenameUtils; +import org.springframework.web.multipart.MultipartFile; +import com.xinda.common.config.RuoYiConfig; +import com.xinda.common.constant.Constants; +import com.xinda.common.exception.file.FileNameLengthLimitExceededException; +import com.xinda.common.exception.file.FileSizeLimitExceededException; +import com.xinda.common.exception.file.InvalidExtensionException; +import com.xinda.common.utils.DateUtils; +import com.xinda.common.utils.StringUtils; +import com.xinda.common.utils.uuid.Seq; + +/** + * 文件上传工具类 + * + * @author ruoyi + */ +public class FileUploadUtils +{ + /** + * 默认大小 50M + */ + public static final long DEFAULT_MAX_SIZE = 50 * 1024 * 1024; + + /** + * 默认的文件名最大长度 100 + */ + public static final int DEFAULT_FILE_NAME_LENGTH = 100; + + /** + * 默认上传的地址 + */ + private static String defaultBaseDir = RuoYiConfig.getProfile(); + + public static void setDefaultBaseDir(String defaultBaseDir) + { + FileUploadUtils.defaultBaseDir = defaultBaseDir; + } + + public static String getDefaultBaseDir() + { + return defaultBaseDir; + } + + /** + * 以默认配置进行文件上传 + * + * @param file 上传的文件 + * @return 文件名称 + * @throws Exception + */ + public static final String upload(MultipartFile file) throws IOException + { + try + { + return upload(getDefaultBaseDir(), file, MimeTypeUtils.DEFAULT_ALLOWED_EXTENSION); + } + catch (Exception e) + { + throw new IOException(e.getMessage(), e); + } + } + + /** + * 根据文件路径上传 + * + * @param baseDir 相对应用的基目录 + * @param file 上传的文件 + * @return 文件名称 + * @throws IOException + */ + public static final String upload(String baseDir, MultipartFile file) throws IOException + { + try + { + return upload(baseDir, file, MimeTypeUtils.DEFAULT_ALLOWED_EXTENSION); + } + catch (Exception e) + { + throw new IOException(e.getMessage(), e); + } + } + + /** + * 文件上传 + * + * @param baseDir 相对应用的基目录 + * @param file 上传的文件 + * @param allowedExtension 上传文件类型 + * @return 返回上传成功的文件名 + * @throws FileSizeLimitExceededException 如果超出最大大小 + * @throws FileNameLengthLimitExceededException 文件名太长 + * @throws IOException 比如读写文件出错时 + * @throws InvalidExtensionException 文件校验异常 + */ + public static final String upload(String baseDir, MultipartFile file, String[] allowedExtension) + throws FileSizeLimitExceededException, IOException, FileNameLengthLimitExceededException, + InvalidExtensionException + { + int fileNamelength = Objects.requireNonNull(file.getOriginalFilename()).length(); + if (fileNamelength > FileUploadUtils.DEFAULT_FILE_NAME_LENGTH) + { + throw new FileNameLengthLimitExceededException(FileUploadUtils.DEFAULT_FILE_NAME_LENGTH); + } + + assertAllowed(file, allowedExtension); + + String fileName = extractFilename(file); + + String absPath = getAbsoluteFile(baseDir, fileName).getAbsolutePath(); + file.transferTo(Paths.get(absPath)); + return getPathFileName(baseDir, fileName); + } + + /** + * 编码文件名 + */ + public static final String extractFilename(MultipartFile file) + { + return StringUtils.format("{}/{}_{}.{}", DateUtils.datePath(), + FilenameUtils.getBaseName(file.getOriginalFilename()), Seq.getId(Seq.uploadSeqType), getExtension(file)); + } + + public static final File getAbsoluteFile(String uploadDir, String fileName) throws IOException + { + File desc = new File(uploadDir + File.separator + fileName); + + if (!desc.exists()) + { + if (!desc.getParentFile().exists()) + { + desc.getParentFile().mkdirs(); + } + } + return desc; + } + + public static final String getPathFileName(String uploadDir, String fileName) throws IOException + { + int dirLastIndex = RuoYiConfig.getProfile().length() + 1; + String currentDir = StringUtils.substring(uploadDir, dirLastIndex); + return Constants.RESOURCE_PREFIX + "/" + currentDir + "/" + fileName; + } + + /** + * 文件大小校验 + * + * @param file 上传的文件 + * @return + * @throws FileSizeLimitExceededException 如果超出最大大小 + * @throws InvalidExtensionException + */ + public static final void assertAllowed(MultipartFile file, String[] allowedExtension) + throws FileSizeLimitExceededException, InvalidExtensionException + { + long size = file.getSize(); + if (size > DEFAULT_MAX_SIZE) + { + throw new FileSizeLimitExceededException(DEFAULT_MAX_SIZE / 1024 / 1024); + } + + String fileName = file.getOriginalFilename(); + String extension = getExtension(file); + if (allowedExtension != null && !isAllowedExtension(extension, allowedExtension)) + { + if (allowedExtension == MimeTypeUtils.IMAGE_EXTENSION) + { + throw new InvalidExtensionException.InvalidImageExtensionException(allowedExtension, extension, + fileName); + } + else if (allowedExtension == MimeTypeUtils.FLASH_EXTENSION) + { + throw new InvalidExtensionException.InvalidFlashExtensionException(allowedExtension, extension, + fileName); + } + else if (allowedExtension == MimeTypeUtils.MEDIA_EXTENSION) + { + throw new InvalidExtensionException.InvalidMediaExtensionException(allowedExtension, extension, + fileName); + } + else if (allowedExtension == MimeTypeUtils.VIDEO_EXTENSION) + { + throw new InvalidExtensionException.InvalidVideoExtensionException(allowedExtension, extension, + fileName); + } + else + { + throw new InvalidExtensionException(allowedExtension, extension, fileName); + } + } + } + + /** + * 判断MIME类型是否是允许的MIME类型 + * + * @param extension + * @param allowedExtension + * @return + */ + public static final boolean isAllowedExtension(String extension, String[] allowedExtension) + { + for (String str : allowedExtension) + { + if (str.equalsIgnoreCase(extension)) + { + return true; + } + } + return false; + } + + /** + * 获取文件名的后缀 + * + * @param file 表单文件 + * @return 后缀名 + */ + public static final String getExtension(MultipartFile file) + { + String extension = FilenameUtils.getExtension(file.getOriginalFilename()); + if (StringUtils.isEmpty(extension)) + { + extension = MimeTypeUtils.getExtension(Objects.requireNonNull(file.getContentType())); + } + return extension; + } +} diff --git a/xinda-common/src/main/java/com/xinda/common/utils/file/FileUtils.java b/xinda-common/src/main/java/com/xinda/common/utils/file/FileUtils.java new file mode 100644 index 0000000..2b4514d --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/utils/file/FileUtils.java @@ -0,0 +1,340 @@ +package com.xinda.common.utils.file; + +import java.io.File; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.OutputStream; +import java.io.UnsupportedEncodingException; +import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import cn.hutool.core.io.FileUtil; +import cn.hutool.core.util.IdUtil; +import lombok.SneakyThrows; +import org.apache.commons.io.IOUtils; +import org.apache.commons.lang3.ArrayUtils; +import com.xinda.common.config.RuoYiConfig; +import com.xinda.common.utils.DateUtils; +import com.xinda.common.utils.StringUtils; +import com.xinda.common.utils.uuid.IdUtils; +import org.apache.commons.io.FilenameUtils; + +/** + * 文件处理工具类 + * + * @author ruoyi + */ +public class FileUtils +{ + public static String FILENAME_PATTERN = "[a-zA-Z0-9_\\-\\|\\.\\u4e00-\\u9fa5]+"; + + /** + * 输出指定文件的byte数组 + * + * @param filePath 文件路径 + * @param os 输出流 + * @return + */ + public static void writeBytes(String filePath, OutputStream os) throws IOException + { + FileInputStream fis = null; + try + { + File file = new File(filePath); + if (!file.exists()) + { + throw new FileNotFoundException(filePath); + } + fis = new FileInputStream(file); + byte[] b = new byte[1024]; + int length; + while ((length = fis.read(b)) > 0) + { + os.write(b, 0, length); + } + } + catch (IOException e) + { + throw e; + } + finally + { + IOUtils.close(os); + IOUtils.close(fis); + } + } + + /** + * 写数据到文件中 + * + * @param data 数据 + * @return 目标文件 + * @throws IOException IO异常 + */ + public static String writeImportBytes(byte[] data) throws IOException + { + return writeBytes(data, RuoYiConfig.getImportPath()); + } + + /** + * 写数据到文件中 + * + * @param data 数据 + * @param uploadDir 目标文件 + * @return 目标文件 + * @throws IOException IO异常 + */ + public static String writeBytes(byte[] data, String uploadDir) throws IOException + { + FileOutputStream fos = null; + String pathName = ""; + try + { + String extension = getFileExtendName(data); + pathName = DateUtils.datePath() + "/" + IdUtils.fastUUID() + "." + extension; + File file = FileUploadUtils.getAbsoluteFile(uploadDir, pathName); + fos = new FileOutputStream(file); + fos.write(data); + } + finally + { + IOUtils.close(fos); + } + return FileUploadUtils.getPathFileName(uploadDir, pathName); + } + + /** + * 删除文件 + * + * @param filePath 文件 + * @return + */ + public static boolean deleteFile(String filePath) + { + boolean flag = false; + File file = new File(filePath); + // 路径为文件且不为空则进行删除 + if (file.isFile() && file.exists()) + { + flag = file.delete(); + } + return flag; + } + + /** + * 文件名称验证 + * + * @param filename 文件名称 + * @return true 正常 false 非法 + */ + public static boolean isValidFilename(String filename) + { + return filename.matches(FILENAME_PATTERN); + } + + /** + * 检查文件是否可下载 + * + * @param resource 需要下载的文件 + * @return true 正常 false 非法 + */ + public static boolean checkAllowDownload(String resource) + { + // 禁止目录上跳级别 + if (StringUtils.contains(resource, "..")) + { + return false; + } + + // 检查允许下载的文件规则 + if (ArrayUtils.contains(MimeTypeUtils.DEFAULT_ALLOWED_EXTENSION, FileTypeUtils.getFileType(resource))) + { + return true; + } + + // 不在允许下载的文件规则 + return false; + } + + /** + * 下载文件名重新编码 + * + * @param request 请求对象 + * @param fileName 文件名 + * @return 编码后的文件名 + */ + public static String setFileDownloadHeader(HttpServletRequest request, String fileName) throws UnsupportedEncodingException + { + final String agent = request.getHeader("USER-AGENT"); + String filename = fileName; + if (agent.contains("MSIE")) + { + // IE浏览器 + filename = URLEncoder.encode(filename, "utf-8"); + filename = filename.replace("+", " "); + } + else if (agent.contains("Firefox")) + { + // 火狐浏览器 + filename = new String(fileName.getBytes(), "ISO8859-1"); + } + else if (agent.contains("Chrome")) + { + // google浏览器 + filename = URLEncoder.encode(filename, "utf-8"); + } + else + { + // 其它浏览器 + filename = URLEncoder.encode(filename, "utf-8"); + } + return filename; + } + + /** + * 下载文件名重新编码 + * + * @param response 响应对象 + * @param realFileName 真实文件名 + */ + public static void setAttachmentResponseHeader(HttpServletResponse response, String realFileName) throws UnsupportedEncodingException + { + String percentEncodedFileName = percentEncode(realFileName); + + StringBuilder contentDispositionValue = new StringBuilder(); + contentDispositionValue.append("attachment; filename=") + .append(percentEncodedFileName) + .append(";") + .append("filename*=") + .append("utf-8''") + .append(percentEncodedFileName); + + response.addHeader("Access-Control-Expose-Headers", "Content-Disposition,download-filename"); + response.setHeader("Content-disposition", contentDispositionValue.toString()); + response.setHeader("download-filename", percentEncodedFileName); + } + + /** + * 百分号编码工具方法 + * + * @param s 需要百分号编码的字符串 + * @return 百分号编码后的字符串 + */ + public static String percentEncode(String s) throws UnsupportedEncodingException + { + String encode = URLEncoder.encode(s, StandardCharsets.UTF_8.toString()); + return encode.replaceAll("\\+", "%20"); + } + + /** + * 获取图像后缀 + * + * @param photoByte 图像数据 + * @return 后缀名 + */ + public static String getFileExtendName(byte[] photoByte) + { + String strFileExtendName = "jpg"; + if ((photoByte[0] == 71) && (photoByte[1] == 73) && (photoByte[2] == 70) && (photoByte[3] == 56) + && ((photoByte[4] == 55) || (photoByte[4] == 57)) && (photoByte[5] == 97)) + { + strFileExtendName = "gif"; + } + else if ((photoByte[6] == 74) && (photoByte[7] == 70) && (photoByte[8] == 73) && (photoByte[9] == 70)) + { + strFileExtendName = "jpg"; + } + else if ((photoByte[0] == 66) && (photoByte[1] == 77)) + { + strFileExtendName = "bmp"; + } + else if ((photoByte[1] == 80) && (photoByte[2] == 78) && (photoByte[3] == 71)) + { + strFileExtendName = "png"; + } + return strFileExtendName; + } + + /** + * 获取文件名称 /profile/upload/2022/04/16/ruoyi.png -- ruoyi.png + * + * @param fileName 路径名称 + * @return 没有文件路径的名称 + */ + public static String getName(String fileName) + { + if (fileName == null) + { + return null; + } + int lastUnixPos = fileName.lastIndexOf('/'); + int lastWindowsPos = fileName.lastIndexOf('\\'); + int index = Math.max(lastUnixPos, lastWindowsPos); + return fileName.substring(index + 1); + } + + /** + * 获取不带后缀文件名称 /profile/upload/2022/04/16/ruoyi.png -- ruoyi + * + * @param fileName 路径名称 + * @return 没有文件路径和后缀的名称 + */ + public static String getNameNotSuffix(String fileName) + { + if (fileName == null) + { + return null; + } + String baseName = FilenameUtils.getBaseName(fileName); + return baseName; + } + + /** + * 创建临时文件 + * 该文件会在 JVM 退出时,进行删除 + * + * @param data 文件内容 + * @return 文件 + */ + @SneakyThrows + public static File createTempFile(String data) { + File file = createTempFile(); + // 写入内容 + FileUtil.writeUtf8String(data, file); + return file; + } + + /** + * 创建临时文件 + * 该文件会在 JVM 退出时,进行删除 + * + * @param data 文件内容 + * @return 文件 + */ + @SneakyThrows + public static File createTempFile(byte[] data) { + File file = createTempFile(); + // 写入内容 + FileUtil.writeBytes(data, file); + return file; + } + + /** + * 创建临时文件,无内容 + * 该文件会在 JVM 退出时,进行删除 + * + * @return 文件 + */ + @SneakyThrows + public static File createTempFile() { + // 创建文件,通过 UUID 保证唯一 + File file = File.createTempFile(IdUtil.simpleUUID(), null); + // 标记 JVM 退出时,自动删除 + file.deleteOnExit(); + return file; + } +} diff --git a/xinda-common/src/main/java/com/xinda/common/utils/file/ImageUtils.java b/xinda-common/src/main/java/com/xinda/common/utils/file/ImageUtils.java new file mode 100644 index 0000000..a1c9b59 --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/utils/file/ImageUtils.java @@ -0,0 +1,98 @@ +package com.xinda.common.utils.file; + +import java.io.ByteArrayInputStream; +import java.io.FileInputStream; +import java.io.InputStream; +import java.net.URL; +import java.net.URLConnection; +import java.util.Arrays; +import org.apache.poi.util.IOUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import com.xinda.common.config.RuoYiConfig; +import com.xinda.common.constant.Constants; +import com.xinda.common.utils.StringUtils; + +/** + * 图片处理工具类 + * + * @author ruoyi + */ +public class ImageUtils +{ + private static final Logger log = LoggerFactory.getLogger(ImageUtils.class); + + public static byte[] getImage(String imagePath) + { + InputStream is = getFile(imagePath); + try + { + return IOUtils.toByteArray(is); + } + catch (Exception e) + { + log.error("图片加载异常 {}", e); + return null; + } + finally + { + IOUtils.closeQuietly(is); + } + } + + public static InputStream getFile(String imagePath) + { + try + { + byte[] result = readFile(imagePath); + result = Arrays.copyOf(result, result.length); + return new ByteArrayInputStream(result); + } + catch (Exception e) + { + log.error("获取图片异常 {}", e); + } + return null; + } + + /** + * 读取文件为字节数据 + * + * @param url 地址 + * @return 字节数据 + */ + public static byte[] readFile(String url) + { + InputStream in = null; + try + { + if (url.startsWith("http")) + { + // 网络地址 + URL urlObj = new URL(url); + URLConnection urlConnection = urlObj.openConnection(); + urlConnection.setConnectTimeout(30 * 1000); + urlConnection.setReadTimeout(60 * 1000); + urlConnection.setDoInput(true); + in = urlConnection.getInputStream(); + } + else + { + // 本机地址 + String localPath = RuoYiConfig.getProfile(); + String downloadPath = localPath + StringUtils.substringAfter(url, Constants.RESOURCE_PREFIX); + in = new FileInputStream(downloadPath); + } + return IOUtils.toByteArray(in); + } + catch (Exception e) + { + log.error("获取文件路径异常 {}", e); + return null; + } + finally + { + IOUtils.closeQuietly(in); + } + } +} diff --git a/xinda-common/src/main/java/com/xinda/common/utils/file/MimeTypeUtils.java b/xinda-common/src/main/java/com/xinda/common/utils/file/MimeTypeUtils.java new file mode 100644 index 0000000..ecdfb12 --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/utils/file/MimeTypeUtils.java @@ -0,0 +1,59 @@ +package com.xinda.common.utils.file; + +/** + * 媒体类型工具类 + * + * @author ruoyi + */ +public class MimeTypeUtils +{ + public static final String IMAGE_PNG = "image/png"; + + public static final String IMAGE_JPG = "image/jpg"; + + public static final String IMAGE_JPEG = "image/jpeg"; + + public static final String IMAGE_BMP = "image/bmp"; + + public static final String IMAGE_GIF = "image/gif"; + + public static final String[] IMAGE_EXTENSION = { "bmp", "gif", "jpg", "jpeg", "png" }; + + public static final String[] FLASH_EXTENSION = { "swf", "flv" }; + + public static final String[] MEDIA_EXTENSION = { "swf", "flv", "mp3", "wav", "wma", "wmv", "mid", "avi", "mpg", + "asf", "rm", "rmvb" }; + + public static final String[] VIDEO_EXTENSION = { "mp4", "avi", "rmvb" }; + + public static final String[] DEFAULT_ALLOWED_EXTENSION = { + // 图片 + "bmp", "gif", "jpg", "jpeg", "png", "svg", + // word excel powerpoint + "doc", "docx", "xls", "xlsx", "ppt", "pptx", "html", "htm", "txt", + // 压缩文件 + "rar", "zip", "gz", "bz2", + // 视频格式 + "mp4", "avi", "rmvb", + // pdf + "pdf" }; + + public static String getExtension(String prefix) + { + switch (prefix) + { + case IMAGE_PNG: + return "png"; + case IMAGE_JPG: + return "jpg"; + case IMAGE_JPEG: + return "jpeg"; + case IMAGE_BMP: + return "bmp"; + case IMAGE_GIF: + return "gif"; + default: + return ""; + } + } +} diff --git a/xinda-common/src/main/java/com/xinda/common/utils/gateway/CRC16Utils.java b/xinda-common/src/main/java/com/xinda/common/utils/gateway/CRC16Utils.java new file mode 100644 index 0000000..06c9d81 --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/utils/gateway/CRC16Utils.java @@ -0,0 +1,149 @@ +package com.xinda.common.utils.gateway; + + +import com.xinda.common.utils.CaculateUtils; +import com.xinda.common.utils.gateway.protocol.ByteUtils; +import org.apache.commons.lang3.ArrayUtils; + +public class CRC16Utils { + + //ff + private static int CRC_FF = 0x000000ff; + //01 + private static int CRC_01 = 0x00000001; + //04 + private static final int LENGTH_04 = 4; + //16进制 + private static final int OXFF = 0xff; + + /** + * 低位在前,高位在后 + * + * @param bytes + * @return + */ + public static String getCRC(byte[] bytes) { + return getCRC(bytes, true); + } + + /** + * @param bytes + * @param lb 是否低位在前, 高位在后 + * @return + */ + public static String getCRC(byte[] bytes, boolean lb) { + int CRC = 0x0000ffff; + int POLYNOMIAL = 0x0000a001; + + int i, j; + for (i = 0; i < bytes.length; i++) { + CRC ^= ((int) bytes[i] & 0x000000ff); + for (j = 0; j < 8; j++) { + if ((CRC & 0x00000001) != 0) { + CRC >>= 1; + CRC ^= POLYNOMIAL; + } else { + CRC >>= 1; + } + } + } + + //结果转换为16进制 + String result = Integer.toHexString(CRC).toUpperCase(); + if (result.length() != 4) { + StringBuffer sb = new StringBuffer("0000"); + result = sb.replace(4 - result.length(), 4, result).toString(); + } + + if (lb) { // 低位在前, 高位在后 + result = result.substring(2, 4) + result.substring(0, 2); + } + + return result; + } + + /** + * 计算CRC校验和 + * + * @param bytes + * @return 返回 byte[] + */ + public static byte[] getCrc16Byte(byte[] bytes) { + + //寄存器全为1 + int CRC_16 = 0x0000ffff; + // 多项式校验值 + int POLYNOMIAL = 0x0000a001; + for (byte aByte : bytes) { + CRC_16 ^= ((int) aByte & CRC_FF); + for (int j = 0; j < 8; j++) { + if ((CRC_16 & CRC_01) != 0) { + CRC_16 >>= 1; + CRC_16 ^= POLYNOMIAL; + } else { + CRC_16 >>= 1; + } + } + } + // 低8位 ,高8位 + return new byte[]{(byte) (CRC_16 & OXFF), (byte) (CRC_16 >> 8 & OXFF)}; + } + + public static byte[] AddCRC(byte[] source) { + byte[] result = new byte[source.length + 2]; + byte[] crc16Byte = CRC16Utils.getCrc16Byte(source); + System.arraycopy(source, 0, result, 0, source.length); + System.arraycopy(crc16Byte, 0, result, result.length - 2, 2); + return result; + } + + public static byte[] AddPakCRC(byte[] source) { + byte[] subarray = ArrayUtils.subarray(source, 11, source.length); + byte[] result = new byte[source.length + 2]; + byte[] crc16Byte = CRC16Utils.getCrc16Byte(subarray); + System.arraycopy(source, 0, result, 0, source.length); + System.arraycopy(crc16Byte, 0, result, result.length - 2, 2); + return result; + } + + public static byte[] CRC(byte[] source) { + source[2] = (byte) ((int) source[2] * 2); + byte[] result = new byte[source.length + 2]; + byte[] crc16Byte = CRC16Utils.getCrc16Byte(source); + System.arraycopy(source, 0, result, 0, source.length); + System.arraycopy(crc16Byte, 0, result, result.length - 2, 2); + return result; + } + + public static byte CRC8(byte[] buffer) { + int crci = 0xFF; //起始字节FF + for (int j = 0; j < buffer.length; j++) { + crci ^= buffer[j] & 0xFF; + for (int i = 0; i < 8; i++) { + if ((crci & 1) != 0) { + crci >>= 1; + crci ^= 0xB8; //多项式当中的那个啥的,不同多项式不一样 + } else { + crci >>= 1; + } + } + } + return (byte) crci; + } + + + public static void main(String[] args)throws Exception { + String hex = "800041EE"; + byte[] bytes = ByteUtils.hexToByte(hex); + String crc = getCRC(bytes); + System.out.println(crc); + String crc8 = "680868333701120008C100"; + byte[] byte8 = ByteUtils.hexToByte(crc8); + int b = CRC8(byte8); + System.out.println((int) b); + float v = CaculateUtils.toFloat32_CDAB(bytes); + System.out.println(v); + } + + +} diff --git a/xinda-common/src/main/java/com/xinda/common/utils/gateway/CRC8Utils.java b/xinda-common/src/main/java/com/xinda/common/utils/gateway/CRC8Utils.java new file mode 100644 index 0000000..a7b0cd5 --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/utils/gateway/CRC8Utils.java @@ -0,0 +1,93 @@ +package com.xinda.common.utils.gateway; + +import com.xinda.common.utils.gateway.protocol.ByteUtils; + +/** + * @author gsb + * @date 2023/5/19 11:33 + */ +public class CRC8Utils { + + + //TODO:-----------------根据C写法转译-------------------------------------- + /* CRC-8, poly = x^8 + x^2 + x^1 + x^0, init = 0 */ + + /** + * CRC8 校验 多项式 x8+x2+x+1 + * @param data + * @return 校验和 + */ + public static byte calcCrc8_E5(byte[] data){ + byte crc = 0; + for (int j = 0; j < data.length; j++) { + crc ^= data[j]; + for (int i = 0; i < 8; i++) { + if ((crc & 0x80) != 0) { + crc = (byte) ((crc)<< 1); + crc ^= 0xE5; + } else { + crc = (byte) ((crc)<< 1); + } + } + } + return crc; + } + + + + + + static byte[] crc8_tab = {(byte) 0, (byte) 94, (byte) 188, (byte) 226, (byte) 97, (byte) 63, (byte) 221, (byte) 131, (byte) 194, (byte) 156, (byte) 126, (byte) 32, (byte) 163, (byte) 253, (byte) 31, (byte) 65, (byte) 157, (byte) 195, (byte) 33, (byte) 127, (byte) 252, (byte) 162, (byte) 64, (byte) 30, (byte) 95, (byte) 1, (byte) 227, (byte) 189, (byte) 62, (byte) 96, (byte) 130, (byte) 220, (byte) 35, (byte) 125, (byte) 159, (byte) 193, (byte) 66, (byte) 28, (byte) 254, (byte) 160, (byte) 225, (byte) 191, (byte) 93, (byte) 3, (byte) 128, (byte) 222, (byte) 60, (byte) 98, (byte) 190, (byte) 224, (byte) 2, (byte) 92, (byte) 223, (byte) 129, (byte) 99, (byte) 61, (byte) 124, (byte) 34, (byte) 192, (byte) 158, (byte) 29, (byte) 67, (byte) 161, (byte) 255, (byte) 70, (byte) 24, + (byte) 250, (byte) 164, (byte) 39, (byte) 121, (byte) 155, (byte) 197, (byte) 132, (byte) 218, (byte) 56, (byte) 102, (byte) 229, (byte) 187, (byte) 89, (byte) 7, (byte) 219, (byte) 133, (byte) 103, (byte) 57, (byte) 186, (byte) 228, (byte) 6, (byte) 88, (byte) 25, (byte) 71, (byte) 165, (byte) 251, (byte) 120, (byte) 38, (byte) 196, (byte) 154, (byte) 101, (byte) 59, (byte) 217, (byte) 135, (byte) 4, (byte) 90, (byte) 184, (byte) 230, (byte) 167, (byte) 249, (byte) 27, (byte) 69, (byte) 198, (byte) 152, (byte) 122, (byte) 36, (byte) 248, (byte) 166, (byte) 68, (byte) 26, (byte) 153, (byte) 199, (byte) 37, (byte) 123, (byte) 58, (byte) 100, (byte) 134, (byte) 216, (byte) 91, (byte) 5, (byte) 231, (byte) 185, (byte) 140, (byte) 210, (byte) 48, (byte) 110, (byte) 237, + (byte) 179, (byte) 81, (byte) 15, (byte) 78, (byte) 16, (byte) 242, (byte) 172, (byte) 47, (byte) 113, (byte) 147, (byte) 205, (byte) 17, (byte) 79, (byte) 173, (byte) 243, (byte) 112, (byte) 46, (byte) 204, (byte) 146, (byte) 211, (byte) 141, (byte) 111, (byte) 49, (byte) 178, (byte) 236, (byte) 14, (byte) 80, (byte) 175, (byte) 241, (byte) 19, (byte) 77, (byte) 206, (byte) 144, (byte) 114, (byte) 44, (byte) 109, (byte) 51, (byte) 209, (byte) 143, (byte) 12, (byte) 82, (byte) 176, (byte) 238, (byte) 50, (byte) 108, (byte) 142, (byte) 208, (byte) 83, (byte) 13, (byte) 239, (byte) 177, (byte) 240, (byte) 174, (byte) 76, (byte) 18, (byte) 145, (byte) 207, (byte) 45, (byte) 115, (byte) 202, (byte) 148, (byte) 118, (byte) 40, (byte) 171, (byte) 245, (byte) 23, (byte) 73, (byte) 8, + (byte) 86, (byte) 180, (byte) 234, (byte) 105, (byte) 55, (byte) 213, (byte) 139, (byte) 87, (byte) 9, (byte) 235, (byte) 181, (byte) 54, (byte) 104, (byte) 138, (byte) 212, (byte) 149, (byte) 203, (byte) 41, (byte) 119, (byte) 244, (byte) 170, (byte) 72, (byte) 22, (byte) 233, (byte) 183, (byte) 85, (byte) 11, (byte) 136, (byte) 214, (byte) 52, (byte) 106, (byte) 43, (byte) 117, (byte) 151, (byte) 201, (byte) 74, (byte) 20, (byte) 246, (byte) 168, (byte) 116, (byte) 42, (byte) 200, (byte) 150, (byte) 21, (byte) 75, (byte) 169, (byte) 247, (byte) 182, (byte) 232, (byte) 10, (byte) 84, (byte) 215, (byte) 137, (byte) 107, 53}; + + /** + * 计算数组的CRC8校验值 + * + * @param data 需要计算的数组 + * @return CRC8校验值 + */ + public static byte calcCrc8(byte[] data) { + return calcCrc8(data, 0, data.length, (byte) 0); + } + + /** + * 计算CRC8校验值 + * + * @param data 数据 + * @param offset 起始位置 + * @param len 长度 + * @return 校验值 + */ + public static byte calcCrc8(byte[] data, int offset, int len) { + return calcCrc8(data, offset, len, (byte) 0); + } + + /** + * 计算CRC8校验值 + * + * @param data 数据 + * @param offset 起始位置 + * @param len 长度 + * @param preval 之前的校验值 + * @return 校验值 + */ + public static byte calcCrc8(byte[] data, int offset, int len, byte preval) { + byte ret = preval; + for (int i = offset; i < (offset + len); ++i) { + ret = crc8_tab[(0x00ff & (ret ^ data[i]))]; + } + return ret; + } + + // 测试 + public static void main(String[] args) { + String hex = "333701120008C100"; + byte[] bytes = ByteUtils.hexToByte(hex); + byte crc = CRC8Utils.calcCrc8_E5(bytes); + System.out.println("" + Integer.toHexString(0x00ff & crc)); + } + + +} diff --git a/xinda-common/src/main/java/com/xinda/common/utils/gateway/mq/Topics.java b/xinda-common/src/main/java/com/xinda/common/utils/gateway/mq/Topics.java new file mode 100644 index 0000000..dec9987 --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/utils/gateway/mq/Topics.java @@ -0,0 +1,16 @@ +package com.xinda.common.utils.gateway.mq; + +import lombok.Data; + +/** + * @author bill + */ +@Data +public class Topics { + + + private String topicName; + private Integer qos =0; + private String desc; + +} diff --git a/xinda-common/src/main/java/com/xinda/common/utils/gateway/mq/TopicsPost.java b/xinda-common/src/main/java/com/xinda/common/utils/gateway/mq/TopicsPost.java new file mode 100644 index 0000000..b0be789 --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/utils/gateway/mq/TopicsPost.java @@ -0,0 +1,14 @@ +package com.xinda.common.utils.gateway.mq; + +import lombok.Data; + +/** + * @author gsb + * @date 2023/2/27 13:41 + */ +@Data +public class TopicsPost { + + private String[] topics; + private int[] qos; +} diff --git a/xinda-common/src/main/java/com/xinda/common/utils/gateway/mq/TopicsUtils.java b/xinda-common/src/main/java/com/xinda/common/utils/gateway/mq/TopicsUtils.java new file mode 100644 index 0000000..7d67884 --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/utils/gateway/mq/TopicsUtils.java @@ -0,0 +1,322 @@ +package com.xinda.common.utils.gateway.mq; + +import com.xinda.common.constant.XinDaConstant; +import com.xinda.common.enums.TopicType; +import com.xinda.common.utils.collection.CollectionUtils; +import lombok.SneakyThrows; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Component; +import org.springframework.util.StringUtils; + + +import java.util.*; + +/** + * topic工具类 + * + * @author gsb + * @date 2022/9/15 16:49 + */ +@Slf4j +@Component +public class TopicsUtils { + + @Value("${server.broker.enabled}") + private Boolean enabled; + + /** + * 拼接topic + * + * @param productId 产品id + * @param serialNumber 设备编号 + * @param type 主题类型 + * @return topic + */ + public String buildTopic(Long productId, String serialNumber, TopicType type) { + /* + * 订阅属性: + * 如果启动emq 则为 /+/+/property/post + * 如果启动netty的mqttBroker 则为 /{productId}/{serialNumber}/property/post + * + * 发布都为:/{productId}/{serialNumber}/property/get + */ + String product = String.valueOf(productId); + if (null == productId || productId == -1L || productId == 0L) { + product = "+"; + } + if (com.xinda.common.utils.StringUtils.isEmpty(serialNumber)) { + serialNumber = "+"; + } + if (type.getType() == 0) { + return enabled ? "/" + product + "/" + serialNumber + type.getTopicSuffix() : XinDaConstant.MQTT.PREDIX + type.getTopicSuffix(); + } else { + return "/" + product + "/" + serialNumber + type.getTopicSuffix(); + } + } + + + /** + * 获取所有可订阅的主题 + * + * @return 订阅主题列表 + */ + public TopicsPost getAllPost() { + List qos = new ArrayList<>(); + List topics = new ArrayList<>(); + TopicsPost post = new TopicsPost(); + for (TopicType topicType : TopicType.values()) { + if (topicType.getType() == 0) { + String topic = this.buildTopic(0L, null, topicType); + topics.add(topic); + qos.add(1); + } + } + post.setTopics(topics.toArray(new String[0])); + int[] ints = Arrays.stream(qos.toArray(new Integer[0])).mapToInt(Integer::valueOf).toArray(); + post.setQos(ints); + return post; + } + + /** + * 获取所有get topic + * + * @param isSimulate 是否是设备模拟 + * @return list + */ + public static List getAllGet(boolean isSimulate) { + List result = new ArrayList<>(); + for (TopicType type : TopicType.values()) { + if (type.getType() == 4) { + Topics topics = new Topics(); + topics.setTopicName(type.getTopicSuffix()); + topics.setDesc(type.getMsg()); + topics.setQos(1); + result.add(topics); + if (isSimulate && type == TopicType.PROPERTY_GET) { + result.remove(topics); + } + } + } + return result; + } + + + /** + * 替换topic中的产品编码和设备编码,唯一作用是在系统收到来自网关设备上报子设备消息时将topic进行替换 + * + * @param orgTopic String 原始topic + * @param productId String 目标产品编码 + * @param serialNumber String 目标设备编码 + * @return 替换产品编码和设备编码后的新topic + */ + public String topicSubDevice(String orgTopic, Long productId, String serialNumber) { + if (com.xinda.common.utils.StringUtils.isEmpty(orgTopic)) { + return orgTopic; + } + String[] splits = orgTopic.split("/"); + StringBuilder sb = new StringBuilder(splits[0]) + .append("/") + .append(productId) + .append("/") + .append(serialNumber); + for (int index = 3; index < splits.length; index++) { + sb.append("/").append(splits[index]); + } + return sb.toString(); + } + + /** + * 从topic中获取IMEI号 IMEI即是设备编号 + * + * @param topic /{productId}/{serialNumber}/property/post + * @return serialNumber + */ + @SneakyThrows + public Long parseProductId(String topic) { + String[] values = topic.split("/"); + return Long.parseLong(values[1]); + } + + + /** + * 从topic中获取IMEI号 IMEI即是设备编号 + * + * @param topic /{productId}/{serialNumber}/property/post + * @return serialNumber + */ + @SneakyThrows + public String parseSerialNumber(String topic) { + String[] values = topic.split("/"); + return values[2]; + } + + /** + * 获取topic 判断字段 name + **/ + public String parseTopicName(String topic) { + String[] values = topic.split("/"); + if (values.length >2){ + return "/"+ values[3] + "/" + values[4]; + }else { + return null; + } + } + + /** + * 获取topic 判断字段 name + **/ + public String parseTopicName4(String topic) { + String[] values = topic.split("/"); + return values[4]; + } + + /** + * 从topic解析物模型类型 + * + * @param topic /{productId}/{serialNumber}/property/post + * @return 物模型类型 + */ + @SneakyThrows + public String getThingsModel(String topic) { + String[] split = topic.split("/"); + return split[2].toUpperCase(); + } + + /** + * 检查topic的合法性 + * + * @param topicNameList 主题list + * @return 验证结果 + */ + public static boolean validTopicFilter(List topicNameList) { + for (String topicName : topicNameList) { + if (com.xinda.common.utils.StringUtils.isEmpty(topicName)) { + return false; + } + /*以#或+符号开头的、以/符号结尾的及不存在/符号的订阅按非法订阅处理*/ + if (StringUtils.startsWithIgnoreCase(topicName, "#") || StringUtils.startsWithIgnoreCase(topicName, "+") || StringUtils.endsWithIgnoreCase(topicName, "/") || !topicName.contains("/")) { + return false; + } + if (topicName.contains("#")) { + /*不是以/#字符串结尾的订阅按非法订阅处理*/ + if (!StringUtils.endsWithIgnoreCase(topicName, "/#")) { + return false; + } + /*如果出现多个#符号的订阅按非法订阅处理*/ + if (StringUtils.countOccurrencesOf(topicName, "#") > 1) { + return false; + } + } + if (topicName.contains("+")) { + /*如果+符号和/+字符串出现的次数不等的情况按非法订阅处理*/ + if (StringUtils.countOccurrencesOf(topicName, "+") != StringUtils.countOccurrencesOf(topicName, "/+")) { + return false; + } + } + } + return true; + } + + /** + * 判断topic与topicFilter是否匹配,topic与topicFilter需要符合协议规范 + * + * @param topic: 主题 + * @param topicFilter: 主题过滤器 + * @return boolean + * @author ZhangJun + * @date 23:57 2021/2/27 + */ + public static boolean matchTopic(String topic, String topicFilter) { + if (topic.contains("+") || topic.contains("#")) { + + String[] topicSpilts = topic.split("/"); + String[] filterSpilts = topicFilter.split("/"); + + if (!topic.contains("#") && topicSpilts.length < filterSpilts.length) { + return false; + } + + String level; + for (int i = 0; i < topicSpilts.length; i++) { + level = topicSpilts[i]; + if (!level.equals(filterSpilts[i]) && !level.equals("+") && !level.equals("#")) { + return false; + } + } + } else { + return topic.equals(topicFilter); + } + return true; + } + + /** + * 根据指定topic搜索所有订阅的topic + * 指定的topic没有通配符,但是订阅的时候可能会存在通配符,所以有个查找的过程 + * + * @param topic 主题 + * @return 返回的所有主题 + */ + public static List searchTopic(String topic) { + try { + List topicList = new ArrayList<>(); + topicList.add(topic); + /*先处理#通配符*/ + String[] filterDup = topic.split("/"); + int[] source = new int[filterDup.length]; + String itemTopic = ""; + for (int i = 0; i < filterDup.length; i++) { + String item = itemTopic.concat("#"); + topicList.add(item); + itemTopic = itemTopic.concat(filterDup[i]).concat("/"); + source[i] = i; + continue; + } + /*处理+通配符*/ + Map, Boolean> map = TopicsUtils.handle(source); + for (List key : map.keySet()) { + String[] arr = CollectionUtils.copy(filterDup); + for (Integer index : key) { + arr[index] = "+"; + } + String newTopic = CollectionUtils.concat(arr, "/"); + topicList.add(newTopic); + } + return topicList; + } catch (Exception e) { + log.error("=>查询topic异常", e); + return null; + } + } + + + public static Map, Boolean> handle(int[] src) { + int nCnt = src.length; + int nBit = (0xFFFFFFFF >>> (32 - nCnt)); + Map, Boolean> map = new HashMap<>(); + for (int i = 1; i <= nBit; i++) { + List list = new ArrayList<>(); + for (int j = 0; j < nCnt; j++) { + if ((i << (31 - j)) >> 31 == -1) { + list.add(j); + } + } + map.put(list, true); + } + return map; + } + + /** + * 构建场景变量上报主题 + * @param sceneModelId 场景id + * @param: sceneModelDeviceId 场景来源id + * @return java.lang.String + */ + public static String buildSceneReportTopic(Long sceneModelId, Long sceneModelDeviceId) { + return "/" + sceneModelId + "/" + sceneModelDeviceId + "/scene/report"; + } + + public static String buildRuleEngineTopic(String requestId) { + return "/" + requestId + "/ruleengine/test"; + } +} diff --git a/xinda-common/src/main/java/com/xinda/common/utils/gateway/protocol/ByteUtils.java b/xinda-common/src/main/java/com/xinda/common/utils/gateway/protocol/ByteUtils.java new file mode 100644 index 0000000..2dca907 --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/utils/gateway/protocol/ByteUtils.java @@ -0,0 +1,958 @@ +package com.xinda.common.utils.gateway.protocol; + + +import com.xinda.common.exception.ServiceException; +import org.apache.commons.lang3.ArrayUtils; +import org.apache.commons.lang3.StringUtils; + +import java.io.ByteArrayOutputStream; +import java.io.DataOutputStream; +import java.io.IOException; +import java.nio.ByteOrder; +import java.nio.charset.Charset; +import java.nio.charset.StandardCharsets; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.UUID; + + +public class ByteUtils { + + + // public static Payload resolvePayload(byte[] content, short start, ModbusCode code) { + // Payload payload; + // switch (code) { + // case Read01: + // case Read02: + // payload = new RealCoilPayload(start, content); break; + // case Read03: + // case Read04: + // payload = new ReadPayload(content, start); break; + // default: + // payload = WritePayload.getInstance(); + // } + // + // return payload; + // } + + public static Write10Build write10Build(Object... args) { + int num = 0; List bytes = new ArrayList<>(); + for(Object arg : args) { + if(arg instanceof Integer) { + num += 2; + bytes.add(getBytes((Integer) arg)); + } else if(arg instanceof Long) { + num += 4; + bytes.add(getBytes((Long) arg)); + } else if(arg instanceof Float) { + num += 2; + bytes.add(getBytes((Float) arg)); + } else if(arg instanceof Double) { + num += 4; + bytes.add(getBytes((Double) arg)); + } else if(arg instanceof Short) { + num += 1; + bytes.add(getBytesOfReverse((Short) arg)); + } else if(arg instanceof Byte) { + num += 1; + bytes.add(new byte[]{0x00, (byte) arg}); + } else if(arg instanceof String) { + byte[] bytes1 = arg.toString().getBytes(StandardCharsets.UTF_8); + if(bytes1.length % 2 != 0) { + num += bytes1.length / 2 + 1; + byte[] addMessage = new byte[bytes1.length + 1]; + addBytes(addMessage, bytes1, 0); + bytes.add(addMessage); + } else { + num += bytes1.length / 2; + bytes.add(bytes1); + } + } else { + throw new ServiceException("不支持的数据类型"); + } + } + + Integer length = bytes.stream().map(item -> item.length).reduce((a, b) -> a + b).get(); + byte[] write = new byte[length]; + + int index = 0; + for(int i=0; i> 8); + return bytes; + } + + /** + * 将short数据类型转化成Byte数组 + * @see ByteOrder#BIG_ENDIAN + * @param data short值 + * @return byte[]数组 + */ + public static byte[] getBytesOfReverse(short data) { + byte[] bytes = new byte[2]; + bytes[1] = (byte) (data & 0xff); + bytes[0] = (byte) ((data & 0xff00) >> 8); + return bytes; + } + + /** + * @see ByteOrder#LITTLE_ENDIAN + * @param bytes + * @param offset + * @return + */ + public static short bytesToShort(byte[] bytes, int offset) { + return (short) ((0xff & bytes[0 + offset]) | (0xff00 & (bytes[1 + offset] << 8))); + } + + /** + * 将字节数组转换成short数据 + * @see ByteOrder#BIG_ENDIAN + * @param bytes 字节数组 + * @return short值 + */ + public static short bytesToShortOfReverse(byte[] bytes) { + return ByteUtils.bytesToShortOfReverse(bytes, 0); + } + + /** + * 将字节数组转换成short数据,采用倒序的表达方式 + * @param bytes 字节数组 + * @param offset 起始位置 + * @return short值 + */ + public static short bytesToShortOfReverse(byte[] bytes, int offset) { + return (short) ((0xff & bytes[1 + offset]) | (0xff00 & (bytes[0 + offset] << 8))); + } + + /** + * 将int数据类型转化成Byte数组 + * @see ByteOrder#LITTLE_ENDIAN + * @param data int值 + * @return byte[]数组 + */ + public static byte[] getBytes(int data) { + byte[] bytes = new byte[4]; + bytes[0] = (byte) (data & 0xff); + bytes[1] = (byte) ((data >> 8) & 0xff); + bytes[2] = (byte) ((data >> 16) & 0xff); + bytes[3] = (byte) ((data >> 24) & 0xff); + return bytes; + } + + /** + * 将int数据类型转化成Byte数组 倒序 + * @see ByteOrder#BIG_ENDIAN + * @param data int值 + * @return byte[]数组 + */ + public static byte[] getBytesOfReverse(int data) { + byte[] src = new byte[4]; + src[0] = (byte) ((data >> 24) & 0xFF); + src[1] = (byte) ((data >> 16) & 0xFF); + src[2] = (byte) ((data >> 8) & 0xFF); + src[3] = (byte) (data & 0xFF); + return src; + } + + /** + * 将long数据类型转化成Byte数组 + * @see ByteOrder#LITTLE_ENDIAN + * @param data long值 + * @return byte[]数组 + */ + public static byte[] getBytes(long data) { + byte[] bytes = new byte[8]; + bytes[0] = (byte) (data & 0xff); + bytes[1] = (byte) ((data >> 8) & 0xff); + bytes[2] = (byte) ((data >> 16) & 0xff); + bytes[3] = (byte) ((data >> 24) & 0xff); + bytes[4] = (byte) ((data >> 32) & 0xff); + bytes[5] = (byte) ((data >> 40) & 0xff); + bytes[6] = (byte) ((data >> 48) & 0xff); + bytes[7] = (byte) ((data >> 56) & 0xff); + return bytes; + } + + /** + * 将long数据类型转化成Byte数组 倒序 + * @see ByteOrder#BIG_ENDIAN + * @param data long值 + * @return byte[]数组 + */ + public static byte[] getBytesOfReverse(long data) { + byte[] bytes = new byte[8]; + bytes[7] = (byte) (data & 0xff); + bytes[6] = (byte) ((data >> 8) & 0xff); + bytes[5] = (byte) ((data >> 16) & 0xff); + bytes[4] = (byte) ((data >> 24) & 0xff); + bytes[3] = (byte) ((data >> 32) & 0xff); + bytes[2] = (byte) ((data >> 40) & 0xff); + bytes[1] = (byte) ((data >> 48) & 0xff); + bytes[0] = (byte) ((data >> 56) & 0xff); + return bytes; + } + + /** + * 将float数据类型转化成Byte数组 + * @see ByteOrder#LITTLE_ENDIAN + * @param data float值 + * @return byte[]数组 + */ + public static byte[] getBytes(float data) { + int intBits = Float.floatToIntBits(data); + return getBytes(intBits); + } + + /** + * 将float数据类型转化成Byte数组 倒序 + * @see ByteOrder#BIG_ENDIAN + * @param data float值 + * @return byte[]数组 + */ + public static byte[] getBytesOfReverse(float data) { + int intBits = Float.floatToIntBits(data); + return getBytesOfReverse(intBits); + } + + /** + * 将double数据类型转化成Byte数组 + * @see ByteOrder#LITTLE_ENDIAN + * @param data double值 + * @return byte[]数组 + */ + public static byte[] getBytes(double data) { + long intBits = Double.doubleToLongBits(data); + return getBytes(intBits); + } + + /** + * 将double数据类型转化成Byte数组 倒序 + * @see ByteOrder#BIG_ENDIAN + * @param data double值 + * @return byte[]数组 + */ + public static byte[] getBytesOfReverse(double data) { + long intBits = Double.doubleToLongBits(data); + return getBytesOfReverse(intBits); + } + + /** + * 字符串转字节数组(UTF-8) + * @param data + * @return + */ + public static byte[] getBytes(String data) { + return data.getBytes(StandardCharsets.UTF_8); + } + + /** + * 将字符串转换成byte[]数组 + * @param data 字符串值 + * @param charsetName 编码方式 + * @return 字节数组 + */ + public static byte[] getBytes(String data, String charsetName) { + Charset charset = Charset.forName(charsetName); + return data.getBytes(charset); + } + + /* + * 把16进制字符串转换成字节数组 + * @param hex + * @return + */ + public static byte[] hexToByte(String hexStr) { + if(StringUtils.isBlank(hexStr)) { + return null; + } + if(hexStr.length()%2 != 0) {//长度为单数 + hexStr = "0" + hexStr;//前面补0 + } + + char[] chars = hexStr.toCharArray(); + int len = chars.length/2; + byte[] bytes = new byte[len]; + for (int i = 0; i < len; i++) { + int x = i*2; + bytes[i] = (byte)Integer.parseInt(String.valueOf(new char[]{chars[x], chars[x+1]}), 16); + } + return bytes; + + } + + public static byte getByte(byte[] src, int offset) { + return src[offset]; + } + + /** + * 字节数组转16进制 + * @param bArray + * @return + */ + public static final String bytesToHex(byte[] bArray) { + StringBuffer sb = new StringBuffer(bArray.length); + String sTemp; + for (int i = 0; i < bArray.length; i++) { + sTemp = Integer.toHexString(0xFF & bArray[i]); + if (sTemp.length() < 2) sb.append(0); + sb.append(sTemp.toUpperCase()); + } + return sb.toString(); + } + + /** + * 字节数组转16进制且格式化十六进制 + * @param bArray + * @return + */ + public static final String bytesToHexByFormat(byte[] bArray) { + StringBuffer sb = new StringBuffer(bArray.length); + String sTemp; + for (int i = 0; i < bArray.length; i++) { + sTemp = Integer.toHexString(0xFF & bArray[i]); + if (sTemp.length() < 2) sb.append(0); + sb.append(sTemp.toUpperCase()).append(' '); + } + return sb.toString(); + } + + /** + * 字节数组转16进制 + * @param src + * @return + */ + public static final String bytesToHex(byte[] src, int offset, int length) { + byte[] bArray = ArrayUtils.subarray(src, offset, offset + length); + return bytesToHex(bArray); + } + + public static final String byteToHex(byte value) { + String s = Integer.toHexString(0xff & value); + if(s.length() == 1) return "0"+s; + return s; + } + + public static final String shortToHex(short value) { + String s = Integer.toHexString(value); + switch (s.length()) { + case 1: return "000" + s; + case 2: return "00" + s; + case 3: return "0" + s; + default: return s; + } + } + + public static final String intToHex(int value) { + StringBuilder s = new StringBuilder(Integer.toHexString(value)); + String v1 = s.toString().replace("f",""); + if (v1.length() <4){ + for (int i = 0; i < 4 - v1.length(); i++) { + s.insert(0, "0"); + } + return s.toString().replace("f",""); + } + else return s.toString().replace("f",""); + } + + public static final String hexTo8Bit(int value,int index){ + String s = Integer.toBinaryString(value); + StringBuilder result = new StringBuilder(s); + if (s.length() < index){ + for (int i = 0; i < index - s.length(); i++) { + result.insert(0,"0"); + } + } + return result.toString(); + } + + /** + * @函数功能: BCD码转为10进制串(阿拉伯数据) + * @输入参数: BCD码 + * @输出结果: 10进制串 + */ + public static String bcdToStr(byte[] bytes){ + StringBuffer temp=new StringBuffer(bytes.length*2); + + for(int i=0;i>>4)); + temp.append((byte)(bytes[i] & 0x0f)); + } + + return temp.toString(); + } + + /** + * + * @param src 原报文 + * @param offset 起始位置 + * @param length 长度 + * @return + */ + public static String bcdToStr(byte[] src, int offset, int length){ + byte[] bArray = ArrayUtils.subarray(src, offset, offset + length); + return bcdToStr(bArray); + } + + public static byte[] str2Bcd(String asc) { + int len = asc.length(); + int mod = len % 2; + + if (mod != 0) { + asc = "0" + asc; + len = asc.length(); + } + + byte abt[]; + if (len >= 2) { + len = len / 2; + } + + byte bbt[] = new byte[len]; + abt = asc.getBytes(); + int j, k; + + for (int p = 0; p < asc.length()/2; p++) { + if ( (abt[2 * p] >= '0') && (abt[2 * p] <= '9')) { + j = abt[2 * p] - '0'; + } else if ( (abt[2 * p] >= 'a') && (abt[2 * p] <= 'z')) { + j = abt[2 * p] - 'a' + 0x0a; + } else { + j = abt[2 * p] - 'A' + 0x0a; + } + + if ( (abt[2 * p + 1] >= '0') && (abt[2 * p + 1] <= '9')) { + k = abt[2 * p + 1] - '0'; + } else if ( (abt[2 * p + 1] >= 'a') && (abt[2 * p + 1] <= 'z')) { + k = abt[2 * p + 1] - 'a' + 0x0a; + }else { + k = abt[2 * p + 1] - 'A' + 0x0a; + } + + int a = (j << 4) + k; + byte b = (byte) a; + bbt[p] = b; + } + return bbt; + } + + private static byte toByte(char c) { + return (byte) c; + } + + /** + * 将字节数组转换成 ushort 数据 + * @param bytes 字节数组 + * @param offset 起始位置 + * @return short值 + */ + public static int bytesToUShort(byte[] bytes, int offset) { + return ((0xff & bytes[0 + offset]) | (0xff00 & (bytes[1 + offset] << 8))); + } + + /** + * 将字节数组转换成 ushort 数据,采用倒序的方式 + * @param bytes 字节数组 + * @return short值 + */ + public static int bytesToUShortOfReverse(byte[] bytes) { + return ByteUtils.bytesToShortOfReverse(bytes, 0); + } + + /** + * 将字节数组转换成 ushort 数据,采用倒序的方式 + * @param bytes 字节数组 + * @param offset 起始位置 + * @return short值 + */ + public static int bytesToUShortOfReverse(byte[] bytes, int offset) { + return ((0xff & bytes[1 + offset]) | (0xff00 & (bytes[0 + offset] << 8))); + } + + /** + * byte数组中取int数值,本方法适用于(低位在前,高位在后)的顺序,和intToBytes配套使用 + * + * @param src + * byte数组 + * @param offset + * 从数组的第offset位开始 + * @return int数值 + */ + public static int bytesToInt(byte[] src, int offset) { + return ((src[offset] & 0xFF) | ((src[offset + 1] & 0xFF) << 8) + | ((src[offset + 2] & 0xFF) << 16) | ((src[offset + 3] & 0xFF) << 24)); + } + + /** + * byte数组中取int数值,本方法适用于(低位在前,高位在后)的顺序,和intToBytes配套使用 + * @param src byte数组 + * @return int数值 + */ + public static int bytesToInt(byte[] src) { + return ByteUtils.bytesToInt(src, 0); + } + + /** + * 将字节数组转换成int数据,采用倒序的方式 + * @param bytes 字节数组 + * @param offset 起始位置 + * @return int值 + */ + public static int bytesToIntOfReverse(byte[] bytes, int offset) { + return (0xff & bytes[3 + offset]) | + (0xff00 & (bytes[2 + offset] << 8)) | + (0xff0000 & (bytes[1 + offset] << 16)) | + (0xff000000 & (bytes[0 + offset] << 24)); + } + + /** + * 将字节数组转换成int数据,采用倒序的方式 + * @param bytes 字节数组 + * @return int值 + */ + public static int bytesToIntOfReverse(byte[] bytes) { + return ByteUtils.bytesToIntOfReverse(bytes, 0); + } + + /** + * 将字节数组转换成uint数据 + * @param bytes 字节数组 + * @param offset 起始位置 + * @return int值 + */ + public static long bytesToUInt(byte[] bytes, int offset) { + int value = bytesToInt(bytes, offset); + if (value >= 0) return value; + return 65536L * 65536L + value; + } + + /** + * 将字节数组转换成uint数据 + * @param bytes 字节数组 + * @return int值 + */ + public static long bytesToUInt(byte[] bytes) { + return ByteUtils.bytesToUInt(bytes, 0); + } + + /** + * 将字节数组转换成uint数据 + * @param bytes 字节数组 + * @param offset 起始位置 + * @return int值 + */ + public static long bytesToUIntOfReverse(byte[] bytes, int offset) { + int value = bytesToIntOfReverse(bytes, offset); + if (value >= 0) return value; + return 65536L * 65536L + value; + } + + /** + * 将字节数组转换成uint数据 倒序 + * @param bytes 字节数组 + * @return int值 + */ + public static long bytesToUIntOfReverse(byte[] bytes) { + return ByteUtils.bytesToUIntOfReverse(bytes, 0); + } + + /** + * 将字节数组转换成float数据 + * @param bytes 字节数组 + * @return float值 + */ + public static float bytesToFloat(byte[] bytes) { + return Float.intBitsToFloat(bytesToInt(bytes, 0)); + } + + /** + * 将字节数组转换成float数据 + * @param bytes 字节数组 + * @param offset 起始位置 + * @return float值 + */ + public static float bytesToFloat(byte[] bytes, int offset) { + return Float.intBitsToFloat(bytesToInt(bytes,offset)); + } + + /** + * 将字节数组转换成float数据 + * @param bytes 字节数组 + * @return float值 + */ + public static float bytesToFloatOfReverse(byte[] bytes) { + return bytesToFloatOfReverse(bytes, 0); + } + + /** + * 将字节数组转换成float数据 + * @param bytes 字节数组 + * @param offset 偏移量 + * @return float值 + */ + public static float bytesToFloatOfReverse(byte[] bytes, int offset) { + return Float.intBitsToFloat(bytesToIntOfReverse(bytes, offset)); + } + + + /** + * byte数组中取double数值 + * @param src byte数组 + * @return double数值 + */ + public static double bytesToDouble(byte[] src) { + return Double.longBitsToDouble(bytesToLong(src)); + } + + /** + * byte数组中取double数值 + * @param src byte数组 + * @param offset 从数组的第offset位开始 + * @return double数值 + */ + public static double bytesToDouble(byte[] src, int offset) { + return Double.longBitsToDouble(bytesToLong(src, offset)); + } + + /** + * byte数组中取double数值 + * @param src byte数组 + * @return double数值 + */ + public static double bytesToDoubleOfReverse(byte[] src) { + return bytesToDoubleOfReverse(src, 0); + } + + /** + * byte数组中取double数值 + * @param src byte数组 + * @param offset 从数组的第offset位开始 + * @return double数值 + */ + public static double bytesToDoubleOfReverse(byte[] src, int offset) { + return Double.longBitsToDouble(bytesToLongOfReverse(src, offset)); + } + + /** + * 去掉字节数组尾数为零的字节,并将其转成字符串 + * @param src + * @param charset + * @return + */ + public static String bytesToString(byte[] src, Charset charset){ + int search = Arrays.binarySearch(src, (byte) 0); + return new String(Arrays.copyOf(src, search), charset); + } + + /** + * 去掉字节数组尾数为零的字节,并将其转成字符串 + * @param src + * @return + */ + public static String bytesToString(byte[] src){ + return new String(wipeLastZero(src)); + } + + /** + * 去掉字节数组尾数为零的字节,并将其转成字符串 + * @param src + * @return + */ + public static String bytesToString(byte[] src, int startIndex, int endIndex){ + return new String(wipeLastZero(subBytes(src, startIndex, endIndex))); + } + + /** + * 去掉字节数组尾数为零的字节,并将其转成字符串 + * @param src + * @return + */ + public static String bytesToString(byte[] src, int startIndex, int endIndex, Charset charset){ + return new String(wipeLastZero(subBytes(src, startIndex, endIndex)), charset); + } + + /** + * 将byte[]数组的数据进行翻转 + * @param reverse 等待反转的字符串 + */ + public static void bytesReverse(byte[] reverse) { + if (reverse != null) { + byte tmp = 0; + for (int i = 0; i < reverse.length / 2; i++) { + tmp = reverse[i]; + reverse[i] = reverse[reverse.length - 1 - i]; + reverse[reverse.length - 1 - i] = tmp; + } + } + } + + /** + * 去除包含0的字节 + * @param src + * @return + */ + private static byte[] wipeLastZero(byte[] src){ + int index = 0; + for(int i=0; i 0 ? 1 : 0); + } + + /** + *将bool数组转换到byte数组
+ * @param array bool数组 + * @return 字节数组 + */ + public static byte[] boolArrayToByte(boolean[] array) { + if (array == null) return null; + + int length = array.length % 8 == 0 ? array.length / 8 : array.length / 8 + 1; + byte[] buffer = new byte[length]; + + for (int i = 0; i < array.length; i++) { + if (array[i]) { + buffer[i / 8] += (1 << i % 8); + } + } + + return buffer; + } + + public static Integer cutMessageHexTo(byte[] source, int startIndex, int endIndex){ + byte[] subarray = ArrayUtils.subarray(source, startIndex, endIndex); + String s = bytesToHexString(subarray); + return Integer.parseInt(s,16); + } + + /** + * byte数组转换炒年糕十六进制字符串 + * + * @param bArray byte数组 + * @return hex字符串 + */ + public static String bytesToHexString(byte[] bArray) { + StringBuilder sb = new StringBuilder(bArray.length); + for (int i = 0; i < bArray.length; i++) { + String hexStr = Integer.toHexString(0xFF & bArray[i]); + if (hexStr.length() < 2) { + sb.append(0); + } + sb.append(hexStr.toUpperCase()); + } + return sb.toString(); + } + + +} diff --git a/xinda-common/src/main/java/com/xinda/common/utils/gateway/protocol/NettyUtils.java b/xinda-common/src/main/java/com/xinda/common/utils/gateway/protocol/NettyUtils.java new file mode 100644 index 0000000..c45d879 --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/utils/gateway/protocol/NettyUtils.java @@ -0,0 +1,22 @@ +package com.xinda.common.utils.gateway.protocol; + +import io.netty.buffer.ByteBuf; +import io.netty.buffer.ByteBufUtil; + +/** + * @author gsb + * @date 2022/9/15 14:44 + */ +public class NettyUtils { + + /** + * ByteBuf转 byte[] + * @param buf buffer + * @return byte[] + */ + public static byte[] readBytesFromByteBuf(ByteBuf buf){ + return ByteBufUtil.getBytes(buf); + } + + +} diff --git a/xinda-common/src/main/java/com/xinda/common/utils/html/EscapeUtil.java b/xinda-common/src/main/java/com/xinda/common/utils/html/EscapeUtil.java new file mode 100644 index 0000000..5fa5a56 --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/utils/html/EscapeUtil.java @@ -0,0 +1,167 @@ +package com.xinda.common.utils.html; + +import com.xinda.common.utils.StringUtils; + +/** + * 转义和反转义工具类 + * + * @author ruoyi + */ +public class EscapeUtil +{ + public static final String RE_HTML_MARK = "(<[^<]*?>)|(<[\\s]*?/[^<]*?>)|(<[^<]*?/[\\s]*?>)"; + + private static final char[][] TEXT = new char[64][]; + + static + { + for (int i = 0; i < 64; i++) + { + TEXT[i] = new char[] { (char) i }; + } + + // special HTML characters + TEXT['\''] = "'".toCharArray(); // 单引号 + TEXT['"'] = """.toCharArray(); // 双引号 + TEXT['&'] = "&".toCharArray(); // &符 + TEXT['<'] = "<".toCharArray(); // 小于号 + TEXT['>'] = ">".toCharArray(); // 大于号 + } + + /** + * 转义文本中的HTML字符为安全的字符 + * + * @param text 被转义的文本 + * @return 转义后的文本 + */ + public static String escape(String text) + { + return encode(text); + } + + /** + * 还原被转义的HTML特殊字符 + * + * @param content 包含转义符的HTML内容 + * @return 转换后的字符串 + */ + public static String unescape(String content) + { + return decode(content); + } + + /** + * 清除所有HTML标签,但是不删除标签内的内容 + * + * @param content 文本 + * @return 清除标签后的文本 + */ + public static String clean(String content) + { + return new HTMLFilter().filter(content); + } + + /** + * Escape编码 + * + * @param text 被编码的文本 + * @return 编码后的字符 + */ + private static String encode(String text) + { + if (StringUtils.isEmpty(text)) + { + return StringUtils.EMPTY; + } + + final StringBuilder tmp = new StringBuilder(text.length() * 6); + char c; + for (int i = 0; i < text.length(); i++) + { + c = text.charAt(i); + if (c < 256) + { + tmp.append("%"); + if (c < 16) + { + tmp.append("0"); + } + tmp.append(Integer.toString(c, 16)); + } + else + { + tmp.append("%u"); + if (c <= 0xfff) + { + // issue#I49JU8@Gitee + tmp.append("0"); + } + tmp.append(Integer.toString(c, 16)); + } + } + return tmp.toString(); + } + + /** + * Escape解码 + * + * @param content 被转义的内容 + * @return 解码后的字符串 + */ + public static String decode(String content) + { + if (StringUtils.isEmpty(content)) + { + return content; + } + + StringBuilder tmp = new StringBuilder(content.length()); + int lastPos = 0, pos = 0; + char ch; + while (lastPos < content.length()) + { + pos = content.indexOf("%", lastPos); + if (pos == lastPos) + { + if (content.charAt(pos + 1) == 'u') + { + ch = (char) Integer.parseInt(content.substring(pos + 2, pos + 6), 16); + tmp.append(ch); + lastPos = pos + 6; + } + else + { + ch = (char) Integer.parseInt(content.substring(pos + 1, pos + 3), 16); + tmp.append(ch); + lastPos = pos + 3; + } + } + else + { + if (pos == -1) + { + tmp.append(content.substring(lastPos)); + lastPos = content.length(); + } + else + { + tmp.append(content.substring(lastPos, pos)); + lastPos = pos; + } + } + } + return tmp.toString(); + } + + public static void main(String[] args) + { + String html = ""; + String escape = EscapeUtil.escape(html); + // String html = "ipt>alert(\"XSS\")ipt>"; + // String html = "<123"; + // String html = "123>"; + System.out.println("clean: " + EscapeUtil.clean(html)); + System.out.println("escape: " + escape); + System.out.println("unescape: " + EscapeUtil.unescape(escape)); + } +} diff --git a/xinda-common/src/main/java/com/xinda/common/utils/html/HTMLFilter.java b/xinda-common/src/main/java/com/xinda/common/utils/html/HTMLFilter.java new file mode 100644 index 0000000..68f6fe4 --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/utils/html/HTMLFilter.java @@ -0,0 +1,570 @@ +package com.xinda.common.utils.html; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.ConcurrentMap; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +/** + * HTML过滤器,用于去除XSS漏洞隐患。 + * + * @author ruoyi + */ +public final class HTMLFilter +{ + /** + * regex flag union representing /si modifiers in php + **/ + private static final int REGEX_FLAGS_SI = Pattern.CASE_INSENSITIVE | Pattern.DOTALL; + private static final Pattern P_COMMENTS = Pattern.compile("", Pattern.DOTALL); + private static final Pattern P_COMMENT = Pattern.compile("^!--(.*)--$", REGEX_FLAGS_SI); + private static final Pattern P_TAGS = Pattern.compile("<(.*?)>", Pattern.DOTALL); + private static final Pattern P_END_TAG = Pattern.compile("^/([a-z0-9]+)", REGEX_FLAGS_SI); + private static final Pattern P_START_TAG = Pattern.compile("^([a-z0-9]+)(.*?)(/?)$", REGEX_FLAGS_SI); + private static final Pattern P_QUOTED_ATTRIBUTES = Pattern.compile("([a-z0-9]+)=([\"'])(.*?)\\2", REGEX_FLAGS_SI); + private static final Pattern P_UNQUOTED_ATTRIBUTES = Pattern.compile("([a-z0-9]+)(=)([^\"\\s']+)", REGEX_FLAGS_SI); + private static final Pattern P_PROTOCOL = Pattern.compile("^([^:]+):", REGEX_FLAGS_SI); + private static final Pattern P_ENTITY = Pattern.compile("&#(\\d+);?"); + private static final Pattern P_ENTITY_UNICODE = Pattern.compile("&#x([0-9a-f]+);?"); + private static final Pattern P_ENCODE = Pattern.compile("%([0-9a-f]{2});?"); + private static final Pattern P_VALID_ENTITIES = Pattern.compile("&([^&;]*)(?=(;|&|$))"); + private static final Pattern P_VALID_QUOTES = Pattern.compile("(>|^)([^<]+?)(<|$)", Pattern.DOTALL); + private static final Pattern P_END_ARROW = Pattern.compile("^>"); + private static final Pattern P_BODY_TO_END = Pattern.compile("<([^>]*?)(?=<|$)"); + private static final Pattern P_XML_CONTENT = Pattern.compile("(^|>)([^<]*?)(?=>)"); + private static final Pattern P_STRAY_LEFT_ARROW = Pattern.compile("<([^>]*?)(?=<|$)"); + private static final Pattern P_STRAY_RIGHT_ARROW = Pattern.compile("(^|>)([^<]*?)(?=>)"); + private static final Pattern P_AMP = Pattern.compile("&"); + private static final Pattern P_QUOTE = Pattern.compile("\""); + private static final Pattern P_LEFT_ARROW = Pattern.compile("<"); + private static final Pattern P_RIGHT_ARROW = Pattern.compile(">"); + private static final Pattern P_BOTH_ARROWS = Pattern.compile("<>"); + + // @xxx could grow large... maybe use sesat's ReferenceMap + private static final ConcurrentMap P_REMOVE_PAIR_BLANKS = new ConcurrentHashMap<>(); + private static final ConcurrentMap P_REMOVE_SELF_BLANKS = new ConcurrentHashMap<>(); + + /** + * set of allowed html elements, along with allowed attributes for each element + **/ + private final Map> vAllowed; + /** + * counts of open tags for each (allowable) html element + **/ + private final Map vTagCounts = new HashMap<>(); + + /** + * html elements which must always be self-closing (e.g. "") + **/ + private final String[] vSelfClosingTags; + /** + * html elements which must always have separate opening and closing tags (e.g. "") + **/ + private final String[] vNeedClosingTags; + /** + * set of disallowed html elements + **/ + private final String[] vDisallowed; + /** + * attributes which should be checked for valid protocols + **/ + private final String[] vProtocolAtts; + /** + * allowed protocols + **/ + private final String[] vAllowedProtocols; + /** + * tags which should be removed if they contain no content (e.g. "" or "") + **/ + private final String[] vRemoveBlanks; + /** + * entities allowed within html markup + **/ + private final String[] vAllowedEntities; + /** + * flag determining whether comments are allowed in input String. + */ + private final boolean stripComment; + private final boolean encodeQuotes; + /** + * flag determining whether to try to make tags when presented with "unbalanced" angle brackets (e.g. "" + * becomes " text "). If set to false, unbalanced angle brackets will be html escaped. + */ + private final boolean alwaysMakeTags; + + /** + * Default constructor. + */ + public HTMLFilter() + { + vAllowed = new HashMap<>(); + + final ArrayList a_atts = new ArrayList<>(); + a_atts.add("href"); + a_atts.add("target"); + vAllowed.put("a", a_atts); + + final ArrayList img_atts = new ArrayList<>(); + img_atts.add("src"); + img_atts.add("width"); + img_atts.add("height"); + img_atts.add("alt"); + vAllowed.put("img", img_atts); + + final ArrayList no_atts = new ArrayList<>(); + vAllowed.put("b", no_atts); + vAllowed.put("strong", no_atts); + vAllowed.put("i", no_atts); + vAllowed.put("em", no_atts); + + vSelfClosingTags = new String[] { "img" }; + vNeedClosingTags = new String[] { "a", "b", "strong", "i", "em" }; + vDisallowed = new String[] {}; + vAllowedProtocols = new String[] { "http", "mailto", "https" }; // no ftp. + vProtocolAtts = new String[] { "src", "href" }; + vRemoveBlanks = new String[] { "a", "b", "strong", "i", "em" }; + vAllowedEntities = new String[] { "amp", "gt", "lt", "quot" }; + stripComment = true; + encodeQuotes = true; + alwaysMakeTags = false; + } + + /** + * Map-parameter configurable constructor. + * + * @param conf map containing configuration. keys match field names. + */ + @SuppressWarnings("unchecked") + public HTMLFilter(final Map conf) + { + + assert conf.containsKey("vAllowed") : "configuration requires vAllowed"; + assert conf.containsKey("vSelfClosingTags") : "configuration requires vSelfClosingTags"; + assert conf.containsKey("vNeedClosingTags") : "configuration requires vNeedClosingTags"; + assert conf.containsKey("vDisallowed") : "configuration requires vDisallowed"; + assert conf.containsKey("vAllowedProtocols") : "configuration requires vAllowedProtocols"; + assert conf.containsKey("vProtocolAtts") : "configuration requires vProtocolAtts"; + assert conf.containsKey("vRemoveBlanks") : "configuration requires vRemoveBlanks"; + assert conf.containsKey("vAllowedEntities") : "configuration requires vAllowedEntities"; + + vAllowed = Collections.unmodifiableMap((HashMap>) conf.get("vAllowed")); + vSelfClosingTags = (String[]) conf.get("vSelfClosingTags"); + vNeedClosingTags = (String[]) conf.get("vNeedClosingTags"); + vDisallowed = (String[]) conf.get("vDisallowed"); + vAllowedProtocols = (String[]) conf.get("vAllowedProtocols"); + vProtocolAtts = (String[]) conf.get("vProtocolAtts"); + vRemoveBlanks = (String[]) conf.get("vRemoveBlanks"); + vAllowedEntities = (String[]) conf.get("vAllowedEntities"); + stripComment = conf.containsKey("stripComment") ? (Boolean) conf.get("stripComment") : true; + encodeQuotes = conf.containsKey("encodeQuotes") ? (Boolean) conf.get("encodeQuotes") : true; + alwaysMakeTags = conf.containsKey("alwaysMakeTags") ? (Boolean) conf.get("alwaysMakeTags") : true; + } + + private void reset() + { + vTagCounts.clear(); + } + + // --------------------------------------------------------------- + // my versions of some PHP library functions + public static String chr(final int decimal) + { + return String.valueOf((char) decimal); + } + + public static String htmlSpecialChars(final String s) + { + String result = s; + result = regexReplace(P_AMP, "&", result); + result = regexReplace(P_QUOTE, """, result); + result = regexReplace(P_LEFT_ARROW, "<", result); + result = regexReplace(P_RIGHT_ARROW, ">", result); + return result; + } + + // --------------------------------------------------------------- + + /** + * given a user submitted input String, filter out any invalid or restricted html. + * + * @param input text (i.e. submitted by a user) than may contain html + * @return "clean" version of input, with only valid, whitelisted html elements allowed + */ + public String filter(final String input) + { + reset(); + String s = input; + + s = escapeComments(s); + + s = balanceHTML(s); + + s = checkTags(s); + + s = processRemoveBlanks(s); + + // s = validateEntities(s); + + return s; + } + + public boolean isAlwaysMakeTags() + { + return alwaysMakeTags; + } + + public boolean isStripComments() + { + return stripComment; + } + + private String escapeComments(final String s) + { + final Matcher m = P_COMMENTS.matcher(s); + final StringBuffer buf = new StringBuffer(); + if (m.find()) + { + final String match = m.group(1); // (.*?) + m.appendReplacement(buf, Matcher.quoteReplacement("")); + } + m.appendTail(buf); + + return buf.toString(); + } + + private String balanceHTML(String s) + { + if (alwaysMakeTags) + { + // + // try and form html + // + s = regexReplace(P_END_ARROW, "", s); + // 不追加结束标签 + s = regexReplace(P_BODY_TO_END, "<$1>", s); + s = regexReplace(P_XML_CONTENT, "$1<$2", s); + + } + else + { + // + // escape stray brackets + // + s = regexReplace(P_STRAY_LEFT_ARROW, "<$1", s); + s = regexReplace(P_STRAY_RIGHT_ARROW, "$1$2><", s); + + // + // the last regexp causes '<>' entities to appear + // (we need to do a lookahead assertion so that the last bracket can + // be used in the next pass of the regexp) + // + s = regexReplace(P_BOTH_ARROWS, "", s); + } + + return s; + } + + private String checkTags(String s) + { + Matcher m = P_TAGS.matcher(s); + + final StringBuffer buf = new StringBuffer(); + while (m.find()) + { + String replaceStr = m.group(1); + replaceStr = processTag(replaceStr); + m.appendReplacement(buf, Matcher.quoteReplacement(replaceStr)); + } + m.appendTail(buf); + + // these get tallied in processTag + // (remember to reset before subsequent calls to filter method) + final StringBuilder sBuilder = new StringBuilder(buf.toString()); + for (String key : vTagCounts.keySet()) + { + for (int ii = 0; ii < vTagCounts.get(key); ii++) + { + sBuilder.append(""); + } + } + s = sBuilder.toString(); + + return s; + } + + private String processRemoveBlanks(final String s) + { + String result = s; + for (String tag : vRemoveBlanks) + { + if (!P_REMOVE_PAIR_BLANKS.containsKey(tag)) + { + P_REMOVE_PAIR_BLANKS.putIfAbsent(tag, Pattern.compile("<" + tag + "(\\s[^>]*)?>")); + } + result = regexReplace(P_REMOVE_PAIR_BLANKS.get(tag), "", result); + if (!P_REMOVE_SELF_BLANKS.containsKey(tag)) + { + P_REMOVE_SELF_BLANKS.putIfAbsent(tag, Pattern.compile("<" + tag + "(\\s[^>]*)?/>")); + } + result = regexReplace(P_REMOVE_SELF_BLANKS.get(tag), "", result); + } + + return result; + } + + private static String regexReplace(final Pattern regex_pattern, final String replacement, final String s) + { + Matcher m = regex_pattern.matcher(s); + return m.replaceAll(replacement); + } + + private String processTag(final String s) + { + // ending tags + Matcher m = P_END_TAG.matcher(s); + if (m.find()) + { + final String name = m.group(1).toLowerCase(); + if (allowed(name)) + { + if (!inArray(name, vSelfClosingTags)) + { + if (vTagCounts.containsKey(name)) + { + vTagCounts.put(name, vTagCounts.get(name) - 1); + return ""; + } + } + } + } + + // starting tags + m = P_START_TAG.matcher(s); + if (m.find()) + { + final String name = m.group(1).toLowerCase(); + final String body = m.group(2); + String ending = m.group(3); + + // debug( "in a starting tag, name='" + name + "'; body='" + body + "'; ending='" + ending + "'" ); + if (allowed(name)) + { + final StringBuilder params = new StringBuilder(); + + final Matcher m2 = P_QUOTED_ATTRIBUTES.matcher(body); + final Matcher m3 = P_UNQUOTED_ATTRIBUTES.matcher(body); + final List paramNames = new ArrayList<>(); + final List paramValues = new ArrayList<>(); + while (m2.find()) + { + paramNames.add(m2.group(1)); // ([a-z0-9]+) + paramValues.add(m2.group(3)); // (.*?) + } + while (m3.find()) + { + paramNames.add(m3.group(1)); // ([a-z0-9]+) + paramValues.add(m3.group(3)); // ([^\"\\s']+) + } + + String paramName, paramValue; + for (int ii = 0; ii < paramNames.size(); ii++) + { + paramName = paramNames.get(ii).toLowerCase(); + paramValue = paramValues.get(ii); + + // debug( "paramName='" + paramName + "'" ); + // debug( "paramValue='" + paramValue + "'" ); + // debug( "allowed? " + vAllowed.get( name ).contains( paramName ) ); + + if (allowedAttribute(name, paramName)) + { + if (inArray(paramName, vProtocolAtts)) + { + paramValue = processParamProtocol(paramValue); + } + params.append(' ').append(paramName).append("=\\\"").append(paramValue).append("\\\""); + } + } + + if (inArray(name, vSelfClosingTags)) + { + ending = " /"; + } + + if (inArray(name, vNeedClosingTags)) + { + ending = ""; + } + + if (ending == null || ending.length() < 1) + { + if (vTagCounts.containsKey(name)) + { + vTagCounts.put(name, vTagCounts.get(name) + 1); + } + else + { + vTagCounts.put(name, 1); + } + } + else + { + ending = " /"; + } + return "<" + name + params + ending + ">"; + } + else + { + return ""; + } + } + + // comments + m = P_COMMENT.matcher(s); + if (!stripComment && m.find()) + { + return "<" + m.group() + ">"; + } + + return ""; + } + + private String processParamProtocol(String s) + { + s = decodeEntities(s); + final Matcher m = P_PROTOCOL.matcher(s); + if (m.find()) + { + final String protocol = m.group(1); + if (!inArray(protocol, vAllowedProtocols)) + { + // bad protocol, turn into local anchor link instead + s = "#" + s.substring(protocol.length() + 1); + if (s.startsWith("#//")) + { + s = "#" + s.substring(3); + } + } + } + + return s; + } + + private String decodeEntities(String s) + { + StringBuffer buf = new StringBuffer(); + + Matcher m = P_ENTITY.matcher(s); + while (m.find()) + { + final String match = m.group(1); + final int decimal = Integer.decode(match).intValue(); + m.appendReplacement(buf, Matcher.quoteReplacement(chr(decimal))); + } + m.appendTail(buf); + s = buf.toString(); + + buf = new StringBuffer(); + m = P_ENTITY_UNICODE.matcher(s); + while (m.find()) + { + final String match = m.group(1); + final int decimal = Integer.valueOf(match, 16).intValue(); + m.appendReplacement(buf, Matcher.quoteReplacement(chr(decimal))); + } + m.appendTail(buf); + s = buf.toString(); + + buf = new StringBuffer(); + m = P_ENCODE.matcher(s); + while (m.find()) + { + final String match = m.group(1); + final int decimal = Integer.valueOf(match, 16).intValue(); + m.appendReplacement(buf, Matcher.quoteReplacement(chr(decimal))); + } + m.appendTail(buf); + s = buf.toString(); + + s = validateEntities(s); + return s; + } + + private String validateEntities(final String s) + { + StringBuffer buf = new StringBuffer(); + + // validate entities throughout the string + Matcher m = P_VALID_ENTITIES.matcher(s); + while (m.find()) + { + final String one = m.group(1); // ([^&;]*) + final String two = m.group(2); // (?=(;|&|$)) + m.appendReplacement(buf, Matcher.quoteReplacement(checkEntity(one, two))); + } + m.appendTail(buf); + + return encodeQuotes(buf.toString()); + } + + private String encodeQuotes(final String s) + { + if (encodeQuotes) + { + StringBuffer buf = new StringBuffer(); + Matcher m = P_VALID_QUOTES.matcher(s); + while (m.find()) + { + final String one = m.group(1); // (>|^) + final String two = m.group(2); // ([^<]+?) + final String three = m.group(3); // (<|$) + // 不替换双引号为",防止json格式无效 regexReplace(P_QUOTE, """, two) + m.appendReplacement(buf, Matcher.quoteReplacement(one + two + three)); + } + m.appendTail(buf); + return buf.toString(); + } + else + { + return s; + } + } + + private String checkEntity(final String preamble, final String term) + { + + return ";".equals(term) && isValidEntity(preamble) ? '&' + preamble : "&" + preamble; + } + + private boolean isValidEntity(final String entity) + { + return inArray(entity, vAllowedEntities); + } + + private static boolean inArray(final String s, final String[] array) + { + for (String item : array) + { + if (item != null && item.equals(s)) + { + return true; + } + } + return false; + } + + private boolean allowed(final String name) + { + return (vAllowed.isEmpty() || vAllowed.containsKey(name)) && !inArray(name, vDisallowed); + } + + private boolean allowedAttribute(final String name, final String paramName) + { + return allowed(name) && (vAllowed.isEmpty() || vAllowed.get(name).contains(paramName)); + } +} \ No newline at end of file diff --git a/xinda-common/src/main/java/com/xinda/common/utils/http/HttpHelper.java b/xinda-common/src/main/java/com/xinda/common/utils/http/HttpHelper.java new file mode 100644 index 0000000..ed6f6ae --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/utils/http/HttpHelper.java @@ -0,0 +1,55 @@ +package com.xinda.common.utils.http; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.nio.charset.StandardCharsets; +import javax.servlet.ServletRequest; +import org.apache.commons.lang3.exception.ExceptionUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * 通用http工具封装 + * + * @author ruoyi + */ +public class HttpHelper +{ + private static final Logger LOGGER = LoggerFactory.getLogger(HttpHelper.class); + + public static String getBodyString(ServletRequest request) + { + StringBuilder sb = new StringBuilder(); + BufferedReader reader = null; + try (InputStream inputStream = request.getInputStream()) + { + reader = new BufferedReader(new InputStreamReader(inputStream, StandardCharsets.UTF_8)); + String line = ""; + while ((line = reader.readLine()) != null) + { + sb.append(line); + } + } + catch (IOException e) + { + LOGGER.warn("getBodyString出现问题!"); + } + finally + { + if (reader != null) + { + try + { + reader.close(); + } + catch (IOException e) + { + LOGGER.error(ExceptionUtils.getMessage(e)); + } + } + } + return sb.toString(); + } +} diff --git a/xinda-common/src/main/java/com/xinda/common/utils/http/HttpUtils.java b/xinda-common/src/main/java/com/xinda/common/utils/http/HttpUtils.java new file mode 100644 index 0000000..64bf17e --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/utils/http/HttpUtils.java @@ -0,0 +1,338 @@ +package com.xinda.common.utils.http; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.io.PrintWriter; +import java.net.ConnectException; +import java.net.SocketTimeoutException; +import java.net.URL; +import java.net.URLConnection; +import java.nio.charset.StandardCharsets; +import java.security.cert.X509Certificate; +import javax.net.ssl.HostnameVerifier; +import javax.net.ssl.HttpsURLConnection; +import javax.net.ssl.SSLContext; +import javax.net.ssl.SSLSession; +import javax.net.ssl.TrustManager; +import javax.net.ssl.X509TrustManager; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import com.xinda.common.constant.Constants; +import com.xinda.common.utils.StringUtils; + +/** + * 通用http发送方法 + * + * @author ruoyi + */ +public class HttpUtils +{ + private static final Logger log = LoggerFactory.getLogger(HttpUtils.class); + + /** + * 向指定 URL 发送GET方法的请求 + * + * @param url 发送请求的 URL + * @return 所代表远程资源的响应结果 + */ + public static String sendGet(String url) + { + return sendGet(url, StringUtils.EMPTY); + } + + /** + * 向指定 URL 发送GET方法的请求 + * + * @param url 发送请求的 URL + * @param param 请求参数,请求参数应该是 name1=value1&name2=value2 的形式。 + * @return 所代表远程资源的响应结果 + */ + public static String sendGet(String url, String param) + { + return sendGet(url, param, Constants.UTF8); + } + + /** + * 向指定 URL 发送GET方法的请求 + * + * @param url 发送请求的 URL + * @param param 请求参数,请求参数应该是 name1=value1&name2=value2 的形式。 + * @param contentType 编码类型 + * @return 所代表远程资源的响应结果 + */ + public static String sendGet(String url, String param, String contentType) + { + StringBuilder result = new StringBuilder(); + BufferedReader in = null; + try + { + String urlNameString = StringUtils.isNotBlank(param) ? url + "?" + param : url; + log.info("sendGet - {}", urlNameString); + URL realUrl = new URL(urlNameString); + URLConnection connection = realUrl.openConnection(); + connection.setRequestProperty("accept", "*/*"); + connection.setRequestProperty("connection", "Keep-Alive"); + connection.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)"); + connection.connect(); + in = new BufferedReader(new InputStreamReader(connection.getInputStream(), contentType)); + String line; + while ((line = in.readLine()) != null) + { + result.append(line); + } + log.info("recv - {}", result); + } + catch (ConnectException e) + { + log.error("调用HttpUtils.sendGet ConnectException, url=" + url + ",param=" + param, e); + } + catch (SocketTimeoutException e) + { + log.error("调用HttpUtils.sendGet SocketTimeoutException, url=" + url + ",param=" + param, e); + } + catch (IOException e) + { + log.error("调用HttpUtils.sendGet IOException, url=" + url + ",param=" + param, e); + } + catch (Exception e) + { + log.error("调用HttpsUtil.sendGet Exception, url=" + url + ",param=" + param, e); + } + finally + { + try + { + if (in != null) + { + in.close(); + } + } + catch (Exception ex) + { + log.error("调用in.close Exception, url=" + url + ",param=" + param, ex); + } + } + return result.toString(); + } + + /** + * 向指定 URL 发送POST方法的请求 + * + * @param url 发送请求的 URL + * @param param 请求参数,请求参数应该是 JSON String格式 的形式。 + * @return 所代表远程资源的响应结果 + */ + public static String sendPost(String url, String param) + { + PrintWriter out = null; + BufferedReader in = null; + StringBuilder result = new StringBuilder(); + try + { + log.info("sendPost - {}", url); + URL realUrl = new URL(url); + URLConnection conn = realUrl.openConnection(); + conn.setRequestProperty("accept", "*/*"); + conn.setRequestProperty("connection", "Keep-Alive"); + conn.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)"); + conn.setRequestProperty("Accept-Charset", "utf-8"); + conn.setRequestProperty("contentType", "utf-8"); + conn.setDoOutput(true); + conn.setDoInput(true); + out = new PrintWriter(conn.getOutputStream()); + out.print(param); + out.flush(); + in = new BufferedReader(new InputStreamReader(conn.getInputStream(), StandardCharsets.UTF_8)); + String line; + while ((line = in.readLine()) != null) + { + result.append(line); + } + log.info("recv - {}", result); + } + catch (ConnectException e) + { + log.error("调用HttpUtils.sendPost ConnectException, url=" + url + ",param=" + param, e); + } + catch (SocketTimeoutException e) + { + log.error("调用HttpUtils.sendPost SocketTimeoutException, url=" + url + ",param=" + param, e); + } + catch (IOException e) + { + log.error("调用HttpUtils.sendPost IOException, url=" + url + ",param=" + param, e); + } + catch (Exception e) + { + log.error("调用HttpsUtil.sendPost Exception, url=" + url + ",param=" + param, e); + } + finally + { + try + { + if (out != null) + { + out.close(); + } + if (in != null) + { + in.close(); + } + } + catch (IOException ex) + { + log.error("调用in.close Exception, url=" + url + ",param=" + param, ex); + } + } + return result.toString(); + } + + public static String sendSSLPost(String url, String param) + { + StringBuilder result = new StringBuilder(); + String urlNameString = url + "?" + param; + try + { + log.info("sendSSLPost - {}", urlNameString); + SSLContext sc = SSLContext.getInstance("SSL"); + sc.init(null, new TrustManager[] { new TrustAnyTrustManager() }, new java.security.SecureRandom()); + URL console = new URL(urlNameString); + HttpsURLConnection conn = (HttpsURLConnection) console.openConnection(); + conn.setRequestProperty("accept", "*/*"); + conn.setRequestProperty("connection", "Keep-Alive"); + conn.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)"); + conn.setRequestProperty("Accept-Charset", "utf-8"); + conn.setRequestProperty("contentType", "utf-8"); + conn.setDoOutput(true); + conn.setDoInput(true); + + conn.setSSLSocketFactory(sc.getSocketFactory()); + conn.setHostnameVerifier(new TrustAnyHostnameVerifier()); + conn.connect(); + InputStream is = conn.getInputStream(); + BufferedReader br = new BufferedReader(new InputStreamReader(is)); + String ret = ""; + while ((ret = br.readLine()) != null) + { + if (ret != null && !"".equals(ret.trim())) + { + result.append(new String(ret.getBytes(StandardCharsets.ISO_8859_1), StandardCharsets.UTF_8)); + } + } + log.info("recv - {}", result); + conn.disconnect(); + br.close(); + } + catch (ConnectException e) + { + log.error("调用HttpUtils.sendSSLPost ConnectException, url=" + url + ",param=" + param, e); + } + catch (SocketTimeoutException e) + { + log.error("调用HttpUtils.sendSSLPost SocketTimeoutException, url=" + url + ",param=" + param, e); + } + catch (IOException e) + { + log.error("调用HttpUtils.sendSSLPost IOException, url=" + url + ",param=" + param, e); + } + catch (Exception e) + { + log.error("调用HttpsUtil.sendSSLPost Exception, url=" + url + ",param=" + param, e); + } + return result.toString(); + } + + public static String sendJsonPost(String url, String json) throws IOException { + PrintWriter out = null; + BufferedReader in = null; + StringBuilder result = new StringBuilder(); + try + { + log.info("sendPost - {}", url); + URL realUrl = new URL(url); + URLConnection conn = realUrl.openConnection(); + conn.setRequestProperty("accept", "*/*"); + conn.setRequestProperty("connection", "Keep-Alive"); + conn.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)"); + conn.setRequestProperty("Accept-Charset", "utf-8"); + conn.setRequestProperty("Content-Type", "application/json"); + conn.setDoOutput(true); + conn.setDoInput(true); + out = new PrintWriter(conn.getOutputStream()); + out.print(json); + out.flush(); + in = new BufferedReader(new InputStreamReader(conn.getInputStream(), StandardCharsets.UTF_8)); + String line; + while ((line = in.readLine()) != null) + { + result.append(line); + } + log.info("recv - {}", result); + } + catch (ConnectException e) + { + log.error("调用HttpUtils.sendPost ConnectException, url=" + url + ",param=" + json, e); + } + catch (SocketTimeoutException e) + { + log.error("调用HttpUtils.sendPost SocketTimeoutException, url=" + url + ",param=" + json, e); + } + catch (IOException e) + { + log.error("调用HttpUtils.sendPost IOException, url=" + url + ",param=" + json, e); + } + catch (Exception e) + { + log.error("调用HttpsUtil.sendPost Exception, url=" + url + ",param=" + json, e); + } + finally + { + try + { + if (out != null) + { + out.close(); + } + if (in != null) + { + in.close(); + } + } + catch (IOException ex) + { + log.error("调用in.close Exception, url=" + url + ",param=" + json, ex); + } + } + return result.toString(); + } + + private static class TrustAnyTrustManager implements X509TrustManager + { + @Override + public void checkClientTrusted(X509Certificate[] chain, String authType) + { + } + + @Override + public void checkServerTrusted(X509Certificate[] chain, String authType) + { + } + + @Override + public X509Certificate[] getAcceptedIssuers() + { + return new X509Certificate[] {}; + } + } + + private static class TrustAnyHostnameVerifier implements HostnameVerifier + { + @Override + public boolean verify(String hostname, SSLSession session) + { + return true; + } + } +} diff --git a/xinda-common/src/main/java/com/xinda/common/utils/ip/AddressUtils.java b/xinda-common/src/main/java/com/xinda/common/utils/ip/AddressUtils.java new file mode 100644 index 0000000..99c5df1 --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/utils/ip/AddressUtils.java @@ -0,0 +1,56 @@ +package com.xinda.common.utils.ip; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import com.alibaba.fastjson2.JSON; +import com.alibaba.fastjson2.JSONObject; +import com.xinda.common.config.RuoYiConfig; +import com.xinda.common.constant.Constants; +import com.xinda.common.utils.StringUtils; +import com.xinda.common.utils.http.HttpUtils; + +/** + * 获取地址类 + * + * @author ruoyi + */ +public class AddressUtils +{ + private static final Logger log = LoggerFactory.getLogger(AddressUtils.class); + + // IP地址查询 + public static final String IP_URL = "http://whois.pconline.com.cn/ipJson.jsp"; + + // 未知地址 + public static final String UNKNOWN = "XX XX"; + + public static String getRealAddressByIP(String ip) + { + // 内网不查询 + if (IpUtils.internalIp(ip)) + { + return "内网IP"; + } + if (RuoYiConfig.isAddressEnabled()) + { + try + { + String rspStr = HttpUtils.sendGet(IP_URL, "ip=" + ip + "&json=true", Constants.GBK); + if (StringUtils.isEmpty(rspStr)) + { + log.error("获取地理位置异常 {}", ip); + return UNKNOWN; + } + JSONObject obj = JSON.parseObject(rspStr); + String region = obj.getString("pro"); + String city = obj.getString("city"); + return String.format("%s %s", region, city); + } + catch (Exception e) + { + log.error("获取地理位置异常 {}", ip); + } + } + return UNKNOWN; + } +} diff --git a/xinda-common/src/main/java/com/xinda/common/utils/ip/IpUtils.java b/xinda-common/src/main/java/com/xinda/common/utils/ip/IpUtils.java new file mode 100644 index 0000000..f2e6fb5 --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/utils/ip/IpUtils.java @@ -0,0 +1,264 @@ +package com.xinda.common.utils.ip; + +import java.net.InetAddress; +import java.net.UnknownHostException; +import javax.servlet.http.HttpServletRequest; +import com.xinda.common.utils.StringUtils; + +/** + * 获取IP方法 + * + * @author ruoyi + */ +public class IpUtils +{ + /** + * 获取客户端IP + * + * @param request 请求对象 + * @return IP地址 + */ + public static String getIpAddr(HttpServletRequest request) + { + if (request == null) + { + return "unknown"; + } + String ip = request.getHeader("x-forwarded-for"); + if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) + { + ip = request.getHeader("Proxy-Client-IP"); + } + if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) + { + ip = request.getHeader("X-Forwarded-For"); + } + if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) + { + ip = request.getHeader("WL-Proxy-Client-IP"); + } + if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) + { + ip = request.getHeader("X-Real-IP"); + } + + if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) + { + ip = request.getRemoteAddr(); + } + + return "0:0:0:0:0:0:0:1".equals(ip) ? "127.0.0.1" : getMultistageReverseProxyIp(ip); + } + + /** + * 检查是否为内部IP地址 + * + * @param ip IP地址 + * @return 结果 + */ + public static boolean internalIp(String ip) + { + byte[] addr = textToNumericFormatV4(ip); + return internalIp(addr) || "127.0.0.1".equals(ip); + } + + /** + * 检查是否为内部IP地址 + * + * @param addr byte地址 + * @return 结果 + */ + private static boolean internalIp(byte[] addr) + { + if (StringUtils.isNull(addr) || addr.length < 2) + { + return true; + } + final byte b0 = addr[0]; + final byte b1 = addr[1]; + // 10.x.x.x/8 + final byte SECTION_1 = 0x0A; + // 172.16.x.x/12 + final byte SECTION_2 = (byte) 0xAC; + final byte SECTION_3 = (byte) 0x10; + final byte SECTION_4 = (byte) 0x1F; + // 192.168.x.x/16 + final byte SECTION_5 = (byte) 0xC0; + final byte SECTION_6 = (byte) 0xA8; + switch (b0) + { + case SECTION_1: + return true; + case SECTION_2: + if (b1 >= SECTION_3 && b1 <= SECTION_4) + { + return true; + } + case SECTION_5: + switch (b1) + { + case SECTION_6: + return true; + } + default: + return false; + } + } + + /** + * 将IPv4地址转换成字节 + * + * @param text IPv4地址 + * @return byte 字节 + */ + public static byte[] textToNumericFormatV4(String text) + { + if (text.length() == 0) + { + return null; + } + + byte[] bytes = new byte[4]; + String[] elements = text.split("\\.", -1); + try + { + long l; + int i; + switch (elements.length) + { + case 1: + l = Long.parseLong(elements[0]); + if ((l < 0L) || (l > 4294967295L)) + { + return null; + } + bytes[0] = (byte) (int) (l >> 24 & 0xFF); + bytes[1] = (byte) (int) ((l & 0xFFFFFF) >> 16 & 0xFF); + bytes[2] = (byte) (int) ((l & 0xFFFF) >> 8 & 0xFF); + bytes[3] = (byte) (int) (l & 0xFF); + break; + case 2: + l = Integer.parseInt(elements[0]); + if ((l < 0L) || (l > 255L)) + { + return null; + } + bytes[0] = (byte) (int) (l & 0xFF); + l = Integer.parseInt(elements[1]); + if ((l < 0L) || (l > 16777215L)) + { + return null; + } + bytes[1] = (byte) (int) (l >> 16 & 0xFF); + bytes[2] = (byte) (int) ((l & 0xFFFF) >> 8 & 0xFF); + bytes[3] = (byte) (int) (l & 0xFF); + break; + case 3: + for (i = 0; i < 2; ++i) + { + l = Integer.parseInt(elements[i]); + if ((l < 0L) || (l > 255L)) + { + return null; + } + bytes[i] = (byte) (int) (l & 0xFF); + } + l = Integer.parseInt(elements[2]); + if ((l < 0L) || (l > 65535L)) + { + return null; + } + bytes[2] = (byte) (int) (l >> 8 & 0xFF); + bytes[3] = (byte) (int) (l & 0xFF); + break; + case 4: + for (i = 0; i < 4; ++i) + { + l = Integer.parseInt(elements[i]); + if ((l < 0L) || (l > 255L)) + { + return null; + } + bytes[i] = (byte) (int) (l & 0xFF); + } + break; + default: + return null; + } + } + catch (NumberFormatException e) + { + return null; + } + return bytes; + } + + /** + * 获取IP地址 + * + * @return 本地IP地址 + */ + public static String getHostIp() + { + try + { + return InetAddress.getLocalHost().getHostAddress(); + } + catch (UnknownHostException e) + { + } + return "127.0.0.1"; + } + + /** + * 获取主机名 + * + * @return 本地主机名 + */ + public static String getHostName() + { + try + { + return InetAddress.getLocalHost().getHostName(); + } + catch (UnknownHostException e) + { + } + return "未知"; + } + + /** + * 从多级反向代理中获得第一个非unknown IP地址 + * + * @param ip 获得的IP地址 + * @return 第一个非unknown IP地址 + */ + public static String getMultistageReverseProxyIp(String ip) + { + // 多级反向代理检测 + if (ip != null && ip.indexOf(",") > 0) + { + final String[] ips = ip.trim().split(","); + for (String subIp : ips) + { + if (false == isUnknown(subIp)) + { + ip = subIp; + break; + } + } + } + return ip; + } + + /** + * 检测给定字符串是否为未知,多用于检测HTTP请求相关 + * + * @param checkString 被检测的字符串 + * @return 是否未知 + */ + public static boolean isUnknown(String checkString) + { + return StringUtils.isBlank(checkString) || "unknown".equalsIgnoreCase(checkString); + } +} \ No newline at end of file diff --git a/xinda-common/src/main/java/com/xinda/common/utils/json/JsonUtils.java b/xinda-common/src/main/java/com/xinda/common/utils/json/JsonUtils.java new file mode 100644 index 0000000..ee0455b --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/utils/json/JsonUtils.java @@ -0,0 +1,159 @@ +package com.xinda.common.utils.json; + +import cn.hutool.core.util.ArrayUtil; +import cn.hutool.core.util.StrUtil; +import cn.hutool.json.JSONUtil; +import com.fasterxml.jackson.core.type.TypeReference; +import com.fasterxml.jackson.databind.DeserializationFeature; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.SerializationFeature; +import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; +import lombok.SneakyThrows; +import lombok.experimental.UtilityClass; +import lombok.extern.slf4j.Slf4j; + +import java.io.IOException; +import java.lang.reflect.Type; +import java.util.ArrayList; +import java.util.List; + +/** + * JSON 工具类 + * + * @author xinda + */ +@UtilityClass +@Slf4j +public class JsonUtils { + + private static ObjectMapper objectMapper = new ObjectMapper(); + + static { + objectMapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false); + objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); + objectMapper.registerModules(new JavaTimeModule()); // 解决 LocalDateTime 的序列化 + } + + /** + * 初始化 objectMapper 属性 + *

+ * 通过这样的方式,使用 Spring 创建的 ObjectMapper Bean + * + * @param objectMapper ObjectMapper 对象 + */ + public static void init(ObjectMapper objectMapper) { + JsonUtils.objectMapper = objectMapper; + } + + @SneakyThrows + public static String toJsonString(Object object) { + return objectMapper.writeValueAsString(object); + } + + @SneakyThrows + public static byte[] toJsonByte(Object object) { + return objectMapper.writeValueAsBytes(object); + } + + @SneakyThrows + public static String toJsonPrettyString(Object object) { + return objectMapper.writerWithDefaultPrettyPrinter().writeValueAsString(object); + } + + public static T parseObject(String text, Class clazz) { + if (StrUtil.isEmpty(text)) { + return null; + } + try { + return objectMapper.readValue(text, clazz); + } catch (IOException e) { + log.error("json parse err,json:{}", text, e); + throw new RuntimeException(e); + } + } + + public static T parseObject(String text, Type type) { + if (StrUtil.isEmpty(text)) { + return null; + } + try { + return objectMapper.readValue(text, objectMapper.getTypeFactory().constructType(type)); + } catch (IOException e) { + log.error("json parse err,json:{}", text, e); + throw new RuntimeException(e); + } + } + + /** + * 将字符串解析成指定类型的对象 + * 使用 {@link #parseObject(String, Class)} 时,在@JsonTypeInfo(use = JsonTypeInfo.Id.CLASS) 的场景下, + * 如果 text 没有 class 属性,则会报错。此时,使用这个方法,可以解决。 + * + * @param text 字符串 + * @param clazz 类型 + * @return 对象 + */ + public static T parseObject2(String text, Class clazz) { + if (StrUtil.isEmpty(text)) { + return null; + } + return JSONUtil.toBean(text, clazz); + } + + public static T parseObject(byte[] bytes, Class clazz) { + if (ArrayUtil.isEmpty(bytes)) { + return null; + } + try { + return objectMapper.readValue(bytes, clazz); + } catch (IOException e) { + log.error("json parse err,json:{}", bytes, e); + throw new RuntimeException(e); + } + } + + public static T parseObject(String text, TypeReference typeReference) { + try { + return objectMapper.readValue(text, typeReference); + } catch (IOException e) { + log.error("json parse err,json:{}", text, e); + throw new RuntimeException(e); + } + } + + public static List parseArray(String text, Class clazz) { + if (StrUtil.isEmpty(text)) { + return new ArrayList<>(); + } + try { + return objectMapper.readValue(text, objectMapper.getTypeFactory().constructCollectionType(List.class, clazz)); + } catch (IOException e) { + log.error("json parse err,json:{}", text, e); + throw new RuntimeException(e); + } + } + + public static JsonNode parseTree(String text) { + try { + return objectMapper.readTree(text); + } catch (IOException e) { + log.error("json parse err,json:{}", text, e); + throw new RuntimeException(e); + } + } + + public static JsonNode parseTree(byte[] text) { + try { + return objectMapper.readTree(text); + } catch (IOException e) { + log.error("json parse err,json:{}", text, e); + throw new RuntimeException(e); + } + } + + public static boolean isJson(String text) { + return JSONUtil.isTypeJSON(text); + } + +} diff --git a/xinda-common/src/main/java/com/xinda/common/utils/modbus/BitUtils.java b/xinda-common/src/main/java/com/xinda/common/utils/modbus/BitUtils.java new file mode 100644 index 0000000..93bd34f --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/utils/modbus/BitUtils.java @@ -0,0 +1,78 @@ +package com.xinda.common.utils.modbus; + +/** + * + * @description 位运算工具 + * 用途:将二进制数中的每位数字1或0代表着某种开关标记,1为是,0为否,则一个数字可以代表N位的开关标记值,可有效减少过多的变量定义 或 过多的表字段 + */ +public class BitUtils { + + /** + * 获取二进制数字中指定位数的结果,如:1011,指定第2位,则结果是0,第3位,则结果是1 + * + * @param num 二进制数(可以十进制数传入,也可使用0b开头的二进制数表示形式) + * @param bit 位数(第几位,从右往左,从0开始) + * @return + */ + public static int getBitFlag(long num, int bit) { + return (int) num >> bit & 1; + } + + /** + * 更新二进制数字中指定位的值 + * + * @param num 二进制数(可以十进制数传入,也可使用0b开头的二进制数表示形式) + * @param bit 位数(第几位,从右往左,从0开始) + * @param flagValue 位标记值(true=1,false=0) + * @return + */ + public static long updateBitValue(long num, int bit, boolean flagValue) { + if (flagValue) { + //将某位由0改为1 + return num | (1 << bit); + } else { + //将某位由1改为0 + return num ^ (getBitFlag(num, bit) << bit); + } + } + + /** + * 将数字转换为二制值形式字符串 + * + * @param num + * @return + */ + public static String toBinaryString(long num) { + return Long.toBinaryString(num); + } + + /** + * 判断10进制数,某位是0还是1 + * @param num + * @param i + * @return + */ + public static int deter(int num, int i) { + // 先将数字右移指定第i位,然后再用&与1运算 + i += 1; + return num >> (i-1) & 1; + } + + /** + * 判断hex数据,某位的值 + * @param hex + * @param i + * @return + */ + public static int deterHex(String hex,int i){ + return deter(Integer.parseInt(hex,16),i); + } + + public static void main(String[] args) { + int deter = deter(7, 0); + int deterHex = deterHex("10", 4); + System.out.println(deter); + System.out.println(deterHex); + } + +} diff --git a/xinda-common/src/main/java/com/xinda/common/utils/modbus/ModbusUtils.java b/xinda-common/src/main/java/com/xinda/common/utils/modbus/ModbusUtils.java new file mode 100644 index 0000000..3078669 --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/utils/modbus/ModbusUtils.java @@ -0,0 +1,75 @@ +package com.xinda.common.utils.modbus; + +import com.xinda.common.core.protocol.modbus.ModbusCode; + +/** + * @author gsb + * @date 2024/6/15 11:21 + */ +public class ModbusUtils { + + /** + * 获取modbus功能码 + * isReadOnly: 0-读写 1-只读 + * type: 1-IO寄存器 2-数据寄存器 + * IO寄存器读写 05功能码 数据寄存器只读 06功能码 + * @param type modbus数据类型 + * @return modbus功能码 + */ + public static ModbusCode getModbusCode(int type){ + if (type == 1){ + return ModbusCode.Write05; + }else { + return ModbusCode.Write06; + } + } + + public static ModbusCode getReadModbusCode(int type,int isReadOnly){ + if (type == 1){ + return isReadOnly == 1 ? ModbusCode.Read01 : ModbusCode.Read02; + }else { + return isReadOnly == 1 ? ModbusCode.Read03 : ModbusCode.Read04; + } + } + + /** + * 获取modbus-hex字符串寄存器地址 + * @param hexString hex字符串 + * @return 寄存器地址-10进制 + */ + public static int getModbusAddress(String hexString){ + return Integer.parseInt(hexString.substring(4, 8),16); + } + + /** + * 获取从机地址 + * @param hexString + * @return + */ + public static int getModbusSlaveId(String hexString){ + return Integer.parseInt(hexString.substring(0,2),16); + } + + /** + * 获取功能码 + * @param hexString + * @return + */ + public static int getModbusCode(String hexString){ + return Integer.parseInt(hexString.substring(2,4),16); + } + + public static Mparams getModbusParams(String hexString){ + Mparams mparams = new Mparams(); + mparams.setSlaveId(Integer.parseInt(hexString.substring(0,2),16)); + mparams.setCode(Integer.parseInt(hexString.substring(2,4),16)); + mparams.setAddress(Integer.parseInt(hexString.substring(4, 8),16)); + return mparams; + } + + + public static void main(String[] args) { + int modbusAddress = getModbusAddress("0101000A0001FDCA"); + System.out.println(modbusAddress); + } +} diff --git a/xinda-common/src/main/java/com/xinda/common/utils/modbus/Mparams.java b/xinda-common/src/main/java/com/xinda/common/utils/modbus/Mparams.java new file mode 100644 index 0000000..6510385 --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/utils/modbus/Mparams.java @@ -0,0 +1,16 @@ +package com.xinda.common.utils.modbus; + +import lombok.Data; + +/** + * @author bill + */ +@Data +public class Mparams { + + private int slaveId; + + private int code; + + private int address; +} diff --git a/xinda-common/src/main/java/com/xinda/common/utils/object/ObjectUtils.java b/xinda-common/src/main/java/com/xinda/common/utils/object/ObjectUtils.java new file mode 100644 index 0000000..b85e425 --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/utils/object/ObjectUtils.java @@ -0,0 +1,63 @@ +package com.xinda.common.utils.object; + +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.ReflectUtil; + +import java.lang.reflect.Field; +import java.util.Arrays; +import java.util.function.Consumer; + +/** + * Object 工具类 + * + * @author xinda + */ +public class ObjectUtils { + + /** + * 复制对象,并忽略 Id 编号 + * + * @param object 被复制对象 + * @param consumer 消费者,可以二次编辑被复制对象 + * @return 复制后的对象 + */ + public static T cloneIgnoreId(T object, Consumer consumer) { + T result = ObjectUtil.clone(object); + // 忽略 id 编号 + Field field = ReflectUtil.getField(object.getClass(), "id"); + if (field != null) { + ReflectUtil.setFieldValue(result, field, null); + } + // 二次编辑 + if (result != null) { + consumer.accept(result); + } + return result; + } + + public static > T max(T obj1, T obj2) { + if (obj1 == null) { + return obj2; + } + if (obj2 == null) { + return obj1; + } + return obj1.compareTo(obj2) > 0 ? obj1 : obj2; + } + + @SafeVarargs + public static T defaultIfNull(T... array) { + for (T item : array) { + if (item != null) { + return item; + } + } + return null; + } + + @SafeVarargs + public static boolean equalsAny(T obj, T... array) { + return Arrays.asList(array).contains(obj); + } + +} diff --git a/xinda-common/src/main/java/com/xinda/common/utils/poi/ExcelHandlerAdapter.java b/xinda-common/src/main/java/com/xinda/common/utils/poi/ExcelHandlerAdapter.java new file mode 100644 index 0000000..8a610b3 --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/utils/poi/ExcelHandlerAdapter.java @@ -0,0 +1,19 @@ +package com.xinda.common.utils.poi; + +/** + * Excel数据格式处理适配器 + * + * @author ruoyi + */ +public interface ExcelHandlerAdapter +{ + /** + * 格式化 + * + * @param value 单元格数据值 + * @param args excel注解args参数组 + * + * @return 处理后的值 + */ + Object format(Object value, String[] args); +} diff --git a/xinda-common/src/main/java/com/xinda/common/utils/poi/ExcelUtil.java b/xinda-common/src/main/java/com/xinda/common/utils/poi/ExcelUtil.java new file mode 100644 index 0000000..c4586a9 --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/utils/poi/ExcelUtil.java @@ -0,0 +1,1737 @@ +package com.xinda.common.utils.poi; + +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.lang.reflect.Field; +import java.lang.reflect.Method; +import java.lang.reflect.ParameterizedType; +import java.math.BigDecimal; +import java.text.DecimalFormat; +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; +import java.util.Comparator; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.UUID; +import java.util.stream.Collectors; +import javax.servlet.http.HttpServletResponse; + +import com.xinda.common.utils.SecurityUtils; +import org.apache.commons.lang3.ArrayUtils; +import org.apache.commons.lang3.RegExUtils; +import org.apache.commons.lang3.reflect.FieldUtils; +import org.apache.poi.hssf.usermodel.HSSFClientAnchor; +import org.apache.poi.hssf.usermodel.HSSFPicture; +import org.apache.poi.hssf.usermodel.HSSFPictureData; +import org.apache.poi.hssf.usermodel.HSSFShape; +import org.apache.poi.hssf.usermodel.HSSFSheet; +import org.apache.poi.hssf.usermodel.HSSFWorkbook; +import org.apache.poi.ooxml.POIXMLDocumentPart; +import org.apache.poi.ss.usermodel.BorderStyle; +import org.apache.poi.ss.usermodel.Cell; +import org.apache.poi.ss.usermodel.CellStyle; +import org.apache.poi.ss.usermodel.CellType; +import org.apache.poi.ss.usermodel.ClientAnchor; +import org.apache.poi.ss.usermodel.DataValidation; +import org.apache.poi.ss.usermodel.DataValidationConstraint; +import org.apache.poi.ss.usermodel.DataValidationHelper; +import org.apache.poi.ss.usermodel.DateUtil; +import org.apache.poi.ss.usermodel.Drawing; +import org.apache.poi.ss.usermodel.FillPatternType; +import org.apache.poi.ss.usermodel.Font; +import org.apache.poi.ss.usermodel.HorizontalAlignment; +import org.apache.poi.ss.usermodel.IndexedColors; +import org.apache.poi.ss.usermodel.Name; +import org.apache.poi.ss.usermodel.PictureData; +import org.apache.poi.ss.usermodel.Row; +import org.apache.poi.ss.usermodel.Sheet; +import org.apache.poi.ss.usermodel.VerticalAlignment; +import org.apache.poi.ss.usermodel.Workbook; +import org.apache.poi.ss.usermodel.WorkbookFactory; +import org.apache.poi.ss.util.CellRangeAddress; +import org.apache.poi.ss.util.CellRangeAddressList; +import org.apache.poi.util.IOUtils; +import org.apache.poi.xssf.streaming.SXSSFWorkbook; +import org.apache.poi.xssf.usermodel.XSSFClientAnchor; +import org.apache.poi.xssf.usermodel.XSSFDataValidation; +import org.apache.poi.xssf.usermodel.XSSFDrawing; +import org.apache.poi.xssf.usermodel.XSSFPicture; +import org.apache.poi.xssf.usermodel.XSSFShape; +import org.apache.poi.xssf.usermodel.XSSFSheet; +import org.apache.poi.xssf.usermodel.XSSFWorkbook; +import org.openxmlformats.schemas.drawingml.x2006.spreadsheetDrawing.CTMarker; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import com.xinda.common.annotation.Excel; +import com.xinda.common.annotation.Excel.ColumnType; +import com.xinda.common.annotation.Excel.Type; +import com.xinda.common.annotation.Excels; +import com.xinda.common.config.RuoYiConfig; +import com.xinda.common.core.domain.AjaxResult; +import com.xinda.common.core.text.Convert; +import com.xinda.common.exception.UtilException; +import com.xinda.common.utils.DateUtils; +import com.xinda.common.utils.DictUtils; +import com.xinda.common.utils.StringUtils; +import com.xinda.common.utils.file.FileTypeUtils; +import com.xinda.common.utils.file.FileUtils; +import com.xinda.common.utils.file.ImageUtils; +import com.xinda.common.utils.reflect.ReflectUtils; + +/** + * Excel相关处理 + * + * @author ruoyi + */ +public class ExcelUtil +{ + private static final Logger log = LoggerFactory.getLogger(ExcelUtil.class); + + public static final String FORMULA_REGEX_STR = "=|-|\\+|@"; + + public static final String[] FORMULA_STR = { "=", "-", "+", "@" }; + + /** + * Excel sheet最大行数,默认65536 + */ + public static final int sheetSize = 65536; + + /** + * 工作表名称 + */ + private String sheetName; + + /** + * 导出类型(EXPORT:导出数据;IMPORT:导入模板) + */ + private Type type; + + /** + * 工作薄对象 + */ + private Workbook wb; + + /** + * 工作表对象 + */ + private Sheet sheet; + + /** + * 样式列表 + */ + private Map styles; + + /** + * 导入导出数据列表 + */ + private List list; + + /** + * 注解列表 + */ + private List fields; + + /** + * 当前行号 + */ + private int rownum; + + /** + * 标题 + */ + private String title; + + /** + * 最大高度 + */ + private short maxHeight; + + /** + * 合并后最后行数 + */ + private int subMergedLastRowNum = 0; + + /** + * 合并后开始行数 + */ + private int subMergedFirstRowNum = 1; + + /** + * 对象的子列表方法 + */ + private Method subMethod; + + /** + * 对象的子列表属性 + */ + private List subFields; + + /** + * 统计列表 + */ + private Map statistics = new HashMap(); + + /** + * 数字格式 + */ + private static final DecimalFormat DOUBLE_FORMAT = new DecimalFormat("######0.00"); + + /** + * 实体对象 + */ + public Class clazz; + + /** + * 需要排除列属性 + */ + public String[] excludeFields; + + public ExcelUtil(Class clazz) + { + this.clazz = clazz; + } + + /** + * 隐藏Excel中列属性 + * + * @param fields 列属性名 示例[单个"name"/多个"id","name"] + * @throws Exception + */ + public void hideColumn(String... fields) + { + this.excludeFields = fields; + } + + public void init(List list, String sheetName, String title, Type type) + { + if (list == null) + { + list = new ArrayList(); + } + this.list = list; + this.sheetName = sheetName; + this.type = type; + this.title = title; + createExcelField(); + createWorkbook(); + createTitle(); + createSubHead(); + } + + /** + * 创建excel第一行标题 + */ + public void createTitle() + { + if (StringUtils.isNotEmpty(title)) + { + subMergedFirstRowNum++; + subMergedLastRowNum++; + int titleLastCol = this.fields.size() - 1; + if (isSubList()) + { + titleLastCol = titleLastCol + subFields.size() - 1; + } + Row titleRow = sheet.createRow(rownum == 0 ? rownum++ : 0); + titleRow.setHeightInPoints(30); + Cell titleCell = titleRow.createCell(0); + titleCell.setCellStyle(styles.get("title")); + titleCell.setCellValue(title); + sheet.addMergedRegion(new CellRangeAddress(titleRow.getRowNum(), titleRow.getRowNum(), titleRow.getRowNum(), titleLastCol)); + } + } + + /** + * 创建对象的子列表名称 + */ + public void createSubHead() + { + if (isSubList()) + { + subMergedFirstRowNum++; + subMergedLastRowNum++; + Row subRow = sheet.createRow(rownum); + int excelNum = 0; + for (Object[] objects : fields) + { + Excel attr = (Excel) objects[1]; + Cell headCell1 = subRow.createCell(excelNum); + headCell1.setCellValue(attr.name()); + headCell1.setCellStyle(styles.get(StringUtils.format("header_{}_{}", attr.headerColor(), attr.headerBackgroundColor()))); + excelNum++; + } + int headFirstRow = excelNum - 1; + int headLastRow = headFirstRow + subFields.size() - 1; + if (headLastRow > headFirstRow) + { + sheet.addMergedRegion(new CellRangeAddress(rownum, rownum, headFirstRow, headLastRow)); + } + rownum++; + } + } + + /** + * 对excel表单默认第一个索引名转换成list + * + * @param is 输入流 + * @return 转换后集合 + */ + public List importExcel(InputStream is) throws Exception + { + return importExcel(is, 0); + } + + /** + * 对excel表单默认第一个索引名转换成list + * + * @param is 输入流 + * @param titleNum 标题占用行数 + * @return 转换后集合 + */ + public List importExcel(InputStream is, int titleNum) throws Exception + { + return importExcel(StringUtils.EMPTY, is, titleNum); + } + + /** + * 对excel表单指定表格索引名转换成list + * + * @param sheetName 表格索引名 + * @param titleNum 标题占用行数 + * @param is 输入流 + * @return 转换后集合 + */ + public List importExcel(String sheetName, InputStream is, int titleNum) throws Exception + { + this.type = Type.IMPORT; + this.wb = WorkbookFactory.create(is); + List list = new ArrayList(); + // 如果指定sheet名,则取指定sheet中的内容 否则默认指向第1个sheet + Sheet sheet = StringUtils.isNotEmpty(sheetName) ? wb.getSheet(sheetName) : wb.getSheetAt(0); + if (sheet == null) + { + throw new IOException("文件sheet不存在"); + } + boolean isXSSFWorkbook = !(wb instanceof HSSFWorkbook); + Map pictures; + if (isXSSFWorkbook) + { + pictures = getSheetPictures07((XSSFSheet) sheet, (XSSFWorkbook) wb); + } + else + { + pictures = getSheetPictures03((HSSFSheet) sheet, (HSSFWorkbook) wb); + } + // 获取最后一个非空行的行下标,比如总行数为n,则返回的为n-1 + int rows = sheet.getLastRowNum(); + + if (rows > 0) + { + // 定义一个map用于存放excel列的序号和field. + Map cellMap = new HashMap(); + // 获取表头 + Row heard = sheet.getRow(titleNum); + for (int i = 0; i < heard.getPhysicalNumberOfCells(); i++) + { + Cell cell = heard.getCell(i); + if (StringUtils.isNotNull(cell)) + { + String value = this.getCellValue(heard, i).toString(); + cellMap.put(value, i); + } + else + { + cellMap.put(null, i); + } + } + // 有数据时才处理 得到类的所有field. + List fields = this.getFields(); + Map fieldsMap = new HashMap(); + for (Object[] objects : fields) + { + Excel attr = (Excel) objects[1]; + Integer column = cellMap.get(attr.name()); + if (column != null) + { + fieldsMap.put(column, objects); + } + } + for (int i = titleNum + 1; i <= rows; i++) + { + // 从第2行开始取数据,默认第一行是表头. + Row row = sheet.getRow(i); + // 判断当前行是否是空行 + if (isRowEmpty(row)) + { + continue; + } + T entity = null; + for (Map.Entry entry : fieldsMap.entrySet()) + { + Object val = this.getCellValue(row, entry.getKey()); + + // 如果不存在实例则新建. + entity = (entity == null ? clazz.newInstance() : entity); + // 从map中得到对应列的field. + Field field = (Field) entry.getValue()[0]; + Excel attr = (Excel) entry.getValue()[1]; + // 取得类型,并根据对象类型设置值. + Class fieldType = field.getType(); + if (String.class == fieldType) + { + String s = Convert.toStr(val); + if (StringUtils.endsWith(s, ".0")) + { + val = StringUtils.substringBefore(s, ".0"); + } + else + { + String dateFormat = field.getAnnotation(Excel.class).dateFormat(); + if (StringUtils.isNotEmpty(dateFormat)) + { + val = parseDateToStr(dateFormat, val); + } + else + { + val = Convert.toStr(val); + } + } + } + else if ((Integer.TYPE == fieldType || Integer.class == fieldType) && StringUtils.isNumeric(Convert.toStr(val))) + { + val = Convert.toInt(val); + } + else if ((Long.TYPE == fieldType || Long.class == fieldType) && StringUtils.isNumeric(Convert.toStr(val))) + { + val = Convert.toLong(val); + } + else if (Double.TYPE == fieldType || Double.class == fieldType) + { + val = Convert.toDouble(val); + } + else if (Float.TYPE == fieldType || Float.class == fieldType) + { + val = Convert.toFloat(val); + } + else if (BigDecimal.class == fieldType) + { + val = Convert.toBigDecimal(val); + } + else if (Date.class == fieldType) + { + if (val instanceof String) + { + val = DateUtils.parseDate(val); + } + else if (val instanceof Double) + { + val = DateUtil.getJavaDate((Double) val); + } + } + else if (Boolean.TYPE == fieldType || Boolean.class == fieldType) + { + val = Convert.toBool(val, false); + } + if (StringUtils.isNotNull(fieldType)) + { + String propertyName = field.getName(); + if (StringUtils.isNotEmpty(attr.targetAttr())) + { + propertyName = field.getName() + "." + attr.targetAttr(); + } + else if (StringUtils.isNotEmpty(attr.readConverterExp())) + { + val = reverseByExp(Convert.toStr(val), attr.readConverterExp(), attr.separator()); + } + else if (StringUtils.isNotEmpty(attr.dictType())) + { + val = reverseDictByExp(Convert.toStr(val), attr.dictType(), attr.separator()); + } + else if (!attr.handler().equals(ExcelHandlerAdapter.class)) + { + val = dataFormatHandlerAdapter(val, attr); + } + else if (ColumnType.IMAGE == attr.cellType() && StringUtils.isNotEmpty(pictures)) + { + PictureData image = pictures.get(row.getRowNum() + "_" + entry.getKey()); + if (image == null) + { + val = ""; + } + else + { + byte[] data = image.getData(); + val = FileUtils.writeImportBytes(data); + } + } + ReflectUtils.invokeSetter(entity, propertyName, val); + } + } + list.add(entity); + } + } + return list; + } + + /** + * 对list数据源将其里面的数据导入到excel表单 + * + * @param list 导出数据集合 + * @param sheetName 工作表的名称 + * @return 结果 + */ + public AjaxResult exportExcel(List list, String sheetName) + { + return exportExcel(list, sheetName, StringUtils.EMPTY); + } + + /** + * 对list数据源将其里面的数据导入到excel表单 + * + * @param list 导出数据集合 + * @param sheetName 工作表的名称 + * @param title 标题 + * @return 结果 + */ + public AjaxResult exportExcel(List list, String sheetName, String title) + { + this.init(list, sheetName, title, Type.EXPORT); + return exportExcel(); + } + + /** + * 对list数据源将其里面的数据导入到excel表单 + * + * @param response 返回数据 + * @param list 导出数据集合 + * @param sheetName 工作表的名称 + * @return 结果 + */ + public void exportExcel(HttpServletResponse response, List list, String sheetName) + { + exportExcel(response, list, sheetName, StringUtils.EMPTY); + } + + /** + * 对list数据源将其里面的数据导入到excel表单 + * + * @param response 返回数据 + * @param list 导出数据集合 + * @param sheetName 工作表的名称 + * @param title 标题 + * @return 结果 + */ + public void exportExcel(HttpServletResponse response, List list, String sheetName, String title) + { + response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"); + response.setCharacterEncoding("utf-8"); + this.init(list, sheetName, title, Type.EXPORT); + exportExcel(response); + } + + /** + * 对list数据源将其里面的数据导入到excel表单 + * + * @param sheetName 工作表的名称 + * @return 结果 + */ + public AjaxResult importTemplateExcel(String sheetName) + { + return importTemplateExcel(sheetName, StringUtils.EMPTY); + } + + /** + * 对list数据源将其里面的数据导入到excel表单 + * + * @param sheetName 工作表的名称 + * @param title 标题 + * @return 结果 + */ + public AjaxResult importTemplateExcel(String sheetName, String title) + { + this.init(null, sheetName, title, Type.IMPORT); + return exportExcel(); + } + + /** + * 对list数据源将其里面的数据导入到excel表单 + * + * @param sheetName 工作表的名称 + * @return 结果 + */ + public void importTemplateExcel(HttpServletResponse response, String sheetName) + { + importTemplateExcel(response, sheetName, StringUtils.EMPTY); + } + + /** + * 对list数据源将其里面的数据导入到excel表单 + * + * @param sheetName 工作表的名称 + * @param title 标题 + * @return 结果 + */ + public void importTemplateExcel(HttpServletResponse response, String sheetName, String title) + { + response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"); + response.setCharacterEncoding("utf-8"); + this.init(null, sheetName, title, Type.IMPORT); + exportExcel(response); + } + + /** + * 对list数据源将其里面的数据导入到excel表单 + * + * @return 结果 + */ + public void exportExcel(HttpServletResponse response) + { + try + { + writeSheet(); + wb.write(response.getOutputStream()); + } + catch (Exception e) + { + log.error("导出Excel异常{}", e.getMessage()); + } + finally + { + IOUtils.closeQuietly(wb); + } + } + + /** + * 对list数据源将其里面的数据导入到excel表单 + * + * @return 结果 + */ + public AjaxResult exportExcel() + { + OutputStream out = null; + try + { + writeSheet(); + String filename = encodingFilename(sheetName); + out = new FileOutputStream(getAbsoluteFile(filename)); + wb.write(out); + return AjaxResult.success(filename); + } + catch (Exception e) + { + log.error("导出Excel异常{}", e.getMessage()); + throw new UtilException("导出Excel失败,请联系网站管理员!"); + } + finally + { + IOUtils.closeQuietly(wb); + IOUtils.closeQuietly(out); + } + } + + /** + * 创建写入数据到Sheet + */ + public void writeSheet() + { + // 取出一共有多少个sheet. + int sheetNo = Math.max(1, (int) Math.ceil(list.size() * 1.0 / sheetSize)); + for (int index = 0; index < sheetNo; index++) + { + createSheet(sheetNo, index); + + // 产生一行 + Row row = sheet.createRow(rownum); + int column = 0; + // 写入各个字段的列头名称 + for (Object[] os : fields) + { + Field field = (Field) os[0]; + Excel excel = (Excel) os[1]; + if (Collection.class.isAssignableFrom(field.getType())) + { + for (Field subField : subFields) + { + Excel subExcel = subField.getAnnotation(Excel.class); + this.createHeadCell(subExcel, row, column++); + } + } + else + { + this.createHeadCell(excel, row, column++); + } + } + if (Type.EXPORT.equals(type)) + { + fillExcelData(index, row); + addStatisticsRow(); + } + } + } + + /** + * 填充excel数据 + * + * @param index 序号 + * @param row 单元格行 + */ + @SuppressWarnings("unchecked") + public void fillExcelData(int index, Row row) + { + int startNo = index * sheetSize; + int endNo = Math.min(startNo + sheetSize, list.size()); + int rowNo = (1 + rownum) - startNo; + for (int i = startNo; i < endNo; i++) + { + rowNo = isSubList() ? (i > 1 ? rowNo + 1 : rowNo + i) : i + 1 + rownum - startNo; + row = sheet.createRow(rowNo); + // 得到导出对象. + T vo = (T) list.get(i); + Collection subList = null; + if (isSubList()) + { + if (isSubListValue(vo)) + { + subList = getListCellValue(vo); + subMergedLastRowNum = subMergedLastRowNum + subList.size(); + } + else + { + subMergedFirstRowNum++; + subMergedLastRowNum++; + } + } + int column = 0; + for (Object[] os : fields) + { + Field field = (Field) os[0]; + Excel excel = (Excel) os[1]; + if (Collection.class.isAssignableFrom(field.getType()) && StringUtils.isNotNull(subList)) + { + boolean subFirst = false; + for (Object obj : subList) + { + if (subFirst) + { + rowNo++; + row = sheet.createRow(rowNo); + } + List subFields = FieldUtils.getFieldsListWithAnnotation(obj.getClass(), Excel.class); + int subIndex = 0; + for (Field subField : subFields) + { + if (subField.isAnnotationPresent(Excel.class)) + { + subField.setAccessible(true); + Excel attr = subField.getAnnotation(Excel.class); + this.addCell(attr, row, (T) obj, subField, column + subIndex); + } + subIndex++; + } + subFirst = true; + } + this.subMergedFirstRowNum = this.subMergedFirstRowNum + subList.size(); + } + else + { + this.addCell(excel, row, vo, field, column++); + } + } + } + } + + /** + * 创建表格样式 + * + * @param wb 工作薄对象 + * @return 样式列表 + */ + private Map createStyles(Workbook wb) + { + // 写入各条记录,每条记录对应excel表中的一行 + Map styles = new HashMap(); + CellStyle style = wb.createCellStyle(); + style.setAlignment(HorizontalAlignment.CENTER); + style.setVerticalAlignment(VerticalAlignment.CENTER); + Font titleFont = wb.createFont(); + titleFont.setFontName("Arial"); + titleFont.setFontHeightInPoints((short) 16); + titleFont.setBold(true); + style.setFont(titleFont); + styles.put("title", style); + + style = wb.createCellStyle(); + style.setAlignment(HorizontalAlignment.CENTER); + style.setVerticalAlignment(VerticalAlignment.CENTER); + style.setBorderRight(BorderStyle.THIN); + style.setRightBorderColor(IndexedColors.GREY_50_PERCENT.getIndex()); + style.setBorderLeft(BorderStyle.THIN); + style.setLeftBorderColor(IndexedColors.GREY_50_PERCENT.getIndex()); + style.setBorderTop(BorderStyle.THIN); + style.setTopBorderColor(IndexedColors.GREY_50_PERCENT.getIndex()); + style.setBorderBottom(BorderStyle.THIN); + style.setBottomBorderColor(IndexedColors.GREY_50_PERCENT.getIndex()); + Font dataFont = wb.createFont(); + dataFont.setFontName("Arial"); + dataFont.setFontHeightInPoints((short) 10); + style.setFont(dataFont); + styles.put("data", style); + + style = wb.createCellStyle(); + style.setAlignment(HorizontalAlignment.CENTER); + style.setVerticalAlignment(VerticalAlignment.CENTER); + Font totalFont = wb.createFont(); + totalFont.setFontName("Arial"); + totalFont.setFontHeightInPoints((short) 10); + style.setFont(totalFont); + styles.put("total", style); + + styles.putAll(annotationHeaderStyles(wb, styles)); + + styles.putAll(annotationDataStyles(wb)); + + return styles; + } + + /** + * 根据Excel注解创建表格头样式 + * + * @param wb 工作薄对象 + * @return 自定义样式列表 + */ + private Map annotationHeaderStyles(Workbook wb, Map styles) + { + Map headerStyles = new HashMap(); + for (Object[] os : fields) + { + Excel excel = (Excel) os[1]; + String key = StringUtils.format("header_{}_{}", excel.headerColor(), excel.headerBackgroundColor()); + if (!headerStyles.containsKey(key)) + { + CellStyle style = wb.createCellStyle(); + style.cloneStyleFrom(styles.get("data")); + style.setAlignment(HorizontalAlignment.CENTER); + style.setVerticalAlignment(VerticalAlignment.CENTER); + style.setFillForegroundColor(excel.headerBackgroundColor().index); + style.setFillPattern(FillPatternType.SOLID_FOREGROUND); + Font headerFont = wb.createFont(); + headerFont.setFontName("Arial"); + headerFont.setFontHeightInPoints((short) 10); + headerFont.setBold(true); + headerFont.setColor(excel.headerColor().index); + style.setFont(headerFont); + headerStyles.put(key, style); + } + } + return headerStyles; + } + + /** + * 根据Excel注解创建表格列样式 + * + * @param wb 工作薄对象 + * @return 自定义样式列表 + */ + private Map annotationDataStyles(Workbook wb) + { + Map styles = new HashMap(); + for (Object[] os : fields) + { + Excel excel = (Excel) os[1]; + String key = StringUtils.format("data_{}_{}_{}", excel.align(), excel.color(), excel.backgroundColor()); + if (!styles.containsKey(key)) + { + CellStyle style = wb.createCellStyle(); + style.setAlignment(excel.align()); + style.setVerticalAlignment(VerticalAlignment.CENTER); + style.setBorderRight(BorderStyle.THIN); + style.setRightBorderColor(IndexedColors.GREY_50_PERCENT.getIndex()); + style.setBorderLeft(BorderStyle.THIN); + style.setLeftBorderColor(IndexedColors.GREY_50_PERCENT.getIndex()); + style.setBorderTop(BorderStyle.THIN); + style.setTopBorderColor(IndexedColors.GREY_50_PERCENT.getIndex()); + style.setBorderBottom(BorderStyle.THIN); + style.setBottomBorderColor(IndexedColors.GREY_50_PERCENT.getIndex()); + style.setFillPattern(FillPatternType.SOLID_FOREGROUND); + style.setFillForegroundColor(excel.backgroundColor().getIndex()); + Font dataFont = wb.createFont(); + dataFont.setFontName("Arial"); + dataFont.setFontHeightInPoints((short) 10); + dataFont.setColor(excel.color().index); + style.setFont(dataFont); + styles.put(key, style); + } + } + return styles; + } + + /** + * 创建单元格 + */ + public Cell createHeadCell(Excel attr, Row row, int column) + { + // 创建列 + Cell cell = row.createCell(column); + // 写入列信息 + cell.setCellValue(attr.name()); + setDataValidation(attr, row, column); + cell.setCellStyle(styles.get(StringUtils.format("header_{}_{}", attr.headerColor(), attr.headerBackgroundColor()))); + if (isSubList()) + { + // 填充默认样式,防止合并单元格样式失效 + sheet.setDefaultColumnStyle(column, styles.get(StringUtils.format("data_{}_{}_{}", attr.align(), attr.color(), attr.backgroundColor()))); + if (attr.needMerge()) + { + sheet.addMergedRegion(new CellRangeAddress(rownum - 1, rownum, column, column)); + } + } + return cell; + } + + /** + * 设置单元格信息 + * + * @param value 单元格值 + * @param attr 注解相关 + * @param cell 单元格信息 + */ + public void setCellVo(Object value, Excel attr, Cell cell) + { + if (ColumnType.STRING == attr.cellType()) + { + String cellValue = Convert.toStr(value); + // 对于任何以表达式触发字符 =-+@开头的单元格,直接使用tab字符作为前缀,防止CSV注入。 + if (StringUtils.startsWithAny(cellValue, FORMULA_STR)) + { + cellValue = RegExUtils.replaceFirst(cellValue, FORMULA_REGEX_STR, "\t$0"); + } + if (value instanceof Collection && StringUtils.equals("[]", cellValue)) + { + cellValue = StringUtils.EMPTY; + } + cell.setCellValue(StringUtils.isNull(cellValue) ? attr.defaultValue() : cellValue + attr.suffix()); + } + else if (ColumnType.NUMERIC == attr.cellType()) + { + if (StringUtils.isNotNull(value)) + { + cell.setCellValue(StringUtils.contains(Convert.toStr(value), ".") ? Convert.toDouble(value) : Convert.toInt(value)); + } + } + else if (ColumnType.IMAGE == attr.cellType()) + { + ClientAnchor anchor = new XSSFClientAnchor(0, 0, 0, 0, (short) cell.getColumnIndex(), cell.getRow().getRowNum(), (short) (cell.getColumnIndex() + 1), cell.getRow().getRowNum() + 1); + String imagePath = Convert.toStr(value); + if (StringUtils.isNotEmpty(imagePath)) + { + byte[] data = ImageUtils.getImage(imagePath); + getDrawingPatriarch(cell.getSheet()).createPicture(anchor, + cell.getSheet().getWorkbook().addPicture(data, getImageType(data))); + } + } + } + + /** + * 获取画布 + */ + public static Drawing getDrawingPatriarch(Sheet sheet) + { + if (sheet.getDrawingPatriarch() == null) + { + sheet.createDrawingPatriarch(); + } + return sheet.getDrawingPatriarch(); + } + + /** + * 获取图片类型,设置图片插入类型 + */ + public int getImageType(byte[] value) + { + String type = FileTypeUtils.getFileExtendName(value); + if ("JPG".equalsIgnoreCase(type)) + { + return Workbook.PICTURE_TYPE_JPEG; + } + else if ("PNG".equalsIgnoreCase(type)) + { + return Workbook.PICTURE_TYPE_PNG; + } + return Workbook.PICTURE_TYPE_JPEG; + } + + /** + * 创建表格样式 + */ + public void setDataValidation(Excel attr, Row row, int column) + { + if (attr.name().indexOf("注:") >= 0) + { + sheet.setColumnWidth(column, 6000); + } + else + { + // 设置列宽 + sheet.setColumnWidth(column, (int) ((attr.width() + 0.72) * 256)); + } + if (StringUtils.isNotEmpty(attr.prompt()) || attr.combo().length > 0) + { + if (attr.combo().length > 15 || StringUtils.join(attr.combo()).length() > 255) + { + // 如果下拉数大于15或字符串长度大于255,则使用一个新sheet存储,避免生成的模板下拉值获取不到 + setXSSFValidationWithHidden(sheet, attr.combo(), attr.prompt(), 1, 100, column, column); + } + else + { + // 提示信息或只能选择不能输入的列内容. + setPromptOrValidation(sheet, attr.combo(), attr.prompt(), 1, 100, column, column); + } + } + } + + /** + * 添加单元格 + */ + public Cell addCell(Excel attr, Row row, T vo, Field field, int column) + { + Cell cell = null; + try + { + // 设置行高 + row.setHeight(maxHeight); + // 根据Excel中设置情况决定是否导出,有些情况需要保持为空,希望用户填写这一列. + if (attr.isExport()) + { + // 创建cell + cell = row.createCell(column); + if (isSubListValue(vo) && getListCellValue(vo).size() > 1 && attr.needMerge()) + { + CellRangeAddress cellAddress = new CellRangeAddress(subMergedFirstRowNum, subMergedLastRowNum, column, column); + sheet.addMergedRegion(cellAddress); + } + cell.setCellStyle(styles.get(StringUtils.format("data_{}_{}_{}", attr.align(), attr.color(), attr.backgroundColor()))); + + // 用于读取对象中的属性 + Object value = getTargetValue(vo, field, attr); + String dateFormat = attr.dateFormat(); + String readConverterExp = attr.readConverterExp(); + String separator = attr.separator(); + String dictType = attr.dictType(); + if (StringUtils.isNotEmpty(dateFormat) && StringUtils.isNotNull(value)) + { + cell.setCellValue(parseDateToStr(dateFormat, value)); + } + else if (StringUtils.isNotEmpty(readConverterExp) && StringUtils.isNotNull(value)) + { + cell.setCellValue(convertByExp(Convert.toStr(value), readConverterExp, separator)); + } + else if (StringUtils.isNotEmpty(dictType) && StringUtils.isNotNull(value)) + { + cell.setCellValue(convertDictByExp(Convert.toStr(value), dictType, separator, SecurityUtils.getLanguage())); + } + else if (value instanceof BigDecimal && -1 != attr.scale()) + { + cell.setCellValue((((BigDecimal) value).setScale(attr.scale(), attr.roundingMode())).doubleValue()); + } + else if (!attr.handler().equals(ExcelHandlerAdapter.class)) + { + cell.setCellValue(dataFormatHandlerAdapter(value, attr)); + } + else + { + // 设置列类型 + setCellVo(value, attr, cell); + } + addStatisticsData(column, Convert.toStr(value), attr); + } + } + catch (Exception e) + { + log.error("导出Excel失败{}", e); + } + return cell; + } + + /** + * 设置 POI XSSFSheet 单元格提示或选择框 + * + * @param sheet 表单 + * @param textlist 下拉框显示的内容 + * @param promptContent 提示内容 + * @param firstRow 开始行 + * @param endRow 结束行 + * @param firstCol 开始列 + * @param endCol 结束列 + */ + public void setPromptOrValidation(Sheet sheet, String[] textlist, String promptContent, int firstRow, int endRow, + int firstCol, int endCol) + { + DataValidationHelper helper = sheet.getDataValidationHelper(); + DataValidationConstraint constraint = textlist.length > 0 ? helper.createExplicitListConstraint(textlist) : helper.createCustomConstraint("DD1"); + CellRangeAddressList regions = new CellRangeAddressList(firstRow, endRow, firstCol, endCol); + DataValidation dataValidation = helper.createValidation(constraint, regions); + if (StringUtils.isNotEmpty(promptContent)) + { + // 如果设置了提示信息则鼠标放上去提示 + dataValidation.createPromptBox("", promptContent); + dataValidation.setShowPromptBox(true); + } + // 处理Excel兼容性问题 + if (dataValidation instanceof XSSFDataValidation) + { + dataValidation.setSuppressDropDownArrow(true); + dataValidation.setShowErrorBox(true); + } + else + { + dataValidation.setSuppressDropDownArrow(false); + } + sheet.addValidationData(dataValidation); + } + + /** + * 设置某些列的值只能输入预制的数据,显示下拉框(兼容超出一定数量的下拉框). + * + * @param sheet 要设置的sheet. + * @param textlist 下拉框显示的内容 + * @param promptContent 提示内容 + * @param firstRow 开始行 + * @param endRow 结束行 + * @param firstCol 开始列 + * @param endCol 结束列 + */ + public void setXSSFValidationWithHidden(Sheet sheet, String[] textlist, String promptContent, int firstRow, int endRow, int firstCol, int endCol) + { + String hideSheetName = "combo_" + firstCol + "_" + endCol; + Sheet hideSheet = wb.createSheet(hideSheetName); // 用于存储 下拉菜单数据 + for (int i = 0; i < textlist.length; i++) + { + hideSheet.createRow(i).createCell(0).setCellValue(textlist[i]); + } + // 创建名称,可被其他单元格引用 + Name name = wb.createName(); + name.setNameName(hideSheetName + "_data"); + name.setRefersToFormula(hideSheetName + "!$A$1:$A$" + textlist.length); + DataValidationHelper helper = sheet.getDataValidationHelper(); + // 加载下拉列表内容 + DataValidationConstraint constraint = helper.createFormulaListConstraint(hideSheetName + "_data"); + // 设置数据有效性加载在哪个单元格上,四个参数分别是:起始行、终止行、起始列、终止列 + CellRangeAddressList regions = new CellRangeAddressList(firstRow, endRow, firstCol, endCol); + // 数据有效性对象 + DataValidation dataValidation = helper.createValidation(constraint, regions); + if (StringUtils.isNotEmpty(promptContent)) + { + // 如果设置了提示信息则鼠标放上去提示 + dataValidation.createPromptBox("", promptContent); + dataValidation.setShowPromptBox(true); + } + // 处理Excel兼容性问题 + if (dataValidation instanceof XSSFDataValidation) + { + dataValidation.setSuppressDropDownArrow(true); + dataValidation.setShowErrorBox(true); + } + else + { + dataValidation.setSuppressDropDownArrow(false); + } + + sheet.addValidationData(dataValidation); + // 设置hiddenSheet隐藏 + wb.setSheetHidden(wb.getSheetIndex(hideSheet), true); + } + + /** + * 解析导出值 0=男,1=女,2=未知 + * + * @param propertyValue 参数值 + * @param converterExp 翻译注解 + * @param separator 分隔符 + * @return 解析后值 + */ + public static String convertByExp(String propertyValue, String converterExp, String separator) + { + StringBuilder propertyString = new StringBuilder(); + String[] convertSource = converterExp.split(","); + for (String item : convertSource) + { + String[] itemArray = item.split("="); + if (StringUtils.containsAny(propertyValue, separator)) + { + for (String value : propertyValue.split(separator)) + { + if (itemArray[0].equals(value)) + { + propertyString.append(itemArray[1] + separator); + break; + } + } + } + else + { + if (itemArray[0].equals(propertyValue)) + { + return itemArray[1]; + } + } + } + return StringUtils.stripEnd(propertyString.toString(), separator); + } + + /** + * 反向解析值 男=0,女=1,未知=2 + * + * @param propertyValue 参数值 + * @param converterExp 翻译注解 + * @param separator 分隔符 + * @return 解析后值 + */ + public static String reverseByExp(String propertyValue, String converterExp, String separator) + { + StringBuilder propertyString = new StringBuilder(); + String[] convertSource = converterExp.split(","); + for (String item : convertSource) + { + String[] itemArray = item.split("="); + if (StringUtils.containsAny(propertyValue, separator)) + { + for (String value : propertyValue.split(separator)) + { + if (itemArray[1].equals(value)) + { + propertyString.append(itemArray[0] + separator); + break; + } + } + } + else + { + if (itemArray[1].equals(propertyValue)) + { + return itemArray[0]; + } + } + } + return StringUtils.stripEnd(propertyString.toString(), separator); + } + + /** + * 解析字典值 + * + * @param dictValue 字典值 + * @param dictType 字典类型 + * @param separator 分隔符 + * @param language 语言 + * @return 字典标签 + */ + public static String convertDictByExp(String dictValue, String dictType, String separator, String language) + { + return DictUtils.getDictLabel(dictType, dictValue, separator, language); + } + + /** + * 反向解析值字典值 + * + * @param dictLabel 字典标签 + * @param dictType 字典类型 + * @param separator 分隔符 + * @return 字典值 + */ + public static String reverseDictByExp(String dictLabel, String dictType, String separator) + { + return DictUtils.getDictValue(dictType, dictLabel, separator); + } + + /** + * 数据处理器 + * + * @param value 数据值 + * @param excel 数据注解 + * @return + */ + public String dataFormatHandlerAdapter(Object value, Excel excel) + { + try + { + Object instance = excel.handler().newInstance(); + Method formatMethod = excel.handler().getMethod("format", new Class[] { Object.class, String[].class }); + value = formatMethod.invoke(instance, value, excel.args()); + } + catch (Exception e) + { + log.error("不能格式化数据 " + excel.handler(), e.getMessage()); + } + return Convert.toStr(value); + } + + /** + * 合计统计信息 + */ + private void addStatisticsData(Integer index, String text, Excel entity) + { + if (entity != null && entity.isStatistics()) + { + Double temp = 0D; + if (!statistics.containsKey(index)) + { + statistics.put(index, temp); + } + try + { + temp = Double.valueOf(text); + } + catch (NumberFormatException e) + { + } + statistics.put(index, statistics.get(index) + temp); + } + } + + /** + * 创建统计行 + */ + public void addStatisticsRow() + { + if (statistics.size() > 0) + { + Row row = sheet.createRow(sheet.getLastRowNum() + 1); + Set keys = statistics.keySet(); + Cell cell = row.createCell(0); + cell.setCellStyle(styles.get("total")); + cell.setCellValue("合计"); + + for (Integer key : keys) + { + cell = row.createCell(key); + cell.setCellStyle(styles.get("total")); + cell.setCellValue(DOUBLE_FORMAT.format(statistics.get(key))); + } + statistics.clear(); + } + } + + /** + * 编码文件名 + */ + public String encodingFilename(String filename) + { + filename = UUID.randomUUID().toString() + "_" + filename + ".xlsx"; + return filename; + } + + /** + * 获取下载路径 + * + * @param filename 文件名称 + */ + public String getAbsoluteFile(String filename) + { + String downloadPath = RuoYiConfig.getDownloadPath() + filename; + File desc = new File(downloadPath); + if (!desc.getParentFile().exists()) + { + desc.getParentFile().mkdirs(); + } + return downloadPath; + } + + /** + * 获取bean中的属性值 + * + * @param vo 实体对象 + * @param field 字段 + * @param excel 注解 + * @return 最终的属性值 + * @throws Exception + */ + private Object getTargetValue(T vo, Field field, Excel excel) throws Exception + { + Object o = field.get(vo); + if (StringUtils.isNotEmpty(excel.targetAttr())) + { + String target = excel.targetAttr(); + if (target.contains(".")) + { + String[] targets = target.split("[.]"); + for (String name : targets) + { + o = getValue(o, name); + } + } + else + { + o = getValue(o, target); + } + } + return o; + } + + /** + * 以类的属性的get方法方法形式获取值 + * + * @param o + * @param name + * @return value + * @throws Exception + */ + private Object getValue(Object o, String name) throws Exception + { + if (StringUtils.isNotNull(o) && StringUtils.isNotEmpty(name)) + { + Class clazz = o.getClass(); + Field field = clazz.getDeclaredField(name); + field.setAccessible(true); + o = field.get(o); + } + return o; + } + + /** + * 得到所有定义字段 + */ + private void createExcelField() + { + this.fields = getFields(); + this.fields = this.fields.stream().sorted(Comparator.comparing(objects -> ((Excel) objects[1]).sort())).collect(Collectors.toList()); + this.maxHeight = getRowHeight(); + } + + /** + * 获取字段注解信息 + */ + public List getFields() + { + List fields = new ArrayList(); + List tempFields = new ArrayList<>(); + tempFields.addAll(Arrays.asList(clazz.getSuperclass().getDeclaredFields())); + tempFields.addAll(Arrays.asList(clazz.getDeclaredFields())); + for (Field field : tempFields) + { + if (!ArrayUtils.contains(this.excludeFields, field.getName())) + { + // 单注解 + if (field.isAnnotationPresent(Excel.class)) + { + Excel attr = field.getAnnotation(Excel.class); + if (attr != null && (attr.type() == Type.ALL || attr.type() == type)) + { + field.setAccessible(true); + fields.add(new Object[] { field, attr }); + } + if (Collection.class.isAssignableFrom(field.getType())) + { + subMethod = getSubMethod(field.getName(), clazz); + ParameterizedType pt = (ParameterizedType) field.getGenericType(); + Class subClass = (Class) pt.getActualTypeArguments()[0]; + this.subFields = FieldUtils.getFieldsListWithAnnotation(subClass, Excel.class); + } + } + + // 多注解 + if (field.isAnnotationPresent(Excels.class)) + { + Excels attrs = field.getAnnotation(Excels.class); + Excel[] excels = attrs.value(); + for (Excel attr : excels) + { + if (attr != null && (attr.type() == Type.ALL || attr.type() == type)) + { + field.setAccessible(true); + fields.add(new Object[] { field, attr }); + } + } + } + } + } + return fields; + } + + /** + * 根据注解获取最大行高 + */ + public short getRowHeight() + { + double maxHeight = 0; + for (Object[] os : this.fields) + { + Excel excel = (Excel) os[1]; + maxHeight = Math.max(maxHeight, excel.height()); + } + return (short) (maxHeight * 20); + } + + /** + * 创建一个工作簿 + */ + public void createWorkbook() + { + this.wb = new SXSSFWorkbook(500); + this.sheet = wb.createSheet(); + wb.setSheetName(0, sheetName); + this.styles = createStyles(wb); + } + + /** + * 创建工作表 + * + * @param sheetNo sheet数量 + * @param index 序号 + */ + public void createSheet(int sheetNo, int index) + { + // 设置工作表的名称. + if (sheetNo > 1 && index > 0) + { + this.sheet = wb.createSheet(); + this.createTitle(); + wb.setSheetName(index, sheetName + index); + } + } + + /** + * 获取单元格值 + * + * @param row 获取的行 + * @param column 获取单元格列号 + * @return 单元格值 + */ + public Object getCellValue(Row row, int column) + { + if (row == null) + { + return row; + } + Object val = ""; + try + { + Cell cell = row.getCell(column); + if (StringUtils.isNotNull(cell)) + { + if (cell.getCellType() == CellType.NUMERIC || cell.getCellType() == CellType.FORMULA) + { + val = cell.getNumericCellValue(); + if (DateUtil.isCellDateFormatted(cell)) + { + val = DateUtil.getJavaDate((Double) val); // POI Excel 日期格式转换 + } + else + { + if ((Double) val % 1 != 0) + { + val = new BigDecimal(val.toString()); + } + else + { + val = new DecimalFormat("0").format(val); + } + } + } + else if (cell.getCellType() == CellType.STRING) + { + val = cell.getStringCellValue(); + } + else if (cell.getCellType() == CellType.BOOLEAN) + { + val = cell.getBooleanCellValue(); + } + else if (cell.getCellType() == CellType.ERROR) + { + val = cell.getErrorCellValue(); + } + + } + } + catch (Exception e) + { + return val; + } + return val; + } + + /** + * 判断是否是空行 + * + * @param row 判断的行 + * @return + */ + private boolean isRowEmpty(Row row) + { + if (row == null) + { + return true; + } + for (int i = row.getFirstCellNum(); i < row.getLastCellNum(); i++) + { + Cell cell = row.getCell(i); + if (cell != null && cell.getCellType() != CellType.BLANK) + { + return false; + } + } + return true; + } + + /** + * 获取Excel2003图片 + * + * @param sheet 当前sheet对象 + * @param workbook 工作簿对象 + * @return Map key:图片单元格索引(1_1)String,value:图片流PictureData + */ + public static Map getSheetPictures03(HSSFSheet sheet, HSSFWorkbook workbook) + { + Map sheetIndexPicMap = new HashMap(); + List pictures = workbook.getAllPictures(); + if (!pictures.isEmpty()) + { + for (HSSFShape shape : sheet.getDrawingPatriarch().getChildren()) + { + HSSFClientAnchor anchor = (HSSFClientAnchor) shape.getAnchor(); + if (shape instanceof HSSFPicture) + { + HSSFPicture pic = (HSSFPicture) shape; + int pictureIndex = pic.getPictureIndex() - 1; + HSSFPictureData picData = pictures.get(pictureIndex); + String picIndex = String.valueOf(anchor.getRow1()) + "_" + String.valueOf(anchor.getCol1()); + sheetIndexPicMap.put(picIndex, picData); + } + } + return sheetIndexPicMap; + } + else + { + return sheetIndexPicMap; + } + } + + /** + * 获取Excel2007图片 + * + * @param sheet 当前sheet对象 + * @param workbook 工作簿对象 + * @return Map key:图片单元格索引(1_1)String,value:图片流PictureData + */ + public static Map getSheetPictures07(XSSFSheet sheet, XSSFWorkbook workbook) + { + Map sheetIndexPicMap = new HashMap(); + for (POIXMLDocumentPart dr : sheet.getRelations()) + { + if (dr instanceof XSSFDrawing) + { + XSSFDrawing drawing = (XSSFDrawing) dr; + List shapes = drawing.getShapes(); + for (XSSFShape shape : shapes) + { + if (shape instanceof XSSFPicture) + { + XSSFPicture pic = (XSSFPicture) shape; + XSSFClientAnchor anchor = pic.getPreferredSize(); + CTMarker ctMarker = anchor.getFrom(); + String picIndex = ctMarker.getRow() + "_" + ctMarker.getCol(); + sheetIndexPicMap.put(picIndex, pic.getPictureData()); + } + } + } + } + return sheetIndexPicMap; + } + + /** + * 格式化不同类型的日期对象 + * + * @param dateFormat 日期格式 + * @param val 被格式化的日期对象 + * @return 格式化后的日期字符 + */ + public String parseDateToStr(String dateFormat, Object val) + { + if (val == null) + { + return ""; + } + String str; + if (val instanceof Date) + { + str = DateUtils.parseDateToStr(dateFormat, (Date) val); + } + else if (val instanceof LocalDateTime) + { + str = DateUtils.parseDateToStr(dateFormat, DateUtils.toDate((LocalDateTime) val)); + } + else if (val instanceof LocalDate) + { + str = DateUtils.parseDateToStr(dateFormat, DateUtils.toDate((LocalDate) val)); + } + else + { + str = val.toString(); + } + return str; + } + + /** + * 是否有对象的子列表 + */ + public boolean isSubList() + { + return StringUtils.isNotNull(subFields) && subFields.size() > 0; + } + + /** + * 是否有对象的子列表,集合不为空 + */ + public boolean isSubListValue(T vo) + { + return StringUtils.isNotNull(subFields) && subFields.size() > 0 && StringUtils.isNotNull(getListCellValue(vo)) && getListCellValue(vo).size() > 0; + } + + /** + * 获取集合的值 + */ + public Collection getListCellValue(Object obj) + { + Object value; + try + { + value = subMethod.invoke(obj, new Object[] {}); + } + catch (Exception e) + { + return new ArrayList(); + } + return (Collection) value; + } + + /** + * 获取对象的子列表方法 + * + * @param name 名称 + * @param pojoClass 类对象 + * @return 子列表方法 + */ + public Method getSubMethod(String name, Class pojoClass) + { + StringBuffer getMethodName = new StringBuffer("get"); + getMethodName.append(name.substring(0, 1).toUpperCase()); + getMethodName.append(name.substring(1)); + Method method = null; + try + { + method = pojoClass.getMethod(getMethodName.toString(), new Class[] {}); + } + catch (Exception e) + { + log.error("获取对象异常{}", e.getMessage()); + } + return method; + } +} diff --git a/xinda-common/src/main/java/com/xinda/common/utils/reflect/ReflectUtils.java b/xinda-common/src/main/java/com/xinda/common/utils/reflect/ReflectUtils.java new file mode 100644 index 0000000..23485db --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/utils/reflect/ReflectUtils.java @@ -0,0 +1,410 @@ +package com.xinda.common.utils.reflect; + +import java.lang.reflect.Field; +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; +import java.lang.reflect.Modifier; +import java.lang.reflect.ParameterizedType; +import java.lang.reflect.Type; +import java.util.Date; +import org.apache.commons.lang3.StringUtils; +import org.apache.commons.lang3.Validate; +import org.apache.poi.ss.usermodel.DateUtil; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import com.xinda.common.core.text.Convert; +import com.xinda.common.utils.DateUtils; + +/** + * 反射工具类. 提供调用getter/setter方法, 访问私有变量, 调用私有方法, 获取泛型类型Class, 被AOP过的真实类等工具函数. + * + * @author ruoyi + */ +@SuppressWarnings("rawtypes") +public class ReflectUtils +{ + private static final String SETTER_PREFIX = "set"; + + private static final String GETTER_PREFIX = "get"; + + private static final String CGLIB_CLASS_SEPARATOR = "$$"; + + private static Logger logger = LoggerFactory.getLogger(ReflectUtils.class); + + /** + * 调用Getter方法. + * 支持多级,如:对象名.对象名.方法 + */ + @SuppressWarnings("unchecked") + public static E invokeGetter(Object obj, String propertyName) + { + Object object = obj; + for (String name : StringUtils.split(propertyName, ".")) + { + String getterMethodName = GETTER_PREFIX + StringUtils.capitalize(name); + object = invokeMethod(object, getterMethodName, new Class[] {}, new Object[] {}); + } + return (E) object; + } + + /** + * 调用Setter方法, 仅匹配方法名。 + * 支持多级,如:对象名.对象名.方法 + */ + public static void invokeSetter(Object obj, String propertyName, E value) + { + Object object = obj; + String[] names = StringUtils.split(propertyName, "."); + for (int i = 0; i < names.length; i++) + { + if (i < names.length - 1) + { + String getterMethodName = GETTER_PREFIX + StringUtils.capitalize(names[i]); + object = invokeMethod(object, getterMethodName, new Class[] {}, new Object[] {}); + } + else + { + String setterMethodName = SETTER_PREFIX + StringUtils.capitalize(names[i]); + invokeMethodByName(object, setterMethodName, new Object[] { value }); + } + } + } + + /** + * 直接读取对象属性值, 无视private/protected修饰符, 不经过getter函数. + */ + @SuppressWarnings("unchecked") + public static E getFieldValue(final Object obj, final String fieldName) + { + Field field = getAccessibleField(obj, fieldName); + if (field == null) + { + logger.debug("在 [" + obj.getClass() + "] 中,没有找到 [" + fieldName + "] 字段 "); + return null; + } + E result = null; + try + { + result = (E) field.get(obj); + } + catch (IllegalAccessException e) + { + logger.error("不可能抛出的异常{}", e.getMessage()); + } + return result; + } + + /** + * 直接设置对象属性值, 无视private/protected修饰符, 不经过setter函数. + */ + public static void setFieldValue(final Object obj, final String fieldName, final E value) + { + Field field = getAccessibleField(obj, fieldName); + if (field == null) + { + // throw new IllegalArgumentException("在 [" + obj.getClass() + "] 中,没有找到 [" + fieldName + "] 字段 "); + logger.debug("在 [" + obj.getClass() + "] 中,没有找到 [" + fieldName + "] 字段 "); + return; + } + try + { + field.set(obj, value); + } + catch (IllegalAccessException e) + { + logger.error("不可能抛出的异常: {}", e.getMessage()); + } + } + + /** + * 直接调用对象方法, 无视private/protected修饰符. + * 用于一次性调用的情况,否则应使用getAccessibleMethod()函数获得Method后反复调用. + * 同时匹配方法名+参数类型, + */ + @SuppressWarnings("unchecked") + public static E invokeMethod(final Object obj, final String methodName, final Class[] parameterTypes, + final Object[] args) + { + if (obj == null || methodName == null) + { + return null; + } + Method method = getAccessibleMethod(obj, methodName, parameterTypes); + if (method == null) + { + logger.debug("在 [" + obj.getClass() + "] 中,没有找到 [" + methodName + "] 方法 "); + return null; + } + try + { + return (E) method.invoke(obj, args); + } + catch (Exception e) + { + String msg = "method: " + method + ", obj: " + obj + ", args: " + args + ""; + throw convertReflectionExceptionToUnchecked(msg, e); + } + } + + /** + * 直接调用对象方法, 无视private/protected修饰符, + * 用于一次性调用的情况,否则应使用getAccessibleMethodByName()函数获得Method后反复调用. + * 只匹配函数名,如果有多个同名函数调用第一个。 + */ + @SuppressWarnings("unchecked") + public static E invokeMethodByName(final Object obj, final String methodName, final Object[] args) + { + Method method = getAccessibleMethodByName(obj, methodName, args.length); + if (method == null) + { + // 如果为空不报错,直接返回空。 + logger.debug("在 [" + obj.getClass() + "] 中,没有找到 [" + methodName + "] 方法 "); + return null; + } + try + { + // 类型转换(将参数数据类型转换为目标方法参数类型) + Class[] cs = method.getParameterTypes(); + for (int i = 0; i < cs.length; i++) + { + if (args[i] != null && !args[i].getClass().equals(cs[i])) + { + if (cs[i] == String.class) + { + args[i] = Convert.toStr(args[i]); + if (StringUtils.endsWith((String) args[i], ".0")) + { + args[i] = StringUtils.substringBefore((String) args[i], ".0"); + } + } + else if (cs[i] == Integer.class) + { + args[i] = Convert.toInt(args[i]); + } + else if (cs[i] == Long.class) + { + args[i] = Convert.toLong(args[i]); + } + else if (cs[i] == Double.class) + { + args[i] = Convert.toDouble(args[i]); + } + else if (cs[i] == Float.class) + { + args[i] = Convert.toFloat(args[i]); + } + else if (cs[i] == Date.class) + { + if (args[i] instanceof String) + { + args[i] = DateUtils.parseDate(args[i]); + } + else + { + args[i] = DateUtil.getJavaDate((Double) args[i]); + } + } + else if (cs[i] == boolean.class || cs[i] == Boolean.class) + { + args[i] = Convert.toBool(args[i]); + } + } + } + return (E) method.invoke(obj, args); + } + catch (Exception e) + { + String msg = "method: " + method + ", obj: " + obj + ", args: " + args + ""; + throw convertReflectionExceptionToUnchecked(msg, e); + } + } + + /** + * 循环向上转型, 获取对象的DeclaredField, 并强制设置为可访问. + * 如向上转型到Object仍无法找到, 返回null. + */ + public static Field getAccessibleField(final Object obj, final String fieldName) + { + // 为空不报错。直接返回 null + if (obj == null) + { + return null; + } + Validate.notBlank(fieldName, "fieldName can't be blank"); + for (Class superClass = obj.getClass(); superClass != Object.class; superClass = superClass.getSuperclass()) + { + try + { + Field field = superClass.getDeclaredField(fieldName); + makeAccessible(field); + return field; + } + catch (NoSuchFieldException e) + { + continue; + } + } + return null; + } + + /** + * 循环向上转型, 获取对象的DeclaredMethod,并强制设置为可访问. + * 如向上转型到Object仍无法找到, 返回null. + * 匹配函数名+参数类型。 + * 用于方法需要被多次调用的情况. 先使用本函数先取得Method,然后调用Method.invoke(Object obj, Object... args) + */ + public static Method getAccessibleMethod(final Object obj, final String methodName, + final Class... parameterTypes) + { + // 为空不报错。直接返回 null + if (obj == null) + { + return null; + } + Validate.notBlank(methodName, "methodName can't be blank"); + for (Class searchType = obj.getClass(); searchType != Object.class; searchType = searchType.getSuperclass()) + { + try + { + Method method = searchType.getDeclaredMethod(methodName, parameterTypes); + makeAccessible(method); + return method; + } + catch (NoSuchMethodException e) + { + continue; + } + } + return null; + } + + /** + * 循环向上转型, 获取对象的DeclaredMethod,并强制设置为可访问. + * 如向上转型到Object仍无法找到, 返回null. + * 只匹配函数名。 + * 用于方法需要被多次调用的情况. 先使用本函数先取得Method,然后调用Method.invoke(Object obj, Object... args) + */ + public static Method getAccessibleMethodByName(final Object obj, final String methodName, int argsNum) + { + // 为空不报错。直接返回 null + if (obj == null) + { + return null; + } + Validate.notBlank(methodName, "methodName can't be blank"); + for (Class searchType = obj.getClass(); searchType != Object.class; searchType = searchType.getSuperclass()) + { + Method[] methods = searchType.getDeclaredMethods(); + for (Method method : methods) + { + if (method.getName().equals(methodName) && method.getParameterTypes().length == argsNum) + { + makeAccessible(method); + return method; + } + } + } + return null; + } + + /** + * 改变private/protected的方法为public,尽量不调用实际改动的语句,避免JDK的SecurityManager抱怨。 + */ + public static void makeAccessible(Method method) + { + if ((!Modifier.isPublic(method.getModifiers()) || !Modifier.isPublic(method.getDeclaringClass().getModifiers())) + && !method.isAccessible()) + { + method.setAccessible(true); + } + } + + /** + * 改变private/protected的成员变量为public,尽量不调用实际改动的语句,避免JDK的SecurityManager抱怨。 + */ + public static void makeAccessible(Field field) + { + if ((!Modifier.isPublic(field.getModifiers()) || !Modifier.isPublic(field.getDeclaringClass().getModifiers()) + || Modifier.isFinal(field.getModifiers())) && !field.isAccessible()) + { + field.setAccessible(true); + } + } + + /** + * 通过反射, 获得Class定义中声明的泛型参数的类型, 注意泛型必须定义在父类处 + * 如无法找到, 返回Object.class. + */ + @SuppressWarnings("unchecked") + public static Class getClassGenricType(final Class clazz) + { + return getClassGenricType(clazz, 0); + } + + /** + * 通过反射, 获得Class定义中声明的父类的泛型参数的类型. + * 如无法找到, 返回Object.class. + */ + public static Class getClassGenricType(final Class clazz, final int index) + { + Type genType = clazz.getGenericSuperclass(); + + if (!(genType instanceof ParameterizedType)) + { + logger.debug(clazz.getSimpleName() + "'s superclass not ParameterizedType"); + return Object.class; + } + + Type[] params = ((ParameterizedType) genType).getActualTypeArguments(); + + if (index >= params.length || index < 0) + { + logger.debug("Index: " + index + ", Size of " + clazz.getSimpleName() + "'s Parameterized Type: " + + params.length); + return Object.class; + } + if (!(params[index] instanceof Class)) + { + logger.debug(clazz.getSimpleName() + " not set the actual class on superclass generic parameter"); + return Object.class; + } + + return (Class) params[index]; + } + + public static Class getUserClass(Object instance) + { + if (instance == null) + { + throw new RuntimeException("Instance must not be null"); + } + Class clazz = instance.getClass(); + if (clazz != null && clazz.getName().contains(CGLIB_CLASS_SEPARATOR)) + { + Class superClass = clazz.getSuperclass(); + if (superClass != null && !Object.class.equals(superClass)) + { + return superClass; + } + } + return clazz; + + } + + /** + * 将反射时的checked exception转换为unchecked exception. + */ + public static RuntimeException convertReflectionExceptionToUnchecked(String msg, Exception e) + { + if (e instanceof IllegalAccessException || e instanceof IllegalArgumentException + || e instanceof NoSuchMethodException) + { + return new IllegalArgumentException(msg, e); + } + else if (e instanceof InvocationTargetException) + { + return new RuntimeException(msg, ((InvocationTargetException) e).getTargetException()); + } + return new RuntimeException(msg, e); + } +} diff --git a/xinda-common/src/main/java/com/xinda/common/utils/sign/Base64.java b/xinda-common/src/main/java/com/xinda/common/utils/sign/Base64.java new file mode 100644 index 0000000..e742685 --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/utils/sign/Base64.java @@ -0,0 +1,291 @@ +package com.xinda.common.utils.sign; + +/** + * Base64工具类 + * + * @author ruoyi + */ +public final class Base64 +{ + static private final int BASELENGTH = 128; + static private final int LOOKUPLENGTH = 64; + static private final int TWENTYFOURBITGROUP = 24; + static private final int EIGHTBIT = 8; + static private final int SIXTEENBIT = 16; + static private final int FOURBYTE = 4; + static private final int SIGN = -128; + static private final char PAD = '='; + static final private byte[] base64Alphabet = new byte[BASELENGTH]; + static final private char[] lookUpBase64Alphabet = new char[LOOKUPLENGTH]; + + static + { + for (int i = 0; i < BASELENGTH; ++i) + { + base64Alphabet[i] = -1; + } + for (int i = 'Z'; i >= 'A'; i--) + { + base64Alphabet[i] = (byte) (i - 'A'); + } + for (int i = 'z'; i >= 'a'; i--) + { + base64Alphabet[i] = (byte) (i - 'a' + 26); + } + + for (int i = '9'; i >= '0'; i--) + { + base64Alphabet[i] = (byte) (i - '0' + 52); + } + + base64Alphabet['+'] = 62; + base64Alphabet['/'] = 63; + + for (int i = 0; i <= 25; i++) + { + lookUpBase64Alphabet[i] = (char) ('A' + i); + } + + for (int i = 26, j = 0; i <= 51; i++, j++) + { + lookUpBase64Alphabet[i] = (char) ('a' + j); + } + + for (int i = 52, j = 0; i <= 61; i++, j++) + { + lookUpBase64Alphabet[i] = (char) ('0' + j); + } + lookUpBase64Alphabet[62] = (char) '+'; + lookUpBase64Alphabet[63] = (char) '/'; + } + + private static boolean isWhiteSpace(char octect) + { + return (octect == 0x20 || octect == 0xd || octect == 0xa || octect == 0x9); + } + + private static boolean isPad(char octect) + { + return (octect == PAD); + } + + private static boolean isData(char octect) + { + return (octect < BASELENGTH && base64Alphabet[octect] != -1); + } + + /** + * Encodes hex octects into Base64 + * + * @param binaryData Array containing binaryData + * @return Encoded Base64 array + */ + public static String encode(byte[] binaryData) + { + if (binaryData == null) + { + return null; + } + + int lengthDataBits = binaryData.length * EIGHTBIT; + if (lengthDataBits == 0) + { + return ""; + } + + int fewerThan24bits = lengthDataBits % TWENTYFOURBITGROUP; + int numberTriplets = lengthDataBits / TWENTYFOURBITGROUP; + int numberQuartet = fewerThan24bits != 0 ? numberTriplets + 1 : numberTriplets; + char encodedData[] = null; + + encodedData = new char[numberQuartet * 4]; + + byte k = 0, l = 0, b1 = 0, b2 = 0, b3 = 0; + + int encodedIndex = 0; + int dataIndex = 0; + + for (int i = 0; i < numberTriplets; i++) + { + b1 = binaryData[dataIndex++]; + b2 = binaryData[dataIndex++]; + b3 = binaryData[dataIndex++]; + + l = (byte) (b2 & 0x0f); + k = (byte) (b1 & 0x03); + + byte val1 = ((b1 & SIGN) == 0) ? (byte) (b1 >> 2) : (byte) ((b1) >> 2 ^ 0xc0); + byte val2 = ((b2 & SIGN) == 0) ? (byte) (b2 >> 4) : (byte) ((b2) >> 4 ^ 0xf0); + byte val3 = ((b3 & SIGN) == 0) ? (byte) (b3 >> 6) : (byte) ((b3) >> 6 ^ 0xfc); + + encodedData[encodedIndex++] = lookUpBase64Alphabet[val1]; + encodedData[encodedIndex++] = lookUpBase64Alphabet[val2 | (k << 4)]; + encodedData[encodedIndex++] = lookUpBase64Alphabet[(l << 2) | val3]; + encodedData[encodedIndex++] = lookUpBase64Alphabet[b3 & 0x3f]; + } + + // form integral number of 6-bit groups + if (fewerThan24bits == EIGHTBIT) + { + b1 = binaryData[dataIndex]; + k = (byte) (b1 & 0x03); + byte val1 = ((b1 & SIGN) == 0) ? (byte) (b1 >> 2) : (byte) ((b1) >> 2 ^ 0xc0); + encodedData[encodedIndex++] = lookUpBase64Alphabet[val1]; + encodedData[encodedIndex++] = lookUpBase64Alphabet[k << 4]; + encodedData[encodedIndex++] = PAD; + encodedData[encodedIndex++] = PAD; + } + else if (fewerThan24bits == SIXTEENBIT) + { + b1 = binaryData[dataIndex]; + b2 = binaryData[dataIndex + 1]; + l = (byte) (b2 & 0x0f); + k = (byte) (b1 & 0x03); + + byte val1 = ((b1 & SIGN) == 0) ? (byte) (b1 >> 2) : (byte) ((b1) >> 2 ^ 0xc0); + byte val2 = ((b2 & SIGN) == 0) ? (byte) (b2 >> 4) : (byte) ((b2) >> 4 ^ 0xf0); + + encodedData[encodedIndex++] = lookUpBase64Alphabet[val1]; + encodedData[encodedIndex++] = lookUpBase64Alphabet[val2 | (k << 4)]; + encodedData[encodedIndex++] = lookUpBase64Alphabet[l << 2]; + encodedData[encodedIndex++] = PAD; + } + return new String(encodedData); + } + + /** + * Decodes Base64 data into octects + * + * @param encoded string containing Base64 data + * @return Array containind decoded data. + */ + public static byte[] decode(String encoded) + { + if (encoded == null) + { + return null; + } + + char[] base64Data = encoded.toCharArray(); + // remove white spaces + int len = removeWhiteSpace(base64Data); + + if (len % FOURBYTE != 0) + { + return null;// should be divisible by four + } + + int numberQuadruple = (len / FOURBYTE); + + if (numberQuadruple == 0) + { + return new byte[0]; + } + + byte decodedData[] = null; + byte b1 = 0, b2 = 0, b3 = 0, b4 = 0; + char d1 = 0, d2 = 0, d3 = 0, d4 = 0; + + int i = 0; + int encodedIndex = 0; + int dataIndex = 0; + decodedData = new byte[(numberQuadruple) * 3]; + + for (; i < numberQuadruple - 1; i++) + { + + if (!isData((d1 = base64Data[dataIndex++])) || !isData((d2 = base64Data[dataIndex++])) + || !isData((d3 = base64Data[dataIndex++])) || !isData((d4 = base64Data[dataIndex++]))) + { + return null; + } // if found "no data" just return null + + b1 = base64Alphabet[d1]; + b2 = base64Alphabet[d2]; + b3 = base64Alphabet[d3]; + b4 = base64Alphabet[d4]; + + decodedData[encodedIndex++] = (byte) (b1 << 2 | b2 >> 4); + decodedData[encodedIndex++] = (byte) (((b2 & 0xf) << 4) | ((b3 >> 2) & 0xf)); + decodedData[encodedIndex++] = (byte) (b3 << 6 | b4); + } + + if (!isData((d1 = base64Data[dataIndex++])) || !isData((d2 = base64Data[dataIndex++]))) + { + return null;// if found "no data" just return null + } + + b1 = base64Alphabet[d1]; + b2 = base64Alphabet[d2]; + + d3 = base64Data[dataIndex++]; + d4 = base64Data[dataIndex++]; + if (!isData((d3)) || !isData((d4))) + {// Check if they are PAD characters + if (isPad(d3) && isPad(d4)) + { + if ((b2 & 0xf) != 0)// last 4 bits should be zero + { + return null; + } + byte[] tmp = new byte[i * 3 + 1]; + System.arraycopy(decodedData, 0, tmp, 0, i * 3); + tmp[encodedIndex] = (byte) (b1 << 2 | b2 >> 4); + return tmp; + } + else if (!isPad(d3) && isPad(d4)) + { + b3 = base64Alphabet[d3]; + if ((b3 & 0x3) != 0)// last 2 bits should be zero + { + return null; + } + byte[] tmp = new byte[i * 3 + 2]; + System.arraycopy(decodedData, 0, tmp, 0, i * 3); + tmp[encodedIndex++] = (byte) (b1 << 2 | b2 >> 4); + tmp[encodedIndex] = (byte) (((b2 & 0xf) << 4) | ((b3 >> 2) & 0xf)); + return tmp; + } + else + { + return null; + } + } + else + { // No PAD e.g 3cQl + b3 = base64Alphabet[d3]; + b4 = base64Alphabet[d4]; + decodedData[encodedIndex++] = (byte) (b1 << 2 | b2 >> 4); + decodedData[encodedIndex++] = (byte) (((b2 & 0xf) << 4) | ((b3 >> 2) & 0xf)); + decodedData[encodedIndex++] = (byte) (b3 << 6 | b4); + + } + return decodedData; + } + + /** + * remove WhiteSpace from MIME containing encoded Base64 data. + * + * @param data the byte array of base64 data (with WS) + * @return the new length + */ + private static int removeWhiteSpace(char[] data) + { + if (data == null) + { + return 0; + } + + // count characters that's not whitespace + int newSize = 0; + int len = data.length; + for (int i = 0; i < len; i++) + { + if (!isWhiteSpace(data[i])) + { + data[newSize++] = data[i]; + } + } + return newSize; + } +} diff --git a/xinda-common/src/main/java/com/xinda/common/utils/sign/Md5Utils.java b/xinda-common/src/main/java/com/xinda/common/utils/sign/Md5Utils.java new file mode 100644 index 0000000..01750d5 --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/utils/sign/Md5Utils.java @@ -0,0 +1,67 @@ +package com.xinda.common.utils.sign; + +import java.nio.charset.StandardCharsets; +import java.security.MessageDigest; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * Md5加密方法 + * + * @author ruoyi + */ +public class Md5Utils +{ + private static final Logger log = LoggerFactory.getLogger(Md5Utils.class); + + private static byte[] md5(String s) + { + MessageDigest algorithm; + try + { + algorithm = MessageDigest.getInstance("MD5"); + algorithm.reset(); + algorithm.update(s.getBytes("UTF-8")); + byte[] messageDigest = algorithm.digest(); + return messageDigest; + } + catch (Exception e) + { + log.error("MD5 Error...", e); + } + return null; + } + + private static final String toHex(byte hash[]) + { + if (hash == null) + { + return null; + } + StringBuffer buf = new StringBuffer(hash.length * 2); + int i; + + for (i = 0; i < hash.length; i++) + { + if ((hash[i] & 0xff) < 0x10) + { + buf.append("0"); + } + buf.append(Long.toString(hash[i] & 0xff, 16)); + } + return buf.toString(); + } + + public static String hash(String s) + { + try + { + return new String(toHex(md5(s)).getBytes(StandardCharsets.UTF_8), StandardCharsets.UTF_8); + } + catch (Exception e) + { + log.error("not supported charset...{}", e); + return s; + } + } +} diff --git a/xinda-common/src/main/java/com/xinda/common/utils/sign/SignUtils.java b/xinda-common/src/main/java/com/xinda/common/utils/sign/SignUtils.java new file mode 100644 index 0000000..566f079 --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/utils/sign/SignUtils.java @@ -0,0 +1,66 @@ +package com.xinda.common.utils.sign; + +import java.security.MessageDigest; +import java.security.NoSuchAlgorithmException; +import java.util.Arrays; + +/** + * @author fastb + * @version 1.0 + * @description: 签名验证 + * @date 2024-03-12 15:54 + */ +public class SignUtils { + + /** + * 验证签名 + */ + public static boolean checkSignature(String token, String signature, String timestamp,String nonce) { + // 1.将token、timestamp、nonce三个参数进行字典序排序 + String[] arr = new String[] { token, timestamp, nonce }; + Arrays.sort(arr); + + // 2. 将三个参数字符串拼接成一个字符串进行sha1加密 + StringBuilder content = new StringBuilder(); + for (int i = 0; i < arr.length; i++) { + content.append(arr[i]); + } + MessageDigest md = null; + String tmpStr = null; + try { + md = MessageDigest.getInstance("SHA-1"); + // 将三个参数字符串拼接成一个字符串进行sha1加密 + byte[] digest = md.digest(content.toString().getBytes()); + tmpStr = byteToStr(digest); + } catch (NoSuchAlgorithmException e) { + e.printStackTrace(); + } + + content = null; + // 3.将sha1加密后的字符串可与signature对比,标识该请求来源于微信 + return tmpStr != null ? tmpStr.equals(signature.toUpperCase()) : false; + } + + /** + * 将字节数组转换为十六进制字符串 + */ + private static String byteToStr(byte[] byteArray) { + String strDigest = ""; + for (int i = 0; i < byteArray.length; i++) { + strDigest += byteToHexStr(byteArray[i]); + } + return strDigest; + } + + /** + * 将字节转换为十六进制字符串 + */ + private static String byteToHexStr(byte mByte) { + char[] Digit = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A','B', 'C', 'D', 'E', 'F' }; + char[] tempArr = new char[2]; + tempArr[0] = Digit[(mByte >>> 4) & 0X0F]; + tempArr[1] = Digit[mByte & 0X0F]; + String s = new String(tempArr); + return s; + } +} diff --git a/xinda-common/src/main/java/com/xinda/common/utils/spring/SpringUtils.java b/xinda-common/src/main/java/com/xinda/common/utils/spring/SpringUtils.java new file mode 100644 index 0000000..f9ffef6 --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/utils/spring/SpringUtils.java @@ -0,0 +1,183 @@ +package com.xinda.common.utils.spring; + +import org.springframework.aop.framework.AopContext; +import org.springframework.beans.BeansException; +import org.springframework.beans.factory.NoSuchBeanDefinitionException; +import org.springframework.beans.factory.config.BeanFactoryPostProcessor; +import org.springframework.beans.factory.config.ConfigurableListableBeanFactory; +import org.springframework.context.ApplicationContext; +import org.springframework.context.ApplicationContextAware; +import org.springframework.stereotype.Component; +import com.xinda.common.utils.StringUtils; +import org.springframework.util.CollectionUtils; + +import java.lang.annotation.Annotation; +import java.util.HashMap; +import java.util.Map; + + +/** + * spring工具类 方便在非spring管理环境中获取bean + * + * @author ruoyi + */ +@Component +public final class SpringUtils implements BeanFactoryPostProcessor, ApplicationContextAware +{ + /** Spring应用上下文环境 */ + private static ConfigurableListableBeanFactory beanFactory; + + private static ApplicationContext applicationContext; + + @Override + public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException + { + SpringUtils.beanFactory = beanFactory; + } + + @Override + public void setApplicationContext(ApplicationContext applicationContext) throws BeansException + { + SpringUtils.applicationContext = applicationContext; + } + + /** + * 获取对象 + * + * @param name + * @return Object 一个以所给名字注册的bean的实例 + * @throws org.springframework.beans.BeansException + * + */ + @SuppressWarnings("unchecked") + public static T getBean(String name) throws BeansException + { + return (T) beanFactory.getBean(name); + } + + /** + * 获取类型为requiredType的对象 + * + * @param clz + * @return + * @throws org.springframework.beans.BeansException + * + */ + public static T getBean(Class clz) throws BeansException + { + T result = (T) beanFactory.getBean(clz); + return result; + } + + /** + * 如果BeanFactory包含一个与所给名称匹配的bean定义,则返回true + * + * @param name + * @return boolean + */ + public static boolean containsBean(String name) + { + return beanFactory.containsBean(name); + } + + /** + * 判断以给定名字注册的bean定义是一个singleton还是一个prototype。 如果与给定名字相应的bean定义没有被找到,将会抛出一个异常(NoSuchBeanDefinitionException) + * + * @param name + * @return boolean + * @throws org.springframework.beans.factory.NoSuchBeanDefinitionException + * + */ + public static boolean isSingleton(String name) throws NoSuchBeanDefinitionException + { + return beanFactory.isSingleton(name); + } + + /** + * @param name + * @return Class 注册对象的类型 + * @throws org.springframework.beans.factory.NoSuchBeanDefinitionException + * + */ + public static Class getType(String name) throws NoSuchBeanDefinitionException + { + return beanFactory.getType(name); + } + + /** + * 如果给定的bean名字在bean定义中有别名,则返回这些别名 + * + * @param name + * @return + * @throws org.springframework.beans.factory.NoSuchBeanDefinitionException + * + */ + public static String[] getAliases(String name) throws NoSuchBeanDefinitionException + { + return beanFactory.getAliases(name); + } + + /** + * 获取aop代理对象 + * + * @param invoker + * @return + */ + @SuppressWarnings("unchecked") + public static T getAopProxy(T invoker) + { + return (T) AopContext.currentProxy(); + } + + /** + * 获取当前的环境配置,无配置返回null + * + * @return 当前的环境配置 + */ + public static String[] getActiveProfiles() + { + return applicationContext.getEnvironment().getActiveProfiles(); + } + + /** + * 获取当前的环境配置,当有多个环境配置时,只获取第一个 + * + * @return 当前的环境配置 + */ + public static String getActiveProfile() + { + final String[] activeProfiles = getActiveProfiles(); + return StringUtils.isNotEmpty(activeProfiles) ? activeProfiles[0] : null; + } + + /** + * 获取配置文件中的值 + * + * @param key 配置文件的key + * @return 当前的配置文件的值 + * + */ + public static String getRequiredProperty(String key) + { + return applicationContext.getEnvironment().getRequiredProperty(key); + } + + /** + * 获取带有annotation注解的所有bean集合 + * @param annotation 注解 + * @param + * @return 集合 + */ + public static Map getBeanWithAnnotation(Class annotation){ + Map resultMap = new HashMap<>(); + Map beanMap = applicationContext.getBeansWithAnnotation(annotation); + if (CollectionUtils.isEmpty(beanMap)){ + return resultMap; + } + beanMap.forEach((key,value)->{ + resultMap.put(key,(T) value); + }); + return resultMap; + } + +} diff --git a/xinda-common/src/main/java/com/xinda/common/utils/sql/SqlUtil.java b/xinda-common/src/main/java/com/xinda/common/utils/sql/SqlUtil.java new file mode 100644 index 0000000..2ac3d75 --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/utils/sql/SqlUtil.java @@ -0,0 +1,61 @@ +package com.xinda.common.utils.sql; + +import com.xinda.common.exception.UtilException; +import com.xinda.common.utils.StringUtils; + +/** + * sql操作工具类 + * + * @author ruoyi + */ +public class SqlUtil +{ + /** + * 定义常用的 sql关键字 + */ + public static String SQL_REGEX = "and |extractvalue|updatexml|exec |insert |select |delete |update |drop |count |chr |mid |master |truncate |char |declare |or |+|user()"; + + /** + * 仅支持字母、数字、下划线、空格、逗号、小数点(支持多个字段排序) + */ + public static String SQL_PATTERN = "[a-zA-Z0-9_\\ \\,\\.]+"; + + /** + * 检查字符,防止注入绕过 + */ + public static String escapeOrderBySql(String value) + { + if (StringUtils.isNotEmpty(value) && !isValidOrderBySql(value)) + { + throw new UtilException("参数不符合规范,不能进行查询"); + } + return value; + } + + /** + * 验证 order by 语法是否符合规范 + */ + public static boolean isValidOrderBySql(String value) + { + return value.matches(SQL_PATTERN); + } + + /** + * SQL关键字检查 + */ + public static void filterKeyword(String value) + { + if (StringUtils.isEmpty(value)) + { + return; + } + String[] sqlKeywords = StringUtils.split(SQL_REGEX, "\\|"); + for (String sqlKeyword : sqlKeywords) + { + if (StringUtils.indexOfIgnoreCase(value, sqlKeyword) > -1) + { + throw new UtilException("参数存在SQL注入风险"); + } + } + } +} diff --git a/xinda-common/src/main/java/com/xinda/common/utils/uuid/IdUtils.java b/xinda-common/src/main/java/com/xinda/common/utils/uuid/IdUtils.java new file mode 100644 index 0000000..ad35260 --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/utils/uuid/IdUtils.java @@ -0,0 +1,128 @@ +package com.xinda.common.utils.uuid; + +import lombok.extern.slf4j.Slf4j; +import com.xinda.common.utils.Md5Utils; +import java.util.Random; + +/** + * ID生成器工具类 + * + * @author ruoyi + */ +@Slf4j +public class IdUtils +{ + private static long lastTimestamp = -1L; + private long sequence = 0L; + private final long workerId; + private final long datacenterId; + private static Integer startIndex=0; + private static Integer endIndex=6; + + public IdUtils(long workerId, long datacenterId) { + if(workerId <= 31L && workerId >= 0L) { + this.workerId = workerId; + } else { + if(workerId != -1L) { + throw new IllegalArgumentException("worker Id can't be greater than %d or less than 0"); + } + + this.workerId = (long)(new Random()).nextInt(31); + } + + if(datacenterId <= 31L && datacenterId >= 0L) { + this.datacenterId = datacenterId; + } else { + if(datacenterId != -1L) { + throw new IllegalArgumentException("datacenter Id can't be greater than %d or less than 0"); + } + + this.datacenterId = (long)(new Random()).nextInt(31); + } + + } + + public synchronized long nextId() { + long timestamp = this.timeGen(); + if(timestamp < lastTimestamp) { + try { + throw new Exception("Clock moved backwards. Refusing to generate id for " + (lastTimestamp - timestamp) + " milliseconds"); + } catch (Exception e) { + log.warn("生成ID异常", e); + } + } + + if(lastTimestamp == timestamp) { + this.sequence = this.sequence + 1L & 4095L; + if(this.sequence == 0L) { + timestamp = this.tilNextMillis(lastTimestamp); + } + } else { + this.sequence = 0L; + } + + lastTimestamp = timestamp; + return timestamp - 1288834974657L << 22 | this.datacenterId << 17 | this.workerId << 12 | this.sequence; + } + + private long tilNextMillis(long lastTimestamp) { + long timestamp; + for(timestamp = this.timeGen(); timestamp <= lastTimestamp; timestamp = this.timeGen()) { + ; + } + return timestamp; + } + + private long timeGen() { + return System.currentTimeMillis(); + } + + public static String uuid() { + return java.util.UUID.randomUUID().toString().replaceAll("-", ""); + } + + public static String getNextCode() { + return Md5Utils.md5(IdUtils.uuid() + System.currentTimeMillis()).substring(startIndex,endIndex); + } + + + /** + * 获取随机UUID + * + * @return 随机UUID + */ + public static String randomUUID() + { + return UUID.randomUUID().toString(); + } + + /** + * 简化的UUID,去掉了横线 + * + * @return 简化的UUID,去掉了横线 + */ + public static String simpleUUID() + { + return UUID.randomUUID().toString(true); + } + + /** + * 获取随机UUID,使用性能更好的ThreadLocalRandom生成UUID + * + * @return 随机UUID + */ + public static String fastUUID() + { + return UUID.fastUUID().toString(); + } + + /** + * 简化的UUID,去掉了横线,使用性能更好的ThreadLocalRandom生成UUID + * + * @return 简化的UUID,去掉了横线 + */ + public static String fastSimpleUUID() + { + return UUID.fastUUID().toString(true); + } +} diff --git a/xinda-common/src/main/java/com/xinda/common/utils/uuid/Seq.java b/xinda-common/src/main/java/com/xinda/common/utils/uuid/Seq.java new file mode 100644 index 0000000..e83405e --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/utils/uuid/Seq.java @@ -0,0 +1,86 @@ +package com.xinda.common.utils.uuid; + +import java.util.concurrent.atomic.AtomicInteger; +import com.xinda.common.utils.DateUtils; +import com.xinda.common.utils.StringUtils; + +/** + * @author ruoyi 序列生成类 + */ +public class Seq +{ + // 通用序列类型 + public static final String commSeqType = "COMMON"; + + // 上传序列类型 + public static final String uploadSeqType = "UPLOAD"; + + // 通用接口序列数 + private static AtomicInteger commSeq = new AtomicInteger(1); + + // 上传接口序列数 + private static AtomicInteger uploadSeq = new AtomicInteger(1); + + // 机器标识 + private static String machineCode = "A"; + + /** + * 获取通用序列号 + * + * @return 序列值 + */ + public static String getId() + { + return getId(commSeqType); + } + + /** + * 默认16位序列号 yyMMddHHmmss + 一位机器标识 + 3长度循环递增字符串 + * + * @return 序列值 + */ + public static String getId(String type) + { + AtomicInteger atomicInt = commSeq; + if (uploadSeqType.equals(type)) + { + atomicInt = uploadSeq; + } + return getId(atomicInt, 3); + } + + /** + * 通用接口序列号 yyMMddHHmmss + 一位机器标识 + length长度循环递增字符串 + * + * @param atomicInt 序列数 + * @param length 数值长度 + * @return 序列值 + */ + public static String getId(AtomicInteger atomicInt, int length) + { + String result = DateUtils.dateTimeNow(); + result += machineCode; + result += getSeq(atomicInt, length); + return result; + } + + /** + * 序列循环递增字符串[1, 10 的 (length)幂次方), 用0左补齐length位数 + * + * @return 序列值 + */ + private synchronized static String getSeq(AtomicInteger atomicInt, int length) + { + // 先取值再+1 + int value = atomicInt.getAndIncrement(); + + // 如果更新后值>=10 的 (length)幂次方则重置为1 + int maxSeq = (int) Math.pow(10, length); + if (atomicInt.get() >= maxSeq) + { + atomicInt.set(1); + } + // 转字符串,用0左补齐 + return StringUtils.padl(value, length); + } +} diff --git a/xinda-common/src/main/java/com/xinda/common/utils/uuid/UUID.java b/xinda-common/src/main/java/com/xinda/common/utils/uuid/UUID.java new file mode 100644 index 0000000..d2bc66c --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/utils/uuid/UUID.java @@ -0,0 +1,484 @@ +package com.xinda.common.utils.uuid; + +import java.security.MessageDigest; +import java.security.NoSuchAlgorithmException; +import java.security.SecureRandom; +import java.util.Random; +import java.util.concurrent.ThreadLocalRandom; +import com.xinda.common.exception.UtilException; + +/** + * 提供通用唯一识别码(universally unique identifier)(UUID)实现 + * + * @author ruoyi + */ +public final class UUID implements java.io.Serializable, Comparable +{ + private static final long serialVersionUID = -1185015143654744140L; + + /** + * SecureRandom 的单例 + * + */ + private static class Holder + { + static final SecureRandom numberGenerator = getSecureRandom(); + } + + /** 此UUID的最高64有效位 */ + private final long mostSigBits; + + /** 此UUID的最低64有效位 */ + private final long leastSigBits; + + /** + * 私有构造 + * + * @param data 数据 + */ + private UUID(byte[] data) + { + long msb = 0; + long lsb = 0; + assert data.length == 16 : "data must be 16 bytes in length"; + for (int i = 0; i < 8; i++) + { + msb = (msb << 8) | (data[i] & 0xff); + } + for (int i = 8; i < 16; i++) + { + lsb = (lsb << 8) | (data[i] & 0xff); + } + this.mostSigBits = msb; + this.leastSigBits = lsb; + } + + /** + * 使用指定的数据构造新的 UUID。 + * + * @param mostSigBits 用于 {@code UUID} 的最高有效 64 位 + * @param leastSigBits 用于 {@code UUID} 的最低有效 64 位 + */ + public UUID(long mostSigBits, long leastSigBits) + { + this.mostSigBits = mostSigBits; + this.leastSigBits = leastSigBits; + } + + /** + * 获取类型 4(伪随机生成的)UUID 的静态工厂。 使用加密的本地线程伪随机数生成器生成该 UUID。 + * + * @return 随机生成的 {@code UUID} + */ + public static UUID fastUUID() + { + return randomUUID(false); + } + + /** + * 获取类型 4(伪随机生成的)UUID 的静态工厂。 使用加密的强伪随机数生成器生成该 UUID。 + * + * @return 随机生成的 {@code UUID} + */ + public static UUID randomUUID() + { + return randomUUID(true); + } + + /** + * 获取类型 4(伪随机生成的)UUID 的静态工厂。 使用加密的强伪随机数生成器生成该 UUID。 + * + * @param isSecure 是否使用{@link SecureRandom}如果是可以获得更安全的随机码,否则可以得到更好的性能 + * @return 随机生成的 {@code UUID} + */ + public static UUID randomUUID(boolean isSecure) + { + final Random ng = isSecure ? Holder.numberGenerator : getRandom(); + + byte[] randomBytes = new byte[16]; + ng.nextBytes(randomBytes); + randomBytes[6] &= 0x0f; /* clear version */ + randomBytes[6] |= 0x40; /* set to version 4 */ + randomBytes[8] &= 0x3f; /* clear variant */ + randomBytes[8] |= 0x80; /* set to IETF variant */ + return new UUID(randomBytes); + } + + /** + * 根据指定的字节数组获取类型 3(基于名称的)UUID 的静态工厂。 + * + * @param name 用于构造 UUID 的字节数组。 + * + * @return 根据指定数组生成的 {@code UUID} + */ + public static UUID nameUUIDFromBytes(byte[] name) + { + MessageDigest md; + try + { + md = MessageDigest.getInstance("MD5"); + } + catch (NoSuchAlgorithmException nsae) + { + throw new InternalError("MD5 not supported"); + } + byte[] md5Bytes = md.digest(name); + md5Bytes[6] &= 0x0f; /* clear version */ + md5Bytes[6] |= 0x30; /* set to version 3 */ + md5Bytes[8] &= 0x3f; /* clear variant */ + md5Bytes[8] |= 0x80; /* set to IETF variant */ + return new UUID(md5Bytes); + } + + /** + * 根据 {@link #toString()} 方法中描述的字符串标准表示形式创建{@code UUID}。 + * + * @param name 指定 {@code UUID} 字符串 + * @return 具有指定值的 {@code UUID} + * @throws IllegalArgumentException 如果 name 与 {@link #toString} 中描述的字符串表示形式不符抛出此异常 + * + */ + public static UUID fromString(String name) + { + String[] components = name.split("-"); + if (components.length != 5) + { + throw new IllegalArgumentException("Invalid UUID string: " + name); + } + for (int i = 0; i < 5; i++) + { + components[i] = "0x" + components[i]; + } + + long mostSigBits = Long.decode(components[0]).longValue(); + mostSigBits <<= 16; + mostSigBits |= Long.decode(components[1]).longValue(); + mostSigBits <<= 16; + mostSigBits |= Long.decode(components[2]).longValue(); + + long leastSigBits = Long.decode(components[3]).longValue(); + leastSigBits <<= 48; + leastSigBits |= Long.decode(components[4]).longValue(); + + return new UUID(mostSigBits, leastSigBits); + } + + /** + * 返回此 UUID 的 128 位值中的最低有效 64 位。 + * + * @return 此 UUID 的 128 位值中的最低有效 64 位。 + */ + public long getLeastSignificantBits() + { + return leastSigBits; + } + + /** + * 返回此 UUID 的 128 位值中的最高有效 64 位。 + * + * @return 此 UUID 的 128 位值中最高有效 64 位。 + */ + public long getMostSignificantBits() + { + return mostSigBits; + } + + /** + * 与此 {@code UUID} 相关联的版本号. 版本号描述此 {@code UUID} 是如何生成的。 + *

+ * 版本号具有以下含意: + *

    + *
  • 1 基于时间的 UUID + *
  • 2 DCE 安全 UUID + *
  • 3 基于名称的 UUID + *
  • 4 随机生成的 UUID + *
+ * + * @return 此 {@code UUID} 的版本号 + */ + public int version() + { + // Version is bits masked by 0x000000000000F000 in MS long + return (int) ((mostSigBits >> 12) & 0x0f); + } + + /** + * 与此 {@code UUID} 相关联的变体号。变体号描述 {@code UUID} 的布局。 + *

+ * 变体号具有以下含意: + *

    + *
  • 0 为 NCS 向后兼容保留 + *
  • 2 IETF RFC 4122(Leach-Salz), 用于此类 + *
  • 6 保留,微软向后兼容 + *
  • 7 保留供以后定义使用 + *
+ * + * @return 此 {@code UUID} 相关联的变体号 + */ + public int variant() + { + // This field is composed of a varying number of bits. + // 0 - - Reserved for NCS backward compatibility + // 1 0 - The IETF aka Leach-Salz variant (used by this class) + // 1 1 0 Reserved, Microsoft backward compatibility + // 1 1 1 Reserved for future definition. + return (int) ((leastSigBits >>> (64 - (leastSigBits >>> 62))) & (leastSigBits >> 63)); + } + + /** + * 与此 UUID 相关联的时间戳值。 + * + *

+ * 60 位的时间戳值根据此 {@code UUID} 的 time_low、time_mid 和 time_hi 字段构造。
+ * 所得到的时间戳以 100 毫微秒为单位,从 UTC(通用协调时间) 1582 年 10 月 15 日零时开始。 + * + *

+ * 时间戳值仅在在基于时间的 UUID(其 version 类型为 1)中才有意义。
+ * 如果此 {@code UUID} 不是基于时间的 UUID,则此方法抛出 UnsupportedOperationException。 + * + * @throws UnsupportedOperationException 如果此 {@code UUID} 不是 version 为 1 的 UUID。 + */ + public long timestamp() throws UnsupportedOperationException + { + checkTimeBase(); + return (mostSigBits & 0x0FFFL) << 48// + | ((mostSigBits >> 16) & 0x0FFFFL) << 32// + | mostSigBits >>> 32; + } + + /** + * 与此 UUID 相关联的时钟序列值。 + * + *

+ * 14 位的时钟序列值根据此 UUID 的 clock_seq 字段构造。clock_seq 字段用于保证在基于时间的 UUID 中的时间唯一性。 + *

+ * {@code clockSequence} 值仅在基于时间的 UUID(其 version 类型为 1)中才有意义。 如果此 UUID 不是基于时间的 UUID,则此方法抛出 + * UnsupportedOperationException。 + * + * @return 此 {@code UUID} 的时钟序列 + * + * @throws UnsupportedOperationException 如果此 UUID 的 version 不为 1 + */ + public int clockSequence() throws UnsupportedOperationException + { + checkTimeBase(); + return (int) ((leastSigBits & 0x3FFF000000000000L) >>> 48); + } + + /** + * 与此 UUID 相关的节点值。 + * + *

+ * 48 位的节点值根据此 UUID 的 node 字段构造。此字段旨在用于保存机器的 IEEE 802 地址,该地址用于生成此 UUID 以保证空间唯一性。 + *

+ * 节点值仅在基于时间的 UUID(其 version 类型为 1)中才有意义。
+ * 如果此 UUID 不是基于时间的 UUID,则此方法抛出 UnsupportedOperationException。 + * + * @return 此 {@code UUID} 的节点值 + * + * @throws UnsupportedOperationException 如果此 UUID 的 version 不为 1 + */ + public long node() throws UnsupportedOperationException + { + checkTimeBase(); + return leastSigBits & 0x0000FFFFFFFFFFFFL; + } + + /** + * 返回此{@code UUID} 的字符串表现形式。 + * + *

+ * UUID 的字符串表示形式由此 BNF 描述: + * + *

+     * {@code
+     * UUID                   = ----
+     * time_low               = 4*
+     * time_mid               = 2*
+     * time_high_and_version  = 2*
+     * variant_and_sequence   = 2*
+     * node                   = 6*
+     * hexOctet               = 
+     * hexDigit               = [0-9a-fA-F]
+     * }
+     * 
+ * + * + * + * @return 此{@code UUID} 的字符串表现形式 + * @see #toString(boolean) + */ + @Override + public String toString() + { + return toString(false); + } + + /** + * 返回此{@code UUID} 的字符串表现形式。 + * + *

+ * UUID 的字符串表示形式由此 BNF 描述: + * + *

+     * {@code
+     * UUID                   = ----
+     * time_low               = 4*
+     * time_mid               = 2*
+     * time_high_and_version  = 2*
+     * variant_and_sequence   = 2*
+     * node                   = 6*
+     * hexOctet               = 
+     * hexDigit               = [0-9a-fA-F]
+     * }
+     * 
+ * + * + * + * @param isSimple 是否简单模式,简单模式为不带'-'的UUID字符串 + * @return 此{@code UUID} 的字符串表现形式 + */ + public String toString(boolean isSimple) + { + final StringBuilder builder = new StringBuilder(isSimple ? 32 : 36); + // time_low + builder.append(digits(mostSigBits >> 32, 8)); + if (!isSimple) + { + builder.append('-'); + } + // time_mid + builder.append(digits(mostSigBits >> 16, 4)); + if (!isSimple) + { + builder.append('-'); + } + // time_high_and_version + builder.append(digits(mostSigBits, 4)); + if (!isSimple) + { + builder.append('-'); + } + // variant_and_sequence + builder.append(digits(leastSigBits >> 48, 4)); + if (!isSimple) + { + builder.append('-'); + } + // node + builder.append(digits(leastSigBits, 12)); + + return builder.toString(); + } + + /** + * 返回此 UUID 的哈希码。 + * + * @return UUID 的哈希码值。 + */ + @Override + public int hashCode() + { + long hilo = mostSigBits ^ leastSigBits; + return ((int) (hilo >> 32)) ^ (int) hilo; + } + + /** + * 将此对象与指定对象比较。 + *

+ * 当且仅当参数不为 {@code null}、而是一个 UUID 对象、具有与此 UUID 相同的 varriant、包含相同的值(每一位均相同)时,结果才为 {@code true}。 + * + * @param obj 要与之比较的对象 + * + * @return 如果对象相同,则返回 {@code true};否则返回 {@code false} + */ + @Override + public boolean equals(Object obj) + { + if ((null == obj) || (obj.getClass() != UUID.class)) + { + return false; + } + UUID id = (UUID) obj; + return (mostSigBits == id.mostSigBits && leastSigBits == id.leastSigBits); + } + + // Comparison Operations + + /** + * 将此 UUID 与指定的 UUID 比较。 + * + *

+ * 如果两个 UUID 不同,且第一个 UUID 的最高有效字段大于第二个 UUID 的对应字段,则第一个 UUID 大于第二个 UUID。 + * + * @param val 与此 UUID 比较的 UUID + * + * @return 在此 UUID 小于、等于或大于 val 时,分别返回 -1、0 或 1。 + * + */ + @Override + public int compareTo(UUID val) + { + // The ordering is intentionally set up so that the UUIDs + // can simply be numerically compared as two numbers + return (this.mostSigBits < val.mostSigBits ? -1 : // + (this.mostSigBits > val.mostSigBits ? 1 : // + (this.leastSigBits < val.leastSigBits ? -1 : // + (this.leastSigBits > val.leastSigBits ? 1 : // + 0)))); + } + + // ------------------------------------------------------------------------------------------------------------------- + // Private method start + /** + * 返回指定数字对应的hex值 + * + * @param val 值 + * @param digits 位 + * @return 值 + */ + private static String digits(long val, int digits) + { + long hi = 1L << (digits * 4); + return Long.toHexString(hi | (val & (hi - 1))).substring(1); + } + + /** + * 检查是否为time-based版本UUID + */ + private void checkTimeBase() + { + if (version() != 1) + { + throw new UnsupportedOperationException("Not a time-based UUID"); + } + } + + /** + * 获取{@link SecureRandom},类提供加密的强随机数生成器 (RNG) + * + * @return {@link SecureRandom} + */ + public static SecureRandom getSecureRandom() + { + try + { + return SecureRandom.getInstance("SHA1PRNG"); + } + catch (NoSuchAlgorithmException e) + { + throw new UtilException(e); + } + } + + /** + * 获取随机数生成器对象
+ * ThreadLocalRandom是JDK 7之后提供并发产生随机数,能够解决多个线程发生的竞争争夺。 + * + * @return {@link ThreadLocalRandom} + */ + public static ThreadLocalRandom getRandom() + { + return ThreadLocalRandom.current(); + } +} diff --git a/xinda-common/src/main/java/com/xinda/common/utils/wechat/AesException.java b/xinda-common/src/main/java/com/xinda/common/utils/wechat/AesException.java new file mode 100644 index 0000000..e2340e2 --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/utils/wechat/AesException.java @@ -0,0 +1,56 @@ +package com.xinda.common.utils.wechat; + +/** + * 加解密异常类 + */ +public class AesException extends Exception { + public final static int OK = 0; + public final static int ValidateSignatureError = -40001; + public final static int ParseXmlError = -40002; + public final static int ComputeSignatureError = -40003; + public final static int IllegalAesKey = -40004; + public final static int ValidateCorpidError = -40005; + public final static int EncryptAESError = -40006; + public final static int DecryptAESError = -40007; + public final static int IllegalBuffer = -40008; + //public final static int EncodeBase64Error = -40009; +//public final static int DecodeBase64Error = -40010; +//public final static int GenReturnXmlError = -40011; + private int code; + + private static String getMessage(int code) { + switch (code) { + case ValidateSignatureError: + return "签名验证错误"; + case ParseXmlError: + return "xml解析失败"; + case ComputeSignatureError: + return "sha加密生成签名失败"; + case IllegalAesKey: + return "SymmetricKey非法"; + case ValidateCorpidError: + return "corpid校验失败"; + case EncryptAESError: + return "aes加密失败"; + case DecryptAESError: + return "aes解密失败"; + case IllegalBuffer: + return "解密后得到的buffer非法"; +// case EncodeBase64Error: +// return "base64加密错误"; +// case DecodeBase64Error: +// return "base64解密错误"; +// case GenReturnXmlError: +// return "xml生成失败"; + default: + return null; // cannot be + } + } + public int getCode() { + return code; + } + AesException(int code) { + super(getMessage(code)); + this.code = code; + } +} diff --git a/xinda-common/src/main/java/com/xinda/common/utils/wechat/ByteGroup.java b/xinda-common/src/main/java/com/xinda/common/utils/wechat/ByteGroup.java new file mode 100644 index 0000000..e7c2ed8 --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/utils/wechat/ByteGroup.java @@ -0,0 +1,26 @@ +package com.xinda.common.utils.wechat; + +import java.util.ArrayList; + +class ByteGroup { + ArrayList byteContainer = new ArrayList(); + + public byte[] toBytes() { + byte[] bytes = new byte[byteContainer.size()]; + for (int i = 0; i < byteContainer.size(); i++) { + bytes[i] = byteContainer.get(i); + } + return bytes; + } + + public ByteGroup addBytes(byte[] bytes) { + for (byte b : bytes) { + byteContainer.add(b); + } + return this; + } + + public int size() { + return byteContainer.size(); + } +} diff --git a/xinda-common/src/main/java/com/xinda/common/utils/wechat/PKCS7Encoder.java b/xinda-common/src/main/java/com/xinda/common/utils/wechat/PKCS7Encoder.java new file mode 100644 index 0000000..250d872 --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/utils/wechat/PKCS7Encoder.java @@ -0,0 +1,59 @@ +package com.xinda.common.utils.wechat; + +import java.nio.charset.Charset; +import java.util.Arrays; + +/** + * 提供基于PKCS7算法的加解密接口. + */ +class PKCS7Encoder { + static Charset CHARSET = Charset.forName("utf-8"); + static int BLOCK_SIZE = 32; + + /** + * 获得对明文进行补位填充的字节. + * + * @param count 需要进行填充补位操作的明文字节个数 + * @return 补齐用的字节数组 + */ + static byte[] encode(int count) { + // 计算需要填充的位数 + int amountToPad = BLOCK_SIZE - (count % BLOCK_SIZE); + if (amountToPad == 0) { + amountToPad = BLOCK_SIZE; + } + // 获得补位所用的字符 + char padChr = chr(amountToPad); + String tmp = new String(); + for (int index = 0; index < amountToPad; index++) { + tmp += padChr; + } + return tmp.getBytes(CHARSET); + } + + /** + * 删除解密后明文的补位字符 + * + * @param decrypted 解密后的明文 + * @return 删除补位字符后的明文 + */ + static byte[] decode(byte[] decrypted) { + int pad = (int) decrypted[decrypted.length - 1]; + if (pad < 1 || pad > 32) { + pad = 0; + } + return Arrays.copyOfRange(decrypted, 0, decrypted.length - pad); + } + + /** + * 将数字转化成ASCII码对应的字符,用于对明文进行补码 + * + * @param a 需要转化的数字 + * @return 转化得到的字符 + */ + static char chr(int a) { + byte target = (byte) (a & 0xFF); + return (char) target; + } + +} diff --git a/xinda-common/src/main/java/com/xinda/common/utils/wechat/SHA1.java b/xinda-common/src/main/java/com/xinda/common/utils/wechat/SHA1.java new file mode 100644 index 0000000..28e1654 --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/utils/wechat/SHA1.java @@ -0,0 +1,57 @@ +package com.xinda.common.utils.wechat; + +import java.security.MessageDigest; +import java.util.Arrays; +/** + * 对企业微信发送给企业后台的消息加解密示例代码. + * + * @copyright Copyright (c) 1998-2014 Tencent Inc. + */ +/** + * SHA1 class + * + * 计算消息签名接口. + */ +public class SHA1 { + + /** + * 用SHA1算法生成安全签名 + * @param token 票据 + * @param timestamp 时间戳 + * @param nonce 随机字符串 + * @param encrypt 密文 + * @return 安全签名 + * @throws AesException + */ + public static String getSHA1(String token, String timestamp, String nonce, String encrypt) throws AesException + { + try { + String[] array = new String[] { token, timestamp, nonce, encrypt }; + StringBuffer sb = new StringBuffer(); + // 字符串排序 + Arrays.sort(array); + for (int i = 0; i < 4; i++) { + sb.append(array[i]); + } + String str = sb.toString(); + // SHA1签名生成 + MessageDigest md = MessageDigest.getInstance("SHA-1"); + md.update(str.getBytes()); + byte[] digest = md.digest(); + + StringBuffer hexstr = new StringBuffer(); + String shaHex = ""; + for (int i = 0; i < digest.length; i++) { + shaHex = Integer.toHexString(digest[i] & 0xFF); + if (shaHex.length() < 2) { + hexstr.append(0); + } + hexstr.append(shaHex); + } + return hexstr.toString(); + } catch (Exception e) { + e.printStackTrace(); + throw new AesException(AesException.ComputeSignatureError); + } + } +} diff --git a/xinda-common/src/main/java/com/xinda/common/utils/wechat/WXBizMsgCrypt.java b/xinda-common/src/main/java/com/xinda/common/utils/wechat/WXBizMsgCrypt.java new file mode 100644 index 0000000..c2d51d4 --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/utils/wechat/WXBizMsgCrypt.java @@ -0,0 +1,289 @@ +package com.xinda.common.utils.wechat; + +/** + * 对企业微信发送给企业后台的消息加解密示例代码. + * + * @copyright Copyright (c) 1998-2014 Tencent Inc. + */ + +// ------------------------------------------------------------------------ + +/** + * 针对org.apache.commons.codec.binary.Base64, + * 需要导入架包commons-codec-1.9(或commons-codec-1.8等其他版本) + * 官方下载地址:http://commons.apache.org/proper/commons-codec/download_codec.cgi + */ + +import org.apache.commons.codec.binary.Base64; + +import javax.crypto.Cipher; +import javax.crypto.spec.IvParameterSpec; +import javax.crypto.spec.SecretKeySpec; +import java.nio.charset.Charset; +import java.util.Arrays; +import java.util.Random; + +/** + * 提供接收和推送给企业微信消息的加解密接口(UTF8编码的字符串). + *

    + *
  1. 第三方回复加密消息给企业微信
  2. + *
  3. 第三方收到企业微信发送的消息,验证消息的安全性,并对消息进行解密。
  4. + *
+ * 说明:异常java.security.InvalidKeyException:illegal Key Size的解决方案 + *
    + *
  1. 在官方网站下载JCE无限制权限策略文件(JDK7的下载地址: + * http://www.oracle.com/technetwork/java/javase/downloads/jce-7-download-432124.html
  2. + *
  3. 下载后解压,可以看到local_policy.jar和US_export_policy.jar以及readme.txt
  4. + *
  5. 如果安装了JRE,将两个jar文件放到%JRE_HOME%\lib\security目录下覆盖原来的文件
  6. + *
  7. 如果安装了JDK,将两个jar文件放到%JDK_HOME%\jre\lib\security目录下覆盖原来文件
  8. + *
+ */ +public class WXBizMsgCrypt { + static Charset CHARSET = Charset.forName("utf-8"); + Base64 base64 = new Base64(); + byte[] aesKey; + String token; + String receiveid; + + /** + * 构造函数 + * @param token 企业微信后台,开发者设置的token + * @param encodingAesKey 企业微信后台,开发者设置的EncodingAESKey + * @param receiveid, 不同场景含义不同,详见文档 + * + * @throws AesException 执行失败,请查看该异常的错误码和具体的错误信息 + */ + public WXBizMsgCrypt(String token, String encodingAesKey, String receiveid) throws AesException { + if (encodingAesKey.length() != 43) { + throw new AesException(AesException.IllegalAesKey); + } + + this.token = token; + this.receiveid = receiveid; + aesKey = Base64.decodeBase64(encodingAesKey + "="); + } + + // 生成4个字节的网络字节序 + byte[] getNetworkBytesOrder(int sourceNumber) { + byte[] orderBytes = new byte[4]; + orderBytes[3] = (byte) (sourceNumber & 0xFF); + orderBytes[2] = (byte) (sourceNumber >> 8 & 0xFF); + orderBytes[1] = (byte) (sourceNumber >> 16 & 0xFF); + orderBytes[0] = (byte) (sourceNumber >> 24 & 0xFF); + return orderBytes; + } + + // 还原4个字节的网络字节序 + int recoverNetworkBytesOrder(byte[] orderBytes) { + int sourceNumber = 0; + for (int i = 0; i < 4; i++) { + sourceNumber <<= 8; + sourceNumber |= orderBytes[i] & 0xff; + } + return sourceNumber; + } + + // 随机生成16位字符串 + String getRandomStr() { + String base = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"; + Random random = new Random(); + StringBuffer sb = new StringBuffer(); + for (int i = 0; i < 16; i++) { + int number = random.nextInt(base.length()); + sb.append(base.charAt(number)); + } + return sb.toString(); + } + + /** + * 对明文进行加密. + * + * @param text 需要加密的明文 + * @return 加密后base64编码的字符串 + * @throws AesException aes加密失败 + */ + String encrypt(String randomStr, String text) throws AesException { + ByteGroup byteCollector = new ByteGroup(); + byte[] randomStrBytes = randomStr.getBytes(CHARSET); + byte[] textBytes = text.getBytes(CHARSET); + byte[] networkBytesOrder = getNetworkBytesOrder(textBytes.length); + byte[] receiveidBytes = receiveid.getBytes(CHARSET); + + // randomStr + networkBytesOrder + text + receiveid + byteCollector.addBytes(randomStrBytes); + byteCollector.addBytes(networkBytesOrder); + byteCollector.addBytes(textBytes); + byteCollector.addBytes(receiveidBytes); + + // ... + pad: 使用自定义的填充方式对明文进行补位填充 + byte[] padBytes = PKCS7Encoder.encode(byteCollector.size()); + byteCollector.addBytes(padBytes); + + // 获得最终的字节流, 未加密 + byte[] unencrypted = byteCollector.toBytes(); + + try { + // 设置加密模式为AES的CBC模式 + Cipher cipher = Cipher.getInstance("AES/CBC/NoPadding"); + SecretKeySpec keySpec = new SecretKeySpec(aesKey, "AES"); + IvParameterSpec iv = new IvParameterSpec(aesKey, 0, 16); + cipher.init(Cipher.ENCRYPT_MODE, keySpec, iv); + + // 加密 + byte[] encrypted = cipher.doFinal(unencrypted); + + // 使用BASE64对加密后的字符串进行编码 + String base64Encrypted = base64.encodeToString(encrypted); + + return base64Encrypted; + } catch (Exception e) { + e.printStackTrace(); + throw new AesException(AesException.EncryptAESError); + } + } + + /** + * 对密文进行解密. + * + * @param text 需要解密的密文 + * @return 解密得到的明文 + * @throws AesException aes解密失败 + */ + String decrypt(String text) throws AesException { + byte[] original; + try { + // 设置解密模式为AES的CBC模式 + Cipher cipher = Cipher.getInstance("AES/CBC/NoPadding"); + SecretKeySpec key_spec = new SecretKeySpec(aesKey, "AES"); + IvParameterSpec iv = new IvParameterSpec(Arrays.copyOfRange(aesKey, 0, 16)); + cipher.init(Cipher.DECRYPT_MODE, key_spec, iv); + + // 使用BASE64对密文进行解码 + byte[] encrypted = Base64.decodeBase64(text); + + // 解密 + original = cipher.doFinal(encrypted); + } catch (Exception e) { + e.printStackTrace(); + throw new AesException(AesException.DecryptAESError); + } + + String xmlContent, from_receiveid; + try { + // 去除补位字符 + byte[] bytes = PKCS7Encoder.decode(original); + + // 分离16位随机字符串,网络字节序和receiveid + byte[] networkOrder = Arrays.copyOfRange(bytes, 16, 20); + + int xmlLength = recoverNetworkBytesOrder(networkOrder); + + xmlContent = new String(Arrays.copyOfRange(bytes, 20, 20 + xmlLength), CHARSET); + from_receiveid = new String(Arrays.copyOfRange(bytes, 20 + xmlLength, bytes.length), + CHARSET); + } catch (Exception e) { + e.printStackTrace(); + throw new AesException(AesException.IllegalBuffer); + } + + // receiveid不相同的情况 + if (!from_receiveid.equals(receiveid)) { + throw new AesException(AesException.ValidateCorpidError); + } + return xmlContent; + + } + + /** + * 将企业微信回复用户的消息加密打包. + *
    + *
  1. 对要发送的消息进行AES-CBC加密
  2. + *
  3. 生成安全签名
  4. + *
  5. 将消息密文和安全签名打包成xml格式
  6. + *
+ * + * @param replyMsg 企业微信待回复用户的消息,xml格式的字符串 + * @param timeStamp 时间戳,可以自己生成,也可以用URL参数的timestamp + * @param nonce 随机串,可以自己生成,也可以用URL参数的nonce + * + * @return 加密后的可以直接回复用户的密文,包括msg_signature, timestamp, nonce, encrypt的xml格式的字符串 + * @throws AesException 执行失败,请查看该异常的错误码和具体的错误信息 + */ + public String EncryptMsg(String replyMsg, String timeStamp, String nonce) throws AesException { + // 加密 + String encrypt = encrypt(getRandomStr(), replyMsg); + + // 生成安全签名 + if (timeStamp == "") { + timeStamp = Long.toString(System.currentTimeMillis()); + } + + String signature = SHA1.getSHA1(token, timeStamp, nonce, encrypt); + + // System.out.println("发送给平台的签名是: " + signature[1].toString()); + // 生成发送的xml + String result = XMLParse.generate(encrypt, signature, timeStamp, nonce); + return result; + } + + /** + * 检验消息的真实性,并且获取解密后的明文. + *
    + *
  1. 利用收到的密文生成安全签名,进行签名验证
  2. + *
  3. 若验证通过,则提取xml中的加密消息
  4. + *
  5. 对消息进行解密
  6. + *
+ * + * @param msgSignature 签名串,对应URL参数的msg_signature + * @param timeStamp 时间戳,对应URL参数的timestamp + * @param nonce 随机串,对应URL参数的nonce + * @param postData 密文,对应POST请求的数据 + * + * @return 解密后的原文 + * @throws AesException 执行失败,请查看该异常的错误码和具体的错误信息 + */ + public String DecryptMsg(String msgSignature, String timeStamp, String nonce, String postData) + throws AesException { + + // 密钥,公众账号的app secret + // 提取密文 + Object[] encrypt = XMLParse.extract(postData); + + // 验证安全签名 + String signature = SHA1.getSHA1(token, timeStamp, nonce, encrypt[1].toString()); + + // 和URL中的签名比较是否相等 + // System.out.println("第三方收到URL中的签名:" + msg_sign); + // System.out.println("第三方校验签名:" + signature); + if (!signature.equals(msgSignature)) { + throw new AesException(AesException.ValidateSignatureError); + } + + // 解密 + String result = decrypt(encrypt[1].toString()); + return result; + } + + /** + * 验证URL + * @param msgSignature 签名串,对应URL参数的msg_signature + * @param timeStamp 时间戳,对应URL参数的timestamp + * @param nonce 随机串,对应URL参数的nonce + * @param echoStr 随机串,对应URL参数的echostr + * + * @return 解密之后的echostr + * @throws AesException 执行失败,请查看该异常的错误码和具体的错误信息 + */ + public String VerifyURL(String msgSignature, String timeStamp, String nonce, String echoStr) + throws AesException { + String signature = SHA1.getSHA1(token, timeStamp, nonce, echoStr); + + if (!signature.equals(msgSignature)) { + throw new AesException(AesException.ValidateSignatureError); + } + + String result = decrypt(echoStr); + return result; + } + +} diff --git a/xinda-common/src/main/java/com/xinda/common/utils/wechat/WechatUtils.java b/xinda-common/src/main/java/com/xinda/common/utils/wechat/WechatUtils.java new file mode 100644 index 0000000..56ccecf --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/utils/wechat/WechatUtils.java @@ -0,0 +1,125 @@ +package com.xinda.common.utils.wechat; + +import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson2.JSON; +import com.alibaba.fastjson2.JSONObject; +import com.xinda.common.constant.CacheConstants; +import com.xinda.common.constant.XinDaConstant; +import com.xinda.common.core.redis.RedisCache; +import com.xinda.common.utils.StringUtils; +import com.xinda.common.utils.http.HttpUtils; +import com.xinda.common.utils.spring.SpringUtils; +import com.xinda.common.wechat.*; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.time.LocalDateTime; +import java.time.ZoneOffset; +import java.util.HashMap; +import java.util.concurrent.TimeUnit; + +/** + * @author fastb + * @version 1.0 + * @description: 微信相关工具类 + * @date 2024-01-08 17:36 + */ +public class WechatUtils { + + /** + * 网站、移动应用获取微信用户accessToken + * @param code 用户登录code + * @param appId 微信平台appId + * @param secret 微信平台密钥 + * @return WeChatAppResult + */ + public static WeChatAppResult getAccessTokenOpenId(String code, String appId, String secret) { + String url = XinDaConstant.URL.WX_GET_ACCESS_TOKEN_URL_PREFIX + "?appid=" + appId + "&secret=" + secret + "&code=" + code + "&grant_type=authorization_code"; + String s = HttpUtils.sendGet(url); + return JSON.parseObject(s, WeChatAppResult.class); + } + + /** + * 获取微信用户信息 + * @param accessToken 接口调用凭证 + * @param openId 用户唯一标识 + * @return WeChatUserInfo + */ + public static WeChatUserInfo getWeChatUserInfo(String accessToken, String openId) { + String url = XinDaConstant.URL.WX_GET_USER_INFO_URL_PREFIX + "?access_token=" + accessToken + "&openid=" + openId; + String s = HttpUtils.sendGet(url); + return JSON.parseObject(s, WeChatUserInfo.class); + } + + /** + * 小程序获取微信用户登录信息 + * @param code 用户凭证 + * @param appId 微信平台appId + * @param secret 微信平台密钥 + * @return 结果 + */ + public static WeChatMiniProgramResult codeToSession(String code, String appId, String secret) { + String url = XinDaConstant.URL.WX_MINI_PROGRAM_GET_USER_SESSION_URL_PREFIX + "?appid=" + appId + "&secret=" + secret + "&js_code=" + code + "&grant_type=authorization_code"; + String s = HttpUtils.sendGet(url); + return JSON.parseObject(s, WeChatMiniProgramResult.class); + } + + /** + * 小程序获取微信用户手机号 + * @param code 凭证 + * @param accessToken 微信用户token + * @return 手机号信息 + */ + public static WeChatPhoneInfo getWechatUserPhoneInfo(String code, String accessToken) { + String url = XinDaConstant.URL.WX_GET_USER_PHONE_URL_PREFIX + accessToken; + HashMap map = new HashMap<>(); + map.put("code", code); + String s = HttpUtils.sendPost(url, JSONObject.toJSONString(map)); + return JSON.parseObject(s, WeChatPhoneInfo.class); + } + + /** + * 小程序获、公众号取微信accessToken + * @param appId 微信平台appId + * @param secret 微信平台密钥 + * @return WeChatAppResult + */ + public static WeChatAppResult getAccessToken(String appId, String secret) { + // 加个缓存 + WeChatAppResult wechatAppResultRedis = SpringUtils.getBean(RedisCache.class).getCacheObject(CacheConstants.WECHAT_GET_ACCESS_TOKEN_APPID + appId); + if (ObjectUtil.isNotNull(wechatAppResultRedis)) { + return wechatAppResultRedis; + } + String url = XinDaConstant.URL.WX_MINI_PROGRAM_GET_ACCESS_TOKEN_URL_PREFIX + "&appid=" + appId + "&secret=" + secret; + String s = HttpUtils.sendGet(url); + WeChatAppResult weChatAppResult = JSON.parseObject(s, WeChatAppResult.class); + if (ObjectUtil.isNotNull(weChatAppResult) && StringUtils.isNotEmpty(weChatAppResult.getAccessToken())) { + SpringUtils.getBean(RedisCache.class).setCacheObject(CacheConstants.WECHAT_GET_ACCESS_TOKEN_APPID + appId, weChatAppResult, 1, TimeUnit.HOURS); + } + return weChatAppResult; + } + + /** + * 微信公众号获取微信用户信息 + * @param accessToken 接口调用凭证 + * @param openId 用户唯一标识 + * @return WeChatUserInfo + */ + public static WeChatUserInfo getWeChatPublicAccountUserInfo(String accessToken, String openId) { + String url = XinDaConstant.URL.WX_PUBLIC_ACCOUNT_GET_USER_INFO_URL_PREFIX + "?access_token=" + accessToken + "&openid=" + openId + "&lang=zh_CN"; + String s = HttpUtils.sendGet(url); + return JSON.parseObject(s, WeChatUserInfo.class); + } + + public static String responseText(WxCallBackXmlBO wxCallBackXmlBO, String content) { + StringBuilder stringBuilder = new StringBuilder(); + stringBuilder.append(""); + stringBuilder.append(""); + stringBuilder.append(""); + stringBuilder.append("" + (LocalDateTime.now().toInstant(ZoneOffset.of("+8")).toEpochMilli() / 1000) + ""); + stringBuilder.append(""); + stringBuilder.append(""); //替换空格,文本信息内容不能包含有空格 .Replace(" ", string.Empty) + stringBuilder.append(""); + return stringBuilder.toString(); + } +} diff --git a/xinda-common/src/main/java/com/xinda/common/utils/wechat/XMLParse.java b/xinda-common/src/main/java/com/xinda/common/utils/wechat/XMLParse.java new file mode 100644 index 0000000..259108e --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/utils/wechat/XMLParse.java @@ -0,0 +1,103 @@ +package com.xinda.common.utils.wechat; + +/** + * 对企业微信发送给企业后台的消息加解密示例代码. + * + * @copyright Copyright (c) 1998-2014 Tencent Inc. + */ + +// ------------------------------------------------------------------------ + +import org.w3c.dom.Document; +import org.w3c.dom.Element; +import org.w3c.dom.NodeList; +import org.xml.sax.InputSource; + +import javax.xml.parsers.DocumentBuilder; +import javax.xml.parsers.DocumentBuilderFactory; +import java.io.StringReader; + +/** + * XMLParse class + * + * 提供提取消息格式中的密文及生成回复消息格式的接口. + */ +class XMLParse { + + /** + * 提取出xml数据包中的加密消息 + * @param xmltext 待提取的xml字符串 + * @return 提取出的加密消息字符串 + * @throws AesException + */ + public static Object[] extract(String xmltext) throws AesException { + Object[] result = new Object[3]; + try { + DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); + + String FEATURE = null; + // This is the PRIMARY defense. If DTDs (doctypes) are disallowed, almost all XML entity attacks are prevented + // Xerces 2 only - http://xerces.apache.org/xerces2-j/features.html#disallow-doctype-decl + FEATURE = "http://apache.org/xml/features/disallow-doctype-decl"; + dbf.setFeature(FEATURE, true); + + // If you can't completely disable DTDs, then at least do the following: + // Xerces 1 - http://xerces.apache.org/xerces-j/features.html#external-general-entities + // Xerces 2 - http://xerces.apache.org/xerces2-j/features.html#external-general-entities + // JDK7+ - http://xml.org/sax/features/external-general-entities + FEATURE = "http://xml.org/sax/features/external-general-entities"; + dbf.setFeature(FEATURE, false); + + // Xerces 1 - http://xerces.apache.org/xerces-j/features.html#external-parameter-entities + // Xerces 2 - http://xerces.apache.org/xerces2-j/features.html#external-parameter-entities + // JDK7+ - http://xml.org/sax/features/external-parameter-entities + FEATURE = "http://xml.org/sax/features/external-parameter-entities"; + dbf.setFeature(FEATURE, false); + + // Disable external DTDs as well + FEATURE = "http://apache.org/xml/features/nonvalidating/load-external-dtd"; + dbf.setFeature(FEATURE, false); + + // and these as well, per Timothy Morgan's 2014 paper: "XML Schema, DTD, and Entity Attacks" + dbf.setXIncludeAware(false); + dbf.setExpandEntityReferences(false); + + // And, per Timothy Morgan: "If for some reason support for inline DOCTYPEs are a requirement, then + // ensure the entity settings are disabled (as shown above) and beware that SSRF attacks + // (http://cwe.mitre.org/data/definitions/918.html) and denial + // of service attacks (such as billion laughs or decompression bombs via "jar:") are a risk." + + // remaining parser logic + DocumentBuilder db = dbf.newDocumentBuilder(); + StringReader sr = new StringReader(xmltext); + InputSource is = new InputSource(sr); + Document document = db.parse(is); + + Element root = document.getDocumentElement(); + NodeList nodelist1 = root.getElementsByTagName("Encrypt"); + result[0] = 0; + result[1] = nodelist1.item(0).getTextContent(); + return result; + } catch (Exception e) { + e.printStackTrace(); + throw new AesException(AesException.ParseXmlError); + } + } + + /** + * 生成xml消息 + * @param encrypt 加密后的消息密文 + * @param signature 安全签名 + * @param timestamp 时间戳 + * @param nonce 随机字符串 + * @return 生成的xml字符串 + */ + public static String generate(String encrypt, String signature, String timestamp, String nonce) { + + String format = "\n" + "\n" + + "\n" + + "%3$s\n" + "\n" + ""; + return String.format(format, encrypt, signature, timestamp, nonce); + + } +} diff --git a/xinda-common/src/main/java/com/xinda/common/wechat/WeChatAppResult.java b/xinda-common/src/main/java/com/xinda/common/wechat/WeChatAppResult.java new file mode 100644 index 0000000..4b6d332 --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/wechat/WeChatAppResult.java @@ -0,0 +1,72 @@ +package com.xinda.common.wechat; + +import com.alibaba.fastjson2.annotation.JSONField; +import lombok.Data; + +/** + * WeChat 调用api接口获取openid登信息后的返回类 + * @author fastb + * @date 2023-07-31 11:43 + */ +@Data +public class WeChatAppResult { + + /** + * 接口调用凭证 + */ + @JSONField(name = "access_token") + private String accessToken; + + /** + * access_token 接口调用凭证超时时间,单位(秒) + */ + @JSONField(name = "expires_in") + private Long expiresIn; + + /** + * 用户刷新 access_token + */ + @JSONField(name = "refresh_token") + private String refreshToken; + + /** + * 授权用户唯一标识 + */ + @JSONField(name = "openid") + private String openId; + + /** + * 用户授权的作用域(snsapi_userinfo) + */ + @JSONField(name = "scope") + private String scope; + + /** + * 当且仅当该移动应用已获得该用户的 userinfo 授权时,才会出现该字段 + */ + @JSONField(name = "unionid") + private String unionId; + + /** + * 错误码 + */ + @JSONField(name = "errcode") + private Integer errCode; + + /** + * 错误信息 + */ + @JSONField(name = "errmsg") + private String errMsg; + + /** + * 是否绑定手机号 + */ + private Boolean isBind; + + /** + * token 自定义登录状态 + */ + private String token; + +} diff --git a/xinda-common/src/main/java/com/xinda/common/wechat/WeChatLoginBody.java b/xinda-common/src/main/java/com/xinda/common/wechat/WeChatLoginBody.java new file mode 100644 index 0000000..9024851 --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/wechat/WeChatLoginBody.java @@ -0,0 +1,89 @@ +package com.xinda.common.wechat; + +import lombok.Data; +import lombok.experimental.Accessors; + +/** + * 微信端登录参数 + * @author fastb + * @date 2023-07-31 11:32 + */ +@Data +@Accessors(chain = true) +public class WeChatLoginBody { + + /** + * 传入参数:临时登录凭证 + */ + private String code; + + /** + * 临时获取用户手机号凭证 + */ + private String phoneCode; + + /** + * 传入参数 openid + */ + private String openId; + + /** + * 传入参数 session_key + */ + private String sessionKey; + + /** + * 传入参数 unionid + */ + private String unionId; + + /** + * 传入参数: 用户非敏感信息 + */ + private String rawData; + + /** + * 传入参数: 签名 + */ + private String signature; + + /** + * 传入参数: 用户敏感信息 + */ + private String encryptedData; + + /** + * 传入参数: 解密算法的向量 + */ + private String iv; + + /** + * 用户手机号 + */ + private String userPhone; + + /** + * 用户密码 + */ + private String userPwd; + + /** + * 接口调用凭证 + */ + private String accessToken; + + /** + * access_token 接口调用凭证超时时间,单位(秒) + */ + private Long expiresIn; + + /** + * 用户刷新 access_token + */ + private String refreshToken; + + /** + * 用户授权的作用域(snsapi_userinfo) + */ + private String scope; +} diff --git a/xinda-common/src/main/java/com/xinda/common/wechat/WeChatLoginResult.java b/xinda-common/src/main/java/com/xinda/common/wechat/WeChatLoginResult.java new file mode 100644 index 0000000..8c95bd4 --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/wechat/WeChatLoginResult.java @@ -0,0 +1,22 @@ +package com.xinda.common.wechat; + +import lombok.Data; + +/** + * 微信登录返回结果 + * @author fastb + * @date 2023-08-15 16:43 + */ +@Data +public class WeChatLoginResult { + + /** + * 登录成功返回token + */ + private String token; + + /** + * 绑定账号跳转页面 + */ + private String bindId; +} diff --git a/xinda-common/src/main/java/com/xinda/common/wechat/WeChatMiniProgramResult.java b/xinda-common/src/main/java/com/xinda/common/wechat/WeChatMiniProgramResult.java new file mode 100644 index 0000000..e63169c --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/wechat/WeChatMiniProgramResult.java @@ -0,0 +1,42 @@ +package com.xinda.common.wechat; + +import com.alibaba.fastjson2.annotation.JSONField; +import lombok.Data; + +/** + * @author fastb + * @date 2023-08-14 10:07 + */ +@Data +public class WeChatMiniProgramResult { + + /** + * 会话密钥 + */ + @JSONField(name = "session_key") + private String sessionKey; + + /** + * 用户在开放平台的唯一标识符,若当前小程序已绑定到微信开放平台账号下会返回,详见 UnionID 机制说明 + */ + @JSONField(name = "unionid") + private String unionId; + + /** + * 错误信息 + */ + @JSONField(name = "errmsg") + private String errMsg; + + /** + * 用户唯一标识 + */ + @JSONField(name = "openid") + private String openId; + + /** + * 错误码 + */ + @JSONField(name = "errcode") + private String errCode; +} diff --git a/xinda-common/src/main/java/com/xinda/common/wechat/WeChatPhoneInfo.java b/xinda-common/src/main/java/com/xinda/common/wechat/WeChatPhoneInfo.java new file mode 100644 index 0000000..62900bc --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/wechat/WeChatPhoneInfo.java @@ -0,0 +1,41 @@ +package com.xinda.common.wechat; + +import com.alibaba.fastjson2.annotation.JSONField; +import lombok.Data; + +/** + * @author fastb + * @date 2023-08-16 17:48 + */ +@Data +public class WeChatPhoneInfo { + + @JSONField(name = "errcode") + private String errCode; + + @JSONField(name = "errmsg") + private String errmsg; + + @JSONField(name = "phone_info") + private PhoneInfo phoneInfo; + + @Data + public class PhoneInfo { + + private String phoneNumber; + + private String purePhoneNumber; + + private String countryCode; + + private WaterMark watermark; + } + + @Data + class WaterMark { + + private String timestamp; + + private String appid; + } +} diff --git a/xinda-common/src/main/java/com/xinda/common/wechat/WeChatUserInfo.java b/xinda-common/src/main/java/com/xinda/common/wechat/WeChatUserInfo.java new file mode 100644 index 0000000..d63947d --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/wechat/WeChatUserInfo.java @@ -0,0 +1,80 @@ +package com.xinda.common.wechat; + +import com.alibaba.fastjson2.annotation.JSONField; +import lombok.Data; + +/** + * 微信用户信息 + * @author fastb + * @date 2023-07-31 14:56 + */ +@Data +public class WeChatUserInfo { + + /** + * 普通用户的标识,对当前开发者账号唯一 + */ + @JSONField(name = "openid") + private String openId; + + /** + * 普通用户昵称 + */ + @JSONField(name = "nickname") + private String nickname; + + /** + * 普通用户性别,1 为男性,2 为女性 + */ + @JSONField(name = "sex") + private Integer sex; + + /** + * 普通用户个人资料填写的省份 + */ + @JSONField(name = "province") + private String province; + + /** + * 普通用户个人资料填写的城市 + */ + @JSONField(name = "city") + private String city; + + /** + * 国家,如中国为 CN + */ + @JSONField(name = "country") + private String country; + + /** + * 用户头像,最后一个数值代表正方形头像大小(有 0、46、64、96、132 数值可选,0 代表 640*640 正方形头像),用户没有头像时该项为空 + */ + @JSONField(name = "headimgurl") + private String headImgUrl; + + /** + * 用户特权信息,json 数组,如微信沃卡用户为(chinaunicom) + */ + @JSONField(name = "privilege") + private String privilege; + + /** + * 用户统一标识。针对一个微信开放平台账号下的应用,同一用户的 unionid 是唯一的。 + */ + @JSONField(name = "unionid") + private String unionId; + + /** + * 错误码 + */ + @JSONField(name = "errcode") + private Integer errCode; + + /** + * 错误信息 + */ + @JSONField(name = "errmsg") + private String errMsg; + +} diff --git a/xinda-common/src/main/java/com/xinda/common/wechat/WxCallBackXmlBO.java b/xinda-common/src/main/java/com/xinda/common/wechat/WxCallBackXmlBO.java new file mode 100644 index 0000000..bd96bf7 --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/wechat/WxCallBackXmlBO.java @@ -0,0 +1,67 @@ +package com.xinda.common.wechat; + +import com.alibaba.fastjson2.annotation.JSONField; +import lombok.Data; + +/** + * 微信回调的时候入参XML解析节点封装BO + * @author fastb + * @date 2024-03-12 15:24 + * @version 1.0 + */ +@Data +public class WxCallBackXmlBO { + + @JSONField(name = "MsgType") + private String msgType; + + @JSONField(name = "FromUserName") + private String fromUserName; + + @JSONField(name = "ToUserName") + private String toUserName; + + @JSONField(name = "CreateTime") + private String createTime; + + @JSONField(name = "Content") + private String content; + + @JSONField(name = "MsgId") + private String msgId; + + @JSONField(name = "Event") + private String event; + + @JSONField(name = "EventKey") + private String eventKey; + + @JSONField(name = "Ticket") + private String ticket; + + @JSONField(name = "UnionId") + private String unionId; + + @JSONField(name = "Recognition") + private String recognition; + + @JSONField(name = "PicUrl") + private String picUrl; + + @JSONField(name = "SuccessOrderId") + private String successOrderId; + + @JSONField(name = "CardId") + private String cardId; + + @JSONField(name = "UserCardCode") + private String userCardCode; + + @JSONField(name = "LocationX") + private String locationX; + + @JSONField(name = "LocationY") + private String locationY; + + +} diff --git a/xinda-common/src/main/java/com/xinda/common/xss/Xss.java b/xinda-common/src/main/java/com/xinda/common/xss/Xss.java new file mode 100644 index 0000000..0837783 --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/xss/Xss.java @@ -0,0 +1,27 @@ +package com.xinda.common.xss; + +import javax.validation.Constraint; +import javax.validation.Payload; +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +/** + * 自定义xss校验注解 + * + * @author ruoyi + */ +@Retention(RetentionPolicy.RUNTIME) +@Target(value = { ElementType.METHOD, ElementType.FIELD, ElementType.CONSTRUCTOR, ElementType.PARAMETER }) +@Constraint(validatedBy = { XssValidator.class }) +public @interface Xss +{ + String message() + + default "不允许任何脚本运行"; + + Class[] groups() default {}; + + Class[] payload() default {}; +} diff --git a/xinda-common/src/main/java/com/xinda/common/xss/XssValidator.java b/xinda-common/src/main/java/com/xinda/common/xss/XssValidator.java new file mode 100644 index 0000000..3134502 --- /dev/null +++ b/xinda-common/src/main/java/com/xinda/common/xss/XssValidator.java @@ -0,0 +1,34 @@ +package com.xinda.common.xss; + +import com.xinda.common.utils.StringUtils; +import javax.validation.ConstraintValidator; +import javax.validation.ConstraintValidatorContext; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +/** + * 自定义xss校验注解实现 + * + * @author ruoyi + */ +public class XssValidator implements ConstraintValidator +{ + private static final String HTML_PATTERN = "<(\\S*?)[^>]*>.*?|<.*? />"; + + @Override + public boolean isValid(String value, ConstraintValidatorContext constraintValidatorContext) + { + if (StringUtils.isBlank(value)) + { + return true; + } + return !containsHtml(value); + } + + public static boolean containsHtml(String value) + { + Pattern pattern = Pattern.compile(HTML_PATTERN); + Matcher matcher = pattern.matcher(value); + return matcher.matches(); + } +} \ No newline at end of file diff --git a/xinda-framework/pom.xml b/xinda-framework/pom.xml new file mode 100644 index 0000000..7523053 --- /dev/null +++ b/xinda-framework/pom.xml @@ -0,0 +1,109 @@ + + + + xinda + com.xinda + 3.8.5 + + 4.0.0 + + xinda-framework + + + framework框架核心 + + + + + + + org.springframework.boot + spring-boot-starter-web + + + + + org.springframework.boot + spring-boot-starter-aop + + + + + com.xinda + xinda-system-service + + + + + com.alibaba + druid-spring-boot-starter + + + + + pro.fessional + kaptcha + + + javax.servlet-api + javax.servlet + + + + + + + com.github.oshi + oshi-core + + + + + org.redisson + redisson-spring-boot-starter + ${redisson.version} + + + org.redisson + redisson-spring-data-31 + + + + + org.redisson + redisson-spring-data-25 + ${redisson.version} + + + + com.baomidou + lock4j-redisson-spring-boot-starter + ${lock4j.version} + + + redisson-spring-boot-starter + org.redisson + + + + + + + com.github.ben-manes.caffeine + caffeine + + + + com.fasterxml.jackson.datatype + jackson-datatype-jsr310 + + + org.springframework.session + spring-session-data-redis + + + + + diff --git a/xinda-framework/src/main/java/com/xinda/framework/aspectj/DataScopeAspect.java b/xinda-framework/src/main/java/com/xinda/framework/aspectj/DataScopeAspect.java new file mode 100644 index 0000000..7a5628a --- /dev/null +++ b/xinda-framework/src/main/java/com/xinda/framework/aspectj/DataScopeAspect.java @@ -0,0 +1,167 @@ +package com.xinda.framework.aspectj; + +import java.util.ArrayList; +import java.util.List; +import org.aspectj.lang.JoinPoint; +import org.aspectj.lang.annotation.Aspect; +import org.aspectj.lang.annotation.Before; +import org.springframework.stereotype.Component; +import com.xinda.common.annotation.DataScope; +import com.xinda.common.core.domain.BaseEntity; +import com.xinda.common.core.domain.entity.SysRole; +import com.xinda.common.core.domain.entity.SysUser; +import com.xinda.common.core.domain.model.LoginUser; +import com.xinda.common.core.text.Convert; +import com.xinda.common.utils.SecurityUtils; +import com.xinda.common.utils.StringUtils; +import com.xinda.framework.security.context.PermissionContextHolder; + +/** + * 数据过滤处理 + * + * @author ruoyi + */ +@Aspect +@Component +public class DataScopeAspect +{ + /** + * 全部数据权限 + */ + public static final String DATA_SCOPE_ALL = "1"; + + /** + * 自定数据权限 + */ + public static final String DATA_SCOPE_CUSTOM = "2"; + + /** + * 部门数据权限 + */ + public static final String DATA_SCOPE_DEPT = "3"; + + /** + * 部门及以下数据权限 + */ + public static final String DATA_SCOPE_DEPT_AND_CHILD = "4"; + + /** + * 仅本人数据权限 + */ + public static final String DATA_SCOPE_SELF = "5"; + + /** + * 数据权限过滤关键字 + */ + public static final String DATA_SCOPE = "dataScope"; + + @Before("@annotation(controllerDataScope)") + public void doBefore(JoinPoint point, DataScope controllerDataScope) throws Throwable + { + clearDataScope(point); + handleDataScope(point, controllerDataScope); + } + + protected void handleDataScope(final JoinPoint joinPoint, DataScope controllerDataScope) + { + // 获取当前的用户 + LoginUser loginUser = SecurityUtils.getLoginUser(); + if (StringUtils.isNotNull(loginUser)) + { + SysUser currentUser = loginUser.getUser(); + // 如果是超级管理员,则不过滤数据 + if (StringUtils.isNotNull(currentUser) && !currentUser.isAdmin()) + { + String permission = StringUtils.defaultIfEmpty(controllerDataScope.permission(), PermissionContextHolder.getContext()); + dataScopeFilter(joinPoint, currentUser, controllerDataScope.deptAlias(), + controllerDataScope.userAlias(), permission); + } + } + } + + /** + * 数据范围过滤 + * + * @param joinPoint 切点 + * @param user 用户 + * @param deptAlias 部门别名 + * @param userAlias 用户别名 + * @param permission 权限字符 + */ + public static void dataScopeFilter(JoinPoint joinPoint, SysUser user, String deptAlias, String userAlias, String permission) + { + StringBuilder sqlString = new StringBuilder(); + List conditions = new ArrayList(); + + for (SysRole role : user.getRoles()) + { + String dataScope = role.getDataScope(); + if (!DATA_SCOPE_CUSTOM.equals(dataScope) && conditions.contains(dataScope)) + { + continue; + } + if (StringUtils.isNotEmpty(permission) && StringUtils.isNotEmpty(role.getPermissions()) + && !StringUtils.containsAny(role.getPermissions(), Convert.toStrArray(permission))) + { + continue; + } + if (DATA_SCOPE_ALL.equals(dataScope)) + { + sqlString = new StringBuilder(); + break; + } + else if (DATA_SCOPE_CUSTOM.equals(dataScope)) + { + sqlString.append(StringUtils.format( + " OR {}.dept_id IN ( SELECT dept_id FROM sys_role_dept WHERE role_id = {} ) ", deptAlias, + role.getRoleId())); + } + else if (DATA_SCOPE_DEPT.equals(dataScope)) + { + sqlString.append(StringUtils.format(" OR {}.dept_id = {} ", deptAlias, user.getDeptId())); + } + else if (DATA_SCOPE_DEPT_AND_CHILD.equals(dataScope)) + { + sqlString.append(StringUtils.format( + " OR {}.dept_id IN ( SELECT dept_id FROM sys_dept WHERE dept_id = {} or find_in_set( {} , ancestors ) )", + deptAlias, user.getDeptId(), user.getDeptId())); + } + else if (DATA_SCOPE_SELF.equals(dataScope)) + { + if (StringUtils.isNotBlank(userAlias)) + { + sqlString.append(StringUtils.format(" OR {}.user_id = {} ", userAlias, user.getUserId())); + } + else + { + // 数据权限为仅本人且没有userAlias别名不查询任何数据 + sqlString.append(StringUtils.format(" OR {}.dept_id = 0 ", deptAlias)); + } + } + conditions.add(dataScope); + } + + if (StringUtils.isNotBlank(sqlString.toString())) + { + Object params = joinPoint.getArgs()[0]; + if (StringUtils.isNotNull(params) && params instanceof BaseEntity) + { + BaseEntity baseEntity = (BaseEntity) params; + baseEntity.getParams().put(DATA_SCOPE, " AND (" + sqlString.substring(4) + ")"); + } + } + } + + /** + * 拼接权限sql前先清空params.dataScope参数防止注入 + */ + private void clearDataScope(final JoinPoint joinPoint) + { + Object params = joinPoint.getArgs()[0]; + if (StringUtils.isNotNull(params) && params instanceof BaseEntity) + { + BaseEntity baseEntity = (BaseEntity) params; + baseEntity.getParams().put(DATA_SCOPE, ""); + } + } +} diff --git a/xinda-framework/src/main/java/com/xinda/framework/aspectj/DataSourceAspect.java b/xinda-framework/src/main/java/com/xinda/framework/aspectj/DataSourceAspect.java new file mode 100644 index 0000000..7d34b6e --- /dev/null +++ b/xinda-framework/src/main/java/com/xinda/framework/aspectj/DataSourceAspect.java @@ -0,0 +1,72 @@ +package com.xinda.framework.aspectj; + +import java.util.Objects; +import org.aspectj.lang.ProceedingJoinPoint; +import org.aspectj.lang.annotation.Around; +import org.aspectj.lang.annotation.Aspect; +import org.aspectj.lang.annotation.Pointcut; +import org.aspectj.lang.reflect.MethodSignature; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.core.annotation.AnnotationUtils; +import org.springframework.core.annotation.Order; +import org.springframework.stereotype.Component; +import com.xinda.common.annotation.DataSource; +import com.xinda.common.utils.StringUtils; +import com.xinda.framework.datasource.DynamicDataSourceContextHolder; + +/** + * 多数据源处理 + * + * @author ruoyi + */ +@Aspect +@Order(1) +@Component +public class DataSourceAspect +{ + protected Logger logger = LoggerFactory.getLogger(getClass()); + + @Pointcut("@annotation(com.xinda.common.annotation.DataSource)" + + "|| @within(com.xinda.common.annotation.DataSource)") + public void dsPointCut() + { + + } + + @Around("dsPointCut()") + public Object around(ProceedingJoinPoint point) throws Throwable + { + DataSource dataSource = getDataSource(point); + + if (StringUtils.isNotNull(dataSource)) + { + DynamicDataSourceContextHolder.setDataSourceType(dataSource.value().name()); + } + + try + { + return point.proceed(); + } + finally + { + // 销毁数据源 在执行方法之后 + DynamicDataSourceContextHolder.clearDataSourceType(); + } + } + + /** + * 获取需要切换的数据源 + */ + public DataSource getDataSource(ProceedingJoinPoint point) + { + MethodSignature signature = (MethodSignature) point.getSignature(); + DataSource dataSource = AnnotationUtils.findAnnotation(signature.getMethod(), DataSource.class); + if (Objects.nonNull(dataSource)) + { + return dataSource; + } + + return AnnotationUtils.findAnnotation(signature.getDeclaringType(), DataSource.class); + } +} diff --git a/xinda-framework/src/main/java/com/xinda/framework/aspectj/LogAspect.java b/xinda-framework/src/main/java/com/xinda/framework/aspectj/LogAspect.java new file mode 100644 index 0000000..3fd2664 --- /dev/null +++ b/xinda-framework/src/main/java/com/xinda/framework/aspectj/LogAspect.java @@ -0,0 +1,227 @@ +package com.xinda.framework.aspectj; + +import java.util.Collection; +import java.util.Map; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import org.aspectj.lang.JoinPoint; +import org.aspectj.lang.annotation.AfterReturning; +import org.aspectj.lang.annotation.AfterThrowing; +import org.aspectj.lang.annotation.Aspect; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Component; +import org.springframework.validation.BindingResult; +import org.springframework.web.multipart.MultipartFile; +import com.alibaba.fastjson2.JSON; +import com.xinda.common.annotation.Log; +import com.xinda.common.core.domain.model.LoginUser; +import com.xinda.common.enums.BusinessStatus; +import com.xinda.common.enums.HttpMethod; +import com.xinda.common.filter.PropertyPreExcludeFilter; +import com.xinda.common.utils.SecurityUtils; +import com.xinda.common.utils.ServletUtils; +import com.xinda.common.utils.StringUtils; +import com.xinda.common.utils.ip.IpUtils; +import com.xinda.framework.manager.AsyncManager; +import com.xinda.framework.manager.factory.AsyncFactory; +import com.xinda.system.domain.SysOperLog; + +/** + * 操作日志记录处理 + * + * @author ruoyi + */ +@Aspect +@Component +public class LogAspect +{ + private static final Logger log = LoggerFactory.getLogger(LogAspect.class); + + /** 排除敏感属性字段 */ + public static final String[] EXCLUDE_PROPERTIES = { "password", "oldPassword", "newPassword", "confirmPassword" }; + + /** + * 处理完请求后执行 + * + * @param joinPoint 切点 + */ + @AfterReturning(pointcut = "@annotation(controllerLog)", returning = "jsonResult") + public void doAfterReturning(JoinPoint joinPoint, Log controllerLog, Object jsonResult) + { + handleLog(joinPoint, controllerLog, null, jsonResult); + } + + /** + * 拦截异常操作 + * + * @param joinPoint 切点 + * @param e 异常 + */ + @AfterThrowing(value = "@annotation(controllerLog)", throwing = "e") + public void doAfterThrowing(JoinPoint joinPoint, Log controllerLog, Exception e) + { + handleLog(joinPoint, controllerLog, e, null); + } + + protected void handleLog(final JoinPoint joinPoint, Log controllerLog, final Exception e, Object jsonResult) + { + try + { + // 获取当前的用户 + LoginUser loginUser = SecurityUtils.getLoginUser(); + + // *========数据库日志=========*// + SysOperLog operLog = new SysOperLog(); + operLog.setStatus(BusinessStatus.SUCCESS.ordinal()); + // 请求的地址 + String ip = IpUtils.getIpAddr(ServletUtils.getRequest()); + operLog.setOperIp(ip); + operLog.setOperUrl(StringUtils.substring(ServletUtils.getRequest().getRequestURI(), 0, 255)); + if (loginUser != null) + { + operLog.setOperName(loginUser.getUsername()); + } + + if (e != null) + { + operLog.setStatus(BusinessStatus.FAIL.ordinal()); + operLog.setErrorMsg(StringUtils.substring(e.getMessage(), 0, 2000)); + } + // 设置方法名称 + String className = joinPoint.getTarget().getClass().getName(); + String methodName = joinPoint.getSignature().getName(); + operLog.setMethod(className + "." + methodName + "()"); + // 设置请求方式 + operLog.setRequestMethod(ServletUtils.getRequest().getMethod()); + // 处理设置注解上的参数 + getControllerMethodDescription(joinPoint, controllerLog, operLog, jsonResult); + // 保存数据库 + AsyncManager.me().execute(AsyncFactory.recordOper(operLog)); + } + catch (Exception exp) + { + // 记录本地异常日志 + log.error("异常信息:{}", exp.getMessage()); + exp.printStackTrace(); + } + } + + /** + * 获取注解中对方法的描述信息 用于Controller层注解 + * + * @param log 日志 + * @param operLog 操作日志 + * @throws Exception + */ + public void getControllerMethodDescription(JoinPoint joinPoint, Log log, SysOperLog operLog, Object jsonResult) throws Exception + { + // 设置action动作 + operLog.setBusinessType(log.businessType().ordinal()); + // 设置标题 + operLog.setTitle(log.title()); + // 设置操作人类别 + operLog.setOperatorType(log.operatorType().ordinal()); + // 是否需要保存request,参数和值 + if (log.isSaveRequestData()) + { + // 获取参数的信息,传入到数据库中。 + setRequestValue(joinPoint, operLog); + } + // 是否需要保存response,参数和值 + if (log.isSaveResponseData() && StringUtils.isNotNull(jsonResult)) + { + operLog.setJsonResult(StringUtils.substring(JSON.toJSONString(jsonResult), 0, 2000)); + } + } + + /** + * 获取请求的参数,放到log中 + * + * @param operLog 操作日志 + * @throws Exception 异常 + */ + private void setRequestValue(JoinPoint joinPoint, SysOperLog operLog) throws Exception + { + String requestMethod = operLog.getRequestMethod(); + if (HttpMethod.PUT.name().equals(requestMethod) || HttpMethod.POST.name().equals(requestMethod)) + { + String params = argsArrayToString(joinPoint.getArgs()); + operLog.setOperParam(StringUtils.substring(params, 0, 2000)); + } + else + { + Map paramsMap = ServletUtils.getParamMap(ServletUtils.getRequest()); + operLog.setOperParam(StringUtils.substring(JSON.toJSONString(paramsMap, excludePropertyPreFilter()), 0, 2000)); + } + } + + /** + * 参数拼装 + */ + private String argsArrayToString(Object[] paramsArray) + { + String params = ""; + if (paramsArray != null && paramsArray.length > 0) + { + for (Object o : paramsArray) + { + if (StringUtils.isNotNull(o) && !isFilterObject(o)) + { + try + { + String jsonObj = JSON.toJSONString(o, excludePropertyPreFilter()); + params += jsonObj.toString() + " "; + } + catch (Exception e) + { + } + } + } + } + return params.trim(); + } + + /** + * 忽略敏感属性 + */ + public PropertyPreExcludeFilter excludePropertyPreFilter() + { + return new PropertyPreExcludeFilter().addExcludes(EXCLUDE_PROPERTIES); + } + + /** + * 判断是否需要过滤的对象。 + * + * @param o 对象信息。 + * @return 如果是需要过滤的对象,则返回true;否则返回false。 + */ + @SuppressWarnings("rawtypes") + public boolean isFilterObject(final Object o) + { + Class clazz = o.getClass(); + if (clazz.isArray()) + { + return clazz.getComponentType().isAssignableFrom(MultipartFile.class); + } + else if (Collection.class.isAssignableFrom(clazz)) + { + Collection collection = (Collection) o; + for (Object value : collection) + { + return value instanceof MultipartFile; + } + } + else if (Map.class.isAssignableFrom(clazz)) + { + Map map = (Map) o; + for (Object value : map.entrySet()) + { + Map.Entry entry = (Map.Entry) value; + return entry.getValue() instanceof MultipartFile; + } + } + return o instanceof MultipartFile || o instanceof HttpServletRequest || o instanceof HttpServletResponse + || o instanceof BindingResult; + } +} diff --git a/xinda-framework/src/main/java/com/xinda/framework/aspectj/RateLimiterAspect.java b/xinda-framework/src/main/java/com/xinda/framework/aspectj/RateLimiterAspect.java new file mode 100644 index 0000000..2820bf3 --- /dev/null +++ b/xinda-framework/src/main/java/com/xinda/framework/aspectj/RateLimiterAspect.java @@ -0,0 +1,90 @@ +package com.xinda.framework.aspectj; + +import java.lang.reflect.Method; +import java.util.Collections; +import java.util.List; +import org.aspectj.lang.JoinPoint; +import org.aspectj.lang.annotation.Aspect; +import org.aspectj.lang.annotation.Before; +import org.aspectj.lang.reflect.MethodSignature; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.data.redis.core.script.RedisScript; +import org.springframework.stereotype.Component; +import com.xinda.common.annotation.RateLimiter; +import com.xinda.common.enums.LimitType; +import com.xinda.common.exception.ServiceException; +import com.xinda.common.utils.ServletUtils; +import com.xinda.common.utils.StringUtils; +import com.xinda.common.utils.ip.IpUtils; + +/** + * 限流处理 + * + * @author ruoyi + */ +@Aspect +@Component +public class RateLimiterAspect +{ + private static final Logger log = LoggerFactory.getLogger(RateLimiterAspect.class); + + private RedisTemplate redisTemplate; + + private RedisScript limitScript; + + @Autowired + public void setRedisTemplate1(RedisTemplate redisTemplate) + { + this.redisTemplate = redisTemplate; + } + + @Autowired + public void setLimitScript(RedisScript limitScript) + { + this.limitScript = limitScript; + } + + @Before("@annotation(rateLimiter)") + public void doBefore(JoinPoint point, RateLimiter rateLimiter) throws Throwable + { + int time = rateLimiter.time(); + int count = rateLimiter.count(); + + String combineKey = getCombineKey(rateLimiter, point); + List keys = Collections.singletonList(combineKey); + try + { + Long number = redisTemplate.execute(limitScript, keys, count, time); + if (StringUtils.isNull(number) || number.intValue() > count) + { + throw new ServiceException("访问过于频繁,请稍候再试"); + } + log.info("限制请求'{}',当前请求'{}',缓存key'{}'", count, number.intValue(), combineKey); + } + catch (ServiceException e) + { + throw e; + } + catch (Exception e) + { + throw new RuntimeException("服务器限流异常,请稍候再试"); + } + } + + public String getCombineKey(RateLimiter rateLimiter, JoinPoint point) + { + StringBuffer stringBuffer = new StringBuffer(rateLimiter.key()); + if (rateLimiter.limitType() == LimitType.IP) + { + stringBuffer.append(IpUtils.getIpAddr(ServletUtils.getRequest())).append("-"); + } + MethodSignature signature = (MethodSignature) point.getSignature(); + Method method = signature.getMethod(); + Class targetClass = method.getDeclaringClass(); + stringBuffer.append(targetClass.getName()).append("-").append(method.getName()); + return stringBuffer.toString(); + } +} diff --git a/xinda-framework/src/main/java/com/xinda/framework/config/ApplicationConfig.java b/xinda-framework/src/main/java/com/xinda/framework/config/ApplicationConfig.java new file mode 100644 index 0000000..a5a9c54 --- /dev/null +++ b/xinda-framework/src/main/java/com/xinda/framework/config/ApplicationConfig.java @@ -0,0 +1,30 @@ +package com.xinda.framework.config; + +import java.util.TimeZone; +import org.mybatis.spring.annotation.MapperScan; +import org.springframework.boot.autoconfigure.jackson.Jackson2ObjectMapperBuilderCustomizer; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.EnableAspectJAutoProxy; + +/** + * 程序注解配置 + * + * @author ruoyi + */ +@Configuration +// 表示通过aop框架暴露该代理对象,AopContext能够访问 +@EnableAspectJAutoProxy(exposeProxy = true) +// 指定要扫描的Mapper类的包的路径 +@MapperScan("com.xinda.**.mapper") +public class ApplicationConfig +{ + /** + * 时区配置 + */ + @Bean + public Jackson2ObjectMapperBuilderCustomizer jacksonObjectMapperCustomization() + { + return jacksonObjectMapperBuilder -> jacksonObjectMapperBuilder.timeZone(TimeZone.getDefault()); + } +} diff --git a/xinda-framework/src/main/java/com/xinda/framework/config/CacheConfig.java b/xinda-framework/src/main/java/com/xinda/framework/config/CacheConfig.java new file mode 100644 index 0000000..c3f0f71 --- /dev/null +++ b/xinda-framework/src/main/java/com/xinda/framework/config/CacheConfig.java @@ -0,0 +1,45 @@ +package com.xinda.framework.config; + +import com.xinda.framework.manager.SpringCacheManager; +import com.github.benmanes.caffeine.cache.Cache; +import com.github.benmanes.caffeine.cache.Caffeine; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; +import org.springframework.cache.CacheManager; +import org.springframework.cache.annotation.EnableCaching; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +import java.util.concurrent.TimeUnit; + +/** + * 缓存配置 + */ +@Configuration +@EnableCaching +@ConditionalOnProperty(name = "spring.cache.enable", havingValue = "true") +public class CacheConfig { + @Value("${spring.cache.ttl}") + private Long ttl; + + @Bean + public Cache caffeine() { + return Caffeine.newBuilder() + // 设置最后一次写入或访问后经过固定时间过期 + .expireAfterWrite(60, TimeUnit.SECONDS) + // 初始的缓存空间大小 + .initialCapacity(100) + // 缓存的最大条数 + .maximumSize(10000) + .build(); + } + + /** + * 自定义缓存管理器 整合spring-cache + */ + @Bean + public CacheManager cacheManager() { + return new SpringCacheManager(ttl); + } + +} diff --git a/xinda-framework/src/main/java/com/xinda/framework/config/CaptchaConfig.java b/xinda-framework/src/main/java/com/xinda/framework/config/CaptchaConfig.java new file mode 100644 index 0000000..2e9d231 --- /dev/null +++ b/xinda-framework/src/main/java/com/xinda/framework/config/CaptchaConfig.java @@ -0,0 +1,83 @@ +package com.xinda.framework.config; + +import java.util.Properties; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import com.google.code.kaptcha.impl.DefaultKaptcha; +import com.google.code.kaptcha.util.Config; +import static com.google.code.kaptcha.Constants.*; + +/** + * 验证码配置 + * + * @author ruoyi + */ +@Configuration +public class CaptchaConfig +{ + @Bean(name = "captchaProducer") + public DefaultKaptcha getKaptchaBean() + { + DefaultKaptcha defaultKaptcha = new DefaultKaptcha(); + Properties properties = new Properties(); + // 是否有边框 默认为true 我们可以自己设置yes,no + properties.setProperty(KAPTCHA_BORDER, "yes"); + // 验证码文本字符颜色 默认为Color.BLACK + properties.setProperty(KAPTCHA_TEXTPRODUCER_FONT_COLOR, "black"); + // 验证码图片宽度 默认为200 + properties.setProperty(KAPTCHA_IMAGE_WIDTH, "160"); + // 验证码图片高度 默认为50 + properties.setProperty(KAPTCHA_IMAGE_HEIGHT, "60"); + // 验证码文本字符大小 默认为40 + properties.setProperty(KAPTCHA_TEXTPRODUCER_FONT_SIZE, "38"); + // KAPTCHA_SESSION_KEY + properties.setProperty(KAPTCHA_SESSION_CONFIG_KEY, "kaptchaCode"); + // 验证码文本字符长度 默认为5 + properties.setProperty(KAPTCHA_TEXTPRODUCER_CHAR_LENGTH, "4"); + // 验证码文本字体样式 默认为new Font("Arial", 1, fontSize), new Font("Courier", 1, fontSize) + properties.setProperty(KAPTCHA_TEXTPRODUCER_FONT_NAMES, "Arial,Courier"); + // 图片样式 水纹com.google.code.kaptcha.impl.WaterRipple 鱼眼com.google.code.kaptcha.impl.FishEyeGimpy 阴影com.google.code.kaptcha.impl.ShadowGimpy + properties.setProperty(KAPTCHA_OBSCURIFICATOR_IMPL, "com.google.code.kaptcha.impl.ShadowGimpy"); + Config config = new Config(properties); + defaultKaptcha.setConfig(config); + return defaultKaptcha; + } + + @Bean(name = "captchaProducerMath") + public DefaultKaptcha getKaptchaBeanMath() + { + DefaultKaptcha defaultKaptcha = new DefaultKaptcha(); + Properties properties = new Properties(); + // 是否有边框 默认为true 我们可以自己设置yes,no + properties.setProperty(KAPTCHA_BORDER, "yes"); + // 边框颜色 默认为Color.BLACK + properties.setProperty(KAPTCHA_BORDER_COLOR, "105,179,90"); + // 验证码文本字符颜色 默认为Color.BLACK + properties.setProperty(KAPTCHA_TEXTPRODUCER_FONT_COLOR, "blue"); + // 验证码图片宽度 默认为200 + properties.setProperty(KAPTCHA_IMAGE_WIDTH, "160"); + // 验证码图片高度 默认为50 + properties.setProperty(KAPTCHA_IMAGE_HEIGHT, "60"); + // 验证码文本字符大小 默认为40 + properties.setProperty(KAPTCHA_TEXTPRODUCER_FONT_SIZE, "35"); + // KAPTCHA_SESSION_KEY + properties.setProperty(KAPTCHA_SESSION_CONFIG_KEY, "kaptchaCodeMath"); + // 验证码文本生成器 + properties.setProperty(KAPTCHA_TEXTPRODUCER_IMPL, "com.xinda.framework.config.KaptchaTextCreator"); + // 验证码文本字符间距 默认为2 + properties.setProperty(KAPTCHA_TEXTPRODUCER_CHAR_SPACE, "3"); + // 验证码文本字符长度 默认为5 + properties.setProperty(KAPTCHA_TEXTPRODUCER_CHAR_LENGTH, "6"); + // 验证码文本字体样式 默认为new Font("Arial", 1, fontSize), new Font("Courier", 1, fontSize) + properties.setProperty(KAPTCHA_TEXTPRODUCER_FONT_NAMES, "Arial,Courier"); + // 验证码噪点颜色 默认为Color.BLACK + properties.setProperty(KAPTCHA_NOISE_COLOR, "white"); + // 干扰实现类 + properties.setProperty(KAPTCHA_NOISE_IMPL, "com.google.code.kaptcha.impl.NoNoise"); + // 图片样式 水纹com.google.code.kaptcha.impl.WaterRipple 鱼眼com.google.code.kaptcha.impl.FishEyeGimpy 阴影com.google.code.kaptcha.impl.ShadowGimpy + properties.setProperty(KAPTCHA_OBSCURIFICATOR_IMPL, "com.google.code.kaptcha.impl.ShadowGimpy"); + Config config = new Config(properties); + defaultKaptcha.setConfig(config); + return defaultKaptcha; + } +} diff --git a/xinda-framework/src/main/java/com/xinda/framework/config/DruidConfig.java b/xinda-framework/src/main/java/com/xinda/framework/config/DruidConfig.java new file mode 100644 index 0000000..37f4a16 --- /dev/null +++ b/xinda-framework/src/main/java/com/xinda/framework/config/DruidConfig.java @@ -0,0 +1,126 @@ +package com.xinda.framework.config; + +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; +import javax.servlet.Filter; +import javax.servlet.FilterChain; +import javax.servlet.ServletException; +import javax.servlet.ServletRequest; +import javax.servlet.ServletResponse; +import javax.sql.DataSource; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.boot.web.servlet.FilterRegistrationBean; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Primary; +import com.alibaba.druid.pool.DruidDataSource; +import com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceBuilder; +import com.alibaba.druid.spring.boot.autoconfigure.properties.DruidStatProperties; +import com.alibaba.druid.util.Utils; +import com.xinda.common.enums.DataSourceType; +import com.xinda.common.utils.spring.SpringUtils; +import com.xinda.framework.config.properties.DruidProperties; +import com.xinda.framework.datasource.DynamicDataSource; + +/** + * druid 配置多数据源 + * + * @author ruoyi + */ +@Configuration +public class DruidConfig +{ + @Bean + @ConfigurationProperties("spring.datasource.druid.master") + public DataSource masterDataSource(DruidProperties druidProperties) + { + DruidDataSource dataSource = DruidDataSourceBuilder.create().build(); + return druidProperties.dataSource(dataSource); + } + + @Bean + @ConfigurationProperties("spring.datasource.druid.slave") + @ConditionalOnProperty(prefix = "spring.datasource.druid.slave", name = "enabled", havingValue = "true") + public DataSource slaveDataSource(DruidProperties druidProperties) + { + DruidDataSource dataSource = DruidDataSourceBuilder.create().build(); + return druidProperties.dataSource(dataSource); + } + + @Bean(name = "dynamicDataSource") + @Primary + public DynamicDataSource dataSource(DataSource masterDataSource) + { + Map targetDataSources = new HashMap<>(); + targetDataSources.put(DataSourceType.MASTER.name(), masterDataSource); + setDataSource(targetDataSources, DataSourceType.SLAVE.name(), "slaveDataSource"); + return new DynamicDataSource(masterDataSource, targetDataSources); + } + + /** + * 设置数据源 + * + * @param targetDataSources 备选数据源集合 + * @param sourceName 数据源名称 + * @param beanName bean名称 + */ + public void setDataSource(Map targetDataSources, String sourceName, String beanName) + { + try + { + DataSource dataSource = SpringUtils.getBean(beanName); + targetDataSources.put(sourceName, dataSource); + } + catch (Exception e) + { + } + } + + /** + * 去除监控页面底部的广告 + */ + @SuppressWarnings({ "rawtypes", "unchecked" }) + @Bean + @ConditionalOnProperty(name = "spring.datasource.druid.statViewServlet.enabled", havingValue = "true") + public FilterRegistrationBean removeDruidFilterRegistrationBean(DruidStatProperties properties) + { + // 获取web监控页面的参数 + DruidStatProperties.StatViewServlet config = properties.getStatViewServlet(); + // 提取common.js的配置路径 + String pattern = config.getUrlPattern() != null ? config.getUrlPattern() : "/druid/*"; + String commonJsPattern = pattern.replaceAll("\\*", "js/common.js"); + final String filePath = "support/http/resources/js/common.js"; + // 创建filter进行过滤 + Filter filter = new Filter() + { + @Override + public void init(javax.servlet.FilterConfig filterConfig) throws ServletException + { + } + @Override + public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) + throws IOException, ServletException + { + chain.doFilter(request, response); + // 重置缓冲区,响应头不会被重置 + response.resetBuffer(); + // 获取common.js + String text = Utils.readFromResource(filePath); + // 正则替换banner, 除去底部的广告信息 + text = text.replaceAll("
", ""); + text = text.replaceAll("powered.*?shrek.wang", ""); + response.getWriter().write(text); + } + @Override + public void destroy() + { + } + }; + FilterRegistrationBean registrationBean = new FilterRegistrationBean(); + registrationBean.setFilter(filter); + registrationBean.addUrlPatterns(commonJsPattern); + return registrationBean; + } +} diff --git a/xinda-framework/src/main/java/com/xinda/framework/config/FastJson2JsonRedisSerializer.java b/xinda-framework/src/main/java/com/xinda/framework/config/FastJson2JsonRedisSerializer.java new file mode 100644 index 0000000..aaafdba --- /dev/null +++ b/xinda-framework/src/main/java/com/xinda/framework/config/FastJson2JsonRedisSerializer.java @@ -0,0 +1,48 @@ +package com.xinda.framework.config; + +import java.nio.charset.Charset; +import org.springframework.data.redis.serializer.RedisSerializer; +import org.springframework.data.redis.serializer.SerializationException; +import com.alibaba.fastjson2.JSON; +import com.alibaba.fastjson2.JSONReader; +import com.alibaba.fastjson2.JSONWriter; + +/** + * Redis使用FastJson序列化 + * + * @author ruoyi + */ +public class FastJson2JsonRedisSerializer implements RedisSerializer +{ + public static final Charset DEFAULT_CHARSET = Charset.forName("UTF-8"); + + private Class clazz; + + public FastJson2JsonRedisSerializer(Class clazz) + { + super(); + this.clazz = clazz; + } + + @Override + public byte[] serialize(T t) throws SerializationException + { + if (t == null) + { + return new byte[0]; + } + return JSON.toJSONString(t, JSONWriter.Feature.WriteClassName).getBytes(DEFAULT_CHARSET); + } + + @Override + public T deserialize(byte[] bytes) throws SerializationException + { + if (bytes == null || bytes.length <= 0) + { + return null; + } + String str = new String(bytes, DEFAULT_CHARSET); + + return JSON.parseObject(str, clazz, JSONReader.Feature.SupportAutoType); + } +} diff --git a/xinda-framework/src/main/java/com/xinda/framework/config/FilterConfig.java b/xinda-framework/src/main/java/com/xinda/framework/config/FilterConfig.java new file mode 100644 index 0000000..d3140eb --- /dev/null +++ b/xinda-framework/src/main/java/com/xinda/framework/config/FilterConfig.java @@ -0,0 +1,58 @@ +package com.xinda.framework.config; + +import java.util.HashMap; +import java.util.Map; +import javax.servlet.DispatcherType; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; +import org.springframework.boot.web.servlet.FilterRegistrationBean; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import com.xinda.common.filter.RepeatableFilter; +import com.xinda.common.filter.XssFilter; +import com.xinda.common.utils.StringUtils; + +/** + * Filter配置 + * + * @author ruoyi + */ +@Configuration +public class FilterConfig +{ + @Value("${xss.excludes}") + private String excludes; + + @Value("${xss.urlPatterns}") + private String urlPatterns; + + @SuppressWarnings({ "rawtypes", "unchecked" }) + @Bean + @ConditionalOnProperty(value = "xss.enabled", havingValue = "true") + public FilterRegistrationBean xssFilterRegistration() + { + FilterRegistrationBean registration = new FilterRegistrationBean(); + registration.setDispatcherTypes(DispatcherType.REQUEST); + registration.setFilter(new XssFilter()); + registration.addUrlPatterns(StringUtils.split(urlPatterns, ",")); + registration.setName("xssFilter"); + registration.setOrder(FilterRegistrationBean.HIGHEST_PRECEDENCE); + Map initParameters = new HashMap(); + initParameters.put("excludes", excludes); + registration.setInitParameters(initParameters); + return registration; + } + + @SuppressWarnings({ "rawtypes", "unchecked" }) + @Bean + public FilterRegistrationBean someFilterRegistration() + { + FilterRegistrationBean registration = new FilterRegistrationBean(); + registration.setFilter(new RepeatableFilter()); + registration.addUrlPatterns("/*"); + registration.setName("repeatableFilter"); + registration.setOrder(FilterRegistrationBean.LOWEST_PRECEDENCE); + return registration; + } + +} diff --git a/xinda-framework/src/main/java/com/xinda/framework/config/KaptchaTextCreator.java b/xinda-framework/src/main/java/com/xinda/framework/config/KaptchaTextCreator.java new file mode 100644 index 0000000..60704e5 --- /dev/null +++ b/xinda-framework/src/main/java/com/xinda/framework/config/KaptchaTextCreator.java @@ -0,0 +1,68 @@ +package com.xinda.framework.config; + +import java.util.Random; +import com.google.code.kaptcha.text.impl.DefaultTextCreator; + +/** + * 验证码文本生成器 + * + * @author ruoyi + */ +public class KaptchaTextCreator extends DefaultTextCreator +{ + private static final String[] CNUMBERS = "0,1,2,3,4,5,6,7,8,9,10".split(","); + + @Override + public String getText() + { + Integer result = 0; + Random random = new Random(); + int x = random.nextInt(10); + int y = random.nextInt(10); + StringBuilder suChinese = new StringBuilder(); + int randomoperands = random.nextInt(3); + if (randomoperands == 0) + { + result = x * y; + suChinese.append(CNUMBERS[x]); + suChinese.append("*"); + suChinese.append(CNUMBERS[y]); + } + else if (randomoperands == 1) + { + if ((x != 0) && y % x == 0) + { + result = y / x; + suChinese.append(CNUMBERS[y]); + suChinese.append("/"); + suChinese.append(CNUMBERS[x]); + } + else + { + result = x + y; + suChinese.append(CNUMBERS[x]); + suChinese.append("+"); + suChinese.append(CNUMBERS[y]); + } + } + else + { + if (x >= y) + { + result = x - y; + suChinese.append(CNUMBERS[x]); + suChinese.append("-"); + suChinese.append(CNUMBERS[y]); + } + else + { + result = y - x; + suChinese.append(CNUMBERS[y]); + suChinese.append("-"); + suChinese.append(CNUMBERS[x]); + } + } + suChinese.append("=?@" + result); + return suChinese.toString(); + } +} \ No newline at end of file diff --git a/xinda-framework/src/main/java/com/xinda/framework/config/MyBatisConfig.java b/xinda-framework/src/main/java/com/xinda/framework/config/MyBatisConfig.java new file mode 100644 index 0000000..220fc43 --- /dev/null +++ b/xinda-framework/src/main/java/com/xinda/framework/config/MyBatisConfig.java @@ -0,0 +1,177 @@ +package com.xinda.framework.config; + +import com.baomidou.mybatisplus.autoconfigure.SpringBootVFS; +import com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean; +import com.xinda.common.utils.StringUtils; +import org.apache.ibatis.io.VFS; +import org.apache.ibatis.session.SqlSessionFactory; +import org.mybatis.spring.SqlSessionTemplate; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Primary; +import org.springframework.core.env.Environment; +import org.springframework.core.io.DefaultResourceLoader; +import org.springframework.core.io.Resource; +import org.springframework.core.io.support.PathMatchingResourcePatternResolver; +import org.springframework.core.io.support.ResourcePatternResolver; +import org.springframework.core.type.classreading.CachingMetadataReaderFactory; +import org.springframework.core.type.classreading.MetadataReader; +import org.springframework.core.type.classreading.MetadataReaderFactory; +import org.springframework.jdbc.datasource.DataSourceTransactionManager; +import org.springframework.util.ClassUtils; + +import javax.sql.DataSource; +import java.io.IOException; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashSet; +import java.util.List; + +/** + * Mybatis支持*匹配扫描包 + * + * @author ruoyi + */ +@Configuration +public class MyBatisConfig +{ + @Autowired + private Environment env; + + static final String DEFAULT_RESOURCE_PATTERN = "**/*.class"; + + public static String setTypeAliasesPackage(String typeAliasesPackage) + { + ResourcePatternResolver resolver = (ResourcePatternResolver) new PathMatchingResourcePatternResolver(); + MetadataReaderFactory metadataReaderFactory = new CachingMetadataReaderFactory(resolver); + List allResult = new ArrayList(); + try + { + for (String aliasesPackage : typeAliasesPackage.split(",")) + { + List result = new ArrayList(); + aliasesPackage = ResourcePatternResolver.CLASSPATH_ALL_URL_PREFIX + + ClassUtils.convertClassNameToResourcePath(aliasesPackage.trim()) + "/" + DEFAULT_RESOURCE_PATTERN; + Resource[] resources = resolver.getResources(aliasesPackage); + if (resources != null && resources.length > 0) + { + MetadataReader metadataReader = null; + for (Resource resource : resources) + { + if (resource.isReadable()) + { + metadataReader = metadataReaderFactory.getMetadataReader(resource); + try + { + result.add(Class.forName(metadataReader.getClassMetadata().getClassName()).getPackage().getName()); + } + catch (ClassNotFoundException e) + { + e.printStackTrace(); + } + } + } + } + if (result.size() > 0) + { + HashSet hashResult = new HashSet(result); + allResult.addAll(hashResult); + } + } + if (allResult.size() > 0) + { + typeAliasesPackage = String.join(",", (String[]) allResult.toArray(new String[0])); + } + else + { + throw new RuntimeException("mybatis typeAliasesPackage 路径扫描错误,参数typeAliasesPackage:" + typeAliasesPackage + "未找到任何包"); + } + } + catch (IOException e) + { + e.printStackTrace(); + } + return typeAliasesPackage; + } + + public Resource[] resolveMapperLocations(String[] mapperLocations) + { + ResourcePatternResolver resourceResolver = new PathMatchingResourcePatternResolver(); + List resources = new ArrayList(); + if (mapperLocations != null) + { + for (String mapperLocation : mapperLocations) + { + try + { + Resource[] mappers = resourceResolver.getResources(mapperLocation); + resources.addAll(Arrays.asList(mappers)); + } + catch (IOException e) + { + // ignore + } + } + } + return resources.toArray(new Resource[resources.size()]); + } + + /** + * mybatis 配置 + */ +// @Bean(name = "mysqlSessionFactory") +// @Primary +// public SqlSessionFactory sqlSessionFactory(DataSource dataSource) throws Exception +// { +// String typeAliasesPackage = env.getProperty("mybatis.typeAliasesPackage"); +// String mapperLocations = env.getProperty("mybatis.mapperLocations"); +// String configLocation = env.getProperty("mybatis.configLocation"); +// typeAliasesPackage = setTypeAliasesPackage(typeAliasesPackage); +// VFS.addImplClass(SpringBootVFS.class); +// +// final SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean(); +// sessionFactory.setDataSource(dataSource); +// sessionFactory.setTypeAliasesPackage(typeAliasesPackage); +// sessionFactory.setMapperLocations(resolveMapperLocations(StringUtils.split(mapperLocations, ","))); +// sessionFactory.setConfigLocation(new DefaultResourceLoader().getResource(configLocation)); +// return sessionFactory.getObject(); +// } + + /** + * mybatis-plus 配置:把 SqlSessionFactoryBean 换成 MybatisSqlSessionFactoryBean就行 + * @param dataSource 数据源 + * @return + */ + @Bean(name = "mysqlSessionFactory") + @Primary + public SqlSessionFactory sqlSessionFactory(DataSource dataSource) throws Exception + { + String typeAliasesPackage = env.getProperty("mybatis-plus.typeAliasesPackage"); + String mapperLocations = env.getProperty("mybatis-plus.mapperLocations"); + String configLocation = env.getProperty("mybatis-plus.configLocation"); + typeAliasesPackage = setTypeAliasesPackage(typeAliasesPackage); + VFS.addImplClass(SpringBootVFS.class); + + final MybatisSqlSessionFactoryBean sessionFactory = new MybatisSqlSessionFactoryBean(); + sessionFactory.setDataSource(dataSource); + sessionFactory.setTypeAliasesPackage(typeAliasesPackage); + sessionFactory.setMapperLocations(resolveMapperLocations(StringUtils.split(mapperLocations, ","))); + sessionFactory.setConfigLocation(new DefaultResourceLoader().getResource(configLocation)); + return sessionFactory.getObject(); + } + + @Bean(name = "mysqlTransactionManager") + @Primary + public DataSourceTransactionManager mysqlTransactionManager(@Qualifier("dynamicDataSource") DataSource dataSource) { + return new DataSourceTransactionManager(dataSource); + } + + @Bean(name = "mysqlSqlSessionTemplate") + @Primary + public SqlSessionTemplate mysqlSqlSessionTemplate(@Qualifier("mysqlSessionFactory") SqlSessionFactory sqlSessionFactory) { + return new SqlSessionTemplate(sqlSessionFactory); + } + +} diff --git a/xinda-framework/src/main/java/com/xinda/framework/config/RedisConfig.java b/xinda-framework/src/main/java/com/xinda/framework/config/RedisConfig.java new file mode 100644 index 0000000..8eca1d7 --- /dev/null +++ b/xinda-framework/src/main/java/com/xinda/framework/config/RedisConfig.java @@ -0,0 +1,67 @@ +package com.xinda.framework.config; + +import org.springframework.cache.annotation.CachingConfigurerSupport; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.data.redis.connection.RedisConnectionFactory; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.data.redis.core.script.DefaultRedisScript; +import org.springframework.data.redis.serializer.StringRedisSerializer; + +/** + * redis配置 + * + * @author ruoyi + */ +@Configuration +public class RedisConfig extends CachingConfigurerSupport +{ + @Bean + @SuppressWarnings(value = { "unchecked", "rawtypes" }) + public RedisTemplate redisTemplate(RedisConnectionFactory connectionFactory) + { + RedisTemplate template = new RedisTemplate<>(); + template.setConnectionFactory(connectionFactory); + + FastJson2JsonRedisSerializer serializer = new FastJson2JsonRedisSerializer(Object.class); + + // 使用StringRedisSerializer来序列化和反序列化redis的key值 + template.setKeySerializer(new StringRedisSerializer()); + template.setValueSerializer(serializer); + + // Hash的key也采用StringRedisSerializer的序列化方式 + template.setHashKeySerializer(new StringRedisSerializer()); + template.setHashValueSerializer(serializer); + + template.afterPropertiesSet(); + return template; + } + + @Bean + public DefaultRedisScript limitScript() + { + DefaultRedisScript redisScript = new DefaultRedisScript<>(); + redisScript.setScriptText(limitScriptText()); + redisScript.setResultType(Long.class); + return redisScript; + } + + /** + * 限流脚本 + */ + private String limitScriptText() + { + return "local key = KEYS[1]\n" + + "local count = tonumber(ARGV[1])\n" + + "local time = tonumber(ARGV[2])\n" + + "local current = redis.call('get', key);\n" + + "if current and tonumber(current) > count then\n" + + " return tonumber(current);\n" + + "end\n" + + "current = redis.call('incr', key)\n" + + "if tonumber(current) == 1 then\n" + + " redis.call('expire', key, time)\n" + + "end\n" + + "return tonumber(current);"; + } +} diff --git a/xinda-framework/src/main/java/com/xinda/framework/config/RedissonConfig.java b/xinda-framework/src/main/java/com/xinda/framework/config/RedissonConfig.java new file mode 100644 index 0000000..97c1e81 --- /dev/null +++ b/xinda-framework/src/main/java/com/xinda/framework/config/RedissonConfig.java @@ -0,0 +1,93 @@ +package com.xinda.framework.config; + +import cn.hutool.core.util.ObjectUtil; +import com.fasterxml.jackson.annotation.JsonAutoDetect; +import com.fasterxml.jackson.annotation.PropertyAccessor; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.jsontype.impl.LaissezFaireSubTypeValidator; +import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; +import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateTimeDeserializer; +import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer; +import lombok.extern.slf4j.Slf4j; +import com.xinda.framework.config.properties.RedissonProperties; +import org.redisson.client.codec.StringCodec; +import org.redisson.codec.CompositeCodec; +import org.redisson.codec.TypedJsonJacksonCodec; +import org.redisson.spring.starter.RedissonAutoConfigurationCustomizer; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.context.properties.EnableConfigurationProperties; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import com.xinda.framework.handler.KeyPrefixHandler; + + +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.util.TimeZone; + +/** + * redis配置 + */ +@Slf4j +@Configuration +@EnableConfigurationProperties(RedissonProperties.class) +public class RedissonConfig { + + @Autowired + private RedissonProperties redissonProperties; + + @Bean + public RedissonAutoConfigurationCustomizer redissonCustomizer() { + return config -> { + JavaTimeModule javaTimeModule = new JavaTimeModule(); + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); + javaTimeModule.addSerializer(LocalDateTime.class, new LocalDateTimeSerializer(formatter)); + javaTimeModule.addDeserializer(LocalDateTime.class, new LocalDateTimeDeserializer(formatter)); + ObjectMapper om = new ObjectMapper(); + om.registerModule(javaTimeModule); + om.setTimeZone(TimeZone.getDefault()); + om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY); + // 指定序列化输入的类型,类必须是非final修饰的。序列化时将对象全类名一起保存下来 + om.activateDefaultTyping(LaissezFaireSubTypeValidator.instance, ObjectMapper.DefaultTyping.NON_FINAL); + TypedJsonJacksonCodec jsonCodec = new TypedJsonJacksonCodec(Object.class, om); + // 组合序列化 key 使用 String 内容使用通用 json 格式 + CompositeCodec codec = new CompositeCodec(StringCodec.INSTANCE, jsonCodec, jsonCodec); + config.setThreads(redissonProperties.getThreads()) + .setNettyThreads(redissonProperties.getNettyThreads()) + // 缓存 Lua 脚本 减少网络传输(redisson 大部分的功能都是基于 Lua 脚本实现) + .setUseScriptCache(true) + .setCodec(codec); + RedissonProperties.SingleServerConfig singleServerConfig = redissonProperties.getSingleServerConfig(); + if (ObjectUtil.isNotNull(singleServerConfig)) { + // 使用单机模式 + config.useSingleServer() + //设置redis key前缀 + .setNameMapper(new KeyPrefixHandler(redissonProperties.getKeyPrefix())) + .setTimeout(singleServerConfig.getTimeout()) + .setClientName(singleServerConfig.getClientName()) + .setIdleConnectionTimeout(singleServerConfig.getIdleConnectionTimeout()) + .setSubscriptionConnectionPoolSize(singleServerConfig.getSubscriptionConnectionPoolSize()) + .setConnectionMinimumIdleSize(singleServerConfig.getConnectionMinimumIdleSize()) + .setConnectionPoolSize(singleServerConfig.getConnectionPoolSize()); + } + // 集群配置方式 参考下方注释 + RedissonProperties.ClusterServersConfig clusterServersConfig = redissonProperties.getClusterServersConfig(); + if (ObjectUtil.isNotNull(clusterServersConfig)) { + config.useClusterServers() + //设置redis key前缀 + .setNameMapper(new KeyPrefixHandler(redissonProperties.getKeyPrefix())) + .setTimeout(clusterServersConfig.getTimeout()) + .setClientName(clusterServersConfig.getClientName()) + .setIdleConnectionTimeout(clusterServersConfig.getIdleConnectionTimeout()) + .setSubscriptionConnectionPoolSize(clusterServersConfig.getSubscriptionConnectionPoolSize()) + .setMasterConnectionMinimumIdleSize(clusterServersConfig.getMasterConnectionMinimumIdleSize()) + .setMasterConnectionPoolSize(clusterServersConfig.getMasterConnectionPoolSize()) + .setSlaveConnectionMinimumIdleSize(clusterServersConfig.getSlaveConnectionMinimumIdleSize()) + .setSlaveConnectionPoolSize(clusterServersConfig.getSlaveConnectionPoolSize()) + .setReadMode(clusterServersConfig.getReadMode()) + .setSubscriptionMode(clusterServersConfig.getSubscriptionMode()); + } + log.info("初始化 redis 配置"); + }; + } +} diff --git a/xinda-framework/src/main/java/com/xinda/framework/config/ResourcesConfig.java b/xinda-framework/src/main/java/com/xinda/framework/config/ResourcesConfig.java new file mode 100644 index 0000000..c9a7604 --- /dev/null +++ b/xinda-framework/src/main/java/com/xinda/framework/config/ResourcesConfig.java @@ -0,0 +1,82 @@ +package com.xinda.framework.config; + +import java.util.concurrent.TimeUnit; + +import com.xinda.framework.interceptor.LanguageInterceptor; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.http.CacheControl; +import org.springframework.web.cors.CorsConfiguration; +import org.springframework.web.cors.UrlBasedCorsConfigurationSource; +import org.springframework.web.filter.CorsFilter; +import org.springframework.web.servlet.config.annotation.InterceptorRegistry; +import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry; +import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; +import com.xinda.common.config.RuoYiConfig; +import com.xinda.common.constant.Constants; +import com.xinda.framework.interceptor.RepeatSubmitInterceptor; + +import javax.annotation.Resource; + +/** + * 通用配置 + * + * @author ruoyi + */ +@Configuration +public class ResourcesConfig implements WebMvcConfigurer +{ + @Autowired + private RepeatSubmitInterceptor repeatSubmitInterceptor; + @Resource + private LanguageInterceptor languageInterceptor; + + @Override + public void addResourceHandlers(ResourceHandlerRegistry registry) + { + /** 本地文件上传路径 */ + registry.addResourceHandler(Constants.RESOURCE_PREFIX + "/**") + .addResourceLocations("file:" + RuoYiConfig.getProfile() + "/"); + + /** swagger配置 */ + registry.addResourceHandler("/swagger-ui/**") + .addResourceLocations("classpath:/META-INF/resources/webjars/springfox-swagger-ui/") + .setCacheControl(CacheControl.maxAge(5, TimeUnit.HOURS).cachePublic());; + } + + /** + * 自定义拦截规则 + */ + @Override + public void addInterceptors(InterceptorRegistry registry) + { + registry.addInterceptor(repeatSubmitInterceptor).addPathPatterns("/**"); + //这里配置国际化拦截器的白名单 + registry.addInterceptor(languageInterceptor).addPathPatterns("/**").excludePathPatterns("/v2/api-docs", + "/tool/gen/**"); + } + + /** + * 跨域配置 + */ + @Bean + public CorsFilter corsFilter() + { + CorsConfiguration config = new CorsConfiguration(); + config.setAllowCredentials(true); + // 设置访问源地址 + config.addAllowedOriginPattern("*"); + // 设置访问源请求头 + config.addAllowedHeader("*"); + // 设置访问源请求方法 + config.addAllowedMethod("*"); + // 有效期 1800秒 + config.setMaxAge(1800L); + // 添加映射路径,拦截一切请求 + UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(); + source.registerCorsConfiguration("/**", config); + // 返回新的CorsFilter + return new CorsFilter(source); + } +} \ No newline at end of file diff --git a/xinda-framework/src/main/java/com/xinda/framework/config/SecurityConfig.java b/xinda-framework/src/main/java/com/xinda/framework/config/SecurityConfig.java new file mode 100644 index 0000000..f68c3f0 --- /dev/null +++ b/xinda-framework/src/main/java/com/xinda/framework/config/SecurityConfig.java @@ -0,0 +1,174 @@ +package com.xinda.framework.config; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Bean; +import org.springframework.http.HttpMethod; +import org.springframework.security.authentication.AuthenticationManager; +import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder; +import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity; +import org.springframework.security.config.annotation.web.builders.HttpSecurity; +import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; +import org.springframework.security.config.annotation.web.configurers.ExpressionUrlAuthorizationConfigurer; +import org.springframework.security.config.http.SessionCreationPolicy; +import org.springframework.security.core.userdetails.UserDetailsService; +import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; +import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter; +import org.springframework.security.web.authentication.logout.LogoutFilter; +import org.springframework.web.filter.CorsFilter; +import com.xinda.framework.config.properties.PermitAllUrlProperties; +import com.xinda.framework.security.filter.JwtAuthenticationTokenFilter; +import com.xinda.framework.security.handle.AuthenticationEntryPointImpl; +import com.xinda.framework.security.handle.LogoutSuccessHandlerImpl; + +/** + * spring security配置 + * + * @author ruoyi + */ +//@EnableWebSecurity +@EnableGlobalMethodSecurity(prePostEnabled = true, securedEnabled = true) +public class SecurityConfig extends WebSecurityConfigurerAdapter +{ + /** + * 自定义用户认证逻辑 + */ + @Autowired + private UserDetailsService userDetailsService; + + /** + * 认证失败处理类 + */ + @Autowired + private AuthenticationEntryPointImpl unauthorizedHandler; + + /** + * 退出处理类 + */ + @Autowired + private LogoutSuccessHandlerImpl logoutSuccessHandler; + + /** + * token认证过滤器 + */ + @Autowired + private JwtAuthenticationTokenFilter authenticationTokenFilter; + + /** + * 跨域过滤器 + */ + @Autowired + private CorsFilter corsFilter; + + /** + * 允许匿名访问的地址 + */ + @Autowired + private PermitAllUrlProperties permitAllUrl; + + /** + * 解决 无法直接注入 AuthenticationManager + * + * @return + * @throws Exception + */ + @Bean + @Override + public AuthenticationManager authenticationManagerBean() throws Exception + { + return super.authenticationManagerBean(); + } + + /** + * anyRequest | 匹配所有请求路径 + * access | SpringEl表达式结果为true时可以访问 + * anonymous | 匿名可以访问 + * denyAll | 用户不能访问 + * fullyAuthenticated | 用户完全认证可以访问(非remember-me下自动登录) + * hasAnyAuthority | 如果有参数,参数表示权限,则其中任何一个权限可以访问 + * hasAnyRole | 如果有参数,参数表示角色,则其中任何一个角色可以访问 + * hasAuthority | 如果有参数,参数表示权限,则其权限可以访问 + * hasIpAddress | 如果有参数,参数表示IP地址,如果用户IP和参数匹配,则可以访问 + * hasRole | 如果有参数,参数表示角色,则其角色可以访问 + * permitAll | 用户可以任意访问 + * rememberMe | 允许通过remember-me登录的用户访问 + * authenticated | 用户登录后可访问 + */ + @Override + protected void configure(HttpSecurity httpSecurity) throws Exception + { + // 注解标记允许匿名访问的url + ExpressionUrlAuthorizationConfigurer.ExpressionInterceptUrlRegistry registry = httpSecurity.authorizeRequests(); + permitAllUrl.getUrls().forEach(url -> registry.antMatchers(url).permitAll()); + + httpSecurity + // CSRF禁用,因为不使用session + .csrf().disable() + // 禁用HTTP响应标头 + .headers().cacheControl().disable().and() + // 认证失败处理类 + .exceptionHandling().authenticationEntryPoint(unauthorizedHandler).and() + // 基于token,所以不需要session + .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS).and() + // 过滤请求 + .authorizeRequests() + // 对于登录login 注册register 验证码captchaImage 允许匿名访问 + .antMatchers("/login", "/register", "/captchaImage","/iot/tool/register","/iot/tool/ntp","/iot/tool/download", + "/iot/tool/mqtt/auth","/iot/tool/mqtt/authv5","/iot/tool/mqtt/webhook","/iot/tool/mqtt/webhookv5","/auth/**/**", + "/wechat/mobileLogin", "/wechat/miniLogin", "/wechat/wxBind/callback").permitAll() + .antMatchers("/zlmhook/**").permitAll() + .antMatchers("/ruleengine/rulemanager/**").permitAll() + .antMatchers("/goview/sys/login","/goview/project/getData").permitAll() + .antMatchers("/notify/smsLoginCaptcha","/auth/sms/login", "/notify/weComVerifyUrl" + ,"/wechat/publicAccount/callback","/notify/smsRegisterCaptcha").permitAll() + .antMatchers("/app/language/list").permitAll() + // 静态资源,可匿名访问 + .antMatchers(HttpMethod.GET, "/", "/*.html", "/**/*.html", "/**/*.css", "/**/*.js", "/profile/**").permitAll() + .antMatchers("/swagger-ui.html", "/swagger-resources/**", "/webjars/**", "/*/api-docs", "/druid/**").permitAll() + + .antMatchers("/oauth2/**").permitAll() +// // oauth +// .antMatchers("/oauth/css/**","/oauth/fonts/**","/oauth/js/**").permitAll() + // dueros + .antMatchers("/dueros").permitAll() + + // 除上面外的所有请求全部需要鉴权认证 + .anyRequest().authenticated() + +// // oauth +// .and() +// .formLogin() +// .loginPage("/oauth/login") +// .permitAll() +// .and() +// .logout().logoutUrl("/oauth/logout") +// .permitAll() + + .and() + .headers().frameOptions().disable(); + // 添加Logout filter + httpSecurity.logout().logoutUrl("/logout").logoutSuccessHandler(logoutSuccessHandler); + // 添加JWT filter + httpSecurity.addFilterBefore(authenticationTokenFilter, UsernamePasswordAuthenticationFilter.class); + // 添加CORS filter + httpSecurity.addFilterBefore(corsFilter, JwtAuthenticationTokenFilter.class); + httpSecurity.addFilterBefore(corsFilter, LogoutFilter.class); + } + + /** + * 强散列哈希加密实现 + */ + @Bean + public BCryptPasswordEncoder bCryptPasswordEncoder() + { + return new BCryptPasswordEncoder(); + } + + /** + * 身份认证接口 + */ + @Override + protected void configure(AuthenticationManagerBuilder auth) throws Exception + { + auth.userDetailsService(userDetailsService).passwordEncoder(bCryptPasswordEncoder()); + } +} diff --git a/xinda-framework/src/main/java/com/xinda/framework/config/ServerConfig.java b/xinda-framework/src/main/java/com/xinda/framework/config/ServerConfig.java new file mode 100644 index 0000000..41a80bc --- /dev/null +++ b/xinda-framework/src/main/java/com/xinda/framework/config/ServerConfig.java @@ -0,0 +1,32 @@ +package com.xinda.framework.config; + +import javax.servlet.http.HttpServletRequest; +import org.springframework.stereotype.Component; +import com.xinda.common.utils.ServletUtils; + +/** + * 服务相关配置 + * + * @author ruoyi + */ +@Component +public class ServerConfig +{ + /** + * 获取完整的请求路径,包括:域名,端口,上下文访问路径 + * + * @return 服务地址 + */ + public String getUrl() + { + HttpServletRequest request = ServletUtils.getRequest(); + return getDomain(request); + } + + public static String getDomain(HttpServletRequest request) + { + StringBuffer url = request.getRequestURL(); + String contextPath = request.getServletContext().getContextPath(); + return url.delete(url.length() - request.getRequestURI().length(), url.length()).append(contextPath).toString(); + } +} diff --git a/xinda-framework/src/main/java/com/xinda/framework/config/ThreadPoolConfig.java b/xinda-framework/src/main/java/com/xinda/framework/config/ThreadPoolConfig.java new file mode 100644 index 0000000..285abfe --- /dev/null +++ b/xinda-framework/src/main/java/com/xinda/framework/config/ThreadPoolConfig.java @@ -0,0 +1,63 @@ +package com.xinda.framework.config; + +import com.xinda.common.utils.Threads; +import org.apache.commons.lang3.concurrent.BasicThreadFactory; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; +import java.util.concurrent.ScheduledExecutorService; +import java.util.concurrent.ScheduledThreadPoolExecutor; +import java.util.concurrent.ThreadPoolExecutor; + +/** + * 线程池配置 + * + * @author ruoyi + **/ +@Configuration +public class ThreadPoolConfig +{ + // 核心线程池大小 + private int corePoolSize = 50; + + // 最大可创建的线程数 + private int maxPoolSize = 200; + + // 队列最大长度 + private int queueCapacity = 1000; + + // 线程池维护线程所允许的空闲时间 + private int keepAliveSeconds = 300; + + @Bean(name = "threadPoolTaskExecutor") + public ThreadPoolTaskExecutor threadPoolTaskExecutor() + { + ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor(); + executor.setMaxPoolSize(maxPoolSize); + executor.setCorePoolSize(corePoolSize); + executor.setQueueCapacity(queueCapacity); + executor.setKeepAliveSeconds(keepAliveSeconds); + // 线程池对拒绝任务(无线程可用)的处理策略 + executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy()); + return executor; + } + + /** + * 执行周期性或定时任务 + */ + @Bean(name = "scheduledExecutorService") + protected ScheduledExecutorService scheduledExecutorService() + { + return new ScheduledThreadPoolExecutor(corePoolSize, + new BasicThreadFactory.Builder().namingPattern("schedule-pool-%d").daemon(true).build(), + new ThreadPoolExecutor.CallerRunsPolicy()) + { + @Override + protected void afterExecute(Runnable r, Throwable t) + { + super.afterExecute(r, t); + Threads.printException(r, t); + } + }; + } +} diff --git a/xinda-framework/src/main/java/com/xinda/framework/config/properties/DruidProperties.java b/xinda-framework/src/main/java/com/xinda/framework/config/properties/DruidProperties.java new file mode 100644 index 0000000..78a2880 --- /dev/null +++ b/xinda-framework/src/main/java/com/xinda/framework/config/properties/DruidProperties.java @@ -0,0 +1,77 @@ +package com.xinda.framework.config.properties; + +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Configuration; +import com.alibaba.druid.pool.DruidDataSource; + +/** + * druid 配置属性 + * + * @author ruoyi + */ +@Configuration +public class DruidProperties +{ + @Value("${spring.datasource.druid.initialSize}") + private int initialSize; + + @Value("${spring.datasource.druid.minIdle}") + private int minIdle; + + @Value("${spring.datasource.druid.maxActive}") + private int maxActive; + + @Value("${spring.datasource.druid.maxWait}") + private int maxWait; + + @Value("${spring.datasource.druid.timeBetweenEvictionRunsMillis}") + private int timeBetweenEvictionRunsMillis; + + @Value("${spring.datasource.druid.minEvictableIdleTimeMillis}") + private int minEvictableIdleTimeMillis; + + @Value("${spring.datasource.druid.maxEvictableIdleTimeMillis}") + private int maxEvictableIdleTimeMillis; + + @Value("${spring.datasource.druid.validationQuery}") + private String validationQuery; + + @Value("${spring.datasource.druid.testWhileIdle}") + private boolean testWhileIdle; + + @Value("${spring.datasource.druid.testOnBorrow}") + private boolean testOnBorrow; + + @Value("${spring.datasource.druid.testOnReturn}") + private boolean testOnReturn; + + public DruidDataSource dataSource(DruidDataSource datasource) + { + /** 配置初始化大小、最小、最大 */ + datasource.setInitialSize(initialSize); + datasource.setMaxActive(maxActive); + datasource.setMinIdle(minIdle); + + /** 配置获取连接等待超时的时间 */ + datasource.setMaxWait(maxWait); + + /** 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 */ + datasource.setTimeBetweenEvictionRunsMillis(timeBetweenEvictionRunsMillis); + + /** 配置一个连接在池中最小、最大生存的时间,单位是毫秒 */ + datasource.setMinEvictableIdleTimeMillis(minEvictableIdleTimeMillis); + datasource.setMaxEvictableIdleTimeMillis(maxEvictableIdleTimeMillis); + + /** + * 用来检测连接是否有效的sql,要求是一个查询语句,常用select 'x'。如果validationQuery为null,testOnBorrow、testOnReturn、testWhileIdle都不会起作用。 + */ + datasource.setValidationQuery(validationQuery); + /** 建议配置为true,不影响性能,并且保证安全性。申请连接的时候检测,如果空闲时间大于timeBetweenEvictionRunsMillis,执行validationQuery检测连接是否有效。 */ + datasource.setTestWhileIdle(testWhileIdle); + /** 申请连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能。 */ + datasource.setTestOnBorrow(testOnBorrow); + /** 归还连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能。 */ + datasource.setTestOnReturn(testOnReturn); + return datasource; + } +} diff --git a/xinda-framework/src/main/java/com/xinda/framework/config/properties/PermitAllUrlProperties.java b/xinda-framework/src/main/java/com/xinda/framework/config/properties/PermitAllUrlProperties.java new file mode 100644 index 0000000..6d82c46 --- /dev/null +++ b/xinda-framework/src/main/java/com/xinda/framework/config/properties/PermitAllUrlProperties.java @@ -0,0 +1,72 @@ +package com.xinda.framework.config.properties; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.Optional; +import java.util.regex.Pattern; +import org.apache.commons.lang3.RegExUtils; +import org.springframework.beans.BeansException; +import org.springframework.beans.factory.InitializingBean; +import org.springframework.context.ApplicationContext; +import org.springframework.context.ApplicationContextAware; +import org.springframework.context.annotation.Configuration; +import org.springframework.core.annotation.AnnotationUtils; +import org.springframework.web.method.HandlerMethod; +import org.springframework.web.servlet.mvc.method.RequestMappingInfo; +import org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping; +import com.xinda.common.annotation.Anonymous; + +/** + * 设置Anonymous注解允许匿名访问的url + * + * @author ruoyi + */ +@Configuration +public class PermitAllUrlProperties implements InitializingBean, ApplicationContextAware +{ + private static final Pattern PATTERN = Pattern.compile("\\{(.*?)\\}"); + + private ApplicationContext applicationContext; + + private List urls = new ArrayList<>(); + + public String ASTERISK = "*"; + + @Override + public void afterPropertiesSet() + { + RequestMappingHandlerMapping mapping = applicationContext.getBean(RequestMappingHandlerMapping.class); + Map map = mapping.getHandlerMethods(); + + map.keySet().forEach(info -> { + HandlerMethod handlerMethod = map.get(info); + + // 获取方法上边的注解 替代path variable 为 * + Anonymous method = AnnotationUtils.findAnnotation(handlerMethod.getMethod(), Anonymous.class); + Optional.ofNullable(method).ifPresent(anonymous -> info.getPatternsCondition().getPatterns() + .forEach(url -> urls.add(RegExUtils.replaceAll(url, PATTERN, ASTERISK)))); + + // 获取类上边的注解, 替代path variable 为 * + Anonymous controller = AnnotationUtils.findAnnotation(handlerMethod.getBeanType(), Anonymous.class); + Optional.ofNullable(controller).ifPresent(anonymous -> info.getPatternsCondition().getPatterns() + .forEach(url -> urls.add(RegExUtils.replaceAll(url, PATTERN, ASTERISK)))); + }); + } + + @Override + public void setApplicationContext(ApplicationContext context) throws BeansException + { + this.applicationContext = context; + } + + public List getUrls() + { + return urls; + } + + public void setUrls(List urls) + { + this.urls = urls; + } +} diff --git a/xinda-framework/src/main/java/com/xinda/framework/config/properties/RedissonProperties.java b/xinda-framework/src/main/java/com/xinda/framework/config/properties/RedissonProperties.java new file mode 100644 index 0000000..6c9cbf7 --- /dev/null +++ b/xinda-framework/src/main/java/com/xinda/framework/config/properties/RedissonProperties.java @@ -0,0 +1,134 @@ +package com.xinda.framework.config.properties; + +import lombok.Data; +import lombok.NoArgsConstructor; +import org.redisson.config.ReadMode; +import org.redisson.config.SubscriptionMode; +import org.springframework.boot.context.properties.ConfigurationProperties; + +/** + * Redisson 配置属性 + * + */ +@Data +@ConfigurationProperties(prefix = "redisson") +public class RedissonProperties { + + /** + * redis缓存key前缀 + */ + private String keyPrefix; + + /** + * 线程池数量,默认值 = 当前处理核数量 * 2 + */ + private int threads; + + /** + * Netty线程池数量,默认值 = 当前处理核数量 * 2 + */ + private int nettyThreads; + + /** + * 单机服务配置 + */ + private SingleServerConfig singleServerConfig; + + /** + * 集群服务配置 + */ + private ClusterServersConfig clusterServersConfig; + + @Data + @NoArgsConstructor + public static class SingleServerConfig { + + /** + * 客户端名称 + */ + private String clientName; + + /** + * 最小空闲连接数 + */ + private int connectionMinimumIdleSize; + + /** + * 连接池大小 + */ + private int connectionPoolSize; + + /** + * 连接空闲超时,单位:毫秒 + */ + private int idleConnectionTimeout; + + /** + * 命令等待超时,单位:毫秒 + */ + private int timeout; + + /** + * 发布和订阅连接池大小 + */ + private int subscriptionConnectionPoolSize; + + } + + @Data + @NoArgsConstructor + public static class ClusterServersConfig { + + /** + * 客户端名称 + */ + private String clientName; + + /** + * master最小空闲连接数 + */ + private int masterConnectionMinimumIdleSize; + + /** + * master连接池大小 + */ + private int masterConnectionPoolSize; + + /** + * slave最小空闲连接数 + */ + private int slaveConnectionMinimumIdleSize; + + /** + * slave连接池大小 + */ + private int slaveConnectionPoolSize; + + /** + * 连接空闲超时,单位:毫秒 + */ + private int idleConnectionTimeout; + + /** + * 命令等待超时,单位:毫秒 + */ + private int timeout; + + /** + * 发布和订阅连接池大小 + */ + private int subscriptionConnectionPoolSize; + + /** + * 读取模式 + */ + private ReadMode readMode; + + /** + * 订阅模式 + */ + private SubscriptionMode subscriptionMode; + + } + +} diff --git a/xinda-framework/src/main/java/com/xinda/framework/datasource/DynamicDataSource.java b/xinda-framework/src/main/java/com/xinda/framework/datasource/DynamicDataSource.java new file mode 100644 index 0000000..99230f8 --- /dev/null +++ b/xinda-framework/src/main/java/com/xinda/framework/datasource/DynamicDataSource.java @@ -0,0 +1,26 @@ +package com.xinda.framework.datasource; + +import java.util.Map; +import javax.sql.DataSource; +import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource; + +/** + * 动态数据源 + * + * @author ruoyi + */ +public class DynamicDataSource extends AbstractRoutingDataSource +{ + public DynamicDataSource(DataSource defaultTargetDataSource, Map targetDataSources) + { + super.setDefaultTargetDataSource(defaultTargetDataSource); + super.setTargetDataSources(targetDataSources); + super.afterPropertiesSet(); + } + + @Override + protected Object determineCurrentLookupKey() + { + return DynamicDataSourceContextHolder.getDataSourceType(); + } +} \ No newline at end of file diff --git a/xinda-framework/src/main/java/com/xinda/framework/datasource/DynamicDataSourceContextHolder.java b/xinda-framework/src/main/java/com/xinda/framework/datasource/DynamicDataSourceContextHolder.java new file mode 100644 index 0000000..1bfa5aa --- /dev/null +++ b/xinda-framework/src/main/java/com/xinda/framework/datasource/DynamicDataSourceContextHolder.java @@ -0,0 +1,45 @@ +package com.xinda.framework.datasource; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * 数据源切换处理 + * + * @author ruoyi + */ +public class DynamicDataSourceContextHolder +{ + public static final Logger log = LoggerFactory.getLogger(DynamicDataSourceContextHolder.class); + + /** + * 使用ThreadLocal维护变量,ThreadLocal为每个使用该变量的线程提供独立的变量副本, + * 所以每一个线程都可以独立地改变自己的副本,而不会影响其它线程所对应的副本。 + */ + private static final ThreadLocal CONTEXT_HOLDER = new ThreadLocal<>(); + + /** + * 设置数据源的变量 + */ + public static void setDataSourceType(String dsType) + { + log.info("切换到{}数据源", dsType); + CONTEXT_HOLDER.set(dsType); + } + + /** + * 获得数据源的变量 + */ + public static String getDataSourceType() + { + return CONTEXT_HOLDER.get(); + } + + /** + * 清空数据源变量 + */ + public static void clearDataSourceType() + { + CONTEXT_HOLDER.remove(); + } +} diff --git a/xinda-framework/src/main/java/com/xinda/framework/handler/KeyPrefixHandler.java b/xinda-framework/src/main/java/com/xinda/framework/handler/KeyPrefixHandler.java new file mode 100644 index 0000000..b622592 --- /dev/null +++ b/xinda-framework/src/main/java/com/xinda/framework/handler/KeyPrefixHandler.java @@ -0,0 +1,50 @@ +package com.xinda.framework.handler; + +import com.xinda.common.utils.StringUtils; +import org.redisson.api.NameMapper; + +/** + * redis缓存key前缀处理 + * + * @author ye + * @date 2022/7/14 17:44 + * @since 4.3.0 + */ +public class KeyPrefixHandler implements NameMapper { + + private final String keyPrefix; + + public KeyPrefixHandler(String keyPrefix) { + //前缀为空 则返回空前缀 + this.keyPrefix = StringUtils.isBlank(keyPrefix) ? "" : keyPrefix + ":"; + } + + /** + * 增加前缀 + */ + @Override + public String map(String name) { + if (StringUtils.isBlank(name)) { + return null; + } + if (StringUtils.isNotBlank(keyPrefix) && !name.startsWith(keyPrefix)) { + return keyPrefix + name; + } + return name; + } + + /** + * 去除前缀 + */ + @Override + public String unmap(String name) { + if (StringUtils.isBlank(name)) { + return null; + } + if (StringUtils.isNotBlank(keyPrefix) && name.startsWith(keyPrefix)) { + return name.substring(keyPrefix.length()); + } + return name; + } + +} diff --git a/xinda-framework/src/main/java/com/xinda/framework/interceptor/LanguageInterceptor.java b/xinda-framework/src/main/java/com/xinda/framework/interceptor/LanguageInterceptor.java new file mode 100644 index 0000000..54d90c0 --- /dev/null +++ b/xinda-framework/src/main/java/com/xinda/framework/interceptor/LanguageInterceptor.java @@ -0,0 +1,58 @@ +package com.xinda.framework.interceptor; + +import com.xinda.common.utils.SecurityUtils; +import com.xinda.common.utils.StringUtils; +import com.xinda.system.enums.Language; +import lombok.extern.slf4j.Slf4j; +import org.springframework.context.i18n.LocaleContextHolder; +import org.springframework.stereotype.Component; +import org.springframework.web.servlet.HandlerInterceptor; +import org.springframework.web.servlet.ModelAndView; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.util.Locale; + +import static com.xinda.common.constant.Constants.LANGUAGE; + + +/** + * 国际化语言拦截器 + */ +@Component +@Slf4j +public class LanguageInterceptor implements HandlerInterceptor { + + @Override + public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { + String language = request.getHeader(LANGUAGE); + if (StringUtils.isEmpty(language) || language.equals("undefined") + || language.equals("")|| language.equals("null")){ + //针对有些接口没有增加语言字段,先去token获取 + language = SecurityUtils.getLanguage(); + }else if (!language.contains("-")){ + language = Language.matches(language); + } + // 前端传递的language必须是zh-CN格式的,中间的-必须要完整,不能只传递zh或en + Locale locale = new Locale(language.split("-")[0],language.split("-")[1]); + // 这样赋值以后,MessageUtils.message方法就不用修改了 + LocaleContextHolder.setLocale(locale); + return true; + } + + /** + * 请求处理之后进行调用,但是在视图被渲染之前(Controller方法调用之后) + */ + @Override + public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) { + } + + /** + * 在整个请求结束之后被调用,也就是在DispatcherServlet 渲染了对应的视图之后执行(主要是用于进行资源清理工作) + */ + @Override + public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) { + } + + +} diff --git a/xinda-framework/src/main/java/com/xinda/framework/interceptor/RepeatSubmitInterceptor.java b/xinda-framework/src/main/java/com/xinda/framework/interceptor/RepeatSubmitInterceptor.java new file mode 100644 index 0000000..16d0e6e --- /dev/null +++ b/xinda-framework/src/main/java/com/xinda/framework/interceptor/RepeatSubmitInterceptor.java @@ -0,0 +1,55 @@ +package com.xinda.framework.interceptor; + +import java.lang.reflect.Method; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import org.springframework.stereotype.Component; +import org.springframework.web.method.HandlerMethod; +import org.springframework.web.servlet.HandlerInterceptor; +import com.alibaba.fastjson2.JSON; +import com.xinda.common.annotation.RepeatSubmit; +import com.xinda.common.core.domain.AjaxResult; +import com.xinda.common.utils.ServletUtils; + +/** + * 防止重复提交拦截器 + * + * @author ruoyi + */ +@Component +public abstract class RepeatSubmitInterceptor implements HandlerInterceptor +{ + @Override + public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception + { + if (handler instanceof HandlerMethod) + { + HandlerMethod handlerMethod = (HandlerMethod) handler; + Method method = handlerMethod.getMethod(); + RepeatSubmit annotation = method.getAnnotation(RepeatSubmit.class); + if (annotation != null) + { + if (this.isRepeatSubmit(request, annotation)) + { + AjaxResult ajaxResult = AjaxResult.error(annotation.message()); + ServletUtils.renderString(response, JSON.toJSONString(ajaxResult)); + return false; + } + } + return true; + } + else + { + return true; + } + } + + /** + * 验证是否重复提交由子类实现具体的防重复提交的规则 + * + * @param request + * @return + * @throws Exception + */ + public abstract boolean isRepeatSubmit(HttpServletRequest request, RepeatSubmit annotation); +} diff --git a/xinda-framework/src/main/java/com/xinda/framework/interceptor/impl/SameUrlDataInterceptor.java b/xinda-framework/src/main/java/com/xinda/framework/interceptor/impl/SameUrlDataInterceptor.java new file mode 100644 index 0000000..12b69fe --- /dev/null +++ b/xinda-framework/src/main/java/com/xinda/framework/interceptor/impl/SameUrlDataInterceptor.java @@ -0,0 +1,110 @@ +package com.xinda.framework.interceptor.impl; + +import java.util.HashMap; +import java.util.Map; +import java.util.concurrent.TimeUnit; +import javax.servlet.http.HttpServletRequest; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Component; +import com.alibaba.fastjson2.JSON; +import com.xinda.common.annotation.RepeatSubmit; +import com.xinda.common.constant.CacheConstants; +import com.xinda.common.core.redis.RedisCache; +import com.xinda.common.filter.RepeatedlyRequestWrapper; +import com.xinda.common.utils.StringUtils; +import com.xinda.common.utils.http.HttpHelper; +import com.xinda.framework.interceptor.RepeatSubmitInterceptor; + +/** + * 判断请求url和数据是否和上一次相同, + * 如果和上次相同,则是重复提交表单。 有效时间为10秒内。 + * + * @author ruoyi + */ +@Component +public class SameUrlDataInterceptor extends RepeatSubmitInterceptor +{ + public final String REPEAT_PARAMS = "repeatParams"; + + public final String REPEAT_TIME = "repeatTime"; + + // 令牌自定义标识 + @Value("${token.header}") + private String header; + + @Autowired + private RedisCache redisCache; + + @SuppressWarnings("unchecked") + @Override + public boolean isRepeatSubmit(HttpServletRequest request, RepeatSubmit annotation) + { + String nowParams = ""; + if (request instanceof RepeatedlyRequestWrapper) + { + RepeatedlyRequestWrapper repeatedlyRequest = (RepeatedlyRequestWrapper) request; + nowParams = HttpHelper.getBodyString(repeatedlyRequest); + } + + // body参数为空,获取Parameter的数据 + if (StringUtils.isEmpty(nowParams)) + { + nowParams = JSON.toJSONString(request.getParameterMap()); + } + Map nowDataMap = new HashMap(); + nowDataMap.put(REPEAT_PARAMS, nowParams); + nowDataMap.put(REPEAT_TIME, System.currentTimeMillis()); + + // 请求地址(作为存放cache的key值) + String url = request.getRequestURI(); + + // 唯一值(没有消息头则使用请求地址) + String submitKey = StringUtils.trimToEmpty(request.getHeader(header)); + + // 唯一标识(指定key + url + 消息头) + String cacheRepeatKey = CacheConstants.REPEAT_SUBMIT_KEY + url + submitKey; + + Object sessionObj = redisCache.getCacheObject(cacheRepeatKey); + if (sessionObj != null) + { + Map sessionMap = (Map) sessionObj; + if (sessionMap.containsKey(url)) + { + Map preDataMap = (Map) sessionMap.get(url); + if (compareParams(nowDataMap, preDataMap) && compareTime(nowDataMap, preDataMap, annotation.interval())) + { + return true; + } + } + } + Map cacheMap = new HashMap(); + cacheMap.put(url, nowDataMap); + redisCache.setCacheObject(cacheRepeatKey, cacheMap, annotation.interval(), TimeUnit.MILLISECONDS); + return false; + } + + /** + * 判断参数是否相同 + */ + private boolean compareParams(Map nowMap, Map preMap) + { + String nowParams = (String) nowMap.get(REPEAT_PARAMS); + String preParams = (String) preMap.get(REPEAT_PARAMS); + return nowParams.equals(preParams); + } + + /** + * 判断两次间隔时间 + */ + private boolean compareTime(Map nowMap, Map preMap, int interval) + { + long time1 = (Long) nowMap.get(REPEAT_TIME); + long time2 = (Long) preMap.get(REPEAT_TIME); + if ((time1 - time2) < interval) + { + return true; + } + return false; + } +} diff --git a/xinda-framework/src/main/java/com/xinda/framework/manager/AsyncManager.java b/xinda-framework/src/main/java/com/xinda/framework/manager/AsyncManager.java new file mode 100644 index 0000000..51095b6 --- /dev/null +++ b/xinda-framework/src/main/java/com/xinda/framework/manager/AsyncManager.java @@ -0,0 +1,55 @@ +package com.xinda.framework.manager; + +import java.util.TimerTask; +import java.util.concurrent.ScheduledExecutorService; +import java.util.concurrent.TimeUnit; +import com.xinda.common.utils.Threads; +import com.xinda.common.utils.spring.SpringUtils; + +/** + * 异步任务管理器 + * + * @author ruoyi + */ +public class AsyncManager +{ + /** + * 操作延迟10毫秒 + */ + private final int OPERATE_DELAY_TIME = 10; + + /** + * 异步操作任务调度线程池 + */ + private ScheduledExecutorService executor = SpringUtils.getBean("scheduledExecutorService"); + + /** + * 单例模式 + */ + private AsyncManager(){} + + private static AsyncManager me = new AsyncManager(); + + public static AsyncManager me() + { + return me; + } + + /** + * 执行任务 + * + * @param task 任务 + */ + public void execute(TimerTask task) + { + executor.schedule(task, OPERATE_DELAY_TIME, TimeUnit.MILLISECONDS); + } + + /** + * 停止任务线程池 + */ + public void shutdown() + { + Threads.shutdownAndAwaitTermination(executor); + } +} diff --git a/xinda-framework/src/main/java/com/xinda/framework/manager/CaffeineCacheDecorator.java b/xinda-framework/src/main/java/com/xinda/framework/manager/CaffeineCacheDecorator.java new file mode 100644 index 0000000..d435f8b --- /dev/null +++ b/xinda-framework/src/main/java/com/xinda/framework/manager/CaffeineCacheDecorator.java @@ -0,0 +1,88 @@ +package com.xinda.framework.manager; + +import org.springframework.cache.Cache; +import com.xinda.common.utils.spring.SpringUtils; +import java.util.concurrent.Callable; + +/** + * Cache 装饰器模式(用于扩展 Caffeine 一级缓存) + * + */ +public class CaffeineCacheDecorator implements Cache { + + private static final com.github.benmanes.caffeine.cache.Cache + CAFFEINE = SpringUtils.getBean("caffeine"); + + private final Cache cache; + + public CaffeineCacheDecorator(Cache cache) { + this.cache = cache; + } + + @Override + public String getName() { + return cache.getName(); + } + + @Override + public Object getNativeCache() { + return cache.getNativeCache(); + } + + public String getUniqueKey(Object key) { + return cache.getName() + ":" + key; + } + + @Override + public ValueWrapper get(Object key) { + Object o = CAFFEINE.get(getUniqueKey(key), k -> cache.get(key)); + return (ValueWrapper) o; + } + + @SuppressWarnings("unchecked") + public T get(Object key, Class type) { + Object o = CAFFEINE.get(getUniqueKey(key), k -> cache.get(key, type)); + return (T) o; + } + + @Override + public void put(Object key, Object value) { + CAFFEINE.invalidate(getUniqueKey(key)); + cache.put(key, value); + } + + public ValueWrapper putIfAbsent(Object key, Object value) { + CAFFEINE.invalidate(getUniqueKey(key)); + return cache.putIfAbsent(key, value); + } + + @Override + public void evict(Object key) { + evictIfPresent(key); + } + + public boolean evictIfPresent(Object key) { + boolean b = cache.evictIfPresent(key); + if (b) { + CAFFEINE.invalidate(getUniqueKey(key)); + } + return b; + } + + @Override + public void clear() { + cache.clear(); + } + + public boolean invalidate() { + return cache.invalidate(); + } + + @SuppressWarnings("unchecked") + @Override + public T get(Object key, Callable valueLoader) { + Object o = CAFFEINE.get(getUniqueKey(key), k -> cache.get(key, valueLoader)); + return (T) o; + } + +} diff --git a/xinda-framework/src/main/java/com/xinda/framework/manager/ShutdownManager.java b/xinda-framework/src/main/java/com/xinda/framework/manager/ShutdownManager.java new file mode 100644 index 0000000..5e602da --- /dev/null +++ b/xinda-framework/src/main/java/com/xinda/framework/manager/ShutdownManager.java @@ -0,0 +1,39 @@ +package com.xinda.framework.manager; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Component; +import javax.annotation.PreDestroy; + +/** + * 确保应用退出时能关闭后台线程 + * + * @author ruoyi + */ +@Component +public class ShutdownManager +{ + private static final Logger logger = LoggerFactory.getLogger("sys-user"); + + @PreDestroy + public void destroy() + { + shutdownAsyncManager(); + } + + /** + * 停止异步执行任务 + */ + private void shutdownAsyncManager() + { + try + { + logger.info("====关闭后台任务任务线程池===="); + AsyncManager.me().shutdown(); + } + catch (Exception e) + { + logger.error(e.getMessage(), e); + } + } +} diff --git a/xinda-framework/src/main/java/com/xinda/framework/manager/SpringCacheManager.java b/xinda-framework/src/main/java/com/xinda/framework/manager/SpringCacheManager.java new file mode 100644 index 0000000..612c1cc --- /dev/null +++ b/xinda-framework/src/main/java/com/xinda/framework/manager/SpringCacheManager.java @@ -0,0 +1,185 @@ +package com.xinda.framework.manager; +import com.xinda.framework.utils.RedisUtils; +import org.redisson.api.RMap; +import org.redisson.api.RMapCache; +import org.redisson.spring.cache.CacheConfig; +import org.redisson.spring.cache.RedissonCache; +import org.springframework.boot.convert.DurationStyle; +import org.springframework.cache.Cache; +import org.springframework.cache.CacheManager; +import org.springframework.cache.transaction.TransactionAwareCacheDecorator; +import org.springframework.util.StringUtils; + +import java.util.Collection; +import java.util.Collections; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.ConcurrentMap; + +/** + * A {@link CacheManager} implementation + * backed by Redisson instance. + *

+ * 修改 RedissonSpringCacheManager 源码 + * 重写 cacheName 处理方法 支持多参数 + * + * + */ +@SuppressWarnings("unchecked") +public class SpringCacheManager implements CacheManager { + + private boolean dynamic = true; + + private boolean allowNullValues = true; + + private boolean transactionAware = true; + + private Long ttl; + + Map configMap = new ConcurrentHashMap<>(); + ConcurrentMap instanceMap = new ConcurrentHashMap<>(); + + /** + * Creates CacheManager supplied by Redisson instance + */ + public SpringCacheManager() { + } + + public SpringCacheManager(Long ttl) { + this.ttl = ttl; + } + + + /** + * Defines possibility of storing {@code null} values. + *

+ * Default is true + * + * @param allowNullValues stores if true + */ + public void setAllowNullValues(boolean allowNullValues) { + this.allowNullValues = allowNullValues; + } + + /** + * Defines if cache aware of Spring-managed transactions. + * If {@code true} put/evict operations are executed only for successful transaction in after-commit phase. + *

+ * Default is false + * + * @param transactionAware cache is transaction aware if true + */ + public void setTransactionAware(boolean transactionAware) { + this.transactionAware = transactionAware; + } + + /** + * Defines 'fixed' cache names. + * A new cache instance will not be created in dynamic for non-defined names. + *

+ * `null` parameter setups dynamic mode + * + * @param names of caches + */ + public void setCacheNames(Collection names) { + if (names != null) { + for (String name : names) { + getCache(name); + } + dynamic = false; + } else { + dynamic = true; + } + } + + /** + * Set cache config mapped by cache name + * + * @param config object + */ + public void setConfig(Map config) { + this.configMap = (Map) config; + } + + protected CacheConfig createDefaultConfig() { + return new CacheConfig(); + } + + @Override + public Cache getCache(String name) { + // 重写 cacheName 支持多参数 + String[] array = StringUtils.delimitedListToStringArray(name, "#"); + name = array[0]; + + Cache cache = instanceMap.get(name); + if (cache != null) { + return cache; + } + if (!dynamic) { + return cache; + } + + CacheConfig config = configMap.get(name); + if (config == null) { + config = createDefaultConfig(); + configMap.put(name, config); + } + + if (ttl > 0) { + config.setTTL(ttl * 1000); + } + + if (array.length > 1) { + config.setTTL(DurationStyle.detectAndParse(array[1]).toMillis()); + } + if (array.length > 2) { + config.setMaxIdleTime(DurationStyle.detectAndParse(array[2]).toMillis()); + } + if (array.length > 3) { + config.setMaxSize(Integer.parseInt(array[3])); + } + + if (config.getMaxIdleTime() == 0 && config.getTTL() == 0 && config.getMaxSize() == 0) { + return createMap(name, config); + } + + return createMapCache(name, config); + } + + private Cache createMap(String name, CacheConfig config) { + RMap map = RedisUtils.getClient().getMap(name); + + Cache cache = new CaffeineCacheDecorator(new RedissonCache(map, allowNullValues)); + if (transactionAware) { + cache = new TransactionAwareCacheDecorator(cache); + } + Cache oldCache = instanceMap.putIfAbsent(name, cache); + if (oldCache != null) { + cache = oldCache; + } + return cache; + } + + private Cache createMapCache(String name, CacheConfig config) { + RMapCache map = RedisUtils.getClient().getMapCache(name); + + Cache cache = new CaffeineCacheDecorator(new RedissonCache(map, config, allowNullValues)); + if (transactionAware) { + cache = new TransactionAwareCacheDecorator(cache); + } + Cache oldCache = instanceMap.putIfAbsent(name, cache); + if (oldCache != null) { + cache = oldCache; + } else { + map.setMaxSize(config.getMaxSize()); + } + return cache; + } + + @Override + public Collection getCacheNames() { + return Collections.unmodifiableSet(configMap.keySet()); + } + + +} diff --git a/xinda-framework/src/main/java/com/xinda/framework/manager/factory/AsyncFactory.java b/xinda-framework/src/main/java/com/xinda/framework/manager/factory/AsyncFactory.java new file mode 100644 index 0000000..5284437 --- /dev/null +++ b/xinda-framework/src/main/java/com/xinda/framework/manager/factory/AsyncFactory.java @@ -0,0 +1,102 @@ +package com.xinda.framework.manager.factory; + +import java.util.TimerTask; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import com.xinda.common.constant.Constants; +import com.xinda.common.utils.LogUtils; +import com.xinda.common.utils.ServletUtils; +import com.xinda.common.utils.StringUtils; +import com.xinda.common.utils.ip.AddressUtils; +import com.xinda.common.utils.ip.IpUtils; +import com.xinda.common.utils.spring.SpringUtils; +import com.xinda.system.domain.SysLogininfor; +import com.xinda.system.domain.SysOperLog; +import com.xinda.system.service.ISysLogininforService; +import com.xinda.system.service.ISysOperLogService; +import eu.bitwalker.useragentutils.UserAgent; + +/** + * 异步工厂(产生任务用) + * + * @author ruoyi + */ +public class AsyncFactory +{ + private static final Logger sys_user_logger = LoggerFactory.getLogger("sys-user"); + + /** + * 记录登录信息 + * + * @param username 用户名 + * @param status 状态 + * @param message 消息 + * @param args 列表 + * @return 任务task + */ + public static TimerTask recordLogininfor(final String username, final String status, final String message, + final Object... args) + { + final UserAgent userAgent = UserAgent.parseUserAgentString(ServletUtils.getRequest().getHeader("User-Agent")); + final String ip = IpUtils.getIpAddr(ServletUtils.getRequest()); + return new TimerTask() + { + @Override + public void run() + { + String address = AddressUtils.getRealAddressByIP(ip); + StringBuilder s = new StringBuilder(); + s.append(LogUtils.getBlock(ip)); + s.append(address); + s.append(LogUtils.getBlock(username)); + s.append(LogUtils.getBlock(status)); + s.append(LogUtils.getBlock(message)); + // 打印信息到日志 + sys_user_logger.info(s.toString(), args); + // 获取客户端操作系统 + String os = userAgent.getOperatingSystem().getName(); + // 获取客户端浏览器 + String browser = userAgent.getBrowser().getName(); + // 封装对象 + SysLogininfor logininfor = new SysLogininfor(); + logininfor.setUserName(username); + logininfor.setIpaddr(ip); + logininfor.setLoginLocation(address); + logininfor.setBrowser(browser); + logininfor.setOs(os); + logininfor.setMsg(message); + // 日志状态 + if (StringUtils.equalsAny(status, Constants.LOGIN_SUCCESS, Constants.LOGOUT, Constants.REGISTER)) + { + logininfor.setStatus(Constants.SUCCESS); + } + else if (Constants.LOGIN_FAIL.equals(status)) + { + logininfor.setStatus(Constants.FAIL); + } + // 插入数据 + SpringUtils.getBean(ISysLogininforService.class).insertLogininfor(logininfor); + } + }; + } + + /** + * 操作日志记录 + * + * @param operLog 操作日志信息 + * @return 任务task + */ + public static TimerTask recordOper(final SysOperLog operLog) + { + return new TimerTask() + { + @Override + public void run() + { + // 远程查询操作地点 + operLog.setOperLocation(AddressUtils.getRealAddressByIP(operLog.getOperIp())); + SpringUtils.getBean(ISysOperLogService.class).insertOperlog(operLog); + } + }; + } +} diff --git a/xinda-framework/src/main/java/com/xinda/framework/mybatis/LambdaQueryWrapperX.java b/xinda-framework/src/main/java/com/xinda/framework/mybatis/LambdaQueryWrapperX.java new file mode 100644 index 0000000..0f0c1de --- /dev/null +++ b/xinda-framework/src/main/java/com/xinda/framework/mybatis/LambdaQueryWrapperX.java @@ -0,0 +1,136 @@ +package com.xinda.framework.mybatis; + +import cn.hutool.core.util.ArrayUtil; +import cn.hutool.core.util.ObjectUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; +import com.baomidou.mybatisplus.core.toolkit.support.SFunction; +import org.apache.commons.lang3.ArrayUtils; +import org.springframework.util.StringUtils; + +import java.util.Collection; + +/** + * 拓展 MyBatis Plus QueryWrapper 类,主要增加如下功能: + *

+ * 1. 拼接条件的方法,增加 xxxIfPresent 方法,用于判断值不存在的时候,不要拼接到条件中。 + * + * @param 数据类型 + */ +public class LambdaQueryWrapperX extends LambdaQueryWrapper { + + public LambdaQueryWrapperX likeIfPresent(SFunction column, String val) { + if (StringUtils.hasText(val)) { + return (LambdaQueryWrapperX) super.like(column, val); + } + return this; + } + + public LambdaQueryWrapperX inIfPresent(SFunction column, Collection values) { + if (!CollectionUtils.isEmpty(values)) { + return (LambdaQueryWrapperX) super.in(column, values); + } + return this; + } + + public LambdaQueryWrapperX inIfPresent(SFunction column, Object... values) { + if (!ArrayUtil.isEmpty(values)) { + return (LambdaQueryWrapperX) super.in(column, values); + } + return this; + } + + public LambdaQueryWrapperX eqIfPresent(SFunction column, Object val) { + if (ObjectUtil.isNotEmpty(val)) { + return (LambdaQueryWrapperX) super.eq(column, val); + } + return this; + } + + public LambdaQueryWrapperX neIfPresent(SFunction column, Object val) { + if (ObjectUtil.isNotEmpty(val)) { + return (LambdaQueryWrapperX) super.ne(column, val); + } + return this; + } + + public LambdaQueryWrapperX gtIfPresent(SFunction column, Object val) { + if (val != null) { + return (LambdaQueryWrapperX) super.gt(column, val); + } + return this; + } + + public LambdaQueryWrapperX geIfPresent(SFunction column, Object val) { + if (val != null) { + return (LambdaQueryWrapperX) super.ge(column, val); + } + return this; + } + + public LambdaQueryWrapperX ltIfPresent(SFunction column, Object val) { + if (val != null) { + return (LambdaQueryWrapperX) super.lt(column, val); + } + return this; + } + + public LambdaQueryWrapperX leIfPresent(SFunction column, Object val) { + if (val != null) { + return (LambdaQueryWrapperX) super.le(column, val); + } + return this; + } + + public LambdaQueryWrapperX betweenIfPresent(SFunction column, Object val1, Object val2) { + if (val1 != null && val2 != null) { + return (LambdaQueryWrapperX) super.between(column, val1, val2); + } + if (val1 != null) { + return (LambdaQueryWrapperX) ge(column, val1); + } + if (val2 != null) { + return (LambdaQueryWrapperX) le(column, val2); + } + return this; + } + + public LambdaQueryWrapperX betweenIfPresent(SFunction column, Object[] values) { + Object val1 = ArrayUtils.get(values, 0); + Object val2 = ArrayUtils.get(values, 1); + return betweenIfPresent(column, val1, val2); + } + + // ========== 重写父类方法,方便链式调用 ========== + + @Override + public LambdaQueryWrapperX eq(boolean condition, SFunction column, Object val) { + super.eq(condition, column, val); + return this; + } + + @Override + public LambdaQueryWrapperX eq(SFunction column, Object val) { + super.eq(column, val); + return this; + } + + @Override + public LambdaQueryWrapperX orderByDesc(SFunction column) { + super.orderByDesc(true, column); + return this; + } + + @Override + public LambdaQueryWrapperX last(String lastSql) { + super.last(lastSql); + return this; + } + + @Override + public LambdaQueryWrapperX in(SFunction column, Collection coll) { + super.in(column, coll); + return this; + } + +} diff --git a/xinda-framework/src/main/java/com/xinda/framework/mybatis/QueryWrapperX.java b/xinda-framework/src/main/java/com/xinda/framework/mybatis/QueryWrapperX.java new file mode 100644 index 0000000..32f577e --- /dev/null +++ b/xinda-framework/src/main/java/com/xinda/framework/mybatis/QueryWrapperX.java @@ -0,0 +1,140 @@ +package com.xinda.framework.mybatis; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.ArrayUtils; +import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; +import org.springframework.util.StringUtils; + +import java.util.Collection; + +/** + * 拓展 MyBatis Plus QueryWrapper 类,主要增加如下功能: + * + * 1. 拼接条件的方法,增加 xxxIfPresent 方法,用于判断值不存在的时候,不要拼接到条件中。 + * + * @param 数据类型 + */ +public class QueryWrapperX extends QueryWrapper { + + public QueryWrapperX likeIfPresent(String column, String val) { + if (StringUtils.hasText(val)) { + return (QueryWrapperX) super.like(column, val); + } + return this; + } + + public QueryWrapperX inIfPresent(String column, Collection values) { + if (!CollectionUtils.isEmpty(values)) { + return (QueryWrapperX) super.in(column, values); + } + return this; + } + + public QueryWrapperX inIfPresent(String column, Object... values) { + if (!ArrayUtils.isEmpty(values)) { + return (QueryWrapperX) super.in(column, values); + } + return this; + } + + public QueryWrapperX eqIfPresent(String column, Object val) { + if (val != null) { + return (QueryWrapperX) super.eq(column, val); + } + return this; + } + + public QueryWrapperX neIfPresent(String column, Object val) { + if (val != null) { + return (QueryWrapperX) super.ne(column, val); + } + return this; + } + + public QueryWrapperX gtIfPresent(String column, Object val) { + if (val != null) { + return (QueryWrapperX) super.gt(column, val); + } + return this; + } + + public QueryWrapperX geIfPresent(String column, Object val) { + if (val != null) { + return (QueryWrapperX) super.ge(column, val); + } + return this; + } + + public QueryWrapperX ltIfPresent(String column, Object val) { + if (val != null) { + return (QueryWrapperX) super.lt(column, val); + } + return this; + } + + public QueryWrapperX leIfPresent(String column, Object val) { + if (val != null) { + return (QueryWrapperX) super.le(column, val); + } + return this; + } + + public QueryWrapperX betweenIfPresent(String column, Object val1, Object val2) { + if (val1 != null && val2 != null) { + return (QueryWrapperX) super.between(column, val1, val2); + } + if (val1 != null) { + return (QueryWrapperX) ge(column, val1); + } + if (val2 != null) { + return (QueryWrapperX) le(column, val2); + } + return this; + } + + public QueryWrapperX betweenIfPresent(String column, Object[] values) { + if (values!= null && values.length != 0 && values[0] != null && values[1] != null) { + return (QueryWrapperX) super.between(column, values[0], values[1]); + } + if (values!= null && values.length != 0 && values[0] != null) { + return (QueryWrapperX) ge(column, values[0]); + } + if (values!= null && values.length != 0 && values[1] != null) { + return (QueryWrapperX) le(column, values[1]); + } + return this; + } + + // ========== 重写父类方法,方便链式调用 ========== + + @Override + public QueryWrapperX eq(boolean condition, String column, Object val) { + super.eq(condition, column, val); + return this; + } + + @Override + public QueryWrapperX eq(String column, Object val) { + super.eq(column, val); + return this; + } + + @Override + public QueryWrapperX orderByDesc(String column) { + super.orderByDesc(true, column); + return this; + } + + @Override + public QueryWrapperX last(String lastSql) { + super.last(lastSql); + return this; + } + + @Override + public QueryWrapperX in(String column, Collection coll) { + super.in(column, coll); + return this; + } + +} diff --git a/xinda-framework/src/main/java/com/xinda/framework/mybatis/mapper/BaseMapperX.java b/xinda-framework/src/main/java/com/xinda/framework/mybatis/mapper/BaseMapperX.java new file mode 100644 index 0000000..76ef811 --- /dev/null +++ b/xinda-framework/src/main/java/com/xinda/framework/mybatis/mapper/BaseMapperX.java @@ -0,0 +1,112 @@ +package com.xinda.framework.mybatis.mapper; + +import com.baomidou.mybatisplus.core.conditions.Wrapper; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.core.toolkit.support.SFunction; +import com.baomidou.mybatisplus.extension.toolkit.Db; +import com.xinda.common.core.domain.PageParam; +import com.xinda.common.core.domain.PageResult; +import com.xinda.framework.mybatis.utils.MyBatisUtils; +import org.apache.ibatis.annotations.Param; + +import java.util.Collection; +import java.util.List; + +/** + * 在 MyBatis Plus 的 BaseMapper 的基础上拓展,提供更多的能力 + *

+ * 为什么继承 MPJBaseMapper 接口?支持 MyBatis Plus 多表 Join 的能力。 + */ +public interface BaseMapperX extends BaseMapper { + + default PageResult selectPage(PageParam pageParam, @Param("ew") Wrapper queryWrapper) { + // MyBatis Plus 查询 + IPage mpPage = MyBatisUtils.buildPage(pageParam); + selectPage(mpPage, queryWrapper); + // 转换返回 + return new PageResult<>(mpPage.getRecords(), mpPage.getTotal()); + } + + default T selectOne(String field, Object value) { + return selectOne(new QueryWrapper().eq(field, value)); + } + + default T selectOne(SFunction field, Object value) { + return selectOne(new LambdaQueryWrapper().eq(field, value)); + } + + default T selectOne(String field1, Object value1, String field2, Object value2) { + return selectOne(new QueryWrapper().eq(field1, value1).eq(field2, value2)); + } + + default T selectOne(SFunction field1, Object value1, SFunction field2, Object value2) { + return selectOne(new LambdaQueryWrapper().eq(field1, value1).eq(field2, value2)); + } + + default Long selectCount() { + return selectCount(new QueryWrapper()); + } + + default Long selectCount(String field, Object value) { + return selectCount(new QueryWrapper().eq(field, value)); + } + + default Long selectCount(SFunction field, Object value) { + return selectCount(new LambdaQueryWrapper().eq(field, value)); + } + + default List selectList() { + return selectList(new QueryWrapper<>()); + } + + default List selectList(String field, Object value) { + return selectList(new QueryWrapper().eq(field, value)); + } + + default List selectList(SFunction field, Object value) { + return selectList(new LambdaQueryWrapper().eq(field, value)); + } + + default List selectList(String field, Collection values) { + return selectList(new QueryWrapper().in(field, values)); + } + + default List selectList(SFunction field, Collection values) { + return selectList(new LambdaQueryWrapper().in(field, values)); + } + + default List selectList(SFunction leField, SFunction geField, Object value) { + return selectList(new LambdaQueryWrapper().le(leField, value).ge(geField, value)); + } + + /** + * 批量插入,适合大量数据插入 + * + * @param entities 实体们 + */ + default void insertBatch(Collection entities) { + Db.saveBatch(entities); + } + + /** + * 批量插入,适合大量数据插入 + * + * @param entities 实体们 + * @param size 插入数量 Db.saveBatch 默认为 1000 + */ + default void insertBatch(Collection entities, int size) { + Db.saveBatch(entities, size); + } + + default void updateBatch(T update) { + update(update, new QueryWrapper<>()); + } + + default void updateBatch(Collection entities, int size) { + Db.updateBatchById(entities, size); + } + +} diff --git a/xinda-framework/src/main/java/com/xinda/framework/mybatis/utils/MyBatisUtils.java b/xinda-framework/src/main/java/com/xinda/framework/mybatis/utils/MyBatisUtils.java new file mode 100644 index 0000000..8aecff5 --- /dev/null +++ b/xinda-framework/src/main/java/com/xinda/framework/mybatis/utils/MyBatisUtils.java @@ -0,0 +1,88 @@ +package com.xinda.framework.mybatis.utils; + +import cn.hutool.core.collection.CollectionUtil; +import com.baomidou.mybatisplus.core.metadata.OrderItem; +import com.baomidou.mybatisplus.core.toolkit.StringPool; +import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor; +import com.baomidou.mybatisplus.extension.plugins.inner.InnerInterceptor; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.xinda.common.core.domain.PageParam; +import com.xinda.common.core.domain.SortingField; +import net.sf.jsqlparser.expression.Alias; +import net.sf.jsqlparser.schema.Column; +import net.sf.jsqlparser.schema.Table; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; +import java.util.stream.Collectors; + +/** + * MyBatis 工具类 + */ +public class MyBatisUtils { + + private static final String MYSQL_ESCAPE_CHARACTER = "`"; + + public static Page buildPage(PageParam pageParam) { + return buildPage(pageParam, null); + } + + public static Page buildPage(PageParam pageParam, Collection sortingFields) { + // 页码 + 数量 + Page page = new Page<>(pageParam.getPageNo(), pageParam.getPageSize()); + // 排序字段 + if (!CollectionUtil.isEmpty(sortingFields)) { + page.addOrder(sortingFields.stream().map(sortingField -> SortingField.ORDER_ASC.equals(sortingField.getOrder()) ? + OrderItem.asc(sortingField.getField()) : OrderItem.desc(sortingField.getField())) + .collect(Collectors.toList())); + } + return page; + } + + /** + * 将拦截器添加到链中 + * 由于 MybatisPlusInterceptor 不支持添加拦截器,所以只能全量设置 + * + * @param interceptor 链 + * @param inner 拦截器 + * @param index 位置 + */ + public static void addInterceptor(MybatisPlusInterceptor interceptor, InnerInterceptor inner, int index) { + List inners = new ArrayList<>(interceptor.getInterceptors()); + inners.add(index, inner); + interceptor.setInterceptors(inners); + } + + /** + * 获得 Table 对应的表名 + * + * 兼容 MySQL 转义表名 `t_xxx` + * + * @param table 表 + * @return 去除转移字符后的表名 + */ + public static String getTableName(Table table) { + String tableName = table.getName(); + if (tableName.startsWith(MYSQL_ESCAPE_CHARACTER) && tableName.endsWith(MYSQL_ESCAPE_CHARACTER)) { + tableName = tableName.substring(1, tableName.length() - 1); + } + return tableName; + } + + /** + * 构建 Column 对象 + * + * @param tableName 表名 + * @param tableAlias 别名 + * @param column 字段名 + * @return Column 对象 + */ + public static Column buildColumn(String tableName, Alias tableAlias, String column) { + if (tableAlias != null) { + tableName = tableAlias.getName(); + } + return new Column(tableName + StringPool.DOT + column); + } + +} diff --git a/xinda-framework/src/main/java/com/xinda/framework/security/context/AuthenticationContextHolder.java b/xinda-framework/src/main/java/com/xinda/framework/security/context/AuthenticationContextHolder.java new file mode 100644 index 0000000..aeafba1 --- /dev/null +++ b/xinda-framework/src/main/java/com/xinda/framework/security/context/AuthenticationContextHolder.java @@ -0,0 +1,28 @@ +package com.xinda.framework.security.context; + +import org.springframework.security.core.Authentication; + +/** + * 身份验证信息 + * + * @author ruoyi + */ +public class AuthenticationContextHolder +{ + private static final ThreadLocal contextHolder = new ThreadLocal<>(); + + public static Authentication getContext() + { + return contextHolder.get(); + } + + public static void setContext(Authentication context) + { + contextHolder.set(context); + } + + public static void clearContext() + { + contextHolder.remove(); + } +} diff --git a/xinda-framework/src/main/java/com/xinda/framework/security/context/PermissionContextHolder.java b/xinda-framework/src/main/java/com/xinda/framework/security/context/PermissionContextHolder.java new file mode 100644 index 0000000..11b656d --- /dev/null +++ b/xinda-framework/src/main/java/com/xinda/framework/security/context/PermissionContextHolder.java @@ -0,0 +1,27 @@ +package com.xinda.framework.security.context; + +import org.springframework.web.context.request.RequestAttributes; +import org.springframework.web.context.request.RequestContextHolder; +import com.xinda.common.core.text.Convert; + +/** + * 权限信息 + * + * @author ruoyi + */ +public class PermissionContextHolder +{ + private static final String PERMISSION_CONTEXT_ATTRIBUTES = "PERMISSION_CONTEXT"; + + public static void setContext(String permission) + { + RequestContextHolder.currentRequestAttributes().setAttribute(PERMISSION_CONTEXT_ATTRIBUTES, permission, + RequestAttributes.SCOPE_REQUEST); + } + + public static String getContext() + { + return Convert.toStr(RequestContextHolder.currentRequestAttributes().getAttribute(PERMISSION_CONTEXT_ATTRIBUTES, + RequestAttributes.SCOPE_REQUEST)); + } +} diff --git a/xinda-framework/src/main/java/com/xinda/framework/security/filter/JwtAuthenticationTokenFilter.java b/xinda-framework/src/main/java/com/xinda/framework/security/filter/JwtAuthenticationTokenFilter.java new file mode 100644 index 0000000..471cb50 --- /dev/null +++ b/xinda-framework/src/main/java/com/xinda/framework/security/filter/JwtAuthenticationTokenFilter.java @@ -0,0 +1,44 @@ +package com.xinda.framework.security.filter; + +import java.io.IOException; +import javax.servlet.FilterChain; +import javax.servlet.ServletException; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; +import org.springframework.security.core.context.SecurityContextHolder; +import org.springframework.security.web.authentication.WebAuthenticationDetailsSource; +import org.springframework.stereotype.Component; +import org.springframework.web.filter.OncePerRequestFilter; +import com.xinda.common.core.domain.model.LoginUser; +import com.xinda.common.utils.SecurityUtils; +import com.xinda.common.utils.StringUtils; +import com.xinda.framework.web.service.TokenService; + +/** + * token过滤器 验证token有效性 + * + * @author ruoyi + */ +@Component +public class JwtAuthenticationTokenFilter extends OncePerRequestFilter +{ + @Autowired + private TokenService tokenService; + + @Override + protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain chain) + throws ServletException, IOException + { + LoginUser loginUser = tokenService.getLoginUser(request); + if (StringUtils.isNotNull(loginUser) && StringUtils.isNull(SecurityUtils.getAuthentication())) + { + tokenService.verifyToken(loginUser); + UsernamePasswordAuthenticationToken authenticationToken = new UsernamePasswordAuthenticationToken(loginUser, null, loginUser.getAuthorities()); + authenticationToken.setDetails(new WebAuthenticationDetailsSource().buildDetails(request)); + SecurityContextHolder.getContext().setAuthentication(authenticationToken); + } + chain.doFilter(request, response); + } +} diff --git a/xinda-framework/src/main/java/com/xinda/framework/security/handle/AuthenticationEntryPointImpl.java b/xinda-framework/src/main/java/com/xinda/framework/security/handle/AuthenticationEntryPointImpl.java new file mode 100644 index 0000000..3b8cb74 --- /dev/null +++ b/xinda-framework/src/main/java/com/xinda/framework/security/handle/AuthenticationEntryPointImpl.java @@ -0,0 +1,44 @@ +package com.xinda.framework.security.handle; + +import java.io.IOException; +import java.io.Serializable; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import org.springframework.security.core.AuthenticationException; +import org.springframework.security.web.AuthenticationEntryPoint; +import org.springframework.stereotype.Component; +import com.alibaba.fastjson2.JSON; +import com.xinda.common.constant.HttpStatus; +import com.xinda.common.core.domain.AjaxResult; +import com.xinda.common.utils.ServletUtils; +import com.xinda.common.utils.StringUtils; + +/** + * 认证失败处理类 返回未授权 + * + * @author ruoyi + */ +@Component +public class AuthenticationEntryPointImpl implements AuthenticationEntryPoint, Serializable +{ + private static final long serialVersionUID = -8970718410437077606L; + + @Override + public void commence(HttpServletRequest request, HttpServletResponse response, AuthenticationException e) + throws IOException + { +// if (isAjaxRequest(request)){ + int code = HttpStatus.UNAUTHORIZED; + String msg = StringUtils.format("请求访问:{},认证失败,无法访问系统资源", request.getRequestURI()); + ServletUtils.renderString(response, JSON.toJSONString(AjaxResult.error(code, msg))); +// }else { +// response.sendRedirect("/oauth/login"); +// } + } + + + public static boolean isAjaxRequest(HttpServletRequest request) { + String ajaxFlag = request.getHeader("X-Requested-With"); + return ajaxFlag != null && "XMLHttpRequest".equals(ajaxFlag); + } +} diff --git a/xinda-framework/src/main/java/com/xinda/framework/security/handle/LogoutSuccessHandlerImpl.java b/xinda-framework/src/main/java/com/xinda/framework/security/handle/LogoutSuccessHandlerImpl.java new file mode 100644 index 0000000..6861e06 --- /dev/null +++ b/xinda-framework/src/main/java/com/xinda/framework/security/handle/LogoutSuccessHandlerImpl.java @@ -0,0 +1,52 @@ +package com.xinda.framework.security.handle; + +import java.io.IOException; +import javax.servlet.ServletException; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Configuration; +import org.springframework.security.core.Authentication; +import org.springframework.security.web.authentication.logout.LogoutSuccessHandler; +import com.alibaba.fastjson2.JSON; +import com.xinda.common.constant.Constants; +import com.xinda.common.core.domain.AjaxResult; +import com.xinda.common.core.domain.model.LoginUser; +import com.xinda.common.utils.ServletUtils; +import com.xinda.common.utils.StringUtils; +import com.xinda.framework.manager.AsyncManager; +import com.xinda.framework.manager.factory.AsyncFactory; +import com.xinda.framework.web.service.TokenService; + +/** + * 自定义退出处理类 返回成功 + * + * @author ruoyi + */ +@Configuration +public class LogoutSuccessHandlerImpl implements LogoutSuccessHandler +{ + @Autowired + private TokenService tokenService; + + /** + * 退出处理 + * + * @return + */ + @Override + public void onLogoutSuccess(HttpServletRequest request, HttpServletResponse response, Authentication authentication) + throws IOException, ServletException + { + LoginUser loginUser = tokenService.getLoginUser(request); + if (StringUtils.isNotNull(loginUser)) + { + String userName = loginUser.getUsername(); + // 删除用户缓存记录 + tokenService.delLoginUser(loginUser.getToken()); + // 记录用户退出日志 + AsyncManager.me().execute(AsyncFactory.recordLogininfor(userName, Constants.LOGOUT, "退出成功")); + } + ServletUtils.renderString(response, JSON.toJSONString(AjaxResult.success("退出成功"))); + } +} diff --git a/xinda-framework/src/main/java/com/xinda/framework/utils/CacheUtils.java b/xinda-framework/src/main/java/com/xinda/framework/utils/CacheUtils.java new file mode 100644 index 0000000..1117191 --- /dev/null +++ b/xinda-framework/src/main/java/com/xinda/framework/utils/CacheUtils.java @@ -0,0 +1,75 @@ +package com.xinda.framework.utils; + +import com.xinda.common.utils.spring.SpringUtils; +import lombok.AccessLevel; +import lombok.NoArgsConstructor; +import org.redisson.api.RMap; +import org.springframework.cache.Cache; +import org.springframework.cache.CacheManager; + +import java.util.Set; + +/** + * 缓存操作工具类 {@link } + * + * @author Michelle.Chung + * @date 2022/8/13 + */ +@NoArgsConstructor(access = AccessLevel.PRIVATE) +@SuppressWarnings(value = {"unchecked"}) +public class CacheUtils { + + private static final CacheManager CACHE_MANAGER = SpringUtils.getBean(CacheManager.class); + + /** + * 获取缓存组内所有的KEY + * + * @param cacheNames 缓存组名称 + */ + public static Set keys(String cacheNames) { + RMap rmap = (RMap) CACHE_MANAGER.getCache(cacheNames).getNativeCache(); + return rmap.keySet(); + } + + /** + * 获取缓存值 + * + * @param cacheNames 缓存组名称 + * @param key 缓存key + */ + public static T get(String cacheNames, Object key) { + Cache.ValueWrapper wrapper = CACHE_MANAGER.getCache(cacheNames).get(key); + return wrapper != null ? (T) wrapper.get() : null; + } + + /** + * 保存缓存值 + * + * @param cacheNames 缓存组名称 + * @param key 缓存key + * @param value 缓存值 + */ + public static void put(String cacheNames, Object key, Object value) { + CACHE_MANAGER.getCache(cacheNames).put(key, value); + } + + /** + * 删除缓存值 + * + * @param cacheNames 缓存组名称 + * @param key 缓存key + */ + public static void evict(String cacheNames, Object key) { + CACHE_MANAGER.getCache(cacheNames).evict(key); + } + + /** + * 清空缓存值 + * + * @param cacheNames 缓存组名称 + */ + public static void clear(String cacheNames) { + CACHE_MANAGER.getCache(cacheNames).clear(); + } + +} diff --git a/xinda-framework/src/main/java/com/xinda/framework/utils/QueueUtils.java b/xinda-framework/src/main/java/com/xinda/framework/utils/QueueUtils.java new file mode 100644 index 0000000..b36f115 --- /dev/null +++ b/xinda-framework/src/main/java/com/xinda/framework/utils/QueueUtils.java @@ -0,0 +1,236 @@ +package com.xinda.framework.utils; + +import com.xinda.common.utils.spring.SpringUtils; +import lombok.AccessLevel; +import lombok.NoArgsConstructor; +import org.redisson.api.*; + +import java.util.concurrent.TimeUnit; +import java.util.function.Consumer; + +/** + * 分布式队列工具 + * 轻量级队列 重量级数据量 请使用 MQ + * 要求 redis 5.X 以上 + * + * @author Lion Li + * @version 3.6.0 新增 + */ +@NoArgsConstructor(access = AccessLevel.PRIVATE) +public class QueueUtils { + + private static final RedissonClient CLIENT = SpringUtils.getBean(RedissonClient.class); + + + /** + * 获取客户端实例 + */ + public static RedissonClient getClient() { + return CLIENT; + } + + /** + * 添加普通队列数据 + * + * @param queueName 队列名 + * @param data 数据 + */ + public static boolean addQueueObject(String queueName, T data) { + RBlockingQueue queue = CLIENT.getBlockingQueue(queueName); + return queue.offer(data); + } + + /** + * 通用获取一个队列数据 没有数据返回 null(不支持延迟队列) + * + * @param queueName 队列名 + */ + public static T getQueueObject(String queueName) { + RBlockingQueue queue = CLIENT.getBlockingQueue(queueName); + return queue.poll(); + } + + /** + * 通用删除队列数据(不支持延迟队列) + */ + public static boolean removeQueueObject(String queueName, T data) { + RBlockingQueue queue = CLIENT.getBlockingQueue(queueName); + return queue.remove(data); + } + + /** + * 通用销毁队列 所有阻塞监听 报错(不支持延迟队列) + */ + public static boolean destroyQueue(String queueName) { + RBlockingQueue queue = CLIENT.getBlockingQueue(queueName); + return queue.delete(); + } + + /** + * 添加延迟队列数据 默认毫秒 + * + * @param queueName 队列名 + * @param data 数据 + * @param time 延迟时间 + */ + public static void addDelayedQueueObject(String queueName, T data, long time) { + addDelayedQueueObject(queueName, data, time, TimeUnit.MILLISECONDS); + } + + /** + * 添加延迟队列数据 + * + * @param queueName 队列名 + * @param data 数据 + * @param time 延迟时间 + * @param timeUnit 单位 + */ + public static void addDelayedQueueObject(String queueName, T data, long time, TimeUnit timeUnit) { + RBlockingQueue queue = CLIENT.getBlockingQueue(queueName); + RDelayedQueue delayedQueue = CLIENT.getDelayedQueue(queue); + delayedQueue.offer(data, time, timeUnit); + } + + /** + * 获取一个延迟队列数据 没有数据返回 null + * + * @param queueName 队列名 + */ + public static T getDelayedQueueObject(String queueName) { + RBlockingQueue queue = CLIENT.getBlockingQueue(queueName); + RDelayedQueue delayedQueue = CLIENT.getDelayedQueue(queue); + return delayedQueue.poll(); + } + + /** + * 删除延迟队列数据 + */ + public static boolean removeDelayedQueueObject(String queueName, T data) { + RBlockingQueue queue = CLIENT.getBlockingQueue(queueName); + RDelayedQueue delayedQueue = CLIENT.getDelayedQueue(queue); + return delayedQueue.remove(data); + } + + /** + * 销毁延迟队列 所有阻塞监听 报错 + */ + public static void destroyDelayedQueue(String queueName) { + RBlockingQueue queue = CLIENT.getBlockingQueue(queueName); + RDelayedQueue delayedQueue = CLIENT.getDelayedQueue(queue); + delayedQueue.destroy(); + } + + /** + * 添加优先队列数据 + * + * @param queueName 队列名 + * @param data 数据 + */ + public static boolean addPriorityQueueObject(String queueName, T data) { + RPriorityBlockingQueue priorityBlockingQueue = CLIENT.getPriorityBlockingQueue(queueName); + return priorityBlockingQueue.offer(data); + } + + /** + * 优先队列获取一个队列数据 没有数据返回 null(不支持延迟队列) + * + * @param queueName 队列名 + */ + public static T getPriorityQueueObject(String queueName) { + RPriorityBlockingQueue queue = CLIENT.getPriorityBlockingQueue(queueName); + return queue.poll(); + } + + /** + * 优先队列删除队列数据(不支持延迟队列) + */ + public static boolean removePriorityQueueObject(String queueName, T data) { + RPriorityBlockingQueue queue = CLIENT.getPriorityBlockingQueue(queueName); + return queue.remove(data); + } + + /** + * 优先队列销毁队列 所有阻塞监听 报错(不支持延迟队列) + */ + public static boolean destroyPriorityQueue(String queueName) { + RPriorityBlockingQueue queue = CLIENT.getPriorityBlockingQueue(queueName); + return queue.delete(); + } + + /** + * 尝试设置 有界队列 容量 用于限制数量 + * + * @param queueName 队列名 + * @param capacity 容量 + */ + public static boolean trySetBoundedQueueCapacity(String queueName, int capacity) { + RBoundedBlockingQueue boundedBlockingQueue = CLIENT.getBoundedBlockingQueue(queueName); + return boundedBlockingQueue.trySetCapacity(capacity); + } + + /** + * 尝试设置 有界队列 容量 用于限制数量 + * + * @param queueName 队列名 + * @param capacity 容量 + * @param destroy 已存在是否销毁 + */ + public static boolean trySetBoundedQueueCapacity(String queueName, int capacity, boolean destroy) { + RBoundedBlockingQueue boundedBlockingQueue = CLIENT.getBoundedBlockingQueue(queueName); + if (boundedBlockingQueue.isExists() && destroy) { + destroyQueue(queueName); + } + return boundedBlockingQueue.trySetCapacity(capacity); + } + + /** + * 添加有界队列数据 + * + * @param queueName 队列名 + * @param data 数据 + * @return 添加成功 true 已达到界限 false + */ + public static boolean addBoundedQueueObject(String queueName, T data) { + RBoundedBlockingQueue boundedBlockingQueue = CLIENT.getBoundedBlockingQueue(queueName); + return boundedBlockingQueue.offer(data); + } + + /** + * 有界队列获取一个队列数据 没有数据返回 null(不支持延迟队列) + * + * @param queueName 队列名 + */ + public static T getBoundedQueueObject(String queueName) { + RBoundedBlockingQueue queue = CLIENT.getBoundedBlockingQueue(queueName); + return queue.poll(); + } + + /** + * 有界队列删除队列数据(不支持延迟队列) + */ + public static boolean removeBoundedQueueObject(String queueName, T data) { + RBoundedBlockingQueue queue = CLIENT.getBoundedBlockingQueue(queueName); + return queue.remove(data); + } + + /** + * 有界队列销毁队列 所有阻塞监听 报错(不支持延迟队列) + */ + public static boolean destroyBoundedQueue(String queueName) { + RBoundedBlockingQueue queue = CLIENT.getBoundedBlockingQueue(queueName); + return queue.delete(); + } + + /** + * 订阅阻塞队列(可订阅所有实现类 例如: 延迟 优先 有界 等) + */ + public static void subscribeBlockingQueue(String queueName, Consumer consumer, boolean isDelayed) { + RBlockingQueue queue = CLIENT.getBlockingQueue(queueName); + if (isDelayed) { + // 订阅延迟队列 + CLIENT.getDelayedQueue(queue); + } + queue.subscribeOnElements(consumer); + } + +} diff --git a/xinda-framework/src/main/java/com/xinda/framework/utils/RedisUtils.java b/xinda-framework/src/main/java/com/xinda/framework/utils/RedisUtils.java new file mode 100644 index 0000000..22a5dbd --- /dev/null +++ b/xinda-framework/src/main/java/com/xinda/framework/utils/RedisUtils.java @@ -0,0 +1,548 @@ +package com.xinda.framework.utils; + +import com.xinda.common.utils.spring.SpringUtils; +import lombok.AccessLevel; +import lombok.NoArgsConstructor; +import org.redisson.api.*; + +import java.time.Duration; +import java.util.Collection; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.function.Consumer; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +/** + * redis 工具类 + * + * @author Lion Li + * @version 3.1.0 新增 + */ +@NoArgsConstructor(access = AccessLevel.PRIVATE) +@SuppressWarnings(value = {"unchecked", "rawtypes"}) +public class RedisUtils { + + private static final RedissonClient CLIENT = SpringUtils.getBean(RedissonClient.class); + + /** + * 限流 + * + * @param key 限流key + * @param rateType 限流类型 + * @param rate 速率 + * @param rateInterval 速率间隔 + * @return -1 表示失败 + */ + public static long rateLimiter(String key, RateType rateType, int rate, int rateInterval) { + RRateLimiter rateLimiter = CLIENT.getRateLimiter(key); + rateLimiter.trySetRate(rateType, rate, rateInterval, RateIntervalUnit.SECONDS); + if (rateLimiter.tryAcquire()) { + return rateLimiter.availablePermits(); + } else { + return -1L; + } + } + + /** + * 获取客户端实例 + */ + public static RedissonClient getClient() { + return CLIENT; + } + + /** + * 发布通道消息 + * + * @param channelKey 通道key + * @param msg 发送数据 + * @param consumer 自定义处理 + */ + public static void publish(String channelKey, T msg, Consumer consumer) { + RTopic topic = CLIENT.getTopic(channelKey); + topic.publish(msg); + consumer.accept(msg); + } + + /** + * 发布消息到指定的频道 + * + * @param channelKey 通道key + * @param msg 发送数据 + */ + public static void publish(String channelKey, T msg) { + RTopic topic = CLIENT.getTopic(channelKey); + topic.publish(msg); + } + + /** + * 订阅通道接收消息 + * + * @param channelKey 通道key + * @param clazz 消息类型 + * @param consumer 自定义处理 + */ + public static void subscribe(String channelKey, Class clazz, Consumer consumer) { + RTopic topic = CLIENT.getTopic(channelKey); + topic.addListener(clazz, (channel, msg) -> consumer.accept(msg)); + } + + /** + * 缓存基本的对象,Integer、String、实体类等 + * + * @param key 缓存的键值 + * @param value 缓存的值 + */ + public static void setCacheObject(final String key, final T value) { + setCacheObject(key, value, false); + } + + /** + * 缓存基本的对象,保留当前对象 TTL 有效期 + * + * @param key 缓存的键值 + * @param value 缓存的值 + * @param isSaveTtl 是否保留TTL有效期(例如: set之前ttl剩余90 set之后还是为90) + * @since Redis 6.X 以上使用 setAndKeepTTL 兼容 5.X 方案 + */ + public static void setCacheObject(final String key, final T value, final boolean isSaveTtl) { + RBucket bucket = CLIENT.getBucket(key); + if (isSaveTtl) { + try { + bucket.setAndKeepTTL(value); + } catch (Exception e) { + long timeToLive = bucket.remainTimeToLive(); + if (timeToLive == -1) { + setCacheObject(key, value); + } else { + setCacheObject(key, value, Duration.ofMillis(timeToLive)); + } + } + } else { + bucket.set(value); + } + } + + /** + * 缓存基本的对象,Integer、String、实体类等 + * + * @param key 缓存的键值 + * @param value 缓存的值 + * @param duration 时间 + */ + public static void setCacheObject(final String key, final T value, final Duration duration) { + RBatch batch = CLIENT.createBatch(); + RBucketAsync bucket = batch.getBucket(key); + bucket.setAsync(value); + bucket.expireAsync(duration); + batch.execute(); + } + + /** + * 如果不存在则设置 并返回 true 如果存在则返回 false + * + * @param key 缓存的键值 + * @param value 缓存的值 + * @return set成功或失败 + */ + public static boolean setObjectIfAbsent(final String key, final T value, final Duration duration) { + RBucket bucket = CLIENT.getBucket(key); + return bucket.setIfAbsent(value, duration); + } + + /** + * 如果存在则设置 并返回 true 如果存在则返回 false + * + * @param key 缓存的键值 + * @param value 缓存的值 + * @return set成功或失败 + */ + public static boolean setObjectIfExists(final String key, final T value, final Duration duration) { + RBucket bucket = CLIENT.getBucket(key); + return bucket.setIfExists(value, duration); + } + + /** + * 注册对象监听器 + *

+ * key 监听器需开启 `notify-keyspace-events` 等 redis 相关配置 + * + * @param key 缓存的键值 + * @param listener 监听器配置 + */ + public static void addObjectListener(final String key, final ObjectListener listener) { + RBucket result = CLIENT.getBucket(key); + result.addListener(listener); + } + + /** + * 设置有效时间 + * + * @param key Redis键 + * @param timeout 超时时间 + * @return true=设置成功;false=设置失败 + */ + public static boolean expire(final String key, final long timeout) { + return expire(key, Duration.ofSeconds(timeout)); + } + + /** + * 设置有效时间 + * + * @param key Redis键 + * @param duration 超时时间 + * @return true=设置成功;false=设置失败 + */ + public static boolean expire(final String key, final Duration duration) { + RBucket rBucket = CLIENT.getBucket(key); + return rBucket.expire(duration); + } + + /** + * 获得缓存的基本对象。 + * + * @param key 缓存键值 + * @return 缓存键值对应的数据 + */ + public static T getCacheObject(final String key) { + RBucket rBucket = CLIENT.getBucket(key); + return rBucket.get(); + } + + /** + * 获得key剩余存活时间 + * + * @param key 缓存键值 + * @return 剩余存活时间 + */ + public static long getTimeToLive(final String key) { + RBucket rBucket = CLIENT.getBucket(key); + return rBucket.remainTimeToLive(); + } + + /** + * 删除单个对象 + * + * @param key 缓存的键值 + */ + public static boolean deleteObject(final String key) { + return CLIENT.getBucket(key).delete(); + } + + /** + * 删除集合对象 + * + * @param collection 多个对象 + */ + public static void deleteObject(final Collection collection) { + RBatch batch = CLIENT.createBatch(); + collection.forEach(t -> { + batch.getBucket(t.toString()).deleteAsync(); + }); + batch.execute(); + } + + /** + * 检查缓存对象是否存在 + * + * @param key 缓存的键值 + */ + public static boolean isExistsObject(final String key) { + return CLIENT.getBucket(key).isExists(); + } + + /** + * 缓存List数据 + * + * @param key 缓存的键值 + * @param dataList 待缓存的List数据 + * @return 缓存的对象 + */ + public static boolean setCacheList(final String key, final List dataList) { + RList rList = CLIENT.getList(key); + return rList.addAll(dataList); + } + + /** + * 追加缓存List数据 + * + * @param key 缓存的键值 + * @param data 待缓存的数据 + * @return 缓存的对象 + */ + public static boolean addCacheList(final String key, final T data) { + RList rList = CLIENT.getList(key); + return rList.add(data); + } + + /** + * 注册List监听器 + *

+ * key 监听器需开启 `notify-keyspace-events` 等 redis 相关配置 + * + * @param key 缓存的键值 + * @param listener 监听器配置 + */ + public static void addListListener(final String key, final ObjectListener listener) { + RList rList = CLIENT.getList(key); + rList.addListener(listener); + } + + /** + * 获得缓存的list对象 + * + * @param key 缓存的键值 + * @return 缓存键值对应的数据 + */ + public static List getCacheList(final String key) { + RList rList = CLIENT.getList(key); + return rList.readAll(); + } + + /** + * 获得缓存的list对象(范围) + * + * @param key 缓存的键值 + * @param form 起始下标 + * @param to 截止下标 + * @return 缓存键值对应的数据 + */ + public static List getCacheListRange(final String key, int form, int to) { + RList rList = CLIENT.getList(key); + return rList.range(form, to); + } + + /** + * 缓存Set + * + * @param key 缓存键值 + * @param dataSet 缓存的数据 + * @return 缓存数据的对象 + */ + public static boolean setCacheSet(final String key, final Set dataSet) { + RSet rSet = CLIENT.getSet(key); + return rSet.addAll(dataSet); + } + + /** + * 追加缓存Set数据 + * + * @param key 缓存的键值 + * @param data 待缓存的数据 + * @return 缓存的对象 + */ + public static boolean addCacheSet(final String key, final T data) { + RSet rSet = CLIENT.getSet(key); + return rSet.add(data); + } + + /** + * 注册Set监听器 + *

+ * key 监听器需开启 `notify-keyspace-events` 等 redis 相关配置 + * + * @param key 缓存的键值 + * @param listener 监听器配置 + */ + public static void addSetListener(final String key, final ObjectListener listener) { + RSet rSet = CLIENT.getSet(key); + rSet.addListener(listener); + } + + /** + * 获得缓存的set + * + * @param key 缓存的key + * @return set对象 + */ + public static Set getCacheSet(final String key) { + RSet rSet = CLIENT.getSet(key); + return rSet.readAll(); + } + + /** + * 缓存Map + * + * @param key 缓存的键值 + * @param dataMap 缓存的数据 + */ + public static void setCacheMap(final String key, final Map dataMap) { + if (dataMap != null) { + RMap rMap = CLIENT.getMap(key); + rMap.putAll(dataMap); + } + } + + /** + * 注册Map监听器 + *

+ * key 监听器需开启 `notify-keyspace-events` 等 redis 相关配置 + * + * @param key 缓存的键值 + * @param listener 监听器配置 + */ + public static void addMapListener(final String key, final ObjectListener listener) { + RMap rMap = CLIENT.getMap(key); + rMap.addListener(listener); + } + + /** + * 获得缓存的Map + * + * @param key 缓存的键值 + * @return map对象 + */ + public static Map getCacheMap(final String key) { + RMap rMap = CLIENT.getMap(key); + return rMap.getAll(rMap.keySet()); + } + + /** + * 获得缓存Map的key列表 + * + * @param key 缓存的键值 + * @return key列表 + */ + public static Set getCacheMapKeySet(final String key) { + RMap rMap = CLIENT.getMap(key); + return rMap.keySet(); + } + + /** + * 往Hash中存入数据 + * + * @param key Redis键 + * @param hKey Hash键 + * @param value 值 + */ + public static void setCacheMapValue(final String key, final String hKey, final T value) { + RMap rMap = CLIENT.getMap(key); + rMap.put(hKey, value); + } + + /** + * 获取Hash中的数据 + * + * @param key Redis键 + * @param hKey Hash键 + * @return Hash中的对象 + */ + public static T getCacheMapValue(final String key, final String hKey) { + RMap rMap = CLIENT.getMap(key); + return rMap.get(hKey); + } + + /** + * 删除Hash中的数据 + * + * @param key Redis键 + * @param hKey Hash键 + * @return Hash中的对象 + */ + public static T delCacheMapValue(final String key, final String hKey) { + RMap rMap = CLIENT.getMap(key); + return rMap.remove(hKey); + } + + /** + * 删除Hash中的数据 + * + * @param key Redis键 + * @param hKeys Hash键 + */ + public static void delMultiCacheMapValue(final String key, final Set hKeys) { + RBatch batch = CLIENT.createBatch(); + RMapAsync rMap = batch.getMap(key); + for (String hKey : hKeys) { + rMap.removeAsync(hKey); + } + batch.execute(); + } + + /** + * 获取多个Hash中的数据 + * + * @param key Redis键 + * @param hKeys Hash键集合 + * @return Hash对象集合 + */ + public static Map getMultiCacheMapValue(final String key, final Set hKeys) { + RMap rMap = CLIENT.getMap(key); + return rMap.getAll(hKeys); + } + + /** + * 设置原子值 + * + * @param key Redis键 + * @param value 值 + */ + public static void setAtomicValue(String key, long value) { + RAtomicLong atomic = CLIENT.getAtomicLong(key); + atomic.set(value); + } + + /** + * 获取原子值 + * + * @param key Redis键 + * @return 当前值 + */ + public static long getAtomicValue(String key) { + RAtomicLong atomic = CLIENT.getAtomicLong(key); + return atomic.get(); + } + + /** + * 递增原子值 + * + * @param key Redis键 + * @return 当前值 + */ + public static long incrAtomicValue(String key) { + RAtomicLong atomic = CLIENT.getAtomicLong(key); + return atomic.incrementAndGet(); + } + + /** + * 递减原子值 + * + * @param key Redis键 + * @return 当前值 + */ + public static long decrAtomicValue(String key) { + RAtomicLong atomic = CLIENT.getAtomicLong(key); + return atomic.decrementAndGet(); + } + + /** + * 获得缓存的基本对象列表 + * + * @param pattern 字符串前缀 + * @return 对象列表 + */ + public static Collection keys(final String pattern) { + Stream stream = CLIENT.getKeys().getKeysStreamByPattern(pattern); + return stream.collect(Collectors.toList()); + } + + /** + * 删除缓存的基本对象列表 + * + * @param pattern 字符串前缀 + */ + public static void deleteKeys(final String pattern) { + CLIENT.getKeys().deleteByPattern(pattern); + } + + /** + * 检查redis中是否存在key + * + * @param key 键 + */ + public static Boolean hasKey(String key) { + RKeys rKeys = CLIENT.getKeys(); + return rKeys.countExists(key) > 0; + } +} diff --git a/xinda-framework/src/main/java/com/xinda/framework/web/domain/Server.java b/xinda-framework/src/main/java/com/xinda/framework/web/domain/Server.java new file mode 100644 index 0000000..395e6c5 --- /dev/null +++ b/xinda-framework/src/main/java/com/xinda/framework/web/domain/Server.java @@ -0,0 +1,240 @@ +package com.xinda.framework.web.domain; + +import java.net.UnknownHostException; +import java.util.LinkedList; +import java.util.List; +import java.util.Properties; +import com.xinda.common.utils.Arith; +import com.xinda.common.utils.ip.IpUtils; +import com.xinda.framework.web.domain.server.Cpu; +import com.xinda.framework.web.domain.server.Jvm; +import com.xinda.framework.web.domain.server.Mem; +import com.xinda.framework.web.domain.server.Sys; +import com.xinda.framework.web.domain.server.SysFile; +import oshi.SystemInfo; +import oshi.hardware.CentralProcessor; +import oshi.hardware.CentralProcessor.TickType; +import oshi.hardware.GlobalMemory; +import oshi.hardware.HardwareAbstractionLayer; +import oshi.software.os.FileSystem; +import oshi.software.os.OSFileStore; +import oshi.software.os.OperatingSystem; +import oshi.util.Util; + +/** + * 服务器相关信息 + * + * @author ruoyi + */ +public class Server +{ + private static final int OSHI_WAIT_SECOND = 1000; + + /** + * CPU相关信息 + */ + private Cpu cpu = new Cpu(); + + /** + * 內存相关信息 + */ + private Mem mem = new Mem(); + + /** + * JVM相关信息 + */ + private Jvm jvm = new Jvm(); + + /** + * 服务器相关信息 + */ + private Sys sys = new Sys(); + + /** + * 磁盘相关信息 + */ + private List sysFiles = new LinkedList(); + + public Cpu getCpu() + { + return cpu; + } + + public void setCpu(Cpu cpu) + { + this.cpu = cpu; + } + + public Mem getMem() + { + return mem; + } + + public void setMem(Mem mem) + { + this.mem = mem; + } + + public Jvm getJvm() + { + return jvm; + } + + public void setJvm(Jvm jvm) + { + this.jvm = jvm; + } + + public Sys getSys() + { + return sys; + } + + public void setSys(Sys sys) + { + this.sys = sys; + } + + public List getSysFiles() + { + return sysFiles; + } + + public void setSysFiles(List sysFiles) + { + this.sysFiles = sysFiles; + } + + public void copyTo() throws Exception + { + SystemInfo si = new SystemInfo(); + HardwareAbstractionLayer hal = si.getHardware(); + + setCpuInfo(hal.getProcessor()); + + setMemInfo(hal.getMemory()); + + setSysInfo(); + + setJvmInfo(); + + setSysFiles(si.getOperatingSystem()); + } + + /** + * 设置CPU信息 + */ + private void setCpuInfo(CentralProcessor processor) + { + // CPU信息 + long[] prevTicks = processor.getSystemCpuLoadTicks(); + Util.sleep(OSHI_WAIT_SECOND); + long[] ticks = processor.getSystemCpuLoadTicks(); + long nice = ticks[TickType.NICE.getIndex()] - prevTicks[TickType.NICE.getIndex()]; + long irq = ticks[TickType.IRQ.getIndex()] - prevTicks[TickType.IRQ.getIndex()]; + long softirq = ticks[TickType.SOFTIRQ.getIndex()] - prevTicks[TickType.SOFTIRQ.getIndex()]; + long steal = ticks[TickType.STEAL.getIndex()] - prevTicks[TickType.STEAL.getIndex()]; + long cSys = ticks[TickType.SYSTEM.getIndex()] - prevTicks[TickType.SYSTEM.getIndex()]; + long user = ticks[TickType.USER.getIndex()] - prevTicks[TickType.USER.getIndex()]; + long iowait = ticks[TickType.IOWAIT.getIndex()] - prevTicks[TickType.IOWAIT.getIndex()]; + long idle = ticks[TickType.IDLE.getIndex()] - prevTicks[TickType.IDLE.getIndex()]; + long totalCpu = user + nice + cSys + idle + iowait + irq + softirq + steal; + cpu.setCpuNum(processor.getLogicalProcessorCount()); + cpu.setTotal(totalCpu); + cpu.setSys(cSys); + cpu.setUsed(user); + cpu.setWait(iowait); + cpu.setFree(idle); + } + + /** + * 设置内存信息 + */ + private void setMemInfo(GlobalMemory memory) + { + mem.setTotal(memory.getTotal()); + mem.setUsed(memory.getTotal() - memory.getAvailable()); + mem.setFree(memory.getAvailable()); + } + + /** + * 设置服务器信息 + */ + private void setSysInfo() + { + Properties props = System.getProperties(); + sys.setComputerName(IpUtils.getHostName()); + sys.setComputerIp(IpUtils.getHostIp()); + sys.setOsName(props.getProperty("os.name")); + sys.setOsArch(props.getProperty("os.arch")); + sys.setUserDir(props.getProperty("user.dir")); + } + + /** + * 设置Java虚拟机 + */ + private void setJvmInfo() throws UnknownHostException + { + Properties props = System.getProperties(); + jvm.setTotal(Runtime.getRuntime().totalMemory()); + jvm.setMax(Runtime.getRuntime().maxMemory()); + jvm.setFree(Runtime.getRuntime().freeMemory()); + jvm.setVersion(props.getProperty("java.version")); + jvm.setHome(props.getProperty("java.home")); + } + + /** + * 设置磁盘信息 + */ + private void setSysFiles(OperatingSystem os) + { + FileSystem fileSystem = os.getFileSystem(); + List fsArray = fileSystem.getFileStores(); + for (OSFileStore fs : fsArray) + { + long free = fs.getUsableSpace(); + long total = fs.getTotalSpace(); + long used = total - free; + SysFile sysFile = new SysFile(); + sysFile.setDirName(fs.getMount()); + sysFile.setSysTypeName(fs.getType()); + sysFile.setTypeName(fs.getName()); + sysFile.setTotal(convertFileSize(total)); + sysFile.setFree(convertFileSize(free)); + sysFile.setUsed(convertFileSize(used)); + sysFile.setUsage(Arith.mul(Arith.div(used, total, 4), 100)); + sysFiles.add(sysFile); + } + } + + /** + * 字节转换 + * + * @param size 字节大小 + * @return 转换后值 + */ + public String convertFileSize(long size) + { + long kb = 1024; + long mb = kb * 1024; + long gb = mb * 1024; + if (size >= gb) + { + return String.format("%.1f GB", (float) size / gb); + } + else if (size >= mb) + { + float f = (float) size / mb; + return String.format(f > 100 ? "%.0f MB" : "%.1f MB", f); + } + else if (size >= kb) + { + float f = (float) size / kb; + return String.format(f > 100 ? "%.0f KB" : "%.1f KB", f); + } + else + { + return String.format("%d B", size); + } + } +} diff --git a/xinda-framework/src/main/java/com/xinda/framework/web/domain/server/Cpu.java b/xinda-framework/src/main/java/com/xinda/framework/web/domain/server/Cpu.java new file mode 100644 index 0000000..f396ff8 --- /dev/null +++ b/xinda-framework/src/main/java/com/xinda/framework/web/domain/server/Cpu.java @@ -0,0 +1,101 @@ +package com.xinda.framework.web.domain.server; + +import com.xinda.common.utils.Arith; + +/** + * CPU相关信息 + * + * @author ruoyi + */ +public class Cpu +{ + /** + * 核心数 + */ + private int cpuNum; + + /** + * CPU总的使用率 + */ + private double total; + + /** + * CPU系统使用率 + */ + private double sys; + + /** + * CPU用户使用率 + */ + private double used; + + /** + * CPU当前等待率 + */ + private double wait; + + /** + * CPU当前空闲率 + */ + private double free; + + public int getCpuNum() + { + return cpuNum; + } + + public void setCpuNum(int cpuNum) + { + this.cpuNum = cpuNum; + } + + public double getTotal() + { + return Arith.round(Arith.mul(total, 100), 2); + } + + public void setTotal(double total) + { + this.total = total; + } + + public double getSys() + { + return Arith.round(Arith.mul(sys / total, 100), 2); + } + + public void setSys(double sys) + { + this.sys = sys; + } + + public double getUsed() + { + return Arith.round(Arith.mul(used / total, 100), 2); + } + + public void setUsed(double used) + { + this.used = used; + } + + public double getWait() + { + return Arith.round(Arith.mul(wait / total, 100), 2); + } + + public void setWait(double wait) + { + this.wait = wait; + } + + public double getFree() + { + return Arith.round(Arith.mul(free / total, 100), 2); + } + + public void setFree(double free) + { + this.free = free; + } +} diff --git a/xinda-framework/src/main/java/com/xinda/framework/web/domain/server/Jvm.java b/xinda-framework/src/main/java/com/xinda/framework/web/domain/server/Jvm.java new file mode 100644 index 0000000..36aa198 --- /dev/null +++ b/xinda-framework/src/main/java/com/xinda/framework/web/domain/server/Jvm.java @@ -0,0 +1,130 @@ +package com.xinda.framework.web.domain.server; + +import java.lang.management.ManagementFactory; +import com.xinda.common.utils.Arith; +import com.xinda.common.utils.DateUtils; + +/** + * JVM相关信息 + * + * @author ruoyi + */ +public class Jvm +{ + /** + * 当前JVM占用的内存总数(M) + */ + private double total; + + /** + * JVM最大可用内存总数(M) + */ + private double max; + + /** + * JVM空闲内存(M) + */ + private double free; + + /** + * JDK版本 + */ + private String version; + + /** + * JDK路径 + */ + private String home; + + public double getTotal() + { + return Arith.div(total, (1024 * 1024), 2); + } + + public void setTotal(double total) + { + this.total = total; + } + + public double getMax() + { + return Arith.div(max, (1024 * 1024), 2); + } + + public void setMax(double max) + { + this.max = max; + } + + public double getFree() + { + return Arith.div(free, (1024 * 1024), 2); + } + + public void setFree(double free) + { + this.free = free; + } + + public double getUsed() + { + return Arith.div(total - free, (1024 * 1024), 2); + } + + public double getUsage() + { + return Arith.mul(Arith.div(total - free, total, 4), 100); + } + + /** + * 获取JDK名称 + */ + public String getName() + { + return ManagementFactory.getRuntimeMXBean().getVmName(); + } + + public String getVersion() + { + return version; + } + + public void setVersion(String version) + { + this.version = version; + } + + public String getHome() + { + return home; + } + + public void setHome(String home) + { + this.home = home; + } + + /** + * JDK启动时间 + */ + public String getStartTime() + { + return DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD_HH_MM_SS, DateUtils.getServerStartDate()); + } + + /** + * JDK运行时间 + */ + public String getRunTime() + { + return DateUtils.getDatePoor(DateUtils.getNowDate(), DateUtils.getServerStartDate()); + } + + /** + * 运行参数 + */ + public String getInputArgs() + { + return ManagementFactory.getRuntimeMXBean().getInputArguments().toString(); + } +} diff --git a/xinda-framework/src/main/java/com/xinda/framework/web/domain/server/Mem.java b/xinda-framework/src/main/java/com/xinda/framework/web/domain/server/Mem.java new file mode 100644 index 0000000..db65cba --- /dev/null +++ b/xinda-framework/src/main/java/com/xinda/framework/web/domain/server/Mem.java @@ -0,0 +1,61 @@ +package com.xinda.framework.web.domain.server; + +import com.xinda.common.utils.Arith; + +/** + * 內存相关信息 + * + * @author ruoyi + */ +public class Mem +{ + /** + * 内存总量 + */ + private double total; + + /** + * 已用内存 + */ + private double used; + + /** + * 剩余内存 + */ + private double free; + + public double getTotal() + { + return Arith.div(total, (1024 * 1024 * 1024), 2); + } + + public void setTotal(long total) + { + this.total = total; + } + + public double getUsed() + { + return Arith.div(used, (1024 * 1024 * 1024), 2); + } + + public void setUsed(long used) + { + this.used = used; + } + + public double getFree() + { + return Arith.div(free, (1024 * 1024 * 1024), 2); + } + + public void setFree(long free) + { + this.free = free; + } + + public double getUsage() + { + return Arith.mul(Arith.div(used, total, 4), 100); + } +} diff --git a/xinda-framework/src/main/java/com/xinda/framework/web/domain/server/Sys.java b/xinda-framework/src/main/java/com/xinda/framework/web/domain/server/Sys.java new file mode 100644 index 0000000..80f9540 --- /dev/null +++ b/xinda-framework/src/main/java/com/xinda/framework/web/domain/server/Sys.java @@ -0,0 +1,84 @@ +package com.xinda.framework.web.domain.server; + +/** + * 系统相关信息 + * + * @author ruoyi + */ +public class Sys +{ + /** + * 服务器名称 + */ + private String computerName; + + /** + * 服务器Ip + */ + private String computerIp; + + /** + * 项目路径 + */ + private String userDir; + + /** + * 操作系统 + */ + private String osName; + + /** + * 系统架构 + */ + private String osArch; + + public String getComputerName() + { + return computerName; + } + + public void setComputerName(String computerName) + { + this.computerName = computerName; + } + + public String getComputerIp() + { + return computerIp; + } + + public void setComputerIp(String computerIp) + { + this.computerIp = computerIp; + } + + public String getUserDir() + { + return userDir; + } + + public void setUserDir(String userDir) + { + this.userDir = userDir; + } + + public String getOsName() + { + return osName; + } + + public void setOsName(String osName) + { + this.osName = osName; + } + + public String getOsArch() + { + return osArch; + } + + public void setOsArch(String osArch) + { + this.osArch = osArch; + } +} diff --git a/xinda-framework/src/main/java/com/xinda/framework/web/domain/server/SysFile.java b/xinda-framework/src/main/java/com/xinda/framework/web/domain/server/SysFile.java new file mode 100644 index 0000000..f08f9f5 --- /dev/null +++ b/xinda-framework/src/main/java/com/xinda/framework/web/domain/server/SysFile.java @@ -0,0 +1,114 @@ +package com.xinda.framework.web.domain.server; + +/** + * 系统文件相关信息 + * + * @author ruoyi + */ +public class SysFile +{ + /** + * 盘符路径 + */ + private String dirName; + + /** + * 盘符类型 + */ + private String sysTypeName; + + /** + * 文件类型 + */ + private String typeName; + + /** + * 总大小 + */ + private String total; + + /** + * 剩余大小 + */ + private String free; + + /** + * 已经使用量 + */ + private String used; + + /** + * 资源的使用率 + */ + private double usage; + + public String getDirName() + { + return dirName; + } + + public void setDirName(String dirName) + { + this.dirName = dirName; + } + + public String getSysTypeName() + { + return sysTypeName; + } + + public void setSysTypeName(String sysTypeName) + { + this.sysTypeName = sysTypeName; + } + + public String getTypeName() + { + return typeName; + } + + public void setTypeName(String typeName) + { + this.typeName = typeName; + } + + public String getTotal() + { + return total; + } + + public void setTotal(String total) + { + this.total = total; + } + + public String getFree() + { + return free; + } + + public void setFree(String free) + { + this.free = free; + } + + public String getUsed() + { + return used; + } + + public void setUsed(String used) + { + this.used = used; + } + + public double getUsage() + { + return usage; + } + + public void setUsage(double usage) + { + this.usage = usage; + } +} diff --git a/xinda-framework/src/main/java/com/xinda/framework/web/exception/GlobalExceptionHandler.java b/xinda-framework/src/main/java/com/xinda/framework/web/exception/GlobalExceptionHandler.java new file mode 100644 index 0000000..7f03c90 --- /dev/null +++ b/xinda-framework/src/main/java/com/xinda/framework/web/exception/GlobalExceptionHandler.java @@ -0,0 +1,114 @@ +package com.xinda.framework.web.exception; + +import javax.servlet.http.HttpServletRequest; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.security.access.AccessDeniedException; +import org.springframework.validation.BindException; +import org.springframework.web.HttpRequestMethodNotSupportedException; +import org.springframework.web.bind.MethodArgumentNotValidException; +import org.springframework.web.bind.annotation.ExceptionHandler; +import org.springframework.web.bind.annotation.RestControllerAdvice; +import com.xinda.common.constant.HttpStatus; +import com.xinda.common.core.domain.AjaxResult; +import com.xinda.common.exception.DemoModeException; +import com.xinda.common.exception.ServiceException; +import com.xinda.common.utils.StringUtils; + +/** + * 全局异常处理器 + * + * @author ruoyi + */ +@RestControllerAdvice +public class GlobalExceptionHandler +{ + private static final Logger log = LoggerFactory.getLogger(GlobalExceptionHandler.class); + + /** + * 权限校验异常 + */ + @ExceptionHandler(AccessDeniedException.class) + public AjaxResult handleAccessDeniedException(AccessDeniedException e, HttpServletRequest request) + { + String requestURI = request.getRequestURI(); + log.error("请求地址'{}',权限校验失败'{}'", requestURI, e.getMessage()); + return AjaxResult.error(HttpStatus.FORBIDDEN, "没有权限,请联系管理员授权"); + } + + /** + * 请求方式不支持 + */ + @ExceptionHandler(HttpRequestMethodNotSupportedException.class) + public AjaxResult handleHttpRequestMethodNotSupported(HttpRequestMethodNotSupportedException e, + HttpServletRequest request) + { + String requestURI = request.getRequestURI(); + log.error("请求地址'{}',不支持'{}'请求", requestURI, e.getMethod()); + return AjaxResult.error(e.getMessage()); + } + + /** + * 业务异常 + */ + @ExceptionHandler(ServiceException.class) + public AjaxResult handleServiceException(ServiceException e, HttpServletRequest request) + { + log.error(e.getMessage(), e); + Integer code = e.getCode(); + return StringUtils.isNotNull(code) ? AjaxResult.error(code, e.getMessage()) : AjaxResult.error(e.getMessage()); + } + + /** + * 拦截未知的运行时异常 + */ + @ExceptionHandler(RuntimeException.class) + public AjaxResult handleRuntimeException(RuntimeException e, HttpServletRequest request) + { + String requestURI = request.getRequestURI(); + log.error("请求地址'{}',发生未知异常.", requestURI, e); + return AjaxResult.error(e.getMessage()); + } + + /** + * 系统异常 + */ + @ExceptionHandler(Exception.class) + public AjaxResult handleException(Exception e, HttpServletRequest request) + { + String requestURI = request.getRequestURI(); + log.error("请求地址'{}',发生系统异常.", requestURI, e); + return AjaxResult.error(e.getMessage()); + } + + /** + * 自定义验证异常 + */ + @ExceptionHandler(BindException.class) + public AjaxResult handleBindException(BindException e) + { + log.error(e.getMessage(), e); + String message = e.getAllErrors().get(0).getDefaultMessage(); + return AjaxResult.error(message); + } + + /** + * 自定义验证异常 + */ + @ExceptionHandler(MethodArgumentNotValidException.class) + public Object handleMethodArgumentNotValidException(MethodArgumentNotValidException e) + { + log.error(e.getMessage(), e); + String message = e.getBindingResult().getFieldError().getDefaultMessage(); + return AjaxResult.error(message); + } + + /** + * 演示模式异常 + */ + @ExceptionHandler(DemoModeException.class) + public AjaxResult handleDemoModeException(DemoModeException e) + { + return AjaxResult.error("演示模式,不允许操作"); + } +} diff --git a/xinda-framework/src/main/java/com/xinda/framework/web/service/PermissionService.java b/xinda-framework/src/main/java/com/xinda/framework/web/service/PermissionService.java new file mode 100644 index 0000000..8a88e3e --- /dev/null +++ b/xinda-framework/src/main/java/com/xinda/framework/web/service/PermissionService.java @@ -0,0 +1,168 @@ +package com.xinda.framework.web.service; + +import java.util.Set; +import org.springframework.stereotype.Service; +import org.springframework.util.CollectionUtils; +import com.xinda.common.core.domain.entity.SysRole; +import com.xinda.common.core.domain.model.LoginUser; +import com.xinda.common.utils.SecurityUtils; +import com.xinda.common.utils.StringUtils; +import com.xinda.framework.security.context.PermissionContextHolder; + +/** + * RuoYi首创 自定义权限实现,ss取自SpringSecurity首字母 + * + * @author ruoyi + */ +@Service("ss") +public class PermissionService +{ + /** 所有权限标识 */ + private static final String ALL_PERMISSION = "*:*:*"; + + /** 管理员角色权限标识 */ + private static final String SUPER_ADMIN = "admin"; + + private static final String ROLE_DELIMETER = ","; + + private static final String PERMISSION_DELIMETER = ","; + + /** + * 验证用户是否具备某权限 + * + * @param permission 权限字符串 + * @return 用户是否具备某权限 + */ + public boolean hasPermi(String permission) + { + if (StringUtils.isEmpty(permission)) + { + return false; + } + LoginUser loginUser = SecurityUtils.getLoginUser(); + if (StringUtils.isNull(loginUser) || CollectionUtils.isEmpty(loginUser.getPermissions())) + { + return false; + } + PermissionContextHolder.setContext(permission); + return hasPermissions(loginUser.getPermissions(), permission); + } + + /** + * 验证用户是否不具备某权限,与 hasPermi逻辑相反 + * + * @param permission 权限字符串 + * @return 用户是否不具备某权限 + */ + public boolean lacksPermi(String permission) + { + return hasPermi(permission) != true; + } + + /** + * 验证用户是否具有以下任意一个权限 + * + * @param permissions 以 PERMISSION_NAMES_DELIMETER 为分隔符的权限列表 + * @return 用户是否具有以下任意一个权限 + */ + public boolean hasAnyPermi(String permissions) + { + if (StringUtils.isEmpty(permissions)) + { + return false; + } + LoginUser loginUser = SecurityUtils.getLoginUser(); + if (StringUtils.isNull(loginUser) || CollectionUtils.isEmpty(loginUser.getPermissions())) + { + return false; + } + PermissionContextHolder.setContext(permissions); + Set authorities = loginUser.getPermissions(); + for (String permission : permissions.split(PERMISSION_DELIMETER)) + { + if (permission != null && hasPermissions(authorities, permission)) + { + return true; + } + } + return false; + } + + /** + * 判断用户是否拥有某个角色 + * + * @param role 角色字符串 + * @return 用户是否具备某角色 + */ + public boolean hasRole(String role) + { + if (StringUtils.isEmpty(role)) + { + return false; + } + LoginUser loginUser = SecurityUtils.getLoginUser(); + if (StringUtils.isNull(loginUser) || CollectionUtils.isEmpty(loginUser.getUser().getRoles())) + { + return false; + } + for (SysRole sysRole : loginUser.getUser().getRoles()) + { + String roleKey = sysRole.getRoleKey(); + if (SUPER_ADMIN.equals(roleKey) || roleKey.equals(StringUtils.trim(role))) + { + return true; + } + } + return false; + } + + /** + * 验证用户是否不具备某角色,与 isRole逻辑相反。 + * + * @param role 角色名称 + * @return 用户是否不具备某角色 + */ + public boolean lacksRole(String role) + { + return hasRole(role) != true; + } + + /** + * 验证用户是否具有以下任意一个角色 + * + * @param roles 以 ROLE_NAMES_DELIMETER 为分隔符的角色列表 + * @return 用户是否具有以下任意一个角色 + */ + public boolean hasAnyRoles(String roles) + { + if (StringUtils.isEmpty(roles)) + { + return false; + } + LoginUser loginUser = SecurityUtils.getLoginUser(); + if (StringUtils.isNull(loginUser) || CollectionUtils.isEmpty(loginUser.getUser().getRoles())) + { + return false; + } + for (String role : roles.split(ROLE_DELIMETER)) + { + if (hasRole(role)) + { + return true; + } + } + return false; + } + + /** + * 判断是否包含权限 + * + * @param permissions 权限列表 + * @param permission 权限字符串 + * @return 用户是否具备某权限 + */ + private boolean hasPermissions(Set permissions, String permission) + { + return permissions.contains(ALL_PERMISSION) || permissions.contains(StringUtils.trim(permission)); + } +} diff --git a/xinda-framework/src/main/java/com/xinda/framework/web/service/SysLoginService.java b/xinda-framework/src/main/java/com/xinda/framework/web/service/SysLoginService.java new file mode 100644 index 0000000..d893a78 --- /dev/null +++ b/xinda-framework/src/main/java/com/xinda/framework/web/service/SysLoginService.java @@ -0,0 +1,236 @@ +package com.xinda.framework.web.service; + +import com.xinda.common.constant.CacheConstants; +import com.xinda.common.constant.Constants; +import com.xinda.common.core.domain.entity.SysDept; +import com.xinda.common.core.domain.entity.SysUser; +import com.xinda.common.core.domain.model.LoginUser; +import com.xinda.common.core.redis.RedisCache; +import com.xinda.common.enums.UserStatus; +import com.xinda.common.exception.ServiceException; +import com.xinda.common.exception.user.CaptchaException; +import com.xinda.common.exception.user.CaptchaExpireException; +import com.xinda.common.exception.user.UserPasswordNotMatchException; +import com.xinda.common.utils.DateUtils; +import com.xinda.common.utils.MessageUtils; +import com.xinda.common.utils.ServletUtils; +import com.xinda.common.utils.StringUtils; +import com.xinda.common.utils.ip.IpUtils; +import com.xinda.framework.manager.AsyncManager; +import com.xinda.framework.manager.factory.AsyncFactory; +import com.xinda.framework.security.context.AuthenticationContextHolder; +import com.xinda.system.service.ISysConfigService; +import com.xinda.system.service.ISysDeptService; +import com.xinda.system.service.ISysUserService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.authentication.AuthenticationManager; +import org.springframework.security.authentication.BadCredentialsException; +import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; +import org.springframework.security.core.Authentication; +import org.springframework.security.core.userdetails.UserDetails; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; + +/** + * 登录校验方法 + * + * @author ruoyi + */ +@Component +public class SysLoginService { + @Autowired + private TokenService tokenService; + + @Resource + private AuthenticationManager authenticationManager; + + @Autowired + private RedisCache redisCache; + + @Autowired + private ISysUserService userService; + + @Autowired + private ISysConfigService configService; + + @Autowired + private UserDetailsServiceImpl userDetailsServiceImpl; + + @Resource + private SysPasswordService passwordService; + @Resource + private ISysDeptService sysDeptService; + + /** + * 登录验证 + * + * @param username 用户名 + * @param password 密码 + * @param code 验证码 + * @param uuid 唯一标识 + * @return 结果 + */ + public String login(String username, String password, String code, String uuid, Integer sourceType, String language) { + boolean captchaEnabled = configService.selectCaptchaEnabled(); + // 验证码开关 + if (captchaEnabled) { + validateCaptcha(username, code, uuid); + } + // 用户验证 + Authentication authentication = null; + try { + UsernamePasswordAuthenticationToken authenticationToken = new UsernamePasswordAuthenticationToken(username, password); + AuthenticationContextHolder.setContext(authenticationToken); + // 该方法会去调用UserDetailsServiceImpl.loadUserByUsername + authentication = authenticationManager.authenticate(authenticationToken); + } catch (Exception e) { + if (e instanceof BadCredentialsException) { + AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, MessageUtils.message("user.password.not.match"))); + throw new UserPasswordNotMatchException(); + } else { + AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, e.getMessage())); + throw new ServiceException(e.getMessage()); + } + } finally { + AuthenticationContextHolder.clearContext(); + } + AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_SUCCESS, MessageUtils.message("user.login.success"))); + LoginUser loginUser = (LoginUser) authentication.getPrincipal(); + // 移动端、小程序限制终端用户登录 + Long deptId = loginUser.getDeptId(); + if (null != sourceType && 1 == sourceType && null == deptId) { + throw new ServiceException("web端只允许租户登录!"); + } +// if (!"admin".equals(loginUser.getUsername()) && null != sourceType) { +// Long deptId = loginUser.getDeptId(); +// if (1 == sourceType && null == deptId) { +// throw new ServiceException("web端只允许租户登录!"); +// } +// if (1 != sourceType && null != deptId) { +// throw new ServiceException("只允许终端用户登录!"); +// } +// } + SysDept sysDept = sysDeptService.selectDeptById(deptId); + recordLoginInfo(loginUser.getUserId()); + loginUser.setLanguage(language); + loginUser.setDeptUserId(sysDept.getDeptUserId()); + // 生成token + return tokenService.createToken(loginUser); + } + + /** + * 第三方验证后,调用登录方法 + * + * @param username 用户名 + * @param password 密码 + * @return token + */ + public String socialLogin(String username, String password, String language) { + // 用户验证 + Authentication authentication = null; + try { + // 该方法会去调用UserDetailsServiceImpl.loadUserByUsername + authentication = authenticationManager + .authenticate(new UsernamePasswordAuthenticationToken(username, password)); + } catch (Exception e) { + if (e instanceof BadCredentialsException) { + AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, MessageUtils.message("user.password.not.match"))); + throw new UserPasswordNotMatchException(); + } else { + AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, e.getMessage())); + throw new ServiceException(e.getMessage()); + } + } + AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_SUCCESS, MessageUtils.message("user.login.success"))); + LoginUser loginUser = (LoginUser) authentication.getPrincipal(); + recordLoginInfo(loginUser.getUserId()); + loginUser.setLanguage(language); + // 生成token + return tokenService.createToken(loginUser); + } + + /** + * 三方跳转登录认证方法 + * + * @param username 系统用户名 + * @param encodePwd 系统用户密码 + * @return + */ + public String redirectLogin(String username, String encodePwd, String language) { +// UserDetails userDetails=userDetailsServiceImpl.loadUserByUsername(username); + SysUser user = userService.selectUserByUserName(username); + if (StringUtils.isNull(user)) { + throw new ServiceException("登录用户:" + username + " 不存在"); + } else if (UserStatus.DELETED.getCode().equals(user.getDelFlag())) { + throw new ServiceException("对不起,您的账号:" + username + " 已被删除"); + } else if (UserStatus.DISABLE.getCode().equals(user.getStatus())) { + throw new ServiceException("对不起,您的账号:" + username + " 已停用"); + } + // 重写验证方法 + passwordService.socialValidate(user, encodePwd); + AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_SUCCESS, MessageUtils.message("user.login.success"))); + UserDetails userDetails = userDetailsServiceImpl.createLoginUser(user); + LoginUser loginUser = (LoginUser) userDetails; + recordLoginInfo(loginUser.getUserId()); + loginUser.setLanguage(language); + // 生成token + return tokenService.createToken(loginUser); + + } + + /** + * 校验验证码 + * + * @param username 用户名 + * @param code 验证码 + * @param uuid 唯一标识 + * @return 结果 + */ + public void validateCaptcha(String username, String code, String uuid) { + String verifyKey = CacheConstants.CAPTCHA_CODE_KEY + StringUtils.nvl(uuid, ""); + String captcha = redisCache.getCacheObject(verifyKey); + redisCache.deleteObject(verifyKey); + if (captcha == null) { + AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, MessageUtils.message("user.jcaptcha.expire"))); + throw new CaptchaExpireException(); + } + if (!code.equalsIgnoreCase(captcha)) { + AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, MessageUtils.message("user.jcaptcha.error"))); + throw new CaptchaException(); + } + } + + /** + * 记录登录信息 + * + * @param userId 用户ID + */ + public void recordLoginInfo(Long userId) { + SysUser sysUser = new SysUser(); + sysUser.setUserId(userId); + sysUser.setLoginIp(IpUtils.getIpAddr(ServletUtils.getRequest())); + sysUser.setLoginDate(DateUtils.getNowDate()); + userService.updateUserProfile(sysUser); + } + + public String ssoLogin(String username, String password, String language) { + SysUser user = userService.selectUserByUserName(username); + if (StringUtils.isNull(user)) { + throw new ServiceException("登录用户:" + username + " 不存在"); + } else if (UserStatus.DELETED.getCode().equals(user.getDelFlag())) { + throw new ServiceException("对不起,您的账号:" + username + " 已被删除"); + } else if (UserStatus.DISABLE.getCode().equals(user.getStatus())) { + throw new ServiceException("对不起,您的账号:" + username + " 已停用"); + } + // 重写验证方法 + passwordService.ssoValidate(user, password); + AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_SUCCESS, MessageUtils.message("user.login.success"))); + UserDetails userDetails = userDetailsServiceImpl.createLoginUser(user); + LoginUser loginUser = (LoginUser) userDetails; + recordLoginInfo(loginUser.getUserId()); + loginUser.setLanguage(language); + // 生成token + return tokenService.createToken(loginUser); + } +} diff --git a/xinda-framework/src/main/java/com/xinda/framework/web/service/SysPasswordService.java b/xinda-framework/src/main/java/com/xinda/framework/web/service/SysPasswordService.java new file mode 100644 index 0000000..d37cafb --- /dev/null +++ b/xinda-framework/src/main/java/com/xinda/framework/web/service/SysPasswordService.java @@ -0,0 +1,158 @@ +package com.xinda.framework.web.service; + +import java.util.concurrent.TimeUnit; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.security.core.Authentication; +import org.springframework.stereotype.Component; +import com.xinda.common.constant.CacheConstants; +import com.xinda.common.constant.Constants; +import com.xinda.common.core.domain.entity.SysUser; +import com.xinda.common.core.redis.RedisCache; +import com.xinda.common.exception.user.UserPasswordNotMatchException; +import com.xinda.common.exception.user.UserPasswordRetryLimitExceedException; +import com.xinda.common.utils.MessageUtils; +import com.xinda.common.utils.SecurityUtils; +import com.xinda.framework.manager.AsyncManager; +import com.xinda.framework.manager.factory.AsyncFactory; +import com.xinda.framework.security.context.AuthenticationContextHolder; + +/** + * 登录密码方法 + * + * @author ruoyi + */ +@Component +public class SysPasswordService +{ + @Autowired + private RedisCache redisCache; + + @Value(value = "${user.password.maxRetryCount}") + private int maxRetryCount; + + @Value(value = "${user.password.lockTime}") + private int lockTime; + + /** + * 登录账户密码错误次数缓存键名 + * + * @param username 用户名 + * @return 缓存键key + */ + private String getCacheKey(String username) + { + return CacheConstants.PWD_ERR_CNT_KEY + username; + } + + public void validate(SysUser user) + { + Authentication usernamePasswordAuthenticationToken = AuthenticationContextHolder.getContext(); + String username = usernamePasswordAuthenticationToken.getName(); + String password = usernamePasswordAuthenticationToken.getCredentials().toString(); + + Integer retryCount = redisCache.getCacheObject(getCacheKey(username)); + + if (retryCount == null) + { + retryCount = 0; + } + + if (retryCount >= Integer.valueOf(maxRetryCount).intValue()) + { + AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, + MessageUtils.message("user.password.retry.limit.exceed", maxRetryCount, lockTime))); + throw new UserPasswordRetryLimitExceedException(maxRetryCount, lockTime); + } + + if (!matches(user, password)) + { + retryCount = retryCount + 1; + AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, + MessageUtils.message("user.password.retry.limit.count", retryCount))); + redisCache.setCacheObject(getCacheKey(username), retryCount, lockTime, TimeUnit.MINUTES); + throw new UserPasswordNotMatchException(); + } + else + { + clearLoginRecordCache(username); + } + } + + public void socialValidate(SysUser user, String encodePwd) + { + String username = user.getUserName(); + String password = user.getPassword(); + + Integer retryCount = redisCache.getCacheObject(getCacheKey(username)); + + if (retryCount == null) + { + retryCount = 0; + } + + if (retryCount >= Integer.valueOf(maxRetryCount).intValue()) + { + AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, + MessageUtils.message("user.password.retry.limit.exceed", maxRetryCount, lockTime))); + throw new UserPasswordRetryLimitExceedException(maxRetryCount, lockTime); + } + + if(!password.equals(encodePwd)){ + retryCount = retryCount + 1; + AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, + MessageUtils.message("user.password.retry.limit.count", retryCount))); + redisCache.setCacheObject(getCacheKey(username), retryCount, lockTime, TimeUnit.MINUTES); + throw new UserPasswordNotMatchException(); + } + else + { + clearLoginRecordCache(username); + } + } + + public boolean matches(SysUser user, String rawPassword) + { + return SecurityUtils.matchesPassword(rawPassword, user.getPassword()); + } + + public void clearLoginRecordCache(String loginName) + { + if (redisCache.hasKey(getCacheKey(loginName))) + { + redisCache.deleteObject(getCacheKey(loginName)); + } + } + + public void ssoValidate(SysUser user, String encodePwd) { + String username = user.getUserName(); + String password = user.getPassword(); + + Integer retryCount = redisCache.getCacheObject(getCacheKey(username)); + + if (retryCount == null) + { + retryCount = 0; + } + + if (retryCount >= Integer.valueOf(maxRetryCount).intValue()) + { + AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, + MessageUtils.message("user.password.retry.limit.exceed", maxRetryCount, lockTime))); + throw new UserPasswordRetryLimitExceedException(maxRetryCount, lockTime); + } + + if (!matches(user, encodePwd)) + { + retryCount = retryCount + 1; + AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, + MessageUtils.message("user.password.retry.limit.count", retryCount))); + redisCache.setCacheObject(getCacheKey(username), retryCount, lockTime, TimeUnit.MINUTES); + throw new UserPasswordNotMatchException(); + } + else + { + clearLoginRecordCache(username); + } + } +} diff --git a/xinda-framework/src/main/java/com/xinda/framework/web/service/SysPermissionService.java b/xinda-framework/src/main/java/com/xinda/framework/web/service/SysPermissionService.java new file mode 100644 index 0000000..406498b --- /dev/null +++ b/xinda-framework/src/main/java/com/xinda/framework/web/service/SysPermissionService.java @@ -0,0 +1,79 @@ +package com.xinda.framework.web.service; + +import java.util.HashSet; +import java.util.List; +import java.util.Set; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import com.xinda.common.core.domain.entity.SysRole; +import com.xinda.common.core.domain.entity.SysUser; +import com.xinda.system.service.ISysMenuService; +import com.xinda.system.service.ISysRoleService; + +/** + * 用户权限处理 + * + * @author ruoyi + */ +@Component +public class SysPermissionService +{ + @Autowired + private ISysRoleService roleService; + + @Autowired + private ISysMenuService menuService; + + /** + * 获取角色数据权限 + * + * @param user 用户信息 + * @return 角色权限信息 + */ + public Set getRolePermission(SysUser user) + { + Set roles = new HashSet(); + // 管理员拥有所有权限 + if (user.isAdmin()) + { + roles.add("admin"); + } + else + { + roles.addAll(roleService.selectRolePermissionByUserId(user.getUserId())); + } + return roles; + } + + /** + * 获取菜单数据权限 + * + * @param user 用户信息 + * @return 菜单权限信息 + */ + public Set getMenuPermission(SysUser user) + { + Set perms = new HashSet(); + // 管理员拥有所有权限 + if (user.isAdmin()) { + perms.add("*:*:*"); + } else { + List roles = user.getRoles(); + if (!roles.isEmpty() && roles.size() > 1) + { + // 多角色设置permissions属性,以便数据权限匹配权限 + for (SysRole role : roles) + { + Set rolePerms = menuService.selectMenuPermsByRoleId(role.getRoleId()); + role.setPermissions(rolePerms); + perms.addAll(rolePerms); + } + } + else + { + perms.addAll(menuService.selectMenuPermsByUserId(user.getUserId())); + } + } + return perms; + } +} diff --git a/xinda-framework/src/main/java/com/xinda/framework/web/service/SysRegisterService.java b/xinda-framework/src/main/java/com/xinda/framework/web/service/SysRegisterService.java new file mode 100644 index 0000000..f71b4d5 --- /dev/null +++ b/xinda-framework/src/main/java/com/xinda/framework/web/service/SysRegisterService.java @@ -0,0 +1,115 @@ +package com.xinda.framework.web.service; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import com.xinda.common.constant.CacheConstants; +import com.xinda.common.constant.Constants; +import com.xinda.common.constant.UserConstants; +import com.xinda.common.core.domain.entity.SysUser; +import com.xinda.common.core.domain.model.RegisterBody; +import com.xinda.common.core.redis.RedisCache; +import com.xinda.common.exception.user.CaptchaException; +import com.xinda.common.exception.user.CaptchaExpireException; +import com.xinda.common.utils.MessageUtils; +import com.xinda.common.utils.SecurityUtils; +import com.xinda.common.utils.StringUtils; +import com.xinda.framework.manager.AsyncManager; +import com.xinda.framework.manager.factory.AsyncFactory; +import com.xinda.system.service.ISysConfigService; +import com.xinda.system.service.ISysUserService; + +/** + * 注册校验方法 + * + * @author ruoyi + */ +@Component +public class SysRegisterService +{ + @Autowired + private ISysUserService userService; + + @Autowired + private ISysConfigService configService; + + @Autowired + private RedisCache redisCache; + + /** + * 注册 + */ + public String register(RegisterBody registerBody) + { + String msg = "", username = registerBody.getUsername(), password = registerBody.getPassword(); + SysUser sysUser = new SysUser(); + sysUser.setUserName(username); + + // 验证码开关 + boolean captchaEnabled = configService.selectCaptchaEnabled(); + if (captchaEnabled) + { + validateCaptcha(username, registerBody.getCode(), registerBody.getUuid()); + } + + if (StringUtils.isEmpty(username)) + { + msg = "用户名不能为空"; + } + else if (StringUtils.isEmpty(password)) + { + msg = "用户密码不能为空"; + } + else if (username.length() < UserConstants.USERNAME_MIN_LENGTH + || username.length() > UserConstants.USERNAME_MAX_LENGTH) + { + msg = "账户长度必须在2到20个字符之间"; + } + else if (password.length() < UserConstants.PASSWORD_MIN_LENGTH + || password.length() > UserConstants.PASSWORD_MAX_LENGTH) + { + msg = "密码长度必须在5到20个字符之间"; + } + else if (UserConstants.NOT_UNIQUE.equals(userService.checkUserNameUnique(sysUser))) + { + msg = "保存用户'" + username + "'失败,注册账号已存在"; + } + else + { + sysUser.setNickName(username); + sysUser.setPassword(SecurityUtils.encryptPassword(password)); + boolean regFlag = userService.registerUser(sysUser); + if (!regFlag) + { + msg = "注册失败,请联系系统管理人员"; + } + else + { + AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.REGISTER, MessageUtils.message("user.register.success"))); + } + } + return msg; + } + + /** + * 校验验证码 + * + * @param username 用户名 + * @param code 验证码 + * @param uuid 唯一标识 + * @return 结果 + */ + public void validateCaptcha(String username, String code, String uuid) + { + String verifyKey = CacheConstants.CAPTCHA_CODE_KEY + StringUtils.nvl(uuid, ""); + String captcha = redisCache.getCacheObject(verifyKey); + redisCache.deleteObject(verifyKey); + if (captcha == null) + { + throw new CaptchaExpireException(); + } + if (!code.equalsIgnoreCase(captcha)) + { + throw new CaptchaException(); + } + } +} diff --git a/xinda-framework/src/main/java/com/xinda/framework/web/service/TokenService.java b/xinda-framework/src/main/java/com/xinda/framework/web/service/TokenService.java new file mode 100644 index 0000000..93af389 --- /dev/null +++ b/xinda-framework/src/main/java/com/xinda/framework/web/service/TokenService.java @@ -0,0 +1,327 @@ +package com.xinda.framework.web.service; + +import com.xinda.common.constant.CacheConstants; +import com.xinda.common.constant.Constants; +import com.xinda.common.core.domain.entity.SysUser; +import com.xinda.common.core.domain.model.LoginUser; +import com.xinda.common.core.redis.RedisCache; +import com.xinda.common.utils.ServletUtils; +import com.xinda.common.utils.StringUtils; +import com.xinda.common.utils.ip.AddressUtils; +import com.xinda.common.utils.ip.IpUtils; +import com.xinda.common.utils.uuid.IdUtils; +import com.xinda.system.domain.SysClient; +import com.xinda.system.service.ISysClientService; +import eu.bitwalker.useragentutils.UserAgent; +import io.jsonwebtoken.Claims; +import io.jsonwebtoken.Jwts; +import io.jsonwebtoken.SignatureAlgorithm; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.security.core.userdetails.UserDetails; +import org.springframework.stereotype.Component; + +import javax.servlet.http.HttpServletRequest; +import java.util.HashMap; +import java.util.Map; +import java.util.concurrent.TimeUnit; + + +/** + * token验证处理 + * + * @author ruoyi + */ +@Component +public class TokenService +{ + // 令牌自定义标识 + @Value("${token.header}") + private String header; + + // 令牌秘钥 + @Value("${token.secret}") + private String secret; + + // 令牌有效期(默认30分钟) + @Value("${token.expireTime}") + private int expireTime; + + protected static final long MILLIS_SECOND = 1000; + + protected static final long MILLIS_MINUTE = 60 * MILLIS_SECOND; + + private static final Long MILLIS_MINUTE_TEN = 20 * 60 * 1000L; + + @Autowired + private RedisCache redisCache; + + @Autowired + private ISysClientService sysClientService; + + @Autowired + private UserDetailsServiceImpl userDetailsServiceImpl; + + /** + * 获取用户身份信息 + * + * @return 用户信息 + */ + public LoginUser getLoginUser(HttpServletRequest request) + { + // 获取请求携带的令牌 + String token = getToken(request); + if (StringUtils.isNotEmpty(token)) + { + try + { + Claims claims = parseToken(token); + // 解析对应的权限以及用户信息 + String uuid = (String) claims.get(Constants.LOGIN_USER_KEY); + String userKey = getTokenKey(uuid); + LoginUser user = redisCache.getCacheObject(userKey); + return user; + } + catch (Exception e) + { + } + } + return null; + } + + /** + * 获取用户身份信息 + * + * @return 用户信息 + */ + public LoginUser getLoginUserByToken(String token) { + if (StringUtils.isNotEmpty(token)) { + try { + Claims claims = parseToken(token); + // 解析对应的权限以及用户信息 + String uuid = (String) claims.get(Constants.LOGIN_USER_KEY); + String userKey = getTokenKey(uuid); + LoginUser user = redisCache.getCacheObject(userKey); + return user; + } catch (Exception e) { + } + } + return null; + } + + /** + * 根据用户id获取用户身份信息 + * 由于多端登录,根据token获取的用户信息不一样,所以增加一个根据用户id获取用户信息的缓存key,以后多端需要获取用户最新信息就用这个方法吧 + * @return 用户信息 + */ + public LoginUser getLoginUserByUserId(Long userId) { + if (userId != null) { + try { + String userKey = getUserIdKey(userId); + return redisCache.getCacheObject(userKey); + } catch (Exception e) { + } + } + return null; + } + + /** + * 设置用户身份信息 + */ + public void setLoginUser(LoginUser loginUser) + { + if (StringUtils.isNotNull(loginUser) && StringUtils.isNotEmpty(loginUser.getToken())) + { + refreshToken(loginUser); + } + } + + /** + * 删除用户身份信息 + */ + public void delLoginUser(String token) + { + if (StringUtils.isNotEmpty(token)) + { + String userKey = getTokenKey(token); + redisCache.deleteObject(userKey); + } + } + + /** + * 创建令牌 + * + * @param loginUser 用户信息 + * @return 令牌 + */ + public String createToken(LoginUser loginUser) + { + String token = IdUtils.fastUUID(); + loginUser.setToken(token); + setUserAgent(loginUser); + refreshToken(loginUser); + + Map claims = new HashMap<>(); + claims.put(Constants.LOGIN_USER_KEY, token); + return createToken(claims); + } + + public int addToken(SysUser user, SysClient sysClient) { + UserDetails userDetails = userDetailsServiceImpl.createLoginUser(user); + LoginUser loginUser = (LoginUser) userDetails; + sysClient.setToken(Constants.TOKEN_PREFIX + createToken(loginUser, sysClient.getClientSecret(), Math.toIntExact(sysClient.getTimeout()))); + return sysClientService.insertSysClient(sysClient); + } + + public int updateToken(SysUser user, SysClient sysClient){ + UserDetails userDetails = userDetailsServiceImpl.createLoginUser(user); + LoginUser loginUser = (LoginUser) userDetails; + sysClient.setToken(Constants.TOKEN_PREFIX + createToken(loginUser, sysClient.getClientSecret(), Math.toIntExact(sysClient.getTimeout()))); + return sysClientService.updateSysClient(sysClient); + } + + public String createToken(LoginUser loginUser, String secret, int expireTime) + { + String token = IdUtils.fastUUID(); + loginUser.setToken(token); + setUserAgent(loginUser); + refreshToken(loginUser, expireTime); + + Map claims = new HashMap<>(); + claims.put(Constants.LOGIN_USER_KEY, token); + return createToken(claims, secret); + } + + /** + * 验证令牌有效期,相差不足20分钟,自动刷新缓存 + * + * @param loginUser + * @return 令牌 + */ + public void verifyToken(LoginUser loginUser) + { + long expireTime = loginUser.getExpireTime(); + long currentTime = System.currentTimeMillis(); + if (expireTime - currentTime <= MILLIS_MINUTE_TEN) + { + refreshToken(loginUser); + } + } + + /** + * 刷新令牌有效期 + * + * @param loginUser 登录信息 + */ + public void refreshToken(LoginUser loginUser, int expireTime) + { + loginUser.setLoginTime(System.currentTimeMillis()); + loginUser.setExpireTime(loginUser.getLoginTime() + expireTime * MILLIS_MINUTE); + // 根据uuid将loginUser缓存 + String userKey = getTokenKey(loginUser.getToken()); + redisCache.setCacheObject(userKey, loginUser, expireTime, TimeUnit.MINUTES); + // 使用token作为用户信息缓存key,多端不能同步最新信息,需要重新登录,因此添加一个使用用户id作为缓存key + String userIdKey = getUserIdKey(loginUser.getUserId()); + redisCache.setCacheObject(userIdKey, loginUser, expireTime, TimeUnit.MINUTES); + } + + public void refreshToken(LoginUser loginUser) + { + loginUser.setLoginTime(System.currentTimeMillis()); + loginUser.setExpireTime(loginUser.getLoginTime() + expireTime * MILLIS_MINUTE); + // 根据uuid将loginUser缓存 + String userKey = getTokenKey(loginUser.getToken()); + redisCache.setCacheObject(userKey, loginUser, expireTime, TimeUnit.MINUTES); + // 使用token作为用户信息缓存key,多端不能同步最新信息,需要重新登录,因此添加一个使用用户id作为缓存key + String userIdKey = getUserIdKey(loginUser.getUserId()); + redisCache.setCacheObject(userIdKey, loginUser, expireTime, TimeUnit.MINUTES); + } + + /** + * 设置用户代理信息 + * + * @param loginUser 登录信息 + */ + public void setUserAgent(LoginUser loginUser) + { + UserAgent userAgent = UserAgent.parseUserAgentString(ServletUtils.getRequest().getHeader("User-Agent")); + String ip = IpUtils.getIpAddr(ServletUtils.getRequest()); + loginUser.setIpaddr(ip); + loginUser.setLoginLocation(AddressUtils.getRealAddressByIP(ip)); + loginUser.setBrowser(userAgent.getBrowser().getName()); + loginUser.setOs(userAgent.getOperatingSystem().getName()); + } + + /** + * 从数据声明生成令牌 + * + * @param claims 数据声明 + * @return 令牌 + */ + private String createToken(Map claims) + { + String token = Jwts.builder() + .setClaims(claims) + .signWith(SignatureAlgorithm.HS512, secret).compact(); + return token; + } + + private String createToken(Map claims, String secret) + { + String token = Jwts.builder() + .setClaims(claims) + .signWith(SignatureAlgorithm.HS512, secret).compact(); + return token; + } + + /** + * 从令牌中获取数据声明 + * + * @param token 令牌 + * @return 数据声明 + */ + private Claims parseToken(String token) + { + return Jwts.parser() + .setSigningKey(secret) + .parseClaimsJws(token) + .getBody(); + } + + /** + * 从令牌中获取用户名 + * + * @param token 令牌 + * @return 用户名 + */ + public String getUsernameFromToken(String token) + { + Claims claims = parseToken(token); + return claims.getSubject(); + } + + /** + * 获取请求token + * + * @param request + * @return token + */ + private String getToken(HttpServletRequest request) + { + String token = request.getHeader(header); + if (StringUtils.isNotEmpty(token) && token.startsWith(Constants.TOKEN_PREFIX)) + { + token = token.replace(Constants.TOKEN_PREFIX, ""); + } + return token; + } + + private String getTokenKey(String uuid) + { + return CacheConstants.LOGIN_TOKEN_KEY + uuid; + } + + private String getUserIdKey(Long userId) { + return CacheConstants.LOGIN_USERID_KEY + userId; + } +} diff --git a/xinda-framework/src/main/java/com/xinda/framework/web/service/UserDetailsServiceImpl.java b/xinda-framework/src/main/java/com/xinda/framework/web/service/UserDetailsServiceImpl.java new file mode 100644 index 0000000..df63c1b --- /dev/null +++ b/xinda-framework/src/main/java/com/xinda/framework/web/service/UserDetailsServiceImpl.java @@ -0,0 +1,65 @@ +package com.xinda.framework.web.service; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.core.userdetails.UserDetails; +import org.springframework.security.core.userdetails.UserDetailsService; +import org.springframework.security.core.userdetails.UsernameNotFoundException; +import org.springframework.stereotype.Service; +import com.xinda.common.core.domain.entity.SysUser; +import com.xinda.common.core.domain.model.LoginUser; +import com.xinda.common.enums.UserStatus; +import com.xinda.common.exception.ServiceException; +import com.xinda.common.utils.StringUtils; +import com.xinda.system.service.ISysUserService; + +/** + * 用户验证处理 + * + * @author ruoyi + */ +@Service +public class UserDetailsServiceImpl implements UserDetailsService +{ + private static final Logger log = LoggerFactory.getLogger(UserDetailsServiceImpl.class); + + @Autowired + private ISysUserService userService; + + @Autowired + private SysPasswordService passwordService; + + @Autowired + private SysPermissionService permissionService; + + @Override + public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException + { + SysUser user = userService.selectUserByUserName(username); + if (StringUtils.isNull(user)) + { + log.info("登录用户:{} 不存在.", username); + throw new ServiceException("登录用户:" + username + " 不存在"); + } + else if (UserStatus.DELETED.getCode().equals(user.getDelFlag())) + { + log.info("登录用户:{} 已被删除.", username); + throw new ServiceException("对不起,您的账号:" + username + " 已被删除"); + } + else if (UserStatus.DISABLE.getCode().equals(user.getStatus())) + { + log.info("登录用户:{} 已被停用.", username); + throw new ServiceException("对不起,您的账号:" + username + " 已停用"); + } + + passwordService.validate(user); + + return createLoginUser(user); + } + + public UserDetails createLoginUser(SysUser user) + { + return new LoginUser(user.getUserId(), user.getDeptId(), user.getLanguage(), user, permissionService.getMenuPermission(user)); + } +} diff --git a/xinda-gateway/gateway-boot/pom.xml b/xinda-gateway/gateway-boot/pom.xml new file mode 100644 index 0000000..9c7cf58 --- /dev/null +++ b/xinda-gateway/gateway-boot/pom.xml @@ -0,0 +1,24 @@ + + + 4.0.0 + + xinda-gateway + com.xinda + 3.8.5 + + gateway-boot + + 网关模块 + + + + + com.xinda + xinda-mq + + + + + + diff --git a/xinda-gateway/gateway-boot/src/main/java/com/xinda/gateway/boot/start/StartBoot.java b/xinda-gateway/gateway-boot/src/main/java/com/xinda/gateway/boot/start/StartBoot.java new file mode 100644 index 0000000..e615383 --- /dev/null +++ b/xinda-gateway/gateway-boot/src/main/java/com/xinda/gateway/boot/start/StartBoot.java @@ -0,0 +1,70 @@ +package com.xinda.gateway.boot.start; + +import com.xinda.mq.redischannel.listen.*; +import com.xinda.mqttclient.PubMqttClient; +import com.xinda.protocol.service.IProtocolManagerService; +import lombok.extern.slf4j.Slf4j; +import org.eclipse.paho.client.mqttv3.IMqttMessageListener; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.ApplicationArguments; +import org.springframework.boot.ApplicationRunner; +import org.springframework.core.annotation.Order; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; + +/** + * 启动类 + * + * @author bill + */ +@Component +@Slf4j +@Order(2) +public class StartBoot implements ApplicationRunner { + + + @Autowired + private PubMqttClient mqttClient; + @Autowired + private DeviceReplyListen replyListen; + @Autowired + private DeviceReportListen reportListen; + @Autowired + private DeviceStatusListen statusListen; + @Autowired + private DevicePropFetchListen propFetchListen; + @Autowired + private UpgradeListen upgradeListen; + @Autowired + private FunctionInvokeListen invokeListen; + @Resource + private DeviceOtherListen otherListen; + @Resource + private DeviceTestListen testListen; + @Resource + private IProtocolManagerService protocolManagerService; + @Resource + private IMqttMessageListener subscribeCallback; + + @Override + public void run(ApplicationArguments args) throws Exception { + try { + replyListen.listen(); + reportListen.listen(); + statusListen.listen(); + propFetchListen.listen(); + upgradeListen.listen(); + invokeListen.listen(); + otherListen.listen(); + testListen.listen(); + /*启动内部客户端,用来下发客户端服务*/ + mqttClient.setListener(subscribeCallback); + mqttClient.initialize(); + protocolManagerService.getAllProtocols(); + log.info("=>设备监听队列启动成功"); + } catch (Exception e) { + log.error("=>客户端启动失败:{}", e.getMessage(),e); + } + } +} diff --git a/xinda-gateway/gateway-boot/src/main/java/com/xinda/gateway/boot/start/subscribeCallback.java b/xinda-gateway/gateway-boot/src/main/java/com/xinda/gateway/boot/start/subscribeCallback.java new file mode 100644 index 0000000..4f70db3 --- /dev/null +++ b/xinda-gateway/gateway-boot/src/main/java/com/xinda/gateway/boot/start/subscribeCallback.java @@ -0,0 +1,62 @@ +package com.xinda.gateway.boot.start; + +import com.xinda.common.core.mq.DeviceReportBo; +import com.xinda.common.enums.ServerType; +import com.xinda.common.utils.DateUtils; +import com.xinda.common.utils.StringUtils; +import com.xinda.common.utils.gateway.mq.TopicsUtils; +import com.xinda.iot.ruleEngine.MsgContext; +import com.xinda.iot.ruleEngine.RuleProcess; +import com.xinda.mqttclient.IEmqxMessageProducer; +import lombok.extern.slf4j.Slf4j; +import org.eclipse.paho.client.mqttv3.IMqttMessageListener; +import org.eclipse.paho.client.mqttv3.MqttMessage; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; +import java.nio.charset.StandardCharsets; +import java.util.Arrays; +import java.util.Objects; + +@Slf4j +@Component +public class subscribeCallback implements IMqttMessageListener { + @Resource + private RuleProcess ruleProcess; + @Resource + private TopicsUtils topicsUtils; + @Resource + private IEmqxMessageProducer emqxMessageSerice; + + @Override + public void messageArrived(String topic, MqttMessage mqttMessage) throws Exception { + String message = new String(mqttMessage.getPayload()); + log.info("接收消息主题 : " + topic); + log.info("接收消息Qos : " + mqttMessage.getQos()); + log.info("接收消息内容 : " + message); + + //这里默认设备编号长度超过9位 + String[] split = topic.split("/"); + String sn = Arrays.stream(split).filter(imei -> imei.length() > 9).findFirst().get(); + // 规则引擎脚本处理,完成后返回结果 + MsgContext context = ruleProcess.processRuleScript(sn, 1, topic, message); + if (!Objects.isNull(context) && StringUtils.isNotEmpty(context.getPayload()) + && StringUtils.isNotEmpty(context.getTopic())) { + topic = context.getTopic(); + message = context.getPayload(); + } + String serialNumber = topicsUtils.parseSerialNumber(topic); + Long productId = topicsUtils.parseProductId(topic); + String name = topicsUtils.parseTopicName(topic); + DeviceReportBo reportBo = DeviceReportBo.builder() + .serialNumber(serialNumber) + .productId(productId) + .data(message.getBytes(StandardCharsets.UTF_8)) + .platformDate(DateUtils.getNowDate()) + .topicName(topic) + .serverType(ServerType.MQTT) + .build(); + /*将mqtt的消息发送至MQ队列处理消息 ,减轻mqtt客户端消息压力*/ + emqxMessageSerice.sendEmqxMessage(name,reportBo); + } +} diff --git a/xinda-gateway/pom.xml b/xinda-gateway/pom.xml new file mode 100644 index 0000000..40aff71 --- /dev/null +++ b/xinda-gateway/pom.xml @@ -0,0 +1,41 @@ + + + 4.0.0 + + xinda + com.xinda + 3.8.5 + + + pom + + + gateway-boot + xinda-mq + + + xinda-gateway + xinda-gateway + + + + com.xinda + xinda-common + + + + com.xinda + xinda-iot-service + + + + com.xinda + xinda-mqtt-client + + + + + + + diff --git a/xinda-gateway/xinda-mq/pom.xml b/xinda-gateway/xinda-mq/pom.xml new file mode 100644 index 0000000..cc8fdf0 --- /dev/null +++ b/xinda-gateway/xinda-mq/pom.xml @@ -0,0 +1,60 @@ + + + 4.0.0 + + xinda-gateway + com.xinda + 3.8.5 + + xinda-mq + + + + + org.apache.rocketmq + rocketmq-spring-boot-starter + 2.2.0 + + + + com.xinda + xinda-protocol-base + + + + com.xinda + xinda-protocol-collect + + + + com.xinda + sip-server + + + + cn.hutool + hutool-all + + + + com.yomahub + liteflow-core + ${liteflow.version} + + + + com.yomahub + liteflow-spring + ${liteflow.version} + + + + com.xinda + xinda-notify-core + + + + + + diff --git a/xinda-gateway/xinda-mq/src/main/java/com/xinda/mq/config/MqConfig.java b/xinda-gateway/xinda-mq/src/main/java/com/xinda/mq/config/MqConfig.java new file mode 100644 index 0000000..04d243f --- /dev/null +++ b/xinda-gateway/xinda-mq/src/main/java/com/xinda/mq/config/MqConfig.java @@ -0,0 +1,36 @@ +package com.xinda.mq.config; + +import com.xinda.common.constant.XinDaConstant; +import com.xinda.mq.redischannel.service.RedisPublishServiceImpl; +import com.xinda.mq.rocketmq.service.RocketMqPublishServiceImpl; +import com.xinda.mq.service.IMessagePublishService; +import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +/** + * mq集群配置 + * @author gsb + * @date 2022/10/10 8:27 + */ +@Configuration +//是否开启集群,默认不开启 +@ConditionalOnExpression("${cluster.enable:false}") +public class MqConfig { + + @Bean + @ConditionalOnProperty(prefix ="cluster", name = "type" ,havingValue = XinDaConstant.MQTT.REDIS_CHANNEL,matchIfMissing = true) + public IMessagePublishService redisChannelPublish(){ + return new RedisPublishServiceImpl(); + } + + //@Bean + @ConditionalOnProperty(prefix ="cluster", name = "type",havingValue = XinDaConstant.MQTT.ROCKET_MQ) + public IMessagePublishService rocketMqPublish() { + return new RocketMqPublishServiceImpl(); + } + + +} diff --git a/xinda-gateway/xinda-mq/src/main/java/com/xinda/mq/model/ReportDataBo.java b/xinda-gateway/xinda-mq/src/main/java/com/xinda/mq/model/ReportDataBo.java new file mode 100644 index 0000000..a61008a --- /dev/null +++ b/xinda-gateway/xinda-mq/src/main/java/com/xinda/mq/model/ReportDataBo.java @@ -0,0 +1,45 @@ +package com.xinda.mq.model; + +import com.xinda.common.core.thingsModel.ThingsModelSimpleItem; +import lombok.Data; +import lombok.experimental.Accessors; + +import java.util.List; + +/** + * 上报数据模型bo + * @author bill + */ +@Data +@Accessors(chain = true) +public class ReportDataBo { + + /**产品id*/ + private Long productId; + /**设备编号*/ + private String serialNumber; + /**上报消息*/ + private String message; + /**上报的数据*/ + private List dataList; + /**设备影子*/ + private boolean isShadow; + /** + * 物模型类型 + * 1=属性,2=功能,3=事件,4=设备升级,5=设备上线,6=设备下线 + */ + private int type; + /**是否执行规则引擎*/ + private boolean isRuleEngine; + /**从机编号*/ + private Integer slaveId; + /** + * 上报原数据包 + */ + private Object sources; + + private Long userId; + private String userName; + private String deviceName; + +} diff --git a/xinda-gateway/xinda-mq/src/main/java/com/xinda/mq/redischannel/config/RedisConsumeConfig.java b/xinda-gateway/xinda-mq/src/main/java/com/xinda/mq/redischannel/config/RedisConsumeConfig.java new file mode 100644 index 0000000..526e97d --- /dev/null +++ b/xinda-gateway/xinda-mq/src/main/java/com/xinda/mq/redischannel/config/RedisConsumeConfig.java @@ -0,0 +1,62 @@ +package com.xinda.mq.redischannel.config; + +import com.xinda.common.constant.XinDaConstant; +import com.xinda.mq.redischannel.consumer.RedisChannelConsume; +import lombok.extern.slf4j.Slf4j; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; +import org.springframework.cache.annotation.EnableCaching; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.data.redis.connection.RedisConnectionFactory; +import org.springframework.data.redis.core.StringRedisTemplate; +import org.springframework.data.redis.listener.PatternTopic; +import org.springframework.data.redis.listener.RedisMessageListenerContainer; +import org.springframework.data.redis.listener.adapter.MessageListenerAdapter; + +/** + * redisChannel配置 + * @author gsb + * @date 2022/10/10 8:57 + */ +@Configuration +@EnableCaching +@Slf4j +public class RedisConsumeConfig { + + @Bean + @ConditionalOnProperty(prefix ="cluster", name = "type" ,havingValue = XinDaConstant.MQTT.REDIS_CHANNEL,matchIfMissing = true) + RedisMessageListenerContainer container(RedisConnectionFactory connectionFactory, + MessageListenerAdapter listenerAdapter) { + + RedisMessageListenerContainer container = new RedisMessageListenerContainer(); + container.setConnectionFactory(connectionFactory); + container.addMessageListener(listenerAdapter, new PatternTopic(XinDaConstant.CHANNEL.PROP_READ)); + container.addMessageListener(listenerAdapter, new PatternTopic(XinDaConstant.CHANNEL.FUNCTION_INVOKE)); + /*推送消息不需要关联ClientId,只需要处理推送数据, 即使本地服务不存在该客户端*/ + //container.addMessageListener(listenerAdapter, new PatternTopic(XinDaConstant.CHANNEL.PUBLISH)); + container.addMessageListener(listenerAdapter,new PatternTopic(XinDaConstant.CHANNEL.UPGRADE)); + //container.addMessageListener(listenerAdapter,new PatternTopic(XinDaConstant.CHANNEL.OTHER)); + //container.addMessageListener(listenerAdapter, new PatternTopic(XinDaConstant.CHANNEL.PUBLISH_ACK)); + //container.addMessageListener(listenerAdapter, new PatternTopic(XinDaConstant.CHANNEL.PUB_REC)); + //container.addMessageListener(listenerAdapter, new PatternTopic(XinDaConstant.CHANNEL.PUB_REL)); + //container.addMessageListener(listenerAdapter, new PatternTopic(XinDaConstant.CHANNEL.PUB_COMP)); + return container; + } + + /**配置消息监听类 默认监听方法onMessage*/ + @Bean + @ConditionalOnProperty(prefix ="cluster", name = "type" ,havingValue = XinDaConstant.MQTT.REDIS_CHANNEL,matchIfMissing = true) + MessageListenerAdapter listenerAdapter(RedisChannelConsume consume){ + return new MessageListenerAdapter(consume,"onMessage"); + } + + @Bean + @ConditionalOnProperty(prefix ="cluster", name = "type" ,havingValue = XinDaConstant.MQTT.REDIS_CHANNEL,matchIfMissing = true) + StringRedisTemplate template(RedisConnectionFactory connectionFactory){ + return new StringRedisTemplate(connectionFactory); + } + + + + +} diff --git a/xinda-gateway/xinda-mq/src/main/java/com/xinda/mq/redischannel/consumer/DeviceOtherMsgConsumer.java b/xinda-gateway/xinda-mq/src/main/java/com/xinda/mq/redischannel/consumer/DeviceOtherMsgConsumer.java new file mode 100644 index 0000000..6f495df --- /dev/null +++ b/xinda-gateway/xinda-mq/src/main/java/com/xinda/mq/redischannel/consumer/DeviceOtherMsgConsumer.java @@ -0,0 +1,34 @@ +package com.xinda.mq.redischannel.consumer; + +import com.xinda.common.constant.XinDaConstant; +import com.xinda.common.core.mq.DeviceReportBo; +import com.xinda.mq.service.impl.DeviceOtherMsgHandler; + +import lombok.extern.slf4j.Slf4j; +import org.springframework.scheduling.annotation.Async; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; + +/** + * @author gsb + * @date 2023/2/27 14:33 + */ +@Slf4j +@Component +public class DeviceOtherMsgConsumer { + + @Resource + private DeviceOtherMsgHandler otherMsgHandler; + + @Async(XinDaConstant.TASK.DEVICE_OTHER_TASK) + public void consume(DeviceReportBo bo){ + try { + //处理emq订阅的非 property/post 属性上报的消息 ,因为其他消息量小,放在一起处理 + otherMsgHandler.messageHandler(bo); + }catch (Exception e){ + log.error("=>设备其他消息处理出错",e); + } + } + +} diff --git a/xinda-gateway/xinda-mq/src/main/java/com/xinda/mq/redischannel/consumer/DevicePropFetchConsumer.java b/xinda-gateway/xinda-mq/src/main/java/com/xinda/mq/redischannel/consumer/DevicePropFetchConsumer.java new file mode 100644 index 0000000..fd919ca --- /dev/null +++ b/xinda-gateway/xinda-mq/src/main/java/com/xinda/mq/redischannel/consumer/DevicePropFetchConsumer.java @@ -0,0 +1,106 @@ +package com.xinda.mq.redischannel.consumer; + +import com.xinda.common.constant.XinDaConstant; +import com.xinda.common.core.mq.message.DeviceDownMessage; +import com.xinda.common.core.mq.message.ModbusPollMsg; +import com.xinda.common.core.mq.message.PropRead; +import com.xinda.common.core.protocol.Message; +import com.xinda.common.core.redis.RedisCache; +import com.xinda.common.core.redis.RedisKeyBuilder; +import com.xinda.common.enums.DeviceStatus; +import com.xinda.common.enums.ServerType; +import com.xinda.common.enums.TopicType; +import com.xinda.common.utils.DateUtils; +import com.xinda.common.utils.gateway.mq.TopicsUtils; +import com.xinda.common.utils.gateway.protocol.ByteUtils; +import com.xinda.common.utils.modbus.ModbusUtils; +import com.xinda.iot.model.DeviceStatusVO; +import com.xinda.iot.service.IDeviceService; +import com.xinda.iot.service.IFunctionLogService; +import com.xinda.mq.service.impl.MessageManager; +import com.xinda.mqttclient.PubMqttClient; +import io.netty.buffer.ByteBufUtil; +import io.netty.buffer.Unpooled; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.scheduling.annotation.Async; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; +import java.util.List; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.locks.Lock; +import java.util.concurrent.locks.ReentrantLock; + +/** + * 平台定时批量获取设备属性(或单个获取) + * + * @author bill + */ +@Slf4j +@Component +public class DevicePropFetchConsumer { + + + @Autowired + private PubMqttClient pubMqttClient; + @Autowired + private RedisCache redisCache; + @Resource + private MessageManager messageManager; + @Resource + private TopicsUtils topicsUtils; + @Resource + private IFunctionLogService functionLogService; + //锁集合 + private final ConcurrentHashMap taskLocks = new ConcurrentHashMap<>(); + + + @Async(XinDaConstant.TASK.DEVICE_FETCH_PROP_TASK) + public void consume(ModbusPollMsg task) { + String serialNumber = task.getSerialNumber(); + //获取一个线程锁 + Lock lock = taskLocks.computeIfAbsent(serialNumber, k -> new ReentrantLock()); + //阻塞直到获取到锁 + lock.lock(); + try { + Long productId = task.getProductId(); + List commandList = task.getCommandList(); + ServerType serverType = ServerType.explain(task.getTransport()); + String topic = topicsUtils.buildTopic(productId, serialNumber, TopicType.FUNCTION_GET); + for (String command : commandList) { + String cacheKey = RedisKeyBuilder.buildModbusRuntimeCacheKey(serialNumber); + redisCache.zSetAdd(cacheKey, command, DateUtils.getTimestampSeconds()); + switch (serverType) { + //通过mqtt内部客户端 下发指令 + case MQTT: + publish(topic, ByteBufUtil.decodeHexDump(command)); + log.info("=>MQTT-线程=[{}],轮询指令:[{}],主题:[{}]", Thread.currentThread().getName(), command, topic); + break; + // 下发TCP客户端 + case TCP: + Message msg = new Message(); + msg.setClientId(serialNumber); + msg.setPayload(Unpooled.wrappedBuffer(ByteBufUtil.decodeHexDump(command))); + messageManager.requestR(serialNumber, msg, Message.class); + log.info("=>TCP-线程=[{}],轮询指令:[{}]", Thread.currentThread().getName(), command); + break; + } + //指令间隔时间 + Thread.sleep(1000); + } + + } catch (Exception e) { + log.error("线程错误e", e); + } finally { + lock.unlock(); + } + } + + public void publish(String topic, byte[] pushMessage) { + redisCache.incr2(XinDaConstant.REDIS.MESSAGE_SEND_TOTAL, -1L); + redisCache.incr2(XinDaConstant.REDIS.MESSAGE_SEND_TODAY, 60 * 60 * 24); + pubMqttClient.publish(pushMessage, topic, false, 0); + } +} diff --git a/xinda-gateway/xinda-mq/src/main/java/com/xinda/mq/redischannel/consumer/DeviceReplyMsgConsumer.java b/xinda-gateway/xinda-mq/src/main/java/com/xinda/mq/redischannel/consumer/DeviceReplyMsgConsumer.java new file mode 100644 index 0000000..59e4c85 --- /dev/null +++ b/xinda-gateway/xinda-mq/src/main/java/com/xinda/mq/redischannel/consumer/DeviceReplyMsgConsumer.java @@ -0,0 +1,44 @@ +package com.xinda.mq.redischannel.consumer; + +import com.xinda.common.constant.XinDaConstant; +import com.xinda.common.core.mq.DeviceReportBo; +import com.xinda.mq.service.IDeviceReportMessageService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.scheduling.annotation.Async; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; + +/** + * 设备消息回复 + * + * @author gsb + * @date 2022/10/10 11:12 + */ +@Component +@Slf4j +public class DeviceReplyMsgConsumer { + + + @Resource + private IDeviceReportMessageService deviceReportMessageService; + + + /*设备回调消息,统一用上报model*/ + @Async(XinDaConstant.TASK.DEVICE_REPLY_MESSAGE_TASK) + public void consume(DeviceReportBo bo) { + try { + String topicName = bo.getTopicName(); + + if (topicName.endsWith(XinDaConstant.TOPIC.MSG_REPLY)) { + //普通设备回复消息 + deviceReportMessageService.parseReplyMsg(bo); + } else if (topicName.endsWith(XinDaConstant.TOPIC.UPGRADE_REPLY)) { + //OTA升级的回复消息 + deviceReportMessageService.parseOTAUpdateReply(bo); + } + } catch (Exception e) { + log.error("=>设备回复消息消费异常", e); + } + } +} diff --git a/xinda-gateway/xinda-mq/src/main/java/com/xinda/mq/redischannel/consumer/DeviceReportMsgConsumer.java b/xinda-gateway/xinda-mq/src/main/java/com/xinda/mq/redischannel/consumer/DeviceReportMsgConsumer.java new file mode 100644 index 0000000..f2aac2a --- /dev/null +++ b/xinda-gateway/xinda-mq/src/main/java/com/xinda/mq/redischannel/consumer/DeviceReportMsgConsumer.java @@ -0,0 +1,36 @@ +package com.xinda.mq.redischannel.consumer; + +import com.xinda.common.constant.XinDaConstant; +import com.xinda.common.core.mq.DeviceReportBo; +import com.xinda.common.core.redis.RedisCache; +import com.xinda.mq.service.IDeviceReportMessageService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.scheduling.annotation.Async; +import org.springframework.stereotype.Component; + +/** + * 设备上报消息处理 + * + * @author bill + */ +@Slf4j +@Component +public class DeviceReportMsgConsumer { + + + @Autowired + private IDeviceReportMessageService reportMessageService; + + @Async(XinDaConstant.TASK.DEVICE_UP_MESSAGE_TASK) + public void consume(DeviceReportBo bo) { + try { + //处理数据解析 + reportMessageService.parseReportMsg(bo); + } catch (Exception e) { + log.error("设备主动上报队列监听异常", e); + } + } + + +} diff --git a/xinda-gateway/xinda-mq/src/main/java/com/xinda/mq/redischannel/consumer/DeviceStatusConsumer.java b/xinda-gateway/xinda-mq/src/main/java/com/xinda/mq/redischannel/consumer/DeviceStatusConsumer.java new file mode 100644 index 0000000..ab565b1 --- /dev/null +++ b/xinda-gateway/xinda-mq/src/main/java/com/xinda/mq/redischannel/consumer/DeviceStatusConsumer.java @@ -0,0 +1,147 @@ +package com.xinda.mq.redischannel.consumer; + +import com.alibaba.fastjson2.JSONObject; +import com.xinda.base.service.ISessionStore; +import com.xinda.common.constant.XinDaConstant; +import com.xinda.common.core.device.DeviceAndProtocol; +import com.xinda.common.core.mq.DeviceStatusBo; +import com.xinda.common.core.mq.MQSendMessageBo; +import com.xinda.common.core.thingsModel.ThingsModelSimpleItem; +import com.xinda.common.enums.DeviceStatus; +import com.xinda.iot.domain.Device; +import com.xinda.iot.domain.Product; +import com.xinda.iot.model.ThingsModels.ThingsModelShadow; +import com.xinda.iot.service.IDeviceService; +import com.xinda.iot.service.IProductService; +import com.xinda.iot.cache.IDeviceCache; +import com.xinda.iot.util.SnowflakeIdWorker; +import com.xinda.mq.model.ReportDataBo; +import com.xinda.mq.redischannel.producer.MessageProducer; +import com.xinda.mq.service.IMqttMessagePublish; +import com.xinda.mq.service.IRuleEngine; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; + +import javax.annotation.Resource; +import java.math.BigDecimal; +import java.util.List; + +/** + * 设备状态消息处理类 + * + * @author gsb + * @date 2022/10/10 11:02 + */ +@Slf4j +@Component +public class DeviceStatusConsumer { + + @Autowired + private IDeviceCache deviceCache; + @Resource + private IRuleEngine ruleEngine; + @Resource + private IDeviceService deviceService; + @Resource + private IProductService productService; + @Resource + private ISessionStore sessionStore; + @Resource + private IMqttMessagePublish mqttMessagePublish; + @Value("${server.broker.enabled}") + private Boolean enabled; + private SnowflakeIdWorker snowflakeIdWorker = new SnowflakeIdWorker(2); + + public synchronized void consume(DeviceStatusBo bo) { + try { + Device device = deviceService.selectDeviceBySerialNumber(bo.getSerialNumber()); + if (device == null) {//设备不存在,添加设备 + device = new Device(); + device.setDeviceName("设备" + bo.getSerialNumber()); + device.setDeviceId(0L); + device.setDeviceType(1); + device.setFirmwareVersion(new BigDecimal(1)); + device.setIsShadow(0); + device.setIsSimulate(0); + device.setLocationWay(1); + device.setProductId(147L); + device.setProductName("测试"); + device.setSerialNumber(bo.getSerialNumber()); + device.setStatus(1); + device.setTenantId(1L); + device.setTenantName("admin"); + deviceService.insertDeviceTest(device); + device = deviceService.selectDeviceBySerialNumber(bo.getSerialNumber()); + } + Product product = productService.selectProductByProductId(device.getProductId()); + if (enabled && product.getDeviceType() != 3) { //如果使用Netty版本 监控设备不走这里 + boolean containsKey = sessionStore.containsKey(bo.getSerialNumber()); + boolean isOnline = device.getStatus() == 3; + log.info("=>session:{},数据库:{},更新状态:{}", containsKey, isOnline, bo.getStatus().getCode()); + if (containsKey && !isOnline) { + //如果session存在,但数据库状态不在线,则以session为准 + bo.setStatus(DeviceStatus.ONLINE); + } + if (!containsKey && isOnline) { + bo.setStatus(DeviceStatus.OFFLINE); + } + } + /*更新设备状态*/ + deviceCache.updateDeviceStatusCache(bo, device); + //处理影子模式值 + this.handlerShadow(device, bo.getStatus()); + //设备上下线执行规则引擎 + ReportDataBo dataBo = new ReportDataBo(); + dataBo.setRuleEngine(true); + dataBo.setProductId(device.getProductId()); + dataBo.setType(bo.getStatus().equals(DeviceStatus.ONLINE) ? 5 : 6); + dataBo.setSerialNumber(bo.getSerialNumber()); + ruleEngine.ruleMatch(dataBo); + } catch (Exception e) { + log.error("=>设备状态处理异常", e); + } + } + + private void handlerShadow(Device device, DeviceStatus status) { + //获取设备协议编码 + DeviceAndProtocol dp = deviceService.selectProtocolBySerialNumber(device.getSerialNumber()); + String protocolCode = dp.getProtocolCode(); + /* 设备上线 处理影子值*/ + if (status.equals(DeviceStatus.ONLINE) && device.getIsShadow() == 1) { + ThingsModelShadow shadow = deviceService.getDeviceShadowThingsModel(device); + List properties = shadow.getProperties(); + List functions = shadow.getFunctions(); + //JsonArray组合发送 + if (XinDaConstant.PROTOCOL.JsonArray.equals(protocolCode)) { + if (!CollectionUtils.isEmpty(properties)) { + mqttMessagePublish.publishProperty(device.getProductId(), device.getSerialNumber(), properties, 3); + } + if (!CollectionUtils.isEmpty(functions)) { + mqttMessagePublish.publishFunction(device.getProductId(), device.getSerialNumber(), functions, 3); + } + } else { //其他协议单个发送 + functions.addAll(properties); + if (!CollectionUtils.isEmpty(functions)) { + for (ThingsModelSimpleItem function : functions) { + MQSendMessageBo bo = new MQSendMessageBo(); + bo.setDp(dp); + bo.setShadow(false); + bo.setIdentifier(function.getId()); + bo.setSerialNumber(device.getSerialNumber()); + JSONObject jsonObject = new JSONObject(); + jsonObject.put(function.getId(), function.getValue()); + bo.setParams(jsonObject); + bo.setValue(function.getValue()); + long id = snowflakeIdWorker.nextId(); + bo.setMessageId(id + ""); + //发送到MQ处理 + MessageProducer.sendFunctionInvoke(bo); + } + } + } + } + } +} diff --git a/xinda-gateway/xinda-mq/src/main/java/com/xinda/mq/redischannel/consumer/DeviceTestConsumer.java b/xinda-gateway/xinda-mq/src/main/java/com/xinda/mq/redischannel/consumer/DeviceTestConsumer.java new file mode 100644 index 0000000..e98e098 --- /dev/null +++ b/xinda-gateway/xinda-mq/src/main/java/com/xinda/mq/redischannel/consumer/DeviceTestConsumer.java @@ -0,0 +1,31 @@ +package com.xinda.mq.redischannel.consumer; + +import com.xinda.common.constant.XinDaConstant; +import com.xinda.common.core.mq.DeviceTestReportBo; +import com.xinda.mq.service.IDeviceTestService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.scheduling.annotation.Async; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; + +/** + * @author bill + */ +@Slf4j +@Component +public class DeviceTestConsumer { + + @Resource + private IDeviceTestService testHandler; + + @Async(XinDaConstant.TASK.DEVICE_TEST_TASK) + public void consume(DeviceTestReportBo bo){ + try { + //处理emq订阅的非 property/post 属性上报的消息 ,因为其他消息量小,放在一起处理 + testHandler.messageHandler(bo); + }catch (Exception e){ + log.error("=>设备其他消息处理出错",e); + } + } +} diff --git a/xinda-gateway/xinda-mq/src/main/java/com/xinda/mq/redischannel/consumer/FunctionInvokeConsumer.java b/xinda-gateway/xinda-mq/src/main/java/com/xinda/mq/redischannel/consumer/FunctionInvokeConsumer.java new file mode 100644 index 0000000..2d7c1fa --- /dev/null +++ b/xinda-gateway/xinda-mq/src/main/java/com/xinda/mq/redischannel/consumer/FunctionInvokeConsumer.java @@ -0,0 +1,38 @@ +package com.xinda.mq.redischannel.consumer; + +import com.xinda.common.constant.XinDaConstant; +import com.xinda.common.core.device.DeviceAndProtocol; +import com.xinda.common.core.mq.MQSendMessageBo; +import com.xinda.common.exception.ServiceException; +import com.xinda.iot.service.IDeviceService; +import com.xinda.mq.service.IMqttMessagePublish; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.scheduling.annotation.Async; +import org.springframework.stereotype.Component; + +import java.util.Optional; + +/** + * 指令(服务)下发处理类 + * + * @author gsb + * @date 2022/10/11 8:17 + */ +@Slf4j +@Component +public class FunctionInvokeConsumer { + + + @Autowired + private IMqttMessagePublish functionSendService; + + @Async(XinDaConstant.TASK.FUNCTION_INVOKE_TASK) + public void handler(MQSendMessageBo bo) { + try { + functionSendService.funcSend(bo); + } catch (Exception e) { + log.error("=>服务下发异常", e); + } + } +} diff --git a/xinda-gateway/xinda-mq/src/main/java/com/xinda/mq/redischannel/consumer/RedisChannelConsume.java b/xinda-gateway/xinda-mq/src/main/java/com/xinda/mq/redischannel/consumer/RedisChannelConsume.java new file mode 100644 index 0000000..f6a2ec1 --- /dev/null +++ b/xinda-gateway/xinda-mq/src/main/java/com/xinda/mq/redischannel/consumer/RedisChannelConsume.java @@ -0,0 +1,61 @@ +package com.xinda.mq.redischannel.consumer; + +import com.alibaba.fastjson2.JSONObject; +import com.xinda.common.constant.XinDaConstant; +import com.xinda.common.core.mq.DeviceStatusBo; +import com.xinda.common.core.mq.MQSendMessageBo; +import com.xinda.common.core.mq.message.DeviceDownMessage; +import com.xinda.common.core.mq.message.ModbusPollMsg; +import com.xinda.common.core.mq.ota.OtaUpgradeBo; +import com.xinda.mq.redischannel.queue.DevicePropFetchQueue; +import com.xinda.mq.redischannel.queue.DeviceStatusQueue; +import com.xinda.mq.redischannel.queue.FunctionInvokeQueue; +import com.xinda.mq.redischannel.queue.OtaUpgradeQueue; +import lombok.extern.slf4j.Slf4j; +import org.springframework.data.redis.connection.Message; +import org.springframework.data.redis.connection.MessageListener; +import org.springframework.stereotype.Component; + +/** + * redisChannel消息监听 + * + * @author gsb + * @date 2022/10/10 9:17 + */ +@Component +@Slf4j +public class RedisChannelConsume implements MessageListener { + + /** + * 监听推送消息 + */ + @Override + public void onMessage(Message message, byte[] pattern) { + try { + /*获取channel*/ + String channel = new String(message.getChannel()); + /*获取消息*/ + String body = new String(message.getBody()); + switch (channel) { + case XinDaConstant.CHANNEL.PROP_READ: + ModbusPollMsg downMessage = JSONObject.parseObject(body, ModbusPollMsg.class); + DevicePropFetchQueue.offer(downMessage); + break; + case XinDaConstant.CHANNEL.FUNCTION_INVOKE: + MQSendMessageBo sendBo = JSONObject.parseObject(body, MQSendMessageBo.class); + FunctionInvokeQueue.offer(sendBo); + break; + case XinDaConstant.CHANNEL.UPGRADE: + OtaUpgradeBo upgradeBo = JSONObject.parseObject(body, OtaUpgradeBo.class); + OtaUpgradeQueue.offer(upgradeBo); + break; + + default: + log.error("=>未知消息类型,channel:[{}]", channel); + break; + } + } catch (Exception e) { + log.error("=>redisChannel处理消息异常,e", e); + } + } +} diff --git a/xinda-gateway/xinda-mq/src/main/java/com/xinda/mq/redischannel/listen/DeviceOtherListen.java b/xinda-gateway/xinda-mq/src/main/java/com/xinda/mq/redischannel/listen/DeviceOtherListen.java new file mode 100644 index 0000000..afe449a --- /dev/null +++ b/xinda-gateway/xinda-mq/src/main/java/com/xinda/mq/redischannel/listen/DeviceOtherListen.java @@ -0,0 +1,35 @@ +package com.xinda.mq.redischannel.listen; + +import com.xinda.common.constant.XinDaConstant; +import com.xinda.common.core.mq.DeviceReportBo; +import com.xinda.mq.redischannel.consumer.DeviceOtherMsgConsumer; +import com.xinda.mq.redischannel.queue.DeviceOtherQueue; +import lombok.extern.slf4j.Slf4j; +import org.springframework.scheduling.annotation.Async; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; + +/** + * @author gsb + * @date 2023/2/28 10:02 + */ +@Slf4j +@Component +public class DeviceOtherListen { + + @Resource + private DeviceOtherMsgConsumer otherMsgConsumer; + + @Async(XinDaConstant.TASK.DEVICE_OTHER_TASK) + public void listen(){ + while (true){ + try { + DeviceReportBo reportBo = DeviceOtherQueue.take(); + otherMsgConsumer.consume(reportBo); + }catch (Exception e){ + log.error("=>emq数据转发异常"); + } + } + } +} diff --git a/xinda-gateway/xinda-mq/src/main/java/com/xinda/mq/redischannel/listen/DevicePropFetchListen.java b/xinda-gateway/xinda-mq/src/main/java/com/xinda/mq/redischannel/listen/DevicePropFetchListen.java new file mode 100644 index 0000000..e579573 --- /dev/null +++ b/xinda-gateway/xinda-mq/src/main/java/com/xinda/mq/redischannel/listen/DevicePropFetchListen.java @@ -0,0 +1,37 @@ +package com.xinda.mq.redischannel.listen; + +import com.xinda.common.constant.XinDaConstant; +import com.xinda.common.core.mq.message.DeviceDownMessage; +import com.xinda.common.core.mq.message.ModbusPollMsg; +import com.xinda.mq.redischannel.consumer.DevicePropFetchConsumer; +import com.xinda.mq.redischannel.queue.DevicePropFetchQueue; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.scheduling.annotation.Async; +import org.springframework.stereotype.Component; + +/** + * 设备属性获取(定时获取)监听 + * + * @author gsb + * @date 2022/10/11 8:26 + */ +@Slf4j +@Component +public class DevicePropFetchListen { + + @Autowired + private DevicePropFetchConsumer devicePropFetchConsumer; + + @Async(XinDaConstant.TASK.MESSAGE_CONSUME_TASK_FETCH) + public void listen() { + while (true) { + try { + ModbusPollMsg take = DevicePropFetchQueue.take(); + devicePropFetchConsumer.consume(take); + } catch (Exception e) { + log.error("=>设备属性获取异常", e); + } + } + } +} diff --git a/xinda-gateway/xinda-mq/src/main/java/com/xinda/mq/redischannel/listen/DeviceReplyListen.java b/xinda-gateway/xinda-mq/src/main/java/com/xinda/mq/redischannel/listen/DeviceReplyListen.java new file mode 100644 index 0000000..61cb55a --- /dev/null +++ b/xinda-gateway/xinda-mq/src/main/java/com/xinda/mq/redischannel/listen/DeviceReplyListen.java @@ -0,0 +1,39 @@ +package com.xinda.mq.redischannel.listen; + +import com.xinda.common.constant.XinDaConstant; +import com.xinda.common.core.mq.DeviceReportBo; +import com.xinda.mq.redischannel.consumer.DeviceReplyMsgConsumer; +import com.xinda.mq.redischannel.queue.DeviceReplyQueue; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.scheduling.annotation.Async; +import org.springframework.stereotype.Component; + +import javax.annotation.PostConstruct; + +/** + * 设备回调消息监听 + * + * @author bill + */ +@Slf4j +@Component +public class DeviceReplyListen { + + @Autowired + private DeviceReplyMsgConsumer deviceReplyMsgHandler; + + @Async(XinDaConstant.TASK.MESSAGE_CONSUME_TASK_PUB) + public void listen() { + while (true) { + try { + /*读队列消息*/ + DeviceReportBo reportBo = DeviceReplyQueue.take(); + /*处理消息*/ + deviceReplyMsgHandler.consume(reportBo); + } catch (Exception e) { + log.error("=>设备回调消息监听异常", e); + } + } + } +} diff --git a/xinda-gateway/xinda-mq/src/main/java/com/xinda/mq/redischannel/listen/DeviceReportListen.java b/xinda-gateway/xinda-mq/src/main/java/com/xinda/mq/redischannel/listen/DeviceReportListen.java new file mode 100644 index 0000000..61e7518 --- /dev/null +++ b/xinda-gateway/xinda-mq/src/main/java/com/xinda/mq/redischannel/listen/DeviceReportListen.java @@ -0,0 +1,40 @@ +package com.xinda.mq.redischannel.listen; + +import com.xinda.common.constant.XinDaConstant; +import com.xinda.common.core.mq.DeviceReportBo; +import com.xinda.mq.redischannel.consumer.DeviceReportMsgConsumer; +import com.xinda.mq.redischannel.queue.DeviceReplyQueue; +import com.xinda.mq.redischannel.queue.DeviceReportQueue; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.scheduling.annotation.Async; +import org.springframework.stereotype.Component; + +import javax.annotation.PostConstruct; + +/** + * 设备主动上报消息监听 + * + * @author bill + */ +@Slf4j +@Component +public class DeviceReportListen { + + @Autowired + private DeviceReportMsgConsumer reportMsgConsumer; + + @Async(XinDaConstant.TASK.MESSAGE_CONSUME_TASK_PUB) + public void listen() { + while (true) { + try { + /*取出数据*/ + DeviceReportBo reportBo = DeviceReportQueue.take(); + /*处理数据*/ + reportMsgConsumer.consume(reportBo); + } catch (Exception e) { + log.error("=>设备上报数据监听异常", e); + } + } + } +} diff --git a/xinda-gateway/xinda-mq/src/main/java/com/xinda/mq/redischannel/listen/DeviceStatusListen.java b/xinda-gateway/xinda-mq/src/main/java/com/xinda/mq/redischannel/listen/DeviceStatusListen.java new file mode 100644 index 0000000..ce9feb4 --- /dev/null +++ b/xinda-gateway/xinda-mq/src/main/java/com/xinda/mq/redischannel/listen/DeviceStatusListen.java @@ -0,0 +1,35 @@ +package com.xinda.mq.redischannel.listen; + +import com.xinda.common.constant.XinDaConstant; +import com.xinda.common.core.mq.DeviceStatusBo; +import com.xinda.mq.redischannel.consumer.DeviceStatusConsumer; +import com.xinda.mq.redischannel.queue.DeviceStatusQueue; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.scheduling.annotation.Async; +import org.springframework.stereotype.Component; + +/** + * 设备状态监听 + * @author bill + */ +@Slf4j +@Component +public class DeviceStatusListen { + + @Autowired + private DeviceStatusConsumer deviceStatusConsumer; + + @Async(XinDaConstant.TASK.MESSAGE_CONSUME_TASK) + public void listen() { + try { + while (true) { + DeviceStatusBo status = DeviceStatusQueue.take(); + deviceStatusConsumer.consume(status); + } + } catch (Exception e) { + log.error("设备状态监听错误", e); + } + } + +} diff --git a/xinda-gateway/xinda-mq/src/main/java/com/xinda/mq/redischannel/listen/DeviceTestListen.java b/xinda-gateway/xinda-mq/src/main/java/com/xinda/mq/redischannel/listen/DeviceTestListen.java new file mode 100644 index 0000000..1df2f96 --- /dev/null +++ b/xinda-gateway/xinda-mq/src/main/java/com/xinda/mq/redischannel/listen/DeviceTestListen.java @@ -0,0 +1,35 @@ +package com.xinda.mq.redischannel.listen; + +import com.xinda.common.constant.XinDaConstant; +import com.xinda.common.core.mq.DeviceTestReportBo; +import com.xinda.mq.redischannel.consumer.DeviceTestConsumer; +import com.xinda.mq.redischannel.queue.DeviceTestQueue; +import lombok.extern.slf4j.Slf4j; +import org.springframework.scheduling.annotation.Async; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; + +/** + * @author bill + */ +@Component +@Slf4j +public class DeviceTestListen { + + @Resource + private DeviceTestConsumer deviceTestConsumer; + + @Async(XinDaConstant.TASK.DEVICE_TEST_TASK) + public void listen(){ + while (true){ + try { + DeviceTestReportBo take = DeviceTestQueue.take(); + + deviceTestConsumer.consume(take); + }catch (Exception e){ + log.error("=>emq数据转发异常"); + } + } + } +} diff --git a/xinda-gateway/xinda-mq/src/main/java/com/xinda/mq/redischannel/listen/FunctionInvokeListen.java b/xinda-gateway/xinda-mq/src/main/java/com/xinda/mq/redischannel/listen/FunctionInvokeListen.java new file mode 100644 index 0000000..2187fcc --- /dev/null +++ b/xinda-gateway/xinda-mq/src/main/java/com/xinda/mq/redischannel/listen/FunctionInvokeListen.java @@ -0,0 +1,35 @@ +package com.xinda.mq.redischannel.listen; + +import com.xinda.common.constant.XinDaConstant; +import com.xinda.common.core.mq.MQSendMessageBo; +import com.xinda.mq.redischannel.consumer.FunctionInvokeConsumer; +import com.xinda.mq.redischannel.queue.FunctionInvokeQueue; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.scheduling.annotation.Async; +import org.springframework.stereotype.Component; + +/** + * 设备服务下发监听 + * + * @author bill + */ +@Slf4j +@Component +public class FunctionInvokeListen { + + @Autowired + private FunctionInvokeConsumer functionInvokeConsumer; + + @Async(XinDaConstant.TASK.MESSAGE_CONSUME_TASK) + public void listen() { + while (true) { + try { + MQSendMessageBo sendBo = FunctionInvokeQueue.take(); + functionInvokeConsumer.handler(sendBo); + } catch (Exception e) { + log.error("=>下发服务消费异常", e); + } + } + } +} diff --git a/xinda-gateway/xinda-mq/src/main/java/com/xinda/mq/redischannel/listen/UpgradeListen.java b/xinda-gateway/xinda-mq/src/main/java/com/xinda/mq/redischannel/listen/UpgradeListen.java new file mode 100644 index 0000000..d5dfc09 --- /dev/null +++ b/xinda-gateway/xinda-mq/src/main/java/com/xinda/mq/redischannel/listen/UpgradeListen.java @@ -0,0 +1,38 @@ +package com.xinda.mq.redischannel.listen; + +import com.xinda.common.constant.XinDaConstant; +import com.xinda.common.core.mq.ota.OtaUpgradeBo; +import com.xinda.mq.redischannel.queue.OtaUpgradeQueue; +import com.xinda.mq.service.IMqttMessagePublish; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.scheduling.annotation.Async; +import org.springframework.stereotype.Service; + +/** + * OTA升级消息监听 + * + * @author gsb + * @date 2022/10/11 8:36 + */ +@Slf4j +@Service +public class UpgradeListen { + + @Autowired + private IMqttMessagePublish functionSendService; + + @Async(XinDaConstant.TASK.MESSAGE_CONSUME_TASK) + public void listen() { + while (true) { + try { + /*获取队列中的OTA升级消息*/ + OtaUpgradeBo upgradeBo = OtaUpgradeQueue.take(); + // OTA升级处理 + functionSendService.upGradeOTA(upgradeBo); + } catch (Exception e) { + log.error("->OTA消息监听异常", e); + } + } + } +} diff --git a/xinda-gateway/xinda-mq/src/main/java/com/xinda/mq/redischannel/producer/EmqxMessageProducer.java b/xinda-gateway/xinda-mq/src/main/java/com/xinda/mq/redischannel/producer/EmqxMessageProducer.java new file mode 100644 index 0000000..a9a19fc --- /dev/null +++ b/xinda-gateway/xinda-mq/src/main/java/com/xinda/mq/redischannel/producer/EmqxMessageProducer.java @@ -0,0 +1,22 @@ +package com.xinda.mq.redischannel.producer; + +import com.xinda.common.core.mq.DeviceReportBo; +import com.xinda.mqttclient.IEmqxMessageProducer; +import org.springframework.stereotype.Component; + +/** + * @author bill + */ +@Component +public class EmqxMessageProducer implements IEmqxMessageProducer { + + + @Override + public void sendEmqxMessage(String topicName, DeviceReportBo deviceReportBo) { + if (topicName.contains("property/post")){ + MessageProducer.sendPublishMsg(deviceReportBo); + } else { + MessageProducer.sendOtherMsg(deviceReportBo); + } + } +} diff --git a/xinda-gateway/xinda-mq/src/main/java/com/xinda/mq/redischannel/producer/MessageProducer.java b/xinda-gateway/xinda-mq/src/main/java/com/xinda/mq/redischannel/producer/MessageProducer.java new file mode 100644 index 0000000..a51b1b9 --- /dev/null +++ b/xinda-gateway/xinda-mq/src/main/java/com/xinda/mq/redischannel/producer/MessageProducer.java @@ -0,0 +1,46 @@ +package com.xinda.mq.redischannel.producer; + +import com.xinda.common.core.mq.DeviceReportBo; +import com.xinda.common.core.mq.DeviceStatusBo; +import com.xinda.common.core.mq.DeviceTestReportBo; +import com.xinda.common.core.mq.MQSendMessageBo; +import com.xinda.common.core.mq.message.ModbusPollMsg; +import com.xinda.common.core.mq.ota.OtaUpgradeBo; +import com.xinda.common.core.mq.message.DeviceDownMessage; +import com.xinda.mq.redischannel.queue.*; + +/** + *设备消息生产者 ,设备的消息发送通道 + * @author bill + */ +public class MessageProducer { + + /*发送设备获取属性消息到队列*/ + public static void sendPropFetch(ModbusPollMsg bo){ + DevicePropFetchQueue.offer(bo); + } + /*发送设备服务下发消息到队列*/ + public static void sendFunctionInvoke(MQSendMessageBo bo){ + FunctionInvokeQueue.offer(bo); + } + /*发送设备上报消息到队列*/ + public static void sendPublishMsg(DeviceReportBo bo){ + DeviceReportQueue.offer(bo); + } + public static void sendOtherMsg(DeviceReportBo bo){ + DeviceOtherQueue.offer(bo); + } + + public static void sendStatusMsg(DeviceStatusBo bo){ + DeviceStatusQueue.offer(bo); + } + /** + * 设备调试通道 + * @param bo + */ + public static void sendDeviceTestMsg(DeviceTestReportBo bo){ + DeviceTestQueue.offer(bo); + } + + +} diff --git a/xinda-gateway/xinda-mq/src/main/java/com/xinda/mq/redischannel/queue/DeviceOtherQueue.java b/xinda-gateway/xinda-mq/src/main/java/com/xinda/mq/redischannel/queue/DeviceOtherQueue.java new file mode 100644 index 0000000..f64dcec --- /dev/null +++ b/xinda-gateway/xinda-mq/src/main/java/com/xinda/mq/redischannel/queue/DeviceOtherQueue.java @@ -0,0 +1,25 @@ +package com.xinda.mq.redischannel.queue; + +import com.xinda.common.core.mq.DeviceReportBo; +import lombok.SneakyThrows; + +import java.util.concurrent.LinkedBlockingQueue; + +/** + * @author gsb + * @date 2022/10/10 10:13 + */ +public class DeviceOtherQueue { + + private static final LinkedBlockingQueue queue = new LinkedBlockingQueue<>(); + + /*元素加入队列,最后*/ + public static void offer(DeviceReportBo dto){ + queue.offer(dto); + } + /*取出队列元素 先进先出*/ + @SneakyThrows + public static DeviceReportBo take(){ + return queue.take(); + } +} diff --git a/xinda-gateway/xinda-mq/src/main/java/com/xinda/mq/redischannel/queue/DevicePropFetchQueue.java b/xinda-gateway/xinda-mq/src/main/java/com/xinda/mq/redischannel/queue/DevicePropFetchQueue.java new file mode 100644 index 0000000..ab5af07 --- /dev/null +++ b/xinda-gateway/xinda-mq/src/main/java/com/xinda/mq/redischannel/queue/DevicePropFetchQueue.java @@ -0,0 +1,27 @@ +package com.xinda.mq.redischannel.queue; + +import com.xinda.common.core.mq.DeviceReportBo; +import com.xinda.common.core.mq.message.DeviceDownMessage; +import com.xinda.common.core.mq.message.ModbusPollMsg; +import lombok.SneakyThrows; + +import java.util.concurrent.LinkedBlockingQueue; + +/** + * 设备属性获取存储列队 + * @author gsb + * @date 2022/10/11 8:29 + */ +public class DevicePropFetchQueue { + private static final LinkedBlockingQueue queue = new LinkedBlockingQueue<>(); + + /*元素加入队列,最后*/ + public static void offer(ModbusPollMsg dto){ + queue.offer(dto); + } + /*取出队列元素 先进先出*/ + @SneakyThrows + public static ModbusPollMsg take(){ + return queue.take(); + } +} diff --git a/xinda-gateway/xinda-mq/src/main/java/com/xinda/mq/redischannel/queue/DeviceReplyQueue.java b/xinda-gateway/xinda-mq/src/main/java/com/xinda/mq/redischannel/queue/DeviceReplyQueue.java new file mode 100644 index 0000000..e3bf2cf --- /dev/null +++ b/xinda-gateway/xinda-mq/src/main/java/com/xinda/mq/redischannel/queue/DeviceReplyQueue.java @@ -0,0 +1,25 @@ +package com.xinda.mq.redischannel.queue; + +import com.xinda.common.core.mq.DeviceReportBo; +import lombok.SneakyThrows; + +import java.util.concurrent.LinkedBlockingQueue; + +/** + * 设备消息回调队列 {@link DeviceReportBo} + * @author gsb + * @date 2022/10/10 10:15 + */ +public class DeviceReplyQueue { + private static final LinkedBlockingQueue queue = new LinkedBlockingQueue<>(); + + /*元素加入队列,最后*/ + public static void offer(DeviceReportBo dto){ + queue.offer(dto); + } + /*取出队列元素 先进先出*/ + @SneakyThrows + public static DeviceReportBo take(){ + return queue.take(); + } +} diff --git a/xinda-gateway/xinda-mq/src/main/java/com/xinda/mq/redischannel/queue/DeviceReportQueue.java b/xinda-gateway/xinda-mq/src/main/java/com/xinda/mq/redischannel/queue/DeviceReportQueue.java new file mode 100644 index 0000000..ffdedfd --- /dev/null +++ b/xinda-gateway/xinda-mq/src/main/java/com/xinda/mq/redischannel/queue/DeviceReportQueue.java @@ -0,0 +1,25 @@ +package com.xinda.mq.redischannel.queue; + +import com.xinda.common.core.mq.DeviceReportBo; +import lombok.SneakyThrows; + +import java.util.concurrent.LinkedBlockingQueue; + +/** + * @author gsb + * @date 2022/10/10 10:13 + */ +public class DeviceReportQueue { + + private static final LinkedBlockingQueue queue = new LinkedBlockingQueue<>(); + + /*元素加入队列,最后*/ + public static void offer(DeviceReportBo dto){ + queue.offer(dto); + } + /*取出队列元素 先进先出*/ + @SneakyThrows + public static DeviceReportBo take(){ + return queue.take(); + } +} diff --git a/xinda-gateway/xinda-mq/src/main/java/com/xinda/mq/redischannel/queue/DeviceStatusQueue.java b/xinda-gateway/xinda-mq/src/main/java/com/xinda/mq/redischannel/queue/DeviceStatusQueue.java new file mode 100644 index 0000000..5c0984f --- /dev/null +++ b/xinda-gateway/xinda-mq/src/main/java/com/xinda/mq/redischannel/queue/DeviceStatusQueue.java @@ -0,0 +1,25 @@ +package com.xinda.mq.redischannel.queue; + +import com.xinda.common.core.mq.DeviceStatusBo; +import lombok.SneakyThrows; + +import java.util.concurrent.LinkedBlockingQueue; + +/** + * 设备消息缓存队列 添加{@link DeviceStatusBo} 消息 + * @author gsb + * @date 2022/10/10 9:59 + */ +public class DeviceStatusQueue { + private static final LinkedBlockingQueue queue = new LinkedBlockingQueue<>(); + + /*元素加入队列,最后*/ + public static void offer(DeviceStatusBo dto){ + queue.offer(dto); + } + /*取出队列元素 先进先出*/ + @SneakyThrows + public static DeviceStatusBo take(){ + return queue.take(); + } +} diff --git a/xinda-gateway/xinda-mq/src/main/java/com/xinda/mq/redischannel/queue/DeviceTestQueue.java b/xinda-gateway/xinda-mq/src/main/java/com/xinda/mq/redischannel/queue/DeviceTestQueue.java new file mode 100644 index 0000000..f262c31 --- /dev/null +++ b/xinda-gateway/xinda-mq/src/main/java/com/xinda/mq/redischannel/queue/DeviceTestQueue.java @@ -0,0 +1,25 @@ +package com.xinda.mq.redischannel.queue; + +import com.xinda.common.core.mq.DeviceTestReportBo; +import lombok.SneakyThrows; + +import java.util.concurrent.LinkedBlockingQueue; + +/** + * @author bill + */ +public class DeviceTestQueue { + + + private static final LinkedBlockingQueue queue = new LinkedBlockingQueue<>(); + + /*元素加入队列,最后*/ + public static void offer(DeviceTestReportBo dto){ + queue.offer(dto); + } + /*取出队列元素 先进先出*/ + @SneakyThrows + public static DeviceTestReportBo take(){ + return queue.take(); + } +} diff --git a/xinda-gateway/xinda-mq/src/main/java/com/xinda/mq/redischannel/queue/FunctionInvokeQueue.java b/xinda-gateway/xinda-mq/src/main/java/com/xinda/mq/redischannel/queue/FunctionInvokeQueue.java new file mode 100644 index 0000000..76b40d6 --- /dev/null +++ b/xinda-gateway/xinda-mq/src/main/java/com/xinda/mq/redischannel/queue/FunctionInvokeQueue.java @@ -0,0 +1,25 @@ +package com.xinda.mq.redischannel.queue; + +import com.xinda.common.core.mq.MQSendMessageBo; +import lombok.SneakyThrows; + +import java.util.concurrent.LinkedBlockingQueue; + +/** + * 服务下发队列 处理{@link MQSendMessageBo} + * @author gsb + * @date 2022/10/10 10:11 + */ +public class FunctionInvokeQueue { + private static final LinkedBlockingQueue queue = new LinkedBlockingQueue<>(); + + /*元素加入队列,最后*/ + public static void offer(MQSendMessageBo dto){ + queue.offer(dto); + } + /*取出队列元素 先进先出*/ + @SneakyThrows + public static MQSendMessageBo take(){ + return queue.take(); + } +} diff --git a/xinda-gateway/xinda-mq/src/main/java/com/xinda/mq/redischannel/queue/OtaUpgradeQueue.java b/xinda-gateway/xinda-mq/src/main/java/com/xinda/mq/redischannel/queue/OtaUpgradeQueue.java new file mode 100644 index 0000000..131b324 --- /dev/null +++ b/xinda-gateway/xinda-mq/src/main/java/com/xinda/mq/redischannel/queue/OtaUpgradeQueue.java @@ -0,0 +1,25 @@ +package com.xinda.mq.redischannel.queue; + +import com.xinda.common.core.mq.ota.OtaUpgradeBo; +import lombok.SneakyThrows; + +import java.util.concurrent.LinkedBlockingQueue; + +/** + * OTA升级列队 {@link OtaUpgradeBo} + * @author gsb + * @date 2022/10/10 10:30 + */ +public class OtaUpgradeQueue { + private static final LinkedBlockingQueue queue = new LinkedBlockingQueue<>(); + + /*元素加入队列,最后*/ + public static void offer(OtaUpgradeBo dto){ + queue.offer(dto); + } + /*取出队列元素 先进先出*/ + @SneakyThrows + public static OtaUpgradeBo take(){ + return queue.take(); + } +} diff --git a/xinda-gateway/xinda-mq/src/main/java/com/xinda/mq/redischannel/service/RedisPublishServiceImpl.java b/xinda-gateway/xinda-mq/src/main/java/com/xinda/mq/redischannel/service/RedisPublishServiceImpl.java new file mode 100644 index 0000000..a481e44 --- /dev/null +++ b/xinda-gateway/xinda-mq/src/main/java/com/xinda/mq/redischannel/service/RedisPublishServiceImpl.java @@ -0,0 +1,27 @@ +package com.xinda.mq.redischannel.service; + +import com.xinda.common.core.redis.RedisCache; +import com.xinda.mq.service.IMessagePublishService; +import lombok.NoArgsConstructor; +import org.springframework.beans.factory.annotation.Autowired; + +/** + * 设备消息推送至RedisChannel + * @author bill + */ +@NoArgsConstructor +public class RedisPublishServiceImpl implements IMessagePublishService { + + @Autowired + private RedisCache redisCache; + + /** + * 消息推送到redisChannel + * @param message 设备消息 + * @param channel 推送channel + */ + @Override + public void publish(Object message,String channel) { + redisCache.publish(message,channel); + } +} diff --git a/xinda-gateway/xinda-mq/src/main/java/com/xinda/mq/rocketmq/consumer/ConsumerTopicConstant.java b/xinda-gateway/xinda-mq/src/main/java/com/xinda/mq/rocketmq/consumer/ConsumerTopicConstant.java new file mode 100644 index 0000000..cd8c71a --- /dev/null +++ b/xinda-gateway/xinda-mq/src/main/java/com/xinda/mq/rocketmq/consumer/ConsumerTopicConstant.java @@ -0,0 +1,27 @@ +package com.xinda.mq.rocketmq.consumer; + +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.stereotype.Component; + +/** + * @author bill + */ +@Component +@ConfigurationProperties(prefix = "rocketmq.producer") +@Data +public class ConsumerTopicConstant { + + /**网关默认主题*/ + private String mqTopic; + /*设备状态topic*/ + private String deviceStatusTopic; + /*设备主动上报topic*/ + private String deviceUpTopic; + /*设备服务下发topic*/ + private String functionInvokeTopic; + /*设备消息回调topic*/ + private String deviceReplyTopic; + /*平台获取属性topic*/ + private String fetchPropTopic; +} diff --git a/xinda-gateway/xinda-mq/src/main/java/com/xinda/mq/rocketmq/listener/RocketDeviceStatusListener.java b/xinda-gateway/xinda-mq/src/main/java/com/xinda/mq/rocketmq/listener/RocketDeviceStatusListener.java new file mode 100644 index 0000000..f47df9e --- /dev/null +++ b/xinda-gateway/xinda-mq/src/main/java/com/xinda/mq/rocketmq/listener/RocketDeviceStatusListener.java @@ -0,0 +1,26 @@ +package com.xinda.mq.rocketmq.listener; + +import com.xinda.common.constant.XinDaConstant; +import com.xinda.common.core.mq.DeviceStatusBo; +import lombok.extern.slf4j.Slf4j; +import org.apache.rocketmq.spring.annotation.RocketMQMessageListener; +import org.apache.rocketmq.spring.core.RocketMQListener; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; +import org.springframework.stereotype.Component; + +/** + * RocketMQ监听设备状态消息 + * @author gsb + * @date 2022/10/11 9:37 + */ +@Slf4j +@Component +@RocketMQMessageListener(consumerGroup = XinDaConstant.CHANNEL.DEVICE_STATUS_GROUP , topic = XinDaConstant.CHANNEL.DEVICE_STATUS) +@ConditionalOnProperty(prefix ="cluster", name = "type",havingValue = XinDaConstant.MQTT.ROCKET_MQ) +public class RocketDeviceStatusListener implements RocketMQListener { + + @Override + public void onMessage(DeviceStatusBo deviceStatusBo) { + log.debug("=>收到设备状态消息,message=[{}]",deviceStatusBo); + } +} diff --git a/xinda-gateway/xinda-mq/src/main/java/com/xinda/mq/rocketmq/listener/RocketFunctionInvokeListener.java b/xinda-gateway/xinda-mq/src/main/java/com/xinda/mq/rocketmq/listener/RocketFunctionInvokeListener.java new file mode 100644 index 0000000..26f6114 --- /dev/null +++ b/xinda-gateway/xinda-mq/src/main/java/com/xinda/mq/rocketmq/listener/RocketFunctionInvokeListener.java @@ -0,0 +1,27 @@ +package com.xinda.mq.rocketmq.listener; + +import com.xinda.common.constant.XinDaConstant; +import com.xinda.common.core.mq.MQSendMessageBo; +import lombok.extern.slf4j.Slf4j; +import org.apache.rocketmq.spring.annotation.RocketMQMessageListener; +import org.apache.rocketmq.spring.core.RocketMQListener; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; +import org.springframework.stereotype.Component; + +/** + * MQ监听服务下发消息 + * @author gsb + * @date 2022/10/11 9:53 + */ +@Slf4j +@Component +@RocketMQMessageListener(consumerGroup = XinDaConstant.CHANNEL.FUNCTION_INVOKE_GROUP , topic = XinDaConstant.CHANNEL.FUNCTION_INVOKE) +@ConditionalOnProperty(prefix ="cluster", name = "type",havingValue = XinDaConstant.MQTT.ROCKET_MQ) +public class RocketFunctionInvokeListener implements RocketMQListener { + + + @Override + public void onMessage(MQSendMessageBo bo) { + + } +} diff --git a/xinda-gateway/xinda-mq/src/main/java/com/xinda/mq/rocketmq/listener/RocketPropReadListener.java b/xinda-gateway/xinda-mq/src/main/java/com/xinda/mq/rocketmq/listener/RocketPropReadListener.java new file mode 100644 index 0000000..29e4f65 --- /dev/null +++ b/xinda-gateway/xinda-mq/src/main/java/com/xinda/mq/rocketmq/listener/RocketPropReadListener.java @@ -0,0 +1,25 @@ +package com.xinda.mq.rocketmq.listener; + +import com.xinda.common.constant.XinDaConstant; +import com.xinda.common.core.mq.message.DeviceDownMessage; +import lombok.extern.slf4j.Slf4j; +import org.apache.rocketmq.spring.annotation.RocketMQMessageListener; +import org.apache.rocketmq.spring.core.RocketMQListener; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; +import org.springframework.stereotype.Component; + +/** + * @author gsb + * @date 2022/10/11 16:49 + */ +@Slf4j +@Component +@RocketMQMessageListener(consumerGroup = XinDaConstant.CHANNEL.PROP_READ_GROUP , topic = XinDaConstant.CHANNEL.PROP_READ) +@ConditionalOnProperty(prefix ="cluster", name = "type",havingValue = XinDaConstant.MQTT.ROCKET_MQ) +public class RocketPropReadListener implements RocketMQListener { + + @Override + public void onMessage(DeviceDownMessage deviceDownMessage) { + + } +} diff --git a/xinda-gateway/xinda-mq/src/main/java/com/xinda/mq/rocketmq/listener/RocketPublishMsgListener.java b/xinda-gateway/xinda-mq/src/main/java/com/xinda/mq/rocketmq/listener/RocketPublishMsgListener.java new file mode 100644 index 0000000..e488e69 --- /dev/null +++ b/xinda-gateway/xinda-mq/src/main/java/com/xinda/mq/rocketmq/listener/RocketPublishMsgListener.java @@ -0,0 +1,26 @@ +package com.xinda.mq.rocketmq.listener; + +import com.xinda.common.constant.XinDaConstant; +import com.xinda.common.core.mq.DeviceReportBo; +import lombok.extern.slf4j.Slf4j; +import org.apache.rocketmq.spring.annotation.RocketMQMessageListener; +import org.apache.rocketmq.spring.core.RocketMQListener; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; +import org.springframework.stereotype.Component; + +/** + * MQ监听设备推送消息(上报消息和回调消息) + * @author gsb + * @date 2022/10/11 9:51 + */ +@Slf4j +@Component +@RocketMQMessageListener(consumerGroup = XinDaConstant.CHANNEL.PUBLISH_GROUP , topic = XinDaConstant.CHANNEL.PUBLISH) +@ConditionalOnProperty(prefix ="cluster", name = "type",havingValue = XinDaConstant.MQTT.ROCKET_MQ) +public class RocketPublishMsgListener implements RocketMQListener { + + @Override + public void onMessage(DeviceReportBo bo) { + log.debug("=>收到设备推送消息,message=[{}]",bo); + } +} diff --git a/xinda-gateway/xinda-mq/src/main/java/com/xinda/mq/rocketmq/model/MQSendMessage.java b/xinda-gateway/xinda-mq/src/main/java/com/xinda/mq/rocketmq/model/MQSendMessage.java new file mode 100644 index 0000000..4c357df --- /dev/null +++ b/xinda-gateway/xinda-mq/src/main/java/com/xinda/mq/rocketmq/model/MQSendMessage.java @@ -0,0 +1,21 @@ +package com.xinda.mq.rocketmq.model; + +import lombok.Data; + +import java.io.Serializable; + +/** + * 网关通用模型 + * @author bill + */ +@Data +public class MQSendMessage implements Serializable { + + private static final long serialVersionUID = 1L; + + /**topic*/ + private String topicName; + + /**消息-json格式*/ + private String message; +} diff --git a/xinda-gateway/xinda-mq/src/main/java/com/xinda/mq/rocketmq/producer/RocketMqProducer.java b/xinda-gateway/xinda-mq/src/main/java/com/xinda/mq/rocketmq/producer/RocketMqProducer.java new file mode 100644 index 0000000..0314afd --- /dev/null +++ b/xinda-gateway/xinda-mq/src/main/java/com/xinda/mq/rocketmq/producer/RocketMqProducer.java @@ -0,0 +1,261 @@ +package com.xinda.mq.rocketmq.producer; + +import com.alibaba.fastjson2.JSON; +import com.xinda.common.utils.StringUtils; +import lombok.extern.slf4j.Slf4j; +import org.apache.rocketmq.client.producer.*; +import org.apache.rocketmq.spring.core.RocketMQTemplate; +import org.apache.rocketmq.spring.support.RocketMQHeaders; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.messaging.Message; +import org.springframework.messaging.support.MessageBuilder; +import org.springframework.stereotype.Component; + +import java.util.List; +import java.util.UUID; +import java.util.stream.Collectors; + +//@Component +@Slf4j +public class RocketMqProducer { + + /** + * rocketmq模板注入 + */ + @Autowired + private RocketMQTemplate rocketMQTemplate; + + + /** + * 普通发送 + * @param topic 消息主题 + * @param msg 消息体 + * @param 消息泛型 + */ + public void send(String topic, T msg) { + rocketMQTemplate.convertAndSend(topic, msg); + //rocketMQTemplate.send(topic + ":tag1", MessageBuilder.withPayload(msg).build()); // 等价于上面一行 + } + + + /** + * 发送带tag的消息,直接在topic后面加上":tag" + * + * @param topic 消息主题 + * @param tag 消息tag + * @param msg 消息体 + * @param 消息泛型 + * @return + */ + public SendResult sendTagMsg(String topic, String tag, T msg) { + topic = topic + ":" + tag; + return rocketMQTemplate.syncSend(topic, MessageBuilder.withPayload(msg).build()); + } + + + /** + * 发送同步消息(阻塞当前线程,等待broker响应发送结果,这样不太容易丢失消息) + * sendResult为返回的发送结果 + */ + public SendResult sendMsg(String topic, T msg) { + Message message = MessageBuilder.withPayload(msg).build(); + SendResult sendResult = rocketMQTemplate.syncSend(topic, message); + log.info("【sendMsg】sendResult={}", JSON.toJSONString(sendResult)); + return sendResult; + } + + + /** + * 发送异步消息 + * 发送异步消息(通过线程池执行发送到broker的消息任务,执行完后回调:在SendCallback中可处理相关成功失败时的逻辑) + * (适合对响应时间敏感的业务场景) + * @param topic 消息Topic + * @param msg 消息实体 + * + */ + public void asyncSend(String topic, T msg) { + Message message = MessageBuilder.withPayload(msg).build(); + asyncSend(topic, message, new SendCallback() { + @Override + public void onSuccess(SendResult sendResult) { + log.info("topic:{}消息---发送MQ成功---", topic); + } + + @Override + public void onException(Throwable throwable) { + log.error("topic:{}消息---发送MQ失败 ex:{}---", topic, throwable.getMessage()); + } + }); + } + + + /** + * 发送异步消息 + * 发送异步消息(通过线程池执行发送到broker的消息任务,执行完后回调:在SendCallback中可处理相关成功失败时的逻辑) + * (适合对响应时间敏感的业务场景) + * @param topic 消息Topic + * @param message 消息实体 + * @param sendCallback 回调函数 + */ + public void asyncSend(String topic, Message message, SendCallback sendCallback) { + rocketMQTemplate.asyncSend(topic, message, sendCallback); + } + + + /** + * 发送异步消息 + * + * @param topic 消息Topic + * @param message 消息实体 + * @param sendCallback 回调函数 + * @param timeout 超时时间 + */ + public void asyncSend(String topic, Message message, SendCallback sendCallback, long timeout) { + rocketMQTemplate.asyncSend(topic, message, sendCallback, timeout); + } + + + /** + * 同步延迟消息 + * rocketMQ的延迟消息发送其实是已发送就已经到broker端了,然后消费端会延迟收到消息。 + * RocketMQ 目前只支持固定精度的定时消息。 + * 固定等级:1到18分别对应1s 5s 10s 30s 1m 2m 3m 4m 5m 6m 7m 8m 9m 10m 20m 30m 1h 2h + * 延迟的底层方法是用定时任务实现的。 + * 发送延时消息(delayLevel的值就为0,因为不延时) + * + * @param topic 消息主题 + * @param msg 消息体 + * @param timeout 发送超时时间 + * @param delayLevel 延迟级别 1到18 + * @param 消息泛型 + */ + public void sendDelay(String topic, T msg, long timeout, int delayLevel) { + Message message = MessageBuilder.withPayload(msg).build(); + rocketMQTemplate.syncSend(topic, message, timeout, delayLevel); + } + + + /** + * 发送异步延迟消息 + * + * @param topic 消息Topic + * @param message 消息实体 + * @param sendCallback 回调函数 + * @param timeout 超时时间 + * @param delayLevel 延迟消息的级别 + */ + public void asyncSendDelay(String topic, Message message, SendCallback sendCallback, long timeout, int delayLevel) { + rocketMQTemplate.asyncSend(topic, message, sendCallback, timeout, delayLevel); + } + + + /** + * 发送异步延迟消息 + * + * @param topic 消息Topic + * @param message 消息实体 + * @param timeout 超时时间 + * @param delayLevel 延迟消息的级别 + */ + public void asyncSendDelay(String topic, Message message, long timeout, int delayLevel) { + rocketMQTemplate.asyncSend(topic, message, new SendCallback() { + @Override + public void onSuccess(SendResult sendResult) { + log.info("topic:{}消息---发送MQ成功---", topic); + } + + @Override + public void onException(Throwable throwable) { + log.error("topic:{}消息---发送MQ失败 ex:{}---", topic, throwable.getMessage()); + } + }, timeout, delayLevel); + } + + + /** + * 单向消息 + * 特点为只负责发送消息,不等待服务器回应且没有回调函数触发,即只发送请求不等待应答 + * 此方式发送消息的过程耗时非常短,一般在微秒级别 + * 应用场景:适用于某些耗时非常短,但对可靠性要求并不高的场景,例如日志收集 + * @param topic 消息主题 + * @param msg 消息体 + * @param 消息泛型 + */ + public void sendOneWayMsg(String topic, T msg) { + Message message = MessageBuilder.withPayload(msg).build(); + rocketMQTemplate.sendOneWay(topic, message); + } + + + /** + * 发送顺序消息 + * + * @param topic 消息主题 + * @param msg 消息体 + * @param hashKey 确定消息发送到哪个队列中 + * @param 消息泛型 + */ + public void syncSendOrderly(String topic, T msg, String hashKey) { + Message message = MessageBuilder.withPayload(msg).build(); + log.info("发送顺序消息,topic:{}, hashKey:{}", topic, hashKey); + rocketMQTemplate.syncSendOrderly(topic, message, hashKey); + } + + + /** + * 发送顺序消息 + * + * @param topic 消息主题 + * @param msg 消息体 + * @param hashKey 确定消息发送到哪个队列中 + * @param timeout 超时时间 + */ + public void syncSendOrderly(String topic, T msg, String hashKey, long timeout) { + Message message = MessageBuilder.withPayload(msg).build(); + log.info("发送顺序消息,topic:{}, hashKey:{}, timeout:{}", topic, hashKey, timeout); + rocketMQTemplate.syncSendOrderly(topic, message, hashKey, timeout); + } + + + /** + * 发送批量消息 + * + * @param topic 消息主题 + * @param msgList 消息体集合 + * @param 消息泛型 + * @return + */ + public SendResult asyncSendBatch(String topic, List msgList) { + List> messageList = msgList.stream() + .map(msg -> MessageBuilder.withPayload(msg).build()).collect(Collectors.toList()); + return rocketMQTemplate.syncSend(topic, messageList); + } + + /** + * 发送事务消息 + * + * @param txProducerGroup 事务消息的生产者组名称 + * @param topic 事务消息主题 + * @param tag 事务消息tag + * @param msg 事务消息体 + * @param arg 事务消息监听器回查参数 + * @param 事务消息泛型 + */ + public void sendTransaction(String txProducerGroup, String topic, String tag, T msg, T arg){ + if(StringUtils.isNotEmpty(tag)){ + topic = topic + ":" + tag; + } + String transactionId = UUID.randomUUID().toString(); + Message message = MessageBuilder.withPayload(msg) + //header也有大用处 + .setHeader(RocketMQHeaders.TRANSACTION_ID, transactionId) + .setHeader("share_id", "TEST") + .build(); + TransactionSendResult result = rocketMQTemplate.sendMessageInTransaction(topic, message, arg); + if(result.getLocalTransactionState().equals(LocalTransactionState.COMMIT_MESSAGE) + && result.getSendStatus().equals(SendStatus.SEND_OK)){ + log.info("事物消息发送成功"); + } + log.info("事物消息发送结果:{}", result); + } +} diff --git a/xinda-gateway/xinda-mq/src/main/java/com/xinda/mq/rocketmq/service/RocketMqPublishServiceImpl.java b/xinda-gateway/xinda-mq/src/main/java/com/xinda/mq/rocketmq/service/RocketMqPublishServiceImpl.java new file mode 100644 index 0000000..a8f4e48 --- /dev/null +++ b/xinda-gateway/xinda-mq/src/main/java/com/xinda/mq/rocketmq/service/RocketMqPublishServiceImpl.java @@ -0,0 +1,26 @@ +package com.xinda.mq.rocketmq.service; + +import com.xinda.mq.rocketmq.producer.RocketMqProducer; +import com.xinda.mq.service.IMessagePublishService; +import org.springframework.beans.factory.annotation.Autowired; + +/** + * 设备消息推送至RocketMq + * @author bill + */ +public class RocketMqPublishServiceImpl implements IMessagePublishService { + + @Autowired + private RocketMqProducer rocketMqProducer; + + /** + * rocket通用生产消息方法 + * @param message 设备消息 + * @param channel 推送topic + */ + @Override + public void publish(Object message,String channel) + { + rocketMqProducer.send(channel,message); + } +} diff --git a/xinda-gateway/xinda-mq/src/main/java/com/xinda/mq/ruleEngine/SceneContext.java b/xinda-gateway/xinda-mq/src/main/java/com/xinda/mq/ruleEngine/SceneContext.java new file mode 100644 index 0000000..d49607e --- /dev/null +++ b/xinda-gateway/xinda-mq/src/main/java/com/xinda/mq/ruleEngine/SceneContext.java @@ -0,0 +1,697 @@ +package com.xinda.mq.ruleEngine; + +import com.alibaba.fastjson2.JSON; +import com.alibaba.fastjson2.JSONObject; +import com.xinda.common.core.mq.InvokeReqDto; +import com.xinda.common.core.notify.AlertPushParams; +import com.xinda.common.core.redis.RedisCache; +import com.xinda.common.core.redis.RedisKeyBuilder; +import com.xinda.common.core.thingsModel.SceneThingsModelItem; +import com.xinda.common.core.thingsModel.ThingsModelSimpleItem; +import com.xinda.common.exception.ServiceException; +import com.xinda.common.utils.DateUtils; +import com.xinda.common.utils.StringUtils; +import com.xinda.common.utils.spring.SpringUtils; +import com.xinda.iot.domain.*; +import com.xinda.iot.model.AlertSceneSendVO; +import com.xinda.iot.model.SceneTerminalUserVO; +import com.xinda.iot.model.ScriptTemplate; +import com.xinda.iot.model.ThingsModels.ValueItem; +import com.xinda.iot.service.*; +import com.xinda.mq.service.IFunctionInvoke; +import com.xinda.mq.service.IRuleEngine; +import com.xinda.notify.core.service.NotifySendService; +import lombok.Data; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.collections4.CollectionUtils; + +import java.util.concurrent.Executors; +import java.util.concurrent.ScheduledExecutorService; +import java.util.concurrent.TimeUnit; + +import java.util.function.Function; +import java.util.regex.Matcher; +import java.util.regex.Pattern; +import java.util.*; +import java.util.stream.Collectors; + +import static java.util.regex.Pattern.compile; + +@Data +@Slf4j +public class SceneContext { + + /** + * 上报信息的设备编号 + */ + private String deviceNum; + + /** + * 上报信息的设备所属产品ID + */ + private Long productId; + + /** + * 上报信息的设备信息类型 1=属性, 2=功能,3=事件,4=设备升级,5=设备上线,6=设备下线 + */ + private int type; + + /** + * 上报的物模型集合 + */ + private List thingsModelSimpleItems; + + /** + * 触发成功的物模型集合,保留给告警记录 + */ + private List sceneThingsModelItems; + + + private static IFunctionInvoke functionInvoke = SpringUtils.getBean(IFunctionInvoke.class); + + private static IDeviceService deviceService = SpringUtils.getBean(IDeviceService.class); + + private static IAlertService alertService = SpringUtils.getBean(IAlertService.class); + + private static NotifySendService notifySendService = SpringUtils.getBean(NotifySendService.class); + + private static RedisCache redisCache = SpringUtils.getBean(RedisCache.class); + + private static IAlertLogService alertLogService = SpringUtils.getBean(IAlertLogService.class); + + private static IDeviceUserService deviceUserService = SpringUtils.getBean(IDeviceUserService.class); + + private static ISceneService sceneService = SpringUtils.getBean(ISceneService.class); + + private static IRuleEngine ruleService = SpringUtils.getBean(IRuleEngine.class); + + private static IDeviceAlertUserService deviceAlertUserService = SpringUtils.getBean(IDeviceAlertUserService.class); + + public SceneContext(String deviceNum, Long productId, int type, List thingsModelSimpleItems) { + this.deviceNum = deviceNum; + this.productId = productId; + this.type = type; + this.thingsModelSimpleItems = thingsModelSimpleItems; + } + + /** + * 处理规则脚本 + * + * @return + */ + private boolean process(String json) throws InterruptedException { + log.info("------------------[规则引擎执行...]---------------------"); + ScriptTemplate scriptTemplate = JSON.parseObject(json, ScriptTemplate.class); + log.info("规则引擎脚本配置:{},规则引擎上下文:{}", scriptTemplate, this); + //触发器 + if (scriptTemplate.getPurpose() == 2) { + // 触发器,检查静默时间 + if (!checkSilent(scriptTemplate.getSilent(), scriptTemplate.getSceneId(), this.deviceNum)) { + // 触发条件为不满足时,返回true + if (scriptTemplate.getCond() == 3) { + return true; + } + return false; + } + if (scriptTemplate.getSource() == 1) { + // 设备触发 + return deviceTrigger(scriptTemplate); + } else if (scriptTemplate.getSource() == 3) { + // 产品触发 + return productTrigger(scriptTemplate); + } + //执行动作 + } else if (scriptTemplate.getPurpose() == 3) { + if (scriptTemplate.getCheckdelay() != 0) { + // 告警恢复规则 设备上线触发 不加载 + if (scriptTemplate.getSource() != 5 && type != 5) { + loadDelayTrigger(scriptTemplate); + } + } else { + // 执行动作,延迟执行,线程休眠 delay x 1000毫秒 + Thread.sleep(scriptTemplate.getDelay() * 1000); + // 存在相同未处理告警只记录 不触发告警通知和动作 + + if (scriptTemplate.getSource() == 4) { + //存在相同未处理告警只记录 不触发告警通知和动作 + if (checkDeviceAlerting(scriptTemplate.getSceneId(), this.deviceNum)) { + this.alert(scriptTemplate.getSceneId(),false); + } else { + this.alert(scriptTemplate.getSceneId(),true); + } + + } else if (scriptTemplate.getSource() == 5) { + this.alertRecover(scriptTemplate); + } else if (scriptTemplate.getSource() == 1 || scriptTemplate.getSource() == 3) { + // 下发指令 + this.send(scriptTemplate); + } + // 更新静默时间 + this.updateSilent(scriptTemplate.getSilent(), scriptTemplate.getSceneId(), this.deviceNum); + } + } + return false; + } + + /*** + * 设备触发脚本处理 + * @param scriptTemplate 解析后的Json脚本数据 + * @return + */ + private boolean deviceTrigger(ScriptTemplate scriptTemplate) { + // 判断定制触发(执行一次)或设备上报 + boolean isDeviceReport = StringUtils.isEmpty(deviceNum) ? false : true; + if (isDeviceReport) { + // 1. 匹配设备编号 + boolean matchDeviceNum = Arrays.asList(scriptTemplate.getDeviceNums().split(",")).contains(deviceNum); + if (scriptTemplate.getType() < 4) { + // 2.匹配物模型标识符 + ThingsModelSimpleItem matchItem = null; + if (thingsModelSimpleItems != null) { + for (ThingsModelSimpleItem item : thingsModelSimpleItems) { + if (item.getId().equals(scriptTemplate.getId())) { + matchItem = item; + break; + } + } + } + if (matchDeviceNum && matchItem != null) { + // 记录结果 + if (sceneThingsModelItems == null) { + sceneThingsModelItems = new ArrayList<>(); + } + SceneThingsModelItem sceneItem = new SceneThingsModelItem(scriptTemplate.getId(), matchItem.getValue(), type, + scriptTemplate.getScriptId(), scriptTemplate.getSceneId(), scriptTemplate.getProductId(), deviceNum); + sceneThingsModelItems.add(sceneItem); + // 3.设备上报值匹配 + boolean isMatch = matchValue(scriptTemplate.getOperator(), scriptTemplate.getValue(), matchItem.getValue()); + if (isMatch) { + return true; + } + } + + } else { + //设备上线清理 离线延时匹配任务 + if (type == 5 && scriptTemplate.getCheckdelay() != 0) { + String key = "CHECK_" + scriptTemplate.getSceneId() + deviceNum; + //设备上线删除告警任务 + ruleService.removeCheckTask(key); + log.info("设备上线清理 离线延时匹配任务:{}", key); + } + // 上线,下线 + if (matchDeviceNum && scriptTemplate.getType() == type) { + // 记录结果 + if (sceneThingsModelItems == null) { + sceneThingsModelItems = new ArrayList<>(); + } + SceneThingsModelItem sceneItem = new SceneThingsModelItem(type == 5 ? "online" : "offline", type == 5 ? "1" : "0", type, + scriptTemplate.getScriptId(), scriptTemplate.getSceneId(), scriptTemplate.getProductId(), deviceNum); + sceneThingsModelItems.add(sceneItem); + // 记录结果 + return true; + } + } + } else { + // 定时触发/执行一次 + int resultCount = 0; + // 3.查询设备最新上报值去匹配 + for (String num : Arrays.asList(scriptTemplate.getDeviceNums().split(","))) { + // 数组类型,key去除前缀,值从逗号分隔的字符串获取 + String id = ""; + String value = ""; + int index = 0; + if (scriptTemplate.getId().startsWith("array_")) { + id = scriptTemplate.getId().substring(9); + index = Integer.parseInt(scriptTemplate.getId().substring(6, 8)); + } else { + if (scriptTemplate.getType() == 5 || scriptTemplate.getType() == 6) { + return true; + }else { + id = scriptTemplate.getId(); + } + } + String key = RedisKeyBuilder.buildTSLVCacheKey(scriptTemplate.getProductId(), num); + String cacheValue = redisCache.getCacheMapValue(key, id); + if (StringUtils.isEmpty(cacheValue)) { + continue; + } + ValueItem valueItem = JSON.parseObject(cacheValue, ValueItem.class); + if (scriptTemplate.getId().startsWith("array_")) { + String[] values = valueItem.getValue().split(","); + value = values[index]; + } else { + value = valueItem.getValue(); + } + boolean isMatch = matchValue(scriptTemplate.getOperator(), scriptTemplate.getValue(), value); + if (isMatch) { + // 记录结果 + if (sceneThingsModelItems == null) { + sceneThingsModelItems = new ArrayList<>(); + } + SceneThingsModelItem sceneItem = new SceneThingsModelItem(scriptTemplate.getId(), value, type, + scriptTemplate.getScriptId(), scriptTemplate.getSceneId(), scriptTemplate.getProductId(), num); + sceneThingsModelItems.add(sceneItem); + resultCount++; + } + } + // 任意设备匹配成功返回true + return resultCount > 0 ? true : false; + } + return false; + } + + /*** + * 产品触发脚本处理 + * @param scriptTemplate + * @return + */ + private boolean productTrigger(ScriptTemplate scriptTemplate) { + // 判断定制触发(执行一次)或设备上报 + boolean isDeviceReport = StringUtils.isEmpty(deviceNum) ? false : true; + if (isDeviceReport) { + // 匹配产品编号 + boolean matchProductId = scriptTemplate.getProductId().equals(productId); + if (scriptTemplate.getType() < 4) { + // 匹配物模型标识符 + ThingsModelSimpleItem matchItem = null; + if (thingsModelSimpleItems != null) { + for (ThingsModelSimpleItem item : thingsModelSimpleItems) { + if (item.getId().equals(scriptTemplate.getId())) { + matchItem = item; + break; + } + } + } + if (matchProductId && matchItem != null) { + // 记录结果 + if (sceneThingsModelItems == null) { + sceneThingsModelItems = new ArrayList<>(); + } + SceneThingsModelItem sceneItem = new SceneThingsModelItem(scriptTemplate.getId(), matchItem.getValue(), type, + scriptTemplate.getScriptId(), scriptTemplate.getSceneId(), scriptTemplate.getProductId(), deviceNum); + sceneThingsModelItems.add(sceneItem); + // 设备上报值匹配 + boolean isMatch = matchValue(scriptTemplate.getOperator(), scriptTemplate.getValue(), matchItem.getValue()); + if (isMatch) { + return true; + } + } + + } else { + //设备上线清理 离线延时匹配任务 + if (type == 5 && scriptTemplate.getCheckdelay() != 0) { + String key = "CHECK_" + scriptTemplate.getSceneId() + deviceNum; + //设备上线删除告警任务 + ruleService.removeCheckTask(key); + log.info("设备上线清理 离线延时匹配任务:{}", key); + } + // 上线,下线 + if (matchProductId && scriptTemplate.getType() == type) { + // 记录结果 + if (sceneThingsModelItems == null) { + sceneThingsModelItems = new ArrayList<>(); + } + SceneThingsModelItem sceneItem = new SceneThingsModelItem(type == 5 ? "online" : "offline", type == 5 ? "1" : "0", type, + scriptTemplate.getScriptId(), scriptTemplate.getSceneId(), scriptTemplate.getProductId(), deviceNum); + sceneThingsModelItems.add(sceneItem); + // 记录结果 + return true; + } + } + } else { + // 定时触发/执行一次 + int resultCount = 0; + // 查询设备最新上报值去匹配 + String[] deviceNums = deviceService.getDeviceNumsByProductId(scriptTemplate.getProductId()); + for (String num : deviceNums) { + // 数组类型,key去除前缀,值从逗号分隔的字符串获取 + String id = ""; + String value = ""; + int index = 0; + if (scriptTemplate.getId().startsWith("array_")) { + id = scriptTemplate.getId().substring(9); + index = Integer.parseInt(scriptTemplate.getId().substring(6, 8)); + } else { + if (scriptTemplate.getType() == 5 || scriptTemplate.getType() == 6) { + return true; + }else { + id = scriptTemplate.getId(); + } + } + String key = RedisKeyBuilder.buildTSLVCacheKey(scriptTemplate.getProductId(), num); + String cacheValue = redisCache.getCacheMapValue(key, id); + if (StringUtils.isEmpty(cacheValue)) { + continue; + } + ValueItem valueItem = JSON.parseObject(cacheValue, ValueItem.class); + if (scriptTemplate.getId().startsWith("array_")) { + String[] values = valueItem.getValue().split(","); + value = values[index]; + } else { + value = valueItem.getValue(); + } + boolean isMatch = matchValue(scriptTemplate.getOperator(), scriptTemplate.getValue(), value); + if (isMatch) { + // 记录结果 + if (sceneThingsModelItems == null) { + sceneThingsModelItems = new ArrayList<>(); + } + SceneThingsModelItem sceneItem = new SceneThingsModelItem(scriptTemplate.getId(), value, type, + scriptTemplate.getScriptId(), scriptTemplate.getSceneId(), scriptTemplate.getProductId(), num); + sceneThingsModelItems.add(sceneItem); + resultCount++; + } + } + // 任意设备匹配成功返回true + return resultCount > 0 ? true : false; + } + return false; + } + + private void loadDelayTrigger(ScriptTemplate scriptTemplate) { + String key = "CHECK_" + scriptTemplate.getSceneId() + deviceNum; + //默认上线执行告警恢复 在延迟匹配周期内不告警 + ScheduledExecutorService executor = Executors.newSingleThreadScheduledExecutor(); + executor.schedule(() -> { + //设备未上线,则执行告警任务 + if (scriptTemplate.getSource() == 4) { + // 告警 + this.alert(scriptTemplate.getSceneId(),true); + } else if (scriptTemplate.getSource() == 1 || scriptTemplate.getSource() == 3) { + // 下发指令 + this.send(scriptTemplate); + } + }, scriptTemplate.getCheckdelay(), TimeUnit.SECONDS); + log.info("延时执行告警任务:{}", key); + ruleService.addCheckTask(key, executor); + } + + private boolean checkDeviceAlerting(Long sceneId, String deviceNum) { + AlertLog alertLog = new AlertLog(); + alertLog.setSerialNumber(deviceNum); + alertLog.setStatus(2); + alertLog.setCreateBy(sceneId.toString()); + Long count = alertLogService.selectAlertLogListCount(alertLog); + // 查询设备告警对应的场景是否有未处理告警 + if (count > 0) { + return true; + } else { + return false; + } + } + + /** + * 执行动作,下发指令 + * + * @param scriptTemplate + */ + private void send(ScriptTemplate scriptTemplate) { + String[] deviceNumbers = null; + if (scriptTemplate.getSource() == 1) { + // 下发给指定设备 + deviceNumbers = scriptTemplate.getDeviceNums().split(","); + + } else if (scriptTemplate.getSource() == 3) { + // 下发给产品下所有设备 + deviceNumbers = deviceService.getDeviceNumsByProductId(scriptTemplate.getProductId()); + } + for (String deviceNum : deviceNumbers) { + InvokeReqDto reqDto = new InvokeReqDto(); + reqDto.setProductId(scriptTemplate.getProductId()); + reqDto.setSerialNumber(deviceNum); + reqDto.setModelName(""); + reqDto.setType(1); + reqDto.setIdentifier(scriptTemplate.getId()); + Map params = new HashMap<>(); + params.put(scriptTemplate.getId(), scriptTemplate.getValue()); + reqDto.setRemoteCommand(params); + reqDto.setParams(new JSONObject(reqDto.getRemoteCommand())); + functionInvoke.invokeNoReply(reqDto); + } + } + + private void alertRecover(ScriptTemplate scriptTemplate) { + AlertLog alertLog = new AlertLog(); + alertLog.setCreateBy(scriptTemplate.getRecoverId().toString()); + alertLog.setSerialNumber(deviceNum); + alertLog.setStatus(2); + //自动设置告警处理状态 + alertLogService.updateAlertLogStatus(alertLog); + //如果存在延时确认任务,则删除 + String key = "CHECK_" + scriptTemplate.getRecoverId() + deviceNum; + //设备上线删除告警任务 + ruleService.removeCheckTask(key); + } + + /** + * 执行动作,告警处理 + * + * @param sceneId 场景ID + */ + private void alert(Long sceneId, boolean isNodify) { + Set sceneIdSet = sceneThingsModelItems.stream().map(SceneThingsModelItem::getSceneId).collect(Collectors.toSet()); + List sceneTerminalUserVOList = sceneService.selectTerminalUserBySceneIds(sceneIdSet); + Map sceneTerminalUserMap = sceneTerminalUserVOList.stream().collect(Collectors.toMap(SceneTerminalUserVO::getSceneId, Function.identity())); + List alertLogList = new ArrayList<>(); + for (SceneThingsModelItem sceneThingsModelItem : sceneThingsModelItems) { + // 查询设备信息 + Device device = deviceService.selectDeviceBySerialNumber(sceneThingsModelItem.getDeviceNumber()); + Optional.ofNullable(device).orElseThrow(() -> new ServiceException("告警推送,设备不存在" + "[{" + sceneThingsModelItem.getDeviceNumber() + "}]")); + // 判断是否是终端用户的场景 + SceneTerminalUserVO sceneTerminalUserVO = sceneTerminalUserMap.get(sceneId); + if (1 == sceneTerminalUserVO.getTerminalUser()) { + AlertLog alertLog = this.getTerminalUserAlertLog(sceneTerminalUserVO, device, sceneThingsModelItem); + alertLogList.add(alertLog); + continue; + } + + // 获取场景相关的告警参数,告警必须要是启动状态 + List sceneSendVOList = alertService.listByAlertIds(sceneId); + if (CollectionUtils.isEmpty(sceneSendVOList)) { + continue; + } + + // 获取告警关联模版id + for (AlertSceneSendVO alertSceneSendVO : sceneSendVOList) { + // 开启通知发送 + if (isNodify) { + AlertPushParams alertPushParams = buildAlertPushParams(device, sceneThingsModelItem); + List alertNotifyTemplateList = alertService.listAlertNotifyTemplate(alertSceneSendVO.getAlertId()); + alertPushParams.setAlertName(alertSceneSendVO.getAlertName()); + for (AlertNotifyTemplate alertNotifyTemplate : alertNotifyTemplateList) { + alertPushParams.setNotifyTemplateId(alertNotifyTemplate.getNotifyTemplateId()); + notifySendService.alertSend(alertPushParams); + } + } + AlertLog alertLog = getAlertLog(alertSceneSendVO, device, sceneThingsModelItem); + alertLogList.add(alertLog); + } + } + // 保存告警日志 + if (CollectionUtils.isNotEmpty(alertLogList)) { + alertLogService.insertAlertLogBatch(alertLogList); + } + } + + private AlertPushParams buildAlertPushParams(Device device, SceneThingsModelItem sceneThingsModelItem) { + // 获取告警推送参数 + AlertPushParams alertPushParams = new AlertPushParams(); + alertPushParams.setDeviceName(device.getDeviceName()); + alertPushParams.setSerialNumber(sceneThingsModelItem.getDeviceNumber()); +// List deviceUserList = deviceUserService.getDeviceUserAndShare(device.getDeviceId()); + // 多租户改版查询自己配置的告警用户 + DeviceAlertUser deviceAlertUser = new DeviceAlertUser(); + deviceAlertUser.setDeviceId(device.getDeviceId()); + List deviceUserList = deviceAlertUserService.selectDeviceAlertUserList(deviceAlertUser); + if (CollectionUtils.isNotEmpty(deviceUserList)) { + alertPushParams.setUserPhoneSet(deviceUserList.stream().map(DeviceAlertUser::getPhoneNumber).filter(StringUtils::isNotEmpty).collect(Collectors.toSet())); + alertPushParams.setUserIdSet(deviceUserList.stream().map(DeviceAlertUser::getUserId).collect(Collectors.toSet())); + } + String address; + if (StringUtils.isNotEmpty(device.getNetworkAddress())) { + address = device.getNetworkAddress(); + } else if (StringUtils.isNotEmpty(device.getNetworkIp())) { + address = device.getNetworkIp(); + } else if (Objects.nonNull(device.getLongitude()) && Objects.nonNull(device.getLatitude())) { + address = device.getLongitude() + "," + device.getLatitude(); + } else { + address = "未知地点"; + } + alertPushParams.setAddress(address); + alertPushParams.setAlertTime(DateUtils.parseDateToStr(DateUtils.YY_MM_DD_HH_MM_SS, new Date())); + return alertPushParams; + } + + private AlertLog getTerminalUserAlertLog(SceneTerminalUserVO sceneTerminalUserVO, Device device, SceneThingsModelItem sceneThingsModelItem) { + AlertLog alertLog = new AlertLog(); + alertLog.setAlertName("设备告警"); + alertLog.setAlertLevel(1L); + alertLog.setSerialNumber(sceneThingsModelItem.getDeviceNumber()); + alertLog.setProductId(sceneThingsModelItem.getProductId()); + alertLog.setDeviceName(device.getDeviceName()); + alertLog.setUserId(sceneTerminalUserVO.getUserId()); + alertLog.setCreateBy(sceneThingsModelItem.getSceneId().toString()); + // 统一未处理 + alertLog.setStatus(2); + JSONObject jsonObject = new JSONObject(); + jsonObject.put("id", sceneThingsModelItem.getId()); + jsonObject.put("value", sceneThingsModelItem.getValue()); + jsonObject.put("remark", ""); + alertLog.setDetail(jsonObject.toJSONString()); + alertLog.setCreateTime(new Date()); + alertLog.setCreateBy(sceneThingsModelItem.getSceneId().toString()); + return alertLog; + } + + /** + * 组装告警日志 + * + * @param alertSceneSendVO + * @return com.xinda.iot.domain.AlertLog + * @param: device + */ + private AlertLog getAlertLog(AlertSceneSendVO alertSceneSendVO, Device device, SceneThingsModelItem sceneThingsModelItem) { + AlertLog alertLog = new AlertLog(); + alertLog.setAlertName(alertSceneSendVO.getAlertName()); + alertLog.setAlertLevel(alertSceneSendVO.getAlertLevel()); + alertLog.setSerialNumber(sceneThingsModelItem.getDeviceNumber()); + alertLog.setProductId(sceneThingsModelItem.getProductId()); + alertLog.setDeviceName(device.getDeviceName()); + alertLog.setUserId(device.getTenantId()); + alertLog.setCreateBy(sceneThingsModelItem.getSceneId().toString()); + // 统一未处理 + alertLog.setStatus(2); + JSONObject jsonObject = new JSONObject(); + jsonObject.put("id", sceneThingsModelItem.getId()); + jsonObject.put("value", sceneThingsModelItem.getValue()); + jsonObject.put("remark", ""); + alertLog.setDetail(jsonObject.toJSONString()); + alertLog.setCreateTime(new Date()); + alertLog.setCreateBy(sceneThingsModelItem.getSceneId().toString()); + return alertLog; + } + + /** + * 检查静默周期物模型值是否匹配 + * + * @param operator 操作符 + * @param triggerValue 触发值 + * @param value 上报的值 + * @return + */ + private boolean matchValue(String operator, String triggerValue, String value) { + boolean result = false; + // 操作符比较 + switch (operator) { + case "=": + result = value.equals(triggerValue); + break; + case "!=": + result = !value.equals(triggerValue); + break; + case ">": + if (isNumeric(value) && isNumeric(triggerValue)) { + result = Double.parseDouble(value) > Double.parseDouble(triggerValue); + } + break; + case "<": + if (isNumeric(value) && isNumeric(triggerValue)) { + result = Double.parseDouble(value) < Double.parseDouble(triggerValue); + } + break; + case ">=": + if (isNumeric(value) && isNumeric(triggerValue)) { + result = Double.parseDouble(value) >= Double.parseDouble(triggerValue); + } + break; + case "<=": + if (isNumeric(value) && isNumeric(triggerValue)) { + result = Double.parseDouble(value) <= Double.parseDouble(triggerValue); + } + break; + case "between": + // 比较值用英文中划线分割 - + String[] triggerValues = triggerValue.split("-"); + if (isNumeric(value) && isNumeric(triggerValues[0]) && isNumeric(triggerValues[1])) { + result = Double.parseDouble(value) >= Double.parseDouble(triggerValues[0]) && Double.parseDouble(value) <= Double.parseDouble(triggerValues[1]); + } + break; + case "notBetween": + // 比较值用英文中划线分割 - + String[] trigValues = triggerValue.split("-"); + if (isNumeric(value) && isNumeric(trigValues[0]) && isNumeric(trigValues[1])) { + result = Double.parseDouble(value) <= Double.parseDouble(trigValues[0]) || Double.parseDouble(value) >= Double.parseDouble(trigValues[1]); + } + break; + case "contain": + result = value.contains(triggerValue); + break; + case "notContain": + result = !value.contains(triggerValue); + break; + default: + break; + } + return result; + } + + /** + * 检查静默时间 + * + * @param silent + * @param sceneId + * @return + */ + private boolean checkSilent(int silent, Long sceneId, String serialNumber) { + if (silent == 0 || sceneId == 0) { + return true; + } + // silent:scene_场景编号 + String key = "silent:" + "scene_" + sceneId + ":" + serialNumber; + Calendar calendar = Calendar.getInstance(); + // 查询静默截止时间 + Long expireTime = redisCache.getCacheObject(key); + if (expireTime == null) { + // 添加场景静默时间 + calendar.add(Calendar.MINUTE, silent); + redisCache.setCacheObject(key, calendar.getTimeInMillis()); + return true; + } else { + Long NowTimestamp = Calendar.getInstance().getTimeInMillis(); + if (NowTimestamp > expireTime) { + return true; + } + return false; + } + } + + /** + * 更新静默时间 + * + * @param sceneId + * @param silent + */ + private void updateSilent(int silent, Long sceneId, String serialNumber) { + if (silent == 0 || sceneId == 0) { + return; + } + // 更新场景静默时间 + String key = "silent:" + "scene_" + sceneId + ":" + serialNumber; + Calendar calendar = Calendar.getInstance(); + calendar.add(Calendar.MINUTE, silent); + redisCache.setCacheObject(key, calendar.getTimeInMillis()); + } + + /** + * 判断字符串是否为整数或小数 + */ + private boolean isNumeric(String str) { + Pattern pattern = compile("[0-9]*\\.?[0-9]+"); + Matcher isNum = pattern.matcher(str); + if (!isNum.matches()) { + return false; + } + return true; + } + +} diff --git a/xinda-gateway/xinda-mq/src/main/java/com/xinda/mq/service/IDataHandler.java b/xinda-gateway/xinda-mq/src/main/java/com/xinda/mq/service/IDataHandler.java new file mode 100644 index 0000000..bb6456e --- /dev/null +++ b/xinda-gateway/xinda-mq/src/main/java/com/xinda/mq/service/IDataHandler.java @@ -0,0 +1,46 @@ +package com.xinda.mq.service; + +import com.xinda.common.core.mq.InvokeReqDto; +import com.xinda.mq.model.ReportDataBo; + +/** + * 客户端上报数据处理方法集合 + * @author bill + */ +public interface IDataHandler { + + /** + * 上报属性或功能处理 + * + * @param bo 上报数据模型 + */ + public void reportData(ReportDataBo bo); + + + /** + * 上报事件 + * + * @param bo 上报数据模型 + */ + public void reportEvent(ReportDataBo bo); + + /** + * 上报设备信息 + * @param bo 上报数据模型 + */ + public void reportDevice(ReportDataBo bo); + + /** + * 计算场景变量的值 + * @param id 主键id + * @return java.lang.String + */ + String calculateSceneModelTagValue(Long id); + + /** + * 场景变量指令下发 + * @param reqDto 下发类 + * @return void + */ + void invokeSceneModelTagValue(InvokeReqDto reqDto, String messageId); +} diff --git a/xinda-gateway/xinda-mq/src/main/java/com/xinda/mq/service/IDeviceReportMessageService.java b/xinda-gateway/xinda-mq/src/main/java/com/xinda/mq/service/IDeviceReportMessageService.java new file mode 100644 index 0000000..705ed31 --- /dev/null +++ b/xinda-gateway/xinda-mq/src/main/java/com/xinda/mq/service/IDeviceReportMessageService.java @@ -0,0 +1,47 @@ +package com.xinda.mq.service; + +import com.xinda.common.core.mq.DeviceReport; +import com.xinda.common.core.mq.DeviceReportBo; +import com.xinda.iot.domain.Device; +import com.xinda.iot.model.DeviceStatusVO; +import com.xinda.protocol.base.protocol.IProtocol; + +/** + * 处理设备上报数据解析 + * @author gsb + * @date 2022/10/10 13:48 + */ +public interface IDeviceReportMessageService { + + /** + * 处理设备主动上报数据 + * @param bo + */ + public void parseReportMsg(DeviceReportBo bo); + + /** + * 处理设备普通消息回调 + * @param bo + */ + public void parseReplyMsg(DeviceReportBo bo); + + /** + * 处理设备OTA升级 + * @param bo + */ + public void parseOTAUpdateReply(DeviceReportBo bo); + + + /** + * 构建消息 + * @param bo + */ + public DeviceStatusVO buildReport(DeviceReportBo bo); + + + /** + * 根据产品id获取协议处理器 + */ + IProtocol selectedProtocol(Long productId); + +} diff --git a/xinda-gateway/xinda-mq/src/main/java/com/xinda/mq/service/IDeviceTestService.java b/xinda-gateway/xinda-mq/src/main/java/com/xinda/mq/service/IDeviceTestService.java new file mode 100644 index 0000000..ef6269f --- /dev/null +++ b/xinda-gateway/xinda-mq/src/main/java/com/xinda/mq/service/IDeviceTestService.java @@ -0,0 +1,11 @@ +package com.xinda.mq.service; + +import com.xinda.common.core.mq.DeviceTestReportBo; + +/** + * @author bill + */ +public interface IDeviceTestService { + + public void messageHandler(DeviceTestReportBo testReportBo); +} diff --git a/xinda-gateway/xinda-mq/src/main/java/com/xinda/mq/service/IFunctionInvoke.java b/xinda-gateway/xinda-mq/src/main/java/com/xinda/mq/service/IFunctionInvoke.java new file mode 100644 index 0000000..a45246f --- /dev/null +++ b/xinda-gateway/xinda-mq/src/main/java/com/xinda/mq/service/IFunctionInvoke.java @@ -0,0 +1,28 @@ +package com.xinda.mq.service; + +import com.xinda.common.core.domain.AjaxResult; +import com.xinda.common.core.mq.InvokeReqDto; + +import java.util.Map; + +/** + * 设备指令下发接口 + * @author gsb + * @date 2022/12/5 11:03 + */ +public interface IFunctionInvoke { + + /** + * 服务调用,等待设备响应 + * @param reqDto 服务下发对象 + * @return 数据结果 + */ + public AjaxResult invokeReply(InvokeReqDto reqDto); + + /** + * 服务调用,设备不响应 + * @param reqDto 服务下发对象 + * @return 消息id messageId + */ + public AjaxResult invokeNoReply(InvokeReqDto reqDto); +} diff --git a/xinda-gateway/xinda-mq/src/main/java/com/xinda/mq/service/IMessagePublishService.java b/xinda-gateway/xinda-mq/src/main/java/com/xinda/mq/service/IMessagePublishService.java new file mode 100644 index 0000000..995376b --- /dev/null +++ b/xinda-gateway/xinda-mq/src/main/java/com/xinda/mq/service/IMessagePublishService.java @@ -0,0 +1,17 @@ +package com.xinda.mq.service; + +/** + * 设备消息推送mq + * @author bill + */ +public interface IMessagePublishService { + + + /** + * 发布消息到mq + * @param message 设备消息 + * @param channel 推送channel + */ + public void publish(Object message,String channel); + +} diff --git a/xinda-gateway/xinda-mq/src/main/java/com/xinda/mq/service/IMqttMessagePublish.java b/xinda-gateway/xinda-mq/src/main/java/com/xinda/mq/service/IMqttMessagePublish.java new file mode 100644 index 0000000..91017f3 --- /dev/null +++ b/xinda-gateway/xinda-mq/src/main/java/com/xinda/mq/service/IMqttMessagePublish.java @@ -0,0 +1,77 @@ +package com.xinda.mq.service; + +import com.xinda.common.core.mq.DeviceReportBo; +import com.xinda.common.core.mq.MQSendMessageBo; +import com.xinda.common.core.mq.message.DeviceDownMessage; +import com.xinda.common.core.mq.message.FunctionCallBackBo; +import com.xinda.common.core.mq.ota.OtaUpgradeBo; +import com.xinda.common.core.thingsModel.ThingsModelSimpleItem; +import com.xinda.common.enums.TopicType; +import com.xinda.iot.domain.Device; +import com.xinda.mq.model.ReportDataBo; +import org.checkerframework.checker.units.qual.C; + +import java.util.List; + +public interface IMqttMessagePublish { + + + /** + * 服务(指令)下发 + */ + public void funcSend(MQSendMessageBo bo); + + /** + * OTA升级下发 + */ + public void upGradeOTA(OtaUpgradeBo bo); + + /** + * 下发数据编码 + */ + FunctionCallBackBo buildMessage(MQSendMessageBo bo); + + /** + * 1.发布设备状态 + */ + public void publishStatus(Long productId, String deviceNum, int deviceStatus, int isShadow, int rssi); + + + /** + * 2.发布设备信息 + */ + public void publishInfo(Long productId, String deviceNum); + + + /** + * 3.发布时钟同步信息 + * + * @param bo 数据模型 + */ + public void publishNtp(ReportDataBo bo); + + + /** + * 4.发布属性 + * delay 延时,秒为单位 + */ + public void publishProperty(Long productId, String deviceNum, List thingsList, int delay); + + + /** + * 5.发布功能 + * delay 延时,秒为单位 + */ + public void publishFunction(Long productId, String deviceNum, List thingsList, int delay); + + /** + * 设备数据同步 + * + * @param deviceNumber 设备编号 + * @return 设备 + */ + public Device deviceSynchronization(String deviceNumber); + + + +} diff --git a/xinda-gateway/xinda-mq/src/main/java/com/xinda/mq/service/IRuleEngine.java b/xinda-gateway/xinda-mq/src/main/java/com/xinda/mq/service/IRuleEngine.java new file mode 100644 index 0000000..db10d5f --- /dev/null +++ b/xinda-gateway/xinda-mq/src/main/java/com/xinda/mq/service/IRuleEngine.java @@ -0,0 +1,22 @@ +package com.xinda.mq.service; + +import com.xinda.mq.model.ReportDataBo; + +import java.util.concurrent.ScheduledExecutorService; + +/** + * 规则引擎处理数据方法集合 + * @author bill + */ +public interface IRuleEngine { + + + /** + * 规则匹配(告警和场景联动) + * + * @param bo 上报数据模型 + */ + public void ruleMatch(ReportDataBo bo); + public void addCheckTask(String key, ScheduledExecutorService task); + public void removeCheckTask(String key); +} diff --git a/xinda-gateway/xinda-mq/src/main/java/com/xinda/mq/service/impl/DeviceOtherMsgHandler.java b/xinda-gateway/xinda-mq/src/main/java/com/xinda/mq/service/impl/DeviceOtherMsgHandler.java new file mode 100644 index 0000000..c421483 --- /dev/null +++ b/xinda-gateway/xinda-mq/src/main/java/com/xinda/mq/service/impl/DeviceOtherMsgHandler.java @@ -0,0 +1,86 @@ +package com.xinda.mq.service.impl; + +import com.xinda.common.core.mq.DeviceReportBo; +import com.xinda.common.enums.TopicType; +import com.xinda.common.utils.StringUtils; +import com.xinda.common.utils.gateway.mq.TopicsUtils; +import com.xinda.mq.model.ReportDataBo; +import com.xinda.mq.service.IDataHandler; +import com.xinda.mq.service.IMqttMessagePublish; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; + +/** + * @author gsb + * @date 2023/2/27 14:42 + */ +@Component +@Slf4j +public class DeviceOtherMsgHandler { + + @Resource + private TopicsUtils topicsUtils; + @Resource + private IDataHandler dataHandler; + @Resource + private IMqttMessagePublish messagePublish; + + /** + * true: 使用netty搭建的mqttBroker false: 使用emq + */ + @Value("${server.broker.enabled}") + private Boolean enabled; + + + /** + * 非属性消息消息处理入口 + * + * @param bo + */ + public void messageHandler(DeviceReportBo bo) { + String type = ""; + String name = topicsUtils.parseTopicName(bo.getTopicName()); + if (StringUtils.isEmpty(name) || name.endsWith(TopicType.FUNCTION_GET.getTopicSuffix())) return; + ReportDataBo data = this.buildReportData(bo); + TopicType topicType = TopicType.getType(name); + switch (topicType) { + case INFO_POST: + dataHandler.reportDevice(data); + break; + case NTP_POST: + messagePublish.publishNtp(data); + break; + case FUNCTION_POST: + data.setShadow(false); + data.setType(2); + data.setRuleEngine(true); + dataHandler.reportData(data); + break; + case EVENT_POST: + data.setType(3); + data.setRuleEngine(true); + dataHandler.reportEvent(data); + break; + } + } + + /** + * 组装数据 + */ + private ReportDataBo buildReportData(DeviceReportBo bo) { + String message = new String(bo.getData()); + log.info("收到设备信息[{}]", message); + Long productId = topicsUtils.parseProductId(bo.getTopicName()); + String serialNumber = topicsUtils.parseSerialNumber(bo.getTopicName()); + ReportDataBo dataBo = new ReportDataBo(); + dataBo.setMessage(message); + dataBo.setProductId(productId); + dataBo.setSerialNumber(serialNumber); + dataBo.setRuleEngine(false); + return dataBo; + } + +} diff --git a/xinda-gateway/xinda-mq/src/main/java/com/xinda/mq/service/impl/FunctionInvokeImpl.java b/xinda-gateway/xinda-mq/src/main/java/com/xinda/mq/service/impl/FunctionInvokeImpl.java new file mode 100644 index 0000000..9ba0312 --- /dev/null +++ b/xinda-gateway/xinda-mq/src/main/java/com/xinda/mq/service/impl/FunctionInvokeImpl.java @@ -0,0 +1,143 @@ +package com.xinda.mq.service.impl; + +import cn.hutool.json.JSONObject; +import cn.hutool.json.JSONUtil; +import com.xinda.common.core.domain.AjaxResult; +import com.xinda.common.core.domain.model.LoginUser; +import com.xinda.common.core.mq.DeviceReplyBo; +import com.xinda.common.core.mq.InvokeReqDto; +import com.xinda.common.core.mq.MQSendMessageBo; +import com.xinda.common.core.mq.MessageReplyBo; +import com.xinda.common.core.protocol.modbus.ModbusCode; +import com.xinda.common.core.redis.RedisCache; +import com.xinda.common.core.redis.RedisKeyBuilder; +import com.xinda.common.enums.FunctionReplyStatus; +import com.xinda.common.enums.ResultCode; +import com.xinda.common.enums.ThingsModelType; +import com.xinda.common.enums.scenemodel.SceneModelVariableTypeEnum; +import com.xinda.common.exception.ServiceException; +import com.xinda.common.utils.DateUtils; +import com.xinda.common.utils.MessageUtils; +import com.xinda.common.utils.SecurityUtils; +import com.xinda.common.utils.StringUtils; +import com.xinda.common.utils.bean.BeanUtils; +import com.xinda.iot.cache.ITSLCache; +import com.xinda.iot.domain.Device; +import com.xinda.iot.domain.FunctionLog; +import com.xinda.iot.model.ThingsModels.ThingsModelValueItem; +import com.xinda.iot.service.IDeviceService; +import com.xinda.iot.service.IFunctionLogService; +import com.xinda.iot.service.IOrderControlService; +import com.xinda.iot.util.SnowflakeIdWorker; +import com.xinda.mq.redischannel.producer.MessageProducer; +import com.xinda.mq.service.IDataHandler; +import com.xinda.mq.service.IFunctionInvoke; +import lombok.extern.slf4j.Slf4j; +import org.aspectj.weaver.loadtime.Aj; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.HashMap; +import java.util.Map; +import java.util.Objects; +import java.util.concurrent.TimeUnit; + +/** + * @author gsb + * @date 2022/12/5 11:34 + */ +@Slf4j +@Service +public class FunctionInvokeImpl implements IFunctionInvoke { + + @Resource + private IDataHandler dataHandler; + @Resource + private IFunctionLogService functionLogService; + private SnowflakeIdWorker snowflakeIdWorker = new SnowflakeIdWorker(2); + + /** + * 服务调用,等待设备响应 + * @param reqDto 服务下发对象 + * @return 数据结果 + */ + @Override + public AjaxResult invokeReply(InvokeReqDto reqDto){ + AjaxResult ajaxResult = invokeNoReply(reqDto); + String messageId = ajaxResult.get("msg")+""; + int status = this.queryData(messageId); + ajaxResult.put("code", status); + if (status == FunctionReplyStatus.UNKNOWN.getCode()) { + ajaxResult.put("msg", FunctionReplyStatus.UNKNOWN.getMessage()); + this.updateFunctionLog(messageId); + }else { + ajaxResult.put("msg",FunctionReplyStatus.SUCCESS.getMessage()); + } + return ajaxResult; + } + + /** + * 服务调用,设备不响应 + * @param reqDto 服务下发对象 + * @return 消息id messageId + */ + @Override + public AjaxResult invokeNoReply(InvokeReqDto reqDto){ + log.debug("=>下发指令请求:[{}]",reqDto); + if (null != reqDto.getSceneModelId() && null != reqDto.getVariableType() && !SceneModelVariableTypeEnum.THINGS_MODEL.getType().equals(reqDto.getVariableType())) { + String messageId = snowflakeIdWorker.nextId() + ""; + dataHandler.invokeSceneModelTagValue(reqDto, messageId); + return AjaxResult.success(messageId); + } + if (StringUtils.isEmpty(reqDto.getSerialNumber())) { + return AjaxResult.error("设备编号不能为空"); + } + MQSendMessageBo bo = new MQSendMessageBo(); + BeanUtils.copyBeanProp(bo,reqDto); + long id = snowflakeIdWorker.nextId(); + String messageId = id+""; + bo.setMessageId(messageId+""); + bo.setUserId(reqDto.getUserId()); + MessageProducer.sendFunctionInvoke(bo); + return AjaxResult.success(messageId); + } + + /** + * 轮询5S拿返回值 + * @param messageId 消息id + * @return 回调对象 + */ + private int queryData(String messageId) { + FunctionLog functionLog = null; + int status = 204; + long startTime = DateUtils.getTimestamp(); + /**5秒轮询拿值*/ + while ((DateUtils.getTimestamp() - startTime) < 5 * 1000) { + try { + functionLog = functionLogService.selectLogByMessageId(messageId); + if (null != functionLog && functionLog.getResultCode() == FunctionReplyStatus.SUCCESS.getCode()) { + status = FunctionReplyStatus.SUCCESS.getCode(); + break; + } + Thread.sleep(1000); + } catch (Exception e) { + log.error("=>读取设备下发指定回执异常", e); + } + } + return status; + } + + /** + * 更新设备下发指令,当设备超时未回复情况 + * @param messageId + */ + private void updateFunctionLog(String messageId){ + FunctionLog functionLog = new FunctionLog(); + functionLog.setResultCode(FunctionReplyStatus.UNKNOWN.getCode()); + functionLog.setResultMsg(FunctionReplyStatus.UNKNOWN.getMessage()); + functionLog.setReplyTime(DateUtils.getNowDate()); + functionLog.setMessageId(messageId); + functionLogService.updateByMessageId(functionLog); + } + +} diff --git a/xinda-gateway/xinda-mq/src/main/java/com/xinda/mq/service/impl/MessageManager.java b/xinda-gateway/xinda-mq/src/main/java/com/xinda/mq/service/impl/MessageManager.java new file mode 100644 index 0000000..7711e65 --- /dev/null +++ b/xinda-gateway/xinda-mq/src/main/java/com/xinda/mq/service/impl/MessageManager.java @@ -0,0 +1,77 @@ +package com.xinda.mq.service.impl; + +import com.xinda.base.session.Session; +import com.xinda.base.session.SessionManager; +import com.xinda.common.core.domain.AjaxResult; +import com.xinda.common.core.protocol.Message; +import com.xinda.common.exception.ServiceException; +import com.xinda.modbus.model.ModbusRtu; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; +import reactor.core.publisher.Mono; + +import java.time.Duration; + +/** + * @author gsb + * @date 2022/11/22 10:30 + */ +@Component +@Slf4j +public class MessageManager { + + private static final Mono NEVER = Mono.never(); + private static final Mono OFFLINE_EXCEPTION = Mono.error( new ServiceException("离线的客户端",4000)); + private static final Mono OFFLINE_RESULT = Mono.just(new AjaxResult(4000, "离线的客户端")); + private static final Mono SEND_FAIL_RESULT = Mono.just(new AjaxResult(4001, "消息发送失败")); + + private SessionManager sessionManager; + + public MessageManager(SessionManager sessionManager){ + this.sessionManager = sessionManager; + } + + public Mono notifyR(String sessionId, ModbusRtu request){ + Session session = sessionManager.getSession(sessionId); + if (session == null){ + return OFFLINE_EXCEPTION; + } + return session.notify(request); + } + + public Mono requestR(String sessionId, Message request, Class responseClass){ + Session session = sessionManager.getSession(sessionId); + if (session == null){ + return OFFLINE_RESULT; + } + return session.request(request,responseClass) + .map(message -> AjaxResult.success(message)) + .onErrorResume(e ->{ + log.warn("消息发送失败:{}",e); + return SEND_FAIL_RESULT; + }); + } + + /** + * 下发指令等待回复 + * @param sessionId + * @return + */ + public Mono request(String sessionId, ModbusRtu request, Class responseClass, long timeout){ + return request(sessionId,request,responseClass).timeout(Duration.ofMillis(timeout)); + } + + /** + * 下发指令,不等待回复 + * @param sessionId + * @return + */ + public Mono request(String sessionId, ModbusRtu request, Class responseClass){ + Session session = sessionManager.getSession(sessionId); + if (session == null){ + return OFFLINE_EXCEPTION; + } + return session.request(request,responseClass); + } + +} diff --git a/xinda-gateway/xinda-mq/src/main/java/com/xinda/mq/service/impl/RuleEngineHandler.java b/xinda-gateway/xinda-mq/src/main/java/com/xinda/mq/service/impl/RuleEngineHandler.java new file mode 100644 index 0000000..6845f92 --- /dev/null +++ b/xinda-gateway/xinda-mq/src/main/java/com/xinda/mq/service/impl/RuleEngineHandler.java @@ -0,0 +1,108 @@ +package com.xinda.mq.service.impl; + +import com.alibaba.fastjson2.JSON; +import com.xinda.common.core.thingsModel.ThingsModelSimpleItem; +import com.xinda.iot.domain.*; +import com.xinda.iot.mapper.*; +import com.xinda.iot.model.ScriptCondition; +import com.xinda.iot.service.IScriptService; +import com.xinda.mq.model.ReportDataBo; +import com.xinda.mq.service.IRuleEngine; +import com.xinda.mq.ruleEngine.SceneContext; +import com.xinda.ruleEngine.core.FlowLogExecutor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; + +import javax.annotation.Resource; +import java.util.List; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.ScheduledExecutorService; + +import static java.util.regex.Pattern.compile; + +/** + * 规则引擎处理数据方法 + * + * @author bill + */ +@Component +@Slf4j +public class RuleEngineHandler implements IRuleEngine { + + @Resource + private SceneDeviceMapper sceneDeviceMapper; + + @Resource + private IScriptService scriptService; + + @Autowired + private FlowLogExecutor flowExecutor; + + private static final Map CEHCK_CACHE = new ConcurrentHashMap<>(); + + /** + * 规则匹配(告警和场景联动) + * + * @param bo 上报数据模型bo + * @see ReportDataBo + */ + public void ruleMatch(ReportDataBo bo) { + try { + // 场景联动处理 + this.sceneProcess(bo); + } catch (Exception e) { + log.error("接收数据,解析数据时异常 message={}", e, e.getMessage()); + } + } + + /** + * 场景规则处理 + */ + public void sceneProcess(ReportDataBo bo) throws ExecutionException, InterruptedException { + // 查询设备关联的场景 + SceneDevice sceneDeviceParam = new SceneDevice(); + sceneDeviceParam.setProductId(bo.getProductId()); + sceneDeviceParam.setSerialNumber(bo.getSerialNumber()); + List sceneList = sceneDeviceMapper.selectTriggerDeviceRelateScenes(sceneDeviceParam); + + int type = bo.getType(); + // 获取上报的物模型 + List thingsModelSimpleItems = bo.getDataList(); + if (CollectionUtils.isEmpty(bo.getDataList())) { + thingsModelSimpleItems = JSON.parseArray(bo.getMessage(), ThingsModelSimpleItem.class); + } + // 执行场景规则,异步非阻塞 + for (Scene scene : sceneList) { + SceneContext context = new SceneContext(bo.getSerialNumber(), bo.getProductId(), type, thingsModelSimpleItems); + ScriptCondition scriptCondition = ScriptCondition.builder().sceneId(scene.getSceneId()).build(); + String requestId = scene.getChainName(); + List diff --git a/xinda-plugs/xinda-generator/src/main/resources/vm/vue/index.vue.vm b/xinda-plugs/xinda-generator/src/main/resources/vm/vue/index.vue.vm new file mode 100644 index 0000000..6296014 --- /dev/null +++ b/xinda-plugs/xinda-generator/src/main/resources/vm/vue/index.vue.vm @@ -0,0 +1,602 @@ + + + diff --git a/xinda-plugs/xinda-generator/src/main/resources/vm/vue/v3/index-tree.vue.vm b/xinda-plugs/xinda-generator/src/main/resources/vm/vue/v3/index-tree.vue.vm new file mode 100644 index 0000000..7bbd2fc --- /dev/null +++ b/xinda-plugs/xinda-generator/src/main/resources/vm/vue/v3/index-tree.vue.vm @@ -0,0 +1,474 @@ + + + diff --git a/xinda-plugs/xinda-generator/src/main/resources/vm/vue/v3/index.vue.vm b/xinda-plugs/xinda-generator/src/main/resources/vm/vue/v3/index.vue.vm new file mode 100644 index 0000000..8b25665 --- /dev/null +++ b/xinda-plugs/xinda-generator/src/main/resources/vm/vue/v3/index.vue.vm @@ -0,0 +1,590 @@ + + + diff --git a/xinda-plugs/xinda-generator/src/main/resources/vm/vue/v3/readme.txt b/xinda-plugs/xinda-generator/src/main/resources/vm/vue/v3/readme.txt new file mode 100644 index 0000000..99239bb --- /dev/null +++ b/xinda-plugs/xinda-generator/src/main/resources/vm/vue/v3/readme.txt @@ -0,0 +1 @@ +ʹõRuoYi-Vue3ǰˣôҪһ´Ŀ¼ģindex.vue.vmindex-tree.vue.vmļϼvueĿ¼ \ No newline at end of file diff --git a/xinda-plugs/xinda-generator/src/main/resources/vm/xml/mapper.xml.vm b/xinda-plugs/xinda-generator/src/main/resources/vm/xml/mapper.xml.vm new file mode 100644 index 0000000..0ceb3d8 --- /dev/null +++ b/xinda-plugs/xinda-generator/src/main/resources/vm/xml/mapper.xml.vm @@ -0,0 +1,135 @@ + + + + + +#foreach ($column in $columns) + +#end + +#if($table.sub) + + + + + + +#foreach ($column in $subTable.columns) + +#end + +#end + + + select#foreach($column in $columns) $column.columnName#if($foreach.count != $columns.size()),#end#end from ${tableName} + + + + + + + + insert into ${tableName} + +#foreach($column in $columns) +#if($column.columnName != $pkColumn.columnName || !$pkColumn.increment) + $column.columnName, +#end +#end + + +#foreach($column in $columns) +#if($column.columnName != $pkColumn.columnName || !$pkColumn.increment) + #{$column.javaField}, +#end +#end + + + + + update ${tableName} + +#foreach($column in $columns) +#if($column.columnName != $pkColumn.columnName) + $column.columnName = #{$column.javaField}, +#end +#end + + where ${pkColumn.columnName} = #{${pkColumn.javaField}} + + + + delete from ${tableName} where ${pkColumn.columnName} = #{${pkColumn.javaField}} + + + + delete from ${tableName} where ${pkColumn.columnName} in + + #{${pkColumn.javaField}} + + +#if($table.sub) + + + delete from ${subTableName} where ${subTableFkName} in + + #{${subTableFkclassName}} + + + + + delete from ${subTableName} where ${subTableFkName} = #{${subTableFkclassName}} + + + + insert into ${subTableName}(#foreach($column in $subTable.columns) $column.columnName#if($foreach.count != $subTable.columns.size()),#end#end) values + + (#foreach($column in $subTable.columns) #{item.$column.javaField}#if($foreach.count != $subTable.columns.size()),#end#end) + + +#end + \ No newline at end of file diff --git a/xinda-plugs/xinda-http/pom.xml b/xinda-plugs/xinda-http/pom.xml new file mode 100644 index 0000000..e464fbb --- /dev/null +++ b/xinda-plugs/xinda-http/pom.xml @@ -0,0 +1,42 @@ + + + 4.0.0 + + com.xinda + xinda-plugs + 3.8.5 + + + xinda-http + 3.8.5 + + + 8 + 8 + UTF-8 + + + + + + com.dtflys.forest + forest-spring-boot-starter + ${forest.version} + + + + com.dtflys.forest + forest-jaxb + ${forest.version} + + + + cn.hutool + hutool-all + + + + + diff --git a/xinda-plugs/xinda-http/src/main/java/com/xinda/http/client/Amap.java b/xinda-plugs/xinda-http/src/main/java/com/xinda/http/client/Amap.java new file mode 100644 index 0000000..07bac2c --- /dev/null +++ b/xinda-plugs/xinda-http/src/main/java/com/xinda/http/client/Amap.java @@ -0,0 +1,54 @@ +package com.xinda.http.client; + +import com.dtflys.forest.annotation.BaseRequest; +import com.dtflys.forest.annotation.DataVariable; +import com.dtflys.forest.annotation.Get; +import com.dtflys.forest.annotation.Query; +import com.dtflys.forest.annotation.Var; +import com.xinda.http.model.Coordinate; +import com.xinda.http.model.Location; +import com.xinda.http.model.Result; + +import java.util.Map; + +/** + * 高德地图服务客户端接口 + * @author gongjun + */ +@BaseRequest(baseURL = "http://ditu.amap.com") +public interface Amap { + + /** + * 根据经纬度获取详细地址 + * @param longitude 经度 + * @param latitude 纬度 + * @return + */ + @Get("http://ditu.amap.com/service/regeo?longitude={lng}&latitude={lat}") + Result getLocation(@Var("lng") String longitude, @Var("lat") String latitude); + + /** + * 根据经纬度获取详细地址 + * @param coordinate 经纬度对象 + * @return + */ + @Get(url = "/service/regeo") + Map getLocation(@Query Coordinate coordinate); + + + /** + * 根据经纬度获取详细地址 + * @param coordinate 经纬度对象 + * @return + */ + @Get( + url = "/service/regeo", + data = { + "longitude=${coord.longitude}", + "latitude=${coord.latitude}" + } + ) + Map getLocationByCoordinate(@DataVariable("coord") Coordinate coordinate); + + +} diff --git a/xinda-plugs/xinda-http/src/main/java/com/xinda/http/client/Cn12306.java b/xinda-plugs/xinda-http/src/main/java/com/xinda/http/client/Cn12306.java new file mode 100644 index 0000000..d7b38df --- /dev/null +++ b/xinda-plugs/xinda-http/src/main/java/com/xinda/http/client/Cn12306.java @@ -0,0 +1,11 @@ +package com.xinda.http.client; + +import com.dtflys.forest.annotation.Get; +import com.dtflys.forest.http.ForestResponse; + +public interface Cn12306 { + + @Get(url = "${idServiceUrl}") + ForestResponse index(); + +} diff --git a/xinda-plugs/xinda-http/src/main/java/com/xinda/http/client/DownloadClient.java b/xinda-plugs/xinda-http/src/main/java/com/xinda/http/client/DownloadClient.java new file mode 100644 index 0000000..8578281 --- /dev/null +++ b/xinda-plugs/xinda-http/src/main/java/com/xinda/http/client/DownloadClient.java @@ -0,0 +1,48 @@ +package com.xinda.http.client; + +import com.dtflys.forest.annotation.BaseRequest; +import com.dtflys.forest.annotation.GetRequest; +import com.dtflys.forest.annotation.Request; +import com.dtflys.forest.callback.OnProgress; +import com.dtflys.forest.extensions.DownloadFile; + +import java.io.File; +import java.io.InputStream; + +/** + * @author gongjun[dt_flys@hotmail.com] + * @since 2020-08-04 22:33 + */ +@BaseRequest(baseURL = "localhost:8080") +public interface DownloadClient { + + @Request(url = "/images/test-img.jpg") + @DownloadFile(dir = "${0}", filename = "test-download-annotation.jpg") + void downloadImage(String targetDir); + + /** + * 用@DownloadFile注解指定文件下载文件,dir属性指定下载目标目录,filename指定目标文件名 + * @param targetDir + */ + @GetRequest(url = "/images/test-img.jpg") + @DownloadFile(dir = "${0}", filename = "target.zip") + File downloadFile(String targetDir, OnProgress onProgress); + + /** + * 返回类型用byte[],可将下载的文件转换成字节数组 + * @return + */ + @GetRequest(url = "/images/test-img.jpg") + @DownloadFile(dir = "D:\\TestDownload", filename = "temp.jpg") + byte[] downloadImageToByteArrayWithAnnotation(); + + + @Request(url = "/images/test-img.jpg") + byte[] downloadImageToByteArray(); + + @Request(url = "/images/test-img.jpg") + @DownloadFile(dir = "D:\\TestDownload", filename = "temp.jpg") + InputStream downloadImageToInputStream(); + + +} diff --git a/xinda-plugs/xinda-http/src/main/java/com/xinda/http/client/Gitee.java b/xinda-plugs/xinda-http/src/main/java/com/xinda/http/client/Gitee.java new file mode 100644 index 0000000..e48f09a --- /dev/null +++ b/xinda-plugs/xinda-http/src/main/java/com/xinda/http/client/Gitee.java @@ -0,0 +1,74 @@ +package com.xinda.http.client; + +import com.dtflys.forest.annotation.BaseRequest; +import com.dtflys.forest.annotation.Get; +import com.dtflys.forest.annotation.Query; +import com.dtflys.forest.annotation.Request; +import com.dtflys.forest.callback.OnError; +import com.dtflys.forest.callback.OnSuccess; +import com.xinda.http.model.GiteeBranch; +import com.xinda.http.model.GiteeReadme; + +import java.util.List; +import java.util.concurrent.Future; + +/** + * Gitee客户端接口 + */ +@BaseRequest(baseURL = "${giteeUrl}", sslProtocol = "TLSv1.3") +public interface Gitee { + + /** + * Gitee主页 + * @return + */ + @Get(url = "/", sslProtocol = "TLSv2") + String index(); + + /** + * 异步访问Gitee主页 + * @return + */ + @Request(url = "/", async = true) + Future asyncIndex(); + + /** + * 异步访问Gitee主页 + * @return + */ + @Request(url = "/", async = true) + void asyncIndex2(OnSuccess onSuccess, OnError onError); + + + + /** + * 获取所有分支 + * @param accessToken 用户授权码 + * @param owner 仓库所属空间地址(企业、组织或个人的地址path) + * @param repo 仓库路径(path) + * @return + */ + @Request( + url = "/api/v5/repos/${1}/${2}/branches", + contentType = "application/json", + sslProtocol = "TLSv3", + dataType = "json") + List branches(@Query("accessToken") String accessToken, String owner, String repo); + + + /** + * 获取仓库README + * @param accessToken 用户授权码 + * @param owner 仓库所属空间地址(企业、组织或个人的地址path) + * @param repo 仓库路径(path) + * @param ref 分支、tag或commit + * @return + */ + @Request( + url = "/api/v5/repos/${1}/${2}/readme", + contentType = "application/json", + dataType = "json", + data = {"accessToken=${0}", "ref=${3}"}) + GiteeReadme readme(String accessToken, String owner, String repo, String ref); + +} diff --git a/xinda-plugs/xinda-http/src/main/java/com/xinda/http/client/TestInterceptorClient.java b/xinda-plugs/xinda-http/src/main/java/com/xinda/http/client/TestInterceptorClient.java new file mode 100644 index 0000000..91854b6 --- /dev/null +++ b/xinda-plugs/xinda-http/src/main/java/com/xinda/http/client/TestInterceptorClient.java @@ -0,0 +1,19 @@ +package com.xinda.http.client; + +import com.dtflys.forest.annotation.BaseRequest; +import com.dtflys.forest.annotation.DataParam; +import com.dtflys.forest.annotation.Request; +import com.xinda.http.interceptors.ApiClientInterceptor; + + +@BaseRequest(baseURL = "localhost:8080") +public interface TestInterceptorClient { + + @Request( + url = "/receive-interceptor", + type = "post", + dataType = "text", + interceptor = ApiClientInterceptor.class + ) + String testInterceptor(@DataParam("username") String username); +} diff --git a/xinda-plugs/xinda-http/src/main/java/com/xinda/http/client/UploadClient.java b/xinda-plugs/xinda-http/src/main/java/com/xinda/http/client/UploadClient.java new file mode 100644 index 0000000..6c50029 --- /dev/null +++ b/xinda-plugs/xinda-http/src/main/java/com/xinda/http/client/UploadClient.java @@ -0,0 +1,47 @@ +package com.xinda.http.client; + +import com.dtflys.forest.annotation.*; +import com.dtflys.forest.callback.OnProgress; +import org.springframework.core.io.Resource; +import org.springframework.web.multipart.MultipartFile; + +import java.io.File; +import java.io.InputStream; +import java.util.List; +import java.util.Map; + +@BaseRequest(baseURL = "localhost:8080") +public interface UploadClient { + + @Request( + url = "/upload", + type = "post", + dataType = "json", + contentType = "multipart/form-data" + ) + Map upload(@DataFile("file") String filePath, OnProgress onProgress); + + + @Post(url = "/upload") + Map upload(@DataFile("file") File file, OnProgress onProgress); + + @Post(url = "/upload") + Map upload(@DataFile(value = "file", fileName = "${1}") byte[] bytes, String filename); + + @Post(url = "/upload") + Map upload(@DataFile(value = "file", fileName = "${1}") InputStream in, String filename); + + + @Post(url = "/upload") + Map upload(@DataFile(value = "file") Resource resource); + + @PostRequest(url = "/upload") + Map upload(@DataFile(value = "file") MultipartFile multipartFile, @Body("fileName") String fileName, OnProgress onProgress); + + @PostRequest(url = "/upload") + Map uploadList(@DataFile(value = "file") List multipartFileList, OnProgress onProgress); + + + @PostRequest(url = "/upload-array") + Map uploadPathList(@DataFile(value = "files", fileName = "test-img-${_index}.jpg") List pathList); +} diff --git a/xinda-plugs/xinda-http/src/main/java/com/xinda/http/controller/ForestExampleController.java b/xinda-plugs/xinda-http/src/main/java/com/xinda/http/controller/ForestExampleController.java new file mode 100644 index 0000000..55d722d --- /dev/null +++ b/xinda-plugs/xinda-http/src/main/java/com/xinda/http/controller/ForestExampleController.java @@ -0,0 +1,114 @@ +package com.xinda.http.controller; + +import com.xinda.http.client.Amap; +import com.xinda.http.client.Cn12306; +import com.xinda.http.client.Gitee; +import com.xinda.http.model.*; +import com.dtflys.forest.http.ForestResponse; +import javax.annotation.Resource; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +import java.math.BigDecimal; +import java.util.List; +import java.util.Map; +import java.util.concurrent.CountDownLatch; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.Future; +import java.util.concurrent.atomic.AtomicReference; + +@Slf4j +@RestController +public class ForestExampleController { + + @Resource + private Amap amap; + + @Resource + private Gitee gitee; + + @Resource + private Cn12306 cn12306; + + + + @GetMapping("/amap/location") + public Result amapLocation(@RequestParam BigDecimal longitude, @RequestParam BigDecimal latitude) { + Result result = amap.getLocation(longitude.toEngineeringString(), latitude.toEngineeringString()); + return result; + } + + @GetMapping("/amap/location2") + public Map amapLocation2(@RequestParam BigDecimal longitude, @RequestParam BigDecimal latitude) { + Coordinate coordinate = new Coordinate( + longitude.toEngineeringString(), + latitude.toEngineeringString()); + Map result = amap.getLocation(coordinate); + return result; + } + + @GetMapping("/amap/location3") + public Map amapLocation3(@RequestParam BigDecimal longitude, @RequestParam BigDecimal latitude) { + Coordinate coordinate = new Coordinate( + longitude.toEngineeringString(), + latitude.toEngineeringString()); + Map result = amap.getLocationByCoordinate(coordinate); + return result; + } + + @GetMapping("/gitee") + public String gitee() { + String result = gitee.index(); + return result; + } + + + @GetMapping("/gitee/async") + public String aysncGitee() throws ExecutionException, InterruptedException { + Future future = gitee.asyncIndex(); + return future.get(); + } + + @GetMapping("/gitee/async2") + public String aysncGitee2() throws ExecutionException, InterruptedException { + AtomicReference ref = new AtomicReference<>(""); + CountDownLatch latch = new CountDownLatch(1); + gitee.asyncIndex2((result, request, response) -> { + ref.set(result); + latch.countDown(); + }, (ex, request, response) -> { + ref.set(ex.getMessage()); + latch.countDown(); + }); + latch.await(); + return ref.get(); + } + + + + @GetMapping("/12306") + public String cn12306() { + ForestResponse response = cn12306.index(); + return response.getResult(); + } + + + @GetMapping("/gitee/branches") + public List giteeBranches(@RequestParam String accessToken, + @RequestParam String owner, + @RequestParam String repo) { + List branches = gitee.branches(accessToken, owner, repo); + return branches; + } + + @GetMapping("/gitee/readme") + public GiteeReadme giteeReadme(@RequestParam String accessToken, + @RequestParam String owner, + @RequestParam String repo, + @RequestParam String ref) { + GiteeReadme readme = gitee.readme(accessToken, owner, repo, ref); + return readme; + } +} diff --git a/xinda-plugs/xinda-http/src/main/java/com/xinda/http/controller/InterceptorController.java b/xinda-plugs/xinda-http/src/main/java/com/xinda/http/controller/InterceptorController.java new file mode 100644 index 0000000..edbd8b9 --- /dev/null +++ b/xinda-plugs/xinda-http/src/main/java/com/xinda/http/controller/InterceptorController.java @@ -0,0 +1,36 @@ +package com.xinda.http.controller; + +import com.xinda.http.client.TestInterceptorClient; +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + + +@RestController +public class InterceptorController { + + private static Logger logger = LoggerFactory.getLogger(InterceptorController.class); + + @Resource + private TestInterceptorClient testInterceptorClient; + + @PostMapping("/receive-interceptor") + public String receiveInterceptor(HttpServletRequest request, @RequestParam String username) { + String token = request.getHeader("accessToken"); + logger.info("accessToken: {}", token); + return "ok"; + } + + @GetMapping("/test-interceptor") + public String testInterceptor(@RequestParam String username) { + String result = testInterceptorClient.testInterceptor(username); + return result; + } + +} diff --git a/xinda-plugs/xinda-http/src/main/java/com/xinda/http/controller/TestAsyncController.java b/xinda-plugs/xinda-http/src/main/java/com/xinda/http/controller/TestAsyncController.java new file mode 100644 index 0000000..a9913c8 --- /dev/null +++ b/xinda-plugs/xinda-http/src/main/java/com/xinda/http/controller/TestAsyncController.java @@ -0,0 +1,101 @@ +package com.xinda.http.controller; + +import com.dtflys.forest.Forest; +import com.dtflys.forest.logging.LogConfiguration; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.HashMap; +import java.util.Map; +import java.util.concurrent.CountDownLatch; +import java.util.concurrent.atomic.AtomicInteger; + +@RestController +@RequestMapping("/async") +public class TestAsyncController { + + @GetMapping("/data") + public Map getData() { + Map map = new HashMap<>(); + map.put("value", "foo"); + return map; + } + + @GetMapping("/test") + public Map testAsync() throws InterruptedException { + int batch = 20000; + int total = 100; + final LogConfiguration logConfiguration = new LogConfiguration(); + logConfiguration.setLogEnabled(false); + for (int i = 0; i < batch; i++) { + System.out.println("执行批次: " + i); + final CountDownLatch latch = new CountDownLatch(total); + final AtomicInteger count = new AtomicInteger(0); + final AtomicInteger errorCount = new AtomicInteger(0); + for (int j = 0; j < total; j++) { + try { + Forest.get("/async/data") + .backend("httpclient") + .host("localhost") + .port(8080) + .setLogConfiguration(logConfiguration) + .async() + .onSuccess((data, req, res) -> { + latch.countDown(); + int c = count.incrementAndGet(); +// System.out.println("已成功 " + c); + }) + .onError((ex, req, res) -> { + latch.countDown(); + int c = count.incrementAndGet(); + errorCount.incrementAndGet(); + System.out.println("已失败 第一阶段: " + ex); + }) + .execute(); + } catch (Throwable th) { + } + } + try { + latch.await(); + } catch (InterruptedException e) { + } + + final CountDownLatch latch2 = new CountDownLatch(total); + final AtomicInteger count2 = new AtomicInteger(0); + final AtomicInteger errorCount2 = new AtomicInteger(0); + for (int j = 0; j < total; j++) { + Forest.get("/async/data") + .backend("httpclient") + .host("localhost") + .port(8080) + .async() + .setLogConfiguration(logConfiguration) + .onSuccess((data, req, res) -> { + latch2.countDown(); + int c = count2.incrementAndGet(); + }) + .onError((ex, req, res) -> { + latch2.countDown(); + int c = count2.incrementAndGet(); + if (ex != null) { + errorCount2.incrementAndGet(); + } + if (c == total) { + } else { + System.out.println("已失败 第二阶段: " + c); + } + }) + .execute(); + } + try { + latch2.await(); + } catch (InterruptedException e) { + } + + } + Map map = new HashMap<>(); + map.put("status", "ok"); + return map; + } +} diff --git a/xinda-plugs/xinda-http/src/main/java/com/xinda/http/controller/TestDownloadController.java b/xinda-plugs/xinda-http/src/main/java/com/xinda/http/controller/TestDownloadController.java new file mode 100644 index 0000000..f26a723 --- /dev/null +++ b/xinda-plugs/xinda-http/src/main/java/com/xinda/http/controller/TestDownloadController.java @@ -0,0 +1,85 @@ +package com.xinda.http.controller; + +import com.xinda.http.client.DownloadClient; +import javax.annotation.Resource; + +import org.apache.commons.io.FileUtils; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.io.File; +import java.io.IOException; +import java.io.InputStream; +import java.util.HashMap; +import java.util.Map; + +/** + * @author gongjun[dt_flys@hotmail.com] + * @since 2020-08-04 22:36 + */ +@RestController +public class TestDownloadController { + + @Resource + private DownloadClient downloadClient; + + + @GetMapping("/download-image") + public Map downloadImage() { + Map result = new HashMap<>(); + File file = downloadClient.downloadFile("D:\\TestDownload", progress -> { + System.out.println("-------------------------------------------------------"); + System.out.println("total bytes: " + progress.getTotalBytes()); + System.out.println("current bytes: " + progress.getCurrentBytes()); + System.out.println("percentage: " + (int) Math.floor(progress.getRate() * 100) + "%"); + }); + result.put("status", "ok"); + return result; + } + + @GetMapping("/download-file") + public Map downloadFile() { + Map result = new HashMap<>(); + File file = downloadClient.downloadFile("D:\\TestDownload", progress -> { + System.out.println("-------------------------------------------------------"); + System.out.println("total bytes: " + progress.getTotalBytes()); + System.out.println("current bytes: " + progress.getCurrentBytes()); + System.out.println("percentage: " + (int) Math.floor(progress.getRate() * 100) + "%"); + }); + result.put("status", "ok"); + return result; + } + + @GetMapping("/download-image-to-byte-array") + public Map downloadImageToByteArray() throws IOException { + Map result = new HashMap<>(); + byte[] buffer = downloadClient.downloadImageToByteArray(); + File file = new File("D:\\TestDownload\\test-byte-array.jpg"); + FileUtils.writeByteArrayToFile(file, buffer); + result.put("status", "ok"); + return result; + } + + @GetMapping("/download-image-to-byte-array-with-annotation") + public Map downloadImageToByteArrayWithAnnotation() throws IOException { + Map result = new HashMap<>(); + byte[] buffer = downloadClient.downloadImageToByteArrayWithAnnotation(); + File file = new File("D:\\TestDownload\\test-byte-array.jpg"); + FileUtils.writeByteArrayToFile(file, buffer); + result.put("status", "ok"); + return result; + } + + + @GetMapping("/download-image-to-stream") + public Map downloadImageToStream() throws IOException { + Map result = new HashMap<>(); + InputStream in = downloadClient.downloadImageToInputStream(); + File file = new File("D:\\TestDownload\\test-input-stream.jpg"); + FileUtils.copyInputStreamToFile(in, file); + result.put("status", "ok"); + return result; + } + + +} diff --git a/xinda-plugs/xinda-http/src/main/java/com/xinda/http/controller/TestUploadController.java b/xinda-plugs/xinda-http/src/main/java/com/xinda/http/controller/TestUploadController.java new file mode 100644 index 0000000..32b632d --- /dev/null +++ b/xinda-plugs/xinda-http/src/main/java/com/xinda/http/controller/TestUploadController.java @@ -0,0 +1,210 @@ +package com.xinda.http.controller; + +import com.xinda.http.client.UploadClient; +import com.xinda.http.service.FileService; +import com.xinda.http.utils.PathUtil; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.core.io.ClassPathResource; +import org.springframework.core.io.Resource; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.multipart.MultipartFile; + +import javax.servlet.http.HttpServletRequest; +import java.io.*; +import java.util.LinkedHashMap; +import java.util.LinkedList; +import java.util.List; +import java.util.Map; + +@RestController +public class TestUploadController { + + private final static Logger logger = LoggerFactory.getLogger(TestUploadController.class); + + @javax.annotation.Resource + private FileService fileService; + + @Value("${xinda.profile}") + private String uploadPath; + + @javax.annotation.Resource + private UploadClient uploadClient; + + + @GetMapping("/hello") + public String hello() { + return "hello"; + } + + //处理文件上传的方法 + @PostMapping("/upload") + public Map upload(MultipartFile file, HttpServletRequest request) throws IOException { + String webPath = "upload"; + System.out.println("webPath=" + webPath); + String webFilePath = PathUtil.appendWebPath(webPath, file.getOriginalFilename()); + System.out.println("webFilePath=" + webFilePath); + String filePath = PathUtil.appendWebPath(uploadPath, webFilePath); + System.out.println("filePath=" + filePath); + Map result = fileService.uploadReal(filePath, file); + result.put("webUrl", webFilePath); + return result; + } + + //处理文件上传的方法 + @PostMapping("/upload2") + public Map upload2(MultipartFile file, @RequestParam("username") String username, HttpServletRequest request) throws IOException { + String webPath = "upload"; + System.out.println("username=" + username); + System.out.println("webPath=" + webPath); + String webFilePath = PathUtil.appendWebPath(webPath, file.getOriginalFilename()); + System.out.println("webFilePath=" + webFilePath); + String filePath = PathUtil.appendWebPath(uploadPath, webFilePath); + System.out.println("filePath=" + filePath); + Map result = fileService.uploadReal(filePath, file); + result.put("webUrl", webFilePath); + return result; + } + + //处理文件上传的方法 + @PostMapping("/upload-array") + public Map uploadList(MultipartFile[] files, HttpServletRequest request) throws IOException { + String webPath = "upload"; + System.out.println("webPath=" + webPath); + Map resultMap = new LinkedHashMap<>(); + for (MultipartFile file : files) { + String webFilePath = PathUtil.appendWebPath(webPath, file.getOriginalFilename()); + System.out.println("webFilePath=" + webFilePath); + String filePath = PathUtil.appendWebPath(uploadPath, webFilePath); + System.out.println("filePath=" + filePath); + Map result = fileService.uploadReal(filePath, file); + result.put("webUrl", webFilePath); + resultMap.put(file.getName(), result); + } + return resultMap; + } + + + @PostMapping("/do-upload-file-path") + public Map doUploadFilePath() throws IOException { + Resource resource = new ClassPathResource("test-img.jpg"); + String filePath = resource.getFile().getPath(); + Map result = uploadClient.upload(filePath, progress -> { + logger.info("-------------------------------------------------------"); + logger.info("total bytes: " + progress.getTotalBytes()); + logger.info("current bytes: " + progress.getCurrentBytes()); + logger.info("percentage: " + (progress.getRate() * 100) + "%"); + }); + return result; + } + + + + @PostMapping("/do-upload-file") + public Map doUploadFile() throws IOException { + Resource resource = new ClassPathResource("test-img.jpg"); + File file = resource.getFile(); + Map result = uploadClient.upload(file, progress -> { + logger.info("-------------------------------------------------------"); + logger.info("total bytes: " + progress.getTotalBytes()); + logger.info("current bytes: " + progress.getCurrentBytes()); + logger.info("percentage: " + (progress.getRate() * 100) + "%"); + }); + return result; + } + + @PostMapping("/do-upload-bytes") + public Map doUploadBytes() throws IOException { + Resource resource = new ClassPathResource("test-img.jpg"); + File file = resource.getFile(); + byte[] buffer = null; + try { + FileInputStream fis = new FileInputStream(file); + ByteArrayOutputStream bos = new ByteArrayOutputStream(); + byte[] b = new byte[1024]; + int n; + while ((n = fis.read(b)) != -1) { + bos.write(b, 0, n); + } + fis.close(); + bos.close(); + buffer = bos.toByteArray(); + } catch (FileNotFoundException e) { + e.printStackTrace(); + } catch (IOException e) { + e.printStackTrace(); + } + + Map result = uploadClient.upload(buffer, "test-bytes.jpg"); + return result; + } + + + @PostMapping("/do-upload-input-stream") + public Map doUploadInputStream() throws IOException { + Resource resource = new ClassPathResource("test-img.jpg"); + File file = resource.getFile(); + FileInputStream fis = null; + try { + fis = new FileInputStream(file); + } catch (FileNotFoundException e) { + e.printStackTrace(); + } + Map result = uploadClient.upload(fis, "test-input-stream.jpg"); + return result; + } + + @PostMapping("/do-upload-resource") + public Map doUploadResource() { + Resource resource = new ClassPathResource("test-img.jpg"); + Map result = uploadClient.upload(resource); + return result; + } + + @PostMapping("/do-upload-multipart-file") + public Map doUploadMultipartFile(MultipartFile multipartFile) { + Map result = uploadClient.upload(multipartFile, multipartFile.getOriginalFilename(), progress -> { + logger.info("-------------------------------------------------------"); + logger.info("total bytes: " + progress.getTotalBytes()); + logger.info("current bytes: " + progress.getCurrentBytes()); + logger.info("percentage: " + (progress.getRate() * 100) + "%"); + logger.info("is done: " + progress.isDone()); + }); + return result; + } + + @PostMapping("/do-upload-multipart-file-list") + public Map doUploadMultipartFileList(MultipartFile multipartFile1, MultipartFile multipartFile2) { +// Map result = uploadClient.uploadList( +// Lists.newArrayList(multipartFile1, multipartFile2), progress -> { +// logger.info("-------------------------------------------------------"); +// logger.info("total bytes: " + progress.getTotalBytes()); +// logger.info("current bytes: " + progress.getCurrentBytes()); +// logger.info("percentage: " + (progress.getRate() * 100) + "%"); +// logger.info("is done: " + progress.isDone()); +// }); + return null; + } + + + @PostMapping("/do-upload-path-list") + public Map doUploadPathList() throws IOException { + Resource[] resources = new Resource[]{ + new ClassPathResource("static/images/test-img.jpg"), + new ClassPathResource("static/images/test-img2.jpg"), + new ClassPathResource("static/images/test-img3.jpg") + }; + List pathList = new LinkedList<>(); + for (int i = 0; i < resources.length; i++) { + pathList.add(resources[i].getFile().getPath()); + } + Map result = uploadClient.uploadPathList(pathList); + return result; + } + + +} diff --git a/xinda-plugs/xinda-http/src/main/java/com/xinda/http/interceptors/ApiClientInterceptor.java b/xinda-plugs/xinda-http/src/main/java/com/xinda/http/interceptors/ApiClientInterceptor.java new file mode 100644 index 0000000..7c4af7d --- /dev/null +++ b/xinda-plugs/xinda-http/src/main/java/com/xinda/http/interceptors/ApiClientInterceptor.java @@ -0,0 +1,44 @@ +package com.xinda.http.interceptors; + + +import com.dtflys.forest.Forest; +import com.dtflys.forest.http.ForestHeaderMap; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +import com.dtflys.forest.exceptions.ForestRuntimeException; +import com.dtflys.forest.http.ForestRequest; +import com.dtflys.forest.http.ForestResponse; +import com.dtflys.forest.interceptor.Interceptor; + + +public class ApiClientInterceptor implements Interceptor { + + private final Log log = LogFactory.getLog(ApiClientInterceptor.class); + + @Override + public boolean beforeExecute(ForestRequest request) { + String accessToken = "111111111"; + request.addHeader("accessToken", accessToken); + log.info("Forest Version: " + Forest.VERSION); + log.info("accessToken = " + accessToken); + return true; + } + + @Override + public void onSuccess(Object data, ForestRequest request, ForestResponse response) { + log.info("invoke Simple onSuccess"); + } + + @Override + public void onError(ForestRuntimeException ex, ForestRequest request, ForestResponse response) { + log.info("invoke Simple onError"); + } + + @Override + public void afterExecute(ForestRequest request, ForestResponse response) { + ForestHeaderMap headers = request.getHeaders(); + System.out.println(headers.getValues()); + log.info("invoke Simple afterExecute"); + } +} diff --git a/xinda-plugs/xinda-http/src/main/java/com/xinda/http/model/Coordinate.java b/xinda-plugs/xinda-http/src/main/java/com/xinda/http/model/Coordinate.java new file mode 100644 index 0000000..288e3ae --- /dev/null +++ b/xinda-plugs/xinda-http/src/main/java/com/xinda/http/model/Coordinate.java @@ -0,0 +1,34 @@ +package com.xinda.http.model; + +/** + * @author gongjun + * @since 2016-06-01 + */ +public class Coordinate { + + private String longitude; + + private String latitude; + + public Coordinate(String longitude, String latitude) { + this.longitude = longitude; + this.latitude = latitude; + } + + + public String getLongitude() { + return longitude; + } + + public void setLongitude(String longitude) { + this.longitude = longitude; + } + + public String getLatitude() { + return latitude; + } + + public void setLatitude(String latitude) { + this.latitude = latitude; + } +} diff --git a/xinda-plugs/xinda-http/src/main/java/com/xinda/http/model/GiteeBranch.java b/xinda-plugs/xinda-http/src/main/java/com/xinda/http/model/GiteeBranch.java new file mode 100644 index 0000000..b66adc8 --- /dev/null +++ b/xinda-plugs/xinda-http/src/main/java/com/xinda/http/model/GiteeBranch.java @@ -0,0 +1,43 @@ +package com.xinda.http.model; + +public class GiteeBranch { + private String name; + private Commit commit; + + public static class Commit { + private String sha; + private String url; + + public String getSha() { + return sha; + } + + public void setSha(String sha) { + this.sha = sha; + } + + public String getUrl() { + return url; + } + + public void setUrl(String url) { + this.url = url; + } + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public Commit getCommit() { + return commit; + } + + public void setCommit(Commit commit) { + this.commit = commit; + } +} diff --git a/xinda-plugs/xinda-http/src/main/java/com/xinda/http/model/GiteeReadme.java b/xinda-plugs/xinda-http/src/main/java/com/xinda/http/model/GiteeReadme.java new file mode 100644 index 0000000..db847a3 --- /dev/null +++ b/xinda-plugs/xinda-http/src/main/java/com/xinda/http/model/GiteeReadme.java @@ -0,0 +1,94 @@ +package com.xinda.http.model; + +public class GiteeReadme { + private String type; + private String encoding; + private Long size; + private String name; + private String path; + private String content; + private String sha; + private String url; + private String htmlUrl; + private String downloadUrl; + + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type; + } + + public String getEncoding() { + return encoding; + } + + public void setEncoding(String encoding) { + this.encoding = encoding; + } + + public Long getSize() { + return size; + } + + public void setSize(Long size) { + this.size = size; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getPath() { + return path; + } + + public void setPath(String path) { + this.path = path; + } + + public String getContent() { + return content; + } + + public void setContent(String content) { + this.content = content; + } + + public String getSha() { + return sha; + } + + public void setSha(String sha) { + this.sha = sha; + } + + public String getUrl() { + return url; + } + + public void setUrl(String url) { + this.url = url; + } + + public String getHtmlUrl() { + return htmlUrl; + } + + public void setHtmlUrl(String htmlUrl) { + this.htmlUrl = htmlUrl; + } + + public String getDownloadUrl() { + return downloadUrl; + } + + public void setDownloadUrl(String downloadUrl) { + this.downloadUrl = downloadUrl; + } +} diff --git a/xinda-plugs/xinda-http/src/main/java/com/xinda/http/model/HttpClientConfig.java b/xinda-plugs/xinda-http/src/main/java/com/xinda/http/model/HttpClientConfig.java new file mode 100644 index 0000000..991767d --- /dev/null +++ b/xinda-plugs/xinda-http/src/main/java/com/xinda/http/model/HttpClientConfig.java @@ -0,0 +1,18 @@ +package com.xinda.http.model; + +import com.dtflys.forest.http.ForestRequestType; +import lombok.Builder; +import lombok.Data; + +import java.util.Map; + +@Data +@Builder +public class HttpClientConfig { + private String backend; + private String url; + private ForestRequestType method; + private Map headers; + private Map querys; + private String body; +} diff --git a/xinda-plugs/xinda-http/src/main/java/com/xinda/http/model/Location.java b/xinda-plugs/xinda-http/src/main/java/com/xinda/http/model/Location.java new file mode 100644 index 0000000..2f5ac00 --- /dev/null +++ b/xinda-plugs/xinda-http/src/main/java/com/xinda/http/model/Location.java @@ -0,0 +1,209 @@ +package com.xinda.http.model; + +import java.util.List; + +/** + * Created by Administrator on 2016/6/20. + */ +public class Location { + + private String timestamp; + + private Boolean result; + + private String message; + + private String version; + + private String desc; + + private String pos; + + private String districtadcode; + + private String district; + + private String adcode; + + private String areacode; + + private String city; + + private String cityadcode; + + private String tel; + + private Integer code; + + private String province; + + private String provinceadcode; + + private String country; + + private List cross_list; + + private List road_list; + + private List poi_list; + + public String getTimestamp() { + return timestamp; + } + + public void setTimestamp(String timestamp) { + this.timestamp = timestamp; + } + + public Boolean getResult() { + return result; + } + + public void setResult(Boolean result) { + this.result = result; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public String getVersion() { + return version; + } + + public void setVersion(String version) { + this.version = version; + } + + public String getDesc() { + return desc; + } + + public void setDesc(String desc) { + this.desc = desc; + } + + public String getPos() { + return pos; + } + + public void setPos(String pos) { + this.pos = pos; + } + + public String getDistrictadcode() { + return districtadcode; + } + + public void setDistrictadcode(String districtadcode) { + this.districtadcode = districtadcode; + } + + public String getDistrict() { + return district; + } + + public void setDistrict(String district) { + this.district = district; + } + + public String getTel() { + return tel; + } + + public String getAdcode() { + return adcode; + } + + public void setAdcode(String adcode) { + this.adcode = adcode; + } + + public String getAreacode() { + return areacode; + } + + public void setAreacode(String areacode) { + this.areacode = areacode; + } + + public String getCity() { + return city; + } + + public void setCity(String city) { + this.city = city; + } + + public void setTel(String tel) { + this.tel = tel; + } + + public String getCityadcode() { + return cityadcode; + } + + public void setCityadcode(String cityadcode) { + this.cityadcode = cityadcode; + } + + public Integer getCode() { + return code; + } + + public void setCode(Integer code) { + this.code = code; + } + + public String getProvince() { + return province; + } + + public void setProvince(String province) { + this.province = province; + } + + public String getProvinceadcode() { + return provinceadcode; + } + + public void setProvinceadcode(String provinceadcode) { + this.provinceadcode = provinceadcode; + } + + public String getCountry() { + return country; + } + + public void setCountry(String country) { + this.country = country; + } + + public List getCross_list() { + return cross_list; + } + + public void setCross_list(List cross_list) { + this.cross_list = cross_list; + } + + public List getRoad_list() { + return road_list; + } + + public void setRoad_list(List road_list) { + this.road_list = road_list; + } + + public List getPoi_list() { + return poi_list; + } + + public void setPoi_list(List poi_list) { + this.poi_list = poi_list; + } +} diff --git a/xinda-plugs/xinda-http/src/main/java/com/xinda/http/model/MapMarker.java b/xinda-plugs/xinda-http/src/main/java/com/xinda/http/model/MapMarker.java new file mode 100644 index 0000000..992e607 --- /dev/null +++ b/xinda-plugs/xinda-http/src/main/java/com/xinda/http/model/MapMarker.java @@ -0,0 +1,18 @@ +package com.xinda.http.model; + +import lombok.Data; + +import java.util.List; + +@Data +public class MapMarker { + + private List markers; + + @Data + public static class marker { + private String name; + private Integer value; + private List position; + } +} diff --git a/xinda-plugs/xinda-http/src/main/java/com/xinda/http/model/Result.java b/xinda-plugs/xinda-http/src/main/java/com/xinda/http/model/Result.java new file mode 100644 index 0000000..c096465 --- /dev/null +++ b/xinda-plugs/xinda-http/src/main/java/com/xinda/http/model/Result.java @@ -0,0 +1,28 @@ +package com.xinda.http.model; + +/** + * @author gongjun + * @since 2016-06-20 + */ +public class Result { + + private Integer status; + + private T data; + + public Integer getStatus() { + return status; + } + + public void setStatus(Integer status) { + this.status = status; + } + + public T getData() { + return data; + } + + public void setData(T data) { + this.data = data; + } +} diff --git a/xinda-plugs/xinda-http/src/main/java/com/xinda/http/ruleEngine/HttpclientNode.java b/xinda-plugs/xinda-http/src/main/java/com/xinda/http/ruleEngine/HttpclientNode.java new file mode 100644 index 0000000..ff1a64c --- /dev/null +++ b/xinda-plugs/xinda-http/src/main/java/com/xinda/http/ruleEngine/HttpclientNode.java @@ -0,0 +1,43 @@ +package com.xinda.http.ruleEngine; + +import com.dtflys.forest.http.ForestResponse; +import com.xinda.http.client.Amap; +import com.xinda.http.client.Cn12306; +import com.xinda.http.client.Gitee; +import com.xinda.http.model.Location; +import com.xinda.http.model.Result; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; +import java.math.BigDecimal; + +@Slf4j +@Component +public class HttpclientNode { + @Resource + private Amap amap; + + @Resource + private Gitee gitee; + + @Resource + private Cn12306 cn12306; + + + public Result amapLocation(BigDecimal longitude, BigDecimal latitude) { + Result result = amap.getLocation(longitude.toEngineeringString(), latitude.toEngineeringString()); + return result; + } + + public String gitee() { + String result = gitee.index(); + return result; + } + + public String cn12306() { + ForestResponse response = cn12306.index(); + return response.getResult(); + } + +} diff --git a/xinda-plugs/xinda-http/src/main/java/com/xinda/http/service/FileService.java b/xinda-plugs/xinda-http/src/main/java/com/xinda/http/service/FileService.java new file mode 100644 index 0000000..569ec3f --- /dev/null +++ b/xinda-plugs/xinda-http/src/main/java/com/xinda/http/service/FileService.java @@ -0,0 +1,51 @@ +package com.xinda.http.service; + +import com.dtflys.forest.annotation.BindingVar; +import org.springframework.stereotype.Component; +import org.springframework.web.multipart.MultipartFile; + +import java.io.File; +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; + +@Component +public class FileService { + + + public Map uploadReal(String fileName, MultipartFile file) { + //处理后缀 + HashMap result = new HashMap<>(); + //获取物理路径 + File destFile = new File(fileName); + System.out.println("uploadReal,destFile=" + destFile.getAbsolutePath()); + System.out.println("uploadReal,destFile.getParentFile=" + destFile.getParentFile().getAbsolutePath()); + //目录不存在 + if (!destFile.getParentFile().exists()) { + destFile.getParentFile().mkdirs(); + } + //目录存在是文件 + if (destFile.getParentFile().isFile()) { + result.put("flag", "fail"); + result.put("message", "父级路径是文件而不是目录"); + return result; + } + try { + file.transferTo(destFile); + result.put("flag", "success"); + result.put("message", "文件上传成功"); + } catch (IOException e) { + e.printStackTrace(); + result.put("flag", "fail"); + result.put("message", "文件写入本地发生异常"); + } + return result; + } + + + @BindingVar("testVar") + public String testVar() { + return "xx"; + } + +} diff --git a/xinda-plugs/xinda-http/src/main/java/com/xinda/http/service/HttpClientFactory.java b/xinda-plugs/xinda-http/src/main/java/com/xinda/http/service/HttpClientFactory.java new file mode 100644 index 0000000..d5640cc --- /dev/null +++ b/xinda-plugs/xinda-http/src/main/java/com/xinda/http/service/HttpClientFactory.java @@ -0,0 +1,19 @@ +package com.xinda.http.service; + +import com.dtflys.forest.Forest; +import com.dtflys.forest.http.ForestRequest; +import com.xinda.http.model.HttpClientConfig; +import lombok.extern.slf4j.Slf4j; + +@Slf4j +public class HttpClientFactory { + public static ForestRequest instance(HttpClientConfig config) { + ForestRequest request = Forest.request(); + return request.url(config.getUrl()) + .type(config.getMethod()) + .backend(config.getBackend()) + .addQuery(config.getQuerys()) + .addHeader(config.getHeaders()) + .addBody(config.getBody()); + } +} diff --git a/xinda-plugs/xinda-http/src/main/java/com/xinda/http/service/SuccessCondition.java b/xinda-plugs/xinda-http/src/main/java/com/xinda/http/service/SuccessCondition.java new file mode 100644 index 0000000..4a57ad7 --- /dev/null +++ b/xinda-plugs/xinda-http/src/main/java/com/xinda/http/service/SuccessCondition.java @@ -0,0 +1,14 @@ +package com.xinda.http.service; + +import com.dtflys.forest.callback.SuccessWhen; +import com.dtflys.forest.http.ForestRequest; +import com.dtflys.forest.http.ForestResponse; + +public class SuccessCondition implements SuccessWhen { + @Override + public boolean successWhen(ForestRequest forestRequest, ForestResponse forestResponse) { + return forestResponse.noException() && // 请求过程没有异常 + forestResponse.statusOk() && // 状态码在 100 ~ 399 范围内 + forestResponse.statusIsNot(203); // 但不能是 203 + } +} diff --git a/xinda-plugs/xinda-http/src/main/java/com/xinda/http/utils/MD5Utils.java b/xinda-plugs/xinda-http/src/main/java/com/xinda/http/utils/MD5Utils.java new file mode 100644 index 0000000..c1c95dc --- /dev/null +++ b/xinda-plugs/xinda-http/src/main/java/com/xinda/http/utils/MD5Utils.java @@ -0,0 +1,117 @@ +package com.xinda.http.utils; + +import java.security.MessageDigest; +import java.security.NoSuchAlgorithmException; +import java.util.Random; + +/** + * Created by pc on 2017/9/26. + */ + +public class MD5Utils { + private static final char hexDigits[] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', + 'A', 'B', 'C', 'D', 'E', 'F'}; + + + /** + * 字符串 MD5 加密 + * + * @param text :文本内容 + * @return 加密后的内容 + */ + public static String encrypt(String text) { + String result = null; + MessageDigest md = null; + try { + md = MessageDigest.getInstance("MD5"); + result = byte2hex(md.digest(text.getBytes())); + } catch (NoSuchAlgorithmException e) { + e.printStackTrace(); + } + return result; + } + + /** + * 加密辅助 + * + * @param b : 内容二进制数组 + * @return 加密大写十六进制 + */ + private static String byte2hex(byte[] b) { + String hs = "", stmp = ""; + for (int n = 0; n < b.length; n++) { + stmp = (Integer.toHexString(b[n] & 0XFF)); + if (stmp.length() == 1) hs = hs + "0" + stmp; + else hs = hs + stmp; + } + return hs.toUpperCase(); + } + + + /** + * 生成全以大写字母 + * + * @param inStr + * @return 32byte MD5 Value + */ + public static String getMD5(String inStr) { + byte[] inStrBytes = inStr.getBytes(); + try { + MessageDigest MD = MessageDigest.getInstance("MD5"); + MD.update(inStrBytes); + byte[] mdByte = MD.digest(); + char[] str = new char[mdByte.length * 2]; + int k = 0; + for (int i = 0; i < mdByte.length; i++) { + byte temp = mdByte[i]; + str[k++] = hexDigits[temp >>> 4 & 0xf]; + str[k++] = hexDigits[temp & 0xf]; + } + return new String(str); + } catch (NoSuchAlgorithmException e) { + e.printStackTrace(); + } + return null; + } + + + //生成全以小写字母 + public static String getmd5(String str) { + try { + MessageDigest md = MessageDigest.getInstance("MD5"); + md.update(str.getBytes()); + byte[] b = md.digest(); + StringBuffer sb = new StringBuffer(); + for (int i = 0; i < b.length; i++) { + int v = (int) b[i]; + v = v < 0 ? 0x100 + v : v; + String cc = Integer.toHexString(v); + if (cc.length() == 1) + sb.append('0'); + sb.append(cc); + } + return sb.toString(); + } catch (Exception e) { + } + return ""; + } + + ////生成随机数字和字母, length为位数 + public String getRandomMD5(int length) { + String val = ""; + Random random = new Random(); + // 参数length,表示生成几位随机数 + for (int i = 0; i < length; i++) { + String charOrNum = random.nextInt(2) % 2 == 0 ? "char" : "num"; + // 输出字母还是数字 + if ("char".equalsIgnoreCase(charOrNum)) { + // 输出是大写字母还是小写字母 + int temp = random.nextInt(2) % 2 == 0 ? 65 : 97; + val += (char) (random.nextInt(26) + temp); + } else if ("num".equalsIgnoreCase(charOrNum)) { + val += String.valueOf(random.nextInt(10)); + } + } + return val; + } +} diff --git a/xinda-plugs/xinda-http/src/main/java/com/xinda/http/utils/PathUtil.java b/xinda-plugs/xinda-http/src/main/java/com/xinda/http/utils/PathUtil.java new file mode 100644 index 0000000..787cbb8 --- /dev/null +++ b/xinda-plugs/xinda-http/src/main/java/com/xinda/http/utils/PathUtil.java @@ -0,0 +1,37 @@ +package com.xinda.http.utils; + +import java.io.File; + +public class PathUtil { + + public static String appendPathSep(String src, String separator, String... addPaths){ + StringBuilder result = new StringBuilder(src); + for (int i = 0; i < addPaths.length; i++) { + String temp = addPaths[i].startsWith(separator)? addPaths[i] : separator + addPaths[i]; + if (result.toString().endsWith(separator)) { + //含头不含尾 + result.delete(result.length() - separator.length(), result.length()); + } + result.append(temp); + } + return result.toString(); + } + + public static String appendWebPath(String src, String... addPaths) { + return appendPathSep(src, "/", addPaths); + } + + public static String appendPath(String src, String... addPaths) { + return appendPathSep(src, File.separator, addPaths); + } + + public static boolean startWith(String src, String[] sep) { + for (String s : sep) { + if(src.startsWith(s)){ + return true; + } + } + return false; + } + +} diff --git a/xinda-plugs/xinda-mqtt-client/pom.xml b/xinda-plugs/xinda-mqtt-client/pom.xml new file mode 100644 index 0000000..9eb0b50 --- /dev/null +++ b/xinda-plugs/xinda-mqtt-client/pom.xml @@ -0,0 +1,11 @@ + + + 4.0.0 + + xinda-plugs + com.xinda + 3.8.5 + + xinda-mqtt-client + diff --git a/xinda-plugs/xinda-mqtt-client/src/main/java/com/xinda/mqttclient/IEmqxMessageProducer.java b/xinda-plugs/xinda-mqtt-client/src/main/java/com/xinda/mqttclient/IEmqxMessageProducer.java new file mode 100644 index 0000000..cfcc408 --- /dev/null +++ b/xinda-plugs/xinda-mqtt-client/src/main/java/com/xinda/mqttclient/IEmqxMessageProducer.java @@ -0,0 +1,12 @@ +package com.xinda.mqttclient; + +import com.xinda.common.core.mq.DeviceReportBo; + +/** + * @author bill + */ +public interface IEmqxMessageProducer { + + public void sendEmqxMessage(String topicName, DeviceReportBo deviceReportBo); + +} diff --git a/xinda-plugs/xinda-mqtt-client/src/main/java/com/xinda/mqttclient/MqttClientConfig.java b/xinda-plugs/xinda-mqtt-client/src/main/java/com/xinda/mqttclient/MqttClientConfig.java new file mode 100644 index 0000000..cedfe30 --- /dev/null +++ b/xinda-plugs/xinda-mqtt-client/src/main/java/com/xinda/mqttclient/MqttClientConfig.java @@ -0,0 +1,58 @@ +package com.xinda.mqttclient; + +import lombok.Data; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.stereotype.Component; + +/** mqtt配置信息*/ + +@Data +@Component +@ConfigurationProperties(prefix = "spring.mqtt") +public class MqttClientConfig { + + /** + * 用户名 + */ + private String username; + /** + * 密码 + */ + private String password; + /** + * 连接地址 + */ + private String hostUrl; + /** + * 客户Id + */ + private String clientId; + /** + * 默认连接话题 + */ + private String defaultTopic; + /** + * 超时时间 + */ + private int timeout; + /** + * 保持连接数 + */ + private int keepalive; + + /**是否清除session*/ + private boolean clearSession; + /**是否共享订阅*/ + private boolean isShared; + /**分组共享订阅*/ + private boolean isSharedGroup; + + /** + * true: 使用netty搭建的mqttBroker false: 使用emq + */ + @Value("${server.broker.enabled}") + private Boolean enabled; + +} + diff --git a/xinda-plugs/xinda-mqtt-client/src/main/java/com/xinda/mqttclient/PubMqttCallBack.java b/xinda-plugs/xinda-mqtt-client/src/main/java/com/xinda/mqttclient/PubMqttCallBack.java new file mode 100644 index 0000000..64059dd --- /dev/null +++ b/xinda-plugs/xinda-mqtt-client/src/main/java/com/xinda/mqttclient/PubMqttCallBack.java @@ -0,0 +1,120 @@ +package com.xinda.mqttclient; + +import com.xinda.common.utils.gateway.mq.TopicsPost; +import com.xinda.common.utils.gateway.mq.TopicsUtils; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.eclipse.paho.client.mqttv3.*; +import org.springframework.stereotype.Component; +import javax.annotation.Resource; +import java.util.Arrays; + +/** + * mqtt客户端回调 + */ +@Slf4j +@Component +@Data +@NoArgsConstructor +public class PubMqttCallBack implements MqttCallbackExtended { + /** + * mqtt客户端 + */ + private MqttAsyncClient client; + /** + * 创建客户端参数 + */ + private MqttConnectOptions options; + + @Resource + private TopicsUtils topicsUtils; + + private Boolean enabled; + + private IMqttMessageListener listener; + + + public PubMqttCallBack(MqttAsyncClient client, MqttConnectOptions options, Boolean enabled, IMqttMessageListener listener) { + this.client = client; + this.options = options; + this.enabled = enabled; + this.listener = listener; + } + + /** + * mqtt客户端连接 + * + * @param cause 错误 + */ + @Override + public void connectionLost(Throwable cause) { + // 连接丢失后,一般在这里面进行重连 + log.debug("=>mqtt 连接丢失", cause); + int count = 1; + // int sleepTime = 0; + boolean willConnect = true; + while (willConnect) { + try { + Thread.sleep(1000); + log.debug("=>连接[{}]断开,尝试重连第{}次", this.client.getServerURI(), count++); + this.client.connect(this.options); + log.debug("=>重连成功"); + willConnect = false; + } catch (Exception e) { + log.error("=>重连异常", e); + } + } + } + + /** + * 客户端订阅主题回调消息 + * + * @param topic 主题 + * @param message 消息 + */ + @Override + public void messageArrived(String topic, MqttMessage message) throws Exception { + // subscribe后得到的消息会执行到这里面 + try { + listener.messageArrived(topic, message); + } catch (Exception e) { + log.warn("mqtt 订阅消息异常", e); + } + } + + @Override + public void deliveryComplete(IMqttDeliveryToken token) { + + } + + + /** + * 监听mqtt连接消息 + */ + @Override + public void connectComplete(boolean reconnect, String serverURI) { + log.info("MQTT内部客户端已经连接!"); + System.out.print("" + + " * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * \n" + + " * _⚲_⚲_ ______ _ ____ * \n" + + " * | / \\ | | ____| | | | _ \\ * \n" + + " * | | | ● | | | | |__ __ _ ___| |_ | |_) | ___ ___ * \n" + + " * | \\ / | | __/ _` / __| __| | _ < / _ \\/ _ \\ * \n" + + " * \\ / | | | (_| \\__ \\ |_ | |_) | __/ __/ * \n" + + " * V |_| \\__,_|___/\\__| |____/ \\___|\\___| * \n" + + " * * \n" + + " * * * * * * * * * * * * XinDa物联网平台[✔启动成功] * * * * * * * * * * * * \n"); + + //连接后订阅, enable为false表示使用emq + if (!enabled) { + try { + TopicsPost allPost = topicsUtils.getAllPost(); + client.subscribe(allPost.getTopics(), allPost.getQos()); + log.info("mqtt监控主题,{}", Arrays.asList(allPost.getTopics())); + } catch (MqttException e) { + log.error("=>订阅主题失败 error={}", e.getMessage()); + } + } + } +} diff --git a/xinda-plugs/xinda-mqtt-client/src/main/java/com/xinda/mqttclient/PubMqttClient.java b/xinda-plugs/xinda-mqtt-client/src/main/java/com/xinda/mqttclient/PubMqttClient.java new file mode 100644 index 0000000..4c11d8b --- /dev/null +++ b/xinda-plugs/xinda-mqtt-client/src/main/java/com/xinda/mqttclient/PubMqttClient.java @@ -0,0 +1,202 @@ +package com.xinda.mqttclient; + +import com.xinda.common.constant.XinDaConstant; +import com.xinda.common.core.redis.RedisCache; +import com.xinda.common.exception.ServiceException; +import lombok.Setter; +import lombok.extern.slf4j.Slf4j; +import org.eclipse.paho.client.mqttv3.*; +import org.eclipse.paho.client.mqttv3.persist.MemoryPersistence; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; + +/** + * 发布服务mqtt客户端 + */ +@Component +@Slf4j +public class PubMqttClient { + + @Resource + private MqttClientConfig mqttConfig; + + @Resource(name = "pubMqttCallBack") + private PubMqttCallBack mqttCallBack; + /** + * 连接配置 + */ + private MqttConnectOptions options; + /** + * MQTT异步客户端 + */ + private MqttAsyncClient client; + /** + * 是否连接标记 + */ + private boolean isConnected = false; + @Resource + private RedisCache redisCache; + + @Setter + private IMqttMessageListener listener; + + /** + * 启动MQTT客户端 + */ + public synchronized void initialize() { + + try { + setOptions(); + createClient(); + while (!client.isConnected()) { + IMqttToken token = client.connect(options); + if(token != null && token.isComplete()) { + log.debug("=>内部MQTT客户端启动成功"); + this.isConnected = true; + break; + } + log.debug("=>内部mqtt客户端连接中..."); + Thread.sleep(20000); + } + } catch (MqttException ex) { + log.error("=>MQTT客户端初始化异常", ex); + } catch (Exception e) { + log.error("=>连接MQTT服务器异常", e); + this.isConnected = false; + } + + } + + public boolean isConnected() { + return this.isConnected; + } + + private void createClient() { + try { + if (client == null) { + /*host为主机名,clientId是连接MQTT的客户端ID*/ + client = new MqttAsyncClient(mqttConfig.getHostUrl(), getClientId(), new MemoryPersistence()); + //设置回调函数 + client.setCallback(mqttCallBack); + mqttCallBack.setClient(client); + mqttCallBack.setOptions(this.options); + mqttCallBack.setEnabled(mqttConfig.getEnabled()); + mqttCallBack.setListener(this.listener); + } + } catch (Exception e) { + log.error("=>mqtt客户端创建错误"); + } + } + + /** + * 设置连接属性 + */ + private void setOptions() { + + if (options != null) { + options = null; + } + options = new MqttConnectOptions(); + options.setConnectionTimeout(mqttConfig.getTimeout()); + options.setKeepAliveInterval(mqttConfig.getKeepalive()); + options.setUserName(mqttConfig.getUsername()); + options.setPassword(mqttConfig.getPassword().toCharArray()); + //设置自动重新连接 + options.setAutomaticReconnect(true); + /*设置为false,断开连接,不清除session,重连后还是原来的session + 保留订阅的主题,能接收离线期间的消息*/ + options.setCleanSession(true); + } + + /** + * 断开与mqtt的连接 + */ + public synchronized void disconnect() { + //判断客户端是否null 是否连接 + if (client != null && client.isConnected()) { + try { + IMqttToken token = client.disconnect(); + token.waitForCompletion(); + } catch (MqttException e) { + log.error("=>断开mqtt连接发生错误 message={}", e.getMessage()); + throw new ServiceException("断开mqtt连接发生错误" + e.getMessage()); + } + } + client = null; + } + + /** + * 重新连接MQTT + */ + public synchronized void refresh() { + disconnect(); + initialize(); + } + + /** + * 拼接客户端id + */ + public final String getClientId() { + return XinDaConstant.SERVER.WM_PREFIX + System.currentTimeMillis(); + } + + /** + * 发布主题 + * + * @param message payload消息体 + * @param topic 主题 + * @param retained 是否保留消息 + * @param qos 消息质量 + * Qos1:消息发送一次,不确保 + * Qos2:至少分发一次,服务器确保接收消息进行确认 + * Qos3:只分发一次,确保消息送达和只传递一次 + */ + public void publish(byte[] message, String topic, boolean retained, int qos) { + //设置mqtt消息 + MqttMessage mqttMessage = new MqttMessage(); + mqttMessage.setQos(qos); + mqttMessage.setRetained(retained); + mqttMessage.setPayload(message); + + IMqttDeliveryToken token; + try { + token = client.publish(topic, mqttMessage); + token.waitForCompletion(); + } catch (MqttPersistenceException e) { + log.error("=>发布主题时发生错误 topic={},message={}", topic, e.getMessage()); + throw new ServiceException(e.getMessage()); + } catch (MqttException ex) { + throw new ServiceException(ex.getMessage()); + } + } + + + /** + * 发布 + * + * @param qos 连接方式 + * @param retained 是否保留 + * @param topic 主题 + * @param pushMessage 消息体 + */ + public void publish(int qos, boolean retained, String topic, String pushMessage) { + redisCache.incr2(XinDaConstant.REDIS.MESSAGE_SEND_TOTAL, -1L); + redisCache.incr2(XinDaConstant.REDIS.MESSAGE_SEND_TODAY, 60 * 60 * 24); + MqttMessage message = new MqttMessage(); + message.setQos(qos); + message.setRetained(retained); + message.setPayload(pushMessage.getBytes()); + + try { + IMqttDeliveryToken token = client.publish(topic, message); + token.waitForCompletion(); + log.info("发布主题[{}],发布消息[{}]" , topic,pushMessage); + } catch (MqttPersistenceException e) { + e.printStackTrace(); + } catch (MqttException e) { + log.error("=>发布主题时发生错误 topic={},message={}", topic, e.getMessage()); + } + } + +} diff --git a/xinda-plugs/xinda-oauth/pom.xml b/xinda-plugs/xinda-oauth/pom.xml new file mode 100644 index 0000000..5f0cadf --- /dev/null +++ b/xinda-plugs/xinda-oauth/pom.xml @@ -0,0 +1,41 @@ + + + 4.0.0 + + xinda-plugs + com.xinda + 3.8.5 + + + xinda-oauth + + + 8 + 8 + UTF-8 + + + + + + org.springframework.security.oauth + spring-security-oauth2 + 2.5.1.RELEASE + + + org.springframework.boot + spring-boot-starter-thymeleaf + + + com.xinda + xinda-framework + + + com.xinda + xinda-common + + + + diff --git a/xinda-plugs/xinda-oauth/src/main/java/com/xinda/oauth/config/AuthorizationServerConfig.java b/xinda-plugs/xinda-oauth/src/main/java/com/xinda/oauth/config/AuthorizationServerConfig.java new file mode 100644 index 0000000..867c7ec --- /dev/null +++ b/xinda-plugs/xinda-oauth/src/main/java/com/xinda/oauth/config/AuthorizationServerConfig.java @@ -0,0 +1,138 @@ +package com.xinda.oauth.config; + + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.security.authentication.AuthenticationManager; +import org.springframework.security.core.userdetails.UserDetailsService; +import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; +import org.springframework.security.oauth2.config.annotation.configurers.ClientDetailsServiceConfigurer; +import org.springframework.security.oauth2.config.annotation.web.configuration.AuthorizationServerConfigurerAdapter; +import org.springframework.security.oauth2.config.annotation.web.configuration.EnableAuthorizationServer; +import org.springframework.security.oauth2.config.annotation.web.configurers.AuthorizationServerEndpointsConfigurer; +import org.springframework.security.oauth2.config.annotation.web.configurers.AuthorizationServerSecurityConfigurer; +import org.springframework.security.oauth2.provider.OAuth2RequestFactory; +import org.springframework.security.oauth2.provider.approval.ApprovalStore; +import org.springframework.security.oauth2.provider.approval.JdbcApprovalStore; +import org.springframework.security.oauth2.provider.approval.UserApprovalHandler; +import org.springframework.security.oauth2.provider.client.JdbcClientDetailsService; +import org.springframework.security.oauth2.provider.code.JdbcAuthorizationCodeServices; +import org.springframework.security.oauth2.provider.error.OAuth2AuthenticationEntryPoint; +import org.springframework.security.oauth2.provider.request.DefaultOAuth2RequestFactory; +import org.springframework.security.oauth2.provider.token.TokenStore; +import org.springframework.security.oauth2.provider.token.store.JdbcTokenStore; + +import javax.annotation.Resource; +import javax.sql.DataSource; + +/** + * 授权服务器配置,配置客户端id,密钥和令牌的过期时间 + */ +@Configuration +@EnableAuthorizationServer +public class AuthorizationServerConfig extends AuthorizationServerConfigurerAdapter { + @Resource + private DataSource dataSource; + + @Resource + private AuthenticationManager authenticationManager; + + @Resource + private UserDetailsService userDetailsService; + + /** + * 用来配置令牌端点(Token Endpoint)的安全约束 + * @param security + * @throws Exception + */ + @Override + public void configure(AuthorizationServerSecurityConfigurer security) throws Exception { + security.allowFormAuthenticationForClients() + .authenticationEntryPoint(new OAuth2AuthenticationEntryPoint()); +// security.allowFormAuthenticationForClients() +// .tokenKeyAccess("permitAll()") +// // 允许 /oauth/token_check端点的访问 +// .checkTokenAccess("permitAll()") +// .passwordEncoder(new PasswordEncoder() { +// @Override +// public String encode(CharSequence charSequence) { +// // 密码加密 +// return null; +// } +// +// @Override +// public boolean matches(CharSequence charSequence, String s) { +// // 密码校验 +// // return false; +// return true; +// } +// }) +// .allowFormAuthenticationForClients(); + } + + /** + * 用来配置客户端详情服务 + * @param clients + * @throws Exception + */ + @Override + public void configure(ClientDetailsServiceConfigurer clients) throws Exception { + + clients.withClientDetails(getClientDetailsService()); + } + + /** + * 用来配置授权(authorization)以及令牌(token)的访问端点和令牌服务(token services)。 + * @param endpoints + * @throws Exception + */ + @Override + public void configure(AuthorizationServerEndpointsConfigurer endpoints) throws Exception { + // 查询用户、授权、分组,可以被重写 + endpoints.userDetailsService(userDetailsService) + // 审批客户端的授权 + .userApprovalHandler(userApprovalHandler()) + // 授权审批 + .approvalStore(approvalStore()) + // 获取授权码 + .authorizationCodeServices(new JdbcAuthorizationCodeServices(dataSource)) + // 验证token + .authenticationManager(authenticationManager) + // 查询、保存、刷新token + .tokenStore(this.getJdbcTokenStore()); + } + + @Bean + public ApprovalStore approvalStore() { + return new JdbcApprovalStore(dataSource); + } + + @Bean + public UserApprovalHandler userApprovalHandler() { + return new SpeakerApprovalHandler(getClientDetailsService(), approvalStore(), oAuth2RequestFactory()); + } + + @Bean + public JdbcClientDetailsService getClientDetailsService() { + JdbcClientDetailsService jdbcClientDetailsService = new JdbcClientDetailsService(dataSource); + jdbcClientDetailsService.setPasswordEncoder(passwordEncoder()); + return jdbcClientDetailsService; + } + + @Bean + public OAuth2RequestFactory oAuth2RequestFactory() { + return new DefaultOAuth2RequestFactory(getClientDetailsService()); + } + @Bean + public TokenStore getJdbcTokenStore(){ + TokenStore tokenStore = new JdbcTokenStore(dataSource); + return tokenStore; + } + + + + public BCryptPasswordEncoder passwordEncoder(){ + return new BCryptPasswordEncoder(); + } + +} diff --git a/xinda-plugs/xinda-oauth/src/main/java/com/xinda/oauth/config/ResourceServerConfig.java b/xinda-plugs/xinda-oauth/src/main/java/com/xinda/oauth/config/ResourceServerConfig.java new file mode 100644 index 0000000..3ff512f --- /dev/null +++ b/xinda-plugs/xinda-oauth/src/main/java/com/xinda/oauth/config/ResourceServerConfig.java @@ -0,0 +1,48 @@ +package com.xinda.oauth.config; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Configuration; +import org.springframework.security.config.annotation.web.builders.HttpSecurity; +import org.springframework.security.oauth2.config.annotation.web.configuration.EnableResourceServer; +import org.springframework.security.oauth2.config.annotation.web.configuration.ResourceServerConfigurerAdapter; +import org.springframework.security.oauth2.config.annotation.web.configurers.ResourceServerSecurityConfigurer; +import org.springframework.security.oauth2.provider.authentication.OAuth2AuthenticationManager; +import org.springframework.security.oauth2.provider.token.TokenStore; +import org.springframework.security.oauth2.provider.token.store.JdbcTokenStore; + +import javax.sql.DataSource; + +@Configuration +@EnableResourceServer +public class ResourceServerConfig extends ResourceServerConfigurerAdapter { + + @Autowired + private DataSource dataSource; + + @Override + public void configure(ResourceServerSecurityConfigurer resources) throws Exception { + TokenStore tokenStore = jdbcTokenStore(); + OAuth2AuthenticationManager auth2AuthenticationManager= new OAuth2AuthenticationManager(); + resources.authenticationManager(auth2AuthenticationManager); + resources.resourceId("speaker-service").tokenStore(tokenStore).stateless(true); + } + + @Override + public void configure(HttpSecurity http) throws Exception { + // 限制资源服务器只接管匹配的资源 + http.requestMatchers().antMatchers("dueros") + .and() + //授权的请求 + .authorizeRequests() + .anyRequest().authenticated() + //关闭跨站请求防护 + .and() + .csrf().disable(); + } + + public TokenStore jdbcTokenStore(){ + TokenStore tokenStore = new JdbcTokenStore(dataSource); + return tokenStore; + } + +} diff --git a/xinda-plugs/xinda-oauth/src/main/java/com/xinda/oauth/config/SpeakerApprovalHandler.java b/xinda-plugs/xinda-oauth/src/main/java/com/xinda/oauth/config/SpeakerApprovalHandler.java new file mode 100644 index 0000000..9e64e6c --- /dev/null +++ b/xinda-plugs/xinda-oauth/src/main/java/com/xinda/oauth/config/SpeakerApprovalHandler.java @@ -0,0 +1,83 @@ +package com.xinda.oauth.config; + + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.core.Authentication; +import org.springframework.security.oauth2.common.util.OAuth2Utils; +import org.springframework.security.oauth2.provider.AuthorizationRequest; +import org.springframework.security.oauth2.provider.OAuth2RequestFactory; +import org.springframework.security.oauth2.provider.approval.Approval; +import org.springframework.security.oauth2.provider.approval.ApprovalStore; +import org.springframework.security.oauth2.provider.approval.ApprovalStoreUserApprovalHandler; +import org.springframework.security.oauth2.provider.client.JdbcClientDetailsService; + +import java.util.*; + +/** + * kerwincui + */ +public class SpeakerApprovalHandler extends ApprovalStoreUserApprovalHandler { + + private int approvalExpirySeconds = -1; + + @Autowired + private ApprovalStore approvalStore; + + public SpeakerApprovalHandler(JdbcClientDetailsService clientDetailsService, ApprovalStore approvalStore, OAuth2RequestFactory oAuth2RequestFactory) { + this.setApprovalStore(approvalStore); + this.setClientDetailsService(clientDetailsService); + this.setRequestFactory(oAuth2RequestFactory); + } + + @Override + public AuthorizationRequest updateAfterApproval(AuthorizationRequest authorizationRequest, Authentication userAuthentication) { + // 获取授权过的范围 + Set requestedScopes = authorizationRequest.getScope(); + Set approvedScopes = new HashSet(); + Set approvals = new HashSet(); + Date expiry = computeExpiry(); + + // 存储授权或拒绝的范围 + Map approvalParameters = authorizationRequest.getApprovalParameters(); + for (String requestedScope : requestedScopes) { + String approvalParameter = OAuth2Utils.SCOPE_PREFIX + requestedScope; + String value = approvalParameters.get(approvalParameter); + value = value == null ? "" : value.toLowerCase(); + if ("true".equals(value) || value.startsWith("approve")||value.equals("on")) { + approvedScopes.add(requestedScope); + approvals.add(new Approval(userAuthentication.getName(), authorizationRequest.getClientId(), + requestedScope, expiry, Approval.ApprovalStatus.APPROVED)); + } + else { + approvals.add(new Approval(userAuthentication.getName(), authorizationRequest.getClientId(), + requestedScope, expiry, Approval.ApprovalStatus.DENIED)); + } + } + approvalStore.addApprovals(approvals); + + boolean approved; + authorizationRequest.setScope(approvedScopes); + if (approvedScopes.isEmpty() && !requestedScopes.isEmpty()) { + approved = false; + } + else { + approved = true; + } + authorizationRequest.setApproved(approved); + return authorizationRequest; + } + + private Date computeExpiry() { + Calendar expiresAt = Calendar.getInstance(); + // 默认一个月 + if (approvalExpirySeconds == -1) { + expiresAt.add(Calendar.MONTH, 1); + } + else { + expiresAt.add(Calendar.SECOND, approvalExpirySeconds); + } + return expiresAt.getTime(); + } + +} + diff --git a/xinda-plugs/xinda-oauth/src/main/java/com/xinda/oauth/controller/ConfirmAccessController.java b/xinda-plugs/xinda-oauth/src/main/java/com/xinda/oauth/controller/ConfirmAccessController.java new file mode 100644 index 0000000..b5a103e --- /dev/null +++ b/xinda-plugs/xinda-oauth/src/main/java/com/xinda/oauth/controller/ConfirmAccessController.java @@ -0,0 +1,49 @@ +package com.xinda.oauth.controller; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.oauth2.common.util.OAuth2Utils; +import org.springframework.security.oauth2.provider.AuthorizationRequest; +import org.springframework.security.oauth2.provider.ClientDetails; +import org.springframework.security.oauth2.provider.approval.Approval; +import org.springframework.security.oauth2.provider.approval.ApprovalStore; +import org.springframework.security.oauth2.provider.client.JdbcClientDetailsService; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.SessionAttributes; + +import java.security.Principal; +import java.util.LinkedHashMap; +import java.util.Map; + +/** + * kerwincui + */ +@Controller +@SessionAttributes("authorizationRequest") +public class ConfirmAccessController { + @Autowired + private JdbcClientDetailsService clientDetailsService; + @Autowired + private ApprovalStore approvalStore; + + @RequestMapping("/oauth/confirm_access") + public String getAccessConfirmation(Map model, Principal principal ) { + AuthorizationRequest clientAuth = (AuthorizationRequest) model.remove("authorizationRequest"); + ClientDetails client = clientDetailsService.loadClientByClientId(clientAuth.getClientId()); + + Map scopes = new LinkedHashMap(); + for (String scope : clientAuth.getScope()) { + scopes.put(OAuth2Utils.SCOPE_PREFIX + scope, "false"); + } + for (Approval approval : approvalStore.getApprovals(principal.getName(), client.getClientId())) { + if (clientAuth.getScope().contains(approval.getScope())) { + scopes.put(OAuth2Utils.SCOPE_PREFIX + approval.getScope(), + approval.getStatus() == Approval.ApprovalStatus.APPROVED ? "true" : "false"); + } + } + model.put("auth_request", clientAuth); + model.put("client", client); + model.put("scopes", scopes); + return "oauth/access_confirmation"; + } +} diff --git a/xinda-plugs/xinda-oauth/src/main/java/com/xinda/oauth/controller/LoginController.java b/xinda-plugs/xinda-oauth/src/main/java/com/xinda/oauth/controller/LoginController.java new file mode 100644 index 0000000..3def93e --- /dev/null +++ b/xinda-plugs/xinda-oauth/src/main/java/com/xinda/oauth/controller/LoginController.java @@ -0,0 +1,51 @@ +package com.xinda.oauth.controller; + +import com.xinda.framework.web.service.SysLoginService; +import com.xinda.framework.web.service.TokenService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.oauth2.common.OAuth2AccessToken; +import org.springframework.security.oauth2.provider.token.TokenStore; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestHeader; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +@Controller +public class LoginController { + + + @Autowired + private TokenStore tokenStore; + + @Autowired + private SysLoginService loginService; + + @Autowired + private TokenService tokenService; + + @RequestMapping("/oauth/login") + public String login() { + return "oauth/login"; + } + + @RequestMapping("/oauth/index") + public String index() { + return "oauth/index"; + } + + @GetMapping("/oauth/logout") + @ResponseBody + public String logout(@RequestHeader String Authorization) { + if (!Authorization.isEmpty()){ + String token=Authorization.split(" ")[1]; + OAuth2AccessToken auth2AccessToken = tokenStore.readAccessToken(token); + tokenStore.removeAccessToken(auth2AccessToken); + return "SUCCESS"; + }else{ + return "FAIL"; + } + + } + +} diff --git a/xinda-plugs/xinda-oauth/src/main/java/com/xinda/oauth/controller/OauthClientDetailsController.java b/xinda-plugs/xinda-oauth/src/main/java/com/xinda/oauth/controller/OauthClientDetailsController.java new file mode 100644 index 0000000..dc7fc4c --- /dev/null +++ b/xinda-plugs/xinda-oauth/src/main/java/com/xinda/oauth/controller/OauthClientDetailsController.java @@ -0,0 +1,107 @@ +package com.xinda.oauth.controller; + +import com.xinda.common.annotation.Log; +import com.xinda.common.core.controller.BaseController; +import com.xinda.common.core.domain.AjaxResult; +import com.xinda.common.core.page.TableDataInfo; +import com.xinda.common.enums.BusinessType; +import com.xinda.common.utils.poi.ExcelUtil; +import com.xinda.oauth.domain.OauthClientDetails; +import com.xinda.oauth.service.IOauthClientDetailsService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.*; + +import javax.servlet.http.HttpServletResponse; +import java.util.List; + +/** + * 云云对接Controller + * + * @author kerwincui + * @date 2022-02-07 + */ +@Api(tags = "云云对接") +@RestController +@RequestMapping("/iot/clientDetails") +public class OauthClientDetailsController extends BaseController +{ + @Autowired + private IOauthClientDetailsService oauthClientDetailsService; + + /** + * 查询云云对接列表 + */ + @ApiOperation("查询云云对接列表") + @PreAuthorize("@ss.hasPermi('iot:clientDetails:list')") + @GetMapping("/list") + public TableDataInfo list(OauthClientDetails oauthClientDetails) + { + startPage(); + List list = oauthClientDetailsService.selectOauthClientDetailsList(oauthClientDetails); + return getDataTable(list); + } + + /** + * 导出云云对接列表 + */ + @ApiOperation("导出云云对接列表") + @PreAuthorize("@ss.hasPermi('iot:clientDetails:export')") + @Log(title = "云云对接", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(HttpServletResponse response, OauthClientDetails oauthClientDetails) + { + List list = oauthClientDetailsService.selectOauthClientDetailsList(oauthClientDetails); + ExcelUtil util = new ExcelUtil(OauthClientDetails.class); + util.exportExcel(response, list, "云云对接数据"); + } + + /** + * 获取云云对接详细信息 + */ + @ApiOperation("获取云云对接详细信息") + @PreAuthorize("@ss.hasPermi('iot:clientDetails:query')") + @GetMapping(value = "/{id}") + public AjaxResult getInfo(@PathVariable("id") Long id) + { + return AjaxResult.success(oauthClientDetailsService.selectOauthClientDetailsById(id)); + } + + /** + * 新增云云对接 + */ + @ApiOperation("新增云云对接") + @PreAuthorize("@ss.hasPermi('iot:clientDetails:add')") + @Log(title = "云云对接", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@RequestBody OauthClientDetails oauthClientDetails) + { + return oauthClientDetailsService.insertOauthClientDetails(oauthClientDetails); + } + + /** + * 修改云云对接 + */ + @ApiOperation("修改云云对接") + @PreAuthorize("@ss.hasPermi('iot:clientDetails:edit')") + @Log(title = "云云对接", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@RequestBody OauthClientDetails oauthClientDetails) + { + return oauthClientDetailsService.updateOauthClientDetails(oauthClientDetails); + } + + /** + * 修改云云对接 + */ + @ApiOperation("删除云云对接") + @PreAuthorize("@ss.hasPermi('iot:clientDetails:remove')") + @Log(title = "云云对接", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + public AjaxResult remove(@PathVariable Long[] ids) + { + return toAjax(oauthClientDetailsService.deleteOauthClientDetailsByIds(ids)); + } +} diff --git a/xinda-plugs/xinda-oauth/src/main/java/com/xinda/oauth/controller/OauthController.java b/xinda-plugs/xinda-oauth/src/main/java/com/xinda/oauth/controller/OauthController.java new file mode 100644 index 0000000..e4ad2ca --- /dev/null +++ b/xinda-plugs/xinda-oauth/src/main/java/com/xinda/oauth/controller/OauthController.java @@ -0,0 +1,255 @@ +package com.xinda.oauth.controller; + +import cn.hutool.core.lang.Assert; +import cn.hutool.core.util.ArrayUtil; +import cn.hutool.core.util.IdUtil; +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; +import com.alibaba.fastjson2.JSON; +import com.xinda.common.core.domain.AjaxResult; +import com.xinda.common.core.text.KeyValue; +import com.xinda.common.exception.ServiceException; +import com.xinda.common.utils.MessageUtils; +import com.xinda.common.utils.StringUtils; +import com.xinda.common.utils.json.JsonUtils; +import com.xinda.oauth.domain.OauthAccessToken; +import com.xinda.oauth.domain.OauthApprovals; +import com.xinda.oauth.domain.OauthClientDetails; +import com.xinda.oauth.domain.OauthCode; +import com.xinda.oauth.enums.OAuth2GrantTypeEnum; +import com.xinda.oauth.service.IOauthApprovalsService; +import com.xinda.oauth.service.IOauthClientDetailsService; +import com.xinda.oauth.service.IOauthCodeService; +import com.xinda.oauth.service.OauthAccessTokenService; +import com.xinda.oauth.utils.HttpUtils; +import com.xinda.oauth.utils.OAuth2Utils; +import com.xinda.oauth.vo.OAuth2OpenAccessTokenRespVO; +import com.xinda.oauth.vo.OAuth2OpenAuthorizeInfoRespVO; +import lombok.extern.slf4j.Slf4j; +import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import java.io.IOException; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.Map; +import java.util.function.Function; +import java.util.stream.Collectors; + +import static com.xinda.common.core.domain.AjaxResult.success; +import static com.xinda.common.enums.GlobalErrorCodeConstants.BAD_REQUEST; +import static com.xinda.common.exception.ServiceExceptionUtil.exception0; +import static com.xinda.common.utils.SecurityUtils.getUserId; +import static com.xinda.common.utils.collection.CollectionUtils.convertList; + +/** + * @author fastb + * @version 1.0 + * @description: OAuth2.0 授权接口 + * @date 2024-03-20 11:29 + */ +@RestController +@RequestMapping("/oauth2") +@Slf4j +public class OauthController { + + @Resource + private IOauthClientDetailsService oauthClientDetailsService; + @Resource + private IOauthApprovalsService oAuthApproveService; + @Resource + private OauthAccessTokenService oauthAccessTokenService; + @Resource + private IOauthCodeService oauthCodeService; + + @GetMapping("/authorize") + public AjaxResult authorize(@RequestParam("clientId") String clientId) { + // 0. 校验用户已经登录。通过 Spring Security 实现 + + // 1. 获得 Client 客户端的信息 + OauthClientDetails oauthClientDetails = oauthClientDetailsService.validOAuthClientFromCache(clientId); + // 2. 获得用户已经授权的信息 + List approves = oAuthApproveService.getApproveList(getUserId(), clientId); + // 拼接返回 + return success(this.convert(oauthClientDetails, approves)); + } + + private OAuth2OpenAuthorizeInfoRespVO convert(OauthClientDetails oauthClientDetails, List approves) { + // 构建 scopes + List strings = StringUtils.str2List(oauthClientDetails.getScope(), ",", true, true); + List> scopes = new ArrayList<>(strings.size()); + Map approveMap = approves.stream().collect(Collectors.toMap(OauthApprovals::getScope, Function.identity())); + for (String scope : strings) { + OauthApprovals oauthApprovals = approveMap.get(scope); + scopes.add(new KeyValue<>(scope, oauthApprovals != null ? "true".equals(oauthApprovals.getStatus()) : false)); + } + // 拼接返回 + return new OAuth2OpenAuthorizeInfoRespVO( + new OAuth2OpenAuthorizeInfoRespVO.Client(oauthClientDetails.getClientId(), oauthClientDetails.getIcon()), scopes); + } + + @PostMapping("/authorize") + public AjaxResult authorize(@RequestParam("response_type") String responseType, + @RequestParam("client_id") String clientId, + @RequestParam(value = "scope", required = false) String scope, + @RequestParam("redirect_uri") String redirectUri, + @RequestParam(value = "auto_approve") Boolean autoApprove, + @RequestParam(value = "state", required = false) String state) throws IOException { + log.warn("oauth2.0认证"); + Map scopes = JsonUtils.parseObject(scope, Map.class); + scopes = ObjectUtil.defaultIfNull(scopes, Collections.emptyMap()); + // 0. 校验用户已经登录。通过 Spring Security 实现 + + // 1.1 校验 responseType 是否满足 code 或者 token 值 + OAuth2GrantTypeEnum grantTypeEnum = getGrantTypeEnum(responseType); + // 1.2 校验 redirectUri 重定向域名是否合法 + 校验 scope 是否在 Client 授权范围内 + OauthClientDetails client = oauthClientDetailsService.validOAuthClientFromCache(clientId, null, + grantTypeEnum.getGrantType(), scopes.keySet(), redirectUri); + + // 2.1 假设 approved 为 null,说明是场景一 + if (Boolean.TRUE.equals(autoApprove)) { + // 如果无法自动授权通过,则返回空 url,前端不进行跳转 + if (!oAuthApproveService.checkForPreApproval(getUserId(), clientId, scopes.keySet())) { + return success(null); + } + } else { // 2.2 假设 approved 非 null,说明是场景二 + // 如果计算后不通过,则跳转一个错误链接 + if (!oAuthApproveService.updateAfterApproval(getUserId(), clientId, scopes)) { + return success(OAuth2Utils.buildUnsuccessfulRedirect(redirectUri, responseType, state, + "access_denied", MessageUtils.message("user.access.denied"))); + } + } + + // 3.1 如果是 code 授权码模式,则发放 code 授权码,并重定向 + List approveScopes = convertList(scopes.entrySet(), Map.Entry::getKey, Map.Entry::getValue); + if (grantTypeEnum == OAuth2GrantTypeEnum.AUTHORIZATION_CODE) { + String redirect = getAuthorizationCodeRedirect(getUserId(), client, approveScopes, redirectUri, state); + return success(MessageUtils.message("authorization.success"), redirect); + } + return success(); + // 3.2 如果是 token 则是 implicit 简化模式,则发送 accessToken 访问令牌,并重定向 +// return success(getImplicitGrantRedirect(getLoginUserId(), client, approveScopes, redirectUri, state)); + } + + private String getAuthorizationCodeRedirect(Long userId, OauthClientDetails client, + List scopes, String redirectUri, String state) { + // 1. 创建 code 授权码 + String authorizationCode = generateCode(); + OauthCode oauthCode = new OauthCode(); + oauthCode.setCode(authorizationCode); + oauthCode.setUserId(userId); + oauthCodeService.insertOauthCode(oauthCode); +// String authorizationCode = oauthCodeService.grantAuthorizationCodeForCode(userId, client.getClientId(), scopes, +// redirectUri, state); + // 2. 拼接重定向的 URL + return OAuth2Utils.buildAuthorizationCodeRedirectUri(redirectUri, authorizationCode, state); + } + + private static OAuth2GrantTypeEnum getGrantTypeEnum(String responseType) { + if (StrUtil.equals(responseType, "code")) { + return OAuth2GrantTypeEnum.AUTHORIZATION_CODE; + } + if (StrUtil.equalsAny(responseType, "token")) { + return OAuth2GrantTypeEnum.IMPLICIT; + } + throw exception0(BAD_REQUEST.getCode(), MessageUtils.message("oauth.response.type.not.valid")); + } + + @PostMapping("/token") + public ResponseEntity postAccessToken(HttpServletRequest request, + @RequestParam("grant_type") String grantType, + @RequestParam(value = "code", required = false) String code, // 授权码模式 + @RequestParam(value = "redirect_uri", required = false) String redirectUri, // 授权码模式 + @RequestParam(value = "state", required = false) String state, // 授权码模式 + @RequestParam(value = "username", required = false) String username, // 密码模式 + @RequestParam(value = "password", required = false) String password, // 密码模式 + @RequestParam(value = "scope", required = false) String scope, // 密码模式 + @RequestParam(value = "refresh_token", required = false) String refreshToken) { // 刷新模式 +// log.error("小度请求token,入参:{},{},{},{},{},{},{},{}", grantType, code, redirectUri, state, username, password, scope, refreshToken); + List scopes = OAuth2Utils.buildScopes(scope); + // todo 小度传过来的参数重复了,这里先暂时处理一下 + if (grantType.contains(",")) { + grantType = grantType.substring(grantType.indexOf(",") + 1); + } + if (code.contains(",")) { + code = code.substring(code.indexOf(",") + 1); + } + if (redirectUri.contains(",")) { + redirectUri = redirectUri.substring(redirectUri.indexOf(",") + 1); + } + // 1.1 校验授权类型 + OAuth2GrantTypeEnum grantTypeEnum = OAuth2GrantTypeEnum.getByGranType(grantType); + if (grantTypeEnum == null) { + throw new ServiceException(MessageUtils.message("oauth.grant.type.null") + ":" + grantType + ";" + code + ";" + redirectUri); + } + if (grantTypeEnum == OAuth2GrantTypeEnum.IMPLICIT) { + throw new ServiceException(MessageUtils.message("oauth.grant.type.implicit.not.support")); + } + + // 1.2 校验客户端 + String[] clientIdAndSecret = obtainBasicAuthorization(request); + OauthClientDetails client = oauthClientDetailsService.validOAuthClientFromCache(clientIdAndSecret[0], clientIdAndSecret[1], + grantType, scopes, redirectUri); + + // 2. 根据授权模式,获取访问令牌 + OauthAccessToken oauthAccessToken; + switch (grantTypeEnum) { + case AUTHORIZATION_CODE: + oauthAccessToken = oauthAccessTokenService.grantAuthorizationCodeForAccessToken(client, code, redirectUri, state); + break; +// case PASSWORD: +// accessTokenDO = oauth2GrantService.grantPassword(username, password, client.getClientId(), scopes); +// break; +// case CLIENT_CREDENTIALS: +// accessTokenDO = oauth2GrantService.grantClientCredentials(client.getClientId(), scopes); +// break; +// case REFRESH_TOKEN: +// accessTokenDO = oauth2GrantService.grantRefreshToken(refreshToken, client.getClientId()); +// break; + default: + throw new IllegalArgumentException(MessageUtils.message("oauth.grant.type.null")+ ":" + grantType); + } + Assert.notNull(oauthAccessToken, MessageUtils.message("oauth.access.token.null")); // 防御性检查 + OAuth2OpenAccessTokenRespVO oAuth2OpenAccessTokenRespVO = this.convertAccessToken(oauthAccessToken); + ResponseEntity response = getResponse(oAuth2OpenAccessTokenRespVO); +// log.error("小度请求token成功:{}", JSON.toJSONString(response)); + return response; + } + + private ResponseEntity getResponse(OAuth2OpenAccessTokenRespVO accessToken) { + HttpHeaders headers = new HttpHeaders(); + headers.set("Cache-Control", "no-store"); + headers.set("Pragma", "no-cache"); + headers.set("Content-Type", "application/json;charset=UTF-8"); + return new ResponseEntity<>(accessToken, headers, HttpStatus.OK); + } + + private OAuth2OpenAccessTokenRespVO convertAccessToken(OauthAccessToken oauthAccessToken) { + OAuth2OpenAccessTokenRespVO respVO = new OAuth2OpenAccessTokenRespVO(); + respVO.setAccessToken(oauthAccessToken.getTokenId()); + respVO.setRefreshToken(oauthAccessToken.getRefreshToken()); + respVO.setTokenType("bearer"); + respVO.setExpiresIn(OAuth2Utils.getExpiresIn(oauthAccessToken.getExpiresTime())); +// respVO.setScope(OAuth2Utils.buildScopeStr(bean.getScopes())); + return respVO; + } + + private String[] obtainBasicAuthorization(HttpServletRequest request) { + String[] clientIdAndSecret = HttpUtils.obtainBasicAuthorization(request); + if (ArrayUtil.isEmpty(clientIdAndSecret) || clientIdAndSecret.length != 2) { + throw exception0(BAD_REQUEST.getCode(), MessageUtils.message("obtain.basic.authorization.failed")); + } + return clientIdAndSecret; + } + + private static String generateCode() { + return IdUtil.fastSimpleUUID(); + } + + +} diff --git a/xinda-plugs/xinda-oauth/src/main/java/com/xinda/oauth/domain/OauthAccessToken.java b/xinda-plugs/xinda-oauth/src/main/java/com/xinda/oauth/domain/OauthAccessToken.java new file mode 100644 index 0000000..123218f --- /dev/null +++ b/xinda-plugs/xinda-oauth/src/main/java/com/xinda/oauth/domain/OauthAccessToken.java @@ -0,0 +1,39 @@ +package com.xinda.oauth.domain; + +import lombok.*; +import lombok.experimental.Accessors; + +import java.time.LocalDateTime; + +/** + * @author fastb + * @date 2023-09-01 17:00 + */ +@Data +@ToString(callSuper = true) +@Builder +@NoArgsConstructor +@AllArgsConstructor +@Accessors(chain = true) +public class OauthAccessToken { + + private String tokenId; + + private String token; + + private String authenticationId; + + private String userName; + + private String clientId; + + private String authentication; + + private String refreshToken; + + private String openId; + + private Long userId; + + private LocalDateTime expiresTime; +} diff --git a/xinda-plugs/xinda-oauth/src/main/java/com/xinda/oauth/domain/OauthApprovals.java b/xinda-plugs/xinda-oauth/src/main/java/com/xinda/oauth/domain/OauthApprovals.java new file mode 100644 index 0000000..f0bd5e1 --- /dev/null +++ b/xinda-plugs/xinda-oauth/src/main/java/com/xinda/oauth/domain/OauthApprovals.java @@ -0,0 +1,42 @@ +package com.xinda.oauth.domain; + +import com.xinda.common.annotation.Excel; +import lombok.Data; + +import java.time.LocalDateTime; + +/** + * 【请填写功能名称】对象 oauth_approvals + * + * @author kerwincui + * @date 2024-03-20 + */ +@Data +public class OauthApprovals +{ + private static final long serialVersionUID = 1L; + + /** $column.columnComment */ + @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()") + private String userid; + + /** $column.columnComment */ + @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()") + private String clientid; + + /** $column.columnComment */ + @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()") + private String scope; + + /** $column.columnComment */ + @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()") + private String status; + + /** $column.columnComment */ + @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()") + private LocalDateTime expiresat; + + /** $column.columnComment */ + @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()") + private LocalDateTime lastmodifiedat; +} diff --git a/xinda-plugs/xinda-oauth/src/main/java/com/xinda/oauth/domain/OauthClientDetails.java b/xinda-plugs/xinda-oauth/src/main/java/com/xinda/oauth/domain/OauthClientDetails.java new file mode 100644 index 0000000..51eb1d9 --- /dev/null +++ b/xinda-plugs/xinda-oauth/src/main/java/com/xinda/oauth/domain/OauthClientDetails.java @@ -0,0 +1,285 @@ +package com.xinda.oauth.domain; + +import com.xinda.common.annotation.Excel; +import com.xinda.common.core.domain.BaseEntity; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; + +/** + * 云云对接对象 oauth_client_details + * + * @author kerwincui + * @date 2022-02-07 + */ +@ApiModel(value = "OauthClientDetails", description = "云云对接对象 oauth_client_details") +public class OauthClientDetails extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** + * 主键编号 + */ + @ApiModelProperty("编号") + @Excel(name = "编号") + private Long id; + + /** 客户端ID */ + @ApiModelProperty("客户端ID") + @Excel(name = "客户端ID") + private String clientId; + + /** 资源 */ + @ApiModelProperty("资源") + @Excel(name = "资源") + private String resourceIds; + + /** 客户端秘钥 */ + @ApiModelProperty("客户端秘钥") + private String clientSecret; + + /** 权限范围 */ + @ApiModelProperty("权限范围") + @Excel(name = "权限范围") + private String scope; + + /** 授权模式 */ + @ApiModelProperty("授权模式") + @Excel(name = "授权模式") + private String authorizedGrantTypes; + + /** 回调地址 */ + @ApiModelProperty("回调地址") + @Excel(name = "回调地址") + private String webServerRedirectUri; + + /** 权限 */ + @ApiModelProperty("权限") + @Excel(name = "权限") + private String authorities; + + /** access token有效时间 */ + @ApiModelProperty("access token有效时间") + @Excel(name = "access token有效时间") + private Long accessTokenValidity; + + /** refresh token有效时间 */ + @ApiModelProperty("refresh token有效时间") + @Excel(name = "refresh token有效时间") + private Long refreshTokenValidity; + + /** 预留的字段 */ + @ApiModelProperty("预留的字段") + @Excel(name = "预留的字段") + private String additionalInformation; + + /** 自动授权 */ + @ApiModelProperty("自动授权") + @Excel(name = "自动授权") + private String autoapprove; + + /** 平台 */ + @ApiModelProperty("平台") + @Excel(name = "平台") + private Integer type; + + /** + * 启用状态 + */ + @ApiModelProperty("启用状态") + @Excel(name = "启用状态") + private Integer status; + + /** + * 图标 + */ + @ApiModelProperty("图标") + private String icon; + + /** + * 云技能id + */ + private String cloudSkillId; + + /** 租户id */ + private Long tenantId; + + /** 租户名称 */ + private String tenantName; + + public Long getTenantId() { + return tenantId; + } + + public void setTenantId(Long tenantId) { + this.tenantId = tenantId; + } + + public String getTenantName() { + return tenantName; + } + + public void setTenantName(String tenantName) { + this.tenantName = tenantName; + } + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getCloudSkillId() { + return cloudSkillId; + } + + public void setCloudSkillId(String cloudSkillId) { + this.cloudSkillId = cloudSkillId; + } + + public Integer getStatus() { + return status; + } + + public void setStatus(Integer status) { + this.status = status; + } + + public String getIcon() { + return icon; + } + + public void setIcon(String icon) { + this.icon = icon; + } + + public void setClientId(String clientId) + { + this.clientId = clientId; + } + + public String getClientId() + { + return clientId; + } + public void setResourceIds(String resourceIds) + { + this.resourceIds = resourceIds; + } + + public String getResourceIds() + { + return resourceIds; + } + public void setClientSecret(String clientSecret) + { + this.clientSecret = clientSecret; + } + + public String getClientSecret() + { + return clientSecret; + } + public void setScope(String scope) + { + this.scope = scope; + } + + public String getScope() + { + return scope; + } + public void setAuthorizedGrantTypes(String authorizedGrantTypes) + { + this.authorizedGrantTypes = authorizedGrantTypes; + } + + public String getAuthorizedGrantTypes() + { + return authorizedGrantTypes; + } + public void setWebServerRedirectUri(String webServerRedirectUri) + { + this.webServerRedirectUri = webServerRedirectUri; + } + + public String getWebServerRedirectUri() + { + return webServerRedirectUri; + } + public void setAuthorities(String authorities) + { + this.authorities = authorities; + } + + public String getAuthorities() + { + return authorities; + } + public void setAccessTokenValidity(Long accessTokenValidity) + { + this.accessTokenValidity = accessTokenValidity; + } + + public Long getAccessTokenValidity() + { + return accessTokenValidity; + } + public void setRefreshTokenValidity(Long refreshTokenValidity) + { + this.refreshTokenValidity = refreshTokenValidity; + } + + public Long getRefreshTokenValidity() + { + return refreshTokenValidity; + } + public void setAdditionalInformation(String additionalInformation) + { + this.additionalInformation = additionalInformation; + } + + public String getAdditionalInformation() + { + return additionalInformation; + } + public void setAutoapprove(String autoapprove) + { + this.autoapprove = autoapprove; + } + + public String getAutoapprove() + { + return autoapprove; + } + public void setType(Integer type) + { + this.type = type; + } + + public Integer getType() + { + return type; + } + + @Override + public String toString() { + return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) + .append("clientId", getClientId()) + .append("resourceIds", getResourceIds()) + .append("clientSecret", getClientSecret()) + .append("scope", getScope()) + .append("authorizedGrantTypes", getAuthorizedGrantTypes()) + .append("webServerRedirectUri", getWebServerRedirectUri()) + .append("authorities", getAuthorities()) + .append("accessTokenValidity", getAccessTokenValidity()) + .append("refreshTokenValidity", getRefreshTokenValidity()) + .append("additionalInformation", getAdditionalInformation()) + .append("autoapprove", getAutoapprove()) + .append("type", getType()) + .toString(); + } +} diff --git a/xinda-plugs/xinda-oauth/src/main/java/com/xinda/oauth/domain/OauthCode.java b/xinda-plugs/xinda-oauth/src/main/java/com/xinda/oauth/domain/OauthCode.java new file mode 100644 index 0000000..766e374 --- /dev/null +++ b/xinda-plugs/xinda-oauth/src/main/java/com/xinda/oauth/domain/OauthCode.java @@ -0,0 +1,66 @@ +package com.xinda.oauth.domain; + +import com.xinda.common.annotation.Excel; +import com.xinda.common.core.domain.BaseEntity; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; + +/** + * 【请填写功能名称】对象 oauth_code + * + * @author kerwincui + * @date 2024-03-20 + */ +public class OauthCode extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** $column.columnComment */ + @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()") + private String code; + + /** $column.columnComment */ + @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()") + private String authentication; + + /** $column.columnComment */ + @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()") + private Long userId; + + public void setCode(String code) + { + this.code = code; + } + + public String getCode() + { + return code; + } + public void setAuthentication(String authentication) + { + this.authentication = authentication; + } + + public String getAuthentication() + { + return authentication; + } + public void setUserId(Long userId) + { + this.userId = userId; + } + + public Long getUserId() + { + return userId; + } + + @Override + public String toString() { + return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) + .append("code", getCode()) + .append("authentication", getAuthentication()) + .append("userId", getUserId()) + .toString(); + } +} diff --git a/xinda-plugs/xinda-oauth/src/main/java/com/xinda/oauth/enums/OAuth2GrantTypeEnum.java b/xinda-plugs/xinda-oauth/src/main/java/com/xinda/oauth/enums/OAuth2GrantTypeEnum.java new file mode 100644 index 0000000..67c439b --- /dev/null +++ b/xinda-plugs/xinda-oauth/src/main/java/com/xinda/oauth/enums/OAuth2GrantTypeEnum.java @@ -0,0 +1,29 @@ +package com.xinda.oauth.enums; + +import cn.hutool.core.util.ArrayUtil; +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * OAuth2 授权类型(模式)的枚举 + * + * @author 芋道源码 + */ +@AllArgsConstructor +@Getter +public enum OAuth2GrantTypeEnum { + + PASSWORD("password"), // 密码模式 + AUTHORIZATION_CODE("authorization_code"), // 授权码模式 + IMPLICIT("implicit"), // 简化模式 + CLIENT_CREDENTIALS("client_credentials"), // 客户端模式 + REFRESH_TOKEN("refresh_token"), // 刷新模式 + ; + + private final String grantType; + + public static OAuth2GrantTypeEnum getByGranType(String grantType) { + return ArrayUtil.firstMatch(o -> o.getGrantType().equals(grantType), values()); + } + +} diff --git a/xinda-plugs/xinda-oauth/src/main/java/com/xinda/oauth/mapper/OauthAccessTokenMapper.java b/xinda-plugs/xinda-oauth/src/main/java/com/xinda/oauth/mapper/OauthAccessTokenMapper.java new file mode 100644 index 0000000..56e8e84 --- /dev/null +++ b/xinda-plugs/xinda-oauth/src/main/java/com/xinda/oauth/mapper/OauthAccessTokenMapper.java @@ -0,0 +1,22 @@ +package com.xinda.oauth.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.xinda.oauth.domain.OauthAccessToken; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +@Mapper +public interface OauthAccessTokenMapper extends BaseMapper { + + String selectUserNameByTokenId(String tokenId); + + OauthAccessToken selectByTokenId(String tokenId); + + void updateOpenIdByTokenId(@Param("tokenId") String tokenId,@Param("openUid") String openUid); + + OauthAccessToken selectByUserName(String userName); + + void insertOauthAccessToken(OauthAccessToken oauthAccessToken); + + void deleteByUserId(Long userId); +} diff --git a/xinda-plugs/xinda-oauth/src/main/java/com/xinda/oauth/mapper/OauthApprovalsMapper.java b/xinda-plugs/xinda-oauth/src/main/java/com/xinda/oauth/mapper/OauthApprovalsMapper.java new file mode 100644 index 0000000..bfd4861 --- /dev/null +++ b/xinda-plugs/xinda-oauth/src/main/java/com/xinda/oauth/mapper/OauthApprovalsMapper.java @@ -0,0 +1,67 @@ +package com.xinda.oauth.mapper; + +import com.xinda.oauth.domain.OauthApprovals; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * 【请填写功能名称】Mapper接口 + * + * @author kerwincui + * @date 2024-03-20 + */ +public interface OauthApprovalsMapper +{ + /** + * 查询【请填写功能名称】 + * + * @param userid 【请填写功能名称】主键 + * @return 【请填写功能名称】 + */ + public OauthApprovals selectOauthApprovalsByUserid(String userid); + + /** + * 查询【请填写功能名称】列表 + * + * @param oauthApprovals 【请填写功能名称】 + * @return 【请填写功能名称】集合 + */ + public List selectOauthApprovalsList(OauthApprovals oauthApprovals); + + /** + * 新增【请填写功能名称】 + * + * @param oauthApprovals 【请填写功能名称】 + * @return 结果 + */ + public int insertOauthApprovals(OauthApprovals oauthApprovals); + + /** + * 修改【请填写功能名称】 + * + * @param oauthApprovals 【请填写功能名称】 + * @return 结果 + */ + public int updateOauthApprovals(OauthApprovals oauthApprovals); + + /** + * 删除【请填写功能名称】 + * + * @param userid 【请填写功能名称】主键 + * @return 结果 + */ + public int deleteOauthApprovalsByUserid(String userid); + + /** + * 批量删除【请填写功能名称】 + * + * @param userids 需要删除的数据主键集合 + * @return 结果 + */ + public int deleteOauthApprovalsByUserids(String[] userids); + + int update(OauthApprovals oauthApprovals); + + List selectListByUserIdAndClientId(@Param("userId") Long userId, @Param("clientId") String clientId); +} diff --git a/xinda-plugs/xinda-oauth/src/main/java/com/xinda/oauth/mapper/OauthClientDetailsMapper.java b/xinda-plugs/xinda-oauth/src/main/java/com/xinda/oauth/mapper/OauthClientDetailsMapper.java new file mode 100644 index 0000000..b6e4b05 --- /dev/null +++ b/xinda-plugs/xinda-oauth/src/main/java/com/xinda/oauth/mapper/OauthClientDetailsMapper.java @@ -0,0 +1,74 @@ +package com.xinda.oauth.mapper; + +import com.xinda.oauth.domain.OauthClientDetails; +import org.apache.ibatis.annotations.Param; +import org.springframework.stereotype.Repository; + +import java.util.List; + +/** + * 云云对接Mapper接口 + * + * @author kerwincui + * @date 2022-02-07 + */ +@Repository +public interface OauthClientDetailsMapper +{ + /** + * 查询云云对接 + * + * @param id 云云对接主键 + * @return 云云对接 + */ + public OauthClientDetails selectOauthClientDetailsById(Long id); + + /** + * 查询云云对接列表 + * + * @param oauthClientDetails 云云对接 + * @return 云云对接集合 + */ + public List selectOauthClientDetailsList(OauthClientDetails oauthClientDetails); + + /** + * 新增云云对接 + * + * @param oauthClientDetails 云云对接 + * @return 结果 + */ + public int insertOauthClientDetails(OauthClientDetails oauthClientDetails); + + /** + * 修改云云对接 + * + * @param oauthClientDetails 云云对接 + * @return 结果 + */ + public int updateOauthClientDetails(OauthClientDetails oauthClientDetails); + + /** + * 删除云云对接 + * + * @param clientId 云云对接主键 + * @return 结果 + */ + public int deleteOauthClientDetailsByClientId(String clientId); + + /** + * 批量删除云云对接 + * + * @param ids 需要删除的数据主键集合 + * @return 结果 + */ + public int deleteOauthClientDetailsByIds(Long[] ids); + + /** + * 通过授权平台查询配置 + * @param type 授权平台类型 + * @return + */ + OauthClientDetails selectOauthClientDetailsByType(@Param("type") Integer type, @Param("tenantId") Long tenantId); + + OauthClientDetails selectOauthClientDetailsByClientId(String clientId); +} diff --git a/xinda-plugs/xinda-oauth/src/main/java/com/xinda/oauth/mapper/OauthCodeMapper.java b/xinda-plugs/xinda-oauth/src/main/java/com/xinda/oauth/mapper/OauthCodeMapper.java new file mode 100644 index 0000000..ab673f9 --- /dev/null +++ b/xinda-plugs/xinda-oauth/src/main/java/com/xinda/oauth/mapper/OauthCodeMapper.java @@ -0,0 +1,62 @@ +package com.xinda.oauth.mapper; + +import com.xinda.oauth.domain.OauthCode; + +import java.util.List; + +/** + * 【请填写功能名称】Mapper接口 + * + * @author kerwincui + * @date 2024-03-20 + */ +public interface OauthCodeMapper +{ + /** + * 查询【请填写功能名称】 + * + * @param code 【请填写功能名称】主键 + * @return 【请填写功能名称】 + */ + public OauthCode selectOauthCodeByCode(String code); + + /** + * 查询【请填写功能名称】列表 + * + * @param oauthCode 【请填写功能名称】 + * @return 【请填写功能名称】集合 + */ + public List selectOauthCodeList(OauthCode oauthCode); + + /** + * 新增【请填写功能名称】 + * + * @param oauthCode 【请填写功能名称】 + * @return 结果 + */ + public int insertOauthCode(OauthCode oauthCode); + + /** + * 修改【请填写功能名称】 + * + * @param oauthCode 【请填写功能名称】 + * @return 结果 + */ + public int updateOauthCode(OauthCode oauthCode); + + /** + * 删除【请填写功能名称】 + * + * @param code 【请填写功能名称】主键 + * @return 结果 + */ + public int deleteOauthCodeByCode(String code); + + /** + * 批量删除【请填写功能名称】 + * + * @param codes 需要删除的数据主键集合 + * @return 结果 + */ + public int deleteOauthCodeByCodes(String[] codes); +} diff --git a/xinda-plugs/xinda-oauth/src/main/java/com/xinda/oauth/service/IOauthApprovalsService.java b/xinda-plugs/xinda-oauth/src/main/java/com/xinda/oauth/service/IOauthApprovalsService.java new file mode 100644 index 0000000..49f0bcd --- /dev/null +++ b/xinda-plugs/xinda-oauth/src/main/java/com/xinda/oauth/service/IOauthApprovalsService.java @@ -0,0 +1,70 @@ +package com.xinda.oauth.service; + +import com.xinda.oauth.domain.OauthApprovals; + +import java.util.List; +import java.util.Map; +import java.util.Set; + +/** + * 【请填写功能名称】Service接口 + * + * @author kerwincui + * @date 2024-03-20 + */ +public interface IOauthApprovalsService +{ + /** + * 查询【请填写功能名称】 + * + * @param userid 【请填写功能名称】主键 + * @return 【请填写功能名称】 + */ + public OauthApprovals selectOauthApprovalsByUserid(String userid); + + /** + * 查询【请填写功能名称】列表 + * + * @param oauthApprovals 【请填写功能名称】 + * @return 【请填写功能名称】集合 + */ + public List selectOauthApprovalsList(OauthApprovals oauthApprovals); + + /** + * 新增【请填写功能名称】 + * + * @param oauthApprovals 【请填写功能名称】 + * @return 结果 + */ + public int insertOauthApprovals(OauthApprovals oauthApprovals); + + /** + * 修改【请填写功能名称】 + * + * @param oauthApprovals 【请填写功能名称】 + * @return 结果 + */ + public int updateOauthApprovals(OauthApprovals oauthApprovals); + + /** + * 批量删除【请填写功能名称】 + * + * @param userids 需要删除的【请填写功能名称】主键集合 + * @return 结果 + */ + public int deleteOauthApprovalsByUserids(String[] userids); + + /** + * 删除【请填写功能名称】信息 + * + * @param userid 【请填写功能名称】主键 + * @return 结果 + */ + public int deleteOauthApprovalsByUserid(String userid); + + boolean checkForPreApproval(Long userId, String clientId, Set requestedScopes); + + boolean updateAfterApproval(Long userId, String clientId, Map scopes); + + List getApproveList(Long userId, String clientId); +} diff --git a/xinda-plugs/xinda-oauth/src/main/java/com/xinda/oauth/service/IOauthClientDetailsService.java b/xinda-plugs/xinda-oauth/src/main/java/com/xinda/oauth/service/IOauthClientDetailsService.java new file mode 100644 index 0000000..d39efdb --- /dev/null +++ b/xinda-plugs/xinda-oauth/src/main/java/com/xinda/oauth/service/IOauthClientDetailsService.java @@ -0,0 +1,70 @@ +package com.xinda.oauth.service; + +import com.xinda.common.core.domain.AjaxResult; +import com.xinda.oauth.domain.OauthClientDetails; + +import java.util.Collection; +import java.util.List; + +/** + * 云云对接Service接口 + * + * @author kerwincui + * @date 2022-02-07 + */ +public interface IOauthClientDetailsService +{ + /** + * 查询云云对接 + * + * @param id 云云对接主键 + * @return 云云对接 + */ + public OauthClientDetails selectOauthClientDetailsById(Long id); + + /** + * 查询云云对接列表 + * + * @param oauthClientDetails 云云对接 + * @return 云云对接集合 + */ + public List selectOauthClientDetailsList(OauthClientDetails oauthClientDetails); + + /** + * 新增云云对接 + * + * @param oauthClientDetails 云云对接 + * @return 结果 + */ + public AjaxResult insertOauthClientDetails(OauthClientDetails oauthClientDetails); + + /** + * 修改云云对接 + * + * @param oauthClientDetails 云云对接 + * @return 结果 + */ + public AjaxResult updateOauthClientDetails(OauthClientDetails oauthClientDetails); + + /** + * 批量删除云云对接 + * + * @param ids 需要删除的云云对接主键集合 + * @return 结果 + */ + public int deleteOauthClientDetailsByIds(Long[] ids); + + /** + * 删除云云对接信息 + * + * @param clientId 云云对接主键 + * @return 结果 + */ + public int deleteOauthClientDetailsByClientId(String clientId); + + default OauthClientDetails validOAuthClientFromCache(String clientId) { + return validOAuthClientFromCache(clientId, null, null, null, null); + } + + OauthClientDetails validOAuthClientFromCache(String clientId, String clientSecret, String grantType, Collection strings, String redirectUri); +} diff --git a/xinda-plugs/xinda-oauth/src/main/java/com/xinda/oauth/service/IOauthCodeService.java b/xinda-plugs/xinda-oauth/src/main/java/com/xinda/oauth/service/IOauthCodeService.java new file mode 100644 index 0000000..fa66633 --- /dev/null +++ b/xinda-plugs/xinda-oauth/src/main/java/com/xinda/oauth/service/IOauthCodeService.java @@ -0,0 +1,64 @@ +package com.xinda.oauth.service; + +import com.xinda.oauth.domain.OauthCode; + +import java.util.List; + +/** + * 【请填写功能名称】Service接口 + * + * @author kerwincui + * @date 2024-03-20 + */ +public interface IOauthCodeService +{ + /** + * 查询【请填写功能名称】 + * + * @param code 【请填写功能名称】主键 + * @return 【请填写功能名称】 + */ + public OauthCode selectOauthCodeByCode(String code); + + /** + * 查询【请填写功能名称】列表 + * + * @param oauthCode 【请填写功能名称】 + * @return 【请填写功能名称】集合 + */ + public List selectOauthCodeList(OauthCode oauthCode); + + /** + * 新增【请填写功能名称】 + * + * @param oauthCode 【请填写功能名称】 + * @return 结果 + */ + public int insertOauthCode(OauthCode oauthCode); + + /** + * 修改【请填写功能名称】 + * + * @param oauthCode 【请填写功能名称】 + * @return 结果 + */ + public int updateOauthCode(OauthCode oauthCode); + + /** + * 批量删除【请填写功能名称】 + * + * @param codes 需要删除的【请填写功能名称】主键集合 + * @return 结果 + */ + public int deleteOauthCodeByCodes(String[] codes); + + /** + * 删除【请填写功能名称】信息 + * + * @param code 【请填写功能名称】主键 + * @return 结果 + */ + public int deleteOauthCodeByCode(String code); + + OauthCode consumeAuthorizationCode(String code); +} diff --git a/xinda-plugs/xinda-oauth/src/main/java/com/xinda/oauth/service/OauthAccessTokenService.java b/xinda-plugs/xinda-oauth/src/main/java/com/xinda/oauth/service/OauthAccessTokenService.java new file mode 100644 index 0000000..65561ea --- /dev/null +++ b/xinda-plugs/xinda-oauth/src/main/java/com/xinda/oauth/service/OauthAccessTokenService.java @@ -0,0 +1,21 @@ +package com.xinda.oauth.service; + +import com.xinda.oauth.domain.OauthAccessToken; +import com.xinda.oauth.domain.OauthClientDetails; + +/** + * @author fastb + * @date 2023-09-01 17:20 + */ +public interface OauthAccessTokenService { + + String selectUserNameByTokenId(String token); + + OauthAccessToken selectByTokenId(String tokenId); + + void updateOpenIdByTokenId(String tokenId, String openUid); + + OauthAccessToken selectByUserName(String userName); + + OauthAccessToken grantAuthorizationCodeForAccessToken(OauthClientDetails client, String code, String redirectUri, String state); +} diff --git a/xinda-plugs/xinda-oauth/src/main/java/com/xinda/oauth/service/impl/OauthAccessTokenServiceImpl.java b/xinda-plugs/xinda-oauth/src/main/java/com/xinda/oauth/service/impl/OauthAccessTokenServiceImpl.java new file mode 100644 index 0000000..4b528ea --- /dev/null +++ b/xinda-plugs/xinda-oauth/src/main/java/com/xinda/oauth/service/impl/OauthAccessTokenServiceImpl.java @@ -0,0 +1,68 @@ +package com.xinda.oauth.service.impl; + +import cn.hutool.core.util.IdUtil; +import com.xinda.oauth.domain.OauthAccessToken; +import com.xinda.oauth.domain.OauthClientDetails; +import com.xinda.oauth.domain.OauthCode; +import com.xinda.oauth.mapper.OauthAccessTokenMapper; +import com.xinda.oauth.service.IOauthClientDetailsService; +import com.xinda.oauth.service.IOauthCodeService; +import com.xinda.oauth.service.OauthAccessTokenService; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.time.LocalDateTime; + +/** + * @author fastb + * @date 2023-09-01 17:20 + */ +@Service +public class OauthAccessTokenServiceImpl implements OauthAccessTokenService { + + @Resource + private OauthAccessTokenMapper oauthAccessTokenMapper; + @Resource + private IOauthCodeService oauthCodeService; + @Resource + private IOauthClientDetailsService oauthClientDetailsService; + + @Override + public String selectUserNameByTokenId(String tokenId) { + return oauthAccessTokenMapper.selectUserNameByTokenId(tokenId); + } + + @Override + public OauthAccessToken selectByTokenId(String tokenId) { + return oauthAccessTokenMapper.selectByTokenId(tokenId); + } + + @Override + public void updateOpenIdByTokenId(String tokenId, String openUid) { + oauthAccessTokenMapper.updateOpenIdByTokenId(tokenId, openUid); + } + + @Override + public OauthAccessToken selectByUserName(String userName) { + return oauthAccessTokenMapper.selectByUserName(userName); + } + + @Override + public OauthAccessToken grantAuthorizationCodeForAccessToken(OauthClientDetails client, String code, String redirectUri, String state) { + OauthCode oauthCode = oauthCodeService.consumeAuthorizationCode(code); + oauthAccessTokenMapper.deleteByUserId(oauthCode.getUserId()); + OauthAccessToken oauthAccessToken = new OauthAccessToken(); + oauthAccessToken.setTokenId(generateRefreshToken()); + oauthAccessToken.setClientId(client.getClientId()); + oauthAccessToken.setUserId(oauthCode.getUserId()); + oauthAccessToken.setRefreshToken(generateRefreshToken()); + oauthAccessToken.setExpiresTime(LocalDateTime.now().plusSeconds(client.getAccessTokenValidity())); + oauthAccessTokenMapper.insertOauthAccessToken(oauthAccessToken); + return oauthAccessToken; + } + + private static String generateRefreshToken() { + return IdUtil.fastSimpleUUID(); + } + +} diff --git a/xinda-plugs/xinda-oauth/src/main/java/com/xinda/oauth/service/impl/OauthApprovalsServiceImpl.java b/xinda-plugs/xinda-oauth/src/main/java/com/xinda/oauth/service/impl/OauthApprovalsServiceImpl.java new file mode 100644 index 0000000..83051b2 --- /dev/null +++ b/xinda-plugs/xinda-oauth/src/main/java/com/xinda/oauth/service/impl/OauthApprovalsServiceImpl.java @@ -0,0 +1,171 @@ +package com.xinda.oauth.service.impl; + +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.lang.Assert; +import com.xinda.common.utils.StringUtils; +import com.xinda.common.utils.date.DateUtils; +import com.xinda.oauth.domain.OauthApprovals; +import com.xinda.oauth.domain.OauthClientDetails; +import com.xinda.oauth.mapper.OauthApprovalsMapper; +import com.xinda.oauth.service.IOauthApprovalsService; +import com.xinda.oauth.service.IOauthClientDetailsService; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.time.LocalDateTime; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.stream.Collectors; + +/** + * 【请填写功能名称】Service业务层处理 + * + * @author kerwincui + * @date 2024-03-20 + */ +@Service +public class OauthApprovalsServiceImpl implements IOauthApprovalsService +{ + /** + * 批准的过期时间,默认 30 天 + */ + private static final Integer TIMEOUT = 30 * 24 * 60 * 60; // 单位:秒 + @Resource + private OauthApprovalsMapper oauthApprovalsMapper; + @Resource + private IOauthClientDetailsService oauthClientDetailsService; + + /** + * 查询【请填写功能名称】 + * + * @param userid 【请填写功能名称】主键 + * @return 【请填写功能名称】 + */ + @Override + public OauthApprovals selectOauthApprovalsByUserid(String userid) + { + return oauthApprovalsMapper.selectOauthApprovalsByUserid(userid); + } + + /** + * 查询【请填写功能名称】列表 + * + * @param oauthApprovals 【请填写功能名称】 + * @return 【请填写功能名称】 + */ + @Override + public List selectOauthApprovalsList(OauthApprovals oauthApprovals) + { + return oauthApprovalsMapper.selectOauthApprovalsList(oauthApprovals); + } + + /** + * 新增【请填写功能名称】 + * + * @param oauthApprovals 【请填写功能名称】 + * @return 结果 + */ + @Override + public int insertOauthApprovals(OauthApprovals oauthApprovals) + { + return oauthApprovalsMapper.insertOauthApprovals(oauthApprovals); + } + + /** + * 修改【请填写功能名称】 + * + * @param oauthApprovals 【请填写功能名称】 + * @return 结果 + */ + @Override + public int updateOauthApprovals(OauthApprovals oauthApprovals) + { + return oauthApprovalsMapper.updateOauthApprovals(oauthApprovals); + } + + /** + * 批量删除【请填写功能名称】 + * + * @param userids 需要删除的【请填写功能名称】主键 + * @return 结果 + */ + @Override + public int deleteOauthApprovalsByUserids(String[] userids) + { + return oauthApprovalsMapper.deleteOauthApprovalsByUserids(userids); + } + + /** + * 删除【请填写功能名称】信息 + * + * @param userid 【请填写功能名称】主键 + * @return 结果 + */ + @Override + public int deleteOauthApprovalsByUserid(String userid) + { + return oauthApprovalsMapper.deleteOauthApprovalsByUserid(userid); + } + + @Override + public boolean checkForPreApproval(Long userId, String clientId, Set requestedScopes) { + OauthClientDetails oauthClientDetails = oauthClientDetailsService.validOAuthClientFromCache(clientId); + Assert.notNull(oauthClientDetails, "客户端不能为空"); // 防御性编程 + List strings = StringUtils.str2List(oauthClientDetails.getScope(), ",", true, true); + if (CollUtil.containsAll(strings, requestedScopes)) { + // gh-877 - if all scopes are auto approved, approvals still need to be added to the approval store. + LocalDateTime expireTime = LocalDateTime.now().plusSeconds(TIMEOUT); + for (String scope : requestedScopes) { + saveApprove(userId, clientId, scope, true, expireTime); + } + return true; + } + + // 第二步,算上用户已经批准的授权。如果 scopes 都包含,则返回 true + List approvalsList = this.getApproveList(userId, clientId); + Set scopes = approvalsList.stream().filter(a -> "true".equals(a.getStatus())).map(OauthApprovals::getScope).collect(Collectors.toSet()); + return CollUtil.containsAll(scopes, requestedScopes); + } + + @Override + public boolean updateAfterApproval(Long userId, String clientId, Map requestedScopes) { + // 如果 requestedScopes 为空,说明没有要求,则返回 true 通过 + if (CollUtil.isEmpty(requestedScopes)) { + return true; + } + + // 更新批准的信息 + boolean success = false; // 需要至少有一个同意 + LocalDateTime expireTime = LocalDateTime.now().plusSeconds(TIMEOUT); + for (Map.Entry entry : requestedScopes.entrySet()) { + if (entry.getValue()) { + success = true; + } + saveApprove(userId, clientId, entry.getKey(), entry.getValue(), expireTime); + } + return success; + } + + public List getApproveList(Long userId, String clientId) { + List approvalsList = oauthApprovalsMapper.selectListByUserIdAndClientId( + userId, clientId); + approvalsList.removeIf(o -> DateUtils.isExpired(o.getExpiresat())); + return approvalsList; + } + + private void saveApprove(Long userId, String clientId, String scope, boolean b, LocalDateTime expireTime) { + // 先更新 + OauthApprovals oauthApprovals = new OauthApprovals(); + oauthApprovals.setUserid(userId.toString()); + oauthApprovals.setClientid(clientId); + oauthApprovals.setScope(scope); + oauthApprovals.setStatus(String.valueOf(b)); + oauthApprovals.setExpiresat(expireTime); + if (oauthApprovalsMapper.update(oauthApprovals) == 1) { + return; + } + // 失败,则说明不存在,进行更新 + oauthApprovalsMapper.insertOauthApprovals(oauthApprovals); + } +} diff --git a/xinda-plugs/xinda-oauth/src/main/java/com/xinda/oauth/service/impl/OauthClientDetailsServiceImpl.java b/xinda-plugs/xinda-oauth/src/main/java/com/xinda/oauth/service/impl/OauthClientDetailsServiceImpl.java new file mode 100644 index 0000000..32437bb --- /dev/null +++ b/xinda-plugs/xinda-oauth/src/main/java/com/xinda/oauth/service/impl/OauthClientDetailsServiceImpl.java @@ -0,0 +1,158 @@ +package com.xinda.oauth.service.impl; + +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; +import com.xinda.common.core.domain.AjaxResult; +import com.xinda.common.core.domain.entity.SysUser; +import com.xinda.common.exception.ServiceException; +import com.xinda.oauth.domain.OauthClientDetails; +import com.xinda.oauth.mapper.OauthClientDetailsMapper; +import com.xinda.oauth.service.IOauthClientDetailsService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.Collection; +import java.util.List; +import java.util.Objects; + +import static com.xinda.common.utils.SecurityUtils.getLoginUser; + +/** + * 云云对接Service业务层处理 + * + * @author kerwincui + * @date 2022-02-07 + */ +@Service +public class OauthClientDetailsServiceImpl implements IOauthClientDetailsService +{ + @Autowired + private OauthClientDetailsMapper oauthClientDetailsMapper; + + /** + * 查询云云对接 + * + * @param id 云云对接主键 + * @return 云云对接 + */ + @Override + public OauthClientDetails selectOauthClientDetailsById(Long id) + { + return oauthClientDetailsMapper.selectOauthClientDetailsById(id); + } + + /** + * 查询云云对接列表 + * + * @param oauthClientDetails 云云对接 + * @return 云云对接 + */ + @Override + public List selectOauthClientDetailsList(OauthClientDetails oauthClientDetails) + { + // 查询所属机构 + SysUser user = getLoginUser().getUser(); + oauthClientDetails.setTenantId(user.getDept().getDeptUserId()); + return oauthClientDetailsMapper.selectOauthClientDetailsList(oauthClientDetails); + } + + /** + * 新增云云对接 + * + * @param oauthClientDetails 云云对接 + * @return 结果 + */ + @Override + public AjaxResult insertOauthClientDetails(OauthClientDetails oauthClientDetails) + { + SysUser user = getLoginUser().getUser(); + if (null == user.getDept() || null == user.getDept().getDeptUserId()) { + throw new ServiceException("只允许租户配置"); + } + oauthClientDetails.setTenantId(user.getDept().getDeptUserId()); + oauthClientDetails.setTenantName(user.getDept().getDeptUserName()); + OauthClientDetails oauthClientDetails1 = oauthClientDetailsMapper.selectOauthClientDetailsByType(oauthClientDetails.getType(), oauthClientDetails.getTenantId()); + if (oauthClientDetails1 != null) { + return AjaxResult.error("同一个授权平台只能配置一条信息,请勿重复配置"); + } + OauthClientDetails oauthClientDetails2 = oauthClientDetailsMapper.selectOauthClientDetailsByClientId(oauthClientDetails.getClientId()); + if (oauthClientDetails2 != null) { + return AjaxResult.error("客户端id:" + oauthClientDetails.getClientId() + "已存在"); + } + return oauthClientDetailsMapper.insertOauthClientDetails(oauthClientDetails) > 0 ? AjaxResult.success() : AjaxResult.error(); + } + + /** + * 修改云云对接 + * + * @param oauthClientDetails 云云对接 + * @return 结果 + */ + @Override + public AjaxResult updateOauthClientDetails(OauthClientDetails oauthClientDetails) + { + OauthClientDetails oauthClientDetails1 = oauthClientDetailsMapper.selectOauthClientDetailsByClientId(oauthClientDetails.getClientId()); + if (oauthClientDetails1 != null && !Objects.equals(oauthClientDetails1.getId(), oauthClientDetails.getId())) { + return AjaxResult.error("客户端id:" + oauthClientDetails.getClientId() + "已存在"); + } + return oauthClientDetailsMapper.updateOauthClientDetails(oauthClientDetails) > 0 ? AjaxResult.success() : AjaxResult.error(); + } + + /** + * 批量删除云云对接 + * + * @param ids 需要删除的云云对接主键 + * @return 结果 + */ + @Override + public int deleteOauthClientDetailsByIds(Long[] ids) + { + return oauthClientDetailsMapper.deleteOauthClientDetailsByIds(ids); + } + + /** + * 删除云云对接信息 + * + * @param clientId 云云对接主键 + * @return 结果 + */ + @Override + public int deleteOauthClientDetailsByClientId(String clientId) + { + return oauthClientDetailsMapper.deleteOauthClientDetailsByClientId(clientId); + } + + @Override + public OauthClientDetails validOAuthClientFromCache(String clientId, String clientSecret, String grantType, Collection scopes, String redirectUri) { + // 校验客户端存在、且开启 + OauthClientDetails client = this.getOAuth2ClientFromCache(clientId); + if (client == null) { + throw new ServiceException("OAuth2 客户端不存在"); + } + if (0 != client.getStatus()) { + throw new ServiceException("OAuth2 客户端已禁用"); + } + + // 校验客户端密钥 + if (StrUtil.isNotEmpty(clientSecret) && ObjectUtil.notEqual(client.getClientSecret(), clientSecret)) { + throw new ServiceException("无效 client_secret"); + } + // 校验授权方式 +// if (StrUtil.isNotEmpty(grantType) && !StringUtils.contains(client.getAuthorizedGrantTypes(), grantType)) { +// throw new ServiceException("不支持该授权类型"); +// } + // 校验授权范围 +// if (CollUtil.isNotEmpty(scopes) && !CollUtil.containsAll(client.getScope(), scopes)) { +// throw new ServiceException("授权范围过大"); +// } + // 校验回调地址 + if (StrUtil.isNotEmpty(redirectUri) && !redirectUri.equals(client.getWebServerRedirectUri())) { + throw new ServiceException("无效 redirect_uri:" + redirectUri); + } + return client; + } + + private OauthClientDetails getOAuth2ClientFromCache(String clientId) { + return oauthClientDetailsMapper.selectOauthClientDetailsByClientId(clientId); + } +} diff --git a/xinda-plugs/xinda-oauth/src/main/java/com/xinda/oauth/service/impl/OauthCodeServiceImpl.java b/xinda-plugs/xinda-oauth/src/main/java/com/xinda/oauth/service/impl/OauthCodeServiceImpl.java new file mode 100644 index 0000000..0459af5 --- /dev/null +++ b/xinda-plugs/xinda-oauth/src/main/java/com/xinda/oauth/service/impl/OauthCodeServiceImpl.java @@ -0,0 +1,108 @@ +package com.xinda.oauth.service.impl; + +import com.xinda.common.exception.ServiceException; +import com.xinda.oauth.domain.OauthCode; +import com.xinda.oauth.mapper.OauthCodeMapper; +import com.xinda.oauth.service.IOauthCodeService; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.List; + +/** + * 【请填写功能名称】Service业务层处理 + * + * @author kerwincui + * @date 2024-03-20 + */ +@Service +public class OauthCodeServiceImpl implements IOauthCodeService +{ + @Resource + private OauthCodeMapper oauthCodeMapper; + + /** + * 查询【请填写功能名称】 + * + * @param code 【请填写功能名称】主键 + * @return 【请填写功能名称】 + */ + @Override + public OauthCode selectOauthCodeByCode(String code) + { + return oauthCodeMapper.selectOauthCodeByCode(code); + } + + /** + * 查询【请填写功能名称】列表 + * + * @param oauthCode 【请填写功能名称】 + * @return 【请填写功能名称】 + */ + @Override + public List selectOauthCodeList(OauthCode oauthCode) + { + return oauthCodeMapper.selectOauthCodeList(oauthCode); + } + + /** + * 新增【请填写功能名称】 + * + * @param oauthCode 【请填写功能名称】 + * @return 结果 + */ + @Override + public int insertOauthCode(OauthCode oauthCode) + { + return oauthCodeMapper.insertOauthCode(oauthCode); + } + + /** + * 修改【请填写功能名称】 + * + * @param oauthCode 【请填写功能名称】 + * @return 结果 + */ + @Override + public int updateOauthCode(OauthCode oauthCode) + { + return oauthCodeMapper.updateOauthCode(oauthCode); + } + + /** + * 批量删除【请填写功能名称】 + * + * @param codes 需要删除的【请填写功能名称】主键 + * @return 结果 + */ + @Override + public int deleteOauthCodeByCodes(String[] codes) + { + return oauthCodeMapper.deleteOauthCodeByCodes(codes); + } + + /** + * 删除【请填写功能名称】信息 + * + * @param code 【请填写功能名称】主键 + * @return 结果 + */ + @Override + public int deleteOauthCodeByCode(String code) + { + return oauthCodeMapper.deleteOauthCodeByCode(code); + } + + @Override + public OauthCode consumeAuthorizationCode(String code) { + OauthCode oauthCode = this.selectOauthCodeByCode(code); + if (oauthCode == null) { + throw new ServiceException("code 不存在"); + } +// if (DateUtils.isExpired(codeDO.getExpiresTime())) { +// throw exception(OAUTH2_CODE_EXPIRE); +// } + this.deleteOauthCodeByCode(code); + return oauthCode; + } +} diff --git a/xinda-plugs/xinda-oauth/src/main/java/com/xinda/oauth/utils/HttpUtils.java b/xinda-plugs/xinda-oauth/src/main/java/com/xinda/oauth/utils/HttpUtils.java new file mode 100644 index 0000000..c19e2e4 --- /dev/null +++ b/xinda-plugs/xinda-oauth/src/main/java/com/xinda/oauth/utils/HttpUtils.java @@ -0,0 +1,126 @@ +package com.xinda.oauth.utils; + +import cn.hutool.core.codec.Base64; +import cn.hutool.core.map.TableMap; +import cn.hutool.core.net.url.UrlBuilder; +import cn.hutool.core.util.ReflectUtil; +import cn.hutool.core.util.StrUtil; +import org.springframework.util.StringUtils; +import org.springframework.web.util.UriComponents; +import org.springframework.web.util.UriComponentsBuilder; + +import javax.servlet.http.HttpServletRequest; +import java.net.URI; +import java.nio.charset.Charset; +import java.util.Map; + +/** + * HTTP 工具类 + * + * @author 芋道源码 + */ +public class HttpUtils { + + @SuppressWarnings("unchecked") + public static String replaceUrlQuery(String url, String key, String value) { + UrlBuilder builder = UrlBuilder.of(url, Charset.defaultCharset()); + // 先移除 + TableMap query = (TableMap) + ReflectUtil.getFieldValue(builder.getQuery(), "query"); + query.remove(key); + // 后添加 + builder.addQuery(key, value); + return builder.build(); + } + + private String append(String base, Map query, boolean fragment) { + return append(base, query, null, fragment); + } + + /** + * 拼接 URL + * + * copy from Spring Security OAuth2 的 AuthorizationEndpoint 类的 append 方法 + * + * @param base 基础 URL + * @param query 查询参数 + * @param keys query 的 key,对应的原本的 key 的映射。例如说 query 里有个 key 是 xx,实际它的 key 是 extra_xx,则通过 keys 里添加这个映射 + * @param fragment URL 的 fragment,即拼接到 # 中 + * @return 拼接后的 URL + */ + public static String append(String base, Map query, Map keys, boolean fragment) { + UriComponentsBuilder template = UriComponentsBuilder.newInstance(); + UriComponentsBuilder builder = UriComponentsBuilder.fromUriString(base); + URI redirectUri; + try { + // assume it's encoded to start with (if it came in over the wire) + redirectUri = builder.build(true).toUri(); + } catch (Exception e) { + // ... but allow client registrations to contain hard-coded non-encoded values + redirectUri = builder.build().toUri(); + builder = UriComponentsBuilder.fromUri(redirectUri); + } + template.scheme(redirectUri.getScheme()).port(redirectUri.getPort()).host(redirectUri.getHost()) + .userInfo(redirectUri.getUserInfo()).path(redirectUri.getPath()); + + if (fragment) { + StringBuilder values = new StringBuilder(); + if (redirectUri.getFragment() != null) { + String append = redirectUri.getFragment(); + values.append(append); + } + for (String key : query.keySet()) { + if (values.length() > 0) { + values.append("&"); + } + String name = key; + if (keys != null && keys.containsKey(key)) { + name = keys.get(key); + } + values.append(name).append("={").append(key).append("}"); + } + if (values.length() > 0) { + template.fragment(values.toString()); + } + UriComponents encoded = template.build().expand(query).encode(); + builder.fragment(encoded.getFragment()); + } else { + for (String key : query.keySet()) { + String name = key; + if (keys != null && keys.containsKey(key)) { + name = keys.get(key); + } + template.queryParam(name, "{" + key + "}"); + } + template.fragment(redirectUri.getFragment()); + UriComponents encoded = template.build().expand(query).encode(); + builder.query(encoded.getQuery()); + } + return builder.build().toUriString(); + } + + public static String[] obtainBasicAuthorization(HttpServletRequest request) { + String clientId; + String clientSecret; + // 先从 Header 中获取 + String authorization = request.getHeader("Authorization"); + authorization = StrUtil.subAfter(authorization, "Basic ", true); + if (StringUtils.hasText(authorization)) { + authorization = Base64.decodeStr(authorization); + clientId = StrUtil.subBefore(authorization, ":", false); + clientSecret = StrUtil.subAfter(authorization, ":", false); + // 再从 Param 中获取 + } else { + clientId = request.getParameter("client_id"); + clientSecret = request.getParameter("client_secret"); + } + + // 如果两者非空,则返回 + if (StrUtil.isNotEmpty(clientId) && StrUtil.isNotEmpty(clientSecret)) { + return new String[]{clientId, clientSecret}; + } + return null; + } + + +} diff --git a/xinda-plugs/xinda-oauth/src/main/java/com/xinda/oauth/utils/OAuth2Utils.java b/xinda-plugs/xinda-oauth/src/main/java/com/xinda/oauth/utils/OAuth2Utils.java new file mode 100644 index 0000000..74bf7c3 --- /dev/null +++ b/xinda-plugs/xinda-oauth/src/main/java/com/xinda/oauth/utils/OAuth2Utils.java @@ -0,0 +1,101 @@ +package com.xinda.oauth.utils; + +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.date.LocalDateTimeUtil; +import cn.hutool.core.util.StrUtil; + +import java.time.LocalDateTime; +import java.time.temporal.ChronoUnit; +import java.util.*; + +/** + * OAuth2 相关的工具类 + * + * @author 芋道源码 + */ +public class OAuth2Utils { + + /** + * 构建授权码模式下,重定向的 URI + * + * copy from Spring Security OAuth2 的 AuthorizationEndpoint 类的 getSuccessfulRedirect 方法 + * + * @param redirectUri 重定向 URI + * @param authorizationCode 授权码 + * @param state 状态 + * @return 授权码模式下的重定向 URI + */ + public static String buildAuthorizationCodeRedirectUri(String redirectUri, String authorizationCode, String state) { + Map query = new LinkedHashMap<>(); + query.put("code", authorizationCode); + if (state != null) { + query.put("state", state); + } + return HttpUtils.append(redirectUri, query, null, false); + } + + /** + * 构建简化模式下,重定向的 URI + * + * copy from Spring Security OAuth2 的 AuthorizationEndpoint 类的 appendAccessToken 方法 + * + * @param redirectUri 重定向 URI + * @param accessToken 访问令牌 + * @param state 状态 + * @param expireTime 过期时间 + * @param scopes 授权范围 + * @param additionalInformation 附加信息 + * @return 简化授权模式下的重定向 URI + */ + public static String buildImplicitRedirectUri(String redirectUri, String accessToken, String state, LocalDateTime expireTime, + Collection scopes, Map additionalInformation) { + Map vars = new LinkedHashMap(); + Map keys = new HashMap(); + vars.put("access_token", accessToken); + vars.put("token_type", "bearer"); + if (state != null) { + vars.put("state", state); + } + if (expireTime != null) { + vars.put("expires_in", getExpiresIn(expireTime)); + } + if (CollUtil.isNotEmpty(scopes)) { + vars.put("scope", buildScopeStr(scopes)); + } + if (CollUtil.isNotEmpty(additionalInformation)) { + for (String key : additionalInformation.keySet()) { + Object value = additionalInformation.get(key); + if (value != null) { + keys.put("extra_" + key, key); + vars.put("extra_" + key, value); + } + } + } + // Do not include the refresh token (even if there is one) + return HttpUtils.append(redirectUri, vars, keys, true); + } + + public static String buildUnsuccessfulRedirect(String redirectUri, String responseType, String state, + String error, String description) { + Map query = new LinkedHashMap(); + query.put("error", error); + query.put("error_description", description); + if (state != null) { + query.put("state", state); + } + return HttpUtils.append(redirectUri, query, null, !responseType.contains("code")); + } + + public static long getExpiresIn(LocalDateTime expireTime) { + return LocalDateTimeUtil.between(LocalDateTime.now(), expireTime, ChronoUnit.SECONDS); + } + + public static String buildScopeStr(Collection scopes) { + return CollUtil.join(scopes, " "); + } + + public static List buildScopes(String scope) { + return StrUtil.split(scope, ' '); + } + +} diff --git a/xinda-plugs/xinda-oauth/src/main/java/com/xinda/oauth/vo/OAuth2OpenAccessTokenRespVO.java b/xinda-plugs/xinda-oauth/src/main/java/com/xinda/oauth/vo/OAuth2OpenAccessTokenRespVO.java new file mode 100644 index 0000000..a085cb0 --- /dev/null +++ b/xinda-plugs/xinda-oauth/src/main/java/com/xinda/oauth/vo/OAuth2OpenAccessTokenRespVO.java @@ -0,0 +1,27 @@ +package com.xinda.oauth.vo; + +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@NoArgsConstructor +@AllArgsConstructor +public class OAuth2OpenAccessTokenRespVO { + + @JsonProperty("access_token") + private String accessToken; + + @JsonProperty("refresh_token") + private String refreshToken; + + @JsonProperty("token_type") + private String tokenType; + + @JsonProperty("expires_in") + private Long expiresIn; + + private String scope; + +} diff --git a/xinda-plugs/xinda-oauth/src/main/java/com/xinda/oauth/vo/OAuth2OpenAuthorizeInfoRespVO.java b/xinda-plugs/xinda-oauth/src/main/java/com/xinda/oauth/vo/OAuth2OpenAuthorizeInfoRespVO.java new file mode 100644 index 0000000..7cd1b34 --- /dev/null +++ b/xinda-plugs/xinda-oauth/src/main/java/com/xinda/oauth/vo/OAuth2OpenAuthorizeInfoRespVO.java @@ -0,0 +1,33 @@ +package com.xinda.oauth.vo; + +import com.xinda.common.core.text.KeyValue; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + +@Data +@NoArgsConstructor +@AllArgsConstructor +public class OAuth2OpenAuthorizeInfoRespVO { + + /** + * 客户端 + */ + private Client client; + + private List> scopes; + + @Data + @NoArgsConstructor + @AllArgsConstructor + public static class Client { + + private String name; + + private String logo; + + } + +} diff --git a/xinda-plugs/xinda-oauth/src/main/java/com/xinda/oauth/vo/Oauth2AccessTokenReqVO.java b/xinda-plugs/xinda-oauth/src/main/java/com/xinda/oauth/vo/Oauth2AccessTokenReqVO.java new file mode 100644 index 0000000..8e1411d --- /dev/null +++ b/xinda-plugs/xinda-oauth/src/main/java/com/xinda/oauth/vo/Oauth2AccessTokenReqVO.java @@ -0,0 +1,27 @@ +package com.xinda.oauth.vo; + +import com.alibaba.fastjson2.annotation.JSONField; +import lombok.Data; + +/** + * @author fastb + * @version 1.0 + * @description: TODO + * @date 2024-03-21 11:13 + */ +@Data +public class Oauth2AccessTokenReqVO { + + @JSONField(name = "grant_type") + private String grantType; + + private String code; + + @JSONField(name = "redirect_uri") + private String redirectUri; + + private String scope; + + private String state; + +} diff --git a/xinda-plugs/xinda-oauth/src/main/resources/mapper/OauthAccessTokenMapper.xml b/xinda-plugs/xinda-oauth/src/main/resources/mapper/OauthAccessTokenMapper.xml new file mode 100644 index 0000000..266c85f --- /dev/null +++ b/xinda-plugs/xinda-oauth/src/main/resources/mapper/OauthAccessTokenMapper.xml @@ -0,0 +1,78 @@ + + + + + + + + + + + + + + + + + + + select token_id, token, authentication_id, user_name, client_id, authentication, refresh_token, open_id, user_id, expires_time from oauth_access_token + + + + update oauth_access_token + set open_id = #{openUid} + where token_id = #{tokenId} + + + + delete + from oauth_access_token + where user_id = #{userId} + + + + + + + + + + insert into oauth_access_token + + token_id, + token, + authentication_id, + user_name, + client_id, + authentication, + refresh_token, + open_id, + user_id, + expires_time, + + + #{tokenId}, + #{token}, + #{authenticationId}, + #{userName}, + #{clientId}, + #{authentication}, + #{refreshToken}, + #{openId}, + #{userId}, + #{expiresTime}, + + + + diff --git a/xinda-plugs/xinda-oauth/src/main/resources/mapper/OauthApprovalsMapper.xml b/xinda-plugs/xinda-oauth/src/main/resources/mapper/OauthApprovalsMapper.xml new file mode 100644 index 0000000..f845b4b --- /dev/null +++ b/xinda-plugs/xinda-oauth/src/main/resources/mapper/OauthApprovalsMapper.xml @@ -0,0 +1,94 @@ + + + + + + + + + + + + + + + select userId, clientId, scope, status, expiresAt, lastModifiedAt from oauth_approvals + + + + + + + + + + insert into oauth_approvals + + userId, + clientId, + scope, + status, + expiresAt, + lastModifiedAt, + + + #{userid}, + #{clientid}, + #{scope}, + #{status}, + #{expiresat}, + #{lastmodifiedat}, + + + + + update oauth_approvals + + clientId = #{clientid}, + scope = #{scope}, + status = #{status}, + expiresAt = #{expiresat}, + lastModifiedAt = #{lastmodifiedat}, + + where userId = #{userid} + + + update oauth_approvals + set status = #{status}, + expiresat = #{expiresat} + where userid = #{userid} + and clientid = #{clientid} + and scope = #{scope} + + + + delete from oauth_approvals where userId = #{userid} + + + + delete from oauth_approvals where userId in + + #{userid} + + + diff --git a/xinda-plugs/xinda-oauth/src/main/resources/mapper/OauthClientDetailsMapper.xml b/xinda-plugs/xinda-oauth/src/main/resources/mapper/OauthClientDetailsMapper.xml new file mode 100644 index 0000000..75d3c3f --- /dev/null +++ b/xinda-plugs/xinda-oauth/src/main/resources/mapper/OauthClientDetailsMapper.xml @@ -0,0 +1,135 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + select id, client_id, resource_ids, client_secret, scope, authorized_grant_types, web_server_redirect_uri, authorities, access_token_validity, refresh_token_validity, additional_information, autoapprove, type, status, icon, cloud_skill_id,tenant_id, tenant_name from oauth_client_details + + + + + + + + + + + + insert into oauth_client_details + + client_id, + resource_ids, + client_secret, + scope, + authorized_grant_types, + web_server_redirect_uri, + authorities, + access_token_validity, + refresh_token_validity, + additional_information, + autoapprove, + type, + status, + icon, + cloud_skill_id, + tenant_id, + tenant_name, + + + #{clientId}, + #{resourceIds}, + #{clientSecret}, + #{scope}, + #{authorizedGrantTypes}, + #{webServerRedirectUri}, + #{authorities}, + #{accessTokenValidity}, + #{refreshTokenValidity}, + #{additionalInformation}, + #{autoapprove}, + #{type}, + #{status}, + #{icon}, + #{cloudSkillId}, + #{tenantId}, + #{tenantName}, + + + + + update oauth_client_details + + client_id = #{clientId}, + resource_ids = #{resourceIds}, + client_secret = #{clientSecret}, + scope = #{scope}, + authorized_grant_types = #{authorizedGrantTypes}, + web_server_redirect_uri = #{webServerRedirectUri}, + authorities = #{authorities}, + + + access_token_validity = #{accessTokenValidity}, + refresh_token_validity = #{refreshTokenValidity}, + additional_information = #{additionalInformation}, + autoapprove = #{autoapprove}, + type = #{type}, + status = #{status}, + icon = #{icon}, + cloud_skill_id = #{cloudSkillId}, + + where id = #{id} + + + + delete from oauth_client_details where client_id = #{clientId} + + + + delete from oauth_client_details where id in + + #{id} + + + diff --git a/xinda-plugs/xinda-oauth/src/main/resources/mapper/OauthCodeMapper.xml b/xinda-plugs/xinda-oauth/src/main/resources/mapper/OauthCodeMapper.xml new file mode 100644 index 0000000..38a5fea --- /dev/null +++ b/xinda-plugs/xinda-oauth/src/main/resources/mapper/OauthCodeMapper.xml @@ -0,0 +1,64 @@ + + + + + + + + + + + + select code, authentication, user_id from oauth_code + + + + + + + + insert into oauth_code + + code, + authentication, + user_id, + + + #{code}, + #{authentication}, + #{userId}, + + + + + update oauth_code + + authentication = #{authentication}, + user_id = #{userId}, + + where code = #{code} + + + + delete from oauth_code where code = #{code} + + + + delete from oauth_code where code in + + #{code} + + + diff --git a/xinda-plugs/xinda-oauth/src/main/resources/static/oauth/css/bootstrap-theme.css b/xinda-plugs/xinda-oauth/src/main/resources/static/oauth/css/bootstrap-theme.css new file mode 100644 index 0000000..ea33f76 --- /dev/null +++ b/xinda-plugs/xinda-oauth/src/main/resources/static/oauth/css/bootstrap-theme.css @@ -0,0 +1,587 @@ +/*! + * Bootstrap v3.4.1 (https://getbootstrap.com/) + * Copyright 2011-2019 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + */ +.btn-default, +.btn-primary, +.btn-success, +.btn-info, +.btn-warning, +.btn-danger { + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.2); + -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 1px rgba(0, 0, 0, 0.075); + box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 1px rgba(0, 0, 0, 0.075); +} +.btn-default:active, +.btn-primary:active, +.btn-success:active, +.btn-info:active, +.btn-warning:active, +.btn-danger:active, +.btn-default.active, +.btn-primary.active, +.btn-success.active, +.btn-info.active, +.btn-warning.active, +.btn-danger.active { + -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); +} +.btn-default.disabled, +.btn-primary.disabled, +.btn-success.disabled, +.btn-info.disabled, +.btn-warning.disabled, +.btn-danger.disabled, +.btn-default[disabled], +.btn-primary[disabled], +.btn-success[disabled], +.btn-info[disabled], +.btn-warning[disabled], +.btn-danger[disabled], +fieldset[disabled] .btn-default, +fieldset[disabled] .btn-primary, +fieldset[disabled] .btn-success, +fieldset[disabled] .btn-info, +fieldset[disabled] .btn-warning, +fieldset[disabled] .btn-danger { + -webkit-box-shadow: none; + box-shadow: none; +} +.btn-default .badge, +.btn-primary .badge, +.btn-success .badge, +.btn-info .badge, +.btn-warning .badge, +.btn-danger .badge { + text-shadow: none; +} +.btn:active, +.btn.active { + background-image: none; +} +.btn-default { + background-image: -webkit-linear-gradient(top, #fff 0%, #e0e0e0 100%); + background-image: -o-linear-gradient(top, #fff 0%, #e0e0e0 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#fff), to(#e0e0e0)); + background-image: linear-gradient(to bottom, #fff 0%, #e0e0e0 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe0e0e0', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); + background-repeat: repeat-x; + border-color: #dbdbdb; + text-shadow: 0 1px 0 #fff; + border-color: #ccc; +} +.btn-default:hover, +.btn-default:focus { + background-color: #e0e0e0; + background-position: 0 -15px; +} +.btn-default:active, +.btn-default.active { + background-color: #e0e0e0; + border-color: #dbdbdb; +} +.btn-default.disabled, +.btn-default[disabled], +fieldset[disabled] .btn-default, +.btn-default.disabled:hover, +.btn-default[disabled]:hover, +fieldset[disabled] .btn-default:hover, +.btn-default.disabled:focus, +.btn-default[disabled]:focus, +fieldset[disabled] .btn-default:focus, +.btn-default.disabled.focus, +.btn-default[disabled].focus, +fieldset[disabled] .btn-default.focus, +.btn-default.disabled:active, +.btn-default[disabled]:active, +fieldset[disabled] .btn-default:active, +.btn-default.disabled.active, +.btn-default[disabled].active, +fieldset[disabled] .btn-default.active { + background-color: #e0e0e0; + background-image: none; +} +.btn-primary { + background-image: -webkit-linear-gradient(top, #337ab7 0%, #265a88 100%); + background-image: -o-linear-gradient(top, #337ab7 0%, #265a88 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#265a88)); + background-image: linear-gradient(to bottom, #337ab7 0%, #265a88 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff265a88', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); + background-repeat: repeat-x; + border-color: #245580; +} +.btn-primary:hover, +.btn-primary:focus { + background-color: #265a88; + background-position: 0 -15px; +} +.btn-primary:active, +.btn-primary.active { + background-color: #265a88; + border-color: #245580; +} +.btn-primary.disabled, +.btn-primary[disabled], +fieldset[disabled] .btn-primary, +.btn-primary.disabled:hover, +.btn-primary[disabled]:hover, +fieldset[disabled] .btn-primary:hover, +.btn-primary.disabled:focus, +.btn-primary[disabled]:focus, +fieldset[disabled] .btn-primary:focus, +.btn-primary.disabled.focus, +.btn-primary[disabled].focus, +fieldset[disabled] .btn-primary.focus, +.btn-primary.disabled:active, +.btn-primary[disabled]:active, +fieldset[disabled] .btn-primary:active, +.btn-primary.disabled.active, +.btn-primary[disabled].active, +fieldset[disabled] .btn-primary.active { + background-color: #265a88; + background-image: none; +} +.btn-success { + background-image: -webkit-linear-gradient(top, #5cb85c 0%, #419641 100%); + background-image: -o-linear-gradient(top, #5cb85c 0%, #419641 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#5cb85c), to(#419641)); + background-image: linear-gradient(to bottom, #5cb85c 0%, #419641 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff419641', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); + background-repeat: repeat-x; + border-color: #3e8f3e; +} +.btn-success:hover, +.btn-success:focus { + background-color: #419641; + background-position: 0 -15px; +} +.btn-success:active, +.btn-success.active { + background-color: #419641; + border-color: #3e8f3e; +} +.btn-success.disabled, +.btn-success[disabled], +fieldset[disabled] .btn-success, +.btn-success.disabled:hover, +.btn-success[disabled]:hover, +fieldset[disabled] .btn-success:hover, +.btn-success.disabled:focus, +.btn-success[disabled]:focus, +fieldset[disabled] .btn-success:focus, +.btn-success.disabled.focus, +.btn-success[disabled].focus, +fieldset[disabled] .btn-success.focus, +.btn-success.disabled:active, +.btn-success[disabled]:active, +fieldset[disabled] .btn-success:active, +.btn-success.disabled.active, +.btn-success[disabled].active, +fieldset[disabled] .btn-success.active { + background-color: #419641; + background-image: none; +} +.btn-info { + background-image: -webkit-linear-gradient(top, #5bc0de 0%, #2aabd2 100%); + background-image: -o-linear-gradient(top, #5bc0de 0%, #2aabd2 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#5bc0de), to(#2aabd2)); + background-image: linear-gradient(to bottom, #5bc0de 0%, #2aabd2 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2aabd2', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); + background-repeat: repeat-x; + border-color: #28a4c9; +} +.btn-info:hover, +.btn-info:focus { + background-color: #2aabd2; + background-position: 0 -15px; +} +.btn-info:active, +.btn-info.active { + background-color: #2aabd2; + border-color: #28a4c9; +} +.btn-info.disabled, +.btn-info[disabled], +fieldset[disabled] .btn-info, +.btn-info.disabled:hover, +.btn-info[disabled]:hover, +fieldset[disabled] .btn-info:hover, +.btn-info.disabled:focus, +.btn-info[disabled]:focus, +fieldset[disabled] .btn-info:focus, +.btn-info.disabled.focus, +.btn-info[disabled].focus, +fieldset[disabled] .btn-info.focus, +.btn-info.disabled:active, +.btn-info[disabled]:active, +fieldset[disabled] .btn-info:active, +.btn-info.disabled.active, +.btn-info[disabled].active, +fieldset[disabled] .btn-info.active { + background-color: #2aabd2; + background-image: none; +} +.btn-warning { + background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #eb9316 100%); + background-image: -o-linear-gradient(top, #f0ad4e 0%, #eb9316 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#f0ad4e), to(#eb9316)); + background-image: linear-gradient(to bottom, #f0ad4e 0%, #eb9316 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffeb9316', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); + background-repeat: repeat-x; + border-color: #e38d13; +} +.btn-warning:hover, +.btn-warning:focus { + background-color: #eb9316; + background-position: 0 -15px; +} +.btn-warning:active, +.btn-warning.active { + background-color: #eb9316; + border-color: #e38d13; +} +.btn-warning.disabled, +.btn-warning[disabled], +fieldset[disabled] .btn-warning, +.btn-warning.disabled:hover, +.btn-warning[disabled]:hover, +fieldset[disabled] .btn-warning:hover, +.btn-warning.disabled:focus, +.btn-warning[disabled]:focus, +fieldset[disabled] .btn-warning:focus, +.btn-warning.disabled.focus, +.btn-warning[disabled].focus, +fieldset[disabled] .btn-warning.focus, +.btn-warning.disabled:active, +.btn-warning[disabled]:active, +fieldset[disabled] .btn-warning:active, +.btn-warning.disabled.active, +.btn-warning[disabled].active, +fieldset[disabled] .btn-warning.active { + background-color: #eb9316; + background-image: none; +} +.btn-danger { + background-image: -webkit-linear-gradient(top, #d9534f 0%, #c12e2a 100%); + background-image: -o-linear-gradient(top, #d9534f 0%, #c12e2a 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#d9534f), to(#c12e2a)); + background-image: linear-gradient(to bottom, #d9534f 0%, #c12e2a 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc12e2a', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); + background-repeat: repeat-x; + border-color: #b92c28; +} +.btn-danger:hover, +.btn-danger:focus { + background-color: #c12e2a; + background-position: 0 -15px; +} +.btn-danger:active, +.btn-danger.active { + background-color: #c12e2a; + border-color: #b92c28; +} +.btn-danger.disabled, +.btn-danger[disabled], +fieldset[disabled] .btn-danger, +.btn-danger.disabled:hover, +.btn-danger[disabled]:hover, +fieldset[disabled] .btn-danger:hover, +.btn-danger.disabled:focus, +.btn-danger[disabled]:focus, +fieldset[disabled] .btn-danger:focus, +.btn-danger.disabled.focus, +.btn-danger[disabled].focus, +fieldset[disabled] .btn-danger.focus, +.btn-danger.disabled:active, +.btn-danger[disabled]:active, +fieldset[disabled] .btn-danger:active, +.btn-danger.disabled.active, +.btn-danger[disabled].active, +fieldset[disabled] .btn-danger.active { + background-color: #c12e2a; + background-image: none; +} +.thumbnail, +.img-thumbnail { + -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075); + box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075); +} +.dropdown-menu > li > a:hover, +.dropdown-menu > li > a:focus { + background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%); + background-image: -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#f5f5f5), to(#e8e8e8)); + background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0); + background-repeat: repeat-x; + background-color: #e8e8e8; +} +.dropdown-menu > .active > a, +.dropdown-menu > .active > a:hover, +.dropdown-menu > .active > a:focus { + background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%); + background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2e6da4)); + background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0); + background-repeat: repeat-x; + background-color: #2e6da4; +} +.navbar-default { + background-image: -webkit-linear-gradient(top, #ffffff 0%, #f8f8f8 100%); + background-image: -o-linear-gradient(top, #ffffff 0%, #f8f8f8 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#ffffff), to(#f8f8f8)); + background-image: linear-gradient(to bottom, #ffffff 0%, #f8f8f8 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff8f8f8', GradientType=0); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); + border-radius: 4px; + -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 5px rgba(0, 0, 0, 0.075); + box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 5px rgba(0, 0, 0, 0.075); +} +.navbar-default .navbar-nav > .open > a, +.navbar-default .navbar-nav > .active > a { + background-image: -webkit-linear-gradient(top, #dbdbdb 0%, #e2e2e2 100%); + background-image: -o-linear-gradient(top, #dbdbdb 0%, #e2e2e2 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#dbdbdb), to(#e2e2e2)); + background-image: linear-gradient(to bottom, #dbdbdb 0%, #e2e2e2 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdbdbdb', endColorstr='#ffe2e2e2', GradientType=0); + background-repeat: repeat-x; + -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.075); + box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.075); +} +.navbar-brand, +.navbar-nav > li > a { + text-shadow: 0 1px 0 rgba(255, 255, 255, 0.25); +} +.navbar-inverse { + background-image: -webkit-linear-gradient(top, #3c3c3c 0%, #222 100%); + background-image: -o-linear-gradient(top, #3c3c3c 0%, #222 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#3c3c3c), to(#222)); + background-image: linear-gradient(to bottom, #3c3c3c 0%, #222 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c', endColorstr='#ff222222', GradientType=0); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); + border-radius: 4px; +} +.navbar-inverse .navbar-nav > .open > a, +.navbar-inverse .navbar-nav > .active > a { + background-image: -webkit-linear-gradient(top, #080808 0%, #0f0f0f 100%); + background-image: -o-linear-gradient(top, #080808 0%, #0f0f0f 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#080808), to(#0f0f0f)); + background-image: linear-gradient(to bottom, #080808 0%, #0f0f0f 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff080808', endColorstr='#ff0f0f0f', GradientType=0); + background-repeat: repeat-x; + -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.25); + box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.25); +} +.navbar-inverse .navbar-brand, +.navbar-inverse .navbar-nav > li > a { + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); +} +.navbar-static-top, +.navbar-fixed-top, +.navbar-fixed-bottom { + border-radius: 0; +} +@media (max-width: 767px) { + .navbar .navbar-nav .open .dropdown-menu > .active > a, + .navbar .navbar-nav .open .dropdown-menu > .active > a:hover, + .navbar .navbar-nav .open .dropdown-menu > .active > a:focus { + color: #fff; + background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%); + background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2e6da4)); + background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0); + background-repeat: repeat-x; + } +} +.alert { + text-shadow: 0 1px 0 rgba(255, 255, 255, 0.2); + -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25), 0 1px 2px rgba(0, 0, 0, 0.05); + box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25), 0 1px 2px rgba(0, 0, 0, 0.05); +} +.alert-success { + background-image: -webkit-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%); + background-image: -o-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#dff0d8), to(#c8e5bc)); + background-image: linear-gradient(to bottom, #dff0d8 0%, #c8e5bc 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffc8e5bc', GradientType=0); + background-repeat: repeat-x; + border-color: #b2dba1; +} +.alert-info { + background-image: -webkit-linear-gradient(top, #d9edf7 0%, #b9def0 100%); + background-image: -o-linear-gradient(top, #d9edf7 0%, #b9def0 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#d9edf7), to(#b9def0)); + background-image: linear-gradient(to bottom, #d9edf7 0%, #b9def0 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffb9def0', GradientType=0); + background-repeat: repeat-x; + border-color: #9acfea; +} +.alert-warning { + background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%); + background-image: -o-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#fcf8e3), to(#f8efc0)); + background-image: linear-gradient(to bottom, #fcf8e3 0%, #f8efc0 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fff8efc0', GradientType=0); + background-repeat: repeat-x; + border-color: #f5e79e; +} +.alert-danger { + background-image: -webkit-linear-gradient(top, #f2dede 0%, #e7c3c3 100%); + background-image: -o-linear-gradient(top, #f2dede 0%, #e7c3c3 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#f2dede), to(#e7c3c3)); + background-image: linear-gradient(to bottom, #f2dede 0%, #e7c3c3 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffe7c3c3', GradientType=0); + background-repeat: repeat-x; + border-color: #dca7a7; +} +.progress { + background-image: -webkit-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%); + background-image: -o-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#ebebeb), to(#f5f5f5)); + background-image: linear-gradient(to bottom, #ebebeb 0%, #f5f5f5 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff5f5f5', GradientType=0); + background-repeat: repeat-x; +} +.progress-bar { + background-image: -webkit-linear-gradient(top, #337ab7 0%, #286090 100%); + background-image: -o-linear-gradient(top, #337ab7 0%, #286090 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#286090)); + background-image: linear-gradient(to bottom, #337ab7 0%, #286090 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff286090', GradientType=0); + background-repeat: repeat-x; +} +.progress-bar-success { + background-image: -webkit-linear-gradient(top, #5cb85c 0%, #449d44 100%); + background-image: -o-linear-gradient(top, #5cb85c 0%, #449d44 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#5cb85c), to(#449d44)); + background-image: linear-gradient(to bottom, #5cb85c 0%, #449d44 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0); + background-repeat: repeat-x; +} +.progress-bar-info { + background-image: -webkit-linear-gradient(top, #5bc0de 0%, #31b0d5 100%); + background-image: -o-linear-gradient(top, #5bc0de 0%, #31b0d5 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#5bc0de), to(#31b0d5)); + background-image: linear-gradient(to bottom, #5bc0de 0%, #31b0d5 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0); + background-repeat: repeat-x; +} +.progress-bar-warning { + background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #ec971f 100%); + background-image: -o-linear-gradient(top, #f0ad4e 0%, #ec971f 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#f0ad4e), to(#ec971f)); + background-image: linear-gradient(to bottom, #f0ad4e 0%, #ec971f 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0); + background-repeat: repeat-x; +} +.progress-bar-danger { + background-image: -webkit-linear-gradient(top, #d9534f 0%, #c9302c 100%); + background-image: -o-linear-gradient(top, #d9534f 0%, #c9302c 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#d9534f), to(#c9302c)); + background-image: linear-gradient(to bottom, #d9534f 0%, #c9302c 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0); + background-repeat: repeat-x; +} +.progress-bar-striped { + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); +} +.list-group { + border-radius: 4px; + -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075); + box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075); +} +.list-group-item.active, +.list-group-item.active:hover, +.list-group-item.active:focus { + text-shadow: 0 -1px 0 #286090; + background-image: -webkit-linear-gradient(top, #337ab7 0%, #2b669a 100%); + background-image: -o-linear-gradient(top, #337ab7 0%, #2b669a 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2b669a)); + background-image: linear-gradient(to bottom, #337ab7 0%, #2b669a 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2b669a', GradientType=0); + background-repeat: repeat-x; + border-color: #2b669a; +} +.list-group-item.active .badge, +.list-group-item.active:hover .badge, +.list-group-item.active:focus .badge { + text-shadow: none; +} +.panel { + -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05); + box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05); +} +.panel-default > .panel-heading { + background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%); + background-image: -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#f5f5f5), to(#e8e8e8)); + background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0); + background-repeat: repeat-x; +} +.panel-primary > .panel-heading { + background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%); + background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2e6da4)); + background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0); + background-repeat: repeat-x; +} +.panel-success > .panel-heading { + background-image: -webkit-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%); + background-image: -o-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#dff0d8), to(#d0e9c6)); + background-image: linear-gradient(to bottom, #dff0d8 0%, #d0e9c6 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffd0e9c6', GradientType=0); + background-repeat: repeat-x; +} +.panel-info > .panel-heading { + background-image: -webkit-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%); + background-image: -o-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#d9edf7), to(#c4e3f3)); + background-image: linear-gradient(to bottom, #d9edf7 0%, #c4e3f3 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffc4e3f3', GradientType=0); + background-repeat: repeat-x; +} +.panel-warning > .panel-heading { + background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%); + background-image: -o-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#fcf8e3), to(#faf2cc)); + background-image: linear-gradient(to bottom, #fcf8e3 0%, #faf2cc 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fffaf2cc', GradientType=0); + background-repeat: repeat-x; +} +.panel-danger > .panel-heading { + background-image: -webkit-linear-gradient(top, #f2dede 0%, #ebcccc 100%); + background-image: -o-linear-gradient(top, #f2dede 0%, #ebcccc 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#f2dede), to(#ebcccc)); + background-image: linear-gradient(to bottom, #f2dede 0%, #ebcccc 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffebcccc', GradientType=0); + background-repeat: repeat-x; +} +.well { + background-image: -webkit-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%); + background-image: -o-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#e8e8e8), to(#f5f5f5)); + background-image: linear-gradient(to bottom, #e8e8e8 0%, #f5f5f5 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8', endColorstr='#fff5f5f5', GradientType=0); + background-repeat: repeat-x; + border-color: #dcdcdc; + -webkit-box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.05), 0 1px 0 rgba(255, 255, 255, 0.1); + box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.05), 0 1px 0 rgba(255, 255, 255, 0.1); +} +/*# sourceMappingURL=bootstrap-theme.css.map */ \ No newline at end of file diff --git a/xinda-plugs/xinda-oauth/src/main/resources/static/oauth/css/bootstrap-theme.css.map b/xinda-plugs/xinda-oauth/src/main/resources/static/oauth/css/bootstrap-theme.css.map new file mode 100644 index 0000000..949d097 --- /dev/null +++ b/xinda-plugs/xinda-oauth/src/main/resources/static/oauth/css/bootstrap-theme.css.map @@ -0,0 +1 @@ +{"version":3,"sources":["bootstrap-theme.css","less/theme.less","less/mixins/vendor-prefixes.less","less/mixins/gradients.less","less/mixins/reset-filter.less"],"names":[],"mappings":"AAAA;;;;GAIG;ACiBH;;;;;;EAME,yCAAA;EC2CA,4FAAA;EACQ,oFAAA;CFzDT;ACkBC;;;;;;;;;;;;ECsCA,yDAAA;EACQ,iDAAA;CF1CT;ACQC;;;;;;;;;;;;;;;;;;ECiCA,yBAAA;EACQ,iBAAA;CFrBT;AC7BD;;;;;;EAuBI,kBAAA;CDcH;AC2BC;;EAEE,uBAAA;CDzBH;AC8BD;EEvEI,sEAAA;EACA,iEAAA;EACA,2FAAA;EAAA,oEAAA;EACA,uHAAA;EClBF,oEAAA;EH8CA,4BAAA;EACA,sBAAA;EAyCA,0BAAA;EACA,mBAAA;CDtBD;AClBC;;EAEE,0BAAA;EACA,6BAAA;CDoBH;ACjBC;;EAEE,0BAAA;EACA,sBAAA;CDmBH;ACbG;;;;;;;;;;;;;;;;;;EAME,0BAAA;EACA,uBAAA;CD2BL;ACPD;EE5EI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EACA,uHAAA;EClBF,oEAAA;EH8CA,4BAAA;EACA,sBAAA;CD4DD;AC1DC;;EAEE,0BAAA;EACA,6BAAA;CD4DH;ACzDC;;EAEE,0BAAA;EACA,sBAAA;CD2DH;ACrDG;;;;;;;;;;;;;;;;;;EAME,0BAAA;EACA,uBAAA;CDmEL;AC9CD;EE7EI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EACA,uHAAA;EClBF,oEAAA;EH8CA,4BAAA;EACA,sBAAA;CDoGD;AClGC;;EAEE,0BAAA;EACA,6BAAA;CDoGH;ACjGC;;EAEE,0BAAA;EACA,sBAAA;CDmGH;AC7FG;;;;;;;;;;;;;;;;;;EAME,0BAAA;EACA,uBAAA;CD2GL;ACrFD;EE9EI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EACA,uHAAA;EClBF,oEAAA;EH8CA,4BAAA;EACA,sBAAA;CD4ID;AC1IC;;EAEE,0BAAA;EACA,6BAAA;CD4IH;ACzIC;;EAEE,0BAAA;EACA,sBAAA;CD2IH;ACrIG;;;;;;;;;;;;;;;;;;EAME,0BAAA;EACA,uBAAA;CDmJL;AC5HD;EE/EI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EACA,uHAAA;EClBF,oEAAA;EH8CA,4BAAA;EACA,sBAAA;CDoLD;AClLC;;EAEE,0BAAA;EACA,6BAAA;CDoLH;ACjLC;;EAEE,0BAAA;EACA,sBAAA;CDmLH;AC7KG;;;;;;;;;;;;;;;;;;EAME,0BAAA;EACA,uBAAA;CD2LL;ACnKD;EEhFI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EACA,uHAAA;EClBF,oEAAA;EH8CA,4BAAA;EACA,sBAAA;CD4ND;AC1NC;;EAEE,0BAAA;EACA,6BAAA;CD4NH;ACzNC;;EAEE,0BAAA;EACA,sBAAA;CD2NH;ACrNG;;;;;;;;;;;;;;;;;;EAME,0BAAA;EACA,uBAAA;CDmOL;ACpMD;;ECtCE,mDAAA;EACQ,2CAAA;CF8OT;AC/LD;;EEjGI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EACA,uHAAA;EACA,4BAAA;EFgGF,0BAAA;CDqMD;ACnMD;;;EEtGI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EACA,uHAAA;EACA,4BAAA;EFsGF,0BAAA;CDyMD;AChMD;EEnHI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EACA,uHAAA;EACA,4BAAA;ECnBF,oEAAA;EHqIA,mBAAA;ECrEA,4FAAA;EACQ,oFAAA;CF4QT;AC3MD;;EEnHI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EACA,uHAAA;EACA,4BAAA;ED6CF,yDAAA;EACQ,iDAAA;CFsRT;ACxMD;;EAEE,+CAAA;CD0MD;ACtMD;EEtII,sEAAA;EACA,iEAAA;EACA,2FAAA;EAAA,oEAAA;EACA,uHAAA;EACA,4BAAA;ECnBF,oEAAA;EHwJA,mBAAA;CD4MD;AC/MD;;EEtII,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EACA,uHAAA;EACA,4BAAA;ED6CF,wDAAA;EACQ,gDAAA;CF6ST;ACzND;;EAYI,0CAAA;CDiNH;AC5MD;;;EAGE,iBAAA;CD8MD;AC1MD;EAEI;;;IAGE,YAAA;IEnKF,yEAAA;IACA,oEAAA;IACA,8FAAA;IAAA,uEAAA;IACA,uHAAA;IACA,4BAAA;GH+WD;CACF;ACrMD;EACE,8CAAA;EC/HA,2FAAA;EACQ,mFAAA;CFuUT;AC7LD;EE5LI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EACA,uHAAA;EACA,4BAAA;EFoLF,sBAAA;CDyMD;ACpMD;EE7LI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EACA,uHAAA;EACA,4BAAA;EFoLF,sBAAA;CDiND;AC3MD;EE9LI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EACA,uHAAA;EACA,4BAAA;EFoLF,sBAAA;CDyND;AClND;EE/LI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EACA,uHAAA;EACA,4BAAA;EFoLF,sBAAA;CDiOD;AClND;EEvMI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EACA,uHAAA;EACA,4BAAA;CH4ZH;AC/MD;EEjNI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EACA,uHAAA;EACA,4BAAA;CHmaH;ACrND;EElNI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EACA,uHAAA;EACA,4BAAA;CH0aH;AC3ND;EEnNI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EACA,uHAAA;EACA,4BAAA;CHibH;ACjOD;EEpNI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EACA,uHAAA;EACA,4BAAA;CHwbH;ACvOD;EErNI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EACA,uHAAA;EACA,4BAAA;CH+bH;AC1OD;EExLI,8MAAA;EACA,yMAAA;EACA,sMAAA;CHqaH;ACtOD;EACE,mBAAA;EClLA,mDAAA;EACQ,2CAAA;CF2ZT;ACvOD;;;EAGE,8BAAA;EEzOE,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EACA,uHAAA;EACA,4BAAA;EFuOF,sBAAA;CD6OD;AClPD;;;EAQI,kBAAA;CD+OH;ACrOD;ECvME,kDAAA;EACQ,0CAAA;CF+aT;AC/ND;EElQI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EACA,uHAAA;EACA,4BAAA;CHoeH;ACrOD;EEnQI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EACA,uHAAA;EACA,4BAAA;CH2eH;AC3OD;EEpQI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EACA,uHAAA;EACA,4BAAA;CHkfH;ACjPD;EErQI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EACA,uHAAA;EACA,4BAAA;CHyfH;ACvPD;EEtQI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EACA,uHAAA;EACA,4BAAA;CHggBH;AC7PD;EEvQI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EACA,uHAAA;EACA,4BAAA;CHugBH;AC7PD;EE9QI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EACA,uHAAA;EACA,4BAAA;EF4QF,sBAAA;EC/NA,0FAAA;EACQ,kFAAA;CFmeT","file":"bootstrap-theme.css","sourcesContent":["/*!\n * Bootstrap v3.4.1 (https://getbootstrap.com/)\n * Copyright 2011-2019 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */\n.btn-default,\n.btn-primary,\n.btn-success,\n.btn-info,\n.btn-warning,\n.btn-danger {\n text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.2);\n -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 1px rgba(0, 0, 0, 0.075);\n box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 1px rgba(0, 0, 0, 0.075);\n}\n.btn-default:active,\n.btn-primary:active,\n.btn-success:active,\n.btn-info:active,\n.btn-warning:active,\n.btn-danger:active,\n.btn-default.active,\n.btn-primary.active,\n.btn-success.active,\n.btn-info.active,\n.btn-warning.active,\n.btn-danger.active {\n -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n}\n.btn-default.disabled,\n.btn-primary.disabled,\n.btn-success.disabled,\n.btn-info.disabled,\n.btn-warning.disabled,\n.btn-danger.disabled,\n.btn-default[disabled],\n.btn-primary[disabled],\n.btn-success[disabled],\n.btn-info[disabled],\n.btn-warning[disabled],\n.btn-danger[disabled],\nfieldset[disabled] .btn-default,\nfieldset[disabled] .btn-primary,\nfieldset[disabled] .btn-success,\nfieldset[disabled] .btn-info,\nfieldset[disabled] .btn-warning,\nfieldset[disabled] .btn-danger {\n -webkit-box-shadow: none;\n box-shadow: none;\n}\n.btn-default .badge,\n.btn-primary .badge,\n.btn-success .badge,\n.btn-info .badge,\n.btn-warning .badge,\n.btn-danger .badge {\n text-shadow: none;\n}\n.btn:active,\n.btn.active {\n background-image: none;\n}\n.btn-default {\n background-image: -webkit-linear-gradient(top, #fff 0%, #e0e0e0 100%);\n background-image: -o-linear-gradient(top, #fff 0%, #e0e0e0 100%);\n background-image: linear-gradient(to bottom, #fff 0%, #e0e0e0 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe0e0e0', GradientType=0);\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n background-repeat: repeat-x;\n border-color: #dbdbdb;\n text-shadow: 0 1px 0 #fff;\n border-color: #ccc;\n}\n.btn-default:hover,\n.btn-default:focus {\n background-color: #e0e0e0;\n background-position: 0 -15px;\n}\n.btn-default:active,\n.btn-default.active {\n background-color: #e0e0e0;\n border-color: #dbdbdb;\n}\n.btn-default.disabled,\n.btn-default[disabled],\nfieldset[disabled] .btn-default,\n.btn-default.disabled:hover,\n.btn-default[disabled]:hover,\nfieldset[disabled] .btn-default:hover,\n.btn-default.disabled:focus,\n.btn-default[disabled]:focus,\nfieldset[disabled] .btn-default:focus,\n.btn-default.disabled.focus,\n.btn-default[disabled].focus,\nfieldset[disabled] .btn-default.focus,\n.btn-default.disabled:active,\n.btn-default[disabled]:active,\nfieldset[disabled] .btn-default:active,\n.btn-default.disabled.active,\n.btn-default[disabled].active,\nfieldset[disabled] .btn-default.active {\n background-color: #e0e0e0;\n background-image: none;\n}\n.btn-primary {\n background-image: -webkit-linear-gradient(top, #337ab7 0%, #265a88 100%);\n background-image: -o-linear-gradient(top, #337ab7 0%, #265a88 100%);\n background-image: linear-gradient(to bottom, #337ab7 0%, #265a88 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff265a88', GradientType=0);\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n background-repeat: repeat-x;\n border-color: #245580;\n}\n.btn-primary:hover,\n.btn-primary:focus {\n background-color: #265a88;\n background-position: 0 -15px;\n}\n.btn-primary:active,\n.btn-primary.active {\n background-color: #265a88;\n border-color: #245580;\n}\n.btn-primary.disabled,\n.btn-primary[disabled],\nfieldset[disabled] .btn-primary,\n.btn-primary.disabled:hover,\n.btn-primary[disabled]:hover,\nfieldset[disabled] .btn-primary:hover,\n.btn-primary.disabled:focus,\n.btn-primary[disabled]:focus,\nfieldset[disabled] .btn-primary:focus,\n.btn-primary.disabled.focus,\n.btn-primary[disabled].focus,\nfieldset[disabled] .btn-primary.focus,\n.btn-primary.disabled:active,\n.btn-primary[disabled]:active,\nfieldset[disabled] .btn-primary:active,\n.btn-primary.disabled.active,\n.btn-primary[disabled].active,\nfieldset[disabled] .btn-primary.active {\n background-color: #265a88;\n background-image: none;\n}\n.btn-success {\n background-image: -webkit-linear-gradient(top, #5cb85c 0%, #419641 100%);\n background-image: -o-linear-gradient(top, #5cb85c 0%, #419641 100%);\n background-image: linear-gradient(to bottom, #5cb85c 0%, #419641 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff419641', GradientType=0);\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n background-repeat: repeat-x;\n border-color: #3e8f3e;\n}\n.btn-success:hover,\n.btn-success:focus {\n background-color: #419641;\n background-position: 0 -15px;\n}\n.btn-success:active,\n.btn-success.active {\n background-color: #419641;\n border-color: #3e8f3e;\n}\n.btn-success.disabled,\n.btn-success[disabled],\nfieldset[disabled] .btn-success,\n.btn-success.disabled:hover,\n.btn-success[disabled]:hover,\nfieldset[disabled] .btn-success:hover,\n.btn-success.disabled:focus,\n.btn-success[disabled]:focus,\nfieldset[disabled] .btn-success:focus,\n.btn-success.disabled.focus,\n.btn-success[disabled].focus,\nfieldset[disabled] .btn-success.focus,\n.btn-success.disabled:active,\n.btn-success[disabled]:active,\nfieldset[disabled] .btn-success:active,\n.btn-success.disabled.active,\n.btn-success[disabled].active,\nfieldset[disabled] .btn-success.active {\n background-color: #419641;\n background-image: none;\n}\n.btn-info {\n background-image: -webkit-linear-gradient(top, #5bc0de 0%, #2aabd2 100%);\n background-image: -o-linear-gradient(top, #5bc0de 0%, #2aabd2 100%);\n background-image: linear-gradient(to bottom, #5bc0de 0%, #2aabd2 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2aabd2', GradientType=0);\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n background-repeat: repeat-x;\n border-color: #28a4c9;\n}\n.btn-info:hover,\n.btn-info:focus {\n background-color: #2aabd2;\n background-position: 0 -15px;\n}\n.btn-info:active,\n.btn-info.active {\n background-color: #2aabd2;\n border-color: #28a4c9;\n}\n.btn-info.disabled,\n.btn-info[disabled],\nfieldset[disabled] .btn-info,\n.btn-info.disabled:hover,\n.btn-info[disabled]:hover,\nfieldset[disabled] .btn-info:hover,\n.btn-info.disabled:focus,\n.btn-info[disabled]:focus,\nfieldset[disabled] .btn-info:focus,\n.btn-info.disabled.focus,\n.btn-info[disabled].focus,\nfieldset[disabled] .btn-info.focus,\n.btn-info.disabled:active,\n.btn-info[disabled]:active,\nfieldset[disabled] .btn-info:active,\n.btn-info.disabled.active,\n.btn-info[disabled].active,\nfieldset[disabled] .btn-info.active {\n background-color: #2aabd2;\n background-image: none;\n}\n.btn-warning {\n background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #eb9316 100%);\n background-image: -o-linear-gradient(top, #f0ad4e 0%, #eb9316 100%);\n background-image: linear-gradient(to bottom, #f0ad4e 0%, #eb9316 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffeb9316', GradientType=0);\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n background-repeat: repeat-x;\n border-color: #e38d13;\n}\n.btn-warning:hover,\n.btn-warning:focus {\n background-color: #eb9316;\n background-position: 0 -15px;\n}\n.btn-warning:active,\n.btn-warning.active {\n background-color: #eb9316;\n border-color: #e38d13;\n}\n.btn-warning.disabled,\n.btn-warning[disabled],\nfieldset[disabled] .btn-warning,\n.btn-warning.disabled:hover,\n.btn-warning[disabled]:hover,\nfieldset[disabled] .btn-warning:hover,\n.btn-warning.disabled:focus,\n.btn-warning[disabled]:focus,\nfieldset[disabled] .btn-warning:focus,\n.btn-warning.disabled.focus,\n.btn-warning[disabled].focus,\nfieldset[disabled] .btn-warning.focus,\n.btn-warning.disabled:active,\n.btn-warning[disabled]:active,\nfieldset[disabled] .btn-warning:active,\n.btn-warning.disabled.active,\n.btn-warning[disabled].active,\nfieldset[disabled] .btn-warning.active {\n background-color: #eb9316;\n background-image: none;\n}\n.btn-danger {\n background-image: -webkit-linear-gradient(top, #d9534f 0%, #c12e2a 100%);\n background-image: -o-linear-gradient(top, #d9534f 0%, #c12e2a 100%);\n background-image: linear-gradient(to bottom, #d9534f 0%, #c12e2a 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc12e2a', GradientType=0);\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n background-repeat: repeat-x;\n border-color: #b92c28;\n}\n.btn-danger:hover,\n.btn-danger:focus {\n background-color: #c12e2a;\n background-position: 0 -15px;\n}\n.btn-danger:active,\n.btn-danger.active {\n background-color: #c12e2a;\n border-color: #b92c28;\n}\n.btn-danger.disabled,\n.btn-danger[disabled],\nfieldset[disabled] .btn-danger,\n.btn-danger.disabled:hover,\n.btn-danger[disabled]:hover,\nfieldset[disabled] .btn-danger:hover,\n.btn-danger.disabled:focus,\n.btn-danger[disabled]:focus,\nfieldset[disabled] .btn-danger:focus,\n.btn-danger.disabled.focus,\n.btn-danger[disabled].focus,\nfieldset[disabled] .btn-danger.focus,\n.btn-danger.disabled:active,\n.btn-danger[disabled]:active,\nfieldset[disabled] .btn-danger:active,\n.btn-danger.disabled.active,\n.btn-danger[disabled].active,\nfieldset[disabled] .btn-danger.active {\n background-color: #c12e2a;\n background-image: none;\n}\n.thumbnail,\n.img-thumbnail {\n -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075);\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075);\n}\n.dropdown-menu > li > a:hover,\n.dropdown-menu > li > a:focus {\n background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);\n background-image: -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);\n background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);\n background-repeat: repeat-x;\n background-color: #e8e8e8;\n}\n.dropdown-menu > .active > a,\n.dropdown-menu > .active > a:hover,\n.dropdown-menu > .active > a:focus {\n background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);\n background-repeat: repeat-x;\n background-color: #2e6da4;\n}\n.navbar-default {\n background-image: -webkit-linear-gradient(top, #ffffff 0%, #f8f8f8 100%);\n background-image: -o-linear-gradient(top, #ffffff 0%, #f8f8f8 100%);\n background-image: linear-gradient(to bottom, #ffffff 0%, #f8f8f8 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff8f8f8', GradientType=0);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n border-radius: 4px;\n -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 5px rgba(0, 0, 0, 0.075);\n box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 5px rgba(0, 0, 0, 0.075);\n}\n.navbar-default .navbar-nav > .open > a,\n.navbar-default .navbar-nav > .active > a {\n background-image: -webkit-linear-gradient(top, #dbdbdb 0%, #e2e2e2 100%);\n background-image: -o-linear-gradient(top, #dbdbdb 0%, #e2e2e2 100%);\n background-image: linear-gradient(to bottom, #dbdbdb 0%, #e2e2e2 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdbdbdb', endColorstr='#ffe2e2e2', GradientType=0);\n background-repeat: repeat-x;\n -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.075);\n box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.075);\n}\n.navbar-brand,\n.navbar-nav > li > a {\n text-shadow: 0 1px 0 rgba(255, 255, 255, 0.25);\n}\n.navbar-inverse {\n background-image: -webkit-linear-gradient(top, #3c3c3c 0%, #222 100%);\n background-image: -o-linear-gradient(top, #3c3c3c 0%, #222 100%);\n background-image: linear-gradient(to bottom, #3c3c3c 0%, #222 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c', endColorstr='#ff222222', GradientType=0);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n border-radius: 4px;\n}\n.navbar-inverse .navbar-nav > .open > a,\n.navbar-inverse .navbar-nav > .active > a {\n background-image: -webkit-linear-gradient(top, #080808 0%, #0f0f0f 100%);\n background-image: -o-linear-gradient(top, #080808 0%, #0f0f0f 100%);\n background-image: linear-gradient(to bottom, #080808 0%, #0f0f0f 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff080808', endColorstr='#ff0f0f0f', GradientType=0);\n background-repeat: repeat-x;\n -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.25);\n box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.25);\n}\n.navbar-inverse .navbar-brand,\n.navbar-inverse .navbar-nav > li > a {\n text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);\n}\n.navbar-static-top,\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n border-radius: 0;\n}\n@media (max-width: 767px) {\n .navbar .navbar-nav .open .dropdown-menu > .active > a,\n .navbar .navbar-nav .open .dropdown-menu > .active > a:hover,\n .navbar .navbar-nav .open .dropdown-menu > .active > a:focus {\n color: #fff;\n background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);\n background-repeat: repeat-x;\n }\n}\n.alert {\n text-shadow: 0 1px 0 rgba(255, 255, 255, 0.2);\n -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25), 0 1px 2px rgba(0, 0, 0, 0.05);\n box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25), 0 1px 2px rgba(0, 0, 0, 0.05);\n}\n.alert-success {\n background-image: -webkit-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%);\n background-image: -o-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%);\n background-image: linear-gradient(to bottom, #dff0d8 0%, #c8e5bc 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffc8e5bc', GradientType=0);\n background-repeat: repeat-x;\n border-color: #b2dba1;\n}\n.alert-info {\n background-image: -webkit-linear-gradient(top, #d9edf7 0%, #b9def0 100%);\n background-image: -o-linear-gradient(top, #d9edf7 0%, #b9def0 100%);\n background-image: linear-gradient(to bottom, #d9edf7 0%, #b9def0 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffb9def0', GradientType=0);\n background-repeat: repeat-x;\n border-color: #9acfea;\n}\n.alert-warning {\n background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%);\n background-image: -o-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%);\n background-image: linear-gradient(to bottom, #fcf8e3 0%, #f8efc0 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fff8efc0', GradientType=0);\n background-repeat: repeat-x;\n border-color: #f5e79e;\n}\n.alert-danger {\n background-image: -webkit-linear-gradient(top, #f2dede 0%, #e7c3c3 100%);\n background-image: -o-linear-gradient(top, #f2dede 0%, #e7c3c3 100%);\n background-image: linear-gradient(to bottom, #f2dede 0%, #e7c3c3 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffe7c3c3', GradientType=0);\n background-repeat: repeat-x;\n border-color: #dca7a7;\n}\n.progress {\n background-image: -webkit-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%);\n background-image: -o-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%);\n background-image: linear-gradient(to bottom, #ebebeb 0%, #f5f5f5 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff5f5f5', GradientType=0);\n background-repeat: repeat-x;\n}\n.progress-bar {\n background-image: -webkit-linear-gradient(top, #337ab7 0%, #286090 100%);\n background-image: -o-linear-gradient(top, #337ab7 0%, #286090 100%);\n background-image: linear-gradient(to bottom, #337ab7 0%, #286090 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff286090', GradientType=0);\n background-repeat: repeat-x;\n}\n.progress-bar-success {\n background-image: -webkit-linear-gradient(top, #5cb85c 0%, #449d44 100%);\n background-image: -o-linear-gradient(top, #5cb85c 0%, #449d44 100%);\n background-image: linear-gradient(to bottom, #5cb85c 0%, #449d44 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0);\n background-repeat: repeat-x;\n}\n.progress-bar-info {\n background-image: -webkit-linear-gradient(top, #5bc0de 0%, #31b0d5 100%);\n background-image: -o-linear-gradient(top, #5bc0de 0%, #31b0d5 100%);\n background-image: linear-gradient(to bottom, #5bc0de 0%, #31b0d5 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0);\n background-repeat: repeat-x;\n}\n.progress-bar-warning {\n background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #ec971f 100%);\n background-image: -o-linear-gradient(top, #f0ad4e 0%, #ec971f 100%);\n background-image: linear-gradient(to bottom, #f0ad4e 0%, #ec971f 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0);\n background-repeat: repeat-x;\n}\n.progress-bar-danger {\n background-image: -webkit-linear-gradient(top, #d9534f 0%, #c9302c 100%);\n background-image: -o-linear-gradient(top, #d9534f 0%, #c9302c 100%);\n background-image: linear-gradient(to bottom, #d9534f 0%, #c9302c 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0);\n background-repeat: repeat-x;\n}\n.progress-bar-striped {\n background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n}\n.list-group {\n border-radius: 4px;\n -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075);\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075);\n}\n.list-group-item.active,\n.list-group-item.active:hover,\n.list-group-item.active:focus {\n text-shadow: 0 -1px 0 #286090;\n background-image: -webkit-linear-gradient(top, #337ab7 0%, #2b669a 100%);\n background-image: -o-linear-gradient(top, #337ab7 0%, #2b669a 100%);\n background-image: linear-gradient(to bottom, #337ab7 0%, #2b669a 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2b669a', GradientType=0);\n background-repeat: repeat-x;\n border-color: #2b669a;\n}\n.list-group-item.active .badge,\n.list-group-item.active:hover .badge,\n.list-group-item.active:focus .badge {\n text-shadow: none;\n}\n.panel {\n -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);\n}\n.panel-default > .panel-heading {\n background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);\n background-image: -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);\n background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);\n background-repeat: repeat-x;\n}\n.panel-primary > .panel-heading {\n background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);\n background-repeat: repeat-x;\n}\n.panel-success > .panel-heading {\n background-image: -webkit-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%);\n background-image: -o-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%);\n background-image: linear-gradient(to bottom, #dff0d8 0%, #d0e9c6 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffd0e9c6', GradientType=0);\n background-repeat: repeat-x;\n}\n.panel-info > .panel-heading {\n background-image: -webkit-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%);\n background-image: -o-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%);\n background-image: linear-gradient(to bottom, #d9edf7 0%, #c4e3f3 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffc4e3f3', GradientType=0);\n background-repeat: repeat-x;\n}\n.panel-warning > .panel-heading {\n background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%);\n background-image: -o-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%);\n background-image: linear-gradient(to bottom, #fcf8e3 0%, #faf2cc 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fffaf2cc', GradientType=0);\n background-repeat: repeat-x;\n}\n.panel-danger > .panel-heading {\n background-image: -webkit-linear-gradient(top, #f2dede 0%, #ebcccc 100%);\n background-image: -o-linear-gradient(top, #f2dede 0%, #ebcccc 100%);\n background-image: linear-gradient(to bottom, #f2dede 0%, #ebcccc 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffebcccc', GradientType=0);\n background-repeat: repeat-x;\n}\n.well {\n background-image: -webkit-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%);\n background-image: -o-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%);\n background-image: linear-gradient(to bottom, #e8e8e8 0%, #f5f5f5 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8', endColorstr='#fff5f5f5', GradientType=0);\n background-repeat: repeat-x;\n border-color: #dcdcdc;\n -webkit-box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.05), 0 1px 0 rgba(255, 255, 255, 0.1);\n box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.05), 0 1px 0 rgba(255, 255, 255, 0.1);\n}\n/*# sourceMappingURL=bootstrap-theme.css.map */","// stylelint-disable selector-no-qualifying-type, selector-max-compound-selectors\n\n/*!\n * Bootstrap v3.4.1 (https://getbootstrap.com/)\n * Copyright 2011-2019 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */\n\n//\n// Load core variables and mixins\n// --------------------------------------------------\n\n@import \"variables.less\";\n@import \"mixins.less\";\n\n\n//\n// Buttons\n// --------------------------------------------------\n\n// Common styles\n.btn-default,\n.btn-primary,\n.btn-success,\n.btn-info,\n.btn-warning,\n.btn-danger {\n text-shadow: 0 -1px 0 rgba(0, 0, 0, .2);\n @shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 1px rgba(0, 0, 0, .075);\n .box-shadow(@shadow);\n\n // Reset the shadow\n &:active,\n &.active {\n .box-shadow(inset 0 3px 5px rgba(0, 0, 0, .125));\n }\n\n &.disabled,\n &[disabled],\n fieldset[disabled] & {\n .box-shadow(none);\n }\n\n .badge {\n text-shadow: none;\n }\n}\n\n// Mixin for generating new styles\n.btn-styles(@btn-color: #555) {\n #gradient > .vertical(@start-color: @btn-color; @end-color: darken(@btn-color, 12%));\n .reset-filter(); // Disable gradients for IE9 because filter bleeds through rounded corners; see https://github.com/twbs/bootstrap/issues/10620\n background-repeat: repeat-x;\n border-color: darken(@btn-color, 14%);\n\n &:hover,\n &:focus {\n background-color: darken(@btn-color, 12%);\n background-position: 0 -15px;\n }\n\n &:active,\n &.active {\n background-color: darken(@btn-color, 12%);\n border-color: darken(@btn-color, 14%);\n }\n\n &.disabled,\n &[disabled],\n fieldset[disabled] & {\n &,\n &:hover,\n &:focus,\n &.focus,\n &:active,\n &.active {\n background-color: darken(@btn-color, 12%);\n background-image: none;\n }\n }\n}\n\n// Common styles\n.btn {\n // Remove the gradient for the pressed/active state\n &:active,\n &.active {\n background-image: none;\n }\n}\n\n// Apply the mixin to the buttons\n.btn-default {\n .btn-styles(@btn-default-bg);\n text-shadow: 0 1px 0 #fff;\n border-color: #ccc;\n}\n.btn-primary { .btn-styles(@btn-primary-bg); }\n.btn-success { .btn-styles(@btn-success-bg); }\n.btn-info { .btn-styles(@btn-info-bg); }\n.btn-warning { .btn-styles(@btn-warning-bg); }\n.btn-danger { .btn-styles(@btn-danger-bg); }\n\n\n//\n// Images\n// --------------------------------------------------\n\n.thumbnail,\n.img-thumbnail {\n .box-shadow(0 1px 2px rgba(0, 0, 0, .075));\n}\n\n\n//\n// Dropdowns\n// --------------------------------------------------\n\n.dropdown-menu > li > a:hover,\n.dropdown-menu > li > a:focus {\n #gradient > .vertical(@start-color: @dropdown-link-hover-bg; @end-color: darken(@dropdown-link-hover-bg, 5%));\n background-color: darken(@dropdown-link-hover-bg, 5%);\n}\n.dropdown-menu > .active > a,\n.dropdown-menu > .active > a:hover,\n.dropdown-menu > .active > a:focus {\n #gradient > .vertical(@start-color: @dropdown-link-active-bg; @end-color: darken(@dropdown-link-active-bg, 5%));\n background-color: darken(@dropdown-link-active-bg, 5%);\n}\n\n\n//\n// Navbar\n// --------------------------------------------------\n\n// Default navbar\n.navbar-default {\n #gradient > .vertical(@start-color: lighten(@navbar-default-bg, 10%); @end-color: @navbar-default-bg);\n .reset-filter(); // Remove gradient in IE<10 to fix bug where dropdowns don't get triggered\n border-radius: @navbar-border-radius;\n @shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 5px rgba(0, 0, 0, .075);\n .box-shadow(@shadow);\n\n .navbar-nav > .open > a,\n .navbar-nav > .active > a {\n #gradient > .vertical(@start-color: darken(@navbar-default-link-active-bg, 5%); @end-color: darken(@navbar-default-link-active-bg, 2%));\n .box-shadow(inset 0 3px 9px rgba(0, 0, 0, .075));\n }\n}\n.navbar-brand,\n.navbar-nav > li > a {\n text-shadow: 0 1px 0 rgba(255, 255, 255, .25);\n}\n\n// Inverted navbar\n.navbar-inverse {\n #gradient > .vertical(@start-color: lighten(@navbar-inverse-bg, 10%); @end-color: @navbar-inverse-bg);\n .reset-filter(); // Remove gradient in IE<10 to fix bug where dropdowns don't get triggered; see https://github.com/twbs/bootstrap/issues/10257\n border-radius: @navbar-border-radius;\n .navbar-nav > .open > a,\n .navbar-nav > .active > a {\n #gradient > .vertical(@start-color: @navbar-inverse-link-active-bg; @end-color: lighten(@navbar-inverse-link-active-bg, 2.5%));\n .box-shadow(inset 0 3px 9px rgba(0, 0, 0, .25));\n }\n\n .navbar-brand,\n .navbar-nav > li > a {\n text-shadow: 0 -1px 0 rgba(0, 0, 0, .25);\n }\n}\n\n// Undo rounded corners in static and fixed navbars\n.navbar-static-top,\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n border-radius: 0;\n}\n\n// Fix active state of dropdown items in collapsed mode\n@media (max-width: @grid-float-breakpoint-max) {\n .navbar .navbar-nav .open .dropdown-menu > .active > a {\n &,\n &:hover,\n &:focus {\n color: #fff;\n #gradient > .vertical(@start-color: @dropdown-link-active-bg; @end-color: darken(@dropdown-link-active-bg, 5%));\n }\n }\n}\n\n\n//\n// Alerts\n// --------------------------------------------------\n\n// Common styles\n.alert {\n text-shadow: 0 1px 0 rgba(255, 255, 255, .2);\n @shadow: inset 0 1px 0 rgba(255, 255, 255, .25), 0 1px 2px rgba(0, 0, 0, .05);\n .box-shadow(@shadow);\n}\n\n// Mixin for generating new styles\n.alert-styles(@color) {\n #gradient > .vertical(@start-color: @color; @end-color: darken(@color, 7.5%));\n border-color: darken(@color, 15%);\n}\n\n// Apply the mixin to the alerts\n.alert-success { .alert-styles(@alert-success-bg); }\n.alert-info { .alert-styles(@alert-info-bg); }\n.alert-warning { .alert-styles(@alert-warning-bg); }\n.alert-danger { .alert-styles(@alert-danger-bg); }\n\n\n//\n// Progress bars\n// --------------------------------------------------\n\n// Give the progress background some depth\n.progress {\n #gradient > .vertical(@start-color: darken(@progress-bg, 4%); @end-color: @progress-bg)\n}\n\n// Mixin for generating new styles\n.progress-bar-styles(@color) {\n #gradient > .vertical(@start-color: @color; @end-color: darken(@color, 10%));\n}\n\n// Apply the mixin to the progress bars\n.progress-bar { .progress-bar-styles(@progress-bar-bg); }\n.progress-bar-success { .progress-bar-styles(@progress-bar-success-bg); }\n.progress-bar-info { .progress-bar-styles(@progress-bar-info-bg); }\n.progress-bar-warning { .progress-bar-styles(@progress-bar-warning-bg); }\n.progress-bar-danger { .progress-bar-styles(@progress-bar-danger-bg); }\n\n// Reset the striped class because our mixins don't do multiple gradients and\n// the above custom styles override the new `.progress-bar-striped` in v3.2.0.\n.progress-bar-striped {\n #gradient > .striped();\n}\n\n\n//\n// List groups\n// --------------------------------------------------\n\n.list-group {\n border-radius: @border-radius-base;\n .box-shadow(0 1px 2px rgba(0, 0, 0, .075));\n}\n.list-group-item.active,\n.list-group-item.active:hover,\n.list-group-item.active:focus {\n text-shadow: 0 -1px 0 darken(@list-group-active-bg, 10%);\n #gradient > .vertical(@start-color: @list-group-active-bg; @end-color: darken(@list-group-active-bg, 7.5%));\n border-color: darken(@list-group-active-border, 7.5%);\n\n .badge {\n text-shadow: none;\n }\n}\n\n\n//\n// Panels\n// --------------------------------------------------\n\n// Common styles\n.panel {\n .box-shadow(0 1px 2px rgba(0, 0, 0, .05));\n}\n\n// Mixin for generating new styles\n.panel-heading-styles(@color) {\n #gradient > .vertical(@start-color: @color; @end-color: darken(@color, 5%));\n}\n\n// Apply the mixin to the panel headings only\n.panel-default > .panel-heading { .panel-heading-styles(@panel-default-heading-bg); }\n.panel-primary > .panel-heading { .panel-heading-styles(@panel-primary-heading-bg); }\n.panel-success > .panel-heading { .panel-heading-styles(@panel-success-heading-bg); }\n.panel-info > .panel-heading { .panel-heading-styles(@panel-info-heading-bg); }\n.panel-warning > .panel-heading { .panel-heading-styles(@panel-warning-heading-bg); }\n.panel-danger > .panel-heading { .panel-heading-styles(@panel-danger-heading-bg); }\n\n\n//\n// Wells\n// --------------------------------------------------\n\n.well {\n #gradient > .vertical(@start-color: darken(@well-bg, 5%); @end-color: @well-bg);\n border-color: darken(@well-bg, 10%);\n @shadow: inset 0 1px 3px rgba(0, 0, 0, .05), 0 1px 0 rgba(255, 255, 255, .1);\n .box-shadow(@shadow);\n}\n","// stylelint-disable indentation, property-no-vendor-prefix, selector-no-vendor-prefix\n\n// Vendor Prefixes\n//\n// All vendor mixins are deprecated as of v3.2.0 due to the introduction of\n// Autoprefixer in our Gruntfile. They have been removed in v4.\n\n// - Animations\n// - Backface visibility\n// - Box shadow\n// - Box sizing\n// - Content columns\n// - Hyphens\n// - Placeholder text\n// - Transformations\n// - Transitions\n// - User Select\n\n\n// Animations\n.animation(@animation) {\n -webkit-animation: @animation;\n -o-animation: @animation;\n animation: @animation;\n}\n.animation-name(@name) {\n -webkit-animation-name: @name;\n animation-name: @name;\n}\n.animation-duration(@duration) {\n -webkit-animation-duration: @duration;\n animation-duration: @duration;\n}\n.animation-timing-function(@timing-function) {\n -webkit-animation-timing-function: @timing-function;\n animation-timing-function: @timing-function;\n}\n.animation-delay(@delay) {\n -webkit-animation-delay: @delay;\n animation-delay: @delay;\n}\n.animation-iteration-count(@iteration-count) {\n -webkit-animation-iteration-count: @iteration-count;\n animation-iteration-count: @iteration-count;\n}\n.animation-direction(@direction) {\n -webkit-animation-direction: @direction;\n animation-direction: @direction;\n}\n.animation-fill-mode(@fill-mode) {\n -webkit-animation-fill-mode: @fill-mode;\n animation-fill-mode: @fill-mode;\n}\n\n// Backface visibility\n// Prevent browsers from flickering when using CSS 3D transforms.\n// Default value is `visible`, but can be changed to `hidden`\n\n.backface-visibility(@visibility) {\n -webkit-backface-visibility: @visibility;\n -moz-backface-visibility: @visibility;\n backface-visibility: @visibility;\n}\n\n// Drop shadows\n//\n// Note: Deprecated `.box-shadow()` as of v3.1.0 since all of Bootstrap's\n// supported browsers that have box shadow capabilities now support it.\n\n.box-shadow(@shadow) {\n -webkit-box-shadow: @shadow; // iOS <4.3 & Android <4.1\n box-shadow: @shadow;\n}\n\n// Box sizing\n.box-sizing(@boxmodel) {\n -webkit-box-sizing: @boxmodel;\n -moz-box-sizing: @boxmodel;\n box-sizing: @boxmodel;\n}\n\n// CSS3 Content Columns\n.content-columns(@column-count; @column-gap: @grid-gutter-width) {\n -webkit-column-count: @column-count;\n -moz-column-count: @column-count;\n column-count: @column-count;\n -webkit-column-gap: @column-gap;\n -moz-column-gap: @column-gap;\n column-gap: @column-gap;\n}\n\n// Optional hyphenation\n.hyphens(@mode: auto) {\n -webkit-hyphens: @mode;\n -moz-hyphens: @mode;\n -ms-hyphens: @mode; // IE10+\n -o-hyphens: @mode;\n hyphens: @mode;\n word-wrap: break-word;\n}\n\n// Placeholder text\n.placeholder(@color: @input-color-placeholder) {\n // Firefox\n &::-moz-placeholder {\n color: @color;\n opacity: 1; // Override Firefox's unusual default opacity; see https://github.com/twbs/bootstrap/pull/11526\n }\n &:-ms-input-placeholder { color: @color; } // Internet Explorer 10+\n &::-webkit-input-placeholder { color: @color; } // Safari and Chrome\n}\n\n// Transformations\n.scale(@ratio) {\n -webkit-transform: scale(@ratio);\n -ms-transform: scale(@ratio); // IE9 only\n -o-transform: scale(@ratio);\n transform: scale(@ratio);\n}\n.scale(@ratioX; @ratioY) {\n -webkit-transform: scale(@ratioX, @ratioY);\n -ms-transform: scale(@ratioX, @ratioY); // IE9 only\n -o-transform: scale(@ratioX, @ratioY);\n transform: scale(@ratioX, @ratioY);\n}\n.scaleX(@ratio) {\n -webkit-transform: scaleX(@ratio);\n -ms-transform: scaleX(@ratio); // IE9 only\n -o-transform: scaleX(@ratio);\n transform: scaleX(@ratio);\n}\n.scaleY(@ratio) {\n -webkit-transform: scaleY(@ratio);\n -ms-transform: scaleY(@ratio); // IE9 only\n -o-transform: scaleY(@ratio);\n transform: scaleY(@ratio);\n}\n.skew(@x; @y) {\n -webkit-transform: skewX(@x) skewY(@y);\n -ms-transform: skewX(@x) skewY(@y); // See https://github.com/twbs/bootstrap/issues/4885; IE9+\n -o-transform: skewX(@x) skewY(@y);\n transform: skewX(@x) skewY(@y);\n}\n.translate(@x; @y) {\n -webkit-transform: translate(@x, @y);\n -ms-transform: translate(@x, @y); // IE9 only\n -o-transform: translate(@x, @y);\n transform: translate(@x, @y);\n}\n.translate3d(@x; @y; @z) {\n -webkit-transform: translate3d(@x, @y, @z);\n transform: translate3d(@x, @y, @z);\n}\n.rotate(@degrees) {\n -webkit-transform: rotate(@degrees);\n -ms-transform: rotate(@degrees); // IE9 only\n -o-transform: rotate(@degrees);\n transform: rotate(@degrees);\n}\n.rotateX(@degrees) {\n -webkit-transform: rotateX(@degrees);\n -ms-transform: rotateX(@degrees); // IE9 only\n -o-transform: rotateX(@degrees);\n transform: rotateX(@degrees);\n}\n.rotateY(@degrees) {\n -webkit-transform: rotateY(@degrees);\n -ms-transform: rotateY(@degrees); // IE9 only\n -o-transform: rotateY(@degrees);\n transform: rotateY(@degrees);\n}\n.perspective(@perspective) {\n -webkit-perspective: @perspective;\n -moz-perspective: @perspective;\n perspective: @perspective;\n}\n.perspective-origin(@perspective) {\n -webkit-perspective-origin: @perspective;\n -moz-perspective-origin: @perspective;\n perspective-origin: @perspective;\n}\n.transform-origin(@origin) {\n -webkit-transform-origin: @origin;\n -moz-transform-origin: @origin;\n -ms-transform-origin: @origin; // IE9 only\n transform-origin: @origin;\n}\n\n\n// Transitions\n\n.transition(@transition) {\n -webkit-transition: @transition;\n -o-transition: @transition;\n transition: @transition;\n}\n.transition-property(@transition-property) {\n -webkit-transition-property: @transition-property;\n transition-property: @transition-property;\n}\n.transition-delay(@transition-delay) {\n -webkit-transition-delay: @transition-delay;\n transition-delay: @transition-delay;\n}\n.transition-duration(@transition-duration) {\n -webkit-transition-duration: @transition-duration;\n transition-duration: @transition-duration;\n}\n.transition-timing-function(@timing-function) {\n -webkit-transition-timing-function: @timing-function;\n transition-timing-function: @timing-function;\n}\n.transition-transform(@transition) {\n -webkit-transition: -webkit-transform @transition;\n -moz-transition: -moz-transform @transition;\n -o-transition: -o-transform @transition;\n transition: transform @transition;\n}\n\n\n// User select\n// For selecting text on the page\n\n.user-select(@select) {\n -webkit-user-select: @select;\n -moz-user-select: @select;\n -ms-user-select: @select; // IE10+\n user-select: @select;\n}\n","// stylelint-disable value-no-vendor-prefix, selector-max-id\n\n#gradient {\n\n // Horizontal gradient, from left to right\n //\n // Creates two color stops, start and end, by specifying a color and position for each color stop.\n // Color stops are not available in IE9 and below.\n .horizontal(@start-color: #555; @end-color: #333; @start-percent: 0%; @end-percent: 100%) {\n background-image: -webkit-linear-gradient(left, @start-color @start-percent, @end-color @end-percent); // Safari 5.1-6, Chrome 10+\n background-image: -o-linear-gradient(left, @start-color @start-percent, @end-color @end-percent); // Opera 12\n background-image: linear-gradient(to right, @start-color @start-percent, @end-color @end-percent); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=1)\", argb(@start-color), argb(@end-color))); // IE9 and down\n background-repeat: repeat-x;\n }\n\n // Vertical gradient, from top to bottom\n //\n // Creates two color stops, start and end, by specifying a color and position for each color stop.\n // Color stops are not available in IE9 and below.\n .vertical(@start-color: #555; @end-color: #333; @start-percent: 0%; @end-percent: 100%) {\n background-image: -webkit-linear-gradient(top, @start-color @start-percent, @end-color @end-percent); // Safari 5.1-6, Chrome 10+\n background-image: -o-linear-gradient(top, @start-color @start-percent, @end-color @end-percent); // Opera 12\n background-image: linear-gradient(to bottom, @start-color @start-percent, @end-color @end-percent); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)\", argb(@start-color), argb(@end-color))); // IE9 and down\n background-repeat: repeat-x;\n }\n\n .directional(@start-color: #555; @end-color: #333; @deg: 45deg) {\n background-image: -webkit-linear-gradient(@deg, @start-color, @end-color); // Safari 5.1-6, Chrome 10+\n background-image: -o-linear-gradient(@deg, @start-color, @end-color); // Opera 12\n background-image: linear-gradient(@deg, @start-color, @end-color); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n background-repeat: repeat-x;\n }\n .horizontal-three-colors(@start-color: #00b3ee; @mid-color: #7a43b6; @color-stop: 50%; @end-color: #c3325f) {\n background-image: -webkit-linear-gradient(left, @start-color, @mid-color @color-stop, @end-color);\n background-image: -o-linear-gradient(left, @start-color, @mid-color @color-stop, @end-color);\n background-image: linear-gradient(to right, @start-color, @mid-color @color-stop, @end-color);\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=1)\", argb(@start-color), argb(@end-color))); // IE9 and down, gets no color-stop at all for proper fallback\n background-repeat: no-repeat;\n }\n .vertical-three-colors(@start-color: #00b3ee; @mid-color: #7a43b6; @color-stop: 50%; @end-color: #c3325f) {\n background-image: -webkit-linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n background-image: -o-linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n background-image: linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)\", argb(@start-color), argb(@end-color))); // IE9 and down, gets no color-stop at all for proper fallback\n background-repeat: no-repeat;\n }\n .radial(@inner-color: #555; @outer-color: #333) {\n background-image: -webkit-radial-gradient(circle, @inner-color, @outer-color);\n background-image: radial-gradient(circle, @inner-color, @outer-color);\n background-repeat: no-repeat;\n }\n .striped(@color: rgba(255, 255, 255, .15); @angle: 45deg) {\n background-image: -webkit-linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n background-image: linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n }\n}\n","// Reset filters for IE\n//\n// When you need to remove a gradient background, do not forget to use this to reset\n// the IE filter for IE9 and below.\n\n.reset-filter() {\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(enabled = false)\"));\n}\n"]} \ No newline at end of file diff --git a/xinda-plugs/xinda-oauth/src/main/resources/static/oauth/css/bootstrap-theme.min.css b/xinda-plugs/xinda-oauth/src/main/resources/static/oauth/css/bootstrap-theme.min.css new file mode 100644 index 0000000..2a69f48 --- /dev/null +++ b/xinda-plugs/xinda-oauth/src/main/resources/static/oauth/css/bootstrap-theme.min.css @@ -0,0 +1,6 @@ +/*! + * Bootstrap v3.4.1 (https://getbootstrap.com/) + * Copyright 2011-2019 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + */.btn-danger,.btn-default,.btn-info,.btn-primary,.btn-success,.btn-warning{text-shadow:0 -1px 0 rgba(0,0,0,.2);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 1px rgba(0,0,0,.075)}.btn-danger.active,.btn-danger:active,.btn-default.active,.btn-default:active,.btn-info.active,.btn-info:active,.btn-primary.active,.btn-primary:active,.btn-success.active,.btn-success:active,.btn-warning.active,.btn-warning:active{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn-danger.disabled,.btn-danger[disabled],.btn-default.disabled,.btn-default[disabled],.btn-info.disabled,.btn-info[disabled],.btn-primary.disabled,.btn-primary[disabled],.btn-success.disabled,.btn-success[disabled],.btn-warning.disabled,.btn-warning[disabled],fieldset[disabled] .btn-danger,fieldset[disabled] .btn-default,fieldset[disabled] .btn-info,fieldset[disabled] .btn-primary,fieldset[disabled] .btn-success,fieldset[disabled] .btn-warning{-webkit-box-shadow:none;box-shadow:none}.btn-danger .badge,.btn-default .badge,.btn-info .badge,.btn-primary .badge,.btn-success .badge,.btn-warning .badge{text-shadow:none}.btn.active,.btn:active{background-image:none}.btn-default{background-image:-webkit-linear-gradient(top,#fff 0,#e0e0e0 100%);background-image:-o-linear-gradient(top,#fff 0,#e0e0e0 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e0e0e0));background-image:linear-gradient(to bottom,#fff 0,#e0e0e0 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe0e0e0', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#dbdbdb;text-shadow:0 1px 0 #fff;border-color:#ccc}.btn-default:focus,.btn-default:hover{background-color:#e0e0e0;background-position:0 -15px}.btn-default.active,.btn-default:active{background-color:#e0e0e0;border-color:#dbdbdb}.btn-default.disabled,.btn-default.disabled.active,.btn-default.disabled.focus,.btn-default.disabled:active,.btn-default.disabled:focus,.btn-default.disabled:hover,.btn-default[disabled],.btn-default[disabled].active,.btn-default[disabled].focus,.btn-default[disabled]:active,.btn-default[disabled]:focus,.btn-default[disabled]:hover,fieldset[disabled] .btn-default,fieldset[disabled] .btn-default.active,fieldset[disabled] .btn-default.focus,fieldset[disabled] .btn-default:active,fieldset[disabled] .btn-default:focus,fieldset[disabled] .btn-default:hover{background-color:#e0e0e0;background-image:none}.btn-primary{background-image:-webkit-linear-gradient(top,#337ab7 0,#265a88 100%);background-image:-o-linear-gradient(top,#337ab7 0,#265a88 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#265a88));background-image:linear-gradient(to bottom,#337ab7 0,#265a88 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff265a88', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#245580}.btn-primary:focus,.btn-primary:hover{background-color:#265a88;background-position:0 -15px}.btn-primary.active,.btn-primary:active{background-color:#265a88;border-color:#245580}.btn-primary.disabled,.btn-primary.disabled.active,.btn-primary.disabled.focus,.btn-primary.disabled:active,.btn-primary.disabled:focus,.btn-primary.disabled:hover,.btn-primary[disabled],.btn-primary[disabled].active,.btn-primary[disabled].focus,.btn-primary[disabled]:active,.btn-primary[disabled]:focus,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary,fieldset[disabled] .btn-primary.active,fieldset[disabled] .btn-primary.focus,fieldset[disabled] .btn-primary:active,fieldset[disabled] .btn-primary:focus,fieldset[disabled] .btn-primary:hover{background-color:#265a88;background-image:none}.btn-success{background-image:-webkit-linear-gradient(top,#5cb85c 0,#419641 100%);background-image:-o-linear-gradient(top,#5cb85c 0,#419641 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#5cb85c),to(#419641));background-image:linear-gradient(to bottom,#5cb85c 0,#419641 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff419641', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#3e8f3e}.btn-success:focus,.btn-success:hover{background-color:#419641;background-position:0 -15px}.btn-success.active,.btn-success:active{background-color:#419641;border-color:#3e8f3e}.btn-success.disabled,.btn-success.disabled.active,.btn-success.disabled.focus,.btn-success.disabled:active,.btn-success.disabled:focus,.btn-success.disabled:hover,.btn-success[disabled],.btn-success[disabled].active,.btn-success[disabled].focus,.btn-success[disabled]:active,.btn-success[disabled]:focus,.btn-success[disabled]:hover,fieldset[disabled] .btn-success,fieldset[disabled] .btn-success.active,fieldset[disabled] .btn-success.focus,fieldset[disabled] .btn-success:active,fieldset[disabled] .btn-success:focus,fieldset[disabled] .btn-success:hover{background-color:#419641;background-image:none}.btn-info{background-image:-webkit-linear-gradient(top,#5bc0de 0,#2aabd2 100%);background-image:-o-linear-gradient(top,#5bc0de 0,#2aabd2 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#5bc0de),to(#2aabd2));background-image:linear-gradient(to bottom,#5bc0de 0,#2aabd2 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2aabd2', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#28a4c9}.btn-info:focus,.btn-info:hover{background-color:#2aabd2;background-position:0 -15px}.btn-info.active,.btn-info:active{background-color:#2aabd2;border-color:#28a4c9}.btn-info.disabled,.btn-info.disabled.active,.btn-info.disabled.focus,.btn-info.disabled:active,.btn-info.disabled:focus,.btn-info.disabled:hover,.btn-info[disabled],.btn-info[disabled].active,.btn-info[disabled].focus,.btn-info[disabled]:active,.btn-info[disabled]:focus,.btn-info[disabled]:hover,fieldset[disabled] .btn-info,fieldset[disabled] .btn-info.active,fieldset[disabled] .btn-info.focus,fieldset[disabled] .btn-info:active,fieldset[disabled] .btn-info:focus,fieldset[disabled] .btn-info:hover{background-color:#2aabd2;background-image:none}.btn-warning{background-image:-webkit-linear-gradient(top,#f0ad4e 0,#eb9316 100%);background-image:-o-linear-gradient(top,#f0ad4e 0,#eb9316 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f0ad4e),to(#eb9316));background-image:linear-gradient(to bottom,#f0ad4e 0,#eb9316 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffeb9316', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#e38d13}.btn-warning:focus,.btn-warning:hover{background-color:#eb9316;background-position:0 -15px}.btn-warning.active,.btn-warning:active{background-color:#eb9316;border-color:#e38d13}.btn-warning.disabled,.btn-warning.disabled.active,.btn-warning.disabled.focus,.btn-warning.disabled:active,.btn-warning.disabled:focus,.btn-warning.disabled:hover,.btn-warning[disabled],.btn-warning[disabled].active,.btn-warning[disabled].focus,.btn-warning[disabled]:active,.btn-warning[disabled]:focus,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning,fieldset[disabled] .btn-warning.active,fieldset[disabled] .btn-warning.focus,fieldset[disabled] .btn-warning:active,fieldset[disabled] .btn-warning:focus,fieldset[disabled] .btn-warning:hover{background-color:#eb9316;background-image:none}.btn-danger{background-image:-webkit-linear-gradient(top,#d9534f 0,#c12e2a 100%);background-image:-o-linear-gradient(top,#d9534f 0,#c12e2a 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#d9534f),to(#c12e2a));background-image:linear-gradient(to bottom,#d9534f 0,#c12e2a 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc12e2a', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#b92c28}.btn-danger:focus,.btn-danger:hover{background-color:#c12e2a;background-position:0 -15px}.btn-danger.active,.btn-danger:active{background-color:#c12e2a;border-color:#b92c28}.btn-danger.disabled,.btn-danger.disabled.active,.btn-danger.disabled.focus,.btn-danger.disabled:active,.btn-danger.disabled:focus,.btn-danger.disabled:hover,.btn-danger[disabled],.btn-danger[disabled].active,.btn-danger[disabled].focus,.btn-danger[disabled]:active,.btn-danger[disabled]:focus,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger,fieldset[disabled] .btn-danger.active,fieldset[disabled] .btn-danger.focus,fieldset[disabled] .btn-danger:active,fieldset[disabled] .btn-danger:focus,fieldset[disabled] .btn-danger:hover{background-color:#c12e2a;background-image:none}.img-thumbnail,.thumbnail{-webkit-box-shadow:0 1px 2px rgba(0,0,0,.075);box-shadow:0 1px 2px rgba(0,0,0,.075)}.dropdown-menu>li>a:focus,.dropdown-menu>li>a:hover{background-image:-webkit-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);background-image:-o-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#e8e8e8));background-image:linear-gradient(to bottom,#f5f5f5 0,#e8e8e8 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);background-repeat:repeat-x;background-color:#e8e8e8}.dropdown-menu>.active>a,.dropdown-menu>.active>a:focus,.dropdown-menu>.active>a:hover{background-image:-webkit-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-o-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#2e6da4));background-image:linear-gradient(to bottom,#337ab7 0,#2e6da4 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);background-repeat:repeat-x;background-color:#2e6da4}.navbar-default{background-image:-webkit-linear-gradient(top,#fff 0,#f8f8f8 100%);background-image:-o-linear-gradient(top,#fff 0,#f8f8f8 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#f8f8f8));background-image:linear-gradient(to bottom,#fff 0,#f8f8f8 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff8f8f8', GradientType=0);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);border-radius:4px;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 5px rgba(0,0,0,.075);box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 5px rgba(0,0,0,.075)}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.open>a{background-image:-webkit-linear-gradient(top,#dbdbdb 0,#e2e2e2 100%);background-image:-o-linear-gradient(top,#dbdbdb 0,#e2e2e2 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#dbdbdb),to(#e2e2e2));background-image:linear-gradient(to bottom,#dbdbdb 0,#e2e2e2 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdbdbdb', endColorstr='#ffe2e2e2', GradientType=0);background-repeat:repeat-x;-webkit-box-shadow:inset 0 3px 9px rgba(0,0,0,.075);box-shadow:inset 0 3px 9px rgba(0,0,0,.075)}.navbar-brand,.navbar-nav>li>a{text-shadow:0 1px 0 rgba(255,255,255,.25)}.navbar-inverse{background-image:-webkit-linear-gradient(top,#3c3c3c 0,#222 100%);background-image:-o-linear-gradient(top,#3c3c3c 0,#222 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#3c3c3c),to(#222));background-image:linear-gradient(to bottom,#3c3c3c 0,#222 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c', endColorstr='#ff222222', GradientType=0);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);border-radius:4px}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.open>a{background-image:-webkit-linear-gradient(top,#080808 0,#0f0f0f 100%);background-image:-o-linear-gradient(top,#080808 0,#0f0f0f 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#080808),to(#0f0f0f));background-image:linear-gradient(to bottom,#080808 0,#0f0f0f 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff080808', endColorstr='#ff0f0f0f', GradientType=0);background-repeat:repeat-x;-webkit-box-shadow:inset 0 3px 9px rgba(0,0,0,.25);box-shadow:inset 0 3px 9px rgba(0,0,0,.25)}.navbar-inverse .navbar-brand,.navbar-inverse .navbar-nav>li>a{text-shadow:0 -1px 0 rgba(0,0,0,.25)}.navbar-fixed-bottom,.navbar-fixed-top,.navbar-static-top{border-radius:0}@media (max-width:767px){.navbar .navbar-nav .open .dropdown-menu>.active>a,.navbar .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar .navbar-nav .open .dropdown-menu>.active>a:hover{color:#fff;background-image:-webkit-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-o-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#2e6da4));background-image:linear-gradient(to bottom,#337ab7 0,#2e6da4 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);background-repeat:repeat-x}}.alert{text-shadow:0 1px 0 rgba(255,255,255,.2);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.25),0 1px 2px rgba(0,0,0,.05);box-shadow:inset 0 1px 0 rgba(255,255,255,.25),0 1px 2px rgba(0,0,0,.05)}.alert-success{background-image:-webkit-linear-gradient(top,#dff0d8 0,#c8e5bc 100%);background-image:-o-linear-gradient(top,#dff0d8 0,#c8e5bc 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#dff0d8),to(#c8e5bc));background-image:linear-gradient(to bottom,#dff0d8 0,#c8e5bc 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffc8e5bc', GradientType=0);background-repeat:repeat-x;border-color:#b2dba1}.alert-info{background-image:-webkit-linear-gradient(top,#d9edf7 0,#b9def0 100%);background-image:-o-linear-gradient(top,#d9edf7 0,#b9def0 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#d9edf7),to(#b9def0));background-image:linear-gradient(to bottom,#d9edf7 0,#b9def0 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffb9def0', GradientType=0);background-repeat:repeat-x;border-color:#9acfea}.alert-warning{background-image:-webkit-linear-gradient(top,#fcf8e3 0,#f8efc0 100%);background-image:-o-linear-gradient(top,#fcf8e3 0,#f8efc0 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#fcf8e3),to(#f8efc0));background-image:linear-gradient(to bottom,#fcf8e3 0,#f8efc0 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fff8efc0', GradientType=0);background-repeat:repeat-x;border-color:#f5e79e}.alert-danger{background-image:-webkit-linear-gradient(top,#f2dede 0,#e7c3c3 100%);background-image:-o-linear-gradient(top,#f2dede 0,#e7c3c3 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f2dede),to(#e7c3c3));background-image:linear-gradient(to bottom,#f2dede 0,#e7c3c3 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffe7c3c3', GradientType=0);background-repeat:repeat-x;border-color:#dca7a7}.progress{background-image:-webkit-linear-gradient(top,#ebebeb 0,#f5f5f5 100%);background-image:-o-linear-gradient(top,#ebebeb 0,#f5f5f5 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#ebebeb),to(#f5f5f5));background-image:linear-gradient(to bottom,#ebebeb 0,#f5f5f5 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff5f5f5', GradientType=0);background-repeat:repeat-x}.progress-bar{background-image:-webkit-linear-gradient(top,#337ab7 0,#286090 100%);background-image:-o-linear-gradient(top,#337ab7 0,#286090 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#286090));background-image:linear-gradient(to bottom,#337ab7 0,#286090 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff286090', GradientType=0);background-repeat:repeat-x}.progress-bar-success{background-image:-webkit-linear-gradient(top,#5cb85c 0,#449d44 100%);background-image:-o-linear-gradient(top,#5cb85c 0,#449d44 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#5cb85c),to(#449d44));background-image:linear-gradient(to bottom,#5cb85c 0,#449d44 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0);background-repeat:repeat-x}.progress-bar-info{background-image:-webkit-linear-gradient(top,#5bc0de 0,#31b0d5 100%);background-image:-o-linear-gradient(top,#5bc0de 0,#31b0d5 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#5bc0de),to(#31b0d5));background-image:linear-gradient(to bottom,#5bc0de 0,#31b0d5 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0);background-repeat:repeat-x}.progress-bar-warning{background-image:-webkit-linear-gradient(top,#f0ad4e 0,#ec971f 100%);background-image:-o-linear-gradient(top,#f0ad4e 0,#ec971f 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f0ad4e),to(#ec971f));background-image:linear-gradient(to bottom,#f0ad4e 0,#ec971f 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0);background-repeat:repeat-x}.progress-bar-danger{background-image:-webkit-linear-gradient(top,#d9534f 0,#c9302c 100%);background-image:-o-linear-gradient(top,#d9534f 0,#c9302c 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#d9534f),to(#c9302c));background-image:linear-gradient(to bottom,#d9534f 0,#c9302c 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0);background-repeat:repeat-x}.progress-bar-striped{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.list-group{border-radius:4px;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.075);box-shadow:0 1px 2px rgba(0,0,0,.075)}.list-group-item.active,.list-group-item.active:focus,.list-group-item.active:hover{text-shadow:0 -1px 0 #286090;background-image:-webkit-linear-gradient(top,#337ab7 0,#2b669a 100%);background-image:-o-linear-gradient(top,#337ab7 0,#2b669a 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#2b669a));background-image:linear-gradient(to bottom,#337ab7 0,#2b669a 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2b669a', GradientType=0);background-repeat:repeat-x;border-color:#2b669a}.list-group-item.active .badge,.list-group-item.active:focus .badge,.list-group-item.active:hover .badge{text-shadow:none}.panel{-webkit-box-shadow:0 1px 2px rgba(0,0,0,.05);box-shadow:0 1px 2px rgba(0,0,0,.05)}.panel-default>.panel-heading{background-image:-webkit-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);background-image:-o-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#e8e8e8));background-image:linear-gradient(to bottom,#f5f5f5 0,#e8e8e8 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);background-repeat:repeat-x}.panel-primary>.panel-heading{background-image:-webkit-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-o-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#2e6da4));background-image:linear-gradient(to bottom,#337ab7 0,#2e6da4 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);background-repeat:repeat-x}.panel-success>.panel-heading{background-image:-webkit-linear-gradient(top,#dff0d8 0,#d0e9c6 100%);background-image:-o-linear-gradient(top,#dff0d8 0,#d0e9c6 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#dff0d8),to(#d0e9c6));background-image:linear-gradient(to bottom,#dff0d8 0,#d0e9c6 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffd0e9c6', GradientType=0);background-repeat:repeat-x}.panel-info>.panel-heading{background-image:-webkit-linear-gradient(top,#d9edf7 0,#c4e3f3 100%);background-image:-o-linear-gradient(top,#d9edf7 0,#c4e3f3 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#d9edf7),to(#c4e3f3));background-image:linear-gradient(to bottom,#d9edf7 0,#c4e3f3 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffc4e3f3', GradientType=0);background-repeat:repeat-x}.panel-warning>.panel-heading{background-image:-webkit-linear-gradient(top,#fcf8e3 0,#faf2cc 100%);background-image:-o-linear-gradient(top,#fcf8e3 0,#faf2cc 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#fcf8e3),to(#faf2cc));background-image:linear-gradient(to bottom,#fcf8e3 0,#faf2cc 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fffaf2cc', GradientType=0);background-repeat:repeat-x}.panel-danger>.panel-heading{background-image:-webkit-linear-gradient(top,#f2dede 0,#ebcccc 100%);background-image:-o-linear-gradient(top,#f2dede 0,#ebcccc 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f2dede),to(#ebcccc));background-image:linear-gradient(to bottom,#f2dede 0,#ebcccc 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffebcccc', GradientType=0);background-repeat:repeat-x}.well{background-image:-webkit-linear-gradient(top,#e8e8e8 0,#f5f5f5 100%);background-image:-o-linear-gradient(top,#e8e8e8 0,#f5f5f5 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#e8e8e8),to(#f5f5f5));background-image:linear-gradient(to bottom,#e8e8e8 0,#f5f5f5 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8', endColorstr='#fff5f5f5', GradientType=0);background-repeat:repeat-x;border-color:#dcdcdc;-webkit-box-shadow:inset 0 1px 3px rgba(0,0,0,.05),0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 3px rgba(0,0,0,.05),0 1px 0 rgba(255,255,255,.1)} +/*# sourceMappingURL=bootstrap-theme.min.css.map */ \ No newline at end of file diff --git a/xinda-plugs/xinda-oauth/src/main/resources/static/oauth/css/bootstrap-theme.min.css.map b/xinda-plugs/xinda-oauth/src/main/resources/static/oauth/css/bootstrap-theme.min.css.map new file mode 100644 index 0000000..5d75106 --- /dev/null +++ b/xinda-plugs/xinda-oauth/src/main/resources/static/oauth/css/bootstrap-theme.min.css.map @@ -0,0 +1 @@ +{"version":3,"sources":["bootstrap-theme.css","dist/css/bootstrap-theme.css","less/theme.less","less/mixins/vendor-prefixes.less","less/mixins/gradients.less","less/mixins/reset-filter.less"],"names":[],"mappings":"AAAA;;;;ACUA,YCWA,aDbA,UAFA,aACA,aAEA,aCkBE,YAAA,EAAA,KAAA,EAAA,eC2CA,mBAAA,MAAA,EAAA,IAAA,EAAA,qBAAA,CAAA,EAAA,IAAA,IAAA,iBACQ,WAAA,MAAA,EAAA,IAAA,EAAA,qBAAA,CAAA,EAAA,IAAA,IAAA,iBF7CV,mBANA,mBACA,oBCWE,oBDRF,iBANA,iBAIA,oBANA,oBAOA,oBANA,oBAQA,oBANA,oBEmDE,mBAAA,MAAA,EAAA,IAAA,IAAA,iBACQ,WAAA,MAAA,EAAA,IAAA,IAAA,iBFpCV,qBAMA,sBCJE,sBDDF,uBAHA,mBAMA,oBARA,sBAMA,uBALA,sBAMA,uBAJA,sBAMA,uBAOA,+BALA,gCAGA,6BAFA,gCACA,gCAEA,gCEwBE,mBAAA,KACQ,WAAA,KFfV,mBCnCA,oBDiCA,iBAFA,oBACA,oBAEA,oBCXI,YAAA,KDgBJ,YCyBE,YAEE,iBAAA,KAKJ,aEvEI,iBAAA,iDACA,iBAAA,4CACA,iBAAA,qEAAA,iBAAA,+CACA,OAAA,+GClBF,OAAA,0DH8CA,kBAAA,SACA,aAAA,QAyCA,YAAA,EAAA,IAAA,EAAA,KACA,aAAA,KDnBF,mBCrBE,mBAEE,iBAAA,QACA,oBAAA,EAAA,MDuBJ,oBCpBE,oBAEE,iBAAA,QACA,aAAA,QAMA,sBD8BJ,6BANA,4BAGA,6BANA,4BAHA,4BAFA,uBAeA,8BANA,6BAGA,8BANA,6BAHA,6BAFA,gCAeA,uCANA,sCAGA,uCANA,sCAHA,sCCdM,iBAAA,QACA,iBAAA,KAoBN,aE5EI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDACA,OAAA,+GClBF,OAAA,0DH8CA,kBAAA,SACA,aAAA,QDgEF,mBC9DE,mBAEE,iBAAA,QACA,oBAAA,EAAA,MDgEJ,oBC7DE,oBAEE,iBAAA,QACA,aAAA,QAMA,sBDuEJ,6BANA,4BAGA,6BANA,4BAHA,4BAFA,uBAeA,8BANA,6BAGA,8BANA,6BAHA,6BAFA,gCAeA,uCANA,sCAGA,uCANA,sCAHA,sCCvDM,iBAAA,QACA,iBAAA,KAqBN,aE7EI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDACA,OAAA,+GClBF,OAAA,0DH8CA,kBAAA,SACA,aAAA,QDyGF,mBCvGE,mBAEE,iBAAA,QACA,oBAAA,EAAA,MDyGJ,oBCtGE,oBAEE,iBAAA,QACA,aAAA,QAMA,sBDgHJ,6BANA,4BAGA,6BANA,4BAHA,4BAFA,uBAeA,8BANA,6BAGA,8BANA,6BAHA,6BAFA,gCAeA,uCANA,sCAGA,uCANA,sCAHA,sCChGM,iBAAA,QACA,iBAAA,KAsBN,UE9EI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDACA,OAAA,+GClBF,OAAA,0DH8CA,kBAAA,SACA,aAAA,QDkJF,gBChJE,gBAEE,iBAAA,QACA,oBAAA,EAAA,MDkJJ,iBC/IE,iBAEE,iBAAA,QACA,aAAA,QAMA,mBDyJJ,0BANA,yBAGA,0BANA,yBAHA,yBAFA,oBAeA,2BANA,0BAGA,2BANA,0BAHA,0BAFA,6BAeA,oCANA,mCAGA,oCANA,mCAHA,mCCzIM,iBAAA,QACA,iBAAA,KAuBN,aE/EI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDACA,OAAA,+GClBF,OAAA,0DH8CA,kBAAA,SACA,aAAA,QD2LF,mBCzLE,mBAEE,iBAAA,QACA,oBAAA,EAAA,MD2LJ,oBCxLE,oBAEE,iBAAA,QACA,aAAA,QAMA,sBDkMJ,6BANA,4BAGA,6BANA,4BAHA,4BAFA,uBAeA,8BANA,6BAGA,8BANA,6BAHA,6BAFA,gCAeA,uCANA,sCAGA,uCANA,sCAHA,sCClLM,iBAAA,QACA,iBAAA,KAwBN,YEhFI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDACA,OAAA,+GClBF,OAAA,0DH8CA,kBAAA,SACA,aAAA,QDoOF,kBClOE,kBAEE,iBAAA,QACA,oBAAA,EAAA,MDoOJ,mBCjOE,mBAEE,iBAAA,QACA,aAAA,QAMA,qBD2OJ,4BANA,2BAGA,4BANA,2BAHA,2BAFA,sBAeA,6BANA,4BAGA,6BANA,4BAHA,4BAFA,+BAeA,sCANA,qCAGA,sCANA,qCAHA,qCC3NM,iBAAA,QACA,iBAAA,KD2ON,eC5MA,WCtCE,mBAAA,EAAA,IAAA,IAAA,iBACQ,WAAA,EAAA,IAAA,IAAA,iBFsPV,0BCvMA,0BEjGI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDACA,OAAA,+GACA,kBAAA,SFgGF,iBAAA,QAEF,yBD6MA,+BADA,+BGlTI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDACA,OAAA,+GACA,kBAAA,SFsGF,iBAAA,QASF,gBEnHI,iBAAA,iDACA,iBAAA,4CACA,iBAAA,qEAAA,iBAAA,+CACA,OAAA,+GACA,kBAAA,SCnBF,OAAA,0DHqIA,cAAA,ICrEA,mBAAA,MAAA,EAAA,IAAA,EAAA,qBAAA,CAAA,EAAA,IAAA,IAAA,iBACQ,WAAA,MAAA,EAAA,IAAA,EAAA,qBAAA,CAAA,EAAA,IAAA,IAAA,iBFuRV,sCCtNA,oCEnHI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDACA,OAAA,+GACA,kBAAA,SD6CF,mBAAA,MAAA,EAAA,IAAA,IAAA,iBACQ,WAAA,MAAA,EAAA,IAAA,IAAA,iBD8EV,cDoNA,iBClNE,YAAA,EAAA,IAAA,EAAA,sBAIF,gBEtII,iBAAA,iDACA,iBAAA,4CACA,iBAAA,qEAAA,iBAAA,+CACA,OAAA,+GACA,kBAAA,SCnBF,OAAA,0DHwJA,cAAA,IDyNF,sCC5NA,oCEtII,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDACA,OAAA,+GACA,kBAAA,SD6CF,mBAAA,MAAA,EAAA,IAAA,IAAA,gBACQ,WAAA,MAAA,EAAA,IAAA,IAAA,gBDoFV,8BDuOA,iCC3NI,YAAA,EAAA,KAAA,EAAA,gBDgOJ,qBADA,kBC1NA,mBAGE,cAAA,EAIF,yBAEI,mDDwNF,yDADA,yDCpNI,MAAA,KEnKF,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDACA,OAAA,+GACA,kBAAA,UF2KJ,OACE,YAAA,EAAA,IAAA,EAAA,qBC/HA,mBAAA,MAAA,EAAA,IAAA,EAAA,qBAAA,CAAA,EAAA,IAAA,IAAA,gBACQ,WAAA,MAAA,EAAA,IAAA,EAAA,qBAAA,CAAA,EAAA,IAAA,IAAA,gBD0IV,eE5LI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDACA,OAAA,+GACA,kBAAA,SFoLF,aAAA,QAKF,YE7LI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDACA,OAAA,+GACA,kBAAA,SFoLF,aAAA,QAMF,eE9LI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDACA,OAAA,+GACA,kBAAA,SFoLF,aAAA,QAOF,cE/LI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDACA,OAAA,+GACA,kBAAA,SFoLF,aAAA,QAeF,UEvMI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDACA,OAAA,+GACA,kBAAA,SF6MJ,cEjNI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDACA,OAAA,+GACA,kBAAA,SF8MJ,sBElNI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDACA,OAAA,+GACA,kBAAA,SF+MJ,mBEnNI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDACA,OAAA,+GACA,kBAAA,SFgNJ,sBEpNI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDACA,OAAA,+GACA,kBAAA,SFiNJ,qBErNI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDACA,OAAA,+GACA,kBAAA,SFqNJ,sBExLI,iBAAA,yKACA,iBAAA,oKACA,iBAAA,iKF+LJ,YACE,cAAA,IClLA,mBAAA,EAAA,IAAA,IAAA,iBACQ,WAAA,EAAA,IAAA,IAAA,iBDoLV,wBDiQA,8BADA,8BC7PE,YAAA,EAAA,KAAA,EAAA,QEzOE,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDACA,OAAA,+GACA,kBAAA,SFuOF,aAAA,QALF,+BD6QA,qCADA,qCCpQI,YAAA,KAUJ,OCvME,mBAAA,EAAA,IAAA,IAAA,gBACQ,WAAA,EAAA,IAAA,IAAA,gBDgNV,8BElQI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDACA,OAAA,+GACA,kBAAA,SF+PJ,8BEnQI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDACA,OAAA,+GACA,kBAAA,SFgQJ,8BEpQI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDACA,OAAA,+GACA,kBAAA,SFiQJ,2BErQI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDACA,OAAA,+GACA,kBAAA,SFkQJ,8BEtQI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDACA,OAAA,+GACA,kBAAA,SFmQJ,6BEvQI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDACA,OAAA,+GACA,kBAAA,SF0QJ,ME9QI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDACA,OAAA,+GACA,kBAAA,SF4QF,aAAA,QC/NA,mBAAA,MAAA,EAAA,IAAA,IAAA,eAAA,CAAA,EAAA,IAAA,EAAA,qBACQ,WAAA,MAAA,EAAA,IAAA,IAAA,eAAA,CAAA,EAAA,IAAA,EAAA","sourcesContent":["/*!\n * Bootstrap v3.4.1 (https://getbootstrap.com/)\n * Copyright 2011-2019 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */\n.btn-default,\n.btn-primary,\n.btn-success,\n.btn-info,\n.btn-warning,\n.btn-danger {\n text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.2);\n -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 1px rgba(0, 0, 0, 0.075);\n box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 1px rgba(0, 0, 0, 0.075);\n}\n.btn-default:active,\n.btn-primary:active,\n.btn-success:active,\n.btn-info:active,\n.btn-warning:active,\n.btn-danger:active,\n.btn-default.active,\n.btn-primary.active,\n.btn-success.active,\n.btn-info.active,\n.btn-warning.active,\n.btn-danger.active {\n -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n}\n.btn-default.disabled,\n.btn-primary.disabled,\n.btn-success.disabled,\n.btn-info.disabled,\n.btn-warning.disabled,\n.btn-danger.disabled,\n.btn-default[disabled],\n.btn-primary[disabled],\n.btn-success[disabled],\n.btn-info[disabled],\n.btn-warning[disabled],\n.btn-danger[disabled],\nfieldset[disabled] .btn-default,\nfieldset[disabled] .btn-primary,\nfieldset[disabled] .btn-success,\nfieldset[disabled] .btn-info,\nfieldset[disabled] .btn-warning,\nfieldset[disabled] .btn-danger {\n -webkit-box-shadow: none;\n box-shadow: none;\n}\n.btn-default .badge,\n.btn-primary .badge,\n.btn-success .badge,\n.btn-info .badge,\n.btn-warning .badge,\n.btn-danger .badge {\n text-shadow: none;\n}\n.btn:active,\n.btn.active {\n background-image: none;\n}\n.btn-default {\n background-image: -webkit-linear-gradient(top, #fff 0%, #e0e0e0 100%);\n background-image: -o-linear-gradient(top, #fff 0%, #e0e0e0 100%);\n background-image: linear-gradient(to bottom, #fff 0%, #e0e0e0 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe0e0e0', GradientType=0);\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n background-repeat: repeat-x;\n border-color: #dbdbdb;\n text-shadow: 0 1px 0 #fff;\n border-color: #ccc;\n}\n.btn-default:hover,\n.btn-default:focus {\n background-color: #e0e0e0;\n background-position: 0 -15px;\n}\n.btn-default:active,\n.btn-default.active {\n background-color: #e0e0e0;\n border-color: #dbdbdb;\n}\n.btn-default.disabled,\n.btn-default[disabled],\nfieldset[disabled] .btn-default,\n.btn-default.disabled:hover,\n.btn-default[disabled]:hover,\nfieldset[disabled] .btn-default:hover,\n.btn-default.disabled:focus,\n.btn-default[disabled]:focus,\nfieldset[disabled] .btn-default:focus,\n.btn-default.disabled.focus,\n.btn-default[disabled].focus,\nfieldset[disabled] .btn-default.focus,\n.btn-default.disabled:active,\n.btn-default[disabled]:active,\nfieldset[disabled] .btn-default:active,\n.btn-default.disabled.active,\n.btn-default[disabled].active,\nfieldset[disabled] .btn-default.active {\n background-color: #e0e0e0;\n background-image: none;\n}\n.btn-primary {\n background-image: -webkit-linear-gradient(top, #337ab7 0%, #265a88 100%);\n background-image: -o-linear-gradient(top, #337ab7 0%, #265a88 100%);\n background-image: linear-gradient(to bottom, #337ab7 0%, #265a88 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff265a88', GradientType=0);\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n background-repeat: repeat-x;\n border-color: #245580;\n}\n.btn-primary:hover,\n.btn-primary:focus {\n background-color: #265a88;\n background-position: 0 -15px;\n}\n.btn-primary:active,\n.btn-primary.active {\n background-color: #265a88;\n border-color: #245580;\n}\n.btn-primary.disabled,\n.btn-primary[disabled],\nfieldset[disabled] .btn-primary,\n.btn-primary.disabled:hover,\n.btn-primary[disabled]:hover,\nfieldset[disabled] .btn-primary:hover,\n.btn-primary.disabled:focus,\n.btn-primary[disabled]:focus,\nfieldset[disabled] .btn-primary:focus,\n.btn-primary.disabled.focus,\n.btn-primary[disabled].focus,\nfieldset[disabled] .btn-primary.focus,\n.btn-primary.disabled:active,\n.btn-primary[disabled]:active,\nfieldset[disabled] .btn-primary:active,\n.btn-primary.disabled.active,\n.btn-primary[disabled].active,\nfieldset[disabled] .btn-primary.active {\n background-color: #265a88;\n background-image: none;\n}\n.btn-success {\n background-image: -webkit-linear-gradient(top, #5cb85c 0%, #419641 100%);\n background-image: -o-linear-gradient(top, #5cb85c 0%, #419641 100%);\n background-image: linear-gradient(to bottom, #5cb85c 0%, #419641 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff419641', GradientType=0);\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n background-repeat: repeat-x;\n border-color: #3e8f3e;\n}\n.btn-success:hover,\n.btn-success:focus {\n background-color: #419641;\n background-position: 0 -15px;\n}\n.btn-success:active,\n.btn-success.active {\n background-color: #419641;\n border-color: #3e8f3e;\n}\n.btn-success.disabled,\n.btn-success[disabled],\nfieldset[disabled] .btn-success,\n.btn-success.disabled:hover,\n.btn-success[disabled]:hover,\nfieldset[disabled] .btn-success:hover,\n.btn-success.disabled:focus,\n.btn-success[disabled]:focus,\nfieldset[disabled] .btn-success:focus,\n.btn-success.disabled.focus,\n.btn-success[disabled].focus,\nfieldset[disabled] .btn-success.focus,\n.btn-success.disabled:active,\n.btn-success[disabled]:active,\nfieldset[disabled] .btn-success:active,\n.btn-success.disabled.active,\n.btn-success[disabled].active,\nfieldset[disabled] .btn-success.active {\n background-color: #419641;\n background-image: none;\n}\n.btn-info {\n background-image: -webkit-linear-gradient(top, #5bc0de 0%, #2aabd2 100%);\n background-image: -o-linear-gradient(top, #5bc0de 0%, #2aabd2 100%);\n background-image: linear-gradient(to bottom, #5bc0de 0%, #2aabd2 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2aabd2', GradientType=0);\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n background-repeat: repeat-x;\n border-color: #28a4c9;\n}\n.btn-info:hover,\n.btn-info:focus {\n background-color: #2aabd2;\n background-position: 0 -15px;\n}\n.btn-info:active,\n.btn-info.active {\n background-color: #2aabd2;\n border-color: #28a4c9;\n}\n.btn-info.disabled,\n.btn-info[disabled],\nfieldset[disabled] .btn-info,\n.btn-info.disabled:hover,\n.btn-info[disabled]:hover,\nfieldset[disabled] .btn-info:hover,\n.btn-info.disabled:focus,\n.btn-info[disabled]:focus,\nfieldset[disabled] .btn-info:focus,\n.btn-info.disabled.focus,\n.btn-info[disabled].focus,\nfieldset[disabled] .btn-info.focus,\n.btn-info.disabled:active,\n.btn-info[disabled]:active,\nfieldset[disabled] .btn-info:active,\n.btn-info.disabled.active,\n.btn-info[disabled].active,\nfieldset[disabled] .btn-info.active {\n background-color: #2aabd2;\n background-image: none;\n}\n.btn-warning {\n background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #eb9316 100%);\n background-image: -o-linear-gradient(top, #f0ad4e 0%, #eb9316 100%);\n background-image: linear-gradient(to bottom, #f0ad4e 0%, #eb9316 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffeb9316', GradientType=0);\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n background-repeat: repeat-x;\n border-color: #e38d13;\n}\n.btn-warning:hover,\n.btn-warning:focus {\n background-color: #eb9316;\n background-position: 0 -15px;\n}\n.btn-warning:active,\n.btn-warning.active {\n background-color: #eb9316;\n border-color: #e38d13;\n}\n.btn-warning.disabled,\n.btn-warning[disabled],\nfieldset[disabled] .btn-warning,\n.btn-warning.disabled:hover,\n.btn-warning[disabled]:hover,\nfieldset[disabled] .btn-warning:hover,\n.btn-warning.disabled:focus,\n.btn-warning[disabled]:focus,\nfieldset[disabled] .btn-warning:focus,\n.btn-warning.disabled.focus,\n.btn-warning[disabled].focus,\nfieldset[disabled] .btn-warning.focus,\n.btn-warning.disabled:active,\n.btn-warning[disabled]:active,\nfieldset[disabled] .btn-warning:active,\n.btn-warning.disabled.active,\n.btn-warning[disabled].active,\nfieldset[disabled] .btn-warning.active {\n background-color: #eb9316;\n background-image: none;\n}\n.btn-danger {\n background-image: -webkit-linear-gradient(top, #d9534f 0%, #c12e2a 100%);\n background-image: -o-linear-gradient(top, #d9534f 0%, #c12e2a 100%);\n background-image: linear-gradient(to bottom, #d9534f 0%, #c12e2a 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc12e2a', GradientType=0);\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n background-repeat: repeat-x;\n border-color: #b92c28;\n}\n.btn-danger:hover,\n.btn-danger:focus {\n background-color: #c12e2a;\n background-position: 0 -15px;\n}\n.btn-danger:active,\n.btn-danger.active {\n background-color: #c12e2a;\n border-color: #b92c28;\n}\n.btn-danger.disabled,\n.btn-danger[disabled],\nfieldset[disabled] .btn-danger,\n.btn-danger.disabled:hover,\n.btn-danger[disabled]:hover,\nfieldset[disabled] .btn-danger:hover,\n.btn-danger.disabled:focus,\n.btn-danger[disabled]:focus,\nfieldset[disabled] .btn-danger:focus,\n.btn-danger.disabled.focus,\n.btn-danger[disabled].focus,\nfieldset[disabled] .btn-danger.focus,\n.btn-danger.disabled:active,\n.btn-danger[disabled]:active,\nfieldset[disabled] .btn-danger:active,\n.btn-danger.disabled.active,\n.btn-danger[disabled].active,\nfieldset[disabled] .btn-danger.active {\n background-color: #c12e2a;\n background-image: none;\n}\n.thumbnail,\n.img-thumbnail {\n -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075);\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075);\n}\n.dropdown-menu > li > a:hover,\n.dropdown-menu > li > a:focus {\n background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);\n background-image: -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);\n background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);\n background-repeat: repeat-x;\n background-color: #e8e8e8;\n}\n.dropdown-menu > .active > a,\n.dropdown-menu > .active > a:hover,\n.dropdown-menu > .active > a:focus {\n background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);\n background-repeat: repeat-x;\n background-color: #2e6da4;\n}\n.navbar-default {\n background-image: -webkit-linear-gradient(top, #ffffff 0%, #f8f8f8 100%);\n background-image: -o-linear-gradient(top, #ffffff 0%, #f8f8f8 100%);\n background-image: linear-gradient(to bottom, #ffffff 0%, #f8f8f8 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff8f8f8', GradientType=0);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n border-radius: 4px;\n -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 5px rgba(0, 0, 0, 0.075);\n box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 5px rgba(0, 0, 0, 0.075);\n}\n.navbar-default .navbar-nav > .open > a,\n.navbar-default .navbar-nav > .active > a {\n background-image: -webkit-linear-gradient(top, #dbdbdb 0%, #e2e2e2 100%);\n background-image: -o-linear-gradient(top, #dbdbdb 0%, #e2e2e2 100%);\n background-image: linear-gradient(to bottom, #dbdbdb 0%, #e2e2e2 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdbdbdb', endColorstr='#ffe2e2e2', GradientType=0);\n background-repeat: repeat-x;\n -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.075);\n box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.075);\n}\n.navbar-brand,\n.navbar-nav > li > a {\n text-shadow: 0 1px 0 rgba(255, 255, 255, 0.25);\n}\n.navbar-inverse {\n background-image: -webkit-linear-gradient(top, #3c3c3c 0%, #222 100%);\n background-image: -o-linear-gradient(top, #3c3c3c 0%, #222 100%);\n background-image: linear-gradient(to bottom, #3c3c3c 0%, #222 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c', endColorstr='#ff222222', GradientType=0);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n border-radius: 4px;\n}\n.navbar-inverse .navbar-nav > .open > a,\n.navbar-inverse .navbar-nav > .active > a {\n background-image: -webkit-linear-gradient(top, #080808 0%, #0f0f0f 100%);\n background-image: -o-linear-gradient(top, #080808 0%, #0f0f0f 100%);\n background-image: linear-gradient(to bottom, #080808 0%, #0f0f0f 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff080808', endColorstr='#ff0f0f0f', GradientType=0);\n background-repeat: repeat-x;\n -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.25);\n box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.25);\n}\n.navbar-inverse .navbar-brand,\n.navbar-inverse .navbar-nav > li > a {\n text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);\n}\n.navbar-static-top,\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n border-radius: 0;\n}\n@media (max-width: 767px) {\n .navbar .navbar-nav .open .dropdown-menu > .active > a,\n .navbar .navbar-nav .open .dropdown-menu > .active > a:hover,\n .navbar .navbar-nav .open .dropdown-menu > .active > a:focus {\n color: #fff;\n background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);\n background-repeat: repeat-x;\n }\n}\n.alert {\n text-shadow: 0 1px 0 rgba(255, 255, 255, 0.2);\n -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25), 0 1px 2px rgba(0, 0, 0, 0.05);\n box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25), 0 1px 2px rgba(0, 0, 0, 0.05);\n}\n.alert-success {\n background-image: -webkit-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%);\n background-image: -o-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%);\n background-image: linear-gradient(to bottom, #dff0d8 0%, #c8e5bc 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffc8e5bc', GradientType=0);\n background-repeat: repeat-x;\n border-color: #b2dba1;\n}\n.alert-info {\n background-image: -webkit-linear-gradient(top, #d9edf7 0%, #b9def0 100%);\n background-image: -o-linear-gradient(top, #d9edf7 0%, #b9def0 100%);\n background-image: linear-gradient(to bottom, #d9edf7 0%, #b9def0 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffb9def0', GradientType=0);\n background-repeat: repeat-x;\n border-color: #9acfea;\n}\n.alert-warning {\n background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%);\n background-image: -o-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%);\n background-image: linear-gradient(to bottom, #fcf8e3 0%, #f8efc0 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fff8efc0', GradientType=0);\n background-repeat: repeat-x;\n border-color: #f5e79e;\n}\n.alert-danger {\n background-image: -webkit-linear-gradient(top, #f2dede 0%, #e7c3c3 100%);\n background-image: -o-linear-gradient(top, #f2dede 0%, #e7c3c3 100%);\n background-image: linear-gradient(to bottom, #f2dede 0%, #e7c3c3 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffe7c3c3', GradientType=0);\n background-repeat: repeat-x;\n border-color: #dca7a7;\n}\n.progress {\n background-image: -webkit-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%);\n background-image: -o-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%);\n background-image: linear-gradient(to bottom, #ebebeb 0%, #f5f5f5 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff5f5f5', GradientType=0);\n background-repeat: repeat-x;\n}\n.progress-bar {\n background-image: -webkit-linear-gradient(top, #337ab7 0%, #286090 100%);\n background-image: -o-linear-gradient(top, #337ab7 0%, #286090 100%);\n background-image: linear-gradient(to bottom, #337ab7 0%, #286090 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff286090', GradientType=0);\n background-repeat: repeat-x;\n}\n.progress-bar-success {\n background-image: -webkit-linear-gradient(top, #5cb85c 0%, #449d44 100%);\n background-image: -o-linear-gradient(top, #5cb85c 0%, #449d44 100%);\n background-image: linear-gradient(to bottom, #5cb85c 0%, #449d44 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0);\n background-repeat: repeat-x;\n}\n.progress-bar-info {\n background-image: -webkit-linear-gradient(top, #5bc0de 0%, #31b0d5 100%);\n background-image: -o-linear-gradient(top, #5bc0de 0%, #31b0d5 100%);\n background-image: linear-gradient(to bottom, #5bc0de 0%, #31b0d5 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0);\n background-repeat: repeat-x;\n}\n.progress-bar-warning {\n background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #ec971f 100%);\n background-image: -o-linear-gradient(top, #f0ad4e 0%, #ec971f 100%);\n background-image: linear-gradient(to bottom, #f0ad4e 0%, #ec971f 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0);\n background-repeat: repeat-x;\n}\n.progress-bar-danger {\n background-image: -webkit-linear-gradient(top, #d9534f 0%, #c9302c 100%);\n background-image: -o-linear-gradient(top, #d9534f 0%, #c9302c 100%);\n background-image: linear-gradient(to bottom, #d9534f 0%, #c9302c 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0);\n background-repeat: repeat-x;\n}\n.progress-bar-striped {\n background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n}\n.list-group {\n border-radius: 4px;\n -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075);\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075);\n}\n.list-group-item.active,\n.list-group-item.active:hover,\n.list-group-item.active:focus {\n text-shadow: 0 -1px 0 #286090;\n background-image: -webkit-linear-gradient(top, #337ab7 0%, #2b669a 100%);\n background-image: -o-linear-gradient(top, #337ab7 0%, #2b669a 100%);\n background-image: linear-gradient(to bottom, #337ab7 0%, #2b669a 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2b669a', GradientType=0);\n background-repeat: repeat-x;\n border-color: #2b669a;\n}\n.list-group-item.active .badge,\n.list-group-item.active:hover .badge,\n.list-group-item.active:focus .badge {\n text-shadow: none;\n}\n.panel {\n -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);\n}\n.panel-default > .panel-heading {\n background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);\n background-image: -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);\n background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);\n background-repeat: repeat-x;\n}\n.panel-primary > .panel-heading {\n background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);\n background-repeat: repeat-x;\n}\n.panel-success > .panel-heading {\n background-image: -webkit-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%);\n background-image: -o-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%);\n background-image: linear-gradient(to bottom, #dff0d8 0%, #d0e9c6 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffd0e9c6', GradientType=0);\n background-repeat: repeat-x;\n}\n.panel-info > .panel-heading {\n background-image: -webkit-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%);\n background-image: -o-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%);\n background-image: linear-gradient(to bottom, #d9edf7 0%, #c4e3f3 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffc4e3f3', GradientType=0);\n background-repeat: repeat-x;\n}\n.panel-warning > .panel-heading {\n background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%);\n background-image: -o-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%);\n background-image: linear-gradient(to bottom, #fcf8e3 0%, #faf2cc 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fffaf2cc', GradientType=0);\n background-repeat: repeat-x;\n}\n.panel-danger > .panel-heading {\n background-image: -webkit-linear-gradient(top, #f2dede 0%, #ebcccc 100%);\n background-image: -o-linear-gradient(top, #f2dede 0%, #ebcccc 100%);\n background-image: linear-gradient(to bottom, #f2dede 0%, #ebcccc 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffebcccc', GradientType=0);\n background-repeat: repeat-x;\n}\n.well {\n background-image: -webkit-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%);\n background-image: -o-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%);\n background-image: linear-gradient(to bottom, #e8e8e8 0%, #f5f5f5 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8', endColorstr='#fff5f5f5', GradientType=0);\n background-repeat: repeat-x;\n border-color: #dcdcdc;\n -webkit-box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.05), 0 1px 0 rgba(255, 255, 255, 0.1);\n box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.05), 0 1px 0 rgba(255, 255, 255, 0.1);\n}\n/*# sourceMappingURL=bootstrap-theme.css.map */","/*!\n * Bootstrap v3.4.1 (https://getbootstrap.com/)\n * Copyright 2011-2019 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */\n.btn-default,\n.btn-primary,\n.btn-success,\n.btn-info,\n.btn-warning,\n.btn-danger {\n text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.2);\n -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 1px rgba(0, 0, 0, 0.075);\n box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 1px rgba(0, 0, 0, 0.075);\n}\n.btn-default:active,\n.btn-primary:active,\n.btn-success:active,\n.btn-info:active,\n.btn-warning:active,\n.btn-danger:active,\n.btn-default.active,\n.btn-primary.active,\n.btn-success.active,\n.btn-info.active,\n.btn-warning.active,\n.btn-danger.active {\n -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n}\n.btn-default.disabled,\n.btn-primary.disabled,\n.btn-success.disabled,\n.btn-info.disabled,\n.btn-warning.disabled,\n.btn-danger.disabled,\n.btn-default[disabled],\n.btn-primary[disabled],\n.btn-success[disabled],\n.btn-info[disabled],\n.btn-warning[disabled],\n.btn-danger[disabled],\nfieldset[disabled] .btn-default,\nfieldset[disabled] .btn-primary,\nfieldset[disabled] .btn-success,\nfieldset[disabled] .btn-info,\nfieldset[disabled] .btn-warning,\nfieldset[disabled] .btn-danger {\n -webkit-box-shadow: none;\n box-shadow: none;\n}\n.btn-default .badge,\n.btn-primary .badge,\n.btn-success .badge,\n.btn-info .badge,\n.btn-warning .badge,\n.btn-danger .badge {\n text-shadow: none;\n}\n.btn:active,\n.btn.active {\n background-image: none;\n}\n.btn-default {\n background-image: -webkit-linear-gradient(top, #fff 0%, #e0e0e0 100%);\n background-image: -o-linear-gradient(top, #fff 0%, #e0e0e0 100%);\n background-image: -webkit-gradient(linear, left top, left bottom, from(#fff), to(#e0e0e0));\n background-image: linear-gradient(to bottom, #fff 0%, #e0e0e0 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe0e0e0', GradientType=0);\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n background-repeat: repeat-x;\n border-color: #dbdbdb;\n text-shadow: 0 1px 0 #fff;\n border-color: #ccc;\n}\n.btn-default:hover,\n.btn-default:focus {\n background-color: #e0e0e0;\n background-position: 0 -15px;\n}\n.btn-default:active,\n.btn-default.active {\n background-color: #e0e0e0;\n border-color: #dbdbdb;\n}\n.btn-default.disabled,\n.btn-default[disabled],\nfieldset[disabled] .btn-default,\n.btn-default.disabled:hover,\n.btn-default[disabled]:hover,\nfieldset[disabled] .btn-default:hover,\n.btn-default.disabled:focus,\n.btn-default[disabled]:focus,\nfieldset[disabled] .btn-default:focus,\n.btn-default.disabled.focus,\n.btn-default[disabled].focus,\nfieldset[disabled] .btn-default.focus,\n.btn-default.disabled:active,\n.btn-default[disabled]:active,\nfieldset[disabled] .btn-default:active,\n.btn-default.disabled.active,\n.btn-default[disabled].active,\nfieldset[disabled] .btn-default.active {\n background-color: #e0e0e0;\n background-image: none;\n}\n.btn-primary {\n background-image: -webkit-linear-gradient(top, #337ab7 0%, #265a88 100%);\n background-image: -o-linear-gradient(top, #337ab7 0%, #265a88 100%);\n background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#265a88));\n background-image: linear-gradient(to bottom, #337ab7 0%, #265a88 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff265a88', GradientType=0);\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n background-repeat: repeat-x;\n border-color: #245580;\n}\n.btn-primary:hover,\n.btn-primary:focus {\n background-color: #265a88;\n background-position: 0 -15px;\n}\n.btn-primary:active,\n.btn-primary.active {\n background-color: #265a88;\n border-color: #245580;\n}\n.btn-primary.disabled,\n.btn-primary[disabled],\nfieldset[disabled] .btn-primary,\n.btn-primary.disabled:hover,\n.btn-primary[disabled]:hover,\nfieldset[disabled] .btn-primary:hover,\n.btn-primary.disabled:focus,\n.btn-primary[disabled]:focus,\nfieldset[disabled] .btn-primary:focus,\n.btn-primary.disabled.focus,\n.btn-primary[disabled].focus,\nfieldset[disabled] .btn-primary.focus,\n.btn-primary.disabled:active,\n.btn-primary[disabled]:active,\nfieldset[disabled] .btn-primary:active,\n.btn-primary.disabled.active,\n.btn-primary[disabled].active,\nfieldset[disabled] .btn-primary.active {\n background-color: #265a88;\n background-image: none;\n}\n.btn-success {\n background-image: -webkit-linear-gradient(top, #5cb85c 0%, #419641 100%);\n background-image: -o-linear-gradient(top, #5cb85c 0%, #419641 100%);\n background-image: -webkit-gradient(linear, left top, left bottom, from(#5cb85c), to(#419641));\n background-image: linear-gradient(to bottom, #5cb85c 0%, #419641 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff419641', GradientType=0);\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n background-repeat: repeat-x;\n border-color: #3e8f3e;\n}\n.btn-success:hover,\n.btn-success:focus {\n background-color: #419641;\n background-position: 0 -15px;\n}\n.btn-success:active,\n.btn-success.active {\n background-color: #419641;\n border-color: #3e8f3e;\n}\n.btn-success.disabled,\n.btn-success[disabled],\nfieldset[disabled] .btn-success,\n.btn-success.disabled:hover,\n.btn-success[disabled]:hover,\nfieldset[disabled] .btn-success:hover,\n.btn-success.disabled:focus,\n.btn-success[disabled]:focus,\nfieldset[disabled] .btn-success:focus,\n.btn-success.disabled.focus,\n.btn-success[disabled].focus,\nfieldset[disabled] .btn-success.focus,\n.btn-success.disabled:active,\n.btn-success[disabled]:active,\nfieldset[disabled] .btn-success:active,\n.btn-success.disabled.active,\n.btn-success[disabled].active,\nfieldset[disabled] .btn-success.active {\n background-color: #419641;\n background-image: none;\n}\n.btn-info {\n background-image: -webkit-linear-gradient(top, #5bc0de 0%, #2aabd2 100%);\n background-image: -o-linear-gradient(top, #5bc0de 0%, #2aabd2 100%);\n background-image: -webkit-gradient(linear, left top, left bottom, from(#5bc0de), to(#2aabd2));\n background-image: linear-gradient(to bottom, #5bc0de 0%, #2aabd2 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2aabd2', GradientType=0);\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n background-repeat: repeat-x;\n border-color: #28a4c9;\n}\n.btn-info:hover,\n.btn-info:focus {\n background-color: #2aabd2;\n background-position: 0 -15px;\n}\n.btn-info:active,\n.btn-info.active {\n background-color: #2aabd2;\n border-color: #28a4c9;\n}\n.btn-info.disabled,\n.btn-info[disabled],\nfieldset[disabled] .btn-info,\n.btn-info.disabled:hover,\n.btn-info[disabled]:hover,\nfieldset[disabled] .btn-info:hover,\n.btn-info.disabled:focus,\n.btn-info[disabled]:focus,\nfieldset[disabled] .btn-info:focus,\n.btn-info.disabled.focus,\n.btn-info[disabled].focus,\nfieldset[disabled] .btn-info.focus,\n.btn-info.disabled:active,\n.btn-info[disabled]:active,\nfieldset[disabled] .btn-info:active,\n.btn-info.disabled.active,\n.btn-info[disabled].active,\nfieldset[disabled] .btn-info.active {\n background-color: #2aabd2;\n background-image: none;\n}\n.btn-warning {\n background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #eb9316 100%);\n background-image: -o-linear-gradient(top, #f0ad4e 0%, #eb9316 100%);\n background-image: -webkit-gradient(linear, left top, left bottom, from(#f0ad4e), to(#eb9316));\n background-image: linear-gradient(to bottom, #f0ad4e 0%, #eb9316 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffeb9316', GradientType=0);\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n background-repeat: repeat-x;\n border-color: #e38d13;\n}\n.btn-warning:hover,\n.btn-warning:focus {\n background-color: #eb9316;\n background-position: 0 -15px;\n}\n.btn-warning:active,\n.btn-warning.active {\n background-color: #eb9316;\n border-color: #e38d13;\n}\n.btn-warning.disabled,\n.btn-warning[disabled],\nfieldset[disabled] .btn-warning,\n.btn-warning.disabled:hover,\n.btn-warning[disabled]:hover,\nfieldset[disabled] .btn-warning:hover,\n.btn-warning.disabled:focus,\n.btn-warning[disabled]:focus,\nfieldset[disabled] .btn-warning:focus,\n.btn-warning.disabled.focus,\n.btn-warning[disabled].focus,\nfieldset[disabled] .btn-warning.focus,\n.btn-warning.disabled:active,\n.btn-warning[disabled]:active,\nfieldset[disabled] .btn-warning:active,\n.btn-warning.disabled.active,\n.btn-warning[disabled].active,\nfieldset[disabled] .btn-warning.active {\n background-color: #eb9316;\n background-image: none;\n}\n.btn-danger {\n background-image: -webkit-linear-gradient(top, #d9534f 0%, #c12e2a 100%);\n background-image: -o-linear-gradient(top, #d9534f 0%, #c12e2a 100%);\n background-image: -webkit-gradient(linear, left top, left bottom, from(#d9534f), to(#c12e2a));\n background-image: linear-gradient(to bottom, #d9534f 0%, #c12e2a 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc12e2a', GradientType=0);\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n background-repeat: repeat-x;\n border-color: #b92c28;\n}\n.btn-danger:hover,\n.btn-danger:focus {\n background-color: #c12e2a;\n background-position: 0 -15px;\n}\n.btn-danger:active,\n.btn-danger.active {\n background-color: #c12e2a;\n border-color: #b92c28;\n}\n.btn-danger.disabled,\n.btn-danger[disabled],\nfieldset[disabled] .btn-danger,\n.btn-danger.disabled:hover,\n.btn-danger[disabled]:hover,\nfieldset[disabled] .btn-danger:hover,\n.btn-danger.disabled:focus,\n.btn-danger[disabled]:focus,\nfieldset[disabled] .btn-danger:focus,\n.btn-danger.disabled.focus,\n.btn-danger[disabled].focus,\nfieldset[disabled] .btn-danger.focus,\n.btn-danger.disabled:active,\n.btn-danger[disabled]:active,\nfieldset[disabled] .btn-danger:active,\n.btn-danger.disabled.active,\n.btn-danger[disabled].active,\nfieldset[disabled] .btn-danger.active {\n background-color: #c12e2a;\n background-image: none;\n}\n.thumbnail,\n.img-thumbnail {\n -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075);\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075);\n}\n.dropdown-menu > li > a:hover,\n.dropdown-menu > li > a:focus {\n background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);\n background-image: -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);\n background-image: -webkit-gradient(linear, left top, left bottom, from(#f5f5f5), to(#e8e8e8));\n background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);\n background-repeat: repeat-x;\n background-color: #e8e8e8;\n}\n.dropdown-menu > .active > a,\n.dropdown-menu > .active > a:hover,\n.dropdown-menu > .active > a:focus {\n background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2e6da4));\n background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);\n background-repeat: repeat-x;\n background-color: #2e6da4;\n}\n.navbar-default {\n background-image: -webkit-linear-gradient(top, #ffffff 0%, #f8f8f8 100%);\n background-image: -o-linear-gradient(top, #ffffff 0%, #f8f8f8 100%);\n background-image: -webkit-gradient(linear, left top, left bottom, from(#ffffff), to(#f8f8f8));\n background-image: linear-gradient(to bottom, #ffffff 0%, #f8f8f8 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff8f8f8', GradientType=0);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n border-radius: 4px;\n -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 5px rgba(0, 0, 0, 0.075);\n box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 5px rgba(0, 0, 0, 0.075);\n}\n.navbar-default .navbar-nav > .open > a,\n.navbar-default .navbar-nav > .active > a {\n background-image: -webkit-linear-gradient(top, #dbdbdb 0%, #e2e2e2 100%);\n background-image: -o-linear-gradient(top, #dbdbdb 0%, #e2e2e2 100%);\n background-image: -webkit-gradient(linear, left top, left bottom, from(#dbdbdb), to(#e2e2e2));\n background-image: linear-gradient(to bottom, #dbdbdb 0%, #e2e2e2 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdbdbdb', endColorstr='#ffe2e2e2', GradientType=0);\n background-repeat: repeat-x;\n -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.075);\n box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.075);\n}\n.navbar-brand,\n.navbar-nav > li > a {\n text-shadow: 0 1px 0 rgba(255, 255, 255, 0.25);\n}\n.navbar-inverse {\n background-image: -webkit-linear-gradient(top, #3c3c3c 0%, #222 100%);\n background-image: -o-linear-gradient(top, #3c3c3c 0%, #222 100%);\n background-image: -webkit-gradient(linear, left top, left bottom, from(#3c3c3c), to(#222));\n background-image: linear-gradient(to bottom, #3c3c3c 0%, #222 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c', endColorstr='#ff222222', GradientType=0);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n border-radius: 4px;\n}\n.navbar-inverse .navbar-nav > .open > a,\n.navbar-inverse .navbar-nav > .active > a {\n background-image: -webkit-linear-gradient(top, #080808 0%, #0f0f0f 100%);\n background-image: -o-linear-gradient(top, #080808 0%, #0f0f0f 100%);\n background-image: -webkit-gradient(linear, left top, left bottom, from(#080808), to(#0f0f0f));\n background-image: linear-gradient(to bottom, #080808 0%, #0f0f0f 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff080808', endColorstr='#ff0f0f0f', GradientType=0);\n background-repeat: repeat-x;\n -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.25);\n box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.25);\n}\n.navbar-inverse .navbar-brand,\n.navbar-inverse .navbar-nav > li > a {\n text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);\n}\n.navbar-static-top,\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n border-radius: 0;\n}\n@media (max-width: 767px) {\n .navbar .navbar-nav .open .dropdown-menu > .active > a,\n .navbar .navbar-nav .open .dropdown-menu > .active > a:hover,\n .navbar .navbar-nav .open .dropdown-menu > .active > a:focus {\n color: #fff;\n background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2e6da4));\n background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);\n background-repeat: repeat-x;\n }\n}\n.alert {\n text-shadow: 0 1px 0 rgba(255, 255, 255, 0.2);\n -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25), 0 1px 2px rgba(0, 0, 0, 0.05);\n box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25), 0 1px 2px rgba(0, 0, 0, 0.05);\n}\n.alert-success {\n background-image: -webkit-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%);\n background-image: -o-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%);\n background-image: -webkit-gradient(linear, left top, left bottom, from(#dff0d8), to(#c8e5bc));\n background-image: linear-gradient(to bottom, #dff0d8 0%, #c8e5bc 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffc8e5bc', GradientType=0);\n background-repeat: repeat-x;\n border-color: #b2dba1;\n}\n.alert-info {\n background-image: -webkit-linear-gradient(top, #d9edf7 0%, #b9def0 100%);\n background-image: -o-linear-gradient(top, #d9edf7 0%, #b9def0 100%);\n background-image: -webkit-gradient(linear, left top, left bottom, from(#d9edf7), to(#b9def0));\n background-image: linear-gradient(to bottom, #d9edf7 0%, #b9def0 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffb9def0', GradientType=0);\n background-repeat: repeat-x;\n border-color: #9acfea;\n}\n.alert-warning {\n background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%);\n background-image: -o-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%);\n background-image: -webkit-gradient(linear, left top, left bottom, from(#fcf8e3), to(#f8efc0));\n background-image: linear-gradient(to bottom, #fcf8e3 0%, #f8efc0 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fff8efc0', GradientType=0);\n background-repeat: repeat-x;\n border-color: #f5e79e;\n}\n.alert-danger {\n background-image: -webkit-linear-gradient(top, #f2dede 0%, #e7c3c3 100%);\n background-image: -o-linear-gradient(top, #f2dede 0%, #e7c3c3 100%);\n background-image: -webkit-gradient(linear, left top, left bottom, from(#f2dede), to(#e7c3c3));\n background-image: linear-gradient(to bottom, #f2dede 0%, #e7c3c3 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffe7c3c3', GradientType=0);\n background-repeat: repeat-x;\n border-color: #dca7a7;\n}\n.progress {\n background-image: -webkit-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%);\n background-image: -o-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%);\n background-image: -webkit-gradient(linear, left top, left bottom, from(#ebebeb), to(#f5f5f5));\n background-image: linear-gradient(to bottom, #ebebeb 0%, #f5f5f5 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff5f5f5', GradientType=0);\n background-repeat: repeat-x;\n}\n.progress-bar {\n background-image: -webkit-linear-gradient(top, #337ab7 0%, #286090 100%);\n background-image: -o-linear-gradient(top, #337ab7 0%, #286090 100%);\n background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#286090));\n background-image: linear-gradient(to bottom, #337ab7 0%, #286090 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff286090', GradientType=0);\n background-repeat: repeat-x;\n}\n.progress-bar-success {\n background-image: -webkit-linear-gradient(top, #5cb85c 0%, #449d44 100%);\n background-image: -o-linear-gradient(top, #5cb85c 0%, #449d44 100%);\n background-image: -webkit-gradient(linear, left top, left bottom, from(#5cb85c), to(#449d44));\n background-image: linear-gradient(to bottom, #5cb85c 0%, #449d44 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0);\n background-repeat: repeat-x;\n}\n.progress-bar-info {\n background-image: -webkit-linear-gradient(top, #5bc0de 0%, #31b0d5 100%);\n background-image: -o-linear-gradient(top, #5bc0de 0%, #31b0d5 100%);\n background-image: -webkit-gradient(linear, left top, left bottom, from(#5bc0de), to(#31b0d5));\n background-image: linear-gradient(to bottom, #5bc0de 0%, #31b0d5 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0);\n background-repeat: repeat-x;\n}\n.progress-bar-warning {\n background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #ec971f 100%);\n background-image: -o-linear-gradient(top, #f0ad4e 0%, #ec971f 100%);\n background-image: -webkit-gradient(linear, left top, left bottom, from(#f0ad4e), to(#ec971f));\n background-image: linear-gradient(to bottom, #f0ad4e 0%, #ec971f 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0);\n background-repeat: repeat-x;\n}\n.progress-bar-danger {\n background-image: -webkit-linear-gradient(top, #d9534f 0%, #c9302c 100%);\n background-image: -o-linear-gradient(top, #d9534f 0%, #c9302c 100%);\n background-image: -webkit-gradient(linear, left top, left bottom, from(#d9534f), to(#c9302c));\n background-image: linear-gradient(to bottom, #d9534f 0%, #c9302c 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0);\n background-repeat: repeat-x;\n}\n.progress-bar-striped {\n background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n}\n.list-group {\n border-radius: 4px;\n -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075);\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075);\n}\n.list-group-item.active,\n.list-group-item.active:hover,\n.list-group-item.active:focus {\n text-shadow: 0 -1px 0 #286090;\n background-image: -webkit-linear-gradient(top, #337ab7 0%, #2b669a 100%);\n background-image: -o-linear-gradient(top, #337ab7 0%, #2b669a 100%);\n background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2b669a));\n background-image: linear-gradient(to bottom, #337ab7 0%, #2b669a 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2b669a', GradientType=0);\n background-repeat: repeat-x;\n border-color: #2b669a;\n}\n.list-group-item.active .badge,\n.list-group-item.active:hover .badge,\n.list-group-item.active:focus .badge {\n text-shadow: none;\n}\n.panel {\n -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);\n}\n.panel-default > .panel-heading {\n background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);\n background-image: -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);\n background-image: -webkit-gradient(linear, left top, left bottom, from(#f5f5f5), to(#e8e8e8));\n background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);\n background-repeat: repeat-x;\n}\n.panel-primary > .panel-heading {\n background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2e6da4));\n background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);\n background-repeat: repeat-x;\n}\n.panel-success > .panel-heading {\n background-image: -webkit-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%);\n background-image: -o-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%);\n background-image: -webkit-gradient(linear, left top, left bottom, from(#dff0d8), to(#d0e9c6));\n background-image: linear-gradient(to bottom, #dff0d8 0%, #d0e9c6 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffd0e9c6', GradientType=0);\n background-repeat: repeat-x;\n}\n.panel-info > .panel-heading {\n background-image: -webkit-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%);\n background-image: -o-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%);\n background-image: -webkit-gradient(linear, left top, left bottom, from(#d9edf7), to(#c4e3f3));\n background-image: linear-gradient(to bottom, #d9edf7 0%, #c4e3f3 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffc4e3f3', GradientType=0);\n background-repeat: repeat-x;\n}\n.panel-warning > .panel-heading {\n background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%);\n background-image: -o-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%);\n background-image: -webkit-gradient(linear, left top, left bottom, from(#fcf8e3), to(#faf2cc));\n background-image: linear-gradient(to bottom, #fcf8e3 0%, #faf2cc 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fffaf2cc', GradientType=0);\n background-repeat: repeat-x;\n}\n.panel-danger > .panel-heading {\n background-image: -webkit-linear-gradient(top, #f2dede 0%, #ebcccc 100%);\n background-image: -o-linear-gradient(top, #f2dede 0%, #ebcccc 100%);\n background-image: -webkit-gradient(linear, left top, left bottom, from(#f2dede), to(#ebcccc));\n background-image: linear-gradient(to bottom, #f2dede 0%, #ebcccc 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffebcccc', GradientType=0);\n background-repeat: repeat-x;\n}\n.well {\n background-image: -webkit-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%);\n background-image: -o-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%);\n background-image: -webkit-gradient(linear, left top, left bottom, from(#e8e8e8), to(#f5f5f5));\n background-image: linear-gradient(to bottom, #e8e8e8 0%, #f5f5f5 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8', endColorstr='#fff5f5f5', GradientType=0);\n background-repeat: repeat-x;\n border-color: #dcdcdc;\n -webkit-box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.05), 0 1px 0 rgba(255, 255, 255, 0.1);\n box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.05), 0 1px 0 rgba(255, 255, 255, 0.1);\n}\n/*# sourceMappingURL=bootstrap-theme.css.map */","// stylelint-disable selector-no-qualifying-type, selector-max-compound-selectors\n\n/*!\n * Bootstrap v3.4.1 (https://getbootstrap.com/)\n * Copyright 2011-2019 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */\n\n//\n// Load core variables and mixins\n// --------------------------------------------------\n\n@import \"variables.less\";\n@import \"mixins.less\";\n\n\n//\n// Buttons\n// --------------------------------------------------\n\n// Common styles\n.btn-default,\n.btn-primary,\n.btn-success,\n.btn-info,\n.btn-warning,\n.btn-danger {\n text-shadow: 0 -1px 0 rgba(0, 0, 0, .2);\n @shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 1px rgba(0, 0, 0, .075);\n .box-shadow(@shadow);\n\n // Reset the shadow\n &:active,\n &.active {\n .box-shadow(inset 0 3px 5px rgba(0, 0, 0, .125));\n }\n\n &.disabled,\n &[disabled],\n fieldset[disabled] & {\n .box-shadow(none);\n }\n\n .badge {\n text-shadow: none;\n }\n}\n\n// Mixin for generating new styles\n.btn-styles(@btn-color: #555) {\n #gradient > .vertical(@start-color: @btn-color; @end-color: darken(@btn-color, 12%));\n .reset-filter(); // Disable gradients for IE9 because filter bleeds through rounded corners; see https://github.com/twbs/bootstrap/issues/10620\n background-repeat: repeat-x;\n border-color: darken(@btn-color, 14%);\n\n &:hover,\n &:focus {\n background-color: darken(@btn-color, 12%);\n background-position: 0 -15px;\n }\n\n &:active,\n &.active {\n background-color: darken(@btn-color, 12%);\n border-color: darken(@btn-color, 14%);\n }\n\n &.disabled,\n &[disabled],\n fieldset[disabled] & {\n &,\n &:hover,\n &:focus,\n &.focus,\n &:active,\n &.active {\n background-color: darken(@btn-color, 12%);\n background-image: none;\n }\n }\n}\n\n// Common styles\n.btn {\n // Remove the gradient for the pressed/active state\n &:active,\n &.active {\n background-image: none;\n }\n}\n\n// Apply the mixin to the buttons\n.btn-default {\n .btn-styles(@btn-default-bg);\n text-shadow: 0 1px 0 #fff;\n border-color: #ccc;\n}\n.btn-primary { .btn-styles(@btn-primary-bg); }\n.btn-success { .btn-styles(@btn-success-bg); }\n.btn-info { .btn-styles(@btn-info-bg); }\n.btn-warning { .btn-styles(@btn-warning-bg); }\n.btn-danger { .btn-styles(@btn-danger-bg); }\n\n\n//\n// Images\n// --------------------------------------------------\n\n.thumbnail,\n.img-thumbnail {\n .box-shadow(0 1px 2px rgba(0, 0, 0, .075));\n}\n\n\n//\n// Dropdowns\n// --------------------------------------------------\n\n.dropdown-menu > li > a:hover,\n.dropdown-menu > li > a:focus {\n #gradient > .vertical(@start-color: @dropdown-link-hover-bg; @end-color: darken(@dropdown-link-hover-bg, 5%));\n background-color: darken(@dropdown-link-hover-bg, 5%);\n}\n.dropdown-menu > .active > a,\n.dropdown-menu > .active > a:hover,\n.dropdown-menu > .active > a:focus {\n #gradient > .vertical(@start-color: @dropdown-link-active-bg; @end-color: darken(@dropdown-link-active-bg, 5%));\n background-color: darken(@dropdown-link-active-bg, 5%);\n}\n\n\n//\n// Navbar\n// --------------------------------------------------\n\n// Default navbar\n.navbar-default {\n #gradient > .vertical(@start-color: lighten(@navbar-default-bg, 10%); @end-color: @navbar-default-bg);\n .reset-filter(); // Remove gradient in IE<10 to fix bug where dropdowns don't get triggered\n border-radius: @navbar-border-radius;\n @shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 5px rgba(0, 0, 0, .075);\n .box-shadow(@shadow);\n\n .navbar-nav > .open > a,\n .navbar-nav > .active > a {\n #gradient > .vertical(@start-color: darken(@navbar-default-link-active-bg, 5%); @end-color: darken(@navbar-default-link-active-bg, 2%));\n .box-shadow(inset 0 3px 9px rgba(0, 0, 0, .075));\n }\n}\n.navbar-brand,\n.navbar-nav > li > a {\n text-shadow: 0 1px 0 rgba(255, 255, 255, .25);\n}\n\n// Inverted navbar\n.navbar-inverse {\n #gradient > .vertical(@start-color: lighten(@navbar-inverse-bg, 10%); @end-color: @navbar-inverse-bg);\n .reset-filter(); // Remove gradient in IE<10 to fix bug where dropdowns don't get triggered; see https://github.com/twbs/bootstrap/issues/10257\n border-radius: @navbar-border-radius;\n .navbar-nav > .open > a,\n .navbar-nav > .active > a {\n #gradient > .vertical(@start-color: @navbar-inverse-link-active-bg; @end-color: lighten(@navbar-inverse-link-active-bg, 2.5%));\n .box-shadow(inset 0 3px 9px rgba(0, 0, 0, .25));\n }\n\n .navbar-brand,\n .navbar-nav > li > a {\n text-shadow: 0 -1px 0 rgba(0, 0, 0, .25);\n }\n}\n\n// Undo rounded corners in static and fixed navbars\n.navbar-static-top,\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n border-radius: 0;\n}\n\n// Fix active state of dropdown items in collapsed mode\n@media (max-width: @grid-float-breakpoint-max) {\n .navbar .navbar-nav .open .dropdown-menu > .active > a {\n &,\n &:hover,\n &:focus {\n color: #fff;\n #gradient > .vertical(@start-color: @dropdown-link-active-bg; @end-color: darken(@dropdown-link-active-bg, 5%));\n }\n }\n}\n\n\n//\n// Alerts\n// --------------------------------------------------\n\n// Common styles\n.alert {\n text-shadow: 0 1px 0 rgba(255, 255, 255, .2);\n @shadow: inset 0 1px 0 rgba(255, 255, 255, .25), 0 1px 2px rgba(0, 0, 0, .05);\n .box-shadow(@shadow);\n}\n\n// Mixin for generating new styles\n.alert-styles(@color) {\n #gradient > .vertical(@start-color: @color; @end-color: darken(@color, 7.5%));\n border-color: darken(@color, 15%);\n}\n\n// Apply the mixin to the alerts\n.alert-success { .alert-styles(@alert-success-bg); }\n.alert-info { .alert-styles(@alert-info-bg); }\n.alert-warning { .alert-styles(@alert-warning-bg); }\n.alert-danger { .alert-styles(@alert-danger-bg); }\n\n\n//\n// Progress bars\n// --------------------------------------------------\n\n// Give the progress background some depth\n.progress {\n #gradient > .vertical(@start-color: darken(@progress-bg, 4%); @end-color: @progress-bg)\n}\n\n// Mixin for generating new styles\n.progress-bar-styles(@color) {\n #gradient > .vertical(@start-color: @color; @end-color: darken(@color, 10%));\n}\n\n// Apply the mixin to the progress bars\n.progress-bar { .progress-bar-styles(@progress-bar-bg); }\n.progress-bar-success { .progress-bar-styles(@progress-bar-success-bg); }\n.progress-bar-info { .progress-bar-styles(@progress-bar-info-bg); }\n.progress-bar-warning { .progress-bar-styles(@progress-bar-warning-bg); }\n.progress-bar-danger { .progress-bar-styles(@progress-bar-danger-bg); }\n\n// Reset the striped class because our mixins don't do multiple gradients and\n// the above custom styles override the new `.progress-bar-striped` in v3.2.0.\n.progress-bar-striped {\n #gradient > .striped();\n}\n\n\n//\n// List groups\n// --------------------------------------------------\n\n.list-group {\n border-radius: @border-radius-base;\n .box-shadow(0 1px 2px rgba(0, 0, 0, .075));\n}\n.list-group-item.active,\n.list-group-item.active:hover,\n.list-group-item.active:focus {\n text-shadow: 0 -1px 0 darken(@list-group-active-bg, 10%);\n #gradient > .vertical(@start-color: @list-group-active-bg; @end-color: darken(@list-group-active-bg, 7.5%));\n border-color: darken(@list-group-active-border, 7.5%);\n\n .badge {\n text-shadow: none;\n }\n}\n\n\n//\n// Panels\n// --------------------------------------------------\n\n// Common styles\n.panel {\n .box-shadow(0 1px 2px rgba(0, 0, 0, .05));\n}\n\n// Mixin for generating new styles\n.panel-heading-styles(@color) {\n #gradient > .vertical(@start-color: @color; @end-color: darken(@color, 5%));\n}\n\n// Apply the mixin to the panel headings only\n.panel-default > .panel-heading { .panel-heading-styles(@panel-default-heading-bg); }\n.panel-primary > .panel-heading { .panel-heading-styles(@panel-primary-heading-bg); }\n.panel-success > .panel-heading { .panel-heading-styles(@panel-success-heading-bg); }\n.panel-info > .panel-heading { .panel-heading-styles(@panel-info-heading-bg); }\n.panel-warning > .panel-heading { .panel-heading-styles(@panel-warning-heading-bg); }\n.panel-danger > .panel-heading { .panel-heading-styles(@panel-danger-heading-bg); }\n\n\n//\n// Wells\n// --------------------------------------------------\n\n.well {\n #gradient > .vertical(@start-color: darken(@well-bg, 5%); @end-color: @well-bg);\n border-color: darken(@well-bg, 10%);\n @shadow: inset 0 1px 3px rgba(0, 0, 0, .05), 0 1px 0 rgba(255, 255, 255, .1);\n .box-shadow(@shadow);\n}\n","// stylelint-disable indentation, property-no-vendor-prefix, selector-no-vendor-prefix\n\n// Vendor Prefixes\n//\n// All vendor mixins are deprecated as of v3.2.0 due to the introduction of\n// Autoprefixer in our Gruntfile. They have been removed in v4.\n\n// - Animations\n// - Backface visibility\n// - Box shadow\n// - Box sizing\n// - Content columns\n// - Hyphens\n// - Placeholder text\n// - Transformations\n// - Transitions\n// - User Select\n\n\n// Animations\n.animation(@animation) {\n -webkit-animation: @animation;\n -o-animation: @animation;\n animation: @animation;\n}\n.animation-name(@name) {\n -webkit-animation-name: @name;\n animation-name: @name;\n}\n.animation-duration(@duration) {\n -webkit-animation-duration: @duration;\n animation-duration: @duration;\n}\n.animation-timing-function(@timing-function) {\n -webkit-animation-timing-function: @timing-function;\n animation-timing-function: @timing-function;\n}\n.animation-delay(@delay) {\n -webkit-animation-delay: @delay;\n animation-delay: @delay;\n}\n.animation-iteration-count(@iteration-count) {\n -webkit-animation-iteration-count: @iteration-count;\n animation-iteration-count: @iteration-count;\n}\n.animation-direction(@direction) {\n -webkit-animation-direction: @direction;\n animation-direction: @direction;\n}\n.animation-fill-mode(@fill-mode) {\n -webkit-animation-fill-mode: @fill-mode;\n animation-fill-mode: @fill-mode;\n}\n\n// Backface visibility\n// Prevent browsers from flickering when using CSS 3D transforms.\n// Default value is `visible`, but can be changed to `hidden`\n\n.backface-visibility(@visibility) {\n -webkit-backface-visibility: @visibility;\n -moz-backface-visibility: @visibility;\n backface-visibility: @visibility;\n}\n\n// Drop shadows\n//\n// Note: Deprecated `.box-shadow()` as of v3.1.0 since all of Bootstrap's\n// supported browsers that have box shadow capabilities now support it.\n\n.box-shadow(@shadow) {\n -webkit-box-shadow: @shadow; // iOS <4.3 & Android <4.1\n box-shadow: @shadow;\n}\n\n// Box sizing\n.box-sizing(@boxmodel) {\n -webkit-box-sizing: @boxmodel;\n -moz-box-sizing: @boxmodel;\n box-sizing: @boxmodel;\n}\n\n// CSS3 Content Columns\n.content-columns(@column-count; @column-gap: @grid-gutter-width) {\n -webkit-column-count: @column-count;\n -moz-column-count: @column-count;\n column-count: @column-count;\n -webkit-column-gap: @column-gap;\n -moz-column-gap: @column-gap;\n column-gap: @column-gap;\n}\n\n// Optional hyphenation\n.hyphens(@mode: auto) {\n -webkit-hyphens: @mode;\n -moz-hyphens: @mode;\n -ms-hyphens: @mode; // IE10+\n -o-hyphens: @mode;\n hyphens: @mode;\n word-wrap: break-word;\n}\n\n// Placeholder text\n.placeholder(@color: @input-color-placeholder) {\n // Firefox\n &::-moz-placeholder {\n color: @color;\n opacity: 1; // Override Firefox's unusual default opacity; see https://github.com/twbs/bootstrap/pull/11526\n }\n &:-ms-input-placeholder { color: @color; } // Internet Explorer 10+\n &::-webkit-input-placeholder { color: @color; } // Safari and Chrome\n}\n\n// Transformations\n.scale(@ratio) {\n -webkit-transform: scale(@ratio);\n -ms-transform: scale(@ratio); // IE9 only\n -o-transform: scale(@ratio);\n transform: scale(@ratio);\n}\n.scale(@ratioX; @ratioY) {\n -webkit-transform: scale(@ratioX, @ratioY);\n -ms-transform: scale(@ratioX, @ratioY); // IE9 only\n -o-transform: scale(@ratioX, @ratioY);\n transform: scale(@ratioX, @ratioY);\n}\n.scaleX(@ratio) {\n -webkit-transform: scaleX(@ratio);\n -ms-transform: scaleX(@ratio); // IE9 only\n -o-transform: scaleX(@ratio);\n transform: scaleX(@ratio);\n}\n.scaleY(@ratio) {\n -webkit-transform: scaleY(@ratio);\n -ms-transform: scaleY(@ratio); // IE9 only\n -o-transform: scaleY(@ratio);\n transform: scaleY(@ratio);\n}\n.skew(@x; @y) {\n -webkit-transform: skewX(@x) skewY(@y);\n -ms-transform: skewX(@x) skewY(@y); // See https://github.com/twbs/bootstrap/issues/4885; IE9+\n -o-transform: skewX(@x) skewY(@y);\n transform: skewX(@x) skewY(@y);\n}\n.translate(@x; @y) {\n -webkit-transform: translate(@x, @y);\n -ms-transform: translate(@x, @y); // IE9 only\n -o-transform: translate(@x, @y);\n transform: translate(@x, @y);\n}\n.translate3d(@x; @y; @z) {\n -webkit-transform: translate3d(@x, @y, @z);\n transform: translate3d(@x, @y, @z);\n}\n.rotate(@degrees) {\n -webkit-transform: rotate(@degrees);\n -ms-transform: rotate(@degrees); // IE9 only\n -o-transform: rotate(@degrees);\n transform: rotate(@degrees);\n}\n.rotateX(@degrees) {\n -webkit-transform: rotateX(@degrees);\n -ms-transform: rotateX(@degrees); // IE9 only\n -o-transform: rotateX(@degrees);\n transform: rotateX(@degrees);\n}\n.rotateY(@degrees) {\n -webkit-transform: rotateY(@degrees);\n -ms-transform: rotateY(@degrees); // IE9 only\n -o-transform: rotateY(@degrees);\n transform: rotateY(@degrees);\n}\n.perspective(@perspective) {\n -webkit-perspective: @perspective;\n -moz-perspective: @perspective;\n perspective: @perspective;\n}\n.perspective-origin(@perspective) {\n -webkit-perspective-origin: @perspective;\n -moz-perspective-origin: @perspective;\n perspective-origin: @perspective;\n}\n.transform-origin(@origin) {\n -webkit-transform-origin: @origin;\n -moz-transform-origin: @origin;\n -ms-transform-origin: @origin; // IE9 only\n transform-origin: @origin;\n}\n\n\n// Transitions\n\n.transition(@transition) {\n -webkit-transition: @transition;\n -o-transition: @transition;\n transition: @transition;\n}\n.transition-property(@transition-property) {\n -webkit-transition-property: @transition-property;\n transition-property: @transition-property;\n}\n.transition-delay(@transition-delay) {\n -webkit-transition-delay: @transition-delay;\n transition-delay: @transition-delay;\n}\n.transition-duration(@transition-duration) {\n -webkit-transition-duration: @transition-duration;\n transition-duration: @transition-duration;\n}\n.transition-timing-function(@timing-function) {\n -webkit-transition-timing-function: @timing-function;\n transition-timing-function: @timing-function;\n}\n.transition-transform(@transition) {\n -webkit-transition: -webkit-transform @transition;\n -moz-transition: -moz-transform @transition;\n -o-transition: -o-transform @transition;\n transition: transform @transition;\n}\n\n\n// User select\n// For selecting text on the page\n\n.user-select(@select) {\n -webkit-user-select: @select;\n -moz-user-select: @select;\n -ms-user-select: @select; // IE10+\n user-select: @select;\n}\n","// stylelint-disable value-no-vendor-prefix, selector-max-id\n\n#gradient {\n\n // Horizontal gradient, from left to right\n //\n // Creates two color stops, start and end, by specifying a color and position for each color stop.\n // Color stops are not available in IE9 and below.\n .horizontal(@start-color: #555; @end-color: #333; @start-percent: 0%; @end-percent: 100%) {\n background-image: -webkit-linear-gradient(left, @start-color @start-percent, @end-color @end-percent); // Safari 5.1-6, Chrome 10+\n background-image: -o-linear-gradient(left, @start-color @start-percent, @end-color @end-percent); // Opera 12\n background-image: linear-gradient(to right, @start-color @start-percent, @end-color @end-percent); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=1)\", argb(@start-color), argb(@end-color))); // IE9 and down\n background-repeat: repeat-x;\n }\n\n // Vertical gradient, from top to bottom\n //\n // Creates two color stops, start and end, by specifying a color and position for each color stop.\n // Color stops are not available in IE9 and below.\n .vertical(@start-color: #555; @end-color: #333; @start-percent: 0%; @end-percent: 100%) {\n background-image: -webkit-linear-gradient(top, @start-color @start-percent, @end-color @end-percent); // Safari 5.1-6, Chrome 10+\n background-image: -o-linear-gradient(top, @start-color @start-percent, @end-color @end-percent); // Opera 12\n background-image: linear-gradient(to bottom, @start-color @start-percent, @end-color @end-percent); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)\", argb(@start-color), argb(@end-color))); // IE9 and down\n background-repeat: repeat-x;\n }\n\n .directional(@start-color: #555; @end-color: #333; @deg: 45deg) {\n background-image: -webkit-linear-gradient(@deg, @start-color, @end-color); // Safari 5.1-6, Chrome 10+\n background-image: -o-linear-gradient(@deg, @start-color, @end-color); // Opera 12\n background-image: linear-gradient(@deg, @start-color, @end-color); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n background-repeat: repeat-x;\n }\n .horizontal-three-colors(@start-color: #00b3ee; @mid-color: #7a43b6; @color-stop: 50%; @end-color: #c3325f) {\n background-image: -webkit-linear-gradient(left, @start-color, @mid-color @color-stop, @end-color);\n background-image: -o-linear-gradient(left, @start-color, @mid-color @color-stop, @end-color);\n background-image: linear-gradient(to right, @start-color, @mid-color @color-stop, @end-color);\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=1)\", argb(@start-color), argb(@end-color))); // IE9 and down, gets no color-stop at all for proper fallback\n background-repeat: no-repeat;\n }\n .vertical-three-colors(@start-color: #00b3ee; @mid-color: #7a43b6; @color-stop: 50%; @end-color: #c3325f) {\n background-image: -webkit-linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n background-image: -o-linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n background-image: linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)\", argb(@start-color), argb(@end-color))); // IE9 and down, gets no color-stop at all for proper fallback\n background-repeat: no-repeat;\n }\n .radial(@inner-color: #555; @outer-color: #333) {\n background-image: -webkit-radial-gradient(circle, @inner-color, @outer-color);\n background-image: radial-gradient(circle, @inner-color, @outer-color);\n background-repeat: no-repeat;\n }\n .striped(@color: rgba(255, 255, 255, .15); @angle: 45deg) {\n background-image: -webkit-linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n background-image: linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n }\n}\n","// Reset filters for IE\n//\n// When you need to remove a gradient background, do not forget to use this to reset\n// the IE filter for IE9 and below.\n\n.reset-filter() {\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(enabled = false)\"));\n}\n"]} \ No newline at end of file diff --git a/xinda-plugs/xinda-oauth/src/main/resources/static/oauth/css/bootstrap.css b/xinda-plugs/xinda-oauth/src/main/resources/static/oauth/css/bootstrap.css new file mode 100644 index 0000000..33c96da --- /dev/null +++ b/xinda-plugs/xinda-oauth/src/main/resources/static/oauth/css/bootstrap.css @@ -0,0 +1,6834 @@ +/*! + * Bootstrap v3.4.1 (https://getbootstrap.com/) + * Copyright 2011-2019 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + */ +/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */ +html { + font-family: sans-serif; + -ms-text-size-adjust: 100%; + -webkit-text-size-adjust: 100%; +} +body { + margin: 0; +} +article, +aside, +details, +figcaption, +figure, +footer, +header, +hgroup, +main, +menu, +nav, +section, +summary { + display: block; +} +audio, +canvas, +progress, +video { + display: inline-block; + vertical-align: baseline; +} +audio:not([controls]) { + display: none; + height: 0; +} +[hidden], +template { + display: none; +} +a { + background-color: transparent; +} +a:active, +a:hover { + outline: 0; +} +abbr[title] { + border-bottom: none; + text-decoration: underline; + -webkit-text-decoration: underline dotted; + -moz-text-decoration: underline dotted; + text-decoration: underline dotted; +} +b, +strong { + font-weight: bold; +} +dfn { + font-style: italic; +} +h1 { + font-size: 2em; + margin: 0.67em 0; +} +mark { + background: #ff0; + color: #000; +} +small { + font-size: 80%; +} +sub, +sup { + font-size: 75%; + line-height: 0; + position: relative; + vertical-align: baseline; +} +sup { + top: -0.5em; +} +sub { + bottom: -0.25em; +} +img { + border: 0; +} +svg:not(:root) { + overflow: hidden; +} +figure { + margin: 1em 40px; +} +hr { + -webkit-box-sizing: content-box; + -moz-box-sizing: content-box; + box-sizing: content-box; + height: 0; +} +pre { + overflow: auto; +} +code, +kbd, +pre, +samp { + font-family: monospace, monospace; + font-size: 1em; +} +button, +input, +optgroup, +select, +textarea { + color: inherit; + font: inherit; + margin: 0; +} +button { + overflow: visible; +} +button, +select { + text-transform: none; +} +button, +html input[type="button"], +input[type="reset"], +input[type="submit"] { + -webkit-appearance: button; + cursor: pointer; +} +button[disabled], +html input[disabled] { + cursor: default; +} +button::-moz-focus-inner, +input::-moz-focus-inner { + border: 0; + padding: 0; +} +input { + line-height: normal; +} +input[type="checkbox"], +input[type="radio"] { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + padding: 0; +} +input[type="number"]::-webkit-inner-spin-button, +input[type="number"]::-webkit-outer-spin-button { + height: auto; +} +input[type="search"] { + -webkit-appearance: textfield; + -webkit-box-sizing: content-box; + -moz-box-sizing: content-box; + box-sizing: content-box; +} +input[type="search"]::-webkit-search-cancel-button, +input[type="search"]::-webkit-search-decoration { + -webkit-appearance: none; +} +fieldset { + border: 1px solid #c0c0c0; + margin: 0 2px; + padding: 0.35em 0.625em 0.75em; +} +legend { + border: 0; + padding: 0; +} +textarea { + overflow: auto; +} +optgroup { + font-weight: bold; +} +table { + border-collapse: collapse; + border-spacing: 0; +} +td, +th { + padding: 0; +} +/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */ +@media print { + *, + *:before, + *:after { + color: #000 !important; + text-shadow: none !important; + background: transparent !important; + -webkit-box-shadow: none !important; + box-shadow: none !important; + } + a, + a:visited { + text-decoration: underline; + } + a[href]:after { + content: " (" attr(href) ")"; + } + abbr[title]:after { + content: " (" attr(title) ")"; + } + a[href^="#"]:after, + a[href^="javascript:"]:after { + content: ""; + } + pre, + blockquote { + border: 1px solid #999; + page-break-inside: avoid; + } + thead { + display: table-header-group; + } + tr, + img { + page-break-inside: avoid; + } + img { + max-width: 100% !important; + } + p, + h2, + h3 { + orphans: 3; + widows: 3; + } + h2, + h3 { + page-break-after: avoid; + } + .navbar { + display: none; + } + .btn > .caret, + .dropup > .btn > .caret { + border-top-color: #000 !important; + } + .label { + border: 1px solid #000; + } + .table { + border-collapse: collapse !important; + } + .table td, + .table th { + background-color: #fff !important; + } + .table-bordered th, + .table-bordered td { + border: 1px solid #ddd !important; + } +} +@font-face { + font-family: "Glyphicons Halflings"; + src: url("glyphicons-halflings-regular.eot"); + src: url("glyphicons-halflings-regular.eot?#iefix") format("embedded-opentype"), url("glyphicons-halflings-regular.woff2") format("woff2"), url("glyphicons-halflings-regular.woff") format("woff"), url("glyphicons-halflings-regular.ttf") format("truetype"), url("glyphicons-halflings-regular.svg#glyphicons_halflingsregular") format("svg"); +} +.glyphicon { + position: relative; + top: 1px; + display: inline-block; + font-family: "Glyphicons Halflings"; + font-style: normal; + font-weight: 400; + line-height: 1; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} +.glyphicon-asterisk:before { + content: "\002a"; +} +.glyphicon-plus:before { + content: "\002b"; +} +.glyphicon-euro:before, +.glyphicon-eur:before { + content: "\20ac"; +} +.glyphicon-minus:before { + content: "\2212"; +} +.glyphicon-cloud:before { + content: "\2601"; +} +.glyphicon-envelope:before { + content: "\2709"; +} +.glyphicon-pencil:before { + content: "\270f"; +} +.glyphicon-glass:before { + content: "\e001"; +} +.glyphicon-music:before { + content: "\e002"; +} +.glyphicon-search:before { + content: "\e003"; +} +.glyphicon-heart:before { + content: "\e005"; +} +.glyphicon-star:before { + content: "\e006"; +} +.glyphicon-star-empty:before { + content: "\e007"; +} +.glyphicon-user:before { + content: "\e008"; +} +.glyphicon-film:before { + content: "\e009"; +} +.glyphicon-th-large:before { + content: "\e010"; +} +.glyphicon-th:before { + content: "\e011"; +} +.glyphicon-th-list:before { + content: "\e012"; +} +.glyphicon-ok:before { + content: "\e013"; +} +.glyphicon-remove:before { + content: "\e014"; +} +.glyphicon-zoom-in:before { + content: "\e015"; +} +.glyphicon-zoom-out:before { + content: "\e016"; +} +.glyphicon-off:before { + content: "\e017"; +} +.glyphicon-signal:before { + content: "\e018"; +} +.glyphicon-cog:before { + content: "\e019"; +} +.glyphicon-trash:before { + content: "\e020"; +} +.glyphicon-home:before { + content: "\e021"; +} +.glyphicon-file:before { + content: "\e022"; +} +.glyphicon-time:before { + content: "\e023"; +} +.glyphicon-road:before { + content: "\e024"; +} +.glyphicon-download-alt:before { + content: "\e025"; +} +.glyphicon-download:before { + content: "\e026"; +} +.glyphicon-upload:before { + content: "\e027"; +} +.glyphicon-inbox:before { + content: "\e028"; +} +.glyphicon-play-circle:before { + content: "\e029"; +} +.glyphicon-repeat:before { + content: "\e030"; +} +.glyphicon-refresh:before { + content: "\e031"; +} +.glyphicon-list-alt:before { + content: "\e032"; +} +.glyphicon-lock:before { + content: "\e033"; +} +.glyphicon-flag:before { + content: "\e034"; +} +.glyphicon-headphones:before { + content: "\e035"; +} +.glyphicon-volume-off:before { + content: "\e036"; +} +.glyphicon-volume-down:before { + content: "\e037"; +} +.glyphicon-volume-up:before { + content: "\e038"; +} +.glyphicon-qrcode:before { + content: "\e039"; +} +.glyphicon-barcode:before { + content: "\e040"; +} +.glyphicon-tag:before { + content: "\e041"; +} +.glyphicon-tags:before { + content: "\e042"; +} +.glyphicon-book:before { + content: "\e043"; +} +.glyphicon-bookmark:before { + content: "\e044"; +} +.glyphicon-print:before { + content: "\e045"; +} +.glyphicon-camera:before { + content: "\e046"; +} +.glyphicon-font:before { + content: "\e047"; +} +.glyphicon-bold:before { + content: "\e048"; +} +.glyphicon-italic:before { + content: "\e049"; +} +.glyphicon-text-height:before { + content: "\e050"; +} +.glyphicon-text-width:before { + content: "\e051"; +} +.glyphicon-align-left:before { + content: "\e052"; +} +.glyphicon-align-center:before { + content: "\e053"; +} +.glyphicon-align-right:before { + content: "\e054"; +} +.glyphicon-align-justify:before { + content: "\e055"; +} +.glyphicon-list:before { + content: "\e056"; +} +.glyphicon-indent-left:before { + content: "\e057"; +} +.glyphicon-indent-right:before { + content: "\e058"; +} +.glyphicon-facetime-video:before { + content: "\e059"; +} +.glyphicon-picture:before { + content: "\e060"; +} +.glyphicon-map-marker:before { + content: "\e062"; +} +.glyphicon-adjust:before { + content: "\e063"; +} +.glyphicon-tint:before { + content: "\e064"; +} +.glyphicon-edit:before { + content: "\e065"; +} +.glyphicon-share:before { + content: "\e066"; +} +.glyphicon-check:before { + content: "\e067"; +} +.glyphicon-move:before { + content: "\e068"; +} +.glyphicon-step-backward:before { + content: "\e069"; +} +.glyphicon-fast-backward:before { + content: "\e070"; +} +.glyphicon-backward:before { + content: "\e071"; +} +.glyphicon-play:before { + content: "\e072"; +} +.glyphicon-pause:before { + content: "\e073"; +} +.glyphicon-stop:before { + content: "\e074"; +} +.glyphicon-forward:before { + content: "\e075"; +} +.glyphicon-fast-forward:before { + content: "\e076"; +} +.glyphicon-step-forward:before { + content: "\e077"; +} +.glyphicon-eject:before { + content: "\e078"; +} +.glyphicon-chevron-left:before { + content: "\e079"; +} +.glyphicon-chevron-right:before { + content: "\e080"; +} +.glyphicon-plus-sign:before { + content: "\e081"; +} +.glyphicon-minus-sign:before { + content: "\e082"; +} +.glyphicon-remove-sign:before { + content: "\e083"; +} +.glyphicon-ok-sign:before { + content: "\e084"; +} +.glyphicon-question-sign:before { + content: "\e085"; +} +.glyphicon-info-sign:before { + content: "\e086"; +} +.glyphicon-screenshot:before { + content: "\e087"; +} +.glyphicon-remove-circle:before { + content: "\e088"; +} +.glyphicon-ok-circle:before { + content: "\e089"; +} +.glyphicon-ban-circle:before { + content: "\e090"; +} +.glyphicon-arrow-left:before { + content: "\e091"; +} +.glyphicon-arrow-right:before { + content: "\e092"; +} +.glyphicon-arrow-up:before { + content: "\e093"; +} +.glyphicon-arrow-down:before { + content: "\e094"; +} +.glyphicon-share-alt:before { + content: "\e095"; +} +.glyphicon-resize-full:before { + content: "\e096"; +} +.glyphicon-resize-small:before { + content: "\e097"; +} +.glyphicon-exclamation-sign:before { + content: "\e101"; +} +.glyphicon-gift:before { + content: "\e102"; +} +.glyphicon-leaf:before { + content: "\e103"; +} +.glyphicon-fire:before { + content: "\e104"; +} +.glyphicon-eye-open:before { + content: "\e105"; +} +.glyphicon-eye-close:before { + content: "\e106"; +} +.glyphicon-warning-sign:before { + content: "\e107"; +} +.glyphicon-plane:before { + content: "\e108"; +} +.glyphicon-calendar:before { + content: "\e109"; +} +.glyphicon-random:before { + content: "\e110"; +} +.glyphicon-comment:before { + content: "\e111"; +} +.glyphicon-magnet:before { + content: "\e112"; +} +.glyphicon-chevron-up:before { + content: "\e113"; +} +.glyphicon-chevron-down:before { + content: "\e114"; +} +.glyphicon-retweet:before { + content: "\e115"; +} +.glyphicon-shopping-cart:before { + content: "\e116"; +} +.glyphicon-folder-close:before { + content: "\e117"; +} +.glyphicon-folder-open:before { + content: "\e118"; +} +.glyphicon-resize-vertical:before { + content: "\e119"; +} +.glyphicon-resize-horizontal:before { + content: "\e120"; +} +.glyphicon-hdd:before { + content: "\e121"; +} +.glyphicon-bullhorn:before { + content: "\e122"; +} +.glyphicon-bell:before { + content: "\e123"; +} +.glyphicon-certificate:before { + content: "\e124"; +} +.glyphicon-thumbs-up:before { + content: "\e125"; +} +.glyphicon-thumbs-down:before { + content: "\e126"; +} +.glyphicon-hand-right:before { + content: "\e127"; +} +.glyphicon-hand-left:before { + content: "\e128"; +} +.glyphicon-hand-up:before { + content: "\e129"; +} +.glyphicon-hand-down:before { + content: "\e130"; +} +.glyphicon-circle-arrow-right:before { + content: "\e131"; +} +.glyphicon-circle-arrow-left:before { + content: "\e132"; +} +.glyphicon-circle-arrow-up:before { + content: "\e133"; +} +.glyphicon-circle-arrow-down:before { + content: "\e134"; +} +.glyphicon-globe:before { + content: "\e135"; +} +.glyphicon-wrench:before { + content: "\e136"; +} +.glyphicon-tasks:before { + content: "\e137"; +} +.glyphicon-filter:before { + content: "\e138"; +} +.glyphicon-briefcase:before { + content: "\e139"; +} +.glyphicon-fullscreen:before { + content: "\e140"; +} +.glyphicon-dashboard:before { + content: "\e141"; +} +.glyphicon-paperclip:before { + content: "\e142"; +} +.glyphicon-heart-empty:before { + content: "\e143"; +} +.glyphicon-link:before { + content: "\e144"; +} +.glyphicon-phone:before { + content: "\e145"; +} +.glyphicon-pushpin:before { + content: "\e146"; +} +.glyphicon-usd:before { + content: "\e148"; +} +.glyphicon-gbp:before { + content: "\e149"; +} +.glyphicon-sort:before { + content: "\e150"; +} +.glyphicon-sort-by-alphabet:before { + content: "\e151"; +} +.glyphicon-sort-by-alphabet-alt:before { + content: "\e152"; +} +.glyphicon-sort-by-order:before { + content: "\e153"; +} +.glyphicon-sort-by-order-alt:before { + content: "\e154"; +} +.glyphicon-sort-by-attributes:before { + content: "\e155"; +} +.glyphicon-sort-by-attributes-alt:before { + content: "\e156"; +} +.glyphicon-unchecked:before { + content: "\e157"; +} +.glyphicon-expand:before { + content: "\e158"; +} +.glyphicon-collapse-down:before { + content: "\e159"; +} +.glyphicon-collapse-up:before { + content: "\e160"; +} +.glyphicon-log-in:before { + content: "\e161"; +} +.glyphicon-flash:before { + content: "\e162"; +} +.glyphicon-log-out:before { + content: "\e163"; +} +.glyphicon-new-window:before { + content: "\e164"; +} +.glyphicon-record:before { + content: "\e165"; +} +.glyphicon-save:before { + content: "\e166"; +} +.glyphicon-open:before { + content: "\e167"; +} +.glyphicon-saved:before { + content: "\e168"; +} +.glyphicon-import:before { + content: "\e169"; +} +.glyphicon-export:before { + content: "\e170"; +} +.glyphicon-send:before { + content: "\e171"; +} +.glyphicon-floppy-disk:before { + content: "\e172"; +} +.glyphicon-floppy-saved:before { + content: "\e173"; +} +.glyphicon-floppy-remove:before { + content: "\e174"; +} +.glyphicon-floppy-save:before { + content: "\e175"; +} +.glyphicon-floppy-open:before { + content: "\e176"; +} +.glyphicon-credit-card:before { + content: "\e177"; +} +.glyphicon-transfer:before { + content: "\e178"; +} +.glyphicon-cutlery:before { + content: "\e179"; +} +.glyphicon-header:before { + content: "\e180"; +} +.glyphicon-compressed:before { + content: "\e181"; +} +.glyphicon-earphone:before { + content: "\e182"; +} +.glyphicon-phone-alt:before { + content: "\e183"; +} +.glyphicon-tower:before { + content: "\e184"; +} +.glyphicon-stats:before { + content: "\e185"; +} +.glyphicon-sd-video:before { + content: "\e186"; +} +.glyphicon-hd-video:before { + content: "\e187"; +} +.glyphicon-subtitles:before { + content: "\e188"; +} +.glyphicon-sound-stereo:before { + content: "\e189"; +} +.glyphicon-sound-dolby:before { + content: "\e190"; +} +.glyphicon-sound-5-1:before { + content: "\e191"; +} +.glyphicon-sound-6-1:before { + content: "\e192"; +} +.glyphicon-sound-7-1:before { + content: "\e193"; +} +.glyphicon-copyright-mark:before { + content: "\e194"; +} +.glyphicon-registration-mark:before { + content: "\e195"; +} +.glyphicon-cloud-download:before { + content: "\e197"; +} +.glyphicon-cloud-upload:before { + content: "\e198"; +} +.glyphicon-tree-conifer:before { + content: "\e199"; +} +.glyphicon-tree-deciduous:before { + content: "\e200"; +} +.glyphicon-cd:before { + content: "\e201"; +} +.glyphicon-save-file:before { + content: "\e202"; +} +.glyphicon-open-file:before { + content: "\e203"; +} +.glyphicon-level-up:before { + content: "\e204"; +} +.glyphicon-copy:before { + content: "\e205"; +} +.glyphicon-paste:before { + content: "\e206"; +} +.glyphicon-alert:before { + content: "\e209"; +} +.glyphicon-equalizer:before { + content: "\e210"; +} +.glyphicon-king:before { + content: "\e211"; +} +.glyphicon-queen:before { + content: "\e212"; +} +.glyphicon-pawn:before { + content: "\e213"; +} +.glyphicon-bishop:before { + content: "\e214"; +} +.glyphicon-knight:before { + content: "\e215"; +} +.glyphicon-baby-formula:before { + content: "\e216"; +} +.glyphicon-tent:before { + content: "\26fa"; +} +.glyphicon-blackboard:before { + content: "\e218"; +} +.glyphicon-bed:before { + content: "\e219"; +} +.glyphicon-apple:before { + content: "\f8ff"; +} +.glyphicon-erase:before { + content: "\e221"; +} +.glyphicon-hourglass:before { + content: "\231b"; +} +.glyphicon-lamp:before { + content: "\e223"; +} +.glyphicon-duplicate:before { + content: "\e224"; +} +.glyphicon-piggy-bank:before { + content: "\e225"; +} +.glyphicon-scissors:before { + content: "\e226"; +} +.glyphicon-bitcoin:before { + content: "\e227"; +} +.glyphicon-btc:before { + content: "\e227"; +} +.glyphicon-xbt:before { + content: "\e227"; +} +.glyphicon-yen:before { + content: "\00a5"; +} +.glyphicon-jpy:before { + content: "\00a5"; +} +.glyphicon-ruble:before { + content: "\20bd"; +} +.glyphicon-rub:before { + content: "\20bd"; +} +.glyphicon-scale:before { + content: "\e230"; +} +.glyphicon-ice-lolly:before { + content: "\e231"; +} +.glyphicon-ice-lolly-tasted:before { + content: "\e232"; +} +.glyphicon-education:before { + content: "\e233"; +} +.glyphicon-option-horizontal:before { + content: "\e234"; +} +.glyphicon-option-vertical:before { + content: "\e235"; +} +.glyphicon-menu-hamburger:before { + content: "\e236"; +} +.glyphicon-modal-window:before { + content: "\e237"; +} +.glyphicon-oil:before { + content: "\e238"; +} +.glyphicon-grain:before { + content: "\e239"; +} +.glyphicon-sunglasses:before { + content: "\e240"; +} +.glyphicon-text-size:before { + content: "\e241"; +} +.glyphicon-text-color:before { + content: "\e242"; +} +.glyphicon-text-background:before { + content: "\e243"; +} +.glyphicon-object-align-top:before { + content: "\e244"; +} +.glyphicon-object-align-bottom:before { + content: "\e245"; +} +.glyphicon-object-align-horizontal:before { + content: "\e246"; +} +.glyphicon-object-align-left:before { + content: "\e247"; +} +.glyphicon-object-align-vertical:before { + content: "\e248"; +} +.glyphicon-object-align-right:before { + content: "\e249"; +} +.glyphicon-triangle-right:before { + content: "\e250"; +} +.glyphicon-triangle-left:before { + content: "\e251"; +} +.glyphicon-triangle-bottom:before { + content: "\e252"; +} +.glyphicon-triangle-top:before { + content: "\e253"; +} +.glyphicon-console:before { + content: "\e254"; +} +.glyphicon-superscript:before { + content: "\e255"; +} +.glyphicon-subscript:before { + content: "\e256"; +} +.glyphicon-menu-left:before { + content: "\e257"; +} +.glyphicon-menu-right:before { + content: "\e258"; +} +.glyphicon-menu-down:before { + content: "\e259"; +} +.glyphicon-menu-up:before { + content: "\e260"; +} +* { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} +*:before, +*:after { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} +html { + font-size: 10px; + -webkit-tap-highlight-color: rgba(0, 0, 0, 0); +} +body { + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; + font-size: 14px; + line-height: 1.42857143; + color: #333333; + background-color: #fff; +} +input, +button, +select, +textarea { + font-family: inherit; + font-size: inherit; + line-height: inherit; +} +a { + color: #337ab7; + text-decoration: none; +} +a:hover, +a:focus { + color: #23527c; + text-decoration: underline; +} +a:focus { + outline: 5px auto -webkit-focus-ring-color; + outline-offset: -2px; +} +figure { + margin: 0; +} +img { + vertical-align: middle; +} +.img-responsive, +.thumbnail > img, +.thumbnail a > img, +.carousel-inner > .item > img, +.carousel-inner > .item > a > img { + display: block; + max-width: 100%; + height: auto; +} +.img-rounded { + border-radius: 6px; +} +.img-thumbnail { + padding: 4px; + line-height: 1.42857143; + background-color: #fff; + border: 1px solid #ddd; + border-radius: 4px; + -webkit-transition: all 0.2s ease-in-out; + -o-transition: all 0.2s ease-in-out; + transition: all 0.2s ease-in-out; + display: inline-block; + max-width: 100%; + height: auto; +} +.img-circle { + border-radius: 50%; +} +hr { + margin-top: 20px; + margin-bottom: 20px; + border: 0; + border-top: 1px solid #eeeeee; +} +.sr-only { + position: absolute; + width: 1px; + height: 1px; + padding: 0; + margin: -1px; + overflow: hidden; + clip: rect(0, 0, 0, 0); + border: 0; +} +.sr-only-focusable:active, +.sr-only-focusable:focus { + position: static; + width: auto; + height: auto; + margin: 0; + overflow: visible; + clip: auto; +} +[role="button"] { + cursor: pointer; +} +h1, +h2, +h3, +h4, +h5, +h6, +.h1, +.h2, +.h3, +.h4, +.h5, +.h6 { + font-family: inherit; + font-weight: 500; + line-height: 1.1; + color: inherit; +} +h1 small, +h2 small, +h3 small, +h4 small, +h5 small, +h6 small, +.h1 small, +.h2 small, +.h3 small, +.h4 small, +.h5 small, +.h6 small, +h1 .small, +h2 .small, +h3 .small, +h4 .small, +h5 .small, +h6 .small, +.h1 .small, +.h2 .small, +.h3 .small, +.h4 .small, +.h5 .small, +.h6 .small { + font-weight: 400; + line-height: 1; + color: #777777; +} +h1, +.h1, +h2, +.h2, +h3, +.h3 { + margin-top: 20px; + margin-bottom: 10px; +} +h1 small, +.h1 small, +h2 small, +.h2 small, +h3 small, +.h3 small, +h1 .small, +.h1 .small, +h2 .small, +.h2 .small, +h3 .small, +.h3 .small { + font-size: 65%; +} +h4, +.h4, +h5, +.h5, +h6, +.h6 { + margin-top: 10px; + margin-bottom: 10px; +} +h4 small, +.h4 small, +h5 small, +.h5 small, +h6 small, +.h6 small, +h4 .small, +.h4 .small, +h5 .small, +.h5 .small, +h6 .small, +.h6 .small { + font-size: 75%; +} +h1, +.h1 { + font-size: 36px; +} +h2, +.h2 { + font-size: 30px; +} +h3, +.h3 { + font-size: 24px; +} +h4, +.h4 { + font-size: 18px; +} +h5, +.h5 { + font-size: 14px; +} +h6, +.h6 { + font-size: 12px; +} +p { + margin: 0 0 10px; +} +.lead { + margin-bottom: 20px; + font-size: 16px; + font-weight: 300; + line-height: 1.4; +} +@media (min-width: 768px) { + .lead { + font-size: 21px; + } +} +small, +.small { + font-size: 85%; +} +mark, +.mark { + padding: 0.2em; + background-color: #fcf8e3; +} +.text-left { + text-align: left; +} +.text-right { + text-align: right; +} +.text-center { + text-align: center; +} +.text-justify { + text-align: justify; +} +.text-nowrap { + white-space: nowrap; +} +.text-lowercase { + text-transform: lowercase; +} +.text-uppercase { + text-transform: uppercase; +} +.text-capitalize { + text-transform: capitalize; +} +.text-muted { + color: #777777; +} +.text-primary { + color: #337ab7; +} +a.text-primary:hover, +a.text-primary:focus { + color: #286090; +} +.text-success { + color: #3c763d; +} +a.text-success:hover, +a.text-success:focus { + color: #2b542c; +} +.text-info { + color: #31708f; +} +a.text-info:hover, +a.text-info:focus { + color: #245269; +} +.text-warning { + color: #8a6d3b; +} +a.text-warning:hover, +a.text-warning:focus { + color: #66512c; +} +.text-danger { + color: #a94442; +} +a.text-danger:hover, +a.text-danger:focus { + color: #843534; +} +.bg-primary { + color: #fff; + background-color: #337ab7; +} +a.bg-primary:hover, +a.bg-primary:focus { + background-color: #286090; +} +.bg-success { + background-color: #dff0d8; +} +a.bg-success:hover, +a.bg-success:focus { + background-color: #c1e2b3; +} +.bg-info { + background-color: #d9edf7; +} +a.bg-info:hover, +a.bg-info:focus { + background-color: #afd9ee; +} +.bg-warning { + background-color: #fcf8e3; +} +a.bg-warning:hover, +a.bg-warning:focus { + background-color: #f7ecb5; +} +.bg-danger { + background-color: #f2dede; +} +a.bg-danger:hover, +a.bg-danger:focus { + background-color: #e4b9b9; +} +.page-header { + padding-bottom: 9px; + margin: 40px 0 20px; + border-bottom: 1px solid #eeeeee; +} +ul, +ol { + margin-top: 0; + margin-bottom: 10px; +} +ul ul, +ol ul, +ul ol, +ol ol { + margin-bottom: 0; +} +.list-unstyled { + padding-left: 0; + list-style: none; +} +.list-inline { + padding-left: 0; + list-style: none; + margin-left: -5px; +} +.list-inline > li { + display: inline-block; + padding-right: 5px; + padding-left: 5px; +} +dl { + margin-top: 0; + margin-bottom: 20px; +} +dt, +dd { + line-height: 1.42857143; +} +dt { + font-weight: 700; +} +dd { + margin-left: 0; +} +@media (min-width: 768px) { + .dl-horizontal dt { + float: left; + width: 160px; + clear: left; + text-align: right; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + } + .dl-horizontal dd { + margin-left: 180px; + } +} +abbr[title], +abbr[data-original-title] { + cursor: help; +} +.initialism { + font-size: 90%; + text-transform: uppercase; +} +blockquote { + padding: 10px 20px; + margin: 0 0 20px; + font-size: 17.5px; + border-left: 5px solid #eeeeee; +} +blockquote p:last-child, +blockquote ul:last-child, +blockquote ol:last-child { + margin-bottom: 0; +} +blockquote footer, +blockquote small, +blockquote .small { + display: block; + font-size: 80%; + line-height: 1.42857143; + color: #777777; +} +blockquote footer:before, +blockquote small:before, +blockquote .small:before { + content: "\2014 \00A0"; +} +.blockquote-reverse, +blockquote.pull-right { + padding-right: 15px; + padding-left: 0; + text-align: right; + border-right: 5px solid #eeeeee; + border-left: 0; +} +.blockquote-reverse footer:before, +blockquote.pull-right footer:before, +.blockquote-reverse small:before, +blockquote.pull-right small:before, +.blockquote-reverse .small:before, +blockquote.pull-right .small:before { + content: ""; +} +.blockquote-reverse footer:after, +blockquote.pull-right footer:after, +.blockquote-reverse small:after, +blockquote.pull-right small:after, +.blockquote-reverse .small:after, +blockquote.pull-right .small:after { + content: "\00A0 \2014"; +} +address { + margin-bottom: 20px; + font-style: normal; + line-height: 1.42857143; +} +code, +kbd, +pre, +samp { + font-family: Menlo, Monaco, Consolas, "Courier New", monospace; +} +code { + padding: 2px 4px; + font-size: 90%; + color: #c7254e; + background-color: #f9f2f4; + border-radius: 4px; +} +kbd { + padding: 2px 4px; + font-size: 90%; + color: #fff; + background-color: #333; + border-radius: 3px; + -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.25); + box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.25); +} +kbd kbd { + padding: 0; + font-size: 100%; + font-weight: 700; + -webkit-box-shadow: none; + box-shadow: none; +} +pre { + display: block; + padding: 9.5px; + margin: 0 0 10px; + font-size: 13px; + line-height: 1.42857143; + color: #333333; + word-break: break-all; + word-wrap: break-word; + background-color: #f5f5f5; + border: 1px solid #ccc; + border-radius: 4px; +} +pre code { + padding: 0; + font-size: inherit; + color: inherit; + white-space: pre-wrap; + background-color: transparent; + border-radius: 0; +} +.pre-scrollable { + max-height: 340px; + overflow-y: scroll; +} +.container { + padding-right: 15px; + padding-left: 15px; + margin-right: auto; + margin-left: auto; +} +@media (min-width: 768px) { + .container { + width: 750px; + } +} +@media (min-width: 992px) { + .container { + width: 970px; + } +} +@media (min-width: 1200px) { + .container { + width: 1170px; + } +} +.container-fluid { + padding-right: 15px; + padding-left: 15px; + margin-right: auto; + margin-left: auto; +} +.row { + margin-right: -15px; + margin-left: -15px; +} +.row-no-gutters { + margin-right: 0; + margin-left: 0; +} +.row-no-gutters [class*="col-"] { + padding-right: 0; + padding-left: 0; +} +.col-xs-1, +.col-sm-1, +.col-md-1, +.col-lg-1, +.col-xs-2, +.col-sm-2, +.col-md-2, +.col-lg-2, +.col-xs-3, +.col-sm-3, +.col-md-3, +.col-lg-3, +.col-xs-4, +.col-sm-4, +.col-md-4, +.col-lg-4, +.col-xs-5, +.col-sm-5, +.col-md-5, +.col-lg-5, +.col-xs-6, +.col-sm-6, +.col-md-6, +.col-lg-6, +.col-xs-7, +.col-sm-7, +.col-md-7, +.col-lg-7, +.col-xs-8, +.col-sm-8, +.col-md-8, +.col-lg-8, +.col-xs-9, +.col-sm-9, +.col-md-9, +.col-lg-9, +.col-xs-10, +.col-sm-10, +.col-md-10, +.col-lg-10, +.col-xs-11, +.col-sm-11, +.col-md-11, +.col-lg-11, +.col-xs-12, +.col-sm-12, +.col-md-12, +.col-lg-12 { + position: relative; + min-height: 1px; + padding-right: 15px; + padding-left: 15px; +} +.col-xs-1, +.col-xs-2, +.col-xs-3, +.col-xs-4, +.col-xs-5, +.col-xs-6, +.col-xs-7, +.col-xs-8, +.col-xs-9, +.col-xs-10, +.col-xs-11, +.col-xs-12 { + float: left; +} +.col-xs-12 { + width: 100%; +} +.col-xs-11 { + width: 91.66666667%; +} +.col-xs-10 { + width: 83.33333333%; +} +.col-xs-9 { + width: 75%; +} +.col-xs-8 { + width: 66.66666667%; +} +.col-xs-7 { + width: 58.33333333%; +} +.col-xs-6 { + width: 50%; +} +.col-xs-5 { + width: 41.66666667%; +} +.col-xs-4 { + width: 33.33333333%; +} +.col-xs-3 { + width: 25%; +} +.col-xs-2 { + width: 16.66666667%; +} +.col-xs-1 { + width: 8.33333333%; +} +.col-xs-pull-12 { + right: 100%; +} +.col-xs-pull-11 { + right: 91.66666667%; +} +.col-xs-pull-10 { + right: 83.33333333%; +} +.col-xs-pull-9 { + right: 75%; +} +.col-xs-pull-8 { + right: 66.66666667%; +} +.col-xs-pull-7 { + right: 58.33333333%; +} +.col-xs-pull-6 { + right: 50%; +} +.col-xs-pull-5 { + right: 41.66666667%; +} +.col-xs-pull-4 { + right: 33.33333333%; +} +.col-xs-pull-3 { + right: 25%; +} +.col-xs-pull-2 { + right: 16.66666667%; +} +.col-xs-pull-1 { + right: 8.33333333%; +} +.col-xs-pull-0 { + right: auto; +} +.col-xs-push-12 { + left: 100%; +} +.col-xs-push-11 { + left: 91.66666667%; +} +.col-xs-push-10 { + left: 83.33333333%; +} +.col-xs-push-9 { + left: 75%; +} +.col-xs-push-8 { + left: 66.66666667%; +} +.col-xs-push-7 { + left: 58.33333333%; +} +.col-xs-push-6 { + left: 50%; +} +.col-xs-push-5 { + left: 41.66666667%; +} +.col-xs-push-4 { + left: 33.33333333%; +} +.col-xs-push-3 { + left: 25%; +} +.col-xs-push-2 { + left: 16.66666667%; +} +.col-xs-push-1 { + left: 8.33333333%; +} +.col-xs-push-0 { + left: auto; +} +.col-xs-offset-12 { + margin-left: 100%; +} +.col-xs-offset-11 { + margin-left: 91.66666667%; +} +.col-xs-offset-10 { + margin-left: 83.33333333%; +} +.col-xs-offset-9 { + margin-left: 75%; +} +.col-xs-offset-8 { + margin-left: 66.66666667%; +} +.col-xs-offset-7 { + margin-left: 58.33333333%; +} +.col-xs-offset-6 { + margin-left: 50%; +} +.col-xs-offset-5 { + margin-left: 41.66666667%; +} +.col-xs-offset-4 { + margin-left: 33.33333333%; +} +.col-xs-offset-3 { + margin-left: 25%; +} +.col-xs-offset-2 { + margin-left: 16.66666667%; +} +.col-xs-offset-1 { + margin-left: 8.33333333%; +} +.col-xs-offset-0 { + margin-left: 0%; +} +@media (min-width: 768px) { + .col-sm-1, + .col-sm-2, + .col-sm-3, + .col-sm-4, + .col-sm-5, + .col-sm-6, + .col-sm-7, + .col-sm-8, + .col-sm-9, + .col-sm-10, + .col-sm-11, + .col-sm-12 { + float: left; + } + .col-sm-12 { + width: 100%; + } + .col-sm-11 { + width: 91.66666667%; + } + .col-sm-10 { + width: 83.33333333%; + } + .col-sm-9 { + width: 75%; + } + .col-sm-8 { + width: 66.66666667%; + } + .col-sm-7 { + width: 58.33333333%; + } + .col-sm-6 { + width: 50%; + } + .col-sm-5 { + width: 41.66666667%; + } + .col-sm-4 { + width: 33.33333333%; + } + .col-sm-3 { + width: 25%; + } + .col-sm-2 { + width: 16.66666667%; + } + .col-sm-1 { + width: 8.33333333%; + } + .col-sm-pull-12 { + right: 100%; + } + .col-sm-pull-11 { + right: 91.66666667%; + } + .col-sm-pull-10 { + right: 83.33333333%; + } + .col-sm-pull-9 { + right: 75%; + } + .col-sm-pull-8 { + right: 66.66666667%; + } + .col-sm-pull-7 { + right: 58.33333333%; + } + .col-sm-pull-6 { + right: 50%; + } + .col-sm-pull-5 { + right: 41.66666667%; + } + .col-sm-pull-4 { + right: 33.33333333%; + } + .col-sm-pull-3 { + right: 25%; + } + .col-sm-pull-2 { + right: 16.66666667%; + } + .col-sm-pull-1 { + right: 8.33333333%; + } + .col-sm-pull-0 { + right: auto; + } + .col-sm-push-12 { + left: 100%; + } + .col-sm-push-11 { + left: 91.66666667%; + } + .col-sm-push-10 { + left: 83.33333333%; + } + .col-sm-push-9 { + left: 75%; + } + .col-sm-push-8 { + left: 66.66666667%; + } + .col-sm-push-7 { + left: 58.33333333%; + } + .col-sm-push-6 { + left: 50%; + } + .col-sm-push-5 { + left: 41.66666667%; + } + .col-sm-push-4 { + left: 33.33333333%; + } + .col-sm-push-3 { + left: 25%; + } + .col-sm-push-2 { + left: 16.66666667%; + } + .col-sm-push-1 { + left: 8.33333333%; + } + .col-sm-push-0 { + left: auto; + } + .col-sm-offset-12 { + margin-left: 100%; + } + .col-sm-offset-11 { + margin-left: 91.66666667%; + } + .col-sm-offset-10 { + margin-left: 83.33333333%; + } + .col-sm-offset-9 { + margin-left: 75%; + } + .col-sm-offset-8 { + margin-left: 66.66666667%; + } + .col-sm-offset-7 { + margin-left: 58.33333333%; + } + .col-sm-offset-6 { + margin-left: 50%; + } + .col-sm-offset-5 { + margin-left: 41.66666667%; + } + .col-sm-offset-4 { + margin-left: 33.33333333%; + } + .col-sm-offset-3 { + margin-left: 25%; + } + .col-sm-offset-2 { + margin-left: 16.66666667%; + } + .col-sm-offset-1 { + margin-left: 8.33333333%; + } + .col-sm-offset-0 { + margin-left: 0%; + } +} +@media (min-width: 992px) { + .col-md-1, + .col-md-2, + .col-md-3, + .col-md-4, + .col-md-5, + .col-md-6, + .col-md-7, + .col-md-8, + .col-md-9, + .col-md-10, + .col-md-11, + .col-md-12 { + float: left; + } + .col-md-12 { + width: 100%; + } + .col-md-11 { + width: 91.66666667%; + } + .col-md-10 { + width: 83.33333333%; + } + .col-md-9 { + width: 75%; + } + .col-md-8 { + width: 66.66666667%; + } + .col-md-7 { + width: 58.33333333%; + } + .col-md-6 { + width: 50%; + } + .col-md-5 { + width: 41.66666667%; + } + .col-md-4 { + width: 33.33333333%; + } + .col-md-3 { + width: 25%; + } + .col-md-2 { + width: 16.66666667%; + } + .col-md-1 { + width: 8.33333333%; + } + .col-md-pull-12 { + right: 100%; + } + .col-md-pull-11 { + right: 91.66666667%; + } + .col-md-pull-10 { + right: 83.33333333%; + } + .col-md-pull-9 { + right: 75%; + } + .col-md-pull-8 { + right: 66.66666667%; + } + .col-md-pull-7 { + right: 58.33333333%; + } + .col-md-pull-6 { + right: 50%; + } + .col-md-pull-5 { + right: 41.66666667%; + } + .col-md-pull-4 { + right: 33.33333333%; + } + .col-md-pull-3 { + right: 25%; + } + .col-md-pull-2 { + right: 16.66666667%; + } + .col-md-pull-1 { + right: 8.33333333%; + } + .col-md-pull-0 { + right: auto; + } + .col-md-push-12 { + left: 100%; + } + .col-md-push-11 { + left: 91.66666667%; + } + .col-md-push-10 { + left: 83.33333333%; + } + .col-md-push-9 { + left: 75%; + } + .col-md-push-8 { + left: 66.66666667%; + } + .col-md-push-7 { + left: 58.33333333%; + } + .col-md-push-6 { + left: 50%; + } + .col-md-push-5 { + left: 41.66666667%; + } + .col-md-push-4 { + left: 33.33333333%; + } + .col-md-push-3 { + left: 25%; + } + .col-md-push-2 { + left: 16.66666667%; + } + .col-md-push-1 { + left: 8.33333333%; + } + .col-md-push-0 { + left: auto; + } + .col-md-offset-12 { + margin-left: 100%; + } + .col-md-offset-11 { + margin-left: 91.66666667%; + } + .col-md-offset-10 { + margin-left: 83.33333333%; + } + .col-md-offset-9 { + margin-left: 75%; + } + .col-md-offset-8 { + margin-left: 66.66666667%; + } + .col-md-offset-7 { + margin-left: 58.33333333%; + } + .col-md-offset-6 { + margin-left: 50%; + } + .col-md-offset-5 { + margin-left: 41.66666667%; + } + .col-md-offset-4 { + margin-left: 33.33333333%; + } + .col-md-offset-3 { + margin-left: 25%; + } + .col-md-offset-2 { + margin-left: 16.66666667%; + } + .col-md-offset-1 { + margin-left: 8.33333333%; + } + .col-md-offset-0 { + margin-left: 0%; + } +} +@media (min-width: 1200px) { + .col-lg-1, + .col-lg-2, + .col-lg-3, + .col-lg-4, + .col-lg-5, + .col-lg-6, + .col-lg-7, + .col-lg-8, + .col-lg-9, + .col-lg-10, + .col-lg-11, + .col-lg-12 { + float: left; + } + .col-lg-12 { + width: 100%; + } + .col-lg-11 { + width: 91.66666667%; + } + .col-lg-10 { + width: 83.33333333%; + } + .col-lg-9 { + width: 75%; + } + .col-lg-8 { + width: 66.66666667%; + } + .col-lg-7 { + width: 58.33333333%; + } + .col-lg-6 { + width: 50%; + } + .col-lg-5 { + width: 41.66666667%; + } + .col-lg-4 { + width: 33.33333333%; + } + .col-lg-3 { + width: 25%; + } + .col-lg-2 { + width: 16.66666667%; + } + .col-lg-1 { + width: 8.33333333%; + } + .col-lg-pull-12 { + right: 100%; + } + .col-lg-pull-11 { + right: 91.66666667%; + } + .col-lg-pull-10 { + right: 83.33333333%; + } + .col-lg-pull-9 { + right: 75%; + } + .col-lg-pull-8 { + right: 66.66666667%; + } + .col-lg-pull-7 { + right: 58.33333333%; + } + .col-lg-pull-6 { + right: 50%; + } + .col-lg-pull-5 { + right: 41.66666667%; + } + .col-lg-pull-4 { + right: 33.33333333%; + } + .col-lg-pull-3 { + right: 25%; + } + .col-lg-pull-2 { + right: 16.66666667%; + } + .col-lg-pull-1 { + right: 8.33333333%; + } + .col-lg-pull-0 { + right: auto; + } + .col-lg-push-12 { + left: 100%; + } + .col-lg-push-11 { + left: 91.66666667%; + } + .col-lg-push-10 { + left: 83.33333333%; + } + .col-lg-push-9 { + left: 75%; + } + .col-lg-push-8 { + left: 66.66666667%; + } + .col-lg-push-7 { + left: 58.33333333%; + } + .col-lg-push-6 { + left: 50%; + } + .col-lg-push-5 { + left: 41.66666667%; + } + .col-lg-push-4 { + left: 33.33333333%; + } + .col-lg-push-3 { + left: 25%; + } + .col-lg-push-2 { + left: 16.66666667%; + } + .col-lg-push-1 { + left: 8.33333333%; + } + .col-lg-push-0 { + left: auto; + } + .col-lg-offset-12 { + margin-left: 100%; + } + .col-lg-offset-11 { + margin-left: 91.66666667%; + } + .col-lg-offset-10 { + margin-left: 83.33333333%; + } + .col-lg-offset-9 { + margin-left: 75%; + } + .col-lg-offset-8 { + margin-left: 66.66666667%; + } + .col-lg-offset-7 { + margin-left: 58.33333333%; + } + .col-lg-offset-6 { + margin-left: 50%; + } + .col-lg-offset-5 { + margin-left: 41.66666667%; + } + .col-lg-offset-4 { + margin-left: 33.33333333%; + } + .col-lg-offset-3 { + margin-left: 25%; + } + .col-lg-offset-2 { + margin-left: 16.66666667%; + } + .col-lg-offset-1 { + margin-left: 8.33333333%; + } + .col-lg-offset-0 { + margin-left: 0%; + } +} +table { + background-color: transparent; +} +table col[class*="col-"] { + position: static; + display: table-column; + float: none; +} +table td[class*="col-"], +table th[class*="col-"] { + position: static; + display: table-cell; + float: none; +} +caption { + padding-top: 8px; + padding-bottom: 8px; + color: #777777; + text-align: left; +} +th { + text-align: left; +} +.table { + width: 100%; + max-width: 100%; + margin-bottom: 20px; +} +.table > thead > tr > th, +.table > tbody > tr > th, +.table > tfoot > tr > th, +.table > thead > tr > td, +.table > tbody > tr > td, +.table > tfoot > tr > td { + padding: 8px; + line-height: 1.42857143; + vertical-align: top; + border-top: 1px solid #ddd; +} +.table > thead > tr > th { + vertical-align: bottom; + border-bottom: 2px solid #ddd; +} +.table > caption + thead > tr:first-child > th, +.table > colgroup + thead > tr:first-child > th, +.table > thead:first-child > tr:first-child > th, +.table > caption + thead > tr:first-child > td, +.table > colgroup + thead > tr:first-child > td, +.table > thead:first-child > tr:first-child > td { + border-top: 0; +} +.table > tbody + tbody { + border-top: 2px solid #ddd; +} +.table .table { + background-color: #fff; +} +.table-condensed > thead > tr > th, +.table-condensed > tbody > tr > th, +.table-condensed > tfoot > tr > th, +.table-condensed > thead > tr > td, +.table-condensed > tbody > tr > td, +.table-condensed > tfoot > tr > td { + padding: 5px; +} +.table-bordered { + border: 1px solid #ddd; +} +.table-bordered > thead > tr > th, +.table-bordered > tbody > tr > th, +.table-bordered > tfoot > tr > th, +.table-bordered > thead > tr > td, +.table-bordered > tbody > tr > td, +.table-bordered > tfoot > tr > td { + border: 1px solid #ddd; +} +.table-bordered > thead > tr > th, +.table-bordered > thead > tr > td { + border-bottom-width: 2px; +} +.table-striped > tbody > tr:nth-of-type(odd) { + background-color: #f9f9f9; +} +.table-hover > tbody > tr:hover { + background-color: #f5f5f5; +} +.table > thead > tr > td.active, +.table > tbody > tr > td.active, +.table > tfoot > tr > td.active, +.table > thead > tr > th.active, +.table > tbody > tr > th.active, +.table > tfoot > tr > th.active, +.table > thead > tr.active > td, +.table > tbody > tr.active > td, +.table > tfoot > tr.active > td, +.table > thead > tr.active > th, +.table > tbody > tr.active > th, +.table > tfoot > tr.active > th { + background-color: #f5f5f5; +} +.table-hover > tbody > tr > td.active:hover, +.table-hover > tbody > tr > th.active:hover, +.table-hover > tbody > tr.active:hover > td, +.table-hover > tbody > tr:hover > .active, +.table-hover > tbody > tr.active:hover > th { + background-color: #e8e8e8; +} +.table > thead > tr > td.success, +.table > tbody > tr > td.success, +.table > tfoot > tr > td.success, +.table > thead > tr > th.success, +.table > tbody > tr > th.success, +.table > tfoot > tr > th.success, +.table > thead > tr.success > td, +.table > tbody > tr.success > td, +.table > tfoot > tr.success > td, +.table > thead > tr.success > th, +.table > tbody > tr.success > th, +.table > tfoot > tr.success > th { + background-color: #dff0d8; +} +.table-hover > tbody > tr > td.success:hover, +.table-hover > tbody > tr > th.success:hover, +.table-hover > tbody > tr.success:hover > td, +.table-hover > tbody > tr:hover > .success, +.table-hover > tbody > tr.success:hover > th { + background-color: #d0e9c6; +} +.table > thead > tr > td.info, +.table > tbody > tr > td.info, +.table > tfoot > tr > td.info, +.table > thead > tr > th.info, +.table > tbody > tr > th.info, +.table > tfoot > tr > th.info, +.table > thead > tr.info > td, +.table > tbody > tr.info > td, +.table > tfoot > tr.info > td, +.table > thead > tr.info > th, +.table > tbody > tr.info > th, +.table > tfoot > tr.info > th { + background-color: #d9edf7; +} +.table-hover > tbody > tr > td.info:hover, +.table-hover > tbody > tr > th.info:hover, +.table-hover > tbody > tr.info:hover > td, +.table-hover > tbody > tr:hover > .info, +.table-hover > tbody > tr.info:hover > th { + background-color: #c4e3f3; +} +.table > thead > tr > td.warning, +.table > tbody > tr > td.warning, +.table > tfoot > tr > td.warning, +.table > thead > tr > th.warning, +.table > tbody > tr > th.warning, +.table > tfoot > tr > th.warning, +.table > thead > tr.warning > td, +.table > tbody > tr.warning > td, +.table > tfoot > tr.warning > td, +.table > thead > tr.warning > th, +.table > tbody > tr.warning > th, +.table > tfoot > tr.warning > th { + background-color: #fcf8e3; +} +.table-hover > tbody > tr > td.warning:hover, +.table-hover > tbody > tr > th.warning:hover, +.table-hover > tbody > tr.warning:hover > td, +.table-hover > tbody > tr:hover > .warning, +.table-hover > tbody > tr.warning:hover > th { + background-color: #faf2cc; +} +.table > thead > tr > td.danger, +.table > tbody > tr > td.danger, +.table > tfoot > tr > td.danger, +.table > thead > tr > th.danger, +.table > tbody > tr > th.danger, +.table > tfoot > tr > th.danger, +.table > thead > tr.danger > td, +.table > tbody > tr.danger > td, +.table > tfoot > tr.danger > td, +.table > thead > tr.danger > th, +.table > tbody > tr.danger > th, +.table > tfoot > tr.danger > th { + background-color: #f2dede; +} +.table-hover > tbody > tr > td.danger:hover, +.table-hover > tbody > tr > th.danger:hover, +.table-hover > tbody > tr.danger:hover > td, +.table-hover > tbody > tr:hover > .danger, +.table-hover > tbody > tr.danger:hover > th { + background-color: #ebcccc; +} +.table-responsive { + min-height: 0.01%; + overflow-x: auto; +} +@media screen and (max-width: 767px) { + .table-responsive { + width: 100%; + margin-bottom: 15px; + overflow-y: hidden; + -ms-overflow-style: -ms-autohiding-scrollbar; + border: 1px solid #ddd; + } + .table-responsive > .table { + margin-bottom: 0; + } + .table-responsive > .table > thead > tr > th, + .table-responsive > .table > tbody > tr > th, + .table-responsive > .table > tfoot > tr > th, + .table-responsive > .table > thead > tr > td, + .table-responsive > .table > tbody > tr > td, + .table-responsive > .table > tfoot > tr > td { + white-space: nowrap; + } + .table-responsive > .table-bordered { + border: 0; + } + .table-responsive > .table-bordered > thead > tr > th:first-child, + .table-responsive > .table-bordered > tbody > tr > th:first-child, + .table-responsive > .table-bordered > tfoot > tr > th:first-child, + .table-responsive > .table-bordered > thead > tr > td:first-child, + .table-responsive > .table-bordered > tbody > tr > td:first-child, + .table-responsive > .table-bordered > tfoot > tr > td:first-child { + border-left: 0; + } + .table-responsive > .table-bordered > thead > tr > th:last-child, + .table-responsive > .table-bordered > tbody > tr > th:last-child, + .table-responsive > .table-bordered > tfoot > tr > th:last-child, + .table-responsive > .table-bordered > thead > tr > td:last-child, + .table-responsive > .table-bordered > tbody > tr > td:last-child, + .table-responsive > .table-bordered > tfoot > tr > td:last-child { + border-right: 0; + } + .table-responsive > .table-bordered > tbody > tr:last-child > th, + .table-responsive > .table-bordered > tfoot > tr:last-child > th, + .table-responsive > .table-bordered > tbody > tr:last-child > td, + .table-responsive > .table-bordered > tfoot > tr:last-child > td { + border-bottom: 0; + } +} +fieldset { + min-width: 0; + padding: 0; + margin: 0; + border: 0; +} +legend { + display: block; + width: 100%; + padding: 0; + margin-bottom: 20px; + font-size: 21px; + line-height: inherit; + color: #333333; + border: 0; + border-bottom: 1px solid #e5e5e5; +} +label { + display: inline-block; + max-width: 100%; + margin-bottom: 5px; + font-weight: 700; +} +input[type="search"] { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; +} +input[type="radio"], +input[type="checkbox"] { + margin: 4px 0 0; + margin-top: 1px \9; + line-height: normal; +} +input[type="radio"][disabled], +input[type="checkbox"][disabled], +input[type="radio"].disabled, +input[type="checkbox"].disabled, +fieldset[disabled] input[type="radio"], +fieldset[disabled] input[type="checkbox"] { + cursor: not-allowed; +} +input[type="file"] { + display: block; +} +input[type="range"] { + display: block; + width: 100%; +} +select[multiple], +select[size] { + height: auto; +} +input[type="file"]:focus, +input[type="radio"]:focus, +input[type="checkbox"]:focus { + outline: 5px auto -webkit-focus-ring-color; + outline-offset: -2px; +} +output { + display: block; + padding-top: 7px; + font-size: 14px; + line-height: 1.42857143; + color: #555555; +} +.form-control { + display: block; + width: 100%; + height: 34px; + padding: 6px 12px; + font-size: 14px; + line-height: 1.42857143; + color: #555555; + background-color: #fff; + background-image: none; + border: 1px solid #ccc; + border-radius: 4px; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + -webkit-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s; + -o-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s; + -webkit-transition: border-color ease-in-out .15s, -webkit-box-shadow ease-in-out .15s; + transition: border-color ease-in-out .15s, -webkit-box-shadow ease-in-out .15s; + transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s; + transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s, -webkit-box-shadow ease-in-out .15s; +} +.form-control:focus { + border-color: #66afe9; + outline: 0; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 8px rgba(102, 175, 233, 0.6); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 8px rgba(102, 175, 233, 0.6); +} +.form-control::-moz-placeholder { + color: #999; + opacity: 1; +} +.form-control:-ms-input-placeholder { + color: #999; +} +.form-control::-webkit-input-placeholder { + color: #999; +} +.form-control::-ms-expand { + background-color: transparent; + border: 0; +} +.form-control[disabled], +.form-control[readonly], +fieldset[disabled] .form-control { + background-color: #eeeeee; + opacity: 1; +} +.form-control[disabled], +fieldset[disabled] .form-control { + cursor: not-allowed; +} +textarea.form-control { + height: auto; +} +@media screen and (-webkit-min-device-pixel-ratio: 0) { + input[type="date"].form-control, + input[type="time"].form-control, + input[type="datetime-local"].form-control, + input[type="month"].form-control { + line-height: 34px; + } + input[type="date"].input-sm, + input[type="time"].input-sm, + input[type="datetime-local"].input-sm, + input[type="month"].input-sm, + .input-group-sm input[type="date"], + .input-group-sm input[type="time"], + .input-group-sm input[type="datetime-local"], + .input-group-sm input[type="month"] { + line-height: 30px; + } + input[type="date"].input-lg, + input[type="time"].input-lg, + input[type="datetime-local"].input-lg, + input[type="month"].input-lg, + .input-group-lg input[type="date"], + .input-group-lg input[type="time"], + .input-group-lg input[type="datetime-local"], + .input-group-lg input[type="month"] { + line-height: 46px; + } +} +.form-group { + margin-bottom: 15px; +} +.radio, +.checkbox { + position: relative; + display: block; + margin-top: 10px; + margin-bottom: 10px; +} +.radio.disabled label, +.checkbox.disabled label, +fieldset[disabled] .radio label, +fieldset[disabled] .checkbox label { + cursor: not-allowed; +} +.radio label, +.checkbox label { + min-height: 20px; + padding-left: 20px; + margin-bottom: 0; + font-weight: 400; + cursor: pointer; +} +.radio input[type="radio"], +.radio-inline input[type="radio"], +.checkbox input[type="checkbox"], +.checkbox-inline input[type="checkbox"] { + position: absolute; + margin-top: 4px \9; + margin-left: -20px; +} +.radio + .radio, +.checkbox + .checkbox { + margin-top: -5px; +} +.radio-inline, +.checkbox-inline { + position: relative; + display: inline-block; + padding-left: 20px; + margin-bottom: 0; + font-weight: 400; + vertical-align: middle; + cursor: pointer; +} +.radio-inline.disabled, +.checkbox-inline.disabled, +fieldset[disabled] .radio-inline, +fieldset[disabled] .checkbox-inline { + cursor: not-allowed; +} +.radio-inline + .radio-inline, +.checkbox-inline + .checkbox-inline { + margin-top: 0; + margin-left: 10px; +} +.form-control-static { + min-height: 34px; + padding-top: 7px; + padding-bottom: 7px; + margin-bottom: 0; +} +.form-control-static.input-lg, +.form-control-static.input-sm { + padding-right: 0; + padding-left: 0; +} +.input-sm { + height: 30px; + padding: 5px 10px; + font-size: 12px; + line-height: 1.5; + border-radius: 3px; +} +select.input-sm { + height: 30px; + line-height: 30px; +} +textarea.input-sm, +select[multiple].input-sm { + height: auto; +} +.form-group-sm .form-control { + height: 30px; + padding: 5px 10px; + font-size: 12px; + line-height: 1.5; + border-radius: 3px; +} +.form-group-sm select.form-control { + height: 30px; + line-height: 30px; +} +.form-group-sm textarea.form-control, +.form-group-sm select[multiple].form-control { + height: auto; +} +.form-group-sm .form-control-static { + height: 30px; + min-height: 32px; + padding: 6px 10px; + font-size: 12px; + line-height: 1.5; +} +.input-lg { + height: 46px; + padding: 10px 16px; + font-size: 18px; + line-height: 1.3333333; + border-radius: 6px; +} +select.input-lg { + height: 46px; + line-height: 46px; +} +textarea.input-lg, +select[multiple].input-lg { + height: auto; +} +.form-group-lg .form-control { + height: 46px; + padding: 10px 16px; + font-size: 18px; + line-height: 1.3333333; + border-radius: 6px; +} +.form-group-lg select.form-control { + height: 46px; + line-height: 46px; +} +.form-group-lg textarea.form-control, +.form-group-lg select[multiple].form-control { + height: auto; +} +.form-group-lg .form-control-static { + height: 46px; + min-height: 38px; + padding: 11px 16px; + font-size: 18px; + line-height: 1.3333333; +} +.has-feedback { + position: relative; +} +.has-feedback .form-control { + padding-right: 42.5px; +} +.form-control-feedback { + position: absolute; + top: 0; + right: 0; + z-index: 2; + display: block; + width: 34px; + height: 34px; + line-height: 34px; + text-align: center; + pointer-events: none; +} +.input-lg + .form-control-feedback, +.input-group-lg + .form-control-feedback, +.form-group-lg .form-control + .form-control-feedback { + width: 46px; + height: 46px; + line-height: 46px; +} +.input-sm + .form-control-feedback, +.input-group-sm + .form-control-feedback, +.form-group-sm .form-control + .form-control-feedback { + width: 30px; + height: 30px; + line-height: 30px; +} +.has-success .help-block, +.has-success .control-label, +.has-success .radio, +.has-success .checkbox, +.has-success .radio-inline, +.has-success .checkbox-inline, +.has-success.radio label, +.has-success.checkbox label, +.has-success.radio-inline label, +.has-success.checkbox-inline label { + color: #3c763d; +} +.has-success .form-control { + border-color: #3c763d; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); +} +.has-success .form-control:focus { + border-color: #2b542c; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #67b168; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #67b168; +} +.has-success .input-group-addon { + color: #3c763d; + background-color: #dff0d8; + border-color: #3c763d; +} +.has-success .form-control-feedback { + color: #3c763d; +} +.has-warning .help-block, +.has-warning .control-label, +.has-warning .radio, +.has-warning .checkbox, +.has-warning .radio-inline, +.has-warning .checkbox-inline, +.has-warning.radio label, +.has-warning.checkbox label, +.has-warning.radio-inline label, +.has-warning.checkbox-inline label { + color: #8a6d3b; +} +.has-warning .form-control { + border-color: #8a6d3b; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); +} +.has-warning .form-control:focus { + border-color: #66512c; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #c0a16b; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #c0a16b; +} +.has-warning .input-group-addon { + color: #8a6d3b; + background-color: #fcf8e3; + border-color: #8a6d3b; +} +.has-warning .form-control-feedback { + color: #8a6d3b; +} +.has-error .help-block, +.has-error .control-label, +.has-error .radio, +.has-error .checkbox, +.has-error .radio-inline, +.has-error .checkbox-inline, +.has-error.radio label, +.has-error.checkbox label, +.has-error.radio-inline label, +.has-error.checkbox-inline label { + color: #a94442; +} +.has-error .form-control { + border-color: #a94442; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); +} +.has-error .form-control:focus { + border-color: #843534; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483; +} +.has-error .input-group-addon { + color: #a94442; + background-color: #f2dede; + border-color: #a94442; +} +.has-error .form-control-feedback { + color: #a94442; +} +.has-feedback label ~ .form-control-feedback { + top: 25px; +} +.has-feedback label.sr-only ~ .form-control-feedback { + top: 0; +} +.help-block { + display: block; + margin-top: 5px; + margin-bottom: 10px; + color: #737373; +} +@media (min-width: 768px) { + .form-inline .form-group { + display: inline-block; + margin-bottom: 0; + vertical-align: middle; + } + .form-inline .form-control { + display: inline-block; + width: auto; + vertical-align: middle; + } + .form-inline .form-control-static { + display: inline-block; + } + .form-inline .input-group { + display: inline-table; + vertical-align: middle; + } + .form-inline .input-group .input-group-addon, + .form-inline .input-group .input-group-btn, + .form-inline .input-group .form-control { + width: auto; + } + .form-inline .input-group > .form-control { + width: 100%; + } + .form-inline .control-label { + margin-bottom: 0; + vertical-align: middle; + } + .form-inline .radio, + .form-inline .checkbox { + display: inline-block; + margin-top: 0; + margin-bottom: 0; + vertical-align: middle; + } + .form-inline .radio label, + .form-inline .checkbox label { + padding-left: 0; + } + .form-inline .radio input[type="radio"], + .form-inline .checkbox input[type="checkbox"] { + position: relative; + margin-left: 0; + } + .form-inline .has-feedback .form-control-feedback { + top: 0; + } +} +.form-horizontal .radio, +.form-horizontal .checkbox, +.form-horizontal .radio-inline, +.form-horizontal .checkbox-inline { + padding-top: 7px; + margin-top: 0; + margin-bottom: 0; +} +.form-horizontal .radio, +.form-horizontal .checkbox { + min-height: 27px; +} +.form-horizontal .form-group { + margin-right: -15px; + margin-left: -15px; +} +@media (min-width: 768px) { + .form-horizontal .control-label { + padding-top: 7px; + margin-bottom: 0; + text-align: right; + } +} +.form-horizontal .has-feedback .form-control-feedback { + right: 15px; +} +@media (min-width: 768px) { + .form-horizontal .form-group-lg .control-label { + padding-top: 11px; + font-size: 18px; + } +} +@media (min-width: 768px) { + .form-horizontal .form-group-sm .control-label { + padding-top: 6px; + font-size: 12px; + } +} +.btn { + display: inline-block; + margin-bottom: 0; + font-weight: normal; + text-align: center; + white-space: nowrap; + vertical-align: middle; + -ms-touch-action: manipulation; + touch-action: manipulation; + cursor: pointer; + background-image: none; + border: 1px solid transparent; + padding: 6px 12px; + font-size: 14px; + line-height: 1.42857143; + border-radius: 4px; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} +.btn:focus, +.btn:active:focus, +.btn.active:focus, +.btn.focus, +.btn:active.focus, +.btn.active.focus { + outline: 5px auto -webkit-focus-ring-color; + outline-offset: -2px; +} +.btn:hover, +.btn:focus, +.btn.focus { + color: #333; + text-decoration: none; +} +.btn:active, +.btn.active { + background-image: none; + outline: 0; + -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); +} +.btn.disabled, +.btn[disabled], +fieldset[disabled] .btn { + cursor: not-allowed; + filter: alpha(opacity=65); + opacity: 0.65; + -webkit-box-shadow: none; + box-shadow: none; +} +a.btn.disabled, +fieldset[disabled] a.btn { + pointer-events: none; +} +.btn-default { + color: #333; + background-color: #fff; + border-color: #ccc; +} +.btn-default:focus, +.btn-default.focus { + color: #333; + background-color: #e6e6e6; + border-color: #8c8c8c; +} +.btn-default:hover { + color: #333; + background-color: #e6e6e6; + border-color: #adadad; +} +.btn-default:active, +.btn-default.active, +.open > .dropdown-toggle.btn-default { + color: #333; + background-color: #e6e6e6; + background-image: none; + border-color: #adadad; +} +.btn-default:active:hover, +.btn-default.active:hover, +.open > .dropdown-toggle.btn-default:hover, +.btn-default:active:focus, +.btn-default.active:focus, +.open > .dropdown-toggle.btn-default:focus, +.btn-default:active.focus, +.btn-default.active.focus, +.open > .dropdown-toggle.btn-default.focus { + color: #333; + background-color: #d4d4d4; + border-color: #8c8c8c; +} +.btn-default.disabled:hover, +.btn-default[disabled]:hover, +fieldset[disabled] .btn-default:hover, +.btn-default.disabled:focus, +.btn-default[disabled]:focus, +fieldset[disabled] .btn-default:focus, +.btn-default.disabled.focus, +.btn-default[disabled].focus, +fieldset[disabled] .btn-default.focus { + background-color: #fff; + border-color: #ccc; +} +.btn-default .badge { + color: #fff; + background-color: #333; +} +.btn-primary { + color: #fff; + background-color: #337ab7; + border-color: #2e6da4; +} +.btn-primary:focus, +.btn-primary.focus { + color: #fff; + background-color: #286090; + border-color: #122b40; +} +.btn-primary:hover { + color: #fff; + background-color: #286090; + border-color: #204d74; +} +.btn-primary:active, +.btn-primary.active, +.open > .dropdown-toggle.btn-primary { + color: #fff; + background-color: #286090; + background-image: none; + border-color: #204d74; +} +.btn-primary:active:hover, +.btn-primary.active:hover, +.open > .dropdown-toggle.btn-primary:hover, +.btn-primary:active:focus, +.btn-primary.active:focus, +.open > .dropdown-toggle.btn-primary:focus, +.btn-primary:active.focus, +.btn-primary.active.focus, +.open > .dropdown-toggle.btn-primary.focus { + color: #fff; + background-color: #204d74; + border-color: #122b40; +} +.btn-primary.disabled:hover, +.btn-primary[disabled]:hover, +fieldset[disabled] .btn-primary:hover, +.btn-primary.disabled:focus, +.btn-primary[disabled]:focus, +fieldset[disabled] .btn-primary:focus, +.btn-primary.disabled.focus, +.btn-primary[disabled].focus, +fieldset[disabled] .btn-primary.focus { + background-color: #337ab7; + border-color: #2e6da4; +} +.btn-primary .badge { + color: #337ab7; + background-color: #fff; +} +.btn-success { + color: #fff; + background-color: #5cb85c; + border-color: #4cae4c; +} +.btn-success:focus, +.btn-success.focus { + color: #fff; + background-color: #449d44; + border-color: #255625; +} +.btn-success:hover { + color: #fff; + background-color: #449d44; + border-color: #398439; +} +.btn-success:active, +.btn-success.active, +.open > .dropdown-toggle.btn-success { + color: #fff; + background-color: #449d44; + background-image: none; + border-color: #398439; +} +.btn-success:active:hover, +.btn-success.active:hover, +.open > .dropdown-toggle.btn-success:hover, +.btn-success:active:focus, +.btn-success.active:focus, +.open > .dropdown-toggle.btn-success:focus, +.btn-success:active.focus, +.btn-success.active.focus, +.open > .dropdown-toggle.btn-success.focus { + color: #fff; + background-color: #398439; + border-color: #255625; +} +.btn-success.disabled:hover, +.btn-success[disabled]:hover, +fieldset[disabled] .btn-success:hover, +.btn-success.disabled:focus, +.btn-success[disabled]:focus, +fieldset[disabled] .btn-success:focus, +.btn-success.disabled.focus, +.btn-success[disabled].focus, +fieldset[disabled] .btn-success.focus { + background-color: #5cb85c; + border-color: #4cae4c; +} +.btn-success .badge { + color: #5cb85c; + background-color: #fff; +} +.btn-info { + color: #fff; + background-color: #5bc0de; + border-color: #46b8da; +} +.btn-info:focus, +.btn-info.focus { + color: #fff; + background-color: #31b0d5; + border-color: #1b6d85; +} +.btn-info:hover { + color: #fff; + background-color: #31b0d5; + border-color: #269abc; +} +.btn-info:active, +.btn-info.active, +.open > .dropdown-toggle.btn-info { + color: #fff; + background-color: #31b0d5; + background-image: none; + border-color: #269abc; +} +.btn-info:active:hover, +.btn-info.active:hover, +.open > .dropdown-toggle.btn-info:hover, +.btn-info:active:focus, +.btn-info.active:focus, +.open > .dropdown-toggle.btn-info:focus, +.btn-info:active.focus, +.btn-info.active.focus, +.open > .dropdown-toggle.btn-info.focus { + color: #fff; + background-color: #269abc; + border-color: #1b6d85; +} +.btn-info.disabled:hover, +.btn-info[disabled]:hover, +fieldset[disabled] .btn-info:hover, +.btn-info.disabled:focus, +.btn-info[disabled]:focus, +fieldset[disabled] .btn-info:focus, +.btn-info.disabled.focus, +.btn-info[disabled].focus, +fieldset[disabled] .btn-info.focus { + background-color: #5bc0de; + border-color: #46b8da; +} +.btn-info .badge { + color: #5bc0de; + background-color: #fff; +} +.btn-warning { + color: #fff; + background-color: #f0ad4e; + border-color: #eea236; +} +.btn-warning:focus, +.btn-warning.focus { + color: #fff; + background-color: #ec971f; + border-color: #985f0d; +} +.btn-warning:hover { + color: #fff; + background-color: #ec971f; + border-color: #d58512; +} +.btn-warning:active, +.btn-warning.active, +.open > .dropdown-toggle.btn-warning { + color: #fff; + background-color: #ec971f; + background-image: none; + border-color: #d58512; +} +.btn-warning:active:hover, +.btn-warning.active:hover, +.open > .dropdown-toggle.btn-warning:hover, +.btn-warning:active:focus, +.btn-warning.active:focus, +.open > .dropdown-toggle.btn-warning:focus, +.btn-warning:active.focus, +.btn-warning.active.focus, +.open > .dropdown-toggle.btn-warning.focus { + color: #fff; + background-color: #d58512; + border-color: #985f0d; +} +.btn-warning.disabled:hover, +.btn-warning[disabled]:hover, +fieldset[disabled] .btn-warning:hover, +.btn-warning.disabled:focus, +.btn-warning[disabled]:focus, +fieldset[disabled] .btn-warning:focus, +.btn-warning.disabled.focus, +.btn-warning[disabled].focus, +fieldset[disabled] .btn-warning.focus { + background-color: #f0ad4e; + border-color: #eea236; +} +.btn-warning .badge { + color: #f0ad4e; + background-color: #fff; +} +.btn-danger { + color: #fff; + background-color: #d9534f; + border-color: #d43f3a; +} +.btn-danger:focus, +.btn-danger.focus { + color: #fff; + background-color: #c9302c; + border-color: #761c19; +} +.btn-danger:hover { + color: #fff; + background-color: #c9302c; + border-color: #ac2925; +} +.btn-danger:active, +.btn-danger.active, +.open > .dropdown-toggle.btn-danger { + color: #fff; + background-color: #c9302c; + background-image: none; + border-color: #ac2925; +} +.btn-danger:active:hover, +.btn-danger.active:hover, +.open > .dropdown-toggle.btn-danger:hover, +.btn-danger:active:focus, +.btn-danger.active:focus, +.open > .dropdown-toggle.btn-danger:focus, +.btn-danger:active.focus, +.btn-danger.active.focus, +.open > .dropdown-toggle.btn-danger.focus { + color: #fff; + background-color: #ac2925; + border-color: #761c19; +} +.btn-danger.disabled:hover, +.btn-danger[disabled]:hover, +fieldset[disabled] .btn-danger:hover, +.btn-danger.disabled:focus, +.btn-danger[disabled]:focus, +fieldset[disabled] .btn-danger:focus, +.btn-danger.disabled.focus, +.btn-danger[disabled].focus, +fieldset[disabled] .btn-danger.focus { + background-color: #d9534f; + border-color: #d43f3a; +} +.btn-danger .badge { + color: #d9534f; + background-color: #fff; +} +.btn-link { + font-weight: 400; + color: #337ab7; + border-radius: 0; +} +.btn-link, +.btn-link:active, +.btn-link.active, +.btn-link[disabled], +fieldset[disabled] .btn-link { + background-color: transparent; + -webkit-box-shadow: none; + box-shadow: none; +} +.btn-link, +.btn-link:hover, +.btn-link:focus, +.btn-link:active { + border-color: transparent; +} +.btn-link:hover, +.btn-link:focus { + color: #23527c; + text-decoration: underline; + background-color: transparent; +} +.btn-link[disabled]:hover, +fieldset[disabled] .btn-link:hover, +.btn-link[disabled]:focus, +fieldset[disabled] .btn-link:focus { + color: #777777; + text-decoration: none; +} +.btn-lg, +.btn-group-lg > .btn { + padding: 10px 16px; + font-size: 18px; + line-height: 1.3333333; + border-radius: 6px; +} +.btn-sm, +.btn-group-sm > .btn { + padding: 5px 10px; + font-size: 12px; + line-height: 1.5; + border-radius: 3px; +} +.btn-xs, +.btn-group-xs > .btn { + padding: 1px 5px; + font-size: 12px; + line-height: 1.5; + border-radius: 3px; +} +.btn-block { + display: block; + width: 100%; +} +.btn-block + .btn-block { + margin-top: 5px; +} +input[type="submit"].btn-block, +input[type="reset"].btn-block, +input[type="button"].btn-block { + width: 100%; +} +.fade { + opacity: 0; + -webkit-transition: opacity 0.15s linear; + -o-transition: opacity 0.15s linear; + transition: opacity 0.15s linear; +} +.fade.in { + opacity: 1; +} +.collapse { + display: none; +} +.collapse.in { + display: block; +} +tr.collapse.in { + display: table-row; +} +tbody.collapse.in { + display: table-row-group; +} +.collapsing { + position: relative; + height: 0; + overflow: hidden; + -webkit-transition-property: height, visibility; + -o-transition-property: height, visibility; + transition-property: height, visibility; + -webkit-transition-duration: 0.35s; + -o-transition-duration: 0.35s; + transition-duration: 0.35s; + -webkit-transition-timing-function: ease; + -o-transition-timing-function: ease; + transition-timing-function: ease; +} +.caret { + display: inline-block; + width: 0; + height: 0; + margin-left: 2px; + vertical-align: middle; + border-top: 4px dashed; + border-top: 4px solid \9; + border-right: 4px solid transparent; + border-left: 4px solid transparent; +} +.dropup, +.dropdown { + position: relative; +} +.dropdown-toggle:focus { + outline: 0; +} +.dropdown-menu { + position: absolute; + top: 100%; + left: 0; + z-index: 1000; + display: none; + float: left; + min-width: 160px; + padding: 5px 0; + margin: 2px 0 0; + font-size: 14px; + text-align: left; + list-style: none; + background-color: #fff; + background-clip: padding-box; + border: 1px solid #ccc; + border: 1px solid rgba(0, 0, 0, 0.15); + border-radius: 4px; + -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175); + box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175); +} +.dropdown-menu.pull-right { + right: 0; + left: auto; +} +.dropdown-menu .divider { + height: 1px; + margin: 9px 0; + overflow: hidden; + background-color: #e5e5e5; +} +.dropdown-menu > li > a { + display: block; + padding: 3px 20px; + clear: both; + font-weight: 400; + line-height: 1.42857143; + color: #333333; + white-space: nowrap; +} +.dropdown-menu > li > a:hover, +.dropdown-menu > li > a:focus { + color: #262626; + text-decoration: none; + background-color: #f5f5f5; +} +.dropdown-menu > .active > a, +.dropdown-menu > .active > a:hover, +.dropdown-menu > .active > a:focus { + color: #fff; + text-decoration: none; + background-color: #337ab7; + outline: 0; +} +.dropdown-menu > .disabled > a, +.dropdown-menu > .disabled > a:hover, +.dropdown-menu > .disabled > a:focus { + color: #777777; +} +.dropdown-menu > .disabled > a:hover, +.dropdown-menu > .disabled > a:focus { + text-decoration: none; + cursor: not-allowed; + background-color: transparent; + background-image: none; + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); +} +.open > .dropdown-menu { + display: block; +} +.open > a { + outline: 0; +} +.dropdown-menu-right { + right: 0; + left: auto; +} +.dropdown-menu-left { + right: auto; + left: 0; +} +.dropdown-header { + display: block; + padding: 3px 20px; + font-size: 12px; + line-height: 1.42857143; + color: #777777; + white-space: nowrap; +} +.dropdown-backdrop { + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 990; +} +.pull-right > .dropdown-menu { + right: 0; + left: auto; +} +.dropup .caret, +.navbar-fixed-bottom .dropdown .caret { + content: ""; + border-top: 0; + border-bottom: 4px dashed; + border-bottom: 4px solid \9; +} +.dropup .dropdown-menu, +.navbar-fixed-bottom .dropdown .dropdown-menu { + top: auto; + bottom: 100%; + margin-bottom: 2px; +} +@media (min-width: 768px) { + .navbar-right .dropdown-menu { + right: 0; + left: auto; + } + .navbar-right .dropdown-menu-left { + right: auto; + left: 0; + } +} +.btn-group, +.btn-group-vertical { + position: relative; + display: inline-block; + vertical-align: middle; +} +.btn-group > .btn, +.btn-group-vertical > .btn { + position: relative; + float: left; +} +.btn-group > .btn:hover, +.btn-group-vertical > .btn:hover, +.btn-group > .btn:focus, +.btn-group-vertical > .btn:focus, +.btn-group > .btn:active, +.btn-group-vertical > .btn:active, +.btn-group > .btn.active, +.btn-group-vertical > .btn.active { + z-index: 2; +} +.btn-group .btn + .btn, +.btn-group .btn + .btn-group, +.btn-group .btn-group + .btn, +.btn-group .btn-group + .btn-group { + margin-left: -1px; +} +.btn-toolbar { + margin-left: -5px; +} +.btn-toolbar .btn, +.btn-toolbar .btn-group, +.btn-toolbar .input-group { + float: left; +} +.btn-toolbar > .btn, +.btn-toolbar > .btn-group, +.btn-toolbar > .input-group { + margin-left: 5px; +} +.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) { + border-radius: 0; +} +.btn-group > .btn:first-child { + margin-left: 0; +} +.btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle) { + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} +.btn-group > .btn:last-child:not(:first-child), +.btn-group > .dropdown-toggle:not(:first-child) { + border-top-left-radius: 0; + border-bottom-left-radius: 0; +} +.btn-group > .btn-group { + float: left; +} +.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn { + border-radius: 0; +} +.btn-group > .btn-group:first-child:not(:last-child) > .btn:last-child, +.btn-group > .btn-group:first-child:not(:last-child) > .dropdown-toggle { + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} +.btn-group > .btn-group:last-child:not(:first-child) > .btn:first-child { + border-top-left-radius: 0; + border-bottom-left-radius: 0; +} +.btn-group .dropdown-toggle:active, +.btn-group.open .dropdown-toggle { + outline: 0; +} +.btn-group > .btn + .dropdown-toggle { + padding-right: 8px; + padding-left: 8px; +} +.btn-group > .btn-lg + .dropdown-toggle { + padding-right: 12px; + padding-left: 12px; +} +.btn-group.open .dropdown-toggle { + -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); +} +.btn-group.open .dropdown-toggle.btn-link { + -webkit-box-shadow: none; + box-shadow: none; +} +.btn .caret { + margin-left: 0; +} +.btn-lg .caret { + border-width: 5px 5px 0; + border-bottom-width: 0; +} +.dropup .btn-lg .caret { + border-width: 0 5px 5px; +} +.btn-group-vertical > .btn, +.btn-group-vertical > .btn-group, +.btn-group-vertical > .btn-group > .btn { + display: block; + float: none; + width: 100%; + max-width: 100%; +} +.btn-group-vertical > .btn-group > .btn { + float: none; +} +.btn-group-vertical > .btn + .btn, +.btn-group-vertical > .btn + .btn-group, +.btn-group-vertical > .btn-group + .btn, +.btn-group-vertical > .btn-group + .btn-group { + margin-top: -1px; + margin-left: 0; +} +.btn-group-vertical > .btn:not(:first-child):not(:last-child) { + border-radius: 0; +} +.btn-group-vertical > .btn:first-child:not(:last-child) { + border-top-left-radius: 4px; + border-top-right-radius: 4px; + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; +} +.btn-group-vertical > .btn:last-child:not(:first-child) { + border-top-left-radius: 0; + border-top-right-radius: 0; + border-bottom-right-radius: 4px; + border-bottom-left-radius: 4px; +} +.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn { + border-radius: 0; +} +.btn-group-vertical > .btn-group:first-child:not(:last-child) > .btn:last-child, +.btn-group-vertical > .btn-group:first-child:not(:last-child) > .dropdown-toggle { + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; +} +.btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child { + border-top-left-radius: 0; + border-top-right-radius: 0; +} +.btn-group-justified { + display: table; + width: 100%; + table-layout: fixed; + border-collapse: separate; +} +.btn-group-justified > .btn, +.btn-group-justified > .btn-group { + display: table-cell; + float: none; + width: 1%; +} +.btn-group-justified > .btn-group .btn { + width: 100%; +} +.btn-group-justified > .btn-group .dropdown-menu { + left: auto; +} +[data-toggle="buttons"] > .btn input[type="radio"], +[data-toggle="buttons"] > .btn-group > .btn input[type="radio"], +[data-toggle="buttons"] > .btn input[type="checkbox"], +[data-toggle="buttons"] > .btn-group > .btn input[type="checkbox"] { + position: absolute; + clip: rect(0, 0, 0, 0); + pointer-events: none; +} +.input-group { + position: relative; + display: table; + border-collapse: separate; +} +.input-group[class*="col-"] { + float: none; + padding-right: 0; + padding-left: 0; +} +.input-group .form-control { + position: relative; + z-index: 2; + float: left; + width: 100%; + margin-bottom: 0; +} +.input-group .form-control:focus { + z-index: 3; +} +.input-group-lg > .form-control, +.input-group-lg > .input-group-addon, +.input-group-lg > .input-group-btn > .btn { + height: 46px; + padding: 10px 16px; + font-size: 18px; + line-height: 1.3333333; + border-radius: 6px; +} +select.input-group-lg > .form-control, +select.input-group-lg > .input-group-addon, +select.input-group-lg > .input-group-btn > .btn { + height: 46px; + line-height: 46px; +} +textarea.input-group-lg > .form-control, +textarea.input-group-lg > .input-group-addon, +textarea.input-group-lg > .input-group-btn > .btn, +select[multiple].input-group-lg > .form-control, +select[multiple].input-group-lg > .input-group-addon, +select[multiple].input-group-lg > .input-group-btn > .btn { + height: auto; +} +.input-group-sm > .form-control, +.input-group-sm > .input-group-addon, +.input-group-sm > .input-group-btn > .btn { + height: 30px; + padding: 5px 10px; + font-size: 12px; + line-height: 1.5; + border-radius: 3px; +} +select.input-group-sm > .form-control, +select.input-group-sm > .input-group-addon, +select.input-group-sm > .input-group-btn > .btn { + height: 30px; + line-height: 30px; +} +textarea.input-group-sm > .form-control, +textarea.input-group-sm > .input-group-addon, +textarea.input-group-sm > .input-group-btn > .btn, +select[multiple].input-group-sm > .form-control, +select[multiple].input-group-sm > .input-group-addon, +select[multiple].input-group-sm > .input-group-btn > .btn { + height: auto; +} +.input-group-addon, +.input-group-btn, +.input-group .form-control { + display: table-cell; +} +.input-group-addon:not(:first-child):not(:last-child), +.input-group-btn:not(:first-child):not(:last-child), +.input-group .form-control:not(:first-child):not(:last-child) { + border-radius: 0; +} +.input-group-addon, +.input-group-btn { + width: 1%; + white-space: nowrap; + vertical-align: middle; +} +.input-group-addon { + padding: 6px 12px; + font-size: 14px; + font-weight: 400; + line-height: 1; + color: #555555; + text-align: center; + background-color: #eeeeee; + border: 1px solid #ccc; + border-radius: 4px; +} +.input-group-addon.input-sm { + padding: 5px 10px; + font-size: 12px; + border-radius: 3px; +} +.input-group-addon.input-lg { + padding: 10px 16px; + font-size: 18px; + border-radius: 6px; +} +.input-group-addon input[type="radio"], +.input-group-addon input[type="checkbox"] { + margin-top: 0; +} +.input-group .form-control:first-child, +.input-group-addon:first-child, +.input-group-btn:first-child > .btn, +.input-group-btn:first-child > .btn-group > .btn, +.input-group-btn:first-child > .dropdown-toggle, +.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle), +.input-group-btn:last-child > .btn-group:not(:last-child) > .btn { + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} +.input-group-addon:first-child { + border-right: 0; +} +.input-group .form-control:last-child, +.input-group-addon:last-child, +.input-group-btn:last-child > .btn, +.input-group-btn:last-child > .btn-group > .btn, +.input-group-btn:last-child > .dropdown-toggle, +.input-group-btn:first-child > .btn:not(:first-child), +.input-group-btn:first-child > .btn-group:not(:first-child) > .btn { + border-top-left-radius: 0; + border-bottom-left-radius: 0; +} +.input-group-addon:last-child { + border-left: 0; +} +.input-group-btn { + position: relative; + font-size: 0; + white-space: nowrap; +} +.input-group-btn > .btn { + position: relative; +} +.input-group-btn > .btn + .btn { + margin-left: -1px; +} +.input-group-btn > .btn:hover, +.input-group-btn > .btn:focus, +.input-group-btn > .btn:active { + z-index: 2; +} +.input-group-btn:first-child > .btn, +.input-group-btn:first-child > .btn-group { + margin-right: -1px; +} +.input-group-btn:last-child > .btn, +.input-group-btn:last-child > .btn-group { + z-index: 2; + margin-left: -1px; +} +.nav { + padding-left: 0; + margin-bottom: 0; + list-style: none; +} +.nav > li { + position: relative; + display: block; +} +.nav > li > a { + position: relative; + display: block; + padding: 10px 15px; +} +.nav > li > a:hover, +.nav > li > a:focus { + text-decoration: none; + background-color: #eeeeee; +} +.nav > li.disabled > a { + color: #777777; +} +.nav > li.disabled > a:hover, +.nav > li.disabled > a:focus { + color: #777777; + text-decoration: none; + cursor: not-allowed; + background-color: transparent; +} +.nav .open > a, +.nav .open > a:hover, +.nav .open > a:focus { + background-color: #eeeeee; + border-color: #337ab7; +} +.nav .nav-divider { + height: 1px; + margin: 9px 0; + overflow: hidden; + background-color: #e5e5e5; +} +.nav > li > a > img { + max-width: none; +} +.nav-tabs { + border-bottom: 1px solid #ddd; +} +.nav-tabs > li { + float: left; + margin-bottom: -1px; +} +.nav-tabs > li > a { + margin-right: 2px; + line-height: 1.42857143; + border: 1px solid transparent; + border-radius: 4px 4px 0 0; +} +.nav-tabs > li > a:hover { + border-color: #eeeeee #eeeeee #ddd; +} +.nav-tabs > li.active > a, +.nav-tabs > li.active > a:hover, +.nav-tabs > li.active > a:focus { + color: #555555; + cursor: default; + background-color: #fff; + border: 1px solid #ddd; + border-bottom-color: transparent; +} +.nav-tabs.nav-justified { + width: 100%; + border-bottom: 0; +} +.nav-tabs.nav-justified > li { + float: none; +} +.nav-tabs.nav-justified > li > a { + margin-bottom: 5px; + text-align: center; +} +.nav-tabs.nav-justified > .dropdown .dropdown-menu { + top: auto; + left: auto; +} +@media (min-width: 768px) { + .nav-tabs.nav-justified > li { + display: table-cell; + width: 1%; + } + .nav-tabs.nav-justified > li > a { + margin-bottom: 0; + } +} +.nav-tabs.nav-justified > li > a { + margin-right: 0; + border-radius: 4px; +} +.nav-tabs.nav-justified > .active > a, +.nav-tabs.nav-justified > .active > a:hover, +.nav-tabs.nav-justified > .active > a:focus { + border: 1px solid #ddd; +} +@media (min-width: 768px) { + .nav-tabs.nav-justified > li > a { + border-bottom: 1px solid #ddd; + border-radius: 4px 4px 0 0; + } + .nav-tabs.nav-justified > .active > a, + .nav-tabs.nav-justified > .active > a:hover, + .nav-tabs.nav-justified > .active > a:focus { + border-bottom-color: #fff; + } +} +.nav-pills > li { + float: left; +} +.nav-pills > li > a { + border-radius: 4px; +} +.nav-pills > li + li { + margin-left: 2px; +} +.nav-pills > li.active > a, +.nav-pills > li.active > a:hover, +.nav-pills > li.active > a:focus { + color: #fff; + background-color: #337ab7; +} +.nav-stacked > li { + float: none; +} +.nav-stacked > li + li { + margin-top: 2px; + margin-left: 0; +} +.nav-justified { + width: 100%; +} +.nav-justified > li { + float: none; +} +.nav-justified > li > a { + margin-bottom: 5px; + text-align: center; +} +.nav-justified > .dropdown .dropdown-menu { + top: auto; + left: auto; +} +@media (min-width: 768px) { + .nav-justified > li { + display: table-cell; + width: 1%; + } + .nav-justified > li > a { + margin-bottom: 0; + } +} +.nav-tabs-justified { + border-bottom: 0; +} +.nav-tabs-justified > li > a { + margin-right: 0; + border-radius: 4px; +} +.nav-tabs-justified > .active > a, +.nav-tabs-justified > .active > a:hover, +.nav-tabs-justified > .active > a:focus { + border: 1px solid #ddd; +} +@media (min-width: 768px) { + .nav-tabs-justified > li > a { + border-bottom: 1px solid #ddd; + border-radius: 4px 4px 0 0; + } + .nav-tabs-justified > .active > a, + .nav-tabs-justified > .active > a:hover, + .nav-tabs-justified > .active > a:focus { + border-bottom-color: #fff; + } +} +.tab-content > .tab-pane { + display: none; +} +.tab-content > .active { + display: block; +} +.nav-tabs .dropdown-menu { + margin-top: -1px; + border-top-left-radius: 0; + border-top-right-radius: 0; +} +.navbar { + position: relative; + min-height: 50px; + margin-bottom: 20px; + border: 1px solid transparent; +} +@media (min-width: 768px) { + .navbar { + border-radius: 4px; + } +} +@media (min-width: 768px) { + .navbar-header { + float: left; + } +} +.navbar-collapse { + padding-right: 15px; + padding-left: 15px; + overflow-x: visible; + border-top: 1px solid transparent; + -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1); + box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1); + -webkit-overflow-scrolling: touch; +} +.navbar-collapse.in { + overflow-y: auto; +} +@media (min-width: 768px) { + .navbar-collapse { + width: auto; + border-top: 0; + -webkit-box-shadow: none; + box-shadow: none; + } + .navbar-collapse.collapse { + display: block !important; + height: auto !important; + padding-bottom: 0; + overflow: visible !important; + } + .navbar-collapse.in { + overflow-y: visible; + } + .navbar-fixed-top .navbar-collapse, + .navbar-static-top .navbar-collapse, + .navbar-fixed-bottom .navbar-collapse { + padding-right: 0; + padding-left: 0; + } +} +.navbar-fixed-top, +.navbar-fixed-bottom { + position: fixed; + right: 0; + left: 0; + z-index: 1030; +} +.navbar-fixed-top .navbar-collapse, +.navbar-fixed-bottom .navbar-collapse { + max-height: 340px; +} +@media (max-device-width: 480px) and (orientation: landscape) { + .navbar-fixed-top .navbar-collapse, + .navbar-fixed-bottom .navbar-collapse { + max-height: 200px; + } +} +@media (min-width: 768px) { + .navbar-fixed-top, + .navbar-fixed-bottom { + border-radius: 0; + } +} +.navbar-fixed-top { + top: 0; + border-width: 0 0 1px; +} +.navbar-fixed-bottom { + bottom: 0; + margin-bottom: 0; + border-width: 1px 0 0; +} +.container > .navbar-header, +.container-fluid > .navbar-header, +.container > .navbar-collapse, +.container-fluid > .navbar-collapse { + margin-right: -15px; + margin-left: -15px; +} +@media (min-width: 768px) { + .container > .navbar-header, + .container-fluid > .navbar-header, + .container > .navbar-collapse, + .container-fluid > .navbar-collapse { + margin-right: 0; + margin-left: 0; + } +} +.navbar-static-top { + z-index: 1000; + border-width: 0 0 1px; +} +@media (min-width: 768px) { + .navbar-static-top { + border-radius: 0; + } +} +.navbar-brand { + float: left; + height: 50px; + padding: 15px 15px; + font-size: 18px; + line-height: 20px; +} +.navbar-brand:hover, +.navbar-brand:focus { + text-decoration: none; +} +.navbar-brand > img { + display: block; +} +@media (min-width: 768px) { + .navbar > .container .navbar-brand, + .navbar > .container-fluid .navbar-brand { + margin-left: -15px; + } +} +.navbar-toggle { + position: relative; + float: right; + padding: 9px 10px; + margin-right: 15px; + margin-top: 8px; + margin-bottom: 8px; + background-color: transparent; + background-image: none; + border: 1px solid transparent; + border-radius: 4px; +} +.navbar-toggle:focus { + outline: 0; +} +.navbar-toggle .icon-bar { + display: block; + width: 22px; + height: 2px; + border-radius: 1px; +} +.navbar-toggle .icon-bar + .icon-bar { + margin-top: 4px; +} +@media (min-width: 768px) { + .navbar-toggle { + display: none; + } +} +.navbar-nav { + margin: 7.5px -15px; +} +.navbar-nav > li > a { + padding-top: 10px; + padding-bottom: 10px; + line-height: 20px; +} +@media (max-width: 767px) { + .navbar-nav .open .dropdown-menu { + position: static; + float: none; + width: auto; + margin-top: 0; + background-color: transparent; + border: 0; + -webkit-box-shadow: none; + box-shadow: none; + } + .navbar-nav .open .dropdown-menu > li > a, + .navbar-nav .open .dropdown-menu .dropdown-header { + padding: 5px 15px 5px 25px; + } + .navbar-nav .open .dropdown-menu > li > a { + line-height: 20px; + } + .navbar-nav .open .dropdown-menu > li > a:hover, + .navbar-nav .open .dropdown-menu > li > a:focus { + background-image: none; + } +} +@media (min-width: 768px) { + .navbar-nav { + float: left; + margin: 0; + } + .navbar-nav > li { + float: left; + } + .navbar-nav > li > a { + padding-top: 15px; + padding-bottom: 15px; + } +} +.navbar-form { + padding: 10px 15px; + margin-right: -15px; + margin-left: -15px; + border-top: 1px solid transparent; + border-bottom: 1px solid transparent; + -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1); + box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1); + margin-top: 8px; + margin-bottom: 8px; +} +@media (min-width: 768px) { + .navbar-form .form-group { + display: inline-block; + margin-bottom: 0; + vertical-align: middle; + } + .navbar-form .form-control { + display: inline-block; + width: auto; + vertical-align: middle; + } + .navbar-form .form-control-static { + display: inline-block; + } + .navbar-form .input-group { + display: inline-table; + vertical-align: middle; + } + .navbar-form .input-group .input-group-addon, + .navbar-form .input-group .input-group-btn, + .navbar-form .input-group .form-control { + width: auto; + } + .navbar-form .input-group > .form-control { + width: 100%; + } + .navbar-form .control-label { + margin-bottom: 0; + vertical-align: middle; + } + .navbar-form .radio, + .navbar-form .checkbox { + display: inline-block; + margin-top: 0; + margin-bottom: 0; + vertical-align: middle; + } + .navbar-form .radio label, + .navbar-form .checkbox label { + padding-left: 0; + } + .navbar-form .radio input[type="radio"], + .navbar-form .checkbox input[type="checkbox"] { + position: relative; + margin-left: 0; + } + .navbar-form .has-feedback .form-control-feedback { + top: 0; + } +} +@media (max-width: 767px) { + .navbar-form .form-group { + margin-bottom: 5px; + } + .navbar-form .form-group:last-child { + margin-bottom: 0; + } +} +@media (min-width: 768px) { + .navbar-form { + width: auto; + padding-top: 0; + padding-bottom: 0; + margin-right: 0; + margin-left: 0; + border: 0; + -webkit-box-shadow: none; + box-shadow: none; + } +} +.navbar-nav > li > .dropdown-menu { + margin-top: 0; + border-top-left-radius: 0; + border-top-right-radius: 0; +} +.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu { + margin-bottom: 0; + border-top-left-radius: 4px; + border-top-right-radius: 4px; + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; +} +.navbar-btn { + margin-top: 8px; + margin-bottom: 8px; +} +.navbar-btn.btn-sm { + margin-top: 10px; + margin-bottom: 10px; +} +.navbar-btn.btn-xs { + margin-top: 14px; + margin-bottom: 14px; +} +.navbar-text { + margin-top: 15px; + margin-bottom: 15px; +} +@media (min-width: 768px) { + .navbar-text { + float: left; + margin-right: 15px; + margin-left: 15px; + } +} +@media (min-width: 768px) { + .navbar-left { + float: left !important; + } + .navbar-right { + float: right !important; + margin-right: -15px; + } + .navbar-right ~ .navbar-right { + margin-right: 0; + } +} +.navbar-default { + background-color: #f8f8f8; + border-color: #e7e7e7; +} +.navbar-default .navbar-brand { + color: #777; +} +.navbar-default .navbar-brand:hover, +.navbar-default .navbar-brand:focus { + color: #5e5e5e; + background-color: transparent; +} +.navbar-default .navbar-text { + color: #777; +} +.navbar-default .navbar-nav > li > a { + color: #777; +} +.navbar-default .navbar-nav > li > a:hover, +.navbar-default .navbar-nav > li > a:focus { + color: #333; + background-color: transparent; +} +.navbar-default .navbar-nav > .active > a, +.navbar-default .navbar-nav > .active > a:hover, +.navbar-default .navbar-nav > .active > a:focus { + color: #555; + background-color: #e7e7e7; +} +.navbar-default .navbar-nav > .disabled > a, +.navbar-default .navbar-nav > .disabled > a:hover, +.navbar-default .navbar-nav > .disabled > a:focus { + color: #ccc; + background-color: transparent; +} +.navbar-default .navbar-nav > .open > a, +.navbar-default .navbar-nav > .open > a:hover, +.navbar-default .navbar-nav > .open > a:focus { + color: #555; + background-color: #e7e7e7; +} +@media (max-width: 767px) { + .navbar-default .navbar-nav .open .dropdown-menu > li > a { + color: #777; + } + .navbar-default .navbar-nav .open .dropdown-menu > li > a:hover, + .navbar-default .navbar-nav .open .dropdown-menu > li > a:focus { + color: #333; + background-color: transparent; + } + .navbar-default .navbar-nav .open .dropdown-menu > .active > a, + .navbar-default .navbar-nav .open .dropdown-menu > .active > a:hover, + .navbar-default .navbar-nav .open .dropdown-menu > .active > a:focus { + color: #555; + background-color: #e7e7e7; + } + .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a, + .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:hover, + .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:focus { + color: #ccc; + background-color: transparent; + } +} +.navbar-default .navbar-toggle { + border-color: #ddd; +} +.navbar-default .navbar-toggle:hover, +.navbar-default .navbar-toggle:focus { + background-color: #ddd; +} +.navbar-default .navbar-toggle .icon-bar { + background-color: #888; +} +.navbar-default .navbar-collapse, +.navbar-default .navbar-form { + border-color: #e7e7e7; +} +.navbar-default .navbar-link { + color: #777; +} +.navbar-default .navbar-link:hover { + color: #333; +} +.navbar-default .btn-link { + color: #777; +} +.navbar-default .btn-link:hover, +.navbar-default .btn-link:focus { + color: #333; +} +.navbar-default .btn-link[disabled]:hover, +fieldset[disabled] .navbar-default .btn-link:hover, +.navbar-default .btn-link[disabled]:focus, +fieldset[disabled] .navbar-default .btn-link:focus { + color: #ccc; +} +.navbar-inverse { + background-color: #222; + border-color: #080808; +} +.navbar-inverse .navbar-brand { + color: #9d9d9d; +} +.navbar-inverse .navbar-brand:hover, +.navbar-inverse .navbar-brand:focus { + color: #fff; + background-color: transparent; +} +.navbar-inverse .navbar-text { + color: #9d9d9d; +} +.navbar-inverse .navbar-nav > li > a { + color: #9d9d9d; +} +.navbar-inverse .navbar-nav > li > a:hover, +.navbar-inverse .navbar-nav > li > a:focus { + color: #fff; + background-color: transparent; +} +.navbar-inverse .navbar-nav > .active > a, +.navbar-inverse .navbar-nav > .active > a:hover, +.navbar-inverse .navbar-nav > .active > a:focus { + color: #fff; + background-color: #080808; +} +.navbar-inverse .navbar-nav > .disabled > a, +.navbar-inverse .navbar-nav > .disabled > a:hover, +.navbar-inverse .navbar-nav > .disabled > a:focus { + color: #444; + background-color: transparent; +} +.navbar-inverse .navbar-nav > .open > a, +.navbar-inverse .navbar-nav > .open > a:hover, +.navbar-inverse .navbar-nav > .open > a:focus { + color: #fff; + background-color: #080808; +} +@media (max-width: 767px) { + .navbar-inverse .navbar-nav .open .dropdown-menu > .dropdown-header { + border-color: #080808; + } + .navbar-inverse .navbar-nav .open .dropdown-menu .divider { + background-color: #080808; + } + .navbar-inverse .navbar-nav .open .dropdown-menu > li > a { + color: #9d9d9d; + } + .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:hover, + .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:focus { + color: #fff; + background-color: transparent; + } + .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a, + .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:hover, + .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:focus { + color: #fff; + background-color: #080808; + } + .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a, + .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:hover, + .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:focus { + color: #444; + background-color: transparent; + } +} +.navbar-inverse .navbar-toggle { + border-color: #333; +} +.navbar-inverse .navbar-toggle:hover, +.navbar-inverse .navbar-toggle:focus { + background-color: #333; +} +.navbar-inverse .navbar-toggle .icon-bar { + background-color: #fff; +} +.navbar-inverse .navbar-collapse, +.navbar-inverse .navbar-form { + border-color: #101010; +} +.navbar-inverse .navbar-link { + color: #9d9d9d; +} +.navbar-inverse .navbar-link:hover { + color: #fff; +} +.navbar-inverse .btn-link { + color: #9d9d9d; +} +.navbar-inverse .btn-link:hover, +.navbar-inverse .btn-link:focus { + color: #fff; +} +.navbar-inverse .btn-link[disabled]:hover, +fieldset[disabled] .navbar-inverse .btn-link:hover, +.navbar-inverse .btn-link[disabled]:focus, +fieldset[disabled] .navbar-inverse .btn-link:focus { + color: #444; +} +.breadcrumb { + padding: 8px 15px; + margin-bottom: 20px; + list-style: none; + background-color: #f5f5f5; + border-radius: 4px; +} +.breadcrumb > li { + display: inline-block; +} +.breadcrumb > li + li:before { + padding: 0 5px; + color: #ccc; + content: "/\00a0"; +} +.breadcrumb > .active { + color: #777777; +} +.pagination { + display: inline-block; + padding-left: 0; + margin: 20px 0; + border-radius: 4px; +} +.pagination > li { + display: inline; +} +.pagination > li > a, +.pagination > li > span { + position: relative; + float: left; + padding: 6px 12px; + margin-left: -1px; + line-height: 1.42857143; + color: #337ab7; + text-decoration: none; + background-color: #fff; + border: 1px solid #ddd; +} +.pagination > li > a:hover, +.pagination > li > span:hover, +.pagination > li > a:focus, +.pagination > li > span:focus { + z-index: 2; + color: #23527c; + background-color: #eeeeee; + border-color: #ddd; +} +.pagination > li:first-child > a, +.pagination > li:first-child > span { + margin-left: 0; + border-top-left-radius: 4px; + border-bottom-left-radius: 4px; +} +.pagination > li:last-child > a, +.pagination > li:last-child > span { + border-top-right-radius: 4px; + border-bottom-right-radius: 4px; +} +.pagination > .active > a, +.pagination > .active > span, +.pagination > .active > a:hover, +.pagination > .active > span:hover, +.pagination > .active > a:focus, +.pagination > .active > span:focus { + z-index: 3; + color: #fff; + cursor: default; + background-color: #337ab7; + border-color: #337ab7; +} +.pagination > .disabled > span, +.pagination > .disabled > span:hover, +.pagination > .disabled > span:focus, +.pagination > .disabled > a, +.pagination > .disabled > a:hover, +.pagination > .disabled > a:focus { + color: #777777; + cursor: not-allowed; + background-color: #fff; + border-color: #ddd; +} +.pagination-lg > li > a, +.pagination-lg > li > span { + padding: 10px 16px; + font-size: 18px; + line-height: 1.3333333; +} +.pagination-lg > li:first-child > a, +.pagination-lg > li:first-child > span { + border-top-left-radius: 6px; + border-bottom-left-radius: 6px; +} +.pagination-lg > li:last-child > a, +.pagination-lg > li:last-child > span { + border-top-right-radius: 6px; + border-bottom-right-radius: 6px; +} +.pagination-sm > li > a, +.pagination-sm > li > span { + padding: 5px 10px; + font-size: 12px; + line-height: 1.5; +} +.pagination-sm > li:first-child > a, +.pagination-sm > li:first-child > span { + border-top-left-radius: 3px; + border-bottom-left-radius: 3px; +} +.pagination-sm > li:last-child > a, +.pagination-sm > li:last-child > span { + border-top-right-radius: 3px; + border-bottom-right-radius: 3px; +} +.pager { + padding-left: 0; + margin: 20px 0; + text-align: center; + list-style: none; +} +.pager li { + display: inline; +} +.pager li > a, +.pager li > span { + display: inline-block; + padding: 5px 14px; + background-color: #fff; + border: 1px solid #ddd; + border-radius: 15px; +} +.pager li > a:hover, +.pager li > a:focus { + text-decoration: none; + background-color: #eeeeee; +} +.pager .next > a, +.pager .next > span { + float: right; +} +.pager .previous > a, +.pager .previous > span { + float: left; +} +.pager .disabled > a, +.pager .disabled > a:hover, +.pager .disabled > a:focus, +.pager .disabled > span { + color: #777777; + cursor: not-allowed; + background-color: #fff; +} +.label { + display: inline; + padding: 0.2em 0.6em 0.3em; + font-size: 75%; + font-weight: 700; + line-height: 1; + color: #fff; + text-align: center; + white-space: nowrap; + vertical-align: baseline; + border-radius: 0.25em; +} +a.label:hover, +a.label:focus { + color: #fff; + text-decoration: none; + cursor: pointer; +} +.label:empty { + display: none; +} +.btn .label { + position: relative; + top: -1px; +} +.label-default { + background-color: #777777; +} +.label-default[href]:hover, +.label-default[href]:focus { + background-color: #5e5e5e; +} +.label-primary { + background-color: #337ab7; +} +.label-primary[href]:hover, +.label-primary[href]:focus { + background-color: #286090; +} +.label-success { + background-color: #5cb85c; +} +.label-success[href]:hover, +.label-success[href]:focus { + background-color: #449d44; +} +.label-info { + background-color: #5bc0de; +} +.label-info[href]:hover, +.label-info[href]:focus { + background-color: #31b0d5; +} +.label-warning { + background-color: #f0ad4e; +} +.label-warning[href]:hover, +.label-warning[href]:focus { + background-color: #ec971f; +} +.label-danger { + background-color: #d9534f; +} +.label-danger[href]:hover, +.label-danger[href]:focus { + background-color: #c9302c; +} +.badge { + display: inline-block; + min-width: 10px; + padding: 3px 7px; + font-size: 12px; + font-weight: bold; + line-height: 1; + color: #fff; + text-align: center; + white-space: nowrap; + vertical-align: middle; + background-color: #777777; + border-radius: 10px; +} +.badge:empty { + display: none; +} +.btn .badge { + position: relative; + top: -1px; +} +.btn-xs .badge, +.btn-group-xs > .btn .badge { + top: 0; + padding: 1px 5px; +} +a.badge:hover, +a.badge:focus { + color: #fff; + text-decoration: none; + cursor: pointer; +} +.list-group-item.active > .badge, +.nav-pills > .active > a > .badge { + color: #337ab7; + background-color: #fff; +} +.list-group-item > .badge { + float: right; +} +.list-group-item > .badge + .badge { + margin-right: 5px; +} +.nav-pills > li > a > .badge { + margin-left: 3px; +} +.jumbotron { + padding-top: 30px; + padding-bottom: 30px; + margin-bottom: 30px; + color: inherit; + background-color: #eeeeee; +} +.jumbotron h1, +.jumbotron .h1 { + color: inherit; +} +.jumbotron p { + margin-bottom: 15px; + font-size: 21px; + font-weight: 200; +} +.jumbotron > hr { + border-top-color: #d5d5d5; +} +.container .jumbotron, +.container-fluid .jumbotron { + padding-right: 15px; + padding-left: 15px; + border-radius: 6px; +} +.jumbotron .container { + max-width: 100%; +} +@media screen and (min-width: 768px) { + .jumbotron { + padding-top: 48px; + padding-bottom: 48px; + } + .container .jumbotron, + .container-fluid .jumbotron { + padding-right: 60px; + padding-left: 60px; + } + .jumbotron h1, + .jumbotron .h1 { + font-size: 63px; + } +} +.thumbnail { + display: block; + padding: 4px; + margin-bottom: 20px; + line-height: 1.42857143; + background-color: #fff; + border: 1px solid #ddd; + border-radius: 4px; + -webkit-transition: border 0.2s ease-in-out; + -o-transition: border 0.2s ease-in-out; + transition: border 0.2s ease-in-out; +} +.thumbnail > img, +.thumbnail a > img { + margin-right: auto; + margin-left: auto; +} +a.thumbnail:hover, +a.thumbnail:focus, +a.thumbnail.active { + border-color: #337ab7; +} +.thumbnail .caption { + padding: 9px; + color: #333333; +} +.alert { + padding: 15px; + margin-bottom: 20px; + border: 1px solid transparent; + border-radius: 4px; +} +.alert h4 { + margin-top: 0; + color: inherit; +} +.alert .alert-link { + font-weight: bold; +} +.alert > p, +.alert > ul { + margin-bottom: 0; +} +.alert > p + p { + margin-top: 5px; +} +.alert-dismissable, +.alert-dismissible { + padding-right: 35px; +} +.alert-dismissable .close, +.alert-dismissible .close { + position: relative; + top: -2px; + right: -21px; + color: inherit; +} +.alert-success { + color: #3c763d; + background-color: #dff0d8; + border-color: #d6e9c6; +} +.alert-success hr { + border-top-color: #c9e2b3; +} +.alert-success .alert-link { + color: #2b542c; +} +.alert-info { + color: #31708f; + background-color: #d9edf7; + border-color: #bce8f1; +} +.alert-info hr { + border-top-color: #a6e1ec; +} +.alert-info .alert-link { + color: #245269; +} +.alert-warning { + color: #8a6d3b; + background-color: #fcf8e3; + border-color: #faebcc; +} +.alert-warning hr { + border-top-color: #f7e1b5; +} +.alert-warning .alert-link { + color: #66512c; +} +.alert-danger { + color: #a94442; + background-color: #f2dede; + border-color: #ebccd1; +} +.alert-danger hr { + border-top-color: #e4b9c0; +} +.alert-danger .alert-link { + color: #843534; +} +@-webkit-keyframes progress-bar-stripes { + from { + background-position: 40px 0; + } + to { + background-position: 0 0; + } +} +@-o-keyframes progress-bar-stripes { + from { + background-position: 40px 0; + } + to { + background-position: 0 0; + } +} +@keyframes progress-bar-stripes { + from { + background-position: 40px 0; + } + to { + background-position: 0 0; + } +} +.progress { + height: 20px; + margin-bottom: 20px; + overflow: hidden; + background-color: #f5f5f5; + border-radius: 4px; + -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1); + box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1); +} +.progress-bar { + float: left; + width: 0%; + height: 100%; + font-size: 12px; + line-height: 20px; + color: #fff; + text-align: center; + background-color: #337ab7; + -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15); + box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15); + -webkit-transition: width 0.6s ease; + -o-transition: width 0.6s ease; + transition: width 0.6s ease; +} +.progress-striped .progress-bar, +.progress-bar-striped { + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + -webkit-background-size: 40px 40px; + background-size: 40px 40px; +} +.progress.active .progress-bar, +.progress-bar.active { + -webkit-animation: progress-bar-stripes 2s linear infinite; + -o-animation: progress-bar-stripes 2s linear infinite; + animation: progress-bar-stripes 2s linear infinite; +} +.progress-bar-success { + background-color: #5cb85c; +} +.progress-striped .progress-bar-success { + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); +} +.progress-bar-info { + background-color: #5bc0de; +} +.progress-striped .progress-bar-info { + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); +} +.progress-bar-warning { + background-color: #f0ad4e; +} +.progress-striped .progress-bar-warning { + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); +} +.progress-bar-danger { + background-color: #d9534f; +} +.progress-striped .progress-bar-danger { + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); +} +.media { + margin-top: 15px; +} +.media:first-child { + margin-top: 0; +} +.media, +.media-body { + overflow: hidden; + zoom: 1; +} +.media-body { + width: 10000px; +} +.media-object { + display: block; +} +.media-object.img-thumbnail { + max-width: none; +} +.media-right, +.media > .pull-right { + padding-left: 10px; +} +.media-left, +.media > .pull-left { + padding-right: 10px; +} +.media-left, +.media-right, +.media-body { + display: table-cell; + vertical-align: top; +} +.media-middle { + vertical-align: middle; +} +.media-bottom { + vertical-align: bottom; +} +.media-heading { + margin-top: 0; + margin-bottom: 5px; +} +.media-list { + padding-left: 0; + list-style: none; +} +.list-group { + padding-left: 0; + margin-bottom: 20px; +} +.list-group-item { + position: relative; + display: block; + padding: 10px 15px; + margin-bottom: -1px; + background-color: #fff; + border: 1px solid #ddd; +} +.list-group-item:first-child { + border-top-left-radius: 4px; + border-top-right-radius: 4px; +} +.list-group-item:last-child { + margin-bottom: 0; + border-bottom-right-radius: 4px; + border-bottom-left-radius: 4px; +} +.list-group-item.disabled, +.list-group-item.disabled:hover, +.list-group-item.disabled:focus { + color: #777777; + cursor: not-allowed; + background-color: #eeeeee; +} +.list-group-item.disabled .list-group-item-heading, +.list-group-item.disabled:hover .list-group-item-heading, +.list-group-item.disabled:focus .list-group-item-heading { + color: inherit; +} +.list-group-item.disabled .list-group-item-text, +.list-group-item.disabled:hover .list-group-item-text, +.list-group-item.disabled:focus .list-group-item-text { + color: #777777; +} +.list-group-item.active, +.list-group-item.active:hover, +.list-group-item.active:focus { + z-index: 2; + color: #fff; + background-color: #337ab7; + border-color: #337ab7; +} +.list-group-item.active .list-group-item-heading, +.list-group-item.active:hover .list-group-item-heading, +.list-group-item.active:focus .list-group-item-heading, +.list-group-item.active .list-group-item-heading > small, +.list-group-item.active:hover .list-group-item-heading > small, +.list-group-item.active:focus .list-group-item-heading > small, +.list-group-item.active .list-group-item-heading > .small, +.list-group-item.active:hover .list-group-item-heading > .small, +.list-group-item.active:focus .list-group-item-heading > .small { + color: inherit; +} +.list-group-item.active .list-group-item-text, +.list-group-item.active:hover .list-group-item-text, +.list-group-item.active:focus .list-group-item-text { + color: #c7ddef; +} +a.list-group-item, +button.list-group-item { + color: #555; +} +a.list-group-item .list-group-item-heading, +button.list-group-item .list-group-item-heading { + color: #333; +} +a.list-group-item:hover, +button.list-group-item:hover, +a.list-group-item:focus, +button.list-group-item:focus { + color: #555; + text-decoration: none; + background-color: #f5f5f5; +} +button.list-group-item { + width: 100%; + text-align: left; +} +.list-group-item-success { + color: #3c763d; + background-color: #dff0d8; +} +a.list-group-item-success, +button.list-group-item-success { + color: #3c763d; +} +a.list-group-item-success .list-group-item-heading, +button.list-group-item-success .list-group-item-heading { + color: inherit; +} +a.list-group-item-success:hover, +button.list-group-item-success:hover, +a.list-group-item-success:focus, +button.list-group-item-success:focus { + color: #3c763d; + background-color: #d0e9c6; +} +a.list-group-item-success.active, +button.list-group-item-success.active, +a.list-group-item-success.active:hover, +button.list-group-item-success.active:hover, +a.list-group-item-success.active:focus, +button.list-group-item-success.active:focus { + color: #fff; + background-color: #3c763d; + border-color: #3c763d; +} +.list-group-item-info { + color: #31708f; + background-color: #d9edf7; +} +a.list-group-item-info, +button.list-group-item-info { + color: #31708f; +} +a.list-group-item-info .list-group-item-heading, +button.list-group-item-info .list-group-item-heading { + color: inherit; +} +a.list-group-item-info:hover, +button.list-group-item-info:hover, +a.list-group-item-info:focus, +button.list-group-item-info:focus { + color: #31708f; + background-color: #c4e3f3; +} +a.list-group-item-info.active, +button.list-group-item-info.active, +a.list-group-item-info.active:hover, +button.list-group-item-info.active:hover, +a.list-group-item-info.active:focus, +button.list-group-item-info.active:focus { + color: #fff; + background-color: #31708f; + border-color: #31708f; +} +.list-group-item-warning { + color: #8a6d3b; + background-color: #fcf8e3; +} +a.list-group-item-warning, +button.list-group-item-warning { + color: #8a6d3b; +} +a.list-group-item-warning .list-group-item-heading, +button.list-group-item-warning .list-group-item-heading { + color: inherit; +} +a.list-group-item-warning:hover, +button.list-group-item-warning:hover, +a.list-group-item-warning:focus, +button.list-group-item-warning:focus { + color: #8a6d3b; + background-color: #faf2cc; +} +a.list-group-item-warning.active, +button.list-group-item-warning.active, +a.list-group-item-warning.active:hover, +button.list-group-item-warning.active:hover, +a.list-group-item-warning.active:focus, +button.list-group-item-warning.active:focus { + color: #fff; + background-color: #8a6d3b; + border-color: #8a6d3b; +} +.list-group-item-danger { + color: #a94442; + background-color: #f2dede; +} +a.list-group-item-danger, +button.list-group-item-danger { + color: #a94442; +} +a.list-group-item-danger .list-group-item-heading, +button.list-group-item-danger .list-group-item-heading { + color: inherit; +} +a.list-group-item-danger:hover, +button.list-group-item-danger:hover, +a.list-group-item-danger:focus, +button.list-group-item-danger:focus { + color: #a94442; + background-color: #ebcccc; +} +a.list-group-item-danger.active, +button.list-group-item-danger.active, +a.list-group-item-danger.active:hover, +button.list-group-item-danger.active:hover, +a.list-group-item-danger.active:focus, +button.list-group-item-danger.active:focus { + color: #fff; + background-color: #a94442; + border-color: #a94442; +} +.list-group-item-heading { + margin-top: 0; + margin-bottom: 5px; +} +.list-group-item-text { + margin-bottom: 0; + line-height: 1.3; +} +.panel { + margin-bottom: 20px; + background-color: #fff; + border: 1px solid transparent; + border-radius: 4px; + -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05); + box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05); +} +.panel-body { + padding: 15px; +} +.panel-heading { + padding: 10px 15px; + border-bottom: 1px solid transparent; + border-top-left-radius: 3px; + border-top-right-radius: 3px; +} +.panel-heading > .dropdown .dropdown-toggle { + color: inherit; +} +.panel-title { + margin-top: 0; + margin-bottom: 0; + font-size: 16px; + color: inherit; +} +.panel-title > a, +.panel-title > small, +.panel-title > .small, +.panel-title > small > a, +.panel-title > .small > a { + color: inherit; +} +.panel-footer { + padding: 10px 15px; + background-color: #f5f5f5; + border-top: 1px solid #ddd; + border-bottom-right-radius: 3px; + border-bottom-left-radius: 3px; +} +.panel > .list-group, +.panel > .panel-collapse > .list-group { + margin-bottom: 0; +} +.panel > .list-group .list-group-item, +.panel > .panel-collapse > .list-group .list-group-item { + border-width: 1px 0; + border-radius: 0; +} +.panel > .list-group:first-child .list-group-item:first-child, +.panel > .panel-collapse > .list-group:first-child .list-group-item:first-child { + border-top: 0; + border-top-left-radius: 3px; + border-top-right-radius: 3px; +} +.panel > .list-group:last-child .list-group-item:last-child, +.panel > .panel-collapse > .list-group:last-child .list-group-item:last-child { + border-bottom: 0; + border-bottom-right-radius: 3px; + border-bottom-left-radius: 3px; +} +.panel > .panel-heading + .panel-collapse > .list-group .list-group-item:first-child { + border-top-left-radius: 0; + border-top-right-radius: 0; +} +.panel-heading + .list-group .list-group-item:first-child { + border-top-width: 0; +} +.list-group + .panel-footer { + border-top-width: 0; +} +.panel > .table, +.panel > .table-responsive > .table, +.panel > .panel-collapse > .table { + margin-bottom: 0; +} +.panel > .table caption, +.panel > .table-responsive > .table caption, +.panel > .panel-collapse > .table caption { + padding-right: 15px; + padding-left: 15px; +} +.panel > .table:first-child, +.panel > .table-responsive:first-child > .table:first-child { + border-top-left-radius: 3px; + border-top-right-radius: 3px; +} +.panel > .table:first-child > thead:first-child > tr:first-child, +.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child, +.panel > .table:first-child > tbody:first-child > tr:first-child, +.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child { + border-top-left-radius: 3px; + border-top-right-radius: 3px; +} +.panel > .table:first-child > thead:first-child > tr:first-child td:first-child, +.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:first-child, +.panel > .table:first-child > tbody:first-child > tr:first-child td:first-child, +.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:first-child, +.panel > .table:first-child > thead:first-child > tr:first-child th:first-child, +.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:first-child, +.panel > .table:first-child > tbody:first-child > tr:first-child th:first-child, +.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:first-child { + border-top-left-radius: 3px; +} +.panel > .table:first-child > thead:first-child > tr:first-child td:last-child, +.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:last-child, +.panel > .table:first-child > tbody:first-child > tr:first-child td:last-child, +.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:last-child, +.panel > .table:first-child > thead:first-child > tr:first-child th:last-child, +.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:last-child, +.panel > .table:first-child > tbody:first-child > tr:first-child th:last-child, +.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:last-child { + border-top-right-radius: 3px; +} +.panel > .table:last-child, +.panel > .table-responsive:last-child > .table:last-child { + border-bottom-right-radius: 3px; + border-bottom-left-radius: 3px; +} +.panel > .table:last-child > tbody:last-child > tr:last-child, +.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child, +.panel > .table:last-child > tfoot:last-child > tr:last-child, +.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child { + border-bottom-right-radius: 3px; + border-bottom-left-radius: 3px; +} +.panel > .table:last-child > tbody:last-child > tr:last-child td:first-child, +.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:first-child, +.panel > .table:last-child > tfoot:last-child > tr:last-child td:first-child, +.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:first-child, +.panel > .table:last-child > tbody:last-child > tr:last-child th:first-child, +.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:first-child, +.panel > .table:last-child > tfoot:last-child > tr:last-child th:first-child, +.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:first-child { + border-bottom-left-radius: 3px; +} +.panel > .table:last-child > tbody:last-child > tr:last-child td:last-child, +.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:last-child, +.panel > .table:last-child > tfoot:last-child > tr:last-child td:last-child, +.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:last-child, +.panel > .table:last-child > tbody:last-child > tr:last-child th:last-child, +.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:last-child, +.panel > .table:last-child > tfoot:last-child > tr:last-child th:last-child, +.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:last-child { + border-bottom-right-radius: 3px; +} +.panel > .panel-body + .table, +.panel > .panel-body + .table-responsive, +.panel > .table + .panel-body, +.panel > .table-responsive + .panel-body { + border-top: 1px solid #ddd; +} +.panel > .table > tbody:first-child > tr:first-child th, +.panel > .table > tbody:first-child > tr:first-child td { + border-top: 0; +} +.panel > .table-bordered, +.panel > .table-responsive > .table-bordered { + border: 0; +} +.panel > .table-bordered > thead > tr > th:first-child, +.panel > .table-responsive > .table-bordered > thead > tr > th:first-child, +.panel > .table-bordered > tbody > tr > th:first-child, +.panel > .table-responsive > .table-bordered > tbody > tr > th:first-child, +.panel > .table-bordered > tfoot > tr > th:first-child, +.panel > .table-responsive > .table-bordered > tfoot > tr > th:first-child, +.panel > .table-bordered > thead > tr > td:first-child, +.panel > .table-responsive > .table-bordered > thead > tr > td:first-child, +.panel > .table-bordered > tbody > tr > td:first-child, +.panel > .table-responsive > .table-bordered > tbody > tr > td:first-child, +.panel > .table-bordered > tfoot > tr > td:first-child, +.panel > .table-responsive > .table-bordered > tfoot > tr > td:first-child { + border-left: 0; +} +.panel > .table-bordered > thead > tr > th:last-child, +.panel > .table-responsive > .table-bordered > thead > tr > th:last-child, +.panel > .table-bordered > tbody > tr > th:last-child, +.panel > .table-responsive > .table-bordered > tbody > tr > th:last-child, +.panel > .table-bordered > tfoot > tr > th:last-child, +.panel > .table-responsive > .table-bordered > tfoot > tr > th:last-child, +.panel > .table-bordered > thead > tr > td:last-child, +.panel > .table-responsive > .table-bordered > thead > tr > td:last-child, +.panel > .table-bordered > tbody > tr > td:last-child, +.panel > .table-responsive > .table-bordered > tbody > tr > td:last-child, +.panel > .table-bordered > tfoot > tr > td:last-child, +.panel > .table-responsive > .table-bordered > tfoot > tr > td:last-child { + border-right: 0; +} +.panel > .table-bordered > thead > tr:first-child > td, +.panel > .table-responsive > .table-bordered > thead > tr:first-child > td, +.panel > .table-bordered > tbody > tr:first-child > td, +.panel > .table-responsive > .table-bordered > tbody > tr:first-child > td, +.panel > .table-bordered > thead > tr:first-child > th, +.panel > .table-responsive > .table-bordered > thead > tr:first-child > th, +.panel > .table-bordered > tbody > tr:first-child > th, +.panel > .table-responsive > .table-bordered > tbody > tr:first-child > th { + border-bottom: 0; +} +.panel > .table-bordered > tbody > tr:last-child > td, +.panel > .table-responsive > .table-bordered > tbody > tr:last-child > td, +.panel > .table-bordered > tfoot > tr:last-child > td, +.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > td, +.panel > .table-bordered > tbody > tr:last-child > th, +.panel > .table-responsive > .table-bordered > tbody > tr:last-child > th, +.panel > .table-bordered > tfoot > tr:last-child > th, +.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > th { + border-bottom: 0; +} +.panel > .table-responsive { + margin-bottom: 0; + border: 0; +} +.panel-group { + margin-bottom: 20px; +} +.panel-group .panel { + margin-bottom: 0; + border-radius: 4px; +} +.panel-group .panel + .panel { + margin-top: 5px; +} +.panel-group .panel-heading { + border-bottom: 0; +} +.panel-group .panel-heading + .panel-collapse > .panel-body, +.panel-group .panel-heading + .panel-collapse > .list-group { + border-top: 1px solid #ddd; +} +.panel-group .panel-footer { + border-top: 0; +} +.panel-group .panel-footer + .panel-collapse .panel-body { + border-bottom: 1px solid #ddd; +} +.panel-default { + border-color: #ddd; +} +.panel-default > .panel-heading { + color: #333333; + background-color: #f5f5f5; + border-color: #ddd; +} +.panel-default > .panel-heading + .panel-collapse > .panel-body { + border-top-color: #ddd; +} +.panel-default > .panel-heading .badge { + color: #f5f5f5; + background-color: #333333; +} +.panel-default > .panel-footer + .panel-collapse > .panel-body { + border-bottom-color: #ddd; +} +.panel-primary { + border-color: #337ab7; +} +.panel-primary > .panel-heading { + color: #fff; + background-color: #337ab7; + border-color: #337ab7; +} +.panel-primary > .panel-heading + .panel-collapse > .panel-body { + border-top-color: #337ab7; +} +.panel-primary > .panel-heading .badge { + color: #337ab7; + background-color: #fff; +} +.panel-primary > .panel-footer + .panel-collapse > .panel-body { + border-bottom-color: #337ab7; +} +.panel-success { + border-color: #d6e9c6; +} +.panel-success > .panel-heading { + color: #3c763d; + background-color: #dff0d8; + border-color: #d6e9c6; +} +.panel-success > .panel-heading + .panel-collapse > .panel-body { + border-top-color: #d6e9c6; +} +.panel-success > .panel-heading .badge { + color: #dff0d8; + background-color: #3c763d; +} +.panel-success > .panel-footer + .panel-collapse > .panel-body { + border-bottom-color: #d6e9c6; +} +.panel-info { + border-color: #bce8f1; +} +.panel-info > .panel-heading { + color: #31708f; + background-color: #d9edf7; + border-color: #bce8f1; +} +.panel-info > .panel-heading + .panel-collapse > .panel-body { + border-top-color: #bce8f1; +} +.panel-info > .panel-heading .badge { + color: #d9edf7; + background-color: #31708f; +} +.panel-info > .panel-footer + .panel-collapse > .panel-body { + border-bottom-color: #bce8f1; +} +.panel-warning { + border-color: #faebcc; +} +.panel-warning > .panel-heading { + color: #8a6d3b; + background-color: #fcf8e3; + border-color: #faebcc; +} +.panel-warning > .panel-heading + .panel-collapse > .panel-body { + border-top-color: #faebcc; +} +.panel-warning > .panel-heading .badge { + color: #fcf8e3; + background-color: #8a6d3b; +} +.panel-warning > .panel-footer + .panel-collapse > .panel-body { + border-bottom-color: #faebcc; +} +.panel-danger { + border-color: #ebccd1; +} +.panel-danger > .panel-heading { + color: #a94442; + background-color: #f2dede; + border-color: #ebccd1; +} +.panel-danger > .panel-heading + .panel-collapse > .panel-body { + border-top-color: #ebccd1; +} +.panel-danger > .panel-heading .badge { + color: #f2dede; + background-color: #a94442; +} +.panel-danger > .panel-footer + .panel-collapse > .panel-body { + border-bottom-color: #ebccd1; +} +.embed-responsive { + position: relative; + display: block; + height: 0; + padding: 0; + overflow: hidden; +} +.embed-responsive .embed-responsive-item, +.embed-responsive iframe, +.embed-responsive embed, +.embed-responsive object, +.embed-responsive video { + position: absolute; + top: 0; + bottom: 0; + left: 0; + width: 100%; + height: 100%; + border: 0; +} +.embed-responsive-16by9 { + padding-bottom: 56.25%; +} +.embed-responsive-4by3 { + padding-bottom: 75%; +} +.well { + min-height: 20px; + padding: 19px; + margin-bottom: 20px; + background-color: #f5f5f5; + border: 1px solid #e3e3e3; + border-radius: 4px; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05); +} +.well blockquote { + border-color: #ddd; + border-color: rgba(0, 0, 0, 0.15); +} +.well-lg { + padding: 24px; + border-radius: 6px; +} +.well-sm { + padding: 9px; + border-radius: 3px; +} +.close { + float: right; + font-size: 21px; + font-weight: bold; + line-height: 1; + color: #000; + text-shadow: 0 1px 0 #fff; + filter: alpha(opacity=20); + opacity: 0.2; +} +.close:hover, +.close:focus { + color: #000; + text-decoration: none; + cursor: pointer; + filter: alpha(opacity=50); + opacity: 0.5; +} +button.close { + padding: 0; + cursor: pointer; + background: transparent; + border: 0; + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; +} +.modal-open { + overflow: hidden; +} +.modal { + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 1050; + display: none; + overflow: hidden; + -webkit-overflow-scrolling: touch; + outline: 0; +} +.modal.fade .modal-dialog { + -webkit-transform: translate(0, -25%); + -ms-transform: translate(0, -25%); + -o-transform: translate(0, -25%); + transform: translate(0, -25%); + -webkit-transition: -webkit-transform 0.3s ease-out; + -o-transition: -o-transform 0.3s ease-out; + transition: -webkit-transform 0.3s ease-out; + transition: transform 0.3s ease-out; + transition: transform 0.3s ease-out, -webkit-transform 0.3s ease-out, -o-transform 0.3s ease-out; +} +.modal.in .modal-dialog { + -webkit-transform: translate(0, 0); + -ms-transform: translate(0, 0); + -o-transform: translate(0, 0); + transform: translate(0, 0); +} +.modal-open .modal { + overflow-x: hidden; + overflow-y: auto; +} +.modal-dialog { + position: relative; + width: auto; + margin: 10px; +} +.modal-content { + position: relative; + background-color: #fff; + background-clip: padding-box; + border: 1px solid #999; + border: 1px solid rgba(0, 0, 0, 0.2); + border-radius: 6px; + -webkit-box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5); + box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5); + outline: 0; +} +.modal-backdrop { + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 1040; + background-color: #000; +} +.modal-backdrop.fade { + filter: alpha(opacity=0); + opacity: 0; +} +.modal-backdrop.in { + filter: alpha(opacity=50); + opacity: 0.5; +} +.modal-header { + padding: 15px; + border-bottom: 1px solid #e5e5e5; +} +.modal-header .close { + margin-top: -2px; +} +.modal-title { + margin: 0; + line-height: 1.42857143; +} +.modal-body { + position: relative; + padding: 15px; +} +.modal-footer { + padding: 15px; + text-align: right; + border-top: 1px solid #e5e5e5; +} +.modal-footer .btn + .btn { + margin-bottom: 0; + margin-left: 5px; +} +.modal-footer .btn-group .btn + .btn { + margin-left: -1px; +} +.modal-footer .btn-block + .btn-block { + margin-left: 0; +} +.modal-scrollbar-measure { + position: absolute; + top: -9999px; + width: 50px; + height: 50px; + overflow: scroll; +} +@media (min-width: 768px) { + .modal-dialog { + width: 600px; + margin: 30px auto; + } + .modal-content { + -webkit-box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5); + box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5); + } + .modal-sm { + width: 300px; + } +} +@media (min-width: 992px) { + .modal-lg { + width: 900px; + } +} +.tooltip { + position: absolute; + z-index: 1070; + display: block; + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; + font-style: normal; + font-weight: 400; + line-height: 1.42857143; + line-break: auto; + text-align: left; + text-align: start; + text-decoration: none; + text-shadow: none; + text-transform: none; + letter-spacing: normal; + word-break: normal; + word-spacing: normal; + word-wrap: normal; + white-space: normal; + font-size: 12px; + filter: alpha(opacity=0); + opacity: 0; +} +.tooltip.in { + filter: alpha(opacity=90); + opacity: 0.9; +} +.tooltip.top { + padding: 5px 0; + margin-top: -3px; +} +.tooltip.right { + padding: 0 5px; + margin-left: 3px; +} +.tooltip.bottom { + padding: 5px 0; + margin-top: 3px; +} +.tooltip.left { + padding: 0 5px; + margin-left: -3px; +} +.tooltip.top .tooltip-arrow { + bottom: 0; + left: 50%; + margin-left: -5px; + border-width: 5px 5px 0; + border-top-color: #000; +} +.tooltip.top-left .tooltip-arrow { + right: 5px; + bottom: 0; + margin-bottom: -5px; + border-width: 5px 5px 0; + border-top-color: #000; +} +.tooltip.top-right .tooltip-arrow { + bottom: 0; + left: 5px; + margin-bottom: -5px; + border-width: 5px 5px 0; + border-top-color: #000; +} +.tooltip.right .tooltip-arrow { + top: 50%; + left: 0; + margin-top: -5px; + border-width: 5px 5px 5px 0; + border-right-color: #000; +} +.tooltip.left .tooltip-arrow { + top: 50%; + right: 0; + margin-top: -5px; + border-width: 5px 0 5px 5px; + border-left-color: #000; +} +.tooltip.bottom .tooltip-arrow { + top: 0; + left: 50%; + margin-left: -5px; + border-width: 0 5px 5px; + border-bottom-color: #000; +} +.tooltip.bottom-left .tooltip-arrow { + top: 0; + right: 5px; + margin-top: -5px; + border-width: 0 5px 5px; + border-bottom-color: #000; +} +.tooltip.bottom-right .tooltip-arrow { + top: 0; + left: 5px; + margin-top: -5px; + border-width: 0 5px 5px; + border-bottom-color: #000; +} +.tooltip-inner { + max-width: 200px; + padding: 3px 8px; + color: #fff; + text-align: center; + background-color: #000; + border-radius: 4px; +} +.tooltip-arrow { + position: absolute; + width: 0; + height: 0; + border-color: transparent; + border-style: solid; +} +.popover { + position: absolute; + top: 0; + left: 0; + z-index: 1060; + display: none; + max-width: 276px; + padding: 1px; + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; + font-style: normal; + font-weight: 400; + line-height: 1.42857143; + line-break: auto; + text-align: left; + text-align: start; + text-decoration: none; + text-shadow: none; + text-transform: none; + letter-spacing: normal; + word-break: normal; + word-spacing: normal; + word-wrap: normal; + white-space: normal; + font-size: 14px; + background-color: #fff; + background-clip: padding-box; + border: 1px solid #ccc; + border: 1px solid rgba(0, 0, 0, 0.2); + border-radius: 6px; + -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); + box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); +} +.popover.top { + margin-top: -10px; +} +.popover.right { + margin-left: 10px; +} +.popover.bottom { + margin-top: 10px; +} +.popover.left { + margin-left: -10px; +} +.popover > .arrow { + border-width: 11px; +} +.popover > .arrow, +.popover > .arrow:after { + position: absolute; + display: block; + width: 0; + height: 0; + border-color: transparent; + border-style: solid; +} +.popover > .arrow:after { + content: ""; + border-width: 10px; +} +.popover.top > .arrow { + bottom: -11px; + left: 50%; + margin-left: -11px; + border-top-color: #999999; + border-top-color: rgba(0, 0, 0, 0.25); + border-bottom-width: 0; +} +.popover.top > .arrow:after { + bottom: 1px; + margin-left: -10px; + content: " "; + border-top-color: #fff; + border-bottom-width: 0; +} +.popover.right > .arrow { + top: 50%; + left: -11px; + margin-top: -11px; + border-right-color: #999999; + border-right-color: rgba(0, 0, 0, 0.25); + border-left-width: 0; +} +.popover.right > .arrow:after { + bottom: -10px; + left: 1px; + content: " "; + border-right-color: #fff; + border-left-width: 0; +} +.popover.bottom > .arrow { + top: -11px; + left: 50%; + margin-left: -11px; + border-top-width: 0; + border-bottom-color: #999999; + border-bottom-color: rgba(0, 0, 0, 0.25); +} +.popover.bottom > .arrow:after { + top: 1px; + margin-left: -10px; + content: " "; + border-top-width: 0; + border-bottom-color: #fff; +} +.popover.left > .arrow { + top: 50%; + right: -11px; + margin-top: -11px; + border-right-width: 0; + border-left-color: #999999; + border-left-color: rgba(0, 0, 0, 0.25); +} +.popover.left > .arrow:after { + right: 1px; + bottom: -10px; + content: " "; + border-right-width: 0; + border-left-color: #fff; +} +.popover-title { + padding: 8px 14px; + margin: 0; + font-size: 14px; + background-color: #f7f7f7; + border-bottom: 1px solid #ebebeb; + border-radius: 5px 5px 0 0; +} +.popover-content { + padding: 9px 14px; +} +.carousel { + position: relative; +} +.carousel-inner { + position: relative; + width: 100%; + overflow: hidden; +} +.carousel-inner > .item { + position: relative; + display: none; + -webkit-transition: 0.6s ease-in-out left; + -o-transition: 0.6s ease-in-out left; + transition: 0.6s ease-in-out left; +} +.carousel-inner > .item > img, +.carousel-inner > .item > a > img { + line-height: 1; +} +@media all and (transform-3d), (-webkit-transform-3d) { + .carousel-inner > .item { + -webkit-transition: -webkit-transform 0.6s ease-in-out; + -o-transition: -o-transform 0.6s ease-in-out; + transition: -webkit-transform 0.6s ease-in-out; + transition: transform 0.6s ease-in-out; + transition: transform 0.6s ease-in-out, -webkit-transform 0.6s ease-in-out, -o-transform 0.6s ease-in-out; + -webkit-backface-visibility: hidden; + backface-visibility: hidden; + -webkit-perspective: 1000px; + perspective: 1000px; + } + .carousel-inner > .item.next, + .carousel-inner > .item.active.right { + -webkit-transform: translate3d(100%, 0, 0); + transform: translate3d(100%, 0, 0); + left: 0; + } + .carousel-inner > .item.prev, + .carousel-inner > .item.active.left { + -webkit-transform: translate3d(-100%, 0, 0); + transform: translate3d(-100%, 0, 0); + left: 0; + } + .carousel-inner > .item.next.left, + .carousel-inner > .item.prev.right, + .carousel-inner > .item.active { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + left: 0; + } +} +.carousel-inner > .active, +.carousel-inner > .next, +.carousel-inner > .prev { + display: block; +} +.carousel-inner > .active { + left: 0; +} +.carousel-inner > .next, +.carousel-inner > .prev { + position: absolute; + top: 0; + width: 100%; +} +.carousel-inner > .next { + left: 100%; +} +.carousel-inner > .prev { + left: -100%; +} +.carousel-inner > .next.left, +.carousel-inner > .prev.right { + left: 0; +} +.carousel-inner > .active.left { + left: -100%; +} +.carousel-inner > .active.right { + left: 100%; +} +.carousel-control { + position: absolute; + top: 0; + bottom: 0; + left: 0; + width: 15%; + font-size: 20px; + color: #fff; + text-align: center; + text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6); + background-color: rgba(0, 0, 0, 0); + filter: alpha(opacity=50); + opacity: 0.5; +} +.carousel-control.left { + background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%); + background-image: -o-linear-gradient(left, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%); + background-image: -webkit-gradient(linear, left top, right top, from(rgba(0, 0, 0, 0.5)), to(rgba(0, 0, 0, 0.0001))); + background-image: linear-gradient(to right, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1); + background-repeat: repeat-x; +} +.carousel-control.right { + right: 0; + left: auto; + background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%); + background-image: -o-linear-gradient(left, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%); + background-image: -webkit-gradient(linear, left top, right top, from(rgba(0, 0, 0, 0.0001)), to(rgba(0, 0, 0, 0.5))); + background-image: linear-gradient(to right, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1); + background-repeat: repeat-x; +} +.carousel-control:hover, +.carousel-control:focus { + color: #fff; + text-decoration: none; + outline: 0; + filter: alpha(opacity=90); + opacity: 0.9; +} +.carousel-control .icon-prev, +.carousel-control .icon-next, +.carousel-control .glyphicon-chevron-left, +.carousel-control .glyphicon-chevron-right { + position: absolute; + top: 50%; + z-index: 5; + display: inline-block; + margin-top: -10px; +} +.carousel-control .icon-prev, +.carousel-control .glyphicon-chevron-left { + left: 50%; + margin-left: -10px; +} +.carousel-control .icon-next, +.carousel-control .glyphicon-chevron-right { + right: 50%; + margin-right: -10px; +} +.carousel-control .icon-prev, +.carousel-control .icon-next { + width: 20px; + height: 20px; + font-family: serif; + line-height: 1; +} +.carousel-control .icon-prev:before { + content: "\2039"; +} +.carousel-control .icon-next:before { + content: "\203a"; +} +.carousel-indicators { + position: absolute; + bottom: 10px; + left: 50%; + z-index: 15; + width: 60%; + padding-left: 0; + margin-left: -30%; + text-align: center; + list-style: none; +} +.carousel-indicators li { + display: inline-block; + width: 10px; + height: 10px; + margin: 1px; + text-indent: -999px; + cursor: pointer; + background-color: #000 \9; + background-color: rgba(0, 0, 0, 0); + border: 1px solid #fff; + border-radius: 10px; +} +.carousel-indicators .active { + width: 12px; + height: 12px; + margin: 0; + background-color: #fff; +} +.carousel-caption { + position: absolute; + right: 15%; + bottom: 20px; + left: 15%; + z-index: 10; + padding-top: 20px; + padding-bottom: 20px; + color: #fff; + text-align: center; + text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6); +} +.carousel-caption .btn { + text-shadow: none; +} +@media screen and (min-width: 768px) { + .carousel-control .glyphicon-chevron-left, + .carousel-control .glyphicon-chevron-right, + .carousel-control .icon-prev, + .carousel-control .icon-next { + width: 30px; + height: 30px; + margin-top: -10px; + font-size: 30px; + } + .carousel-control .glyphicon-chevron-left, + .carousel-control .icon-prev { + margin-left: -10px; + } + .carousel-control .glyphicon-chevron-right, + .carousel-control .icon-next { + margin-right: -10px; + } + .carousel-caption { + right: 20%; + left: 20%; + padding-bottom: 30px; + } + .carousel-indicators { + bottom: 20px; + } +} +.clearfix:before, +.clearfix:after, +.dl-horizontal dd:before, +.dl-horizontal dd:after, +.container:before, +.container:after, +.container-fluid:before, +.container-fluid:after, +.row:before, +.row:after, +.form-horizontal .form-group:before, +.form-horizontal .form-group:after, +.btn-toolbar:before, +.btn-toolbar:after, +.btn-group-vertical > .btn-group:before, +.btn-group-vertical > .btn-group:after, +.nav:before, +.nav:after, +.navbar:before, +.navbar:after, +.navbar-header:before, +.navbar-header:after, +.navbar-collapse:before, +.navbar-collapse:after, +.pager:before, +.pager:after, +.panel-body:before, +.panel-body:after, +.modal-header:before, +.modal-header:after, +.modal-footer:before, +.modal-footer:after { + display: table; + content: " "; +} +.clearfix:after, +.dl-horizontal dd:after, +.container:after, +.container-fluid:after, +.row:after, +.form-horizontal .form-group:after, +.btn-toolbar:after, +.btn-group-vertical > .btn-group:after, +.nav:after, +.navbar:after, +.navbar-header:after, +.navbar-collapse:after, +.pager:after, +.panel-body:after, +.modal-header:after, +.modal-footer:after { + clear: both; +} +.center-block { + display: block; + margin-right: auto; + margin-left: auto; +} +.pull-right { + float: right !important; +} +.pull-left { + float: left !important; +} +.hide { + display: none !important; +} +.show { + display: block !important; +} +.invisible { + visibility: hidden; +} +.text-hide { + font: 0/0 a; + color: transparent; + text-shadow: none; + background-color: transparent; + border: 0; +} +.hidden { + display: none !important; +} +.affix { + position: fixed; +} +@-ms-viewport { + width: device-width; +} +.visible-xs, +.visible-sm, +.visible-md, +.visible-lg { + display: none !important; +} +.visible-xs-block, +.visible-xs-inline, +.visible-xs-inline-block, +.visible-sm-block, +.visible-sm-inline, +.visible-sm-inline-block, +.visible-md-block, +.visible-md-inline, +.visible-md-inline-block, +.visible-lg-block, +.visible-lg-inline, +.visible-lg-inline-block { + display: none !important; +} +@media (max-width: 767px) { + .visible-xs { + display: block !important; + } + table.visible-xs { + display: table !important; + } + tr.visible-xs { + display: table-row !important; + } + th.visible-xs, + td.visible-xs { + display: table-cell !important; + } +} +@media (max-width: 767px) { + .visible-xs-block { + display: block !important; + } +} +@media (max-width: 767px) { + .visible-xs-inline { + display: inline !important; + } +} +@media (max-width: 767px) { + .visible-xs-inline-block { + display: inline-block !important; + } +} +@media (min-width: 768px) and (max-width: 991px) { + .visible-sm { + display: block !important; + } + table.visible-sm { + display: table !important; + } + tr.visible-sm { + display: table-row !important; + } + th.visible-sm, + td.visible-sm { + display: table-cell !important; + } +} +@media (min-width: 768px) and (max-width: 991px) { + .visible-sm-block { + display: block !important; + } +} +@media (min-width: 768px) and (max-width: 991px) { + .visible-sm-inline { + display: inline !important; + } +} +@media (min-width: 768px) and (max-width: 991px) { + .visible-sm-inline-block { + display: inline-block !important; + } +} +@media (min-width: 992px) and (max-width: 1199px) { + .visible-md { + display: block !important; + } + table.visible-md { + display: table !important; + } + tr.visible-md { + display: table-row !important; + } + th.visible-md, + td.visible-md { + display: table-cell !important; + } +} +@media (min-width: 992px) and (max-width: 1199px) { + .visible-md-block { + display: block !important; + } +} +@media (min-width: 992px) and (max-width: 1199px) { + .visible-md-inline { + display: inline !important; + } +} +@media (min-width: 992px) and (max-width: 1199px) { + .visible-md-inline-block { + display: inline-block !important; + } +} +@media (min-width: 1200px) { + .visible-lg { + display: block !important; + } + table.visible-lg { + display: table !important; + } + tr.visible-lg { + display: table-row !important; + } + th.visible-lg, + td.visible-lg { + display: table-cell !important; + } +} +@media (min-width: 1200px) { + .visible-lg-block { + display: block !important; + } +} +@media (min-width: 1200px) { + .visible-lg-inline { + display: inline !important; + } +} +@media (min-width: 1200px) { + .visible-lg-inline-block { + display: inline-block !important; + } +} +@media (max-width: 767px) { + .hidden-xs { + display: none !important; + } +} +@media (min-width: 768px) and (max-width: 991px) { + .hidden-sm { + display: none !important; + } +} +@media (min-width: 992px) and (max-width: 1199px) { + .hidden-md { + display: none !important; + } +} +@media (min-width: 1200px) { + .hidden-lg { + display: none !important; + } +} +.visible-print { + display: none !important; +} +@media print { + .visible-print { + display: block !important; + } + table.visible-print { + display: table !important; + } + tr.visible-print { + display: table-row !important; + } + th.visible-print, + td.visible-print { + display: table-cell !important; + } +} +.visible-print-block { + display: none !important; +} +@media print { + .visible-print-block { + display: block !important; + } +} +.visible-print-inline { + display: none !important; +} +@media print { + .visible-print-inline { + display: inline !important; + } +} +.visible-print-inline-block { + display: none !important; +} +@media print { + .visible-print-inline-block { + display: inline-block !important; + } +} +@media print { + .hidden-print { + display: none !important; + } +} +/*# sourceMappingURL=bootstrap.css.map */ diff --git a/xinda-plugs/xinda-oauth/src/main/resources/static/oauth/css/bootstrap.css.map b/xinda-plugs/xinda-oauth/src/main/resources/static/oauth/css/bootstrap.css.map new file mode 100644 index 0000000..caac3e6 --- /dev/null +++ b/xinda-plugs/xinda-oauth/src/main/resources/static/oauth/css/bootstrap.css.map @@ -0,0 +1 @@ +{"version":3,"sources":["bootstrap.css","less/normalize.less","less/print.less","less/glyphicons.less","less/scaffolding.less","less/mixins/vendor-prefixes.less","less/mixins/tab-focus.less","less/mixins/image.less","less/type.less","less/mixins/text-emphasis.less","less/mixins/background-variant.less","less/mixins/text-overflow.less","less/code.less","less/grid.less","less/mixins/grid.less","less/mixins/grid-framework.less","less/tables.less","less/mixins/table-row.less","less/forms.less","less/mixins/forms.less","less/buttons.less","less/mixins/buttons.less","less/mixins/opacity.less","less/component-animations.less","less/dropdowns.less","less/mixins/nav-divider.less","less/mixins/reset-filter.less","less/button-groups.less","less/mixins/border-radius.less","less/input-groups.less","less/navs.less","less/navbar.less","less/mixins/nav-vertical-align.less","less/utilities.less","less/breadcrumbs.less","less/pagination.less","less/mixins/pagination.less","less/pager.less","less/labels.less","less/mixins/labels.less","less/badges.less","less/jumbotron.less","less/thumbnails.less","less/alerts.less","less/mixins/alerts.less","less/progress-bars.less","less/mixins/gradients.less","less/mixins/progress-bar.less","less/media.less","less/list-group.less","less/mixins/list-group.less","less/panels.less","less/mixins/panels.less","less/responsive-embed.less","less/wells.less","less/close.less","less/modals.less","less/tooltip.less","less/mixins/reset-text.less","less/popovers.less","less/carousel.less","less/mixins/clearfix.less","less/mixins/center-block.less","less/mixins/hide-text.less","less/responsive-utilities.less","less/mixins/responsive-visibility.less"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,4EAA4E;ACK5E;EACE,wBAAA;EACA,2BAAA;EACA,+BAAA;CDHD;ACUD;EACE,UAAA;CDRD;ACqBD;;;;;;;;;;;;;EAaE,eAAA;CDnBD;AC2BD;;;;EAIE,sBAAA;EACA,yBAAA;CDzBD;ACiCD;EACE,cAAA;EACA,UAAA;CD/BD;ACuCD;;EAEE,cAAA;CDrCD;AC+CD;EACE,8BAAA;CD7CD;ACqDD;;EAEE,WAAA;CDnDD;AC8DD;EACE,oBAAA;EACA,2BAAA;EACA,0CAAA;EAAA,uCAAA;EAAA,kCAAA;CD5DD;ACmED;;EAEE,kBAAA;CDjED;ACwED;EACE,mBAAA;CDtED;AC8ED;EACE,eAAA;EACA,iBAAA;CD5ED;ACmFD;EACE,iBAAA;EACA,YAAA;CDjFD;ACwFD;EACE,eAAA;CDtFD;AC6FD;;EAEE,eAAA;EACA,eAAA;EACA,mBAAA;EACA,yBAAA;CD3FD;AC8FD;EACE,YAAA;CD5FD;AC+FD;EACE,gBAAA;CD7FD;ACuGD;EACE,UAAA;CDrGD;AC4GD;EACE,iBAAA;CD1GD;ACoHD;EACE,iBAAA;CDlHD;ACyHD;EACE,gCAAA;EAAA,6BAAA;EAAA,wBAAA;EACA,UAAA;CDvHD;AC8HD;EACE,eAAA;CD5HD;ACmID;;;;EAIE,kCAAA;EACA,eAAA;CDjID;ACmJD;;;;;EAKE,eAAA;EACA,cAAA;EACA,UAAA;CDjJD;ACwJD;EACE,kBAAA;CDtJD;ACgKD;;EAEE,qBAAA;CD9JD;ACyKD;;;;EAIE,2BAAA;EACA,gBAAA;CDvKD;AC8KD;;EAEE,gBAAA;CD5KD;ACmLD;;EAEE,UAAA;EACA,WAAA;CDjLD;ACyLD;EACE,oBAAA;CDvLD;ACkMD;;EAEE,+BAAA;EAAA,4BAAA;EAAA,uBAAA;EACA,WAAA;CDhMD;ACyMD;;EAEE,aAAA;CDvMD;AC+MD;EACE,8BAAA;EACA,gCAAA;EAAA,6BAAA;EAAA,wBAAA;CD7MD;ACsND;;EAEE,yBAAA;CDpND;AC2ND;EACE,0BAAA;EACA,cAAA;EACA,+BAAA;CDzND;ACiOD;EACE,UAAA;EACA,WAAA;CD/ND;ACsOD;EACE,eAAA;CDpOD;AC4OD;EACE,kBAAA;CD1OD;ACoPD;EACE,0BAAA;EACA,kBAAA;CDlPD;ACqPD;;EAEE,WAAA;CDnPD;AACD,qFAAqF;AEhLrF;EACE;;;IAGE,uBAAA;IACA,6BAAA;IACA,mCAAA;IACA,oCAAA;IAAA,4BAAA;GFkLD;EE/KD;;IAEE,2BAAA;GFiLD;EE9KD;IACE,6BAAA;GFgLD;EE7KD;IACE,8BAAA;GF+KD;EE1KD;;IAEE,YAAA;GF4KD;EEzKD;;IAEE,uBAAA;IACA,yBAAA;GF2KD;EExKD;IACE,4BAAA;GF0KD;EEvKD;;IAEE,yBAAA;GFyKD;EEtKD;IACE,2BAAA;GFwKD;EErKD;;;IAGE,WAAA;IACA,UAAA;GFuKD;EEpKD;;IAEE,wBAAA;GFsKD;EEhKD;IACE,cAAA;GFkKD;EEhKD;;IAGI,kCAAA;GFiKH;EE9JD;IACE,uBAAA;GFgKD;EE7JD;IACE,qCAAA;GF+JD;EEhKD;;IAKI,kCAAA;GF+JH;EE5JD;;IAGI,kCAAA;GF6JH;CACF;AGnPD;EACE,oCAAA;EACA,sDAAA;EACA,gYAAA;CHqPD;AG7OD;EACE,mBAAA;EACA,SAAA;EACA,sBAAA;EACA,oCAAA;EACA,mBAAA;EACA,iBAAA;EACA,eAAA;EACA,oCAAA;EACA,mCAAA;CH+OD;AG3OmC;EAAW,iBAAA;CH8O9C;AG7OmC;EAAW,iBAAA;CHgP9C;AG9OmC;;EAAW,iBAAA;CHkP9C;AGjPmC;EAAW,iBAAA;CHoP9C;AGnPmC;EAAW,iBAAA;CHsP9C;AGrPmC;EAAW,iBAAA;CHwP9C;AGvPmC;EAAW,iBAAA;CH0P9C;AGzPmC;EAAW,iBAAA;CH4P9C;AG3PmC;EAAW,iBAAA;CH8P9C;AG7PmC;EAAW,iBAAA;CHgQ9C;AG/PmC;EAAW,iBAAA;CHkQ9C;AGjQmC;EAAW,iBAAA;CHoQ9C;AGnQmC;EAAW,iBAAA;CHsQ9C;AGrQmC;EAAW,iBAAA;CHwQ9C;AGvQmC;EAAW,iBAAA;CH0Q9C;AGzQmC;EAAW,iBAAA;CH4Q9C;AG3QmC;EAAW,iBAAA;CH8Q9C;AG7QmC;EAAW,iBAAA;CHgR9C;AG/QmC;EAAW,iBAAA;CHkR9C;AGjRmC;EAAW,iBAAA;CHoR9C;AGnRmC;EAAW,iBAAA;CHsR9C;AGrRmC;EAAW,iBAAA;CHwR9C;AGvRmC;EAAW,iBAAA;CH0R9C;AGzRmC;EAAW,iBAAA;CH4R9C;AG3RmC;EAAW,iBAAA;CH8R9C;AG7RmC;EAAW,iBAAA;CHgS9C;AG/RmC;EAAW,iBAAA;CHkS9C;AGjSmC;EAAW,iBAAA;CHoS9C;AGnSmC;EAAW,iBAAA;CHsS9C;AGrSmC;EAAW,iBAAA;CHwS9C;AGvSmC;EAAW,iBAAA;CH0S9C;AGzSmC;EAAW,iBAAA;CH4S9C;AG3SmC;EAAW,iBAAA;CH8S9C;AG7SmC;EAAW,iBAAA;CHgT9C;AG/SmC;EAAW,iBAAA;CHkT9C;AGjTmC;EAAW,iBAAA;CHoT9C;AGnTmC;EAAW,iBAAA;CHsT9C;AGrTmC;EAAW,iBAAA;CHwT9C;AGvTmC;EAAW,iBAAA;CH0T9C;AGzTmC;EAAW,iBAAA;CH4T9C;AG3TmC;EAAW,iBAAA;CH8T9C;AG7TmC;EAAW,iBAAA;CHgU9C;AG/TmC;EAAW,iBAAA;CHkU9C;AGjUmC;EAAW,iBAAA;CHoU9C;AGnUmC;EAAW,iBAAA;CHsU9C;AGrUmC;EAAW,iBAAA;CHwU9C;AGvUmC;EAAW,iBAAA;CH0U9C;AGzUmC;EAAW,iBAAA;CH4U9C;AG3UmC;EAAW,iBAAA;CH8U9C;AG7UmC;EAAW,iBAAA;CHgV9C;AG/UmC;EAAW,iBAAA;CHkV9C;AGjVmC;EAAW,iBAAA;CHoV9C;AGnVmC;EAAW,iBAAA;CHsV9C;AGrVmC;EAAW,iBAAA;CHwV9C;AGvVmC;EAAW,iBAAA;CH0V9C;AGzVmC;EAAW,iBAAA;CH4V9C;AG3VmC;EAAW,iBAAA;CH8V9C;AG7VmC;EAAW,iBAAA;CHgW9C;AG/VmC;EAAW,iBAAA;CHkW9C;AGjWmC;EAAW,iBAAA;CHoW9C;AGnWmC;EAAW,iBAAA;CHsW9C;AGrWmC;EAAW,iBAAA;CHwW9C;AGvWmC;EAAW,iBAAA;CH0W9C;AGzWmC;EAAW,iBAAA;CH4W9C;AG3WmC;EAAW,iBAAA;CH8W9C;AG7WmC;EAAW,iBAAA;CHgX9C;AG/WmC;EAAW,iBAAA;CHkX9C;AGjXmC;EAAW,iBAAA;CHoX9C;AGnXmC;EAAW,iBAAA;CHsX9C;AGrXmC;EAAW,iBAAA;CHwX9C;AGvXmC;EAAW,iBAAA;CH0X9C;AGzXmC;EAAW,iBAAA;CH4X9C;AG3XmC;EAAW,iBAAA;CH8X9C;AG7XmC;EAAW,iBAAA;CHgY9C;AG/XmC;EAAW,iBAAA;CHkY9C;AGjYmC;EAAW,iBAAA;CHoY9C;AGnYmC;EAAW,iBAAA;CHsY9C;AGrYmC;EAAW,iBAAA;CHwY9C;AGvYmC;EAAW,iBAAA;CH0Y9C;AGzYmC;EAAW,iBAAA;CH4Y9C;AG3YmC;EAAW,iBAAA;CH8Y9C;AG7YmC;EAAW,iBAAA;CHgZ9C;AG/YmC;EAAW,iBAAA;CHkZ9C;AGjZmC;EAAW,iBAAA;CHoZ9C;AGnZmC;EAAW,iBAAA;CHsZ9C;AGrZmC;EAAW,iBAAA;CHwZ9C;AGvZmC;EAAW,iBAAA;CH0Z9C;AGzZmC;EAAW,iBAAA;CH4Z9C;AG3ZmC;EAAW,iBAAA;CH8Z9C;AG7ZmC;EAAW,iBAAA;CHga9C;AG/ZmC;EAAW,iBAAA;CHka9C;AGjamC;EAAW,iBAAA;CHoa9C;AGnamC;EAAW,iBAAA;CHsa9C;AGramC;EAAW,iBAAA;CHwa9C;AGvamC;EAAW,iBAAA;CH0a9C;AGzamC;EAAW,iBAAA;CH4a9C;AG3amC;EAAW,iBAAA;CH8a9C;AG7amC;EAAW,iBAAA;CHgb9C;AG/amC;EAAW,iBAAA;CHkb9C;AGjbmC;EAAW,iBAAA;CHob9C;AGnbmC;EAAW,iBAAA;CHsb9C;AGrbmC;EAAW,iBAAA;CHwb9C;AGvbmC;EAAW,iBAAA;CH0b9C;AGzbmC;EAAW,iBAAA;CH4b9C;AG3bmC;EAAW,iBAAA;CH8b9C;AG7bmC;EAAW,iBAAA;CHgc9C;AG/bmC;EAAW,iBAAA;CHkc9C;AGjcmC;EAAW,iBAAA;CHoc9C;AGncmC;EAAW,iBAAA;CHsc9C;AGrcmC;EAAW,iBAAA;CHwc9C;AGvcmC;EAAW,iBAAA;CH0c9C;AGzcmC;EAAW,iBAAA;CH4c9C;AG3cmC;EAAW,iBAAA;CH8c9C;AG7cmC;EAAW,iBAAA;CHgd9C;AG/cmC;EAAW,iBAAA;CHkd9C;AGjdmC;EAAW,iBAAA;CHod9C;AGndmC;EAAW,iBAAA;CHsd9C;AGrdmC;EAAW,iBAAA;CHwd9C;AGvdmC;EAAW,iBAAA;CH0d9C;AGzdmC;EAAW,iBAAA;CH4d9C;AG3dmC;EAAW,iBAAA;CH8d9C;AG7dmC;EAAW,iBAAA;CHge9C;AG/dmC;EAAW,iBAAA;CHke9C;AGjemC;EAAW,iBAAA;CHoe9C;AGnemC;EAAW,iBAAA;CHse9C;AGremC;EAAW,iBAAA;CHwe9C;AGvemC;EAAW,iBAAA;CH0e9C;AGzemC;EAAW,iBAAA;CH4e9C;AG3emC;EAAW,iBAAA;CH8e9C;AG7emC;EAAW,iBAAA;CHgf9C;AG/emC;EAAW,iBAAA;CHkf9C;AGjfmC;EAAW,iBAAA;CHof9C;AGnfmC;EAAW,iBAAA;CHsf9C;AGrfmC;EAAW,iBAAA;CHwf9C;AGvfmC;EAAW,iBAAA;CH0f9C;AGzfmC;EAAW,iBAAA;CH4f9C;AG3fmC;EAAW,iBAAA;CH8f9C;AG7fmC;EAAW,iBAAA;CHggB9C;AG/fmC;EAAW,iBAAA;CHkgB9C;AGjgBmC;EAAW,iBAAA;CHogB9C;AGngBmC;EAAW,iBAAA;CHsgB9C;AGrgBmC;EAAW,iBAAA;CHwgB9C;AGvgBmC;EAAW,iBAAA;CH0gB9C;AGzgBmC;EAAW,iBAAA;CH4gB9C;AG3gBmC;EAAW,iBAAA;CH8gB9C;AG7gBmC;EAAW,iBAAA;CHghB9C;AG/gBmC;EAAW,iBAAA;CHkhB9C;AGjhBmC;EAAW,iBAAA;CHohB9C;AGnhBmC;EAAW,iBAAA;CHshB9C;AGrhBmC;EAAW,iBAAA;CHwhB9C;AGvhBmC;EAAW,iBAAA;CH0hB9C;AGzhBmC;EAAW,iBAAA;CH4hB9C;AG3hBmC;EAAW,iBAAA;CH8hB9C;AG7hBmC;EAAW,iBAAA;CHgiB9C;AG/hBmC;EAAW,iBAAA;CHkiB9C;AGjiBmC;EAAW,iBAAA;CHoiB9C;AGniBmC;EAAW,iBAAA;CHsiB9C;AGriBmC;EAAW,iBAAA;CHwiB9C;AGviBmC;EAAW,iBAAA;CH0iB9C;AGziBmC;EAAW,iBAAA;CH4iB9C;AG3iBmC;EAAW,iBAAA;CH8iB9C;AG7iBmC;EAAW,iBAAA;CHgjB9C;AG/iBmC;EAAW,iBAAA;CHkjB9C;AGjjBmC;EAAW,iBAAA;CHojB9C;AGnjBmC;EAAW,iBAAA;CHsjB9C;AGrjBmC;EAAW,iBAAA;CHwjB9C;AGvjBmC;EAAW,iBAAA;CH0jB9C;AGzjBmC;EAAW,iBAAA;CH4jB9C;AG3jBmC;EAAW,iBAAA;CH8jB9C;AG7jBmC;EAAW,iBAAA;CHgkB9C;AG/jBmC;EAAW,iBAAA;CHkkB9C;AGjkBmC;EAAW,iBAAA;CHokB9C;AGnkBmC;EAAW,iBAAA;CHskB9C;AGrkBmC;EAAW,iBAAA;CHwkB9C;AGvkBmC;EAAW,iBAAA;CH0kB9C;AGzkBmC;EAAW,iBAAA;CH4kB9C;AG3kBmC;EAAW,iBAAA;CH8kB9C;AG7kBmC;EAAW,iBAAA;CHglB9C;AG/kBmC;EAAW,iBAAA;CHklB9C;AGjlBmC;EAAW,iBAAA;CHolB9C;AGnlBmC;EAAW,iBAAA;CHslB9C;AGrlBmC;EAAW,iBAAA;CHwlB9C;AGvlBmC;EAAW,iBAAA;CH0lB9C;AGzlBmC;EAAW,iBAAA;CH4lB9C;AG3lBmC;EAAW,iBAAA;CH8lB9C;AG7lBmC;EAAW,iBAAA;CHgmB9C;AG/lBmC;EAAW,iBAAA;CHkmB9C;AGjmBmC;EAAW,iBAAA;CHomB9C;AGnmBmC;EAAW,iBAAA;CHsmB9C;AGrmBmC;EAAW,iBAAA;CHwmB9C;AGvmBmC;EAAW,iBAAA;CH0mB9C;AGzmBmC;EAAW,iBAAA;CH4mB9C;AG3mBmC;EAAW,iBAAA;CH8mB9C;AG7mBmC;EAAW,iBAAA;CHgnB9C;AG/mBmC;EAAW,iBAAA;CHknB9C;AGjnBmC;EAAW,iBAAA;CHonB9C;AGnnBmC;EAAW,iBAAA;CHsnB9C;AGrnBmC;EAAW,iBAAA;CHwnB9C;AGvnBmC;EAAW,iBAAA;CH0nB9C;AGznBmC;EAAW,iBAAA;CH4nB9C;AG3nBmC;EAAW,iBAAA;CH8nB9C;AG7nBmC;EAAW,iBAAA;CHgoB9C;AG/nBmC;EAAW,iBAAA;CHkoB9C;AGjoBmC;EAAW,iBAAA;CHooB9C;AGnoBmC;EAAW,iBAAA;CHsoB9C;AGroBmC;EAAW,iBAAA;CHwoB9C;AG/nBmC;EAAW,iBAAA;CHkoB9C;AGjoBmC;EAAW,iBAAA;CHooB9C;AGnoBmC;EAAW,iBAAA;CHsoB9C;AGroBmC;EAAW,iBAAA;CHwoB9C;AGvoBmC;EAAW,iBAAA;CH0oB9C;AGzoBmC;EAAW,iBAAA;CH4oB9C;AG3oBmC;EAAW,iBAAA;CH8oB9C;AG7oBmC;EAAW,iBAAA;CHgpB9C;AG/oBmC;EAAW,iBAAA;CHkpB9C;AGjpBmC;EAAW,iBAAA;CHopB9C;AGnpBmC;EAAW,iBAAA;CHspB9C;AGrpBmC;EAAW,iBAAA;CHwpB9C;AGvpBmC;EAAW,iBAAA;CH0pB9C;AGzpBmC;EAAW,iBAAA;CH4pB9C;AG3pBmC;EAAW,iBAAA;CH8pB9C;AG7pBmC;EAAW,iBAAA;CHgqB9C;AG/pBmC;EAAW,iBAAA;CHkqB9C;AGjqBmC;EAAW,iBAAA;CHoqB9C;AGnqBmC;EAAW,iBAAA;CHsqB9C;AGrqBmC;EAAW,iBAAA;CHwqB9C;AGvqBmC;EAAW,iBAAA;CH0qB9C;AGzqBmC;EAAW,iBAAA;CH4qB9C;AG3qBmC;EAAW,iBAAA;CH8qB9C;AG7qBmC;EAAW,iBAAA;CHgrB9C;AG/qBmC;EAAW,iBAAA;CHkrB9C;AGjrBmC;EAAW,iBAAA;CHorB9C;AGnrBmC;EAAW,iBAAA;CHsrB9C;AGrrBmC;EAAW,iBAAA;CHwrB9C;AGvrBmC;EAAW,iBAAA;CH0rB9C;AGzrBmC;EAAW,iBAAA;CH4rB9C;AG3rBmC;EAAW,iBAAA;CH8rB9C;AG7rBmC;EAAW,iBAAA;CHgsB9C;AG/rBmC;EAAW,iBAAA;CHksB9C;AGjsBmC;EAAW,iBAAA;CHosB9C;AGnsBmC;EAAW,iBAAA;CHssB9C;AGrsBmC;EAAW,iBAAA;CHwsB9C;AGvsBmC;EAAW,iBAAA;CH0sB9C;AGzsBmC;EAAW,iBAAA;CH4sB9C;AG3sBmC;EAAW,iBAAA;CH8sB9C;AG7sBmC;EAAW,iBAAA;CHgtB9C;AG/sBmC;EAAW,iBAAA;CHktB9C;AGjtBmC;EAAW,iBAAA;CHotB9C;AGntBmC;EAAW,iBAAA;CHstB9C;AGrtBmC;EAAW,iBAAA;CHwtB9C;AGvtBmC;EAAW,iBAAA;CH0tB9C;AGztBmC;EAAW,iBAAA;CH4tB9C;AG3tBmC;EAAW,iBAAA;CH8tB9C;AG7tBmC;EAAW,iBAAA;CHguB9C;AG/tBmC;EAAW,iBAAA;CHkuB9C;AGjuBmC;EAAW,iBAAA;CHouB9C;AGnuBmC;EAAW,iBAAA;CHsuB9C;AGruBmC;EAAW,iBAAA;CHwuB9C;AGvuBmC;EAAW,iBAAA;CH0uB9C;AGzuBmC;EAAW,iBAAA;CH4uB9C;AG3uBmC;EAAW,iBAAA;CH8uB9C;AG7uBmC;EAAW,iBAAA;CHgvB9C;AIxhCD;ECkEE,+BAAA;EACG,4BAAA;EACK,uBAAA;CLy9BT;AI1hCD;;EC+DE,+BAAA;EACG,4BAAA;EACK,uBAAA;CL+9BT;AIxhCD;EACE,gBAAA;EACA,8CAAA;CJ0hCD;AIvhCD;EACE,4DAAA;EACA,gBAAA;EACA,wBAAA;EACA,eAAA;EACA,uBAAA;CJyhCD;AIrhCD;;;;EAIE,qBAAA;EACA,mBAAA;EACA,qBAAA;CJuhCD;AIjhCD;EACE,eAAA;EACA,sBAAA;CJmhCD;AIjhCC;;EAEE,eAAA;EACA,2BAAA;CJmhCH;AIhhCC;EEnDA,2CAAA;EACA,qBAAA;CNskCD;AIzgCD;EACE,UAAA;CJ2gCD;AIrgCD;EACE,uBAAA;CJugCD;AIngCD;;;;;EG1EE,eAAA;EACA,gBAAA;EACA,aAAA;CPolCD;AIvgCD;EACE,mBAAA;CJygCD;AIngCD;EACE,aAAA;EACA,wBAAA;EACA,uBAAA;EACA,uBAAA;EACA,mBAAA;EC+FA,yCAAA;EACK,oCAAA;EACG,iCAAA;EE5LR,sBAAA;EACA,gBAAA;EACA,aAAA;CPomCD;AIngCD;EACE,mBAAA;CJqgCD;AI//BD;EACE,iBAAA;EACA,oBAAA;EACA,UAAA;EACA,8BAAA;CJigCD;AIz/BD;EACE,mBAAA;EACA,WAAA;EACA,YAAA;EACA,WAAA;EACA,aAAA;EACA,iBAAA;EACA,uBAAA;EACA,UAAA;CJ2/BD;AIn/BC;;EAEE,iBAAA;EACA,YAAA;EACA,aAAA;EACA,UAAA;EACA,kBAAA;EACA,WAAA;CJq/BH;AI1+BD;EACE,gBAAA;CJ4+BD;AQjoCD;;;;;;;;;;;;EAEE,qBAAA;EACA,iBAAA;EACA,iBAAA;EACA,eAAA;CR6oCD;AQlpCD;;;;;;;;;;;;;;;;;;;;;;;;EASI,iBAAA;EACA,eAAA;EACA,eAAA;CRmqCH;AQ/pCD;;;;;;EAGE,iBAAA;EACA,oBAAA;CRoqCD;AQxqCD;;;;;;;;;;;;EAQI,eAAA;CR8qCH;AQ3qCD;;;;;;EAGE,iBAAA;EACA,oBAAA;CRgrCD;AQprCD;;;;;;;;;;;;EAQI,eAAA;CR0rCH;AQtrCD;;EAAU,gBAAA;CR0rCT;AQzrCD;;EAAU,gBAAA;CR6rCT;AQ5rCD;;EAAU,gBAAA;CRgsCT;AQ/rCD;;EAAU,gBAAA;CRmsCT;AQlsCD;;EAAU,gBAAA;CRssCT;AQrsCD;;EAAU,gBAAA;CRysCT;AQnsCD;EACE,iBAAA;CRqsCD;AQlsCD;EACE,oBAAA;EACA,gBAAA;EACA,iBAAA;EACA,iBAAA;CRosCD;AQlsCC;EAAA;IACE,gBAAA;GRqsCD;CACF;AQ7rCD;;EAEE,eAAA;CR+rCD;AQ5rCD;;EAEE,eAAA;EACA,0BAAA;CR8rCD;AQ1rCD;EAAuB,iBAAA;CR6rCtB;AQ5rCD;EAAuB,kBAAA;CR+rCtB;AQ9rCD;EAAuB,mBAAA;CRisCtB;AQhsCD;EAAuB,oBAAA;CRmsCtB;AQlsCD;EAAuB,oBAAA;CRqsCtB;AQlsCD;EAAuB,0BAAA;CRqsCtB;AQpsCD;EAAuB,0BAAA;CRusCtB;AQtsCD;EAAuB,2BAAA;CRysCtB;AQtsCD;EACE,eAAA;CRwsCD;AQtsCD;ECvGE,eAAA;CTgzCD;AS/yCC;;EAEE,eAAA;CTizCH;AQ1sCD;EC1GE,eAAA;CTuzCD;AStzCC;;EAEE,eAAA;CTwzCH;AQ9sCD;EC7GE,eAAA;CT8zCD;AS7zCC;;EAEE,eAAA;CT+zCH;AQltCD;EChHE,eAAA;CTq0CD;ASp0CC;;EAEE,eAAA;CTs0CH;AQttCD;ECnHE,eAAA;CT40CD;AS30CC;;EAEE,eAAA;CT60CH;AQttCD;EAGE,YAAA;EE7HA,0BAAA;CVo1CD;AUn1CC;;EAEE,0BAAA;CVq1CH;AQxtCD;EEhIE,0BAAA;CV21CD;AU11CC;;EAEE,0BAAA;CV41CH;AQ5tCD;EEnIE,0BAAA;CVk2CD;AUj2CC;;EAEE,0BAAA;CVm2CH;AQhuCD;EEtIE,0BAAA;CVy2CD;AUx2CC;;EAEE,0BAAA;CV02CH;AQpuCD;EEzIE,0BAAA;CVg3CD;AU/2CC;;EAEE,0BAAA;CVi3CH;AQnuCD;EACE,oBAAA;EACA,oBAAA;EACA,iCAAA;CRquCD;AQ7tCD;;EAEE,cAAA;EACA,oBAAA;CR+tCD;AQluCD;;;;EAMI,iBAAA;CRkuCH;AQ3tCD;EACE,gBAAA;EACA,iBAAA;CR6tCD;AQztCD;EALE,gBAAA;EACA,iBAAA;EAMA,kBAAA;CR4tCD;AQ9tCD;EAKI,sBAAA;EACA,mBAAA;EACA,kBAAA;CR4tCH;AQvtCD;EACE,cAAA;EACA,oBAAA;CRytCD;AQvtCD;;EAEE,wBAAA;CRytCD;AQvtCD;EACE,iBAAA;CRytCD;AQvtCD;EACE,eAAA;CRytCD;AQ5sCC;EAAA;IAEI,YAAA;IACA,aAAA;IACA,YAAA;IACA,kBAAA;IGxNJ,iBAAA;IACA,wBAAA;IACA,oBAAA;GXu6CC;EQttCD;IASI,mBAAA;GRgtCH;CACF;AQtsCD;;EAEE,aAAA;CRwsCD;AQrsCD;EACE,eAAA;EA9IqB,0BAAA;CRs1CtB;AQnsCD;EACE,mBAAA;EACA,iBAAA;EACA,kBAAA;EACA,+BAAA;CRqsCD;AQhsCG;;;EACE,iBAAA;CRosCL;AQ9sCD;;;EAmBI,eAAA;EACA,eAAA;EACA,wBAAA;EACA,eAAA;CRgsCH;AQ9rCG;;;EACE,uBAAA;CRksCL;AQ1rCD;;EAEE,oBAAA;EACA,gBAAA;EACA,kBAAA;EACA,gCAAA;EACA,eAAA;CR4rCD;AQtrCG;;;;;;EAAW,YAAA;CR8rCd;AQ7rCG;;;;;;EACE,uBAAA;CRosCL;AQ9rCD;EACE,oBAAA;EACA,mBAAA;EACA,wBAAA;CRgsCD;AYx+CD;;;;EAIE,+DAAA;CZ0+CD;AYt+CD;EACE,iBAAA;EACA,eAAA;EACA,eAAA;EACA,0BAAA;EACA,mBAAA;CZw+CD;AYp+CD;EACE,iBAAA;EACA,eAAA;EACA,YAAA;EACA,uBAAA;EACA,mBAAA;EACA,uDAAA;EAAA,+CAAA;CZs+CD;AY5+CD;EASI,WAAA;EACA,gBAAA;EACA,iBAAA;EACA,yBAAA;EAAA,iBAAA;CZs+CH;AYj+CD;EACE,eAAA;EACA,eAAA;EACA,iBAAA;EACA,gBAAA;EACA,wBAAA;EACA,eAAA;EACA,sBAAA;EACA,sBAAA;EACA,0BAAA;EACA,uBAAA;EACA,mBAAA;CZm+CD;AY9+CD;EAeI,WAAA;EACA,mBAAA;EACA,eAAA;EACA,sBAAA;EACA,8BAAA;EACA,iBAAA;CZk+CH;AY79CD;EACE,kBAAA;EACA,mBAAA;CZ+9CD;AazhDD;ECHE,oBAAA;EACA,mBAAA;EACA,mBAAA;EACA,kBAAA;Cd+hDD;Aa5hDC;EAAA;IACE,aAAA;Gb+hDD;CACF;Aa9hDC;EAAA;IACE,aAAA;GbiiDD;CACF;AahiDC;EAAA;IACE,cAAA;GbmiDD;CACF;Aa1hDD;ECvBE,oBAAA;EACA,mBAAA;EACA,mBAAA;EACA,kBAAA;CdojDD;AavhDD;ECvBE,oBAAA;EACA,mBAAA;CdijDD;AavhDD;EACE,gBAAA;EACA,eAAA;CbyhDD;Aa3hDD;EAKI,iBAAA;EACA,gBAAA;CbyhDH;AczkDA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ECiBK,mBAAA;EAEA,gBAAA;EAEA,oBAAA;EACA,mBAAA;CfwmDL;Ac9nDA;;;;;;;;;;;;ECuCK,YAAA;CfqmDL;Ac5oDA;EC+CG,YAAA;CfgmDH;Ac/oDA;EC+CG,oBAAA;CfmmDH;AclpDA;EC+CG,oBAAA;CfsmDH;AcrpDA;EC+CG,WAAA;CfymDH;AcxpDA;EC+CG,oBAAA;Cf4mDH;Ac3pDA;EC+CG,oBAAA;Cf+mDH;Ac9pDA;EC+CG,WAAA;CfknDH;AcjqDA;EC+CG,oBAAA;CfqnDH;AcpqDA;EC+CG,oBAAA;CfwnDH;AcvqDA;EC+CG,WAAA;Cf2nDH;Ac1qDA;EC+CG,oBAAA;Cf8nDH;Ac7qDA;EC+CG,mBAAA;CfioDH;AchrDA;EC8DG,YAAA;CfqnDH;AcnrDA;EC8DG,oBAAA;CfwnDH;ActrDA;EC8DG,oBAAA;Cf2nDH;AczrDA;EC8DG,WAAA;Cf8nDH;Ac5rDA;EC8DG,oBAAA;CfioDH;Ac/rDA;EC8DG,oBAAA;CfooDH;AclsDA;EC8DG,WAAA;CfuoDH;AcrsDA;EC8DG,oBAAA;Cf0oDH;AcxsDA;EC8DG,oBAAA;Cf6oDH;Ac3sDA;EC8DG,WAAA;CfgpDH;Ac9sDA;EC8DG,oBAAA;CfmpDH;AcjtDA;EC8DG,mBAAA;CfspDH;AcptDA;ECmEG,YAAA;CfopDH;AcvtDA;ECoDG,WAAA;CfsqDH;Ac1tDA;ECoDG,mBAAA;CfyqDH;Ac7tDA;ECoDG,mBAAA;Cf4qDH;AchuDA;ECoDG,UAAA;Cf+qDH;AcnuDA;ECoDG,mBAAA;CfkrDH;ActuDA;ECoDG,mBAAA;CfqrDH;AczuDA;ECoDG,UAAA;CfwrDH;Ac5uDA;ECoDG,mBAAA;Cf2rDH;Ac/uDA;ECoDG,mBAAA;Cf8rDH;AclvDA;ECoDG,UAAA;CfisDH;AcrvDA;ECoDG,mBAAA;CfosDH;AcxvDA;ECoDG,kBAAA;CfusDH;Ac3vDA;ECyDG,WAAA;CfqsDH;Ac9vDA;ECwEG,kBAAA;CfyrDH;AcjwDA;ECwEG,0BAAA;Cf4rDH;AcpwDA;ECwEG,0BAAA;Cf+rDH;AcvwDA;ECwEG,iBAAA;CfksDH;Ac1wDA;ECwEG,0BAAA;CfqsDH;Ac7wDA;ECwEG,0BAAA;CfwsDH;AchxDA;ECwEG,iBAAA;Cf2sDH;AcnxDA;ECwEG,0BAAA;Cf8sDH;ActxDA;ECwEG,0BAAA;CfitDH;AczxDA;ECwEG,iBAAA;CfotDH;Ac5xDA;ECwEG,0BAAA;CfutDH;Ac/xDA;ECwEG,yBAAA;Cf0tDH;AclyDA;ECwEG,gBAAA;Cf6tDH;Aa5tDD;ECzEC;;;;;;;;;;;;ICuCK,YAAA;Gf6wDH;EcpzDF;IC+CG,YAAA;GfwwDD;EcvzDF;IC+CG,oBAAA;Gf2wDD;Ec1zDF;IC+CG,oBAAA;Gf8wDD;Ec7zDF;IC+CG,WAAA;GfixDD;Ech0DF;IC+CG,oBAAA;GfoxDD;Ecn0DF;IC+CG,oBAAA;GfuxDD;Ect0DF;IC+CG,WAAA;Gf0xDD;Ecz0DF;IC+CG,oBAAA;Gf6xDD;Ec50DF;IC+CG,oBAAA;GfgyDD;Ec/0DF;IC+CG,WAAA;GfmyDD;Ecl1DF;IC+CG,oBAAA;GfsyDD;Ecr1DF;IC+CG,mBAAA;GfyyDD;Ecx1DF;IC8DG,YAAA;Gf6xDD;Ec31DF;IC8DG,oBAAA;GfgyDD;Ec91DF;IC8DG,oBAAA;GfmyDD;Ecj2DF;IC8DG,WAAA;GfsyDD;Ecp2DF;IC8DG,oBAAA;GfyyDD;Ecv2DF;IC8DG,oBAAA;Gf4yDD;Ec12DF;IC8DG,WAAA;Gf+yDD;Ec72DF;IC8DG,oBAAA;GfkzDD;Ech3DF;IC8DG,oBAAA;GfqzDD;Ecn3DF;IC8DG,WAAA;GfwzDD;Ect3DF;IC8DG,oBAAA;Gf2zDD;Ecz3DF;IC8DG,mBAAA;Gf8zDD;Ec53DF;ICmEG,YAAA;Gf4zDD;Ec/3DF;ICoDG,WAAA;Gf80DD;Ecl4DF;ICoDG,mBAAA;Gfi1DD;Ecr4DF;ICoDG,mBAAA;Gfo1DD;Ecx4DF;ICoDG,UAAA;Gfu1DD;Ec34DF;ICoDG,mBAAA;Gf01DD;Ec94DF;ICoDG,mBAAA;Gf61DD;Ecj5DF;ICoDG,UAAA;Gfg2DD;Ecp5DF;ICoDG,mBAAA;Gfm2DD;Ecv5DF;ICoDG,mBAAA;Gfs2DD;Ec15DF;ICoDG,UAAA;Gfy2DD;Ec75DF;ICoDG,mBAAA;Gf42DD;Ech6DF;ICoDG,kBAAA;Gf+2DD;Ecn6DF;ICyDG,WAAA;Gf62DD;Ect6DF;ICwEG,kBAAA;Gfi2DD;Ecz6DF;ICwEG,0BAAA;Gfo2DD;Ec56DF;ICwEG,0BAAA;Gfu2DD;Ec/6DF;ICwEG,iBAAA;Gf02DD;Ecl7DF;ICwEG,0BAAA;Gf62DD;Ecr7DF;ICwEG,0BAAA;Gfg3DD;Ecx7DF;ICwEG,iBAAA;Gfm3DD;Ec37DF;ICwEG,0BAAA;Gfs3DD;Ec97DF;ICwEG,0BAAA;Gfy3DD;Ecj8DF;ICwEG,iBAAA;Gf43DD;Ecp8DF;ICwEG,0BAAA;Gf+3DD;Ecv8DF;ICwEG,yBAAA;Gfk4DD;Ec18DF;ICwEG,gBAAA;Gfq4DD;CACF;Aa53DD;EClFC;;;;;;;;;;;;ICuCK,YAAA;Gfs7DH;Ec79DF;IC+CG,YAAA;Gfi7DD;Ech+DF;IC+CG,oBAAA;Gfo7DD;Ecn+DF;IC+CG,oBAAA;Gfu7DD;Ect+DF;IC+CG,WAAA;Gf07DD;Ecz+DF;IC+CG,oBAAA;Gf67DD;Ec5+DF;IC+CG,oBAAA;Gfg8DD;Ec/+DF;IC+CG,WAAA;Gfm8DD;Ecl/DF;IC+CG,oBAAA;Gfs8DD;Ecr/DF;IC+CG,oBAAA;Gfy8DD;Ecx/DF;IC+CG,WAAA;Gf48DD;Ec3/DF;IC+CG,oBAAA;Gf+8DD;Ec9/DF;IC+CG,mBAAA;Gfk9DD;EcjgEF;IC8DG,YAAA;Gfs8DD;EcpgEF;IC8DG,oBAAA;Gfy8DD;EcvgEF;IC8DG,oBAAA;Gf48DD;Ec1gEF;IC8DG,WAAA;Gf+8DD;Ec7gEF;IC8DG,oBAAA;Gfk9DD;EchhEF;IC8DG,oBAAA;Gfq9DD;EcnhEF;IC8DG,WAAA;Gfw9DD;EcthEF;IC8DG,oBAAA;Gf29DD;EczhEF;IC8DG,oBAAA;Gf89DD;Ec5hEF;IC8DG,WAAA;Gfi+DD;Ec/hEF;IC8DG,oBAAA;Gfo+DD;EcliEF;IC8DG,mBAAA;Gfu+DD;EcriEF;ICmEG,YAAA;Gfq+DD;EcxiEF;ICoDG,WAAA;Gfu/DD;Ec3iEF;ICoDG,mBAAA;Gf0/DD;Ec9iEF;ICoDG,mBAAA;Gf6/DD;EcjjEF;ICoDG,UAAA;GfggED;EcpjEF;ICoDG,mBAAA;GfmgED;EcvjEF;ICoDG,mBAAA;GfsgED;Ec1jEF;ICoDG,UAAA;GfygED;Ec7jEF;ICoDG,mBAAA;Gf4gED;EchkEF;ICoDG,mBAAA;Gf+gED;EcnkEF;ICoDG,UAAA;GfkhED;EctkEF;ICoDG,mBAAA;GfqhED;EczkEF;ICoDG,kBAAA;GfwhED;Ec5kEF;ICyDG,WAAA;GfshED;Ec/kEF;ICwEG,kBAAA;Gf0gED;EcllEF;ICwEG,0BAAA;Gf6gED;EcrlEF;ICwEG,0BAAA;GfghED;EcxlEF;ICwEG,iBAAA;GfmhED;Ec3lEF;ICwEG,0BAAA;GfshED;Ec9lEF;ICwEG,0BAAA;GfyhED;EcjmEF;ICwEG,iBAAA;Gf4hED;EcpmEF;ICwEG,0BAAA;Gf+hED;EcvmEF;ICwEG,0BAAA;GfkiED;Ec1mEF;ICwEG,iBAAA;GfqiED;Ec7mEF;ICwEG,0BAAA;GfwiED;EchnEF;ICwEG,yBAAA;Gf2iED;EcnnEF;ICwEG,gBAAA;Gf8iED;CACF;Aa5hED;EC3FC;;;;;;;;;;;;ICuCK,YAAA;Gf+lEH;EctoEF;IC+CG,YAAA;Gf0lED;EczoEF;IC+CG,oBAAA;Gf6lED;Ec5oEF;IC+CG,oBAAA;GfgmED;Ec/oEF;IC+CG,WAAA;GfmmED;EclpEF;IC+CG,oBAAA;GfsmED;EcrpEF;IC+CG,oBAAA;GfymED;EcxpEF;IC+CG,WAAA;Gf4mED;Ec3pEF;IC+CG,oBAAA;Gf+mED;Ec9pEF;IC+CG,oBAAA;GfknED;EcjqEF;IC+CG,WAAA;GfqnED;EcpqEF;IC+CG,oBAAA;GfwnED;EcvqEF;IC+CG,mBAAA;Gf2nED;Ec1qEF;IC8DG,YAAA;Gf+mED;Ec7qEF;IC8DG,oBAAA;GfknED;EchrEF;IC8DG,oBAAA;GfqnED;EcnrEF;IC8DG,WAAA;GfwnED;EctrEF;IC8DG,oBAAA;Gf2nED;EczrEF;IC8DG,oBAAA;Gf8nED;Ec5rEF;IC8DG,WAAA;GfioED;Ec/rEF;IC8DG,oBAAA;GfooED;EclsEF;IC8DG,oBAAA;GfuoED;EcrsEF;IC8DG,WAAA;Gf0oED;EcxsEF;IC8DG,oBAAA;Gf6oED;Ec3sEF;IC8DG,mBAAA;GfgpED;Ec9sEF;ICmEG,YAAA;Gf8oED;EcjtEF;ICoDG,WAAA;GfgqED;EcptEF;ICoDG,mBAAA;GfmqED;EcvtEF;ICoDG,mBAAA;GfsqED;Ec1tEF;ICoDG,UAAA;GfyqED;Ec7tEF;ICoDG,mBAAA;Gf4qED;EchuEF;ICoDG,mBAAA;Gf+qED;EcnuEF;ICoDG,UAAA;GfkrED;EctuEF;ICoDG,mBAAA;GfqrED;EczuEF;ICoDG,mBAAA;GfwrED;Ec5uEF;ICoDG,UAAA;Gf2rED;Ec/uEF;ICoDG,mBAAA;Gf8rED;EclvEF;ICoDG,kBAAA;GfisED;EcrvEF;ICyDG,WAAA;Gf+rED;EcxvEF;ICwEG,kBAAA;GfmrED;Ec3vEF;ICwEG,0BAAA;GfsrED;Ec9vEF;ICwEG,0BAAA;GfyrED;EcjwEF;ICwEG,iBAAA;Gf4rED;EcpwEF;ICwEG,0BAAA;Gf+rED;EcvwEF;ICwEG,0BAAA;GfksED;Ec1wEF;ICwEG,iBAAA;GfqsED;Ec7wEF;ICwEG,0BAAA;GfwsED;EchxEF;ICwEG,0BAAA;Gf2sED;EcnxEF;ICwEG,iBAAA;Gf8sED;EctxEF;ICwEG,0BAAA;GfitED;EczxEF;ICwEG,yBAAA;GfotED;Ec5xEF;ICwEG,gBAAA;GfutED;CACF;AgBzxED;EACE,8BAAA;ChB2xED;AgB5xED;EAQI,iBAAA;EACA,sBAAA;EACA,YAAA;ChBuxEH;AgBlxEG;;EACE,iBAAA;EACA,oBAAA;EACA,YAAA;ChBqxEL;AgBhxED;EACE,iBAAA;EACA,oBAAA;EACA,eAAA;EACA,iBAAA;ChBkxED;AgB/wED;EACE,iBAAA;ChBixED;AgB3wED;EACE,YAAA;EACA,gBAAA;EACA,oBAAA;ChB6wED;AgBhxED;;;;;;EAWQ,aAAA;EACA,wBAAA;EACA,oBAAA;EACA,2BAAA;ChB6wEP;AgB3xED;EAoBI,uBAAA;EACA,8BAAA;ChB0wEH;AgB/xED;;;;;;EA8BQ,cAAA;ChBywEP;AgBvyED;EAoCI,2BAAA;ChBswEH;AgB1yED;EAyCI,uBAAA;ChBowEH;AgB7vED;;;;;;EAOQ,aAAA;ChB8vEP;AgBnvED;EACE,uBAAA;ChBqvED;AgBtvED;;;;;;EAQQ,uBAAA;ChBsvEP;AgB9vED;;EAeM,yBAAA;ChBmvEL;AgBzuED;EAEI,0BAAA;ChB0uEH;AgBjuED;EAEI,0BAAA;ChBkuEH;AiBj3EC;;;;;;;;;;;;EAOI,0BAAA;CjBw3EL;AiBl3EC;;;;;EAMI,0BAAA;CjBm3EL;AiBt4EC;;;;;;;;;;;;EAOI,0BAAA;CjB64EL;AiBv4EC;;;;;EAMI,0BAAA;CjBw4EL;AiB35EC;;;;;;;;;;;;EAOI,0BAAA;CjBk6EL;AiB55EC;;;;;EAMI,0BAAA;CjB65EL;AiBh7EC;;;;;;;;;;;;EAOI,0BAAA;CjBu7EL;AiBj7EC;;;;;EAMI,0BAAA;CjBk7EL;AiBr8EC;;;;;;;;;;;;EAOI,0BAAA;CjB48EL;AiBt8EC;;;;;EAMI,0BAAA;CjBu8EL;AgBnzED;EACE,kBAAA;EACA,iBAAA;ChBqzED;AgBnzEC;EAAA;IACE,YAAA;IACA,oBAAA;IACA,mBAAA;IACA,6CAAA;IACA,uBAAA;GhBszED;EgB3zED;IASI,iBAAA;GhBqzEH;EgB9zED;;;;;;IAkBU,oBAAA;GhBozET;EgBt0ED;IA0BI,UAAA;GhB+yEH;EgBz0ED;;;;;;IAmCU,eAAA;GhB8yET;EgBj1ED;;;;;;IAuCU,gBAAA;GhBkzET;EgBz1ED;;;;IAoDU,iBAAA;GhB2yET;CACF;AkBrgFD;EAIE,aAAA;EACA,WAAA;EACA,UAAA;EACA,UAAA;ClBogFD;AkBjgFD;EACE,eAAA;EACA,YAAA;EACA,WAAA;EACA,oBAAA;EACA,gBAAA;EACA,qBAAA;EACA,eAAA;EACA,UAAA;EACA,iCAAA;ClBmgFD;AkBhgFD;EACE,sBAAA;EACA,gBAAA;EACA,mBAAA;EACA,iBAAA;ClBkgFD;AkBx/ED;Eb6BE,+BAAA;EACG,4BAAA;EACK,uBAAA;EarBR,yBAAA;EACA,sBAAA;EAAA,iBAAA;ClBo/ED;AkBh/ED;;EAEE,gBAAA;EACA,mBAAA;EACA,oBAAA;ClBk/ED;AkB5+EC;;;;;;EAGE,oBAAA;ClBi/EH;AkB7+ED;EACE,eAAA;ClB++ED;AkB3+ED;EACE,eAAA;EACA,YAAA;ClB6+ED;AkBz+ED;;EAEE,aAAA;ClB2+ED;AkBv+ED;;;EZ1FE,2CAAA;EACA,qBAAA;CNskFD;AkBt+ED;EACE,eAAA;EACA,iBAAA;EACA,gBAAA;EACA,wBAAA;EACA,eAAA;ClBw+ED;AkB98ED;EACE,eAAA;EACA,YAAA;EACA,aAAA;EACA,kBAAA;EACA,gBAAA;EACA,wBAAA;EACA,eAAA;EACA,uBAAA;EACA,uBAAA;EACA,uBAAA;EACA,mBAAA;Eb3EA,yDAAA;EACQ,iDAAA;EAyHR,+EAAA;EACK,0EAAA;EACG,uFAAA;EAAA,+EAAA;EAAA,uEAAA;EAAA,4GAAA;CLo6ET;AmB9iFC;EACE,sBAAA;EACA,WAAA;EdYF,0FAAA;EACQ,kFAAA;CLqiFT;AKpgFC;EACE,YAAA;EACA,WAAA;CLsgFH;AKpgFC;EAA0B,YAAA;CLugF3B;AKtgFC;EAAgC,YAAA;CLygFjC;AkB19EC;EACE,8BAAA;EACA,UAAA;ClB49EH;AkBp9EC;;;EAGE,0BAAA;EACA,WAAA;ClBs9EH;AkBn9EC;;EAEE,oBAAA;ClBq9EH;AkBj9EC;EACE,aAAA;ClBm9EH;AkBr8ED;EAKI;;;;IACE,kBAAA;GlBs8EH;EkBn8EC;;;;;;;;IAEE,kBAAA;GlB28EH;EkBx8EC;;;;;;;;IAEE,kBAAA;GlBg9EH;CACF;AkBt8ED;EACE,oBAAA;ClBw8ED;AkBh8ED;;EAEE,mBAAA;EACA,eAAA;EACA,iBAAA;EACA,oBAAA;ClBk8ED;AkB/7EC;;;;EAGI,oBAAA;ClBk8EL;AkB78ED;;EAgBI,iBAAA;EACA,mBAAA;EACA,iBAAA;EACA,iBAAA;EACA,gBAAA;ClBi8EH;AkB97ED;;;;EAIE,mBAAA;EACA,mBAAA;EACA,mBAAA;ClBg8ED;AkB77ED;;EAEE,iBAAA;ClB+7ED;AkB37ED;;EAEE,mBAAA;EACA,sBAAA;EACA,mBAAA;EACA,iBAAA;EACA,iBAAA;EACA,uBAAA;EACA,gBAAA;ClB67ED;AkB17EC;;;;EAEE,oBAAA;ClB87EH;AkB37ED;;EAEE,cAAA;EACA,kBAAA;ClB67ED;AkBp7ED;EACE,iBAAA;EAEA,iBAAA;EACA,oBAAA;EAEA,iBAAA;ClBo7ED;AkBl7EC;;EAEE,iBAAA;EACA,gBAAA;ClBo7EH;AkBv6ED;EC3PE,aAAA;EACA,kBAAA;EACA,gBAAA;EACA,iBAAA;EACA,mBAAA;CnBqqFD;AmBnqFC;EACE,aAAA;EACA,kBAAA;CnBqqFH;AmBlqFC;;EAEE,aAAA;CnBoqFH;AkBn7ED;EAEI,aAAA;EACA,kBAAA;EACA,gBAAA;EACA,iBAAA;EACA,mBAAA;ClBo7EH;AkB17ED;EASI,aAAA;EACA,kBAAA;ClBo7EH;AkB97ED;;EAcI,aAAA;ClBo7EH;AkBl8ED;EAiBI,aAAA;EACA,iBAAA;EACA,kBAAA;EACA,gBAAA;EACA,iBAAA;ClBo7EH;AkBh7ED;ECvRE,aAAA;EACA,mBAAA;EACA,gBAAA;EACA,uBAAA;EACA,mBAAA;CnB0sFD;AmBxsFC;EACE,aAAA;EACA,kBAAA;CnB0sFH;AmBvsFC;;EAEE,aAAA;CnBysFH;AkB57ED;EAEI,aAAA;EACA,mBAAA;EACA,gBAAA;EACA,uBAAA;EACA,mBAAA;ClB67EH;AkBn8ED;EASI,aAAA;EACA,kBAAA;ClB67EH;AkBv8ED;;EAcI,aAAA;ClB67EH;AkB38ED;EAiBI,aAAA;EACA,iBAAA;EACA,mBAAA;EACA,gBAAA;EACA,uBAAA;ClB67EH;AkBp7ED;EAEE,mBAAA;ClBq7ED;AkBv7ED;EAMI,sBAAA;ClBo7EH;AkBh7ED;EACE,mBAAA;EACA,OAAA;EACA,SAAA;EACA,WAAA;EACA,eAAA;EACA,YAAA;EACA,aAAA;EACA,kBAAA;EACA,mBAAA;EACA,qBAAA;ClBk7ED;AkBh7ED;;;EAGE,YAAA;EACA,aAAA;EACA,kBAAA;ClBk7ED;AkBh7ED;;;EAGE,YAAA;EACA,aAAA;EACA,kBAAA;ClBk7ED;AkB96ED;;;;;;;;;;EClZI,eAAA;CnB40FH;AkB17ED;EC9YI,sBAAA;EdiDF,yDAAA;EACQ,iDAAA;CL2xFT;AmB30FG;EACE,sBAAA;Ed8CJ,0EAAA;EACQ,kEAAA;CLgyFT;AkBp8ED;ECpYI,eAAA;EACA,0BAAA;EACA,sBAAA;CnB20FH;AkBz8ED;EC9XI,eAAA;CnB00FH;AkBz8ED;;;;;;;;;;ECrZI,eAAA;CnB02FH;AkBr9ED;ECjZI,sBAAA;EdiDF,yDAAA;EACQ,iDAAA;CLyzFT;AmBz2FG;EACE,sBAAA;Ed8CJ,0EAAA;EACQ,kEAAA;CL8zFT;AkB/9ED;ECvYI,eAAA;EACA,0BAAA;EACA,sBAAA;CnBy2FH;AkBp+ED;ECjYI,eAAA;CnBw2FH;AkBp+ED;;;;;;;;;;ECxZI,eAAA;CnBw4FH;AkBh/ED;ECpZI,sBAAA;EdiDF,yDAAA;EACQ,iDAAA;CLu1FT;AmBv4FG;EACE,sBAAA;Ed8CJ,0EAAA;EACQ,kEAAA;CL41FT;AkB1/ED;EC1YI,eAAA;EACA,0BAAA;EACA,sBAAA;CnBu4FH;AkB//ED;ECpYI,eAAA;CnBs4FH;AkB3/EC;EACE,UAAA;ClB6/EH;AkB3/EC;EACE,OAAA;ClB6/EH;AkBn/ED;EACE,eAAA;EACA,gBAAA;EACA,oBAAA;EACA,eAAA;ClBq/ED;AkBn+EC;EAAA;IAGI,sBAAA;IACA,iBAAA;IACA,uBAAA;GlBo+EH;EkBz+ED;IAUI,sBAAA;IACA,YAAA;IACA,uBAAA;GlBk+EH;EkB9+ED;IAiBI,sBAAA;GlBg+EH;EkBj/ED;IAqBI,sBAAA;IACA,uBAAA;GlB+9EH;EkBr/ED;;;IA2BM,YAAA;GlB+9EL;EkB1/ED;IAiCI,YAAA;GlB49EH;EkB7/ED;IAqCI,iBAAA;IACA,uBAAA;GlB29EH;EkBjgFD;;IA6CI,sBAAA;IACA,cAAA;IACA,iBAAA;IACA,uBAAA;GlBw9EH;EkBxgFD;;IAmDM,gBAAA;GlBy9EL;EkB5gFD;;IAwDI,mBAAA;IACA,eAAA;GlBw9EH;EkBjhFD;IA8DI,OAAA;GlBs9EH;CACF;AkB58ED;;;;EASI,iBAAA;EACA,cAAA;EACA,iBAAA;ClBy8EH;AkBp9ED;;EAiBI,iBAAA;ClBu8EH;AkBx9ED;EJ9gBE,oBAAA;EACA,mBAAA;Cdy+FD;AkBj8EC;EAAA;IAEI,iBAAA;IACA,iBAAA;IACA,kBAAA;GlBm8EH;CACF;AkBn+ED;EAwCI,YAAA;ClB87EH;AkBt7EG;EAAA;IAEI,kBAAA;IACA,gBAAA;GlBw7EL;CACF;AkBp7EG;EAAA;IAEI,iBAAA;IACA,gBAAA;GlBs7EL;CACF;AoBrgGD;EACE,sBAAA;EACA,iBAAA;EACA,oBAAA;EACA,mBAAA;EACA,oBAAA;EACA,uBAAA;EACA,+BAAA;EAAA,2BAAA;EACA,gBAAA;EACA,uBAAA;EACA,8BAAA;ECoCA,kBAAA;EACA,gBAAA;EACA,wBAAA;EACA,mBAAA;EhBqKA,0BAAA;EACG,uBAAA;EACC,sBAAA;EACI,kBAAA;CLg0FT;AoBxgGG;;;;;;EdrBF,2CAAA;EACA,qBAAA;CNqiGD;AoB3gGC;;;EAGE,YAAA;EACA,sBAAA;CpB6gGH;AoB1gGC;;EAEE,uBAAA;EACA,WAAA;Ef2BF,yDAAA;EACQ,iDAAA;CLk/FT;AoB1gGC;;;EAGE,oBAAA;EE9CF,0BAAA;EACA,cAAA;EjBiEA,yBAAA;EACQ,iBAAA;CL2/FT;AoB1gGG;;EAEE,qBAAA;CpB4gGL;AoBngGD;EC7DE,YAAA;EACA,uBAAA;EACA,mBAAA;CrBmkGD;AqBjkGC;;EAEE,YAAA;EACA,0BAAA;EACA,sBAAA;CrBmkGH;AqBjkGC;EACE,YAAA;EACA,0BAAA;EACA,sBAAA;CrBmkGH;AqBjkGC;;;EAGE,YAAA;EACA,0BAAA;EACA,uBAAA;EACA,sBAAA;CrBmkGH;AqBjkGG;;;;;;;;;EAGE,YAAA;EACA,0BAAA;EACA,sBAAA;CrBykGL;AqBnkGG;;;;;;;;;EAGE,uBAAA;EACA,mBAAA;CrB2kGL;AoBpjGD;EClBI,YAAA;EACA,uBAAA;CrBykGH;AoBrjGD;EChEE,YAAA;EACA,0BAAA;EACA,sBAAA;CrBwnGD;AqBtnGC;;EAEE,YAAA;EACA,0BAAA;EACA,sBAAA;CrBwnGH;AqBtnGC;EACE,YAAA;EACA,0BAAA;EACA,sBAAA;CrBwnGH;AqBtnGC;;;EAGE,YAAA;EACA,0BAAA;EACA,uBAAA;EACA,sBAAA;CrBwnGH;AqBtnGG;;;;;;;;;EAGE,YAAA;EACA,0BAAA;EACA,sBAAA;CrB8nGL;AqBxnGG;;;;;;;;;EAGE,0BAAA;EACA,sBAAA;CrBgoGL;AoBtmGD;ECrBI,eAAA;EACA,uBAAA;CrB8nGH;AoBtmGD;ECpEE,YAAA;EACA,0BAAA;EACA,sBAAA;CrB6qGD;AqB3qGC;;EAEE,YAAA;EACA,0BAAA;EACA,sBAAA;CrB6qGH;AqB3qGC;EACE,YAAA;EACA,0BAAA;EACA,sBAAA;CrB6qGH;AqB3qGC;;;EAGE,YAAA;EACA,0BAAA;EACA,uBAAA;EACA,sBAAA;CrB6qGH;AqB3qGG;;;;;;;;;EAGE,YAAA;EACA,0BAAA;EACA,sBAAA;CrBmrGL;AqB7qGG;;;;;;;;;EAGE,0BAAA;EACA,sBAAA;CrBqrGL;AoBvpGD;ECzBI,eAAA;EACA,uBAAA;CrBmrGH;AoBvpGD;ECxEE,YAAA;EACA,0BAAA;EACA,sBAAA;CrBkuGD;AqBhuGC;;EAEE,YAAA;EACA,0BAAA;EACA,sBAAA;CrBkuGH;AqBhuGC;EACE,YAAA;EACA,0BAAA;EACA,sBAAA;CrBkuGH;AqBhuGC;;;EAGE,YAAA;EACA,0BAAA;EACA,uBAAA;EACA,sBAAA;CrBkuGH;AqBhuGG;;;;;;;;;EAGE,YAAA;EACA,0BAAA;EACA,sBAAA;CrBwuGL;AqBluGG;;;;;;;;;EAGE,0BAAA;EACA,sBAAA;CrB0uGL;AoBxsGD;EC7BI,eAAA;EACA,uBAAA;CrBwuGH;AoBxsGD;EC5EE,YAAA;EACA,0BAAA;EACA,sBAAA;CrBuxGD;AqBrxGC;;EAEE,YAAA;EACA,0BAAA;EACA,sBAAA;CrBuxGH;AqBrxGC;EACE,YAAA;EACA,0BAAA;EACA,sBAAA;CrBuxGH;AqBrxGC;;;EAGE,YAAA;EACA,0BAAA;EACA,uBAAA;EACA,sBAAA;CrBuxGH;AqBrxGG;;;;;;;;;EAGE,YAAA;EACA,0BAAA;EACA,sBAAA;CrB6xGL;AqBvxGG;;;;;;;;;EAGE,0BAAA;EACA,sBAAA;CrB+xGL;AoBzvGD;ECjCI,eAAA;EACA,uBAAA;CrB6xGH;AoBzvGD;EChFE,YAAA;EACA,0BAAA;EACA,sBAAA;CrB40GD;AqB10GC;;EAEE,YAAA;EACA,0BAAA;EACA,sBAAA;CrB40GH;AqB10GC;EACE,YAAA;EACA,0BAAA;EACA,sBAAA;CrB40GH;AqB10GC;;;EAGE,YAAA;EACA,0BAAA;EACA,uBAAA;EACA,sBAAA;CrB40GH;AqB10GG;;;;;;;;;EAGE,YAAA;EACA,0BAAA;EACA,sBAAA;CrBk1GL;AqB50GG;;;;;;;;;EAGE,0BAAA;EACA,sBAAA;CrBo1GL;AoB1yGD;ECrCI,eAAA;EACA,uBAAA;CrBk1GH;AoBryGD;EACE,iBAAA;EACA,eAAA;EACA,iBAAA;CpBuyGD;AoBryGC;;;;;EAKE,8BAAA;EfnCF,yBAAA;EACQ,iBAAA;CL20GT;AoBtyGC;;;;EAIE,0BAAA;CpBwyGH;AoBtyGC;;EAEE,eAAA;EACA,2BAAA;EACA,8BAAA;CpBwyGH;AoBpyGG;;;;EAEE,eAAA;EACA,sBAAA;CpBwyGL;AoB/xGD;;EC9EE,mBAAA;EACA,gBAAA;EACA,uBAAA;EACA,mBAAA;CrBi3GD;AoBlyGD;;EClFE,kBAAA;EACA,gBAAA;EACA,iBAAA;EACA,mBAAA;CrBw3GD;AoBryGD;;ECtFE,iBAAA;EACA,gBAAA;EACA,iBAAA;EACA,mBAAA;CrB+3GD;AoBpyGD;EACE,eAAA;EACA,YAAA;CpBsyGD;AoBlyGD;EACE,gBAAA;CpBoyGD;AoB7xGC;;;EACE,YAAA;CpBiyGH;AuB37GD;EACE,WAAA;ElBoLA,yCAAA;EACK,oCAAA;EACG,iCAAA;CL0wGT;AuB77GC;EACE,WAAA;CvB+7GH;AuB37GD;EACE,cAAA;CvB67GD;AuB37GC;EAAY,eAAA;CvB87Gb;AuB77GC;EAAY,mBAAA;CvBg8Gb;AuB/7GC;EAAY,yBAAA;CvBk8Gb;AuB/7GD;EACE,mBAAA;EACA,UAAA;EACA,iBAAA;ElBsKA,gDAAA;EACQ,2CAAA;EAAA,wCAAA;EAOR,mCAAA;EACQ,8BAAA;EAAA,2BAAA;EAGR,yCAAA;EACQ,oCAAA;EAAA,iCAAA;CLoxGT;AwBh+GD;EACE,sBAAA;EACA,SAAA;EACA,UAAA;EACA,iBAAA;EACA,uBAAA;EACA,uBAAA;EACA,yBAAA;EACA,oCAAA;EACA,mCAAA;CxBk+GD;AwB99GD;;EAEE,mBAAA;CxBg+GD;AwB59GD;EACE,WAAA;CxB89GD;AwB19GD;EACE,mBAAA;EACA,UAAA;EACA,QAAA;EACA,cAAA;EACA,cAAA;EACA,YAAA;EACA,iBAAA;EACA,eAAA;EACA,gBAAA;EACA,gBAAA;EACA,iBAAA;EACA,iBAAA;EACA,uBAAA;EACA,6BAAA;EACA,uBAAA;EACA,sCAAA;EACA,mBAAA;EnBuBA,oDAAA;EACQ,4CAAA;CLs8GT;AwBx9GC;EACE,SAAA;EACA,WAAA;CxB09GH;AwBn/GD;ECzBE,YAAA;EACA,cAAA;EACA,iBAAA;EACA,0BAAA;CzB+gHD;AwBz/GD;EAmCI,eAAA;EACA,kBAAA;EACA,YAAA;EACA,iBAAA;EACA,wBAAA;EACA,eAAA;EACA,oBAAA;CxBy9GH;AwBv9GG;;EAEE,eAAA;EACA,sBAAA;EACA,0BAAA;CxBy9GL;AwBl9GC;;;EAGE,YAAA;EACA,sBAAA;EACA,0BAAA;EACA,WAAA;CxBo9GH;AwB38GC;;;EAGE,eAAA;CxB68GH;AwBz8GC;;EAEE,sBAAA;EACA,oBAAA;EACA,8BAAA;EACA,uBAAA;EEzGF,oEAAA;C1BqjHD;AwBt8GD;EAGI,eAAA;CxBs8GH;AwBz8GD;EAQI,WAAA;CxBo8GH;AwB57GD;EACE,SAAA;EACA,WAAA;CxB87GD;AwBt7GD;EACE,YAAA;EACA,QAAA;CxBw7GD;AwBp7GD;EACE,eAAA;EACA,kBAAA;EACA,gBAAA;EACA,wBAAA;EACA,eAAA;EACA,oBAAA;CxBs7GD;AwBl7GD;EACE,gBAAA;EACA,OAAA;EACA,SAAA;EACA,UAAA;EACA,QAAA;EACA,aAAA;CxBo7GD;AwBh7GD;EACE,SAAA;EACA,WAAA;CxBk7GD;AwB16GD;;EAII,YAAA;EACA,cAAA;EACA,0BAAA;EACA,4BAAA;CxB06GH;AwBj7GD;;EAWI,UAAA;EACA,aAAA;EACA,mBAAA;CxB06GH;AwBj6GD;EACE;IApEA,SAAA;IACA,WAAA;GxBw+GC;EwBr6GD;IA1DA,YAAA;IACA,QAAA;GxBk+GC;CACF;A2B7mHD;;EAEE,mBAAA;EACA,sBAAA;EACA,uBAAA;C3B+mHD;A2BnnHD;;EAMI,mBAAA;EACA,YAAA;C3BinHH;A2B/mHG;;;;;;;;EAIE,WAAA;C3BqnHL;A2B/mHD;;;;EAKI,kBAAA;C3BgnHH;A2B3mHD;EACE,kBAAA;C3B6mHD;A2B9mHD;;;EAOI,YAAA;C3B4mHH;A2BnnHD;;;EAYI,iBAAA;C3B4mHH;A2BxmHD;EACE,iBAAA;C3B0mHD;A2BtmHD;EACE,eAAA;C3BwmHD;A2BvmHC;ECpDA,2BAAA;EACA,8BAAA;C5B8pHD;A2BtmHD;;ECjDE,0BAAA;EACA,6BAAA;C5B2pHD;A2BrmHD;EACE,YAAA;C3BumHD;A2BrmHD;EACE,iBAAA;C3BumHD;A2BrmHD;;ECrEE,2BAAA;EACA,8BAAA;C5B8qHD;A2BpmHD;ECnEE,0BAAA;EACA,6BAAA;C5B0qHD;A2BnmHD;;EAEE,WAAA;C3BqmHD;A2BplHD;EACE,mBAAA;EACA,kBAAA;C3BslHD;A2BplHD;EACE,oBAAA;EACA,mBAAA;C3BslHD;A2BjlHD;EtB/CE,yDAAA;EACQ,iDAAA;CLmoHT;A2BjlHC;EtBnDA,yBAAA;EACQ,iBAAA;CLuoHT;A2B9kHD;EACE,eAAA;C3BglHD;A2B7kHD;EACE,wBAAA;EACA,uBAAA;C3B+kHD;A2B5kHD;EACE,wBAAA;C3B8kHD;A2BvkHD;;;EAII,eAAA;EACA,YAAA;EACA,YAAA;EACA,gBAAA;C3BwkHH;A2B/kHD;EAcM,YAAA;C3BokHL;A2BllHD;;;;EAsBI,iBAAA;EACA,eAAA;C3BkkHH;A2B7jHC;EACE,iBAAA;C3B+jHH;A2B7jHC;EC7KA,4BAAA;EACA,6BAAA;EAOA,8BAAA;EACA,6BAAA;C5BuuHD;A2B/jHC;ECjLA,0BAAA;EACA,2BAAA;EAOA,gCAAA;EACA,+BAAA;C5B6uHD;A2BhkHD;EACE,iBAAA;C3BkkHD;A2BhkHD;;ECjLE,8BAAA;EACA,6BAAA;C5BqvHD;A2B/jHD;EC/LE,0BAAA;EACA,2BAAA;C5BiwHD;A2B3jHD;EACE,eAAA;EACA,YAAA;EACA,oBAAA;EACA,0BAAA;C3B6jHD;A2BjkHD;;EAOI,oBAAA;EACA,YAAA;EACA,UAAA;C3B8jHH;A2BvkHD;EAYI,YAAA;C3B8jHH;A2B1kHD;EAgBI,WAAA;C3B6jHH;A2B5iHD;;;;EAKM,mBAAA;EACA,uBAAA;EACA,qBAAA;C3B6iHL;A6BvxHD;EACE,mBAAA;EACA,eAAA;EACA,0BAAA;C7ByxHD;A6BtxHC;EACE,YAAA;EACA,iBAAA;EACA,gBAAA;C7BwxHH;A6BjyHD;EAeI,mBAAA;EACA,WAAA;EAKA,YAAA;EAEA,YAAA;EACA,iBAAA;C7BgxHH;A6B9wHG;EACE,WAAA;C7BgxHL;A6BtwHD;;;EVwBE,aAAA;EACA,mBAAA;EACA,gBAAA;EACA,uBAAA;EACA,mBAAA;CnBmvHD;AmBjvHC;;;EACE,aAAA;EACA,kBAAA;CnBqvHH;AmBlvHC;;;;;;EAEE,aAAA;CnBwvHH;A6BxxHD;;;EVmBE,aAAA;EACA,kBAAA;EACA,gBAAA;EACA,iBAAA;EACA,mBAAA;CnB0wHD;AmBxwHC;;;EACE,aAAA;EACA,kBAAA;CnB4wHH;AmBzwHC;;;;;;EAEE,aAAA;CnB+wHH;A6BtyHD;;;EAGE,oBAAA;C7BwyHD;A6BtyHC;;;EACE,iBAAA;C7B0yHH;A6BtyHD;;EAEE,UAAA;EACA,oBAAA;EACA,uBAAA;C7BwyHD;A6BnyHD;EACE,kBAAA;EACA,gBAAA;EACA,iBAAA;EACA,eAAA;EACA,eAAA;EACA,mBAAA;EACA,0BAAA;EACA,uBAAA;EACA,mBAAA;C7BqyHD;A6BlyHC;EACE,kBAAA;EACA,gBAAA;EACA,mBAAA;C7BoyHH;A6BlyHC;EACE,mBAAA;EACA,gBAAA;EACA,mBAAA;C7BoyHH;A6BxzHD;;EA0BI,cAAA;C7BkyHH;A6B7xHD;;;;;;;EDtGE,2BAAA;EACA,8BAAA;C5B44HD;A6B9xHD;EACE,gBAAA;C7BgyHD;A6B9xHD;;;;;;;ED1GE,0BAAA;EACA,6BAAA;C5Bi5HD;A6B/xHD;EACE,eAAA;C7BiyHD;A6B5xHD;EACE,mBAAA;EAGA,aAAA;EACA,oBAAA;C7B4xHD;A6BjyHD;EAUI,mBAAA;C7B0xHH;A6BpyHD;EAYM,kBAAA;C7B2xHL;A6BxxHG;;;EAGE,WAAA;C7B0xHL;A6BrxHC;;EAGI,mBAAA;C7BsxHL;A6BnxHC;;EAGI,WAAA;EACA,kBAAA;C7BoxHL;A8Bn7HD;EACE,gBAAA;EACA,iBAAA;EACA,iBAAA;C9Bq7HD;A8Bx7HD;EAOI,mBAAA;EACA,eAAA;C9Bo7HH;A8B57HD;EAWM,mBAAA;EACA,eAAA;EACA,mBAAA;C9Bo7HL;A8Bn7HK;;EAEE,sBAAA;EACA,0BAAA;C9Bq7HP;A8Bh7HG;EACE,eAAA;C9Bk7HL;A8Bh7HK;;EAEE,eAAA;EACA,sBAAA;EACA,oBAAA;EACA,8BAAA;C9Bk7HP;A8B36HG;;;EAGE,0BAAA;EACA,sBAAA;C9B66HL;A8Bt9HD;ELLE,YAAA;EACA,cAAA;EACA,iBAAA;EACA,0BAAA;CzB89HD;A8B59HD;EA0DI,gBAAA;C9Bq6HH;A8B55HD;EACE,8BAAA;C9B85HD;A8B/5HD;EAGI,YAAA;EAEA,oBAAA;C9B85HH;A8Bn6HD;EASM,kBAAA;EACA,wBAAA;EACA,8BAAA;EACA,2BAAA;C9B65HL;A8B55HK;EACE,mCAAA;C9B85HP;A8Bx5HK;;;EAGE,eAAA;EACA,gBAAA;EACA,uBAAA;EACA,uBAAA;EACA,iCAAA;C9B05HP;A8Br5HC;EAqDA,YAAA;EA8BA,iBAAA;C9Bs0HD;A8Bz5HC;EAwDE,YAAA;C9Bo2HH;A8B55HC;EA0DI,mBAAA;EACA,mBAAA;C9Bq2HL;A8Bh6HC;EAgEE,UAAA;EACA,WAAA;C9Bm2HH;A8Bh2HC;EAAA;IAEI,oBAAA;IACA,UAAA;G9Bk2HH;E8Br2HD;IAKM,iBAAA;G9Bm2HL;CACF;A8B76HC;EAuFE,gBAAA;EACA,mBAAA;C9By1HH;A8Bj7HC;;;EA8FE,uBAAA;C9Bw1HH;A8Br1HC;EAAA;IAEI,8BAAA;IACA,2BAAA;G9Bu1HH;E8B11HD;;;IAQI,0BAAA;G9Bu1HH;CACF;A8Bx7HD;EAEI,YAAA;C9By7HH;A8B37HD;EAMM,mBAAA;C9Bw7HL;A8B97HD;EASM,iBAAA;C9Bw7HL;A8Bn7HK;;;EAGE,YAAA;EACA,0BAAA;C9Bq7HP;A8B76HD;EAEI,YAAA;C9B86HH;A8Bh7HD;EAIM,gBAAA;EACA,eAAA;C9B+6HL;A8Bn6HD;EACE,YAAA;C9Bq6HD;A8Bt6HD;EAII,YAAA;C9Bq6HH;A8Bz6HD;EAMM,mBAAA;EACA,mBAAA;C9Bs6HL;A8B76HD;EAYI,UAAA;EACA,WAAA;C9Bo6HH;A8Bj6HC;EAAA;IAEI,oBAAA;IACA,UAAA;G9Bm6HH;E8Bt6HD;IAKM,iBAAA;G9Bo6HL;CACF;A8B55HD;EACE,iBAAA;C9B85HD;A8B/5HD;EAKI,gBAAA;EACA,mBAAA;C9B65HH;A8Bn6HD;;;EAYI,uBAAA;C9B45HH;A8Bz5HC;EAAA;IAEI,8BAAA;IACA,2BAAA;G9B25HH;E8B95HD;;;IAQI,0BAAA;G9B25HH;CACF;A8Bl5HD;EAEI,cAAA;C9Bm5HH;A8Br5HD;EAKI,eAAA;C9Bm5HH;A8B14HD;EAEE,iBAAA;EF7OA,0BAAA;EACA,2BAAA;C5BynID;A+BjnID;EACE,mBAAA;EACA,iBAAA;EACA,oBAAA;EACA,8BAAA;C/BmnID;A+B9mIC;EAAA;IACE,mBAAA;G/BinID;CACF;A+BrmIC;EAAA;IACE,YAAA;G/BwmID;CACF;A+B1lID;EACE,oBAAA;EACA,mBAAA;EACA,oBAAA;EACA,kCAAA;EACA,2DAAA;EAAA,mDAAA;EAEA,kCAAA;C/B2lID;A+BzlIC;EACE,iBAAA;C/B2lIH;A+BxlIC;EAAA;IACE,YAAA;IACA,cAAA;IACA,yBAAA;IAAA,iBAAA;G/B2lID;E+BzlIC;IACE,0BAAA;IACA,wBAAA;IACA,kBAAA;IACA,6BAAA;G/B2lIH;E+BxlIC;IACE,oBAAA;G/B0lIH;E+BrlIC;;;IAGE,iBAAA;IACA,gBAAA;G/BulIH;CACF;A+BnlID;;EAWE,gBAAA;EACA,SAAA;EACA,QAAA;EACA,cAAA;C/B4kID;A+B1lID;;EAGI,kBAAA;C/B2lIH;A+BzlIG;EAAA;;IACE,kBAAA;G/B6lIH;CACF;A+BnlIC;EAAA;;IACE,iBAAA;G/BulID;CACF;A+BplID;EACE,OAAA;EACA,sBAAA;C/BslID;A+BplID;EACE,UAAA;EACA,iBAAA;EACA,sBAAA;C/BslID;A+B9kID;;;;EAII,oBAAA;EACA,mBAAA;C/BglIH;A+B9kIG;EAAA;;;;IACE,gBAAA;IACA,eAAA;G/BolIH;CACF;A+BxkID;EACE,cAAA;EACA,sBAAA;C/B0kID;A+BxkIC;EAAA;IACE,iBAAA;G/B2kID;CACF;A+BrkID;EACE,YAAA;EACA,aAAA;EACA,mBAAA;EACA,gBAAA;EACA,kBAAA;C/BukID;A+BrkIC;;EAEE,sBAAA;C/BukIH;A+BhlID;EAaI,eAAA;C/BskIH;A+BnkIC;EACE;;IAEE,mBAAA;G/BqkIH;CACF;A+B3jID;EACE,mBAAA;EACA,aAAA;EACA,kBAAA;EACA,mBAAA;EC9LA,gBAAA;EACA,mBAAA;ED+LA,8BAAA;EACA,uBAAA;EACA,8BAAA;EACA,mBAAA;C/B8jID;A+B1jIC;EACE,WAAA;C/B4jIH;A+B1kID;EAmBI,eAAA;EACA,YAAA;EACA,YAAA;EACA,mBAAA;C/B0jIH;A+BhlID;EAyBI,gBAAA;C/B0jIH;A+BvjIC;EAAA;IACE,cAAA;G/B0jID;CACF;A+BjjID;EACE,oBAAA;C/BmjID;A+BpjID;EAII,kBAAA;EACA,qBAAA;EACA,kBAAA;C/BmjIH;A+BhjIC;EAAA;IAGI,iBAAA;IACA,YAAA;IACA,YAAA;IACA,cAAA;IACA,8BAAA;IACA,UAAA;IACA,yBAAA;IAAA,iBAAA;G/BijIH;E+B1jID;;IAYM,2BAAA;G/BkjIL;E+B9jID;IAeM,kBAAA;G/BkjIL;E+BjjIK;;IAEE,uBAAA;G/BmjIP;CACF;A+B7iIC;EAAA;IACE,YAAA;IACA,UAAA;G/BgjID;E+BljID;IAKI,YAAA;G/BgjIH;E+BrjID;IAOM,kBAAA;IACA,qBAAA;G/BijIL;CACF;A+BtiID;EACE,mBAAA;EACA,oBAAA;EACA,mBAAA;EACA,kCAAA;EACA,qCAAA;E1B5NA,6FAAA;EACQ,qFAAA;E2BjER,gBAAA;EACA,mBAAA;ChCu0ID;AkB13HC;EAAA;IAGI,sBAAA;IACA,iBAAA;IACA,uBAAA;GlB23HH;EkBh4HD;IAUI,sBAAA;IACA,YAAA;IACA,uBAAA;GlBy3HH;EkBr4HD;IAiBI,sBAAA;GlBu3HH;EkBx4HD;IAqBI,sBAAA;IACA,uBAAA;GlBs3HH;EkB54HD;;;IA2BM,YAAA;GlBs3HL;EkBj5HD;IAiCI,YAAA;GlBm3HH;EkBp5HD;IAqCI,iBAAA;IACA,uBAAA;GlBk3HH;EkBx5HD;;IA6CI,sBAAA;IACA,cAAA;IACA,iBAAA;IACA,uBAAA;GlB+2HH;EkB/5HD;;IAmDM,gBAAA;GlBg3HL;EkBn6HD;;IAwDI,mBAAA;IACA,eAAA;GlB+2HH;EkBx6HD;IA8DI,OAAA;GlB62HH;CACF;A+BtlIG;EAAA;IACE,mBAAA;G/BylIH;E+BvlIG;IACE,iBAAA;G/BylIL;CACF;A+BjlIC;EAAA;IACE,YAAA;IACA,eAAA;IACA,kBAAA;IACA,gBAAA;IACA,eAAA;IACA,UAAA;I1BvPF,yBAAA;IACQ,iBAAA;GL40IP;CACF;A+B9kID;EACE,cAAA;EHpUA,0BAAA;EACA,2BAAA;C5Bq5ID;A+B9kID;EACE,iBAAA;EHzUA,4BAAA;EACA,6BAAA;EAOA,8BAAA;EACA,6BAAA;C5Bo5ID;A+B1kID;EChVE,gBAAA;EACA,mBAAA;ChC65ID;A+B3kIC;ECnVA,iBAAA;EACA,oBAAA;ChCi6ID;A+B5kIC;ECtVA,iBAAA;EACA,oBAAA;ChCq6ID;A+BtkID;EChWE,iBAAA;EACA,oBAAA;ChCy6ID;A+BvkIC;EAAA;IACE,YAAA;IACA,mBAAA;IACA,kBAAA;G/B0kID;CACF;A+B9jID;EACE;IEtWA,uBAAA;GjCu6IC;E+BhkID;IE1WA,wBAAA;IF4WE,oBAAA;G/BkkID;E+BpkID;IAKI,gBAAA;G/BkkIH;CACF;A+BzjID;EACE,0BAAA;EACA,sBAAA;C/B2jID;A+B7jID;EAKI,YAAA;C/B2jIH;A+B1jIG;;EAEE,eAAA;EACA,8BAAA;C/B4jIL;A+BrkID;EAcI,YAAA;C/B0jIH;A+BxkID;EAmBM,YAAA;C/BwjIL;A+BtjIK;;EAEE,YAAA;EACA,8BAAA;C/BwjIP;A+BpjIK;;;EAGE,YAAA;EACA,0BAAA;C/BsjIP;A+BljIK;;;EAGE,YAAA;EACA,8BAAA;C/BojIP;A+B7iIK;;;EAGE,YAAA;EACA,0BAAA;C/B+iIP;A+B3iIG;EAAA;IAIM,YAAA;G/B2iIP;E+B1iIO;;IAEE,YAAA;IACA,8BAAA;G/B4iIT;E+BxiIO;;;IAGE,YAAA;IACA,0BAAA;G/B0iIT;E+BtiIO;;;IAGE,YAAA;IACA,8BAAA;G/BwiIT;CACF;A+BxnID;EAuFI,mBAAA;C/BoiIH;A+BniIG;;EAEE,uBAAA;C/BqiIL;A+B/nID;EA6FM,uBAAA;C/BqiIL;A+BloID;;EAmGI,sBAAA;C/BmiIH;A+BtoID;EA4GI,YAAA;C/B6hIH;A+B5hIG;EACE,YAAA;C/B8hIL;A+B5oID;EAmHI,YAAA;C/B4hIH;A+B3hIG;;EAEE,YAAA;C/B6hIL;A+BzhIK;;;;EAEE,YAAA;C/B6hIP;A+BrhID;EACE,uBAAA;EACA,sBAAA;C/BuhID;A+BzhID;EAKI,eAAA;C/BuhIH;A+BthIG;;EAEE,YAAA;EACA,8BAAA;C/BwhIL;A+BjiID;EAcI,eAAA;C/BshIH;A+BpiID;EAmBM,eAAA;C/BohIL;A+BlhIK;;EAEE,YAAA;EACA,8BAAA;C/BohIP;A+BhhIK;;;EAGE,YAAA;EACA,0BAAA;C/BkhIP;A+B9gIK;;;EAGE,YAAA;EACA,8BAAA;C/BghIP;A+B1gIK;;;EAGE,YAAA;EACA,0BAAA;C/B4gIP;A+BxgIG;EAAA;IAIM,sBAAA;G/BwgIP;E+B5gIC;IAOM,0BAAA;G/BwgIP;E+B/gIC;IAUM,eAAA;G/BwgIP;E+BvgIO;;IAEE,YAAA;IACA,8BAAA;G/BygIT;E+BrgIO;;;IAGE,YAAA;IACA,0BAAA;G/BugIT;E+BngIO;;;IAGE,YAAA;IACA,8BAAA;G/BqgIT;CACF;A+B1lID;EA6FI,mBAAA;C/BggIH;A+B//HG;;EAEE,uBAAA;C/BigIL;A+BjmID;EAmGM,uBAAA;C/BigIL;A+BpmID;;EAyGI,sBAAA;C/B+/HH;A+BxmID;EA6GI,eAAA;C/B8/HH;A+B7/HG;EACE,YAAA;C/B+/HL;A+B9mID;EAoHI,eAAA;C/B6/HH;A+B5/HG;;EAEE,YAAA;C/B8/HL;A+B1/HK;;;;EAEE,YAAA;C/B8/HP;AkCpoJD;EACE,kBAAA;EACA,oBAAA;EACA,iBAAA;EACA,0BAAA;EACA,mBAAA;ClCsoJD;AkC3oJD;EAQI,sBAAA;ClCsoJH;AkC9oJD;EAWM,eAAA;EACA,YAAA;EACA,kBAAA;ClCsoJL;AkCnpJD;EAkBI,eAAA;ClCooJH;AmCxpJD;EACE,sBAAA;EACA,gBAAA;EACA,eAAA;EACA,mBAAA;CnC0pJD;AmC9pJD;EAOI,gBAAA;CnC0pJH;AmCjqJD;;EAUM,mBAAA;EACA,YAAA;EACA,kBAAA;EACA,kBAAA;EACA,wBAAA;EACA,eAAA;EACA,sBAAA;EACA,uBAAA;EACA,uBAAA;CnC2pJL;AmCzpJK;;;;EAEE,WAAA;EACA,eAAA;EACA,0BAAA;EACA,mBAAA;CnC6pJP;AmC1pJG;;EAGI,eAAA;EPnBN,4BAAA;EACA,+BAAA;C5B+qJD;AmCzpJG;;EP/BF,6BAAA;EACA,gCAAA;C5B4rJD;AmCppJG;;;;;;EAGE,WAAA;EACA,YAAA;EACA,gBAAA;EACA,0BAAA;EACA,sBAAA;CnCypJL;AmC7sJD;;;;;;EA+DM,eAAA;EACA,oBAAA;EACA,uBAAA;EACA,mBAAA;CnCspJL;AmC7oJD;;ECxEM,mBAAA;EACA,gBAAA;EACA,uBAAA;CpCytJL;AoCvtJG;;ERKF,4BAAA;EACA,+BAAA;C5BstJD;AoCttJG;;ERTF,6BAAA;EACA,gCAAA;C5BmuJD;AmCxpJD;;EC7EM,kBAAA;EACA,gBAAA;EACA,iBAAA;CpCyuJL;AoCvuJG;;ERKF,4BAAA;EACA,+BAAA;C5BsuJD;AoCtuJG;;ERTF,6BAAA;EACA,gCAAA;C5BmvJD;AqCtvJD;EACE,gBAAA;EACA,eAAA;EACA,mBAAA;EACA,iBAAA;CrCwvJD;AqC5vJD;EAOI,gBAAA;CrCwvJH;AqC/vJD;;EAUM,sBAAA;EACA,kBAAA;EACA,uBAAA;EACA,uBAAA;EACA,oBAAA;CrCyvJL;AqCvwJD;;EAmBM,sBAAA;EACA,0BAAA;CrCwvJL;AqC5wJD;;EA2BM,aAAA;CrCqvJL;AqChxJD;;EAkCM,YAAA;CrCkvJL;AqCpxJD;;;;EA2CM,eAAA;EACA,oBAAA;EACA,uBAAA;CrC+uJL;AsC7xJD;EACE,gBAAA;EACA,2BAAA;EACA,eAAA;EACA,iBAAA;EACA,eAAA;EACA,YAAA;EACA,mBAAA;EACA,oBAAA;EACA,yBAAA;EACA,sBAAA;CtC+xJD;AsC3xJG;;EAEE,YAAA;EACA,sBAAA;EACA,gBAAA;CtC6xJL;AsCxxJC;EACE,cAAA;CtC0xJH;AsCtxJC;EACE,mBAAA;EACA,UAAA;CtCwxJH;AsCjxJD;ECtCE,0BAAA;CvC0zJD;AuCvzJG;;EAEE,0BAAA;CvCyzJL;AsCpxJD;EC1CE,0BAAA;CvCi0JD;AuC9zJG;;EAEE,0BAAA;CvCg0JL;AsCvxJD;EC9CE,0BAAA;CvCw0JD;AuCr0JG;;EAEE,0BAAA;CvCu0JL;AsC1xJD;EClDE,0BAAA;CvC+0JD;AuC50JG;;EAEE,0BAAA;CvC80JL;AsC7xJD;ECtDE,0BAAA;CvCs1JD;AuCn1JG;;EAEE,0BAAA;CvCq1JL;AsChyJD;EC1DE,0BAAA;CvC61JD;AuC11JG;;EAEE,0BAAA;CvC41JL;AwC91JD;EACE,sBAAA;EACA,gBAAA;EACA,iBAAA;EACA,gBAAA;EACA,kBAAA;EACA,eAAA;EACA,YAAA;EACA,mBAAA;EACA,oBAAA;EACA,uBAAA;EACA,0BAAA;EACA,oBAAA;CxCg2JD;AwC71JC;EACE,cAAA;CxC+1JH;AwC31JC;EACE,mBAAA;EACA,UAAA;CxC61JH;AwC11JC;;EAEE,OAAA;EACA,iBAAA;CxC41JH;AwCv1JG;;EAEE,YAAA;EACA,sBAAA;EACA,gBAAA;CxCy1JL;AwCp1JC;;EAEE,eAAA;EACA,uBAAA;CxCs1JH;AwCn1JC;EACE,aAAA;CxCq1JH;AwCl1JC;EACE,kBAAA;CxCo1JH;AwCj1JC;EACE,iBAAA;CxCm1JH;AyC74JD;EACE,kBAAA;EACA,qBAAA;EACA,oBAAA;EACA,eAAA;EACA,0BAAA;CzC+4JD;AyCp5JD;;EASI,eAAA;CzC+4JH;AyCx5JD;EAaI,oBAAA;EACA,gBAAA;EACA,iBAAA;CzC84JH;AyC75JD;EAmBI,0BAAA;CzC64JH;AyC14JC;;EAEE,oBAAA;EACA,mBAAA;EACA,mBAAA;CzC44JH;AyCt6JD;EA8BI,gBAAA;CzC24JH;AyCx4JC;EAAA;IACE,kBAAA;IACA,qBAAA;GzC24JD;EyCz4JC;;IAEE,oBAAA;IACA,mBAAA;GzC24JH;EyCl5JD;;IAYI,gBAAA;GzC04JH;CACF;A0Cr7JD;EACE,eAAA;EACA,aAAA;EACA,oBAAA;EACA,wBAAA;EACA,uBAAA;EACA,uBAAA;EACA,mBAAA;ErCiLA,4CAAA;EACK,uCAAA;EACG,oCAAA;CLuwJT;A0Cj8JD;;EAaI,mBAAA;EACA,kBAAA;C1Cw7JH;A0Cp7JC;;;EAGE,sBAAA;C1Cs7JH;A0C38JD;EA0BI,aAAA;EACA,eAAA;C1Co7JH;A2C/8JD;EACE,cAAA;EACA,oBAAA;EACA,8BAAA;EACA,mBAAA;C3Ci9JD;A2Cr9JD;EAQI,cAAA;EACA,eAAA;C3Cg9JH;A2Cz9JD;EAcI,kBAAA;C3C88JH;A2C59JD;;EAoBI,iBAAA;C3C48JH;A2Ch+JD;EAwBI,gBAAA;C3C28JH;A2Cl8JD;;EAEE,oBAAA;C3Co8JD;A2Ct8JD;;EAMI,mBAAA;EACA,UAAA;EACA,aAAA;EACA,eAAA;C3Co8JH;A2C57JD;ECvDE,eAAA;EACA,0BAAA;EACA,sBAAA;C5Cs/JD;A2Cj8JD;EClDI,0BAAA;C5Cs/JH;A2Cp8JD;EC9CI,eAAA;C5Cq/JH;A2Cn8JD;EC3DE,eAAA;EACA,0BAAA;EACA,sBAAA;C5CigKD;A2Cx8JD;ECtDI,0BAAA;C5CigKH;A2C38JD;EClDI,eAAA;C5CggKH;A2C18JD;EC/DE,eAAA;EACA,0BAAA;EACA,sBAAA;C5C4gKD;A2C/8JD;EC1DI,0BAAA;C5C4gKH;A2Cl9JD;ECtDI,eAAA;C5C2gKH;A2Cj9JD;ECnEE,eAAA;EACA,0BAAA;EACA,sBAAA;C5CuhKD;A2Ct9JD;EC9DI,0BAAA;C5CuhKH;A2Cz9JD;EC1DI,eAAA;C5CshKH;A6CvhKD;EACE;IAAQ,4BAAA;G7C0hKP;E6CzhKD;IAAQ,yBAAA;G7C4hKP;CACF;A6CzhKD;EACE;IAAQ,4BAAA;G7C4hKP;E6C3hKD;IAAQ,yBAAA;G7C8hKP;CACF;A6CjiKD;EACE;IAAQ,4BAAA;G7C4hKP;E6C3hKD;IAAQ,yBAAA;G7C8hKP;CACF;A6CvhKD;EACE,aAAA;EACA,oBAAA;EACA,iBAAA;EACA,0BAAA;EACA,mBAAA;ExCsCA,uDAAA;EACQ,+CAAA;CLo/JT;A6CthKD;EACE,YAAA;EACA,UAAA;EACA,aAAA;EACA,gBAAA;EACA,kBAAA;EACA,YAAA;EACA,mBAAA;EACA,0BAAA;ExCyBA,uDAAA;EACQ,+CAAA;EAyHR,oCAAA;EACK,+BAAA;EACG,4BAAA;CLw4JT;A6CnhKD;;ECDI,8MAAA;EACA,yMAAA;EACA,sMAAA;EDEF,mCAAA;EAAA,2BAAA;C7CuhKD;A6ChhKD;;ExC5CE,2DAAA;EACK,sDAAA;EACG,mDAAA;CLgkKT;A6C7gKD;EEvEE,0BAAA;C/CulKD;A+CplKC;EDgDE,8MAAA;EACA,yMAAA;EACA,sMAAA;C9CuiKH;A6CjhKD;EE3EE,0BAAA;C/C+lKD;A+C5lKC;EDgDE,8MAAA;EACA,yMAAA;EACA,sMAAA;C9C+iKH;A6CrhKD;EE/EE,0BAAA;C/CumKD;A+CpmKC;EDgDE,8MAAA;EACA,yMAAA;EACA,sMAAA;C9CujKH;A6CzhKD;EEnFE,0BAAA;C/C+mKD;A+C5mKC;EDgDE,8MAAA;EACA,yMAAA;EACA,sMAAA;C9C+jKH;AgDvnKD;EAEE,iBAAA;ChDwnKD;AgDtnKC;EACE,cAAA;ChDwnKH;AgDpnKD;;EAEE,iBAAA;EACA,QAAA;ChDsnKD;AgDnnKD;EACE,eAAA;ChDqnKD;AgDlnKD;EACE,eAAA;ChDonKD;AgDjnKC;EACE,gBAAA;ChDmnKH;AgD/mKD;;EAEE,mBAAA;ChDinKD;AgD9mKD;;EAEE,oBAAA;ChDgnKD;AgD7mKD;;;EAGE,oBAAA;EACA,oBAAA;ChD+mKD;AgD5mKD;EACE,uBAAA;ChD8mKD;AgD3mKD;EACE,uBAAA;ChD6mKD;AgDzmKD;EACE,cAAA;EACA,mBAAA;ChD2mKD;AgDrmKD;EACE,gBAAA;EACA,iBAAA;ChDumKD;AiD5pKD;EAEE,gBAAA;EACA,oBAAA;CjD6pKD;AiDrpKD;EACE,mBAAA;EACA,eAAA;EACA,mBAAA;EAEA,oBAAA;EACA,uBAAA;EACA,uBAAA;CjDspKD;AiDnpKC;ErB7BA,4BAAA;EACA,6BAAA;C5BmrKD;AiDppKC;EACE,iBAAA;ErBzBF,gCAAA;EACA,+BAAA;C5BgrKD;AiDnpKC;;;EAGE,eAAA;EACA,oBAAA;EACA,0BAAA;CjDqpKH;AiD1pKC;;;EASI,eAAA;CjDspKL;AiD/pKC;;;EAYI,eAAA;CjDwpKL;AiDnpKC;;;EAGE,WAAA;EACA,YAAA;EACA,0BAAA;EACA,sBAAA;CjDqpKH;AiD3pKC;;;;;;;;;EAYI,eAAA;CjD0pKL;AiDtqKC;;;EAeI,eAAA;CjD4pKL;AiDjpKD;;EAEE,YAAA;CjDmpKD;AiDrpKD;;EAKI,YAAA;CjDopKH;AiDhpKC;;;;EAEE,YAAA;EACA,sBAAA;EACA,0BAAA;CjDopKH;AiDhpKD;EACE,YAAA;EACA,iBAAA;CjDkpKD;AczvKA;EoCIG,eAAA;EACA,0BAAA;ClDwvKH;AkDtvKG;;EAEE,eAAA;ClDwvKL;AkD1vKG;;EAKI,eAAA;ClDyvKP;AkDtvKK;;;;EAEE,eAAA;EACA,0BAAA;ClD0vKP;AkDxvKK;;;;;;EAGE,YAAA;EACA,0BAAA;EACA,sBAAA;ClD6vKP;ActxKA;EoCIG,eAAA;EACA,0BAAA;ClDqxKH;AkDnxKG;;EAEE,eAAA;ClDqxKL;AkDvxKG;;EAKI,eAAA;ClDsxKP;AkDnxKK;;;;EAEE,eAAA;EACA,0BAAA;ClDuxKP;AkDrxKK;;;;;;EAGE,YAAA;EACA,0BAAA;EACA,sBAAA;ClD0xKP;AcnzKA;EoCIG,eAAA;EACA,0BAAA;ClDkzKH;AkDhzKG;;EAEE,eAAA;ClDkzKL;AkDpzKG;;EAKI,eAAA;ClDmzKP;AkDhzKK;;;;EAEE,eAAA;EACA,0BAAA;ClDozKP;AkDlzKK;;;;;;EAGE,YAAA;EACA,0BAAA;EACA,sBAAA;ClDuzKP;Ach1KA;EoCIG,eAAA;EACA,0BAAA;ClD+0KH;AkD70KG;;EAEE,eAAA;ClD+0KL;AkDj1KG;;EAKI,eAAA;ClDg1KP;AkD70KK;;;;EAEE,eAAA;EACA,0BAAA;ClDi1KP;AkD/0KK;;;;;;EAGE,YAAA;EACA,0BAAA;EACA,sBAAA;ClDo1KP;AiDnvKD;EACE,cAAA;EACA,mBAAA;CjDqvKD;AiDnvKD;EACE,iBAAA;EACA,iBAAA;CjDqvKD;AmD72KD;EACE,oBAAA;EACA,uBAAA;EACA,8BAAA;EACA,mBAAA;E9C0DA,kDAAA;EACQ,0CAAA;CLszKT;AmD52KD;EACE,cAAA;CnD82KD;AmDz2KD;EACE,mBAAA;EACA,qCAAA;EvBtBA,4BAAA;EACA,6BAAA;C5Bk4KD;AmD/2KD;EAMI,eAAA;CnD42KH;AmDv2KD;EACE,cAAA;EACA,iBAAA;EACA,gBAAA;EACA,eAAA;CnDy2KD;AmD72KD;;;;;EAWI,eAAA;CnDy2KH;AmDp2KD;EACE,mBAAA;EACA,0BAAA;EACA,2BAAA;EvB1CA,gCAAA;EACA,+BAAA;C5Bi5KD;AmD91KD;;EAGI,iBAAA;CnD+1KH;AmDl2KD;;EAMM,oBAAA;EACA,iBAAA;CnDg2KL;AmD51KG;;EAEI,cAAA;EvBzEN,4BAAA;EACA,6BAAA;C5Bw6KD;AmD11KG;;EAEI,iBAAA;EvBzEN,gCAAA;EACA,+BAAA;C5Bs6KD;AmDn3KD;EvB5DE,0BAAA;EACA,2BAAA;C5Bk7KD;AmDt1KD;EAEI,oBAAA;CnDu1KH;AmDp1KD;EACE,oBAAA;CnDs1KD;AmD90KD;;;EAII,iBAAA;CnD+0KH;AmDn1KD;;;EAOM,oBAAA;EACA,mBAAA;CnDi1KL;AmDz1KD;;EvB3GE,4BAAA;EACA,6BAAA;C5Bw8KD;AmD91KD;;;;EAmBQ,4BAAA;EACA,6BAAA;CnDi1KP;AmDr2KD;;;;;;;;EAwBU,4BAAA;CnDu1KT;AmD/2KD;;;;;;;;EA4BU,6BAAA;CnD61KT;AmDz3KD;;EvBnGE,gCAAA;EACA,+BAAA;C5Bg+KD;AmD93KD;;;;EAyCQ,gCAAA;EACA,+BAAA;CnD21KP;AmDr4KD;;;;;;;;EA8CU,+BAAA;CnDi2KT;AmD/4KD;;;;;;;;EAkDU,gCAAA;CnDu2KT;AmDz5KD;;;;EA2DI,2BAAA;CnDo2KH;AmD/5KD;;EA+DI,cAAA;CnDo2KH;AmDn6KD;;EAmEI,UAAA;CnDo2KH;AmDv6KD;;;;;;;;;;;;EA0EU,eAAA;CnD22KT;AmDr7KD;;;;;;;;;;;;EA8EU,gBAAA;CnDq3KT;AmDn8KD;;;;;;;;EAuFU,iBAAA;CnDs3KT;AmD78KD;;;;;;;;EAgGU,iBAAA;CnDu3KT;AmDv9KD;EAsGI,iBAAA;EACA,UAAA;CnDo3KH;AmD12KD;EACE,oBAAA;CnD42KD;AmD72KD;EAKI,iBAAA;EACA,mBAAA;CnD22KH;AmDj3KD;EASM,gBAAA;CnD22KL;AmDp3KD;EAcI,iBAAA;CnDy2KH;AmDv3KD;;EAkBM,2BAAA;CnDy2KL;AmD33KD;EAuBI,cAAA;CnDu2KH;AmD93KD;EAyBM,8BAAA;CnDw2KL;AmDj2KD;EC5PE,mBAAA;CpDgmLD;AoD9lLC;EACE,eAAA;EACA,0BAAA;EACA,mBAAA;CpDgmLH;AoDnmLC;EAMI,uBAAA;CpDgmLL;AoDtmLC;EASI,eAAA;EACA,0BAAA;CpDgmLL;AoD7lLC;EAEI,0BAAA;CpD8lLL;AmDh3KD;EC/PE,sBAAA;CpDknLD;AoDhnLC;EACE,YAAA;EACA,0BAAA;EACA,sBAAA;CpDknLH;AoDrnLC;EAMI,0BAAA;CpDknLL;AoDxnLC;EASI,eAAA;EACA,uBAAA;CpDknLL;AoD/mLC;EAEI,6BAAA;CpDgnLL;AmD/3KD;EClQE,sBAAA;CpDooLD;AoDloLC;EACE,eAAA;EACA,0BAAA;EACA,sBAAA;CpDooLH;AoDvoLC;EAMI,0BAAA;CpDooLL;AoD1oLC;EASI,eAAA;EACA,0BAAA;CpDooLL;AoDjoLC;EAEI,6BAAA;CpDkoLL;AmD94KD;ECrQE,sBAAA;CpDspLD;AoDppLC;EACE,eAAA;EACA,0BAAA;EACA,sBAAA;CpDspLH;AoDzpLC;EAMI,0BAAA;CpDspLL;AoD5pLC;EASI,eAAA;EACA,0BAAA;CpDspLL;AoDnpLC;EAEI,6BAAA;CpDopLL;AmD75KD;ECxQE,sBAAA;CpDwqLD;AoDtqLC;EACE,eAAA;EACA,0BAAA;EACA,sBAAA;CpDwqLH;AoD3qLC;EAMI,0BAAA;CpDwqLL;AoD9qLC;EASI,eAAA;EACA,0BAAA;CpDwqLL;AoDrqLC;EAEI,6BAAA;CpDsqLL;AmD56KD;EC3QE,sBAAA;CpD0rLD;AoDxrLC;EACE,eAAA;EACA,0BAAA;EACA,sBAAA;CpD0rLH;AoD7rLC;EAMI,0BAAA;CpD0rLL;AoDhsLC;EASI,eAAA;EACA,0BAAA;CpD0rLL;AoDvrLC;EAEI,6BAAA;CpDwrLL;AqDxsLD;EACE,mBAAA;EACA,eAAA;EACA,UAAA;EACA,WAAA;EACA,iBAAA;CrD0sLD;AqD/sLD;;;;;EAYI,mBAAA;EACA,OAAA;EACA,UAAA;EACA,QAAA;EACA,YAAA;EACA,aAAA;EACA,UAAA;CrD0sLH;AqDrsLD;EACE,uBAAA;CrDusLD;AqDnsLD;EACE,oBAAA;CrDqsLD;AsDhuLD;EACE,iBAAA;EACA,cAAA;EACA,oBAAA;EACA,0BAAA;EACA,0BAAA;EACA,mBAAA;EjD0DA,wDAAA;EACQ,gDAAA;CLyqLT;AsD1uLD;EASI,mBAAA;EACA,kCAAA;CtDouLH;AsD/tLD;EACE,cAAA;EACA,mBAAA;CtDiuLD;AsD/tLD;EACE,aAAA;EACA,mBAAA;CtDiuLD;AuDrvLD;EACE,aAAA;EACA,gBAAA;EACA,kBAAA;EACA,eAAA;EACA,YAAA;EACA,0BAAA;EjCTA,0BAAA;EACA,aAAA;CtBiwLD;AuDtvLC;;EAEE,YAAA;EACA,sBAAA;EACA,gBAAA;EjChBF,0BAAA;EACA,aAAA;CtBywLD;AuDlvLC;EACE,WAAA;EACA,gBAAA;EACA,wBAAA;EACA,UAAA;EACA,yBAAA;EACA,sBAAA;EAAA,iBAAA;CvDovLH;AwD5wLD;EACE,iBAAA;CxD8wLD;AwD1wLD;EACE,gBAAA;EACA,OAAA;EACA,SAAA;EACA,UAAA;EACA,QAAA;EACA,cAAA;EACA,cAAA;EACA,iBAAA;EACA,kCAAA;EAIA,WAAA;CxDywLD;AwDtwLC;EnDiHA,sCAAA;EACI,kCAAA;EACC,iCAAA;EACG,8BAAA;EAkER,oDAAA;EAEK,0CAAA;EACG,4CAAA;EAAA,oCAAA;EAAA,iGAAA;CLulLT;AwD5wLC;EnD6GA,mCAAA;EACI,+BAAA;EACC,8BAAA;EACG,2BAAA;CLkqLT;AwDhxLD;EACE,mBAAA;EACA,iBAAA;CxDkxLD;AwD9wLD;EACE,mBAAA;EACA,YAAA;EACA,aAAA;CxDgxLD;AwD5wLD;EACE,mBAAA;EACA,uBAAA;EACA,6BAAA;EACA,uBAAA;EACA,qCAAA;EACA,mBAAA;EnDcA,iDAAA;EACQ,yCAAA;EmDZR,WAAA;CxD8wLD;AwD1wLD;EACE,gBAAA;EACA,OAAA;EACA,SAAA;EACA,UAAA;EACA,QAAA;EACA,cAAA;EACA,uBAAA;CxD4wLD;AwD1wLC;ElCpEA,yBAAA;EACA,WAAA;CtBi1LD;AwD7wLC;ElCrEA,0BAAA;EACA,aAAA;CtBq1LD;AwD5wLD;EACE,cAAA;EACA,iCAAA;CxD8wLD;AwD1wLD;EACE,iBAAA;CxD4wLD;AwDxwLD;EACE,UAAA;EACA,wBAAA;CxD0wLD;AwDrwLD;EACE,mBAAA;EACA,cAAA;CxDuwLD;AwDnwLD;EACE,cAAA;EACA,kBAAA;EACA,8BAAA;CxDqwLD;AwDxwLD;EAQI,iBAAA;EACA,iBAAA;CxDmwLH;AwD5wLD;EAaI,kBAAA;CxDkwLH;AwD/wLD;EAiBI,eAAA;CxDiwLH;AwD5vLD;EACE,mBAAA;EACA,aAAA;EACA,YAAA;EACA,aAAA;EACA,iBAAA;CxD8vLD;AwD1vLD;EAEE;IACE,aAAA;IACA,kBAAA;GxD2vLD;EwDzvLD;InDrEA,kDAAA;IACQ,0CAAA;GLi0LP;EwDxvLD;IAAY,aAAA;GxD2vLX;CACF;AwDzvLD;EACE;IAAY,aAAA;GxD4vLX;CACF;AyD34LD;EACE,mBAAA;EACA,cAAA;EACA,eAAA;ECRA,4DAAA;EAEA,mBAAA;EACA,iBAAA;EACA,wBAAA;EACA,iBAAA;EACA,iBAAA;EACA,kBAAA;EACA,sBAAA;EACA,kBAAA;EACA,qBAAA;EACA,uBAAA;EACA,mBAAA;EACA,qBAAA;EACA,kBAAA;EACA,oBAAA;EDHA,gBAAA;EnCTA,yBAAA;EACA,WAAA;CtBm6LD;AyDv5LC;EnCbA,0BAAA;EACA,aAAA;CtBu6LD;AyD15LC;EACE,eAAA;EACA,iBAAA;CzD45LH;AyD15LC;EACE,eAAA;EACA,iBAAA;CzD45LH;AyD15LC;EACE,eAAA;EACA,gBAAA;CzD45LH;AyD15LC;EACE,eAAA;EACA,kBAAA;CzD45LH;AyDx5LC;EACE,UAAA;EACA,UAAA;EACA,kBAAA;EACA,wBAAA;EACA,uBAAA;CzD05LH;AyDx5LC;EACE,WAAA;EACA,UAAA;EACA,oBAAA;EACA,wBAAA;EACA,uBAAA;CzD05LH;AyDx5LC;EACE,UAAA;EACA,UAAA;EACA,oBAAA;EACA,wBAAA;EACA,uBAAA;CzD05LH;AyDx5LC;EACE,SAAA;EACA,QAAA;EACA,iBAAA;EACA,4BAAA;EACA,yBAAA;CzD05LH;AyDx5LC;EACE,SAAA;EACA,SAAA;EACA,iBAAA;EACA,4BAAA;EACA,wBAAA;CzD05LH;AyDx5LC;EACE,OAAA;EACA,UAAA;EACA,kBAAA;EACA,wBAAA;EACA,0BAAA;CzD05LH;AyDx5LC;EACE,OAAA;EACA,WAAA;EACA,iBAAA;EACA,wBAAA;EACA,0BAAA;CzD05LH;AyDx5LC;EACE,OAAA;EACA,UAAA;EACA,iBAAA;EACA,wBAAA;EACA,0BAAA;CzD05LH;AyDr5LD;EACE,iBAAA;EACA,iBAAA;EACA,YAAA;EACA,mBAAA;EACA,uBAAA;EACA,mBAAA;CzDu5LD;AyDn5LD;EACE,mBAAA;EACA,SAAA;EACA,UAAA;EACA,0BAAA;EACA,oBAAA;CzDq5LD;A2D9/LD;EACE,mBAAA;EACA,OAAA;EACA,QAAA;EACA,cAAA;EACA,cAAA;EACA,iBAAA;EACA,aAAA;EDXA,4DAAA;EAEA,mBAAA;EACA,iBAAA;EACA,wBAAA;EACA,iBAAA;EACA,iBAAA;EACA,kBAAA;EACA,sBAAA;EACA,kBAAA;EACA,qBAAA;EACA,uBAAA;EACA,mBAAA;EACA,qBAAA;EACA,kBAAA;EACA,oBAAA;ECAA,gBAAA;EACA,uBAAA;EACA,6BAAA;EACA,uBAAA;EACA,qCAAA;EACA,mBAAA;EtDiDA,kDAAA;EACQ,0CAAA;CL49LT;A2D1gMC;EAAQ,kBAAA;C3D6gMT;A2D5gMC;EAAU,kBAAA;C3D+gMX;A2D9gMC;EAAW,iBAAA;C3DihMZ;A2DhhMC;EAAS,mBAAA;C3DmhMV;A2D1iMD;EA4BI,mBAAA;C3DihMH;A2D/gMG;;EAEE,mBAAA;EACA,eAAA;EACA,SAAA;EACA,UAAA;EACA,0BAAA;EACA,oBAAA;C3DihML;A2D9gMG;EACE,YAAA;EACA,mBAAA;C3DghML;A2D5gMC;EACE,cAAA;EACA,UAAA;EACA,mBAAA;EACA,0BAAA;EACA,sCAAA;EACA,uBAAA;C3D8gMH;A2D7gMG;EACE,YAAA;EACA,mBAAA;EACA,aAAA;EACA,uBAAA;EACA,uBAAA;C3D+gML;A2D5gMC;EACE,SAAA;EACA,YAAA;EACA,kBAAA;EACA,4BAAA;EACA,wCAAA;EACA,qBAAA;C3D8gMH;A2D7gMG;EACE,cAAA;EACA,UAAA;EACA,aAAA;EACA,yBAAA;EACA,qBAAA;C3D+gML;A2D5gMC;EACE,WAAA;EACA,UAAA;EACA,mBAAA;EACA,oBAAA;EACA,6BAAA;EACA,yCAAA;C3D8gMH;A2D7gMG;EACE,SAAA;EACA,mBAAA;EACA,aAAA;EACA,oBAAA;EACA,0BAAA;C3D+gML;A2D3gMC;EACE,SAAA;EACA,aAAA;EACA,kBAAA;EACA,sBAAA;EACA,2BAAA;EACA,uCAAA;C3D6gMH;A2D5gMG;EACE,WAAA;EACA,cAAA;EACA,aAAA;EACA,sBAAA;EACA,wBAAA;C3D8gML;A2DzgMD;EACE,kBAAA;EACA,UAAA;EACA,gBAAA;EACA,0BAAA;EACA,iCAAA;EACA,2BAAA;C3D2gMD;A2DxgMD;EACE,kBAAA;C3D0gMD;A4D9nMD;EACE,mBAAA;C5DgoMD;A4D7nMD;EACE,mBAAA;EACA,YAAA;EACA,iBAAA;C5D+nMD;A4DloMD;EAMI,mBAAA;EACA,cAAA;EvD6KF,0CAAA;EACK,qCAAA;EACG,kCAAA;CLm9LT;A4DzoMD;;EAcM,eAAA;C5D+nML;A4D3nMG;EAAA;IvDuLF,uDAAA;IAEK,6CAAA;IACG,+CAAA;IAAA,uCAAA;IAAA,0GAAA;IA7JR,oCAAA;IAEQ,4BAAA;IA+GR,4BAAA;IAEQ,oBAAA;GLw/LP;E4DnoMG;;IvDmHJ,2CAAA;IACQ,mCAAA;IuDjHF,QAAA;G5DsoML;E4DpoMG;;IvD8GJ,4CAAA;IACQ,oCAAA;IuD5GF,QAAA;G5DuoML;E4DroMG;;;IvDyGJ,wCAAA;IACQ,gCAAA;IuDtGF,QAAA;G5DwoML;CACF;A4D9qMD;;;EA6CI,eAAA;C5DsoMH;A4DnrMD;EAiDI,QAAA;C5DqoMH;A4DtrMD;;EAsDI,mBAAA;EACA,OAAA;EACA,YAAA;C5DooMH;A4D5rMD;EA4DI,WAAA;C5DmoMH;A4D/rMD;EA+DI,YAAA;C5DmoMH;A4DlsMD;;EAmEI,QAAA;C5DmoMH;A4DtsMD;EAuEI,YAAA;C5DkoMH;A4DzsMD;EA0EI,WAAA;C5DkoMH;A4D1nMD;EACE,mBAAA;EACA,OAAA;EACA,UAAA;EACA,QAAA;EACA,WAAA;EACA,gBAAA;EACA,YAAA;EACA,mBAAA;EACA,0CAAA;EACA,mCAAA;EtCpGA,0BAAA;EACA,aAAA;CtBiuMD;A4DxnMC;EdrGE,mGAAA;EACA,8FAAA;EACA,qHAAA;EAAA,+FAAA;EACA,uHAAA;EACA,4BAAA;C9CguMH;A4D5nMC;EACE,SAAA;EACA,WAAA;Ed1GA,mGAAA;EACA,8FAAA;EACA,qHAAA;EAAA,+FAAA;EACA,uHAAA;EACA,4BAAA;C9CyuMH;A4D9nMC;;EAEE,YAAA;EACA,sBAAA;EACA,WAAA;EtCxHF,0BAAA;EACA,aAAA;CtByvMD;A4DhqMD;;;;EAuCI,mBAAA;EACA,SAAA;EACA,WAAA;EACA,sBAAA;EACA,kBAAA;C5D+nMH;A4D1qMD;;EA+CI,UAAA;EACA,mBAAA;C5D+nMH;A4D/qMD;;EAoDI,WAAA;EACA,oBAAA;C5D+nMH;A4DprMD;;EAyDI,YAAA;EACA,aAAA;EACA,mBAAA;EACA,eAAA;C5D+nMH;A4D3nMG;EACE,iBAAA;C5D6nML;A4DznMG;EACE,iBAAA;C5D2nML;A4DjnMD;EACE,mBAAA;EACA,aAAA;EACA,UAAA;EACA,YAAA;EACA,WAAA;EACA,gBAAA;EACA,kBAAA;EACA,mBAAA;EACA,iBAAA;C5DmnMD;A4D5nMD;EAYI,sBAAA;EACA,YAAA;EACA,aAAA;EACA,YAAA;EACA,oBAAA;EACA,gBAAA;EAUA,0BAAA;EACA,mCAAA;EAEA,uBAAA;EACA,oBAAA;C5DymMH;A4DxoMD;EAmCI,YAAA;EACA,aAAA;EACA,UAAA;EACA,uBAAA;C5DwmMH;A4DjmMD;EACE,mBAAA;EACA,WAAA;EACA,aAAA;EACA,UAAA;EACA,YAAA;EACA,kBAAA;EACA,qBAAA;EACA,YAAA;EACA,mBAAA;EACA,0CAAA;C5DmmMD;A4DjmMC;EACE,kBAAA;C5DmmMH;A4D7lMD;EAGE;;;;IAKI,YAAA;IACA,aAAA;IACA,kBAAA;IACA,gBAAA;G5D4lMH;E4DpmMD;;IAYI,mBAAA;G5D4lMH;E4DxmMD;;IAgBI,oBAAA;G5D4lMH;E4DvlMD;IACE,WAAA;IACA,UAAA;IACA,qBAAA;G5DylMD;E4DrlMD;IACE,aAAA;G5DulMD;CACF;A6Dz1MC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAEE,eAAA;EACA,aAAA;C7Dy3MH;A6Dv3MC;;;;;;;;;;;;;;;;EACE,YAAA;C7Dw4MH;AiC94MD;E6BVE,eAAA;EACA,mBAAA;EACA,kBAAA;C9D25MD;AiCh5MD;EACE,wBAAA;CjCk5MD;AiCh5MD;EACE,uBAAA;CjCk5MD;AiC14MD;EACE,yBAAA;CjC44MD;AiC14MD;EACE,0BAAA;CjC44MD;AiC14MD;EACE,mBAAA;CjC44MD;AiC14MD;E8BzBE,YAAA;EACA,mBAAA;EACA,kBAAA;EACA,8BAAA;EACA,UAAA;C/Ds6MD;AiCx4MD;EACE,yBAAA;CjC04MD;AiCn4MD;EACE,gBAAA;CjCq4MD;AgEt6MD;EACE,oBAAA;ChEw6MD;AgEl6MD;;;;EClBE,yBAAA;CjE07MD;AgEj6MD;;;;;;;;;;;;EAYE,yBAAA;ChEm6MD;AgE/5MC;EAAA;ICjDA,0BAAA;GjEo9MC;EiEn9MD;IAAU,0BAAA;GjEs9MT;EiEr9MD;IAAU,8BAAA;GjEw9MT;EiEv9MD;;IACU,+BAAA;GjE09MT;CACF;AgEz6MC;EAAA;IACE,0BAAA;GhE46MD;CACF;AgEz6MC;EAAA;IACE,2BAAA;GhE46MD;CACF;AgEz6MC;EAAA;IACE,iCAAA;GhE46MD;CACF;AgEx6MC;EAAA;ICtEA,0BAAA;GjEk/MC;EiEj/MD;IAAU,0BAAA;GjEo/MT;EiEn/MD;IAAU,8BAAA;GjEs/MT;EiEr/MD;;IACU,+BAAA;GjEw/MT;CACF;AgEl7MC;EAAA;IACE,0BAAA;GhEq7MD;CACF;AgEl7MC;EAAA;IACE,2BAAA;GhEq7MD;CACF;AgEl7MC;EAAA;IACE,iCAAA;GhEq7MD;CACF;AgEj7MC;EAAA;IC3FA,0BAAA;GjEghNC;EiE/gND;IAAU,0BAAA;GjEkhNT;EiEjhND;IAAU,8BAAA;GjEohNT;EiEnhND;;IACU,+BAAA;GjEshNT;CACF;AgE37MC;EAAA;IACE,0BAAA;GhE87MD;CACF;AgE37MC;EAAA;IACE,2BAAA;GhE87MD;CACF;AgE37MC;EAAA;IACE,iCAAA;GhE87MD;CACF;AgE17MC;EAAA;IChHA,0BAAA;GjE8iNC;EiE7iND;IAAU,0BAAA;GjEgjNT;EiE/iND;IAAU,8BAAA;GjEkjNT;EiEjjND;;IACU,+BAAA;GjEojNT;CACF;AgEp8MC;EAAA;IACE,0BAAA;GhEu8MD;CACF;AgEp8MC;EAAA;IACE,2BAAA;GhEu8MD;CACF;AgEp8MC;EAAA;IACE,iCAAA;GhEu8MD;CACF;AgEn8MC;EAAA;IC7HA,yBAAA;GjEokNC;CACF;AgEn8MC;EAAA;IClIA,yBAAA;GjEykNC;CACF;AgEn8MC;EAAA;ICvIA,yBAAA;GjE8kNC;CACF;AgEn8MC;EAAA;IC5IA,yBAAA;GjEmlNC;CACF;AgE77MD;ECvJE,yBAAA;CjEulND;AgE77MC;EAAA;IClKA,0BAAA;GjEmmNC;EiElmND;IAAU,0BAAA;GjEqmNT;EiEpmND;IAAU,8BAAA;GjEumNT;EiEtmND;;IACU,+BAAA;GjEymNT;CACF;AgEx8MD;EACE,yBAAA;ChE08MD;AgEx8MC;EAAA;IACE,0BAAA;GhE28MD;CACF;AgEz8MD;EACE,yBAAA;ChE28MD;AgEz8MC;EAAA;IACE,2BAAA;GhE48MD;CACF;AgE18MD;EACE,yBAAA;ChE48MD;AgE18MC;EAAA;IACE,iCAAA;GhE68MD;CACF;AgEz8MC;EAAA;ICrLA,yBAAA;GjEkoNC;CACF","file":"bootstrap.css","sourcesContent":["/*!\n * Bootstrap v3.4.1 (https://getbootstrap.com/)\n * Copyright 2011-2019 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */\n/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */\nhtml {\n font-family: sans-serif;\n -ms-text-size-adjust: 100%;\n -webkit-text-size-adjust: 100%;\n}\nbody {\n margin: 0;\n}\narticle,\naside,\ndetails,\nfigcaption,\nfigure,\nfooter,\nheader,\nhgroup,\nmain,\nmenu,\nnav,\nsection,\nsummary {\n display: block;\n}\naudio,\ncanvas,\nprogress,\nvideo {\n display: inline-block;\n vertical-align: baseline;\n}\naudio:not([controls]) {\n display: none;\n height: 0;\n}\n[hidden],\ntemplate {\n display: none;\n}\na {\n background-color: transparent;\n}\na:active,\na:hover {\n outline: 0;\n}\nabbr[title] {\n border-bottom: none;\n text-decoration: underline;\n text-decoration: underline dotted;\n}\nb,\nstrong {\n font-weight: bold;\n}\ndfn {\n font-style: italic;\n}\nh1 {\n font-size: 2em;\n margin: 0.67em 0;\n}\nmark {\n background: #ff0;\n color: #000;\n}\nsmall {\n font-size: 80%;\n}\nsub,\nsup {\n font-size: 75%;\n line-height: 0;\n position: relative;\n vertical-align: baseline;\n}\nsup {\n top: -0.5em;\n}\nsub {\n bottom: -0.25em;\n}\nimg {\n border: 0;\n}\nsvg:not(:root) {\n overflow: hidden;\n}\nfigure {\n margin: 1em 40px;\n}\nhr {\n box-sizing: content-box;\n height: 0;\n}\npre {\n overflow: auto;\n}\ncode,\nkbd,\npre,\nsamp {\n font-family: monospace, monospace;\n font-size: 1em;\n}\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n color: inherit;\n font: inherit;\n margin: 0;\n}\nbutton {\n overflow: visible;\n}\nbutton,\nselect {\n text-transform: none;\n}\nbutton,\nhtml input[type=\"button\"],\ninput[type=\"reset\"],\ninput[type=\"submit\"] {\n -webkit-appearance: button;\n cursor: pointer;\n}\nbutton[disabled],\nhtml input[disabled] {\n cursor: default;\n}\nbutton::-moz-focus-inner,\ninput::-moz-focus-inner {\n border: 0;\n padding: 0;\n}\ninput {\n line-height: normal;\n}\ninput[type=\"checkbox\"],\ninput[type=\"radio\"] {\n box-sizing: border-box;\n padding: 0;\n}\ninput[type=\"number\"]::-webkit-inner-spin-button,\ninput[type=\"number\"]::-webkit-outer-spin-button {\n height: auto;\n}\ninput[type=\"search\"] {\n -webkit-appearance: textfield;\n box-sizing: content-box;\n}\ninput[type=\"search\"]::-webkit-search-cancel-button,\ninput[type=\"search\"]::-webkit-search-decoration {\n -webkit-appearance: none;\n}\nfieldset {\n border: 1px solid #c0c0c0;\n margin: 0 2px;\n padding: 0.35em 0.625em 0.75em;\n}\nlegend {\n border: 0;\n padding: 0;\n}\ntextarea {\n overflow: auto;\n}\noptgroup {\n font-weight: bold;\n}\ntable {\n border-collapse: collapse;\n border-spacing: 0;\n}\ntd,\nth {\n padding: 0;\n}\n/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */\n@media print {\n *,\n *:before,\n *:after {\n color: #000 !important;\n text-shadow: none !important;\n background: transparent !important;\n box-shadow: none !important;\n }\n a,\n a:visited {\n text-decoration: underline;\n }\n a[href]:after {\n content: \" (\" attr(href) \")\";\n }\n abbr[title]:after {\n content: \" (\" attr(title) \")\";\n }\n a[href^=\"#\"]:after,\n a[href^=\"javascript:\"]:after {\n content: \"\";\n }\n pre,\n blockquote {\n border: 1px solid #999;\n page-break-inside: avoid;\n }\n thead {\n display: table-header-group;\n }\n tr,\n img {\n page-break-inside: avoid;\n }\n img {\n max-width: 100% !important;\n }\n p,\n h2,\n h3 {\n orphans: 3;\n widows: 3;\n }\n h2,\n h3 {\n page-break-after: avoid;\n }\n .navbar {\n display: none;\n }\n .btn > .caret,\n .dropup > .btn > .caret {\n border-top-color: #000 !important;\n }\n .label {\n border: 1px solid #000;\n }\n .table {\n border-collapse: collapse !important;\n }\n .table td,\n .table th {\n background-color: #fff !important;\n }\n .table-bordered th,\n .table-bordered td {\n border: 1px solid #ddd !important;\n }\n}\n@font-face {\n font-family: \"Glyphicons Halflings\";\n src: url(\"../fonts/glyphicons-halflings-regular.eot\");\n src: url(\"../fonts/glyphicons-halflings-regular.eot?#iefix\") format(\"embedded-opentype\"), url(\"../fonts/glyphicons-halflings-regular.woff2\") format(\"woff2\"), url(\"../fonts/glyphicons-halflings-regular.woff\") format(\"woff\"), url(\"../fonts/glyphicons-halflings-regular.ttf\") format(\"truetype\"), url(\"../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular\") format(\"svg\");\n}\n.glyphicon {\n position: relative;\n top: 1px;\n display: inline-block;\n font-family: \"Glyphicons Halflings\";\n font-style: normal;\n font-weight: 400;\n line-height: 1;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n}\n.glyphicon-asterisk:before {\n content: \"\\002a\";\n}\n.glyphicon-plus:before {\n content: \"\\002b\";\n}\n.glyphicon-euro:before,\n.glyphicon-eur:before {\n content: \"\\20ac\";\n}\n.glyphicon-minus:before {\n content: \"\\2212\";\n}\n.glyphicon-cloud:before {\n content: \"\\2601\";\n}\n.glyphicon-envelope:before {\n content: \"\\2709\";\n}\n.glyphicon-pencil:before {\n content: \"\\270f\";\n}\n.glyphicon-glass:before {\n content: \"\\e001\";\n}\n.glyphicon-music:before {\n content: \"\\e002\";\n}\n.glyphicon-search:before {\n content: \"\\e003\";\n}\n.glyphicon-heart:before {\n content: \"\\e005\";\n}\n.glyphicon-star:before {\n content: \"\\e006\";\n}\n.glyphicon-star-empty:before {\n content: \"\\e007\";\n}\n.glyphicon-user:before {\n content: \"\\e008\";\n}\n.glyphicon-film:before {\n content: \"\\e009\";\n}\n.glyphicon-th-large:before {\n content: \"\\e010\";\n}\n.glyphicon-th:before {\n content: \"\\e011\";\n}\n.glyphicon-th-list:before {\n content: \"\\e012\";\n}\n.glyphicon-ok:before {\n content: \"\\e013\";\n}\n.glyphicon-remove:before {\n content: \"\\e014\";\n}\n.glyphicon-zoom-in:before {\n content: \"\\e015\";\n}\n.glyphicon-zoom-out:before {\n content: \"\\e016\";\n}\n.glyphicon-off:before {\n content: \"\\e017\";\n}\n.glyphicon-signal:before {\n content: \"\\e018\";\n}\n.glyphicon-cog:before {\n content: \"\\e019\";\n}\n.glyphicon-trash:before {\n content: \"\\e020\";\n}\n.glyphicon-home:before {\n content: \"\\e021\";\n}\n.glyphicon-file:before {\n content: \"\\e022\";\n}\n.glyphicon-time:before {\n content: \"\\e023\";\n}\n.glyphicon-road:before {\n content: \"\\e024\";\n}\n.glyphicon-download-alt:before {\n content: \"\\e025\";\n}\n.glyphicon-download:before {\n content: \"\\e026\";\n}\n.glyphicon-upload:before {\n content: \"\\e027\";\n}\n.glyphicon-inbox:before {\n content: \"\\e028\";\n}\n.glyphicon-play-circle:before {\n content: \"\\e029\";\n}\n.glyphicon-repeat:before {\n content: \"\\e030\";\n}\n.glyphicon-refresh:before {\n content: \"\\e031\";\n}\n.glyphicon-list-alt:before {\n content: \"\\e032\";\n}\n.glyphicon-lock:before {\n content: \"\\e033\";\n}\n.glyphicon-flag:before {\n content: \"\\e034\";\n}\n.glyphicon-headphones:before {\n content: \"\\e035\";\n}\n.glyphicon-volume-off:before {\n content: \"\\e036\";\n}\n.glyphicon-volume-down:before {\n content: \"\\e037\";\n}\n.glyphicon-volume-up:before {\n content: \"\\e038\";\n}\n.glyphicon-qrcode:before {\n content: \"\\e039\";\n}\n.glyphicon-barcode:before {\n content: \"\\e040\";\n}\n.glyphicon-tag:before {\n content: \"\\e041\";\n}\n.glyphicon-tags:before {\n content: \"\\e042\";\n}\n.glyphicon-book:before {\n content: \"\\e043\";\n}\n.glyphicon-bookmark:before {\n content: \"\\e044\";\n}\n.glyphicon-print:before {\n content: \"\\e045\";\n}\n.glyphicon-camera:before {\n content: \"\\e046\";\n}\n.glyphicon-font:before {\n content: \"\\e047\";\n}\n.glyphicon-bold:before {\n content: \"\\e048\";\n}\n.glyphicon-italic:before {\n content: \"\\e049\";\n}\n.glyphicon-text-height:before {\n content: \"\\e050\";\n}\n.glyphicon-text-width:before {\n content: \"\\e051\";\n}\n.glyphicon-align-left:before {\n content: \"\\e052\";\n}\n.glyphicon-align-center:before {\n content: \"\\e053\";\n}\n.glyphicon-align-right:before {\n content: \"\\e054\";\n}\n.glyphicon-align-justify:before {\n content: \"\\e055\";\n}\n.glyphicon-list:before {\n content: \"\\e056\";\n}\n.glyphicon-indent-left:before {\n content: \"\\e057\";\n}\n.glyphicon-indent-right:before {\n content: \"\\e058\";\n}\n.glyphicon-facetime-video:before {\n content: \"\\e059\";\n}\n.glyphicon-picture:before {\n content: \"\\e060\";\n}\n.glyphicon-map-marker:before {\n content: \"\\e062\";\n}\n.glyphicon-adjust:before {\n content: \"\\e063\";\n}\n.glyphicon-tint:before {\n content: \"\\e064\";\n}\n.glyphicon-edit:before {\n content: \"\\e065\";\n}\n.glyphicon-share:before {\n content: \"\\e066\";\n}\n.glyphicon-check:before {\n content: \"\\e067\";\n}\n.glyphicon-move:before {\n content: \"\\e068\";\n}\n.glyphicon-step-backward:before {\n content: \"\\e069\";\n}\n.glyphicon-fast-backward:before {\n content: \"\\e070\";\n}\n.glyphicon-backward:before {\n content: \"\\e071\";\n}\n.glyphicon-play:before {\n content: \"\\e072\";\n}\n.glyphicon-pause:before {\n content: \"\\e073\";\n}\n.glyphicon-stop:before {\n content: \"\\e074\";\n}\n.glyphicon-forward:before {\n content: \"\\e075\";\n}\n.glyphicon-fast-forward:before {\n content: \"\\e076\";\n}\n.glyphicon-step-forward:before {\n content: \"\\e077\";\n}\n.glyphicon-eject:before {\n content: \"\\e078\";\n}\n.glyphicon-chevron-left:before {\n content: \"\\e079\";\n}\n.glyphicon-chevron-right:before {\n content: \"\\e080\";\n}\n.glyphicon-plus-sign:before {\n content: \"\\e081\";\n}\n.glyphicon-minus-sign:before {\n content: \"\\e082\";\n}\n.glyphicon-remove-sign:before {\n content: \"\\e083\";\n}\n.glyphicon-ok-sign:before {\n content: \"\\e084\";\n}\n.glyphicon-question-sign:before {\n content: \"\\e085\";\n}\n.glyphicon-info-sign:before {\n content: \"\\e086\";\n}\n.glyphicon-screenshot:before {\n content: \"\\e087\";\n}\n.glyphicon-remove-circle:before {\n content: \"\\e088\";\n}\n.glyphicon-ok-circle:before {\n content: \"\\e089\";\n}\n.glyphicon-ban-circle:before {\n content: \"\\e090\";\n}\n.glyphicon-arrow-left:before {\n content: \"\\e091\";\n}\n.glyphicon-arrow-right:before {\n content: \"\\e092\";\n}\n.glyphicon-arrow-up:before {\n content: \"\\e093\";\n}\n.glyphicon-arrow-down:before {\n content: \"\\e094\";\n}\n.glyphicon-share-alt:before {\n content: \"\\e095\";\n}\n.glyphicon-resize-full:before {\n content: \"\\e096\";\n}\n.glyphicon-resize-small:before {\n content: \"\\e097\";\n}\n.glyphicon-exclamation-sign:before {\n content: \"\\e101\";\n}\n.glyphicon-gift:before {\n content: \"\\e102\";\n}\n.glyphicon-leaf:before {\n content: \"\\e103\";\n}\n.glyphicon-fire:before {\n content: \"\\e104\";\n}\n.glyphicon-eye-open:before {\n content: \"\\e105\";\n}\n.glyphicon-eye-close:before {\n content: \"\\e106\";\n}\n.glyphicon-warning-sign:before {\n content: \"\\e107\";\n}\n.glyphicon-plane:before {\n content: \"\\e108\";\n}\n.glyphicon-calendar:before {\n content: \"\\e109\";\n}\n.glyphicon-random:before {\n content: \"\\e110\";\n}\n.glyphicon-comment:before {\n content: \"\\e111\";\n}\n.glyphicon-magnet:before {\n content: \"\\e112\";\n}\n.glyphicon-chevron-up:before {\n content: \"\\e113\";\n}\n.glyphicon-chevron-down:before {\n content: \"\\e114\";\n}\n.glyphicon-retweet:before {\n content: \"\\e115\";\n}\n.glyphicon-shopping-cart:before {\n content: \"\\e116\";\n}\n.glyphicon-folder-close:before {\n content: \"\\e117\";\n}\n.glyphicon-folder-open:before {\n content: \"\\e118\";\n}\n.glyphicon-resize-vertical:before {\n content: \"\\e119\";\n}\n.glyphicon-resize-horizontal:before {\n content: \"\\e120\";\n}\n.glyphicon-hdd:before {\n content: \"\\e121\";\n}\n.glyphicon-bullhorn:before {\n content: \"\\e122\";\n}\n.glyphicon-bell:before {\n content: \"\\e123\";\n}\n.glyphicon-certificate:before {\n content: \"\\e124\";\n}\n.glyphicon-thumbs-up:before {\n content: \"\\e125\";\n}\n.glyphicon-thumbs-down:before {\n content: \"\\e126\";\n}\n.glyphicon-hand-right:before {\n content: \"\\e127\";\n}\n.glyphicon-hand-left:before {\n content: \"\\e128\";\n}\n.glyphicon-hand-up:before {\n content: \"\\e129\";\n}\n.glyphicon-hand-down:before {\n content: \"\\e130\";\n}\n.glyphicon-circle-arrow-right:before {\n content: \"\\e131\";\n}\n.glyphicon-circle-arrow-left:before {\n content: \"\\e132\";\n}\n.glyphicon-circle-arrow-up:before {\n content: \"\\e133\";\n}\n.glyphicon-circle-arrow-down:before {\n content: \"\\e134\";\n}\n.glyphicon-globe:before {\n content: \"\\e135\";\n}\n.glyphicon-wrench:before {\n content: \"\\e136\";\n}\n.glyphicon-tasks:before {\n content: \"\\e137\";\n}\n.glyphicon-filter:before {\n content: \"\\e138\";\n}\n.glyphicon-briefcase:before {\n content: \"\\e139\";\n}\n.glyphicon-fullscreen:before {\n content: \"\\e140\";\n}\n.glyphicon-dashboard:before {\n content: \"\\e141\";\n}\n.glyphicon-paperclip:before {\n content: \"\\e142\";\n}\n.glyphicon-heart-empty:before {\n content: \"\\e143\";\n}\n.glyphicon-link:before {\n content: \"\\e144\";\n}\n.glyphicon-phone:before {\n content: \"\\e145\";\n}\n.glyphicon-pushpin:before {\n content: \"\\e146\";\n}\n.glyphicon-usd:before {\n content: \"\\e148\";\n}\n.glyphicon-gbp:before {\n content: \"\\e149\";\n}\n.glyphicon-sort:before {\n content: \"\\e150\";\n}\n.glyphicon-sort-by-alphabet:before {\n content: \"\\e151\";\n}\n.glyphicon-sort-by-alphabet-alt:before {\n content: \"\\e152\";\n}\n.glyphicon-sort-by-order:before {\n content: \"\\e153\";\n}\n.glyphicon-sort-by-order-alt:before {\n content: \"\\e154\";\n}\n.glyphicon-sort-by-attributes:before {\n content: \"\\e155\";\n}\n.glyphicon-sort-by-attributes-alt:before {\n content: \"\\e156\";\n}\n.glyphicon-unchecked:before {\n content: \"\\e157\";\n}\n.glyphicon-expand:before {\n content: \"\\e158\";\n}\n.glyphicon-collapse-down:before {\n content: \"\\e159\";\n}\n.glyphicon-collapse-up:before {\n content: \"\\e160\";\n}\n.glyphicon-log-in:before {\n content: \"\\e161\";\n}\n.glyphicon-flash:before {\n content: \"\\e162\";\n}\n.glyphicon-log-out:before {\n content: \"\\e163\";\n}\n.glyphicon-new-window:before {\n content: \"\\e164\";\n}\n.glyphicon-record:before {\n content: \"\\e165\";\n}\n.glyphicon-save:before {\n content: \"\\e166\";\n}\n.glyphicon-open:before {\n content: \"\\e167\";\n}\n.glyphicon-saved:before {\n content: \"\\e168\";\n}\n.glyphicon-import:before {\n content: \"\\e169\";\n}\n.glyphicon-export:before {\n content: \"\\e170\";\n}\n.glyphicon-send:before {\n content: \"\\e171\";\n}\n.glyphicon-floppy-disk:before {\n content: \"\\e172\";\n}\n.glyphicon-floppy-saved:before {\n content: \"\\e173\";\n}\n.glyphicon-floppy-remove:before {\n content: \"\\e174\";\n}\n.glyphicon-floppy-save:before {\n content: \"\\e175\";\n}\n.glyphicon-floppy-open:before {\n content: \"\\e176\";\n}\n.glyphicon-credit-card:before {\n content: \"\\e177\";\n}\n.glyphicon-transfer:before {\n content: \"\\e178\";\n}\n.glyphicon-cutlery:before {\n content: \"\\e179\";\n}\n.glyphicon-header:before {\n content: \"\\e180\";\n}\n.glyphicon-compressed:before {\n content: \"\\e181\";\n}\n.glyphicon-earphone:before {\n content: \"\\e182\";\n}\n.glyphicon-phone-alt:before {\n content: \"\\e183\";\n}\n.glyphicon-tower:before {\n content: \"\\e184\";\n}\n.glyphicon-stats:before {\n content: \"\\e185\";\n}\n.glyphicon-sd-video:before {\n content: \"\\e186\";\n}\n.glyphicon-hd-video:before {\n content: \"\\e187\";\n}\n.glyphicon-subtitles:before {\n content: \"\\e188\";\n}\n.glyphicon-sound-stereo:before {\n content: \"\\e189\";\n}\n.glyphicon-sound-dolby:before {\n content: \"\\e190\";\n}\n.glyphicon-sound-5-1:before {\n content: \"\\e191\";\n}\n.glyphicon-sound-6-1:before {\n content: \"\\e192\";\n}\n.glyphicon-sound-7-1:before {\n content: \"\\e193\";\n}\n.glyphicon-copyright-mark:before {\n content: \"\\e194\";\n}\n.glyphicon-registration-mark:before {\n content: \"\\e195\";\n}\n.glyphicon-cloud-download:before {\n content: \"\\e197\";\n}\n.glyphicon-cloud-upload:before {\n content: \"\\e198\";\n}\n.glyphicon-tree-conifer:before {\n content: \"\\e199\";\n}\n.glyphicon-tree-deciduous:before {\n content: \"\\e200\";\n}\n.glyphicon-cd:before {\n content: \"\\e201\";\n}\n.glyphicon-save-file:before {\n content: \"\\e202\";\n}\n.glyphicon-open-file:before {\n content: \"\\e203\";\n}\n.glyphicon-level-up:before {\n content: \"\\e204\";\n}\n.glyphicon-copy:before {\n content: \"\\e205\";\n}\n.glyphicon-paste:before {\n content: \"\\e206\";\n}\n.glyphicon-alert:before {\n content: \"\\e209\";\n}\n.glyphicon-equalizer:before {\n content: \"\\e210\";\n}\n.glyphicon-king:before {\n content: \"\\e211\";\n}\n.glyphicon-queen:before {\n content: \"\\e212\";\n}\n.glyphicon-pawn:before {\n content: \"\\e213\";\n}\n.glyphicon-bishop:before {\n content: \"\\e214\";\n}\n.glyphicon-knight:before {\n content: \"\\e215\";\n}\n.glyphicon-baby-formula:before {\n content: \"\\e216\";\n}\n.glyphicon-tent:before {\n content: \"\\26fa\";\n}\n.glyphicon-blackboard:before {\n content: \"\\e218\";\n}\n.glyphicon-bed:before {\n content: \"\\e219\";\n}\n.glyphicon-apple:before {\n content: \"\\f8ff\";\n}\n.glyphicon-erase:before {\n content: \"\\e221\";\n}\n.glyphicon-hourglass:before {\n content: \"\\231b\";\n}\n.glyphicon-lamp:before {\n content: \"\\e223\";\n}\n.glyphicon-duplicate:before {\n content: \"\\e224\";\n}\n.glyphicon-piggy-bank:before {\n content: \"\\e225\";\n}\n.glyphicon-scissors:before {\n content: \"\\e226\";\n}\n.glyphicon-bitcoin:before {\n content: \"\\e227\";\n}\n.glyphicon-btc:before {\n content: \"\\e227\";\n}\n.glyphicon-xbt:before {\n content: \"\\e227\";\n}\n.glyphicon-yen:before {\n content: \"\\00a5\";\n}\n.glyphicon-jpy:before {\n content: \"\\00a5\";\n}\n.glyphicon-ruble:before {\n content: \"\\20bd\";\n}\n.glyphicon-rub:before {\n content: \"\\20bd\";\n}\n.glyphicon-scale:before {\n content: \"\\e230\";\n}\n.glyphicon-ice-lolly:before {\n content: \"\\e231\";\n}\n.glyphicon-ice-lolly-tasted:before {\n content: \"\\e232\";\n}\n.glyphicon-education:before {\n content: \"\\e233\";\n}\n.glyphicon-option-horizontal:before {\n content: \"\\e234\";\n}\n.glyphicon-option-vertical:before {\n content: \"\\e235\";\n}\n.glyphicon-menu-hamburger:before {\n content: \"\\e236\";\n}\n.glyphicon-modal-window:before {\n content: \"\\e237\";\n}\n.glyphicon-oil:before {\n content: \"\\e238\";\n}\n.glyphicon-grain:before {\n content: \"\\e239\";\n}\n.glyphicon-sunglasses:before {\n content: \"\\e240\";\n}\n.glyphicon-text-size:before {\n content: \"\\e241\";\n}\n.glyphicon-text-color:before {\n content: \"\\e242\";\n}\n.glyphicon-text-background:before {\n content: \"\\e243\";\n}\n.glyphicon-object-align-top:before {\n content: \"\\e244\";\n}\n.glyphicon-object-align-bottom:before {\n content: \"\\e245\";\n}\n.glyphicon-object-align-horizontal:before {\n content: \"\\e246\";\n}\n.glyphicon-object-align-left:before {\n content: \"\\e247\";\n}\n.glyphicon-object-align-vertical:before {\n content: \"\\e248\";\n}\n.glyphicon-object-align-right:before {\n content: \"\\e249\";\n}\n.glyphicon-triangle-right:before {\n content: \"\\e250\";\n}\n.glyphicon-triangle-left:before {\n content: \"\\e251\";\n}\n.glyphicon-triangle-bottom:before {\n content: \"\\e252\";\n}\n.glyphicon-triangle-top:before {\n content: \"\\e253\";\n}\n.glyphicon-console:before {\n content: \"\\e254\";\n}\n.glyphicon-superscript:before {\n content: \"\\e255\";\n}\n.glyphicon-subscript:before {\n content: \"\\e256\";\n}\n.glyphicon-menu-left:before {\n content: \"\\e257\";\n}\n.glyphicon-menu-right:before {\n content: \"\\e258\";\n}\n.glyphicon-menu-down:before {\n content: \"\\e259\";\n}\n.glyphicon-menu-up:before {\n content: \"\\e260\";\n}\n* {\n -webkit-box-sizing: border-box;\n -moz-box-sizing: border-box;\n box-sizing: border-box;\n}\n*:before,\n*:after {\n -webkit-box-sizing: border-box;\n -moz-box-sizing: border-box;\n box-sizing: border-box;\n}\nhtml {\n font-size: 10px;\n -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n}\nbody {\n font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n font-size: 14px;\n line-height: 1.42857143;\n color: #333333;\n background-color: #fff;\n}\ninput,\nbutton,\nselect,\ntextarea {\n font-family: inherit;\n font-size: inherit;\n line-height: inherit;\n}\na {\n color: #337ab7;\n text-decoration: none;\n}\na:hover,\na:focus {\n color: #23527c;\n text-decoration: underline;\n}\na:focus {\n outline: 5px auto -webkit-focus-ring-color;\n outline-offset: -2px;\n}\nfigure {\n margin: 0;\n}\nimg {\n vertical-align: middle;\n}\n.img-responsive,\n.thumbnail > img,\n.thumbnail a > img,\n.carousel-inner > .item > img,\n.carousel-inner > .item > a > img {\n display: block;\n max-width: 100%;\n height: auto;\n}\n.img-rounded {\n border-radius: 6px;\n}\n.img-thumbnail {\n padding: 4px;\n line-height: 1.42857143;\n background-color: #fff;\n border: 1px solid #ddd;\n border-radius: 4px;\n -webkit-transition: all 0.2s ease-in-out;\n -o-transition: all 0.2s ease-in-out;\n transition: all 0.2s ease-in-out;\n display: inline-block;\n max-width: 100%;\n height: auto;\n}\n.img-circle {\n border-radius: 50%;\n}\nhr {\n margin-top: 20px;\n margin-bottom: 20px;\n border: 0;\n border-top: 1px solid #eeeeee;\n}\n.sr-only {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n border: 0;\n}\n.sr-only-focusable:active,\n.sr-only-focusable:focus {\n position: static;\n width: auto;\n height: auto;\n margin: 0;\n overflow: visible;\n clip: auto;\n}\n[role=\"button\"] {\n cursor: pointer;\n}\nh1,\nh2,\nh3,\nh4,\nh5,\nh6,\n.h1,\n.h2,\n.h3,\n.h4,\n.h5,\n.h6 {\n font-family: inherit;\n font-weight: 500;\n line-height: 1.1;\n color: inherit;\n}\nh1 small,\nh2 small,\nh3 small,\nh4 small,\nh5 small,\nh6 small,\n.h1 small,\n.h2 small,\n.h3 small,\n.h4 small,\n.h5 small,\n.h6 small,\nh1 .small,\nh2 .small,\nh3 .small,\nh4 .small,\nh5 .small,\nh6 .small,\n.h1 .small,\n.h2 .small,\n.h3 .small,\n.h4 .small,\n.h5 .small,\n.h6 .small {\n font-weight: 400;\n line-height: 1;\n color: #777777;\n}\nh1,\n.h1,\nh2,\n.h2,\nh3,\n.h3 {\n margin-top: 20px;\n margin-bottom: 10px;\n}\nh1 small,\n.h1 small,\nh2 small,\n.h2 small,\nh3 small,\n.h3 small,\nh1 .small,\n.h1 .small,\nh2 .small,\n.h2 .small,\nh3 .small,\n.h3 .small {\n font-size: 65%;\n}\nh4,\n.h4,\nh5,\n.h5,\nh6,\n.h6 {\n margin-top: 10px;\n margin-bottom: 10px;\n}\nh4 small,\n.h4 small,\nh5 small,\n.h5 small,\nh6 small,\n.h6 small,\nh4 .small,\n.h4 .small,\nh5 .small,\n.h5 .small,\nh6 .small,\n.h6 .small {\n font-size: 75%;\n}\nh1,\n.h1 {\n font-size: 36px;\n}\nh2,\n.h2 {\n font-size: 30px;\n}\nh3,\n.h3 {\n font-size: 24px;\n}\nh4,\n.h4 {\n font-size: 18px;\n}\nh5,\n.h5 {\n font-size: 14px;\n}\nh6,\n.h6 {\n font-size: 12px;\n}\np {\n margin: 0 0 10px;\n}\n.lead {\n margin-bottom: 20px;\n font-size: 16px;\n font-weight: 300;\n line-height: 1.4;\n}\n@media (min-width: 768px) {\n .lead {\n font-size: 21px;\n }\n}\nsmall,\n.small {\n font-size: 85%;\n}\nmark,\n.mark {\n padding: 0.2em;\n background-color: #fcf8e3;\n}\n.text-left {\n text-align: left;\n}\n.text-right {\n text-align: right;\n}\n.text-center {\n text-align: center;\n}\n.text-justify {\n text-align: justify;\n}\n.text-nowrap {\n white-space: nowrap;\n}\n.text-lowercase {\n text-transform: lowercase;\n}\n.text-uppercase {\n text-transform: uppercase;\n}\n.text-capitalize {\n text-transform: capitalize;\n}\n.text-muted {\n color: #777777;\n}\n.text-primary {\n color: #337ab7;\n}\na.text-primary:hover,\na.text-primary:focus {\n color: #286090;\n}\n.text-success {\n color: #3c763d;\n}\na.text-success:hover,\na.text-success:focus {\n color: #2b542c;\n}\n.text-info {\n color: #31708f;\n}\na.text-info:hover,\na.text-info:focus {\n color: #245269;\n}\n.text-warning {\n color: #8a6d3b;\n}\na.text-warning:hover,\na.text-warning:focus {\n color: #66512c;\n}\n.text-danger {\n color: #a94442;\n}\na.text-danger:hover,\na.text-danger:focus {\n color: #843534;\n}\n.bg-primary {\n color: #fff;\n background-color: #337ab7;\n}\na.bg-primary:hover,\na.bg-primary:focus {\n background-color: #286090;\n}\n.bg-success {\n background-color: #dff0d8;\n}\na.bg-success:hover,\na.bg-success:focus {\n background-color: #c1e2b3;\n}\n.bg-info {\n background-color: #d9edf7;\n}\na.bg-info:hover,\na.bg-info:focus {\n background-color: #afd9ee;\n}\n.bg-warning {\n background-color: #fcf8e3;\n}\na.bg-warning:hover,\na.bg-warning:focus {\n background-color: #f7ecb5;\n}\n.bg-danger {\n background-color: #f2dede;\n}\na.bg-danger:hover,\na.bg-danger:focus {\n background-color: #e4b9b9;\n}\n.page-header {\n padding-bottom: 9px;\n margin: 40px 0 20px;\n border-bottom: 1px solid #eeeeee;\n}\nul,\nol {\n margin-top: 0;\n margin-bottom: 10px;\n}\nul ul,\nol ul,\nul ol,\nol ol {\n margin-bottom: 0;\n}\n.list-unstyled {\n padding-left: 0;\n list-style: none;\n}\n.list-inline {\n padding-left: 0;\n list-style: none;\n margin-left: -5px;\n}\n.list-inline > li {\n display: inline-block;\n padding-right: 5px;\n padding-left: 5px;\n}\ndl {\n margin-top: 0;\n margin-bottom: 20px;\n}\ndt,\ndd {\n line-height: 1.42857143;\n}\ndt {\n font-weight: 700;\n}\ndd {\n margin-left: 0;\n}\n@media (min-width: 768px) {\n .dl-horizontal dt {\n float: left;\n width: 160px;\n clear: left;\n text-align: right;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n .dl-horizontal dd {\n margin-left: 180px;\n }\n}\nabbr[title],\nabbr[data-original-title] {\n cursor: help;\n}\n.initialism {\n font-size: 90%;\n text-transform: uppercase;\n}\nblockquote {\n padding: 10px 20px;\n margin: 0 0 20px;\n font-size: 17.5px;\n border-left: 5px solid #eeeeee;\n}\nblockquote p:last-child,\nblockquote ul:last-child,\nblockquote ol:last-child {\n margin-bottom: 0;\n}\nblockquote footer,\nblockquote small,\nblockquote .small {\n display: block;\n font-size: 80%;\n line-height: 1.42857143;\n color: #777777;\n}\nblockquote footer:before,\nblockquote small:before,\nblockquote .small:before {\n content: \"\\2014 \\00A0\";\n}\n.blockquote-reverse,\nblockquote.pull-right {\n padding-right: 15px;\n padding-left: 0;\n text-align: right;\n border-right: 5px solid #eeeeee;\n border-left: 0;\n}\n.blockquote-reverse footer:before,\nblockquote.pull-right footer:before,\n.blockquote-reverse small:before,\nblockquote.pull-right small:before,\n.blockquote-reverse .small:before,\nblockquote.pull-right .small:before {\n content: \"\";\n}\n.blockquote-reverse footer:after,\nblockquote.pull-right footer:after,\n.blockquote-reverse small:after,\nblockquote.pull-right small:after,\n.blockquote-reverse .small:after,\nblockquote.pull-right .small:after {\n content: \"\\00A0 \\2014\";\n}\naddress {\n margin-bottom: 20px;\n font-style: normal;\n line-height: 1.42857143;\n}\ncode,\nkbd,\npre,\nsamp {\n font-family: Menlo, Monaco, Consolas, \"Courier New\", monospace;\n}\ncode {\n padding: 2px 4px;\n font-size: 90%;\n color: #c7254e;\n background-color: #f9f2f4;\n border-radius: 4px;\n}\nkbd {\n padding: 2px 4px;\n font-size: 90%;\n color: #fff;\n background-color: #333;\n border-radius: 3px;\n box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.25);\n}\nkbd kbd {\n padding: 0;\n font-size: 100%;\n font-weight: 700;\n box-shadow: none;\n}\npre {\n display: block;\n padding: 9.5px;\n margin: 0 0 10px;\n font-size: 13px;\n line-height: 1.42857143;\n color: #333333;\n word-break: break-all;\n word-wrap: break-word;\n background-color: #f5f5f5;\n border: 1px solid #ccc;\n border-radius: 4px;\n}\npre code {\n padding: 0;\n font-size: inherit;\n color: inherit;\n white-space: pre-wrap;\n background-color: transparent;\n border-radius: 0;\n}\n.pre-scrollable {\n max-height: 340px;\n overflow-y: scroll;\n}\n.container {\n padding-right: 15px;\n padding-left: 15px;\n margin-right: auto;\n margin-left: auto;\n}\n@media (min-width: 768px) {\n .container {\n width: 750px;\n }\n}\n@media (min-width: 992px) {\n .container {\n width: 970px;\n }\n}\n@media (min-width: 1200px) {\n .container {\n width: 1170px;\n }\n}\n.container-fluid {\n padding-right: 15px;\n padding-left: 15px;\n margin-right: auto;\n margin-left: auto;\n}\n.row {\n margin-right: -15px;\n margin-left: -15px;\n}\n.row-no-gutters {\n margin-right: 0;\n margin-left: 0;\n}\n.row-no-gutters [class*=\"col-\"] {\n padding-right: 0;\n padding-left: 0;\n}\n.col-xs-1,\n.col-sm-1,\n.col-md-1,\n.col-lg-1,\n.col-xs-2,\n.col-sm-2,\n.col-md-2,\n.col-lg-2,\n.col-xs-3,\n.col-sm-3,\n.col-md-3,\n.col-lg-3,\n.col-xs-4,\n.col-sm-4,\n.col-md-4,\n.col-lg-4,\n.col-xs-5,\n.col-sm-5,\n.col-md-5,\n.col-lg-5,\n.col-xs-6,\n.col-sm-6,\n.col-md-6,\n.col-lg-6,\n.col-xs-7,\n.col-sm-7,\n.col-md-7,\n.col-lg-7,\n.col-xs-8,\n.col-sm-8,\n.col-md-8,\n.col-lg-8,\n.col-xs-9,\n.col-sm-9,\n.col-md-9,\n.col-lg-9,\n.col-xs-10,\n.col-sm-10,\n.col-md-10,\n.col-lg-10,\n.col-xs-11,\n.col-sm-11,\n.col-md-11,\n.col-lg-11,\n.col-xs-12,\n.col-sm-12,\n.col-md-12,\n.col-lg-12 {\n position: relative;\n min-height: 1px;\n padding-right: 15px;\n padding-left: 15px;\n}\n.col-xs-1,\n.col-xs-2,\n.col-xs-3,\n.col-xs-4,\n.col-xs-5,\n.col-xs-6,\n.col-xs-7,\n.col-xs-8,\n.col-xs-9,\n.col-xs-10,\n.col-xs-11,\n.col-xs-12 {\n float: left;\n}\n.col-xs-12 {\n width: 100%;\n}\n.col-xs-11 {\n width: 91.66666667%;\n}\n.col-xs-10 {\n width: 83.33333333%;\n}\n.col-xs-9 {\n width: 75%;\n}\n.col-xs-8 {\n width: 66.66666667%;\n}\n.col-xs-7 {\n width: 58.33333333%;\n}\n.col-xs-6 {\n width: 50%;\n}\n.col-xs-5 {\n width: 41.66666667%;\n}\n.col-xs-4 {\n width: 33.33333333%;\n}\n.col-xs-3 {\n width: 25%;\n}\n.col-xs-2 {\n width: 16.66666667%;\n}\n.col-xs-1 {\n width: 8.33333333%;\n}\n.col-xs-pull-12 {\n right: 100%;\n}\n.col-xs-pull-11 {\n right: 91.66666667%;\n}\n.col-xs-pull-10 {\n right: 83.33333333%;\n}\n.col-xs-pull-9 {\n right: 75%;\n}\n.col-xs-pull-8 {\n right: 66.66666667%;\n}\n.col-xs-pull-7 {\n right: 58.33333333%;\n}\n.col-xs-pull-6 {\n right: 50%;\n}\n.col-xs-pull-5 {\n right: 41.66666667%;\n}\n.col-xs-pull-4 {\n right: 33.33333333%;\n}\n.col-xs-pull-3 {\n right: 25%;\n}\n.col-xs-pull-2 {\n right: 16.66666667%;\n}\n.col-xs-pull-1 {\n right: 8.33333333%;\n}\n.col-xs-pull-0 {\n right: auto;\n}\n.col-xs-push-12 {\n left: 100%;\n}\n.col-xs-push-11 {\n left: 91.66666667%;\n}\n.col-xs-push-10 {\n left: 83.33333333%;\n}\n.col-xs-push-9 {\n left: 75%;\n}\n.col-xs-push-8 {\n left: 66.66666667%;\n}\n.col-xs-push-7 {\n left: 58.33333333%;\n}\n.col-xs-push-6 {\n left: 50%;\n}\n.col-xs-push-5 {\n left: 41.66666667%;\n}\n.col-xs-push-4 {\n left: 33.33333333%;\n}\n.col-xs-push-3 {\n left: 25%;\n}\n.col-xs-push-2 {\n left: 16.66666667%;\n}\n.col-xs-push-1 {\n left: 8.33333333%;\n}\n.col-xs-push-0 {\n left: auto;\n}\n.col-xs-offset-12 {\n margin-left: 100%;\n}\n.col-xs-offset-11 {\n margin-left: 91.66666667%;\n}\n.col-xs-offset-10 {\n margin-left: 83.33333333%;\n}\n.col-xs-offset-9 {\n margin-left: 75%;\n}\n.col-xs-offset-8 {\n margin-left: 66.66666667%;\n}\n.col-xs-offset-7 {\n margin-left: 58.33333333%;\n}\n.col-xs-offset-6 {\n margin-left: 50%;\n}\n.col-xs-offset-5 {\n margin-left: 41.66666667%;\n}\n.col-xs-offset-4 {\n margin-left: 33.33333333%;\n}\n.col-xs-offset-3 {\n margin-left: 25%;\n}\n.col-xs-offset-2 {\n margin-left: 16.66666667%;\n}\n.col-xs-offset-1 {\n margin-left: 8.33333333%;\n}\n.col-xs-offset-0 {\n margin-left: 0%;\n}\n@media (min-width: 768px) {\n .col-sm-1,\n .col-sm-2,\n .col-sm-3,\n .col-sm-4,\n .col-sm-5,\n .col-sm-6,\n .col-sm-7,\n .col-sm-8,\n .col-sm-9,\n .col-sm-10,\n .col-sm-11,\n .col-sm-12 {\n float: left;\n }\n .col-sm-12 {\n width: 100%;\n }\n .col-sm-11 {\n width: 91.66666667%;\n }\n .col-sm-10 {\n width: 83.33333333%;\n }\n .col-sm-9 {\n width: 75%;\n }\n .col-sm-8 {\n width: 66.66666667%;\n }\n .col-sm-7 {\n width: 58.33333333%;\n }\n .col-sm-6 {\n width: 50%;\n }\n .col-sm-5 {\n width: 41.66666667%;\n }\n .col-sm-4 {\n width: 33.33333333%;\n }\n .col-sm-3 {\n width: 25%;\n }\n .col-sm-2 {\n width: 16.66666667%;\n }\n .col-sm-1 {\n width: 8.33333333%;\n }\n .col-sm-pull-12 {\n right: 100%;\n }\n .col-sm-pull-11 {\n right: 91.66666667%;\n }\n .col-sm-pull-10 {\n right: 83.33333333%;\n }\n .col-sm-pull-9 {\n right: 75%;\n }\n .col-sm-pull-8 {\n right: 66.66666667%;\n }\n .col-sm-pull-7 {\n right: 58.33333333%;\n }\n .col-sm-pull-6 {\n right: 50%;\n }\n .col-sm-pull-5 {\n right: 41.66666667%;\n }\n .col-sm-pull-4 {\n right: 33.33333333%;\n }\n .col-sm-pull-3 {\n right: 25%;\n }\n .col-sm-pull-2 {\n right: 16.66666667%;\n }\n .col-sm-pull-1 {\n right: 8.33333333%;\n }\n .col-sm-pull-0 {\n right: auto;\n }\n .col-sm-push-12 {\n left: 100%;\n }\n .col-sm-push-11 {\n left: 91.66666667%;\n }\n .col-sm-push-10 {\n left: 83.33333333%;\n }\n .col-sm-push-9 {\n left: 75%;\n }\n .col-sm-push-8 {\n left: 66.66666667%;\n }\n .col-sm-push-7 {\n left: 58.33333333%;\n }\n .col-sm-push-6 {\n left: 50%;\n }\n .col-sm-push-5 {\n left: 41.66666667%;\n }\n .col-sm-push-4 {\n left: 33.33333333%;\n }\n .col-sm-push-3 {\n left: 25%;\n }\n .col-sm-push-2 {\n left: 16.66666667%;\n }\n .col-sm-push-1 {\n left: 8.33333333%;\n }\n .col-sm-push-0 {\n left: auto;\n }\n .col-sm-offset-12 {\n margin-left: 100%;\n }\n .col-sm-offset-11 {\n margin-left: 91.66666667%;\n }\n .col-sm-offset-10 {\n margin-left: 83.33333333%;\n }\n .col-sm-offset-9 {\n margin-left: 75%;\n }\n .col-sm-offset-8 {\n margin-left: 66.66666667%;\n }\n .col-sm-offset-7 {\n margin-left: 58.33333333%;\n }\n .col-sm-offset-6 {\n margin-left: 50%;\n }\n .col-sm-offset-5 {\n margin-left: 41.66666667%;\n }\n .col-sm-offset-4 {\n margin-left: 33.33333333%;\n }\n .col-sm-offset-3 {\n margin-left: 25%;\n }\n .col-sm-offset-2 {\n margin-left: 16.66666667%;\n }\n .col-sm-offset-1 {\n margin-left: 8.33333333%;\n }\n .col-sm-offset-0 {\n margin-left: 0%;\n }\n}\n@media (min-width: 992px) {\n .col-md-1,\n .col-md-2,\n .col-md-3,\n .col-md-4,\n .col-md-5,\n .col-md-6,\n .col-md-7,\n .col-md-8,\n .col-md-9,\n .col-md-10,\n .col-md-11,\n .col-md-12 {\n float: left;\n }\n .col-md-12 {\n width: 100%;\n }\n .col-md-11 {\n width: 91.66666667%;\n }\n .col-md-10 {\n width: 83.33333333%;\n }\n .col-md-9 {\n width: 75%;\n }\n .col-md-8 {\n width: 66.66666667%;\n }\n .col-md-7 {\n width: 58.33333333%;\n }\n .col-md-6 {\n width: 50%;\n }\n .col-md-5 {\n width: 41.66666667%;\n }\n .col-md-4 {\n width: 33.33333333%;\n }\n .col-md-3 {\n width: 25%;\n }\n .col-md-2 {\n width: 16.66666667%;\n }\n .col-md-1 {\n width: 8.33333333%;\n }\n .col-md-pull-12 {\n right: 100%;\n }\n .col-md-pull-11 {\n right: 91.66666667%;\n }\n .col-md-pull-10 {\n right: 83.33333333%;\n }\n .col-md-pull-9 {\n right: 75%;\n }\n .col-md-pull-8 {\n right: 66.66666667%;\n }\n .col-md-pull-7 {\n right: 58.33333333%;\n }\n .col-md-pull-6 {\n right: 50%;\n }\n .col-md-pull-5 {\n right: 41.66666667%;\n }\n .col-md-pull-4 {\n right: 33.33333333%;\n }\n .col-md-pull-3 {\n right: 25%;\n }\n .col-md-pull-2 {\n right: 16.66666667%;\n }\n .col-md-pull-1 {\n right: 8.33333333%;\n }\n .col-md-pull-0 {\n right: auto;\n }\n .col-md-push-12 {\n left: 100%;\n }\n .col-md-push-11 {\n left: 91.66666667%;\n }\n .col-md-push-10 {\n left: 83.33333333%;\n }\n .col-md-push-9 {\n left: 75%;\n }\n .col-md-push-8 {\n left: 66.66666667%;\n }\n .col-md-push-7 {\n left: 58.33333333%;\n }\n .col-md-push-6 {\n left: 50%;\n }\n .col-md-push-5 {\n left: 41.66666667%;\n }\n .col-md-push-4 {\n left: 33.33333333%;\n }\n .col-md-push-3 {\n left: 25%;\n }\n .col-md-push-2 {\n left: 16.66666667%;\n }\n .col-md-push-1 {\n left: 8.33333333%;\n }\n .col-md-push-0 {\n left: auto;\n }\n .col-md-offset-12 {\n margin-left: 100%;\n }\n .col-md-offset-11 {\n margin-left: 91.66666667%;\n }\n .col-md-offset-10 {\n margin-left: 83.33333333%;\n }\n .col-md-offset-9 {\n margin-left: 75%;\n }\n .col-md-offset-8 {\n margin-left: 66.66666667%;\n }\n .col-md-offset-7 {\n margin-left: 58.33333333%;\n }\n .col-md-offset-6 {\n margin-left: 50%;\n }\n .col-md-offset-5 {\n margin-left: 41.66666667%;\n }\n .col-md-offset-4 {\n margin-left: 33.33333333%;\n }\n .col-md-offset-3 {\n margin-left: 25%;\n }\n .col-md-offset-2 {\n margin-left: 16.66666667%;\n }\n .col-md-offset-1 {\n margin-left: 8.33333333%;\n }\n .col-md-offset-0 {\n margin-left: 0%;\n }\n}\n@media (min-width: 1200px) {\n .col-lg-1,\n .col-lg-2,\n .col-lg-3,\n .col-lg-4,\n .col-lg-5,\n .col-lg-6,\n .col-lg-7,\n .col-lg-8,\n .col-lg-9,\n .col-lg-10,\n .col-lg-11,\n .col-lg-12 {\n float: left;\n }\n .col-lg-12 {\n width: 100%;\n }\n .col-lg-11 {\n width: 91.66666667%;\n }\n .col-lg-10 {\n width: 83.33333333%;\n }\n .col-lg-9 {\n width: 75%;\n }\n .col-lg-8 {\n width: 66.66666667%;\n }\n .col-lg-7 {\n width: 58.33333333%;\n }\n .col-lg-6 {\n width: 50%;\n }\n .col-lg-5 {\n width: 41.66666667%;\n }\n .col-lg-4 {\n width: 33.33333333%;\n }\n .col-lg-3 {\n width: 25%;\n }\n .col-lg-2 {\n width: 16.66666667%;\n }\n .col-lg-1 {\n width: 8.33333333%;\n }\n .col-lg-pull-12 {\n right: 100%;\n }\n .col-lg-pull-11 {\n right: 91.66666667%;\n }\n .col-lg-pull-10 {\n right: 83.33333333%;\n }\n .col-lg-pull-9 {\n right: 75%;\n }\n .col-lg-pull-8 {\n right: 66.66666667%;\n }\n .col-lg-pull-7 {\n right: 58.33333333%;\n }\n .col-lg-pull-6 {\n right: 50%;\n }\n .col-lg-pull-5 {\n right: 41.66666667%;\n }\n .col-lg-pull-4 {\n right: 33.33333333%;\n }\n .col-lg-pull-3 {\n right: 25%;\n }\n .col-lg-pull-2 {\n right: 16.66666667%;\n }\n .col-lg-pull-1 {\n right: 8.33333333%;\n }\n .col-lg-pull-0 {\n right: auto;\n }\n .col-lg-push-12 {\n left: 100%;\n }\n .col-lg-push-11 {\n left: 91.66666667%;\n }\n .col-lg-push-10 {\n left: 83.33333333%;\n }\n .col-lg-push-9 {\n left: 75%;\n }\n .col-lg-push-8 {\n left: 66.66666667%;\n }\n .col-lg-push-7 {\n left: 58.33333333%;\n }\n .col-lg-push-6 {\n left: 50%;\n }\n .col-lg-push-5 {\n left: 41.66666667%;\n }\n .col-lg-push-4 {\n left: 33.33333333%;\n }\n .col-lg-push-3 {\n left: 25%;\n }\n .col-lg-push-2 {\n left: 16.66666667%;\n }\n .col-lg-push-1 {\n left: 8.33333333%;\n }\n .col-lg-push-0 {\n left: auto;\n }\n .col-lg-offset-12 {\n margin-left: 100%;\n }\n .col-lg-offset-11 {\n margin-left: 91.66666667%;\n }\n .col-lg-offset-10 {\n margin-left: 83.33333333%;\n }\n .col-lg-offset-9 {\n margin-left: 75%;\n }\n .col-lg-offset-8 {\n margin-left: 66.66666667%;\n }\n .col-lg-offset-7 {\n margin-left: 58.33333333%;\n }\n .col-lg-offset-6 {\n margin-left: 50%;\n }\n .col-lg-offset-5 {\n margin-left: 41.66666667%;\n }\n .col-lg-offset-4 {\n margin-left: 33.33333333%;\n }\n .col-lg-offset-3 {\n margin-left: 25%;\n }\n .col-lg-offset-2 {\n margin-left: 16.66666667%;\n }\n .col-lg-offset-1 {\n margin-left: 8.33333333%;\n }\n .col-lg-offset-0 {\n margin-left: 0%;\n }\n}\ntable {\n background-color: transparent;\n}\ntable col[class*=\"col-\"] {\n position: static;\n display: table-column;\n float: none;\n}\ntable td[class*=\"col-\"],\ntable th[class*=\"col-\"] {\n position: static;\n display: table-cell;\n float: none;\n}\ncaption {\n padding-top: 8px;\n padding-bottom: 8px;\n color: #777777;\n text-align: left;\n}\nth {\n text-align: left;\n}\n.table {\n width: 100%;\n max-width: 100%;\n margin-bottom: 20px;\n}\n.table > thead > tr > th,\n.table > tbody > tr > th,\n.table > tfoot > tr > th,\n.table > thead > tr > td,\n.table > tbody > tr > td,\n.table > tfoot > tr > td {\n padding: 8px;\n line-height: 1.42857143;\n vertical-align: top;\n border-top: 1px solid #ddd;\n}\n.table > thead > tr > th {\n vertical-align: bottom;\n border-bottom: 2px solid #ddd;\n}\n.table > caption + thead > tr:first-child > th,\n.table > colgroup + thead > tr:first-child > th,\n.table > thead:first-child > tr:first-child > th,\n.table > caption + thead > tr:first-child > td,\n.table > colgroup + thead > tr:first-child > td,\n.table > thead:first-child > tr:first-child > td {\n border-top: 0;\n}\n.table > tbody + tbody {\n border-top: 2px solid #ddd;\n}\n.table .table {\n background-color: #fff;\n}\n.table-condensed > thead > tr > th,\n.table-condensed > tbody > tr > th,\n.table-condensed > tfoot > tr > th,\n.table-condensed > thead > tr > td,\n.table-condensed > tbody > tr > td,\n.table-condensed > tfoot > tr > td {\n padding: 5px;\n}\n.table-bordered {\n border: 1px solid #ddd;\n}\n.table-bordered > thead > tr > th,\n.table-bordered > tbody > tr > th,\n.table-bordered > tfoot > tr > th,\n.table-bordered > thead > tr > td,\n.table-bordered > tbody > tr > td,\n.table-bordered > tfoot > tr > td {\n border: 1px solid #ddd;\n}\n.table-bordered > thead > tr > th,\n.table-bordered > thead > tr > td {\n border-bottom-width: 2px;\n}\n.table-striped > tbody > tr:nth-of-type(odd) {\n background-color: #f9f9f9;\n}\n.table-hover > tbody > tr:hover {\n background-color: #f5f5f5;\n}\n.table > thead > tr > td.active,\n.table > tbody > tr > td.active,\n.table > tfoot > tr > td.active,\n.table > thead > tr > th.active,\n.table > tbody > tr > th.active,\n.table > tfoot > tr > th.active,\n.table > thead > tr.active > td,\n.table > tbody > tr.active > td,\n.table > tfoot > tr.active > td,\n.table > thead > tr.active > th,\n.table > tbody > tr.active > th,\n.table > tfoot > tr.active > th {\n background-color: #f5f5f5;\n}\n.table-hover > tbody > tr > td.active:hover,\n.table-hover > tbody > tr > th.active:hover,\n.table-hover > tbody > tr.active:hover > td,\n.table-hover > tbody > tr:hover > .active,\n.table-hover > tbody > tr.active:hover > th {\n background-color: #e8e8e8;\n}\n.table > thead > tr > td.success,\n.table > tbody > tr > td.success,\n.table > tfoot > tr > td.success,\n.table > thead > tr > th.success,\n.table > tbody > tr > th.success,\n.table > tfoot > tr > th.success,\n.table > thead > tr.success > td,\n.table > tbody > tr.success > td,\n.table > tfoot > tr.success > td,\n.table > thead > tr.success > th,\n.table > tbody > tr.success > th,\n.table > tfoot > tr.success > th {\n background-color: #dff0d8;\n}\n.table-hover > tbody > tr > td.success:hover,\n.table-hover > tbody > tr > th.success:hover,\n.table-hover > tbody > tr.success:hover > td,\n.table-hover > tbody > tr:hover > .success,\n.table-hover > tbody > tr.success:hover > th {\n background-color: #d0e9c6;\n}\n.table > thead > tr > td.info,\n.table > tbody > tr > td.info,\n.table > tfoot > tr > td.info,\n.table > thead > tr > th.info,\n.table > tbody > tr > th.info,\n.table > tfoot > tr > th.info,\n.table > thead > tr.info > td,\n.table > tbody > tr.info > td,\n.table > tfoot > tr.info > td,\n.table > thead > tr.info > th,\n.table > tbody > tr.info > th,\n.table > tfoot > tr.info > th {\n background-color: #d9edf7;\n}\n.table-hover > tbody > tr > td.info:hover,\n.table-hover > tbody > tr > th.info:hover,\n.table-hover > tbody > tr.info:hover > td,\n.table-hover > tbody > tr:hover > .info,\n.table-hover > tbody > tr.info:hover > th {\n background-color: #c4e3f3;\n}\n.table > thead > tr > td.warning,\n.table > tbody > tr > td.warning,\n.table > tfoot > tr > td.warning,\n.table > thead > tr > th.warning,\n.table > tbody > tr > th.warning,\n.table > tfoot > tr > th.warning,\n.table > thead > tr.warning > td,\n.table > tbody > tr.warning > td,\n.table > tfoot > tr.warning > td,\n.table > thead > tr.warning > th,\n.table > tbody > tr.warning > th,\n.table > tfoot > tr.warning > th {\n background-color: #fcf8e3;\n}\n.table-hover > tbody > tr > td.warning:hover,\n.table-hover > tbody > tr > th.warning:hover,\n.table-hover > tbody > tr.warning:hover > td,\n.table-hover > tbody > tr:hover > .warning,\n.table-hover > tbody > tr.warning:hover > th {\n background-color: #faf2cc;\n}\n.table > thead > tr > td.danger,\n.table > tbody > tr > td.danger,\n.table > tfoot > tr > td.danger,\n.table > thead > tr > th.danger,\n.table > tbody > tr > th.danger,\n.table > tfoot > tr > th.danger,\n.table > thead > tr.danger > td,\n.table > tbody > tr.danger > td,\n.table > tfoot > tr.danger > td,\n.table > thead > tr.danger > th,\n.table > tbody > tr.danger > th,\n.table > tfoot > tr.danger > th {\n background-color: #f2dede;\n}\n.table-hover > tbody > tr > td.danger:hover,\n.table-hover > tbody > tr > th.danger:hover,\n.table-hover > tbody > tr.danger:hover > td,\n.table-hover > tbody > tr:hover > .danger,\n.table-hover > tbody > tr.danger:hover > th {\n background-color: #ebcccc;\n}\n.table-responsive {\n min-height: 0.01%;\n overflow-x: auto;\n}\n@media screen and (max-width: 767px) {\n .table-responsive {\n width: 100%;\n margin-bottom: 15px;\n overflow-y: hidden;\n -ms-overflow-style: -ms-autohiding-scrollbar;\n border: 1px solid #ddd;\n }\n .table-responsive > .table {\n margin-bottom: 0;\n }\n .table-responsive > .table > thead > tr > th,\n .table-responsive > .table > tbody > tr > th,\n .table-responsive > .table > tfoot > tr > th,\n .table-responsive > .table > thead > tr > td,\n .table-responsive > .table > tbody > tr > td,\n .table-responsive > .table > tfoot > tr > td {\n white-space: nowrap;\n }\n .table-responsive > .table-bordered {\n border: 0;\n }\n .table-responsive > .table-bordered > thead > tr > th:first-child,\n .table-responsive > .table-bordered > tbody > tr > th:first-child,\n .table-responsive > .table-bordered > tfoot > tr > th:first-child,\n .table-responsive > .table-bordered > thead > tr > td:first-child,\n .table-responsive > .table-bordered > tbody > tr > td:first-child,\n .table-responsive > .table-bordered > tfoot > tr > td:first-child {\n border-left: 0;\n }\n .table-responsive > .table-bordered > thead > tr > th:last-child,\n .table-responsive > .table-bordered > tbody > tr > th:last-child,\n .table-responsive > .table-bordered > tfoot > tr > th:last-child,\n .table-responsive > .table-bordered > thead > tr > td:last-child,\n .table-responsive > .table-bordered > tbody > tr > td:last-child,\n .table-responsive > .table-bordered > tfoot > tr > td:last-child {\n border-right: 0;\n }\n .table-responsive > .table-bordered > tbody > tr:last-child > th,\n .table-responsive > .table-bordered > tfoot > tr:last-child > th,\n .table-responsive > .table-bordered > tbody > tr:last-child > td,\n .table-responsive > .table-bordered > tfoot > tr:last-child > td {\n border-bottom: 0;\n }\n}\nfieldset {\n min-width: 0;\n padding: 0;\n margin: 0;\n border: 0;\n}\nlegend {\n display: block;\n width: 100%;\n padding: 0;\n margin-bottom: 20px;\n font-size: 21px;\n line-height: inherit;\n color: #333333;\n border: 0;\n border-bottom: 1px solid #e5e5e5;\n}\nlabel {\n display: inline-block;\n max-width: 100%;\n margin-bottom: 5px;\n font-weight: 700;\n}\ninput[type=\"search\"] {\n -webkit-box-sizing: border-box;\n -moz-box-sizing: border-box;\n box-sizing: border-box;\n -webkit-appearance: none;\n appearance: none;\n}\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n margin: 4px 0 0;\n margin-top: 1px \\9;\n line-height: normal;\n}\ninput[type=\"radio\"][disabled],\ninput[type=\"checkbox\"][disabled],\ninput[type=\"radio\"].disabled,\ninput[type=\"checkbox\"].disabled,\nfieldset[disabled] input[type=\"radio\"],\nfieldset[disabled] input[type=\"checkbox\"] {\n cursor: not-allowed;\n}\ninput[type=\"file\"] {\n display: block;\n}\ninput[type=\"range\"] {\n display: block;\n width: 100%;\n}\nselect[multiple],\nselect[size] {\n height: auto;\n}\ninput[type=\"file\"]:focus,\ninput[type=\"radio\"]:focus,\ninput[type=\"checkbox\"]:focus {\n outline: 5px auto -webkit-focus-ring-color;\n outline-offset: -2px;\n}\noutput {\n display: block;\n padding-top: 7px;\n font-size: 14px;\n line-height: 1.42857143;\n color: #555555;\n}\n.form-control {\n display: block;\n width: 100%;\n height: 34px;\n padding: 6px 12px;\n font-size: 14px;\n line-height: 1.42857143;\n color: #555555;\n background-color: #fff;\n background-image: none;\n border: 1px solid #ccc;\n border-radius: 4px;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n -webkit-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;\n -o-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;\n transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;\n}\n.form-control:focus {\n border-color: #66afe9;\n outline: 0;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 8px rgba(102, 175, 233, 0.6);\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 8px rgba(102, 175, 233, 0.6);\n}\n.form-control::-moz-placeholder {\n color: #999;\n opacity: 1;\n}\n.form-control:-ms-input-placeholder {\n color: #999;\n}\n.form-control::-webkit-input-placeholder {\n color: #999;\n}\n.form-control::-ms-expand {\n background-color: transparent;\n border: 0;\n}\n.form-control[disabled],\n.form-control[readonly],\nfieldset[disabled] .form-control {\n background-color: #eeeeee;\n opacity: 1;\n}\n.form-control[disabled],\nfieldset[disabled] .form-control {\n cursor: not-allowed;\n}\ntextarea.form-control {\n height: auto;\n}\n@media screen and (-webkit-min-device-pixel-ratio: 0) {\n input[type=\"date\"].form-control,\n input[type=\"time\"].form-control,\n input[type=\"datetime-local\"].form-control,\n input[type=\"month\"].form-control {\n line-height: 34px;\n }\n input[type=\"date\"].input-sm,\n input[type=\"time\"].input-sm,\n input[type=\"datetime-local\"].input-sm,\n input[type=\"month\"].input-sm,\n .input-group-sm input[type=\"date\"],\n .input-group-sm input[type=\"time\"],\n .input-group-sm input[type=\"datetime-local\"],\n .input-group-sm input[type=\"month\"] {\n line-height: 30px;\n }\n input[type=\"date\"].input-lg,\n input[type=\"time\"].input-lg,\n input[type=\"datetime-local\"].input-lg,\n input[type=\"month\"].input-lg,\n .input-group-lg input[type=\"date\"],\n .input-group-lg input[type=\"time\"],\n .input-group-lg input[type=\"datetime-local\"],\n .input-group-lg input[type=\"month\"] {\n line-height: 46px;\n }\n}\n.form-group {\n margin-bottom: 15px;\n}\n.radio,\n.checkbox {\n position: relative;\n display: block;\n margin-top: 10px;\n margin-bottom: 10px;\n}\n.radio.disabled label,\n.checkbox.disabled label,\nfieldset[disabled] .radio label,\nfieldset[disabled] .checkbox label {\n cursor: not-allowed;\n}\n.radio label,\n.checkbox label {\n min-height: 20px;\n padding-left: 20px;\n margin-bottom: 0;\n font-weight: 400;\n cursor: pointer;\n}\n.radio input[type=\"radio\"],\n.radio-inline input[type=\"radio\"],\n.checkbox input[type=\"checkbox\"],\n.checkbox-inline input[type=\"checkbox\"] {\n position: absolute;\n margin-top: 4px \\9;\n margin-left: -20px;\n}\n.radio + .radio,\n.checkbox + .checkbox {\n margin-top: -5px;\n}\n.radio-inline,\n.checkbox-inline {\n position: relative;\n display: inline-block;\n padding-left: 20px;\n margin-bottom: 0;\n font-weight: 400;\n vertical-align: middle;\n cursor: pointer;\n}\n.radio-inline.disabled,\n.checkbox-inline.disabled,\nfieldset[disabled] .radio-inline,\nfieldset[disabled] .checkbox-inline {\n cursor: not-allowed;\n}\n.radio-inline + .radio-inline,\n.checkbox-inline + .checkbox-inline {\n margin-top: 0;\n margin-left: 10px;\n}\n.form-control-static {\n min-height: 34px;\n padding-top: 7px;\n padding-bottom: 7px;\n margin-bottom: 0;\n}\n.form-control-static.input-lg,\n.form-control-static.input-sm {\n padding-right: 0;\n padding-left: 0;\n}\n.input-sm {\n height: 30px;\n padding: 5px 10px;\n font-size: 12px;\n line-height: 1.5;\n border-radius: 3px;\n}\nselect.input-sm {\n height: 30px;\n line-height: 30px;\n}\ntextarea.input-sm,\nselect[multiple].input-sm {\n height: auto;\n}\n.form-group-sm .form-control {\n height: 30px;\n padding: 5px 10px;\n font-size: 12px;\n line-height: 1.5;\n border-radius: 3px;\n}\n.form-group-sm select.form-control {\n height: 30px;\n line-height: 30px;\n}\n.form-group-sm textarea.form-control,\n.form-group-sm select[multiple].form-control {\n height: auto;\n}\n.form-group-sm .form-control-static {\n height: 30px;\n min-height: 32px;\n padding: 6px 10px;\n font-size: 12px;\n line-height: 1.5;\n}\n.input-lg {\n height: 46px;\n padding: 10px 16px;\n font-size: 18px;\n line-height: 1.3333333;\n border-radius: 6px;\n}\nselect.input-lg {\n height: 46px;\n line-height: 46px;\n}\ntextarea.input-lg,\nselect[multiple].input-lg {\n height: auto;\n}\n.form-group-lg .form-control {\n height: 46px;\n padding: 10px 16px;\n font-size: 18px;\n line-height: 1.3333333;\n border-radius: 6px;\n}\n.form-group-lg select.form-control {\n height: 46px;\n line-height: 46px;\n}\n.form-group-lg textarea.form-control,\n.form-group-lg select[multiple].form-control {\n height: auto;\n}\n.form-group-lg .form-control-static {\n height: 46px;\n min-height: 38px;\n padding: 11px 16px;\n font-size: 18px;\n line-height: 1.3333333;\n}\n.has-feedback {\n position: relative;\n}\n.has-feedback .form-control {\n padding-right: 42.5px;\n}\n.form-control-feedback {\n position: absolute;\n top: 0;\n right: 0;\n z-index: 2;\n display: block;\n width: 34px;\n height: 34px;\n line-height: 34px;\n text-align: center;\n pointer-events: none;\n}\n.input-lg + .form-control-feedback,\n.input-group-lg + .form-control-feedback,\n.form-group-lg .form-control + .form-control-feedback {\n width: 46px;\n height: 46px;\n line-height: 46px;\n}\n.input-sm + .form-control-feedback,\n.input-group-sm + .form-control-feedback,\n.form-group-sm .form-control + .form-control-feedback {\n width: 30px;\n height: 30px;\n line-height: 30px;\n}\n.has-success .help-block,\n.has-success .control-label,\n.has-success .radio,\n.has-success .checkbox,\n.has-success .radio-inline,\n.has-success .checkbox-inline,\n.has-success.radio label,\n.has-success.checkbox label,\n.has-success.radio-inline label,\n.has-success.checkbox-inline label {\n color: #3c763d;\n}\n.has-success .form-control {\n border-color: #3c763d;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n}\n.has-success .form-control:focus {\n border-color: #2b542c;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #67b168;\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #67b168;\n}\n.has-success .input-group-addon {\n color: #3c763d;\n background-color: #dff0d8;\n border-color: #3c763d;\n}\n.has-success .form-control-feedback {\n color: #3c763d;\n}\n.has-warning .help-block,\n.has-warning .control-label,\n.has-warning .radio,\n.has-warning .checkbox,\n.has-warning .radio-inline,\n.has-warning .checkbox-inline,\n.has-warning.radio label,\n.has-warning.checkbox label,\n.has-warning.radio-inline label,\n.has-warning.checkbox-inline label {\n color: #8a6d3b;\n}\n.has-warning .form-control {\n border-color: #8a6d3b;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n}\n.has-warning .form-control:focus {\n border-color: #66512c;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #c0a16b;\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #c0a16b;\n}\n.has-warning .input-group-addon {\n color: #8a6d3b;\n background-color: #fcf8e3;\n border-color: #8a6d3b;\n}\n.has-warning .form-control-feedback {\n color: #8a6d3b;\n}\n.has-error .help-block,\n.has-error .control-label,\n.has-error .radio,\n.has-error .checkbox,\n.has-error .radio-inline,\n.has-error .checkbox-inline,\n.has-error.radio label,\n.has-error.checkbox label,\n.has-error.radio-inline label,\n.has-error.checkbox-inline label {\n color: #a94442;\n}\n.has-error .form-control {\n border-color: #a94442;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n}\n.has-error .form-control:focus {\n border-color: #843534;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483;\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483;\n}\n.has-error .input-group-addon {\n color: #a94442;\n background-color: #f2dede;\n border-color: #a94442;\n}\n.has-error .form-control-feedback {\n color: #a94442;\n}\n.has-feedback label ~ .form-control-feedback {\n top: 25px;\n}\n.has-feedback label.sr-only ~ .form-control-feedback {\n top: 0;\n}\n.help-block {\n display: block;\n margin-top: 5px;\n margin-bottom: 10px;\n color: #737373;\n}\n@media (min-width: 768px) {\n .form-inline .form-group {\n display: inline-block;\n margin-bottom: 0;\n vertical-align: middle;\n }\n .form-inline .form-control {\n display: inline-block;\n width: auto;\n vertical-align: middle;\n }\n .form-inline .form-control-static {\n display: inline-block;\n }\n .form-inline .input-group {\n display: inline-table;\n vertical-align: middle;\n }\n .form-inline .input-group .input-group-addon,\n .form-inline .input-group .input-group-btn,\n .form-inline .input-group .form-control {\n width: auto;\n }\n .form-inline .input-group > .form-control {\n width: 100%;\n }\n .form-inline .control-label {\n margin-bottom: 0;\n vertical-align: middle;\n }\n .form-inline .radio,\n .form-inline .checkbox {\n display: inline-block;\n margin-top: 0;\n margin-bottom: 0;\n vertical-align: middle;\n }\n .form-inline .radio label,\n .form-inline .checkbox label {\n padding-left: 0;\n }\n .form-inline .radio input[type=\"radio\"],\n .form-inline .checkbox input[type=\"checkbox\"] {\n position: relative;\n margin-left: 0;\n }\n .form-inline .has-feedback .form-control-feedback {\n top: 0;\n }\n}\n.form-horizontal .radio,\n.form-horizontal .checkbox,\n.form-horizontal .radio-inline,\n.form-horizontal .checkbox-inline {\n padding-top: 7px;\n margin-top: 0;\n margin-bottom: 0;\n}\n.form-horizontal .radio,\n.form-horizontal .checkbox {\n min-height: 27px;\n}\n.form-horizontal .form-group {\n margin-right: -15px;\n margin-left: -15px;\n}\n@media (min-width: 768px) {\n .form-horizontal .control-label {\n padding-top: 7px;\n margin-bottom: 0;\n text-align: right;\n }\n}\n.form-horizontal .has-feedback .form-control-feedback {\n right: 15px;\n}\n@media (min-width: 768px) {\n .form-horizontal .form-group-lg .control-label {\n padding-top: 11px;\n font-size: 18px;\n }\n}\n@media (min-width: 768px) {\n .form-horizontal .form-group-sm .control-label {\n padding-top: 6px;\n font-size: 12px;\n }\n}\n.btn {\n display: inline-block;\n margin-bottom: 0;\n font-weight: normal;\n text-align: center;\n white-space: nowrap;\n vertical-align: middle;\n touch-action: manipulation;\n cursor: pointer;\n background-image: none;\n border: 1px solid transparent;\n padding: 6px 12px;\n font-size: 14px;\n line-height: 1.42857143;\n border-radius: 4px;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n}\n.btn:focus,\n.btn:active:focus,\n.btn.active:focus,\n.btn.focus,\n.btn:active.focus,\n.btn.active.focus {\n outline: 5px auto -webkit-focus-ring-color;\n outline-offset: -2px;\n}\n.btn:hover,\n.btn:focus,\n.btn.focus {\n color: #333;\n text-decoration: none;\n}\n.btn:active,\n.btn.active {\n background-image: none;\n outline: 0;\n -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n}\n.btn.disabled,\n.btn[disabled],\nfieldset[disabled] .btn {\n cursor: not-allowed;\n filter: alpha(opacity=65);\n opacity: 0.65;\n -webkit-box-shadow: none;\n box-shadow: none;\n}\na.btn.disabled,\nfieldset[disabled] a.btn {\n pointer-events: none;\n}\n.btn-default {\n color: #333;\n background-color: #fff;\n border-color: #ccc;\n}\n.btn-default:focus,\n.btn-default.focus {\n color: #333;\n background-color: #e6e6e6;\n border-color: #8c8c8c;\n}\n.btn-default:hover {\n color: #333;\n background-color: #e6e6e6;\n border-color: #adadad;\n}\n.btn-default:active,\n.btn-default.active,\n.open > .dropdown-toggle.btn-default {\n color: #333;\n background-color: #e6e6e6;\n background-image: none;\n border-color: #adadad;\n}\n.btn-default:active:hover,\n.btn-default.active:hover,\n.open > .dropdown-toggle.btn-default:hover,\n.btn-default:active:focus,\n.btn-default.active:focus,\n.open > .dropdown-toggle.btn-default:focus,\n.btn-default:active.focus,\n.btn-default.active.focus,\n.open > .dropdown-toggle.btn-default.focus {\n color: #333;\n background-color: #d4d4d4;\n border-color: #8c8c8c;\n}\n.btn-default.disabled:hover,\n.btn-default[disabled]:hover,\nfieldset[disabled] .btn-default:hover,\n.btn-default.disabled:focus,\n.btn-default[disabled]:focus,\nfieldset[disabled] .btn-default:focus,\n.btn-default.disabled.focus,\n.btn-default[disabled].focus,\nfieldset[disabled] .btn-default.focus {\n background-color: #fff;\n border-color: #ccc;\n}\n.btn-default .badge {\n color: #fff;\n background-color: #333;\n}\n.btn-primary {\n color: #fff;\n background-color: #337ab7;\n border-color: #2e6da4;\n}\n.btn-primary:focus,\n.btn-primary.focus {\n color: #fff;\n background-color: #286090;\n border-color: #122b40;\n}\n.btn-primary:hover {\n color: #fff;\n background-color: #286090;\n border-color: #204d74;\n}\n.btn-primary:active,\n.btn-primary.active,\n.open > .dropdown-toggle.btn-primary {\n color: #fff;\n background-color: #286090;\n background-image: none;\n border-color: #204d74;\n}\n.btn-primary:active:hover,\n.btn-primary.active:hover,\n.open > .dropdown-toggle.btn-primary:hover,\n.btn-primary:active:focus,\n.btn-primary.active:focus,\n.open > .dropdown-toggle.btn-primary:focus,\n.btn-primary:active.focus,\n.btn-primary.active.focus,\n.open > .dropdown-toggle.btn-primary.focus {\n color: #fff;\n background-color: #204d74;\n border-color: #122b40;\n}\n.btn-primary.disabled:hover,\n.btn-primary[disabled]:hover,\nfieldset[disabled] .btn-primary:hover,\n.btn-primary.disabled:focus,\n.btn-primary[disabled]:focus,\nfieldset[disabled] .btn-primary:focus,\n.btn-primary.disabled.focus,\n.btn-primary[disabled].focus,\nfieldset[disabled] .btn-primary.focus {\n background-color: #337ab7;\n border-color: #2e6da4;\n}\n.btn-primary .badge {\n color: #337ab7;\n background-color: #fff;\n}\n.btn-success {\n color: #fff;\n background-color: #5cb85c;\n border-color: #4cae4c;\n}\n.btn-success:focus,\n.btn-success.focus {\n color: #fff;\n background-color: #449d44;\n border-color: #255625;\n}\n.btn-success:hover {\n color: #fff;\n background-color: #449d44;\n border-color: #398439;\n}\n.btn-success:active,\n.btn-success.active,\n.open > .dropdown-toggle.btn-success {\n color: #fff;\n background-color: #449d44;\n background-image: none;\n border-color: #398439;\n}\n.btn-success:active:hover,\n.btn-success.active:hover,\n.open > .dropdown-toggle.btn-success:hover,\n.btn-success:active:focus,\n.btn-success.active:focus,\n.open > .dropdown-toggle.btn-success:focus,\n.btn-success:active.focus,\n.btn-success.active.focus,\n.open > .dropdown-toggle.btn-success.focus {\n color: #fff;\n background-color: #398439;\n border-color: #255625;\n}\n.btn-success.disabled:hover,\n.btn-success[disabled]:hover,\nfieldset[disabled] .btn-success:hover,\n.btn-success.disabled:focus,\n.btn-success[disabled]:focus,\nfieldset[disabled] .btn-success:focus,\n.btn-success.disabled.focus,\n.btn-success[disabled].focus,\nfieldset[disabled] .btn-success.focus {\n background-color: #5cb85c;\n border-color: #4cae4c;\n}\n.btn-success .badge {\n color: #5cb85c;\n background-color: #fff;\n}\n.btn-info {\n color: #fff;\n background-color: #5bc0de;\n border-color: #46b8da;\n}\n.btn-info:focus,\n.btn-info.focus {\n color: #fff;\n background-color: #31b0d5;\n border-color: #1b6d85;\n}\n.btn-info:hover {\n color: #fff;\n background-color: #31b0d5;\n border-color: #269abc;\n}\n.btn-info:active,\n.btn-info.active,\n.open > .dropdown-toggle.btn-info {\n color: #fff;\n background-color: #31b0d5;\n background-image: none;\n border-color: #269abc;\n}\n.btn-info:active:hover,\n.btn-info.active:hover,\n.open > .dropdown-toggle.btn-info:hover,\n.btn-info:active:focus,\n.btn-info.active:focus,\n.open > .dropdown-toggle.btn-info:focus,\n.btn-info:active.focus,\n.btn-info.active.focus,\n.open > .dropdown-toggle.btn-info.focus {\n color: #fff;\n background-color: #269abc;\n border-color: #1b6d85;\n}\n.btn-info.disabled:hover,\n.btn-info[disabled]:hover,\nfieldset[disabled] .btn-info:hover,\n.btn-info.disabled:focus,\n.btn-info[disabled]:focus,\nfieldset[disabled] .btn-info:focus,\n.btn-info.disabled.focus,\n.btn-info[disabled].focus,\nfieldset[disabled] .btn-info.focus {\n background-color: #5bc0de;\n border-color: #46b8da;\n}\n.btn-info .badge {\n color: #5bc0de;\n background-color: #fff;\n}\n.btn-warning {\n color: #fff;\n background-color: #f0ad4e;\n border-color: #eea236;\n}\n.btn-warning:focus,\n.btn-warning.focus {\n color: #fff;\n background-color: #ec971f;\n border-color: #985f0d;\n}\n.btn-warning:hover {\n color: #fff;\n background-color: #ec971f;\n border-color: #d58512;\n}\n.btn-warning:active,\n.btn-warning.active,\n.open > .dropdown-toggle.btn-warning {\n color: #fff;\n background-color: #ec971f;\n background-image: none;\n border-color: #d58512;\n}\n.btn-warning:active:hover,\n.btn-warning.active:hover,\n.open > .dropdown-toggle.btn-warning:hover,\n.btn-warning:active:focus,\n.btn-warning.active:focus,\n.open > .dropdown-toggle.btn-warning:focus,\n.btn-warning:active.focus,\n.btn-warning.active.focus,\n.open > .dropdown-toggle.btn-warning.focus {\n color: #fff;\n background-color: #d58512;\n border-color: #985f0d;\n}\n.btn-warning.disabled:hover,\n.btn-warning[disabled]:hover,\nfieldset[disabled] .btn-warning:hover,\n.btn-warning.disabled:focus,\n.btn-warning[disabled]:focus,\nfieldset[disabled] .btn-warning:focus,\n.btn-warning.disabled.focus,\n.btn-warning[disabled].focus,\nfieldset[disabled] .btn-warning.focus {\n background-color: #f0ad4e;\n border-color: #eea236;\n}\n.btn-warning .badge {\n color: #f0ad4e;\n background-color: #fff;\n}\n.btn-danger {\n color: #fff;\n background-color: #d9534f;\n border-color: #d43f3a;\n}\n.btn-danger:focus,\n.btn-danger.focus {\n color: #fff;\n background-color: #c9302c;\n border-color: #761c19;\n}\n.btn-danger:hover {\n color: #fff;\n background-color: #c9302c;\n border-color: #ac2925;\n}\n.btn-danger:active,\n.btn-danger.active,\n.open > .dropdown-toggle.btn-danger {\n color: #fff;\n background-color: #c9302c;\n background-image: none;\n border-color: #ac2925;\n}\n.btn-danger:active:hover,\n.btn-danger.active:hover,\n.open > .dropdown-toggle.btn-danger:hover,\n.btn-danger:active:focus,\n.btn-danger.active:focus,\n.open > .dropdown-toggle.btn-danger:focus,\n.btn-danger:active.focus,\n.btn-danger.active.focus,\n.open > .dropdown-toggle.btn-danger.focus {\n color: #fff;\n background-color: #ac2925;\n border-color: #761c19;\n}\n.btn-danger.disabled:hover,\n.btn-danger[disabled]:hover,\nfieldset[disabled] .btn-danger:hover,\n.btn-danger.disabled:focus,\n.btn-danger[disabled]:focus,\nfieldset[disabled] .btn-danger:focus,\n.btn-danger.disabled.focus,\n.btn-danger[disabled].focus,\nfieldset[disabled] .btn-danger.focus {\n background-color: #d9534f;\n border-color: #d43f3a;\n}\n.btn-danger .badge {\n color: #d9534f;\n background-color: #fff;\n}\n.btn-link {\n font-weight: 400;\n color: #337ab7;\n border-radius: 0;\n}\n.btn-link,\n.btn-link:active,\n.btn-link.active,\n.btn-link[disabled],\nfieldset[disabled] .btn-link {\n background-color: transparent;\n -webkit-box-shadow: none;\n box-shadow: none;\n}\n.btn-link,\n.btn-link:hover,\n.btn-link:focus,\n.btn-link:active {\n border-color: transparent;\n}\n.btn-link:hover,\n.btn-link:focus {\n color: #23527c;\n text-decoration: underline;\n background-color: transparent;\n}\n.btn-link[disabled]:hover,\nfieldset[disabled] .btn-link:hover,\n.btn-link[disabled]:focus,\nfieldset[disabled] .btn-link:focus {\n color: #777777;\n text-decoration: none;\n}\n.btn-lg,\n.btn-group-lg > .btn {\n padding: 10px 16px;\n font-size: 18px;\n line-height: 1.3333333;\n border-radius: 6px;\n}\n.btn-sm,\n.btn-group-sm > .btn {\n padding: 5px 10px;\n font-size: 12px;\n line-height: 1.5;\n border-radius: 3px;\n}\n.btn-xs,\n.btn-group-xs > .btn {\n padding: 1px 5px;\n font-size: 12px;\n line-height: 1.5;\n border-radius: 3px;\n}\n.btn-block {\n display: block;\n width: 100%;\n}\n.btn-block + .btn-block {\n margin-top: 5px;\n}\ninput[type=\"submit\"].btn-block,\ninput[type=\"reset\"].btn-block,\ninput[type=\"button\"].btn-block {\n width: 100%;\n}\n.fade {\n opacity: 0;\n -webkit-transition: opacity 0.15s linear;\n -o-transition: opacity 0.15s linear;\n transition: opacity 0.15s linear;\n}\n.fade.in {\n opacity: 1;\n}\n.collapse {\n display: none;\n}\n.collapse.in {\n display: block;\n}\ntr.collapse.in {\n display: table-row;\n}\ntbody.collapse.in {\n display: table-row-group;\n}\n.collapsing {\n position: relative;\n height: 0;\n overflow: hidden;\n -webkit-transition-property: height, visibility;\n transition-property: height, visibility;\n -webkit-transition-duration: 0.35s;\n transition-duration: 0.35s;\n -webkit-transition-timing-function: ease;\n transition-timing-function: ease;\n}\n.caret {\n display: inline-block;\n width: 0;\n height: 0;\n margin-left: 2px;\n vertical-align: middle;\n border-top: 4px dashed;\n border-top: 4px solid \\9;\n border-right: 4px solid transparent;\n border-left: 4px solid transparent;\n}\n.dropup,\n.dropdown {\n position: relative;\n}\n.dropdown-toggle:focus {\n outline: 0;\n}\n.dropdown-menu {\n position: absolute;\n top: 100%;\n left: 0;\n z-index: 1000;\n display: none;\n float: left;\n min-width: 160px;\n padding: 5px 0;\n margin: 2px 0 0;\n font-size: 14px;\n text-align: left;\n list-style: none;\n background-color: #fff;\n background-clip: padding-box;\n border: 1px solid #ccc;\n border: 1px solid rgba(0, 0, 0, 0.15);\n border-radius: 4px;\n -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);\n box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);\n}\n.dropdown-menu.pull-right {\n right: 0;\n left: auto;\n}\n.dropdown-menu .divider {\n height: 1px;\n margin: 9px 0;\n overflow: hidden;\n background-color: #e5e5e5;\n}\n.dropdown-menu > li > a {\n display: block;\n padding: 3px 20px;\n clear: both;\n font-weight: 400;\n line-height: 1.42857143;\n color: #333333;\n white-space: nowrap;\n}\n.dropdown-menu > li > a:hover,\n.dropdown-menu > li > a:focus {\n color: #262626;\n text-decoration: none;\n background-color: #f5f5f5;\n}\n.dropdown-menu > .active > a,\n.dropdown-menu > .active > a:hover,\n.dropdown-menu > .active > a:focus {\n color: #fff;\n text-decoration: none;\n background-color: #337ab7;\n outline: 0;\n}\n.dropdown-menu > .disabled > a,\n.dropdown-menu > .disabled > a:hover,\n.dropdown-menu > .disabled > a:focus {\n color: #777777;\n}\n.dropdown-menu > .disabled > a:hover,\n.dropdown-menu > .disabled > a:focus {\n text-decoration: none;\n cursor: not-allowed;\n background-color: transparent;\n background-image: none;\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n}\n.open > .dropdown-menu {\n display: block;\n}\n.open > a {\n outline: 0;\n}\n.dropdown-menu-right {\n right: 0;\n left: auto;\n}\n.dropdown-menu-left {\n right: auto;\n left: 0;\n}\n.dropdown-header {\n display: block;\n padding: 3px 20px;\n font-size: 12px;\n line-height: 1.42857143;\n color: #777777;\n white-space: nowrap;\n}\n.dropdown-backdrop {\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 990;\n}\n.pull-right > .dropdown-menu {\n right: 0;\n left: auto;\n}\n.dropup .caret,\n.navbar-fixed-bottom .dropdown .caret {\n content: \"\";\n border-top: 0;\n border-bottom: 4px dashed;\n border-bottom: 4px solid \\9;\n}\n.dropup .dropdown-menu,\n.navbar-fixed-bottom .dropdown .dropdown-menu {\n top: auto;\n bottom: 100%;\n margin-bottom: 2px;\n}\n@media (min-width: 768px) {\n .navbar-right .dropdown-menu {\n right: 0;\n left: auto;\n }\n .navbar-right .dropdown-menu-left {\n right: auto;\n left: 0;\n }\n}\n.btn-group,\n.btn-group-vertical {\n position: relative;\n display: inline-block;\n vertical-align: middle;\n}\n.btn-group > .btn,\n.btn-group-vertical > .btn {\n position: relative;\n float: left;\n}\n.btn-group > .btn:hover,\n.btn-group-vertical > .btn:hover,\n.btn-group > .btn:focus,\n.btn-group-vertical > .btn:focus,\n.btn-group > .btn:active,\n.btn-group-vertical > .btn:active,\n.btn-group > .btn.active,\n.btn-group-vertical > .btn.active {\n z-index: 2;\n}\n.btn-group .btn + .btn,\n.btn-group .btn + .btn-group,\n.btn-group .btn-group + .btn,\n.btn-group .btn-group + .btn-group {\n margin-left: -1px;\n}\n.btn-toolbar {\n margin-left: -5px;\n}\n.btn-toolbar .btn,\n.btn-toolbar .btn-group,\n.btn-toolbar .input-group {\n float: left;\n}\n.btn-toolbar > .btn,\n.btn-toolbar > .btn-group,\n.btn-toolbar > .input-group {\n margin-left: 5px;\n}\n.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) {\n border-radius: 0;\n}\n.btn-group > .btn:first-child {\n margin-left: 0;\n}\n.btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle) {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n}\n.btn-group > .btn:last-child:not(:first-child),\n.btn-group > .dropdown-toggle:not(:first-child) {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n}\n.btn-group > .btn-group {\n float: left;\n}\n.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn {\n border-radius: 0;\n}\n.btn-group > .btn-group:first-child:not(:last-child) > .btn:last-child,\n.btn-group > .btn-group:first-child:not(:last-child) > .dropdown-toggle {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n}\n.btn-group > .btn-group:last-child:not(:first-child) > .btn:first-child {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n}\n.btn-group .dropdown-toggle:active,\n.btn-group.open .dropdown-toggle {\n outline: 0;\n}\n.btn-group > .btn + .dropdown-toggle {\n padding-right: 8px;\n padding-left: 8px;\n}\n.btn-group > .btn-lg + .dropdown-toggle {\n padding-right: 12px;\n padding-left: 12px;\n}\n.btn-group.open .dropdown-toggle {\n -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n}\n.btn-group.open .dropdown-toggle.btn-link {\n -webkit-box-shadow: none;\n box-shadow: none;\n}\n.btn .caret {\n margin-left: 0;\n}\n.btn-lg .caret {\n border-width: 5px 5px 0;\n border-bottom-width: 0;\n}\n.dropup .btn-lg .caret {\n border-width: 0 5px 5px;\n}\n.btn-group-vertical > .btn,\n.btn-group-vertical > .btn-group,\n.btn-group-vertical > .btn-group > .btn {\n display: block;\n float: none;\n width: 100%;\n max-width: 100%;\n}\n.btn-group-vertical > .btn-group > .btn {\n float: none;\n}\n.btn-group-vertical > .btn + .btn,\n.btn-group-vertical > .btn + .btn-group,\n.btn-group-vertical > .btn-group + .btn,\n.btn-group-vertical > .btn-group + .btn-group {\n margin-top: -1px;\n margin-left: 0;\n}\n.btn-group-vertical > .btn:not(:first-child):not(:last-child) {\n border-radius: 0;\n}\n.btn-group-vertical > .btn:first-child:not(:last-child) {\n border-top-left-radius: 4px;\n border-top-right-radius: 4px;\n border-bottom-right-radius: 0;\n border-bottom-left-radius: 0;\n}\n.btn-group-vertical > .btn:last-child:not(:first-child) {\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n border-bottom-right-radius: 4px;\n border-bottom-left-radius: 4px;\n}\n.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn {\n border-radius: 0;\n}\n.btn-group-vertical > .btn-group:first-child:not(:last-child) > .btn:last-child,\n.btn-group-vertical > .btn-group:first-child:not(:last-child) > .dropdown-toggle {\n border-bottom-right-radius: 0;\n border-bottom-left-radius: 0;\n}\n.btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child {\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n}\n.btn-group-justified {\n display: table;\n width: 100%;\n table-layout: fixed;\n border-collapse: separate;\n}\n.btn-group-justified > .btn,\n.btn-group-justified > .btn-group {\n display: table-cell;\n float: none;\n width: 1%;\n}\n.btn-group-justified > .btn-group .btn {\n width: 100%;\n}\n.btn-group-justified > .btn-group .dropdown-menu {\n left: auto;\n}\n[data-toggle=\"buttons\"] > .btn input[type=\"radio\"],\n[data-toggle=\"buttons\"] > .btn-group > .btn input[type=\"radio\"],\n[data-toggle=\"buttons\"] > .btn input[type=\"checkbox\"],\n[data-toggle=\"buttons\"] > .btn-group > .btn input[type=\"checkbox\"] {\n position: absolute;\n clip: rect(0, 0, 0, 0);\n pointer-events: none;\n}\n.input-group {\n position: relative;\n display: table;\n border-collapse: separate;\n}\n.input-group[class*=\"col-\"] {\n float: none;\n padding-right: 0;\n padding-left: 0;\n}\n.input-group .form-control {\n position: relative;\n z-index: 2;\n float: left;\n width: 100%;\n margin-bottom: 0;\n}\n.input-group .form-control:focus {\n z-index: 3;\n}\n.input-group-lg > .form-control,\n.input-group-lg > .input-group-addon,\n.input-group-lg > .input-group-btn > .btn {\n height: 46px;\n padding: 10px 16px;\n font-size: 18px;\n line-height: 1.3333333;\n border-radius: 6px;\n}\nselect.input-group-lg > .form-control,\nselect.input-group-lg > .input-group-addon,\nselect.input-group-lg > .input-group-btn > .btn {\n height: 46px;\n line-height: 46px;\n}\ntextarea.input-group-lg > .form-control,\ntextarea.input-group-lg > .input-group-addon,\ntextarea.input-group-lg > .input-group-btn > .btn,\nselect[multiple].input-group-lg > .form-control,\nselect[multiple].input-group-lg > .input-group-addon,\nselect[multiple].input-group-lg > .input-group-btn > .btn {\n height: auto;\n}\n.input-group-sm > .form-control,\n.input-group-sm > .input-group-addon,\n.input-group-sm > .input-group-btn > .btn {\n height: 30px;\n padding: 5px 10px;\n font-size: 12px;\n line-height: 1.5;\n border-radius: 3px;\n}\nselect.input-group-sm > .form-control,\nselect.input-group-sm > .input-group-addon,\nselect.input-group-sm > .input-group-btn > .btn {\n height: 30px;\n line-height: 30px;\n}\ntextarea.input-group-sm > .form-control,\ntextarea.input-group-sm > .input-group-addon,\ntextarea.input-group-sm > .input-group-btn > .btn,\nselect[multiple].input-group-sm > .form-control,\nselect[multiple].input-group-sm > .input-group-addon,\nselect[multiple].input-group-sm > .input-group-btn > .btn {\n height: auto;\n}\n.input-group-addon,\n.input-group-btn,\n.input-group .form-control {\n display: table-cell;\n}\n.input-group-addon:not(:first-child):not(:last-child),\n.input-group-btn:not(:first-child):not(:last-child),\n.input-group .form-control:not(:first-child):not(:last-child) {\n border-radius: 0;\n}\n.input-group-addon,\n.input-group-btn {\n width: 1%;\n white-space: nowrap;\n vertical-align: middle;\n}\n.input-group-addon {\n padding: 6px 12px;\n font-size: 14px;\n font-weight: 400;\n line-height: 1;\n color: #555555;\n text-align: center;\n background-color: #eeeeee;\n border: 1px solid #ccc;\n border-radius: 4px;\n}\n.input-group-addon.input-sm {\n padding: 5px 10px;\n font-size: 12px;\n border-radius: 3px;\n}\n.input-group-addon.input-lg {\n padding: 10px 16px;\n font-size: 18px;\n border-radius: 6px;\n}\n.input-group-addon input[type=\"radio\"],\n.input-group-addon input[type=\"checkbox\"] {\n margin-top: 0;\n}\n.input-group .form-control:first-child,\n.input-group-addon:first-child,\n.input-group-btn:first-child > .btn,\n.input-group-btn:first-child > .btn-group > .btn,\n.input-group-btn:first-child > .dropdown-toggle,\n.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle),\n.input-group-btn:last-child > .btn-group:not(:last-child) > .btn {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n}\n.input-group-addon:first-child {\n border-right: 0;\n}\n.input-group .form-control:last-child,\n.input-group-addon:last-child,\n.input-group-btn:last-child > .btn,\n.input-group-btn:last-child > .btn-group > .btn,\n.input-group-btn:last-child > .dropdown-toggle,\n.input-group-btn:first-child > .btn:not(:first-child),\n.input-group-btn:first-child > .btn-group:not(:first-child) > .btn {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n}\n.input-group-addon:last-child {\n border-left: 0;\n}\n.input-group-btn {\n position: relative;\n font-size: 0;\n white-space: nowrap;\n}\n.input-group-btn > .btn {\n position: relative;\n}\n.input-group-btn > .btn + .btn {\n margin-left: -1px;\n}\n.input-group-btn > .btn:hover,\n.input-group-btn > .btn:focus,\n.input-group-btn > .btn:active {\n z-index: 2;\n}\n.input-group-btn:first-child > .btn,\n.input-group-btn:first-child > .btn-group {\n margin-right: -1px;\n}\n.input-group-btn:last-child > .btn,\n.input-group-btn:last-child > .btn-group {\n z-index: 2;\n margin-left: -1px;\n}\n.nav {\n padding-left: 0;\n margin-bottom: 0;\n list-style: none;\n}\n.nav > li {\n position: relative;\n display: block;\n}\n.nav > li > a {\n position: relative;\n display: block;\n padding: 10px 15px;\n}\n.nav > li > a:hover,\n.nav > li > a:focus {\n text-decoration: none;\n background-color: #eeeeee;\n}\n.nav > li.disabled > a {\n color: #777777;\n}\n.nav > li.disabled > a:hover,\n.nav > li.disabled > a:focus {\n color: #777777;\n text-decoration: none;\n cursor: not-allowed;\n background-color: transparent;\n}\n.nav .open > a,\n.nav .open > a:hover,\n.nav .open > a:focus {\n background-color: #eeeeee;\n border-color: #337ab7;\n}\n.nav .nav-divider {\n height: 1px;\n margin: 9px 0;\n overflow: hidden;\n background-color: #e5e5e5;\n}\n.nav > li > a > img {\n max-width: none;\n}\n.nav-tabs {\n border-bottom: 1px solid #ddd;\n}\n.nav-tabs > li {\n float: left;\n margin-bottom: -1px;\n}\n.nav-tabs > li > a {\n margin-right: 2px;\n line-height: 1.42857143;\n border: 1px solid transparent;\n border-radius: 4px 4px 0 0;\n}\n.nav-tabs > li > a:hover {\n border-color: #eeeeee #eeeeee #ddd;\n}\n.nav-tabs > li.active > a,\n.nav-tabs > li.active > a:hover,\n.nav-tabs > li.active > a:focus {\n color: #555555;\n cursor: default;\n background-color: #fff;\n border: 1px solid #ddd;\n border-bottom-color: transparent;\n}\n.nav-tabs.nav-justified {\n width: 100%;\n border-bottom: 0;\n}\n.nav-tabs.nav-justified > li {\n float: none;\n}\n.nav-tabs.nav-justified > li > a {\n margin-bottom: 5px;\n text-align: center;\n}\n.nav-tabs.nav-justified > .dropdown .dropdown-menu {\n top: auto;\n left: auto;\n}\n@media (min-width: 768px) {\n .nav-tabs.nav-justified > li {\n display: table-cell;\n width: 1%;\n }\n .nav-tabs.nav-justified > li > a {\n margin-bottom: 0;\n }\n}\n.nav-tabs.nav-justified > li > a {\n margin-right: 0;\n border-radius: 4px;\n}\n.nav-tabs.nav-justified > .active > a,\n.nav-tabs.nav-justified > .active > a:hover,\n.nav-tabs.nav-justified > .active > a:focus {\n border: 1px solid #ddd;\n}\n@media (min-width: 768px) {\n .nav-tabs.nav-justified > li > a {\n border-bottom: 1px solid #ddd;\n border-radius: 4px 4px 0 0;\n }\n .nav-tabs.nav-justified > .active > a,\n .nav-tabs.nav-justified > .active > a:hover,\n .nav-tabs.nav-justified > .active > a:focus {\n border-bottom-color: #fff;\n }\n}\n.nav-pills > li {\n float: left;\n}\n.nav-pills > li > a {\n border-radius: 4px;\n}\n.nav-pills > li + li {\n margin-left: 2px;\n}\n.nav-pills > li.active > a,\n.nav-pills > li.active > a:hover,\n.nav-pills > li.active > a:focus {\n color: #fff;\n background-color: #337ab7;\n}\n.nav-stacked > li {\n float: none;\n}\n.nav-stacked > li + li {\n margin-top: 2px;\n margin-left: 0;\n}\n.nav-justified {\n width: 100%;\n}\n.nav-justified > li {\n float: none;\n}\n.nav-justified > li > a {\n margin-bottom: 5px;\n text-align: center;\n}\n.nav-justified > .dropdown .dropdown-menu {\n top: auto;\n left: auto;\n}\n@media (min-width: 768px) {\n .nav-justified > li {\n display: table-cell;\n width: 1%;\n }\n .nav-justified > li > a {\n margin-bottom: 0;\n }\n}\n.nav-tabs-justified {\n border-bottom: 0;\n}\n.nav-tabs-justified > li > a {\n margin-right: 0;\n border-radius: 4px;\n}\n.nav-tabs-justified > .active > a,\n.nav-tabs-justified > .active > a:hover,\n.nav-tabs-justified > .active > a:focus {\n border: 1px solid #ddd;\n}\n@media (min-width: 768px) {\n .nav-tabs-justified > li > a {\n border-bottom: 1px solid #ddd;\n border-radius: 4px 4px 0 0;\n }\n .nav-tabs-justified > .active > a,\n .nav-tabs-justified > .active > a:hover,\n .nav-tabs-justified > .active > a:focus {\n border-bottom-color: #fff;\n }\n}\n.tab-content > .tab-pane {\n display: none;\n}\n.tab-content > .active {\n display: block;\n}\n.nav-tabs .dropdown-menu {\n margin-top: -1px;\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n}\n.navbar {\n position: relative;\n min-height: 50px;\n margin-bottom: 20px;\n border: 1px solid transparent;\n}\n@media (min-width: 768px) {\n .navbar {\n border-radius: 4px;\n }\n}\n@media (min-width: 768px) {\n .navbar-header {\n float: left;\n }\n}\n.navbar-collapse {\n padding-right: 15px;\n padding-left: 15px;\n overflow-x: visible;\n border-top: 1px solid transparent;\n box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1);\n -webkit-overflow-scrolling: touch;\n}\n.navbar-collapse.in {\n overflow-y: auto;\n}\n@media (min-width: 768px) {\n .navbar-collapse {\n width: auto;\n border-top: 0;\n box-shadow: none;\n }\n .navbar-collapse.collapse {\n display: block !important;\n height: auto !important;\n padding-bottom: 0;\n overflow: visible !important;\n }\n .navbar-collapse.in {\n overflow-y: visible;\n }\n .navbar-fixed-top .navbar-collapse,\n .navbar-static-top .navbar-collapse,\n .navbar-fixed-bottom .navbar-collapse {\n padding-right: 0;\n padding-left: 0;\n }\n}\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n position: fixed;\n right: 0;\n left: 0;\n z-index: 1030;\n}\n.navbar-fixed-top .navbar-collapse,\n.navbar-fixed-bottom .navbar-collapse {\n max-height: 340px;\n}\n@media (max-device-width: 480px) and (orientation: landscape) {\n .navbar-fixed-top .navbar-collapse,\n .navbar-fixed-bottom .navbar-collapse {\n max-height: 200px;\n }\n}\n@media (min-width: 768px) {\n .navbar-fixed-top,\n .navbar-fixed-bottom {\n border-radius: 0;\n }\n}\n.navbar-fixed-top {\n top: 0;\n border-width: 0 0 1px;\n}\n.navbar-fixed-bottom {\n bottom: 0;\n margin-bottom: 0;\n border-width: 1px 0 0;\n}\n.container > .navbar-header,\n.container-fluid > .navbar-header,\n.container > .navbar-collapse,\n.container-fluid > .navbar-collapse {\n margin-right: -15px;\n margin-left: -15px;\n}\n@media (min-width: 768px) {\n .container > .navbar-header,\n .container-fluid > .navbar-header,\n .container > .navbar-collapse,\n .container-fluid > .navbar-collapse {\n margin-right: 0;\n margin-left: 0;\n }\n}\n.navbar-static-top {\n z-index: 1000;\n border-width: 0 0 1px;\n}\n@media (min-width: 768px) {\n .navbar-static-top {\n border-radius: 0;\n }\n}\n.navbar-brand {\n float: left;\n height: 50px;\n padding: 15px 15px;\n font-size: 18px;\n line-height: 20px;\n}\n.navbar-brand:hover,\n.navbar-brand:focus {\n text-decoration: none;\n}\n.navbar-brand > img {\n display: block;\n}\n@media (min-width: 768px) {\n .navbar > .container .navbar-brand,\n .navbar > .container-fluid .navbar-brand {\n margin-left: -15px;\n }\n}\n.navbar-toggle {\n position: relative;\n float: right;\n padding: 9px 10px;\n margin-right: 15px;\n margin-top: 8px;\n margin-bottom: 8px;\n background-color: transparent;\n background-image: none;\n border: 1px solid transparent;\n border-radius: 4px;\n}\n.navbar-toggle:focus {\n outline: 0;\n}\n.navbar-toggle .icon-bar {\n display: block;\n width: 22px;\n height: 2px;\n border-radius: 1px;\n}\n.navbar-toggle .icon-bar + .icon-bar {\n margin-top: 4px;\n}\n@media (min-width: 768px) {\n .navbar-toggle {\n display: none;\n }\n}\n.navbar-nav {\n margin: 7.5px -15px;\n}\n.navbar-nav > li > a {\n padding-top: 10px;\n padding-bottom: 10px;\n line-height: 20px;\n}\n@media (max-width: 767px) {\n .navbar-nav .open .dropdown-menu {\n position: static;\n float: none;\n width: auto;\n margin-top: 0;\n background-color: transparent;\n border: 0;\n box-shadow: none;\n }\n .navbar-nav .open .dropdown-menu > li > a,\n .navbar-nav .open .dropdown-menu .dropdown-header {\n padding: 5px 15px 5px 25px;\n }\n .navbar-nav .open .dropdown-menu > li > a {\n line-height: 20px;\n }\n .navbar-nav .open .dropdown-menu > li > a:hover,\n .navbar-nav .open .dropdown-menu > li > a:focus {\n background-image: none;\n }\n}\n@media (min-width: 768px) {\n .navbar-nav {\n float: left;\n margin: 0;\n }\n .navbar-nav > li {\n float: left;\n }\n .navbar-nav > li > a {\n padding-top: 15px;\n padding-bottom: 15px;\n }\n}\n.navbar-form {\n padding: 10px 15px;\n margin-right: -15px;\n margin-left: -15px;\n border-top: 1px solid transparent;\n border-bottom: 1px solid transparent;\n -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);\n box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);\n margin-top: 8px;\n margin-bottom: 8px;\n}\n@media (min-width: 768px) {\n .navbar-form .form-group {\n display: inline-block;\n margin-bottom: 0;\n vertical-align: middle;\n }\n .navbar-form .form-control {\n display: inline-block;\n width: auto;\n vertical-align: middle;\n }\n .navbar-form .form-control-static {\n display: inline-block;\n }\n .navbar-form .input-group {\n display: inline-table;\n vertical-align: middle;\n }\n .navbar-form .input-group .input-group-addon,\n .navbar-form .input-group .input-group-btn,\n .navbar-form .input-group .form-control {\n width: auto;\n }\n .navbar-form .input-group > .form-control {\n width: 100%;\n }\n .navbar-form .control-label {\n margin-bottom: 0;\n vertical-align: middle;\n }\n .navbar-form .radio,\n .navbar-form .checkbox {\n display: inline-block;\n margin-top: 0;\n margin-bottom: 0;\n vertical-align: middle;\n }\n .navbar-form .radio label,\n .navbar-form .checkbox label {\n padding-left: 0;\n }\n .navbar-form .radio input[type=\"radio\"],\n .navbar-form .checkbox input[type=\"checkbox\"] {\n position: relative;\n margin-left: 0;\n }\n .navbar-form .has-feedback .form-control-feedback {\n top: 0;\n }\n}\n@media (max-width: 767px) {\n .navbar-form .form-group {\n margin-bottom: 5px;\n }\n .navbar-form .form-group:last-child {\n margin-bottom: 0;\n }\n}\n@media (min-width: 768px) {\n .navbar-form {\n width: auto;\n padding-top: 0;\n padding-bottom: 0;\n margin-right: 0;\n margin-left: 0;\n border: 0;\n -webkit-box-shadow: none;\n box-shadow: none;\n }\n}\n.navbar-nav > li > .dropdown-menu {\n margin-top: 0;\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n}\n.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu {\n margin-bottom: 0;\n border-top-left-radius: 4px;\n border-top-right-radius: 4px;\n border-bottom-right-radius: 0;\n border-bottom-left-radius: 0;\n}\n.navbar-btn {\n margin-top: 8px;\n margin-bottom: 8px;\n}\n.navbar-btn.btn-sm {\n margin-top: 10px;\n margin-bottom: 10px;\n}\n.navbar-btn.btn-xs {\n margin-top: 14px;\n margin-bottom: 14px;\n}\n.navbar-text {\n margin-top: 15px;\n margin-bottom: 15px;\n}\n@media (min-width: 768px) {\n .navbar-text {\n float: left;\n margin-right: 15px;\n margin-left: 15px;\n }\n}\n@media (min-width: 768px) {\n .navbar-left {\n float: left !important;\n }\n .navbar-right {\n float: right !important;\n margin-right: -15px;\n }\n .navbar-right ~ .navbar-right {\n margin-right: 0;\n }\n}\n.navbar-default {\n background-color: #f8f8f8;\n border-color: #e7e7e7;\n}\n.navbar-default .navbar-brand {\n color: #777;\n}\n.navbar-default .navbar-brand:hover,\n.navbar-default .navbar-brand:focus {\n color: #5e5e5e;\n background-color: transparent;\n}\n.navbar-default .navbar-text {\n color: #777;\n}\n.navbar-default .navbar-nav > li > a {\n color: #777;\n}\n.navbar-default .navbar-nav > li > a:hover,\n.navbar-default .navbar-nav > li > a:focus {\n color: #333;\n background-color: transparent;\n}\n.navbar-default .navbar-nav > .active > a,\n.navbar-default .navbar-nav > .active > a:hover,\n.navbar-default .navbar-nav > .active > a:focus {\n color: #555;\n background-color: #e7e7e7;\n}\n.navbar-default .navbar-nav > .disabled > a,\n.navbar-default .navbar-nav > .disabled > a:hover,\n.navbar-default .navbar-nav > .disabled > a:focus {\n color: #ccc;\n background-color: transparent;\n}\n.navbar-default .navbar-nav > .open > a,\n.navbar-default .navbar-nav > .open > a:hover,\n.navbar-default .navbar-nav > .open > a:focus {\n color: #555;\n background-color: #e7e7e7;\n}\n@media (max-width: 767px) {\n .navbar-default .navbar-nav .open .dropdown-menu > li > a {\n color: #777;\n }\n .navbar-default .navbar-nav .open .dropdown-menu > li > a:hover,\n .navbar-default .navbar-nav .open .dropdown-menu > li > a:focus {\n color: #333;\n background-color: transparent;\n }\n .navbar-default .navbar-nav .open .dropdown-menu > .active > a,\n .navbar-default .navbar-nav .open .dropdown-menu > .active > a:hover,\n .navbar-default .navbar-nav .open .dropdown-menu > .active > a:focus {\n color: #555;\n background-color: #e7e7e7;\n }\n .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a,\n .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:hover,\n .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:focus {\n color: #ccc;\n background-color: transparent;\n }\n}\n.navbar-default .navbar-toggle {\n border-color: #ddd;\n}\n.navbar-default .navbar-toggle:hover,\n.navbar-default .navbar-toggle:focus {\n background-color: #ddd;\n}\n.navbar-default .navbar-toggle .icon-bar {\n background-color: #888;\n}\n.navbar-default .navbar-collapse,\n.navbar-default .navbar-form {\n border-color: #e7e7e7;\n}\n.navbar-default .navbar-link {\n color: #777;\n}\n.navbar-default .navbar-link:hover {\n color: #333;\n}\n.navbar-default .btn-link {\n color: #777;\n}\n.navbar-default .btn-link:hover,\n.navbar-default .btn-link:focus {\n color: #333;\n}\n.navbar-default .btn-link[disabled]:hover,\nfieldset[disabled] .navbar-default .btn-link:hover,\n.navbar-default .btn-link[disabled]:focus,\nfieldset[disabled] .navbar-default .btn-link:focus {\n color: #ccc;\n}\n.navbar-inverse {\n background-color: #222;\n border-color: #080808;\n}\n.navbar-inverse .navbar-brand {\n color: #9d9d9d;\n}\n.navbar-inverse .navbar-brand:hover,\n.navbar-inverse .navbar-brand:focus {\n color: #fff;\n background-color: transparent;\n}\n.navbar-inverse .navbar-text {\n color: #9d9d9d;\n}\n.navbar-inverse .navbar-nav > li > a {\n color: #9d9d9d;\n}\n.navbar-inverse .navbar-nav > li > a:hover,\n.navbar-inverse .navbar-nav > li > a:focus {\n color: #fff;\n background-color: transparent;\n}\n.navbar-inverse .navbar-nav > .active > a,\n.navbar-inverse .navbar-nav > .active > a:hover,\n.navbar-inverse .navbar-nav > .active > a:focus {\n color: #fff;\n background-color: #080808;\n}\n.navbar-inverse .navbar-nav > .disabled > a,\n.navbar-inverse .navbar-nav > .disabled > a:hover,\n.navbar-inverse .navbar-nav > .disabled > a:focus {\n color: #444;\n background-color: transparent;\n}\n.navbar-inverse .navbar-nav > .open > a,\n.navbar-inverse .navbar-nav > .open > a:hover,\n.navbar-inverse .navbar-nav > .open > a:focus {\n color: #fff;\n background-color: #080808;\n}\n@media (max-width: 767px) {\n .navbar-inverse .navbar-nav .open .dropdown-menu > .dropdown-header {\n border-color: #080808;\n }\n .navbar-inverse .navbar-nav .open .dropdown-menu .divider {\n background-color: #080808;\n }\n .navbar-inverse .navbar-nav .open .dropdown-menu > li > a {\n color: #9d9d9d;\n }\n .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:hover,\n .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:focus {\n color: #fff;\n background-color: transparent;\n }\n .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a,\n .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:hover,\n .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:focus {\n color: #fff;\n background-color: #080808;\n }\n .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a,\n .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:hover,\n .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:focus {\n color: #444;\n background-color: transparent;\n }\n}\n.navbar-inverse .navbar-toggle {\n border-color: #333;\n}\n.navbar-inverse .navbar-toggle:hover,\n.navbar-inverse .navbar-toggle:focus {\n background-color: #333;\n}\n.navbar-inverse .navbar-toggle .icon-bar {\n background-color: #fff;\n}\n.navbar-inverse .navbar-collapse,\n.navbar-inverse .navbar-form {\n border-color: #101010;\n}\n.navbar-inverse .navbar-link {\n color: #9d9d9d;\n}\n.navbar-inverse .navbar-link:hover {\n color: #fff;\n}\n.navbar-inverse .btn-link {\n color: #9d9d9d;\n}\n.navbar-inverse .btn-link:hover,\n.navbar-inverse .btn-link:focus {\n color: #fff;\n}\n.navbar-inverse .btn-link[disabled]:hover,\nfieldset[disabled] .navbar-inverse .btn-link:hover,\n.navbar-inverse .btn-link[disabled]:focus,\nfieldset[disabled] .navbar-inverse .btn-link:focus {\n color: #444;\n}\n.breadcrumb {\n padding: 8px 15px;\n margin-bottom: 20px;\n list-style: none;\n background-color: #f5f5f5;\n border-radius: 4px;\n}\n.breadcrumb > li {\n display: inline-block;\n}\n.breadcrumb > li + li:before {\n padding: 0 5px;\n color: #ccc;\n content: \"/\\00a0\";\n}\n.breadcrumb > .active {\n color: #777777;\n}\n.pagination {\n display: inline-block;\n padding-left: 0;\n margin: 20px 0;\n border-radius: 4px;\n}\n.pagination > li {\n display: inline;\n}\n.pagination > li > a,\n.pagination > li > span {\n position: relative;\n float: left;\n padding: 6px 12px;\n margin-left: -1px;\n line-height: 1.42857143;\n color: #337ab7;\n text-decoration: none;\n background-color: #fff;\n border: 1px solid #ddd;\n}\n.pagination > li > a:hover,\n.pagination > li > span:hover,\n.pagination > li > a:focus,\n.pagination > li > span:focus {\n z-index: 2;\n color: #23527c;\n background-color: #eeeeee;\n border-color: #ddd;\n}\n.pagination > li:first-child > a,\n.pagination > li:first-child > span {\n margin-left: 0;\n border-top-left-radius: 4px;\n border-bottom-left-radius: 4px;\n}\n.pagination > li:last-child > a,\n.pagination > li:last-child > span {\n border-top-right-radius: 4px;\n border-bottom-right-radius: 4px;\n}\n.pagination > .active > a,\n.pagination > .active > span,\n.pagination > .active > a:hover,\n.pagination > .active > span:hover,\n.pagination > .active > a:focus,\n.pagination > .active > span:focus {\n z-index: 3;\n color: #fff;\n cursor: default;\n background-color: #337ab7;\n border-color: #337ab7;\n}\n.pagination > .disabled > span,\n.pagination > .disabled > span:hover,\n.pagination > .disabled > span:focus,\n.pagination > .disabled > a,\n.pagination > .disabled > a:hover,\n.pagination > .disabled > a:focus {\n color: #777777;\n cursor: not-allowed;\n background-color: #fff;\n border-color: #ddd;\n}\n.pagination-lg > li > a,\n.pagination-lg > li > span {\n padding: 10px 16px;\n font-size: 18px;\n line-height: 1.3333333;\n}\n.pagination-lg > li:first-child > a,\n.pagination-lg > li:first-child > span {\n border-top-left-radius: 6px;\n border-bottom-left-radius: 6px;\n}\n.pagination-lg > li:last-child > a,\n.pagination-lg > li:last-child > span {\n border-top-right-radius: 6px;\n border-bottom-right-radius: 6px;\n}\n.pagination-sm > li > a,\n.pagination-sm > li > span {\n padding: 5px 10px;\n font-size: 12px;\n line-height: 1.5;\n}\n.pagination-sm > li:first-child > a,\n.pagination-sm > li:first-child > span {\n border-top-left-radius: 3px;\n border-bottom-left-radius: 3px;\n}\n.pagination-sm > li:last-child > a,\n.pagination-sm > li:last-child > span {\n border-top-right-radius: 3px;\n border-bottom-right-radius: 3px;\n}\n.pager {\n padding-left: 0;\n margin: 20px 0;\n text-align: center;\n list-style: none;\n}\n.pager li {\n display: inline;\n}\n.pager li > a,\n.pager li > span {\n display: inline-block;\n padding: 5px 14px;\n background-color: #fff;\n border: 1px solid #ddd;\n border-radius: 15px;\n}\n.pager li > a:hover,\n.pager li > a:focus {\n text-decoration: none;\n background-color: #eeeeee;\n}\n.pager .next > a,\n.pager .next > span {\n float: right;\n}\n.pager .previous > a,\n.pager .previous > span {\n float: left;\n}\n.pager .disabled > a,\n.pager .disabled > a:hover,\n.pager .disabled > a:focus,\n.pager .disabled > span {\n color: #777777;\n cursor: not-allowed;\n background-color: #fff;\n}\n.label {\n display: inline;\n padding: 0.2em 0.6em 0.3em;\n font-size: 75%;\n font-weight: 700;\n line-height: 1;\n color: #fff;\n text-align: center;\n white-space: nowrap;\n vertical-align: baseline;\n border-radius: 0.25em;\n}\na.label:hover,\na.label:focus {\n color: #fff;\n text-decoration: none;\n cursor: pointer;\n}\n.label:empty {\n display: none;\n}\n.btn .label {\n position: relative;\n top: -1px;\n}\n.label-default {\n background-color: #777777;\n}\n.label-default[href]:hover,\n.label-default[href]:focus {\n background-color: #5e5e5e;\n}\n.label-primary {\n background-color: #337ab7;\n}\n.label-primary[href]:hover,\n.label-primary[href]:focus {\n background-color: #286090;\n}\n.label-success {\n background-color: #5cb85c;\n}\n.label-success[href]:hover,\n.label-success[href]:focus {\n background-color: #449d44;\n}\n.label-info {\n background-color: #5bc0de;\n}\n.label-info[href]:hover,\n.label-info[href]:focus {\n background-color: #31b0d5;\n}\n.label-warning {\n background-color: #f0ad4e;\n}\n.label-warning[href]:hover,\n.label-warning[href]:focus {\n background-color: #ec971f;\n}\n.label-danger {\n background-color: #d9534f;\n}\n.label-danger[href]:hover,\n.label-danger[href]:focus {\n background-color: #c9302c;\n}\n.badge {\n display: inline-block;\n min-width: 10px;\n padding: 3px 7px;\n font-size: 12px;\n font-weight: bold;\n line-height: 1;\n color: #fff;\n text-align: center;\n white-space: nowrap;\n vertical-align: middle;\n background-color: #777777;\n border-radius: 10px;\n}\n.badge:empty {\n display: none;\n}\n.btn .badge {\n position: relative;\n top: -1px;\n}\n.btn-xs .badge,\n.btn-group-xs > .btn .badge {\n top: 0;\n padding: 1px 5px;\n}\na.badge:hover,\na.badge:focus {\n color: #fff;\n text-decoration: none;\n cursor: pointer;\n}\n.list-group-item.active > .badge,\n.nav-pills > .active > a > .badge {\n color: #337ab7;\n background-color: #fff;\n}\n.list-group-item > .badge {\n float: right;\n}\n.list-group-item > .badge + .badge {\n margin-right: 5px;\n}\n.nav-pills > li > a > .badge {\n margin-left: 3px;\n}\n.jumbotron {\n padding-top: 30px;\n padding-bottom: 30px;\n margin-bottom: 30px;\n color: inherit;\n background-color: #eeeeee;\n}\n.jumbotron h1,\n.jumbotron .h1 {\n color: inherit;\n}\n.jumbotron p {\n margin-bottom: 15px;\n font-size: 21px;\n font-weight: 200;\n}\n.jumbotron > hr {\n border-top-color: #d5d5d5;\n}\n.container .jumbotron,\n.container-fluid .jumbotron {\n padding-right: 15px;\n padding-left: 15px;\n border-radius: 6px;\n}\n.jumbotron .container {\n max-width: 100%;\n}\n@media screen and (min-width: 768px) {\n .jumbotron {\n padding-top: 48px;\n padding-bottom: 48px;\n }\n .container .jumbotron,\n .container-fluid .jumbotron {\n padding-right: 60px;\n padding-left: 60px;\n }\n .jumbotron h1,\n .jumbotron .h1 {\n font-size: 63px;\n }\n}\n.thumbnail {\n display: block;\n padding: 4px;\n margin-bottom: 20px;\n line-height: 1.42857143;\n background-color: #fff;\n border: 1px solid #ddd;\n border-radius: 4px;\n -webkit-transition: border 0.2s ease-in-out;\n -o-transition: border 0.2s ease-in-out;\n transition: border 0.2s ease-in-out;\n}\n.thumbnail > img,\n.thumbnail a > img {\n margin-right: auto;\n margin-left: auto;\n}\na.thumbnail:hover,\na.thumbnail:focus,\na.thumbnail.active {\n border-color: #337ab7;\n}\n.thumbnail .caption {\n padding: 9px;\n color: #333333;\n}\n.alert {\n padding: 15px;\n margin-bottom: 20px;\n border: 1px solid transparent;\n border-radius: 4px;\n}\n.alert h4 {\n margin-top: 0;\n color: inherit;\n}\n.alert .alert-link {\n font-weight: bold;\n}\n.alert > p,\n.alert > ul {\n margin-bottom: 0;\n}\n.alert > p + p {\n margin-top: 5px;\n}\n.alert-dismissable,\n.alert-dismissible {\n padding-right: 35px;\n}\n.alert-dismissable .close,\n.alert-dismissible .close {\n position: relative;\n top: -2px;\n right: -21px;\n color: inherit;\n}\n.alert-success {\n color: #3c763d;\n background-color: #dff0d8;\n border-color: #d6e9c6;\n}\n.alert-success hr {\n border-top-color: #c9e2b3;\n}\n.alert-success .alert-link {\n color: #2b542c;\n}\n.alert-info {\n color: #31708f;\n background-color: #d9edf7;\n border-color: #bce8f1;\n}\n.alert-info hr {\n border-top-color: #a6e1ec;\n}\n.alert-info .alert-link {\n color: #245269;\n}\n.alert-warning {\n color: #8a6d3b;\n background-color: #fcf8e3;\n border-color: #faebcc;\n}\n.alert-warning hr {\n border-top-color: #f7e1b5;\n}\n.alert-warning .alert-link {\n color: #66512c;\n}\n.alert-danger {\n color: #a94442;\n background-color: #f2dede;\n border-color: #ebccd1;\n}\n.alert-danger hr {\n border-top-color: #e4b9c0;\n}\n.alert-danger .alert-link {\n color: #843534;\n}\n@-webkit-keyframes progress-bar-stripes {\n from {\n background-position: 40px 0;\n }\n to {\n background-position: 0 0;\n }\n}\n@keyframes progress-bar-stripes {\n from {\n background-position: 40px 0;\n }\n to {\n background-position: 0 0;\n }\n}\n.progress {\n height: 20px;\n margin-bottom: 20px;\n overflow: hidden;\n background-color: #f5f5f5;\n border-radius: 4px;\n -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);\n box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);\n}\n.progress-bar {\n float: left;\n width: 0%;\n height: 100%;\n font-size: 12px;\n line-height: 20px;\n color: #fff;\n text-align: center;\n background-color: #337ab7;\n -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);\n box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);\n -webkit-transition: width 0.6s ease;\n -o-transition: width 0.6s ease;\n transition: width 0.6s ease;\n}\n.progress-striped .progress-bar,\n.progress-bar-striped {\n background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-size: 40px 40px;\n}\n.progress.active .progress-bar,\n.progress-bar.active {\n -webkit-animation: progress-bar-stripes 2s linear infinite;\n -o-animation: progress-bar-stripes 2s linear infinite;\n animation: progress-bar-stripes 2s linear infinite;\n}\n.progress-bar-success {\n background-color: #5cb85c;\n}\n.progress-striped .progress-bar-success {\n background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n}\n.progress-bar-info {\n background-color: #5bc0de;\n}\n.progress-striped .progress-bar-info {\n background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n}\n.progress-bar-warning {\n background-color: #f0ad4e;\n}\n.progress-striped .progress-bar-warning {\n background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n}\n.progress-bar-danger {\n background-color: #d9534f;\n}\n.progress-striped .progress-bar-danger {\n background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n}\n.media {\n margin-top: 15px;\n}\n.media:first-child {\n margin-top: 0;\n}\n.media,\n.media-body {\n overflow: hidden;\n zoom: 1;\n}\n.media-body {\n width: 10000px;\n}\n.media-object {\n display: block;\n}\n.media-object.img-thumbnail {\n max-width: none;\n}\n.media-right,\n.media > .pull-right {\n padding-left: 10px;\n}\n.media-left,\n.media > .pull-left {\n padding-right: 10px;\n}\n.media-left,\n.media-right,\n.media-body {\n display: table-cell;\n vertical-align: top;\n}\n.media-middle {\n vertical-align: middle;\n}\n.media-bottom {\n vertical-align: bottom;\n}\n.media-heading {\n margin-top: 0;\n margin-bottom: 5px;\n}\n.media-list {\n padding-left: 0;\n list-style: none;\n}\n.list-group {\n padding-left: 0;\n margin-bottom: 20px;\n}\n.list-group-item {\n position: relative;\n display: block;\n padding: 10px 15px;\n margin-bottom: -1px;\n background-color: #fff;\n border: 1px solid #ddd;\n}\n.list-group-item:first-child {\n border-top-left-radius: 4px;\n border-top-right-radius: 4px;\n}\n.list-group-item:last-child {\n margin-bottom: 0;\n border-bottom-right-radius: 4px;\n border-bottom-left-radius: 4px;\n}\n.list-group-item.disabled,\n.list-group-item.disabled:hover,\n.list-group-item.disabled:focus {\n color: #777777;\n cursor: not-allowed;\n background-color: #eeeeee;\n}\n.list-group-item.disabled .list-group-item-heading,\n.list-group-item.disabled:hover .list-group-item-heading,\n.list-group-item.disabled:focus .list-group-item-heading {\n color: inherit;\n}\n.list-group-item.disabled .list-group-item-text,\n.list-group-item.disabled:hover .list-group-item-text,\n.list-group-item.disabled:focus .list-group-item-text {\n color: #777777;\n}\n.list-group-item.active,\n.list-group-item.active:hover,\n.list-group-item.active:focus {\n z-index: 2;\n color: #fff;\n background-color: #337ab7;\n border-color: #337ab7;\n}\n.list-group-item.active .list-group-item-heading,\n.list-group-item.active:hover .list-group-item-heading,\n.list-group-item.active:focus .list-group-item-heading,\n.list-group-item.active .list-group-item-heading > small,\n.list-group-item.active:hover .list-group-item-heading > small,\n.list-group-item.active:focus .list-group-item-heading > small,\n.list-group-item.active .list-group-item-heading > .small,\n.list-group-item.active:hover .list-group-item-heading > .small,\n.list-group-item.active:focus .list-group-item-heading > .small {\n color: inherit;\n}\n.list-group-item.active .list-group-item-text,\n.list-group-item.active:hover .list-group-item-text,\n.list-group-item.active:focus .list-group-item-text {\n color: #c7ddef;\n}\na.list-group-item,\nbutton.list-group-item {\n color: #555;\n}\na.list-group-item .list-group-item-heading,\nbutton.list-group-item .list-group-item-heading {\n color: #333;\n}\na.list-group-item:hover,\nbutton.list-group-item:hover,\na.list-group-item:focus,\nbutton.list-group-item:focus {\n color: #555;\n text-decoration: none;\n background-color: #f5f5f5;\n}\nbutton.list-group-item {\n width: 100%;\n text-align: left;\n}\n.list-group-item-success {\n color: #3c763d;\n background-color: #dff0d8;\n}\na.list-group-item-success,\nbutton.list-group-item-success {\n color: #3c763d;\n}\na.list-group-item-success .list-group-item-heading,\nbutton.list-group-item-success .list-group-item-heading {\n color: inherit;\n}\na.list-group-item-success:hover,\nbutton.list-group-item-success:hover,\na.list-group-item-success:focus,\nbutton.list-group-item-success:focus {\n color: #3c763d;\n background-color: #d0e9c6;\n}\na.list-group-item-success.active,\nbutton.list-group-item-success.active,\na.list-group-item-success.active:hover,\nbutton.list-group-item-success.active:hover,\na.list-group-item-success.active:focus,\nbutton.list-group-item-success.active:focus {\n color: #fff;\n background-color: #3c763d;\n border-color: #3c763d;\n}\n.list-group-item-info {\n color: #31708f;\n background-color: #d9edf7;\n}\na.list-group-item-info,\nbutton.list-group-item-info {\n color: #31708f;\n}\na.list-group-item-info .list-group-item-heading,\nbutton.list-group-item-info .list-group-item-heading {\n color: inherit;\n}\na.list-group-item-info:hover,\nbutton.list-group-item-info:hover,\na.list-group-item-info:focus,\nbutton.list-group-item-info:focus {\n color: #31708f;\n background-color: #c4e3f3;\n}\na.list-group-item-info.active,\nbutton.list-group-item-info.active,\na.list-group-item-info.active:hover,\nbutton.list-group-item-info.active:hover,\na.list-group-item-info.active:focus,\nbutton.list-group-item-info.active:focus {\n color: #fff;\n background-color: #31708f;\n border-color: #31708f;\n}\n.list-group-item-warning {\n color: #8a6d3b;\n background-color: #fcf8e3;\n}\na.list-group-item-warning,\nbutton.list-group-item-warning {\n color: #8a6d3b;\n}\na.list-group-item-warning .list-group-item-heading,\nbutton.list-group-item-warning .list-group-item-heading {\n color: inherit;\n}\na.list-group-item-warning:hover,\nbutton.list-group-item-warning:hover,\na.list-group-item-warning:focus,\nbutton.list-group-item-warning:focus {\n color: #8a6d3b;\n background-color: #faf2cc;\n}\na.list-group-item-warning.active,\nbutton.list-group-item-warning.active,\na.list-group-item-warning.active:hover,\nbutton.list-group-item-warning.active:hover,\na.list-group-item-warning.active:focus,\nbutton.list-group-item-warning.active:focus {\n color: #fff;\n background-color: #8a6d3b;\n border-color: #8a6d3b;\n}\n.list-group-item-danger {\n color: #a94442;\n background-color: #f2dede;\n}\na.list-group-item-danger,\nbutton.list-group-item-danger {\n color: #a94442;\n}\na.list-group-item-danger .list-group-item-heading,\nbutton.list-group-item-danger .list-group-item-heading {\n color: inherit;\n}\na.list-group-item-danger:hover,\nbutton.list-group-item-danger:hover,\na.list-group-item-danger:focus,\nbutton.list-group-item-danger:focus {\n color: #a94442;\n background-color: #ebcccc;\n}\na.list-group-item-danger.active,\nbutton.list-group-item-danger.active,\na.list-group-item-danger.active:hover,\nbutton.list-group-item-danger.active:hover,\na.list-group-item-danger.active:focus,\nbutton.list-group-item-danger.active:focus {\n color: #fff;\n background-color: #a94442;\n border-color: #a94442;\n}\n.list-group-item-heading {\n margin-top: 0;\n margin-bottom: 5px;\n}\n.list-group-item-text {\n margin-bottom: 0;\n line-height: 1.3;\n}\n.panel {\n margin-bottom: 20px;\n background-color: #fff;\n border: 1px solid transparent;\n border-radius: 4px;\n -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05);\n box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05);\n}\n.panel-body {\n padding: 15px;\n}\n.panel-heading {\n padding: 10px 15px;\n border-bottom: 1px solid transparent;\n border-top-left-radius: 3px;\n border-top-right-radius: 3px;\n}\n.panel-heading > .dropdown .dropdown-toggle {\n color: inherit;\n}\n.panel-title {\n margin-top: 0;\n margin-bottom: 0;\n font-size: 16px;\n color: inherit;\n}\n.panel-title > a,\n.panel-title > small,\n.panel-title > .small,\n.panel-title > small > a,\n.panel-title > .small > a {\n color: inherit;\n}\n.panel-footer {\n padding: 10px 15px;\n background-color: #f5f5f5;\n border-top: 1px solid #ddd;\n border-bottom-right-radius: 3px;\n border-bottom-left-radius: 3px;\n}\n.panel > .list-group,\n.panel > .panel-collapse > .list-group {\n margin-bottom: 0;\n}\n.panel > .list-group .list-group-item,\n.panel > .panel-collapse > .list-group .list-group-item {\n border-width: 1px 0;\n border-radius: 0;\n}\n.panel > .list-group:first-child .list-group-item:first-child,\n.panel > .panel-collapse > .list-group:first-child .list-group-item:first-child {\n border-top: 0;\n border-top-left-radius: 3px;\n border-top-right-radius: 3px;\n}\n.panel > .list-group:last-child .list-group-item:last-child,\n.panel > .panel-collapse > .list-group:last-child .list-group-item:last-child {\n border-bottom: 0;\n border-bottom-right-radius: 3px;\n border-bottom-left-radius: 3px;\n}\n.panel > .panel-heading + .panel-collapse > .list-group .list-group-item:first-child {\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n}\n.panel-heading + .list-group .list-group-item:first-child {\n border-top-width: 0;\n}\n.list-group + .panel-footer {\n border-top-width: 0;\n}\n.panel > .table,\n.panel > .table-responsive > .table,\n.panel > .panel-collapse > .table {\n margin-bottom: 0;\n}\n.panel > .table caption,\n.panel > .table-responsive > .table caption,\n.panel > .panel-collapse > .table caption {\n padding-right: 15px;\n padding-left: 15px;\n}\n.panel > .table:first-child,\n.panel > .table-responsive:first-child > .table:first-child {\n border-top-left-radius: 3px;\n border-top-right-radius: 3px;\n}\n.panel > .table:first-child > thead:first-child > tr:first-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child {\n border-top-left-radius: 3px;\n border-top-right-radius: 3px;\n}\n.panel > .table:first-child > thead:first-child > tr:first-child td:first-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:first-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child td:first-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:first-child,\n.panel > .table:first-child > thead:first-child > tr:first-child th:first-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:first-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child th:first-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:first-child {\n border-top-left-radius: 3px;\n}\n.panel > .table:first-child > thead:first-child > tr:first-child td:last-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:last-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child td:last-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:last-child,\n.panel > .table:first-child > thead:first-child > tr:first-child th:last-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:last-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child th:last-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:last-child {\n border-top-right-radius: 3px;\n}\n.panel > .table:last-child,\n.panel > .table-responsive:last-child > .table:last-child {\n border-bottom-right-radius: 3px;\n border-bottom-left-radius: 3px;\n}\n.panel > .table:last-child > tbody:last-child > tr:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child {\n border-bottom-right-radius: 3px;\n border-bottom-left-radius: 3px;\n}\n.panel > .table:last-child > tbody:last-child > tr:last-child td:first-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:first-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child td:first-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:first-child,\n.panel > .table:last-child > tbody:last-child > tr:last-child th:first-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:first-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child th:first-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:first-child {\n border-bottom-left-radius: 3px;\n}\n.panel > .table:last-child > tbody:last-child > tr:last-child td:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:last-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child td:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:last-child,\n.panel > .table:last-child > tbody:last-child > tr:last-child th:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:last-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child th:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:last-child {\n border-bottom-right-radius: 3px;\n}\n.panel > .panel-body + .table,\n.panel > .panel-body + .table-responsive,\n.panel > .table + .panel-body,\n.panel > .table-responsive + .panel-body {\n border-top: 1px solid #ddd;\n}\n.panel > .table > tbody:first-child > tr:first-child th,\n.panel > .table > tbody:first-child > tr:first-child td {\n border-top: 0;\n}\n.panel > .table-bordered,\n.panel > .table-responsive > .table-bordered {\n border: 0;\n}\n.panel > .table-bordered > thead > tr > th:first-child,\n.panel > .table-responsive > .table-bordered > thead > tr > th:first-child,\n.panel > .table-bordered > tbody > tr > th:first-child,\n.panel > .table-responsive > .table-bordered > tbody > tr > th:first-child,\n.panel > .table-bordered > tfoot > tr > th:first-child,\n.panel > .table-responsive > .table-bordered > tfoot > tr > th:first-child,\n.panel > .table-bordered > thead > tr > td:first-child,\n.panel > .table-responsive > .table-bordered > thead > tr > td:first-child,\n.panel > .table-bordered > tbody > tr > td:first-child,\n.panel > .table-responsive > .table-bordered > tbody > tr > td:first-child,\n.panel > .table-bordered > tfoot > tr > td:first-child,\n.panel > .table-responsive > .table-bordered > tfoot > tr > td:first-child {\n border-left: 0;\n}\n.panel > .table-bordered > thead > tr > th:last-child,\n.panel > .table-responsive > .table-bordered > thead > tr > th:last-child,\n.panel > .table-bordered > tbody > tr > th:last-child,\n.panel > .table-responsive > .table-bordered > tbody > tr > th:last-child,\n.panel > .table-bordered > tfoot > tr > th:last-child,\n.panel > .table-responsive > .table-bordered > tfoot > tr > th:last-child,\n.panel > .table-bordered > thead > tr > td:last-child,\n.panel > .table-responsive > .table-bordered > thead > tr > td:last-child,\n.panel > .table-bordered > tbody > tr > td:last-child,\n.panel > .table-responsive > .table-bordered > tbody > tr > td:last-child,\n.panel > .table-bordered > tfoot > tr > td:last-child,\n.panel > .table-responsive > .table-bordered > tfoot > tr > td:last-child {\n border-right: 0;\n}\n.panel > .table-bordered > thead > tr:first-child > td,\n.panel > .table-responsive > .table-bordered > thead > tr:first-child > td,\n.panel > .table-bordered > tbody > tr:first-child > td,\n.panel > .table-responsive > .table-bordered > tbody > tr:first-child > td,\n.panel > .table-bordered > thead > tr:first-child > th,\n.panel > .table-responsive > .table-bordered > thead > tr:first-child > th,\n.panel > .table-bordered > tbody > tr:first-child > th,\n.panel > .table-responsive > .table-bordered > tbody > tr:first-child > th {\n border-bottom: 0;\n}\n.panel > .table-bordered > tbody > tr:last-child > td,\n.panel > .table-responsive > .table-bordered > tbody > tr:last-child > td,\n.panel > .table-bordered > tfoot > tr:last-child > td,\n.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > td,\n.panel > .table-bordered > tbody > tr:last-child > th,\n.panel > .table-responsive > .table-bordered > tbody > tr:last-child > th,\n.panel > .table-bordered > tfoot > tr:last-child > th,\n.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > th {\n border-bottom: 0;\n}\n.panel > .table-responsive {\n margin-bottom: 0;\n border: 0;\n}\n.panel-group {\n margin-bottom: 20px;\n}\n.panel-group .panel {\n margin-bottom: 0;\n border-radius: 4px;\n}\n.panel-group .panel + .panel {\n margin-top: 5px;\n}\n.panel-group .panel-heading {\n border-bottom: 0;\n}\n.panel-group .panel-heading + .panel-collapse > .panel-body,\n.panel-group .panel-heading + .panel-collapse > .list-group {\n border-top: 1px solid #ddd;\n}\n.panel-group .panel-footer {\n border-top: 0;\n}\n.panel-group .panel-footer + .panel-collapse .panel-body {\n border-bottom: 1px solid #ddd;\n}\n.panel-default {\n border-color: #ddd;\n}\n.panel-default > .panel-heading {\n color: #333333;\n background-color: #f5f5f5;\n border-color: #ddd;\n}\n.panel-default > .panel-heading + .panel-collapse > .panel-body {\n border-top-color: #ddd;\n}\n.panel-default > .panel-heading .badge {\n color: #f5f5f5;\n background-color: #333333;\n}\n.panel-default > .panel-footer + .panel-collapse > .panel-body {\n border-bottom-color: #ddd;\n}\n.panel-primary {\n border-color: #337ab7;\n}\n.panel-primary > .panel-heading {\n color: #fff;\n background-color: #337ab7;\n border-color: #337ab7;\n}\n.panel-primary > .panel-heading + .panel-collapse > .panel-body {\n border-top-color: #337ab7;\n}\n.panel-primary > .panel-heading .badge {\n color: #337ab7;\n background-color: #fff;\n}\n.panel-primary > .panel-footer + .panel-collapse > .panel-body {\n border-bottom-color: #337ab7;\n}\n.panel-success {\n border-color: #d6e9c6;\n}\n.panel-success > .panel-heading {\n color: #3c763d;\n background-color: #dff0d8;\n border-color: #d6e9c6;\n}\n.panel-success > .panel-heading + .panel-collapse > .panel-body {\n border-top-color: #d6e9c6;\n}\n.panel-success > .panel-heading .badge {\n color: #dff0d8;\n background-color: #3c763d;\n}\n.panel-success > .panel-footer + .panel-collapse > .panel-body {\n border-bottom-color: #d6e9c6;\n}\n.panel-info {\n border-color: #bce8f1;\n}\n.panel-info > .panel-heading {\n color: #31708f;\n background-color: #d9edf7;\n border-color: #bce8f1;\n}\n.panel-info > .panel-heading + .panel-collapse > .panel-body {\n border-top-color: #bce8f1;\n}\n.panel-info > .panel-heading .badge {\n color: #d9edf7;\n background-color: #31708f;\n}\n.panel-info > .panel-footer + .panel-collapse > .panel-body {\n border-bottom-color: #bce8f1;\n}\n.panel-warning {\n border-color: #faebcc;\n}\n.panel-warning > .panel-heading {\n color: #8a6d3b;\n background-color: #fcf8e3;\n border-color: #faebcc;\n}\n.panel-warning > .panel-heading + .panel-collapse > .panel-body {\n border-top-color: #faebcc;\n}\n.panel-warning > .panel-heading .badge {\n color: #fcf8e3;\n background-color: #8a6d3b;\n}\n.panel-warning > .panel-footer + .panel-collapse > .panel-body {\n border-bottom-color: #faebcc;\n}\n.panel-danger {\n border-color: #ebccd1;\n}\n.panel-danger > .panel-heading {\n color: #a94442;\n background-color: #f2dede;\n border-color: #ebccd1;\n}\n.panel-danger > .panel-heading + .panel-collapse > .panel-body {\n border-top-color: #ebccd1;\n}\n.panel-danger > .panel-heading .badge {\n color: #f2dede;\n background-color: #a94442;\n}\n.panel-danger > .panel-footer + .panel-collapse > .panel-body {\n border-bottom-color: #ebccd1;\n}\n.embed-responsive {\n position: relative;\n display: block;\n height: 0;\n padding: 0;\n overflow: hidden;\n}\n.embed-responsive .embed-responsive-item,\n.embed-responsive iframe,\n.embed-responsive embed,\n.embed-responsive object,\n.embed-responsive video {\n position: absolute;\n top: 0;\n bottom: 0;\n left: 0;\n width: 100%;\n height: 100%;\n border: 0;\n}\n.embed-responsive-16by9 {\n padding-bottom: 56.25%;\n}\n.embed-responsive-4by3 {\n padding-bottom: 75%;\n}\n.well {\n min-height: 20px;\n padding: 19px;\n margin-bottom: 20px;\n background-color: #f5f5f5;\n border: 1px solid #e3e3e3;\n border-radius: 4px;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);\n}\n.well blockquote {\n border-color: #ddd;\n border-color: rgba(0, 0, 0, 0.15);\n}\n.well-lg {\n padding: 24px;\n border-radius: 6px;\n}\n.well-sm {\n padding: 9px;\n border-radius: 3px;\n}\n.close {\n float: right;\n font-size: 21px;\n font-weight: bold;\n line-height: 1;\n color: #000;\n text-shadow: 0 1px 0 #fff;\n filter: alpha(opacity=20);\n opacity: 0.2;\n}\n.close:hover,\n.close:focus {\n color: #000;\n text-decoration: none;\n cursor: pointer;\n filter: alpha(opacity=50);\n opacity: 0.5;\n}\nbutton.close {\n padding: 0;\n cursor: pointer;\n background: transparent;\n border: 0;\n -webkit-appearance: none;\n appearance: none;\n}\n.modal-open {\n overflow: hidden;\n}\n.modal {\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 1050;\n display: none;\n overflow: hidden;\n -webkit-overflow-scrolling: touch;\n outline: 0;\n}\n.modal.fade .modal-dialog {\n -webkit-transform: translate(0, -25%);\n -ms-transform: translate(0, -25%);\n -o-transform: translate(0, -25%);\n transform: translate(0, -25%);\n -webkit-transition: -webkit-transform 0.3s ease-out;\n -moz-transition: -moz-transform 0.3s ease-out;\n -o-transition: -o-transform 0.3s ease-out;\n transition: transform 0.3s ease-out;\n}\n.modal.in .modal-dialog {\n -webkit-transform: translate(0, 0);\n -ms-transform: translate(0, 0);\n -o-transform: translate(0, 0);\n transform: translate(0, 0);\n}\n.modal-open .modal {\n overflow-x: hidden;\n overflow-y: auto;\n}\n.modal-dialog {\n position: relative;\n width: auto;\n margin: 10px;\n}\n.modal-content {\n position: relative;\n background-color: #fff;\n background-clip: padding-box;\n border: 1px solid #999;\n border: 1px solid rgba(0, 0, 0, 0.2);\n border-radius: 6px;\n -webkit-box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5);\n box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5);\n outline: 0;\n}\n.modal-backdrop {\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 1040;\n background-color: #000;\n}\n.modal-backdrop.fade {\n filter: alpha(opacity=0);\n opacity: 0;\n}\n.modal-backdrop.in {\n filter: alpha(opacity=50);\n opacity: 0.5;\n}\n.modal-header {\n padding: 15px;\n border-bottom: 1px solid #e5e5e5;\n}\n.modal-header .close {\n margin-top: -2px;\n}\n.modal-title {\n margin: 0;\n line-height: 1.42857143;\n}\n.modal-body {\n position: relative;\n padding: 15px;\n}\n.modal-footer {\n padding: 15px;\n text-align: right;\n border-top: 1px solid #e5e5e5;\n}\n.modal-footer .btn + .btn {\n margin-bottom: 0;\n margin-left: 5px;\n}\n.modal-footer .btn-group .btn + .btn {\n margin-left: -1px;\n}\n.modal-footer .btn-block + .btn-block {\n margin-left: 0;\n}\n.modal-scrollbar-measure {\n position: absolute;\n top: -9999px;\n width: 50px;\n height: 50px;\n overflow: scroll;\n}\n@media (min-width: 768px) {\n .modal-dialog {\n width: 600px;\n margin: 30px auto;\n }\n .modal-content {\n -webkit-box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5);\n box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5);\n }\n .modal-sm {\n width: 300px;\n }\n}\n@media (min-width: 992px) {\n .modal-lg {\n width: 900px;\n }\n}\n.tooltip {\n position: absolute;\n z-index: 1070;\n display: block;\n font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n font-style: normal;\n font-weight: 400;\n line-height: 1.42857143;\n line-break: auto;\n text-align: left;\n text-align: start;\n text-decoration: none;\n text-shadow: none;\n text-transform: none;\n letter-spacing: normal;\n word-break: normal;\n word-spacing: normal;\n word-wrap: normal;\n white-space: normal;\n font-size: 12px;\n filter: alpha(opacity=0);\n opacity: 0;\n}\n.tooltip.in {\n filter: alpha(opacity=90);\n opacity: 0.9;\n}\n.tooltip.top {\n padding: 5px 0;\n margin-top: -3px;\n}\n.tooltip.right {\n padding: 0 5px;\n margin-left: 3px;\n}\n.tooltip.bottom {\n padding: 5px 0;\n margin-top: 3px;\n}\n.tooltip.left {\n padding: 0 5px;\n margin-left: -3px;\n}\n.tooltip.top .tooltip-arrow {\n bottom: 0;\n left: 50%;\n margin-left: -5px;\n border-width: 5px 5px 0;\n border-top-color: #000;\n}\n.tooltip.top-left .tooltip-arrow {\n right: 5px;\n bottom: 0;\n margin-bottom: -5px;\n border-width: 5px 5px 0;\n border-top-color: #000;\n}\n.tooltip.top-right .tooltip-arrow {\n bottom: 0;\n left: 5px;\n margin-bottom: -5px;\n border-width: 5px 5px 0;\n border-top-color: #000;\n}\n.tooltip.right .tooltip-arrow {\n top: 50%;\n left: 0;\n margin-top: -5px;\n border-width: 5px 5px 5px 0;\n border-right-color: #000;\n}\n.tooltip.left .tooltip-arrow {\n top: 50%;\n right: 0;\n margin-top: -5px;\n border-width: 5px 0 5px 5px;\n border-left-color: #000;\n}\n.tooltip.bottom .tooltip-arrow {\n top: 0;\n left: 50%;\n margin-left: -5px;\n border-width: 0 5px 5px;\n border-bottom-color: #000;\n}\n.tooltip.bottom-left .tooltip-arrow {\n top: 0;\n right: 5px;\n margin-top: -5px;\n border-width: 0 5px 5px;\n border-bottom-color: #000;\n}\n.tooltip.bottom-right .tooltip-arrow {\n top: 0;\n left: 5px;\n margin-top: -5px;\n border-width: 0 5px 5px;\n border-bottom-color: #000;\n}\n.tooltip-inner {\n max-width: 200px;\n padding: 3px 8px;\n color: #fff;\n text-align: center;\n background-color: #000;\n border-radius: 4px;\n}\n.tooltip-arrow {\n position: absolute;\n width: 0;\n height: 0;\n border-color: transparent;\n border-style: solid;\n}\n.popover {\n position: absolute;\n top: 0;\n left: 0;\n z-index: 1060;\n display: none;\n max-width: 276px;\n padding: 1px;\n font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n font-style: normal;\n font-weight: 400;\n line-height: 1.42857143;\n line-break: auto;\n text-align: left;\n text-align: start;\n text-decoration: none;\n text-shadow: none;\n text-transform: none;\n letter-spacing: normal;\n word-break: normal;\n word-spacing: normal;\n word-wrap: normal;\n white-space: normal;\n font-size: 14px;\n background-color: #fff;\n background-clip: padding-box;\n border: 1px solid #ccc;\n border: 1px solid rgba(0, 0, 0, 0.2);\n border-radius: 6px;\n -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);\n box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);\n}\n.popover.top {\n margin-top: -10px;\n}\n.popover.right {\n margin-left: 10px;\n}\n.popover.bottom {\n margin-top: 10px;\n}\n.popover.left {\n margin-left: -10px;\n}\n.popover > .arrow {\n border-width: 11px;\n}\n.popover > .arrow,\n.popover > .arrow:after {\n position: absolute;\n display: block;\n width: 0;\n height: 0;\n border-color: transparent;\n border-style: solid;\n}\n.popover > .arrow:after {\n content: \"\";\n border-width: 10px;\n}\n.popover.top > .arrow {\n bottom: -11px;\n left: 50%;\n margin-left: -11px;\n border-top-color: #999999;\n border-top-color: rgba(0, 0, 0, 0.25);\n border-bottom-width: 0;\n}\n.popover.top > .arrow:after {\n bottom: 1px;\n margin-left: -10px;\n content: \" \";\n border-top-color: #fff;\n border-bottom-width: 0;\n}\n.popover.right > .arrow {\n top: 50%;\n left: -11px;\n margin-top: -11px;\n border-right-color: #999999;\n border-right-color: rgba(0, 0, 0, 0.25);\n border-left-width: 0;\n}\n.popover.right > .arrow:after {\n bottom: -10px;\n left: 1px;\n content: \" \";\n border-right-color: #fff;\n border-left-width: 0;\n}\n.popover.bottom > .arrow {\n top: -11px;\n left: 50%;\n margin-left: -11px;\n border-top-width: 0;\n border-bottom-color: #999999;\n border-bottom-color: rgba(0, 0, 0, 0.25);\n}\n.popover.bottom > .arrow:after {\n top: 1px;\n margin-left: -10px;\n content: \" \";\n border-top-width: 0;\n border-bottom-color: #fff;\n}\n.popover.left > .arrow {\n top: 50%;\n right: -11px;\n margin-top: -11px;\n border-right-width: 0;\n border-left-color: #999999;\n border-left-color: rgba(0, 0, 0, 0.25);\n}\n.popover.left > .arrow:after {\n right: 1px;\n bottom: -10px;\n content: \" \";\n border-right-width: 0;\n border-left-color: #fff;\n}\n.popover-title {\n padding: 8px 14px;\n margin: 0;\n font-size: 14px;\n background-color: #f7f7f7;\n border-bottom: 1px solid #ebebeb;\n border-radius: 5px 5px 0 0;\n}\n.popover-content {\n padding: 9px 14px;\n}\n.carousel {\n position: relative;\n}\n.carousel-inner {\n position: relative;\n width: 100%;\n overflow: hidden;\n}\n.carousel-inner > .item {\n position: relative;\n display: none;\n -webkit-transition: 0.6s ease-in-out left;\n -o-transition: 0.6s ease-in-out left;\n transition: 0.6s ease-in-out left;\n}\n.carousel-inner > .item > img,\n.carousel-inner > .item > a > img {\n line-height: 1;\n}\n@media all and (transform-3d), (-webkit-transform-3d) {\n .carousel-inner > .item {\n -webkit-transition: -webkit-transform 0.6s ease-in-out;\n -moz-transition: -moz-transform 0.6s ease-in-out;\n -o-transition: -o-transform 0.6s ease-in-out;\n transition: transform 0.6s ease-in-out;\n -webkit-backface-visibility: hidden;\n -moz-backface-visibility: hidden;\n backface-visibility: hidden;\n -webkit-perspective: 1000px;\n -moz-perspective: 1000px;\n perspective: 1000px;\n }\n .carousel-inner > .item.next,\n .carousel-inner > .item.active.right {\n -webkit-transform: translate3d(100%, 0, 0);\n transform: translate3d(100%, 0, 0);\n left: 0;\n }\n .carousel-inner > .item.prev,\n .carousel-inner > .item.active.left {\n -webkit-transform: translate3d(-100%, 0, 0);\n transform: translate3d(-100%, 0, 0);\n left: 0;\n }\n .carousel-inner > .item.next.left,\n .carousel-inner > .item.prev.right,\n .carousel-inner > .item.active {\n -webkit-transform: translate3d(0, 0, 0);\n transform: translate3d(0, 0, 0);\n left: 0;\n }\n}\n.carousel-inner > .active,\n.carousel-inner > .next,\n.carousel-inner > .prev {\n display: block;\n}\n.carousel-inner > .active {\n left: 0;\n}\n.carousel-inner > .next,\n.carousel-inner > .prev {\n position: absolute;\n top: 0;\n width: 100%;\n}\n.carousel-inner > .next {\n left: 100%;\n}\n.carousel-inner > .prev {\n left: -100%;\n}\n.carousel-inner > .next.left,\n.carousel-inner > .prev.right {\n left: 0;\n}\n.carousel-inner > .active.left {\n left: -100%;\n}\n.carousel-inner > .active.right {\n left: 100%;\n}\n.carousel-control {\n position: absolute;\n top: 0;\n bottom: 0;\n left: 0;\n width: 15%;\n font-size: 20px;\n color: #fff;\n text-align: center;\n text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6);\n background-color: rgba(0, 0, 0, 0);\n filter: alpha(opacity=50);\n opacity: 0.5;\n}\n.carousel-control.left {\n background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%);\n background-image: -o-linear-gradient(left, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%);\n background-image: linear-gradient(to right, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1);\n background-repeat: repeat-x;\n}\n.carousel-control.right {\n right: 0;\n left: auto;\n background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%);\n background-image: -o-linear-gradient(left, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%);\n background-image: linear-gradient(to right, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1);\n background-repeat: repeat-x;\n}\n.carousel-control:hover,\n.carousel-control:focus {\n color: #fff;\n text-decoration: none;\n outline: 0;\n filter: alpha(opacity=90);\n opacity: 0.9;\n}\n.carousel-control .icon-prev,\n.carousel-control .icon-next,\n.carousel-control .glyphicon-chevron-left,\n.carousel-control .glyphicon-chevron-right {\n position: absolute;\n top: 50%;\n z-index: 5;\n display: inline-block;\n margin-top: -10px;\n}\n.carousel-control .icon-prev,\n.carousel-control .glyphicon-chevron-left {\n left: 50%;\n margin-left: -10px;\n}\n.carousel-control .icon-next,\n.carousel-control .glyphicon-chevron-right {\n right: 50%;\n margin-right: -10px;\n}\n.carousel-control .icon-prev,\n.carousel-control .icon-next {\n width: 20px;\n height: 20px;\n font-family: serif;\n line-height: 1;\n}\n.carousel-control .icon-prev:before {\n content: \"\\2039\";\n}\n.carousel-control .icon-next:before {\n content: \"\\203a\";\n}\n.carousel-indicators {\n position: absolute;\n bottom: 10px;\n left: 50%;\n z-index: 15;\n width: 60%;\n padding-left: 0;\n margin-left: -30%;\n text-align: center;\n list-style: none;\n}\n.carousel-indicators li {\n display: inline-block;\n width: 10px;\n height: 10px;\n margin: 1px;\n text-indent: -999px;\n cursor: pointer;\n background-color: #000 \\9;\n background-color: rgba(0, 0, 0, 0);\n border: 1px solid #fff;\n border-radius: 10px;\n}\n.carousel-indicators .active {\n width: 12px;\n height: 12px;\n margin: 0;\n background-color: #fff;\n}\n.carousel-caption {\n position: absolute;\n right: 15%;\n bottom: 20px;\n left: 15%;\n z-index: 10;\n padding-top: 20px;\n padding-bottom: 20px;\n color: #fff;\n text-align: center;\n text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6);\n}\n.carousel-caption .btn {\n text-shadow: none;\n}\n@media screen and (min-width: 768px) {\n .carousel-control .glyphicon-chevron-left,\n .carousel-control .glyphicon-chevron-right,\n .carousel-control .icon-prev,\n .carousel-control .icon-next {\n width: 30px;\n height: 30px;\n margin-top: -10px;\n font-size: 30px;\n }\n .carousel-control .glyphicon-chevron-left,\n .carousel-control .icon-prev {\n margin-left: -10px;\n }\n .carousel-control .glyphicon-chevron-right,\n .carousel-control .icon-next {\n margin-right: -10px;\n }\n .carousel-caption {\n right: 20%;\n left: 20%;\n padding-bottom: 30px;\n }\n .carousel-indicators {\n bottom: 20px;\n }\n}\n.clearfix:before,\n.clearfix:after,\n.dl-horizontal dd:before,\n.dl-horizontal dd:after,\n.container:before,\n.container:after,\n.container-fluid:before,\n.container-fluid:after,\n.row:before,\n.row:after,\n.form-horizontal .form-group:before,\n.form-horizontal .form-group:after,\n.btn-toolbar:before,\n.btn-toolbar:after,\n.btn-group-vertical > .btn-group:before,\n.btn-group-vertical > .btn-group:after,\n.nav:before,\n.nav:after,\n.navbar:before,\n.navbar:after,\n.navbar-header:before,\n.navbar-header:after,\n.navbar-collapse:before,\n.navbar-collapse:after,\n.pager:before,\n.pager:after,\n.panel-body:before,\n.panel-body:after,\n.modal-header:before,\n.modal-header:after,\n.modal-footer:before,\n.modal-footer:after {\n display: table;\n content: \" \";\n}\n.clearfix:after,\n.dl-horizontal dd:after,\n.container:after,\n.container-fluid:after,\n.row:after,\n.form-horizontal .form-group:after,\n.btn-toolbar:after,\n.btn-group-vertical > .btn-group:after,\n.nav:after,\n.navbar:after,\n.navbar-header:after,\n.navbar-collapse:after,\n.pager:after,\n.panel-body:after,\n.modal-header:after,\n.modal-footer:after {\n clear: both;\n}\n.center-block {\n display: block;\n margin-right: auto;\n margin-left: auto;\n}\n.pull-right {\n float: right !important;\n}\n.pull-left {\n float: left !important;\n}\n.hide {\n display: none !important;\n}\n.show {\n display: block !important;\n}\n.invisible {\n visibility: hidden;\n}\n.text-hide {\n font: 0/0 a;\n color: transparent;\n text-shadow: none;\n background-color: transparent;\n border: 0;\n}\n.hidden {\n display: none !important;\n}\n.affix {\n position: fixed;\n}\n@-ms-viewport {\n width: device-width;\n}\n.visible-xs,\n.visible-sm,\n.visible-md,\n.visible-lg {\n display: none !important;\n}\n.visible-xs-block,\n.visible-xs-inline,\n.visible-xs-inline-block,\n.visible-sm-block,\n.visible-sm-inline,\n.visible-sm-inline-block,\n.visible-md-block,\n.visible-md-inline,\n.visible-md-inline-block,\n.visible-lg-block,\n.visible-lg-inline,\n.visible-lg-inline-block {\n display: none !important;\n}\n@media (max-width: 767px) {\n .visible-xs {\n display: block !important;\n }\n table.visible-xs {\n display: table !important;\n }\n tr.visible-xs {\n display: table-row !important;\n }\n th.visible-xs,\n td.visible-xs {\n display: table-cell !important;\n }\n}\n@media (max-width: 767px) {\n .visible-xs-block {\n display: block !important;\n }\n}\n@media (max-width: 767px) {\n .visible-xs-inline {\n display: inline !important;\n }\n}\n@media (max-width: 767px) {\n .visible-xs-inline-block {\n display: inline-block !important;\n }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n .visible-sm {\n display: block !important;\n }\n table.visible-sm {\n display: table !important;\n }\n tr.visible-sm {\n display: table-row !important;\n }\n th.visible-sm,\n td.visible-sm {\n display: table-cell !important;\n }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n .visible-sm-block {\n display: block !important;\n }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n .visible-sm-inline {\n display: inline !important;\n }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n .visible-sm-inline-block {\n display: inline-block !important;\n }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n .visible-md {\n display: block !important;\n }\n table.visible-md {\n display: table !important;\n }\n tr.visible-md {\n display: table-row !important;\n }\n th.visible-md,\n td.visible-md {\n display: table-cell !important;\n }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n .visible-md-block {\n display: block !important;\n }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n .visible-md-inline {\n display: inline !important;\n }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n .visible-md-inline-block {\n display: inline-block !important;\n }\n}\n@media (min-width: 1200px) {\n .visible-lg {\n display: block !important;\n }\n table.visible-lg {\n display: table !important;\n }\n tr.visible-lg {\n display: table-row !important;\n }\n th.visible-lg,\n td.visible-lg {\n display: table-cell !important;\n }\n}\n@media (min-width: 1200px) {\n .visible-lg-block {\n display: block !important;\n }\n}\n@media (min-width: 1200px) {\n .visible-lg-inline {\n display: inline !important;\n }\n}\n@media (min-width: 1200px) {\n .visible-lg-inline-block {\n display: inline-block !important;\n }\n}\n@media (max-width: 767px) {\n .hidden-xs {\n display: none !important;\n }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n .hidden-sm {\n display: none !important;\n }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n .hidden-md {\n display: none !important;\n }\n}\n@media (min-width: 1200px) {\n .hidden-lg {\n display: none !important;\n }\n}\n.visible-print {\n display: none !important;\n}\n@media print {\n .visible-print {\n display: block !important;\n }\n table.visible-print {\n display: table !important;\n }\n tr.visible-print {\n display: table-row !important;\n }\n th.visible-print,\n td.visible-print {\n display: table-cell !important;\n }\n}\n.visible-print-block {\n display: none !important;\n}\n@media print {\n .visible-print-block {\n display: block !important;\n }\n}\n.visible-print-inline {\n display: none !important;\n}\n@media print {\n .visible-print-inline {\n display: inline !important;\n }\n}\n.visible-print-inline-block {\n display: none !important;\n}\n@media print {\n .visible-print-inline-block {\n display: inline-block !important;\n }\n}\n@media print {\n .hidden-print {\n display: none !important;\n }\n}\n/*# sourceMappingURL=bootstrap.css.map */","// stylelint-disable\n\n/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */\n\n//\n// 1. Set default font family to sans-serif.\n// 2. Prevent iOS and IE text size adjust after device orientation change,\n// without disabling user zoom.\n//\n\nhtml {\n font-family: sans-serif; // 1\n -ms-text-size-adjust: 100%; // 2\n -webkit-text-size-adjust: 100%; // 2\n}\n\n//\n// Remove default margin.\n//\n\nbody {\n margin: 0;\n}\n\n// HTML5 display definitions\n// ==========================================================================\n\n//\n// Correct `block` display not defined for any HTML5 element in IE 8/9.\n// Correct `block` display not defined for `details` or `summary` in IE 10/11\n// and Firefox.\n// Correct `block` display not defined for `main` in IE 11.\n//\n\narticle,\naside,\ndetails,\nfigcaption,\nfigure,\nfooter,\nheader,\nhgroup,\nmain,\nmenu,\nnav,\nsection,\nsummary {\n display: block;\n}\n\n//\n// 1. Correct `inline-block` display not defined in IE 8/9.\n// 2. Normalize vertical alignment of `progress` in Chrome, Firefox, and Opera.\n//\n\naudio,\ncanvas,\nprogress,\nvideo {\n display: inline-block; // 1\n vertical-align: baseline; // 2\n}\n\n//\n// Prevent modern browsers from displaying `audio` without controls.\n// Remove excess height in iOS 5 devices.\n//\n\naudio:not([controls]) {\n display: none;\n height: 0;\n}\n\n//\n// Address `[hidden]` styling not present in IE 8/9/10.\n// Hide the `template` element in IE 8/9/10/11, Safari, and Firefox < 22.\n//\n\n[hidden],\ntemplate {\n display: none;\n}\n\n// Links\n// ==========================================================================\n\n//\n// Remove the gray background color from active links in IE 10.\n//\n\na {\n background-color: transparent;\n}\n\n//\n// Improve readability of focused elements when they are also in an\n// active/hover state.\n//\n\na:active,\na:hover {\n outline: 0;\n}\n\n// Text-level semantics\n// ==========================================================================\n\n//\n// 1. Remove the bottom border in Chrome 57- and Firefox 39-.\n// 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari.\n//\n\nabbr[title] {\n border-bottom: none; // 1\n text-decoration: underline; // 2\n text-decoration: underline dotted; // 2\n}\n\n//\n// Address style set to `bolder` in Firefox 4+, Safari, and Chrome.\n//\n\nb,\nstrong {\n font-weight: bold;\n}\n\n//\n// Address styling not present in Safari and Chrome.\n//\n\ndfn {\n font-style: italic;\n}\n\n//\n// Address variable `h1` font-size and margin within `section` and `article`\n// contexts in Firefox 4+, Safari, and Chrome.\n//\n\nh1 {\n font-size: 2em;\n margin: 0.67em 0;\n}\n\n//\n// Address styling not present in IE 8/9.\n//\n\nmark {\n background: #ff0;\n color: #000;\n}\n\n//\n// Address inconsistent and variable font size in all browsers.\n//\n\nsmall {\n font-size: 80%;\n}\n\n//\n// Prevent `sub` and `sup` affecting `line-height` in all browsers.\n//\n\nsub,\nsup {\n font-size: 75%;\n line-height: 0;\n position: relative;\n vertical-align: baseline;\n}\n\nsup {\n top: -0.5em;\n}\n\nsub {\n bottom: -0.25em;\n}\n\n// Embedded content\n// ==========================================================================\n\n//\n// Remove border when inside `a` element in IE 8/9/10.\n//\n\nimg {\n border: 0;\n}\n\n//\n// Correct overflow not hidden in IE 9/10/11.\n//\n\nsvg:not(:root) {\n overflow: hidden;\n}\n\n// Grouping content\n// ==========================================================================\n\n//\n// Address margin not present in IE 8/9 and Safari.\n//\n\nfigure {\n margin: 1em 40px;\n}\n\n//\n// Address differences between Firefox and other browsers.\n//\n\nhr {\n box-sizing: content-box;\n height: 0;\n}\n\n//\n// Contain overflow in all browsers.\n//\n\npre {\n overflow: auto;\n}\n\n//\n// Address odd `em`-unit font size rendering in all browsers.\n//\n\ncode,\nkbd,\npre,\nsamp {\n font-family: monospace, monospace;\n font-size: 1em;\n}\n\n// Forms\n// ==========================================================================\n\n//\n// Known limitation: by default, Chrome and Safari on OS X allow very limited\n// styling of `select`, unless a `border` property is set.\n//\n\n//\n// 1. Correct color not being inherited.\n// Known issue: affects color of disabled elements.\n// 2. Correct font properties not being inherited.\n// 3. Address margins set differently in Firefox 4+, Safari, and Chrome.\n//\n\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n color: inherit; // 1\n font: inherit; // 2\n margin: 0; // 3\n}\n\n//\n// Address `overflow` set to `hidden` in IE 8/9/10/11.\n//\n\nbutton {\n overflow: visible;\n}\n\n//\n// Address inconsistent `text-transform` inheritance for `button` and `select`.\n// All other form control elements do not inherit `text-transform` values.\n// Correct `button` style inheritance in Firefox, IE 8/9/10/11, and Opera.\n// Correct `select` style inheritance in Firefox.\n//\n\nbutton,\nselect {\n text-transform: none;\n}\n\n//\n// 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio`\n// and `video` controls.\n// 2. Correct inability to style clickable `input` types in iOS.\n// 3. Improve usability and consistency of cursor style between image-type\n// `input` and others.\n//\n\nbutton,\nhtml input[type=\"button\"], // 1\ninput[type=\"reset\"],\ninput[type=\"submit\"] {\n -webkit-appearance: button; // 2\n cursor: pointer; // 3\n}\n\n//\n// Re-set default cursor for disabled elements.\n//\n\nbutton[disabled],\nhtml input[disabled] {\n cursor: default;\n}\n\n//\n// Remove inner padding and border in Firefox 4+.\n//\n\nbutton::-moz-focus-inner,\ninput::-moz-focus-inner {\n border: 0;\n padding: 0;\n}\n\n//\n// Address Firefox 4+ setting `line-height` on `input` using `!important` in\n// the UA stylesheet.\n//\n\ninput {\n line-height: normal;\n}\n\n//\n// It's recommended that you don't attempt to style these elements.\n// Firefox's implementation doesn't respect box-sizing, padding, or width.\n//\n// 1. Address box sizing set to `content-box` in IE 8/9/10.\n// 2. Remove excess padding in IE 8/9/10.\n//\n\ninput[type=\"checkbox\"],\ninput[type=\"radio\"] {\n box-sizing: border-box; // 1\n padding: 0; // 2\n}\n\n//\n// Fix the cursor style for Chrome's increment/decrement buttons. For certain\n// `font-size` values of the `input`, it causes the cursor style of the\n// decrement button to change from `default` to `text`.\n//\n\ninput[type=\"number\"]::-webkit-inner-spin-button,\ninput[type=\"number\"]::-webkit-outer-spin-button {\n height: auto;\n}\n\n//\n// 1. Address `appearance` set to `searchfield` in Safari and Chrome.\n// 2. Address `box-sizing` set to `border-box` in Safari and Chrome.\n//\n\ninput[type=\"search\"] {\n -webkit-appearance: textfield; // 1\n box-sizing: content-box; //2\n}\n\n//\n// Remove inner padding and search cancel button in Safari and Chrome on OS X.\n// Safari (but not Chrome) clips the cancel button when the search input has\n// padding (and `textfield` appearance).\n//\n\ninput[type=\"search\"]::-webkit-search-cancel-button,\ninput[type=\"search\"]::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n//\n// Define consistent border, margin, and padding.\n//\n\nfieldset {\n border: 1px solid #c0c0c0;\n margin: 0 2px;\n padding: 0.35em 0.625em 0.75em;\n}\n\n//\n// 1. Correct `color` not being inherited in IE 8/9/10/11.\n// 2. Remove padding so people aren't caught out if they zero out fieldsets.\n//\n\nlegend {\n border: 0; // 1\n padding: 0; // 2\n}\n\n//\n// Remove default vertical scrollbar in IE 8/9/10/11.\n//\n\ntextarea {\n overflow: auto;\n}\n\n//\n// Don't inherit the `font-weight` (applied by a rule above).\n// NOTE: the default cannot safely be changed in Chrome and Safari on OS X.\n//\n\noptgroup {\n font-weight: bold;\n}\n\n// Tables\n// ==========================================================================\n\n//\n// Remove most spacing between table cells.\n//\n\ntable {\n border-collapse: collapse;\n border-spacing: 0;\n}\n\ntd,\nth {\n padding: 0;\n}\n","// stylelint-disable declaration-no-important, selector-no-qualifying-type\n\n/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */\n\n// ==========================================================================\n// Print styles.\n// Inlined to avoid the additional HTTP request: h5bp.com/r\n// ==========================================================================\n\n@media print {\n *,\n *:before,\n *:after {\n color: #000 !important; // Black prints faster: h5bp.com/s\n text-shadow: none !important;\n background: transparent !important;\n box-shadow: none !important;\n }\n\n a,\n a:visited {\n text-decoration: underline;\n }\n\n a[href]:after {\n content: \" (\" attr(href) \")\";\n }\n\n abbr[title]:after {\n content: \" (\" attr(title) \")\";\n }\n\n // Don't show links that are fragment identifiers,\n // or use the `javascript:` pseudo protocol\n a[href^=\"#\"]:after,\n a[href^=\"javascript:\"]:after {\n content: \"\";\n }\n\n pre,\n blockquote {\n border: 1px solid #999;\n page-break-inside: avoid;\n }\n\n thead {\n display: table-header-group; // h5bp.com/t\n }\n\n tr,\n img {\n page-break-inside: avoid;\n }\n\n img {\n max-width: 100% !important;\n }\n\n p,\n h2,\n h3 {\n orphans: 3;\n widows: 3;\n }\n\n h2,\n h3 {\n page-break-after: avoid;\n }\n\n // Bootstrap specific changes start\n\n // Bootstrap components\n .navbar {\n display: none;\n }\n .btn,\n .dropup > .btn {\n > .caret {\n border-top-color: #000 !important;\n }\n }\n .label {\n border: 1px solid #000;\n }\n\n .table {\n border-collapse: collapse !important;\n\n td,\n th {\n background-color: #fff !important;\n }\n }\n .table-bordered {\n th,\n td {\n border: 1px solid #ddd !important;\n }\n }\n}\n","// stylelint-disable value-list-comma-newline-after, value-list-comma-space-after, indentation, declaration-colon-newline-after, font-family-no-missing-generic-family-keyword\n\n//\n// Glyphicons for Bootstrap\n//\n// Since icons are fonts, they can be placed anywhere text is placed and are\n// thus automatically sized to match the surrounding child. To use, create an\n// inline element with the appropriate classes, like so:\n//\n// Star\n\n// Import the fonts\n@font-face {\n font-family: \"Glyphicons Halflings\";\n src: url(\"@{icon-font-path}@{icon-font-name}.eot\");\n src: url(\"@{icon-font-path}@{icon-font-name}.eot?#iefix\") format(\"embedded-opentype\"),\n url(\"@{icon-font-path}@{icon-font-name}.woff2\") format(\"woff2\"),\n url(\"@{icon-font-path}@{icon-font-name}.woff\") format(\"woff\"),\n url(\"@{icon-font-path}@{icon-font-name}.ttf\") format(\"truetype\"),\n url(\"@{icon-font-path}@{icon-font-name}.svg#@{icon-font-svg-id}\") format(\"svg\");\n}\n\n// Catchall baseclass\n.glyphicon {\n position: relative;\n top: 1px;\n display: inline-block;\n font-family: \"Glyphicons Halflings\";\n font-style: normal;\n font-weight: 400;\n line-height: 1;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n}\n\n// Individual icons\n.glyphicon-asterisk { &:before { content: \"\\002a\"; } }\n.glyphicon-plus { &:before { content: \"\\002b\"; } }\n.glyphicon-euro,\n.glyphicon-eur { &:before { content: \"\\20ac\"; } }\n.glyphicon-minus { &:before { content: \"\\2212\"; } }\n.glyphicon-cloud { &:before { content: \"\\2601\"; } }\n.glyphicon-envelope { &:before { content: \"\\2709\"; } }\n.glyphicon-pencil { &:before { content: \"\\270f\"; } }\n.glyphicon-glass { &:before { content: \"\\e001\"; } }\n.glyphicon-music { &:before { content: \"\\e002\"; } }\n.glyphicon-search { &:before { content: \"\\e003\"; } }\n.glyphicon-heart { &:before { content: \"\\e005\"; } }\n.glyphicon-star { &:before { content: \"\\e006\"; } }\n.glyphicon-star-empty { &:before { content: \"\\e007\"; } }\n.glyphicon-user { &:before { content: \"\\e008\"; } }\n.glyphicon-film { &:before { content: \"\\e009\"; } }\n.glyphicon-th-large { &:before { content: \"\\e010\"; } }\n.glyphicon-th { &:before { content: \"\\e011\"; } }\n.glyphicon-th-list { &:before { content: \"\\e012\"; } }\n.glyphicon-ok { &:before { content: \"\\e013\"; } }\n.glyphicon-remove { &:before { content: \"\\e014\"; } }\n.glyphicon-zoom-in { &:before { content: \"\\e015\"; } }\n.glyphicon-zoom-out { &:before { content: \"\\e016\"; } }\n.glyphicon-off { &:before { content: \"\\e017\"; } }\n.glyphicon-signal { &:before { content: \"\\e018\"; } }\n.glyphicon-cog { &:before { content: \"\\e019\"; } }\n.glyphicon-trash { &:before { content: \"\\e020\"; } }\n.glyphicon-home { &:before { content: \"\\e021\"; } }\n.glyphicon-file { &:before { content: \"\\e022\"; } }\n.glyphicon-time { &:before { content: \"\\e023\"; } }\n.glyphicon-road { &:before { content: \"\\e024\"; } }\n.glyphicon-download-alt { &:before { content: \"\\e025\"; } }\n.glyphicon-download { &:before { content: \"\\e026\"; } }\n.glyphicon-upload { &:before { content: \"\\e027\"; } }\n.glyphicon-inbox { &:before { content: \"\\e028\"; } }\n.glyphicon-play-circle { &:before { content: \"\\e029\"; } }\n.glyphicon-repeat { &:before { content: \"\\e030\"; } }\n.glyphicon-refresh { &:before { content: \"\\e031\"; } }\n.glyphicon-list-alt { &:before { content: \"\\e032\"; } }\n.glyphicon-lock { &:before { content: \"\\e033\"; } }\n.glyphicon-flag { &:before { content: \"\\e034\"; } }\n.glyphicon-headphones { &:before { content: \"\\e035\"; } }\n.glyphicon-volume-off { &:before { content: \"\\e036\"; } }\n.glyphicon-volume-down { &:before { content: \"\\e037\"; } }\n.glyphicon-volume-up { &:before { content: \"\\e038\"; } }\n.glyphicon-qrcode { &:before { content: \"\\e039\"; } }\n.glyphicon-barcode { &:before { content: \"\\e040\"; } }\n.glyphicon-tag { &:before { content: \"\\e041\"; } }\n.glyphicon-tags { &:before { content: \"\\e042\"; } }\n.glyphicon-book { &:before { content: \"\\e043\"; } }\n.glyphicon-bookmark { &:before { content: \"\\e044\"; } }\n.glyphicon-print { &:before { content: \"\\e045\"; } }\n.glyphicon-camera { &:before { content: \"\\e046\"; } }\n.glyphicon-font { &:before { content: \"\\e047\"; } }\n.glyphicon-bold { &:before { content: \"\\e048\"; } }\n.glyphicon-italic { &:before { content: \"\\e049\"; } }\n.glyphicon-text-height { &:before { content: \"\\e050\"; } }\n.glyphicon-text-width { &:before { content: \"\\e051\"; } }\n.glyphicon-align-left { &:before { content: \"\\e052\"; } }\n.glyphicon-align-center { &:before { content: \"\\e053\"; } }\n.glyphicon-align-right { &:before { content: \"\\e054\"; } }\n.glyphicon-align-justify { &:before { content: \"\\e055\"; } }\n.glyphicon-list { &:before { content: \"\\e056\"; } }\n.glyphicon-indent-left { &:before { content: \"\\e057\"; } }\n.glyphicon-indent-right { &:before { content: \"\\e058\"; } }\n.glyphicon-facetime-video { &:before { content: \"\\e059\"; } }\n.glyphicon-picture { &:before { content: \"\\e060\"; } }\n.glyphicon-map-marker { &:before { content: \"\\e062\"; } }\n.glyphicon-adjust { &:before { content: \"\\e063\"; } }\n.glyphicon-tint { &:before { content: \"\\e064\"; } }\n.glyphicon-edit { &:before { content: \"\\e065\"; } }\n.glyphicon-share { &:before { content: \"\\e066\"; } }\n.glyphicon-check { &:before { content: \"\\e067\"; } }\n.glyphicon-move { &:before { content: \"\\e068\"; } }\n.glyphicon-step-backward { &:before { content: \"\\e069\"; } }\n.glyphicon-fast-backward { &:before { content: \"\\e070\"; } }\n.glyphicon-backward { &:before { content: \"\\e071\"; } }\n.glyphicon-play { &:before { content: \"\\e072\"; } }\n.glyphicon-pause { &:before { content: \"\\e073\"; } }\n.glyphicon-stop { &:before { content: \"\\e074\"; } }\n.glyphicon-forward { &:before { content: \"\\e075\"; } }\n.glyphicon-fast-forward { &:before { content: \"\\e076\"; } }\n.glyphicon-step-forward { &:before { content: \"\\e077\"; } }\n.glyphicon-eject { &:before { content: \"\\e078\"; } }\n.glyphicon-chevron-left { &:before { content: \"\\e079\"; } }\n.glyphicon-chevron-right { &:before { content: \"\\e080\"; } }\n.glyphicon-plus-sign { &:before { content: \"\\e081\"; } }\n.glyphicon-minus-sign { &:before { content: \"\\e082\"; } }\n.glyphicon-remove-sign { &:before { content: \"\\e083\"; } }\n.glyphicon-ok-sign { &:before { content: \"\\e084\"; } }\n.glyphicon-question-sign { &:before { content: \"\\e085\"; } }\n.glyphicon-info-sign { &:before { content: \"\\e086\"; } }\n.glyphicon-screenshot { &:before { content: \"\\e087\"; } }\n.glyphicon-remove-circle { &:before { content: \"\\e088\"; } }\n.glyphicon-ok-circle { &:before { content: \"\\e089\"; } }\n.glyphicon-ban-circle { &:before { content: \"\\e090\"; } }\n.glyphicon-arrow-left { &:before { content: \"\\e091\"; } }\n.glyphicon-arrow-right { &:before { content: \"\\e092\"; } }\n.glyphicon-arrow-up { &:before { content: \"\\e093\"; } }\n.glyphicon-arrow-down { &:before { content: \"\\e094\"; } }\n.glyphicon-share-alt { &:before { content: \"\\e095\"; } }\n.glyphicon-resize-full { &:before { content: \"\\e096\"; } }\n.glyphicon-resize-small { &:before { content: \"\\e097\"; } }\n.glyphicon-exclamation-sign { &:before { content: \"\\e101\"; } }\n.glyphicon-gift { &:before { content: \"\\e102\"; } }\n.glyphicon-leaf { &:before { content: \"\\e103\"; } }\n.glyphicon-fire { &:before { content: \"\\e104\"; } }\n.glyphicon-eye-open { &:before { content: \"\\e105\"; } }\n.glyphicon-eye-close { &:before { content: \"\\e106\"; } }\n.glyphicon-warning-sign { &:before { content: \"\\e107\"; } }\n.glyphicon-plane { &:before { content: \"\\e108\"; } }\n.glyphicon-calendar { &:before { content: \"\\e109\"; } }\n.glyphicon-random { &:before { content: \"\\e110\"; } }\n.glyphicon-comment { &:before { content: \"\\e111\"; } }\n.glyphicon-magnet { &:before { content: \"\\e112\"; } }\n.glyphicon-chevron-up { &:before { content: \"\\e113\"; } }\n.glyphicon-chevron-down { &:before { content: \"\\e114\"; } }\n.glyphicon-retweet { &:before { content: \"\\e115\"; } }\n.glyphicon-shopping-cart { &:before { content: \"\\e116\"; } }\n.glyphicon-folder-close { &:before { content: \"\\e117\"; } }\n.glyphicon-folder-open { &:before { content: \"\\e118\"; } }\n.glyphicon-resize-vertical { &:before { content: \"\\e119\"; } }\n.glyphicon-resize-horizontal { &:before { content: \"\\e120\"; } }\n.glyphicon-hdd { &:before { content: \"\\e121\"; } }\n.glyphicon-bullhorn { &:before { content: \"\\e122\"; } }\n.glyphicon-bell { &:before { content: \"\\e123\"; } }\n.glyphicon-certificate { &:before { content: \"\\e124\"; } }\n.glyphicon-thumbs-up { &:before { content: \"\\e125\"; } }\n.glyphicon-thumbs-down { &:before { content: \"\\e126\"; } }\n.glyphicon-hand-right { &:before { content: \"\\e127\"; } }\n.glyphicon-hand-left { &:before { content: \"\\e128\"; } }\n.glyphicon-hand-up { &:before { content: \"\\e129\"; } }\n.glyphicon-hand-down { &:before { content: \"\\e130\"; } }\n.glyphicon-circle-arrow-right { &:before { content: \"\\e131\"; } }\n.glyphicon-circle-arrow-left { &:before { content: \"\\e132\"; } }\n.glyphicon-circle-arrow-up { &:before { content: \"\\e133\"; } }\n.glyphicon-circle-arrow-down { &:before { content: \"\\e134\"; } }\n.glyphicon-globe { &:before { content: \"\\e135\"; } }\n.glyphicon-wrench { &:before { content: \"\\e136\"; } }\n.glyphicon-tasks { &:before { content: \"\\e137\"; } }\n.glyphicon-filter { &:before { content: \"\\e138\"; } }\n.glyphicon-briefcase { &:before { content: \"\\e139\"; } }\n.glyphicon-fullscreen { &:before { content: \"\\e140\"; } }\n.glyphicon-dashboard { &:before { content: \"\\e141\"; } }\n.glyphicon-paperclip { &:before { content: \"\\e142\"; } }\n.glyphicon-heart-empty { &:before { content: \"\\e143\"; } }\n.glyphicon-link { &:before { content: \"\\e144\"; } }\n.glyphicon-phone { &:before { content: \"\\e145\"; } }\n.glyphicon-pushpin { &:before { content: \"\\e146\"; } }\n.glyphicon-usd { &:before { content: \"\\e148\"; } }\n.glyphicon-gbp { &:before { content: \"\\e149\"; } }\n.glyphicon-sort { &:before { content: \"\\e150\"; } }\n.glyphicon-sort-by-alphabet { &:before { content: \"\\e151\"; } }\n.glyphicon-sort-by-alphabet-alt { &:before { content: \"\\e152\"; } }\n.glyphicon-sort-by-order { &:before { content: \"\\e153\"; } }\n.glyphicon-sort-by-order-alt { &:before { content: \"\\e154\"; } }\n.glyphicon-sort-by-attributes { &:before { content: \"\\e155\"; } }\n.glyphicon-sort-by-attributes-alt { &:before { content: \"\\e156\"; } }\n.glyphicon-unchecked { &:before { content: \"\\e157\"; } }\n.glyphicon-expand { &:before { content: \"\\e158\"; } }\n.glyphicon-collapse-down { &:before { content: \"\\e159\"; } }\n.glyphicon-collapse-up { &:before { content: \"\\e160\"; } }\n.glyphicon-log-in { &:before { content: \"\\e161\"; } }\n.glyphicon-flash { &:before { content: \"\\e162\"; } }\n.glyphicon-log-out { &:before { content: \"\\e163\"; } }\n.glyphicon-new-window { &:before { content: \"\\e164\"; } }\n.glyphicon-record { &:before { content: \"\\e165\"; } }\n.glyphicon-save { &:before { content: \"\\e166\"; } }\n.glyphicon-open { &:before { content: \"\\e167\"; } }\n.glyphicon-saved { &:before { content: \"\\e168\"; } }\n.glyphicon-import { &:before { content: \"\\e169\"; } }\n.glyphicon-export { &:before { content: \"\\e170\"; } }\n.glyphicon-send { &:before { content: \"\\e171\"; } }\n.glyphicon-floppy-disk { &:before { content: \"\\e172\"; } }\n.glyphicon-floppy-saved { &:before { content: \"\\e173\"; } }\n.glyphicon-floppy-remove { &:before { content: \"\\e174\"; } }\n.glyphicon-floppy-save { &:before { content: \"\\e175\"; } }\n.glyphicon-floppy-open { &:before { content: \"\\e176\"; } }\n.glyphicon-credit-card { &:before { content: \"\\e177\"; } }\n.glyphicon-transfer { &:before { content: \"\\e178\"; } }\n.glyphicon-cutlery { &:before { content: \"\\e179\"; } }\n.glyphicon-header { &:before { content: \"\\e180\"; } }\n.glyphicon-compressed { &:before { content: \"\\e181\"; } }\n.glyphicon-earphone { &:before { content: \"\\e182\"; } }\n.glyphicon-phone-alt { &:before { content: \"\\e183\"; } }\n.glyphicon-tower { &:before { content: \"\\e184\"; } }\n.glyphicon-stats { &:before { content: \"\\e185\"; } }\n.glyphicon-sd-video { &:before { content: \"\\e186\"; } }\n.glyphicon-hd-video { &:before { content: \"\\e187\"; } }\n.glyphicon-subtitles { &:before { content: \"\\e188\"; } }\n.glyphicon-sound-stereo { &:before { content: \"\\e189\"; } }\n.glyphicon-sound-dolby { &:before { content: \"\\e190\"; } }\n.glyphicon-sound-5-1 { &:before { content: \"\\e191\"; } }\n.glyphicon-sound-6-1 { &:before { content: \"\\e192\"; } }\n.glyphicon-sound-7-1 { &:before { content: \"\\e193\"; } }\n.glyphicon-copyright-mark { &:before { content: \"\\e194\"; } }\n.glyphicon-registration-mark { &:before { content: \"\\e195\"; } }\n.glyphicon-cloud-download { &:before { content: \"\\e197\"; } }\n.glyphicon-cloud-upload { &:before { content: \"\\e198\"; } }\n.glyphicon-tree-conifer { &:before { content: \"\\e199\"; } }\n.glyphicon-tree-deciduous { &:before { content: \"\\e200\"; } }\n.glyphicon-cd { &:before { content: \"\\e201\"; } }\n.glyphicon-save-file { &:before { content: \"\\e202\"; } }\n.glyphicon-open-file { &:before { content: \"\\e203\"; } }\n.glyphicon-level-up { &:before { content: \"\\e204\"; } }\n.glyphicon-copy { &:before { content: \"\\e205\"; } }\n.glyphicon-paste { &:before { content: \"\\e206\"; } }\n// The following 2 Glyphicons are omitted for the time being because\n// they currently use Unicode codepoints that are outside the\n// Basic Multilingual Plane (BMP). Older buggy versions of WebKit can't handle\n// non-BMP codepoints in CSS string escapes, and thus can't display these two icons.\n// Notably, the bug affects some older versions of the Android Browser.\n// More info: https://github.com/twbs/bootstrap/issues/10106\n// .glyphicon-door { &:before { content: \"\\1f6aa\"; } }\n// .glyphicon-key { &:before { content: \"\\1f511\"; } }\n.glyphicon-alert { &:before { content: \"\\e209\"; } }\n.glyphicon-equalizer { &:before { content: \"\\e210\"; } }\n.glyphicon-king { &:before { content: \"\\e211\"; } }\n.glyphicon-queen { &:before { content: \"\\e212\"; } }\n.glyphicon-pawn { &:before { content: \"\\e213\"; } }\n.glyphicon-bishop { &:before { content: \"\\e214\"; } }\n.glyphicon-knight { &:before { content: \"\\e215\"; } }\n.glyphicon-baby-formula { &:before { content: \"\\e216\"; } }\n.glyphicon-tent { &:before { content: \"\\26fa\"; } }\n.glyphicon-blackboard { &:before { content: \"\\e218\"; } }\n.glyphicon-bed { &:before { content: \"\\e219\"; } }\n.glyphicon-apple { &:before { content: \"\\f8ff\"; } }\n.glyphicon-erase { &:before { content: \"\\e221\"; } }\n.glyphicon-hourglass { &:before { content: \"\\231b\"; } }\n.glyphicon-lamp { &:before { content: \"\\e223\"; } }\n.glyphicon-duplicate { &:before { content: \"\\e224\"; } }\n.glyphicon-piggy-bank { &:before { content: \"\\e225\"; } }\n.glyphicon-scissors { &:before { content: \"\\e226\"; } }\n.glyphicon-bitcoin { &:before { content: \"\\e227\"; } }\n.glyphicon-btc { &:before { content: \"\\e227\"; } }\n.glyphicon-xbt { &:before { content: \"\\e227\"; } }\n.glyphicon-yen { &:before { content: \"\\00a5\"; } }\n.glyphicon-jpy { &:before { content: \"\\00a5\"; } }\n.glyphicon-ruble { &:before { content: \"\\20bd\"; } }\n.glyphicon-rub { &:before { content: \"\\20bd\"; } }\n.glyphicon-scale { &:before { content: \"\\e230\"; } }\n.glyphicon-ice-lolly { &:before { content: \"\\e231\"; } }\n.glyphicon-ice-lolly-tasted { &:before { content: \"\\e232\"; } }\n.glyphicon-education { &:before { content: \"\\e233\"; } }\n.glyphicon-option-horizontal { &:before { content: \"\\e234\"; } }\n.glyphicon-option-vertical { &:before { content: \"\\e235\"; } }\n.glyphicon-menu-hamburger { &:before { content: \"\\e236\"; } }\n.glyphicon-modal-window { &:before { content: \"\\e237\"; } }\n.glyphicon-oil { &:before { content: \"\\e238\"; } }\n.glyphicon-grain { &:before { content: \"\\e239\"; } }\n.glyphicon-sunglasses { &:before { content: \"\\e240\"; } }\n.glyphicon-text-size { &:before { content: \"\\e241\"; } }\n.glyphicon-text-color { &:before { content: \"\\e242\"; } }\n.glyphicon-text-background { &:before { content: \"\\e243\"; } }\n.glyphicon-object-align-top { &:before { content: \"\\e244\"; } }\n.glyphicon-object-align-bottom { &:before { content: \"\\e245\"; } }\n.glyphicon-object-align-horizontal{ &:before { content: \"\\e246\"; } }\n.glyphicon-object-align-left { &:before { content: \"\\e247\"; } }\n.glyphicon-object-align-vertical { &:before { content: \"\\e248\"; } }\n.glyphicon-object-align-right { &:before { content: \"\\e249\"; } }\n.glyphicon-triangle-right { &:before { content: \"\\e250\"; } }\n.glyphicon-triangle-left { &:before { content: \"\\e251\"; } }\n.glyphicon-triangle-bottom { &:before { content: \"\\e252\"; } }\n.glyphicon-triangle-top { &:before { content: \"\\e253\"; } }\n.glyphicon-console { &:before { content: \"\\e254\"; } }\n.glyphicon-superscript { &:before { content: \"\\e255\"; } }\n.glyphicon-subscript { &:before { content: \"\\e256\"; } }\n.glyphicon-menu-left { &:before { content: \"\\e257\"; } }\n.glyphicon-menu-right { &:before { content: \"\\e258\"; } }\n.glyphicon-menu-down { &:before { content: \"\\e259\"; } }\n.glyphicon-menu-up { &:before { content: \"\\e260\"; } }\n","//\n// Scaffolding\n// --------------------------------------------------\n\n\n// Reset the box-sizing\n//\n// Heads up! This reset may cause conflicts with some third-party widgets.\n// For recommendations on resolving such conflicts, see\n// https://getbootstrap.com/docs/3.4/getting-started/#third-box-sizing\n* {\n .box-sizing(border-box);\n}\n*:before,\n*:after {\n .box-sizing(border-box);\n}\n\n\n// Body reset\n\nhtml {\n font-size: 10px;\n -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n}\n\nbody {\n font-family: @font-family-base;\n font-size: @font-size-base;\n line-height: @line-height-base;\n color: @text-color;\n background-color: @body-bg;\n}\n\n// Reset fonts for relevant elements\ninput,\nbutton,\nselect,\ntextarea {\n font-family: inherit;\n font-size: inherit;\n line-height: inherit;\n}\n\n\n// Links\n\na {\n color: @link-color;\n text-decoration: none;\n\n &:hover,\n &:focus {\n color: @link-hover-color;\n text-decoration: @link-hover-decoration;\n }\n\n &:focus {\n .tab-focus();\n }\n}\n\n\n// Figures\n//\n// We reset this here because previously Normalize had no `figure` margins. This\n// ensures we don't break anyone's use of the element.\n\nfigure {\n margin: 0;\n}\n\n\n// Images\n\nimg {\n vertical-align: middle;\n}\n\n// Responsive images (ensure images don't scale beyond their parents)\n.img-responsive {\n .img-responsive();\n}\n\n// Rounded corners\n.img-rounded {\n border-radius: @border-radius-large;\n}\n\n// Image thumbnails\n//\n// Heads up! This is mixin-ed into thumbnails.less for `.thumbnail`.\n.img-thumbnail {\n padding: @thumbnail-padding;\n line-height: @line-height-base;\n background-color: @thumbnail-bg;\n border: 1px solid @thumbnail-border;\n border-radius: @thumbnail-border-radius;\n .transition(all .2s ease-in-out);\n\n // Keep them at most 100% wide\n .img-responsive(inline-block);\n}\n\n// Perfect circle\n.img-circle {\n border-radius: 50%; // set radius in percents\n}\n\n\n// Horizontal rules\n\nhr {\n margin-top: @line-height-computed;\n margin-bottom: @line-height-computed;\n border: 0;\n border-top: 1px solid @hr-border;\n}\n\n\n// Only display content to screen readers\n//\n// See: https://a11yproject.com/posts/how-to-hide-content\n\n.sr-only {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n border: 0;\n}\n\n// Use in conjunction with .sr-only to only display content when it's focused.\n// Useful for \"Skip to main content\" links; see https://www.w3.org/TR/2013/NOTE-WCAG20-TECHS-20130905/G1\n// Credit: HTML5 Boilerplate\n\n.sr-only-focusable {\n &:active,\n &:focus {\n position: static;\n width: auto;\n height: auto;\n margin: 0;\n overflow: visible;\n clip: auto;\n }\n}\n\n\n// iOS \"clickable elements\" fix for role=\"button\"\n//\n// Fixes \"clickability\" issue (and more generally, the firing of events such as focus as well)\n// for traditionally non-focusable elements with role=\"button\"\n// see https://developer.mozilla.org/en-US/docs/Web/Events/click#Safari_Mobile\n\n[role=\"button\"] {\n cursor: pointer;\n}\n","// stylelint-disable indentation, property-no-vendor-prefix, selector-no-vendor-prefix\n\n// Vendor Prefixes\n//\n// All vendor mixins are deprecated as of v3.2.0 due to the introduction of\n// Autoprefixer in our Gruntfile. They have been removed in v4.\n\n// - Animations\n// - Backface visibility\n// - Box shadow\n// - Box sizing\n// - Content columns\n// - Hyphens\n// - Placeholder text\n// - Transformations\n// - Transitions\n// - User Select\n\n\n// Animations\n.animation(@animation) {\n -webkit-animation: @animation;\n -o-animation: @animation;\n animation: @animation;\n}\n.animation-name(@name) {\n -webkit-animation-name: @name;\n animation-name: @name;\n}\n.animation-duration(@duration) {\n -webkit-animation-duration: @duration;\n animation-duration: @duration;\n}\n.animation-timing-function(@timing-function) {\n -webkit-animation-timing-function: @timing-function;\n animation-timing-function: @timing-function;\n}\n.animation-delay(@delay) {\n -webkit-animation-delay: @delay;\n animation-delay: @delay;\n}\n.animation-iteration-count(@iteration-count) {\n -webkit-animation-iteration-count: @iteration-count;\n animation-iteration-count: @iteration-count;\n}\n.animation-direction(@direction) {\n -webkit-animation-direction: @direction;\n animation-direction: @direction;\n}\n.animation-fill-mode(@fill-mode) {\n -webkit-animation-fill-mode: @fill-mode;\n animation-fill-mode: @fill-mode;\n}\n\n// Backface visibility\n// Prevent browsers from flickering when using CSS 3D transforms.\n// Default value is `visible`, but can be changed to `hidden`\n\n.backface-visibility(@visibility) {\n -webkit-backface-visibility: @visibility;\n -moz-backface-visibility: @visibility;\n backface-visibility: @visibility;\n}\n\n// Drop shadows\n//\n// Note: Deprecated `.box-shadow()` as of v3.1.0 since all of Bootstrap's\n// supported browsers that have box shadow capabilities now support it.\n\n.box-shadow(@shadow) {\n -webkit-box-shadow: @shadow; // iOS <4.3 & Android <4.1\n box-shadow: @shadow;\n}\n\n// Box sizing\n.box-sizing(@boxmodel) {\n -webkit-box-sizing: @boxmodel;\n -moz-box-sizing: @boxmodel;\n box-sizing: @boxmodel;\n}\n\n// CSS3 Content Columns\n.content-columns(@column-count; @column-gap: @grid-gutter-width) {\n -webkit-column-count: @column-count;\n -moz-column-count: @column-count;\n column-count: @column-count;\n -webkit-column-gap: @column-gap;\n -moz-column-gap: @column-gap;\n column-gap: @column-gap;\n}\n\n// Optional hyphenation\n.hyphens(@mode: auto) {\n -webkit-hyphens: @mode;\n -moz-hyphens: @mode;\n -ms-hyphens: @mode; // IE10+\n -o-hyphens: @mode;\n hyphens: @mode;\n word-wrap: break-word;\n}\n\n// Placeholder text\n.placeholder(@color: @input-color-placeholder) {\n // Firefox\n &::-moz-placeholder {\n color: @color;\n opacity: 1; // Override Firefox's unusual default opacity; see https://github.com/twbs/bootstrap/pull/11526\n }\n &:-ms-input-placeholder { color: @color; } // Internet Explorer 10+\n &::-webkit-input-placeholder { color: @color; } // Safari and Chrome\n}\n\n// Transformations\n.scale(@ratio) {\n -webkit-transform: scale(@ratio);\n -ms-transform: scale(@ratio); // IE9 only\n -o-transform: scale(@ratio);\n transform: scale(@ratio);\n}\n.scale(@ratioX; @ratioY) {\n -webkit-transform: scale(@ratioX, @ratioY);\n -ms-transform: scale(@ratioX, @ratioY); // IE9 only\n -o-transform: scale(@ratioX, @ratioY);\n transform: scale(@ratioX, @ratioY);\n}\n.scaleX(@ratio) {\n -webkit-transform: scaleX(@ratio);\n -ms-transform: scaleX(@ratio); // IE9 only\n -o-transform: scaleX(@ratio);\n transform: scaleX(@ratio);\n}\n.scaleY(@ratio) {\n -webkit-transform: scaleY(@ratio);\n -ms-transform: scaleY(@ratio); // IE9 only\n -o-transform: scaleY(@ratio);\n transform: scaleY(@ratio);\n}\n.skew(@x; @y) {\n -webkit-transform: skewX(@x) skewY(@y);\n -ms-transform: skewX(@x) skewY(@y); // See https://github.com/twbs/bootstrap/issues/4885; IE9+\n -o-transform: skewX(@x) skewY(@y);\n transform: skewX(@x) skewY(@y);\n}\n.translate(@x; @y) {\n -webkit-transform: translate(@x, @y);\n -ms-transform: translate(@x, @y); // IE9 only\n -o-transform: translate(@x, @y);\n transform: translate(@x, @y);\n}\n.translate3d(@x; @y; @z) {\n -webkit-transform: translate3d(@x, @y, @z);\n transform: translate3d(@x, @y, @z);\n}\n.rotate(@degrees) {\n -webkit-transform: rotate(@degrees);\n -ms-transform: rotate(@degrees); // IE9 only\n -o-transform: rotate(@degrees);\n transform: rotate(@degrees);\n}\n.rotateX(@degrees) {\n -webkit-transform: rotateX(@degrees);\n -ms-transform: rotateX(@degrees); // IE9 only\n -o-transform: rotateX(@degrees);\n transform: rotateX(@degrees);\n}\n.rotateY(@degrees) {\n -webkit-transform: rotateY(@degrees);\n -ms-transform: rotateY(@degrees); // IE9 only\n -o-transform: rotateY(@degrees);\n transform: rotateY(@degrees);\n}\n.perspective(@perspective) {\n -webkit-perspective: @perspective;\n -moz-perspective: @perspective;\n perspective: @perspective;\n}\n.perspective-origin(@perspective) {\n -webkit-perspective-origin: @perspective;\n -moz-perspective-origin: @perspective;\n perspective-origin: @perspective;\n}\n.transform-origin(@origin) {\n -webkit-transform-origin: @origin;\n -moz-transform-origin: @origin;\n -ms-transform-origin: @origin; // IE9 only\n transform-origin: @origin;\n}\n\n\n// Transitions\n\n.transition(@transition) {\n -webkit-transition: @transition;\n -o-transition: @transition;\n transition: @transition;\n}\n.transition-property(@transition-property) {\n -webkit-transition-property: @transition-property;\n transition-property: @transition-property;\n}\n.transition-delay(@transition-delay) {\n -webkit-transition-delay: @transition-delay;\n transition-delay: @transition-delay;\n}\n.transition-duration(@transition-duration) {\n -webkit-transition-duration: @transition-duration;\n transition-duration: @transition-duration;\n}\n.transition-timing-function(@timing-function) {\n -webkit-transition-timing-function: @timing-function;\n transition-timing-function: @timing-function;\n}\n.transition-transform(@transition) {\n -webkit-transition: -webkit-transform @transition;\n -moz-transition: -moz-transform @transition;\n -o-transition: -o-transform @transition;\n transition: transform @transition;\n}\n\n\n// User select\n// For selecting text on the page\n\n.user-select(@select) {\n -webkit-user-select: @select;\n -moz-user-select: @select;\n -ms-user-select: @select; // IE10+\n user-select: @select;\n}\n","// WebKit-style focus\n\n.tab-focus() {\n // WebKit-specific. Other browsers will keep their default outline style.\n // (Initially tried to also force default via `outline: initial`,\n // but that seems to erroneously remove the outline in Firefox altogether.)\n outline: 5px auto -webkit-focus-ring-color;\n outline-offset: -2px;\n}\n","// stylelint-disable media-feature-name-no-vendor-prefix, media-feature-parentheses-space-inside, media-feature-name-no-unknown, indentation, at-rule-name-space-after\n\n// Responsive image\n//\n// Keep images from scaling beyond the width of their parents.\n.img-responsive(@display: block) {\n display: @display;\n max-width: 100%; // Part 1: Set a maximum relative to the parent\n height: auto; // Part 2: Scale the height according to the width, otherwise you get stretching\n}\n\n\n// Retina image\n//\n// Short retina mixin for setting background-image and -size. Note that the\n// spelling of `min--moz-device-pixel-ratio` is intentional.\n.img-retina(@file-1x; @file-2x; @width-1x; @height-1x) {\n background-image: url(\"@{file-1x}\");\n\n @media\n only screen and (-webkit-min-device-pixel-ratio: 2),\n only screen and ( min--moz-device-pixel-ratio: 2),\n only screen and ( -o-min-device-pixel-ratio: 2/1),\n only screen and ( min-device-pixel-ratio: 2),\n only screen and ( min-resolution: 192dpi),\n only screen and ( min-resolution: 2dppx) {\n background-image: url(\"@{file-2x}\");\n background-size: @width-1x @height-1x;\n }\n}\n","// stylelint-disable selector-list-comma-newline-after, selector-no-qualifying-type\n\n//\n// Typography\n// --------------------------------------------------\n\n\n// Headings\n// -------------------------\n\nh1, h2, h3, h4, h5, h6,\n.h1, .h2, .h3, .h4, .h5, .h6 {\n font-family: @headings-font-family;\n font-weight: @headings-font-weight;\n line-height: @headings-line-height;\n color: @headings-color;\n\n small,\n .small {\n font-weight: 400;\n line-height: 1;\n color: @headings-small-color;\n }\n}\n\nh1, .h1,\nh2, .h2,\nh3, .h3 {\n margin-top: @line-height-computed;\n margin-bottom: (@line-height-computed / 2);\n\n small,\n .small {\n font-size: 65%;\n }\n}\nh4, .h4,\nh5, .h5,\nh6, .h6 {\n margin-top: (@line-height-computed / 2);\n margin-bottom: (@line-height-computed / 2);\n\n small,\n .small {\n font-size: 75%;\n }\n}\n\nh1, .h1 { font-size: @font-size-h1; }\nh2, .h2 { font-size: @font-size-h2; }\nh3, .h3 { font-size: @font-size-h3; }\nh4, .h4 { font-size: @font-size-h4; }\nh5, .h5 { font-size: @font-size-h5; }\nh6, .h6 { font-size: @font-size-h6; }\n\n\n// Body text\n// -------------------------\n\np {\n margin: 0 0 (@line-height-computed / 2);\n}\n\n.lead {\n margin-bottom: @line-height-computed;\n font-size: floor((@font-size-base * 1.15));\n font-weight: 300;\n line-height: 1.4;\n\n @media (min-width: @screen-sm-min) {\n font-size: (@font-size-base * 1.5);\n }\n}\n\n\n// Emphasis & misc\n// -------------------------\n\n// Ex: (12px small font / 14px base font) * 100% = about 85%\nsmall,\n.small {\n font-size: floor((100% * @font-size-small / @font-size-base));\n}\n\nmark,\n.mark {\n padding: .2em;\n background-color: @state-warning-bg;\n}\n\n// Alignment\n.text-left { text-align: left; }\n.text-right { text-align: right; }\n.text-center { text-align: center; }\n.text-justify { text-align: justify; }\n.text-nowrap { white-space: nowrap; }\n\n// Transformation\n.text-lowercase { text-transform: lowercase; }\n.text-uppercase { text-transform: uppercase; }\n.text-capitalize { text-transform: capitalize; }\n\n// Contextual colors\n.text-muted {\n color: @text-muted;\n}\n.text-primary {\n .text-emphasis-variant(@brand-primary);\n}\n.text-success {\n .text-emphasis-variant(@state-success-text);\n}\n.text-info {\n .text-emphasis-variant(@state-info-text);\n}\n.text-warning {\n .text-emphasis-variant(@state-warning-text);\n}\n.text-danger {\n .text-emphasis-variant(@state-danger-text);\n}\n\n// Contextual backgrounds\n// For now we'll leave these alongside the text classes until v4 when we can\n// safely shift things around (per SemVer rules).\n.bg-primary {\n // Given the contrast here, this is the only class to have its color inverted\n // automatically.\n color: #fff;\n .bg-variant(@brand-primary);\n}\n.bg-success {\n .bg-variant(@state-success-bg);\n}\n.bg-info {\n .bg-variant(@state-info-bg);\n}\n.bg-warning {\n .bg-variant(@state-warning-bg);\n}\n.bg-danger {\n .bg-variant(@state-danger-bg);\n}\n\n\n// Page header\n// -------------------------\n\n.page-header {\n padding-bottom: ((@line-height-computed / 2) - 1);\n margin: (@line-height-computed * 2) 0 @line-height-computed;\n border-bottom: 1px solid @page-header-border-color;\n}\n\n\n// Lists\n// -------------------------\n\n// Unordered and Ordered lists\nul,\nol {\n margin-top: 0;\n margin-bottom: (@line-height-computed / 2);\n ul,\n ol {\n margin-bottom: 0;\n }\n}\n\n// List options\n\n// Unstyled keeps list items block level, just removes default browser padding and list-style\n.list-unstyled {\n padding-left: 0;\n list-style: none;\n}\n\n// Inline turns list items into inline-block\n.list-inline {\n .list-unstyled();\n margin-left: -5px;\n\n > li {\n display: inline-block;\n padding-right: 5px;\n padding-left: 5px;\n }\n}\n\n// Description Lists\ndl {\n margin-top: 0; // Remove browser default\n margin-bottom: @line-height-computed;\n}\ndt,\ndd {\n line-height: @line-height-base;\n}\ndt {\n font-weight: 700;\n}\ndd {\n margin-left: 0; // Undo browser default\n}\n\n// Horizontal description lists\n//\n// Defaults to being stacked without any of the below styles applied, until the\n// grid breakpoint is reached (default of ~768px).\n\n.dl-horizontal {\n dd {\n &:extend(.clearfix all); // Clear the floated `dt` if an empty `dd` is present\n }\n\n @media (min-width: @dl-horizontal-breakpoint) {\n dt {\n float: left;\n width: (@dl-horizontal-offset - 20);\n clear: left;\n text-align: right;\n .text-overflow();\n }\n dd {\n margin-left: @dl-horizontal-offset;\n }\n }\n}\n\n\n// Misc\n// -------------------------\n\n// Abbreviations and acronyms\n// Add data-* attribute to help out our tooltip plugin, per https://github.com/twbs/bootstrap/issues/5257\nabbr[title],\nabbr[data-original-title] {\n cursor: help;\n}\n\n.initialism {\n font-size: 90%;\n .text-uppercase();\n}\n\n// Blockquotes\nblockquote {\n padding: (@line-height-computed / 2) @line-height-computed;\n margin: 0 0 @line-height-computed;\n font-size: @blockquote-font-size;\n border-left: 5px solid @blockquote-border-color;\n\n p,\n ul,\n ol {\n &:last-child {\n margin-bottom: 0;\n }\n }\n\n // Note: Deprecated small and .small as of v3.1.0\n // Context: https://github.com/twbs/bootstrap/issues/11660\n footer,\n small,\n .small {\n display: block;\n font-size: 80%; // back to default font-size\n line-height: @line-height-base;\n color: @blockquote-small-color;\n\n &:before {\n content: \"\\2014 \\00A0\"; // em dash, nbsp\n }\n }\n}\n\n// Opposite alignment of blockquote\n//\n// Heads up: `blockquote.pull-right` has been deprecated as of v3.1.0.\n.blockquote-reverse,\nblockquote.pull-right {\n padding-right: 15px;\n padding-left: 0;\n text-align: right;\n border-right: 5px solid @blockquote-border-color;\n border-left: 0;\n\n // Account for citation\n footer,\n small,\n .small {\n &:before { content: \"\"; }\n &:after {\n content: \"\\00A0 \\2014\"; // nbsp, em dash\n }\n }\n}\n\n// Addresses\naddress {\n margin-bottom: @line-height-computed;\n font-style: normal;\n line-height: @line-height-base;\n}\n","// Typography\n\n.text-emphasis-variant(@color) {\n color: @color;\n a&:hover,\n a&:focus {\n color: darken(@color, 10%);\n }\n}\n","// Contextual backgrounds\n\n.bg-variant(@color) {\n background-color: @color;\n a&:hover,\n a&:focus {\n background-color: darken(@color, 10%);\n }\n}\n","// Text overflow\n// Requires inline-block or block for proper styling\n\n.text-overflow() {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n","//\n// Code (inline and block)\n// --------------------------------------------------\n\n\n// Inline and block code styles\ncode,\nkbd,\npre,\nsamp {\n font-family: @font-family-monospace;\n}\n\n// Inline code\ncode {\n padding: 2px 4px;\n font-size: 90%;\n color: @code-color;\n background-color: @code-bg;\n border-radius: @border-radius-base;\n}\n\n// User input typically entered via keyboard\nkbd {\n padding: 2px 4px;\n font-size: 90%;\n color: @kbd-color;\n background-color: @kbd-bg;\n border-radius: @border-radius-small;\n box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .25);\n\n kbd {\n padding: 0;\n font-size: 100%;\n font-weight: 700;\n box-shadow: none;\n }\n}\n\n// Blocks of code\npre {\n display: block;\n padding: ((@line-height-computed - 1) / 2);\n margin: 0 0 (@line-height-computed / 2);\n font-size: (@font-size-base - 1); // 14px to 13px\n line-height: @line-height-base;\n color: @pre-color;\n word-break: break-all;\n word-wrap: break-word;\n background-color: @pre-bg;\n border: 1px solid @pre-border-color;\n border-radius: @border-radius-base;\n\n // Account for some code outputs that place code tags in pre tags\n code {\n padding: 0;\n font-size: inherit;\n color: inherit;\n white-space: pre-wrap;\n background-color: transparent;\n border-radius: 0;\n }\n}\n\n// Enable scrollable blocks of code\n.pre-scrollable {\n max-height: @pre-scrollable-max-height;\n overflow-y: scroll;\n}\n","//\n// Grid system\n// --------------------------------------------------\n\n\n// Container widths\n//\n// Set the container width, and override it for fixed navbars in media queries.\n\n.container {\n .container-fixed();\n\n @media (min-width: @screen-sm-min) {\n width: @container-sm;\n }\n @media (min-width: @screen-md-min) {\n width: @container-md;\n }\n @media (min-width: @screen-lg-min) {\n width: @container-lg;\n }\n}\n\n\n// Fluid container\n//\n// Utilizes the mixin meant for fixed width containers, but without any defined\n// width for fluid, full width layouts.\n\n.container-fluid {\n .container-fixed();\n}\n\n\n// Row\n//\n// Rows contain and clear the floats of your columns.\n\n.row {\n .make-row();\n}\n\n.row-no-gutters {\n margin-right: 0;\n margin-left: 0;\n\n [class*=\"col-\"] {\n padding-right: 0;\n padding-left: 0;\n }\n}\n\n\n// Columns\n//\n// Common styles for small and large grid columns\n\n.make-grid-columns();\n\n\n// Extra small grid\n//\n// Columns, offsets, pushes, and pulls for extra small devices like\n// smartphones.\n\n.make-grid(xs);\n\n\n// Small grid\n//\n// Columns, offsets, pushes, and pulls for the small device range, from phones\n// to tablets.\n\n@media (min-width: @screen-sm-min) {\n .make-grid(sm);\n}\n\n\n// Medium grid\n//\n// Columns, offsets, pushes, and pulls for the desktop device range.\n\n@media (min-width: @screen-md-min) {\n .make-grid(md);\n}\n\n\n// Large grid\n//\n// Columns, offsets, pushes, and pulls for the large desktop device range.\n\n@media (min-width: @screen-lg-min) {\n .make-grid(lg);\n}\n","// Grid system\n//\n// Generate semantic grid columns with these mixins.\n\n// Centered container element\n.container-fixed(@gutter: @grid-gutter-width) {\n padding-right: ceil((@gutter / 2));\n padding-left: floor((@gutter / 2));\n margin-right: auto;\n margin-left: auto;\n &:extend(.clearfix all);\n}\n\n// Creates a wrapper for a series of columns\n.make-row(@gutter: @grid-gutter-width) {\n margin-right: floor((@gutter / -2));\n margin-left: ceil((@gutter / -2));\n &:extend(.clearfix all);\n}\n\n// Generate the extra small columns\n.make-xs-column(@columns; @gutter: @grid-gutter-width) {\n position: relative;\n float: left;\n width: percentage((@columns / @grid-columns));\n min-height: 1px;\n padding-right: (@gutter / 2);\n padding-left: (@gutter / 2);\n}\n.make-xs-column-offset(@columns) {\n margin-left: percentage((@columns / @grid-columns));\n}\n.make-xs-column-push(@columns) {\n left: percentage((@columns / @grid-columns));\n}\n.make-xs-column-pull(@columns) {\n right: percentage((@columns / @grid-columns));\n}\n\n// Generate the small columns\n.make-sm-column(@columns; @gutter: @grid-gutter-width) {\n position: relative;\n min-height: 1px;\n padding-right: (@gutter / 2);\n padding-left: (@gutter / 2);\n\n @media (min-width: @screen-sm-min) {\n float: left;\n width: percentage((@columns / @grid-columns));\n }\n}\n.make-sm-column-offset(@columns) {\n @media (min-width: @screen-sm-min) {\n margin-left: percentage((@columns / @grid-columns));\n }\n}\n.make-sm-column-push(@columns) {\n @media (min-width: @screen-sm-min) {\n left: percentage((@columns / @grid-columns));\n }\n}\n.make-sm-column-pull(@columns) {\n @media (min-width: @screen-sm-min) {\n right: percentage((@columns / @grid-columns));\n }\n}\n\n// Generate the medium columns\n.make-md-column(@columns; @gutter: @grid-gutter-width) {\n position: relative;\n min-height: 1px;\n padding-right: (@gutter / 2);\n padding-left: (@gutter / 2);\n\n @media (min-width: @screen-md-min) {\n float: left;\n width: percentage((@columns / @grid-columns));\n }\n}\n.make-md-column-offset(@columns) {\n @media (min-width: @screen-md-min) {\n margin-left: percentage((@columns / @grid-columns));\n }\n}\n.make-md-column-push(@columns) {\n @media (min-width: @screen-md-min) {\n left: percentage((@columns / @grid-columns));\n }\n}\n.make-md-column-pull(@columns) {\n @media (min-width: @screen-md-min) {\n right: percentage((@columns / @grid-columns));\n }\n}\n\n// Generate the large columns\n.make-lg-column(@columns; @gutter: @grid-gutter-width) {\n position: relative;\n min-height: 1px;\n padding-right: (@gutter / 2);\n padding-left: (@gutter / 2);\n\n @media (min-width: @screen-lg-min) {\n float: left;\n width: percentage((@columns / @grid-columns));\n }\n}\n.make-lg-column-offset(@columns) {\n @media (min-width: @screen-lg-min) {\n margin-left: percentage((@columns / @grid-columns));\n }\n}\n.make-lg-column-push(@columns) {\n @media (min-width: @screen-lg-min) {\n left: percentage((@columns / @grid-columns));\n }\n}\n.make-lg-column-pull(@columns) {\n @media (min-width: @screen-lg-min) {\n right: percentage((@columns / @grid-columns));\n }\n}\n","// Framework grid generation\n//\n// Used only by Bootstrap to generate the correct number of grid classes given\n// any value of `@grid-columns`.\n\n.make-grid-columns() {\n // Common styles for all sizes of grid columns, widths 1-12\n .col(@index) { // initial\n @item: ~\".col-xs-@{index}, .col-sm-@{index}, .col-md-@{index}, .col-lg-@{index}\";\n .col((@index + 1), @item);\n }\n .col(@index, @list) when (@index =< @grid-columns) { // general; \"=<\" isn't a typo\n @item: ~\".col-xs-@{index}, .col-sm-@{index}, .col-md-@{index}, .col-lg-@{index}\";\n .col((@index + 1), ~\"@{list}, @{item}\");\n }\n .col(@index, @list) when (@index > @grid-columns) { // terminal\n @{list} {\n position: relative;\n // Prevent columns from collapsing when empty\n min-height: 1px;\n // Inner gutter via padding\n padding-right: floor((@grid-gutter-width / 2));\n padding-left: ceil((@grid-gutter-width / 2));\n }\n }\n .col(1); // kickstart it\n}\n\n.float-grid-columns(@class) {\n .col(@index) { // initial\n @item: ~\".col-@{class}-@{index}\";\n .col((@index + 1), @item);\n }\n .col(@index, @list) when (@index =< @grid-columns) { // general\n @item: ~\".col-@{class}-@{index}\";\n .col((@index + 1), ~\"@{list}, @{item}\");\n }\n .col(@index, @list) when (@index > @grid-columns) { // terminal\n @{list} {\n float: left;\n }\n }\n .col(1); // kickstart it\n}\n\n.calc-grid-column(@index, @class, @type) when (@type = width) and (@index > 0) {\n .col-@{class}-@{index} {\n width: percentage((@index / @grid-columns));\n }\n}\n.calc-grid-column(@index, @class, @type) when (@type = push) and (@index > 0) {\n .col-@{class}-push-@{index} {\n left: percentage((@index / @grid-columns));\n }\n}\n.calc-grid-column(@index, @class, @type) when (@type = push) and (@index = 0) {\n .col-@{class}-push-0 {\n left: auto;\n }\n}\n.calc-grid-column(@index, @class, @type) when (@type = pull) and (@index > 0) {\n .col-@{class}-pull-@{index} {\n right: percentage((@index / @grid-columns));\n }\n}\n.calc-grid-column(@index, @class, @type) when (@type = pull) and (@index = 0) {\n .col-@{class}-pull-0 {\n right: auto;\n }\n}\n.calc-grid-column(@index, @class, @type) when (@type = offset) {\n .col-@{class}-offset-@{index} {\n margin-left: percentage((@index / @grid-columns));\n }\n}\n\n// Basic looping in LESS\n.loop-grid-columns(@index, @class, @type) when (@index >= 0) {\n .calc-grid-column(@index, @class, @type);\n // next iteration\n .loop-grid-columns((@index - 1), @class, @type);\n}\n\n// Create grid for specific class\n.make-grid(@class) {\n .float-grid-columns(@class);\n .loop-grid-columns(@grid-columns, @class, width);\n .loop-grid-columns(@grid-columns, @class, pull);\n .loop-grid-columns(@grid-columns, @class, push);\n .loop-grid-columns(@grid-columns, @class, offset);\n}\n","// stylelint-disable selector-max-type, selector-max-compound-selectors, selector-no-qualifying-type\n\n//\n// Tables\n// --------------------------------------------------\n\n\ntable {\n background-color: @table-bg;\n\n // Table cell sizing\n //\n // Reset default table behavior\n\n col[class*=\"col-\"] {\n position: static; // Prevent border hiding in Firefox and IE9-11 (see https://github.com/twbs/bootstrap/issues/11623)\n display: table-column;\n float: none;\n }\n\n td,\n th {\n &[class*=\"col-\"] {\n position: static; // Prevent border hiding in Firefox and IE9-11 (see https://github.com/twbs/bootstrap/issues/11623)\n display: table-cell;\n float: none;\n }\n }\n}\n\ncaption {\n padding-top: @table-cell-padding;\n padding-bottom: @table-cell-padding;\n color: @text-muted;\n text-align: left;\n}\n\nth {\n text-align: left;\n}\n\n\n// Baseline styles\n\n.table {\n width: 100%;\n max-width: 100%;\n margin-bottom: @line-height-computed;\n // Cells\n > thead,\n > tbody,\n > tfoot {\n > tr {\n > th,\n > td {\n padding: @table-cell-padding;\n line-height: @line-height-base;\n vertical-align: top;\n border-top: 1px solid @table-border-color;\n }\n }\n }\n // Bottom align for column headings\n > thead > tr > th {\n vertical-align: bottom;\n border-bottom: 2px solid @table-border-color;\n }\n // Remove top border from thead by default\n > caption + thead,\n > colgroup + thead,\n > thead:first-child {\n > tr:first-child {\n > th,\n > td {\n border-top: 0;\n }\n }\n }\n // Account for multiple tbody instances\n > tbody + tbody {\n border-top: 2px solid @table-border-color;\n }\n\n // Nesting\n .table {\n background-color: @body-bg;\n }\n}\n\n\n// Condensed table w/ half padding\n\n.table-condensed {\n > thead,\n > tbody,\n > tfoot {\n > tr {\n > th,\n > td {\n padding: @table-condensed-cell-padding;\n }\n }\n }\n}\n\n\n// Bordered version\n//\n// Add borders all around the table and between all the columns.\n\n.table-bordered {\n border: 1px solid @table-border-color;\n > thead,\n > tbody,\n > tfoot {\n > tr {\n > th,\n > td {\n border: 1px solid @table-border-color;\n }\n }\n }\n > thead > tr {\n > th,\n > td {\n border-bottom-width: 2px;\n }\n }\n}\n\n\n// Zebra-striping\n//\n// Default zebra-stripe styles (alternating gray and transparent backgrounds)\n\n.table-striped {\n > tbody > tr:nth-of-type(odd) {\n background-color: @table-bg-accent;\n }\n}\n\n\n// Hover effect\n//\n// Placed here since it has to come after the potential zebra striping\n\n.table-hover {\n > tbody > tr:hover {\n background-color: @table-bg-hover;\n }\n}\n\n\n// Table backgrounds\n//\n// Exact selectors below required to override `.table-striped` and prevent\n// inheritance to nested tables.\n\n// Generate the contextual variants\n.table-row-variant(active; @table-bg-active);\n.table-row-variant(success; @state-success-bg);\n.table-row-variant(info; @state-info-bg);\n.table-row-variant(warning; @state-warning-bg);\n.table-row-variant(danger; @state-danger-bg);\n\n\n// Responsive tables\n//\n// Wrap your tables in `.table-responsive` and we'll make them mobile friendly\n// by enabling horizontal scrolling. Only applies <768px. Everything above that\n// will display normally.\n\n.table-responsive {\n min-height: .01%; // Workaround for IE9 bug (see https://github.com/twbs/bootstrap/issues/14837)\n overflow-x: auto;\n\n @media screen and (max-width: @screen-xs-max) {\n width: 100%;\n margin-bottom: (@line-height-computed * .75);\n overflow-y: hidden;\n -ms-overflow-style: -ms-autohiding-scrollbar;\n border: 1px solid @table-border-color;\n\n // Tighten up spacing\n > .table {\n margin-bottom: 0;\n\n // Ensure the content doesn't wrap\n > thead,\n > tbody,\n > tfoot {\n > tr {\n > th,\n > td {\n white-space: nowrap;\n }\n }\n }\n }\n\n // Special overrides for the bordered tables\n > .table-bordered {\n border: 0;\n\n // Nuke the appropriate borders so that the parent can handle them\n > thead,\n > tbody,\n > tfoot {\n > tr {\n > th:first-child,\n > td:first-child {\n border-left: 0;\n }\n > th:last-child,\n > td:last-child {\n border-right: 0;\n }\n }\n }\n\n // Only nuke the last row's bottom-border in `tbody` and `tfoot` since\n // chances are there will be only one `tr` in a `thead` and that would\n // remove the border altogether.\n > tbody,\n > tfoot {\n > tr:last-child {\n > th,\n > td {\n border-bottom: 0;\n }\n }\n }\n\n }\n }\n}\n","// Tables\n\n.table-row-variant(@state; @background) {\n // Exact selectors below required to override `.table-striped` and prevent\n // inheritance to nested tables.\n .table > thead > tr,\n .table > tbody > tr,\n .table > tfoot > tr {\n > td.@{state},\n > th.@{state},\n &.@{state} > td,\n &.@{state} > th {\n background-color: @background;\n }\n }\n\n // Hover states for `.table-hover`\n // Note: this is not available for cells or rows within `thead` or `tfoot`.\n .table-hover > tbody > tr {\n > td.@{state}:hover,\n > th.@{state}:hover,\n &.@{state}:hover > td,\n &:hover > .@{state},\n &.@{state}:hover > th {\n background-color: darken(@background, 5%);\n }\n }\n}\n","// stylelint-disable selector-no-qualifying-type, property-no-vendor-prefix, media-feature-name-no-vendor-prefix\n\n//\n// Forms\n// --------------------------------------------------\n\n\n// Normalize non-controls\n//\n// Restyle and baseline non-control form elements.\n\nfieldset {\n // Chrome and Firefox set a `min-width: min-content;` on fieldsets,\n // so we reset that to ensure it behaves more like a standard block element.\n // See https://github.com/twbs/bootstrap/issues/12359.\n min-width: 0;\n padding: 0;\n margin: 0;\n border: 0;\n}\n\nlegend {\n display: block;\n width: 100%;\n padding: 0;\n margin-bottom: @line-height-computed;\n font-size: (@font-size-base * 1.5);\n line-height: inherit;\n color: @legend-color;\n border: 0;\n border-bottom: 1px solid @legend-border-color;\n}\n\nlabel {\n display: inline-block;\n max-width: 100%; // Force IE8 to wrap long content (see https://github.com/twbs/bootstrap/issues/13141)\n margin-bottom: 5px;\n font-weight: 700;\n}\n\n\n// Normalize form controls\n//\n// While most of our form styles require extra classes, some basic normalization\n// is required to ensure optimum display with or without those classes to better\n// address browser inconsistencies.\n\ninput[type=\"search\"] {\n // Override content-box in Normalize (* isn't specific enough)\n .box-sizing(border-box);\n\n // Search inputs in iOS\n //\n // This overrides the extra rounded corners on search inputs in iOS so that our\n // `.form-control` class can properly style them. Note that this cannot simply\n // be added to `.form-control` as it's not specific enough. For details, see\n // https://github.com/twbs/bootstrap/issues/11586.\n -webkit-appearance: none;\n appearance: none;\n}\n\n// Position radios and checkboxes better\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n margin: 4px 0 0;\n margin-top: 1px \\9; // IE8-9\n line-height: normal;\n\n // Apply same disabled cursor tweak as for inputs\n // Some special care is needed because