liurunyu
2024-11-08 04779efe2410fb0df1ff983b26384d56471b85cf
pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/src/main/java/com/dy/testClient/tcpClient/MyThreadJob.java
@@ -1,46 +1,122 @@
package com.dy.testClient.tcpClient;
import com.dy.common.threadPool.ThreadPool;
import com.dy.testClient.httpCl.*;
import java.util.Base64;
import com.dy.common.util.ByteUtil;
import com.dy.testClient.ServerProperties;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.apache.mina.core.session.IoSession;
public class MyThreadJob  implements ThreadPool.Job {
    private static final Logger log = LogManager.getLogger(MyThreadJob.class) ;
    public static String icCardAddr = "3B7D1E1A" ;
    public static String icCardNo = "61181622830147821" ;
    public static String openValveDt = "240711163700" ;
    public static String cdC0 = "C0" ;
    public static String cd83Open = "83Open" ;
    public static String cd83Close = "83Close" ;
    public static String curCd = cdC0 ;//通过修改这个值,来改变上报数据类型
    public String rtuAddr;
    public String serverIp;
    public Integer serverPort;
    public IoSession session ;
    public boolean exceptionOnConnect = false ;
    public static final int connectTimeout = 3000 ;
    public int sendTimes = 1 ;//发送数据次数
    public int heartbeatTimes = 1 ;//上报心跳次数
    public long overStart = 0L;
    public boolean isOver = false ;
    public MyThreadJob(){
    }
    public MyThreadJob(String rtuAddr){
    public MyThreadJob(String rtuAddr, String serverIp, Integer serverPort){
        this.rtuAddr = rtuAddr ;
        this.serverIp = serverIp ;
        this.serverPort = serverPort ;
    }
    @Override
    public void execute() throws Exception {
        testP206V1_0_0() ;
    }
    private void testP206V1_0_0(){
        try{
            RtuData4MeterV1_0 rd = new RtuData4MeterV1_0() ;
            byte[] bs = rd.create(rtuAddr) ;
            bs = Base64.getEncoder().encode(bs) ;
            UpDataPayloadVo payloadVo = new UpDataPayloadVo() ;
            payloadVo.APPdata = new String(bs, "UTF-8") ;
            UpDataVo vo = new UpDataVo(rtuAddr, "8086" + rtuAddr) ;
            vo.payload = payloadVo ;
            String json = vo.toJson() ;
            byte[] bytes = json.getBytes() ;
            HttpPost.post(bytes);
        }catch(Exception e){
            e.printStackTrace();
        }finally{
            HttpClUnit.clientOver() ;
        if(!this.isOver){
            if(session != null){
                if(sendTimes <= ServerProperties.sendTimes){
                    log.info("RTU" + rtuAddr + "开始任务");
                    log.info("RTU" + rtuAddr + "将要执行" + ServerProperties.sendTimes + "轮次任务,当前轮次是" + sendTimes);
                    sendDataOfP206V1(curCd) ;
                }else{
                    if(ServerProperties.sendOverThenCloseConnect == 1){
                        log.info("RTU" + rtuAddr + "等待一会,以接收通信中间件下行数据");
                        if(overStart == 0){
                            overStart = System.currentTimeMillis() ;
                        }else{
                            long now = System.currentTimeMillis() ;
                            if(now - overStart >= 30 * 1000){
                                this.jobOver() ;
                            }
                        }
                    }else{
                        this.jobOver() ;
                    }
                }
            }
        }
    }
    private void sendDataOfP206V1(String cd){
        try{
            if(heartbeatTimes > ServerProperties.heartbeatTimes){
                heartbeatTimes = 1 ;
                byte[] bs = null ;
                if(cd.equals(cdC0)){
                    bs = RtuUpData.createCdC0(this.rtuAddr) ;
                }else if(cd.equals(cd83Open)){
                    bs = RtuUpData.createCd83Open(this.rtuAddr, icCardAddr, icCardNo, openValveDt) ;
                }else if(cd.equals(cd83Close)){
                    bs = RtuUpData.createCd83Close(this.rtuAddr, icCardAddr, icCardNo, openValveDt) ;
                }
                this.session.write(bs) ;
                log.info("RTU" + rtuAddr + "发送了上行数据:" + ByteUtil.bytes2Hex(bs, false));
                TcpClUnit.clientSendData();
                sendTimes++ ;
            }else{
                this.sendHeartbeat() ;
                TcpClUnit.clientSendData();
                heartbeatTimes++ ;
            }
        }catch(Exception e){
            e.printStackTrace();
        }
    }
    private void sendHeartbeat(){
        try{
            byte[] bs = RtuUpData.createHeartbeat(this.rtuAddr) ;
            this.session.write(bs) ;
            log.info("RTU" + rtuAddr + "发送了心跳数据:" + ByteUtil.bytes2Hex(bs, false));
        }catch (Exception e){
            e.printStackTrace();
        }
    }
    private void jobOver(){
        if(ServerProperties.sendOverThenCloseConnect == 1){
            session.closeOnFlush() ;
        }
        this.isOver = true ;
        TcpClUnit.clientOver() ;
    }
    @Override
    public void destroy() {