桩注册服务逻辑

This commit is contained in:
ZZ 2021-07-15 16:11:18 +08:00
parent 9855c823a7
commit 412ba3f6db
11 changed files with 129 additions and 124 deletions

View File

@ -3,6 +3,7 @@ package com.xhpc.pp;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
import org.springframework.context.annotation.ImportResource;
/**
* 充电桩服务
@ -10,6 +11,7 @@ import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
* @author zz
*/
@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class })
@ImportResource(locations={"classpath:svcmainlogic.xml"})
public class XhpcPPApplication
{
public static void main(String[] args) {

View File

@ -1,13 +1,8 @@
package com.xhpc.pp.config;
import com.xhpc.pp.tx.logic.ServiceLogic;
import com.xhpc.pp.utils.SpringContextHolder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import java.util.HashMap;
import java.util.Map;
@Configuration
public class EarlierBeanConf {
@ -18,9 +13,4 @@ public class EarlierBeanConf {
this.springContextHolder = springContextHolder;
}
@Bean
public Map<String, ServiceLogic> serviceLogics() {
return new HashMap<>();
}
}

View File

@ -7,7 +7,6 @@ import com.xhpc.pp.tx.ServiceParameter;
import com.xhpc.pp.tx.ServiceResult;
import com.xhpc.pp.tx.TxException;
import com.xhpc.pp.utils.SpringContextHolder;
import com.xhpc.pp.utils.security.CRCCalculator;
import com.xhpc.pp.utils.security.HexUtils;
import org.apache.commons.lang3.ArrayUtils;
import org.quickserver.net.server.ClientBinaryHandler;
@ -16,14 +15,18 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.IOException;
import java.util.*;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import static com.xhpc.pp.utils.security.CRCCalculator.calcCrc;
public class ChargingPileBinaryHandler implements ClientBinaryHandler {
private static final Logger log = LoggerFactory.getLogger(ChargingPileBinaryHandler.class);
private static final String SERVICE_REGISTER = "01";
private static final String SERVICE_LOGOUT = "1002";
private static final String DATA_TYPE_STRING = "string";
private static final String DATA_TYPE_INT = "int";
@ -39,28 +42,27 @@ public class ChargingPileBinaryHandler implements ClientBinaryHandler {
@Override
public void handleBinary(ClientHandler handler, byte[] data) throws IOException {
String dataStr = HexUtils.toHex(data);
try {
List<byte[]> dataList = parseDataList(data);
for (byte[] d : dataList) {
String dataStr = HexUtils.toHex(d);
String poleNo = ChargingPileServer.getPoleNo(handler);
if (data.length <= 2|| !dataStr.startsWith("68")) {
log.info("received invalid data <<<< {}, len[{}]", dataStr, data.length);
if (d.length <= 2|| !dataStr.startsWith("68")) {
log.info("received invalid data <<<< {}, len[{}]", dataStr, d.length);
return;
} else {
} else if (poleNo!=null) {
log.info("received data <<<< {}, from pole <<<< {}", dataStr, poleNo);
}
try {
int len = HexUtils.toInteger(data, 1, 2);
if (data.length < len) {
log.error("incorrect input data length {}", data.length);
int len = HexUtils.toInteger(d, 1, 2);
if (d.length < len) {
log.error("incorrect input data length {}", d.length);
return;
}
byte[] data2 = Arrays.copyOfRange(data, 2, data.length-2);
String crc = CRCCalculator.ModbusCRC(data2);
String crc = calcCrc(d);
if (!dataStr.endsWith(crc)) {
log.error("incorrect input data crc {}", crc);
return;
}
List<byte[]> dataList = parseDataList(data);
for (byte[] d : dataList) {
process(handler, d);
}
} catch (TxException e) {
@ -76,51 +78,37 @@ public class ChargingPileBinaryHandler implements ClientBinaryHandler {
Map<String, Object> 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);
// try {
// log.info("serviceLogic: |{}|", servicemainLogic.getServiceLogic(serviceName).getClass().getName());
// } catch (Exception e) {
// e.printStackTrace();
// }
//service 主逻辑中解析参数为对应的服务
ServiceResult result = servicemainLogic.process(sp);
// 结果不为空的直接回写
if (result.getBinary() != null) {
log.info("server send msg >>>> [{}] |{}|", poleNo, HexUtils.toHex(result.getBinary()));
handler.sendClientBinary(result.getBinary());
log.info("server send msg >>>> [{}] |{}|", poleNo, HexUtils.toHex(result.getBinary()));
if (result.getBinary() != null) {
}
// 注册成功后需要将当前handler与设备关联
if (SERVICE_REGISTER.equals(serviceName)) {
log.info("pole registered >>>> [{}] ", poleNo);
ChargingPileServer.putHandler((String) req.get("poleNo"), handler);
ChargingPileServer.putVersion(handler.getName(), (String) req.get("version"));
}
// 注销后将桩号对应关系解除
if (SERVICE_LOGOUT.equals(serviceName)) {
ChargingPileServer.removeHandler(poleNo);
}
}
private List<byte[]> parseDataList(byte[] data) {
List<byte[]> dataList = new ArrayList<>();
int len = HexUtils.toInteger(data, 1, 2);
List<byte[]> dataList = new ArrayList<>();
int processedLen, len = HexUtils.toInteger(data, 1, 2)+4;
processedLen = 0;
int start = 0;
while (start < data.length) {
if (len > data.length) {
log.error("incorrect input data[{}] len[{}]", data, data.length);
break;
}
dataList.add(ArrayUtils.subarray(data, start, len));
start = len;
len = len + HexUtils.toInteger(data, start, start + 2);
dataList.add(ArrayUtils.subarray(data, start, start+len));
processedLen += len;
start = processedLen;
len = HexUtils.toInteger(data, start+1, start + 2)+4;
}
if (dataList.size() > 1) {
log.info("detected stick package size[{}]", dataList.size());
}
return dataList;
}
@ -129,7 +117,6 @@ public class ChargingPileBinaryHandler implements ClientBinaryHandler {
List<ServiceField> fieldList = FieldService.fieldList(ver, service);
if (fieldList == null || fieldList.isEmpty())
throw TxException.INNER_ERROR("field mapper not found");
Map<String, Object> result = new HashMap<String, Object>();
int pos = 6;
for (ServiceField field : fieldList) {

View File

@ -79,7 +79,7 @@ public class ChargingPileServer {
}
public static void sendClientMsg(String poleNo, byte[] msg) {
//TODO 采集服务器充电桩 协议0x100A
if (!HexUtils.toHex(msg).startsWith("00101005")) {
log.info("server send msg >>>> [{}] |{}|", poleNo, HexUtils.toHex(msg));
}
@ -87,22 +87,17 @@ public class ChargingPileServer {
poleNo = "0000000000000000" + poleNo;
poleNo = poleNo.substring(poleNo.length() - 16);
}
ClientHandler handler = handlerMapper.get(poleNo);
if (handler == null || !handler.isOpen()) {
log.error("send message failed. [{}] connection lost", poleNo);
removeHandler(poleNo);
return;
}
try {
handler.sendClientBinary(msg);
} catch (IOException e) {
log.error("send message failed. " + e.getMessage(), e);
}
return;
}
public static void putVersion(String handler, String version) {

View File

@ -48,6 +48,7 @@ public class FieldService {
}
public static List<ServiceField> fieldList(String version, String service) {
Map<String, List<ServiceField>> vermap = versionMapFields.get(version);
if (vermap == null)
vermap = versionMapFields.get(ChargingPileServer.default_version);
@ -60,6 +61,7 @@ public class FieldService {
}
public List<Map<String, Object>> querySQL(String sql) {
Map<String, String> query = new HashMap<>();
query.put("sql", sql);
return fieldMapper.querySQL(query);

View File

@ -0,0 +1,34 @@
package com.xhpc.pp.service;
import com.xhpc.pp.tx.ServiceParameter;
import com.xhpc.pp.tx.ServiceResult;
import com.xhpc.pp.tx.TxException;
import com.xhpc.pp.tx.logic.ServiceLogic;
import com.xhpc.pp.utils.security.CRCCalculator;
import com.xhpc.pp.utils.security.HexUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Component;
import java.util.Map;
@Lazy
@Component("RegisterLogic")
public class RegisterLogic implements ServiceLogic {
private static Logger log = LoggerFactory.getLogger(RegisterLogic.class);
@Override
public ServiceResult service(ServiceParameter sp) throws TxException {
Map<String, Object> req = sp.getParameters();
if (req == null) {
throw TxException.INVALID_PARAMETER;
}
String poleNo = (String) req.get("poleNo");
String resultStr = "680C00000002".concat(poleNo).concat("00");
resultStr = resultStr.concat(CRCCalculator.calcCrc(resultStr));
return new ServiceResult(HexUtils.toBytes(resultStr), ServiceResult.OK);
}
}

View File

@ -19,26 +19,26 @@ public class ServiceMainLogic {
@Resource
private Map<String, ServiceLogic> serviceLogics;
public ServiceResult process(ServiceParameter param) {
public ServiceResult process(ServiceParameter sp) {
ServiceResult result;
try {
ServiceLogic logic = getServiceLogic(param.getServiceName());
startTransaction(param);
result = logic.service(param);
commitTransaction(param);
ServiceLogic logic = getServiceLogic(sp.getServiceName());
// startTransaction(sp);
result = logic.service(sp);
// commitTransaction(sp);
} catch (TxException e) {
log.error("服务请求失败:错误码[" + e.getReturnCode() + "],错误:{" + e.getMessage() + "}");
// saveErrorLog(param, e);
// saveErrorLog(sp, e);
try {
terminateTransaction(param);
terminateTransaction(sp);
result = new ServiceResult(e.getReturnCode(), e.getMessage());
} catch (Exception e1) {
result = new ServiceResult(null, e1.getMessage());
result = new ServiceResult(e1.getMessage());
}
} catch (Exception e) {
e.printStackTrace();
result = new ServiceResult(null, e.getMessage());
result = new ServiceResult(e.getMessage());
}
return result;
}
@ -89,16 +89,12 @@ public class ServiceMainLogic {
}
public ServiceLogic getServiceLogic(String serviceName) throws Exception {
if (serviceName == null || "".equals(serviceName))
throw new TxException("0101", "请求参数错误");
log.debug("获取ServiceCommandLogic,serviceName:" + serviceName);
ServiceLogic logic = serviceLogics.get(serviceName);
if (logic == null)
throw new TxException("0102", "请求的业务类型错误," + serviceName);
return logic;
}

View File

@ -5,13 +5,15 @@ import java.util.Map;
public class ServiceResult {
public static final String RESULT_OK = "0000";
public static final String OK = "0";
public static final String FAIL = "1";
private String code;
private byte[] binary;
private Object json;
public ServiceResult(String code, String body) {
Map<String, String> map = new HashMap<String, String>();
String messageCode = "0101";
if (code != null && code.trim().length() > 0) {
@ -30,11 +32,16 @@ public class ServiceResult {
this.json = json;
}
public ServiceResult() {
public ServiceResult(byte[] binary) {
this.binary = binary;
this.code = OK;
}
public ServiceResult(byte[] binary) {
public ServiceResult(byte[] binary, String code) {
this.binary = binary;
this.code = code;
}
public Object getJson() {
@ -49,4 +56,11 @@ public class ServiceResult {
return binary;
}
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
}

View File

@ -5,11 +5,6 @@ import com.xhpc.pp.tx.ServiceResult;
public interface ServiceLogic {
/**
* 实现具体服务
*
* @return
*/
ServiceResult service(ServiceParameter param) throws Exception;
ServiceResult service(ServiceParameter sp) throws Exception;
}

View File

@ -1,5 +1,7 @@
package com.xhpc.pp.utils.security;
import java.util.Arrays;
public class CRCCalculator {
public static String ModbusCRC(byte[] pData) {
@ -19,6 +21,18 @@ public class CRCCalculator {
return String.format("%04X", crc);
}
public static String calcCrc(byte[] data) {
byte[] data2 = Arrays.copyOfRange(data, 2, data.length-2);
return CRCCalculator.ModbusCRC(data2);
}
public static String calcCrc(String msg) {
byte[] data = HexUtils.toBytes(msg);
assert data != null;
byte[] data2 = Arrays.copyOfRange(data, 2, data.length);
return CRCCalculator.ModbusCRC(data2);
}
public static int byteArrayToInt(byte[] b) {
return b[3] & 0xFF |
(b[2] & 0xFF) << 8 |
@ -35,41 +49,4 @@ public class CRCCalculator {
};
}
private static byte[] hi = {
(byte) 0x00, (byte) 0xC1, (byte) 0x81, (byte) 0x40, (byte) 0x01, (byte) 0xC0, (byte) 0x80, (byte) 0x41, (byte) 0x01, (byte) 0xC0, (byte) 0x80, (byte) 0x41, (byte) 0x00, (byte) 0xC1, (byte) 0x81, (byte) 0x40,
(byte) 0x01, (byte) 0xC0, (byte) 0x80, (byte) 0x41, (byte) 0x00, (byte) 0xC1, (byte) 0x81, (byte) 0x40, (byte) 0x00, (byte) 0xC1, (byte) 0x81, (byte) 0x40, (byte) 0x01, (byte) 0xC0, (byte) 0x80, (byte) 0x41,
(byte) 0x01, (byte) 0xC0, (byte) 0x80, (byte) 0x41, (byte) 0x00, (byte) 0xC1, (byte) 0x81, (byte) 0x40, (byte) 0x00, (byte) 0xC1, (byte) 0x81, (byte) 0x40, (byte) 0x01, (byte) 0xC0, (byte) 0x80, (byte) 0x41,
(byte) 0x00, (byte) 0xC1, (byte) 0x81, (byte) 0x40, (byte) 0x01, (byte) 0xC0, (byte) 0x80, (byte) 0x41, (byte) 0x01, (byte) 0xC0, (byte) 0x80, (byte) 0x41, (byte) 0x00, (byte) 0xC1, (byte) 0x81, (byte) 0x40,
(byte) 0x01, (byte) 0xC0, (byte) 0x80, (byte) 0x41, (byte) 0x00, (byte) 0xC1, (byte) 0x81, (byte) 0x40, (byte) 0x00, (byte) 0xC1, (byte) 0x81, (byte) 0x40, (byte) 0x01, (byte) 0xC0, (byte) 0x80, (byte) 0x41,
(byte) 0x00, (byte) 0xC1, (byte) 0x81, (byte) 0x40, (byte) 0x01, (byte) 0xC0, (byte) 0x80, (byte) 0x41, (byte) 0x01, (byte) 0xC0, (byte) 0x80, (byte) 0x41, (byte) 0x00, (byte) 0xC1, (byte) 0x81, (byte) 0x40,
(byte) 0x00, (byte) 0xC1, (byte) 0x81, (byte) 0x40, (byte) 0x01, (byte) 0xC0, (byte) 0x80, (byte) 0x41, (byte) 0x01, (byte) 0xC0, (byte) 0x80, (byte) 0x41, (byte) 0x00, (byte) 0xC1, (byte) 0x81, (byte) 0x40,
(byte) 0x01, (byte) 0xC0, (byte) 0x80, (byte) 0x41, (byte) 0x00, (byte) 0xC1, (byte) 0x81, (byte) 0x40, (byte) 0x00, (byte) 0xC1, (byte) 0x81, (byte) 0x40, (byte) 0x01, (byte) 0xC0, (byte) 0x80, (byte) 0x41,
(byte) 0x01, (byte) 0xC0, (byte) 0x80, (byte) 0x41, (byte) 0x00, (byte) 0xC1, (byte) 0x81, (byte) 0x40, (byte) 0x00, (byte) 0xC1, (byte) 0x81, (byte) 0x40, (byte) 0x01, (byte) 0xC0, (byte) 0x80, (byte) 0x41,
(byte) 0x00, (byte) 0xC1, (byte) 0x81, (byte) 0x40, (byte) 0x01, (byte) 0xC0, (byte) 0x80, (byte) 0x41, (byte) 0x01, (byte) 0xC0, (byte) 0x80, (byte) 0x41, (byte) 0x00, (byte) 0xC1, (byte) 0x81, (byte) 0x40,
(byte) 0x00, (byte) 0xC1, (byte) 0x81, (byte) 0x40, (byte) 0x01, (byte) 0xC0, (byte) 0x80, (byte) 0x41, (byte) 0x01, (byte) 0xC0, (byte) 0x80, (byte) 0x41, (byte) 0x00, (byte) 0xC1, (byte) 0x81, (byte) 0x40,
(byte) 0x01, (byte) 0xC0, (byte) 0x80, (byte) 0x41, (byte) 0x00, (byte) 0xC1, (byte) 0x81, (byte) 0x40, (byte) 0x00, (byte) 0xC1, (byte) 0x81, (byte) 0x40, (byte) 0x01, (byte) 0xC0, (byte) 0x80, (byte) 0x41,
(byte) 0x00, (byte) 0xC1, (byte) 0x81, (byte) 0x40, (byte) 0x01, (byte) 0xC0, (byte) 0x80, (byte) 0x41, (byte) 0x01, (byte) 0xC0, (byte) 0x80, (byte) 0x41, (byte) 0x00, (byte) 0xC1, (byte) 0x81, (byte) 0x40,
(byte) 0x01, (byte) 0xC0, (byte) 0x80, (byte) 0x41, (byte) 0x00, (byte) 0xC1, (byte) 0x81, (byte) 0x40, (byte) 0x00, (byte) 0xC1, (byte) 0x81, (byte) 0x40, (byte) 0x01, (byte) 0xC0, (byte) 0x80, (byte) 0x41,
(byte) 0x01, (byte) 0xC0, (byte) 0x80, (byte) 0x41, (byte) 0x00, (byte) 0xC1, (byte) 0x81, (byte) 0x40, (byte) 0x00, (byte) 0xC1, (byte) 0x81, (byte) 0x40, (byte) 0x01, (byte) 0xC0, (byte) 0x80, (byte) 0x41,
(byte) 0x00, (byte) 0xC1, (byte) 0x81, (byte) 0x40, (byte) 0x01, (byte) 0xC0, (byte) 0x80, (byte) 0x41, (byte) 0x01, (byte) 0xC0, (byte) 0x80, (byte) 0x41, (byte) 0x00, (byte) 0xC1, (byte) 0x81, (byte) 0x40
};
private static byte lo[] = {
(byte) 0x00, (byte) 0xC0, (byte) 0xC1, (byte) 0x01, (byte) 0xC3, (byte) 0x03, (byte) 0x02, (byte) 0xC2, (byte) 0xC6, (byte) 0x06, (byte) 0x07, (byte) 0xC7, (byte) 0x05, (byte) 0xC5, (byte) 0xC4, (byte) 0x04,
(byte) 0xCC, (byte) 0x0C, (byte) 0x0D, (byte) 0xCD, (byte) 0x0F, (byte) 0xCF, (byte) 0xCE, (byte) 0x0E, (byte) 0x0A, (byte) 0xCA, (byte) 0xCB, (byte) 0x0B, (byte) 0xC9, (byte) 0x09, (byte) 0x08, (byte) 0xC8,
(byte) 0xD8, (byte) 0x18, (byte) 0x19, (byte) 0xD9, (byte) 0x1B, (byte) 0xDB, (byte) 0xDA, (byte) 0x1A, (byte) 0x1E, (byte) 0xDE, (byte) 0xDF, (byte) 0x1F, (byte) 0xDD, (byte) 0x1D, (byte) 0x1C, (byte) 0xDC,
(byte) 0x14, (byte) 0xD4, (byte) 0xD5, (byte) 0x15, (byte) 0xD7, (byte) 0x17, (byte) 0x16, (byte) 0xD6, (byte) 0xD2, (byte) 0x12, (byte) 0x13, (byte) 0xD3, (byte) 0x11, (byte) 0xD1, (byte) 0xD0, (byte) 0x10,
(byte) 0xF0, (byte) 0x30, (byte) 0x31, (byte) 0xF1, (byte) 0x33, (byte) 0xF3, (byte) 0xF2, (byte) 0x32, (byte) 0x36, (byte) 0xF6, (byte) 0xF7, (byte) 0x37, (byte) 0xF5, (byte) 0x35, (byte) 0x34, (byte) 0xF4,
(byte) 0x3C, (byte) 0xFC, (byte) 0xFD, (byte) 0x3D, (byte) 0xFF, (byte) 0x3F, (byte) 0x3E, (byte) 0xFE, (byte) 0xFA, (byte) 0x3A, (byte) 0x3B, (byte) 0xFB, (byte) 0x39, (byte) 0xF9, (byte) 0xF8, (byte) 0x38,
(byte) 0x28, (byte) 0xE8, (byte) 0xE9, (byte) 0x29, (byte) 0xEB, (byte) 0x2B, (byte) 0x2A, (byte) 0xEA, (byte) 0xEE, (byte) 0x2E, (byte) 0x2F, (byte) 0xEF, (byte) 0x2D, (byte) 0xED, (byte) 0xEC, (byte) 0x2C,
(byte) 0xE4, (byte) 0x24, (byte) 0x25, (byte) 0xE5, (byte) 0x27, (byte) 0xE7, (byte) 0xE6, (byte) 0x26, (byte) 0x22, (byte) 0xE2, (byte) 0xE3, (byte) 0x23, (byte) 0xE1, (byte) 0x21, (byte) 0x20, (byte) 0xE0,
(byte) 0xA0, (byte) 0x60, (byte) 0x61, (byte) 0xA1, (byte) 0x63, (byte) 0xA3, (byte) 0xA2, (byte) 0x62, (byte) 0x66, (byte) 0xA6, (byte) 0xA7, (byte) 0x67, (byte) 0xA5, (byte) 0x65, (byte) 0x64, (byte) 0xA4,
(byte) 0x6C, (byte) 0xAC, (byte) 0xAD, (byte) 0x6D, (byte) 0xAF, (byte) 0x6F, (byte) 0x6E, (byte) 0xAE, (byte) 0xAA, (byte) 0x6A, (byte) 0x6B, (byte) 0xAB, (byte) 0x69, (byte) 0xA9, (byte) 0xA8, (byte) 0x68,
(byte) 0x78, (byte) 0xB8, (byte) 0xB9, (byte) 0x79, (byte) 0xBB, (byte) 0x7B, (byte) 0x7A, (byte) 0xBA, (byte) 0xBE, (byte) 0x7E, (byte) 0x7F, (byte) 0xBF, (byte) 0x7D, (byte) 0xBD, (byte) 0xBC, (byte) 0x7C,
(byte) 0xB4, (byte) 0x74, (byte) 0x75, (byte) 0xB5, (byte) 0x77, (byte) 0xB7, (byte) 0xB6, (byte) 0x76, (byte) 0x72, (byte) 0xB2, (byte) 0xB3, (byte) 0x73, (byte) 0xB1, (byte) 0x71, (byte) 0x70, (byte) 0xB0,
(byte) 0x50, (byte) 0x90, (byte) 0x91, (byte) 0x51, (byte) 0x93, (byte) 0x53, (byte) 0x52, (byte) 0x92, (byte) 0x96, (byte) 0x56, (byte) 0x57, (byte) 0x97, (byte) 0x55, (byte) 0x95, (byte) 0x94, (byte) 0x54,
(byte) 0x9C, (byte) 0x5C, (byte) 0x5D, (byte) 0x9D, (byte) 0x5F, (byte) 0x9F, (byte) 0x9E, (byte) 0x5E, (byte) 0x5A, (byte) 0x9A, (byte) 0x9B, (byte) 0x5B, (byte) 0x99, (byte) 0x59, (byte) 0x58, (byte) 0x98,
(byte) 0x88, (byte) 0x48, (byte) 0x49, (byte) 0x89, (byte) 0x4B, (byte) 0x8B, (byte) 0x8A, (byte) 0x4A, (byte) 0x4E, (byte) 0x8E, (byte) 0x8F, (byte) 0x4F, (byte) 0x8D, (byte) 0x4D, (byte) 0x4C, (byte) 0x8C,
(byte) 0x44, (byte) 0x84, (byte) 0x85, (byte) 0x45, (byte) 0x87, (byte) 0x47, (byte) 0x46, (byte) 0x86, (byte) 0x82, (byte) 0x42, (byte) 0x43, (byte) 0x83, (byte) 0x41, (byte) 0x81, (byte) 0x80, (byte) 0x40
};
}

View File

@ -0,0 +1,13 @@
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:util="http://www.springframework.org/schema/util"
xmlns="http://www.springframework.org/schema/beans"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd">
<util:map id="serviceLogics">
<entry key="01" value-ref="RegisterLogic"/>
</util:map>
</beans>