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,是不成功的状态

猜你喜欢

转载自blog.csdn.net/LRXmrlirixing/article/details/84180688