From c0171e6c0369db2bbe769e26647c636bcae6f436 Mon Sep 17 00:00:00 2001 From: cwchen <1048842385@qq.com> Date: Mon, 17 Mar 2025 14:08:47 +0800 Subject: [PATCH] =?UTF-8?q?=E5=BC=82=E5=B8=B8=E9=A1=B9=E6=B7=BB=E5=8A=A0?= =?UTF-8?q?=E4=BA=BA=E5=91=98=E9=87=8D=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/com/ytlk/ocr/OCRSwingArea.java | 10 +++-- .../com/ytlk/ocr/table/ErrorTableModel.java | 2 +- .../com/ytlk/ocr/table/HandleDataUtil.java | 3 ++ .../com/ytlk/ocr/util/CompareDataUtil.java | 41 +++++++++++++++++++ .../java/com/ytlk/ocr/vo/UserErrorVo.java | 13 ++++++ 5 files changed, 64 insertions(+), 5 deletions(-) diff --git a/src/main/java/com/ytlk/ocr/OCRSwingArea.java b/src/main/java/com/ytlk/ocr/OCRSwingArea.java index b94a6ce..cd3013e 100644 --- a/src/main/java/com/ytlk/ocr/OCRSwingArea.java +++ b/src/main/java/com/ytlk/ocr/OCRSwingArea.java @@ -369,7 +369,7 @@ public class OCRSwingArea extends JFrame { gbc.fill = GridBagConstraints.HORIZONTAL; // 水平填充 gbc.weightx = 1; // 水平权重 parentContentPanel.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10)); // 设置内边距 - String[] columnNames = {"姓名", "Excel表格实发工资", "PDF实发工资"}; + String[] columnNames = {"姓名", "Excel表格实发工资", "PDF实发工资","异常项"}; for (int i = 0; i < errorDataList.size(); i++) { Map map = errorDataList.get(i); JPanel childContentPanel = new JPanel(); @@ -393,11 +393,13 @@ public class OCRSwingArea extends JFrame { errorTable.setAutoResizeMode(JTable.AUTO_RESIZE_OFF); errorTable.setRowHeight(25); // 设置行高 TableColumn cellColumn = errorTable.getColumn("姓名"); - cellColumn.setPreferredWidth(200); + cellColumn.setPreferredWidth(100); TableColumn cellColumn2 = errorTable.getColumn("Excel表格实发工资"); - cellColumn2.setPreferredWidth(200); + cellColumn2.setPreferredWidth(150); TableColumn cellColumn3 = errorTable.getColumn("PDF实发工资"); - cellColumn3.setPreferredWidth(200); + cellColumn3.setPreferredWidth(150); + TableColumn cellColumn4 = errorTable.getColumn("异常项"); + cellColumn4.setPreferredWidth(200); JScrollPane jScrollPane = new JScrollPane(errorTable, ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED, ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER); JPanel panel2 = new JPanel(); panel2.setLayout(new BoxLayout(panel2, BoxLayout.Y_AXIS)); // 垂直排列 diff --git a/src/main/java/com/ytlk/ocr/table/ErrorTableModel.java b/src/main/java/com/ytlk/ocr/table/ErrorTableModel.java index 6761805..5c9c35a 100644 --- a/src/main/java/com/ytlk/ocr/table/ErrorTableModel.java +++ b/src/main/java/com/ytlk/ocr/table/ErrorTableModel.java @@ -22,7 +22,7 @@ public class ErrorTableModel extends DefaultTableModel{ private void loadData() { for (UserErrorVo userErrorVo : data) { - Object[] row = {userErrorVo.getName(), userErrorVo.getWage(), userErrorVo.getPdfWage()}; + Object[] row = {userErrorVo.getName(), userErrorVo.getWage(), userErrorVo.getPdfWage(),userErrorVo.getErrorData()}; addRow(row); // 添加行数据 } } diff --git a/src/main/java/com/ytlk/ocr/table/HandleDataUtil.java b/src/main/java/com/ytlk/ocr/table/HandleDataUtil.java index b311fad..3edffb8 100644 --- a/src/main/java/com/ytlk/ocr/table/HandleDataUtil.java +++ b/src/main/java/com/ytlk/ocr/table/HandleDataUtil.java @@ -115,10 +115,13 @@ public class HandleDataUtil { List userErrorVos2 = CompareDataUtil.compareData2(excelList, pdfList); // 5.比较pdf和excel中人员的实发工资不一致的数据 List userErrorVos3 = CompareDataUtil.compareData3(excelList, pdfList); + // 6.人员重复 + List userErrorVos4 = CompareDataUtil.compareData4(excelList, pdfList); // 合并数据 dataList.addAll(userErrorVos); dataList.addAll(userErrorVos2); dataList.addAll(userErrorVos3); + dataList.addAll(userErrorVos4); dataMap.put("fileName", fileName.substring(0, fileName.lastIndexOf("."))); dataMap.put("errorList", dataList); return dataMap; diff --git a/src/main/java/com/ytlk/ocr/util/CompareDataUtil.java b/src/main/java/com/ytlk/ocr/util/CompareDataUtil.java index 303373a..f4ebc34 100644 --- a/src/main/java/com/ytlk/ocr/util/CompareDataUtil.java +++ b/src/main/java/com/ytlk/ocr/util/CompareDataUtil.java @@ -34,6 +34,7 @@ public class CompareDataUtil { for (UserVo userVo : difference) { UserErrorVo userErrorVo = new UserErrorVo(); BeanUtil.copyProperties(userVo, userErrorVo); + userErrorVo.setErrorData("pdf中人员不存在"); dataList.add(userErrorVo); } return dataList; @@ -57,6 +58,7 @@ public class CompareDataUtil { for (UserVo userVo : difference) { UserErrorVo userErrorVo = new UserErrorVo(); userErrorVo.setName(userVo.getName()); + userErrorVo.setErrorData("excel中人员不存在"); userErrorVo.setPdfWage(userVo.getWage()); dataList.add(userErrorVo); } @@ -77,6 +79,23 @@ public class CompareDataUtil { return dataList; } + /** + * pdf和excel中姓名重复数据 + * @param excelList + * @param pdfList + * @return List + * @author cwchen + * @date 2025/3/17 13:50 + */ + public static List compareData4(List excelList, List pdfList) { + List dataList = new ArrayList<>(); + List excelAlikeList = findAlikeData(excelList,1); + List pdfAlikeList = findAlikeData(excelList,2); + dataList.addAll(excelAlikeList); + dataList.addAll(pdfAlikeList); + return dataList; + } + public static List findDifferentSalaries(List listA, List listB) { List result = new ArrayList<>(); // 将集合 B 转换为 Map,key 为姓名,value 为 Employee 对象 @@ -92,9 +111,31 @@ public class CompareDataUtil { userErrorVo.setName(empA.getName()); userErrorVo.setWage(empA.getWage()); userErrorVo.setPdfWage(empB.getWage()); + userErrorVo.setErrorData("实发工资不一致"); result.add(userErrorVo); } } return result; } + + public static List findAlikeData(List list,int type) { + List result = new ArrayList<>(); + // 使用Stream API查找重复的姓名 + Map> nameGroups = list.stream() + .collect(Collectors.groupingBy(UserVo::getName)); + + // 过滤出重复的姓名,并只保留一条记录 + List duplicatePeople = nameGroups.entrySet().stream() + .filter(entry -> entry.getValue().size() > 1) // 过滤出重复的姓名 + .map(entry -> entry.getValue().get(0)) // 只取第一条记录 + .collect(Collectors.toList()); + // 遍历集合 + for (UserVo userVo : duplicatePeople) { + UserErrorVo userErrorVo = new UserErrorVo(); + userErrorVo.setName(userVo.getName()); + userErrorVo.setErrorData(type == 1 ? "excel中姓名重复" : "pdf中姓名重复"); + result.add(userErrorVo); + } + return result; + } } diff --git a/src/main/java/com/ytlk/ocr/vo/UserErrorVo.java b/src/main/java/com/ytlk/ocr/vo/UserErrorVo.java index 5a29565..ccd9327 100644 --- a/src/main/java/com/ytlk/ocr/vo/UserErrorVo.java +++ b/src/main/java/com/ytlk/ocr/vo/UserErrorVo.java @@ -15,6 +15,10 @@ public class UserErrorVo { private Double wage; /**pdf-实发工资*/ private Double pdfWage; + + /**异常项*/ + private String errorData; + public UserErrorVo() { } @@ -42,12 +46,21 @@ public class UserErrorVo { this.pdfWage = pdfWage; } + public String getErrorData() { + return errorData; + } + + public void setErrorData(String errorData) { + this.errorData = errorData; + } + @Override public String toString() { return "UserErrorVo{" + "name='" + name + '\'' + ", wage=" + wage + ", pdfWage=" + pdfWage + + ", errorData='" + errorData + '\'' + '}'; } }