|  |  | 
 |  |  |             ManureVo lastVo = lastUpManureData.get(msg.deviceId + nowVo.no) ; | 
 |  |  |             Long now = System.currentTimeMillis() ; | 
 |  |  |             if(lastVo != null && nowVo.stateIsChanged(lastVo)){ | 
 |  |  |                 //状态有变化 | 
 |  |  |                 this.deal(data, msg, nowVo, now); | 
 |  |  |                 //状态有变化,最新数据及历史数据都要存储 | 
 |  |  |                 this.deal(data, msg, nowVo, now, false); | 
 |  |  |             }else{ | 
 |  |  |                 //状态无变化 | 
 |  |  |                 Long lastAt = dealDataAtDateTime.get(msg.deviceId + nowVo.no); | 
 |  |  |                 if(lastAt == null || ((now - lastAt) >= ServerProperties.mqttAcceptDataMinInterval)){ | 
 |  |  |                     //超过最小时间间隔 | 
 |  |  |                     this.deal(data, msg, nowVo, now); | 
 |  |  |                 if(lastAt == null || ((now - lastAt) >= ServerProperties.acceptManureDataMinInterval)){ | 
 |  |  |                     //超过最小时间间隔, 最新数据及历史数据都要存储 | 
 |  |  |                     this.deal(data, msg, nowVo, now, false); | 
 |  |  |                 }else{ | 
 |  |  |                     //未超过最小时间间隔, 最新数据要存储,以备客户端及时查看状态 | 
 |  |  |                     this.deal(data, msg, nowVo, now, true); | 
 |  |  |                 } | 
 |  |  |             } | 
 |  |  |             lastUpManureData.put(msg.deviceId + nowVo.no, nowVo); | 
 |  |  |  | 
 |  |  |             if(msg.commandId != null && !msg.commandId.equals("")){ | 
 |  |  |                 this.toNextOneTask(data, TkFindComResponseSdV1.taskId); | 
 |  |  |             } | 
 |  |  |         } | 
 |  |  |     } | 
 |  |  |     private void deal(Object data, MqttSubMsg msg, ManureVo stVo, Long now){ | 
 |  |  |     private void deal(Object data, MqttSubMsg msg, ManureVo stVo, Long now, boolean dealOnlyLast){ | 
 |  |  |         dealDataAtDateTime.put(msg.deviceId + stVo.no, now); | 
 |  |  |         DbSv sv = SpringContextUtil.getBean(DbSv.class) ; | 
 |  |  |         if(sv != null){ | 
 |  |  |             PrStManure stPo = sv.getStManureByFBoxIdAndNo(msg.deviceId, stVo.no) ; | 
 |  |  |             if(stPo != null){ | 
 |  |  |                 this.taskResult = new Object[]{sv, stPo} ; | 
 |  |  |                 this.toNextTasks(data); | 
 |  |  |                 if(dealOnlyLast){ | 
 |  |  |                     this.toNextOneTask(data, TkDealManureLastSdV1.taskId); | 
 |  |  |                 }else{ | 
 |  |  |                     this.toNextOneTask(data, TkDealManureSdV1.taskId); | 
 |  |  |                 } | 
 |  |  |             } | 
 |  |  |         }else{ | 
 |  |  |             log.error("严重错误,未能得到DbSv对象"); |