分享一个节点注册根据房间号生成随机数二进制四位-----定时器Time
1. 先写一个随机数生成二进制四位
package com.cec.utils;
import java.util.Random;
//根据房间编号自动生成16进制的四位随机数
public class RandomUtils {
/**
* 获取16进制随机数
*/
public String nextHexString(int len) {
if (len == 0) {
return null;
}
byte[] buf = new byte[len];
Random random = new Random(System.currentTimeMillis());
random.nextBytes(buf);
StringBuffer sb = new StringBuffer();
for (int i = 0; i < buf.length; i++) {
String hex = Integer.toHexString(buf[i] & 0xFF);
if (hex.length() == 1) {
hex = '0' + hex;
}
sb.append(hex.toLowerCase());
}
return sb.toString().substring(0,4);
}
}
2.加一个定时30秒,设备没有改变状态,则是不成功的修改为不成功的状态
/**
* 节点注册 roomsetting/room/register
* @param hotelId 酒店ID
* @param roomnu 房间号
* @return
*/
@RequestMapping(value = "/register", method = RequestMethod.GET)
@ResponseBody
public ApiResponseResult register(Long hotelId, String roomNo) {
// 因为前面房间号都是带“-”的,所以这里加一个去“-”
/*String roomnum1 = roomnu.replace("-", "");*/
RoomPublic roompublic=roompublicService.getRoomNo(hotelId, roomNo);
String deviceId = null;
while (true) {
// 用生成工具类生成随机数
RandomUtils randomUtils = new RandomUtils();
deviceId = randomUtils.nextHexString(Integer.parseInt(roomNo));
// 查找酒店id和设备id得到房间对象
RoomPublic roompublic3=roompublicService.getRoomByDeviceId(deviceId, hotelId);
// 判断新生成的设备id在酒店里面不存在
if (roompublic3 == null&&!deviceId.equals("0000")) {
break;
}
}
roompublic.setDeviceId(deviceId);
roompublic.setWaitRegister(1);
roompublic.setSuccessRegister(0);
roompublicService.add(roompublic);
// 加入定时任务
Timer timer = new Timer();
timer.schedule(new TimerTask() {
public void run() {
RoomPublic roompublic2=roompublicService.getRoomNo(hotelId, roomNo);
if (roompublic2.getWaitRegister() == 1) {
// 加个判断,到了30秒了,加入数据库的等待注册状态,还是为1,把他改为零,
roompublic2.setSuccessRegister(0);
roompublic2.setWaitRegister(0);
roompublicService.add(roompublic2);
}
// 定时器关闭 任何情况下,都必须关闭 不要放在if之类
timer.cancel();
}
}, 30000);
return ApiResponseResult.success();
}//...
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统