分享一个节点注册根据房间号生成随机数二进制四位-----定时器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();
	}//...
	

 

 

posted @   码海兴辰  阅读(31)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
点击右上角即可分享
微信分享提示