| | |
| | | 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); |
| | | } |
| | | } |
| | | 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对象"); |