From e0fcff792d26db4a5ba9edf447c7638d356cbfb9 Mon Sep 17 00:00:00 2001 From: sy Date: Wed, 15 Nov 2023 10:17:12 +0800 Subject: [PATCH 01/28] =?UTF-8?q?=E8=96=AA=E9=85=AC=E7=B3=BB=E7=BB=9F-?= =?UTF-8?q?=E7=A6=8F=E5=88=A9=E6=A1=A3=E6=A1=88=EF=BC=8C=E7=A6=8F=E5=88=A9?= =?UTF-8?q?=E6=A1=A3=E6=A1=88=E5=8F=8A=E6=A8=A1=E6=9D=BF=E5=AF=BC=E5=87=BA?= =?UTF-8?q?=E5=8F=82=E6=95=B0=E8=AE=BE=E7=BD=AE=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/com/engine/salary/web/SISchemeController.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/com/engine/salary/web/SISchemeController.java b/src/com/engine/salary/web/SISchemeController.java index 66bab3825..bcf226914 100644 --- a/src/com/engine/salary/web/SISchemeController.java +++ b/src/com/engine/salary/web/SISchemeController.java @@ -233,6 +233,7 @@ public class SISchemeController { workbook.write(outputStream); outputStream.flush(); }; + response.setContentType("application/octet-stream"); return Response.ok(output) .header("Content-disposition", "attachment;filename=" + fileName) .header("Cache-Control", "no-cache").build(); @@ -313,6 +314,7 @@ public class SISchemeController { workbook.write(outputStream); outputStream.flush(); }; + response.setContentType("application/octet-stream"); return Response.ok(output) .header("Content-disposition", "attachment;filename=" + fileName) .header("Cache-Control", "no-cache").build(); From 97a5d4ab91eb84fbe39883d5aa3ab63cdb8fdca4 Mon Sep 17 00:00:00 2001 From: Harryxzy Date: Wed, 15 Nov 2023 17:12:52 +0800 Subject: [PATCH 02/28] =?UTF-8?q?=E7=BA=BF=E4=B8=8B=E5=AF=B9=E6=AF=94?= =?UTF-8?q?=E8=A1=A8=E5=A4=B4=E6=94=B9=E9=80=A0=E6=88=90=E5=88=86=E7=BB=84?= =?UTF-8?q?=E7=9A=84=E6=A0=B7=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../salaryacct/bo/SalaryAcctResultBO.java | 52 ++++++++- .../dto/SalaryComparisonResultListDTO.java | 4 +- .../impl/SalaryAcctExcelServiceImpl.java | 106 +++++++++++++----- .../SalaryComparisonResultServiceImpl.java | 6 +- .../salary/web/SalaryAcctController.java | 2 +- .../SalaryComparisonResultWrapper.java | 10 +- 6 files changed, 137 insertions(+), 43 deletions(-) diff --git a/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctResultBO.java b/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctResultBO.java index 57b6e1927..d736bf37f 100644 --- a/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctResultBO.java +++ b/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctResultBO.java @@ -23,7 +23,6 @@ import com.engine.salary.enums.salaryaccounting.LockStatusEnum; import com.engine.salary.enums.salaryitem.SalaryDataTypeEnum; import com.engine.salary.util.SalaryEntityUtil; import com.engine.salary.util.SalaryI18nUtil; -import com.engine.salary.util.page.Column; import com.google.common.collect.Lists; import com.google.common.collect.Maps; import org.apache.commons.collections4.CollectionUtils; @@ -86,36 +85,77 @@ public class SalaryAcctResultBO { // } + /** * 构建薪资核算结果列表的表头(线下对比) * * @param salarySobItemAggregateDTO * @return */ - public static List buildTableColumns4ComparisonResult(SalarySobItemAggregateDTO salarySobItemAggregateDTO, Set excludeSalaryItemIds) { - List columns = Lists.newArrayList(); + public static List buildTableColumns4ComparisonResult(SalarySobItemAggregateDTO salarySobItemAggregateDTO, Set excludeSalaryItemIds) { + List columns = Lists.newArrayList(); // 员工信息字段 for (SalarySobEmpFieldDTO salarySobEmpFieldDTO : salarySobItemAggregateDTO.getEmpFields()) { - columns.add(new Column(salarySobEmpFieldDTO.getFieldName(), salarySobEmpFieldDTO.getFieldId(), salarySobEmpFieldDTO.getFieldId())); + columns.add(new WeaTableColumnGroup("150", salarySobEmpFieldDTO.getFieldName(), salarySobEmpFieldDTO.getFieldId(), salarySobEmpFieldDTO.getFieldId())); } // 薪资项目分组下的薪资项目 for (SalarySobItemGroupDTO salarySobItemGroupDTO : salarySobItemAggregateDTO.getItemGroups()) { if (CollectionUtils.isEmpty(salarySobItemGroupDTO.getItems())) { continue; } + List childrenColumns = Lists.newArrayList(); for (SalarySobItemDTO salarySobItemDTO : salarySobItemGroupDTO.getItems()) { if (excludeSalaryItemIds.contains(salarySobItemDTO.getSalaryItemId())) { continue; } - columns.add(new Column(salarySobItemDTO.getName(), "" + salarySobItemDTO.getSalaryItemId(), "" + salarySobItemDTO.getSalaryItemId())); + childrenColumns.add(new WeaTableColumnGroup("150", salarySobItemDTO.getName(), "" + salarySobItemDTO.getSalaryItemId(), "" + salarySobItemDTO.getSalaryItemId())); } + WeaTableColumnGroup weaTableColumnWapper = new WeaTableColumnGroup("150", salarySobItemGroupDTO.getName(), String.valueOf(salarySobItemGroupDTO.getId()), childrenColumns); + columns.add(weaTableColumnWapper); } // 没有分类的薪资项目 for (SalarySobItemDTO salarySobItemDTO : salarySobItemAggregateDTO.getItems()) { if (excludeSalaryItemIds.contains(salarySobItemDTO.getSalaryItemId())) { continue; } - columns.add(new Column(salarySobItemDTO.getName(), "" + salarySobItemDTO.getSalaryItemId(), "" + salarySobItemDTO.getSalaryItemId())); + columns.add(new WeaTableColumnGroup("150", salarySobItemDTO.getName(), "" + salarySobItemDTO.getSalaryItemId(), "" + salarySobItemDTO.getSalaryItemId())); + } + return columns; + } + + /** + * 构建薪资核算结果列表的表头(线下对比) + * + * @param salarySobItemAggregateDTO + * @return + */ + public static List buildTableColumns4ComparisonResultByGroup(SalarySobItemAggregateDTO salarySobItemAggregateDTO, Set excludeSalaryItemIds) { + List columns = Lists.newArrayList(); + // 员工信息字段 + for (SalarySobEmpFieldDTO salarySobEmpFieldDTO : salarySobItemAggregateDTO.getEmpFields()) { + columns.add(new WeaTableColumnGroup("150", salarySobEmpFieldDTO.getFieldName(), salarySobEmpFieldDTO.getFieldId(), salarySobEmpFieldDTO.getFieldId())); + } + // 薪资项目分组下的薪资项目 + for (SalarySobItemGroupDTO salarySobItemGroupDTO : salarySobItemAggregateDTO.getItemGroups()) { + if (CollectionUtils.isEmpty(salarySobItemGroupDTO.getItems())) { + continue; + } + List childrenColumns = Lists.newArrayList(); + for (SalarySobItemDTO salarySobItemDTO : salarySobItemGroupDTO.getItems()) { + if (excludeSalaryItemIds.contains(salarySobItemDTO.getSalaryItemId())) { + continue; + } + childrenColumns.add(new WeaTableColumnGroup("150", salarySobItemDTO.getName(), "" + salarySobItemDTO.getSalaryItemId(), "" + salarySobItemDTO.getSalaryItemId())); + } + WeaTableColumnGroup weaTableColumnWapper = new WeaTableColumnGroup("150", salarySobItemGroupDTO.getName(), String.valueOf(salarySobItemGroupDTO.getId()), childrenColumns); + columns.add(weaTableColumnWapper); + } + // 没有分类的薪资项目 + for (SalarySobItemDTO salarySobItemDTO : salarySobItemAggregateDTO.getItems()) { + if (excludeSalaryItemIds.contains(salarySobItemDTO.getSalaryItemId())) { + continue; + } + columns.add(new WeaTableColumnGroup("150", salarySobItemDTO.getName(), "" + salarySobItemDTO.getSalaryItemId(), "" + salarySobItemDTO.getSalaryItemId())); } return columns; } diff --git a/src/com/engine/salary/entity/salaryacct/dto/SalaryComparisonResultListDTO.java b/src/com/engine/salary/entity/salaryacct/dto/SalaryComparisonResultListDTO.java index 39fc6b164..2667b00bb 100644 --- a/src/com/engine/salary/entity/salaryacct/dto/SalaryComparisonResultListDTO.java +++ b/src/com/engine/salary/entity/salaryacct/dto/SalaryComparisonResultListDTO.java @@ -1,6 +1,6 @@ package com.engine.salary.entity.salaryacct.dto; -import com.engine.salary.util.page.Column; +import com.engine.salary.component.WeaTableColumnGroup; import com.engine.salary.util.page.PageInfo; import lombok.AllArgsConstructor; import lombok.Data; @@ -25,7 +25,7 @@ import java.util.Map; public class SalaryComparisonResultListDTO { //列表的表头 - private List weaTableColumns; + private List weaTableColumns; //列表数据 private PageInfo> data; diff --git a/src/com/engine/salary/service/impl/SalaryAcctExcelServiceImpl.java b/src/com/engine/salary/service/impl/SalaryAcctExcelServiceImpl.java index badb78634..fced76437 100644 --- a/src/com/engine/salary/service/impl/SalaryAcctExcelServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryAcctExcelServiceImpl.java @@ -43,7 +43,6 @@ 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.ExcelUtilPlus; -import com.engine.salary.util.page.Column; import com.engine.salary.util.valid.ValidUtil; import com.engine.salary.wrapper.SalarySobItemWrapper; import com.google.common.collect.Lists; @@ -695,16 +694,30 @@ public class SalaryAcctExcelServiceImpl extends Service implements SalaryAcctExc // 查询薪资项目 List salaryItemPOS = getSalarySobItemService(user).listBySalarySobId4SalaryItem(salaryAcctRecordPO.getSalarySobId()); Set salaryItemIds = SalaryEntityUtil.properties(salaryItemPOS, salaryItemPO -> "" + salaryItemPO.getId()); - for (Column weaTableColumn : salaryComparisonResultListDTO.getWeaTableColumns()) { + for (WeaTableColumnGroup weaTableColumnGroup : salaryComparisonResultListDTO.getWeaTableColumns()) { // 员工信息字段 - if (employeeFieldCodeSet.contains(weaTableColumn.getKey())) { - headerList.add(weaTableColumn.getTitle()); - } - // 薪资项目的表头 - if (salaryItemIds.contains(weaTableColumn.getKey())) { - headerList.add(weaTableColumn.getTitle() + " (线上值)"); - headerList.add(weaTableColumn.getTitle() + " (线下值)"); + if (employeeFieldCodeSet.contains(weaTableColumnGroup.getColumn())) { + headerList.add(weaTableColumnGroup.getText()); + } else { + // 薪资项目的表头 + List childrenList = weaTableColumnGroup.getChildren(); + if (CollectionUtils.isEmpty(childrenList)) { + // 是否是无分类 + if (salaryItemIds.contains(weaTableColumnGroup.getColumn())) { + headerList.add(weaTableColumnGroup.getText() + " (线上值)"); + headerList.add(weaTableColumnGroup.getText() + " (线下值)"); + } + } else { + for (WeaTableColumnGroup children : childrenList) { + if (salaryItemIds.contains(children.getColumn())) { + headerList.add(children.getText() + " (线上值)"); + headerList.add(children.getText() + " (线下值)"); + } + } + } } + + } List> resultMapList = salaryComparisonResultListDTO.getData().getList(); @@ -713,16 +726,28 @@ public class SalaryAcctExcelServiceImpl extends Service implements SalaryAcctExc rows.add(headerList); for (Map map : resultMapList) { List row = Lists.newArrayList(); - for (Column weaTableColumn : salaryComparisonResultListDTO.getWeaTableColumns()) { + for (WeaTableColumnGroup weaTableColumnGroup : salaryComparisonResultListDTO.getWeaTableColumns()) { // 员工信息字段的值 - if (employeeFieldCodeSet.contains(weaTableColumn.getKey())) { - row.add(map.get(weaTableColumn.getKey())); + if (employeeFieldCodeSet.contains(weaTableColumnGroup.getColumn())) { + row.add(map.get(weaTableColumnGroup.getColumn())); } // 薪资项目的值 - if (salaryItemIds.contains(weaTableColumn.getKey())) { - Map tempMap = (Map) map.getOrDefault(weaTableColumn.getKey(), Collections.emptyMap()); - row.add(tempMap.get("acctResultValue")); - row.add(tempMap.get("excelResultValue")); + List childrenList = weaTableColumnGroup.getChildren(); + if (CollectionUtils.isEmpty(childrenList)) { + // 是否是无分类 + if (salaryItemIds.contains(weaTableColumnGroup.getColumn())) { + Map tempMap = (Map) map.getOrDefault(weaTableColumnGroup.getColumn(), Collections.emptyMap()); + row.add(tempMap.get("acctResultValue")); + row.add(tempMap.get("excelResultValue")); + } + } else { + for (WeaTableColumnGroup children : childrenList) { + if (salaryItemIds.contains(children.getColumn())) { + Map tempMap = (Map) map.getOrDefault(children.getColumn(), Collections.emptyMap()); + row.add(tempMap.get("acctResultValue")); + row.add(tempMap.get("excelResultValue")); + } + } } } rows.add(row); @@ -775,12 +800,37 @@ public class SalaryAcctExcelServiceImpl extends Service implements SalaryAcctExc for (SalarySobItemDTO item : salarySobItemAggregateDTO.getItems()) { headerList.add(item.getName()); } + + + // 无分类薪资项目id + List noGroupItemIds = salarySobItemAggregateDTO.getItems().stream().map(dto -> String.valueOf(dto.getSalaryItemId())).collect(Collectors.toList()); + // 查询列表的表头 + List weaTableColumns = listWeaTableColumn(salaryAcctRecordPO); + List finalWeaTableColumns = new ArrayList<>(); + finalWeaTableColumns.add(new WeaTableColumnGroup("150", SalaryI18nUtil.getI18nLabel(85429, "姓名"), SalaryI18nUtil.getI18nLabel(85429, "姓名"))); + finalWeaTableColumns.add(new WeaTableColumnGroup("150", SalaryI18nUtil.getI18nLabel(86184, "个税扣缴义务人"), SalaryI18nUtil.getI18nLabel(86184, "个税扣缴义务人"))); + finalWeaTableColumns.add(new WeaTableColumnGroup("150", "部门", "部门")); + finalWeaTableColumns.add(new WeaTableColumnGroup("150", "手机号", "手机号")); + finalWeaTableColumns.add(new WeaTableColumnGroup("150", "工号", "工号")); + for (WeaTableColumnGroup tableColumn : weaTableColumns) { + WeaTableColumnGroup columnGroupItem = (WeaTableColumnGroup) tableColumn; + if (columnGroupItem.getChildren() != null) { + columnGroupItem.setChildren(columnGroupItem.getChildren()); + finalWeaTableColumns.add(columnGroupItem); + } else if (noGroupItemIds.contains(columnGroupItem.getColumn())) { + // 无分类 + finalWeaTableColumns.add(columnGroupItem); + } + } + + List> rows = new ArrayList<>(); - rows.add(headerList); + rows.add(finalWeaTableColumns); String sheetName = "线下对比结果导入模板"; // return ExcelUtil.genWorkbookV2(rows, sheetName); - return ExcelUtilPlus.genWorkbookV2(rows, sheetName); +// return ExcelUtilPlus.genWorkbookV2(rows, sheetName); + return ExcelUtilPlus.genWorkbookWithChildTitleColumn(rows, sheetName, false); } public Map importSalaryAcctResult(SalaryAcctImportParam param) { @@ -804,8 +854,8 @@ public class SalaryAcctExcelServiceImpl extends Service implements SalaryAcctExc try { fileInputStream = ImageFileManager.getInputStreamById(Integer.parseInt(param.getImageId())); Sheet sheet = ExcelSupport.parseFile(fileInputStream, 0, EXCEL_TYPE_XLSX); - map.put("headers", ExcelSupport.getSheetHeader(sheet, 0)); - map.put("list", ExcelParseHelper.parse2List(sheet, 1)); + map.put("headers", ExcelSupport.getSheetHeader(sheet, 1)); + map.put("list", ExcelParseHelper.parse2List(sheet, 2)); return map; } finally { @@ -921,20 +971,20 @@ public class SalaryAcctExcelServiceImpl extends Service implements SalaryAcctExc // 表头 // List headers = ExcelSupport.getSheetHeader(sheet, 0); List headers; - if (StringUtils.equals("importSalaryAcctResult", importType)) { +// if (StringUtils.equals("importSalaryAcctResult", importType)) { headers = ExcelSupport.getSheetHeader(sheet, 1); - } else { - headers = ExcelSupport.getSheetHeader(sheet, 0); - } +// } else { +// headers = ExcelSupport.getSheetHeader(sheet, 0); +// } // 处理数值 // List> data = ExcelParseHelper.parse2Map(sheet, 1); List> data; - if (StringUtils.equals("importSalaryAcctResult", importType)) { +// if (StringUtils.equals("importSalaryAcctResult", importType)) { data = ExcelParseHelper.parse2Map(sheet, 2, 1); - } else { - data = ExcelParseHelper.parse2Map(sheet, 1); - } +// } else { +// data = ExcelParseHelper.parse2Map(sheet, 1); +// } if (CollectionUtils.isEmpty(headers)) { throw new RuntimeException("表头为空"); diff --git a/src/com/engine/salary/service/impl/SalaryComparisonResultServiceImpl.java b/src/com/engine/salary/service/impl/SalaryComparisonResultServiceImpl.java index 3c979d6bf..bff73dd2f 100644 --- a/src/com/engine/salary/service/impl/SalaryComparisonResultServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryComparisonResultServiceImpl.java @@ -2,6 +2,7 @@ package com.engine.salary.service.impl; import com.engine.common.util.ServiceUtil; import com.engine.core.impl.Service; +import com.engine.salary.component.WeaTableColumnGroup; import com.engine.salary.encrypt.EncryptUtil; import com.engine.salary.entity.datacollection.DataCollectionEmployee; import com.engine.salary.entity.salaryacct.bo.SalaryAcctResultBO; @@ -27,7 +28,6 @@ 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.page.Column; import com.engine.salary.util.page.PageInfo; import com.engine.salary.util.page.SalaryPageUtil; import com.google.common.collect.Lists; @@ -173,7 +173,7 @@ public class SalaryComparisonResultServiceImpl extends Service implements Salary List salaryAcctEmployeePOS = getSalaryAcctEmployeeService(user).listByResultQueryParam(queryParam); if (CollectionUtils.isEmpty(salaryAcctEmployeePOS)) { // 构建薪资核算结果列表表头 - List weaTableColumns = SalaryAcctResultBO.buildTableColumns4ComparisonResult(salarySobItemAggregateDTO, Collections.emptySet()); + List weaTableColumns = SalaryAcctResultBO.buildTableColumns4ComparisonResultByGroup(salarySobItemAggregateDTO, Collections.emptySet()); // 构建列表数据 // 返回结果 return new SalaryComparisonResultListDTO().setWeaTableColumns(weaTableColumns).setData(new PageInfo<>()); @@ -246,7 +246,7 @@ public class SalaryComparisonResultServiceImpl extends Service implements Salary .collect(Collectors.toSet()); } // 构建薪资核算结果列表表头 - List weaTableColumns = SalaryAcctResultBO.buildTableColumns4ComparisonResult(salarySobItemAggregateDTO, excludeSalaryItemIds); + List weaTableColumns = SalaryAcctResultBO.buildTableColumns4ComparisonResultByGroup(salarySobItemAggregateDTO, excludeSalaryItemIds); // 返回结果 return new SalaryComparisonResultListDTO().setWeaTableColumns(weaTableColumns).setData(dtoPage); } diff --git a/src/com/engine/salary/web/SalaryAcctController.java b/src/com/engine/salary/web/SalaryAcctController.java index 078060a02..47baab85e 100644 --- a/src/com/engine/salary/web/SalaryAcctController.java +++ b/src/com/engine/salary/web/SalaryAcctController.java @@ -696,7 +696,7 @@ public class SalaryAcctController { @Produces(MediaType.APPLICATION_JSON) public String listComparisonResult(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody SalaryComparisonResultQueryParam param) { User user = HrmUserVarify.getUser(request, response); - return new ResponseResult>>(user).run(getSalaryComparisonResultWrapper(user)::listPage, param); + return new ResponseResult>(user).run(getSalaryComparisonResultWrapper(user)::listPage, param); } diff --git a/src/com/engine/salary/wrapper/SalaryComparisonResultWrapper.java b/src/com/engine/salary/wrapper/SalaryComparisonResultWrapper.java index 0e16028b2..69ae4ccf4 100644 --- a/src/com/engine/salary/wrapper/SalaryComparisonResultWrapper.java +++ b/src/com/engine/salary/wrapper/SalaryComparisonResultWrapper.java @@ -12,6 +12,7 @@ import com.engine.salary.service.impl.SalaryComparisonResultServiceImpl; import com.engine.salary.util.page.PageInfo; import weaver.hrm.User; +import java.util.HashMap; import java.util.Map; /** @@ -41,13 +42,16 @@ public class SalaryComparisonResultWrapper extends Service { * @param queryParam 列表查询条件 * @return */ - public PageInfo> listPage(SalaryComparisonResultQueryParam queryParam) { + public Map listPage(SalaryComparisonResultQueryParam queryParam) { // 查询薪资核算线下对比列表 SalaryComparisonResultListDTO salaryComparisonResultListDTO = getSalaryComparisonResultService(user).listPageByParam(queryParam); PageInfo> pageInfo = salaryComparisonResultListDTO.getData(); - pageInfo.setColumns(salaryComparisonResultListDTO.getWeaTableColumns()); - return pageInfo; + Map datas = new HashMap<>(); + datas.put("pageInfo", pageInfo); + datas.put("columns", salaryComparisonResultListDTO.getWeaTableColumns()); + + return datas; } } From c0ca63129e5e95134c2f3739afebd56eec4710a2 Mon Sep 17 00:00:00 2001 From: Harryxzy Date: Thu, 16 Nov 2023 16:56:50 +0800 Subject: [PATCH 03/28] =?UTF-8?q?=E7=BA=BF=E4=B8=8B=E5=AF=B9=E6=AF=94?= =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../impl/SalaryComparisonResultServiceImpl.java | 13 +++++++++---- .../wrapper/SalaryComparisonResultWrapper.java | 2 +- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/src/com/engine/salary/service/impl/SalaryComparisonResultServiceImpl.java b/src/com/engine/salary/service/impl/SalaryComparisonResultServiceImpl.java index bff73dd2f..25e926aaf 100644 --- a/src/com/engine/salary/service/impl/SalaryComparisonResultServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryComparisonResultServiceImpl.java @@ -17,10 +17,7 @@ import com.engine.salary.entity.salaryformula.ExpressFormula; import com.engine.salary.entity.salaryitem.po.SalaryItemPO; import com.engine.salary.entity.salarysob.bo.SalarySobItemAggregateBO; import com.engine.salary.entity.salarysob.dto.SalarySobItemAggregateDTO; -import com.engine.salary.entity.salarysob.po.SalarySobEmpFieldPO; -import com.engine.salary.entity.salarysob.po.SalarySobItemGroupPO; -import com.engine.salary.entity.salarysob.po.SalarySobItemPO; -import com.engine.salary.entity.salarysob.po.SalarySobPO; +import com.engine.salary.entity.salarysob.po.*; import com.engine.salary.entity.taxagent.po.TaxAgentPO; import com.engine.salary.exception.SalaryRunTimeException; import com.engine.salary.mapper.salaryacct.ExcelAcctResultMapper; @@ -100,6 +97,10 @@ public class SalaryComparisonResultServiceImpl extends Service implements Salary return ServiceUtil.getService(SalarySobItemGroupServiceImpl.class, user); } + private SalarySobItemHideService getSalarySobItemHideService(User user) { + return ServiceUtil.getService(SalarySobItemHideServiceImpl.class, user); + } + @Override public List listBySalaryAcctRecordId(Long salaryAcctRecordId) { List excelAcctResultPOS = getExcelAcctResultMapper().listSome(ExcelAcctResultPO.builder().salaryAcctRecordId(salaryAcctRecordId).build()); @@ -150,6 +151,10 @@ public class SalaryComparisonResultServiceImpl extends Service implements Salary List salarySobItemGroupPOS = getSalarySobItemGroupService(user).listBySalarySobId(salaryAcctRecordPO.getSalarySobId()); // 查询薪资核算所用薪资账套的薪资项目副本 List salarySobItemPOS = getSalarySobItemService(user).listBySalarySobId(salaryAcctRecordPO.getSalarySobId()); + // 过滤在账套中隐藏的薪资项目 + List hideItemIds = getSalarySobItemHideService(user).listSome(SalarySobItemHidePO.builder().itemHide(1L).salarySobId(salaryAcctRecordPO.getSalarySobId()).build()) + .stream().map(SalarySobItemHidePO::getSalaryItemId).collect(Collectors.toList()); + salarySobItemPOS = salarySobItemPOS.stream().filter(po -> !hideItemIds.contains(po.getSalaryItemId())).collect(Collectors.toList()); // 查询公式详情 Set formulaIds = SalaryEntityUtil.properties(salarySobItemPOS, SalarySobItemPO::getFormulaId); List expressFormulas = getSalaryFormulaService(user).listExpressFormula(formulaIds); diff --git a/src/com/engine/salary/wrapper/SalaryComparisonResultWrapper.java b/src/com/engine/salary/wrapper/SalaryComparisonResultWrapper.java index 69ae4ccf4..ba6ef61c8 100644 --- a/src/com/engine/salary/wrapper/SalaryComparisonResultWrapper.java +++ b/src/com/engine/salary/wrapper/SalaryComparisonResultWrapper.java @@ -43,7 +43,7 @@ public class SalaryComparisonResultWrapper extends Service { * @return */ public Map listPage(SalaryComparisonResultQueryParam queryParam) { - // 查询薪资核算线下对比列表 + // 查询薪资核算线下对比列表(不包含隐藏薪资项目) SalaryComparisonResultListDTO salaryComparisonResultListDTO = getSalaryComparisonResultService(user).listPageByParam(queryParam); PageInfo> pageInfo = salaryComparisonResultListDTO.getData(); From 805fb9ff3c10f010c3482dbedb849da3ca534221 Mon Sep 17 00:00:00 2001 From: Harryxzy Date: Mon, 20 Nov 2023 16:14:51 +0800 Subject: [PATCH 04/28] =?UTF-8?q?1=E3=80=81=E8=96=AA=E8=B5=84=E8=B4=A6?= =?UTF-8?q?=E5=A5=97=E9=A1=B5=E9=9D=A2=E5=A2=9E=E5=8A=A0=E4=B9=89=E5=8A=A1?= =?UTF-8?q?=E4=BA=BA=E7=AD=9B=E9=80=89=E6=9D=A1=E4=BB=B6=202=E3=80=81?= =?UTF-8?q?=E8=96=AA=E8=B5=84=E6=A0=B8=E7=AE=97=E9=A1=B5=E9=9D=A2=E5=A2=9E?= =?UTF-8?q?=E5=8A=A0=E4=B9=89=E5=8A=A1=E4=BA=BA=E5=88=97=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../entity/salaryacct/bo/SalaryAcctRecordBO.java | 6 +++++- .../entity/salaryacct/dto/SalaryAcctRecordListDTO.java | 3 +++ .../salarysob/param/SalarySobListQueryParam.java | 3 +++ .../salary/service/impl/SalarySobServiceImpl.java | 5 +++++ .../engine/salary/wrapper/SalaryAcctRecordWrapper.java | 10 +++++++++- 5 files changed, 25 insertions(+), 2 deletions(-) diff --git a/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctRecordBO.java b/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctRecordBO.java index f07aa7d36..53eb473b6 100644 --- a/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctRecordBO.java +++ b/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctRecordBO.java @@ -10,6 +10,7 @@ import com.engine.salary.entity.salaryacct.param.SalaryAcctRecordSaveParam; import com.engine.salary.entity.salaryacct.po.SalaryAcctRecordPO; import com.engine.salary.entity.salarysob.dto.SalarySobCycleDTO; import com.engine.salary.entity.salarysob.po.SalarySobPO; +import com.engine.salary.entity.taxagent.po.TaxAgentPO; import com.engine.salary.enums.salaryaccounting.SalaryAcctRecordStatusEnum; import com.engine.salary.util.SalaryDateUtil; import com.engine.salary.util.SalaryEntityUtil; @@ -45,7 +46,8 @@ public class SalaryAcctRecordBO { List salarySobs, List employeeComInfos, List salaryAcctEmployeeCountDTOS, - List salarySendCheckResult) { + List salarySendCheckResult, + List taxAgentPOS) { if (CollectionUtils.isEmpty(salaryAcctRecordPOS)) { return Collections.emptyList(); } @@ -53,6 +55,7 @@ public class SalaryAcctRecordBO { Map usernameMap = SalaryEntityUtil.convert2Map(employeeComInfos, DataCollectionEmployee::getEmployeeId, DataCollectionEmployee::getUsername); Map empSizeMap = SalaryEntityUtil.convert2Map(salaryAcctEmployeeCountDTOS, SalaryAcctEmployeeCountDTO::getSalaryAcctRecordId, SalaryAcctEmployeeCountDTO::getCountBySalaryAcctRecordId); Map salarySendMap = SalaryEntityUtil.convert2Map(salarySendCheckResult, SalarySendCheckDTO::getSalaryAcctId, SalarySendCheckDTO::isSendFinished); + Map taxAgentMap = SalaryEntityUtil.convert2Map(taxAgentPOS, TaxAgentPO::getId, TaxAgentPO::getName); return salaryAcctRecordPOS.stream() .map(salaryAcctRecordPO -> { SalarySobPO salarySobPO = salarySobMap.get(salaryAcctRecordPO.getSalarySobId()); @@ -78,6 +81,7 @@ public class SalaryAcctRecordBO { return SalaryAcctRecordListDTO.builder() .id(salaryAcctRecordPO.getId()) .salarySobName(Optional.ofNullable(salarySobPO).map(SalarySobPO::getName).orElse(StringUtils.EMPTY)) + .taxAgentName(taxAgentMap.get(Optional.ofNullable(salarySobPO).map(SalarySobPO::getTaxAgentId).orElse(0L))) .salaryMonth(SalaryDateUtil.localDate2YearMonth(salaryAcctRecordPO.getSalaryMonth()).toString()) .taxCycle(SalaryDateUtil.localDate2YearMonth(salaryAcctRecordPO.getTaxCycle()).toString()) .status(Optional.ofNullable(salaryAcctRecordStatusEnum) diff --git a/src/com/engine/salary/entity/salaryacct/dto/SalaryAcctRecordListDTO.java b/src/com/engine/salary/entity/salaryacct/dto/SalaryAcctRecordListDTO.java index 59b4440eb..61a8cd3bc 100644 --- a/src/com/engine/salary/entity/salaryacct/dto/SalaryAcctRecordListDTO.java +++ b/src/com/engine/salary/entity/salaryacct/dto/SalaryAcctRecordListDTO.java @@ -36,6 +36,9 @@ public class SalaryAcctRecordListDTO { //主键id private Long id; + @TableTitle(title = "个税扣缴义务人", dataIndex = "taxAgentName", key = "taxAgentName") + private String taxAgentName; + @TableTitle(title = "薪资账套", dataIndex = "salarySobName", key = "salarySobName") private String salarySobName; diff --git a/src/com/engine/salary/entity/salarysob/param/SalarySobListQueryParam.java b/src/com/engine/salary/entity/salarysob/param/SalarySobListQueryParam.java index 4e9e7af0a..e8811bf3f 100644 --- a/src/com/engine/salary/entity/salarysob/param/SalarySobListQueryParam.java +++ b/src/com/engine/salary/entity/salarysob/param/SalarySobListQueryParam.java @@ -17,4 +17,7 @@ public class SalarySobListQueryParam extends BaseQueryParam { //薪资账套名称") private String name; + + // 薪资账套id + private Long taxAgentId; } diff --git a/src/com/engine/salary/service/impl/SalarySobServiceImpl.java b/src/com/engine/salary/service/impl/SalarySobServiceImpl.java index c221f724f..e640a2b3f 100644 --- a/src/com/engine/salary/service/impl/SalarySobServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalarySobServiceImpl.java @@ -39,6 +39,7 @@ import com.google.common.collect.Lists; import dm.jdbc.util.IdGenerator; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.BooleanUtils; +import org.apache.commons.lang3.ObjectUtils; import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.math.NumberUtils; import org.springframework.beans.BeanUtils; @@ -206,6 +207,10 @@ public class SalarySobServiceImpl extends Service implements SalarySobService { if (StringUtils.isNotBlank(name)) { build.setName(name); } + if (ObjectUtils.isNotEmpty(queryParam.getTaxAgentId())) { + build.setTaxAgentId(queryParam.getTaxAgentId()); + } + if (BooleanUtils.isTrue(openDevolution) && !isChief) { List salarySobPOS = salarySobMapper.listSome(build); // 根据权限过滤 diff --git a/src/com/engine/salary/wrapper/SalaryAcctRecordWrapper.java b/src/com/engine/salary/wrapper/SalaryAcctRecordWrapper.java index 9c17eaf78..b3d7d06e3 100644 --- a/src/com/engine/salary/wrapper/SalaryAcctRecordWrapper.java +++ b/src/com/engine/salary/wrapper/SalaryAcctRecordWrapper.java @@ -13,6 +13,7 @@ import com.engine.salary.entity.salaryacct.param.SalaryAcctRecordSaveParam; import com.engine.salary.entity.salaryacct.po.SalaryAcctRecordPO; import com.engine.salary.entity.salarysob.dto.SalarySobCycleDTO; import com.engine.salary.entity.salarysob.po.SalarySobPO; +import com.engine.salary.entity.taxagent.po.TaxAgentPO; import com.engine.salary.exception.SalaryRunTimeException; import com.engine.salary.service.*; import com.engine.salary.service.impl.*; @@ -63,6 +64,10 @@ public class SalaryAcctRecordWrapper extends Service implements SalaryAcctRecord return ServiceUtil.getService(SalaryItemServiceImpl.class, user); } + private TaxAgentService getTaxAgentService(User user) { + return ServiceUtil.getService(TaxAgentServiceImpl.class, user); + } + // private ComInfoCache comInfoCache; public PageInfo listPage(SalaryAcctRecordQueryParam queryParam) { @@ -91,8 +96,11 @@ public class SalaryAcctRecordWrapper extends Service implements SalaryAcctRecord // 查询工资单的查询情况 List salarySendCheckResult = getSalarySendService(user).getSalarySendCheckResult(salaryAcctRecordIds); + Set taxAgentIds = SalaryEntityUtil.properties(salarySobPOS, SalarySobPO::getTaxAgentId); + List taxAgentPOS = getTaxAgentService(user).listByIds(taxAgentIds); + // 转换成列表dto - List salaryAcctRecordListDTOS = SalaryAcctRecordBO.convert2ListDTO(list, salarySobPOS, employeeComInfos, salaryAcctEmployeeCountDTOS, salarySendCheckResult); + List salaryAcctRecordListDTOS = SalaryAcctRecordBO.convert2ListDTO(list, salarySobPOS, employeeComInfos, salaryAcctEmployeeCountDTOS, salarySendCheckResult, taxAgentPOS); dtoPage.setList(salaryAcctRecordListDTOS); } // WeaTable weaTable = SalaryFormatUtil.getInstance().buildTable(SalaryAcctRecordListDTO.class, dtoPage); From c9b279049dd1c4e252bfb2b36021890649702011 Mon Sep 17 00:00:00 2001 From: sy Date: Tue, 21 Nov 2023 14:40:30 +0800 Subject: [PATCH 05/28] =?UTF-8?q?=E8=96=AA=E9=85=AC=E7=B3=BB=E7=BB=9F-?= =?UTF-8?q?=E7=A6=8F=E5=88=A9=E5=8F=B0=E8=B4=A6=EF=BC=8C=E7=A6=8F=E5=88=A9?= =?UTF-8?q?=E6=A0=B8=E7=AE=97=E5=87=BA=E7=8E=B0=E5=BC=82=E5=B8=B8=E6=97=B6?= =?UTF-8?q?=EF=BC=8C=E4=BC=98=E5=8C=96=E6=A0=B8=E7=AE=97=E8=BF=9B=E5=BA=A6?= =?UTF-8?q?=E8=8E=B7=E5=8F=96=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/com/engine/salary/biz/SIAccountBiz.java | 6 +++--- src/com/engine/salary/util/SalaryDateUtil.java | 9 +++++++-- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/src/com/engine/salary/biz/SIAccountBiz.java b/src/com/engine/salary/biz/SIAccountBiz.java index 4ba839d57..1971cb6ff 100644 --- a/src/com/engine/salary/biz/SIAccountBiz.java +++ b/src/com/engine/salary/biz/SIAccountBiz.java @@ -260,7 +260,7 @@ public class SIAccountBiz extends Service { public void accounting(AccountParam param, Long employeeId, String tenantKey, String currentUserName) { //薪资核算进度暂未实现 ProgressDTO salaryAcctProgressDTO = getSalaryAcctProgressService(user).getProgress(SalaryCacheKey.ACCT_PROGRESS + param.getBillMonth()); - if (salaryAcctProgressDTO != null && salaryAcctProgressDTO.getProgress().compareTo(BigDecimal.ONE) < 0) { + if (salaryAcctProgressDTO != null && salaryAcctProgressDTO.isStatus() && salaryAcctProgressDTO.getProgress().compareTo(BigDecimal.ONE) < 0) { return; } @@ -399,8 +399,9 @@ public class SIAccountBiz extends Service { log.info("福利核算进度完成!"); } catch (Exception e) { log.error("account run fail", e); + getSalaryAcctProgressService(user).fail(SalaryCacheKey.ACCT_PROGRESS + param.getBillMonth(), SalaryI18nUtil.getI18nLabel(99642, "福利核算出错") + ": " + e.getMessage()); + List list = Lists.newArrayList(getInsuranceAccountBatchMapper().getByBillMonth(param.getBillMonth(), param.getPaymentOrganization())); - list = encryptUtil.decryptList(list, InsuranceAccountBatchPO.class); if (CollectionUtils.isNotEmpty(list)) { list.stream().forEach(f -> { getInsuranceAccountBatchMapper().deleteById(f.getId()); @@ -410,7 +411,6 @@ public class SIAccountBiz extends Service { //薪资核算进度暂未实现 //salaryAcctProgressService.del(tenantKey + param.getBillMonth(), employeeId, tenantKey); //logger.error("welfare account error:{}", e.getMessage(), e); - getSalaryAcctProgressService(user).fail(SalaryCacheKey.ACCT_PROGRESS + param.getBillMonth(), SalaryI18nUtil.getI18nLabel(99642, "福利核算出错") + ": " + e.getMessage()); } } diff --git a/src/com/engine/salary/util/SalaryDateUtil.java b/src/com/engine/salary/util/SalaryDateUtil.java index af3eb35e2..98d40fc39 100644 --- a/src/com/engine/salary/util/SalaryDateUtil.java +++ b/src/com/engine/salary/util/SalaryDateUtil.java @@ -2,6 +2,7 @@ package com.engine.salary.util; import cn.hutool.core.util.StrUtil; import com.engine.salary.common.LocalDateRange; +import com.engine.salary.exception.SalaryRunTimeException; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.math.NumberUtils; @@ -547,14 +548,18 @@ public class SalaryDateUtil { if (StringUtils.isNotBlank(startMonth)) { startMonth = startMonth + "-01"; Date socialStartDate = SalaryDateUtil.dateStrToLocalDate(startMonth); - if (billMonthDate.before(socialStartDate)) { + if(socialStartDate == null) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0, "年月解析异常,请检查档案中相关数据设置") + ":" + startMonth.substring(0, startMonth.length() - 3)); + } else if (billMonthDate.before(socialStartDate)) { inDataRange = false; } } if (StringUtils.isNotBlank(endMonth)) { endMonth = endMonth + "-01"; Date socialEndDate = SalaryDateUtil.dateStrToLocalDate(endMonth); - if (billMonthDate.after(socialEndDate)) { + if(socialEndDate == null) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0, "年月解析异常,请检查档案中相关数据设置") + ":" + endMonth.substring(0, endMonth.length() - 3)); + } else if (billMonthDate.after(socialEndDate)) { inDataRange = false; } } From 9bbbd80d3663e176685ee4b59022df358e874500 Mon Sep 17 00:00:00 2001 From: sy Date: Tue, 21 Nov 2023 16:02:12 +0800 Subject: [PATCH 06/28] =?UTF-8?q?=E8=96=AA=E9=85=AC=E7=B3=BB=E7=BB=9F-?= =?UTF-8?q?=E7=A6=8F=E5=88=A9=E6=A1=A3=E6=A1=88=EF=BC=8C=E7=A6=8F=E5=88=A9?= =?UTF-8?q?=E6=A1=A3=E6=A1=88=E5=AF=BC=E5=85=A5=E6=97=B6=EF=BC=8C=E5=B9=B4?= =?UTF-8?q?=E6=9C=88=E6=A0=BC=E5=BC=8F=E5=85=BC=E5=AE=B92001/01=E4=B8=80?= =?UTF-8?q?=E7=B1=BB=E6=A0=BC=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/impl/SISchemeServiceImpl.java | 24 +++++++++---------- 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/src/com/engine/salary/service/impl/SISchemeServiceImpl.java b/src/com/engine/salary/service/impl/SISchemeServiceImpl.java index f3b9872ee..09450afb6 100644 --- a/src/com/engine/salary/service/impl/SISchemeServiceImpl.java +++ b/src/com/engine/salary/service/impl/SISchemeServiceImpl.java @@ -928,7 +928,7 @@ public class SISchemeServiceImpl extends Service implements SISchemeService { if (StringUtils.isNotBlank(socialStartMonth) && socialStartMonth.length() > 7) { socialStartMonth = socialStartMonth.substring(0, 7); } - if (StringUtils.isNotBlank(socialStartMonth) && !SalaryDateUtil.checkYearMonth(socialStartMonth)) { + if (StringUtils.isNotBlank(socialStartMonth) && !SalaryDateUtil.checkYearMonth(socialStartMonth.replace("/", "-"))) { Map errorMessageMap = Maps.newHashMap(); errorMessageMap.put("message", rowIndex + SalaryI18nUtil.getI18nLabel(100315, "社保起始缴纳时间格式错误,正确格式为YYYY-MM或者yyyy-MM-dd")); excelComments.add(errorMessageMap); @@ -939,7 +939,7 @@ public class SISchemeServiceImpl extends Service implements SISchemeService { if (StringUtils.isNotBlank(socialEndMonth) && socialEndMonth.length() > 7) { socialEndMonth = socialEndMonth.substring(0, 7); } - if (StringUtils.isNotBlank(socialEndMonth) && !SalaryDateUtil.checkYearMonth(socialEndMonth)) { + if (StringUtils.isNotBlank(socialEndMonth) && !SalaryDateUtil.checkYearMonth(socialEndMonth.replace("/", "-"))) { Map errorMessageMap = Maps.newHashMap(); errorMessageMap.put("message", rowIndex + SalaryI18nUtil.getI18nLabel(100316, "社保最后缴纳时间格式错误,正确格式为YYYY-MM或者yyyy-MM-dd")); excelComments.add(errorMessageMap); @@ -950,7 +950,7 @@ public class SISchemeServiceImpl extends Service implements SISchemeService { if (StringUtils.isNotBlank(fundStartMonth) && fundStartMonth.length() > 7) { fundStartMonth = fundStartMonth.substring(0, 7); } - if (StringUtils.isNotBlank(fundStartMonth) && !SalaryDateUtil.checkYearMonth(fundStartMonth)) { + if (StringUtils.isNotBlank(fundStartMonth) && !SalaryDateUtil.checkYearMonth(fundStartMonth.replace("/", "-"))) { Map errorMessageMap = Maps.newHashMap(); errorMessageMap.put("message", rowIndex + SalaryI18nUtil.getI18nLabel(100317, "公积金起始缴纳时间格式错误,正确格式为YYYY-MM或者yyyy-MM-dd")); excelComments.add(errorMessageMap); @@ -961,7 +961,7 @@ public class SISchemeServiceImpl extends Service implements SISchemeService { if (StringUtils.isNotBlank(fundEndMonth) && fundEndMonth.length() > 7) { fundEndMonth = fundEndMonth.substring(0, 7); } - if (StringUtils.isNotBlank(fundEndMonth) && !SalaryDateUtil.checkYearMonth(fundEndMonth)) { + if (StringUtils.isNotBlank(fundEndMonth) && !SalaryDateUtil.checkYearMonth(fundEndMonth.replace("/", "-"))) { Map errorMessageMap = Maps.newHashMap(); errorMessageMap.put("message", rowIndex + SalaryI18nUtil.getI18nLabel(100319, "公积金最后缴纳时间格式错误,正确格式为YYYY-MM或者yyyy-MM-dd")); excelComments.add(errorMessageMap); @@ -972,7 +972,7 @@ public class SISchemeServiceImpl extends Service implements SISchemeService { if (StringUtils.isNotBlank(otherStartMonth) && otherStartMonth.length() > 7) { otherStartMonth = otherStartMonth.substring(0, 7); } - if (StringUtils.isNotBlank(otherStartMonth) && !SalaryDateUtil.checkYearMonth(otherStartMonth)) { + if (StringUtils.isNotBlank(otherStartMonth) && !SalaryDateUtil.checkYearMonth(otherStartMonth.replace("/", "-"))) { Map errorMessageMap = Maps.newHashMap(); errorMessageMap.put("message", rowIndex + SalaryI18nUtil.getI18nLabel(100320, "其他福利起始缴纳时间格式错误,正确格式为YYYY-MM或者yyyy-MM-dd")); excelComments.add(errorMessageMap); @@ -983,7 +983,7 @@ public class SISchemeServiceImpl extends Service implements SISchemeService { if (StringUtils.isNotBlank(otherEndMonth) && otherEndMonth.length() > 7) { otherEndMonth = otherEndMonth.substring(0, 7); } - if (StringUtils.isNotBlank(otherEndMonth) && !SalaryDateUtil.checkYearMonth(otherEndMonth)) { + if (StringUtils.isNotBlank(otherEndMonth) && !SalaryDateUtil.checkYearMonth(otherEndMonth.replace("/", "-"))) { Map errorMessageMap = Maps.newHashMap(); errorMessageMap.put("message", rowIndex + SalaryI18nUtil.getI18nLabel(100321, "其他福利最后缴纳时间格式错误,正确格式为YYYY-MM或者yyyy-MM-dd")); excelComments.add(errorMessageMap); @@ -1150,13 +1150,13 @@ public class SISchemeServiceImpl extends Service implements SISchemeService { } String socialStartDate = (String) findElement(singleAccount, SalaryI18nUtil.getI18nLabel(91319, "社保起始缴纳月")).get(SalaryI18nUtil.getI18nLabel(91319, "社保起始缴纳月")); if (StringUtils.isNotBlank(socialStartDate) && socialStartDate.length() >= 7) { - socialStartDate = socialStartDate.substring(0, 7); + socialStartDate = socialStartDate.substring(0, 7).replace("/", "-"); insuranceArchivesSocialSchemePO.setSocialStartTime(socialStartDate); } String socialEndDate = (String) findElement(singleAccount, SalaryI18nUtil.getI18nLabel(91320, "社保最后缴纳月")).get(SalaryI18nUtil.getI18nLabel(91320, "社保最后缴纳月")); if (StringUtils.isNotBlank(socialEndDate) && socialEndDate.length() >= 7) { - socialEndDate = socialEndDate.substring(0, 7); + socialEndDate = socialEndDate.substring(0, 7).replace("/", "-"); insuranceArchivesSocialSchemePO.setSocialEndTime(socialEndDate); } @@ -1238,13 +1238,13 @@ public class SISchemeServiceImpl extends Service implements SISchemeService { } String fundStartDate = (String) findElement(singleAccount, SalaryI18nUtil.getI18nLabel(91483, "公积金起始缴纳月")).get(SalaryI18nUtil.getI18nLabel(91483, "公积金起始缴纳月")); if (StringUtils.isNotBlank(fundStartDate) && fundStartDate.length() >= 7) { - fundStartDate = fundStartDate.substring(0, 7); + fundStartDate = fundStartDate.substring(0, 7).replace("/", "-"); insuranceArchivesFundSchemePO.setFundStartTime(fundStartDate); } String fundEndDate = (String) findElement(singleAccount, SalaryI18nUtil.getI18nLabel(91484, "公积金最后缴纳月")).get(SalaryI18nUtil.getI18nLabel(91484, "公积金最后缴纳月")); if (StringUtils.isNotBlank(fundEndDate) && fundEndDate.length() >= 7) { - fundEndDate = fundEndDate.substring(0, 7); + fundEndDate = fundEndDate.substring(0, 7).replace("/", "-"); insuranceArchivesFundSchemePO.setFundEndTime(fundEndDate); } @@ -1314,13 +1314,13 @@ public class SISchemeServiceImpl extends Service implements SISchemeService { } String otherStartDate = (String) findElement(singleAccount, SalaryI18nUtil.getI18nLabel(91490, "其他福利起始缴纳月")).get(SalaryI18nUtil.getI18nLabel(91490, "其他福利起始缴纳月")); if (StringUtils.isNotBlank(otherStartDate) && otherStartDate.length() >= 7) { - otherStartDate = otherStartDate.substring(0, 7); + otherStartDate = otherStartDate.substring(0, 7).replace("/", "-"); insuranceArchivesOtherSchemePO.setOtherStartTime(otherStartDate); } String otherEndDate = (String) findElement(singleAccount, SalaryI18nUtil.getI18nLabel(91494, "其他福利最后缴纳月")).get(SalaryI18nUtil.getI18nLabel(91494, "其他福利最后缴纳月")); if (StringUtils.isNotBlank(otherEndDate) && otherEndDate.length() >= 7) { - otherEndDate = otherEndDate.substring(0, 7); + otherEndDate = otherEndDate.substring(0, 7).replace("/", "-"); insuranceArchivesOtherSchemePO.setOtherEndTime(otherEndDate); } From 9f8c5f9c0710897909e2e7e734096811c5875f2d Mon Sep 17 00:00:00 2001 From: sy Date: Wed, 22 Nov 2023 11:32:32 +0800 Subject: [PATCH 07/28] =?UTF-8?q?=E8=96=AA=E9=85=AC=E7=B3=BB=E7=BB=9F-?= =?UTF-8?q?=E7=A6=8F=E5=88=A9=E6=A1=A3=E6=A1=88=EF=BC=8C=E7=A6=8F=E5=88=A9?= =?UTF-8?q?=E6=A1=A3=E6=A1=88=E5=88=97=E8=A1=A8=E6=98=BE=E7=A4=BA=E3=80=81?= =?UTF-8?q?=E5=AF=BC=E5=85=A5=E5=AF=BC=E5=87=BA=E6=95=B0=E6=8D=AE=E4=B8=AD?= =?UTF-8?q?=E4=B8=8D=E5=B8=A6=E5=87=BA=E7=A6=8F=E5=88=A9=E6=96=B9=E6=A1=88?= =?UTF-8?q?=E4=B8=AD=E5=81=9C=E6=AD=A2=E7=BC=B4=E8=B4=B9=E7=9A=84=E7=A6=8F?= =?UTF-8?q?=E5=88=A9=E6=95=B0=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/com/engine/salary/biz/SIArchivesBiz.java | 37 +++++++++++++++-- .../service/impl/SISchemeServiceImpl.java | 41 ++++++++++++++++--- 2 files changed, 69 insertions(+), 9 deletions(-) diff --git a/src/com/engine/salary/biz/SIArchivesBiz.java b/src/com/engine/salary/biz/SIArchivesBiz.java index ea0066a67..528849995 100644 --- a/src/com/engine/salary/biz/SIArchivesBiz.java +++ b/src/com/engine/salary/biz/SIArchivesBiz.java @@ -1496,7 +1496,14 @@ public class SIArchivesBiz { Map socialJson = JSON.parseObject(socialItem.getSocialPaymentBaseString(), new TypeReference>() { }); if (socialJson != null) { - map.putAll(socialJson); + //查询该福利方案下开启缴纳的福利项 + List insuranceIdList = payInsuranceIds(socialItem.getSocialSchemeId()); + socialJson.forEach((k, v) -> { + if (insuranceIdList.contains(Long.valueOf(k))) { + map.put(k, v); + } + }); +// map.putAll(socialJson); } map.put("socialAccount", socialItem.getSocialAccount()); map.put("socialStartTime", socialItem.getSocialStartTime()); @@ -1508,7 +1515,14 @@ public class SIArchivesBiz { Map fundJson = JSON.parseObject(fundItem.getFundPaymentBaseString(), new TypeReference>() { }); if (fundJson != null) { - map.putAll(fundJson); + //查询该福利方案下开启缴纳的福利项 + List insuranceIdList = payInsuranceIds(fundItem.getFundSchemeId()); + fundJson.forEach((k, v) -> { + if (insuranceIdList.contains(Long.valueOf(k))) { + map.put(k, v); + } + }); +// map.putAll(fundJson); } map.put("supplementFundAccount", fundItem.getSupplementFundAccount()); map.put("fundStartTime", fundItem.getFundStartTime()); @@ -1520,7 +1534,14 @@ public class SIArchivesBiz { Map otherJson = JSON.parseObject(otherItem.getOtherPaymentBaseString(), new TypeReference>() { }); if (otherJson != null) { - map.putAll(otherJson); + //查询该福利方案下开启缴纳的福利项 + List insuranceIdList = payInsuranceIds(otherItem.getOtherSchemeId()); + otherJson.forEach((k, v) -> { + if (insuranceIdList.contains(Long.valueOf(k))) { + map.put(k, v); + } + }); +// map.putAll(otherJson); } map.put("otherStartTime", otherItem.getOtherStartTime()); map.put("otherEndTime", otherItem.getOtherEndTime()); @@ -1534,6 +1555,16 @@ public class SIArchivesBiz { } } + public List payInsuranceIds(Long socialSchemeId) { + //查询该福利方案下开启缴纳的福利项 + List detailPOS = getInsuranceSchemeDetailMapper().queryListBySchemeId(socialSchemeId); + List insuranceIdList = new ArrayList<>(); + if (detailPOS != null && detailPOS.size() > 0) { + //开启缴纳的 + insuranceIdList = detailPOS.stream().filter(f -> f.getIsPayment().equals(IsPaymentEnum.YES.getValue())).map(InsuranceSchemeDetailPO::getInsuranceId).collect(Collectors.toList()); + } + return insuranceIdList; + } /** * 获取信息提示 */ diff --git a/src/com/engine/salary/service/impl/SISchemeServiceImpl.java b/src/com/engine/salary/service/impl/SISchemeServiceImpl.java index 09450afb6..8746fdd48 100644 --- a/src/com/engine/salary/service/impl/SISchemeServiceImpl.java +++ b/src/com/engine/salary/service/impl/SISchemeServiceImpl.java @@ -308,8 +308,14 @@ public class SISchemeServiceImpl extends Service implements SISchemeService { Map socialJson = JSON.parseObject(socialItem.getSocialPaymentBaseString(), new TypeReference>() { }); if (socialJson != null) { - map.putAll(socialJson); - // SalaryEntityUtil.thousandthConvert(socialJson, map); + //查询该福利方案下开启缴纳的福利项 + List insuranceIdList = payInsuranceIds(socialItem.getSocialSchemeId()); + socialJson.forEach((k, v) -> { + if (insuranceIdList.contains(Long.valueOf(k))) { + map.put(k, v); + } + }); +// map.putAll(socialJson); } map.put("socialAccount", socialItem.getSocialAccount()); map.put("socialStartTime", socialItem.getSocialStartTime()); @@ -321,8 +327,14 @@ public class SISchemeServiceImpl extends Service implements SISchemeService { Map fundJson = JSON.parseObject(fundItem.getFundPaymentBaseString(), new TypeReference>() { }); if (fundJson != null) { - map.putAll(fundJson); - // SalaryEntityUtil.thousandthConvert(fundJson, map); + //查询该福利方案下开启缴纳的福利项 + List insuranceIdList = payInsuranceIds(fundItem.getFundSchemeId()); + fundJson.forEach((k, v) -> { + if (insuranceIdList.contains(Long.valueOf(k))) { + map.put(k, v); + } + }); +// map.putAll(fundJson); } map.put("supplementFundAccount", fundItem.getSupplementFundAccount()); map.put("fundStartTime", fundItem.getFundStartTime()); @@ -334,8 +346,14 @@ public class SISchemeServiceImpl extends Service implements SISchemeService { Map otherJson = JSON.parseObject(otherItem.getOtherPaymentBaseString(), new TypeReference>() { }); if (otherJson != null) { - map.putAll(otherJson); - //SalaryEntityUtil.thousandthConvert(otherJson, map); + //查询该福利方案下开启缴纳的福利项 + List insuranceIdList = payInsuranceIds(otherItem.getOtherSchemeId()); + otherJson.forEach((k, v) -> { + if (insuranceIdList.contains(Long.valueOf(k))) { + map.put(k, v); + } + }); +// map.putAll(otherJson); } map.put("otherStartTime", otherItem.getOtherStartTime()); map.put("otherEndTime", otherItem.getOtherEndTime()); @@ -345,6 +363,17 @@ public class SISchemeServiceImpl extends Service implements SISchemeService { return records; } + public List payInsuranceIds(Long socialSchemeId) { + //查询该福利方案下开启缴纳的福利项 + List detailPOS = getInsuranceSchemeDetailMapper().queryListBySchemeId(socialSchemeId); + List insuranceIdList = new ArrayList<>(); + if (detailPOS != null && detailPOS.size() > 0) { + //开启缴纳的 + insuranceIdList = detailPOS.stream().filter(f -> f.getIsPayment().equals(IsPaymentEnum.YES.getValue())).map(InsuranceSchemeDetailPO::getInsuranceId).collect(Collectors.toList()); + } + return insuranceIdList; + } + @Override public XSSFWorkbook export(InsuranceArchivesListParam param) { InsuranceArchivesListParam request = InsuranceArchivesListParam.builder().build(); From 9876bc49cf47d60a0bbd046a2928c02a16544803 Mon Sep 17 00:00:00 2001 From: sy Date: Wed, 22 Nov 2023 16:47:36 +0800 Subject: [PATCH 08/28] =?UTF-8?q?=E8=96=AA=E9=85=AC=E7=B3=BB=E7=BB=9F-?= =?UTF-8?q?=E7=A6=8F=E5=88=A9=E6=A0=B8=E7=AE=97=EF=BC=8C=E5=AF=B9=E4=BA=8E?= =?UTF-8?q?=E5=A4=84=E4=BA=8E=E5=9C=A8=E7=BC=B4=E5=91=98=E5=B7=A5=E5=88=97?= =?UTF-8?q?=E8=A1=A8=EF=BC=8C=E4=BD=86=E6=98=AF=E4=B8=8D=E5=9C=A8=E8=B5=B7?= =?UTF-8?q?=E5=A7=8B=E7=BC=B4=E7=BA=B3=E6=9C=88=E5=92=8C=E6=9C=80=E5=90=8E?= =?UTF-8?q?=E7=BC=B4=E7=BA=B3=E6=9C=88=E5=8C=BA=E9=97=B4=E7=9A=84=E6=A0=B8?= =?UTF-8?q?=E7=AE=97=E6=9C=88=E7=9A=84=E4=BA=BA=E5=91=98=EF=BC=8C=E4=B8=8D?= =?UTF-8?q?=E7=94=9F=E6=88=90=E6=A0=B8=E7=AE=97=E8=AE=B0=E5=BD=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/com/engine/salary/biz/SIAccountBiz.java | 49 ++++++++++++++++++- .../mapper/siarchives/FundSchemeMapper.java | 8 +++ .../mapper/siarchives/FundSchemeMapper.xml | 11 +++++ .../mapper/siarchives/OtherSchemeMapper.java | 8 +++ .../mapper/siarchives/OtherSchemeMapper.xml | 12 +++++ .../mapper/siarchives/SocialSchemeMapper.java | 8 +++ .../mapper/siarchives/SocialSchemeMapper.xml | 12 +++++ 7 files changed, 107 insertions(+), 1 deletion(-) diff --git a/src/com/engine/salary/biz/SIAccountBiz.java b/src/com/engine/salary/biz/SIAccountBiz.java index 1971cb6ff..34b6aae17 100644 --- a/src/com/engine/salary/biz/SIAccountBiz.java +++ b/src/com/engine/salary/biz/SIAccountBiz.java @@ -22,7 +22,10 @@ import com.engine.salary.enums.siaccount.*; import com.engine.salary.enums.sicategory.*; import com.engine.salary.exception.SalaryRunTimeException; import com.engine.salary.mapper.siaccount.*; +import com.engine.salary.mapper.siarchives.FundSchemeMapper; import com.engine.salary.mapper.siarchives.InsuranceBaseInfoMapper; +import com.engine.salary.mapper.siarchives.OtherSchemeMapper; +import com.engine.salary.mapper.siarchives.SocialSchemeMapper; import com.engine.salary.mapper.sicategory.ICategoryMapper; import com.engine.salary.mapper.sischeme.InsuranceSchemeDetailMapper; import com.engine.salary.mapper.taxagent.TaxAgentMapper; @@ -108,6 +111,18 @@ public class SIAccountBiz extends Service { return MapperProxyFactory.getProxy(InsuranceBaseInfoMapper.class); } + private SocialSchemeMapper getSocialSchemeMapper() { + return MapperProxyFactory.getProxy(SocialSchemeMapper.class); + } + + private FundSchemeMapper getFundSchemeMapper() { + return MapperProxyFactory.getProxy(FundSchemeMapper.class); + } + + private OtherSchemeMapper getOtherSchemeMapper() { + return MapperProxyFactory.getProxy(OtherSchemeMapper.class); + } + private SalarySysConfService getSalarySysConfService(User user) { return ServiceUtil.getService(SalarySysConfServiceImpl.class, user); } @@ -309,7 +324,9 @@ public class SIAccountBiz extends Service { .map(InsuranceArchivesBaseInfoPO::getEmployeeId) .collect(Collectors.toList()); - empIds = empIds.stream().filter(f->canAccountIds.contains(f)).collect(Collectors.toList()); + //20231122逻辑优化,过滤出不在起始缴纳月和最后缴纳月区间的人员 + List empIdsInPayMonthRange = listCanPayEmpIds(param.getPaymentOrganization(), param.getBillMonth()); + empIds = empIds.stream().filter(f->canAccountIds.contains(f) && empIdsInPayMonthRange.contains(f)).collect(Collectors.toList()); //过滤不在扣缴义务人下的数据 // Collection employeeIdsInTaxAgent = getTaxAgentService().listEmployeeIdsInTaxAgent(param.getPaymentOrganization()); @@ -414,6 +431,33 @@ public class SIAccountBiz extends Service { } } + /** + * 根据个税扣缴义务人和账单月,获取三类福利档案中符合缴纳开始结束月区间的人员id + * @param paymentOrganization + * @param billMonth + * @return + */ + public List listCanPayEmpIds(Long paymentOrganization, String billMonth) { + List listCanPayEmpIds = new ArrayList<>(); + //社保档案中可进行缴纳的人员 + List socialCanPayEmpIds = getSocialSchemeMapper().listCanPayEmpIds(paymentOrganization, billMonth); + //公积金档案中可进行缴纳的人员 + List fundCanPayEmpIds = getFundSchemeMapper().listCanPayEmpIds(paymentOrganization, billMonth); + //其他福利档案中可进行缴纳的人员 + List otherCanPayEmpIds = getOtherSchemeMapper().listCanPayEmpIds(paymentOrganization, billMonth); + if (socialCanPayEmpIds != null && socialCanPayEmpIds.size() > 0) { + listCanPayEmpIds.addAll(socialCanPayEmpIds); + } + if (fundCanPayEmpIds != null && fundCanPayEmpIds.size() > 0) { + listCanPayEmpIds.addAll(fundCanPayEmpIds); + } + if (otherCanPayEmpIds != null && otherCanPayEmpIds.size() > 0) { + listCanPayEmpIds.addAll(otherCanPayEmpIds); + } + //去重 + listCanPayEmpIds = listCanPayEmpIds.stream().distinct().collect(Collectors.toList()); + return listCanPayEmpIds; + } public void commonAccount(/*CountDownLatch countDownLatch, BlockingDeque results,*/ String billMonth, List ids, Long employeeId, String tenantKey, Long paymentOrganization) { /* try {*/ @@ -1308,6 +1352,9 @@ public class SIAccountBiz extends Service { if (filterList.size() != employeeIds.size()) { throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0, "补缴人员中存在未设置福利档案人员或相关人员不在福利在缴人员中,不可新建补缴信息!")); } + //20231122逻辑优化,过滤出不在起始缴纳月和最后缴纳月区间的人员 + List empIdsInPayMonthRange = listCanPayEmpIds(param.getPaymentOrganization(), param.getBillMonth()); + employeeIds = employeeIds.stream().filter(f -> empIdsInPayMonthRange.contains(f)).collect(Collectors.toList()); SalaryAssert.notEmpty(employeeIds, SalaryI18nUtil.getI18nLabel(99920, "无核算人员")); List baseList = new ArrayList<>(); diff --git a/src/com/engine/salary/mapper/siarchives/FundSchemeMapper.java b/src/com/engine/salary/mapper/siarchives/FundSchemeMapper.java index 203509ca1..d6368f8b4 100644 --- a/src/com/engine/salary/mapper/siarchives/FundSchemeMapper.java +++ b/src/com/engine/salary/mapper/siarchives/FundSchemeMapper.java @@ -61,6 +61,14 @@ public interface FundSchemeMapper { */ void batchSave(@Param("fundSchemePOS") List singletonList); + /** + * 根据个税扣缴义务人id获取目标账单月可以进行缴纳的人员id + * 筛选条件为账单月是否在起始缴纳月和最后缴纳月之间 + * @param paymentOrganization + * @return + */ + List listCanPayEmpIds(@Param("paymentOrganization")Long paymentOrganization, @Param("billMonth")String billMonth); + List listAll(); int batchUpdate(@Param("collection") List pos); diff --git a/src/com/engine/salary/mapper/siarchives/FundSchemeMapper.xml b/src/com/engine/salary/mapper/siarchives/FundSchemeMapper.xml index 0b8f650b7..fc91b8885 100644 --- a/src/com/engine/salary/mapper/siarchives/FundSchemeMapper.xml +++ b/src/com/engine/salary/mapper/siarchives/FundSchemeMapper.xml @@ -248,6 +248,17 @@ + + + SELECT + t.employee_id + FROM hrsa_other_archives t + WHERE delete_type = 0 + AND payment_organization = #{paymentOrganization} + AND other_scheme_id is not null + AND other_start_time is not null AND other_start_time #{billMonth} + AND (other_end_time is null OR other_end_time = ]]> #{billMonth}) + + + + +