liurunyu
6 天以前 4efc605092f68311876299290a33697ebbfd3a5d
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
129
130
131
132
133
package com.dy.rtuMw.server.rtuData.pSdV1;
 
import com.dy.common.mw.protocol4Mqtt.MqttSubMsg;
import com.dy.common.mw.protocol4Mqtt.pSdV1.upVos.SoilVo;
import com.dy.common.util.DateTime;
import com.dy.pipIrrGlobal.pojoPr.PrStSoil;
import com.dy.pipIrrGlobal.pojoRm.RmSoilDay;
import com.dy.pipIrrGlobal.pojoRm.RmSoilHistory;
import com.dy.pipIrrGlobal.pojoRm.RmSoilLast;
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:38
 * @Description
 */
public class TkDealSoilSdV1 extends TaskSurpport {
 
    private static Logger log = LogManager.getLogger(TkDealSoilSdV1.class.getName());
 
    //类ID,一定与Tree.xml配置文件中配置一致
    public static final String taskId = "TkDealSoilSdV1";
 
    /**
     * 执行节点任务
     *
     * @param data 需要处理的数据
     */
    @Override
    public void execute(Object data) {
        //前面的任务已经判断了data不为空且为墒情数据
        MqttSubMsg msg = (MqttSubMsg) data;
        SoilVo stVo = (SoilVo) msg.vo4Up;
        Object[] objs = this.getTaskResults(TkPreGenObjs4SoilSdV1.taskId);
        DbSv sv = (DbSv) objs[0];
        PrStSoil stPo = (PrStSoil) 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,
                        PrStSoil stPo,
                        MqttSubMsg msg,
                        SoilVo stVo) throws Exception {
        RmSoilHistory hpo = this.saveHistory(sv, stPo, msg, stVo);
        this.saveOrUpdateLast(sv, stPo, msg, stVo, hpo);
        this.saveOrUpdateDay(sv, stPo, msg, stVo, hpo);
    }
 
    /**
     * 处理上行消息数据
     * @param sv 服务
     * @param stPo 实体对象
     * @param msg 上行的订阅消息
     * @param stVo 上行的设备数据
     * @param hpo 历史记录最新数据
     */
    private void saveOrUpdateLast(DbSv sv,
                                  PrStSoil stPo,
                                  MqttSubMsg msg,
                                  SoilVo stVo,
                                  RmSoilHistory hpo) throws Exception {
        RmSoilLast po = sv.getRmSoilLast(stPo.id) ;
        if(po == null){
            po = new RmSoilLast();
            po.valueFrom(msg, stVo);
            po.soilId = stPo.id ;
            po.lastHistoryId = hpo==null?null:hpo.id ;
            sv.saveRmSoilLast(po) ;
        }else{
            po.valueFrom(msg, stVo);
            po.soilId = stPo.id ;
            po.lastHistoryId = hpo==null?null:hpo.id ;
            sv.updateRmSoilLast(po);
        }
    }
 
    /**
     * 处理上行消息数据
     * @param sv 服务
     * @param stPo 实体对象
     * @param msg 上行的订阅消息
     * @param stVo 上行的设备数据
     */
    private RmSoilHistory saveHistory(DbSv sv,
                                        PrStSoil stPo,
                                        MqttSubMsg msg,
                                        SoilVo stVo) throws Exception {
        RmSoilHistory po = new RmSoilHistory();
        po.valueFrom(msg, stVo);
        po.soilId = stPo.id ;
        sv.saveRmSoilHistory(po);
        return po ;
    }
    /**
     * 处理上行消息数据
     * @param sv 服务
     * @param stPo 实体对象
     * @param msg 上行的订阅消息
     * @param stVo 上行的设备数据
     * @param hpo 历史记录最新数据
     */
    private void saveOrUpdateDay(DbSv sv,
                                  PrStSoil stPo,
                                  MqttSubMsg msg,
                                  SoilVo stVo,
                                  RmSoilHistory hpo) throws Exception {
        RmSoilDay po = sv.getRmSoilDay(stPo.id, Integer.parseInt(DateTime.yyyyMMdd())) ;
        if(po == null){
            po = new RmSoilDay();
            po.valueFrom(msg, stVo);
            po.soilId = stPo.id ;
            sv.saveRmSoilDay(po) ;
        }else{
            po.updateFrom(msg, stVo);
            po.soilId = stPo.id ;
            sv.updateRmSoilDay(po);
        }
    }
}