diff --git a/src/com/engine/salary/biz/SalaryArchiveBiz.java b/src/com/engine/salary/biz/SalaryArchiveBiz.java index f6ddac052..bd2477c75 100644 --- a/src/com/engine/salary/biz/SalaryArchiveBiz.java +++ b/src/com/engine/salary/biz/SalaryArchiveBiz.java @@ -46,4 +46,15 @@ public class SalaryArchiveBiz { sqlSession.close(); } } + + public void batchInsert(List salaryArchiveSaves) { + SqlSession sqlSession = MyBatisFactory.sqlSessionFactory.openSession(); + try { + SalaryArchiveMapper mapper = sqlSession.getMapper(SalaryArchiveMapper.class); + mapper.batchInsert(salaryArchiveSaves); + sqlSession.commit(); + } finally { + sqlSession.close(); + } + } } diff --git a/src/com/engine/salary/biz/SalaryArchiveItemBiz.java b/src/com/engine/salary/biz/SalaryArchiveItemBiz.java index e8905037d..34dc71756 100644 --- a/src/com/engine/salary/biz/SalaryArchiveItemBiz.java +++ b/src/com/engine/salary/biz/SalaryArchiveItemBiz.java @@ -106,4 +106,15 @@ public class SalaryArchiveItemBiz { sqlSession.close(); } } + + public void deleteBySalaryArchiveId(List salaryArchiveIds) { + SqlSession sqlSession = MyBatisFactory.sqlSessionFactory.openSession(); + try { + SalaryArchiveItemMapper mapper = sqlSession.getMapper(SalaryArchiveItemMapper.class); + mapper.deleteBySalaryArchiveId(salaryArchiveIds); + sqlSession.commit(); + } finally { + sqlSession.close(); + } + } } diff --git a/src/com/engine/salary/biz/SalaryArchiveTaxAgentBiz.java b/src/com/engine/salary/biz/SalaryArchiveTaxAgentBiz.java index 1201076fd..078673a91 100644 --- a/src/com/engine/salary/biz/SalaryArchiveTaxAgentBiz.java +++ b/src/com/engine/salary/biz/SalaryArchiveTaxAgentBiz.java @@ -25,8 +25,52 @@ public class SalaryArchiveTaxAgentBiz { try { SalaryArchiveTaxAgentMapper mapper = sqlSession.getMapper(SalaryArchiveTaxAgentMapper.class); mapper.deleteBySalaryArchiveId(salaryArchiveIds); + sqlSession.commit(); } finally { sqlSession.close(); } } + + public List getEffectiveTaxAgentList(SalaryArchiveTaxAgentQueryParam build) { + SqlSession sqlSession = MyBatisFactory.sqlSessionFactory.openSession(); + try { + SalaryArchiveTaxAgentMapper mapper = sqlSession.getMapper(SalaryArchiveTaxAgentMapper.class); + return mapper.getEffectiveTaxAgentList(build); + } finally { + sqlSession.close(); + } + } + + public List getIneffectiveTaxAgentList(SalaryArchiveTaxAgentQueryParam build) { + SqlSession sqlSession = MyBatisFactory.sqlSessionFactory.openSession(); + try { + SalaryArchiveTaxAgentMapper mapper = sqlSession.getMapper(SalaryArchiveTaxAgentMapper.class); + return mapper.getIneffectiveTaxAgentList(build); + } finally { + sqlSession.close(); + } + } + + public void deleteBatchIds(List ids) { + SqlSession sqlSession = MyBatisFactory.sqlSessionFactory.openSession(); + try { + SalaryArchiveTaxAgentMapper mapper = sqlSession.getMapper(SalaryArchiveTaxAgentMapper.class); + mapper.deleteBatchIds(ids); + sqlSession.commit(); + } finally { + sqlSession.close(); + } + } + + public void batchInsert(List salaryArchiveTaxAgentSaves) { + SqlSession sqlSession = MyBatisFactory.sqlSessionFactory.openSession(); + try { + SalaryArchiveTaxAgentMapper mapper = sqlSession.getMapper(SalaryArchiveTaxAgentMapper.class); + mapper.batchInsert(salaryArchiveTaxAgentSaves); + sqlSession.commit(); + } finally { + sqlSession.close(); + } + + } } diff --git a/src/com/engine/salary/cmd/datacollection/AddUpDeductionImportCmd.java b/src/com/engine/salary/cmd/datacollection/AddUpDeductionImportCmd.java index c727231c1..e6419f0d4 100644 --- a/src/com/engine/salary/cmd/datacollection/AddUpDeductionImportCmd.java +++ b/src/com/engine/salary/cmd/datacollection/AddUpDeductionImportCmd.java @@ -77,7 +77,7 @@ public class AddUpDeductionImportCmd extends AbstractCommonCommand addUpDeductions = ExcelParseHelper.parse(fileInputStream, AddUpDeductionDTO.class, 0, 1, 12, "addUpDeductionTemplate.xlsx"); + List addUpDeductions = ExcelParseHelper.parse2Map(fileInputStream, AddUpDeductionDTO.class, 0, 1, 12, "addUpDeductionTemplate.xlsx"); int total = addUpDeductions.size(); int index = 0; diff --git a/src/com/engine/salary/cmd/datacollection/AddUpDeductionPreviewCmd.java b/src/com/engine/salary/cmd/datacollection/AddUpDeductionPreviewCmd.java index 673fe2001..fa428ee0e 100644 --- a/src/com/engine/salary/cmd/datacollection/AddUpDeductionPreviewCmd.java +++ b/src/com/engine/salary/cmd/datacollection/AddUpDeductionPreviewCmd.java @@ -55,7 +55,7 @@ public class AddUpDeductionPreviewCmd extends AbstractCommonCommand addUpDeductions = ExcelParseHelper.parse(fileInputStream, AddUpDeductionDTO.class, 0, 1, 12, "addUpDeductionTemplate.xlsx"); + List addUpDeductions = ExcelParseHelper.parse2Map(fileInputStream, AddUpDeductionDTO.class, 0, 1, 12, "addUpDeductionTemplate.xlsx"); apidatas.put("preview", addUpDeductions); } finally { IOUtils.closeQuietly(fileInputStream); diff --git a/src/com/engine/salary/cmd/datacollection/AddUpSituationImportCmd.java b/src/com/engine/salary/cmd/datacollection/AddUpSituationImportCmd.java index fe7cf8c71..062eeb9a3 100644 --- a/src/com/engine/salary/cmd/datacollection/AddUpSituationImportCmd.java +++ b/src/com/engine/salary/cmd/datacollection/AddUpSituationImportCmd.java @@ -72,7 +72,7 @@ public class AddUpSituationImportCmd extends AbstractCommonCommand excelDates = ExcelParseHelper.parse(fileInputStream, AddUpSituationDTO.class, 0, 1, 21, "template.xlsx"); + List excelDates = ExcelParseHelper.parse2Map(fileInputStream, AddUpSituationDTO.class, 0, 1, 21, "template.xlsx"); int total = excelDates.size(); int index = 0; diff --git a/src/com/engine/salary/cmd/datacollection/AddUpSituationPreviewCmd.java b/src/com/engine/salary/cmd/datacollection/AddUpSituationPreviewCmd.java index 4cbcaf367..cd96544fa 100644 --- a/src/com/engine/salary/cmd/datacollection/AddUpSituationPreviewCmd.java +++ b/src/com/engine/salary/cmd/datacollection/AddUpSituationPreviewCmd.java @@ -56,7 +56,7 @@ public class AddUpSituationPreviewCmd extends AbstractCommonCommand excelDates = ExcelParseHelper.parse(fileInputStream, AddUpSituationDTO.class, 0, 1, 21, "template.xlsx"); + List excelDates = ExcelParseHelper.parse2Map(fileInputStream, AddUpSituationDTO.class, 0, 1, 21, "template.xlsx"); apidatas.put("preview", excelDates); } finally { IOUtils.closeQuietly(fileInputStream); diff --git a/src/com/engine/salary/cmd/datacollection/OtherDeductionImportCmd.java b/src/com/engine/salary/cmd/datacollection/OtherDeductionImportCmd.java index e51bac20f..e0f9a03b1 100644 --- a/src/com/engine/salary/cmd/datacollection/OtherDeductionImportCmd.java +++ b/src/com/engine/salary/cmd/datacollection/OtherDeductionImportCmd.java @@ -75,7 +75,7 @@ public class OtherDeductionImportCmd extends AbstractCommonCommand OtherDeductions = ExcelParseHelper.parse(fileInputStream, OtherDeductionListDTO.class, 0, 1, 11, "OtherDeductionTemplate.xlsx"); + List OtherDeductions = ExcelParseHelper.parse2Map(fileInputStream, OtherDeductionListDTO.class, 0, 1, 11, "OtherDeductionTemplate.xlsx"); int total = OtherDeductions.size(); int index = 0; diff --git a/src/com/engine/salary/cmd/datacollection/OtherDeductionPreviewCmd.java b/src/com/engine/salary/cmd/datacollection/OtherDeductionPreviewCmd.java index b6530f43c..8e3849384 100644 --- a/src/com/engine/salary/cmd/datacollection/OtherDeductionPreviewCmd.java +++ b/src/com/engine/salary/cmd/datacollection/OtherDeductionPreviewCmd.java @@ -53,7 +53,7 @@ public class OtherDeductionPreviewCmd extends AbstractCommonCommand OtherDeductions = ExcelParseHelper.parse(fileInputStream, OtherDeductionListDTO.class, 0, 1, 11, "OtherDeductionTemplate.xlsx"); + List OtherDeductions = ExcelParseHelper.parse2Map(fileInputStream, OtherDeductionListDTO.class, 0, 1, 11, "OtherDeductionTemplate.xlsx"); apidatas.put("preview", OtherDeductions); } finally { IOUtils.closeQuietly(fileInputStream); diff --git a/src/com/engine/salary/entity/salaryarchive/po/SalaryArchiveTaxAgentPO.java b/src/com/engine/salary/entity/salaryarchive/po/SalaryArchiveTaxAgentPO.java index 311b940ea..72f74c761 100644 --- a/src/com/engine/salary/entity/salaryarchive/po/SalaryArchiveTaxAgentPO.java +++ b/src/com/engine/salary/entity/salaryarchive/po/SalaryArchiveTaxAgentPO.java @@ -53,6 +53,8 @@ public class SalaryArchiveTaxAgentPO { //调整原因") private String adjustReason; + private String description; + /** * 个税扣缴义务人的主键id */ diff --git a/src/com/engine/salary/init.sql b/src/com/engine/salary/init.sql index f219f1094..8be000a8e 100644 --- a/src/com/engine/salary/init.sql +++ b/src/com/engine/salary/init.sql @@ -16,7 +16,9 @@ alter table hrsa_salary_sob_emp_field modify id bigint auto_increment; alter table hrsa_salary_sob_adjust_rule modify id bigint auto_increment; alter table hrsa_salary_sob_check_rule modify id bigint auto_increment; alter table hrsa_salary_archive_dimission modify id bigint auto_increment; - +alter table hrsa_salary_archive modify id bigint auto_increment; +alter table hrsa_salary_archive_tax_agent modify id bigint auto_increment; +alter table hrsa_salary_archive_item modify id bigint auto_increment; --福利方案主键自增增加 diff --git a/src/com/engine/salary/mapper/archive/SalaryArchiveItemMapper.java b/src/com/engine/salary/mapper/archive/SalaryArchiveItemMapper.java index 62d02ddf6..e3662c811 100644 --- a/src/com/engine/salary/mapper/archive/SalaryArchiveItemMapper.java +++ b/src/com/engine/salary/mapper/archive/SalaryArchiveItemMapper.java @@ -73,16 +73,6 @@ public interface SalaryArchiveItemMapper { */ void batchInsert(@Param("collection") List salaryArchiveItemSaves); - /** - * 分页查询薪资项目调整记录列表 - * @param page - * @param param - * @param salaryItemIds - * @param tenantKey - * @return - */ -// IPage salaryItemAdjustRecordList(Page page, @Param("param") SalaryItemAdjustRecordQueryParam param, @Param("salaryItemIds") List salaryItemIds, @Param("tenantKey") String tenantKey); - /** * 查询薪资项目调整记录列表 * @param param @@ -98,7 +88,8 @@ public interface SalaryArchiveItemMapper { List getEffectiveSalaryItems(@Param("param") SalaryArchiveItemQueryParam build); - void deleteBatchIds(@Param("param") List effectiveSalaryItemDels); + void deleteBatchIds(@Param("effectiveSalaryItemDels") List effectiveSalaryItemDels); + void deleteBySalaryArchiveId(@Param("salaryArchiveIds") List salaryArchiveIds); } \ No newline at end of file diff --git a/src/com/engine/salary/mapper/archive/SalaryArchiveItemMapper.xml b/src/com/engine/salary/mapper/archive/SalaryArchiveItemMapper.xml index 477ab8c8c..aaa6d883e 100644 --- a/src/com/engine/salary/mapper/archive/SalaryArchiveItemMapper.xml +++ b/src/com/engine/salary/mapper/archive/SalaryArchiveItemMapper.xml @@ -920,7 +920,7 @@ AND t.salary_item_id IN - + #{param.salaryItemId} @@ -944,7 +944,7 @@ AND t.salary_item_id IN - + #{param.salaryItemId} @@ -965,5 +965,16 @@ + + UPDATE hrsa_salary_archive_item + SET delete_type = 1 + WHERE delete_type = 0 + AND salary_archive_id IN + + #{salaryArchiveId} + + + + \ No newline at end of file diff --git a/src/com/engine/salary/mapper/archive/SalaryArchiveMapper.java b/src/com/engine/salary/mapper/archive/SalaryArchiveMapper.java index 534644db4..587b11bf8 100644 --- a/src/com/engine/salary/mapper/archive/SalaryArchiveMapper.java +++ b/src/com/engine/salary/mapper/archive/SalaryArchiveMapper.java @@ -2,7 +2,6 @@ package com.engine.salary.mapper.archive; import com.engine.salary.entity.salaryarchive.dto.SalaryArchiveListDTO; import com.engine.salary.entity.salaryarchive.param.SalaryArchiveQueryParam; -import com.engine.salary.entity.salaryarchive.po.SalaryArchiveEmployeePO; import com.engine.salary.entity.salaryarchive.po.SalaryArchivePO; import org.apache.ibatis.annotations.Param; @@ -74,14 +73,6 @@ public interface SalaryArchiveMapper { */ List list(@Param("param") SalaryArchiveQueryParam param); - /** - * 分页查询薪资档案列表 - * @param page - * @param param - * @param tenantKey - * @return - */ -// IPage list(Page page, @Param("param") SalaryArchiveQueryParam param); /** @@ -96,10 +87,5 @@ public interface SalaryArchiveMapper { */ void batchInsert(@Param("collection") List salaryArchiveSaves); - /** - * 员工信息列表 - * @return - */ - List listEmployee(); } \ No newline at end of file diff --git a/src/com/engine/salary/mapper/archive/SalaryArchiveTaxAgentMapper.java b/src/com/engine/salary/mapper/archive/SalaryArchiveTaxAgentMapper.java index d5dc5f517..092f5975f 100644 --- a/src/com/engine/salary/mapper/archive/SalaryArchiveTaxAgentMapper.java +++ b/src/com/engine/salary/mapper/archive/SalaryArchiveTaxAgentMapper.java @@ -65,5 +65,17 @@ public interface SalaryArchiveTaxAgentMapper { List listByParam(@Param("param") SalaryArchiveTaxAgentQueryParam build); - void deleteBySalaryArchiveId(List salaryArchiveIds); + void deleteBySalaryArchiveId(@Param("collection")List salaryArchiveIds); + + List getEffectiveTaxAgentList(SalaryArchiveTaxAgentQueryParam build); + + List getIneffectiveTaxAgentList(SalaryArchiveTaxAgentQueryParam build); + + void deleteBatchIds(List ids); + + /** + * 批量插入 + * @param salaryArchiveTaxAgentSaves + */ + void batchInsert(@Param("collection") List salaryArchiveTaxAgentSaves); } \ No newline at end of file diff --git a/src/com/engine/salary/mapper/archive/SalaryArchiveTaxAgentMapper.xml b/src/com/engine/salary/mapper/archive/SalaryArchiveTaxAgentMapper.xml index fef43a12e..7a304f05e 100644 --- a/src/com/engine/salary/mapper/archive/SalaryArchiveTaxAgentMapper.xml +++ b/src/com/engine/salary/mapper/archive/SalaryArchiveTaxAgentMapper.xml @@ -321,10 +321,120 @@ SET delete_type = 1 WHERE delete_type = 0 AND salary_archive_id IN - - #{salaryArchiveIds} + + #{salaryArchiveId} + + + + + + + + + UPDATE hrsa_salary_archive_tax_agent + SET delete_type = 1 + WHERE delete_type = 0 + AND id IN + + #{id} + + salary_archive_id + , + employee_id, + effective_time, + adjust_reason, + tax_agent_id, + operator, + operate_time, + create_time, + update_time, + creator, + tenant_key + + + + + INSERT INTO hrsa_salary_archive_tax_agent ( + + ) + VALUES + + ( + #{item.salaryArchiveId}, + #{item.employeeId}, + #{item.effectiveTime}, + #{item.adjustReason}, + #{item.taxAgentId}, + #{item.operator}, + #{item.operateTime}, + #{item.createTime}, + #{item.updateTime}, + #{item.creator}, + #{item.tenantKey} + ) + + + + INSERT INTO hrsa_salary_archive_tax_agent ( + + ) + + select + #{item.salaryArchiveId}, + #{item.employeeId}, + #{item.effectiveTime}, + #{item.adjustReason}, + #{item.taxAgentId}, + #{item.operator}, + #{item.operateTime}, + #{item.createTime}, + #{item.updateTime}, + #{item.creator}, + #{item.tenantKey} + from dual + + + + INSERT INTO hrsa_salary_archive_tax_agent ( + + ) + VALUES + + ( + #{item.salaryArchiveId}, + #{item.employeeId}, + #{item.effectiveTime}, + #{item.adjustReason}, + #{item.taxAgentId}, + #{item.operator}, + #{item.operateTime}, + #{item.createTime}, + #{item.updateTime}, + #{item.creator}, + #{item.tenantKey} + ) + + + + \ No newline at end of file diff --git a/src/com/engine/salary/service/SalaryArchiveService.java b/src/com/engine/salary/service/SalaryArchiveService.java index 0230b0f51..2fcd91879 100644 --- a/src/com/engine/salary/service/SalaryArchiveService.java +++ b/src/com/engine/salary/service/SalaryArchiveService.java @@ -4,6 +4,7 @@ import com.engine.salary.common.LocalDateRange; import com.engine.salary.entity.salaryarchive.dto.SalaryArchiveDataDTO; import com.engine.salary.entity.salaryarchive.dto.SalaryArchiveListDTO; import com.engine.salary.entity.salaryarchive.param.SalaryArchiveDimissionSaveParam; +import com.engine.salary.entity.salaryarchive.param.SalaryArchiveImportHandleParam; import com.engine.salary.entity.salaryarchive.param.SalaryArchiveQueryParam; import com.engine.salary.entity.salaryarchive.po.SalaryArchiveDimissionPO; import com.engine.salary.entity.salaryarchive.po.SalaryArchiveItemPO; @@ -86,9 +87,6 @@ public interface SalaryArchiveService { /** * 下载导入模板 * - * @param map - * @param username - * @param eteamsId * @param salaryArchiveImportTypeEnum * @param queryParam * @return @@ -126,4 +124,10 @@ public interface SalaryArchiveService { * @return */ List getSalaryArchiveTaxAgentData(LocalDateRange localDateRange, Collection employeeIds); + + void importSalaryArchive(SalaryArchiveImportHandleParam param); + + Map preview(SalaryArchiveImportHandleParam param); + + } diff --git a/src/com/engine/salary/service/impl/SalaryArchiveServiceImpl.java b/src/com/engine/salary/service/impl/SalaryArchiveServiceImpl.java index f0c0ff33d..ceceb9ea4 100644 --- a/src/com/engine/salary/service/impl/SalaryArchiveServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryArchiveServiceImpl.java @@ -1,1182 +1,1145 @@ -//package com.engine.salary.service.impl; -// -//import com.engine.core.impl.Service; -//import com.engine.salary.biz.*; -//import com.engine.salary.common.LocalDateRange; -//import com.engine.salary.constant.SalaryDefaultTenantConstant; -//import com.engine.salary.constant.SalaryItemConstant; -//import com.engine.salary.entity.datacollection.DataCollectionEmployee; -//import com.engine.salary.entity.salaryarchive.bo.SalaryArchiveBO; -//import com.engine.salary.entity.salaryarchive.dto.SalaryArchiveDataDTO; -//import com.engine.salary.entity.salaryarchive.dto.SalaryArchiveInitImportDTO; -//import com.engine.salary.entity.salaryarchive.dto.SalaryArchiveInitImportSameDTO; -//import com.engine.salary.entity.salaryarchive.dto.SalaryArchiveListDTO; -//import com.engine.salary.entity.salaryarchive.param.*; -//import com.engine.salary.entity.salaryarchive.po.SalaryArchiveDimissionPO; -//import com.engine.salary.entity.salaryarchive.po.SalaryArchiveItemPO; -//import com.engine.salary.entity.salaryarchive.po.SalaryArchivePO; -//import com.engine.salary.entity.salaryarchive.po.SalaryArchiveTaxAgentPO; -//import com.engine.salary.entity.salaryitem.po.SalaryItemPO; -//import com.engine.salary.entity.taxrate.TaxAgent; -//import com.engine.salary.enums.SalaryUserStatusEnum; -//import com.engine.salary.enums.salaryarchive.SalaryArchiveImportTypeEnum; -//import com.engine.salary.enums.salaryarchive.SalaryArchiveItemAdjustReasonEnum; -//import com.engine.salary.enums.salaryarchive.SalaryArchiveTaxAgentAdjustReasonEnum; -//import com.engine.salary.exception.SalaryRunTimeException; -//import com.engine.salary.service.SalaryArchiveService; -//import com.engine.salary.util.SalaryDateUtil; -//import com.engine.salary.util.SalaryI18nUtil; -//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.page.PageInfo; -//import com.google.common.base.Joiner; -//import com.google.common.collect.Lists; -//import com.google.common.collect.Maps; -//import org.apache.commons.collections4.CollectionUtils; -//import org.apache.commons.lang3.StringUtils; -//import org.apache.poi.ss.usermodel.Sheet; -//import org.apache.poi.xssf.usermodel.XSSFWorkbook; -//import weaver.file.ImageFileManager; -// -//import java.io.InputStream; -//import java.text.SimpleDateFormat; -//import java.util.*; -//import java.util.concurrent.ExecutorService; -//import java.util.concurrent.atomic.AtomicInteger; -//import java.util.stream.Collectors; -// -//import static com.engine.salary.util.excel.ExcelSupport.EXCEL_TYPE_XLSX; -// -///** -// * 薪资档案 -// *

Copyright: Copyright (c) 2022

-// *

Company: 泛微软件

-// * -// * @author qiantao -// * @version 1.0 -// **/ -//public class SalaryArchiveServiceImpl extends Service implements SalaryArchiveService { -// -// private SalaryArchiveBiz mapper = new SalaryArchiveBiz(); -// private EmployBiz employBiz = new EmployBiz(); -// private SalaryArchiveItemBiz salaryArchiveItemMapper = new SalaryArchiveItemBiz(); -// private SalaryArchiveTaxAgentBiz salaryArchiveTaxAgentMapper = new SalaryArchiveTaxAgentBiz(); -// private SalaryArchiveDimissionBiz salaryArchiveDimissionMapper = new SalaryArchiveDimissionBiz(); -// private SalaryItemBiz salaryItemMapper = new SalaryItemBiz(); -// -// -// // private SalaryBatchService salaryBatchService; -// private TaxAgentBiz taxAgentService = new TaxAgentBiz(); -// private ExecutorService taskExecutor; -// -// @Override -// public SalaryArchivePO getById(Long salaryArchiveId) { -// return mapper.getById(salaryArchiveId); +package com.engine.salary.service.impl; + +import com.engine.core.impl.Service; +import com.engine.salary.biz.*; +import com.engine.salary.common.LocalDateRange; +import com.engine.salary.constant.SalaryDefaultTenantConstant; +import com.engine.salary.constant.SalaryItemConstant; +import com.engine.salary.entity.datacollection.DataCollectionEmployee; +import com.engine.salary.entity.salaryarchive.bo.SalaryArchiveBO; +import com.engine.salary.entity.salaryarchive.dto.SalaryArchiveDataDTO; +import com.engine.salary.entity.salaryarchive.dto.SalaryArchiveInitImportDTO; +import com.engine.salary.entity.salaryarchive.dto.SalaryArchiveInitImportSameDTO; +import com.engine.salary.entity.salaryarchive.dto.SalaryArchiveListDTO; +import com.engine.salary.entity.salaryarchive.param.*; +import com.engine.salary.entity.salaryarchive.po.SalaryArchiveDimissionPO; +import com.engine.salary.entity.salaryarchive.po.SalaryArchiveItemPO; +import com.engine.salary.entity.salaryarchive.po.SalaryArchivePO; +import com.engine.salary.entity.salaryarchive.po.SalaryArchiveTaxAgentPO; +import com.engine.salary.entity.salaryitem.po.SalaryItemPO; +import com.engine.salary.entity.taxrate.TaxAgent; +import com.engine.salary.enums.SalaryUserStatusEnum; +import com.engine.salary.enums.salaryarchive.SalaryArchiveImportTypeEnum; +import com.engine.salary.enums.salaryarchive.SalaryArchiveItemAdjustReasonEnum; +import com.engine.salary.enums.salaryarchive.SalaryArchiveTaxAgentAdjustReasonEnum; +import com.engine.salary.exception.SalaryRunTimeException; +import com.engine.salary.service.SalaryArchiveService; +import com.engine.salary.util.SalaryDateUtil; +import com.engine.salary.util.SalaryI18nUtil; +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.page.PageInfo; +import com.google.common.base.Joiner; +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang3.StringUtils; +import org.apache.poi.ss.usermodel.Sheet; +import org.apache.poi.util.IOUtils; +import org.apache.poi.xssf.usermodel.XSSFWorkbook; + +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.InputStream; +import java.text.SimpleDateFormat; +import java.util.*; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.atomic.AtomicInteger; +import java.util.stream.Collectors; + +import static com.engine.salary.util.excel.ExcelSupport.EXCEL_TYPE_XLSX; + +/** + * 薪资档案 + *

Copyright: Copyright (c) 2022

+ *

Company: 泛微软件

+ * + * @author qiantao + * @version 1.0 + **/ +public class SalaryArchiveServiceImpl extends Service implements SalaryArchiveService { + + private SalaryArchiveBiz SalaryArchiveMapper = new SalaryArchiveBiz(); + private EmployBiz employBiz = new EmployBiz(); + private SalaryArchiveItemBiz salaryArchiveItemMapper = new SalaryArchiveItemBiz(); + private SalaryArchiveTaxAgentBiz salaryArchiveTaxAgentMapper = new SalaryArchiveTaxAgentBiz(); + private SalaryArchiveDimissionBiz salaryArchiveDimissionMapper = new SalaryArchiveDimissionBiz(); + private SalaryItemBiz salaryItemMapper = new SalaryItemBiz(); + + + // private SalaryBatchService salaryBatchService; + private TaxAgentBiz taxAgentService = new TaxAgentBiz(); + private ExecutorService taskExecutor; + + @Override + public SalaryArchivePO getById(Long salaryArchiveId) { + return SalaryArchiveMapper.getById(salaryArchiveId); + } + + @Override + public PageInfo listPage(SalaryArchiveQueryParam queryParam) { + return SalaryArchiveMapper.listPage(queryParam); + } + + /** + * 获取薪资档案对应的当前生效的薪资项目 + * + * @param salaryArchivesIds + * @return + */ + @Override + public List getCurrentEffectiveItemList(Collection salaryArchivesIds, Collection salaryItemIds) { + // 没有薪资项目时,给个不存在的,否则加载所有不合理 fixme + salaryItemIds = CollectionUtils.isEmpty(salaryItemIds) ? Collections.singletonList(0L) : salaryItemIds; + List salaryArchiveItems = salaryArchiveItemMapper.getCurrentEffectiveItemList(SalaryArchiveItemQueryParam.builder().salaryArchivesIds(salaryArchivesIds).salaryItemIds(salaryItemIds).effectiveTime(new Date()).build()); + return salaryArchiveItems.stream() + .collect(Collectors.collectingAndThen(Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(f -> f.getSalaryArchiveId() + "-" + f.getSalaryItemId()))), ArrayList::new)); + } + + /** + * 获取薪资档案对应的当前生效的个税扣缴义务人 + * + * @param salaryArchivesIds + * @return + */ + @Override + public List getCurrentEffectiveTaxAgentList(Collection salaryArchivesIds) { + + List salaryArchiveTaxAgents = salaryArchiveTaxAgentMapper.listByParam(SalaryArchiveTaxAgentQueryParam.builder().salaryArchivesIds(salaryArchivesIds).effectiveTime(new Date()).build()); + + return salaryArchiveTaxAgents.stream() + .collect(Collectors.collectingAndThen(Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(SalaryArchiveTaxAgentPO::getSalaryArchiveId))), ArrayList::new)); + } + + /** + * 构建薪资档案数据 + * + * @param salaryArchives + * @param taxAgentLists + * @param salaryItems + * @param isPage + * @return + */ + @Override + public List> buildSalaryArchiveData(Collection salaryArchives, + Collection taxAgentLists, + List salaryItems, + Boolean isPage) { + // 分页用于表格展示,否则用于导出 + Collection ids = isPage ? salaryArchives.stream().map(SalaryArchiveListDTO::getId).collect(Collectors.toList()) : CollectionUtils.emptyCollection(); + + List salaryItemIds = salaryItems.stream().map(SalaryItemPO::getId).collect(Collectors.toList()); + // 1.获取薪资档案所对应的当前生效的薪资项目数据 + List salaryArchiveItemList = getCurrentEffectiveItemList(ids, salaryItemIds); + List> salaryArchiveItemData = salaryArchives.stream().map(m -> { + Map map = Maps.newHashMap(); + map.put("salaryArchiveId", m.getId()); + List salaryArchiveItemValuelList = salaryArchiveItemList.stream().filter(i -> i.getSalaryArchiveId().equals(m.getId())).collect(Collectors.toList()); + salaryArchiveItemValuelList.forEach(i -> { + map.put(i.getSalaryItemId() + SalaryItemConstant.DYNAMIC_SUFFIX, i.getItemValue()); + }); + return map; + }).collect(Collectors.toList()); + //2.获取薪资档案所对应的当前生效的个税扣缴义务人列表 + List taxAgentList = getCurrentEffectiveTaxAgentList(ids); + List> taxAgentData = taxAgentList.stream().map(m -> { + Map map = Maps.newHashMap(); + map.put("salaryArchiveId", m.getSalaryArchiveId()); + map.put("taxAgentId", m.getTaxAgentId()); + Optional optional = taxAgentLists.stream().filter(f -> f.getId().equals(m.getTaxAgentId())).findFirst(); + map.put("taxAgentName", optional.isPresent() ? optional.get().getName() : ""); + map.put("taxAgentEffectiveTime", m.getEffectiveTime() + ""); + return map; + }).collect(Collectors.toList()); + // 3.组装数据 + List> listMaps = new ArrayList<>(); + salaryArchives.forEach(e -> { + e.setEmployeeStatus(SalaryUserStatusEnum.getDefaultLabelByValue(e.getEmployeeStatus())); + + Map map = new LinkedHashMap<>(); + map.put("id", e.getId()); + map.put("username", e.getUsername()); + map.put("employeeId", e.getEmployeeId()); + + Optional> optionalTaxAgent = taxAgentData.stream().filter(f -> f.get("salaryArchiveId").toString().equals(e.getId().toString())).findFirst(); + map.put("taxAgentName", optionalTaxAgent.isPresent() ? optionalTaxAgent.get().get("taxAgentName").toString() : ""); + map.put("taxAgentId", optionalTaxAgent.isPresent() ? optionalTaxAgent.get().get("taxAgentId").toString() : ""); + map.put("taxAgentEffectiveTime", optionalTaxAgent.isPresent() ? optionalTaxAgent.get().get("taxAgentEffectiveTime").toString() : ""); + + map.put("departmentName", e.getDepartmentName()); + map.put("mobile", e.getMobile()); + map.put("employeeStatus", e.getEmployeeStatus()); + + // 薪资项目动态 + Optional> optionalItem = salaryArchiveItemData.stream().filter(f -> f.get("salaryArchiveId").toString().equals(e.getId().toString())).findFirst(); + optionalItem.ifPresent(map::putAll); + + listMaps.add(map); + }); + return listMaps; + } + + @Override + public void exportList(Map map, String username, String eteamsId, SalaryArchiveQueryParam queryParam) { + // 1.工作簿名称 + String sheetName = SalaryI18nUtil.getI18nLabel(85368, "薪资档案"); + // 获取所有可被引用的薪资项目 + List salaryItems = salaryItemMapper.getCanAdjustSalaryItems(); + String[] header = { + SalaryI18nUtil.getI18nLabel(85429, "姓名"), + SalaryI18nUtil.getI18nLabel(86184, "个税扣缴义务人"), + SalaryI18nUtil.getI18nLabel(86185, "部门"), + SalaryI18nUtil.getI18nLabel(86186, "手机号"), + SalaryI18nUtil.getI18nLabel(91075, "状态") + }; + // 2.表头 + List headerList = new ArrayList<>(Arrays.asList(header)); + for (SalaryItemPO salaryItem : salaryItems) { + headerList.add(salaryItem.getName()); + } + + // 获取所有个税扣缴义务人 + Collection taxAgentList = taxAgentService.listAll(); + Collection salaryArchives = SalaryArchiveMapper.list(queryParam); + List> listMaps = buildSalaryArchiveData(salaryArchives, taxAgentList, salaryItems, Boolean.FALSE); + // 组装数据 + List> rows = new ArrayList<>(); + rows.add(headerList); + listMaps.forEach(e -> { + List row = new ArrayList<>(); + row.add(e.get("username").toString()); + row.add(e.get("taxAgentName").toString()); + row.add(e.get("departmentName").toString()); + row.add(e.get("mobile") == null ? "" : e.get("mobile").toString()); + row.add(e.get("employeeStatus").toString()); + // 薪资项目数据 + for (SalaryItemPO salaryItem : salaryItems) { + row.add(e.containsKey(salaryItem.getId() + SalaryItemConstant.DYNAMIC_SUFFIX) ? (e.get(salaryItem.getId() + SalaryItemConstant.DYNAMIC_SUFFIX) == null ? "" : e.get(salaryItem.getId() + SalaryItemConstant.DYNAMIC_SUFFIX).toString()) : ""); + } + rows.add(row); + }); + // 3.表数据 + + ExcelUtil.genWorkbookV2(rows, sheetName); + } + + @Override + public XSSFWorkbook downloadTemplate(SalaryArchiveImportTypeEnum salaryArchiveImportTypeEnum, SalaryArchiveQueryParam queryParam) { + boolean isInit = salaryArchiveImportTypeEnum.getValue().equals(SalaryArchiveImportTypeEnum.INIT.getValue()); + boolean isTaxAgentAdjust = salaryArchiveImportTypeEnum.getValue().equals(SalaryArchiveImportTypeEnum.TAXAGENTADJUST.getValue()); + boolean isSalaryItemAdjust = salaryArchiveImportTypeEnum.getValue().equals(SalaryArchiveImportTypeEnum.SALARYITEMADJUST.getValue()); + + String nameI18n = SalaryI18nUtil.getI18nLabel(101601, "薪资档案导入模板"); + // 初始化 + if (isInit) { + nameI18n += "-" + SalaryI18nUtil.getI18nLabel(SalaryArchiveImportTypeEnum.INIT.getLabelId(), SalaryArchiveImportTypeEnum.INIT.getDefaultLabel()); + // 调整个税扣缴义务人 + } else if (isTaxAgentAdjust) { + nameI18n += "-" + SalaryI18nUtil.getI18nLabel(SalaryArchiveImportTypeEnum.TAXAGENTADJUST.getLabelId(), SalaryArchiveImportTypeEnum.TAXAGENTADJUST.getDefaultLabel()); + // 调薪 + } else if (isSalaryItemAdjust) { + nameI18n += "-" + SalaryI18nUtil.getI18nLabel(SalaryArchiveImportTypeEnum.SALARYITEMADJUST.getLabelId(), SalaryArchiveImportTypeEnum.SALARYITEMADJUST.getDefaultLabel()); + } + + // 1.工作簿名称 + String sheetName = nameI18n; + // 获取所有可被引用的薪资项目 + List salaryItems = salaryItemMapper.getCanAdjustSalaryItems(); + + // 2.表头 + List header = Lists.newArrayList(); + header.add(SalaryI18nUtil.getI18nLabel(85429, "姓名")); + header.add(SalaryI18nUtil.getI18nLabel(86184, "个税扣缴义务人")); + header.add(SalaryI18nUtil.getI18nLabel(85904, "生效日期")); + if (isTaxAgentAdjust || isSalaryItemAdjust) { + header.add(SalaryI18nUtil.getI18nLabel(85431, "调整原因")); + } + header.add(SalaryI18nUtil.getI18nLabel(86185, "部门")); + header.add(SalaryI18nUtil.getI18nLabel(86186, "手机号")); + header.add(SalaryI18nUtil.getI18nLabel(91075, "状态")); + if (isInit || isSalaryItemAdjust) { + for (SalaryItemPO salaryItem : salaryItems) { + header.add(salaryItem.getName()); + } + } + + // 获取所有个税扣缴义务人 + Collection taxAgentList = taxAgentService.listAll(); + Collection salaryArchives = SalaryArchiveMapper.list(queryParam); + List> listMaps = buildSalaryArchiveData(salaryArchives, taxAgentList, salaryItems, Boolean.FALSE); + // 组装数据 + List> rows = new ArrayList<>(); + rows.add(header); + listMaps.forEach(e -> { + List row = new ArrayList<>(); + row.add(e.get("username").toString()); + row.add(e.get("taxAgentName").toString()); + if (isTaxAgentAdjust || isSalaryItemAdjust) { + row.add(isTaxAgentAdjust ? e.get("taxAgentEffectiveTime").toString() : ""); + } + row.add(""); + row.add(e.get("departmentName").toString()); + row.add(e.get("mobile") == null ? "" : e.get("mobile").toString()); + row.add(e.get("employeeStatus").toString()); + // 调薪 + if (isInit || isSalaryItemAdjust) { + // 薪资项目数据 + for (SalaryItemPO salaryItem : salaryItems) { + row.add(e.containsKey(salaryItem.getId() + SalaryItemConstant.DYNAMIC_SUFFIX) ? (e.get(salaryItem.getId() + SalaryItemConstant.DYNAMIC_SUFFIX) == null ? "" : e.get(salaryItem.getId() + SalaryItemConstant.DYNAMIC_SUFFIX).toString()) : ""); + } + } + rows.add(row); + }); + // 3.表数据 + // 4.注释 + List excelComments = Lists.newArrayList(); + excelComments.add(new ExcelComment(0, 0, 3, 2, SalaryI18nUtil.getI18nLabel(100344, "必填"))); + if (isInit || isTaxAgentAdjust) { + excelComments.add(new ExcelComment(1, 0, 4, 2, SalaryI18nUtil.getI18nLabel(100344, "必填"))); + } + excelComments.add(new ExcelComment(2, 0, 5, 2, SalaryI18nUtil.getI18nLabel(100458, "必填,格式样例为'2022-01-01'、'2022/1/1'"))); + + //调整个税扣缴义务人 + if (isTaxAgentAdjust) { + excelComments.add(new ExcelComment(3, 0, 6, 2, SalaryI18nUtil.getI18nLabel(100952, "必填,可填写如:调动,变更,入职,离职,其他,初始化"))); + // 调薪 + } else if (isSalaryItemAdjust) { + excelComments.add(new ExcelComment(3, 0, 6, 2, SalaryI18nUtil.getI18nLabel(100953, "必填,可填写如:入职,转正,调薪,调岗调薪,离职,其他,初始化"))); + } + XSSFWorkbook book = ExcelUtil.genWorkbookV2(rows, sheetName, excelComments); + return book; + + } + +// @BatchExportHandler("exportSalaryArchive") +// public void exportSalaryArchiveHandler() { +// BatchCallbackMessage message = BatchExportContext.getBatchCallbackMessage(); +// log.info("接受到薪资档案导出的结果:{}", JSONObject.toJSONString(message)); // } -// -// @Override -// public PageInfo listPage(SalaryArchiveQueryParam queryParam) { -// return mapper.listPage(queryParam); -// } -// -// /** -// * 获取薪资档案对应的当前生效的薪资项目 -// * -// * @param salaryArchivesIds -// * @return -// */ -// @Override -// public List getCurrentEffectiveItemList(Collection salaryArchivesIds, Collection salaryItemIds) { -// // 没有薪资项目时,给个不存在的,否则加载所有不合理 fixme -// salaryItemIds = CollectionUtils.isEmpty(salaryItemIds) ? Collections.singletonList(0L) : salaryItemIds; -// List salaryArchiveItems = salaryArchiveItemMapper.getCurrentEffectiveItemList(SalaryArchiveItemQueryParam.builder().salaryArchivesIds(salaryArchivesIds).salaryItemIds(salaryItemIds).effectiveTime(new Date()).build()); -// return salaryArchiveItems.stream() -// .collect(Collectors.collectingAndThen(Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(f -> f.getSalaryArchiveId() + "-" + f.getSalaryItemId()))), ArrayList::new)); -// } -// -// /** -// * 获取薪资档案对应的当前生效的个税扣缴义务人 -// * -// * @param salaryArchivesIds -// * @return -// */ -// @Override -// public List getCurrentEffectiveTaxAgentList(Collection salaryArchivesIds) { -// -// List salaryArchiveTaxAgents = salaryArchiveTaxAgentMapper.listByParam(SalaryArchiveTaxAgentQueryParam.builder().salaryArchivesIds(salaryArchivesIds).effectiveTime(new Date()).build()); -// -// return salaryArchiveTaxAgents.stream() -// .collect(Collectors.collectingAndThen(Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(SalaryArchiveTaxAgentPO::getSalaryArchiveId))), ArrayList::new)); -// } -// -// /** -// * 构建薪资档案数据 -// * -// * @param salaryArchives -// * @param taxAgentLists -// * @param salaryItems -// * @param isPage -// * @return -// */ -// @Override -// public List> buildSalaryArchiveData(Collection salaryArchives, -// Collection taxAgentLists, -// List salaryItems, -// Boolean isPage) { -// // 分页用于表格展示,否则用于导出 -// Collection ids = isPage ? salaryArchives.stream().map(SalaryArchiveListDTO::getId).collect(Collectors.toList()) : CollectionUtils.emptyCollection(); -// -// List salaryItemIds = salaryItems.stream().map(SalaryItemPO::getId).collect(Collectors.toList()); -// // 1.获取薪资档案所对应的当前生效的薪资项目数据 -// List salaryArchiveItemList = getCurrentEffectiveItemList(ids, salaryItemIds); -// List> salaryArchiveItemData = salaryArchives.stream().map(m -> { -// Map map = Maps.newHashMap(); -// map.put("salaryArchiveId", m.getId()); -// List salaryArchiveItemValuelList = salaryArchiveItemList.stream().filter(i -> i.getSalaryArchiveId().equals(m.getId())).collect(Collectors.toList()); -// salaryArchiveItemValuelList.forEach(i -> { -// map.put(i.getSalaryItemId() + SalaryItemConstant.DYNAMIC_SUFFIX, i.getItemValue()); -// }); -// return map; -// }).collect(Collectors.toList()); -// //2.获取薪资档案所对应的当前生效的个税扣缴义务人列表 -// List taxAgentList = getCurrentEffectiveTaxAgentList(ids); -// List> taxAgentData = taxAgentList.stream().map(m -> { -// Map map = Maps.newHashMap(); -// map.put("salaryArchiveId", m.getSalaryArchiveId()); -// map.put("taxAgentId", m.getTaxAgentId()); -// Optional optional = taxAgentLists.stream().filter(f -> f.getId().equals(m.getTaxAgentId())).findFirst(); -// map.put("taxAgentName", optional.isPresent() ? optional.get().getName() : ""); -// map.put("taxAgentEffectiveTime", m.getEffectiveTime() + ""); -// return map; -// }).collect(Collectors.toList()); -// // 3.组装数据 -// List> listMaps = new ArrayList<>(); -// salaryArchives.forEach(e -> { -// e.setEmployeeStatus(SalaryUserStatusEnum.getDefaultLabelByValue(e.getEmployeeStatus())); -// -// Map map = new LinkedHashMap<>(); -// map.put("id", e.getId()); -// map.put("username", e.getUsername()); -// map.put("employeeId", e.getEmployeeId()); -// -// Optional> optionalTaxAgent = taxAgentData.stream().filter(f -> f.get("salaryArchiveId").toString().equals(e.getId().toString())).findFirst(); -// map.put("taxAgentName", optionalTaxAgent.isPresent() ? optionalTaxAgent.get().get("taxAgentName").toString() : ""); -// map.put("taxAgentId", optionalTaxAgent.isPresent() ? optionalTaxAgent.get().get("taxAgentId").toString() : ""); -// map.put("taxAgentEffectiveTime", optionalTaxAgent.isPresent() ? optionalTaxAgent.get().get("taxAgentEffectiveTime").toString() : ""); -// -// map.put("departmentName", e.getDepartmentName()); -// map.put("mobile", e.getMobile()); -// map.put("employeeStatus", e.getEmployeeStatus()); -// -// // 薪资项目动态 -// Optional> optionalItem = salaryArchiveItemData.stream().filter(f -> f.get("salaryArchiveId").toString().equals(e.getId().toString())).findFirst(); -// optionalItem.ifPresent(map::putAll); -// -// listMaps.add(map); -// }); -// return listMaps; -// } -// -// @Override -// public void exportList(Map map, String username, String eteamsId, SalaryArchiveQueryParam queryParam) { -// // 1.工作簿名称 -// String sheetName = SalaryI18nUtil.getI18nLabel(85368, "薪资档案"); -// // 获取所有可被引用的薪资项目 -// List salaryItems = salaryItemMapper.getCanAdjustSalaryItems(); -// String[] header = { -// SalaryI18nUtil.getI18nLabel(85429, "姓名"), -// SalaryI18nUtil.getI18nLabel(86184, "个税扣缴义务人"), -// SalaryI18nUtil.getI18nLabel(86185, "部门"), -// SalaryI18nUtil.getI18nLabel(86186, "手机号"), -// SalaryI18nUtil.getI18nLabel(91075, "状态") -// }; -// // 2.表头 -// List headerList = new ArrayList<>(Arrays.asList(header)); -// for (SalaryItemPO salaryItem : salaryItems) { -// headerList.add(salaryItem.getName()); -// } -// -// // 获取所有个税扣缴义务人 -// Collection taxAgentList = taxAgentService.listAll(); -// Collection salaryArchives = mapper.list(queryParam); -// List> listMaps = buildSalaryArchiveData(salaryArchives, taxAgentList, salaryItems, Boolean.FALSE); -// // 组装数据 -// List> rows = new ArrayList<>(); -// rows.add(headerList); -// listMaps.forEach(e -> { -// List row = new ArrayList<>(); -// row.add(e.get("username").toString()); -// row.add(e.get("taxAgentName").toString()); -// row.add(e.get("departmentName").toString()); -// row.add(e.get("mobile") == null ? "" : e.get("mobile").toString()); -// row.add(e.get("employeeStatus").toString()); -// // 薪资项目数据 -// for (SalaryItemPO salaryItem : salaryItems) { -// row.add(e.containsKey(salaryItem.getId() + SalaryItemConstant.DYNAMIC_SUFFIX) ? (e.get(salaryItem.getId() + SalaryItemConstant.DYNAMIC_SUFFIX) == null ? "" : e.get(salaryItem.getId() + SalaryItemConstant.DYNAMIC_SUFFIX).toString()) : ""); -// } -// rows.add(row); -// }); -// // 3.表数据 -// -// ExcelUtil.genWorkbookV2(rows, sheetName); -// } -// -// @Override -// public XSSFWorkbook downloadTemplate(SalaryArchiveImportTypeEnum salaryArchiveImportTypeEnum, SalaryArchiveQueryParam queryParam) { -// boolean isInit = salaryArchiveImportTypeEnum.getValue().equals(SalaryArchiveImportTypeEnum.INIT.getValue()); -// boolean isTaxAgentAdjust = salaryArchiveImportTypeEnum.getValue().equals(SalaryArchiveImportTypeEnum.TAXAGENTADJUST.getValue()); -// boolean isSalaryItemAdjust = salaryArchiveImportTypeEnum.getValue().equals(SalaryArchiveImportTypeEnum.SALARYITEMADJUST.getValue()); -// -// String nameI18n = SalaryI18nUtil.getI18nLabel(101601, "薪资档案导入模板"); -// // 初始化 -// if (isInit) { -// nameI18n += "-" + SalaryI18nUtil.getI18nLabel(SalaryArchiveImportTypeEnum.INIT.getLabelId(), SalaryArchiveImportTypeEnum.INIT.getDefaultLabel()); -// // 调整个税扣缴义务人 -// } else if (isTaxAgentAdjust) { -// nameI18n += "-" + SalaryI18nUtil.getI18nLabel(SalaryArchiveImportTypeEnum.TAXAGENTADJUST.getLabelId(), SalaryArchiveImportTypeEnum.TAXAGENTADJUST.getDefaultLabel()); -// // 调薪 -// } else if (isSalaryItemAdjust) { -// nameI18n += "-" + SalaryI18nUtil.getI18nLabel(SalaryArchiveImportTypeEnum.SALARYITEMADJUST.getLabelId(), SalaryArchiveImportTypeEnum.SALARYITEMADJUST.getDefaultLabel()); -// } -// -// // 1.工作簿名称 -// String sheetName = nameI18n; -// // 获取所有可被引用的薪资项目 -// List salaryItems = salaryItemMapper.getCanAdjustSalaryItems(); -// -// // 2.表头 -// List header = Lists.newArrayList(); -// header.add(SalaryI18nUtil.getI18nLabel(85429, "姓名")); -// header.add(SalaryI18nUtil.getI18nLabel(86184, "个税扣缴义务人")); -// header.add(SalaryI18nUtil.getI18nLabel(85904, "生效日期")); -// if (isTaxAgentAdjust || isSalaryItemAdjust) { -// header.add(SalaryI18nUtil.getI18nLabel(85431, "调整原因")); -// } -// header.add(SalaryI18nUtil.getI18nLabel(86185, "部门")); -// header.add(SalaryI18nUtil.getI18nLabel(86186, "手机号")); -// header.add(SalaryI18nUtil.getI18nLabel(91075, "状态")); -// if (isInit || isSalaryItemAdjust) { -// for (SalaryItemPO salaryItem : salaryItems) { -// header.add(salaryItem.getName()); -// } -// } -// -// // 获取所有个税扣缴义务人 -// Collection taxAgentList = taxAgentService.listAll(); -// Collection salaryArchives = mapper.list(queryParam); -// List> listMaps = buildSalaryArchiveData(salaryArchives, taxAgentList, salaryItems, Boolean.FALSE); -// // 组装数据 -// List> rows = new ArrayList<>(); -// rows.add(header); -// listMaps.forEach(e -> { -// List row = new ArrayList<>(); -// row.add(e.get("username").toString()); -// row.add(e.get("taxAgentName").toString()); -// if (isTaxAgentAdjust || isSalaryItemAdjust) { -// row.add(isTaxAgentAdjust ? e.get("taxAgentEffectiveTime").toString() : ""); -// } -// row.add(""); -// row.add(e.get("departmentName").toString()); -// row.add(e.get("mobile") == null ? "" : e.get("mobile").toString()); -// row.add(e.get("employeeStatus").toString()); -// // 调薪 -// if (isInit || isSalaryItemAdjust) { -// // 薪资项目数据 -// for (SalaryItemPO salaryItem : salaryItems) { -// row.add(e.containsKey(salaryItem.getId() + SalaryItemConstant.DYNAMIC_SUFFIX) ? (e.get(salaryItem.getId() + SalaryItemConstant.DYNAMIC_SUFFIX) == null ? "" : e.get(salaryItem.getId() + SalaryItemConstant.DYNAMIC_SUFFIX).toString()) : ""); -// } -// } -// rows.add(row); -// }); -// // 3.表数据 -// // 4.注释 -// List excelComments = Lists.newArrayList(); -// excelComments.add(new ExcelComment(0, 0, 3, 2, SalaryI18nUtil.getI18nLabel(100344, "必填"))); -// if (isInit || isTaxAgentAdjust) { -// excelComments.add(new ExcelComment(1, 0, 4, 2, SalaryI18nUtil.getI18nLabel(100344, "必填"))); -// } -// excelComments.add(new ExcelComment(2, 0, 5, 2, SalaryI18nUtil.getI18nLabel(100458, "必填,格式样例为'2022-01-01'、'2022/1/1'"))); -// -// //调整个税扣缴义务人 -// if (isTaxAgentAdjust) { -// excelComments.add(new ExcelComment(3, 0, 6, 2, SalaryI18nUtil.getI18nLabel(100952, "必填,可填写如:调动,变更,入职,离职,其他,初始化"))); -// // 调薪 -// } else if (isSalaryItemAdjust) { -// excelComments.add(new ExcelComment(3, 0, 6, 2, SalaryI18nUtil.getI18nLabel(100953, "必填,可填写如:入职,转正,调薪,调岗调薪,离职,其他,初始化"))); -// } -// XSSFWorkbook book = ExcelUtil.genWorkbookV2(rows, sheetName, excelComments); -// return book; -// -// } -// -//// @BatchExportHandler("exportSalaryArchive") -//// public void exportSalaryArchiveHandler() { -//// BatchCallbackMessage message = BatchExportContext.getBatchCallbackMessage(); -//// log.info("接受到薪资档案导出的结果:{}", JSONObject.toJSONString(message)); -//// } -// -// @Override -// public List dimissionSets() { -// return salaryArchiveDimissionMapper.dimissionSets(); -// } -// -// @Override -// public String saveDimissionSet(SalaryArchiveDimissionSaveParam saveParam) { -// Date now = new Date(); -// List dimissionSets = dimissionSets(); -// if (CollectionUtils.isNotEmpty(dimissionSets)) { -// SalaryArchiveDimissionPO po = dimissionSets.get(0); -// po.setDimissionTimeInterval(saveParam.getDimissionTimeInterval().getValue()); -// po.setUpdateTime(now); -// salaryArchiveDimissionMapper.updateById(po); -// } else { -// salaryArchiveDimissionMapper.insert(SalaryArchiveDimissionPO -// .builder() -//// .id(IdGenerator.generate()) -// .dimissionTimeInterval(saveParam.getDimissionTimeInterval().getValue()) -// .createTime(now) -// .updateTime(now) -// .creator((long) user.getUID()) -// .tenantKey(SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY) -// .build() -// ); -// } -// return StringUtils.EMPTY; -// } -// -// @Override -// public List getSalaryArchiveData(LocalDateRange localDateRange, Collection employeeIds) { -// return getSalaryArchiveData(localDateRange, employeeIds, Boolean.FALSE); -// } -// -// @Override -// public List getSalaryArchiveTaxAgentData(LocalDateRange localDateRange, Collection employeeIds) { -// return getSalaryArchiveData(localDateRange, employeeIds, Boolean.TRUE); -// } -// -// /** -// * 根据日期范围和人员获取薪资档案数据 -// * -// * @param localDateRange -// * @param employeeIds -// * @param isOnlyTaxAgent -// * @return -// */ -// private List getSalaryArchiveData(LocalDateRange localDateRange, Collection employeeIds, boolean isOnlyTaxAgent) { -// // 获取个税扣缴义务人调整数据 -// List salaryArchiveTaxAgentList = salaryArchiveTaxAgentMapper.listByParam(SalaryArchiveTaxAgentQueryParam.builder().employeeIds(employeeIds).effectiveTime(localDateRange.getEndDate()).build()); -// List allEmployeeIds = salaryArchiveTaxAgentList.stream().map(SalaryArchiveTaxAgentPO::getEmployeeId).distinct().collect(Collectors.toList()); -// // 获取所有可被引用的薪资项目 -// List salaryItems = salaryItemMapper.getCanAdjustSalaryItems(); -// Collection salaryItemIds = salaryItems.stream().map(SalaryItemPO::getId).collect(Collectors.toList()); -// // 获取薪资项目调整数据,isOnlyTaxAgent为true时不需要薪资项目数据 -// List salaryArchiveItemDataList; -// if (isOnlyTaxAgent || CollectionUtils.isEmpty(salaryItemIds)) { -// salaryArchiveItemDataList = Lists.newArrayList(); -// } else { -// salaryArchiveItemDataList = salaryArchiveItemMapper.listByParam(SalaryArchiveItemQueryParam.builder().salaryItemIds(salaryItemIds).employeeIds(employeeIds).effectiveTime(new Date()).build()); -// } -// return SalaryArchiveBO.buildSalaryArchiveData(salaryArchiveTaxAgentList, -// salaryArchiveItemDataList, -// localDateRange, -// allEmployeeIds, -// isOnlyTaxAgent); -// } -// -// /** -// * 导入薪资档案 -// */ -//// @BatchImportHandler("importSalaryArchive") -//// public void importSalaryArchive() { -//// BatchDocumentMessage message = BatchImportContext.getBatchDocumentMessage(); -//// log.info("【薪资档案】接收到上传的数据:{}", JSONObject.toJSONString(message)); -//// // 租户key -//// String tenantKey = message.getTenantKey().toLowerCase(); -//// try { -//// // 加密用 -//// DSTenantKeyThreadVar.tenantKey.set(tenantKey); -//// // 接收到解析的数据 -//// batchImportEbatch(message); -//// } catch (Exception e) { -//// e.printStackTrace(); -//// log.error("【薪资档案】导入失败:{}", String.format("BatchTaskId=%s,错误信息=%s", message.getBatchTaskId(), e.getMessage())); -//// } finally { -//// // 加密用 -//// DSTenantKeyThreadVar.tenantKey.remove(); -//// } -//// } -// -// /** -// * 导入的数据插入到数据库中 -// */ -// public void batchImport(SalaryArchiveImportHandleParam param) { -// //1、参数校验 -// String imageId = param.getImageId(); -// if (StringUtils.isBlank(imageId)) { -// throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(100593, "文件id为空")); -// } -// String importType = param.getImportType(); -// SalaryArchiveImportTypeEnum importTypeEnum = SalaryArchiveImportTypeEnum.parseByValue(importType); -// if (importTypeEnum == null) { -// throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(100593, "导入类型不正确")); -// } -// -// -// // 2.构建导入需要的数据 -// SalaryArchiveImportHandleParam importHandleParam = buildImportHandleParam(); -// -// InputStream fileInputStream = null; -//// try { -// fileInputStream = ImageFileManager.getInputStreamById(Integer.parseInt(imageId)); -//// fileInputStream = new FileInputStream("C:\\Users\\钱涛\\Desktop\\addUpDeductionTemplate.xlsx"); -//// } catch (FileNotFoundException e) { -//// e.printStackTrace(); -//// } -// -// Sheet sheet = ExcelSupport.parseFile(fileInputStream, 0, EXCEL_TYPE_XLSX); -// List headers = ExcelSupport.getSheetHeader(sheet, 0); -// -// checkHeaders(importType, headers); -// -// List> data = ExcelParseHelper.parse(fileInputStream, 0, 1); -// -// -// int total = data.size(); -// -// int successCount = 0; -// int errorCount = 0; -// // 用于(初始化导入)的相同employeeId时的处理 -// boolean isInit = importType.equals(SalaryArchiveImportTypeEnum.INIT.getValue()); -// List initImportData = Lists.newArrayList(); -// // 用于(调薪和调整个税扣缴义务人)的相同employeeId时取第一条记录,如果是初始化导入则有重复 -// List allEmployeeIds = Lists.newArrayList(); -// -// int effectiveTimeIndex = 0; -// for (int j = 0; j < headers.size(); j++) { -// if (headers.get(j).equals(SalaryI18nUtil.getI18nLabel(85904, "生效日期"))) { -// effectiveTimeIndex = j; -// } -// } -// // 错误sheet数据 -// List> errorData = new ArrayList<>(); -// // 错误提示 -// List excelComments = new ArrayList<>(); -// -// -// for (int i = 0; i < data.size(); i++) { -// Map map = data.get(i); -// // 3.校验行内容 -// boolean isError = singleRowCheck(importType, allEmployeeIds, map, headers, effectiveTimeIndex, excelComments, errorCount, importHandleParam); -// -// if (isError) { -// errorCount += 1; -// // 添加错误数据 -// errorData.add(map); -// } else { -// successCount += 1; -// } -// // 初始化导入对重复记录校验 -// if (isInit) { -// Map validMap = validInitImportData(isError, i, map, excelComments, errorCount, successCount, errorData, initImportData, importHandleParam); -// errorCount = Integer.parseInt(validMap.getOrDefault("errorCount", errorCount).toString()); -// successCount = Integer.parseInt(validMap.getOrDefault("successCount", successCount).toString()); -// } -// -// } -// -// -// // 4.数据入库处理 -// handleImportData(isInit, importHandleParam); -// -// } -// -// /** -// * 构建导入处理参数 -// * -// * @return -// */ -// private SalaryArchiveImportHandleParam buildImportHandleParam() { -// // 获取所有可被引用的薪资项目 -// List salaryItems = salaryItemMapper.getCanAdjustSalaryItems(); -// -// Collection salaryItemIds = salaryItems.stream().map(SalaryItemPO::getId).collect(Collectors.toList()); -// Date now = new Date(); -// return SalaryArchiveImportHandleParam.builder() -// // 获取租户下所有的人员 -// .employees(employBiz.listEmployee()) -// // 获取所有个税扣缴义务人 -// .taxAgentList(taxAgentService.listAll()) -// .salaryItems(salaryItems) -// // 查询已有的薪资档案基本数据 -// .salaryArchives(mapper.list(SalaryArchiveQueryParam.builder().build())) -// .salaryItemIds(salaryItemIds) -// // 查询已生效的薪资项目数据 -// .effectiveItemList(getEffectiveItemList(salaryItemIds)) -// // 查询未生效的薪资项目数据 -// .ineffectiveItemList(getIneffectiveItemList(salaryItemIds)) -// // 查询已生效的个税扣缴义务人数据 -// .effectiveTaxAgentList(getEffectiveTaxAgentList()) -// // 查询未生效的个税扣缴义务人数据 -// .ineffectiveTaxAgentList(getIneffectiveTaxAgentList()) -// // 当前时间 -// .nowTime(now) -// // 当天 -// .today(now) -// // 待保存薪资档案 -// .salaryArchiveSaves(Lists.newArrayList()) -// // 待保存薪资档案-个税扣缴义务人 -// .salaryArchiveTaxAgentSaves(Lists.newArrayList()) -// // 待保存薪资档案-薪资项目 -// .salaryArchiveItemSaves(Lists.newArrayList()) -// // 待删除薪资档案-个税扣缴义务人 -// .salaryArchiveTaxAgentDelTaxAgentIds(Lists.newArrayList()) -// // 待删除薪资档案-薪资项目 -// .salaryArchiveItemDelSalaryItemIds(Lists.newArrayList()) -// .build(); -// } -// -// /** -// * 初始化导入数据校验 -// * 说明:如果一个人的多条记录中有一个错那么就全部弄到错误文档中 -// * -// * @param isError -// * @param rowNo -// * @param map -// * @param excelComments -// * @param errorCount -// * @param successCount -// * @param errorData -// * @param initImportData -// * @param importHandleParam -// */ -// private Map validInitImportData(boolean isError, int rowNo, Map map, List excelComments, int errorCount, int successCount, List> errorData, List initImportData, SalaryArchiveImportHandleParam importHandleParam) { -// Long employeeId = Long.valueOf(Optional.ofNullable(map.get("employeeId")).orElse("0").toString()); -// Optional optionalInitImport = initImportData.stream().filter(f -> f.getEmployeeId().equals(employeeId)).findFirst(); -// -// Map validMap = new HashMap<>(); -// validMap.put("errorCount", errorCount); -// validMap.put("successCount", successCount); -// -// if (employeeId.equals(0L)) { -// return validMap; -// } -// AtomicInteger finalErrorCount = new AtomicInteger(errorCount); -// AtomicInteger finalSuccessCount = new AtomicInteger(successCount); -// if (optionalInitImport.isPresent()) { -// SalaryArchiveInitImportDTO initImport = optionalInitImport.get(); -// List sames = initImport.getSames(); -// sames.add(SalaryArchiveInitImportSameDTO.builder() -// .isError(isError) -// .rowNo(rowNo) -// .row(map) -// .build()); -// Optional optionalSame = sames.stream().filter(SalaryArchiveInitImportSameDTO::isError).findFirst(); -// // 只要是其中一行有错误 -// if (optionalSame.isPresent()) { -// sames.forEach(e -> { -// if (!e.isError()) { -// e.setError(Boolean.TRUE); + + @Override + public List dimissionSets() { + return salaryArchiveDimissionMapper.dimissionSets(); + } + + @Override + public String saveDimissionSet(SalaryArchiveDimissionSaveParam saveParam) { + Date now = new Date(); + List dimissionSets = dimissionSets(); + if (CollectionUtils.isNotEmpty(dimissionSets)) { + SalaryArchiveDimissionPO po = dimissionSets.get(0); + po.setDimissionTimeInterval(saveParam.getDimissionTimeInterval().getValue()); + po.setUpdateTime(now); + salaryArchiveDimissionMapper.updateById(po); + } else { + salaryArchiveDimissionMapper.insert(SalaryArchiveDimissionPO + .builder() +// .id(IdGenerator.generate()) + .dimissionTimeInterval(saveParam.getDimissionTimeInterval().getValue()) + .createTime(now) + .updateTime(now) + .creator((long) user.getUID()) + .tenantKey(SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY) + .build() + ); + } + return StringUtils.EMPTY; + } + + @Override + public List getSalaryArchiveData(LocalDateRange localDateRange, Collection employeeIds) { + return getSalaryArchiveData(localDateRange, employeeIds, Boolean.FALSE); + } + + @Override + public List getSalaryArchiveTaxAgentData(LocalDateRange localDateRange, Collection employeeIds) { + return getSalaryArchiveData(localDateRange, employeeIds, Boolean.TRUE); + } + + /** + * 根据日期范围和人员获取薪资档案数据 + * + * @param localDateRange + * @param employeeIds + * @param isOnlyTaxAgent + * @return + */ + private List getSalaryArchiveData(LocalDateRange localDateRange, Collection employeeIds, boolean isOnlyTaxAgent) { + // 获取个税扣缴义务人调整数据 + List salaryArchiveTaxAgentList = salaryArchiveTaxAgentMapper.listByParam(SalaryArchiveTaxAgentQueryParam.builder().employeeIds(employeeIds).effectiveTime(localDateRange.getEndDate()).build()); + List allEmployeeIds = salaryArchiveTaxAgentList.stream().map(SalaryArchiveTaxAgentPO::getEmployeeId).distinct().collect(Collectors.toList()); + // 获取所有可被引用的薪资项目 + List salaryItems = salaryItemMapper.getCanAdjustSalaryItems(); + Collection salaryItemIds = salaryItems.stream().map(SalaryItemPO::getId).collect(Collectors.toList()); + // 获取薪资项目调整数据,isOnlyTaxAgent为true时不需要薪资项目数据 + List salaryArchiveItemDataList; + if (isOnlyTaxAgent || CollectionUtils.isEmpty(salaryItemIds)) { + salaryArchiveItemDataList = Lists.newArrayList(); + } else { + salaryArchiveItemDataList = salaryArchiveItemMapper.listByParam(SalaryArchiveItemQueryParam.builder().salaryItemIds(salaryItemIds).employeeIds(employeeIds).effectiveTime(new Date()).build()); + } + return SalaryArchiveBO.buildSalaryArchiveData(salaryArchiveTaxAgentList, + salaryArchiveItemDataList, + localDateRange, + allEmployeeIds, + isOnlyTaxAgent); + } + + /** + * 导入薪资档案 + */ + public void importSalaryArchive(SalaryArchiveImportHandleParam param) { + //1、参数校验 + vaildImportParam(param); + + String imageId = param.getImageId(); + String importType = param.getImportType(); + + // 2.构建导入需要的数据 + SalaryArchiveImportHandleParam importHandleParam = buildImportHandleParam(); + + InputStream fileInputStream = null; + try { + try { +// fileInputStream = ImageFileManager.getInputStreamById(Integer.parseInt(imageId)); + fileInputStream = new FileInputStream("C:\\Users\\钱涛\\Desktop\\salaryItemAdjust.xlsx"); + } catch (FileNotFoundException e) { + e.printStackTrace(); + } + + Sheet sheet = ExcelSupport.parseFile(fileInputStream, 0, EXCEL_TYPE_XLSX); + List headers = ExcelSupport.getSheetHeader(sheet, 0); + + //检查导入模板的必填列 + checkHeaders(importType, headers); + + //excel数据 + List> data = ExcelParseHelper.parse2Map(sheet, 1); + + int successCount = 0; + int errorCount = 0; + // 用于(初始化导入)的相同employeeId时的处理 + boolean isInit = importType.equals(SalaryArchiveImportTypeEnum.INIT.getValue()); + List initImportData = Lists.newArrayList(); + // 用于(调薪和调整个税扣缴义务人)的相同employeeId时取第一条记录,如果是初始化导入则有重复 + List allEmployeeIds = Lists.newArrayList(); + + int effectiveTimeIndex = 0; + for (int j = 0; j < headers.size(); j++) { + if (headers.get(j).equals(SalaryI18nUtil.getI18nLabel(85904, "生效日期"))) { + effectiveTimeIndex = j; + break; + } + } + // 错误sheet数据 + List> errorData = new ArrayList<>(); + // 错误提示 + List> excelComments = new ArrayList<>(); + + + for (int i = 0; i < data.size(); i++) { + Map map = data.get(i); + // 3.校验行内容 + boolean isError = singleRowCheck(importType, allEmployeeIds, map, headers, effectiveTimeIndex, excelComments, errorCount, importHandleParam); + + if (isError) { + errorCount += 1; + // 添加错误数据 + errorData.add(map); + } else { + successCount += 1; + } + // 初始化导入对重复记录校验 + if (isInit) { + Map validMap = validInitImportData(isError, i, map, excelComments, errorCount, successCount, errorData, initImportData, importHandleParam); + errorCount = Integer.parseInt(validMap.getOrDefault("errorCount", errorCount).toString()); + successCount = Integer.parseInt(validMap.getOrDefault("successCount", successCount).toString()); + } + + } + // 4.数据入库处理 + handleImportData(isInit, importHandleParam); + + } finally { + IOUtils.closeQuietly(fileInputStream); + } + + + } + + @Override + public Map preview(SalaryArchiveImportHandleParam param) { + //1、参数校验 + vaildImportParam(param); + + Map map = new HashMap<>(); + + InputStream fileInputStream = null; + try { + + try { +// fileInputStream = ImageFileManager.getInputStreamById(Integer.parseInt(imageId)); + fileInputStream = new FileInputStream("C:\\Users\\钱涛\\Desktop\\salaryItemAdjust.xlsx"); + } catch (FileNotFoundException e) { + e.printStackTrace(); + } + + Sheet sheet = ExcelSupport.parseFile(fileInputStream, 0, EXCEL_TYPE_XLSX); + List headers = ExcelSupport.getSheetHeader(sheet, 0); + + map.put("headers", headers); + map.put("list", ExcelParseHelper.parse2List(sheet, 1)); + + return map; + + } finally { + IOUtils.closeQuietly(fileInputStream); + } + } + + private void vaildImportParam(SalaryArchiveImportHandleParam param) { + String imageId = param.getImageId(); + if (StringUtils.isBlank(imageId)) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(100593, "文件id为空")); + } + String importType = param.getImportType(); + SalaryArchiveImportTypeEnum importTypeEnum = SalaryArchiveImportTypeEnum.parseByValue(importType); + if (importTypeEnum == null) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(100593, "导入类型不正确")); + } + } + + /** + * 构建导入处理参数 + * + * @return + */ + private SalaryArchiveImportHandleParam buildImportHandleParam() { + // 获取所有可被引用的薪资项目 + List salaryItems = salaryItemMapper.getCanAdjustSalaryItems(); + + Collection salaryItemIds = salaryItems.stream().map(SalaryItemPO::getId).collect(Collectors.toList()); + Date now = new Date(); + return SalaryArchiveImportHandleParam.builder() + // 获取租户下所有的人员 + .employees(employBiz.listEmployee()) + // 获取所有个税扣缴义务人 + .taxAgentList(taxAgentService.listAll()) + .salaryItems(salaryItems) + // 查询已有的薪资档案基本数据 + .salaryArchives(SalaryArchiveMapper.list(SalaryArchiveQueryParam.builder().build())) + .salaryItemIds(salaryItemIds) + // 查询已生效的薪资项目数据 + .effectiveItemList(getEffectiveItemList(salaryItemIds)) + // 查询未生效的薪资项目数据 + .ineffectiveItemList(getIneffectiveItemList(salaryItemIds)) + // 查询已生效的个税扣缴义务人数据 + .effectiveTaxAgentList(getEffectiveTaxAgentList()) + // 查询未生效的个税扣缴义务人数据 + .ineffectiveTaxAgentList(getIneffectiveTaxAgentList()) + // 当前时间 + .nowTime(now) + // 当天 + .today(now) + // 待保存薪资档案 + .salaryArchiveSaves(Lists.newArrayList()) + // 待保存薪资档案-个税扣缴义务人 + .salaryArchiveTaxAgentSaves(Lists.newArrayList()) + // 待保存薪资档案-薪资项目 + .salaryArchiveItemSaves(Lists.newArrayList()) + // 待删除薪资档案-个税扣缴义务人 + .salaryArchiveTaxAgentDelTaxAgentIds(Lists.newArrayList()) + // 待删除薪资档案-薪资项目 + .salaryArchiveItemDelSalaryItemIds(Lists.newArrayList()) + .build(); + } + + /** + * 初始化导入数据校验 + * 说明:如果一个人的多条记录中有一个错那么就全部弄到错误文档中 + * + * @param isError + * @param rowNo + * @param map + * @param excelComments + * @param errorCount + * @param successCount + * @param errorData + * @param initImportData + * @param importHandleParam + */ + private Map validInitImportData(boolean isError, int rowNo, Map map, List> excelComments, int errorCount, int successCount, List> errorData, List initImportData, SalaryArchiveImportHandleParam importHandleParam) { + Long employeeId = Long.valueOf(Optional.ofNullable(map.get("employeeId")).orElse("0").toString()); + Optional optionalInitImport = initImportData.stream().filter(f -> f.getEmployeeId().equals(employeeId)).findFirst(); + + Map validMap = new HashMap<>(); + validMap.put("errorCount", errorCount); + validMap.put("successCount", successCount); + + if (employeeId.equals(0L)) { + return validMap; + } + AtomicInteger finalErrorCount = new AtomicInteger(errorCount); + AtomicInteger finalSuccessCount = new AtomicInteger(successCount); + if (optionalInitImport.isPresent()) { + SalaryArchiveInitImportDTO initImport = optionalInitImport.get(); + List sames = initImport.getSames(); + sames.add(SalaryArchiveInitImportSameDTO.builder() + .isError(isError) + .rowNo(rowNo) + .row(map) + .build()); + Optional optionalSame = sames.stream().filter(SalaryArchiveInitImportSameDTO::isError).findFirst(); + // 只要是其中一行有错误 + if (optionalSame.isPresent()) { + sames.forEach(e -> { + if (!e.isError()) { + e.setError(Boolean.TRUE); // salaryBatchService.createExcelComment(excelComments, SalaryI18nUtil.getI18nLabel(101723, "该员工的薪资档案记录有误,请检查"), finalErrorCount.get() + 1, finalErrorCount.get() + 1, 0, 0); -// finalErrorCount.addAndGet(1); -// errorData.add(e.getRow()); -// finalSuccessCount.addAndGet(-1); -// } -// }); -// // 如果到目前为止都没错的话,则相互之间检验调整记录 -// } else { -// int nums = sames.size(); -// // 1.生效时间不可重复 -// List effectiveTimeList = sames.stream().map(m -> Optional.ofNullable(m.getRow().get("effectiveTime")).orElse("").toString()).distinct().collect(Collectors.toList()); -// // 2.个税扣缴义务人和薪资项目共同决定是否重复 -// List rowSameList = sames.stream().map(m -> { -// Map row = m.getRow(); -// String taxAgent = Optional.ofNullable(row.get("taxAgent")).orElse("").toString(); -// String salaryItem = Optional.ofNullable(row.get("salaryItemVal")).orElse("").toString(); -// return taxAgent + salaryItem; -// }).distinct().collect(Collectors.toList()); -// if (effectiveTimeList.size() != nums || rowSameList.size() != nums) { -// sames.forEach(e -> { -// if (!e.isError()) { -// e.setError(Boolean.TRUE); + finalErrorCount.addAndGet(1); + errorData.add(e.getRow()); + finalSuccessCount.addAndGet(-1); + } + }); + // 如果到目前为止都没错的话,则相互之间检验调整记录 + } else { + int nums = sames.size(); + // 1.生效时间不可重复 + List effectiveTimeList = sames.stream().map(m -> Optional.ofNullable(m.getRow().get("effectiveTime")).orElse("").toString()).distinct().collect(Collectors.toList()); + // 2.个税扣缴义务人和薪资项目共同决定是否重复 + List rowSameList = sames.stream().map(m -> { + Map row = m.getRow(); + String taxAgent = Optional.ofNullable(row.get("taxAgent")).orElse("").toString(); + String salaryItem = Optional.ofNullable(row.get("salaryItemVal")).orElse("").toString(); + return taxAgent + salaryItem; + }).distinct().collect(Collectors.toList()); + if (effectiveTimeList.size() != nums || rowSameList.size() != nums) { + sames.forEach(e -> { + if (!e.isError()) { + e.setError(Boolean.TRUE); // salaryBatchService.createExcelComment(excelComments, SalaryI18nUtil.getI18nLabel(101723, "该员工的薪资档案记录有误,请检查"), finalErrorCount.get() + 1, finalErrorCount.get() + 1, 0, 0); -// finalErrorCount.addAndGet(1); -// errorData.add(e.getRow()); -// finalSuccessCount.addAndGet(-1); -// } -// }); -// } -// } -// initImport.setSames(sames); -// } else { -// SalaryArchiveInitImportDTO initImport = new SalaryArchiveInitImportDTO(); -// initImport.setEmployeeId(employeeId); -// List sames = Lists.newArrayList(); -// sames.add(SalaryArchiveInitImportSameDTO.builder() -// .isError(isError) -// .rowNo(rowNo) -// .row(map) -// .build()); -// initImport.setSames(sames); -// initImportData.add(initImport); -// } -// // 如果出现错误 -// if (isError || errorCount != finalErrorCount.get() || successCount != finalSuccessCount.get()) { -// validMap.put("errorCount", finalErrorCount.get()); -// validMap.put("successCount", finalSuccessCount.get()); -// // 将前面添加好的数据给过滤掉 -// importHandleParam.setSalaryArchiveSaves(importHandleParam.getSalaryArchiveSaves().stream().filter(f -> !f.getEmployeeId().equals(employeeId)).collect(Collectors.toList())); -// importHandleParam.setSalaryArchiveTaxAgentSaves(importHandleParam.getSalaryArchiveTaxAgentSaves().stream().filter(f -> !f.getEmployeeId().equals(employeeId)).collect(Collectors.toList())); -// importHandleParam.setSalaryArchiveItemSaves(importHandleParam.getSalaryArchiveItemSaves().stream().filter(f -> !f.getEmployeeId().equals(employeeId)).collect(Collectors.toList())); -// } -// return validMap; -// } -// -// /** -// * 校验单行数据 -// * -// * @param importType -// * @param allEmployeeIds -// * @param map -// * @param headers -// * @param excelComments -// * @param errorCount -// * @param importHandleParam -// * @return -// */ -// private boolean singleRowCheck(String importType, List allEmployeeIds, Map map, List headers, int effectiveTimeIndex, List excelComments, int errorCount, SalaryArchiveImportHandleParam importHandleParam) { -// boolean isError = false; -// -// boolean isInit = importType.equals(SalaryArchiveImportTypeEnum.INIT.getValue()); -// boolean isTaxAgentAdjust = importType.equals(SalaryArchiveImportTypeEnum.TAXAGENTADJUST.getValue()); -// boolean isSalaryItemAdjust = importType.equals(SalaryArchiveImportTypeEnum.SALARYITEMADJUST.getValue()); -// -// String userNameI18n = SalaryI18nUtil.getI18nLabel(85429, "姓名"); -// String taxAgentI18n = SalaryI18nUtil.getI18nLabel(86184, "个税扣缴义务人"); -// String effectiveTimeI18n = SalaryI18nUtil.getI18nLabel(85904, "生效日期"); -// String adjustReasonI18n = SalaryI18nUtil.getI18nLabel(85431, "调整原因"); -// // 1.姓名 -// String userName = Optional.ofNullable(map.get(userNameI18n)).orElse("").toString(); -// String deparmentName = Optional.ofNullable(map.get(SalaryI18nUtil.getI18nLabel(86185, "部门"))).orElse("").toString(); -// List employeeSameIds = importHandleParam.getEmployees().stream().filter(e -> (StringUtils.isBlank(userName) || Objects.equals(e.getUsername(), userName)) -// && (StringUtils.isBlank(deparmentName) || Objects.equals(e.getDepartmentName(), deparmentName))).map(DataCollectionEmployee::getEmployeeId) -// .collect(Collectors.toList()); -// Long employeeId = CollectionUtils.isNotEmpty(employeeSameIds) && employeeSameIds.size() == 1 && employeeSameIds.get(0) > 0 ? employeeSameIds.get(0) : null; -// // 调薪和调整个税扣缴义务人的存在相同的取第一条 -// if (employeeId != null && allEmployeeIds.contains(employeeId) && (isTaxAgentAdjust || isSalaryItemAdjust)) { -// return isError; -// } -// if (employeeId != null) { -// allEmployeeIds.add(employeeId); -// } -// // 用于初始化导入数据校验 -// map.put("employeeId", employeeId); -// map.put("rowId", employeeId); -// // 2.生效日期 -// String effectiveTimeCellVal = Optional.ofNullable(map.get(effectiveTimeI18n)).orElse("").toString().replaceAll(" 00:00:00", ""); -// // 免得失败后,会追加 00:00:00 -// map.put(effectiveTimeI18n, effectiveTimeCellVal); -// map.put("effectiveTime", effectiveTimeCellVal); -// Date effectiveTime = SalaryDateUtil.checkDay(effectiveTimeCellVal) ? dateStrToLocalDate(effectiveTimeCellVal) : null; -// // 3.个税扣缴义务人 -// String taxAgentCellVal = Optional.ofNullable(map.get(taxAgentI18n)).orElse("").toString(); -// // 用于初始化导入的同一个人的记录校验 -// map.put("taxAgent", taxAgentCellVal); -// Optional optionalTaxAgent = importHandleParam.getTaxAgentList().stream().filter(m -> m.getName().equals(taxAgentCellVal)).findFirst(); -// Long taxAgentId = optionalTaxAgent.map(TaxAgent::getId).orElse(null); -// // 4.调整原因 -// String adjustReason = ""; -// if (isTaxAgentAdjust) { -// // 4.调整原因[个税扣缴义务人] -// adjustReason = SalaryArchiveTaxAgentAdjustReasonEnum.getValueByDefaultLabel(Optional.ofNullable(map.get(adjustReasonI18n)).orElse("").toString()); -// } else if (isSalaryItemAdjust) { -// // 4.调整原因[薪资项目] -// adjustReason = SalaryArchiveItemAdjustReasonEnum.getValueByDefaultLabel(Optional.ofNullable(map.get(adjustReasonI18n)).orElse("").toString()); -// } -// // 构建薪资档案 -// -// SalaryArchivePO finalSalaryArchive = buildSalaryArchive(isInit, employeeId, importHandleParam); -// for (int j = 0; j < headers.size(); j++) { -// String key = headers.get(j); -// -// String cellVal = Optional.ofNullable(map.get(key)).orElse("").toString(); -// -// boolean isEmpty = StringUtils.isEmpty(cellVal) && -// (userNameI18n.equals(key) -// // 个税扣缴义务人列判空(初始化导入或调整个税扣缴义务人) -// || (taxAgentI18n.equals(key) && (isInit || isTaxAgentAdjust)) -// || effectiveTimeI18n.equals(key) -// // 调整原因列判空(调薪或调整个税扣缴义务人) -// || (adjustReasonI18n.equals(key) && (isTaxAgentAdjust || isSalaryItemAdjust))); -// // 判空 -// if (isEmpty) { + finalErrorCount.addAndGet(1); + errorData.add(e.getRow()); + finalSuccessCount.addAndGet(-1); + } + }); + } + } + initImport.setSames(sames); + } else { + SalaryArchiveInitImportDTO initImport = new SalaryArchiveInitImportDTO(); + initImport.setEmployeeId(employeeId); + List sames = Lists.newArrayList(); + sames.add(SalaryArchiveInitImportSameDTO.builder() + .isError(isError) + .rowNo(rowNo) + .row(map) + .build()); + initImport.setSames(sames); + initImportData.add(initImport); + } + // 如果出现错误 + if (isError || errorCount != finalErrorCount.get() || successCount != finalSuccessCount.get()) { + validMap.put("errorCount", finalErrorCount.get()); + validMap.put("successCount", finalSuccessCount.get()); + // 将前面添加好的数据给过滤掉 + importHandleParam.setSalaryArchiveSaves(importHandleParam.getSalaryArchiveSaves().stream().filter(f -> !f.getEmployeeId().equals(employeeId)).collect(Collectors.toList())); + importHandleParam.setSalaryArchiveTaxAgentSaves(importHandleParam.getSalaryArchiveTaxAgentSaves().stream().filter(f -> !f.getEmployeeId().equals(employeeId)).collect(Collectors.toList())); + importHandleParam.setSalaryArchiveItemSaves(importHandleParam.getSalaryArchiveItemSaves().stream().filter(f -> !f.getEmployeeId().equals(employeeId)).collect(Collectors.toList())); + } + return validMap; + } + + /** + * 校验单行数据 + * + * @param importType + * @param allEmployeeIds + * @param map + * @param headers + * @param excelComments + * @param errorCount + * @param importHandleParam + * @return + */ + private boolean singleRowCheck(String importType, List allEmployeeIds, Map map, List headers, int effectiveTimeIndex, + List> excelComments, int errorCount, SalaryArchiveImportHandleParam importHandleParam) { + boolean isError = false; + + boolean isInit = importType.equals(SalaryArchiveImportTypeEnum.INIT.getValue()); + boolean isTaxAgentAdjust = importType.equals(SalaryArchiveImportTypeEnum.TAXAGENTADJUST.getValue()); + boolean isSalaryItemAdjust = importType.equals(SalaryArchiveImportTypeEnum.SALARYITEMADJUST.getValue()); + + String userNameI18n = SalaryI18nUtil.getI18nLabel(85429, "姓名"); + String taxAgentI18n = SalaryI18nUtil.getI18nLabel(86184, "个税扣缴义务人"); + String effectiveTimeI18n = SalaryI18nUtil.getI18nLabel(85904, "生效日期"); + String adjustReasonI18n = SalaryI18nUtil.getI18nLabel(85431, "调整原因"); + // 1.姓名 + String userName = Optional.ofNullable(map.get(userNameI18n)).orElse("").toString(); + String deparmentName = Optional.ofNullable(map.get(SalaryI18nUtil.getI18nLabel(86185, "部门"))).orElse("").toString(); + List employeeSameIds = importHandleParam.getEmployees().stream().filter(e -> (StringUtils.isBlank(userName) || Objects.equals(e.getUsername(), userName)) + && (StringUtils.isBlank(deparmentName) || Objects.equals(e.getDepartmentName(), deparmentName))).map(DataCollectionEmployee::getEmployeeId) + .collect(Collectors.toList()); + Long employeeId = CollectionUtils.isNotEmpty(employeeSameIds) && employeeSameIds.size() == 1 && employeeSameIds.get(0) > 0 ? employeeSameIds.get(0) : null; + // 调薪和调整个税扣缴义务人的存在相同的取第一条 + if (employeeId != null && allEmployeeIds.contains(employeeId) && (isTaxAgentAdjust || isSalaryItemAdjust)) { + return isError; + } + if (employeeId != null) { + allEmployeeIds.add(employeeId); + } + // 用于初始化导入数据校验 + map.put("employeeId", employeeId); + map.put("rowId", employeeId); + // 2.生效日期 + String effectiveTimeCellVal = Optional.ofNullable(map.get(effectiveTimeI18n)).orElse("").toString().replaceAll(" 00:00:00", ""); + // 免得失败后,会追加 00:00:00 + map.put(effectiveTimeI18n, effectiveTimeCellVal); + map.put("effectiveTime", effectiveTimeCellVal); + Date effectiveTime = SalaryDateUtil.checkDay(effectiveTimeCellVal) ? dateStrToLocalDate(effectiveTimeCellVal) : null; + // 3.个税扣缴义务人 + String taxAgentCellVal = Optional.ofNullable(map.get(taxAgentI18n)).orElse("").toString(); + // 用于初始化导入的同一个人的记录校验 + map.put("taxAgent", taxAgentCellVal); + Optional optionalTaxAgent = importHandleParam.getTaxAgentList().stream().filter(m -> m.getName().equals(taxAgentCellVal)).findFirst(); + Long taxAgentId = optionalTaxAgent.map(TaxAgent::getId).orElse(null); + // 4.调整原因 + String adjustReason = ""; + if (isTaxAgentAdjust) { + // 4.调整原因[个税扣缴义务人] + adjustReason = SalaryArchiveTaxAgentAdjustReasonEnum.getValueByDefaultLabel(Optional.ofNullable(map.get(adjustReasonI18n)).orElse("").toString()); + } else if (isSalaryItemAdjust) { + // 4.调整原因[薪资项目] + adjustReason = SalaryArchiveItemAdjustReasonEnum.getValueByDefaultLabel(Optional.ofNullable(map.get(adjustReasonI18n)).orElse("").toString()); + } + // 构建薪资档案 + + SalaryArchivePO finalSalaryArchive = buildSalaryArchive(isInit, employeeId, importHandleParam); + for (int j = 0; j < headers.size(); j++) { + String key = headers.get(j); + + String cellVal = Optional.ofNullable(map.get(key)).orElse("").toString(); + + boolean isEmpty = StringUtils.isEmpty(cellVal) && + (userNameI18n.equals(key) + // 个税扣缴义务人列判空(初始化导入或调整个税扣缴义务人) + || (taxAgentI18n.equals(key) && (isInit || isTaxAgentAdjust)) + || effectiveTimeI18n.equals(key) + // 调整原因列判空(调薪或调整个税扣缴义务人) + || (adjustReasonI18n.equals(key) && (isTaxAgentAdjust || isSalaryItemAdjust))); + // 判空 + if (isEmpty) { // salaryBatchService.createExcelComment(excelComments, SalaryI18nUtil.getI18nLabel(100577, "不能为空"), errorCount + 1, errorCount + 1, j, j); -// isError = true; -// } -// // 1.姓名列处理 -// if (!isEmpty && userNameI18n.equals(key)) { -// if (CollectionUtils.isEmpty(employeeSameIds) || employeeSameIds.size() > 1) { + isError = true; + } + // 1.姓名列处理 + if (!isEmpty && userNameI18n.equals(key)) { + if (CollectionUtils.isEmpty(employeeSameIds) || employeeSameIds.size() > 1) { // salaryBatchService.createExcelComment(excelComments, SalaryI18nUtil.getI18nLabel(100578, "员工信息不能为空且不可重复(姓名与部门同时确认唯一)"), errorCount + 1, errorCount + 1, j, j); -// isError = true; -// } else if (employeeId == null) { + isError = true; + } else if (employeeId == null) { // salaryBatchService.createExcelComment(excelComments, SalaryI18nUtil.getI18nLabel(100579, "姓名错误,系统内不存在该姓名"), errorCount + 1, errorCount + 1, j, j); -// isError = true; -// // (调薪或调整个税扣缴义务人) -// } else if (finalSalaryArchive == null && (isTaxAgentAdjust || isSalaryItemAdjust)) { + isError = true; + // (调薪或调整个税扣缴义务人) + } else if (finalSalaryArchive == null && (isTaxAgentAdjust || isSalaryItemAdjust)) { // salaryBatchService.createExcelComment(excelComments, SalaryI18nUtil.getI18nLabel(101653, "该人员的薪资档案不存在,请先初始化"), errorCount + 1, errorCount + 1, j, j); -// isError = true; -// } -// // 2.个税扣缴义务人列处理(初始化导入或调整个税扣缴义务人) -// } else if (!isEmpty && taxAgentI18n.equals(key) && (isInit || isTaxAgentAdjust)) { -// isError = handleTaxAgent(isError, isInit, effectiveTimeIndex, excelComments, errorCount, j, taxAgentId, effectiveTime, finalSalaryArchive, adjustReason, importHandleParam); -// // 3.生效时间处理 -// } else if (!isEmpty && effectiveTimeI18n.equals(key) && effectiveTime == null) { + isError = true; + } + // 2.个税扣缴义务人列处理(初始化导入或调整个税扣缴义务人) + } else if (!isEmpty && taxAgentI18n.equals(key) && (isInit || isTaxAgentAdjust)) { + isError = handleTaxAgent(isError, isInit, effectiveTimeIndex, excelComments, errorCount, j, taxAgentId, effectiveTime, finalSalaryArchive, adjustReason, importHandleParam); + // 3.生效时间处理 + } else if (!isEmpty && effectiveTimeI18n.equals(key) && effectiveTime == null) { // salaryBatchService.createExcelComment(excelComments, SalaryI18nUtil.getI18nLabel(102497, "生效日期错误或格式不正确,正确格式示例为'2022-01-01'、'2022/1/1'"), errorCount + 1, errorCount + 1, j, j); -// isError = true; -// // 4.调整原因列处理(调薪或调整个税扣缴义务人) -// } else if (!isEmpty && adjustReasonI18n.equals(key) && (isTaxAgentAdjust || isSalaryItemAdjust) && StringUtils.isEmpty(adjustReason)) { + isError = true; + // 4.调整原因列处理(调薪或调整个税扣缴义务人) + } else if (!isEmpty && adjustReasonI18n.equals(key) && (isTaxAgentAdjust || isSalaryItemAdjust) && StringUtils.isEmpty(adjustReason)) { // salaryBatchService.createExcelComment(excelComments, SalaryI18nUtil.getI18nLabel(100591, "调整原因不存在"), errorCount + 1, errorCount + 1, j, j); -// isError = true; -// // 5.薪资项目列处理(初始化导入或调薪) -// } else { -// // 薪资项目数据 -// if (effectiveTime == null || finalSalaryArchive == null || !(isInit || isSalaryItemAdjust)) { -// continue; -// } -// isError = handleSalaryItem(isError, isInit, effectiveTimeIndex, excelComments, errorCount, j, -// effectiveTime, finalSalaryArchive, adjustReason, importHandleParam, key, cellVal, map); -// -// } -// } -// return isError; -// } -// -// private SalaryArchivePO buildSalaryArchive(boolean isInit, Long employeeId, SalaryArchiveImportHandleParam importHandleParam) { -// Optional optionalSA = importHandleParam.getSalaryArchives().stream().filter(p -> p.getEmployeeId().toString().equals(employeeId != null ? employeeId.toString() : "")).findFirst(); -// SalaryArchivePO salaryArchive = null; -// if (optionalSA.isPresent()) { -// // 修改档案 -// SalaryArchiveListDTO sa = optionalSA.get(); -// salaryArchive = new SalaryArchivePO(); -// salaryArchive.setId(sa.getId()); -// salaryArchive.setEmployeeId(sa.getEmployeeId()); -// } else if (employeeId != null && isInit) { -// // 新增档案 -// salaryArchive = SalaryArchivePO.builder() -//// .id(IdGenerator.generate()) -// .employeeId(employeeId) -// .createTime(importHandleParam.getNowTime()) -// .updateTime(importHandleParam.getNowTime()) -// .creator((long) user.getUID()) -// .tenantKey(SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY) -// .build(); -// importHandleParam.getSalaryArchiveSaves().add(salaryArchive); -// } -// return salaryArchive; -// } -// -// /** -// * 个税扣缴义务人处理 -// * -// * @param isError -// * @param excelComments -// * @param errorCount -// * @param j -// * @param taxAgentId -// * @param effectiveTime -// * @param finalSalaryArchive -// * @param taxAgentAdjustReason -// * @param importHandleParam -// * @return -// */ -// private boolean handleTaxAgent(boolean isError, boolean isInit, int effectiveTimeIndex, -// List excelComments, int errorCount, int j, -// Long taxAgentId, Date effectiveTime, SalaryArchivePO finalSalaryArchive, String taxAgentAdjustReason, SalaryArchiveImportHandleParam importHandleParam) { -// if (taxAgentId == null) { + isError = true; + // 5.薪资项目列处理(初始化导入或调薪) + } else { + // 薪资项目数据 + if (effectiveTime == null || finalSalaryArchive == null || !(isInit || isSalaryItemAdjust)) { + continue; + } + isError = handleSalaryItem(isError, isInit, effectiveTimeIndex, excelComments, errorCount, j, + effectiveTime, finalSalaryArchive, adjustReason, importHandleParam, key, cellVal, map); + + } + } + return isError; + } + + private SalaryArchivePO buildSalaryArchive(boolean isInit, Long employeeId, SalaryArchiveImportHandleParam importHandleParam) { + Optional optionalSA = importHandleParam.getSalaryArchives().stream().filter(p -> p.getEmployeeId().toString().equals(employeeId != null ? employeeId.toString() : "")).findFirst(); + SalaryArchivePO salaryArchive = null; + if (optionalSA.isPresent()) { + // 修改档案 + SalaryArchiveListDTO sa = optionalSA.get(); + salaryArchive = new SalaryArchivePO(); + salaryArchive.setId(sa.getId()); + salaryArchive.setEmployeeId(sa.getEmployeeId()); + } else if (employeeId != null && isInit) { + // 新增档案 + salaryArchive = SalaryArchivePO.builder() +// .id(IdGenerator.generate()) + .employeeId(employeeId) + .createTime(importHandleParam.getNowTime()) + .updateTime(importHandleParam.getNowTime()) + .creator((long) user.getUID()) + .tenantKey(SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY) + .build(); + + importHandleParam.getSalaryArchiveSaves().add(salaryArchive); + } + return salaryArchive; + } + + /** + * 个税扣缴义务人处理 + * + * @param isError + * @param excelComments + * @param errorCount + * @param j + * @param taxAgentId + * @param effectiveTime + * @param finalSalaryArchive + * @param taxAgentAdjustReason + * @param importHandleParam + * @return + */ + private boolean handleTaxAgent(boolean isError, boolean isInit, int effectiveTimeIndex, + List> excelComments, int errorCount, int j, + Long taxAgentId, Date effectiveTime, SalaryArchivePO finalSalaryArchive, String taxAgentAdjustReason, SalaryArchiveImportHandleParam importHandleParam) { + if (taxAgentId == null) { // salaryBatchService.createExcelComment(excelComments, SalaryI18nUtil.getI18nLabel(100545, "个税扣缴义务人不存在"), errorCount + 1, errorCount + 1, j, j); -// isError = true; -// } else if (effectiveTime != null && finalSalaryArchive != null) { -// boolean isBeforeError = false; -// if (!isInit) { -// // 前后调整校验 -// // 已生效 -// List effectiveList = importHandleParam.getEffectiveTaxAgentList().stream().filter(i -> finalSalaryArchive.getId().equals(i.getSalaryArchiveId())).collect(Collectors.toList()); -// // 当前已生效 -// SalaryArchiveTaxAgentPO effectiveTaxAgent = CollectionUtils.isNotEmpty(effectiveList) && effectiveList.size() > 0 ? effectiveList.get(0) : null; -// // 当前已生效的前一次调整 -// SalaryArchiveTaxAgentPO effectiveBeforeTaxAgent = CollectionUtils.isNotEmpty(effectiveList) && effectiveList.size() > 1 ? effectiveList.get(1) : null; -// // 未生效 -// Optional optionalIneffective = importHandleParam.getIneffectiveTaxAgentList().stream().filter(i -> finalSalaryArchive.getId().equals(i.getSalaryArchiveId())).findFirst(); -// SalaryArchiveTaxAgentPO ineffectiveTaxAgent = optionalIneffective.orElse(null); -// // 1.检验是否可以调整 -// if (effectiveTaxAgent != null) { -// // 当前已经生效的时间 -// Date currentEffectiveTime = effectiveTaxAgent.getEffectiveTime(); -// // 1.1 如果早于<当前已生效 -// if (effectiveTime.before(currentEffectiveTime)) { + isError = true; + } else if (effectiveTime != null && finalSalaryArchive != null) { + boolean isBeforeError = false; + if (!isInit) { + // 前后调整校验 + // 已生效 + List effectiveList = importHandleParam.getEffectiveTaxAgentList().stream().filter(i -> finalSalaryArchive.getId().equals(i.getSalaryArchiveId())).collect(Collectors.toList()); + // 当前已生效 + SalaryArchiveTaxAgentPO effectiveTaxAgent = CollectionUtils.isNotEmpty(effectiveList) && effectiveList.size() > 0 ? effectiveList.get(0) : null; + // 当前已生效的前一次调整 + SalaryArchiveTaxAgentPO effectiveBeforeTaxAgent = CollectionUtils.isNotEmpty(effectiveList) && effectiveList.size() > 1 ? effectiveList.get(1) : null; + // 未生效 + Optional optionalIneffective = importHandleParam.getIneffectiveTaxAgentList().stream().filter(i -> finalSalaryArchive.getId().equals(i.getSalaryArchiveId())).findFirst(); + SalaryArchiveTaxAgentPO ineffectiveTaxAgent = optionalIneffective.orElse(null); + // 1.检验是否可以调整 + if (effectiveTaxAgent != null) { + // 当前已经生效的时间 + Date currentEffectiveTime = effectiveTaxAgent.getEffectiveTime(); + // 1.1 如果早于<当前已生效 + if (effectiveTime.before(currentEffectiveTime)) { // salaryBatchService.createExcelComment(excelComments, SalaryI18nUtil.getI18nLabel(100429, "生效日期不可早于当前已生效的调整日期"), errorCount + 1, errorCount + 1, effectiveTimeIndex, effectiveTimeIndex); -// isError = true; -// isBeforeError = true; -// // 1.2 如果等于当前已生效 -// } else if (effectiveTime.equal(currentEffectiveTime)) { -// if (effectiveBeforeTaxAgent != null && effectiveBeforeTaxAgent.getTaxAgentId().equals(taxAgentId)) { + isError = true; + isBeforeError = true; + // 1.2 如果等于当前已生效 + } else if (effectiveTime.equals(currentEffectiveTime)) { + if (effectiveBeforeTaxAgent != null && effectiveBeforeTaxAgent.getTaxAgentId().equals(taxAgentId)) { // salaryBatchService.createExcelComment(excelComments, SalaryI18nUtil.getI18nLabel(100432, "调整前后不可相同"), errorCount + 1, errorCount + 1, j, j); -// isError = true; -// } -// if (ineffectiveTaxAgent != null && ineffectiveTaxAgent.getTaxAgentId().equals(taxAgentId)) { + isError = true; + } + if (ineffectiveTaxAgent != null && ineffectiveTaxAgent.getTaxAgentId().equals(taxAgentId)) { // salaryBatchService.createExcelComment(excelComments, SalaryI18nUtil.getI18nLabel(100434, "与未生效的调整后不可相同"), errorCount + 1, errorCount + 1, j, j); -// isError = true; -// } -// // 1.3 如果>已经生效且<=今天 -// } else if (effectiveTime.after(currentEffectiveTime) && !effectiveTime.after(importHandleParam.getToday())) { -// if (effectiveTaxAgent.getTaxAgentId().equals(taxAgentId)) { + isError = true; + } + // 1.3 如果>已经生效且<=今天 + } else if (effectiveTime.after(currentEffectiveTime) && !effectiveTime.after(importHandleParam.getToday())) { + if (effectiveTaxAgent.getTaxAgentId().equals(taxAgentId)) { // salaryBatchService.createExcelComment(excelComments, SalaryI18nUtil.getI18nLabel(100432, "调整前后不可相同"), errorCount + 1, errorCount + 1, j, j); -// isError = true; -// } -// if (ineffectiveTaxAgent != null && ineffectiveTaxAgent.getTaxAgentId().equals(taxAgentId)) { + isError = true; + } + if (ineffectiveTaxAgent != null && ineffectiveTaxAgent.getTaxAgentId().equals(taxAgentId)) { // salaryBatchService.createExcelComment(excelComments, SalaryI18nUtil.getI18nLabel(100434, "与未生效的调整后不可相同"), errorCount + 1, errorCount + 1, j, j); -// isError = true; -// } -// // 1.4 如果>今天 -// } else if (effectiveTime.after(importHandleParam.getToday()) && effectiveTaxAgent.getTaxAgentId().equals(taxAgentId)) { + isError = true; + } + // 1.4 如果>今天 + } else if (effectiveTime.after(importHandleParam.getToday()) && effectiveTaxAgent.getTaxAgentId().equals(taxAgentId)) { // salaryBatchService.createExcelComment(excelComments, SalaryI18nUtil.getI18nLabel(100432, "调整前后不可相同"), errorCount + 1, errorCount + 1, j, j); -// isError = true; -// } -// } else if (ineffectiveTaxAgent != null && ineffectiveTaxAgent.getTaxAgentId().equals(taxAgentId)) { + isError = true; + } + } else if (ineffectiveTaxAgent != null && ineffectiveTaxAgent.getTaxAgentId().equals(taxAgentId)) { // salaryBatchService.createExcelComment(excelComments, SalaryI18nUtil.getI18nLabel(100434, "与未生效的调整后不可相同"), errorCount + 1, errorCount + 1, j, j); -// isError = true; -// } -// // 2.数据处理,有的就先删后增 -// if (effectiveTaxAgent != null && effectiveTime.equals(effectiveTaxAgent.getEffectiveTime())) { -// importHandleParam.getSalaryArchiveTaxAgentDelTaxAgentIds().add(effectiveTaxAgent.getId()); -// } -// if (ineffectiveTaxAgent != null && effectiveTime.after(importHandleParam.getToday())) { -// importHandleParam.getSalaryArchiveTaxAgentDelTaxAgentIds().add(ineffectiveTaxAgent.getId()); -// } -// } -// if (!isBeforeError) { -// importHandleParam.getSalaryArchiveTaxAgentSaves().add(SalaryArchiveTaxAgentPO.builder() -//// .id(IdGenerator.generate()) -// .salaryArchiveId(finalSalaryArchive.getId()) -// .employeeId(finalSalaryArchive.getEmployeeId()) -// .taxAgentId(taxAgentId) -// .effectiveTime(effectiveTime) -// .adjustReason(StringUtils.isEmpty(taxAgentAdjustReason) ? SalaryArchiveTaxAgentAdjustReasonEnum.INIT.getValue() : taxAgentAdjustReason) -// .operator((long) user.getUID()) -// .operateTime(importHandleParam.getNowTime()) -// .createTime(importHandleParam.getNowTime()) -// .updateTime(importHandleParam.getNowTime()) -// .creator((long) user.getUID()) -// .tenantKey(SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY) -// .build()); -// } -// } -// return isError; -// } -// -// /** -// * 薪资项目处理 -// * -// * @param isError -// * @param excelComments -// * @param errorCount -// * @param j -// * @param effectiveTime -// * @param finalSalaryArchive -// * @param salaryItemAdjustReason -// * @param importHandleParam -// * @param cellVal -// * @return -// */ -// private boolean handleSalaryItem(boolean isError, boolean isInit, int effectiveTimeIndex, -// List excelComments, int errorCount, int j, -// Date effectiveTime, SalaryArchivePO finalSalaryArchive, String salaryItemAdjustReason, SalaryArchiveImportHandleParam importHandleParam, -// String key, String cellVal, Map map) { -// Optional optionalSalaryItem = importHandleParam.getSalaryItems().stream().filter(e -> e.getName().equals(key)).findFirst(); -// if (optionalSalaryItem.isPresent()) { -// Long salaryItemId = optionalSalaryItem.get().getId(); -// boolean isBeforeError = false; -// if (!isInit) { -// // 已生效 -// List effectiveList = importHandleParam.getEffectiveItemList().stream().filter(i -> finalSalaryArchive.getId().equals(i.getSalaryArchiveId()) && i.getSalaryItemId().equals(salaryItemId)).collect(Collectors.toList()); -// // 当前已生效 -// SalaryArchiveItemPO effectiveSalaryItem = CollectionUtils.isNotEmpty(effectiveList) && effectiveList.size() > 0 ? effectiveList.get(0) : null; -// // 当前已生效的前一次调整 -// SalaryArchiveItemPO effectiveBeforeSalaryItem = CollectionUtils.isNotEmpty(effectiveList) && effectiveList.size() > 1 ? effectiveList.get(1) : null; -// // 未生效 -// Optional optionalIneffective = importHandleParam.getIneffectiveItemList().stream().filter(i -> finalSalaryArchive.getId().equals(i.getSalaryArchiveId()) && i.getSalaryItemId().equals(salaryItemId)).findFirst(); -// SalaryArchiveItemPO ineffectiveSalaryItem = optionalIneffective.orElse(null); -// -// // 1.检验是否可以调整 -// if (effectiveSalaryItem != null) { -// // 当前已经生效的时间 -// Date currentEffectiveTime = effectiveSalaryItem.getEffectiveTime(); -// // 1.1 如果早于<当前已生效 -// if (effectiveTime.before(currentEffectiveTime)) { -// salaryBatchService.createExcelComment(excelComments, SalaryI18nUtil.getI18nLabel(100429, "生效日期不可早于当前已生效的调整日期"), errorCount + 1, errorCount + 1, effectiveTimeIndex, effectiveTimeIndex); -// isError = true; -// isBeforeError = true; -// // 1.2 如果等于当前已生效 -// } else if (effectiveTime.equals(currentEffectiveTime)) { -// if (effectiveBeforeSalaryItem != null && effectiveBeforeSalaryItem.getItemValue().equals(cellVal)) { -// salaryBatchService.createExcelComment(excelComments, SalaryI18nUtil.getI18nLabel(100432, "调整前后不可相同"), errorCount + 1, errorCount + 1, j, j); -// isError = true; -// } -// if (ineffectiveSalaryItem != null && ineffectiveSalaryItem.getItemValue().equals(cellVal)) { -// salaryBatchService.createExcelComment(excelComments, SalaryI18nUtil.getI18nLabel(100434, "与未生效的调整后不可相同"), errorCount + 1, errorCount + 1, j, j); -// isError = true; -// } -// // 1.3 如果>已经生效且<=今天 -// } else if (effectiveTime.isAfter(currentEffectiveTime) && !effectiveTime.isAfter(importHandleParam.getToday())) { -// if (effectiveSalaryItem.getItemValue().equals(cellVal)) { -// salaryBatchService.createExcelComment(excelComments, SalaryI18nUtil.getI18nLabel(100432, "调整前后不可相同"), errorCount + 1, errorCount + 1, j, j); -// isError = true; -// } -// if (ineffectiveSalaryItem != null && ineffectiveSalaryItem.getItemValue().equals(cellVal)) { -// salaryBatchService.createExcelComment(excelComments, SalaryI18nUtil.getI18nLabel(100434, "与未生效的调整后不可相同"), errorCount + 1, errorCount + 1, j, j); -// isError = true; -// } -// // 1.4 如果>今天 -// } else if (effectiveTime.isAfter(importHandleParam.getToday()) && effectiveSalaryItem.getItemValue().equals(cellVal)) { -// salaryBatchService.createExcelComment(excelComments, SalaryI18nUtil.getI18nLabel(100432, "调整前后不可相同"), errorCount + 1, errorCount + 1, j, j); -// isError = true; -// } -// } else if (ineffectiveSalaryItem != null && ineffectiveSalaryItem.getItemValue().equals(cellVal)) { -// salaryBatchService.createExcelComment(excelComments, SalaryI18nUtil.getI18nLabel(100434, "与未生效的调整后不可相同"), errorCount + 1, errorCount + 1, j, j); -// isError = true; -// } -// // 2.数据处理 -// if (effectiveSalaryItem != null && effectiveTime.isEqual(effectiveSalaryItem.getEffectiveTime())) { -// importHandleParam.getSalaryArchiveItemDelSalaryItemIds().add(effectiveSalaryItem.getId()); -// } -// if (ineffectiveSalaryItem != null && effectiveTime.isAfter(importHandleParam.getToday())) { -// importHandleParam.getSalaryArchiveItemDelSalaryItemIds().add(ineffectiveSalaryItem.getId()); -// } -// } -// if (!isBeforeError) { -// importHandleParam.getSalaryArchiveItemSaves().add(SalaryArchiveItemPO.builder() + isError = true; + } + // 2.数据处理,有的就先删后增 + if (effectiveTaxAgent != null && effectiveTime.equals(effectiveTaxAgent.getEffectiveTime())) { + importHandleParam.getSalaryArchiveTaxAgentDelTaxAgentIds().add(effectiveTaxAgent.getId()); + } + if (ineffectiveTaxAgent != null && effectiveTime.after(importHandleParam.getToday())) { + importHandleParam.getSalaryArchiveTaxAgentDelTaxAgentIds().add(ineffectiveTaxAgent.getId()); + } + } + if (!isBeforeError) { + importHandleParam.getSalaryArchiveTaxAgentSaves().add(SalaryArchiveTaxAgentPO.builder() // .id(IdGenerator.generate()) -// .salaryArchiveId(finalSalaryArchive.getId()) -// .employeeId(finalSalaryArchive.getEmployeeId()) -// .effectiveTime(effectiveTime) -// .adjustReason(StringUtils.isEmpty(salaryItemAdjustReason) ? SalaryArchiveItemAdjustReasonEnum.INIT.getValue() : salaryItemAdjustReason) -// .salaryItemId(salaryItemId) -// .itemValue(cellVal) -// .description("") -// .operator(currentEmployeeId) -// .operateTime(importHandleParam.getNowTime()) -// .createTime(importHandleParam.getNowTime()) -// .updateTime(importHandleParam.getNowTime()) -// .creator(currentEmployeeId) -// .tenantKey(tenantKey) -// .build()); -// } -// // 用于初始化导入,同一个人的多行记录之间的薪资项目是否调整 -// map.put("salaryItemVal", Optional.ofNullable(map.get("salaryItemVal")).orElse("").toString() + salaryItemId + cellVal); -// } -// return isError; -// } -// -// -// /** -// * 字符串转日期 -// * 兼容/和- -// * -// * @param effectiveTime -// * @return -// */ -// private Date dateStrToLocalDate(String effectiveTime) { -// Date localDate = null; -// try { -// if (effectiveTime.contains("/")) { -// SimpleDateFormat format = new SimpleDateFormat("yyyy/MM/dd"); -// localDate = format.parse(effectiveTime); -// } else if (effectiveTime.contains("-")) { -// SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd"); -// localDate = format.parse(effectiveTime); -// } -// } catch (Exception e) { -// localDate = null; -// } -// -// return localDate; -// } -// -// private List getEffectiveItemList(Collection salaryItemIds) { -// // 没有薪资项目时,给个不存在的,否则加载所有不合理 -// salaryItemIds = CollectionUtils.isEmpty(salaryItemIds) ? Collections.singletonList(0L) : salaryItemIds; -// return new LambdaQueryChainWrapper<>(salaryArchiveItemMapper) -// .eq(SalaryArchiveItemPO::getDeleteType, 0) -// .eq(SalaryArchiveItemPO::getTenantKey, tenantKey) -// .le(SalaryArchiveItemPO::getEffectiveTime, LocalDate.now()) -// .in(SalaryArchiveItemPO::getSalaryItemId, salaryItemIds) -// .orderByDesc(SalaryArchiveItemPO::getEffectiveTime) -// .list(); -// } -// -// private List getIneffectiveItemList(Collection salaryItemIds) { -// // 没有薪资项目时,给个不存在的,否则加载所有不合理 -// salaryItemIds = CollectionUtils.isEmpty(salaryItemIds) ? Collections.singletonList(0L) : salaryItemIds; -// return new LambdaQueryChainWrapper<>(salaryArchiveItemMapper) -// .eq(SalaryArchiveItemPO::getDeleteType, 0) -// .eq(SalaryArchiveItemPO::getTenantKey, tenantKey) -// .in(SalaryArchiveItemPO::getSalaryItemId, salaryItemIds) -// .gt(SalaryArchiveItemPO::getEffectiveTime, LocalDate.now()) -// .list(); -// } -// -// private List getEffectiveTaxAgentList() { -// return new LambdaQueryChainWrapper<>(salaryArchiveTaxAgentMapper) -// .eq(SalaryArchiveTaxAgentPO::getDeleteType, 0) -// .eq(SalaryArchiveTaxAgentPO::getTenantKey, tenantKey) -// .le(SalaryArchiveTaxAgentPO::getEffectiveTime, LocalDate.now()) -// .orderByDesc(SalaryArchiveTaxAgentPO::getEffectiveTime) -// .list(); -// } -// -// private List getIneffectiveTaxAgentList() { -// return new LambdaQueryChainWrapper<>(salaryArchiveTaxAgentMapper) -// .eq(SalaryArchiveTaxAgentPO::getDeleteType, 0) -// .eq(SalaryArchiveTaxAgentPO::getTenantKey, tenantKey) -// .gt(SalaryArchiveTaxAgentPO::getEffectiveTime, LocalDate.now()) -// .list(); -// } -// -// /** -// * 检查参数 -// * -// * @param message -// * @param params -// * @return -// */ -// private boolean checkParams(BatchDocumentMessage message, Map params) { -// boolean isValid = true; -// String errorMsg = ""; -// if (params == null) { -// errorMsg = SalaryI18nUtil.getI18nLabel(message.getTenantKey(), message.getUserId(), 100582, "参数必传"); -// } else { -// if (!params.containsKey("importType") -// || params.get("importType") == null) { -// errorMsg = SalaryI18nUtil.getI18nLabel(message.getTenantKey(), message.getUserId(), 100592, "导入类型必传"); -// } else { -// Optional optional = Arrays.stream(SalaryArchiveImportTypeEnum.values()).filter(e -> e.getValue().equals(params.get("importType").toString())).findFirst(); -// if (!optional.isPresent()) { -// errorMsg = SalaryI18nUtil.getI18nLabel(message.getTenantKey(), message.getUserId(), 100593, "导入类型不正确"); -// } else { -// message.setDataType(message.getDataType() + "-" + SalaryI18nUtil.getI18nLabel(message.getTenantKey(), message.getUserId(), optional.get().getLabelId(), optional.get().getDefaultLabel())); -// } -// } -// } -// // 有错误信息发送 -// if (org.apache.commons.lang3.StringUtils.isNotEmpty(errorMsg)) { -// // 发送导入回调信息 -// salaryBatchService.sendImportCallBackInfo(message, errorMsg); -// isValid = false; -// } -// return isValid; -// } -// -// /** -// * 检查列头 -// * -// * @param importType -// * @param headers -// * @return -// */ -// private boolean checkHeaders(String importType, List headers) { -// boolean isValid = true; -// boolean isInit = importType.equals(SalaryArchiveImportTypeEnum.INIT.getValue()); -// boolean isTaxAgentAdjust = importType.equals(SalaryArchiveImportTypeEnum.TAXAGENTADJUST.getValue()); -// boolean isSalaryItemAdjust = importType.equals(SalaryArchiveImportTypeEnum.SALARYITEMADJUST.getValue()); -// -// -// String userNameI18n = SalaryI18nUtil.getI18nLabel(85429, "姓名"); -// String taxAgentI18n = SalaryI18nUtil.getI18nLabel(86184, "个税扣缴义务人"); -// String effectiveTimeI18n = SalaryI18nUtil.getI18nLabel(85904, "生效日期"); -// String adjustReasonI18n = SalaryI18nUtil.getI18nLabel(85431, "调整原因"); -// -// List mustHeaders = Lists.newArrayList(); -// if (isInit) { -// mustHeaders.add(userNameI18n); -// mustHeaders.add(taxAgentI18n); -// mustHeaders.add(effectiveTimeI18n); -// } else if (isTaxAgentAdjust) { -// mustHeaders.add(userNameI18n); -// mustHeaders.add(taxAgentI18n); -// mustHeaders.add(effectiveTimeI18n); -// mustHeaders.add(adjustReasonI18n); -// } else if (isSalaryItemAdjust) { -// mustHeaders.add(userNameI18n); -// mustHeaders.add(effectiveTimeI18n); -// mustHeaders.add(adjustReasonI18n); -// } -// // 缺少的必须列 -// List lackHeaders = mustHeaders.stream().filter(item -> !headers.contains(item)).collect(Collectors.toList()); -// -// String errorMsg = ""; -// String checkHeaderI18n = SalaryI18nUtil.getI18nLabel(101850, "缺少如下列,请检查:"); -// if (CollectionUtils.isNotEmpty(lackHeaders)) { -// errorMsg = checkHeaderI18n + Joiner.on(",").join((Iterable) lackHeaders); -// } -// -// // 有错误信息发送 -// if (StringUtils.isNotEmpty(errorMsg)) { -// throw new SalaryRunTimeException(errorMsg); -// } -// return isValid; -// } -// -// /** -// * 数据落库处理 -// * -// * @param importHandleParam -// */ -// private void handleImportData(boolean isInit, SalaryArchiveImportHandleParam importHandleParam) { -// -// List salaryArchiveSaves = importHandleParam.getSalaryArchiveSaves(); -// List salaryArchiveTaxAgentSaves = importHandleParam.getSalaryArchiveTaxAgentSaves(); -// List salaryArchiveItemSaves = importHandleParam.getSalaryArchiveItemSaves(); -// List salaryArchiveTaxAgentDelTaxAgentIds = importHandleParam.getSalaryArchiveTaxAgentDelTaxAgentIds(); -// List salaryArchiveItemDelSalaryItemIds = importHandleParam.getSalaryArchiveItemDelSalaryItemIds(); -// // 初始化导入 -// if (isInit) { -// List salaryArchiveTaxAgentIds = importHandleParam.getSalaryArchiveTaxAgentSaves().stream().map(SalaryArchiveTaxAgentPO::getSalaryArchiveId).distinct().collect(Collectors.toList()); -// List salaryArchiveItemIds = importHandleParam.getSalaryArchiveItemSaves().stream().map(SalaryArchiveItemPO::getSalaryArchiveId).distinct().collect(Collectors.toList()); -// List salaryArchiveIds = salaryArchiveTaxAgentIds.stream().filter(item -> salaryArchiveItemIds.contains(item)).collect(Collectors.toList()); -// if (CollectionUtils.isNotEmpty(salaryArchiveIds)) { -// List> partitionSalaryArchiveIds = Lists.partition(salaryArchiveIds, 1000); -// for (List partitions : partitionSalaryArchiveIds) { -// salaryArchiveTaxAgentMapper.deleteBySalaryArchiveId(partitions); -// new LambdaUpdateChainWrapper<>(salaryArchiveItemMapper) -// .eq(SalaryArchiveItemPO::getDeleteType, 0) -// .eq(SalaryArchiveItemPO::getTenantKey, tenantKey) -// .in(SalaryArchiveItemPO::getSalaryArchiveId, p) -// .set(SalaryArchiveItemPO::getDeleteType, 1) -// .update(); -// } -// } -// } else { -// if (CollectionUtils.isNotEmpty(salaryArchiveTaxAgentDelTaxAgentIds)) { -// salaryArchiveTaxAgentMapper.deleteBatchIds(salaryArchiveTaxAgentDelTaxAgentIds); -// } -// if (CollectionUtils.isNotEmpty(salaryArchiveItemDelSalaryItemIds)) { -// salaryArchiveItemMapper.deleteBatchIds(salaryArchiveItemDelSalaryItemIds); -// } -// } -// -// // 新增薪资档案 -// if (CollectionUtils.isNotEmpty(salaryArchiveSaves)) { -// // 薪资档案 -// mapper.batchInsert(salaryArchiveSaves); -// } -// // 薪资档案-个税扣缴义务人 -// if (CollectionUtils.isNotEmpty(salaryArchiveTaxAgentSaves)) { -// salaryArchiveTaxAgentMapper.batchInsert(salaryArchiveTaxAgentSaves); -// } -// // 薪资档案-薪资项目 -// if (CollectionUtils.isNotEmpty(salaryArchiveItemSaves)) { -// salaryArchiveItemMapper.batchInsert(salaryArchiveItemSaves); -// } -// } -//} + .salaryArchiveId(finalSalaryArchive.getId()) + .employeeId(finalSalaryArchive.getEmployeeId()) + .taxAgentId(taxAgentId) + .effectiveTime(effectiveTime) + .adjustReason(StringUtils.isEmpty(taxAgentAdjustReason) ? SalaryArchiveTaxAgentAdjustReasonEnum.INIT.getValue() : taxAgentAdjustReason) + .operator((long) user.getUID()) + .operateTime(importHandleParam.getNowTime()) + .createTime(importHandleParam.getNowTime()) + .updateTime(importHandleParam.getNowTime()) + .creator((long) user.getUID()) + .tenantKey(SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY) + .build()); + } + } + return isError; + } + + /** + * 薪资项目处理 + * + * @param isError + * @param excelComments + * @param errorCount + * @param j + * @param effectiveTime + * @param finalSalaryArchive + * @param salaryItemAdjustReason + * @param importHandleParam + * @param cellVal + * @return + */ + private boolean handleSalaryItem(boolean isError, boolean isInit, int effectiveTimeIndex, + List> excelComments, int errorCount, int j, + Date effectiveTime, SalaryArchivePO finalSalaryArchive, String salaryItemAdjustReason, SalaryArchiveImportHandleParam importHandleParam, + String key, String cellVal, Map map) { + Optional optionalSalaryItem = importHandleParam.getSalaryItems().stream().filter(e -> e.getName().equals(key)).findFirst(); + if (optionalSalaryItem.isPresent()) { + Long salaryItemId = optionalSalaryItem.get().getId(); + boolean isBeforeError = false; + if (!isInit) { + // 已生效 + List effectiveList = importHandleParam.getEffectiveItemList().stream().filter(i -> finalSalaryArchive.getId().equals(i.getSalaryArchiveId()) && i.getSalaryItemId().equals(salaryItemId)).collect(Collectors.toList()); + // 当前已生效 + SalaryArchiveItemPO effectiveSalaryItem = CollectionUtils.isNotEmpty(effectiveList) && effectiveList.size() > 0 ? effectiveList.get(0) : null; + // 当前已生效的前一次调整 + SalaryArchiveItemPO effectiveBeforeSalaryItem = CollectionUtils.isNotEmpty(effectiveList) && effectiveList.size() > 1 ? effectiveList.get(1) : null; + // 未生效 + Optional optionalIneffective = importHandleParam.getIneffectiveItemList().stream().filter(i -> finalSalaryArchive.getId().equals(i.getSalaryArchiveId()) && i.getSalaryItemId().equals(salaryItemId)).findFirst(); + SalaryArchiveItemPO ineffectiveSalaryItem = optionalIneffective.orElse(null); + + // 1.检验是否可以调整 + if (effectiveSalaryItem != null) { + // 当前已经生效的时间 + Date currentEffectiveTime = effectiveSalaryItem.getEffectiveTime(); + // 1.1 如果早于<当前已生效 + if (effectiveTime.before(currentEffectiveTime)) { +// salaryBatchService.createExcelComment(excelComments, SalaryI18nUtil.getI18nLabel(100429, "生效日期不可早于当前已生效的调整日期"), errorCount + 1, errorCount + 1, effectiveTimeIndex, effectiveTimeIndex); + isError = true; + isBeforeError = true; + // 1.2 如果等于当前已生效 + } else if (effectiveTime.equals(currentEffectiveTime)) { + if (effectiveBeforeSalaryItem != null && effectiveBeforeSalaryItem.getItemValue().equals(cellVal)) { +// salaryBatchService.createExcelComment(excelComments, SalaryI18nUtil.getI18nLabel(100432, "调整前后不可相同"), errorCount + 1, errorCount + 1, j, j); + isError = true; + } + if (ineffectiveSalaryItem != null && ineffectiveSalaryItem.getItemValue().equals(cellVal)) { +// salaryBatchService.createExcelComment(excelComments, SalaryI18nUtil.getI18nLabel(100434, "与未生效的调整后不可相同"), errorCount + 1, errorCount + 1, j, j); + isError = true; + } + // 1.3 如果>已经生效且<=今天 + } else if (effectiveTime.after(currentEffectiveTime) && !effectiveTime.after(importHandleParam.getToday())) { + if (effectiveSalaryItem.getItemValue().equals(cellVal)) { +// salaryBatchService.createExcelComment(excelComments, SalaryI18nUtil.getI18nLabel(100432, "调整前后不可相同"), errorCount + 1, errorCount + 1, j, j); + isError = true; + } + if (ineffectiveSalaryItem != null && ineffectiveSalaryItem.getItemValue().equals(cellVal)) { +// salaryBatchService.createExcelComment(excelComments, SalaryI18nUtil.getI18nLabel(100434, "与未生效的调整后不可相同"), errorCount + 1, errorCount + 1, j, j); + isError = true; + } + // 1.4 如果>今天 + } else if (effectiveTime.after(importHandleParam.getToday()) && effectiveSalaryItem.getItemValue().equals(cellVal)) { +// salaryBatchService.createExcelComment(excelComments, SalaryI18nUtil.getI18nLabel(100432, "调整前后不可相同"), errorCount + 1, errorCount + 1, j, j); + isError = true; + } + } else if (ineffectiveSalaryItem != null && ineffectiveSalaryItem.getItemValue().equals(cellVal)) { +// salaryBatchService.createExcelComment(excelComments, SalaryI18nUtil.getI18nLabel(100434, "与未生效的调整后不可相同"), errorCount + 1, errorCount + 1, j, j); + isError = true; + } + // 2.数据处理 + if (effectiveSalaryItem != null && effectiveTime.equals(effectiveSalaryItem.getEffectiveTime())) { + importHandleParam.getSalaryArchiveItemDelSalaryItemIds().add(effectiveSalaryItem.getId()); + } + if (ineffectiveSalaryItem != null && effectiveTime.after(importHandleParam.getToday())) { + importHandleParam.getSalaryArchiveItemDelSalaryItemIds().add(ineffectiveSalaryItem.getId()); + } + } + if (!isBeforeError) { + importHandleParam.getSalaryArchiveItemSaves().add(SalaryArchiveItemPO.builder() +// .id(IdGenerator.generate()) + .salaryArchiveId(finalSalaryArchive.getId()) + .employeeId(finalSalaryArchive.getEmployeeId()) + .effectiveTime(effectiveTime) + .adjustReason(StringUtils.isEmpty(salaryItemAdjustReason) ? SalaryArchiveItemAdjustReasonEnum.INIT.getValue() : salaryItemAdjustReason) + .salaryItemId(salaryItemId) + .itemValue(cellVal) + .description("") + .operator((long) user.getUID()) + .operateTime(importHandleParam.getNowTime()) + .createTime(importHandleParam.getNowTime()) + .updateTime(importHandleParam.getNowTime()) + .creator((long) user.getUID()) + .tenantKey(SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY) + .build()); + } + // 用于初始化导入,同一个人的多行记录之间的薪资项目是否调整 + map.put("salaryItemVal", Optional.ofNullable(map.get("salaryItemVal")).orElse("").toString() + salaryItemId + cellVal); + } + return isError; + } + + + /** + * 字符串转日期 + * 兼容/和- + * + * @param effectiveTime + * @return + */ + private Date dateStrToLocalDate(String effectiveTime) { + Date localDate = null; + try { + if (effectiveTime.contains("/")) { + SimpleDateFormat format = new SimpleDateFormat("yyyy/MM/dd"); + localDate = format.parse(effectiveTime); + } else if (effectiveTime.contains("-")) { + SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd"); + localDate = format.parse(effectiveTime); + } + } catch (Exception e) { + localDate = null; + } + + return localDate; + } + + private List getEffectiveItemList(Collection salaryItemIds) { + // 没有薪资项目时,给个不存在的,否则加载所有不合理 + salaryItemIds = CollectionUtils.isEmpty(salaryItemIds) ? Collections.singletonList(0L) : salaryItemIds; + return salaryArchiveItemMapper.getEffectiveSalaryItems(SalaryArchiveItemQueryParam.builder().effectiveTime(new Date()).salaryItemIds(salaryItemIds).build()); + } + + private List getIneffectiveItemList(Collection salaryItemIds) { + // 没有薪资项目时,给个不存在的,否则加载所有不合理 + salaryItemIds = CollectionUtils.isEmpty(salaryItemIds) ? Collections.singletonList(0L) : salaryItemIds; + return salaryArchiveItemMapper.getIneffectiveSalaryItems(SalaryArchiveItemQueryParam.builder().salaryItemIds(salaryItemIds).effectiveTime(new Date()).build()); + } + + private List getEffectiveTaxAgentList() { + return salaryArchiveTaxAgentMapper.getEffectiveTaxAgentList(SalaryArchiveTaxAgentQueryParam.builder().effectiveTime(new Date()).build()); + } + + private List getIneffectiveTaxAgentList() { + return salaryArchiveTaxAgentMapper.getIneffectiveTaxAgentList(SalaryArchiveTaxAgentQueryParam.builder().effectiveTime(new Date()).build()); + } + + + /** + * 检查列头 + * + * @param importType + * @param headers + * @return + */ + private boolean checkHeaders(String importType, List headers) { + boolean isValid = true; + boolean isInit = importType.equals(SalaryArchiveImportTypeEnum.INIT.getValue()); + boolean isTaxAgentAdjust = importType.equals(SalaryArchiveImportTypeEnum.TAXAGENTADJUST.getValue()); + boolean isSalaryItemAdjust = importType.equals(SalaryArchiveImportTypeEnum.SALARYITEMADJUST.getValue()); + + + String userNameI18n = SalaryI18nUtil.getI18nLabel(85429, "姓名"); + String taxAgentI18n = SalaryI18nUtil.getI18nLabel(86184, "个税扣缴义务人"); + String effectiveTimeI18n = SalaryI18nUtil.getI18nLabel(85904, "生效日期"); + String adjustReasonI18n = SalaryI18nUtil.getI18nLabel(85431, "调整原因"); + + List mustHeaders = Lists.newArrayList(); + if (isInit) { + mustHeaders.add(userNameI18n); + mustHeaders.add(taxAgentI18n); + mustHeaders.add(effectiveTimeI18n); + } else if (isTaxAgentAdjust) { + mustHeaders.add(userNameI18n); + mustHeaders.add(taxAgentI18n); + mustHeaders.add(effectiveTimeI18n); + mustHeaders.add(adjustReasonI18n); + } else if (isSalaryItemAdjust) { + mustHeaders.add(userNameI18n); + mustHeaders.add(effectiveTimeI18n); + mustHeaders.add(adjustReasonI18n); + } + // 缺少的必须列 + List lackHeaders = mustHeaders.stream().filter(item -> !headers.contains(item)).collect(Collectors.toList()); + + String errorMsg = ""; + String checkHeaderI18n = SalaryI18nUtil.getI18nLabel(101850, "缺少如下列,请检查:"); + if (CollectionUtils.isNotEmpty(lackHeaders)) { + errorMsg = checkHeaderI18n + Joiner.on(",").join((Iterable) lackHeaders); + } + + // 有错误信息发送 + if (StringUtils.isNotEmpty(errorMsg)) { + throw new SalaryRunTimeException(errorMsg); + } + return isValid; + } + + /** + * 数据落库处理 + * + * @param importHandleParam + */ + private void handleImportData(boolean isInit, SalaryArchiveImportHandleParam importHandleParam) { + + List salaryArchiveSaves = importHandleParam.getSalaryArchiveSaves(); + List salaryArchiveTaxAgentSaves = importHandleParam.getSalaryArchiveTaxAgentSaves(); + List salaryArchiveItemSaves = importHandleParam.getSalaryArchiveItemSaves(); + List salaryArchiveTaxAgentDelTaxAgentIds = importHandleParam.getSalaryArchiveTaxAgentDelTaxAgentIds(); + List salaryArchiveItemDelSalaryItemIds = importHandleParam.getSalaryArchiveItemDelSalaryItemIds(); + // 初始化导入 + if (isInit) { + List salaryArchiveTaxAgentIds = importHandleParam.getSalaryArchiveTaxAgentSaves().stream().map(SalaryArchiveTaxAgentPO::getSalaryArchiveId).distinct().collect(Collectors.toList()); + List salaryArchiveItemIds = importHandleParam.getSalaryArchiveItemSaves().stream().map(SalaryArchiveItemPO::getSalaryArchiveId).distinct().collect(Collectors.toList()); + List salaryArchiveIds = salaryArchiveTaxAgentIds.stream().filter(salaryArchiveItemIds::contains).collect(Collectors.toList()); + if (CollectionUtils.isNotEmpty(salaryArchiveIds)) { + List> partitionSalaryArchiveIds = Lists.partition(salaryArchiveIds, 1000); + for (List partitions : partitionSalaryArchiveIds) { + salaryArchiveTaxAgentMapper.deleteBySalaryArchiveId(partitions); + salaryArchiveItemMapper.deleteBySalaryArchiveId(partitions); + } + } + } else { + if (CollectionUtils.isNotEmpty(salaryArchiveTaxAgentDelTaxAgentIds)) { + salaryArchiveTaxAgentMapper.deleteBatchIds(salaryArchiveTaxAgentDelTaxAgentIds); + } + if (CollectionUtils.isNotEmpty(salaryArchiveItemDelSalaryItemIds)) { + salaryArchiveItemMapper.deleteBatchIds(salaryArchiveItemDelSalaryItemIds); + } + } + + // 新增薪资档案 + if (CollectionUtils.isNotEmpty(salaryArchiveSaves)) { + // 薪资档案 + SalaryArchiveMapper.batchInsert(salaryArchiveSaves); + } + // 薪资档案-个税扣缴义务人 + if (CollectionUtils.isNotEmpty(salaryArchiveTaxAgentSaves)) { + salaryArchiveTaxAgentMapper.batchInsert(salaryArchiveTaxAgentSaves); + } + // 薪资档案-薪资项目 + if (CollectionUtils.isNotEmpty(salaryArchiveItemSaves)) { + salaryArchiveItemMapper.batchInsert(salaryArchiveItemSaves); + } + } +} diff --git a/src/com/engine/salary/util/excel/ExcelParseHelper.java b/src/com/engine/salary/util/excel/ExcelParseHelper.java index 0ae024e98..f4d8db4d7 100644 --- a/src/com/engine/salary/util/excel/ExcelParseHelper.java +++ b/src/com/engine/salary/util/excel/ExcelParseHelper.java @@ -38,8 +38,8 @@ public class ExcelParseHelper { * @param standardCellNum 模板验证,该sheet应有多少列 * @return */ - public static List parse(MultipartFile file, Class clazz, int sheetIndex, int rowIndex, int standardCellNum) { - List> result = parse(file, sheetIndex, rowIndex, standardCellNum); + public static List parse2Map(MultipartFile file, Class clazz, int sheetIndex, int rowIndex, int standardCellNum) { + List> result = parse2Map(file, sheetIndex, rowIndex, standardCellNum); List list = new ArrayList(); for (List rowDatas : result) { T t = setField(clazz, rowDatas); @@ -59,8 +59,8 @@ public class ExcelParseHelper { * @param fileName 文件名 * @return */ - public static List parse(InputStream file, Class clazz, int sheetIndex, int rowIndex, int standardCellNum, String fileName) { - List> result = parse(file, sheetIndex, rowIndex, standardCellNum, fileName); + public static List parse2Map(InputStream file, Class clazz, int sheetIndex, int rowIndex, int standardCellNum, String fileName) { + List> result = parse2Map(file, sheetIndex, rowIndex, standardCellNum, fileName); List list = new ArrayList(); for (List rowDatas : result) { T t = setField(clazz, rowDatas); @@ -77,7 +77,7 @@ public class ExcelParseHelper { * @param rowIndex 从第几行开始解析,第一行为 0,依次类推 * @return 二维数据集合 */ - private static List> parse(MultipartFile file, int sheetIndex, int rowIndex, int standardCellNum) { + private static List> parse2Map(MultipartFile file, int sheetIndex, int rowIndex, int standardCellNum) { Sheet sheet = ExcelSupport.parseFile(file, sheetIndex); int rowCount = sheet.getPhysicalNumberOfRows(); // 总行数 int cellCount = sheet.getRow(PARSE_EXCEL_ROW_VALID_CELL_INDEX).getPhysicalNumberOfCells(); // 总列数 @@ -103,7 +103,7 @@ public class ExcelParseHelper { * @param rowIndex 从第几行开始解析,第一行为 0,依次类推 * @return 二维数据集合 */ - private static List> parse(InputStream file, int sheetIndex, int rowIndex, int standardCellNum, String fileName) { + private static List> parse2Map(InputStream file, int sheetIndex, int rowIndex, int standardCellNum, String fileName) { Sheet sheet = ExcelSupport.parseFile(file, sheetIndex, fileName); int rowCount = sheet.getPhysicalNumberOfRows(); // 总行数 int cellCount = sheet.getRow(PARSE_EXCEL_ROW_VALID_CELL_INDEX).getPhysicalNumberOfCells(); // 总列数 @@ -129,7 +129,7 @@ public class ExcelParseHelper { * @param rowIndex 从哪行开始解析 * @return */ - public static List> parse(InputStream file, int sheetIndex, int rowIndex) { + public static List> parse2Map(InputStream file, int sheetIndex, int rowIndex) { Sheet sheet = ExcelSupport.parseFile(file, sheetIndex, EXCEL_TYPE_XLSX); int rowCount = sheet.getPhysicalNumberOfRows(); // 总行数 int cellCount = sheet.getRow(PARSE_EXCEL_ROW_VALID_CELL_INDEX).getPhysicalNumberOfCells(); // 总列数 @@ -150,6 +150,51 @@ public class ExcelParseHelper { + /** + * 将sheet数据转为map + * @param rowIndex 从哪行开始解析 + * @return + */ + public static List> parse2Map(Sheet sheet, int rowIndex) { + int rowCount = sheet.getPhysicalNumberOfRows(); // 总行数 + int cellCount = sheet.getRow(PARSE_EXCEL_ROW_VALID_CELL_INDEX).getPhysicalNumberOfCells(); // 总列数 + + List sheetHeader = ExcelSupport.getSheetHeader(sheet, PARSE_EXCEL_ROW_VALID_CELL_INDEX); + + 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 + * @param rowIndex 从哪行开始解析 + * @return + */ + public static List> parse2List(Sheet sheet, int rowIndex) { + int rowCount = sheet.getPhysicalNumberOfRows(); // 总行数 + int cellCount = sheet.getRow(PARSE_EXCEL_ROW_VALID_CELL_INDEX).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/web/SalaryArchiveController.java b/src/com/engine/salary/web/SalaryArchiveController.java index b11062eb9..4a27b756c 100644 --- a/src/com/engine/salary/web/SalaryArchiveController.java +++ b/src/com/engine/salary/web/SalaryArchiveController.java @@ -2,7 +2,9 @@ package com.engine.salary.web; import com.engine.common.util.ServiceUtil; import com.engine.salary.entity.salaryarchive.param.SalaryArchiveDimissionSaveParam; +import com.engine.salary.entity.salaryarchive.param.SalaryArchiveImportHandleParam; import com.engine.salary.entity.salaryarchive.param.SalaryArchiveQueryParam; +import com.engine.salary.enums.salaryarchive.SalaryArchiveImportTypeEnum; import com.engine.salary.util.ResponseResult; import com.engine.salary.wrapper.SalaryArchiveWrapper; import io.swagger.v3.oas.annotations.parameters.RequestBody; @@ -63,8 +65,6 @@ public class SalaryArchiveController { // } - - /** * 薪资档案列表 * @@ -165,9 +165,12 @@ public class SalaryArchiveController { XSSFWorkbook workbook = getSalaryArchiveWrapper(user).downloadTemplate(queryParam); - String fileName = null; + SalaryArchiveImportTypeEnum importTypeEnum = SalaryArchiveImportTypeEnum.parseByValue(queryParam.getImportType()); + + String fileName = "薪资档案导入模板-" + importTypeEnum.getDefaultLabel(); + try { - fileName = URLEncoder.encode("累计情况.xlsx", "UTF-8"); + fileName = URLEncoder.encode(fileName + ".xlsx", "UTF-8"); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } @@ -178,9 +181,7 @@ public class SalaryArchiveController { }; response.setContentType("application/octet-stream"); - return Response.ok(output) - .header("Content-disposition", "attachment;filename=" + fileName) - .header("Cache-Control", "no-cache").build(); + return Response.ok(output).header("Content-disposition", "attachment;filename=" + fileName).header("Cache-Control", "no-cache").build(); } @Nullable @@ -221,17 +222,25 @@ public class SalaryArchiveController { return param; } -// /** -// * 获取导入参数 -// * -// * @return -// */ -// @GetMapping("/getImportParams") -// @ApiOperation("获取导入参数") -// @WeaPermission -// public WeaResult getImportParams() { -// return WeaResult.success(salaryArchiveWrapper.getImportParams()); -// } + + @POST + @Path("/preview") + @Produces(MediaType.APPLICATION_JSON) + public String preview(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody SalaryArchiveImportHandleParam importParam) { + User user = HrmUserVarify.getUser(request, response); + return new ResponseResult>().run(getSalaryArchiveWrapper(user)::preview, importParam); + } + + @POST + @Path("/importSalaryArchive") + @Produces(MediaType.APPLICATION_JSON) + public String importSalaryArchive(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody SalaryArchiveImportHandleParam importParam) { + User user = HrmUserVarify.getUser(request, response); + return new ResponseResult>().run(getSalaryArchiveWrapper(user)::importSalaryArchive, importParam); + } + + + // /******** 薪资档案主表 end ***********************************************************************************************/ // // /******** 薪资项目调整 start ***********************************************************************************************/ diff --git a/src/com/engine/salary/wrapper/SalaryArchiveWrapper.java b/src/com/engine/salary/wrapper/SalaryArchiveWrapper.java index 17e348962..3d5c23b55 100644 --- a/src/com/engine/salary/wrapper/SalaryArchiveWrapper.java +++ b/src/com/engine/salary/wrapper/SalaryArchiveWrapper.java @@ -8,6 +8,7 @@ import com.engine.salary.entity.salaryarchive.dto.SalaryArchiveBaseInfoFormDTO; import com.engine.salary.entity.salaryarchive.dto.SalaryArchiveFormDTO; import com.engine.salary.entity.salaryarchive.dto.SalaryArchiveListDTO; import com.engine.salary.entity.salaryarchive.param.SalaryArchiveDimissionSaveParam; +import com.engine.salary.entity.salaryarchive.param.SalaryArchiveImportHandleParam; import com.engine.salary.entity.salaryarchive.param.SalaryArchiveQueryParam; import com.engine.salary.entity.salaryarchive.po.SalaryArchiveDimissionPO; import com.engine.salary.entity.salaryarchive.po.SalaryArchiveItemPO; @@ -21,6 +22,7 @@ import com.engine.salary.service.SalaryArchiveItemService; import com.engine.salary.service.SalaryArchiveService; import com.engine.salary.service.TaxAgentService; import com.engine.salary.service.impl.SalaryArchiveItemServiceImpl; +import com.engine.salary.service.impl.SalaryArchiveServiceImpl; import com.engine.salary.service.impl.TaxAgentServiceImpl; import com.engine.salary.util.SalaryDateUtil; import com.engine.salary.util.SalaryI18nUtil; @@ -44,8 +46,7 @@ import java.util.stream.Collectors; public class SalaryArchiveWrapper extends Service { private SalaryArchiveService getSalaryArchiveService(User user) { -// return (SalaryArchiveService) ServiceUtil.getService(SalaryArchiveServiceImpl.class, user); - return null; + return (SalaryArchiveService) ServiceUtil.getService(SalaryArchiveServiceImpl.class, user); } private SalaryArchiveItemService getSalaryArchiveItemService(User user) { @@ -229,6 +230,16 @@ public class SalaryArchiveWrapper extends Service { return getSalaryArchiveService(user).downloadTemplate(SalaryArchiveImportTypeEnum.parseByValue(queryParam.getImportType()), queryParam); } + + public Map preview(SalaryArchiveImportHandleParam param) { + return getSalaryArchiveService(user).preview(param); + } + + public void importSalaryArchive(SalaryArchiveImportHandleParam param) { + getSalaryArchiveService(user).importSalaryArchive(param); + } + + // // /** // * 获取导入参数