commit
c4fe9ca936
@ -0,0 +1,17 @@ |
|||||||
|
driver = com.mysql.jdbc.Driver |
||||||
|
url = jdbc:mysql://8.129.11.230:3306/samr?connectTimeout=10000&socketTimeout=60000 |
||||||
|
user = root |
||||||
|
pwd = samr2020 |
||||||
|
language = en |
||||||
|
|
||||||
|
opcControl = false |
||||||
|
MControlTiming15 = false |
||||||
|
MControlTiming60 = false |
||||||
|
|
||||||
|
ForWard485 = false |
||||||
|
LampTiming = false |
||||||
|
LampDay3761Timing =false |
||||||
|
TerminalDay3761Timing =false |
||||||
|
AnalysisOfTunnelElectricity=false |
||||||
|
|
||||||
|
gprsIp=172.26.187.230 |
||||||
@ -0,0 +1,52 @@ |
|||||||
|
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> |
||||||
|
<modelVersion>4.0.0</modelVersion> |
||||||
|
<parent> |
||||||
|
<groupId>com.back</groupId> |
||||||
|
<artifactId>processor</artifactId> |
||||||
|
<version>0.0.1-SNAPSHOT</version> |
||||||
|
</parent> |
||||||
|
<artifactId>carCheck</artifactId> |
||||||
|
<packaging>jar</packaging> |
||||||
|
|
||||||
|
<dependencies> |
||||||
|
<dependency> |
||||||
|
<groupId>com.back</groupId> |
||||||
|
<artifactId>common</artifactId> |
||||||
|
<version>0.0.1-SNAPSHOT</version> |
||||||
|
</dependency> |
||||||
|
</dependencies> |
||||||
|
|
||||||
|
|
||||||
|
<build> |
||||||
|
<plugins> |
||||||
|
<plugin> |
||||||
|
<groupId>org.apache.maven.plugins</groupId> |
||||||
|
<artifactId>maven-compiler-plugin</artifactId> |
||||||
|
<version>3.5.1</version> |
||||||
|
<configuration> |
||||||
|
<source>1.8</source> |
||||||
|
<target>1.8</target> |
||||||
|
</configuration> |
||||||
|
</plugin> |
||||||
|
|
||||||
|
<plugin> |
||||||
|
<groupId>org.springframework.boot</groupId> |
||||||
|
<artifactId>spring-boot-maven-plugin</artifactId> |
||||||
|
<version>2.6.4</version> |
||||||
|
<configuration> |
||||||
|
<!-- springboot main方法入口 --> |
||||||
|
<mainClass>com.back.main.MainProcess</mainClass> |
||||||
|
<layout>ZIP</layout> |
||||||
|
</configuration> |
||||||
|
<executions> |
||||||
|
<execution> |
||||||
|
<goals> |
||||||
|
<goal>repackage</goal><!--可以把依赖的包都打包到生成的Jar包中--> |
||||||
|
</goals> |
||||||
|
</execution> |
||||||
|
</executions> |
||||||
|
</plugin> |
||||||
|
</plugins> |
||||||
|
</build> |
||||||
|
|
||||||
|
</project> |
||||||
@ -0,0 +1,24 @@ |
|||||||
|
package com.back.instance; |
||||||
|
|
||||||
|
public class WebsocketConnectInstance { |
||||||
|
|
||||||
|
public static WebsocketConnectInstance websocketConnectInstance = null; |
||||||
|
|
||||||
|
public static WebsocketConnectInstance getInstance() { |
||||||
|
if (websocketConnectInstance == null) { |
||||||
|
websocketConnectInstance = new WebsocketConnectInstance(); |
||||||
|
} |
||||||
|
return websocketConnectInstance; |
||||||
|
} |
||||||
|
|
||||||
|
private boolean restart; |
||||||
|
|
||||||
|
public boolean isRestart() { |
||||||
|
return restart; |
||||||
|
} |
||||||
|
|
||||||
|
public void setRestart(boolean restart) { |
||||||
|
this.restart = restart; |
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
@ -0,0 +1,65 @@ |
|||||||
|
package com.back.main; |
||||||
|
|
||||||
|
import com.back.common.RunParams; |
||||||
|
import com.back.instance.WebsocketConnectInstance; |
||||||
|
import com.back.protocol.SystemParameter; |
||||||
|
import com.back.webSocket.CarCheckSocket; |
||||||
|
import com.back.webSocket.SocketServer; |
||||||
|
import org.slf4j.Logger; |
||||||
|
import org.slf4j.LoggerFactory; |
||||||
|
|
||||||
|
import java.net.UnknownHostException; |
||||||
|
import java.util.TimeZone; |
||||||
|
import java.util.Timer; |
||||||
|
import java.util.TimerTask; |
||||||
|
|
||||||
|
public class MainProcess { |
||||||
|
|
||||||
|
public static final Logger LOGGER = LoggerFactory.getLogger(MainProcess.class); |
||||||
|
|
||||||
|
public static void main(String[] args) { |
||||||
|
|
||||||
|
System.out.println("ver 1.2.11 2019-03-24 17");// 英文
|
||||||
|
System.out.println(TimeZone.getDefault().getDisplayName()); |
||||||
|
// 获取运行参数
|
||||||
|
RunParams runParams = SystemParameter.GetPostParams(); |
||||||
|
if (runParams == null) { |
||||||
|
System.out.println("Database connection failed!"); |
||||||
|
} |
||||||
|
int websocketPort = runParams.websocketPort; |
||||||
|
String carCheckSocketIp = runParams.carCheckSocketIp; |
||||||
|
int carCheckSocketPort = runParams.carCheckSocketPort; |
||||||
|
|
||||||
|
// 车检器
|
||||||
|
try { |
||||||
|
try { |
||||||
|
SocketServer socketServer = new SocketServer(websocketPort); |
||||||
|
socketServer.start(); |
||||||
|
|
||||||
|
// 定时判断 websocket 是否假死(3分钟)
|
||||||
|
Timer timer = new Timer(); |
||||||
|
timer.schedule(new TimerTask() { |
||||||
|
public void run() { |
||||||
|
try { |
||||||
|
WebsocketConnectInstance websocketConnectInstance = WebsocketConnectInstance.getInstance(); |
||||||
|
// if (websocketConnectInstance.isRestart()) {
|
||||||
|
// socketServer.stop();
|
||||||
|
// socketServer.start();
|
||||||
|
// }
|
||||||
|
} catch (Exception e) { |
||||||
|
// TODO Auto-generated catch block
|
||||||
|
// e.printStackTrace();
|
||||||
|
System.err.println("socketServer 重启发生异常"); |
||||||
|
} |
||||||
|
} |
||||||
|
}, 0, 1 * 1000); |
||||||
|
|
||||||
|
} catch (UnknownHostException e) { |
||||||
|
LOGGER.error("websocket 连接失败,error message:{}", e.getMessage()); |
||||||
|
} |
||||||
|
new CarCheckSocket(carCheckSocketIp, carCheckSocketPort).connectCarCheckSocket(); |
||||||
|
} catch (Exception e) { |
||||||
|
LOGGER.error("车检器 socket 连接失败,error message:{}", e.getMessage()); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,277 @@ |
|||||||
|
package com.back.webSocket; |
||||||
|
|
||||||
|
|
||||||
|
import java.net.InetSocketAddress; |
||||||
|
import java.net.UnknownHostException; |
||||||
|
import java.sql.ResultSet; |
||||||
|
import java.time.LocalDateTime; |
||||||
|
import java.time.format.DateTimeFormatter; |
||||||
|
import java.util.HashMap; |
||||||
|
import java.util.Map; |
||||||
|
import java.util.Timer; |
||||||
|
import java.util.TimerTask; |
||||||
|
import java.util.concurrent.ConcurrentHashMap; |
||||||
|
|
||||||
|
import com.back.webSocket.bean.CarCheckInfo; |
||||||
|
import com.back.webSocket.bean.LineInfo; |
||||||
|
import org.java_websocket.WebSocket; |
||||||
|
import org.java_websocket.handshake.ClientHandshake; |
||||||
|
import org.java_websocket.server.WebSocketServer; |
||||||
|
import org.slf4j.Logger; |
||||||
|
import org.slf4j.LoggerFactory; |
||||||
|
|
||||||
|
import com.alibaba.fastjson.JSON; |
||||||
|
import com.alibaba.fastjson.JSONObject; |
||||||
|
|
||||||
|
import com.back.jdbc.SQLHelper; |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
public class SocketServer extends WebSocketServer { |
||||||
|
|
||||||
|
public static final Logger LOGGER = LoggerFactory.getLogger(SocketServer.class); |
||||||
|
|
||||||
|
public SocketServer(int port) throws UnknownHostException { |
||||||
|
super(new InetSocketAddress(port)); |
||||||
|
} |
||||||
|
|
||||||
|
public SocketServer(InetSocketAddress address) { |
||||||
|
super(address); |
||||||
|
} |
||||||
|
|
||||||
|
public static Map<String, WebSocket> map = new ConcurrentHashMap<>(); |
||||||
|
public static Map<String, SocketBean> connectMap = new ConcurrentHashMap<>(); |
||||||
|
public static Map<String, Integer> connectWaitMap = new ConcurrentHashMap<>(); |
||||||
|
|
||||||
|
@Override |
||||||
|
public void onOpen(WebSocket conn, ClientHandshake handshake) { |
||||||
|
conn.send("Welcome to the server!"); // This method sends a message to the new client
|
||||||
|
// broadcast("new connection: " + handshake.getResourceDescriptor()); // This method sends a message to all clients connected
|
||||||
|
String clientIp = conn.getRemoteSocketAddress().getAddress().getHostAddress(); |
||||||
|
// System.out.println(clientIp + " entered the room!");
|
||||||
|
map.put(clientIp, conn); |
||||||
|
|
||||||
|
// String projectId = null;
|
||||||
|
// String paramString = handshake.getResourceDescriptor().replace("?", "").replace("/", "");
|
||||||
|
// if (StringUtils.isNoneEmpty(paramString)) {
|
||||||
|
//
|
||||||
|
// String[] params = paramString.split("&");
|
||||||
|
// for (String param : params) {
|
||||||
|
// String[] kv = param.split("=");
|
||||||
|
// if (kv.length > 0) {
|
||||||
|
// String key = kv[0];
|
||||||
|
// String value = kv[1];
|
||||||
|
//
|
||||||
|
//
|
||||||
|
// if (key.equals("projectId")) {
|
||||||
|
// projectId = value;
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// }
|
||||||
|
|
||||||
|
|
||||||
|
LOGGER.info("{}, 客户端:{}, 连接 websocket 服务器成功", LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")), clientIp); |
||||||
|
|
||||||
|
// 获取运行参数
|
||||||
|
// RunParams runParams = SystemParameter.GetPostParams();
|
||||||
|
// if (runParams == null) {
|
||||||
|
// System.out.println("Database connection failed!");
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// if (StringUtils.isNoneEmpty(projectId)) {
|
||||||
|
// String carCheckSocketIp = runParams.carCheckSocketIp;
|
||||||
|
// int carCheckSocketPort = runParams.carCheckSocketPort;
|
||||||
|
// try {
|
||||||
|
// new CarCheckSocket(carCheckSocketIp, carCheckSocketPort, Integer.valueOf(projectId)).connectCarCheckSocket();
|
||||||
|
// } catch (IOException e) {
|
||||||
|
// LOGGER.error("websocket 连接失败,error message:{}", e.getMessage());
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void onClose(WebSocket conn, int code, String reason, boolean remote) { |
||||||
|
String clientIp = conn.getRemoteSocketAddress().getAddress().getHostAddress(); |
||||||
|
System.out.println(String.format("%s, ip: %s, websocket 断开连接", LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")), clientIp)); |
||||||
|
|
||||||
|
if (connectMap.get(clientIp) != null) { |
||||||
|
connectMap.remove(clientIp); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void onMessage(WebSocket conn, String message) { |
||||||
|
|
||||||
|
// broadcast(message);
|
||||||
|
|
||||||
|
try { |
||||||
|
if (message.contains("longitude") && message.contains("latitude") |
||||||
|
&& message.contains("leftaddr") && message.contains("rightaddr")) { |
||||||
|
System.out.println("切换项目: " + message); |
||||||
|
String clientIp = conn.getRemoteSocketAddress().getAddress().getHostAddress(); |
||||||
|
LineInfo lineInfo = JSONObject.parseObject(message, LineInfo.class); |
||||||
|
Integer projectId = Integer.valueOf(lineInfo.getId()); |
||||||
|
ResultSet resultSet = SQLHelper.ExecProcwCommands("SELECT * FROM line WHERE id = " + projectId); |
||||||
|
ChangeTunnelProjectRep changeTunnelProjectRep = new ChangeTunnelProjectRep(); |
||||||
|
changeTunnelProjectRep.setCommand("changetunnelproject"); |
||||||
|
changeTunnelProjectRep.setProjectid(projectId); |
||||||
|
if (resultSet != null && resultSet.next()) { |
||||||
|
changeTunnelProjectRep.setSuccessed(true); |
||||||
|
changeTunnelProjectRep.setMessage("切换隧道成功"); |
||||||
|
|
||||||
|
SocketBean socketBean = new SocketBean(); |
||||||
|
socketBean.setConn(conn); |
||||||
|
socketBean.setProjectId(projectId); |
||||||
|
connectMap.put(clientIp, socketBean); |
||||||
|
|
||||||
|
connectWaitMap.put(clientIp, 0); |
||||||
|
} else { |
||||||
|
changeTunnelProjectRep.setSuccessed(false); |
||||||
|
changeTunnelProjectRep.setMessage("项目不存在"); |
||||||
|
} |
||||||
|
System.out.println("切换项目: " + message); |
||||||
|
conn.send(JSON.toJSONString(changeTunnelProjectRep)); |
||||||
|
} else if (message.contains("heartbeatmessage")) { |
||||||
|
System.out.println("ping message: " + message); |
||||||
|
|
||||||
|
String clientIp = conn.getRemoteSocketAddress().getAddress().getHostAddress(); |
||||||
|
connectWaitMap.put(clientIp, 0); |
||||||
|
|
||||||
|
Map<String, Object> map = new HashMap<String, Object>(); |
||||||
|
map.put("command", "heartbeatmessage"); |
||||||
|
map.put("successed", true); |
||||||
|
|
||||||
|
System.out.println(String.format("%s, ip:%s, pong message: %s", LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd hh:mm:ss")), clientIp, JSON.toJSONString(map))); |
||||||
|
conn.send(JSON.toJSONString(map)); |
||||||
|
} else { |
||||||
|
conn.send(message); |
||||||
|
} |
||||||
|
|
||||||
|
} catch (Exception e) { |
||||||
|
// TODO Auto-generated catch block
|
||||||
|
e.printStackTrace(); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void onError(WebSocket conn, Exception ex) { |
||||||
|
ex.printStackTrace(); |
||||||
|
if (conn != null) { |
||||||
|
// some errors like port binding failed may not be assignable to a specific
|
||||||
|
// websocket
|
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
public static void sendMessage(String message) { |
||||||
|
for (Map.Entry<String, WebSocket> entry : map.entrySet()) { |
||||||
|
String ip = entry.getKey(); |
||||||
|
try { |
||||||
|
WebSocket conn = entry.getValue(); |
||||||
|
|
||||||
|
if (connectMap.get(ip) != null) { |
||||||
|
SocketBean socketBean = connectMap.get(ip); |
||||||
|
int projectId = socketBean.getProjectId(); |
||||||
|
|
||||||
|
CarCheckInfo carCheckInfo = JSONObject.parseObject(message, CarCheckInfo.class); |
||||||
|
int line = carCheckInfo.getSensor().getLine(); |
||||||
|
|
||||||
|
if (projectId == line && conn != null) { |
||||||
|
conn.send(message); |
||||||
|
// LOGGER.info("给客户端:{},发送消息:{}", ip, message);
|
||||||
|
} |
||||||
|
} |
||||||
|
} catch (Exception e) { |
||||||
|
// TODO Auto-generated catch block
|
||||||
|
// e.printStackTrace();
|
||||||
|
LOGGER.info("WebSocket发送报文到前端发生异常,前端IP:{},错误信息:{}", ip, e.getMessage()); |
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void onStart() { |
||||||
|
System.out.println("Server started!"); |
||||||
|
setConnectionLostTimeout(0); |
||||||
|
setConnectionLostTimeout(100); |
||||||
|
|
||||||
|
Timer timer = new Timer(); |
||||||
|
timer.schedule(new TimerTask() { |
||||||
|
public void run() { |
||||||
|
|
||||||
|
System.out.println("connectWaitMap: " + JSON.toJSONString(connectWaitMap)); |
||||||
|
for (Map.Entry<String, SocketBean> entry : connectMap.entrySet()) { |
||||||
|
String ip = entry.getKey(); |
||||||
|
if (connectWaitMap.get(ip) != null) { |
||||||
|
int waitCount = connectWaitMap.get(ip) + 1; |
||||||
|
connectWaitMap.put(ip, waitCount); |
||||||
|
|
||||||
|
if (waitCount > 3) { |
||||||
|
// WebsocketConnectInstance websocketConnectInstance = WebsocketConnectInstance.getInstance();
|
||||||
|
// websocketConnectInstance.setRestart(true);
|
||||||
|
|
||||||
|
if (connectMap.get(ip) != null) { |
||||||
|
SocketBean socketBean = connectMap.get(ip); |
||||||
|
WebSocket webSocket = socketBean.getConn(); |
||||||
|
webSocket.close(); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
}, 0, 1 * 60 * 1000); |
||||||
|
} |
||||||
|
|
||||||
|
class SocketBean { |
||||||
|
WebSocket conn; |
||||||
|
int projectId; |
||||||
|
public WebSocket getConn() { |
||||||
|
return conn; |
||||||
|
} |
||||||
|
public void setConn(WebSocket conn) { |
||||||
|
this.conn = conn; |
||||||
|
} |
||||||
|
public int getProjectId() { |
||||||
|
return projectId; |
||||||
|
} |
||||||
|
public void setProjectId(int projectId) { |
||||||
|
this.projectId = projectId; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
class ChangeTunnelProjectRep { |
||||||
|
private String command; |
||||||
|
private boolean successed; |
||||||
|
private Integer projectid; |
||||||
|
private String message; |
||||||
|
public String getCommand() { |
||||||
|
return command; |
||||||
|
} |
||||||
|
public void setCommand(String command) { |
||||||
|
this.command = command; |
||||||
|
} |
||||||
|
public boolean isSuccessed() { |
||||||
|
return successed; |
||||||
|
} |
||||||
|
public void setSuccessed(boolean successed) { |
||||||
|
this.successed = successed; |
||||||
|
} |
||||||
|
public Integer getProjectid() { |
||||||
|
return projectid; |
||||||
|
} |
||||||
|
public void setProjectid(Integer projectid) { |
||||||
|
this.projectid = projectid; |
||||||
|
} |
||||||
|
public String getMessage() { |
||||||
|
return message; |
||||||
|
} |
||||||
|
public void setMessage(String message) { |
||||||
|
this.message = message; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
@ -0,0 +1,27 @@ |
|||||||
|
package com.back.webSocket.bean; |
||||||
|
|
||||||
|
public class BaseInfo { |
||||||
|
|
||||||
|
private Integer laneCount; |
||||||
|
private int trafficOutputFlag; |
||||||
|
private int generalTrafficIndication; |
||||||
|
public Integer getLaneCount() { |
||||||
|
return laneCount; |
||||||
|
} |
||||||
|
public void setLaneCount(Integer laneCount) { |
||||||
|
this.laneCount = laneCount; |
||||||
|
} |
||||||
|
public int getTrafficOutputFlag() { |
||||||
|
return trafficOutputFlag; |
||||||
|
} |
||||||
|
public void setTrafficOutputFlag(int trafficOutputFlag) { |
||||||
|
this.trafficOutputFlag = trafficOutputFlag; |
||||||
|
} |
||||||
|
public int getGeneralTrafficIndication() { |
||||||
|
return generalTrafficIndication; |
||||||
|
} |
||||||
|
public void setGeneralTrafficIndication(int generalTrafficIndication) { |
||||||
|
this.generalTrafficIndication = generalTrafficIndication; |
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
@ -0,0 +1,49 @@ |
|||||||
|
package com.back.webSocket.bean; |
||||||
|
|
||||||
|
|
||||||
|
public class CarCheckInfo { |
||||||
|
private String command; |
||||||
|
private BaseInfo baseInfo; |
||||||
|
private TargetInfo targetInfo; |
||||||
|
public SensorInfo sensor; |
||||||
|
private LoadInfo loadInfo; |
||||||
|
public FlowInfo flowInfo; |
||||||
|
|
||||||
|
public String getCommand() { |
||||||
|
return command; |
||||||
|
} |
||||||
|
public void setCommand(String command) { |
||||||
|
this.command = command; |
||||||
|
} |
||||||
|
public TargetInfo getTargetInfo() { |
||||||
|
return targetInfo; |
||||||
|
} |
||||||
|
public void setTargetInfo(TargetInfo targetInfo) { |
||||||
|
this.targetInfo = targetInfo; |
||||||
|
} |
||||||
|
public SensorInfo getSensor() { |
||||||
|
return sensor; |
||||||
|
} |
||||||
|
public void setSensor(SensorInfo sensor) { |
||||||
|
this.sensor = sensor; |
||||||
|
} |
||||||
|
public LoadInfo getLoadInfo() { |
||||||
|
return loadInfo; |
||||||
|
} |
||||||
|
public void setLoadInfo(LoadInfo loadInfo) { |
||||||
|
this.loadInfo = loadInfo; |
||||||
|
} |
||||||
|
public FlowInfo getFlowInfo() { |
||||||
|
return flowInfo; |
||||||
|
} |
||||||
|
public void setFlowInfo(FlowInfo flowInfo) { |
||||||
|
this.flowInfo = flowInfo; |
||||||
|
} |
||||||
|
public BaseInfo getBaseInfo() { |
||||||
|
return baseInfo; |
||||||
|
} |
||||||
|
public void setBaseInfo(BaseInfo baseInfo) { |
||||||
|
this.baseInfo = baseInfo; |
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
@ -0,0 +1,106 @@ |
|||||||
|
package com.back.webSocket.bean; |
||||||
|
|
||||||
|
public class CarSensor extends SensorInfo { |
||||||
|
|
||||||
|
private int id; |
||||||
|
private String name; |
||||||
|
private String terminal; |
||||||
|
private String ip; |
||||||
|
private String port; |
||||||
|
private int connectflag; |
||||||
|
|
||||||
|
public int laneweight1; |
||||||
|
public int laneweight2; |
||||||
|
public int laneweight3; |
||||||
|
public int laneweight4; |
||||||
|
public int laneweight5; |
||||||
|
public int laneweight6; |
||||||
|
public int laneweight7; |
||||||
|
public int laneweight8; |
||||||
|
|
||||||
|
public int getId() { |
||||||
|
return id; |
||||||
|
} |
||||||
|
public void setId(int id) { |
||||||
|
this.id = id; |
||||||
|
} |
||||||
|
public String getName() { |
||||||
|
return name; |
||||||
|
} |
||||||
|
public void setName(String name) { |
||||||
|
this.name = name; |
||||||
|
} |
||||||
|
public String getTerminal() { |
||||||
|
return terminal; |
||||||
|
} |
||||||
|
public void setTerminal(String terminal) { |
||||||
|
this.terminal = terminal; |
||||||
|
} |
||||||
|
public String getIp() { |
||||||
|
return ip; |
||||||
|
} |
||||||
|
public void setIp(String ip) { |
||||||
|
this.ip = ip; |
||||||
|
} |
||||||
|
public String getPort() { |
||||||
|
return port; |
||||||
|
} |
||||||
|
public void setPort(String port) { |
||||||
|
this.port = port; |
||||||
|
} |
||||||
|
public int getConnectflag() { |
||||||
|
return connectflag; |
||||||
|
} |
||||||
|
public void setConnectflag(int connectflag) { |
||||||
|
this.connectflag = connectflag; |
||||||
|
} |
||||||
|
public int getLaneweight1() { |
||||||
|
return laneweight1; |
||||||
|
} |
||||||
|
public void setLaneweight1(int laneweight1) { |
||||||
|
this.laneweight1 = laneweight1; |
||||||
|
} |
||||||
|
public int getLaneweight2() { |
||||||
|
return laneweight2; |
||||||
|
} |
||||||
|
public void setLaneweight2(int laneweight2) { |
||||||
|
this.laneweight2 = laneweight2; |
||||||
|
} |
||||||
|
public int getLaneweight3() { |
||||||
|
return laneweight3; |
||||||
|
} |
||||||
|
public void setLaneweight3(int laneweight3) { |
||||||
|
this.laneweight3 = laneweight3; |
||||||
|
} |
||||||
|
public int getLaneweight4() { |
||||||
|
return laneweight4; |
||||||
|
} |
||||||
|
public void setLaneweight4(int laneweight4) { |
||||||
|
this.laneweight4 = laneweight4; |
||||||
|
} |
||||||
|
public int getLaneweight5() { |
||||||
|
return laneweight5; |
||||||
|
} |
||||||
|
public void setLaneweight5(int laneweight5) { |
||||||
|
this.laneweight5 = laneweight5; |
||||||
|
} |
||||||
|
public int getLaneweight6() { |
||||||
|
return laneweight6; |
||||||
|
} |
||||||
|
public void setLaneweight6(int laneweight6) { |
||||||
|
this.laneweight6 = laneweight6; |
||||||
|
} |
||||||
|
public int getLaneweight7() { |
||||||
|
return laneweight7; |
||||||
|
} |
||||||
|
public void setLaneweight7(int laneweight7) { |
||||||
|
this.laneweight7 = laneweight7; |
||||||
|
} |
||||||
|
public int getLaneweight8() { |
||||||
|
return laneweight8; |
||||||
|
} |
||||||
|
public void setLaneweight8(int laneweight8) { |
||||||
|
this.laneweight8 = laneweight8; |
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
@ -0,0 +1,154 @@ |
|||||||
|
package com.back.webSocket.bean; |
||||||
|
|
||||||
|
import java.math.BigDecimal; |
||||||
|
import java.util.List; |
||||||
|
|
||||||
|
public class FlowInfo { |
||||||
|
|
||||||
|
private Integer valid; |
||||||
|
private Integer laneCount; |
||||||
|
private List<Flow> flowList; |
||||||
|
|
||||||
|
public Integer getValid() { |
||||||
|
return valid; |
||||||
|
} |
||||||
|
|
||||||
|
public void setValid(Integer valid) { |
||||||
|
this.valid = valid; |
||||||
|
} |
||||||
|
|
||||||
|
public Integer getLaneCount() { |
||||||
|
return laneCount; |
||||||
|
} |
||||||
|
|
||||||
|
public void setLaneCount(Integer laneCount) { |
||||||
|
this.laneCount = laneCount; |
||||||
|
} |
||||||
|
|
||||||
|
public List<Flow> getFlowList() { |
||||||
|
return flowList; |
||||||
|
} |
||||||
|
|
||||||
|
public void setFlowList(List<Flow> flowList) { |
||||||
|
this.flowList = flowList; |
||||||
|
} |
||||||
|
|
||||||
|
public static class Flow { |
||||||
|
// private String name;
|
||||||
|
// private String comid;
|
||||||
|
private String terminal; |
||||||
|
private int laneNumber; |
||||||
|
// private int laneCongestion;
|
||||||
|
private BigDecimal maxCarLanesflow; |
||||||
|
private BigDecimal maxCarAverageLanesflow; |
||||||
|
private BigDecimal mediumCarLanesflow; |
||||||
|
private BigDecimal mediumCarAverageLanesflow; |
||||||
|
private BigDecimal minCarLanesflow; |
||||||
|
private BigDecimal minCarAverageLanesflow; |
||||||
|
private BigDecimal locomotiveLanesflow; |
||||||
|
private BigDecimal locomotiveAverageLanesflow; |
||||||
|
private BigDecimal motorVehicleAverageLanesflow; |
||||||
|
private BigDecimal laneOccupancy; |
||||||
|
private BigDecimal timeOccupancy; |
||||||
|
private BigDecimal averageTravelTime; |
||||||
|
private BigDecimal averageTravelDistance; |
||||||
|
|
||||||
|
public String getTerminal() { |
||||||
|
return terminal; |
||||||
|
} |
||||||
|
public void setTerminal(String terminal) { |
||||||
|
this.terminal = terminal; |
||||||
|
} |
||||||
|
public int getLaneNumber() { |
||||||
|
return laneNumber; |
||||||
|
} |
||||||
|
public void setLaneNumber(int laneNumber) { |
||||||
|
this.laneNumber = laneNumber; |
||||||
|
} |
||||||
|
// public int getLaneCongestion() {
|
||||||
|
// return laneCongestion;
|
||||||
|
// }
|
||||||
|
// public void setLaneCongestion(int laneCongestion) {
|
||||||
|
// this.laneCongestion = laneCongestion;
|
||||||
|
// }
|
||||||
|
public BigDecimal getMaxCarLanesflow() { |
||||||
|
return maxCarLanesflow; |
||||||
|
} |
||||||
|
public void setMaxCarLanesflow(BigDecimal maxCarLanesflow) { |
||||||
|
this.maxCarLanesflow = maxCarLanesflow; |
||||||
|
} |
||||||
|
public BigDecimal getMaxCarAverageLanesflow() { |
||||||
|
return maxCarAverageLanesflow; |
||||||
|
} |
||||||
|
public void setMaxCarAverageLanesflow(BigDecimal maxCarAverageLanesflow) { |
||||||
|
this.maxCarAverageLanesflow = maxCarAverageLanesflow; |
||||||
|
} |
||||||
|
public BigDecimal getMediumCarLanesflow() { |
||||||
|
return mediumCarLanesflow; |
||||||
|
} |
||||||
|
public void setMediumCarLanesflow(BigDecimal mediumCarLanesflow) { |
||||||
|
this.mediumCarLanesflow = mediumCarLanesflow; |
||||||
|
} |
||||||
|
public BigDecimal getMediumCarAverageLanesflow() { |
||||||
|
return mediumCarAverageLanesflow; |
||||||
|
} |
||||||
|
public void setMediumCarAverageLanesflow(BigDecimal mediumCarAverageLanesflow) { |
||||||
|
this.mediumCarAverageLanesflow = mediumCarAverageLanesflow; |
||||||
|
} |
||||||
|
public BigDecimal getMinCarLanesflow() { |
||||||
|
return minCarLanesflow; |
||||||
|
} |
||||||
|
public void setMinCarLanesflow(BigDecimal minCarLanesflow) { |
||||||
|
this.minCarLanesflow = minCarLanesflow; |
||||||
|
} |
||||||
|
public BigDecimal getMinCarAverageLanesflow() { |
||||||
|
return minCarAverageLanesflow; |
||||||
|
} |
||||||
|
public void setMinCarAverageLanesflow(BigDecimal minCarAverageLanesflow) { |
||||||
|
this.minCarAverageLanesflow = minCarAverageLanesflow; |
||||||
|
} |
||||||
|
public BigDecimal getLocomotiveLanesflow() { |
||||||
|
return locomotiveLanesflow; |
||||||
|
} |
||||||
|
public void setLocomotiveLanesflow(BigDecimal locomotiveLanesflow) { |
||||||
|
this.locomotiveLanesflow = locomotiveLanesflow; |
||||||
|
} |
||||||
|
public BigDecimal getLocomotiveAverageLanesflow() { |
||||||
|
return locomotiveAverageLanesflow; |
||||||
|
} |
||||||
|
public void setLocomotiveAverageLanesflow(BigDecimal locomotiveAverageLanesflow) { |
||||||
|
this.locomotiveAverageLanesflow = locomotiveAverageLanesflow; |
||||||
|
} |
||||||
|
public BigDecimal getMotorVehicleAverageLanesflow() { |
||||||
|
return motorVehicleAverageLanesflow; |
||||||
|
} |
||||||
|
public void setMotorVehicleAverageLanesflow(BigDecimal motorVehicleAverageLanesflow) { |
||||||
|
this.motorVehicleAverageLanesflow = motorVehicleAverageLanesflow; |
||||||
|
} |
||||||
|
public BigDecimal getLaneOccupancy() { |
||||||
|
return laneOccupancy; |
||||||
|
} |
||||||
|
public void setLaneOccupancy(BigDecimal laneOccupancy) { |
||||||
|
this.laneOccupancy = laneOccupancy; |
||||||
|
} |
||||||
|
public BigDecimal getTimeOccupancy() { |
||||||
|
return timeOccupancy; |
||||||
|
} |
||||||
|
public void setTimeOccupancy(BigDecimal timeOccupancy) { |
||||||
|
this.timeOccupancy = timeOccupancy; |
||||||
|
} |
||||||
|
public BigDecimal getAverageTravelTime() { |
||||||
|
return averageTravelTime; |
||||||
|
} |
||||||
|
public void setAverageTravelTime(BigDecimal averageTravelTime) { |
||||||
|
this.averageTravelTime = averageTravelTime; |
||||||
|
} |
||||||
|
public BigDecimal getAverageTravelDistance() { |
||||||
|
return averageTravelDistance; |
||||||
|
} |
||||||
|
public void setAverageTravelDistance(BigDecimal averageTravelDistance) { |
||||||
|
this.averageTravelDistance = averageTravelDistance; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
@ -0,0 +1,81 @@ |
|||||||
|
package com.back.webSocket.bean; |
||||||
|
|
||||||
|
public class LineInfo { |
||||||
|
private String id; |
||||||
|
private String name; |
||||||
|
private String longitude; |
||||||
|
private String latitude; |
||||||
|
private String leftaddr; |
||||||
|
private String rightaddr; |
||||||
|
private String createtime; |
||||||
|
private String username; |
||||||
|
private String city; |
||||||
|
private String remark; |
||||||
|
private String createuser; |
||||||
|
public String getId() { |
||||||
|
return id; |
||||||
|
} |
||||||
|
public void setId(String id) { |
||||||
|
this.id = id; |
||||||
|
} |
||||||
|
public String getName() { |
||||||
|
return name; |
||||||
|
} |
||||||
|
public void setName(String name) { |
||||||
|
this.name = name; |
||||||
|
} |
||||||
|
public String getLongitude() { |
||||||
|
return longitude; |
||||||
|
} |
||||||
|
public void setLongitude(String longitude) { |
||||||
|
this.longitude = longitude; |
||||||
|
} |
||||||
|
public String getLatitude() { |
||||||
|
return latitude; |
||||||
|
} |
||||||
|
public void setLatitude(String latitude) { |
||||||
|
this.latitude = latitude; |
||||||
|
} |
||||||
|
public String getLeftaddr() { |
||||||
|
return leftaddr; |
||||||
|
} |
||||||
|
public void setLeftaddr(String leftaddr) { |
||||||
|
this.leftaddr = leftaddr; |
||||||
|
} |
||||||
|
public String getRightaddr() { |
||||||
|
return rightaddr; |
||||||
|
} |
||||||
|
public void setRightaddr(String rightaddr) { |
||||||
|
this.rightaddr = rightaddr; |
||||||
|
} |
||||||
|
public String getCreatetime() { |
||||||
|
return createtime; |
||||||
|
} |
||||||
|
public void setCreatetime(String createtime) { |
||||||
|
this.createtime = createtime; |
||||||
|
} |
||||||
|
public String getUsername() { |
||||||
|
return username; |
||||||
|
} |
||||||
|
public void setUsername(String username) { |
||||||
|
this.username = username; |
||||||
|
} |
||||||
|
public String getCity() { |
||||||
|
return city; |
||||||
|
} |
||||||
|
public void setCity(String city) { |
||||||
|
this.city = city; |
||||||
|
} |
||||||
|
public String getRemark() { |
||||||
|
return remark; |
||||||
|
} |
||||||
|
public void setRemark(String remark) { |
||||||
|
this.remark = remark; |
||||||
|
} |
||||||
|
public String getCreateuser() { |
||||||
|
return createuser; |
||||||
|
} |
||||||
|
public void setCreateuser(String createuser) { |
||||||
|
this.createuser = createuser; |
||||||
|
} |
||||||
|
} |
||||||
@ -0,0 +1,53 @@ |
|||||||
|
package com.back.webSocket.bean; |
||||||
|
|
||||||
|
import java.util.List; |
||||||
|
|
||||||
|
public class LoadInfo { |
||||||
|
|
||||||
|
private Integer valid; |
||||||
|
private Integer laneCount; |
||||||
|
private List<Load> loadList; |
||||||
|
|
||||||
|
public Integer getValid() { |
||||||
|
return valid; |
||||||
|
} |
||||||
|
|
||||||
|
public void setValid(Integer valid) { |
||||||
|
this.valid = valid; |
||||||
|
} |
||||||
|
|
||||||
|
public Integer getLaneCount() { |
||||||
|
return laneCount; |
||||||
|
} |
||||||
|
|
||||||
|
public void setLaneCount(Integer laneCount) { |
||||||
|
this.laneCount = laneCount; |
||||||
|
} |
||||||
|
|
||||||
|
public List<Load> getLoadList() { |
||||||
|
return loadList; |
||||||
|
} |
||||||
|
|
||||||
|
public void setLoadList(List<Load> loadList) { |
||||||
|
this.loadList = loadList; |
||||||
|
} |
||||||
|
|
||||||
|
public static class Load { |
||||||
|
private int laneNumber; |
||||||
|
private int laneCongestion; |
||||||
|
|
||||||
|
public int getLaneNumber() { |
||||||
|
return laneNumber; |
||||||
|
} |
||||||
|
public void setLaneNumber(int laneNumber) { |
||||||
|
this.laneNumber = laneNumber; |
||||||
|
} |
||||||
|
public int getLaneCongestion() { |
||||||
|
return laneCongestion; |
||||||
|
} |
||||||
|
public void setLaneCongestion(int laneCongestion) { |
||||||
|
this.laneCongestion = laneCongestion; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
@ -0,0 +1,125 @@ |
|||||||
|
package com.back.webSocket.bean; |
||||||
|
|
||||||
|
import java.util.List; |
||||||
|
|
||||||
|
public class SensorInfo { |
||||||
|
private String comid; |
||||||
|
public int lane; |
||||||
|
public String laneflag; |
||||||
|
public String laneMark; |
||||||
|
// public int laneweight1;
|
||||||
|
// public int laneweight2;
|
||||||
|
// public int laneweight3;
|
||||||
|
// public int laneweight4;
|
||||||
|
// public int laneweight5;
|
||||||
|
// public int laneweight6;
|
||||||
|
// public int laneweight7;
|
||||||
|
// public int laneweight8;
|
||||||
|
public int lanelength; |
||||||
|
public int line; |
||||||
|
|
||||||
|
public List<LaneWeight> laneList; |
||||||
|
|
||||||
|
public static class LaneWeight { |
||||||
|
private float laneweight; |
||||||
|
|
||||||
|
public float getLaneweight() { |
||||||
|
return laneweight; |
||||||
|
} |
||||||
|
|
||||||
|
public void setLaneweight(float laneweight) { |
||||||
|
this.laneweight = laneweight; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
public String getComid() { |
||||||
|
return comid; |
||||||
|
} |
||||||
|
public void setComid(String comid) { |
||||||
|
this.comid = comid; |
||||||
|
} |
||||||
|
public int getLane() { |
||||||
|
return lane; |
||||||
|
} |
||||||
|
public void setLane(int lane) { |
||||||
|
this.lane = lane; |
||||||
|
} |
||||||
|
public String getLaneflag() { |
||||||
|
return laneflag; |
||||||
|
} |
||||||
|
public void setLaneflag(String laneflag) { |
||||||
|
this.laneflag = laneflag; |
||||||
|
} |
||||||
|
// public int getLaneweight1() {
|
||||||
|
// return laneweight1;
|
||||||
|
// }
|
||||||
|
// public void setLaneweight1(int laneweight1) {
|
||||||
|
// this.laneweight1 = laneweight1;
|
||||||
|
// }
|
||||||
|
// public int getLaneweight2() {
|
||||||
|
// return laneweight2;
|
||||||
|
// }
|
||||||
|
// public void setLaneweight2(int laneweight2) {
|
||||||
|
// this.laneweight2 = laneweight2;
|
||||||
|
// }
|
||||||
|
// public int getLaneweight3() {
|
||||||
|
// return laneweight3;
|
||||||
|
// }
|
||||||
|
// public void setLaneweight3(int laneweight3) {
|
||||||
|
// this.laneweight3 = laneweight3;
|
||||||
|
// }
|
||||||
|
// public int getLaneweight4() {
|
||||||
|
// return laneweight4;
|
||||||
|
// }
|
||||||
|
// public void setLaneweight4(int laneweight4) {
|
||||||
|
// this.laneweight4 = laneweight4;
|
||||||
|
// }
|
||||||
|
// public int getLaneweight5() {
|
||||||
|
// return laneweight5;
|
||||||
|
// }
|
||||||
|
// public void setLaneweight5(int laneweight5) {
|
||||||
|
// this.laneweight5 = laneweight5;
|
||||||
|
// }
|
||||||
|
// public int getLaneweight6() {
|
||||||
|
// return laneweight6;
|
||||||
|
// }
|
||||||
|
// public void setLaneweight6(int laneweight6) {
|
||||||
|
// this.laneweight6 = laneweight6;
|
||||||
|
// }
|
||||||
|
// public int getLaneweight7() {
|
||||||
|
// return laneweight7;
|
||||||
|
// }
|
||||||
|
// public void setLaneweight7(int laneweight7) {
|
||||||
|
// this.laneweight7 = laneweight7;
|
||||||
|
// }
|
||||||
|
// public int getLaneweight8() {
|
||||||
|
// return laneweight8;
|
||||||
|
// }
|
||||||
|
// public void setLaneweight8(int laneweight8) {
|
||||||
|
// this.laneweight8 = laneweight8;
|
||||||
|
// }
|
||||||
|
public int getLanelength() { |
||||||
|
return lanelength; |
||||||
|
} |
||||||
|
public void setLanelength(int lanelength) { |
||||||
|
this.lanelength = lanelength; |
||||||
|
} |
||||||
|
public int getLine() { |
||||||
|
return line; |
||||||
|
} |
||||||
|
public void setLine(int line) { |
||||||
|
this.line = line; |
||||||
|
} |
||||||
|
public String getLaneMark() { |
||||||
|
return laneMark; |
||||||
|
} |
||||||
|
public void setLaneMark(String laneMark) { |
||||||
|
this.laneMark = laneMark; |
||||||
|
} |
||||||
|
public List<LaneWeight> getLaneList() { |
||||||
|
return laneList; |
||||||
|
} |
||||||
|
public void setLaneList(List<LaneWeight> laneList) { |
||||||
|
this.laneList = laneList; |
||||||
|
} |
||||||
|
} |
||||||
@ -0,0 +1,89 @@ |
|||||||
|
package com.back.webSocket.bean; |
||||||
|
|
||||||
|
import java.math.BigDecimal; |
||||||
|
import java.util.List; |
||||||
|
|
||||||
|
public class TargetInfo { |
||||||
|
|
||||||
|
private Integer valid; |
||||||
|
private int targetCount; |
||||||
|
private List<Target> targetList; |
||||||
|
|
||||||
|
public Integer getValid() { |
||||||
|
return valid; |
||||||
|
} |
||||||
|
|
||||||
|
public void setValid(Integer valid) { |
||||||
|
this.valid = valid; |
||||||
|
} |
||||||
|
|
||||||
|
public int getTargetCount() { |
||||||
|
return targetCount; |
||||||
|
} |
||||||
|
|
||||||
|
public void setTargetCount(int targetCount) { |
||||||
|
this.targetCount = targetCount; |
||||||
|
} |
||||||
|
|
||||||
|
public List<Target> getTargetList() { |
||||||
|
return targetList; |
||||||
|
} |
||||||
|
|
||||||
|
public void setTargetList(List<Target> targetList) { |
||||||
|
this.targetList = targetList; |
||||||
|
} |
||||||
|
|
||||||
|
public static class Target { |
||||||
|
private int targetNum; |
||||||
|
private int targetType; |
||||||
|
private int laneNum; |
||||||
|
private BigDecimal xDistance; |
||||||
|
private BigDecimal yDistance; |
||||||
|
private BigDecimal xFlow; |
||||||
|
private BigDecimal yFlow; |
||||||
|
|
||||||
|
public BigDecimal getxDistance() { |
||||||
|
return xDistance; |
||||||
|
} |
||||||
|
public void setxDistance(BigDecimal xDistance) { |
||||||
|
this.xDistance = xDistance; |
||||||
|
} |
||||||
|
public BigDecimal getyDistance() { |
||||||
|
return yDistance; |
||||||
|
} |
||||||
|
public void setyDistance(BigDecimal yDistance) { |
||||||
|
this.yDistance = yDistance; |
||||||
|
} |
||||||
|
public BigDecimal getxFlow() { |
||||||
|
return xFlow; |
||||||
|
} |
||||||
|
public void setxFlow(BigDecimal xFlow) { |
||||||
|
this.xFlow = xFlow; |
||||||
|
} |
||||||
|
public BigDecimal getyFlow() { |
||||||
|
return yFlow; |
||||||
|
} |
||||||
|
public void setyFlow(BigDecimal yFlow) { |
||||||
|
this.yFlow = yFlow; |
||||||
|
} |
||||||
|
public int getTargetNum() { |
||||||
|
return targetNum; |
||||||
|
} |
||||||
|
public void setTargetNum(int targetNum) { |
||||||
|
this.targetNum = targetNum; |
||||||
|
} |
||||||
|
public int getTargetType() { |
||||||
|
return targetType; |
||||||
|
} |
||||||
|
public void setTargetType(int targetType) { |
||||||
|
this.targetType = targetType; |
||||||
|
} |
||||||
|
public int getLaneNum() { |
||||||
|
return laneNum; |
||||||
|
} |
||||||
|
public void setLaneNum(int laneNum) { |
||||||
|
this.laneNum = laneNum; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
@ -0,0 +1,5 @@ |
|||||||
|
Manifest-Version: 1.0 |
||||||
|
Built-By: Administrator |
||||||
|
Build-Jdk: 1.8.0_351 |
||||||
|
Created-By: Maven Integration for Eclipse |
||||||
|
|
||||||
@ -0,0 +1,7 @@ |
|||||||
|
#Generated by Maven Integration for Eclipse |
||||||
|
#Wed Jun 05 23:14:29 CST 2024 |
||||||
|
version=0.0.1-SNAPSHOT |
||||||
|
groupId=com.back |
||||||
|
m2e.projectName=2-carCheck |
||||||
|
m2e.projectLocation=D\:\\fyj_20240312\\processor\\carCheck |
||||||
|
artifactId=carCheck |
||||||
@ -0,0 +1,52 @@ |
|||||||
|
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> |
||||||
|
<modelVersion>4.0.0</modelVersion> |
||||||
|
<parent> |
||||||
|
<groupId>com.back</groupId> |
||||||
|
<artifactId>processor</artifactId> |
||||||
|
<version>0.0.1-SNAPSHOT</version> |
||||||
|
</parent> |
||||||
|
<artifactId>carCheck</artifactId> |
||||||
|
<packaging>jar</packaging> |
||||||
|
|
||||||
|
<dependencies> |
||||||
|
<dependency> |
||||||
|
<groupId>com.back</groupId> |
||||||
|
<artifactId>common</artifactId> |
||||||
|
<version>0.0.1-SNAPSHOT</version> |
||||||
|
</dependency> |
||||||
|
</dependencies> |
||||||
|
|
||||||
|
|
||||||
|
<build> |
||||||
|
<plugins> |
||||||
|
<plugin> |
||||||
|
<groupId>org.apache.maven.plugins</groupId> |
||||||
|
<artifactId>maven-compiler-plugin</artifactId> |
||||||
|
<version>3.5.1</version> |
||||||
|
<configuration> |
||||||
|
<source>1.8</source> |
||||||
|
<target>1.8</target> |
||||||
|
</configuration> |
||||||
|
</plugin> |
||||||
|
|
||||||
|
<plugin> |
||||||
|
<groupId>org.springframework.boot</groupId> |
||||||
|
<artifactId>spring-boot-maven-plugin</artifactId> |
||||||
|
<version>2.6.4</version> |
||||||
|
<configuration> |
||||||
|
<!-- springboot main方法入口 --> |
||||||
|
<mainClass>com.back.main.MainProcess</mainClass> |
||||||
|
<layout>ZIP</layout> |
||||||
|
</configuration> |
||||||
|
<executions> |
||||||
|
<execution> |
||||||
|
<goals> |
||||||
|
<goal>repackage</goal><!--可以把依赖的包都打包到生成的Jar包中--> |
||||||
|
</goals> |
||||||
|
</execution> |
||||||
|
</executions> |
||||||
|
</plugin> |
||||||
|
</plugins> |
||||||
|
</build> |
||||||
|
|
||||||
|
</project> |
||||||
@ -0,0 +1,17 @@ |
|||||||
|
driver = com.mysql.jdbc.Driver |
||||||
|
url = jdbc:mysql://8.129.11.230:3306/samr?connectTimeout=10000&socketTimeout=60000 |
||||||
|
user = root |
||||||
|
pwd = samr2020 |
||||||
|
language = en |
||||||
|
|
||||||
|
opcControl = false |
||||||
|
MControlTiming15 = false |
||||||
|
MControlTiming60 = false |
||||||
|
|
||||||
|
ForWard485 = false |
||||||
|
LampTiming = false |
||||||
|
LampDay3761Timing =false |
||||||
|
TerminalDay3761Timing =false |
||||||
|
AnalysisOfTunnelElectricity=false |
||||||
|
|
||||||
|
gprsIp=172.26.187.230 |
||||||
@ -0,0 +1,49 @@ |
|||||||
|
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> |
||||||
|
<modelVersion>4.0.0</modelVersion> |
||||||
|
<parent> |
||||||
|
<groupId>com.back</groupId> |
||||||
|
<artifactId>processor</artifactId> |
||||||
|
<version>0.0.1-SNAPSHOT</version> |
||||||
|
</parent> |
||||||
|
<artifactId>carCheckNew</artifactId> |
||||||
|
|
||||||
|
<dependencies> |
||||||
|
<dependency> |
||||||
|
<groupId>com.back</groupId> |
||||||
|
<artifactId>common</artifactId> |
||||||
|
<version>0.0.1-SNAPSHOT</version> |
||||||
|
</dependency> |
||||||
|
</dependencies> |
||||||
|
|
||||||
|
|
||||||
|
<build> |
||||||
|
<plugins> |
||||||
|
<plugin> |
||||||
|
<groupId>org.apache.maven.plugins</groupId> |
||||||
|
<artifactId>maven-compiler-plugin</artifactId> |
||||||
|
<version>3.5.1</version> |
||||||
|
<configuration> |
||||||
|
<source>1.8</source> |
||||||
|
<target>1.8</target> |
||||||
|
</configuration> |
||||||
|
</plugin> |
||||||
|
<plugin> |
||||||
|
<groupId>org.springframework.boot</groupId> |
||||||
|
<artifactId>spring-boot-maven-plugin</artifactId> |
||||||
|
<version>2.6.4</version> |
||||||
|
<configuration> |
||||||
|
<!-- springboot main方法入口 --> |
||||||
|
<mainClass>com.back.main.MainProcess</mainClass> |
||||||
|
<layout>ZIP</layout> |
||||||
|
</configuration> |
||||||
|
<executions> |
||||||
|
<execution> |
||||||
|
<goals> |
||||||
|
<goal>repackage</goal><!--可以把依赖的包都打包到生成的Jar包中--> |
||||||
|
</goals> |
||||||
|
</execution> |
||||||
|
</executions> |
||||||
|
</plugin> |
||||||
|
</plugins> |
||||||
|
</build> |
||||||
|
</project> |
||||||
@ -0,0 +1,24 @@ |
|||||||
|
package com.back.instance; |
||||||
|
|
||||||
|
public class WebsocketConnectInstance { |
||||||
|
|
||||||
|
public static WebsocketConnectInstance websocketConnectInstance = null; |
||||||
|
|
||||||
|
public static WebsocketConnectInstance getInstance() { |
||||||
|
if (websocketConnectInstance == null) { |
||||||
|
websocketConnectInstance = new WebsocketConnectInstance(); |
||||||
|
} |
||||||
|
return websocketConnectInstance; |
||||||
|
} |
||||||
|
|
||||||
|
private boolean restart; |
||||||
|
|
||||||
|
public boolean isRestart() { |
||||||
|
return restart; |
||||||
|
} |
||||||
|
|
||||||
|
public void setRestart(boolean restart) { |
||||||
|
this.restart = restart; |
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
@ -0,0 +1,66 @@ |
|||||||
|
package com.back.main; |
||||||
|
|
||||||
|
import java.net.UnknownHostException; |
||||||
|
import java.util.TimeZone; |
||||||
|
import java.util.Timer; |
||||||
|
import java.util.TimerTask; |
||||||
|
|
||||||
|
import org.slf4j.Logger; |
||||||
|
import org.slf4j.LoggerFactory; |
||||||
|
|
||||||
|
import com.back.common.RunParams; |
||||||
|
import com.back.instance.WebsocketConnectInstance; |
||||||
|
import com.back.protocol.SystemParameter; |
||||||
|
import com.back.webSocket.CarCheckSocket; |
||||||
|
import com.back.webSocket.SocketServer; |
||||||
|
|
||||||
|
public class MainProcess { |
||||||
|
|
||||||
|
public static final Logger LOGGER = LoggerFactory.getLogger(MainProcess.class); |
||||||
|
|
||||||
|
public static void main(String[] args) { |
||||||
|
|
||||||
|
System.out.println("ver 1.2.11 2024-05-07 15");// 英文
|
||||||
|
System.out.println(TimeZone.getDefault().getDisplayName()); |
||||||
|
// 获取运行参数
|
||||||
|
RunParams runParams = SystemParameter.GetPostParams(); |
||||||
|
if (runParams == null) { |
||||||
|
System.out.println("Database connection failed!"); |
||||||
|
} |
||||||
|
int websocketPort = runParams.websocketPort; |
||||||
|
String carCheckSocketIp = runParams.carCheckSocketIp; |
||||||
|
int carCheckSocketPort = runParams.carCheckSocketPort; |
||||||
|
|
||||||
|
// 车检器
|
||||||
|
try { |
||||||
|
try { |
||||||
|
SocketServer socketServer = new SocketServer(websocketPort); |
||||||
|
socketServer.start(); |
||||||
|
|
||||||
|
// 定时判断 websocket 是否假死(3分钟)
|
||||||
|
Timer timer = new Timer(); |
||||||
|
timer.schedule(new TimerTask() { |
||||||
|
public void run() { |
||||||
|
try { |
||||||
|
WebsocketConnectInstance websocketConnectInstance = WebsocketConnectInstance.getInstance(); |
||||||
|
// if (websocketConnectInstance.isRestart()) {
|
||||||
|
// socketServer.stop();
|
||||||
|
// socketServer.start();
|
||||||
|
// }
|
||||||
|
} catch (Exception e) { |
||||||
|
// TODO Auto-generated catch block
|
||||||
|
// e.printStackTrace();
|
||||||
|
System.err.println("socketServer 重启发生异常"); |
||||||
|
} |
||||||
|
} |
||||||
|
}, 0, 1 * 1000); |
||||||
|
|
||||||
|
} catch (UnknownHostException e) { |
||||||
|
LOGGER.error("websocket 连接失败,error message:{}", e.getMessage()); |
||||||
|
} |
||||||
|
new CarCheckSocket(carCheckSocketIp, carCheckSocketPort).connectCarCheckSocket(); |
||||||
|
} catch (Exception e) { |
||||||
|
LOGGER.error("车检器 socket 连接失败,error message:{}", e.getMessage()); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,277 @@ |
|||||||
|
package com.back.webSocket; |
||||||
|
|
||||||
|
|
||||||
|
import java.net.InetSocketAddress; |
||||||
|
import java.net.UnknownHostException; |
||||||
|
import java.sql.ResultSet; |
||||||
|
import java.time.LocalDateTime; |
||||||
|
import java.time.format.DateTimeFormatter; |
||||||
|
import java.util.HashMap; |
||||||
|
import java.util.Map; |
||||||
|
import java.util.Timer; |
||||||
|
import java.util.TimerTask; |
||||||
|
import java.util.concurrent.ConcurrentHashMap; |
||||||
|
|
||||||
|
import com.back.webSocket.bean.CarCheckInfo; |
||||||
|
import com.back.webSocket.bean.LineInfo; |
||||||
|
import org.java_websocket.WebSocket; |
||||||
|
import org.java_websocket.handshake.ClientHandshake; |
||||||
|
import org.java_websocket.server.WebSocketServer; |
||||||
|
import org.slf4j.Logger; |
||||||
|
import org.slf4j.LoggerFactory; |
||||||
|
|
||||||
|
import com.alibaba.fastjson.JSON; |
||||||
|
import com.alibaba.fastjson.JSONObject; |
||||||
|
|
||||||
|
import com.back.jdbc.SQLHelper; |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
public class SocketServer extends WebSocketServer { |
||||||
|
|
||||||
|
public static final Logger LOGGER = LoggerFactory.getLogger(SocketServer.class); |
||||||
|
|
||||||
|
public SocketServer(int port) throws UnknownHostException { |
||||||
|
super(new InetSocketAddress(port)); |
||||||
|
} |
||||||
|
|
||||||
|
public SocketServer(InetSocketAddress address) { |
||||||
|
super(address); |
||||||
|
} |
||||||
|
|
||||||
|
public static Map<String, WebSocket> map = new ConcurrentHashMap<>(); |
||||||
|
public static Map<String, SocketBean> connectMap = new ConcurrentHashMap<>(); |
||||||
|
public static Map<String, Integer> connectWaitMap = new ConcurrentHashMap<>(); |
||||||
|
|
||||||
|
@Override |
||||||
|
public void onOpen(WebSocket conn, ClientHandshake handshake) { |
||||||
|
conn.send("Welcome to the server!"); // This method sends a message to the new client
|
||||||
|
// broadcast("new connection: " + handshake.getResourceDescriptor()); // This method sends a message to all clients connected
|
||||||
|
String clientIp = conn.getRemoteSocketAddress().getAddress().getHostAddress(); |
||||||
|
// System.out.println(clientIp + " entered the room!");
|
||||||
|
map.put(clientIp, conn); |
||||||
|
|
||||||
|
// String projectId = null;
|
||||||
|
// String paramString = handshake.getResourceDescriptor().replace("?", "").replace("/", "");
|
||||||
|
// if (StringUtils.isNoneEmpty(paramString)) {
|
||||||
|
//
|
||||||
|
// String[] params = paramString.split("&");
|
||||||
|
// for (String param : params) {
|
||||||
|
// String[] kv = param.split("=");
|
||||||
|
// if (kv.length > 0) {
|
||||||
|
// String key = kv[0];
|
||||||
|
// String value = kv[1];
|
||||||
|
//
|
||||||
|
//
|
||||||
|
// if (key.equals("projectId")) {
|
||||||
|
// projectId = value;
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// }
|
||||||
|
|
||||||
|
|
||||||
|
LOGGER.info("{}, 客户端:{}, 连接 websocket 服务器成功", LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")), clientIp); |
||||||
|
|
||||||
|
// 获取运行参数
|
||||||
|
// RunParams runParams = SystemParameter.GetPostParams();
|
||||||
|
// if (runParams == null) {
|
||||||
|
// System.out.println("Database connection failed!");
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// if (StringUtils.isNoneEmpty(projectId)) {
|
||||||
|
// String carCheckSocketIp = runParams.carCheckSocketIp;
|
||||||
|
// int carCheckSocketPort = runParams.carCheckSocketPort;
|
||||||
|
// try {
|
||||||
|
// new CarCheckSocket(carCheckSocketIp, carCheckSocketPort, Integer.valueOf(projectId)).connectCarCheckSocket();
|
||||||
|
// } catch (IOException e) {
|
||||||
|
// LOGGER.error("websocket 连接失败,error message:{}", e.getMessage());
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void onClose(WebSocket conn, int code, String reason, boolean remote) { |
||||||
|
String clientIp = conn.getRemoteSocketAddress().getAddress().getHostAddress(); |
||||||
|
System.out.println(String.format("%s, ip: %s, websocket 断开连接", LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")), clientIp)); |
||||||
|
|
||||||
|
if (connectMap.get(clientIp) != null) { |
||||||
|
connectMap.remove(clientIp); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void onMessage(WebSocket conn, String message) { |
||||||
|
|
||||||
|
// broadcast(message);
|
||||||
|
|
||||||
|
try { |
||||||
|
if (message.contains("longitude") && message.contains("latitude") |
||||||
|
&& message.contains("leftaddr") && message.contains("rightaddr")) { |
||||||
|
System.out.println("切换项目: " + message); |
||||||
|
String clientIp = conn.getRemoteSocketAddress().getAddress().getHostAddress(); |
||||||
|
LineInfo lineInfo = JSONObject.parseObject(message, LineInfo.class); |
||||||
|
Integer projectId = Integer.valueOf(lineInfo.getId()); |
||||||
|
ResultSet resultSet = SQLHelper.ExecProcwCommands("SELECT * FROM line WHERE id = " + projectId); |
||||||
|
ChangeTunnelProjectRep changeTunnelProjectRep = new ChangeTunnelProjectRep(); |
||||||
|
changeTunnelProjectRep.setCommand("changetunnelproject"); |
||||||
|
changeTunnelProjectRep.setProjectid(projectId); |
||||||
|
if (resultSet != null && resultSet.next()) { |
||||||
|
changeTunnelProjectRep.setSuccessed(true); |
||||||
|
changeTunnelProjectRep.setMessage("切换隧道成功"); |
||||||
|
|
||||||
|
SocketBean socketBean = new SocketBean(); |
||||||
|
socketBean.setConn(conn); |
||||||
|
socketBean.setProjectId(projectId); |
||||||
|
connectMap.put(clientIp, socketBean); |
||||||
|
|
||||||
|
connectWaitMap.put(clientIp, 0); |
||||||
|
} else { |
||||||
|
changeTunnelProjectRep.setSuccessed(false); |
||||||
|
changeTunnelProjectRep.setMessage("项目不存在"); |
||||||
|
} |
||||||
|
System.out.println("切换项目: " + message); |
||||||
|
conn.send(JSON.toJSONString(changeTunnelProjectRep)); |
||||||
|
} else if (message.contains("heartbeatmessage")) { |
||||||
|
System.out.println("ping message: " + message); |
||||||
|
|
||||||
|
String clientIp = conn.getRemoteSocketAddress().getAddress().getHostAddress(); |
||||||
|
connectWaitMap.put(clientIp, 0); |
||||||
|
|
||||||
|
Map<String, Object> map = new HashMap<String, Object>(); |
||||||
|
map.put("command", "heartbeatmessage"); |
||||||
|
map.put("successed", true); |
||||||
|
|
||||||
|
System.out.println(String.format("%s, ip:%s, pong message: %s", LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd hh:mm:ss")), clientIp, JSON.toJSONString(map))); |
||||||
|
conn.send(JSON.toJSONString(map)); |
||||||
|
} else { |
||||||
|
conn.send(message); |
||||||
|
} |
||||||
|
|
||||||
|
} catch (Exception e) { |
||||||
|
// TODO Auto-generated catch block
|
||||||
|
e.printStackTrace(); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void onError(WebSocket conn, Exception ex) { |
||||||
|
ex.printStackTrace(); |
||||||
|
if (conn != null) { |
||||||
|
// some errors like port binding failed may not be assignable to a specific
|
||||||
|
// websocket
|
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
public static void sendMessage(String message) { |
||||||
|
for (Map.Entry<String, WebSocket> entry : map.entrySet()) { |
||||||
|
String ip = entry.getKey(); |
||||||
|
try { |
||||||
|
WebSocket conn = entry.getValue(); |
||||||
|
|
||||||
|
if (connectMap.get(ip) != null) { |
||||||
|
SocketBean socketBean = connectMap.get(ip); |
||||||
|
int projectId = socketBean.getProjectId(); |
||||||
|
|
||||||
|
CarCheckInfo carCheckInfo = JSONObject.parseObject(message, CarCheckInfo.class); |
||||||
|
int line = carCheckInfo.getSensor().getLine(); |
||||||
|
|
||||||
|
if (projectId == line && conn != null) { |
||||||
|
conn.send(message); |
||||||
|
// LOGGER.info("给客户端:{},发送消息:{}", ip, message);
|
||||||
|
} |
||||||
|
} |
||||||
|
} catch (Exception e) { |
||||||
|
// TODO Auto-generated catch block
|
||||||
|
// e.printStackTrace();
|
||||||
|
LOGGER.info("WebSocket发送报文到前端发生异常,前端IP:{},错误信息:{}", ip, e.getMessage()); |
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void onStart() { |
||||||
|
System.out.println("Server started!"); |
||||||
|
setConnectionLostTimeout(0); |
||||||
|
setConnectionLostTimeout(100); |
||||||
|
|
||||||
|
Timer timer = new Timer(); |
||||||
|
timer.schedule(new TimerTask() { |
||||||
|
public void run() { |
||||||
|
|
||||||
|
System.out.println("connectWaitMap: " + JSON.toJSONString(connectWaitMap)); |
||||||
|
for (Map.Entry<String, SocketBean> entry : connectMap.entrySet()) { |
||||||
|
String ip = entry.getKey(); |
||||||
|
if (connectWaitMap.get(ip) != null) { |
||||||
|
int waitCount = connectWaitMap.get(ip) + 1; |
||||||
|
connectWaitMap.put(ip, waitCount); |
||||||
|
|
||||||
|
if (waitCount > 3) { |
||||||
|
// WebsocketConnectInstance websocketConnectInstance = WebsocketConnectInstance.getInstance();
|
||||||
|
// websocketConnectInstance.setRestart(true);
|
||||||
|
|
||||||
|
if (connectMap.get(ip) != null) { |
||||||
|
SocketBean socketBean = connectMap.get(ip); |
||||||
|
WebSocket webSocket = socketBean.getConn(); |
||||||
|
webSocket.close(); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
}, 0, 1 * 60 * 1000); |
||||||
|
} |
||||||
|
|
||||||
|
class SocketBean { |
||||||
|
WebSocket conn; |
||||||
|
int projectId; |
||||||
|
public WebSocket getConn() { |
||||||
|
return conn; |
||||||
|
} |
||||||
|
public void setConn(WebSocket conn) { |
||||||
|
this.conn = conn; |
||||||
|
} |
||||||
|
public int getProjectId() { |
||||||
|
return projectId; |
||||||
|
} |
||||||
|
public void setProjectId(int projectId) { |
||||||
|
this.projectId = projectId; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
class ChangeTunnelProjectRep { |
||||||
|
private String command; |
||||||
|
private boolean successed; |
||||||
|
private Integer projectid; |
||||||
|
private String message; |
||||||
|
public String getCommand() { |
||||||
|
return command; |
||||||
|
} |
||||||
|
public void setCommand(String command) { |
||||||
|
this.command = command; |
||||||
|
} |
||||||
|
public boolean isSuccessed() { |
||||||
|
return successed; |
||||||
|
} |
||||||
|
public void setSuccessed(boolean successed) { |
||||||
|
this.successed = successed; |
||||||
|
} |
||||||
|
public Integer getProjectid() { |
||||||
|
return projectid; |
||||||
|
} |
||||||
|
public void setProjectid(Integer projectid) { |
||||||
|
this.projectid = projectid; |
||||||
|
} |
||||||
|
public String getMessage() { |
||||||
|
return message; |
||||||
|
} |
||||||
|
public void setMessage(String message) { |
||||||
|
this.message = message; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
@ -0,0 +1,27 @@ |
|||||||
|
package com.back.webSocket.bean; |
||||||
|
|
||||||
|
public class BaseInfo { |
||||||
|
|
||||||
|
private Integer laneCount; |
||||||
|
private int trafficOutputFlag; |
||||||
|
private int generalTrafficIndication; |
||||||
|
public Integer getLaneCount() { |
||||||
|
return laneCount; |
||||||
|
} |
||||||
|
public void setLaneCount(Integer laneCount) { |
||||||
|
this.laneCount = laneCount; |
||||||
|
} |
||||||
|
public int getTrafficOutputFlag() { |
||||||
|
return trafficOutputFlag; |
||||||
|
} |
||||||
|
public void setTrafficOutputFlag(int trafficOutputFlag) { |
||||||
|
this.trafficOutputFlag = trafficOutputFlag; |
||||||
|
} |
||||||
|
public int getGeneralTrafficIndication() { |
||||||
|
return generalTrafficIndication; |
||||||
|
} |
||||||
|
public void setGeneralTrafficIndication(int generalTrafficIndication) { |
||||||
|
this.generalTrafficIndication = generalTrafficIndication; |
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
@ -0,0 +1,49 @@ |
|||||||
|
package com.back.webSocket.bean; |
||||||
|
|
||||||
|
|
||||||
|
public class CarCheckInfo { |
||||||
|
private String command; |
||||||
|
private BaseInfo baseInfo; |
||||||
|
private TargetInfo targetInfo; |
||||||
|
public SensorInfo sensor; |
||||||
|
private LoadInfo loadInfo; |
||||||
|
public FlowInfo flowInfo; |
||||||
|
|
||||||
|
public String getCommand() { |
||||||
|
return command; |
||||||
|
} |
||||||
|
public void setCommand(String command) { |
||||||
|
this.command = command; |
||||||
|
} |
||||||
|
public TargetInfo getTargetInfo() { |
||||||
|
return targetInfo; |
||||||
|
} |
||||||
|
public void setTargetInfo(TargetInfo targetInfo) { |
||||||
|
this.targetInfo = targetInfo; |
||||||
|
} |
||||||
|
public SensorInfo getSensor() { |
||||||
|
return sensor; |
||||||
|
} |
||||||
|
public void setSensor(SensorInfo sensor) { |
||||||
|
this.sensor = sensor; |
||||||
|
} |
||||||
|
public LoadInfo getLoadInfo() { |
||||||
|
return loadInfo; |
||||||
|
} |
||||||
|
public void setLoadInfo(LoadInfo loadInfo) { |
||||||
|
this.loadInfo = loadInfo; |
||||||
|
} |
||||||
|
public FlowInfo getFlowInfo() { |
||||||
|
return flowInfo; |
||||||
|
} |
||||||
|
public void setFlowInfo(FlowInfo flowInfo) { |
||||||
|
this.flowInfo = flowInfo; |
||||||
|
} |
||||||
|
public BaseInfo getBaseInfo() { |
||||||
|
return baseInfo; |
||||||
|
} |
||||||
|
public void setBaseInfo(BaseInfo baseInfo) { |
||||||
|
this.baseInfo = baseInfo; |
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
@ -0,0 +1,106 @@ |
|||||||
|
package com.back.webSocket.bean; |
||||||
|
|
||||||
|
public class CarSensor extends SensorInfo { |
||||||
|
|
||||||
|
private int id; |
||||||
|
private String name; |
||||||
|
private String terminal; |
||||||
|
private String ip; |
||||||
|
private String port; |
||||||
|
private int connectflag; |
||||||
|
|
||||||
|
public int laneweight1; |
||||||
|
public int laneweight2; |
||||||
|
public int laneweight3; |
||||||
|
public int laneweight4; |
||||||
|
public int laneweight5; |
||||||
|
public int laneweight6; |
||||||
|
public int laneweight7; |
||||||
|
public int laneweight8; |
||||||
|
|
||||||
|
public int getId() { |
||||||
|
return id; |
||||||
|
} |
||||||
|
public void setId(int id) { |
||||||
|
this.id = id; |
||||||
|
} |
||||||
|
public String getName() { |
||||||
|
return name; |
||||||
|
} |
||||||
|
public void setName(String name) { |
||||||
|
this.name = name; |
||||||
|
} |
||||||
|
public String getTerminal() { |
||||||
|
return terminal; |
||||||
|
} |
||||||
|
public void setTerminal(String terminal) { |
||||||
|
this.terminal = terminal; |
||||||
|
} |
||||||
|
public String getIp() { |
||||||
|
return ip; |
||||||
|
} |
||||||
|
public void setIp(String ip) { |
||||||
|
this.ip = ip; |
||||||
|
} |
||||||
|
public String getPort() { |
||||||
|
return port; |
||||||
|
} |
||||||
|
public void setPort(String port) { |
||||||
|
this.port = port; |
||||||
|
} |
||||||
|
public int getConnectflag() { |
||||||
|
return connectflag; |
||||||
|
} |
||||||
|
public void setConnectflag(int connectflag) { |
||||||
|
this.connectflag = connectflag; |
||||||
|
} |
||||||
|
public int getLaneweight1() { |
||||||
|
return laneweight1; |
||||||
|
} |
||||||
|
public void setLaneweight1(int laneweight1) { |
||||||
|
this.laneweight1 = laneweight1; |
||||||
|
} |
||||||
|
public int getLaneweight2() { |
||||||
|
return laneweight2; |
||||||
|
} |
||||||
|
public void setLaneweight2(int laneweight2) { |
||||||
|
this.laneweight2 = laneweight2; |
||||||
|
} |
||||||
|
public int getLaneweight3() { |
||||||
|
return laneweight3; |
||||||
|
} |
||||||
|
public void setLaneweight3(int laneweight3) { |
||||||
|
this.laneweight3 = laneweight3; |
||||||
|
} |
||||||
|
public int getLaneweight4() { |
||||||
|
return laneweight4; |
||||||
|
} |
||||||
|
public void setLaneweight4(int laneweight4) { |
||||||
|
this.laneweight4 = laneweight4; |
||||||
|
} |
||||||
|
public int getLaneweight5() { |
||||||
|
return laneweight5; |
||||||
|
} |
||||||
|
public void setLaneweight5(int laneweight5) { |
||||||
|
this.laneweight5 = laneweight5; |
||||||
|
} |
||||||
|
public int getLaneweight6() { |
||||||
|
return laneweight6; |
||||||
|
} |
||||||
|
public void setLaneweight6(int laneweight6) { |
||||||
|
this.laneweight6 = laneweight6; |
||||||
|
} |
||||||
|
public int getLaneweight7() { |
||||||
|
return laneweight7; |
||||||
|
} |
||||||
|
public void setLaneweight7(int laneweight7) { |
||||||
|
this.laneweight7 = laneweight7; |
||||||
|
} |
||||||
|
public int getLaneweight8() { |
||||||
|
return laneweight8; |
||||||
|
} |
||||||
|
public void setLaneweight8(int laneweight8) { |
||||||
|
this.laneweight8 = laneweight8; |
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
@ -0,0 +1,156 @@ |
|||||||
|
package com.back.webSocket.bean; |
||||||
|
|
||||||
|
import java.math.BigDecimal; |
||||||
|
import java.util.List; |
||||||
|
|
||||||
|
public class FlowInfo { |
||||||
|
|
||||||
|
private Integer valid; |
||||||
|
private Integer laneCount; |
||||||
|
private List<Flow> flowList; |
||||||
|
|
||||||
|
public Integer getValid() { |
||||||
|
return valid; |
||||||
|
} |
||||||
|
|
||||||
|
public void setValid(Integer valid) { |
||||||
|
this.valid = valid; |
||||||
|
} |
||||||
|
|
||||||
|
public Integer getLaneCount() { |
||||||
|
return laneCount; |
||||||
|
} |
||||||
|
|
||||||
|
public void setLaneCount(Integer laneCount) { |
||||||
|
this.laneCount = laneCount; |
||||||
|
} |
||||||
|
|
||||||
|
public List<Flow> getFlowList() { |
||||||
|
return flowList; |
||||||
|
} |
||||||
|
|
||||||
|
public void setFlowList(List<Flow> flowList) { |
||||||
|
this.flowList = flowList; |
||||||
|
} |
||||||
|
|
||||||
|
public static class Flow { |
||||||
|
// private String name;
|
||||||
|
// private String comid;
|
||||||
|
private String terminal; |
||||||
|
private int laneNumber; |
||||||
|
// private int laneCongestion;
|
||||||
|
private BigDecimal maxCarLanesflow; |
||||||
|
private BigDecimal maxCarAverageLanesflow; |
||||||
|
private BigDecimal mediumCarLanesflow; |
||||||
|
private BigDecimal mediumCarAverageLanesflow; |
||||||
|
private BigDecimal minCarLanesflow; |
||||||
|
private BigDecimal minCarAverageLanesflow; |
||||||
|
private BigDecimal locomotiveLanesflow; |
||||||
|
private BigDecimal locomotiveAverageLanesflow; |
||||||
|
private BigDecimal motorVehicleAverageLanesflow; |
||||||
|
private BigDecimal laneOccupancy; |
||||||
|
private BigDecimal timeOccupancy; |
||||||
|
private BigDecimal averageTravelTime; |
||||||
|
private BigDecimal averageTravelDistance; |
||||||
|
|
||||||
|
|
||||||
|
public String getTerminal() { |
||||||
|
return terminal; |
||||||
|
} |
||||||
|
public void setTerminal(String terminal) { |
||||||
|
this.terminal = terminal; |
||||||
|
} |
||||||
|
public int getLaneNumber() { |
||||||
|
return laneNumber; |
||||||
|
} |
||||||
|
public void setLaneNumber(int laneNumber) { |
||||||
|
this.laneNumber = laneNumber; |
||||||
|
} |
||||||
|
// public int getLaneCongestion() {
|
||||||
|
// return laneCongestion;
|
||||||
|
// }
|
||||||
|
// public void setLaneCongestion(int laneCongestion) {
|
||||||
|
// this.laneCongestion = laneCongestion;
|
||||||
|
// }
|
||||||
|
public BigDecimal getMaxCarLanesflow() { |
||||||
|
return maxCarLanesflow; |
||||||
|
} |
||||||
|
public void setMaxCarLanesflow(BigDecimal maxCarLanesflow) { |
||||||
|
this.maxCarLanesflow = maxCarLanesflow; |
||||||
|
} |
||||||
|
public BigDecimal getMaxCarAverageLanesflow() { |
||||||
|
return maxCarAverageLanesflow; |
||||||
|
} |
||||||
|
public void setMaxCarAverageLanesflow(BigDecimal maxCarAverageLanesflow) { |
||||||
|
this.maxCarAverageLanesflow = maxCarAverageLanesflow; |
||||||
|
} |
||||||
|
public BigDecimal getMediumCarLanesflow() { |
||||||
|
return mediumCarLanesflow; |
||||||
|
} |
||||||
|
public void setMediumCarLanesflow(BigDecimal mediumCarLanesflow) { |
||||||
|
this.mediumCarLanesflow = mediumCarLanesflow; |
||||||
|
} |
||||||
|
public BigDecimal getMediumCarAverageLanesflow() { |
||||||
|
return mediumCarAverageLanesflow; |
||||||
|
} |
||||||
|
public void setMediumCarAverageLanesflow(BigDecimal mediumCarAverageLanesflow) { |
||||||
|
this.mediumCarAverageLanesflow = mediumCarAverageLanesflow; |
||||||
|
} |
||||||
|
public BigDecimal getMinCarLanesflow() { |
||||||
|
return minCarLanesflow; |
||||||
|
} |
||||||
|
public void setMinCarLanesflow(BigDecimal minCarLanesflow) { |
||||||
|
this.minCarLanesflow = minCarLanesflow; |
||||||
|
} |
||||||
|
public BigDecimal getMinCarAverageLanesflow() { |
||||||
|
return minCarAverageLanesflow; |
||||||
|
} |
||||||
|
public void setMinCarAverageLanesflow(BigDecimal minCarAverageLanesflow) { |
||||||
|
this.minCarAverageLanesflow = minCarAverageLanesflow; |
||||||
|
} |
||||||
|
public BigDecimal getLocomotiveLanesflow() { |
||||||
|
return locomotiveLanesflow; |
||||||
|
} |
||||||
|
public void setLocomotiveLanesflow(BigDecimal locomotiveLanesflow) { |
||||||
|
this.locomotiveLanesflow = locomotiveLanesflow; |
||||||
|
} |
||||||
|
public BigDecimal getLocomotiveAverageLanesflow() { |
||||||
|
return locomotiveAverageLanesflow; |
||||||
|
} |
||||||
|
public void setLocomotiveAverageLanesflow(BigDecimal locomotiveAverageLanesflow) { |
||||||
|
this.locomotiveAverageLanesflow = locomotiveAverageLanesflow; |
||||||
|
} |
||||||
|
public BigDecimal getMotorVehicleAverageLanesflow() { |
||||||
|
return motorVehicleAverageLanesflow; |
||||||
|
} |
||||||
|
public void setMotorVehicleAverageLanesflow(BigDecimal motorVehicleAverageLanesflow) { |
||||||
|
this.motorVehicleAverageLanesflow = motorVehicleAverageLanesflow; |
||||||
|
} |
||||||
|
public BigDecimal getLaneOccupancy() { |
||||||
|
return laneOccupancy; |
||||||
|
} |
||||||
|
public void setLaneOccupancy(BigDecimal laneOccupancy) { |
||||||
|
this.laneOccupancy = laneOccupancy; |
||||||
|
} |
||||||
|
public BigDecimal getTimeOccupancy() { |
||||||
|
return timeOccupancy; |
||||||
|
} |
||||||
|
public void setTimeOccupancy(BigDecimal timeOccupancy) { |
||||||
|
this.timeOccupancy = timeOccupancy; |
||||||
|
} |
||||||
|
public BigDecimal getAverageTravelTime() { |
||||||
|
return averageTravelTime; |
||||||
|
} |
||||||
|
public void setAverageTravelTime(BigDecimal averageTravelTime) { |
||||||
|
this.averageTravelTime = averageTravelTime; |
||||||
|
} |
||||||
|
public BigDecimal getAverageTravelDistance() { |
||||||
|
return averageTravelDistance; |
||||||
|
} |
||||||
|
public void setAverageTravelDistance(BigDecimal averageTravelDistance) { |
||||||
|
this.averageTravelDistance = averageTravelDistance; |
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
@ -0,0 +1,81 @@ |
|||||||
|
package com.back.webSocket.bean; |
||||||
|
|
||||||
|
public class LineInfo { |
||||||
|
private String id; |
||||||
|
private String name; |
||||||
|
private String longitude; |
||||||
|
private String latitude; |
||||||
|
private String leftaddr; |
||||||
|
private String rightaddr; |
||||||
|
private String createtime; |
||||||
|
private String username; |
||||||
|
private String city; |
||||||
|
private String remark; |
||||||
|
private String createuser; |
||||||
|
public String getId() { |
||||||
|
return id; |
||||||
|
} |
||||||
|
public void setId(String id) { |
||||||
|
this.id = id; |
||||||
|
} |
||||||
|
public String getName() { |
||||||
|
return name; |
||||||
|
} |
||||||
|
public void setName(String name) { |
||||||
|
this.name = name; |
||||||
|
} |
||||||
|
public String getLongitude() { |
||||||
|
return longitude; |
||||||
|
} |
||||||
|
public void setLongitude(String longitude) { |
||||||
|
this.longitude = longitude; |
||||||
|
} |
||||||
|
public String getLatitude() { |
||||||
|
return latitude; |
||||||
|
} |
||||||
|
public void setLatitude(String latitude) { |
||||||
|
this.latitude = latitude; |
||||||
|
} |
||||||
|
public String getLeftaddr() { |
||||||
|
return leftaddr; |
||||||
|
} |
||||||
|
public void setLeftaddr(String leftaddr) { |
||||||
|
this.leftaddr = leftaddr; |
||||||
|
} |
||||||
|
public String getRightaddr() { |
||||||
|
return rightaddr; |
||||||
|
} |
||||||
|
public void setRightaddr(String rightaddr) { |
||||||
|
this.rightaddr = rightaddr; |
||||||
|
} |
||||||
|
public String getCreatetime() { |
||||||
|
return createtime; |
||||||
|
} |
||||||
|
public void setCreatetime(String createtime) { |
||||||
|
this.createtime = createtime; |
||||||
|
} |
||||||
|
public String getUsername() { |
||||||
|
return username; |
||||||
|
} |
||||||
|
public void setUsername(String username) { |
||||||
|
this.username = username; |
||||||
|
} |
||||||
|
public String getCity() { |
||||||
|
return city; |
||||||
|
} |
||||||
|
public void setCity(String city) { |
||||||
|
this.city = city; |
||||||
|
} |
||||||
|
public String getRemark() { |
||||||
|
return remark; |
||||||
|
} |
||||||
|
public void setRemark(String remark) { |
||||||
|
this.remark = remark; |
||||||
|
} |
||||||
|
public String getCreateuser() { |
||||||
|
return createuser; |
||||||
|
} |
||||||
|
public void setCreateuser(String createuser) { |
||||||
|
this.createuser = createuser; |
||||||
|
} |
||||||
|
} |
||||||
@ -0,0 +1,53 @@ |
|||||||
|
package com.back.webSocket.bean; |
||||||
|
|
||||||
|
import java.util.List; |
||||||
|
|
||||||
|
public class LoadInfo { |
||||||
|
|
||||||
|
private Integer valid; |
||||||
|
private Integer laneCount; |
||||||
|
private List<Load> loadList; |
||||||
|
|
||||||
|
public Integer getValid() { |
||||||
|
return valid; |
||||||
|
} |
||||||
|
|
||||||
|
public void setValid(Integer valid) { |
||||||
|
this.valid = valid; |
||||||
|
} |
||||||
|
|
||||||
|
public Integer getLaneCount() { |
||||||
|
return laneCount; |
||||||
|
} |
||||||
|
|
||||||
|
public void setLaneCount(Integer laneCount) { |
||||||
|
this.laneCount = laneCount; |
||||||
|
} |
||||||
|
|
||||||
|
public List<Load> getLoadList() { |
||||||
|
return loadList; |
||||||
|
} |
||||||
|
|
||||||
|
public void setLoadList(List<Load> loadList) { |
||||||
|
this.loadList = loadList; |
||||||
|
} |
||||||
|
|
||||||
|
public static class Load { |
||||||
|
private int laneNumber; |
||||||
|
private int laneCongestion; |
||||||
|
|
||||||
|
public int getLaneNumber() { |
||||||
|
return laneNumber; |
||||||
|
} |
||||||
|
public void setLaneNumber(int laneNumber) { |
||||||
|
this.laneNumber = laneNumber; |
||||||
|
} |
||||||
|
public int getLaneCongestion() { |
||||||
|
return laneCongestion; |
||||||
|
} |
||||||
|
public void setLaneCongestion(int laneCongestion) { |
||||||
|
this.laneCongestion = laneCongestion; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
@ -0,0 +1,125 @@ |
|||||||
|
package com.back.webSocket.bean; |
||||||
|
|
||||||
|
import java.util.List; |
||||||
|
|
||||||
|
public class SensorInfo { |
||||||
|
private String comid; |
||||||
|
public int lane; |
||||||
|
public String laneflag; |
||||||
|
public String laneMark; |
||||||
|
// public int laneweight1;
|
||||||
|
// public int laneweight2;
|
||||||
|
// public int laneweight3;
|
||||||
|
// public int laneweight4;
|
||||||
|
// public int laneweight5;
|
||||||
|
// public int laneweight6;
|
||||||
|
// public int laneweight7;
|
||||||
|
// public int laneweight8;
|
||||||
|
public int lanelength; |
||||||
|
public int line; |
||||||
|
|
||||||
|
public List<LaneWeight> laneList; |
||||||
|
|
||||||
|
public static class LaneWeight { |
||||||
|
private float laneweight; |
||||||
|
|
||||||
|
public float getLaneweight() { |
||||||
|
return laneweight; |
||||||
|
} |
||||||
|
|
||||||
|
public void setLaneweight(float laneweight) { |
||||||
|
this.laneweight = laneweight; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
public String getComid() { |
||||||
|
return comid; |
||||||
|
} |
||||||
|
public void setComid(String comid) { |
||||||
|
this.comid = comid; |
||||||
|
} |
||||||
|
public int getLane() { |
||||||
|
return lane; |
||||||
|
} |
||||||
|
public void setLane(int lane) { |
||||||
|
this.lane = lane; |
||||||
|
} |
||||||
|
public String getLaneflag() { |
||||||
|
return laneflag; |
||||||
|
} |
||||||
|
public void setLaneflag(String laneflag) { |
||||||
|
this.laneflag = laneflag; |
||||||
|
} |
||||||
|
// public int getLaneweight1() {
|
||||||
|
// return laneweight1;
|
||||||
|
// }
|
||||||
|
// public void setLaneweight1(int laneweight1) {
|
||||||
|
// this.laneweight1 = laneweight1;
|
||||||
|
// }
|
||||||
|
// public int getLaneweight2() {
|
||||||
|
// return laneweight2;
|
||||||
|
// }
|
||||||
|
// public void setLaneweight2(int laneweight2) {
|
||||||
|
// this.laneweight2 = laneweight2;
|
||||||
|
// }
|
||||||
|
// public int getLaneweight3() {
|
||||||
|
// return laneweight3;
|
||||||
|
// }
|
||||||
|
// public void setLaneweight3(int laneweight3) {
|
||||||
|
// this.laneweight3 = laneweight3;
|
||||||
|
// }
|
||||||
|
// public int getLaneweight4() {
|
||||||
|
// return laneweight4;
|
||||||
|
// }
|
||||||
|
// public void setLaneweight4(int laneweight4) {
|
||||||
|
// this.laneweight4 = laneweight4;
|
||||||
|
// }
|
||||||
|
// public int getLaneweight5() {
|
||||||
|
// return laneweight5;
|
||||||
|
// }
|
||||||
|
// public void setLaneweight5(int laneweight5) {
|
||||||
|
// this.laneweight5 = laneweight5;
|
||||||
|
// }
|
||||||
|
// public int getLaneweight6() {
|
||||||
|
// return laneweight6;
|
||||||
|
// }
|
||||||
|
// public void setLaneweight6(int laneweight6) {
|
||||||
|
// this.laneweight6 = laneweight6;
|
||||||
|
// }
|
||||||
|
// public int getLaneweight7() {
|
||||||
|
// return laneweight7;
|
||||||
|
// }
|
||||||
|
// public void setLaneweight7(int laneweight7) {
|
||||||
|
// this.laneweight7 = laneweight7;
|
||||||
|
// }
|
||||||
|
// public int getLaneweight8() {
|
||||||
|
// return laneweight8;
|
||||||
|
// }
|
||||||
|
// public void setLaneweight8(int laneweight8) {
|
||||||
|
// this.laneweight8 = laneweight8;
|
||||||
|
// }
|
||||||
|
public int getLanelength() { |
||||||
|
return lanelength; |
||||||
|
} |
||||||
|
public void setLanelength(int lanelength) { |
||||||
|
this.lanelength = lanelength; |
||||||
|
} |
||||||
|
public int getLine() { |
||||||
|
return line; |
||||||
|
} |
||||||
|
public void setLine(int line) { |
||||||
|
this.line = line; |
||||||
|
} |
||||||
|
public String getLaneMark() { |
||||||
|
return laneMark; |
||||||
|
} |
||||||
|
public void setLaneMark(String laneMark) { |
||||||
|
this.laneMark = laneMark; |
||||||
|
} |
||||||
|
public List<LaneWeight> getLaneList() { |
||||||
|
return laneList; |
||||||
|
} |
||||||
|
public void setLaneList(List<LaneWeight> laneList) { |
||||||
|
this.laneList = laneList; |
||||||
|
} |
||||||
|
} |
||||||
@ -0,0 +1,89 @@ |
|||||||
|
package com.back.webSocket.bean; |
||||||
|
|
||||||
|
import java.math.BigDecimal; |
||||||
|
import java.util.List; |
||||||
|
|
||||||
|
public class TargetInfo { |
||||||
|
|
||||||
|
private Integer valid; |
||||||
|
private int targetCount; |
||||||
|
private List<Target> targetList; |
||||||
|
|
||||||
|
public Integer getValid() { |
||||||
|
return valid; |
||||||
|
} |
||||||
|
|
||||||
|
public void setValid(Integer valid) { |
||||||
|
this.valid = valid; |
||||||
|
} |
||||||
|
|
||||||
|
public int getTargetCount() { |
||||||
|
return targetCount; |
||||||
|
} |
||||||
|
|
||||||
|
public void setTargetCount(int targetCount) { |
||||||
|
this.targetCount = targetCount; |
||||||
|
} |
||||||
|
|
||||||
|
public List<Target> getTargetList() { |
||||||
|
return targetList; |
||||||
|
} |
||||||
|
|
||||||
|
public void setTargetList(List<Target> targetList) { |
||||||
|
this.targetList = targetList; |
||||||
|
} |
||||||
|
|
||||||
|
public static class Target { |
||||||
|
private int targetNum; |
||||||
|
private int targetType; |
||||||
|
private int laneNum; |
||||||
|
private BigDecimal xDistance; |
||||||
|
private BigDecimal yDistance; |
||||||
|
private BigDecimal xFlow; |
||||||
|
private BigDecimal yFlow; |
||||||
|
|
||||||
|
public BigDecimal getxDistance() { |
||||||
|
return xDistance; |
||||||
|
} |
||||||
|
public void setxDistance(BigDecimal xDistance) { |
||||||
|
this.xDistance = xDistance; |
||||||
|
} |
||||||
|
public BigDecimal getyDistance() { |
||||||
|
return yDistance; |
||||||
|
} |
||||||
|
public void setyDistance(BigDecimal yDistance) { |
||||||
|
this.yDistance = yDistance; |
||||||
|
} |
||||||
|
public BigDecimal getxFlow() { |
||||||
|
return xFlow; |
||||||
|
} |
||||||
|
public void setxFlow(BigDecimal xFlow) { |
||||||
|
this.xFlow = xFlow; |
||||||
|
} |
||||||
|
public BigDecimal getyFlow() { |
||||||
|
return yFlow; |
||||||
|
} |
||||||
|
public void setyFlow(BigDecimal yFlow) { |
||||||
|
this.yFlow = yFlow; |
||||||
|
} |
||||||
|
public int getTargetNum() { |
||||||
|
return targetNum; |
||||||
|
} |
||||||
|
public void setTargetNum(int targetNum) { |
||||||
|
this.targetNum = targetNum; |
||||||
|
} |
||||||
|
public int getTargetType() { |
||||||
|
return targetType; |
||||||
|
} |
||||||
|
public void setTargetType(int targetType) { |
||||||
|
this.targetType = targetType; |
||||||
|
} |
||||||
|
public int getLaneNum() { |
||||||
|
return laneNum; |
||||||
|
} |
||||||
|
public void setLaneNum(int laneNum) { |
||||||
|
this.laneNum = laneNum; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
@ -0,0 +1,5 @@ |
|||||||
|
Manifest-Version: 1.0 |
||||||
|
Built-By: Administrator |
||||||
|
Build-Jdk: 1.8.0_351 |
||||||
|
Created-By: Maven Integration for Eclipse |
||||||
|
|
||||||
@ -0,0 +1,7 @@ |
|||||||
|
#Generated by Maven Integration for Eclipse |
||||||
|
#Wed Jun 05 23:14:39 CST 2024 |
||||||
|
version=0.0.1-SNAPSHOT |
||||||
|
groupId=com.back |
||||||
|
m2e.projectName=2-carCheckNew |
||||||
|
m2e.projectLocation=D\:\\fyj_20240312\\processor\\carCheckNew |
||||||
|
artifactId=carCheckNew |
||||||
@ -0,0 +1,49 @@ |
|||||||
|
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> |
||||||
|
<modelVersion>4.0.0</modelVersion> |
||||||
|
<parent> |
||||||
|
<groupId>com.back</groupId> |
||||||
|
<artifactId>processor</artifactId> |
||||||
|
<version>0.0.1-SNAPSHOT</version> |
||||||
|
</parent> |
||||||
|
<artifactId>carCheckNew</artifactId> |
||||||
|
|
||||||
|
<dependencies> |
||||||
|
<dependency> |
||||||
|
<groupId>com.back</groupId> |
||||||
|
<artifactId>common</artifactId> |
||||||
|
<version>0.0.1-SNAPSHOT</version> |
||||||
|
</dependency> |
||||||
|
</dependencies> |
||||||
|
|
||||||
|
|
||||||
|
<build> |
||||||
|
<plugins> |
||||||
|
<plugin> |
||||||
|
<groupId>org.apache.maven.plugins</groupId> |
||||||
|
<artifactId>maven-compiler-plugin</artifactId> |
||||||
|
<version>3.5.1</version> |
||||||
|
<configuration> |
||||||
|
<source>1.8</source> |
||||||
|
<target>1.8</target> |
||||||
|
</configuration> |
||||||
|
</plugin> |
||||||
|
<plugin> |
||||||
|
<groupId>org.springframework.boot</groupId> |
||||||
|
<artifactId>spring-boot-maven-plugin</artifactId> |
||||||
|
<version>2.6.4</version> |
||||||
|
<configuration> |
||||||
|
<!-- springboot main方法入口 --> |
||||||
|
<mainClass>com.back.main.MainProcess</mainClass> |
||||||
|
<layout>ZIP</layout> |
||||||
|
</configuration> |
||||||
|
<executions> |
||||||
|
<execution> |
||||||
|
<goals> |
||||||
|
<goal>repackage</goal><!--可以把依赖的包都打包到生成的Jar包中--> |
||||||
|
</goals> |
||||||
|
</execution> |
||||||
|
</executions> |
||||||
|
</plugin> |
||||||
|
</plugins> |
||||||
|
</build> |
||||||
|
</project> |
||||||
@ -0,0 +1,85 @@ |
|||||||
|
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> |
||||||
|
<modelVersion>4.0.0</modelVersion> |
||||||
|
<parent> |
||||||
|
<groupId>com.back</groupId> |
||||||
|
<artifactId>processor</artifactId> |
||||||
|
<version>0.0.1-SNAPSHOT</version> |
||||||
|
</parent> |
||||||
|
<artifactId>common</artifactId> |
||||||
|
<packaging>jar</packaging> |
||||||
|
|
||||||
|
<dependencies> |
||||||
|
|
||||||
|
<dependency> |
||||||
|
<groupId>org.apache.commons</groupId> |
||||||
|
<artifactId>commons-lang3</artifactId> |
||||||
|
<version>3.8</version> |
||||||
|
</dependency> |
||||||
|
|
||||||
|
<dependency> |
||||||
|
<groupId>com.alibaba</groupId> |
||||||
|
<artifactId>fastjson</artifactId> |
||||||
|
<version>1.2.66</version> |
||||||
|
</dependency> |
||||||
|
|
||||||
|
<dependency> |
||||||
|
<groupId>mysql</groupId> |
||||||
|
<artifactId>mysql-connector-java</artifactId> |
||||||
|
<version>5.1.40</version> |
||||||
|
</dependency> |
||||||
|
|
||||||
|
<dependency> |
||||||
|
<groupId>org.slf4j</groupId> |
||||||
|
<artifactId>slf4j-api</artifactId> |
||||||
|
<version>1.7.25</version> |
||||||
|
</dependency> |
||||||
|
|
||||||
|
|
||||||
|
<dependency> |
||||||
|
<groupId>org.apache.httpcomponents</groupId> |
||||||
|
<artifactId>httpclient</artifactId> |
||||||
|
<version>4.5.6</version> |
||||||
|
</dependency> |
||||||
|
|
||||||
|
<dependency> |
||||||
|
<groupId>com.google.code.gson</groupId> |
||||||
|
<artifactId>gson</artifactId> |
||||||
|
<version>2.8.9</version> |
||||||
|
</dependency> |
||||||
|
|
||||||
|
|
||||||
|
<dependency> |
||||||
|
<groupId>org.bidib.jbidib.org.qbang.rxtx</groupId> |
||||||
|
<artifactId>rxtxcomm</artifactId> |
||||||
|
<version>2.2</version> |
||||||
|
</dependency> |
||||||
|
|
||||||
|
<dependency> |
||||||
|
<groupId>org.scream3r</groupId> |
||||||
|
<artifactId>jssc</artifactId> |
||||||
|
<version>2.8.0</version> |
||||||
|
</dependency> |
||||||
|
|
||||||
|
<dependency> |
||||||
|
<groupId>com.sun.mail</groupId> |
||||||
|
<artifactId>javax.mail</artifactId> |
||||||
|
<version>1.6.2</version> |
||||||
|
</dependency> |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<!--Milo客户端的依赖--> |
||||||
|
<dependency> |
||||||
|
<groupId>org.eclipse.milo</groupId> |
||||||
|
<artifactId>sdk-client</artifactId> |
||||||
|
<version>0.6.3</version> |
||||||
|
</dependency> |
||||||
|
|
||||||
|
<dependency> |
||||||
|
<groupId>org.java-websocket</groupId> |
||||||
|
<artifactId>Java-WebSocket</artifactId> |
||||||
|
<version>1.5.3</version> |
||||||
|
</dependency> |
||||||
|
|
||||||
|
</dependencies> |
||||||
|
</project> |
||||||
@ -0,0 +1,167 @@ |
|||||||
|
package com.back.action; |
||||||
|
|
||||||
|
import com.back.common.Common; |
||||||
|
|
||||||
|
import java.io.File; |
||||||
|
import java.io.FileWriter; |
||||||
|
import java.util.Calendar; |
||||||
|
import java.util.Random; |
||||||
|
|
||||||
|
public class Log { |
||||||
|
|
||||||
|
static int count = 0; |
||||||
|
static long size = 0; |
||||||
|
static String text = "";// 要写入的文本
|
||||||
|
static String filename = "";// 文件名
|
||||||
|
private static String clazzName = new Object() { |
||||||
|
public String getClassName() { |
||||||
|
String clazzName = this.getClass().getName(); |
||||||
|
return clazzName.substring(0, clazzName.lastIndexOf('$')); |
||||||
|
} |
||||||
|
}.getClassName(); |
||||||
|
|
||||||
|
public synchronized static void writelog1(String msg) { |
||||||
|
System.err.println(Common.getDateStr0() + ":" + msg); |
||||||
|
|
||||||
|
File f = null; |
||||||
|
try { |
||||||
|
count = count + 1; |
||||||
|
text = text + Common.getDateStr0() + ":" + msg + "\r\n"; |
||||||
|
|
||||||
|
// 十行写一次
|
||||||
|
if (count == 10) { |
||||||
|
f = new File(".\\Log"); |
||||||
|
if (!f.exists()) { |
||||||
|
f.mkdir();// 创建文件夹
|
||||||
|
} |
||||||
|
|
||||||
|
if (filename.equals("")) { |
||||||
|
filename = ".\\Log\\" + Common.getDateStr1() + getRandom(5) + ".log"; |
||||||
|
} |
||||||
|
f = new File(filename); |
||||||
|
if (!f.exists()) { |
||||||
|
f.createNewFile();// 不存在则创建
|
||||||
|
f = new File(filename);// 重新实例化
|
||||||
|
} else { |
||||||
|
size = f.length(); |
||||||
|
if (size >= 1024000) {// 创建新文件
|
||||||
|
filename = ".\\Log\\" + Common.getDateStr1() + getRandom(5) + ".log"; |
||||||
|
f = new File(filename); |
||||||
|
if (!f.exists()) { |
||||||
|
f.createNewFile();// 不存在则创建
|
||||||
|
f = new File(filename);// 重新实例化
|
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
FileWriter fw = new FileWriter(f, true); |
||||||
|
fw.write(text); |
||||||
|
fw.flush(); |
||||||
|
fw.close(); |
||||||
|
fw = null; |
||||||
|
count = 0; |
||||||
|
text = ""; |
||||||
|
} |
||||||
|
} catch (Exception e) { |
||||||
|
e.printStackTrace(); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
public synchronized static void writelog(String classObject, String msg) { |
||||||
|
System.err.println(Common.getDateStr0() + "[" + classObject + "]:" + msg); |
||||||
|
|
||||||
|
File f = null; |
||||||
|
try { |
||||||
|
count = count + 1; |
||||||
|
text = text + Common.getDateStr0() + ":[" + classObject + "]" + msg + "\r\n"; |
||||||
|
|
||||||
|
// 十行写一次
|
||||||
|
if (count == 300) { |
||||||
|
f = new File(".\\Log"); |
||||||
|
if (!f.exists()) { |
||||||
|
f.mkdir();// 创建文件夹
|
||||||
|
} |
||||||
|
|
||||||
|
if (filename.equals("")) { |
||||||
|
filename = ".\\Log\\" + Common.getDateStr1() + getRandom(5) + ".log"; |
||||||
|
} |
||||||
|
f = new File(filename); |
||||||
|
if (!f.exists()) { |
||||||
|
f.createNewFile();// 不存在则创建
|
||||||
|
f = new File(filename);// 重新实例化
|
||||||
|
} else { |
||||||
|
size = f.length(); |
||||||
|
if (size >= 1024000) {// 创建新文件
|
||||||
|
filename = ".\\Log\\" + Common.getDateStr1() + getRandom(5) + ".log"; |
||||||
|
f = new File(filename); |
||||||
|
if (!f.exists()) { |
||||||
|
f.createNewFile();// 不存在则创建
|
||||||
|
f = new File(filename);// 重新实例化
|
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
FileWriter fw = new FileWriter(f, true); |
||||||
|
fw.write(text); |
||||||
|
fw.flush(); |
||||||
|
fw.close(); |
||||||
|
fw = null; |
||||||
|
count = 0; |
||||||
|
text = ""; |
||||||
|
} |
||||||
|
} catch (Exception e) { |
||||||
|
e.printStackTrace(); |
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 返回一个随机数 |
||||||
|
* |
||||||
|
* @param i |
||||||
|
* 随机数长度 |
||||||
|
*/ |
||||||
|
public static String getRandom(int i) { |
||||||
|
Random rd = new Random(); |
||||||
|
if (i == 0) |
||||||
|
return ""; |
||||||
|
String result = ""; |
||||||
|
for (int k = 0; k < i; k++) { |
||||||
|
result = result + rd.nextInt(9); |
||||||
|
} |
||||||
|
return result; |
||||||
|
} |
||||||
|
|
||||||
|
/** 删除一个月之前的日志文件 */ |
||||||
|
public static boolean deleteFile() { |
||||||
|
File file = new File(".\\Log"); |
||||||
|
String[] filelist = file.list(); |
||||||
|
try { |
||||||
|
for (int i = 0; i < filelist.length; i++) { |
||||||
|
File delfile = new File(".\\Log\\" + filelist[i]); |
||||||
|
if (!delfile.isDirectory()) { |
||||||
|
|
||||||
|
int year = Integer.parseInt(delfile.getName().substring(0, 4)); |
||||||
|
int month = Integer.parseInt(delfile.getName().substring(4, 6)) - 1; |
||||||
|
int day = Integer.parseInt(delfile.getName().substring(6, 8)); |
||||||
|
|
||||||
|
Calendar calendar1 = Calendar.getInstance(); |
||||||
|
calendar1.set(year, month, day); |
||||||
|
|
||||||
|
Calendar calendar0 = Calendar.getInstance(); |
||||||
|
calendar0.add(Calendar.MONTH, -1); |
||||||
|
|
||||||
|
if (calendar1.before(calendar0)) { |
||||||
|
if (delfile.delete()) { |
||||||
|
writelog(Log.clazzName, Thread.currentThread().getStackTrace()[1].getMethodName() |
||||||
|
+ "->LogFile:" + delfile.getName()); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
return true; |
||||||
|
} catch (Exception e) { |
||||||
|
return false; |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
@ -0,0 +1,689 @@ |
|||||||
|
package com.back.common; |
||||||
|
|
||||||
|
import java.io.UnsupportedEncodingException; |
||||||
|
import java.text.ParseException; |
||||||
|
import java.text.SimpleDateFormat; |
||||||
|
import java.util.Calendar; |
||||||
|
import java.util.Date; |
||||||
|
import java.util.TimeZone; |
||||||
|
import java.util.regex.Matcher; |
||||||
|
import java.util.regex.Pattern; |
||||||
|
|
||||||
|
/** |
||||||
|
* 通用函数类 |
||||||
|
*/ |
||||||
|
public class Common { |
||||||
|
|
||||||
|
/** |
||||||
|
* Ascii码字符串转成16进制字符串 主要用于Lon16的码命令,从 |
||||||
|
* |
||||||
|
* @param msg |
||||||
|
* @return |
||||||
|
*/ |
||||||
|
public static String Ascii2Hex(String msg) { |
||||||
|
String resultString = ""; |
||||||
|
for (int i = 0; i < msg.length(); i++) { |
||||||
|
int num = msg.charAt(i); |
||||||
|
String temp = Integer.toHexString(num).toUpperCase(); |
||||||
|
if (temp.length() == 1) |
||||||
|
resultString = resultString + "0" + temp; |
||||||
|
else |
||||||
|
resultString = resultString + temp; |
||||||
|
} |
||||||
|
|
||||||
|
return resultString; |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* @功能: BCD码转为10进制串(阿拉伯数据) |
||||||
|
* @参数: BCD码 |
||||||
|
* @结果: 10进制串 |
||||||
|
*/ |
||||||
|
public static String bcd2Str(byte[] bytes) { |
||||||
|
StringBuffer temp = new StringBuffer(bytes.length * 2); |
||||||
|
for (int i = 0; i < bytes.length; i++) { |
||||||
|
temp.append(dec2Hex(((bytes[i] & 0xf0) >> 4), 1)); |
||||||
|
temp.append(dec2Hex(((bytes[i] & 0x0f)), 1)); |
||||||
|
} |
||||||
|
return temp.toString().substring(0, 1).equalsIgnoreCase("0") ? temp.toString().substring(1) |
||||||
|
: temp.toString(); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* @功能: 10进制串转为BCD码 |
||||||
|
* @参数: 10进制串 |
||||||
|
* @结果: BCD码 |
||||||
|
*/ |
||||||
|
public static byte[] str2Bcd(String asc) { |
||||||
|
int len = asc.length(); |
||||||
|
int mod = len % 2; |
||||||
|
if (mod != 0) { |
||||||
|
asc = "0" + asc; |
||||||
|
len = asc.length(); |
||||||
|
} |
||||||
|
byte abt[] = new byte[len]; |
||||||
|
if (len >= 2) { |
||||||
|
len = len / 2; |
||||||
|
} |
||||||
|
byte bbt[] = new byte[len]; |
||||||
|
abt = asc.getBytes(); |
||||||
|
int j, k; |
||||||
|
for (int p = 0; p < asc.length() / 2; p++) { |
||||||
|
if ((abt[2 * p] >= '0') && (abt[2 * p] <= '9')) { |
||||||
|
j = abt[2 * p] - '0'; |
||||||
|
} else if ((abt[2 * p] >= 'a') && (abt[2 * p] <= 'z')) { |
||||||
|
j = abt[2 * p] - 'a' + 0x0a; |
||||||
|
} else { |
||||||
|
j = abt[2 * p] - 'A' + 0x0a; |
||||||
|
} |
||||||
|
if ((abt[2 * p + 1] >= '0') && (abt[2 * p + 1] <= '9')) { |
||||||
|
k = abt[2 * p + 1] - '0'; |
||||||
|
} else if ((abt[2 * p + 1] >= 'a') && (abt[2 * p + 1] <= 'z')) { |
||||||
|
k = abt[2 * p + 1] - 'a' + 0x0a; |
||||||
|
} else { |
||||||
|
k = abt[2 * p + 1] - 'A' + 0x0a; |
||||||
|
} |
||||||
|
int a = (j << 4) + k; |
||||||
|
byte b = (byte) a; |
||||||
|
bbt[p] = b; |
||||||
|
} |
||||||
|
return bbt; |
||||||
|
} |
||||||
|
|
||||||
|
/** 正则表达式判断是否为数字 */ |
||||||
|
public static boolean isNumeric(String str) { |
||||||
|
Pattern pattern = Pattern.compile("[0-9]*"); |
||||||
|
Matcher isNum = pattern.matcher(str); |
||||||
|
if (!isNum.matches()) { |
||||||
|
return false; |
||||||
|
} |
||||||
|
return true; |
||||||
|
} |
||||||
|
|
||||||
|
/** 16进制转10进制 */ |
||||||
|
public static int hextoint(String hex) { |
||||||
|
int result = Integer.parseInt(hex, 16); |
||||||
|
return result; |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 10进制转16进制 |
||||||
|
* |
||||||
|
* @param integer |
||||||
|
* @return |
||||||
|
*/ |
||||||
|
public static String inttohex(int integer) { |
||||||
|
String result = Integer.toHexString(integer).toUpperCase(); |
||||||
|
return result; |
||||||
|
} |
||||||
|
|
||||||
|
/** 16进制转2进制 */ |
||||||
|
public static String hextobinary(String hex) { |
||||||
|
int temp = Integer.parseInt(hex, 16); |
||||||
|
String binary = Integer.toBinaryString(temp); |
||||||
|
binary = right(binary, 8); |
||||||
|
return binary; |
||||||
|
} |
||||||
|
|
||||||
|
/** 2进制转16进制 */ |
||||||
|
public static String binarytohex(String binary) { |
||||||
|
int temp = binarytoint(binary); |
||||||
|
return Integer.toHexString(temp); |
||||||
|
} |
||||||
|
|
||||||
|
/** 2进制转10进制 */ |
||||||
|
public static int binarytoint(String binary) { |
||||||
|
return Integer.valueOf(binary, 2); |
||||||
|
} |
||||||
|
|
||||||
|
/***/ |
||||||
|
public static String inttobinary(int integer) { |
||||||
|
return Integer.toBinaryString(integer); |
||||||
|
} |
||||||
|
|
||||||
|
/** 从右边取指定长度字符 */ |
||||||
|
public static String right(String input, int count) { |
||||||
|
count = (count > input.length()) ? input.length() : count; |
||||||
|
return input.substring(input.length() - count, input.length()); |
||||||
|
} |
||||||
|
|
||||||
|
/** 从左边取指定长度字符 */ |
||||||
|
public static String left(String input, int count) { |
||||||
|
count = (count > input.length()) ? input.length() : count; |
||||||
|
return input.substring(0, count); |
||||||
|
} |
||||||
|
|
||||||
|
/** 字节数组转换成16进制字符串 */ |
||||||
|
public static String GetHexStr(byte[] bytes, int num) { |
||||||
|
String temp = ""; |
||||||
|
StringBuilder sb = new StringBuilder(); |
||||||
|
for (int i = 0; i < num; i++) { |
||||||
|
temp = (Integer.toHexString(bytes[i] & 0XFF)); |
||||||
|
if (temp.length() == 1) { |
||||||
|
temp = "0" + temp; |
||||||
|
} |
||||||
|
sb.append(temp + "-"); |
||||||
|
} |
||||||
|
return sb.toString().toUpperCase(); |
||||||
|
} |
||||||
|
|
||||||
|
/** 字节数组转换成字符串 */ |
||||||
|
public static String GetAsciiStr(byte[] bytes, int num) { |
||||||
|
char c; |
||||||
|
StringBuilder sb = new StringBuilder(); |
||||||
|
for (int i = 0; i < num; i++) { |
||||||
|
c = (char) bytes[i]; |
||||||
|
sb.append(c); |
||||||
|
} |
||||||
|
return sb.toString(); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 添加小数点 |
||||||
|
* |
||||||
|
* @param input |
||||||
|
* @param intNum |
||||||
|
* 整数位数 |
||||||
|
* @return |
||||||
|
*/ |
||||||
|
public static String AddDecimalPoint(String input, int intNum) { |
||||||
|
return input.substring(0, intNum) + "." + input.substring(intNum); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 16进制字符串转成Asc码字符串 |
||||||
|
* |
||||||
|
* @param input |
||||||
|
* @return |
||||||
|
*/ |
||||||
|
public static String HexStr2AsciiStr(String input) { |
||||||
|
char c; |
||||||
|
StringBuilder sb = new StringBuilder(); |
||||||
|
int num = input.length() / 2; |
||||||
|
for (int i = 0; i < num; i++) { |
||||||
|
String str = input.substring(2 * i, (i + 1) * 2); |
||||||
|
c = (char) hextoint(str); |
||||||
|
sb.append(c); |
||||||
|
} |
||||||
|
return sb.toString(); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 10进制转16进制 |
||||||
|
* |
||||||
|
* @param dec |
||||||
|
* 要转换的数值 |
||||||
|
* @param len |
||||||
|
* 16进制的长度 |
||||||
|
* @return |
||||||
|
*/ |
||||||
|
public static String dec2Hex(int dec, int len) { |
||||||
|
String tempString = Integer.toHexString(dec).toUpperCase(); |
||||||
|
while (tempString.length() < len) { |
||||||
|
tempString = "0" + tempString; |
||||||
|
} |
||||||
|
return tempString.trim(); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 10进制转16进制 |
||||||
|
* |
||||||
|
* @param dec |
||||||
|
* 要转换的数值 |
||||||
|
* @param len |
||||||
|
* 16进制的长度 |
||||||
|
* @return |
||||||
|
*/ |
||||||
|
public static String dec2Hex(Long dec, int len) { |
||||||
|
String tempString = Long.toHexString(dec).toUpperCase(); |
||||||
|
while (tempString.length() < len) { |
||||||
|
tempString = "0" + tempString; |
||||||
|
} |
||||||
|
return tempString.trim(); |
||||||
|
} |
||||||
|
|
||||||
|
/** byte转换成十六进制字符串 */ |
||||||
|
public static String bytetohex(byte b) { |
||||||
|
String stmp = (Integer.toHexString(b & 0XFF)); |
||||||
|
System.out.println(stmp); |
||||||
|
if (stmp.length() == 1) |
||||||
|
stmp = "0" + stmp; |
||||||
|
return stmp.toUpperCase(); |
||||||
|
} |
||||||
|
|
||||||
|
/** 按长度2分割字符串,以"-"连接 */ |
||||||
|
public static String str2split(String str) { |
||||||
|
char[] array = str.toCharArray(); |
||||||
|
str = ""; |
||||||
|
for (int i = 0; i < array.length / 2; i++) { |
||||||
|
str += String.valueOf(array[i * 2]) + String.valueOf(array[i * 2 + 1]) + "-"; |
||||||
|
} |
||||||
|
return str; |
||||||
|
} |
||||||
|
|
||||||
|
/** 发短信息:奇偶位互换 */ |
||||||
|
public static String ParityChange(String msg) { |
||||||
|
StringBuffer buf = new StringBuffer(); |
||||||
|
char[] chars = msg.toCharArray(); |
||||||
|
for (int i = 1; i < chars.length; i += 2) { |
||||||
|
buf.append(chars[i]); |
||||||
|
buf.append(chars[i - 1]); |
||||||
|
} |
||||||
|
return buf.toString(); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* PDU格式短消息中心号码编码 |
||||||
|
* |
||||||
|
* @param center |
||||||
|
* 短消息中心号码 |
||||||
|
* @return PDU短信中心格式编码 |
||||||
|
*/ |
||||||
|
public static String PDUCenter(String center) { |
||||||
|
int intLen = center.length(); |
||||||
|
if (intLen % 2 == 1) {// 为奇数则加F
|
||||||
|
center += "F"; |
||||||
|
intLen++; |
||||||
|
} |
||||||
|
center = ParityChange(center); // 奇数位和偶数位交换
|
||||||
|
center = "91" + center;// 短信中心号码前加91
|
||||||
|
intLen = center.length() / 2;// 短信中心号码长度除2,结果格式化成2位的16进制字符串
|
||||||
|
String strLen = right("00" + inttohex(intLen), 2); |
||||||
|
center = strLen + center; |
||||||
|
|
||||||
|
return center; |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* PDU格式接收手机号码加信息内容编码 |
||||||
|
* |
||||||
|
* @param phone |
||||||
|
* 接收手机号码 |
||||||
|
* @param msg |
||||||
|
* 短信内容 |
||||||
|
* @return PDU格式短信编码 |
||||||
|
*/ |
||||||
|
public static String PDUCode(String phone, String msg) { |
||||||
|
|
||||||
|
int intLen = phone.length(); |
||||||
|
if (intLen % 2 == 1) {// 为奇数则加F
|
||||||
|
phone += "F"; |
||||||
|
intLen++; |
||||||
|
} |
||||||
|
phone = ParityChange(phone); // 奇数位和偶数位交换
|
||||||
|
|
||||||
|
String code = ""; |
||||||
|
byte[] bytes = null; |
||||||
|
try { |
||||||
|
bytes = msg.getBytes("UTF-16"); |
||||||
|
} catch (UnsupportedEncodingException e) { |
||||||
|
e.printStackTrace(); |
||||||
|
} |
||||||
|
|
||||||
|
for (int i = 2; i < bytes.length; i++) { |
||||||
|
code += byte2Hex(bytes[i]); |
||||||
|
} |
||||||
|
|
||||||
|
intLen = code.length() / 2; |
||||||
|
String strLen = right("00" + inttohex(intLen), 2); |
||||||
|
code = strLen + code; |
||||||
|
|
||||||
|
phone = "11000D91" + phone;// 前面加11000D91
|
||||||
|
code = phone + "000800" + code; |
||||||
|
return code; |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 在字符串左边添加字符串 |
||||||
|
* |
||||||
|
* @param sourceStr |
||||||
|
* 源字符串 |
||||||
|
* @param lenStr |
||||||
|
* 目标字符串的长度 |
||||||
|
* @param filler |
||||||
|
* 要填充的字符串 |
||||||
|
* @return |
||||||
|
*/ |
||||||
|
public static String lPad(String sourceStr, int lenStr, String filler) { |
||||||
|
sourceStr = sourceStr.trim(); |
||||||
|
int m = sourceStr.length(); |
||||||
|
m = lenStr - m; |
||||||
|
if (m < 1) { |
||||||
|
return sourceStr; |
||||||
|
} |
||||||
|
|
||||||
|
if ((m % (filler.length())) == 0) { |
||||||
|
m = m / (filler.length()); |
||||||
|
} else { |
||||||
|
m = m / (filler.length()); |
||||||
|
m++; |
||||||
|
} |
||||||
|
|
||||||
|
for (int i = 0; i < m; i++) { |
||||||
|
sourceStr = filler + sourceStr; |
||||||
|
} |
||||||
|
|
||||||
|
return sourceStr; |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* byte转u25442 为u21313 六u-28709 制 |
||||||
|
* |
||||||
|
* @param b |
||||||
|
* byte |
||||||
|
* @return String |
||||||
|
*/ |
||||||
|
public static String byte2Hex(byte b) { |
||||||
|
return ("" + "0123456789ABCDEF".charAt(0xf & b >> 4) + "0123456789ABCDEF".charAt(b & 0xf)); |
||||||
|
} |
||||||
|
|
||||||
|
/** 获取当前时间 */ |
||||||
|
public static Date getcurdate() { |
||||||
|
Date curdate = new Date(); |
||||||
|
return curdate; |
||||||
|
} |
||||||
|
/** |
||||||
|
* 获取时区 |
||||||
|
* @return |
||||||
|
*/ |
||||||
|
public static TimeZone getTimeZone() |
||||||
|
{ |
||||||
|
//指定东8区
|
||||||
|
//return TimeZone.getTimeZone("GMT+8");
|
||||||
|
|
||||||
|
//获取系统当前默认时区
|
||||||
|
return TimeZone.getDefault(); |
||||||
|
} |
||||||
|
/** 返回时间字符串:yyyy */ |
||||||
|
public static String getYear() { |
||||||
|
SimpleDateFormat format = new SimpleDateFormat("yyyy"); |
||||||
|
format.setTimeZone(getTimeZone()); |
||||||
|
Date currDate = new Date(); |
||||||
|
return format.format(currDate); |
||||||
|
} |
||||||
|
|
||||||
|
/** 返回时间字符串:mm */ |
||||||
|
public static String getMinute() { |
||||||
|
SimpleDateFormat format = new SimpleDateFormat("mm"); |
||||||
|
format.setTimeZone(getTimeZone()); |
||||||
|
Date currDate = new Date(); |
||||||
|
return format.format(currDate); |
||||||
|
} |
||||||
|
|
||||||
|
/** 返回时间字符串:mm */ |
||||||
|
public static String getMinute(Date currDate) { |
||||||
|
SimpleDateFormat format = new SimpleDateFormat("mm"); |
||||||
|
format.setTimeZone(getTimeZone()); |
||||||
|
return format.format(currDate); |
||||||
|
} |
||||||
|
|
||||||
|
/** 返回时间字符串:yyyy-MM-dd HH:mm:ss */ |
||||||
|
public static String getDateStr0() { |
||||||
|
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); |
||||||
|
format.setTimeZone(getTimeZone()); |
||||||
|
Date currDate = new Date(); |
||||||
|
return format.format(currDate); |
||||||
|
} |
||||||
|
|
||||||
|
/** 返回当前时间字符串:yyyy-MM-dd HH:mm:ss */ |
||||||
|
|
||||||
|
public static String getYesterdayStr0() { |
||||||
|
String datestr; |
||||||
|
Date currDate = new Date(); |
||||||
|
Calendar calendar = Calendar.getInstance(); |
||||||
|
calendar.setTime(currDate); |
||||||
|
calendar.add(calendar.DATE, -1); |
||||||
|
currDate = calendar.getTime(); |
||||||
|
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); |
||||||
|
format.setTimeZone(getTimeZone()); |
||||||
|
// Date currDate = new Date();
|
||||||
|
return format.format(currDate); |
||||||
|
} |
||||||
|
|
||||||
|
/** 返回时间字符串:yyyyMMddHHmmssSSS */ |
||||||
|
public static String getDateStr1() { |
||||||
|
String datestr; |
||||||
|
Date currDate = new Date(); |
||||||
|
SimpleDateFormat format = new SimpleDateFormat("yyyyMMddHHmmssSSS"); |
||||||
|
format.setTimeZone(getTimeZone()); |
||||||
|
datestr = format.format(currDate); |
||||||
|
return datestr; |
||||||
|
} |
||||||
|
|
||||||
|
/** 返回时间字符串:yyyy-MM-dd HH:mm:ss SSS */ |
||||||
|
public static String getDateStr2() { |
||||||
|
String datestr; |
||||||
|
Date currDate = new Date(); |
||||||
|
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss SSS"); |
||||||
|
format.setTimeZone(getTimeZone()); |
||||||
|
datestr = format.format(currDate); |
||||||
|
return datestr; |
||||||
|
} |
||||||
|
|
||||||
|
/** 返回时间字符串:yyyy-MM-dd-HH-mm-ss */ |
||||||
|
public static String getDateStr3() { |
||||||
|
String datestr; |
||||||
|
Date currDate = new Date(); |
||||||
|
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd-HH-mm-ss"); |
||||||
|
format.setTimeZone(getTimeZone()); |
||||||
|
datestr = format.format(currDate); |
||||||
|
return datestr; |
||||||
|
} |
||||||
|
|
||||||
|
/** 返回时间字符串:HH:mm */ |
||||||
|
public static String getDateStr4() { |
||||||
|
SimpleDateFormat format = new SimpleDateFormat("HH:mm"); |
||||||
|
format.setTimeZone(getTimeZone()); |
||||||
|
Date currDate = new Date(); |
||||||
|
return format.format(currDate); |
||||||
|
} |
||||||
|
|
||||||
|
/** 返回时间字符串:ddMMyy */ |
||||||
|
public static String getDateStr5() { |
||||||
|
SimpleDateFormat format = new SimpleDateFormat("ddMMyy"); |
||||||
|
format.setTimeZone(getTimeZone()); |
||||||
|
Date currDate = new Date(); |
||||||
|
return format.format(currDate); |
||||||
|
} |
||||||
|
|
||||||
|
/** 返回时间字符串:mmHHddMMyy,分时日月年(Td_c) */ |
||||||
|
public static String getDateStr6() { |
||||||
|
SimpleDateFormat format = new SimpleDateFormat("mmHHddMMyy"); |
||||||
|
format.setTimeZone(getTimeZone()); |
||||||
|
Date currDate = new Date(); |
||||||
|
return format.format(currDate); |
||||||
|
} |
||||||
|
|
||||||
|
/** 返回时间字符串:yyyy-MM-dd */ |
||||||
|
public static String getDateStr7() { |
||||||
|
String datestr; |
||||||
|
Date currDate = new Date(); |
||||||
|
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd"); |
||||||
|
format.setTimeZone(getTimeZone()); |
||||||
|
datestr = format.format(currDate); |
||||||
|
return datestr; |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 返回昨天时间字符串 |
||||||
|
* |
||||||
|
* @return返回昨天时间字符串:yyyy-MM-dd |
||||||
|
*/ |
||||||
|
public static String getYesterdayStr7() { |
||||||
|
String datestr; |
||||||
|
Date currDate = new Date(); |
||||||
|
Calendar calendar = Calendar.getInstance(); |
||||||
|
calendar.setTime(currDate); |
||||||
|
calendar.add(calendar.DATE, -1); |
||||||
|
currDate = calendar.getTime(); |
||||||
|
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd"); |
||||||
|
format.setTimeZone(getTimeZone()); |
||||||
|
datestr = format.format(currDate); |
||||||
|
return datestr; |
||||||
|
} |
||||||
|
|
||||||
|
/** 数据内低字节在前,高字节在后 */ |
||||||
|
public static String InterChange(String value) { |
||||||
|
StringBuffer buf = new StringBuffer(); |
||||||
|
char[] chars = value.toCharArray(); |
||||||
|
for (int i = chars.length; i > 1; i -= 2) { |
||||||
|
buf.append(chars[i - 1]); |
||||||
|
buf.append(chars[i]); |
||||||
|
} |
||||||
|
return buf.toString(); |
||||||
|
} |
||||||
|
|
||||||
|
/** * 格式化时间字符串(ssmmHHddMMyyyy),返回Date类型 */ |
||||||
|
public static Date formattime0(String time) { |
||||||
|
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); |
||||||
|
|
||||||
|
Date dt = new Date(); |
||||||
|
try { |
||||||
|
dt = format.parse(time); |
||||||
|
} catch (ParseException e) { |
||||||
|
e.printStackTrace(); |
||||||
|
} |
||||||
|
return dt; |
||||||
|
} |
||||||
|
|
||||||
|
/** * 格式化时间字符串(ssmmHHddMMyyyy),返回String类型 */ |
||||||
|
public static String formattime1(String time) { |
||||||
|
SimpleDateFormat format = new SimpleDateFormat("ssmmHHddMMyyyy"); |
||||||
|
try { |
||||||
|
Date dt = format.parse(time); |
||||||
|
format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); |
||||||
|
return format.format(dt); |
||||||
|
} catch (ParseException e) { |
||||||
|
e.printStackTrace(); |
||||||
|
} |
||||||
|
return ""; |
||||||
|
} |
||||||
|
|
||||||
|
/** * 格式化时间字符串(mmHHddMMyy),返回String类型 */ |
||||||
|
public static String formattime2(String time) { |
||||||
|
SimpleDateFormat format = new SimpleDateFormat("mmHHddMMyy"); |
||||||
|
try { |
||||||
|
Date dt = format.parse(time); |
||||||
|
format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); |
||||||
|
return format.format(dt); |
||||||
|
} catch (ParseException e) { |
||||||
|
e.printStackTrace(); |
||||||
|
} |
||||||
|
return ""; |
||||||
|
} |
||||||
|
|
||||||
|
/** * 格式化时间字符串(yyyy-MM-dd HH:mm:ss),返回Date类型 */ |
||||||
|
public static Date formattime3(String time) { |
||||||
|
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); |
||||||
|
Date dt = new Date(); |
||||||
|
try { |
||||||
|
dt = format.parse(time); |
||||||
|
} catch (ParseException e) { |
||||||
|
e.printStackTrace(); |
||||||
|
} |
||||||
|
return dt; |
||||||
|
} |
||||||
|
|
||||||
|
/** 时间字符串加指定时间(分钟) */ |
||||||
|
public static String timeadd(String time, int min) { |
||||||
|
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); |
||||||
|
Date dt = formattime0(time); |
||||||
|
long afterTime = (dt.getTime() / 1000) + 60 * min; |
||||||
|
dt.setTime(afterTime * 1000); |
||||||
|
return format.format(dt); |
||||||
|
} |
||||||
|
|
||||||
|
// 解密连接配置文件
|
||||||
|
public static String decode(String ciphertext) { |
||||||
|
|
||||||
|
String outstr = ""; |
||||||
|
char chr; |
||||||
|
int len = 0; |
||||||
|
long x = 0, y = 0, bit = 0; |
||||||
|
|
||||||
|
len = ciphertext.length(); |
||||||
|
for (int i = 0; i < len; i = i + 2) { |
||||||
|
bit = ciphertext.charAt(i); |
||||||
|
// 取前4位值
|
||||||
|
y = (bit - 64) * 16; |
||||||
|
// 取后4位值
|
||||||
|
y = y + ciphertext.charAt(i + 1) - 64; |
||||||
|
chr = (char) y; |
||||||
|
outstr = outstr + String.valueOf(chr); |
||||||
|
} |
||||||
|
|
||||||
|
ciphertext = outstr; |
||||||
|
outstr = ""; |
||||||
|
|
||||||
|
len = ciphertext.length(); |
||||||
|
x = ciphertext.charAt(len - 1); |
||||||
|
for (int i = len - 2; i >= 0; i--) { |
||||||
|
y = x * 256 + ciphertext.charAt(i); |
||||||
|
x = y % 13; |
||||||
|
chr = (char) (y / 13); |
||||||
|
outstr = String.valueOf(chr) + outstr; |
||||||
|
} |
||||||
|
return outstr; |
||||||
|
} |
||||||
|
|
||||||
|
// 抄读电能表日冻结类数据时标Td_d(日月年)
|
||||||
|
// 2013 04 11 wwb add
|
||||||
|
public static String meterGetTd_d() { |
||||||
|
String td_d = ""; |
||||||
|
|
||||||
|
SimpleDateFormat format = new SimpleDateFormat("ddMMyy"); |
||||||
|
Calendar c = Calendar.getInstance(); |
||||||
|
Date currDate = new Date(); |
||||||
|
c.setTime(currDate); |
||||||
|
int day = c.get(Calendar.DATE); |
||||||
|
c.set(Calendar.DATE, day - 1); |
||||||
|
td_d = format.format(c.getTime()); |
||||||
|
|
||||||
|
return td_d; |
||||||
|
} |
||||||
|
|
||||||
|
// 抄读灯控器日冻结类数据时标Td_d(日月年)
|
||||||
|
@SuppressWarnings("deprecation") |
||||||
|
public static String getTd_d(Date currDate) { |
||||||
|
SimpleDateFormat format = new SimpleDateFormat("ddMMyy"); |
||||||
|
Date date = new Date(); |
||||||
|
|
||||||
|
// 抄读灯控器日冻结数据时,12点之前带上日时标,12点之后带当日时标
|
||||||
|
if (date.getHours() < 12) { |
||||||
|
date.setDate(date.getDate()); |
||||||
|
} |
||||||
|
|
||||||
|
return format.format(date); |
||||||
|
} |
||||||
|
|
||||||
|
// 抄读电能表日冻结类数据时标Td_c(日月年)
|
||||||
|
// 2017 01 15 wwb add
|
||||||
|
// 15分钏
|
||||||
|
public static String meterGetTd_c(Date currDate) { |
||||||
|
String td_c = ""; |
||||||
|
|
||||||
|
SimpleDateFormat format = new SimpleDateFormat("HHddMMyy"); |
||||||
|
|
||||||
|
int currentmin = Integer.parseInt(Common.getMinute(currDate)); |
||||||
|
currentmin = (currentmin / 15) * 15; |
||||||
|
String str = String.valueOf(currentmin); |
||||||
|
if (str.length() == 1) |
||||||
|
str = "0" + str; |
||||||
|
td_c = str + format.format(currDate) + "0101"; |
||||||
|
|
||||||
|
return td_c; |
||||||
|
} |
||||||
|
|
||||||
|
// 抄读电能表日冻结类数据时标Td_c(日月年)
|
||||||
|
// 2017 01 15 wwb add
|
||||||
|
// 15分钏
|
||||||
|
public static String meterGetTd_c1(Date currDate) { |
||||||
|
String td_c = ""; |
||||||
|
|
||||||
|
SimpleDateFormat format = new SimpleDateFormat("HHddMMyy"); |
||||||
|
|
||||||
|
td_c = "00" + format.format(currDate) + "0104"; |
||||||
|
|
||||||
|
return td_c; |
||||||
|
} |
||||||
|
} |
||||||
@ -0,0 +1,50 @@ |
|||||||
|
package com.back.common; |
||||||
|
/** |
||||||
|
* 电表定采参数类 |
||||||
|
* @author welcomecc |
||||||
|
* |
||||||
|
*/ |
||||||
|
public class MeterTimingParams { |
||||||
|
/** |
||||||
|
* 错误重发次数 |
||||||
|
*/ |
||||||
|
public int reSend; |
||||||
|
/** |
||||||
|
* 同时并发数 |
||||||
|
*/ |
||||||
|
public int parallel; |
||||||
|
/** |
||||||
|
* 巡检日志工作状态 |
||||||
|
*/ |
||||||
|
public int logSet; |
||||||
|
/** |
||||||
|
* 开始时间 格式: HH:MM |
||||||
|
*/ |
||||||
|
public String firstRunTime; |
||||||
|
/** |
||||||
|
* 定采间隔 或补抄间隔 |
||||||
|
*/ |
||||||
|
public int intervalTiming; |
||||||
|
/** |
||||||
|
* 运行次数 或补抄次数 |
||||||
|
*/ |
||||||
|
public int runNum; |
||||||
|
|
||||||
|
|
||||||
|
/** |
||||||
|
* 曲线抄表间隔 |
||||||
|
*/ |
||||||
|
public int density; |
||||||
|
|
||||||
|
|
||||||
|
/** |
||||||
|
* 国网集中器一包的抄读数量 |
||||||
|
*/ |
||||||
|
public int packsize; |
||||||
|
|
||||||
|
/** |
||||||
|
* 光感控制-照度变化阀值 |
||||||
|
*/ |
||||||
|
public Long luxChangeLimit = (long) 1000; |
||||||
|
|
||||||
|
} |
||||||
@ -0,0 +1,11 @@ |
|||||||
|
package com.back.common; |
||||||
|
|
||||||
|
public class OpcDeviceParams { |
||||||
|
public boolean enable; |
||||||
|
public String opcIp; |
||||||
|
public String opcPort; |
||||||
|
public String opcUserName; |
||||||
|
public String opcPassword; |
||||||
|
public int opcCycleTime; |
||||||
|
public int opcTimeOut; |
||||||
|
} |
||||||
@ -0,0 +1,63 @@ |
|||||||
|
package com.back.common; |
||||||
|
/** |
||||||
|
* 前置机运行参数类 |
||||||
|
* @author welcomecc |
||||||
|
* |
||||||
|
*/ |
||||||
|
public class RunParams { |
||||||
|
public String gprsIp;// GPRS 服务器IP
|
||||||
|
public int gprsPort;// GPRS 服务器端口
|
||||||
|
|
||||||
|
public String gprsIpLon;// GPRS 服务器IP Lon16
|
||||||
|
public int gprsPortLon;// GPRS 服务器端口 Lon16
|
||||||
|
|
||||||
|
public String websocketIp;// websocket 连接IP
|
||||||
|
public int websocketPort;// websocket 连接端口
|
||||||
|
|
||||||
|
public boolean carCheckSocketIsOpen;// 车检器是否开启
|
||||||
|
public String carCheckSocketIp;// 车检器连接IP
|
||||||
|
public int carCheckSocketPort;// 车检器连接端口
|
||||||
|
public int carCheckSocketTimeOut;// 车检器连接超时
|
||||||
|
public int carCheckSocketSaveInteval;// 车检器上传数据时间间隔
|
||||||
|
|
||||||
|
public int gprsTimeOut;// GPRS超时时间(毫秒)
|
||||||
|
public int reSend;// 错误重发次数
|
||||||
|
|
||||||
|
public int comTimeOut;// 串口超时时间(毫秒)
|
||||||
|
public String terminalCom;// 集中器连接串口
|
||||||
|
|
||||||
|
public int intervalEvent;// 事件数据解析间隔时间(分)
|
||||||
|
|
||||||
|
public int threadsize;// 线程池线程数
|
||||||
|
public int intervalScan;// 线程池线程检视间隔时间(分)
|
||||||
|
public int timeDiscard;// 超时不处理时间(秒)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
public String terminalCom485;// 485总线通信口 例: COM
|
||||||
|
public int beat485;// 485集中器跳时间 (毫秒)
|
||||||
|
public int comTimeOut485;// 集中器连接串口(毫秒)
|
||||||
|
|
||||||
|
public int devideSyncTime; // 设备数据同步周期(单位:秒)
|
||||||
|
|
||||||
|
public String language = "";//语言
|
||||||
|
|
||||||
|
public Boolean opcControl= false;//光控转发处理
|
||||||
|
|
||||||
|
public Boolean MControlTiming15= false;//线路开关 15分钟定时抄读任务
|
||||||
|
|
||||||
|
public Boolean MControlTiming60= false;//线路开关 60分钟定时抄读任务
|
||||||
|
|
||||||
|
public Boolean LampTiming= false;//路灯曲线 抄读任务
|
||||||
|
|
||||||
|
public Boolean ForWard485=false;//485集中器转发命令
|
||||||
|
|
||||||
|
public Boolean TerminalDay3761Timing=false;//集中器日冻结 抄读任务
|
||||||
|
|
||||||
|
public Boolean LampDay3761Timing=false;//灯具日冻结 抄读任务
|
||||||
|
|
||||||
|
public Boolean AnalysisOfTunnelElectricity = false;//隧道用电分析
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
} |
||||||
@ -0,0 +1,401 @@ |
|||||||
|
/** |
||||||
|
* 获取数据连接 |
||||||
|
*/ |
||||||
|
package com.back.jdbc; |
||||||
|
|
||||||
|
import java.io.FileInputStream; |
||||||
|
import java.io.IOException; |
||||||
|
import java.io.InputStream; |
||||||
|
import java.sql.Connection; |
||||||
|
import java.sql.DriverManager; |
||||||
|
import java.sql.PreparedStatement; |
||||||
|
import java.sql.ResultSet; |
||||||
|
import java.sql.SQLException; |
||||||
|
import java.sql.Statement; |
||||||
|
import java.text.SimpleDateFormat; |
||||||
|
import java.util.Date; |
||||||
|
import java.util.Properties; |
||||||
|
|
||||||
|
import com.back.action.Log; |
||||||
|
|
||||||
|
/** SQL 基本操作 */ |
||||||
|
public class SQLHelper { |
||||||
|
/* |
||||||
|
* public static String driver = |
||||||
|
* "com.microsoft.jdbc.sqlserver.SQLServerDriver"; public static String url |
||||||
|
* = "jdbc:microsoft:sqlserver://192.168.0.82:1433;databasename=JFGLD"; |
||||||
|
* public static String user = "sa"; public static String pwd = ""; |
||||||
|
*/ |
||||||
|
public static String driver; |
||||||
|
public static String url; |
||||||
|
public static String user; |
||||||
|
public static String pwd; |
||||||
|
|
||||||
|
public static boolean isclose = false;// 数据库连接是否关闭
|
||||||
|
|
||||||
|
static Connection conn0 = null;// 增
|
||||||
|
static Connection conn1 = null;// 查
|
||||||
|
static Connection conn2 = null;// 改
|
||||||
|
static Connection conn3 = null;// 删
|
||||||
|
static Connection conn4 = null;// 查
|
||||||
|
|
||||||
|
private static String clazzName = new Object() { |
||||||
|
public String getClassName() { |
||||||
|
String clazzName = this.getClass().getName(); |
||||||
|
return clazzName.substring(0, clazzName.lastIndexOf('$')); |
||||||
|
} |
||||||
|
}.getClassName(); |
||||||
|
|
||||||
|
/** |
||||||
|
* 获取一个数据库连接 通过设置类的 driver / url / user / pwd 这四个静态变量来 设置数据库连接属性 |
||||||
|
* |
||||||
|
* @return 数据库连接 |
||||||
|
*/ |
||||||
|
public static Connection getConnection() { |
||||||
|
try { |
||||||
|
// InputStream ins =
|
||||||
|
// ClassLoader.getSystemResourceAsStream("conn.properties");
|
||||||
|
InputStream ins = new FileInputStream(System.getProperty("user.dir") + "\\conn.properties"); |
||||||
|
//InputStream ins = SQLHelper.class.getClassLoader().getResourceAsStream("conn.properties");
|
||||||
|
Properties p = new Properties(); |
||||||
|
p.load(ins); |
||||||
|
|
||||||
|
driver = p.getProperty("driver"); |
||||||
|
// driver = Common.decode(driver);
|
||||||
|
url = p.getProperty("url"); |
||||||
|
// url = Common.decode(url);
|
||||||
|
user = p.getProperty("user"); |
||||||
|
// user = Common.decode(user);
|
||||||
|
pwd = p.getProperty("pwd"); |
||||||
|
// pwd = Common.decode(pwd);
|
||||||
|
} catch (IOException e) { |
||||||
|
Log.writelog(SQLHelper.clazzName, |
||||||
|
Thread.currentThread().getStackTrace()[1].getMethodName() + "->ERROR:" + e.getMessage()); |
||||||
|
} |
||||||
|
|
||||||
|
try { |
||||||
|
Class.forName(driver); // 获取驱动
|
||||||
|
Connection conn = DriverManager.getConnection(url, user, pwd); |
||||||
|
isclose = false; |
||||||
|
return conn; |
||||||
|
} catch (Exception ex) { |
||||||
|
Log.writelog(SQLHelper.clazzName, |
||||||
|
Thread.currentThread().getStackTrace()[1].getMethodName() + "->ERROR1:" + ex.getMessage()); |
||||||
|
isclose = true; |
||||||
|
return null; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 执行 SQL 语句,返回结果为整型 主要用于执行非查询语句 |
||||||
|
* |
||||||
|
* @param cmdText |
||||||
|
* SQL 语句 |
||||||
|
* @return 非负数:正常执行; -1:执行错误; -2:连接错误 synchronized |
||||||
|
*/ |
||||||
|
public static int ExecSql(String cmdText) { |
||||||
|
if (conn0 == null) { |
||||||
|
conn0 = getConnection(); |
||||||
|
} |
||||||
|
if (conn0 == null) { |
||||||
|
return -2; |
||||||
|
} |
||||||
|
Statement stmt = null; |
||||||
|
int i; |
||||||
|
// System.err.println(cmdText);
|
||||||
|
Log.writelog(SQLHelper.clazzName, |
||||||
|
Thread.currentThread().getStackTrace()[1].getMethodName() + "->sql:" + cmdText); |
||||||
|
try { |
||||||
|
stmt = conn0.createStatement(); |
||||||
|
i = stmt.executeUpdate(cmdText); // 影响的结果数
|
||||||
|
// System.out.println("executeUpdate->>" + String.valueOf(i));
|
||||||
|
} catch (SQLException ex) { |
||||||
|
Log.writelog(SQLHelper.clazzName, |
||||||
|
Thread.currentThread().getStackTrace()[1].getMethodName() + "->Error:" + ex.getMessage()); |
||||||
|
|
||||||
|
isclose = true; |
||||||
|
i = -2; |
||||||
|
} |
||||||
|
try { |
||||||
|
if (stmt != null) { |
||||||
|
stmt.close(); |
||||||
|
stmt = null; |
||||||
|
} |
||||||
|
if (conn0 != null) |
||||||
|
conn0.close(); |
||||||
|
conn0 = null; |
||||||
|
} catch (SQLException e) { |
||||||
|
e.printStackTrace(); |
||||||
|
} |
||||||
|
return i; |
||||||
|
} |
||||||
|
|
||||||
|
/** 执行存储过程proc_wCommands */ |
||||||
|
public static synchronized ResultSet ExecProcwCommands(String cmdText) { |
||||||
|
if (conn1 == null) { |
||||||
|
conn1 = getConnection(); |
||||||
|
} |
||||||
|
if (conn1 == null) { |
||||||
|
return null; |
||||||
|
} |
||||||
|
int i; |
||||||
|
// CallableStatement c = null;
|
||||||
|
Statement stmt = null; |
||||||
|
ResultSet rSet = null; |
||||||
|
try { |
||||||
|
stmt = conn1.createStatement(); |
||||||
|
rSet = stmt.executeQuery(cmdText); |
||||||
|
/*// 创建存储过程的对象
|
||||||
|
c = conn1.prepareCall("{call proc_wcommands(?,?)}"); |
||||||
|
// 给存储过程的第一个参数设置值
|
||||||
|
c.setInt(1, cmdid); |
||||||
|
// 注册存储过程的第二个参数
|
||||||
|
c.registerOutParameter(2, java.sql.Types.INTEGER); |
||||||
|
// 执行存储过程
|
||||||
|
c.execute(); |
||||||
|
// 得到存储过程的输出参数值
|
||||||
|
i = c.getInt(2);*/ |
||||||
|
} catch (SQLException ex) { |
||||||
|
Log.writelog(SQLHelper.clazzName, |
||||||
|
Thread.currentThread().getStackTrace()[1].getMethodName() + "->Error:" + ex.getMessage()); |
||||||
|
isclose = true; |
||||||
|
try { |
||||||
|
if (rSet != null) |
||||||
|
rSet.close(); |
||||||
|
if (stmt != null) |
||||||
|
stmt.close(); |
||||||
|
if (conn1 != null) |
||||||
|
conn1.close(); |
||||||
|
rSet = null; |
||||||
|
stmt = null; |
||||||
|
conn1 = null; |
||||||
|
} catch (SQLException e) { |
||||||
|
e.printStackTrace(); |
||||||
|
} |
||||||
|
return null; |
||||||
|
} |
||||||
|
return rSet; |
||||||
|
} |
||||||
|
|
||||||
|
/** 执行存储过程proc_wreceivedata */ |
||||||
|
public static synchronized int ExecProcwreceivedata(int cmdid, String terminal, String tdata, int state, |
||||||
|
String remark) { |
||||||
|
int i; |
||||||
|
if (conn2 == null) { |
||||||
|
conn2 = getConnection(); |
||||||
|
} |
||||||
|
if (conn2 == null) { |
||||||
|
return -2; |
||||||
|
} |
||||||
|
|
||||||
|
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); |
||||||
|
String newDate = sdf.format(new Date()); |
||||||
|
String data = ""; |
||||||
|
if (tdata != null && tdata.length() > 0) { |
||||||
|
data = tdata; |
||||||
|
} |
||||||
|
String sql = "INSERT INTO receivedata values (" + cmdid + "," + terminal + ",'" + data + "','" + newDate |
||||||
|
+ "',0," + state + ",'" + remark + "')"; |
||||||
|
int result = 0; |
||||||
|
PreparedStatement stmt = null; |
||||||
|
try { |
||||||
|
stmt = (PreparedStatement) conn2.prepareCall(sql); |
||||||
|
result = stmt.executeUpdate(sql); |
||||||
|
} catch (SQLException ex) { |
||||||
|
Log.writelog(SQLHelper.clazzName, Thread.currentThread().getStackTrace()[1].getMethodName() + "->Error:" |
||||||
|
+ ex.getMessage() + "\r\n cmdid:" + cmdid); |
||||||
|
isclose = true; |
||||||
|
return -2; |
||||||
|
} finally { |
||||||
|
try { |
||||||
|
if (stmt != null) { |
||||||
|
stmt.close(); |
||||||
|
stmt = null; |
||||||
|
} |
||||||
|
if (conn2 != null) { |
||||||
|
conn2.close(); |
||||||
|
conn2 = null; |
||||||
|
} |
||||||
|
} catch (SQLException e) { |
||||||
|
e.printStackTrace(); |
||||||
|
} |
||||||
|
} |
||||||
|
/* |
||||||
|
* CallableStatement c = null; try { // 创建存储过程的对象 c = conn2.prepareCall(
|
||||||
|
* "{call proc_wreceivedata(?,?,?,?,?,?)}"); // 给存储过程的参数设置值 c.setInt(1,
|
||||||
|
* cmdid); c.setString(2, terminal); c.setString(3, tdata); c.setInt(4, |
||||||
|
* state); c.setString(5, remark); // 注册存储过程的第二个参数
|
||||||
|
* c.registerOutParameter(6, java.sql.Types.INTEGER); // 执行存储过程
|
||||||
|
* c.execute(); // 得到存储过程的输出参数值 i = c.getInt(6); } catch (SQLException
|
||||||
|
* ex) { Log.writelog(SQLHelper.clazzName, |
||||||
|
* Thread.currentThread().getStackTrace()[1].getMethodName() + |
||||||
|
* "->Error:" + ex.getMessage()); isclose = true; i = -2; } try { if (c |
||||||
|
* != null) { c.close(); c = null; } } catch (SQLException e) { |
||||||
|
* e.printStackTrace(); } |
||||||
|
*/ |
||||||
|
return result; |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 保存数据到数据库 |
||||||
|
*/ |
||||||
|
public static synchronized int saveData(String insertSql) { |
||||||
|
int i; |
||||||
|
if (conn2 == null) { |
||||||
|
conn2 = getConnection(); |
||||||
|
} |
||||||
|
if (conn2 == null) { |
||||||
|
return -2; |
||||||
|
} |
||||||
|
|
||||||
|
int result = 0; |
||||||
|
PreparedStatement stmt = null; |
||||||
|
try { |
||||||
|
stmt = (PreparedStatement) conn2.prepareCall(insertSql); |
||||||
|
result = stmt.executeUpdate(insertSql); |
||||||
|
} catch (SQLException ex) { |
||||||
|
// Log.writelog(SQLHelper.clazzName, Thread.currentThread().getStackTrace()[1].getMethodName() + "->Error:"
|
||||||
|
// + ex.getMessage() + "\r\n cmdid:" + cmdid);
|
||||||
|
isclose = true; |
||||||
|
return -2; |
||||||
|
} finally { |
||||||
|
try { |
||||||
|
if (stmt != null) { |
||||||
|
stmt.close(); |
||||||
|
stmt = null; |
||||||
|
} |
||||||
|
if (conn2 != null) { |
||||||
|
conn2.close(); |
||||||
|
conn2 = null; |
||||||
|
} |
||||||
|
} catch (SQLException e) { |
||||||
|
e.printStackTrace(); |
||||||
|
} |
||||||
|
} |
||||||
|
return result; |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 返回一个 ResultSet |
||||||
|
* |
||||||
|
* @param cmdText |
||||||
|
* SQL 语句 |
||||||
|
* @return |
||||||
|
*/ |
||||||
|
public static synchronized ResultSet getResultSet(String cmdText) { |
||||||
|
|
||||||
|
if (conn3 == null) { |
||||||
|
conn3 = getConnection(); |
||||||
|
} |
||||||
|
if (conn3 == null) { |
||||||
|
return null; |
||||||
|
} |
||||||
|
|
||||||
|
Statement stmt = null; |
||||||
|
ResultSet rSet = null; |
||||||
|
// Log.writelog(clazzName,
|
||||||
|
// Thread.currentThread().getStackTrace()[1].getMethodName() + "->"
|
||||||
|
// + cmdText);
|
||||||
|
try { |
||||||
|
// Log.writelog(SQLHelper.clazzName,
|
||||||
|
// Thread.currentThread().getStackTrace()[1].getMethodName() + "进入" + cmdText);
|
||||||
|
stmt = conn3.createStatement(); |
||||||
|
rSet = stmt.executeQuery(cmdText); |
||||||
|
// Log.writelog(SQLHelper.clazzName, Thread.currentThread().getStackTrace()[1].getMethodName() + "退出");
|
||||||
|
} catch (SQLException ex) { |
||||||
|
Log.writelog(SQLHelper.clazzName, Thread.currentThread().getStackTrace()[1].getMethodName() + "->Error:" |
||||||
|
+ ex.getMessage() + "\r\n" + cmdText); |
||||||
|
isclose = true; |
||||||
|
try { |
||||||
|
if (rSet != null) |
||||||
|
rSet.close(); |
||||||
|
if (stmt != null) |
||||||
|
stmt.close(); |
||||||
|
if (conn3 != null) |
||||||
|
conn3.close(); |
||||||
|
rSet = null; |
||||||
|
stmt = null; |
||||||
|
conn3 = null; |
||||||
|
} catch (SQLException e) { |
||||||
|
e.printStackTrace(); |
||||||
|
} |
||||||
|
return null; |
||||||
|
} |
||||||
|
return rSet; |
||||||
|
} |
||||||
|
|
||||||
|
/** 查询是否有记录 */ |
||||||
|
public static boolean IsExist(String cmdText) { |
||||||
|
boolean flag = false; |
||||||
|
|
||||||
|
if (conn4 == null) { |
||||||
|
conn4 = getConnection(); |
||||||
|
} |
||||||
|
if (conn4 == null) { |
||||||
|
return false; |
||||||
|
} |
||||||
|
Statement stmt = null; |
||||||
|
ResultSet rSet = null; |
||||||
|
try { |
||||||
|
stmt = conn4.createStatement(); |
||||||
|
rSet = stmt.executeQuery(cmdText); |
||||||
|
} catch (SQLException ex) { |
||||||
|
Log.writelog(SQLHelper.clazzName, |
||||||
|
Thread.currentThread().getStackTrace()[1].getMethodName() + "->Error:" + ex.getMessage()); |
||||||
|
isclose = true; |
||||||
|
try { |
||||||
|
if (rSet != null) |
||||||
|
rSet.close(); |
||||||
|
if (stmt != null) |
||||||
|
stmt.close(); |
||||||
|
if (conn4 != null) |
||||||
|
conn4.close(); |
||||||
|
rSet = null; |
||||||
|
stmt = null; |
||||||
|
conn4 = null; |
||||||
|
} catch (SQLException e) { |
||||||
|
e.printStackTrace(); |
||||||
|
} |
||||||
|
return false; |
||||||
|
} |
||||||
|
// Log.writelog(SQLHelper.clazzName, "SQLHelper->IsExist for");
|
||||||
|
// 判断查询回来结果
|
||||||
|
int intcount = 0; |
||||||
|
try { |
||||||
|
while (rSet.next()) { |
||||||
|
intcount = Integer.parseInt(rSet.getString(1)); |
||||||
|
} |
||||||
|
} catch (SQLException e) { |
||||||
|
e.printStackTrace(); |
||||||
|
} finally { |
||||||
|
try { |
||||||
|
if (rSet != null) |
||||||
|
rSet.close(); |
||||||
|
if (stmt != null) |
||||||
|
stmt.close(); |
||||||
|
if (conn4 != null) |
||||||
|
conn4.close(); |
||||||
|
rSet = null; |
||||||
|
stmt = null; |
||||||
|
conn4 = null; |
||||||
|
} catch (SQLException e) { |
||||||
|
e.printStackTrace(); |
||||||
|
} |
||||||
|
conn4 = null; |
||||||
|
} |
||||||
|
// Log.writelog(SQLHelper.clazzName, "SQLHelper->IsExist over ");
|
||||||
|
if (intcount != 0) { |
||||||
|
flag = true; |
||||||
|
} |
||||||
|
return flag; |
||||||
|
} |
||||||
|
|
||||||
|
/** 清空连接 */ |
||||||
|
public static void closeconn() { |
||||||
|
conn0 = null; |
||||||
|
conn1 = null; |
||||||
|
conn2 = null; |
||||||
|
conn3 = null; |
||||||
|
conn4 = null; |
||||||
|
} |
||||||
|
} |
||||||
@ -0,0 +1,518 @@ |
|||||||
|
/*系统参数查询*/ |
||||||
|
package com.back.protocol; |
||||||
|
|
||||||
|
import java.io.FileInputStream; |
||||||
|
import java.io.FileNotFoundException; |
||||||
|
import java.io.IOException; |
||||||
|
import java.io.InputStream; |
||||||
|
import java.sql.ResultSet; |
||||||
|
import java.sql.SQLException; |
||||||
|
import java.util.Properties; |
||||||
|
|
||||||
|
import com.back.action.Log; |
||||||
|
import com.back.common.MeterTimingParams; |
||||||
|
import com.back.common.OpcDeviceParams; |
||||||
|
import com.back.common.RunParams; |
||||||
|
import com.back.jdbc.SQLHelper; |
||||||
|
import com.back.*; |
||||||
|
|
||||||
|
public class SystemParameter { |
||||||
|
public static RunParams runParams = new RunParams(); //前置机运行参数
|
||||||
|
public static MeterTimingParams meterTimingParams = new MeterTimingParams();//定采运行参数
|
||||||
|
public static OpcDeviceParams opcDeviceParams = new OpcDeviceParams();// opc客户端运行参数
|
||||||
|
|
||||||
|
private static String clazzName = new Object() { |
||||||
|
public String getClassName() |
||||||
|
{ |
||||||
|
String clazzName = this.getClass().getName(); |
||||||
|
return clazzName.substring(0, clazzName.lastIndexOf('$')); |
||||||
|
} |
||||||
|
}.getClassName(); |
||||||
|
|
||||||
|
/** 获取定采工作配置参数 */ |
||||||
|
public static MeterTimingParams GetMeterTiming() { |
||||||
|
|
||||||
|
meterTimingParams.reSend = 3; //错误重发次数
|
||||||
|
meterTimingParams.parallel = 30; //并发次数
|
||||||
|
meterTimingParams.logSet = 2; //巡检日志工作状态 0 不记录 1 记录错误 2 全部记录
|
||||||
|
meterTimingParams.intervalTiming = 30;//运行间隔时间(补抄) 单位:分钟
|
||||||
|
meterTimingParams.runNum = 8; |
||||||
|
meterTimingParams.density = 1;//曲线抄表间隔
|
||||||
|
|
||||||
|
int i,j; |
||||||
|
String str; |
||||||
|
String strsql = "SELECT code,content FROM syscode WHERE type=2 AND code>'0000' ORDER BY code"; |
||||||
|
java.sql.Statement stmt = null; |
||||||
|
ResultSet rSet = SQLHelper.getResultSet(strsql); |
||||||
|
if (rSet == null) { |
||||||
|
Log.writelog(SystemParameter.clazzName,Thread.currentThread().getStackTrace()[1].getMethodName() + "->读取定采工作配置参数不成功!"); |
||||||
|
return null; |
||||||
|
} |
||||||
|
try { |
||||||
|
while (rSet.next()) { |
||||||
|
str = rSet.getString("code"); |
||||||
|
str = str.trim(); |
||||||
|
i = Integer.valueOf(str); |
||||||
|
str = rSet.getString("content"); |
||||||
|
|
||||||
|
switch(i) |
||||||
|
{ |
||||||
|
case 1://错误重发次数
|
||||||
|
meterTimingParams.reSend = Integer.valueOf(str); |
||||||
|
break; |
||||||
|
case 2://并发次数
|
||||||
|
meterTimingParams.parallel = Integer.valueOf(str); |
||||||
|
break; |
||||||
|
case 3://巡检日志工作状态 0 不记录 1 记录错误 2 全部记录
|
||||||
|
meterTimingParams.logSet = Integer.valueOf(str); |
||||||
|
break; |
||||||
|
case 4://开始时间 格式: HH:MM
|
||||||
|
meterTimingParams.firstRunTime = str; |
||||||
|
break; |
||||||
|
case 5://运行间隔时间 单位:分钟
|
||||||
|
meterTimingParams.intervalTiming = Integer.valueOf(str); |
||||||
|
break; |
||||||
|
case 6://每天运行次数
|
||||||
|
meterTimingParams.runNum = Integer.valueOf(str); |
||||||
|
break; |
||||||
|
case 7://曲线密度 0:不冻结 1:15 2:30 3:60 254:5 255:1
|
||||||
|
meterTimingParams.density = Integer.valueOf(str); |
||||||
|
break; |
||||||
|
case 8://通信包大小
|
||||||
|
meterTimingParams.packsize = Integer.valueOf(str); |
||||||
|
break; |
||||||
|
case 9://光感控制-照度变化阀值
|
||||||
|
meterTimingParams.luxChangeLimit = Long.valueOf(str); |
||||||
|
break; |
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
|
} catch (SQLException e) { |
||||||
|
Log.writelog(SystemParameter.clazzName,Thread.currentThread().getStackTrace()[1].getMethodName() + "->ERROR:" + e.getMessage()); |
||||||
|
} |
||||||
|
|
||||||
|
try { |
||||||
|
stmt = rSet.getStatement(); |
||||||
|
rSet.close(); |
||||||
|
stmt.close(); |
||||||
|
rSet = null; |
||||||
|
stmt = null; |
||||||
|
} catch (Exception e) { |
||||||
|
e.printStackTrace(); |
||||||
|
} |
||||||
|
|
||||||
|
return meterTimingParams; |
||||||
|
} |
||||||
|
|
||||||
|
/** 获取电表定采工作设置参数 */ |
||||||
|
public static String GetPowerTiming() { |
||||||
|
String result = ""; |
||||||
|
String content[] = new String[4]; |
||||||
|
content[0] = "1"; //数据冻结密度(m)(1:15分钟;2:30分钟;3:60分钟)
|
||||||
|
content[1] = "3"; //补抄次数
|
||||||
|
content[2] = "06"; //日冻结数据抄读时间(整点) 格式:HH
|
||||||
|
Object[] objects; |
||||||
|
String str; |
||||||
|
int i,j; |
||||||
|
String strsql = "SELECT code, content FROM syscode WHERE type=62 AND code>'0000' ORDER BY code"; |
||||||
|
java.sql.Statement stmt = null; |
||||||
|
ResultSet rSet = SQLHelper.getResultSet(strsql); |
||||||
|
if (rSet == null) { |
||||||
|
return ""; |
||||||
|
} |
||||||
|
try { |
||||||
|
while (rSet.next()) { |
||||||
|
str = rSet.getString("code"); |
||||||
|
str = str.trim(); |
||||||
|
i = Integer.valueOf(str); |
||||||
|
content[i - 1] = rSet.getString("content"); |
||||||
|
} |
||||||
|
} catch (SQLException e) { |
||||||
|
Log.writelog(SystemParameter.clazzName,Thread.currentThread().getStackTrace()[1].getMethodName() + "->ERROR:" + e.getMessage()); |
||||||
|
} |
||||||
|
try { |
||||||
|
stmt = rSet.getStatement(); |
||||||
|
rSet.close(); |
||||||
|
stmt.close(); |
||||||
|
rSet = null; |
||||||
|
stmt = null; |
||||||
|
} catch (Exception e) { |
||||||
|
e.printStackTrace(); |
||||||
|
} |
||||||
|
|
||||||
|
for ( j = 0; j < content.length; j++) { |
||||||
|
if (j==0) |
||||||
|
result = content[j]; |
||||||
|
else |
||||||
|
result = result + '|' + content[j]; |
||||||
|
} |
||||||
|
return result; |
||||||
|
} |
||||||
|
|
||||||
|
//运行参数结构体
|
||||||
|
|
||||||
|
|
||||||
|
/*配置参数 */ |
||||||
|
public static RunParams GetPostParams() { |
||||||
|
runParams.gprsIp = "1.190.175.75";//GPRS服务器IP (黑龙电服务器)
|
||||||
|
runParams.gprsPort = 3040;//GPRS服务器端口
|
||||||
|
|
||||||
|
runParams.gprsIpLon = "1.190.175.75";//GPRS服务器IP (黑龙服务器)
|
||||||
|
runParams.gprsPortLon = 3040;//GPRS服务器端口
|
||||||
|
|
||||||
|
runParams.reSend =1; //错误重发次数
|
||||||
|
runParams.gprsTimeOut = 60000;//GPRS超时时间(单位:毫秒)
|
||||||
|
runParams.timeDiscard = 120;//指令超时不处理时间(单位:秒)
|
||||||
|
runParams.threadsize = 200;//指令转发处理线程池线程数
|
||||||
|
runParams.intervalEvent = 1;//数据报文解析处理间隔时间(单位:分钟)
|
||||||
|
runParams.intervalScan = 20;//检测线程池线程运行状态间隔时间
|
||||||
|
runParams.terminalCom = "com1" ;//集中器串口
|
||||||
|
|
||||||
|
//获取语言
|
||||||
|
try { |
||||||
|
//InputStream ins = new FileInputStream(System.getProperty("user.dir") + "\\conn.properties");
|
||||||
|
InputStream ins = SQLHelper.class.getClassLoader().getResourceAsStream("conn.properties"); |
||||||
|
Properties p = new Properties(); |
||||||
|
p.load(ins); |
||||||
|
runParams.language = p.getProperty("language"); |
||||||
|
runParams.opcControl = Boolean.valueOf(p.getProperty("opcControl"));//光控转发处理
|
||||||
|
runParams.MControlTiming15 = Boolean.valueOf(p.getProperty("MControlTiming15"));//线路开关 15分钟定时抄读任务
|
||||||
|
runParams.MControlTiming60 = Boolean.valueOf(p.getProperty("MControlTiming60"));//线路开关 60分钟定时抄读任务
|
||||||
|
runParams.LampTiming = Boolean.valueOf(p.getProperty("LampTiming"));//路灯曲线 抄读任务
|
||||||
|
runParams.ForWard485 = Boolean.valueOf(p.getProperty("ForWard485"));//485转发 抄读任务
|
||||||
|
runParams.LampDay3761Timing = Boolean.valueOf(p.getProperty("LampDay3761Timing"));//灯具 日冻结 抄读任务
|
||||||
|
runParams.TerminalDay3761Timing = Boolean.valueOf(p.getProperty("TerminalDay3761Timing"));//集中器 日冻结 抄读任务
|
||||||
|
runParams.AnalysisOfTunnelElectricity = Boolean.valueOf(p.getProperty("AnalysisOfTunnelElectricity"));//隧道电量分析
|
||||||
|
runParams.gprsIp = p.getProperty("gprsIp"); |
||||||
|
runParams.gprsPort = 2030; |
||||||
|
} catch (IOException e) { |
||||||
|
// TODO Auto-generated catch block
|
||||||
|
Log.writelog(SystemParameter.clazzName,Thread.currentThread().getStackTrace()[1].getMethodName() + "->ERROR:" + e.getMessage()); |
||||||
|
} |
||||||
|
int i,j; |
||||||
|
String strsql = "SELECT code,content FROM syscode WHERE type=60 AND code>'0000' ORDER BY code"; |
||||||
|
java.sql.Statement stmt = null; |
||||||
|
ResultSet rSet = SQLHelper.getResultSet(strsql); |
||||||
|
if (rSet == null) { |
||||||
|
if (runParams.language.equals("en")) |
||||||
|
Log.writelog(SystemParameter.clazzName,Thread.currentThread().getStackTrace()[1].getMethodName() + "->Read the frontend configuration parameter is not successful!"); |
||||||
|
else |
||||||
|
Log.writelog(SystemParameter.clazzName,Thread.currentThread().getStackTrace()[1].getMethodName() + "->读取前置机配置参数不成功!"); |
||||||
|
return runParams; |
||||||
|
} |
||||||
|
String str; |
||||||
|
try { |
||||||
|
while (rSet.next()) { |
||||||
|
str = rSet.getString("code"); |
||||||
|
str = str.trim(); |
||||||
|
i = Integer.valueOf(str); |
||||||
|
str = rSet.getString("content").trim(); |
||||||
|
switch (i) { |
||||||
|
case 1: //GPRS服务器
|
||||||
|
runParams.gprsIp = str; |
||||||
|
break; |
||||||
|
case 2://GPRS服务器端口
|
||||||
|
runParams.gprsPort = Integer.valueOf(str); |
||||||
|
break; |
||||||
|
case 3://错误重发次数千
|
||||||
|
runParams.reSend = Integer.valueOf(str); |
||||||
|
break; |
||||||
|
case 4://GPRS通信超时时间(单位:毫秒)
|
||||||
|
runParams.gprsTimeOut = Integer.valueOf(str); |
||||||
|
break; |
||||||
|
case 5://指令超时不处理时间(单位:秒)
|
||||||
|
runParams.timeDiscard = Integer.valueOf(str); |
||||||
|
break; |
||||||
|
case 6://指转发处理线程池大小
|
||||||
|
runParams.threadsize = Integer.valueOf(str); |
||||||
|
break; |
||||||
|
case 7://事件处理间隔(单位:分钟)
|
||||||
|
runParams.intervalEvent = Integer.valueOf(str); |
||||||
|
break; |
||||||
|
case 8://检测试线程运行间隔(单位:分钟)
|
||||||
|
runParams.intervalScan = Integer.valueOf(str); |
||||||
|
break; |
||||||
|
case 9://本地串口通信端口(例:com1)
|
||||||
|
runParams.terminalCom = str.toUpperCase(); |
||||||
|
break; |
||||||
|
case 10://串口通信超时时间
|
||||||
|
runParams.comTimeOut = Integer.valueOf(str); |
||||||
|
break; |
||||||
|
|
||||||
|
case 11://485总线通信口
|
||||||
|
runParams.terminalCom485 = str.toUpperCase(); |
||||||
|
break; |
||||||
|
case 12://485集中器心跳周期
|
||||||
|
runParams.beat485 = Integer.valueOf(str); |
||||||
|
break; |
||||||
|
case 13://485集中器命令超时时间
|
||||||
|
runParams.comTimeOut485 = Integer.valueOf(str); |
||||||
|
break; |
||||||
|
case 15: {// 设备数据同步周期(单位:秒)
|
||||||
|
runParams.devideSyncTime = Integer.valueOf(str); |
||||||
|
break; |
||||||
|
} |
||||||
|
case 16: {// websocket ip
|
||||||
|
runParams.websocketIp = str; |
||||||
|
break; |
||||||
|
} |
||||||
|
case 17: {// websocket port
|
||||||
|
runParams.websocketPort = Integer.valueOf(str); |
||||||
|
break; |
||||||
|
} |
||||||
|
case 18: { // 车检器连接IP
|
||||||
|
runParams.carCheckSocketIp = str; |
||||||
|
break; |
||||||
|
} |
||||||
|
case 19: {// 车检器连接端口
|
||||||
|
runParams.carCheckSocketPort = Integer.valueOf(str); |
||||||
|
break; |
||||||
|
} |
||||||
|
case 20: { |
||||||
|
runParams.carCheckSocketTimeOut = Integer.valueOf(str); |
||||||
|
break; |
||||||
|
} |
||||||
|
case 21: { |
||||||
|
runParams.carCheckSocketSaveInteval = Integer.valueOf(str); |
||||||
|
break; |
||||||
|
} |
||||||
|
|
||||||
|
case 30: //GPRS服务器 Lon16
|
||||||
|
runParams.gprsIpLon = str; |
||||||
|
break; |
||||||
|
case 31://GPRS服务器端口 Lon16
|
||||||
|
runParams.gprsPortLon = Integer.valueOf(str); |
||||||
|
break; |
||||||
|
default: |
||||||
|
break; |
||||||
|
} |
||||||
|
} |
||||||
|
} catch (Exception e) { |
||||||
|
Log.writelog(SystemParameter.clazzName,Thread.currentThread().getStackTrace()[1].getMethodName() + "->ERROR:" + e.getMessage()); |
||||||
|
} |
||||||
|
|
||||||
|
String strsql2 = "SELECT code,content FROM syscode WHERE type=100 AND code>'0000' ORDER BY code"; |
||||||
|
java.sql.Statement stmt2 = null; |
||||||
|
ResultSet rSet2 = SQLHelper.getResultSet(strsql2); |
||||||
|
if (rSet2 == null) { |
||||||
|
if (runParams.language.equals("en")) |
||||||
|
Log.writelog(SystemParameter.clazzName,Thread.currentThread().getStackTrace()[1].getMethodName() + "->Read the frontend configuration parameter is not successful!"); |
||||||
|
else |
||||||
|
Log.writelog(SystemParameter.clazzName,Thread.currentThread().getStackTrace()[1].getMethodName() + "->读取前置机配置参数不成功!"); |
||||||
|
return runParams; |
||||||
|
} |
||||||
|
String str2; |
||||||
|
try { |
||||||
|
while (rSet2.next()) { |
||||||
|
str2 = rSet2.getString("code"); |
||||||
|
str2 = str2.trim(); |
||||||
|
i = Integer.valueOf(str2); |
||||||
|
str2 = rSet2.getString("content").trim(); |
||||||
|
switch (i) { |
||||||
|
case 2: {// 车检器是否开启
|
||||||
|
runParams.carCheckSocketIsOpen = "0".equals(str2)?false:true; |
||||||
|
break; |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
} catch (Exception e1) { |
||||||
|
// TODO Auto-generated catch block
|
||||||
|
e1.printStackTrace(); |
||||||
|
} |
||||||
|
|
||||||
|
try { |
||||||
|
stmt = rSet.getStatement(); |
||||||
|
rSet.close(); |
||||||
|
stmt.close(); |
||||||
|
rSet = null; |
||||||
|
stmt = null; |
||||||
|
stmt2 = rSet2.getStatement(); |
||||||
|
rSet2.close(); |
||||||
|
stmt2.close(); |
||||||
|
rSet2 = null; |
||||||
|
stmt2 = null; |
||||||
|
} catch (Exception e) { |
||||||
|
e.printStackTrace(); |
||||||
|
} |
||||||
|
|
||||||
|
return runParams; |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* opc配置参数 |
||||||
|
* @return |
||||||
|
*/ |
||||||
|
public static OpcDeviceParams GetOpcDeviceParams() { |
||||||
|
opcDeviceParams.opcIp = "127.0.0.1"; |
||||||
|
opcDeviceParams.opcPort = "49320"; |
||||||
|
opcDeviceParams.opcTimeOut = 30; |
||||||
|
|
||||||
|
String strsql = "SELECT code,content FROM syscode WHERE type=25 AND code>'0000' ORDER BY code"; |
||||||
|
ResultSet rSet = SQLHelper.getResultSet(strsql); |
||||||
|
if (rSet == null) { |
||||||
|
if (runParams.language.equals("en")) { |
||||||
|
Log.writelog(SystemParameter.clazzName,Thread.currentThread().getStackTrace()[1].getMethodName() + "->Read the frontend configuration parameter is not successful!"); |
||||||
|
} else { |
||||||
|
Log.writelog(SystemParameter.clazzName,Thread.currentThread().getStackTrace()[1].getMethodName() + "->读取前置机配置参数不成功!"); |
||||||
|
} |
||||||
|
return opcDeviceParams; |
||||||
|
} |
||||||
|
|
||||||
|
String str; |
||||||
|
int i,j; |
||||||
|
try { |
||||||
|
while (rSet.next()) { |
||||||
|
str = rSet.getString("code"); |
||||||
|
str = str.trim(); |
||||||
|
i = Integer.valueOf(str); |
||||||
|
str = rSet.getString("content").trim(); |
||||||
|
switch (i) { |
||||||
|
case 1: |
||||||
|
opcDeviceParams.enable = "0".equals(str)?false:true; |
||||||
|
case 2: |
||||||
|
opcDeviceParams.opcIp = str; |
||||||
|
break; |
||||||
|
case 3: |
||||||
|
opcDeviceParams.opcPort = str; |
||||||
|
break; |
||||||
|
case 4: |
||||||
|
opcDeviceParams.opcUserName = str; |
||||||
|
break; |
||||||
|
case 5: |
||||||
|
opcDeviceParams.opcPassword = str; |
||||||
|
break; |
||||||
|
case 6: |
||||||
|
opcDeviceParams.opcCycleTime = Integer.valueOf(str); |
||||||
|
break; |
||||||
|
case 7: |
||||||
|
opcDeviceParams.opcTimeOut = Integer.valueOf(str); |
||||||
|
break; |
||||||
|
|
||||||
|
default: |
||||||
|
break; |
||||||
|
} |
||||||
|
} |
||||||
|
} catch (Exception e) { |
||||||
|
Log.writelog(SystemParameter.clazzName,Thread.currentThread().getStackTrace()[1].getMethodName() + "->ERROR:" + e.getMessage()); |
||||||
|
} |
||||||
|
|
||||||
|
return opcDeviceParams; |
||||||
|
} |
||||||
|
|
||||||
|
/** 获取短信猫配置参数 */ |
||||||
|
public static String getSmsParams() { |
||||||
|
String result = ""; |
||||||
|
String strsql = "SELECT content FROM syscode WHERE type=61 AND code='0004' ORDER BY code"; |
||||||
|
java.sql.Statement stmt = null; |
||||||
|
ResultSet rSet = SQLHelper.getResultSet(strsql); |
||||||
|
if (rSet == null) { |
||||||
|
Log.writelog(SystemParameter.clazzName,Thread.currentThread().getStackTrace()[1].getMethodName() + "->读取短信猫配置参数不成功!"); |
||||||
|
return ""; |
||||||
|
} |
||||||
|
try { |
||||||
|
while (rSet.next()) { |
||||||
|
result = result + rSet.getString("content") + "|"; |
||||||
|
} |
||||||
|
} catch (Exception e) { |
||||||
|
Log.writelog(SystemParameter.clazzName,Thread.currentThread().getStackTrace()[1].getMethodName() + "->ERROR:" + e.getMessage()); |
||||||
|
} |
||||||
|
try { |
||||||
|
stmt = rSet.getStatement(); |
||||||
|
rSet.close(); |
||||||
|
stmt.close(); |
||||||
|
rSet = null; |
||||||
|
stmt = null; |
||||||
|
} catch (Exception e) { |
||||||
|
e.printStackTrace(); |
||||||
|
} |
||||||
|
|
||||||
|
if (!result.equals("")) { |
||||||
|
result = result.substring(0, result.length() - 1); |
||||||
|
} |
||||||
|
return result; |
||||||
|
} |
||||||
|
|
||||||
|
/** 获取短信信息中心号码 */ |
||||||
|
public static String getenter() { |
||||||
|
String center = ""; |
||||||
|
String strsql = "select content from syscode where type=61 and code='0001'"; |
||||||
|
java.sql.Statement stmt = null; |
||||||
|
ResultSet rSet = SQLHelper.getResultSet(strsql); |
||||||
|
if (rSet == null) { |
||||||
|
return ""; |
||||||
|
} |
||||||
|
try { |
||||||
|
while (rSet.next()) { |
||||||
|
center = rSet.getString("content"); |
||||||
|
} |
||||||
|
} catch (SQLException e) { |
||||||
|
e.printStackTrace(); |
||||||
|
} |
||||||
|
try { |
||||||
|
stmt = rSet.getStatement(); |
||||||
|
rSet.close(); |
||||||
|
stmt.close(); |
||||||
|
rSet = null; |
||||||
|
stmt = null; |
||||||
|
} catch (Exception e) { |
||||||
|
e.printStackTrace(); |
||||||
|
} |
||||||
|
return center; |
||||||
|
} |
||||||
|
|
||||||
|
/** 获取短信息最大发送次数 */ |
||||||
|
public static int getmaxCount() { |
||||||
|
int count = 0; |
||||||
|
String strsql = "select content from syscode where type=61 and code='0003'"; |
||||||
|
java.sql.Statement stmt = null; |
||||||
|
ResultSet rSet = SQLHelper.getResultSet(strsql); |
||||||
|
if (rSet == null) { |
||||||
|
return 0; |
||||||
|
} |
||||||
|
try { |
||||||
|
while (rSet.next()) { |
||||||
|
count = rSet.getInt("content"); |
||||||
|
} |
||||||
|
} catch (SQLException e) { |
||||||
|
e.printStackTrace(); |
||||||
|
} |
||||||
|
try { |
||||||
|
stmt = rSet.getStatement(); |
||||||
|
rSet.close(); |
||||||
|
stmt.close(); |
||||||
|
rSet = null; |
||||||
|
stmt = null; |
||||||
|
} catch (Exception e) { |
||||||
|
e.printStackTrace(); |
||||||
|
} |
||||||
|
return count; |
||||||
|
} |
||||||
|
|
||||||
|
/** 获取短信猫连接口参数 */ |
||||||
|
public static String smsport() { |
||||||
|
String serialport = ""; |
||||||
|
String strsql = "select content from syscode where type=61 and code='0002'"; |
||||||
|
java.sql.Statement stmt = null; |
||||||
|
ResultSet rSet = SQLHelper.getResultSet(strsql); |
||||||
|
if (rSet == null) { |
||||||
|
return ""; |
||||||
|
} |
||||||
|
try { |
||||||
|
while (rSet.next()) { |
||||||
|
serialport = rSet.getString("content"); |
||||||
|
} |
||||||
|
} catch (SQLException e) { |
||||||
|
Log.writelog(SystemParameter.clazzName,Thread.currentThread().getStackTrace()[1].getMethodName() + "->Error:" + e.getMessage()); |
||||||
|
} |
||||||
|
try { |
||||||
|
stmt = rSet.getStatement(); |
||||||
|
rSet.close(); |
||||||
|
stmt.close(); |
||||||
|
rSet = null; |
||||||
|
stmt = null; |
||||||
|
} catch (Exception e) { |
||||||
|
e.printStackTrace(); |
||||||
|
} |
||||||
|
return serialport.toUpperCase(); |
||||||
|
} |
||||||
|
} |
||||||
@ -0,0 +1,336 @@ |
|||||||
|
package com.back.threadpool; |
||||||
|
|
||||||
|
import com.back.action.Log; |
||||||
|
|
||||||
|
import java.util.ArrayList; |
||||||
|
import java.util.LinkedList; |
||||||
|
|
||||||
|
public class ThreadPool extends ThreadGroup { |
||||||
|
private boolean isClosed = false; // 线程池是否关闭
|
||||||
|
private LinkedList<Thread> workRun; // 工作队列
|
||||||
|
private LinkedList<Thread> workQueue; // 工作后继队列
|
||||||
|
private String threadPoollanguage; |
||||||
|
private static String clazzName = new Object() { |
||||||
|
public String getClassName() { |
||||||
|
String clazzName = this.getClass().getName(); |
||||||
|
return clazzName.substring(0, clazzName.lastIndexOf('$')); |
||||||
|
} |
||||||
|
}.getClassName(); |
||||||
|
public static ArrayList<String> terminaList = new ArrayList<String>(); |
||||||
|
|
||||||
|
public static ThreadPool Instance; // 唯一实例
|
||||||
|
|
||||||
|
public static ThreadPool getInstance(int poolSize, String language) { |
||||||
|
if (Instance == null) { |
||||||
|
Instance = new ThreadPool(poolSize, language); |
||||||
|
} |
||||||
|
|
||||||
|
return Instance; |
||||||
|
} |
||||||
|
|
||||||
|
private ThreadPool(int poolSize, String language) { // poolSize 表示线程池中的工作线程的数量
|
||||||
|
super("1"); // 指定ThreadGroup的名称
|
||||||
|
setDaemon(true); // 继承到的方法,设置是否守护线程池
|
||||||
|
workQueue = new LinkedList<Thread>(); // 创建工作后继队列
|
||||||
|
workRun = new LinkedList<Thread>(); // 创建工作队列
|
||||||
|
|
||||||
|
threadPoollanguage = language; |
||||||
|
|
||||||
|
if (language.equals("en")) { |
||||||
|
Log.writelog(clazzName, Thread.currentThread().getStackTrace()[1].getMethodName() |
||||||
|
+ "->Create a thread pool(" + String.valueOf(poolSize) + ")......"); |
||||||
|
Log.writelog(clazzName, Thread.currentThread().getStackTrace()[1].getMethodName() |
||||||
|
+ "->Start the thread pool(" + String.valueOf(poolSize) + ")......"); |
||||||
|
} else { |
||||||
|
Log.writelog(clazzName, Thread.currentThread().getStackTrace()[1].getMethodName() |
||||||
|
+ "->创建线程池(" + String.valueOf(poolSize) + ")......"); |
||||||
|
Log.writelog(clazzName, Thread.currentThread().getStackTrace()[1].getMethodName() |
||||||
|
+ "->启动线程池(" + String.valueOf(poolSize) + ")......"); |
||||||
|
} |
||||||
|
|
||||||
|
for (int i = 0; i < poolSize; i++) { |
||||||
|
new WorkThread(i, language).start(); // 创建并启动工作线程,线程池数量是多少就创建多少个工作线程
|
||||||
|
} |
||||||
|
if (language.equals("en")) { |
||||||
|
Log.writelog(clazzName, Thread.currentThread().getStackTrace()[1].getMethodName() |
||||||
|
+ "->Thread start to finish! "); |
||||||
|
} else { |
||||||
|
Log.writelog(clazzName, Thread.currentThread().getStackTrace()[1].getMethodName() |
||||||
|
+ "->线程启动完成! "); |
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
/** 获取备用任务队列的数量 */ |
||||||
|
public int GetWorkSize() { |
||||||
|
return workQueue.size(); |
||||||
|
} |
||||||
|
|
||||||
|
public synchronized void terminaListRemove(String terminal) { |
||||||
|
// Log.writelog(clazzName,terminal);
|
||||||
|
terminaList.remove(terminal); |
||||||
|
if (workQueue.size()>0) |
||||||
|
notify(); |
||||||
|
} |
||||||
|
|
||||||
|
/** 向工作队列中加入一个新任务,由工作线程去执行该任务 */ |
||||||
|
public synchronized void execute(String terminal, int cmdid, Thread task) { |
||||||
|
if (isClosed) { |
||||||
|
throw new IllegalStateException(); |
||||||
|
} |
||||||
|
if (task != null) { |
||||||
|
task.setName(terminal); |
||||||
|
// workQueue.add(task);// 向队列中加入一个任务
|
||||||
|
if (terminaList.contains(terminal)) { |
||||||
|
if (cmdid != 0) {// 优先处理页面指令
|
||||||
|
workQueue.add(0, task); |
||||||
|
} else { |
||||||
|
workQueue.add(task);// 向队列中加入一个任务
|
||||||
|
} |
||||||
|
if (threadPoollanguage.equals("en")) |
||||||
|
Log.writelog(clazzName, Thread.currentThread().getStackTrace()[1].getMethodName() + "->[" |
||||||
|
+ terminal + ":" + String.valueOf(task.getId()) + ":" + cmdid + "]:" |
||||||
|
+ "To join the thread pool"); |
||||||
|
else |
||||||
|
Log.writelog(clazzName, Thread.currentThread().getStackTrace()[1].getMethodName() + "->[" |
||||||
|
+ terminal + ":" + String.valueOf(task.getId()) + ":" + cmdid + "]:" + "加入线程池"); |
||||||
|
} else {// 立即执行
|
||||||
|
terminaList.add(terminal); |
||||||
|
workRun.add(task); |
||||||
|
|
||||||
|
if (threadPoollanguage.equals("en")) |
||||||
|
Log.writelog(clazzName, Thread.currentThread().getStackTrace()[1].getMethodName() + "->[" |
||||||
|
+ terminal + ":" + String.valueOf(task.getId()) + ":" + cmdid + "]:" |
||||||
|
+ "To join the thread pool(Run Now)"); |
||||||
|
else |
||||||
|
Log.writelog(clazzName, Thread.currentThread().getStackTrace()[1].getMethodName() + "->[" |
||||||
|
+ terminal + ":" + String.valueOf(task.getId()) + ":" + cmdid + "]:" + "加入线程池(立即执行)"); |
||||||
|
} |
||||||
|
|
||||||
|
notify(); // 唤醒正在getTask()方法中等待任务的工作线程
|
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
/** 从工作队列中取出一个任务,工作线程会调用此方法(同步调用的) */ |
||||||
|
private synchronized Thread getTask(int threadid) { |
||||||
|
Thread thread; |
||||||
|
String add; |
||||||
|
int count =0; |
||||||
|
while (workRun.size() == 0) { // 及时处理页面命令
|
||||||
|
if (isClosed) |
||||||
|
return null; |
||||||
|
|
||||||
|
if (workQueue.size() != 0) { // 从备用队列中取出放到运行队列中
|
||||||
|
try { |
||||||
|
count = 0; |
||||||
|
for (int i = 0; i < workQueue.size(); i++) { |
||||||
|
if (workRun.size() > 0) |
||||||
|
break; // 及时处理页面命令
|
||||||
|
thread = workQueue.get(i); |
||||||
|
add = thread.getName(); |
||||||
|
if (!terminaList.contains(add)) { |
||||||
|
if (count == 0) { |
||||||
|
terminaList.add(add); |
||||||
|
workRun.add(thread); |
||||||
|
workQueue.remove(i); |
||||||
|
count++; |
||||||
|
break; |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
/* |
||||||
|
if (workRun.size() > 0) |
||||||
|
{ |
||||||
|
notifyAll();//notifyAll
|
||||||
|
Log.writelog(clazzName, Thread.currentThread().getStackTrace()[1].getMethodName() |
||||||
|
+ "->ThreadPool.getTask():workRun.size-->" + workRun.size() + " workQueue.size-->" + workQueue.size() ); |
||||||
|
|
||||||
|
} |
||||||
|
if (workQueue.size()==0) |
||||||
|
{ |
||||||
|
Log.writelog(clazzName, Thread.currentThread().getStackTrace()[1].getMethodName() |
||||||
|
+ "->ThreadPool.getTask(): workQueue.size-->0" + workQueue.size() ); |
||||||
|
|
||||||
|
} |
||||||
|
*/ |
||||||
|
|
||||||
|
Log.writelog(clazzName, Thread.currentThread().getStackTrace()[1].getMethodName() |
||||||
|
+ "->ThreadPool.getTask("+String.valueOf(threadid)+"):workRun.size-->" + workRun.size() + " workQueue.size-->" + workQueue.size() ); |
||||||
|
if (count > 0) // 2012-03-08 需要唤醒正在getTask()方法中等待任务的工作线程
|
||||||
|
break; |
||||||
|
} catch (Exception e) { |
||||||
|
Log.writelog(clazzName, Thread.currentThread().getStackTrace()[1].getMethodName() |
||||||
|
+ "->ThreadPool.getTask():ERROR-->" + e.getMessage()); |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}// if (workQueue.size() != 0)
|
||||||
|
|
||||||
|
if (count > 0) // 2012-03-08 需要唤醒正在getTask()方法中等待任务的工作线程
|
||||||
|
break; |
||||||
|
|
||||||
|
try { |
||||||
|
// Log.writelog(clazzName, Thread.currentThread().getStackTrace()[1].getMethodName() + "->"+String.valueOf(threadid)+" 任务队列为空! 等待任务任务");
|
||||||
|
wait();// 如果工作队列中没有任务,就等待任务
|
||||||
|
//Log.writelog(clazzName, Thread.currentThread().getStackTrace()[1].getMethodName() + "->任务队列为空! 等待任务任务");
|
||||||
|
} catch (InterruptedException e) { |
||||||
|
Log.writelog(clazzName, Thread.currentThread().getStackTrace()[1].getMethodName() |
||||||
|
+ "->ThreadPool.getTask():ERROR1-->" + e.getMessage()); |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}// while (workRun.size() == 0) {
|
||||||
|
|
||||||
|
// 2012-03-08 防止线程没有被唤醒
|
||||||
|
/* |
||||||
|
for (int i = 0; i < workQueue.size(); i++) { |
||||||
|
thread = workQueue.get(i); |
||||||
|
add = thread.getName(); |
||||||
|
if (!terminaList.contains(add)) { |
||||||
|
notify(); |
||||||
|
break; |
||||||
|
} |
||||||
|
} |
||||||
|
*/ |
||||||
|
if (workQueue.size()>0) |
||||||
|
notify(); |
||||||
|
if (threadPoollanguage.equals("en")) |
||||||
|
Log.writelog(clazzName, Thread.currentThread().getStackTrace()[1].getMethodName() + "->[" |
||||||
|
+ threadid + "]Began to perform a task..."); |
||||||
|
else |
||||||
|
Log.writelog(clazzName, Thread.currentThread().getStackTrace()[1].getMethodName() + "->[" |
||||||
|
+ threadid + "]开始执行任务..."); |
||||||
|
|
||||||
|
return (Thread) workRun.removeFirst(); // 返回队列中第一个元素,并从队列中删除
|
||||||
|
} |
||||||
|
|
||||||
|
/** 关闭线程池 */ |
||||||
|
public synchronized void closePool() { |
||||||
|
if (!isClosed) { |
||||||
|
waitFinish(); // 等待工作线程执行完毕
|
||||||
|
isClosed = true; |
||||||
|
workRun.clear(); // 清空工作队列
|
||||||
|
interrupt(); // 中断线程池中的所有的工作线程,此方法继承自ThreadGroup类
|
||||||
|
} |
||||||
|
|
||||||
|
if (threadPoollanguage.equals("en")) |
||||||
|
Log.writelog(clazzName, Thread.currentThread().getStackTrace()[1].getMethodName() |
||||||
|
+ "->Close the thread pool......"); |
||||||
|
else |
||||||
|
Log.writelog(clazzName, Thread.currentThread().getStackTrace()[1].getMethodName() |
||||||
|
+ "->关闭线程池......"); |
||||||
|
} |
||||||
|
|
||||||
|
/** 等待工作线程把所有任务执行完毕 */ |
||||||
|
public void waitFinish() { |
||||||
|
synchronized (this) { |
||||||
|
isClosed = true; |
||||||
|
notifyAll(); // 唤醒所有还在getTask()方法中等待任务的工作线程
|
||||||
|
} |
||||||
|
Thread[] threads = new Thread[activeCount()]; // activeCount()
|
||||||
|
int count = enumerate(threads); // enumerate()方法继承自ThreadGroup类,根据活动线程的估计值获得线程组中当前所有活动的工作线程
|
||||||
|
for (int i = 0; i < count; i++) { // 等待所有工作线程结束
|
||||||
|
try { |
||||||
|
threads[i].join(); |
||||||
|
} catch (InterruptedException ex) { |
||||||
|
ex.printStackTrace(); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
/** 监控线程池,处于堵塞状态的线程终止重建 */ |
||||||
|
public void scanthread(String language) { |
||||||
|
Thread[] threads = new Thread[activeCount()]; |
||||||
|
int count = enumerate(threads); |
||||||
|
|
||||||
|
for (int i = 0; i < count; i++) { |
||||||
|
if (threads[i] != null && threads[i].isAlive()) { |
||||||
|
try { |
||||||
|
if (threads[i].getState().toString().equals("BLOCKED")) { |
||||||
|
Log.writelog(clazzName, Thread.currentThread().getStackTrace()[1].getMethodName() |
||||||
|
+ "->[" + threads[i].getName() + "," + threads[i].getState()); |
||||||
|
threads[i].interrupt();// 中断线程
|
||||||
|
threads[i].join(30000);// 等待线程终止的时间最长为 30000 毫秒
|
||||||
|
try { |
||||||
|
if (threads[i].isAlive()) { |
||||||
|
threads[i].stop(); |
||||||
|
} |
||||||
|
} catch (Exception e) { |
||||||
|
} |
||||||
|
threads[i] = null; |
||||||
|
new WorkThread(i, language).start();// 创建新线程
|
||||||
|
if (language.equals("en")) |
||||||
|
Log.writelog(clazzName, Thread.currentThread().getStackTrace()[1].getMethodName() |
||||||
|
+ "->CreateThread" + threads[i].getName()); |
||||||
|
else |
||||||
|
Log.writelog(clazzName, Thread.currentThread().getStackTrace()[1].getMethodName() |
||||||
|
+ "->创建线程" + threads[i].getName()); |
||||||
|
} |
||||||
|
} catch (Throwable e) { |
||||||
|
Log.writelog(clazzName, Thread.currentThread().getStackTrace()[1].getMethodName() |
||||||
|
+ "->ThreadPool-->scanthread():ERROR" + e.toString()); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
/** 内部类,工作线程,负责从工作队列中取出任务,并执行 */ |
||||||
|
private class WorkThread extends Thread { |
||||||
|
private int id; |
||||||
|
private String language; |
||||||
|
|
||||||
|
public WorkThread(int id, String language) { |
||||||
|
// 父类构造方法,将线程加入到当前ThreadPool线程组中
|
||||||
|
super(ThreadPool.this, id + ""); |
||||||
|
this.id = id; |
||||||
|
this.language = language; |
||||||
|
} |
||||||
|
|
||||||
|
public void run() { |
||||||
|
while (!isInterrupted()) { // isInterrupted()方法继承自Thread类,判断线程是否被中断
|
||||||
|
Thread task = null; |
||||||
|
task = getTask(id); // 取出任务
|
||||||
|
try { |
||||||
|
Thread.sleep(50); |
||||||
|
} catch (InterruptedException e) { |
||||||
|
e.printStackTrace(); |
||||||
|
} |
||||||
|
// 如果getTask()返回null或者线程执行getTask()时被中断,则结束此线程
|
||||||
|
if (task == null) |
||||||
|
return; |
||||||
|
|
||||||
|
try { |
||||||
|
String add = task.getName(); |
||||||
|
if (language.equals("en")) |
||||||
|
Log.writelog(clazzName, Thread.currentThread().getStackTrace()[1].getMethodName() |
||||||
|
+ "->[" + add + "]Fetch-and-execute!" + id); |
||||||
|
else |
||||||
|
Log.writelog(clazzName, Thread.currentThread().getStackTrace()[1].getMethodName() |
||||||
|
+ "->[" + add + "]取出执行!" + id); |
||||||
|
|
||||||
|
task.start(); // 运行任务
|
||||||
|
|
||||||
|
// terminaList.remove(add);
|
||||||
|
|
||||||
|
if (language.equals("en")) |
||||||
|
Log.writelog(clazzName, Thread.currentThread().getStackTrace()[1].getMethodName() |
||||||
|
+ "->[" + add + "]End Sub!" + id); |
||||||
|
else |
||||||
|
Log.writelog(clazzName, Thread.currentThread().getStackTrace()[1].getMethodName() |
||||||
|
+ "->[" + add + "]执行结束!" + id); |
||||||
|
|
||||||
|
} catch (Throwable t) { |
||||||
|
t.printStackTrace(); |
||||||
|
Log.writelog(clazzName, Thread.currentThread().getStackTrace()[1].getMethodName() |
||||||
|
+ "->WorkThread.run():ERROR-->" + t.getMessage()); |
||||||
|
} |
||||||
|
// task.destroy();
|
||||||
|
task = null;// 2012 02 20 wwb增加防止内存溢出
|
||||||
|
|
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
@ -0,0 +1,17 @@ |
|||||||
|
driver = com.mysql.jdbc.Driver |
||||||
|
url = jdbc:mysql://8.129.11.230:3306/samr?connectTimeout=10000&socketTimeout=60000 |
||||||
|
user = root |
||||||
|
pwd = samr2020 |
||||||
|
language = en |
||||||
|
|
||||||
|
opcControl = false |
||||||
|
MControlTiming15 = false |
||||||
|
MControlTiming60 = false |
||||||
|
|
||||||
|
ForWard485 = false |
||||||
|
LampTiming = false |
||||||
|
LampDay3761Timing =false |
||||||
|
TerminalDay3761Timing =false |
||||||
|
AnalysisOfTunnelElectricity=false |
||||||
|
|
||||||
|
gprsIp=172.26.187.230 |
||||||
@ -0,0 +1,5 @@ |
|||||||
|
Manifest-Version: 1.0 |
||||||
|
Built-By: Administrator |
||||||
|
Build-Jdk: 1.8.0_351 |
||||||
|
Created-By: Maven Integration for Eclipse |
||||||
|
|
||||||
@ -0,0 +1,7 @@ |
|||||||
|
#Generated by Maven Integration for Eclipse |
||||||
|
#Wed Jun 05 23:14:47 CST 2024 |
||||||
|
version=0.0.1-SNAPSHOT |
||||||
|
groupId=com.back |
||||||
|
m2e.projectName=2-common |
||||||
|
m2e.projectLocation=D\:\\fyj_20240312\\processor\\common |
||||||
|
artifactId=common |
||||||
@ -0,0 +1,85 @@ |
|||||||
|
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> |
||||||
|
<modelVersion>4.0.0</modelVersion> |
||||||
|
<parent> |
||||||
|
<groupId>com.back</groupId> |
||||||
|
<artifactId>processor</artifactId> |
||||||
|
<version>0.0.1-SNAPSHOT</version> |
||||||
|
</parent> |
||||||
|
<artifactId>common</artifactId> |
||||||
|
<packaging>jar</packaging> |
||||||
|
|
||||||
|
<dependencies> |
||||||
|
|
||||||
|
<dependency> |
||||||
|
<groupId>org.apache.commons</groupId> |
||||||
|
<artifactId>commons-lang3</artifactId> |
||||||
|
<version>3.8</version> |
||||||
|
</dependency> |
||||||
|
|
||||||
|
<dependency> |
||||||
|
<groupId>com.alibaba</groupId> |
||||||
|
<artifactId>fastjson</artifactId> |
||||||
|
<version>1.2.66</version> |
||||||
|
</dependency> |
||||||
|
|
||||||
|
<dependency> |
||||||
|
<groupId>mysql</groupId> |
||||||
|
<artifactId>mysql-connector-java</artifactId> |
||||||
|
<version>5.1.40</version> |
||||||
|
</dependency> |
||||||
|
|
||||||
|
<dependency> |
||||||
|
<groupId>org.slf4j</groupId> |
||||||
|
<artifactId>slf4j-api</artifactId> |
||||||
|
<version>1.7.25</version> |
||||||
|
</dependency> |
||||||
|
|
||||||
|
|
||||||
|
<dependency> |
||||||
|
<groupId>org.apache.httpcomponents</groupId> |
||||||
|
<artifactId>httpclient</artifactId> |
||||||
|
<version>4.5.6</version> |
||||||
|
</dependency> |
||||||
|
|
||||||
|
<dependency> |
||||||
|
<groupId>com.google.code.gson</groupId> |
||||||
|
<artifactId>gson</artifactId> |
||||||
|
<version>2.8.9</version> |
||||||
|
</dependency> |
||||||
|
|
||||||
|
|
||||||
|
<dependency> |
||||||
|
<groupId>org.bidib.jbidib.org.qbang.rxtx</groupId> |
||||||
|
<artifactId>rxtxcomm</artifactId> |
||||||
|
<version>2.2</version> |
||||||
|
</dependency> |
||||||
|
|
||||||
|
<dependency> |
||||||
|
<groupId>org.scream3r</groupId> |
||||||
|
<artifactId>jssc</artifactId> |
||||||
|
<version>2.8.0</version> |
||||||
|
</dependency> |
||||||
|
|
||||||
|
<dependency> |
||||||
|
<groupId>com.sun.mail</groupId> |
||||||
|
<artifactId>javax.mail</artifactId> |
||||||
|
<version>1.6.2</version> |
||||||
|
</dependency> |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<!--Milo客户端的依赖--> |
||||||
|
<dependency> |
||||||
|
<groupId>org.eclipse.milo</groupId> |
||||||
|
<artifactId>sdk-client</artifactId> |
||||||
|
<version>0.6.3</version> |
||||||
|
</dependency> |
||||||
|
|
||||||
|
<dependency> |
||||||
|
<groupId>org.java-websocket</groupId> |
||||||
|
<artifactId>Java-WebSocket</artifactId> |
||||||
|
<version>1.5.3</version> |
||||||
|
</dependency> |
||||||
|
|
||||||
|
</dependencies> |
||||||
|
</project> |
||||||
@ -0,0 +1,17 @@ |
|||||||
|
driver = com.mysql.jdbc.Driver |
||||||
|
url = jdbc:mysql://8.129.11.230:3306/samr?connectTimeout=10000&socketTimeout=60000 |
||||||
|
user = root |
||||||
|
pwd = samr2020 |
||||||
|
language = en |
||||||
|
|
||||||
|
opcControl = false |
||||||
|
MControlTiming15 = false |
||||||
|
MControlTiming60 = false |
||||||
|
|
||||||
|
ForWard485 = false |
||||||
|
LampTiming = false |
||||||
|
LampDay3761Timing =false |
||||||
|
TerminalDay3761Timing =false |
||||||
|
AnalysisOfTunnelElectricity=false |
||||||
|
|
||||||
|
gprsIp=172.26.187.230 |
||||||
@ -0,0 +1,17 @@ |
|||||||
|
driver = com.mysql.jdbc.Driver |
||||||
|
url = jdbc:mysql://8.129.11.230:3306/samr?connectTimeout=10000&socketTimeout=60000 |
||||||
|
user = root |
||||||
|
pwd = samr2020 |
||||||
|
language = en |
||||||
|
|
||||||
|
opcControl = false |
||||||
|
MControlTiming15 = false |
||||||
|
MControlTiming60 = false |
||||||
|
|
||||||
|
ForWard485 = false |
||||||
|
LampTiming = false |
||||||
|
LampDay3761Timing =false |
||||||
|
TerminalDay3761Timing =false |
||||||
|
AnalysisOfTunnelElectricity=false |
||||||
|
|
||||||
|
gprsIp=172.26.187.230 |
||||||
@ -0,0 +1,52 @@ |
|||||||
|
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> |
||||||
|
<modelVersion>4.0.0</modelVersion> |
||||||
|
<parent> |
||||||
|
<groupId>com.back</groupId> |
||||||
|
<artifactId>processor</artifactId> |
||||||
|
<version>0.0.1-SNAPSHOT</version> |
||||||
|
</parent> |
||||||
|
<artifactId>opc</artifactId> |
||||||
|
<packaging>jar</packaging> |
||||||
|
|
||||||
|
<dependencies> |
||||||
|
<dependency> |
||||||
|
<groupId>com.back</groupId> |
||||||
|
<artifactId>common</artifactId> |
||||||
|
<version>0.0.1-SNAPSHOT</version> |
||||||
|
</dependency> |
||||||
|
</dependencies> |
||||||
|
|
||||||
|
|
||||||
|
<build> |
||||||
|
<plugins> |
||||||
|
<plugin> |
||||||
|
<groupId>org.apache.maven.plugins</groupId> |
||||||
|
<artifactId>maven-compiler-plugin</artifactId> |
||||||
|
<version>3.5.1</version> |
||||||
|
<configuration> |
||||||
|
<source>1.8</source> |
||||||
|
<target>1.8</target> |
||||||
|
</configuration> |
||||||
|
</plugin> |
||||||
|
|
||||||
|
<plugin> |
||||||
|
<groupId>org.springframework.boot</groupId> |
||||||
|
<artifactId>spring-boot-maven-plugin</artifactId> |
||||||
|
<version>2.6.4</version> |
||||||
|
<configuration> |
||||||
|
<!-- springboot main方法入口 --> |
||||||
|
<mainClass>com.back.main.MainProcess</mainClass> |
||||||
|
<layout>ZIP</layout> |
||||||
|
</configuration> |
||||||
|
<executions> |
||||||
|
<execution> |
||||||
|
<goals> |
||||||
|
<goal>repackage</goal><!--可以把依赖的包都打包到生成的Jar包中--> |
||||||
|
</goals> |
||||||
|
</execution> |
||||||
|
</executions> |
||||||
|
</plugin> |
||||||
|
</plugins> |
||||||
|
</build> |
||||||
|
|
||||||
|
</project> |
||||||
@ -0,0 +1,353 @@ |
|||||||
|
package com.back.action; |
||||||
|
|
||||||
|
import com.back.common.RunParams; |
||||||
|
import com.back.jdbc.SQLHelper; |
||||||
|
import com.back.opcua.OpcUaUtil; |
||||||
|
import com.back.protocol.Protocol; |
||||||
|
import com.back.protocol.SystemParameter; |
||||||
|
import com.back.threadpool.ThreadPool; |
||||||
|
import org.apache.commons.lang3.StringUtils; |
||||||
|
import org.eclipse.milo.opcua.sdk.client.OpcUaClient; |
||||||
|
|
||||||
|
import java.sql.ResultSet; |
||||||
|
import java.sql.SQLException; |
||||||
|
import java.sql.Statement; |
||||||
|
import java.time.LocalDateTime; |
||||||
|
import java.time.format.DateTimeFormatter; |
||||||
|
import java.util.ArrayList; |
||||||
|
import java.util.HashMap; |
||||||
|
import java.util.List; |
||||||
|
import java.util.Map; |
||||||
|
|
||||||
|
public class Work { |
||||||
|
|
||||||
|
private static ThreadPool threadPool; |
||||||
|
|
||||||
|
private static int threadsize; |
||||||
|
public static String language = ""; // 语言
|
||||||
|
|
||||||
|
public static RunParams runParams; |
||||||
|
|
||||||
|
private static int timeDiscard;// 超时不处理时间(秒)
|
||||||
|
|
||||||
|
private static String clazzName = new Object() { |
||||||
|
public String getClassName() { |
||||||
|
String clazzName = this.getClass().getName(); |
||||||
|
return clazzName.substring(0, clazzName.lastIndexOf('$')); |
||||||
|
} |
||||||
|
}.getClassName(); |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
public Work() { |
||||||
|
SystemParameter.GetPostParams(); |
||||||
|
runParams = SystemParameter.runParams; |
||||||
|
// 转发参数设置
|
||||||
|
|
||||||
|
threadsize = SystemParameter.runParams.threadsize; |
||||||
|
|
||||||
|
timeDiscard = SystemParameter.runParams.timeDiscard; |
||||||
|
|
||||||
|
language = SystemParameter.runParams.language; |
||||||
|
|
||||||
|
threadPool = ThreadPool.getInstance(threadsize, language);// 创建线程池
|
||||||
|
|
||||||
|
try { |
||||||
|
Thread.sleep(500);// 休眠500毫秒,以便让线程池中的工作线程全部运行
|
||||||
|
} catch (InterruptedException e) { |
||||||
|
Log.writelog(clazzName, |
||||||
|
Thread.currentThread().getStackTrace()[1].getMethodName() + "->ERROR:" + e.getMessage()); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
public void opcDeviceDataSync() { |
||||||
|
Reconnect(); |
||||||
|
// 查询第三方设备最新数据
|
||||||
|
String sql = " SELECT * from (SELECT * from opcdevicedata HAVING 1 ORDER BY _TIMESTAMP DESC) tmp GROUP BY _NAME "; |
||||||
|
Statement stmt = null; |
||||||
|
ResultSet rSet = SQLHelper.getResultSet(sql); |
||||||
|
if (rSet == null) { |
||||||
|
return; |
||||||
|
} |
||||||
|
|
||||||
|
Map<String,OpcDeviceData> deviceMap = new HashMap<>(); |
||||||
|
try { |
||||||
|
System.out.println("查询总计:"+rSet.getRow()); |
||||||
|
while (rSet.next()) { |
||||||
|
String name = rSet.getString("_NAME"); |
||||||
|
String value = rSet.getString("_VALUE"); |
||||||
|
String timestamp = rSet.getString("_TIMESTAMP").substring(0, 19); |
||||||
|
// System.out.println(name + ":" + value + ":" + timestamp);
|
||||||
|
String[] opcNameArray = name.split("\\."); |
||||||
|
|
||||||
|
String devicechannel = opcNameArray[0]; |
||||||
|
String devicename = opcNameArray[1]; |
||||||
|
|
||||||
|
List<String> labelNameList = new ArrayList<>(); |
||||||
|
String opcDeviceSql = "SELECT opcdevicechannel,opcdevicename,comid,s.remark remark,s.content content FROM opcdevice o LEFT JOIN syscode s ON s.type = '26' " |
||||||
|
+ "and o.opcdevicetype = s.code where opcdevicechannel = '" + devicechannel + "' and opcdevicename = '" + devicename + "'"; |
||||||
|
ResultSet opcDeviceSet = SQLHelper.getResultSet(opcDeviceSql); |
||||||
|
if (opcDeviceSet != null) { |
||||||
|
while (opcDeviceSet.next()) { |
||||||
|
String content = opcDeviceSet.getString("content"); |
||||||
|
String comid = opcDeviceSet.getString("comid"); |
||||||
|
String syscodeSql = "SELECT code,content,encontent FROM syscode WHERE type='" + content + "' AND code>'0000' ORDER BY code"; |
||||||
|
ResultSet syscodeSet = SQLHelper.getResultSet(syscodeSql); |
||||||
|
if (syscodeSet != null) { |
||||||
|
while (syscodeSet.next()) { |
||||||
|
String syscodeContent = syscodeSet.getString("encontent"); |
||||||
|
// opcNameStrList.add(devicechannel + "." + devicename + "." + syscodeContent);
|
||||||
|
labelNameList.add(syscodeContent + "_" + comid); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
// System.out.println(JSON.toJSONString(labelNameList));
|
||||||
|
|
||||||
|
OpcDeviceData opcDeviceData = null; |
||||||
|
if (deviceMap.get(opcNameArray[0] + "." + opcNameArray[1]) == null) { |
||||||
|
opcDeviceData = new OpcDeviceData(); |
||||||
|
} else { |
||||||
|
opcDeviceData = deviceMap.get(opcNameArray[0] + "." + opcNameArray[1]); |
||||||
|
} |
||||||
|
opcDeviceData.setOpcdevicechannel(opcNameArray[0]); |
||||||
|
opcDeviceData.setOpcdevicename(opcNameArray[1]); |
||||||
|
if (name.endsWith("_System._Error")) { |
||||||
|
int online = Integer.valueOf(value) == 0 ? 1 : 0; |
||||||
|
opcDeviceData.setOnline(online); |
||||||
|
} |
||||||
|
if (labelNameList.contains(opcNameArray[2].trim())) { |
||||||
|
if (opcNameArray[2].startsWith("SENSOR_DATAI_LT")) { |
||||||
|
opcDeviceData.setLux(value); |
||||||
|
} else if (opcNameArray[2].startsWith("LOOP_DI_OPEN")) { |
||||||
|
opcDeviceData.setLoopon(value); |
||||||
|
} else if (opcNameArray[2].startsWith("LOOP_DI_CLOSE")) { |
||||||
|
opcDeviceData.setLoopoff(value); |
||||||
|
} else if (opcNameArray[2].startsWith("LOOP_DI_HAND")) { |
||||||
|
opcDeviceData.setControlstate(value); |
||||||
|
} else if (opcNameArray[2].startsWith("LOOP_DI_STATUS")) { |
||||||
|
opcDeviceData.setLoopDiStatus(value); |
||||||
|
} |
||||||
|
} |
||||||
|
if (opcDeviceData.getDatatime() == null |
||||||
|
|| StringUtils.isNoneEmpty(opcDeviceData.getDatatime()) && LocalDateTime.parse(opcDeviceData.getDatatime(), DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")).isBefore(LocalDateTime.parse(timestamp, DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")))) { |
||||||
|
opcDeviceData.setDatatime(timestamp); |
||||||
|
} |
||||||
|
deviceMap.put(opcNameArray[0] + "." + opcNameArray[1], opcDeviceData); |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
if (deviceMap.size() > 0) { |
||||||
|
for (Map.Entry<String,OpcDeviceData> entry : deviceMap.entrySet()) { |
||||||
|
String key = entry.getKey(); |
||||||
|
OpcDeviceData deviceData = entry.getValue(); |
||||||
|
// System.out.println(JSON.toJSONString(deviceData));
|
||||||
|
|
||||||
|
String updateSql = null; |
||||||
|
if (deviceData.getOnline() != null && Integer.valueOf(deviceData.getOnline()) == 1) { |
||||||
|
updateSql = "update opcdevice set online = '1', datatime = '" + deviceData.getDatatime() + "' "; |
||||||
|
if (deviceData.getLux() == null) { |
||||||
|
updateSql += ",LOOP_DI_STATUS = " + deviceData.getLoopDiStatus(); |
||||||
|
} else { |
||||||
|
updateSql += ",SENSOR_DATAI_LT = " + deviceData.getLux(); |
||||||
|
} |
||||||
|
updateSql += " where opcdevicechannel = '" + deviceData.getOpcdevicechannel() + "' and opcdevicename = '" + deviceData.getOpcdevicename() + "'"; |
||||||
|
} else { |
||||||
|
updateSql = "update opcdevice set online = '0', datatime = '" + deviceData.getDatatime() + "' " |
||||||
|
+ "where opcdevicechannel = '" + deviceData.getOpcdevicechannel() + "' and opcdevicename = '" + deviceData.getOpcdevicename() + "'"; |
||||||
|
} |
||||||
|
|
||||||
|
if (StringUtils.isNotEmpty(updateSql)) { |
||||||
|
SQLHelper.ExecSql(updateSql); |
||||||
|
} |
||||||
|
} |
||||||
|
// String updateSql = null;
|
||||||
|
// if (name.endsWith("_System._Error")) {
|
||||||
|
// int online = Integer.valueOf(value) == 0 ? 1 : 0;
|
||||||
|
// updateSql = "update opcdevice set online = '" + online + "', datatime = '" + timestamp + "' where opcdevicechannel = '" + opcNameArray[0] + "' and opcdevicename = '" + opcNameArray[1] + "'";
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// if ("传感值".equals(opcNameArray[2])) {
|
||||||
|
// updateSql = "update opcdevice set online = '" + online + "', datatime = '" + timestamp + "' where opcdevicechannel = '" + opcNameArray[0] + "' and opcdevicename = '" + opcNameArray[1] + "'";
|
||||||
|
// }
|
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
} catch (SQLException e) { |
||||||
|
Log.writelog(clazzName, |
||||||
|
Thread.currentThread().getStackTrace()[1].getMethodName() + "->ERROR:" + e.getMessage()); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
private class OpcDeviceData { |
||||||
|
private String opcdevicechannel; |
||||||
|
private String opcdevicename; |
||||||
|
private Integer online; |
||||||
|
private String loopon; |
||||||
|
private String loopoff; |
||||||
|
private String loopDiStatus; |
||||||
|
private String controlstate; |
||||||
|
private String lux; |
||||||
|
private String datatime; |
||||||
|
|
||||||
|
public String getOpcdevicechannel() { |
||||||
|
return opcdevicechannel; |
||||||
|
} |
||||||
|
public void setOpcdevicechannel(String opcdevicechannel) { |
||||||
|
this.opcdevicechannel = opcdevicechannel; |
||||||
|
} |
||||||
|
public String getOpcdevicename() { |
||||||
|
return opcdevicename; |
||||||
|
} |
||||||
|
public void setOpcdevicename(String opcdevicename) { |
||||||
|
this.opcdevicename = opcdevicename; |
||||||
|
} |
||||||
|
public Integer getOnline() { |
||||||
|
return online; |
||||||
|
} |
||||||
|
public void setOnline(Integer online) { |
||||||
|
this.online = online; |
||||||
|
} |
||||||
|
public String getLoopon() { |
||||||
|
return loopon; |
||||||
|
} |
||||||
|
public void setLoopon(String loopon) { |
||||||
|
this.loopon = loopon; |
||||||
|
} |
||||||
|
public String getLoopoff() { |
||||||
|
return loopoff; |
||||||
|
} |
||||||
|
public void setLoopoff(String loopoff) { |
||||||
|
this.loopoff = loopoff; |
||||||
|
} |
||||||
|
public String getDatatime() { |
||||||
|
return datatime; |
||||||
|
} |
||||||
|
public void setDatatime(String datatime) { |
||||||
|
this.datatime = datatime; |
||||||
|
} |
||||||
|
public String getControlstate() { |
||||||
|
return controlstate; |
||||||
|
} |
||||||
|
public void setControlstate(String controlstate) { |
||||||
|
this.controlstate = controlstate; |
||||||
|
} |
||||||
|
public String getLux() { |
||||||
|
return lux; |
||||||
|
} |
||||||
|
public void setLux(String lux) { |
||||||
|
this.lux = lux; |
||||||
|
} |
||||||
|
public String getLoopDiStatus() { |
||||||
|
return loopDiStatus; |
||||||
|
} |
||||||
|
public void setLoopDiStatus(String loopDiStatus) { |
||||||
|
this.loopDiStatus = loopDiStatus; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
/** 清空连接 */ |
||||||
|
public synchronized static void Reconnect() { |
||||||
|
if (SQLHelper.isclose == true) { |
||||||
|
SQLHelper.closeconn(); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
/** OPC转发指令 操作 */ |
||||||
|
public void ForWardOpc() { |
||||||
|
Reconnect(); |
||||||
|
int i = 0; |
||||||
|
|
||||||
|
if (threadPool.GetWorkSize() > threadsize * 2 == false) { |
||||||
|
|
||||||
|
String strsql = "SELECT CommandID,terminal,cmdcode,comtype,ruletype,wtime,responsetype FROM commands "; |
||||||
|
|
||||||
|
// 0001 和 0002 自研发、 0003 OPC
|
||||||
|
strsql += " WHERE TIMESTAMPDIFF(SECOND, WTime, NOW())<" + timeDiscard |
||||||
|
+ " and Status=0 and comtype='0003' LIMIT " + threadsize; |
||||||
|
|
||||||
|
java.sql.Statement stmt = null; |
||||||
|
ResultSet rSet = SQLHelper.ExecProcwCommands(strsql); |
||||||
|
if (rSet == null) { |
||||||
|
return; |
||||||
|
} |
||||||
|
|
||||||
|
try { |
||||||
|
while (rSet.next()) { |
||||||
|
|
||||||
|
int cmdid = rSet.getInt("CommandID"); |
||||||
|
String terminal = rSet.getString("terminal"); |
||||||
|
String cmdcode = rSet.getString("cmdcode"); |
||||||
|
String ruletype = rSet.getString("ruletype"); |
||||||
|
String wtime = rSet.getString("wtime"); |
||||||
|
String responsetype = rSet.getString("responsetype"); |
||||||
|
Log.writelog(clazzName, |
||||||
|
Thread.currentThread().getStackTrace()[1].getMethodName() + "[" + terminal + "] "); |
||||||
|
Protocol.updateCommands(terminal, cmdid); // 更新指令表读取标识
|
||||||
|
|
||||||
|
boolean send = true; |
||||||
|
String syncSql = "SELECT datasynciseffect FROM DataSync d LEFT JOIN terminals t " |
||||||
|
+ "ON d.terminalid = t.id WHERE t.comid = " + terminal; |
||||||
|
try { |
||||||
|
ResultSet resultSet = SQLHelper.getResultSet(syncSql); |
||||||
|
while (resultSet.next()) { |
||||||
|
int data = resultSet.getInt("datasynciseffect"); |
||||||
|
if (data == 1) { |
||||||
|
String remark = "Sync Busy"; |
||||||
|
SQLHelper.ExecProcwreceivedata(cmdid, terminal, null, 5, remark); |
||||||
|
send = false; |
||||||
|
} |
||||||
|
} |
||||||
|
} catch (SQLException e) { |
||||||
|
Log.writelog1("Sql 查询出错,syncSql: " + syncSql); |
||||||
|
e.printStackTrace(); |
||||||
|
} |
||||||
|
|
||||||
|
// 配电箱编号为 null,则为第三方设备命令发送
|
||||||
|
//if (StringUtils.isEmpty(terminal)) {
|
||||||
|
// 命令使用英文逗号分隔符
|
||||||
|
String[] cmdCodeArray = cmdcode.split(","); |
||||||
|
String operation = cmdCodeArray[0]; |
||||||
|
String identifier = cmdCodeArray[1].trim(); |
||||||
|
|
||||||
|
OpcUaClient opcUaClient = OpcUaUtil.opcUaClient; |
||||||
|
// 打开连接
|
||||||
|
opcUaClient.connect().get(); |
||||||
|
String result = null; |
||||||
|
if (operation.equals("readopc")) { |
||||||
|
result = OpcUaUtil.readNode(opcUaClient, identifier); |
||||||
|
} else if (operation.equals("writeopc")) { |
||||||
|
result = OpcUaUtil.writeNodeValue(opcUaClient, identifier, Short.valueOf(cmdCodeArray[2].trim())); |
||||||
|
// result = writeResult ? "true" : "false";
|
||||||
|
} |
||||||
|
// 关闭连接
|
||||||
|
opcUaClient.disconnect().get(); |
||||||
|
SQLHelper.ExecProcwreceivedata(cmdid, null, cmdcode + "," + result, 5, "opc device cmd"); |
||||||
|
//}
|
||||||
|
|
||||||
|
} |
||||||
|
} catch (Exception e) { |
||||||
|
Log.writelog(clazzName, |
||||||
|
Thread.currentThread().getStackTrace()[1].getMethodName() + "->ERROR:" + e.getMessage()); |
||||||
|
} |
||||||
|
try { |
||||||
|
stmt = rSet.getStatement(); |
||||||
|
rSet.close(); |
||||||
|
stmt.close(); |
||||||
|
rSet = null; |
||||||
|
stmt = null; |
||||||
|
} catch (Exception e) { |
||||||
|
Log.writelog(clazzName, |
||||||
|
Thread.currentThread().getStackTrace()[1].getMethodName() + "1->ERROR:" + e.getMessage()); |
||||||
|
} |
||||||
|
} else { |
||||||
|
Log.writelog(clazzName, Thread.currentThread().getStackTrace()[1].getMethodName() + "->ERROR2: "); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
@ -0,0 +1,51 @@ |
|||||||
|
package com.back.main; |
||||||
|
|
||||||
|
import com.back.action.Work; |
||||||
|
import com.back.common.OpcDeviceParams; |
||||||
|
import com.back.opcua.OpcUaUtil; |
||||||
|
import com.back.protocol.SystemParameter; |
||||||
|
import org.slf4j.Logger; |
||||||
|
import org.slf4j.LoggerFactory; |
||||||
|
|
||||||
|
import java.util.Timer; |
||||||
|
import java.util.TimerTask; |
||||||
|
|
||||||
|
public class MainProcess { |
||||||
|
|
||||||
|
private static Work work = new Work(); |
||||||
|
|
||||||
|
public static final Logger LOGGER = LoggerFactory.getLogger(MainProcess.class); |
||||||
|
|
||||||
|
public static void main(String[] args) { |
||||||
|
|
||||||
|
System.out.println("ver 1.2.11 2019-03-24 17");// 英文
|
||||||
|
|
||||||
|
OpcDeviceParams opcDeviceParams = SystemParameter.GetOpcDeviceParams(); |
||||||
|
if (opcDeviceParams == null) { |
||||||
|
System.out.println("Database connection failed!"); |
||||||
|
} |
||||||
|
String opcIp = opcDeviceParams.opcIp; |
||||||
|
String opcPort = opcDeviceParams.opcPort; |
||||||
|
int opcCycleTime = opcDeviceParams.opcCycleTime; |
||||||
|
int opcTimeOut = opcDeviceParams.opcTimeOut; |
||||||
|
|
||||||
|
try { |
||||||
|
OpcUaUtil.createClient(opcIp, opcPort, opcTimeOut); |
||||||
|
} catch (Exception e) { |
||||||
|
System.err.println("opc ua client start error, msg:%s" + e.getMessage()); |
||||||
|
} |
||||||
|
|
||||||
|
//发送opc命令
|
||||||
|
MythreadOpc myopc = new MythreadOpc(); |
||||||
|
Thread opc = new Thread(myopc); |
||||||
|
opc.start(); |
||||||
|
|
||||||
|
Timer opcDeviceDataSyncTimer = new Timer(); |
||||||
|
opcDeviceDataSyncTimer.schedule(new TimerTask() { |
||||||
|
public void run() { |
||||||
|
work.opcDeviceDataSync(); |
||||||
|
} |
||||||
|
}, 0, opcCycleTime * 1000); |
||||||
|
|
||||||
|
} |
||||||
|
} |
||||||
@ -0,0 +1,38 @@ |
|||||||
|
package com.back.main; |
||||||
|
|
||||||
|
import com.back.action.Log; |
||||||
|
import com.back.action.Work; |
||||||
|
|
||||||
|
public class MythreadOpc implements Runnable{ |
||||||
|
|
||||||
|
private Work work = new Work(); |
||||||
|
|
||||||
|
private String clazzName = new Object() { |
||||||
|
public String getClassName() { |
||||||
|
String clazzName = this.getClass().getName(); |
||||||
|
return clazzName.substring(0, clazzName.lastIndexOf('$')); |
||||||
|
} |
||||||
|
}.getClassName(); |
||||||
|
|
||||||
|
|
||||||
|
@Override |
||||||
|
public void run() { |
||||||
|
int i = 0; |
||||||
|
while (true) { |
||||||
|
|
||||||
|
i++; |
||||||
|
if (i > 600) { |
||||||
|
i = 0; |
||||||
|
Log.writelog(clazzName, |
||||||
|
Thread.currentThread().getStackTrace()[1].getMethodName() + "->ForWardGprs() Run!"); |
||||||
|
} |
||||||
|
try { |
||||||
|
Thread.sleep(100); |
||||||
|
work.ForWardOpc(); |
||||||
|
} catch (InterruptedException e) { |
||||||
|
e.printStackTrace(); |
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
@ -0,0 +1,150 @@ |
|||||||
|
package com.back.opcua; |
||||||
|
|
||||||
|
import java.util.List; |
||||||
|
import java.util.Objects; |
||||||
|
import java.util.Optional; |
||||||
|
import java.util.stream.Collectors; |
||||||
|
|
||||||
|
import org.eclipse.milo.opcua.sdk.client.OpcUaClient; |
||||||
|
import org.eclipse.milo.opcua.sdk.client.api.identity.AnonymousProvider; |
||||||
|
import org.eclipse.milo.opcua.sdk.client.nodes.UaNode; |
||||||
|
import org.eclipse.milo.opcua.stack.core.Identifiers; |
||||||
|
import org.eclipse.milo.opcua.stack.core.types.builtin.DataValue; |
||||||
|
import org.eclipse.milo.opcua.stack.core.types.builtin.LocalizedText; |
||||||
|
import org.eclipse.milo.opcua.stack.core.types.builtin.NodeId; |
||||||
|
import org.eclipse.milo.opcua.stack.core.types.builtin.StatusCode; |
||||||
|
import org.eclipse.milo.opcua.stack.core.types.builtin.Variant; |
||||||
|
import org.eclipse.milo.opcua.stack.core.types.builtin.unsigned.UInteger; |
||||||
|
import org.eclipse.milo.opcua.stack.core.types.enumerated.TimestampsToReturn; |
||||||
|
import org.eclipse.milo.opcua.stack.core.types.structured.EndpointDescription; |
||||||
|
import org.jetbrains.annotations.Nullable; |
||||||
|
|
||||||
|
import com.back.action.Log; |
||||||
|
|
||||||
|
public class OpcUaUtil { |
||||||
|
|
||||||
|
private static String clazzName = new Object() { |
||||||
|
public String getClassName() |
||||||
|
{ |
||||||
|
String clazzName = this.getClass().getName(); |
||||||
|
return clazzName.substring(0, clazzName.lastIndexOf('$')); |
||||||
|
} |
||||||
|
}.getClassName(); |
||||||
|
|
||||||
|
public static OpcUaClient opcUaClient; |
||||||
|
/** |
||||||
|
* 创建OPC UA客户端 |
||||||
|
* @return |
||||||
|
* @throws Exception |
||||||
|
*/ |
||||||
|
public static OpcUaClient createClient(String ip, String port, int timeout) throws Exception { |
||||||
|
String endPointUrl = String.format("opc.tcp://%s:%s", ip, port); |
||||||
|
opcUaClient = OpcUaClient.create( |
||||||
|
endPointUrl, |
||||||
|
endpointDescriptions -> { |
||||||
|
final List<EndpointDescription> collect = endpointDescriptions.stream().collect(Collectors.toList()); |
||||||
|
final Optional<EndpointDescription> first = endpointDescriptions |
||||||
|
.stream() |
||||||
|
.findFirst(); |
||||||
|
System.out.println(first.get().getSecurityPolicyUri()); |
||||||
|
return Optional.of(collect.get(0)); |
||||||
|
}, |
||||||
|
configBuilder -> |
||||||
|
configBuilder |
||||||
|
.setApplicationName(LocalizedText.english("opc-ua client")) |
||||||
|
.setApplicationUri(endPointUrl) |
||||||
|
// .setIdentityProvider(new UsernameProvider(username, password))
|
||||||
|
.setIdentityProvider(new AnonymousProvider()) |
||||||
|
.setRequestTimeout(UInteger.valueOf(timeout * 1000)) |
||||||
|
.build() |
||||||
|
); |
||||||
|
Log.writelog(OpcUaUtil.clazzName, String.format("创建客户端:%s 成功!", opcUaClient)); |
||||||
|
return opcUaClient; |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 遍历树形节点 |
||||||
|
* |
||||||
|
* @param client OPC UA客户端 |
||||||
|
* @param uaNode 节点 |
||||||
|
* @throws Exception |
||||||
|
*/ |
||||||
|
public static void browseNode(OpcUaClient client, UaNode uaNode) throws Exception { |
||||||
|
List<? extends UaNode> nodes; |
||||||
|
if (uaNode == null) { |
||||||
|
nodes = client.getAddressSpace().browseNodes(Identifiers.ObjectsFolder); |
||||||
|
} else { |
||||||
|
nodes = client.getAddressSpace().browseNodes(uaNode); |
||||||
|
} |
||||||
|
for (UaNode nd : nodes) { |
||||||
|
//排除系统行性节点,这些系统性节点名称一般都是以"_"开头
|
||||||
|
if (Objects.requireNonNull(nd.getBrowseName().getName()).contains("_")) { |
||||||
|
continue; |
||||||
|
} |
||||||
|
System.out.println("Node= " + nd.getBrowseName().getName() + "_" + nd.getNodeId().getNamespaceIndex()); |
||||||
|
browseNode(client, nd); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
/** |
||||||
|
* 读取节点数据 |
||||||
|
* |
||||||
|
* @param client OPC UA客户端 |
||||||
|
* @throws Exception |
||||||
|
*/ |
||||||
|
public static String readNode(OpcUaClient client, String identifier) throws Exception { |
||||||
|
try { |
||||||
|
int namespaceIndex = 2; |
||||||
|
//节点
|
||||||
|
NodeId nodeId = new NodeId(namespaceIndex, identifier); |
||||||
|
//读取节点数据
|
||||||
|
DataValue value = client.readValue(0.0, TimestampsToReturn.Neither, nodeId).get(); |
||||||
|
//标识符
|
||||||
|
String identifier1 = String.valueOf(nodeId.getIdentifier()); |
||||||
|
System.out.println(identifier1 + ": " + String.valueOf(value.getValue().getValue())); |
||||||
|
|
||||||
|
StatusCode statusCode = value.getStatusCode(); |
||||||
|
if (statusCode.isGood()) { |
||||||
|
return String.format("value[%s]", String.valueOf(value.getValue().getValue())); |
||||||
|
} else { |
||||||
|
return String.format("error[%s]", String.valueOf(value.getValue().getValue())); |
||||||
|
} |
||||||
|
} catch (Exception e) { |
||||||
|
System.err.println("error msg: " + e.getMessage()); |
||||||
|
// return null;
|
||||||
|
return String.format("error[%s]", null); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
/** |
||||||
|
* 写入节点数据 |
||||||
|
* |
||||||
|
* @param client |
||||||
|
* @throws Exception |
||||||
|
*/ |
||||||
|
public static String writeNodeValue(OpcUaClient client, String identifier, short value) throws Exception { |
||||||
|
try { |
||||||
|
//节点
|
||||||
|
// NodeId nodeId = new NodeId(2, "gdxs.传感器.传感值");
|
||||||
|
NodeId nodeId = new NodeId(2, identifier); |
||||||
|
//创建数据对象,此处的数据对象一定要定义类型,不然会出现类型错误,导致无法写入
|
||||||
|
DataValue nowValue = new DataValue(new Variant(value), null, null); |
||||||
|
//写入节点数据
|
||||||
|
StatusCode statusCode = client.writeValue(nodeId, nowValue).join(); |
||||||
|
System.out.println("结果:" + statusCode.isGood()); |
||||||
|
if (statusCode.isGood()) { |
||||||
|
return String.format("value[%s]", statusCode.isGood()); |
||||||
|
} else { |
||||||
|
return String.format("error[%s]", statusCode.isGood()); |
||||||
|
} |
||||||
|
} catch (Exception e) { |
||||||
|
System.err.println("writeNode take error, msg: " + e.getMessage()); |
||||||
|
return String.format("error[%s]", false); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
} |
||||||
@ -0,0 +1,66 @@ |
|||||||
|
package com.back.protocol; |
||||||
|
|
||||||
|
import com.back.action.Log; |
||||||
|
import com.back.common.Common; |
||||||
|
import com.back.jdbc.SQLHelper; |
||||||
|
|
||||||
|
|
||||||
|
public class Protocol { |
||||||
|
|
||||||
|
// ------------------------------------------------------------------系统参数函数------------------------------------------------------------------------------------
|
||||||
|
public static SystemParameter systemParameter = new SystemParameter(); |
||||||
|
|
||||||
|
private static String clazzName = new Object() { |
||||||
|
public String getClassName() { |
||||||
|
String clazzName = this.getClass().getName(); |
||||||
|
return clazzName.substring(0, clazzName.lastIndexOf('$')); |
||||||
|
} |
||||||
|
}.getClassName(); |
||||||
|
|
||||||
|
static String language = ""; |
||||||
|
|
||||||
|
public void Setlanguage(String language) { |
||||||
|
this.language = language; |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
/** 更新指令表读取标识 */ |
||||||
|
public static void updateCommands(String terminal, int commandid) { |
||||||
|
|
||||||
|
System.out.println("\n OPC更新指令表:"); |
||||||
|
String strsql = "update commands set status=1,rtime='" + Common.getDateStr0() + "' where CommandID = " + commandid; |
||||||
|
int result = SQLHelper.ExecSql(strsql); |
||||||
|
// Log.writelog(Protocol.clazzName,Thread.currentThread().getStackTrace()[1].getMethodName()
|
||||||
|
// +
|
||||||
|
// "->[" +strsql);
|
||||||
|
// int result = SQLHelper.ExecProcwCommands(commandid);
|
||||||
|
switch (result) { |
||||||
|
case -1: |
||||||
|
if (language.equals("en")) |
||||||
|
Log.writelog(Protocol.clazzName, Thread.currentThread().getStackTrace()[1].getMethodName() + "->[" |
||||||
|
+ terminal + "]Update the instruction table data state: failed to update"); |
||||||
|
else |
||||||
|
Log.writelog(Protocol.clazzName, Thread.currentThread().getStackTrace()[1].getMethodName() + "->[" |
||||||
|
+ terminal + "]更新指令表数据状态:更新失败"); |
||||||
|
break; |
||||||
|
case -2: |
||||||
|
if (language.equals("en")) |
||||||
|
Log.writelog(Protocol.clazzName, Thread.currentThread().getStackTrace()[1].getMethodName() + "->[" |
||||||
|
+ terminal + "]Update the instruction table data state: failed to connect to the database."); |
||||||
|
else |
||||||
|
Log.writelog(Protocol.clazzName, Thread.currentThread().getStackTrace()[1].getMethodName() + "->[" |
||||||
|
+ terminal + "]更新指令表数据状态:连接数据库失败"); |
||||||
|
break; |
||||||
|
default: |
||||||
|
if (language.equals("en")) |
||||||
|
Log.writelog(Protocol.clazzName, Thread.currentThread().getStackTrace()[1].getMethodName() + "->[" |
||||||
|
+ terminal + "]Updated instruction table data status: success"); |
||||||
|
else |
||||||
|
Log.writelog(Protocol.clazzName, Thread.currentThread().getStackTrace()[1].getMethodName() + "->[" |
||||||
|
+ terminal + "]更新指令表数据状态:更新成功"); |
||||||
|
break; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
} |
||||||
@ -0,0 +1,5 @@ |
|||||||
|
Manifest-Version: 1.0 |
||||||
|
Built-By: Administrator |
||||||
|
Build-Jdk: 1.8.0_351 |
||||||
|
Created-By: Maven Integration for Eclipse |
||||||
|
|
||||||
@ -0,0 +1,7 @@ |
|||||||
|
#Generated by Maven Integration for Eclipse |
||||||
|
#Wed Jun 05 23:14:58 CST 2024 |
||||||
|
version=0.0.1-SNAPSHOT |
||||||
|
groupId=com.back |
||||||
|
m2e.projectName=2-opc |
||||||
|
m2e.projectLocation=D\:\\fyj_20240312\\processor\\opc |
||||||
|
artifactId=opc |
||||||
@ -0,0 +1,52 @@ |
|||||||
|
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> |
||||||
|
<modelVersion>4.0.0</modelVersion> |
||||||
|
<parent> |
||||||
|
<groupId>com.back</groupId> |
||||||
|
<artifactId>processor</artifactId> |
||||||
|
<version>0.0.1-SNAPSHOT</version> |
||||||
|
</parent> |
||||||
|
<artifactId>opc</artifactId> |
||||||
|
<packaging>jar</packaging> |
||||||
|
|
||||||
|
<dependencies> |
||||||
|
<dependency> |
||||||
|
<groupId>com.back</groupId> |
||||||
|
<artifactId>common</artifactId> |
||||||
|
<version>0.0.1-SNAPSHOT</version> |
||||||
|
</dependency> |
||||||
|
</dependencies> |
||||||
|
|
||||||
|
|
||||||
|
<build> |
||||||
|
<plugins> |
||||||
|
<plugin> |
||||||
|
<groupId>org.apache.maven.plugins</groupId> |
||||||
|
<artifactId>maven-compiler-plugin</artifactId> |
||||||
|
<version>3.5.1</version> |
||||||
|
<configuration> |
||||||
|
<source>1.8</source> |
||||||
|
<target>1.8</target> |
||||||
|
</configuration> |
||||||
|
</plugin> |
||||||
|
|
||||||
|
<plugin> |
||||||
|
<groupId>org.springframework.boot</groupId> |
||||||
|
<artifactId>spring-boot-maven-plugin</artifactId> |
||||||
|
<version>2.6.4</version> |
||||||
|
<configuration> |
||||||
|
<!-- springboot main方法入口 --> |
||||||
|
<mainClass>com.back.main.MainProcess</mainClass> |
||||||
|
<layout>ZIP</layout> |
||||||
|
</configuration> |
||||||
|
<executions> |
||||||
|
<execution> |
||||||
|
<goals> |
||||||
|
<goal>repackage</goal><!--可以把依赖的包都打包到生成的Jar包中--> |
||||||
|
</goals> |
||||||
|
</execution> |
||||||
|
</executions> |
||||||
|
</plugin> |
||||||
|
</plugins> |
||||||
|
</build> |
||||||
|
|
||||||
|
</project> |
||||||
@ -0,0 +1,16 @@ |
|||||||
|
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> |
||||||
|
<modelVersion>4.0.0</modelVersion> |
||||||
|
<groupId>com.back</groupId> |
||||||
|
<artifactId>processor</artifactId> |
||||||
|
<version>0.0.1-SNAPSHOT</version> |
||||||
|
<packaging>pom</packaging> |
||||||
|
<name>processor</name> |
||||||
|
<description>processor</description> |
||||||
|
<modules> |
||||||
|
<module>common</module> |
||||||
|
<module>selfDevelop</module> |
||||||
|
<module>opc</module> |
||||||
|
<module>carCheck</module> |
||||||
|
<module>carCheckNew</module> |
||||||
|
</modules> |
||||||
|
</project> |
||||||
@ -0,0 +1,17 @@ |
|||||||
|
driver = com.mysql.jdbc.Driver |
||||||
|
url = jdbc:mysql://8.129.11.230:3306/samr?connectTimeout=10000&socketTimeout=60000 |
||||||
|
user = root |
||||||
|
pwd = samr2020 |
||||||
|
language = en |
||||||
|
|
||||||
|
opcControl = false |
||||||
|
MControlTiming15 = false |
||||||
|
MControlTiming60 = false |
||||||
|
|
||||||
|
ForWard485 = false |
||||||
|
LampTiming = false |
||||||
|
LampDay3761Timing =false |
||||||
|
TerminalDay3761Timing =false |
||||||
|
AnalysisOfTunnelElectricity=false |
||||||
|
|
||||||
|
gprsIp=172.26.187.230 |
||||||
@ -0,0 +1,53 @@ |
|||||||
|
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> |
||||||
|
<modelVersion>4.0.0</modelVersion> |
||||||
|
<parent> |
||||||
|
<groupId>com.back</groupId> |
||||||
|
<artifactId>processor</artifactId> |
||||||
|
<version>0.0.1-SNAPSHOT</version> |
||||||
|
</parent> |
||||||
|
<artifactId>selfDevelop</artifactId> |
||||||
|
<packaging>jar</packaging> |
||||||
|
|
||||||
|
<dependencies> |
||||||
|
<dependency> |
||||||
|
<groupId>com.back</groupId> |
||||||
|
<artifactId>common</artifactId> |
||||||
|
<version>0.0.1-SNAPSHOT</version> |
||||||
|
</dependency> |
||||||
|
</dependencies> |
||||||
|
|
||||||
|
|
||||||
|
<build> |
||||||
|
<plugins> |
||||||
|
<plugin> |
||||||
|
<groupId>org.apache.maven.plugins</groupId> |
||||||
|
<artifactId>maven-compiler-plugin</artifactId> |
||||||
|
<version>3.5.1</version> |
||||||
|
<configuration> |
||||||
|
<source>1.8</source> |
||||||
|
<target>1.8</target> |
||||||
|
</configuration> |
||||||
|
</plugin> |
||||||
|
|
||||||
|
<plugin> |
||||||
|
<groupId>org.springframework.boot</groupId> |
||||||
|
<artifactId>spring-boot-maven-plugin</artifactId> |
||||||
|
<version>2.6.4</version> |
||||||
|
<configuration> |
||||||
|
<!-- springboot main方法入口 --> |
||||||
|
<mainClass>com.back.main.MainProcess</mainClass> |
||||||
|
<layout>ZIP</layout> |
||||||
|
</configuration> |
||||||
|
<executions> |
||||||
|
<execution> |
||||||
|
<goals> |
||||||
|
<goal>repackage</goal><!--可以把依赖的包都打包到生成的Jar包中--> |
||||||
|
</goals> |
||||||
|
</execution> |
||||||
|
</executions> |
||||||
|
</plugin> |
||||||
|
</plugins> |
||||||
|
</build> |
||||||
|
|
||||||
|
|
||||||
|
</project> |
||||||
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,30 @@ |
|||||||
|
package com.back.communication; |
||||||
|
|
||||||
|
public class CmdObject485 { |
||||||
|
public int cmdid; |
||||||
|
public String terminal; |
||||||
|
public String outdata; |
||||||
|
public String ruletype; |
||||||
|
private String afncode; |
||||||
|
private int Fn; |
||||||
|
public int timeout; |
||||||
|
public String batchtime; |
||||||
|
public String responsetype; |
||||||
|
public String taskidString; |
||||||
|
|
||||||
|
public CmdObject485(int cmdid, String terminal, String outdata, |
||||||
|
String ruletype, String afncode, int Fn, int timeout, |
||||||
|
String batchtime, String responsetype, String taskidString) { |
||||||
|
this.cmdid = cmdid; |
||||||
|
this.terminal = terminal; |
||||||
|
this.outdata = outdata; |
||||||
|
this.ruletype = ruletype; |
||||||
|
this.afncode = afncode; |
||||||
|
this.Fn = Fn; |
||||||
|
this.timeout = timeout; |
||||||
|
this.batchtime = batchtime; |
||||||
|
this.responsetype = responsetype; |
||||||
|
this.taskidString = taskidString; |
||||||
|
|
||||||
|
} |
||||||
|
} |
||||||
@ -0,0 +1,266 @@ |
|||||||
|
package com.back.communication; |
||||||
|
|
||||||
|
import jssc.SerialPort; |
||||||
|
import jssc.SerialPortException; |
||||||
|
|
||||||
|
public class SendSMS { |
||||||
|
private String msgCenterPhone; |
||||||
|
private String portName; |
||||||
|
private int baud; |
||||||
|
private int parity; |
||||||
|
private int stop; |
||||||
|
private int data; |
||||||
|
private int gsmType; |
||||||
|
private SerialPort serialPort; |
||||||
|
/** AT+CMGS= */ |
||||||
|
public final static byte[] SMS_STRUCTOR = { 0x41, 0x54, 0x2B, 0x43, 0x4D, 0x47, 0x53, 0x3D }; |
||||||
|
/** AT+CMGF=0 */ |
||||||
|
public final static byte[] SMS_PDU_HEADER = { 0x41, 0x54, 0x2B, 0x43, 0x4D, 0x47, 0x46, 0x3D, |
||||||
|
0x30 }; |
||||||
|
public final static byte[] SMS_HEADER_START = { 0x41, 0x54, 0x2B, 0x43, 0x4D, 0x47, 0x53, 0x3D }; |
||||||
|
public final static byte[] SMS_HEADER_END = { 0x0D }; |
||||||
|
public final static byte[] SMS_CONTENT_END = { 0x1A }; |
||||||
|
|
||||||
|
public void setCenterPhone(String phoneNumber) { |
||||||
|
this.msgCenterPhone = phoneNumber; |
||||||
|
} |
||||||
|
|
||||||
|
public void setSerialPort(String portName) { |
||||||
|
this.portName = portName; |
||||||
|
} |
||||||
|
|
||||||
|
public void setParams(int baudRate, int parity, int stop, int data) { |
||||||
|
this.baud = baudRate; |
||||||
|
this.parity = parity; |
||||||
|
this.stop = stop; |
||||||
|
this.data = data; |
||||||
|
} |
||||||
|
|
||||||
|
public void setGSMType(int gsmType) { |
||||||
|
this.gsmType = gsmType; |
||||||
|
} |
||||||
|
|
||||||
|
public SendSMS() { |
||||||
|
// msgCenterPhone = msgCenterPhone.trim();
|
||||||
|
portName = "COM20"; |
||||||
|
baud = 115200; |
||||||
|
parity = 0; |
||||||
|
stop = 1; |
||||||
|
data = 8; |
||||||
|
gsmType = 2; |
||||||
|
} |
||||||
|
|
||||||
|
public SendSMS(String phoneNo, String portName, int gsmType) { |
||||||
|
msgCenterPhone = phoneNo; |
||||||
|
this.portName = portName; |
||||||
|
baud = 115200; |
||||||
|
parity = 0; |
||||||
|
stop = 1; |
||||||
|
data = 8; |
||||||
|
this.gsmType = gsmType; |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 确认发送格式并发送短信,将长短信分为N条正常短信 |
||||||
|
* |
||||||
|
* @param mobileSendAlarmInfo |
||||||
|
* @return 1:发送成功;-1:发送失败 |
||||||
|
*/ |
||||||
|
public int sendSMS(String destPhone, String content) { |
||||||
|
/** |
||||||
|
* 发送成功标志 |
||||||
|
*/ |
||||||
|
int succeedFlag = 0; |
||||||
|
serialPort = new SerialPort(this.portName); |
||||||
|
try { |
||||||
|
System.out.println("Port opened:" + serialPort.openPort()); |
||||||
|
System.out.println("Params setted:" + serialPort.setParams(115200, 8, 1, 0)); |
||||||
|
System.out.println("Send PDU Header" + serialPort.writeBytes(SMS_PDU_HEADER)); |
||||||
|
System.out.println("Send Header End" + serialPort.writeBytes(SMS_HEADER_END)); |
||||||
|
int timeout = 0; |
||||||
|
while (true) { |
||||||
|
Thread.sleep(100); |
||||||
|
byte[] b = new byte[21]; |
||||||
|
b = serialPort.readBytes(); |
||||||
|
if (timeout > 50) { |
||||||
|
System.out.println("Time Out"); |
||||||
|
return succeedFlag = -1; |
||||||
|
} |
||||||
|
if (b == null) { |
||||||
|
timeout++; |
||||||
|
continue; |
||||||
|
} |
||||||
|
String s = new String(b); |
||||||
|
if (s.indexOf("OK") != -1) { // 'OK'
|
||||||
|
System.out.println("Set PDU Successful!"); |
||||||
|
break; |
||||||
|
} |
||||||
|
} |
||||||
|
int[] tpduLength = new int[1]; |
||||||
|
String pack = packStrMessage(destPhone, content, msgCenterPhone, tpduLength); |
||||||
|
System.out.println("Send Header Start" + serialPort.writeBytes(SMS_HEADER_START)); |
||||||
|
String strLength = (tpduLength[0] < 100 ? ("0" + Integer.toString(tpduLength[0])) : Integer |
||||||
|
.toString(tpduLength[0])); |
||||||
|
System.out.println("Send Header Length" + serialPort.writeBytes(strLength.getBytes())); |
||||||
|
System.out.println("Send Header End" + serialPort.writeBytes(SMS_HEADER_END)); |
||||||
|
Thread.sleep(100); |
||||||
|
timeout = 0; |
||||||
|
while (true) { |
||||||
|
Thread.sleep(100); |
||||||
|
byte[] b = new byte[21]; |
||||||
|
b = serialPort.readBytes(); |
||||||
|
|
||||||
|
if (timeout > 50) { |
||||||
|
System.out.println("Time Out"); |
||||||
|
return succeedFlag = -1; |
||||||
|
} |
||||||
|
if (b == null) { |
||||||
|
timeout++; |
||||||
|
continue; |
||||||
|
} |
||||||
|
String s = new String(b); |
||||||
|
if (s.indexOf('>') != -1) { // '>'
|
||||||
|
System.out.println("Title Successful!"); |
||||||
|
break; |
||||||
|
} |
||||||
|
if (s.indexOf("ERROR") != -1) { // 'R'
|
||||||
|
System.out.println("Error"); |
||||||
|
return succeedFlag = -1; |
||||||
|
} |
||||||
|
} |
||||||
|
System.out.println("Send Content: " + serialPort.writeBytes(pack.getBytes())); |
||||||
|
System.out.println("Send Contend End: " + serialPort.writeBytes(SMS_CONTENT_END)); |
||||||
|
System.out.println("Send Header End: " + serialPort.writeBytes(SMS_HEADER_END)); |
||||||
|
timeout = 0; |
||||||
|
while (true) { |
||||||
|
Thread.sleep(100); |
||||||
|
byte[] b = new byte[21]; |
||||||
|
b = serialPort.readBytes(); |
||||||
|
if (timeout > 50) { |
||||||
|
System.out.println("Time Out"); |
||||||
|
return succeedFlag = -1; |
||||||
|
} |
||||||
|
if (b == null) { |
||||||
|
timeout++; |
||||||
|
continue; |
||||||
|
} |
||||||
|
String s = new String(b); |
||||||
|
System.out.println(s); |
||||||
|
// System.exit(0);
|
||||||
|
// serialPort.closePort();
|
||||||
|
if (s.indexOf("OK") != -1) { // '>'
|
||||||
|
System.out.println("Content Successful!"); |
||||||
|
serialPort.closePort(); |
||||||
|
return succeedFlag = 1; |
||||||
|
} |
||||||
|
if (s.indexOf("ERROR") != -1) { // 'R'
|
||||||
|
System.out.println("Error"); |
||||||
|
serialPort.closePort(); |
||||||
|
return succeedFlag = -1; |
||||||
|
} |
||||||
|
serialPort.closePort(); |
||||||
|
} |
||||||
|
} catch (SerialPortException e) { |
||||||
|
// TODO Auto-generated catch block
|
||||||
|
e.printStackTrace(); |
||||||
|
} catch (InterruptedException e) { |
||||||
|
// TODO Auto-generated catch block
|
||||||
|
e.printStackTrace(); |
||||||
|
} |
||||||
|
return succeedFlag; |
||||||
|
} |
||||||
|
|
||||||
|
private String packStrMessage(String destPhone, String content, String centerPhone, |
||||||
|
int[] tpduLength) { |
||||||
|
if (destPhone == null || content == null || centerPhone == null) |
||||||
|
return ""; |
||||||
|
// encode the SCA
|
||||||
|
byte[] sca = new byte[3]; |
||||||
|
sca[0] = (byte) (0x00); |
||||||
|
sca[1] = (byte) 0x11; |
||||||
|
sca[2] = (byte) 0x00; |
||||||
|
// encode TPDU
|
||||||
|
if (!destPhone.startsWith("86")) // add china code 86 to dest phone. 81 为日本的代码
|
||||||
|
destPhone = "86" + destPhone; |
||||||
|
int length; |
||||||
|
int destLength = length = destPhone.length(); |
||||||
|
if (length % 2 != 0) { // if the dest code is odd , then add 'F'
|
||||||
|
destPhone += "F"; |
||||||
|
length++; |
||||||
|
} |
||||||
|
// content += new String( new char[]{ 0x00 } );
|
||||||
|
char[] ccontent = content.toCharArray(); |
||||||
|
int contentLength = ccontent.length; |
||||||
|
/* |
||||||
|
* Data Length Dest Phone(encoding) | Data(encoding) _________|__________ | _____|________ The |
||||||
|
* tpdu' sample byte 11 00 0D 91 68 31 19 01 28 14 F1 00 00 00 05 D4 E2 94 0A 02 | | | | | | | | |
||||||
|
* | | TON/NPI | | VP Validity Period | | Dest Phone Length(Number) | DCS Data Coding |
||||||
|
* Scheme(00-ASCII , 08-UCS2) | MR Message Reference PID Protocol ID 8 Bits |
||||||
|
* MTI,RD,VPF,SRR,UDHI,RP,MMS,SRI so 4 + phoneLength / 2 + 3 + 1 + contenLength is the tpdu |
||||||
|
* length |
||||||
|
*/ |
||||||
|
byte[] tpdu = new byte[2 + length / 2 + 3 + 1 + contentLength * 2]; |
||||||
|
int index = 0; |
||||||
|
tpdu[index++] = (byte) destLength; |
||||||
|
tpdu[index++] = (byte) 0x91; |
||||||
|
for (int i = 0; i < length; i += 2) { |
||||||
|
tpdu[index++] = swap(destPhone.substring(i, i + 2), 16); |
||||||
|
} |
||||||
|
tpdu[index++] = 0x00; |
||||||
|
tpdu[index++] = 0x08; // UCS2
|
||||||
|
tpdu[index++] = (byte) 0xA7; |
||||||
|
tpdu[index++] = (byte) (contentLength * 2); |
||||||
|
for (int i = 0; i < contentLength; i++) { |
||||||
|
if (i < ccontent.length) { |
||||||
|
tpdu[index++] = (byte) (ccontent[i] >> 8); |
||||||
|
tpdu[index++] = (byte) (ccontent[i] & 0x00FF); |
||||||
|
} else { |
||||||
|
tpdu[index++] = (byte) (0xFF); |
||||||
|
tpdu[index++] = (byte) (0xFF); |
||||||
|
} |
||||||
|
} |
||||||
|
// copy sca and tpdu to ret
|
||||||
|
int scaLength = sca.length; |
||||||
|
tpduLength[0] = tpdu.length + 2; |
||||||
|
byte[] ret = new byte[scaLength + tpdu.length]; |
||||||
|
System.arraycopy(sca, 0, ret, 0, scaLength); |
||||||
|
System.arraycopy(tpdu, 0, ret, scaLength, tpdu.length); |
||||||
|
String r = new String(); |
||||||
|
for (int i = 0; i < ret.length; i++) { |
||||||
|
String s = Integer.toHexString((char) ret[i] & 0x00ff); |
||||||
|
if (s.length() == 1) |
||||||
|
s = "0" + s; |
||||||
|
r += s; |
||||||
|
} |
||||||
|
// System.out.println( r );
|
||||||
|
return r; |
||||||
|
} |
||||||
|
|
||||||
|
// swap the string and parse it as specail radix byte,just same binary code.
|
||||||
|
// note: the s must has two length string.
|
||||||
|
// eg. swap( "12" , 16 ) will return byte 33
|
||||||
|
// eg. swap( "68" , 16 ) will return byte -122
|
||||||
|
public static byte swap(String s, int radix) { |
||||||
|
byte b1 = Byte.parseByte(s.substring(0, 1), radix); |
||||||
|
byte b2 = Byte.parseByte(s.substring(1, 2), radix); |
||||||
|
return (byte) (b2 * radix + b1); |
||||||
|
} |
||||||
|
|
||||||
|
public String toString() { |
||||||
|
StringBuffer sb = new StringBuffer(); |
||||||
|
sb.append("The SMS Properties:\n"); |
||||||
|
sb.append("\nSerial Port=" + serialPort); |
||||||
|
sb.append("\nBaud=" + baud); |
||||||
|
sb.append("\nData Bits=" + data); |
||||||
|
sb.append("\nStop Bit=" + stop); |
||||||
|
sb.append("\nParity=" + parity); |
||||||
|
sb.append("\nSMS Center Phone=" + msgCenterPhone); |
||||||
|
return sb.toString(); |
||||||
|
} |
||||||
|
/* |
||||||
|
public static void mai1n(String[] args) { |
||||||
|
SendSMS sender = new SendSMS("13800210500", "COM20", 2);// SIM卡所在地短信中心号码、端口号、SIM卡类型默认2即可
|
||||||
|
int code = sender.sendSMS("18666665078", "Just for a test");// 接收号码、内容
|
||||||
|
System.out.println(code); |
||||||
|
}*/ |
||||||
|
} |
||||||
@ -0,0 +1,337 @@ |
|||||||
|
package com.back.communication; |
||||||
|
|
||||||
|
import java.io.DataInputStream; |
||||||
|
import java.io.IOException; |
||||||
|
import java.io.OutputStream; |
||||||
|
import java.util.Date; |
||||||
|
import java.util.TooManyListenersException; |
||||||
|
|
||||||
|
//import javax.comm.CommPortIdentifier;
|
||||||
|
//import javax.comm.SerialPort;
|
||||||
|
//import javax.comm.SerialPortEvent;
|
||||||
|
//import javax.comm.SerialPortEventListener;
|
||||||
|
import com.back.common.Common; |
||||||
|
import gnu.io.*; |
||||||
|
|
||||||
|
|
||||||
|
import com.back.action.Log; |
||||||
|
import com.back.protocol.GW3761; |
||||||
|
import com.back.protocol.Lon16; |
||||||
|
|
||||||
|
public class SerialComm implements SerialPortEventListener { |
||||||
|
|
||||||
|
public final static String PORT_OWER = "App"; |
||||||
|
|
||||||
|
private String portName; |
||||||
|
|
||||||
|
private CommPortIdentifier portId; |
||||||
|
|
||||||
|
private SerialPort serialPort; |
||||||
|
|
||||||
|
private DataInputStream inputStream; |
||||||
|
|
||||||
|
private OutputStream outputStream; |
||||||
|
|
||||||
|
private Object readWriteLock = new Object(); |
||||||
|
|
||||||
|
private Lon16 lon16 = new Lon16(); |
||||||
|
|
||||||
|
private GW3761 gw3761 = new GW3761(); |
||||||
|
|
||||||
|
private String clazzName = new Object() { |
||||||
|
public String getClassName() |
||||||
|
{ |
||||||
|
String clazzName = this.getClass().getName(); |
||||||
|
return clazzName.substring(0, clazzName.lastIndexOf('$')); |
||||||
|
} |
||||||
|
}.getClassName(); |
||||||
|
Boolean isread = false; |
||||||
|
String afncode = ""; |
||||||
|
Date wdate;// 写指令时间
|
||||||
|
int cmdid = 0; |
||||||
|
String wterminal = "";// 写指令地址
|
||||||
|
String rterminal = "";// 读指令地址
|
||||||
|
String protocol = "";// 协议类型
|
||||||
|
int Fn = 0;// 功能码
|
||||||
|
String batchtime = "";// 定采批次时间
|
||||||
|
String describe =""; //任务描述
|
||||||
|
String outdata = ""; //设置时命令
|
||||||
|
String taskidString ="";//定采任务号
|
||||||
|
|
||||||
|
public boolean isOpen; |
||||||
|
|
||||||
|
public boolean isStart; |
||||||
|
|
||||||
|
public static SerialComm Instance; |
||||||
|
|
||||||
|
public static SerialComm getInstance(String port) { |
||||||
|
if (Instance == null) { |
||||||
|
Instance = new SerialComm(port); |
||||||
|
} |
||||||
|
return Instance; |
||||||
|
} |
||||||
|
|
||||||
|
private SerialComm(String port) { |
||||||
|
isOpen = false; |
||||||
|
isStart = false; |
||||||
|
|
||||||
|
portName = port; |
||||||
|
} |
||||||
|
|
||||||
|
public void init() { |
||||||
|
if (isOpen) { |
||||||
|
close(); |
||||||
|
} |
||||||
|
|
||||||
|
try { |
||||||
|
// 根据传入的串口名创建串口标识
|
||||||
|
portId = CommPortIdentifier.getPortIdentifier(portName); |
||||||
|
|
||||||
|
// 打开串口并返回串口对象
|
||||||
|
serialPort = (SerialPort) portId.open(PORT_OWER, 2000); |
||||||
|
|
||||||
|
// 通过串口对象获得输入流
|
||||||
|
inputStream = new DataInputStream(serialPort.getInputStream()); |
||||||
|
|
||||||
|
// 通过串口对象获得输出流
|
||||||
|
outputStream = serialPort.getOutputStream(); |
||||||
|
|
||||||
|
isOpen = true; |
||||||
|
} catch (Exception ex) { |
||||||
|
isOpen = false; |
||||||
|
Log.writelog(clazzName,Thread.currentThread().getStackTrace()[1].getMethodName() + "->" + ex.getMessage()); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 启动串口 |
||||||
|
* |
||||||
|
* @param flag |
||||||
|
* 0为无校验 1为奇校验 2为偶校验 |
||||||
|
*/ |
||||||
|
public void start(int flag) throws Exception { |
||||||
|
if (!isOpen) { |
||||||
|
Log.writelog(clazzName,Thread.currentThread().getStackTrace()[1].getMethodName() + "->Com " + portName + "is Oppen"); |
||||||
|
return; |
||||||
|
} |
||||||
|
|
||||||
|
try{ |
||||||
|
// 设置串口监听对象
|
||||||
|
serialPort.addEventListener(this); |
||||||
|
|
||||||
|
// 设置串口数据可用
|
||||||
|
serialPort.notifyOnDataAvailable(true); |
||||||
|
|
||||||
|
Log.writelog(clazzName,Thread.currentThread().getStackTrace()[1].getMethodName() + "->addEventListener OK!" ); |
||||||
|
}catch (TooManyListenersException e) { |
||||||
|
Log.writelog(clazzName,Thread.currentThread().getStackTrace()[1].getMethodName() + "->Error:" + e.getMessage()); |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
switch (flag) { |
||||||
|
case 0: |
||||||
|
serialPort.setSerialPortParams(9600, SerialPort.DATABITS_8, SerialPort.STOPBITS_1, SerialPort.PARITY_NONE); |
||||||
|
break; |
||||||
|
case 1: |
||||||
|
serialPort.setSerialPortParams(9600, SerialPort.DATABITS_8, SerialPort.STOPBITS_1, SerialPort.PARITY_ODD); |
||||||
|
break; |
||||||
|
case 2: |
||||||
|
serialPort.setSerialPortParams(9600, SerialPort.DATABITS_8, SerialPort.STOPBITS_1, SerialPort.PARITY_EVEN); |
||||||
|
break; |
||||||
|
} |
||||||
|
isStart = true; |
||||||
|
} |
||||||
|
|
||||||
|
public void stop() { |
||||||
|
if (isStart) { |
||||||
|
// 设置串口数据是否可用
|
||||||
|
serialPort.notifyOnDataAvailable(false); |
||||||
|
|
||||||
|
// 移除串口监听事件
|
||||||
|
serialPort.removeEventListener(); |
||||||
|
|
||||||
|
isStart = false; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
public void close() { |
||||||
|
stop(); |
||||||
|
|
||||||
|
if (isOpen) { |
||||||
|
try { |
||||||
|
// 关闭流对象与串口对象
|
||||||
|
inputStream.close(); |
||||||
|
outputStream.close(); |
||||||
|
serialPort.close(); |
||||||
|
serialPort = null; |
||||||
|
|
||||||
|
isOpen = false; |
||||||
|
} catch (IOException ex) { |
||||||
|
Log.writelog(clazzName,Thread.currentThread().getStackTrace()[1].getMethodName() + "->" + ex.getMessage()); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
public void serialEvent(SerialPortEvent event) { |
||||||
|
switch (event.getEventType()) { |
||||||
|
case SerialPortEvent.BI: |
||||||
|
case SerialPortEvent.OE: |
||||||
|
case SerialPortEvent.FE: |
||||||
|
case SerialPortEvent.PE: |
||||||
|
case SerialPortEvent.CD: |
||||||
|
case SerialPortEvent.CTS: |
||||||
|
case SerialPortEvent.DSR: |
||||||
|
case SerialPortEvent.RI: |
||||||
|
case SerialPortEvent.OUTPUT_BUFFER_EMPTY: |
||||||
|
break; |
||||||
|
case SerialPortEvent.DATA_AVAILABLE: |
||||||
|
//System.out.println("SerialComm->serialEvent : DATA_AVAILABLE");
|
||||||
|
// 从串口获得数据,获取的数据以流的形式读取
|
||||||
|
readComm(); |
||||||
|
break; |
||||||
|
default: |
||||||
|
break; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 写指令到串口 |
||||||
|
* |
||||||
|
* @param cmdid |
||||||
|
* 指令ID |
||||||
|
* @param terminal |
||||||
|
* 集中器通信地址 |
||||||
|
* @param outdata |
||||||
|
* 下行报文 |
||||||
|
* @param ruletype |
||||||
|
* 协议类型 |
||||||
|
* @param afncode |
||||||
|
* 电表抄读用到 |
||||||
|
* @param timeout |
||||||
|
* 超时时间 |
||||||
|
* @throws InterruptedException |
||||||
|
*/ |
||||||
|
public synchronized void writeComm(int cmdid, String terminal, String outdata, String ruletype, String afncode, int Fn, int timeout, String batchtime, String responsetype,String taskidString) throws InterruptedException { |
||||||
|
synchronized (readWriteLock) { |
||||||
|
this.afncode = afncode; |
||||||
|
this.wdate = Common.getcurdate(); |
||||||
|
this.cmdid = cmdid; |
||||||
|
this.wterminal = terminal; |
||||||
|
this.rterminal = terminal; |
||||||
|
this.protocol = ruletype; |
||||||
|
this.Fn = Fn; |
||||||
|
this.batchtime = batchtime; |
||||||
|
this. describe = ""; |
||||||
|
this.outdata = outdata; |
||||||
|
this.taskidString = taskidString; |
||||||
|
|
||||||
|
if (cmdid==0) |
||||||
|
{ |
||||||
|
describe = "[Read Meter Tasks]";//抄表任务
|
||||||
|
Log.writelog(clazzName,Thread.currentThread().getStackTrace()[1].getMethodName() + "->[" + terminal + "]Write Comm Send:" + describe ); |
||||||
|
} |
||||||
|
|
||||||
|
try { |
||||||
|
Log.writelog(clazzName,Thread.currentThread().getStackTrace()[1].getMethodName() + "->[" + terminal + "]Write Comm Send:" + outdata); |
||||||
|
outdata = outdata.replaceAll("-", ""); |
||||||
|
|
||||||
|
if (outdata.length() > 0) { |
||||||
|
int len; |
||||||
|
byte[] getbytes; |
||||||
|
if (ruletype.equals("0001")) |
||||||
|
{ |
||||||
|
len = outdata.length(); |
||||||
|
getbytes = new byte[len + 1]; |
||||||
|
byte[] dataByte = outdata.getBytes(); |
||||||
|
for(int i=0;i<len;i++) |
||||||
|
{ |
||||||
|
getbytes[i] = dataByte[i]; |
||||||
|
} |
||||||
|
getbytes[len] = (byte)0x0d; |
||||||
|
} |
||||||
|
else |
||||||
|
{ |
||||||
|
len = outdata.length() / 2 + outdata.length() % 2; |
||||||
|
getbytes = new byte[len]; |
||||||
|
for (int i = 0; i < len; i++) { |
||||||
|
String temp = outdata.substring(i * 2, i * 2 + 2); |
||||||
|
getbytes[i] = (byte) Integer.parseInt(temp, 16); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
isread = false; |
||||||
|
outputStream.write(getbytes); |
||||||
|
if (!responsetype.equals("1")) {// 增加需应答时处理2011-06-28
|
||||||
|
long datediff = 0; |
||||||
|
Date cdate = Common.getcurdate(); |
||||||
|
while (datediff < timeout) { //超时处理
|
||||||
|
if (isread) |
||||||
|
break; |
||||||
|
cdate = Common.getcurdate(); |
||||||
|
datediff = cdate.getTime() - wdate.getTime(); |
||||||
|
Thread.sleep(5); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
if (!isread) {// 超时处理
|
||||||
|
if (ruletype.equals("0001")) {// 旧协议
|
||||||
|
lon16.ResolvingData(cmdid,this.outdata, rterminal, "", 3, "0001", batchtime,taskidString); |
||||||
|
} else if (ruletype.equals("0002")) {// 新协议 国网
|
||||||
|
gw3761.ResolvingData(cmdid, rterminal, "", 3, "0001", afncode, Fn, batchtime, taskidString,this.outdata); |
||||||
|
|
||||||
|
|
||||||
|
} |
||||||
|
Log.writelog(clazzName,Thread.currentThread().getStackTrace()[1].getMethodName() + "->[" + terminal + "]Read Comm数据超时"); |
||||||
|
} |
||||||
|
close();// 关闭串口
|
||||||
|
Log.writelog(clazzName,Thread.currentThread().getStackTrace()[1].getMethodName() + "->[" + terminal + "]Read Comm 关闭"); |
||||||
|
} |
||||||
|
} catch (IOException ex) { |
||||||
|
Log.writelog(clazzName,Thread.currentThread().getStackTrace()[1].getMethodName() + "->Error:" + ex.getMessage()); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
/** 用流读取数据,写事件表和写结果表 */ |
||||||
|
public void readComm() { |
||||||
|
int num = 0;// buffer中的数据长度
|
||||||
|
String receivedata = "";// 串口接收数据
|
||||||
|
byte[] readbuffer = new byte[1024]; |
||||||
|
byte[] buffer = new byte[1024]; |
||||||
|
int index = 0; |
||||||
|
try { |
||||||
|
Date cdate = Common.getcurdate(); //字节超时
|
||||||
|
Date wdate = Common.getcurdate(); |
||||||
|
long datediff = 0; |
||||||
|
while (datediff < 80) { |
||||||
|
if (inputStream.available() > 0) { |
||||||
|
num = inputStream.read(readbuffer); |
||||||
|
System.arraycopy(readbuffer, 0, buffer, index, num); |
||||||
|
index += num; |
||||||
|
wdate = Common.getcurdate(); |
||||||
|
} |
||||||
|
cdate = Common.getcurdate(); |
||||||
|
datediff = cdate.getTime() - wdate.getTime(); |
||||||
|
} |
||||||
|
|
||||||
|
} catch (IOException e) { |
||||||
|
Log.writelog(clazzName,Thread.currentThread().getStackTrace()[1].getMethodName() + "->ERROR:" + e.getMessage()); |
||||||
|
return; |
||||||
|
} |
||||||
|
receivedata += Common.GetHexStr(buffer, index); |
||||||
|
if (buffer[0]!=0x68) |
||||||
|
{ |
||||||
|
receivedata = receivedata.replace("-", "").replace("0D0A", ""); |
||||||
|
receivedata = Common.HexStr2AsciiStr(receivedata); |
||||||
|
} |
||||||
|
Log.writelog(clazzName,Thread.currentThread().getStackTrace()[1].getMethodName() + "->Read Data:" + receivedata); |
||||||
|
|
||||||
|
isread = true; |
||||||
|
if (protocol.equals("0001")) {// 旧协议
|
||||||
|
lon16.ResolvingData(cmdid,this.outdata, rterminal, receivedata, 0, "0001", batchtime,taskidString); |
||||||
|
} else {// 新协议
|
||||||
|
gw3761.ResolvingData(cmdid, rterminal, receivedata, 0, "0001", afncode, Fn, batchtime, taskidString,this.outdata); |
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
|
} |
||||||
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,335 @@ |
|||||||
|
package com.back.communication; |
||||||
|
|
||||||
|
import com.back.common.Common; |
||||||
|
import gnu.io.CommPortIdentifier; |
||||||
|
import gnu.io.NoSuchPortException; |
||||||
|
import gnu.io.PortInUseException; |
||||||
|
import gnu.io.SerialPort; |
||||||
|
import gnu.io.SerialPortEvent; |
||||||
|
import gnu.io.SerialPortEventListener; |
||||||
|
|
||||||
|
import java.io.DataInputStream; |
||||||
|
import java.io.IOException; |
||||||
|
import java.io.OutputStream; |
||||||
|
|
||||||
|
import com.back.action.Log; |
||||||
|
|
||||||
|
public class SerialSMS implements SerialPortEventListener { |
||||||
|
|
||||||
|
public final static String PORT_OWER = "SMS"; |
||||||
|
|
||||||
|
private boolean isOpen; |
||||||
|
|
||||||
|
private boolean isStart; |
||||||
|
|
||||||
|
private String portName; |
||||||
|
private String commSet; |
||||||
|
|
||||||
|
private CommPortIdentifier portId; |
||||||
|
|
||||||
|
private SerialPort serialPort; |
||||||
|
|
||||||
|
private DataInputStream inputStream; |
||||||
|
|
||||||
|
private OutputStream outputStream; |
||||||
|
|
||||||
|
private Object readWriteLock = new Object(); |
||||||
|
|
||||||
|
private String serialdata = ""; |
||||||
|
|
||||||
|
Boolean isread = false; |
||||||
|
|
||||||
|
private String clazzName = new Object() { |
||||||
|
public String getClassName() { |
||||||
|
String clazzName = this.getClass().getName(); |
||||||
|
return clazzName.substring(0, clazzName.lastIndexOf('$')); |
||||||
|
} |
||||||
|
}.getClassName(); |
||||||
|
|
||||||
|
public static SerialSMS Instance; |
||||||
|
|
||||||
|
public static SerialSMS getInstance(String port, String smsset) { |
||||||
|
if (Instance == null) { |
||||||
|
Instance = new SerialSMS(port, smsset); |
||||||
|
} |
||||||
|
|
||||||
|
return Instance; |
||||||
|
} |
||||||
|
|
||||||
|
private SerialSMS(String port, String smsset) { |
||||||
|
isOpen = false; |
||||||
|
isStart = false; |
||||||
|
|
||||||
|
portName = port; |
||||||
|
commSet = smsset; |
||||||
|
} |
||||||
|
|
||||||
|
public void init() throws IOException, Exception { |
||||||
|
if (isOpen) { |
||||||
|
close(); |
||||||
|
} |
||||||
|
|
||||||
|
try { |
||||||
|
// 根据传入的串口名创建串口标识
|
||||||
|
portId = CommPortIdentifier.getPortIdentifier(portName); |
||||||
|
// 打开串口并返回串口对象
|
||||||
|
serialPort = (SerialPort) portId.open(PORT_OWER, 2000); |
||||||
|
|
||||||
|
// 通过串口对象获得输入流
|
||||||
|
inputStream = new DataInputStream(serialPort.getInputStream()); |
||||||
|
|
||||||
|
// 通过串口对象获得输出流
|
||||||
|
outputStream = serialPort.getOutputStream(); |
||||||
|
|
||||||
|
serialPort.getReceiveTimeout(); |
||||||
|
|
||||||
|
isOpen = true; |
||||||
|
} catch (NoSuchPortException ex) { |
||||||
|
ex.printStackTrace(); |
||||||
|
System.err.println(ex.getMessage()); |
||||||
|
} catch (PortInUseException ex) { |
||||||
|
System.err.println(ex.getMessage()); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
public void start() throws Exception { |
||||||
|
if (!isOpen) { |
||||||
|
Log.writelog(clazzName, Thread.currentThread().getStackTrace()[1].getMethodName() + "->" |
||||||
|
+ portName + " has not been opened."); |
||||||
|
} |
||||||
|
|
||||||
|
// 设置串口监听对象
|
||||||
|
serialPort.addEventListener(this); |
||||||
|
|
||||||
|
// 设置串口数据可用
|
||||||
|
serialPort.notifyOnDataAvailable(true); |
||||||
|
|
||||||
|
/* 设置串口初始化参数,依次是波特率,校验位,数据位,停止位 */ |
||||||
|
String[] array = commSet.split(","); |
||||||
|
int baud = Integer.parseInt(array[0]); |
||||||
|
int databits = Integer.parseInt(array[2]); |
||||||
|
int stopbits = Integer.parseInt(array[3]); |
||||||
|
String parity = array[1].toLowerCase(); |
||||||
|
int intparity = 0; |
||||||
|
if (parity.equals("n")) { |
||||||
|
intparity = 0; |
||||||
|
} else if (parity.equals("o")) { |
||||||
|
intparity = 1; |
||||||
|
} else if (parity.equals("e")) { |
||||||
|
intparity = 2; |
||||||
|
} |
||||||
|
serialPort.setSerialPortParams(baud, databits, stopbits, intparity); |
||||||
|
|
||||||
|
isStart = true; |
||||||
|
} |
||||||
|
|
||||||
|
public void stop() { |
||||||
|
if (isStart) { |
||||||
|
// 设置串口数据是否可用
|
||||||
|
serialPort.notifyOnDataAvailable(false); |
||||||
|
|
||||||
|
// 移除串口监听事件
|
||||||
|
serialPort.removeEventListener(); |
||||||
|
|
||||||
|
isStart = false; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
public void close() { |
||||||
|
stop(); |
||||||
|
|
||||||
|
if (isOpen) { |
||||||
|
try { |
||||||
|
// 关闭流对象与串口对象
|
||||||
|
inputStream.close(); |
||||||
|
outputStream.close(); |
||||||
|
serialPort.close(); |
||||||
|
serialPort = null; |
||||||
|
|
||||||
|
isOpen = false; |
||||||
|
} catch (IOException ex) { |
||||||
|
Log.writelog(clazzName, Thread.currentThread().getStackTrace()[1].getMethodName() |
||||||
|
+ "->Error:" + ex.getMessage()); |
||||||
|
|
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
public void serialEvent(SerialPortEvent event) { |
||||||
|
switch (event.getEventType()) { |
||||||
|
case SerialPortEvent.BI: |
||||||
|
case SerialPortEvent.OE: |
||||||
|
case SerialPortEvent.FE: |
||||||
|
case SerialPortEvent.PE: |
||||||
|
case SerialPortEvent.CD: |
||||||
|
case SerialPortEvent.CTS: |
||||||
|
case SerialPortEvent.DSR: |
||||||
|
case SerialPortEvent.RI: |
||||||
|
case SerialPortEvent.OUTPUT_BUFFER_EMPTY: |
||||||
|
break; |
||||||
|
case SerialPortEvent.DATA_AVAILABLE: |
||||||
|
// 从串口获得数据,获取的数据以流的形式读取
|
||||||
|
readComm(); |
||||||
|
break; |
||||||
|
default: |
||||||
|
break; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
public boolean writeCommTxt(String phone, String Msg) { |
||||||
|
synchronized (readWriteLock) { |
||||||
|
boolean flag = false; |
||||||
|
|
||||||
|
try { |
||||||
|
String data = "AT+CMGF=1\r\n";// 文本发送
|
||||||
|
serialdata = ""; |
||||||
|
outputStream.write(data.getBytes()); |
||||||
|
Log.writelog(clazzName, Thread.currentThread().getStackTrace()[1].getMethodName() |
||||||
|
+ "->write AT+CMGF=1 .......1"); |
||||||
|
for (int i = 0; i < 5000; i++) // 2012-06-20
|
||||||
|
{ |
||||||
|
if (serialdata.contains("-4F-4B-")) { // OK
|
||||||
|
break; |
||||||
|
} |
||||||
|
|
||||||
|
Thread.sleep(1); |
||||||
|
} |
||||||
|
Log.writelog(clazzName, Thread.currentThread().getStackTrace()[1].getMethodName() |
||||||
|
+ "->write AT+CMGF=1 .......2"); |
||||||
|
if (serialdata.contains("-4F-4B-")) { |
||||||
|
serialdata = ""; |
||||||
|
flag = true; |
||||||
|
} else { |
||||||
|
return false; |
||||||
|
} |
||||||
|
|
||||||
|
data = "AT+CSCS=\"GSM\"\r\n"; |
||||||
|
serialdata = ""; |
||||||
|
outputStream.write(data.getBytes()); |
||||||
|
|
||||||
|
for (int i = 0; i < 500; i++) { |
||||||
|
if (serialdata.contains("-4F-4B-")) { |
||||||
|
break; |
||||||
|
} |
||||||
|
Thread.sleep(1); |
||||||
|
} |
||||||
|
serialdata = ""; |
||||||
|
|
||||||
|
// data = center + code;
|
||||||
|
serialdata = ""; |
||||||
|
Msg = ">" + Msg; |
||||||
|
outputStream.write(Msg.getBytes()); |
||||||
|
outputStream.write((char) 26);// ctrl+Z发送
|
||||||
|
for (int i = 0; i < 10000; i++) // 2012-06-20
|
||||||
|
{ |
||||||
|
|
||||||
|
if (serialdata.contains("-4F-4B-")) { |
||||||
|
break; |
||||||
|
} |
||||||
|
|
||||||
|
Thread.sleep(1); |
||||||
|
} |
||||||
|
|
||||||
|
} catch (Exception e) { |
||||||
|
Log.writelog(clazzName, Thread.currentThread().getStackTrace()[1].getMethodName() |
||||||
|
+ "->ERROR:" + e.toString()); |
||||||
|
e.printStackTrace(); |
||||||
|
} |
||||||
|
if (serialdata.contains("-4F-4B-")) { // 发送成功
|
||||||
|
flag = true; |
||||||
|
} else { |
||||||
|
flag = false; |
||||||
|
} |
||||||
|
return flag; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
/** 写指令到串口 */ |
||||||
|
public boolean writeComm(String center, String code) { |
||||||
|
synchronized (readWriteLock) { |
||||||
|
boolean flag = false; |
||||||
|
|
||||||
|
try { |
||||||
|
String data = "AT+CMGF=0\r\n";// 文本发送 设置为PDU模式
|
||||||
|
serialdata = ""; |
||||||
|
outputStream.write(data.getBytes()); |
||||||
|
Log.writelog(clazzName, Thread.currentThread().getStackTrace()[1].getMethodName() |
||||||
|
+ "->write AT+CMGF=0 .......1"); |
||||||
|
for (int i = 0; i < 5000; i++) // 2012-06-20
|
||||||
|
{ |
||||||
|
if (serialdata.contains("-4F-4B-")) { // OK
|
||||||
|
break; |
||||||
|
} |
||||||
|
|
||||||
|
Thread.sleep(1); |
||||||
|
} |
||||||
|
Log.writelog(clazzName, Thread.currentThread().getStackTrace()[1].getMethodName() |
||||||
|
+ "->write AT+CMGF=0 .......2"); |
||||||
|
if (serialdata.contains("-4F-4B-")) { |
||||||
|
serialdata = ""; |
||||||
|
flag = true; |
||||||
|
} else { |
||||||
|
return false; |
||||||
|
} |
||||||
|
|
||||||
|
if (flag) { |
||||||
|
int intLen = code.length() / 2; |
||||||
|
data = "AT+CMGS=" + intLen + "\r\n"; |
||||||
|
serialdata = ""; |
||||||
|
outputStream.write(data.getBytes()); |
||||||
|
|
||||||
|
for (int i = 0; i < 500; i++) { |
||||||
|
if (serialdata.contains("-4F-4B-")) { |
||||||
|
break; |
||||||
|
} |
||||||
|
Thread.sleep(1); |
||||||
|
} |
||||||
|
serialdata = ""; |
||||||
|
|
||||||
|
// data = center + code;
|
||||||
|
data = code; |
||||||
|
serialdata = ""; |
||||||
|
outputStream.write(data.getBytes()); |
||||||
|
outputStream.write((char) 26);// ctrl+Z发送
|
||||||
|
for (int i = 0; i < 10000; i++) // 2012-06-20
|
||||||
|
{ |
||||||
|
|
||||||
|
if (serialdata.contains("-4F-4B-")) { |
||||||
|
break; |
||||||
|
} |
||||||
|
|
||||||
|
Thread.sleep(1); |
||||||
|
} |
||||||
|
} |
||||||
|
} catch (Exception e) { |
||||||
|
Log.writelog(clazzName, Thread.currentThread().getStackTrace()[1].getMethodName() |
||||||
|
+ "->ERROR:" + e.toString()); |
||||||
|
e.printStackTrace(); |
||||||
|
} |
||||||
|
if (serialdata.contains("-4F-4B-")) { // 发送成功
|
||||||
|
flag = true; |
||||||
|
} else { |
||||||
|
flag = false; |
||||||
|
} |
||||||
|
return flag; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
/** 用流读取数据,写事件表和写结果表 */ |
||||||
|
public void readComm() { |
||||||
|
int num = 0;// buffer中的数据长度
|
||||||
|
byte[] readbuffer = new byte[1024]; |
||||||
|
try { |
||||||
|
if (inputStream.available() > 0) { |
||||||
|
num = inputStream.read(readbuffer); |
||||||
|
} else { |
||||||
|
return; |
||||||
|
} |
||||||
|
serialdata = serialdata + Common.GetHexStr(readbuffer, num); |
||||||
|
} catch (IOException e) { |
||||||
|
Log.writelog(clazzName, Thread.currentThread().getStackTrace()[1].getMethodName() |
||||||
|
+ "->ERROR:" + e.toString()); |
||||||
|
return; |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
@ -0,0 +1,251 @@ |
|||||||
|
package com.back.communication; |
||||||
|
|
||||||
|
import java.io.DataInputStream; |
||||||
|
import java.io.DataOutputStream; |
||||||
|
import java.io.IOException; |
||||||
|
import java.io.InputStream; |
||||||
|
import java.io.OutputStream; |
||||||
|
import java.net.Socket; |
||||||
|
import com.back.action.Log; |
||||||
|
import com.back.common.Common; |
||||||
|
import com.back.protocol.GW3761; |
||||||
|
import com.back.protocol.Lon16; |
||||||
|
|
||||||
|
public class SocketComm { |
||||||
|
|
||||||
|
Lon16 lon16 = new Lon16(); |
||||||
|
GW3761 gw3761 = new GW3761(); |
||||||
|
private String language = ""; |
||||||
|
private String clazzName = new Object() { |
||||||
|
public String getClassName() { |
||||||
|
String clazzName = this.getClass().getName(); |
||||||
|
return clazzName.substring(0, clazzName.lastIndexOf('$')); |
||||||
|
} |
||||||
|
}.getClassName(); |
||||||
|
|
||||||
|
public SocketComm(String language) { |
||||||
|
this.language = language; |
||||||
|
lon16.Setlanguage(language); |
||||||
|
gw3761.Setlanguage(language); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 发送Socket报文 |
||||||
|
* |
||||||
|
* @param threadid |
||||||
|
* 线程ID |
||||||
|
* @param ruletype |
||||||
|
* 规约类型 |
||||||
|
* @param terminal |
||||||
|
* 集中器地址 |
||||||
|
* @param command |
||||||
|
* 转发时的命令 |
||||||
|
* @param cmdid |
||||||
|
* 转发时的命令ID |
||||||
|
* @param ipadd |
||||||
|
* GPRS服务器地址 |
||||||
|
* @param port |
||||||
|
* GPRS服务器端口 |
||||||
|
* @param resend |
||||||
|
* 重发次数 |
||||||
|
* @param timeout |
||||||
|
* 超时时间 |
||||||
|
* @param afncode |
||||||
|
* @param pn |
||||||
|
* @param batchtime |
||||||
|
* 定采开始时间 |
||||||
|
* @param responsetype |
||||||
|
* 接收标志 1 不接收 2接收并作光控应答处理 |
||||||
|
* @param taskidString |
||||||
|
* 定采的数据时标 |
||||||
|
*/ |
||||||
|
public void Send(String threadid, String ruletype, String terminal, String command, int cmdid, String ipadd, |
||||||
|
int port, int resend, int timeout, String afncode, int pn, String batchtime, String responsetype, |
||||||
|
String taskidString) { |
||||||
|
int count = 0; |
||||||
|
int state = 0; |
||||||
|
|
||||||
|
String cmdreturn = ""; |
||||||
|
Socket socket = null; |
||||||
|
// 获得对应socket的输入/输出流
|
||||||
|
InputStream is = null; |
||||||
|
OutputStream os = null; |
||||||
|
// 建立数据流
|
||||||
|
DataInputStream dis = null; |
||||||
|
DataOutputStream dos = null; |
||||||
|
String describe = ""; |
||||||
|
// if (cmdid == 0) {
|
||||||
|
//
|
||||||
|
// describe = "[Auto tasks]";// 后台抄表任务
|
||||||
|
// }
|
||||||
|
try { |
||||||
|
socket = new Socket(ipadd, port); |
||||||
|
} catch (Exception e) {// socket连接失败
|
||||||
|
|
||||||
|
state = 4;// GPRS服务器连接失败
|
||||||
|
if (!describe.equals("")) |
||||||
|
Log.writelog(clazzName, Thread.currentThread().getStackTrace()[1].getMethodName() + "->[" + terminal |
||||||
|
+ ":" + threadid + ":" + String.valueOf(cmdid) + "] Send:" + e.getMessage() + " " + describe); |
||||||
|
else |
||||||
|
Log.writelog(clazzName, Thread.currentThread().getStackTrace()[1].getMethodName() + "->[" + threadid |
||||||
|
+ ":" + String.valueOf(cmdid) + "] ERROR:" + e.getMessage()); |
||||||
|
|
||||||
|
// 需要提示到界面,事务与前置机通信有问题. ??????????????????????
|
||||||
|
|
||||||
|
// 将定采数据或曲线命令保存在补抄表中
|
||||||
|
if (!ruletype.equals("0001")) { |
||||||
|
if (afncode == null || afncode.equals("")) |
||||||
|
gw3761.ResolvingData(cmdid, terminal, cmdreturn, state, "0002", afncode, pn, batchtime, |
||||||
|
taskidString, command); |
||||||
|
} |
||||||
|
// 2015 07 16 wwb 补抄数据
|
||||||
|
// gw3761.complementary_data(terminal,command,batchtime);
|
||||||
|
return; |
||||||
|
} |
||||||
|
|
||||||
|
if (cmdid == 0) { |
||||||
|
// 2017 10 15 定采任务 只抄一次
|
||||||
|
resend = 1; |
||||||
|
describe = "[Auto tasks]";// 后台抄表任务
|
||||||
|
} |
||||||
|
|
||||||
|
boolean luxAck = false;// 光控命令 应答成功
|
||||||
|
if (state == 0) { |
||||||
|
while (count < resend) {// 处理错误(超时)重发
|
||||||
|
try { |
||||||
|
socket.setSoTimeout(60000);// 设置超时时间
|
||||||
|
// 获得对应socket的输入/输出流
|
||||||
|
is = socket.getInputStream(); |
||||||
|
os = socket.getOutputStream(); |
||||||
|
// 建立数据流
|
||||||
|
dis = new DataInputStream(is); |
||||||
|
dos = new DataOutputStream(os); |
||||||
|
if (!describe.equals("")) |
||||||
|
Log.writelog(clazzName, Thread.currentThread().getStackTrace()[1].getMethodName() + "->[" |
||||||
|
+ terminal + "]=>GPRS: " + describe); |
||||||
|
Log.writelog(clazzName, Thread.currentThread().getStackTrace()[1].getMethodName() + "->[" + terminal |
||||||
|
+ "]cammondid" + cmdid + "=>GPRS:" + command); |
||||||
|
|
||||||
|
byte[] getbytes; |
||||||
|
int len; |
||||||
|
|
||||||
|
if (ruletype.equals("0001"))// Lon16
|
||||||
|
{ // LON16是ASC码 可以直接发送
|
||||||
|
// byte[] str = lon16.GetSendCmd(terminal,command);
|
||||||
|
Log.writelog(clazzName, Thread.currentThread().getStackTrace()[1].getMethodName() |
||||||
|
+ "->lon16 Send Cmd :" + command); |
||||||
|
dos.write(lon16.GetSendCmd(terminal, command));// 转发到服务器
|
||||||
|
} else { |
||||||
|
command = command.replace("-", ""); |
||||||
|
|
||||||
|
if (!command.substring(0, 2).equals("68")) {// 服务器内部命令
|
||||||
|
// dos.write(command.getBytes());//
|
||||||
|
// 转发到服务器
|
||||||
|
dos.write(lon16.GetSendCmd("0000" + terminal, command));// 转发到服务器
|
||||||
|
} else { // 正常的国网命令
|
||||||
|
len = command.length() / 2 + command.length() % 2; |
||||||
|
getbytes = new byte[len]; |
||||||
|
for (int i = 0; i < len; i++) { |
||||||
|
String temp = command.substring(i * 2, i * 2 + 2); |
||||||
|
getbytes[i] = (byte) Integer.parseInt(temp, 16); |
||||||
|
} |
||||||
|
dos.write(getbytes);// 转发到服务器
|
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
if (!responsetype.equals("1")) {// 增加需应答时处理2011-06-28
|
||||||
|
// 从服务器获取数据
|
||||||
|
int num = 0;// buffer中的数据长度
|
||||||
|
byte[] readbuffer = new byte[1024]; |
||||||
|
num = dis.read(readbuffer); |
||||||
|
// 报文头是68--3761协议指令
|
||||||
|
if (readbuffer[0] == 0x68) { |
||||||
|
cmdreturn = Common.GetHexStr(readbuffer, num); |
||||||
|
Log.writelog(clazzName, Thread.currentThread().getStackTrace()[1].getMethodName() + "->[" |
||||||
|
+ terminal + "]<= GPRS: cmdreturn->" + cmdreturn); |
||||||
|
cmdreturn = cmdreturn.substring(0, cmdreturn.length() - 1); |
||||||
|
|
||||||
|
if (readbuffer.length > 20)// 应答确认帧
|
||||||
|
{ |
||||||
|
if ((readbuffer[12] == 0x00) && (readbuffer[14] == 0x00) && (readbuffer[15] == 0x00) |
||||||
|
&& (readbuffer[16] == 0x01) && (readbuffer[17] == 0x00)) { |
||||||
|
luxAck = true; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
} else {// 其它状态
|
||||||
|
cmdreturn = Common.GetHexStr(readbuffer, num); |
||||||
|
Log.writelog(clazzName, Thread.currentThread().getStackTrace()[1].getMethodName() + "->[" |
||||||
|
+ terminal + "]<= GPRS: cmdreturn->" + cmdreturn); |
||||||
|
// 转成ASC码
|
||||||
|
cmdreturn = cmdreturn.replace("-", "").replace("0D0A", ""); |
||||||
|
cmdreturn = Common.HexStr2AsciiStr(cmdreturn); |
||||||
|
cmdreturn = cmdreturn.substring(13); |
||||||
|
|
||||||
|
} |
||||||
|
if (cmdreturn.equals("")) {// 接收数据超时
|
||||||
|
Log.writelog(clazzName, Thread.currentThread().getStackTrace()[1].getMethodName() + "->[" |
||||||
|
+ terminal + "]<= GPRS: time out!" + describe); |
||||||
|
} else {// 接收到指令
|
||||||
|
Log.writelog(clazzName, Thread.currentThread().getStackTrace()[1].getMethodName() + "->[" |
||||||
|
+ terminal + "]<=GPRS:" + cmdreturn); |
||||||
|
} |
||||||
|
} |
||||||
|
break; |
||||||
|
} catch (Exception e) {// 接收超时
|
||||||
|
Log.writelog(clazzName, Thread.currentThread().getStackTrace()[1].getMethodName() + "->[" + terminal |
||||||
|
+ "]<= read Error! " + e.getMessage()); |
||||||
|
state = 3; |
||||||
|
count += 1; |
||||||
|
} |
||||||
|
} |
||||||
|
try { |
||||||
|
dis.close(); // 关闭数据输入流
|
||||||
|
dos.close(); // 关闭数据输出流
|
||||||
|
is.close(); // 关闭输入流
|
||||||
|
os.close(); // 关闭输出流
|
||||||
|
socket.close(); // 关闭socket
|
||||||
|
dis = null; |
||||||
|
dos = null; |
||||||
|
is = null; |
||||||
|
os = null; |
||||||
|
socket = null; |
||||||
|
} catch (IOException e) { |
||||||
|
e.printStackTrace(); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
// 光控处理 20180421
|
||||||
|
// if (luxAck==true && cmdid == 0)
|
||||||
|
// {
|
||||||
|
// com.back.protocol.Protocol.updateTerminalsLuxState(terminal);
|
||||||
|
// cmdreturn = "";
|
||||||
|
// return;
|
||||||
|
// }
|
||||||
|
|
||||||
|
// 写入结果表
|
||||||
|
if (cmdreturn.endsWith("No Connected")) { |
||||||
|
state = 1; |
||||||
|
if (!command.equals("PEAK")) |
||||||
|
cmdreturn = ""; |
||||||
|
} else if (cmdreturn.endsWith("Busy")) { |
||||||
|
state = 2; |
||||||
|
cmdreturn = ""; |
||||||
|
// batchtime taskidString
|
||||||
|
// if (!taskidString.equals(""))//再重新定采数据
|
||||||
|
// com.back.protocol.Protocol.upatetempmeters(batchtime,
|
||||||
|
// taskidString);
|
||||||
|
} |
||||||
|
|
||||||
|
if (cmdreturn.equals("")) |
||||||
|
Log.writelog(clazzName, Thread.currentThread().getStackTrace()[1].getMethodName() + "->[" + terminal |
||||||
|
+ "]<= GPRS: time out!" + describe); |
||||||
|
|
||||||
|
if (ruletype.equals("0001")) {// 龙电协议Lon16
|
||||||
|
lon16.ResolvingData(cmdid, command, terminal, cmdreturn, state, "0002", batchtime, taskidString); |
||||||
|
} else {// 国网3761协议
|
||||||
|
gw3761.ResolvingData(cmdid, terminal, cmdreturn, state, "0002", afncode, pn, batchtime, taskidString, |
||||||
|
command); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
@ -0,0 +1,922 @@ |
|||||||
|
package com.back.communication; |
||||||
|
|
||||||
|
import java.io.DataInputStream; |
||||||
|
import java.io.DataOutputStream; |
||||||
|
import java.io.IOException; |
||||||
|
import java.io.InputStream; |
||||||
|
import java.io.OutputStream; |
||||||
|
import java.net.Socket; |
||||||
|
import java.sql.ResultSet; |
||||||
|
import java.text.ParseException; |
||||||
|
import java.text.SimpleDateFormat; |
||||||
|
import java.util.ArrayList; |
||||||
|
import java.util.Date; |
||||||
|
import java.util.LinkedList; |
||||||
|
import java.util.List; |
||||||
|
|
||||||
|
import com.back.action.Log; |
||||||
|
import com.back.common.Common; |
||||||
|
import com.back.jdbc.SQLHelper; |
||||||
|
import com.back.protocol.GW3761; |
||||||
|
import com.back.protocol.Lon16; |
||||||
|
|
||||||
|
/** |
||||||
|
* 485总线集中器处理流程处理 |
||||||
|
* 适用于 RJ45转485 的转换器 |
||||||
|
* @author Administrator |
||||||
|
* |
||||||
|
*/ |
||||||
|
public class SocketComm485 { |
||||||
|
|
||||||
|
public static int beat485;// 485集中器跳时间 (毫秒)
|
||||||
|
public static int comTimeOut485;// 集中器连接串口(毫秒)
|
||||||
|
public final static String PORT_OWER = "App"; |
||||||
|
|
||||||
|
private LinkedList<CmdObject485> cmdQueue = new LinkedList<CmdObject485>(); // 命令处理队列
|
||||||
|
private List<String> termina485lList = new ArrayList<String>(); // 485集中器队列
|
||||||
|
String receivedata = "";// 串口接收数据
|
||||||
|
private int msg[] = new int[2024]; |
||||||
|
|
||||||
|
private int readMsg[] = new int[2024]; // 接收缓存
|
||||||
|
private int readMsgCount = 0; // 接收到的字节数
|
||||||
|
|
||||||
|
String ipadd = "192.168.1.40"; |
||||||
|
int port = 2323; |
||||||
|
|
||||||
|
Boolean isread = false; |
||||||
|
private boolean pCmd = false; |
||||||
|
|
||||||
|
Lon16 lon16 = new Lon16(); |
||||||
|
GW3761 gw3761 = new GW3761(); |
||||||
|
private String clazzName = new Object() { |
||||||
|
public String getClassName() |
||||||
|
{ |
||||||
|
String clazzName = this.getClass().getName(); |
||||||
|
return clazzName.substring(0, clazzName.lastIndexOf('$')); |
||||||
|
} |
||||||
|
}.getClassName(); |
||||||
|
|
||||||
|
|
||||||
|
/** |
||||||
|
* 485总线任务 |
||||||
|
* |
||||||
|
* @throws InterruptedException |
||||||
|
*/ |
||||||
|
public void RS485Bus_Task() throws InterruptedException { |
||||||
|
// 获取485集中器
|
||||||
|
String strsql = "SELECT comid FROM terminals WHERE terminals.ComModel='0003'"; |
||||||
|
java.sql.Statement stmt = null; |
||||||
|
ResultSet rSet = SQLHelper.getResultSet(strsql); |
||||||
|
if (rSet == null) { |
||||||
|
return; |
||||||
|
} |
||||||
|
|
||||||
|
termina485lList.clear(); |
||||||
|
// 获取485集中器通信地址
|
||||||
|
try { |
||||||
|
while (rSet.next()) { |
||||||
|
termina485lList.add(rSet.getString("comid")); |
||||||
|
} |
||||||
|
|
||||||
|
} catch (Exception e) { |
||||||
|
Log.writelog(clazzName, |
||||||
|
Thread.currentThread().getStackTrace()[1].getMethodName() |
||||||
|
+ "->Load terminal 485 ERROR:" + e.getMessage()); |
||||||
|
} |
||||||
|
|
||||||
|
try { |
||||||
|
stmt = rSet.getStatement(); |
||||||
|
rSet.close(); |
||||||
|
stmt.close(); |
||||||
|
rSet = null; |
||||||
|
stmt = null; |
||||||
|
} catch (Exception e) { |
||||||
|
Log.writelog(clazzName, |
||||||
|
Thread.currentThread().getStackTrace()[1].getMethodName() |
||||||
|
+ "->Close ERROR:" + e.getMessage()); |
||||||
|
} |
||||||
|
String comidString = ""; |
||||||
|
int count = 0; |
||||||
|
int tCount = termina485lList.size(); |
||||||
|
// 事件轮巡时间 3S
|
||||||
|
int iMax = beat485 / 100 / tCount; |
||||||
|
if (iMax < 1) |
||||||
|
iMax = 1; |
||||||
|
|
||||||
|
|
||||||
|
//建 立 TCP 连接
|
||||||
|
try { |
||||||
|
|
||||||
|
} catch (Exception e) { |
||||||
|
// TODO Auto-generated catch block
|
||||||
|
e.printStackTrace(); |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
ipadd = "192.168.1.40"; |
||||||
|
port = 2323; |
||||||
|
|
||||||
|
// 485集中器轮巡处理
|
||||||
|
while (termina485lList.size() > 0) { |
||||||
|
|
||||||
|
if (cmdQueue.size() > 0) // 页面任务
|
||||||
|
{ // 转发命令处理
|
||||||
|
CmdObject485 cmdObject485 = cmdQueue.get(0); |
||||||
|
cmdQueue.remove(0); |
||||||
|
|
||||||
|
//获取集中器所在 中断器的 IP地址
|
||||||
|
ipadd = getConvertIP(cmdObject485.terminal).trim(); |
||||||
|
if (ipadd.equals("")) |
||||||
|
{ //中断转换器的 IP地址无
|
||||||
|
continue; |
||||||
|
} |
||||||
|
|
||||||
|
pCmd = true; |
||||||
|
Send(cmdObject485.ruletype,cmdObject485.terminal, |
||||||
|
cmdObject485.outdata, cmdObject485.cmdid, ipadd,port,1,comTimeOut485,"",0,"", |
||||||
|
cmdObject485.responsetype, ""); |
||||||
|
// 清除相应集中器
|
||||||
|
int i = termina485lList.indexOf(cmdObject485.cmdid); |
||||||
|
if (i > -1) |
||||||
|
termina485lList.remove(i); |
||||||
|
|
||||||
|
continue; |
||||||
|
} |
||||||
|
count++; |
||||||
|
Thread.sleep(100); |
||||||
|
// 如果此处理轮巡周期长的话,
|
||||||
|
|
||||||
|
if (count < iMax) { |
||||||
|
continue; |
||||||
|
} |
||||||
|
pCmd = false; |
||||||
|
count = 0; |
||||||
|
comidString = termina485lList.get(0); |
||||||
|
termina485lList.remove(0); |
||||||
|
|
||||||
|
ipadd = getConvertIP(comidString).trim(); |
||||||
|
if (ipadd.equals("")) |
||||||
|
{ //中断转换器的 IP地址无
|
||||||
|
continue; |
||||||
|
} |
||||||
|
// 轮巡任务处理****************************************
|
||||||
|
try { |
||||||
|
BeatTask(comidString); |
||||||
|
} catch (Exception e) { |
||||||
|
Log.writelog(clazzName, Thread.currentThread() |
||||||
|
.getStackTrace()[1].getMethodName() |
||||||
|
+ "->[" |
||||||
|
+ comidString + "]BeatTask Error:" + e.getMessage()); |
||||||
|
} |
||||||
|
|
||||||
|
}// termina485lList.size() > 0
|
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* |
||||||
|
* @param comidString |
||||||
|
* @return |
||||||
|
*/ |
||||||
|
private String getConvertIP(String comidString) { |
||||||
|
String sql = "select convertIP from terminals where comid='" |
||||||
|
+ comidString + "'"; |
||||||
|
java.sql.Statement stmt = null; |
||||||
|
ResultSet rSet = SQLHelper.getResultSet(sql); |
||||||
|
if (rSet == null) { |
||||||
|
return ""; |
||||||
|
} |
||||||
|
String strIp = ""; |
||||||
|
try { |
||||||
|
while (rSet.next()) { |
||||||
|
strIp = rSet.getString("convertIP"); |
||||||
|
} |
||||||
|
} catch (Exception e) { |
||||||
|
Log.writelog(clazzName, |
||||||
|
Thread.currentThread().getStackTrace()[1].getMethodName() |
||||||
|
+ "->ERROR:" + e.getMessage()); |
||||||
|
} |
||||||
|
|
||||||
|
try { |
||||||
|
stmt = rSet.getStatement(); |
||||||
|
rSet.close(); |
||||||
|
stmt.close(); |
||||||
|
rSet = null; |
||||||
|
stmt = null; |
||||||
|
} catch (Exception e) { |
||||||
|
Log.writelog( |
||||||
|
clazzName, |
||||||
|
Thread.currentThread().getStackTrace()[1] |
||||||
|
.getMethodName() + "->ERROR:" + e.getMessage()); |
||||||
|
} |
||||||
|
|
||||||
|
return strIp; |
||||||
|
} |
||||||
|
/** |
||||||
|
* 更新485集中器状态 |
||||||
|
* |
||||||
|
* @param comidString |
||||||
|
* @param onLineSate |
||||||
|
*/ |
||||||
|
private void UpdateTerminalOnLineState(String comidString, |
||||||
|
boolean onLineSate) { |
||||||
|
String sql = ""; |
||||||
|
if (onLineSate) |
||||||
|
sql = "update terminals set onlinestate=1,onlinetime='" |
||||||
|
+ Common.getDateStr0() + "'" + "where comid='" |
||||||
|
+ comidString + "'"; |
||||||
|
else |
||||||
|
sql = "update terminals set onlinestate=0,onlinetime='" |
||||||
|
+ Common.getDateStr0() + "'" + "where comid='" |
||||||
|
+ comidString + "'"; |
||||||
|
SQLHelper.ExecSql(sql); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 校时处理 |
||||||
|
*/ |
||||||
|
private boolean CheckTime(String comidString) { |
||||||
|
// 获取报文中时间
|
||||||
|
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); |
||||||
|
|
||||||
|
String tempString = "20" + Integer.toHexString(readMsg[23]) + "-" |
||||||
|
+ Integer.toHexString(readMsg[22] & 0x3F) + "-" |
||||||
|
+ Integer.toHexString(readMsg[21]) + " " |
||||||
|
+ Integer.toHexString(readMsg[20]) + ":" |
||||||
|
+ Integer.toHexString(readMsg[19]) + ":" |
||||||
|
+ Integer.toHexString(readMsg[18]); |
||||||
|
try { |
||||||
|
Date date = sdf.parse(tempString); |
||||||
|
// 计算时差
|
||||||
|
long diff = (new Date()).getTime() - date.getTime(); |
||||||
|
long minute = diff / (60 * 1000); |
||||||
|
if (minute > 5) { |
||||||
|
SendCMDCheckTime(comidString); |
||||||
|
} |
||||||
|
} catch (ParseException e) { |
||||||
|
// TODO Auto-generated catch block
|
||||||
|
Log.writelog(clazzName, |
||||||
|
Thread.currentThread().getStackTrace()[1].getMethodName() |
||||||
|
+ "->[" + comidString + "]Time Msg Error:" |
||||||
|
+ this.receivedata); |
||||||
|
return false; |
||||||
|
} |
||||||
|
return true; |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 发送校时命令 A5 F31 对时命令 |
||||||
|
* |
||||||
|
* @param comidString |
||||||
|
*/ |
||||||
|
private void SendCMDCheckTime(String comidString) { |
||||||
|
Date date = new Date(); |
||||||
|
SimpleDateFormat format = new SimpleDateFormat("yy MM dd HH mm ss"); |
||||||
|
String[] time = format.format(date).split(" "); |
||||||
|
|
||||||
|
String strMsgString = "00 00 40 03 " + time[5] + " " + time[4] + " " |
||||||
|
+ time[3] + " " + time[2] + " " + time[1] + " " + time[0]; |
||||||
|
SendCmd(comidString, "A5", strMsgString); |
||||||
|
if (!isread) { |
||||||
|
Log.writelog(clazzName, |
||||||
|
Thread.currentThread().getStackTrace()[1].getMethodName() |
||||||
|
+ "->[" + comidString + "]Check Clock Out Time!"); |
||||||
|
return; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 读取事件 |
||||||
|
* |
||||||
|
* @param comidString |
||||||
|
*/ |
||||||
|
private void ReadEvent(String comidString) { |
||||||
|
int control = readMsg[6]; |
||||||
|
// 无事件标识
|
||||||
|
if ((control & 0x20) == 0) |
||||||
|
return; |
||||||
|
// 确信EC的位置
|
||||||
|
int seq = readMsg[13]; |
||||||
|
int ec = 0; |
||||||
|
int dbec = 0; |
||||||
|
if ((seq & 0x80) > 0) { |
||||||
|
ec = readMsg[readMsgCount - 10]; |
||||||
|
} else { |
||||||
|
ec = readMsg[readMsgCount - 4]; |
||||||
|
} |
||||||
|
|
||||||
|
// 加载数据库 重要事件 计数器
|
||||||
|
String strsql = "select ec from terminals where comid='" + comidString |
||||||
|
+ "'"; |
||||||
|
|
||||||
|
java.sql.Statement stmt = null; |
||||||
|
ResultSet rSet = SQLHelper.getResultSet(strsql); |
||||||
|
if (rSet == null) { |
||||||
|
return; |
||||||
|
} |
||||||
|
|
||||||
|
try { |
||||||
|
while (rSet.next()) { |
||||||
|
ec = rSet.getInt("ec"); |
||||||
|
} |
||||||
|
} catch (Exception e) { |
||||||
|
Log.writelog(clazzName, |
||||||
|
Thread.currentThread().getStackTrace()[1].getMethodName() |
||||||
|
+ "->Get Ec from DataBase ERROR:" + e.getMessage()); |
||||||
|
} |
||||||
|
|
||||||
|
try { |
||||||
|
stmt = rSet.getStatement(); |
||||||
|
rSet.close(); |
||||||
|
stmt.close(); |
||||||
|
rSet = null; |
||||||
|
stmt = null; |
||||||
|
} catch (Exception e) { |
||||||
|
Log.writelog(clazzName, |
||||||
|
Thread.currentThread().getStackTrace()[1].getMethodName() |
||||||
|
+ "->Close ERROR:" + e.getMessage()); |
||||||
|
} |
||||||
|
|
||||||
|
if (dbec!=ec) |
||||||
|
return; |
||||||
|
int y =0; |
||||||
|
|
||||||
|
y= ec- dbec; |
||||||
|
if (ec<dbec) |
||||||
|
y= y + 256; |
||||||
|
|
||||||
|
if (y>20) |
||||||
|
ec = (dbec + 20) & 0xFF; |
||||||
|
//读事件 只读一条
|
||||||
|
String strMsgString = "00 00 01 00 " + Common.dec2Hex(dbec,2) + " " + Common.dec2Hex(ec,2); |
||||||
|
|
||||||
|
pCmd = true; |
||||||
|
SendCmd(comidString, "0E", strMsgString); |
||||||
|
|
||||||
|
|
||||||
|
//更新数据库中记数器
|
||||||
|
strsql = "update temrinals set ec=" + String.valueOf(ec) + " where comid='" + comidString |
||||||
|
+ "'"; |
||||||
|
SQLHelper.ExecSql(strsql); |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
/* |
||||||
|
* 命令是否合法 |
||||||
|
*/ |
||||||
|
private boolean CheckMsg(String comidString) { |
||||||
|
if (readMsgCount < 20) // 长度不足
|
||||||
|
{ |
||||||
|
Log.writelog(clazzName, |
||||||
|
Thread.currentThread().getStackTrace()[1].getMethodName() |
||||||
|
+ "->[" + comidString + "]Length Error:" |
||||||
|
+ this.receivedata); |
||||||
|
return false; |
||||||
|
} |
||||||
|
if (readMsg[0] != 0x68) // 第一个字节不是68
|
||||||
|
{ |
||||||
|
Log.writelog(clazzName, |
||||||
|
Thread.currentThread().getStackTrace()[1].getMethodName() |
||||||
|
+ "->[" + comidString + "]First Byte Not 68 Error:" |
||||||
|
+ this.receivedata); |
||||||
|
return false; |
||||||
|
} |
||||||
|
if (readMsg[1] != readMsg[3] || readMsg[2] != readMsg[4]) // 两个长度不对
|
||||||
|
{ |
||||||
|
Log.writelog(clazzName, |
||||||
|
Thread.currentThread().getStackTrace()[1].getMethodName() |
||||||
|
+ "->[" + comidString + "]Length Byte Error:" |
||||||
|
+ this.receivedata); |
||||||
|
return false; |
||||||
|
} |
||||||
|
|
||||||
|
// 报文长度
|
||||||
|
int temp = (readMsg[1] + (readMsg[2] << 8)) >> 2 + 8; |
||||||
|
if (temp != readMsgCount) { |
||||||
|
Log.writelog(clazzName, |
||||||
|
Thread.currentThread().getStackTrace()[1].getMethodName() |
||||||
|
+ "->[" + comidString + "]Msg Length Error:" |
||||||
|
+ this.receivedata); |
||||||
|
return false; |
||||||
|
} |
||||||
|
|
||||||
|
// 计算校验和
|
||||||
|
int iCS = 0; |
||||||
|
for (int i = 6; i < readMsgCount; i++) { |
||||||
|
iCS = iCS + readMsg[i]; |
||||||
|
} |
||||||
|
iCS = iCS & 0xFF; |
||||||
|
|
||||||
|
if (iCS != readMsg[readMsgCount - 2]) { |
||||||
|
Log.writelog(clazzName, |
||||||
|
Thread.currentThread().getStackTrace()[1].getMethodName() |
||||||
|
+ "->[" + comidString + "]CS Error:" |
||||||
|
+ this.receivedata); |
||||||
|
return false; |
||||||
|
} |
||||||
|
|
||||||
|
// 通信地址 不对应
|
||||||
|
String comid = Integer.toHexString(readMsg[8]) |
||||||
|
+ Integer.toHexString(readMsg[7]) |
||||||
|
+ Integer.toHexString(readMsg[10]) |
||||||
|
+ Integer.toHexString(readMsg[9]); |
||||||
|
if (comid.equals(comidString) == false) { |
||||||
|
Log.writelog(clazzName, |
||||||
|
Thread.currentThread().getStackTrace()[1].getMethodName() |
||||||
|
+ "->[" + comidString + "]Comid Error:" |
||||||
|
+ this.receivedata); |
||||||
|
return false; |
||||||
|
} |
||||||
|
return true; |
||||||
|
} |
||||||
|
|
||||||
|
private void BeatTask(String comidString) { |
||||||
|
// 下发读取时钟命令 AC 00 00 01 00
|
||||||
|
SendCmd(comidString, "AC", "00 00 01 00"); |
||||||
|
UpdateTerminalOnLineState(comidString, isread); |
||||||
|
if (!isread) {// 不在线
|
||||||
|
// 更新集中器在线状态
|
||||||
|
return; |
||||||
|
} |
||||||
|
if (this.receivedata.trim().equals("")) |
||||||
|
return; |
||||||
|
|
||||||
|
try { |
||||||
|
if (CheckMsg(comidString) == false)// 没有通过数据校验
|
||||||
|
{ |
||||||
|
return; |
||||||
|
} |
||||||
|
// 校时处理
|
||||||
|
CheckTime(comidString); |
||||||
|
// 事件读取
|
||||||
|
ReadEvent(comidString); |
||||||
|
} catch (Exception e) { |
||||||
|
// TODO: handle exception
|
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 下发集中器命令 |
||||||
|
* |
||||||
|
* @param terminalComid |
||||||
|
* @param Afn |
||||||
|
* @param |
||||||
|
*/ |
||||||
|
private void SendCmd(String terminalComid, String Afn, String Data) { |
||||||
|
cmdinfor.Create(Afn, terminalComid, Data, GetPFC(), false); |
||||||
|
String outdata = GetSendCmd(cmdinfor); |
||||||
|
Send("0002",terminalComid, |
||||||
|
outdata, 0, ipadd,port,1,comTimeOut485,"",0,"", |
||||||
|
"1", ""); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 发送Socket报文 |
||||||
|
* @param ruletype 线程ID |
||||||
|
* @param ruletype 规约类型 |
||||||
|
* @param terminal 集中器地址 |
||||||
|
* @param command 转发时的命令 |
||||||
|
* @param cmdid 转发时的命令ID |
||||||
|
* @param ipadd GPRS服务器地址 |
||||||
|
* @param port GPRS服务器端口 |
||||||
|
* @param resend 重发次数 |
||||||
|
* @param timeout 超时时间 |
||||||
|
* @param afncode |
||||||
|
* @param pn |
||||||
|
* @param batchtime 定采开始时间 |
||||||
|
* @param responsetype 接收标志 1 不接收 |
||||||
|
* @param taskidString 定采的数据时标 |
||||||
|
*/ |
||||||
|
public void Send(String ruletype, String terminal, String command, int cmdid, String ipadd, int port, int resend, int timeout, String afncode, int pn, String batchtime, |
||||||
|
String responsetype, String taskidString) { |
||||||
|
|
||||||
|
int count = 0; |
||||||
|
int state = 0; |
||||||
|
|
||||||
|
String cmdreturn = ""; |
||||||
|
Socket socket = null; |
||||||
|
// 获得对应socket的输入/输出流
|
||||||
|
InputStream is = null; |
||||||
|
OutputStream os = null; |
||||||
|
// 建立数据流
|
||||||
|
DataInputStream dis = null; |
||||||
|
DataOutputStream dos = null; |
||||||
|
String describe=""; |
||||||
|
if (cmdid==0) |
||||||
|
{ |
||||||
|
describe = "[Auto Tasks]";//后抄表任务
|
||||||
|
} |
||||||
|
try { |
||||||
|
socket = new Socket(ipadd, port); |
||||||
|
} catch (Exception e) {// socket连接失败
|
||||||
|
|
||||||
|
state = 4;// GPRS服务器连接失败
|
||||||
|
if (!describe.equals("")) |
||||||
|
Log.writelog(clazzName,Thread.currentThread().getStackTrace()[1].getMethodName() + "->[" +terminal +":"+ String.valueOf(cmdid)+ "] Send:" + e.getMessage() + " " + describe); |
||||||
|
else |
||||||
|
Log.writelog(clazzName,Thread.currentThread().getStackTrace()[1].getMethodName() + "->[" + terminal + ":"+ String.valueOf(cmdid)+ "] ERROR:" + e.getMessage()); |
||||||
|
|
||||||
|
|
||||||
|
//将定采数据或曲线命令保存在补抄表中
|
||||||
|
if (!ruletype.equals("0001")) { |
||||||
|
if (afncode ==null || afncode.equals("") ) |
||||||
|
gw3761.ResolvingData(cmdid, terminal, cmdreturn, state, "0002", afncode, pn, batchtime, taskidString,command); |
||||||
|
} |
||||||
|
|
||||||
|
return; |
||||||
|
} |
||||||
|
|
||||||
|
if (state == 0) { |
||||||
|
while (count < resend) {// 处理错误(超时)重发
|
||||||
|
try { |
||||||
|
socket.setSoTimeout(timeout);// 设置超时时间
|
||||||
|
// 获得对应socket的输入/输出流
|
||||||
|
is = socket.getInputStream(); |
||||||
|
os = socket.getOutputStream(); |
||||||
|
// 建立数据流
|
||||||
|
dis = new DataInputStream(is); |
||||||
|
dos = new DataOutputStream(os); |
||||||
|
if (!describe.equals("")) |
||||||
|
Log.writelog(clazzName,Thread.currentThread().getStackTrace()[1].getMethodName() + "->[" +terminal + "]=>GPRS: " + describe); |
||||||
|
Log.writelog(clazzName,Thread.currentThread().getStackTrace()[1].getMethodName() + "->[" +terminal + "]=>GPRS:" + command); |
||||||
|
|
||||||
|
|
||||||
|
byte[] getbytes; |
||||||
|
int len; |
||||||
|
|
||||||
|
if (ruletype.equals("0001"))//Lon16
|
||||||
|
{ //LON16是ASC码 可以直接发送
|
||||||
|
//byte[] str = lon16.GetSendCmd(terminal,command);
|
||||||
|
Log.writelog(clazzName,Thread.currentThread().getStackTrace()[1].getMethodName() + "->lon16 Send Cmd :" + command); |
||||||
|
dos.write(lon16.GetSendCmd(terminal,command));// 转发到服务器
|
||||||
|
}else |
||||||
|
{ |
||||||
|
command = command.replace("-", ""); |
||||||
|
|
||||||
|
if (!command.substring(0, 2).equals("68")) |
||||||
|
{//服务器内部命令
|
||||||
|
//dos.write(command.getBytes());// 转发到服务器
|
||||||
|
dos.write(lon16.GetSendCmd("0000" + terminal,command));// 转发到服务器
|
||||||
|
} |
||||||
|
else |
||||||
|
{ //正常的国网命令
|
||||||
|
len = command.length() / 2 + command.length() % 2; |
||||||
|
getbytes = new byte[len]; |
||||||
|
for (int i = 0; i < len; i++) { |
||||||
|
String temp = command.substring(i * 2, i * 2 + 2); |
||||||
|
getbytes[i] = (byte) Integer.parseInt(temp, 16); |
||||||
|
} |
||||||
|
dos.write(getbytes);// 转发到服务器
|
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
if (!responsetype.equals("1")) {// 增加需应答时处理2011-06-28
|
||||||
|
// 从服务器获取数据
|
||||||
|
int num = 0;// buffer中的数据长度
|
||||||
|
byte[] readbuffer = new byte[1024]; |
||||||
|
num = dis.read(readbuffer); |
||||||
|
//报文头是68
|
||||||
|
if (readbuffer[0] ==0x68 ) { |
||||||
|
cmdreturn = Common.GetHexStr(readbuffer, num); |
||||||
|
cmdreturn = cmdreturn.substring(0, cmdreturn.length() - 1); |
||||||
|
|
||||||
|
System.arraycopy(readbuffer, 0, readMsg, 0, num); |
||||||
|
readMsgCount = num; |
||||||
|
} else { |
||||||
|
cmdreturn = Common.GetHexStr(readbuffer, num); |
||||||
|
//转成ASC码
|
||||||
|
cmdreturn = cmdreturn.replace("-", "").replace("0D0A", ""); |
||||||
|
cmdreturn = Common.HexStr2AsciiStr(cmdreturn); |
||||||
|
cmdreturn = cmdreturn.substring(13);//去掉通信地址
|
||||||
|
|
||||||
|
} |
||||||
|
if (cmdreturn.equals("")) |
||||||
|
{ |
||||||
|
Log.writelog(clazzName,Thread.currentThread().getStackTrace()[1].getMethodName() + "->[" +terminal + "]<= GPRS: time out!" + describe); |
||||||
|
} |
||||||
|
else { |
||||||
|
Log.writelog(clazzName,Thread.currentThread().getStackTrace()[1].getMethodName() + "->[" +terminal + "]<=GPRS:" + cmdreturn); |
||||||
|
} |
||||||
|
} |
||||||
|
break; |
||||||
|
} catch (Exception e) {// 接收超时
|
||||||
|
state = 3; |
||||||
|
count += 1; |
||||||
|
} |
||||||
|
} |
||||||
|
try { |
||||||
|
dis.close(); // 关闭数据输入流
|
||||||
|
dos.close(); // 关闭数据输出流
|
||||||
|
is.close(); // 关闭输入流
|
||||||
|
os.close(); // 关闭输出流
|
||||||
|
socket.close(); // 关闭socket
|
||||||
|
dis = null; |
||||||
|
dos = null; |
||||||
|
is = null; |
||||||
|
os = null; |
||||||
|
socket = null; |
||||||
|
} catch (IOException e) { |
||||||
|
e.printStackTrace(); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
// 写入结果表
|
||||||
|
if (cmdreturn.endsWith("No Connected")) { |
||||||
|
state = 1; |
||||||
|
if (!command.equals("PEAK")) |
||||||
|
cmdreturn=""; |
||||||
|
} else if (cmdreturn.endsWith("Busy")) { |
||||||
|
state = 2; |
||||||
|
cmdreturn=""; |
||||||
|
} |
||||||
|
|
||||||
|
if (cmdreturn.equals("")) |
||||||
|
{ |
||||||
|
Log.writelog(clazzName,Thread.currentThread().getStackTrace()[1].getMethodName() + "->[" +terminal + "]<= GPRS: time out!" + describe); |
||||||
|
isread = false; |
||||||
|
} |
||||||
|
else |
||||||
|
isread = true; |
||||||
|
|
||||||
|
//
|
||||||
|
if (pCmd == false) |
||||||
|
return; |
||||||
|
|
||||||
|
//解码处理
|
||||||
|
if (ruletype.equals("0001")) { |
||||||
|
lon16.ResolvingData(cmdid,command, terminal, cmdreturn, state, "0002", batchtime,taskidString); |
||||||
|
} else { |
||||||
|
gw3761.ResolvingData(cmdid, terminal, cmdreturn, state, "0002", afncode, pn, batchtime, taskidString,command); |
||||||
|
} |
||||||
|
} |
||||||
|
// **************************************3761命令相关*********************************************
|
||||||
|
/** |
||||||
|
* 获取设置命令 datas 具体设置的报文 terminal 集中器通信地址 |
||||||
|
*/ |
||||||
|
private class Cmdinfor { |
||||||
|
String afn; // AFN
|
||||||
|
String Comid; // 通信地址
|
||||||
|
String datas; // 数据区内容
|
||||||
|
Boolean FCV; // 帧计数有效位FCV
|
||||||
|
String FCB; // FCB
|
||||||
|
String host; // 主站地址
|
||||||
|
String PWD; // 密码
|
||||||
|
int PFC; // PFC
|
||||||
|
Boolean bTime; // 是否有时间标签
|
||||||
|
Boolean TP;// 是否有时间标签
|
||||||
|
|
||||||
|
public void Create(String afn, String comid, String datas, int PFC, |
||||||
|
Boolean btime) { |
||||||
|
datas = datas.replace(" ", ""); |
||||||
|
datas = datas.trim(); |
||||||
|
this.afn = afn; |
||||||
|
while (comid.length() < 8) |
||||||
|
comid = "0" + comid; |
||||||
|
this.Comid = comid; |
||||||
|
this.datas = datas; |
||||||
|
this.FCV = false; |
||||||
|
this.PFC = PFC; |
||||||
|
this.FCB = "01"; |
||||||
|
this.host = "02"; |
||||||
|
this.PWD = "00000000000000000000000000000000";// 固定密码 16个零
|
||||||
|
this.bTime = btime; |
||||||
|
this.TP = btime; |
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
private Cmdinfor cmdinfor = new Cmdinfor(); |
||||||
|
|
||||||
|
/** |
||||||
|
* 获取相应的功能码 |
||||||
|
* |
||||||
|
* @param sType |
||||||
|
* @param sFCB |
||||||
|
* @param bFCV |
||||||
|
* @return |
||||||
|
*/ |
||||||
|
private Integer GetDownCortrolByte(String sType, String sFCB, Boolean bFCV) { |
||||||
|
String temp = ""; |
||||||
|
sType = sType.toUpperCase(); |
||||||
|
sType = sType.trim(); |
||||||
|
if (sType.equals("00")) |
||||||
|
temp = "0001"; |
||||||
|
if (sType.equals("02")) |
||||||
|
temp = "1001"; |
||||||
|
if (sType.equals("03")) |
||||||
|
temp = "1011"; |
||||||
|
if (sType.equals("04")) |
||||||
|
temp = "1010"; |
||||||
|
if (sType.equals("05")) |
||||||
|
temp = "1010"; |
||||||
|
if (sType.equals("06")) |
||||||
|
temp = "1011"; |
||||||
|
if (sType.equals("08")) |
||||||
|
temp = "1011"; |
||||||
|
if (sType.equals("09")) |
||||||
|
temp = "1011"; |
||||||
|
if (sType.equals("0A")) |
||||||
|
temp = "1011"; |
||||||
|
if (sType.equals("0B")) |
||||||
|
temp = "1011"; |
||||||
|
if (sType.equals("0C")) |
||||||
|
temp = "1011"; |
||||||
|
if (sType.equals("0D")) |
||||||
|
temp = "1011"; |
||||||
|
if (sType.equals("0E")) |
||||||
|
temp = "1011"; |
||||||
|
if (sType.equals("0F")) |
||||||
|
temp = "1011"; |
||||||
|
if (sType.equals("10")) |
||||||
|
temp = "1011"; |
||||||
|
if (sType.equals("8C")) |
||||||
|
temp = "1011"; |
||||||
|
if (sType.equals("A4")) |
||||||
|
temp = "1010"; |
||||||
|
if (sType.equals("A5")) |
||||||
|
temp = "1010"; |
||||||
|
if (sType.equals("AA")) |
||||||
|
temp = "1011"; |
||||||
|
if (sType.equals("AC")) |
||||||
|
temp = "1011"; |
||||||
|
if (sType.equals("AD")) |
||||||
|
temp = "1011"; |
||||||
|
if (bFCV) |
||||||
|
temp = "01" + sFCB.substring(1, 2) + "1" + temp; |
||||||
|
else |
||||||
|
temp = "01" + sFCB.substring(1, 2) + "0" + temp; |
||||||
|
return binaryString2Int(temp); |
||||||
|
} |
||||||
|
|
||||||
|
private Boolean CheckDwnPw(String sType) { |
||||||
|
Boolean sign = false; |
||||||
|
if (sType.equals("01")) |
||||||
|
sign = true; |
||||||
|
if (sType.equals("03")) |
||||||
|
sign = true; |
||||||
|
if (sType.equals("04")) |
||||||
|
sign = true; |
||||||
|
if (sType.equals("05")) |
||||||
|
sign = true; |
||||||
|
if (sType.equals("06")) |
||||||
|
sign = true; |
||||||
|
if (sType.equals("0F")) |
||||||
|
sign = true; |
||||||
|
if (sType.equals("10")) |
||||||
|
sign = true; |
||||||
|
if (sType.equals("01")) |
||||||
|
sign = true; |
||||||
|
if (sType.equals("01")) |
||||||
|
sign = true; |
||||||
|
if (sType.equals("01")) |
||||||
|
sign = true; |
||||||
|
if (sType.equals("A4")) |
||||||
|
sign = true; |
||||||
|
if (sType.equals("A5")) |
||||||
|
sign = true; |
||||||
|
return sign; |
||||||
|
} |
||||||
|
|
||||||
|
private String GetSendCmd(Cmdinfor cmdinfor) { |
||||||
|
int count = cmdinfor.datas.length(); |
||||||
|
int i; |
||||||
|
String temp; |
||||||
|
for (i = 0; i < msg.length; i++) |
||||||
|
msg[i] = 0; |
||||||
|
|
||||||
|
// 报文头
|
||||||
|
msg[0] = 0x68;// 68H
|
||||||
|
msg[5] = 0x68;// 68H
|
||||||
|
// 控制码
|
||||||
|
msg[6] = GetDownCortrolByte(cmdinfor.afn, cmdinfor.FCB, cmdinfor.FCV);// C
|
||||||
|
// 控制位
|
||||||
|
// 通信地址 16进制字
|
||||||
|
temp = cmdinfor.Comid.substring(0, 4); |
||||||
|
msg[8] = Integer.parseInt(temp.substring(0, 2), 16) & 0xFF; // A 地址域 -->
|
||||||
|
// 行政区划码 A1
|
||||||
|
// 2字节 BCD码
|
||||||
|
msg[7] = Integer.parseInt(temp.substring(2), 16) & 0xFF; // A 地址域 -->
|
||||||
|
// 行政区划码 A1
|
||||||
|
// 2字节 BCD码
|
||||||
|
temp = cmdinfor.Comid.substring(4); |
||||||
|
msg[10] = Integer.parseInt(temp.substring(0, 2), 16) & 0xFF; // A 地址域
|
||||||
|
// -->
|
||||||
|
// 行政区划码
|
||||||
|
// A2
|
||||||
|
// 2字节
|
||||||
|
// BCD码
|
||||||
|
msg[9] = Integer.parseInt(temp.substring(2), 16) & 0xFF; // A 地址域 -->
|
||||||
|
// 行政区划码 A2
|
||||||
|
// 2字节 BCD码
|
||||||
|
// 主站地址
|
||||||
|
msg[11] = (Integer.parseInt(cmdinfor.host, 16) << 1) & 0xFF;// A 地址域 -->
|
||||||
|
// 主站地址 A3
|
||||||
|
// 1字节 Bin码
|
||||||
|
msg[12] = Integer.parseInt(cmdinfor.afn, 16) & 0xFF; // AFN
|
||||||
|
if (cmdinfor.bTime) |
||||||
|
temp = "1111"; |
||||||
|
else |
||||||
|
temp = "0111"; |
||||||
|
msg[13] = (binaryString2Int(temp) << 4) + (cmdinfor.PFC % 16); // SEQ
|
||||||
|
// 帧序列域
|
||||||
|
int len = cmdinfor.datas.length() / 2; |
||||||
|
for (int j = 0; j < (len); j++) { |
||||||
|
temp = cmdinfor.datas.substring(j * 2, (j * 2 + 2)); |
||||||
|
msg[14 + j] = Integer.parseInt(temp, 16) & 0xFF; |
||||||
|
} |
||||||
|
len = len + 13; |
||||||
|
if (CheckDwnPw(cmdinfor.afn)) { |
||||||
|
len++; |
||||||
|
for (int j = 0; j < 16; j++) { // 密码
|
||||||
|
temp = cmdinfor.PWD.substring(j * 2, (j * 2 + 2)); |
||||||
|
msg[len + j] = Integer.parseInt(temp, 16) & 0xFF; |
||||||
|
} |
||||||
|
len = len + 15; |
||||||
|
} |
||||||
|
|
||||||
|
if (cmdinfor.TP) { |
||||||
|
SimpleDateFormat tempDate = new SimpleDateFormat( |
||||||
|
"yyyy-MM-dd HH:mm:ss"); |
||||||
|
String datetime = tempDate.format(new Date()); |
||||||
|
len++; |
||||||
|
msg[len] = cmdinfor.PFC;// 启动帧帧序号计数器PFC
|
||||||
|
len++; |
||||||
|
msg[len] = Integer.parseInt(datetime.substring(17, 19), 16);// 启动帧发送时标
|
||||||
|
// 秒
|
||||||
|
len++; |
||||||
|
msg[len] = Integer.parseInt(datetime.substring(14, 16), 16);// 启动帧发送时标
|
||||||
|
// 分
|
||||||
|
len++; |
||||||
|
msg[len] = Integer.parseInt(datetime.substring(11, 13), 16);// 启动帧发送时标
|
||||||
|
// 时
|
||||||
|
len++; |
||||||
|
msg[len] = Integer.parseInt(datetime.substring(8, 10), 16);// 启动帧发送时标
|
||||||
|
// 日
|
||||||
|
len++; |
||||||
|
msg[len] = 1;// 允许发送传输延时时间
|
||||||
|
} |
||||||
|
len++; |
||||||
|
msg[len] = GetCS(len); |
||||||
|
len++; |
||||||
|
msg[len] = 0x16; |
||||||
|
count = len - 7; |
||||||
|
count = (count << 2) + 2; |
||||||
|
msg[1] = count % 0x100; |
||||||
|
msg[2] = count / 0x100; |
||||||
|
msg[3] = count % 0x100; |
||||||
|
msg[4] = count / 0x100; |
||||||
|
|
||||||
|
// 转成字符串
|
||||||
|
StringBuffer sendBuffer = new StringBuffer(); |
||||||
|
for (int j = 0; j <= len; j++) |
||||||
|
sendBuffer.append(" " + dec2Hex(msg[j], 2)); |
||||||
|
|
||||||
|
return sendBuffer.toString().trim(); |
||||||
|
} |
||||||
|
|
||||||
|
private int GetCS(int len) { |
||||||
|
int ics = 0; |
||||||
|
for (int i = 6; i < len; i++) { |
||||||
|
ics = ics + msg[i]; |
||||||
|
} |
||||||
|
return ics & 0xFF; |
||||||
|
} |
||||||
|
|
||||||
|
private int GetPFC() { |
||||||
|
return 1; |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 二进制字符串转整型 |
||||||
|
* |
||||||
|
* @param bString |
||||||
|
* @return |
||||||
|
*/ |
||||||
|
public int binaryString2Int(String bString) { |
||||||
|
int temp = 0; |
||||||
|
for (int i = 0; i < bString.length(); i++) { |
||||||
|
temp <<= 1; |
||||||
|
temp += Integer.parseInt(bString.substring(i, i + 1)); |
||||||
|
} |
||||||
|
return temp; |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 10进制转16进制 |
||||||
|
* |
||||||
|
* @param dec |
||||||
|
* 要转换的数值 |
||||||
|
* @param len |
||||||
|
* 16进制的长度 |
||||||
|
* @return |
||||||
|
*/ |
||||||
|
public String dec2Hex(int dec, int len) { |
||||||
|
String tempString = Integer.toHexString(dec); |
||||||
|
while (tempString.length() < len) { |
||||||
|
tempString = "0" + tempString; |
||||||
|
} |
||||||
|
return tempString.trim(); |
||||||
|
} |
||||||
|
} |
||||||
@ -0,0 +1,253 @@ |
|||||||
|
package com.back.communication; |
||||||
|
|
||||||
|
import org.apache.http.Consts; |
||||||
|
import org.apache.http.HttpEntity; |
||||||
|
import org.apache.http.NameValuePair; |
||||||
|
import org.apache.http.ParseException; |
||||||
|
import org.apache.http.client.CookieStore; |
||||||
|
import org.apache.http.client.HttpClient; |
||||||
|
import org.apache.http.client.ResponseHandler; |
||||||
|
import org.apache.http.client.config.AuthSchemes; |
||||||
|
import org.apache.http.client.config.CookieSpecs; |
||||||
|
import org.apache.http.client.config.RequestConfig; |
||||||
|
import org.apache.http.client.entity.UrlEncodedFormEntity; |
||||||
|
import org.apache.http.client.methods.CloseableHttpResponse; |
||||||
|
import org.apache.http.client.methods.HttpGet; |
||||||
|
import org.apache.http.client.methods.HttpPost; |
||||||
|
import org.apache.http.client.protocol.HttpClientContext; |
||||||
|
import org.apache.http.config.Registry; |
||||||
|
import org.apache.http.config.RegistryBuilder; |
||||||
|
import org.apache.http.conn.scheme.Scheme; |
||||||
|
import org.apache.http.conn.socket.ConnectionSocketFactory; |
||||||
|
import org.apache.http.conn.socket.PlainConnectionSocketFactory; |
||||||
|
import org.apache.http.conn.ssl.NoopHostnameVerifier; |
||||||
|
import org.apache.http.conn.ssl.SSLConnectionSocketFactory; |
||||||
|
import org.apache.http.conn.ssl.SSLSocketFactory; |
||||||
|
import org.apache.http.cookie.Cookie; |
||||||
|
import org.apache.http.entity.StringEntity; |
||||||
|
import org.apache.http.impl.client.*; |
||||||
|
import org.apache.http.impl.conn.PoolingClientConnectionManager; |
||||||
|
import org.apache.http.impl.conn.PoolingHttpClientConnectionManager; |
||||||
|
import org.apache.http.util.EntityUtils; |
||||||
|
|
||||||
|
import javax.net.ssl.SSLContext; |
||||||
|
import javax.net.ssl.TrustManager; |
||||||
|
import javax.net.ssl.X509TrustManager; |
||||||
|
import java.io.IOException; |
||||||
|
import java.security.KeyManagementException; |
||||||
|
import java.security.NoSuchAlgorithmException; |
||||||
|
import java.security.cert.CertificateException; |
||||||
|
import java.security.cert.X509Certificate; |
||||||
|
import java.text.MessageFormat; |
||||||
|
import java.util.Arrays; |
||||||
|
import java.util.Date; |
||||||
|
import java.util.GregorianCalendar; |
||||||
|
import java.util.List; |
||||||
|
|
||||||
|
|
||||||
|
import com.google.gson.JsonObject; |
||||||
|
import com.google.gson.JsonParser; |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//发送微信报警
|
||||||
|
|
||||||
|
public class Wechat { |
||||||
|
public static final String GET_TOKEN_URL = "https://api.weixin.qq.com/cgi-bin/gettoken";// 获取access
|
||||||
|
public static String ACCESS_TOKEN = ""; // url
|
||||||
|
public static final String CorpID = "wx8940fac25406a4e0"; |
||||||
|
public static final String SECRET = "-My5wZv8N1hw7npL0vUpAvTXHp-gk8AJEO79NDba0o9dHS2fCoqHlU1jmnkFRlSM"; |
||||||
|
public static Date outTime = new Date(); //超时间
|
||||||
|
private static HttpClientContext context = HttpClientContext.create(); |
||||||
|
private static SSLConnectionSocketFactory socketFactory; |
||||||
|
private static RequestConfig requestConfig = RequestConfig.custom().setConnectTimeout(120000).setSocketTimeout(60000) |
||||||
|
.setConnectionRequestTimeout(60000).setCookieSpec(CookieSpecs.STANDARD_STRICT). |
||||||
|
setExpectContinueEnabled(true). |
||||||
|
setTargetPreferredAuthSchemes(Arrays.asList(AuthSchemes.NTLM, AuthSchemes.DIGEST)). |
||||||
|
setProxyPreferredAuthSchemes(Arrays.asList(AuthSchemes.BASIC)).build(); |
||||||
|
private static TrustManager manager = new X509TrustManager() { |
||||||
|
|
||||||
|
public void checkClientTrusted(X509Certificate[] x509Certificates, String s) throws CertificateException { |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
public void checkServerTrusted(X509Certificate[] x509Certificates, String s) throws CertificateException { |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
public X509Certificate[] getAcceptedIssuers() { |
||||||
|
return null; |
||||||
|
} |
||||||
|
}; |
||||||
|
|
||||||
|
private static void enableSSL() { |
||||||
|
try { |
||||||
|
SSLContext sslContext = SSLContext.getInstance("TLS"); |
||||||
|
sslContext.init(null, new TrustManager[]{manager}, null); |
||||||
|
socketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE); |
||||||
|
} catch (NoSuchAlgorithmException e) { |
||||||
|
e.printStackTrace(); |
||||||
|
} catch (KeyManagementException e) { |
||||||
|
e.printStackTrace(); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
public static CloseableHttpResponse doHttpsGet(String url, String data){ |
||||||
|
enableSSL(); |
||||||
|
Registry<ConnectionSocketFactory> socketFactoryRegistry = RegistryBuilder.<ConnectionSocketFactory>create() |
||||||
|
.register("http", PlainConnectionSocketFactory.INSTANCE).register("https", socketFactory).build(); |
||||||
|
PoolingHttpClientConnectionManager connectionManager = new PoolingHttpClientConnectionManager(socketFactoryRegistry); |
||||||
|
CloseableHttpClient httpClient = HttpClients.custom().setConnectionManager(connectionManager) |
||||||
|
.setDefaultRequestConfig(requestConfig).build(); |
||||||
|
HttpGet httpGet = new HttpGet(url); |
||||||
|
CloseableHttpResponse response = null; |
||||||
|
try { |
||||||
|
response = httpClient.execute(httpGet, context); |
||||||
|
}catch (Exception e){ |
||||||
|
e.printStackTrace(); |
||||||
|
} |
||||||
|
|
||||||
|
return response; |
||||||
|
} |
||||||
|
|
||||||
|
public static String toString(CloseableHttpResponse httpResponse) { |
||||||
|
// 获取响应消息实体
|
||||||
|
String result = null; |
||||||
|
try { |
||||||
|
HttpEntity entity = httpResponse.getEntity(); |
||||||
|
if (entity != null) { |
||||||
|
result = EntityUtils.toString(entity,"UTF-8"); |
||||||
|
} |
||||||
|
}catch (Exception e){}finally { |
||||||
|
try { |
||||||
|
httpResponse.close(); |
||||||
|
} catch (IOException e) { |
||||||
|
e.printStackTrace(); |
||||||
|
} |
||||||
|
} |
||||||
|
return result; |
||||||
|
} |
||||||
|
|
||||||
|
public static Date getOutTime(int i) throws Exception { |
||||||
|
Date rtn = null; |
||||||
|
GregorianCalendar cal = new GregorianCalendar(); |
||||||
|
Date date = new Date(); |
||||||
|
cal.setTime(date); |
||||||
|
cal.add(13, i); |
||||||
|
rtn = cal.getTime(); |
||||||
|
return rtn; |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
public static String getToken() throws Exception |
||||||
|
{ |
||||||
|
|
||||||
|
//return getToken( GET_TOKEN_URL, CorpID, SECRET);
|
||||||
|
|
||||||
|
StringBuilder sb = new StringBuilder(); |
||||||
|
sb.append("https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid="). |
||||||
|
append(CorpID). |
||||||
|
append("&corpsecret="). |
||||||
|
append(SECRET); |
||||||
|
String result = toString(doHttpsGet(sb.toString(), "")); |
||||||
|
JsonParser jsonparer = new JsonParser();// 初始化解析json格式的对象
|
||||||
|
JsonObject json = jsonparer.parse(result) |
||||||
|
.getAsJsonObject(); |
||||||
|
ACCESS_TOKEN = json.get("access_token").getAsString(); |
||||||
|
outTime = getOutTime(json.get("expires_in").getAsInt()); |
||||||
|
return json.get("access_token").getAsString(); |
||||||
|
} |
||||||
|
public static String getCurToken() throws Exception |
||||||
|
{ |
||||||
|
Date now = new Date(); |
||||||
|
long l = outTime.getTime()-now.getTime(); |
||||||
|
if (l > 0) |
||||||
|
return ACCESS_TOKEN; |
||||||
|
return getToken(); |
||||||
|
} |
||||||
|
/** |
||||||
|
* @desc 推送信息 |
||||||
|
* @param token |
||||||
|
* @param msg |
||||||
|
* @return |
||||||
|
*/ |
||||||
|
private static String sendMsgUrl = "https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token={0}"; |
||||||
|
|
||||||
|
private static HttpClient webClient = null; |
||||||
|
/** |
||||||
|
* @desc 初始化创建 WebClient |
||||||
|
*/ |
||||||
|
public static void initWebClient() { |
||||||
|
|
||||||
|
try { |
||||||
|
PoolingClientConnectionManager tcm = new PoolingClientConnectionManager(); |
||||||
|
tcm.setMaxTotal(10); |
||||||
|
SSLContext ctx = SSLContext.getInstance("TLS"); |
||||||
|
X509TrustManager tm = new X509TrustManager() { |
||||||
|
|
||||||
|
public void checkClientTrusted(X509Certificate[] x509Certificates, String s) throws CertificateException { |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
public void checkServerTrusted(X509Certificate[] x509Certificates, String s) throws CertificateException { |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
public X509Certificate[] getAcceptedIssuers() { |
||||||
|
return new X509Certificate[0]; |
||||||
|
} |
||||||
|
}; |
||||||
|
ctx.init(null, new X509TrustManager[] { tm }, null); |
||||||
|
SSLSocketFactory ssf = new SSLSocketFactory(ctx, SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER); |
||||||
|
Scheme sch = new Scheme("https", 443, ssf); |
||||||
|
tcm.getSchemeRegistry().register(sch); |
||||||
|
webClient = new DefaultHttpClient(tcm); |
||||||
|
} catch (Exception ex) { |
||||||
|
//log.error("initWebClient exception", ex);
|
||||||
|
} finally { |
||||||
|
// log.info("initWebClient end....");
|
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
public static String sendMessage(String userid,String msg){ |
||||||
|
try{ |
||||||
|
getCurToken(); |
||||||
|
//log.info("\n\nsendMessage start.token:"+token+",msg:"+msg);
|
||||||
|
String url = MessageFormat.format(sendMsgUrl, ACCESS_TOKEN); |
||||||
|
HttpPost post = new HttpPost(url); |
||||||
|
ResponseHandler<?> responseHandler = new BasicResponseHandler(); |
||||||
|
|
||||||
|
//这里必须是一个合法的json格式数据,每个字段的意义可以查看上面连接的说明,content后面的test是要发送给用户的数据,这里是群发给所有人
|
||||||
|
msg = msg = "{\"touser\":\"" + userid + "\",\"text\":{\"content\":\"" + msg + "\"},\"agentid\":\"1\",\"msgtype\":\"text\"}\""; |
||||||
|
//msg = "{\"filter\":{\"is_to_all\":true},\"text\":{\"content\":\"test\"},\"msgtype\":\"text\"}\"";
|
||||||
|
|
||||||
|
//设置发送消息的参数
|
||||||
|
StringEntity entity = new StringEntity(msg,"UTF-8"); |
||||||
|
|
||||||
|
//解决中文乱码的问题
|
||||||
|
//entity.setContentEncoding("UTF-8");
|
||||||
|
entity.setContentType("application/json"); |
||||||
|
post.setEntity(entity); |
||||||
|
|
||||||
|
//发送请求
|
||||||
|
if (webClient==null) |
||||||
|
initWebClient(); |
||||||
|
String response = (String) webClient.execute(post, responseHandler); |
||||||
|
return response; |
||||||
|
|
||||||
|
}catch (Exception e) { |
||||||
|
return null; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
@ -0,0 +1,115 @@ |
|||||||
|
package com.back.communication.mail; |
||||||
|
|
||||||
|
import java.util.Properties; |
||||||
|
|
||||||
|
public class MailSenderInfo { |
||||||
|
// 发送邮件的服务器的IP和端口
|
||||||
|
private String mailServerHost; |
||||||
|
private String mailServerPort = "25"; |
||||||
|
// 邮件发送者的地址
|
||||||
|
private String fromAddress; |
||||||
|
// 邮件接收者的地址
|
||||||
|
private String toAddress; |
||||||
|
// 登陆邮件发送服务器的用户名和密码
|
||||||
|
private String userName; |
||||||
|
private String password; |
||||||
|
// 是否需要身份验证
|
||||||
|
private boolean validate = false; |
||||||
|
// 邮件主题
|
||||||
|
private String subject; |
||||||
|
// 邮件的文本内容
|
||||||
|
private String content; |
||||||
|
// 邮件附件的文件名
|
||||||
|
private String[] attachFileNames; |
||||||
|
|
||||||
|
/** |
||||||
|
* 获得邮件会话属性 |
||||||
|
*/ |
||||||
|
public Properties getProperties() { |
||||||
|
Properties p = new Properties(); |
||||||
|
p.put("mail.smtp.host", this.mailServerHost); |
||||||
|
p.put("mail.smtp.port", this.mailServerPort); |
||||||
|
p.put("mail.smtp.auth", validate ? "true" : "false"); |
||||||
|
return p; |
||||||
|
} |
||||||
|
|
||||||
|
public String getMailServerHost() { |
||||||
|
return mailServerHost; |
||||||
|
} |
||||||
|
|
||||||
|
public void setMailServerHost(String mailServerHost) { |
||||||
|
this.mailServerHost = mailServerHost; |
||||||
|
} |
||||||
|
|
||||||
|
public String getMailServerPort() { |
||||||
|
return mailServerPort; |
||||||
|
} |
||||||
|
|
||||||
|
public void setMailServerPort(String mailServerPort) { |
||||||
|
this.mailServerPort = mailServerPort; |
||||||
|
} |
||||||
|
|
||||||
|
public boolean isValidate() { |
||||||
|
return validate; |
||||||
|
} |
||||||
|
|
||||||
|
public void setValidate(boolean validate) { |
||||||
|
this.validate = validate; |
||||||
|
} |
||||||
|
|
||||||
|
public String[] getAttachFileNames() { |
||||||
|
return attachFileNames; |
||||||
|
} |
||||||
|
|
||||||
|
public void setAttachFileNames(String[] fileNames) { |
||||||
|
this.attachFileNames = fileNames; |
||||||
|
} |
||||||
|
|
||||||
|
public String getFromAddress() { |
||||||
|
return fromAddress; |
||||||
|
} |
||||||
|
|
||||||
|
public void setFromAddress(String fromAddress) { |
||||||
|
this.fromAddress = fromAddress; |
||||||
|
} |
||||||
|
|
||||||
|
public String getPassword() { |
||||||
|
return password; |
||||||
|
} |
||||||
|
|
||||||
|
public void setPassword(String password) { |
||||||
|
this.password = password; |
||||||
|
} |
||||||
|
|
||||||
|
public String getToAddress() { |
||||||
|
return toAddress; |
||||||
|
} |
||||||
|
|
||||||
|
public void setToAddress(String toAddress) { |
||||||
|
this.toAddress = toAddress; |
||||||
|
} |
||||||
|
|
||||||
|
public String getUserName() { |
||||||
|
return userName; |
||||||
|
} |
||||||
|
|
||||||
|
public void setUserName(String userName) { |
||||||
|
this.userName = userName; |
||||||
|
} |
||||||
|
|
||||||
|
public String getSubject() { |
||||||
|
return subject; |
||||||
|
} |
||||||
|
|
||||||
|
public void setSubject(String subject) { |
||||||
|
this.subject = subject; |
||||||
|
} |
||||||
|
|
||||||
|
public String getContent() { |
||||||
|
return content; |
||||||
|
} |
||||||
|
|
||||||
|
public void setContent(String textContent) { |
||||||
|
this.content = textContent; |
||||||
|
} |
||||||
|
} |
||||||
@ -0,0 +1,21 @@ |
|||||||
|
package com.back.communication.mail; |
||||||
|
|
||||||
|
import javax.mail.Authenticator; |
||||||
|
import javax.mail.PasswordAuthentication; |
||||||
|
|
||||||
|
public class MyAuthenticator extends Authenticator { |
||||||
|
String userName = null; |
||||||
|
String password = null; |
||||||
|
|
||||||
|
public MyAuthenticator() { |
||||||
|
} |
||||||
|
|
||||||
|
public MyAuthenticator(String username, String password) { |
||||||
|
this.userName = username; |
||||||
|
this.password = password; |
||||||
|
} |
||||||
|
|
||||||
|
protected PasswordAuthentication getPasswordAuthentication() { |
||||||
|
return new PasswordAuthentication(userName, password); |
||||||
|
} |
||||||
|
} |
||||||
@ -0,0 +1,110 @@ |
|||||||
|
package com.back.communication.mail; |
||||||
|
|
||||||
|
import java.util.Date; |
||||||
|
import java.util.Properties; |
||||||
|
|
||||||
|
import javax.mail.Address; |
||||||
|
import javax.mail.BodyPart; |
||||||
|
import javax.mail.Message; |
||||||
|
import javax.mail.MessagingException; |
||||||
|
import javax.mail.Multipart; |
||||||
|
import javax.mail.Session; |
||||||
|
import javax.mail.Transport; |
||||||
|
import javax.mail.internet.InternetAddress; |
||||||
|
import javax.mail.internet.MimeBodyPart; |
||||||
|
import javax.mail.internet.MimeMessage; |
||||||
|
import javax.mail.internet.MimeMultipart; |
||||||
|
|
||||||
|
public class SimpleMailSender { |
||||||
|
/** |
||||||
|
* 以文本格式发送邮件 |
||||||
|
* |
||||||
|
* @param mailInfo |
||||||
|
* @return |
||||||
|
*/ |
||||||
|
public boolean sendTextMail(MailSenderInfo mailInfo) { |
||||||
|
// 判断是否需要身份认证
|
||||||
|
MyAuthenticator authenticator = null; |
||||||
|
Properties pro = mailInfo.getProperties(); |
||||||
|
if (mailInfo.isValidate()) { |
||||||
|
// 如果需要身份认证,则创建一个密码验证器
|
||||||
|
authenticator = new MyAuthenticator(mailInfo.getUserName(), mailInfo.getPassword()); |
||||||
|
} |
||||||
|
// 根据邮件会话属性和密码验证器构造一个发送邮件的session
|
||||||
|
Session sendMailSession = Session.getDefaultInstance(pro, authenticator); |
||||||
|
try { |
||||||
|
// 根据session创建一个邮件消息
|
||||||
|
Message mailMessage = new MimeMessage(sendMailSession); |
||||||
|
// 创建邮件发送者地址
|
||||||
|
Address from = new InternetAddress(mailInfo.getFromAddress()); |
||||||
|
// 设置邮件消息的发送者
|
||||||
|
mailMessage.setFrom(from); |
||||||
|
// 创建邮件的接收者地址,并设置到邮件消息中
|
||||||
|
Address to = new InternetAddress(mailInfo.getToAddress()); |
||||||
|
mailMessage.setRecipient(Message.RecipientType.TO, to); |
||||||
|
// 设置邮件消息的主题
|
||||||
|
mailMessage.setSubject(mailInfo.getSubject()); |
||||||
|
// 设置邮件消息发送的时间
|
||||||
|
mailMessage.setSentDate(new Date()); |
||||||
|
// 设置邮件消息的主要内容
|
||||||
|
String mailContent = mailInfo.getContent(); |
||||||
|
mailMessage.setText(mailContent); |
||||||
|
// 发送邮件
|
||||||
|
Transport.send(mailMessage); |
||||||
|
return true; |
||||||
|
} catch (Exception ex) { |
||||||
|
System.out.println(mailInfo.getToAddress() + " 发送失败:" + ex.getMessage()); |
||||||
|
|
||||||
|
} |
||||||
|
return false; |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 以HTML格式发送邮件 |
||||||
|
* |
||||||
|
* @param mailInfo |
||||||
|
* 待发送的邮件信息 |
||||||
|
*/ |
||||||
|
public static boolean sendHtmlMail(MailSenderInfo mailInfo) { |
||||||
|
// 判断是否需要身份认证
|
||||||
|
MyAuthenticator authenticator = null; |
||||||
|
Properties pro = mailInfo.getProperties(); |
||||||
|
// 如果需要身份认证,则创建一个密码验证器
|
||||||
|
if (mailInfo.isValidate()) { |
||||||
|
authenticator = new MyAuthenticator(mailInfo.getUserName(), mailInfo.getPassword()); |
||||||
|
} |
||||||
|
// 根据邮件会话属性和密码验证器构造一个发送邮件的session
|
||||||
|
Session sendMailSession = Session.getDefaultInstance(pro, authenticator); |
||||||
|
try { |
||||||
|
// 根据session创建一个邮件消息
|
||||||
|
Message mailMessage = new MimeMessage(sendMailSession); |
||||||
|
// 创建邮件发送者地址
|
||||||
|
Address from = new InternetAddress(mailInfo.getFromAddress()); |
||||||
|
// 设置邮件消息的发送者
|
||||||
|
mailMessage.setFrom(from); |
||||||
|
// 创建邮件的接收者地址,并设置到邮件消息中
|
||||||
|
Address to = new InternetAddress(mailInfo.getToAddress()); |
||||||
|
// Message.RecipientType.TO属性表示接收者的类型为TO
|
||||||
|
mailMessage.setRecipient(Message.RecipientType.TO, to); |
||||||
|
// 设置邮件消息的主题
|
||||||
|
mailMessage.setSubject(mailInfo.getSubject()); |
||||||
|
// 设置邮件消息发送的时间
|
||||||
|
mailMessage.setSentDate(new Date()); |
||||||
|
// MiniMultipart类是一个容器类,包含MimeBodyPart类型的对象
|
||||||
|
Multipart mainPart = new MimeMultipart(); |
||||||
|
// 创建一个包含HTML内容的MimeBodyPart
|
||||||
|
BodyPart html = new MimeBodyPart(); |
||||||
|
// 设置HTML内容
|
||||||
|
html.setContent(mailInfo.getContent(), "text/html; charset=utf-8"); |
||||||
|
mainPart.addBodyPart(html); |
||||||
|
// 将MiniMultipart对象设置为邮件内容
|
||||||
|
mailMessage.setContent(mainPart); |
||||||
|
// 发送邮件
|
||||||
|
Transport.send(mailMessage); |
||||||
|
return true; |
||||||
|
} catch (MessagingException ex) { |
||||||
|
ex.printStackTrace(); |
||||||
|
} |
||||||
|
return false; |
||||||
|
} |
||||||
|
} |
||||||
@ -0,0 +1,292 @@ |
|||||||
|
package com.back.entity; |
||||||
|
|
||||||
|
public class Control implements java.io.Serializable { |
||||||
|
|
||||||
|
private String comid; |
||||||
|
private String name; |
||||||
|
private int lampid; |
||||||
|
private int groupid; |
||||||
|
private String terminal; |
||||||
|
private int floorNo; |
||||||
|
private String addr; |
||||||
|
private Boolean iseffect; |
||||||
|
private int id; |
||||||
|
private String sign; |
||||||
|
private Double longitude; |
||||||
|
private Double latitude; |
||||||
|
private int num; |
||||||
|
private String barcode; |
||||||
|
private int brightness; |
||||||
|
private String mcontrol; |
||||||
|
private String boxImage; |
||||||
|
private String installImage; |
||||||
|
private String worktype; |
||||||
|
|
||||||
|
private String tunnel; |
||||||
|
private String protocol; |
||||||
|
private String type; |
||||||
|
private String remark; |
||||||
|
private Boolean warningstate; |
||||||
|
private Boolean controlstate; |
||||||
|
|
||||||
|
private Integer eventid; |
||||||
|
private Boolean online; |
||||||
|
private Boolean state; |
||||||
|
|
||||||
|
public Double getLongitude() { |
||||||
|
return longitude; |
||||||
|
} |
||||||
|
|
||||||
|
public void setLongitude(Double longitude) { |
||||||
|
this.longitude = longitude; |
||||||
|
} |
||||||
|
|
||||||
|
public Double getLatitude() { |
||||||
|
return latitude; |
||||||
|
} |
||||||
|
|
||||||
|
public void setLatitude(Double latitude) { |
||||||
|
this.latitude = latitude; |
||||||
|
} |
||||||
|
|
||||||
|
public Control() { |
||||||
|
} |
||||||
|
|
||||||
|
public Control(String comid, int lampId, int groupid, String terminal) { |
||||||
|
this.comid = comid; |
||||||
|
this.lampid = lampid; |
||||||
|
this.groupid = groupid; |
||||||
|
this.terminal = terminal; |
||||||
|
} |
||||||
|
|
||||||
|
public int getBrightness() { |
||||||
|
return brightness; |
||||||
|
} |
||||||
|
|
||||||
|
public void setBrightness(int brightness) { |
||||||
|
this.brightness = brightness; |
||||||
|
} |
||||||
|
|
||||||
|
public String getMcontrol() { |
||||||
|
return mcontrol; |
||||||
|
} |
||||||
|
|
||||||
|
public void setMcontrol(String mcontrol) { |
||||||
|
this.mcontrol = mcontrol; |
||||||
|
} |
||||||
|
|
||||||
|
public String getBoxImage() { |
||||||
|
return boxImage; |
||||||
|
} |
||||||
|
|
||||||
|
public void setBoxImage(String boxImage) { |
||||||
|
this.boxImage = boxImage; |
||||||
|
} |
||||||
|
|
||||||
|
public String getInstallImage() { |
||||||
|
return installImage; |
||||||
|
} |
||||||
|
|
||||||
|
public void setInstallImage(String installImage) { |
||||||
|
this.installImage = installImage; |
||||||
|
} |
||||||
|
|
||||||
|
public Control(String comid, String name, int lampid, int groupid, String terminal, Boolean iseffect, |
||||||
|
int brightness, String mcontrol, String worktype, String type, Boolean state, String protocol, |
||||||
|
String tunnel, String remark, Boolean warningstate, Boolean controlstate, int eventid, Boolean online) { |
||||||
|
this.comid = comid; |
||||||
|
this.name = name; |
||||||
|
this.lampid = lampid; |
||||||
|
this.groupid = groupid; |
||||||
|
this.terminal = terminal; |
||||||
|
this.iseffect = iseffect; |
||||||
|
this.worktype = worktype; |
||||||
|
|
||||||
|
this.type = type; |
||||||
|
this.state = state; |
||||||
|
this.remark = remark; |
||||||
|
this.tunnel = tunnel; |
||||||
|
this.protocol = protocol; |
||||||
|
this.warningstate = warningstate; |
||||||
|
this.controlstate = controlstate; |
||||||
|
|
||||||
|
this.eventid = eventid; |
||||||
|
this.online = online; |
||||||
|
} |
||||||
|
|
||||||
|
public String getWorktype() { |
||||||
|
return worktype; |
||||||
|
} |
||||||
|
|
||||||
|
public void setWorktype(String worktype) { |
||||||
|
this.worktype = worktype; |
||||||
|
} |
||||||
|
|
||||||
|
public String getComid() { |
||||||
|
return this.comid; |
||||||
|
} |
||||||
|
|
||||||
|
public void setComid(String comid) { |
||||||
|
this.comid = comid; |
||||||
|
} |
||||||
|
|
||||||
|
public String getName() { |
||||||
|
return this.name; |
||||||
|
} |
||||||
|
|
||||||
|
public void setName(String name) { |
||||||
|
this.name = name; |
||||||
|
} |
||||||
|
|
||||||
|
public int getLampid() { |
||||||
|
return lampid; |
||||||
|
} |
||||||
|
|
||||||
|
public void setLampid(int lampid) { |
||||||
|
this.lampid = lampid; |
||||||
|
} |
||||||
|
|
||||||
|
public int getGroupid() { |
||||||
|
return groupid; |
||||||
|
} |
||||||
|
|
||||||
|
public void setGroupid(int groupid) { |
||||||
|
this.groupid = groupid; |
||||||
|
} |
||||||
|
|
||||||
|
public String getTerminal() { |
||||||
|
return terminal; |
||||||
|
} |
||||||
|
|
||||||
|
public void setTerminal(String terminal) { |
||||||
|
this.terminal = terminal; |
||||||
|
} |
||||||
|
|
||||||
|
public int getFloorNo() { |
||||||
|
return floorNo; |
||||||
|
} |
||||||
|
|
||||||
|
public void setFloorNo(int floorNo) { |
||||||
|
this.floorNo = floorNo; |
||||||
|
} |
||||||
|
|
||||||
|
public String getAddr() { |
||||||
|
return addr; |
||||||
|
} |
||||||
|
|
||||||
|
public void setAddr(String addr) { |
||||||
|
this.addr = addr; |
||||||
|
} |
||||||
|
|
||||||
|
public Boolean getIseffect() { |
||||||
|
return this.iseffect; |
||||||
|
} |
||||||
|
|
||||||
|
public void setIseffect(Boolean iseffect) { |
||||||
|
this.iseffect = iseffect; |
||||||
|
} |
||||||
|
|
||||||
|
public int getId() { |
||||||
|
return id; |
||||||
|
} |
||||||
|
|
||||||
|
public void setId(int id) { |
||||||
|
this.id = id; |
||||||
|
} |
||||||
|
|
||||||
|
public String getSign() { |
||||||
|
return sign; |
||||||
|
} |
||||||
|
|
||||||
|
public void setSign(String sign) { |
||||||
|
this.sign = sign; |
||||||
|
} |
||||||
|
|
||||||
|
public int getNum() { |
||||||
|
return num; |
||||||
|
} |
||||||
|
|
||||||
|
public void setNum(int num) { |
||||||
|
this.num = num; |
||||||
|
} |
||||||
|
|
||||||
|
public String getBarcode() { |
||||||
|
return barcode; |
||||||
|
} |
||||||
|
|
||||||
|
public void setBarcode(String barcode) { |
||||||
|
this.barcode = barcode; |
||||||
|
} |
||||||
|
|
||||||
|
public String getProtocol() { |
||||||
|
return protocol; |
||||||
|
} |
||||||
|
|
||||||
|
public void setProtocol(String protocol) { |
||||||
|
this.protocol = protocol; |
||||||
|
} |
||||||
|
|
||||||
|
public String getRemark() { |
||||||
|
return remark; |
||||||
|
} |
||||||
|
|
||||||
|
public void setRemark(String remark) { |
||||||
|
this.remark = remark; |
||||||
|
} |
||||||
|
|
||||||
|
public String getTunnel() { |
||||||
|
return tunnel; |
||||||
|
} |
||||||
|
|
||||||
|
public void setTunnel(String tunnel) { |
||||||
|
this.tunnel = tunnel; |
||||||
|
} |
||||||
|
|
||||||
|
public String getType() { |
||||||
|
return type; |
||||||
|
} |
||||||
|
|
||||||
|
public void setType(String type) { |
||||||
|
this.type = type; |
||||||
|
} |
||||||
|
|
||||||
|
public Boolean getControlstate() { |
||||||
|
return controlstate; |
||||||
|
} |
||||||
|
|
||||||
|
public void setControlstate(Boolean controlstate) { |
||||||
|
this.controlstate = controlstate; |
||||||
|
} |
||||||
|
|
||||||
|
public Boolean getWarningstate() { |
||||||
|
return warningstate; |
||||||
|
} |
||||||
|
|
||||||
|
public void setWarningstate(Boolean warningstate) { |
||||||
|
this.warningstate = warningstate; |
||||||
|
} |
||||||
|
|
||||||
|
public Integer getEventid() { |
||||||
|
return eventid; |
||||||
|
} |
||||||
|
|
||||||
|
public void setEventid(Integer eventid) { |
||||||
|
this.eventid = eventid; |
||||||
|
} |
||||||
|
|
||||||
|
public Boolean getOnline() { |
||||||
|
return online; |
||||||
|
} |
||||||
|
|
||||||
|
public void setOnline(Boolean online) { |
||||||
|
this.online = online; |
||||||
|
} |
||||||
|
|
||||||
|
public Boolean getState() { |
||||||
|
return state; |
||||||
|
} |
||||||
|
|
||||||
|
public void setState(Boolean state) { |
||||||
|
this.state = state; |
||||||
|
} |
||||||
|
} |
||||||
@ -0,0 +1,338 @@ |
|||||||
|
package com.back.entity; |
||||||
|
|
||||||
|
// Generated Dec 8, 2010 3:23:36 PM by Hibernate Tools 3.2.2.GA
|
||||||
|
|
||||||
|
/** |
||||||
|
* Mcontrol generated by hbm2java |
||||||
|
*/ |
||||||
|
public class Mcontrol implements java.io.Serializable { |
||||||
|
|
||||||
|
private int id; |
||||||
|
private int num; |
||||||
|
private String comid; |
||||||
|
private String terminal; |
||||||
|
private String name; |
||||||
|
private int floorNo; |
||||||
|
private String addr; |
||||||
|
private Double longitude; |
||||||
|
private Double latitude; |
||||||
|
private String boxImage; |
||||||
|
private String installImage; |
||||||
|
private Integer sunrise; |
||||||
|
private Integer sunset; |
||||||
|
private String groups; |
||||||
|
private String speed; |
||||||
|
private String comport; |
||||||
|
private String barcode; |
||||||
|
private Boolean iseffect; |
||||||
|
private String worktype; |
||||||
|
|
||||||
|
private Boolean active; |
||||||
|
private Boolean iseffecttime; |
||||||
|
private String destinetime; |
||||||
|
private Float multiple; |
||||||
|
|
||||||
|
private String type; |
||||||
|
private String tunnel; |
||||||
|
private String protocol; |
||||||
|
private String remark; |
||||||
|
|
||||||
|
private Boolean warningstate; |
||||||
|
private Boolean controlstate; |
||||||
|
private Boolean online; |
||||||
|
private int ratio; |
||||||
|
|
||||||
|
public Float getMultiple() { |
||||||
|
return multiple; |
||||||
|
} |
||||||
|
|
||||||
|
public void setMultiple(Float multiple) { |
||||||
|
this.multiple = multiple; |
||||||
|
} |
||||||
|
|
||||||
|
public Boolean getUnderload() { |
||||||
|
return underload; |
||||||
|
} |
||||||
|
|
||||||
|
public void setUnderload(Boolean underload) { |
||||||
|
this.underload = underload; |
||||||
|
} |
||||||
|
|
||||||
|
private Boolean underload; |
||||||
|
|
||||||
|
public Mcontrol() { |
||||||
|
} |
||||||
|
|
||||||
|
public Mcontrol(int id, int num, String comid, String terminal, String name, Double longitude, Double latitude, |
||||||
|
Integer sunrise, Integer sunset, String groups, String speed, String comport, Boolean iseffect, |
||||||
|
String worktype, Boolean active, Boolean iseffecttime, String destinetime, String type, String protocol, |
||||||
|
String tunnel, String remark, Boolean warningstate, Boolean controlstate, Boolean online, int ratio) { |
||||||
|
this.id = id; |
||||||
|
this.num = num; |
||||||
|
this.comid = comid; |
||||||
|
this.terminal = terminal; |
||||||
|
this.name = name; |
||||||
|
this.longitude = longitude; |
||||||
|
this.latitude = latitude; |
||||||
|
this.sunrise = sunrise; |
||||||
|
this.sunset = sunset; |
||||||
|
this.groups = groups; |
||||||
|
this.comport = comport; |
||||||
|
this.speed = speed; |
||||||
|
this.iseffect = iseffect; |
||||||
|
this.worktype = worktype; |
||||||
|
|
||||||
|
this.active = active; |
||||||
|
this.iseffecttime = iseffecttime; |
||||||
|
this.destinetime = destinetime; |
||||||
|
|
||||||
|
this.type = type; |
||||||
|
this.protocol = protocol; |
||||||
|
this.tunnel = tunnel; |
||||||
|
this.remark = remark; |
||||||
|
this.warningstate = warningstate; |
||||||
|
this.controlstate = controlstate; |
||||||
|
this.online = online; |
||||||
|
this.ratio = ratio; |
||||||
|
} |
||||||
|
|
||||||
|
public Boolean getActive() { |
||||||
|
return active; |
||||||
|
} |
||||||
|
|
||||||
|
public void setActive(Boolean active) { |
||||||
|
this.active = active; |
||||||
|
} |
||||||
|
|
||||||
|
public Boolean getIseffecttime() { |
||||||
|
return iseffecttime; |
||||||
|
} |
||||||
|
|
||||||
|
public void setIseffecttime(Boolean iseffecttime) { |
||||||
|
this.iseffecttime = iseffecttime; |
||||||
|
} |
||||||
|
|
||||||
|
public String getDestinetime() { |
||||||
|
return destinetime; |
||||||
|
} |
||||||
|
|
||||||
|
public void setDestinetime(String destinetime) { |
||||||
|
this.destinetime = destinetime; |
||||||
|
} |
||||||
|
|
||||||
|
public int getId() { |
||||||
|
return this.id; |
||||||
|
} |
||||||
|
|
||||||
|
public void setId(int id) { |
||||||
|
this.id = id; |
||||||
|
} |
||||||
|
|
||||||
|
public int getNum() { |
||||||
|
return this.num; |
||||||
|
} |
||||||
|
|
||||||
|
public void setNum(int num) { |
||||||
|
this.num = num; |
||||||
|
} |
||||||
|
|
||||||
|
public String getComid() { |
||||||
|
return this.comid; |
||||||
|
} |
||||||
|
|
||||||
|
public void setComid(String comid) { |
||||||
|
this.comid = comid; |
||||||
|
} |
||||||
|
|
||||||
|
public String getTerminal() { |
||||||
|
return this.terminal; |
||||||
|
} |
||||||
|
|
||||||
|
public void setTerminal(String terminal) { |
||||||
|
this.terminal = terminal; |
||||||
|
} |
||||||
|
|
||||||
|
public String getName() { |
||||||
|
return this.name; |
||||||
|
} |
||||||
|
|
||||||
|
public void setName(String name) { |
||||||
|
this.name = name; |
||||||
|
} |
||||||
|
|
||||||
|
public int getFloorNo() { |
||||||
|
return floorNo; |
||||||
|
} |
||||||
|
|
||||||
|
public void setFloorNo(int floorNo) { |
||||||
|
this.floorNo = floorNo; |
||||||
|
} |
||||||
|
|
||||||
|
public String getAddr() { |
||||||
|
return addr; |
||||||
|
} |
||||||
|
|
||||||
|
public void setAddr(String addr) { |
||||||
|
this.addr = addr; |
||||||
|
} |
||||||
|
|
||||||
|
public Double getLongitude() { |
||||||
|
return this.longitude; |
||||||
|
} |
||||||
|
|
||||||
|
public void setLongitude(Double longitude) { |
||||||
|
this.longitude = longitude; |
||||||
|
} |
||||||
|
|
||||||
|
public Double getLatitude() { |
||||||
|
return this.latitude; |
||||||
|
} |
||||||
|
|
||||||
|
public void setLatitude(Double latitude) { |
||||||
|
this.latitude = latitude; |
||||||
|
} |
||||||
|
|
||||||
|
public String getBoxImage() { |
||||||
|
return boxImage; |
||||||
|
} |
||||||
|
|
||||||
|
public void setBoxImage(String boxImage) { |
||||||
|
this.boxImage = boxImage; |
||||||
|
} |
||||||
|
|
||||||
|
public String getInstallImage() { |
||||||
|
return installImage; |
||||||
|
} |
||||||
|
|
||||||
|
public void setInstallImage(String installImage) { |
||||||
|
this.installImage = installImage; |
||||||
|
} |
||||||
|
|
||||||
|
public Integer getSunrise() { |
||||||
|
return this.sunrise; |
||||||
|
} |
||||||
|
|
||||||
|
public void setSunrise(Integer sunrise) { |
||||||
|
this.sunrise = sunrise; |
||||||
|
} |
||||||
|
|
||||||
|
public Integer getSunset() { |
||||||
|
return this.sunset; |
||||||
|
} |
||||||
|
|
||||||
|
public void setSunset(Integer sunset) { |
||||||
|
this.sunset = sunset; |
||||||
|
} |
||||||
|
|
||||||
|
public String getGroups() { |
||||||
|
return this.groups; |
||||||
|
} |
||||||
|
|
||||||
|
public void setGroups(String groups) { |
||||||
|
this.groups = groups; |
||||||
|
} |
||||||
|
|
||||||
|
public Boolean getIseffect() { |
||||||
|
return this.iseffect; |
||||||
|
} |
||||||
|
|
||||||
|
public void setIseffect(Boolean iseffect) { |
||||||
|
this.iseffect = iseffect; |
||||||
|
} |
||||||
|
|
||||||
|
public String getSpeed() { |
||||||
|
return speed; |
||||||
|
} |
||||||
|
|
||||||
|
public void setSpeed(String speed) { |
||||||
|
this.speed = speed; |
||||||
|
} |
||||||
|
|
||||||
|
public String getComport() { |
||||||
|
return comport; |
||||||
|
} |
||||||
|
|
||||||
|
public void setComport(String comport) { |
||||||
|
this.comport = comport; |
||||||
|
} |
||||||
|
|
||||||
|
public String getBarcode() { |
||||||
|
return barcode; |
||||||
|
} |
||||||
|
|
||||||
|
public void setBarcode(String barcode) { |
||||||
|
this.barcode = barcode; |
||||||
|
} |
||||||
|
|
||||||
|
public String getWorktype() { |
||||||
|
return worktype; |
||||||
|
} |
||||||
|
|
||||||
|
public void setWorktype(String worktype) { |
||||||
|
this.worktype = worktype; |
||||||
|
} |
||||||
|
|
||||||
|
public String getRemark() { |
||||||
|
return this.remark; |
||||||
|
} |
||||||
|
|
||||||
|
public void setRemark(String remark) { |
||||||
|
this.remark = remark; |
||||||
|
} |
||||||
|
|
||||||
|
public String getType() { |
||||||
|
return type; |
||||||
|
} |
||||||
|
|
||||||
|
public void setType(String type) { |
||||||
|
this.type = type; |
||||||
|
} |
||||||
|
|
||||||
|
public String getProtocol() { |
||||||
|
return protocol; |
||||||
|
} |
||||||
|
|
||||||
|
public void setProtocol(String protocol) { |
||||||
|
this.protocol = protocol; |
||||||
|
} |
||||||
|
|
||||||
|
public String getTunnel() { |
||||||
|
return tunnel; |
||||||
|
} |
||||||
|
|
||||||
|
public void setTunnel(String tunnel) { |
||||||
|
this.tunnel = tunnel; |
||||||
|
} |
||||||
|
|
||||||
|
public Boolean getControlstate() { |
||||||
|
return controlstate; |
||||||
|
} |
||||||
|
|
||||||
|
public void setControlstate(Boolean controlstate) { |
||||||
|
this.controlstate = controlstate; |
||||||
|
} |
||||||
|
|
||||||
|
public Boolean getWarningstate() { |
||||||
|
return warningstate; |
||||||
|
} |
||||||
|
|
||||||
|
public void setWarningstate(Boolean warningstate) { |
||||||
|
this.warningstate = warningstate; |
||||||
|
} |
||||||
|
|
||||||
|
public Boolean getOnline() { |
||||||
|
return online; |
||||||
|
} |
||||||
|
|
||||||
|
public void setOnline(Boolean online) { |
||||||
|
this.online = online; |
||||||
|
} |
||||||
|
|
||||||
|
public int getRatio() { |
||||||
|
return ratio; |
||||||
|
} |
||||||
|
|
||||||
|
public void setRatio(int ratio) { |
||||||
|
this.ratio = ratio; |
||||||
|
} |
||||||
|
} |
||||||
@ -0,0 +1,220 @@ |
|||||||
|
package com.back.entity; |
||||||
|
// Generated Sep 1, 2010 2:01:42 PM by Hibernate Tools 3.2.2.GA
|
||||||
|
|
||||||
|
/** |
||||||
|
* City generated by hbm2java |
||||||
|
*/ |
||||||
|
public class Sensor implements java.io.Serializable { |
||||||
|
|
||||||
|
|
||||||
|
private int id; |
||||||
|
private String name; |
||||||
|
private String comid; |
||||||
|
private String remark; |
||||||
|
private Double longitude; |
||||||
|
private Double latitude; |
||||||
|
private String boxImage; |
||||||
|
private String installImage; |
||||||
|
private String tunnel; |
||||||
|
private String protocol; |
||||||
|
private String type; |
||||||
|
private String worktype; |
||||||
|
private String terminal; |
||||||
|
private Boolean warningstate; |
||||||
|
private Boolean controlstate; |
||||||
|
private Boolean master; |
||||||
|
private int num; |
||||||
|
private int floorNo; |
||||||
|
private String addr; |
||||||
|
private int ratio; |
||||||
|
private int cycle; |
||||||
|
private int lane; |
||||||
|
|
||||||
|
public Sensor() { |
||||||
|
} |
||||||
|
|
||||||
|
public Sensor(int id,String name,String comid,String tunnel,String protocol,String type,String worktype,int num,int ratio,int cycle,int lane, |
||||||
|
String terminal,String remark,double longitude,double latitude,Boolean warningstate,Boolean controlstate,Boolean master) { |
||||||
|
this.id = id; |
||||||
|
this.name = name; |
||||||
|
this.comid = comid; |
||||||
|
this.tunnel = tunnel; |
||||||
|
this.protocol = protocol; |
||||||
|
this.type = type; |
||||||
|
this.worktype = worktype; |
||||||
|
this.num = num; |
||||||
|
this.longitude = longitude; |
||||||
|
this.latitude = latitude; |
||||||
|
this.remark = remark; |
||||||
|
this.terminal =terminal; |
||||||
|
this.warningstate = warningstate; |
||||||
|
this.controlstate = controlstate; |
||||||
|
this.master = master; |
||||||
|
this.ratio = ratio; |
||||||
|
this.cycle = cycle; |
||||||
|
this.lane = lane; |
||||||
|
} |
||||||
|
|
||||||
|
public int getId() { |
||||||
|
return this.id; |
||||||
|
} |
||||||
|
|
||||||
|
public void setId(int id) { |
||||||
|
this.id = id; |
||||||
|
} |
||||||
|
public String getName() { |
||||||
|
return this.name; |
||||||
|
} |
||||||
|
|
||||||
|
public void setName(String name) { |
||||||
|
this.name = name; |
||||||
|
} |
||||||
|
public String getRemark() { |
||||||
|
return this.remark; |
||||||
|
} |
||||||
|
|
||||||
|
public void setRemark(String remark) { |
||||||
|
this.remark = remark; |
||||||
|
} |
||||||
|
|
||||||
|
public Double getLongitude() { |
||||||
|
return longitude; |
||||||
|
} |
||||||
|
|
||||||
|
public void setLongitude(Double longitude) { |
||||||
|
this.longitude = longitude; |
||||||
|
} |
||||||
|
|
||||||
|
public Double getLatitude() { |
||||||
|
return latitude; |
||||||
|
} |
||||||
|
|
||||||
|
public void setLatitude(Double latitude) { |
||||||
|
this.latitude = latitude; |
||||||
|
} |
||||||
|
|
||||||
|
public String getBoxImage() { |
||||||
|
return boxImage; |
||||||
|
} |
||||||
|
|
||||||
|
public void setBoxImage(String boxImage) { |
||||||
|
this.boxImage = boxImage; |
||||||
|
} |
||||||
|
|
||||||
|
public String getInstallImage() { |
||||||
|
return installImage; |
||||||
|
} |
||||||
|
|
||||||
|
public void setInstallImage(String installImage) { |
||||||
|
this.installImage = installImage; |
||||||
|
} |
||||||
|
|
||||||
|
public String getComid() { |
||||||
|
return comid; |
||||||
|
} |
||||||
|
public void setComid(String comid) { |
||||||
|
this.comid = comid; |
||||||
|
} |
||||||
|
|
||||||
|
public String getProtocol() { |
||||||
|
return protocol; |
||||||
|
} |
||||||
|
public void setProtocol(String protocol) { |
||||||
|
this.protocol = protocol; |
||||||
|
} |
||||||
|
|
||||||
|
public String getTerminal() { |
||||||
|
return terminal; |
||||||
|
} |
||||||
|
public void setTerminal(String terminal) { |
||||||
|
this.terminal = terminal; |
||||||
|
} |
||||||
|
|
||||||
|
public String getTunnel() { |
||||||
|
return tunnel; |
||||||
|
} |
||||||
|
public void setTunnel(String tunnel) { |
||||||
|
this.tunnel = tunnel; |
||||||
|
} |
||||||
|
|
||||||
|
public String getType() { |
||||||
|
return type; |
||||||
|
} |
||||||
|
public void setType(String type) { |
||||||
|
this.type = type; |
||||||
|
} |
||||||
|
|
||||||
|
public String getWorktype() { |
||||||
|
return worktype; |
||||||
|
} |
||||||
|
public void setWorktype(String worktype) { |
||||||
|
this.worktype = worktype; |
||||||
|
} |
||||||
|
|
||||||
|
public Boolean getControlstate() { |
||||||
|
return controlstate; |
||||||
|
} |
||||||
|
public void setControlstate(Boolean controlstate) { |
||||||
|
this.controlstate = controlstate; |
||||||
|
} |
||||||
|
|
||||||
|
public Boolean getWarningstate() { |
||||||
|
return warningstate; |
||||||
|
} |
||||||
|
public void setWarningstate(Boolean warningstate) { |
||||||
|
this.warningstate = warningstate; |
||||||
|
} |
||||||
|
|
||||||
|
public Boolean getMaster() { |
||||||
|
return master; |
||||||
|
} |
||||||
|
public void setMaster(Boolean master) { |
||||||
|
this.master = master; |
||||||
|
} |
||||||
|
|
||||||
|
public int getNum() { |
||||||
|
return num; |
||||||
|
} |
||||||
|
public void setNum(int num) { |
||||||
|
this.num = num; |
||||||
|
} |
||||||
|
|
||||||
|
public int getFloorNo() { |
||||||
|
return floorNo; |
||||||
|
} |
||||||
|
|
||||||
|
public void setFloorNo(int floorNo) { |
||||||
|
this.floorNo = floorNo; |
||||||
|
} |
||||||
|
|
||||||
|
public String getAddr() { |
||||||
|
return addr; |
||||||
|
} |
||||||
|
|
||||||
|
public void setAddr(String addr) { |
||||||
|
this.addr = addr; |
||||||
|
} |
||||||
|
|
||||||
|
public int getRatio() { |
||||||
|
return ratio; |
||||||
|
} |
||||||
|
public void setRatio(int ratio) { |
||||||
|
this.ratio = ratio; |
||||||
|
} |
||||||
|
|
||||||
|
public int getCycle() { |
||||||
|
return cycle; |
||||||
|
} |
||||||
|
public void setCycle(int cycle) { |
||||||
|
this.cycle = cycle; |
||||||
|
} |
||||||
|
|
||||||
|
public int getLane() { |
||||||
|
return lane; |
||||||
|
} |
||||||
|
public void setLane(int lane) { |
||||||
|
this.lane = lane; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
@ -0,0 +1,49 @@ |
|||||||
|
package com.back.entity; |
||||||
|
|
||||||
|
public class SyncEntity { |
||||||
|
|
||||||
|
private String terminal; |
||||||
|
private int controlsiseffect; |
||||||
|
private int mcontrolsiseffect; |
||||||
|
private int carsensorsiseffect; |
||||||
|
private int luminancesensorsiseffect; |
||||||
|
private int illuminationsensorsisEffect; |
||||||
|
|
||||||
|
public String getTerminal() { |
||||||
|
return terminal; |
||||||
|
} |
||||||
|
public void setTerminal(String terminal) { |
||||||
|
this.terminal = terminal; |
||||||
|
} |
||||||
|
public int getControlsiseffect() { |
||||||
|
return controlsiseffect; |
||||||
|
} |
||||||
|
public void setControlsiseffect(int controlsiseffect) { |
||||||
|
this.controlsiseffect = controlsiseffect; |
||||||
|
} |
||||||
|
public int getMcontrolsiseffect() { |
||||||
|
return mcontrolsiseffect; |
||||||
|
} |
||||||
|
public void setMcontrolsiseffect(int mcontrolsiseffect) { |
||||||
|
this.mcontrolsiseffect = mcontrolsiseffect; |
||||||
|
} |
||||||
|
public int getCarsensorsiseffect() { |
||||||
|
return carsensorsiseffect; |
||||||
|
} |
||||||
|
public void setCarsensorsiseffect(int carsensorsiseffect) { |
||||||
|
this.carsensorsiseffect = carsensorsiseffect; |
||||||
|
} |
||||||
|
public int getLuminancesensorsiseffect() { |
||||||
|
return luminancesensorsiseffect; |
||||||
|
} |
||||||
|
public void setLuminancesensorsiseffect(int luminancesensorsiseffect) { |
||||||
|
this.luminancesensorsiseffect = luminancesensorsiseffect; |
||||||
|
} |
||||||
|
public int getIlluminationsensorsisEffect() { |
||||||
|
return illuminationsensorsisEffect; |
||||||
|
} |
||||||
|
public void setIlluminationsensorsisEffect(int illuminationsensorsisEffect) { |
||||||
|
this.illuminationsensorsisEffect = illuminationsensorsisEffect; |
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
@ -0,0 +1,129 @@ |
|||||||
|
package com.back.main; |
||||||
|
|
||||||
|
import java.util.TimeZone; |
||||||
|
import java.util.Timer; |
||||||
|
import java.util.TimerTask; |
||||||
|
|
||||||
|
import com.back.action.Log; |
||||||
|
import com.back.action.Work; |
||||||
|
import com.back.common.RunParams; |
||||||
|
import com.back.protocol.SystemParameter; |
||||||
|
import org.slf4j.Logger; |
||||||
|
import org.slf4j.LoggerFactory; |
||||||
|
|
||||||
|
public class MainProcess { |
||||||
|
|
||||||
|
public static final Logger LOGGER = LoggerFactory.getLogger(MainProcess.class); |
||||||
|
private static Work work = new Work(); |
||||||
|
private static String clazzName = new Object() { |
||||||
|
public String getClassName() { |
||||||
|
String clazzName = this.getClass().getName(); |
||||||
|
return clazzName.substring(0, clazzName.lastIndexOf('$')); |
||||||
|
} |
||||||
|
}.getClassName(); |
||||||
|
|
||||||
|
|
||||||
|
public static void main(String[] args) { |
||||||
|
|
||||||
|
// Wechat.sendMessage("wangwenbiao",
|
||||||
|
// "测试11[16020245]集中器下的1#组发生故障,故障内容为:灯具故障[000000621870].");
|
||||||
|
// 2017 10 06 将主控开关的曲线数据保存过程,改成按时间点进行存储
|
||||||
|
// 2017 10 14 将补抄任务独立出来
|
||||||
|
// 1.1.50 完全使用多线程
|
||||||
|
// 启动时,生成上一时刻的补抄任务
|
||||||
|
// 1.1.51 增加久载状态更新 事件处理
|
||||||
|
// 1.1.53 关闭监控线程
|
||||||
|
// 1.1.54 处理保存慢的问题
|
||||||
|
// 1.1.57 解决日志过大问题
|
||||||
|
// 1.1.58 任务启动参数迁移到配置文件中
|
||||||
|
// 1.1.59 关闭启动抄回路曲线操作
|
||||||
|
// 1.2.03隧道光感增加传感器使能,使能状态保存在集中器基本信息中
|
||||||
|
// 1.2.04 隧道光感 减少信道占用, 按光感变化阀值 及 上次是否成功
|
||||||
|
// 1.2.06 使用系统默认的时区
|
||||||
|
// 1.2.07 增加灯具日冻结 抄读命令(只抄当前的数据)
|
||||||
|
// 1.2.09 增加主控曲线转主控日冻结功能
|
||||||
|
// 1.2.10 增加 隧道的电量计算,隧道异常电量分析
|
||||||
|
// 1.2.11 简化通信管理机的业务流程,关闭定时巡测任务、传感器转发业务
|
||||||
|
|
||||||
|
System.out.println("ver 1.2.11 2019-03-24 17");// 英文
|
||||||
|
|
||||||
|
System.out.println(TimeZone.getDefault().getDisplayName()); |
||||||
|
// 获取运行参数
|
||||||
|
RunParams runParams = SystemParameter.GetPostParams(); |
||||||
|
if (runParams == null) { |
||||||
|
System.out.println("Database connection failed!"); |
||||||
|
} |
||||||
|
int Intervalscan = runParams.intervalScan; |
||||||
|
int devideSyncTime = runParams.devideSyncTime; |
||||||
|
|
||||||
|
|
||||||
|
/* GPRS指令转发处理 */ |
||||||
|
Mythreadgprs mygprs = new Mythreadgprs(); |
||||||
|
Thread gprs = new Thread(mygprs); |
||||||
|
gprs.start(); |
||||||
|
|
||||||
|
|
||||||
|
// 数据同步
|
||||||
|
Timer dataSyncTimer = new Timer(); |
||||||
|
dataSyncTimer.schedule(new TimerTask() { |
||||||
|
public void run() { |
||||||
|
work.DataSync(); |
||||||
|
} |
||||||
|
}, 0, devideSyncTime * 1000); |
||||||
|
|
||||||
|
|
||||||
|
// 线程运行监控
|
||||||
|
Timer timer3 = new Timer(); |
||||||
|
timer3.schedule(new TimerTask() { |
||||||
|
@Override |
||||||
|
public void run() { |
||||||
|
try { |
||||||
|
work.RunScanThread();// 2017 11 11 如果
|
||||||
|
} catch (Exception e) { |
||||||
|
Log.writelog(clazzName, |
||||||
|
Thread.currentThread().getStackTrace()[1].getMethodName() + "->timer3():" + e.getMessage()); |
||||||
|
e.printStackTrace(); |
||||||
|
} |
||||||
|
} |
||||||
|
}, 0, Intervalscan * 60 * 1000); |
||||||
|
|
||||||
|
|
||||||
|
/* 上报事件处理 --事件处理 */ |
||||||
|
Timer timerEvent = new Timer(); |
||||||
|
timerEvent.schedule(new TimerTask() { |
||||||
|
@Override |
||||||
|
public void run() { |
||||||
|
try { |
||||||
|
work.RunEleAnalyzerData(); |
||||||
|
} catch (Exception e) { |
||||||
|
Log.writelog(clazzName, |
||||||
|
Thread.currentThread().getStackTrace()[1].getMethodName() + "->timer():" + e.getMessage()); |
||||||
|
e.printStackTrace(); |
||||||
|
} |
||||||
|
} |
||||||
|
}, 0, 60 * 1000); |
||||||
|
|
||||||
|
|
||||||
|
//定时日志
|
||||||
|
Timer timelog = new Timer(); |
||||||
|
timelog.schedule(new TimerTask() { |
||||||
|
@Override |
||||||
|
public void run() { |
||||||
|
try { |
||||||
|
Log.writelog(clazzName, "MainProcess Run!"); |
||||||
|
} catch (Exception e) { |
||||||
|
Log.writelog(clazzName, |
||||||
|
Thread.currentThread().getStackTrace()[1].getMethodName() + "->timer():" + e.getMessage()); |
||||||
|
e.printStackTrace(); |
||||||
|
} |
||||||
|
} |
||||||
|
}, 0, 30 * 1000); |
||||||
|
|
||||||
|
|
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -0,0 +1,35 @@ |
|||||||
|
package com.back.main; |
||||||
|
|
||||||
|
import com.back.action.Log; |
||||||
|
import com.back.action.Work; |
||||||
|
|
||||||
|
/** GPRS指令转发 工作线程 */ |
||||||
|
public class Mythreadgprs implements Runnable { |
||||||
|
private Work work = new Work(); |
||||||
|
private String clazzName = new Object() { |
||||||
|
public String getClassName() { |
||||||
|
String clazzName = this.getClass().getName(); |
||||||
|
return clazzName.substring(0, clazzName.lastIndexOf('$')); |
||||||
|
} |
||||||
|
}.getClassName(); |
||||||
|
|
||||||
|
public void run() { |
||||||
|
int i = 0; |
||||||
|
while (true) { |
||||||
|
|
||||||
|
i++; |
||||||
|
if (i > 600) { |
||||||
|
i = 0; |
||||||
|
Log.writelog(clazzName, |
||||||
|
Thread.currentThread().getStackTrace()[1].getMethodName() + "->ForWardGprs() Run!"); |
||||||
|
} |
||||||
|
try { |
||||||
|
Thread.sleep(100); |
||||||
|
work.ForWardGprs(); |
||||||
|
} catch (InterruptedException e) { |
||||||
|
e.printStackTrace(); |
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
@ -0,0 +1,488 @@ |
|||||||
|
/*业务参数查询*/ |
||||||
|
package com.back.protocol; |
||||||
|
|
||||||
|
import java.sql.ResultSet; |
||||||
|
import java.sql.SQLException; |
||||||
|
import java.text.ParseException; |
||||||
|
import java.text.SimpleDateFormat; |
||||||
|
import java.util.Calendar; |
||||||
|
import java.util.Date; |
||||||
|
import java.util.GregorianCalendar; |
||||||
|
|
||||||
|
import com.back.action.Log; |
||||||
|
import com.back.common.Common; |
||||||
|
import com.back.jdbc.SQLHelper; |
||||||
|
|
||||||
|
public class BusinessParameter { |
||||||
|
private static String clazzName = new Object() { |
||||||
|
public String getClassName() { |
||||||
|
String clazzName = this.getClass().getName(); |
||||||
|
return clazzName.substring(0, clazzName.lastIndexOf('$')); |
||||||
|
} |
||||||
|
}.getClassName(); |
||||||
|
|
||||||
|
/* |
||||||
|
* 获取灯控器的条码号 |
||||||
|
*/ |
||||||
|
public static String getbarcode(String ccomid) { |
||||||
|
String strsql = "select barcode from controls where comid='" + ccomid + "'"; |
||||||
|
java.sql.Statement stmt = null; |
||||||
|
ResultSet rSet = SQLHelper.getResultSet(strsql); |
||||||
|
if (rSet == null) { |
||||||
|
return ""; |
||||||
|
} |
||||||
|
String barcode = ""; |
||||||
|
try { |
||||||
|
while (rSet.next()) { |
||||||
|
barcode = rSet.getString("barcode"); |
||||||
|
} |
||||||
|
} catch (SQLException e) { |
||||||
|
Log.writelog(BusinessParameter.clazzName, |
||||||
|
Thread.currentThread().getStackTrace()[1].getMethodName() + "->ERROR:" + e.getMessage()); |
||||||
|
} |
||||||
|
try { |
||||||
|
stmt = rSet.getStatement(); |
||||||
|
rSet.close(); |
||||||
|
stmt.close(); |
||||||
|
rSet = null; |
||||||
|
stmt = null; |
||||||
|
} catch (Exception e) { |
||||||
|
e.printStackTrace(); |
||||||
|
} |
||||||
|
|
||||||
|
return barcode; |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 根据灯装置序号查询灯控器地址 |
||||||
|
* |
||||||
|
* @param tcomid |
||||||
|
* 终端地址 |
||||||
|
* @param num |
||||||
|
* 灯装置序号 |
||||||
|
* @retrrn 灯通讯地址 |
||||||
|
*/ |
||||||
|
public static String getCcomid(String tcomid, int num) { |
||||||
|
String strsql = "SELECT comid FROM controls WHERE terminal='" + tcomid + "' AND num='" + num |
||||||
|
+ "'"; |
||||||
|
java.sql.Statement stmt = null; |
||||||
|
ResultSet rSet = SQLHelper.getResultSet(strsql); |
||||||
|
if (rSet == null) { |
||||||
|
return ""; |
||||||
|
} |
||||||
|
String result = ""; |
||||||
|
try { |
||||||
|
while (rSet.next()) { |
||||||
|
result = rSet.getString("comid"); |
||||||
|
} |
||||||
|
} catch (SQLException e) { |
||||||
|
System.out.println("Protocol.getCcomid():ERROR-->" + e.getMessage()); |
||||||
|
} |
||||||
|
try { |
||||||
|
stmt = rSet.getStatement(); |
||||||
|
rSet.close(); |
||||||
|
stmt.close(); |
||||||
|
rSet = null; |
||||||
|
stmt = null; |
||||||
|
} catch (Exception e) { |
||||||
|
e.printStackTrace(); |
||||||
|
} |
||||||
|
return result; |
||||||
|
} |
||||||
|
|
||||||
|
/** 根据灯防盗序号查询灯控器地址 */ |
||||||
|
public static String getCcomid(String tcomid, int gcomid, int lampid) { |
||||||
|
String strsql = "SELECT comid FROM controls WHERE terminal='" + tcomid + "' AND GroupID='" |
||||||
|
+ gcomid + "' AND LampID=" + lampid; |
||||||
|
java.sql.Statement stmt = null; |
||||||
|
ResultSet rSet = SQLHelper.getResultSet(strsql); |
||||||
|
if (rSet == null) { |
||||||
|
return ""; |
||||||
|
} |
||||||
|
String result = ""; |
||||||
|
try { |
||||||
|
while (rSet.next()) { |
||||||
|
result = rSet.getString("comid"); |
||||||
|
} |
||||||
|
} catch (SQLException e) { |
||||||
|
Log.writelog(BusinessParameter.clazzName, |
||||||
|
Thread.currentThread().getStackTrace()[1].getMethodName() + "->ERROR:" + e.getMessage()); |
||||||
|
} |
||||||
|
try { |
||||||
|
stmt = rSet.getStatement(); |
||||||
|
rSet.close(); |
||||||
|
stmt.close(); |
||||||
|
rSet = null; |
||||||
|
stmt = null; |
||||||
|
} catch (Exception e) { |
||||||
|
e.printStackTrace(); |
||||||
|
} |
||||||
|
return result; |
||||||
|
} |
||||||
|
|
||||||
|
/** 2011-08-08:定采数据解析时使用主动上报故障数据更新定采数据 */ |
||||||
|
public static String getEventInfoValue(String control, int type) { |
||||||
|
String time = Common.getDateStr0(); |
||||||
|
Date dt = new Date(); |
||||||
|
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); |
||||||
|
try { |
||||||
|
dt = format.parse(time); |
||||||
|
} catch (ParseException e) { |
||||||
|
e.printStackTrace(); |
||||||
|
} |
||||||
|
|
||||||
|
String starttime = ""; |
||||||
|
String endtime = ""; |
||||||
|
GregorianCalendar gc = new GregorianCalendar(); |
||||||
|
if (dt.getHours() < 12) { |
||||||
|
gc.setTime(dt); |
||||||
|
gc.add(5, -1); |
||||||
|
gc.set(gc.get(Calendar.YEAR), gc.get(Calendar.MONTH), gc.get(Calendar.DATE), 12, 0, 0); |
||||||
|
starttime = format.format(gc.getTime()); |
||||||
|
gc.add(5, 1); |
||||||
|
gc.set(gc.get(Calendar.YEAR), gc.get(Calendar.MONTH), gc.get(Calendar.DATE), 12, 0, 0); |
||||||
|
endtime = format.format(gc.getTime()); |
||||||
|
} else { |
||||||
|
gc.setTime(dt); |
||||||
|
gc.set(gc.get(Calendar.YEAR), gc.get(Calendar.MONTH), gc.get(Calendar.DATE), 12, 0, 0); |
||||||
|
starttime = format.format(gc.getTime()); |
||||||
|
gc.add(5, 1); |
||||||
|
gc.set(gc.get(Calendar.YEAR), gc.get(Calendar.MONTH), gc.get(Calendar.DATE), 12, 0, 0); |
||||||
|
endtime = format.format(gc.getTime()); |
||||||
|
} |
||||||
|
format = null; |
||||||
|
gc = null; |
||||||
|
dt = null; |
||||||
|
|
||||||
|
String strrev = ""; |
||||||
|
String strquery = "select eventid from eventinfo where control1='" + control + "' and type=" |
||||||
|
+ type + " and wtime>'" + starttime + "' and wtime<='" + endtime + "' "; |
||||||
|
ResultSet rSet = SQLHelper.getResultSet(strquery); |
||||||
|
if (rSet == null) { |
||||||
|
return ""; |
||||||
|
} |
||||||
|
try { |
||||||
|
while (rSet.next()) { |
||||||
|
strrev = rSet.getString("eventid"); |
||||||
|
} |
||||||
|
} catch (SQLException e) { |
||||||
|
e.printStackTrace(); |
||||||
|
} |
||||||
|
try { |
||||||
|
rSet.close(); |
||||||
|
rSet = null; |
||||||
|
} catch (Exception e) { |
||||||
|
// TODO: handle exception
|
||||||
|
} |
||||||
|
|
||||||
|
return strrev; |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 根据终端地址,灯地址获取组地址 |
||||||
|
* |
||||||
|
* @param terminal |
||||||
|
* 终端地址 |
||||||
|
* @param ccomid |
||||||
|
* 灯地址 |
||||||
|
* @return string 组地址 |
||||||
|
*/ |
||||||
|
public static int getgcomid(String terminal, String ccomid) { |
||||||
|
int gcomid = 0; |
||||||
|
|
||||||
|
String strsql = "SELECT groupid FROM controls WHERE terminal='" + terminal + "' AND comid='" |
||||||
|
+ ccomid + "'"; |
||||||
|
java.sql.Statement stmt = null; |
||||||
|
ResultSet rSet = SQLHelper.getResultSet(strsql); |
||||||
|
if (rSet == null) { |
||||||
|
return gcomid; |
||||||
|
} |
||||||
|
try { |
||||||
|
while (rSet.next()) { |
||||||
|
gcomid = rSet.getInt("groupid"); |
||||||
|
} |
||||||
|
} catch (SQLException e) { |
||||||
|
Log.writelog(BusinessParameter.clazzName, |
||||||
|
Thread.currentThread().getStackTrace()[1].getMethodName() + "->ERROR:" + e.getMessage()); |
||||||
|
} |
||||||
|
try { |
||||||
|
stmt = rSet.getStatement(); |
||||||
|
rSet.close(); |
||||||
|
stmt.close(); |
||||||
|
rSet = null; |
||||||
|
stmt = null; |
||||||
|
} catch (Exception e) { |
||||||
|
e.printStackTrace(); |
||||||
|
} |
||||||
|
return gcomid; |
||||||
|
} |
||||||
|
|
||||||
|
/** 根据终端地址、组地址查询组名称 */ |
||||||
|
public static String getgname(String tcomid, int gcomid) { |
||||||
|
String result = ""; |
||||||
|
String strsql = "SELECT name FROM groups WHERE terminal='" + tcomid + "' AND groupid=" + gcomid |
||||||
|
+ ""; |
||||||
|
java.sql.Statement stmt = null; |
||||||
|
ResultSet rSet = SQLHelper.getResultSet(strsql); |
||||||
|
if (rSet == null) { |
||||||
|
return ""; |
||||||
|
} |
||||||
|
try { |
||||||
|
while (rSet.next()) { |
||||||
|
result = rSet.getString("name"); |
||||||
|
} |
||||||
|
} catch (SQLException e) { |
||||||
|
System.err.println("Protocal-->getGName->ERROR:" + e.toString()); |
||||||
|
} |
||||||
|
try { |
||||||
|
stmt = rSet.getStatement(); |
||||||
|
rSet.close(); |
||||||
|
stmt.close(); |
||||||
|
rSet = null; |
||||||
|
stmt = null; |
||||||
|
} catch (Exception e) { |
||||||
|
e.printStackTrace(); |
||||||
|
} |
||||||
|
return result; |
||||||
|
} |
||||||
|
|
||||||
|
public static String getgname(String tcomid) { |
||||||
|
String result = ""; |
||||||
|
String strsql = "SELECT name FROM terminals WHERE comid='" + tcomid + "'"; |
||||||
|
java.sql.Statement stmt = null; |
||||||
|
ResultSet rSet = SQLHelper.getResultSet(strsql); |
||||||
|
if (rSet == null) { |
||||||
|
return ""; |
||||||
|
} |
||||||
|
try { |
||||||
|
while (rSet.next()) { |
||||||
|
result = rSet.getString("name"); |
||||||
|
} |
||||||
|
} catch (SQLException e) { |
||||||
|
System.err.println("Protocal-->getGName->ERROR:" + e.toString()); |
||||||
|
} |
||||||
|
try { |
||||||
|
stmt = rSet.getStatement(); |
||||||
|
rSet.close(); |
||||||
|
stmt.close(); |
||||||
|
rSet = null; |
||||||
|
stmt = null; |
||||||
|
} catch (Exception e) { |
||||||
|
e.printStackTrace(); |
||||||
|
} |
||||||
|
return result; |
||||||
|
} |
||||||
|
|
||||||
|
/** 获取集中器所属线路 */ |
||||||
|
public static String getLine(String terminal) { |
||||||
|
String line = ""; |
||||||
|
String strsql = "select line from terminals where comid='" + terminal + "'"; |
||||||
|
java.sql.Statement stmt = null; |
||||||
|
ResultSet rSet = SQLHelper.getResultSet(strsql); |
||||||
|
if (rSet == null) { |
||||||
|
return ""; |
||||||
|
} |
||||||
|
try { |
||||||
|
while (rSet.next()) { |
||||||
|
line = rSet.getString("line"); |
||||||
|
} |
||||||
|
} catch (Exception e) { |
||||||
|
} |
||||||
|
try { |
||||||
|
stmt = rSet.getStatement(); |
||||||
|
rSet.close(); |
||||||
|
stmt.close(); |
||||||
|
rSet = null; |
||||||
|
stmt = null; |
||||||
|
} catch (Exception e) { |
||||||
|
e.printStackTrace(); |
||||||
|
} |
||||||
|
return line; |
||||||
|
} |
||||||
|
|
||||||
|
/** 按主控通信地址获取主控条码号 */ |
||||||
|
public static String getMbarcode(String terminal, String mcomid) { |
||||||
|
String barcode = ""; |
||||||
|
String strsql = "select barcode from mcontrols where comid='" + mcomid + "' and terminal='" |
||||||
|
+ terminal + "'"; |
||||||
|
java.sql.Statement stmt = null; |
||||||
|
ResultSet rSet = SQLHelper.getResultSet(strsql); |
||||||
|
if (rSet == null) { |
||||||
|
return ""; |
||||||
|
} |
||||||
|
try { |
||||||
|
while (rSet.next()) { |
||||||
|
barcode = rSet.getString("barcode"); |
||||||
|
} |
||||||
|
} catch (SQLException e) { |
||||||
|
Log.writelog(BusinessParameter.clazzName, |
||||||
|
Thread.currentThread().getStackTrace()[1].getMethodName() + "->ERROR:" + e.getMessage()); |
||||||
|
} |
||||||
|
try { |
||||||
|
stmt = rSet.getStatement(); |
||||||
|
rSet.close(); |
||||||
|
stmt.close(); |
||||||
|
rSet = null; |
||||||
|
stmt = null; |
||||||
|
} catch (Exception e) { |
||||||
|
e.printStackTrace(); |
||||||
|
} |
||||||
|
|
||||||
|
return barcode; |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 根据主控装置序号查询主控开关地址 |
||||||
|
* |
||||||
|
* @param tcomid |
||||||
|
* 终端地址 |
||||||
|
* @param num |
||||||
|
* 灯装置序号 |
||||||
|
* @retrrn 灯通讯地址 |
||||||
|
*/ |
||||||
|
public static String getMcomid(String tcomid, int num) { |
||||||
|
String result = ""; |
||||||
|
|
||||||
|
String strsql = "SELECT comid FROM mcontrols WHERE terminal='" + tcomid + "' AND num='" + num |
||||||
|
+ "'"; |
||||||
|
java.sql.Statement stmt = null; |
||||||
|
ResultSet rSet = SQLHelper.getResultSet(strsql); |
||||||
|
if (rSet == null) { |
||||||
|
return ""; |
||||||
|
} |
||||||
|
try { |
||||||
|
while (rSet.next()) { |
||||||
|
result = rSet.getString("comid"); |
||||||
|
} |
||||||
|
} catch (SQLException e) { |
||||||
|
System.err.println("Protocal-->getMcomid->ERROR:" + e.toString()); |
||||||
|
} |
||||||
|
try { |
||||||
|
stmt = rSet.getStatement(); |
||||||
|
rSet.close(); |
||||||
|
stmt.close(); |
||||||
|
rSet = null; |
||||||
|
stmt = null; |
||||||
|
} catch (Exception e) { |
||||||
|
e.printStackTrace(); |
||||||
|
} |
||||||
|
return result; |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 判断集中器是否设置短信发送处理 |
||||||
|
* |
||||||
|
* @param terminal |
||||||
|
* 通信地址 |
||||||
|
* @param informtype |
||||||
|
* 发送信息类型 |
||||||
|
*/ |
||||||
|
public static boolean IsSend(String terminal, String informtype) { |
||||||
|
String line = getLine(terminal); |
||||||
|
String strsql = "select count(1) from SmsInform where Line='" + line + "' and " + informtype |
||||||
|
+ "=1"; |
||||||
|
if (SQLHelper.IsExist(strsql)) { |
||||||
|
return true; |
||||||
|
} else { |
||||||
|
return false; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 判断集中器是否设置短信发送处理 |
||||||
|
* |
||||||
|
* @param terminal |
||||||
|
* 通信地址 |
||||||
|
* @param informtype |
||||||
|
* 发送信息类型 |
||||||
|
*/ |
||||||
|
public static boolean IsSend(String terminal, int informtype) { |
||||||
|
|
||||||
|
String stringInformtype = "item19"; |
||||||
|
switch (informtype) { |
||||||
|
|
||||||
|
case 1: // 温度预警
|
||||||
|
stringInformtype = "item1"; |
||||||
|
break; |
||||||
|
case 2: // 漏电流预警
|
||||||
|
stringInformtype = "item2"; |
||||||
|
break; |
||||||
|
case 3: // 相位不符预警
|
||||||
|
stringInformtype = "item3"; |
||||||
|
break; |
||||||
|
case 4: // 线路不符警示
|
||||||
|
stringInformtype = "item4"; |
||||||
|
break; |
||||||
|
case 5: // 台区不符警示
|
||||||
|
stringInformtype = "item5"; |
||||||
|
break; |
||||||
|
case 6: // 使用寿命到期预警
|
||||||
|
stringInformtype = "item6"; |
||||||
|
break; |
||||||
|
case 21: // 灯具故障
|
||||||
|
stringInformtype = "item7"; |
||||||
|
break; |
||||||
|
case 22: // 温度故障
|
||||||
|
stringInformtype = "item8"; |
||||||
|
break; |
||||||
|
case 23: // 超负荷报警
|
||||||
|
stringInformtype = "item9"; |
||||||
|
break; |
||||||
|
case 24: // 功率因数过低
|
||||||
|
stringInformtype = "item10"; |
||||||
|
break; |
||||||
|
case 25: // 时钟故障
|
||||||
|
stringInformtype = "item11"; |
||||||
|
break; |
||||||
|
|
||||||
|
/* |
||||||
|
* case 41: //配电箱前门开启 stringInformtype = "item11"; break; case 42: //配电箱前门开启 stringInformtype =
|
||||||
|
* "item11"; break; |
||||||
|
*/ |
||||||
|
/* |
||||||
|
case 44: // 通迅异常
|
||||||
|
stringInformtype = "item12"; |
||||||
|
break;*/ |
||||||
|
case 26: // 灯珠故障
|
||||||
|
stringInformtype = "item13"; |
||||||
|
break; |
||||||
|
case 27: // 电源故障
|
||||||
|
stringInformtype = "item14"; |
||||||
|
break; |
||||||
|
/* |
||||||
|
* case 48: //传感器事件记录 stringInformtype = "item11"; break;
|
||||||
|
* |
||||||
|
* |
||||||
|
* case 111: //主控故障 A相电压超限 stringInformtype = "item12"; break; case 112: //主控故障 B相电压超限
|
||||||
|
* stringInformtype = "item12"; break; case 113: //主控故障 C相电压超限 stringInformtype = "item12";
|
||||||
|
* |
||||||
|
* case 121: //主控故障 A相过载故障 stringInformtype = "item12"; break; case 122: //主控故障 B相过载故障
|
||||||
|
* stringInformtype = "item12"; break; case 123: //主控故障 C相过载故障 stringInformtype = "item12";
|
||||||
|
* break; |
||||||
|
* |
||||||
|
* |
||||||
|
* case 131: //主控故障 A相 欠载故障 stringInformtype = "item12"; break; case 132: //主控故障 B相 欠载故障
|
||||||
|
* stringInformtype = "item12"; break; case 133: //主控故障 C相 欠载故障 stringInformtype = "item12";
|
||||||
|
* break; |
||||||
|
* |
||||||
|
* case 141: //主控故障 A相 功率因数过低 stringInformtype = "item12"; break; case 142: //主控故障 B相 功率因数过低
|
||||||
|
* stringInformtype = "item12"; break; case 143: //主控故障 C相 功率因数过低 stringInformtype = "item12";
|
||||||
|
* break; |
||||||
|
* |
||||||
|
* case 144: //交流接触器故障 stringInformtype = "item12"; break;
|
||||||
|
*/ |
||||||
|
} |
||||||
|
Log.writelog(BusinessParameter.clazzName, "BusinessParameter->getLine start");//启动发送
|
||||||
|
String line = getLine(terminal); |
||||||
|
Log.writelog(BusinessParameter.clazzName, "BusinessParameter->getLine over");//启动发送
|
||||||
|
String strsql = "select count(1) from SmsInform where Line='" + line + "' and " |
||||||
|
+ stringInformtype + "=1"; |
||||||
|
if (SQLHelper.IsExist(strsql)) { |
||||||
|
Log.writelog(BusinessParameter.clazzName, "BusinessParameter->issend over"); |
||||||
|
return true; |
||||||
|
} else { |
||||||
|
Log.writelog(BusinessParameter.clazzName, "BusinessParameter->issend over"); |
||||||
|
return false; |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,262 @@ |
|||||||
|
/*通用字符串处理类,以376.1为基础*/ |
||||||
|
package com.back.protocol; |
||||||
|
|
||||||
|
|
||||||
|
import com.back.common.Common; |
||||||
|
|
||||||
|
public class GeneralString { |
||||||
|
|
||||||
|
/** |
||||||
|
* 按附录A01数据格式解析数据(秒分时日(星期-月)年) |
||||||
|
* |
||||||
|
* @param binarys |
||||||
|
* 二进制数据 |
||||||
|
* @return yyyy-mm-dd hh:mm:ss |
||||||
|
*/ |
||||||
|
public static String formatA01(String binarys) { |
||||||
|
String[] array = binarys.split("-"); |
||||||
|
return "20" + array[5] + "-" + Integer.toHexString(Integer.parseInt(array[4], 16) & 0x1F) |
||||||
|
+ "-" + array[3] + " " + array[2] + ":" + array[1] + ":" + array[0]; |
||||||
|
} |
||||||
|
/** |
||||||
|
* 按附录A07数据格式解析数据 |
||||||
|
* |
||||||
|
* @param binarys |
||||||
|
* 二进制数据 |
||||||
|
*/ |
||||||
|
public static String formatA06(String binarys) { |
||||||
|
String[] array = binarys.split("-"); |
||||||
|
|
||||||
|
if (array[0].equals(array[1]) && array[0].equals("EE")) {// 无效数据不处理
|
||||||
|
return ""; |
||||||
|
} |
||||||
|
int i= Integer.parseInt(array[1], 16); |
||||||
|
String ibitString = ""; |
||||||
|
if ((i&0x80)>0) |
||||||
|
ibitString = "-"; |
||||||
|
|
||||||
|
ibitString = ibitString + Common.dec2Hex(i & 0x7F,2) + "." + array[0]; |
||||||
|
return ibitString; |
||||||
|
} |
||||||
|
/** |
||||||
|
* 按附录A07数据格式解析数据 |
||||||
|
* |
||||||
|
* @param binarys |
||||||
|
* 二进制数据 |
||||||
|
* XXX.X |
||||||
|
*/ |
||||||
|
public static String formatA07(String binarys) { |
||||||
|
String[] array = binarys.split("-"); |
||||||
|
|
||||||
|
if (array[0].equals(array[1]) && array[0].equals("EE")) {// 无效数据不处理
|
||||||
|
return ""; |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
return array[1] + array[0].substring(0,1) + "." + array[0].substring(1) ; |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 按附录A09数据格式解析数据 |
||||||
|
* |
||||||
|
* @param binarys |
||||||
|
* 二进制数据 |
||||||
|
*/ |
||||||
|
public static String formatA08(String binarys) { |
||||||
|
String[] array = binarys.split("-"); |
||||||
|
|
||||||
|
if (array[0].equals(array[1]) && array[0].equals("EE")) {// 无效数据不处理
|
||||||
|
return ""; |
||||||
|
} |
||||||
|
|
||||||
|
int num = Integer.parseInt(array[2], 16); |
||||||
|
String ibit = ""; |
||||||
|
if ((num & 0x80)>0) |
||||||
|
ibit = "-"; |
||||||
|
ibit += Common.dec2Hex(num & 0x7F,2); |
||||||
|
ibit = ibit + "." + array[1] + array[0]; |
||||||
|
|
||||||
|
return ibit; |
||||||
|
} |
||||||
|
/** |
||||||
|
* 按附录A09数据格式解析数据 |
||||||
|
* |
||||||
|
* @param binarys |
||||||
|
* 二进制数据 |
||||||
|
*/ |
||||||
|
public static String formatA09(String binarys) { |
||||||
|
String[] array = binarys.split("-"); |
||||||
|
|
||||||
|
if (array[0].equals(array[1]) && array[0].equals(array[2]) && array[0].equals("EE")) {// 无效数据不处理
|
||||||
|
return ""; |
||||||
|
} |
||||||
|
|
||||||
|
int num = Integer.parseInt(array[2], 16); |
||||||
|
String ibit = ""; |
||||||
|
if ((num & 0x80)>0) |
||||||
|
ibit = "-"; |
||||||
|
ibit += Common.dec2Hex(num & 0x7F,2); |
||||||
|
ibit = ibit + "." + array[1] + array[0]; |
||||||
|
|
||||||
|
return ibit; |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 按附录A11数据格式解析数据 |
||||||
|
* |
||||||
|
* @param binarys |
||||||
|
* 二进制数据 |
||||||
|
*/ |
||||||
|
public static String formatA11(String binarys) { |
||||||
|
String[] array = binarys.split("-"); |
||||||
|
|
||||||
|
if (array[0].equals(array[1]) && array[0].equals(array[2]) && array[0].equals(array[3]) && array[0].equals("EE")) {// 无效数据不处理
|
||||||
|
return ""; |
||||||
|
} |
||||||
|
|
||||||
|
return array[3]+array[2]+ array[1] +"." + array[0]; |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 按附录A13数据格式解析数据 |
||||||
|
* |
||||||
|
* @param binarys |
||||||
|
* 二进制数据 |
||||||
|
*/ |
||||||
|
public static String formatA13(String binarys) { |
||||||
|
String[] array = binarys.split("-"); |
||||||
|
|
||||||
|
if (array[0].equals(array[1]) && array[0].equals(array[2]) && array[0].equals(array[3]) && array[0].equals("EE")) {// 无效数据不处理
|
||||||
|
return ""; |
||||||
|
} |
||||||
|
|
||||||
|
return array[3]+array[2] +"." + array[1] + array[0]; |
||||||
|
} |
||||||
|
/** |
||||||
|
* 按附录A14数据格式解析数据 |
||||||
|
* |
||||||
|
* @param binarys |
||||||
|
* 二进制数据 |
||||||
|
*/ |
||||||
|
public static String formatA14(String binarys) { |
||||||
|
String[] array = binarys.split("-"); |
||||||
|
|
||||||
|
if (array[0].equals(array[1]) && array[0].equals(array[2]) && array[0].equals(array[3]) && array[0].equals(array[4]) && array[0].equals("EE")) {// 无效数据不处理
|
||||||
|
return ""; |
||||||
|
} |
||||||
|
|
||||||
|
return array[4]+array[3]+array[2] +"." + array[1] + array[0]; |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 按附录A15数据格式解析数据(分时日月年) |
||||||
|
* |
||||||
|
* @param binarys |
||||||
|
* 二进制数据 |
||||||
|
* @return yyyy-MM-dd hh:mm:ss |
||||||
|
*/ |
||||||
|
public static String formatA15(String binarys) { |
||||||
|
String[] array = binarys.split("-"); |
||||||
|
String minute = array[0]; |
||||||
|
String hour = array[1]; |
||||||
|
String day = array[2]; |
||||||
|
String month = array[3]; |
||||||
|
String year = "20" + array[4]; |
||||||
|
|
||||||
|
return year + "-" + month + "-" + day + " " + hour + ":" + minute + ":00"; |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 按附录A17数据格式解析数据(分时日月) |
||||||
|
* |
||||||
|
* @param binarys |
||||||
|
* 二进制数据 |
||||||
|
* @return yyyy-MM-dd hh:mm:ss |
||||||
|
*/ |
||||||
|
public static String formatA17(String binarys) { |
||||||
|
String[] array = binarys.split("-"); |
||||||
|
|
||||||
|
String year = Common.getYear(); |
||||||
|
|
||||||
|
return year + "-" + array[3] + "-" + array[2] + " " + array[1] + ":" + array[0] + ":00"; |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 按附录A25数据格式解析数据 |
||||||
|
* |
||||||
|
* @param binarys |
||||||
|
* 二进制数据 |
||||||
|
*/ |
||||||
|
public static String formatA25(String binarys) { |
||||||
|
String[] array = binarys.split("-"); |
||||||
|
|
||||||
|
if (array[0].equals(array[1]) && array[0].equals(array[2]) && array[0].equals("EE")) {// 无效数据不处理
|
||||||
|
return ""; |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
int num = Integer.parseInt(array[2], 16); |
||||||
|
String ibit = ""; |
||||||
|
if ((num & 0x80)>0) |
||||||
|
ibit = "-"; |
||||||
|
ibit += Integer.toHexString(num & 0x7F); |
||||||
|
ibit = ibit + array[1].substring(0, 1) + "." + array[1].substring(1) + array[0]; |
||||||
|
return ibit; |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 按附录A25数据格式解析数据 |
||||||
|
* |
||||||
|
* @param binarys |
||||||
|
* 二进制数据 |
||||||
|
*/ |
||||||
|
public static String formatA26(String binarys) { |
||||||
|
String[] array = binarys.split("-"); |
||||||
|
|
||||||
|
if (array[0].equals(array[1]) && array[0].equals("EE")) {// 无效数据不处理
|
||||||
|
return ""; |
||||||
|
} |
||||||
|
|
||||||
|
return array[1].substring(0, 1) + "." + array[1].substring(1) + array[0]; |
||||||
|
} |
||||||
|
/** |
||||||
|
* 按附录A260数据格式解析数据 |
||||||
|
* |
||||||
|
* @param binarys |
||||||
|
* 二进制数据 |
||||||
|
*/ |
||||||
|
public static String formatA260(String binarys) { |
||||||
|
String[] array = binarys.split("-"); |
||||||
|
|
||||||
|
if (array[0].equals(array[1]) && array[0].equals("EE")) {// 无效数据不处理
|
||||||
|
return ""; |
||||||
|
} |
||||||
|
|
||||||
|
return array[1] + array[0].substring(0, 1) + "." + array[0].substring(1); |
||||||
|
} |
||||||
|
/** |
||||||
|
* 按附录A261数据格式解析数据 |
||||||
|
* |
||||||
|
* @param binarys |
||||||
|
* 二进制数据 |
||||||
|
*/ |
||||||
|
public static String formatA261(String binarys) { |
||||||
|
String[] array = binarys.split("-"); |
||||||
|
|
||||||
|
if (array[0].equals(array[1]) && array[0].equals(array[2]) && array[0].equals(array[3]) && array[0].equals("EE")) {// 无效数据不处理
|
||||||
|
return ""; |
||||||
|
} |
||||||
|
|
||||||
|
return array[3]+array[2] + array[1] + array[0].substring(0, 1) + "." + array[0].substring(1); |
||||||
|
} |
||||||
|
/** 返回指定字符的重复 */ |
||||||
|
public static String Strings(int len, char c) { |
||||||
|
StringBuffer sbf = new StringBuffer(); |
||||||
|
int i = 0; |
||||||
|
while (i < len) { |
||||||
|
i += 1; |
||||||
|
sbf.append(c); |
||||||
|
} |
||||||
|
return sbf.toString(); |
||||||
|
} |
||||||
|
} |
||||||
@ -0,0 +1,553 @@ |
|||||||
|
package com.back.protocol; |
||||||
|
|
||||||
|
import com.back.action.Log; |
||||||
|
import com.back.common.Common; |
||||||
|
|
||||||
|
public class LampOld extends Protocol { |
||||||
|
|
||||||
|
static String cmdcode = ""; |
||||||
|
private static String clazzName = new Object() { |
||||||
|
public String getClassName() { |
||||||
|
String clazzName = this.getClass().getName(); |
||||||
|
return clazzName.substring(0, clazzName.lastIndexOf('$')); |
||||||
|
} |
||||||
|
}.getClassName(); |
||||||
|
|
||||||
|
/** |
||||||
|
* 响应数据解析处理 |
||||||
|
* |
||||||
|
* @param cmdid |
||||||
|
* 转发指令ID(定采指令ID为0) |
||||||
|
* @param terminal |
||||||
|
* 终端地址 |
||||||
|
* @param receivedata |
||||||
|
* 上行报文数据 |
||||||
|
* @param state |
||||||
|
* 抄读状态(0为正常抄读,1为不在线,2为忙,3为超时,4为GPRS服务器连接失败) |
||||||
|
* @param comtype |
||||||
|
* 通信类型(0001为串口,0002为GPRS) |
||||||
|
* @param batchtime |
||||||
|
*/ |
||||||
|
public void ResolvingData(int cmdid, String terminal, String receivedata, int state, |
||||||
|
String comtype, String batchtime) { |
||||||
|
if (comtype.equals("0001")) { // 串口数据解析
|
||||||
|
if (receivedata.length() == 0) { // 超时没有应答
|
||||||
|
if (cmdid != 0) { // 非定采数据
|
||||||
|
wReceiveData(cmdid, terminal, receivedata, state); |
||||||
|
} |
||||||
|
} else { |
||||||
|
dataExecute(cmdid, receivedata, batchtime); //
|
||||||
|
} |
||||||
|
} else if (comtype.equals("0002")) {// GPRS 数据解析
|
||||||
|
if (cmdid == 0) {// 定采指令响应数据解析
|
||||||
|
if (state == 0) { |
||||||
|
dataAnalysis(receivedata, batchtime); |
||||||
|
} |
||||||
|
} else {// 指令转发响应数据,直接写入结果表
|
||||||
|
wReceiveData(cmdid, terminal, receivedata, state); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
/** 上行报文数据解析处理(定采响应数据和上报数据) */ |
||||||
|
public static void dataAnalysis(String cmdcode, String batchtime) { |
||||||
|
if (cmdcode.length() == 0) { |
||||||
|
return; |
||||||
|
} |
||||||
|
|
||||||
|
String terminal = "";// 终端地址
|
||||||
|
int gcomid = 0;// 组地址
|
||||||
|
String ccomid = "";// 灯地址
|
||||||
|
|
||||||
|
int count = 0;// 组内灯的数量
|
||||||
|
String succeed = "";// 灯的抄读成功标识
|
||||||
|
String status = "";// 状态
|
||||||
|
String failure = "";// 故障
|
||||||
|
String crctime = "";// 时间表CRC
|
||||||
|
|
||||||
|
String[] array; |
||||||
|
array = cmdcode.split("-"); |
||||||
|
|
||||||
|
for (int i = 4; i < 8; i++) { |
||||||
|
terminal += array[i]; |
||||||
|
} |
||||||
|
|
||||||
|
try { |
||||||
|
if (array[10].equals("11") && array[11].equals("00")) {// 故障上报帧
|
||||||
|
wEventData(terminal, "1", cmdcode, "0001"); |
||||||
|
} else if (array[10].equals("11") && array[11].equals("10")) {// 防盗上报帧
|
||||||
|
wEventData(terminal, "2", cmdcode, "0001"); |
||||||
|
} else if (array[10].equals("10") && array[11].equals("71")) {// 路灯状态抄读帧
|
||||||
|
gcomid = Common.hextoint(array[12]); |
||||||
|
count = Integer.parseInt(array[13], 16); |
||||||
|
if (count == 0) { |
||||||
|
return; |
||||||
|
} |
||||||
|
String[] temp = new String[array.length - 19]; |
||||||
|
System.arraycopy(array, 14, temp, 0, array.length - 19);// 数组复制
|
||||||
|
|
||||||
|
for (int i = 0; i < temp.length / 9; i++) { |
||||||
|
ccomid = temp[i * 9] + temp[i * 9 + 1] + temp[i * 9 + 2] + temp[i * 9 + 3]; |
||||||
|
succeed = temp[i * 9 + 4]; |
||||||
|
status = temp[i * 9 + 5]; |
||||||
|
failure = temp[i * 9 + 6]; |
||||||
|
crctime = temp[i * 9 + 7] + temp[i * 9 + 8]; |
||||||
|
// 定采数据解析
|
||||||
|
analyCurData(terminal, gcomid, ccomid, succeed, status, failure, batchtime); |
||||||
|
} |
||||||
|
} |
||||||
|
} catch (Exception e) { |
||||||
|
wabnormal(terminal, cmdcode, "集中器上行报文不符合应用(不存在故障灯)!", "前置机", Common.getDateStr0()); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 定采数据解析 |
||||||
|
* |
||||||
|
* @param tcomid |
||||||
|
* 终端地址 |
||||||
|
* @param gcomid |
||||||
|
* 组地址 |
||||||
|
* @param ccomid |
||||||
|
* 灯地址 |
||||||
|
* @param succeed |
||||||
|
* 抄读状态 |
||||||
|
* @param status |
||||||
|
* 灯状态 |
||||||
|
* @param failure |
||||||
|
* 故障状态 |
||||||
|
*/ |
||||||
|
public static void analyCurData(String tcomid, int gcomid, String ccomid, String succeed, |
||||||
|
String status, String failure, String batchtime) { |
||||||
|
|
||||||
|
ccomid = Common.right("00000000" + ccomid, 8); |
||||||
|
int intsucceed = Integer.parseInt(succeed);// 抄读成功标识:0为失败,1为成功
|
||||||
|
|
||||||
|
status = Common.hextobinary(status); |
||||||
|
status = Common.right("00000000" + status, 8); |
||||||
|
|
||||||
|
int arealystate = Integer.parseInt(status.substring(7, 8)); |
||||||
|
int brealystate = Integer.parseInt(status.substring(5, 6)); |
||||||
|
int aschedule = Integer.parseInt(status.substring(2, 3)); |
||||||
|
int bschedule = Integer.parseInt(status.substring(0, 1)); |
||||||
|
int clockstate = Integer.parseInt(status.substring(1, 2)); |
||||||
|
|
||||||
|
failure = Common.hextobinary(failure); |
||||||
|
failure = Common.right("00000000" + failure, 8); |
||||||
|
|
||||||
|
int lampstate = intsucceed;// 灯状态字标识:0表示错误,1表示正确,2表示未知
|
||||||
|
int arealyerr = Integer.parseInt(failure.substring(6, 7)); |
||||||
|
if (arealyerr == 1) |
||||||
|
lampstate = 0; |
||||||
|
int brealyerr = Integer.parseInt(failure.substring(4, 5)); |
||||||
|
if (brealyerr == 1) |
||||||
|
lampstate = 0; |
||||||
|
int ablinkerr = Integer.parseInt(failure.substring(3, 4)); |
||||||
|
if (ablinkerr == 1) |
||||||
|
lampstate = 0; |
||||||
|
int temperatureerr = Integer.parseInt(failure.substring(2, 3)); |
||||||
|
int clockerr = Integer.parseInt(failure.substring(1, 2)); |
||||||
|
int alamperr = Integer.parseInt(failure.substring(0, 1)); |
||||||
|
if (alamperr == 1) |
||||||
|
lampstate = 0; |
||||||
|
|
||||||
|
// 2011-08-08
|
||||||
|
String srceventid = ""; |
||||||
|
String strtemp = ""; |
||||||
|
if (intsucceed == 1) { |
||||||
|
if (arealyerr == 0) { |
||||||
|
strtemp = businessParameter.getEventInfoValue(ccomid, 1); |
||||||
|
if (!strtemp.equals("")) { |
||||||
|
arealyerr = 1; |
||||||
|
lampstate = 0; |
||||||
|
srceventid += "[arealyerr:" + strtemp + "]"; |
||||||
|
} |
||||||
|
} |
||||||
|
if (brealyerr == 0) { |
||||||
|
strtemp = businessParameter.getEventInfoValue(ccomid, 2); |
||||||
|
if (!strtemp.equals("")) { |
||||||
|
brealyerr = 1; |
||||||
|
lampstate = 0; |
||||||
|
srceventid += "[brealyerr:" + strtemp + "]"; |
||||||
|
} |
||||||
|
} |
||||||
|
if (ablinkerr == 0) { |
||||||
|
strtemp = businessParameter.getEventInfoValue(ccomid, 4); |
||||||
|
if (!strtemp.equals("")) { |
||||||
|
ablinkerr = 1; |
||||||
|
lampstate = 0; |
||||||
|
srceventid += "[ablinkerr:" + strtemp + "]"; |
||||||
|
} |
||||||
|
} |
||||||
|
if (alamperr == 0) { |
||||||
|
strtemp = businessParameter.getEventInfoValue(ccomid, 3); |
||||||
|
if (!strtemp.equals("")) { |
||||||
|
alamperr = 1; |
||||||
|
lampstate = 0; |
||||||
|
srceventid += "[alamperr:" + strtemp + "]"; |
||||||
|
} |
||||||
|
} |
||||||
|
if (temperatureerr == 0) { |
||||||
|
strtemp = businessParameter.getEventInfoValue(ccomid, 5); |
||||||
|
if (!strtemp.equals("")) { |
||||||
|
temperatureerr = 1; |
||||||
|
srceventid += "[temperatureerr:" + strtemp + "]"; |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
// 写定采表
|
||||||
|
wCurDataold(tcomid, gcomid, ccomid, intsucceed, lampstate, arealystate, brealystate, aschedule, |
||||||
|
bschedule, clockstate, arealyerr, alamperr, ablinkerr, temperatureerr, clockerr, batchtime, |
||||||
|
srceventid); |
||||||
|
} |
||||||
|
|
||||||
|
/** 事件数据解析处理 加短信息发送处理 */ |
||||||
|
public void AnalyzerData(int eventid, String time, String data) { |
||||||
|
int type = 0;// 上报类型:1:A继电器故障,2:B继电器故障,3:A灯泡故障,4:A灯泡频闪故障,5:温度过高,6:时钟故障,7:线路防盗上报,8:B灯泡故障,9:B灯泡频闪故障
|
||||||
|
String tcomId = "";// 集中器地址
|
||||||
|
int gcomId = 0;// 组地址
|
||||||
|
String ccomId1 = "";// 控制器1地址
|
||||||
|
String ccomId2 = "";// 控制器2地址
|
||||||
|
String barcode1 = ""; |
||||||
|
String barcode2 = ""; |
||||||
|
int lampid1 = 0;// 起始防盗号
|
||||||
|
int lampid2 = 0;// 截至防盗号
|
||||||
|
String remark = "";// 备注
|
||||||
|
String state = "";// 故障状态字
|
||||||
|
|
||||||
|
String[] array = data.split("-"); |
||||||
|
int len = data.length(); |
||||||
|
|
||||||
|
// 提取集中器通信地址
|
||||||
|
tcomId = array[4] + array[5] + array[6] + array[7]; |
||||||
|
try { |
||||||
|
if (array[11].equals("00")) {// 故障上报1100
|
||||||
|
// example:5B-5B-5B-5B-00-00-00-41-00-0B-11-00-01-00-00-06-8D-04-80-00-00-E1-5D-5D-5D-5D
|
||||||
|
data = data.substring(39, 39 + len - 54); |
||||||
|
array = data.split("-"); |
||||||
|
for (int i = 0; i < array.length / 8; i++) { |
||||||
|
ccomId1 = array[i * 8] + array[i * 8 + 1] + array[i * 8 + 2] + array[i * 8 + 3]; |
||||||
|
gcomId = businessParameter.getgcomid(tcomId, ccomId1); |
||||||
|
state = array[i * 8 + 5];// 故障状态字
|
||||||
|
state = Common.right("00000000" + Common.hextobinary(state), 8); |
||||||
|
if (gcomId == 0) { |
||||||
|
wabnormal(tcomId, data, "集中器上行报文不符合应用(不存在故障灯)!", "前置机", time); |
||||||
|
} else { |
||||||
|
wEventInfoOld(state, "", time, tcomId, gcomId, ccomId1, ccomId2, eventid); |
||||||
|
} |
||||||
|
} |
||||||
|
} else {// 线路防盗1110
|
||||||
|
// example01:5B-5B-5B-5B-00-00-00-41-00-04-11-10-01-03-D6-5D-5D-5D-5D
|
||||||
|
// example02:5B-5B-5B-5B-00-00-00-41-00-06-11-10-02-03-01-10-EA-5D-5D-5D-5D
|
||||||
|
if (len > 55) { |
||||||
|
array = data.split("-"); |
||||||
|
if (array[12].endsWith("01")) {// example01
|
||||||
|
data = array[13];// 被盗组号
|
||||||
|
gcomId = Common.hextoint(data); |
||||||
|
type = 7; |
||||||
|
remark = "线路被盗"; |
||||||
|
if (gcomId == 0) { |
||||||
|
wabnormal(tcomId, data, "集中器上行报文不符合应用(不存在被盗组)!", "前置机", time); |
||||||
|
} else { |
||||||
|
InsertEventInfo(time, tcomId, gcomId, ccomId1, ccomId2, type, remark, barcode1, |
||||||
|
barcode2, eventid); |
||||||
|
} |
||||||
|
} else { |
||||||
|
data = data.substring(39, len - 15); |
||||||
|
array = data.split("-"); |
||||||
|
|
||||||
|
for (int i = 0; i < array.length / 3; i++) { |
||||||
|
gcomId = Common.hextoint(array[i * 3]); |
||||||
|
lampid1 = Common.hextoint(array[i * 3 + 1]); |
||||||
|
ccomId1 = businessParameter.getCcomid(tcomId, gcomId, lampid1); |
||||||
|
lampid2 = Common.hextoint(array[i * 3 + 2]); |
||||||
|
ccomId2 = businessParameter.getCcomid(tcomId, gcomId, lampid2); |
||||||
|
type = 7; |
||||||
|
remark = "线路被盗"; |
||||||
|
|
||||||
|
barcode1 = businessParameter.getbarcode(ccomId1); |
||||||
|
barcode2 = businessParameter.getbarcode(ccomId2); |
||||||
|
if (gcomId == 0) { |
||||||
|
wabnormal(tcomId, data, "集中器上行报文不符合应用(不存在被盗组)!", "前置机", time); |
||||||
|
} else { |
||||||
|
InsertEventInfo(time, tcomId, gcomId, ccomId1, ccomId2, type, remark, barcode1, |
||||||
|
barcode2, eventid); |
||||||
|
} |
||||||
|
// 加发送短信息处理
|
||||||
|
if (businessParameter.IsSend(tcomId, "steal")) { |
||||||
|
String smsinfo = "于" + time + "发生线路被盗,地点位于" + tcomId + "集中器()下属的" + gcomId |
||||||
|
+ "号组;起始防盗序号:" + lampid1 + ",截至防盗序号:" + lampid2 + "."; |
||||||
|
SendSMS(tcomId, smsinfo); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
} catch (Exception e) { |
||||||
|
wabnormal(tcomId, data, "集中器上行报文异常!", "事件数据解析", time); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* (旧协议)解析故障数据后写入事件解析表;加短信息发送处理 |
||||||
|
* |
||||||
|
* @param state1 |
||||||
|
* 故障状态字1 |
||||||
|
* @param state2 |
||||||
|
* 故障状态字2 |
||||||
|
* @param eventid |
||||||
|
* 源数据ID |
||||||
|
* |
||||||
|
*/ |
||||||
|
public static void wEventInfoOld(String state1, String state2, String time, String tcomId, |
||||||
|
int gcomId, String ccomId1, String ccomId2, int eventid) { |
||||||
|
int type = 0; |
||||||
|
String remark = ""; |
||||||
|
String smsinfo = ""; |
||||||
|
String barcode1 = businessParameter.getbarcode(ccomId1); |
||||||
|
String barcode2 = businessParameter.getbarcode(ccomId2); |
||||||
|
|
||||||
|
if (state1.substring(0, 1).equals("1")) { |
||||||
|
type = 3; |
||||||
|
remark = "灯泡故障"; |
||||||
|
updateCurdata(time, tcomId, gcomId, ccomId1, eventid, "alamperr", 1); |
||||||
|
InsertEventInfo(time, tcomId, gcomId, ccomId1, ccomId2, type, remark, barcode1, barcode2, |
||||||
|
eventid); |
||||||
|
if (businessParameter.IsSend(tcomId, "bulb")) {// 检查是否发送消息
|
||||||
|
smsinfo = remark + ","; |
||||||
|
} |
||||||
|
} |
||||||
|
if (state1.substring(1, 2).equals("1")) { |
||||||
|
type = 6; |
||||||
|
remark = "时钟故障"; |
||||||
|
updateCurdata(time, tcomId, gcomId, ccomId1, eventid, "clockerr", 1); |
||||||
|
InsertEventInfo(time, tcomId, gcomId, ccomId1, ccomId2, type, remark, barcode1, barcode2, |
||||||
|
eventid); |
||||||
|
if (businessParameter.IsSend(tcomId, "clock")) {// 检查是否发送消息
|
||||||
|
smsinfo += remark + ","; |
||||||
|
} |
||||||
|
} |
||||||
|
if (state1.substring(2, 3).equals("1")) { |
||||||
|
type = 5; |
||||||
|
remark = "温度故障"; |
||||||
|
updateCurdata(time, tcomId, gcomId, ccomId1, eventid, "temperatureerr", 1); |
||||||
|
InsertEventInfo(time, tcomId, gcomId, ccomId1, ccomId2, type, remark, barcode1, barcode2, |
||||||
|
eventid); |
||||||
|
if (businessParameter.IsSend(tcomId, "temperature")) {// 检查是否发送消息
|
||||||
|
smsinfo += remark + ","; |
||||||
|
} |
||||||
|
} |
||||||
|
if (state1.substring(3, 4).equals("1")) { |
||||||
|
type = 4; |
||||||
|
remark = "灯泡频闪故障"; |
||||||
|
updateCurdata(time, tcomId, gcomId, ccomId1, eventid, "ablinkerr", 1); |
||||||
|
InsertEventInfo(time, tcomId, gcomId, ccomId1, ccomId2, type, remark, barcode1, barcode2, |
||||||
|
eventid); |
||||||
|
if (businessParameter.IsSend(tcomId, "blink")) {// 检查是否发送消息
|
||||||
|
smsinfo += remark + ","; |
||||||
|
} |
||||||
|
} |
||||||
|
if (state1.substring(4, 5).equals("1")) { |
||||||
|
type = 2; |
||||||
|
remark = "B继电器故障"; |
||||||
|
updateCurdata(time, tcomId, gcomId, ccomId1, eventid, "brealyerr", 1); |
||||||
|
InsertEventInfo(time, tcomId, gcomId, ccomId1, ccomId2, type, remark, barcode1, barcode2, |
||||||
|
eventid); |
||||||
|
if (businessParameter.IsSend(tcomId, "brelay")) {// 检查是否发送消息
|
||||||
|
smsinfo += remark + ","; |
||||||
|
} |
||||||
|
} |
||||||
|
if (state1.substring(6, 7).equals("1")) { |
||||||
|
type = 1; |
||||||
|
remark = "A继电器故障"; |
||||||
|
updateCurdata(time, tcomId, gcomId, ccomId1, eventid, "arealyerr", 1); |
||||||
|
InsertEventInfo(time, tcomId, gcomId, ccomId1, ccomId2, type, remark, barcode1, barcode2, |
||||||
|
eventid); |
||||||
|
if (businessParameter.IsSend(tcomId, "relay")) {// 检查是否发送消息
|
||||||
|
smsinfo += remark + ","; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
if (!smsinfo.equals("")) {// 加发送短信息处理
|
||||||
|
smsinfo = smsinfo.substring(0, smsinfo.length() - 1); |
||||||
|
SendSMS(tcomId, smsinfo); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 获取下行报文 |
||||||
|
* |
||||||
|
* @param terminal |
||||||
|
* 终端地址 |
||||||
|
* @param datas |
||||||
|
* 具体设置的报文 |
||||||
|
*/ |
||||||
|
public String GetSendCmd(String terminal, String datas) { |
||||||
|
int i; |
||||||
|
int count; |
||||||
|
int num; |
||||||
|
int msg[] = new int[1024]; |
||||||
|
StringBuffer sendBuffer = new StringBuffer(); |
||||||
|
String temp; |
||||||
|
// 报文头
|
||||||
|
for (i = 0; i < 4; i++) |
||||||
|
msg[i] = 0x5B; |
||||||
|
num = 4; |
||||||
|
// 通信地址
|
||||||
|
// 通信地址是16进制处理
|
||||||
|
count = 0; |
||||||
|
for (int j = (terminal.length() / 2) - 1; j > -1; j--) { |
||||||
|
temp = terminal.substring(j * 2, (j * 2 + 2)); |
||||||
|
msg[num + j] = Integer.parseInt(temp, 16) & 0xFF; |
||||||
|
} |
||||||
|
num += 4; |
||||||
|
|
||||||
|
// 数据长度
|
||||||
|
count = datas.length() / 2; |
||||||
|
msg[num + 1] = (count % 0x100); |
||||||
|
count >>= 8; |
||||||
|
msg[num] = (count); |
||||||
|
num += 2; |
||||||
|
|
||||||
|
// 数据区
|
||||||
|
count = datas.length() / 2; |
||||||
|
for (int j = 0; j < count; j++) |
||||||
|
msg[num + j] = Integer.parseInt(datas.substring(j * 2, (j * 2 + 2)), 16); |
||||||
|
num += count; |
||||||
|
|
||||||
|
// 校验字
|
||||||
|
count = 0; |
||||||
|
for (int j = 0; j < num; j++) |
||||||
|
count += msg[j]; |
||||||
|
count = count % 0x100; |
||||||
|
msg[num] = (count); |
||||||
|
num++; |
||||||
|
|
||||||
|
// 报文结束符
|
||||||
|
for (int j = 0; j < 4; j++) |
||||||
|
msg[num + j] = 0x5D; |
||||||
|
num += 4; |
||||||
|
|
||||||
|
// 转成字符串
|
||||||
|
for (int j = 0; j < num; j++) |
||||||
|
sendBuffer.append(Common.dec2Hex(msg[j], 2) + "-"); |
||||||
|
|
||||||
|
String cmdcode = sendBuffer.toString().substring(0, sendBuffer.toString().length() - 1); |
||||||
|
|
||||||
|
return cmdcode.trim(); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 串口主动上报的确认处理 |
||||||
|
* |
||||||
|
* @param cmdid |
||||||
|
* 指令数据ID cmdid=0 是定采数据 |
||||||
|
* @param receivedata |
||||||
|
* 响应数据 |
||||||
|
*/ |
||||||
|
public void dataExecute(int cmdid, String receivedata, String batchtime) { |
||||||
|
cmdcode += receivedata; |
||||||
|
int indexcount = 0; |
||||||
|
String type = ""; // 上报类型
|
||||||
|
String cmdresult = ""; |
||||||
|
String[] array; |
||||||
|
String terminal; |
||||||
|
|
||||||
|
if (cmdcode.contains("5B-5B-5B-5B") && cmdcode.contains("5D-5D-5D-5D")) {// 旧协议处理
|
||||||
|
|
||||||
|
indexcount = cmdcode.indexOf("5B-5B-5B-5B"); |
||||||
|
cmdcode = cmdcode.substring(indexcount); |
||||||
|
|
||||||
|
if (cmdcode.endsWith("-")) { |
||||||
|
cmdcode = cmdcode.substring(0, cmdcode.length() - 1); |
||||||
|
} |
||||||
|
|
||||||
|
Log.writelog(clazzName, Thread.currentThread().getStackTrace()[1].getMethodName() |
||||||
|
+ "->Read Comm:" + cmdcode); |
||||||
|
|
||||||
|
indexcount = cmdcode.indexOf("-5D-5D-5D-5D-5D"); |
||||||
|
if (indexcount == -1) {// 校验字不为"5D"
|
||||||
|
indexcount = cmdcode.indexOf("-5D-5D-5D-5D"); |
||||||
|
} else {// 校验字为"5D"
|
||||||
|
indexcount += 3; |
||||||
|
} |
||||||
|
|
||||||
|
while (indexcount != 11 && indexcount != 0 && indexcount != -1) { |
||||||
|
cmdresult = cmdcode.substring(0, indexcount) + "-5D-5D-5D-5D"; |
||||||
|
array = cmdresult.split("-"); |
||||||
|
// 提取集中器通信地址
|
||||||
|
terminal = array[4] + array[5] + array[6] + array[7]; |
||||||
|
if (array.length < 13) { |
||||||
|
String time = Common.getDateStr0(); |
||||||
|
wabnormal(terminal, cmdresult, "集中器上行报报文长度不足13个字节!", "事件数据解析", time); |
||||||
|
return; |
||||||
|
} |
||||||
|
|
||||||
|
terminal = cmdresult.substring(12, 24).replace("-", "");// 通信地址
|
||||||
|
|
||||||
|
if (array[0].equals("5B") && array[1].equals("5B") && array[2].equals("5B") |
||||||
|
&& array[3].equals("5B")) { |
||||||
|
if (array[10].equals("51") && array[11].equals("23")) {// 集中器注册帧
|
||||||
|
type = "4"; |
||||||
|
} else if (array[10].equals("11") && array[11].equals("00")) { // 故障上报帧
|
||||||
|
type = "1"; |
||||||
|
} else if (array[10].equals("11") && array[11].equals("10")) { // 防盗上报帧
|
||||||
|
type = "2"; |
||||||
|
} else if (array[10].equals("11") && array[11].equals("20")) {// 上电请求校时
|
||||||
|
type = "3"; |
||||||
|
} |
||||||
|
|
||||||
|
if (!type.equals("4") && !type.equals("1") && !type.equals("2") && !type.equals("3")) { // 写入结果表
|
||||||
|
if (cmdid == 0) {// 定采数据解析
|
||||||
|
dataAnalysis(cmdresult, batchtime); |
||||||
|
} else {// 写结果表
|
||||||
|
wReceiveData(cmdid, terminal, cmdresult, 0); |
||||||
|
} |
||||||
|
} else {// 写入事件表
|
||||||
|
wEventData(terminal, type, cmdresult, "0001"); |
||||||
|
// 响应事件处理
|
||||||
|
response(cmdresult, Integer.parseInt(type)); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
cmdcode = cmdcode.substring(indexcount + 12); |
||||||
|
if (cmdcode.equals("-5D-5D-5D-5D")) { |
||||||
|
cmdcode = ""; |
||||||
|
} |
||||||
|
indexcount = cmdcode.indexOf("-5D-5D-5D-5D"); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 串口上报事件响应 |
||||||
|
* |
||||||
|
* @param strdata |
||||||
|
* 上报事件报文 |
||||||
|
* @param type |
||||||
|
* 上报事件类型 |
||||||
|
*/ |
||||||
|
public static void response(String strdata, int type) { |
||||||
|
String data = ""; |
||||||
|
String header = strdata.substring(0, 23);// 5B-5B-5B-5B-00-00-00-6D
|
||||||
|
|
||||||
|
switch (type) { |
||||||
|
case 1:// 主动上报确认
|
||||||
|
data = "11-01"; |
||||||
|
break; |
||||||
|
case 2:// 线路损坏报警上报确认
|
||||||
|
String[] array = strdata.split("-"); |
||||||
|
if (array[12].equals("01")) { |
||||||
|
data = "11-11-01"; |
||||||
|
} else { |
||||||
|
data = "11-11-02"; |
||||||
|
} |
||||||
|
break; |
||||||
|
case 3:// 上电请求校时
|
||||||
|
String time = Common.getDateStr3(); |
||||||
|
data = "21-50-" + time; |
||||||
|
break; |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,95 @@ |
|||||||
|
package com.back.sync; |
||||||
|
|
||||||
|
import java.util.List; |
||||||
|
|
||||||
|
import com.back.entity.Control; |
||||||
|
import com.back.entity.Mcontrol; |
||||||
|
import com.back.entity.Sensor; |
||||||
|
|
||||||
|
public class DataInstance { |
||||||
|
|
||||||
|
public static DataInstance dataInstance = null; |
||||||
|
|
||||||
|
public static DataInstance getInstance() { |
||||||
|
if (dataInstance == null) { |
||||||
|
dataInstance = new DataInstance(); |
||||||
|
} |
||||||
|
return dataInstance; |
||||||
|
} |
||||||
|
|
||||||
|
public static void resetInstance() { |
||||||
|
dataInstance = null; |
||||||
|
} |
||||||
|
|
||||||
|
private List<Control> controlList; |
||||||
|
private List<Mcontrol> mcontrolList; |
||||||
|
// 照度
|
||||||
|
private List<Sensor> illumList; |
||||||
|
// 亮度
|
||||||
|
private List<Sensor> lumList; |
||||||
|
// 车流量
|
||||||
|
private List<Sensor> carsenList; |
||||||
|
|
||||||
|
private int totalCount; |
||||||
|
private int syncedCount; |
||||||
|
private int progress; |
||||||
|
|
||||||
|
// 命令发送状态
|
||||||
|
private int state; |
||||||
|
|
||||||
|
public List<Control> getControlList() { |
||||||
|
return controlList; |
||||||
|
} |
||||||
|
public void setControlList(List<Control> controlList) { |
||||||
|
this.controlList = controlList; |
||||||
|
} |
||||||
|
public List<Mcontrol> getMcontrolList() { |
||||||
|
return mcontrolList; |
||||||
|
} |
||||||
|
public void setMcontrolList(List<Mcontrol> mcontrolList) { |
||||||
|
this.mcontrolList = mcontrolList; |
||||||
|
} |
||||||
|
public List<Sensor> getIllumList() { |
||||||
|
return illumList; |
||||||
|
} |
||||||
|
public void setIllumList(List<Sensor> illumList) { |
||||||
|
this.illumList = illumList; |
||||||
|
} |
||||||
|
public List<Sensor> getLumList() { |
||||||
|
return lumList; |
||||||
|
} |
||||||
|
public void setLumList(List<Sensor> lumList) { |
||||||
|
this.lumList = lumList; |
||||||
|
} |
||||||
|
public List<Sensor> getCarsenList() { |
||||||
|
return carsenList; |
||||||
|
} |
||||||
|
public void setCarsenList(List<Sensor> carsenList) { |
||||||
|
this.carsenList = carsenList; |
||||||
|
} |
||||||
|
public int getTotalCount() { |
||||||
|
return totalCount; |
||||||
|
} |
||||||
|
public void setTotalCount(int totalCount) { |
||||||
|
this.totalCount = totalCount; |
||||||
|
} |
||||||
|
public int getSyncedCount() { |
||||||
|
return syncedCount; |
||||||
|
} |
||||||
|
public void setSyncedCount(int syncedCount) { |
||||||
|
this.syncedCount = syncedCount; |
||||||
|
} |
||||||
|
public int getProgress() { |
||||||
|
return progress; |
||||||
|
} |
||||||
|
public void setProgress(int progress) { |
||||||
|
this.progress = progress; |
||||||
|
} |
||||||
|
public int getState() { |
||||||
|
return state; |
||||||
|
} |
||||||
|
public void setState(int state) { |
||||||
|
this.state = state; |
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
@ -0,0 +1,666 @@ |
|||||||
|
package com.back.sync; |
||||||
|
|
||||||
|
import java.text.SimpleDateFormat; |
||||||
|
import java.util.List; |
||||||
|
|
||||||
|
import com.back.action.Log; |
||||||
|
import com.back.common.Common; |
||||||
|
import com.back.entity.Control; |
||||||
|
import com.back.entity.Mcontrol; |
||||||
|
import com.back.entity.Sensor; |
||||||
|
import com.back.protocol.GW3761; |
||||||
|
|
||||||
|
public class DataSyncUtil { |
||||||
|
|
||||||
|
/** |
||||||
|
* 获取设置命令 datas 具体设置的报文 terminal 集中器通信地址 |
||||||
|
*/ |
||||||
|
private static class Cmdinfor { |
||||||
|
String afn; // AFN
|
||||||
|
String Comid; // 通信地址
|
||||||
|
String datas; // 数据区内容
|
||||||
|
Boolean FCV; // 帧计数有效位FCV
|
||||||
|
String FCB; // FCB
|
||||||
|
String host; // 主站地址
|
||||||
|
String PWD; // 密码
|
||||||
|
int PFC; // PFC
|
||||||
|
Boolean bTime; // 是否有时间标签
|
||||||
|
int outTime;// 允许发送传输延时时间
|
||||||
|
Boolean TP;// 是否有时间标签
|
||||||
|
Boolean CON;// CON位置“true”,表示需要对该帧报文进行确认;置“false”,表示不需要对该帧报文进行确认。
|
||||||
|
|
||||||
|
public void Create(String afn, String comid, String datas, int PFC, Boolean btime) { |
||||||
|
datas = datas.replace(" ", ""); |
||||||
|
datas = datas.trim(); |
||||||
|
this.afn = afn; |
||||||
|
while (comid.length() < 8) |
||||||
|
comid = "0" + comid; |
||||||
|
this.Comid = comid; |
||||||
|
this.datas = datas; |
||||||
|
this.FCV = false; |
||||||
|
this.PFC = PFC; |
||||||
|
this.FCB = "01"; |
||||||
|
this.host = "02"; |
||||||
|
this.PWD = "00000000000000000000000000000000";// 固定密码 16个零
|
||||||
|
this.bTime = btime; |
||||||
|
this.outTime = 5; |
||||||
|
this.TP = btime; |
||||||
|
this.CON = true; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
private static Cmdinfor cmdinfor = new Cmdinfor(); |
||||||
|
|
||||||
|
/** |
||||||
|
* 配置灯具下发数据 202101 |
||||||
|
* |
||||||
|
* @param |
||||||
|
* |
||||||
|
* @param flag |
||||||
|
* true为新增,false为删除 |
||||||
|
* @return |
||||||
|
*/ |
||||||
|
public static String configLampData(List<Control> controlList, boolean flag) { |
||||||
|
String data = "", temp = ""; |
||||||
|
try { |
||||||
|
for (int i = 0; i < controlList.size(); i++) { |
||||||
|
Control control = controlList.get(i); |
||||||
|
|
||||||
|
// 灯装置序号(2个字节)
|
||||||
|
temp = dec2Hex(control.getNum(), 4); |
||||||
|
data = data + " " + temp.substring(2, 4); |
||||||
|
data = data + " " + temp.substring(0, 2); |
||||||
|
|
||||||
|
// 测量点号(2个字节)
|
||||||
|
// if (flag) {
|
||||||
|
// data = data + " " + temp.substring(2, 4);
|
||||||
|
// data = data + " " + temp.substring(0, 2);
|
||||||
|
// } else {
|
||||||
|
// data += " 00 00";
|
||||||
|
// }
|
||||||
|
|
||||||
|
// 灯通信地址(6个字节)
|
||||||
|
temp = control.getComid(); |
||||||
|
temp = "000000000000" + temp; |
||||||
|
temp = temp.substring(temp.length() - 12); |
||||||
|
for (int j = temp.length(); j > 0; j -= 2) { |
||||||
|
data += " " + temp.substring(j - 2, j); |
||||||
|
} |
||||||
|
|
||||||
|
// 通讯信道(1个字节),即通信端口
|
||||||
|
// 1-载波通信 2-RS485_1口通信 3-RS485_2口通信 4-LORA无线通信(5-255:备用)
|
||||||
|
String tunnel = control.getTunnel(); |
||||||
|
data += " " + tunnel.substring(2, 4); |
||||||
|
|
||||||
|
// 通信协议(1个字节)
|
||||||
|
// 1-DL645_97版 2-DL645_07版 3-ModBus协议 (4-255:备用)
|
||||||
|
String protocol = control.getProtocol(); |
||||||
|
data += " " + protocol.substring(2, 4); |
||||||
|
|
||||||
|
// 所属组号(1个字节)
|
||||||
|
data = data + " " + dec2Hex(control.getGroupid(), 2); |
||||||
|
|
||||||
|
// 工作方式(1个字节)
|
||||||
|
String worktypeString = control.getWorktype(); |
||||||
|
// 00 时间表;01经纬度;02 场景模式
|
||||||
|
data += " " + worktypeString.substring(2, 4); |
||||||
|
|
||||||
|
// 灯杆类型(1个字节)
|
||||||
|
// 1—单灯调光 2-双色温调光 3-双灯头调光(3-255:备用)
|
||||||
|
String type = control.getType(); |
||||||
|
data += " " + type.substring(2, 4); |
||||||
|
|
||||||
|
} |
||||||
|
} catch (Exception e) { |
||||||
|
Log.writelog1("构造灯杆安装命令出错, error:" + e.getMessage()); |
||||||
|
e.printStackTrace(); |
||||||
|
} |
||||||
|
return data; |
||||||
|
} |
||||||
|
|
||||||
|
public static String SendCmd(int type, int count, String message) { |
||||||
|
int[] cmd = new int[3]; |
||||||
|
cmd[0] = 0x81; |
||||||
|
cmd[1] = 0x01; |
||||||
|
cmd[2] = type; |
||||||
|
|
||||||
|
StringBuilder builder = new StringBuilder(); |
||||||
|
for (int i = 1; i < cmd.length; i++) { |
||||||
|
builder.append(" " + dec2Hex(cmd[i], 1)); |
||||||
|
} |
||||||
|
|
||||||
|
return builder.toString(); |
||||||
|
} |
||||||
|
|
||||||
|
public static String preSendCmd(String terminal) { |
||||||
|
|
||||||
|
String cmdCode = "0000" + GW3761.GetDAOrDT(4, 1) + "81" + "01" + "00"; |
||||||
|
String binarypfc = "00000000" + Common.inttobinary(PFC); |
||||||
|
PFC++; |
||||||
|
if (PFC == 255) |
||||||
|
PFC = 0; |
||||||
|
|
||||||
|
binarypfc = Common.right(binarypfc, 4); |
||||||
|
String seqdomain = Common.binarytohex("0111" + binarypfc); |
||||||
|
char[] chars = terminal.toCharArray(); |
||||||
|
String adomain = String.valueOf(chars[2]) + String.valueOf(chars[3]) + String.valueOf(chars[0]) |
||||||
|
+ String.valueOf(chars[1]) + String.valueOf(chars[6]) + String.valueOf(chars[7]) |
||||||
|
+ String.valueOf(chars[4]) + String.valueOf(chars[5]) + "04"; |
||||||
|
return gw3761.create3761("64", adomain, "FD", seqdomain, cmdCode); |
||||||
|
} |
||||||
|
|
||||||
|
public static String genetateLampData(String terminal, List<Control> controlList) { |
||||||
|
String data = configLampData(controlList, Boolean.TRUE); |
||||||
|
// String temp = dec2Hex(controlList.size(), 4);
|
||||||
|
// String msgString = temp.substring(2, 4) + " " + temp.substring(0, 2) + " " + data;
|
||||||
|
// msgString = GetDAOrDT(21, 1) + msgString.trim();
|
||||||
|
// cmdinfor.Create("A4", terminal, msgString, GetPFC(), false);
|
||||||
|
|
||||||
|
String cmdCode = "0000" + GW3761.GetDAOrDT(4, 1) |
||||||
|
+ "81" + "02" + "01" + dec2Hex(controlList.size(), 2) + data; |
||||||
|
cmdCode = cmdCode.replace(" ", ""); |
||||||
|
|
||||||
|
String binarypfc = "00000000" + Common.inttobinary(PFC); |
||||||
|
PFC++; |
||||||
|
if (PFC == 255) |
||||||
|
PFC = 0; |
||||||
|
|
||||||
|
binarypfc = Common.right(binarypfc, 4); |
||||||
|
String seqdomain = Common.binarytohex("0111" + binarypfc); |
||||||
|
char[] chars = terminal.toCharArray(); |
||||||
|
String adomain = String.valueOf(chars[2]) + String.valueOf(chars[3]) + String.valueOf(chars[0]) |
||||||
|
+ String.valueOf(chars[1]) + String.valueOf(chars[6]) + String.valueOf(chars[7]) |
||||||
|
+ String.valueOf(chars[4]) + String.valueOf(chars[5]) + "04"; |
||||||
|
return gw3761.create3761("64", adomain, "FD", seqdomain, cmdCode); |
||||||
|
} |
||||||
|
|
||||||
|
private static GW3761 gw3761 = new GW3761(); // 新集中器解码类
|
||||||
|
private static int PFC = 0; // 启动帧帧序号计数器(0~255)
|
||||||
|
|
||||||
|
public static String generateMcontrolData(String terminal, List<Mcontrol> mcontrolList) { |
||||||
|
String message = configMcontrolData(mcontrolList, Boolean.TRUE); |
||||||
|
// message = GetDAOrDT(36, 1) + message;
|
||||||
|
// cmdinfor.Create("A4", terminal, message, GetPFC(), false);
|
||||||
|
String cmdCode = "0000" + GW3761.GetDAOrDT(4, 1) |
||||||
|
+ "81" + "02" + "02" + dec2Hex(mcontrolList.size(), 2) + message; |
||||||
|
cmdCode = cmdCode.replace(" ", ""); |
||||||
|
|
||||||
|
String binarypfc = "00000000" + Common.inttobinary(PFC); |
||||||
|
PFC++; |
||||||
|
if (PFC == 255) |
||||||
|
PFC = 0; |
||||||
|
|
||||||
|
binarypfc = Common.right(binarypfc, 4); |
||||||
|
String seqdomain = Common.binarytohex("0111" + binarypfc); |
||||||
|
char[] chars = terminal.toCharArray(); |
||||||
|
String adomain = String.valueOf(chars[2]) + String.valueOf(chars[3]) + String.valueOf(chars[0]) |
||||||
|
+ String.valueOf(chars[1]) + String.valueOf(chars[6]) + String.valueOf(chars[7]) |
||||||
|
+ String.valueOf(chars[4]) + String.valueOf(chars[5]) + "04"; |
||||||
|
return gw3761.create3761("64", adomain, "FD", seqdomain, cmdCode); |
||||||
|
} |
||||||
|
|
||||||
|
public static String generateSensorData(String terminal, List<Sensor> sensorList, int fn, String sensorType) { |
||||||
|
String message = configSensorData(sensorList, Boolean.TRUE); |
||||||
|
// String temp = dec2Hex(1, 2);
|
||||||
|
// message = temp.substring(0, 2) + " " + message;
|
||||||
|
// message = GetDAOrDT(fn, 1) + message.trim();
|
||||||
|
// cmdinfor.Create("A4", terminal, message, GetPFC(), false);
|
||||||
|
// return GetSendCmd(cmdinfor);
|
||||||
|
String cmdCode = "0000" + GW3761.GetDAOrDT(4, 1) |
||||||
|
+ "81" + "02" + sensorType + dec2Hex(sensorList.size(), 2) + message; |
||||||
|
cmdCode = cmdCode.replace(" ", ""); |
||||||
|
|
||||||
|
String binarypfc = "00000000" + Common.inttobinary(PFC); |
||||||
|
PFC++; |
||||||
|
if (PFC == 255) |
||||||
|
PFC = 0; |
||||||
|
|
||||||
|
binarypfc = Common.right(binarypfc, 4); |
||||||
|
String seqdomain = Common.binarytohex("0111" + binarypfc); |
||||||
|
char[] chars = terminal.toCharArray(); |
||||||
|
String adomain = String.valueOf(chars[2]) + String.valueOf(chars[3]) + String.valueOf(chars[0]) |
||||||
|
+ String.valueOf(chars[1]) + String.valueOf(chars[6]) + String.valueOf(chars[7]) |
||||||
|
+ String.valueOf(chars[4]) + String.valueOf(chars[5]) + "04"; |
||||||
|
return gw3761.create3761("64", adomain, "FD", seqdomain, cmdCode); |
||||||
|
} |
||||||
|
|
||||||
|
public static String configMcontrolData(List<Mcontrol> mcontrolList, boolean flag) { |
||||||
|
String data = "", temp = ""; |
||||||
|
try { |
||||||
|
for (int i = 0; i < mcontrolList.size(); i++) { |
||||||
|
Mcontrol mcontrol = mcontrolList.get(i); |
||||||
|
|
||||||
|
// 主控装置序号(2个字节)
|
||||||
|
temp = dec2Hex(mcontrol.getNum(), 4); |
||||||
|
data = data + temp.substring(2, 4) + " " + temp.substring(0, 2); |
||||||
|
|
||||||
|
// 测量点号(2个字节)
|
||||||
|
// if (flag) {
|
||||||
|
// data += " " + temp.substring(2, 4) + " " + temp.substring(0,
|
||||||
|
// 2);
|
||||||
|
// } else {
|
||||||
|
// data += " 00 00";
|
||||||
|
// }
|
||||||
|
|
||||||
|
// 通信地址(6个字节)
|
||||||
|
temp = mcontrol.getComid(); |
||||||
|
while (temp.length() < 12) |
||||||
|
temp = "0" + temp; |
||||||
|
for (int j = temp.length(); j > 0; j -= 2) { |
||||||
|
data += " " + temp.substring(j - 2, j); |
||||||
|
} |
||||||
|
|
||||||
|
// 通讯信道(1个字节):1为载波口 2为第一个485口 3为第二个485口
|
||||||
|
temp = mcontrol.getTunnel(); |
||||||
|
data += " " + temp.substring(2, 4); |
||||||
|
|
||||||
|
// 通讯协议(1个字节):1-DL645_97版 2-DL645_07版 3-ModBus协议 (4-255:备用)
|
||||||
|
temp = mcontrol.getProtocol(); |
||||||
|
data += " " + temp.substring(2, 4); |
||||||
|
|
||||||
|
// 该线路所属组号(1个字节)
|
||||||
|
if (mcontrol.getGroups() == null) { |
||||||
|
temp = ""; |
||||||
|
} else { |
||||||
|
temp = mcontrol.getGroups().trim(); |
||||||
|
} |
||||||
|
|
||||||
|
if (temp.equals("")) { |
||||||
|
data += " 00"; |
||||||
|
} else { |
||||||
|
temp = dec2Hex(Integer.parseInt(temp), 2); |
||||||
|
data += " " + temp; |
||||||
|
} |
||||||
|
|
||||||
|
// 工作方式(1个字节)
|
||||||
|
String worktypeString = mcontrol.getWorktype(); |
||||||
|
if (worktypeString.equals("0001")) { // 走经纬度
|
||||||
|
data += " 01"; |
||||||
|
} else if (worktypeString.equals("0000")) { // 走时间表
|
||||||
|
data += " 00"; |
||||||
|
} else if (worktypeString.equals("0002")) { // 场景模式
|
||||||
|
data += " 02"; |
||||||
|
} |
||||||
|
|
||||||
|
// 回路类型(1个字节)
|
||||||
|
temp = dec2Hex(mcontrol.getType(), 2); |
||||||
|
data += " " + temp; |
||||||
|
|
||||||
|
// 回路电流互感器变比值(1个字节)
|
||||||
|
temp = dec2Hex(mcontrol.getRatio(), 2); |
||||||
|
data += " " + temp; |
||||||
|
} |
||||||
|
} catch (Exception e) { |
||||||
|
Log.writelog1("构造回路安装命令出错, error:" + e.getMessage()); |
||||||
|
e.printStackTrace(); |
||||||
|
} |
||||||
|
return data; |
||||||
|
} |
||||||
|
|
||||||
|
public static String configSensorData(List<Sensor> sensorList, boolean flag) { |
||||||
|
String data = "", temp = ""; |
||||||
|
try { |
||||||
|
for (int i = 0; i < sensorList.size(); i++) { |
||||||
|
Sensor sensor = sensorList.get(i); |
||||||
|
|
||||||
|
// 灯装置序号(2个字节)
|
||||||
|
temp = dec2Hex(sensor.getNum(), 4); |
||||||
|
data = data + " " + temp.substring(2, 4); |
||||||
|
data = data + " " + temp.substring(0, 2); |
||||||
|
|
||||||
|
// 测量点号(2个字节)
|
||||||
|
// if (flag) {
|
||||||
|
// data = data + " " + temp.substring(2, 4);
|
||||||
|
// data = data + " " + temp.substring(0, 2);
|
||||||
|
// } else {
|
||||||
|
// data += " 00 00";
|
||||||
|
// }
|
||||||
|
|
||||||
|
// 灯通信地址(6个字节)
|
||||||
|
temp = sensor.getComid(); |
||||||
|
temp = "000000000000" + temp; |
||||||
|
temp = temp.substring(temp.length() - 12); |
||||||
|
for (int j = temp.length(); j > 0; j -= 2) { |
||||||
|
data += " " + temp.substring(j - 2, j); |
||||||
|
} |
||||||
|
|
||||||
|
// 通讯信道(1个字节),即通信端口 1-载波通信 2-RS485_1口通信 3-RS485_2口通信
|
||||||
|
// 4-LORA无线通信(5-255:备用)
|
||||||
|
String tunnel = sensor.getTunnel(); |
||||||
|
data += " " + tunnel.substring(2, 4); |
||||||
|
|
||||||
|
// 通信协议(1个字节) 1-DL645_97版 2-DL645_07版 3-ModBus协议 (4-255:备用)
|
||||||
|
String protocol = sensor.getProtocol(); |
||||||
|
data += " " + protocol.substring(2, 4); |
||||||
|
|
||||||
|
int fn = 0; |
||||||
|
if (sensor.getType().equals("0001")) {// 照度传感器
|
||||||
|
fn = 37; |
||||||
|
} else if (sensor.getType().equals("0002")) {// 亮度传感器
|
||||||
|
fn = 38; |
||||||
|
// 转换系数(1个字节)
|
||||||
|
temp = dec2Hex(sensor.getRatio(), 2); |
||||||
|
data += " " + temp; |
||||||
|
} else if (sensor.getType().equals("0003")) {// 车流量传感器
|
||||||
|
fn = 39; |
||||||
|
// 车流量统计周期(1个字节)
|
||||||
|
temp = dec2Hex(sensor.getCycle(), 2); |
||||||
|
data += " " + temp; |
||||||
|
// 车道数量(1个字节)
|
||||||
|
temp = dec2Hex(sensor.getLane(), 2); |
||||||
|
data += " " + temp; |
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
} catch (Exception e) { |
||||||
|
Log.writelog1("构造传感器安装命令出错, error:" + e.getMessage()); |
||||||
|
e.printStackTrace(); |
||||||
|
} |
||||||
|
return data; |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 10进制转16进制 |
||||||
|
* |
||||||
|
* @param dec |
||||||
|
* 要转换的数值 |
||||||
|
* @param len |
||||||
|
* 16进制的长度 |
||||||
|
* @return |
||||||
|
*/ |
||||||
|
private static String dec2Hex(int dec, int len) { |
||||||
|
String tempString = Integer.toHexString(dec); |
||||||
|
while (tempString.length() < len) { |
||||||
|
tempString = "0" + tempString; |
||||||
|
} |
||||||
|
return tempString.trim(); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 10进制字符串转16进制字符串 |
||||||
|
* |
||||||
|
* @param dec |
||||||
|
* @return |
||||||
|
*/ |
||||||
|
public static String dec2Hex(String dec, int len) { |
||||||
|
if (dec == null || dec.equals("")) |
||||||
|
dec = "0"; |
||||||
|
String tempString = Long.toHexString(Long.parseLong(dec)); |
||||||
|
while (tempString.length() < len) { |
||||||
|
tempString = "0" + tempString; |
||||||
|
} |
||||||
|
return tempString.trim(); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 为0时计算信息点标识DA(Pn),为1计算信息类标识DT(Fn) |
||||||
|
* |
||||||
|
* @param value |
||||||
|
* @param flag |
||||||
|
* 0/1 |
||||||
|
* @return F30,返回值格式:00 00 20 03 |
||||||
|
*/ |
||||||
|
public static String GetDAOrDT(int value, int flag) { |
||||||
|
int d = 0; |
||||||
|
String D1, D2 = "0"; |
||||||
|
|
||||||
|
if (value == 0) { |
||||||
|
D1 = "0"; |
||||||
|
D2 = "0"; |
||||||
|
} else { |
||||||
|
d = value % 8; |
||||||
|
|
||||||
|
if (d == 0) { |
||||||
|
D1 = "1" + repeat(7, '0'); |
||||||
|
d = value / 8 - 1; |
||||||
|
if (flag == 0) { |
||||||
|
d = d + 1; |
||||||
|
} |
||||||
|
} else { |
||||||
|
D1 = "1" + repeat(d - 1, '0'); |
||||||
|
d = value / 8; |
||||||
|
if (flag == 0) { |
||||||
|
d = d + 1; |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
D1 = Common.right("00" + Common.binarytohex(D1), 2); |
||||||
|
D2 = Common.right("00" + Common.inttohex(d), 2); |
||||||
|
return "00 00 " + D1 + " " + D2; |
||||||
|
} |
||||||
|
|
||||||
|
/** 返回指定字符的重复 */ |
||||||
|
public static String repeat(int len, char c) { |
||||||
|
StringBuffer sbf = new StringBuffer(); |
||||||
|
int i = 0; |
||||||
|
while (i < len) { |
||||||
|
i += 1; |
||||||
|
sbf.append(c); |
||||||
|
} |
||||||
|
return sbf.toString(); |
||||||
|
} |
||||||
|
|
||||||
|
private static int GetPFC() { |
||||||
|
return 1; |
||||||
|
} |
||||||
|
|
||||||
|
private static int msg[] = new int[2024]; |
||||||
|
|
||||||
|
private static String GetSendCmd(Cmdinfor cmdinfor) { |
||||||
|
int count = cmdinfor.datas.length(); |
||||||
|
int i; |
||||||
|
String temp; |
||||||
|
for (i = 0; i < msg.length; i++) |
||||||
|
msg[i] = 0; |
||||||
|
|
||||||
|
// 报文头
|
||||||
|
msg[0] = 0x68;// 68H
|
||||||
|
msg[5] = 0x68;// 68H
|
||||||
|
// 控制码
|
||||||
|
msg[6] = GetDownCortrolByte(cmdinfor.afn, cmdinfor.FCB, cmdinfor.FCV);// C
|
||||||
|
// 控制位
|
||||||
|
// 通信地址 16进制字
|
||||||
|
temp = cmdinfor.Comid.substring(0, 4); |
||||||
|
msg[8] = Integer.parseInt(temp.substring(0, 2), 16) & 0xFF; // A 地址域 -->
|
||||||
|
// 行政区划码 A1
|
||||||
|
// 2字节 BCD码
|
||||||
|
msg[7] = Integer.parseInt(temp.substring(2), 16) & 0xFF; // A 地址域 -->
|
||||||
|
// 行政区划码 A1
|
||||||
|
// 2字节 BCD码
|
||||||
|
temp = cmdinfor.Comid.substring(4); |
||||||
|
msg[10] = Integer.parseInt(temp.substring(0, 2), 16) & 0xFF; // A 地址域
|
||||||
|
// -->
|
||||||
|
// 行政区划码
|
||||||
|
// A2
|
||||||
|
// 2字节
|
||||||
|
// BCD码
|
||||||
|
msg[9] = Integer.parseInt(temp.substring(2), 16) & 0xFF; // A 地址域 -->
|
||||||
|
// 行政区划码 A2
|
||||||
|
// 2字节 BCD码
|
||||||
|
// 主站地址
|
||||||
|
msg[11] = (Integer.parseInt(cmdinfor.host, 16) << 1) & 0xFF;// A 地址域 -->
|
||||||
|
// 主站地址 A3
|
||||||
|
// 1字节 Bin码
|
||||||
|
msg[12] = Integer.parseInt(cmdinfor.afn, 16) & 0xFF; // AFN
|
||||||
|
if (cmdinfor.bTime) |
||||||
|
temp = "111"; |
||||||
|
else |
||||||
|
temp = "011"; |
||||||
|
// 20190216 增加 请求确认标志位
|
||||||
|
if (cmdinfor.CON) |
||||||
|
temp = temp + "1"; |
||||||
|
else |
||||||
|
temp = temp + "0"; |
||||||
|
msg[13] = (binaryString2Int(temp) << 4) + (cmdinfor.PFC % 16); // SEQ
|
||||||
|
// 帧序列域
|
||||||
|
int len = cmdinfor.datas.length() / 2; |
||||||
|
for (int j = 0; j < (len); j++) { |
||||||
|
temp = cmdinfor.datas.substring(j * 2, (j * 2 + 2)); |
||||||
|
msg[14 + j] = Integer.parseInt(temp, 16) & 0xFF; |
||||||
|
} |
||||||
|
len = len + 13; |
||||||
|
if (CheckDwnPw(cmdinfor.afn)) { |
||||||
|
len++; |
||||||
|
for (int j = 0; j < 16; j++) { // 密码
|
||||||
|
temp = cmdinfor.PWD.substring(j * 2, (j * 2 + 2)); |
||||||
|
msg[len + j] = Integer.parseInt(temp, 16) & 0xFF; |
||||||
|
} |
||||||
|
len = len + 15; |
||||||
|
} |
||||||
|
|
||||||
|
if (cmdinfor.TP) { |
||||||
|
SimpleDateFormat tempDate = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); |
||||||
|
String datetime = tempDate.format(new java.util.Date()); |
||||||
|
len++; |
||||||
|
msg[len] = cmdinfor.PFC;// 启动帧帧序号计数器PFC
|
||||||
|
len++; |
||||||
|
msg[len] = Integer.parseInt(datetime.substring(17, 19), 16);// 启动帧发送时标
|
||||||
|
// 秒
|
||||||
|
len++; |
||||||
|
msg[len] = Integer.parseInt(datetime.substring(14, 16), 16);// 启动帧发送时标
|
||||||
|
// 分
|
||||||
|
len++; |
||||||
|
msg[len] = Integer.parseInt(datetime.substring(11, 13), 16);// 启动帧发送时标
|
||||||
|
// 时
|
||||||
|
len++; |
||||||
|
msg[len] = Integer.parseInt(datetime.substring(8, 10), 16);// 启动帧发送时标
|
||||||
|
// 日
|
||||||
|
len++; |
||||||
|
msg[len] = 1;// 允许发送传输延时时间
|
||||||
|
} |
||||||
|
len++; |
||||||
|
msg[len] = GetCS(len); |
||||||
|
len++; |
||||||
|
msg[len] = 0x16; |
||||||
|
count = len - 7; |
||||||
|
count = (count << 2) + 2; |
||||||
|
msg[1] = count % 0x100; |
||||||
|
msg[2] = count / 0x100; |
||||||
|
msg[3] = count % 0x100; |
||||||
|
msg[4] = count / 0x100; |
||||||
|
|
||||||
|
// 转成字符串
|
||||||
|
StringBuffer sendBuffer = new StringBuffer(); |
||||||
|
for (int j = 0; j <= len; j++) |
||||||
|
sendBuffer.append(" " + dec2Hex(msg[j], 2)); |
||||||
|
|
||||||
|
System.out.println(sendBuffer.toString().trim()); |
||||||
|
return sendBuffer.toString().trim(); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 获取相应的功能码 |
||||||
|
* |
||||||
|
* @param sType |
||||||
|
* @param sFCB |
||||||
|
* @param bFCV |
||||||
|
* @return |
||||||
|
*/ |
||||||
|
private static Integer GetDownCortrolByte(String sType, String sFCB, Boolean bFCV) { |
||||||
|
String temp = ""; |
||||||
|
sType = sType.toUpperCase(); |
||||||
|
sType = sType.trim(); |
||||||
|
if (sType.equals("00")) |
||||||
|
temp = "0001"; |
||||||
|
if (sType.equals("02")) |
||||||
|
temp = "1001"; |
||||||
|
if (sType.equals("03")) |
||||||
|
temp = "1011"; |
||||||
|
if (sType.equals("04")) |
||||||
|
temp = "1010"; |
||||||
|
if (sType.equals("05")) |
||||||
|
temp = "1010"; |
||||||
|
if (sType.equals("06")) |
||||||
|
temp = "1011"; |
||||||
|
if (sType.equals("08")) |
||||||
|
temp = "1011"; |
||||||
|
if (sType.equals("09")) |
||||||
|
temp = "1011"; |
||||||
|
if (sType.equals("0A")) |
||||||
|
temp = "1011"; |
||||||
|
if (sType.equals("0B")) |
||||||
|
temp = "1011"; |
||||||
|
if (sType.equals("0C")) |
||||||
|
temp = "1011"; |
||||||
|
if (sType.equals("0D")) |
||||||
|
temp = "1011"; |
||||||
|
if (sType.equals("0E")) |
||||||
|
temp = "1011"; |
||||||
|
if (sType.equals("0F")) |
||||||
|
temp = "1011"; |
||||||
|
if (sType.equals("10")) |
||||||
|
temp = "1011"; |
||||||
|
if (sType.equals("8C")) |
||||||
|
temp = "1011"; |
||||||
|
if (sType.equals("A4")) |
||||||
|
temp = "1010"; |
||||||
|
if (sType.equals("A5")) |
||||||
|
temp = "1010"; |
||||||
|
if (sType.equals("AA")) |
||||||
|
temp = "1011"; |
||||||
|
if (sType.equals("AC")) |
||||||
|
temp = "1011"; |
||||||
|
if (sType.equals("AD")) |
||||||
|
temp = "1011"; |
||||||
|
if (bFCV) |
||||||
|
temp = "01" + sFCB.substring(1, 2) + "1" + temp; |
||||||
|
else |
||||||
|
temp = "01" + sFCB.substring(1, 2) + "0" + temp; |
||||||
|
return binaryString2Int(temp); |
||||||
|
} |
||||||
|
|
||||||
|
private static Boolean CheckDwnPw(String sType) { |
||||||
|
Boolean sign = false; |
||||||
|
if (sType.equals("01")) |
||||||
|
sign = true; |
||||||
|
if (sType.equals("03")) |
||||||
|
sign = true; |
||||||
|
if (sType.equals("04")) |
||||||
|
sign = true; |
||||||
|
if (sType.equals("05")) |
||||||
|
sign = true; |
||||||
|
if (sType.equals("06")) |
||||||
|
sign = true; |
||||||
|
if (sType.equals("0F")) |
||||||
|
sign = true; |
||||||
|
if (sType.equals("10")) |
||||||
|
sign = true; |
||||||
|
if (sType.equals("01")) |
||||||
|
sign = true; |
||||||
|
if (sType.equals("01")) |
||||||
|
sign = true; |
||||||
|
if (sType.equals("01")) |
||||||
|
sign = true; |
||||||
|
if (sType.equals("A4")) |
||||||
|
sign = true; |
||||||
|
if (sType.equals("A5")) |
||||||
|
sign = true; |
||||||
|
return sign; |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 二进制字符串转整型 |
||||||
|
* |
||||||
|
* @param bString |
||||||
|
* @return |
||||||
|
*/ |
||||||
|
public static int binaryString2Int(String bString) { |
||||||
|
int temp = 0; |
||||||
|
for (int i = 0; i < bString.length(); i++) { |
||||||
|
temp <<= 1; |
||||||
|
temp += Integer.parseInt(bString.substring(i, i + 1)); |
||||||
|
} |
||||||
|
return temp; |
||||||
|
} |
||||||
|
|
||||||
|
private static int GetCS(int len) { |
||||||
|
int ics = 0; |
||||||
|
for (int i = 6; i < len; i++) { |
||||||
|
ics = ics + msg[i]; |
||||||
|
} |
||||||
|
return ics & 0xFF; |
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
@ -0,0 +1,5 @@ |
|||||||
|
Manifest-Version: 1.0 |
||||||
|
Built-By: Administrator |
||||||
|
Build-Jdk: 1.8.0_351 |
||||||
|
Created-By: Maven Integration for Eclipse |
||||||
|
|
||||||
@ -0,0 +1,7 @@ |
|||||||
|
#Generated by Maven Integration for Eclipse |
||||||
|
#Wed Jun 05 23:15:09 CST 2024 |
||||||
|
version=0.0.1-SNAPSHOT |
||||||
|
groupId=com.back |
||||||
|
m2e.projectName=2-selfDevelop |
||||||
|
m2e.projectLocation=D\:\\fyj_20240312\\processor\\selfDevelop |
||||||
|
artifactId=selfDevelop |
||||||
@ -0,0 +1,53 @@ |
|||||||
|
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> |
||||||
|
<modelVersion>4.0.0</modelVersion> |
||||||
|
<parent> |
||||||
|
<groupId>com.back</groupId> |
||||||
|
<artifactId>processor</artifactId> |
||||||
|
<version>0.0.1-SNAPSHOT</version> |
||||||
|
</parent> |
||||||
|
<artifactId>selfDevelop</artifactId> |
||||||
|
<packaging>jar</packaging> |
||||||
|
|
||||||
|
<dependencies> |
||||||
|
<dependency> |
||||||
|
<groupId>com.back</groupId> |
||||||
|
<artifactId>common</artifactId> |
||||||
|
<version>0.0.1-SNAPSHOT</version> |
||||||
|
</dependency> |
||||||
|
</dependencies> |
||||||
|
|
||||||
|
|
||||||
|
<build> |
||||||
|
<plugins> |
||||||
|
<plugin> |
||||||
|
<groupId>org.apache.maven.plugins</groupId> |
||||||
|
<artifactId>maven-compiler-plugin</artifactId> |
||||||
|
<version>3.5.1</version> |
||||||
|
<configuration> |
||||||
|
<source>1.8</source> |
||||||
|
<target>1.8</target> |
||||||
|
</configuration> |
||||||
|
</plugin> |
||||||
|
|
||||||
|
<plugin> |
||||||
|
<groupId>org.springframework.boot</groupId> |
||||||
|
<artifactId>spring-boot-maven-plugin</artifactId> |
||||||
|
<version>2.6.4</version> |
||||||
|
<configuration> |
||||||
|
<!-- springboot main方法入口 --> |
||||||
|
<mainClass>com.back.main.MainProcess</mainClass> |
||||||
|
<layout>ZIP</layout> |
||||||
|
</configuration> |
||||||
|
<executions> |
||||||
|
<execution> |
||||||
|
<goals> |
||||||
|
<goal>repackage</goal><!--可以把依赖的包都打包到生成的Jar包中--> |
||||||
|
</goals> |
||||||
|
</execution> |
||||||
|
</executions> |
||||||
|
</plugin> |
||||||
|
</plugins> |
||||||
|
</build> |
||||||
|
|
||||||
|
|
||||||
|
</project> |
||||||
Loading…
Reference in new issue