diff --git a/xhpc-modules/xhpc-power-pole/pom.xml b/xhpc-modules/xhpc-power-pole/pom.xml
index 66a555ef..b023bec8 100644
--- a/xhpc-modules/xhpc-power-pole/pom.xml
+++ b/xhpc-modules/xhpc-power-pole/pom.xml
@@ -75,6 +75,12 @@
1.6
+
+ leaf-boot-starter
+ com.sankuai.inf.leaf
+ 1.0.1-RELEASE
+
+
diff --git a/xhpc-modules/xhpc-power-pole/src/main/java/com/xhpc/pp/domain/ServiceField.java b/xhpc-modules/xhpc-power-pole/src/main/java/com/xhpc/pp/domain/ServiceField.java
index f40a46cb..d40b7ab6 100644
--- a/xhpc-modules/xhpc-power-pole/src/main/java/com/xhpc/pp/domain/ServiceField.java
+++ b/xhpc-modules/xhpc-power-pole/src/main/java/com/xhpc/pp/domain/ServiceField.java
@@ -7,8 +7,6 @@ public class ServiceField {
private String version;
- private String name;
-
private String code;
private Integer len;
@@ -43,14 +41,6 @@ public class ServiceField {
this.version = version;
}
- public String getName() {
- return name;
- }
-
- public void setName(String name) {
- this.name = name;
- }
-
public String getCode() {
return code;
}
diff --git a/xhpc-modules/xhpc-power-pole/src/main/java/com/xhpc/pp/server/PPPBinaryHandler.java b/xhpc-modules/xhpc-power-pole/src/main/java/com/xhpc/pp/server/ChargingPileBinaryHandler.java
similarity index 76%
rename from xhpc-modules/xhpc-power-pole/src/main/java/com/xhpc/pp/server/PPPBinaryHandler.java
rename to xhpc-modules/xhpc-power-pole/src/main/java/com/xhpc/pp/server/ChargingPileBinaryHandler.java
index d679aac8..1eabffbd 100644
--- a/xhpc-modules/xhpc-power-pole/src/main/java/com/xhpc/pp/server/PPPBinaryHandler.java
+++ b/xhpc-modules/xhpc-power-pole/src/main/java/com/xhpc/pp/server/ChargingPileBinaryHandler.java
@@ -18,11 +18,11 @@ import org.slf4j.LoggerFactory;
import java.io.IOException;
import java.util.*;
-public class PPPBinaryHandler implements ClientBinaryHandler {
+public class ChargingPileBinaryHandler implements ClientBinaryHandler {
- private static final Logger log = LoggerFactory.getLogger(PPPBinaryHandler.class);
+ private static final Logger log = LoggerFactory.getLogger(ChargingPileBinaryHandler.class);
- private static final String SERVICE_REGISTER = "1001";
+ private static final String SERVICE_REGISTER = "01";
private static final String SERVICE_LOGOUT = "1002";
private static final String DATA_TYPE_STRING = "string";
@@ -32,53 +32,47 @@ public class PPPBinaryHandler implements ClientBinaryHandler {
private ServiceMainLogic servicemainLogic;
- public PPPBinaryHandler() {
+ public ChargingPileBinaryHandler() {
servicemainLogic = SpringContextHolder.getBean("ServiceMainLogic");
}
@Override
public void handleBinary(ClientHandler handler, byte[] data) throws IOException {
+
String dataStr = HexUtils.toHex(data);
- String poleNo = PPPServer.getPoleNo(handler);
- if (poleNo==null) {
- log.info("received message <<<< {}, len[{}]", dataStr, data.length);
- } else if (!dataStr.startsWith("00101005000100040000000000000000")) {
- log.info("received pole [{}] message <<<< {}, len[{}]", poleNo, dataStr, data.length);
+ String poleNo = ChargingPileServer.getPoleNo(handler);
+ if (data.length <= 2|| !dataStr.startsWith("68")) {
+ log.info("received invalid data <<<< {}, len[{}]", dataStr, data.length);
+ return;
+ } else {
+ log.info("received data <<<< {}, from pole <<<< {}", dataStr, poleNo);
}
try {
- // CRC校验和
- byte[] data2 = Arrays.copyOfRange(data, 2, data.length-2);
- String crc1 = CRCCalculator.ModbusCRC(data2, data2.length);
- // 检验长度
- if (data.length <= 2) {
- log.error("input data invalid. " + data);
- return;
- }
int len = HexUtils.toInteger(data, 1, 2);
if (data.length < len) {
- log.error("input data length. " + data.length);
+ log.error("incorrect input data length {}", data.length);
+ return;
+ }
+ byte[] data2 = Arrays.copyOfRange(data, 2, data.length-2);
+ String crc = CRCCalculator.ModbusCRC(data2);
+ if (!dataStr.endsWith(crc)) {
+ log.error("incorrect input data crc {}", crc);
return;
}
-
- // 处理粘包
List dataList = parseDataList(data);
-
for (byte[] d : dataList) {
process(handler, d);
}
-
} catch (TxException e) {
log.error(e.getMessage(), e);
}
-
}
- //
private void process(ClientHandler handler, byte[] data) throws TxException, IOException {
String serviceName = HexUtils.toHex(data, 5, 6);
- String version = PPPServer.getVersion(handler.getName());
- String poleNo = PPPServer.getPoleNo(handler);
+ String version = ChargingPileServer.getVersion(handler.getName());
+ String poleNo = ChargingPileServer.getPoleNo(handler);
Map req = analysis(data, serviceName, version);
// log.info("pole [{}] status: |{}|", StringUtils.isNotBlank(poleNo) ? poleNo : "null", req.get("status") != null ? MQPole.PoleStatus.toString((Long) req.get("status")) : "N/A");
ServiceParameter sp = new ServiceParameter(serviceName, poleNo, req);
@@ -96,16 +90,14 @@ public class PPPBinaryHandler implements ClientBinaryHandler {
log.info("server send msg >>>> [{}] |{}|", poleNo, HexUtils.toHex(result.getBinary()));
handler.sendClientBinary(result.getBinary());
}
-
// 注册成功后需要将当前handler与设备关联
if (SERVICE_REGISTER.equals(serviceName)) {
- PPPServer.putHandler((String) req.get("poleNo"), handler);
- PPPServer.putVersion(handler.getName(), (String) req.get("version"));
+ ChargingPileServer.putHandler((String) req.get("poleNo"), handler);
+ ChargingPileServer.putVersion(handler.getName(), (String) req.get("version"));
}
-
// 注销后将桩号对应关系解除
if (SERVICE_LOGOUT.equals(serviceName)) {
- PPPServer.removeHandler(poleNo);
+ ChargingPileServer.removeHandler(poleNo);
}
}
@@ -117,7 +109,7 @@ public class PPPBinaryHandler implements ClientBinaryHandler {
int start = 0;
while (start < data.length) {
if (len > data.length) {
- log.error("input data[{}] len[{}]", data, data.length);
+ log.error("incorrect input data[{}] len[{}]", data, data.length);
break;
}
dataList.add(ArrayUtils.subarray(data, start, len));
@@ -126,7 +118,7 @@ public class PPPBinaryHandler implements ClientBinaryHandler {
}
if (dataList.size() > 1) {
- log.info("detection stick package size[{}]", dataList.size());
+ log.info("detected stick package size[{}]", dataList.size());
}
return dataList;
@@ -139,13 +131,10 @@ public class PPPBinaryHandler implements ClientBinaryHandler {
throw TxException.INNER_ERROR("field mapper not found");
Map result = new HashMap();
- int pos = 4;
- // TODO 终止充电详情原因
+ int pos = 6;
for (ServiceField field : fieldList) {
- // 判断长度 某些报文不同版本长度不同
if (pos >= data.length || pos + field.getLen() > data.length)
break;
-
switch (field.getDataType()) {
case DATA_TYPE_STRING:
result.put(field.getCode(), HexUtils.toString(data, pos, pos + field.getLen()));
@@ -161,7 +150,6 @@ public class PPPBinaryHandler implements ClientBinaryHandler {
}
pos += field.getLen();
}
- // 原始报文
result.put("hex", HexUtils.toHex(data));
return result;
}
diff --git a/xhpc-modules/xhpc-power-pole/src/main/java/com/xhpc/pp/server/PPPCommandHandler.java b/xhpc-modules/xhpc-power-pole/src/main/java/com/xhpc/pp/server/ChargingPileCommandHandler.java
similarity index 70%
rename from xhpc-modules/xhpc-power-pole/src/main/java/com/xhpc/pp/server/PPPCommandHandler.java
rename to xhpc-modules/xhpc-power-pole/src/main/java/com/xhpc/pp/server/ChargingPileCommandHandler.java
index 6234612c..574e8b8b 100644
--- a/xhpc-modules/xhpc-power-pole/src/main/java/com/xhpc/pp/server/PPPCommandHandler.java
+++ b/xhpc-modules/xhpc-power-pole/src/main/java/com/xhpc/pp/server/ChargingPileCommandHandler.java
@@ -10,11 +10,11 @@ import java.io.IOException;
import java.net.SocketTimeoutException;
@Repository
-public class PPPCommandHandler implements ClientCommandHandler {
+public class ChargingPileCommandHandler implements ClientCommandHandler {
- private static final Logger log = LoggerFactory.getLogger(PPPCommandHandler.class);
+ private static final Logger log = LoggerFactory.getLogger(ChargingPileCommandHandler.class);
- public PPPCommandHandler() {
+ public ChargingPileCommandHandler() {
}
@Override
diff --git a/xhpc-modules/xhpc-power-pole/src/main/java/com/xhpc/pp/server/PPPEventHandler.java b/xhpc-modules/xhpc-power-pole/src/main/java/com/xhpc/pp/server/ChargingPileEventHandler.java
similarity index 79%
rename from xhpc-modules/xhpc-power-pole/src/main/java/com/xhpc/pp/server/PPPEventHandler.java
rename to xhpc-modules/xhpc-power-pole/src/main/java/com/xhpc/pp/server/ChargingPileEventHandler.java
index 284f72ec..79d26c2e 100644
--- a/xhpc-modules/xhpc-power-pole/src/main/java/com/xhpc/pp/server/PPPEventHandler.java
+++ b/xhpc-modules/xhpc-power-pole/src/main/java/com/xhpc/pp/server/ChargingPileEventHandler.java
@@ -12,10 +12,10 @@ import java.net.SocketTimeoutException;
@Lazy(false)
@Component
-public class PPPEventHandler implements ClientEventHandler {
- private static final Logger log = LoggerFactory.getLogger(PPPEventHandler.class);
+public class ChargingPileEventHandler implements ClientEventHandler {
+ private static final Logger log = LoggerFactory.getLogger(ChargingPileEventHandler.class);
- public PPPEventHandler() {
+ public ChargingPileEventHandler() {
}
@Override
@@ -27,11 +27,11 @@ public class PPPEventHandler implements ClientEventHandler {
@Override
public void lostConnection(ClientHandler handler) {
- String poleNo = PPPServer.getPoleNo(handler);
+ String poleNo = ChargingPileServer.getPoleNo(handler);
log.info("lost connection -> [{}] {} <- {}",
poleNo, handler.getName(), handler.getSocket().getRemoteSocketAddress().toString());
if (poleNo != null) {
- PPPServer.removeHandler(poleNo);
+ ChargingPileServer.removeHandler(poleNo);
}
}
diff --git a/xhpc-modules/xhpc-power-pole/src/main/java/com/xhpc/pp/server/PPPServer.java b/xhpc-modules/xhpc-power-pole/src/main/java/com/xhpc/pp/server/ChargingPileServer.java
similarity index 87%
rename from xhpc-modules/xhpc-power-pole/src/main/java/com/xhpc/pp/server/PPPServer.java
rename to xhpc-modules/xhpc-power-pole/src/main/java/com/xhpc/pp/server/ChargingPileServer.java
index f3329e92..8e08f474 100644
--- a/xhpc-modules/xhpc-power-pole/src/main/java/com/xhpc/pp/server/PPPServer.java
+++ b/xhpc-modules/xhpc-power-pole/src/main/java/com/xhpc/pp/server/ChargingPileServer.java
@@ -1,5 +1,6 @@
package com.xhpc.pp.server;
+import com.xhpc.pp.service.FieldService;
import com.xhpc.pp.utils.security.HexUtils;
import org.quickserver.net.server.ClientHandler;
import org.quickserver.net.server.DataMode;
@@ -24,17 +25,20 @@ import java.util.Map;
*/
@Lazy(false)
@Component
-public class PPPServer {
+public class ChargingPileServer {
public static final String default_version = "0A";
- private static final Logger log = LoggerFactory.getLogger(PPPServer.class);
+ private static final Logger log = LoggerFactory.getLogger(ChargingPileServer.class);
private static Map handlerMapper = new HashMap<>();
private static Map versionMapper = new HashMap<>();
private static Map poleMapper = new HashMap<>();
private QuickServer server;
@Autowired
- public PPPServer(@Value("${ppsvc.server}") String host, @Value("${ppsvc.port}") int port) {
+ private FieldService fieldService;
+
+ @Autowired
+ public ChargingPileServer(@Value("${ppsvc.server}") String host, @Value("${ppsvc.port}") int port) {
try {
QuickServerConfig config;
server = new QuickServer();
@@ -44,9 +48,9 @@ public class PPPServer {
mode.setDataMode(DataMode.BINARY, DataType.IN);
mode.setDataMode(DataMode.BINARY, DataType.OUT);
config.setDefaultDataMode(mode);
- config.setClientEventHandler(PPPEventHandler.class.getName());
- config.setClientCommandHandler(PPPCommandHandler.class.getName());
- config.setClientBinaryHandler(PPPBinaryHandler.class.getName());
+ config.setClientEventHandler(ChargingPileEventHandler.class.getName());
+ config.setClientCommandHandler(ChargingPileCommandHandler.class.getName());
+ config.setClientBinaryHandler(ChargingPileBinaryHandler.class.getName());
config.getServerMode().setBlocking(true);
config.setPort(port);
config.setBindAddr(host);
@@ -61,7 +65,6 @@ public class PPPServer {
}
public static void putHandler(String poleNo, ClientHandler handler) {
- poleNo = HexUtils.toIntString(poleNo, 4);
handlerMapper.put(poleNo, handler);
poleMapper.put(handler.getName(), poleNo);
}
diff --git a/xhpc-modules/xhpc-power-pole/src/main/java/com/xhpc/pp/service/FieldService.java b/xhpc-modules/xhpc-power-pole/src/main/java/com/xhpc/pp/service/FieldService.java
index 28bee365..0cefbc35 100644
--- a/xhpc-modules/xhpc-power-pole/src/main/java/com/xhpc/pp/service/FieldService.java
+++ b/xhpc-modules/xhpc-power-pole/src/main/java/com/xhpc/pp/service/FieldService.java
@@ -2,7 +2,7 @@ package com.xhpc.pp.service;
import com.xhpc.pp.domain.ServiceField;
import com.xhpc.pp.mapper.ServiceFieldMapper;
-import com.xhpc.pp.server.PPPServer;
+import com.xhpc.pp.server.ChargingPileServer;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Component;
@@ -23,18 +23,20 @@ public class FieldService {
@Autowired
public FieldService(ServiceFieldMapper fieldMapper) {
+
+ versionMapFields = new HashMap<>();
FieldService.fieldMapper = fieldMapper;
- FieldService.refreshCache();
+ FieldService.init();
}
public static void refreshCache() {
+
versionMapFields.clear();
init();
}
public static void init() {
- versionMapFields = new HashMap<>();
List list = fieldMapper.query(null);
for (ServiceField field : list) {
String version = field.getVersion();
@@ -47,21 +49,13 @@ public class FieldService {
public static List fieldList(String version, String service) {
Map> vermap = versionMapFields.get(version);
-
- // 充电桩上送的版本未维护,使用默认版本
if (vermap == null)
- vermap = versionMapFields.get(PPPServer.default_version);
-
- if (vermap == null)
- return null;
-
- // 上送的版本当前接口未维护,使用默认版本
+ vermap = versionMapFields.get(ChargingPileServer.default_version);
List fieldList = vermap.get(service);
if (fieldList == null || fieldList.isEmpty()) {
- vermap = versionMapFields.get(PPPServer.default_version);
+ vermap = versionMapFields.get(ChargingPileServer.default_version);
fieldList = vermap.get(service);
}
-
return fieldList;
}
diff --git a/xhpc-modules/xhpc-power-pole/src/main/java/com/xhpc/pp/service/ServiceMainLogic.java b/xhpc-modules/xhpc-power-pole/src/main/java/com/xhpc/pp/service/ServiceMainLogic.java
index 1607015c..4a920f30 100644
--- a/xhpc-modules/xhpc-power-pole/src/main/java/com/xhpc/pp/service/ServiceMainLogic.java
+++ b/xhpc-modules/xhpc-power-pole/src/main/java/com/xhpc/pp/service/ServiceMainLogic.java
@@ -20,27 +20,17 @@ public class ServiceMainLogic {
private Map serviceLogics;
public ServiceResult process(ServiceParameter param) {
+
ServiceResult result;
try {
-
- // 调用具体业务逻辑的创建逻辑
ServiceLogic logic = getServiceLogic(param.getServiceName());
- // 开启事务
startTransaction(param);
-
- // 开始服务
result = logic.service(param);
-
- // 提交事务
commitTransaction(param);
} catch (TxException e) {
log.error("服务请求失败:错误码[" + e.getReturnCode() + "],错误:{" + e.getMessage() + "}");
-
- // 记录错误日志
// saveErrorLog(param, e);
-
try {
- // 回滚事务
terminateTransaction(param);
result = new ServiceResult(e.getReturnCode(), e.getMessage());
} catch (Exception e1) {
@@ -50,8 +40,6 @@ public class ServiceMainLogic {
e.printStackTrace();
result = new ServiceResult(null, e.getMessage());
}
-
- // 处理结果
return result;
}
diff --git a/xhpc-modules/xhpc-power-pole/src/main/java/com/xhpc/pp/utils/security/CRCCalculator.java b/xhpc-modules/xhpc-power-pole/src/main/java/com/xhpc/pp/utils/security/CRCCalculator.java
index e384c9f8..21402537 100644
--- a/xhpc-modules/xhpc-power-pole/src/main/java/com/xhpc/pp/utils/security/CRCCalculator.java
+++ b/xhpc-modules/xhpc-power-pole/src/main/java/com/xhpc/pp/utils/security/CRCCalculator.java
@@ -2,16 +2,15 @@ package com.xhpc.pp.utils.security;
public class CRCCalculator {
- public static String ModbusCRC(byte[] pData, int len) {
+ public static String ModbusCRC(byte[] pData) {
int crc = 0xFFFF;
- for (int pos = 0; pos < len; pos++) {
- crc ^= (int)pData[pos] & 0xFF; // XOR byte into least sig. byte of crc
+ for (byte pDatum : pData) {
+ crc ^= (int) pDatum & 0xFF; // XOR byte into least sig. byte of crc
for (int i = 8; i != 0; i--) { // Loop over each bit
if ((crc & 0x0001) != 0) { // If the LSB is set
crc >>= 1; // Shift right and XOR 0xA001
crc ^= 0xA001;
- }
- else // Else LSB is not set
+ } else // Else LSB is not set
crc >>= 1; // Just shift right
}
}
diff --git a/xhpc-modules/xhpc-power-pole/src/main/resources/mapper/ServiceFieldMapper.xml b/xhpc-modules/xhpc-power-pole/src/main/resources/mapper/ServiceFieldMapper.xml
index 7f2859e0..2f0e6072 100644
--- a/xhpc-modules/xhpc-power-pole/src/main/resources/mapper/ServiceFieldMapper.xml
+++ b/xhpc-modules/xhpc-power-pole/src/main/resources/mapper/ServiceFieldMapper.xml
@@ -5,7 +5,6 @@
-
@@ -15,7 +14,7 @@
id
- , service_name, version, name, code, len, seq, remark, data_type
+ , service_name, version, code, len, seq, remark, data_type