1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
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.pipIrrGlobal.pojoPr.PrStManure;
import com.dy.pipIrrGlobal.pojoRm.RmManureHistory;
import com.dy.pipIrrGlobal.pojoRm.RmManureLast;
import com.dy.rtuMw.server.forMs.SendMsCache;
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;
 
/**
 * @Author: liurunyu
 * @Date: 2025/6/25 11:37
 * @Description
 */
public class TkDealManureSdV1 extends TaskSurpport {
 
    private static Logger log = LogManager.getLogger(TkDealManureSdV1.class.getName());
 
    //类ID,一定与Tree.xml配置文件中配置一致
    public static final String taskId = "TkDealManureSdV1";
 
    /**
     * 执行节点任务
     *
     * @param data 需要处理的数据
     */
    @Override
    public void execute(Object data) {
        //前面的任务已经判断了data不为空且为水肥数据
        MqttSubMsg msg = (MqttSubMsg) data;
        ManureVo stVo = (ManureVo) msg.vo4Up;
        Object[] objs = this.getTaskResults(TkPreGenObjs4ManureSdV1.taskId);
        DbSv sv = (DbSv) objs[0];
        PrStManure stPo = (PrStManure) objs[1];
        try{
            this.doDeal(sv, stPo, msg, stVo);
        }catch (Exception e){
            log.error("保存水肥数据时发生异常", e);
        }
    }
 
    /**
     * 处理上行消息数据
     * @param sv 服务
     * @param stPo 实体对象
     * @param msg 上行的订阅消息
     * @param stVo 上行的设备数据
     */
    private void doDeal(DbSv sv,
                        PrStManure stPo,
                        MqttSubMsg msg,
                        ManureVo stVo) throws Exception {
        RmManureHistory hpo = this.saveHistory(sv, stPo, msg, stVo);
        this.saveOrUpdateLast(sv, stPo, msg, stVo, hpo, true);
    }
    /**
     * 处理上行消息数据
     * @param sv 服务
     * @param stPo 实体对象
     * @param msg 上行的订阅消息
     * @param stVo 上行的设备数据
     * @param hpo 历史记录最新数据
     */
    protected void saveOrUpdateLast(DbSv sv,
                                  PrStManure stPo,
                                  MqttSubMsg msg,
                                  ManureVo stVo,
                                  RmManureHistory hpo,
                                  boolean sendDingMs) throws Exception {
        RmManureLast po = sv.getRmManureLast(stPo.id) ;
        if(po == null){
            po = new RmManureLast();
            po.valueFrom(msg, stVo);
            po.manureId = stPo.id ;
            po.lastHistoryId = hpo==null?null:hpo.id ;
            sv.saveRmManureLast(po) ;
            if(stVo.alarm != null && stVo.alarm == 1 && sendDingMs){
                this.sendMessage(stPo, msg, stVo);
            }
        }else{
            po.valueFrom(msg, stVo);
            po.manureId = stPo.id ;
            po.lastHistoryId = hpo==null?null:hpo.id ;
            sv.updateRmManureLast(po);
            if(stVo.alarm != null && stVo.alarm == 1 && sendDingMs){
                this.sendMessage(stPo, msg, stVo);
            }
        }
    }
 
    /**
     * 处理上行消息数据
     * @param sv 服务
     * @param stPo 实体对象
     * @param msg 上行的订阅消息
     * @param stVo 上行的设备数据
     */
    private RmManureHistory saveHistory(DbSv sv,
                             PrStManure stPo,
                             MqttSubMsg msg,
                             ManureVo stVo) throws Exception {
        RmManureHistory po = new RmManureHistory();
        po.valueFrom(msg, stVo);
        po.manureId = stPo.id ;
        sv.saveRmManureHistory(po);
        return po ;
    }
 
    /**
     * 向钉钉发送消息
     * @param stPo
     * @param msg
     * @param stVo
     */
    private void sendMessage(PrStManure stPo, MqttSubMsg msg, ManureVo stVo){
        String ms = "水肥机“" + stPo.name + "”注肥泵报警";
        try{
            SendMsCache.cacheMs(ms);
        }catch (Exception e){
            log.error("缓存钉钉消息异常:", e);
        }
    }
 
}