该 Java 方法解析支付宝V2.0的 CSV 对账文件并生成惠付对账文件,处理商户与支付宝之间的支付交易对账。

方法接收三个参数:

  1. 要解析的 CSV 文件路径
  2. 用于写入生成的对账文件的 BufferedWriter 对象
  3. 包含对账过程附加信息的 context 对象

方法首先使用 CSVReader 对象读取 CSV 文件,逐行读取。它跳过 CSV 文件的前五行,因为它们与对账过程无关。CSV 文件的每一行都代表商户与支付宝之间的一次支付交易,方法创建一个 ReconciliationChannelSerial 对象来存储每次交易的相关信息。

然后,方法使用 BufferedWriter 对象将每次交易的信息写入对账文件。它调用 ReconciliationUtils 类中的 setReconciliationChannelSerialLine() 方法将交易信息格式化为可以写入文件的一行文本。

最后,方法关闭 CSVReader 和 BufferedWriter 对象。它使用 log.info() 方法记录对账文件生成过程的开始和结束。

protected void parseChannelFile(String path, BufferedWriter bw, BaseReconciliationTransContext context) throws Exception {
    log.info('EGS->支付宝V2.0->对账任务->生成惠付对账文件->开始');
    // 支付宝对账文件从 第五行开始 第五行中文描述 第六行开始是参数
    CSVReader csvReader = null;
    // 创建文件读取流
    try {
        csvReader = new CSVReader(new InputStreamReader(new FileInputStream(path), ConCommConstant.ENCODING_GBK));
        String[] row ;
        int lineCount = 0;
        while ((row = csvReader.readNext()) != null) {
            // 对账文件从第六行开始
            lineCount++;
            if (lineCount <= 5){
                continue;
            }
            if (row.length <= 22){
                log.error('对账文件内容长度不在有效范围内');
                // throw new SanxiaPayBizException(EnumPortalRespMsg.ERROR.getCode(), '');
                continue;
            }
            ReconciliationChannelSerial recChannelSerial = new ReconciliationChannelSerial();
            if (row[0].startsWith(START_STR)){
                if (lineCount == 6){
                    // 第六行如果也是#开始 则是对账文件没有数据
                    recChannelSerial.setChannelSerial('0');// 商户订单号
                    recChannelSerial.setChannelInnerSerial('0');// 支付宝交易号
                    recChannelSerial.setBusiAmount(new BigDecimal('0'));// 订单金额
                    recChannelSerial.setBusiFee(new BigDecimal('0'));// 服务费
                    recChannelSerial.setBusiStatus(EnumOrderStatus.SUCCESS.getCode()); // 只有成功状态

                    bw.write(ReconciliationUtils.setReconciliationChannelSerialLine(recChannelSerial));
                    bw.newLine();
                }
            }else {
                recChannelSerial.setChannelSerial(row[1]);// 商户订单号
                recChannelSerial.setChannelInnerSerial(row[0]);// 支付宝交易号
                recChannelSerial.setBusiAmount(new BigDecimal(row[11]));// 订单金额
                recChannelSerial.setBusiFee(new BigDecimal(row[22]));// 服务费
                recChannelSerial.setBusiStatus(EnumOrderStatus.SUCCESS.getCode()); // 只有成功状态

                bw.write(ReconciliationUtils.setReconciliationChannelSerialLine(recChannelSerial));
                bw.newLine();
            }
        }
        log.info('EGS->支付宝V2.0->对账任务->生成惠付对账文件->完成');
    } finally {
        try {
            if (csvReader != null) {
                csvReader.close();
            }
        } catch (IOException e) {
            log.error('缓冲流关闭失败,', e);
        }
        try {
            if (bw != null) {
                bw.close();
            }
        } catch (IOException e) {
            log.error('缓冲流关闭失败,', e);
        }
    }
}
支付宝V2.0对账文件解析与生成惠付对账文件

原文地址: https://www.cveoy.top/t/topic/oTzy 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录