设备心跳调整 app新增增设备时绑定联网设备

This commit is contained in:
yuhaiming
2026-06-13 10:51:45 +08:00
parent c7f9df980a
commit c74363afa4
65 changed files with 1622 additions and 592 deletions

View File

@@ -18,7 +18,7 @@ public class DromaraApplication {
SpringApplication application = new SpringApplication(DromaraApplication.class);
application.setApplicationStartup(new BufferingApplicationStartup(2048));
application.run(args);
log.info("(♥◠‿◠)ノ゙ water-Vue-Plus启动成功 ლ(´ڡ`ლ)゙");
log.info("(♥◠‿◠)ノ゙ 系统启动成功 ლ(´ڡ`ლ)゙");
}
}

View File

@@ -98,7 +98,7 @@ public class AuthController {
SysClientVo client = clientService.queryByClientId(clientId);
// 查询不到 client 或 client 内不包含 grantType
if (ObjectUtil.isNull(client) || !StringUtils.contains(client.getGrantType(), grantType)) {
log.info("客户端id: {} 认证类型:{} 异常!.", clientId, grantType);
log.info("客户端ID{} 认证类型:{} 异常", clientId, grantType);
return R.fail(MessageUtils.message("auth.grant.type.error"));
} else if (!SystemConstants.NORMAL.equals(client.getStatus())) {
return R.fail(MessageUtils.message("auth.grant.type.blocked"));

View File

@@ -73,7 +73,7 @@ public class UserActionListener implements SaTokenListener {
SpringUtils.context().publishEvent(logininforEvent);
// 更新登录信息
loginService.recordLoginInfo((Long) loginParameter.getExtra(LoginHelper.USER_KEY), ip);
log.info("user doLogin, userId:{}, token:{}", loginId, tokenValue);
log.info("用户登录用户ID:{},令牌:{}", loginId, tokenValue);
}
/**
@@ -85,7 +85,7 @@ public class UserActionListener implements SaTokenListener {
TenantHelper.dynamic(tenantId, () -> {
RedisUtils.deleteObject(CacheConstants.ONLINE_TOKEN_KEY + tokenValue);
});
log.info("user doLogout, userId:{}, token:{}", loginId, tokenValue);
log.info("用户注销用户ID:{},令牌:{}", loginId, tokenValue);
}
/**
@@ -97,7 +97,7 @@ public class UserActionListener implements SaTokenListener {
TenantHelper.dynamic(tenantId, () -> {
RedisUtils.deleteObject(CacheConstants.ONLINE_TOKEN_KEY + tokenValue);
});
log.info("user doKickout, userId:{}, token:{}", loginId, tokenValue);
log.info("用户被踢下线用户ID:{},令牌:{}", loginId, tokenValue);
}
/**
@@ -109,7 +109,7 @@ public class UserActionListener implements SaTokenListener {
TenantHelper.dynamic(tenantId, () -> {
RedisUtils.deleteObject(CacheConstants.ONLINE_TOKEN_KEY + tokenValue);
});
log.info("user doReplaced, userId:{}, token:{}", loginId, tokenValue);
log.info("用户被顶下线用户ID:{},令牌:{}", loginId, tokenValue);
}
/**

View File

@@ -55,6 +55,9 @@ mqtt:
pending-set-key: "mqtt:command:pending:ids"
device-status-cache-prefix: "mqtt:device:status:"
device-status-cache-ttl-seconds: 300
offline-check:
enabled: true
interval-ms: 90000
topics:
subscribe:

View File

@@ -1 +1,78 @@
#错误消息
#错误消息
operation.success=操作成功
operation.fail=操作失败
query.success=查询成功
not.null=* 必须填写
user.jcaptcha.error=验证码错误
user.jcaptcha.expire=验证码已失效
user.not.exists=对不起, 您的账号:{0} 不存在.
user.password.not.match=用户不存在/密码错误
user.password.retry.limit.count=密码输入错误{0}次
user.password.retry.limit.exceed=密码输入错误{0}次,账户锁定{1}分钟
user.password.delete=对不起,您的账号:{0} 已被删除
user.blocked=对不起,您的账号:{0} 已禁用,请联系管理员
role.blocked=角色已封禁,请联系管理员
user.logout.success=退出成功
length.not.valid=长度必须在{min}到{max}个字符之间
user.username.not.blank=用户名不能为空
user.username.not.valid=* 2到20个汉字、字母、数字或下划线组成且必须以非数字开头
user.username.length.valid=账户长度必须在{min}到{max}个字符之间
user.password.not.blank=用户密码不能为空
user.password.length.valid=用户密码长度必须在{min}到{max}个字符之间
user.password.not.valid=* 5-50个字符
user.password.format.valid=密码必须包含大写字母、小写字母、数字和特殊字符
user.email.not.valid=邮箱格式错误
user.email.not.blank=邮箱不能为空
user.email.not.username=邮箱号不一致
user.phonenumber.not.blank=用户手机号不能为空
user.mobile.phone.number.not.valid=手机号格式错误
user.mobile.phone.number.not.username=手机号不一致
user.login.success=登录成功
user.register.success=注册成功
user.register.save.error=保存用户 {0} 失败,注册账号已存在
user.register.error=注册失败,请联系系统管理人员
user.notfound=请重新登录
user.forcelogout=管理员强制退出,请重新登录
user.unknown.error=未知错误,请重新登录
auth.grant.type.error=认证权限类型错误
auth.grant.type.blocked=认证权限类型已禁用
auth.grant.type.not.blank=认证权限类型不能为空
auth.clientid.not.blank=认证客户端id不能为空
##文件上传消息
upload.exceed.maxSize=上传的文件大小超出限制的文件大小!<br/>允许的文件最大大小是:{0}MB
upload.filename.exceed.length=上传的文件名最长{0}个字符
##权限
no.permission=您没有数据的权限,请联系管理员添加权限 [{0}]
no.create.permission=您没有创建数据的权限,请联系管理员添加权限 [{0}]
no.update.permission=您没有修改数据的权限,请联系管理员添加权限 [{0}]
no.delete.permission=您没有删除数据的权限,请联系管理员添加权限 [{0}]
no.export.permission=您没有导出数据的权限,请联系管理员添加权限 [{0}]
no.view.permission=您没有查看数据的权限,请联系管理员添加权限 [{0}]
repeat.submit.message=不允许重复提交,请稍候再试
rate.limiter.message=访问过于频繁,请稍候再试
sms.code.not.blank=短信验证码不能为空
sms.code.retry.limit.count=短信验证码输入错误{0}次
sms.code.retry.limit.exceed=短信验证码输入错误{0}次,账户锁定{1}分钟
email.code.not.blank=邮箱验证码不能为空
email.code.retry.limit.count=邮箱验证码输入错误{0}次
email.code.retry.limit.exceed=邮箱验证码输入错误{0}次,账户锁定{1}分钟
xcx.code.not.blank=小程序[code]不能为空
social.source.not.blank=第三方登录平台[source]不能为空
social.code.not.blank=第三方登录平台[code]不能为空
social.state.not.blank=第三方登录平台[state]不能为空
##租户
tenant.number.not.blank=租户编号不能为空
tenant.not.exists=对不起, 您的租户不存在,请联系管理员
tenant.blocked=对不起,您的租户已禁用,请联系管理员
tenant.expired=对不起,您的租户已过期,请联系管理员
##APP
app.device.no.not.blank=设备编号不能为空
app.device.not.exists.or.denied=设备不存在或无权访问
app.schedule.id.not.blank=排程编号不能为空
app.schedule.not.exists.or.denied=排程不存在或无权访问
app.schedule.id.not.blank.request=scheduleId不能为空
app.schedule.devices.not.blank=deviceNos不能为空
app.watering.log.id.not.blank=浇水记录编号不能为空
app.watering.log.not.exists.or.denied=浇水记录不存在或无权访问
app.user.data.denied=没有权限访问用户数据!
app.user.phone.exists=修改用户'{0}'失败,手机号码已存在

View File

@@ -1,4 +1,7 @@
#错误消息
# error messages
operation.success=Operation successful
operation.fail=Operation failed
query.success=Query successful
not.null=* Required fill in
user.jcaptcha.error=Captcha error
user.jcaptcha.expire=Captcha invalid
@@ -6,9 +9,9 @@ user.not.exists=Sorry, your account: {0} does not exist
user.password.not.match=User does not exist/Password error
user.password.retry.limit.count=Password input error {0} times
user.password.retry.limit.exceed=Password input error {0} times, account locked for {1} minutes
user.password.delete=Sorry, your account{0} has been deleted
user.password.delete=Sorry, your account: {0} has been deleted
user.blocked=Sorry, your account: {0} has been disabled. Please contact the administrator
role.blocked=Role disabledplease contact administrators
role.blocked=Role disabled, please contact administrators
user.logout.success=Exit successful
length.not.valid=The length must be between {min} and {max} characters
user.username.not.blank=Username cannot be blank
@@ -20,29 +23,31 @@ user.password.not.valid=* 5-50 characters
user.password.format.valid=Password must contain uppercase, lowercase, digit, and special character
user.email.not.valid=Mailbox format error
user.email.not.blank=Mailbox cannot be blank
user.email.not.username=Email does not match the current user
user.phonenumber.not.blank=Phone number cannot be blank
user.mobile.phone.number.not.valid=Phone number format error
user.mobile.phone.number.not.username=Phone number does not match the current user
user.login.success=Login successful
user.register.success=Register successful
user.register.save.error=Failed to save user {0}, The registered account already exists
user.register.error=Register failed, please contact system administrator
user.notfound=Please login again
user.forcelogout=The administrator is forced to exitplease login again
user.forcelogout=The administrator is forced to exit, please login again
user.unknown.error=Unknown error, please login again
auth.grant.type.error=Auth grant type error
auth.grant.type.blocked=Auth grant type disabled
auth.grant.type.not.blank=Auth grant type cannot be blank
auth.clientid.not.blank=Auth clientid cannot be blank
##文件上传消息
upload.exceed.maxSize=The uploaded file size exceeds the limit file size<br/>the maximum allowed file size is{0}MB
## upload messages
upload.exceed.maxSize=The uploaded file size exceeds the limit file size!<br/>the maximum allowed file size is: {0}MB!
upload.filename.exceed.length=The maximum length of uploaded file name is {0} characters
##权限
no.permission=You do not have permission to the dataplease contact your administrator to add permissions [{0}]
no.create.permission=You do not have permission to create dataplease contact your administrator to add permissions [{0}]
no.update.permission=You do not have permission to modify dataplease contact your administrator to add permissions [{0}]
no.delete.permission=You do not have permission to delete dataplease contact your administrator to add permissions [{0}]
no.export.permission=You do not have permission to export dataplease contact your administrator to add permissions [{0}]
no.view.permission=You do not have permission to view dataplease contact your administrator to add permissions [{0}]
## permissions
no.permission=You do not have permission to the data, please contact your administrator to add permissions [{0}]
no.create.permission=You do not have permission to create data, please contact your administrator to add permissions [{0}]
no.update.permission=You do not have permission to modify data, please contact your administrator to add permissions [{0}]
no.delete.permission=You do not have permission to delete data, please contact your administrator to add permissions [{0}]
no.export.permission=You do not have permission to export data, please contact your administrator to add permissions [{0}]
no.view.permission=You do not have permission to view data, please contact your administrator to add permissions [{0}]
repeat.submit.message=Repeat submit is not allowed, please try again later
rate.limiter.message=Visit too frequently, please try again later
sms.code.not.blank=Sms code cannot be blank
@@ -55,8 +60,19 @@ xcx.code.not.blank=Mini program [code] cannot be blank
social.source.not.blank=Social login platform [source] cannot be blank
social.code.not.blank=Social login platform [code] cannot be blank
social.state.not.blank=Social login platform [state] cannot be blank
##租户
## tenant
tenant.number.not.blank=Tenant number cannot be blank
tenant.not.exists=Sorry, your tenant does not exist. Please contact the administrator
tenant.blocked=Sorry, your tenant is disabled. Please contact the administrator
tenant.expired=Sorry, your tenant has expired. Please contact the administrator.
## APP
app.device.no.not.blank=Device number cannot be blank
app.device.not.exists.or.denied=Device does not exist or access is denied
app.schedule.id.not.blank=Schedule ID cannot be blank
app.schedule.not.exists.or.denied=Schedule does not exist or access is denied
app.schedule.id.not.blank.request=scheduleId cannot be blank
app.schedule.devices.not.blank=deviceNos cannot be blank
app.watering.log.id.not.blank=Watering log ID cannot be blank
app.watering.log.not.exists.or.denied=Watering log does not exist or access is denied
app.user.data.denied=No permission to access user data
app.user.phone.exists=Failed to update user ''{0}'': phone number already exists

View File

@@ -1,4 +1,7 @@
#错误消息
operation.success=操作成功
operation.fail=操作失败
query.success=查询成功
not.null=* 必须填写
user.jcaptcha.error=验证码错误
user.jcaptcha.expire=验证码已失效
@@ -20,8 +23,10 @@ user.password.not.valid=* 5-50个字符
user.password.format.valid=密码必须包含大写字母、小写字母、数字和特殊字符
user.email.not.valid=邮箱格式错误
user.email.not.blank=邮箱不能为空
user.email.not.username=邮箱号不一致
user.phonenumber.not.blank=用户手机号不能为空
user.mobile.phone.number.not.valid=手机号格式错误
user.mobile.phone.number.not.username=手机号不一致
user.login.success=登录成功
user.register.success=注册成功
user.register.save.error=保存用户 {0} 失败,注册账号已存在
@@ -60,3 +65,14 @@ tenant.number.not.blank=租户编号不能为空
tenant.not.exists=对不起, 您的租户不存在,请联系管理员
tenant.blocked=对不起,您的租户已禁用,请联系管理员
tenant.expired=对不起,您的租户已过期,请联系管理员
##APP
app.device.no.not.blank=设备编号不能为空
app.device.not.exists.or.denied=设备不存在或无权访问
app.schedule.id.not.blank=排程编号不能为空
app.schedule.not.exists.or.denied=排程不存在或无权访问
app.schedule.id.not.blank.request=scheduleId不能为空
app.schedule.devices.not.blank=deviceNos不能为空
app.watering.log.id.not.blank=浇水记录编号不能为空
app.watering.log.not.exists.or.denied=浇水记录不存在或无权访问
app.user.data.denied=没有权限访问用户数据!
app.user.phone.exists=修改用户'{0}'失败,手机号码已存在