/**
*
Description:
* Copyright: Copyright (c) 2020
* Company: www.31gps.net
* @author chencq
* @version 1.0
*/
package com.ruoyi.sy.gps31;
import com.alibaba.fastjson2.JSON;
import com.gps31.push.netty.PushClient;
import com.gps31.push.netty.PushMsg;
import com.gps31.push.netty.client.TcpClient;
import com.gps31.push.util.MapUtil;
import com.ruoyi.common.core.domain.entity.SysConfig;
import com.ruoyi.common.utils.spring.SpringUtils;
import com.ruoyi.sy.domain.ArdSyCarLock;
import com.ruoyi.sy.domain.ArdSyCarRtu;
import com.ruoyi.sy.domain.ArdTankLock;
import com.ruoyi.sy.service.ArdSyCarLockService;
import com.ruoyi.sy.service.ArdSyCarRtuService;
import com.ruoyi.sy.service.impl.ArdSyCarDayServiceImpl;
import com.ruoyi.sy.service.impl.ArdSyCarServiceImpl;
import com.ruoyi.sy.service.impl.ArdTankAbnormalParkAlarmServiceImpl;
import com.ruoyi.sy.service.impl.ArdTankLockServiceImpl;
import com.ruoyi.system.service.impl.SysConfigServiceImpl;
import com.ruoyi.utils.forest.SYClient;
import com.ruoyi.utils.qymqtt.newM.EmqClient;
import com.ruoyi.utils.qymqtt.newM.QosEnum;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.codec.digest.DigestUtils;
import org.eclipse.paho.client.mqttv3.MqttException;
import java.math.BigDecimal;
import java.util.*;
/**
* Description:
* Copyright: Copyright (c) 2020
* Company: www.31gps.net
* @author chencq
* @version 1.0
*/
@Slf4j(topic = "mqttCar")
public class PushClientImplSerialPort extends PushClient implements Runnable {
// private static final Log log = LogFactory.getLog(PushClientImplPosition.class);
private String ip;
private String userId;
private String password;
private Timer lockStateTimer;
public PushClientImplSerialPort(String ip, String userId, String password) {
this.ip = ip;
this.userId = userId;
this.password = password;
/*Date date = new Date();
this.lockStateTimer = new Timer();//定时获取各个锁的状态
TimerTask lockStateTask =new TimerTask(){
@Override
public void run(){
SysConfig config = new SysConfig();
config.setConfigKey("syCarPT");
List sysConfigResult = ((SysConfigServiceImpl)SpringUtils.getBean("sysConfigServiceImpl")).selectConfigList(config);
String syURL = "";
if(sysConfigResult.size() == 0){//三一车辆加入开关
return;
}else{
syURL = sysConfigResult.get(0).getConfigValue();
}
String passwordMd5 = DigestUtils.md5Hex(password);
Map LogInResult = ((SYClient)SpringUtils.getBean("sYClient")).logIn(syURL, passwordMd5, userId);
String sessionId = (String) LogInResult.get("sessionId");
String finalSyURL = syURL;
Thread thread = new Thread(finalSyURL){
@Override
public void run() {
List result = ((ArdTankLockServiceImpl)SpringUtils.getBean("ardTankLockServiceImpl")).getArdTankLockAll();//查询全部电磁锁
for(ArdTankLock ardTankLock : result){
//Thread LockThread = new Thread(finalSyURL){
String lockNumHead = ardTankLock.getLockNum().substring(0,2);
String lockNumTail = ardTankLock.getLockNum().substring(2,4);
//计算校验
String checkNum = Integer.toHexString(Integer.parseInt(lockNumHead, 16) + Integer.parseInt(lockNumTail, 16) + Integer.parseInt("01", 16));
if(checkNum.length() == 1){
checkNum = "0" + checkNum;
}else if(checkNum.length() > 2){
checkNum = checkNum.substring(checkNum.length() - 2,checkNum.length());
}
String paramsStr = "%7B%22type%22%3A%22ff%22%2C%22dataCnt%22%3A%22" + ardTankLock.getLockNum() + "01" + checkNum + "%22%7D";
//Map result = ((SYClient)SpringUtils.getBean("sYClient")).sendCmd(finalSyURL,userId,ardTankLock.getCarId(),199,"DataDownTransfer", paramsStr,sessionId);
//};
//LockThread.start();
}
}
};
thread.start();
}
};
lockStateTimer.scheduleAtFixedRate(lockStateTask,date,1000);*/
}
public PushClientImplSerialPort() {
}
@Override
public void messageReceived(TcpClient tcpClient, PushMsg pushMsg)
throws Exception {
if("8001".equals(pushMsg.getCmd())) {//登录应答
String rspResult = MapUtil.getStrVal(pushMsg.getJsonMap(),"rspResult","1");
if("0".equals(rspResult)) {//登录成功,定阅动态消息
Map map = new HashMap();
map.put("seq", "1");
map.put("action", "add");
map.put("msgIds", JSON.toJSONString(getSubCmdSet()));
PushMsg subMsg = getInstance("0003",map);
sendMsg(subMsg);
}
}else if("8002".equals(pushMsg.getCmd())){//心跳应答
}else if("8003".equals(pushMsg.getCmd())){//订阅动态消息应答
String rspResult = MapUtil.getStrVal(pushMsg.getJsonMap(),"rspResult","1");
//log.error(String.format(" 订阅应答:%s", "0".equals(rspResult)?"成功":"失败"));
}else if("0200".equals(pushMsg.getCmd())) {//定位信息
Map gpsMap = pushMsg.getJsonMap();
log.debug(String.format(" ---->----收到定位数据如下:%s",JSON.toJSONString(gpsMap)));
/**
*
* 请加入三方集成方的业务逻辑
*
*/
}else if("0300".equals(pushMsg.getCmd())) {//报警消息
Map alarmMap = pushMsg.getJsonMap();
String carName = MapUtil.getStrVal(alarmMap, "carName","");//获取车牌号
//log.error(String.format(" ---->收到报警数据:%s",JSON.toJSONString(alarmMap)));
/**
*
* 请加入三方集成方的业务逻辑
*
*/
}else if("0401".equals(pushMsg.getCmd())) {//透传消息
Map dataMap = pushMsg.getJsonMap();
String carName = MapUtil.getStrVal(dataMap, "carName","");//获取车牌号
//log.error(String.format(" ---->收到透传数据:%s",JSON.toJSONString(dataMap)));
/**
*
* 请加入三方集成方的业务逻辑
*
*/
}
}
public void sendMassage() {
try {
PushClientImplSerialPort client = new PushClientImplSerialPort();
client.setLog(true);//是否打印明文
client.setHost(this.ip);//服务器IP
client.setPort(10100);//服务器端口
client.setUserName(this.userId);//系统用户名
client.setPwd(this.password);//系统用户密码
client.setSubMsgIds("0401");//订阅的动态消息,多个动态消息使用|辟分,当前示例是订阅 定位消息(0x0200)和报警消息(0x0300)
client.setDesc("测试客户端");//客户端的描述,
client.start();
while(true) {
Thread.sleep(1000);
}
} catch (Exception e) {
e.printStackTrace();
}
}
@Override
public void run() {
sendMassage();
}
}