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
134
package com.dy.rtuMw.server.rtuData.p206V2;
 
import com.dy.common.mw.protocol.Data;
import com.dy.common.mw.protocol.p206V2.DataV2;
import com.dy.common.mw.protocol.p206V2.upVos.DataCd84Vo;
import com.dy.pipIrrGlobal.pojoPr.PrController;
import com.dy.pipIrrGlobal.pojoRm.RmWorkReportHistory;
import com.dy.pipIrrGlobal.pojoRm.RmWorkReportLast;
import com.dy.pipIrrGlobal.pojoSe.SeClient;
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 2024/2/27 14:20
 * @LastEditTime 2024/2/27 14:20
 * @Description 阀开工作报
 */
public class TkDealWorkReportV2 extends TaskSurpport {
 
    private static final Logger log = LogManager.getLogger(TkDealWorkReportV2.class.getName()) ;
 
    private static final Map<String, Integer> RtuReportTimes = new HashMap<>();
 
    //类ID,一定与Tree.xml配置文件中配置一致
    public static final String taskId = "TkDealWorkReportV2" ;
 
    /**
     * 执行节点任务: 处理控制器开阀上报
     * @param data 需要处理的数据
     */
    @Override
    public void execute(Object data) {
        Data d = (Data) data;
        DataV2 dV2 = (DataV2) d.getSubData();//前面任务已经判断不为null
        Object cdObj = dV2.subData;
        if (cdObj != null && cdObj instanceof DataCd84Vo) {
            boolean deal = false ;
            Integer times = RtuReportTimes.get(d.rtuAddr) ;
            if(times == null){
                times = 1 ;
                RtuReportTimes.put(d.rtuAddr, times) ;
                deal = true ;//第一次
            }else{
                times++ ;
                if(times > ServerProperties.workReportDealOneByTimes){
                    times = 1 ;//循环第一次
                    deal = true ;
                }
                RtuReportTimes.put(d.rtuAddr, times) ;
            }
            if(deal){
                Object[] objs = this.getTaskResults(TkPreGenObjsV2.taskId) ;
                DbSv sv = (DbSv)objs[0] ;
                PrController controller = (PrController)objs[1] ;
                SeClient clientVo = (SeClient)objs[3] ;//这个值对象中只有id和name会有值
                try{
                    this.doDeal(sv, clientVo, controller, d.getRtuAddr(), dV2, (DataCd84Vo)cdObj) ;
                }catch (Exception e){
                    log.error("保存控制器阀开工作报时发生异常", e);
                }
            }
        }
    }
    /**
     * 处理阀开工作报数据
     * @param sv 服务
     * @param clientVo 农户对象(不为空时,只有id和name有值)
     * @param controller 控制器对象
     * @param rtuAddr 控制器地址
     * @param dataCd84Vo 工作报数据对象
     */
    private void doDeal(DbSv sv, SeClient clientVo, PrController controller, String rtuAddr, DataV2 dV2, DataCd84Vo dataCd84Vo) throws Exception {
        this.saveOrUpdateLast(sv, clientVo, controller, rtuAddr, dV2, dataCd84Vo);
        this.saveHistory(sv, clientVo, controller, rtuAddr, dV2, dataCd84Vo);
    }
 
    /**
     * 保存阀开工作报最新数据
     * @param sv
     * @param clientVo 农户对象(不为空时,只有id和name有值)
     * @param controller
     * @param rtuAddr
     * @param dV2
     * @param cdData
     */
    private void saveOrUpdateLast(DbSv sv, SeClient clientVo, PrController controller, String rtuAddr, DataV2 dV2, DataCd84Vo cdData) throws Exception {
        RmWorkReportLast po = sv.getRmWorkReportLast(controller.getIntakeId()) ;
        if(po == null){
            po = new RmWorkReportLast() ;
            po.clientId = clientVo==null?null:clientVo.getId() ;
            po.clientName = clientVo==null?null:clientVo.getName() ;
            po.controllerId = controller==null?null:controller.getId();
            po.intakeId = controller==null?null:controller.getIntakeId();
            po.rtuAddr = rtuAddr;
            po.valueFrom(dV2, cdData);
            sv.saveRmWorkReportLast(po) ;
        }else{
            po.clientId = clientVo==null?null:clientVo.getId() ;
            po.clientName = clientVo==null?null:clientVo.getName() ;
            po.controllerId = controller==null?null:controller.getId();
            po.intakeId = controller==null?null:controller.getIntakeId();
            po.valueFrom(dV2, cdData);
            sv.updateRmWorkReportLast(po);
        }
    }
    /**
     * 保存阀开工作报历史数据
     * @param sv
     * @param clientVo 农户对象(不为空时,只有id和name有值)
     * @param controller
     * @param rtuAddr
     * @param dV2
     * @param cdData
     */
    private void saveHistory(DbSv sv, SeClient clientVo, PrController controller, String rtuAddr, DataV2 dV2, DataCd84Vo cdData) throws Exception {
        RmWorkReportHistory po = new RmWorkReportHistory();
        po.clientId = clientVo==null?null:clientVo.getId() ;
        po.clientName = clientVo==null?null:clientVo.getName() ;
        po.controllerId = controller==null?null:controller.getId();
        po.intakeId = controller==null?null:controller.getIntakeId();
        po.rtuAddr = rtuAddr;
        po.valueFrom(dV2, cdData);
        sv.saveRmWorkReportHistory(po) ;
    }
 
 
}