支付宝V2.0对账文件解析与生成惠付对账文件
该 Java 方法解析支付宝V2.0的 CSV 对账文件并生成惠付对账文件,处理商户与支付宝之间的支付交易对账。
方法接收三个参数:
- 要解析的 CSV 文件路径
- 用于写入生成的对账文件的 BufferedWriter 对象
- 包含对账过程附加信息的 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);
}
}
}
原文地址: https://www.cveoy.top/t/topic/oTzy 著作权归作者所有。请勿转载和采集!