250 lines
9.0 KiB
Plaintext
250 lines
9.0 KiB
Plaintext
|
package com.surfbird.util.convert;
|
|||
|
|
|||
|
import java.io.IOException;
|
|||
|
import java.io.OutputStream;
|
|||
|
import java.text.DecimalFormat;
|
|||
|
import java.text.SimpleDateFormat;
|
|||
|
import java.util.Date;
|
|||
|
|
|||
|
import org.apache.commons.lang.StringUtils;
|
|||
|
|
|||
|
import com.surfbird.business.bean.HeatAnalyze;
|
|||
|
import com.surfbird.business.bean.Instrucation;
|
|||
|
import com.surfbird.common.util.JdbcInstance;
|
|||
|
import com.surfbird.socket.server.bean.Client;
|
|||
|
import com.surfbird.util.CRC16Util;
|
|||
|
import com.surfbird.util.Global;
|
|||
|
|
|||
|
public class DataHandle {
|
|||
|
|
|||
|
/**
|
|||
|
* <20>ַ<EFBFBD><D6B7><EFBFBD>ת<EFBFBD><D7AA>Ϊ16<31><36><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD> .
|
|||
|
* @param str
|
|||
|
* @return
|
|||
|
**/
|
|||
|
public static byte[] toStringByte(String str) {
|
|||
|
int m = 0, n = 0;
|
|||
|
int byteLength = str.length() / 2; // ÿ<><C3BF><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD>ֽ<EFBFBD>
|
|||
|
byte[] byteArray = new byte[byteLength];
|
|||
|
for (int i = 0; i < byteLength; i++) {
|
|||
|
m = i * 2 + 1;
|
|||
|
n = m + 1;
|
|||
|
int intVal = Integer.decode("0x" + str.substring(i * 2, m) + str.substring(m, n));
|
|||
|
byteArray[i] = Byte.valueOf((byte) intVal);
|
|||
|
}
|
|||
|
return byteArray;
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* 16<31><36><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>.
|
|||
|
* @param byteArray
|
|||
|
* @param size
|
|||
|
* @return
|
|||
|
**/
|
|||
|
public static String toHexString(byte[] byteArray, int size) {
|
|||
|
StringBuilder hexString = new StringBuilder();
|
|||
|
for (int i = 0; i < size; i++) {
|
|||
|
if ((byteArray[i] & 0xff) < 0x10) {// 0~Fǰ<46>治<EFBFBD><E6B2BB>
|
|||
|
hexString.append("0");
|
|||
|
}
|
|||
|
hexString.append(Integer.toHexString(0xFF & byteArray[i]));
|
|||
|
}
|
|||
|
return hexString.toString().toLowerCase();
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* <20><><EFBFBD><EFBFBD>RTU<54>ش<EFBFBD><D8B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ.
|
|||
|
* @param writer:ͨ<><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
|||
|
* @param receive:<3A><><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
|||
|
* @param analysis:<3A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
|||
|
* @param size:<3A><><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>.
|
|||
|
**/
|
|||
|
public static void toParseData(OutputStream writer, Client client, String receive, String analysis, int size) {
|
|||
|
StringBuffer buffer = new StringBuffer();
|
|||
|
if(size == 1) {//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
|||
|
DataHandle.toHandleHeartbeat(writer, receive);
|
|||
|
} else if(size == 26) {//ע<><D7A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
|||
|
DataHandle.toHandleRegister(client, receive);
|
|||
|
buffer.append("<22><><EFBFBD><EFBFBD>Э<EFBFBD>飺<EFBFBD><E9A3BA><EFBFBD>ӵ<EFBFBD>ַ<EFBFBD><D6B7>").append(client.getAddress());
|
|||
|
buffer.append("<22><><EFBFBD><EFBFBD><EFBFBD>Ӷ˿ڣ<CBBF>").append(client.getPort());
|
|||
|
buffer.append("<22><><EFBFBD>豸<EFBFBD><E8B1B8><EFBFBD>룺").append(client.getCode());
|
|||
|
buffer.append("<22><><EFBFBD>豸<EFBFBD><E8B1B8><EFBFBD>ţ<EFBFBD>").append(client.getMobile());
|
|||
|
buffer.append("<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD>").append(receive).append(".");
|
|||
|
DataHandle.toInstrucation(buffer.toString(), "<22><><EFBFBD>ݲɼ<DDB2>-<2D><><EFBFBD>ݽ<EFBFBD><DDBD><EFBFBD>");
|
|||
|
} else if(size == 31) {//<2F><><EFBFBD>ݰ<EFBFBD><DDB0><EFBFBD><EFBFBD><EFBFBD>.
|
|||
|
DataHandle.toHandleData4212(client, analysis);
|
|||
|
buffer.append("<22><><EFBFBD>ݲɼ<DDB2><C9BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӵ<EFBFBD>ַ<EFBFBD><D6B7>").append(client.getAddress());
|
|||
|
buffer.append("<22><><EFBFBD><EFBFBD><EFBFBD>Ӷ˿ڣ<CBBF>").append(client.getPort());
|
|||
|
buffer.append("<22><><EFBFBD>豸<EFBFBD><E8B1B8><EFBFBD>룺").append(client.getCode());
|
|||
|
buffer.append("<22><><EFBFBD>豸<EFBFBD><E8B1B8><EFBFBD>ţ<EFBFBD>").append(client.getMobile());
|
|||
|
buffer.append("<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD>").append(analysis).append(".");
|
|||
|
DataHandle.toInstrucation(buffer.toString(), "<22><><EFBFBD>ݲɼ<DDB2>-<2D><><EFBFBD>ݽ<EFBFBD><DDBD><EFBFBD>");
|
|||
|
} else if(size == 73) {
|
|||
|
DataHandle.toHandleData4202(client, analysis);
|
|||
|
buffer.append("<22><><EFBFBD>ݲɼ<DDB2><C9BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӵ<EFBFBD>ַ<EFBFBD><D6B7>").append(client.getAddress());
|
|||
|
buffer.append("<22><><EFBFBD><EFBFBD><EFBFBD>Ӷ˿ڣ<CBBF>").append(client.getPort());
|
|||
|
buffer.append("<22><><EFBFBD>豸<EFBFBD><E8B1B8><EFBFBD>룺").append(client.getCode());
|
|||
|
buffer.append("<22><><EFBFBD>豸<EFBFBD><E8B1B8><EFBFBD>ţ<EFBFBD>").append(client.getMobile());
|
|||
|
buffer.append("<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD>").append(analysis).append(".");
|
|||
|
DataHandle.toInstrucation(buffer.toString(), "<22><><EFBFBD>ݲɼ<DDB2>-<2D><><EFBFBD>ݽ<EFBFBD><DDBD><EFBFBD>");
|
|||
|
} else {//<2F>쳣<EFBFBD><ECB3A3><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD>.
|
|||
|
buffer.append("<22>쳣<EFBFBD><ECB3A3><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD><EFBFBD>ӵ<EFBFBD>ַ<EFBFBD><D6B7>").append(client.getAddress());
|
|||
|
buffer.append("<22><><EFBFBD><EFBFBD><EFBFBD>Ӷ˿ڣ<CBBF>").append(client.getPort());
|
|||
|
buffer.append("<22><><EFBFBD>豸<EFBFBD><E8B1B8><EFBFBD>룺").append(StringUtils.isBlank(client.getCode()) ? "<22><>" : client.getCode());
|
|||
|
buffer.append("<22><><EFBFBD>豸<EFBFBD><E8B1B8><EFBFBD>ţ<EFBFBD>").append(StringUtils.isBlank(client.getMobile()) ? "<22><>" : client.getMobile());
|
|||
|
buffer.append("<22><><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3>ȣ<EFBFBD>").append(size);
|
|||
|
buffer.append("<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD>").append(analysis);
|
|||
|
buffer.append("<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD>").append(receive).append(".");
|
|||
|
DataHandle.toInstrucation(buffer.toString(), "<22><><EFBFBD>ݲɼ<DDB2>-<2D><><EFBFBD>ݽ<EFBFBD><DDBD><EFBFBD>");
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* <20><><EFBFBD><EFBFBD><EFBFBD>豸<EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
|||
|
* @param writer:ͨ<><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
|||
|
* @param data:<3A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
|||
|
**/
|
|||
|
private static void toHandleHeartbeat(OutputStream writer, String data) {
|
|||
|
try {
|
|||
|
if(StringUtils.isNotBlank(data) && data.equals("$"))
|
|||
|
writer.write("%".getBytes());
|
|||
|
} catch (IOException e) {
|
|||
|
e.printStackTrace();
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* <20><><EFBFBD><EFBFBD><EFBFBD>豸ע<E8B1B8><D7A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
|||
|
* @param client:ͨ<>ſͻ<C5BF><CDBB>˶<EFBFBD><CBB6><EFBFBD>.
|
|||
|
* @param data:<3A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
|||
|
**/
|
|||
|
private static void toHandleRegister(Client client, String data) {
|
|||
|
if(StringUtils.isNotBlank(data) && data.toUpperCase().startsWith("XMYN")) {
|
|||
|
String info = data.toUpperCase();
|
|||
|
info = info.replace("\r", "").replace("\n", "").replace("XMYN", "");
|
|||
|
client.setCode(info.substring(0, 9));
|
|||
|
client.setMobile(info.substring(9, info.length()));
|
|||
|
//<2F><>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̬RTUָ<55>Ϊ<EEA3AC><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>IJ<EFBFBD><C4B2><EFBFBD><EFBFBD>˾<EFBFBD><CBBE>
|
|||
|
//client.setOrder(Integer.parseInt(client.getMobile().substring(0, 1)) == 1 ? Global.XMYN_RTU_4202 : Global.XMYN_RTU_4212);
|
|||
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD>Ż<EFBFBD>RTUָ<55><D6B8>
|
|||
|
if(Integer.parseInt(client.getMobile().substring(0, 1)) == 1) {
|
|||
|
client.setOrder(Global.XMYN_RTU_4202);
|
|||
|
} else if(Integer.parseInt(client.getMobile().substring(0, 1)) == 3) {
|
|||
|
//<2F><>ȡ<EFBFBD>豸<EFBFBD><E8B1B8>ַ<EFBFBD><D6B7>.
|
|||
|
int index = Integer.parseInt(client.getMobile().substring(8, client.getMobile().length()));
|
|||
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ٻ<EFBFBD>ָ<EFBFBD><D6B8>.
|
|||
|
String instruct = CRC16Util.toHexFormat(index).concat(Global.XMYN_RTU_RECALL);
|
|||
|
//<2F><><EFBFBD><EFBFBD>CRC16<31><36><EFBFBD><EFBFBD><EFBFBD>ٻ<EFBFBD>ָ<EFBFBD><D6B8>.
|
|||
|
client.setOrder(instruct.concat(CRC16Util.toModbus(instruct)));
|
|||
|
} else {
|
|||
|
client.setOrder(Global.XMYN_RTU_4212);
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* <20>洢<EFBFBD><E6B4A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ.
|
|||
|
* @param client:<3A>ͻ<EFBFBD><CDBB>˶<EFBFBD><CBB6><EFBFBD>.
|
|||
|
* @param data1:<3A><>һ·ģ<C2B7><C4A3><EFBFBD><EFBFBD>.
|
|||
|
* @param data2:<3A>ڶ<EFBFBD>·ģ<C2B7><C4A3><EFBFBD><EFBFBD>.
|
|||
|
* @param data3:<3A><><EFBFBD><EFBFBD>·ģ<C2B7><C4A3><EFBFBD><EFBFBD>.
|
|||
|
* @param data4:<3A><><EFBFBD><EFBFBD>·ģ<C2B7><C4A3><EFBFBD><EFBFBD>.
|
|||
|
* @param data5:<3A><><EFBFBD><EFBFBD>·ģ<C2B7><C4A3><EFBFBD><EFBFBD>.
|
|||
|
* @param data6:<3A><><EFBFBD><EFBFBD>·ģ<C2B7><C4A3><EFBFBD><EFBFBD>.
|
|||
|
* @param data7:<3A><><EFBFBD><EFBFBD>·ģ<C2B7><C4A3><EFBFBD><EFBFBD>.
|
|||
|
* @param data8:<3A>ڰ<EFBFBD>·ģ<C2B7><C4A3><EFBFBD><EFBFBD>.
|
|||
|
**/
|
|||
|
private static void toHandleData(Client client, String data1, String data2, String data3, String data4, String data5, String data6, String data7, String data8 ) {
|
|||
|
try {
|
|||
|
HeatAnalyze heatAnalyze = new HeatAnalyze();
|
|||
|
heatAnalyze.setCode(client.getCode());
|
|||
|
heatAnalyze.setSim(client.getMobile());
|
|||
|
heatAnalyze.setDatatime(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
|
|||
|
heatAnalyze.setView005(data1);
|
|||
|
heatAnalyze.setView006(data2);
|
|||
|
heatAnalyze.setView007(data3);
|
|||
|
heatAnalyze.setView008(data4);
|
|||
|
heatAnalyze.setView009(data5);
|
|||
|
heatAnalyze.setView010(data6);
|
|||
|
heatAnalyze.setView011(data7);
|
|||
|
heatAnalyze.setView012(data8);
|
|||
|
JdbcInstance.save("com.surfbird.business.dao.HeatAnalyzeDao.save", heatAnalyze);
|
|||
|
} catch (Exception e) {
|
|||
|
e.printStackTrace();
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* <20><><EFBFBD><EFBFBD>RTU<54>ϱ<EFBFBD><CFB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ(<28>Ͽ<EFBFBD>).
|
|||
|
* @param client:ͨ<>ſͻ<C5BF><CDBB>˶<EFBFBD><CBB6><EFBFBD>.
|
|||
|
* @param data:<3A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
|||
|
**/
|
|||
|
private static void toHandleData4202(Client client, String data) {
|
|||
|
try {
|
|||
|
data = data.substring(14, data.length());
|
|||
|
String data1 = data.substring(0, 4);
|
|||
|
String data2 = data.substring(8, 12);
|
|||
|
String data3 = data.substring(16, 20);
|
|||
|
String data4 = data.substring(24, 28);
|
|||
|
String data5 = data.substring(32, 36);
|
|||
|
String data6 = data.substring(40, 44);
|
|||
|
String data7 = data.substring(48, 52);
|
|||
|
String data8 = data.substring(56, 60);
|
|||
|
DecimalFormat format = new DecimalFormat("#####0.##");
|
|||
|
data1 = format.format(Integer.parseInt(data1, 16)/100.0);
|
|||
|
data2 = format.format(Integer.parseInt(data2, 16)/100.0);
|
|||
|
data3 = format.format(Integer.parseInt(data3, 16)/100.0);
|
|||
|
data4 = format.format(Integer.parseInt(data4, 16)/100.0);
|
|||
|
data5 = format.format(Integer.parseInt(data5, 16)/100.0);
|
|||
|
data6 = format.format(Integer.parseInt(data6, 16)/100.0);
|
|||
|
data7 = format.format(Integer.parseInt(data7, 16)/100.0);
|
|||
|
data8 = format.format(Integer.parseInt(data8, 16)/100.0);
|
|||
|
DataHandle.toHandleData(client, data1, data2, data3, data4, data5, data6, data7, data8);
|
|||
|
} catch (Exception e) {
|
|||
|
e.printStackTrace();
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* <20><><EFBFBD><EFBFBD>RTU<54>ϱ<EFBFBD><CFB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ(<28>¿<EFBFBD>).
|
|||
|
* @param client:ͨ<>ſͻ<C5BF><CDBB>˶<EFBFBD><CBB6><EFBFBD>.
|
|||
|
* @param data:<3A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
|||
|
**/
|
|||
|
private static void toHandleData4212(Client client, String data) {
|
|||
|
try {
|
|||
|
data = data.substring(22, data.length());
|
|||
|
String data1 = data.substring(0, 4);
|
|||
|
String data2 = data.substring(4, 8);
|
|||
|
String data3 = data.substring(8, 12);
|
|||
|
String data4 = data.substring(12, 16);
|
|||
|
String data5 = data.substring(16, 20);
|
|||
|
String data6 = data.substring(20, 24);
|
|||
|
String data7 = data.substring(24, 28);
|
|||
|
String data8 = data.substring(28, 32);
|
|||
|
DataHandle.toHandleData(client, DataFormula.toSmallerHundred(data1), DataFormula.toSmallerHundred(data2), DataFormula.toSmallerHundred(data3), DataFormula.toSmallerHundred(data4), DataFormula.toSmallerHundred(data5), DataFormula.toSmallerHundred(data6), DataFormula.toSmallerHundred(data7), DataFormula.toSmallerHundred(data8));
|
|||
|
} catch (Exception e) {
|
|||
|
e.printStackTrace();
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* <20><>¼<EFBFBD><C2BC><EFBFBD>ݲɼ<DDB2><C9BC><EFBFBD>־.
|
|||
|
* @param content:<3A><>־<EFBFBD><D6BE><EFBFBD><EFBFBD>.
|
|||
|
* @param label:<3A><>־˵<D6BE><CBB5>.
|
|||
|
**/
|
|||
|
private static void toInstrucation(String content, String label) {
|
|||
|
try {
|
|||
|
//<2F><>־<EFBFBD><D6BE><EFBFBD><EFBFBD>.
|
|||
|
Instrucation insObject = new Instrucation();
|
|||
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־<EFBFBD><D6BE><EFBFBD><EFBFBD>.
|
|||
|
insObject.setContent(content);
|
|||
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־<EFBFBD><D6BE><EFBFBD><EFBFBD>.
|
|||
|
insObject.setInstrucation(label);
|
|||
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־<EFBFBD><D6BE>Ϣ.
|
|||
|
JdbcInstance.save("com.surfbird.business.dao.InstrucationDao.save", insObject);
|
|||
|
} catch (Exception e) {
|
|||
|
e.printStackTrace();
|
|||
|
}
|
|||
|
}
|
|||
|
}
|