设备端,进行消息推送,就是设备的一些信息,比如电量的值,和是否推送成功的状态值
其推送的值的格式是json的格式,推送的标识的cmd,我这里列子是cmd:"signal_test_status"
接收推送的代码是
*/
@RestController("DeviceSendController")
@RequestMapping("/api/device")
public class DeviceSendController {
@Autowired private RoomService roomService;
@Autowired private RoomPublicService roomPublicService;
@Autowired private HotelService hotelService;
@Autowired private OperatorInfoService operatorInfoService;
@Autowired private RequestToDeviceRecordService requestToDeviceRecordService;
public static Map
// 2.2.1获取接口凭证
// URL : https://[域名]/v1/token?appid=APPID&secret=SECRET
@RequestMapping(value = "/v1/token",method = RequestMethod.GET)
@ResponseBody
public DeviceAccessToken getToken(String appid,String secret){
DeviceAccessToken d = appidtokenMap.get(appid);
if(d==null || !d.isAvailable()){
d = new DeviceAccessToken();
Hotel h = hotelService.getHotelByAppid(appid);
if(h==null ){
d.setCode(10003);
return d;
}
if(!h.getSecret().equals(secret)){
d.setCode(10001);
return d;
}
d.setExpired_in(1000*3600*2);
d.setCode(0);
d.setTimeNow();
// d.setToken(OpenDoorUtilMany.getDigitRamdom());
d.setToken(System.nanoTime()+"");
appidtokenMap.put(appid, d);
}
return d;
}//...
// 2.2.2推送接口
// URL : https://[域名]/v1/notify//
@RequestMapping(value = "/v1/notify",method = RequestMethod.POST, consumes = "application/json")
public ApiResponseResult notify(@RequestBody DeviceReq req){
System.out.println("收到推送 notify " );
int code = -1;
if(req.getCmd()==null || "".equals(req.getCmd() )){
return ApiResponseResult.failure("cmd不能为空", 10003); //10003 参数出错
}
System.out.println("收到推送:cmd = " + req.getCmd() );
DeviceAccessToken d = appidtokenMap.get(req.getAppid());
if(d==null || !d.isAvailable()){
return ApiResponseResult.failure("接口凭证过期", 10002); //10002 接口凭证过期
}
Hotel h = hotelService.getHotelByAppid(req.getAppid());
if(h==null ){
return ApiResponseResult.failure("参数出错", 10003); //10003 参数出错
}
// Room r = roomService.getRoomByRoomdevno(req.getRoomnu(), h.getId() );
// if(r==null ){
// return ApiResponseResult.failure("房间不存在", 10003); //10003 参数出错
// }
// String nowtime = CommonUtil.now();
// r.setRecenttime(nowtime);
// roomService.addOrUpdate(r);
Room r = roomService.getRoomByRoomdevno(req.getRoomnu(), h.getId() );
RoomPublic rp = roomPublicService.getByHotelIdAndRoomdevno( h.getId(), req.getRoomnu());
r.setWaitRegister(0);
r.setSuccessRegister(1);
roomService.addOrUpdate(r);
我这里只列判断这个cmd的信息
}else if("signal_test_status".equals(req.getCmd())){//信号测试
// door_barry float 电量
// door_status int 开门状态0关,1开
//更新房间 电量 状态
r.setBarry((int)req.getData().get("battery"));
// r.setStatus( (int) req.getData().get("status") );
r.setBarrytime(nowtime);
roomService.addOrUpdate(r);
int status = (int) req.getData().get("status") ; // 信号:0:不正常,1:正常
if(StringUtils.isNotEmpty( req.getRequestid() )){
RequestToDeviceRecord rr = requestToDeviceRecordService.
findByRequestid(Long.parseLong(req.getRequestid()));
if(rr!= null){ //result = 0; //0-未知 1-成功 -1失败
// if(! req.getRoomnu().equals(rr.getRoomdevno()) ){
// System.out.println("错误的requestid");
// }
if(status==1){
rr.setResult(1);
}else if(status==0){
rr.setResult(-1);
}
rr.setBackoptime(nowtime);
requestToDeviceRecordService.update(rr);
}else{
return ApiResponseResult.failure("找不到对应的requestid记录", 10003); //10003 参数出错
}
}
好推送成功就status为一
就是成功的状态,反之为0,是不成功的状态