Socket client = null;
PrintWriter printWriter = null;
try {
// 向服务器端发送请求,服务器IP地址和服务器监听的端口号
client = new Socket(ip, 8008);
// 通过printWriter 来向服务器发送消息
printWriter = new PrintWriter(
new OutputStreamWriter(client.getOutputStream(), "GB2312"), false);
// 查询余额(请求xml)
String requestXml = "xhj0004#"+acctNo+"#@@@@";
if (logger.isInfoEnabled()) {
logger.info("请求报文:" + requestXml);
}
printWriter.println(requestXml);
printWriter.flush();
// 解析服务器返回的报文
ByteArrayOutputStream outStream = new ByteArrayOutputStream();
byte[] data = new byte[1024];
int count = -1;
while ((count = client.getInputStream().read(data, 0, 1024)) != -1)
outStream.write(data, 0, count);
data = null;
String returnXml = new String(outStream.toByteArray(), "GB2312");
if (logger.isInfoEnabled()) {
logger.info("华银企直联查询余额,响应报文:" + returnXml);
}
if (StringUtils.isBlank(returnXml)) {
logger.error("银企直联查询余额请求前置机通讯失败!返回报文为空");
return super.builFalidQueryResponse(req, "银企直联查询余额请求前置机通讯失败,返回报文为空",
ReturnCode.FAILED, ReturnCode.FAILED, StringUtil.EMPTY_STRING);
}
if(!returnXml.startsWith("000000") || !returnXml.contains("#")){
logger.error("银企直联查询余额返回报文异常");
return super.builFalidQueryResponse(req, "银企直联查询余额返回报文异常", ReturnCode.FAILED,
ReturnCode.FAILED, "银企直联查询余额返回报文异常");
}
String returnData[] = returnXml.split("#");
if(returnData.length < 6){
logger.error("银企直联查询余额返回报文异常");
return super.builFalidQueryResponse(req, "银企直联查询余额返回报文异常", ReturnCode.FAILED,
ReturnCode.FAILED, "银企直联查询余额返回报文异常");
}
String respCode = returnData[0];
String blanceAmt = returnData[3];
// 解析数据
if (blanceAmt != null && StringUtils.isNotBlank(blanceAmt)) {
if (logger.isInfoEnabled()) {
logger.info("银企直联查询余额成功,余额:"+blanceAmt+"元");
}
//余额不足告警log
if (Double.parseDouble(blanceAmt) < Double.parseDouble(balabceAmt)) {
logger.error("银企直联余额查询不足告警:余额" + blanceAmt + ",小于告警金额"
+ balabceAmt + "元");
}
if (blanceAmt == "0.00") {
logger.error("银企直联余额查询返回余额不足,余额为0.00");
return builFalidQueryResponse(req, "银企直联余额查询返回余额不足", ReturnCode.FAILED,
ReturnCode.FAILED, "银企直联余额查询返回余额不足");
}
return super.buildQueryResult(req.getInstOrderNo(), blanceAmt,
"0000", "查询成功");
}
if (logger.isInfoEnabled()) {
logger.info("银企直联查询余额失败");
}
return builFalidQueryResponse(req, "银企直联余额查询失败" + "查询失败", ReturnCode.FAILED, respCode,
"查询失败");
} catch (Exception e) {
logger.error("银企直联余额查询异常:" + e);
return builFalidQueryResponse(req, "银企直联余额查询异常", ReturnCode.FAILED, ReturnCode.FAILED,
StringUtil.EMPTY_STRING);
} finally {
try {
close(printWriter, client);
} catch (IOException e) {
logger.error("银企直联余额查询关闭IO异常", e);
}
}
}
/**
* 关闭资源
*
* @param printWriter
* @param client
* @throws IOException
*/
private static void close(PrintWriter printWriter, Socket client) throws IOException {
IOUtils.closeQuietly(printWriter);
client.close();
}