Merge remote-tracking branch 'origin/5.X' into 5.X

This commit is contained in:
sunyuehai 2024-08-07 22:56:05 +08:00
commit aca38a70eb
19 changed files with 281 additions and 133 deletions

View File

@ -30,14 +30,14 @@ import org.dromara.common.websocket.utils.WebSocketUtils;
import org.dromara.system.domain.bo.SysTenantBo;
import org.dromara.system.domain.vo.SysClientVo;
import org.dromara.system.domain.vo.SysTenantVo;
import org.dromara.system.service.ISysClientService;
import org.dromara.system.service.ISysConfigService;
import org.dromara.system.service.ISysSocialService;
import org.dromara.system.service.ISysTenantService;
import org.dromara.system.domain.vo.SysUserVo;
import org.dromara.system.service.*;
import org.dromara.web.domain.bo.EqUserConfigBo;
import org.dromara.web.domain.vo.LoginTenantVo;
import org.dromara.web.domain.vo.LoginVo;
import org.dromara.web.domain.vo.TenantListVo;
import org.dromara.web.service.IAuthStrategy;
import org.dromara.web.service.IEqUserConfigService;
import org.dromara.web.service.SysLoginService;
import org.dromara.web.service.SysRegisterService;
import org.springframework.validation.annotation.Validated;
@ -63,6 +63,7 @@ import java.util.concurrent.TimeUnit;
@RequestMapping("/auth")
public class AuthController {
private final ISysUserService userService;
private final SocialProperties socialProperties;
private final SysLoginService loginService;
private final SysRegisterService registerService;
@ -71,6 +72,7 @@ public class AuthController {
private final ISysSocialService socialUserService;
private final ISysClientService clientService;
private final ScheduledExecutorService scheduledExecutorService;
private final IEqUserConfigService iEqUserConfigService;
/**
@ -103,7 +105,7 @@ public class AuthController {
Long userId = LoginHelper.getUserId();
scheduledExecutorService.schedule(() -> {
WebSocketMessageDto dto = new WebSocketMessageDto();
dto.setMessage("欢迎登录RuoYi-Vue-Plus后台管理系统");
dto.setMessage("欢迎登录莫克后台管理系统");
dto.setSessionKeys(List.of(userId));
WebSocketUtils.publishMessage(dto);
}, 3, TimeUnit.SECONDS);
@ -185,6 +187,15 @@ public class AuthController {
return R.fail("当前系统没有开启注册功能!");
}
registerService.register(user);
SysUserVo sysUserVo = userService.selectUserByUserName(user.getUsername());
EqUserConfigBo bo = new EqUserConfigBo();
bo.setUserId(sysUserVo.getUserId());
bo.setLanguageType("zh-CN");
bo.setTimezoneType("1");//默认 UTC+08:00
bo.setTimeFormat("YYYY-MM-DD");
bo.setCreateBy(sysUserVo.getUserId());
bo.setUpdateBy(sysUserVo.getUserId());
iEqUserConfigService.insertByBo(bo);
return R.ok();
}

View File

@ -1,8 +1,12 @@
package org.dromara.web.controller.app;
import cn.hutool.core.collection.CollUtil;
import jakarta.servlet.http.HttpServletRequest;
import lombok.RequiredArgsConstructor;
import org.dromara.common.core.domain.R;
import org.dromara.common.core.exception.ServiceException;
import org.dromara.common.core.utils.MessageUtils;
import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.satoken.utils.LoginHelper;
@ -19,8 +23,12 @@ import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;
import java.util.*;
import java.util.stream.Collectors;
/**
* app 设备业务
@ -34,6 +42,10 @@ import java.util.Date;
@RequestMapping("/app/device")
public class EqDeviceController extends BaseController {
private final HttpServletRequest request;
private final IEqAreaService eqAreaService;
private final IEqEquipmentService eqEquipmentService;
@ -101,13 +113,38 @@ public class EqDeviceController extends BaseController {
* 获取日志
* @param bo
* @param pageQuery
* @return
* @return todo
*/
@GetMapping("/getDeviceLogs")
public TableDataInfo<EqEquipmentLogVo> getDeviceLogs(EqAppHomeBo bo,PageQuery pageQuery){
public Map<String, List<EqEquipmentLogVo>> getDeviceLogs(EqAppHomeBo bo,PageQuery pageQuery){
if (bo.getEquipmentId() == null) throw new ServiceException("设备ID不能为空");
if (bo.getZoneId() == null) throw new ServiceException("时区zoneId(如 UTC+08:00)不能为空");
EqEquipmentLogBo eqEquipmentLogBo = new EqEquipmentLogBo();
eqEquipmentLogBo.setEquipmentId(bo.getEquipmentId());
return logService.queryPageList(eqEquipmentLogBo, pageQuery);
TableDataInfo<EqEquipmentLogVo> data = logService.queryPageList(eqEquipmentLogBo, pageQuery);
List<EqEquipmentLogVo> rows = data.getRows();
if (CollUtil.isEmpty(rows)) return new HashMap<>();
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String defaultZone = "UTC+08:00";
String targetZone = bo.getZoneId();
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
List<EqEquipmentLogVo> rowsData = rows.stream().peek(x -> {
Integer status = x.getStatus();
x.setLogStatus(MessageUtils.message("logStatus.name" + status));
if(defaultZone.equals(targetZone)){
String dateTimeStr = simpleDateFormat.format(x.getCreateTime());
LocalDateTime localDateTime = LocalDateTime.parse(dateTimeStr, formatter);
ZoneId utc08 = ZoneId.of(defaultZone);// 默认指定原始时区UTC+08:00
ZonedDateTime zonedDateTime = ZonedDateTime.of(localDateTime, utc08);// 转换为ZonedDateTime对象
ZoneId utc = ZoneId.of(targetZone);
String targetUtc = formatter.format(zonedDateTime.withZoneSameInstant(utc));
x.setCreatedYearSecond(targetUtc);
x.setCreatedYearDay(targetUtc.split(" ")[0]);
x.setCreatedYearSecond(targetUtc.split(" ")[1]);
//zc 字典中数据多语言按照录入
}
}).toList();
return rowsData.stream().collect(Collectors.groupingBy(EqEquipmentLogVo::getCreatedYearDay));
}
/**

View File

@ -4,14 +4,12 @@ import cn.dev33.satoken.secure.BCrypt;
import lombok.RequiredArgsConstructor;
import org.dromara.common.core.domain.R;
import org.dromara.common.core.exception.ServiceException;
import org.dromara.common.core.utils.MessageUtils;
import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.satoken.utils.LoginHelper;
import org.dromara.common.web.core.BaseController;
import org.dromara.system.domain.vo.SysUserVo;
import org.dromara.system.service.ISysUserService;
import org.dromara.web.config.CommonYmlConfig;
import org.dromara.web.domain.bo.*;
import org.dromara.web.domain.vo.*;
import org.dromara.web.service.*;
@ -19,7 +17,6 @@ import org.dromara.web.domain.bo.EqAppHomeBo;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
@ -39,10 +36,17 @@ public class EqHomeController extends BaseController {
private final IEqEquipmentService eqEquipmentService;
private final IEqEquipmentLogService logService;
private final IEqShareService shareService;
private final ISysUserService userService;
private final IEqUserConfigService eqUserConfigService;
/**
* 获取用户配置
*/
@GetMapping("/userConfig")
public R<EqUserConfigVo> userConfig() {
return R.ok(eqUserConfigService.userConfig());
}
/**
* 查询家庭主体
@ -126,50 +130,7 @@ public class EqHomeController extends BaseController {
return R.ok(BCrypt.checkpw(bo.getPassword(), sysUserVo.getPassword()));
}
/*
*/
/** todo
* 设备状态实时获取
* @param bo
* @return
*//*
@GetMapping("/getDeviceStatus")
public R<EqEquipmentStatusVo> getDeviceStatus(EqAppHomeBo bo){
EqEquipmentStatusVo result = new EqEquipmentStatusVo();
return R.ok(result);
}
*/
/**
* 获取日志
* @param bo
* @param pageQuery
* @return
*//*
@GetMapping("/getDeviceLogs")
public TableDataInfo<EqEquipmentLogVo> getDeviceLogs(EqAppHomeBo bo,PageQuery pageQuery){
EqEquipmentLogBo eqEquipmentLogBo = new EqEquipmentLogBo();
eqEquipmentLogBo.setEquipmentId(bo.getEquipmentId());
return logService.queryPageList(eqEquipmentLogBo, pageQuery);
}
*/
/**
* 保存日志
* @param eqEquipmentLogBo
*//*
@GetMapping("/saveDeviceLogs")
public void saveDeviceLogs(EqEquipmentLogBo eqEquipmentLogBo){
logService.insertByBo(eqEquipmentLogBo);
}
*/
}

View File

@ -35,17 +35,17 @@ public class EqUserConfig extends BaseEntity {
/**
* 时区类型
*/
private Integer timezoneType;
private String timezoneType;
/**
* 时间格式
*/
private Integer timeFormat;
private String timeFormat;
/**
* 语言种类
*/
private Integer languageType;
private String languageType;
}

View File

@ -36,5 +36,10 @@ public class EqAppHomeBo extends BaseEntity{
* 密码密码校验时使用
*/
private String password;
/**
* 时区zoneId 用于日志 传入字典eq_timezone_type 中的remark值 UTC+08:00
*/
private String zoneId;
}

View File

@ -47,7 +47,7 @@ public class EqEquipmentLogBo extends BaseEntity {
private String equipmentCode;
/**
* 状态
* 状态 eq_status_log_type
* 0.停止中 stop
* 1.关闭中 closing
* 2.开启中 openning
@ -76,6 +76,8 @@ public class EqEquipmentLogBo extends BaseEntity {
@NotNull(message = "状态不能为空", groups = { AddGroup.class, EditGroup.class })
private Integer status;
/**
* 故障状态
* 10.无异常 none
@ -119,6 +121,4 @@ public class EqEquipmentLogBo extends BaseEntity {
*/
@NotNull(message = "星期几不能为空", groups = { AddGroup.class, EditGroup.class })
private Integer dayOfWeek;
}

View File

@ -36,19 +36,19 @@ public class EqUserConfigBo extends BaseEntity {
* 时区类型
*/
@NotNull(message = "时区类型不能为空", groups = { AddGroup.class, EditGroup.class })
private Integer timezoneType;
private String timezoneType;
/**
* 时间格式
*/
@NotNull(message = "时间格式不能为空", groups = { AddGroup.class, EditGroup.class })
private Integer timeFormat;
private String timeFormat;
/**
* 语言种类
*/
@NotNull(message = "语言种类不能为空", groups = { AddGroup.class, EditGroup.class })
private Integer languageType;
private String languageType;
}

View File

@ -72,6 +72,7 @@ public class EqEquipmentDetailVo implements Serializable {
* 80.打开80%
* 90.打开90%
* 100.打开100%
* 故障状态
*/
private String openStatusText;

View File

@ -55,12 +55,41 @@ public class EqEquipmentLogVo implements Serializable {
private String equipmentCode;
/**
* 状态
* 状态 eq_status_log_type
* 0.停止中 stop
* 1.关闭中 closing
* 2.开启中 openning
*
* 10.无异常 none
* 11.红外故障 irException
* 12.电机运转故障 motorRunException
* 13.电机维护故障 motorMaintainException
* 14.设备故障 deviceException
*
* 101.烟雾报警
* 102.红外触发报警
* 103.电机运行报警
* 104.电机维修报警
* 105.非APP开门提醒
* 106.非APP关门提醒
* 107.关门故障报警
* 108.开门故障报警
* 109.开门运行提醒
* 110.关门运行提醒
* 111.忘记关门提醒
* 112.门体手动开启提醒
* 113.半开门运行提醒
* 114.门体停止运行提醒
*/
@ExcelProperty(value = "状态", converter = ExcelDictConvert.class)
@ExcelDictFormat(dictType = "eq_status_type")
private Integer status;
/**
* 日志状态文本
*/
@ExcelProperty(value = "状态", converter = ExcelDictConvert.class)
private String logStatus;
/**
* 故障状态
*/
@ -75,6 +104,17 @@ public class EqEquipmentLogVo implements Serializable {
@ExcelDictFormat(dictType = "eq_line_status")
private Integer lineStatus;
/**
* 创建时间
*/
private Date createTime;
/**
* 年月日时分秒
*/
@ExcelProperty(value = "年月日时分秒")
private String createdYearSecond;
/**
* 年月日
*/

View File

@ -45,21 +45,21 @@ public class EqUserConfigVo implements Serializable {
*/
@ExcelProperty(value = "时区类型", converter = ExcelDictConvert.class)
@ExcelDictFormat(dictType = "eq_timezone_type")
private Integer timezoneType;
private String timezoneType;
/**
* 时间格式
*/
@ExcelProperty(value = "时间格式", converter = ExcelDictConvert.class)
@ExcelDictFormat(dictType = "eq_time_format_type")
private Integer timeFormat;
private String timeFormat;
/**
* 语言种类
*/
@ExcelProperty(value = "语言种类", converter = ExcelDictConvert.class)
@ExcelDictFormat(dictType = "eq_language_type")
private Integer languageType;
private String languageType;
}

View File

@ -65,4 +65,6 @@ public interface IEqUserConfigService {
* @return 是否删除成功
*/
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
EqUserConfigVo userConfig();
}

View File

@ -8,6 +8,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import lombok.RequiredArgsConstructor;
import org.dromara.system.domain.SysOperLog;
import org.springframework.stereotype.Service;
import org.dromara.web.domain.bo.EqEquipmentLogBo;
import org.dromara.web.domain.vo.EqEquipmentLogVo;
@ -80,6 +81,9 @@ public class EqEquipmentLogServiceImpl implements IEqEquipmentLogService {
lqw.eq(bo.getCreatedYearDay() != null, EqEquipmentLog::getCreatedYearDay, bo.getCreatedYearDay());
lqw.eq(bo.getCreatedHourSecond() != null, EqEquipmentLog::getCreatedHourSecond, bo.getCreatedHourSecond());
lqw.eq(bo.getDayOfWeek() != null, EqEquipmentLog::getDayOfWeek, bo.getDayOfWeek());
lqw.between(params.get("beginTime") != null && params.get("endTime") != null,
EqEquipmentLog::getCreateTime, params.get("beginTime"), params.get("endTime"));
lqw.orderByDesc(EqEquipmentLog::getCreateTime);
return lqw;
}

View File

@ -8,6 +8,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import lombok.RequiredArgsConstructor;
import org.dromara.common.satoken.utils.LoginHelper;
import org.springframework.stereotype.Service;
import org.dromara.web.domain.bo.EqUserConfigBo;
import org.dromara.web.domain.vo.EqUserConfigVo;
@ -129,4 +130,11 @@ public class EqUserConfigServiceImpl implements IEqUserConfigService {
}
return baseMapper.deleteByIds(ids) > 0;
}
@Override
public EqUserConfigVo userConfig() {
Long userId = LoginHelper.getUserId();
LambdaQueryWrapper<EqUserConfig> wrapper = Wrappers.lambdaQuery();
return baseMapper.selectVoOne(wrapper.eq(EqUserConfig::getUserId, userId));
}
}

View File

@ -258,3 +258,11 @@ justauth:
client-id: 10**********6
client-secret: 1f7d08**********5b7**********29e
redirect-uri: ${justauth.address}/social-callback?source=gitlab
iot:
baseurl: http://8.219.157.97:8080
url:
scopeAttribute: /api/plugins/telemetry/{entityType}/{entityId}/values/attributes/{scope}
telemetry: /api/plugins/telemetry/{entityType}/{entityId}/values/timeseries
operate: /api/plugins/rpc/oneway/{deviceId}
device: /api/device/{deviceId}

View File

@ -124,6 +124,7 @@ security:
# actuator 监控配置
- /actuator
- /actuator/**
- /app/text/**
# 多租户配置
tenant:

View File

@ -61,25 +61,6 @@ tenant.blocked=Sorry, your tenant is disabled. Please contact the administrator
tenant.expired=Sorry, your tenant has expired. Please contact the administrator.
noinit.name0= details
noinit.name1= Stroke uncalibrated
noinit.name2= If the device is not calibrated, the device cannot be controlled
noinit.name3= Stroke calibration tutorial
noinit.name4= Please perform the operation on the device
noinit.name5= Set the opening position:
noinit.name6= 1. Hold down the SET key
noinit.name7= Observation: The display displays "1" flashing
noinit.name8= 2. Press the "SET" key again
noinit.name9= Observe: The monitor is "1" on
noinit.name10= 3. Long press the "UP" button to make the door to the maximum opening position and then release the hand to stop
noinit.name11= Observation: The door runs in the direction of opening the door, when the door reaches the maximum opening position
noinit.name12= Set the door closing position:
noinit.name13= 4. Press the "SET" button again
noinit.name14= Observe: The display is "2" steady on
noinit.name15= 5. Press and hold the Down key to close the button and release
noinit.name16= Observation: The door runs in the direction of closing, and stops when the door reaches the closed position
noinit.name17= Automatic check:
noinit.name18= 6. Press the "SET" button again
## "Login"
@ -210,6 +191,28 @@ setCommon.alert= alert
setCommon.cancel= cancel
setCommon.confirm= Confirm
##《未设置详情》noinit
noinit.name0= details
noinit.name1= Stroke uncalibrated
noinit.name2= If the device is not calibrated, the device cannot be controlled
noinit.name3= Stroke calibration tutorial
noinit.name4= Please perform the operation on the device
noinit.name5= Set the opening position:
noinit.name6= 1. Hold down the SET key
noinit.name7= Observation: The display displays "1" flashing
noinit.name8= 2. Press the "SET" key again
noinit.name9= Observe: The monitor is "1" on
noinit.name10= 3. Long press the "UP" button to make the door to the maximum opening position and then release the hand to stop
noinit.name11= Observation: The door runs in the direction of opening the door, when the door reaches the maximum opening position
noinit.name12= Set the door closing position:
noinit.name13= 4. Press the "SET" button again
noinit.name14= Observe: The display is "2" steady on
noinit.name15= 5. Press and hold the Down key to close the button and release
noinit.name16= Observation: The door runs in the direction of closing, and stops when the door reaches the closed position
noinit.name17= Automatic check:
noinit.name18= 6. Press the "SET" button again
## "Change Device Name"
setEqname.name0= Changes the device name
setEqname.name1= Please enter a name

View File

@ -60,69 +60,51 @@ tenant.not.exists=对不起, 您的租户不存在,请联系管理员
tenant.blocked=对不起,您的租户已禁用,请联系管理员
tenant.expired=对不起,您的租户已过期,请联系管理员
noinit.name0=详情
noinit.name1=行程未校准
noinit.name2=设备未校准行程,将不能进行设备控制
noinit.name3=行程校准教程
noinit.name4=请在设备上操作
noinit.name5=设置开门位置:
noinit.name6=1.请长按“SET”键
noinit.name7=观察:显示器显示”1”闪烁
noinit.name8=2.再次按下"SET"键
noinit.name9=观察:显示器显示为”1”常亮
noinit.name10=3.长按"UP"键,使门至最大开门位置后松手停止
noinit.name11=观察:门向开门方向运行,当门达到最大开门位置后
noinit.name12=设置关门位置:
noinit.name13=4.再次按下”SET"键
noinit.name14=观察:显示器显示为”2”常亮
noinit.name15=5.长按“向下”键至关闭位置后松手
noinit.name16=观察:门向关门方向运行,当门达到关闭位置后停止
noinit.name17=自动校验:
noinit.name18=6.再次按下"SET"键
##《登录》
##《登录》login
login.name0=登录
login.name1=请输入账号
login.name2=请输入密码
login.name3=我已阅读并同意签署
login.name4=立即注册
##《注册》
##《注册》register
register.name0=注册
register.name1=注册账号
register.name2=请输入账号
register.name3=请输入密码
register.name4=请再次输入密码
##《注册成功》
##《注册成功》registerSuccess
registerSuccess.name0=注册成功
registerSuccess.name1=您的登录账号
registerSuccess.name2=您的密码
registerSuccess.name3=立即登录
##《首页》
##《首页》homepage
homepage.name0=首页
homepage.name1=状态
homepage.name2=已关闭
homepage.name3=打开
##《关门提醒》
##《关门提醒》warningClose
warningClose.name0=关门提醒
warningClose.name1=设备-deviceName-已开门-num-分钟了,请记得关门
warningClose.name2=关门
warningClose.name3=我知道了
##《添加设备》
##《添加设备》add
add.name0=添加设备
add.name1=请输入设备编码
add.name2=请输入
add.name3=添加
## 《添加成功》
## 《添加成功》addSuccess
addSuccess.name0=添加成功
addSuccess.name1=返回
addSuccess.name2=继续搜索
##《添加失败》
##《添加失败》addFailure
addFailure.name0=添加失败
addFailure.name1=请正确的设备编号后再试
addFailure.name2=返回
addFailure.name3=重新添加
##《设备详情》
##《设备详情》detail
detail.name0=详情
##(已关闭 打开10% 打开100%
detail.name1=状态
@ -143,11 +125,11 @@ detail.name15=操作次数
detail.name16=数据日志
detail.name17=清码
detail.name18=对码
##《倒计时设置》
##《倒计时设置》countdown
countdown.name0=倒计时设置
countdown.name1=取消
countdown.name2=确认
##《数据日志》
##《数据日志》log
log.name0=数据日志
log.name1=选择日期
log.name2=今天
@ -159,12 +141,12 @@ log.name7=周四
log.name8=周五
log.name9=周六
log.name10=开门提醒
##《对码》
##《对码》checkcode
checkcode.name0=对码
checkcode.name1=对码中
checkcode.name2=对码成功
checkcode.name3=对码失败请重试
##《清码》
##《清码》clearcode
clearcode.name0=提示
clearcode.name1=请输入登录密码
clearcode.name2=请输入登录密码才能进行设备清码
@ -172,11 +154,11 @@ clearcode.name3=取消
clearcode.name4=确认
clearcode.name5=密码错误请重试
##《设备掉线详情》
##《设备掉线详情》offDetail
offDetail.name0=详情
offDetail.name1=设备已离线
##《优化-设置》
##《优化-设置》set
set.name0=设置
set.name1=设备名称
set.name2=设备位置
@ -200,7 +182,7 @@ set.name19=模组版本
set.name20=MCU版本
set.name21=删除设备
##《通用》
##《通用》setCommon
setCommon.detail=详情
setCommon.add=添加
setCommon.edit=编辑
@ -209,30 +191,52 @@ setCommon.alert=提示
setCommon.cancel=取消
setCommon.confirm=确认
##《修改设备名称》
##《未设置详情》noinit
noinit.name0=详情
noinit.name1=行程未校准
noinit.name2=设备未校准行程,将不能进行设备控制
noinit.name3=行程校准教程
noinit.name4=请在设备上操作
noinit.name5=设置开门位置:
noinit.name6=1.请长按“SET”键
noinit.name7=观察:显示器显示”1”闪烁
noinit.name8=2.再次按下"SET"键
noinit.name9=观察:显示器显示为”1”常亮
noinit.name10=3.长按"UP"键,使门至最大开门位置后松手停止
noinit.name11=观察:门向开门方向运行,当门达到最大开门位置后
noinit.name12=设置关门位置:
noinit.name13=4.再次按下”SET"键
noinit.name14=观察:显示器显示为”2”常亮
noinit.name15=5.长按“向下”键至关闭位置后松手
noinit.name16=观察:门向关门方向运行,当门达到关闭位置后停止
noinit.name17=自动校验:
noinit.name18=6.再次按下"SET"键
##《修改设备名称》setEqname
setEqname.name0=修改设备名称
setEqname.name1=请输入名称
setEqname.name2=上一页
setEqname.name3=确认
##《设备位置修改》
##《设备位置修改》setEqarea
setEqarea.name0=修改设备位置
setEqarea.name1=上一页
setEqarea.name2=确认
##《反弹力设置》
##《反弹力设置》setRebound
setRebound.name0=电机反弹力
setRebound.name1=调节反弹力
setRebound.name2=电机在开门时,若开门的力超出设定范围值,门会立即停止开门;
setRebound.name3=若关门的力超出设定范围值,门会立即停止关闭并开门,此功能可以调整开/关门感应力的范围值。
##《删除设备》
##《删除设备》setDelete
setDelete.name0=删除设备
setDelete.name1=提示
setDelete.name2=删除设备后,将不能管理设备请谨慎操作!
setDelete.name3=取消
setDelete.name4=确认删除
##《时区设置》
##《时区设置》setZone
setZone.name0=时区
setZone.name1=时间格式
##《wifi网络》
##《wifi网络》setWifi
setWifi.name0=wifi网络
setWifi.name1=提示
setWifi.name2=已链接WiFiXXXXXXXX
@ -253,5 +257,31 @@ runStatus.name12=电机运转故障
runStatus.name13=电机维护故障
runStatus.name14=设备故障
## 日志状态
## 《运行状态》
logStatus.name0=停止中
logStatus.name1=关闭中
logStatus.name2=开启中
## 《故障状态》
logStatus.name10=无异常
logStatus.name11=红外故障
logStatus.name12=电机运转故障
logStatus.name13=电机维护故障
logStatus.name14=设备故障
## 《故障状态》
logStatus.name101=烟雾报警
logStatus.name102=红外触发报警
logStatus.name103=电机运行报警
logStatus.name104=电机维修报警
logStatus.name105=非APP开门提醒
logStatus.name106=非APP关门提醒
logStatus.name107=关门故障报警
logStatus.name108=开门故障报警
logStatus.name109=开门运行提醒
logStatus.name110=关门运行提醒
logStatus.name111=忘记关门提醒
logStatus.name112=门体手动开启提醒
logStatus.name113=半开门运行提醒
logStatus.name114=门体停止运行提醒
message.fault.device.notfound = 设备不存在

View File

@ -0,0 +1,37 @@
package org.dromara.test;
import java.text.SimpleDateFormat;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Date;
import java.util.TimeZone;
public class TimeZoneConversion {
private static String getTimeWithZone(String dateTimeStr, String zoneId){
// 定义日期时间格式
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
// 将字符串解析为LocalDateTime
LocalDateTime localDateTime = LocalDateTime.parse(dateTimeStr, formatter);
// 默认指定原始时区UTC+08:00
ZoneId utc08 = ZoneId.of("UTC+08:00");
// 转换为ZonedDateTime对象
ZonedDateTime zonedDateTime = ZonedDateTime.of(localDateTime, utc08);
// 定义目标时区
ZoneId utc = ZoneId.of(zoneId);
return formatter.format(zonedDateTime.withZoneSameInstant(utc));
}
public static void main(String[] args) {
// 给定的时间字符串
String dateTimeStr = "2024-11-03 00:30:00";
String zoneId = "UTC+07:00";
String timeWithZone = getTimeWithZone(dateTimeStr, zoneId);
System.out.println(timeWithZone);
}
}

View File

@ -20,7 +20,7 @@ import org.springframework.web.socket.server.HandshakeInterceptor;
* @author zendwang
*/
@AutoConfiguration
@ConditionalOnProperty(value = "websocket.enabled", havingValue = "true")
@ConditionalOnProperty(value = "websocket.enabled", havingValue = "true")// zc
@EnableConfigurationProperties(WebSocketProperties.class)
@EnableWebSocket
public class WebSocketConfig {