Browse Source

fix

master
winter 1 week ago
parent
commit
92a7026154
6 changed files with 309 additions and 20 deletions
  1. +78
    -1
      bjairCApi/src/main/java/com/iformall/controller/HaiKangController.java
  2. +4
    -0
      bjairCApi/src/main/resources/application-dev.yml
  3. +4
    -9
      bjairCApi/src/main/resources/application-prod.yml
  4. +18
    -10
      bjairService/src/main/java/com/iformall/haikang/HKHttpClientInstanceFactory.java
  5. +60
    -0
      bjairService/src/main/java/com/iformall/haikang/TcpClient.java
  6. +145
    -0
      bjairService/src/main/java/com/iformall/haikang/TcpServer.java

+ 78
- 1
bjairCApi/src/main/java/com/iformall/controller/HaiKangController.java View File

@@ -8,6 +8,7 @@ import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.apache.http.Header; import org.apache.http.Header;
import org.apache.http.HttpEntity; import org.apache.http.HttpEntity;
import org.apache.http.HttpHeaders;
import org.apache.http.auth.AuthScope; import org.apache.http.auth.AuthScope;
import org.apache.http.auth.UsernamePasswordCredentials; import org.apache.http.auth.UsernamePasswordCredentials;
import org.apache.http.client.CredentialsProvider; import org.apache.http.client.CredentialsProvider;
@@ -21,6 +22,7 @@ import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients; import org.apache.http.impl.client.HttpClients;
import org.apache.http.message.BasicHeader; import org.apache.http.message.BasicHeader;
import org.apache.http.util.EntityUtils; import org.apache.http.util.EntityUtils;
import org.apache.logging.log4j.util.Base64Util;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
@@ -30,7 +32,8 @@ import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;


import com.aliyun.openservices.shade.com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.iformall.annotation.AuthIgnore; import com.iformall.annotation.AuthIgnore;
import com.iformall.common.ResultData; import com.iformall.common.ResultData;
import com.iformall.haikang.HKHttpClientInstanceFactory; import com.iformall.haikang.HKHttpClientInstanceFactory;
@@ -48,7 +51,9 @@ import java.io.IOException;
import java.io.InputStream; import java.io.InputStream;
import java.io.InputStreamReader; import java.io.InputStreamReader;
import java.nio.charset.StandardCharsets; import java.nio.charset.StandardCharsets;
import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map;
import java.util.UUID; import java.util.UUID;


/** /**
@@ -112,6 +117,8 @@ public class HaiKangController {
Integer peopleNum = rtd.getInteger("peopleNum"); Integer peopleNum = rtd.getInteger("peopleNum");
if (null != peopleNum) { if (null != peopleNum) {
peopleNumberFactory.setPeopleNumber(ip, peopleNum); peopleNumberFactory.setPeopleNumber(ip, peopleNum);
//Integer peopleNumber = peopleNumberFactory.getPeopleNumber();
//todengxiang(peopleNumber);
}else { }else {
logger.info("unValid response:"+baowen); logger.info("unValid response:"+baowen);
} }
@@ -158,6 +165,76 @@ public class HaiKangController {
} }
} }
// @AuthIgnore
// @GetMapping("/todengdegntest")
// public ResultData todengdegntest() {
// todengxiang(99);
// return new ResultData();
// }
//
// private void todengxiang(Integer peopleNum) {
// todengxiangPost("119.23.61.190", "5006", null, null, "723900001916", peopleNum);
// }
//
// /**
// * 灯箱显示
// * @param request
// * @param response
// * @throws ServletException
// * @throws IOException
// */
// private void todengxiangPost(String ip,String port,String appkey,String appSecret,String sn,Integer peopleNum) {
// if (null == peopleNum) {
// peopleNum = 0;
// }
// CloseableHttpClient httpClient = httpFactory.getIpHttpClient(ip, null, null);
// HttpPost httpPost = new HttpPost("http://"+ip+":"+port+"/api/v1/device/cmd");
// httpPost.setHeader(HttpHeaders.AUTHORIZATION,"Basic "+Base64Util.encode(appkey+":"+appSecret));
// httpPost.addHeader("Content-Type", "application/json");
// Map param = new HashMap();
// //平台上设备 IMEI 或者设备序列号, 多个设备用逗号分隔
// param.put("cmd_did", sn);
// //读取命令 , ‘W’ 写入命令
// param.put("cmd_rw", "W");
// //下发命令内容,json 字符串,命令内容可能不一样
// Map content = new HashMap();
// //操作, 下发
// content.put("op", "set_dp");
// //数据点名称
// content.put("name", "hum");
// content.put("value", peopleNum);
// param.put("cmd_content", JSON.toJSONString(content));
// //描述信息
// param.put("cmd_desc", "区域实时人数写入");
//
// StringEntity entity = new StringEntity(JSON.toJSONString(param), StandardCharsets.UTF_8);
// httpPost.setEntity(entity);
// CloseableHttpResponse response = null;
// try {
// // 执行请求
// response = httpClient.execute(httpPost);
// String ret = EntityUtils.toString(response.getEntity());
// logger.debug("todengxiang response:"+ret);
// } catch (Exception e) {
// e.printStackTrace();
// } finally {
// if (null != response) {
// try {
// response.close();
// } catch (IOException e) {
// logger.error("todengxiang error.",e);
// }
// }
// try {
// httpClient.close();
// } catch (IOException e) {
// logger.error("todengxiang error.",e);
// }
//
// }
// }
/** /**
* 1. 获取设备系统能力集GET /ISAPI/System/capabilities; * 1. 获取设备系统能力集GET /ISAPI/System/capabilities;
2. 判断是否支持事件订阅isSupportSubscribeEvent存在且为true; 2. 判断是否支持事件订阅isSupportSubscribeEvent存在且为true;


+ 4
- 0
bjairCApi/src/main/resources/application-dev.yml View File

@@ -157,6 +157,10 @@ video:
maxPoolSize: 20 maxPoolSize: 20
queueCapacity: 1000 queueCapacity: 1000
namePrefix: aliyun-video-upload namePrefix: aliyun-video-upload
tcp:
server:
port: 9010


jasypt: jasypt:
encryptor: encryptor:


+ 4
- 9
bjairCApi/src/main/resources/application-prod.yml View File

@@ -54,15 +54,6 @@ spring:
filehost: homec filehost: homec
filedomain: https://yuanqizhijia.oss-accelerate.aliyuncs.com filedomain: https://yuanqizhijia.oss-accelerate.aliyuncs.com
haikang:
netsdk:
libdir: C:\project\bjAirport\bjairService
deviceIp: 192.168.2.200
loginUser: admin
password: wushikeji001
listenIp: 192.168.2.103
listenPort: 1500
# EMAIL # EMAIL
mail: mail:
host: smtp.exmail.qq.com host: smtp.exmail.qq.com
@@ -137,6 +128,10 @@ video:
maxPoolSize: 20 maxPoolSize: 20
queueCapacity: 1000 queueCapacity: 1000
namePrefix: aliyun-video-upload namePrefix: aliyun-video-upload
tcp:
server:
port: 9010


fm: fm:
exception: false exception: false


+ 18
- 10
bjairService/src/main/java/com/iformall/haikang/HKHttpClientInstanceFactory.java View File

@@ -3,6 +3,7 @@ package com.iformall.haikang;
import java.util.Map; import java.util.Map;
import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentHashMap;


import org.apache.commons.lang3.StringUtils;
import org.apache.http.auth.AuthScope; import org.apache.http.auth.AuthScope;
import org.apache.http.auth.UsernamePasswordCredentials; import org.apache.http.auth.UsernamePasswordCredentials;
import org.apache.http.client.CredentialsProvider; import org.apache.http.client.CredentialsProvider;
@@ -35,16 +36,23 @@ public class HKHttpClientInstanceFactory {
} }
private CloseableHttpClient generateHttpClient(String ip,String name,String password) { private CloseableHttpClient generateHttpClient(String ip,String name,String password) {
CredentialsProvider credsProvider = new BasicCredentialsProvider();
credsProvider.setCredentials(
new AuthScope(ip, AuthScope.ANY_PORT),
new UsernamePasswordCredentials(name, password));
// 创建一个使用认证凭据的CloseableHttpClient
CloseableHttpClient httpClient = HttpClients.custom()
.setDefaultCredentialsProvider(credsProvider)
.build();
return httpClient;
if (StringUtils.isNotBlank(name) && StringUtils.isNotBlank(password)) {
CredentialsProvider credsProvider = new BasicCredentialsProvider();
credsProvider.setCredentials(
new AuthScope(ip, AuthScope.ANY_PORT),
new UsernamePasswordCredentials(name, password));
// 创建一个使用认证凭据的CloseableHttpClient
CloseableHttpClient httpClient = HttpClients.custom()
.setDefaultCredentialsProvider(credsProvider)
.build();
return httpClient;
}else {
CloseableHttpClient httpClient = HttpClients.custom()
.build();
return httpClient;
}
} }
} }

+ 60
- 0
bjairService/src/main/java/com/iformall/haikang/TcpClient.java View File

@@ -0,0 +1,60 @@
package com.iformall.haikang;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;

import javax.annotation.PostConstruct;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

@Component
public class TcpClient {
private final Logger log = LoggerFactory.getLogger(this.getClass());

// @Value("${tcp.server.host}")
// private String host;
//
// @Value("${tcp.server.port}")
// private int port;
//
// private Socket socket;
// private PrintWriter out;
// private BufferedReader in;
//
// @PostConstruct
// public void connect() {
// try {
// socket = new Socket(host, port);
// out = new PrintWriter(socket.getOutputStream(), true);
// in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
// log.info("Connected to TCP server at {}:{}", host, port);
// } catch (IOException e) {
// log.error("Connection failed: {}", e.getMessage());
// }
// }
//
// public String sendMessage(String message) {
// try {
// out.println(message);
// return in.readLine();
// } catch (IOException e) {
// log.error("Failed to send message: {}", e.getMessage());
// return null;
// }
// }
//
// public void disconnect() {
// try {
// if (socket != null) socket.close();
// } catch (IOException e) {
// log.error("Failed to disconnect: {}", e.getMessage());
// }
// }
}

+ 145
- 0
bjairService/src/main/java/com/iformall/haikang/TcpServer.java View File

@@ -0,0 +1,145 @@
package com.iformall.haikang;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.HashMap;
import java.util.Map;

import javax.annotation.PostConstruct;

import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;

@Component
public class TcpServer {
private final Logger log = LoggerFactory.getLogger(this.getClass());

@Value("${tcp.server.port}") // Configure port in application.properties
private int port;
@Autowired
HKPeopleNumberFactory peopleNumberFactory;

@PostConstruct
public void start() {
new Thread(() -> {
try (ServerSocket serverSocket = new ServerSocket(port)) {
log.info("TCP Server started on port {}", port);

while (true) {
Socket clientSocket = serverSocket.accept();
log.info("New client connected: {}", clientSocket.getInetAddress());

// Handle client in a new thread
new Thread(() -> handleClient(clientSocket)).start();
}
} catch (IOException e) {
log.error("TCP Server error: {}", e.getMessage());
}
}).start();
}

private void handleClient(Socket clientSocket) {
try (
BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
PrintWriter out = new PrintWriter(clientSocket.getOutputStream(), true)
) {
String message;
while ((message = in.readLine()) != null) {
log.info("Received: {}", message);
//
handleMessage(out, message);
// Echo back to client
//out.println("Server: " + message);
}
} catch (IOException e) {
log.error("Client connection error: {}", e.getMessage());
} finally {
try {
clientSocket.close();
} catch (IOException e) {
log.error("Failed to close socket: {}", e.getMessage());
}
}
}
//编号2代表需要等待时长,编号3代表当前排队人数,编号4代表当前场内出租车,编号5代表在途出租车
private static final int[] types = new int[] {2,3,4,5};
private void handleMessage(PrintWriter out,String message) {
if (StringUtils.isBlank(message)) {
return;
}
JSONObject mo = JSON.parseObject(message);
if (null == mo) {
return;
}
String func = mo.getString("func");
//心跳
if ("KeepOnline".equals(func)) {
String dest = mo.getString("dest");
String source = mo.getString("source");
mo.put("dest", source);
mo.put("source", dest);
mo.put("func", "AckKeepOnline");
JSONArray datas = new JSONArray();
Map dm = new HashMap();
dm.put("node", "OK");
datas.add(dm);
mo.put("data", datas);
out.println(JSON.toJSONString(mo));
//给灯箱发送
for (int i = 0 ; i < types.length ; i++) {
JSONObject dxobj = new JSONObject();
dxobj.put("dest", source);
dxobj.put("source", dest);
dxobj.put("func", "ControlData");
JSONArray datas1 = new JSONArray();
Map dm1 = new HashMap();
dm1.put("node", generateNode(types[i]));
datas1.add(dm1);
dxobj.put("data", datas);
out.println(JSON.toJSONString(dxobj));
}
}
}
//编号2代表需要等待时长,编号3代表当前排队人数,编号4代表当前场内出租车,编号5代表在途出租车
private String generateNode(int type) {
StringBuffer sb = new StringBuffer("0-5-").append(type).append("-");
int value = 0;
switch (type) {
case 2:
value = 1;//查询等待时长
break;
case 3:
value = peopleNumberFactory.getPeopleNumber();;//查询当前排队人数
break;
case 4:
value = 1;//查询场内出租车
break;
case 5:
value = 1;//查询在途出租车
break;
default:
break;
}
sb.append(value).append("-0-1-0");
return sb.toString();
}
}

Loading…
Cancel
Save