1. 程式人生 > >JAVA接收第三方的訊息的推送,物聯網的裝置端的訊息推送

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,是不成功的狀態