├── .gitignore ├── LICENSE ├── README.md ├── README_EN.md ├── budiot-docs ├── .npmignore ├── README.md ├── package.json └── src │ ├── .vuepress │ ├── components │ │ ├── Foo │ │ │ └── Bar.vue │ │ ├── OtherComponent.vue │ │ └── demo-component.vue │ ├── config.js │ ├── enhanceApp.js │ ├── public │ │ ├── 01.png │ │ ├── 02.png │ │ ├── banner.jpg │ │ └── favicon.ico │ └── styles │ │ ├── index.styl │ │ └── palette.styl │ ├── config │ └── README.md │ ├── en │ ├── guide │ │ ├── README.md │ │ ├── deploy.md │ │ ├── develop.md │ │ ├── device.md │ │ └── network.md │ └── index.md │ ├── guide │ ├── README.md │ ├── deploy.md │ ├── develop.md │ ├── device.md │ ├── more.md │ └── network.md │ └── index.md ├── budiot-java-server ├── README.md ├── budiot-access │ ├── budiot-access-common │ │ ├── pom.xml │ │ └── src │ │ │ └── main │ │ │ └── java │ │ │ └── com │ │ │ └── budwk │ │ │ └── app │ │ │ └── access │ │ │ ├── constants │ │ │ ├── StorageConstant.java │ │ │ └── TopicConstant.java │ │ │ ├── enums │ │ │ └── TransportType.java │ │ │ └── objects │ │ │ ├── dto │ │ │ ├── DeviceAttributeDTO.java │ │ │ ├── DeviceCmdDTO.java │ │ │ ├── DeviceDTO.java │ │ │ ├── DeviceDataDTO.java │ │ │ ├── DeviceEventDataDTO.java │ │ │ ├── DeviceRawDataDTO.java │ │ │ └── ValueItemDTO.java │ │ │ └── query │ │ │ ├── DeviceCmdDataQuery.java │ │ │ ├── DeviceDataQuery.java │ │ │ ├── DeviceEventDataQuery.java │ │ │ ├── DeviceRawDataQuery.java │ │ │ └── PageQuery.java │ ├── budiot-access-gateway │ │ ├── pom.xml │ │ └── src │ │ │ └── main │ │ │ ├── java │ │ │ └── com │ │ │ │ └── budwk │ │ │ │ └── app │ │ │ │ └── access │ │ │ │ └── gateway │ │ │ │ ├── DeviceGatewayServer.java │ │ │ │ ├── GatewayLauncher.java │ │ │ │ └── manager │ │ │ │ └── DefaultGatewayManager.java │ │ │ └── resources │ │ │ ├── application-aep.yaml │ │ │ └── application.yaml │ ├── budiot-access-message │ │ ├── README.md │ │ ├── pom.xml │ │ └── src │ │ │ └── main │ │ │ └── java │ │ │ └── com │ │ │ └── budwk │ │ │ └── app │ │ │ └── access │ │ │ └── message │ │ │ ├── Message.java │ │ │ ├── MessageTransfer.java │ │ │ ├── impl │ │ │ ├── MessageTransferServer.java │ │ │ ├── RMQMessageTransfer.java │ │ │ └── RabbitMQMessageTransfer.java │ │ │ └── utils │ │ │ └── FastSerializeUtil.java │ ├── budiot-access-network │ │ ├── budiot-access-network-common │ │ │ ├── pom.xml │ │ │ └── src │ │ │ │ └── main │ │ │ │ └── java │ │ │ │ └── com │ │ │ │ └── budwk │ │ │ │ └── app │ │ │ │ └── access │ │ │ │ └── network │ │ │ │ ├── DeviceGateway.java │ │ │ │ ├── DeviceGatewayBuilder.java │ │ │ │ ├── DeviceGatewayManager.java │ │ │ │ └── config │ │ │ │ └── DeviceGatewayConfiguration.java │ │ ├── budiot-access-network-http │ │ │ ├── pom.xml │ │ │ └── src │ │ │ │ └── main │ │ │ │ └── java │ │ │ │ └── com │ │ │ │ └── budwk │ │ │ │ └── app │ │ │ │ └── access │ │ │ │ └── network │ │ │ │ └── http │ │ │ │ ├── HttpDeviceGateway.java │ │ │ │ └── HttpDeviceGatewayBuilder.java │ │ ├── budiot-access-network-modbus-master │ │ │ ├── pom.xml │ │ │ └── src │ │ │ │ └── main │ │ │ │ └── java │ │ │ │ └── com │ │ │ │ └── budwk │ │ │ │ └── app │ │ │ │ └── access │ │ │ │ └── network │ │ │ │ └── modbus │ │ │ │ ├── ModbusMasterDeviceGateway.java │ │ │ │ └── ModbusMasterDeviceGatewayBuilder.java │ │ ├── budiot-access-network-modbus-slave │ │ │ ├── pom.xml │ │ │ └── src │ │ │ │ └── main │ │ │ │ └── java │ │ │ │ └── com │ │ │ │ └── budwk │ │ │ │ └── app │ │ │ │ └── network │ │ │ │ └── modbus │ │ │ │ ├── ModbusSlaveDeviceGateway.java │ │ │ │ └── ModbusSlaveDeviceGatewayBuilder.java │ │ ├── budiot-access-network-mqtt │ │ │ ├── pom.xml │ │ │ └── src │ │ │ │ └── main │ │ │ │ └── java │ │ │ │ └── com │ │ │ │ └── budwk │ │ │ │ └── app │ │ │ │ └── access │ │ │ │ └── network │ │ │ │ └── mqtt │ │ │ │ ├── MqttDeviceGateway.java │ │ │ │ └── MqttDeviceGatewayBuilder.java │ │ ├── budiot-access-network-tcp │ │ │ ├── pom.xml │ │ │ └── src │ │ │ │ └── main │ │ │ │ └── java │ │ │ │ └── com │ │ │ │ └── budwk │ │ │ │ └── app │ │ │ │ └── access │ │ │ │ └── network │ │ │ │ └── tcp │ │ │ │ ├── TcpDeviceGateway.java │ │ │ │ ├── TcpDeviceGatewayBuilder.java │ │ │ │ ├── client │ │ │ │ ├── TcpClient.java │ │ │ │ └── VertxTcpClient.java │ │ │ │ └── server │ │ │ │ ├── TcpServer.java │ │ │ │ └── VertxTcpServer.java │ │ ├── budiot-access-network-udp │ │ │ ├── pom.xml │ │ │ └── src │ │ │ │ └── main │ │ │ │ └── java │ │ │ │ └── com │ │ │ │ └── budwk │ │ │ │ └── app │ │ │ │ └── access │ │ │ │ └── network │ │ │ │ └── udp │ │ │ │ ├── UdpDeviceGateway.java │ │ │ │ ├── UdpDeviceGatewayBuilder.java │ │ │ │ ├── client │ │ │ │ └── UdpSender.java │ │ │ │ └── server │ │ │ │ ├── UdpServer.java │ │ │ │ └── VertxUdpServer.java │ │ └── pom.xml │ ├── budiot-access-processor │ │ ├── pom.xml │ │ └── src │ │ │ └── main │ │ │ ├── java │ │ │ └── com │ │ │ │ └── budwk │ │ │ │ └── app │ │ │ │ └── access │ │ │ │ └── processor │ │ │ │ ├── ProcessorLauncher.java │ │ │ │ ├── cache │ │ │ │ └── RedissionCacheStore.java │ │ │ │ ├── chain │ │ │ │ ├── AbstractDataProcessing.java │ │ │ │ ├── DataProcessing.java │ │ │ │ ├── DataProcessingChain.java │ │ │ │ ├── DeviceChainData.java │ │ │ │ └── impl │ │ │ │ │ ├── MeterBillProcess.java │ │ │ │ │ └── OtherProcess.java │ │ │ │ ├── core │ │ │ │ ├── Processor.java │ │ │ │ ├── ProcessorContext.java │ │ │ │ └── proc │ │ │ │ │ ├── DataProcessor.java │ │ │ │ │ └── SaveProcessor.java │ │ │ │ ├── protocol │ │ │ │ ├── LocalProtocolLoader.java │ │ │ │ ├── ProtolcolContainer.java │ │ │ │ └── impl │ │ │ │ │ ├── DefaultDecodeContext.java │ │ │ │ │ ├── DefaultDeviceEventContext.java │ │ │ │ │ ├── DefaultDeviceRegistry.java │ │ │ │ │ └── DefaultEncodeContext.java │ │ │ │ ├── support │ │ │ │ ├── DeviceOperatorSupport.java │ │ │ │ ├── NamedThreadFactory.java │ │ │ │ └── ThreadPoolSupport.java │ │ │ │ └── timer │ │ │ │ ├── DelayTaskHelper.java │ │ │ │ ├── SystemTimer.java │ │ │ │ ├── Timer.java │ │ │ │ ├── TimerTask.java │ │ │ │ ├── TimerTaskEntry.java │ │ │ │ ├── TimerTaskList.java │ │ │ │ ├── TimerThread.java │ │ │ │ ├── TimingWheel.java │ │ │ │ └── TimingWheelDelayTaskHelper.java │ │ │ └── resources │ │ │ ├── application-dev.yaml │ │ │ ├── application-psql.yaml │ │ │ └── application.yaml │ ├── budiot-access-protocol │ │ ├── budiot-access-protocol-core │ │ │ ├── pom.xml │ │ │ └── src │ │ │ │ └── main │ │ │ │ └── java │ │ │ │ └── com │ │ │ │ └── budwk │ │ │ │ └── app │ │ │ │ └── access │ │ │ │ └── protocol │ │ │ │ ├── codec │ │ │ │ ├── CacheStore.java │ │ │ │ ├── DeviceOperator.java │ │ │ │ ├── DeviceRegistry.java │ │ │ │ ├── MessageCodec.java │ │ │ │ ├── Protocol.java │ │ │ │ ├── ProtocolLoader.java │ │ │ │ ├── context │ │ │ │ │ ├── DecodeContext.java │ │ │ │ │ ├── DeviceContext.java │ │ │ │ │ ├── DeviceEventContext.java │ │ │ │ │ └── EncodeContext.java │ │ │ │ ├── exception │ │ │ │ │ ├── MessageCodecException.java │ │ │ │ │ └── UnSupportCommandException.java │ │ │ │ ├── impl │ │ │ │ │ ├── DefaultDeviceOperator.java │ │ │ │ │ └── GatewayDeviceOperatorImpl.java │ │ │ │ └── result │ │ │ │ │ ├── DecodeResult.java │ │ │ │ │ ├── DefaultDecodeResult.java │ │ │ │ │ ├── DefaultEncodeResult.java │ │ │ │ │ ├── DefaultResponseResult.java │ │ │ │ │ └── EncodeResult.java │ │ │ │ ├── device │ │ │ │ ├── CommandInfo.java │ │ │ │ ├── ProductInfo.java │ │ │ │ └── ValueItem.java │ │ │ │ ├── enums │ │ │ │ ├── MeaningState.java │ │ │ │ └── ValveState.java │ │ │ │ ├── message │ │ │ │ ├── DeviceDataMessage.java │ │ │ │ ├── DeviceEventMessage.java │ │ │ │ ├── DeviceMessage.java │ │ │ │ ├── DeviceResponseMessage.java │ │ │ │ └── codec │ │ │ │ │ ├── EncodedMessage.java │ │ │ │ │ ├── HttpMessage.java │ │ │ │ │ ├── MqttMessage.java │ │ │ │ │ ├── TcpMessage.java │ │ │ │ │ └── UdpMessage.java │ │ │ │ └── utils │ │ │ │ └── ByteConvertUtil.java │ │ ├── budiot-access-protocol-demo-aep │ │ │ ├── pom.xml │ │ │ └── src │ │ │ │ └── main │ │ │ │ └── java │ │ │ │ └── com │ │ │ │ └── budwk │ │ │ │ └── app │ │ │ │ └── access │ │ │ │ └── protocol │ │ │ │ └── demo │ │ │ │ ├── AepDemoProtocol.java │ │ │ │ ├── AepPlatformHelper.java │ │ │ │ ├── codec │ │ │ │ ├── DecodeProcessor.java │ │ │ │ ├── HttpMessageCodec.java │ │ │ │ └── aep │ │ │ │ │ └── AepMessageCodec.java │ │ │ │ ├── constants │ │ │ │ └── CacheKeyConstant.java │ │ │ │ └── enums │ │ │ │ └── Command.java │ │ ├── budiot-access-protocol-demo-tcp │ │ │ ├── pom.xml │ │ │ └── src │ │ │ │ └── main │ │ │ │ └── java │ │ │ │ └── com │ │ │ │ └── budwk │ │ │ │ └── app │ │ │ │ └── access │ │ │ │ └── protocol │ │ │ │ └── demo │ │ │ │ ├── DemoProtocol.java │ │ │ │ ├── codec │ │ │ │ ├── DecodeProcessor.java │ │ │ │ ├── DefaultMessageCodec.java │ │ │ │ └── EncodeProcessor.java │ │ │ │ └── enums │ │ │ │ └── Command.java │ │ └── pom.xml │ ├── budiot-access-storage │ │ ├── pom.xml │ │ └── src │ │ │ └── main │ │ │ └── java │ │ │ └── com │ │ │ └── budwk │ │ │ └── app │ │ │ └── access │ │ │ └── storage │ │ │ ├── DeviceCmdDataStorage.java │ │ │ ├── DeviceDataStorage.java │ │ │ ├── DeviceEventDataStorage.java │ │ │ ├── DeviceRawDataStorage.java │ │ │ └── impl │ │ │ ├── MongoDeviceCmdDataStorageImpl.java │ │ │ ├── MongoDeviceDataStorageImpl.java │ │ │ ├── MongoDeviceEventDataStorageImpl.java │ │ │ └── MongoDeviceRawDataStorageImpl.java │ ├── budiot-access-thirdparty │ │ ├── pom.xml │ │ └── src │ │ │ └── main │ │ │ └── java │ │ │ └── com │ │ │ └── budwk │ │ │ └── app │ │ │ └── access │ │ │ └── thirdparty │ │ │ └── aep │ │ │ ├── ApiCtwingLwm2mServiceClient.java │ │ │ ├── model │ │ │ ├── ApiResult.java │ │ │ ├── BaseRequest.java │ │ │ ├── CmdBody.java │ │ │ ├── CmdInfo.java │ │ │ ├── CreateCommandLwm2mProfileRequest.java │ │ │ ├── CreateCommandRequest.java │ │ │ ├── CreateDeviceRequest.java │ │ │ ├── DeleteDeviceRequest.java │ │ │ ├── DeviceInfo.java │ │ │ ├── RequestParams.java │ │ │ ├── UpdateDeviceInfo.java │ │ │ └── UpdateDeviceRequest.java │ │ │ └── utils │ │ │ └── AepHttpUtil.java │ └── pom.xml ├── budiot-common │ ├── pom.xml │ └── src │ │ └── main │ │ └── java │ │ └── com │ │ └── budwk │ │ └── app │ │ ├── cms │ │ ├── enums │ │ │ └── CmsChannelType.java │ │ ├── models │ │ │ ├── Cms_article.java │ │ │ ├── Cms_channel.java │ │ │ ├── Cms_class_link.java │ │ │ ├── Cms_link.java │ │ │ ├── Cms_link_class.java │ │ │ └── Cms_site.java │ │ └── services │ │ │ ├── CmsArticleService.java │ │ │ ├── CmsChannelService.java │ │ │ ├── CmsLinkClassService.java │ │ │ ├── CmsLinkService.java │ │ │ ├── CmsSiteService.java │ │ │ └── impl │ │ │ ├── CmsArticleServiceImpl.java │ │ │ ├── CmsChannelServiceImpl.java │ │ │ ├── CmsLinkClassServiceImpl.java │ │ │ ├── CmsLinkServiceImpl.java │ │ │ └── CmsSiteServiceImpl.java │ │ ├── iot │ │ ├── caches │ │ │ ├── DeviceCacheStore.java │ │ │ ├── ProductSubCacheStore.java │ │ │ └── impl │ │ │ │ ├── DeviceCacheStoreImpl.java │ │ │ │ └── ProductSubCacheStoreImpl.java │ │ ├── enums │ │ │ ├── DeviceAttrType.java │ │ │ ├── DeviceCmdStatus.java │ │ │ ├── DeviceDataType.java │ │ │ ├── DeviceEventType.java │ │ │ ├── DeviceType.java │ │ │ ├── DeviceValveState.java │ │ │ ├── IotPlatform.java │ │ │ ├── ProtocolType.java │ │ │ ├── SceneActionType.java │ │ │ ├── SceneTermType.java │ │ │ └── SubscribeType.java │ │ ├── models │ │ │ ├── Iot_classify.java │ │ │ ├── Iot_device.java │ │ │ ├── Iot_device_cmd.java │ │ │ ├── Iot_device_log.java │ │ │ ├── Iot_device_prop.java │ │ │ ├── Iot_product.java │ │ │ ├── Iot_product_attr.java │ │ │ ├── Iot_product_cmd.java │ │ │ ├── Iot_product_cmd_attr.java │ │ │ ├── Iot_product_dtu.java │ │ │ ├── Iot_product_event.java │ │ │ ├── Iot_product_firmware.java │ │ │ ├── Iot_product_firmware_device.java │ │ │ ├── Iot_product_menu.java │ │ │ ├── Iot_product_prop.java │ │ │ ├── Iot_product_sub.java │ │ │ ├── Iot_protocol.java │ │ │ ├── Iot_scene.java │ │ │ ├── Iot_scene_action.java │ │ │ ├── Iot_scene_space.java │ │ │ ├── Iot_scene_term.java │ │ │ └── Iot_supplier.java │ │ ├── objects │ │ │ ├── cache │ │ │ │ └── DeviceProcessCache.java │ │ │ └── dto │ │ │ │ └── ValueTextDTO.java │ │ └── services │ │ │ ├── IotClassifyService.java │ │ │ ├── IotDeviceCmdService.java │ │ │ ├── IotDeviceLogService.java │ │ │ ├── IotDevicePropService.java │ │ │ ├── IotDeviceService.java │ │ │ ├── IotProductAttrService.java │ │ │ ├── IotProductCmdAttrService.java │ │ │ ├── IotProductCmdService.java │ │ │ ├── IotProductDtuService.java │ │ │ ├── IotProductEventService.java │ │ │ ├── IotProductFirmwareDeviceService.java │ │ │ ├── IotProductFirmwareService.java │ │ │ ├── IotProductMenuService.java │ │ │ ├── IotProductPropService.java │ │ │ ├── IotProductService.java │ │ │ ├── IotProductSubService.java │ │ │ ├── IotProtocolService.java │ │ │ ├── IotSceneService.java │ │ │ ├── IotSceneSpaceService.java │ │ │ ├── IotSupplierService.java │ │ │ └── impl │ │ │ ├── IotClassifyServiceImpl.java │ │ │ ├── IotDeviceCmdServiceImpl.java │ │ │ ├── IotDeviceLogServiceImpl.java │ │ │ ├── IotDevicePropServiceImpl.java │ │ │ ├── IotDeviceServiceImpl.java │ │ │ ├── IotProductAttrServiceImpl.java │ │ │ ├── IotProductCmdAttrServiceImpl.java │ │ │ ├── IotProductCmdServiceImpl.java │ │ │ ├── IotProductDtuServiceImpl.java │ │ │ ├── IotProductEventServiceImpl.java │ │ │ ├── IotProductFirmwareDeviceServiceImpl.java │ │ │ ├── IotProductFirmwareServiceImpl.java │ │ │ ├── IotProductMenuServiceImpl.java │ │ │ ├── IotProductPropServiceImpl.java │ │ │ ├── IotProductServiceImpl.java │ │ │ ├── IotProductSubServiceImpl.java │ │ │ ├── IotProtocolServiceImpl.java │ │ │ ├── IotSceneServiceImpl.java │ │ │ ├── IotSceneSpaceServiceImpl.java │ │ │ └── IotSupplierServiceImpl.java │ │ └── sys │ │ ├── enums │ │ ├── SysConfigType.java │ │ ├── SysLeaderType.java │ │ ├── SysMsgScope.java │ │ ├── SysMsgType.java │ │ └── SysUnitType.java │ │ ├── models │ │ ├── Sys_app.java │ │ ├── Sys_area.java │ │ ├── Sys_config.java │ │ ├── Sys_dict.java │ │ ├── Sys_group.java │ │ ├── Sys_key.java │ │ ├── Sys_menu.java │ │ ├── Sys_msg.java │ │ ├── Sys_msg_user.java │ │ ├── Sys_post.java │ │ ├── Sys_role.java │ │ ├── Sys_role_app.java │ │ ├── Sys_role_menu.java │ │ ├── Sys_role_user.java │ │ ├── Sys_task.java │ │ ├── Sys_task_history.java │ │ ├── Sys_unit.java │ │ ├── Sys_unit_user.java │ │ ├── Sys_user.java │ │ ├── Sys_user_pwd.java │ │ └── Sys_user_security.java │ │ ├── providers │ │ ├── SysAuthProvider.java │ │ └── SysLogProvider.java │ │ └── services │ │ ├── SysAppService.java │ │ ├── SysAreaService.java │ │ ├── SysConfigService.java │ │ ├── SysDictService.java │ │ ├── SysGroupService.java │ │ ├── SysKeyService.java │ │ ├── SysLogService.java │ │ ├── SysMenuService.java │ │ ├── SysMsgService.java │ │ ├── SysMsgUserService.java │ │ ├── SysPostService.java │ │ ├── SysRoleAppService.java │ │ ├── SysRoleMenuService.java │ │ ├── SysRoleService.java │ │ ├── SysTaskHistoryService.java │ │ ├── SysTaskService.java │ │ ├── SysUnitService.java │ │ ├── SysUnitUserService.java │ │ ├── SysUserPwdService.java │ │ ├── SysUserSecurityService.java │ │ ├── SysUserService.java │ │ └── impl │ │ ├── SysAppServiceImpl.java │ │ ├── SysAreaServiceImpl.java │ │ ├── SysConfigServiceImpl.java │ │ ├── SysDictServiceImpl.java │ │ ├── SysGroupServiceImpl.java │ │ ├── SysKeyServiceImpl.java │ │ ├── SysLogServiceImpl.java │ │ ├── SysMenuServiceImpl.java │ │ ├── SysMsgServiceImpl.java │ │ ├── SysMsgUserServiceImpl.java │ │ ├── SysPostServiceImpl.java │ │ ├── SysRoleAppServiceImpl.java │ │ ├── SysRoleMenuServiceImpl.java │ │ ├── SysRoleServiceImpl.java │ │ ├── SysTaskHistoryServiceImpl.java │ │ ├── SysTaskServiceImpl.java │ │ ├── SysUnitServiceImpl.java │ │ ├── SysUnitUserServiceImpl.java │ │ ├── SysUserPwdServiceImpl.java │ │ ├── SysUserSecurityServiceImpl.java │ │ └── SysUserServiceImpl.java ├── budiot-server │ ├── pom.xml │ └── src │ │ └── main │ │ ├── java │ │ └── com │ │ │ └── budwk │ │ │ └── app │ │ │ ├── WebMainLauncher.java │ │ │ ├── cms │ │ │ └── controllers │ │ │ │ └── admin │ │ │ │ ├── CmsArticleController.java │ │ │ │ ├── CmsChannelController.java │ │ │ │ ├── CmsLinkClassController.java │ │ │ │ ├── CmsLinkController.java │ │ │ │ └── CmsSiteController.java │ │ │ ├── iot │ │ │ ├── commons │ │ │ │ └── task │ │ │ │ │ ├── DeviceOfflineJob.java │ │ │ │ │ └── DeviceTableJob.java │ │ │ └── controllers │ │ │ │ ├── admin │ │ │ │ ├── IotClassifyController.java │ │ │ │ ├── IotDeviceController.java │ │ │ │ ├── IotProductController.java │ │ │ │ ├── IotProductDeviceController.java │ │ │ │ ├── IotProductDtuController.java │ │ │ │ ├── IotProductFirmwareController.java │ │ │ │ ├── IotProductSubController.java │ │ │ │ ├── IotProtocolController.java │ │ │ │ ├── IotSceneController.java │ │ │ │ ├── IotSceneSpaceController.java │ │ │ │ └── IotSupplierController.java │ │ │ │ └── pub │ │ │ │ ├── ApiOpenluatController.java │ │ │ │ └── PubCommonController.java │ │ │ ├── sys │ │ │ ├── commons │ │ │ │ ├── oshi │ │ │ │ │ └── OshiServer.java │ │ │ │ └── task │ │ │ │ │ ├── NutConnectionProvider.java │ │ │ │ │ ├── TaskHistory.java │ │ │ │ │ ├── TaskJob.java │ │ │ │ │ ├── TaskServer.java │ │ │ │ │ └── job │ │ │ │ │ └── TestJob.java │ │ │ └── controllers │ │ │ │ ├── pub │ │ │ │ ├── PubAreaController.java │ │ │ │ ├── PubFileController.java │ │ │ │ └── PusUserSelectController.java │ │ │ │ └── sys │ │ │ │ ├── SysAppController.java │ │ │ │ ├── SysAreaController.java │ │ │ │ ├── SysDictController.java │ │ │ │ ├── SysHomeController.java │ │ │ │ ├── SysKeyController.java │ │ │ │ ├── SysLogController.java │ │ │ │ ├── SysMenuController.java │ │ │ │ ├── SysMonitorController.java │ │ │ │ ├── SysMsgController.java │ │ │ │ ├── SysParamController.java │ │ │ │ ├── SysPostController.java │ │ │ │ ├── SysRoleController.java │ │ │ │ ├── SysSecurityController.java │ │ │ │ ├── SysTaskController.java │ │ │ │ ├── SysUnitController.java │ │ │ │ └── SysUserController.java │ │ │ └── uc │ │ │ ├── controllers │ │ │ └── AuthController.java │ │ │ └── services │ │ │ ├── AuthService.java │ │ │ ├── ValidateService.java │ │ │ └── impl │ │ │ ├── AuthServiceImpl.java │ │ │ └── ValidateServiceImpl.java │ │ └── resources │ │ ├── application-dev.yaml │ │ ├── application-psql.yaml │ │ ├── application.yaml │ │ ├── db │ │ ├── 00_sys_menu.sql │ │ ├── 01_cms_menu.sql │ │ └── 03_sys_area.sql │ │ └── quartz │ │ ├── dm.sql │ │ ├── dm_mysql.sql │ │ ├── mysql.sql │ │ ├── oracle.sql │ │ ├── psql.sql │ │ └── sqlserver.sql └── pom.xml ├── budiot-vue-admin ├── .editorconfig ├── .env ├── .env.development ├── .env.production ├── .eslintignore ├── .eslintrc-auto-import.json ├── .eslintrc.js ├── .prettierrc.js ├── README.md ├── env.d.ts ├── index.html ├── package.json ├── public │ ├── favicon.ico │ └── tpl │ │ ├── template_product_attr.xlsx │ │ ├── template_product_cmd.json │ │ ├── template_product_device.xlsx │ │ └── template_product_firmware_device.xlsx ├── src │ ├── App.vue │ ├── api │ │ ├── common.ts │ │ ├── platform │ │ │ ├── cms │ │ │ │ ├── article.ts │ │ │ │ ├── channel.ts │ │ │ │ ├── link.ts │ │ │ │ ├── linkclass.ts │ │ │ │ └── site.ts │ │ │ ├── home │ │ │ │ ├── msg.ts │ │ │ │ └── user.ts │ │ │ ├── iot │ │ │ │ ├── classify.ts │ │ │ │ ├── common.ts │ │ │ │ ├── device.ts │ │ │ │ ├── product.ts │ │ │ │ ├── protocol.ts │ │ │ │ ├── scene.ts │ │ │ │ └── supplier.ts │ │ │ ├── pub │ │ │ │ └── user.ts │ │ │ ├── sys │ │ │ │ ├── app.ts │ │ │ │ ├── area.ts │ │ │ │ ├── dict.ts │ │ │ │ ├── key.ts │ │ │ │ ├── log.ts │ │ │ │ ├── menu.ts │ │ │ │ ├── monitor.ts │ │ │ │ ├── msg.ts │ │ │ │ ├── param.ts │ │ │ │ ├── post.ts │ │ │ │ ├── role.ts │ │ │ │ ├── security.ts │ │ │ │ ├── task.ts │ │ │ │ ├── unit.ts │ │ │ │ └── user.ts │ │ │ └── wechat │ │ │ │ ├── account.ts │ │ │ │ ├── file.ts │ │ │ │ ├── mass.ts │ │ │ │ ├── menu.ts │ │ │ │ ├── mina.ts │ │ │ │ ├── msg.ts │ │ │ │ ├── pay.ts │ │ │ │ ├── reply_conf.ts │ │ │ │ ├── reply_img.ts │ │ │ │ ├── reply_news.ts │ │ │ │ ├── reply_txt.ts │ │ │ │ ├── tpl_id.ts │ │ │ │ ├── tpl_list.ts │ │ │ │ ├── tpl_log.ts │ │ │ │ └── user.ts │ │ └── ucenter │ │ │ └── auth.ts │ ├── assets │ │ ├── fonts │ │ │ ├── fontawesome-webfont.eot │ │ │ ├── fontawesome-webfont.svg │ │ │ ├── fontawesome-webfont.ttf │ │ │ ├── fontawesome-webfont.woff │ │ │ └── fontawesome-webfont.woff2 │ │ ├── icons │ │ │ └── svg │ │ │ │ ├── 404.svg │ │ │ │ ├── bell.svg │ │ │ │ ├── bug.svg │ │ │ │ ├── build.svg │ │ │ │ ├── button.svg │ │ │ │ ├── cascader.svg │ │ │ │ ├── chart.svg │ │ │ │ ├── checkbox.svg │ │ │ │ ├── clipboard.svg │ │ │ │ ├── code.svg │ │ │ │ ├── color.svg │ │ │ │ ├── component.svg │ │ │ │ ├── dark.svg │ │ │ │ ├── dashboard.svg │ │ │ │ ├── date-range.svg │ │ │ │ ├── date.svg │ │ │ │ ├── dict.svg │ │ │ │ ├── documentation.svg │ │ │ │ ├── download.svg │ │ │ │ ├── drag.svg │ │ │ │ ├── druid.svg │ │ │ │ ├── edit.svg │ │ │ │ ├── education.svg │ │ │ │ ├── email.svg │ │ │ │ ├── example.svg │ │ │ │ ├── excel.svg │ │ │ │ ├── eye-open.svg │ │ │ │ ├── eye.svg │ │ │ │ ├── fontsize.svg │ │ │ │ ├── form.svg │ │ │ │ ├── full-screen-cancel.svg │ │ │ │ ├── full-screen.svg │ │ │ │ ├── github.svg │ │ │ │ ├── guide.svg │ │ │ │ ├── icon.svg │ │ │ │ ├── input.svg │ │ │ │ ├── international.svg │ │ │ │ ├── job.svg │ │ │ │ ├── lang.svg │ │ │ │ ├── language.svg │ │ │ │ ├── light.svg │ │ │ │ ├── line-md.svg │ │ │ │ ├── link.svg │ │ │ │ ├── list.svg │ │ │ │ ├── lock.svg │ │ │ │ ├── log.svg │ │ │ │ ├── logininfor.svg │ │ │ │ ├── message.svg │ │ │ │ ├── money.svg │ │ │ │ ├── monitor.svg │ │ │ │ ├── nested.svg │ │ │ │ ├── number.svg │ │ │ │ ├── online.svg │ │ │ │ ├── password.svg │ │ │ │ ├── pdf.svg │ │ │ │ ├── people.svg │ │ │ │ ├── peoples.svg │ │ │ │ ├── phone.svg │ │ │ │ ├── post.svg │ │ │ │ ├── qq.svg │ │ │ │ ├── question.svg │ │ │ │ ├── radio.svg │ │ │ │ ├── rate.svg │ │ │ │ ├── redis-list.svg │ │ │ │ ├── redis.svg │ │ │ │ ├── reload.svg │ │ │ │ ├── row.svg │ │ │ │ ├── search.svg │ │ │ │ ├── select.svg │ │ │ │ ├── server.svg │ │ │ │ ├── settings.svg │ │ │ │ ├── shopping.svg │ │ │ │ ├── skill.svg │ │ │ │ ├── slider.svg │ │ │ │ ├── star.svg │ │ │ │ ├── swagger.svg │ │ │ │ ├── switch.svg │ │ │ │ ├── system.svg │ │ │ │ ├── tab.svg │ │ │ │ ├── table.svg │ │ │ │ ├── terminal.svg │ │ │ │ ├── textarea.svg │ │ │ │ ├── theme.svg │ │ │ │ ├── time-range.svg │ │ │ │ ├── time.svg │ │ │ │ ├── tool.svg │ │ │ │ ├── tree-table.svg │ │ │ │ ├── tree.svg │ │ │ │ ├── upload.svg │ │ │ │ ├── user.svg │ │ │ │ ├── validCode.svg │ │ │ │ ├── wechat.svg │ │ │ │ └── zip.svg │ │ ├── images │ │ │ ├── alipay.png │ │ │ ├── alipay.svg │ │ │ ├── avatar.png │ │ │ ├── banner.jpg │ │ │ ├── bg-dark.jpg │ │ │ ├── bg.jpg │ │ │ ├── dark.svg │ │ │ ├── light.svg │ │ │ ├── login_bg.svg │ │ │ ├── logo.png │ │ │ ├── logo.svg │ │ │ ├── logo_white.svg │ │ │ ├── qq.svg │ │ │ ├── wechat.svg │ │ │ └── wxpay.png │ │ ├── index │ │ │ └── index-cover.svg │ │ └── styles │ │ │ ├── base.scss │ │ │ ├── btn.scss │ │ │ ├── element-ui.scss │ │ │ ├── font-awesome.min.css │ │ │ ├── index.scss │ │ │ ├── loading.scss │ │ │ ├── mixin.scss │ │ │ ├── sidebar.scss │ │ │ ├── transition.scss │ │ │ └── variables.module.scss │ ├── components │ │ ├── AppSelect │ │ │ └── index.vue │ │ ├── Breadcrumb │ │ │ └── index.vue │ │ ├── CronTab │ │ │ ├── Crontab-Day.vue │ │ │ ├── Crontab-Hour.vue │ │ │ ├── Crontab-Min.vue │ │ │ ├── Crontab-Mouth.vue │ │ │ ├── Crontab-Result.vue │ │ │ ├── Crontab-Second.vue │ │ │ ├── Crontab-Week.vue │ │ │ ├── Crontab-Year.vue │ │ │ └── index.vue │ │ ├── Export │ │ │ └── index.vue │ │ ├── Hamburger │ │ │ └── index.vue │ │ ├── HeaderSearch │ │ │ └── index.vue │ │ ├── Icon │ │ │ ├── index.vue │ │ │ └── svg │ │ │ │ ├── index.ts │ │ │ │ └── index.vue │ │ ├── IconSelect │ │ │ ├── index.vue │ │ │ └── requireIcons │ │ ├── Import │ │ │ └── index.vue │ │ ├── Notice │ │ │ └── index.vue │ │ ├── Pagination │ │ │ └── index.vue │ │ ├── ProIconSelect │ │ │ └── index.vue │ │ ├── ProTableList │ │ │ └── index.vue │ │ ├── Reload │ │ │ └── index.vue │ │ ├── RightToolbar │ │ │ └── index.vue │ │ ├── Screenfull │ │ │ └── index.vue │ │ ├── SizeSelect │ │ │ └── index.vue │ │ ├── SvgIcon │ │ │ ├── index.vue │ │ │ └── svgicon.js │ │ └── UserSelect │ │ │ └── index.vue │ ├── directive │ │ └── directives.ts │ ├── lang │ │ ├── globs-en.ts │ │ ├── globs-zh-cn.ts │ │ ├── index.ts │ │ └── pages │ │ │ ├── en │ │ │ ├── 401.ts │ │ │ ├── 404.ts │ │ │ ├── axios.ts │ │ │ ├── pagesTitle.ts │ │ │ ├── utils.ts │ │ │ └── validate.ts │ │ │ └── zh-cn │ │ │ ├── 401.ts │ │ │ ├── 404.ts │ │ │ ├── axios.ts │ │ │ ├── pagesTitle.ts │ │ │ ├── utils.ts │ │ │ └── validate.ts │ ├── layouts │ │ ├── default.vue │ │ └── platform │ │ │ ├── components │ │ │ ├── AppMain │ │ │ │ └── index.vue │ │ │ ├── IframeToggle │ │ │ │ └── index.vue │ │ │ ├── InnerLink │ │ │ │ └── index.vue │ │ │ ├── Loading │ │ │ │ └── index.vue │ │ │ ├── Navbar │ │ │ │ └── index.vue │ │ │ ├── Settings │ │ │ │ └── index.vue │ │ │ ├── Sidebar │ │ │ │ ├── Index.vue │ │ │ │ ├── Link.vue │ │ │ │ ├── Logo.vue │ │ │ │ └── SidebarItem.vue │ │ │ ├── TagsView │ │ │ │ └── index.vue │ │ │ ├── TopNav │ │ │ │ └── index.vue │ │ │ └── index.ts │ │ │ └── index.vue │ ├── main.ts │ ├── plugins │ │ ├── auto-import.d.ts │ │ ├── auto-import.ts │ │ ├── compression.ts │ │ ├── index.ts │ │ ├── layouts.ts │ │ ├── pages.ts │ │ ├── setup-extend.ts │ │ └── svg-icon.ts │ ├── router │ │ ├── index.ts │ │ └── static.ts │ ├── stores │ │ ├── client.ts │ │ ├── constant │ │ │ └── cacheKey.ts │ │ ├── index.ts │ │ ├── interface │ │ │ └── index.ts │ │ ├── platformInfo.ts │ │ ├── tagsView.ts │ │ ├── userInfo.ts │ │ ├── userSettings.ts │ │ └── userViews.ts │ ├── utils │ │ ├── build.ts │ │ ├── common.ts │ │ ├── download.ts │ │ ├── horizontalScroll.ts │ │ ├── iconfont.ts │ │ ├── loading.ts │ │ ├── modal.ts │ │ ├── pageBubble.ts │ │ ├── pageShade.ts │ │ ├── random.ts │ │ ├── request.ts │ │ ├── scroll-to.ts │ │ ├── storage.ts │ │ ├── tag.ts │ │ ├── theme.ts │ │ ├── useCurrentInstance.ts │ │ ├── validate.ts │ │ └── vite.ts │ └── views │ │ ├── common │ │ └── error │ │ │ ├── 401.vue │ │ │ └── 404.vue │ │ ├── platform │ │ ├── dashboard.vue │ │ ├── home │ │ │ ├── msg │ │ │ │ └── index.vue │ │ │ └── user │ │ │ │ ├── index.vue │ │ │ │ ├── resetPwd.vue │ │ │ │ ├── userAvatar.vue │ │ │ │ └── userLog.vue │ │ ├── iot │ │ │ ├── config │ │ │ │ ├── classify │ │ │ │ │ └── index.vue │ │ │ │ ├── protocol │ │ │ │ │ └── index.vue │ │ │ │ └── supplier │ │ │ │ │ └── index.vue │ │ │ └── device │ │ │ │ ├── device │ │ │ │ ├── detail │ │ │ │ │ ├── base.vue │ │ │ │ │ ├── cmd.vue │ │ │ │ │ ├── data.vue │ │ │ │ │ ├── event.vue │ │ │ │ │ ├── head.vue │ │ │ │ │ ├── index.vue │ │ │ │ │ └── raw.vue │ │ │ │ └── index.vue │ │ │ │ ├── product │ │ │ │ ├── command │ │ │ │ │ └── index.vue │ │ │ │ ├── config │ │ │ │ │ ├── deviceAttr.vue │ │ │ │ │ ├── deviceCmd.vue │ │ │ │ │ ├── deviceEvent.vue │ │ │ │ │ ├── deviceProp.vue │ │ │ │ │ ├── index.vue │ │ │ │ │ └── productMenu.vue │ │ │ │ ├── detail │ │ │ │ │ └── index.vue │ │ │ │ ├── device │ │ │ │ │ └── index.vue │ │ │ │ ├── dtuparam │ │ │ │ │ └── index.vue │ │ │ │ ├── event │ │ │ │ │ └── index.vue │ │ │ │ ├── firmware │ │ │ │ │ └── index.vue │ │ │ │ ├── head.vue │ │ │ │ ├── id.vue │ │ │ │ ├── index.vue │ │ │ │ └── subscribe │ │ │ │ │ └── index.vue │ │ │ │ └── scene │ │ │ │ ├── index.vue │ │ │ │ └── scene.vue │ │ ├── login.vue │ │ ├── sys │ │ │ ├── app │ │ │ │ └── index.vue │ │ │ ├── area │ │ │ │ └── index.vue │ │ │ ├── dict │ │ │ │ └── index.vue │ │ │ ├── key │ │ │ │ └── index.vue │ │ │ ├── log │ │ │ │ └── index.vue │ │ │ ├── menu │ │ │ │ └── index.vue │ │ │ ├── monitor │ │ │ │ └── index.vue │ │ │ ├── msg │ │ │ │ └── index.vue │ │ │ ├── param │ │ │ │ └── index.vue │ │ │ ├── post │ │ │ │ └── index.vue │ │ │ ├── role │ │ │ │ └── index.vue │ │ │ ├── security │ │ │ │ └── index.vue │ │ │ ├── server │ │ │ │ └── index.vue │ │ │ ├── task │ │ │ │ ├── CronInput.vue │ │ │ │ └── index.vue │ │ │ ├── test │ │ │ │ └── index.vue │ │ │ ├── unit │ │ │ │ └── index.vue │ │ │ └── user │ │ │ │ └── index.vue │ │ └── wechat │ │ │ ├── conf │ │ │ ├── account │ │ │ │ └── index.vue │ │ │ ├── menu │ │ │ │ └── index.vue │ │ │ ├── mina │ │ │ │ └── index.vue │ │ │ └── pay │ │ │ │ └── index.vue │ │ │ ├── msg │ │ │ ├── mass │ │ │ │ ├── index.vue │ │ │ │ └── news.vue │ │ │ └── user │ │ │ │ └── index.vue │ │ │ ├── reply │ │ │ ├── conf │ │ │ │ └── index.vue │ │ │ ├── img │ │ │ │ └── index.vue │ │ │ ├── news │ │ │ │ └── index.vue │ │ │ └── txt │ │ │ │ └── index.vue │ │ │ ├── tpl │ │ │ ├── id │ │ │ │ └── index.vue │ │ │ ├── list │ │ │ │ └── index.vue │ │ │ └── log │ │ │ │ └── index.vue │ │ │ └── user │ │ │ └── index.vue │ │ └── redirect │ │ └── index.vue ├── tsconfig.json ├── types │ ├── global.d.ts │ └── module.d.ts └── vite.config.ts └── init ├── budiot.com.conf ├── budiot.sql └── demo.budiot.com.conf /.gitignore: -------------------------------------------------------------------------------- 1 | # Compiled class file 2 | *.class 3 | 4 | # Log file 5 | *.log 6 | 7 | # BlueJ files 8 | *.ctxt 9 | 10 | # Mobile Tools for Java (J2ME) 11 | .mtj.tmp/ 12 | 13 | # Package Files # 14 | *.jar 15 | *.war 16 | *.nar 17 | *.ear 18 | *.zip 19 | *.tar.gz 20 | *.rar 21 | 22 | # virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml 23 | hs_err_pid* 24 | replay_pid* 25 | .DS_Store 26 | *.iml 27 | node_modules 28 | .idea/ 29 | .DS_Store 30 | ._.DS_Store 31 | **/.DS_Store 32 | **/._.DS_Store 33 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Custom License 2 | 3 | 本项目(Budiot)的开源版本仅限用于个人或自用项目,如无作者授权,禁止售卖源代码或用于商业项目。 4 | 5 | 如有违反,作者保留依法追究责任的权利。 -------------------------------------------------------------------------------- /budiot-docs/.npmignore: -------------------------------------------------------------------------------- 1 | pids 2 | logs 3 | node_modules 4 | npm-debug.log 5 | coverage/ 6 | run 7 | dist 8 | .DS_Store 9 | .nyc_output 10 | .basement 11 | config.local.js 12 | basement_dist 13 | -------------------------------------------------------------------------------- /budiot-docs/README.md: -------------------------------------------------------------------------------- 1 | # budiot-docs 说明文档 / Documentation 2 | 3 | ## 安装运行 / Installation and Running 4 | 5 | `npm install -D vuepress` 6 | 7 | `npm run dev` 8 | 9 | ## 多语言支持 / Multilingual Support 10 | 11 | 本文档支持中文和英文两种语言,可以在网站上切换语言。 12 | 13 | This documentation supports both Chinese and English languages, which can be switched on the website. -------------------------------------------------------------------------------- /budiot-docs/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "budiot-docs", 3 | "version": "0.0.1", 4 | "description": "", 5 | "main": "index.js", 6 | "authors": { 7 | "name": "wizzer", 8 | "email": "wizzer.cn@gmail.com" 9 | }, 10 | "repository": "/budiot-docs", 11 | "scripts": { 12 | "dev": "vuepress dev src", 13 | "build": "export NODE_OPTIONS=--openssl-legacy-provider && vuepress build src --no-cache", 14 | "clean": "rm -rf node_modules/.cache && rm -rf .vuepress/dist" 15 | }, 16 | "license": "MIT", 17 | "devDependencies": { 18 | "vuepress": "^1.9.10" 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /budiot-docs/src/.vuepress/components/Foo/Bar.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 16 | -------------------------------------------------------------------------------- /budiot-docs/src/.vuepress/components/OtherComponent.vue: -------------------------------------------------------------------------------- 1 | 4 | -------------------------------------------------------------------------------- /budiot-docs/src/.vuepress/components/demo-component.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 16 | -------------------------------------------------------------------------------- /budiot-docs/src/.vuepress/enhanceApp.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Client app enhancement file. 3 | * 4 | * https://v1.vuepress.vuejs.org/guide/basic-config.html#app-level-enhancements 5 | */ 6 | 7 | export default ({ 8 | Vue, // the version of Vue being used in the VuePress app 9 | options, // the options for the root Vue instance 10 | router, // the router instance for the app 11 | siteData // site metadata 12 | }) => { 13 | // 确保在客户端环境下执行 14 | if (typeof window !== 'undefined') { 15 | // 等待 DOM 完全加载 16 | window.addEventListener('DOMContentLoaded', () => { 17 | // 延迟执行以确保 DOM 已经准备好 18 | setTimeout(() => { 19 | try { 20 | // 移除服务端渲染标记 21 | const app = document.getElementById('app') 22 | if (app && app.hasAttribute('data-server-rendered')) { 23 | app.removeAttribute('data-server-rendered') 24 | } 25 | 26 | // 确保所有 Vue 组件都已挂载 27 | if (Vue && Vue.prototype) { 28 | Vue.prototype.$nextTick(() => { 29 | // 在这里可以添加任何必要的 DOM 操作 30 | }) 31 | } 32 | } catch (error) { 33 | console.error('DOM operation error:', error) 34 | } 35 | }, 0) 36 | }) 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /budiot-docs/src/.vuepress/public/01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/budwk/budiot/41664a2ec56a1911a7edb01d39711cd60abc5a0f/budiot-docs/src/.vuepress/public/01.png -------------------------------------------------------------------------------- /budiot-docs/src/.vuepress/public/02.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/budwk/budiot/41664a2ec56a1911a7edb01d39711cd60abc5a0f/budiot-docs/src/.vuepress/public/02.png -------------------------------------------------------------------------------- /budiot-docs/src/.vuepress/public/banner.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/budwk/budiot/41664a2ec56a1911a7edb01d39711cd60abc5a0f/budiot-docs/src/.vuepress/public/banner.jpg -------------------------------------------------------------------------------- /budiot-docs/src/.vuepress/public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/budwk/budiot/41664a2ec56a1911a7edb01d39711cd60abc5a0f/budiot-docs/src/.vuepress/public/favicon.ico -------------------------------------------------------------------------------- /budiot-docs/src/.vuepress/styles/index.styl: -------------------------------------------------------------------------------- 1 | /** 2 | * Custom Styles here. 3 | * 4 | * ref:https://v1.vuepress.vuejs.org/config/#index-styl 5 | */ 6 | 7 | .home .hero img 8 | max-width 450px!important 9 | -------------------------------------------------------------------------------- /budiot-docs/src/.vuepress/styles/palette.styl: -------------------------------------------------------------------------------- 1 | /** 2 | * Custom palette here. 3 | * 4 | * ref:https://v1.vuepress.vuejs.org/zh/config/#palette-styl 5 | */ 6 | 7 | $accentColor = #3eaf7c 8 | $textColor = #2c3e50 9 | $borderColor = #eaecef 10 | $codeBgColor = #282c34 11 | -------------------------------------------------------------------------------- /budiot-docs/src/config/README.md: -------------------------------------------------------------------------------- 1 | --- 2 | sidebar: auto 3 | --- 4 | 5 | # Config 6 | 7 | ## foo 8 | 9 | - Type: `string` 10 | - Default: `/` 11 | 12 | ## bar 13 | 14 | - Type: `string` 15 | - Default: `/` 16 | -------------------------------------------------------------------------------- /budiot-docs/src/guide/deploy.md: -------------------------------------------------------------------------------- 1 | # 打包部署 2 | 3 | ## 后端打包 4 | 5 | ### 安装依赖 6 | * `budiot-java-server` 目录下执行 `mvn install` 7 | 8 | ### 项目打包 9 | 10 | * `budiot-java-server/budiot-access/budiot-access-gateway` 11 | 12 | 目录下执行 `mvn package nutzboot:shade -Dmaven.test.skip=true` 13 | 14 | * `budiot-java-server/budiot-access/budiot-access-processor` 15 | 16 | 目录下执行 `mvn package nutzboot:shade -Dmaven.test.skip=true` 17 | 18 | 19 | * `budiot-java-server/budiot-server` 20 | 21 | 目录下执行 `mvn package nutzboot:shade -Dmaven.test.skip=true` 22 | 23 | ### 项目运行 24 | 25 | 26 | * 使用默认配置文件 27 | 28 | `nohup java -jar budiot.jar >/dev/null 2>&1 &` 29 | 30 | * 指定jar中配置文件 31 | 32 | `nohup java -jar -Dnutz.profiles.active=pro -Xmx450m budiot.jar >/dev/null 2>&1 &` 33 | 34 | * 加载文件夹中配置文件 35 | 36 | `nohup java -jar -Dnutz.boot.configure.yaml.dir=/data/blend/ -Xmx450m budiot.jar >/dev/null 2>&1 &` 37 | 38 | 39 | ## 前端打包 40 | 41 | `pnpm run build` 42 | 43 | ## nginx部署 44 | 45 | * 详见源码 `init` 目录下的 `demo.budiot.com.conf` 配置文件 -------------------------------------------------------------------------------- /budiot-docs/src/guide/more.md: -------------------------------------------------------------------------------- 1 | # 内容编写中 2 | 3 | ## 敬请期待 -------------------------------------------------------------------------------- /budiot-docs/src/index.md: -------------------------------------------------------------------------------- 1 | --- 2 | home: true 3 | tagline: BudIoT 物联网设备接入平台 4 | actionText: 快速上手 → 5 | actionLink: /guide/ 6 | features: 7 | - title: 轻架构 8 | details: 采用自研开源 BudWk 框架,结构清晰、代码简单、学习成本低 9 | - title: 高性能 10 | details: 架构水平扩容,支持百万设备连接,支持数十万级数据并发 11 | - title: 易扩展 12 | details: 采用 RocketMQ、MongoDB 时序数据集合、Redis 缓存等技术,消息中间件可选 RabbitMQ、Kafka,时序数据库可选 TDEngine、ClickHouse 等 13 | - title: 多协议 14 | details: 支持 TCP、UDP、MQTT、HTTP 等多种网络协议,支持 AEP、OneNet 等物联网平台接入,支持各类设备协议自定义开发 15 | - title: 便部署 16 | details: 采用前后端分离模式开发,后端 Java 微服务支持单机或集群模式、容器化等多种部署方式 17 | - title: 低成本 18 | details: 特别适合数十万级、百万级设备的接入和管理,具有极大的灵活性可根据客户需求定制开发各种功能 19 | footer: 2024-present © budiot.com | 皖ICP备15001937号-5 | 皖公网安备34019202002371 | 软著登记号 2025SR0597839 20 | --- 21 | -------------------------------------------------------------------------------- /budiot-java-server/README.md: -------------------------------------------------------------------------------- 1 | # BudIot 单应用版本 2 | 3 | ## 编译打包 4 | 5 | * `mvn package nutzboot:shade` 6 | 7 | * `mvn package nutzboot:shade -Dmaven.test.skip=true ` 8 | 9 | ## 部署运行 10 | 11 | * 默认配置 12 | 13 | `nohup java -jar budiot.jar >/dev/null 2>&1 &` 14 | 15 | * 指定jar中配置 16 | 17 | `nohup java -jar -Dnutz.profiles.active=pro -Xmx450m budiot.jar >/dev/null 2>&1 &` 18 | 19 | * 加载文件夹中配置 20 | 21 | `nohup java -jar -Dnutz.boot.configure.yaml.dir=/data/blend/ -Xmx450m budiot.jar >/dev/null 2>&1 &` 22 | 23 | ## RocketMQ 启动(或选择 RabbitMQ) 24 | 25 | * 启动服务 26 | `./mqnamesrv` 27 | 28 | * 启动 broker(集群部署不要设置 autoCreateTopicEnable=true) 29 | `./mqbroker -n localhost:9876 autoCreateTopicEnable=true` 30 | 31 | * 生产环境(集群部署)创建 topic 32 | `./mqadmin updatetopic -n localhost:9876 -t DemoTopic -c DefaultCluster -r 10 -w 10` 33 | 34 | ## MongoDB 启动 35 | 36 | * 创建好数据文件夹 37 | `mkdir -p /Users/wizzer/data/mongo` 38 | 39 | * 启动 MongoDB 40 | `mongod --dbpath /Users/wizzer/data/mongo` -------------------------------------------------------------------------------- /budiot-java-server/budiot-access/budiot-access-common/src/main/java/com/budwk/app/access/constants/TopicConstant.java: -------------------------------------------------------------------------------- 1 | package com.budwk.app.access.constants; 2 | 3 | public class TopicConstant { 4 | // 消息上行队列topic 5 | public static final String DEVICE_DATA_UP = "device_data_up"; 6 | // 指令下行队列topic 7 | public static final String DEVICE_CMD_DOWN = "device_cmd_down"; 8 | // 设备事件topic 9 | public static final String DEVICE_EVENT = "device_event"; 10 | // 指令发送topic 11 | public static final String DEVICE_CMD_TRIGGER = "device_cmd_trigger"; 12 | // 业务处理器topic 13 | public static final String DEVICE_DATA_PROCESSOR = "device_data_processor"; 14 | // 设备告警topic 15 | public static final String DEVICE_DATA_ALARM = "device_data_alarm"; 16 | } 17 | -------------------------------------------------------------------------------- /budiot-java-server/budiot-access/budiot-access-common/src/main/java/com/budwk/app/access/enums/TransportType.java: -------------------------------------------------------------------------------- 1 | package com.budwk.app.access.enums; 2 | 3 | public enum TransportType { 4 | TCP, 5 | UDP, 6 | HTTP, 7 | MQTT, 8 | MODBUS 9 | } 10 | -------------------------------------------------------------------------------- /budiot-java-server/budiot-access/budiot-access-common/src/main/java/com/budwk/app/access/objects/dto/DeviceAttributeDTO.java: -------------------------------------------------------------------------------- 1 | package com.budwk.app.access.objects.dto; 2 | 3 | import lombok.Data; 4 | 5 | import java.io.Serializable; 6 | 7 | /** 8 | * 设备参数 9 | */ 10 | @Data 11 | public class DeviceAttributeDTO implements Serializable { 12 | private static final long serialVersionUID = 1L; 13 | //参数名 14 | private String name; 15 | //标识符 16 | private String code; 17 | //数据类型 18 | private Integer dataType; 19 | //小数位 20 | private Integer scale; 21 | //单位 22 | private String unit; 23 | } 24 | -------------------------------------------------------------------------------- /budiot-java-server/budiot-access/budiot-access-common/src/main/java/com/budwk/app/access/objects/dto/DeviceCmdDTO.java: -------------------------------------------------------------------------------- 1 | package com.budwk.app.access.objects.dto; 2 | 3 | import lombok.Data; 4 | 5 | import java.io.Serializable; 6 | import java.util.Map; 7 | 8 | @Data 9 | public class DeviceCmdDTO implements Serializable { 10 | private static final long serialVersionUID = 1L; 11 | private Long ts; 12 | 13 | private String cmdId; 14 | 15 | private String deviceId; 16 | 17 | private String productId; 18 | 19 | private String deviceNo; 20 | 21 | private String code; 22 | 23 | private Map params; 24 | 25 | private Integer serialNo; 26 | 27 | private Integer status; 28 | 29 | private Long createTime; 30 | 31 | private Long sendTime; 32 | 33 | private Long finishTime; 34 | 35 | private String respResult; 36 | 37 | private String id; 38 | } 39 | -------------------------------------------------------------------------------- /budiot-java-server/budiot-access/budiot-access-common/src/main/java/com/budwk/app/access/objects/dto/DeviceDTO.java: -------------------------------------------------------------------------------- 1 | package com.budwk.app.access.objects.dto; 2 | 3 | import lombok.Data; 4 | 5 | import java.io.Serializable; 6 | 7 | /** 8 | * 设备字段 9 | */ 10 | @Data 11 | public class DeviceDTO implements Serializable { 12 | private static final long serialVersionUID = 1L; 13 | 14 | private String deviceId; 15 | private String deviceNo; 16 | private String meterNo; 17 | private String productId; 18 | /** 19 | * 设备协议解析标识 20 | */ 21 | private String protocolCode; 22 | } 23 | -------------------------------------------------------------------------------- /budiot-java-server/budiot-access/budiot-access-common/src/main/java/com/budwk/app/access/objects/dto/DeviceRawDataDTO.java: -------------------------------------------------------------------------------- 1 | package com.budwk.app.access.objects.dto; 2 | 3 | import lombok.Data; 4 | 5 | import java.io.Serializable; 6 | import java.util.List; 7 | import java.util.Map; 8 | 9 | /** 10 | * 设备原始报文(只用存mongo) 11 | */ 12 | @Data 13 | public class DeviceRawDataDTO implements Serializable { 14 | private static final long serialVersionUID = 1L; 15 | 16 | /** 17 | * 存入数据库的时间戳 18 | */ 19 | private long ts; 20 | 21 | private String deviceId; 22 | private String deviceNo; 23 | private String meterNo; 24 | private String productId; 25 | 26 | /** 27 | * U 上行, D 下行 28 | */ 29 | private String type; 30 | /** 31 | * 原始报文数据 32 | */ 33 | private String originData; 34 | 35 | /** 36 | * 解析后的数据 37 | */ 38 | private String parsedData; 39 | /** 40 | * 接收到的时间 41 | */ 42 | private Long startTime; 43 | /** 44 | * 处理完成的时间 45 | */ 46 | private Long endTime; 47 | 48 | /** 49 | * 存储id 用于回显 50 | */ 51 | private String id; 52 | } 53 | -------------------------------------------------------------------------------- /budiot-java-server/budiot-access/budiot-access-common/src/main/java/com/budwk/app/access/objects/dto/ValueItemDTO.java: -------------------------------------------------------------------------------- 1 | package com.budwk.app.access.objects.dto; 2 | 3 | import lombok.Data; 4 | 5 | import java.io.Serializable; 6 | 7 | @Data 8 | public class ValueItemDTO implements Serializable { 9 | private static final long serialVersionUID = 1L; 10 | 11 | public ValueItemDTO(String code, T value) { 12 | this.code = code; 13 | this.value = value; 14 | } 15 | 16 | public ValueItemDTO(String code, String name, T value) { 17 | this.code = code; 18 | this.name = name; 19 | this.value = value; 20 | } 21 | 22 | /** 23 | * 标识 24 | */ 25 | private String code; 26 | /** 27 | * 名称 28 | */ 29 | private String name; 30 | /** 31 | * 值 32 | */ 33 | private T value; 34 | 35 | 36 | } 37 | -------------------------------------------------------------------------------- /budiot-java-server/budiot-access/budiot-access-common/src/main/java/com/budwk/app/access/objects/query/DeviceCmdDataQuery.java: -------------------------------------------------------------------------------- 1 | package com.budwk.app.access.objects.query; 2 | 3 | import lombok.Data; 4 | 5 | /** 6 | * @author wizzer.cn 7 | */ 8 | @Data 9 | public class DeviceCmdDataQuery extends PageQuery{ 10 | private static final long serialVersionUID = 1L; 11 | //产品id 12 | private String productId; 13 | 14 | //设备id 15 | private String deviceId; 16 | 17 | //开始时间戳 18 | private Long startTime; 19 | 20 | //结束时间戳 21 | private Long endTime; 22 | 23 | //ids 24 | private String ids; 25 | } 26 | -------------------------------------------------------------------------------- /budiot-java-server/budiot-access/budiot-access-common/src/main/java/com/budwk/app/access/objects/query/DeviceDataQuery.java: -------------------------------------------------------------------------------- 1 | package com.budwk.app.access.objects.query; 2 | 3 | import lombok.Data; 4 | 5 | /** 6 | * @author wizzer.cn 7 | */ 8 | @Data 9 | public class DeviceDataQuery extends PageQuery{ 10 | private static final long serialVersionUID = 1L; 11 | 12 | //设备协议 13 | private String protocolCode; 14 | 15 | //设备id 16 | private String deviceId; 17 | 18 | //开始时间戳 19 | private Long startTime; 20 | 21 | //结束时间戳 22 | private Long endTime; 23 | 24 | //ids 25 | private String ids; 26 | } 27 | -------------------------------------------------------------------------------- /budiot-java-server/budiot-access/budiot-access-common/src/main/java/com/budwk/app/access/objects/query/DeviceEventDataQuery.java: -------------------------------------------------------------------------------- 1 | package com.budwk.app.access.objects.query; 2 | 3 | import lombok.Data; 4 | 5 | /** 6 | * 原始报文查询 7 | * @author wizzer.cn 8 | */ 9 | @Data 10 | public class DeviceEventDataQuery extends PageQuery{ 11 | private static final long serialVersionUID = 1L; 12 | 13 | //设备通信号 14 | private String deviceNo; 15 | 16 | //设备表号 17 | private String meterNo; 18 | 19 | //设备id 20 | private String deviceId; 21 | 22 | //产品id 23 | private String productId; 24 | 25 | //开始时间戳 26 | private Long startTime; 27 | 28 | //结束时间戳 29 | private Long endTime; 30 | 31 | //ids 32 | private String ids; 33 | } 34 | -------------------------------------------------------------------------------- /budiot-java-server/budiot-access/budiot-access-common/src/main/java/com/budwk/app/access/objects/query/DeviceRawDataQuery.java: -------------------------------------------------------------------------------- 1 | package com.budwk.app.access.objects.query; 2 | 3 | import lombok.Data; 4 | 5 | /** 6 | * 原始报文查询 7 | * @author wizzer.cn 8 | */ 9 | @Data 10 | public class DeviceRawDataQuery extends PageQuery{ 11 | private static final long serialVersionUID = 1L; 12 | 13 | //设备编号 14 | private String deviceNo; 15 | 16 | //设备表号 17 | private String meterNo; 18 | 19 | //设备id 20 | private String deviceId; 21 | 22 | //产品id 23 | private String productId; 24 | 25 | //开始时间戳 26 | private Long startTime; 27 | 28 | //结束时间戳 29 | private Long endTime; 30 | 31 | //ids 32 | private String ids; 33 | } 34 | -------------------------------------------------------------------------------- /budiot-java-server/budiot-access/budiot-access-common/src/main/java/com/budwk/app/access/objects/query/PageQuery.java: -------------------------------------------------------------------------------- 1 | package com.budwk.app.access.objects.query; 2 | 3 | import lombok.Data; 4 | 5 | import java.io.Serializable; 6 | 7 | /** 8 | * @author wizzer.cn 9 | */ 10 | @Data 11 | public class PageQuery implements Serializable { 12 | 13 | private Integer pageNo = 1; 14 | 15 | private Integer pageSize = 10; 16 | } 17 | -------------------------------------------------------------------------------- /budiot-java-server/budiot-access/budiot-access-gateway/src/main/java/com/budwk/app/access/gateway/DeviceGatewayServer.java: -------------------------------------------------------------------------------- 1 | package com.budwk.app.access.gateway; 2 | 3 | import com.budwk.app.access.network.DeviceGateway; 4 | import com.budwk.app.access.network.DeviceGatewayManager; 5 | import org.nutz.boot.starter.ServerFace; 6 | import org.nutz.ioc.loader.annotation.Inject; 7 | import org.nutz.ioc.loader.annotation.IocBean; 8 | 9 | import java.util.List; 10 | 11 | @IocBean 12 | public class DeviceGatewayServer implements ServerFace { 13 | @Inject 14 | private DeviceGatewayManager deviceGatewayManager; 15 | 16 | @Override 17 | public void start() throws Exception { 18 | List gatewayList = deviceGatewayManager.loadGateway(); 19 | gatewayList.forEach(this::startGateway); 20 | } 21 | 22 | private void startGateway(DeviceGateway deviceGateway) { 23 | deviceGateway.start(); 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /budiot-java-server/budiot-access/budiot-access-gateway/src/main/java/com/budwk/app/access/gateway/GatewayLauncher.java: -------------------------------------------------------------------------------- 1 | package com.budwk.app.access.gateway; 2 | 3 | import org.nutz.boot.NbApp; 4 | import org.nutz.ioc.loader.annotation.IocBean; 5 | 6 | @IocBean 7 | public class GatewayLauncher { 8 | public static void main(String[] args) { 9 | 10 | NbApp nb = new NbApp().setArgs(args).setPrintProcDoc(true); 11 | nb.getAppContext().setMainPackage("com.budwk"); 12 | nb.run(); 13 | } 14 | 15 | } 16 | -------------------------------------------------------------------------------- /budiot-java-server/budiot-access/budiot-access-message/README.md: -------------------------------------------------------------------------------- 1 | # 2 | 3 | ## RocketMQ 4 | 5 | 版本:5.2.x 6 | 7 | ```yaml 8 | rocketmq: 9 | enable: true 10 | # 集群环境多个nameserver用;分割 11 | nameserver-address: 127.0.0.1:9876 12 | # 生产者组 13 | producer-group: gateway_producer 14 | producer-timeout: 1 15 | consumer-thread-max: 100 16 | consumer-thread-min: 5 17 | 18 | ``` 19 | 20 | ## RabbitMQ 21 | 22 | 版本:3.10.x 23 | ```yaml 24 | rabbitmq: 25 | enable: true 26 | host: 10.10.10.10 27 | port: 5672 28 | username: guest 29 | password: guest 30 | thread: 31 | max: 8 32 | min: 4 33 | queue: 34 | size: 10000 35 | ``` -------------------------------------------------------------------------------- /budiot-java-server/budiot-access/budiot-access-message/src/main/java/com/budwk/app/access/message/Message.java: -------------------------------------------------------------------------------- 1 | package com.budwk.app.access.message; 2 | 3 | import lombok.AccessLevel; 4 | import lombok.Data; 5 | import lombok.Getter; 6 | import lombok.Setter; 7 | 8 | import java.io.Serializable; 9 | import java.util.LinkedHashMap; 10 | import java.util.Map; 11 | 12 | @Data 13 | public class Message implements Serializable { 14 | private static final long serialVersionUID = -1160683315647739555L; 15 | @Getter 16 | @Setter(AccessLevel.NONE) 17 | private Map headers = new LinkedHashMap<>(); 18 | /** 19 | * 目的地址 20 | */ 21 | private final String to; 22 | /** 23 | * 消息体 24 | */ 25 | private final T body; 26 | /** 27 | * 回复地址 28 | */ 29 | private String from; 30 | /** 31 | * 发送者的标识 32 | */ 33 | private String sender; 34 | 35 | public Message addHeader(String key, String value) { 36 | headers.put(key, value); 37 | return this; 38 | } 39 | 40 | public String getHeader(String key) { 41 | return headers.get(key); 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /budiot-java-server/budiot-access/budiot-access-message/src/main/java/com/budwk/app/access/message/MessageTransfer.java: -------------------------------------------------------------------------------- 1 | package com.budwk.app.access.message; 2 | 3 | import com.budwk.starter.rocketmq.enums.ConsumeMode; 4 | import com.budwk.starter.rocketmq.enums.MessageModel; 5 | 6 | import java.io.Serializable; 7 | import java.util.function.Consumer; 8 | 9 | public interface MessageTransfer { 10 | /** 11 | * 发送消息 12 | * 13 | * @param message 14 | * @param 15 | */ 16 | void publish(Message message); 17 | 18 | /** 19 | * 订阅消息 20 | * 21 | * @param consumerGroup 消息组 22 | * @param topic 订阅主题 23 | * @param tag 只支持或 || 运算 示例: "tag1 || tag2 || tag3", 等于 null 或者 * ,则表示全部订阅 24 | * @param messageModel 接收模式(广播模式或集群模式) 25 | * @param consumeMode 消费模式(顺序或普通) 26 | * @param consumer 消息对象 27 | * @param 28 | */ 29 | void subscribe(String consumerGroup, String topic, String tag, MessageModel messageModel, ConsumeMode consumeMode, Consumer> consumer); 30 | 31 | 32 | void subscribe(String consumerGroup, String topic, Consumer> consumer); 33 | 34 | void clearMessage(); 35 | } 36 | -------------------------------------------------------------------------------- /budiot-java-server/budiot-access/budiot-access-message/src/main/java/com/budwk/app/access/message/impl/MessageTransferServer.java: -------------------------------------------------------------------------------- 1 | package com.budwk.app.access.message.impl; 2 | 3 | import com.budwk.app.access.message.MessageTransfer; 4 | import lombok.extern.slf4j.Slf4j; 5 | import org.nutz.ioc.Ioc; 6 | import org.nutz.ioc.loader.annotation.Inject; 7 | import org.nutz.ioc.loader.annotation.IocBean; 8 | 9 | @IocBean 10 | @Slf4j 11 | public class MessageTransferServer { 12 | @Inject("refer:$ioc") 13 | private Ioc ioc; 14 | 15 | @Inject("java:$conf.getBoolean('rabbitmq.enable')") 16 | private boolean rabbitEnabled; 17 | 18 | @Inject("java:$conf.getBoolean('rocketmq.enable')") 19 | private boolean rocketEnabled; 20 | 21 | public MessageTransfer getMessageTransfer() { 22 | if (rabbitEnabled) { 23 | log.info("RabbitMQ 已启用"); 24 | return ioc.get(RabbitMQMessageTransfer.class); 25 | } else if (rocketEnabled) { 26 | log.info("RocketMQ 已启用"); 27 | return ioc.get(RMQMessageTransfer.class); 28 | } 29 | log.error("未启用任何消息队列服务"); 30 | return null; 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /budiot-java-server/budiot-access/budiot-access-message/src/main/java/com/budwk/app/access/message/utils/FastSerializeUtil.java: -------------------------------------------------------------------------------- 1 | package com.budwk.app.access.message.utils; 2 | 3 | import com.budwk.app.access.message.Message; 4 | import org.nustaq.serialization.FSTConfiguration; 5 | 6 | import java.io.Serializable; 7 | 8 | public class FastSerializeUtil { 9 | private static FSTConfiguration fstConfiguration = FSTConfiguration.createDefaultConfiguration(); 10 | 11 | public static byte[] serialize(Message message) { 12 | return fstConfiguration.asByteArray(message); 13 | } 14 | 15 | public static Message deserialize(byte[] bytes) { 16 | if (null == bytes) { 17 | return null; 18 | } 19 | return (Message) fstConfiguration.asObject(bytes); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /budiot-java-server/budiot-access/budiot-access-network/budiot-access-network-common/src/main/java/com/budwk/app/access/network/DeviceGateway.java: -------------------------------------------------------------------------------- 1 | package com.budwk.app.access.network; 2 | 3 | import com.budwk.app.access.enums.TransportType; 4 | 5 | public interface DeviceGateway { 6 | /** 7 | * 获取传输协议 8 | * @return 9 | */ 10 | TransportType getTransportType(); 11 | 12 | /** 13 | * 启动 14 | */ 15 | void start(); 16 | } 17 | -------------------------------------------------------------------------------- /budiot-java-server/budiot-access/budiot-access-network/budiot-access-network-common/src/main/java/com/budwk/app/access/network/DeviceGatewayBuilder.java: -------------------------------------------------------------------------------- 1 | package com.budwk.app.access.network; 2 | 3 | import com.budwk.app.access.enums.TransportType; 4 | import com.budwk.app.access.network.config.DeviceGatewayConfiguration; 5 | 6 | public interface DeviceGatewayBuilder { 7 | /** 8 | * 获取ID 9 | * 10 | * @return 11 | */ 12 | String getId(); 13 | 14 | /** 15 | * 获取名称 16 | * 17 | * @return 18 | */ 19 | String getName(); 20 | 21 | /** 22 | * 获取传输协议 23 | * 24 | * @return 25 | */ 26 | TransportType getTransportType(); 27 | 28 | /** 29 | * 构造网关 30 | * 31 | * @param configuration 配置参数 32 | * @return 33 | */ 34 | DeviceGateway buildGateway(DeviceGatewayConfiguration configuration); 35 | } 36 | -------------------------------------------------------------------------------- /budiot-java-server/budiot-access/budiot-access-network/budiot-access-network-common/src/main/java/com/budwk/app/access/network/DeviceGatewayManager.java: -------------------------------------------------------------------------------- 1 | package com.budwk.app.access.network; 2 | 3 | import java.util.List; 4 | 5 | public interface DeviceGatewayManager { 6 | List loadGateway(); 7 | } 8 | -------------------------------------------------------------------------------- /budiot-java-server/budiot-access/budiot-access-network/budiot-access-network-common/src/main/java/com/budwk/app/access/network/config/DeviceGatewayConfiguration.java: -------------------------------------------------------------------------------- 1 | package com.budwk.app.access.network.config; 2 | 3 | import lombok.Data; 4 | 5 | import java.util.Map; 6 | 7 | @Data 8 | public class DeviceGatewayConfiguration { 9 | /** 10 | * 网关标识 11 | */ 12 | private String id; 13 | 14 | /** 15 | * 实例ID 16 | */ 17 | private String instanceId; 18 | 19 | /** 20 | * 协议解析包标识 21 | */ 22 | private String protocolCode; 23 | 24 | /** 25 | * 传输协议 26 | */ 27 | private String transport; 28 | 29 | /** 30 | * 配置项 31 | */ 32 | private Map properties; 33 | } 34 | -------------------------------------------------------------------------------- /budiot-java-server/budiot-access/budiot-access-network/budiot-access-network-tcp/src/main/java/com/budwk/app/access/network/tcp/client/TcpClient.java: -------------------------------------------------------------------------------- 1 | package com.budwk.app.access.network.tcp.client; 2 | 3 | import java.util.concurrent.CompletionStage; 4 | import java.util.function.Consumer; 5 | 6 | public interface TcpClient { 7 | 8 | String getId(); 9 | 10 | TcpClient onMessage(Consumer messageHandler); 11 | 12 | TcpClient onClose(Consumer closeHandler); 13 | 14 | TcpClient onError(Consumer errorHandler); 15 | 16 | CompletionStage send(byte[] bytes); 17 | 18 | } 19 | -------------------------------------------------------------------------------- /budiot-java-server/budiot-access/budiot-access-network/budiot-access-network-tcp/src/main/java/com/budwk/app/access/network/tcp/server/TcpServer.java: -------------------------------------------------------------------------------- 1 | package com.budwk.app.access.network.tcp.server; 2 | 3 | 4 | import com.budwk.app.access.network.tcp.client.TcpClient; 5 | 6 | import java.util.function.Consumer; 7 | 8 | public interface TcpServer { 9 | TcpServer start(); 10 | 11 | TcpServer handleConnection(Consumer handler); 12 | 13 | } 14 | -------------------------------------------------------------------------------- /budiot-java-server/budiot-access/budiot-access-network/budiot-access-network-udp/src/main/java/com/budwk/app/access/network/udp/client/UdpSender.java: -------------------------------------------------------------------------------- 1 | package com.budwk.app.access.network.udp.client; 2 | 3 | import lombok.Data; 4 | 5 | @Data 6 | public class UdpSender { 7 | private final String id; 8 | private final String host; 9 | private final int port; 10 | 11 | public UdpSender(String host, int port) { 12 | this.host = host; 13 | this.port = port; 14 | this.id = host + ":" + port; 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /budiot-java-server/budiot-access/budiot-access-network/budiot-access-network-udp/src/main/java/com/budwk/app/access/network/udp/server/UdpServer.java: -------------------------------------------------------------------------------- 1 | package com.budwk.app.access.network.udp.server; 2 | 3 | 4 | import com.budwk.app.access.network.udp.client.UdpSender; 5 | 6 | import java.util.concurrent.CompletionStage; 7 | import java.util.function.BiConsumer; 8 | 9 | public interface UdpServer { 10 | UdpServer start(); 11 | 12 | CompletionStage send(UdpSender sender, byte[] message); 13 | 14 | UdpServer onMessage(BiConsumer messageHandler); 15 | } 16 | -------------------------------------------------------------------------------- /budiot-java-server/budiot-access/budiot-access-processor/src/main/java/com/budwk/app/access/processor/chain/AbstractDataProcessing.java: -------------------------------------------------------------------------------- 1 | package com.budwk.app.access.processor.chain; 2 | 3 | 4 | import com.budwk.app.access.processor.support.ThreadPoolSupport; 5 | import lombok.extern.slf4j.Slf4j; 6 | 7 | import java.util.concurrent.Executor; 8 | 9 | @Slf4j 10 | public abstract class AbstractDataProcessing implements DataProcessing { 11 | protected Executor executor = ThreadPoolSupport.getProcessorExecutor(); 12 | protected DataProcessing next; 13 | 14 | public boolean isParallelizable() { 15 | return false; 16 | } 17 | 18 | @Override 19 | public void setNext(DataProcessing processing) { 20 | this.next = processing; 21 | } 22 | 23 | @Override 24 | public DataProcessing getNext() { 25 | return next; 26 | } 27 | 28 | protected void doNext(DeviceChainData deviceChainData) { 29 | if (null != next) { 30 | if (isParallelizable()) { 31 | executor.execute(() -> { 32 | next.process(deviceChainData); 33 | }); 34 | } else { 35 | next.process(deviceChainData); 36 | } 37 | } 38 | } 39 | } -------------------------------------------------------------------------------- /budiot-java-server/budiot-access/budiot-access-processor/src/main/java/com/budwk/app/access/processor/chain/DataProcessing.java: -------------------------------------------------------------------------------- 1 | package com.budwk.app.access.processor.chain; 2 | 3 | public interface DataProcessing { 4 | void process(DeviceChainData deviceChainData); 5 | 6 | void setNext(DataProcessing processing); 7 | 8 | DataProcessing getNext(); 9 | 10 | int getOrder(); 11 | } 12 | -------------------------------------------------------------------------------- /budiot-java-server/budiot-access/budiot-access-processor/src/main/java/com/budwk/app/access/processor/chain/DeviceChainData.java: -------------------------------------------------------------------------------- 1 | package com.budwk.app.access.processor.chain; 2 | 3 | import com.budwk.app.access.protocol.codec.result.DefaultDecodeResult; 4 | import com.budwk.app.iot.objects.cache.DeviceProcessCache; 5 | import lombok.Data; 6 | import lombok.NoArgsConstructor; 7 | 8 | import java.io.Serializable; 9 | import java.util.List; 10 | import java.util.Map; 11 | import java.util.concurrent.ConcurrentHashMap; 12 | 13 | @Data 14 | @NoArgsConstructor 15 | public class DeviceChainData implements Serializable { 16 | private static final long serialVersionUID = -17232049118179474L; 17 | 18 | private DefaultDecodeResult decodeResult; 19 | private DeviceProcessCache deviceProcessCache; 20 | /** 21 | * todo 扩展其他采集数据 22 | */ 23 | 24 | /** 25 | * 存一下上一步处理的一些信息,下一步可以直接从这里获取 26 | */ 27 | private Map extInfo = new ConcurrentHashMap<>(); 28 | 29 | public DeviceChainData addExtInfo(String key, Object o) { 30 | extInfo.put(key, o); 31 | return this; 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /budiot-java-server/budiot-access/budiot-access-processor/src/main/java/com/budwk/app/access/processor/chain/impl/MeterBillProcess.java: -------------------------------------------------------------------------------- 1 | package com.budwk.app.access.processor.chain.impl; 2 | 3 | import com.budwk.app.access.processor.chain.AbstractDataProcessing; 4 | import com.budwk.app.access.processor.chain.DeviceChainData; 5 | import com.budwk.app.iot.objects.cache.DeviceProcessCache; 6 | import lombok.extern.slf4j.Slf4j; 7 | import org.nutz.ioc.loader.annotation.IocBean; 8 | 9 | /** 10 | * 表具计费业务处理 11 | */ 12 | @IocBean(singleton = false) 13 | @Slf4j 14 | public class MeterBillProcess extends AbstractDataProcessing { 15 | private DeviceProcessCache deviceProcessCache; 16 | @Override 17 | public void process(DeviceChainData deviceChainData) { 18 | deviceProcessCache = deviceChainData.getDeviceProcessCache(); 19 | /** 20 | * todo 21 | */ 22 | } 23 | 24 | @Override 25 | public int getOrder() { 26 | return 1; 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /budiot-java-server/budiot-access/budiot-access-processor/src/main/java/com/budwk/app/access/processor/chain/impl/OtherProcess.java: -------------------------------------------------------------------------------- 1 | package com.budwk.app.access.processor.chain.impl; 2 | 3 | import com.budwk.app.access.processor.chain.AbstractDataProcessing; 4 | import com.budwk.app.access.processor.chain.DeviceChainData; 5 | import com.budwk.app.iot.objects.cache.DeviceProcessCache; 6 | import lombok.extern.slf4j.Slf4j; 7 | import org.nutz.ioc.loader.annotation.IocBean; 8 | 9 | /** 10 | * 其他业务处理 11 | */ 12 | @IocBean(singleton = false) 13 | @Slf4j 14 | public class OtherProcess extends AbstractDataProcessing { 15 | private DeviceProcessCache deviceProcessCache; 16 | @Override 17 | public void process(DeviceChainData deviceChainData) { 18 | deviceProcessCache = deviceChainData.getDeviceProcessCache(); 19 | /** 20 | * todo 21 | */ 22 | } 23 | 24 | @Override 25 | public int getOrder() { 26 | return 1; 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /budiot-java-server/budiot-access/budiot-access-processor/src/main/java/com/budwk/app/access/processor/core/Processor.java: -------------------------------------------------------------------------------- 1 | package com.budwk.app.access.processor.core; 2 | 3 | public interface Processor { 4 | /** 5 | * 6 | * @return 排序 7 | */ 8 | int getOrder(); 9 | 10 | void process(ProcessorContext context); 11 | } 12 | -------------------------------------------------------------------------------- /budiot-java-server/budiot-access/budiot-access-processor/src/main/java/com/budwk/app/access/processor/core/ProcessorContext.java: -------------------------------------------------------------------------------- 1 | package com.budwk.app.access.processor.core; 2 | 3 | import com.budwk.app.access.protocol.codec.result.DefaultDecodeResult; 4 | import com.budwk.app.iot.objects.cache.DeviceProcessCache; 5 | import lombok.Data; 6 | import org.nutz.castor.Castors; 7 | 8 | import java.util.Map; 9 | import java.util.concurrent.ConcurrentHashMap; 10 | 11 | @Data 12 | public class ProcessorContext { 13 | private final DeviceProcessCache device; 14 | /** 15 | * 解析后的数据 16 | */ 17 | private final DefaultDecodeResult decodeResult; 18 | private final Map properties = new ConcurrentHashMap<>(); 19 | 20 | public ProcessorContext addProperty(String key, Object value) { 21 | properties.put(key, value); 22 | return this; 23 | } 24 | 25 | public Object getProperty(String key) { 26 | return properties.get(key); 27 | } 28 | 29 | public T getProperty(String key, Class type) { 30 | return Castors.me().castTo(getProperty(key), type); 31 | } 32 | 33 | public void addProperties(Map values) { 34 | properties.putAll(values); 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /budiot-java-server/budiot-access/budiot-access-processor/src/main/java/com/budwk/app/access/processor/protocol/impl/DefaultDeviceEventContext.java: -------------------------------------------------------------------------------- 1 | package com.budwk.app.access.processor.protocol.impl; 2 | 3 | import com.budwk.app.access.protocol.codec.context.DeviceEventContext; 4 | import com.budwk.app.iot.services.IotDeviceService; 5 | import org.nutz.dao.Chain; 6 | import org.nutz.dao.Cnd; 7 | import org.nutz.ioc.loader.annotation.Inject; 8 | import org.nutz.ioc.loader.annotation.IocBean; 9 | 10 | @IocBean 11 | public class DefaultDeviceEventContext implements DeviceEventContext { 12 | @Inject 13 | private IotDeviceService iotDeviceService; 14 | 15 | @Override 16 | public void updateDeviceIotPlatformId(String deviceId, String iotPlatformId) { 17 | iotDeviceService.update(Chain.make("iotPlatformId", iotPlatformId), Cnd.where("id", "=", deviceId)); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /budiot-java-server/budiot-access/budiot-access-processor/src/main/java/com/budwk/app/access/processor/timer/DelayTaskHelper.java: -------------------------------------------------------------------------------- 1 | package com.budwk.app.access.processor.timer; 2 | 3 | /** 4 | * 延迟任务 5 | */ 6 | public interface DelayTaskHelper { 7 | 8 | void delayRun(Runnable runnable, long delaySeconds); 9 | 10 | void delayRunAsync(Runnable runnable, long delaySeconds); 11 | } 12 | -------------------------------------------------------------------------------- /budiot-java-server/budiot-access/budiot-access-processor/src/main/java/com/budwk/app/access/processor/timer/Timer.java: -------------------------------------------------------------------------------- 1 | package com.budwk.app.access.processor.timer; 2 | 3 | 4 | public interface Timer { 5 | 6 | /** 7 | * 添加新任务 8 | * 9 | * @param timerTask 10 | */ 11 | void add(TimerTask timerTask); 12 | 13 | /** 14 | * 提前内部时钟,并执行已过期的任务 15 | * 16 | * @param timeoutMs 17 | * @return 18 | */ 19 | boolean advanceClock(long timeoutMs); 20 | 21 | /** 22 | * 获取待执行任务数量 23 | * 24 | * @return 25 | */ 26 | int getSize(); 27 | 28 | /** 29 | * 停止 30 | */ 31 | void shutdown(); 32 | } 33 | 34 | 35 | -------------------------------------------------------------------------------- /budiot-java-server/budiot-access/budiot-access-processor/src/main/java/com/budwk/app/access/processor/timer/TimerThread.java: -------------------------------------------------------------------------------- 1 | package com.budwk.app.access.processor.timer; 2 | 3 | import lombok.extern.slf4j.Slf4j; 4 | 5 | 6 | @Slf4j 7 | public class TimerThread extends Thread { 8 | 9 | public static TimerThread daemon(final String name, Runnable runnable) { 10 | return new TimerThread(name, runnable, true); 11 | } 12 | 13 | public static TimerThread nonDaemon(final String name, Runnable runnable) { 14 | return new TimerThread(name, runnable, false); 15 | } 16 | 17 | public TimerThread(final String name, boolean daemon) { 18 | super(name); 19 | configureThread(name, daemon); 20 | } 21 | 22 | public TimerThread(final String name, Runnable runnable, boolean daemon) { 23 | super(runnable, name); 24 | configureThread(name, daemon); 25 | } 26 | 27 | private void configureThread(final String name, boolean daemon) { 28 | setDaemon(daemon); 29 | setUncaughtExceptionHandler((t, e) -> { 30 | log.error("Uncaught exception in thread {}", name,e); 31 | }); 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /budiot-java-server/budiot-access/budiot-access-protocol/budiot-access-protocol-core/src/main/java/com/budwk/app/access/protocol/codec/MessageCodec.java: -------------------------------------------------------------------------------- 1 | package com.budwk.app.access.protocol.codec; 2 | 3 | 4 | import com.budwk.app.access.protocol.codec.context.DecodeContext; 5 | import com.budwk.app.access.protocol.codec.context.EncodeContext; 6 | import com.budwk.app.access.protocol.codec.result.DecodeResult; 7 | import com.budwk.app.access.protocol.codec.result.EncodeResult; 8 | 9 | /** 10 | * 编解码 11 | * @author wizzer.cn 12 | */ 13 | public interface MessageCodec { 14 | /** 15 | * 数据解码 16 | * 17 | * @param context 解码上下文 18 | * @return 解码结果 19 | * @see DecodeResult 20 | */ 21 | DecodeResult decode(DecodeContext context); 22 | 23 | /** 24 | * 数据编码 25 | * 26 | * @param context 编码上下文 27 | * @return 编码结果 28 | * @see EncodeResult 29 | */ 30 | EncodeResult encode(EncodeContext context); 31 | } 32 | -------------------------------------------------------------------------------- /budiot-java-server/budiot-access/budiot-access-protocol/budiot-access-protocol-core/src/main/java/com/budwk/app/access/protocol/codec/ProtocolLoader.java: -------------------------------------------------------------------------------- 1 | package com.budwk.app.access.protocol.codec; 2 | 3 | public interface ProtocolLoader { 4 | Protocol loadProtocols(String protocolCode); 5 | } 6 | -------------------------------------------------------------------------------- /budiot-java-server/budiot-access/budiot-access-protocol/budiot-access-protocol-core/src/main/java/com/budwk/app/access/protocol/codec/context/DeviceContext.java: -------------------------------------------------------------------------------- 1 | package com.budwk.app.access.protocol.codec.context; 2 | 3 | import java.util.Map; 4 | 5 | /** 6 | * 设备字段更新上下文 7 | */ 8 | public interface DeviceContext { 9 | /** 10 | * 更新设备字段 11 | * 12 | * @param deviceId 设备ID 13 | * @param fieldName 字段名 14 | * @param fieldValue 字段值 15 | */ 16 | void update(String deviceId, String fieldName, Object fieldValue); 17 | 18 | /** 19 | * 更新设备字段 20 | * 21 | * @param deviceId 设备ID 22 | * @param kv 字段名-字段值对象 23 | */ 24 | void update(String deviceId, Map kv); 25 | } 26 | -------------------------------------------------------------------------------- /budiot-java-server/budiot-access/budiot-access-protocol/budiot-access-protocol-core/src/main/java/com/budwk/app/access/protocol/codec/context/DeviceEventContext.java: -------------------------------------------------------------------------------- 1 | package com.budwk.app.access.protocol.codec.context; 2 | 3 | 4 | /** 5 | * 设备事件上下文 6 | */ 7 | public interface DeviceEventContext { 8 | /** 9 | * 更新设备iotPlatformId 10 | * 11 | * @param deviceId 设备ID 12 | * @param iotPlatformId 设备第三方平台ID 13 | */ 14 | void updateDeviceIotPlatformId(String deviceId, String iotPlatformId); 15 | 16 | } 17 | -------------------------------------------------------------------------------- /budiot-java-server/budiot-access/budiot-access-protocol/budiot-access-protocol-core/src/main/java/com/budwk/app/access/protocol/codec/context/EncodeContext.java: -------------------------------------------------------------------------------- 1 | package com.budwk.app.access.protocol.codec.context; 2 | 3 | 4 | import com.budwk.app.access.protocol.codec.CacheStore; 5 | import com.budwk.app.access.protocol.codec.DeviceOperator; 6 | import com.budwk.app.access.protocol.device.CommandInfo; 7 | 8 | /** 9 | * 编码上下文 10 | */ 11 | public interface EncodeContext { 12 | /** 13 | * 指令信息 14 | */ 15 | CommandInfo getCommandInfo(); 16 | 17 | /** 18 | * 设备信息 19 | * 20 | * @return 21 | */ 22 | DeviceOperator getDeviceOperator(); 23 | 24 | /** 25 | * 缓存服务 26 | * 27 | * @param id 28 | * @return 29 | */ 30 | CacheStore getCacheStore(String id); 31 | } 32 | -------------------------------------------------------------------------------- /budiot-java-server/budiot-access/budiot-access-protocol/budiot-access-protocol-core/src/main/java/com/budwk/app/access/protocol/codec/exception/MessageCodecException.java: -------------------------------------------------------------------------------- 1 | package com.budwk.app.access.protocol.codec.exception; 2 | 3 | /** 4 | * 解析异常 5 | */ 6 | public class MessageCodecException extends RuntimeException { 7 | public MessageCodecException(String message) { 8 | super(message); 9 | } 10 | 11 | public MessageCodecException(String message, Throwable cause) { 12 | super(message, cause); 13 | } 14 | 15 | public static void makeThrow(String message, Object... args) { 16 | throw new MessageCodecException(String.format(message, args)); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /budiot-java-server/budiot-access/budiot-access-protocol/budiot-access-protocol-core/src/main/java/com/budwk/app/access/protocol/codec/exception/UnSupportCommandException.java: -------------------------------------------------------------------------------- 1 | package com.budwk.app.access.protocol.codec.exception; 2 | 3 | /** 4 | * 不支持的指令异常 5 | */ 6 | public class UnSupportCommandException extends RuntimeException { 7 | public UnSupportCommandException(String message) { 8 | super(message); 9 | } 10 | 11 | public UnSupportCommandException(String message, Throwable cause) { 12 | super(message, cause); 13 | } 14 | 15 | public static void makeThrow(String message, Object... args) { 16 | throw new UnSupportCommandException(String.format(message, args)); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /budiot-java-server/budiot-access/budiot-access-protocol/budiot-access-protocol-core/src/main/java/com/budwk/app/access/protocol/codec/impl/GatewayDeviceOperatorImpl.java: -------------------------------------------------------------------------------- 1 | package com.budwk.app.access.protocol.codec.impl; 2 | 3 | 4 | import com.budwk.app.access.protocol.codec.DeviceOperator; 5 | 6 | /** 7 | * 网关设备(集中器/管理机) 8 | */ 9 | public class GatewayDeviceOperatorImpl extends DefaultDeviceOperator { 10 | 11 | /** 12 | * 获取网关设备下的子设备 13 | * 14 | * @param field 指定字段名 15 | * @param value 字段值 16 | * @return 17 | */ 18 | public DeviceOperator getSubDevice(String field, String value) { 19 | return null; 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /budiot-java-server/budiot-access/budiot-access-protocol/budiot-access-protocol-core/src/main/java/com/budwk/app/access/protocol/codec/result/DecodeResult.java: -------------------------------------------------------------------------------- 1 | package com.budwk.app.access.protocol.codec.result; 2 | 3 | import com.budwk.app.access.protocol.message.DeviceMessage; 4 | 5 | import java.io.Serializable; 6 | import java.util.List; 7 | 8 | /** 9 | * 解码结果 10 | */ 11 | public interface DecodeResult extends Serializable { 12 | 13 | /** 14 | * 获取设备id 15 | * 16 | * @return 17 | */ 18 | String getDeviceId(); 19 | 20 | /** 21 | * 获取解码后消息 22 | * 23 | * @return 24 | */ 25 | List getMessages(); 26 | 27 | } 28 | -------------------------------------------------------------------------------- /budiot-java-server/budiot-access/budiot-access-protocol/budiot-access-protocol-core/src/main/java/com/budwk/app/access/protocol/codec/result/DefaultEncodeResult.java: -------------------------------------------------------------------------------- 1 | package com.budwk.app.access.protocol.codec.result; 2 | 3 | import com.budwk.app.access.protocol.message.codec.EncodedMessage; 4 | import lombok.Data; 5 | 6 | import java.util.List; 7 | 8 | /** 9 | * 默认编码结果 10 | * @author wizzer.cn 11 | * @author zyang 12 | */ 13 | @Data 14 | public class DefaultEncodeResult implements EncodeResult { 15 | 16 | /** 17 | * 是否已经发送 18 | */ 19 | private final boolean send; 20 | private final List messages; 21 | 22 | @Override 23 | public boolean isSend() { 24 | return send; 25 | } 26 | 27 | @Override 28 | public List getMessage() { 29 | return messages; 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /budiot-java-server/budiot-access/budiot-access-protocol/budiot-access-protocol-core/src/main/java/com/budwk/app/access/protocol/codec/result/EncodeResult.java: -------------------------------------------------------------------------------- 1 | package com.budwk.app.access.protocol.codec.result; 2 | 3 | 4 | import com.budwk.app.access.protocol.message.codec.EncodedMessage; 5 | 6 | import java.util.List; 7 | 8 | /** 9 | * 编码结果 10 | */ 11 | public interface EncodeResult { 12 | /** 13 | * 是否已经发送过。针对http的,如果已经调用接口发送过了,就设置为true 14 | */ 15 | boolean isSend(); 16 | 17 | /** 18 | * 编码后的数据 19 | */ 20 | List getMessage(); 21 | 22 | static EncodeResult createDefault(boolean isSend, List messages) { 23 | return new DefaultEncodeResult(isSend, messages); 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /budiot-java-server/budiot-access/budiot-access-protocol/budiot-access-protocol-core/src/main/java/com/budwk/app/access/protocol/device/CommandInfo.java: -------------------------------------------------------------------------------- 1 | package com.budwk.app.access.protocol.device; 2 | 3 | import lombok.Data; 4 | 5 | import java.io.Serializable; 6 | import java.util.List; 7 | import java.util.Map; 8 | 9 | /** 10 | * 指令信息(下发给设备) 11 | * 12 | * @author wizzer.cn 13 | */ 14 | @Data 15 | public class CommandInfo implements Serializable { 16 | private static final long serialVersionUID = 8423308482003927423L; 17 | /** 18 | * 指令标识 19 | */ 20 | private String commandCode; 21 | /** 22 | * 设备ID 23 | */ 24 | private String deviceId; 25 | /** 26 | * 指令ID 27 | */ 28 | private String commandId; 29 | /** 30 | * 指令序号 31 | */ 32 | private Integer commandSerialNo; 33 | /** 34 | * 参数 35 | */ 36 | private Map params; 37 | } 38 | -------------------------------------------------------------------------------- /budiot-java-server/budiot-access/budiot-access-protocol/budiot-access-protocol-core/src/main/java/com/budwk/app/access/protocol/device/ProductInfo.java: -------------------------------------------------------------------------------- 1 | package com.budwk.app.access.protocol.device; 2 | 3 | import lombok.Data; 4 | import org.nutz.lang.util.NutMap; 5 | 6 | import java.io.Serializable; 7 | import java.util.Map; 8 | 9 | /** 10 | * 产品信息 11 | */ 12 | @Data 13 | public class ProductInfo implements Serializable { 14 | private static final long serialVersionUID = 1L; 15 | 16 | 17 | private String id; 18 | private String name; 19 | private String classifyId; 20 | private String protocolType; 21 | private String iotPlatform; 22 | private String dataFormat; 23 | private String deviceType; 24 | /** 25 | * 计费方式(1-表端计费,2-平台计费) 26 | */ 27 | private Integer payMode; 28 | private Map properties; 29 | } 30 | -------------------------------------------------------------------------------- /budiot-java-server/budiot-access/budiot-access-protocol/budiot-access-protocol-core/src/main/java/com/budwk/app/access/protocol/device/ValueItem.java: -------------------------------------------------------------------------------- 1 | package com.budwk.app.access.protocol.device; 2 | 3 | import lombok.Data; 4 | 5 | import java.io.Serializable; 6 | 7 | /** 8 | * @author wizzer.cn 9 | */ 10 | @Data 11 | public class ValueItem implements Serializable { 12 | private static final long serialVersionUID = -1227063281883181989L; 13 | 14 | public ValueItem(String code, T value) { 15 | this.code = code; 16 | this.value = value; 17 | } 18 | 19 | public ValueItem(String code, String name, T value) { 20 | this.code = code; 21 | this.name = name; 22 | this.value = value; 23 | } 24 | 25 | /** 26 | * 标识 27 | */ 28 | private String code; 29 | /** 30 | * 名称 31 | */ 32 | private String name; 33 | /** 34 | * 值 35 | */ 36 | private T value; 37 | 38 | 39 | } 40 | -------------------------------------------------------------------------------- /budiot-java-server/budiot-access/budiot-access-protocol/budiot-access-protocol-core/src/main/java/com/budwk/app/access/protocol/enums/ValveState.java: -------------------------------------------------------------------------------- 1 | package com.budwk.app.access.protocol.enums; 2 | 3 | /** 4 | * @author wizzer.cn 5 | */ 6 | public enum ValveState { 7 | STATE_0(0, "无阀门"), 8 | STATE_1(1, "阀门开"), 9 | STATE_2(2, "阀门临时关(用户可手动打开)"), 10 | STATE_3(3, "阀门强制关(用户无法手动打开)"), 11 | STATE_4(4, "阀门状态未知"), 12 | STATE_5(5, "阀门异常"), 13 | STATE_6(6, "开关阀中"); 14 | 15 | 16 | private final int value; 17 | private final String text; 18 | 19 | ValveState(int value, String text) { 20 | this.value = value; 21 | this.text = text; 22 | } 23 | 24 | public int value() { 25 | return value; 26 | } 27 | 28 | public String text() { 29 | return text; 30 | } 31 | 32 | public static ValveState from(int value) { 33 | if (value < 0 || value > 5) { 34 | return STATE_4; 35 | } 36 | return values()[value]; 37 | 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /budiot-java-server/budiot-access/budiot-access-protocol/budiot-access-protocol-core/src/main/java/com/budwk/app/access/protocol/message/DeviceMessage.java: -------------------------------------------------------------------------------- 1 | package com.budwk.app.access.protocol.message; 2 | 3 | import java.io.Serializable; 4 | 5 | /** 6 | * @author wizzer.cn 7 | */ 8 | public interface DeviceMessage extends Serializable { 9 | 10 | /** 11 | * 消息类型 12 | */ 13 | default String getMessageType() { 14 | return null; 15 | } 16 | 17 | /** 18 | * 消息ID,用于请求响应模式下关联,可能大部分设备通信用不到此 19 | */ 20 | String getMessageId(); 21 | 22 | /** 23 | * 设备ID 24 | */ 25 | String getDeviceId(); 26 | 27 | /** 28 | * 时间戳,注意:这个时间戳就是最终存入时序数据库中的时间 29 | */ 30 | long getTimestamp(); 31 | } -------------------------------------------------------------------------------- /budiot-java-server/budiot-access/budiot-access-protocol/budiot-access-protocol-core/src/main/java/com/budwk/app/access/protocol/message/codec/EncodedMessage.java: -------------------------------------------------------------------------------- 1 | package com.budwk.app.access.protocol.message.codec; 2 | 3 | import com.budwk.app.access.enums.TransportType; 4 | 5 | import java.io.Serializable; 6 | import java.nio.charset.StandardCharsets; 7 | 8 | /** 9 | * 原始报文消息 10 | * @author wizzer.cn 11 | */ 12 | public interface EncodedMessage extends Serializable { 13 | /** 14 | * 是否已经下发过 15 | * 16 | * @return 17 | */ 18 | default boolean isSend() { 19 | return false; 20 | } 21 | 22 | String getMessageId(); 23 | 24 | TransportType getTransportType(); 25 | 26 | /** 27 | * 获取解析器标识 28 | * @return 29 | */ 30 | String getProtocolCode(); 31 | 32 | byte[] getPayload(); 33 | 34 | default String payloadAsString() { 35 | return new String(getPayload(), StandardCharsets.UTF_8); 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /budiot-java-server/budiot-access/budiot-access-protocol/budiot-access-protocol-demo-aep/src/main/java/com/budwk/app/access/protocol/demo/constants/CacheKeyConstant.java: -------------------------------------------------------------------------------- 1 | package com.budwk.app.access.protocol.demo.constants; 2 | 3 | public class CacheKeyConstant { 4 | /** 5 | * 最新下发的指令id 6 | */ 7 | public static final String CMD_SEND_ID = "cmd:aep:demo:send_id"; 8 | } 9 | -------------------------------------------------------------------------------- /budiot-java-server/budiot-access/budiot-access-protocol/budiot-access-protocol-demo-aep/src/main/java/com/budwk/app/access/protocol/demo/enums/Command.java: -------------------------------------------------------------------------------- 1 | package com.budwk.app.access.protocol.demo.enums; 2 | 3 | 4 | import com.budwk.app.access.protocol.codec.exception.MessageCodecException; 5 | 6 | public enum Command { 7 | /** 8 | * 阀门控制 9 | */ 10 | VALVE_CONTROL, 11 | /** 12 | * 结束帧 13 | */ 14 | END, 15 | /** 16 | * 查询参数 17 | */ 18 | QUERY_PARAMS, 19 | /** 20 | * 设置参数 21 | */ 22 | SET_PARAMS; 23 | 24 | public static Command from(String method) { 25 | try { 26 | return valueOf(method); 27 | } catch (Exception e) { 28 | throw new MessageCodecException("指令不存在 " + method); 29 | } 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /budiot-java-server/budiot-access/budiot-access-protocol/budiot-access-protocol-demo-tcp/src/main/java/com/budwk/app/access/protocol/demo/codec/DefaultMessageCodec.java: -------------------------------------------------------------------------------- 1 | package com.budwk.app.access.protocol.demo.codec; 2 | 3 | import com.budwk.app.access.protocol.codec.MessageCodec; 4 | import com.budwk.app.access.protocol.codec.context.DecodeContext; 5 | import com.budwk.app.access.protocol.codec.context.EncodeContext; 6 | import com.budwk.app.access.protocol.codec.result.DecodeResult; 7 | import com.budwk.app.access.protocol.codec.result.EncodeResult; 8 | import com.budwk.app.access.protocol.message.codec.TcpMessage; 9 | 10 | import java.util.Arrays; 11 | 12 | public class DefaultMessageCodec implements MessageCodec { 13 | private String protocolCode; 14 | 15 | public DefaultMessageCodec(String protocolCode) { 16 | this.protocolCode = protocolCode; 17 | } 18 | 19 | @Override 20 | public DecodeResult decode(DecodeContext context) { 21 | return new DecodeProcessor(context).process(); 22 | } 23 | 24 | @Override 25 | public EncodeResult encode(EncodeContext context) { 26 | return new EncodeProcessor(context).process(); 27 | } 28 | } -------------------------------------------------------------------------------- /budiot-java-server/budiot-access/budiot-access-protocol/budiot-access-protocol-demo-tcp/src/main/java/com/budwk/app/access/protocol/demo/enums/Command.java: -------------------------------------------------------------------------------- 1 | package com.budwk.app.access.protocol.demo.enums; 2 | 3 | import com.budwk.app.access.protocol.codec.exception.MessageCodecException; 4 | 5 | public enum Command { 6 | /** 7 | * 阀门控制 8 | */ 9 | VALVE_CONTROL; 10 | 11 | public static Command from(String code) { 12 | try { 13 | return valueOf(code); 14 | } catch (Exception e) { 15 | throw new MessageCodecException("指令不存在 " + code); 16 | } 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /budiot-java-server/budiot-access/budiot-access-protocol/pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 4.0.0 6 | 7 | com.budwk.app 8 | budiot-access 9 | 1.1.0 10 | 11 | 12 | budiot-access-protocol 13 | pom 14 | 15 | budiot-access-protocol-core 16 | budiot-access-protocol-demo-tcp 17 | budiot-access-protocol-demo-aep 18 | 19 | 20 | 11 21 | 11 22 | UTF-8 23 | 24 | 25 | -------------------------------------------------------------------------------- /budiot-java-server/budiot-access/budiot-access-storage/src/main/java/com/budwk/app/access/storage/DeviceCmdDataStorage.java: -------------------------------------------------------------------------------- 1 | package com.budwk.app.access.storage; 2 | 3 | import com.budwk.app.access.objects.dto.DeviceCmdDTO; 4 | import com.budwk.app.access.objects.query.DeviceCmdDataQuery; 5 | import org.nutz.lang.util.NutMap; 6 | 7 | import java.util.List; 8 | 9 | /** 10 | * 设备历史下发指令存储 11 | */ 12 | public interface DeviceCmdDataStorage { 13 | /** 14 | * 提前创建集合 15 | * @param next 未来N年 16 | */ 17 | void create(int next); 18 | /** 19 | * 存储上报数据 20 | * 21 | * @param deviceCmdDTO 设备基本信息 22 | */ 23 | void save(DeviceCmdDTO deviceCmdDTO); 24 | 25 | /** 26 | * 查询上报数据 27 | * 28 | * @param query 查询条件 handler不可为空 29 | * @return 30 | */ 31 | NutMap list(DeviceCmdDataQuery query); 32 | 33 | /** 34 | * 查询统计 35 | * 36 | * @param query 查询条件 handler不可为空 37 | * @return 38 | */ 39 | long count(DeviceCmdDataQuery query); 40 | } 41 | -------------------------------------------------------------------------------- /budiot-java-server/budiot-access/budiot-access-storage/src/main/java/com/budwk/app/access/storage/DeviceEventDataStorage.java: -------------------------------------------------------------------------------- 1 | package com.budwk.app.access.storage; 2 | 3 | import com.budwk.app.access.objects.dto.DeviceEventDataDTO; 4 | import com.budwk.app.access.objects.query.DeviceEventDataQuery; 5 | import org.nutz.lang.util.NutMap; 6 | 7 | import java.util.List; 8 | 9 | /** 10 | * 设备事件存储 11 | */ 12 | public interface DeviceEventDataStorage { 13 | 14 | void create(int next); 15 | 16 | void save(DeviceEventDataDTO data); 17 | 18 | NutMap list(DeviceEventDataQuery query); 19 | 20 | long count(DeviceEventDataQuery query); 21 | } 22 | -------------------------------------------------------------------------------- /budiot-java-server/budiot-access/budiot-access-storage/src/main/java/com/budwk/app/access/storage/DeviceRawDataStorage.java: -------------------------------------------------------------------------------- 1 | package com.budwk.app.access.storage; 2 | 3 | import com.budwk.app.access.objects.dto.DeviceRawDataDTO; 4 | import com.budwk.app.access.objects.query.DeviceRawDataQuery; 5 | import org.nutz.lang.util.NutMap; 6 | 7 | import java.util.List; 8 | 9 | /** 10 | * 原始报文存储 11 | */ 12 | public interface DeviceRawDataStorage { 13 | void create(int next); 14 | 15 | void save(DeviceRawDataDTO data); 16 | 17 | NutMap list(DeviceRawDataQuery query); 18 | 19 | long count(DeviceRawDataQuery query); 20 | } 21 | -------------------------------------------------------------------------------- /budiot-java-server/budiot-access/budiot-access-thirdparty/src/main/java/com/budwk/app/access/thirdparty/aep/model/RequestParams.java: -------------------------------------------------------------------------------- 1 | package com.budwk.app.access.thirdparty.aep.model; 2 | 3 | import java.lang.annotation.*; 4 | 5 | @Retention(RetentionPolicy.RUNTIME) 6 | @Target({ElementType.FIELD}) 7 | @Documented 8 | public @interface RequestParams { 9 | /** 10 | * 属性名 11 | * 12 | * @return 13 | */ 14 | String name() default ""; 15 | 16 | /** 17 | * 是否必填 18 | * 19 | * @return 20 | */ 21 | boolean required() default false; 22 | 23 | Position position() default Position.BODY; 24 | 25 | enum Position { 26 | /** 27 | * 请求头 28 | */ 29 | HEAD, 30 | /** 31 | * 表单参数 32 | */ 33 | QUERY, 34 | /** 35 | * 请求体 36 | */ 37 | BODY 38 | } 39 | } -------------------------------------------------------------------------------- /budiot-java-server/budiot-access/pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 4.0.0 6 | 7 | com.budwk 8 | budiot 9 | 1.1.0 10 | 11 | 12 | com.budwk.app 13 | budiot-access 14 | pom 15 | 16 | budiot-access-message 17 | budiot-access-common 18 | budiot-access-storage 19 | budiot-access-network 20 | budiot-access-processor 21 | budiot-access-protocol 22 | budiot-access-gateway 23 | 24 | 25 | 11 26 | 11 27 | UTF-8 28 | 29 | 30 | -------------------------------------------------------------------------------- /budiot-java-server/budiot-common/src/main/java/com/budwk/app/cms/enums/CmsChannelType.java: -------------------------------------------------------------------------------- 1 | package com.budwk.app.cms.enums; 2 | 3 | import org.nutz.json.JsonShape; 4 | 5 | /** 6 | * 栏目类型 7 | * @author wizzer(wizzer.cn) on 2020/02/28 8 | * JsonShape注解用于Json和实体类的相互转换,必须加 9 | */ 10 | @JsonShape(JsonShape.Type.OBJECT) 11 | public enum CmsChannelType { 12 | ARTICLE("ARTICLE", "文章"), 13 | PHOTO("PHOTO", "相册"); 14 | 15 | private String value; 16 | private String text; 17 | 18 | CmsChannelType(String value, String text) { 19 | this.value = value; 20 | this.text = text; 21 | } 22 | 23 | public String getValue() { 24 | return value; 25 | } 26 | 27 | public String getText() { 28 | return text; 29 | } 30 | 31 | public String value() { 32 | return value; 33 | } 34 | 35 | public String text() { 36 | return text; 37 | } 38 | 39 | public static CmsChannelType from(String value) { 40 | for (CmsChannelType t : values()) { 41 | if (t.value.equals(value)) { 42 | return t; 43 | } 44 | } 45 | throw new IllegalArgumentException("unknown CmsChannelType: " + value); 46 | } 47 | 48 | 49 | } 50 | -------------------------------------------------------------------------------- /budiot-java-server/budiot-common/src/main/java/com/budwk/app/cms/models/Cms_class_link.java: -------------------------------------------------------------------------------- 1 | package com.budwk.app.cms.models; 2 | 3 | import com.budwk.starter.database.model.BaseModel; 4 | import lombok.Data; 5 | import lombok.EqualsAndHashCode; 6 | import org.nutz.dao.entity.annotation.*; 7 | 8 | import java.io.Serializable; 9 | 10 | /** 11 | * @author wizzer@qq.com 12 | */ 13 | @Data 14 | @EqualsAndHashCode(callSuper = true) 15 | @Table("cms_class_link") 16 | @TableMeta("{'mysql-charset':'utf8mb4'}") 17 | public class Cms_class_link extends BaseModel implements Serializable { 18 | private static final long serialVersionUID = 1L; 19 | 20 | @Column 21 | @Id 22 | private long id; 23 | 24 | @Column 25 | @ColDefine(type = ColType.VARCHAR, width = 32) 26 | private String classId; 27 | 28 | @Column 29 | @ColDefine(type = ColType.VARCHAR, width = 32) 30 | private String linkId; 31 | } 32 | -------------------------------------------------------------------------------- /budiot-java-server/budiot-common/src/main/java/com/budwk/app/cms/services/CmsArticleService.java: -------------------------------------------------------------------------------- 1 | package com.budwk.app.cms.services; 2 | 3 | import com.budwk.app.cms.models.Cms_article; 4 | import com.budwk.starter.common.page.Pagination; 5 | import com.budwk.starter.database.service.BaseService; 6 | import org.nutz.dao.Condition; 7 | 8 | public interface CmsArticleService extends BaseService { 9 | /** 10 | * 获取文章列表 11 | * 12 | * @param pageNumber 页码 13 | * @param pageSize 页大小 14 | * @param cnd 查询条件 15 | * @return 16 | */ 17 | Pagination getListPage(int pageNumber, int pageSize, Condition cnd); 18 | 19 | /** 20 | * 从缓存根据条件查询一篇文章 21 | * 22 | * @param cnd 23 | * @return 24 | */ 25 | Cms_article getArticle(Condition cnd); 26 | 27 | /** 28 | * 清空缓存 29 | */ 30 | void cacheClear(); 31 | } 32 | -------------------------------------------------------------------------------- /budiot-java-server/budiot-common/src/main/java/com/budwk/app/cms/services/CmsLinkClassService.java: -------------------------------------------------------------------------------- 1 | package com.budwk.app.cms.services; 2 | 3 | 4 | import com.budwk.app.cms.models.Cms_link_class; 5 | import com.budwk.starter.database.service.BaseService; 6 | 7 | public interface CmsLinkClassService extends BaseService { 8 | 9 | } 10 | -------------------------------------------------------------------------------- /budiot-java-server/budiot-common/src/main/java/com/budwk/app/cms/services/CmsLinkService.java: -------------------------------------------------------------------------------- 1 | package com.budwk.app.cms.services; 2 | 3 | 4 | import com.budwk.app.cms.models.Cms_link; 5 | import com.budwk.starter.database.service.BaseService; 6 | 7 | import java.util.List; 8 | 9 | /** 10 | * @author wizzer(wizzer@qq.com) on 2019/12/12. 11 | */ 12 | public interface CmsLinkService extends BaseService { 13 | /** 14 | * 获取链接列表 15 | * @param code 标识符 16 | * @param size 大小 17 | * @return 18 | */ 19 | List getLinkList(String code, int size); 20 | 21 | /** 22 | * 清空缓存 23 | */ 24 | void cacheClear(); 25 | } 26 | -------------------------------------------------------------------------------- /budiot-java-server/budiot-common/src/main/java/com/budwk/app/cms/services/CmsSiteService.java: -------------------------------------------------------------------------------- 1 | package com.budwk.app.cms.services; 2 | 3 | 4 | import com.budwk.app.cms.models.Cms_site; 5 | import com.budwk.starter.database.service.BaseService; 6 | 7 | /** 8 | * @author wizzer(wizzer@qq.com) on 2018/3/16. 9 | */ 10 | public interface CmsSiteService extends BaseService { 11 | /** 12 | * 通过编码获取站点信息 13 | * 14 | * @param code 站点标识 15 | * @return 16 | */ 17 | Cms_site getSite(String code); 18 | 19 | /** 20 | * 清空缓存 21 | */ 22 | void cacheClear(); 23 | } 24 | -------------------------------------------------------------------------------- /budiot-java-server/budiot-common/src/main/java/com/budwk/app/cms/services/impl/CmsLinkClassServiceImpl.java: -------------------------------------------------------------------------------- 1 | package com.budwk.app.cms.services.impl; 2 | 3 | import com.budwk.app.cms.models.Cms_link_class; 4 | import com.budwk.app.cms.services.CmsLinkClassService; 5 | import com.budwk.starter.database.service.BaseServiceImpl; 6 | import org.nutz.dao.Dao; 7 | import org.nutz.ioc.loader.annotation.IocBean; 8 | 9 | @IocBean(args = {"refer:dao"}) 10 | public class CmsLinkClassServiceImpl extends BaseServiceImpl implements CmsLinkClassService { 11 | public CmsLinkClassServiceImpl(Dao dao) { 12 | super(dao); 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /budiot-java-server/budiot-common/src/main/java/com/budwk/app/iot/caches/DeviceCacheStore.java: -------------------------------------------------------------------------------- 1 | package com.budwk.app.iot.caches; 2 | 3 | import com.budwk.app.iot.models.Iot_device; 4 | import com.budwk.app.iot.models.Iot_product; 5 | import com.budwk.app.iot.objects.cache.DeviceProcessCache; 6 | 7 | public interface DeviceCacheStore { 8 | void cache(Iot_device device, Iot_product product); 9 | DeviceProcessCache getDevice(String deviceId); 10 | 11 | void update(DeviceProcessCache deviceProcessCache); 12 | } 13 | -------------------------------------------------------------------------------- /budiot-java-server/budiot-common/src/main/java/com/budwk/app/iot/caches/ProductSubCacheStore.java: -------------------------------------------------------------------------------- 1 | package com.budwk.app.iot.caches; 2 | 3 | import com.budwk.app.iot.models.Iot_product_sub; 4 | 5 | import java.util.List; 6 | 7 | public interface ProductSubCacheStore { 8 | List cache(String productId, List list); 9 | 10 | List getSubCache(String productId); 11 | 12 | } 13 | -------------------------------------------------------------------------------- /budiot-java-server/budiot-common/src/main/java/com/budwk/app/iot/enums/IotPlatform.java: -------------------------------------------------------------------------------- 1 | package com.budwk.app.iot.enums; 2 | 3 | import org.nutz.json.JsonShape; 4 | 5 | /** 6 | * 接入平台 7 | * @author wizzer.cn 8 | */ 9 | @JsonShape(JsonShape.Type.OBJECT) 10 | public enum IotPlatform { 11 | DIRECT("DIRECT", "设备直连"), 12 | AEP("AEP", "电信AEP平台"), 13 | ONENET("ONENET", "移动OneNet平台"), 14 | OPENLUATDTU("OPENLUATDTU","合宙DTU平台"), 15 | OTHER("OTHER", "其他"); 16 | 17 | private String value; 18 | private String text; 19 | 20 | IotPlatform(String value, String text) { 21 | this.value = value; 22 | this.text = text; 23 | } 24 | 25 | public String getValue() { 26 | return value; 27 | } 28 | 29 | public String getText() { 30 | return text; 31 | } 32 | 33 | public String value() { 34 | return value; 35 | } 36 | 37 | public String text() { 38 | return text; 39 | } 40 | 41 | public static IotPlatform from(String value) { 42 | for (IotPlatform t : values()) { 43 | if (t.value.equals(value)) { 44 | return t; 45 | } 46 | } 47 | throw new IllegalArgumentException("unknown IotPlatform: " + value); 48 | } 49 | } 50 | -------------------------------------------------------------------------------- /budiot-java-server/budiot-common/src/main/java/com/budwk/app/iot/enums/SceneActionType.java: -------------------------------------------------------------------------------- 1 | package com.budwk.app.iot.enums; 2 | 3 | import org.nutz.json.JsonShape; 4 | 5 | @JsonShape(JsonShape.Type.OBJECT) 6 | public enum SceneActionType { 7 | CMD("CMD", "设备指令"), 8 | SMS("SMS", "短信通知"), 9 | EMAIL("EMAIL", "邮件通知"), 10 | ; 11 | 12 | private String value; 13 | private String text; 14 | 15 | SceneActionType(String value, String text) { 16 | this.value = value; 17 | this.text = text; 18 | } 19 | 20 | public String getValue() { 21 | return value; 22 | } 23 | 24 | public String getText() { 25 | return text; 26 | } 27 | 28 | public String value() { 29 | return value; 30 | } 31 | 32 | public String text() { 33 | return text; 34 | } 35 | 36 | public static SceneActionType from(String value) { 37 | for (SceneActionType t : values()) { 38 | if (t.value.equals(value)) { 39 | return t; 40 | } 41 | } 42 | throw new IllegalArgumentException("unknown ProtocolType: " + value); 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /budiot-java-server/budiot-common/src/main/java/com/budwk/app/iot/enums/SceneTermType.java: -------------------------------------------------------------------------------- 1 | package com.budwk.app.iot.enums; 2 | 3 | import org.nutz.json.JsonShape; 4 | 5 | @JsonShape(JsonShape.Type.OBJECT) 6 | public enum SceneTermType { 7 | eq("eq", "等于"), 8 | neq("neq", "不等于"), 9 | gt("gt", "大于"), 10 | gte("gte", "大于等于"), 11 | lt("lt", "小于"), 12 | lte("lte", "小于等于"), 13 | btw("btw", "在...之间"), 14 | nbtw("nbtw", "不在...之间"), 15 | ; 16 | 17 | private String value; 18 | private String text; 19 | 20 | SceneTermType(String value, String text) { 21 | this.value = value; 22 | this.text = text; 23 | } 24 | 25 | public String getValue() { 26 | return value; 27 | } 28 | 29 | public String getText() { 30 | return text; 31 | } 32 | 33 | public String value() { 34 | return value; 35 | } 36 | 37 | public String text() { 38 | return text; 39 | } 40 | 41 | public static SceneTermType from(String value) { 42 | for (SceneTermType t : values()) { 43 | if (t.value.equals(value)) { 44 | return t; 45 | } 46 | } 47 | throw new IllegalArgumentException("unknown ProtocolType: " + value); 48 | } 49 | } 50 | -------------------------------------------------------------------------------- /budiot-java-server/budiot-common/src/main/java/com/budwk/app/iot/models/Iot_device_prop.java: -------------------------------------------------------------------------------- 1 | package com.budwk.app.iot.models; 2 | 3 | import com.budwk.starter.common.openapi.annotation.ApiModel; 4 | import com.budwk.starter.database.model.BaseModel; 5 | import lombok.Data; 6 | import lombok.EqualsAndHashCode; 7 | import org.nutz.dao.entity.annotation.*; 8 | 9 | import java.io.Serializable; 10 | import java.util.Map; 11 | 12 | @Data 13 | @EqualsAndHashCode(callSuper = true) 14 | @Table("iot_device_prop") 15 | @TableMeta("{'mysql-charset':'utf8mb4'}") 16 | @Comment("设备属性表") 17 | @ApiModel(description = "设备属性") 18 | public class Iot_device_prop extends BaseModel implements Serializable { 19 | 20 | @Column 21 | @Name 22 | @ColDefine(type = ColType.VARCHAR, width = 32) 23 | @Comment("设备id") 24 | private String deviceId; 25 | 26 | @Column 27 | @Comment("json配置") 28 | @ColDefine(type = ColType.MYSQL_JSON) 29 | private Map properties; 30 | } 31 | -------------------------------------------------------------------------------- /budiot-java-server/budiot-common/src/main/java/com/budwk/app/iot/objects/dto/ValueTextDTO.java: -------------------------------------------------------------------------------- 1 | package com.budwk.app.iot.objects.dto; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Data; 5 | import lombok.NoArgsConstructor; 6 | import org.nutz.lang.Strings; 7 | 8 | import java.io.Serializable; 9 | import java.util.Map; 10 | 11 | @Data 12 | @AllArgsConstructor 13 | @NoArgsConstructor 14 | public class ValueTextDTO implements Serializable { 15 | 16 | 17 | private static final long serialVersionUID = 9165710856851695530L; 18 | private T value; 19 | private String text; 20 | 21 | public static ValueTextDTO fromMap(Map map) { 22 | return new ValueTextDTO<>(map.get("value"), Strings.sBlank(map.get("text"))); 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /budiot-java-server/budiot-common/src/main/java/com/budwk/app/iot/services/IotClassifyService.java: -------------------------------------------------------------------------------- 1 | package com.budwk.app.iot.services; 2 | 3 | import com.budwk.app.iot.models.Iot_classify; 4 | import com.budwk.starter.database.service.BaseService; 5 | 6 | public interface IotClassifyService extends BaseService { 7 | void save(Iot_classify classify, String pid); 8 | void deleteAndChild(Iot_classify classify); 9 | 10 | } 11 | -------------------------------------------------------------------------------- /budiot-java-server/budiot-common/src/main/java/com/budwk/app/iot/services/IotDeviceCmdService.java: -------------------------------------------------------------------------------- 1 | package com.budwk.app.iot.services; 2 | 3 | import com.budwk.app.iot.enums.DeviceCmdStatus; 4 | import com.budwk.app.iot.models.Iot_device_cmd; 5 | import com.budwk.starter.database.service.BaseService; 6 | 7 | public interface IotDeviceCmdService extends BaseService { 8 | int getWaitCount(String deviceId); 9 | 10 | void makeCommandSend(String cmdId); 11 | 12 | void makeCommandFinish(String cmdId, DeviceCmdStatus status, String result); 13 | } 14 | -------------------------------------------------------------------------------- /budiot-java-server/budiot-common/src/main/java/com/budwk/app/iot/services/IotDeviceLogService.java: -------------------------------------------------------------------------------- 1 | package com.budwk.app.iot.services; 2 | 3 | import com.budwk.app.iot.models.Iot_device_log; 4 | import com.budwk.starter.database.service.BaseService; 5 | 6 | public interface IotDeviceLogService extends BaseService { 7 | void log(String note, String deviceId, String operatorId, String operatorName); 8 | } 9 | -------------------------------------------------------------------------------- /budiot-java-server/budiot-common/src/main/java/com/budwk/app/iot/services/IotDevicePropService.java: -------------------------------------------------------------------------------- 1 | package com.budwk.app.iot.services; 2 | 3 | import com.budwk.app.iot.models.Iot_device_prop; 4 | import com.budwk.starter.database.service.BaseService; 5 | 6 | public interface IotDevicePropService extends BaseService { 7 | } 8 | -------------------------------------------------------------------------------- /budiot-java-server/budiot-common/src/main/java/com/budwk/app/iot/services/IotProductAttrService.java: -------------------------------------------------------------------------------- 1 | package com.budwk.app.iot.services; 2 | 3 | import com.budwk.app.iot.models.Iot_product_attr; 4 | import com.budwk.starter.database.service.BaseService; 5 | 6 | import java.util.List; 7 | 8 | public interface IotProductAttrService extends BaseService { 9 | String importData(String productId, String fileName, List list, boolean over, String userId, String loginname); 10 | 11 | } 12 | -------------------------------------------------------------------------------- /budiot-java-server/budiot-common/src/main/java/com/budwk/app/iot/services/IotProductCmdAttrService.java: -------------------------------------------------------------------------------- 1 | package com.budwk.app.iot.services; 2 | 3 | import com.budwk.app.iot.models.Iot_product_cmd_attr; 4 | import com.budwk.starter.database.service.BaseService; 5 | 6 | public interface IotProductCmdAttrService extends BaseService { 7 | } 8 | -------------------------------------------------------------------------------- /budiot-java-server/budiot-common/src/main/java/com/budwk/app/iot/services/IotProductCmdService.java: -------------------------------------------------------------------------------- 1 | package com.budwk.app.iot.services; 2 | 3 | import com.budwk.app.iot.models.Iot_product_attr; 4 | import com.budwk.app.iot.models.Iot_product_cmd; 5 | import com.budwk.starter.database.service.BaseService; 6 | 7 | import java.util.List; 8 | 9 | public interface IotProductCmdService extends BaseService { 10 | String importData(String productId, String json, boolean over, String userId, String loginname); 11 | } 12 | -------------------------------------------------------------------------------- /budiot-java-server/budiot-common/src/main/java/com/budwk/app/iot/services/IotProductDtuService.java: -------------------------------------------------------------------------------- 1 | package com.budwk.app.iot.services; 2 | 3 | import com.budwk.app.iot.models.Iot_product_dtu; 4 | import com.budwk.starter.database.service.BaseService; 5 | 6 | /** 7 | * @author wizzer 8 | */ 9 | public interface IotProductDtuService extends BaseService { 10 | 11 | void save(Iot_product_dtu productDtu); 12 | } -------------------------------------------------------------------------------- /budiot-java-server/budiot-common/src/main/java/com/budwk/app/iot/services/IotProductEventService.java: -------------------------------------------------------------------------------- 1 | package com.budwk.app.iot.services; 2 | 3 | import com.budwk.app.iot.models.Iot_product_event; 4 | import com.budwk.starter.database.service.BaseService; 5 | 6 | public interface IotProductEventService extends BaseService { 7 | } 8 | -------------------------------------------------------------------------------- /budiot-java-server/budiot-common/src/main/java/com/budwk/app/iot/services/IotProductFirmwareDeviceService.java: -------------------------------------------------------------------------------- 1 | package com.budwk.app.iot.services; 2 | 3 | import com.budwk.app.iot.models.Iot_device; 4 | import com.budwk.app.iot.models.Iot_product; 5 | import com.budwk.app.iot.models.Iot_product_attr; 6 | import com.budwk.app.iot.models.Iot_product_firmware_device; 7 | import com.budwk.starter.common.exception.BaseException; 8 | import com.budwk.starter.database.service.BaseService; 9 | import org.nutz.dao.Cnd; 10 | import org.nutz.lang.Strings; 11 | 12 | import java.util.List; 13 | 14 | /** 15 | * @author wizzer 16 | */ 17 | public interface IotProductFirmwareDeviceService extends BaseService { 18 | String importData(String productId, String firmwareId, String fileName, List list, boolean over, String userId, String loginname); 19 | } -------------------------------------------------------------------------------- /budiot-java-server/budiot-common/src/main/java/com/budwk/app/iot/services/IotProductFirmwareService.java: -------------------------------------------------------------------------------- 1 | package com.budwk.app.iot.services; 2 | 3 | import com.budwk.app.iot.models.Iot_product_firmware; 4 | import com.budwk.starter.database.service.BaseService; 5 | 6 | /** 7 | * @author wizzer 8 | */ 9 | public interface IotProductFirmwareService extends BaseService { 10 | 11 | void deleteFirmware(String id); 12 | 13 | void deleteFirmwareDeviceId(String deviceId); 14 | } -------------------------------------------------------------------------------- /budiot-java-server/budiot-common/src/main/java/com/budwk/app/iot/services/IotProductMenuService.java: -------------------------------------------------------------------------------- 1 | package com.budwk.app.iot.services; 2 | 3 | import com.budwk.app.iot.models.Iot_product_menu; 4 | import com.budwk.starter.database.service.BaseService; 5 | 6 | /** 7 | * @author wizzer 8 | */ 9 | public interface IotProductMenuService extends BaseService { 10 | 11 | } -------------------------------------------------------------------------------- /budiot-java-server/budiot-common/src/main/java/com/budwk/app/iot/services/IotProductPropService.java: -------------------------------------------------------------------------------- 1 | package com.budwk.app.iot.services; 2 | 3 | import com.budwk.app.iot.models.Iot_product_prop; 4 | import com.budwk.starter.database.service.BaseService; 5 | 6 | public interface IotProductPropService extends BaseService { 7 | } 8 | -------------------------------------------------------------------------------- /budiot-java-server/budiot-common/src/main/java/com/budwk/app/iot/services/IotProductService.java: -------------------------------------------------------------------------------- 1 | package com.budwk.app.iot.services; 2 | 3 | import com.budwk.app.iot.models.Iot_product; 4 | import com.budwk.starter.database.service.BaseService; 5 | 6 | public interface IotProductService extends BaseService { 7 | 8 | void create(Iot_product product); 9 | } 10 | -------------------------------------------------------------------------------- /budiot-java-server/budiot-common/src/main/java/com/budwk/app/iot/services/IotProductSubService.java: -------------------------------------------------------------------------------- 1 | package com.budwk.app.iot.services; 2 | 3 | import com.budwk.app.iot.enums.SubscribeType; 4 | import com.budwk.app.iot.models.Iot_product_sub; 5 | import com.budwk.starter.database.service.BaseService; 6 | 7 | import java.util.List; 8 | 9 | public interface IotProductSubService extends BaseService { 10 | List getList(String productId, SubscribeType type); 11 | 12 | List setCache(String productId); 13 | 14 | List getSubCache(String productId); 15 | } 16 | -------------------------------------------------------------------------------- /budiot-java-server/budiot-common/src/main/java/com/budwk/app/iot/services/IotProtocolService.java: -------------------------------------------------------------------------------- 1 | package com.budwk.app.iot.services; 2 | 3 | import com.budwk.app.iot.models.Iot_protocol; 4 | import com.budwk.starter.database.service.BaseService; 5 | 6 | public interface IotProtocolService extends BaseService { 7 | } 8 | -------------------------------------------------------------------------------- /budiot-java-server/budiot-common/src/main/java/com/budwk/app/iot/services/IotSceneService.java: -------------------------------------------------------------------------------- 1 | package com.budwk.app.iot.services; 2 | 3 | import com.budwk.app.iot.models.Iot_scene; 4 | import com.budwk.starter.database.service.BaseService; 5 | 6 | public interface IotSceneService extends BaseService { 7 | void save(Iot_scene iotScene); 8 | void update(Iot_scene iotScene); 9 | void delete(Iot_scene iotScene); 10 | } -------------------------------------------------------------------------------- /budiot-java-server/budiot-common/src/main/java/com/budwk/app/iot/services/IotSceneSpaceService.java: -------------------------------------------------------------------------------- 1 | package com.budwk.app.iot.services; 2 | 3 | import com.budwk.app.iot.models.Iot_classify; 4 | import com.budwk.app.iot.models.Iot_scene_space; 5 | import com.budwk.starter.database.service.BaseService; 6 | 7 | public interface IotSceneSpaceService extends BaseService { 8 | void save(Iot_scene_space sceneSpace, String pid); 9 | 10 | void deleteAndChild(Iot_scene_space sceneSpace); 11 | 12 | } -------------------------------------------------------------------------------- /budiot-java-server/budiot-common/src/main/java/com/budwk/app/iot/services/IotSupplierService.java: -------------------------------------------------------------------------------- 1 | package com.budwk.app.iot.services; 2 | 3 | import com.budwk.app.iot.models.Iot_supplier; 4 | import com.budwk.starter.database.service.BaseService; 5 | 6 | public interface IotSupplierService extends BaseService { 7 | } 8 | -------------------------------------------------------------------------------- /budiot-java-server/budiot-common/src/main/java/com/budwk/app/iot/services/impl/IotDeviceLogServiceImpl.java: -------------------------------------------------------------------------------- 1 | package com.budwk.app.iot.services.impl; 2 | 3 | import com.budwk.app.iot.models.Iot_device_log; 4 | import com.budwk.app.iot.services.IotDeviceLogService; 5 | import com.budwk.starter.database.service.BaseServiceImpl; 6 | import org.nutz.aop.interceptor.async.Async; 7 | import org.nutz.dao.Dao; 8 | import org.nutz.ioc.loader.annotation.IocBean; 9 | 10 | @IocBean(args = {"refer:dao"}) 11 | public class IotDeviceLogServiceImpl extends BaseServiceImpl implements IotDeviceLogService { 12 | public IotDeviceLogServiceImpl(Dao dao) { 13 | super(dao); 14 | } 15 | 16 | @Async 17 | public void log(String note, String deviceId, String operatorId, String operatorName) { 18 | Iot_device_log log = new Iot_device_log(); 19 | log.setDeviceId(deviceId); 20 | log.setNote(note); 21 | log.setOperatorId(operatorId); 22 | log.setOperatorName(operatorName); 23 | log.setOperateTime(System.currentTimeMillis()); 24 | this.insert(log); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /budiot-java-server/budiot-common/src/main/java/com/budwk/app/iot/services/impl/IotDevicePropServiceImpl.java: -------------------------------------------------------------------------------- 1 | package com.budwk.app.iot.services.impl; 2 | 3 | import com.budwk.app.iot.models.Iot_device_log; 4 | import com.budwk.app.iot.models.Iot_device_prop; 5 | import com.budwk.app.iot.services.IotDeviceLogService; 6 | import com.budwk.app.iot.services.IotDevicePropService; 7 | import com.budwk.starter.database.service.BaseServiceImpl; 8 | import org.nutz.dao.Dao; 9 | import org.nutz.ioc.loader.annotation.IocBean; 10 | 11 | @IocBean(args = {"refer:dao"}) 12 | public class IotDevicePropServiceImpl extends BaseServiceImpl implements IotDevicePropService { 13 | public IotDevicePropServiceImpl(Dao dao) { 14 | super(dao); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /budiot-java-server/budiot-common/src/main/java/com/budwk/app/iot/services/impl/IotProductCmdAttrServiceImpl.java: -------------------------------------------------------------------------------- 1 | package com.budwk.app.iot.services.impl; 2 | 3 | import com.budwk.app.iot.models.Iot_product_cmd_attr; 4 | import com.budwk.app.iot.services.IotProductCmdAttrService; 5 | import com.budwk.starter.database.service.BaseServiceImpl; 6 | import org.nutz.dao.Dao; 7 | import org.nutz.ioc.loader.annotation.IocBean; 8 | 9 | @IocBean(args = {"refer:dao"}) 10 | public class IotProductCmdAttrServiceImpl extends BaseServiceImpl implements IotProductCmdAttrService { 11 | public IotProductCmdAttrServiceImpl(Dao dao) { 12 | super(dao); 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /budiot-java-server/budiot-common/src/main/java/com/budwk/app/iot/services/impl/IotProductEventServiceImpl.java: -------------------------------------------------------------------------------- 1 | package com.budwk.app.iot.services.impl; 2 | 3 | import com.budwk.app.iot.models.Iot_product_event; 4 | import com.budwk.app.iot.services.IotProductEventService; 5 | import com.budwk.starter.database.service.BaseServiceImpl; 6 | import org.nutz.dao.Dao; 7 | import org.nutz.ioc.loader.annotation.IocBean; 8 | 9 | @IocBean(args = {"refer:dao"}) 10 | public class IotProductEventServiceImpl extends BaseServiceImpl implements IotProductEventService { 11 | public IotProductEventServiceImpl(Dao dao) { 12 | super(dao); 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /budiot-java-server/budiot-common/src/main/java/com/budwk/app/iot/services/impl/IotProductMenuServiceImpl.java: -------------------------------------------------------------------------------- 1 | package com.budwk.app.iot.services.impl; 2 | 3 | import com.budwk.app.iot.models.Iot_product_menu; 4 | import com.budwk.app.iot.services.IotProductMenuService; 5 | import com.budwk.starter.database.service.BaseServiceImpl; 6 | import org.nutz.dao.Dao; 7 | import org.nutz.ioc.loader.annotation.IocBean; 8 | 9 | /** 10 | * @author wizzer 11 | */ 12 | @IocBean(args = {"refer:dao"}) 13 | public class IotProductMenuServiceImpl extends BaseServiceImpl implements IotProductMenuService { 14 | public IotProductMenuServiceImpl(Dao dao) { 15 | super(dao); 16 | } 17 | } -------------------------------------------------------------------------------- /budiot-java-server/budiot-common/src/main/java/com/budwk/app/iot/services/impl/IotProductPropServiceImpl.java: -------------------------------------------------------------------------------- 1 | package com.budwk.app.iot.services.impl; 2 | 3 | import com.budwk.app.iot.models.Iot_product_prop; 4 | import com.budwk.app.iot.services.IotProductPropService; 5 | import com.budwk.starter.database.service.BaseServiceImpl; 6 | import org.nutz.dao.Dao; 7 | import org.nutz.ioc.loader.annotation.IocBean; 8 | 9 | @IocBean(args = {"refer:dao"}) 10 | public class IotProductPropServiceImpl extends BaseServiceImpl implements IotProductPropService { 11 | public IotProductPropServiceImpl(Dao dao) { 12 | super(dao); 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /budiot-java-server/budiot-common/src/main/java/com/budwk/app/iot/services/impl/IotProtocolServiceImpl.java: -------------------------------------------------------------------------------- 1 | package com.budwk.app.iot.services.impl; 2 | 3 | import com.budwk.app.iot.models.Iot_product; 4 | import com.budwk.app.iot.models.Iot_protocol; 5 | import com.budwk.app.iot.services.IotProductService; 6 | import com.budwk.app.iot.services.IotProtocolService; 7 | import com.budwk.starter.database.service.BaseServiceImpl; 8 | import org.nutz.dao.Dao; 9 | import org.nutz.ioc.loader.annotation.IocBean; 10 | 11 | @IocBean(args = {"refer:dao"}) 12 | public class IotProtocolServiceImpl extends BaseServiceImpl implements IotProtocolService { 13 | public IotProtocolServiceImpl(Dao dao) { 14 | super(dao); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /budiot-java-server/budiot-common/src/main/java/com/budwk/app/iot/services/impl/IotSupplierServiceImpl.java: -------------------------------------------------------------------------------- 1 | package com.budwk.app.iot.services.impl; 2 | 3 | import com.budwk.app.iot.models.Iot_supplier; 4 | import com.budwk.app.iot.services.IotSupplierService; 5 | import com.budwk.starter.database.service.BaseServiceImpl; 6 | import org.nutz.dao.Dao; 7 | import org.nutz.ioc.loader.annotation.IocBean; 8 | 9 | @IocBean(args = {"refer:dao"}) 10 | public class IotSupplierServiceImpl extends BaseServiceImpl implements IotSupplierService { 11 | public IotSupplierServiceImpl(Dao dao) { 12 | super(dao); 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /budiot-java-server/budiot-common/src/main/java/com/budwk/app/sys/enums/SysConfigType.java: -------------------------------------------------------------------------------- 1 | package com.budwk.app.sys.enums; 2 | 3 | import org.nutz.json.JsonShape; 4 | 5 | /** 6 | * 系统参数类型 7 | * 8 | * @author wizzer@qq.com 9 | */ 10 | @JsonShape(JsonShape.Type.OBJECT) 11 | public enum SysConfigType { 12 | TEXT("TEXT", "文本"), 13 | IMAGE("IMAGE", "图片"), 14 | BOOL("BOOL", "布尔值"); 15 | 16 | private String value; 17 | private String text; 18 | 19 | SysConfigType(String value, String text) { 20 | this.value = value; 21 | this.text = text; 22 | } 23 | 24 | public String getValue() { 25 | return value; 26 | } 27 | 28 | public String getText() { 29 | return text; 30 | } 31 | 32 | public String value() { 33 | return value; 34 | } 35 | 36 | public String text() { 37 | return text; 38 | } 39 | 40 | public static SysConfigType from(String value) { 41 | for (SysConfigType t : values()) { 42 | if (t.value.equals(value)) { 43 | return t; 44 | } 45 | } 46 | throw new IllegalArgumentException("unknown SysConfigType: " + value); 47 | } 48 | 49 | 50 | } 51 | 52 | -------------------------------------------------------------------------------- /budiot-java-server/budiot-common/src/main/java/com/budwk/app/sys/enums/SysLeaderType.java: -------------------------------------------------------------------------------- 1 | package com.budwk.app.sys.enums; 2 | 3 | import org.nutz.json.JsonShape; 4 | 5 | /** 6 | * 系统消息类型 7 | * JsonShape注解用于Json和实体类的相互转换,必须加 8 | * 9 | * @author wizzer@qq.com 10 | */ 11 | @JsonShape(JsonShape.Type.OBJECT) 12 | public enum SysLeaderType { 13 | LEADER("LEADER", "单位主管"), 14 | HIGHER("HIGHER", "上级主管领导"), 15 | ASSIGNER("ASSIGNER", "上级分管领导"); 16 | 17 | private String value; 18 | private String text; 19 | 20 | SysLeaderType(String value, String text) { 21 | this.value = value; 22 | this.text = text; 23 | } 24 | 25 | public String getValue() { 26 | return value; 27 | } 28 | 29 | public String getText() { 30 | return text; 31 | } 32 | 33 | public String value() { 34 | return value; 35 | } 36 | 37 | public String text() { 38 | return text; 39 | } 40 | 41 | public static SysLeaderType from(String value) { 42 | for (SysLeaderType t : values()) { 43 | if (t.value.equals(value)) { 44 | return t; 45 | } 46 | } 47 | throw new IllegalArgumentException("unknown SysUnitType: " + value); 48 | } 49 | 50 | 51 | } 52 | -------------------------------------------------------------------------------- /budiot-java-server/budiot-common/src/main/java/com/budwk/app/sys/enums/SysMsgScope.java: -------------------------------------------------------------------------------- 1 | package com.budwk.app.sys.enums; 2 | 3 | import org.nutz.json.JsonShape; 4 | 5 | /** 6 | * 消息发送范围 7 | * @author wizzer@qq.com 8 | */ 9 | @JsonShape(JsonShape.Type.OBJECT) 10 | public enum SysMsgScope { 11 | ALL("ALL", "全部用户"), 12 | SCOPE("SCOPE", "指定用户"); 13 | 14 | private String value; 15 | private String text; 16 | 17 | SysMsgScope(String value, String text) { 18 | this.value = value; 19 | this.text = text; 20 | } 21 | 22 | public String getValue() { 23 | return value; 24 | } 25 | 26 | public String getText() { 27 | return text; 28 | } 29 | 30 | public String value() { 31 | return value; 32 | } 33 | 34 | public String text() { 35 | return text; 36 | } 37 | 38 | public static SysMsgScope from(String value) { 39 | for (SysMsgScope t : values()) { 40 | if (t.value.equals(value)) { 41 | return t; 42 | } 43 | } 44 | throw new IllegalArgumentException("unknown SysMsgScope: " + value); 45 | } 46 | 47 | } 48 | -------------------------------------------------------------------------------- /budiot-java-server/budiot-common/src/main/java/com/budwk/app/sys/enums/SysMsgType.java: -------------------------------------------------------------------------------- 1 | package com.budwk.app.sys.enums; 2 | 3 | import org.nutz.json.JsonShape; 4 | 5 | /** 6 | * 系统消息类型 7 | * JsonShape注解用于Json和实体类的相互转换,必须加 8 | * 9 | * @author wizzer@qq.com 10 | */ 11 | @JsonShape(JsonShape.Type.OBJECT) 12 | public enum SysMsgType { 13 | SYSTEM("SYSTEM", "系统消息"), 14 | USER("USER", "用户消息"); 15 | 16 | private String value; 17 | private String text; 18 | 19 | SysMsgType(String value, String text) { 20 | this.value = value; 21 | this.text = text; 22 | } 23 | 24 | public String getValue() { 25 | return value; 26 | } 27 | 28 | public String getText() { 29 | return text; 30 | } 31 | 32 | public String value() { 33 | return value; 34 | } 35 | 36 | public String text() { 37 | return text; 38 | } 39 | 40 | public static SysMsgType from(String value) { 41 | for (SysMsgType t : values()) { 42 | if (t.value.equals(value)) { 43 | return t; 44 | } 45 | } 46 | throw new IllegalArgumentException("unknown SysMsgType: " + value); 47 | } 48 | 49 | 50 | } 51 | -------------------------------------------------------------------------------- /budiot-java-server/budiot-common/src/main/java/com/budwk/app/sys/enums/SysUnitType.java: -------------------------------------------------------------------------------- 1 | package com.budwk.app.sys.enums; 2 | 3 | import org.nutz.json.JsonShape; 4 | 5 | /** 6 | * 系统消息类型 7 | * JsonShape注解用于Json和实体类的相互转换,必须加 8 | * 9 | * @author wizzer@qq.com 10 | */ 11 | @JsonShape(JsonShape.Type.OBJECT) 12 | public enum SysUnitType { 13 | GROUP("GROUP", "总公司"), 14 | COMPANY("COMPANY", "分公司"), 15 | UNIT("UNIT", "部门"); 16 | 17 | private String value; 18 | private String text; 19 | 20 | SysUnitType(String value, String text) { 21 | this.value = value; 22 | this.text = text; 23 | } 24 | 25 | public String getValue() { 26 | return value; 27 | } 28 | 29 | public String getText() { 30 | return text; 31 | } 32 | 33 | public String value() { 34 | return value; 35 | } 36 | 37 | public String text() { 38 | return text; 39 | } 40 | 41 | public static SysUnitType from(String value) { 42 | for (SysUnitType t : values()) { 43 | if (t.value.equals(value)) { 44 | return t; 45 | } 46 | } 47 | throw new IllegalArgumentException("unknown SysUnitType: " + value); 48 | } 49 | 50 | 51 | } 52 | -------------------------------------------------------------------------------- /budiot-java-server/budiot-common/src/main/java/com/budwk/app/sys/models/Sys_role_app.java: -------------------------------------------------------------------------------- 1 | package com.budwk.app.sys.models; 2 | 3 | import com.budwk.starter.database.model.BaseModel; 4 | import lombok.Data; 5 | import lombok.EqualsAndHashCode; 6 | import org.nutz.dao.entity.annotation.*; 7 | import org.nutz.dao.interceptor.annotation.PrevInsert; 8 | 9 | import java.io.Serializable; 10 | 11 | /** 12 | * 系统角色应用关联表 13 | * 14 | * @author wizzer@qq.com 15 | */ 16 | @Data 17 | @EqualsAndHashCode(callSuper = true) 18 | @Table("sys_role_app") 19 | @TableMeta("{'mysql-charset':'utf8mb4'}") 20 | public class Sys_role_app extends BaseModel implements Serializable { 21 | 22 | private static final long serialVersionUID = 2202555838954679931L; 23 | @Column 24 | @Name 25 | @PrevInsert(uu32 = true) 26 | @ColDefine(type = ColType.VARCHAR, width = 32) 27 | private String id; 28 | 29 | @Column 30 | @ColDefine(type = ColType.VARCHAR, width = 32) 31 | private String roleId; 32 | 33 | @Column 34 | @ColDefine(type = ColType.VARCHAR, width = 32) 35 | private String appId; 36 | } 37 | -------------------------------------------------------------------------------- /budiot-java-server/budiot-common/src/main/java/com/budwk/app/sys/models/Sys_role_user.java: -------------------------------------------------------------------------------- 1 | package com.budwk.app.sys.models; 2 | 3 | import com.budwk.starter.database.model.BaseModel; 4 | import lombok.Data; 5 | import lombok.EqualsAndHashCode; 6 | import org.nutz.dao.entity.annotation.*; 7 | import org.nutz.dao.interceptor.annotation.PrevInsert; 8 | 9 | import java.io.Serializable; 10 | 11 | /** 12 | * 系统角色用户关联表 13 | * 14 | * @author wizzer@qq.com 15 | */ 16 | @Data 17 | @EqualsAndHashCode(callSuper = true) 18 | @Table("sys_role_user") 19 | @TableMeta("{'mysql-charset':'utf8mb4'}") 20 | public class Sys_role_user extends BaseModel implements Serializable { 21 | 22 | private static final long serialVersionUID = -507747309971899026L; 23 | @Column 24 | @Name 25 | @PrevInsert(uu32 = true) 26 | @ColDefine(type = ColType.VARCHAR, width = 32) 27 | private String id; 28 | 29 | @Column 30 | @ColDefine(type = ColType.VARCHAR, width = 32) 31 | private String roleId; 32 | 33 | @Column 34 | @ColDefine(type = ColType.VARCHAR, width = 32) 35 | private String userId; 36 | } 37 | -------------------------------------------------------------------------------- /budiot-java-server/budiot-common/src/main/java/com/budwk/app/sys/providers/SysAuthProvider.java: -------------------------------------------------------------------------------- 1 | package com.budwk.app.sys.providers; 2 | 3 | import com.budwk.app.sys.services.SysUserService; 4 | import com.budwk.starter.security.IAuthProvider; 5 | import org.nutz.ioc.loader.annotation.Inject; 6 | import org.nutz.ioc.loader.annotation.IocBean; 7 | 8 | import java.util.List; 9 | 10 | /** 11 | * @author wizzer@qq.com 12 | */ 13 | @IocBean 14 | public class SysAuthProvider implements IAuthProvider { 15 | @Inject 16 | private SysUserService sysUserService; 17 | 18 | @Override 19 | public List getPermissionList(String userId) { 20 | return sysUserService.getPermissionList(userId); 21 | } 22 | 23 | @Override 24 | public List getRoleList(String userId) { 25 | return sysUserService.getRoleList(userId); 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /budiot-java-server/budiot-common/src/main/java/com/budwk/app/sys/services/SysAppService.java: -------------------------------------------------------------------------------- 1 | package com.budwk.app.sys.services; 2 | 3 | import com.budwk.app.sys.models.Sys_app; 4 | import com.budwk.starter.common.result.Result; 5 | import com.budwk.starter.database.service.BaseService; 6 | 7 | import java.util.List; 8 | 9 | /** 10 | * @author wizzer@qq.com 11 | */ 12 | public interface SysAppService extends BaseService { 13 | 14 | List listAll(); 15 | 16 | List listEnable(); 17 | 18 | void cacheClear(); 19 | } 20 | -------------------------------------------------------------------------------- /budiot-java-server/budiot-common/src/main/java/com/budwk/app/sys/services/SysGroupService.java: -------------------------------------------------------------------------------- 1 | package com.budwk.app.sys.services; 2 | 3 | import com.budwk.app.sys.models.Sys_group; 4 | import com.budwk.starter.database.service.BaseService; 5 | 6 | /** 7 | * @author wizzer@qq.com 8 | */ 9 | public interface SysGroupService extends BaseService { 10 | /** 11 | * 删除角色组 12 | * @param groupId 13 | */ 14 | void clearGroup(String groupId); 15 | } 16 | -------------------------------------------------------------------------------- /budiot-java-server/budiot-common/src/main/java/com/budwk/app/sys/services/SysMenuService.java: -------------------------------------------------------------------------------- 1 | package com.budwk.app.sys.services; 2 | 3 | import com.budwk.app.sys.models.Sys_menu; 4 | import com.budwk.starter.database.service.BaseService; 5 | import org.nutz.lang.util.NutMap; 6 | 7 | import java.util.List; 8 | 9 | /** 10 | * @author wizzer@qq.com 11 | */ 12 | public interface SysMenuService extends BaseService { 13 | 14 | /** 15 | * 保存菜单 16 | * 17 | * @param appId 应用ID 18 | * @param menu 菜单对象 19 | * @param pid 父节点ID 20 | * @param datas 数据权限 21 | */ 22 | void save(String appId, Sys_menu menu, String pid, List datas); 23 | 24 | /** 25 | * 编辑菜单 26 | * 27 | * @param menu 菜单对象 28 | * @param pid 父节点ID 29 | * @param datas 数据权限 30 | */ 31 | void edit(Sys_menu menu, String pid, List datas); 32 | 33 | /** 34 | * 级联删除菜单 35 | * 36 | * @param menu 菜单对象 37 | */ 38 | void deleteAndChild(Sys_menu menu); 39 | } 40 | -------------------------------------------------------------------------------- /budiot-java-server/budiot-common/src/main/java/com/budwk/app/sys/services/SysMsgUserService.java: -------------------------------------------------------------------------------- 1 | package com.budwk.app.sys.services; 2 | 3 | 4 | import com.budwk.app.sys.models.Sys_msg_user; 5 | import com.budwk.starter.database.service.BaseService; 6 | 7 | /** 8 | * @author wizzer@qq.com 9 | */ 10 | public interface SysMsgUserService extends BaseService { 11 | 12 | } 13 | -------------------------------------------------------------------------------- /budiot-java-server/budiot-common/src/main/java/com/budwk/app/sys/services/SysPostService.java: -------------------------------------------------------------------------------- 1 | package com.budwk.app.sys.services; 2 | 3 | import com.budwk.app.sys.models.Sys_post; 4 | import com.budwk.starter.database.service.BaseService; 5 | 6 | /** 7 | * @author wizzer@qq.com 8 | */ 9 | public interface SysPostService extends BaseService { 10 | } 11 | -------------------------------------------------------------------------------- /budiot-java-server/budiot-common/src/main/java/com/budwk/app/sys/services/SysRoleAppService.java: -------------------------------------------------------------------------------- 1 | package com.budwk.app.sys.services; 2 | 3 | import com.budwk.app.sys.models.Sys_role_app; 4 | import com.budwk.starter.database.service.BaseService; 5 | 6 | /** 7 | * @author wizzer@qq.com 8 | */ 9 | public interface SysRoleAppService extends BaseService { 10 | } 11 | -------------------------------------------------------------------------------- /budiot-java-server/budiot-common/src/main/java/com/budwk/app/sys/services/SysRoleMenuService.java: -------------------------------------------------------------------------------- 1 | package com.budwk.app.sys.services; 2 | 3 | import com.budwk.app.sys.models.Sys_role_menu; 4 | import com.budwk.starter.database.service.BaseService; 5 | 6 | /** 7 | * @author wizzer@qq.com 8 | */ 9 | public interface SysRoleMenuService extends BaseService { 10 | } 11 | -------------------------------------------------------------------------------- /budiot-java-server/budiot-common/src/main/java/com/budwk/app/sys/services/SysTaskHistoryService.java: -------------------------------------------------------------------------------- 1 | package com.budwk.app.sys.services; 2 | 3 | import com.budwk.app.sys.models.Sys_task_history; 4 | import com.budwk.starter.common.page.Pagination; 5 | import com.budwk.starter.database.service.BaseService; 6 | import org.nutz.dao.Condition; 7 | 8 | /** 9 | * @author wizzer@qq.com 10 | */ 11 | public interface SysTaskHistoryService extends BaseService { 12 | void save(Sys_task_history sysTaskHistory); 13 | Pagination getList(String month, int pageNo, int pageSize, Condition cnd); 14 | } 15 | -------------------------------------------------------------------------------- /budiot-java-server/budiot-common/src/main/java/com/budwk/app/sys/services/SysTaskService.java: -------------------------------------------------------------------------------- 1 | package com.budwk.app.sys.services; 2 | 3 | import com.budwk.app.sys.models.Sys_task; 4 | import com.budwk.starter.database.service.BaseService; 5 | 6 | /** 7 | * @author wizzer@qq.com 8 | */ 9 | public interface SysTaskService extends BaseService { 10 | } 11 | -------------------------------------------------------------------------------- /budiot-java-server/budiot-common/src/main/java/com/budwk/app/sys/services/SysUnitUserService.java: -------------------------------------------------------------------------------- 1 | package com.budwk.app.sys.services; 2 | 3 | import com.budwk.app.sys.models.Sys_unit_user; 4 | import com.budwk.starter.database.service.BaseService; 5 | 6 | /** 7 | * @author wizzer@qq.com 8 | */ 9 | public interface SysUnitUserService extends BaseService { 10 | } 11 | -------------------------------------------------------------------------------- /budiot-java-server/budiot-common/src/main/java/com/budwk/app/sys/services/SysUserPwdService.java: -------------------------------------------------------------------------------- 1 | package com.budwk.app.sys.services; 2 | 3 | import com.budwk.app.sys.models.Sys_user_pwd; 4 | import com.budwk.starter.database.service.BaseService; 5 | 6 | /** 7 | * @author wizzer@qq.com 8 | */ 9 | public interface SysUserPwdService extends BaseService { 10 | 11 | } 12 | -------------------------------------------------------------------------------- /budiot-java-server/budiot-common/src/main/java/com/budwk/app/sys/services/SysUserSecurityService.java: -------------------------------------------------------------------------------- 1 | package com.budwk.app.sys.services; 2 | 3 | 4 | import com.budwk.app.sys.models.Sys_user_security; 5 | import com.budwk.starter.database.service.BaseService; 6 | 7 | /** 8 | * @author wizzer@qq.com 9 | */ 10 | public interface SysUserSecurityService extends BaseService { 11 | /** 12 | * 更新或修改账户安全配置 13 | * @param security 对象 14 | */ 15 | void insertOrUpdate(Sys_user_security security); 16 | 17 | /** 18 | * 获取账户安全配置 19 | * @return 20 | */ 21 | Sys_user_security getWithCache(); 22 | 23 | /** 24 | * 清除缓存 25 | */ 26 | void cacheClear(); 27 | } 28 | -------------------------------------------------------------------------------- /budiot-java-server/budiot-common/src/main/java/com/budwk/app/sys/services/impl/SysMsgUserServiceImpl.java: -------------------------------------------------------------------------------- 1 | package com.budwk.app.sys.services.impl; 2 | 3 | import com.budwk.app.sys.models.Sys_msg_user; 4 | import com.budwk.app.sys.services.SysMsgUserService; 5 | import com.budwk.starter.database.service.BaseServiceImpl; 6 | import org.nutz.dao.Dao; 7 | import org.nutz.ioc.loader.annotation.IocBean; 8 | 9 | /** 10 | * @author wizzer@qq.com 11 | */ 12 | @IocBean(args = {"refer:dao"}) 13 | public class SysMsgUserServiceImpl extends BaseServiceImpl implements SysMsgUserService { 14 | public SysMsgUserServiceImpl(Dao dao) { 15 | super(dao); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /budiot-java-server/budiot-common/src/main/java/com/budwk/app/sys/services/impl/SysPostServiceImpl.java: -------------------------------------------------------------------------------- 1 | package com.budwk.app.sys.services.impl; 2 | 3 | import com.budwk.app.sys.models.Sys_post; 4 | import com.budwk.app.sys.services.SysPostService; 5 | import com.budwk.starter.database.service.BaseServiceImpl; 6 | import org.nutz.dao.Dao; 7 | import org.nutz.ioc.loader.annotation.IocBean; 8 | 9 | /** 10 | * @author wizzer@qq.com 11 | */ 12 | @IocBean(args = {"refer:dao"}) 13 | public class SysPostServiceImpl extends BaseServiceImpl implements SysPostService { 14 | public SysPostServiceImpl(Dao dao) { 15 | super(dao); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /budiot-java-server/budiot-common/src/main/java/com/budwk/app/sys/services/impl/SysRoleAppServiceImpl.java: -------------------------------------------------------------------------------- 1 | package com.budwk.app.sys.services.impl; 2 | 3 | import com.budwk.app.sys.models.Sys_role_app; 4 | import com.budwk.app.sys.services.SysRoleAppService; 5 | import com.budwk.starter.database.service.BaseServiceImpl; 6 | import org.nutz.dao.Dao; 7 | import org.nutz.ioc.loader.annotation.IocBean; 8 | 9 | /** 10 | * @author wizzer@qq.com 11 | */ 12 | @IocBean(args = {"refer:dao"}) 13 | public class SysRoleAppServiceImpl extends BaseServiceImpl implements SysRoleAppService { 14 | public SysRoleAppServiceImpl(Dao dao) { 15 | super(dao); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /budiot-java-server/budiot-common/src/main/java/com/budwk/app/sys/services/impl/SysRoleMenuServiceImpl.java: -------------------------------------------------------------------------------- 1 | package com.budwk.app.sys.services.impl; 2 | 3 | import com.budwk.app.sys.models.Sys_role_menu; 4 | import com.budwk.app.sys.services.SysRoleMenuService; 5 | import com.budwk.starter.database.service.BaseServiceImpl; 6 | import org.nutz.dao.Dao; 7 | import org.nutz.ioc.loader.annotation.IocBean; 8 | 9 | /** 10 | * @author wizzer@qq.com 11 | */ 12 | @IocBean(args = {"refer:dao"}) 13 | public class SysRoleMenuServiceImpl extends BaseServiceImpl implements SysRoleMenuService { 14 | public SysRoleMenuServiceImpl(Dao dao) { 15 | super(dao); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /budiot-java-server/budiot-common/src/main/java/com/budwk/app/sys/services/impl/SysTaskServiceImpl.java: -------------------------------------------------------------------------------- 1 | package com.budwk.app.sys.services.impl; 2 | 3 | import com.budwk.app.sys.models.Sys_task; 4 | import com.budwk.app.sys.services.SysTaskService; 5 | import com.budwk.starter.database.service.BaseServiceImpl; 6 | import org.nutz.dao.Dao; 7 | import org.nutz.ioc.loader.annotation.IocBean; 8 | 9 | /** 10 | * @author wizzer@qq.com 11 | */ 12 | @IocBean(args = {"refer:dao"}) 13 | public class SysTaskServiceImpl extends BaseServiceImpl implements SysTaskService { 14 | public SysTaskServiceImpl(Dao dao) { 15 | super(dao); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /budiot-java-server/budiot-common/src/main/java/com/budwk/app/sys/services/impl/SysUnitUserServiceImpl.java: -------------------------------------------------------------------------------- 1 | package com.budwk.app.sys.services.impl; 2 | 3 | import com.budwk.app.sys.models.Sys_unit_user; 4 | import com.budwk.app.sys.services.SysUnitUserService; 5 | import com.budwk.starter.database.service.BaseServiceImpl; 6 | import org.nutz.dao.Dao; 7 | import org.nutz.ioc.loader.annotation.IocBean; 8 | 9 | /** 10 | * @author wizzer@qq.com 11 | */ 12 | @IocBean(args = {"refer:dao"}) 13 | public class SysUnitUserServiceImpl extends BaseServiceImpl implements SysUnitUserService { 14 | public SysUnitUserServiceImpl(Dao dao) { 15 | super(dao); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /budiot-java-server/budiot-common/src/main/java/com/budwk/app/sys/services/impl/SysUserPwdServiceImpl.java: -------------------------------------------------------------------------------- 1 | package com.budwk.app.sys.services.impl; 2 | 3 | import com.budwk.app.sys.models.Sys_user_pwd; 4 | import com.budwk.app.sys.services.SysUserPwdService; 5 | import com.budwk.starter.database.service.BaseServiceImpl; 6 | import lombok.extern.slf4j.Slf4j; 7 | import org.nutz.dao.Dao; 8 | import org.nutz.ioc.loader.annotation.IocBean; 9 | 10 | /** 11 | * @author wizzer@qq.com 12 | */ 13 | @IocBean(args = {"refer:dao"}) 14 | @Slf4j 15 | public class SysUserPwdServiceImpl extends BaseServiceImpl implements SysUserPwdService { 16 | public SysUserPwdServiceImpl(Dao dao) { 17 | super(dao); 18 | } 19 | 20 | } 21 | -------------------------------------------------------------------------------- /budiot-java-server/budiot-server/src/main/java/com/budwk/app/iot/commons/task/DeviceOfflineJob.java: -------------------------------------------------------------------------------- 1 | package com.budwk.app.iot.commons.task; 2 | 3 | import com.budwk.app.iot.services.IotDeviceService; 4 | import com.budwk.starter.job.annotation.SJob; 5 | import lombok.extern.slf4j.Slf4j; 6 | import org.nutz.ioc.loader.annotation.Inject; 7 | import org.nutz.ioc.loader.annotation.IocBean; 8 | import org.nutz.lang.Strings; 9 | 10 | @IocBean(name = "deviceOfflineJob", singleton = false) 11 | @Slf4j 12 | public class DeviceOfflineJob { 13 | @Inject 14 | private IotDeviceService iotDeviceService; 15 | 16 | @SJob("deviceOffline") 17 | public void deviceOffline(String taskId, String params) { 18 | try { 19 | int minutes = 30; 20 | if (Strings.isNotBlank(params) && Strings.isNumber(params)) { 21 | minutes = Integer.parseInt(params); 22 | } 23 | iotDeviceService.doUpdateOffline(minutes); 24 | } catch (Exception e) { 25 | log.error("check device offline task error: {},id: {}", e.getMessage(), taskId); 26 | } 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /budiot-java-server/budiot-server/src/main/java/com/budwk/app/sys/commons/task/NutConnectionProvider.java: -------------------------------------------------------------------------------- 1 | package com.budwk.app.sys.commons.task; 2 | 3 | import org.nutz.boot.AppContext; 4 | import org.nutz.ioc.Ioc; 5 | import org.quartz.utils.ConnectionProvider; 6 | 7 | import javax.sql.DataSource; 8 | import java.sql.Connection; 9 | import java.sql.SQLException; 10 | 11 | /** 12 | * @author wizzer@qq.com 13 | */ 14 | public class NutConnectionProvider implements ConnectionProvider { 15 | 16 | protected DataSource dataSource; 17 | protected String iocname = "dataSource"; 18 | 19 | @Override 20 | public Connection getConnection() throws SQLException { 21 | return dataSource.getConnection(); 22 | } 23 | 24 | @Override 25 | public void shutdown() throws SQLException {} 26 | 27 | @Override 28 | @SuppressWarnings("deprecation") 29 | public void initialize() throws SQLException { 30 | if (dataSource != null) { 31 | return; 32 | } 33 | Ioc ioc = AppContext.getDefault().getIoc(); 34 | dataSource = ioc.get(DataSource.class, iocname); 35 | } 36 | 37 | } -------------------------------------------------------------------------------- /budiot-java-server/budiot-server/src/main/java/com/budwk/app/sys/commons/task/TaskJob.java: -------------------------------------------------------------------------------- 1 | package com.budwk.app.sys.commons.task; 2 | 3 | import com.budwk.starter.common.constant.RedisConstant; 4 | import lombok.extern.slf4j.Slf4j; 5 | import com.budwk.starter.redis.pubsub.PubSubService; 6 | import org.nutz.ioc.loader.annotation.Inject; 7 | import org.nutz.ioc.loader.annotation.IocBean; 8 | import org.nutz.json.Json; 9 | import org.nutz.lang.Times; 10 | import org.quartz.Job; 11 | import org.quartz.JobDataMap; 12 | import org.quartz.JobExecutionContext; 13 | import org.quartz.JobExecutionException; 14 | 15 | /** 16 | * @author wizzer@qq.com 17 | */ 18 | @IocBean(singleton = false) 19 | @Slf4j 20 | public class TaskJob implements Job { 21 | @Inject 22 | private PubSubService pubSubService; 23 | 24 | @Override 25 | public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException { 26 | JobDataMap jobDataMap = jobExecutionContext.getJobDetail().getJobDataMap(); 27 | log.debug("[TaskJob] 执行任务:{},执行时间 {}", jobDataMap.getString("jobName"), Times.getNowSDT()); 28 | pubSubService.fire(RedisConstant.JOB_PUBLISH + ":" + jobDataMap.getString("jobName"), Json.toJson(jobExecutionContext.getJobDetail().getJobDataMap())); 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /budiot-java-server/budiot-server/src/main/java/com/budwk/app/sys/commons/task/job/TestJob.java: -------------------------------------------------------------------------------- 1 | package com.budwk.app.sys.commons.task.job; 2 | 3 | import com.budwk.starter.job.annotation.SJob; 4 | import lombok.extern.slf4j.Slf4j; 5 | import org.nutz.ioc.loader.annotation.IocBean; 6 | 7 | /** 8 | * @author wizzer@qq.com 9 | */ 10 | @IocBean(name = "testJob",singleton = false) 11 | @Slf4j 12 | public class TestJob { 13 | 14 | @SJob("demo") 15 | public void demo(String taskId, String params) { 16 | log.info("sjob:{} taskId:{} params:{}", "demo", taskId, params); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /budiot-vue-admin/.editorconfig: -------------------------------------------------------------------------------- 1 | # https://editorconfig.org 2 | root = true 3 | 4 | [*] 5 | charset = utf-8 6 | indent_style = space 7 | indent_size = 4 8 | end_of_line = lf 9 | insert_final_newline = true 10 | trim_trailing_whitespace = true 11 | 12 | [*.md] 13 | indent_style = tab 14 | insert_final_newline = false 15 | trim_trailing_whitespace = false 16 | -------------------------------------------------------------------------------- /budiot-vue-admin/.env: -------------------------------------------------------------------------------- 1 | # port 端口号 2 | VITE_PORT = 1820 3 | 4 | # open 运行 npm run dev 时自动打开浏览器 5 | VITE_OPEN = false 6 | -------------------------------------------------------------------------------- /budiot-vue-admin/.env.development: -------------------------------------------------------------------------------- 1 | # 本地环境 2 | ENV = 'development' 3 | 4 | # base路径 5 | VITE_BASE_PATH = './' 6 | # 默认应用ID 7 | BASE_APP_ID = 'BUDIOT' 8 | # 登陆成功跳转页面 9 | BASE_APP_HOME_PATH = '/platform/dashboard' 10 | # 本地环境接口地址 - 尾部无需带'/' 11 | VITE_AXIOS_BASE_URL = 'http://127.0.0.1:7858' 12 | # Websocket 地址 13 | VITE_AXIOS_WS_BASE_URL = 'ws://127.0.0.1:7858/websocket' 14 | 15 | # 开发环境下跨域代理,请输入要跨域的api地址 - 尾部无需带'/' 16 | # VITE_PROXY_URL = 'http://127.0.0.1:9900' 17 | # VITE_AXIOS_BASE_URL = 'http://127.0.0.1:1818' 18 | -------------------------------------------------------------------------------- /budiot-vue-admin/.env.production: -------------------------------------------------------------------------------- 1 | # 线上环境 2 | ENV = 'production' 3 | 4 | # base路径 5 | VITE_BASE_PATH = '/' 6 | # 默认应用ID 7 | BASE_APP_ID = 'BUDIOT' 8 | # 登陆成功跳转页面 9 | BASE_APP_HOME_PATH = '/platform/dashboard' 10 | # 导出路径 11 | VITE_OUT_DIR = 'dist' 12 | 13 | # 线上环境接口地址 - 'getCurrentDomain:表示获取当前域名' 14 | # VITE_AXIOS_BASE_URL = 'getCurrentDomain' 15 | 16 | # 本地环境接口地址 - 尾部无需带'/' 17 | VITE_AXIOS_BASE_URL = 'https://demo.budiot.com/api' 18 | # Websocket 地址 19 | VITE_AXIOS_WS_BASE_URL = 'wss://demo.budiot.com/websocket' 20 | 21 | VITE_BUILD_COMPRESS = 'gzip' -------------------------------------------------------------------------------- /budiot-vue-admin/.eslintignore: -------------------------------------------------------------------------------- 1 | 2 | *.sh 3 | node_modules 4 | lib 5 | *.md 6 | *.scss 7 | *.woff 8 | *.ttf 9 | .vscode 10 | .idea 11 | dist 12 | mock 13 | public 14 | bin 15 | build 16 | config 17 | index.html 18 | src/assets -------------------------------------------------------------------------------- /budiot-vue-admin/.prettierrc.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | printWidth: 150, 3 | // 指定每个缩进级别的空格数 4 | tabWidth: 4, 5 | // 使用制表符而不是空格缩进行 6 | useTabs: false, 7 | // 在语句末尾打印分号 8 | semi: false, 9 | // 使用单引号而不是双引号 10 | singleQuote: true, 11 | // 更改引用对象属性的时间 可选值"" 12 | quoteProps: 'as-needed', 13 | // 在JSX中使用单引号而不是双引号 14 | jsxSingleQuote: false, 15 | // 多行时尽可能打印尾随逗号。(例如,单行数组永远不会出现逗号结尾。) 可选值"",默认none 16 | trailingComma: 'es5', 17 | // 在对象文字中的括号之间打印空格 18 | bracketSpacing: true, 19 | // 在单独的箭头函数参数周围包括括号 always:(x) => x \ avoid:x => x 20 | arrowParens: 'always', 21 | // 这两个选项可用于格式化以给定字符偏移量(分别包括和不包括)开始和结束的代码 22 | rangeStart: 0, 23 | rangeEnd: Infinity, 24 | // 指定要使用的解析器,不需要写文件开头的 @prettier 25 | requirePragma: false, 26 | // 不需要自动在文件开头插入 @prettier 27 | insertPragma: false, 28 | // 使用默认的折行标准 always\never\preserve 29 | proseWrap: 'preserve', 30 | // 指定HTML文件的全局空格敏感度 css\strict\ignore 31 | htmlWhitespaceSensitivity: 'css', 32 | // Vue文件脚本和样式标签缩进 33 | vueIndentScriptAndStyle: false, 34 | // 换行符使用 lf 结尾是 可选值"" 35 | endOfLine: 'lf', 36 | } 37 | -------------------------------------------------------------------------------- /budiot-vue-admin/README.md: -------------------------------------------------------------------------------- 1 | # 简介 2 | 3 | `Vue3` + `Vite4` + `Element-Plus` + `TypeScript` + `Pinia` 4 | 5 | # 编译 6 | 7 | ## dev 8 | `npm install pnpm` 9 | 10 | `pnpm run dev` 11 | 12 | ## build 13 | `pnpm run build` 14 | 15 | # 开发 16 | 17 | ## 权限验证 18 | 19 | * 系统登录后从后台获取用户权限标识 20 | * 前端采用 `v-permission="['sys.manage.unit.create']"` 进行验证 21 | 22 | ## 图标使用 23 | 24 | ### el图标 25 | * 使用方式1: `` 26 | * 使用方式2: `` 27 | 28 | ### svg图标 29 | * 使用方式: `` 30 | 31 | ### fa 图标 32 | * `` 33 | * `` 34 | 35 | ## 页面名称 36 | 37 | * 组件名称严格按照文件夹名称命名,多级文件夹用-分割 38 | * 用途1: 标签页的缓存功能 39 | * 用途2: 标签页页面刷新功能 40 | * 用途3: 系统自动生成路由 41 | ``` 42 | 45 | ``` 46 | 47 | ## 页面布局 48 | 49 | ``` 50 | 51 | meta: 52 | layout: platform/index 53 | 54 | ``` -------------------------------------------------------------------------------- /budiot-vue-admin/env.d.ts: -------------------------------------------------------------------------------- 1 | /// 2 | //注释:主要是加入下面这行,否则main.ts页面会报红 3 | /// 4 | 5 | declare module '*.vue' { 6 | import type { DefineComponent } from 'vue' 7 | // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/ban-types 8 | const component: DefineComponent<{}, {}, any> 9 | export default component 10 | } 11 | -------------------------------------------------------------------------------- /budiot-vue-admin/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 物联网设备管理平台 9 | 10 | 11 |
12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /budiot-vue-admin/public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/budwk/budiot/41664a2ec56a1911a7edb01d39711cd60abc5a0f/budiot-vue-admin/public/favicon.ico -------------------------------------------------------------------------------- /budiot-vue-admin/public/tpl/template_product_attr.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/budwk/budiot/41664a2ec56a1911a7edb01d39711cd60abc5a0f/budiot-vue-admin/public/tpl/template_product_attr.xlsx -------------------------------------------------------------------------------- /budiot-vue-admin/public/tpl/template_product_cmd.json: -------------------------------------------------------------------------------- 1 | [{ 2 | "name": "阀门控制", 3 | "code": "VALVE_CONTROL", 4 | "enabled": true, 5 | "note": "", 6 | "attrList": [{ 7 | "name": "表号", 8 | "code": "meter_no", 9 | "dataType": { 10 | "value": 3, 11 | "text": "字符串" 12 | }, 13 | "defaultValue": "" 14 | }, { 15 | "name": "阀门状态", 16 | "code": "status", 17 | "dataType": { 18 | "value": 5, 19 | "text": "枚举型" 20 | }, 21 | "defaultValue": "0=开阀,1=强制关阀,2=临时关阀" 22 | }] 23 | }] -------------------------------------------------------------------------------- /budiot-vue-admin/public/tpl/template_product_device.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/budwk/budiot/41664a2ec56a1911a7edb01d39711cd60abc5a0f/budiot-vue-admin/public/tpl/template_product_device.xlsx -------------------------------------------------------------------------------- /budiot-vue-admin/public/tpl/template_product_firmware_device.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/budwk/budiot/41664a2ec56a1911a7edb01d39711cd60abc5a0f/budiot-vue-admin/public/tpl/template_product_firmware_device.xlsx -------------------------------------------------------------------------------- /budiot-vue-admin/src/App.vue: -------------------------------------------------------------------------------- 1 | 6 | 34 | -------------------------------------------------------------------------------- /budiot-vue-admin/src/api/platform/cms/site.ts: -------------------------------------------------------------------------------- 1 | export const API_CMS_SITE_GET = '/cms/admin/site/get/' 2 | export const API_CMS_SITE_DELETE = '/cms/admin/site/delete/' 3 | export const API_CMS_SITE_LIST = '/cms/admin/site/list' 4 | export const API_CMS_SITE_CREATE = '/cms/admin/site/create' 5 | export const API_CMS_SITE_UPDATE = '/cms/admin/site/update' 6 | 7 | 8 | import request from '/@/utils/request' 9 | 10 | export function getList(data: object) { 11 | return request({ 12 | url: API_CMS_SITE_LIST, 13 | method: 'POST', 14 | data: data 15 | }) 16 | } 17 | 18 | 19 | export function getInfo(id: string) { 20 | return request({ 21 | url: API_CMS_SITE_GET + id, 22 | method: 'GET' 23 | }) 24 | } 25 | 26 | export function doCreate(data: object = {}) { 27 | return request({ 28 | url: API_CMS_SITE_CREATE, 29 | method: 'POST', 30 | data: data 31 | }) 32 | } 33 | 34 | export function doUpdate(data: object = {}) { 35 | return request({ 36 | url: API_CMS_SITE_UPDATE, 37 | method: 'POST', 38 | data: data 39 | }) 40 | } 41 | 42 | export function doDelete(id: string) { 43 | return request({ 44 | url: API_CMS_SITE_DELETE + id, 45 | method: 'DELETE' 46 | }) 47 | } -------------------------------------------------------------------------------- /budiot-vue-admin/src/api/platform/iot/common.ts: -------------------------------------------------------------------------------- 1 | export const API_IOT_PUB_COMMON_INIT = '/iot/pub/common/init' 2 | 3 | import request from '/@/utils/request' 4 | 5 | export function getInit(data: object = {}) { 6 | return request({ 7 | url: API_IOT_PUB_COMMON_INIT, 8 | method: 'GET', 9 | data: data 10 | }) 11 | } -------------------------------------------------------------------------------- /budiot-vue-admin/src/api/platform/pub/user.ts: -------------------------------------------------------------------------------- 1 | export const API_PUB_USER_UNITLIST = '/platform/pub/user/unitlist' 2 | export const API_PUB_USER_LIST = '/platform/pub/user/list' 3 | export const API_PUB_USER_POST = '/platform/pub/user/post' 4 | 5 | 6 | import request from '/@/utils/request' 7 | 8 | export function getUnitList(data: object) { 9 | return request({ 10 | url: API_PUB_USER_UNITLIST, 11 | method: 'GET', 12 | params: data 13 | }) 14 | } 15 | 16 | export function getList(data: object) { 17 | return request({ 18 | url: API_PUB_USER_LIST, 19 | method: 'POST', 20 | data: data 21 | }) 22 | } 23 | 24 | export function getPostList() { 25 | return request({ 26 | url: API_PUB_USER_POST, 27 | method: 'GET' 28 | }) 29 | } -------------------------------------------------------------------------------- /budiot-vue-admin/src/api/platform/sys/key.ts: -------------------------------------------------------------------------------- 1 | export const API_SYS_KEY_LIST = '/platform/sys/key/list' 2 | export const API_SYS_KEY_CREATE = '/platform/sys/key/create' 3 | export const API_SYS_KEY_DELETE = '/platform/sys/key/delete/' 4 | export const API_SYS_KEY_DISABLED = '/platform/sys/key/disabled' 5 | 6 | import request from '/@/utils/request' 7 | 8 | export function getList(data: object) { 9 | return request({ 10 | url: API_SYS_KEY_LIST, 11 | method: 'POST', 12 | data: data 13 | }) 14 | } 15 | 16 | 17 | export function doCreate(data: object = {}) { 18 | return request({ 19 | url: API_SYS_KEY_CREATE, 20 | method: 'POST', 21 | data: data 22 | }) 23 | } 24 | 25 | export function doDelete(id: string) { 26 | return request({ 27 | url: API_SYS_KEY_DELETE + id, 28 | method: 'DELETE' 29 | }) 30 | } 31 | 32 | export function doDisable(data: object = {}) { 33 | return request({ 34 | url: API_SYS_KEY_DISABLED, 35 | method: 'POST', 36 | data: data 37 | }) 38 | } -------------------------------------------------------------------------------- /budiot-vue-admin/src/api/platform/sys/log.ts: -------------------------------------------------------------------------------- 1 | export const API_SYS_LOG_LIST = '/platform/sys/log/list' 2 | export const API_SYS_LOG_DATA = '/platform/sys/log/data' 3 | 4 | import request from '/@/utils/request' 5 | 6 | export function getList(data: object) { 7 | return request({ 8 | url: API_SYS_LOG_LIST, 9 | method: 'POST', 10 | data: data 11 | }) 12 | } 13 | 14 | 15 | export function getData() { 16 | return request({ 17 | url: API_SYS_LOG_DATA, 18 | method: 'GET' 19 | }) 20 | } -------------------------------------------------------------------------------- /budiot-vue-admin/src/api/platform/sys/security.ts: -------------------------------------------------------------------------------- 1 | export const API_SYS_SECURITY_GET = '/platform/sys/security/get' 2 | export const API_SYS_SECURITY_SAVE = '/platform/sys/security/save' 3 | 4 | import request from '/@/utils/request' 5 | 6 | export function getInfo() { 7 | return request({ 8 | url: API_SYS_SECURITY_GET, 9 | method: 'GET' 10 | }) 11 | } 12 | 13 | export function doSave(data: object = {}) { 14 | return request({ 15 | url: API_SYS_SECURITY_SAVE, 16 | method: 'POST', 17 | data: data 18 | }) 19 | } -------------------------------------------------------------------------------- /budiot-vue-admin/src/api/platform/wechat/file.ts: -------------------------------------------------------------------------------- 1 | 2 | export const API_WX_FILE_UPLOAD_THUMB = '/wechat/pub/file/upload/upload_thumb/' 3 | export const API_WX_FILE_UPLOAD_IMAGE = '/wechat/pub/file/upload/upload_image/' 4 | export const API_WX_FILE_UPLOAD_IMAGE_METERIAL = '/wechat/pub/file/upload/upload_image_material/' 5 | -------------------------------------------------------------------------------- /budiot-vue-admin/src/api/platform/wechat/msg.ts: -------------------------------------------------------------------------------- 1 | export const API_WX_MSG_USER_LIST = '/wechat/admin/msg/user/list' 2 | export const API_WX_MSG_USER_REPLY = '/wechat/admin/msg/user/reply/' 3 | 4 | 5 | import request from '/@/utils/request' 6 | 7 | export function getList(data: object) { 8 | return request({ 9 | url: API_WX_MSG_USER_LIST, 10 | method: 'POST', 11 | data: data 12 | }) 13 | } 14 | 15 | export function doReply(wxid: string, data: object) { 16 | return request({ 17 | url: API_WX_MSG_USER_REPLY + wxid, 18 | method: 'POST', 19 | data: data 20 | }) 21 | } -------------------------------------------------------------------------------- /budiot-vue-admin/src/api/platform/wechat/tpl_id.ts: -------------------------------------------------------------------------------- 1 | export const API_WX_TPL_ID_DELETE = '/wechat/admin/tpl/id/delete/' 2 | export const API_WX_TPL_ID_DELETE_MORE = '/wechat/admin/tpl/id/delete_more' 3 | export const API_WX_TPL_ID_CREATE = '/wechat/admin/tpl/id/create' 4 | export const API_WX_TPL_ID_LIST = '/wechat/admin/tpl/id/list' 5 | 6 | import request from '/@/utils/request' 7 | 8 | export function getList(data: object) { 9 | return request({ 10 | url: API_WX_TPL_ID_LIST, 11 | method: 'POST', 12 | data: data 13 | }) 14 | } 15 | 16 | export function doCreate(data: object = {}) { 17 | return request({ 18 | url: API_WX_TPL_ID_CREATE, 19 | method: 'POST', 20 | data: data 21 | }) 22 | } 23 | 24 | export function doDelete(id: string) { 25 | return request({ 26 | url: API_WX_TPL_ID_DELETE + id, 27 | method: 'DELETE' 28 | }) 29 | } 30 | 31 | export function doDeleteMore(ids: string, template_ids: string) { 32 | return request({ 33 | url: API_WX_TPL_ID_DELETE_MORE, 34 | method: 'POST', 35 | data: { ids: ids, template_ids: template_ids } 36 | }) 37 | } -------------------------------------------------------------------------------- /budiot-vue-admin/src/api/platform/wechat/tpl_list.ts: -------------------------------------------------------------------------------- 1 | export const API_WX_TPL_LIST_GET = '/wechat/admin/tpl/list/get_all_template/' 2 | export const API_WX_TPL_LIST_LIST = '/wechat/admin/tpl/list/list' 3 | 4 | 5 | import request from '/@/utils/request' 6 | 7 | export function getList(data: object) { 8 | return request({ 9 | url: API_WX_TPL_LIST_LIST, 10 | method: 'POST', 11 | data: data 12 | }) 13 | } 14 | 15 | export function doDownload(wxid: string) { 16 | return request({ 17 | url: API_WX_TPL_LIST_GET + wxid, 18 | method: 'GET' 19 | }) 20 | } -------------------------------------------------------------------------------- /budiot-vue-admin/src/api/platform/wechat/tpl_log.ts: -------------------------------------------------------------------------------- 1 | export const API_WX_TPL_LOG_LIST = '/wechat/admin/tpl/log/list' 2 | 3 | import request from '/@/utils/request' 4 | 5 | export function getList(data: object) { 6 | return request({ 7 | url: API_WX_TPL_LOG_LIST, 8 | method: 'POST', 9 | data: data 10 | }) 11 | } 12 | -------------------------------------------------------------------------------- /budiot-vue-admin/src/api/platform/wechat/user.ts: -------------------------------------------------------------------------------- 1 | export const API_WX_USER_LIST = '/wechat/admin/user/list' 2 | export const API_WX_USER_DOWN = '/wechat/admin/user/down/' 3 | 4 | import request from '/@/utils/request' 5 | 6 | export function getList(data: object) { 7 | return request({ 8 | url: API_WX_USER_LIST, 9 | method: 'POST', 10 | data: data 11 | }) 12 | } 13 | 14 | export function doDownload(wxid: string) { 15 | return request({ 16 | url: API_WX_USER_DOWN + wxid, 17 | method: 'GET' 18 | }) 19 | } 20 | -------------------------------------------------------------------------------- /budiot-vue-admin/src/assets/fonts/fontawesome-webfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/budwk/budiot/41664a2ec56a1911a7edb01d39711cd60abc5a0f/budiot-vue-admin/src/assets/fonts/fontawesome-webfont.eot -------------------------------------------------------------------------------- /budiot-vue-admin/src/assets/fonts/fontawesome-webfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/budwk/budiot/41664a2ec56a1911a7edb01d39711cd60abc5a0f/budiot-vue-admin/src/assets/fonts/fontawesome-webfont.ttf -------------------------------------------------------------------------------- /budiot-vue-admin/src/assets/fonts/fontawesome-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/budwk/budiot/41664a2ec56a1911a7edb01d39711cd60abc5a0f/budiot-vue-admin/src/assets/fonts/fontawesome-webfont.woff -------------------------------------------------------------------------------- /budiot-vue-admin/src/assets/fonts/fontawesome-webfont.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/budwk/budiot/41664a2ec56a1911a7edb01d39711cd60abc5a0f/budiot-vue-admin/src/assets/fonts/fontawesome-webfont.woff2 -------------------------------------------------------------------------------- /budiot-vue-admin/src/assets/icons/svg/bell.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /budiot-vue-admin/src/assets/icons/svg/build.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /budiot-vue-admin/src/assets/icons/svg/chart.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /budiot-vue-admin/src/assets/icons/svg/checkbox.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /budiot-vue-admin/src/assets/icons/svg/clipboard.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /budiot-vue-admin/src/assets/icons/svg/code.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /budiot-vue-admin/src/assets/icons/svg/dark.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /budiot-vue-admin/src/assets/icons/svg/documentation.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /budiot-vue-admin/src/assets/icons/svg/download.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /budiot-vue-admin/src/assets/icons/svg/drag.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /budiot-vue-admin/src/assets/icons/svg/druid.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /budiot-vue-admin/src/assets/icons/svg/edit.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /budiot-vue-admin/src/assets/icons/svg/education.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /budiot-vue-admin/src/assets/icons/svg/email.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /budiot-vue-admin/src/assets/icons/svg/example.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /budiot-vue-admin/src/assets/icons/svg/excel.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /budiot-vue-admin/src/assets/icons/svg/eye.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /budiot-vue-admin/src/assets/icons/svg/fontsize.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /budiot-vue-admin/src/assets/icons/svg/full-screen.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /budiot-vue-admin/src/assets/icons/svg/guide.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /budiot-vue-admin/src/assets/icons/svg/icon.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /budiot-vue-admin/src/assets/icons/svg/input.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /budiot-vue-admin/src/assets/icons/svg/international.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /budiot-vue-admin/src/assets/icons/svg/lang.svg: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /budiot-vue-admin/src/assets/icons/svg/language.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /budiot-vue-admin/src/assets/icons/svg/line-md.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /budiot-vue-admin/src/assets/icons/svg/link.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /budiot-vue-admin/src/assets/icons/svg/list.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /budiot-vue-admin/src/assets/icons/svg/lock.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /budiot-vue-admin/src/assets/icons/svg/message.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /budiot-vue-admin/src/assets/icons/svg/money.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /budiot-vue-admin/src/assets/icons/svg/monitor.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /budiot-vue-admin/src/assets/icons/svg/nested.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /budiot-vue-admin/src/assets/icons/svg/people.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /budiot-vue-admin/src/assets/icons/svg/peoples.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /budiot-vue-admin/src/assets/icons/svg/post.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /budiot-vue-admin/src/assets/icons/svg/question.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /budiot-vue-admin/src/assets/icons/svg/reload.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /budiot-vue-admin/src/assets/icons/svg/row.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /budiot-vue-admin/src/assets/icons/svg/server.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /budiot-vue-admin/src/assets/icons/svg/skill.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /budiot-vue-admin/src/assets/icons/svg/slider.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /budiot-vue-admin/src/assets/icons/svg/star.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /budiot-vue-admin/src/assets/icons/svg/switch.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /budiot-vue-admin/src/assets/icons/svg/tab.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /budiot-vue-admin/src/assets/icons/svg/table.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /budiot-vue-admin/src/assets/icons/svg/textarea.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /budiot-vue-admin/src/assets/icons/svg/theme.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /budiot-vue-admin/src/assets/icons/svg/time.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /budiot-vue-admin/src/assets/icons/svg/tree-table.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /budiot-vue-admin/src/assets/icons/svg/user.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /budiot-vue-admin/src/assets/icons/svg/wechat.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /budiot-vue-admin/src/assets/images/alipay.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/budwk/budiot/41664a2ec56a1911a7edb01d39711cd60abc5a0f/budiot-vue-admin/src/assets/images/alipay.png -------------------------------------------------------------------------------- /budiot-vue-admin/src/assets/images/avatar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/budwk/budiot/41664a2ec56a1911a7edb01d39711cd60abc5a0f/budiot-vue-admin/src/assets/images/avatar.png -------------------------------------------------------------------------------- /budiot-vue-admin/src/assets/images/banner.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/budwk/budiot/41664a2ec56a1911a7edb01d39711cd60abc5a0f/budiot-vue-admin/src/assets/images/banner.jpg -------------------------------------------------------------------------------- /budiot-vue-admin/src/assets/images/bg-dark.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/budwk/budiot/41664a2ec56a1911a7edb01d39711cd60abc5a0f/budiot-vue-admin/src/assets/images/bg-dark.jpg -------------------------------------------------------------------------------- /budiot-vue-admin/src/assets/images/bg.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/budwk/budiot/41664a2ec56a1911a7edb01d39711cd60abc5a0f/budiot-vue-admin/src/assets/images/bg.jpg -------------------------------------------------------------------------------- /budiot-vue-admin/src/assets/images/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/budwk/budiot/41664a2ec56a1911a7edb01d39711cd60abc5a0f/budiot-vue-admin/src/assets/images/logo.png -------------------------------------------------------------------------------- /budiot-vue-admin/src/assets/images/wxpay.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/budwk/budiot/41664a2ec56a1911a7edb01d39711cd60abc5a0f/budiot-vue-admin/src/assets/images/wxpay.png -------------------------------------------------------------------------------- /budiot-vue-admin/src/assets/styles/transition.scss: -------------------------------------------------------------------------------- 1 | // global transition css 2 | 3 | /* fade */ 4 | .fade-enter-active, 5 | .fade-leave-active { 6 | transition: opacity 0.18s; 7 | } 8 | 9 | .fade-enter, 10 | .fade-leave-active { 11 | opacity: 0; 12 | } 13 | 14 | /* fade-transform */ 15 | .fade-transform--move, 16 | .fade-transform-leave-active, 17 | .fade-transform-enter-active { 18 | transition: all .2s; 19 | } 20 | 21 | .fade-transform-leave-active { 22 | position: absolute; 23 | } 24 | 25 | .fade-transform-enter { 26 | opacity: 0; 27 | transform: translateX(-30px); 28 | } 29 | 30 | .fade-transform-leave-to { 31 | opacity: 0; 32 | transform: translateX(30px); 33 | } 34 | 35 | /* breadcrumb transition */ 36 | .breadcrumb-enter-active, 37 | .breadcrumb-leave-active { 38 | transition: all .2s; 39 | } 40 | 41 | .breadcrumb-enter, 42 | .breadcrumb-leave-active { 43 | opacity: 0; 44 | transform: translateX(20px); 45 | } 46 | 47 | .breadcrumb-move { 48 | transition: all .2s; 49 | } 50 | 51 | .breadcrumb-leave-active { 52 | position: absolute; 53 | } 54 | -------------------------------------------------------------------------------- /budiot-vue-admin/src/components/IconSelect/requireIcons: -------------------------------------------------------------------------------- 1 | let icons = [] 2 | const modules = import.meta.glob('./../../assets/icons/svg/*.svg') 3 | 4 | for (const path in modules) { 5 | const p = path.split('assets/icons/svg/')[1].split('.svg')[0] 6 | icons.push(p) 7 | } 8 | export default icons -------------------------------------------------------------------------------- /budiot-vue-admin/src/components/ProIconSelect/index.vue: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/budwk/budiot/41664a2ec56a1911a7edb01d39711cd60abc5a0f/budiot-vue-admin/src/components/ProIconSelect/index.vue -------------------------------------------------------------------------------- /budiot-vue-admin/src/components/Screenfull/index.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 12 | 13 | -------------------------------------------------------------------------------- /budiot-vue-admin/src/components/SvgIcon/svgicon.js: -------------------------------------------------------------------------------- 1 | import * as components from '@element-plus/icons-vue' 2 | 3 | export default { 4 | install: (app) => { 5 | for (const key in components) { 6 | const componentConfig = components[key]; 7 | app.component(componentConfig.name, componentConfig); 8 | } 9 | }, 10 | }; 11 | -------------------------------------------------------------------------------- /budiot-vue-admin/src/lang/pages/en/401.ts: -------------------------------------------------------------------------------- 1 | export default { 2 | noPowerTip: 3 | "It's not what you want, but we're serious. I want to tell you in a special way that you don't have permission to access this page or the file is invalid. You can contact the website administrator to solve the problem faster or go back home page to view another page.", 4 | } 5 | -------------------------------------------------------------------------------- /budiot-vue-admin/src/lang/pages/en/404.ts: -------------------------------------------------------------------------------- 1 | export default { 2 | 'problems tip': 3 | 'Your website has encountered some problems. The system is optimizing and reporting fault information. We will improve and reduce this situation in the future.', 4 | 'We will automatically return to the previous page when we are finished': 'Auto return to previous page when finished.', 5 | 'Return to home page': 'Back to Home', 6 | 'Back to previous page': 'Back to previous page', 7 | } 8 | -------------------------------------------------------------------------------- /budiot-vue-admin/src/lang/pages/en/pagesTitle.ts: -------------------------------------------------------------------------------- 1 | export default { 2 | home: 'Home', 3 | admin: 'Admin', 4 | adminLogin: 'Login', 5 | notFound: 'Page not found', 6 | noPower: 'No access permission', 7 | noTitle: 'No title', 8 | Loading: 'Loading...', 9 | User: 'Member Center', 10 | userLogin: 'Menber Login', 11 | } 12 | -------------------------------------------------------------------------------- /budiot-vue-admin/src/lang/pages/en/validate.ts: -------------------------------------------------------------------------------- 1 | export default { 2 | 'Please enter the correct mobile number': 'Please enter the correct mobile number', 3 | 'Please enter the correct account': 'Please enter the correct account', 4 | 'Please enter the correct code': 'Please enter the correct code', 5 | 'Please enter the correct password': 'The password requires 6 to 32 bits and cannot contain & < > " \'', 6 | 'Please enter the correct name': 'Please enter the correct name', 7 | 'Content cannot be empty': 'The content cannot be blank', 8 | Required: 'Required', 9 | mobile: 'Mobile Number', 10 | 'Account name': 'Account name', 11 | password: 'password', 12 | 'Variable name': 'Variable Name', 13 | 'e-mail address': 'Email address', 14 | date: 'Date', 15 | number: 'Number', 16 | integer: 'Integer', 17 | 'Floating point number': ' Floating number', 18 | } 19 | -------------------------------------------------------------------------------- /budiot-vue-admin/src/lang/pages/zh-cn/401.ts: -------------------------------------------------------------------------------- 1 | export default { 2 | noPowerTip: 3 | '你无权访问此页面,或者该文件无效。您可以联系网站管理员以更快地解决问题,或返回网站首页浏览其他页面。', 4 | } 5 | -------------------------------------------------------------------------------- /budiot-vue-admin/src/lang/pages/zh-cn/404.ts: -------------------------------------------------------------------------------- 1 | export default { 2 | 'problems tip': '你的网页遇到了一些问题,系统正在优化和上报故障信息,我们在未来将改善和减少这种情况的发生.', 3 | 'We will automatically return to the previous page when we are finished': '我们将在完成后自动返回到上一页。', 4 | 'Return to home page': '返回首页', 5 | 'Back to previous page': '返回上一页', 6 | } 7 | -------------------------------------------------------------------------------- /budiot-vue-admin/src/lang/pages/zh-cn/axios.ts: -------------------------------------------------------------------------------- 1 | export default { 2 | 'Operation successful': '操作成功', 3 | 'Automatic cancellation due to duplicate request:': '因为请求重复被自动取消:', 4 | 'Interface redirected!': '接口重定向了!', 5 | 'Incorrect parameter!': '参数不正确!', 6 | 'You do not have permission to operate!': '您没有权限操作!', 7 | 'Error requesting address:': '请求地址出错:', 8 | 'Request timed out!': '请求超时!', 9 | 'The same data already exists in the system!': '系统已存在相同数据!', 10 | 'Server internal error!': '服务器内部错误!', 11 | 'Service not implemented!': '服务未实现!', 12 | 'Gateway error!': '网关错误!', 13 | 'Service unavailable!': '服务不可用!', 14 | 'The service is temporarily unavailable Please try again later!': '服务暂时无法访问,请稍后再试!', 15 | 'HTTP version is not supported!': 'HTTP版本不受支持!', 16 | 'Abnormal problem, please contact the website administrator!': '异常问题,请联系网站管理员!', 17 | 'Network request timeout!': '网络请求超时!', 18 | 'Server exception!': '服务端异常!', 19 | 'You are disconnected!': '您断网了!', 20 | } 21 | -------------------------------------------------------------------------------- /budiot-vue-admin/src/lang/pages/zh-cn/pagesTitle.ts: -------------------------------------------------------------------------------- 1 | export default { 2 | home: '首页', 3 | platform: '管理后台', 4 | platformLogin: '登录', 5 | notFound: '页面找不到了', 6 | noPower: '无访问权限', 7 | noTitle: '无标题', 8 | loading: '加载中...', 9 | dashboard: '控制台' 10 | } 11 | -------------------------------------------------------------------------------- /budiot-vue-admin/src/lang/pages/zh-cn/utils.ts: -------------------------------------------------------------------------------- 1 | export default { 2 | 'The moving position is beyond the movable range!': '移动位置超出了可移动范围!', 3 | 'Navigation failed, the menu type is unrecognized!': '导航失败,菜单类型无法识别!', 4 | 'Navigation failed, navigation guard intercepted!': '导航失败,导航守卫拦截!', 5 | 'Navigation failed, it is at the navigation target position!': '导航失败,已在导航目标位置!', 6 | 'Navigation failed, invalid route!': '导航失败,路由无效!', 7 | Loading: '加载中...', 8 | Reload: '重新加载', 9 | comma: ',', 10 | 'welcome back': '欢迎回来!', 11 | 'Late at night, pay attention to your body!': '夜深了,注意身体哦!', 12 | 'good morning!': '早上好!', 13 | 'Good morning!': '上午好!', 14 | 'Good noon!': '中午好!', 15 | 'good afternoon': '下午好!', 16 | 'Good evening': '晚上好!', 17 | 'Hello!': '您好!', 18 | open: '开启', 19 | close: '关闭', 20 | 'Clean up system cache': '清理系统缓存', 21 | 'Clean up browser cache': '清理浏览器缓存', 22 | 'Clean up all cache': '一键清理所有', 23 | 'The data of the uploaded file is incomplete!': '上传文件的资料不完整!', 24 | 'The type of uploaded file is not allowed!': '上传文件的类型不被允许!', 25 | 'The size of the uploaded file exceeds the allowed range!': '上传文件的大小超出允许范围!', 26 | } 27 | -------------------------------------------------------------------------------- /budiot-vue-admin/src/lang/pages/zh-cn/validate.ts: -------------------------------------------------------------------------------- 1 | export default { 2 | 'Please enter the correct mobile number': '请输入正确的手机号', 3 | 'Please enter the correct account': '请输入正确的用户名', 4 | 'Please enter the correct code': '请输入正确的编码(英文字母或数字32位以内)', 5 | 'Please enter the correct password': '密码要求6到32位,不能包含 & < > " \'', 6 | 'Please enter the correct name': '请输入正确的名称', 7 | 'Content cannot be empty': '内容不能为空', 8 | Required: '必填', 9 | mobile: '手机号', 10 | 'Account name': '账户名', 11 | password: '密码', 12 | 'Variable name': '变量名', 13 | 'e-mail address': '邮箱地址', 14 | date: '日期', 15 | number: '数字', 16 | integer: '整数', 17 | 'Floating point number': '浮点数', 18 | } 19 | -------------------------------------------------------------------------------- /budiot-vue-admin/src/layouts/default.vue: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /budiot-vue-admin/src/layouts/platform/components/IframeToggle/index.vue: -------------------------------------------------------------------------------- 1 | 12 | 13 | 21 | -------------------------------------------------------------------------------- /budiot-vue-admin/src/layouts/platform/components/Sidebar/Link.vue: -------------------------------------------------------------------------------- 1 | 6 | -------------------------------------------------------------------------------- /budiot-vue-admin/src/layouts/platform/components/index.ts: -------------------------------------------------------------------------------- 1 | export { default as AppMain } from './AppMain/index.vue' 2 | export { default as Navbar } from './Navbar/index.vue' 3 | export { default as TagsView } from './TagsView/index.vue' 4 | export { default as Settings } from './Settings/index.vue' 5 | -------------------------------------------------------------------------------- /budiot-vue-admin/src/plugins/auto-import.ts: -------------------------------------------------------------------------------- 1 | import autoImport from 'unplugin-auto-import/vite' 2 | 3 | export default function createAutoImport() { 4 | return autoImport({ 5 | imports: [ 6 | 'vue', 7 | 'vue-router', 8 | 'pinia' 9 | ], 10 | eslintrc: { 11 | enabled: false, // 若没此json文件,先开启,生成后在关闭 12 | filepath: './.eslintrc-auto-import.json', 13 | globalsPropValue: true, // Default `true`, (true | false | 'readonly' | 'readable' | 'writable' | 'writeable') 14 | }, 15 | dts: 'src/plugins/auto-import.d.ts' 16 | }) 17 | } 18 | -------------------------------------------------------------------------------- /budiot-vue-admin/src/plugins/compression.ts: -------------------------------------------------------------------------------- 1 | import compression from 'vite-plugin-compression' 2 | 3 | export default function createCompression(env: any) { 4 | const { VITE_BUILD_COMPRESS } = env 5 | const plugin = [] 6 | if (VITE_BUILD_COMPRESS) { 7 | const compressList = VITE_BUILD_COMPRESS.split(',') 8 | if (compressList.includes('gzip')) { 9 | plugin.push( 10 | compression({ 11 | ext: '.gz', 12 | deleteOriginFile: false 13 | }) 14 | ) 15 | } 16 | if (compressList.includes('brotli')) { 17 | plugin.push( 18 | compression({ 19 | ext: '.br', 20 | algorithm: 'brotliCompress', 21 | deleteOriginFile: false 22 | }) 23 | ) 24 | } 25 | } 26 | return plugin 27 | } 28 | -------------------------------------------------------------------------------- /budiot-vue-admin/src/plugins/index.ts: -------------------------------------------------------------------------------- 1 | import vue from '@vitejs/plugin-vue' 2 | 3 | import createAutoImport from './auto-import' 4 | import createSvgIcon from './svg-icon' 5 | import createCompression from './compression' 6 | import createSetupExtend from './setup-extend' 7 | import createPages from './pages' 8 | import createLoyouts from './layouts' 9 | 10 | export default function createVitePlugins(env: any, isProd = false) { 11 | const vitePlugins = [vue()] 12 | vitePlugins.push(createAutoImport()) 13 | vitePlugins.push(createSetupExtend()) 14 | vitePlugins.push(createSvgIcon(isProd)) 15 | vitePlugins.push(createPages()) 16 | vitePlugins.push(createLoyouts()) 17 | isProd && vitePlugins.push(...createCompression(env)) 18 | return vitePlugins 19 | } 20 | -------------------------------------------------------------------------------- /budiot-vue-admin/src/plugins/layouts.ts: -------------------------------------------------------------------------------- 1 | import Layouts from 'vite-plugin-vue-layouts' 2 | 3 | export default function createLayouts() { 4 | return Layouts({ 5 | layoutsDirs: 'src/layouts', 6 | defaultLayout: 'default', 7 | exclude: ['**/components/*.vue'] 8 | }) 9 | } 10 | -------------------------------------------------------------------------------- /budiot-vue-admin/src/plugins/pages.ts: -------------------------------------------------------------------------------- 1 | import Pages from 'vite-plugin-pages' 2 | 3 | export default function createPages() { 4 | return Pages({ 5 | dirs:[ { dir: "src/views", baseRoute: "" }], 6 | importMode: "async", 7 | exclude: ['**/components/*.vue','**/views/platform/dashboard.vue','**/views/platform/login.vue'] 8 | }) 9 | } 10 | -------------------------------------------------------------------------------- /budiot-vue-admin/src/plugins/setup-extend.ts: -------------------------------------------------------------------------------- 1 | import setupExtend from 'vite-plugin-vue-setup-extend' 2 | 3 | export default function createSetupExtend() { 4 | return setupExtend() 5 | } 6 | -------------------------------------------------------------------------------- /budiot-vue-admin/src/plugins/svg-icon.ts: -------------------------------------------------------------------------------- 1 | import { createSvgIconsPlugin } from 'vite-plugin-svg-icons' 2 | import path from 'path' 3 | 4 | export default function createSvgIcon(isProd) { 5 | return createSvgIconsPlugin({ 6 | iconDirs: [path.resolve(process.cwd(), 'src/assets/icons/svg')], 7 | symbolId: 'icon-[dir]-[name]', 8 | svgoOptions: isProd 9 | }) 10 | } 11 | -------------------------------------------------------------------------------- /budiot-vue-admin/src/stores/constant/cacheKey.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * 本地缓存Key 3 | */ 4 | 5 | // 用户信息 6 | export const USER_INFO = 'userInfo' 7 | // 用户布局设置 8 | export const USER_SETTINGS = 'userSettings' 9 | // 用户路由页面 10 | export const USER_VIEWS = 'userViews' 11 | // 标签页 12 | export const TAGS_VIEW = 'tagsView' 13 | // 浏览器信息 14 | export const CLIENT_INFO = 'clientInfo' 15 | // 平台信息 16 | export const PLATFORM_INFO = 'platformInfo' 17 | 18 | // 工作时间 19 | export const WORKING_TIME = 'workingTime' 20 | 21 | // 切换到手机端前的上次布局方式 22 | export const BEFORE_RESIZE_LAYOUT = 'beforeResizeLayout' 23 | -------------------------------------------------------------------------------- /budiot-vue-admin/src/stores/index.ts: -------------------------------------------------------------------------------- 1 | import { createPinia } from 'pinia' 2 | import piniaPluginPersistedstate from 'pinia-plugin-persistedstate' 3 | 4 | const pinia = createPinia() 5 | pinia.use(piniaPluginPersistedstate) 6 | 7 | export default pinia 8 | -------------------------------------------------------------------------------- /budiot-vue-admin/src/stores/platformInfo.ts: -------------------------------------------------------------------------------- 1 | import { defineStore } from 'pinia' 2 | import { PLATFORM_INFO } from '/@/stores/constant/cacheKey' 3 | import { PlatformInfo } from '/@/stores/interface' 4 | import { getPlatformInfo } from '/@/api/common' 5 | 6 | export const usePlatformInfo = defineStore('platformInfo', { 7 | state: (): PlatformInfo => { 8 | return { 9 | AppSessionOnlyOne: false, 10 | AppDemoEnv: false, 11 | AppWebSocket: false, 12 | AppUploadBase: '', 13 | AppFileDomain: '', 14 | AppDomain: '', 15 | AppName: '', 16 | AppShrotName: '', 17 | AppVersion: '', 18 | AppDefault: '' 19 | } 20 | }, 21 | actions: { 22 | dataFill(state: PlatformInfo) { 23 | this.$state = { ...this.$state, ...state } 24 | }, 25 | init() { 26 | const platformInfo = getPlatformInfo(process.env.BASE_APP_ID) 27 | platformInfo.then((d)=>{ 28 | this.dataFill(d.data) 29 | }) 30 | } 31 | }, 32 | persist: { 33 | key: PLATFORM_INFO, 34 | }, 35 | }) 36 | -------------------------------------------------------------------------------- /budiot-vue-admin/src/utils/build.ts: -------------------------------------------------------------------------------- 1 | import pkg from '../../package.json' 2 | import fs from 'fs-extra' 3 | 4 | export const run = () => { 5 | console.log('copy font-awesome.min.css & fonts\r\n') 6 | fs.copy('src/assets/styles/font-awesome.min.css','dist/assets/styles/font-awesome.min.css') 7 | fs.copy('src/assets/fonts','dist/assets/fonts') 8 | console.log(`✨ ${pkg.name} - build successfully!`) 9 | } 10 | run() 11 | -------------------------------------------------------------------------------- /budiot-vue-admin/src/utils/horizontalScroll.ts: -------------------------------------------------------------------------------- 1 | export default class horizontalScroll { 2 | private el: HTMLElement 3 | 4 | constructor(nativeElement: HTMLElement) { 5 | this.el = nativeElement 6 | this.handleWheelEvent() 7 | } 8 | 9 | handleWheelEvent() { 10 | let wheel = '' 11 | 12 | if ('onmousewheel' in this.el) { 13 | wheel = 'mousewheel' 14 | } else if ('onwheel' in this.el) { 15 | wheel = 'wheel' 16 | } else if ('attachEvent' in window) { 17 | wheel = 'onmousewheel' 18 | } else { 19 | wheel = 'DOMMouseScroll' 20 | } 21 | this.el['addEventListener'](wheel, this.scroll, { passive: true }) 22 | } 23 | 24 | scroll = (event: any) => { 25 | if (this.el.clientWidth >= this.el.scrollWidth) { 26 | return 27 | } 28 | this.el.scrollLeft += event.deltaY ? event.deltaY : event.detail && event.detail !== 0 ? event.detail : -event.wheelDelta 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /budiot-vue-admin/src/utils/pageShade.ts: -------------------------------------------------------------------------------- 1 | // 手机端显示菜单时同时显示阴影遮罩 2 | export const showShade = function (className = 'shade', closeCallBack: Function): void { 3 | const containerEl = document.querySelector('.layout-container') as HTMLElement 4 | const shadeDiv = document.createElement('div') 5 | shadeDiv.setAttribute('class', 'ba-layout-shade ' + className) 6 | containerEl.appendChild(shadeDiv) 7 | shadeDiv.addEventListener('click', () => { 8 | closeShade(closeCallBack) 9 | }) 10 | } 11 | 12 | export const closeShade = function (closeCallBack: Function = () => {}): void { 13 | const shadeEl = document.querySelector('.ba-layout-shade') as HTMLElement 14 | shadeEl && shadeEl.remove() 15 | 16 | closeCallBack() 17 | } 18 | -------------------------------------------------------------------------------- /budiot-vue-admin/src/utils/storage.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * window.localStorage 3 | * @method set 设置 4 | * @method get 获取 5 | * @method remove 移除 6 | * @method clear 移除全部 7 | */ 8 | export const Local = { 9 | set(key: string, val: any) { 10 | window.localStorage.setItem(key, JSON.stringify(val)) 11 | }, 12 | get(key: string) { 13 | const json: any = window.localStorage.getItem(key) 14 | return JSON.parse(json) 15 | }, 16 | remove(key: string) { 17 | window.localStorage.removeItem(key) 18 | }, 19 | clear() { 20 | window.localStorage.clear() 21 | }, 22 | } 23 | 24 | /** 25 | * window.sessionStorage 26 | * @method set 设置会话缓存 27 | * @method get 获取会话缓存 28 | * @method remove 移除会话缓存 29 | * @method clear 移除全部会话缓存 30 | */ 31 | export const Session = { 32 | set(key: string, val: any) { 33 | window.sessionStorage.setItem(key, JSON.stringify(val)) 34 | }, 35 | get(key: string) { 36 | const json: any = window.sessionStorage.getItem(key) 37 | return JSON.parse(json) 38 | }, 39 | remove(key: string) { 40 | window.sessionStorage.removeItem(key) 41 | }, 42 | clear() { 43 | window.sessionStorage.clear() 44 | }, 45 | } 46 | -------------------------------------------------------------------------------- /budiot-vue-admin/src/utils/useCurrentInstance.ts: -------------------------------------------------------------------------------- 1 | import { ComponentInternalInstance, getCurrentInstance } from 'vue' 2 | 3 | export default function useCurrentInstance() { 4 | if (!getCurrentInstance()) { 5 | throw new Error('useCurrentInstance() can only be used inside setup() or functional components!') 6 | } 7 | const { appContext } = getCurrentInstance() as any 8 | const proxy = appContext.config.globalProperties 9 | return { 10 | proxy, 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /budiot-vue-admin/src/views/platform/iot/device/product/head.vue: -------------------------------------------------------------------------------- 1 | 13 | 27 | -------------------------------------------------------------------------------- /budiot-vue-admin/src/views/platform/sys/test/index.vue: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | meta: 11 | layout: platform/index 12 | -------------------------------------------------------------------------------- /budiot-vue-admin/src/views/redirect/index.vue: -------------------------------------------------------------------------------- 1 | 4 | 5 | -------------------------------------------------------------------------------- /budiot-vue-admin/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "esnext", 4 | "useDefineForClassFields": true, 5 | "suppressImplicitAnyIndexErrors": false, 6 | "module": "esnext", 7 | "moduleResolution": "node", 8 | "removeComments": false, 9 | "strict": true, 10 | "jsx": "preserve", 11 | "sourceMap": false, 12 | "resolveJsonModule": true, 13 | "esModuleInterop": true, 14 | "lib": ["esnext", "dom"], 15 | "isolatedModules": true, 16 | "baseUrl": "./", 17 | "paths": { 18 | "/@/*": ["src/*"] 19 | }, 20 | "types": ["element-plus/global", "vite-plugin-vue-layouts/client"] 21 | }, 22 | "exclude": ["node_modules"] 23 | } 24 | -------------------------------------------------------------------------------- /budiot-vue-admin/types/global.d.ts: -------------------------------------------------------------------------------- 1 | interface Window { 2 | existLoading: boolean 3 | lazy: NodeJS.Timer 4 | unique: number 5 | tokenRefreshing: boolean 6 | requests: Function[] 7 | eventSource: EventSource 8 | } 9 | 10 | interface anyObj { 11 | [key: string]: any 12 | } 13 | 14 | interface TableDefaultData { 15 | list: T 16 | remark: string 17 | total: number 18 | } 19 | 20 | interface ApiResponse { 21 | code: number 22 | data: T 23 | msg: string 24 | time: number 25 | } 26 | 27 | type ApiPromise = Promise> 28 | -------------------------------------------------------------------------------- /budiot-vue-admin/types/module.d.ts: -------------------------------------------------------------------------------- 1 | /// 2 | 3 | declare module '*.vue' { 4 | import { DefineComponent } from 'vue' 5 | // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/ban-types 6 | const component: DefineComponent<{}, {}, any> 7 | export default component 8 | } 9 | -------------------------------------------------------------------------------- /init/budiot.com.conf: -------------------------------------------------------------------------------- 1 | server { 2 | listen 80; 3 | listen 443 ssl; 4 | if ( $scheme = "http" ) { 5 | rewrite ^(.*) https://$host$1; 6 | } 7 | server_name budiot.com www.budiot.com; 8 | ssl_certificate /etc/nginx/ssl/budiot.com.pem; 9 | ssl_certificate_key /etc/nginx/ssl/budiot.com.key; 10 | ssl_session_timeout 5m; 11 | ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4; 12 | ssl_protocols TLSv1 TLSv1.1 TLSv1.2; 13 | ssl_prefer_server_ciphers on; 14 | add_header "X-UA-Compatible" "IE=Edge, chrome=1"; 15 | 16 | location / { 17 | root /data/www; 18 | try_files $uri /index.html; 19 | index index.html; 20 | } 21 | 22 | location /img/ { 23 | alias /data/www/static/img/; 24 | } 25 | 26 | location /css/ { 27 | alias /data/www/static/css/; 28 | } 29 | 30 | location /js/ { 31 | alias /data/www/static/js/; 32 | } 33 | 34 | } 35 | 36 | --------------------------------------------------------------------------------