JAVA接收第三方的訊息的推送,物聯網的裝置端的訊息推送
裝置端,進行訊息推送,就是裝置的一些資訊,比如電量的值,和是否推送成功的狀態值
其推送的值的格式是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<String, DeviceAccessToken> appidtokenMap = new HashMap<String, DeviceAccessToken>(); //臨時儲存
// 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,是不成功的狀態