From acc382b835b33e5133beb1173f522c40e8e42d24 Mon Sep 17 00:00:00 2001 From: sy Date: Wed, 15 Mar 2023 10:20:46 +0800 Subject: [PATCH 01/33] =?UTF-8?q?=E8=96=AA=E9=85=AC=E7=B3=BB=E7=BB=9F-?= =?UTF-8?q?=E8=96=AA=E8=B5=84=E6=A0=B8=E7=AE=97=EF=BC=8C=E6=A0=B8=E7=AE=97?= =?UTF-8?q?=E5=AF=BC=E5=87=BAexcel=E6=A0=BC=E5=BC=8F=E6=94=B9=E9=80=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../impl/SalaryAcctExcelServiceImpl.java | 95 +++-- .../salary/util/excel/ExcelUtilPlus.java | 333 ++++++++++++++++++ 2 files changed, 408 insertions(+), 20 deletions(-) create mode 100644 src/com/engine/salary/util/excel/ExcelUtilPlus.java diff --git a/src/com/engine/salary/service/impl/SalaryAcctExcelServiceImpl.java b/src/com/engine/salary/service/impl/SalaryAcctExcelServiceImpl.java index 732adbeb9..7a0fdb66d 100644 --- a/src/com/engine/salary/service/impl/SalaryAcctExcelServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryAcctExcelServiceImpl.java @@ -39,6 +39,7 @@ import com.engine.salary.util.SalaryI18nUtil; import com.engine.salary.util.excel.ExcelParseHelper; import com.engine.salary.util.excel.ExcelSupport; import com.engine.salary.util.excel.ExcelUtil; +import com.engine.salary.util.excel.ExcelUtilPlus; import com.engine.salary.util.page.Column; import com.engine.salary.util.valid.ValidUtil; import com.google.common.collect.Lists; @@ -50,8 +51,11 @@ import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.collections4.ListUtils; import org.apache.commons.lang3.StringUtils; +import org.apache.poi.ss.usermodel.CellType; import org.apache.poi.ss.usermodel.Sheet; +import org.apache.poi.ss.util.CellRangeAddress; import org.apache.poi.util.IOUtils; +import org.apache.poi.xssf.usermodel.XSSFCell; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import weaver.file.ImageFileManager; import weaver.hrm.User; @@ -276,11 +280,12 @@ public class SalaryAcctExcelServiceImpl extends Service implements SalaryAcctExc // 查询列表的表头 List weaTableColumns = listWeaTableColumn(salaryAcctRecordPO); parseHeader(headerColumnGroup, weaTableColumns); - // excel导出的表头 - String[] headers = headerColumnGroup.stream() - .map(WeaTableColumn::getText) - .toArray(String[]::new); - List headerList = new ArrayList<>(Arrays.asList(headers)); +// // excel导出的表头 +// String[] headers = headerColumnGroup.stream() +// .map(WeaTableColumn::getText) +// .toArray(String[]::new); +// List headerList = new ArrayList<>(Arrays.asList(headers)); + List headerList = new ArrayList<>(weaTableColumns); // 查询薪资核算结果 List> resultMapList = getSalaryAcctResultService(user).listByParam(queryParam); @@ -307,9 +312,11 @@ public class SalaryAcctExcelServiceImpl extends Service implements SalaryAcctExc } String sheetName = "薪资核算结果"; - return ExcelUtil.genWorkbookV2(rows, sheetName, total); +// return ExcelUtil.genWorkbookV2(rows, sheetName, total); + return ExcelUtilPlus.genWorkbookWithChildTitleColumn(rows, sheetName, total); } + /** * 构建薪资核算结果列表的表头 * @@ -408,38 +415,86 @@ public class SalaryAcctExcelServiceImpl extends Service implements SalaryAcctExc if (Objects.isNull(salaryAcctRecordPO)) { throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(98747, "薪资核算记录不存在或已被删除")); } - // 模板表头(默认必带"个税扣缴义务人"、"姓名") - List headerList = Lists.newArrayList(SalaryI18nUtil.getI18nLabel(85429, "姓名"), - "部门", - SalaryI18nUtil.getI18nLabel(86186, "手机号"), - SalaryI18nUtil.getI18nLabel(86317, "工号"), - SalaryI18nUtil.getI18nLabel(86184, "个税扣缴义务人")); - List dataIndexList = Lists.newArrayList("username", "departmentName", "mobile", "workcode", "taxAgentName"); +// // 模板表头(默认必带"个税扣缴义务人"、"姓名") +// List headerList = Lists.newArrayList(SalaryI18nUtil.getI18nLabel(85429, "姓名"), +// "部门", +// SalaryI18nUtil.getI18nLabel(86186, "手机号"), +// SalaryI18nUtil.getI18nLabel(86317, "工号"), +// SalaryI18nUtil.getI18nLabel(86184, "个税扣缴义务人")); +// List dataIndexList = Lists.newArrayList("username", "departmentName", "mobile", "workcode", "taxAgentName"); +// // 查询薪资项目 +// List salaryItemPOS = getSalaryItemService(user).listByIds(param.getSalaryItemIds()); +// for (SalaryItemPO salaryItemPO : salaryItemPOS) { +// headerList.add(salaryItemPO.getName()); +// dataIndexList.add("" + salaryItemPO.getId()); +// } +// +// // 查询薪资核算结果 +// List> resultMapList = getSalaryAcctResultService(user).listByParam(param); +// // excel导出的数据 +// List> rows = Lists.newArrayListWithExpectedSize(resultMapList.size()); +// rows.add(headerList); +// for (Map map : resultMapList) { +// List row = Lists.newArrayListWithExpectedSize(headerList.size()); +// for (String dataIndex : dataIndexList) { +// row.add(map.getOrDefault(dataIndex, StringUtils.EMPTY)); +// } +// rows.add(row); +// } +// return ExcelUtil.genWorkbookV2(rows, sheetName); + // 查询薪资项目 + List headerRangeList = new ArrayList<>(); List salaryItemPOS = getSalaryItemService(user).listByIds(param.getSalaryItemIds()); for (SalaryItemPO salaryItemPO : salaryItemPOS) { - headerList.add(salaryItemPO.getName()); - dataIndexList.add("" + salaryItemPO.getId()); + headerRangeList.add(salaryItemPO.getId().toString()); } + headerRangeList.add("username"); + headerRangeList.add("mobile"); + headerRangeList.add("workcode"); + headerRangeList.add("taxAgentName"); + headerRangeList.add("departmentName"); + // 查询列表的表头 + List weaTableColumns = listWeaTableColumn(salaryAcctRecordPO); + List finalWeaTableColumns = new ArrayList<>(); + for (WeaTableColumnGroup tableColumn : weaTableColumns) { + WeaTableColumnGroup columnGroupItem = (WeaTableColumnGroup) tableColumn; + if (columnGroupItem.getChildren() != null) { + List childrenColumns = columnGroupItem.getChildren().stream().filter(f -> headerRangeList.contains(f.getColumn())).collect(Collectors.toList()); + if (childrenColumns.size() > 0) { + columnGroupItem.setChildren(childrenColumns); + finalWeaTableColumns.add(columnGroupItem); + } + } else if (headerRangeList.contains(columnGroupItem.getColumn())) { + finalWeaTableColumns.add(columnGroupItem); + } + } + // excel导出的表头 + List headerColumnGroup = Lists.newArrayList(); + // 查询列表的表头 + parseHeader(headerColumnGroup, finalWeaTableColumns); + + List headerList = new ArrayList<>(finalWeaTableColumns); // 查询薪资核算结果 List> resultMapList = getSalaryAcctResultService(user).listByParam(param); // excel导出的数据 - List> rows = Lists.newArrayListWithExpectedSize(resultMapList.size()); + List> rows = new ArrayList<>(); rows.add(headerList); for (Map map : resultMapList) { - List row = Lists.newArrayListWithExpectedSize(headerList.size()); - for (String dataIndex : dataIndexList) { - row.add(map.getOrDefault(dataIndex, StringUtils.EMPTY)); + List row = Lists.newArrayListWithExpectedSize(headerColumnGroup.size()); + for (WeaTableColumnGroup weaTableColumn : headerColumnGroup) { + row.add(map.getOrDefault(weaTableColumn.getColumn(), StringUtils.EMPTY)); } rows.add(row); } String sheetName = "薪资核算导入模板"; - return ExcelUtil.genWorkbookV2(rows, sheetName); + return ExcelUtilPlus.genWorkbookWithChildTitleColumn(rows, sheetName, false); } + @Override public XSSFWorkbook exportComparisonResult(SalaryComparisonResultQueryParam queryParam) { ValidUtil.doValidator(queryParam); diff --git a/src/com/engine/salary/util/excel/ExcelUtilPlus.java b/src/com/engine/salary/util/excel/ExcelUtilPlus.java new file mode 100644 index 000000000..b3b2768e5 --- /dev/null +++ b/src/com/engine/salary/util/excel/ExcelUtilPlus.java @@ -0,0 +1,333 @@ +package com.engine.salary.util.excel; + +import com.engine.salary.component.WeaTableColumnGroup; +import com.engine.salary.util.SalaryDateUtil; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.poi.ss.usermodel.*; +import org.apache.poi.ss.util.CellRangeAddress; +import org.apache.poi.xssf.usermodel.*; + +import java.awt.*; +import java.awt.Color; +import java.util.Date; +import java.util.List; + +public class ExcelUtilPlus { + /** + * 生成excel + * + * @param rowList + * @return + */ + public static XSSFWorkbook genWorkbook(List> rowList, String sheetName) { + XSSFWorkbook workbook = new XSSFWorkbook(); + + // 设置title样式 + XSSFCellStyle titleCellStyle = workbook.createCellStyle(); + XSSFFont titleFont = workbook.createFont(); + titleFont.setFontName("仿宋"); + titleFont.setFontHeightInPoints((short) 15); + titleCellStyle.setFont(titleFont); + titleCellStyle.setAlignment(HorizontalAlignment.CENTER); + titleCellStyle.setFillForegroundColor(IndexedColors.GREEN.getIndex());//背景色 + titleCellStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND); + + + // 设置主体样式 + XSSFCellStyle cellStyle = workbook.createCellStyle(); + XSSFFont font = workbook.createFont(); + font.setFontName("宋体"); + font.setFontHeightInPoints((short) 10);// 设置字体大小 + cellStyle.setFont(font);// 选择需要用到的字体格式 + cellStyle.setWrapText(true); + + XSSFSheet sheet = workbook.createSheet(sheetName); + //自适应宽度 + sheet.autoSizeColumn(0, true); + //默认列宽 + sheet.setDefaultColumnWidth(20); + //默认行高 + sheet.setDefaultRowHeightInPoints(18); + + for (int rowIndex = 0; rowIndex < rowList.size(); rowIndex++) { + List infoList = rowList.get(rowIndex); + XSSFRow row = sheet.createRow(rowIndex); + for (int cellIndex = 0; cellIndex < infoList.size(); cellIndex++) { + XSSFCell cell = row.createCell(cellIndex); + cell.setCellType(CellType.STRING); + if (rowIndex == 0) { + cell.setCellStyle(titleCellStyle); + } else { + cell.setCellStyle(cellStyle); + } + cell.setCellValue(infoList.get(cellIndex)); +// sheet.setColumnWidth(cellIndex, 35 * 256); + } + } + return workbook; + } + + + public static XSSFWorkbook genWorkbookV2(List> rowList, String sheetName) { + XSSFWorkbook workbook = new XSSFWorkbook(); + + // 设置title样式 + XSSFCellStyle titleCellStyle = workbook.createCellStyle(); + XSSFFont titleFont = workbook.createFont(); + titleFont.setFontName("仿宋"); + titleFont.setFontHeightInPoints((short) 15); + titleCellStyle.setFont(titleFont); + titleCellStyle.setAlignment(HorizontalAlignment.CENTER); + titleCellStyle.setFillForegroundColor(IndexedColors.GREEN.getIndex());//背景色 + titleCellStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND); + + + // 设置主体样式 + XSSFCellStyle cellStyle = workbook.createCellStyle(); + XSSFFont font = workbook.createFont(); + font.setFontName("宋体"); + font.setFontHeightInPoints((short) 10);// 设置字体大小 + cellStyle.setFont(font);// 选择需要用到的字体格式 + cellStyle.setWrapText(true); + + XSSFSheet sheet = workbook.createSheet(sheetName); + //自适应宽度 + sheet.autoSizeColumn(0, true); + //默认列宽 + sheet.setDefaultColumnWidth(20); + //默认行高 + sheet.setDefaultRowHeightInPoints(18); + + for (int rowIndex = 0; rowIndex < rowList.size(); rowIndex++) { + List infoList = rowList.get(rowIndex); + XSSFRow row = sheet.createRow(rowIndex); + for (int cellIndex = 0; cellIndex < infoList.size(); cellIndex++) { + XSSFCell cell = row.createCell(cellIndex); + if (rowIndex == 0) { + cell.setCellStyle(titleCellStyle); + } else { + cell.setCellStyle(cellStyle); + } + Object o = infoList.get(cellIndex); + if (o instanceof String) { + cell.setCellType(CellType.STRING); + cell.setCellValue(String.valueOf(o)); + } else if (o instanceof Boolean) { + cell.setCellType(CellType.BOOLEAN); + cell.setCellValue(String.valueOf(o)); + } else if (o instanceof Date) { + cell.setCellType(CellType.STRING); + cell.setCellValue(SalaryDateUtil.getFormatLocalDate((Date) o)); + } else { + cell.setCellType(CellType.STRING); + cell.setCellValue(o == null ? "" : o.toString()); + } + } + } + return workbook; + } + + + public static XSSFWorkbook genWorkbookV2(List> rowList, String sheetName, List comments) { + XSSFWorkbook workbook = new XSSFWorkbook(); + + // 设置title样式 + XSSFCellStyle titleCellStyle = workbook.createCellStyle(); + XSSFFont titleFont = workbook.createFont(); + titleFont.setFontName("仿宋"); + titleFont.setFontHeightInPoints((short) 15); + titleCellStyle.setFont(titleFont); + titleCellStyle.setAlignment(HorizontalAlignment.CENTER); + titleCellStyle.setFillForegroundColor(IndexedColors.GREEN.getIndex());//背景色 + titleCellStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND); + + + // 设置主体样式 + XSSFCellStyle cellStyle = workbook.createCellStyle(); + XSSFFont font = workbook.createFont(); + font.setFontName("宋体"); + font.setFontHeightInPoints((short) 10);// 设置字体大小 + cellStyle.setFont(font);// 选择需要用到的字体格式 + cellStyle.setWrapText(true); + + XSSFSheet sheet = workbook.createSheet(sheetName); + //自适应宽度 + sheet.autoSizeColumn(0, true); + //默认列宽 + sheet.setDefaultColumnWidth(20); + //默认行高 + sheet.setDefaultRowHeightInPoints(18); + + for (int rowIndex = 0; rowIndex < rowList.size(); rowIndex++) { + List infoList = rowList.get(rowIndex); + XSSFRow row = sheet.createRow(rowIndex); + for (int cellIndex = 0; cellIndex < infoList.size(); cellIndex++) { + XSSFCell cell = row.createCell(cellIndex); + if (rowIndex == 0) { + cell.setCellStyle(titleCellStyle); + } else { + cell.setCellStyle(cellStyle); + } + Object o = infoList.get(cellIndex); + if (o instanceof String) { + cell.setCellType(CellType.STRING); + cell.setCellValue(String.valueOf(o)); + } else if (o instanceof Boolean) { + cell.setCellType(CellType.BOOLEAN); + cell.setCellValue(String.valueOf(o)); + } else if (o instanceof Date) { + cell.setCellType(CellType.STRING); + cell.setCellValue(SalaryDateUtil.getFormatLocalDate((Date) o)); + } else { + cell.setCellType(CellType.STRING); + cell.setCellValue(String.valueOf(o)); + } + } + } + + if (CollectionUtils.isNotEmpty(comments)) { + for (ExcelComment c : comments) { + XSSFDrawing patr = sheet.createDrawingPatriarch(); + XSSFComment cellComment = patr.createCellComment(new XSSFClientAnchor(c.dx1, c.dy1, c.dx2, c.dy2, c.col1, c.row1, c.col2, c.row2)); + cellComment.setString(c.content); + } + } + return workbook; + } + + + public static XSSFWorkbook genWorkbookWithChildTitleColumn(List> rowList, String sheetName, boolean lastRowRed) { + XSSFWorkbook workbook = new XSSFWorkbook(); + + // 设置title样式 + XSSFCellStyle titleCellStyle = workbook.createCellStyle(); + XSSFFont titleFont = workbook.createFont(); + titleFont.setFontName("仿宋"); + titleFont.setFontHeightInPoints((short) 15); + titleCellStyle.setFont(titleFont); + titleCellStyle.setAlignment(HorizontalAlignment.LEFT); + titleCellStyle.setFillForegroundColor(IndexedColors.GREY_25_PERCENT.getIndex());//背景色 + titleCellStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND); + titleCellStyle.setVerticalAlignment(VerticalAlignment.CENTER); + titleCellStyle.setBorderLeft(BorderStyle.THIN); + titleCellStyle.setBorderRight(BorderStyle.THIN); + titleCellStyle.setBorderTop(BorderStyle.THIN); + titleCellStyle.setBorderBottom(BorderStyle.THIN); + + + + // 设置主体样式 + XSSFCellStyle cellStyle = workbook.createCellStyle(); + XSSFFont font = workbook.createFont(); + font.setFontName("宋体"); + font.setFontHeightInPoints((short) 10);// 设置字体大小 + cellStyle.setFont(font);// 选择需要用到的字体格式 + cellStyle.setWrapText(true); + + cellStyle.setBorderLeft(BorderStyle.THIN); + cellStyle.setBorderRight(BorderStyle.THIN); + cellStyle.setBorderTop(BorderStyle.THIN); + cellStyle.setBorderBottom(BorderStyle.THIN); + + XSSFCellStyle redCellStyle = workbook.createCellStyle(); + XSSFFont redFont = workbook.createFont(); + redFont.setFontName("宋体"); + redFont.setFontHeightInPoints((short) 10);// 设置字体大小 + redFont.setColor(new XSSFColor(new Color(0xFF3333), null)); + redCellStyle.setWrapText(true); + redCellStyle.setFont(redFont);// 选择需要用到的字体格式 + + redCellStyle.setBorderLeft(BorderStyle.THIN); + redCellStyle.setBorderRight(BorderStyle.THIN); + redCellStyle.setBorderTop(BorderStyle.THIN); + redCellStyle.setBorderBottom(BorderStyle.THIN); + + XSSFSheet sheet = workbook.createSheet(sheetName); + //自适应宽度 + sheet.autoSizeColumn(0, true); + //默认列宽 + sheet.setDefaultColumnWidth(20); + //默认行高 + sheet.setDefaultRowHeightInPoints(18); + + //处理合并单元格 + XSSFRow row0 = sheet.createRow(0); + XSSFRow row1 = sheet.createRow(1); + + List header = rowList.get(0); + int startIndex = 0; + for (int i = 0; i < header.size(); i++) { + WeaTableColumnGroup columnGroupItem = (WeaTableColumnGroup) header.get(i); + if (columnGroupItem.getChildren() == null) { + sheet.addMergedRegion(new CellRangeAddress(0, 1, startIndex, startIndex)); + + XSSFCell rowZeroCell = row0.createCell(startIndex, CellType.STRING); + rowZeroCell.setCellValue(columnGroupItem.getText().toString()); + rowZeroCell.setCellStyle(titleCellStyle); + XSSFCell rowOneCell = row1.createCell(startIndex, CellType.STRING); + rowOneCell.setCellStyle(titleCellStyle); + //设置列宽 + sheet.setColumnWidth(startIndex,columnGroupItem.getText().length()*4*256); + startIndex++; + } else { + List childrenList = columnGroupItem.getChildren(); + int endIndex = startIndex + childrenList.size() - 1; + + if (endIndex > startIndex) { + sheet.addMergedRegion(new CellRangeAddress(0, 0, startIndex, endIndex)); + } + + XSSFCell cell = row0.createCell(startIndex, CellType.STRING); + cell.setCellValue(columnGroupItem.getText().toString()); + cell.setCellStyle(titleCellStyle); + + for (int j = 0; j < childrenList.size(); j++) { + WeaTableColumnGroup childrenItem = (WeaTableColumnGroup) childrenList.get(j); + + XSSFCell subHeader = row1.createCell(startIndex + j, CellType.STRING); + subHeader.setCellValue(childrenItem.getText().toString()); + subHeader.setCellStyle(titleCellStyle); + //设置列宽 + sheet.setColumnWidth(startIndex + j,childrenItem.getText().length()*4*256); + } + + startIndex += childrenList.size(); + + } + + } + + for (int rowIndex = 1; rowIndex < rowList.size(); rowIndex++) { + List infoList = rowList.get(rowIndex); + XSSFRow row = sheet.createRow(rowIndex + 1); + for (int cellIndex = 0; cellIndex < infoList.size(); cellIndex++) { + XSSFCell cell = row.createCell(cellIndex); + + if (rowIndex == 0) { + cell.setCellStyle(titleCellStyle); + } else { + if (lastRowRed && rowIndex == rowList.size() - 1) { + cell.setCellStyle(redCellStyle); + } else { + cell.setCellStyle(cellStyle); + } + } + Object o = infoList.get(cellIndex); + if (o instanceof String) { + cell.setCellType(CellType.STRING); + cell.setCellValue(String.valueOf(o)); + } else if (o instanceof Boolean) { + cell.setCellType(CellType.BOOLEAN); + cell.setCellValue(String.valueOf(o)); + } else if (o instanceof Date) { + cell.setCellType(CellType.STRING); + cell.setCellValue(SalaryDateUtil.getFormatLocalDate((Date) o)); + } else { + cell.setCellType(CellType.STRING); + cell.setCellValue(o == null ? "" : o.toString()); + } + } + } + return workbook; + } +} From 6418e4ad6ecb34aa4d9da067e70fd2871353ec82 Mon Sep 17 00:00:00 2001 From: Harryxzy Date: Wed, 15 Mar 2023 13:38:13 +0800 Subject: [PATCH 02/33] =?UTF-8?q?=E5=BE=80=E6=9C=9F=E7=B4=AF=E8=AE=A1?= =?UTF-8?q?=E6=83=85=E5=86=B5=EF=BC=8C=E8=8E=B7=E5=8F=96=E5=BD=93=E6=9C=88?= =?UTF-8?q?=E7=A8=8E=E6=AC=BE=E6=89=80=E5=B1=9E=E6=9C=9F=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E6=97=A0=E6=B3=95=E5=AF=BC=E5=85=A5bug=EF=BC=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/impl/AddUpSituationServiceImpl.java | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/src/com/engine/salary/service/impl/AddUpSituationServiceImpl.java b/src/com/engine/salary/service/impl/AddUpSituationServiceImpl.java index 9a0a63e2d..9d62333b4 100644 --- a/src/com/engine/salary/service/impl/AddUpSituationServiceImpl.java +++ b/src/com/engine/salary/service/impl/AddUpSituationServiceImpl.java @@ -605,8 +605,14 @@ public class AddUpSituationServiceImpl extends Service implements AddUpSituation // 获取租户下所有的人员 List employees = employBiz.listEmployee(); // 已经核算过的不可操作 - // 获取已经核算的数据 - List salaryAcctEmployees = getAddUpDeductionService(user).getAccountedEmployeeData(taxYearMonthStr); + // 获取已经核算的数据(获取税款所属期下一个月的数据) + YearMonth nextTaxYearMonth = SalaryDateUtil.String2YearMonth(taxYearMonthStr); + String nextTaxYearMonthStr = taxYearMonthStr; + if( !Objects.equals(nextTaxYearMonth.getMonthValue(),12) ){ + nextTaxYearMonth = nextTaxYearMonth.plusMonths(1); + nextTaxYearMonthStr = nextTaxYearMonth.format(SalaryDateUtil.MONTH_FORMATTER); + } + List salaryAcctEmployees = getAddUpDeductionService(user).getAccountedEmployeeData(nextTaxYearMonthStr); //税款所属期 Date taxYearMonth = SalaryDateUtil.localDateToDate(LocalDate.parse(taxYearMonthStr + "-01", SalaryDateUtil.DATE_FORMATTER)); @@ -737,7 +743,7 @@ public class AddUpSituationServiceImpl extends Service implements AddUpSituation // } // 判断是否有核算过 - if (CollectionUtils.isNotEmpty(salaryAcctEmployees)) { + if (CollectionUtils.isNotEmpty(salaryAcctEmployees) && !Objects.equals(taxYearMonthStr.split("-")[1], "12") ) { Optional optionalAcctEmp = salaryAcctEmployees.stream().filter(f -> f.getEmployeeId().equals(po.getEmployeeId()) && f.getTaxAgentId().equals(po.getTaxAgentId())).findFirst(); boolean isExist = list.stream().anyMatch(f -> f.getEmployeeId().equals(po.getEmployeeId()) && f.getTaxAgentId().equals(po.getTaxAgentId())); if (optionalAcctEmp.isPresent() && isExist) { From a9fb24145dd21eb23e1026a5a31a665202632644 Mon Sep 17 00:00:00 2001 From: Harryxzy Date: Wed, 15 Mar 2023 14:14:53 +0800 Subject: [PATCH 03/33] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E5=BE=80=E6=9C=9F?= =?UTF-8?q?=E7=B4=AF=E8=AE=A1=E6=83=85=E5=86=B5=EF=BC=8C=E6=97=A0=E6=B3=95?= =?UTF-8?q?=E5=AF=BC=E5=85=A5=E7=BC=96=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/impl/AddUpSituationServiceImpl.java | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/src/com/engine/salary/service/impl/AddUpSituationServiceImpl.java b/src/com/engine/salary/service/impl/AddUpSituationServiceImpl.java index 9d62333b4..edf606980 100644 --- a/src/com/engine/salary/service/impl/AddUpSituationServiceImpl.java +++ b/src/com/engine/salary/service/impl/AddUpSituationServiceImpl.java @@ -868,11 +868,17 @@ public class AddUpSituationServiceImpl extends Service implements AddUpSituation throw new SalaryRunTimeException("该个税扣缴义务人无权限编辑此数据!"); } // 已经核算过的不可操作 - // 获取已经核算的数据 - List salaryAcctEmployees = getAddUpDeductionService(user).getAccountedEmployeeData(taxYearMonthStr); + // 获取已经核算的数据(获取税款所属期下一个月的数据) + YearMonth nextTaxYearMonth = SalaryDateUtil.String2YearMonth(taxYearMonthStr); + String nextTaxYearMonthStr = taxYearMonthStr; + if( !Objects.equals(nextTaxYearMonth.getMonthValue(),12) ){ + nextTaxYearMonth = nextTaxYearMonth.plusMonths(1); + nextTaxYearMonthStr = nextTaxYearMonth.format(SalaryDateUtil.MONTH_FORMATTER); + } + List salaryAcctEmployees = getAddUpDeductionService(user).getAccountedEmployeeData(nextTaxYearMonthStr); // 判断是否有核算过 - if (CollectionUtils.isNotEmpty(salaryAcctEmployees)) { + if (CollectionUtils.isNotEmpty(salaryAcctEmployees) && !Objects.equals(taxYearMonthStr.split("-")[1], "12")) { Optional optionalAcctEmp = salaryAcctEmployees.stream().filter(f -> f.getEmployeeId().equals(addUpSituationParam.getEmployeeId()) && f.getTaxAgentId().equals(addUpSituationParam.getTaxAgentId())).findFirst(); if (optionalAcctEmp.isPresent()) { throw new SalaryRunTimeException("该年月这条数据已经核算过,不可进行编辑!"); From 712f30ddfae66d2e347f70558e58ad3384d974fa Mon Sep 17 00:00:00 2001 From: Harryxzy Date: Wed, 15 Mar 2023 16:00:37 +0800 Subject: [PATCH 04/33] =?UTF-8?q?=E5=B7=A5=E8=B5=84=E5=8D=95=E5=8F=91?= =?UTF-8?q?=E6=94=BE=E8=AF=A6=E6=83=85=E5=90=88=E8=AE=A1=E5=88=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../engine/salary/service/SalarySendService.java | 8 ++++++++ .../service/impl/SalarySendServiceImpl.java | 13 +++++++++++++ .../engine/salary/web/SalaryBillController.java | 14 ++++++++++++++ .../engine/salary/wrapper/SalarySendWrapper.java | 15 +++++++++++++++ 4 files changed, 50 insertions(+) diff --git a/src/com/engine/salary/service/SalarySendService.java b/src/com/engine/salary/service/SalarySendService.java index ef0e0d6bf..1a590970f 100644 --- a/src/com/engine/salary/service/SalarySendService.java +++ b/src/com/engine/salary/service/SalarySendService.java @@ -149,4 +149,12 @@ public interface SalarySendService { * @date 2022/11/25 10:45 */ void handleHistory(); + + /** + * 合计行 + * + * @param queryParam + * @return + */ + Map sumRow(SalarySendInfoQueryParam queryParam); } diff --git a/src/com/engine/salary/service/impl/SalarySendServiceImpl.java b/src/com/engine/salary/service/impl/SalarySendServiceImpl.java index 80cae1f54..e8a4bdaba 100644 --- a/src/com/engine/salary/service/impl/SalarySendServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalarySendServiceImpl.java @@ -21,6 +21,7 @@ import com.engine.salary.entity.salaryBill.po.SalarySendInfoPO; import com.engine.salary.entity.salaryBill.po.SalarySendPO; import com.engine.salary.entity.salaryBill.po.SalaryTemplatePO; import com.engine.salary.entity.salaryacct.bo.SalaryAcctResultBO; +import com.engine.salary.entity.salaryacct.param.SalaryAcctResultQueryParam; import com.engine.salary.entity.salaryacct.po.SalaryAcctEmployeePO; import com.engine.salary.entity.salaryacct.po.SalaryAcctRecordPO; import com.engine.salary.entity.salaryacct.po.SalaryAcctResultPO; @@ -1309,4 +1310,16 @@ public class SalarySendServiceImpl extends Service implements SalarySendService // BatchCallbackMessage message = BatchExportContext.getBatchCallbackMessage(); // System.out.println("接受到导出的结果" + JSONObject.toJSONString(message)); // } + + + @Override + public Map sumRow(SalarySendInfoQueryParam queryParam) { + Long salarySendId = queryParam.getSalarySendId(); + // 获取薪资核算ID + SalarySendPO salarySendPO = getById(salarySendId); + if(Objects.isNull(salarySendPO)){ + throw new SalaryRunTimeException("工资发放记录不存在或已被删除"); + } + return getSalaryAcctResultService(user).sumRow(SalaryAcctResultQueryParam.builder().salaryAcctRecordId(salarySendPO.getSalaryAccountingId()).build()); + } } diff --git a/src/com/engine/salary/web/SalaryBillController.java b/src/com/engine/salary/web/SalaryBillController.java index 71adaa017..deed2d29f 100644 --- a/src/com/engine/salary/web/SalaryBillController.java +++ b/src/com/engine/salary/web/SalaryBillController.java @@ -312,6 +312,20 @@ public class SalaryBillController { return new ResponseResult>(user).run(getSalarySendWrapper(user)::infoList, queryParam); } + /** + * 工资单发放信息合计行 + * + * @param queryParam + * @return + */ + @POST + @Path("/send/sum") + @Produces(MediaType.APPLICATION_JSON) + public String sumSendResult(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody SalarySendInfoQueryParam queryParam) { + User user = HrmUserVarify.getUser(request, response); + return new ResponseResult>(user).run(getSalarySendWrapper(user)::sumSendResult, queryParam); + } + /** * 导出-工资单发放信息列表 * diff --git a/src/com/engine/salary/wrapper/SalarySendWrapper.java b/src/com/engine/salary/wrapper/SalarySendWrapper.java index 631e1e539..5f428694b 100644 --- a/src/com/engine/salary/wrapper/SalarySendWrapper.java +++ b/src/com/engine/salary/wrapper/SalarySendWrapper.java @@ -626,4 +626,19 @@ public class SalarySendWrapper extends Service { public Map mySalaryBill(Long salaryInfoId) { return getSalarySendService(user).mySalaryBill(salaryInfoId, (long) user.getUID()); } + + /** + * 工资单发放信息合计行 + * + * @param queryParam + * @return + */ + public Map sumSendResult(SalarySendInfoQueryParam queryParam) { + Map datas = new HashMap<>(); + //合计 + Map sumRow = getSalarySendService(user).sumRow(queryParam); + datas.put("sumRow", sumRow); + return datas; + + } } From ca03e0785e1922aea041fb68a6424bd4a7fe39d8 Mon Sep 17 00:00:00 2001 From: Harryxzy Date: Wed, 15 Mar 2023 17:09:02 +0800 Subject: [PATCH 05/33] =?UTF-8?q?=E5=B7=A5=E8=B5=84=E5=8D=95=E5=8F=91?= =?UTF-8?q?=E6=94=BE=E8=AF=A6=E6=83=85=E5=AF=BC=E5=87=BA=E6=B2=A1=E6=9C=89?= =?UTF-8?q?=E9=83=A8=E9=97=A8=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/com/engine/salary/service/impl/SalarySendServiceImpl.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/com/engine/salary/service/impl/SalarySendServiceImpl.java b/src/com/engine/salary/service/impl/SalarySendServiceImpl.java index 80cae1f54..14ef15d0d 100644 --- a/src/com/engine/salary/service/impl/SalarySendServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalarySendServiceImpl.java @@ -1258,7 +1258,7 @@ public class SalarySendServiceImpl extends Service implements SalarySendService for (Map dto : listMaps) { List row = new ArrayList<>(); row.add(dto.get("username")); - row.add(dto.get("departmentName")); + row.add(dto.get("department")); row.add(dto.get("mobile")); row.add(dto.get("jobNum")); From 16cfe18b90332e5b62e1925789b3bb4dde2fd6b9 Mon Sep 17 00:00:00 2001 From: Harryxzy Date: Thu, 16 Mar 2023 09:53:46 +0800 Subject: [PATCH 06/33] =?UTF-8?q?=E5=BE=80=E6=9C=9F=E7=B4=AF=E8=AE=A1?= =?UTF-8?q?=E6=83=85=E5=86=B5=E5=AF=BC=E5=85=A5BUG?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../engine/salary/service/impl/AddUpSituationServiceImpl.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/com/engine/salary/service/impl/AddUpSituationServiceImpl.java b/src/com/engine/salary/service/impl/AddUpSituationServiceImpl.java index edf606980..efb54bfea 100644 --- a/src/com/engine/salary/service/impl/AddUpSituationServiceImpl.java +++ b/src/com/engine/salary/service/impl/AddUpSituationServiceImpl.java @@ -612,7 +612,7 @@ public class AddUpSituationServiceImpl extends Service implements AddUpSituation nextTaxYearMonth = nextTaxYearMonth.plusMonths(1); nextTaxYearMonthStr = nextTaxYearMonth.format(SalaryDateUtil.MONTH_FORMATTER); } - List salaryAcctEmployees = getAddUpDeductionService(user).getAccountedEmployeeData(nextTaxYearMonthStr); + List salaryAcctEmployees = getAddUpDeductionService(user).getAccountedEmployeeDataByTaxYearMonth(nextTaxYearMonthStr); //税款所属期 Date taxYearMonth = SalaryDateUtil.localDateToDate(LocalDate.parse(taxYearMonthStr + "-01", SalaryDateUtil.DATE_FORMATTER)); From 6a7e5eacdc41ffeee0c4bdf7e5c56f2863dbfdab Mon Sep 17 00:00:00 2001 From: Harryxzy Date: Thu, 16 Mar 2023 11:17:18 +0800 Subject: [PATCH 07/33] =?UTF-8?q?=E7=A4=BE=E4=BF=9D=E7=A6=8F=E5=88=A9?= =?UTF-8?q?=E5=8F=B0=E8=B4=A6=E5=90=88=E8=AE=A1=E5=88=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../salary/service/SIAccountService.java | 9 +++ .../service/impl/SIAccountServiceImpl.java | 75 ++++++++++++++++++- .../salary/web/SIAccountController.java | 19 +++++ 3 files changed, 101 insertions(+), 2 deletions(-) diff --git a/src/com/engine/salary/service/SIAccountService.java b/src/com/engine/salary/service/SIAccountService.java index 7308f745a..14ce42d15 100644 --- a/src/com/engine/salary/service/SIAccountService.java +++ b/src/com/engine/salary/service/SIAccountService.java @@ -275,5 +275,14 @@ public interface SIAccountService { * 将福利台账-补差模板导入的数据更新到数据库 */ Map importBalanceInsuranceDetail(InsuranceAcctImportParam importParam); + + + /** + * 合计行 + * + * @param queryParam + * @return + */ + Map listCommonSum(InsuranceAccountDetailParam queryParam); } diff --git a/src/com/engine/salary/service/impl/SIAccountServiceImpl.java b/src/com/engine/salary/service/impl/SIAccountServiceImpl.java index 6e0c439e5..47d8d7e4c 100644 --- a/src/com/engine/salary/service/impl/SIAccountServiceImpl.java +++ b/src/com/engine/salary/service/impl/SIAccountServiceImpl.java @@ -77,7 +77,6 @@ import weaver.hrm.User; import java.io.InputStream; import java.math.BigDecimal; -import java.time.LocalDateTime; import java.util.*; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; @@ -2834,7 +2833,79 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { } return apidatas; } - + + @Override + public Map listCommonSum(InsuranceAccountDetailParam queryParam) { + + Long employeeId = (long) user.getUID(); + Map datas = new HashMap<>(); + + // 正常缴纳列表 + queryParam.setPageSize(10000000); + PageInfo pageInfo = getSiAccountBiz(user).listCommonPage(queryParam); + List insuranceAccountDetailPOS = pageInfo.getList(); + // 数据组装 + List> records = getService(user).buildCommonRecords(insuranceAccountDetailPOS, employeeId); + Map maxSizeRecord = records.stream().reduce(new HashMap<>(), (a, b) -> a.size() > b.size() ? a : b); + // 获取需要统计的列 + String[] keys = {"Base", "Com", "Sum", "Per", "total"}; + List numKeys = new ArrayList<>(); + for(String key : maxSizeRecord.keySet()){ + if(StringUtils.containsAny(key,keys)){ + numKeys.add(key); + } + } + Map sumRow = new HashMap<>(); + for(String numKey : numKeys){ + BigDecimal value = new BigDecimal(0); + for(Map record : records){ + value = value.add( new BigDecimal(record.get(numKey) == null ? "0" : record.get(numKey).toString()) ); + } + sumRow.put(numKey,value); + } + datas.put("sumRow", sumRow); + return datas; +// records.stream().collect(Collectors.groupingBy(record -> record.getk)) +// +// +// .collect(Collectors.groupingBy(Main::getMapKey, Collectors.counting())); +// records.stream().flatMap(Collectors.toList()); +// +// +// // 查询薪资核算人员 +// List salaryAcctEmployeePOS = getSalaryAcctEmployeeService(user).listByResultQueryParam(queryParam); +// +// if (CollectionUtils.isEmpty(salaryAcctEmployeePOS)) { +// return null; +// } +// // 查询薪资核算记录 +// SalaryAcctRecordPO salaryAcctRecordPO = getSalaryAcctRecordService(user).getById(queryParam.getSalaryAcctRecordId()); +// if (Objects.isNull(salaryAcctRecordPO)) { +// throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(98747, "薪资核算记录不存在或已被删除")); +// } +// // 查询薪资核算所用薪资账套的薪资项目 +// List salarySobItemPOS = getSalarySobItemService(user).listBySalarySobId(salaryAcctRecordPO.getSalarySobId()); +// Set salaryItemIds = SalaryEntityUtil.properties(salarySobItemPOS, SalarySobItemPO::getSalaryItemId); +// List salaryItemPOS = getSalaryItemService(user).listByIds(salaryItemIds); +// // 查询薪资核算结果 +// Set salaryAcctEmployeeIds = SalaryEntityUtil.properties(salaryAcctEmployeePOS, SalaryAcctEmployeePO::getId); +// List salaryAcctResultPOS = listBySalaryAcctEmployeeIds(salaryAcctEmployeeIds); +// +// Map map = new HashMap<>(); +// Map> acctResultMap = SalaryEntityUtil.group2Map(salaryAcctResultPOS, SalaryAcctResultPO::getSalaryItemId); +// salaryItemPOS.stream().filter(item -> SalaryDataTypeEnum.NUMBER.getValue().equals(item.getDataType())).forEach(item -> { +// BigDecimal sum = Optional.ofNullable(acctResultMap.get(item.getId())) +// .orElse(new ArrayList<>()) +// .stream() +// .map(SalaryAcctResultPO::getResultValue) +// .filter(NumberUtils::isCreatable) +// .map(BigDecimal::new) +// .reduce(BigDecimal.ZERO, BigDecimal::add); +// map.put(item.getId().toString(), SalaryAcctFormulaBO.roundResultValue(sum.toString(), item, Collections.emptyList(), Collections.emptyMap())); +// }); +// return null; + } + /** * 检查补差数据中的福利缴纳费用相关福利类别,是否在正常缴纳中有设置缴纳 * @param po diff --git a/src/com/engine/salary/web/SIAccountController.java b/src/com/engine/salary/web/SIAccountController.java index 2710ac14e..2ea27a93a 100644 --- a/src/com/engine/salary/web/SIAccountController.java +++ b/src/com/engine/salary/web/SIAccountController.java @@ -97,6 +97,25 @@ public class SIAccountController { return new ResponseResult>(user).run(getService(user)::listCommonPage, insuranceAccountDetailParam); } + + /** + * 获取正常缴纳列表合计行 + * + * @param request + * @param response + * @param insuranceAccountDetailParam + * @return + */ + @POST + @Path("/detail/common/list/sum") + @Produces(MediaType.APPLICATION_JSON) + public String commonListSum(@Context HttpServletRequest request, @Context HttpServletResponse response, + @RequestBody InsuranceAccountDetailParam insuranceAccountDetailParam) { + User user = HrmUserVarify.getUser(request, response); + return new ResponseResult>(user).run(getService(user)::listCommonSum, insuranceAccountDetailParam); + } + + /** * 根据姓名获取正常缴纳列表 * From cdf7dd916b53602d330d2d3d56a8a4dee04d86f9 Mon Sep 17 00:00:00 2001 From: Harryxzy Date: Thu, 16 Mar 2023 11:37:43 +0800 Subject: [PATCH 08/33] =?UTF-8?q?=E5=BE=80=E6=9C=9F=E7=B4=AF=E8=AE=A1?= =?UTF-8?q?=E6=83=85=E5=86=B5=E7=BC=96=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../engine/salary/service/impl/AddUpSituationServiceImpl.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/com/engine/salary/service/impl/AddUpSituationServiceImpl.java b/src/com/engine/salary/service/impl/AddUpSituationServiceImpl.java index efb54bfea..f3b04ecf1 100644 --- a/src/com/engine/salary/service/impl/AddUpSituationServiceImpl.java +++ b/src/com/engine/salary/service/impl/AddUpSituationServiceImpl.java @@ -875,7 +875,7 @@ public class AddUpSituationServiceImpl extends Service implements AddUpSituation nextTaxYearMonth = nextTaxYearMonth.plusMonths(1); nextTaxYearMonthStr = nextTaxYearMonth.format(SalaryDateUtil.MONTH_FORMATTER); } - List salaryAcctEmployees = getAddUpDeductionService(user).getAccountedEmployeeData(nextTaxYearMonthStr); + List salaryAcctEmployees = getAddUpDeductionService(user).getAccountedEmployeeDataByTaxYearMonth(nextTaxYearMonthStr); // 判断是否有核算过 if (CollectionUtils.isNotEmpty(salaryAcctEmployees) && !Objects.equals(taxYearMonthStr.split("-")[1], "12")) { From dc2cb5f44861fc65b1bf3eeb3eb0c90342d89c15 Mon Sep 17 00:00:00 2001 From: sy Date: Thu, 16 Mar 2023 13:51:41 +0800 Subject: [PATCH 09/33] =?UTF-8?q?=E8=96=AA=E9=85=AC=E7=B3=BB=E7=BB=9F-?= =?UTF-8?q?=E8=96=AA=E8=B5=84=E6=A0=B8=E7=AE=97=EF=BC=8C=E8=96=AA=E8=B5=84?= =?UTF-8?q?=E6=A0=B8=E7=AE=97=E5=92=8C=E8=96=AA=E8=B5=84=E6=A1=A3=E6=A1=88?= =?UTF-8?q?=E5=AF=BC=E5=87=BAexcel=E9=80=9A=E7=94=A8=E6=A0=BC=E5=BC=8F?= =?UTF-8?q?=E6=94=B9=E9=80=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/SalaryAcctExcelService.java | 3 + .../impl/SalaryAcctExcelServiceImpl.java | 57 +++++++++++++++---- .../impl/SalaryArchiveExcelServiceImpl.java | 8 +-- .../impl/SalaryArchiveServiceImpl.java | 4 +- .../salary/util/excel/ExcelParseHelper.java | 46 +++++++++++++++ .../salary/util/excel/ExcelUtilPlus.java | 57 +++++++++++++++++-- .../salary/web/SalaryAcctController.java | 2 +- 7 files changed, 154 insertions(+), 23 deletions(-) diff --git a/src/com/engine/salary/service/SalaryAcctExcelService.java b/src/com/engine/salary/service/SalaryAcctExcelService.java index de731313b..444451125 100644 --- a/src/com/engine/salary/service/SalaryAcctExcelService.java +++ b/src/com/engine/salary/service/SalaryAcctExcelService.java @@ -105,6 +105,9 @@ public interface SalaryAcctExcelService { Map preview(SalaryAcctImportParam param); + Map previewImportSalaryAcctResult(SalaryAcctImportParam param); + + // // /** // * 薪资核算结果校验异常导出 diff --git a/src/com/engine/salary/service/impl/SalaryAcctExcelServiceImpl.java b/src/com/engine/salary/service/impl/SalaryAcctExcelServiceImpl.java index 7a0fdb66d..ad6d262ac 100644 --- a/src/com/engine/salary/service/impl/SalaryAcctExcelServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryAcctExcelServiceImpl.java @@ -166,8 +166,8 @@ public class SalaryAcctExcelServiceImpl extends Service implements SalaryAcctExc // 3.表数据 List> lists = convert2ExcelRow(salaryAcctEmployees); rows.addAll(lists); - return ExcelUtil.genWorkbookV2(rows, sheetName); - +// return ExcelUtil.genWorkbookV2(rows, sheetName); + return ExcelUtilPlus.genWorkbookV2(rows, sheetName); } @@ -199,8 +199,8 @@ public class SalaryAcctExcelServiceImpl extends Service implements SalaryAcctExc // 3.表数据 List> lists = convert2ExcelRow(salaryAcctEmployees); rows.addAll(lists); - return ExcelUtil.genWorkbookV2(rows, sheetName); - +// return ExcelUtil.genWorkbookV2(rows, sheetName); + return ExcelUtilPlus.genWorkbookV2(rows, sheetName); } @Override @@ -231,7 +231,8 @@ public class SalaryAcctExcelServiceImpl extends Service implements SalaryAcctExc // 3.表数据 List> lists = convert2ExcelRow(salaryAcctEmployees); rows.addAll(lists); - return ExcelUtil.genWorkbookV2(rows, sheetName); +// return ExcelUtil.genWorkbookV2(rows, sheetName); + return ExcelUtilPlus.genWorkbookV2(rows, sheetName); } private List> convert2ExcelRow(List salaryAcctEmployees) { @@ -549,7 +550,8 @@ public class SalaryAcctExcelServiceImpl extends Service implements SalaryAcctExc String sheetName = "线下对比结果"; - return ExcelUtil.genWorkbookV2(rows, sheetName); +// return ExcelUtil.genWorkbookV2(rows, sheetName); + return ExcelUtilPlus.genWorkbookV2(rows, sheetName); } @@ -597,7 +599,8 @@ public class SalaryAcctExcelServiceImpl extends Service implements SalaryAcctExc rows.add(headerList); String sheetName = "线下对比结果导入模板"; - return ExcelUtil.genWorkbookV2(rows, sheetName); +// return ExcelUtil.genWorkbookV2(rows, sheetName); + return ExcelUtilPlus.genWorkbookV2(rows, sheetName); } public Map importSalaryAcctResult(SalaryAcctImportParam param) { @@ -630,6 +633,27 @@ public class SalaryAcctExcelServiceImpl extends Service implements SalaryAcctExc } } + @Override + public Map previewImportSalaryAcctResult(SalaryAcctImportParam param) { + + //1、参数校验 + ValidUtil.doValidator(param); + + Map map = new HashMap<>(); + + InputStream fileInputStream = null; + try { + fileInputStream = ImageFileManager.getInputStreamById(Integer.parseInt(param.getImageId())); + Sheet sheet = ExcelSupport.parseFile(fileInputStream, 0, EXCEL_TYPE_XLSX); + map.put("headers", ExcelSupport.getSheetHeader(sheet, 1)); + map.put("list", ExcelParseHelper.parse2List(sheet, 2, 1)); + return map; + + } finally { + IOUtils.closeQuietly(fileInputStream); + } + } + private Map batchImport(SalaryAcctImportParam param, String importType) { Map apidatas = new HashMap(); ValidUtil.doValidator(param); @@ -703,10 +727,23 @@ public class SalaryAcctExcelServiceImpl extends Service implements SalaryAcctExc // 存在错误的那行数据 List> errorDatas = Lists.newArrayList(); // 表头 - List headers = ExcelSupport.getSheetHeader(sheet, 0); +// List headers = ExcelSupport.getSheetHeader(sheet, 0); + List headers; + if (StringUtils.equals("importSalaryAcctResult", importType)) { + headers = ExcelSupport.getSheetHeader(sheet, 1); + } else { + headers = ExcelSupport.getSheetHeader(sheet, 0); + } + + // 处理数值 +// List> data = ExcelParseHelper.parse2Map(sheet, 1); + List> data; + if (StringUtils.equals("importSalaryAcctResult", importType)) { + data = ExcelParseHelper.parse2Map(sheet, 2, 1); + } else { + data = ExcelParseHelper.parse2Map(sheet, 1); + } - // 处理数值 - List> data = ExcelParseHelper.parse2Map(sheet, 1); if (CollectionUtils.isEmpty(headers)) { throw new RuntimeException("表头为空"); } diff --git a/src/com/engine/salary/service/impl/SalaryArchiveExcelServiceImpl.java b/src/com/engine/salary/service/impl/SalaryArchiveExcelServiceImpl.java index 1065192e5..0c94107f6 100644 --- a/src/com/engine/salary/service/impl/SalaryArchiveExcelServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryArchiveExcelServiceImpl.java @@ -27,10 +27,7 @@ import com.engine.salary.service.*; import com.engine.salary.util.SalaryEntityUtil; import com.engine.salary.util.SalaryI18nUtil; import com.engine.salary.util.db.MapperProxyFactory; -import com.engine.salary.util.excel.ExcelComment; -import com.engine.salary.util.excel.ExcelParseHelper; -import com.engine.salary.util.excel.ExcelSupport; -import com.engine.salary.util.excel.ExcelUtil; +import com.engine.salary.util.excel.*; import com.google.common.collect.Lists; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; @@ -406,7 +403,8 @@ public class SalaryArchiveExcelServiceImpl extends Service implements SalaryArch // SalaryArchiveExcelBO.createExcelComment(excelComments, SalaryI18nUtil.getI18nLabel(109736, "格式样例为'2022-01-01'、'2022/1/1'"), 0, 0, i + 1, i + 1); } - return ExcelUtil.genWorkbookV2(rows, finalNameI18n, excelComments); +// return ExcelUtil.genWorkbookV2(rows, finalNameI18n, excelComments); + return ExcelUtilPlus.genWorkbookV2(rows, finalNameI18n, excelComments); } // /** diff --git a/src/com/engine/salary/service/impl/SalaryArchiveServiceImpl.java b/src/com/engine/salary/service/impl/SalaryArchiveServiceImpl.java index 68a5209b1..9a0874ee0 100644 --- a/src/com/engine/salary/service/impl/SalaryArchiveServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryArchiveServiceImpl.java @@ -38,6 +38,7 @@ import com.engine.salary.util.db.MapperProxyFactory; import com.engine.salary.util.excel.ExcelParseHelper; import com.engine.salary.util.excel.ExcelSupport; import com.engine.salary.util.excel.ExcelUtil; +import com.engine.salary.util.excel.ExcelUtilPlus; import com.engine.salary.util.page.PageInfo; import com.engine.salary.util.page.SalaryPageUtil; import com.engine.salary.util.valid.ValidUtil; @@ -520,7 +521,8 @@ public class SalaryArchiveServiceImpl extends Service implements SalaryArchiveSe }); // 3.表数据 - return ExcelUtil.genWorkbookV2(rows, sheetName); +// return ExcelUtil.genWorkbookV2(rows, sheetName); + return ExcelUtilPlus.genWorkbookV2(rows, sheetName); } diff --git a/src/com/engine/salary/util/excel/ExcelParseHelper.java b/src/com/engine/salary/util/excel/ExcelParseHelper.java index 6f7fafb01..c25d8b08d 100644 --- a/src/com/engine/salary/util/excel/ExcelParseHelper.java +++ b/src/com/engine/salary/util/excel/ExcelParseHelper.java @@ -174,6 +174,31 @@ public class ExcelParseHelper { return result; } + /** + * 将sheet数据转为map + * + * @param rowIndex 从哪行开始解析 + * @param headerRowIndex 抽取列数的参考行 + * @return + */ + public static List> parse2Map(Sheet sheet, int rowIndex, int headerRowIndex) { + int rowCount = sheet.getPhysicalNumberOfRows(); // 总行数 + int cellCount = sheet.getRow(headerRowIndex).getPhysicalNumberOfCells(); // 总列数 + + List sheetHeader = ExcelSupport.getSheetHeader(sheet, headerRowIndex); + + List> result = new ArrayList<>(); + for (; rowIndex < rowCount; rowIndex++) { + Map cellResult = new HashMap<>(); + for (int j = 0; j < cellCount; j++) { + String key = sheetHeader.get(j); + cellResult.put(key, ExcelSupport.getCellValue(sheet, rowIndex, j)); + } + result.add(cellResult); + } + return result; + } + /** * 将sheet数据转为List * @@ -195,6 +220,27 @@ public class ExcelParseHelper { return result; } + /** + * 将sheet数据转为List + * @param rowIndex 从哪行开始解析 + * @param headerRowIndex 抽取列数的参考行 + * @return + */ + public static List> parse2List(Sheet sheet, int rowIndex, int headerRowIndex) { + int rowCount = sheet.getPhysicalNumberOfRows(); // 总行数 + int cellCount = sheet.getRow(headerRowIndex).getPhysicalNumberOfCells(); // 总列数 + + List> result = new ArrayList>(); + for (; rowIndex < rowCount; rowIndex++) { + List cellResult = new ArrayList(); + for (int j = 0; j < cellCount; j++) { + cellResult.add(ExcelSupport.getCellValue(sheet, rowIndex, j)); + } + result.add(cellResult); + } + return result; + } + /** * 为对象的每一个属性赋值 diff --git a/src/com/engine/salary/util/excel/ExcelUtilPlus.java b/src/com/engine/salary/util/excel/ExcelUtilPlus.java index b3b2768e5..939e6e78c 100644 --- a/src/com/engine/salary/util/excel/ExcelUtilPlus.java +++ b/src/com/engine/salary/util/excel/ExcelUtilPlus.java @@ -74,12 +74,18 @@ public class ExcelUtilPlus { // 设置title样式 XSSFCellStyle titleCellStyle = workbook.createCellStyle(); XSSFFont titleFont = workbook.createFont(); + titleFont.setBold(true); titleFont.setFontName("仿宋"); titleFont.setFontHeightInPoints((short) 15); titleCellStyle.setFont(titleFont); titleCellStyle.setAlignment(HorizontalAlignment.CENTER); - titleCellStyle.setFillForegroundColor(IndexedColors.GREEN.getIndex());//背景色 + titleCellStyle.setFillForegroundColor(IndexedColors.GREY_25_PERCENT.getIndex());//背景色 titleCellStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND); + titleCellStyle.setVerticalAlignment(VerticalAlignment.CENTER); + titleCellStyle.setBorderLeft(BorderStyle.THIN); + titleCellStyle.setBorderRight(BorderStyle.THIN); + titleCellStyle.setBorderTop(BorderStyle.THIN); + titleCellStyle.setBorderBottom(BorderStyle.THIN); // 设置主体样式 @@ -89,6 +95,10 @@ public class ExcelUtilPlus { font.setFontHeightInPoints((short) 10);// 设置字体大小 cellStyle.setFont(font);// 选择需要用到的字体格式 cellStyle.setWrapText(true); + cellStyle.setBorderLeft(BorderStyle.THIN); + cellStyle.setBorderRight(BorderStyle.THIN); + cellStyle.setBorderTop(BorderStyle.THIN); + cellStyle.setBorderBottom(BorderStyle.THIN); XSSFSheet sheet = workbook.createSheet(sheetName); //自适应宽度 @@ -97,6 +107,11 @@ public class ExcelUtilPlus { sheet.setDefaultColumnWidth(20); //默认行高 sheet.setDefaultRowHeightInPoints(18); + //遍历设置列宽 + List header = rowList.get(0); + for (int i = 0; i < header.size(); i++) { + sheet.setColumnWidth(i,Math.max(12, header.get(i).toString().length()*4)*256); + } for (int rowIndex = 0; rowIndex < rowList.size(); rowIndex++) { List infoList = rowList.get(rowIndex); @@ -134,12 +149,18 @@ public class ExcelUtilPlus { // 设置title样式 XSSFCellStyle titleCellStyle = workbook.createCellStyle(); XSSFFont titleFont = workbook.createFont(); + titleFont.setBold(true); titleFont.setFontName("仿宋"); titleFont.setFontHeightInPoints((short) 15); titleCellStyle.setFont(titleFont); titleCellStyle.setAlignment(HorizontalAlignment.CENTER); - titleCellStyle.setFillForegroundColor(IndexedColors.GREEN.getIndex());//背景色 + titleCellStyle.setFillForegroundColor(IndexedColors.GREY_25_PERCENT.getIndex());//背景色 titleCellStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND); + titleCellStyle.setVerticalAlignment(VerticalAlignment.CENTER); + titleCellStyle.setBorderLeft(BorderStyle.THIN); + titleCellStyle.setBorderRight(BorderStyle.THIN); + titleCellStyle.setBorderTop(BorderStyle.THIN); + titleCellStyle.setBorderBottom(BorderStyle.THIN); // 设置主体样式 @@ -149,6 +170,10 @@ public class ExcelUtilPlus { font.setFontHeightInPoints((short) 10);// 设置字体大小 cellStyle.setFont(font);// 选择需要用到的字体格式 cellStyle.setWrapText(true); + cellStyle.setBorderLeft(BorderStyle.THIN); + cellStyle.setBorderRight(BorderStyle.THIN); + cellStyle.setBorderTop(BorderStyle.THIN); + cellStyle.setBorderBottom(BorderStyle.THIN); XSSFSheet sheet = workbook.createSheet(sheetName); //自适应宽度 @@ -158,6 +183,12 @@ public class ExcelUtilPlus { //默认行高 sheet.setDefaultRowHeightInPoints(18); + //遍历设置列宽 + List header = rowList.get(0); + for (int i = 0; i < header.size(); i++) { + sheet.setColumnWidth(i,Math.max(12, header.get(i).toString().length()*4)*256); + } + for (int rowIndex = 0; rowIndex < rowList.size(); rowIndex++) { List infoList = rowList.get(rowIndex); XSSFRow row = sheet.createRow(rowIndex); @@ -202,10 +233,11 @@ public class ExcelUtilPlus { // 设置title样式 XSSFCellStyle titleCellStyle = workbook.createCellStyle(); XSSFFont titleFont = workbook.createFont(); + titleFont.setBold(true); titleFont.setFontName("仿宋"); titleFont.setFontHeightInPoints((short) 15); titleCellStyle.setFont(titleFont); - titleCellStyle.setAlignment(HorizontalAlignment.LEFT); + titleCellStyle.setAlignment(HorizontalAlignment.CENTER); titleCellStyle.setFillForegroundColor(IndexedColors.GREY_25_PERCENT.getIndex());//背景色 titleCellStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND); titleCellStyle.setVerticalAlignment(VerticalAlignment.CENTER); @@ -214,6 +246,17 @@ public class ExcelUtilPlus { titleCellStyle.setBorderTop(BorderStyle.THIN); titleCellStyle.setBorderBottom(BorderStyle.THIN); + XSSFCellStyle childTitleCellStyle = workbook.createCellStyle(); + childTitleCellStyle.setFont(titleFont); + childTitleCellStyle.setAlignment(HorizontalAlignment.LEFT); + childTitleCellStyle.setFillForegroundColor(IndexedColors.GREY_25_PERCENT.getIndex());//背景色 + childTitleCellStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND); + childTitleCellStyle.setVerticalAlignment(VerticalAlignment.CENTER); + childTitleCellStyle.setBorderLeft(BorderStyle.THIN); + childTitleCellStyle.setBorderRight(BorderStyle.THIN); + childTitleCellStyle.setBorderTop(BorderStyle.THIN); + childTitleCellStyle.setBorderBottom(BorderStyle.THIN); + // 设置主体样式 @@ -234,6 +277,7 @@ public class ExcelUtilPlus { redFont.setFontName("宋体"); redFont.setFontHeightInPoints((short) 10);// 设置字体大小 redFont.setColor(new XSSFColor(new Color(0xFF3333), null)); + redFont.setBold(true); redCellStyle.setWrapText(true); redCellStyle.setFont(redFont);// 选择需要用到的字体格式 @@ -265,9 +309,10 @@ public class ExcelUtilPlus { rowZeroCell.setCellValue(columnGroupItem.getText().toString()); rowZeroCell.setCellStyle(titleCellStyle); XSSFCell rowOneCell = row1.createCell(startIndex, CellType.STRING); + rowOneCell.setCellValue(columnGroupItem.getText().toString()); rowOneCell.setCellStyle(titleCellStyle); //设置列宽 - sheet.setColumnWidth(startIndex,columnGroupItem.getText().length()*4*256); + sheet.setColumnWidth(startIndex,Math.max(12, columnGroupItem.getText().length()*4)*256); startIndex++; } else { List childrenList = columnGroupItem.getChildren(); @@ -279,7 +324,7 @@ public class ExcelUtilPlus { XSSFCell cell = row0.createCell(startIndex, CellType.STRING); cell.setCellValue(columnGroupItem.getText().toString()); - cell.setCellStyle(titleCellStyle); + cell.setCellStyle(childTitleCellStyle); for (int j = 0; j < childrenList.size(); j++) { WeaTableColumnGroup childrenItem = (WeaTableColumnGroup) childrenList.get(j); @@ -288,7 +333,7 @@ public class ExcelUtilPlus { subHeader.setCellValue(childrenItem.getText().toString()); subHeader.setCellStyle(titleCellStyle); //设置列宽 - sheet.setColumnWidth(startIndex + j,childrenItem.getText().length()*4*256); + sheet.setColumnWidth(startIndex + j,Math.max(12, childrenItem.getText().length()*4)*256); } startIndex += childrenList.size(); diff --git a/src/com/engine/salary/web/SalaryAcctController.java b/src/com/engine/salary/web/SalaryAcctController.java index 8d2db04ef..548553509 100644 --- a/src/com/engine/salary/web/SalaryAcctController.java +++ b/src/com/engine/salary/web/SalaryAcctController.java @@ -537,7 +537,7 @@ public class SalaryAcctController { @Produces(MediaType.APPLICATION_JSON) public String importSalaryAcctResultPreview(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody SalaryAcctImportParam param) { User user = HrmUserVarify.getUser(request, response); - return new ResponseResult>(user).run(getSalaryAcctExcelService(user)::preview, param); + return new ResponseResult>(user).run(getSalaryAcctExcelService(user)::previewImportSalaryAcctResult, param); } // **********************************薪资核算结果 end*********************************/ From e1b4927eaa19499cba48b545fb3abbd5486aea3c Mon Sep 17 00:00:00 2001 From: Harryxzy Date: Thu, 16 Mar 2023 14:52:08 +0800 Subject: [PATCH 10/33] =?UTF-8?q?=E5=88=A0=E9=99=A4=E5=A4=9A=E4=BD=99?= =?UTF-8?q?=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/impl/SIAccountServiceImpl.java | 39 ------------------- 1 file changed, 39 deletions(-) diff --git a/src/com/engine/salary/service/impl/SIAccountServiceImpl.java b/src/com/engine/salary/service/impl/SIAccountServiceImpl.java index 47d8d7e4c..2d28a6d1e 100644 --- a/src/com/engine/salary/service/impl/SIAccountServiceImpl.java +++ b/src/com/engine/salary/service/impl/SIAccountServiceImpl.java @@ -2865,45 +2865,6 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { } datas.put("sumRow", sumRow); return datas; -// records.stream().collect(Collectors.groupingBy(record -> record.getk)) -// -// -// .collect(Collectors.groupingBy(Main::getMapKey, Collectors.counting())); -// records.stream().flatMap(Collectors.toList()); -// -// -// // 查询薪资核算人员 -// List salaryAcctEmployeePOS = getSalaryAcctEmployeeService(user).listByResultQueryParam(queryParam); -// -// if (CollectionUtils.isEmpty(salaryAcctEmployeePOS)) { -// return null; -// } -// // 查询薪资核算记录 -// SalaryAcctRecordPO salaryAcctRecordPO = getSalaryAcctRecordService(user).getById(queryParam.getSalaryAcctRecordId()); -// if (Objects.isNull(salaryAcctRecordPO)) { -// throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(98747, "薪资核算记录不存在或已被删除")); -// } -// // 查询薪资核算所用薪资账套的薪资项目 -// List salarySobItemPOS = getSalarySobItemService(user).listBySalarySobId(salaryAcctRecordPO.getSalarySobId()); -// Set salaryItemIds = SalaryEntityUtil.properties(salarySobItemPOS, SalarySobItemPO::getSalaryItemId); -// List salaryItemPOS = getSalaryItemService(user).listByIds(salaryItemIds); -// // 查询薪资核算结果 -// Set salaryAcctEmployeeIds = SalaryEntityUtil.properties(salaryAcctEmployeePOS, SalaryAcctEmployeePO::getId); -// List salaryAcctResultPOS = listBySalaryAcctEmployeeIds(salaryAcctEmployeeIds); -// -// Map map = new HashMap<>(); -// Map> acctResultMap = SalaryEntityUtil.group2Map(salaryAcctResultPOS, SalaryAcctResultPO::getSalaryItemId); -// salaryItemPOS.stream().filter(item -> SalaryDataTypeEnum.NUMBER.getValue().equals(item.getDataType())).forEach(item -> { -// BigDecimal sum = Optional.ofNullable(acctResultMap.get(item.getId())) -// .orElse(new ArrayList<>()) -// .stream() -// .map(SalaryAcctResultPO::getResultValue) -// .filter(NumberUtils::isCreatable) -// .map(BigDecimal::new) -// .reduce(BigDecimal.ZERO, BigDecimal::add); -// map.put(item.getId().toString(), SalaryAcctFormulaBO.roundResultValue(sum.toString(), item, Collections.emptyList(), Collections.emptyMap())); -// }); -// return null; } /** From 3304ffdbd57edb386b6a3ab8e10804dfe876f1ae Mon Sep 17 00:00:00 2001 From: Harryxzy Date: Thu, 16 Mar 2023 16:19:23 +0800 Subject: [PATCH 11/33] =?UTF-8?q?=E8=96=AA=E8=B5=84=E6=A0=B8=E7=AE=97?= =?UTF-8?q?=E5=AF=BC=E5=85=A5=EF=BC=8C=E6=B7=BB=E5=8A=A0=E8=A1=A8=E5=A4=B4?= =?UTF-8?q?=E5=AD=97=E6=AE=B5=E7=BC=93=E5=AD=98=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../salary/constant/SalaryItemConstant.java | 7 +++++++ .../salaryacct/dto/SalaryAcctImportFieldDTO.java | 4 ++++ .../salaryacct/param/SalaryAcctImportParam.java | 5 +++++ .../salary/service/SalaryAcctExcelService.java | 2 ++ .../service/impl/SalaryAcctExcelServiceImpl.java | 15 ++++++++++++++- .../engine/salary/web/SalaryAcctController.java | 10 ++++++++++ 6 files changed, 42 insertions(+), 1 deletion(-) diff --git a/src/com/engine/salary/constant/SalaryItemConstant.java b/src/com/engine/salary/constant/SalaryItemConstant.java index 07e9a7bbc..790a288cb 100644 --- a/src/com/engine/salary/constant/SalaryItemConstant.java +++ b/src/com/engine/salary/constant/SalaryItemConstant.java @@ -14,4 +14,11 @@ public class SalaryItemConstant { * 列表中薪资项目动态列后缀标识 */ public static final String DYNAMIC_SUFFIX = "_salaryItem"; + + /** + * 薪资核算导入缓存表头字段key + */ + public static final String RESULT_IMPORT_FIELD_SIGN="_salaryAcctResultImportFieldSign"; + + } diff --git a/src/com/engine/salary/entity/salaryacct/dto/SalaryAcctImportFieldDTO.java b/src/com/engine/salary/entity/salaryacct/dto/SalaryAcctImportFieldDTO.java index b51422d68..d954e319a 100644 --- a/src/com/engine/salary/entity/salaryacct/dto/SalaryAcctImportFieldDTO.java +++ b/src/com/engine/salary/entity/salaryacct/dto/SalaryAcctImportFieldDTO.java @@ -6,6 +6,7 @@ import lombok.Data; import lombok.NoArgsConstructor; import java.util.Collection; +import java.util.List; /** * 薪资核算导入时生成导入模板的薪资项目 @@ -30,6 +31,9 @@ public class SalaryAcctImportFieldDTO { //输入项 private Collection inputItems; + // 缓存勾选项目 + private List checkItems; + @Data @Builder @NoArgsConstructor diff --git a/src/com/engine/salary/entity/salaryacct/param/SalaryAcctImportParam.java b/src/com/engine/salary/entity/salaryacct/param/SalaryAcctImportParam.java index 0c17eb0b7..21201a6d5 100644 --- a/src/com/engine/salary/entity/salaryacct/param/SalaryAcctImportParam.java +++ b/src/com/engine/salary/entity/salaryacct/param/SalaryAcctImportParam.java @@ -6,6 +6,8 @@ import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; +import java.util.List; + /** * *

Copyright: Copyright (c) 2022

@@ -28,4 +30,7 @@ public class SalaryAcctImportParam { @DataCheck(require = true,message = "薪资核算记录id为空") Long salaryAcctRecordId; + // 导入表单字段缓存项目 + List salaryItems; + } diff --git a/src/com/engine/salary/service/SalaryAcctExcelService.java b/src/com/engine/salary/service/SalaryAcctExcelService.java index de731313b..253b19156 100644 --- a/src/com/engine/salary/service/SalaryAcctExcelService.java +++ b/src/com/engine/salary/service/SalaryAcctExcelService.java @@ -105,6 +105,8 @@ public interface SalaryAcctExcelService { Map preview(SalaryAcctImportParam param); + void cacheImportField(List salaryItems); + // // /** // * 薪资核算结果校验异常导出 diff --git a/src/com/engine/salary/service/impl/SalaryAcctExcelServiceImpl.java b/src/com/engine/salary/service/impl/SalaryAcctExcelServiceImpl.java index 732adbeb9..fd09e74fd 100644 --- a/src/com/engine/salary/service/impl/SalaryAcctExcelServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryAcctExcelServiceImpl.java @@ -1,11 +1,13 @@ package com.engine.salary.service.impl; import com.api.formmode.mybatis.util.SqlProxyHandle; +import com.cloudstore.dev.api.util.Util_DataCache; import com.cloudstore.eccom.pc.table.WeaTableColumn; import com.engine.common.util.ServiceUtil; import com.engine.core.impl.Service; import com.engine.salary.component.WeaTableColumnGroup; import com.engine.salary.constant.SalaryDefaultTenantConstant; +import com.engine.salary.constant.SalaryItemConstant; import com.engine.salary.entity.datacollection.DataCollectionEmployee; import com.engine.salary.entity.report.po.SalaryAcctResultReportPO; import com.engine.salary.entity.salaryacct.bo.SalaryAcctEmployeeBO; @@ -34,6 +36,7 @@ import com.engine.salary.sys.entity.po.SalarySysConfPO; import com.engine.salary.sys.enums.OpenEnum; import com.engine.salary.sys.service.SalarySysConfService; import com.engine.salary.sys.service.impl.SalarySysConfServiceImpl; +import com.engine.salary.util.JsonUtil; import com.engine.salary.util.SalaryEntityUtil; import com.engine.salary.util.SalaryI18nUtil; import com.engine.salary.util.excel.ExcelParseHelper; @@ -391,8 +394,12 @@ public class SalaryAcctExcelServiceImpl extends Service implements SalaryAcctExc .salaryItemName(salaryItemPO.getName()) .build()) .collect(Collectors.toList()); + // 缓存勾选 + String cacheKey = user.getUID() + SalaryItemConstant.RESULT_IMPORT_FIELD_SIGN; + String cacheValue = (String)Util_DataCache.getObjVal(cacheKey); + List checkItems = JsonUtil.parseList(cacheValue, Long.class) == null ? new ArrayList<>() : JsonUtil.parseList(cacheValue, Long.class); // 转换成dto - return SalaryAcctImportFieldDTO.builder().formulaItems(formulaItems).sqlItems(sqlItems).inputItems(inputItems).build(); + return SalaryAcctImportFieldDTO.builder().formulaItems(formulaItems).sqlItems(sqlItems).inputItems(inputItems).checkItems(checkItems).build(); } @Override @@ -575,6 +582,12 @@ public class SalaryAcctExcelServiceImpl extends Service implements SalaryAcctExc } } + @Override + public void cacheImportField(List salaryItems) { + String cacheKey = user.getUID() + SalaryItemConstant.RESULT_IMPORT_FIELD_SIGN; + Util_DataCache.setObjVal(cacheKey, JsonUtil.toJsonString(salaryItems)); + } + private Map batchImport(SalaryAcctImportParam param, String importType) { Map apidatas = new HashMap(); ValidUtil.doValidator(param); diff --git a/src/com/engine/salary/web/SalaryAcctController.java b/src/com/engine/salary/web/SalaryAcctController.java index 8d2db04ef..d561816bb 100644 --- a/src/com/engine/salary/web/SalaryAcctController.java +++ b/src/com/engine/salary/web/SalaryAcctController.java @@ -31,6 +31,7 @@ import java.net.URLEncoder; import java.time.LocalDate; import java.util.Arrays; import java.util.Collection; +import java.util.List; import java.util.Map; import java.util.stream.Collectors; @@ -483,6 +484,15 @@ public class SalaryAcctController { return new ResponseResult(user).run(getSalaryAcctExcelService(user)::getImportField, salaryAcctRecordId); } + // 薪资核算导入字段缓存 + @POST + @Path("/acctresult/cacheImportField") + @Produces(MediaType.APPLICATION_JSON) + public String cacheImportField(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody SalaryAcctImportParam param) { + User user = HrmUserVarify.getUser(request, response); + return new ResponseResult, String>(user).run(getSalaryAcctExcelService(user)::cacheImportField, param.getSalaryItems()); + } + //导出导入模板 @GET @Path("/acctresult/importtemplate/export") From 9f6950d8aedfcc86a15808e5e0b062e385b8cc4f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Mon, 20 Mar 2023 17:36:29 +0800 Subject: [PATCH 12/33] =?UTF-8?q?=E5=B7=A5=E8=B5=84=E5=8D=95=E5=8F=91?= =?UTF-8?q?=E6=94=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/impl/SalarySendServiceImpl.java | 42 +++++-------------- 1 file changed, 11 insertions(+), 31 deletions(-) diff --git a/src/com/engine/salary/service/impl/SalarySendServiceImpl.java b/src/com/engine/salary/service/impl/SalarySendServiceImpl.java index a84fd35dd..bb14879db 100644 --- a/src/com/engine/salary/service/impl/SalarySendServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalarySendServiceImpl.java @@ -1,11 +1,9 @@ package com.engine.salary.service.impl; -import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.api.formmode.mybatis.util.SqlProxyHandle; import com.cloudstore.dev.api.bean.MessageBean; -import com.cloudstore.dev.api.service.ServiceMessageCustom; -import com.cloudstore.dev.api.service.ServiceMessageCustomImpl; +import com.cloudstore.dev.api.bean.MessageType; import com.cloudstore.dev.api.util.Util_Message; import com.engine.common.util.ServiceUtil; import com.engine.core.impl.Service; @@ -66,6 +64,7 @@ import weaver.hrm.User; import weaver.hrm.company.SubCompanyComInfo; import weaver.hrm.resource.ResourceComInfo; +import java.io.IOException; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.math.BigDecimal; @@ -921,42 +920,23 @@ public class SalarySendServiceImpl extends Service implements SalarySendService */ private void sendPayRollEMMessage(SalarySendInfoPO po, SalaryTemplatePO template, Long employeeId) { Long id = po.getId(); - String billTitle = getBillTitle(template.getTheme(), po.getSalaryMonth(), employeeId); - String background = template.getBackground(); - + MessageType messageType = MessageType.newInstance(499); // 消息来源(见文档第四点补充 必填) Set userIdList = new HashSet<>(); // 接收人id 必填 userIdList.add(employeeId.toString()); String title = billTitle; // 标题 String context = "点击查看详情"; // 内容 String linkUrl = weaver.general.GCONST.getContextPath() + "/spa/hrmSalary/static/index.html#/main/hrmSalary/mobilepayroll?id=" + id; // PC端链接 String linkMobileUrl = weaver.general.GCONST.getContextPath() + "/spa/hrmSalary/static/index.html#/main/hrmSalary/mobilepayroll?type=phone&id=" + id; // 移动端链接 - Map map = new HashMap(); - map.put("code", "499"); - map.put("title", title); - map.put("context", context); - map.put("linkUrl", linkUrl); - map.put("linkMobileUrl", linkMobileUrl); - map.put("bizState", "0"); //在消息需要修改状态时传入,表示消息初始的状态是待处理 - map.put("targetId", "499|" + id);// 消息来源code +“|”+业务id 消息需要打上已处理标记 - map.put("userIdList", userIdList); //接收人OA系统id 第一种形式 参数是userIdList - map.put("creater", user.getUID()); //创建人OA系统id 第一种形式 参数是creater - - Map extraMap = new HashMap<>(); - extraMap.put("linkurl", linkUrl); - if (StringUtils.isNotBlank(background)) { - extraMap.put("showimage", background);//图片地址 - } else { - extraMap.put("showimage", "/hrm/hrm_e9/images/payroll.jpg?pictype=jpg");//图片地址 + try { + MessageBean messageBean = Util_Message.createMessage(messageType, userIdList, title, context, linkUrl, linkMobileUrl); + messageBean.setCreater(user.getUID());// 创建人id + messageBean.setBizState("0");// 需要修改消息为已处理等状态时传入,表示消息最初状态为待处理 + messageBean.setTargetId("499|" + id); //消息来源code +“|”+业务id需要修改消息为已处理等状态时传入 + Util_Message.store(messageBean); + } catch (IOException e) { + e.printStackTrace(); } - Map shareMap = new HashMap<>(); - shareMap.put("extra", extraMap); - Map emParams = new HashMap<>(); - emParams.put("share", shareMap); - - map.put("emParams", emParams); - ServiceMessageCustom factory = new ServiceMessageCustomImpl(); - factory.sendCustomMessageSingle(JSON.toJSONString(map)); } /** From 95cf271c8052fc306f075dacfe26889e1a407fcf Mon Sep 17 00:00:00 2001 From: Harryxzy Date: Tue, 28 Mar 2023 09:31:00 +0800 Subject: [PATCH 13/33] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E8=96=AA=E8=B5=84?= =?UTF-8?q?=E6=A1=A3=E6=A1=88=E5=AF=BC=E5=85=A5=EF=BC=8C=E9=87=8D=E5=A4=8D?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E6=8A=A5=E9=94=99=E8=A1=8C=E6=95=B0=E5=B0=91?= =?UTF-8?q?=E4=B8=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../salary/service/impl/SalaryArchiveExcelServiceImpl.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/com/engine/salary/service/impl/SalaryArchiveExcelServiceImpl.java b/src/com/engine/salary/service/impl/SalaryArchiveExcelServiceImpl.java index 1065192e5..01a75e002 100644 --- a/src/com/engine/salary/service/impl/SalaryArchiveExcelServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryArchiveExcelServiceImpl.java @@ -508,7 +508,7 @@ public class SalaryArchiveExcelServiceImpl extends Service implements SalaryArch // 初始化导入对重复记录校验 if (importHandleParam.isInit()) { Map validMap = SalaryArchiveExcelBO - .validInitImportData(isError, i, map, excelComments, errorCount, successCount, errorData, initImportData, importHandleParam); + .validInitImportData(isError, i+1, map, excelComments, errorCount, successCount, errorData, initImportData, importHandleParam); errorCount = Integer.parseInt(validMap.getOrDefault("errorCount", errorCount).toString()); successCount = Integer.parseInt(validMap.getOrDefault("successCount", successCount).toString()); } From 2dc40a7b91f7f482e5b7f25fb0854c250e029ed1 Mon Sep 17 00:00:00 2001 From: Harryxzy Date: Tue, 28 Mar 2023 10:10:54 +0800 Subject: [PATCH 14/33] =?UTF-8?q?=E5=8F=96=E6=B6=88=E5=BE=85=E5=8A=9E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mapper/archive/SalaryArchiveMapper.xml | 3 +- .../impl/SalaryArchiveServiceImpl.java | 48 +++++++++++++++---- 2 files changed, 40 insertions(+), 11 deletions(-) diff --git a/src/com/engine/salary/mapper/archive/SalaryArchiveMapper.xml b/src/com/engine/salary/mapper/archive/SalaryArchiveMapper.xml index 7382ac4b6..4a9208e7a 100644 --- a/src/com/engine/salary/mapper/archive/SalaryArchiveMapper.xml +++ b/src/com/engine/salary/mapper/archive/SalaryArchiveMapper.xml @@ -607,7 +607,8 @@ UPDATE hrsa_salary_archive - run_status='FIXED' + run_status='FIXED', + pay_end_date= null WHERE run_status = 'SUSPEND' and id IN diff --git a/src/com/engine/salary/service/impl/SalaryArchiveServiceImpl.java b/src/com/engine/salary/service/impl/SalaryArchiveServiceImpl.java index 68a5209b1..a6b726221 100644 --- a/src/com/engine/salary/service/impl/SalaryArchiveServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryArchiveServiceImpl.java @@ -1119,17 +1119,45 @@ public class SalaryArchiveServiceImpl extends Service implements SalaryArchiveSe throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(84026, "参数错误")); } - List oldList = listSome(SalaryArchivePO.builder() - .ids(ids) - .runStatus(SalaryArchiveStatusEnum.SUSPEND.getValue()) - .build()); - List unableList = oldList.stream().filter(f -> Objects.nonNull(f.getPayEndDate()) && !f.getPayEndDate().after(new Date())).collect(Collectors.toList()); - if (CollectionUtils.isNotEmpty(unableList)) { - throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(115789, "最后发薪日必须晚于今天")); - } +// List oldList = listSome(SalaryArchivePO.builder() +// .ids(ids) +// .runStatus(SalaryArchiveStatusEnum.SUSPEND.getValue()) +// .build()); +// List unableList = oldList.stream().filter(f -> Objects.nonNull(f.getPayEndDate()) && !f.getPayEndDate().after(new Date())).collect(Collectors.toList()); +// if (CollectionUtils.isNotEmpty(unableList)) { +// throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(115789, "最后发薪日必须晚于今天")); +// } +// +// // 从待停薪到定薪 +// getSalaryArchiveMapper().deleteSuspendTodo(ids); +// return StringUtils.EMPTY; - // 从待停薪到定薪 - getSalaryArchiveMapper().deleteSuspendTodo(ids); + // 获取所有个税扣缴义务人 + Collection taxAgentList = getTaxAgentService(user).listTaxAgentAndEmployeeTree(Long.valueOf(user.getUID())); + // 获取删除待停薪信息 + List list = getSalaryArchiveMapper().list(SalaryArchiveQueryParam.builder().ids(ids).build()); + if(list.size() != ids.size()){ + throw new SalaryRunTimeException("薪资档案不存在,删除失败!"); + } + Map taxAgentMap = SalaryEntityUtil.convert2Map(taxAgentList, TaxAgentManageRangeEmployeeDTO::getTaxAgentId); + // 判断删除待停薪代办的人是否在个税扣缴义务人的人员范围中 + for(SalaryArchiveListDTO dto : list){ + TaxAgentManageRangeEmployeeDTO taxAgentManageRangeEmployeeDTO = taxAgentMap.get(dto.getTaxAgentId()); + if(Objects.nonNull(taxAgentManageRangeEmployeeDTO)){ + boolean canDelete = taxAgentManageRangeEmployeeDTO.getEmployeeList().stream() + .map(TaxAgentManageRangeEmployeeDTO.TaxAgentEmployee::getEmployeeId) + .anyMatch(id -> Objects.equals(id, dto.getEmployeeId())); + if(!canDelete){ + throw new SalaryRunTimeException("个税扣缴义务人不存在或不在权限范围内,删除失败!"); + } + }else{ + throw new SalaryRunTimeException("个税扣缴义务人不存在或不在权限范围内,删除失败!"); + } + } + // 删除最后发薪日期,设置状态为发薪 + if(CollectionUtils.isNotEmpty(list)){ + getSalaryArchiveMapper().deleteSuspendTodo(list.stream().map(SalaryArchiveListDTO::getId).collect(Collectors.toList())); + } return StringUtils.EMPTY; } From 952a8e845c67d1719329c164569de4eaed34cc5f Mon Sep 17 00:00:00 2001 From: Harryxzy Date: Tue, 28 Mar 2023 11:00:18 +0800 Subject: [PATCH 15/33] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E5=90=88=E8=AE=A1?= =?UTF-8?q?=E5=88=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../engine/salary/service/impl/SIAccountServiceImpl.java | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/com/engine/salary/service/impl/SIAccountServiceImpl.java b/src/com/engine/salary/service/impl/SIAccountServiceImpl.java index 2d28a6d1e..1065453ea 100644 --- a/src/com/engine/salary/service/impl/SIAccountServiceImpl.java +++ b/src/com/engine/salary/service/impl/SIAccountServiceImpl.java @@ -2859,7 +2859,13 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { for(String numKey : numKeys){ BigDecimal value = new BigDecimal(0); for(Map record : records){ - value = value.add( new BigDecimal(record.get(numKey) == null ? "0" : record.get(numKey).toString()) ); + BigDecimal addValue = null; + if(record.get(numKey) == null || !StringUtils.isNumeric(record.get(numKey).toString())){ + addValue = new BigDecimal(0); + }else{ + addValue = new BigDecimal(record.get(numKey).toString()); + } + value = value.add(addValue); } sumRow.put(numKey,value); } From b331152d272eb6817b696fd54a3157e509dc0c92 Mon Sep 17 00:00:00 2001 From: Harryxzy Date: Tue, 28 Mar 2023 13:59:57 +0800 Subject: [PATCH 16/33] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E5=90=88=E8=AE=A1?= =?UTF-8?q?=E5=88=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/com/engine/salary/service/impl/SIAccountServiceImpl.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/com/engine/salary/service/impl/SIAccountServiceImpl.java b/src/com/engine/salary/service/impl/SIAccountServiceImpl.java index 1065453ea..9123d1974 100644 --- a/src/com/engine/salary/service/impl/SIAccountServiceImpl.java +++ b/src/com/engine/salary/service/impl/SIAccountServiceImpl.java @@ -2860,7 +2860,7 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { BigDecimal value = new BigDecimal(0); for(Map record : records){ BigDecimal addValue = null; - if(record.get(numKey) == null || !StringUtils.isNumeric(record.get(numKey).toString())){ + if(record.get(numKey) == null || StringUtils.isBlank(record.get(numKey).toString())){ addValue = new BigDecimal(0); }else{ addValue = new BigDecimal(record.get(numKey).toString()); From ef3260085f8a7e5e991a0749b5481686dde339ae Mon Sep 17 00:00:00 2001 From: Harryxzy Date: Tue, 28 Mar 2023 14:18:01 +0800 Subject: [PATCH 17/33] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E9=87=8D=E6=96=B0?= =?UTF-8?q?=E6=A0=B8=E7=AE=97=EF=BC=8C=E5=BE=80=E6=9C=9F=E7=B4=AF=E8=AE=A1?= =?UTF-8?q?=E5=88=A0=E5=A4=9A=E6=95=B0=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../salary/mapper/datacollection/AddUpSituationMapper.xml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/com/engine/salary/mapper/datacollection/AddUpSituationMapper.xml b/src/com/engine/salary/mapper/datacollection/AddUpSituationMapper.xml index 310a8c815..002e1b4fe 100644 --- a/src/com/engine/salary/mapper/datacollection/AddUpSituationMapper.xml +++ b/src/com/engine/salary/mapper/datacollection/AddUpSituationMapper.xml @@ -724,6 +724,9 @@ and tax_year_month = #{param.taxYearMonth} + + and tax_agent_id = #{param.taxAgentId} + AND employee_id IN From 2fc4560488f6af3b3a36000c45db512fc4a4c9eb Mon Sep 17 00:00:00 2001 From: Harryxzy Date: Wed, 29 Mar 2023 16:46:10 +0800 Subject: [PATCH 18/33] =?UTF-8?q?=E8=96=AA=E8=B5=84=E6=A1=A3=E6=A1=88?= =?UTF-8?q?=E6=8C=89=E7=85=A7=E5=B7=A5=E5=8F=B7=E5=AF=BC=E5=85=A5=E6=97=A0?= =?UTF-8?q?=E6=95=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../bo/SalaryArchiveExcelBO.java | 25 +++++++++++++------ .../impl/SalaryArchiveExcelServiceImpl.java | 18 +++++++++++-- 2 files changed, 33 insertions(+), 10 deletions(-) diff --git a/src/com/engine/salary/entity/salaryarchive/bo/SalaryArchiveExcelBO.java b/src/com/engine/salary/entity/salaryarchive/bo/SalaryArchiveExcelBO.java index 7674039d9..58c11fd6c 100644 --- a/src/com/engine/salary/entity/salaryarchive/bo/SalaryArchiveExcelBO.java +++ b/src/com/engine/salary/entity/salaryarchive/bo/SalaryArchiveExcelBO.java @@ -348,9 +348,10 @@ public class SalaryArchiveExcelBO extends Service { * @param excelComments * @param errorCount * @param importHandleParam + * @param confValue 人员匹配规则 * @return */ - public static boolean singleRowCheck(List allTodoSalaryArchives, Map map, List headers, int effectiveTimeIndex, List> excelComments, int errorCount, SalaryArchiveImportHandleParam importHandleParam) { + public static boolean singleRowCheck(List allTodoSalaryArchives, Map map, List headers, int effectiveTimeIndex, List> excelComments, int errorCount, SalaryArchiveImportHandleParam importHandleParam, String confValue) { //是否是流程 boolean process = importHandleParam.isProcess(); @@ -362,18 +363,26 @@ public class SalaryArchiveExcelBO extends Service { String mobileName = Optional.ofNullable(map.get("手机号")).orElse("").toString(); String jobNum = Optional.ofNullable(map.get(jobNumI18n)).orElse("").toString(); String hrmStatus = Optional.ofNullable(map.get(hrStatusI18n)).orElse("").toString(); + String workCode = Optional.ofNullable(map.get("工号")).orElse("").toString(); // Optional optionalStatus = importHandleParam.getHrmStatusList().stream().filter(s -> s.getName().equals(hrmStatus)).findFirst(); // String codeId = optionalStatus.map(status -> status.getCodeId() + "").orElse(""); - List emps = importHandleParam.getEmployees().stream().filter(e -> - (StringUtils.isBlank(userName) || Objects.equals(e.getUsername(), userName)) - && (StringUtils.isBlank(deparmentName) || Objects.equals(e.getDepartmentName(), deparmentName)) - && (StringUtils.isBlank(mobileName) || Objects.equals(e.getMobile(), mobileName)) + List emps = new ArrayList<>(); + // "0"代表姓名+部门+手机号的匹配原则,“1”代表工号为唯一匹配原则 + if("0".equals(confValue)){ + emps = importHandleParam.getEmployees().stream().filter(e -> + (StringUtils.isBlank(userName) || Objects.equals(e.getUsername(), userName)) + && (StringUtils.isBlank(deparmentName) || Objects.equals(e.getDepartmentName(), deparmentName)) + && (StringUtils.isBlank(mobileName) || Objects.equals(e.getMobile(), mobileName)) // && (StringUtils.isBlank(jobNum) || Objects.equals(e.getWorkcode(), jobNum)) - ) + ) // && (StringUtils.isBlank(hrmStatus) || Objects.equals(e.getPersonnelStatus(), codeId)) // .map(DataCollectionEmployee::getEmployeeId) - .collect(Collectors.toList()); + .collect(Collectors.toList()); + }else if("1".equals(confValue)){ + emps = importHandleParam.getEmployees().stream().filter(e -> (StringUtils.isBlank(workCode) || Objects.equals(e.getWorkcode(), workCode))) + .collect(Collectors.toList()); + } List employeeSameIds = new ArrayList<>(); if (CollectionUtils.isNotEmpty(emps) && emps.size() > 1) { @@ -394,7 +403,7 @@ public class SalaryArchiveExcelBO extends Service { if (employeeId == null) { Map errorMessageMap = Maps.newHashMap(); - errorMessageMap.put("message", rowindex + "人员存在重复数据,请确定姓名、部门、手机号唯一"); + errorMessageMap.put("message", rowindex + "人员存在重复数据,请确定姓名、部门、手机号或工号唯一"); excelComments.add(errorMessageMap); isError = true; return isError; diff --git a/src/com/engine/salary/service/impl/SalaryArchiveExcelServiceImpl.java b/src/com/engine/salary/service/impl/SalaryArchiveExcelServiceImpl.java index 01a75e002..2f2b104bf 100644 --- a/src/com/engine/salary/service/impl/SalaryArchiveExcelServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryArchiveExcelServiceImpl.java @@ -24,6 +24,9 @@ import com.engine.salary.enums.salaryarchive.SalaryArchiveListTypeEnum; import com.engine.salary.enums.salaryarchive.SalaryArchiveStatusEnum; import com.engine.salary.mapper.archive.SalaryArchiveMapper; import com.engine.salary.service.*; +import com.engine.salary.sys.entity.po.SalarySysConfPO; +import com.engine.salary.sys.service.SalarySysConfService; +import com.engine.salary.sys.service.impl.SalarySysConfServiceImpl; import com.engine.salary.util.SalaryEntityUtil; import com.engine.salary.util.SalaryI18nUtil; import com.engine.salary.util.db.MapperProxyFactory; @@ -83,6 +86,10 @@ public class SalaryArchiveExcelServiceImpl extends Service implements SalaryArch return ServiceUtil.getService(TaxAgentManageRangeServiceImpl.class, user); } + public SalarySysConfService getSalarySysConfService(User user) { + return ServiceUtil.getService(SalarySysConfServiceImpl.class, user); + } + private SalaryArchiveBiz salaryArchiveMapper = new SalaryArchiveBiz(); private EmployBiz employBiz = new EmployBiz(); private SalaryArchiveItemBiz salaryArchiveItemMapper = new SalaryArchiveItemBiz(); @@ -490,6 +497,9 @@ public class SalaryArchiveExcelServiceImpl extends Service implements SalaryArch } // 错误sheet数据 List> errorData = new ArrayList<>(); + // 获取匹配规则 + SalarySysConfPO salarySysConfPO = getSalarySysConfService(user).getOneByCode("matchEmployeeMode"); + String confValue = (salarySysConfPO != null && salarySysConfPO.getConfValue() != null && !"".equals(salarySysConfPO.getConfValue())) ? salarySysConfPO.getConfValue() : "0"; Map map; for (int i = 0; i < data.size(); i++) { @@ -497,7 +507,7 @@ public class SalaryArchiveExcelServiceImpl extends Service implements SalaryArch map = data.get(i); map.put("index", i + 2); // 3.校验行内容 - boolean isError = SalaryArchiveExcelBO.singleRowCheck(allTodoSalaryArchives, map, headers, effectiveTimeIndex, excelComments, errorCount, importHandleParam); + boolean isError = SalaryArchiveExcelBO.singleRowCheck(allTodoSalaryArchives, map, headers, effectiveTimeIndex, excelComments, errorCount, importHandleParam, confValue); if (isError) { errorCount += 1; // 添加错误数据 @@ -578,6 +588,10 @@ public class SalaryArchiveExcelServiceImpl extends Service implements SalaryArch // 错误sheet数据 List> errorData = new ArrayList<>(); + // 获取匹配规则 + SalarySysConfPO salarySysConfPO = getSalarySysConfService(user).getOneByCode("matchEmployeeMode"); + String confValue = (salarySysConfPO != null && salarySysConfPO.getConfValue() != null && !"".equals(salarySysConfPO.getConfValue())) ? salarySysConfPO.getConfValue() : "0"; + for (int i = 0; i < data.size(); i++) { Map map = data.get(i); @@ -605,7 +619,7 @@ public class SalaryArchiveExcelServiceImpl extends Service implements SalaryArch map = data.get(i); map.put("index", i + 2); // 3.校验行内容 - boolean isError = SalaryArchiveExcelBO.singleRowCheck(allTodoSalaryArchives, map, headers, effectiveTimeIndex, excelComments, errorCount, importHandleParam); + boolean isError = SalaryArchiveExcelBO.singleRowCheck(allTodoSalaryArchives, map, headers, effectiveTimeIndex, excelComments, errorCount, importHandleParam, confValue); if (isError) { errorCount += 1; // 添加错误数据 From 295331d1a5c1492ccc5822ad2b2f44a6f307f54a Mon Sep 17 00:00:00 2001 From: Harryxzy Date: Thu, 30 Mar 2023 09:49:49 +0800 Subject: [PATCH 19/33] =?UTF-8?q?=E6=8C=89=E7=85=A7=E5=B7=A5=E5=8F=B7?= =?UTF-8?q?=E5=AF=BC=E5=85=A5=EF=BC=8C=E6=94=AF=E6=8C=81=E4=B8=8D=E8=BE=93?= =?UTF-8?q?=E5=85=A5=E5=A7=93=E5=90=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../salary/entity/salaryarchive/bo/SalaryArchiveExcelBO.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/com/engine/salary/entity/salaryarchive/bo/SalaryArchiveExcelBO.java b/src/com/engine/salary/entity/salaryarchive/bo/SalaryArchiveExcelBO.java index 58c11fd6c..41ef04a2e 100644 --- a/src/com/engine/salary/entity/salaryarchive/bo/SalaryArchiveExcelBO.java +++ b/src/com/engine/salary/entity/salaryarchive/bo/SalaryArchiveExcelBO.java @@ -521,7 +521,7 @@ public class SalaryArchiveExcelBO extends Service { // 必填判空 boolean isEmpty = StringUtils.isEmpty(cellVal) && - ((userNameI18n.equals(key.toString()) && !process) || taxAgentI18n.equals(key.toString()) || incomeCategoryI18n.equals(key.toString()) || salarySobI18n.equals(key.toString()) + ((userNameI18n.equals(key.toString()) && !process && "0".equals(confValue)) || taxAgentI18n.equals(key.toString()) || incomeCategoryI18n.equals(key.toString()) || salarySobI18n.equals(key.toString()) // 定薪列表初始化导入必填: 起始发薪日期、生效日期 || ((payStartDateI18n.equals(key.toString()) || effectiveTimeI18n.equals(key.toString())) && importHandleParam.isInit()) // 定薪列表调薪必填: 调整原因、生效日期 From f0c80f32874969f822b1fd9ecb9d6a8b55405c88 Mon Sep 17 00:00:00 2001 From: Harryxzy Date: Thu, 30 Mar 2023 10:02:09 +0800 Subject: [PATCH 20/33] =?UTF-8?q?=E8=96=AA=E8=B5=84=E6=A1=A3=E6=A1=88?= =?UTF-8?q?=E5=AF=BC=E5=85=A5=E6=97=A0=E6=B3=95=E5=B8=A6=E5=87=BA=E5=B7=A5?= =?UTF-8?q?=E5=8F=B7=E6=95=B0=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../salary/service/impl/SalaryArchiveExcelServiceImpl.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/com/engine/salary/service/impl/SalaryArchiveExcelServiceImpl.java b/src/com/engine/salary/service/impl/SalaryArchiveExcelServiceImpl.java index 2f2b104bf..f7699ab05 100644 --- a/src/com/engine/salary/service/impl/SalaryArchiveExcelServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryArchiveExcelServiceImpl.java @@ -353,7 +353,7 @@ public class SalaryArchiveExcelServiceImpl extends Service implements SalaryArch // row.add(e.get("hiredate")); row.add(e.get("departmentName")); row.add(e.get("mobile") == null ? "" : e.get("mobile").toString()); - row.add(Optional.ofNullable(e.get("jobNum")).orElse("").toString()); + row.add(Optional.ofNullable(e.get("workcode")).orElse("").toString()); // if (enableHr) { // row.add(Optional.ofNullable(e.get("idNo")).orElse("").toString()); // } From 0427ec5ed4e85bb850f4bdb5d7dfa83404059614 Mon Sep 17 00:00:00 2001 From: sy Date: Thu, 30 Mar 2023 11:44:21 +0800 Subject: [PATCH 21/33] =?UTF-8?q?=E8=96=AA=E9=85=AC=E7=B3=BB=E7=BB=9F,=20?= =?UTF-8?q?=E5=85=B3=E9=97=AD=E5=8A=A0=E5=AF=86=E6=96=B9=E6=B3=95=E4=BC=98?= =?UTF-8?q?=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../engine/salary/encrypt/AESEncryptUtil.java | 61 +++++++++++++++++-- .../impl/SalarySysConfServiceImpl.java | 2 +- 2 files changed, 56 insertions(+), 7 deletions(-) diff --git a/src/com/engine/salary/encrypt/AESEncryptUtil.java b/src/com/engine/salary/encrypt/AESEncryptUtil.java index 1eca9db24..3696483e9 100644 --- a/src/com/engine/salary/encrypt/AESEncryptUtil.java +++ b/src/com/engine/salary/encrypt/AESEncryptUtil.java @@ -8,6 +8,9 @@ import org.apache.commons.lang3.StringUtils; import weaver.general.AES; import weaver.general.BaseBean; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + /** * 此AES加密工具类仅用于关联应用设置中是否开启加密的应用使用 * 如另有需要,请重写工具类 @@ -77,12 +80,58 @@ public class AESEncryptUtil { */ public static String closeEncryptSetting(String encryptStr) { SalarySysConfPO sysConfPo = salarySysConfService.getOneByCode(SalarySysConstant.OPEN_APPLICATION_ENCRYPT); - if (StringUtils.isNotBlank(encryptStr) && encryptStr.startsWith(SalarySysConstant.PRE_SIGN_ENCRYPT)) { - encryptStr = encryptStr.substring(4, encryptStr.length()); - return AES.decrypt(encryptStr, aesEncryptScrect); - } else if (sysConfPo == null && StringUtils.isNotBlank(encryptStr)) { - return AES.decrypt(encryptStr, aesEncryptScrect); +// if (StringUtils.isNotBlank(encryptStr) && encryptStr.startsWith(SalarySysConstant.PRE_SIGN_ENCRYPT)) { +// encryptStr = encryptStr.substring(4, encryptStr.length()); +// return AES.decrypt(encryptStr, aesEncryptScrect); +// } else if (sysConfPo == null && StringUtils.isNotBlank(encryptStr)) { +// return AES.decrypt(encryptStr, aesEncryptScrect); +// } +// return encryptStr; + if (encryptStr == null) { + return null; + } else { + //AES_前缀的密文 + if (encryptStr.startsWith(SalarySysConstant.PRE_SIGN_ENCRYPT)) { + encryptStr = encryptStr.substring(4, encryptStr.length()); + return AES.decrypt(encryptStr, aesEncryptScrect); + } else if (isNumeric(encryptStr) || checkHaveChinese(encryptStr) || encryptStr.startsWith("{") || encryptStr.contains("-") || encryptStr.contains(".")) { + return encryptStr; + } else if ("null".equals(encryptStr) || " ".equals(encryptStr) || "".equals(encryptStr)) { + return encryptStr; + } else if (sysConfPo == null || sysConfPo.getConfValue().equals(OpenEnum.OFF.getValue())) { + return AES.decrypt(encryptStr, aesEncryptScrect); + } else { + return encryptStr; + } } - return encryptStr; + } + + /** + * 判断字符串是否为整数或者小数或者负数 + */ + public static boolean isNumeric(String str) { + + Pattern pattern = Pattern.compile("^-?\\d+(\\.\\d+)?$"); + Matcher isNum = pattern.matcher(str); + if (!isNum.matches()) { + return false; + } + return true; + + } + + /** + * 判断字符串是否包含中文字符 + */ + public static boolean checkHaveChinese(String countname) { + + Pattern p = Pattern.compile("[\u4e00-\u9fa5]"); + Matcher m = p.matcher(countname); + if (m.find()) { + return true; + } + + return false; + } } diff --git a/src/com/engine/salary/sys/service/impl/SalarySysConfServiceImpl.java b/src/com/engine/salary/sys/service/impl/SalarySysConfServiceImpl.java index 9dbec31e9..21667f70e 100644 --- a/src/com/engine/salary/sys/service/impl/SalarySysConfServiceImpl.java +++ b/src/com/engine/salary/sys/service/impl/SalarySysConfServiceImpl.java @@ -770,7 +770,7 @@ public class SalarySysConfServiceImpl extends Service implements SalarySysConfSe po.setTotal(AESEncryptUtil.encrypt(po.getTotal())); } }); - List> partition = Lists.partition(insuranceAccountDetailPos, 50); + List> partition = Lists.partition(insuranceAccountDetailPos, 20); InsuranceAccountDetailMapper mapper = sqlSession.getMapper(InsuranceAccountDetailMapper.class); partition.forEach(mapper::batchUpdate); sqlSession.commit(); From 30660ce04baa62f68ad963078573625c6103613e Mon Sep 17 00:00:00 2001 From: Harryxzy Date: Thu, 30 Mar 2023 13:33:52 +0800 Subject: [PATCH 22/33] =?UTF-8?q?=E5=B7=A5=E8=B5=84=E5=8D=95=E6=A8=A1?= =?UTF-8?q?=E6=9D=BF=EF=BC=8C=E6=97=A0=E6=B3=95=E4=BF=AE=E6=94=B9=E8=96=AA?= =?UTF-8?q?=E8=B5=84=E9=A1=B9=E4=B8=BA0=E6=97=B6=E4=B8=8D=E6=98=BE?= =?UTF-8?q?=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../engine/salary/mapper/salarybill/SalaryTemplateMapper.xml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/com/engine/salary/mapper/salarybill/SalaryTemplateMapper.xml b/src/com/engine/salary/mapper/salarybill/SalaryTemplateMapper.xml index 29bc391c0..93c5d3b8f 100644 --- a/src/com/engine/salary/mapper/salarybill/SalaryTemplateMapper.xml +++ b/src/com/engine/salary/mapper/salarybill/SalaryTemplateMapper.xml @@ -367,8 +367,11 @@ salary_item_null_status=#{salaryItemNullStatus}, + + salary_item_zero_status=#{salaryItemNullStatus}, + - salary_item_setting=#{salaryItemSetting}, + salary_item_setting=#{salaryItemZeroStatus}, replenish_name=#{replenishName}, From 31bf7cfd99294b6ccd161afbffb926e6d5f987c6 Mon Sep 17 00:00:00 2001 From: sy Date: Thu, 30 Mar 2023 17:26:55 +0800 Subject: [PATCH 23/33] =?UTF-8?q?=E8=96=AA=E9=85=AC=E7=B3=BB=E7=BB=9F-?= =?UTF-8?q?=E8=96=AA=E8=B5=84=E6=A0=B8=E7=AE=97=E5=92=8C=E6=A1=A3=E6=A1=88?= =?UTF-8?q?=EF=BC=8Cexcel=E5=AF=BC=E5=87=BA=E8=A1=8C=E9=AB=98=E8=87=AA?= =?UTF-8?q?=E9=80=82=E5=BA=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../salary/util/excel/ExcelUtilPlus.java | 156 +++++++++++++++++- 1 file changed, 155 insertions(+), 1 deletion(-) diff --git a/src/com/engine/salary/util/excel/ExcelUtilPlus.java b/src/com/engine/salary/util/excel/ExcelUtilPlus.java index 939e6e78c..0fb1cdab8 100644 --- a/src/com/engine/salary/util/excel/ExcelUtilPlus.java +++ b/src/com/engine/salary/util/excel/ExcelUtilPlus.java @@ -7,7 +7,6 @@ import org.apache.poi.ss.usermodel.*; import org.apache.poi.ss.util.CellRangeAddress; import org.apache.poi.xssf.usermodel.*; -import java.awt.*; import java.awt.Color; import java.util.Date; import java.util.List; @@ -116,6 +115,9 @@ public class ExcelUtilPlus { for (int rowIndex = 0; rowIndex < rowList.size(); rowIndex++) { List infoList = rowList.get(rowIndex); XSSFRow row = sheet.createRow(rowIndex); + float height = 18; + float finalHeight = 18; + for (int cellIndex = 0; cellIndex < infoList.size(); cellIndex++) { XSSFCell cell = row.createCell(cellIndex); if (rowIndex == 0) { @@ -137,7 +139,12 @@ public class ExcelUtilPlus { cell.setCellType(CellType.STRING); cell.setCellValue(o == null ? "" : o.toString()); } + + //判断是否要调整高度 + int width = sheet.getColumnWidth(cellIndex) / 256; + finalHeight = getFinalHeight(o, width, finalHeight, height); } + row.setHeightInPoints(finalHeight); } return workbook; } @@ -192,6 +199,9 @@ public class ExcelUtilPlus { for (int rowIndex = 0; rowIndex < rowList.size(); rowIndex++) { List infoList = rowList.get(rowIndex); XSSFRow row = sheet.createRow(rowIndex); + float height = 18; + float finalHeight = 18; + for (int cellIndex = 0; cellIndex < infoList.size(); cellIndex++) { XSSFCell cell = row.createCell(cellIndex); if (rowIndex == 0) { @@ -213,7 +223,12 @@ public class ExcelUtilPlus { cell.setCellType(CellType.STRING); cell.setCellValue(String.valueOf(o)); } + + //判断是否要调整高度 + int width = sheet.getColumnWidth(cellIndex) / 256; + finalHeight = getFinalHeight(o, width, finalHeight, height); } + row.setHeightInPoints(finalHeight); } if (CollectionUtils.isNotEmpty(comments)) { @@ -226,6 +241,106 @@ public class ExcelUtilPlus { return workbook; } + public static XSSFWorkbook genWorkbookV2(List> rowList, String sheetName, boolean lastRowRed) { + XSSFWorkbook workbook = new XSSFWorkbook(); + + // 设置title样式 + XSSFCellStyle titleCellStyle = workbook.createCellStyle(); + XSSFFont titleFont = workbook.createFont(); + titleFont.setBold(true); + titleFont.setFontName("仿宋"); + titleFont.setFontHeightInPoints((short) 15); + titleCellStyle.setFont(titleFont); + titleCellStyle.setAlignment(HorizontalAlignment.CENTER); + titleCellStyle.setFillForegroundColor(IndexedColors.GREY_25_PERCENT.getIndex());//背景色 + titleCellStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND); + titleCellStyle.setVerticalAlignment(VerticalAlignment.CENTER); + titleCellStyle.setBorderLeft(BorderStyle.THIN); + titleCellStyle.setBorderRight(BorderStyle.THIN); + titleCellStyle.setBorderTop(BorderStyle.THIN); + titleCellStyle.setBorderBottom(BorderStyle.THIN); + + // 设置主体样式 + XSSFCellStyle cellStyle = workbook.createCellStyle(); + XSSFFont font = workbook.createFont(); + font.setFontName("宋体"); + font.setFontHeightInPoints((short) 10);// 设置字体大小 + cellStyle.setFont(font);// 选择需要用到的字体格式 + cellStyle.setWrapText(true); + + cellStyle.setBorderLeft(BorderStyle.THIN); + cellStyle.setBorderRight(BorderStyle.THIN); + cellStyle.setBorderTop(BorderStyle.THIN); + cellStyle.setBorderBottom(BorderStyle.THIN); + + XSSFCellStyle redCellStyle = workbook.createCellStyle(); + XSSFFont redFont = workbook.createFont(); + redFont.setFontName("宋体"); + redFont.setFontHeightInPoints((short) 10);// 设置字体大小 + redFont.setColor(new XSSFColor(new Color(0xFF3333), null)); + redFont.setBold(true); + redCellStyle.setWrapText(true); + redCellStyle.setFont(redFont);// 选择需要用到的字体格式 + + redCellStyle.setBorderLeft(BorderStyle.THIN); + redCellStyle.setBorderRight(BorderStyle.THIN); + redCellStyle.setBorderTop(BorderStyle.THIN); + redCellStyle.setBorderBottom(BorderStyle.THIN); + + XSSFSheet sheet = workbook.createSheet(sheetName); + //自适应宽度 + sheet.autoSizeColumn(0, true); + //默认列宽 + sheet.setDefaultColumnWidth(20); + //默认行高 + sheet.setDefaultRowHeightInPoints(18); + + //遍历设置列宽 + List header = rowList.get(0); + for (int i = 0; i < header.size(); i++) { + sheet.setColumnWidth(i,Math.max(12, header.get(i).toString().length()*4)*256); + } + + for (int rowIndex = 0; rowIndex < rowList.size(); rowIndex++) { + List infoList = rowList.get(rowIndex); + XSSFRow row = sheet.createRow(rowIndex); + float height = 18; + float finalHeight = 18; + + for (int cellIndex = 0; cellIndex < infoList.size(); cellIndex++) { + XSSFCell cell = row.createCell(cellIndex); + if (rowIndex == 0) { + cell.setCellStyle(titleCellStyle); + } else { + if (lastRowRed && rowIndex == rowList.size() - 1) { + cell.setCellStyle(redCellStyle); + } else { + cell.setCellStyle(cellStyle); + } + } + Object o = infoList.get(cellIndex); + if (o instanceof String) { + cell.setCellType(CellType.STRING); + cell.setCellValue(String.valueOf(o)); + } else if (o instanceof Boolean) { + cell.setCellType(CellType.BOOLEAN); + cell.setCellValue(String.valueOf(o)); + } else if (o instanceof Date) { + cell.setCellType(CellType.STRING); + cell.setCellValue(SalaryDateUtil.getFormatLocalDate((Date) o)); + } else { + cell.setCellType(CellType.STRING); + cell.setCellValue(o == null ? "" : o.toString()); + } + + //判断是否要调整高度 + int width = sheet.getColumnWidth(cellIndex) / 256; + finalHeight = getFinalHeight(o, width, finalHeight, height); + } + row.setHeightInPoints(finalHeight); + } + return workbook; + } public static XSSFWorkbook genWorkbookWithChildTitleColumn(List> rowList, String sheetName, boolean lastRowRed) { XSSFWorkbook workbook = new XSSFWorkbook(); @@ -345,6 +460,9 @@ public class ExcelUtilPlus { for (int rowIndex = 1; rowIndex < rowList.size(); rowIndex++) { List infoList = rowList.get(rowIndex); XSSFRow row = sheet.createRow(rowIndex + 1); + float height = 18; + float finalHeight = 18; + for (int cellIndex = 0; cellIndex < infoList.size(); cellIndex++) { XSSFCell cell = row.createCell(cellIndex); @@ -371,8 +489,44 @@ public class ExcelUtilPlus { cell.setCellType(CellType.STRING); cell.setCellValue(o == null ? "" : o.toString()); } + + //判断是否要调整高度 + int width = sheet.getColumnWidth(cellIndex) / 256; + finalHeight = getFinalHeight(o, width, finalHeight, height); } + row.setHeightInPoints(finalHeight); } return workbook; } + + public static float getFinalHeight(Object o, int width, float finalHeight, float height) { + if (o != null && getStrlength(o.toString()) > width) { + float remainder = getStrlength(o.toString()) % width; + int multiple = getStrlength(o.toString()) / width; + int finalMultiple = remainder > 0 ? (multiple + 1) : multiple; + float compareHeight = height * finalMultiple; + finalHeight = Math.max(finalHeight, compareHeight); + } + return finalHeight; + } + + public static int getStrlength(String str) { + int strLength = 0; + String chinese = "[\u0391-\uFFE5]"; + /* 获取字段值的长度,如果含中文字符,则每个中文字符长度为2,否则为1 */ + for (int i = 0; i < str.length(); i++) { + /* 从字符串中获取一个字符 */ + String temp = str.substring(i, i + 1); + /* 判断是否为中文字符 */ + if (temp.matches(chinese)) { + /* 中文字符长度为2 */ + strLength += 2; + } else { + /* 其他字符长度为1 */ + strLength += 1; + } + } + return strLength; + } + } From 40b38b5347611d8d064de7545b8f99731df9e430 Mon Sep 17 00:00:00 2001 From: Harryxzy Date: Thu, 30 Mar 2023 22:52:52 +0800 Subject: [PATCH 24/33] =?UTF-8?q?=E7=A4=BE=E4=BF=9D=E7=A6=8F=E5=88=A9?= =?UTF-8?q?=E6=A1=A3=E6=A1=88=E5=88=97=E8=A1=A8=E6=8F=90=E9=80=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/com/engine/salary/biz/SIArchivesBiz.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/com/engine/salary/biz/SIArchivesBiz.java b/src/com/engine/salary/biz/SIArchivesBiz.java index 5e4051d13..a41f1f72a 100644 --- a/src/com/engine/salary/biz/SIArchivesBiz.java +++ b/src/com/engine/salary/biz/SIArchivesBiz.java @@ -997,7 +997,7 @@ public class SIArchivesBiz { log.info("buildWeaTableColumns方法处理福利档案列表数据开始"); sw.start("buildWeaTableColumns方法处理福利档案列表数据"); - List columns = buildWeaTableColumns(page, operateId); + List columns = buildWeaTableColumns(pageInfo.getList(), operateId); sw.stop(); log.info("buildWeaTableColumns方法处理福利档案列表数据完成!"); WeaTable table = new WeaTable(); From 4faa9e36a658be464261b6ed7c6854b818a482c5 Mon Sep 17 00:00:00 2001 From: Harryxzy Date: Fri, 31 Mar 2023 10:17:31 +0800 Subject: [PATCH 25/33] =?UTF-8?q?=E5=8F=96=E6=B6=88=E5=BE=85=E5=8A=9E?= =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../engine/salary/service/impl/SalaryArchiveServiceImpl.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/com/engine/salary/service/impl/SalaryArchiveServiceImpl.java b/src/com/engine/salary/service/impl/SalaryArchiveServiceImpl.java index a6b726221..216acfbb6 100644 --- a/src/com/engine/salary/service/impl/SalaryArchiveServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryArchiveServiceImpl.java @@ -1139,6 +1139,10 @@ public class SalaryArchiveServiceImpl extends Service implements SalaryArchiveSe if(list.size() != ids.size()){ throw new SalaryRunTimeException("薪资档案不存在,删除失败!"); } + Set employeeStatus = list.stream().map(SalaryArchiveListDTO::getEmployeeStatus).collect(Collectors.toSet()); + if(employeeStatus.contains("5")){ + throw new SalaryRunTimeException("离职人员无法删除待办"); + } Map taxAgentMap = SalaryEntityUtil.convert2Map(taxAgentList, TaxAgentManageRangeEmployeeDTO::getTaxAgentId); // 判断删除待停薪代办的人是否在个税扣缴义务人的人员范围中 for(SalaryArchiveListDTO dto : list){ From c97407c2ac8081bb8ade13b4d7c21fbf1ce92e5d Mon Sep 17 00:00:00 2001 From: Harryxzy Date: Mon, 3 Apr 2023 11:31:09 +0800 Subject: [PATCH 26/33] =?UTF-8?q?=E5=B7=A5=E8=B5=84=E5=8D=95=E6=A8=A1?= =?UTF-8?q?=E6=9D=BF=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../engine/salary/mapper/salarybill/SalaryTemplateMapper.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/com/engine/salary/mapper/salarybill/SalaryTemplateMapper.xml b/src/com/engine/salary/mapper/salarybill/SalaryTemplateMapper.xml index 93c5d3b8f..b91e8343e 100644 --- a/src/com/engine/salary/mapper/salarybill/SalaryTemplateMapper.xml +++ b/src/com/engine/salary/mapper/salarybill/SalaryTemplateMapper.xml @@ -368,10 +368,10 @@ salary_item_null_status=#{salaryItemNullStatus}, - salary_item_zero_status=#{salaryItemNullStatus}, + salary_item_zero_status=#{salaryItemZeroStatus}, - salary_item_setting=#{salaryItemZeroStatus}, + salary_item_setting=#{salaryItemSetting}, replenish_name=#{replenishName}, From eb1d441de78f48ee5b42531adf64b1002e8c6fc0 Mon Sep 17 00:00:00 2001 From: sy Date: Mon, 3 Apr 2023 16:07:37 +0800 Subject: [PATCH 27/33] =?UTF-8?q?=E8=96=AA=E9=85=AC=E7=B3=BB=E7=BB=9F,=20?= =?UTF-8?q?=E5=85=B3=E9=97=AD=E5=8A=A0=E5=AF=86=E6=96=B9=E6=B3=95=E4=BC=98?= =?UTF-8?q?=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/com/engine/salary/encrypt/AESEncryptUtil.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/com/engine/salary/encrypt/AESEncryptUtil.java b/src/com/engine/salary/encrypt/AESEncryptUtil.java index 3696483e9..bcf5d0dba 100644 --- a/src/com/engine/salary/encrypt/AESEncryptUtil.java +++ b/src/com/engine/salary/encrypt/AESEncryptUtil.java @@ -4,6 +4,7 @@ import com.engine.salary.sys.constant.SalarySysConstant; import com.engine.salary.sys.entity.po.SalarySysConfPO; import com.engine.salary.sys.enums.OpenEnum; import com.engine.salary.sys.service.impl.SalarySysConfServiceImpl; +import com.wbi.util.StringUtil; import org.apache.commons.lang3.StringUtils; import weaver.general.AES; import weaver.general.BaseBean; @@ -96,7 +97,7 @@ public class AESEncryptUtil { return AES.decrypt(encryptStr, aesEncryptScrect); } else if (isNumeric(encryptStr) || checkHaveChinese(encryptStr) || encryptStr.startsWith("{") || encryptStr.contains("-") || encryptStr.contains(".")) { return encryptStr; - } else if ("null".equals(encryptStr) || " ".equals(encryptStr) || "".equals(encryptStr)) { + } else if ("null".equals(encryptStr) || StringUtils.isBlank(encryptStr)) { return encryptStr; } else if (sysConfPo == null || sysConfPo.getConfValue().equals(OpenEnum.OFF.getValue())) { return AES.decrypt(encryptStr, aesEncryptScrect); From cb46fccb16dc7da61641b434bdfacfe3da2026ab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Mon, 3 Apr 2023 18:49:28 +0800 Subject: [PATCH 28/33] =?UTF-8?q?=E5=B7=A5=E8=B5=84=E5=8D=95=E6=8E=A8?= =?UTF-8?q?=E9=80=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../engine/salary/service/impl/SalarySendServiceImpl.java | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/com/engine/salary/service/impl/SalarySendServiceImpl.java b/src/com/engine/salary/service/impl/SalarySendServiceImpl.java index bb14879db..01bfb5162 100644 --- a/src/com/engine/salary/service/impl/SalarySendServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalarySendServiceImpl.java @@ -920,6 +920,7 @@ public class SalarySendServiceImpl extends Service implements SalarySendService */ private void sendPayRollEMMessage(SalarySendInfoPO po, SalaryTemplatePO template, Long employeeId) { Long id = po.getId(); + String background = template.getBackground(); String billTitle = getBillTitle(template.getTheme(), po.getSalaryMonth(), employeeId); MessageType messageType = MessageType.newInstance(499); // 消息来源(见文档第四点补充 必填) Set userIdList = new HashSet<>(); // 接收人id 必填 @@ -933,6 +934,12 @@ public class SalarySendServiceImpl extends Service implements SalarySendService messageBean.setCreater(user.getUID());// 创建人id messageBean.setBizState("0");// 需要修改消息为已处理等状态时传入,表示消息最初状态为待处理 messageBean.setTargetId("499|" + id); //消息来源code +“|”+业务id需要修改消息为已处理等状态时传入 + + if (StringUtils.isNotBlank(background)) { + messageBean.setPictureUrl(background); + } else { + messageBean.setPictureUrl("/hrm/hrm_e9/images/payroll.jpg?pictype=jpg"); + } Util_Message.store(messageBean); } catch (IOException e) { e.printStackTrace(); From add7051759ca6d47d46bbc7caccf7f9e8ea8aeba Mon Sep 17 00:00:00 2001 From: sy Date: Tue, 4 Apr 2023 16:28:15 +0800 Subject: [PATCH 29/33] =?UTF-8?q?=E8=96=AA=E9=85=AC=E7=B3=BB=E7=BB=9F,=20?= =?UTF-8?q?=E9=80=82=E9=85=8D=E9=87=91=E4=BB=93-=E4=B8=AA=E7=A8=8E?= =?UTF-8?q?=E7=94=B3=E6=8A=A5=E5=8D=95=E9=80=BB=E8=BE=91=E4=BC=98=E5=8C=96?= =?UTF-8?q?=E3=80=81=E8=96=AA=E8=B5=84=E9=83=A8=E5=88=86=E5=8F=91=E6=94=BE?= =?UTF-8?q?=E9=80=BB=E8=BE=91=E4=BC=98=E5=8C=96=E3=80=81=E5=88=A0=E9=99=A4?= =?UTF-8?q?initserviceimpl=E6=96=87=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../taxdeclaration/bo/TaxDeclarationBO.java | 1 + .../salarybill/SalarySendRangeObjMapper.xml | 2 +- .../sys/service/impl/InitServiceImpl.java | 76 ------------------- 3 files changed, 2 insertions(+), 77 deletions(-) delete mode 100644 src/com/engine/salary/sys/service/impl/InitServiceImpl.java diff --git a/src/com/engine/salary/entity/taxdeclaration/bo/TaxDeclarationBO.java b/src/com/engine/salary/entity/taxdeclaration/bo/TaxDeclarationBO.java index 6d936a232..906cd9e4f 100644 --- a/src/com/engine/salary/entity/taxdeclaration/bo/TaxDeclarationBO.java +++ b/src/com/engine/salary/entity/taxdeclaration/bo/TaxDeclarationBO.java @@ -715,6 +715,7 @@ public class TaxDeclarationBO { private static String findStringValue(String fieldCode, Map> resultMap, Map salaryItemMap) { return resultMap.getOrDefault(salaryItemMap.getOrDefault(fieldCode, 0L), Collections.emptyList()).stream() + .filter(f -> StringUtils.isNotBlank(f.getResultValue())) .map(SalaryAcctResultPO::getResultValue) .findFirst().orElse(""); } diff --git a/src/com/engine/salary/mapper/salarybill/SalarySendRangeObjMapper.xml b/src/com/engine/salary/mapper/salarybill/SalarySendRangeObjMapper.xml index 680991a2a..68737ab47 100644 --- a/src/com/engine/salary/mapper/salarybill/SalarySendRangeObjMapper.xml +++ b/src/com/engine/salary/mapper/salarybill/SalarySendRangeObjMapper.xml @@ -310,7 +310,7 @@ insert into hrsa_salary_send_range_obj (salary_send_id, salary_send_range_id, range_type, target_type, target_id, creator, create_time, update_time, delete_type, tenant_key) - + select #{item.salarySendId,jdbcType=BIGINT}, #{item.salarySendRangeId,jdbcType=BIGINT}, #{item.rangeType,jdbcType=INTEGER}, #{item.targetType,jdbcType=INTEGER}, #{item.targetId,jdbcType=BIGINT}, diff --git a/src/com/engine/salary/sys/service/impl/InitServiceImpl.java b/src/com/engine/salary/sys/service/impl/InitServiceImpl.java deleted file mode 100644 index 45e309539..000000000 --- a/src/com/engine/salary/sys/service/impl/InitServiceImpl.java +++ /dev/null @@ -1,76 +0,0 @@ -package com.engine.salary.sys.service.impl; - -import com.api.formmode.mybatis.util.SqlProxyHandle; -import com.engine.salary.mapper.sys.SalarySysConfMapper; -import com.engine.salary.sys.entity.po.SalarySysConfPO; -import com.weaverboot.frame.ioc.anno.classAnno.WeaSysInitComponent; -import com.weaverboot.frame.ioc.anno.methodAnno.WeaSysInit; -import dm.jdbc.util.IdGenerator; -import org.apache.commons.lang3.StringUtils; -import weaver.general.BaseBean; - -import java.util.Date; - -@WeaSysInitComponent("initSalary") -public class InitServiceImpl { - - private SalarySysConfMapper getSalarySysConfMapper() { - return SqlProxyHandle.getProxy(SalarySysConfMapper.class); - } - - BaseBean baseBean = new BaseBean(); - - @WeaSysInit(order = 1, description = "升级薪酬非标版本") - public void init() { - String version = baseBean.getPropValue("hrmSalary", "version"); - Date date = new Date(); - - //升级版本号 - //当前版本 - SalarySysConfPO currentVersion = getSalarySysConfMapper().getOneByCode("currentVersion"); - //前一个版本 - int orderWeight = getSalarySysConfMapper().countByCode("previousVersion"); - if (currentVersion == null) { - //初始化版本 - SalarySysConfPO current = SalarySysConfPO.builder() - .id(IdGenerator.generate()) - .confKey("currentVersion") - .confValue(version) - .title("当前版本") - .module("basic") - .orderWeight(0) - .createTime(date) - .updateTime(date) - .deleteType(0).build(); - getSalarySysConfMapper().insertIgnoreNull(current); - } else { - //版本不一样 - if (!StringUtils.equals(version, currentVersion.getConfValue())) { - //生成历史版本记录 - SalarySysConfPO previous = SalarySysConfPO.builder() - .id(IdGenerator.generate()) - .confKey("previousVersion") - .confValue(currentVersion.getConfValue()) - .title("上一个版本") - .module("basic") - .orderWeight(orderWeight) - .createTime(date) - .updateTime(date) - .deleteType(0) - .build(); - getSalarySysConfMapper().insertIgnoreNull(previous); - - //更新当前版本 - currentVersion.setConfValue(version); - currentVersion.setUpdateTime(date); - getSalarySysConfMapper().updateIgnoreNull(currentVersion); - } - } - } - - @WeaSysInit(order = 2, description = "处理薪资档案历史数据") - public void handleSalaryArchiveHistoryData() { -// new SalaryArchiveServiceImpl().handleHistory(1L); - } - -} From 75d66e4cb97f9cf25e282a8a05e3601e570e8a37 Mon Sep 17 00:00:00 2001 From: Harryxzy Date: Thu, 6 Apr 2023 16:07:42 +0800 Subject: [PATCH 30/33] =?UTF-8?q?=E4=B8=93=E9=A1=B9=E9=99=84=E5=8A=A0?= =?UTF-8?q?=E6=89=A3=E9=99=A4=E5=AF=BC=E5=85=A5=20=E6=89=B9=E9=87=8F?= =?UTF-8?q?=E6=9B=B4=E6=96=B0=E5=88=86=E7=89=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/com/engine/salary/biz/SpecialAddDeductionBiz.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/com/engine/salary/biz/SpecialAddDeductionBiz.java b/src/com/engine/salary/biz/SpecialAddDeductionBiz.java index 7fc30292e..b18a80be4 100644 --- a/src/com/engine/salary/biz/SpecialAddDeductionBiz.java +++ b/src/com/engine/salary/biz/SpecialAddDeductionBiz.java @@ -90,7 +90,7 @@ public class SpecialAddDeductionBiz extends BaseBean { try { SpecialAddDeductionMapper mapper = sqlSession.getMapper(SpecialAddDeductionMapper.class); encryptUtil.encryptList(param, SpecialAddDeductionPO.class); - List> partition = Lists.partition(param, 100); + List> partition = Lists.partition(param, 50); partition.forEach(mapper::updateBatchSelective); sqlSession.commit(); } finally { From d5f6d053b37d99280e6113303e87050ff269148c Mon Sep 17 00:00:00 2001 From: Harryxzy Date: Thu, 6 Apr 2023 16:20:58 +0800 Subject: [PATCH 31/33] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E7=B4=AF=E8=AE=A1?= =?UTF-8?q?=E4=B8=93=E9=A1=B9=E9=99=84=E5=8A=A0=E6=89=A3=E9=99=A4=E5=AF=BC?= =?UTF-8?q?=E5=87=BA=E5=85=A8=E9=83=A8bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/com/engine/salary/web/AddUpDeductionController.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/com/engine/salary/web/AddUpDeductionController.java b/src/com/engine/salary/web/AddUpDeductionController.java index 42ff50530..b153fd475 100644 --- a/src/com/engine/salary/web/AddUpDeductionController.java +++ b/src/com/engine/salary/web/AddUpDeductionController.java @@ -9,6 +9,7 @@ import com.engine.salary.entity.datacollection.dto.AddUpDeductionDTO; import com.engine.salary.entity.datacollection.dto.AddUpDeductionRecordDTO; import com.engine.salary.entity.datacollection.param.*; import com.engine.salary.util.ResponseResult; +import com.engine.salary.util.SalaryDateUtil; import com.engine.salary.util.page.PageInfo; import com.engine.salary.wrapper.AddUpDeductionWrapper; import io.swagger.v3.oas.annotations.parameters.RequestBody; @@ -198,9 +199,11 @@ public class AddUpDeductionController { if (StringUtils.isNotBlank(id)) { param.setId(Long.valueOf(id)); } + String declareMonth = request.getParameter("declareMonth"); if (StringUtils.isNotBlank(declareMonth)) { - param.setDeclareMonth(Arrays.asList(declareMonth.split(","))); + param.setDeclareMonth(Arrays.stream(declareMonth.split(",")).map(e -> e + "-01 00:00:00").collect(Collectors.toList())); + param.setDeclareMonthDate(Arrays.stream(declareMonth.split(",")).map(e -> e + "-01 00:00:00").map(SalaryDateUtil::dateStrToLocalTime).collect(Collectors.toList())); } String username = request.getParameter("username"); From b0284022c1397515e4ff0439ef408c876bbec5ed Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Fri, 7 Apr 2023 14:39:22 +0800 Subject: [PATCH 32/33] =?UTF-8?q?=E6=A0=B8=E7=AE=97=E5=AF=BC=E5=87=BA?= =?UTF-8?q?=E5=85=A8=E9=83=A8=E5=8A=9F=E8=83=BD=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/impl/SalaryAcctExcelServiceImpl.java | 11 ++++------- .../salary/wrapper/SalaryAcctResultWrapper.java | 5 +---- 2 files changed, 5 insertions(+), 11 deletions(-) diff --git a/src/com/engine/salary/service/impl/SalaryAcctExcelServiceImpl.java b/src/com/engine/salary/service/impl/SalaryAcctExcelServiceImpl.java index be49a93d5..11bb3bd78 100644 --- a/src/com/engine/salary/service/impl/SalaryAcctExcelServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryAcctExcelServiceImpl.java @@ -2,7 +2,6 @@ package com.engine.salary.service.impl; import com.api.formmode.mybatis.util.SqlProxyHandle; import com.cloudstore.dev.api.util.Util_DataCache; -import com.cloudstore.eccom.pc.table.WeaTableColumn; import com.engine.common.util.ServiceUtil; import com.engine.core.impl.Service; import com.engine.salary.component.WeaTableColumnGroup; @@ -41,7 +40,6 @@ import com.engine.salary.util.SalaryEntityUtil; import com.engine.salary.util.SalaryI18nUtil; import com.engine.salary.util.excel.ExcelParseHelper; import com.engine.salary.util.excel.ExcelSupport; -import com.engine.salary.util.excel.ExcelUtil; import com.engine.salary.util.excel.ExcelUtilPlus; import com.engine.salary.util.page.Column; import com.engine.salary.util.valid.ValidUtil; @@ -54,11 +52,8 @@ import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.collections4.ListUtils; import org.apache.commons.lang3.StringUtils; -import org.apache.poi.ss.usermodel.CellType; import org.apache.poi.ss.usermodel.Sheet; -import org.apache.poi.ss.util.CellRangeAddress; import org.apache.poi.util.IOUtils; -import org.apache.poi.xssf.usermodel.XSSFCell; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import weaver.file.ImageFileManager; import weaver.hrm.User; @@ -300,8 +295,10 @@ public class SalaryAcctExcelServiceImpl extends Service implements SalaryAcctExc if (openSum != null && StringUtils.isNotBlank(openSum.getConfValue()) && OpenEnum.parseByValue(openSum.getConfValue()) == OpenEnum.OPEN) { total = true; Map sumRow = getSalaryAcctResultService(user).sumRow(queryParam); - sumRow.put("taxAgentName", "总计"); - resultMapList.add(sumRow); + if(sumRow !=null){ + sumRow.put("taxAgentName", "总计"); + resultMapList.add(sumRow); + } } // excel导出的数据 diff --git a/src/com/engine/salary/wrapper/SalaryAcctResultWrapper.java b/src/com/engine/salary/wrapper/SalaryAcctResultWrapper.java index 0d01aff15..1b4a210fd 100644 --- a/src/com/engine/salary/wrapper/SalaryAcctResultWrapper.java +++ b/src/com/engine/salary/wrapper/SalaryAcctResultWrapper.java @@ -17,7 +17,6 @@ import com.engine.salary.entity.salaryacct.po.SalaryAcctRecordPO; import com.engine.salary.exception.SalaryRunTimeException; import com.engine.salary.service.*; import com.engine.salary.service.impl.*; -import com.engine.salary.sys.entity.po.SalarySysConfPO; import com.engine.salary.sys.service.SalarySysConfService; import com.engine.salary.sys.service.impl.SalarySysConfServiceImpl; import com.engine.salary.util.SalaryEntityUtil; @@ -32,8 +31,6 @@ import weaver.hrm.User; import java.math.BigDecimal; import java.util.*; -import static com.engine.salary.sys.constant.SalarySysConstant.OPEN_ACCT_RESULT_SUM; - /** * 薪资核算结果 *

Copyright: Copyright (c) 2022

@@ -125,7 +122,7 @@ public class SalaryAcctResultWrapper extends Service { Map datas = new HashMap<>(); //合计 - SalarySysConfPO openSum = getSalarySysConfService(user).getOneByCode(OPEN_ACCT_RESULT_SUM); +// SalarySysConfPO openSum = getSalarySysConfService(user).getOneByCode(OPEN_ACCT_RESULT_SUM); Map sumRow = getSalaryAcctResultService(user).sumRow(queryParam); datas.put("sumRow", sumRow); return datas; From 207d338ec2c7c41f7c353f9066a648fb5132066a Mon Sep 17 00:00:00 2001 From: Harryxzy Date: Fri, 7 Apr 2023 15:14:07 +0800 Subject: [PATCH 33/33] =?UTF-8?q?=E8=96=AA=E8=B5=84=E8=B4=A6=E5=A5=97?= =?UTF-8?q?=E9=87=8D=E5=A4=8D=E8=96=AA=E8=B5=84=E9=A1=B9=E7=9B=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../engine/salary/biz/SalarySobItemBiz.java | 14 +++++ .../mapper/salarysob/SalarySobItemMapper.java | 6 +- .../mapper/salarysob/SalarySobItemMapper.xml | 57 +++++++++++++++++++ .../impl/SalarySobItemServiceImpl.java | 42 +++++++++++--- .../service/impl/SalarySobServiceImpl.java | 3 +- 5 files changed, 113 insertions(+), 9 deletions(-) diff --git a/src/com/engine/salary/biz/SalarySobItemBiz.java b/src/com/engine/salary/biz/SalarySobItemBiz.java index afecfeeb2..f5537d7d5 100644 --- a/src/com/engine/salary/biz/SalarySobItemBiz.java +++ b/src/com/engine/salary/biz/SalarySobItemBiz.java @@ -140,4 +140,18 @@ public class SalarySobItemBiz { } + public void batchInsertItemShow(List list) { + if (CollectionUtils.isEmpty(list)) { + return; + } + SqlSession sqlSession = MyBatisFactory.sqlSessionFactory.openSession(); + try { + SalarySobItemMapper mapper = sqlSession.getMapper(SalarySobItemMapper.class); + List> partition = Lists.partition( list, 100); + partition.forEach(mapper::batchInsertItemShow); + sqlSession.commit(); + } finally { + sqlSession.close(); + } + } } diff --git a/src/com/engine/salary/mapper/salarysob/SalarySobItemMapper.java b/src/com/engine/salary/mapper/salarysob/SalarySobItemMapper.java index 7fcfc7ee7..0900cfa60 100644 --- a/src/com/engine/salary/mapper/salarysob/SalarySobItemMapper.java +++ b/src/com/engine/salary/mapper/salarysob/SalarySobItemMapper.java @@ -112,5 +112,9 @@ public interface SalarySobItemMapper { void deleteByGroupIds(@Param("groupIds") List needDeleteGroupIds); - + /** + * 批量插入薪资项目分组是否显示 + * @param list + */ + void batchInsertItemShow(@Param("collection")List list); } \ No newline at end of file diff --git a/src/com/engine/salary/mapper/salarysob/SalarySobItemMapper.xml b/src/com/engine/salary/mapper/salarysob/SalarySobItemMapper.xml index 671e52a16..cf3d2173e 100644 --- a/src/com/engine/salary/mapper/salarysob/SalarySobItemMapper.xml +++ b/src/com/engine/salary/mapper/salarysob/SalarySobItemMapper.xml @@ -434,6 +434,63 @@ #{tenantKey},#{createTime},#{updateTime},0) + + insert into hrsa_salary_item_hide (id,salary_sob_id,salary_item_id,is_group,item_hide, + creator,tenant_key,create_time,update_time,delete_type) + VALUES + + ( + #{item.id}, + #{item.salarySobId}, + #{item.salaryItemId}, + #{item.isGroup}, + #{item.itemHide}, + #{item.creator}, + #{item.tenantKey}, + #{item.createTime}, + #{item.updateTime}, + 0 + ) + + + + insert into hrsa_salary_item_hide (id,salary_sob_id,salary_item_id,is_group,item_hide, + creator,tenant_key,create_time,update_time,delete_type) + + select + #{item.id,jdbcType=DOUBLE}, + #{item.salarySobId,jdbcType=DOUBLE}, + #{item.salaryItemId,jdbcType=DOUBLE}, + #{item.isGroup,jdbcType=INTEGER}, + #{item.itemHide,jdbcType=INTEGER}, + #{item.creator,jdbcType=DOUBLE}, + #{item.tenantKey,jdbcType=VARCHAR}, + #{item.createTime,jdbcType=DATE}, + #{item.updateTime,jdbcType=DATE}, + 0 + from dual + + + + + insert into hrsa_salary_item_hide (id,salary_sob_id,salary_item_id,is_group,item_hide, + creator,tenant_key,create_time,update_time,delete_type) + VALUES + ( + #{item.id}, + #{item.salarySobId}, + #{item.salaryItemId}, + #{item.isGroup}, + #{item.itemHide}, + #{item.creator}, + #{item.tenantKey}, + #{item.createTime}, + #{item.updateTime}, + 0 + ) + + + UPDATE hrsa_salary_sob_item diff --git a/src/com/engine/salary/service/impl/SalarySobItemServiceImpl.java b/src/com/engine/salary/service/impl/SalarySobItemServiceImpl.java index c845addf4..e370e40e3 100644 --- a/src/com/engine/salary/service/impl/SalarySobItemServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalarySobItemServiceImpl.java @@ -153,6 +153,8 @@ public class SalarySobItemServiceImpl extends Service implements SalarySobItemSe List salarySobItemGroupPOS = getSalarySobItemGroupService(user).listBySalarySobIdWithItemHide(salarySobId); // 查询薪资账套的薪资项目副本 List salarySobItemPOS = listBySalarySobIdWithHideItem(salarySobId); + // 薪资项目副本去重 + salarySobItemPOS = salarySobItemPOS.stream().filter(SalaryEntityUtil.distinctByKey(PO -> PO.getSalarySobId() + "-" + PO.getSalaryItemId())).collect(Collectors.toList()); // 回算薪资项目 List salarySobBackItems = getSalarySobBackItemService(user).listBySalarySobId(salarySobId); // 薪资账套的薪资项目副本所用的公式id @@ -346,6 +348,9 @@ public class SalarySobItemServiceImpl extends Service implements SalarySobItemSe List needUpdateGroup = itemGroups.stream().filter(f -> f.getId() != null && oldGroupIds.contains(f.getId())).collect(Collectors.toList()); List needDeleteGroupIds = oldGroupIds.stream().filter(f -> !newGroupIds.contains(f)).collect(Collectors.toList()); + // 需要保存的隐藏项目 + List needInsertItemShow = new ArrayList<>(); + //先保存项目分类获,取分类id Collection salarySobItems = new ArrayList<>(); for (SalarySobItemSaveParam.SalarySobItemGroupParam itemGroupParam : needAddGroup) { @@ -383,7 +388,8 @@ public class SalarySobItemServiceImpl extends Service implements SalarySobItemSe if (itemGroupParam.getItemHide() == null) { salarySobGroupItemHidePO.setItemHide(Long.valueOf(0)); } - salarySobItemMapper.InsertItemShow(salarySobGroupItemHidePO); + needInsertItemShow.add(salarySobGroupItemHidePO); +// salarySobItemMapper.InsertItemShow(salarySobGroupItemHidePO); for (SalarySobItemSaveParam.SalarySobItemParam itemParam : itemGroupParam.getItems()) { @@ -417,7 +423,8 @@ public class SalarySobItemServiceImpl extends Service implements SalarySobItemSe .deleteType(NumberUtils.INTEGER_ZERO) .tenantKey(SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY) .build(); - salarySobItemMapper.InsertItemShow(salarySobItemHidePO); +// salarySobItemMapper.InsertItemShow(salarySobItemHidePO); + needInsertItemShow.add(salarySobItemHidePO); } } @@ -451,7 +458,8 @@ public class SalarySobItemServiceImpl extends Service implements SalarySobItemSe if (itemGroupParam.getItemHide() == null) { salarySobGroupItemHidePO.setItemHide(Long.valueOf(0)); } - salarySobItemMapper.InsertItemShow(salarySobGroupItemHidePO); +// salarySobItemMapper.InsertItemShow(salarySobGroupItemHidePO); + needInsertItemShow.add(salarySobGroupItemHidePO); List items = itemGroupParam.getItems(); @@ -494,7 +502,8 @@ public class SalarySobItemServiceImpl extends Service implements SalarySobItemSe .deleteType(NumberUtils.INTEGER_ZERO) .tenantKey(SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY) .build(); - salarySobItemMapper.InsertItemShow(salarySobItemHidePO); +// salarySobItemMapper.InsertItemShow(salarySobItemHidePO); + needInsertItemShow.add(salarySobItemHidePO); } //更新 for (SalarySobItemSaveParam.SalarySobItemParam itemParam : needUpdateItems) { @@ -523,7 +532,8 @@ public class SalarySobItemServiceImpl extends Service implements SalarySobItemSe .deleteType(NumberUtils.INTEGER_ZERO) .tenantKey(SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY) .build(); - salarySobItemMapper.InsertItemShow(salarySobItemHidePO); +// salarySobItemMapper.InsertItemShow(salarySobItemHidePO); + needInsertItemShow.add(salarySobItemHidePO); } @@ -578,7 +588,8 @@ public class SalarySobItemServiceImpl extends Service implements SalarySobItemSe .deleteType(NumberUtils.INTEGER_ZERO) .tenantKey(SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY) .build(); - salarySobItemMapper.InsertItemShow(salarySobItemHidePO); +// salarySobItemMapper.InsertItemShow(salarySobItemHidePO); + needInsertItemShow.add(salarySobItemHidePO); } for (SalarySobItemSaveParam.SalarySobItemParam itemParam : needUpdateItems) { @@ -606,7 +617,8 @@ public class SalarySobItemServiceImpl extends Service implements SalarySobItemSe .deleteType(NumberUtils.INTEGER_ZERO) .tenantKey(SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY) .build(); - salarySobItemMapper.InsertItemShow(salarySobItemHidePO); +// salarySobItemMapper.InsertItemShow(salarySobItemHidePO); + needInsertItemShow.add(salarySobItemHidePO); } if (CollectionUtils.isNotEmpty(needDeleteItemIds)) { @@ -615,8 +627,13 @@ public class SalarySobItemServiceImpl extends Service implements SalarySobItemSe // 保存薪资账套的薪资项目副本 batchSave(salarySobItems); + + // 保存薪资账套的薪资项目隐藏信息 + batchSaveShow(needInsertItemShow); } + + private void handleEmpField(SalarySobItemSaveParam saveParam) { long employeeId = (long) user.getUID(); Date now = new Date(); @@ -670,6 +687,17 @@ public class SalarySobItemServiceImpl extends Service implements SalarySobItemSe salarySobItemMapper.batchInsert(list); } + private void batchSaveShow(List needInsertItemShow) { + if (CollectionUtils.isEmpty(needInsertItemShow)) { + return; + } + //前端可能传重复数据,去重 + List list = new ArrayList<>(needInsertItemShow.stream() + .collect(Collectors.toMap(SalarySobItemHidePO::getSalaryItemId, Function.identity(), (oldValue, newValue) -> oldValue)) + .values()); + salarySobItemMapper.batchInsertItemShow(list); + } + @Override public void deleteBySalarySobIds(Collection salarySobIds) { salarySobItemMapper.deleteBySalarySobIds(salarySobIds); diff --git a/src/com/engine/salary/service/impl/SalarySobServiceImpl.java b/src/com/engine/salary/service/impl/SalarySobServiceImpl.java index a34e2b74b..189a819c0 100644 --- a/src/com/engine/salary/service/impl/SalarySobServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalarySobServiceImpl.java @@ -23,7 +23,6 @@ import com.engine.salary.enums.SalarySystemTypeEnum; import com.engine.salary.enums.salarysob.IncomeCategoryEnum; import com.engine.salary.enums.salarysob.SalaryEmployeeStatusEnum; import com.engine.salary.exception.SalaryRunTimeException; -import com.engine.salary.mapper.salarysob.SalarySobDefaultItemMapper; import com.engine.salary.mapper.salarysob.SalarySobMapper; import com.engine.salary.service.*; import com.engine.salary.util.SalaryEntityUtil; @@ -603,6 +602,8 @@ public class SalarySobServiceImpl extends Service implements SalarySobService { List salarySobEmpFieldPOS = salarySobEmpFieldService.listSome(SalarySobEmpFieldPO.builder().salarySobId(duplicateParam.getId()).build()); // 查询薪资账套的薪资项目副本 List salarySobItemPOS = salarySobItemService.listBySalarySobIdWithHideItem(SalarySobItemPO.builder().salarySobId(duplicateParam.getId()).build()); + // 薪资项目副本去重 + salarySobItemPOS = salarySobItemPOS.stream().filter(SalaryEntityUtil.distinctByKey(PO -> PO.getSalarySobId() + "-" + PO.getSalaryItemId())).collect(Collectors.toList()); // 查询薪资账套的薪资项目分类 List salarySobItemGroupPOS = salarySobItemGroupService.listSomeWithItemHide(SalarySobItemGroupPO.builder().salarySobId(duplicateParam.getId()).build()); // 查询薪资账套的调薪计薪规则