package com.dy.rtuMw.server.rtuData.pSdV1; 
 | 
  
 | 
import com.dy.common.mw.protocol4Mqtt.MqttSubMsg; 
 | 
import com.dy.common.mw.protocol4Mqtt.pSdV1.upVos.ManureVo; 
 | 
import com.dy.common.springUtil.SpringContextUtil; 
 | 
import com.dy.pipIrrGlobal.pojoPr.PrStManure; 
 | 
import com.dy.rtuMw.server.ServerProperties; 
 | 
import com.dy.rtuMw.server.rtuData.TaskSurpport; 
 | 
import com.dy.rtuMw.server.rtuData.dbSv.DbSv; 
 | 
import org.apache.logging.log4j.LogManager; 
 | 
import org.apache.logging.log4j.Logger; 
 | 
  
 | 
import java.util.HashMap; 
 | 
import java.util.Map; 
 | 
  
 | 
/** 
 | 
 * @Author: liurunyu 
 | 
 * @Date: 2025/6/25 8:56 
 | 
 * @Description 
 | 
 */ 
 | 
public class TkPreGenObjs4ManureSdV1 extends TaskSurpport { 
 | 
  
 | 
    private static Logger log = LogManager.getLogger(TkPreGenObjs4ManureSdV1.class.getName()) ; 
 | 
  
 | 
    //类ID,一定与Tree.xml配置文件中配置一致 
 | 
    public static final String taskId = "TkPreGenObjs4ManureSdV1" ; 
 | 
  
 | 
    //处理上条数据的时刻 
 | 
    private static final Map<String, Long> dealDataAtDateTime = new HashMap<>(); 
 | 
    private static final Map<String, ManureVo> lastUpManureData = new HashMap<>(); 
 | 
  
 | 
    /** 
 | 
     * 执行节点任务 
 | 
     * @param data 需要处理的数据 
 | 
     */ 
 | 
    @Override 
 | 
    public void execute(Object data) { 
 | 
        //前面的任务已经判断了data不为空 
 | 
        MqttSubMsg msg = (MqttSubMsg)data ; 
 | 
        if(msg.vo4Up != null && msg.vo4Up instanceof ManureVo){ 
 | 
            //水肥数据 
 | 
            ManureVo nowVo = (ManureVo)msg.vo4Up ; 
 | 
            ManureVo lastVo = lastUpManureData.get(msg.deviceId + nowVo.no) ; 
 | 
            Long now = System.currentTimeMillis() ; 
 | 
            if(lastVo != null && nowVo.stateIsChanged(lastVo)){ 
 | 
                //状态有变化,最新数据及历史数据都要存储 
 | 
                this.deal(data, msg, nowVo, now, false); 
 | 
            }else{ 
 | 
                //状态无变化 
 | 
                Long lastAt = dealDataAtDateTime.get(msg.deviceId + nowVo.no); 
 | 
                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, 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} ; 
 | 
                if(dealOnlyLast){ 
 | 
                    this.toNextOneTask(data, TkDealManureLastSdV1.taskId); 
 | 
                }else{ 
 | 
                    this.toNextOneTask(data, TkDealManureSdV1.taskId); 
 | 
                } 
 | 
            } 
 | 
        }else{ 
 | 
            log.error("严重错误,未能得到DbSv对象"); 
 | 
        } 
 | 
    } 
 | 
} 
 |