weaver-hrm-salary/src/com/engine/salary/service/impl/SISchemeServiceImpl.java

975 lines
55 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package com.engine.salary.service.impl;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.TypeReference;
import com.cloudstore.eccom.pc.table.WeaTableColumn;
import com.engine.common.util.ServiceUtil;
import com.engine.core.impl.Service;
import com.engine.salary.biz.EmployBiz;
import com.engine.salary.biz.SISchemeBiz;
import com.engine.salary.cmd.sischeme.*;
import com.engine.salary.entity.datacollection.DataCollectionEmployee;
import com.engine.salary.entity.siarchives.param.InsuranceArchivesListParam;
import com.engine.salary.entity.siarchives.po.*;
import com.engine.salary.entity.sicategory.po.ICategoryPO;
import com.engine.salary.entity.sischeme.dto.InsuranceSchemeListDTO;
import com.engine.salary.entity.sischeme.param.InsuranceSchemeParam;
import com.engine.salary.entity.sischeme.param.SISchemaImportParam;
import com.engine.salary.entity.sischeme.po.InsuranceSchemeDetailPO;
import com.engine.salary.entity.sischeme.po.InsuranceSchemePO;
import com.engine.salary.entity.taxagent.dto.TaxAgentListDTO;
import com.engine.salary.enums.sicategory.*;
import com.engine.salary.mapper.siarchives.FundSchemeMapper;
import com.engine.salary.mapper.siarchives.OtherSchemeMapper;
import com.engine.salary.mapper.siarchives.SocialSchemeMapper;
import com.engine.salary.mapper.sicategory.ICategoryMapper;
import com.engine.salary.mapper.sischeme.InsuranceSchemeDetailMapper;
import com.engine.salary.mapper.sischeme.InsuranceSchemeMapper;
import com.engine.salary.service.SIImportService;
import com.engine.salary.service.SISchemeService;
import com.engine.salary.service.TaxAgentV2Service;
import com.engine.salary.util.*;
import com.engine.salary.util.db.MapperProxyFactory;
import com.engine.salary.util.excel.ExcelParseHelper;
import com.engine.salary.util.excel.ExcelSupport;
import com.engine.salary.util.excel.ExcelUtil;
import com.engine.salary.util.page.PageInfo;
import com.engine.salary.util.page.SalaryPageUtil;
import com.engine.salary.util.valid.ValidUtil;
import com.google.common.collect.Maps;
import dm.jdbc.util.IdGenerator;
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 weaver.file.ImageFileManager;
import java.io.InputStream;
import java.util.*;
import java.util.function.Function;
import java.util.stream.Collectors;
import static com.engine.salary.util.excel.ExcelSupport.EXCEL_TYPE_XLSX;
/**
* @Author weaver_cl
* @Description: TODO
* @Date 2022/3/7
* @Version V1.0
**/
public class SISchemeServiceImpl extends Service implements SISchemeService {
private SocialSchemeMapper getSocialSchemeMapper() {
return MapperProxyFactory.getProxy(SocialSchemeMapper.class);
}
private FundSchemeMapper getFundSchemeMapper() {
return MapperProxyFactory.getProxy(FundSchemeMapper.class);
}
private OtherSchemeMapper getOtherSchemeMapper() {
return MapperProxyFactory.getProxy(OtherSchemeMapper.class);
}
private InsuranceSchemeMapper getInsuranceSchemeMapper() {
return MapperProxyFactory.getProxy(InsuranceSchemeMapper.class);
}
private ICategoryMapper getICategoryMapper() {
return MapperProxyFactory.getProxy(ICategoryMapper.class);
}
private SISchemeService getSiSchemeService() {
return ServiceUtil.getService(SISchemeServiceImpl.class, user);
}
private TaxAgentV2Service getTaxAgentService() {
return ServiceUtil.getService(TaxAgentV2ServiceImpl.class, user);
}
private InsuranceSchemeDetailMapper getInsuranceSchemeDetailMapper() {
return MapperProxyFactory.getProxy(InsuranceSchemeDetailMapper.class);
}
private SIImportService getSIImportService() {
return ServiceUtil.getService(SIImportServiceImpl.class, user);
}
private EmployBiz employeeBiz = new EmployBiz();
@Override
public Map<String, Object> getForm(Map<String, Object> params) {
return commandExecutor.execute(new SISchemeGetFormCmd(params,user));
}
@Override
public Map<String, Object> insertScheme(Map<String, Object> params) {
return commandExecutor.execute(new SISchemeInsertCmd(params,user));
}
@Override
public Map<String, Object> update(Map<String, Object> params) {
return commandExecutor.execute(new SISchemeUpdateCmd(params,user));
}
@Override
public Map<String, Object> delete(Map<String, Object> params) {
return commandExecutor.execute(new SISchemeDeleteCmd(params,user));
}
@Override
public Map<String, Object> copyScheme(Map<String, Object> params) {
return commandExecutor.execute(new SISchemeCopyCmd(params,user));
}
@Override
public List<InsuranceSchemeDetailPO> queryListByInsuranceIdIsPayment(Long insuranceId, Integer isPayment) {
return new SISchemeBiz().queryListByInsuranceIdIsPayment(insuranceId,isPayment);
}
@Override
public Map<String, Object> listPage(Map<String, Object> params) {
return commandExecutor.execute(new SISchemeListCmd(params,user));
}
@Override
public Map<Long, String> getSchemeIdNameMap() {
Map<Long, String> result = new HashMap<>();
List<InsuranceSchemePO> insuranceSchemePOS = MapperProxyFactory.getProxy(InsuranceSchemeMapper.class).listAll();
if (CollectionUtils.isNotEmpty(insuranceSchemePOS)) {
result = insuranceSchemePOS.stream().collect(Collectors.toMap(InsuranceSchemePO::getId, InsuranceSchemePO::getSchemeName));
}
return result;
}
@Override
public PageInfo<InsuranceSchemeListDTO> list(InsuranceSchemeParam queryParam) {
SalaryAssert.notNull(queryParam.getWelfareTypeEnum(), SalaryI18nUtil.getI18nLabel( 84026, "参数错误"));
SalaryPageUtil.start(queryParam.getCurrent(), queryParam.getPageSize());
List<InsuranceSchemePO> insuranceSchemePOS = MapperProxyFactory.getProxy(InsuranceSchemeMapper.class).listByWelfareType(queryParam.getWelfareTypeEnum().getValue());
PageInfo<InsuranceSchemePO> pageInfo = new PageInfo<>(insuranceSchemePOS, InsuranceSchemePO.class);
List<InsuranceSchemeListDTO> collect = insuranceSchemePOS.stream().map(item ->
InsuranceSchemeListDTO.builder()
.id(item.getId())
.paymentType(SalaryI18nUtil.getI18nLabel( buildPaymentTypeEnum(item.getPaymentType()).getLabelId(),
buildPaymentTypeEnum(item.getPaymentType()).getDefaultLabel()))
.schemeName(item.getSchemeName())
.paymentArea(item.getPaymentArea())
.paymentScope(buildPaymentScope(item.getId()))
.remarks(item.getRemarks())
.build()
).collect(Collectors.toList());
PageInfo<InsuranceSchemeListDTO> dtoPage = new PageInfo<>(InsuranceSchemeListDTO.class);
dtoPage.setPageNum(queryParam.getCurrent());
dtoPage.setPageSize(queryParam.getPageSize());
dtoPage.setTotal(pageInfo.getTotal());
dtoPage.setList(collect);
return dtoPage;
}
@Override
public List<InsuranceArchivesEmployeePO> listPageEmployeePOS(InsuranceArchivesListParam param) {
return getSocialSchemeMapper().queryEmployeeList(param);
}
@Override
public List<Map<String, Object>> buildTableData(List<InsuranceArchivesEmployeePO> insuranceArchivesEmployeePOS) {
List<Map<String, Object>> records = new ArrayList<>();
List<Long> employeeIds = insuranceArchivesEmployeePOS.stream().map(InsuranceArchivesEmployeePO::getEmployeeId).collect(Collectors.toList());
if (CollectionUtils.isEmpty(employeeIds)) {
return records;
}
List<InsuranceArchivesSocialSchemePO> socialList = new ArrayList<>();
List<InsuranceArchivesFundSchemePO> fundList = new ArrayList<>();
List<InsuranceArchivesOtherSchemePO> otherList = new ArrayList<>();
for(int i = 0; i < employeeIds.size(); i+=1000) {
int end = i + 1000;
if(i + 1000 >= employeeIds.size()) {
end = employeeIds.size();
}
List<Long> ids = employeeIds.subList(i, end);
socialList.addAll(getSocialSchemeMapper().getSocialByEmployeeId(ids));
fundList.addAll(getFundSchemeMapper().getFundByEmployeeId(ids));
otherList.addAll(getOtherSchemeMapper().getOtherByEmployeeId(ids));
}
Map<Long, InsuranceArchivesSocialSchemePO> socialSchemePOMap =
socialList
.stream().collect(Collectors.toMap(InsuranceArchivesSocialSchemePO::getEmployeeId, Function.identity()));
Map<Long, InsuranceArchivesFundSchemePO> fundSchemePOMap =
fundList
.stream().collect(Collectors.toMap(InsuranceArchivesFundSchemePO::getEmployeeId, Function.identity()));
Map<Long, InsuranceArchivesOtherSchemePO> otherSchemePOMap =
otherList
.stream().collect(Collectors.toMap(InsuranceArchivesOtherSchemePO::getEmployeeId, Function.identity()));
insuranceArchivesEmployeePOS.forEach(item -> {
InsuranceArchivesSocialSchemePO socialItem = socialSchemePOMap.get(item.getEmployeeId());
InsuranceArchivesFundSchemePO fundItem = fundSchemePOMap.get(item.getEmployeeId());
InsuranceArchivesOtherSchemePO otherItem = otherSchemePOMap.get(item.getEmployeeId());
Map<String, Object> map = new HashMap<>();
map.put("employeeName", item.getUserName());
map.put("employeeId", item.getEmployeeId());
map.put("departmentName", item.getDepartmentName());
map.put("departmentId", item.getDepartmentId());
map.put("jobNum", item.getJobNum());
map.put("mobile", item.getTelephone());
map.put("status", item.getUserStatusEnum() == null ? "" : item.getUserStatusEnum().getDescription());
if (socialItem != null) {
map.put("socialName", getSiSchemeService().querySchemeName(socialItem.getSocialSchemeId()));
Map<String, Object> socialJson = JSON.parseObject(socialItem.getSocialPaymentBaseString(), new TypeReference<Map<String, Object>>() {
});
if (socialJson != null) {
SalaryEntityUtil.thousandthConvert(socialJson, map);
}
map.put("socialAccount", socialItem.getSocialAccount());
map.put("socialStartTime", socialItem.getSocialStartTime());
map.put("socialEndTime", socialItem.getSocialEndTime());
}
if (fundItem != null) {
map.put("fundName", getSiSchemeService().querySchemeName(fundItem.getFundSchemeId()));
map.put("fundAccount", fundItem.getFundAccount());
Map<String, Object> fundJson = JSON.parseObject(fundItem.getFundPaymentBaseString(), new TypeReference<Map<String, Object>>() {
});
if (fundJson != null) {
SalaryEntityUtil.thousandthConvert(fundJson, map);
}
map.put("supplementFundAccount", fundItem.getSupplementFundAccount());
map.put("fundStartTime", fundItem.getFundStartTime());
map.put("fundEndTime", fundItem.getFundEndTime());
}
if (otherItem != null) {
map.put("otherName", getSiSchemeService().querySchemeName(otherItem.getOtherSchemeId()));
Map<String, Object> otherJson = JSON.parseObject(otherItem.getOtherPaymentBaseString(), new TypeReference<Map<String, Object>>() {
});
if (otherJson != null) {
SalaryEntityUtil.thousandthConvert(otherJson, map);
}
map.put("otherStartTime", otherItem.getOtherStartTime());
map.put("otherEndTime", otherItem.getOtherEndTime());
}
records.add(map);
});
return records;
}
@Override
public XSSFWorkbook export(InsuranceArchivesListParam param) {
InsuranceArchivesListParam request = InsuranceArchivesListParam.builder().build();
if (param.getHireDate() != null && param.getHireDate().length == 2) {
param.setHiredateStart(param.getHireDate()[0]);
param.setHiredateEnd(param.getHireDate()[1]);
}
if (param.getDimissionDate() != null && param.getDimissionDate().length == 2) {
param.setDimissionDateStart(param.getDimissionDate()[0]);
param.setDimissionDateEnd(param.getDimissionDate()[1]);
}
if (Objects.equals("fromQuickSearch", param.getDataSource())) {
request.setStatuses(param.getStatuses());
request.setKeyword(param.getUserName());
} else {
request = param;
}
request.setPageSize(null);
request.setStartNum(null);
List<InsuranceArchivesEmployeePO> insuranceArchivesEmployeePOS = listPageEmployeePOS(request);
if (insuranceArchivesEmployeePOS == null) {
insuranceArchivesEmployeePOS = new ArrayList<>();
}
List<Map<String, Object>> records = buildTableData(insuranceArchivesEmployeePOS);
List<WeaTableColumn> columns = buildWeaTableColumns(insuranceArchivesEmployeePOS, (long) user.getUID());
//工作簿list
//工作簿数据
List<List<String>> rows = new LinkedList<>();
List<String> collect = columns.stream().map(WeaTableColumn::getText).collect(Collectors.toList());
rows.add(collect);
for (Map<String, Object> recordData : records) {
List<String> row = new LinkedList<>();
for (WeaTableColumn column : columns) {
try {
Object o = recordData.get(column.getColumn());
row.add(o.toString());
} catch(Exception e) {
row.add("");
}
}
rows.add(row);
}
// return salaryBatchService.simpleExportExcel(ExportExcelInfo.builder()
// .bizId(exportMap.get("biz"))
// .flag(true)
// .userId(employeeId)
// .eteamsId(eteamsId)
// .tenantKey(tenantKey)
// .operator(operator)
// .module(exportMap.get("module"))
// .fileName(SalaryI18nUtil.getI18nLabel(tenantKey, employeeId, 94629, "社保福利档案") + SalaryDateUtil.getFormatLocalDateTime(LocalDateTime.now()))
// .handlerName("insuranceArchivesExportHandler")
// .dataType(SalaryI18nUtil.getI18nLabel(tenantKey, employeeId, 99915, "档案"))
// .function(exportMap.get("function")).build(), sheetList);
//获取excel
return ExcelUtil.genWorkbook(rows,"福利档案");
}
public PaymentTypeEnum buildPaymentTypeEnum(Integer value) {
return SalaryEnumUtil.enumMatchByValue(value, PaymentTypeEnum.values(), PaymentTypeEnum.class);
}
/**
* 组装社保福利方案列表页【缴纳范围】
* 1、到福利方案明细表查询该方案id下面有哪些福利
* 2、去重福利是分个人和公司的明细表中查询出来的福利id会重复
* 3、根据查询出来的福利id去福利表里面查询福利的名称
* 4、组装以“、”分割
*
* @param id 福利方案主表id
* @return result
*/
public String buildPaymentScope(Long id) {
List<String> collect = queryInsuranceSchemeDetailList(id).stream().map(InsuranceSchemeDetailPO::getInsuranceId).distinct().collect(Collectors.toList())
.stream().map(this::queryInsuranceName).collect(Collectors.toList());
return StringUtils.join(collect, "");
}
public Collection<InsuranceSchemeDetailPO> queryInsuranceSchemeDetailList(Long id) {
List<InsuranceSchemeDetailPO> insuranceSchemeDetailPOS = MapperProxyFactory.getProxy(InsuranceSchemeDetailMapper.class).queryInsuranceSchemeDetailList(id, IsPaymentEnum.YES.getValue());
return insuranceSchemeDetailPOS;
}
public String queryInsuranceName(Long id) {
ICategoryPO insuranceCategoryPO = MapperProxyFactory.getProxy(ICategoryMapper.class).getById(id);
return insuranceCategoryPO == null ? "" : Objects.isNull(insuranceCategoryPO.getInsuranceName()) ? "" : insuranceCategoryPO.getInsuranceName();
}
@Override
public String querySchemeName(Long schemeId) {
if (schemeId == null) {
return "";
}
InsuranceSchemePO insuranceSchemePO =
getInsuranceSchemeMapper().getById(schemeId);
if (insuranceSchemePO == null) {
return "";
} else {
return insuranceSchemePO.getSchemeName();
}
}
@Override
public List<WeaTableColumn> buildWeaTableColumns(List<InsuranceArchivesEmployeePO> insuranceArchivesEmployeePOS, Long employeeId) {
Map<Integer, Map<String, String>> titleMap = buildColumnTitle(insuranceArchivesEmployeePOS, employeeId);
List<WeaTableColumn> list = new ArrayList<>();
WeaTableColumn nameColumn = new WeaTableColumn("100px", SalaryI18nUtil.getI18nLabel( 85429, "姓名"), "employeeName");
nameColumn.setFixed("left");
list.add(nameColumn);
list.add(new WeaTableColumn("150px", SalaryI18nUtil.getI18nLabel(86185, "部门"), "departmentName"));
list.add(new WeaTableColumn("150px", SalaryI18nUtil.getI18nLabel( 86186, "手机号"), "mobile"));
list.add(new WeaTableColumn("150px",SalaryI18nUtil.getI18nLabel(86187, "员工状态"), "status"));
list.add(new WeaTableColumn("150px",SalaryI18nUtil.getI18nLabel( 91323, "社保方案名称"), "socialName"));
titleMap.get(WelfareTypeEnum.SOCIAL_SECURITY.getValue()).forEach((k, v) -> list.add(new WeaTableColumn("150px", v, k)));
list.add(new WeaTableColumn("150px",SalaryI18nUtil.getI18nLabel( 91324, "社保账号"), "socialAccount"));
list.add(new WeaTableColumn("150px",SalaryI18nUtil.getI18nLabel(91319, "社保起始缴纳月"), "socialStartTime"));
list.add(new WeaTableColumn("150px",SalaryI18nUtil.getI18nLabel( 91320, "社保最后缴纳月"), "socialEndTime"));
list.add(new WeaTableColumn("150px",SalaryI18nUtil.getI18nLabel(91485, "公积金方案名称"), "fundName"));
list.add(new WeaTableColumn("150px",SalaryI18nUtil.getI18nLabel( 91486, "公积金账号"), "fundAccount"));
titleMap.get(WelfareTypeEnum.ACCUMULATION_FUND.getValue()).forEach((k, v) -> list.add(new WeaTableColumn("150px", v, k)));
list.add(new WeaTableColumn("150px",SalaryI18nUtil.getI18nLabel(91487, "补充公积金账号"), "supplementFundAccount"));
list.add(new WeaTableColumn("150px",SalaryI18nUtil.getI18nLabel(91483, "公积金起始缴纳月"), "fundStartTime"));
list.add(new WeaTableColumn("150px",SalaryI18nUtil.getI18nLabel(91484, "公积金最后缴纳月"), "fundEndTime"));
list.add(new WeaTableColumn("150px",SalaryI18nUtil.getI18nLabel(91496, "其他福利方案名称"), "otherName"));
titleMap.get(WelfareTypeEnum.OTHER.getValue()).forEach((k, v) -> list.add(new WeaTableColumn("150px", v, k)));
list.add(new WeaTableColumn("150px",SalaryI18nUtil.getI18nLabel(91490, "其他福利起始缴纳月"), "otherStartTime"));
list.add(new WeaTableColumn("150px",SalaryI18nUtil.getI18nLabel(91494, "其他福利最后缴纳月"), "otherEndTime"));
return list;
}
public Map<Integer, Map<String, String>> buildColumnTitle(List<InsuranceArchivesEmployeePO> insuranceArchivesEmployeePOS, Long employeeId) {
Map<Integer, Map<String, String>> result = new HashMap<>();
Set<String> socialSet = new HashSet<>();
Set<String> fundSet = new HashSet<>();
Set<String> otherSet = new HashSet<>();
insuranceArchivesEmployeePOS.forEach(item -> {
List<InsuranceArchivesSocialSchemePO> socialByEmployeeId = getSocialSchemeMapper().getSocialByEmployeeId(new ArrayList<Long>() {{
add(item.getEmployeeId());
}});
InsuranceArchivesSocialSchemePO socialItem = null;
if(socialByEmployeeId.size() > 0) {
socialItem = socialByEmployeeId.get(0);
}
InsuranceArchivesFundSchemePO fundItem = null;
List<InsuranceArchivesFundSchemePO> fundByEmployeeId = getFundSchemeMapper().getFundByEmployeeId(new ArrayList<Long>() {{
add(item.getEmployeeId());
}});
if(fundByEmployeeId.size() > 0) {
fundItem = fundByEmployeeId.get(0);
}
InsuranceArchivesOtherSchemePO otherItem = null;
List<InsuranceArchivesOtherSchemePO> otherByEmployeeId = getOtherSchemeMapper().getOtherByEmployeeId(new ArrayList<Long>() {{
add(item.getEmployeeId());
}});
if(otherByEmployeeId.size() > 0) {
otherItem = otherByEmployeeId.get(0);
}
if (socialItem != null) {
Map<String, Object> socialJson = JSON.parseObject(socialItem.getSocialPaymentBaseString(), new TypeReference<Map<String, Object>>() {
});
if (socialJson != null) {
socialJson.forEach((k, v) -> socialSet.add(k));
}
}
if (fundItem != null) {
Map<String, Object> fundJson = JSON.parseObject(fundItem.getFundPaymentBaseString(), new TypeReference<Map<String, Object>>() {
});
if (fundJson != null) {
fundJson.forEach((k, v) -> fundSet.add(k));
}
}
if (otherItem != null) {
Map<String, Object> otherJson = JSON.parseObject(otherItem.getOtherPaymentBaseString(), new TypeReference<Map<String, Object>>() {
});
if (otherJson != null) {
otherJson.forEach((k, v) -> otherSet.add(k));
}
}
});
Map<String, String> socialMap = new HashMap<>();
Map<Long, ICategoryPO> socialCollect = new HashMap<>();
Map<Long, ICategoryPO> customSocial =
getICategoryMapper().listByWelfareType(WelfareTypeEnum.SOCIAL_SECURITY.getValue(), null)
.stream().collect(Collectors.toMap(ICategoryPO::getId, Function.identity()));
Map<Long, ICategoryPO> sysSocial =
getICategoryMapper().listByWelfareType(WelfareTypeEnum.SOCIAL_SECURITY.getValue(), DataTypeEnum.SYSTEM.getValue())
.stream().collect(Collectors.toMap(ICategoryPO::getId, Function.identity()));
socialCollect.putAll(customSocial);
socialCollect.putAll(sysSocial);
socialSet.forEach(item -> {
if (socialCollect.containsKey(Long.valueOf(item))) {
socialMap.put(item, socialCollect.get(Long.valueOf(item)).getInsuranceName() + SalaryI18nUtil.getI18nLabel( 100293, "申报基数"));
}
});
Map<String, String> fundMap = new HashMap<>();
Map<Long, ICategoryPO> fundCollect = new HashMap<>();
Map<Long, ICategoryPO> customFund =
getICategoryMapper().listByWelfareType(WelfareTypeEnum.ACCUMULATION_FUND.getValue(), null)
.stream().collect(Collectors.toMap(ICategoryPO::getId, Function.identity()));
Map<Long, ICategoryPO> sysFund =
getICategoryMapper().listByWelfareType(WelfareTypeEnum.ACCUMULATION_FUND.getValue(), DataTypeEnum.SYSTEM.getValue())
.stream().collect(Collectors.toMap(ICategoryPO::getId, Function.identity()));
fundCollect.putAll(customFund);
fundCollect.putAll(sysFund);
fundSet.forEach(item -> {
if (fundCollect.containsKey(Long.valueOf(item))) {
fundMap.put(item, fundCollect.get(Long.valueOf(item)).getInsuranceName() + SalaryI18nUtil.getI18nLabel( 100293, "申报基数"));
}
});
Map<String, String> otherMap = new HashMap<>();
Map<Long, ICategoryPO> otherCollect = new HashMap<>();
Map<Long, ICategoryPO> customOther =
getICategoryMapper().listByWelfareType(WelfareTypeEnum.OTHER.getValue(), null)
.stream().collect(Collectors.toMap(ICategoryPO::getId, Function.identity()));
Map<Long, ICategoryPO> sysOther =
getICategoryMapper().listByWelfareType(WelfareTypeEnum.OTHER.getValue(), DataTypeEnum.SYSTEM.getValue())
.stream().collect(Collectors.toMap(ICategoryPO::getId, Function.identity()));
otherCollect.putAll(customOther);
otherCollect.putAll(sysOther);
otherSet.forEach(item -> {
if (otherCollect.containsKey(Long.valueOf(item))) {
otherMap.put(item, otherCollect.get(Long.valueOf(item)).getInsuranceName() + SalaryI18nUtil.getI18nLabel( 100293, "申报基数"));
}
});
result.put(WelfareTypeEnum.SOCIAL_SECURITY.getValue(), socialMap);
result.put(WelfareTypeEnum.ACCUMULATION_FUND.getValue(), fundMap);
result.put(WelfareTypeEnum.OTHER.getValue(), otherMap);
return result;
}
/**
* 导入的数据插入到数据库中
*/
@Override
public Map<String, Object> preview(SISchemaImportParam param) {
ValidUtil.doValidator(param);
InputStream fileInputStream = null;
try {
fileInputStream = ImageFileManager.getInputStreamById(Integer.parseInt(param.getImageId()));
Sheet sheet = ExcelSupport.parseFile(fileInputStream, 0, EXCEL_TYPE_XLSX);
Map<String, Object> apidatas = new HashMap<String, Object>();
apidatas.put("headers", ExcelSupport.getSheetHeader(sheet, 0));
apidatas.put("list", ExcelParseHelper.parse2List(sheet, 1));
return apidatas;
} finally {
IOUtils.closeQuietly(fileInputStream);
}
}
/**
* 导入的数据插入到数据库中
*/
public Map<String, Object> batchImportEbatch(SISchemaImportParam param) {
ValidUtil.doValidator(param);
// List<ExcelSheet> excelSheets = message.getBatchFile().getExcelSheets();
// 租户key
// String tenantKey = message.getTenantKey().toLowerCase();
//操作员id
Long creator = (long) user.getUID();
//获取所有福利类型的id-name结合
Map<String, Long> schemeNameIdMap = schemeNameIdMap();
Map<Long, String> welfareMap = welfareMap();
// 获取所有个税扣缴义务人的名称和id的map
Map<String, Long> paymentNameIdMap = getTaxAgentService().findAll().stream().collect(Collectors.toMap(TaxAgentListDTO::getName, TaxAgentListDTO::getId));
// 获取所有人员信息
// 获取租户下所有的人员
List<DataCollectionEmployee> employeeByIds = employeeBiz.listEmployee();
int total = 0;
int index = 0;
int successCount = 0;
int errorCount = 0;
// 待导入数据
List<InsuranceArchivesAccountPO> insuranceArchivesAccountPOS = new ArrayList<>();
// 待导入数据
InputStream fileInputStream = null;
try {
fileInputStream = ImageFileManager.getInputStreamById(Integer.parseInt(param.getImageId()));
Sheet sheet = ExcelSupport.parseFile(fileInputStream, 0, EXCEL_TYPE_XLSX);
// 表头
List<String> headers = ExcelSupport.getSheetHeader(sheet, 0);
// 错误sheet数据
List<Map<String, Object>> errorData = new LinkedList<>();
// 错误提示
List<Map<String, String>> excelComments = new LinkedList<>();
// 处理数值
List<Map<String, Object>> data = ExcelParseHelper.parse2Map(sheet, 1);
total = data.size();
//当前sheel的单行记录
Map<String, Object> map;
for (int i = 0; i < data.size(); i++) {
index += 1;
map = data.get(i);
boolean isError;
List<Map<String, Object>> singleAccount = new ArrayList<>();
for (int j = 0; j < headers.size(); j++) {
//组装单条数据基础数据
String key = headers.get(j);
if (key == null) {
continue;
}
Map<String, Object> cellData = new HashMap<>();
cellData.put(key.toString(), Optional.ofNullable(map.get(key.toString())).orElse("").toString());
cellData.put("index", j);
singleAccount.add(cellData);
}
isError = singleAccountCheck(singleAccount, welfareMap, insuranceArchivesAccountPOS, employeeByIds, excelComments, errorCount + 1, schemeNameIdMap,
paymentNameIdMap,
creator);
if (isError) {
errorCount += 1;
// 添加错误数据
errorData.add(map);
} else {
successCount += 1;
}
// salaryBatchService.sendImportRate(message.getBizId(), total, index);
}
// 如果sheet包含错误数据
// if (CollectionUtils.isNotEmpty(errorData)) {
// salaryBatchService.createErrorExcelSheet(headers, errorData, excelSheet.getName(), excelComments, errorExcelSheets);
// }
// 数据入库处理
handleImportData(insuranceArchivesAccountPOS);
// 发送导入回调信息
// salaryBatchService.sendImportCallBackInfo(message, successCount, errorCount, errorExcelSheets);
Map<String, Object> apidatas = new HashMap<String, Object>();
apidatas.put("successCount", successCount);
apidatas.put("errorCount", errorCount);
apidatas.put("errorData", excelComments);
return apidatas;
} finally {
IOUtils.closeQuietly(fileInputStream);
}
}
public Map<String, Long> schemeNameIdMap() {
Map<String, Long> schemeMap = new HashMap<>();
List<InsuranceSchemePO> schemeList = getInsuranceSchemeMapper().listAll();
if (CollectionUtils.isNotEmpty(schemeList)) {
schemeMap = schemeList.stream().collect(Collectors.toMap(InsuranceSchemePO::getSchemeName, InsuranceSchemePO::getId));
}
return schemeMap;
}
public Map<Long, String> welfareMap() {
return getICategoryMapper().listAll().stream().collect(Collectors.toMap(ICategoryPO::getId, ICategoryPO::getInsuranceName));
}
public boolean singleAccountCheck(List<Map<String, Object>> singleAccount, Map<Long, String> welfareMap, List<InsuranceArchivesAccountPO> insuranceArchivesAccountPOS,
List<DataCollectionEmployee> employeeByIds,
List<Map<String, String>> excelComments, int i, Map<String, Long> schemeNameIdMap, Map<String, Long> paymentNameIdMap, Long creator
) {
boolean isError = false;
String userName = (String) singleAccount.get(0).get(SalaryI18nUtil.getI18nLabel(85429, "姓名"));
String deparmentName = (String) singleAccount.get(1).get(SalaryI18nUtil.getI18nLabel(86185, "部门"));
String telephone = (String) singleAccount.get(2).get(SalaryI18nUtil.getI18nLabel(86186, "手机号"));
String userStatus = (String) singleAccount.get(3).get(SalaryI18nUtil.getI18nLabel(86187, "员工状态"));
if (StringUtils.isBlank(userName) && StringUtils.isBlank(deparmentName) && StringUtils.isBlank(telephone) && StringUtils.isBlank(userStatus)) {
Map<String, String> errorMessageMap = Maps.newHashMap();
errorMessageMap.put("message", SalaryI18nUtil.getI18nLabel(100303, "不能同时为空"));
excelComments.add(errorMessageMap);
isError = true;
}
List<Long> employees = employeeByIds.stream().filter(e -> (StringUtils.isBlank(userName) || Objects.equals(e.getUsername(), userName))
&& (StringUtils.isBlank(deparmentName) || Objects.equals(e.getDepartmentName(), deparmentName))
&& (StringUtils.isBlank(telephone) || Objects.equals(e.getMobile(), telephone))
&& (StringUtils.isBlank(userStatus) || e.getStatus() == null || Objects.equals(e.getStatus(), userStatus))).map(DataCollectionEmployee::getEmployeeId)
.collect(Collectors.toList());
if (CollectionUtils.isEmpty(employees) || employees.size() > 1) {
Map<String, String> errorMessageMap = Maps.newHashMap();
errorMessageMap.put("message", SalaryI18nUtil.getI18nLabel(100304, "员工信息不存在或者存在多个员工"));
excelComments.add(errorMessageMap);
isError = true;
}
Long employeeId = null;
if (CollectionUtils.isNotEmpty(employees) && employees.size() == 1) {
employeeId = employees.get(0);
}
InsuranceArchivesAccountPO insuranceArchivesAccountPO = new InsuranceArchivesAccountPO();
InsuranceArchivesSocialSchemePO insuranceArchivesSocialSchemePO = null;
InsuranceArchivesFundSchemePO insuranceArchivesFundSchemePO = null;
InsuranceArchivesOtherSchemePO insuranceArchivesOtherSchemePO = null;
Map<String, Object> socialMap = findElement(singleAccount, SalaryI18nUtil.getI18nLabel(91323, "社保方案名称"));
Map<String, Object> fundMap = findElement(singleAccount, SalaryI18nUtil.getI18nLabel(91485, "公积金方案名称"));
Map<String, Object> otherMap = findElement(singleAccount, SalaryI18nUtil.getI18nLabel(91496, "其他福利方案名称"));
Map<String, Object> socialStartTimeMap = findElement(singleAccount, SalaryI18nUtil.getI18nLabel(91319, "社保起始缴纳月"));
Map<String, Object> socialEndTimeMap = findElement(singleAccount, SalaryI18nUtil.getI18nLabel(91320, "社保最后缴纳月"));
Map<String, Object> fundStartTimeMap = findElement(singleAccount, SalaryI18nUtil.getI18nLabel(91483, "公积金起始缴纳月"));
Map<String, Object> fundEndTimeMap = findElement(singleAccount, SalaryI18nUtil.getI18nLabel(91484, "公积金最后缴纳月"));
Map<String, Object> otherStartTimeMap = findElement(singleAccount, SalaryI18nUtil.getI18nLabel(91490, "其他福利起始缴纳月"));
Map<String, Object> otherEndTimeMap = findElement(singleAccount, SalaryI18nUtil.getI18nLabel(91494, "其他福利最后缴纳月"));
if (StringUtils.isBlank((String) socialMap.get(SalaryI18nUtil.getI18nLabel(91323, "社保方案名称"))) && StringUtils.isBlank(
(String) fundMap.get(SalaryI18nUtil.getI18nLabel(91485, "公积金方案名称")))
&& StringUtils.isBlank((String) otherMap.get(SalaryI18nUtil.getI18nLabel(91496, "其他福利方案名称")))) {
Map<String, String> errorMessageMap = Maps.newHashMap();
errorMessageMap.put("message", SalaryI18nUtil.getI18nLabel(100312, "社保,公积金,其他福利方案名称不可同时为空"));
excelComments.add(errorMessageMap);
isError = true;
}
if (StringUtils.isNotBlank((String) socialStartTimeMap.get(SalaryI18nUtil.getI18nLabel(91319, "社保起始缴纳月"))) && !SalaryDateUtil.checkYearMonth(
(String) socialStartTimeMap.get(SalaryI18nUtil.getI18nLabel(91319, "社保起始缴纳月")))) {
Map<String, String> errorMessageMap = Maps.newHashMap();
errorMessageMap.put("message", SalaryI18nUtil.getI18nLabel(100315, "社保起始缴纳时间格式错误,正确格式为YYYY-MM"));
excelComments.add(errorMessageMap);
isError = true;
}
if (StringUtils.isNotBlank((String) socialEndTimeMap.get(SalaryI18nUtil.getI18nLabel(91320, "社保最后缴纳月"))) && !SalaryDateUtil.checkYearMonth(
(String) socialEndTimeMap.get(SalaryI18nUtil.getI18nLabel(91320, "社保最后缴纳月")))) {
Map<String, String> errorMessageMap = Maps.newHashMap();
errorMessageMap.put("message", SalaryI18nUtil.getI18nLabel(100316, "社保最后缴纳时间格式错误,正确格式为YYYY-MM"));
excelComments.add(errorMessageMap);
isError = true;
}
if (StringUtils.isNotBlank((String) fundStartTimeMap.get(SalaryI18nUtil.getI18nLabel(91483, "公积金起始缴纳月"))) && !SalaryDateUtil.checkYearMonth(
(String) fundStartTimeMap.get(SalaryI18nUtil.getI18nLabel(91483, "公积金起始缴纳月")))) {
Map<String, String> errorMessageMap = Maps.newHashMap();
errorMessageMap.put("message", SalaryI18nUtil.getI18nLabel(100317, "公积金起始缴纳时间格式错误,正确格式为YYYY-MM"));
excelComments.add(errorMessageMap);
isError = true;
}
if (StringUtils.isNotBlank((String) fundEndTimeMap.get(SalaryI18nUtil.getI18nLabel(91484, "公积金最后缴纳月"))) && !SalaryDateUtil.checkYearMonth(
(String) fundEndTimeMap.get(SalaryI18nUtil.getI18nLabel(91484, "公积金最后缴纳月")))) {
Map<String, String> errorMessageMap = Maps.newHashMap();
errorMessageMap.put("message", SalaryI18nUtil.getI18nLabel(100319, "公积金最后缴纳时间格式错误,正确格式为YYYY-MM"));
excelComments.add(errorMessageMap);
isError = true;
}
if (StringUtils.isNotBlank((String) otherStartTimeMap.get(SalaryI18nUtil.getI18nLabel(91490, "其他福利起始缴纳月"))) && !SalaryDateUtil.checkYearMonth(
(String) otherStartTimeMap.get(SalaryI18nUtil.getI18nLabel(91490, "其他福利起始缴纳月")))) {
Map<String, String> errorMessageMap = Maps.newHashMap();
errorMessageMap.put("message", SalaryI18nUtil.getI18nLabel(100320, "其他福利起始缴纳时间格式错误,正确格式为YYYY-MM"));
excelComments.add(errorMessageMap);
isError = true;
}
if (StringUtils.isNotBlank((String) otherEndTimeMap.get(SalaryI18nUtil.getI18nLabel(91494, "其他福利最后缴纳月"))) && !SalaryDateUtil.checkYearMonth(
(String) otherEndTimeMap.get(SalaryI18nUtil.getI18nLabel(91494, "其他福利最后缴纳月")))) {
Map<String, String> errorMessageMap = Maps.newHashMap();
errorMessageMap.put("message", SalaryI18nUtil.getI18nLabel(100321, "其他福利最后缴纳时间格式错误,正确格式为YYYY-MM"));
excelComments.add(errorMessageMap);
isError = true;
}
if (StringUtils.isNotBlank((String) socialMap.get(SalaryI18nUtil.getI18nLabel(91323, "社保方案名称")))
&& schemeNameIdMap.get((String) socialMap.get(SalaryI18nUtil.getI18nLabel(91323, "社保方案名称"))) == null) {
Map<String, String> errorMessageMap = Maps.newHashMap();
errorMessageMap.put("message", SalaryI18nUtil.getI18nLabel(100322, "社保方案不存在"));
excelComments.add(errorMessageMap);
isError = true;
} else {
insuranceArchivesSocialSchemePO = buildSocialPO(employeeId, welfareMap, singleAccount, schemeNameIdMap, paymentNameIdMap, creator);
}
if (StringUtils.isNotBlank((String) fundMap.get(SalaryI18nUtil.getI18nLabel(91485, "公积金方案名称")))
&& schemeNameIdMap.get((String) fundMap.get(SalaryI18nUtil.getI18nLabel(91485, "公积金方案名称"))) == null) {
Map<String, String> errorMessageMap = Maps.newHashMap();
errorMessageMap.put("message", SalaryI18nUtil.getI18nLabel(100323, "公积金方案不存在"));
excelComments.add(errorMessageMap);
isError = true;
} else {
insuranceArchivesFundSchemePO = buildFundPO(employeeId, welfareMap, singleAccount, schemeNameIdMap, paymentNameIdMap, creator);
}
if (StringUtils.isNotBlank((String) fundMap.get(SalaryI18nUtil.getI18nLabel(91496, "其他福利方案名称")))
&& schemeNameIdMap.get((String) fundMap.get(SalaryI18nUtil.getI18nLabel(91496, "其他福利方案名称"))) == null) {
Map<String, String> errorMessageMap = Maps.newHashMap();
errorMessageMap.put("message", SalaryI18nUtil.getI18nLabel(100324, "其他福利方案不存在"));
excelComments.add(errorMessageMap);
isError = true;
} else {
insuranceArchivesOtherSchemePO = buildOtherPO(employeeId, welfareMap, singleAccount, schemeNameIdMap, paymentNameIdMap, creator);
}
if (!isError) {
insuranceArchivesAccountPO.setSocial(insuranceArchivesSocialSchemePO);
insuranceArchivesAccountPO.setFund(insuranceArchivesFundSchemePO);
insuranceArchivesAccountPO.setOther(insuranceArchivesOtherSchemePO);
insuranceArchivesAccountPOS.add(insuranceArchivesAccountPO);
}
return isError;
}
public Map<String, Object> findElement(List<Map<String, Object>> singleAccount, String target) {
for (Map<String, Object> e : singleAccount) {
if (e.containsKey(target)) {
return e;
}
}
return new HashMap<>();
}
public InsuranceArchivesSocialSchemePO buildSocialPO(Long employeeId, Map<Long, String> welfareMap, List<Map<String, Object>> singleAccount, Map<String, Long> schemeNameIdMap,
Map<String, Long> paymentNameIdMap, Long creator) {
if (employeeId == null) {
return null;
}
InsuranceArchivesSocialSchemePO insuranceArchivesSocialSchemePO = new InsuranceArchivesSocialSchemePO();
insuranceArchivesSocialSchemePO.setId(IdGenerator.generate());
insuranceArchivesSocialSchemePO.setSocialAccount((String) findElement(singleAccount, SalaryI18nUtil.getI18nLabel(91324, "社保账号")).get(
SalaryI18nUtil.getI18nLabel(91324, "社保账号")));
insuranceArchivesSocialSchemePO.setSocialSchemeId(schemeNameIdMap.get(
(String) findElement(singleAccount, SalaryI18nUtil.getI18nLabel( 91323, "社保方案名称")).get(
SalaryI18nUtil.getI18nLabel(91323, "社保方案名称"))));
insuranceArchivesSocialSchemePO.setSocialStartTime((String) findElement(singleAccount, SalaryI18nUtil.getI18nLabel(91319, "社保起始缴纳月")).get(
SalaryI18nUtil.getI18nLabel(91319, "社保起始缴纳月")));
insuranceArchivesSocialSchemePO.setSocialEndTime((String) findElement(singleAccount, SalaryI18nUtil.getI18nLabel(91320, "社保最后缴纳月")).get(
SalaryI18nUtil.getI18nLabel(91320, "社保最后缴纳月")));
insuranceArchivesSocialSchemePO.setTenantKey("");
insuranceArchivesSocialSchemePO.setWelfareType(WelfareTypeEnum.SOCIAL_SECURITY.getValue());
insuranceArchivesSocialSchemePO.setUpdateTime(new Date());
insuranceArchivesSocialSchemePO.setPaymentOrganization(paymentNameIdMap.get(
(String) findElement(singleAccount, SalaryI18nUtil.getI18nLabel(91325, "社保缴纳组织")).get(
SalaryI18nUtil.getI18nLabel(91325, "社保缴纳组织"))));
insuranceArchivesSocialSchemePO.setNonPayment(NonPaymentEnum.YES.getValue());
insuranceArchivesSocialSchemePO.setCreator(creator);
insuranceArchivesSocialSchemePO.setCreateTime(new Date());
insuranceArchivesSocialSchemePO.setUpdateTime(new Date());
insuranceArchivesSocialSchemePO.setDeleteType(DeleteTypeEnum.NOT_DELETED.getValue());
insuranceArchivesSocialSchemePO.setEmployeeId(employeeId);
insuranceArchivesSocialSchemePO.setUnderTake(UndertakerEnum.SCOPE_COMPANY.getValue());
List<InsuranceSchemeDetailPO> insuranceSchemeDetailPOS =
getInsuranceSchemeDetailMapper().queryListBySchemeId(insuranceArchivesSocialSchemePO.getSocialSchemeId());
if (CollectionUtils.isNotEmpty(insuranceSchemeDetailPOS)) {
List<Long> insuranceIds = insuranceSchemeDetailPOS.stream().map(InsuranceSchemeDetailPO::getInsuranceId).collect(Collectors.toList());
HashMap<String, String> socialPaymentBase = new HashMap<>();
for (Long insuranceId : insuranceIds) {
if (StringUtils.isBlank(welfareMap.get(insuranceId))) {
continue;
}
if (findElement(singleAccount, welfareMap.get(insuranceId) + SalaryI18nUtil.getI18nLabel(100293, "申报基数")) != null) {
socialPaymentBase.put(String.valueOf(insuranceId),
(String) findElement(singleAccount, welfareMap.get(insuranceId) + SalaryI18nUtil.getI18nLabel(100293, "申报基数")).get(
welfareMap.get(insuranceId) + SalaryI18nUtil.getI18nLabel(100293, "申报基数")));
}
}
insuranceArchivesSocialSchemePO.setSocialPaymentBaseString(JSON.toJSONString(socialPaymentBase));
}
return insuranceArchivesSocialSchemePO;
}
public InsuranceArchivesFundSchemePO buildFundPO(Long employeeId, Map<Long, String> welfareMap, List<Map<String, Object>> singleAccount, Map<String, Long> schemeNameIdMap,
Map<String, Long> paymentNameIdMap, Long creator) {
if (employeeId == null) {
return null;
}
InsuranceArchivesFundSchemePO insuranceArchivesFundSchemePO = new InsuranceArchivesFundSchemePO();
insuranceArchivesFundSchemePO.setId(IdGenerator.generate());
insuranceArchivesFundSchemePO.setCreator(creator);
insuranceArchivesFundSchemePO.setTenantKey("");
insuranceArchivesFundSchemePO.setCreateTime(new Date());
insuranceArchivesFundSchemePO.setUpdateTime(new Date());
insuranceArchivesFundSchemePO.setFundSchemeId(schemeNameIdMap.get(
(String) findElement(singleAccount, SalaryI18nUtil.getI18nLabel(91485, "公积金方案名称")).get(
SalaryI18nUtil.getI18nLabel(91485, "公积金方案名称"))));
insuranceArchivesFundSchemePO.setFundAccount((String) findElement(singleAccount, SalaryI18nUtil.getI18nLabel(91486, "公积金账号")).get(
SalaryI18nUtil.getI18nLabel(91486, "公积金账号")));
insuranceArchivesFundSchemePO.setSupplementFundAccount((String) findElement(singleAccount, SalaryI18nUtil.getI18nLabel(91487, "补充公积金账号")).get(
SalaryI18nUtil.getI18nLabel(91487, "补充公积金账号")));
insuranceArchivesFundSchemePO.setFundStartTime((String) findElement(singleAccount, SalaryI18nUtil.getI18nLabel(91483, "公积金起始缴纳月")).get(
SalaryI18nUtil.getI18nLabel( 91483, "公积金起始缴纳月")));
insuranceArchivesFundSchemePO.setFundEndTime((String) findElement(singleAccount, SalaryI18nUtil.getI18nLabel(91484, "公积金最后缴纳月")).get(
SalaryI18nUtil.getI18nLabel(91484, "公积金最后缴纳月")));
insuranceArchivesFundSchemePO.setWelfareType(WelfareTypeEnum.ACCUMULATION_FUND.getValue());
insuranceArchivesFundSchemePO.setPaymentOrganization(paymentNameIdMap.get(
(String) findElement(singleAccount, SalaryI18nUtil.getI18nLabel(91488, "公积金缴纳组织")).get(
SalaryI18nUtil.getI18nLabel(91488, "公积金缴纳组织"))));
insuranceArchivesFundSchemePO.setNonPayment(NonPaymentEnum.YES.getValue());
insuranceArchivesFundSchemePO.setDeleteType(DeleteTypeEnum.NOT_DELETED.getValue());
insuranceArchivesFundSchemePO.setUnderTake(UndertakerEnum.SCOPE_COMPANY.getValue());
insuranceArchivesFundSchemePO.setEmployeeId(employeeId);
List<InsuranceSchemeDetailPO> insuranceSchemeDetailPOS = getInsuranceSchemeDetailMapper().queryListBySchemeId(insuranceArchivesFundSchemePO.getFundSchemeId());
if (CollectionUtils.isNotEmpty(insuranceSchemeDetailPOS)) {
List<Long> insuranceIds = insuranceSchemeDetailPOS.stream().map(InsuranceSchemeDetailPO::getInsuranceId).collect(Collectors.toList());
HashMap<String, String> socialPaymentBase = new HashMap<>();
for (Long insuranceId : insuranceIds) {
if (StringUtils.isBlank(welfareMap.get(insuranceId))) {
continue;
}
if (findElement(singleAccount, welfareMap.get(insuranceId) + SalaryI18nUtil.getI18nLabel(100293, "申报基数")) != null) {
socialPaymentBase.put(String.valueOf(insuranceId),
(String) findElement(singleAccount, welfareMap.get(insuranceId) + SalaryI18nUtil.getI18nLabel(100293, "申报基数")).get(
welfareMap.get(insuranceId) + SalaryI18nUtil.getI18nLabel(100293, "申报基数")));
}
}
insuranceArchivesFundSchemePO.setFundPaymentBaseString(JSON.toJSONString(socialPaymentBase));
}
return insuranceArchivesFundSchemePO;
}
public InsuranceArchivesOtherSchemePO buildOtherPO(Long employeeId, Map<Long, String> welfareMap, List<Map<String, Object>> singleAccount, Map<String, Long> schemeNameIdMap,
Map<String, Long> paymentNameIdMap, Long creator) {
if (employeeId == null) {
return null;
}
InsuranceArchivesOtherSchemePO insuranceArchivesOtherSchemePO = new InsuranceArchivesOtherSchemePO();
insuranceArchivesOtherSchemePO.setId(IdGenerator.generate());
insuranceArchivesOtherSchemePO.setCreator(creator);
insuranceArchivesOtherSchemePO.setTenantKey("");
insuranceArchivesOtherSchemePO.setCreateTime(new Date());
insuranceArchivesOtherSchemePO.setUpdateTime(new Date());
insuranceArchivesOtherSchemePO.setOtherSchemeId(
schemeNameIdMap.get((String) findElement(singleAccount, SalaryI18nUtil.getI18nLabel(91496, "其他福利方案名称")).get(
SalaryI18nUtil.getI18nLabel(91496, "其他福利方案名称"))));
insuranceArchivesOtherSchemePO.setOtherStartTime((String) findElement(singleAccount, SalaryI18nUtil.getI18nLabel(91490, "其他福利起始缴纳月")).get(
SalaryI18nUtil.getI18nLabel(91490, "其他福利起始缴纳月")));
insuranceArchivesOtherSchemePO.setOtherEndTime((String) findElement(singleAccount, SalaryI18nUtil.getI18nLabel(91494, "其他福利最后缴纳月")).get(
SalaryI18nUtil.getI18nLabel(91494, "其他福利最后缴纳月")));
insuranceArchivesOtherSchemePO.setPaymentOrganization(paymentNameIdMap.get(
(String) findElement(singleAccount, SalaryI18nUtil.getI18nLabel(91497, "其他福利缴纳组织")).get(
SalaryI18nUtil.getI18nLabel(91497, "其他福利缴纳组织"))));
insuranceArchivesOtherSchemePO.setWelfareType(WelfareTypeEnum.OTHER.getValue());
insuranceArchivesOtherSchemePO.setNonPayment(NonPaymentEnum.YES.getValue());
insuranceArchivesOtherSchemePO.setDeleteType(DeleteTypeEnum.NOT_DELETED.getValue());
insuranceArchivesOtherSchemePO.setUnderTake(UndertakerEnum.SCOPE_COMPANY.getValue());
insuranceArchivesOtherSchemePO.setEmployeeId(employeeId);
List<InsuranceSchemeDetailPO> insuranceSchemeDetailPOS = getInsuranceSchemeDetailMapper().queryListBySchemeId(insuranceArchivesOtherSchemePO.getOtherSchemeId());
if (CollectionUtils.isNotEmpty(insuranceSchemeDetailPOS)) {
List<Long> insuranceIds = insuranceSchemeDetailPOS.stream().map(InsuranceSchemeDetailPO::getInsuranceId).collect(Collectors.toList());
HashMap<String, String> socialPaymentBase = new HashMap<>();
for (Long insuranceId : insuranceIds) {
if (StringUtils.isBlank(welfareMap.get(insuranceId))) {
continue;
}
if (findElement(singleAccount, welfareMap.get(insuranceId) + SalaryI18nUtil.getI18nLabel(100293, "申报基数")) != null) {
socialPaymentBase.put(String.valueOf(insuranceId),
(String) findElement(singleAccount, welfareMap.get(insuranceId) + SalaryI18nUtil.getI18nLabel(100293, "申报基数")).get(
welfareMap.get(insuranceId) + SalaryI18nUtil.getI18nLabel(100293, "申报基数")));
}
}
insuranceArchivesOtherSchemePO.setOtherPaymentBaseString(JSON.toJSONString(socialPaymentBase));
}
return insuranceArchivesOtherSchemePO;
}
public void handleImportData(List<InsuranceArchivesAccountPO> insuranceArchivesAccountPOS) {
//导入社保档案
List<InsuranceArchivesSocialSchemePO> socialSchemePOS = insuranceArchivesAccountPOS.stream().filter(Objects::nonNull).map(InsuranceArchivesAccountPO::getSocial)
.collect(Collectors.toList());
if (CollectionUtils.isNotEmpty(socialSchemePOS)) {
socialSchemePOS = socialSchemePOS.stream().collect(Collectors.collectingAndThen(Collectors.toCollection(
() -> new TreeSet<>(Comparator.comparing(InsuranceArchivesSocialSchemePO::getEmployeeId))
), ArrayList::new));
List<Long> socialEmployeeIds = socialSchemePOS.stream().map(InsuranceArchivesSocialSchemePO::getEmployeeId).collect(Collectors.toList());
getSocialSchemeMapper().batchDeleteByEmployeeIds(socialEmployeeIds);
getSocialSchemeMapper().batchSave(socialSchemePOS);
}
//导入公积金档案
List<InsuranceArchivesFundSchemePO> fundSchemePOS = insuranceArchivesAccountPOS.stream().filter(Objects::nonNull).map(InsuranceArchivesAccountPO::getFund)
.collect(Collectors.toList());
if (CollectionUtils.isNotEmpty(fundSchemePOS)) {
fundSchemePOS = fundSchemePOS.stream().collect(Collectors.collectingAndThen(Collectors.toCollection(
() -> new TreeSet<>(Comparator.comparing(InsuranceArchivesFundSchemePO::getEmployeeId))
), ArrayList::new));
List<Long> fundEmployeeIds = fundSchemePOS.stream().map(InsuranceArchivesFundSchemePO::getEmployeeId).collect(Collectors.toList());
getFundSchemeMapper().batchDeleteByEmployeeIds(fundEmployeeIds);
getFundSchemeMapper().batchSave(fundSchemePOS);
}
//导入其他福利档案
List<InsuranceArchivesOtherSchemePO> otherSchemePOS = insuranceArchivesAccountPOS.stream().filter(Objects::nonNull).map(InsuranceArchivesAccountPO::getOther)
.collect(Collectors.toList());
if (CollectionUtils.isNotEmpty(otherSchemePOS)) {
otherSchemePOS = otherSchemePOS.stream().collect(Collectors.collectingAndThen(Collectors.toCollection(
() -> new TreeSet<>(Comparator.comparing(InsuranceArchivesOtherSchemePO::getEmployeeId))
), ArrayList::new));
List<Long> otherEmployeeIds = otherSchemePOS.stream().map(InsuranceArchivesOtherSchemePO::getEmployeeId).collect(Collectors.toList());
getOtherSchemeMapper().batchDeleteByEmployeeIds(otherEmployeeIds);
getOtherSchemeMapper().batchSave(otherSchemePOS);
}
}
/**
* 导出档案导入所需要的模板,可根据开关选择是否导出现有的档案数据
*
* @param param 是否导出带档案数据的模板
*/
public XSSFWorkbook exportTemplate(InsuranceArchivesListParam param) {
return getSIImportService().exportTemplate(param);
}
}