From f8c35ba173ef2b825c220bcd136cb2fb0d2c50d2 Mon Sep 17 00:00:00 2001 From: cwchen <1048842385@qq.com> Date: Thu, 27 Feb 2025 18:28:24 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8B=9B=E8=A1=8C=E6=96=B0=E6=A8=A1=E7=89=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../basic/controller/DownloadController.java | 4 + .../utils/ImportNoPhotoExcelHelper.java | 205 +++++++++++++----- src/main/resources/download/zh_model.xlsx | Bin 0 -> 22491 bytes .../static/pages/wages/uploadWages.html | 8 + 4 files changed, 164 insertions(+), 53 deletions(-) create mode 100644 src/main/resources/download/zh_model.xlsx diff --git a/src/main/java/com/bonus/boot/manager/basic/controller/DownloadController.java b/src/main/java/com/bonus/boot/manager/basic/controller/DownloadController.java index 9ee8409..e38d6e4 100644 --- a/src/main/java/com/bonus/boot/manager/basic/controller/DownloadController.java +++ b/src/main/java/com/bonus/boot/manager/basic/controller/DownloadController.java @@ -23,6 +23,7 @@ import java.net.URLConnection; import java.net.URLEncoder; import java.nio.charset.StandardCharsets; import java.util.List; +import java.util.Objects; @Api(tags = "下载") @RestController @@ -53,6 +54,9 @@ public class DownloadController { response.addHeader("Cache-Control", "no-cache, no-store, must-revalidate"); response.addHeader("charset", "utf-8"); response.addHeader("Pragma", "no-cache"); + if(Objects.equals(filename,"zh_model.xlsx")){ // 招行新模版 + filename = "招商银行工资导入模板(新).xlsx"; + } String encodeName = URLEncoder.encode(filename, StandardCharsets.UTF_8.toString()); response.setHeader("Content-Disposition", "attachment; filename=\"" + encodeName + "\"; filename*=utf-8''" + encodeName); diff --git a/src/main/java/com/bonus/boot/manager/manager/utils/ImportNoPhotoExcelHelper.java b/src/main/java/com/bonus/boot/manager/manager/utils/ImportNoPhotoExcelHelper.java index f403ca3..f5947f0 100644 --- a/src/main/java/com/bonus/boot/manager/manager/utils/ImportNoPhotoExcelHelper.java +++ b/src/main/java/com/bonus/boot/manager/manager/utils/ImportNoPhotoExcelHelper.java @@ -104,12 +104,25 @@ public class ImportNoPhotoExcelHelper { private static boolean checkModal(Sheet sheet, String className) { int colNum = 0; + // 是否是招行新模板 + boolean isNewModel = false; if (className.equals("UploadPayrollBean")){ colNum = sheet.getRow(1).getLastCellNum(); }else if (className.equals("CareerBean")){ colNum = sheet.getRow(1).getLastCellNum(); }else if (className.equals("WagesDetailsBean")){ - colNum = sheet.getRow(5).getLastCellNum(); + String applyDateTitle = sheet.getRow(4).getCell(0).getStringCellValue(); + if(Objects.equals(applyDateTitle,"申请时间")){ + isNewModel = true; + colNum = sheet.getRow(12).getLastCellNum(); + System.err.println(sheet.getRow(11).getLastCellNum()); + System.err.println(sheet.getRow(12).getLastCellNum()); + System.err.println(sheet.getRow(13).getLastCellNum()); + + }else{ + colNum = sheet.getRow(5).getLastCellNum(); + } + }else{ colNum = sheet.getRow(0).getLastCellNum(); } @@ -123,7 +136,11 @@ public class ImportNoPhotoExcelHelper { case "CareerBean": return colNum == 12; case "WagesDetailsBean": - return colNum >= 18; + if(isNewModel){ + return colNum >= 7; + }else{ + return colNum >= 18; + } case "VoucherDetailsBean": return colNum == 28; case "CCBWagesDetailsBean": @@ -140,8 +157,17 @@ public class ImportNoPhotoExcelHelper { } List list = new ArrayList<>(); int last = 0; + // 是否是招行新模板 + boolean isNewModel = false; + Map zhDataMap = new HashMap<>(); // 存放招行新模板通用数据 if (className.equals("WagesDetailsBean")){ - last = sheet.getRow(5).getLastCellNum(); + String applyDateTitle = sheet.getRow(4).getCell(0).getStringCellValue(); + if(Objects.equals(applyDateTitle,"申请时间")){ + isNewModel = true; + last = sheet.getRow(12).getLastCellNum(); + }else{ + last = sheet.getRow(5).getLastCellNum(); + } }else{ last = sheet.getRow(0).getLastCellNum(); } @@ -193,7 +219,54 @@ public class ImportNoPhotoExcelHelper { if (row.getRowNum() < 2) continue; break; case "WagesDetailsBean": - if (row.getRowNum() < 5) continue; + if(isNewModel){ + if (row.getRowNum() < 3) { + continue; + }else if(row.getRowNum() == 4){ + // 申请时间、主账号 + row.getCell(1).setCellType(CellType.STRING); + row.getCell(3).setCellType(CellType.STRING); + String applyDate = row.getCell(1).getStringCellValue(); + String mainNumber = row.getCell(3).getStringCellValue(); + if(StringUtils.isEmpty(applyDate)){ + return R.fail("申请时间不能为空"); + } + if(StringUtils.isEmpty(mainNumber)){ + return R.fail("主账号不能为空"); + } + zhDataMap.put("applyDate",applyDate); + zhDataMap.put("mainNumber",mainNumber); + continue; + }else if(row.getRowNum() == 7){ + // 业务参考号、批次摘要/备注 + row.getCell(1).setCellType(CellType.STRING); + row.getCell(3).setCellType(CellType.STRING); + String serviceReferenceNumber = row.getCell(1).getStringCellValue(); + String batchSummary = row.getCell(3).getStringCellValue(); + if(StringUtils.isEmpty(serviceReferenceNumber)){ + return R.fail("业务参考号不能为空"); + } + if(StringUtils.isEmpty(batchSummary)){ + return R.fail("批次摘要/备注不能为空"); + } + zhDataMap.put("serviceReferenceNumber",serviceReferenceNumber); + zhDataMap.put("batchSummary",batchSummary); + continue; + }else if(row.getRowNum() == 8){ + row.getCell(1).setCellType(CellType.STRING); + // 主账户名称 + String masterAccountName = row.getCell(1).getStringCellValue(); + if(StringUtils.isEmpty(masterAccountName)){ + return R.fail("主账户名称不能为空"); + } + zhDataMap.put("masterAccountName",masterAccountName); + continue; + }else if(row.getRowNum() == 3 || row.getRowNum() == 5 || row.getRowNum() == 6 || (row.getRowNum() > 8 && row.getRowNum() <= 12)){ + continue; + } + }else{ + if (row.getRowNum() < 5) continue; + } break; case "CCBWagesDetailsBean": if (row.getRowNum() < 1) continue; @@ -353,59 +426,85 @@ public class ImportNoPhotoExcelHelper { case "WagesDetailsBean": int dynamicColumnCount = row.getLastCellNum(); setExcleTString(dynamicColumnCount, row, 0); - if (row.getCell(0) != null) - obj.put("zh", row.getCell(0).getStringCellValue()); - if (row.getCell(1) != null) - obj.put("hm", row.getCell(1).getStringCellValue()); - if (row.getCell(2) != null) - obj.put("je", row.getCell(2).getStringCellValue()); - if (row.getCell(3) != null) - obj.put("sjdkje", row.getCell(3).getStringCellValue()); - if (row.getCell(4) != null) - obj.put("zt", row.getCell(4).getStringCellValue()); - if (row.getCell(5) != null) - obj.put("zs", row.getCell(5).getStringCellValue()); - if (row.getCell(6) != null) - obj.put("ckh", row.getCell(6).getStringCellValue()); - if (row.getCell(7) != null) - obj.put("ts", row.getCell(7).getStringCellValue()); - if (row.getCell(8) != null) - obj.put("khh", row.getCell(8).getStringCellValue()); - if (row.getCell(9) != null) - obj.put("khd", row.getCell(9).getStringCellValue()); - if (row.getCell(10) != null) - obj.put("jbr", row.getCell(10).getStringCellValue()); - if (row.getCell(11) != null) - obj.put("qwr", row.getCell(11).getStringCellValue()); - if (row.getCell(12) != null) - obj.put("sfkzhm", row.getCell(12).getStringCellValue()); - if (row.getCell(13) != null) - obj.put("sfkzh", row.getCell(13).getStringCellValue()); - if (row.getCell(14) != null) - obj.put("yt", row.getCell(14).getStringCellValue()); - if (row.getCell(15) != null) - obj.put("ywckh", row.getCell(15).getStringCellValue()); - if (row.getCell(16) != null) - obj.put("lx", row.getCell(16).getStringCellValue()); - if (row.getCell(17) != null) - obj.put("qdbz", row.getCell(17).getStringCellValue()); + if(!isNewModel){ + if (row.getCell(0) != null) + obj.put("zh", row.getCell(0).getStringCellValue()); + if (row.getCell(1) != null) + obj.put("hm", row.getCell(1).getStringCellValue()); + if (row.getCell(2) != null) + obj.put("je", row.getCell(2).getStringCellValue()); + if (row.getCell(3) != null) + obj.put("sjdkje", row.getCell(3).getStringCellValue()); + if (row.getCell(4) != null) + obj.put("zt", row.getCell(4).getStringCellValue()); + if (row.getCell(5) != null) + obj.put("zs", row.getCell(5).getStringCellValue()); + if (row.getCell(6) != null) + obj.put("ckh", row.getCell(6).getStringCellValue()); + if (row.getCell(7) != null) + obj.put("ts", row.getCell(7).getStringCellValue()); + if (row.getCell(8) != null) + obj.put("khh", row.getCell(8).getStringCellValue()); + if (row.getCell(9) != null) + obj.put("khd", row.getCell(9).getStringCellValue()); + if (row.getCell(10) != null) + obj.put("jbr", row.getCell(10).getStringCellValue()); + if (row.getCell(11) != null) + obj.put("qwr", row.getCell(11).getStringCellValue()); + if (row.getCell(12) != null) + obj.put("sfkzhm", row.getCell(12).getStringCellValue()); + if (row.getCell(13) != null) + obj.put("sfkzh", row.getCell(13).getStringCellValue()); + if (row.getCell(14) != null) + obj.put("yt", row.getCell(14).getStringCellValue()); + if (row.getCell(15) != null) + obj.put("ywckh", row.getCell(15).getStringCellValue()); + if (row.getCell(16) != null) + obj.put("lx", row.getCell(16).getStringCellValue()); + if (row.getCell(17) != null) + obj.put("qdbz", row.getCell(17).getStringCellValue()); // if (row.getCell(18) != null) // obj.put("hnbz", row.getCell(18).getStringCellValue()); - // 处理第18列之后的所有列 - StringBuilder additionalData = new StringBuilder(); - for (int i = 18; i < dynamicColumnCount; i++) { - Cell cell = row.getCell(i); - if (cell != null) { - String columnName = sheet.getRow(5).getCell(i).getStringCellValue(); - String cellValue = cell.getStringCellValue(); - if (additionalData.length() > 0) { - additionalData.append("; "); + // 处理第18列之后的所有列 + StringBuilder additionalData = new StringBuilder(); + for (int i = 18; i < dynamicColumnCount; i++) { + Cell cell = row.getCell(i); + if (cell != null) { + String columnName = sheet.getRow(5).getCell(i).getStringCellValue(); + String cellValue = cell.getStringCellValue(); + if (additionalData.length() > 0) { + additionalData.append("; "); + } + additionalData.append(columnName).append(": ").append(cellValue); } - additionalData.append(columnName).append(": ").append(cellValue); } - } - if (additionalData.length() > 0) { - obj.put("additionalData", additionalData.toString()); + if (additionalData.length() > 0) { + obj.put("additionalData", additionalData.toString()); + } + }else{ + if (row.getCell(0) != null) // 员工姓名 + obj.put("hm", row.getCell(0).getStringCellValue()); + if (row.getCell(1) != null) // 个人账号 + obj.put("zh", row.getCell(1).getStringCellValue()); + if (row.getCell(2) != null) // 开户行 + obj.put("khh", row.getCell(2).getStringCellValue()); + if (row.getCell(3) != null) // 代发金额(元) + obj.put("je", row.getCell(3).getStringCellValue()); + if (row.getCell(4) != null) // 代发状态 + obj.put("zt", row.getCell(4).getStringCellValue()); + if (row.getCell(5) != null) // 失败原因 + obj.put("ts", row.getCell(5).getStringCellValue()); + if (row.getCell(6) != null) // 备注 + obj.put("additionalData", row.getCell(6).getStringCellValue()); + obj.put("zs", "网上代发代扣"); + obj.put("jbr", zhDataMap.get("applyDate")); + obj.put("qwr", zhDataMap.get("applyDate")); + obj.put("sfkzhm", zhDataMap.get("masterAccountName")); + obj.put("sfkzh", zhDataMap.get("mainNumber")); + obj.put("yt", zhDataMap.get("batchSummary")); + obj.put("ywckh", zhDataMap.get("serviceReferenceNumber")); + obj.put("lx", "代发其他"); + obj.put("qdbz", "超网代发"); } break; case "CCBWagesDetailsBean": diff --git a/src/main/resources/download/zh_model.xlsx b/src/main/resources/download/zh_model.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..f95f741686f1e20da46ea0353da161a06b7a56a2 GIT binary patch literal 22491 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/static/pages/wages/uploadWages.html b/src/main/resources/static/pages/wages/uploadWages.html index 697b5ff..ed2e28d 100644 --- a/src/main/resources/static/pages/wages/uploadWages.html +++ b/src/main/resources/static/pages/wages/uploadWages.html @@ -48,6 +48,7 @@
+
@@ -190,6 +191,13 @@ function downloadWages() { window.open(ctxPath + "/download/download?filename=招商银行工资导入模板.xlsx") } + + /** + * 下载工资册模板(新) + * */ + function downloadNewWages() { + window.open(ctxPath + "/download/download?filename=zh_model.xlsx") + } \ No newline at end of file