commit
4a1765e3a1
6232 changed files with 559810 additions and 0 deletions
@ -0,0 +1,8 @@ |
|||||
|
# 默认忽略的文件 |
||||
|
/shelf/ |
||||
|
/workspace.xml |
||||
|
# 基于编辑器的 HTTP 客户端请求 |
||||
|
/httpRequests/ |
||||
|
# Datasource local storage ignored files |
||||
|
/dataSources/ |
||||
|
/dataSources.local.xml |
@ -0,0 +1,43 @@ |
|||||
|
<?xml version="1.0" encoding="UTF-8"?> |
||||
|
<project version="4"> |
||||
|
<component name="CompilerConfiguration"> |
||||
|
<annotationProcessing> |
||||
|
<profile default="true" name="Default" enabled="true" /> |
||||
|
<profile name="Maven default annotation processors profile" enabled="true"> |
||||
|
<sourceOutputDir name="target/generated-sources/annotations" /> |
||||
|
<sourceTestOutputDir name="target/generated-test-sources/test-annotations" /> |
||||
|
<outputRelativeToContentRoot value="true" /> |
||||
|
<module name="coap-server" /> |
||||
|
<module name="fastbee-notify-web" /> |
||||
|
<module name="fastbee-open-api" /> |
||||
|
<module name="fastbee-mq" /> |
||||
|
<module name="fastbee-pay-core" /> |
||||
|
<module name="fastbee-pay-framework" /> |
||||
|
<module name="fastbee-oauth" /> |
||||
|
<module name="fastbee-system-service" /> |
||||
|
<module name="fastbee-protocol-base" /> |
||||
|
<module name="base-server" /> |
||||
|
<module name="boot-strap" /> |
||||
|
<module name="http-server" /> |
||||
|
<module name="fastbee-iot-data" /> |
||||
|
<module name="sip-server" /> |
||||
|
<module name="fastbee-admin" /> |
||||
|
<module name="mqtt-broker" /> |
||||
|
<module name="fastbee-framework" /> |
||||
|
<module name="fastbee-pay-api" /> |
||||
|
<module name="iot-server-core" /> |
||||
|
<module name="fastbee-notify-core" /> |
||||
|
<module name="fastbee-generator" /> |
||||
|
<module name="fastbee-common" /> |
||||
|
<module name="fastbee-mqtt-client" /> |
||||
|
<module name="fastbee-protocol-collect" /> |
||||
|
<module name="fastbee-oss" /> |
||||
|
<module name="fastbee-quartz" /> |
||||
|
<module name="fastbee-http" /> |
||||
|
<module name="fastbee-iot-service" /> |
||||
|
<module name="fastbee-ruleEngine" /> |
||||
|
<module name="fastbee-record" /> |
||||
|
</profile> |
||||
|
</annotationProcessing> |
||||
|
</component> |
||||
|
</project> |
@ -0,0 +1,79 @@ |
|||||
|
<?xml version="1.0" encoding="UTF-8"?> |
||||
|
<project version="4"> |
||||
|
<component name="Encoding"> |
||||
|
<file url="file://$PROJECT_DIR$/fastbee-admin/src/main/java" charset="UTF-8" /> |
||||
|
<file url="file://$PROJECT_DIR$/fastbee-admin/src/main/resources" charset="UTF-8" /> |
||||
|
<file url="file://$PROJECT_DIR$/fastbee-common/src/main/java" charset="UTF-8" /> |
||||
|
<file url="file://$PROJECT_DIR$/fastbee-common/src/main/resources" charset="UTF-8" /> |
||||
|
<file url="file://$PROJECT_DIR$/fastbee-framework/src/main/java" charset="UTF-8" /> |
||||
|
<file url="file://$PROJECT_DIR$/fastbee-framework/src/main/resources" charset="UTF-8" /> |
||||
|
<file url="file://$PROJECT_DIR$/fastbee-iot-data/src/main/java" charset="UTF-8" /> |
||||
|
<file url="file://$PROJECT_DIR$/fastbee-iot-data/src/main/resources" charset="UTF-8" /> |
||||
|
<file url="file://$PROJECT_DIR$/fastbee-mq/src/main/java" charset="UTF-8" /> |
||||
|
<file url="file://$PROJECT_DIR$/fastbee-mq/src/main/resources" charset="UTF-8" /> |
||||
|
<file url="file://$PROJECT_DIR$/fastbee-notify/fastbee-notify-core/src/main/java" charset="UTF-8" /> |
||||
|
<file url="file://$PROJECT_DIR$/fastbee-notify/fastbee-notify-core/src/main/resources" charset="UTF-8" /> |
||||
|
<file url="file://$PROJECT_DIR$/fastbee-notify/fastbee-notify-web/src/main/java" charset="UTF-8" /> |
||||
|
<file url="file://$PROJECT_DIR$/fastbee-notify/fastbee-notify-web/src/main/resources" charset="UTF-8" /> |
||||
|
<file url="file://$PROJECT_DIR$/fastbee-notify/src/main/java" charset="UTF-8" /> |
||||
|
<file url="file://$PROJECT_DIR$/fastbee-notify/src/main/resources" charset="UTF-8" /> |
||||
|
<file url="file://$PROJECT_DIR$/fastbee-open-api/src/main/java" charset="UTF-8" /> |
||||
|
<file url="file://$PROJECT_DIR$/fastbee-open-api/src/main/resources" charset="UTF-8" /> |
||||
|
<file url="file://$PROJECT_DIR$/fastbee-plugs/fastbee-generator/src/main/java" charset="UTF-8" /> |
||||
|
<file url="file://$PROJECT_DIR$/fastbee-plugs/fastbee-generator/src/main/resources" charset="UTF-8" /> |
||||
|
<file url="file://$PROJECT_DIR$/fastbee-plugs/fastbee-http/src/main/java" charset="UTF-8" /> |
||||
|
<file url="file://$PROJECT_DIR$/fastbee-plugs/fastbee-http/src/main/resources" charset="UTF-8" /> |
||||
|
<file url="file://$PROJECT_DIR$/fastbee-plugs/fastbee-mqtt-client/src/main/java" charset="UTF-8" /> |
||||
|
<file url="file://$PROJECT_DIR$/fastbee-plugs/fastbee-mqtt-client/src/main/resources" charset="UTF-8" /> |
||||
|
<file url="file://$PROJECT_DIR$/fastbee-plugs/fastbee-oauth/src/main/java" charset="UTF-8" /> |
||||
|
<file url="file://$PROJECT_DIR$/fastbee-plugs/fastbee-oauth/src/main/resources" charset="UTF-8" /> |
||||
|
<file url="file://$PROJECT_DIR$/fastbee-plugs/fastbee-oss/src/main/java" charset="UTF-8" /> |
||||
|
<file url="file://$PROJECT_DIR$/fastbee-plugs/fastbee-oss/src/main/resources" charset="UTF-8" /> |
||||
|
<file url="file://$PROJECT_DIR$/fastbee-plugs/fastbee-pay/fastbee-pay-api/src/main/java" charset="UTF-8" /> |
||||
|
<file url="file://$PROJECT_DIR$/fastbee-plugs/fastbee-pay/fastbee-pay-api/src/main/resources" charset="UTF-8" /> |
||||
|
<file url="file://$PROJECT_DIR$/fastbee-plugs/fastbee-pay/fastbee-pay-core/src/main/java" charset="UTF-8" /> |
||||
|
<file url="file://$PROJECT_DIR$/fastbee-plugs/fastbee-pay/fastbee-pay-core/src/main/resources" charset="UTF-8" /> |
||||
|
<file url="file://$PROJECT_DIR$/fastbee-plugs/fastbee-pay/fastbee-pay-framework/src/main/java" charset="UTF-8" /> |
||||
|
<file url="file://$PROJECT_DIR$/fastbee-plugs/fastbee-pay/fastbee-pay-framework/src/main/resources" charset="UTF-8" /> |
||||
|
<file url="file://$PROJECT_DIR$/fastbee-plugs/fastbee-pay/src/main/java" charset="UTF-8" /> |
||||
|
<file url="file://$PROJECT_DIR$/fastbee-plugs/fastbee-pay/src/main/resources" charset="UTF-8" /> |
||||
|
<file url="file://$PROJECT_DIR$/fastbee-plugs/fastbee-quartz/src/main/java" charset="UTF-8" /> |
||||
|
<file url="file://$PROJECT_DIR$/fastbee-plugs/fastbee-quartz/src/main/resources" charset="UTF-8" /> |
||||
|
<file url="file://$PROJECT_DIR$/fastbee-plugs/fastbee-ruleEngine/src/main/java" charset="UTF-8" /> |
||||
|
<file url="file://$PROJECT_DIR$/fastbee-plugs/fastbee-ruleEngine/src/main/resources" charset="UTF-8" /> |
||||
|
<file url="file://$PROJECT_DIR$/fastbee-plugs/src/main/java" charset="UTF-8" /> |
||||
|
<file url="file://$PROJECT_DIR$/fastbee-plugs/src/main/resources" charset="UTF-8" /> |
||||
|
<file url="file://$PROJECT_DIR$/fastbee-protocol/fastbee-protocol-base/src/main/java" charset="UTF-8" /> |
||||
|
<file url="file://$PROJECT_DIR$/fastbee-protocol/fastbee-protocol-base/src/main/resources" charset="UTF-8" /> |
||||
|
<file url="file://$PROJECT_DIR$/fastbee-protocol/fastbee-protocol-collect/src/main/java" charset="UTF-8" /> |
||||
|
<file url="file://$PROJECT_DIR$/fastbee-protocol/fastbee-protocol-collect/src/main/resources" charset="UTF-8" /> |
||||
|
<file url="file://$PROJECT_DIR$/fastbee-protocol/src/main/java" charset="UTF-8" /> |
||||
|
<file url="file://$PROJECT_DIR$/fastbee-protocol/src/main/resources" charset="UTF-8" /> |
||||
|
<file url="file://$PROJECT_DIR$/fastbee-record/src/main/java" charset="UTF-8" /> |
||||
|
<file url="file://$PROJECT_DIR$/fastbee-record/src/main/resources" charset="UTF-8" /> |
||||
|
<file url="file://$PROJECT_DIR$/fastbee-server/base-server/src/main/java" charset="UTF-8" /> |
||||
|
<file url="file://$PROJECT_DIR$/fastbee-server/base-server/src/main/resources" charset="UTF-8" /> |
||||
|
<file url="file://$PROJECT_DIR$/fastbee-server/boot-strap/src/main/java" charset="UTF-8" /> |
||||
|
<file url="file://$PROJECT_DIR$/fastbee-server/boot-strap/src/main/resources" charset="UTF-8" /> |
||||
|
<file url="file://$PROJECT_DIR$/fastbee-server/coap-server/src/main/java" charset="UTF-8" /> |
||||
|
<file url="file://$PROJECT_DIR$/fastbee-server/coap-server/src/main/resources" charset="UTF-8" /> |
||||
|
<file url="file://$PROJECT_DIR$/fastbee-server/http-server/src/main/java" charset="UTF-8" /> |
||||
|
<file url="file://$PROJECT_DIR$/fastbee-server/http-server/src/main/resources" charset="UTF-8" /> |
||||
|
<file url="file://$PROJECT_DIR$/fastbee-server/iot-server-core/src/main/java" charset="UTF-8" /> |
||||
|
<file url="file://$PROJECT_DIR$/fastbee-server/iot-server-core/src/main/resources" charset="UTF-8" /> |
||||
|
<file url="file://$PROJECT_DIR$/fastbee-server/mqtt-broker/src/main/java" charset="UTF-8" /> |
||||
|
<file url="file://$PROJECT_DIR$/fastbee-server/mqtt-broker/src/main/resources" charset="UTF-8" /> |
||||
|
<file url="file://$PROJECT_DIR$/fastbee-server/sip-server/src/main/java" charset="UTF-8" /> |
||||
|
<file url="file://$PROJECT_DIR$/fastbee-server/sip-server/src/main/resources" charset="UTF-8" /> |
||||
|
<file url="file://$PROJECT_DIR$/fastbee-server/src/main/java" charset="UTF-8" /> |
||||
|
<file url="file://$PROJECT_DIR$/fastbee-server/src/main/resources" charset="UTF-8" /> |
||||
|
<file url="file://$PROJECT_DIR$/fastbee-service/fastbee-iot-service/src/main/java" charset="UTF-8" /> |
||||
|
<file url="file://$PROJECT_DIR$/fastbee-service/fastbee-iot-service/src/main/resources" charset="UTF-8" /> |
||||
|
<file url="file://$PROJECT_DIR$/fastbee-service/fastbee-system-service/src/main/java" charset="UTF-8" /> |
||||
|
<file url="file://$PROJECT_DIR$/fastbee-service/fastbee-system-service/src/main/resources" charset="UTF-8" /> |
||||
|
<file url="file://$PROJECT_DIR$/fastbee-service/src/main/java" charset="UTF-8" /> |
||||
|
<file url="file://$PROJECT_DIR$/fastbee-service/src/main/resources" charset="UTF-8" /> |
||||
|
<file url="file://$PROJECT_DIR$/src/main/java" charset="UTF-8" /> |
||||
|
<file url="file://$PROJECT_DIR$/src/main/resources" charset="UTF-8" /> |
||||
|
</component> |
||||
|
</project> |
@ -0,0 +1,30 @@ |
|||||
|
<?xml version="1.0" encoding="UTF-8"?> |
||||
|
<project version="4"> |
||||
|
<component name="RemoteRepositoriesConfiguration"> |
||||
|
<remote-repository> |
||||
|
<option name="id" value="public" /> |
||||
|
<option name="name" value="aliyun nexus" /> |
||||
|
<option name="url" value="https://maven.aliyun.com/repository/public" /> |
||||
|
</remote-repository> |
||||
|
<remote-repository> |
||||
|
<option name="id" value="central" /> |
||||
|
<option name="name" value="Central Repository" /> |
||||
|
<option name="url" value="https://repo.maven.apache.org/maven2" /> |
||||
|
</remote-repository> |
||||
|
<remote-repository> |
||||
|
<option name="id" value="central" /> |
||||
|
<option name="name" value="Maven Central repository" /> |
||||
|
<option name="url" value="https://repo1.maven.org/maven2" /> |
||||
|
</remote-repository> |
||||
|
<remote-repository> |
||||
|
<option name="id" value="jboss.community" /> |
||||
|
<option name="name" value="JBoss Community repository" /> |
||||
|
<option name="url" value="https://repository.jboss.org/nexus/content/repositories/public/" /> |
||||
|
</remote-repository> |
||||
|
<remote-repository> |
||||
|
<option name="id" value="nexus-aliyun" /> |
||||
|
<option name="name" value="Nexus aliyun" /> |
||||
|
<option name="url" value="https://maven.aliyun.com/repository/public" /> |
||||
|
</remote-repository> |
||||
|
</component> |
||||
|
</project> |
@ -0,0 +1,12 @@ |
|||||
|
<?xml version="1.0" encoding="UTF-8"?> |
||||
|
<project version="4"> |
||||
|
<component name="ExternalStorageConfigurationManager" enabled="true" /> |
||||
|
<component name="MavenProjectsManager"> |
||||
|
<option name="originalFiles"> |
||||
|
<list> |
||||
|
<option value="$PROJECT_DIR$/pom.xml" /> |
||||
|
</list> |
||||
|
</option> |
||||
|
</component> |
||||
|
<component name="ProjectRootManager" version="2" languageLevel="JDK_1_8" default="true" project-jdk-name="1.8" project-jdk-type="JavaSDK" /> |
||||
|
</project> |
@ -0,0 +1,6 @@ |
|||||
|
<?xml version="1.0" encoding="UTF-8"?> |
||||
|
<project version="4"> |
||||
|
<component name="VcsDirectoryMappings"> |
||||
|
<mapping directory="$PROJECT_DIR$/.." vcs="Git" /> |
||||
|
</component> |
||||
|
</project> |
@ -0,0 +1,4 @@ |
|||||
|
{ |
||||
|
"java.compile.nullAnalysis.mode": "automatic", |
||||
|
"java.configuration.updateBuildConfiguration": "interactive" |
||||
|
} |
@ -0,0 +1,20 @@ |
|||||
|
The MIT License (MIT) |
||||
|
|
||||
|
Copyright (c) 2018 RuoYi |
||||
|
|
||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy of |
||||
|
this software and associated documentation files (the "Software"), to deal in |
||||
|
the Software without restriction, including without limitation the rights to |
||||
|
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of |
||||
|
the Software, and to permit persons to whom the Software is furnished to do so, |
||||
|
subject to the following conditions: |
||||
|
|
||||
|
The above copyright notice and this permission notice shall be included in all |
||||
|
copies or substantial portions of the Software. |
||||
|
|
||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS |
||||
|
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR |
||||
|
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER |
||||
|
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN |
||||
|
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. |
@ -0,0 +1,86 @@ |
|||||
|
## 平台简介 |
||||
|
|
||||
|
若依是一套全部开源的快速开发平台,毫无保留给个人及企业免费使用。 |
||||
|
|
||||
|
* 前端采用Vue、Element UI。 |
||||
|
* 后端采用Spring Boot、Spring Security、Redis & Jwt。 |
||||
|
* 权限认证使用Jwt,支持多终端认证系统。 |
||||
|
* 支持加载动态权限菜单,多方式轻松权限控制。 |
||||
|
* 高效率开发,使用代码生成器可以一键生成前后端代码。 |
||||
|
* 提供了技术栈([Vue3](https://v3.cn.vuejs.org) [Element Plus](https://element-plus.org/zh-CN) [Vite](https://cn.vitejs.dev))版本[RuoYi-Vue3](https://github.com/yangzongzhuan/RuoYi-Vue3),保持同步更新。 |
||||
|
* 提供了单应用版本[RuoYi-Vue-fast](https://github.com/yangzongzhuan/RuoYi-Vue-fast),Oracle版本[RuoYi-Vue-Oracle](https://github.com/yangzongzhuan/RuoYi-Vue-Oracle),保持同步更新。 |
||||
|
* 不分离版本,请移步[RuoYi](https://gitee.com/y_project/RuoYi),微服务版本,请移步[RuoYi-Cloud](https://gitee.com/y_project/RuoYi-Cloud) |
||||
|
* 特别鸣谢:[element](https://github.com/ElemeFE/element),[vue-element-admin](https://github.com/PanJiaChen/vue-element-admin),[eladmin-web](https://github.com/elunez/eladmin-web)。 |
||||
|
* 阿里云折扣场:[点我进入](http://aly.ruoyi.vip),腾讯云秒杀场:[点我进入](http://txy.ruoyi.vip) |
||||
|
* 阿里云优惠券:[点我领取](https://www.aliyun.com/minisite/goods?userCode=brki8iof&share_source=copy_link),腾讯云优惠券:[点我领取](https://cloud.tencent.com/redirect.php?redirect=1025&cps_key=198c8df2ed259157187173bc7f4f32fd&from=console) |
||||
|
|
||||
|
## 内置功能 |
||||
|
|
||||
|
1. 用户管理:用户是系统操作者,该功能主要完成系统用户配置。 |
||||
|
2. 部门管理:配置系统组织机构(公司、部门、小组),树结构展现支持数据权限。 |
||||
|
3. 岗位管理:配置系统用户所属担任职务。 |
||||
|
4. 菜单管理:配置系统菜单,操作权限,按钮权限标识等。 |
||||
|
5. 角色管理:角色菜单权限分配、设置角色按机构进行数据范围权限划分。 |
||||
|
6. 字典管理:对系统中经常使用的一些较为固定的数据进行维护。 |
||||
|
7. 参数管理:对系统动态配置常用参数。 |
||||
|
8. 通知公告:系统通知公告信息发布维护。 |
||||
|
9. 操作日志:系统正常操作日志记录和查询;系统异常信息日志记录和查询。 |
||||
|
10. 登录日志:系统登录日志记录查询包含登录异常。 |
||||
|
11. 在线用户:当前系统中活跃用户状态监控。 |
||||
|
12. 定时任务:在线(添加、修改、删除)任务调度包含执行结果日志。 |
||||
|
13. 代码生成:前后端代码的生成(java、html、xml、sql)支持CRUD下载 。 |
||||
|
14. 系统接口:根据业务代码自动生成相关的api接口文档。 |
||||
|
15. 服务监控:监视当前系统CPU、内存、磁盘、堆栈等相关信息。 |
||||
|
16. 缓存监控:对系统的缓存信息查询,命令统计等。 |
||||
|
17. 在线构建器:拖动表单元素生成相应的HTML代码。 |
||||
|
18. 连接池监视:监视当前系统数据库连接池状态,可进行分析SQL找出系统性能瓶颈。 |
||||
|
|
||||
|
## 在线体验 |
||||
|
|
||||
|
- admin/admin123 |
||||
|
- 陆陆续续收到一些打赏,为了更好的体验已用于演示服务器升级。谢谢各位小伙伴。 |
||||
|
|
||||
|
演示地址:http://vue.ruoyi.vip |
||||
|
文档地址:http://doc.ruoyi.vip |
||||
|
|
||||
|
## 演示图 |
||||
|
|
||||
|
<table> |
||||
|
<tr> |
||||
|
<td><img src="https://oscimg.oschina.net/oscnet/cd1f90be5f2684f4560c9519c0f2a232ee8.jpg"/></td> |
||||
|
<td><img src="https://oscimg.oschina.net/oscnet/1cbcf0e6f257c7d3a063c0e3f2ff989e4b3.jpg"/></td> |
||||
|
</tr> |
||||
|
<tr> |
||||
|
<td><img src="https://oscimg.oschina.net/oscnet/up-8074972883b5ba0622e13246738ebba237a.png"/></td> |
||||
|
<td><img src="https://oscimg.oschina.net/oscnet/up-9f88719cdfca9af2e58b352a20e23d43b12.png"/></td> |
||||
|
</tr> |
||||
|
<tr> |
||||
|
<td><img src="https://oscimg.oschina.net/oscnet/up-39bf2584ec3a529b0d5a3b70d15c9b37646.png"/></td> |
||||
|
<td><img src="https://oscimg.oschina.net/oscnet/up-936ec82d1f4872e1bc980927654b6007307.png"/></td> |
||||
|
</tr> |
||||
|
<tr> |
||||
|
<td><img src="https://oscimg.oschina.net/oscnet/up-b2d62ceb95d2dd9b3fbe157bb70d26001e9.png"/></td> |
||||
|
<td><img src="https://oscimg.oschina.net/oscnet/up-d67451d308b7a79ad6819723396f7c3d77a.png"/></td> |
||||
|
</tr> |
||||
|
<tr> |
||||
|
<td><img src="https://oscimg.oschina.net/oscnet/5e8c387724954459291aafd5eb52b456f53.jpg"/></td> |
||||
|
<td><img src="https://oscimg.oschina.net/oscnet/644e78da53c2e92a95dfda4f76e6d117c4b.jpg"/></td> |
||||
|
</tr> |
||||
|
<tr> |
||||
|
<td><img src="https://oscimg.oschina.net/oscnet/up-8370a0d02977eebf6dbf854c8450293c937.png"/></td> |
||||
|
<td><img src="https://oscimg.oschina.net/oscnet/up-49003ed83f60f633e7153609a53a2b644f7.png"/></td> |
||||
|
</tr> |
||||
|
<tr> |
||||
|
<td><img src="https://oscimg.oschina.net/oscnet/up-d4fe726319ece268d4746602c39cffc0621.png"/></td> |
||||
|
<td><img src="https://oscimg.oschina.net/oscnet/up-c195234bbcd30be6927f037a6755e6ab69c.png"/></td> |
||||
|
</tr> |
||||
|
<tr> |
||||
|
<td><img src="https://oscimg.oschina.net/oscnet/b6115bc8c31de52951982e509930b20684a.jpg"/></td> |
||||
|
<td><img src="https://oscimg.oschina.net/oscnet/up-5e4daac0bb59612c5038448acbcef235e3a.png"/></td> |
||||
|
</tr> |
||||
|
</table> |
||||
|
|
||||
|
|
||||
|
## 若依前后端分离交流群 |
||||
|
|
||||
|
QQ群: [](https://jq.qq.com/?_wv=1027&k=5bVB1og) [](https://jq.qq.com/?_wv=1027&k=5eiA4DH) [](https://jq.qq.com/?_wv=1027&k=5AxMKlC) [](https://jq.qq.com/?_wv=1027&k=51G72yr) [](https://jq.qq.com/?_wv=1027&k=VvjN2nvu) [](https://jq.qq.com/?_wv=1027&k=5vYAqA05) [](https://jq.qq.com/?_wv=1027&k=kOIINEb5) [](https://jq.qq.com/?_wv=1027&k=UKtX5jhs) 点击按钮入群。 |
@ -0,0 +1,12 @@ |
|||||
|
@echo off |
||||
|
echo. |
||||
|
echo [信息] 清理工程target生成路径。 |
||||
|
echo. |
||||
|
|
||||
|
%~d0 |
||||
|
cd %~dp0 |
||||
|
|
||||
|
cd .. |
||||
|
call mvn clean |
||||
|
|
||||
|
pause |
@ -0,0 +1,12 @@ |
|||||
|
@echo off |
||||
|
echo. |
||||
|
echo [信息] 打包Web工程,生成war/jar包文件。 |
||||
|
echo. |
||||
|
|
||||
|
%~d0 |
||||
|
cd %~dp0 |
||||
|
|
||||
|
cd .. |
||||
|
call mvn clean package -Dmaven.test.skip=true |
||||
|
|
||||
|
pause |
@ -0,0 +1,14 @@ |
|||||
|
@echo off |
||||
|
echo. |
||||
|
echo [��Ϣ] ʹ��Jar��������Web���̡� |
||||
|
echo. |
||||
|
|
||||
|
cd %~dp0 |
||||
|
cd ../fastbee-admin/target |
||||
|
|
||||
|
set JAVA_OPTS=-Xms256m -Xmx1024m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=512m |
||||
|
|
||||
|
java -jar %JAVA_OPTS% fastbee-admin.jar |
||||
|
|
||||
|
cd bin |
||||
|
pause |
@ -0,0 +1,172 @@ |
|||||
|
<?xml version="1.0" encoding="UTF-8"?> |
||||
|
<project xmlns="http://maven.apache.org/POM/4.0.0" |
||||
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" |
||||
|
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> |
||||
|
<parent> |
||||
|
<artifactId>fastbee</artifactId> |
||||
|
<groupId>com.fastbee</groupId> |
||||
|
<version>3.8.5</version> |
||||
|
</parent> |
||||
|
<modelVersion>4.0.0</modelVersion> |
||||
|
<packaging>jar</packaging> |
||||
|
<artifactId>fastbee-admin</artifactId> |
||||
|
|
||||
|
<description> |
||||
|
web服务入口 |
||||
|
</description> |
||||
|
|
||||
|
<dependencies> |
||||
|
|
||||
|
<!-- spring-boot-devtools --> |
||||
|
<dependency> |
||||
|
<groupId>org.springframework.boot</groupId> |
||||
|
<artifactId>spring-boot-devtools</artifactId> |
||||
|
<optional>true</optional> <!-- 表示依赖不会传递 --> |
||||
|
</dependency> |
||||
|
|
||||
|
<!-- swagger3--> |
||||
|
<dependency> |
||||
|
<groupId>io.springfox</groupId> |
||||
|
<artifactId>springfox-boot-starter</artifactId> |
||||
|
</dependency> |
||||
|
|
||||
|
<!-- 防止进入swagger页面报类型转换错误,排除3.0.0中的引用,手动增加1.6.2版本 --> |
||||
|
<dependency> |
||||
|
<groupId>io.swagger</groupId> |
||||
|
<artifactId>swagger-models</artifactId> |
||||
|
<version>1.6.2</version> |
||||
|
</dependency> |
||||
|
|
||||
|
<!-- Mysql驱动包 --> |
||||
|
<dependency> |
||||
|
<groupId>mysql</groupId> |
||||
|
<artifactId>mysql-connector-java</artifactId> |
||||
|
</dependency> |
||||
|
|
||||
|
<!-- 核心模块--> |
||||
|
<dependency> |
||||
|
<groupId>com.fastbee</groupId> |
||||
|
<artifactId>fastbee-framework</artifactId> |
||||
|
</dependency> |
||||
|
|
||||
|
<!-- 定时任务--> |
||||
|
<dependency> |
||||
|
<groupId>com.fastbee</groupId> |
||||
|
<artifactId>fastbee-quartz</artifactId> |
||||
|
</dependency> |
||||
|
|
||||
|
<!-- 代码生成--> |
||||
|
<dependency> |
||||
|
<groupId>com.fastbee</groupId> |
||||
|
<artifactId>fastbee-generator</artifactId> |
||||
|
</dependency> |
||||
|
|
||||
|
<dependency> |
||||
|
<groupId>com.fastbee</groupId> |
||||
|
<artifactId>fastbee-oss</artifactId> |
||||
|
</dependency> |
||||
|
|
||||
|
<!-- controller API模块--> |
||||
|
<dependency> |
||||
|
<groupId>com.fastbee</groupId> |
||||
|
<artifactId>fastbee-open-api</artifactId> |
||||
|
</dependency> |
||||
|
<!--服务集成启动模块--> |
||||
|
<dependency> |
||||
|
<groupId>com.fastbee</groupId> |
||||
|
<artifactId>boot-strap</artifactId> |
||||
|
</dependency> |
||||
|
|
||||
|
<dependency> |
||||
|
<groupId>com.fastbee</groupId> |
||||
|
<artifactId>http-server</artifactId> |
||||
|
</dependency> |
||||
|
|
||||
|
<dependency> |
||||
|
<groupId>com.fastbee</groupId> |
||||
|
<artifactId>sip-server</artifactId> |
||||
|
</dependency> |
||||
|
|
||||
|
<dependency> |
||||
|
<groupId>com.fastbee</groupId> |
||||
|
<artifactId>fastbee-http</artifactId> |
||||
|
</dependency> |
||||
|
|
||||
|
<dependency> |
||||
|
<groupId>com.yomahub</groupId> |
||||
|
<artifactId>liteflow-core</artifactId> |
||||
|
<version>${liteflow.version}</version> |
||||
|
</dependency> |
||||
|
|
||||
|
<!-- 通知配置模块 --> |
||||
|
<dependency> |
||||
|
<groupId>com.fastbee</groupId> |
||||
|
<artifactId>fastbee-notify-web</artifactId> |
||||
|
</dependency> |
||||
|
<!-- 通知api模块 --> |
||||
|
<dependency> |
||||
|
<groupId>com.fastbee</groupId> |
||||
|
<artifactId>fastbee-notify-core</artifactId> |
||||
|
</dependency> |
||||
|
|
||||
|
<!-- oauth2.0 --> |
||||
|
<dependency> |
||||
|
<groupId>com.fastbee</groupId> |
||||
|
<artifactId>fastbee-oauth</artifactId> |
||||
|
</dependency> |
||||
|
|
||||
|
<dependency> |
||||
|
<groupId>com.github.ben-manes.caffeine</groupId> |
||||
|
<artifactId>caffeine</artifactId> |
||||
|
</dependency> |
||||
|
|
||||
|
<!-- <!– 小度音箱 –>--> |
||||
|
<!-- <dependency>--> |
||||
|
<!-- <groupId>com.fastbee</groupId>--> |
||||
|
<!-- <artifactId>fastbee-link-dueros</artifactId>--> |
||||
|
<!-- </dependency>--> |
||||
|
|
||||
|
<!-- 组态模块 --> |
||||
|
<!-- <dependency>--> |
||||
|
<!-- <groupId>com.fastbee</groupId>--> |
||||
|
<!-- <artifactId>fastbee-scada</artifactId>--> |
||||
|
<!-- </dependency>--> |
||||
|
|
||||
|
<dependency> |
||||
|
<groupId>com.fastbee</groupId> |
||||
|
<artifactId>fastbee-common</artifactId> |
||||
|
</dependency> |
||||
|
|
||||
|
</dependencies> |
||||
|
|
||||
|
<build> |
||||
|
<plugins> |
||||
|
<plugin> |
||||
|
<groupId>org.springframework.boot</groupId> |
||||
|
<artifactId>spring-boot-maven-plugin</artifactId> |
||||
|
<version>2.1.1.RELEASE</version> |
||||
|
<configuration> |
||||
|
<fork>true</fork> <!-- 如果没有该配置,devtools不会生效 --> |
||||
|
</configuration> |
||||
|
<executions> |
||||
|
<execution> |
||||
|
<goals> |
||||
|
<goal>repackage</goal> |
||||
|
</goals> |
||||
|
</execution> |
||||
|
</executions> |
||||
|
</plugin> |
||||
|
<plugin> |
||||
|
<groupId>org.apache.maven.plugins</groupId> |
||||
|
<artifactId>maven-war-plugin</artifactId> |
||||
|
<version>3.1.0</version> |
||||
|
<configuration> |
||||
|
<failOnMissingWebXml>false</failOnMissingWebXml> |
||||
|
<warName>${project.artifactId}</warName> |
||||
|
</configuration> |
||||
|
</plugin> |
||||
|
</plugins> |
||||
|
<finalName>${project.artifactId}</finalName> |
||||
|
</build> |
||||
|
|
||||
|
</project> |
@ -0,0 +1,22 @@ |
|||||
|
package com.fastbee; |
||||
|
|
||||
|
import com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure; |
||||
|
import com.dtflys.forest.springboot.annotation.ForestScan; |
||||
|
import org.springframework.boot.SpringApplication; |
||||
|
import org.springframework.boot.autoconfigure.SpringBootApplication; |
||||
|
|
||||
|
/** |
||||
|
* 启动程序 |
||||
|
* |
||||
|
* @author ruoyi |
||||
|
*/ |
||||
|
@SpringBootApplication(exclude = { DruidDataSourceAutoConfigure.class }) |
||||
|
@ForestScan(basePackages = "com.fastbee") |
||||
|
public class FastBeeApplication |
||||
|
{ |
||||
|
public static void main(String[] args) |
||||
|
{ |
||||
|
// System.setProperty("spring.devtools.restart.enabled", "false");
|
||||
|
SpringApplication.run(FastBeeApplication.class, args); |
||||
|
} |
||||
|
} |
@ -0,0 +1,18 @@ |
|||||
|
package com.fastbee; |
||||
|
|
||||
|
import org.springframework.boot.builder.SpringApplicationBuilder; |
||||
|
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer; |
||||
|
|
||||
|
/** |
||||
|
* web容器中进行部署 |
||||
|
* |
||||
|
* @author ruoyi |
||||
|
*/ |
||||
|
public class FastBeeServletInitializer extends SpringBootServletInitializer |
||||
|
{ |
||||
|
@Override |
||||
|
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) |
||||
|
{ |
||||
|
return application.sources(FastBeeApplication.class); |
||||
|
} |
||||
|
} |
@ -0,0 +1,101 @@ |
|||||
|
package com.fastbee.web.controller.common; |
||||
|
|
||||
|
import java.awt.image.BufferedImage; |
||||
|
import java.io.IOException; |
||||
|
import java.util.concurrent.TimeUnit; |
||||
|
import javax.annotation.Resource; |
||||
|
import javax.imageio.ImageIO; |
||||
|
import javax.servlet.http.HttpServletResponse; |
||||
|
|
||||
|
import io.swagger.annotations.Api; |
||||
|
import io.swagger.annotations.ApiOperation; |
||||
|
import org.springframework.beans.factory.annotation.Autowired; |
||||
|
import org.springframework.util.FastByteArrayOutputStream; |
||||
|
import org.springframework.web.bind.annotation.GetMapping; |
||||
|
import org.springframework.web.bind.annotation.RestController; |
||||
|
import com.google.code.kaptcha.Producer; |
||||
|
import com.fastbee.common.config.RuoYiConfig; |
||||
|
import com.fastbee.common.constant.CacheConstants; |
||||
|
import com.fastbee.common.constant.Constants; |
||||
|
import com.fastbee.common.core.domain.AjaxResult; |
||||
|
import com.fastbee.common.core.redis.RedisCache; |
||||
|
import com.fastbee.common.utils.sign.Base64; |
||||
|
import com.fastbee.common.utils.uuid.IdUtils; |
||||
|
import com.fastbee.system.service.ISysConfigService; |
||||
|
|
||||
|
/** |
||||
|
* 验证码操作处理 |
||||
|
* |
||||
|
* @author ruoyi |
||||
|
*/ |
||||
|
@Api(tags = "验证码操作") |
||||
|
@RestController |
||||
|
public class CaptchaController |
||||
|
{ |
||||
|
@Resource(name = "captchaProducer") |
||||
|
private Producer captchaProducer; |
||||
|
|
||||
|
@Resource(name = "captchaProducerMath") |
||||
|
private Producer captchaProducerMath; |
||||
|
|
||||
|
@Autowired |
||||
|
private RedisCache redisCache; |
||||
|
|
||||
|
@Autowired |
||||
|
private ISysConfigService configService; |
||||
|
/** |
||||
|
* 生成验证码 |
||||
|
*/ |
||||
|
@ApiOperation("获取验证码") |
||||
|
@GetMapping("/captchaImage") |
||||
|
public AjaxResult getCode(HttpServletResponse response,Boolean showCode) throws IOException |
||||
|
{ |
||||
|
AjaxResult ajax = AjaxResult.success(); |
||||
|
boolean captchaEnabled = configService.selectCaptchaEnabled(); |
||||
|
ajax.put("captchaEnabled", captchaEnabled); |
||||
|
if (!captchaEnabled) |
||||
|
{ |
||||
|
return ajax; |
||||
|
} |
||||
|
|
||||
|
// 保存验证码信息
|
||||
|
String uuid = IdUtils.simpleUUID(); |
||||
|
String verifyKey = CacheConstants.CAPTCHA_CODE_KEY + uuid; |
||||
|
|
||||
|
String capStr = null, code = null; |
||||
|
BufferedImage image = null; |
||||
|
|
||||
|
// 生成验证码
|
||||
|
String captchaType = RuoYiConfig.getCaptchaType(); |
||||
|
if ("math".equals(captchaType)) |
||||
|
{ |
||||
|
String capText = captchaProducerMath.createText(); |
||||
|
capStr = capText.substring(0, capText.lastIndexOf("@")); |
||||
|
code = capText.substring(capText.lastIndexOf("@") + 1); |
||||
|
image = captchaProducerMath.createImage(capStr); |
||||
|
} |
||||
|
else if ("char".equals(captchaType)) |
||||
|
{ |
||||
|
capStr = code = captchaProducer.createText(); |
||||
|
image = captchaProducer.createImage(capStr); |
||||
|
} |
||||
|
|
||||
|
redisCache.setCacheObject(verifyKey, code, Constants.CAPTCHA_EXPIRATION, TimeUnit.MINUTES); |
||||
|
// 转换流信息写出
|
||||
|
FastByteArrayOutputStream os = new FastByteArrayOutputStream(); |
||||
|
try |
||||
|
{ |
||||
|
ImageIO.write(image, "jpg", os); |
||||
|
} |
||||
|
catch (IOException e) |
||||
|
{ |
||||
|
return AjaxResult.error(e.getMessage()); |
||||
|
} |
||||
|
if (Boolean.TRUE.equals(showCode)) { |
||||
|
ajax.put("resultCode", code); |
||||
|
} |
||||
|
ajax.put("uuid", uuid); |
||||
|
ajax.put("img", Base64.encode(os.toByteArray())); |
||||
|
return ajax; |
||||
|
} |
||||
|
} |
@ -0,0 +1,199 @@ |
|||||
|
package com.fastbee.web.controller.common; |
||||
|
|
||||
|
import java.io.IOException; |
||||
|
import java.io.OutputStream; |
||||
|
import java.util.ArrayList; |
||||
|
import java.util.List; |
||||
|
import javax.servlet.http.HttpServletRequest; |
||||
|
import javax.servlet.http.HttpServletResponse; |
||||
|
|
||||
|
import com.fastbee.common.utils.MessageUtils; |
||||
|
import com.fastbee.common.utils.file.QRCodeUtils; |
||||
|
import com.google.zxing.client.j2se.MatrixToImageWriter; |
||||
|
import com.google.zxing.common.BitMatrix; |
||||
|
import io.swagger.annotations.Api; |
||||
|
import io.swagger.annotations.ApiOperation; |
||||
|
import org.slf4j.Logger; |
||||
|
import org.slf4j.LoggerFactory; |
||||
|
import org.springframework.beans.factory.annotation.Autowired; |
||||
|
import org.springframework.http.MediaType; |
||||
|
import org.springframework.web.bind.annotation.GetMapping; |
||||
|
import org.springframework.web.bind.annotation.PostMapping; |
||||
|
import org.springframework.web.bind.annotation.RequestMapping; |
||||
|
import org.springframework.web.bind.annotation.RestController; |
||||
|
import org.springframework.web.multipart.MultipartFile; |
||||
|
import com.fastbee.common.config.RuoYiConfig; |
||||
|
import com.fastbee.common.constant.Constants; |
||||
|
import com.fastbee.common.core.domain.AjaxResult; |
||||
|
import com.fastbee.common.utils.StringUtils; |
||||
|
import com.fastbee.common.utils.file.FileUploadUtils; |
||||
|
import com.fastbee.common.utils.file.FileUtils; |
||||
|
import com.fastbee.framework.config.ServerConfig; |
||||
|
|
||||
|
/** |
||||
|
* 通用请求处理 |
||||
|
* |
||||
|
* @author ruoyi |
||||
|
*/ |
||||
|
@Api(tags = "通用请求处理") |
||||
|
@RestController |
||||
|
@RequestMapping("/common") |
||||
|
public class CommonController |
||||
|
{ |
||||
|
private static final Logger log = LoggerFactory.getLogger(CommonController.class); |
||||
|
|
||||
|
@Autowired |
||||
|
private ServerConfig serverConfig; |
||||
|
|
||||
|
private static final String FILE_DELIMETER = ","; |
||||
|
|
||||
|
/** |
||||
|
* 通用下载请求 |
||||
|
* |
||||
|
* @param fileName 文件名称 |
||||
|
* @param delete 是否删除 |
||||
|
*/ |
||||
|
@ApiOperation("文件下载") |
||||
|
@GetMapping("/download") |
||||
|
public void fileDownload(String fileName, Boolean delete, HttpServletResponse response, HttpServletRequest request) |
||||
|
{ |
||||
|
try |
||||
|
{ |
||||
|
if (!FileUtils.checkAllowDownload(fileName)) |
||||
|
{ |
||||
|
throw new Exception(StringUtils.format(MessageUtils.message("download.filename.not.valid"), fileName)); |
||||
|
} |
||||
|
String realFileName = System.currentTimeMillis() + fileName.substring(fileName.indexOf("_") + 1); |
||||
|
String filePath = RuoYiConfig.getDownloadPath() + fileName; |
||||
|
|
||||
|
response.setContentType(MediaType.APPLICATION_OCTET_STREAM_VALUE); |
||||
|
FileUtils.setAttachmentResponseHeader(response, realFileName); |
||||
|
FileUtils.writeBytes(filePath, response.getOutputStream()); |
||||
|
if (delete) |
||||
|
{ |
||||
|
FileUtils.deleteFile(filePath); |
||||
|
} |
||||
|
} |
||||
|
catch (Exception e) |
||||
|
{ |
||||
|
log.error("下载文件失败", e); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 通用上传请求(单个) |
||||
|
*/ |
||||
|
@ApiOperation("单个文件上传") |
||||
|
@PostMapping("/upload") |
||||
|
public AjaxResult uploadFile(MultipartFile file) throws Exception |
||||
|
{ |
||||
|
try |
||||
|
{ |
||||
|
// 上传文件路径
|
||||
|
String filePath = RuoYiConfig.getUploadPath(); |
||||
|
// 上传并返回新文件名称
|
||||
|
String fileName = FileUploadUtils.upload(filePath, file); |
||||
|
String url = serverConfig.getUrl() + fileName; |
||||
|
AjaxResult ajax = AjaxResult.success(); |
||||
|
ajax.put("url", url); |
||||
|
ajax.put("fileName", fileName); |
||||
|
ajax.put("newFileName", FileUtils.getName(fileName)); |
||||
|
ajax.put("originalFilename", file.getOriginalFilename()); |
||||
|
return ajax; |
||||
|
} |
||||
|
catch (Exception e) |
||||
|
{ |
||||
|
return AjaxResult.error(e.getMessage()); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 通用上传请求(多个) |
||||
|
*/ |
||||
|
@ApiOperation("多个文件上传") |
||||
|
@PostMapping("/uploads") |
||||
|
public AjaxResult uploadFiles(List<MultipartFile> files) throws Exception |
||||
|
{ |
||||
|
try |
||||
|
{ |
||||
|
// 上传文件路径
|
||||
|
String filePath = RuoYiConfig.getUploadPath(); |
||||
|
List<String> urls = new ArrayList<String>(); |
||||
|
List<String> fileNames = new ArrayList<String>(); |
||||
|
List<String> newFileNames = new ArrayList<String>(); |
||||
|
List<String> originalFilenames = new ArrayList<String>(); |
||||
|
for (MultipartFile file : files) |
||||
|
{ |
||||
|
// 上传并返回新文件名称
|
||||
|
String fileName = FileUploadUtils.upload(filePath, file); |
||||
|
String url = serverConfig.getUrl() + fileName; |
||||
|
urls.add(url); |
||||
|
fileNames.add(fileName); |
||||
|
newFileNames.add(FileUtils.getName(fileName)); |
||||
|
originalFilenames.add(file.getOriginalFilename()); |
||||
|
} |
||||
|
AjaxResult ajax = AjaxResult.success(); |
||||
|
ajax.put("urls", StringUtils.join(urls, FILE_DELIMETER)); |
||||
|
ajax.put("fileNames", StringUtils.join(fileNames, FILE_DELIMETER)); |
||||
|
ajax.put("newFileNames", StringUtils.join(newFileNames, FILE_DELIMETER)); |
||||
|
ajax.put("originalFilenames", StringUtils.join(originalFilenames, FILE_DELIMETER)); |
||||
|
return ajax; |
||||
|
} |
||||
|
catch (Exception e) |
||||
|
{ |
||||
|
return AjaxResult.error(e.getMessage()); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 本地资源通用下载 |
||||
|
*/ |
||||
|
@GetMapping("/download/resource") |
||||
|
@ApiOperation("本地资源通用下载") |
||||
|
public void resourceDownload(String resource, HttpServletRequest request, HttpServletResponse response) |
||||
|
throws Exception |
||||
|
{ |
||||
|
try |
||||
|
{ |
||||
|
if (!FileUtils.checkAllowDownload(resource)) |
||||
|
{ |
||||
|
throw new Exception(StringUtils.format(MessageUtils.message("download.resource.not.valid"), resource)); |
||||
|
} |
||||
|
// 本地资源路径
|
||||
|
String localPath = RuoYiConfig.getProfile(); |
||||
|
// 数据库资源地址
|
||||
|
String downloadPath = localPath + StringUtils.substringAfter(resource, Constants.RESOURCE_PREFIX); |
||||
|
// 下载名称
|
||||
|
String downloadName = StringUtils.substringAfterLast(downloadPath, "/"); |
||||
|
response.setContentType(MediaType.APPLICATION_OCTET_STREAM_VALUE); |
||||
|
FileUtils.setAttachmentResponseHeader(response, downloadName); |
||||
|
FileUtils.writeBytes(downloadPath, response.getOutputStream()); |
||||
|
} |
||||
|
catch (Exception e) |
||||
|
{ |
||||
|
log.error("下载文件失败", e); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 生成二维码 |
||||
|
* @param url url |
||||
|
|
||||
|
* */ |
||||
|
@GetMapping(value = "/createQrCode") |
||||
|
@ApiOperation("根据url生成二维码") |
||||
|
public void getCode(String url, HttpServletResponse response) throws IOException { |
||||
|
// 设置响应流信息
|
||||
|
response.setContentType("image/jpg"); |
||||
|
response.setHeader("Pragma", "no-cache"); |
||||
|
response.setHeader("Cache-Control", "no-cache"); |
||||
|
response.setDateHeader("Expires", 0); |
||||
|
|
||||
|
OutputStream stream = response.getOutputStream(); |
||||
|
|
||||
|
//获取一个二维码图片
|
||||
|
BitMatrix bitMatrix = QRCodeUtils.createCode(url); |
||||
|
//以流的形式输出到前端
|
||||
|
MatrixToImageWriter.writeToStream(bitMatrix , "jpg" , stream); |
||||
|
} |
||||
|
} |
@ -0,0 +1,131 @@ |
|||||
|
package com.fastbee.web.controller.monitor; |
||||
|
|
||||
|
import java.util.ArrayList; |
||||
|
import java.util.Collection; |
||||
|
import java.util.HashMap; |
||||
|
import java.util.List; |
||||
|
import java.util.Map; |
||||
|
import java.util.Properties; |
||||
|
import java.util.Set; |
||||
|
|
||||
|
import io.swagger.annotations.Api; |
||||
|
import io.swagger.annotations.ApiOperation; |
||||
|
import org.springframework.beans.factory.annotation.Autowired; |
||||
|
import org.springframework.data.redis.core.RedisCallback; |
||||
|
import org.springframework.data.redis.core.RedisTemplate; |
||||
|
import org.springframework.security.access.prepost.PreAuthorize; |
||||
|
import org.springframework.web.bind.annotation.DeleteMapping; |
||||
|
import org.springframework.web.bind.annotation.GetMapping; |
||||
|
import org.springframework.web.bind.annotation.PathVariable; |
||||
|
import org.springframework.web.bind.annotation.RequestMapping; |
||||
|
import org.springframework.web.bind.annotation.RestController; |
||||
|
import com.fastbee.common.constant.CacheConstants; |
||||
|
import com.fastbee.common.core.domain.AjaxResult; |
||||
|
import com.fastbee.common.utils.StringUtils; |
||||
|
import com.fastbee.system.domain.SysCache; |
||||
|
|
||||
|
/** |
||||
|
* 缓存监控 |
||||
|
* |
||||
|
* @author ruoyi |
||||
|
*/ |
||||
|
@Api(tags = "缓存监控") |
||||
|
@RestController |
||||
|
@RequestMapping("/monitor/cache") |
||||
|
public class CacheController |
||||
|
{ |
||||
|
@Autowired |
||||
|
private RedisTemplate<String, String> redisTemplate; |
||||
|
|
||||
|
private final static List<SysCache> caches = new ArrayList<SysCache>(); |
||||
|
{ |
||||
|
caches.add(new SysCache(CacheConstants.LOGIN_TOKEN_KEY, "用户信息")); |
||||
|
caches.add(new SysCache(CacheConstants.SYS_CONFIG_KEY, "配置信息")); |
||||
|
caches.add(new SysCache(CacheConstants.SYS_DICT_KEY, "数据字典")); |
||||
|
caches.add(new SysCache(CacheConstants.CAPTCHA_CODE_KEY, "验证码")); |
||||
|
caches.add(new SysCache(CacheConstants.REPEAT_SUBMIT_KEY, "防重提交")); |
||||
|
caches.add(new SysCache(CacheConstants.RATE_LIMIT_KEY, "限流处理")); |
||||
|
caches.add(new SysCache(CacheConstants.PWD_ERR_CNT_KEY, "密码错误次数")); |
||||
|
} |
||||
|
|
||||
|
@ApiOperation("获取缓存信息") |
||||
|
@PreAuthorize("@ss.hasPermi('monitor:cache:list')") |
||||
|
@GetMapping() |
||||
|
public AjaxResult getInfo() throws Exception |
||||
|
{ |
||||
|
Properties info = (Properties) redisTemplate.execute((RedisCallback<Object>) connection -> connection.info()); |
||||
|
Properties commandStats = (Properties) redisTemplate.execute((RedisCallback<Object>) connection -> connection.info("commandstats")); |
||||
|
Object dbSize = redisTemplate.execute((RedisCallback<Object>) connection -> connection.dbSize()); |
||||
|
|
||||
|
Map<String, Object> result = new HashMap<>(3); |
||||
|
result.put("info", info); |
||||
|
result.put("dbSize", dbSize); |
||||
|
|
||||
|
List<Map<String, String>> pieList = new ArrayList<>(); |
||||
|
commandStats.stringPropertyNames().forEach(key -> { |
||||
|
Map<String, String> data = new HashMap<>(2); |
||||
|
String property = commandStats.getProperty(key); |
||||
|
data.put("name", StringUtils.removeStart(key, "cmdstat_")); |
||||
|
data.put("value", StringUtils.substringBetween(property, "calls=", ",usec")); |
||||
|
pieList.add(data); |
||||
|
}); |
||||
|
result.put("commandStats", pieList); |
||||
|
return AjaxResult.success(result); |
||||
|
} |
||||
|
|
||||
|
@ApiOperation("缓存列表") |
||||
|
@PreAuthorize("@ss.hasPermi('monitor:cache:list')") |
||||
|
@GetMapping("/getNames") |
||||
|
public AjaxResult cache() |
||||
|
{ |
||||
|
return AjaxResult.success(caches); |
||||
|
} |
||||
|
|
||||
|
@ApiOperation("键名列表") |
||||
|
@PreAuthorize("@ss.hasPermi('monitor:cache:list')") |
||||
|
@GetMapping("/getKeys/{cacheName}") |
||||
|
public AjaxResult getCacheKeys(@PathVariable String cacheName) |
||||
|
{ |
||||
|
Set<String> cacheKeys = redisTemplate.keys(cacheName + "*"); |
||||
|
return AjaxResult.success(cacheKeys); |
||||
|
} |
||||
|
|
||||
|
@ApiOperation("缓存内容") |
||||
|
@PreAuthorize("@ss.hasPermi('monitor:cache:list')") |
||||
|
@GetMapping("/getValue/{cacheName}/{cacheKey}") |
||||
|
public AjaxResult getCacheValue(@PathVariable String cacheName, @PathVariable String cacheKey) |
||||
|
{ |
||||
|
String cacheValue = redisTemplate.opsForValue().get(cacheKey); |
||||
|
SysCache sysCache = new SysCache(cacheName, cacheKey, cacheValue); |
||||
|
return AjaxResult.success(sysCache); |
||||
|
} |
||||
|
|
||||
|
@ApiOperation("清理缓存名称") |
||||
|
@PreAuthorize("@ss.hasPermi('monitor:cache:remove')") |
||||
|
@DeleteMapping("/clearCacheName/{cacheName}") |
||||
|
public AjaxResult clearCacheName(@PathVariable String cacheName) |
||||
|
{ |
||||
|
Collection<String> cacheKeys = redisTemplate.keys(cacheName + "*"); |
||||
|
redisTemplate.delete(cacheKeys); |
||||
|
return AjaxResult.success(); |
||||
|
} |
||||
|
|
||||
|
@ApiOperation("清理缓存键名") |
||||
|
@PreAuthorize("@ss.hasPermi('monitor:cache:remove')") |
||||
|
@DeleteMapping("/clearCacheKey/{cacheKey}") |
||||
|
public AjaxResult clearCacheKey(@PathVariable String cacheKey) |
||||
|
{ |
||||
|
redisTemplate.delete(cacheKey); |
||||
|
return AjaxResult.success(); |
||||
|
} |
||||
|
|
||||
|
@ApiOperation("清理所有缓存内容") |
||||
|
@PreAuthorize("@ss.hasPermi('monitor:cache:remove')") |
||||
|
@DeleteMapping("/clearCacheAll") |
||||
|
public AjaxResult clearCacheAll() |
||||
|
{ |
||||
|
Collection<String> cacheKeys = redisTemplate.keys("*"); |
||||
|
redisTemplate.delete(cacheKeys); |
||||
|
return AjaxResult.success(); |
||||
|
} |
||||
|
} |
@ -0,0 +1,31 @@ |
|||||
|
package com.fastbee.web.controller.monitor; |
||||
|
|
||||
|
import io.swagger.annotations.Api; |
||||
|
import io.swagger.annotations.ApiOperation; |
||||
|
import org.springframework.security.access.prepost.PreAuthorize; |
||||
|
import org.springframework.web.bind.annotation.GetMapping; |
||||
|
import org.springframework.web.bind.annotation.RequestMapping; |
||||
|
import org.springframework.web.bind.annotation.RestController; |
||||
|
import com.fastbee.common.core.domain.AjaxResult; |
||||
|
import com.fastbee.framework.web.domain.Server; |
||||
|
|
||||
|
/** |
||||
|
* 服务器监控 |
||||
|
* |
||||
|
* @author ruoyi |
||||
|
*/ |
||||
|
@Api(tags = "服务器监控") |
||||
|
@RestController |
||||
|
@RequestMapping("/monitor/server") |
||||
|
public class ServerController |
||||
|
{ |
||||
|
@ApiOperation("获取服务器信息") |
||||
|
@PreAuthorize("@ss.hasPermi('monitor:server:list')") |
||||
|
@GetMapping() |
||||
|
public AjaxResult getInfo() throws Exception |
||||
|
{ |
||||
|
Server server = new Server(); |
||||
|
server.copyTo(); |
||||
|
return AjaxResult.success(server); |
||||
|
} |
||||
|
} |
@ -0,0 +1,100 @@ |
|||||
|
package com.fastbee.web.controller.monitor; |
||||
|
|
||||
|
import java.util.HashMap; |
||||
|
import java.util.List; |
||||
|
import javax.servlet.http.HttpServletResponse; |
||||
|
|
||||
|
import io.swagger.annotations.Api; |
||||
|
import io.swagger.annotations.ApiOperation; |
||||
|
import org.springframework.beans.factory.annotation.Autowired; |
||||
|
import org.springframework.security.access.prepost.PreAuthorize; |
||||
|
import org.springframework.web.bind.annotation.DeleteMapping; |
||||
|
import org.springframework.web.bind.annotation.GetMapping; |
||||
|
import org.springframework.web.bind.annotation.PathVariable; |
||||
|
import org.springframework.web.bind.annotation.PostMapping; |
||||
|
import org.springframework.web.bind.annotation.RequestMapping; |
||||
|
import org.springframework.web.bind.annotation.RestController; |
||||
|
import com.fastbee.common.annotation.Log; |
||||
|
import com.fastbee.common.core.controller.BaseController; |
||||
|
import com.fastbee.common.core.domain.AjaxResult; |
||||
|
import com.fastbee.common.core.page.TableDataInfo; |
||||
|
import com.fastbee.common.enums.BusinessType; |
||||
|
import com.fastbee.common.utils.poi.ExcelUtil; |
||||
|
import com.fastbee.framework.web.service.SysPasswordService; |
||||
|
import com.fastbee.system.domain.SysLogininfor; |
||||
|
import com.fastbee.system.service.ISysLogininforService; |
||||
|
|
||||
|
/** |
||||
|
* 系统访问记录 |
||||
|
* |
||||
|
* @author ruoyi |
||||
|
*/ |
||||
|
@Api(tags = "日志管理:登录日志") |
||||
|
@RestController |
||||
|
@RequestMapping("/monitor/logininfor") |
||||
|
public class SysLogininforController extends BaseController |
||||
|
{ |
||||
|
@Autowired |
||||
|
private ISysLogininforService logininforService; |
||||
|
|
||||
|
@Autowired |
||||
|
private SysPasswordService passwordService; |
||||
|
|
||||
|
@ApiOperation("获取列表登录信息") |
||||
|
@PreAuthorize("@ss.hasPermi('monitor:logininfor:list')") |
||||
|
@GetMapping("/list") |
||||
|
public TableDataInfo list(SysLogininfor logininfor) |
||||
|
{ |
||||
|
startPage(); |
||||
|
List<SysLogininfor> list = logininforService.selectLogininforList(logininfor); |
||||
|
return getDataTable(list); |
||||
|
} |
||||
|
|
||||
|
@ApiOperation("导出登录日志列表") |
||||
|
@Log(title = "登录日志", businessType = BusinessType.EXPORT) |
||||
|
@PreAuthorize("@ss.hasPermi('monitor:logininfor:export')") |
||||
|
@PostMapping("/export") |
||||
|
public void export(HttpServletResponse response, SysLogininfor logininfor) |
||||
|
{ |
||||
|
List<SysLogininfor> list = logininforService.selectLogininforList(logininfor); |
||||
|
ExcelUtil<SysLogininfor> util = new ExcelUtil<SysLogininfor>(SysLogininfor.class); |
||||
|
util.exportExcel(response, list, "登录日志"); |
||||
|
} |
||||
|
|
||||
|
@ApiOperation("批量删除登录日志") |
||||
|
@PreAuthorize("@ss.hasPermi('monitor:logininfor:remove')") |
||||
|
@Log(title = "登录日志", businessType = BusinessType.DELETE) |
||||
|
@DeleteMapping("/{infoIds}") |
||||
|
public AjaxResult remove(@PathVariable Long[] infoIds) |
||||
|
{ |
||||
|
return toAjax(logininforService.deleteLogininforByIds(infoIds)); |
||||
|
} |
||||
|
|
||||
|
@ApiOperation("清空登录日志信息") |
||||
|
@PreAuthorize("@ss.hasPermi('monitor:logininfor:remove')") |
||||
|
@Log(title = "登录日志", businessType = BusinessType.CLEAN) |
||||
|
@DeleteMapping("/clean") |
||||
|
public AjaxResult clean() |
||||
|
{ |
||||
|
logininforService.cleanLogininfor(); |
||||
|
return success(); |
||||
|
} |
||||
|
|
||||
|
@ApiOperation("账户解锁") |
||||
|
@PreAuthorize("@ss.hasPermi('monitor:logininfor:unlock')") |
||||
|
@Log(title = "账户解锁", businessType = BusinessType.OTHER) |
||||
|
@GetMapping("/unlock/{userName}") |
||||
|
public AjaxResult unlock(@PathVariable("userName") String userName) |
||||
|
{ |
||||
|
passwordService.clearLoginRecordCache(userName); |
||||
|
return success(); |
||||
|
} |
||||
|
|
||||
|
@ApiOperation("获取一周内每天用户统计") |
||||
|
@PreAuthorize("@ss.hasPermi('monitor:logininfor:list')") |
||||
|
@GetMapping("/userCount") |
||||
|
public AjaxResult userCount() |
||||
|
{ |
||||
|
return toAjax(logininforService.getUserCount()); |
||||
|
} |
||||
|
} |
@ -0,0 +1,77 @@ |
|||||
|
package com.fastbee.web.controller.monitor; |
||||
|
|
||||
|
import java.util.List; |
||||
|
import javax.servlet.http.HttpServletResponse; |
||||
|
|
||||
|
import io.swagger.annotations.Api; |
||||
|
import io.swagger.annotations.ApiOperation; |
||||
|
import org.springframework.beans.factory.annotation.Autowired; |
||||
|
import org.springframework.security.access.prepost.PreAuthorize; |
||||
|
import org.springframework.web.bind.annotation.DeleteMapping; |
||||
|
import org.springframework.web.bind.annotation.GetMapping; |
||||
|
import org.springframework.web.bind.annotation.PathVariable; |
||||
|
import org.springframework.web.bind.annotation.PostMapping; |
||||
|
import org.springframework.web.bind.annotation.RequestMapping; |
||||
|
import org.springframework.web.bind.annotation.RestController; |
||||
|
import com.fastbee.common.annotation.Log; |
||||
|
import com.fastbee.common.core.controller.BaseController; |
||||
|
import com.fastbee.common.core.domain.AjaxResult; |
||||
|
import com.fastbee.common.core.page.TableDataInfo; |
||||
|
import com.fastbee.common.enums.BusinessType; |
||||
|
import com.fastbee.common.utils.poi.ExcelUtil; |
||||
|
import com.fastbee.system.domain.SysOperLog; |
||||
|
import com.fastbee.system.service.ISysOperLogService; |
||||
|
|
||||
|
/** |
||||
|
* 操作日志记录 |
||||
|
* |
||||
|
* @author ruoyi |
||||
|
*/ |
||||
|
@Api(tags = "日志管理:操作日志") |
||||
|
@RestController |
||||
|
@RequestMapping("/monitor/operlog") |
||||
|
public class SysOperlogController extends BaseController |
||||
|
{ |
||||
|
@Autowired |
||||
|
private ISysOperLogService operLogService; |
||||
|
|
||||
|
@ApiOperation("获取操作日志列表") |
||||
|
@PreAuthorize("@ss.hasPermi('monitor:operlog:list')") |
||||
|
@GetMapping("/list") |
||||
|
public TableDataInfo list(SysOperLog operLog) |
||||
|
{ |
||||
|
startPage(); |
||||
|
List<SysOperLog> list = operLogService.selectOperLogList(operLog); |
||||
|
return getDataTable(list); |
||||
|
} |
||||
|
|
||||
|
@ApiOperation("导出操作日志") |
||||
|
@Log(title = "操作日志", businessType = BusinessType.EXPORT) |
||||
|
@PreAuthorize("@ss.hasPermi('monitor:operlog:export')") |
||||
|
@PostMapping("/export") |
||||
|
public void export(HttpServletResponse response, SysOperLog operLog) |
||||
|
{ |
||||
|
List<SysOperLog> list = operLogService.selectOperLogList(operLog); |
||||
|
ExcelUtil<SysOperLog> util = new ExcelUtil<SysOperLog>(SysOperLog.class); |
||||
|
util.exportExcel(response, list, "操作日志"); |
||||
|
} |
||||
|
|
||||
|
@ApiOperation("批量删除操作日志") |
||||
|
@Log(title = "操作日志", businessType = BusinessType.DELETE) |
||||
|
@PreAuthorize("@ss.hasPermi('monitor:operlog:remove')") |
||||
|
@DeleteMapping("/{operIds}") |
||||
|
public AjaxResult remove(@PathVariable Long[] operIds) |
||||
|
{ |
||||
|
return toAjax(operLogService.deleteOperLogByIds(operIds)); |
||||
|
} |
||||
|
|
||||
|
@ApiOperation("清空操作日志") |
||||
|
@Log(title = "操作日志", businessType = BusinessType.CLEAN) |
||||
|
@PreAuthorize("@ss.hasPermi('monitor:operlog:remove')") |
||||
|
@DeleteMapping("/clean") |
||||
|
public AjaxResult clean() |
||||
|
{ |
||||
|
operLogService.cleanOperLog(); |
||||
|
return success(); |
||||
|
} |
||||
|
} |
@ -0,0 +1,98 @@ |
|||||
|
package com.fastbee.web.controller.monitor; |
||||
|
|
||||
|
import java.util.ArrayList; |
||||
|
import java.util.Collection; |
||||
|
import java.util.Collections; |
||||
|
import java.util.List; |
||||
|
|
||||
|
import io.swagger.annotations.Api; |
||||
|
import io.swagger.annotations.ApiOperation; |
||||
|
import org.springframework.beans.factory.annotation.Autowired; |
||||
|
import org.springframework.security.access.prepost.PreAuthorize; |
||||
|
import org.springframework.web.bind.annotation.DeleteMapping; |
||||
|
import org.springframework.web.bind.annotation.GetMapping; |
||||
|
import org.springframework.web.bind.annotation.PathVariable; |
||||
|
import org.springframework.web.bind.annotation.RequestMapping; |
||||
|
import org.springframework.web.bind.annotation.RestController; |
||||
|
import com.fastbee.common.annotation.Log; |
||||
|
import com.fastbee.common.constant.CacheConstants; |
||||
|
import com.fastbee.common.core.controller.BaseController; |
||||
|
import com.fastbee.common.core.domain.AjaxResult; |
||||
|
import com.fastbee.common.core.domain.model.LoginUser; |
||||
|
import com.fastbee.common.core.page.TableDataInfo; |
||||
|
import com.fastbee.common.core.redis.RedisCache; |
||||
|
import com.fastbee.common.enums.BusinessType; |
||||
|
import com.fastbee.common.utils.StringUtils; |
||||
|
import com.fastbee.system.domain.SysUserOnline; |
||||
|
import com.fastbee.system.service.ISysUserOnlineService; |
||||
|
|
||||
|
/** |
||||
|
* 在线用户监控 |
||||
|
* |
||||
|
* @author ruoyi |
||||
|
*/ |
||||
|
@Api(tags = "在线用户监控") |
||||
|
@RestController |
||||
|
@RequestMapping("/monitor/online") |
||||
|
public class SysUserOnlineController extends BaseController |
||||
|
{ |
||||
|
@Autowired |
||||
|
private ISysUserOnlineService userOnlineService; |
||||
|
|
||||
|
@Autowired |
||||
|
private RedisCache redisCache; |
||||
|
|
||||
|
@ApiOperation("获取在线用户列表") |
||||
|
@PreAuthorize("@ss.hasPermi('monitor:online:list')") |
||||
|
@GetMapping("/list") |
||||
|
public TableDataInfo list(String ipaddr, String userName) |
||||
|
{ |
||||
|
Collection<String> keys = redisCache.keys(CacheConstants.LOGIN_TOKEN_KEY + "*"); |
||||
|
List<SysUserOnline> userOnlineList = new ArrayList<SysUserOnline>(); |
||||
|
for (String key : keys) |
||||
|
{ |
||||
|
LoginUser user = redisCache.getCacheObject(key); |
||||
|
if (StringUtils.isNotEmpty(ipaddr) && StringUtils.isNotEmpty(userName)) |
||||
|
{ |
||||
|
if (StringUtils.equals(ipaddr, user.getIpaddr()) && StringUtils.equals(userName, user.getUsername())) |
||||
|
{ |
||||
|
userOnlineList.add(userOnlineService.selectOnlineByInfo(ipaddr, userName, user)); |
||||
|
} |
||||
|
} |
||||
|
else if (StringUtils.isNotEmpty(ipaddr)) |
||||
|
{ |
||||
|
if (StringUtils.equals(ipaddr, user.getIpaddr())) |
||||
|
{ |
||||
|
userOnlineList.add(userOnlineService.selectOnlineByIpaddr(ipaddr, user)); |
||||
|
} |
||||
|
} |
||||
|
else if (StringUtils.isNotEmpty(userName) && StringUtils.isNotNull(user.getUser())) |
||||
|
{ |
||||
|
if (StringUtils.equals(userName, user.getUsername())) |
||||
|
{ |
||||
|
userOnlineList.add(userOnlineService.selectOnlineByUserName(userName, user)); |
||||
|
} |
||||
|
} |
||||
|
else |
||||
|
{ |
||||
|
userOnlineList.add(userOnlineService.loginUserToUserOnline(user)); |
||||
|
} |
||||
|
} |
||||
|
Collections.reverse(userOnlineList); |
||||
|
userOnlineList.removeAll(Collections.singleton(null)); |
||||
|
return getDataTable(userOnlineList); |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 强退用户 |
||||
|
*/ |
||||
|
@ApiOperation("强制退出在线用户") |
||||
|
@PreAuthorize("@ss.hasPermi('monitor:online:forceLogout')") |
||||
|
@Log(title = "在线用户", businessType = BusinessType.FORCE) |
||||
|
@DeleteMapping("/{tokenId}") |
||||
|
public AjaxResult forceLogout(@PathVariable String tokenId) |
||||
|
{ |
||||
|
redisCache.deleteObject(CacheConstants.LOGIN_TOKEN_KEY + tokenId); |
||||
|
return success(); |
||||
|
} |
||||
|
} |
@ -0,0 +1,109 @@ |
|||||
|
package com.fastbee.web.controller.system; |
||||
|
|
||||
|
import java.util.List; |
||||
|
import javax.servlet.http.HttpServletResponse; |
||||
|
|
||||
|
import com.fastbee.common.core.domain.entity.SysUser; |
||||
|
import com.fastbee.framework.web.service.TokenService; |
||||
|
import io.swagger.annotations.Api; |
||||
|
import io.swagger.annotations.ApiOperation; |
||||
|
import org.springframework.security.access.prepost.PreAuthorize; |
||||
|
import org.springframework.beans.factory.annotation.Autowired; |
||||
|
import org.springframework.web.bind.annotation.GetMapping; |
||||
|
import org.springframework.web.bind.annotation.PostMapping; |
||||
|
import org.springframework.web.bind.annotation.PutMapping; |
||||
|
import org.springframework.web.bind.annotation.DeleteMapping; |
||||
|
import org.springframework.web.bind.annotation.PathVariable; |
||||
|
import org.springframework.web.bind.annotation.RequestBody; |
||||
|
import org.springframework.web.bind.annotation.RequestMapping; |
||||
|
import org.springframework.web.bind.annotation.RestController; |
||||
|
import com.fastbee.common.core.controller.BaseController; |
||||
|
import com.fastbee.common.core.domain.AjaxResult; |
||||
|
import com.fastbee.system.domain.SysClient; |
||||
|
import com.fastbee.system.service.ISysClientService; |
||||
|
import com.fastbee.common.utils.poi.ExcelUtil; |
||||
|
import com.fastbee.common.core.page.TableDataInfo; |
||||
|
|
||||
|
import static com.fastbee.common.utils.SecurityUtils.getLoginUser; |
||||
|
|
||||
|
/** |
||||
|
* 系统授权Controller |
||||
|
* |
||||
|
* @author zhuangpeng.li |
||||
|
* @date 2024-07-26 |
||||
|
*/ |
||||
|
@RestController |
||||
|
@RequestMapping("/system/sysclient") |
||||
|
@Api(tags = "系统授权") |
||||
|
public class SysClientController extends BaseController { |
||||
|
@Autowired |
||||
|
private ISysClientService sysClientService; |
||||
|
@Autowired |
||||
|
private TokenService tokenService; |
||||
|
|
||||
|
/** |
||||
|
* 查询系统授权列表 |
||||
|
*/ |
||||
|
@PreAuthorize("@ss.hasPermi('system:sysclient:list')") |
||||
|
@GetMapping("/list") |
||||
|
@ApiOperation("查询系统授权列表") |
||||
|
public TableDataInfo list(SysClient sysClient) { |
||||
|
startPage(); |
||||
|
List<SysClient> list = sysClientService.selectSysClientList(sysClient); |
||||
|
return getDataTable(list); |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 导出系统授权列表 |
||||
|
*/ |
||||
|
@ApiOperation("导出系统授权列表") |
||||
|
@PreAuthorize("@ss.hasPermi('system:sysclient:export')") |
||||
|
@PostMapping("/export") |
||||
|
public void export(HttpServletResponse response, SysClient sysClient) { |
||||
|
List<SysClient> list = sysClientService.selectSysClientList(sysClient); |
||||
|
ExcelUtil<SysClient> util = new ExcelUtil<SysClient>(SysClient.class); |
||||
|
util.exportExcel(response, list, "系统授权数据"); |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 获取系统授权详细信息 |
||||
|
*/ |
||||
|
@PreAuthorize("@ss.hasPermi('system:sysclient:query')") |
||||
|
@GetMapping(value = "/{id}") |
||||
|
@ApiOperation("获取系统授权详细信息") |
||||
|
public AjaxResult getInfo(@PathVariable("id") Long id) { |
||||
|
return success(sysClientService.selectSysClientById(id)); |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 新增系统授权 |
||||
|
*/ |
||||
|
@PreAuthorize("@ss.hasPermi('system:sysclient:add')") |
||||
|
@PostMapping |
||||
|
@ApiOperation("新增系统授权") |
||||
|
public AjaxResult add(@RequestBody SysClient sysClient) { |
||||
|
SysUser user = getLoginUser().getUser(); |
||||
|
return toAjax(tokenService.addToken(user, sysClient)); |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 修改系统授权 |
||||
|
*/ |
||||
|
@PreAuthorize("@ss.hasPermi('system:sysclient:edit')") |
||||
|
@PutMapping |
||||
|
@ApiOperation("修改系统授权") |
||||
|
public AjaxResult edit(@RequestBody SysClient sysClient) { |
||||
|
SysUser user = getLoginUser().getUser(); |
||||
|
return toAjax(tokenService.updateToken(user, sysClient)); |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 删除系统授权 |
||||
|
*/ |
||||
|
@PreAuthorize("@ss.hasPermi('system:sysclient:remove')") |
||||
|
@DeleteMapping("/{ids}") |
||||
|
@ApiOperation("删除系统授权") |
||||
|
public AjaxResult remove(@PathVariable Long[] ids) { |
||||
|
return toAjax(sysClientService.deleteSysClientByIds(ids)); |
||||
|
} |
||||
|
} |
@ -0,0 +1,146 @@ |
|||||
|
package com.fastbee.web.controller.system; |
||||
|
|
||||
|
import java.util.List; |
||||
|
import javax.servlet.http.HttpServletResponse; |
||||
|
|
||||
|
import io.swagger.annotations.Api; |
||||
|
import io.swagger.annotations.ApiOperation; |
||||
|
import org.springframework.beans.factory.annotation.Autowired; |
||||
|
import org.springframework.security.access.prepost.PreAuthorize; |
||||
|
import org.springframework.validation.annotation.Validated; |
||||
|
import org.springframework.web.bind.annotation.DeleteMapping; |
||||
|
import org.springframework.web.bind.annotation.GetMapping; |
||||
|
import org.springframework.web.bind.annotation.PathVariable; |
||||
|
import org.springframework.web.bind.annotation.PostMapping; |
||||
|
import org.springframework.web.bind.annotation.PutMapping; |
||||
|
import org.springframework.web.bind.annotation.RequestBody; |
||||
|
import org.springframework.web.bind.annotation.RequestMapping; |
||||
|
import org.springframework.web.bind.annotation.RestController; |
||||
|
import com.fastbee.common.annotation.Log; |
||||
|
import com.fastbee.common.constant.UserConstants; |
||||
|
import com.fastbee.common.core.controller.BaseController; |
||||
|
import com.fastbee.common.core.domain.AjaxResult; |
||||
|
import com.fastbee.common.core.page.TableDataInfo; |
||||
|
import com.fastbee.common.enums.BusinessType; |
||||
|
import com.fastbee.common.utils.poi.ExcelUtil; |
||||
|
import com.fastbee.system.domain.SysConfig; |
||||
|
import com.fastbee.system.service.ISysConfigService; |
||||
|
|
||||
|
/** |
||||
|
* 参数配置 信息操作处理 |
||||
|
* |
||||
|
* @author ruoyi |
||||
|
*/ |
||||
|
@Api(tags = "参数设置") |
||||
|
@RestController |
||||
|
@RequestMapping("/system/config") |
||||
|
public class SysConfigController extends BaseController |
||||
|
{ |
||||
|
@Autowired |
||||
|
private ISysConfigService configService; |
||||
|
|
||||
|
/** |
||||
|
* 获取参数配置列表 |
||||
|
*/ |
||||
|
@ApiOperation("获取参数配置列表") |
||||
|
@PreAuthorize("@ss.hasPermi('system:config:list')") |
||||
|
@GetMapping("/list") |
||||
|
public TableDataInfo list(SysConfig config) |
||||
|
{ |
||||
|
startPage(); |
||||
|
List<SysConfig> list = configService.selectConfigList(config); |
||||
|
return getDataTable(list); |
||||
|
} |
||||
|
|
||||
|
@ApiOperation("导出参数配置列表") |
||||
|
@Log(title = "参数管理", businessType = BusinessType.EXPORT) |
||||
|
@PreAuthorize("@ss.hasPermi('system:config:export')") |
||||
|
@PostMapping("/export") |
||||
|
public void export(HttpServletResponse response, SysConfig config) |
||||
|
{ |
||||
|
List<SysConfig> list = configService.selectConfigList(config); |
||||
|
ExcelUtil<SysConfig> util = new ExcelUtil<SysConfig>(SysConfig.class); |
||||
|
util.exportExcel(response, list, "参数数据"); |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 根据参数编号获取详细信息 |
||||
|
*/ |
||||
|
@ApiOperation("根据参数编号获取详细信息") |
||||
|
@PreAuthorize("@ss.hasPermi('system:config:query')") |
||||
|
@GetMapping(value = "/{configId}") |
||||
|
public AjaxResult getInfo(@PathVariable Long configId) |
||||
|
{ |
||||
|
return success(configService.selectConfigById(configId)); |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 根据参数键名查询参数值 |
||||
|
*/ |
||||
|
@ApiOperation("根据参数键名查询参数值") |
||||
|
@GetMapping(value = "/configKey/{configKey}") |
||||
|
public AjaxResult getConfigKey(@PathVariable String configKey) |
||||
|
{ |
||||
|
return success(configService.selectConfigByKey(configKey)); |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 新增参数配置 |
||||
|
*/ |
||||
|
@ApiOperation("新增参数配置") |
||||
|
@PreAuthorize("@ss.hasPermi('system:config:add')") |
||||
|
@Log(title = "参数管理", businessType = BusinessType.INSERT) |
||||
|
@PostMapping |
||||
|
public AjaxResult add(@Validated @RequestBody SysConfig config) |
||||
|
{ |
||||
|
if (UserConstants.NOT_UNIQUE.equals(configService.checkConfigKeyUnique(config))) |
||||
|
{ |
||||
|
return error("新增参数'" + config.getConfigName() + "'失败,参数键名已存在"); |
||||
|
} |
||||
|
config.setCreateBy(getUsername()); |
||||
|
return toAjax(configService.insertConfig(config)); |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 修改参数配置 |
||||
|
*/ |
||||
|
@ApiOperation("修改参数配置") |
||||
|
@PreAuthorize("@ss.hasPermi('system:config:edit')") |
||||
|
@Log(title = "参数管理", businessType = BusinessType.UPDATE) |
||||
|
@PutMapping |
||||
|
public AjaxResult edit(@Validated @RequestBody SysConfig config) |
||||
|
{ |
||||
|
if (UserConstants.NOT_UNIQUE.equals(configService.checkConfigKeyUnique(config))) |
||||
|
{ |
||||
|
return error("修改参数'" + config.getConfigName() + "'失败,参数键名已存在"); |
||||
|
} |
||||
|
config.setUpdateBy(getUsername()); |
||||
|
return toAjax(configService.updateConfig(config)); |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 删除参数配置 |
||||
|
*/ |
||||
|
@ApiOperation("批量删除参数配置") |
||||
|
@PreAuthorize("@ss.hasPermi('system:config:remove')") |
||||
|
@Log(title = "参数管理", businessType = BusinessType.DELETE) |
||||
|
@DeleteMapping("/{configIds}") |
||||
|
public AjaxResult remove(@PathVariable Long[] configIds) |
||||
|
{ |
||||
|
configService.deleteConfigByIds(configIds); |
||||
|
return success(); |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 刷新参数缓存 |
||||
|
*/ |
||||
|
@ApiOperation("刷新参数缓存") |
||||
|
@PreAuthorize("@ss.hasPermi('system:config:refresh')") |
||||
|
@Log(title = "参数管理", businessType = BusinessType.CLEAN) |
||||
|
@DeleteMapping("/refreshCache") |
||||
|
public AjaxResult refreshCache() |
||||
|
{ |
||||
|
configService.resetConfigCache(); |
||||
|
return success(); |
||||
|
} |
||||
|
} |
@ -0,0 +1,292 @@ |
|||||
|
package com.fastbee.web.controller.system; |
||||
|
|
||||
|
import cn.hutool.core.util.ObjectUtil; |
||||
|
import com.fastbee.common.annotation.Log; |
||||
|
import com.fastbee.common.constant.UserConstants; |
||||
|
import com.fastbee.common.core.controller.BaseController; |
||||
|
import com.fastbee.common.core.domain.AjaxResult; |
||||
|
import com.fastbee.common.core.domain.entity.*; |
||||
|
import com.fastbee.common.enums.BusinessType; |
||||
|
import com.fastbee.common.exception.ServiceException; |
||||
|
import com.fastbee.common.utils.StringUtils; |
||||
|
import com.fastbee.iot.mapper.DeviceMapper; |
||||
|
import com.fastbee.iot.model.RegisterUserInput; |
||||
|
import com.fastbee.iot.model.RegisterUserOutput; |
||||
|
import com.fastbee.iot.service.IToolService; |
||||
|
import com.fastbee.system.domain.SysRoleDept; |
||||
|
import com.fastbee.system.domain.SysRoleMenu; |
||||
|
import com.fastbee.system.domain.SysUserRole; |
||||
|
import com.fastbee.system.domain.vo.SysDeptTypeVO; |
||||
|
import com.fastbee.system.mapper.SysRoleDeptMapper; |
||||
|
import com.fastbee.system.mapper.SysRoleMenuMapper; |
||||
|
import com.fastbee.system.mapper.SysUserRoleMapper; |
||||
|
import com.fastbee.common.utils.MessageUtils; |
||||
|
|
||||
|
import com.fastbee.system.service.*; |
||||
|
import io.swagger.annotations.Api; |
||||
|
import io.swagger.annotations.ApiOperation; |
||||
|
import org.apache.commons.collections4.CollectionUtils; |
||||
|
import org.apache.commons.lang3.ArrayUtils; |
||||
|
import org.springframework.beans.factory.annotation.Autowired; |
||||
|
import org.springframework.security.access.prepost.PreAuthorize; |
||||
|
import org.springframework.transaction.annotation.Transactional; |
||||
|
import org.springframework.validation.annotation.Validated; |
||||
|
import org.springframework.web.bind.annotation.*; |
||||
|
|
||||
|
import javax.annotation.Resource; |
||||
|
import java.util.ArrayList; |
||||
|
import java.util.Arrays; |
||||
|
import java.util.List; |
||||
|
import java.util.stream.Collectors; |
||||
|
|
||||
|
import javax.servlet.http.HttpServletRequest; |
||||
|
|
||||
|
import static com.fastbee.common.constant.Constants.LANGUAGE; |
||||
|
|
||||
|
/** |
||||
|
* 机构信息 |
||||
|
* |
||||
|
* @author ruoyi |
||||
|
*/ |
||||
|
@Api(tags = "机构管理") |
||||
|
@RestController |
||||
|
@RequestMapping("/system/dept") |
||||
|
public class SysDeptController extends BaseController |
||||
|
{ |
||||
|
@Autowired |
||||
|
private ISysDeptService deptService; |
||||
|
|
||||
|
@Resource |
||||
|
private IToolService toolService; |
||||
|
|
||||
|
@Resource |
||||
|
private ISysUserService sysUserService; |
||||
|
|
||||
|
@Resource |
||||
|
private SysRoleDeptMapper sysRoleDeptMapper; |
||||
|
|
||||
|
@Resource |
||||
|
private ISysDictDataService sysDictDataService; |
||||
|
|
||||
|
@Resource |
||||
|
private ISysRoleService sysRoleService; |
||||
|
|
||||
|
@Resource |
||||
|
private ISysMenuService sysMenuService; |
||||
|
|
||||
|
@Resource |
||||
|
private DeviceMapper deviceMapper; |
||||
|
|
||||
|
/** |
||||
|
* 获取机构列表 |
||||
|
*/ |
||||
|
@ApiOperation("获取机构列表") |
||||
|
@PreAuthorize("@ss.hasPermi('system:dept:list')") |
||||
|
@GetMapping("/list") |
||||
|
public AjaxResult list(SysDept dept) |
||||
|
{ |
||||
|
List<SysDept> depts = deptService.selectDeptList(dept); |
||||
|
return success(depts); |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 查询机构列表(排除节点) |
||||
|
*/ |
||||
|
@ApiOperation("查询机构列表(排除节点)") |
||||
|
@PreAuthorize("@ss.hasPermi('system:dept:list')") |
||||
|
@GetMapping("/list/exclude/{deptId}") |
||||
|
public AjaxResult excludeChild(@PathVariable(value = "deptId", required = false) Long deptId) |
||||
|
{ |
||||
|
List<SysDept> depts = deptService.selectDeptList(new SysDept()); |
||||
|
depts.removeIf(d -> d.getDeptId().intValue() == deptId || ArrayUtils.contains(StringUtils.split(d.getAncestors(), ","), deptId + "")); |
||||
|
return success(depts); |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 根据机构编号获取详细信息 |
||||
|
*/ |
||||
|
@ApiOperation("根据机构编号获取详细信息") |
||||
|
@PreAuthorize("@ss.hasPermi('system:dept:query')") |
||||
|
@Transactional(rollbackFor = Exception.class) |
||||
|
@GetMapping(value = "/{deptId}") |
||||
|
public AjaxResult getInfo(@PathVariable Long deptId) |
||||
|
{ |
||||
|
deptService.checkDeptDataScope(deptId); |
||||
|
SysDept sysDept = deptService.selectDeptById(deptId); |
||||
|
if (null != sysDept && null != sysDept.getDeptUserId()) { |
||||
|
SysUser sysUser = sysUserService.selectUserById(sysDept.getDeptUserId()); |
||||
|
sysDept.setUserName(sysUser.getUserName()); |
||||
|
sysDept.setPhone(sysUser.getPhonenumber()); |
||||
|
} |
||||
|
return success(sysDept); |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 新增机构 |
||||
|
*/ |
||||
|
@ApiOperation("新增机构") |
||||
|
@PreAuthorize("@ss.hasPermi('system:dept:add')") |
||||
|
@Log(title = "机构管理", businessType = BusinessType.INSERT) |
||||
|
@PostMapping |
||||
|
public AjaxResult add(HttpServletRequest request, @Validated @RequestBody SysDept dept) |
||||
|
{ |
||||
|
if (UserConstants.NOT_UNIQUE.equals(deptService.checkDeptNameUnique(dept))) |
||||
|
{ |
||||
|
return error(StringUtils.format(MessageUtils.message("dept.add.failed.name.exists"), dept.getDeptName())); |
||||
|
} |
||||
|
dept.setCreateBy(getUsername()); |
||||
|
// 校验系统账号信息
|
||||
|
if (StringUtils.isNotEmpty(dept.getUserName())) { |
||||
|
SysUser sysUser = sysUserService.selectUserByUserName(dept.getUserName()); |
||||
|
if (ObjectUtil.isNotNull(sysUser)) { |
||||
|
throw new ServiceException(MessageUtils.message("user.username.exists")); |
||||
|
} |
||||
|
if (!dept.getPassword().equals(dept.getConfirmPassword())) { |
||||
|
throw new ServiceException(MessageUtils.message("user.password.differ")); |
||||
|
} |
||||
|
} |
||||
|
int result = deptService.insertDept(dept); |
||||
|
// 新增机构关联系统账号
|
||||
|
if (result > 0) { |
||||
|
// 添加管理员角色,给所有权限
|
||||
|
// 查询所有权限
|
||||
|
// List<SysMenu> sysMenuList = sysMenuService.selectMenuList(new SysMenu(), 1L, request.getHeader(LANGUAGE));
|
||||
|
SysDept sysDept = deptService.selectDeptById(dept.getParentId()); |
||||
|
List<SysMenu> sysMenuList = sysMenuService.selectMenuList(new SysMenu(), sysDept.getDeptUserId()); |
||||
|
Long[] menuIdList = sysMenuList.stream().map(SysMenu::getMenuId).toArray(Long[]::new); |
||||
|
SysRole sysRole = new SysRole(); |
||||
|
sysRole.setRoleName("管理员"); |
||||
|
sysRole.setRoleKey("manager"); |
||||
|
sysRole.setRoleSort(1); |
||||
|
sysRole.setStatus("0"); |
||||
|
sysRole.setDeptId(dept.getDeptId()); |
||||
|
sysRole.setMenuIds(menuIdList); |
||||
|
sysRoleService.insertRole(sysRole); |
||||
|
|
||||
|
// 注册机构管理员用户
|
||||
|
RegisterUserInput registerUserInput = new RegisterUserInput(); |
||||
|
registerUserInput.setUsername(dept.getUserName()); |
||||
|
registerUserInput.setPassword(dept.getPassword()); |
||||
|
registerUserInput.setPhonenumber(dept.getPhone()); |
||||
|
registerUserInput.setDeptId(dept.getDeptId()); |
||||
|
registerUserInput.setRoleIds(new Long[]{sysRole.getRoleId()}); |
||||
|
RegisterUserOutput registerUserOutput = toolService.registerNoCaptcha(registerUserInput); |
||||
|
if (StringUtils.isNotEmpty(registerUserOutput.getMsg())) { |
||||
|
deptService.deleteDeptById(dept.getDeptId()); |
||||
|
sysRoleService.deleteRoleById(sysRole.getRoleId()); |
||||
|
return AjaxResult.error(registerUserOutput.getMsg()); |
||||
|
} |
||||
|
// 更新机构管理员角色绑定信息
|
||||
|
deptService.updateDeptUserId(dept.getDeptId(), registerUserOutput.getSysUserId()); |
||||
|
} |
||||
|
return toAjax(result); |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 修改机构 |
||||
|
*/ |
||||
|
@ApiOperation("修改机构") |
||||
|
@PreAuthorize("@ss.hasPermi('system:dept:edit')") |
||||
|
@Log(title = "机构管理", businessType = BusinessType.UPDATE) |
||||
|
@PutMapping |
||||
|
public AjaxResult edit(@Validated @RequestBody SysDept dept) |
||||
|
{ |
||||
|
Long deptId = dept.getDeptId(); |
||||
|
deptService.checkDeptDataScope(deptId); |
||||
|
if (UserConstants.NOT_UNIQUE.equals(deptService.checkDeptNameUnique(dept))) |
||||
|
{ |
||||
|
return error(StringUtils.format(MessageUtils.message("dept.update.failed.name.exists"), dept.getDeptName())); |
||||
|
} |
||||
|
else if (dept.getParentId().equals(deptId)) |
||||
|
{ |
||||
|
return error(StringUtils.format(MessageUtils.message("dept.update.failed.parent.not.valid"), dept.getDeptName())); |
||||
|
} |
||||
|
else if (StringUtils.equals(UserConstants.DEPT_DISABLE, dept.getStatus()) && deptService.selectNormalChildrenDeptById(deptId) > 0) |
||||
|
{ |
||||
|
return error(MessageUtils.message("dept.update.failed.child.not.valid")); |
||||
|
} |
||||
|
dept.setUpdateBy(getUsername()); |
||||
|
return toAjax(deptService.updateDept(dept)); |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 删除机构 |
||||
|
*/ |
||||
|
@ApiOperation("根据机构编号删除机构") |
||||
|
@PreAuthorize("@ss.hasPermi('system:dept:remove')") |
||||
|
@Log(title = "机构管理", businessType = BusinessType.DELETE) |
||||
|
@DeleteMapping("/{deptId}") |
||||
|
public AjaxResult remove(@PathVariable Long deptId) |
||||
|
{ |
||||
|
if (deptService.hasChildByDeptId(deptId)) |
||||
|
{ |
||||
|
return warn(MessageUtils.message("dept.delete.failed.child.exists")); |
||||
|
} |
||||
|
// if (deptService.checkDeptExistUser(deptId))
|
||||
|
// {
|
||||
|
// return warn(MessageUtils.message("dept.delete.failed.user.exists"));
|
||||
|
// }
|
||||
|
deptService.checkDeptDataScope(deptId); |
||||
|
// 删除机构绑定角色和用户
|
||||
|
List<Long> roleIdList = sysRoleDeptMapper.selectByDeptId(deptId); |
||||
|
if (!org.springframework.util.CollectionUtils.isEmpty(roleIdList)) { |
||||
|
sysRoleService.deleteRoleByIds(roleIdList.toArray(new Long[roleIdList.size()])); |
||||
|
sysUserService.deleteUserByDeptID(deptId); |
||||
|
} |
||||
|
return toAjax(deptService.deleteDeptById(deptId)); |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 获取机构类型 |
||||
|
* @param deptType 父级类型 |
||||
|
* @return com.fastbee.common.core.domain.AjaxResult |
||||
|
*/ |
||||
|
@GetMapping("/getDeptType") |
||||
|
public AjaxResult getDeptType(HttpServletRequest request, Integer deptType, Boolean showOwner) { |
||||
|
SysDictData sysDictData = new SysDictData(); |
||||
|
sysDictData.setDictType("department_type"); |
||||
|
List<SysDictData> sysDictDataList = sysDictDataService.selectDictDataList(sysDictData); |
||||
|
if (CollectionUtils.isEmpty(sysDictDataList)) { |
||||
|
return success(); |
||||
|
} |
||||
|
List<SysDeptTypeVO> result = new ArrayList<>(); |
||||
|
for (SysDictData dictData : sysDictDataList) { |
||||
|
SysDeptTypeVO sysDeptTypeVO = new SysDeptTypeVO(); |
||||
|
sysDeptTypeVO.setDeptType(Integer.valueOf(dictData.getDictValue())); |
||||
|
sysDeptTypeVO.setDeptTypeName(dictData.getDictLabel()); |
||||
|
sysDeptTypeVO.setAncestors(dictData.getRemark()); |
||||
|
result.add(sysDeptTypeVO); |
||||
|
} |
||||
|
if (null == deptType) { |
||||
|
return success(result); |
||||
|
} |
||||
|
SysDeptTypeVO sysDeptTypeVO = result.stream().filter(d -> deptType.equals(d.getDeptType())).findFirst().orElse(null); |
||||
|
if (ObjectUtil.isNull(sysDeptTypeVO)) { |
||||
|
return success(new ArrayList<>()); |
||||
|
} |
||||
|
String ancestors = sysDeptTypeVO.getAncestors(); |
||||
|
result = result.stream().filter(d -> ancestors.contains(d.getDeptType().toString())).collect(Collectors.toList()); |
||||
|
if (showOwner) { |
||||
|
List<SysDeptTypeVO> newResult = new ArrayList<>(); |
||||
|
newResult.add(sysDeptTypeVO); |
||||
|
newResult.addAll(result); |
||||
|
return success(newResult); |
||||
|
} |
||||
|
return success(result); |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 获取机构角色 |
||||
|
* @param deptId 机构id |
||||
|
* @return com.fastbee.common.core.domain.AjaxResult |
||||
|
*/ |
||||
|
@GetMapping("/getRole") |
||||
|
public AjaxResult getRole(Long deptId) { |
||||
|
AjaxResult success = AjaxResult.success(); |
||||
|
List<SysRole> sysRoleList = deptService.getRole(deptId); |
||||
|
success.put("roles", sysRoleList); |
||||
|
success.put("roleIds", sysRoleList.stream().map(SysRole::getRoleId).collect(Collectors.toList())); |
||||
|
return success; |
||||
|
} |
||||
|
|
||||
|
} |
@ -0,0 +1,122 @@ |
|||||
|
package com.fastbee.web.controller.system; |
||||
|
|
||||
|
import java.util.ArrayList; |
||||
|
import java.util.List; |
||||
|
import javax.servlet.http.HttpServletResponse; |
||||
|
import org.springframework.beans.factory.annotation.Autowired; |
||||
|
import org.springframework.security.access.prepost.PreAuthorize; |
||||
|
import org.springframework.validation.annotation.Validated; |
||||
|
import org.springframework.web.bind.annotation.DeleteMapping; |
||||
|
import org.springframework.web.bind.annotation.GetMapping; |
||||
|
import org.springframework.web.bind.annotation.PathVariable; |
||||
|
import org.springframework.web.bind.annotation.PostMapping; |
||||
|
import org.springframework.web.bind.annotation.PutMapping; |
||||
|
import org.springframework.web.bind.annotation.RequestBody; |
||||
|
import org.springframework.web.bind.annotation.RequestMapping; |
||||
|
import org.springframework.web.bind.annotation.RestController; |
||||
|
import com.fastbee.common.annotation.Log; |
||||
|
import com.fastbee.common.core.controller.BaseController; |
||||
|
import com.fastbee.common.core.domain.AjaxResult; |
||||
|
import com.fastbee.common.core.domain.entity.SysDictData; |
||||
|
import com.fastbee.common.core.page.TableDataInfo; |
||||
|
import com.fastbee.common.enums.BusinessType; |
||||
|
import com.fastbee.common.utils.StringUtils; |
||||
|
import com.fastbee.common.utils.poi.ExcelUtil; |
||||
|
import com.fastbee.system.service.ISysDictDataService; |
||||
|
import com.fastbee.system.service.ISysDictTypeService; |
||||
|
|
||||
|
/** |
||||
|
* 数据字典信息 |
||||
|
* |
||||
|
* @author ruoyi |
||||
|
*/ |
||||
|
|
||||
|
@RestController |
||||
|
@RequestMapping("/system/dict/data") |
||||
|
public class SysDictDataController extends BaseController |
||||
|
{ |
||||
|
@Autowired |
||||
|
private ISysDictDataService dictDataService; |
||||
|
|
||||
|
@Autowired |
||||
|
private ISysDictTypeService dictTypeService; |
||||
|
|
||||
|
@PreAuthorize("@ss.hasPermi('system:dict:list')") |
||||
|
@GetMapping("/list") |
||||
|
public TableDataInfo list(SysDictData dictData) |
||||
|
{ |
||||
|
startPage(); |
||||
|
List<SysDictData> list = dictDataService.selectDictDataList(dictData); |
||||
|
return getDataTable(list); |
||||
|
} |
||||
|
|
||||
|
@Log(title = "字典数据", businessType = BusinessType.EXPORT) |
||||
|
@PreAuthorize("@ss.hasPermi('system:dict:export')") |
||||
|
@PostMapping("/export") |
||||
|
public void export(HttpServletResponse response, SysDictData dictData) |
||||
|
{ |
||||
|
List<SysDictData> list = dictDataService.selectDictDataList(dictData); |
||||
|
ExcelUtil<SysDictData> util = new ExcelUtil<>(SysDictData.class); |
||||
|
util.exportExcel(response, list, "字典数据"); |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 查询字典数据详细 |
||||
|
*/ |
||||
|
@PreAuthorize("@ss.hasPermi('system:dict:query')") |
||||
|
@GetMapping(value = "/{dictCode}") |
||||
|
public AjaxResult getInfo(@PathVariable Long dictCode) |
||||
|
{ |
||||
|
return success(dictDataService.selectDictDataById(dictCode)); |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 根据字典类型查询字典数据信息 |
||||
|
*/ |
||||
|
@GetMapping(value = "/type/{dictType}") |
||||
|
public AjaxResult dictType(@PathVariable String dictType) |
||||
|
{ |
||||
|
List<SysDictData> data = dictTypeService.selectDictDataByType(dictType); |
||||
|
if (StringUtils.isNull(data)) |
||||
|
{ |
||||
|
data = new ArrayList<>(); |
||||
|
} |
||||
|
return success(data); |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 新增字典类型 |
||||
|
*/ |
||||
|
@PreAuthorize("@ss.hasPermi('system:dict:add')") |
||||
|
@Log(title = "字典数据", businessType = BusinessType.INSERT) |
||||
|
@PostMapping |
||||
|
public AjaxResult add(@Validated @RequestBody SysDictData dict) |
||||
|
{ |
||||
|
dict.setCreateBy(getUsername()); |
||||
|
return toAjax(dictDataService.insertDictData(dict)); |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 修改保存字典类型 |
||||
|
*/ |
||||
|
@PreAuthorize("@ss.hasPermi('system:dict:edit')") |
||||
|
@Log(title = "字典数据", businessType = BusinessType.UPDATE) |
||||
|
@PutMapping |
||||
|
public AjaxResult edit(@Validated @RequestBody SysDictData dict) |
||||
|
{ |
||||
|
dict.setUpdateBy(getUsername()); |
||||
|
return toAjax(dictDataService.updateDictData(dict)); |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 删除字典类型 |
||||
|
*/ |
||||
|
@PreAuthorize("@ss.hasPermi('system:dict:remove')") |
||||
|
@Log(title = "字典类型", businessType = BusinessType.DELETE) |
||||
|
@DeleteMapping("/{dictCodes}") |
||||
|
public AjaxResult remove(@PathVariable Long[] dictCodes) |
||||
|
{ |
||||
|
dictDataService.deleteDictDataByIds(dictCodes); |
||||
|
return success(); |
||||
|
} |
||||
|
} |
@ -0,0 +1,146 @@ |
|||||
|
package com.fastbee.web.controller.system; |
||||
|
|
||||
|
import java.util.List; |
||||
|
import javax.servlet.http.HttpServletResponse; |
||||
|
|
||||
|
import com.fastbee.common.utils.MessageUtils; |
||||
|
import com.fastbee.common.utils.StringUtils; |
||||
|
import io.swagger.annotations.Api; |
||||
|
import io.swagger.annotations.ApiOperation; |
||||
|
import org.springframework.beans.factory.annotation.Autowired; |
||||
|
import org.springframework.security.access.prepost.PreAuthorize; |
||||
|
import org.springframework.validation.annotation.Validated; |
||||
|
import org.springframework.web.bind.annotation.DeleteMapping; |
||||
|
import org.springframework.web.bind.annotation.GetMapping; |
||||
|
import org.springframework.web.bind.annotation.PathVariable; |
||||
|
import org.springframework.web.bind.annotation.PostMapping; |
||||
|
import org.springframework.web.bind.annotation.PutMapping; |
||||
|
import org.springframework.web.bind.annotation.RequestBody; |
||||
|
import org.springframework.web.bind.annotation.RequestMapping; |
||||
|
import org.springframework.web.bind.annotation.RestController; |
||||
|
import com.fastbee.common.annotation.Log; |
||||
|
import com.fastbee.common.constant.UserConstants; |
||||
|
import com.fastbee.common.core.controller.BaseController; |
||||
|
import com.fastbee.common.core.domain.AjaxResult; |
||||
|
import com.fastbee.common.core.domain.entity.SysDictType; |
||||
|
import com.fastbee.common.core.page.TableDataInfo; |
||||
|
import com.fastbee.common.enums.BusinessType; |
||||
|
import com.fastbee.common.utils.poi.ExcelUtil; |
||||
|
import com.fastbee.system.service.ISysDictTypeService; |
||||
|
|
||||
|
/** |
||||
|
* 数据字典信息 |
||||
|
* |
||||
|
* @author ruoyi |
||||
|
*/ |
||||
|
@Api(tags = "字典管理") |
||||
|
@RestController |
||||
|
@RequestMapping("/system/dict/type") |
||||
|
public class SysDictTypeController extends BaseController |
||||
|
{ |
||||
|
@Autowired |
||||
|
private ISysDictTypeService dictTypeService; |
||||
|
|
||||
|
@ApiOperation("获取字典分页列表") |
||||
|
@PreAuthorize("@ss.hasPermi('system:dict:list')") |
||||
|
@GetMapping("/list") |
||||
|
public TableDataInfo list(SysDictType dictType) |
||||
|
{ |
||||
|
startPage(); |
||||
|
List<SysDictType> list = dictTypeService.selectDictTypeList(dictType); |
||||
|
return getDataTable(list); |
||||
|
} |
||||
|
|
||||
|
@ApiOperation("导出字典列表") |
||||
|
@Log(title = "字典类型", businessType = BusinessType.EXPORT) |
||||
|
@PreAuthorize("@ss.hasPermi('system:dict:export')") |
||||
|
@PostMapping("/export") |
||||
|
public void export(HttpServletResponse response, SysDictType dictType) |
||||
|
{ |
||||
|
List<SysDictType> list = dictTypeService.selectDictTypeList(dictType); |
||||
|
ExcelUtil<SysDictType> util = new ExcelUtil<SysDictType>(SysDictType.class); |
||||
|
util.exportExcel(response, list, "字典类型"); |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 查询字典类型详细 |
||||
|
*/ |
||||
|
@ApiOperation("查询字典类型详细") |
||||
|
@PreAuthorize("@ss.hasPermi('system:dict:query')") |
||||
|
@GetMapping(value = "/{dictId}") |
||||
|
public AjaxResult getInfo(@PathVariable Long dictId) |
||||
|
{ |
||||
|
return success(dictTypeService.selectDictTypeById(dictId)); |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 新增字典类型 |
||||
|
*/ |
||||
|
@ApiOperation("新增字典类型") |
||||
|
@PreAuthorize("@ss.hasPermi('system:dict:add')") |
||||
|
@Log(title = "字典类型", businessType = BusinessType.INSERT) |
||||
|
@PostMapping |
||||
|
public AjaxResult add(@Validated @RequestBody SysDictType dict) |
||||
|
{ |
||||
|
if (UserConstants.NOT_UNIQUE.equals(dictTypeService.checkDictTypeUnique(dict))) |
||||
|
{ |
||||
|
return error(StringUtils.format(MessageUtils.message("dict.add.failed.type.exists"), dict.getDictName())); |
||||
|
} |
||||
|
dict.setCreateBy(getUsername()); |
||||
|
return toAjax(dictTypeService.insertDictType(dict)); |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 修改字典类型 |
||||
|
*/ |
||||
|
@ApiOperation("新增字典类型") |
||||
|
@PreAuthorize("@ss.hasPermi('system:dict:edit')") |
||||
|
@Log(title = "字典类型", businessType = BusinessType.UPDATE) |
||||
|
@PutMapping |
||||
|
public AjaxResult edit(@Validated @RequestBody SysDictType dict) |
||||
|
{ |
||||
|
if (UserConstants.NOT_UNIQUE.equals(dictTypeService.checkDictTypeUnique(dict))) |
||||
|
{ |
||||
|
return error(StringUtils.format(MessageUtils.message("dict.update.failed.type.exists"), dict.getDictName())); |
||||
|
} |
||||
|
dict.setUpdateBy(getUsername()); |
||||
|
return toAjax(dictTypeService.updateDictType(dict)); |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 删除字典类型 |
||||
|
*/ |
||||
|
@ApiOperation("删除字典类型") |
||||
|
@PreAuthorize("@ss.hasPermi('system:dict:remove')") |
||||
|
@Log(title = "字典类型", businessType = BusinessType.DELETE) |
||||
|
@DeleteMapping("/{dictIds}") |
||||
|
public AjaxResult remove(@PathVariable Long[] dictIds) |
||||
|
{ |
||||
|
dictTypeService.deleteDictTypeByIds(dictIds); |
||||
|
return success(); |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 刷新字典缓存 |
||||
|
*/ |
||||
|
@ApiOperation("刷新字典缓存") |
||||
|
@PreAuthorize("@ss.hasPermi('system:dict:refresh')") |
||||
|
@Log(title = "字典类型", businessType = BusinessType.CLEAN) |
||||
|
@DeleteMapping("/refreshCache") |
||||
|
public AjaxResult refreshCache() |
||||
|
{ |
||||
|
dictTypeService.resetDictCache(); |
||||
|
return success(); |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 获取字典选择框列表 |
||||
|
*/ |
||||
|
@ApiOperation("获取字典选择框列表") |
||||
|
@GetMapping("/optionselect") |
||||
|
public AjaxResult optionselect() |
||||
|
{ |
||||
|
List<SysDictType> dictTypes = dictTypeService.selectDictTypeAll(); |
||||
|
return success(dictTypes); |
||||
|
} |
||||
|
} |
@ -0,0 +1,30 @@ |
|||||
|
package com.fastbee.web.controller.system; |
||||
|
|
||||
|
import com.fastbee.common.utils.MessageUtils; |
||||
|
import org.springframework.beans.factory.annotation.Autowired; |
||||
|
import org.springframework.web.bind.annotation.RequestMapping; |
||||
|
import org.springframework.web.bind.annotation.RestController; |
||||
|
import com.fastbee.common.config.RuoYiConfig; |
||||
|
import com.fastbee.common.utils.StringUtils; |
||||
|
|
||||
|
/** |
||||
|
* 首页 |
||||
|
* |
||||
|
* @author ruoyi |
||||
|
*/ |
||||
|
@RestController |
||||
|
public class SysIndexController |
||||
|
{ |
||||
|
/** 系统基础配置 */ |
||||
|
@Autowired |
||||
|
private RuoYiConfig ruoyiConfig; |
||||
|
|
||||
|
/** |
||||
|
* 访问首页,提示语 |
||||
|
*/ |
||||
|
@RequestMapping("/") |
||||
|
public String index() |
||||
|
{ |
||||
|
return StringUtils.format(MessageUtils.message("index.welcome.message"), ruoyiConfig.getName(), ruoyiConfig.getVersion()); |
||||
|
} |
||||
|
} |
@ -0,0 +1,110 @@ |
|||||
|
package com.fastbee.web.controller.system; |
||||
|
|
||||
|
import java.util.List; |
||||
|
import java.util.Set; |
||||
|
|
||||
|
import com.fastbee.system.domain.AppPreferences; |
||||
|
import com.fastbee.system.service.IAppPreferencesService; |
||||
|
import io.swagger.annotations.Api; |
||||
|
import io.swagger.annotations.ApiOperation; |
||||
|
import org.springframework.beans.factory.annotation.Autowired; |
||||
|
import org.springframework.beans.factory.annotation.Value; |
||||
|
import org.springframework.web.bind.annotation.GetMapping; |
||||
|
import org.springframework.web.bind.annotation.PostMapping; |
||||
|
import org.springframework.web.bind.annotation.RequestBody; |
||||
|
import org.springframework.web.bind.annotation.RestController; |
||||
|
import com.fastbee.common.constant.Constants; |
||||
|
import com.fastbee.common.core.domain.AjaxResult; |
||||
|
import com.fastbee.common.core.domain.entity.SysMenu; |
||||
|
import com.fastbee.common.core.domain.entity.SysUser; |
||||
|
import com.fastbee.common.core.domain.model.LoginBody; |
||||
|
import com.fastbee.common.utils.SecurityUtils; |
||||
|
import com.fastbee.framework.web.service.SysLoginService; |
||||
|
import com.fastbee.framework.web.service.SysPermissionService; |
||||
|
import com.fastbee.system.service.ISysMenuService; |
||||
|
|
||||
|
import javax.annotation.Resource; |
||||
|
import javax.servlet.http.HttpServletRequest; |
||||
|
|
||||
|
import static com.fastbee.common.constant.Constants.LANGUAGE; |
||||
|
|
||||
|
/** |
||||
|
* 登录验证 |
||||
|
* |
||||
|
* @author ruoyi |
||||
|
*/ |
||||
|
@Api(tags = "登录验证") |
||||
|
@RestController |
||||
|
public class SysLoginController |
||||
|
{ |
||||
|
@Autowired |
||||
|
private SysLoginService loginService; |
||||
|
|
||||
|
@Autowired |
||||
|
private ISysMenuService menuService; |
||||
|
|
||||
|
@Autowired |
||||
|
private SysPermissionService permissionService; |
||||
|
@Value("${server.broker.enabled}") |
||||
|
private Boolean enabled; |
||||
|
@Resource |
||||
|
private IAppPreferencesService appPreferencesService; |
||||
|
|
||||
|
|
||||
|
/** |
||||
|
* 登录方法 |
||||
|
* |
||||
|
* @param loginBody 登录信息 |
||||
|
* @return 结果 |
||||
|
*/ |
||||
|
@ApiOperation("用户登录") |
||||
|
@PostMapping("/login") |
||||
|
public AjaxResult login(HttpServletRequest request, @RequestBody LoginBody loginBody) |
||||
|
{ |
||||
|
AjaxResult ajax = AjaxResult.success(); |
||||
|
// 生成令牌
|
||||
|
String token = loginService.login(loginBody.getUsername(), loginBody.getPassword(), loginBody.getCode(), |
||||
|
loginBody.getUuid(), loginBody.getSourceType(), request.getHeader(LANGUAGE)); |
||||
|
ajax.put(Constants.TOKEN, token); |
||||
|
return ajax; |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 获取用户信息 |
||||
|
* |
||||
|
* @return 用户信息 |
||||
|
*/ |
||||
|
@ApiOperation("获取用户信息") |
||||
|
@GetMapping("getInfo") |
||||
|
public AjaxResult getInfo() |
||||
|
{ |
||||
|
SysUser user = SecurityUtils.getLoginUser().getUser(); |
||||
|
// 角色集合
|
||||
|
Set<String> roles = permissionService.getRolePermission(user); |
||||
|
// 权限集合
|
||||
|
Set<String> permissions = permissionService.getMenuPermission(user); |
||||
|
AppPreferences appPreferences = appPreferencesService.selectAppPreferencesByUserId(user.getUserId()); |
||||
|
AjaxResult ajax = AjaxResult.success(); |
||||
|
ajax.put("user", user); |
||||
|
ajax.put("roles", roles); |
||||
|
ajax.put("permissions", permissions); |
||||
|
ajax.put("mqtt",enabled); |
||||
|
ajax.put("language", appPreferences.getLanguage()); |
||||
|
return ajax; |
||||
|
} |
||||
|
|
||||
|
|
||||
|
/** |
||||
|
* 获取路由信息 |
||||
|
* |
||||
|
* @return 路由信息 |
||||
|
*/ |
||||
|
@ApiOperation("获取路由信息") |
||||
|
@GetMapping("getRouters") |
||||
|
public AjaxResult getRouters(HttpServletRequest request) |
||||
|
{ |
||||
|
Long userId = SecurityUtils.getUserId(); |
||||
|
List<SysMenu> menus = menuService.selectMenuTreeByUserId(userId, request.getHeader(LANGUAGE)); |
||||
|
return AjaxResult.success(menuService.buildMenus(menus)); |
||||
|
} |
||||
|
} |
@ -0,0 +1,159 @@ |
|||||
|
package com.fastbee.web.controller.system; |
||||
|
|
||||
|
import java.util.List; |
||||
|
|
||||
|
import com.fastbee.common.utils.MessageUtils; |
||||
|
import io.swagger.annotations.Api; |
||||
|
import io.swagger.annotations.ApiOperation; |
||||
|
import org.springframework.beans.factory.annotation.Autowired; |
||||
|
import org.springframework.security.access.prepost.PreAuthorize; |
||||
|
import org.springframework.validation.annotation.Validated; |
||||
|
import org.springframework.web.bind.annotation.*; |
||||
|
import com.fastbee.common.annotation.Log; |
||||
|
import com.fastbee.common.constant.UserConstants; |
||||
|
import com.fastbee.common.core.controller.BaseController; |
||||
|
import com.fastbee.common.core.domain.AjaxResult; |
||||
|
import com.fastbee.common.core.domain.entity.SysMenu; |
||||
|
import com.fastbee.common.enums.BusinessType; |
||||
|
import com.fastbee.common.utils.StringUtils; |
||||
|
import com.fastbee.system.service.ISysMenuService; |
||||
|
|
||||
|
/** |
||||
|
* 菜单信息 |
||||
|
* |
||||
|
* @author ruoyi |
||||
|
*/ |
||||
|
@Api(tags = "菜单管理") |
||||
|
@RestController |
||||
|
@RequestMapping("/system/menu") |
||||
|
public class SysMenuController extends BaseController |
||||
|
{ |
||||
|
@Autowired |
||||
|
private ISysMenuService menuService; |
||||
|
|
||||
|
/** |
||||
|
* 获取菜单列表 |
||||
|
*/ |
||||
|
@ApiOperation("获取菜单列表") |
||||
|
@PreAuthorize("@ss.hasPermi('system:menu:list')") |
||||
|
@GetMapping("/list") |
||||
|
public AjaxResult list(SysMenu menu) |
||||
|
{ |
||||
|
List<SysMenu> menus = menuService.selectMenuList(menu, getUserId()); |
||||
|
return success(menus); |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 根据菜单编号获取详细信息 |
||||
|
*/ |
||||
|
@ApiOperation("根据菜单编号获取详细信息") |
||||
|
@PreAuthorize("@ss.hasPermi('system:menu:query')") |
||||
|
@GetMapping(value = "/{menuId}") |
||||
|
public AjaxResult getInfo(@PathVariable Long menuId) |
||||
|
{ |
||||
|
return success(menuService.selectMenuById(menuId)); |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 获取菜单下拉树列表 |
||||
|
*/ |
||||
|
@ApiOperation("获取菜单下拉树列表") |
||||
|
@GetMapping("/treeselect") |
||||
|
public AjaxResult treeselect(SysMenu menu) |
||||
|
{ |
||||
|
List<SysMenu> menus = menuService.selectMenuList(menu, getUserId()); |
||||
|
return success(menuService.buildMenuTreeSelect(menus)); |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 加载对应角色菜单列表树 |
||||
|
*/ |
||||
|
@ApiOperation("加载对应角色菜单列表树") |
||||
|
@GetMapping(value = "/roleMenuTreeselect") |
||||
|
public AjaxResult roleMenuTreeselect(@RequestParam Long roleId, @RequestParam Long deptId) |
||||
|
{ |
||||
|
List<SysMenu> menus = menuService.deptRoleMenuTreeselect(deptId, roleId); |
||||
|
// List<SysMenu> menus = menuService.selectMenuList(getUserId(), request.getHeader(LANGUAGE));
|
||||
|
AjaxResult ajax = AjaxResult.success(); |
||||
|
ajax.put("checkedKeys", menuService.selectMenuListByRoleId(roleId)); |
||||
|
ajax.put("menus", menuService.buildMenuTreeSelect(menus)); |
||||
|
return ajax; |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 新增菜单 |
||||
|
*/ |
||||
|
@ApiOperation("新增菜单") |
||||
|
@PreAuthorize("@ss.hasPermi('system:menu:add')") |
||||
|
@Log(title = "菜单管理", businessType = BusinessType.INSERT) |
||||
|
@PostMapping |
||||
|
public AjaxResult add(@Validated @RequestBody SysMenu menu) |
||||
|
{ |
||||
|
if (UserConstants.NOT_UNIQUE.equals(menuService.checkMenuNameUnique(menu))) |
||||
|
{ |
||||
|
return error(StringUtils.format(MessageUtils.message("menu.add.failed.name.exists"), menu.getMenuName())); |
||||
|
} |
||||
|
else if (UserConstants.YES_FRAME.equals(menu.getIsFrame()) && !StringUtils.ishttp(menu.getPath())) |
||||
|
{ |
||||
|
return error(StringUtils.format(MessageUtils.message("menu.add.failed.path.not.valid"), menu.getMenuName())); |
||||
|
} |
||||
|
menu.setCreateBy(getUsername()); |
||||
|
return toAjax(menuService.insertMenu(menu)); |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 修改菜单 |
||||
|
*/ |
||||
|
@ApiOperation("修改菜单") |
||||
|
@PreAuthorize("@ss.hasPermi('system:menu:edit')") |
||||
|
@Log(title = "菜单管理", businessType = BusinessType.UPDATE) |
||||
|
@PutMapping |
||||
|
public AjaxResult edit(@Validated @RequestBody SysMenu menu) |
||||
|
{ |
||||
|
if (UserConstants.NOT_UNIQUE.equals(menuService.checkMenuNameUnique(menu))) |
||||
|
{ |
||||
|
return error(StringUtils.format(MessageUtils.message("menu.update.failed.name.exists"), menu.getMenuName())); |
||||
|
} |
||||
|
else if (UserConstants.YES_FRAME.equals(menu.getIsFrame()) && !StringUtils.ishttp(menu.getPath())) |
||||
|
{ |
||||
|
return error(StringUtils.format(MessageUtils.message("menu.update.failed.path.not.valid"), menu.getMenuName())); |
||||
|
} |
||||
|
else if (menu.getMenuId().equals(menu.getParentId())) |
||||
|
{ |
||||
|
return error(StringUtils.format(MessageUtils.message("menu.update.failed.parent.not.valid"), menu.getMenuName())); |
||||
|
} |
||||
|
menu.setUpdateBy(getUsername()); |
||||
|
return toAjax(menuService.updateMenu(menu)); |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 删除菜单 |
||||
|
*/ |
||||
|
@ApiOperation("删除菜单") |
||||
|
@PreAuthorize("@ss.hasPermi('system:menu:remove')") |
||||
|
@Log(title = "菜单管理", businessType = BusinessType.DELETE) |
||||
|
@DeleteMapping("/{menuId}") |
||||
|
public AjaxResult remove(@PathVariable("menuId") Long menuId) |
||||
|
{ |
||||
|
if (menuService.hasChildByMenuId(menuId)) |
||||
|
{ |
||||
|
return warn(MessageUtils.message("menu.delete.failed.child.exists")); |
||||
|
} |
||||
|
if (menuService.checkMenuExistRole(menuId)) |
||||
|
{ |
||||
|
return warn(MessageUtils.message("menu.delete.failed.role.exists")); |
||||
|
} |
||||
|
return toAjax(menuService.deleteMenuById(menuId)); |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 加载对应部门菜单列表树 |
||||
|
*/ |
||||
|
@ApiOperation("加载对应部门菜单列表树") |
||||
|
@GetMapping(value = "/deptMenuTreeselect/{deptId}") |
||||
|
public AjaxResult deptMenuTreeselect(@PathVariable("deptId") Long deptId) |
||||
|
{ |
||||
|
List<SysMenu> menus = menuService.deptMenuTreeselect(deptId); |
||||
|
return success(menuService.buildMenuTreeSelect(menus)); |
||||
|
} |
||||
|
} |
@ -0,0 +1,100 @@ |
|||||
|
package com.fastbee.web.controller.system; |
||||
|
|
||||
|
import java.util.List; |
||||
|
|
||||
|
import io.swagger.annotations.Api; |
||||
|
import io.swagger.annotations.ApiOperation; |
||||
|
import org.springframework.beans.factory.annotation.Autowired; |
||||
|
import org.springframework.security.access.prepost.PreAuthorize; |
||||
|
import org.springframework.validation.annotation.Validated; |
||||
|
import org.springframework.web.bind.annotation.DeleteMapping; |
||||
|
import org.springframework.web.bind.annotation.GetMapping; |
||||
|
import org.springframework.web.bind.annotation.PathVariable; |
||||
|
import org.springframework.web.bind.annotation.PostMapping; |
||||
|
import org.springframework.web.bind.annotation.PutMapping; |
||||
|
import org.springframework.web.bind.annotation.RequestBody; |
||||
|
import org.springframework.web.bind.annotation.RequestMapping; |
||||
|
import org.springframework.web.bind.annotation.RestController; |
||||
|
import com.fastbee.common.annotation.Log; |
||||
|
import com.fastbee.common.core.controller.BaseController; |
||||
|
import com.fastbee.common.core.domain.AjaxResult; |
||||
|
import com.fastbee.common.core.page.TableDataInfo; |
||||
|
import com.fastbee.common.enums.BusinessType; |
||||
|
import com.fastbee.system.domain.SysNotice; |
||||
|
import com.fastbee.system.service.ISysNoticeService; |
||||
|
|
||||
|
/** |
||||
|
* 公告 信息操作处理 |
||||
|
* |
||||
|
* @author ruoyi |
||||
|
*/ |
||||
|
@Api(tags = "通知公告") |
||||
|
@RestController |
||||
|
@RequestMapping("/system/notice") |
||||
|
public class SysNoticeController extends BaseController |
||||
|
{ |
||||
|
@Autowired |
||||
|
private ISysNoticeService noticeService; |
||||
|
|
||||
|
/** |
||||
|
* 获取通知公告列表 |
||||
|
*/ |
||||
|
@ApiOperation("获取通知公告列表") |
||||
|
@PreAuthorize("@ss.hasPermi('system:notice:list')") |
||||
|
@GetMapping("/list") |
||||
|
public TableDataInfo list(SysNotice notice) |
||||
|
{ |
||||
|
startPage(); |
||||
|
List<SysNotice> list = noticeService.selectNoticeList(notice); |
||||
|
return getDataTable(list); |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 根据通知公告编号获取详细信息 |
||||
|
*/ |
||||
|
@ApiOperation("根据通知公告编号获取详细信息") |
||||
|
@PreAuthorize("@ss.hasPermi('system:notice:query')") |
||||
|
@GetMapping(value = "/{noticeId}") |
||||
|
public AjaxResult getInfo(@PathVariable Long noticeId) |
||||
|
{ |
||||
|
return success(noticeService.selectNoticeById(noticeId)); |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 新增通知公告 |
||||
|
*/ |
||||
|
@ApiOperation("新增通知公告") |
||||
|
@PreAuthorize("@ss.hasPermi('system:notice:add')") |
||||
|
@Log(title = "通知公告", businessType = BusinessType.INSERT) |
||||
|
@PostMapping |
||||
|
public AjaxResult add(@Validated @RequestBody SysNotice notice) |
||||
|
{ |
||||
|
notice.setCreateBy(getUsername()); |
||||
|
return toAjax(noticeService.insertNotice(notice)); |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 修改通知公告 |
||||
|
*/ |
||||
|
@ApiOperation("修改通知公告") |
||||
|
@PreAuthorize("@ss.hasPermi('system:notice:edit')") |
||||
|
@Log(title = "通知公告", businessType = BusinessType.UPDATE) |
||||
|
@PutMapping |
||||
|
public AjaxResult edit(@Validated @RequestBody SysNotice notice) |
||||
|
{ |
||||
|
notice.setUpdateBy(getUsername()); |
||||
|
return toAjax(noticeService.updateNotice(notice)); |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 删除通知公告 |
||||
|
*/ |
||||
|
@ApiOperation("删除通知公告") |
||||
|
@PreAuthorize("@ss.hasPermi('system:notice:remove')") |
||||
|
@Log(title = "通知公告", businessType = BusinessType.DELETE) |
||||
|
@DeleteMapping("/{noticeIds}") |
||||
|
public AjaxResult remove(@PathVariable Long[] noticeIds) |
||||
|
{ |
||||
|
return toAjax(noticeService.deleteNoticeByIds(noticeIds)); |
||||
|
} |
||||
|
} |
@ -0,0 +1,143 @@ |
|||||
|
package com.fastbee.web.controller.system; |
||||
|
|
||||
|
import java.util.List; |
||||
|
import javax.servlet.http.HttpServletResponse; |
||||
|
|
||||
|
import com.fastbee.common.utils.MessageUtils; |
||||
|
import com.fastbee.common.utils.StringUtils; |
||||
|
import io.swagger.annotations.Api; |
||||
|
import io.swagger.annotations.ApiOperation; |
||||
|
import org.springframework.beans.factory.annotation.Autowired; |
||||
|
import org.springframework.security.access.prepost.PreAuthorize; |
||||
|
import org.springframework.validation.annotation.Validated; |
||||
|
import org.springframework.web.bind.annotation.DeleteMapping; |
||||
|
import org.springframework.web.bind.annotation.GetMapping; |
||||
|
import org.springframework.web.bind.annotation.PathVariable; |
||||
|
import org.springframework.web.bind.annotation.PostMapping; |
||||
|
import org.springframework.web.bind.annotation.PutMapping; |
||||
|
import org.springframework.web.bind.annotation.RequestBody; |
||||
|
import org.springframework.web.bind.annotation.RequestMapping; |
||||
|
import org.springframework.web.bind.annotation.RestController; |
||||
|
import com.fastbee.common.annotation.Log; |
||||
|
import com.fastbee.common.constant.UserConstants; |
||||
|
import com.fastbee.common.core.controller.BaseController; |
||||
|
import com.fastbee.common.core.domain.AjaxResult; |
||||
|
import com.fastbee.common.core.page.TableDataInfo; |
||||
|
import com.fastbee.common.enums.BusinessType; |
||||
|
import com.fastbee.common.utils.poi.ExcelUtil; |
||||
|
import com.fastbee.system.domain.SysPost; |
||||
|
import com.fastbee.system.service.ISysPostService; |
||||
|
|
||||
|
/** |
||||
|
* 岗位信息操作处理 |
||||
|
* |
||||
|
* @author ruoyi |
||||
|
*/ |
||||
|
@Api(tags = "岗位管理") |
||||
|
@RestController |
||||
|
@RequestMapping("/system/post") |
||||
|
public class SysPostController extends BaseController |
||||
|
{ |
||||
|
@Autowired |
||||
|
private ISysPostService postService; |
||||
|
|
||||
|
/** |
||||
|
* 获取岗位列表 |
||||
|
*/ |
||||
|
@ApiOperation("获取岗位列表") |
||||
|
@PreAuthorize("@ss.hasPermi('system:post:list')") |
||||
|
@GetMapping("/list") |
||||
|
public TableDataInfo list(SysPost post) |
||||
|
{ |
||||
|
startPage(); |
||||
|
List<SysPost> list = postService.selectPostList(post); |
||||
|
return getDataTable(list); |
||||
|
} |
||||
|
|
||||
|
@ApiOperation("导出岗位列表") |
||||
|
@Log(title = "岗位管理", businessType = BusinessType.EXPORT) |
||||
|
@PreAuthorize("@ss.hasPermi('system:post:export')") |
||||
|
@PostMapping("/export") |
||||
|
public void export(HttpServletResponse response, SysPost post) |
||||
|
{ |
||||
|
List<SysPost> list = postService.selectPostList(post); |
||||
|
ExcelUtil<SysPost> util = new ExcelUtil<SysPost>(SysPost.class); |
||||
|
util.exportExcel(response, list, "岗位数据"); |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 根据岗位编号获取详细信息 |
||||
|
*/ |
||||
|
@ApiOperation("根据岗位编号获取详细信息") |
||||
|
@PreAuthorize("@ss.hasPermi('system:post:query')") |
||||
|
@GetMapping(value = "/{postId}") |
||||
|
public AjaxResult getInfo(@PathVariable Long postId) |
||||
|
{ |
||||
|
return success(postService.selectPostById(postId)); |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 新增岗位 |
||||
|
*/ |
||||
|
@ApiOperation("新增岗位") |
||||
|
@PreAuthorize("@ss.hasPermi('system:post:add')") |
||||
|
@Log(title = "岗位管理", businessType = BusinessType.INSERT) |
||||
|
@PostMapping |
||||
|
public AjaxResult add(@Validated @RequestBody SysPost post) |
||||
|
{ |
||||
|
if (UserConstants.NOT_UNIQUE.equals(postService.checkPostNameUnique(post))) |
||||
|
{ |
||||
|
return error(StringUtils.format(MessageUtils.message("post.add.failed.name.exists"), post.getPostName())); |
||||
|
} |
||||
|
else if (UserConstants.NOT_UNIQUE.equals(postService.checkPostCodeUnique(post))) |
||||
|
{ |
||||
|
return error(StringUtils.format(MessageUtils.message("post.add.failed.code.exists"), post.getPostName())); |
||||
|
} |
||||
|
post.setCreateBy(getUsername()); |
||||
|
return toAjax(postService.insertPost(post)); |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 修改岗位 |
||||
|
*/ |
||||
|
@ApiOperation("修改岗位") |
||||
|
@PreAuthorize("@ss.hasPermi('system:post:edit')") |
||||
|
@Log(title = "岗位管理", businessType = BusinessType.UPDATE) |
||||
|
@PutMapping |
||||
|
public AjaxResult edit(@Validated @RequestBody SysPost post) |
||||
|
{ |
||||
|
if (UserConstants.NOT_UNIQUE.equals(postService.checkPostNameUnique(post))) |
||||
|
{ |
||||
|
return error(StringUtils.format(MessageUtils.message("post.update.failed.name.exists"), post.getPostName())); |
||||
|
} |
||||
|
else if (UserConstants.NOT_UNIQUE.equals(postService.checkPostCodeUnique(post))) |
||||
|
{ |
||||
|
return error(StringUtils.format(MessageUtils.message("post.update.failed.code.exists"), post.getPostName())); |
||||
|
} |
||||
|
post.setUpdateBy(getUsername()); |
||||
|
return toAjax(postService.updatePost(post)); |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 删除岗位 |
||||
|
*/ |
||||
|
@ApiOperation("删除岗位") |
||||
|
@PreAuthorize("@ss.hasPermi('system:post:remove')") |
||||
|
@Log(title = "岗位管理", businessType = BusinessType.DELETE) |
||||
|
@DeleteMapping("/{postIds}") |
||||
|
public AjaxResult remove(@PathVariable Long[] postIds) |
||||
|
{ |
||||
|
return toAjax(postService.deletePostByIds(postIds)); |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 获取岗位选择框列表 |
||||
|
*/ |
||||
|
@ApiOperation("获取岗位选择框列表") |
||||
|
@GetMapping("/optionselect") |
||||
|
public AjaxResult optionselect() |
||||
|
{ |
||||
|
List<SysPost> posts = postService.selectPostAll(); |
||||
|
return success(posts); |
||||
|
} |
||||
|
} |
@ -0,0 +1,166 @@ |
|||||
|
package com.fastbee.web.controller.system; |
||||
|
|
||||
|
import com.fastbee.common.annotation.Log; |
||||
|
import com.fastbee.common.config.RuoYiConfig; |
||||
|
import com.fastbee.common.constant.UserConstants; |
||||
|
import com.fastbee.common.core.controller.BaseController; |
||||
|
import com.fastbee.common.core.domain.AjaxResult; |
||||
|
import com.fastbee.common.core.domain.entity.SysUser; |
||||
|
import com.fastbee.common.core.domain.model.LoginUser; |
||||
|
import com.fastbee.common.enums.BusinessType; |
||||
|
import com.fastbee.common.enums.SocialPlatformType; |
||||
|
import com.fastbee.common.utils.MessageUtils; |
||||
|
import com.fastbee.common.utils.SecurityUtils; |
||||
|
import com.fastbee.common.utils.StringUtils; |
||||
|
import com.fastbee.common.utils.file.FileUploadUtils; |
||||
|
import com.fastbee.common.utils.file.MimeTypeUtils; |
||||
|
import com.fastbee.framework.web.service.TokenService; |
||||
|
import com.fastbee.iot.domain.UserSocialProfile; |
||||
|
import com.fastbee.iot.service.IUserSocialProfileService; |
||||
|
import com.fastbee.system.service.ISysUserService; |
||||
|
import io.swagger.annotations.Api; |
||||
|
import io.swagger.annotations.ApiOperation; |
||||
|
import org.springframework.beans.factory.annotation.Autowired; |
||||
|
import org.springframework.security.access.prepost.PreAuthorize; |
||||
|
import org.springframework.web.bind.annotation.GetMapping; |
||||
|
import org.springframework.web.bind.annotation.PostMapping; |
||||
|
import org.springframework.web.bind.annotation.PutMapping; |
||||
|
import org.springframework.web.bind.annotation.RequestBody; |
||||
|
import org.springframework.web.bind.annotation.RequestMapping; |
||||
|
import org.springframework.web.bind.annotation.RequestParam; |
||||
|
import org.springframework.web.bind.annotation.RestController; |
||||
|
import org.springframework.web.multipart.MultipartFile; |
||||
|
|
||||
|
import java.util.List; |
||||
|
|
||||
|
/** |
||||
|
* 个人信息 业务处理 |
||||
|
* |
||||
|
* @author ruoyi |
||||
|
*/ |
||||
|
@Api(tags = "个人中心") |
||||
|
@RestController |
||||
|
@RequestMapping("/system/user/profile") |
||||
|
public class SysProfileController extends BaseController |
||||
|
{ |
||||
|
@Autowired |
||||
|
private ISysUserService userService; |
||||
|
|
||||
|
@Autowired |
||||
|
private TokenService tokenService; |
||||
|
|
||||
|
@Autowired |
||||
|
private IUserSocialProfileService iUserSocialProfileService; |
||||
|
|
||||
|
/** |
||||
|
* 个人信息 |
||||
|
*/ |
||||
|
@ApiOperation("获取个人信息") |
||||
|
@GetMapping |
||||
|
public AjaxResult profile() |
||||
|
{ |
||||
|
LoginUser loginUser = getLoginUser(); |
||||
|
SysUser user = loginUser.getUser(); |
||||
|
AjaxResult ajax = AjaxResult.success(user); |
||||
|
ajax.put("roleGroup", userService.selectUserRoleGroup(loginUser.getUsername())); |
||||
|
ajax.put("postGroup", userService.selectUserPostGroup(loginUser.getUsername())); |
||||
|
List<UserSocialProfile> socialProfileList = iUserSocialProfileService.selectUserSocialProfile(loginUser.getUserId()); |
||||
|
UserSocialProfile userSocialProfile = socialProfileList.stream().filter(s -> SocialPlatformType.listWechatPlatform.contains(s.getSourceClient()) && "1".equals(s.getStatus())).findFirst().orElse(null); |
||||
|
ajax.put("socialGroup", socialProfileList); |
||||
|
ajax.put("wxBind", userSocialProfile != null); |
||||
|
return ajax; |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 修改用户 |
||||
|
*/ |
||||
|
@ApiOperation("修改个人信息") |
||||
|
@Log(title = "个人信息", businessType = BusinessType.UPDATE) |
||||
|
@PutMapping |
||||
|
public AjaxResult updateProfile(@RequestBody SysUser user) |
||||
|
{ |
||||
|
LoginUser loginUser = getLoginUser(); |
||||
|
SysUser sysUser = loginUser.getUser(); |
||||
|
user.setUserName(sysUser.getUserName()); |
||||
|
if (StringUtils.isNotEmpty(user.getPhonenumber()) |
||||
|
&& UserConstants.NOT_UNIQUE.equals(userService.checkPhoneUnique(user))) |
||||
|
{ |
||||
|
return error(StringUtils.format(MessageUtils.message("user.update.failed.phone.exists"), user.getUserName())); |
||||
|
} |
||||
|
if (StringUtils.isNotEmpty(user.getEmail()) |
||||
|
&& UserConstants.NOT_UNIQUE.equals(userService.checkEmailUnique(user))) |
||||
|
{ |
||||
|
return error(StringUtils.format(MessageUtils.message("user.update.failed.email.exists"), user.getUserName())); |
||||
|
} |
||||
|
user.setUserId(sysUser.getUserId()); |
||||
|
user.setPassword(null); |
||||
|
user.setAvatar(null); |
||||
|
user.setDeptId(sysUser.getDeptId()); |
||||
|
if (userService.updateUserProfile(user) > 0) |
||||
|
{ |
||||
|
// 更新缓存用户信息
|
||||
|
sysUser.setNickName(user.getNickName()); |
||||
|
sysUser.setPhonenumber(user.getPhonenumber()); |
||||
|
sysUser.setEmail(user.getEmail()); |
||||
|
sysUser.setSex(user.getSex()); |
||||
|
tokenService.setLoginUser(loginUser); |
||||
|
return success(); |
||||
|
} |
||||
|
return error(MessageUtils.message("user.update.failed")); |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 重置密码 |
||||
|
*/ |
||||
|
@ApiOperation("重置密码") |
||||
|
@PreAuthorize("@ss.hasPermi('systerm:user:updatePwd')") |
||||
|
@Log(title = "个人信息", businessType = BusinessType.UPDATE) |
||||
|
@PutMapping("/updatePwd") |
||||
|
public AjaxResult updatePwd(String oldPassword, String newPassword) |
||||
|
{ |
||||
|
LoginUser loginUser = getLoginUser(); |
||||
|
String userName = loginUser.getUsername(); |
||||
|
String password = loginUser.getPassword(); |
||||
|
if (!SecurityUtils.matchesPassword(oldPassword, password)) |
||||
|
{ |
||||
|
return error(MessageUtils.message("user.update.failed.password.wrong")); |
||||
|
} |
||||
|
if (SecurityUtils.matchesPassword(newPassword, password)) |
||||
|
{ |
||||
|
return error(MessageUtils.message("user.update.failed.password.same")); |
||||
|
} |
||||
|
if (userService.resetUserPwd(userName, SecurityUtils.encryptPassword(newPassword)) > 0) |
||||
|
{ |
||||
|
// 更新缓存用户密码
|
||||
|
loginUser.getUser().setPassword(SecurityUtils.encryptPassword(newPassword)); |
||||
|
tokenService.setLoginUser(loginUser); |
||||
|
return success(); |
||||
|
} |
||||
|
return error(MessageUtils.message("user.update.password.failed")); |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 头像上传 |
||||
|
*/ |
||||
|
@ApiOperation("头像上传") |
||||
|
@Log(title = "用户头像", businessType = BusinessType.UPDATE) |
||||
|
@PostMapping("/avatar") |
||||
|
public AjaxResult avatar(@RequestParam("avatarfile") MultipartFile file) throws Exception |
||||
|
{ |
||||
|
if (!file.isEmpty()) |
||||
|
{ |
||||
|
LoginUser loginUser = getLoginUser(); |
||||
|
String avatar = FileUploadUtils.upload(RuoYiConfig.getAvatarPath(), file, MimeTypeUtils.IMAGE_EXTENSION); |
||||
|
if (userService.updateUserAvatar(loginUser.getUsername(), avatar)) |
||||
|
{ |
||||
|
AjaxResult ajax = AjaxResult.success(); |
||||
|
ajax.put("imgUrl", avatar); |
||||
|
// 更新缓存用户头像
|
||||
|
loginUser.getUser().setAvatar(avatar); |
||||
|
tokenService.setLoginUser(loginUser); |
||||
|
return ajax; |
||||
|
} |
||||
|
} |
||||
|
return error(MessageUtils.message("user.upload.avatar.failed")); |
||||
|
} |
||||
|
} |
@ -0,0 +1,42 @@ |
|||||
|
package com.fastbee.web.controller.system; |
||||
|
|
||||
|
import io.swagger.annotations.Api; |
||||
|
import io.swagger.annotations.ApiOperation; |
||||
|
import org.springframework.beans.factory.annotation.Autowired; |
||||
|
import org.springframework.web.bind.annotation.PostMapping; |
||||
|
import org.springframework.web.bind.annotation.RequestBody; |
||||
|
import org.springframework.web.bind.annotation.RestController; |
||||
|
import com.fastbee.common.core.controller.BaseController; |
||||
|
import com.fastbee.common.core.domain.AjaxResult; |
||||
|
import com.fastbee.common.core.domain.model.RegisterBody; |
||||
|
import com.fastbee.common.utils.StringUtils; |
||||
|
import com.fastbee.framework.web.service.SysRegisterService; |
||||
|
import com.fastbee.system.service.ISysConfigService; |
||||
|
|
||||
|
/** |
||||
|
* 注册验证 |
||||
|
* |
||||
|
* @author ruoyi |
||||
|
*/ |
||||
|
@Api(tags = "注册账号") |
||||
|
@RestController |
||||
|
public class SysRegisterController extends BaseController |
||||
|
{ |
||||
|
@Autowired |
||||
|
private SysRegisterService registerService; |
||||
|
|
||||
|
@Autowired |
||||
|
private ISysConfigService configService; |
||||
|
|
||||
|
@ApiOperation("注册账号") |
||||
|
@PostMapping("/register") |
||||
|
public AjaxResult register(@RequestBody RegisterBody user) |
||||
|
{ |
||||
|
if (!("true".equals(configService.selectConfigByKey("sys.account.registerUser")))) |
||||
|
{ |
||||
|
return error("当前系统没有开启注册功能!"); |
||||
|
} |
||||
|
String msg = registerService.register(user); |
||||
|
return StringUtils.isEmpty(msg) ? success() : error(msg); |
||||
|
} |
||||
|
} |
@ -0,0 +1,300 @@ |
|||||
|
package com.fastbee.web.controller.system; |
||||
|
|
||||
|
import java.util.List; |
||||
|
import javax.servlet.http.HttpServletResponse; |
||||
|
|
||||
|
import com.fastbee.common.constant.HttpStatus; |
||||
|
import com.fastbee.common.utils.MessageUtils; |
||||
|
import com.fastbee.common.utils.collection.CollectionUtils; |
||||
|
import com.github.pagehelper.PageInfo; |
||||
|
import io.swagger.annotations.Api; |
||||
|
import io.swagger.annotations.ApiOperation; |
||||
|
import org.springframework.beans.factory.annotation.Autowired; |
||||
|
import org.springframework.security.access.prepost.PreAuthorize; |
||||
|
import org.springframework.validation.annotation.Validated; |
||||
|
import org.springframework.web.bind.annotation.DeleteMapping; |
||||
|
import org.springframework.web.bind.annotation.GetMapping; |
||||
|
import org.springframework.web.bind.annotation.PathVariable; |
||||
|
import org.springframework.web.bind.annotation.PostMapping; |
||||
|
import org.springframework.web.bind.annotation.PutMapping; |
||||
|
import org.springframework.web.bind.annotation.RequestBody; |
||||
|
import org.springframework.web.bind.annotation.RequestMapping; |
||||
|
import org.springframework.web.bind.annotation.RestController; |
||||
|
import com.fastbee.common.annotation.Log; |
||||
|
import com.fastbee.common.constant.UserConstants; |
||||
|
import com.fastbee.common.core.controller.BaseController; |
||||
|
import com.fastbee.common.core.domain.AjaxResult; |
||||
|
import com.fastbee.common.core.domain.entity.SysDept; |
||||
|
import com.fastbee.common.core.domain.entity.SysRole; |
||||
|
import com.fastbee.common.core.domain.entity.SysUser; |
||||
|
import com.fastbee.common.core.domain.model.LoginUser; |
||||
|
import com.fastbee.common.core.page.TableDataInfo; |
||||
|
import com.fastbee.common.enums.BusinessType; |
||||
|
import com.fastbee.common.utils.StringUtils; |
||||
|
import com.fastbee.common.utils.poi.ExcelUtil; |
||||
|
import com.fastbee.framework.web.service.SysPermissionService; |
||||
|
import com.fastbee.framework.web.service.TokenService; |
||||
|
import com.fastbee.system.domain.SysUserRole; |
||||
|
import com.fastbee.system.service.ISysDeptService; |
||||
|
import com.fastbee.system.service.ISysRoleService; |
||||
|
import com.fastbee.system.service.ISysUserService; |
||||
|
|
||||
|
/** |
||||
|
* 角色信息 |
||||
|
* |
||||
|
* @author ruoyi |
||||
|
*/ |
||||
|
@Api(tags = "角色管理") |
||||
|
@RestController |
||||
|
@RequestMapping("/system/role") |
||||
|
public class SysRoleController extends BaseController |
||||
|
{ |
||||
|
@Autowired |
||||
|
private ISysRoleService roleService; |
||||
|
|
||||
|
@Autowired |
||||
|
private TokenService tokenService; |
||||
|
|
||||
|
@Autowired |
||||
|
private SysPermissionService permissionService; |
||||
|
|
||||
|
@Autowired |
||||
|
private ISysUserService userService; |
||||
|
|
||||
|
@Autowired |
||||
|
private ISysDeptService deptService; |
||||
|
|
||||
|
@ApiOperation("获取角色分页列表") |
||||
|
@PreAuthorize("@ss.hasPermi('system:role:list')") |
||||
|
@GetMapping("/list") |
||||
|
public TableDataInfo list(SysRole role, Integer pageNum, Integer pageSize) |
||||
|
{ |
||||
|
// startPage();
|
||||
|
List<SysRole> list = roleService.selectRoleList(role); |
||||
|
TableDataInfo tableDataInfo = new TableDataInfo(); |
||||
|
tableDataInfo.setCode(HttpStatus.SUCCESS); |
||||
|
tableDataInfo.setMsg(MessageUtils.message("query.success")); |
||||
|
if (org.apache.commons.collections4.CollectionUtils.isEmpty(list)) { |
||||
|
tableDataInfo.setRows(list); |
||||
|
tableDataInfo.setTotal(0); |
||||
|
} else { |
||||
|
List list1 = CollectionUtils.startPage(list, pageNum, pageSize); |
||||
|
tableDataInfo.setRows(list1); |
||||
|
tableDataInfo.setTotal(new PageInfo(list).getTotal()); |
||||
|
} |
||||
|
return tableDataInfo; |
||||
|
} |
||||
|
|
||||
|
@ApiOperation("导出角色列表") |
||||
|
@Log(title = "角色管理", businessType = BusinessType.EXPORT) |
||||
|
@PreAuthorize("@ss.hasPermi('system:role:export')") |
||||
|
@PostMapping("/export") |
||||
|
public void export(HttpServletResponse response, SysRole role) |
||||
|
{ |
||||
|
List<SysRole> list = roleService.selectRoleList(role); |
||||
|
ExcelUtil<SysRole> util = new ExcelUtil<SysRole>(SysRole.class); |
||||
|
util.exportExcel(response, list, "角色数据"); |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 根据角色编号获取详细信息 |
||||
|
*/ |
||||
|
@ApiOperation("根据角色编号获取详细信息") |
||||
|
@PreAuthorize("@ss.hasPermi('system:role:query')") |
||||
|
@GetMapping(value = "/{roleId}") |
||||
|
public AjaxResult getInfo(@PathVariable Long roleId) |
||||
|
{ |
||||
|
roleService.checkRoleDataScope(roleId); |
||||
|
return success(roleService.selectRoleById(roleId)); |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 新增角色 |
||||
|
*/ |
||||
|
@ApiOperation("新增角色") |
||||
|
@PreAuthorize("@ss.hasPermi('system:role:add')") |
||||
|
@Log(title = "角色管理", businessType = BusinessType.INSERT) |
||||
|
@PostMapping |
||||
|
public AjaxResult add(@Validated @RequestBody SysRole role) |
||||
|
{ |
||||
|
// if (UserConstants.NOT_UNIQUE.equals(roleService.checkRoleNameUnique(role)))
|
||||
|
// {
|
||||
|
// return error(StringUtils.format(MessageUtils.message("role.add.failed.name.exists"), role.getRoleName()));
|
||||
|
// }
|
||||
|
// else if (UserConstants.NOT_UNIQUE.equals(roleService.checkRoleKeyUnique(role)))
|
||||
|
// {
|
||||
|
// return error(StringUtils.format(MessageUtils.message("role.add.failed.key.exists"), role.getRoleName()));
|
||||
|
// }
|
||||
|
if ("manager".equals(role.getRoleKey())) { |
||||
|
return error(MessageUtils.message("role.add.manager.failed")); |
||||
|
} |
||||
|
role.setCreateBy(getUsername()); |
||||
|
return toAjax(roleService.insertRole(role)); |
||||
|
|
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 修改保存角色 |
||||
|
*/ |
||||
|
@ApiOperation("修改角色") |
||||
|
@PreAuthorize("@ss.hasPermi('system:role:edit')") |
||||
|
@Log(title = "角色管理", businessType = BusinessType.UPDATE) |
||||
|
@PutMapping |
||||
|
public AjaxResult edit(@Validated @RequestBody SysRole role) |
||||
|
{ |
||||
|
roleService.checkRoleAllowed(role); |
||||
|
roleService.checkRoleDataScope(role.getRoleId()); |
||||
|
// if (UserConstants.NOT_UNIQUE.equals(roleService.checkRoleNameUnique(role)))
|
||||
|
// {
|
||||
|
// return error(StringUtils.format(MessageUtils.message("role.update.failed.name.exists"), role.getRoleName()));
|
||||
|
// }
|
||||
|
// else if (UserConstants.NOT_UNIQUE.equals(roleService.checkRoleKeyUnique(role)))
|
||||
|
// {
|
||||
|
// return error(StringUtils.format(MessageUtils.message("role.update.failed.key.exists"), role.getRoleName()));
|
||||
|
// }
|
||||
|
role.setUpdateBy(getUsername()); |
||||
|
|
||||
|
if (roleService.updateRole(role) > 0) |
||||
|
{ |
||||
|
// 更新缓存用户权限
|
||||
|
LoginUser loginUser = getLoginUser(); |
||||
|
if (StringUtils.isNotNull(loginUser.getUser()) && !loginUser.getUser().isAdmin()) |
||||
|
{ |
||||
|
loginUser.setPermissions(permissionService.getMenuPermission(loginUser.getUser())); |
||||
|
loginUser.setUser(userService.selectUserByUserName(loginUser.getUser().getUserName())); |
||||
|
tokenService.setLoginUser(loginUser); |
||||
|
} |
||||
|
return success(); |
||||
|
} |
||||
|
return error(StringUtils.format(MessageUtils.message("role.update.failed"), role.getRoleName())); |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 修改保存数据权限 |
||||
|
*/ |
||||
|
@ApiOperation("修改保存数据权限") |
||||
|
@PreAuthorize("@ss.hasPermi('system:role:edit')") |
||||
|
@Log(title = "角色管理", businessType = BusinessType.UPDATE) |
||||
|
@PutMapping("/dataScope") |
||||
|
public AjaxResult dataScope(@RequestBody SysRole role) |
||||
|
{ |
||||
|
roleService.checkRoleAllowed(role); |
||||
|
roleService.checkRoleDataScope(role.getRoleId()); |
||||
|
return toAjax(roleService.authDataScope(role)); |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 状态修改 |
||||
|
*/ |
||||
|
@ApiOperation("修改角色状态") |
||||
|
@PreAuthorize("@ss.hasPermi('system:role:edit')") |
||||
|
@Log(title = "角色管理", businessType = BusinessType.UPDATE) |
||||
|
@PutMapping("/changeStatus") |
||||
|
public AjaxResult changeStatus(@RequestBody SysRole role) |
||||
|
{ |
||||
|
roleService.checkRoleAllowed(role); |
||||
|
roleService.checkRoleDataScope(role.getRoleId()); |
||||
|
role.setUpdateBy(getUsername()); |
||||
|
return toAjax(roleService.updateRoleStatus(role)); |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 删除角色 |
||||
|
*/ |
||||
|
@ApiOperation("删除角色") |
||||
|
@PreAuthorize("@ss.hasPermi('system:role:remove')") |
||||
|
@Log(title = "角色管理", businessType = BusinessType.DELETE) |
||||
|
@DeleteMapping("/{roleIds}") |
||||
|
public AjaxResult remove(@PathVariable Long[] roleIds) |
||||
|
{ |
||||
|
return toAjax(roleService.deleteRoleByIds(roleIds)); |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 获取角色选择框列表 |
||||
|
*/ |
||||
|
@ApiOperation("获取角色选择框列表") |
||||
|
@PreAuthorize("@ss.hasPermi('system:role:query')") |
||||
|
@GetMapping("/optionselect") |
||||
|
public AjaxResult optionselect() |
||||
|
{ |
||||
|
return success(roleService.selectRoleAll()); |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 查询已分配用户角色列表 |
||||
|
*/ |
||||
|
@ApiOperation("查询已分配用户角色列表") |
||||
|
@PreAuthorize("@ss.hasPermi('system:role:list')") |
||||
|
@GetMapping("/authUser/allocatedList") |
||||
|
public TableDataInfo allocatedList(SysUser user) |
||||
|
{ |
||||
|
startPage(); |
||||
|
List<SysUser> list = userService.selectAllocatedList(user); |
||||
|
return getDataTable(list); |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 查询未分配用户角色列表 |
||||
|
*/ |
||||
|
@ApiOperation("查询未分配用户角色列表") |
||||
|
@PreAuthorize("@ss.hasPermi('system:role:list')") |
||||
|
@GetMapping("/authUser/unallocatedList") |
||||
|
public TableDataInfo unallocatedList(SysUser user) |
||||
|
{ |
||||
|
startPage(); |
||||
|
List<SysUser> list = userService.selectUnallocatedList(user); |
||||
|
return getDataTable(list); |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 取消授权用户 |
||||
|
*/ |
||||
|
@ApiOperation("取消授权用户") |
||||
|
@PreAuthorize("@ss.hasPermi('system:role:edit')") |
||||
|
@Log(title = "角色管理", businessType = BusinessType.GRANT) |
||||
|
@PutMapping("/authUser/cancel") |
||||
|
public AjaxResult cancelAuthUser(@RequestBody SysUserRole userRole) |
||||
|
{ |
||||
|
return toAjax(roleService.deleteAuthUser(userRole)); |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 批量取消授权用户 |
||||
|
*/ |
||||
|
@ApiOperation("批量取消授权用户") |
||||
|
@PreAuthorize("@ss.hasPermi('system:role:edit')") |
||||
|
@Log(title = "角色管理", businessType = BusinessType.GRANT) |
||||
|
@PutMapping("/authUser/cancelAll") |
||||
|
public AjaxResult cancelAuthUserAll(Long roleId, Long[] userIds) |
||||
|
{ |
||||
|
return toAjax(roleService.deleteAuthUsers(roleId, userIds)); |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 批量选择用户授权 |
||||
|
*/ |
||||
|
@ApiOperation("批量选择用户授权") |
||||
|
@PreAuthorize("@ss.hasPermi('system:role:edit')") |
||||
|
@Log(title = "角色管理", businessType = BusinessType.GRANT) |
||||
|
@PutMapping("/authUser/selectAll") |
||||
|
public AjaxResult selectAuthUserAll(Long roleId, Long[] userIds) |
||||
|
{ |
||||
|
roleService.checkRoleDataScope(roleId); |
||||
|
return toAjax(roleService.insertAuthUsers(roleId, userIds)); |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 获取对应角色部门树列表 |
||||
|
*/ |
||||
|
@ApiOperation("获取对应角色部门树列表") |
||||
|
@PreAuthorize("@ss.hasPermi('system:role:query')") |
||||
|
@GetMapping(value = "/deptTree/{roleId}") |
||||
|
public AjaxResult deptTree(@PathVariable("roleId") Long roleId) |
||||
|
{ |
||||
|
AjaxResult ajax = AjaxResult.success(); |
||||
|
ajax.put("checkedKeys", deptService.selectDeptListByRoleId(roleId)); |
||||
|
ajax.put("depts", deptService.selectDeptTreeList(new SysDept())); |
||||
|
return ajax; |
||||
|
} |
||||
|
} |
@ -0,0 +1,77 @@ |
|||||
|
package com.fastbee.web.controller.system; |
||||
|
|
||||
|
import com.fastbee.common.core.controller.BaseController; |
||||
|
import com.fastbee.common.core.domain.AjaxResult; |
||||
|
import com.fastbee.common.core.domain.entity.SysTranslate; |
||||
|
import com.fastbee.common.utils.MessageUtils; |
||||
|
import com.fastbee.common.utils.StringUtils; |
||||
|
import com.fastbee.common.utils.poi.ExcelUtil; |
||||
|
import com.fastbee.system.service.ISysTranslateService; |
||||
|
import io.swagger.annotations.Api; |
||||
|
import io.swagger.annotations.ApiOperation; |
||||
|
import org.apache.commons.collections4.CollectionUtils; |
||||
|
import org.springframework.beans.factory.annotation.Autowired; |
||||
|
import org.springframework.security.access.prepost.PreAuthorize; |
||||
|
import org.springframework.web.bind.annotation.*; |
||||
|
import org.springframework.web.multipart.MultipartFile; |
||||
|
|
||||
|
import javax.servlet.http.HttpServletResponse; |
||||
|
import java.util.List; |
||||
|
|
||||
|
/** |
||||
|
* 翻译表管理 |
||||
|
* |
||||
|
* @author ruoyi |
||||
|
*/ |
||||
|
@Api(tags = "翻译表管理") |
||||
|
@RestController |
||||
|
@RequestMapping("/system/translate") |
||||
|
public class SysTranslateController extends BaseController |
||||
|
{ |
||||
|
@Autowired |
||||
|
private ISysTranslateService sysTranslateService; |
||||
|
|
||||
|
/** |
||||
|
* 导入翻译列表 |
||||
|
*/ |
||||
|
@ApiOperation("导入翻译列表") |
||||
|
@PreAuthorize("@ss.hasPermi('system:translate:import')") |
||||
|
@PostMapping("/import") |
||||
|
public AjaxResult importSysTranslate(MultipartFile file, String type, Long productId) throws Exception { |
||||
|
if (null == file) { |
||||
|
return error(MessageUtils.message("import.failed.file.null")); |
||||
|
} |
||||
|
if (StringUtils.isEmpty(type)) { |
||||
|
return error(); |
||||
|
} |
||||
|
ExcelUtil<SysTranslate> util = new ExcelUtil<>(SysTranslate.class); |
||||
|
List<SysTranslate> list = util.importExcel(file.getInputStream()); |
||||
|
if (CollectionUtils.isEmpty(list)) { |
||||
|
return error(MessageUtils.message("import.failed.data.null")); |
||||
|
} |
||||
|
sysTranslateService.importSysTranslate(list, type, productId); |
||||
|
return success(MessageUtils.message("import.success")); |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 导出翻译列表 |
||||
|
*/ |
||||
|
@ApiOperation("导出翻译列表") |
||||
|
@PreAuthorize("@ss.hasPermi('system:translate:export')") |
||||
|
@PostMapping("/export") |
||||
|
public void export(HttpServletResponse response, SysTranslate sysTranslate, String type, @RequestParam(name = "isSource", required = false, defaultValue = "0") Boolean isSource) |
||||
|
{ |
||||
|
if (StringUtils.isEmpty(type)) { |
||||
|
return; |
||||
|
} |
||||
|
List<SysTranslate> list; |
||||
|
if (isSource) { |
||||
|
list = sysTranslateService.selectSourceList(type, sysTranslate.getProductId()); |
||||
|
} else { |
||||
|
list = sysTranslateService.selectSysTranslateList(sysTranslate, type); |
||||
|
} |
||||
|
ExcelUtil<SysTranslate> util = new ExcelUtil<>(SysTranslate.class); |
||||
|
util.exportExcel(response, list, "翻译列表"); |
||||
|
} |
||||
|
|
||||
|
} |
@ -0,0 +1,316 @@ |
|||||
|
package com.fastbee.web.controller.system; |
||||
|
|
||||
|
import java.util.List; |
||||
|
import java.util.stream.Collectors; |
||||
|
import javax.servlet.http.HttpServletResponse; |
||||
|
|
||||
|
import com.fastbee.common.utils.MessageUtils; |
||||
|
import io.swagger.annotations.Api; |
||||
|
import io.swagger.annotations.ApiOperation; |
||||
|
import org.apache.commons.lang3.ArrayUtils; |
||||
|
import org.springframework.beans.factory.annotation.Autowired; |
||||
|
import org.springframework.security.access.prepost.PreAuthorize; |
||||
|
import org.springframework.validation.annotation.Validated; |
||||
|
import org.springframework.web.bind.annotation.DeleteMapping; |
||||
|
import org.springframework.web.bind.annotation.GetMapping; |
||||
|
import org.springframework.web.bind.annotation.PathVariable; |
||||
|
import org.springframework.web.bind.annotation.PostMapping; |
||||
|
import org.springframework.web.bind.annotation.PutMapping; |
||||
|
import org.springframework.web.bind.annotation.RequestBody; |
||||
|
import org.springframework.web.bind.annotation.RequestMapping; |
||||
|
import org.springframework.web.bind.annotation.RestController; |
||||
|
import org.springframework.web.multipart.MultipartFile; |
||||
|
import com.fastbee.common.annotation.Log; |
||||
|
import com.fastbee.common.constant.UserConstants; |
||||
|
import com.fastbee.common.core.controller.BaseController; |
||||
|
import com.fastbee.common.core.domain.AjaxResult; |
||||
|
import com.fastbee.common.core.domain.entity.SysDept; |
||||
|
import com.fastbee.common.core.domain.entity.SysRole; |
||||
|
import com.fastbee.common.core.domain.entity.SysUser; |
||||
|
import com.fastbee.common.core.page.TableDataInfo; |
||||
|
import com.fastbee.common.enums.BusinessType; |
||||
|
import com.fastbee.common.utils.SecurityUtils; |
||||
|
import com.fastbee.common.utils.StringUtils; |
||||
|
import com.fastbee.common.utils.poi.ExcelUtil; |
||||
|
import com.fastbee.system.service.ISysDeptService; |
||||
|
import com.fastbee.system.service.ISysPostService; |
||||
|
import com.fastbee.system.service.ISysRoleService; |
||||
|
import com.fastbee.system.service.ISysUserService; |
||||
|
|
||||
|
/** |
||||
|
* 用户信息 |
||||
|
* |
||||
|
* @author ruoyi |
||||
|
*/ |
||||
|
@Api(tags = "用户管理") |
||||
|
@RestController |
||||
|
@RequestMapping("/system/user") |
||||
|
public class SysUserController extends BaseController |
||||
|
{ |
||||
|
@Autowired |
||||
|
private ISysUserService userService; |
||||
|
|
||||
|
@Autowired |
||||
|
private ISysRoleService roleService; |
||||
|
|
||||
|
@Autowired |
||||
|
private ISysDeptService deptService; |
||||
|
|
||||
|
@Autowired |
||||
|
private ISysPostService postService; |
||||
|
|
||||
|
/** |
||||
|
* 获取用户列表 |
||||
|
*/ |
||||
|
@ApiOperation("获取用户分页列表") |
||||
|
@PreAuthorize("@ss.hasPermi('system:user:list')") |
||||
|
@GetMapping("/list") |
||||
|
public TableDataInfo list(SysUser user) |
||||
|
{ |
||||
|
startPage(); |
||||
|
if (null == user.getDeptId()) { |
||||
|
user.setDeptId(getLoginUser().getDeptId()); |
||||
|
} |
||||
|
List<SysUser> list = userService.selectUserList(user); |
||||
|
return getDataTable(list); |
||||
|
} |
||||
|
|
||||
|
@ApiOperation("导出用户列表") |
||||
|
@Log(title = "用户管理", businessType = BusinessType.EXPORT) |
||||
|
@PreAuthorize("@ss.hasPermi('system:user:export')") |
||||
|
@PostMapping("/export") |
||||
|
public void export(HttpServletResponse response, SysUser user) |
||||
|
{ |
||||
|
if (null == user.getDeptId()) { |
||||
|
user.setDeptId(getLoginUser().getDeptId()); |
||||
|
} |
||||
|
List<SysUser> list = userService.selectUserList(user); |
||||
|
ExcelUtil<SysUser> util = new ExcelUtil<SysUser>(SysUser.class); |
||||
|
util.exportExcel(response, list, "用户数据"); |
||||
|
} |
||||
|
|
||||
|
@ApiOperation("批量导入用户") |
||||
|
@Log(title = "用户管理", businessType = BusinessType.IMPORT) |
||||
|
@PreAuthorize("@ss.hasPermi('system:user:import')") |
||||
|
@PostMapping("/importData") |
||||
|
public AjaxResult importData(MultipartFile file, boolean updateSupport) throws Exception |
||||
|
{ |
||||
|
ExcelUtil<SysUser> util = new ExcelUtil<SysUser>(SysUser.class); |
||||
|
List<SysUser> userList = util.importExcel(file.getInputStream()); |
||||
|
String operName = getUsername(); |
||||
|
String message = userService.importUser(userList, updateSupport, operName); |
||||
|
return success(message); |
||||
|
} |
||||
|
|
||||
|
|
||||
|
@ApiOperation("下载用户导入模板") |
||||
|
@PostMapping("/importTemplate") |
||||
|
public void importTemplate(HttpServletResponse response) |
||||
|
{ |
||||
|
ExcelUtil<SysUser> util = new ExcelUtil<SysUser>(SysUser.class); |
||||
|
util.importTemplateExcel(response, "用户数据"); |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 根据用户编号获取详细信息 |
||||
|
*/ |
||||
|
@ApiOperation("根据用户编号获取详细信息") |
||||
|
@PreAuthorize("@ss.hasPermi('system:user:query')") |
||||
|
@GetMapping(value = { "/", "/{userId}" }) |
||||
|
public AjaxResult getInfo(@PathVariable(value = "userId", required = false) Long userId) |
||||
|
{ |
||||
|
userService.checkUserDataScope(userId); |
||||
|
AjaxResult ajax = AjaxResult.success(); |
||||
|
// List<SysRole> roles = roleService.selectRoleAll();
|
||||
|
// ajax.put("roles", SysUser.isAdmin(userId) ? roles : roles.stream().filter(r -> !r.isAdmin()).collect(Collectors.toList()));
|
||||
|
ajax.put("posts", postService.selectPostAll()); |
||||
|
if (StringUtils.isNotNull(userId)) |
||||
|
{ |
||||
|
SysUser sysUser = userService.selectUserById(userId); |
||||
|
ajax.put(AjaxResult.DATA_TAG, sysUser); |
||||
|
ajax.put("postIds", postService.selectPostListByUserId(userId)); |
||||
|
SysRole sysRole = new SysRole(); |
||||
|
sysRole.setDeptId(sysUser.getDeptId()); |
||||
|
sysRole.setShowChild(false); |
||||
|
List<SysRole> sysRoleList = roleService.selectRoleList(sysRole); |
||||
|
ajax.put("roles", sysRoleList); |
||||
|
ajax.put("roleIds", sysUser.getRoles().stream().map(SysRole::getRoleId).collect(Collectors.toList())); |
||||
|
} |
||||
|
return ajax; |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 新增用户 |
||||
|
*/ |
||||
|
@ApiOperation("新增用户") |
||||
|
@PreAuthorize("@ss.hasPermi('system:user:add')") |
||||
|
@Log(title = "用户管理", businessType = BusinessType.INSERT) |
||||
|
@PostMapping |
||||
|
public AjaxResult add(@Validated @RequestBody SysUser user) |
||||
|
{ |
||||
|
if (UserConstants.NOT_UNIQUE.equals(userService.checkUserNameUnique(user))) |
||||
|
{ |
||||
|
return error(StringUtils.format(MessageUtils.message("user.add.failed.name.exists"), user.getUserName())); |
||||
|
} |
||||
|
else if (StringUtils.isNotEmpty(user.getPhonenumber()) |
||||
|
&& UserConstants.NOT_UNIQUE.equals(userService.checkPhoneUnique(user))) |
||||
|
{ |
||||
|
return error(StringUtils.format(MessageUtils.message("user.add.failed.phone.exists"), user.getUserName())); |
||||
|
} |
||||
|
else if (StringUtils.isNotEmpty(user.getEmail()) |
||||
|
&& UserConstants.NOT_UNIQUE.equals(userService.checkEmailUnique(user))) |
||||
|
{ |
||||
|
return error(StringUtils.format(MessageUtils.message("user.add.failed.email.exists"), user.getUserName())); |
||||
|
} |
||||
|
user.setCreateBy(getUsername()); |
||||
|
user.setPassword(SecurityUtils.encryptPassword(user.getPassword())); |
||||
|
return toAjax(userService.insertUser(user)); |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 修改用户 |
||||
|
*/ |
||||
|
@ApiOperation("修改用户") |
||||
|
@PreAuthorize("@ss.hasPermi('system:user:edit')") |
||||
|
@Log(title = "用户管理", businessType = BusinessType.UPDATE) |
||||
|
@PutMapping |
||||
|
public AjaxResult edit(@Validated @RequestBody SysUser user) |
||||
|
{ |
||||
|
userService.checkUserAllowed(user); |
||||
|
userService.checkUserDataScope(user.getUserId()); |
||||
|
if (UserConstants.NOT_UNIQUE.equals(userService.checkUserNameUnique(user))) |
||||
|
{ |
||||
|
return error(StringUtils.format(MessageUtils.message("user.update.failed.name.exists"), user.getUserName())); |
||||
|
} |
||||
|
else if (StringUtils.isNotEmpty(user.getPhonenumber()) |
||||
|
&& UserConstants.NOT_UNIQUE.equals(userService.checkPhoneUnique(user))) |
||||
|
{ |
||||
|
return error(StringUtils.format(MessageUtils.message("user.update.failed.phone.exists"), user.getUserName())); |
||||
|
} |
||||
|
else if (StringUtils.isNotEmpty(user.getEmail()) |
||||
|
&& UserConstants.NOT_UNIQUE.equals(userService.checkEmailUnique(user))) |
||||
|
{ |
||||
|
return error(StringUtils.format(MessageUtils.message("user.update.failed.email.exists"), user.getUserName())); |
||||
|
} |
||||
|
user.setUpdateBy(getUsername()); |
||||
|
return toAjax(userService.updateUser(user)); |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 删除用户 |
||||
|
*/ |
||||
|
@ApiOperation("删除用户") |
||||
|
@PreAuthorize("@ss.hasPermi('system:user:remove')") |
||||
|
@Log(title = "用户管理", businessType = BusinessType.DELETE) |
||||
|
@DeleteMapping("/{userIds}") |
||||
|
public AjaxResult remove(@PathVariable Long[] userIds) |
||||
|
{ |
||||
|
if (ArrayUtils.contains(userIds, getUserId())) |
||||
|
{ |
||||
|
return error(MessageUtils.message("user.delete.failed")); |
||||
|
} |
||||
|
return toAjax(userService.deleteUserByIds(userIds)); |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 重置密码 |
||||
|
*/ |
||||
|
@ApiOperation("重置用户密码") |
||||
|
@PreAuthorize("@ss.hasPermi('system:user:resetPwd')") |
||||
|
@Log(title = "用户管理", businessType = BusinessType.UPDATE) |
||||
|
@PutMapping("/resetPwd") |
||||
|
public AjaxResult resetPwd(@RequestBody SysUser user) |
||||
|
{ |
||||
|
userService.checkUserAllowed(user); |
||||
|
userService.checkUserDataScope(user.getUserId()); |
||||
|
user.setPassword(SecurityUtils.encryptPassword(user.getPassword())); |
||||
|
user.setUpdateBy(getUsername()); |
||||
|
return toAjax(userService.resetPwd(user)); |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 状态修改 |
||||
|
*/ |
||||
|
@ApiOperation("修改用户状态") |
||||
|
@PreAuthorize("@ss.hasPermi('system:user:edit')") |
||||
|
@Log(title = "用户管理", businessType = BusinessType.UPDATE) |
||||
|
@PutMapping("/changeStatus") |
||||
|
public AjaxResult changeStatus(@RequestBody SysUser user) |
||||
|
{ |
||||
|
userService.checkUserAllowed(user); |
||||
|
userService.checkUserDataScope(user.getUserId()); |
||||
|
user.setUpdateBy(getUsername()); |
||||
|
return toAjax(userService.updateUserStatus(user)); |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 根据用户编号获取授权角色 |
||||
|
*/ |
||||
|
@ApiOperation("根据用户编号获取授权角色") |
||||
|
@PreAuthorize("@ss.hasPermi('system:user:query')") |
||||
|
@GetMapping("/authRole/{userId}") |
||||
|
public AjaxResult authRole(@PathVariable("userId") Long userId) |
||||
|
{ |
||||
|
AjaxResult ajax = AjaxResult.success(); |
||||
|
SysUser user = userService.selectUserById(userId); |
||||
|
List<SysRole> roles = roleService.selectRolesByUserId(userId); |
||||
|
ajax.put("user", user); |
||||
|
ajax.put("roles", SysUser.isAdmin(userId) ? roles : roles.stream().filter(r -> !r.isAdmin()).collect(Collectors.toList())); |
||||
|
return ajax; |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 用户授权角色 |
||||
|
*/ |
||||
|
@ApiOperation("为用户授权角色") |
||||
|
@PreAuthorize("@ss.hasPermi('system:user:edit')") |
||||
|
@Log(title = "用户管理", businessType = BusinessType.GRANT) |
||||
|
@PutMapping("/authRole") |
||||
|
public AjaxResult insertAuthRole(Long userId, Long[] roleIds) |
||||
|
{ |
||||
|
userService.checkUserDataScope(userId); |
||||
|
userService.insertUserAuth(userId, roleIds); |
||||
|
return success(); |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 获取部门树列表 |
||||
|
*/ |
||||
|
@ApiOperation("获取部门树列表") |
||||
|
@PreAuthorize("@ss.hasPermi('system:user:list')") |
||||
|
@GetMapping("/deptTree") |
||||
|
public AjaxResult deptTree(SysDept dept) |
||||
|
{ |
||||
|
return success(deptService.selectDeptTreeList(dept)); |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 获取终端用户列表 |
||||
|
* @param user 用户信息 |
||||
|
* @return com.fastbee.common.core.page.TableDataInfo |
||||
|
*/ |
||||
|
@ApiOperation("获取用户分页列表") |
||||
|
@PreAuthorize("@ss.hasPermi('system:user:list')") |
||||
|
@GetMapping("/listTerminal") |
||||
|
public TableDataInfo listTerminal(SysUser user) |
||||
|
{ |
||||
|
startPage(); |
||||
|
List<SysUser> list = userService.listTerminal(user); |
||||
|
return getDataTable(list); |
||||
|
} |
||||
|
|
||||
|
|
||||
|
/** |
||||
|
* 根据机构id获取当前用户列表 |
||||
|
*/ |
||||
|
@ApiOperation("根据机构id获取当前用户列表") |
||||
|
@PreAuthorize("@ss.hasPermi('system:user:list')") |
||||
|
@GetMapping("/getByDeptId") |
||||
|
public TableDataInfo getByDeptId() |
||||
|
{ |
||||
|
startPage(); |
||||
|
List<SysUser> list = userService.selectByDeptId(); |
||||
|
return getDataTable(list); |
||||
|
} |
||||
|
|
||||
|
} |
@ -0,0 +1,24 @@ |
|||||
|
package com.fastbee.web.controller.tool; |
||||
|
|
||||
|
import org.springframework.security.access.prepost.PreAuthorize; |
||||
|
import org.springframework.stereotype.Controller; |
||||
|
import org.springframework.web.bind.annotation.GetMapping; |
||||
|
import org.springframework.web.bind.annotation.RequestMapping; |
||||
|
import com.fastbee.common.core.controller.BaseController; |
||||
|
|
||||
|
/** |
||||
|
* swagger 接口 |
||||
|
* |
||||
|
* @author ruoyi |
||||
|
*/ |
||||
|
@Controller |
||||
|
@RequestMapping("/tool/swagger") |
||||
|
public class SwaggerController extends BaseController |
||||
|
{ |
||||
|
@PreAuthorize("@ss.hasPermi('tool:swagger:view')") |
||||
|
@GetMapping() |
||||
|
public String index() |
||||
|
{ |
||||
|
return redirect("/swagger-ui.html"); |
||||
|
} |
||||
|
} |
@ -0,0 +1,185 @@ |
|||||
|
package com.fastbee.web.controller.tool; |
||||
|
|
||||
|
import java.util.ArrayList; |
||||
|
import java.util.LinkedHashMap; |
||||
|
import java.util.List; |
||||
|
import java.util.Map; |
||||
|
import org.springframework.web.bind.annotation.DeleteMapping; |
||||
|
import org.springframework.web.bind.annotation.GetMapping; |
||||
|
import org.springframework.web.bind.annotation.PathVariable; |
||||
|
import org.springframework.web.bind.annotation.PostMapping; |
||||
|
import org.springframework.web.bind.annotation.PutMapping; |
||||
|
import org.springframework.web.bind.annotation.RequestBody; |
||||
|
import org.springframework.web.bind.annotation.RequestMapping; |
||||
|
import org.springframework.web.bind.annotation.RestController; |
||||
|
import com.fastbee.common.core.controller.BaseController; |
||||
|
import com.fastbee.common.core.domain.R; |
||||
|
import com.fastbee.common.utils.StringUtils; |
||||
|
import io.swagger.annotations.Api; |
||||
|
import io.swagger.annotations.ApiImplicitParam; |
||||
|
import io.swagger.annotations.ApiImplicitParams; |
||||
|
import io.swagger.annotations.ApiModel; |
||||
|
import io.swagger.annotations.ApiModelProperty; |
||||
|
import io.swagger.annotations.ApiOperation; |
||||
|
|
||||
|
import javax.annotation.Resource; |
||||
|
|
||||
|
/** |
||||
|
* swagger 用户测试方法 |
||||
|
* |
||||
|
* @author ruoyi |
||||
|
*/ |
||||
|
@Api("swagger 用户测试方法") |
||||
|
@RestController |
||||
|
@RequestMapping("/test/user") |
||||
|
public class TestController extends BaseController |
||||
|
{ |
||||
|
private final static Map<Integer, UserEntity> users = new LinkedHashMap<Integer, UserEntity>(); |
||||
|
{ |
||||
|
users.put(1, new UserEntity(1, "admin", "admin123", "15888888888")); |
||||
|
users.put(2, new UserEntity(2, "ry", "admin123", "15666666666")); |
||||
|
} |
||||
|
|
||||
|
@ApiOperation("获取用户列表") |
||||
|
@GetMapping("/list") |
||||
|
public R<List<UserEntity>> userList() |
||||
|
{ |
||||
|
List<UserEntity> userList = new ArrayList<UserEntity>(users.values()); |
||||
|
return R.ok(userList); |
||||
|
} |
||||
|
|
||||
|
@ApiOperation("获取用户详细") |
||||
|
@ApiImplicitParam(name = "userId", value = "用户ID", required = true, dataType = "int", paramType = "path", dataTypeClass = Integer.class) |
||||
|
@GetMapping("/{userId}") |
||||
|
public R<UserEntity> getUser(@PathVariable Integer userId) |
||||
|
{ |
||||
|
if (!users.isEmpty() && users.containsKey(userId)) |
||||
|
{ |
||||
|
return R.ok(users.get(userId)); |
||||
|
} |
||||
|
else |
||||
|
{ |
||||
|
return R.fail("用户不存在"); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
@ApiOperation("新增用户") |
||||
|
@ApiImplicitParams({ |
||||
|
@ApiImplicitParam(name = "userId", value = "用户id", dataType = "Integer", dataTypeClass = Integer.class), |
||||
|
@ApiImplicitParam(name = "username", value = "用户名称", dataType = "String", dataTypeClass = String.class), |
||||
|
@ApiImplicitParam(name = "password", value = "用户密码", dataType = "String", dataTypeClass = String.class), |
||||
|
@ApiImplicitParam(name = "mobile", value = "用户手机", dataType = "String", dataTypeClass = String.class) |
||||
|
}) |
||||
|
@PostMapping("/save") |
||||
|
public R<String> save(UserEntity user) |
||||
|
{ |
||||
|
if (StringUtils.isNull(user) || StringUtils.isNull(user.getUserId())) |
||||
|
{ |
||||
|
return R.fail("用户ID不能为空"); |
||||
|
} |
||||
|
users.put(user.getUserId(), user); |
||||
|
return R.ok(); |
||||
|
} |
||||
|
|
||||
|
@ApiOperation("更新用户") |
||||
|
@PutMapping("/update") |
||||
|
public R<String> update(@RequestBody UserEntity user) |
||||
|
{ |
||||
|
if (StringUtils.isNull(user) || StringUtils.isNull(user.getUserId())) |
||||
|
{ |
||||
|
return R.fail("用户ID不能为空"); |
||||
|
} |
||||
|
if (users.isEmpty() || !users.containsKey(user.getUserId())) |
||||
|
{ |
||||
|
return R.fail("用户不存在"); |
||||
|
} |
||||
|
users.remove(user.getUserId()); |
||||
|
users.put(user.getUserId(), user); |
||||
|
return R.ok(); |
||||
|
} |
||||
|
|
||||
|
@ApiOperation("删除用户信息") |
||||
|
@ApiImplicitParam(name = "userId", value = "用户ID", required = true, dataType = "int", paramType = "path", dataTypeClass = Integer.class) |
||||
|
@DeleteMapping("/{userId}") |
||||
|
public R<String> delete(@PathVariable Integer userId) |
||||
|
{ |
||||
|
if (!users.isEmpty() && users.containsKey(userId)) |
||||
|
{ |
||||
|
users.remove(userId); |
||||
|
return R.ok(); |
||||
|
} |
||||
|
else |
||||
|
{ |
||||
|
return R.fail("用户不存在"); |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
@ApiModel(value = "UserEntity", description = "用户实体") |
||||
|
class UserEntity |
||||
|
{ |
||||
|
@ApiModelProperty("用户ID") |
||||
|
private Integer userId; |
||||
|
|
||||
|
@ApiModelProperty("用户名称") |
||||
|
private String username; |
||||
|
|
||||
|
@ApiModelProperty("用户密码") |
||||
|
private String password; |
||||
|
|
||||
|
@ApiModelProperty("用户手机") |
||||
|
private String mobile; |
||||
|
|
||||
|
public UserEntity() |
||||
|
{ |
||||
|
|
||||
|
} |
||||
|
|
||||
|
public UserEntity(Integer userId, String username, String password, String mobile) |
||||
|
{ |
||||
|
this.userId = userId; |
||||
|
this.username = username; |
||||
|
this.password = password; |
||||
|
this.mobile = mobile; |
||||
|
} |
||||
|
|
||||
|
public Integer getUserId() |
||||
|
{ |
||||
|
return userId; |
||||
|
} |
||||
|
|
||||
|
public void setUserId(Integer userId) |
||||
|
{ |
||||
|
this.userId = userId; |
||||
|
} |
||||
|
|
||||
|
public String getUsername() |
||||
|
{ |
||||
|
return username; |
||||
|
} |
||||
|
|
||||
|
public void setUsername(String username) |
||||
|
{ |
||||
|
this.username = username; |
||||
|
} |
||||
|
|
||||
|
public String getPassword() |
||||
|
{ |
||||
|
return password; |
||||
|
} |
||||
|
|
||||
|
public void setPassword(String password) |
||||
|
{ |
||||
|
this.password = password; |
||||
|
} |
||||
|
|
||||
|
public String getMobile() |
||||
|
{ |
||||
|
return mobile; |
||||
|
} |
||||
|
|
||||
|
public void setMobile(String mobile) |
||||
|
{ |
||||
|
this.mobile = mobile; |
||||
|
} |
||||
|
} |
@ -0,0 +1,218 @@ |
|||||
|
package com.fastbee.web.controller.tool; |
||||
|
|
||||
|
import com.alibaba.fastjson2.JSON; |
||||
|
import com.fastbee.iot.domain.DeviceJob; |
||||
|
import com.fastbee.iot.domain.DeviceLog; |
||||
|
import com.fastbee.iot.mapper.DeviceJobMapper; |
||||
|
import com.fastbee.iot.mapper.DeviceLogMapper; |
||||
|
import org.springframework.web.bind.annotation.GetMapping; |
||||
|
import org.springframework.web.bind.annotation.RequestMapping; |
||||
|
import org.springframework.web.bind.annotation.RestController; |
||||
|
import javax.annotation.Resource; |
||||
|
import java.util.*; |
||||
|
import java.util.function.Function; |
||||
|
import java.util.stream.Collectors; |
||||
|
import com.fastbee.common.annotation.Anonymous; |
||||
|
import com.fastbee.common.core.domain.ImportExcelVO; |
||||
|
import com.fastbee.common.core.domain.OutputExcelVO; |
||||
|
import com.fastbee.common.utils.StringUtils; |
||||
|
import com.fastbee.common.utils.poi.ExcelUtil; |
||||
|
import com.fastbee.iot.domain.AlertLog; |
||||
|
import com.fastbee.iot.mapper.AlertLogMapper; |
||||
|
import com.fastbee.iot.mapper.DeviceMapper; |
||||
|
import com.fastbee.iot.model.DeviceRelateAlertLogVO; |
||||
|
import org.apache.commons.collections4.CollectionUtils; |
||||
|
import org.springframework.web.bind.annotation.*; |
||||
|
import org.springframework.web.multipart.MultipartFile; |
||||
|
|
||||
|
|
||||
|
/** |
||||
|
* 测试类 |
||||
|
* @author fastb |
||||
|
* @date 2023-09-13 11:42 |
||||
|
*/ |
||||
|
@Anonymous |
||||
|
@RestController |
||||
|
@RequestMapping("/test2") |
||||
|
public class TestController2 { |
||||
|
|
||||
|
@Resource |
||||
|
private AlertLogMapper alertLogMapper; |
||||
|
@Resource |
||||
|
private DeviceMapper deviceMapper; |
||||
|
|
||||
|
@Resource |
||||
|
private DeviceJobMapper deviceJobMapper; |
||||
|
@Resource |
||||
|
private DeviceLogMapper deviceLogMapper; |
||||
|
|
||||
|
@GetMapping("/add") |
||||
|
public void add() |
||||
|
{ |
||||
|
Set<String> deviceNumbers = new HashSet<>(); |
||||
|
deviceNumbers.add("D1PGLPG58K88"); |
||||
|
deviceNumbers.add("D1F0L7P84D8Z"); |
||||
|
deviceNumbers.add("D1F0L7P84D8Z_2"); |
||||
|
List<DeviceRelateAlertLogVO> deviceRelateAlertLogVOList = deviceMapper.selectDeviceBySerialNumbers(deviceNumbers); |
||||
|
Map<String, DeviceRelateAlertLogVO> deviceRelateAlertLogVOMap = deviceRelateAlertLogVOList.stream().collect(Collectors.toMap(DeviceRelateAlertLogVO::getSerialNumber, Function.identity())); |
||||
|
|
||||
|
ArrayList<AlertLog> alertLogList = new ArrayList<>(); |
||||
|
for (String deviceNumber : deviceNumbers) { |
||||
|
AlertLog alertLog = new AlertLog(); |
||||
|
alertLog.setSerialNumber(deviceNumber); |
||||
|
alertLog.setAlertName("温度告警测试"); |
||||
|
alertLog.setAlertLevel(1L); |
||||
|
alertLog.setStatus(1); |
||||
|
alertLog.setProductId(1L); |
||||
|
alertLog.setDetail("111"); |
||||
|
alertLog.setCreateTime(new Date()); |
||||
|
// 添加设备关联信息
|
||||
|
if (deviceRelateAlertLogVOMap.containsKey(deviceNumber)) { |
||||
|
DeviceRelateAlertLogVO deviceRelateAlertLogVO = deviceRelateAlertLogVOMap.get(deviceNumber); |
||||
|
alertLog.setDeviceName(deviceRelateAlertLogVO.getDeviceName()); |
||||
|
alertLog.setUserId(deviceRelateAlertLogVO.getUserId()); |
||||
|
} |
||||
|
alertLogList.add(alertLog); |
||||
|
} |
||||
|
|
||||
|
// 批量插入告警日志
|
||||
|
alertLogMapper.insertAlertLogBatch(alertLogList); |
||||
|
} |
||||
|
|
||||
|
@PostMapping("/handleExcel") |
||||
|
public String handleExcel(@RequestParam("file") MultipartFile file) throws Exception |
||||
|
{ |
||||
|
if (null == file) { |
||||
|
return "导入失败,请先上传文件!"; |
||||
|
} |
||||
|
ExcelUtil<ImportExcelVO> util = new ExcelUtil<>(ImportExcelVO.class); |
||||
|
List<ImportExcelVO> importExcelVOList = util.importExcel(file.getInputStream()); |
||||
|
if (CollectionUtils.isEmpty(importExcelVOList)) { |
||||
|
return "导入失败,模板数据不能为空!"; |
||||
|
} |
||||
|
System.out.println(importExcelVOList.size()); |
||||
|
List<String> oneCityName = new ArrayList<>(); |
||||
|
List<String> twoCityName = new ArrayList<>(); |
||||
|
List<String> threeCityName = new ArrayList<>(); |
||||
|
|
||||
|
List<OutputExcelVO> oneCityList = new ArrayList<>(); |
||||
|
Map<String, List<OutputExcelVO>> twoCityMap = new HashMap<>(2); |
||||
|
Map<String, List<OutputExcelVO>> threeCityMap = new HashMap<>(2); |
||||
|
|
||||
|
for (ImportExcelVO vo : importExcelVOList) { |
||||
|
String city = vo.getCity(); |
||||
|
List<String> cityNameList = StringUtils.str2List(city, "/", true, true); |
||||
|
int size = cityNameList.size(); |
||||
|
if (1 == size) { |
||||
|
String name = cityNameList.get(0); |
||||
|
if (!oneCityName.contains(name)) { |
||||
|
oneCityName.add(name); |
||||
|
OutputExcelVO outputExcelVO = new OutputExcelVO(); |
||||
|
outputExcelVO.setName(name); |
||||
|
outputExcelVO.setCode(vo.getCode()); |
||||
|
outputExcelVO.setLat(vo.getLat()); |
||||
|
outputExcelVO.setLon(vo.getLon()); |
||||
|
oneCityList.add(outputExcelVO); |
||||
|
twoCityMap.put(name, new ArrayList<>()); |
||||
|
} |
||||
|
} else if (2 == size) { |
||||
|
String oneName = cityNameList.get(0); |
||||
|
if (!oneCityName.contains(oneName)) { |
||||
|
oneCityName.add(oneName); |
||||
|
OutputExcelVO outputExcelVO = new OutputExcelVO(); |
||||
|
outputExcelVO.setName(oneName); |
||||
|
oneCityList.add(outputExcelVO); |
||||
|
twoCityMap.put(oneName, new ArrayList<>()); |
||||
|
} |
||||
|
String twoName = cityNameList.get(1); |
||||
|
OutputExcelVO outputExcelVO = new OutputExcelVO(); |
||||
|
outputExcelVO.setName(twoName); |
||||
|
outputExcelVO.setCode(vo.getCode()); |
||||
|
outputExcelVO.setLat(vo.getLat()); |
||||
|
outputExcelVO.setLon(vo.getLon()); |
||||
|
if (!twoCityName.contains(twoName)) { |
||||
|
twoCityName.add(twoName); |
||||
|
List<OutputExcelVO> twoList = twoCityMap.get(oneName); |
||||
|
twoList.add(outputExcelVO); |
||||
|
twoCityMap.put(oneName, twoList); |
||||
|
threeCityMap.put(twoName, new ArrayList<>()); |
||||
|
} |
||||
|
} else if (3 == size) { |
||||
|
String oneName = cityNameList.get(0); |
||||
|
if (!oneCityName.contains(oneName)) { |
||||
|
oneCityName.add(oneName); |
||||
|
OutputExcelVO outputExcelVO = new OutputExcelVO(); |
||||
|
outputExcelVO.setName(oneName); |
||||
|
oneCityList.add(outputExcelVO); |
||||
|
twoCityMap.put(oneName, new ArrayList<>()); |
||||
|
} |
||||
|
String twoName = cityNameList.get(1); |
||||
|
if (!twoCityName.contains(twoName)) { |
||||
|
twoCityName.add(twoName); |
||||
|
OutputExcelVO outputExcelVO = new OutputExcelVO(); |
||||
|
outputExcelVO.setName(twoName); |
||||
|
List<OutputExcelVO> twoList = twoCityMap.get(oneName); |
||||
|
twoList.add(outputExcelVO); |
||||
|
twoCityMap.put(oneName, twoList); |
||||
|
threeCityMap.put(twoName, new ArrayList<>()); |
||||
|
} |
||||
|
String threeName = cityNameList.get(2); |
||||
|
if (!threeCityName.contains(threeName)) { |
||||
|
threeCityName.add(threeName); |
||||
|
OutputExcelVO outputExcelVO = new OutputExcelVO(); |
||||
|
outputExcelVO.setName(threeName); |
||||
|
outputExcelVO.setCode(vo.getCode()); |
||||
|
outputExcelVO.setLat(vo.getLat()); |
||||
|
outputExcelVO.setLon(vo.getLon()); |
||||
|
List<OutputExcelVO> twoList = threeCityMap.get(twoName); |
||||
|
twoList.add(outputExcelVO); |
||||
|
threeCityMap.put(twoName, twoList); |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
int total = 0; |
||||
|
total = total + oneCityList.size(); |
||||
|
for (OutputExcelVO outputExcelVO : oneCityList) { |
||||
|
List<OutputExcelVO> voList = twoCityMap.get(outputExcelVO.getName()); |
||||
|
if (CollectionUtils.isNotEmpty(voList)) { |
||||
|
total = total + voList.size(); |
||||
|
outputExcelVO.setChildren(voList); |
||||
|
for (OutputExcelVO excelVO : voList) { |
||||
|
List<OutputExcelVO> voList1 = threeCityMap.get(excelVO.getName()); |
||||
|
if (CollectionUtils.isNotEmpty(voList1)) { |
||||
|
total = total + voList1.size(); |
||||
|
excelVO.setChildren(voList1); |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
System.out.println(total); |
||||
|
return JSON.toJSONString(oneCityList); |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 计算场景运算型变量的值 |
||||
|
* @param id |
||||
|
* @return java.lang.String |
||||
|
*/ |
||||
|
@GetMapping("/getJobList") |
||||
|
public String getJobList() { |
||||
|
Long[] ids = {1L, 2L}; |
||||
|
List<DeviceJob> deviceJobList = deviceJobMapper.selectListByJobTypeAndDatasourceIds(ids, 3); |
||||
|
return JSON.toJSONString(deviceJobList); |
||||
|
} |
||||
|
|
||||
|
@GetMapping("/getStatsValue") |
||||
|
public String getStatsValue() { |
||||
|
DeviceLog deviceLog = new DeviceLog(); |
||||
|
deviceLog.setLogType(1); |
||||
|
deviceLog.setIdentity("k1"); |
||||
|
deviceLog.setSerialNumber("D10I741UL2P3_1"); |
||||
|
deviceLog.setBeginTime("2024-05-17 00:00:00"); |
||||
|
deviceLog.setEndTime("2024-05-17 23:59:59"); |
||||
|
// deviceLog.setOperation(5);
|
||||
|
List<String> list = deviceLogMapper.selectStatsValue(deviceLog); |
||||
|
return JSON.toJSONString(list); |
||||
|
} |
||||
|
|
||||
|
} |
@ -0,0 +1,125 @@ |
|||||
|
package com.fastbee.web.core.config; |
||||
|
|
||||
|
import java.util.ArrayList; |
||||
|
import java.util.List; |
||||
|
import org.springframework.beans.factory.annotation.Autowired; |
||||
|
import org.springframework.beans.factory.annotation.Value; |
||||
|
import org.springframework.context.annotation.Bean; |
||||
|
import org.springframework.context.annotation.Configuration; |
||||
|
import com.fastbee.common.config.RuoYiConfig; |
||||
|
import io.swagger.annotations.ApiOperation; |
||||
|
import io.swagger.models.auth.In; |
||||
|
import springfox.documentation.builders.ApiInfoBuilder; |
||||
|
import springfox.documentation.builders.PathSelectors; |
||||
|
import springfox.documentation.builders.RequestHandlerSelectors; |
||||
|
import springfox.documentation.service.ApiInfo; |
||||
|
import springfox.documentation.service.ApiKey; |
||||
|
import springfox.documentation.service.AuthorizationScope; |
||||
|
import springfox.documentation.service.Contact; |
||||
|
import springfox.documentation.service.SecurityReference; |
||||
|
import springfox.documentation.service.SecurityScheme; |
||||
|
import springfox.documentation.spi.DocumentationType; |
||||
|
import springfox.documentation.spi.service.contexts.SecurityContext; |
||||
|
import springfox.documentation.spring.web.plugins.Docket; |
||||
|
|
||||
|
/** |
||||
|
* Swagger2的接口配置 |
||||
|
* |
||||
|
* @author ruoyi |
||||
|
*/ |
||||
|
@Configuration |
||||
|
public class SwaggerConfig |
||||
|
{ |
||||
|
/** 系统基础配置 */ |
||||
|
@Autowired |
||||
|
private RuoYiConfig ruoyiConfig; |
||||
|
|
||||
|
/** 是否开启swagger */ |
||||
|
@Value("${swagger.enabled}") |
||||
|
private boolean enabled; |
||||
|
|
||||
|
/** 设置请求的统一前缀 */ |
||||
|
@Value("${swagger.pathMapping}") |
||||
|
private String pathMapping; |
||||
|
|
||||
|
/** |
||||
|
* 创建API |
||||
|
*/ |
||||
|
@Bean |
||||
|
public Docket createRestApi() |
||||
|
{ |
||||
|
return new Docket(DocumentationType.OAS_30) |
||||
|
// 是否启用Swagger
|
||||
|
.enable(enabled) |
||||
|
// 用来创建该API的基本信息,展示在文档的页面中(自定义展示的信息)
|
||||
|
.apiInfo(apiInfo()) |
||||
|
// 设置哪些接口暴露给Swagger展示
|
||||
|
.select() |
||||
|
// 扫描所有有注解的api,用这种方式更灵活
|
||||
|
.apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class)) |
||||
|
// 扫描指定包中的swagger注解
|
||||
|
// .apis(RequestHandlerSelectors.basePackage("com.fastbee.project.tool.swagger"))
|
||||
|
// 扫描所有 .apis(RequestHandlerSelectors.any())
|
||||
|
.paths(PathSelectors.any()) |
||||
|
.build() |
||||
|
/* 设置安全模式,swagger可以设置访问token */ |
||||
|
.securitySchemes(securitySchemes()) |
||||
|
.securityContexts(securityContexts()) |
||||
|
.pathMapping(pathMapping); |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 安全模式,这里指定token通过Authorization头请求头传递 |
||||
|
*/ |
||||
|
private List<SecurityScheme> securitySchemes() |
||||
|
{ |
||||
|
List<SecurityScheme> apiKeyList = new ArrayList<SecurityScheme>(); |
||||
|
apiKeyList.add(new ApiKey("Authorization", "Authorization", In.HEADER.toValue())); |
||||
|
return apiKeyList; |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 安全上下文 |
||||
|
*/ |
||||
|
private List<SecurityContext> securityContexts() |
||||
|
{ |
||||
|
List<SecurityContext> securityContexts = new ArrayList<>(); |
||||
|
securityContexts.add( |
||||
|
SecurityContext.builder() |
||||
|
.securityReferences(defaultAuth()) |
||||
|
.operationSelector(o -> o.requestMappingPattern().matches("/.*")) |
||||
|
.build()); |
||||
|
return securityContexts; |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 默认的安全上引用 |
||||
|
*/ |
||||
|
private List<SecurityReference> defaultAuth() |
||||
|
{ |
||||
|
AuthorizationScope authorizationScope = new AuthorizationScope("global", "accessEverything"); |
||||
|
AuthorizationScope[] authorizationScopes = new AuthorizationScope[1]; |
||||
|
authorizationScopes[0] = authorizationScope; |
||||
|
List<SecurityReference> securityReferences = new ArrayList<>(); |
||||
|
securityReferences.add(new SecurityReference("Authorization", authorizationScopes)); |
||||
|
return securityReferences; |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 添加摘要信息 |
||||
|
*/ |
||||
|
private ApiInfo apiInfo() |
||||
|
{ |
||||
|
// 用ApiInfoBuilder进行定制
|
||||
|
return new ApiInfoBuilder() |
||||
|
// 设置标题
|
||||
|
.title("FastBee物联网平台接口文档") |
||||
|
// 描述
|
||||
|
.description("描述:FastBee物联网平台") |
||||
|
// 作者信息
|
||||
|
.contact(new Contact(ruoyiConfig.getName(), null, null)) |
||||
|
// 版本
|
||||
|
.version("版本号:" + ruoyiConfig.getVersion()) |
||||
|
.build(); |
||||
|
} |
||||
|
} |
@ -0,0 +1 @@ |
|||||
|
restart.include.json=/com.alibaba.fastjson2.*.jar |
@ -0,0 +1,76 @@ |
|||||
|
# 数据源配置 |
||||
|
spring: |
||||
|
datasource: |
||||
|
dynamic: |
||||
|
primary: master |
||||
|
strict: false |
||||
|
datasource: |
||||
|
master: |
||||
|
type: com.alibaba.druid.pool.DruidDataSource |
||||
|
driver-class-name: com.mysql.cj.jdbc.Driver |
||||
|
url: jdbc:mysql://127.0.0.1:3306/fastbee?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8 |
||||
|
username: root |
||||
|
password: root |
||||
|
|
||||
|
sharding: |
||||
|
url: jdbc:shardingsphere:classpath:sharding-sphere-config.yaml |
||||
|
driver-class-name: org.apache.shardingsphere.driver.ShardingSphereDriver |
||||
|
taos: # 配置 taos 数据源 |
||||
|
enabled: true |
||||
|
type: com.alibaba.druid.pool.DruidDataSource |
||||
|
driver-class-name: com.taosdata.jdbc.TSDBDriver |
||||
|
url: jdbc:TAOS://127.0.0.1:6030/fastbee_log?timezone=UTC-8&charset=utf-8 |
||||
|
username: root |
||||
|
password: taosdata |
||||
|
dbName: fastbee_log |
||||
|
|
||||
|
# redis 配置 |
||||
|
redis: |
||||
|
host: 127.0.0.1 # 地址 |
||||
|
port: 6379 # 端口,默认为6379 |
||||
|
database: 0 # 数据库索引 |
||||
|
# password: fastbee # 密码 |
||||
|
timeout: 10s # 连接超时时间 |
||||
|
lettuce: |
||||
|
pool: |
||||
|
min-idle: 0 # 连接池中的最小空闲连接 |
||||
|
max-idle: 8 # 连接池中的最大空闲连接 |
||||
|
max-active: 8 # 连接池的最大数据库连接数 |
||||
|
max-wait: -1ms # 连接池最大阻塞等待时间(使用负值表示没有限制) |
||||
|
# mqtt 配置 |
||||
|
mqtt: |
||||
|
username: admin # 账号 |
||||
|
password: public # 密码 |
||||
|
host-url: tcp://127.0.0.1:1883 # mqtt连接tcp地址 |
||||
|
client-id: ${random.int} # 客户端Id,不能相同,采用随机数 ${random.value} |
||||
|
default-topic: test # 默认主题 |
||||
|
timeout: 30 # 超时时间 |
||||
|
keepalive: 30 # 保持连接 |
||||
|
clearSession: true # 清除会话(设置为false,断开连接,重连后使用原来的会话 保留订阅的主题,能接收离线期间的消息) |
||||
|
|
||||
|
# sip 配置 |
||||
|
sip: |
||||
|
enabled: true # 是否启用视频监控SIP,true为启用 |
||||
|
## 本地调试时,绑定网卡局域网IP,设备在同一局域网,设备接入IP填写绑定IP |
||||
|
## 部署服务端时,默认绑定容器IP,设备接入IP填写服务器公网IP |
||||
|
ip: 127.0.0.1 |
||||
|
port: 5061 # SIP端口(保持默认) |
||||
|
domain: 3402000000 # 由省级、市级、区级、基层编号组成 |
||||
|
id: 34020000002000000001 # 同上,另外增加编号,(可保持默认) |
||||
|
password: 12345678 # 监控设备接入的密码 |
||||
|
log: true |
||||
|
zlmRecordPath: /opt/media/bin/www |
||||
|
|
||||
|
# 日志配置 |
||||
|
logging: |
||||
|
level: |
||||
|
com.fastbee: debug |
||||
|
com.yomahub: debug |
||||
|
org.dromara: warn |
||||
|
org.springframework: warn |
||||
|
|
||||
|
# Swagger配置 |
||||
|
swagger: |
||||
|
enabled: true # 是否开启swagger |
||||
|
pathMapping: /dev-api # 请求前缀 |
||||
|
|
@ -0,0 +1,91 @@ |
|||||
|
# 数据源配置 |
||||
|
spring: |
||||
|
datasource: |
||||
|
dynamic: |
||||
|
primary: master |
||||
|
strict: false |
||||
|
datasource: |
||||
|
master: |
||||
|
type: com.alibaba.druid.pool.DruidDataSource |
||||
|
driver-class-name: com.mysql.cj.jdbc.Driver |
||||
|
url: jdbc:mysql://177.7.0.11:3306/fastbee?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8 |
||||
|
username: root |
||||
|
password: fastbee |
||||
|
filters: stat,wall |
||||
|
filter: |
||||
|
stat: |
||||
|
enabled: true |
||||
|
# 慢SQL记录 |
||||
|
log-slow-sql: true |
||||
|
slow-sql-millis: 1000 |
||||
|
merge-sql: true |
||||
|
wall: |
||||
|
config: |
||||
|
multi-statement-allow: true |
||||
|
# slave: |
||||
|
# type: com.alibaba.druid.pool.DruidDataSource |
||||
|
# driver-class-name: com.mysql.cj.jdbc.Driver |
||||
|
# url: jdbc:mysql://localhost:3306/fastbee1?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8 |
||||
|
# username: root |
||||
|
# password: fastbee |
||||
|
sharding: |
||||
|
url: jdbc:shardingsphere:classpath:sharding-sphere-config.yaml |
||||
|
driver-class-name: org.apache.shardingsphere.driver.ShardingSphereDriver |
||||
|
taos: # 配置 taos 数据源 |
||||
|
enabled: true |
||||
|
type: com.alibaba.druid.pool.DruidDataSource |
||||
|
driver-class-name: com.taosdata.jdbc.TSDBDriver |
||||
|
url: jdbc:TAOS://fastbee:6030/fastbee_log?timezone=UTC-8&charset=utf-8 |
||||
|
username: root |
||||
|
password: taosdata |
||||
|
dbName: fastbee_log |
||||
|
# redis 配置 |
||||
|
redis: |
||||
|
host: 177.7.0.10 # 地址 |
||||
|
port: 6379 # 端口,默认为6379 |
||||
|
database: 0 # 数据库索引 |
||||
|
password: fastbee # 密码 |
||||
|
timeout: 10s # 连接超时时间 |
||||
|
lettuce: |
||||
|
pool: |
||||
|
min-idle: 0 # 连接池中的最小空闲连接 |
||||
|
max-idle: 8 # 连接池中的最大空闲连接 |
||||
|
max-active: 8 # 连接池的最大数据库连接数 |
||||
|
max-wait: -1ms # 连接池最大阻塞等待时间(使用负值表示没有限制) |
||||
|
# mqtt 配置 |
||||
|
mqtt: |
||||
|
username: fastbee # 账号(仅用于后端自认证) |
||||
|
password: fastbee # 密码(仅用于后端自认证) |
||||
|
host-url: tcp://177.7.0.12:1883 # 连接 Emqx 消息服务器地址 |
||||
|
# host-url: tcp://177.7.0.13:1883 # 内置netty mqtt broker地址 |
||||
|
client-id: ${random.int} # 客户端Id,不能相同,采用随机数 ${random.value} |
||||
|
default-topic: test # 默认主题 |
||||
|
timeout: 30 # 超时时间 |
||||
|
keepalive: 30 # 保持连接 |
||||
|
clearSession: true # 清除会话(设置为false,断开连接,重连后使用原来的会话 保留订阅的主题,能接收离线期间的消息) |
||||
|
|
||||
|
# sip 配置 |
||||
|
sip: |
||||
|
enabled: true # 是否启用视频监控SIP,true为启用 |
||||
|
## 本地调试时,绑定网卡局域网IP,设备在同一局域网,设备接入IP填写绑定IP |
||||
|
## 部署服务端时,默认绑定容器IP,设备接入IP填写服务器公网IP |
||||
|
ip: 177.7.0.13 |
||||
|
port: 5061 # SIP端口(保持默认) |
||||
|
domain: 3402000000 # 由省级、市级、区级、基层编号组成 |
||||
|
id: 34020000002000000001 # 同上,另外增加编号,(可保持默认) |
||||
|
password: 12345678 # 监控设备接入的密码 |
||||
|
log: false |
||||
|
zlmRecordPath: /opt/media/bin/www |
||||
|
|
||||
|
# 日志配置 |
||||
|
logging: |
||||
|
level: |
||||
|
com.fastbee: debug |
||||
|
com.yomahub: warn |
||||
|
org.dromara: warn |
||||
|
org.springframework: warn |
||||
|
|
||||
|
# Swagger配置 |
||||
|
swagger: |
||||
|
enabled: true # 是否开启swagger |
||||
|
pathMapping: /prod-api # 请求前缀 |
@ -0,0 +1,91 @@ |
|||||
|
# 数据源配置 |
||||
|
spring: |
||||
|
datasource: |
||||
|
dynamic: |
||||
|
primary: master |
||||
|
strict: false |
||||
|
datasource: |
||||
|
master: |
||||
|
type: com.alibaba.druid.pool.DruidDataSource |
||||
|
driver-class-name: com.mysql.cj.jdbc.Driver |
||||
|
url: jdbc:mysql://localhost:3306/fastbee?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8 |
||||
|
username: root |
||||
|
password: fastbee |
||||
|
filters: stat,wall |
||||
|
filter: |
||||
|
stat: |
||||
|
enabled: true |
||||
|
# 慢SQL记录 |
||||
|
log-slow-sql: true |
||||
|
slow-sql-millis: 1000 |
||||
|
merge-sql: true |
||||
|
wall: |
||||
|
config: |
||||
|
multi-statement-allow: true |
||||
|
# slave: |
||||
|
# type: com.alibaba.druid.pool.DruidDataSource |
||||
|
# driver-class-name: com.mysql.cj.jdbc.Driver |
||||
|
# url: jdbc:mysql://localhost:3306/fastbee1?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8 |
||||
|
# username: root |
||||
|
# password: fastbee |
||||
|
sharding: |
||||
|
url: jdbc:shardingsphere:classpath:sharding-sphere-config.yaml |
||||
|
driver-class-name: org.apache.shardingsphere.driver.ShardingSphereDriver |
||||
|
taos: # 配置 taos 数据源 |
||||
|
enabled: true |
||||
|
type: com.alibaba.druid.pool.DruidDataSource |
||||
|
driver-class-name: com.taosdata.jdbc.TSDBDriver |
||||
|
url: jdbc:TAOS://fastbee:6030/fastbee_log?timezone=UTC-8&charset=utf-8 |
||||
|
username: root |
||||
|
password: taosdata |
||||
|
dbName: fastbee_log |
||||
|
# redis 配置 |
||||
|
redis: |
||||
|
host: localhost # 地址 |
||||
|
port: 6379 # 端口,默认为6379 |
||||
|
database: 3 # 数据库索引 |
||||
|
password: fastbee # 密码 |
||||
|
timeout: 10s # 连接超时时间 |
||||
|
lettuce: |
||||
|
pool: |
||||
|
min-idle: 0 # 连接池中的最小空闲连接 |
||||
|
max-idle: 8 # 连接池中的最大空闲连接 |
||||
|
max-active: 8 # 连接池的最大数据库连接数 |
||||
|
max-wait: -1ms # 连接池最大阻塞等待时间(使用负值表示没有限制) |
||||
|
# mqtt 配置 |
||||
|
mqtt: |
||||
|
username: fastbee # 账号 |
||||
|
password: fastbee # 密码 |
||||
|
host-url: tcp://localhost:1883 # mqtt连接tcp地址 |
||||
|
client-id: ${random.int} # 客户端Id,不能相同,采用随机数 ${random.value} |
||||
|
default-topic: test # 默认主题 |
||||
|
timeout: 30 # 超时时间 |
||||
|
keepalive: 30 # 保持连接 |
||||
|
clearSession: true # 清除会话(设置为false,断开连接,重连后使用原来的会话 保留订阅的主题,能接收离线期间的消息) |
||||
|
|
||||
|
# sip 配置 |
||||
|
sip: |
||||
|
enabled: true # 是否启用视频监控SIP,true为启用 |
||||
|
## 默认为容器IP,IDE启动可以写本地网卡内网IP或者127.0.0.1 |
||||
|
## 本地调试需保持设备与服务器在同一局域网 |
||||
|
ip: 192.168.31.165 |
||||
|
port: 5061 # SIP端口(保持默认) |
||||
|
domain: 3402000000 # 由省级、市级、区级、基层编号组成 |
||||
|
id: 34020000002000000001 # 同上,另外增加编号,(可保持默认) |
||||
|
password: 12345678 # 监控设备接入的密码 |
||||
|
log: true |
||||
|
zlmRecordPath: /opt/media/bin/www |
||||
|
|
||||
|
# 日志配置 |
||||
|
logging: |
||||
|
level: |
||||
|
com.fastbee: debug |
||||
|
com.yomahub: debug |
||||
|
org.dromara: warn |
||||
|
org.springframework: warn |
||||
|
|
||||
|
# Swagger配置 |
||||
|
swagger: |
||||
|
enabled: true # 是否开启swagger |
||||
|
pathMapping: /dev-api # 请求前缀 |
||||
|
|
@ -0,0 +1,213 @@ |
|||||
|
# 项目相关配置 |
||||
|
fastbee: |
||||
|
name: iot-platform # 名称 |
||||
|
version: 1.0.0 # 版本 |
||||
|
copyrightYear: 2025 # 版权年份 |
||||
|
demoEnabled: false # 实例演示开关 |
||||
|
# 文件路径,以uploadPath结尾 示例( Windows配置 D:/uploadPath,Linux配置 /uploadPath) |
||||
|
profile: D:/uploadPath |
||||
|
addressEnabled: true # 获取ip地址开关 |
||||
|
captchaType: math # 验证码类型 math 数组计算 char 字符验证 |
||||
|
|
||||
|
# 开发环境配置 |
||||
|
server: |
||||
|
port: 8080 # 服务器的HTTP端口,默认为8080 |
||||
|
servlet: |
||||
|
context-path: / # 应用的访问路径 |
||||
|
tomcat: |
||||
|
uri-encoding: UTF-8 # tomcat的URI编码 |
||||
|
accept-count: 1000 # 连接数满后的排队数,默认为100 |
||||
|
threads: |
||||
|
max: 800 # tomcat最大线程数,默认为200 |
||||
|
min-spare: 100 # Tomcat启动初始化的线程数,默认值10 |
||||
|
# 基于netty的服务器 |
||||
|
broker: |
||||
|
enabled: false # mqttBroker类型选择, true: 基于netty的mqttBroker和webSocket false: emq的mqttBroker |
||||
|
port: 1883 |
||||
|
websocket-port: 8083 |
||||
|
websocket-path: /mqtt |
||||
|
keep-alive: 70 # 默认的全部客户端心跳上传时间 |
||||
|
#TCP服务端口 |
||||
|
tcp: |
||||
|
enabled: true # 控制tcp端口是否开启 |
||||
|
port: 8888 |
||||
|
keep-alive: 70 |
||||
|
delimiter: 0x7e |
||||
|
udp: |
||||
|
enabled: false # 控制udp端口是否开启 |
||||
|
port: 8889 |
||||
|
read-idle: 300 # udp保活时间 默认5分钟 |
||||
|
http: |
||||
|
enabled: false |
||||
|
port: 8081 |
||||
|
auth: |
||||
|
type: Basic # 支持Basic,Digest |
||||
|
user: |
||||
|
name: fastbee |
||||
|
password: fastbee |
||||
|
coap: |
||||
|
enabled: false |
||||
|
port: 5683 |
||||
|
|
||||
|
# Spring配置 |
||||
|
spring: |
||||
|
# 环境配置,dev=开发环境,prod=生产环境 |
||||
|
profiles: |
||||
|
active: dev # 环境配置,dev=开发环境,prod=生产环境 |
||||
|
# 资源信息 |
||||
|
messages: |
||||
|
# 国际化资源文件路径 |
||||
|
basename: i18n/messages |
||||
|
# 文件上传 |
||||
|
servlet: |
||||
|
multipart: |
||||
|
max-file-size: 10MB # 单个文件大小 |
||||
|
max-request-size: 20MB # 设置总上传的文件大小 |
||||
|
# 服务模块 |
||||
|
devtools: |
||||
|
restart: |
||||
|
enabled: true # 热部署开关 |
||||
|
task: |
||||
|
execution: |
||||
|
pool: |
||||
|
core-size: 20 # 最小连接数 |
||||
|
max-size: 200 # 最大连接数 |
||||
|
queue-capacity: 3000 # 最大容量 |
||||
|
keep-alive: 60 |
||||
|
# 缓存配置 |
||||
|
cache: |
||||
|
enable: false |
||||
|
type: none # none=不使用缓存 redis=使用redis缓存 |
||||
|
ttl: 1800 # 缓存过期时间(默认60秒) |
||||
|
datasource: |
||||
|
druid: |
||||
|
webStatFilter: |
||||
|
enabled: true |
||||
|
stat-view-servlet: |
||||
|
enabled: true |
||||
|
allow: |
||||
|
url-pattern: /druid/* |
||||
|
loginUsername: fastbee |
||||
|
loginPassword: fastbee |
||||
|
|
||||
|
# 用户配置 |
||||
|
user: |
||||
|
password: |
||||
|
maxRetryCount: 5 # 密码最大错误次数 |
||||
|
lockTime: 10 # 密码锁定时间(默认10分钟) |
||||
|
|
||||
|
# token配置 |
||||
|
token: |
||||
|
header: Authorization # 令牌自定义标识 |
||||
|
secret: abcdefghijklfastbeesmartrstuvwxyz # 令牌密钥 |
||||
|
expireTime: 1440 # 令牌有效期(默认30分钟)1440为一天 |
||||
|
|
||||
|
# MyBatis配置 |
||||
|
#mybatis: |
||||
|
# typeAliasesPackage: com.fastbee.**.domain # 搜索指定包别名 |
||||
|
# mapperLocations: classpath*:mapper/**/*Mapper.xml # 配置mapper的扫描,找到所有的mapper.xml映射文件 |
||||
|
# configLocation: classpath:mybatis/mybatis-config.xml # 加载全局的配置文件 |
||||
|
|
||||
|
# mybatis-plus配置 |
||||
|
mybatis-plus: |
||||
|
typeAliasesPackage: com.fastbee.**.domain # 搜索指定包别名 |
||||
|
mapperLocations: classpath*:mapper/**/*Mapper.xml # 配置mapper的扫描,找到所有的mapper.xml映射文件 |
||||
|
configLocation: classpath:mybatis/mybatis-config.xml # 加载全局的配置文件 |
||||
|
global-config: |
||||
|
db-config: |
||||
|
id-type: AUTO # 自增 ID |
||||
|
logic-delete-value: 1 # 逻辑已删除值(默认为 1) |
||||
|
logic-not-delete-value: 0 # 逻辑未删除值(默认为 0) |
||||
|
|
||||
|
# PageHelper分页插件 |
||||
|
pagehelper: |
||||
|
helperDialect: mysql |
||||
|
supportMethodsArguments: true |
||||
|
params: count=countSql |
||||
|
|
||||
|
# 防止XSS攻击 |
||||
|
xss: |
||||
|
enabled: true # 过滤开关 |
||||
|
excludes: /system/notice # 排除链接(多个用逗号分隔) |
||||
|
urlPatterns: /system/*,/monitor/*,/tool/* # 匹配链接 |
||||
|
|
||||
|
# EMQX API配置需要在运行emqx之后去EMQX管理后台手动创建API Key和Secret,并配置到application.yml中 |
||||
|
emqx: |
||||
|
host: localhost # EMQX服务器地址 |
||||
|
port: 18083 |
||||
|
ApiKey: ApiKey # EMQX API Key |
||||
|
ApiSecret: ApiSecret # EMQX API Secret |
||||
|
|
||||
|
# redisson 配置 |
||||
|
redisson: |
||||
|
# redis key前缀 |
||||
|
keyPrefix: sql_cache |
||||
|
# 线程池数量 |
||||
|
threads: 16 |
||||
|
# Netty线程池数量 |
||||
|
nettyThreads: 32 |
||||
|
# 单节点配置 |
||||
|
singleServerConfig: |
||||
|
# 客户端名称 |
||||
|
clientName: ${fastbee.name} |
||||
|
# 最小空闲连接数 |
||||
|
connectionMinimumIdleSize: 32 |
||||
|
# 连接池大小 |
||||
|
connectionPoolSize: 64 |
||||
|
# 连接空闲超时,单位:毫秒 |
||||
|
idleConnectionTimeout: 10000 |
||||
|
# 命令等待超时,单位:毫秒 |
||||
|
timeout: 3000 |
||||
|
# 发布和订阅连接池大小 |
||||
|
subscriptionConnectionPoolSize: 50 |
||||
|
|
||||
|
forest: # Forest配置 版本为1.5.36 |
||||
|
backend: okhttp3 # 后端HTTP框架(默认为 okhttp3) |
||||
|
max-connections: 1000 # 连接池最大连接数(默认为 500) |
||||
|
max-route-connections: 500 # 每个路由的最大连接数(默认为 500) |
||||
|
max-request-queue-size: 100 # [自v1.5.22版本起可用] 最大请求等待队列大小 |
||||
|
max-async-thread-size: 300 # [自v1.5.21版本起可用] 最大异步线程数 |
||||
|
max-async-queue-size: 16 # [自v1.5.22版本起可用] 最大异步线程池队列大小 |
||||
|
connect-timeout: 3000 # 连接超时时间,单位为毫秒(默认为 timeout) |
||||
|
read-timeout: 3000 # 数据读取超时时间,单位为毫秒(默认为 timeout) |
||||
|
max-retry-count: 0 # 请求失败后重试次数(默认为 0 次不重试) |
||||
|
ssl-protocol: TLS # 单向验证的HTTPS的默认TLS协议(默认为 TLS) |
||||
|
log-enabled: true # 打开或关闭日志(默认为 true) |
||||
|
log-request: true # 打开/关闭Forest请求日志(默认为 true) |
||||
|
log-response-status: true # 打开/关闭Forest响应状态日志(默认为 true) |
||||
|
log-response-content: true # 打开/关闭Forest响应内容日志(默认为 false) |
||||
|
async-mode: platform # [自v1.5.27版本起可用] 异步模式(默认为 platform) |
||||
|
|
||||
|
liteflow: |
||||
|
#FlowExecutor的execute2Future的线程数,默认为64 |
||||
|
main-executor-works: 64 |
||||
|
#FlowExecutor的execute2Future的自定义线程池Builder |
||||
|
main-executor-class: com.fastbee.ruleEngine.config.MainExecutorBuilder |
||||
|
#并行节点的线程池Builder |
||||
|
thread-executor-class: com.fastbee.ruleEngine.config.WhenExecutorBuilder |
||||
|
rule-source-ext-data-map: |
||||
|
# 应用名称,规则链和脚本组件名称需要一致,不要修改 |
||||
|
applicationName: fastbee |
||||
|
#是否开启SQL日志 |
||||
|
sqlLogEnabled: true |
||||
|
# 规则多时,启用快速加载模式 |
||||
|
fast-load: false |
||||
|
#是否开启SQL数据轮询自动刷新机制 默认不开启 |
||||
|
pollingEnabled: false |
||||
|
pollingIntervalSeconds: 60 |
||||
|
pollingStartSeconds: 60 |
||||
|
#以下是chain表的配置 |
||||
|
chainTableName: iot_scene |
||||
|
chainApplicationNameField: application_name |
||||
|
chainNameField: chain_name |
||||
|
elDataField: el_data |
||||
|
chainEnableField: enable |
||||
|
#以下是script表的配置 |
||||
|
scriptTableName: iot_script |
||||
|
scriptApplicationNameField: application_name |
||||
|
scriptIdField: script_id |
||||
|
scriptNameField: script_name |
||||
|
scriptDataField: script_data |
||||
|
scriptTypeField: script_type |
||||
|
scriptLanguageField: script_language |
||||
|
scriptEnableField: enable |
@ -0,0 +1,2 @@ |
|||||
|
Application Version: ${fastbee.version} |
||||
|
Spring Boot Version: ${spring-boot.version} |
@ -0,0 +1,210 @@ |
|||||
|
#\u9519\u8BEF\u6D88\u606F |
||||
|
not.null=* \u5FC5\u987B\u586B\u5199 |
||||
|
user.jcaptcha.error=\u9A8C\u8BC1\u7801\u9519\u8BEF |
||||
|
user.jcaptcha.expire=\u9A8C\u8BC1\u7801\u5DF2\u5931\u6548 |
||||
|
user.not.exists=\u7528\u6237\u4E0D\u5B58\u5728/\u5BC6\u7801\u9519\u8BEF |
||||
|
user.password.not.match=\u7528\u6237\u4E0D\u5B58\u5728/\u5BC6\u7801\u9519\u8BEF |
||||
|
user.password.retry.limit.count=\u5BC6\u7801\u8F93\u5165\u9519\u8BEF{0}\u6B21 |
||||
|
user.password.retry.limit.exceed=\u5BC6\u7801\u8F93\u5165\u9519\u8BEF{0}\u6B21\uFF0C\u5E10\u6237\u9501\u5B9A{1}\u5206\u949F |
||||
|
user.password.delete=\u5BF9\u4E0D\u8D77\uFF0C\u60A8\u7684\u8D26\u53F7\u5DF2\u88AB\u5220\u9664 |
||||
|
user.blocked=\u7528\u6237\u5DF2\u5C01\u7981\uFF0C\u8BF7\u8054\u7CFB\u7BA1\u7406\u5458 |
||||
|
role.blocked=\u89D2\u8272\u5DF2\u5C01\u7981\uFF0C\u8BF7\u8054\u7CFB\u7BA1\u7406\u5458 |
||||
|
user.logout.success=\u9000\u51FA\u6210\u529F |
||||
|
|
||||
|
length.not.valid=\u957F\u5EA6\u5FC5\u987B\u5728{min}\u5230{max}\u4E2A\u5B57\u7B26\u4E4B\u95F4 |
||||
|
|
||||
|
user.username.not.valid=* 2\u523020\u4E2A\u6C49\u5B57\u3001\u5B57\u6BCD\u3001\u6570\u5B57\u6216\u4E0B\u5212\u7EBF\u7EC4\u6210\uFF0C\u4E14\u5FC5\u987B\u4EE5\u975E\u6570\u5B57\u5F00\u5934 |
||||
|
user.password.not.valid=* 5-50\u4E2A\u5B57\u7B26 |
||||
|
|
||||
|
user.email.not.valid=\u90AE\u7BB1\u683C\u5F0F\u9519\u8BEF |
||||
|
user.mobile.phone.number.not.valid=\u624B\u673A\u53F7\u683C\u5F0F\u9519\u8BEF |
||||
|
user.login.success=\u767B\u5F55\u6210\u529F |
||||
|
user.register.success=\u6CE8\u518C\u6210\u529F |
||||
|
user.notfound=\u8BF7\u91CD\u65B0\u767B\u5F55 |
||||
|
user.forcelogout=\u7BA1\u7406\u5458\u5F3A\u5236\u9000\u51FA\uFF0C\u8BF7\u91CD\u65B0\u767B\u5F55 |
||||
|
user.unknown.error=\u672A\u77E5\u9519\u8BEF\uFF0C\u8BF7\u91CD\u65B0\u767B\u5F55 |
||||
|
|
||||
|
##\u6743\u9650 |
||||
|
no.permission=\u60A8\u6CA1\u6709\u6570\u636E\u7684\u6743\u9650\uFF0C\u8BF7\u8054\u7CFB\u7BA1\u7406\u5458\u6DFB\u52A0\u6743\u9650 [{0}] |
||||
|
no.create.permission=\u60A8\u6CA1\u6709\u521B\u5EFA\u6570\u636E\u7684\u6743\u9650\uFF0C\u8BF7\u8054\u7CFB\u7BA1\u7406\u5458\u6DFB\u52A0\u6743\u9650 [{0}] |
||||
|
no.update.permission=\u60A8\u6CA1\u6709\u4FEE\u6539\u6570\u636E\u7684\u6743\u9650\uFF0C\u8BF7\u8054\u7CFB\u7BA1\u7406\u5458\u6DFB\u52A0\u6743\u9650 [{0}] |
||||
|
no.delete.permission=\u60A8\u6CA1\u6709\u5220\u9664\u6570\u636E\u7684\u6743\u9650\uFF0C\u8BF7\u8054\u7CFB\u7BA1\u7406\u5458\u6DFB\u52A0\u6743\u9650 [{0}] |
||||
|
no.export.permission=\u60A8\u6CA1\u6709\u5BFC\u51FA\u6570\u636E\u7684\u6743\u9650\uFF0C\u8BF7\u8054\u7CFB\u7BA1\u7406\u5458\u6DFB\u52A0\u6743\u9650 [{0}] |
||||
|
no.view.permission=\u60A8\u6CA1\u6709\u67E5\u770B\u6570\u636E\u7684\u6743\u9650\uFF0C\u8BF7\u8054\u7CFB\u7BA1\u7406\u5458\u6DFB\u52A0\u6743\u9650 [{0}] |
||||
|
|
||||
|
##\u6587\u4EF6\u4E0A\u4F20\u6D88\u606F |
||||
|
upload.exceed.maxSize=\u4E0A\u4F20\u7684\u6587\u4EF6\u5927\u5C0F\u8D85\u51FA\u9650\u5236\u7684\u6587\u4EF6\u5927\u5C0F\uFF01<br/>\u5141\u8BB8\u7684\u6587\u4EF6\u6700\u5927\u5927\u5C0F\u662F\uFF1A{0}MB\uFF01 |
||||
|
upload.filename.exceed.length=\u4E0A\u4F20\u7684\u6587\u4EF6\u540D\u6700\u957F{0}\u4E2A\u5B57\u7B26 |
||||
|
upload.success=\u4E0A\u4F20\u6210\u529F |
||||
|
|
||||
|
##\u6587\u4EF6\u4E0B\u8F7D\u6D88\u606F |
||||
|
download.filename.not.valid=\u6587\u4EF6\u540D\u79F0[{}]\u975E\u6CD5\uFF0C\u4E0D\u5141\u8BB8\u4E0B\u8F7D |
||||
|
download.file.failed=\u4E0B\u8F7D\u6587\u4EF6\u5931\u8D25 |
||||
|
download.resource.not.valid=\u8D44\u6E90\u6587\u4EF6[{}]\u975E\u6CD5\uFF0C\u4E0D\u5141\u8BB8\u4E0B\u8F7D |
||||
|
|
||||
|
##Dept |
||||
|
dept.add.failed.name.exists=\u65B0\u589E\u673A\u6784[{}]\u5931\u8D25\uFF0C\u673A\u6784\u540D\u79F0\u5DF2\u5B58\u5728 |
||||
|
dept.update.failed.name.exists=\u4FEE\u6539\u673A\u6784[{}]\u5931\u8D25\uFF0C\u673A\u6784\u540D\u79F0\u5DF2\u5B58\u5728 |
||||
|
dept.update.failed.parent.not.valid=\u4FEE\u6539\u673A\u6784[{}]\u5931\u8D25\uFF0C\u4E0A\u7EA7\u673A\u6784\u4E0D\u80FD\u662F\u81EA\u5DF1 |
||||
|
dept.update.failed.child.not.valid=\u8BE5\u673A\u6784\u5305\u542B\u672A\u505C\u7528\u7684\u5B50\u673A\u6784\uFF01 |
||||
|
dept.delete.failed.child.exists=\u5B58\u5728\u4E0B\u7EA7\u673A\u6784\uFF0C\u4E0D\u5141\u8BB8\u5220\u9664 |
||||
|
dept.delete.failed.user.exists=\u673A\u6784\u5B58\u5728\u7528\u6237\uFF0C\u4E0D\u5141\u8BB8\u5220\u9664 |
||||
|
|
||||
|
##Dict |
||||
|
dict.add.failed.type.exists=\u65B0\u589E\u5B57\u5178[{}]\u5931\u8D25\uFF0C\u5B57\u5178\u7C7B\u578B\u5DF2\u5B58\u5728 |
||||
|
dict.update.failed.type.exists=\u65B0\u589E\u5B57\u5178[{}]\u5931\u8D25\uFF0C\u5B57\u5178\u7C7B\u578B\u5DF2\u5B58\u5728 |
||||
|
|
||||
|
##Index |
||||
|
index.welcome.message=\u6B22\u8FCE\u4F7F\u7528{}\u540E\u53F0\u7BA1\u7406\u6846\u67B6\uFF0C\u5F53\u524D\u7248\u672C\uFF1Av{}\uFF0C\u8BF7\u901A\u8FC7\u524D\u7AEF\u5730\u5740\u8BBF\u95EE\u3002 |
||||
|
|
||||
|
##Menu |
||||
|
menu.add.failed.name.exists=\u65B0\u589E\u83DC\u5355[{}]\u5931\u8D25\uFF0C\u83DC\u5355\u540D\u79F0\u5DF2\u5B58\u5728 |
||||
|
menu.add.failed.path.not.valid=\u65B0\u589E\u83DC\u5355[{}]\u5931\u8D25\uFF0C\u5730\u5740\u5FC5\u987B\u4EE5http(s)://\u5F00\u5934 |
||||
|
menu.update.failed.name.exists=\u4FEE\u6539\u83DC\u5355[{}]\u5931\u8D25\uFF0C\u83DC\u5355\u540D\u79F0\u5DF2\u5B58\u5728 |
||||
|
menu.update.failed.path.not.valid=\u4FEE\u6539\u83DC\u5355[{}]\u5931\u8D25\uFF0C\u5730\u5740\u5FC5\u987B\u4EE5http(s)://\u5F00\u5934 |
||||
|
menu.update.failed.parent.not.valid=\u4FEE\u6539\u83DC\u5355[{}]\u5931\u8D25\uFF0C\u4E0A\u7EA7\u83DC\u5355\u4E0D\u80FD\u9009\u62E9\u81EA\u5DF1 |
||||
|
menu.delete.failed.child.exists=\u5B58\u5728\u5B50\u83DC\u5355,\u4E0D\u5141\u8BB8\u5220\u9664 |
||||
|
menu.delete.failed.role.exists=\u83DC\u5355\u5DF2\u5206\u914D,\u4E0D\u5141\u8BB8\u5220\u9664 |
||||
|
|
||||
|
##Post |
||||
|
post.add.failed.name.exists=\u65B0\u589E\u5C97\u4F4D[{}]\u5931\u8D25\uFF0C\u5C97\u4F4D\u540D\u79F0\u5DF2\u5B58\u5728 |
||||
|
post.add.failed.code.exists=\u65B0\u589E\u5C97\u4F4D[{}]\u5931\u8D25\uFF0C\u5C97\u4F4D\u7F16\u7801\u5DF2\u5B58\u5728 |
||||
|
post.update.failed.name.exists=\u4FEE\u6539\u5C97\u4F4D[{}]\u5931\u8D25\uFF0C\u5C97\u4F4D\u540D\u79F0\u5DF2\u5B58\u5728 |
||||
|
post.update.failed.code.exists=\u4FEE\u6539\u5C97\u4F4D[{}]\u5931\u8D25\uFF0C\u5C97\u4F4D\u7F16\u7801\u5DF2\u5B58\u5728 |
||||
|
|
||||
|
##User |
||||
|
user.username.exists=\u7CFB\u7EDF\u8D26\u53F7\u540D\u79F0\u5DF2\u5B58\u5728\uFF0C\u8BF7\u4FEE\u6539\u540E\u91CD\u8BD5 |
||||
|
user.password.differ=\u4E24\u6B21\u5BC6\u7801\u4E0D\u4E00\u81F4\uFF0C\u8BF7\u91CD\u65B0\u8F93\u5165 |
||||
|
user.add.failed.name.exists=\u65B0\u589E\u7528\u6237[{}]\u5931\u8D25\uFF0C\u767B\u5F55\u8D26\u53F7\u5DF2\u5B58\u5728 |
||||
|
user.add.failed.phone.exists=\u65B0\u589E\u7528\u6237[{}]\u5931\u8D25\uFF0C\u624B\u673A\u53F7\u7801\u5DF2\u5B58\u5728 |
||||
|
user.add.failed.email.exists=\u65B0\u589E\u7528\u6237[{}]\u5931\u8D25\uFF0C\u90AE\u7BB1\u8D26\u53F7\u5DF2\u5B58\u5728 |
||||
|
user.update.failed.password.wrong=\u4FEE\u6539\u5BC6\u7801\u5931\u8D25\uFF0C\u65E7\u5BC6\u7801\u9519\u8BEF |
||||
|
user.update.failed.password.repeat=\u65B0\u5BC6\u7801\u4E0D\u80FD\u4E0E\u65E7\u5BC6\u7801\u76F8\u540C |
||||
|
user.update.password.failed=\u4FEE\u6539\u5BC6\u7801\u5F02\u5E38\uFF0C\u8BF7\u8054\u7CFB\u7BA1\u7406\u5458 |
||||
|
user.update.failed.name.exists=\u65B0\u589E\u7528\u6237[{}]\u5931\u8D25\uFF0C\u767B\u5F55\u8D26\u53F7\u5DF2\u5B58\u5728 |
||||
|
user.update.failed.phone.exists=\u4FEE\u6539\u7528\u6237[{}]\u5931\u8D25\uFF0C\u624B\u673A\u53F7\u7801\u5DF2\u5B58\u5728 |
||||
|
user.update.failed.email.exists=\u4FEE\u6539\u7528\u6237[{}]\u5931\u8D25\uFF0C\u90AE\u7BB1\u8D26\u53F7\u5DF2\u5B58\u5728 |
||||
|
user.update.failed=\u4FEE\u6539\u4E2A\u4EBA\u4FE1\u606F\u5F02\u5E38\uFF0C\u8BF7\u8054\u7CFB\u7BA1\u7406\u5458 |
||||
|
user.delete.failed=\u5F53\u524D\u7528\u6237\u4E0D\u80FD\u5220\u9664 |
||||
|
user.upload.avatar.failed=\u4E0A\u4F20\u56FE\u7247\u5F02\u5E38\uFF0C\u8BF7\u8054\u7CFB\u7BA1\u7406\u5458 |
||||
|
user.not.login=\u8BF7\u767B\u5F55\u540E\u91CD\u8BD5 |
||||
|
user.access.denied=\u7528\u6237\u62D2\u7EDD\u8BBF\u95EE |
||||
|
|
||||
|
##Role |
||||
|
role.add.manager.failed=\u4E0D\u5141\u8BB8\u8BBE\u7F6E\u7BA1\u7406\u5458\u89D2\u8272\u6807\u8BC6 |
||||
|
role.add.failed.name.exists=\u65B0\u589E\u89D2\u8272[{}]\u5931\u8D25\uFF0C\u89D2\u8272\u540D\u79F0\u5DF2\u5B58\u5728 |
||||
|
role.add.failed.key.exists=\u65B0\u589E\u89D2\u8272[{}]\u5931\u8D25\uFF0C\u89D2\u8272\u6743\u9650\u5DF2\u5B58\u5728 |
||||
|
role.update.failed.name.exists=\u4FEE\u6539\u89D2\u8272[{}]\u5931\u8D25\uFF0C\u89D2\u8272\u540D\u79F0\u5DF2\u5B58\u5728 |
||||
|
role.update.failed.key.exists=\u4FEE\u6539\u89D2\u8272[{}]\u5931\u8D25\uFF0C\u89D2\u8272\u6743\u9650\u5DF2\u5B58\u5728 |
||||
|
role.update.failed=\u4FEE\u6539\u89D2\u8272[{}]\u5931\u8D25\uFF0C\u8BF7\u8054\u7CFB\u7BA1\u7406\u5458 |
||||
|
|
||||
|
##Import |
||||
|
import.failed.file.null=\u5BFC\u5165\u5931\u8D25\uFF0C\u8BF7\u5148\u4E0A\u4F20\u6587\u4EF6\uFF01 |
||||
|
import.failed.data.null=\u5BFC\u5165\u5931\u8D25\uFF0C\u5BFC\u5165\u6570\u636E\u4E3A\u7A7A\uFF01 |
||||
|
import.failed.device.name.null=\u5BFC\u5165\u5931\u8D25\uFF0C\u6A21\u677F\u91CC\u8BBE\u5907\u540D\u79F0\u4E0D\u80FD\u4E3A\u7A7A\uFF01 |
||||
|
import.success=\u5BFC\u5165\u6210\u529F |
||||
|
|
||||
|
##General |
||||
|
success=\u6210\u529F |
||||
|
fail=\u5931\u8D25 |
||||
|
query.success=\u67E5\u8BE2\u6210\u529F |
||||
|
operate.success=\u64CD\u4F5C\u6210\u529F |
||||
|
create.success=\u521B\u5EFA\u6210\u529F |
||||
|
create.failed=\u521B\u5EFA\u5931\u8D25 |
||||
|
save.success=\u4FDD\u5B58\u6210\u529F |
||||
|
save.failed=\u4FDD\u5B58\u5931\u8D25 |
||||
|
authorization.success=\u6388\u6743\u6210\u529F |
||||
|
|
||||
|
##Email |
||||
|
email.format.error=\u90AE\u7BB1\u683C\u5F0F\u9519\u8BEF |
||||
|
email.verification.code.send=\u90AE\u7BB1\u9A8C\u8BC1\u7801\u5DF2\u53D1\u9001 |
||||
|
|
||||
|
##Firmware |
||||
|
firmware.task.upgrade.failed.time.not.valid=\u9884\u5B9A\u5347\u7EA7\u65F6\u95F4\u5E94\u5927\u4E8E\u5F53\u524D\u65F6\u95F4 |
||||
|
##Media |
||||
|
media.record.query.failed=\u8FDE\u63A5\u8D85\u65F6\u6216\u53D1\u751F\u9519\u8BEF\uFF0C\u672A\u83B7\u53D6\u5230\u6570\u636E |
||||
|
##Modbus |
||||
|
modbus.type.null=\u7C7B\u578B\u4E3A\u7A7A |
||||
|
##Netty |
||||
|
netty.client.not.exists=\u5BA2\u6237\u7AEF\u4E0D\u5B58\u5728 |
||||
|
##Runtime |
||||
|
runtime.message.id.null=\u6D88\u606Fid\u4E3A\u7A7A |
||||
|
##Wechat |
||||
|
wechat.verify.type.null=\u8BF7\u4F20\u5165\u9A8C\u8BC1\u65B9\u5F0F |
||||
|
wechat.bind.message.id.null=\u8BF7\u4F20\u5165\u7ED1\u5B9A\u4FE1\u606FID |
||||
|
##AuthResource |
||||
|
auth.resource.product.query.success=\u67E5\u8BE2\u4EA7\u54C1\u5217\u8868\u6210\u529F |
||||
|
##Device |
||||
|
device.user.id.null=\u7528\u6237ID\u4E0D\u80FD\u4E3A\u7A7A |
||||
|
device.product.id.null=\u8BBE\u5907\u7F16\u53F7\u548C\u4EA7\u54C1ID\u4E0D\u80FD\u4E3A\u7A7A |
||||
|
device.dept.id.null=\u8BF7\u9009\u62E9\u5206\u914D\u673A\u6784 |
||||
|
device.id.null=\u8BF7\u9009\u62E9\u8BBE\u5907 |
||||
|
##DeviceJob |
||||
|
job.add.failed.cron.not.valid=\u65B0\u589E\u4EFB\u52A1[{}]\u5931\u8D25\uFF0CCron\u8868\u8FBE\u5F0F\u4E0D\u6B63\u786E |
||||
|
job.add.failed.rmi.not.valid=\u65B0\u589E\u4EFB\u52A1[{}]\u5931\u8D25\uFF0C\u76EE\u6807\u5B57\u7B26\u4E32\u4E0D\u5141\u8BB8'rmi'\u8C03\u7528 |
||||
|
job.add.failed.ldap.not.valid=\u65B0\u589E\u4EFB\u52A1[{}]\u5931\u8D25\uFF0C\u76EE\u6807\u5B57\u7B26\u4E32\u4E0D\u5141\u8BB8'ldap(s)'\u8C03\u7528 |
||||
|
job.add.failed.http.not.valid=\u65B0\u589E\u4EFB\u52A1[{}]\u5931\u8D25\uFF0C\u76EE\u6807\u5B57\u7B26\u4E32\u4E0D\u5141\u8BB8'http(s)'\u8C03\u7528 |
||||
|
job.add.failed.string.error=\u65B0\u589E\u4EFB\u52A1[{}]\u5931\u8D25\uFF0C\u76EE\u6807\u5B57\u7B26\u4E32\u5B58\u5728\u8FDD\u89C4 |
||||
|
job.add.failed.string.not.valid=\u65B0\u589E\u4EFB\u52A1[{}]\u5931\u8D25\uFF0C\u76EE\u6807\u5B57\u7B26\u4E32\u4E0D\u5728\u767D\u540D\u5355\u5185 |
||||
|
job.update.failed.cron.not.valid=\u4FEE\u6539\u4EFB\u52A1[{}]\u5931\u8D25\uFF0CCron\u8868\u8FBE\u5F0F\u4E0D\u6B63\u786E |
||||
|
job.update.failed.rmi.not.valid=\u4FEE\u6539\u4EFB\u52A1[{}]\u5931\u8D25\uFF0C\u76EE\u6807\u5B57\u7B26\u4E32\u4E0D\u5141\u8BB8'rmi'\u8C03\u7528 |
||||
|
job.update.failed.ldap.not.valid=\u4FEE\u6539\u4EFB\u52A1[{}]\u5931\u8D25\uFF0C\u76EE\u6807\u5B57\u7B26\u4E32\u4E0D\u5141\u8BB8'ldap(s)'\u8C03\u7528 |
||||
|
job.update.failed.http.not.valid=\u4FEE\u6539\u4EFB\u52A1[{}]\u5931\u8D25\uFF0C\u76EE\u6807\u5B57\u7B26\u4E32\u4E0D\u5141\u8BB8'http(s)'\u8C03\u7528 |
||||
|
job.update.failed.string.error=\u4FEE\u6539\u4EFB\u52A1[{}]\u5931\u8D25\uFF0C\u76EE\u6807\u5B57\u7B26\u4E32\u5B58\u5728\u8FDD\u89C4 |
||||
|
job.update.failed.string.not.valid=\u4FEE\u6539\u4EFB\u52A1[{}]\u5931\u8D25\uFF0C\u76EE\u6807\u5B57\u7B26\u4E32\u4E0D\u5728\u767D\u540D\u5355\u5185 |
||||
|
job.not.exists=\u4EFB\u52A1\u4E0D\u5B58\u5728\u6216\u5DF2\u8FC7\u671F |
||||
|
##DeviceUser |
||||
|
device.user.delete.failed.user.not.valid=\u8BBE\u5907\u6240\u6709\u8005\u4E0D\u80FD\u5220\u9664 |
||||
|
##GoviewProject |
||||
|
goview.project.data.save.failed.id.null=\u6CA1\u6709\u8BE5\u9879\u76EEID |
||||
|
goview.project.data.execute.sql.failed=\u8BF7\u7F16\u5199sql\u8BED\u53E5 |
||||
|
##ThingsModel |
||||
|
things.model.identifier.repeat=\u4EA7\u54C1\u4E0B\u7684\u6807\u8BC6\u7B26\u4E0D\u80FD\u91CD\u590D |
||||
|
things.model.import.failed.identifier.repeat=[{}]\u6761\u6570\u636E\u672A\u5BFC\u5165\uFF0C\u6807\u8BC6\u7B26\u91CD\u590D |
||||
|
##MQTT |
||||
|
mqtt.unauthorized=mqtt\u8D26\u53F7\u548C\u5BC6\u7801\u4E0E\u8BA4\u8BC1\u670D\u52A1\u5668\u914D\u7F6E\u4E0D\u5339\u914D |
||||
|
##Oauth |
||||
|
oauth.response.type.not.valid=response_type\u53C2\u6570\u503C\u53EA\u5141\u8BB8code\u548Ctoken |
||||
|
oauth.grant.type.null=\u672A\u77E5\u6388\u6743\u7C7B\u578B |
||||
|
oauth.grant.type.implicit.not.support=Token\u63A5\u53E3\u4E0D\u652F\u6301implicit\u6388\u6743\u6A21\u5F0F |
||||
|
oauth.access.token.null=\u8BBF\u95EE\u4EE4\u724C\u4E0D\u80FD\u4E3A\u7A7A |
||||
|
obtain.basic.authorization.failed=client_id\u6216client_secret\u672A\u6B63\u786E\u4F20\u9012 |
||||
|
##Record |
||||
|
record.app.null=app\u4E0D\u80FD\u4E3A\u7A7A |
||||
|
record.stream.null=stream\u4E0D\u80FD\u4E3A\u7A7A |
||||
|
record.time.not.valid=\u9519\u8BEF\u7684\u5F00\u59CB\u65F6\u95F4\u6216\u7ED3\u675F\u65F6\u95F4 |
||||
|
record.file.null=\u672A\u627E\u5230\u89C6\u9891\u6587\u4EF6 |
||||
|
|
||||
|
##ErrorCodeConstants |
||||
|
app.not.found=App \u4E0D\u5B58\u5728 |
||||
|
app.is.disable=App \u5DF2\u7ECF\u88AB\u7981\u7528 |
||||
|
app.exist.order.cant.delete=\u652F\u4ED8\u5E94\u7528\u5B58\u5728\u652F\u4ED8\u8BA2\u5355\uFF0C\u65E0\u6CD5\u5220\u9664 |
||||
|
app.exist.refund.cant.delete=\u652F\u4ED8\u5E94\u7528\u5B58\u5728\u9000\u6B3E\u8BA2\u5355\uFF0C\u65E0\u6CD5\u5220\u9664 |
||||
|
channel.not.found=\u652F\u4ED8\u6E20\u9053\u7684\u914D\u7F6E\u4E0D\u5B58\u5728 |
||||
|
channel.is.disable=\u652F\u4ED8\u6E20\u9053\u5DF2\u7ECF\u7981\u7528 |
||||
|
channel.exists.same.channel.error=\u5DF2\u5B58\u5728\u76F8\u540C\u7684\u6E20\u9053 |
||||
|
order.not.found=\u652F\u4ED8\u8BA2\u5355\u4E0D\u5B58\u5728 |
||||
|
order.status.is.not.waiting=\u652F\u4ED8\u8BA2\u5355\u4E0D\u5904\u4E8E\u5F85\u652F\u4ED8 |
||||
|
order.status.is.success=\u8BA2\u5355\u5DF2\u652F\u4ED8\uFF0C\u8BF7\u5237\u65B0\u9875\u9762 |
||||
|
order.is.expired=\u652F\u4ED8\u8BA2\u5355\u5DF2\u7ECF\u8FC7\u671F |
||||
|
order.submit.channel.error=\u53D1\u8D77\u652F\u4ED8\u62A5\u9519\uFF0C\u9519\u8BEF\u7801\uFF1A{}\uFF0C\u9519\u8BEF\u63D0\u793A\uFF1A{} |
||||
|
order.refund.fail.status.error=\u652F\u4ED8\u8BA2\u5355\u9000\u6B3E\u5931\u8D25\uFF0C\u539F\u56E0\uFF1A\u72B6\u6001\u4E0D\u662F\u5DF2\u652F\u4ED8\u6216\u5DF2\u9000\u6B3E |
||||
|
order.extension.not.found=\u652F\u4ED8\u4EA4\u6613\u62D3\u5C55\u5355\u4E0D\u5B58\u5728 |
||||
|
order.extension.status.is.not.waiting=\u652F\u4ED8\u4EA4\u6613\u62D3\u5C55\u5355\u4E0D\u5904\u4E8E\u5F85\u652F\u4ED8 |
||||
|
order.extension.is.paid=\u8BA2\u5355\u5DF2\u652F\u4ED8\uFF0C\u8BF7\u7B49\u5F85\u652F\u4ED8\u7ED3\u679C |
||||
|
refund.price.exceed=\u9000\u6B3E\u91D1\u989D\u8D85\u8FC7\u8BA2\u5355\u53EF\u9000\u6B3E\u91D1\u989D |
||||
|
refund.has.refunding=\u5DF2\u7ECF\u6709\u9000\u6B3E\u5728\u5904\u7406\u4E2D |
||||
|
refund.exists=\u5DF2\u7ECF\u5B58\u5728\u9000\u6B3E\u5355 |
||||
|
refund.not.found=\u652F\u4ED8\u9000\u6B3E\u5355\u4E0D\u5B58\u5728 |
||||
|
refund.statue.is.not.waiting=\u652F\u4ED8\u9000\u6B3E\u5355\u4E0D\u5904\u4E8E\u5F85\u9000\u6B3E |
||||
|
demo.order.not.found=\u793A\u4F8B\u8BA2\u5355\u4E0D\u5B58\u5728 |
||||
|
demo.order.update.paid.status.not.unpaid=\u793A\u4F8B\u8BA2\u5355\u66F4\u65B0\u652F\u4ED8\u72B6\u6001\u5931\u8D25\uFF0C\u8BA2\u5355\u4E0D\u662F\u3010\u672A\u652F\u4ED8\u3011\u72B6\u6001 |
||||
|
demo.order.update.paid.fail.pay.order.id.error=\u793A\u4F8B\u8BA2\u5355\u66F4\u65B0\u652F\u4ED8\u72B6\u6001\u5931\u8D25\uFF0C\u652F\u4ED8\u5355\u7F16\u53F7\u4E0D\u5339\u914D |
||||
|
demo.order.update.paid.fail.pay.order.status.not.success=\u793A\u4F8B\u8BA2\u5355\u66F4\u65B0\u652F\u4ED8\u72B6\u6001\u5931\u8D25\uFF0C\u652F\u4ED8\u5355\u72B6\u6001\u4E0D\u662F\u3010\u652F\u4ED8\u6210\u529F\u3011\u72B6\u6001 |
||||
|
demo.order.update.paid.fail.pay.price.not.match=\u793A\u4F8B\u8BA2\u5355\u66F4\u65B0\u652F\u4ED8\u72B6\u6001\u5931\u8D25\uFF0C\u652F\u4ED8\u5355\u91D1\u989D\u4E0D\u5339\u914D |
||||
|
demo.order.refund.fail.not.paid=\u53D1\u8D77\u9000\u6B3E\u5931\u8D25\uFF0C\u793A\u4F8B\u8BA2\u5355\u672A\u652F\u4ED8 |
||||
|
demo.order.refund.fail.refunded=\u53D1\u8D77\u9000\u6B3E\u5931\u8D25\uFF0C\u793A\u4F8B\u8BA2\u5355\u5DF2\u9000\u6B3E |
||||
|
demo.order.refund.fail.refund.not.found=\u53D1\u8D77\u9000\u6B3E\u5931\u8D25\uFF0C\u9000\u6B3E\u8BA2\u5355\u4E0D\u5B58\u5728 |
||||
|
demo.order.refund.fail.refund.not.success=\u53D1\u8D77\u9000\u6B3E\u5931\u8D25\uFF0C\u9000\u6B3E\u8BA2\u5355\u672A\u9000\u6B3E\u6210\u529F |
||||
|
demo.order.refund.fail.refund.order.id.error=\u53D1\u8D77\u9000\u6B3E\u5931\u8D25\uFF0C\u9000\u6B3E\u5355\u7F16\u53F7\u4E0D\u5339\u914D |
||||
|
demo.order.refund.fail.refund.price.not.match=\u53D1\u8D77\u9000\u6B3E\u5931\u8D25\uFF0C\u9000\u6B3E\u5355\u91D1\u989D\u4E0D\u5339\u914D |
@ -0,0 +1,211 @@ |
|||||
|
#\u9519\u8BEF\u6D88\u606F |
||||
|
not.null=* \u5FC5\u987B\u586B\u5199 |
||||
|
user.jcaptcha.error=\u9A8C\u8BC1\u7801\u9519\u8BEF |
||||
|
user.jcaptcha.expire=\u9A8C\u8BC1\u7801\u5DF2\u5931\u6548 |
||||
|
user.not.exists=\u7528\u6237\u4E0D\u5B58\u5728/\u5BC6\u7801\u9519\u8BEF |
||||
|
user.password.not.match=\u7528\u6237\u4E0D\u5B58\u5728/\u5BC6\u7801\u9519\u8BEF |
||||
|
user.password.retry.limit.count=\u5BC6\u7801\u8F93\u5165\u9519\u8BEF{0}\u6B21 |
||||
|
user.password.retry.limit.exceed=\u5BC6\u7801\u8F93\u5165\u9519\u8BEF{0}\u6B21\uFF0C\u5E10\u6237\u9501\u5B9A{1}\u5206\u949F |
||||
|
user.password.delete=\u5BF9\u4E0D\u8D77\uFF0C\u60A8\u7684\u8D26\u53F7\u5DF2\u88AB\u5220\u9664 |
||||
|
user.blocked=\u7528\u6237\u5DF2\u5C01\u7981\uFF0C\u8BF7\u8054\u7CFB\u7BA1\u7406\u5458 |
||||
|
role.blocked=\u89D2\u8272\u5DF2\u5C01\u7981\uFF0C\u8BF7\u8054\u7CFB\u7BA1\u7406\u5458 |
||||
|
user.logout.success=\u9000\u51FA\u6210\u529F |
||||
|
|
||||
|
length.not.valid=\u957F\u5EA6\u5FC5\u987B\u5728{min}\u5230{max}\u4E2A\u5B57\u7B26\u4E4B\u95F4 |
||||
|
|
||||
|
user.username.not.valid=* 2\u523020\u4E2A\u6C49\u5B57\u3001\u5B57\u6BCD\u3001\u6570\u5B57\u6216\u4E0B\u5212\u7EBF\u7EC4\u6210\uFF0C\u4E14\u5FC5\u987B\u4EE5\u975E\u6570\u5B57\u5F00\u5934 |
||||
|
user.password.not.valid=* 5-50\u4E2A\u5B57\u7B26 |
||||
|
|
||||
|
user.email.not.valid=\u90AE\u7BB1\u683C\u5F0F\u9519\u8BEF |
||||
|
user.mobile.phone.number.not.valid=\u624B\u673A\u53F7\u683C\u5F0F\u9519\u8BEF |
||||
|
user.login.success=\u767B\u5F55\u6210\u529F |
||||
|
user.register.success=\u6CE8\u518C\u6210\u529F |
||||
|
user.notfound=\u8BF7\u91CD\u65B0\u767B\u5F55 |
||||
|
user.forcelogout=\u7BA1\u7406\u5458\u5F3A\u5236\u9000\u51FA\uFF0C\u8BF7\u91CD\u65B0\u767B\u5F55 |
||||
|
user.unknown.error=\u672A\u77E5\u9519\u8BEF\uFF0C\u8BF7\u91CD\u65B0\u767B\u5F55 |
||||
|
|
||||
|
##\u6743\u9650 |
||||
|
no.permission=\u60A8\u6CA1\u6709\u6570\u636E\u7684\u6743\u9650\uFF0C\u8BF7\u8054\u7CFB\u7BA1\u7406\u5458\u6DFB\u52A0\u6743\u9650 [{0}] |
||||
|
no.create.permission=\u60A8\u6CA1\u6709\u521B\u5EFA\u6570\u636E\u7684\u6743\u9650\uFF0C\u8BF7\u8054\u7CFB\u7BA1\u7406\u5458\u6DFB\u52A0\u6743\u9650 [{0}] |
||||
|
no.update.permission=\u60A8\u6CA1\u6709\u4FEE\u6539\u6570\u636E\u7684\u6743\u9650\uFF0C\u8BF7\u8054\u7CFB\u7BA1\u7406\u5458\u6DFB\u52A0\u6743\u9650 [{0}] |
||||
|
no.delete.permission=\u60A8\u6CA1\u6709\u5220\u9664\u6570\u636E\u7684\u6743\u9650\uFF0C\u8BF7\u8054\u7CFB\u7BA1\u7406\u5458\u6DFB\u52A0\u6743\u9650 [{0}] |
||||
|
no.export.permission=\u60A8\u6CA1\u6709\u5BFC\u51FA\u6570\u636E\u7684\u6743\u9650\uFF0C\u8BF7\u8054\u7CFB\u7BA1\u7406\u5458\u6DFB\u52A0\u6743\u9650 [{0}] |
||||
|
no.view.permission=\u60A8\u6CA1\u6709\u67E5\u770B\u6570\u636E\u7684\u6743\u9650\uFF0C\u8BF7\u8054\u7CFB\u7BA1\u7406\u5458\u6DFB\u52A0\u6743\u9650 [{0}] |
||||
|
|
||||
|
##\u6587\u4EF6\u4E0A\u4F20\u6D88\u606F |
||||
|
upload.exceed.maxSize=\u4E0A\u4F20\u7684\u6587\u4EF6\u5927\u5C0F\u8D85\u51FA\u9650\u5236\u7684\u6587\u4EF6\u5927\u5C0F\uFF01<br/>\u5141\u8BB8\u7684\u6587\u4EF6\u6700\u5927\u5927\u5C0F\u662F\uFF1A{0}MB\uFF01 |
||||
|
upload.filename.exceed.length=\u4E0A\u4F20\u7684\u6587\u4EF6\u540D\u6700\u957F{0}\u4E2A\u5B57\u7B26 |
||||
|
upload.success=\u4E0A\u4F20\u6210\u529F |
||||
|
|
||||
|
##\u6587\u4EF6\u4E0B\u8F7D\u6D88\u606F |
||||
|
download.filename.not.valid=\u6587\u4EF6\u540D\u79F0[{}]\u975E\u6CD5\uFF0C\u4E0D\u5141\u8BB8\u4E0B\u8F7D |
||||
|
download.file.failed=\u4E0B\u8F7D\u6587\u4EF6\u5931\u8D25 |
||||
|
download.resource.not.valid=\u8D44\u6E90\u6587\u4EF6[{}]\u975E\u6CD5\uFF0C\u4E0D\u5141\u8BB8\u4E0B\u8F7D |
||||
|
|
||||
|
##Dept |
||||
|
dept.add.failed.name.exists=\u65B0\u589E\u673A\u6784[{}]\u5931\u8D25\uFF0C\u673A\u6784\u540D\u79F0\u5DF2\u5B58\u5728 |
||||
|
dept.update.failed.name.exists=\u4FEE\u6539\u673A\u6784[{}]\u5931\u8D25\uFF0C\u673A\u6784\u540D\u79F0\u5DF2\u5B58\u5728 |
||||
|
dept.update.failed.parent.not.valid=\u4FEE\u6539\u673A\u6784[{}]\u5931\u8D25\uFF0C\u4E0A\u7EA7\u673A\u6784\u4E0D\u80FD\u662F\u81EA\u5DF1 |
||||
|
dept.update.failed.child.not.valid=\u8BE5\u673A\u6784\u5305\u542B\u672A\u505C\u7528\u7684\u5B50\u673A\u6784\uFF01 |
||||
|
dept.delete.failed.child.exists=\u5B58\u5728\u4E0B\u7EA7\u673A\u6784\uFF0C\u4E0D\u5141\u8BB8\u5220\u9664 |
||||
|
dept.delete.failed.user.exists=\u673A\u6784\u5B58\u5728\u7528\u6237\uFF0C\u4E0D\u5141\u8BB8\u5220\u9664 |
||||
|
|
||||
|
##Dict |
||||
|
dict.add.failed.type.exists=\u65B0\u589E\u5B57\u5178[{}]\u5931\u8D25\uFF0C\u5B57\u5178\u7C7B\u578B\u5DF2\u5B58\u5728 |
||||
|
dict.update.failed.type.exists=\u65B0\u589E\u5B57\u5178[{}]\u5931\u8D25\uFF0C\u5B57\u5178\u7C7B\u578B\u5DF2\u5B58\u5728 |
||||
|
|
||||
|
##Index |
||||
|
index.welcome.message=\u6B22\u8FCE\u4F7F\u7528{}\u540E\u53F0\u7BA1\u7406\u6846\u67B6\uFF0C\u5F53\u524D\u7248\u672C\uFF1Av{}\uFF0C\u8BF7\u901A\u8FC7\u524D\u7AEF\u5730\u5740\u8BBF\u95EE\u3002 |
||||
|
|
||||
|
##Menu |
||||
|
menu.add.failed.name.exists=\u65B0\u589E\u83DC\u5355[{}]\u5931\u8D25\uFF0C\u83DC\u5355\u540D\u79F0\u5DF2\u5B58\u5728 |
||||
|
menu.add.failed.path.not.valid=\u65B0\u589E\u83DC\u5355[{}]\u5931\u8D25\uFF0C\u5730\u5740\u5FC5\u987B\u4EE5http(s)://\u5F00\u5934 |
||||
|
menu.update.failed.name.exists=\u4FEE\u6539\u83DC\u5355[{}]\u5931\u8D25\uFF0C\u83DC\u5355\u540D\u79F0\u5DF2\u5B58\u5728 |
||||
|
menu.update.failed.path.not.valid=\u4FEE\u6539\u83DC\u5355[{}]\u5931\u8D25\uFF0C\u5730\u5740\u5FC5\u987B\u4EE5http(s)://\u5F00\u5934 |
||||
|
menu.update.failed.parent.not.valid=\u4FEE\u6539\u83DC\u5355[{}]\u5931\u8D25\uFF0C\u4E0A\u7EA7\u83DC\u5355\u4E0D\u80FD\u9009\u62E9\u81EA\u5DF1 |
||||
|
menu.delete.failed.child.exists=\u5B58\u5728\u5B50\u83DC\u5355,\u4E0D\u5141\u8BB8\u5220\u9664 |
||||
|
menu.delete.failed.role.exists=\u83DC\u5355\u5DF2\u5206\u914D,\u4E0D\u5141\u8BB8\u5220\u9664 |
||||
|
|
||||
|
##Post |
||||
|
post.add.failed.name.exists=\u65B0\u589E\u5C97\u4F4D[{}]\u5931\u8D25\uFF0C\u5C97\u4F4D\u540D\u79F0\u5DF2\u5B58\u5728 |
||||
|
post.add.failed.code.exists=\u65B0\u589E\u5C97\u4F4D[{}]\u5931\u8D25\uFF0C\u5C97\u4F4D\u7F16\u7801\u5DF2\u5B58\u5728 |
||||
|
post.update.failed.name.exists=\u4FEE\u6539\u5C97\u4F4D[{}]\u5931\u8D25\uFF0C\u5C97\u4F4D\u540D\u79F0\u5DF2\u5B58\u5728 |
||||
|
post.update.failed.code.exists=\u4FEE\u6539\u5C97\u4F4D[{}]\u5931\u8D25\uFF0C\u5C97\u4F4D\u7F16\u7801\u5DF2\u5B58\u5728 |
||||
|
|
||||
|
##User |
||||
|
user.username.exists=\u7CFB\u7EDF\u8D26\u53F7\u540D\u79F0\u5DF2\u5B58\u5728\uFF0C\u8BF7\u4FEE\u6539\u540E\u91CD\u8BD5 |
||||
|
user.password.differ=\u4E24\u6B21\u5BC6\u7801\u4E0D\u4E00\u81F4\uFF0C\u8BF7\u91CD\u65B0\u8F93\u5165 |
||||
|
user.add.failed.name.exists=\u65B0\u589E\u7528\u6237[{}]\u5931\u8D25\uFF0C\u767B\u5F55\u8D26\u53F7\u5DF2\u5B58\u5728 |
||||
|
user.add.failed.phone.exists=\u65B0\u589E\u7528\u6237[{}]\u5931\u8D25\uFF0C\u624B\u673A\u53F7\u7801\u5DF2\u5B58\u5728 |
||||
|
user.add.failed.email.exists=\u65B0\u589E\u7528\u6237[{}]\u5931\u8D25\uFF0C\u90AE\u7BB1\u8D26\u53F7\u5DF2\u5B58\u5728 |
||||
|
user.update.failed.password.wrong=\u4FEE\u6539\u5BC6\u7801\u5931\u8D25\uFF0C\u65E7\u5BC6\u7801\u9519\u8BEF |
||||
|
user.update.failed.password.repeat=\u65B0\u5BC6\u7801\u4E0D\u80FD\u4E0E\u65E7\u5BC6\u7801\u76F8\u540C |
||||
|
user.update.password.failed=\u4FEE\u6539\u5BC6\u7801\u5F02\u5E38\uFF0C\u8BF7\u8054\u7CFB\u7BA1\u7406\u5458 |
||||
|
user.update.failed.name.exists=\u65B0\u589E\u7528\u6237[{}]\u5931\u8D25\uFF0C\u767B\u5F55\u8D26\u53F7\u5DF2\u5B58\u5728 |
||||
|
user.update.failed.phone.exists=\u4FEE\u6539\u7528\u6237[{}]\u5931\u8D25\uFF0C\u624B\u673A\u53F7\u7801\u5DF2\u5B58\u5728 |
||||
|
user.update.failed.email.exists=\u4FEE\u6539\u7528\u6237[{}]\u5931\u8D25\uFF0C\u90AE\u7BB1\u8D26\u53F7\u5DF2\u5B58\u5728 |
||||
|
user.update.failed=\u4FEE\u6539\u4E2A\u4EBA\u4FE1\u606F\u5F02\u5E38\uFF0C\u8BF7\u8054\u7CFB\u7BA1\u7406\u5458 |
||||
|
user.delete.failed=\u5F53\u524D\u7528\u6237\u4E0D\u80FD\u5220\u9664 |
||||
|
user.upload.avatar.failed=\u4E0A\u4F20\u56FE\u7247\u5F02\u5E38\uFF0C\u8BF7\u8054\u7CFB\u7BA1\u7406\u5458 |
||||
|
user.not.login=\u8BF7\u767B\u5F55\u540E\u91CD\u8BD5 |
||||
|
user.access.denied=\u7528\u6237\u62D2\u7EDD\u8BBF\u95EE |
||||
|
|
||||
|
##Role |
||||
|
role.add.manager.failed=\u4E0D\u5141\u8BB8\u8BBE\u7F6E\u7BA1\u7406\u5458\u89D2\u8272\u6807\u8BC6 |
||||
|
role.add.failed.name.exists=\u65B0\u589E\u89D2\u8272[{}]\u5931\u8D25\uFF0C\u89D2\u8272\u540D\u79F0\u5DF2\u5B58\u5728 |
||||
|
role.add.failed.key.exists=\u65B0\u589E\u89D2\u8272[{}]\u5931\u8D25\uFF0C\u89D2\u8272\u6743\u9650\u5DF2\u5B58\u5728 |
||||
|
role.update.failed.name.exists=\u4FEE\u6539\u89D2\u8272[{}]\u5931\u8D25\uFF0C\u89D2\u8272\u540D\u79F0\u5DF2\u5B58\u5728 |
||||
|
role.update.failed.key.exists=\u4FEE\u6539\u89D2\u8272[{}]\u5931\u8D25\uFF0C\u89D2\u8272\u6743\u9650\u5DF2\u5B58\u5728 |
||||
|
role.update.failed=\u4FEE\u6539\u89D2\u8272[{}]\u5931\u8D25\uFF0C\u8BF7\u8054\u7CFB\u7BA1\u7406\u5458 |
||||
|
|
||||
|
##Import |
||||
|
import.failed.file.null=\u5BFC\u5165\u5931\u8D25\uFF0C\u8BF7\u5148\u4E0A\u4F20\u6587\u4EF6\uFF01 |
||||
|
import.failed.data.null=\u5BFC\u5165\u5931\u8D25\uFF0C\u5BFC\u5165\u6570\u636E\u4E3A\u7A7A\uFF01 |
||||
|
import.failed.device.name.null=\u5BFC\u5165\u5931\u8D25\uFF0C\u6A21\u677F\u91CC\u8BBE\u5907\u540D\u79F0\u4E0D\u80FD\u4E3A\u7A7A\uFF01 |
||||
|
import.success=\u5BFC\u5165\u6210\u529F |
||||
|
|
||||
|
##General |
||||
|
success=\u6210\u529F |
||||
|
fail=\u5931\u8D25 |
||||
|
query.success=\u67E5\u8BE2\u6210\u529F |
||||
|
operate.success=\u64CD\u4F5C\u6210\u529F |
||||
|
create.success=\u521B\u5EFA\u6210\u529F |
||||
|
create.failed=\u521B\u5EFA\u5931\u8D25 |
||||
|
save.success=\u4FDD\u5B58\u6210\u529F |
||||
|
save.failed=\u4FDD\u5B58\u5931\u8D25 |
||||
|
authorization.success=\u6388\u6743\u6210\u529F |
||||
|
|
||||
|
##Email |
||||
|
email.format.error=\u90AE\u7BB1\u683C\u5F0F\u9519\u8BEF |
||||
|
email.verification.code.send=\u90AE\u7BB1\u9A8C\u8BC1\u7801\u5DF2\u53D1\u9001 |
||||
|
|
||||
|
##Firmware |
||||
|
firmware.task.upgrade.failed.time.not.valid=\u9884\u5B9A\u5347\u7EA7\u65F6\u95F4\u5E94\u5927\u4E8E\u5F53\u524D\u65F6\u95F4 |
||||
|
##Media |
||||
|
media.record.query.failed=\u8FDE\u63A5\u8D85\u65F6\u6216\u53D1\u751F\u9519\u8BEF\uFF0C\u672A\u83B7\u53D6\u5230\u6570\u636E |
||||
|
##Modbus |
||||
|
modbus.type.null=\u7C7B\u578B\u4E3A\u7A7A |
||||
|
##Netty |
||||
|
netty.client.not.exists=\u5BA2\u6237\u7AEF\u4E0D\u5B58\u5728 |
||||
|
##Runtime |
||||
|
runtime.message.id.null=\u6D88\u606Fid\u4E3A\u7A7A |
||||
|
##Wechat |
||||
|
wechat.verify.type.null=\u8BF7\u4F20\u5165\u9A8C\u8BC1\u65B9\u5F0F |
||||
|
wechat.bind.message.id.null=\u8BF7\u4F20\u5165\u7ED1\u5B9A\u4FE1\u606FID |
||||
|
##AuthResource |
||||
|
auth.resource.product.query.success=\u67E5\u8BE2\u4EA7\u54C1\u5217\u8868\u6210\u529F |
||||
|
##Device |
||||
|
device.user.id.null=\u7528\u6237ID\u4E0D\u80FD\u4E3A\u7A7A |
||||
|
device.product.id.null=\u8BBE\u5907\u7F16\u53F7\u548C\u4EA7\u54C1ID\u4E0D\u80FD\u4E3A\u7A7A |
||||
|
device.dept.id.null=\u8BF7\u9009\u62E9\u5206\u914D\u673A\u6784 |
||||
|
device.id.null=\u8BF7\u9009\u62E9\u8BBE\u5907 |
||||
|
##DeviceJob |
||||
|
job.add.failed.cron.not.valid=\u65B0\u589E\u4EFB\u52A1[{}]\u5931\u8D25\uFF0CCron\u8868\u8FBE\u5F0F\u4E0D\u6B63\u786E |
||||
|
job.add.failed.rmi.not.valid=\u65B0\u589E\u4EFB\u52A1[{}]\u5931\u8D25\uFF0C\u76EE\u6807\u5B57\u7B26\u4E32\u4E0D\u5141\u8BB8'rmi'\u8C03\u7528 |
||||
|
job.add.failed.ldap.not.valid=\u65B0\u589E\u4EFB\u52A1[{}]\u5931\u8D25\uFF0C\u76EE\u6807\u5B57\u7B26\u4E32\u4E0D\u5141\u8BB8'ldap(s)'\u8C03\u7528 |
||||
|
job.add.failed.http.not.valid=\u65B0\u589E\u4EFB\u52A1[{}]\u5931\u8D25\uFF0C\u76EE\u6807\u5B57\u7B26\u4E32\u4E0D\u5141\u8BB8'http(s)'\u8C03\u7528 |
||||
|
job.add.failed.string.error=\u65B0\u589E\u4EFB\u52A1[{}]\u5931\u8D25\uFF0C\u76EE\u6807\u5B57\u7B26\u4E32\u5B58\u5728\u8FDD\u89C4 |
||||
|
job.add.failed.string.not.valid=\u65B0\u589E\u4EFB\u52A1[{}]\u5931\u8D25\uFF0C\u76EE\u6807\u5B57\u7B26\u4E32\u4E0D\u5728\u767D\u540D\u5355\u5185 |
||||
|
job.update.failed.cron.not.valid=\u4FEE\u6539\u4EFB\u52A1[{}]\u5931\u8D25\uFF0CCron\u8868\u8FBE\u5F0F\u4E0D\u6B63\u786E |
||||
|
job.update.failed.rmi.not.valid=\u4FEE\u6539\u4EFB\u52A1[{}]\u5931\u8D25\uFF0C\u76EE\u6807\u5B57\u7B26\u4E32\u4E0D\u5141\u8BB8'rmi'\u8C03\u7528 |
||||
|
job.update.failed.ldap.not.valid=\u4FEE\u6539\u4EFB\u52A1[{}]\u5931\u8D25\uFF0C\u76EE\u6807\u5B57\u7B26\u4E32\u4E0D\u5141\u8BB8'ldap(s)'\u8C03\u7528 |
||||
|
job.update.failed.http.not.valid=\u4FEE\u6539\u4EFB\u52A1[{}]\u5931\u8D25\uFF0C\u76EE\u6807\u5B57\u7B26\u4E32\u4E0D\u5141\u8BB8'http(s)'\u8C03\u7528 |
||||
|
job.update.failed.string.error=\u4FEE\u6539\u4EFB\u52A1[{}]\u5931\u8D25\uFF0C\u76EE\u6807\u5B57\u7B26\u4E32\u5B58\u5728\u8FDD\u89C4 |
||||
|
job.update.failed.string.not.valid=\u4FEE\u6539\u4EFB\u52A1[{}]\u5931\u8D25\uFF0C\u76EE\u6807\u5B57\u7B26\u4E32\u4E0D\u5728\u767D\u540D\u5355\u5185 |
||||
|
job.not.exists=\u4EFB\u52A1\u4E0D\u5B58\u5728\u6216\u5DF2\u8FC7\u671F |
||||
|
##DeviceUser |
||||
|
device.user.delete.failed.user.not.valid=\u8BBE\u5907\u6240\u6709\u8005\u4E0D\u80FD\u5220\u9664 |
||||
|
##GoviewProject |
||||
|
goview.project.data.save.failed.id.null=\u6CA1\u6709\u8BE5\u9879\u76EEID |
||||
|
goview.project.data.execute.sql.failed=\u8BF7\u7F16\u5199sql\u8BED\u53E5 |
||||
|
##ThingsModel |
||||
|
things.model.identifier.repeat=\u4EA7\u54C1\u4E0B\u7684\u6807\u8BC6\u7B26\u4E0D\u80FD\u91CD\u590D |
||||
|
things.model.import.failed.identifier.repeat=[{}]\u6761\u6570\u636E\u672A\u5BFC\u5165\uFF0C\u6807\u8BC6\u7B26\u91CD\u590D |
||||
|
##MQTT |
||||
|
mqtt.unauthorized=mqtt\u8D26\u53F7\u548C\u5BC6\u7801\u4E0E\u8BA4\u8BC1\u670D\u52A1\u5668\u914D\u7F6E\u4E0D\u5339\u914D |
||||
|
##Oauth |
||||
|
oauth.response.type.not.valid=response_type\u53C2\u6570\u503C\u53EA\u5141\u8BB8code\u548Ctoken |
||||
|
oauth.grant.type.null=\u672A\u77E5\u6388\u6743\u7C7B\u578B |
||||
|
oauth.grant.type.implicit.not.support=Token\u63A5\u53E3\u4E0D\u652F\u6301implicit\u6388\u6743\u6A21\u5F0F |
||||
|
oauth.access.token.null=\u8BBF\u95EE\u4EE4\u724C\u4E0D\u80FD\u4E3A\u7A7A |
||||
|
obtain.basic.authorization.failed=client_id\u6216client_secret\u672A\u6B63\u786E\u4F20\u9012 |
||||
|
##Record |
||||
|
record.app.null=app\u4E0D\u80FD\u4E3A\u7A7A |
||||
|
record.stream.null=stream\u4E0D\u80FD\u4E3A\u7A7A |
||||
|
record.time.not.valid=\u9519\u8BEF\u7684\u5F00\u59CB\u65F6\u95F4\u6216\u7ED3\u675F\u65F6\u95F4 |
||||
|
record.file.null=\u672A\u627E\u5230\u89C6\u9891\u6587\u4EF6 |
||||
|
|
||||
|
##ErrorCodeConstants |
||||
|
app.not.found=App \u4E0D\u5B58\u5728 |
||||
|
app.is.disable=App \u5DF2\u7ECF\u88AB\u7981\u7528 |
||||
|
app.exist.order.cant.delete=\u652F\u4ED8\u5E94\u7528\u5B58\u5728\u652F\u4ED8\u8BA2\u5355\uFF0C\u65E0\u6CD5\u5220\u9664 |
||||
|
app.exist.refund.cant.delete=\u652F\u4ED8\u5E94\u7528\u5B58\u5728\u9000\u6B3E\u8BA2\u5355\uFF0C\u65E0\u6CD5\u5220\u9664 |
||||
|
channel.not.found=\u652F\u4ED8\u6E20\u9053\u7684\u914D\u7F6E\u4E0D\u5B58\u5728 |
||||
|
channel.is.disable=\u652F\u4ED8\u6E20\u9053\u5DF2\u7ECF\u7981\u7528 |
||||
|
channel.exists.same.channel.error=\u5DF2\u5B58\u5728\u76F8\u540C\u7684\u6E20\u9053 |
||||
|
order.not.found=\u652F\u4ED8\u8BA2\u5355\u4E0D\u5B58\u5728 |
||||
|
order.status.is.not.waiting=\u652F\u4ED8\u8BA2\u5355\u4E0D\u5904\u4E8E\u5F85\u652F\u4ED8 |
||||
|
order.status.is.success=\u8BA2\u5355\u5DF2\u652F\u4ED8\uFF0C\u8BF7\u5237\u65B0\u9875\u9762 |
||||
|
order.is.expired=\u652F\u4ED8\u8BA2\u5355\u5DF2\u7ECF\u8FC7\u671F |
||||
|
order.submit.channel.error=\u53D1\u8D77\u652F\u4ED8\u62A5\u9519\uFF0C\u9519\u8BEF\u7801\uFF1A{}\uFF0C\u9519\u8BEF\u63D0\u793A\uFF1A{} |
||||
|
order.refund.fail.status.error=\u652F\u4ED8\u8BA2\u5355\u9000\u6B3E\u5931\u8D25\uFF0C\u539F\u56E0\uFF1A\u72B6\u6001\u4E0D\u662F\u5DF2\u652F\u4ED8\u6216\u5DF2\u9000\u6B3E |
||||
|
order.extension.not.found=\u652F\u4ED8\u4EA4\u6613\u62D3\u5C55\u5355\u4E0D\u5B58\u5728 |
||||
|
order.extension.status.is.not.waiting=\u652F\u4ED8\u4EA4\u6613\u62D3\u5C55\u5355\u4E0D\u5904\u4E8E\u5F85\u652F\u4ED8 |
||||
|
order.extension.is.paid=\u8BA2\u5355\u5DF2\u652F\u4ED8\uFF0C\u8BF7\u7B49\u5F85\u652F\u4ED8\u7ED3\u679C |
||||
|
refund.price.exceed=\u9000\u6B3E\u91D1\u989D\u8D85\u8FC7\u8BA2\u5355\u53EF\u9000\u6B3E\u91D1\u989D |
||||
|
refund.has.refunding=\u5DF2\u7ECF\u6709\u9000\u6B3E\u5728\u5904\u7406\u4E2D |
||||
|
refund.exists=\u5DF2\u7ECF\u5B58\u5728\u9000\u6B3E\u5355 |
||||
|
refund.not.found=\u652F\u4ED8\u9000\u6B3E\u5355\u4E0D\u5B58\u5728 |
||||
|
refund.statue.is.not.waiting=\u652F\u4ED8\u9000\u6B3E\u5355\u4E0D\u5904\u4E8E\u5F85\u9000\u6B3E |
||||
|
demo.order.not.found=\u793A\u4F8B\u8BA2\u5355\u4E0D\u5B58\u5728 |
||||
|
demo.order.update.paid.status.not.unpaid=\u793A\u4F8B\u8BA2\u5355\u66F4\u65B0\u652F\u4ED8\u72B6\u6001\u5931\u8D25\uFF0C\u8BA2\u5355\u4E0D\u662F\u3010\u672A\u652F\u4ED8\u3011\u72B6\u6001 |
||||
|
demo.order.update.paid.fail.pay.order.id.error=\u793A\u4F8B\u8BA2\u5355\u66F4\u65B0\u652F\u4ED8\u72B6\u6001\u5931\u8D25\uFF0C\u652F\u4ED8\u5355\u7F16\u53F7\u4E0D\u5339\u914D |
||||
|
demo.order.update.paid.fail.pay.order.status.not.success=\u793A\u4F8B\u8BA2\u5355\u66F4\u65B0\u652F\u4ED8\u72B6\u6001\u5931\u8D25\uFF0C\u652F\u4ED8\u5355\u72B6\u6001\u4E0D\u662F\u3010\u652F\u4ED8\u6210\u529F\u3011\u72B6\u6001 |
||||
|
demo.order.update.paid.fail.pay.price.not.match=\u793A\u4F8B\u8BA2\u5355\u66F4\u65B0\u652F\u4ED8\u72B6\u6001\u5931\u8D25\uFF0C\u652F\u4ED8\u5355\u91D1\u989D\u4E0D\u5339\u914D |
||||
|
demo.order.refund.fail.not.paid=\u53D1\u8D77\u9000\u6B3E\u5931\u8D25\uFF0C\u793A\u4F8B\u8BA2\u5355\u672A\u652F\u4ED8 |
||||
|
demo.order.refund.fail.refunded=\u53D1\u8D77\u9000\u6B3E\u5931\u8D25\uFF0C\u793A\u4F8B\u8BA2\u5355\u5DF2\u9000\u6B3E |
||||
|
demo.order.refund.fail.refund.not.found=\u53D1\u8D77\u9000\u6B3E\u5931\u8D25\uFF0C\u9000\u6B3E\u8BA2\u5355\u4E0D\u5B58\u5728 |
||||
|
demo.order.refund.fail.refund.not.success=\u53D1\u8D77\u9000\u6B3E\u5931\u8D25\uFF0C\u9000\u6B3E\u8BA2\u5355\u672A\u9000\u6B3E\u6210\u529F |
||||
|
demo.order.refund.fail.refund.order.id.error=\u53D1\u8D77\u9000\u6B3E\u5931\u8D25\uFF0C\u9000\u6B3E\u5355\u7F16\u53F7\u4E0D\u5339\u914D |
||||
|
demo.order.refund.fail.refund.price.not.match=\u53D1\u8D77\u9000\u6B3E\u5931\u8D25\uFF0C\u9000\u6B3E\u5355\u91D1\u989D\u4E0D\u5339\u914D |
||||
|
device.can.send=No permission operation at present |
@ -0,0 +1,211 @@ |
|||||
|
#\u9519\u8BEF\u6D88\u606F |
||||
|
not.null=* \u5FC5\u987B\u586B\u5199 |
||||
|
user.jcaptcha.error=\u9A8C\u8BC1\u7801\u9519\u8BEF |
||||
|
user.jcaptcha.expire=\u9A8C\u8BC1\u7801\u5DF2\u5931\u6548 |
||||
|
user.not.exists=\u7528\u6237\u4E0D\u5B58\u5728/\u5BC6\u7801\u9519\u8BEF |
||||
|
user.password.not.match=\u7528\u6237\u4E0D\u5B58\u5728/\u5BC6\u7801\u9519\u8BEF |
||||
|
user.password.retry.limit.count=\u5BC6\u7801\u8F93\u5165\u9519\u8BEF{0}\u6B21 |
||||
|
user.password.retry.limit.exceed=\u5BC6\u7801\u8F93\u5165\u9519\u8BEF{0}\u6B21\uFF0C\u5E10\u6237\u9501\u5B9A{1}\u5206\u949F |
||||
|
user.password.delete=\u5BF9\u4E0D\u8D77\uFF0C\u60A8\u7684\u8D26\u53F7\u5DF2\u88AB\u5220\u9664 |
||||
|
user.blocked=\u7528\u6237\u5DF2\u5C01\u7981\uFF0C\u8BF7\u8054\u7CFB\u7BA1\u7406\u5458 |
||||
|
role.blocked=\u89D2\u8272\u5DF2\u5C01\u7981\uFF0C\u8BF7\u8054\u7CFB\u7BA1\u7406\u5458 |
||||
|
user.logout.success=\u9000\u51FA\u6210\u529F |
||||
|
|
||||
|
length.not.valid=\u957F\u5EA6\u5FC5\u987B\u5728{min}\u5230{max}\u4E2A\u5B57\u7B26\u4E4B\u95F4 |
||||
|
|
||||
|
user.username.not.valid=* 2\u523020\u4E2A\u6C49\u5B57\u3001\u5B57\u6BCD\u3001\u6570\u5B57\u6216\u4E0B\u5212\u7EBF\u7EC4\u6210\uFF0C\u4E14\u5FC5\u987B\u4EE5\u975E\u6570\u5B57\u5F00\u5934 |
||||
|
user.password.not.valid=* 5-50\u4E2A\u5B57\u7B26 |
||||
|
|
||||
|
user.email.not.valid=\u90AE\u7BB1\u683C\u5F0F\u9519\u8BEF |
||||
|
user.mobile.phone.number.not.valid=\u624B\u673A\u53F7\u683C\u5F0F\u9519\u8BEF |
||||
|
user.login.success=\u767B\u5F55\u6210\u529F |
||||
|
user.register.success=\u6CE8\u518C\u6210\u529F |
||||
|
user.notfound=\u8BF7\u91CD\u65B0\u767B\u5F55 |
||||
|
user.forcelogout=\u7BA1\u7406\u5458\u5F3A\u5236\u9000\u51FA\uFF0C\u8BF7\u91CD\u65B0\u767B\u5F55 |
||||
|
user.unknown.error=\u672A\u77E5\u9519\u8BEF\uFF0C\u8BF7\u91CD\u65B0\u767B\u5F55 |
||||
|
|
||||
|
##\u6743\u9650 |
||||
|
no.permission=\u60A8\u6CA1\u6709\u6570\u636E\u7684\u6743\u9650\uFF0C\u8BF7\u8054\u7CFB\u7BA1\u7406\u5458\u6DFB\u52A0\u6743\u9650 [{0}] |
||||
|
no.create.permission=\u60A8\u6CA1\u6709\u521B\u5EFA\u6570\u636E\u7684\u6743\u9650\uFF0C\u8BF7\u8054\u7CFB\u7BA1\u7406\u5458\u6DFB\u52A0\u6743\u9650 [{0}] |
||||
|
no.update.permission=\u60A8\u6CA1\u6709\u4FEE\u6539\u6570\u636E\u7684\u6743\u9650\uFF0C\u8BF7\u8054\u7CFB\u7BA1\u7406\u5458\u6DFB\u52A0\u6743\u9650 [{0}] |
||||
|
no.delete.permission=\u60A8\u6CA1\u6709\u5220\u9664\u6570\u636E\u7684\u6743\u9650\uFF0C\u8BF7\u8054\u7CFB\u7BA1\u7406\u5458\u6DFB\u52A0\u6743\u9650 [{0}] |
||||
|
no.export.permission=\u60A8\u6CA1\u6709\u5BFC\u51FA\u6570\u636E\u7684\u6743\u9650\uFF0C\u8BF7\u8054\u7CFB\u7BA1\u7406\u5458\u6DFB\u52A0\u6743\u9650 [{0}] |
||||
|
no.view.permission=\u60A8\u6CA1\u6709\u67E5\u770B\u6570\u636E\u7684\u6743\u9650\uFF0C\u8BF7\u8054\u7CFB\u7BA1\u7406\u5458\u6DFB\u52A0\u6743\u9650 [{0}] |
||||
|
|
||||
|
##\u6587\u4EF6\u4E0A\u4F20\u6D88\u606F |
||||
|
upload.exceed.maxSize=\u4E0A\u4F20\u7684\u6587\u4EF6\u5927\u5C0F\u8D85\u51FA\u9650\u5236\u7684\u6587\u4EF6\u5927\u5C0F\uFF01<br/>\u5141\u8BB8\u7684\u6587\u4EF6\u6700\u5927\u5927\u5C0F\u662F\uFF1A{0}MB\uFF01 |
||||
|
upload.filename.exceed.length=\u4E0A\u4F20\u7684\u6587\u4EF6\u540D\u6700\u957F{0}\u4E2A\u5B57\u7B26 |
||||
|
upload.success=\u4E0A\u4F20\u6210\u529F |
||||
|
|
||||
|
##\u6587\u4EF6\u4E0B\u8F7D\u6D88\u606F |
||||
|
download.filename.not.valid=\u6587\u4EF6\u540D\u79F0[{}]\u975E\u6CD5\uFF0C\u4E0D\u5141\u8BB8\u4E0B\u8F7D |
||||
|
download.file.failed=\u4E0B\u8F7D\u6587\u4EF6\u5931\u8D25 |
||||
|
download.resource.not.valid=\u8D44\u6E90\u6587\u4EF6[{}]\u975E\u6CD5\uFF0C\u4E0D\u5141\u8BB8\u4E0B\u8F7D |
||||
|
|
||||
|
##Dept |
||||
|
dept.add.failed.name.exists=\u65B0\u589E\u673A\u6784[{}]\u5931\u8D25\uFF0C\u673A\u6784\u540D\u79F0\u5DF2\u5B58\u5728 |
||||
|
dept.update.failed.name.exists=\u4FEE\u6539\u673A\u6784[{}]\u5931\u8D25\uFF0C\u673A\u6784\u540D\u79F0\u5DF2\u5B58\u5728 |
||||
|
dept.update.failed.parent.not.valid=\u4FEE\u6539\u673A\u6784[{}]\u5931\u8D25\uFF0C\u4E0A\u7EA7\u673A\u6784\u4E0D\u80FD\u662F\u81EA\u5DF1 |
||||
|
dept.update.failed.child.not.valid=\u8BE5\u673A\u6784\u5305\u542B\u672A\u505C\u7528\u7684\u5B50\u673A\u6784\uFF01 |
||||
|
dept.delete.failed.child.exists=\u5B58\u5728\u4E0B\u7EA7\u673A\u6784\uFF0C\u4E0D\u5141\u8BB8\u5220\u9664 |
||||
|
dept.delete.failed.user.exists=\u673A\u6784\u5B58\u5728\u7528\u6237\uFF0C\u4E0D\u5141\u8BB8\u5220\u9664 |
||||
|
|
||||
|
##Dict |
||||
|
dict.add.failed.type.exists=\u65B0\u589E\u5B57\u5178[{}]\u5931\u8D25\uFF0C\u5B57\u5178\u7C7B\u578B\u5DF2\u5B58\u5728 |
||||
|
dict.update.failed.type.exists=\u65B0\u589E\u5B57\u5178[{}]\u5931\u8D25\uFF0C\u5B57\u5178\u7C7B\u578B\u5DF2\u5B58\u5728 |
||||
|
|
||||
|
##Index |
||||
|
index.welcome.message=\u6B22\u8FCE\u4F7F\u7528{}\u540E\u53F0\u7BA1\u7406\u6846\u67B6\uFF0C\u5F53\u524D\u7248\u672C\uFF1Av{}\uFF0C\u8BF7\u901A\u8FC7\u524D\u7AEF\u5730\u5740\u8BBF\u95EE\u3002 |
||||
|
|
||||
|
##Menu |
||||
|
menu.add.failed.name.exists=\u65B0\u589E\u83DC\u5355[{}]\u5931\u8D25\uFF0C\u83DC\u5355\u540D\u79F0\u5DF2\u5B58\u5728 |
||||
|
menu.add.failed.path.not.valid=\u65B0\u589E\u83DC\u5355[{}]\u5931\u8D25\uFF0C\u5730\u5740\u5FC5\u987B\u4EE5http(s)://\u5F00\u5934 |
||||
|
menu.update.failed.name.exists=\u4FEE\u6539\u83DC\u5355[{}]\u5931\u8D25\uFF0C\u83DC\u5355\u540D\u79F0\u5DF2\u5B58\u5728 |
||||
|
menu.update.failed.path.not.valid=\u4FEE\u6539\u83DC\u5355[{}]\u5931\u8D25\uFF0C\u5730\u5740\u5FC5\u987B\u4EE5http(s)://\u5F00\u5934 |
||||
|
menu.update.failed.parent.not.valid=\u4FEE\u6539\u83DC\u5355[{}]\u5931\u8D25\uFF0C\u4E0A\u7EA7\u83DC\u5355\u4E0D\u80FD\u9009\u62E9\u81EA\u5DF1 |
||||
|
menu.delete.failed.child.exists=\u5B58\u5728\u5B50\u83DC\u5355,\u4E0D\u5141\u8BB8\u5220\u9664 |
||||
|
menu.delete.failed.role.exists=\u83DC\u5355\u5DF2\u5206\u914D,\u4E0D\u5141\u8BB8\u5220\u9664 |
||||
|
|
||||
|
##Post |
||||
|
post.add.failed.name.exists=\u65B0\u589E\u5C97\u4F4D[{}]\u5931\u8D25\uFF0C\u5C97\u4F4D\u540D\u79F0\u5DF2\u5B58\u5728 |
||||
|
post.add.failed.code.exists=\u65B0\u589E\u5C97\u4F4D[{}]\u5931\u8D25\uFF0C\u5C97\u4F4D\u7F16\u7801\u5DF2\u5B58\u5728 |
||||
|
post.update.failed.name.exists=\u4FEE\u6539\u5C97\u4F4D[{}]\u5931\u8D25\uFF0C\u5C97\u4F4D\u540D\u79F0\u5DF2\u5B58\u5728 |
||||
|
post.update.failed.code.exists=\u4FEE\u6539\u5C97\u4F4D[{}]\u5931\u8D25\uFF0C\u5C97\u4F4D\u7F16\u7801\u5DF2\u5B58\u5728 |
||||
|
|
||||
|
##User |
||||
|
user.username.exists=\u7CFB\u7EDF\u8D26\u53F7\u540D\u79F0\u5DF2\u5B58\u5728\uFF0C\u8BF7\u4FEE\u6539\u540E\u91CD\u8BD5 |
||||
|
user.password.differ=\u4E24\u6B21\u5BC6\u7801\u4E0D\u4E00\u81F4\uFF0C\u8BF7\u91CD\u65B0\u8F93\u5165 |
||||
|
user.add.failed.name.exists=\u65B0\u589E\u7528\u6237[{}]\u5931\u8D25\uFF0C\u767B\u5F55\u8D26\u53F7\u5DF2\u5B58\u5728 |
||||
|
user.add.failed.phone.exists=\u65B0\u589E\u7528\u6237[{}]\u5931\u8D25\uFF0C\u624B\u673A\u53F7\u7801\u5DF2\u5B58\u5728 |
||||
|
user.add.failed.email.exists=\u65B0\u589E\u7528\u6237[{}]\u5931\u8D25\uFF0C\u90AE\u7BB1\u8D26\u53F7\u5DF2\u5B58\u5728 |
||||
|
user.update.failed.password.wrong=\u4FEE\u6539\u5BC6\u7801\u5931\u8D25\uFF0C\u65E7\u5BC6\u7801\u9519\u8BEF |
||||
|
user.update.failed.password.repeat=\u65B0\u5BC6\u7801\u4E0D\u80FD\u4E0E\u65E7\u5BC6\u7801\u76F8\u540C |
||||
|
user.update.password.failed=\u4FEE\u6539\u5BC6\u7801\u5F02\u5E38\uFF0C\u8BF7\u8054\u7CFB\u7BA1\u7406\u5458 |
||||
|
user.update.failed.name.exists=\u65B0\u589E\u7528\u6237[{}]\u5931\u8D25\uFF0C\u767B\u5F55\u8D26\u53F7\u5DF2\u5B58\u5728 |
||||
|
user.update.failed.phone.exists=\u4FEE\u6539\u7528\u6237[{}]\u5931\u8D25\uFF0C\u624B\u673A\u53F7\u7801\u5DF2\u5B58\u5728 |
||||
|
user.update.failed.email.exists=\u4FEE\u6539\u7528\u6237[{}]\u5931\u8D25\uFF0C\u90AE\u7BB1\u8D26\u53F7\u5DF2\u5B58\u5728 |
||||
|
user.update.failed=\u4FEE\u6539\u4E2A\u4EBA\u4FE1\u606F\u5F02\u5E38\uFF0C\u8BF7\u8054\u7CFB\u7BA1\u7406\u5458 |
||||
|
user.delete.failed=\u5F53\u524D\u7528\u6237\u4E0D\u80FD\u5220\u9664 |
||||
|
user.upload.avatar.failed=\u4E0A\u4F20\u56FE\u7247\u5F02\u5E38\uFF0C\u8BF7\u8054\u7CFB\u7BA1\u7406\u5458 |
||||
|
user.not.login=\u8BF7\u767B\u5F55\u540E\u91CD\u8BD5 |
||||
|
user.access.denied=\u7528\u6237\u62D2\u7EDD\u8BBF\u95EE |
||||
|
|
||||
|
##Role |
||||
|
role.add.manager.failed=\u4E0D\u5141\u8BB8\u8BBE\u7F6E\u7BA1\u7406\u5458\u89D2\u8272\u6807\u8BC6 |
||||
|
role.add.failed.name.exists=\u65B0\u589E\u89D2\u8272[{}]\u5931\u8D25\uFF0C\u89D2\u8272\u540D\u79F0\u5DF2\u5B58\u5728 |
||||
|
role.add.failed.key.exists=\u65B0\u589E\u89D2\u8272[{}]\u5931\u8D25\uFF0C\u89D2\u8272\u6743\u9650\u5DF2\u5B58\u5728 |
||||
|
role.update.failed.name.exists=\u4FEE\u6539\u89D2\u8272[{}]\u5931\u8D25\uFF0C\u89D2\u8272\u540D\u79F0\u5DF2\u5B58\u5728 |
||||
|
role.update.failed.key.exists=\u4FEE\u6539\u89D2\u8272[{}]\u5931\u8D25\uFF0C\u89D2\u8272\u6743\u9650\u5DF2\u5B58\u5728 |
||||
|
role.update.failed=\u4FEE\u6539\u89D2\u8272[{}]\u5931\u8D25\uFF0C\u8BF7\u8054\u7CFB\u7BA1\u7406\u5458 |
||||
|
|
||||
|
##Import |
||||
|
import.failed.file.null=\u5BFC\u5165\u5931\u8D25\uFF0C\u8BF7\u5148\u4E0A\u4F20\u6587\u4EF6\uFF01 |
||||
|
import.failed.data.null=\u5BFC\u5165\u5931\u8D25\uFF0C\u5BFC\u5165\u6570\u636E\u4E3A\u7A7A\uFF01 |
||||
|
import.failed.device.name.null=\u5BFC\u5165\u5931\u8D25\uFF0C\u6A21\u677F\u91CC\u8BBE\u5907\u540D\u79F0\u4E0D\u80FD\u4E3A\u7A7A\uFF01 |
||||
|
import.success=\u5BFC\u5165\u6210\u529F |
||||
|
|
||||
|
##General |
||||
|
success=\u6210\u529F |
||||
|
fail=\u5931\u8D25 |
||||
|
query.success=\u67E5\u8BE2\u6210\u529F |
||||
|
operate.success=\u64CD\u4F5C\u6210\u529F |
||||
|
create.success=\u521B\u5EFA\u6210\u529F |
||||
|
create.failed=\u521B\u5EFA\u5931\u8D25 |
||||
|
save.success=\u4FDD\u5B58\u6210\u529F |
||||
|
save.failed=\u4FDD\u5B58\u5931\u8D25 |
||||
|
authorization.success=\u6388\u6743\u6210\u529F |
||||
|
|
||||
|
##Email |
||||
|
email.format.error=\u90AE\u7BB1\u683C\u5F0F\u9519\u8BEF |
||||
|
email.verification.code.send=\u90AE\u7BB1\u9A8C\u8BC1\u7801\u5DF2\u53D1\u9001 |
||||
|
|
||||
|
##Firmware |
||||
|
firmware.task.upgrade.failed.time.not.valid=\u9884\u5B9A\u5347\u7EA7\u65F6\u95F4\u5E94\u5927\u4E8E\u5F53\u524D\u65F6\u95F4 |
||||
|
##Media |
||||
|
media.record.query.failed=\u8FDE\u63A5\u8D85\u65F6\u6216\u53D1\u751F\u9519\u8BEF\uFF0C\u672A\u83B7\u53D6\u5230\u6570\u636E |
||||
|
##Modbus |
||||
|
modbus.type.null=\u7C7B\u578B\u4E3A\u7A7A |
||||
|
##Netty |
||||
|
netty.client.not.exists=\u5BA2\u6237\u7AEF\u4E0D\u5B58\u5728 |
||||
|
##Runtime |
||||
|
runtime.message.id.null=\u6D88\u606Fid\u4E3A\u7A7A |
||||
|
##Wechat |
||||
|
wechat.verify.type.null=\u8BF7\u4F20\u5165\u9A8C\u8BC1\u65B9\u5F0F |
||||
|
wechat.bind.message.id.null=\u8BF7\u4F20\u5165\u7ED1\u5B9A\u4FE1\u606FID |
||||
|
##AuthResource |
||||
|
auth.resource.product.query.success=\u67E5\u8BE2\u4EA7\u54C1\u5217\u8868\u6210\u529F |
||||
|
##Device |
||||
|
device.user.id.null=\u7528\u6237ID\u4E0D\u80FD\u4E3A\u7A7A |
||||
|
device.product.id.null=\u8BBE\u5907\u7F16\u53F7\u548C\u4EA7\u54C1ID\u4E0D\u80FD\u4E3A\u7A7A |
||||
|
device.dept.id.null=\u8BF7\u9009\u62E9\u5206\u914D\u673A\u6784 |
||||
|
device.id.null=\u8BF7\u9009\u62E9\u8BBE\u5907 |
||||
|
##DeviceJob |
||||
|
job.add.failed.cron.not.valid=\u65B0\u589E\u4EFB\u52A1[{}]\u5931\u8D25\uFF0CCron\u8868\u8FBE\u5F0F\u4E0D\u6B63\u786E |
||||
|
job.add.failed.rmi.not.valid=\u65B0\u589E\u4EFB\u52A1[{}]\u5931\u8D25\uFF0C\u76EE\u6807\u5B57\u7B26\u4E32\u4E0D\u5141\u8BB8'rmi'\u8C03\u7528 |
||||
|
job.add.failed.ldap.not.valid=\u65B0\u589E\u4EFB\u52A1[{}]\u5931\u8D25\uFF0C\u76EE\u6807\u5B57\u7B26\u4E32\u4E0D\u5141\u8BB8'ldap(s)'\u8C03\u7528 |
||||
|
job.add.failed.http.not.valid=\u65B0\u589E\u4EFB\u52A1[{}]\u5931\u8D25\uFF0C\u76EE\u6807\u5B57\u7B26\u4E32\u4E0D\u5141\u8BB8'http(s)'\u8C03\u7528 |
||||
|
job.add.failed.string.error=\u65B0\u589E\u4EFB\u52A1[{}]\u5931\u8D25\uFF0C\u76EE\u6807\u5B57\u7B26\u4E32\u5B58\u5728\u8FDD\u89C4 |
||||
|
job.add.failed.string.not.valid=\u65B0\u589E\u4EFB\u52A1[{}]\u5931\u8D25\uFF0C\u76EE\u6807\u5B57\u7B26\u4E32\u4E0D\u5728\u767D\u540D\u5355\u5185 |
||||
|
job.update.failed.cron.not.valid=\u4FEE\u6539\u4EFB\u52A1[{}]\u5931\u8D25\uFF0CCron\u8868\u8FBE\u5F0F\u4E0D\u6B63\u786E |
||||
|
job.update.failed.rmi.not.valid=\u4FEE\u6539\u4EFB\u52A1[{}]\u5931\u8D25\uFF0C\u76EE\u6807\u5B57\u7B26\u4E32\u4E0D\u5141\u8BB8'rmi'\u8C03\u7528 |
||||
|
job.update.failed.ldap.not.valid=\u4FEE\u6539\u4EFB\u52A1[{}]\u5931\u8D25\uFF0C\u76EE\u6807\u5B57\u7B26\u4E32\u4E0D\u5141\u8BB8'ldap(s)'\u8C03\u7528 |
||||
|
job.update.failed.http.not.valid=\u4FEE\u6539\u4EFB\u52A1[{}]\u5931\u8D25\uFF0C\u76EE\u6807\u5B57\u7B26\u4E32\u4E0D\u5141\u8BB8'http(s)'\u8C03\u7528 |
||||
|
job.update.failed.string.error=\u4FEE\u6539\u4EFB\u52A1[{}]\u5931\u8D25\uFF0C\u76EE\u6807\u5B57\u7B26\u4E32\u5B58\u5728\u8FDD\u89C4 |
||||
|
job.update.failed.string.not.valid=\u4FEE\u6539\u4EFB\u52A1[{}]\u5931\u8D25\uFF0C\u76EE\u6807\u5B57\u7B26\u4E32\u4E0D\u5728\u767D\u540D\u5355\u5185 |
||||
|
job.not.exists=\u4EFB\u52A1\u4E0D\u5B58\u5728\u6216\u5DF2\u8FC7\u671F |
||||
|
##DeviceUser |
||||
|
device.user.delete.failed.user.not.valid=\u8BBE\u5907\u6240\u6709\u8005\u4E0D\u80FD\u5220\u9664 |
||||
|
##GoviewProject |
||||
|
goview.project.data.save.failed.id.null=\u6CA1\u6709\u8BE5\u9879\u76EEID |
||||
|
goview.project.data.execute.sql.failed=\u8BF7\u7F16\u5199sql\u8BED\u53E5 |
||||
|
##ThingsModel |
||||
|
things.model.identifier.repeat=\u4EA7\u54C1\u4E0B\u7684\u6807\u8BC6\u7B26\u4E0D\u80FD\u91CD\u590D |
||||
|
things.model.import.failed.identifier.repeat=[{}]\u6761\u6570\u636E\u672A\u5BFC\u5165\uFF0C\u6807\u8BC6\u7B26\u91CD\u590D |
||||
|
##MQTT |
||||
|
mqtt.unauthorized=mqtt\u8D26\u53F7\u548C\u5BC6\u7801\u4E0E\u8BA4\u8BC1\u670D\u52A1\u5668\u914D\u7F6E\u4E0D\u5339\u914D |
||||
|
##Oauth |
||||
|
oauth.response.type.not.valid=response_type\u53C2\u6570\u503C\u53EA\u5141\u8BB8code\u548Ctoken |
||||
|
oauth.grant.type.null=\u672A\u77E5\u6388\u6743\u7C7B\u578B |
||||
|
oauth.grant.type.implicit.not.support=Token\u63A5\u53E3\u4E0D\u652F\u6301implicit\u6388\u6743\u6A21\u5F0F |
||||
|
oauth.access.token.null=\u8BBF\u95EE\u4EE4\u724C\u4E0D\u80FD\u4E3A\u7A7A |
||||
|
obtain.basic.authorization.failed=client_id\u6216client_secret\u672A\u6B63\u786E\u4F20\u9012 |
||||
|
##Record |
||||
|
record.app.null=app\u4E0D\u80FD\u4E3A\u7A7A |
||||
|
record.stream.null=stream\u4E0D\u80FD\u4E3A\u7A7A |
||||
|
record.time.not.valid=\u9519\u8BEF\u7684\u5F00\u59CB\u65F6\u95F4\u6216\u7ED3\u675F\u65F6\u95F4 |
||||
|
record.file.null=\u672A\u627E\u5230\u89C6\u9891\u6587\u4EF6 |
||||
|
|
||||
|
##ErrorCodeConstants |
||||
|
app.not.found=App \u4E0D\u5B58\u5728 |
||||
|
app.is.disable=App \u5DF2\u7ECF\u88AB\u7981\u7528 |
||||
|
app.exist.order.cant.delete=\u652F\u4ED8\u5E94\u7528\u5B58\u5728\u652F\u4ED8\u8BA2\u5355\uFF0C\u65E0\u6CD5\u5220\u9664 |
||||
|
app.exist.refund.cant.delete=\u652F\u4ED8\u5E94\u7528\u5B58\u5728\u9000\u6B3E\u8BA2\u5355\uFF0C\u65E0\u6CD5\u5220\u9664 |
||||
|
channel.not.found=\u652F\u4ED8\u6E20\u9053\u7684\u914D\u7F6E\u4E0D\u5B58\u5728 |
||||
|
channel.is.disable=\u652F\u4ED8\u6E20\u9053\u5DF2\u7ECF\u7981\u7528 |
||||
|
channel.exists.same.channel.error=\u5DF2\u5B58\u5728\u76F8\u540C\u7684\u6E20\u9053 |
||||
|
order.not.found=\u652F\u4ED8\u8BA2\u5355\u4E0D\u5B58\u5728 |
||||
|
order.status.is.not.waiting=\u652F\u4ED8\u8BA2\u5355\u4E0D\u5904\u4E8E\u5F85\u652F\u4ED8 |
||||
|
order.status.is.success=\u8BA2\u5355\u5DF2\u652F\u4ED8\uFF0C\u8BF7\u5237\u65B0\u9875\u9762 |
||||
|
order.is.expired=\u652F\u4ED8\u8BA2\u5355\u5DF2\u7ECF\u8FC7\u671F |
||||
|
order.submit.channel.error=\u53D1\u8D77\u652F\u4ED8\u62A5\u9519\uFF0C\u9519\u8BEF\u7801\uFF1A{}\uFF0C\u9519\u8BEF\u63D0\u793A\uFF1A{} |
||||
|
order.refund.fail.status.error=\u652F\u4ED8\u8BA2\u5355\u9000\u6B3E\u5931\u8D25\uFF0C\u539F\u56E0\uFF1A\u72B6\u6001\u4E0D\u662F\u5DF2\u652F\u4ED8\u6216\u5DF2\u9000\u6B3E |
||||
|
order.extension.not.found=\u652F\u4ED8\u4EA4\u6613\u62D3\u5C55\u5355\u4E0D\u5B58\u5728 |
||||
|
order.extension.status.is.not.waiting=\u652F\u4ED8\u4EA4\u6613\u62D3\u5C55\u5355\u4E0D\u5904\u4E8E\u5F85\u652F\u4ED8 |
||||
|
order.extension.is.paid=\u8BA2\u5355\u5DF2\u652F\u4ED8\uFF0C\u8BF7\u7B49\u5F85\u652F\u4ED8\u7ED3\u679C |
||||
|
refund.price.exceed=\u9000\u6B3E\u91D1\u989D\u8D85\u8FC7\u8BA2\u5355\u53EF\u9000\u6B3E\u91D1\u989D |
||||
|
refund.has.refunding=\u5DF2\u7ECF\u6709\u9000\u6B3E\u5728\u5904\u7406\u4E2D |
||||
|
refund.exists=\u5DF2\u7ECF\u5B58\u5728\u9000\u6B3E\u5355 |
||||
|
refund.not.found=\u652F\u4ED8\u9000\u6B3E\u5355\u4E0D\u5B58\u5728 |
||||
|
refund.statue.is.not.waiting=\u652F\u4ED8\u9000\u6B3E\u5355\u4E0D\u5904\u4E8E\u5F85\u9000\u6B3E |
||||
|
demo.order.not.found=\u793A\u4F8B\u8BA2\u5355\u4E0D\u5B58\u5728 |
||||
|
demo.order.update.paid.status.not.unpaid=\u793A\u4F8B\u8BA2\u5355\u66F4\u65B0\u652F\u4ED8\u72B6\u6001\u5931\u8D25\uFF0C\u8BA2\u5355\u4E0D\u662F\u3010\u672A\u652F\u4ED8\u3011\u72B6\u6001 |
||||
|
demo.order.update.paid.fail.pay.order.id.error=\u793A\u4F8B\u8BA2\u5355\u66F4\u65B0\u652F\u4ED8\u72B6\u6001\u5931\u8D25\uFF0C\u652F\u4ED8\u5355\u7F16\u53F7\u4E0D\u5339\u914D |
||||
|
demo.order.update.paid.fail.pay.order.status.not.success=\u793A\u4F8B\u8BA2\u5355\u66F4\u65B0\u652F\u4ED8\u72B6\u6001\u5931\u8D25\uFF0C\u652F\u4ED8\u5355\u72B6\u6001\u4E0D\u662F\u3010\u652F\u4ED8\u6210\u529F\u3011\u72B6\u6001 |
||||
|
demo.order.update.paid.fail.pay.price.not.match=\u793A\u4F8B\u8BA2\u5355\u66F4\u65B0\u652F\u4ED8\u72B6\u6001\u5931\u8D25\uFF0C\u652F\u4ED8\u5355\u91D1\u989D\u4E0D\u5339\u914D |
||||
|
demo.order.refund.fail.not.paid=\u53D1\u8D77\u9000\u6B3E\u5931\u8D25\uFF0C\u793A\u4F8B\u8BA2\u5355\u672A\u652F\u4ED8 |
||||
|
demo.order.refund.fail.refunded=\u53D1\u8D77\u9000\u6B3E\u5931\u8D25\uFF0C\u793A\u4F8B\u8BA2\u5355\u5DF2\u9000\u6B3E |
||||
|
demo.order.refund.fail.refund.not.found=\u53D1\u8D77\u9000\u6B3E\u5931\u8D25\uFF0C\u9000\u6B3E\u8BA2\u5355\u4E0D\u5B58\u5728 |
||||
|
demo.order.refund.fail.refund.not.success=\u53D1\u8D77\u9000\u6B3E\u5931\u8D25\uFF0C\u9000\u6B3E\u8BA2\u5355\u672A\u9000\u6B3E\u6210\u529F |
||||
|
demo.order.refund.fail.refund.order.id.error=\u53D1\u8D77\u9000\u6B3E\u5931\u8D25\uFF0C\u9000\u6B3E\u5355\u7F16\u53F7\u4E0D\u5339\u914D |
||||
|
demo.order.refund.fail.refund.price.not.match=\u53D1\u8D77\u9000\u6B3E\u5931\u8D25\uFF0C\u9000\u6B3E\u5355\u91D1\u989D\u4E0D\u5339\u914D |
||||
|
device.can.send=\u6682\u65E0\u6743\u9650\u64CD\u4F5C |
@ -0,0 +1,150 @@ |
|||||
|
<?xml version="1.0" encoding="UTF-8"?> |
||||
|
<configuration> |
||||
|
<!-- 日志存放路径 --> |
||||
|
<property name="log.path" scope="context" value="/logs" /> |
||||
|
<!-- 日志输出格式 --> |
||||
|
<property name="log.pattern" value="%d{HH:mm:ss.SSS} [%thread] %-5level %logger{20} - [%method,%line] - %msg%n" /> |
||||
|
|
||||
|
<!-- 控制台输出 --> |
||||
|
<appender name="console" class="ch.qos.logback.core.ConsoleAppender"> |
||||
|
<encoder> |
||||
|
<pattern>${log.pattern}</pattern> |
||||
|
</encoder> |
||||
|
</appender> |
||||
|
|
||||
|
|
||||
|
<!-- 系统日志输出 --> |
||||
|
<appender name="file_debug" class="ch.qos.logback.core.rolling.RollingFileAppender"> |
||||
|
<file>${log.path}/sys-debug.log</file> |
||||
|
<!-- 循环政策:基于时间创建日志文件 --> |
||||
|
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> |
||||
|
<!-- 日志文件名格式 --> |
||||
|
<fileNamePattern>${log.path}/sys-debug.%d{yyyy-MM-dd}.log</fileNamePattern> |
||||
|
<!-- 日志最大的历史 10天 --> |
||||
|
<maxHistory>10</maxHistory> |
||||
|
</rollingPolicy> |
||||
|
<encoder> |
||||
|
<pattern>${log.pattern}</pattern> |
||||
|
</encoder> |
||||
|
<filter class="ch.qos.logback.classic.filter.LevelFilter"> |
||||
|
<!-- 过滤的级别 DEBUG--> |
||||
|
<level>DEBUG</level> |
||||
|
<!-- 匹配时的操作:接收(记录) --> |
||||
|
<onMatch>ACCEPT</onMatch> |
||||
|
<!-- 不匹配时的操作:拒绝(不记录) --> |
||||
|
<onMismatch>DENY</onMismatch> |
||||
|
</filter> |
||||
|
</appender> |
||||
|
|
||||
|
<!-- 系统日志输出 --> |
||||
|
<appender name="file_info" class="ch.qos.logback.core.rolling.RollingFileAppender"> |
||||
|
<file>${log.path}/sys-info.log</file> |
||||
|
<!-- 循环政策:基于时间创建日志文件 --> |
||||
|
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> |
||||
|
<!-- 日志文件名格式 --> |
||||
|
<fileNamePattern>${log.path}/sys-info.%d{yyyy-MM-dd}.log</fileNamePattern> |
||||
|
<!-- 日志最大的历史 10天 --> |
||||
|
<maxHistory>10</maxHistory> |
||||
|
</rollingPolicy> |
||||
|
<encoder> |
||||
|
<pattern>${log.pattern}</pattern> |
||||
|
</encoder> |
||||
|
<filter class="ch.qos.logback.classic.filter.LevelFilter"> |
||||
|
<!-- 过滤的级别 --> |
||||
|
<level>INFO</level> |
||||
|
<!-- 匹配时的操作:接收(记录) --> |
||||
|
<onMatch>ACCEPT</onMatch> |
||||
|
<!-- 不匹配时的操作:拒绝(不记录) --> |
||||
|
<onMismatch>DENY</onMismatch> |
||||
|
</filter> |
||||
|
</appender> |
||||
|
|
||||
|
<appender name="file_error" class="ch.qos.logback.core.rolling.RollingFileAppender"> |
||||
|
<file>${log.path}/sys-error.log</file> |
||||
|
<!-- 循环政策:基于时间创建日志文件 --> |
||||
|
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> |
||||
|
<!-- 日志文件名格式 --> |
||||
|
<fileNamePattern>${log.path}/sys-error.%d{yyyy-MM-dd}.log</fileNamePattern> |
||||
|
<!-- 日志最大的历史 10天 --> |
||||
|
<maxHistory>10</maxHistory> |
||||
|
</rollingPolicy> |
||||
|
<encoder> |
||||
|
<pattern>${log.pattern}</pattern> |
||||
|
</encoder> |
||||
|
<filter class="ch.qos.logback.classic.filter.LevelFilter"> |
||||
|
<!-- 过滤的级别 --> |
||||
|
<level>ERROR</level> |
||||
|
<!-- 匹配时的操作:接收(记录) --> |
||||
|
<onMatch>ACCEPT</onMatch> |
||||
|
<!-- 不匹配时的操作:拒绝(不记录) --> |
||||
|
<onMismatch>DENY</onMismatch> |
||||
|
</filter> |
||||
|
</appender> |
||||
|
|
||||
|
<!-- 用户访问日志输出 --> |
||||
|
<appender name="sys-user" class="ch.qos.logback.core.rolling.RollingFileAppender"> |
||||
|
<file>${log.path}/sys-user.log</file> |
||||
|
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> |
||||
|
<!-- 按天回滚 daily --> |
||||
|
<fileNamePattern>${log.path}/sys-user.%d{yyyy-MM-dd}.log</fileNamePattern> |
||||
|
<!-- 日志最大的历史 10天 --> |
||||
|
<maxHistory>10</maxHistory> |
||||
|
</rollingPolicy> |
||||
|
<encoder> |
||||
|
<pattern>${log.pattern}</pattern> |
||||
|
</encoder> |
||||
|
</appender> |
||||
|
|
||||
|
<!-- 规则脚本日志输出 --> |
||||
|
<appender name="script" class="ch.qos.logback.classic.sift.SiftingAppender"> |
||||
|
<discriminator> |
||||
|
<Key>scriptId</Key> |
||||
|
<DefaultValue>0</DefaultValue> |
||||
|
</discriminator> |
||||
|
<sift> |
||||
|
<appender name="execute-script" class="ch.qos.logback.core.rolling.RollingFileAppender"> |
||||
|
<file>${log.path}/script/${scriptId}.log</file> |
||||
|
<Append>true</Append> |
||||
|
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">--> |
||||
|
<!-- 按月回滚 daily --> |
||||
|
<fileNamePattern>${log.path}/rule.%d{yyyy-MM}.log</fileNamePattern> |
||||
|
<!-- 日志最大的历史 3个月 --> |
||||
|
<maxHistory>3</maxHistory> |
||||
|
</rollingPolicy> |
||||
|
<encoder> |
||||
|
<pattern>%d{HH:mm:ss.SSS} [%method,%line] - %msg%n</pattern> |
||||
|
</encoder> |
||||
|
<filter class="ch.qos.logback.classic.filter.ThresholdFilter"> |
||||
|
<level>INFO</level> |
||||
|
</filter> |
||||
|
</appender> |
||||
|
</sift> |
||||
|
</appender> |
||||
|
|
||||
|
<!-- 系统模块日志级别控制 --> |
||||
|
<logger name="com.fastbee" level="debug" /> |
||||
|
<!-- Spring日志级别控制 --> |
||||
|
<logger name="org.springframework" level="warn" /> |
||||
|
|
||||
|
<root level="info"> |
||||
|
<appender-ref ref="console" /> |
||||
|
</root> |
||||
|
|
||||
|
<!--系统操作日志--> |
||||
|
<root level="info"> |
||||
|
<appender-ref ref="file_debug"/> |
||||
|
<appender-ref ref="file_info" /> |
||||
|
<appender-ref ref="file_error" /> |
||||
|
</root> |
||||
|
|
||||
|
<!--系统用户操作日志--> |
||||
|
<logger name="sys-user" level="info"> |
||||
|
<appender-ref ref="sys-user"/> |
||||
|
</logger> |
||||
|
|
||||
|
<!--规则引擎日志--> |
||||
|
<logger name="script" level="info"> |
||||
|
<appender-ref ref="script"/> |
||||
|
</logger> |
||||
|
|
||||
|
</configuration> |
@ -0,0 +1,20 @@ |
|||||
|
<?xml version="1.0" encoding="UTF-8" ?> |
||||
|
<!DOCTYPE configuration |
||||
|
PUBLIC "-//mybatis.org//DTD Config 3.0//EN" |
||||
|
"http://mybatis.org/dtd/mybatis-3-config.dtd"> |
||||
|
<configuration> |
||||
|
<!-- 全局参数 --> |
||||
|
<settings> |
||||
|
<!-- 使全局的映射器启用或禁用缓存 --> |
||||
|
<setting name="cacheEnabled" value="true" /> |
||||
|
<!-- 允许JDBC 支持自动生成主键 --> |
||||
|
<setting name="useGeneratedKeys" value="true" /> |
||||
|
<!-- 配置默认的执行器.SIMPLE就是普通执行器;REUSE执行器会重用预处理语句(prepared statements);BATCH执行器将重用语句并执行批量更新 --> |
||||
|
<setting name="defaultExecutorType" value="SIMPLE" /> |
||||
|
<!-- 指定 MyBatis 所用日志的具体实现 --> |
||||
|
<setting name="logImpl" value="SLF4J" /> |
||||
|
<!-- 使用驼峰命名法转换字段 --> |
||||
|
<!-- <setting name="mapUnderscoreToCamelCase" value="true"/> --> |
||||
|
</settings> |
||||
|
|
||||
|
</configuration> |
@ -0,0 +1,59 @@ |
|||||
|
mode: |
||||
|
type: Standalone |
||||
|
repository: |
||||
|
type: JDBC |
||||
|
props: |
||||
|
# 是否显示 ShardingSpher 的sql,用于Debug |
||||
|
sql-show: true |
||||
|
datasource: |
||||
|
# 配置真实数据源 |
||||
|
names: ds0,ds1 |
||||
|
ds0: # 配置 mysql 数据源 |
||||
|
type: com.alibaba.druid.pool.DruidDataSource |
||||
|
driver-class-name: com.mysql.cj.jdbc.Driver |
||||
|
url: jdbc:mysql://localhost:3306/fastbee?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8 |
||||
|
username: root |
||||
|
password: fastbee |
||||
|
filters: stat,wall |
||||
|
filter: |
||||
|
stat: |
||||
|
enabled: true |
||||
|
# 慢SQL记录 |
||||
|
log-slow-sql: true |
||||
|
slow-sql-millis: 1000 |
||||
|
merge-sql: true |
||||
|
wall: |
||||
|
config: |
||||
|
multi-statement-allow: true |
||||
|
ds1: # 配置 mysql 数据源 |
||||
|
type: com.alibaba.druid.pool.DruidDataSource |
||||
|
driver-class-name: com.mysql.cj.jdbc.Driver |
||||
|
url: jdbc:mysql://localhost:3306/information_schema?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8 |
||||
|
username: root |
||||
|
password: fastbee |
||||
|
|
||||
|
rules: # 配置表规则 |
||||
|
sharding: |
||||
|
# 表策略配置 |
||||
|
tables: |
||||
|
# iot_device_log 是逻辑表 |
||||
|
iot_device_log: |
||||
|
actualDataNodes: ds0.iot_device_log_$->{2024..2030}0$->{1..9},ds0.iot_device_log_$->{2024..2030}1$->{0..2} |
||||
|
tableStrategy: |
||||
|
# 使用标准分片策略 |
||||
|
standard: |
||||
|
# 配置分片字段 |
||||
|
shardingColumn: create_time |
||||
|
# 分片算法名称,不支持大写字母和下划线,否则启动就会报错 |
||||
|
shardingAlgorithmName: time-sharding-algorithm |
||||
|
# 分片算法配置 |
||||
|
shardingAlgorithms: |
||||
|
# 分片算法名称,不支持大写字母和下划线,否则启动就会报错 |
||||
|
time-sharding-algorithm: |
||||
|
# 类型:自定义策略 |
||||
|
type: CLASS_BASED |
||||
|
props: |
||||
|
# 分片策略 |
||||
|
strategy: standard |
||||
|
# 分片算法类 |
||||
|
algorithmClassName: com.fastbee.framework.config.sharding.TimeShardingAlgorithm |
@ -0,0 +1 @@ |
|||||
|
restart.include.json=/com.alibaba.fastjson2.*.jar |
@ -0,0 +1,76 @@ |
|||||
|
# 数据源配置 |
||||
|
spring: |
||||
|
datasource: |
||||
|
dynamic: |
||||
|
primary: master |
||||
|
strict: false |
||||
|
datasource: |
||||
|
master: |
||||
|
type: com.alibaba.druid.pool.DruidDataSource |
||||
|
driver-class-name: com.mysql.cj.jdbc.Driver |
||||
|
url: jdbc:mysql://192.168.28.130:3306/fastbee?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8 |
||||
|
username: root |
||||
|
password: root |
||||
|
|
||||
|
sharding: |
||||
|
url: jdbc:shardingsphere:classpath:sharding-sphere-config.yaml |
||||
|
driver-class-name: org.apache.shardingsphere.driver.ShardingSphereDriver |
||||
|
taos: # 配置 taos 数据源 |
||||
|
enabled: true |
||||
|
type: com.alibaba.druid.pool.DruidDataSource |
||||
|
driver-class-name: com.taosdata.jdbc.TSDBDriver |
||||
|
url: jdbc:TAOS://192.168.28.130:6030/fastbee_log?timezone=UTC-8&charset=utf-8 |
||||
|
username: root |
||||
|
password: taosdata |
||||
|
dbName: fastbee_log |
||||
|
|
||||
|
# redis 配置 |
||||
|
redis: |
||||
|
host: 192.168.28.130 # 地址 |
||||
|
port: 6379 # 端口,默认为6379 |
||||
|
database: 0 # 数据库索引 |
||||
|
# password: fastbee # 密码 |
||||
|
timeout: 10s # 连接超时时间 |
||||
|
lettuce: |
||||
|
pool: |
||||
|
min-idle: 0 # 连接池中的最小空闲连接 |
||||
|
max-idle: 8 # 连接池中的最大空闲连接 |
||||
|
max-active: 8 # 连接池的最大数据库连接数 |
||||
|
max-wait: -1ms # 连接池最大阻塞等待时间(使用负值表示没有限制) |
||||
|
# mqtt 配置 |
||||
|
mqtt: |
||||
|
username: admin # 账号 |
||||
|
password: public # 密码 |
||||
|
host-url: tcp://192.168.28.130:1883 # mqtt连接tcp地址 |
||||
|
client-id: ${random.int} # 客户端Id,不能相同,采用随机数 ${random.value} |
||||
|
default-topic: test # 默认主题 |
||||
|
timeout: 30 # 超时时间 |
||||
|
keepalive: 30 # 保持连接 |
||||
|
clearSession: true # 清除会话(设置为false,断开连接,重连后使用原来的会话 保留订阅的主题,能接收离线期间的消息) |
||||
|
|
||||
|
# sip 配置 |
||||
|
sip: |
||||
|
enabled: true # 是否启用视频监控SIP,true为启用 |
||||
|
## 本地调试时,绑定网卡局域网IP,设备在同一局域网,设备接入IP填写绑定IP |
||||
|
## 部署服务端时,默认绑定容器IP,设备接入IP填写服务器公网IP |
||||
|
ip: 192.168.0.77 |
||||
|
port: 5061 # SIP端口(保持默认) |
||||
|
domain: 3402000000 # 由省级、市级、区级、基层编号组成 |
||||
|
id: 34020000002000000001 # 同上,另外增加编号,(可保持默认) |
||||
|
password: 12345678 # 监控设备接入的密码 |
||||
|
log: true |
||||
|
zlmRecordPath: /opt/media/bin/www |
||||
|
|
||||
|
# 日志配置 |
||||
|
logging: |
||||
|
level: |
||||
|
com.fastbee: debug |
||||
|
com.yomahub: debug |
||||
|
org.dromara: warn |
||||
|
org.springframework: warn |
||||
|
|
||||
|
# Swagger配置 |
||||
|
swagger: |
||||
|
enabled: true # 是否开启swagger |
||||
|
pathMapping: /dev-api # 请求前缀 |
||||
|
|
@ -0,0 +1,91 @@ |
|||||
|
# 数据源配置 |
||||
|
spring: |
||||
|
datasource: |
||||
|
dynamic: |
||||
|
primary: master |
||||
|
strict: false |
||||
|
datasource: |
||||
|
master: |
||||
|
type: com.alibaba.druid.pool.DruidDataSource |
||||
|
driver-class-name: com.mysql.cj.jdbc.Driver |
||||
|
url: jdbc:mysql://177.7.0.11:3306/fastbee?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8 |
||||
|
username: root |
||||
|
password: fastbee |
||||
|
filters: stat,wall |
||||
|
filter: |
||||
|
stat: |
||||
|
enabled: true |
||||
|
# 慢SQL记录 |
||||
|
log-slow-sql: true |
||||
|
slow-sql-millis: 1000 |
||||
|
merge-sql: true |
||||
|
wall: |
||||
|
config: |
||||
|
multi-statement-allow: true |
||||
|
# slave: |
||||
|
# type: com.alibaba.druid.pool.DruidDataSource |
||||
|
# driver-class-name: com.mysql.cj.jdbc.Driver |
||||
|
# url: jdbc:mysql://localhost:3306/fastbee1?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8 |
||||
|
# username: root |
||||
|
# password: fastbee |
||||
|
sharding: |
||||
|
url: jdbc:shardingsphere:classpath:sharding-sphere-config.yaml |
||||
|
driver-class-name: org.apache.shardingsphere.driver.ShardingSphereDriver |
||||
|
taos: # 配置 taos 数据源 |
||||
|
enabled: true |
||||
|
type: com.alibaba.druid.pool.DruidDataSource |
||||
|
driver-class-name: com.taosdata.jdbc.TSDBDriver |
||||
|
url: jdbc:TAOS://fastbee:6030/fastbee_log?timezone=UTC-8&charset=utf-8 |
||||
|
username: root |
||||
|
password: taosdata |
||||
|
dbName: fastbee_log |
||||
|
# redis 配置 |
||||
|
redis: |
||||
|
host: 177.7.0.10 # 地址 |
||||
|
port: 6379 # 端口,默认为6379 |
||||
|
database: 0 # 数据库索引 |
||||
|
password: fastbee # 密码 |
||||
|
timeout: 10s # 连接超时时间 |
||||
|
lettuce: |
||||
|
pool: |
||||
|
min-idle: 0 # 连接池中的最小空闲连接 |
||||
|
max-idle: 8 # 连接池中的最大空闲连接 |
||||
|
max-active: 8 # 连接池的最大数据库连接数 |
||||
|
max-wait: -1ms # 连接池最大阻塞等待时间(使用负值表示没有限制) |
||||
|
# mqtt 配置 |
||||
|
mqtt: |
||||
|
username: fastbee # 账号(仅用于后端自认证) |
||||
|
password: fastbee # 密码(仅用于后端自认证) |
||||
|
host-url: tcp://177.7.0.12:1883 # 连接 Emqx 消息服务器地址 |
||||
|
# host-url: tcp://177.7.0.13:1883 # 内置netty mqtt broker地址 |
||||
|
client-id: ${random.int} # 客户端Id,不能相同,采用随机数 ${random.value} |
||||
|
default-topic: test # 默认主题 |
||||
|
timeout: 30 # 超时时间 |
||||
|
keepalive: 30 # 保持连接 |
||||
|
clearSession: true # 清除会话(设置为false,断开连接,重连后使用原来的会话 保留订阅的主题,能接收离线期间的消息) |
||||
|
|
||||
|
# sip 配置 |
||||
|
sip: |
||||
|
enabled: true # 是否启用视频监控SIP,true为启用 |
||||
|
## 本地调试时,绑定网卡局域网IP,设备在同一局域网,设备接入IP填写绑定IP |
||||
|
## 部署服务端时,默认绑定容器IP,设备接入IP填写服务器公网IP |
||||
|
ip: 177.7.0.13 |
||||
|
port: 5061 # SIP端口(保持默认) |
||||
|
domain: 3402000000 # 由省级、市级、区级、基层编号组成 |
||||
|
id: 34020000002000000001 # 同上,另外增加编号,(可保持默认) |
||||
|
password: 12345678 # 监控设备接入的密码 |
||||
|
log: false |
||||
|
zlmRecordPath: /opt/media/bin/www |
||||
|
|
||||
|
# 日志配置 |
||||
|
logging: |
||||
|
level: |
||||
|
com.fastbee: debug |
||||
|
com.yomahub: warn |
||||
|
org.dromara: warn |
||||
|
org.springframework: warn |
||||
|
|
||||
|
# Swagger配置 |
||||
|
swagger: |
||||
|
enabled: true # 是否开启swagger |
||||
|
pathMapping: /prod-api # 请求前缀 |
@ -0,0 +1,91 @@ |
|||||
|
# 数据源配置 |
||||
|
spring: |
||||
|
datasource: |
||||
|
dynamic: |
||||
|
primary: master |
||||
|
strict: false |
||||
|
datasource: |
||||
|
master: |
||||
|
type: com.alibaba.druid.pool.DruidDataSource |
||||
|
driver-class-name: com.mysql.cj.jdbc.Driver |
||||
|
url: jdbc:mysql://localhost:3306/fastbee?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8 |
||||
|
username: root |
||||
|
password: fastbee |
||||
|
filters: stat,wall |
||||
|
filter: |
||||
|
stat: |
||||
|
enabled: true |
||||
|
# 慢SQL记录 |
||||
|
log-slow-sql: true |
||||
|
slow-sql-millis: 1000 |
||||
|
merge-sql: true |
||||
|
wall: |
||||
|
config: |
||||
|
multi-statement-allow: true |
||||
|
# slave: |
||||
|
# type: com.alibaba.druid.pool.DruidDataSource |
||||
|
# driver-class-name: com.mysql.cj.jdbc.Driver |
||||
|
# url: jdbc:mysql://localhost:3306/fastbee1?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8 |
||||
|
# username: root |
||||
|
# password: fastbee |
||||
|
sharding: |
||||
|
url: jdbc:shardingsphere:classpath:sharding-sphere-config.yaml |
||||
|
driver-class-name: org.apache.shardingsphere.driver.ShardingSphereDriver |
||||
|
taos: # 配置 taos 数据源 |
||||
|
enabled: true |
||||
|
type: com.alibaba.druid.pool.DruidDataSource |
||||
|
driver-class-name: com.taosdata.jdbc.TSDBDriver |
||||
|
url: jdbc:TAOS://fastbee:6030/fastbee_log?timezone=UTC-8&charset=utf-8 |
||||
|
username: root |
||||
|
password: taosdata |
||||
|
dbName: fastbee_log |
||||
|
# redis 配置 |
||||
|
redis: |
||||
|
host: localhost # 地址 |
||||
|
port: 6379 # 端口,默认为6379 |
||||
|
database: 3 # 数据库索引 |
||||
|
password: fastbee # 密码 |
||||
|
timeout: 10s # 连接超时时间 |
||||
|
lettuce: |
||||
|
pool: |
||||
|
min-idle: 0 # 连接池中的最小空闲连接 |
||||
|
max-idle: 8 # 连接池中的最大空闲连接 |
||||
|
max-active: 8 # 连接池的最大数据库连接数 |
||||
|
max-wait: -1ms # 连接池最大阻塞等待时间(使用负值表示没有限制) |
||||
|
# mqtt 配置 |
||||
|
mqtt: |
||||
|
username: fastbee # 账号 |
||||
|
password: fastbee # 密码 |
||||
|
host-url: tcp://localhost:1883 # mqtt连接tcp地址 |
||||
|
client-id: ${random.int} # 客户端Id,不能相同,采用随机数 ${random.value} |
||||
|
default-topic: test # 默认主题 |
||||
|
timeout: 30 # 超时时间 |
||||
|
keepalive: 30 # 保持连接 |
||||
|
clearSession: true # 清除会话(设置为false,断开连接,重连后使用原来的会话 保留订阅的主题,能接收离线期间的消息) |
||||
|
|
||||
|
# sip 配置 |
||||
|
sip: |
||||
|
enabled: true # 是否启用视频监控SIP,true为启用 |
||||
|
## 默认为容器IP,IDE启动可以写本地网卡内网IP或者127.0.0.1 |
||||
|
## 本地调试需保持设备与服务器在同一局域网 |
||||
|
ip: 192.168.31.165 |
||||
|
port: 5061 # SIP端口(保持默认) |
||||
|
domain: 3402000000 # 由省级、市级、区级、基层编号组成 |
||||
|
id: 34020000002000000001 # 同上,另外增加编号,(可保持默认) |
||||
|
password: 12345678 # 监控设备接入的密码 |
||||
|
log: true |
||||
|
zlmRecordPath: /opt/media/bin/www |
||||
|
|
||||
|
# 日志配置 |
||||
|
logging: |
||||
|
level: |
||||
|
com.fastbee: debug |
||||
|
com.yomahub: debug |
||||
|
org.dromara: warn |
||||
|
org.springframework: warn |
||||
|
|
||||
|
# Swagger配置 |
||||
|
swagger: |
||||
|
enabled: true # 是否开启swagger |
||||
|
pathMapping: /dev-api # 请求前缀 |
||||
|
|
@ -0,0 +1,213 @@ |
|||||
|
# 项目相关配置 |
||||
|
fastbee: |
||||
|
name: iot-platform # 名称 |
||||
|
version: 1.0.0 # 版本 |
||||
|
copyrightYear: 2025 # 版权年份 |
||||
|
demoEnabled: false # 实例演示开关 |
||||
|
# 文件路径,以uploadPath结尾 示例( Windows配置 D:/uploadPath,Linux配置 /uploadPath) |
||||
|
profile: D:/uploadPath |
||||
|
addressEnabled: true # 获取ip地址开关 |
||||
|
captchaType: math # 验证码类型 math 数组计算 char 字符验证 |
||||
|
|
||||
|
# 开发环境配置 |
||||
|
server: |
||||
|
port: 8080 # 服务器的HTTP端口,默认为8080 |
||||
|
servlet: |
||||
|
context-path: / # 应用的访问路径 |
||||
|
tomcat: |
||||
|
uri-encoding: UTF-8 # tomcat的URI编码 |
||||
|
accept-count: 1000 # 连接数满后的排队数,默认为100 |
||||
|
threads: |
||||
|
max: 800 # tomcat最大线程数,默认为200 |
||||
|
min-spare: 100 # Tomcat启动初始化的线程数,默认值10 |
||||
|
# 基于netty的服务器 |
||||
|
broker: |
||||
|
enabled: false # mqttBroker类型选择, true: 基于netty的mqttBroker和webSocket false: emq的mqttBroker |
||||
|
port: 1883 |
||||
|
websocket-port: 8083 |
||||
|
websocket-path: /mqtt |
||||
|
keep-alive: 70 # 默认的全部客户端心跳上传时间 |
||||
|
#TCP服务端口 |
||||
|
tcp: |
||||
|
enabled: true # 控制tcp端口是否开启 |
||||
|
port: 8888 |
||||
|
keep-alive: 70 |
||||
|
delimiter: 0x7e |
||||
|
udp: |
||||
|
enabled: false # 控制udp端口是否开启 |
||||
|
port: 8889 |
||||
|
read-idle: 300 # udp保活时间 默认5分钟 |
||||
|
http: |
||||
|
enabled: false |
||||
|
port: 8081 |
||||
|
auth: |
||||
|
type: Basic # 支持Basic,Digest |
||||
|
user: |
||||
|
name: fastbee |
||||
|
password: fastbee |
||||
|
coap: |
||||
|
enabled: false |
||||
|
port: 5683 |
||||
|
|
||||
|
# Spring配置 |
||||
|
spring: |
||||
|
# 环境配置,dev=开发环境,prod=生产环境 |
||||
|
profiles: |
||||
|
active: dev # 环境配置,dev=开发环境,prod=生产环境 |
||||
|
# 资源信息 |
||||
|
messages: |
||||
|
# 国际化资源文件路径 |
||||
|
basename: i18n/messages |
||||
|
# 文件上传 |
||||
|
servlet: |
||||
|
multipart: |
||||
|
max-file-size: 10MB # 单个文件大小 |
||||
|
max-request-size: 20MB # 设置总上传的文件大小 |
||||
|
# 服务模块 |
||||
|
devtools: |
||||
|
restart: |
||||
|
enabled: true # 热部署开关 |
||||
|
task: |
||||
|
execution: |
||||
|
pool: |
||||
|
core-size: 20 # 最小连接数 |
||||
|
max-size: 200 # 最大连接数 |
||||
|
queue-capacity: 3000 # 最大容量 |
||||
|
keep-alive: 60 |
||||
|
# 缓存配置 |
||||
|
cache: |
||||
|
enable: false |
||||
|
type: none # none=不使用缓存 redis=使用redis缓存 |
||||
|
ttl: 1800 # 缓存过期时间(默认60秒) |
||||
|
datasource: |
||||
|
druid: |
||||
|
webStatFilter: |
||||
|
enabled: true |
||||
|
stat-view-servlet: |
||||
|
enabled: true |
||||
|
allow: |
||||
|
url-pattern: /druid/* |
||||
|
loginUsername: fastbee |
||||
|
loginPassword: fastbee |
||||
|
|
||||
|
# 用户配置 |
||||
|
user: |
||||
|
password: |
||||
|
maxRetryCount: 5 # 密码最大错误次数 |
||||
|
lockTime: 10 # 密码锁定时间(默认10分钟) |
||||
|
|
||||
|
# token配置 |
||||
|
token: |
||||
|
header: Authorization # 令牌自定义标识 |
||||
|
secret: abcdefghijklfastbeesmartrstuvwxyz # 令牌密钥 |
||||
|
expireTime: 1440 # 令牌有效期(默认30分钟)1440为一天 |
||||
|
|
||||
|
# MyBatis配置 |
||||
|
#mybatis: |
||||
|
# typeAliasesPackage: com.fastbee.**.domain # 搜索指定包别名 |
||||
|
# mapperLocations: classpath*:mapper/**/*Mapper.xml # 配置mapper的扫描,找到所有的mapper.xml映射文件 |
||||
|
# configLocation: classpath:mybatis/mybatis-config.xml # 加载全局的配置文件 |
||||
|
|
||||
|
# mybatis-plus配置 |
||||
|
mybatis-plus: |
||||
|
typeAliasesPackage: com.fastbee.**.domain # 搜索指定包别名 |
||||
|
mapperLocations: classpath*:mapper/**/*Mapper.xml # 配置mapper的扫描,找到所有的mapper.xml映射文件 |
||||
|
configLocation: classpath:mybatis/mybatis-config.xml # 加载全局的配置文件 |
||||
|
global-config: |
||||
|
db-config: |
||||
|
id-type: AUTO # 自增 ID |
||||
|
logic-delete-value: 1 # 逻辑已删除值(默认为 1) |
||||
|
logic-not-delete-value: 0 # 逻辑未删除值(默认为 0) |
||||
|
|
||||
|
# PageHelper分页插件 |
||||
|
pagehelper: |
||||
|
helperDialect: mysql |
||||
|
supportMethodsArguments: true |
||||
|
params: count=countSql |
||||
|
|
||||
|
# 防止XSS攻击 |
||||
|
xss: |
||||
|
enabled: true # 过滤开关 |
||||
|
excludes: /system/notice # 排除链接(多个用逗号分隔) |
||||
|
urlPatterns: /system/*,/monitor/*,/tool/* # 匹配链接 |
||||
|
|
||||
|
# EMQX API配置需要在运行emqx之后去EMQX管理后台手动创建API Key和Secret,并配置到application.yml中 |
||||
|
emqx: |
||||
|
host: localhost # EMQX服务器地址 |
||||
|
port: 18083 |
||||
|
ApiKey: ApiKey # EMQX API Key |
||||
|
ApiSecret: ApiSecret # EMQX API Secret |
||||
|
|
||||
|
# redisson 配置 |
||||
|
redisson: |
||||
|
# redis key前缀 |
||||
|
keyPrefix: sql_cache |
||||
|
# 线程池数量 |
||||
|
threads: 16 |
||||
|
# Netty线程池数量 |
||||
|
nettyThreads: 32 |
||||
|
# 单节点配置 |
||||
|
singleServerConfig: |
||||
|
# 客户端名称 |
||||
|
clientName: ${fastbee.name} |
||||
|
# 最小空闲连接数 |
||||
|
connectionMinimumIdleSize: 32 |
||||
|
# 连接池大小 |
||||
|
connectionPoolSize: 64 |
||||
|
# 连接空闲超时,单位:毫秒 |
||||
|
idleConnectionTimeout: 10000 |
||||
|
# 命令等待超时,单位:毫秒 |
||||
|
timeout: 3000 |
||||
|
# 发布和订阅连接池大小 |
||||
|
subscriptionConnectionPoolSize: 50 |
||||
|
|
||||
|
forest: # Forest配置 版本为1.5.36 |
||||
|
backend: okhttp3 # 后端HTTP框架(默认为 okhttp3) |
||||
|
max-connections: 1000 # 连接池最大连接数(默认为 500) |
||||
|
max-route-connections: 500 # 每个路由的最大连接数(默认为 500) |
||||
|
max-request-queue-size: 100 # [自v1.5.22版本起可用] 最大请求等待队列大小 |
||||
|
max-async-thread-size: 300 # [自v1.5.21版本起可用] 最大异步线程数 |
||||
|
max-async-queue-size: 16 # [自v1.5.22版本起可用] 最大异步线程池队列大小 |
||||
|
connect-timeout: 3000 # 连接超时时间,单位为毫秒(默认为 timeout) |
||||
|
read-timeout: 3000 # 数据读取超时时间,单位为毫秒(默认为 timeout) |
||||
|
max-retry-count: 0 # 请求失败后重试次数(默认为 0 次不重试) |
||||
|
ssl-protocol: TLS # 单向验证的HTTPS的默认TLS协议(默认为 TLS) |
||||
|
log-enabled: true # 打开或关闭日志(默认为 true) |
||||
|
log-request: true # 打开/关闭Forest请求日志(默认为 true) |
||||
|
log-response-status: true # 打开/关闭Forest响应状态日志(默认为 true) |
||||
|
log-response-content: true # 打开/关闭Forest响应内容日志(默认为 false) |
||||
|
async-mode: platform # [自v1.5.27版本起可用] 异步模式(默认为 platform) |
||||
|
|
||||
|
liteflow: |
||||
|
#FlowExecutor的execute2Future的线程数,默认为64 |
||||
|
main-executor-works: 64 |
||||
|
#FlowExecutor的execute2Future的自定义线程池Builder |
||||
|
main-executor-class: com.fastbee.ruleEngine.config.MainExecutorBuilder |
||||
|
#并行节点的线程池Builder |
||||
|
thread-executor-class: com.fastbee.ruleEngine.config.WhenExecutorBuilder |
||||
|
rule-source-ext-data-map: |
||||
|
# 应用名称,规则链和脚本组件名称需要一致,不要修改 |
||||
|
applicationName: fastbee |
||||
|
#是否开启SQL日志 |
||||
|
sqlLogEnabled: true |
||||
|
# 规则多时,启用快速加载模式 |
||||
|
fast-load: false |
||||
|
#是否开启SQL数据轮询自动刷新机制 默认不开启 |
||||
|
pollingEnabled: false |
||||
|
pollingIntervalSeconds: 60 |
||||
|
pollingStartSeconds: 60 |
||||
|
#以下是chain表的配置 |
||||
|
chainTableName: iot_scene |
||||
|
chainApplicationNameField: application_name |
||||
|
chainNameField: chain_name |
||||
|
elDataField: el_data |
||||
|
chainEnableField: enable |
||||
|
#以下是script表的配置 |
||||
|
scriptTableName: iot_script |
||||
|
scriptApplicationNameField: application_name |
||||
|
scriptIdField: script_id |
||||
|
scriptNameField: script_name |
||||
|
scriptDataField: script_data |
||||
|
scriptTypeField: script_type |
||||
|
scriptLanguageField: script_language |
||||
|
scriptEnableField: enable |
@ -0,0 +1,2 @@ |
|||||
|
Application Version: ${fastbee.version} |
||||
|
Spring Boot Version: ${spring-boot.version} |
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -0,0 +1,210 @@ |
|||||
|
#\u9519\u8BEF\u6D88\u606F |
||||
|
not.null=* \u5FC5\u987B\u586B\u5199 |
||||
|
user.jcaptcha.error=\u9A8C\u8BC1\u7801\u9519\u8BEF |
||||
|
user.jcaptcha.expire=\u9A8C\u8BC1\u7801\u5DF2\u5931\u6548 |
||||
|
user.not.exists=\u7528\u6237\u4E0D\u5B58\u5728/\u5BC6\u7801\u9519\u8BEF |
||||
|
user.password.not.match=\u7528\u6237\u4E0D\u5B58\u5728/\u5BC6\u7801\u9519\u8BEF |
||||
|
user.password.retry.limit.count=\u5BC6\u7801\u8F93\u5165\u9519\u8BEF{0}\u6B21 |
||||
|
user.password.retry.limit.exceed=\u5BC6\u7801\u8F93\u5165\u9519\u8BEF{0}\u6B21\uFF0C\u5E10\u6237\u9501\u5B9A{1}\u5206\u949F |
||||
|
user.password.delete=\u5BF9\u4E0D\u8D77\uFF0C\u60A8\u7684\u8D26\u53F7\u5DF2\u88AB\u5220\u9664 |
||||
|
user.blocked=\u7528\u6237\u5DF2\u5C01\u7981\uFF0C\u8BF7\u8054\u7CFB\u7BA1\u7406\u5458 |
||||
|
role.blocked=\u89D2\u8272\u5DF2\u5C01\u7981\uFF0C\u8BF7\u8054\u7CFB\u7BA1\u7406\u5458 |
||||
|
user.logout.success=\u9000\u51FA\u6210\u529F |
||||
|
|
||||
|
length.not.valid=\u957F\u5EA6\u5FC5\u987B\u5728{min}\u5230{max}\u4E2A\u5B57\u7B26\u4E4B\u95F4 |
||||
|
|
||||
|
user.username.not.valid=* 2\u523020\u4E2A\u6C49\u5B57\u3001\u5B57\u6BCD\u3001\u6570\u5B57\u6216\u4E0B\u5212\u7EBF\u7EC4\u6210\uFF0C\u4E14\u5FC5\u987B\u4EE5\u975E\u6570\u5B57\u5F00\u5934 |
||||
|
user.password.not.valid=* 5-50\u4E2A\u5B57\u7B26 |
||||
|
|
||||
|
user.email.not.valid=\u90AE\u7BB1\u683C\u5F0F\u9519\u8BEF |
||||
|
user.mobile.phone.number.not.valid=\u624B\u673A\u53F7\u683C\u5F0F\u9519\u8BEF |
||||
|
user.login.success=\u767B\u5F55\u6210\u529F |
||||
|
user.register.success=\u6CE8\u518C\u6210\u529F |
||||
|
user.notfound=\u8BF7\u91CD\u65B0\u767B\u5F55 |
||||
|
user.forcelogout=\u7BA1\u7406\u5458\u5F3A\u5236\u9000\u51FA\uFF0C\u8BF7\u91CD\u65B0\u767B\u5F55 |
||||
|
user.unknown.error=\u672A\u77E5\u9519\u8BEF\uFF0C\u8BF7\u91CD\u65B0\u767B\u5F55 |
||||
|
|
||||
|
##\u6743\u9650 |
||||
|
no.permission=\u60A8\u6CA1\u6709\u6570\u636E\u7684\u6743\u9650\uFF0C\u8BF7\u8054\u7CFB\u7BA1\u7406\u5458\u6DFB\u52A0\u6743\u9650 [{0}] |
||||
|
no.create.permission=\u60A8\u6CA1\u6709\u521B\u5EFA\u6570\u636E\u7684\u6743\u9650\uFF0C\u8BF7\u8054\u7CFB\u7BA1\u7406\u5458\u6DFB\u52A0\u6743\u9650 [{0}] |
||||
|
no.update.permission=\u60A8\u6CA1\u6709\u4FEE\u6539\u6570\u636E\u7684\u6743\u9650\uFF0C\u8BF7\u8054\u7CFB\u7BA1\u7406\u5458\u6DFB\u52A0\u6743\u9650 [{0}] |
||||
|
no.delete.permission=\u60A8\u6CA1\u6709\u5220\u9664\u6570\u636E\u7684\u6743\u9650\uFF0C\u8BF7\u8054\u7CFB\u7BA1\u7406\u5458\u6DFB\u52A0\u6743\u9650 [{0}] |
||||
|
no.export.permission=\u60A8\u6CA1\u6709\u5BFC\u51FA\u6570\u636E\u7684\u6743\u9650\uFF0C\u8BF7\u8054\u7CFB\u7BA1\u7406\u5458\u6DFB\u52A0\u6743\u9650 [{0}] |
||||
|
no.view.permission=\u60A8\u6CA1\u6709\u67E5\u770B\u6570\u636E\u7684\u6743\u9650\uFF0C\u8BF7\u8054\u7CFB\u7BA1\u7406\u5458\u6DFB\u52A0\u6743\u9650 [{0}] |
||||
|
|
||||
|
##\u6587\u4EF6\u4E0A\u4F20\u6D88\u606F |
||||
|
upload.exceed.maxSize=\u4E0A\u4F20\u7684\u6587\u4EF6\u5927\u5C0F\u8D85\u51FA\u9650\u5236\u7684\u6587\u4EF6\u5927\u5C0F\uFF01<br/>\u5141\u8BB8\u7684\u6587\u4EF6\u6700\u5927\u5927\u5C0F\u662F\uFF1A{0}MB\uFF01 |
||||
|
upload.filename.exceed.length=\u4E0A\u4F20\u7684\u6587\u4EF6\u540D\u6700\u957F{0}\u4E2A\u5B57\u7B26 |
||||
|
upload.success=\u4E0A\u4F20\u6210\u529F |
||||
|
|
||||
|
##\u6587\u4EF6\u4E0B\u8F7D\u6D88\u606F |
||||
|
download.filename.not.valid=\u6587\u4EF6\u540D\u79F0[{}]\u975E\u6CD5\uFF0C\u4E0D\u5141\u8BB8\u4E0B\u8F7D |
||||
|
download.file.failed=\u4E0B\u8F7D\u6587\u4EF6\u5931\u8D25 |
||||
|
download.resource.not.valid=\u8D44\u6E90\u6587\u4EF6[{}]\u975E\u6CD5\uFF0C\u4E0D\u5141\u8BB8\u4E0B\u8F7D |
||||
|
|
||||
|
##Dept |
||||
|
dept.add.failed.name.exists=\u65B0\u589E\u673A\u6784[{}]\u5931\u8D25\uFF0C\u673A\u6784\u540D\u79F0\u5DF2\u5B58\u5728 |
||||
|
dept.update.failed.name.exists=\u4FEE\u6539\u673A\u6784[{}]\u5931\u8D25\uFF0C\u673A\u6784\u540D\u79F0\u5DF2\u5B58\u5728 |
||||
|
dept.update.failed.parent.not.valid=\u4FEE\u6539\u673A\u6784[{}]\u5931\u8D25\uFF0C\u4E0A\u7EA7\u673A\u6784\u4E0D\u80FD\u662F\u81EA\u5DF1 |
||||
|
dept.update.failed.child.not.valid=\u8BE5\u673A\u6784\u5305\u542B\u672A\u505C\u7528\u7684\u5B50\u673A\u6784\uFF01 |
||||
|
dept.delete.failed.child.exists=\u5B58\u5728\u4E0B\u7EA7\u673A\u6784\uFF0C\u4E0D\u5141\u8BB8\u5220\u9664 |
||||
|
dept.delete.failed.user.exists=\u673A\u6784\u5B58\u5728\u7528\u6237\uFF0C\u4E0D\u5141\u8BB8\u5220\u9664 |
||||
|
|
||||
|
##Dict |
||||
|
dict.add.failed.type.exists=\u65B0\u589E\u5B57\u5178[{}]\u5931\u8D25\uFF0C\u5B57\u5178\u7C7B\u578B\u5DF2\u5B58\u5728 |
||||
|
dict.update.failed.type.exists=\u65B0\u589E\u5B57\u5178[{}]\u5931\u8D25\uFF0C\u5B57\u5178\u7C7B\u578B\u5DF2\u5B58\u5728 |
||||
|
|
||||
|
##Index |
||||
|
index.welcome.message=\u6B22\u8FCE\u4F7F\u7528{}\u540E\u53F0\u7BA1\u7406\u6846\u67B6\uFF0C\u5F53\u524D\u7248\u672C\uFF1Av{}\uFF0C\u8BF7\u901A\u8FC7\u524D\u7AEF\u5730\u5740\u8BBF\u95EE\u3002 |
||||
|
|
||||
|
##Menu |
||||
|
menu.add.failed.name.exists=\u65B0\u589E\u83DC\u5355[{}]\u5931\u8D25\uFF0C\u83DC\u5355\u540D\u79F0\u5DF2\u5B58\u5728 |
||||
|
menu.add.failed.path.not.valid=\u65B0\u589E\u83DC\u5355[{}]\u5931\u8D25\uFF0C\u5730\u5740\u5FC5\u987B\u4EE5http(s)://\u5F00\u5934 |
||||
|
menu.update.failed.name.exists=\u4FEE\u6539\u83DC\u5355[{}]\u5931\u8D25\uFF0C\u83DC\u5355\u540D\u79F0\u5DF2\u5B58\u5728 |
||||
|
menu.update.failed.path.not.valid=\u4FEE\u6539\u83DC\u5355[{}]\u5931\u8D25\uFF0C\u5730\u5740\u5FC5\u987B\u4EE5http(s)://\u5F00\u5934 |
||||
|
menu.update.failed.parent.not.valid=\u4FEE\u6539\u83DC\u5355[{}]\u5931\u8D25\uFF0C\u4E0A\u7EA7\u83DC\u5355\u4E0D\u80FD\u9009\u62E9\u81EA\u5DF1 |
||||
|
menu.delete.failed.child.exists=\u5B58\u5728\u5B50\u83DC\u5355,\u4E0D\u5141\u8BB8\u5220\u9664 |
||||
|
menu.delete.failed.role.exists=\u83DC\u5355\u5DF2\u5206\u914D,\u4E0D\u5141\u8BB8\u5220\u9664 |
||||
|
|
||||
|
##Post |
||||
|
post.add.failed.name.exists=\u65B0\u589E\u5C97\u4F4D[{}]\u5931\u8D25\uFF0C\u5C97\u4F4D\u540D\u79F0\u5DF2\u5B58\u5728 |
||||
|
post.add.failed.code.exists=\u65B0\u589E\u5C97\u4F4D[{}]\u5931\u8D25\uFF0C\u5C97\u4F4D\u7F16\u7801\u5DF2\u5B58\u5728 |
||||
|
post.update.failed.name.exists=\u4FEE\u6539\u5C97\u4F4D[{}]\u5931\u8D25\uFF0C\u5C97\u4F4D\u540D\u79F0\u5DF2\u5B58\u5728 |
||||
|
post.update.failed.code.exists=\u4FEE\u6539\u5C97\u4F4D[{}]\u5931\u8D25\uFF0C\u5C97\u4F4D\u7F16\u7801\u5DF2\u5B58\u5728 |
||||
|
|
||||
|
##User |
||||
|
user.username.exists=\u7CFB\u7EDF\u8D26\u53F7\u540D\u79F0\u5DF2\u5B58\u5728\uFF0C\u8BF7\u4FEE\u6539\u540E\u91CD\u8BD5 |
||||
|
user.password.differ=\u4E24\u6B21\u5BC6\u7801\u4E0D\u4E00\u81F4\uFF0C\u8BF7\u91CD\u65B0\u8F93\u5165 |
||||
|
user.add.failed.name.exists=\u65B0\u589E\u7528\u6237[{}]\u5931\u8D25\uFF0C\u767B\u5F55\u8D26\u53F7\u5DF2\u5B58\u5728 |
||||
|
user.add.failed.phone.exists=\u65B0\u589E\u7528\u6237[{}]\u5931\u8D25\uFF0C\u624B\u673A\u53F7\u7801\u5DF2\u5B58\u5728 |
||||
|
user.add.failed.email.exists=\u65B0\u589E\u7528\u6237[{}]\u5931\u8D25\uFF0C\u90AE\u7BB1\u8D26\u53F7\u5DF2\u5B58\u5728 |
||||
|
user.update.failed.password.wrong=\u4FEE\u6539\u5BC6\u7801\u5931\u8D25\uFF0C\u65E7\u5BC6\u7801\u9519\u8BEF |
||||
|
user.update.failed.password.repeat=\u65B0\u5BC6\u7801\u4E0D\u80FD\u4E0E\u65E7\u5BC6\u7801\u76F8\u540C |
||||
|
user.update.password.failed=\u4FEE\u6539\u5BC6\u7801\u5F02\u5E38\uFF0C\u8BF7\u8054\u7CFB\u7BA1\u7406\u5458 |
||||
|
user.update.failed.name.exists=\u65B0\u589E\u7528\u6237[{}]\u5931\u8D25\uFF0C\u767B\u5F55\u8D26\u53F7\u5DF2\u5B58\u5728 |
||||
|
user.update.failed.phone.exists=\u4FEE\u6539\u7528\u6237[{}]\u5931\u8D25\uFF0C\u624B\u673A\u53F7\u7801\u5DF2\u5B58\u5728 |
||||
|
user.update.failed.email.exists=\u4FEE\u6539\u7528\u6237[{}]\u5931\u8D25\uFF0C\u90AE\u7BB1\u8D26\u53F7\u5DF2\u5B58\u5728 |
||||
|
user.update.failed=\u4FEE\u6539\u4E2A\u4EBA\u4FE1\u606F\u5F02\u5E38\uFF0C\u8BF7\u8054\u7CFB\u7BA1\u7406\u5458 |
||||
|
user.delete.failed=\u5F53\u524D\u7528\u6237\u4E0D\u80FD\u5220\u9664 |
||||
|
user.upload.avatar.failed=\u4E0A\u4F20\u56FE\u7247\u5F02\u5E38\uFF0C\u8BF7\u8054\u7CFB\u7BA1\u7406\u5458 |
||||
|
user.not.login=\u8BF7\u767B\u5F55\u540E\u91CD\u8BD5 |
||||
|
user.access.denied=\u7528\u6237\u62D2\u7EDD\u8BBF\u95EE |
||||
|
|
||||
|
##Role |
||||
|
role.add.manager.failed=\u4E0D\u5141\u8BB8\u8BBE\u7F6E\u7BA1\u7406\u5458\u89D2\u8272\u6807\u8BC6 |
||||
|
role.add.failed.name.exists=\u65B0\u589E\u89D2\u8272[{}]\u5931\u8D25\uFF0C\u89D2\u8272\u540D\u79F0\u5DF2\u5B58\u5728 |
||||
|
role.add.failed.key.exists=\u65B0\u589E\u89D2\u8272[{}]\u5931\u8D25\uFF0C\u89D2\u8272\u6743\u9650\u5DF2\u5B58\u5728 |
||||
|
role.update.failed.name.exists=\u4FEE\u6539\u89D2\u8272[{}]\u5931\u8D25\uFF0C\u89D2\u8272\u540D\u79F0\u5DF2\u5B58\u5728 |
||||
|
role.update.failed.key.exists=\u4FEE\u6539\u89D2\u8272[{}]\u5931\u8D25\uFF0C\u89D2\u8272\u6743\u9650\u5DF2\u5B58\u5728 |
||||
|
role.update.failed=\u4FEE\u6539\u89D2\u8272[{}]\u5931\u8D25\uFF0C\u8BF7\u8054\u7CFB\u7BA1\u7406\u5458 |
||||
|
|
||||
|
##Import |
||||
|
import.failed.file.null=\u5BFC\u5165\u5931\u8D25\uFF0C\u8BF7\u5148\u4E0A\u4F20\u6587\u4EF6\uFF01 |
||||
|
import.failed.data.null=\u5BFC\u5165\u5931\u8D25\uFF0C\u5BFC\u5165\u6570\u636E\u4E3A\u7A7A\uFF01 |
||||
|
import.failed.device.name.null=\u5BFC\u5165\u5931\u8D25\uFF0C\u6A21\u677F\u91CC\u8BBE\u5907\u540D\u79F0\u4E0D\u80FD\u4E3A\u7A7A\uFF01 |
||||
|
import.success=\u5BFC\u5165\u6210\u529F |
||||
|
|
||||
|
##General |
||||
|
success=\u6210\u529F |
||||
|
fail=\u5931\u8D25 |
||||
|
query.success=\u67E5\u8BE2\u6210\u529F |
||||
|
operate.success=\u64CD\u4F5C\u6210\u529F |
||||
|
create.success=\u521B\u5EFA\u6210\u529F |
||||
|
create.failed=\u521B\u5EFA\u5931\u8D25 |
||||
|
save.success=\u4FDD\u5B58\u6210\u529F |
||||
|
save.failed=\u4FDD\u5B58\u5931\u8D25 |
||||
|
authorization.success=\u6388\u6743\u6210\u529F |
||||
|
|
||||
|
##Email |
||||
|
email.format.error=\u90AE\u7BB1\u683C\u5F0F\u9519\u8BEF |
||||
|
email.verification.code.send=\u90AE\u7BB1\u9A8C\u8BC1\u7801\u5DF2\u53D1\u9001 |
||||
|
|
||||
|
##Firmware |
||||
|
firmware.task.upgrade.failed.time.not.valid=\u9884\u5B9A\u5347\u7EA7\u65F6\u95F4\u5E94\u5927\u4E8E\u5F53\u524D\u65F6\u95F4 |
||||
|
##Media |
||||
|
media.record.query.failed=\u8FDE\u63A5\u8D85\u65F6\u6216\u53D1\u751F\u9519\u8BEF\uFF0C\u672A\u83B7\u53D6\u5230\u6570\u636E |
||||
|
##Modbus |
||||
|
modbus.type.null=\u7C7B\u578B\u4E3A\u7A7A |
||||
|
##Netty |
||||
|
netty.client.not.exists=\u5BA2\u6237\u7AEF\u4E0D\u5B58\u5728 |
||||
|
##Runtime |
||||
|
runtime.message.id.null=\u6D88\u606Fid\u4E3A\u7A7A |
||||
|
##Wechat |
||||
|
wechat.verify.type.null=\u8BF7\u4F20\u5165\u9A8C\u8BC1\u65B9\u5F0F |
||||
|
wechat.bind.message.id.null=\u8BF7\u4F20\u5165\u7ED1\u5B9A\u4FE1\u606FID |
||||
|
##AuthResource |
||||
|
auth.resource.product.query.success=\u67E5\u8BE2\u4EA7\u54C1\u5217\u8868\u6210\u529F |
||||
|
##Device |
||||
|
device.user.id.null=\u7528\u6237ID\u4E0D\u80FD\u4E3A\u7A7A |
||||
|
device.product.id.null=\u8BBE\u5907\u7F16\u53F7\u548C\u4EA7\u54C1ID\u4E0D\u80FD\u4E3A\u7A7A |
||||
|
device.dept.id.null=\u8BF7\u9009\u62E9\u5206\u914D\u673A\u6784 |
||||
|
device.id.null=\u8BF7\u9009\u62E9\u8BBE\u5907 |
||||
|
##DeviceJob |
||||
|
job.add.failed.cron.not.valid=\u65B0\u589E\u4EFB\u52A1[{}]\u5931\u8D25\uFF0CCron\u8868\u8FBE\u5F0F\u4E0D\u6B63\u786E |
||||
|
job.add.failed.rmi.not.valid=\u65B0\u589E\u4EFB\u52A1[{}]\u5931\u8D25\uFF0C\u76EE\u6807\u5B57\u7B26\u4E32\u4E0D\u5141\u8BB8'rmi'\u8C03\u7528 |
||||
|
job.add.failed.ldap.not.valid=\u65B0\u589E\u4EFB\u52A1[{}]\u5931\u8D25\uFF0C\u76EE\u6807\u5B57\u7B26\u4E32\u4E0D\u5141\u8BB8'ldap(s)'\u8C03\u7528 |
||||
|
job.add.failed.http.not.valid=\u65B0\u589E\u4EFB\u52A1[{}]\u5931\u8D25\uFF0C\u76EE\u6807\u5B57\u7B26\u4E32\u4E0D\u5141\u8BB8'http(s)'\u8C03\u7528 |
||||
|
job.add.failed.string.error=\u65B0\u589E\u4EFB\u52A1[{}]\u5931\u8D25\uFF0C\u76EE\u6807\u5B57\u7B26\u4E32\u5B58\u5728\u8FDD\u89C4 |
||||
|
job.add.failed.string.not.valid=\u65B0\u589E\u4EFB\u52A1[{}]\u5931\u8D25\uFF0C\u76EE\u6807\u5B57\u7B26\u4E32\u4E0D\u5728\u767D\u540D\u5355\u5185 |
||||
|
job.update.failed.cron.not.valid=\u4FEE\u6539\u4EFB\u52A1[{}]\u5931\u8D25\uFF0CCron\u8868\u8FBE\u5F0F\u4E0D\u6B63\u786E |
||||
|
job.update.failed.rmi.not.valid=\u4FEE\u6539\u4EFB\u52A1[{}]\u5931\u8D25\uFF0C\u76EE\u6807\u5B57\u7B26\u4E32\u4E0D\u5141\u8BB8'rmi'\u8C03\u7528 |
||||
|
job.update.failed.ldap.not.valid=\u4FEE\u6539\u4EFB\u52A1[{}]\u5931\u8D25\uFF0C\u76EE\u6807\u5B57\u7B26\u4E32\u4E0D\u5141\u8BB8'ldap(s)'\u8C03\u7528 |
||||
|
job.update.failed.http.not.valid=\u4FEE\u6539\u4EFB\u52A1[{}]\u5931\u8D25\uFF0C\u76EE\u6807\u5B57\u7B26\u4E32\u4E0D\u5141\u8BB8'http(s)'\u8C03\u7528 |
||||
|
job.update.failed.string.error=\u4FEE\u6539\u4EFB\u52A1[{}]\u5931\u8D25\uFF0C\u76EE\u6807\u5B57\u7B26\u4E32\u5B58\u5728\u8FDD\u89C4 |
||||
|
job.update.failed.string.not.valid=\u4FEE\u6539\u4EFB\u52A1[{}]\u5931\u8D25\uFF0C\u76EE\u6807\u5B57\u7B26\u4E32\u4E0D\u5728\u767D\u540D\u5355\u5185 |
||||
|
job.not.exists=\u4EFB\u52A1\u4E0D\u5B58\u5728\u6216\u5DF2\u8FC7\u671F |
||||
|
##DeviceUser |
||||
|
device.user.delete.failed.user.not.valid=\u8BBE\u5907\u6240\u6709\u8005\u4E0D\u80FD\u5220\u9664 |
||||
|
##GoviewProject |
||||
|
goview.project.data.save.failed.id.null=\u6CA1\u6709\u8BE5\u9879\u76EEID |
||||
|
goview.project.data.execute.sql.failed=\u8BF7\u7F16\u5199sql\u8BED\u53E5 |
||||
|
##ThingsModel |
||||
|
things.model.identifier.repeat=\u4EA7\u54C1\u4E0B\u7684\u6807\u8BC6\u7B26\u4E0D\u80FD\u91CD\u590D |
||||
|
things.model.import.failed.identifier.repeat=[{}]\u6761\u6570\u636E\u672A\u5BFC\u5165\uFF0C\u6807\u8BC6\u7B26\u91CD\u590D |
||||
|
##MQTT |
||||
|
mqtt.unauthorized=mqtt\u8D26\u53F7\u548C\u5BC6\u7801\u4E0E\u8BA4\u8BC1\u670D\u52A1\u5668\u914D\u7F6E\u4E0D\u5339\u914D |
||||
|
##Oauth |
||||
|
oauth.response.type.not.valid=response_type\u53C2\u6570\u503C\u53EA\u5141\u8BB8code\u548Ctoken |
||||
|
oauth.grant.type.null=\u672A\u77E5\u6388\u6743\u7C7B\u578B |
||||
|
oauth.grant.type.implicit.not.support=Token\u63A5\u53E3\u4E0D\u652F\u6301implicit\u6388\u6743\u6A21\u5F0F |
||||
|
oauth.access.token.null=\u8BBF\u95EE\u4EE4\u724C\u4E0D\u80FD\u4E3A\u7A7A |
||||
|
obtain.basic.authorization.failed=client_id\u6216client_secret\u672A\u6B63\u786E\u4F20\u9012 |
||||
|
##Record |
||||
|
record.app.null=app\u4E0D\u80FD\u4E3A\u7A7A |
||||
|
record.stream.null=stream\u4E0D\u80FD\u4E3A\u7A7A |
||||
|
record.time.not.valid=\u9519\u8BEF\u7684\u5F00\u59CB\u65F6\u95F4\u6216\u7ED3\u675F\u65F6\u95F4 |
||||
|
record.file.null=\u672A\u627E\u5230\u89C6\u9891\u6587\u4EF6 |
||||
|
|
||||
|
##ErrorCodeConstants |
||||
|
app.not.found=App \u4E0D\u5B58\u5728 |
||||
|
app.is.disable=App \u5DF2\u7ECF\u88AB\u7981\u7528 |
||||
|
app.exist.order.cant.delete=\u652F\u4ED8\u5E94\u7528\u5B58\u5728\u652F\u4ED8\u8BA2\u5355\uFF0C\u65E0\u6CD5\u5220\u9664 |
||||
|
app.exist.refund.cant.delete=\u652F\u4ED8\u5E94\u7528\u5B58\u5728\u9000\u6B3E\u8BA2\u5355\uFF0C\u65E0\u6CD5\u5220\u9664 |
||||
|
channel.not.found=\u652F\u4ED8\u6E20\u9053\u7684\u914D\u7F6E\u4E0D\u5B58\u5728 |
||||
|
channel.is.disable=\u652F\u4ED8\u6E20\u9053\u5DF2\u7ECF\u7981\u7528 |
||||
|
channel.exists.same.channel.error=\u5DF2\u5B58\u5728\u76F8\u540C\u7684\u6E20\u9053 |
||||
|
order.not.found=\u652F\u4ED8\u8BA2\u5355\u4E0D\u5B58\u5728 |
||||
|
order.status.is.not.waiting=\u652F\u4ED8\u8BA2\u5355\u4E0D\u5904\u4E8E\u5F85\u652F\u4ED8 |
||||
|
order.status.is.success=\u8BA2\u5355\u5DF2\u652F\u4ED8\uFF0C\u8BF7\u5237\u65B0\u9875\u9762 |
||||
|
order.is.expired=\u652F\u4ED8\u8BA2\u5355\u5DF2\u7ECF\u8FC7\u671F |
||||
|
order.submit.channel.error=\u53D1\u8D77\u652F\u4ED8\u62A5\u9519\uFF0C\u9519\u8BEF\u7801\uFF1A{}\uFF0C\u9519\u8BEF\u63D0\u793A\uFF1A{} |
||||
|
order.refund.fail.status.error=\u652F\u4ED8\u8BA2\u5355\u9000\u6B3E\u5931\u8D25\uFF0C\u539F\u56E0\uFF1A\u72B6\u6001\u4E0D\u662F\u5DF2\u652F\u4ED8\u6216\u5DF2\u9000\u6B3E |
||||
|
order.extension.not.found=\u652F\u4ED8\u4EA4\u6613\u62D3\u5C55\u5355\u4E0D\u5B58\u5728 |
||||
|
order.extension.status.is.not.waiting=\u652F\u4ED8\u4EA4\u6613\u62D3\u5C55\u5355\u4E0D\u5904\u4E8E\u5F85\u652F\u4ED8 |
||||
|
order.extension.is.paid=\u8BA2\u5355\u5DF2\u652F\u4ED8\uFF0C\u8BF7\u7B49\u5F85\u652F\u4ED8\u7ED3\u679C |
||||
|
refund.price.exceed=\u9000\u6B3E\u91D1\u989D\u8D85\u8FC7\u8BA2\u5355\u53EF\u9000\u6B3E\u91D1\u989D |
||||
|
refund.has.refunding=\u5DF2\u7ECF\u6709\u9000\u6B3E\u5728\u5904\u7406\u4E2D |
||||
|
refund.exists=\u5DF2\u7ECF\u5B58\u5728\u9000\u6B3E\u5355 |
||||
|
refund.not.found=\u652F\u4ED8\u9000\u6B3E\u5355\u4E0D\u5B58\u5728 |
||||
|
refund.statue.is.not.waiting=\u652F\u4ED8\u9000\u6B3E\u5355\u4E0D\u5904\u4E8E\u5F85\u9000\u6B3E |
||||
|
demo.order.not.found=\u793A\u4F8B\u8BA2\u5355\u4E0D\u5B58\u5728 |
||||
|
demo.order.update.paid.status.not.unpaid=\u793A\u4F8B\u8BA2\u5355\u66F4\u65B0\u652F\u4ED8\u72B6\u6001\u5931\u8D25\uFF0C\u8BA2\u5355\u4E0D\u662F\u3010\u672A\u652F\u4ED8\u3011\u72B6\u6001 |
||||
|
demo.order.update.paid.fail.pay.order.id.error=\u793A\u4F8B\u8BA2\u5355\u66F4\u65B0\u652F\u4ED8\u72B6\u6001\u5931\u8D25\uFF0C\u652F\u4ED8\u5355\u7F16\u53F7\u4E0D\u5339\u914D |
||||
|
demo.order.update.paid.fail.pay.order.status.not.success=\u793A\u4F8B\u8BA2\u5355\u66F4\u65B0\u652F\u4ED8\u72B6\u6001\u5931\u8D25\uFF0C\u652F\u4ED8\u5355\u72B6\u6001\u4E0D\u662F\u3010\u652F\u4ED8\u6210\u529F\u3011\u72B6\u6001 |
||||
|
demo.order.update.paid.fail.pay.price.not.match=\u793A\u4F8B\u8BA2\u5355\u66F4\u65B0\u652F\u4ED8\u72B6\u6001\u5931\u8D25\uFF0C\u652F\u4ED8\u5355\u91D1\u989D\u4E0D\u5339\u914D |
||||
|
demo.order.refund.fail.not.paid=\u53D1\u8D77\u9000\u6B3E\u5931\u8D25\uFF0C\u793A\u4F8B\u8BA2\u5355\u672A\u652F\u4ED8 |
||||
|
demo.order.refund.fail.refunded=\u53D1\u8D77\u9000\u6B3E\u5931\u8D25\uFF0C\u793A\u4F8B\u8BA2\u5355\u5DF2\u9000\u6B3E |
||||
|
demo.order.refund.fail.refund.not.found=\u53D1\u8D77\u9000\u6B3E\u5931\u8D25\uFF0C\u9000\u6B3E\u8BA2\u5355\u4E0D\u5B58\u5728 |
||||
|
demo.order.refund.fail.refund.not.success=\u53D1\u8D77\u9000\u6B3E\u5931\u8D25\uFF0C\u9000\u6B3E\u8BA2\u5355\u672A\u9000\u6B3E\u6210\u529F |
||||
|
demo.order.refund.fail.refund.order.id.error=\u53D1\u8D77\u9000\u6B3E\u5931\u8D25\uFF0C\u9000\u6B3E\u5355\u7F16\u53F7\u4E0D\u5339\u914D |
||||
|
demo.order.refund.fail.refund.price.not.match=\u53D1\u8D77\u9000\u6B3E\u5931\u8D25\uFF0C\u9000\u6B3E\u5355\u91D1\u989D\u4E0D\u5339\u914D |
@ -0,0 +1,211 @@ |
|||||
|
#\u9519\u8BEF\u6D88\u606F |
||||
|
not.null=* \u5FC5\u987B\u586B\u5199 |
||||
|
user.jcaptcha.error=\u9A8C\u8BC1\u7801\u9519\u8BEF |
||||
|
user.jcaptcha.expire=\u9A8C\u8BC1\u7801\u5DF2\u5931\u6548 |
||||
|
user.not.exists=\u7528\u6237\u4E0D\u5B58\u5728/\u5BC6\u7801\u9519\u8BEF |
||||
|
user.password.not.match=\u7528\u6237\u4E0D\u5B58\u5728/\u5BC6\u7801\u9519\u8BEF |
||||
|
user.password.retry.limit.count=\u5BC6\u7801\u8F93\u5165\u9519\u8BEF{0}\u6B21 |
||||
|
user.password.retry.limit.exceed=\u5BC6\u7801\u8F93\u5165\u9519\u8BEF{0}\u6B21\uFF0C\u5E10\u6237\u9501\u5B9A{1}\u5206\u949F |
||||
|
user.password.delete=\u5BF9\u4E0D\u8D77\uFF0C\u60A8\u7684\u8D26\u53F7\u5DF2\u88AB\u5220\u9664 |
||||
|
user.blocked=\u7528\u6237\u5DF2\u5C01\u7981\uFF0C\u8BF7\u8054\u7CFB\u7BA1\u7406\u5458 |
||||
|
role.blocked=\u89D2\u8272\u5DF2\u5C01\u7981\uFF0C\u8BF7\u8054\u7CFB\u7BA1\u7406\u5458 |
||||
|
user.logout.success=\u9000\u51FA\u6210\u529F |
||||
|
|
||||
|
length.not.valid=\u957F\u5EA6\u5FC5\u987B\u5728{min}\u5230{max}\u4E2A\u5B57\u7B26\u4E4B\u95F4 |
||||
|
|
||||
|
user.username.not.valid=* 2\u523020\u4E2A\u6C49\u5B57\u3001\u5B57\u6BCD\u3001\u6570\u5B57\u6216\u4E0B\u5212\u7EBF\u7EC4\u6210\uFF0C\u4E14\u5FC5\u987B\u4EE5\u975E\u6570\u5B57\u5F00\u5934 |
||||
|
user.password.not.valid=* 5-50\u4E2A\u5B57\u7B26 |
||||
|
|
||||
|
user.email.not.valid=\u90AE\u7BB1\u683C\u5F0F\u9519\u8BEF |
||||
|
user.mobile.phone.number.not.valid=\u624B\u673A\u53F7\u683C\u5F0F\u9519\u8BEF |
||||
|
user.login.success=\u767B\u5F55\u6210\u529F |
||||
|
user.register.success=\u6CE8\u518C\u6210\u529F |
||||
|
user.notfound=\u8BF7\u91CD\u65B0\u767B\u5F55 |
||||
|
user.forcelogout=\u7BA1\u7406\u5458\u5F3A\u5236\u9000\u51FA\uFF0C\u8BF7\u91CD\u65B0\u767B\u5F55 |
||||
|
user.unknown.error=\u672A\u77E5\u9519\u8BEF\uFF0C\u8BF7\u91CD\u65B0\u767B\u5F55 |
||||
|
|
||||
|
##\u6743\u9650 |
||||
|
no.permission=\u60A8\u6CA1\u6709\u6570\u636E\u7684\u6743\u9650\uFF0C\u8BF7\u8054\u7CFB\u7BA1\u7406\u5458\u6DFB\u52A0\u6743\u9650 [{0}] |
||||
|
no.create.permission=\u60A8\u6CA1\u6709\u521B\u5EFA\u6570\u636E\u7684\u6743\u9650\uFF0C\u8BF7\u8054\u7CFB\u7BA1\u7406\u5458\u6DFB\u52A0\u6743\u9650 [{0}] |
||||
|
no.update.permission=\u60A8\u6CA1\u6709\u4FEE\u6539\u6570\u636E\u7684\u6743\u9650\uFF0C\u8BF7\u8054\u7CFB\u7BA1\u7406\u5458\u6DFB\u52A0\u6743\u9650 [{0}] |
||||
|
no.delete.permission=\u60A8\u6CA1\u6709\u5220\u9664\u6570\u636E\u7684\u6743\u9650\uFF0C\u8BF7\u8054\u7CFB\u7BA1\u7406\u5458\u6DFB\u52A0\u6743\u9650 [{0}] |
||||
|
no.export.permission=\u60A8\u6CA1\u6709\u5BFC\u51FA\u6570\u636E\u7684\u6743\u9650\uFF0C\u8BF7\u8054\u7CFB\u7BA1\u7406\u5458\u6DFB\u52A0\u6743\u9650 [{0}] |
||||
|
no.view.permission=\u60A8\u6CA1\u6709\u67E5\u770B\u6570\u636E\u7684\u6743\u9650\uFF0C\u8BF7\u8054\u7CFB\u7BA1\u7406\u5458\u6DFB\u52A0\u6743\u9650 [{0}] |
||||
|
|
||||
|
##\u6587\u4EF6\u4E0A\u4F20\u6D88\u606F |
||||
|
upload.exceed.maxSize=\u4E0A\u4F20\u7684\u6587\u4EF6\u5927\u5C0F\u8D85\u51FA\u9650\u5236\u7684\u6587\u4EF6\u5927\u5C0F\uFF01<br/>\u5141\u8BB8\u7684\u6587\u4EF6\u6700\u5927\u5927\u5C0F\u662F\uFF1A{0}MB\uFF01 |
||||
|
upload.filename.exceed.length=\u4E0A\u4F20\u7684\u6587\u4EF6\u540D\u6700\u957F{0}\u4E2A\u5B57\u7B26 |
||||
|
upload.success=\u4E0A\u4F20\u6210\u529F |
||||
|
|
||||
|
##\u6587\u4EF6\u4E0B\u8F7D\u6D88\u606F |
||||
|
download.filename.not.valid=\u6587\u4EF6\u540D\u79F0[{}]\u975E\u6CD5\uFF0C\u4E0D\u5141\u8BB8\u4E0B\u8F7D |
||||
|
download.file.failed=\u4E0B\u8F7D\u6587\u4EF6\u5931\u8D25 |
||||
|
download.resource.not.valid=\u8D44\u6E90\u6587\u4EF6[{}]\u975E\u6CD5\uFF0C\u4E0D\u5141\u8BB8\u4E0B\u8F7D |
||||
|
|
||||
|
##Dept |
||||
|
dept.add.failed.name.exists=\u65B0\u589E\u673A\u6784[{}]\u5931\u8D25\uFF0C\u673A\u6784\u540D\u79F0\u5DF2\u5B58\u5728 |
||||
|
dept.update.failed.name.exists=\u4FEE\u6539\u673A\u6784[{}]\u5931\u8D25\uFF0C\u673A\u6784\u540D\u79F0\u5DF2\u5B58\u5728 |
||||
|
dept.update.failed.parent.not.valid=\u4FEE\u6539\u673A\u6784[{}]\u5931\u8D25\uFF0C\u4E0A\u7EA7\u673A\u6784\u4E0D\u80FD\u662F\u81EA\u5DF1 |
||||
|
dept.update.failed.child.not.valid=\u8BE5\u673A\u6784\u5305\u542B\u672A\u505C\u7528\u7684\u5B50\u673A\u6784\uFF01 |
||||
|
dept.delete.failed.child.exists=\u5B58\u5728\u4E0B\u7EA7\u673A\u6784\uFF0C\u4E0D\u5141\u8BB8\u5220\u9664 |
||||
|
dept.delete.failed.user.exists=\u673A\u6784\u5B58\u5728\u7528\u6237\uFF0C\u4E0D\u5141\u8BB8\u5220\u9664 |
||||
|
|
||||
|
##Dict |
||||
|
dict.add.failed.type.exists=\u65B0\u589E\u5B57\u5178[{}]\u5931\u8D25\uFF0C\u5B57\u5178\u7C7B\u578B\u5DF2\u5B58\u5728 |
||||
|
dict.update.failed.type.exists=\u65B0\u589E\u5B57\u5178[{}]\u5931\u8D25\uFF0C\u5B57\u5178\u7C7B\u578B\u5DF2\u5B58\u5728 |
||||
|
|
||||
|
##Index |
||||
|
index.welcome.message=\u6B22\u8FCE\u4F7F\u7528{}\u540E\u53F0\u7BA1\u7406\u6846\u67B6\uFF0C\u5F53\u524D\u7248\u672C\uFF1Av{}\uFF0C\u8BF7\u901A\u8FC7\u524D\u7AEF\u5730\u5740\u8BBF\u95EE\u3002 |
||||
|
|
||||
|
##Menu |
||||
|
menu.add.failed.name.exists=\u65B0\u589E\u83DC\u5355[{}]\u5931\u8D25\uFF0C\u83DC\u5355\u540D\u79F0\u5DF2\u5B58\u5728 |
||||
|
menu.add.failed.path.not.valid=\u65B0\u589E\u83DC\u5355[{}]\u5931\u8D25\uFF0C\u5730\u5740\u5FC5\u987B\u4EE5http(s)://\u5F00\u5934 |
||||
|
menu.update.failed.name.exists=\u4FEE\u6539\u83DC\u5355[{}]\u5931\u8D25\uFF0C\u83DC\u5355\u540D\u79F0\u5DF2\u5B58\u5728 |
||||
|
menu.update.failed.path.not.valid=\u4FEE\u6539\u83DC\u5355[{}]\u5931\u8D25\uFF0C\u5730\u5740\u5FC5\u987B\u4EE5http(s)://\u5F00\u5934 |
||||
|
menu.update.failed.parent.not.valid=\u4FEE\u6539\u83DC\u5355[{}]\u5931\u8D25\uFF0C\u4E0A\u7EA7\u83DC\u5355\u4E0D\u80FD\u9009\u62E9\u81EA\u5DF1 |
||||
|
menu.delete.failed.child.exists=\u5B58\u5728\u5B50\u83DC\u5355,\u4E0D\u5141\u8BB8\u5220\u9664 |
||||
|
menu.delete.failed.role.exists=\u83DC\u5355\u5DF2\u5206\u914D,\u4E0D\u5141\u8BB8\u5220\u9664 |
||||
|
|
||||
|
##Post |
||||
|
post.add.failed.name.exists=\u65B0\u589E\u5C97\u4F4D[{}]\u5931\u8D25\uFF0C\u5C97\u4F4D\u540D\u79F0\u5DF2\u5B58\u5728 |
||||
|
post.add.failed.code.exists=\u65B0\u589E\u5C97\u4F4D[{}]\u5931\u8D25\uFF0C\u5C97\u4F4D\u7F16\u7801\u5DF2\u5B58\u5728 |
||||
|
post.update.failed.name.exists=\u4FEE\u6539\u5C97\u4F4D[{}]\u5931\u8D25\uFF0C\u5C97\u4F4D\u540D\u79F0\u5DF2\u5B58\u5728 |
||||
|
post.update.failed.code.exists=\u4FEE\u6539\u5C97\u4F4D[{}]\u5931\u8D25\uFF0C\u5C97\u4F4D\u7F16\u7801\u5DF2\u5B58\u5728 |
||||
|
|
||||
|
##User |
||||
|
user.username.exists=\u7CFB\u7EDF\u8D26\u53F7\u540D\u79F0\u5DF2\u5B58\u5728\uFF0C\u8BF7\u4FEE\u6539\u540E\u91CD\u8BD5 |
||||
|
user.password.differ=\u4E24\u6B21\u5BC6\u7801\u4E0D\u4E00\u81F4\uFF0C\u8BF7\u91CD\u65B0\u8F93\u5165 |
||||
|
user.add.failed.name.exists=\u65B0\u589E\u7528\u6237[{}]\u5931\u8D25\uFF0C\u767B\u5F55\u8D26\u53F7\u5DF2\u5B58\u5728 |
||||
|
user.add.failed.phone.exists=\u65B0\u589E\u7528\u6237[{}]\u5931\u8D25\uFF0C\u624B\u673A\u53F7\u7801\u5DF2\u5B58\u5728 |
||||
|
user.add.failed.email.exists=\u65B0\u589E\u7528\u6237[{}]\u5931\u8D25\uFF0C\u90AE\u7BB1\u8D26\u53F7\u5DF2\u5B58\u5728 |
||||
|
user.update.failed.password.wrong=\u4FEE\u6539\u5BC6\u7801\u5931\u8D25\uFF0C\u65E7\u5BC6\u7801\u9519\u8BEF |
||||
|
user.update.failed.password.repeat=\u65B0\u5BC6\u7801\u4E0D\u80FD\u4E0E\u65E7\u5BC6\u7801\u76F8\u540C |
||||
|
user.update.password.failed=\u4FEE\u6539\u5BC6\u7801\u5F02\u5E38\uFF0C\u8BF7\u8054\u7CFB\u7BA1\u7406\u5458 |
||||
|
user.update.failed.name.exists=\u65B0\u589E\u7528\u6237[{}]\u5931\u8D25\uFF0C\u767B\u5F55\u8D26\u53F7\u5DF2\u5B58\u5728 |
||||
|
user.update.failed.phone.exists=\u4FEE\u6539\u7528\u6237[{}]\u5931\u8D25\uFF0C\u624B\u673A\u53F7\u7801\u5DF2\u5B58\u5728 |
||||
|
user.update.failed.email.exists=\u4FEE\u6539\u7528\u6237[{}]\u5931\u8D25\uFF0C\u90AE\u7BB1\u8D26\u53F7\u5DF2\u5B58\u5728 |
||||
|
user.update.failed=\u4FEE\u6539\u4E2A\u4EBA\u4FE1\u606F\u5F02\u5E38\uFF0C\u8BF7\u8054\u7CFB\u7BA1\u7406\u5458 |
||||
|
user.delete.failed=\u5F53\u524D\u7528\u6237\u4E0D\u80FD\u5220\u9664 |
||||
|
user.upload.avatar.failed=\u4E0A\u4F20\u56FE\u7247\u5F02\u5E38\uFF0C\u8BF7\u8054\u7CFB\u7BA1\u7406\u5458 |
||||
|
user.not.login=\u8BF7\u767B\u5F55\u540E\u91CD\u8BD5 |
||||
|
user.access.denied=\u7528\u6237\u62D2\u7EDD\u8BBF\u95EE |
||||
|
|
||||
|
##Role |
||||
|
role.add.manager.failed=\u4E0D\u5141\u8BB8\u8BBE\u7F6E\u7BA1\u7406\u5458\u89D2\u8272\u6807\u8BC6 |
||||
|
role.add.failed.name.exists=\u65B0\u589E\u89D2\u8272[{}]\u5931\u8D25\uFF0C\u89D2\u8272\u540D\u79F0\u5DF2\u5B58\u5728 |
||||
|
role.add.failed.key.exists=\u65B0\u589E\u89D2\u8272[{}]\u5931\u8D25\uFF0C\u89D2\u8272\u6743\u9650\u5DF2\u5B58\u5728 |
||||
|
role.update.failed.name.exists=\u4FEE\u6539\u89D2\u8272[{}]\u5931\u8D25\uFF0C\u89D2\u8272\u540D\u79F0\u5DF2\u5B58\u5728 |
||||
|
role.update.failed.key.exists=\u4FEE\u6539\u89D2\u8272[{}]\u5931\u8D25\uFF0C\u89D2\u8272\u6743\u9650\u5DF2\u5B58\u5728 |
||||
|
role.update.failed=\u4FEE\u6539\u89D2\u8272[{}]\u5931\u8D25\uFF0C\u8BF7\u8054\u7CFB\u7BA1\u7406\u5458 |
||||
|
|
||||
|
##Import |
||||
|
import.failed.file.null=\u5BFC\u5165\u5931\u8D25\uFF0C\u8BF7\u5148\u4E0A\u4F20\u6587\u4EF6\uFF01 |
||||
|
import.failed.data.null=\u5BFC\u5165\u5931\u8D25\uFF0C\u5BFC\u5165\u6570\u636E\u4E3A\u7A7A\uFF01 |
||||
|
import.failed.device.name.null=\u5BFC\u5165\u5931\u8D25\uFF0C\u6A21\u677F\u91CC\u8BBE\u5907\u540D\u79F0\u4E0D\u80FD\u4E3A\u7A7A\uFF01 |
||||
|
import.success=\u5BFC\u5165\u6210\u529F |
||||
|
|
||||
|
##General |
||||
|
success=\u6210\u529F |
||||
|
fail=\u5931\u8D25 |
||||
|
query.success=\u67E5\u8BE2\u6210\u529F |
||||
|
operate.success=\u64CD\u4F5C\u6210\u529F |
||||
|
create.success=\u521B\u5EFA\u6210\u529F |
||||
|
create.failed=\u521B\u5EFA\u5931\u8D25 |
||||
|
save.success=\u4FDD\u5B58\u6210\u529F |
||||
|
save.failed=\u4FDD\u5B58\u5931\u8D25 |
||||
|
authorization.success=\u6388\u6743\u6210\u529F |
||||
|
|
||||
|
##Email |
||||
|
email.format.error=\u90AE\u7BB1\u683C\u5F0F\u9519\u8BEF |
||||
|
email.verification.code.send=\u90AE\u7BB1\u9A8C\u8BC1\u7801\u5DF2\u53D1\u9001 |
||||
|
|
||||
|
##Firmware |
||||
|
firmware.task.upgrade.failed.time.not.valid=\u9884\u5B9A\u5347\u7EA7\u65F6\u95F4\u5E94\u5927\u4E8E\u5F53\u524D\u65F6\u95F4 |
||||
|
##Media |
||||
|
media.record.query.failed=\u8FDE\u63A5\u8D85\u65F6\u6216\u53D1\u751F\u9519\u8BEF\uFF0C\u672A\u83B7\u53D6\u5230\u6570\u636E |
||||
|
##Modbus |
||||
|
modbus.type.null=\u7C7B\u578B\u4E3A\u7A7A |
||||
|
##Netty |
||||
|
netty.client.not.exists=\u5BA2\u6237\u7AEF\u4E0D\u5B58\u5728 |
||||
|
##Runtime |
||||
|
runtime.message.id.null=\u6D88\u606Fid\u4E3A\u7A7A |
||||
|
##Wechat |
||||
|
wechat.verify.type.null=\u8BF7\u4F20\u5165\u9A8C\u8BC1\u65B9\u5F0F |
||||
|
wechat.bind.message.id.null=\u8BF7\u4F20\u5165\u7ED1\u5B9A\u4FE1\u606FID |
||||
|
##AuthResource |
||||
|
auth.resource.product.query.success=\u67E5\u8BE2\u4EA7\u54C1\u5217\u8868\u6210\u529F |
||||
|
##Device |
||||
|
device.user.id.null=\u7528\u6237ID\u4E0D\u80FD\u4E3A\u7A7A |
||||
|
device.product.id.null=\u8BBE\u5907\u7F16\u53F7\u548C\u4EA7\u54C1ID\u4E0D\u80FD\u4E3A\u7A7A |
||||
|
device.dept.id.null=\u8BF7\u9009\u62E9\u5206\u914D\u673A\u6784 |
||||
|
device.id.null=\u8BF7\u9009\u62E9\u8BBE\u5907 |
||||
|
##DeviceJob |
||||
|
job.add.failed.cron.not.valid=\u65B0\u589E\u4EFB\u52A1[{}]\u5931\u8D25\uFF0CCron\u8868\u8FBE\u5F0F\u4E0D\u6B63\u786E |
||||
|
job.add.failed.rmi.not.valid=\u65B0\u589E\u4EFB\u52A1[{}]\u5931\u8D25\uFF0C\u76EE\u6807\u5B57\u7B26\u4E32\u4E0D\u5141\u8BB8'rmi'\u8C03\u7528 |
||||
|
job.add.failed.ldap.not.valid=\u65B0\u589E\u4EFB\u52A1[{}]\u5931\u8D25\uFF0C\u76EE\u6807\u5B57\u7B26\u4E32\u4E0D\u5141\u8BB8'ldap(s)'\u8C03\u7528 |
||||
|
job.add.failed.http.not.valid=\u65B0\u589E\u4EFB\u52A1[{}]\u5931\u8D25\uFF0C\u76EE\u6807\u5B57\u7B26\u4E32\u4E0D\u5141\u8BB8'http(s)'\u8C03\u7528 |
||||
|
job.add.failed.string.error=\u65B0\u589E\u4EFB\u52A1[{}]\u5931\u8D25\uFF0C\u76EE\u6807\u5B57\u7B26\u4E32\u5B58\u5728\u8FDD\u89C4 |
||||
|
job.add.failed.string.not.valid=\u65B0\u589E\u4EFB\u52A1[{}]\u5931\u8D25\uFF0C\u76EE\u6807\u5B57\u7B26\u4E32\u4E0D\u5728\u767D\u540D\u5355\u5185 |
||||
|
job.update.failed.cron.not.valid=\u4FEE\u6539\u4EFB\u52A1[{}]\u5931\u8D25\uFF0CCron\u8868\u8FBE\u5F0F\u4E0D\u6B63\u786E |
||||
|
job.update.failed.rmi.not.valid=\u4FEE\u6539\u4EFB\u52A1[{}]\u5931\u8D25\uFF0C\u76EE\u6807\u5B57\u7B26\u4E32\u4E0D\u5141\u8BB8'rmi'\u8C03\u7528 |
||||
|
job.update.failed.ldap.not.valid=\u4FEE\u6539\u4EFB\u52A1[{}]\u5931\u8D25\uFF0C\u76EE\u6807\u5B57\u7B26\u4E32\u4E0D\u5141\u8BB8'ldap(s)'\u8C03\u7528 |
||||
|
job.update.failed.http.not.valid=\u4FEE\u6539\u4EFB\u52A1[{}]\u5931\u8D25\uFF0C\u76EE\u6807\u5B57\u7B26\u4E32\u4E0D\u5141\u8BB8'http(s)'\u8C03\u7528 |
||||
|
job.update.failed.string.error=\u4FEE\u6539\u4EFB\u52A1[{}]\u5931\u8D25\uFF0C\u76EE\u6807\u5B57\u7B26\u4E32\u5B58\u5728\u8FDD\u89C4 |
||||
|
job.update.failed.string.not.valid=\u4FEE\u6539\u4EFB\u52A1[{}]\u5931\u8D25\uFF0C\u76EE\u6807\u5B57\u7B26\u4E32\u4E0D\u5728\u767D\u540D\u5355\u5185 |
||||
|
job.not.exists=\u4EFB\u52A1\u4E0D\u5B58\u5728\u6216\u5DF2\u8FC7\u671F |
||||
|
##DeviceUser |
||||
|
device.user.delete.failed.user.not.valid=\u8BBE\u5907\u6240\u6709\u8005\u4E0D\u80FD\u5220\u9664 |
||||
|
##GoviewProject |
||||
|
goview.project.data.save.failed.id.null=\u6CA1\u6709\u8BE5\u9879\u76EEID |
||||
|
goview.project.data.execute.sql.failed=\u8BF7\u7F16\u5199sql\u8BED\u53E5 |
||||
|
##ThingsModel |
||||
|
things.model.identifier.repeat=\u4EA7\u54C1\u4E0B\u7684\u6807\u8BC6\u7B26\u4E0D\u80FD\u91CD\u590D |
||||
|
things.model.import.failed.identifier.repeat=[{}]\u6761\u6570\u636E\u672A\u5BFC\u5165\uFF0C\u6807\u8BC6\u7B26\u91CD\u590D |
||||
|
##MQTT |
||||
|
mqtt.unauthorized=mqtt\u8D26\u53F7\u548C\u5BC6\u7801\u4E0E\u8BA4\u8BC1\u670D\u52A1\u5668\u914D\u7F6E\u4E0D\u5339\u914D |
||||
|
##Oauth |
||||
|
oauth.response.type.not.valid=response_type\u53C2\u6570\u503C\u53EA\u5141\u8BB8code\u548Ctoken |
||||
|
oauth.grant.type.null=\u672A\u77E5\u6388\u6743\u7C7B\u578B |
||||
|
oauth.grant.type.implicit.not.support=Token\u63A5\u53E3\u4E0D\u652F\u6301implicit\u6388\u6743\u6A21\u5F0F |
||||
|
oauth.access.token.null=\u8BBF\u95EE\u4EE4\u724C\u4E0D\u80FD\u4E3A\u7A7A |
||||
|
obtain.basic.authorization.failed=client_id\u6216client_secret\u672A\u6B63\u786E\u4F20\u9012 |
||||
|
##Record |
||||
|
record.app.null=app\u4E0D\u80FD\u4E3A\u7A7A |
||||
|
record.stream.null=stream\u4E0D\u80FD\u4E3A\u7A7A |
||||
|
record.time.not.valid=\u9519\u8BEF\u7684\u5F00\u59CB\u65F6\u95F4\u6216\u7ED3\u675F\u65F6\u95F4 |
||||
|
record.file.null=\u672A\u627E\u5230\u89C6\u9891\u6587\u4EF6 |
||||
|
|
||||
|
##ErrorCodeConstants |
||||
|
app.not.found=App \u4E0D\u5B58\u5728 |
||||
|
app.is.disable=App \u5DF2\u7ECF\u88AB\u7981\u7528 |
||||
|
app.exist.order.cant.delete=\u652F\u4ED8\u5E94\u7528\u5B58\u5728\u652F\u4ED8\u8BA2\u5355\uFF0C\u65E0\u6CD5\u5220\u9664 |
||||
|
app.exist.refund.cant.delete=\u652F\u4ED8\u5E94\u7528\u5B58\u5728\u9000\u6B3E\u8BA2\u5355\uFF0C\u65E0\u6CD5\u5220\u9664 |
||||
|
channel.not.found=\u652F\u4ED8\u6E20\u9053\u7684\u914D\u7F6E\u4E0D\u5B58\u5728 |
||||
|
channel.is.disable=\u652F\u4ED8\u6E20\u9053\u5DF2\u7ECF\u7981\u7528 |
||||
|
channel.exists.same.channel.error=\u5DF2\u5B58\u5728\u76F8\u540C\u7684\u6E20\u9053 |
||||
|
order.not.found=\u652F\u4ED8\u8BA2\u5355\u4E0D\u5B58\u5728 |
||||
|
order.status.is.not.waiting=\u652F\u4ED8\u8BA2\u5355\u4E0D\u5904\u4E8E\u5F85\u652F\u4ED8 |
||||
|
order.status.is.success=\u8BA2\u5355\u5DF2\u652F\u4ED8\uFF0C\u8BF7\u5237\u65B0\u9875\u9762 |
||||
|
order.is.expired=\u652F\u4ED8\u8BA2\u5355\u5DF2\u7ECF\u8FC7\u671F |
||||
|
order.submit.channel.error=\u53D1\u8D77\u652F\u4ED8\u62A5\u9519\uFF0C\u9519\u8BEF\u7801\uFF1A{}\uFF0C\u9519\u8BEF\u63D0\u793A\uFF1A{} |
||||
|
order.refund.fail.status.error=\u652F\u4ED8\u8BA2\u5355\u9000\u6B3E\u5931\u8D25\uFF0C\u539F\u56E0\uFF1A\u72B6\u6001\u4E0D\u662F\u5DF2\u652F\u4ED8\u6216\u5DF2\u9000\u6B3E |
||||
|
order.extension.not.found=\u652F\u4ED8\u4EA4\u6613\u62D3\u5C55\u5355\u4E0D\u5B58\u5728 |
||||
|
order.extension.status.is.not.waiting=\u652F\u4ED8\u4EA4\u6613\u62D3\u5C55\u5355\u4E0D\u5904\u4E8E\u5F85\u652F\u4ED8 |
||||
|
order.extension.is.paid=\u8BA2\u5355\u5DF2\u652F\u4ED8\uFF0C\u8BF7\u7B49\u5F85\u652F\u4ED8\u7ED3\u679C |
||||
|
refund.price.exceed=\u9000\u6B3E\u91D1\u989D\u8D85\u8FC7\u8BA2\u5355\u53EF\u9000\u6B3E\u91D1\u989D |
||||
|
refund.has.refunding=\u5DF2\u7ECF\u6709\u9000\u6B3E\u5728\u5904\u7406\u4E2D |
||||
|
refund.exists=\u5DF2\u7ECF\u5B58\u5728\u9000\u6B3E\u5355 |
||||
|
refund.not.found=\u652F\u4ED8\u9000\u6B3E\u5355\u4E0D\u5B58\u5728 |
||||
|
refund.statue.is.not.waiting=\u652F\u4ED8\u9000\u6B3E\u5355\u4E0D\u5904\u4E8E\u5F85\u9000\u6B3E |
||||
|
demo.order.not.found=\u793A\u4F8B\u8BA2\u5355\u4E0D\u5B58\u5728 |
||||
|
demo.order.update.paid.status.not.unpaid=\u793A\u4F8B\u8BA2\u5355\u66F4\u65B0\u652F\u4ED8\u72B6\u6001\u5931\u8D25\uFF0C\u8BA2\u5355\u4E0D\u662F\u3010\u672A\u652F\u4ED8\u3011\u72B6\u6001 |
||||
|
demo.order.update.paid.fail.pay.order.id.error=\u793A\u4F8B\u8BA2\u5355\u66F4\u65B0\u652F\u4ED8\u72B6\u6001\u5931\u8D25\uFF0C\u652F\u4ED8\u5355\u7F16\u53F7\u4E0D\u5339\u914D |
||||
|
demo.order.update.paid.fail.pay.order.status.not.success=\u793A\u4F8B\u8BA2\u5355\u66F4\u65B0\u652F\u4ED8\u72B6\u6001\u5931\u8D25\uFF0C\u652F\u4ED8\u5355\u72B6\u6001\u4E0D\u662F\u3010\u652F\u4ED8\u6210\u529F\u3011\u72B6\u6001 |
||||
|
demo.order.update.paid.fail.pay.price.not.match=\u793A\u4F8B\u8BA2\u5355\u66F4\u65B0\u652F\u4ED8\u72B6\u6001\u5931\u8D25\uFF0C\u652F\u4ED8\u5355\u91D1\u989D\u4E0D\u5339\u914D |
||||
|
demo.order.refund.fail.not.paid=\u53D1\u8D77\u9000\u6B3E\u5931\u8D25\uFF0C\u793A\u4F8B\u8BA2\u5355\u672A\u652F\u4ED8 |
||||
|
demo.order.refund.fail.refunded=\u53D1\u8D77\u9000\u6B3E\u5931\u8D25\uFF0C\u793A\u4F8B\u8BA2\u5355\u5DF2\u9000\u6B3E |
||||
|
demo.order.refund.fail.refund.not.found=\u53D1\u8D77\u9000\u6B3E\u5931\u8D25\uFF0C\u9000\u6B3E\u8BA2\u5355\u4E0D\u5B58\u5728 |
||||
|
demo.order.refund.fail.refund.not.success=\u53D1\u8D77\u9000\u6B3E\u5931\u8D25\uFF0C\u9000\u6B3E\u8BA2\u5355\u672A\u9000\u6B3E\u6210\u529F |
||||
|
demo.order.refund.fail.refund.order.id.error=\u53D1\u8D77\u9000\u6B3E\u5931\u8D25\uFF0C\u9000\u6B3E\u5355\u7F16\u53F7\u4E0D\u5339\u914D |
||||
|
demo.order.refund.fail.refund.price.not.match=\u53D1\u8D77\u9000\u6B3E\u5931\u8D25\uFF0C\u9000\u6B3E\u5355\u91D1\u989D\u4E0D\u5339\u914D |
||||
|
device.can.send=No permission operation at present |
@ -0,0 +1,211 @@ |
|||||
|
#\u9519\u8BEF\u6D88\u606F |
||||
|
not.null=* \u5FC5\u987B\u586B\u5199 |
||||
|
user.jcaptcha.error=\u9A8C\u8BC1\u7801\u9519\u8BEF |
||||
|
user.jcaptcha.expire=\u9A8C\u8BC1\u7801\u5DF2\u5931\u6548 |
||||
|
user.not.exists=\u7528\u6237\u4E0D\u5B58\u5728/\u5BC6\u7801\u9519\u8BEF |
||||
|
user.password.not.match=\u7528\u6237\u4E0D\u5B58\u5728/\u5BC6\u7801\u9519\u8BEF |
||||
|
user.password.retry.limit.count=\u5BC6\u7801\u8F93\u5165\u9519\u8BEF{0}\u6B21 |
||||
|
user.password.retry.limit.exceed=\u5BC6\u7801\u8F93\u5165\u9519\u8BEF{0}\u6B21\uFF0C\u5E10\u6237\u9501\u5B9A{1}\u5206\u949F |
||||
|
user.password.delete=\u5BF9\u4E0D\u8D77\uFF0C\u60A8\u7684\u8D26\u53F7\u5DF2\u88AB\u5220\u9664 |
||||
|
user.blocked=\u7528\u6237\u5DF2\u5C01\u7981\uFF0C\u8BF7\u8054\u7CFB\u7BA1\u7406\u5458 |
||||
|
role.blocked=\u89D2\u8272\u5DF2\u5C01\u7981\uFF0C\u8BF7\u8054\u7CFB\u7BA1\u7406\u5458 |
||||
|
user.logout.success=\u9000\u51FA\u6210\u529F |
||||
|
|
||||
|
length.not.valid=\u957F\u5EA6\u5FC5\u987B\u5728{min}\u5230{max}\u4E2A\u5B57\u7B26\u4E4B\u95F4 |
||||
|
|
||||
|
user.username.not.valid=* 2\u523020\u4E2A\u6C49\u5B57\u3001\u5B57\u6BCD\u3001\u6570\u5B57\u6216\u4E0B\u5212\u7EBF\u7EC4\u6210\uFF0C\u4E14\u5FC5\u987B\u4EE5\u975E\u6570\u5B57\u5F00\u5934 |
||||
|
user.password.not.valid=* 5-50\u4E2A\u5B57\u7B26 |
||||
|
|
||||
|
user.email.not.valid=\u90AE\u7BB1\u683C\u5F0F\u9519\u8BEF |
||||
|
user.mobile.phone.number.not.valid=\u624B\u673A\u53F7\u683C\u5F0F\u9519\u8BEF |
||||
|
user.login.success=\u767B\u5F55\u6210\u529F |
||||
|
user.register.success=\u6CE8\u518C\u6210\u529F |
||||
|
user.notfound=\u8BF7\u91CD\u65B0\u767B\u5F55 |
||||
|
user.forcelogout=\u7BA1\u7406\u5458\u5F3A\u5236\u9000\u51FA\uFF0C\u8BF7\u91CD\u65B0\u767B\u5F55 |
||||
|
user.unknown.error=\u672A\u77E5\u9519\u8BEF\uFF0C\u8BF7\u91CD\u65B0\u767B\u5F55 |
||||
|
|
||||
|
##\u6743\u9650 |
||||
|
no.permission=\u60A8\u6CA1\u6709\u6570\u636E\u7684\u6743\u9650\uFF0C\u8BF7\u8054\u7CFB\u7BA1\u7406\u5458\u6DFB\u52A0\u6743\u9650 [{0}] |
||||
|
no.create.permission=\u60A8\u6CA1\u6709\u521B\u5EFA\u6570\u636E\u7684\u6743\u9650\uFF0C\u8BF7\u8054\u7CFB\u7BA1\u7406\u5458\u6DFB\u52A0\u6743\u9650 [{0}] |
||||
|
no.update.permission=\u60A8\u6CA1\u6709\u4FEE\u6539\u6570\u636E\u7684\u6743\u9650\uFF0C\u8BF7\u8054\u7CFB\u7BA1\u7406\u5458\u6DFB\u52A0\u6743\u9650 [{0}] |
||||
|
no.delete.permission=\u60A8\u6CA1\u6709\u5220\u9664\u6570\u636E\u7684\u6743\u9650\uFF0C\u8BF7\u8054\u7CFB\u7BA1\u7406\u5458\u6DFB\u52A0\u6743\u9650 [{0}] |
||||
|
no.export.permission=\u60A8\u6CA1\u6709\u5BFC\u51FA\u6570\u636E\u7684\u6743\u9650\uFF0C\u8BF7\u8054\u7CFB\u7BA1\u7406\u5458\u6DFB\u52A0\u6743\u9650 [{0}] |
||||
|
no.view.permission=\u60A8\u6CA1\u6709\u67E5\u770B\u6570\u636E\u7684\u6743\u9650\uFF0C\u8BF7\u8054\u7CFB\u7BA1\u7406\u5458\u6DFB\u52A0\u6743\u9650 [{0}] |
||||
|
|
||||
|
##\u6587\u4EF6\u4E0A\u4F20\u6D88\u606F |
||||
|
upload.exceed.maxSize=\u4E0A\u4F20\u7684\u6587\u4EF6\u5927\u5C0F\u8D85\u51FA\u9650\u5236\u7684\u6587\u4EF6\u5927\u5C0F\uFF01<br/>\u5141\u8BB8\u7684\u6587\u4EF6\u6700\u5927\u5927\u5C0F\u662F\uFF1A{0}MB\uFF01 |
||||
|
upload.filename.exceed.length=\u4E0A\u4F20\u7684\u6587\u4EF6\u540D\u6700\u957F{0}\u4E2A\u5B57\u7B26 |
||||
|
upload.success=\u4E0A\u4F20\u6210\u529F |
||||
|
|
||||
|
##\u6587\u4EF6\u4E0B\u8F7D\u6D88\u606F |
||||
|
download.filename.not.valid=\u6587\u4EF6\u540D\u79F0[{}]\u975E\u6CD5\uFF0C\u4E0D\u5141\u8BB8\u4E0B\u8F7D |
||||
|
download.file.failed=\u4E0B\u8F7D\u6587\u4EF6\u5931\u8D25 |
||||
|
download.resource.not.valid=\u8D44\u6E90\u6587\u4EF6[{}]\u975E\u6CD5\uFF0C\u4E0D\u5141\u8BB8\u4E0B\u8F7D |
||||
|
|
||||
|
##Dept |
||||
|
dept.add.failed.name.exists=\u65B0\u589E\u673A\u6784[{}]\u5931\u8D25\uFF0C\u673A\u6784\u540D\u79F0\u5DF2\u5B58\u5728 |
||||
|
dept.update.failed.name.exists=\u4FEE\u6539\u673A\u6784[{}]\u5931\u8D25\uFF0C\u673A\u6784\u540D\u79F0\u5DF2\u5B58\u5728 |
||||
|
dept.update.failed.parent.not.valid=\u4FEE\u6539\u673A\u6784[{}]\u5931\u8D25\uFF0C\u4E0A\u7EA7\u673A\u6784\u4E0D\u80FD\u662F\u81EA\u5DF1 |
||||
|
dept.update.failed.child.not.valid=\u8BE5\u673A\u6784\u5305\u542B\u672A\u505C\u7528\u7684\u5B50\u673A\u6784\uFF01 |
||||
|
dept.delete.failed.child.exists=\u5B58\u5728\u4E0B\u7EA7\u673A\u6784\uFF0C\u4E0D\u5141\u8BB8\u5220\u9664 |
||||
|
dept.delete.failed.user.exists=\u673A\u6784\u5B58\u5728\u7528\u6237\uFF0C\u4E0D\u5141\u8BB8\u5220\u9664 |
||||
|
|
||||
|
##Dict |
||||
|
dict.add.failed.type.exists=\u65B0\u589E\u5B57\u5178[{}]\u5931\u8D25\uFF0C\u5B57\u5178\u7C7B\u578B\u5DF2\u5B58\u5728 |
||||
|
dict.update.failed.type.exists=\u65B0\u589E\u5B57\u5178[{}]\u5931\u8D25\uFF0C\u5B57\u5178\u7C7B\u578B\u5DF2\u5B58\u5728 |
||||
|
|
||||
|
##Index |
||||
|
index.welcome.message=\u6B22\u8FCE\u4F7F\u7528{}\u540E\u53F0\u7BA1\u7406\u6846\u67B6\uFF0C\u5F53\u524D\u7248\u672C\uFF1Av{}\uFF0C\u8BF7\u901A\u8FC7\u524D\u7AEF\u5730\u5740\u8BBF\u95EE\u3002 |
||||
|
|
||||
|
##Menu |
||||
|
menu.add.failed.name.exists=\u65B0\u589E\u83DC\u5355[{}]\u5931\u8D25\uFF0C\u83DC\u5355\u540D\u79F0\u5DF2\u5B58\u5728 |
||||
|
menu.add.failed.path.not.valid=\u65B0\u589E\u83DC\u5355[{}]\u5931\u8D25\uFF0C\u5730\u5740\u5FC5\u987B\u4EE5http(s)://\u5F00\u5934 |
||||
|
menu.update.failed.name.exists=\u4FEE\u6539\u83DC\u5355[{}]\u5931\u8D25\uFF0C\u83DC\u5355\u540D\u79F0\u5DF2\u5B58\u5728 |
||||
|
menu.update.failed.path.not.valid=\u4FEE\u6539\u83DC\u5355[{}]\u5931\u8D25\uFF0C\u5730\u5740\u5FC5\u987B\u4EE5http(s)://\u5F00\u5934 |
||||
|
menu.update.failed.parent.not.valid=\u4FEE\u6539\u83DC\u5355[{}]\u5931\u8D25\uFF0C\u4E0A\u7EA7\u83DC\u5355\u4E0D\u80FD\u9009\u62E9\u81EA\u5DF1 |
||||
|
menu.delete.failed.child.exists=\u5B58\u5728\u5B50\u83DC\u5355,\u4E0D\u5141\u8BB8\u5220\u9664 |
||||
|
menu.delete.failed.role.exists=\u83DC\u5355\u5DF2\u5206\u914D,\u4E0D\u5141\u8BB8\u5220\u9664 |
||||
|
|
||||
|
##Post |
||||
|
post.add.failed.name.exists=\u65B0\u589E\u5C97\u4F4D[{}]\u5931\u8D25\uFF0C\u5C97\u4F4D\u540D\u79F0\u5DF2\u5B58\u5728 |
||||
|
post.add.failed.code.exists=\u65B0\u589E\u5C97\u4F4D[{}]\u5931\u8D25\uFF0C\u5C97\u4F4D\u7F16\u7801\u5DF2\u5B58\u5728 |
||||
|
post.update.failed.name.exists=\u4FEE\u6539\u5C97\u4F4D[{}]\u5931\u8D25\uFF0C\u5C97\u4F4D\u540D\u79F0\u5DF2\u5B58\u5728 |
||||
|
post.update.failed.code.exists=\u4FEE\u6539\u5C97\u4F4D[{}]\u5931\u8D25\uFF0C\u5C97\u4F4D\u7F16\u7801\u5DF2\u5B58\u5728 |
||||
|
|
||||
|
##User |
||||
|
user.username.exists=\u7CFB\u7EDF\u8D26\u53F7\u540D\u79F0\u5DF2\u5B58\u5728\uFF0C\u8BF7\u4FEE\u6539\u540E\u91CD\u8BD5 |
||||
|
user.password.differ=\u4E24\u6B21\u5BC6\u7801\u4E0D\u4E00\u81F4\uFF0C\u8BF7\u91CD\u65B0\u8F93\u5165 |
||||
|
user.add.failed.name.exists=\u65B0\u589E\u7528\u6237[{}]\u5931\u8D25\uFF0C\u767B\u5F55\u8D26\u53F7\u5DF2\u5B58\u5728 |
||||
|
user.add.failed.phone.exists=\u65B0\u589E\u7528\u6237[{}]\u5931\u8D25\uFF0C\u624B\u673A\u53F7\u7801\u5DF2\u5B58\u5728 |
||||
|
user.add.failed.email.exists=\u65B0\u589E\u7528\u6237[{}]\u5931\u8D25\uFF0C\u90AE\u7BB1\u8D26\u53F7\u5DF2\u5B58\u5728 |
||||
|
user.update.failed.password.wrong=\u4FEE\u6539\u5BC6\u7801\u5931\u8D25\uFF0C\u65E7\u5BC6\u7801\u9519\u8BEF |
||||
|
user.update.failed.password.repeat=\u65B0\u5BC6\u7801\u4E0D\u80FD\u4E0E\u65E7\u5BC6\u7801\u76F8\u540C |
||||
|
user.update.password.failed=\u4FEE\u6539\u5BC6\u7801\u5F02\u5E38\uFF0C\u8BF7\u8054\u7CFB\u7BA1\u7406\u5458 |
||||
|
user.update.failed.name.exists=\u65B0\u589E\u7528\u6237[{}]\u5931\u8D25\uFF0C\u767B\u5F55\u8D26\u53F7\u5DF2\u5B58\u5728 |
||||
|
user.update.failed.phone.exists=\u4FEE\u6539\u7528\u6237[{}]\u5931\u8D25\uFF0C\u624B\u673A\u53F7\u7801\u5DF2\u5B58\u5728 |
||||
|
user.update.failed.email.exists=\u4FEE\u6539\u7528\u6237[{}]\u5931\u8D25\uFF0C\u90AE\u7BB1\u8D26\u53F7\u5DF2\u5B58\u5728 |
||||
|
user.update.failed=\u4FEE\u6539\u4E2A\u4EBA\u4FE1\u606F\u5F02\u5E38\uFF0C\u8BF7\u8054\u7CFB\u7BA1\u7406\u5458 |
||||
|
user.delete.failed=\u5F53\u524D\u7528\u6237\u4E0D\u80FD\u5220\u9664 |
||||
|
user.upload.avatar.failed=\u4E0A\u4F20\u56FE\u7247\u5F02\u5E38\uFF0C\u8BF7\u8054\u7CFB\u7BA1\u7406\u5458 |
||||
|
user.not.login=\u8BF7\u767B\u5F55\u540E\u91CD\u8BD5 |
||||
|
user.access.denied=\u7528\u6237\u62D2\u7EDD\u8BBF\u95EE |
||||
|
|
||||
|
##Role |
||||
|
role.add.manager.failed=\u4E0D\u5141\u8BB8\u8BBE\u7F6E\u7BA1\u7406\u5458\u89D2\u8272\u6807\u8BC6 |
||||
|
role.add.failed.name.exists=\u65B0\u589E\u89D2\u8272[{}]\u5931\u8D25\uFF0C\u89D2\u8272\u540D\u79F0\u5DF2\u5B58\u5728 |
||||
|
role.add.failed.key.exists=\u65B0\u589E\u89D2\u8272[{}]\u5931\u8D25\uFF0C\u89D2\u8272\u6743\u9650\u5DF2\u5B58\u5728 |
||||
|
role.update.failed.name.exists=\u4FEE\u6539\u89D2\u8272[{}]\u5931\u8D25\uFF0C\u89D2\u8272\u540D\u79F0\u5DF2\u5B58\u5728 |
||||
|
role.update.failed.key.exists=\u4FEE\u6539\u89D2\u8272[{}]\u5931\u8D25\uFF0C\u89D2\u8272\u6743\u9650\u5DF2\u5B58\u5728 |
||||
|
role.update.failed=\u4FEE\u6539\u89D2\u8272[{}]\u5931\u8D25\uFF0C\u8BF7\u8054\u7CFB\u7BA1\u7406\u5458 |
||||
|
|
||||
|
##Import |
||||
|
import.failed.file.null=\u5BFC\u5165\u5931\u8D25\uFF0C\u8BF7\u5148\u4E0A\u4F20\u6587\u4EF6\uFF01 |
||||
|
import.failed.data.null=\u5BFC\u5165\u5931\u8D25\uFF0C\u5BFC\u5165\u6570\u636E\u4E3A\u7A7A\uFF01 |
||||
|
import.failed.device.name.null=\u5BFC\u5165\u5931\u8D25\uFF0C\u6A21\u677F\u91CC\u8BBE\u5907\u540D\u79F0\u4E0D\u80FD\u4E3A\u7A7A\uFF01 |
||||
|
import.success=\u5BFC\u5165\u6210\u529F |
||||
|
|
||||
|
##General |
||||
|
success=\u6210\u529F |
||||
|
fail=\u5931\u8D25 |
||||
|
query.success=\u67E5\u8BE2\u6210\u529F |
||||
|
operate.success=\u64CD\u4F5C\u6210\u529F |
||||
|
create.success=\u521B\u5EFA\u6210\u529F |
||||
|
create.failed=\u521B\u5EFA\u5931\u8D25 |
||||
|
save.success=\u4FDD\u5B58\u6210\u529F |
||||
|
save.failed=\u4FDD\u5B58\u5931\u8D25 |
||||
|
authorization.success=\u6388\u6743\u6210\u529F |
||||
|
|
||||
|
##Email |
||||
|
email.format.error=\u90AE\u7BB1\u683C\u5F0F\u9519\u8BEF |
||||
|
email.verification.code.send=\u90AE\u7BB1\u9A8C\u8BC1\u7801\u5DF2\u53D1\u9001 |
||||
|
|
||||
|
##Firmware |
||||
|
firmware.task.upgrade.failed.time.not.valid=\u9884\u5B9A\u5347\u7EA7\u65F6\u95F4\u5E94\u5927\u4E8E\u5F53\u524D\u65F6\u95F4 |
||||
|
##Media |
||||
|
media.record.query.failed=\u8FDE\u63A5\u8D85\u65F6\u6216\u53D1\u751F\u9519\u8BEF\uFF0C\u672A\u83B7\u53D6\u5230\u6570\u636E |
||||
|
##Modbus |
||||
|
modbus.type.null=\u7C7B\u578B\u4E3A\u7A7A |
||||
|
##Netty |
||||
|
netty.client.not.exists=\u5BA2\u6237\u7AEF\u4E0D\u5B58\u5728 |
||||
|
##Runtime |
||||
|
runtime.message.id.null=\u6D88\u606Fid\u4E3A\u7A7A |
||||
|
##Wechat |
||||
|
wechat.verify.type.null=\u8BF7\u4F20\u5165\u9A8C\u8BC1\u65B9\u5F0F |
||||
|
wechat.bind.message.id.null=\u8BF7\u4F20\u5165\u7ED1\u5B9A\u4FE1\u606FID |
||||
|
##AuthResource |
||||
|
auth.resource.product.query.success=\u67E5\u8BE2\u4EA7\u54C1\u5217\u8868\u6210\u529F |
||||
|
##Device |
||||
|
device.user.id.null=\u7528\u6237ID\u4E0D\u80FD\u4E3A\u7A7A |
||||
|
device.product.id.null=\u8BBE\u5907\u7F16\u53F7\u548C\u4EA7\u54C1ID\u4E0D\u80FD\u4E3A\u7A7A |
||||
|
device.dept.id.null=\u8BF7\u9009\u62E9\u5206\u914D\u673A\u6784 |
||||
|
device.id.null=\u8BF7\u9009\u62E9\u8BBE\u5907 |
||||
|
##DeviceJob |
||||
|
job.add.failed.cron.not.valid=\u65B0\u589E\u4EFB\u52A1[{}]\u5931\u8D25\uFF0CCron\u8868\u8FBE\u5F0F\u4E0D\u6B63\u786E |
||||
|
job.add.failed.rmi.not.valid=\u65B0\u589E\u4EFB\u52A1[{}]\u5931\u8D25\uFF0C\u76EE\u6807\u5B57\u7B26\u4E32\u4E0D\u5141\u8BB8'rmi'\u8C03\u7528 |
||||
|
job.add.failed.ldap.not.valid=\u65B0\u589E\u4EFB\u52A1[{}]\u5931\u8D25\uFF0C\u76EE\u6807\u5B57\u7B26\u4E32\u4E0D\u5141\u8BB8'ldap(s)'\u8C03\u7528 |
||||
|
job.add.failed.http.not.valid=\u65B0\u589E\u4EFB\u52A1[{}]\u5931\u8D25\uFF0C\u76EE\u6807\u5B57\u7B26\u4E32\u4E0D\u5141\u8BB8'http(s)'\u8C03\u7528 |
||||
|
job.add.failed.string.error=\u65B0\u589E\u4EFB\u52A1[{}]\u5931\u8D25\uFF0C\u76EE\u6807\u5B57\u7B26\u4E32\u5B58\u5728\u8FDD\u89C4 |
||||
|
job.add.failed.string.not.valid=\u65B0\u589E\u4EFB\u52A1[{}]\u5931\u8D25\uFF0C\u76EE\u6807\u5B57\u7B26\u4E32\u4E0D\u5728\u767D\u540D\u5355\u5185 |
||||
|
job.update.failed.cron.not.valid=\u4FEE\u6539\u4EFB\u52A1[{}]\u5931\u8D25\uFF0CCron\u8868\u8FBE\u5F0F\u4E0D\u6B63\u786E |
||||
|
job.update.failed.rmi.not.valid=\u4FEE\u6539\u4EFB\u52A1[{}]\u5931\u8D25\uFF0C\u76EE\u6807\u5B57\u7B26\u4E32\u4E0D\u5141\u8BB8'rmi'\u8C03\u7528 |
||||
|
job.update.failed.ldap.not.valid=\u4FEE\u6539\u4EFB\u52A1[{}]\u5931\u8D25\uFF0C\u76EE\u6807\u5B57\u7B26\u4E32\u4E0D\u5141\u8BB8'ldap(s)'\u8C03\u7528 |
||||
|
job.update.failed.http.not.valid=\u4FEE\u6539\u4EFB\u52A1[{}]\u5931\u8D25\uFF0C\u76EE\u6807\u5B57\u7B26\u4E32\u4E0D\u5141\u8BB8'http(s)'\u8C03\u7528 |
||||
|
job.update.failed.string.error=\u4FEE\u6539\u4EFB\u52A1[{}]\u5931\u8D25\uFF0C\u76EE\u6807\u5B57\u7B26\u4E32\u5B58\u5728\u8FDD\u89C4 |
||||
|
job.update.failed.string.not.valid=\u4FEE\u6539\u4EFB\u52A1[{}]\u5931\u8D25\uFF0C\u76EE\u6807\u5B57\u7B26\u4E32\u4E0D\u5728\u767D\u540D\u5355\u5185 |
||||
|
job.not.exists=\u4EFB\u52A1\u4E0D\u5B58\u5728\u6216\u5DF2\u8FC7\u671F |
||||
|
##DeviceUser |
||||
|
device.user.delete.failed.user.not.valid=\u8BBE\u5907\u6240\u6709\u8005\u4E0D\u80FD\u5220\u9664 |
||||
|
##GoviewProject |
||||
|
goview.project.data.save.failed.id.null=\u6CA1\u6709\u8BE5\u9879\u76EEID |
||||
|
goview.project.data.execute.sql.failed=\u8BF7\u7F16\u5199sql\u8BED\u53E5 |
||||
|
##ThingsModel |
||||
|
things.model.identifier.repeat=\u4EA7\u54C1\u4E0B\u7684\u6807\u8BC6\u7B26\u4E0D\u80FD\u91CD\u590D |
||||
|
things.model.import.failed.identifier.repeat=[{}]\u6761\u6570\u636E\u672A\u5BFC\u5165\uFF0C\u6807\u8BC6\u7B26\u91CD\u590D |
||||
|
##MQTT |
||||
|
mqtt.unauthorized=mqtt\u8D26\u53F7\u548C\u5BC6\u7801\u4E0E\u8BA4\u8BC1\u670D\u52A1\u5668\u914D\u7F6E\u4E0D\u5339\u914D |
||||
|
##Oauth |
||||
|
oauth.response.type.not.valid=response_type\u53C2\u6570\u503C\u53EA\u5141\u8BB8code\u548Ctoken |
||||
|
oauth.grant.type.null=\u672A\u77E5\u6388\u6743\u7C7B\u578B |
||||
|
oauth.grant.type.implicit.not.support=Token\u63A5\u53E3\u4E0D\u652F\u6301implicit\u6388\u6743\u6A21\u5F0F |
||||
|
oauth.access.token.null=\u8BBF\u95EE\u4EE4\u724C\u4E0D\u80FD\u4E3A\u7A7A |
||||
|
obtain.basic.authorization.failed=client_id\u6216client_secret\u672A\u6B63\u786E\u4F20\u9012 |
||||
|
##Record |
||||
|
record.app.null=app\u4E0D\u80FD\u4E3A\u7A7A |
||||
|
record.stream.null=stream\u4E0D\u80FD\u4E3A\u7A7A |
||||
|
record.time.not.valid=\u9519\u8BEF\u7684\u5F00\u59CB\u65F6\u95F4\u6216\u7ED3\u675F\u65F6\u95F4 |
||||
|
record.file.null=\u672A\u627E\u5230\u89C6\u9891\u6587\u4EF6 |
||||
|
|
||||
|
##ErrorCodeConstants |
||||
|
app.not.found=App \u4E0D\u5B58\u5728 |
||||
|
app.is.disable=App \u5DF2\u7ECF\u88AB\u7981\u7528 |
||||
|
app.exist.order.cant.delete=\u652F\u4ED8\u5E94\u7528\u5B58\u5728\u652F\u4ED8\u8BA2\u5355\uFF0C\u65E0\u6CD5\u5220\u9664 |
||||
|
app.exist.refund.cant.delete=\u652F\u4ED8\u5E94\u7528\u5B58\u5728\u9000\u6B3E\u8BA2\u5355\uFF0C\u65E0\u6CD5\u5220\u9664 |
||||
|
channel.not.found=\u652F\u4ED8\u6E20\u9053\u7684\u914D\u7F6E\u4E0D\u5B58\u5728 |
||||
|
channel.is.disable=\u652F\u4ED8\u6E20\u9053\u5DF2\u7ECF\u7981\u7528 |
||||
|
channel.exists.same.channel.error=\u5DF2\u5B58\u5728\u76F8\u540C\u7684\u6E20\u9053 |
||||
|
order.not.found=\u652F\u4ED8\u8BA2\u5355\u4E0D\u5B58\u5728 |
||||
|
order.status.is.not.waiting=\u652F\u4ED8\u8BA2\u5355\u4E0D\u5904\u4E8E\u5F85\u652F\u4ED8 |
||||
|
order.status.is.success=\u8BA2\u5355\u5DF2\u652F\u4ED8\uFF0C\u8BF7\u5237\u65B0\u9875\u9762 |
||||
|
order.is.expired=\u652F\u4ED8\u8BA2\u5355\u5DF2\u7ECF\u8FC7\u671F |
||||
|
order.submit.channel.error=\u53D1\u8D77\u652F\u4ED8\u62A5\u9519\uFF0C\u9519\u8BEF\u7801\uFF1A{}\uFF0C\u9519\u8BEF\u63D0\u793A\uFF1A{} |
||||
|
order.refund.fail.status.error=\u652F\u4ED8\u8BA2\u5355\u9000\u6B3E\u5931\u8D25\uFF0C\u539F\u56E0\uFF1A\u72B6\u6001\u4E0D\u662F\u5DF2\u652F\u4ED8\u6216\u5DF2\u9000\u6B3E |
||||
|
order.extension.not.found=\u652F\u4ED8\u4EA4\u6613\u62D3\u5C55\u5355\u4E0D\u5B58\u5728 |
||||
|
order.extension.status.is.not.waiting=\u652F\u4ED8\u4EA4\u6613\u62D3\u5C55\u5355\u4E0D\u5904\u4E8E\u5F85\u652F\u4ED8 |
||||
|
order.extension.is.paid=\u8BA2\u5355\u5DF2\u652F\u4ED8\uFF0C\u8BF7\u7B49\u5F85\u652F\u4ED8\u7ED3\u679C |
||||
|
refund.price.exceed=\u9000\u6B3E\u91D1\u989D\u8D85\u8FC7\u8BA2\u5355\u53EF\u9000\u6B3E\u91D1\u989D |
||||
|
refund.has.refunding=\u5DF2\u7ECF\u6709\u9000\u6B3E\u5728\u5904\u7406\u4E2D |
||||
|
refund.exists=\u5DF2\u7ECF\u5B58\u5728\u9000\u6B3E\u5355 |
||||
|
refund.not.found=\u652F\u4ED8\u9000\u6B3E\u5355\u4E0D\u5B58\u5728 |
||||
|
refund.statue.is.not.waiting=\u652F\u4ED8\u9000\u6B3E\u5355\u4E0D\u5904\u4E8E\u5F85\u9000\u6B3E |
||||
|
demo.order.not.found=\u793A\u4F8B\u8BA2\u5355\u4E0D\u5B58\u5728 |
||||
|
demo.order.update.paid.status.not.unpaid=\u793A\u4F8B\u8BA2\u5355\u66F4\u65B0\u652F\u4ED8\u72B6\u6001\u5931\u8D25\uFF0C\u8BA2\u5355\u4E0D\u662F\u3010\u672A\u652F\u4ED8\u3011\u72B6\u6001 |
||||
|
demo.order.update.paid.fail.pay.order.id.error=\u793A\u4F8B\u8BA2\u5355\u66F4\u65B0\u652F\u4ED8\u72B6\u6001\u5931\u8D25\uFF0C\u652F\u4ED8\u5355\u7F16\u53F7\u4E0D\u5339\u914D |
||||
|
demo.order.update.paid.fail.pay.order.status.not.success=\u793A\u4F8B\u8BA2\u5355\u66F4\u65B0\u652F\u4ED8\u72B6\u6001\u5931\u8D25\uFF0C\u652F\u4ED8\u5355\u72B6\u6001\u4E0D\u662F\u3010\u652F\u4ED8\u6210\u529F\u3011\u72B6\u6001 |
||||
|
demo.order.update.paid.fail.pay.price.not.match=\u793A\u4F8B\u8BA2\u5355\u66F4\u65B0\u652F\u4ED8\u72B6\u6001\u5931\u8D25\uFF0C\u652F\u4ED8\u5355\u91D1\u989D\u4E0D\u5339\u914D |
||||
|
demo.order.refund.fail.not.paid=\u53D1\u8D77\u9000\u6B3E\u5931\u8D25\uFF0C\u793A\u4F8B\u8BA2\u5355\u672A\u652F\u4ED8 |
||||
|
demo.order.refund.fail.refunded=\u53D1\u8D77\u9000\u6B3E\u5931\u8D25\uFF0C\u793A\u4F8B\u8BA2\u5355\u5DF2\u9000\u6B3E |
||||
|
demo.order.refund.fail.refund.not.found=\u53D1\u8D77\u9000\u6B3E\u5931\u8D25\uFF0C\u9000\u6B3E\u8BA2\u5355\u4E0D\u5B58\u5728 |
||||
|
demo.order.refund.fail.refund.not.success=\u53D1\u8D77\u9000\u6B3E\u5931\u8D25\uFF0C\u9000\u6B3E\u8BA2\u5355\u672A\u9000\u6B3E\u6210\u529F |
||||
|
demo.order.refund.fail.refund.order.id.error=\u53D1\u8D77\u9000\u6B3E\u5931\u8D25\uFF0C\u9000\u6B3E\u5355\u7F16\u53F7\u4E0D\u5339\u914D |
||||
|
demo.order.refund.fail.refund.price.not.match=\u53D1\u8D77\u9000\u6B3E\u5931\u8D25\uFF0C\u9000\u6B3E\u5355\u91D1\u989D\u4E0D\u5339\u914D |
||||
|
device.can.send=\u6682\u65E0\u6743\u9650\u64CD\u4F5C |
@ -0,0 +1,150 @@ |
|||||
|
<?xml version="1.0" encoding="UTF-8"?> |
||||
|
<configuration> |
||||
|
<!-- 日志存放路径 --> |
||||
|
<property name="log.path" scope="context" value="/logs" /> |
||||
|
<!-- 日志输出格式 --> |
||||
|
<property name="log.pattern" value="%d{HH:mm:ss.SSS} [%thread] %-5level %logger{20} - [%method,%line] - %msg%n" /> |
||||
|
|
||||
|
<!-- 控制台输出 --> |
||||
|
<appender name="console" class="ch.qos.logback.core.ConsoleAppender"> |
||||
|
<encoder> |
||||
|
<pattern>${log.pattern}</pattern> |
||||
|
</encoder> |
||||
|
</appender> |
||||
|
|
||||
|
|
||||
|
<!-- 系统日志输出 --> |
||||
|
<appender name="file_debug" class="ch.qos.logback.core.rolling.RollingFileAppender"> |
||||
|
<file>${log.path}/sys-debug.log</file> |
||||
|
<!-- 循环政策:基于时间创建日志文件 --> |
||||
|
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> |
||||
|
<!-- 日志文件名格式 --> |
||||
|
<fileNamePattern>${log.path}/sys-debug.%d{yyyy-MM-dd}.log</fileNamePattern> |
||||
|
<!-- 日志最大的历史 10天 --> |
||||
|
<maxHistory>10</maxHistory> |
||||
|
</rollingPolicy> |
||||
|
<encoder> |
||||
|
<pattern>${log.pattern}</pattern> |
||||
|
</encoder> |
||||
|
<filter class="ch.qos.logback.classic.filter.LevelFilter"> |
||||
|
<!-- 过滤的级别 DEBUG--> |
||||
|
<level>DEBUG</level> |
||||
|
<!-- 匹配时的操作:接收(记录) --> |
||||
|
<onMatch>ACCEPT</onMatch> |
||||
|
<!-- 不匹配时的操作:拒绝(不记录) --> |
||||
|
<onMismatch>DENY</onMismatch> |
||||
|
</filter> |
||||
|
</appender> |
||||
|
|
||||
|
<!-- 系统日志输出 --> |
||||
|
<appender name="file_info" class="ch.qos.logback.core.rolling.RollingFileAppender"> |
||||
|
<file>${log.path}/sys-info.log</file> |
||||
|
<!-- 循环政策:基于时间创建日志文件 --> |
||||
|
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> |
||||
|
<!-- 日志文件名格式 --> |
||||
|
<fileNamePattern>${log.path}/sys-info.%d{yyyy-MM-dd}.log</fileNamePattern> |
||||
|
<!-- 日志最大的历史 10天 --> |
||||
|
<maxHistory>10</maxHistory> |
||||
|
</rollingPolicy> |
||||
|
<encoder> |
||||
|
<pattern>${log.pattern}</pattern> |
||||
|
</encoder> |
||||
|
<filter class="ch.qos.logback.classic.filter.LevelFilter"> |
||||
|
<!-- 过滤的级别 --> |
||||
|
<level>INFO</level> |
||||
|
<!-- 匹配时的操作:接收(记录) --> |
||||
|
<onMatch>ACCEPT</onMatch> |
||||
|
<!-- 不匹配时的操作:拒绝(不记录) --> |
||||
|
<onMismatch>DENY</onMismatch> |
||||
|
</filter> |
||||
|
</appender> |
||||
|
|
||||
|
<appender name="file_error" class="ch.qos.logback.core.rolling.RollingFileAppender"> |
||||
|
<file>${log.path}/sys-error.log</file> |
||||
|
<!-- 循环政策:基于时间创建日志文件 --> |
||||
|
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> |
||||
|
<!-- 日志文件名格式 --> |
||||
|
<fileNamePattern>${log.path}/sys-error.%d{yyyy-MM-dd}.log</fileNamePattern> |
||||
|
<!-- 日志最大的历史 10天 --> |
||||
|
<maxHistory>10</maxHistory> |
||||
|
</rollingPolicy> |
||||
|
<encoder> |
||||
|
<pattern>${log.pattern}</pattern> |
||||
|
</encoder> |
||||
|
<filter class="ch.qos.logback.classic.filter.LevelFilter"> |
||||
|
<!-- 过滤的级别 --> |
||||
|
<level>ERROR</level> |
||||
|
<!-- 匹配时的操作:接收(记录) --> |
||||
|
<onMatch>ACCEPT</onMatch> |
||||
|
<!-- 不匹配时的操作:拒绝(不记录) --> |
||||
|
<onMismatch>DENY</onMismatch> |
||||
|
</filter> |
||||
|
</appender> |
||||
|
|
||||
|
<!-- 用户访问日志输出 --> |
||||
|
<appender name="sys-user" class="ch.qos.logback.core.rolling.RollingFileAppender"> |
||||
|
<file>${log.path}/sys-user.log</file> |
||||
|
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> |
||||
|
<!-- 按天回滚 daily --> |
||||
|
<fileNamePattern>${log.path}/sys-user.%d{yyyy-MM-dd}.log</fileNamePattern> |
||||
|
<!-- 日志最大的历史 10天 --> |
||||
|
<maxHistory>10</maxHistory> |
||||
|
</rollingPolicy> |
||||
|
<encoder> |
||||
|
<pattern>${log.pattern}</pattern> |
||||
|
</encoder> |
||||
|
</appender> |
||||
|
|
||||
|
<!-- 规则脚本日志输出 --> |
||||
|
<appender name="script" class="ch.qos.logback.classic.sift.SiftingAppender"> |
||||
|
<discriminator> |
||||
|
<Key>scriptId</Key> |
||||
|
<DefaultValue>0</DefaultValue> |
||||
|
</discriminator> |
||||
|
<sift> |
||||
|
<appender name="execute-script" class="ch.qos.logback.core.rolling.RollingFileAppender"> |
||||
|
<file>${log.path}/script/${scriptId}.log</file> |
||||
|
<Append>true</Append> |
||||
|
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">--> |
||||
|
<!-- 按月回滚 daily --> |
||||
|
<fileNamePattern>${log.path}/rule.%d{yyyy-MM}.log</fileNamePattern> |
||||
|
<!-- 日志最大的历史 3个月 --> |
||||
|
<maxHistory>3</maxHistory> |
||||
|
</rollingPolicy> |
||||
|
<encoder> |
||||
|
<pattern>%d{HH:mm:ss.SSS} [%method,%line] - %msg%n</pattern> |
||||
|
</encoder> |
||||
|
<filter class="ch.qos.logback.classic.filter.ThresholdFilter"> |
||||
|
<level>INFO</level> |
||||
|
</filter> |
||||
|
</appender> |
||||
|
</sift> |
||||
|
</appender> |
||||
|
|
||||
|
<!-- 系统模块日志级别控制 --> |
||||
|
<logger name="com.fastbee" level="debug" /> |
||||
|
<!-- Spring日志级别控制 --> |
||||
|
<logger name="org.springframework" level="warn" /> |
||||
|
|
||||
|
<root level="info"> |
||||
|
<appender-ref ref="console" /> |
||||
|
</root> |
||||
|
|
||||
|
<!--系统操作日志--> |
||||
|
<root level="info"> |
||||
|
<appender-ref ref="file_debug"/> |
||||
|
<appender-ref ref="file_info" /> |
||||
|
<appender-ref ref="file_error" /> |
||||
|
</root> |
||||
|
|
||||
|
<!--系统用户操作日志--> |
||||
|
<logger name="sys-user" level="info"> |
||||
|
<appender-ref ref="sys-user"/> |
||||
|
</logger> |
||||
|
|
||||
|
<!--规则引擎日志--> |
||||
|
<logger name="script" level="info"> |
||||
|
<appender-ref ref="script"/> |
||||
|
</logger> |
||||
|
|
||||
|
</configuration> |
@ -0,0 +1,20 @@ |
|||||
|
<?xml version="1.0" encoding="UTF-8" ?> |
||||
|
<!DOCTYPE configuration |
||||
|
PUBLIC "-//mybatis.org//DTD Config 3.0//EN" |
||||
|
"http://mybatis.org/dtd/mybatis-3-config.dtd"> |
||||
|
<configuration> |
||||
|
<!-- 全局参数 --> |
||||
|
<settings> |
||||
|
<!-- 使全局的映射器启用或禁用缓存 --> |
||||
|
<setting name="cacheEnabled" value="true" /> |
||||
|
<!-- 允许JDBC 支持自动生成主键 --> |
||||
|
<setting name="useGeneratedKeys" value="true" /> |
||||
|
<!-- 配置默认的执行器.SIMPLE就是普通执行器;REUSE执行器会重用预处理语句(prepared statements);BATCH执行器将重用语句并执行批量更新 --> |
||||
|
<setting name="defaultExecutorType" value="SIMPLE" /> |
||||
|
<!-- 指定 MyBatis 所用日志的具体实现 --> |
||||
|
<setting name="logImpl" value="SLF4J" /> |
||||
|
<!-- 使用驼峰命名法转换字段 --> |
||||
|
<!-- <setting name="mapUnderscoreToCamelCase" value="true"/> --> |
||||
|
</settings> |
||||
|
|
||||
|
</configuration> |
@ -0,0 +1,59 @@ |
|||||
|
mode: |
||||
|
type: Standalone |
||||
|
repository: |
||||
|
type: JDBC |
||||
|
props: |
||||
|
# 是否显示 ShardingSpher 的sql,用于Debug |
||||
|
sql-show: true |
||||
|
datasource: |
||||
|
# 配置真实数据源 |
||||
|
names: ds0,ds1 |
||||
|
ds0: # 配置 mysql 数据源 |
||||
|
type: com.alibaba.druid.pool.DruidDataSource |
||||
|
driver-class-name: com.mysql.cj.jdbc.Driver |
||||
|
url: jdbc:mysql://localhost:3306/fastbee?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8 |
||||
|
username: root |
||||
|
password: fastbee |
||||
|
filters: stat,wall |
||||
|
filter: |
||||
|
stat: |
||||
|
enabled: true |
||||
|
# 慢SQL记录 |
||||
|
log-slow-sql: true |
||||
|
slow-sql-millis: 1000 |
||||
|
merge-sql: true |
||||
|
wall: |
||||
|
config: |
||||
|
multi-statement-allow: true |
||||
|
ds1: # 配置 mysql 数据源 |
||||
|
type: com.alibaba.druid.pool.DruidDataSource |
||||
|
driver-class-name: com.mysql.cj.jdbc.Driver |
||||
|
url: jdbc:mysql://localhost:3306/information_schema?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8 |
||||
|
username: root |
||||
|
password: fastbee |
||||
|
|
||||
|
rules: # 配置表规则 |
||||
|
sharding: |
||||
|
# 表策略配置 |
||||
|
tables: |
||||
|
# iot_device_log 是逻辑表 |
||||
|
iot_device_log: |
||||
|
actualDataNodes: ds0.iot_device_log_$->{2024..2030}0$->{1..9},ds0.iot_device_log_$->{2024..2030}1$->{0..2} |
||||
|
tableStrategy: |
||||
|
# 使用标准分片策略 |
||||
|
standard: |
||||
|
# 配置分片字段 |
||||
|
shardingColumn: create_time |
||||
|
# 分片算法名称,不支持大写字母和下划线,否则启动就会报错 |
||||
|
shardingAlgorithmName: time-sharding-algorithm |
||||
|
# 分片算法配置 |
||||
|
shardingAlgorithms: |
||||
|
# 分片算法名称,不支持大写字母和下划线,否则启动就会报错 |
||||
|
time-sharding-algorithm: |
||||
|
# 类型:自定义策略 |
||||
|
type: CLASS_BASED |
||||
|
props: |
||||
|
# 分片策略 |
||||
|
strategy: standard |
||||
|
# 分片算法类 |
||||
|
algorithmClassName: com.fastbee.framework.config.sharding.TimeShardingAlgorithm |
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Some files were not shown because too many files changed in this diff
Loading…
Reference in new issue