From e87fdce9f9f4a157fd875d7e20067b66bf443ab3 Mon Sep 17 00:00:00 2001 From: Elliott <2423414394@qq.com> Date: Mon, 29 Dec 2025 15:21:09 +0800 Subject: [PATCH] =?UTF-8?q?update:=E5=BB=BA=E8=A1=8C=E9=BE=99=E6=94=AF?= =?UTF-8?q?=E4=BB=98=E8=B4=A6=E5=8D=95=E8=8E=B7=E5=8F=96=E5=8A=A8=E6=80=81?= =?UTF-8?q?=E6=8F=90=E5=8F=96=E7=AC=AC=E4=B8=80=E8=A1=8C=E6=95=B0=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../jobMethod/BankGetDataMethodByJHLZF.java | 58 +++++++++++++------ src/main/resources/mapper/HisDetailMapper.xml | 2 +- 2 files changed, 41 insertions(+), 19 deletions(-) diff --git a/src/main/java/com/saye/hospitalgd/scheduler/jobMethod/BankGetDataMethodByJHLZF.java b/src/main/java/com/saye/hospitalgd/scheduler/jobMethod/BankGetDataMethodByJHLZF.java index e2fda3f..a1fbec7 100644 --- a/src/main/java/com/saye/hospitalgd/scheduler/jobMethod/BankGetDataMethodByJHLZF.java +++ b/src/main/java/com/saye/hospitalgd/scheduler/jobMethod/BankGetDataMethodByJHLZF.java @@ -1,7 +1,6 @@ package com.saye.hospitalgd.scheduler.jobMethod; import cn.hutool.core.io.FileUtil; -import cn.hutool.core.util.StrUtil; import com.saye.hospitalgd.commons.date.DateDUtil; import com.saye.hospitalgd.commons.getBean.GetBeanUtil; import com.saye.hospitalgd.commons.log.LogUtil; @@ -24,14 +23,13 @@ import org.apache.http.entity.StringEntity; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClients; import org.apache.http.util.EntityUtils; +import org.apache.poi.ss.usermodel.*; +import org.apache.poi.xssf.usermodel.XSSFWorkbook; import org.dom4j.Document; import org.dom4j.DocumentHelper; import org.dom4j.Element; import org.springframework.util.CollectionUtils; -import org.apache.poi.ss.usermodel.*; -import org.apache.poi.xssf.usermodel.XSSFWorkbook; - import java.io.*; import java.net.URI; import java.nio.charset.Charset; @@ -512,25 +510,53 @@ public class BankGetDataMethodByJHLZF { log.info("继续执行程序3"); List bankbillHistoryList = new ArrayList<>(); - // 跳过前24行(Excel的前24行是标题和说明,第24行是表头,从第25行开始是数据) - for (int i = 24; i < txtList.size(); i++) { + int startIndex = -1; + for (int i = 0; i < txtList.size(); i++) { + String line = txtList.get(i); + if (line == null || line.trim().isEmpty()) { + continue; + } + String[] cols = line.split("\t"); + if (cols.length < 10) { + continue; + } + dateStr = cols.length > 13 ? cols[13].trim() : ""; + if (dateStr == null || dateStr.isEmpty() || !dateStr.contains("-")) { + continue; + } + String firstAmountStr = cols.length > 20 ? cols[20].trim() : ""; + if (firstAmountStr.isEmpty() || firstAmountStr.equals("null") || firstAmountStr.equals("0") || firstAmountStr.equals("0.00")) { + continue; + } try { - String d = txtList.get(i); + double firstAmount = Double.parseDouble(firstAmountStr); + if (Math.abs(firstAmount) < 0.01) { + continue; + } + } catch (NumberFormatException e) { + continue; + } + startIndex = i; + break; + } + if (startIndex == -1) { + startIndex = 24; + } + for (int i = startIndex; i < txtList.size(); i++) { + try { + String d = txtList.get(i); - // 跳过空行 if (d == null || d.trim().isEmpty()) { continue; } - String[] s1 = d.split("\t"); + String[] s1 = d.split("\t"); - // 跳过列数不足的行(至少需要10列才能有交易金额) if (s1.length < 10) { log.debug("第 " + (i + 1) + " 行列数不足,跳过"); - continue; - } + continue; + } - // 检查是否是汇总行(包含"小计"、"合计"、"终端小计"等关键字) String rowText = d.toLowerCase(); if (rowText.contains("小计") || rowText.contains("合计") || rowText.contains("终端小计") || rowText.contains("pos编号") || @@ -540,7 +566,6 @@ public class BankGetDataMethodByJHLZF { continue; } - // 检查第13列(交易日期,Excel的N列)是否为空 if (s1.length <= 13 || s1[13] == null || s1[13].trim().isEmpty()) { log.debug("第 " + (i + 1) + " 行交易日期为空,跳过"); continue; @@ -548,20 +573,17 @@ public class BankGetDataMethodByJHLZF { String jyrq = s1[13].trim(); - // 检查第13列是否包含日期(简单检查是否包含"-") if (!jyrq.contains("-")) { log.debug("第 " + (i + 1) + " 行交易日期不包含日期分隔符,跳过"); continue; } - // 检查交易金额列(第20列,对应Excel的U列)是否有效 String amountStr = s1.length > 20 ? s1[20].trim() : ""; if (amountStr.isEmpty() || amountStr.equals("null") || amountStr.equals("0") || amountStr.equals("0.00")) { log.debug("第 " + (i + 1) + " 行交易金额无效: [" + amountStr + "],跳过"); continue; } - // 尝试解析金额,确保是有效数字 try { double amount = Double.parseDouble(amountStr); if (Math.abs(amount) < 0.01) { @@ -575,7 +597,7 @@ public class BankGetDataMethodByJHLZF { log.info("正在处理第 " + (i + 1) + " 行数据"); - BankbillHistory bankbillHistory = new BankbillHistory(); + BankbillHistory bankbillHistory = new BankbillHistory(); // 根据实际Excel列位置映射(从日志分析得出): // 终端号: C列(索引2), 发卡行: E列(索引4), 卡种: I列(索引8), diff --git a/src/main/resources/mapper/HisDetailMapper.xml b/src/main/resources/mapper/HisDetailMapper.xml index 85e007a..59193fe 100644 --- a/src/main/resources/mapper/HisDetailMapper.xml +++ b/src/main/resources/mapper/HisDetailMapper.xml @@ -279,7 +279,7 @@