socket请求银行

来源:互联网 发布:sql server 月份差 编辑:程序博客网 时间:2024/06/05 18:29

        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();

    }

0 0
原创粉丝点击