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.SIArchivesBiz; import com.engine.salary.biz.SISchemeBiz; import com.engine.salary.cmd.sischeme.*; import com.engine.salary.encrypt.AESEncryptUtil; import com.engine.salary.encrypt.siarchives.InsuranceArchivesFundSchemePOEncrypt; import com.engine.salary.encrypt.siarchives.InsuranceArchivesOtherSchemePOEncrypt; import com.engine.salary.encrypt.siarchives.InsuranceArchivesSocialSchemePOEncrypt; import com.engine.salary.encrypt.sischeme.InsuranceSchemeDetailPOEncrypt; 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.TaxAgentEmployeeDTO; import com.engine.salary.entity.taxagent.dto.TaxAgentManageRangeEmployeeDTO; import com.engine.salary.entity.taxagent.po.TaxAgentPO; import com.engine.salary.enums.UserStatusEnum; 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.mapper.taxagent.TaxAgentMapper; import com.engine.salary.service.SIImportService; import com.engine.salary.service.SISchemeService; import com.engine.salary.service.TaxAgentService; 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.Lists; 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.commons.lang3.math.NumberUtils; 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.text.NumberFormat; 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: * @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 TaxAgentMapper getTaxAgentMapper() { return MapperProxyFactory.getProxy(TaxAgentMapper.class); } private ICategoryMapper getICategoryMapper() { return MapperProxyFactory.getProxy(ICategoryMapper.class); } private SISchemeService getSiSchemeService() { return ServiceUtil.getService(SISchemeServiceImpl.class, user); } private TaxAgentService getTaxAgentService() { return ServiceUtil.getService(TaxAgentServiceImpl.class, user); } private InsuranceSchemeDetailMapper getInsuranceSchemeDetailMapper() { return MapperProxyFactory.getProxy(InsuranceSchemeDetailMapper.class); } private SIImportService getSIImportService() { return ServiceUtil.getService(SIImportServiceImpl.class, user); } private EmployBiz employeeBiz = new EmployBiz(); private SIArchivesBiz siArchivesBiz = new SIArchivesBiz(); @Override public Map getForm(Map params) { return commandExecutor.execute(new SISchemeGetFormCmd(params, user)); } @Override public Map insertScheme(Map params) { return commandExecutor.execute(new SISchemeInsertCmd(params, user)); } @Override public Map update(Map params) { return commandExecutor.execute(new SISchemeUpdateCmd(params, user)); } @Override public Map delete(Map params) { return commandExecutor.execute(new SISchemeDeleteCmd(params, user)); } @Override public Map copyScheme(Map params) { return commandExecutor.execute(new SISchemeCopyCmd(params, user)); } @Override public List queryListByInsuranceIdIsPayment(Long insuranceId, Integer isPayment) { return new SISchemeBiz().queryListByInsuranceIdIsPayment(insuranceId, isPayment); } @Override public Map listPage(Map params) { return commandExecutor.execute(new SISchemeListCmd(params, user)); } @Override public Map getSchemeIdNameMap() { Map result = new HashMap<>(); List 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 list(InsuranceSchemeParam queryParam) { SalaryAssert.notNull(queryParam.getWelfareTypeEnum(), SalaryI18nUtil.getI18nLabel(84026, "参数错误")); SalaryPageUtil.start(queryParam.getCurrent(), queryParam.getPageSize()); List insuranceSchemePOS = MapperProxyFactory.getProxy(InsuranceSchemeMapper.class).listByWelfareType(queryParam.getWelfareTypeEnum().getValue()); PageInfo pageInfo = new PageInfo<>(insuranceSchemePOS, InsuranceSchemePO.class); List 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 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 listPageEmployeePOS(InsuranceArchivesListParam param) { long currentEmployeeId = user.getUID(); Boolean needAuth = getTaxAgentService().isNeedAuth(currentEmployeeId); if (needAuth) { List taxAgentEmployeeDTOS = getTaxAgentService().listTaxAgentAndEmployee(currentEmployeeId); Set employeeIds = SalaryEntityUtil.properties(taxAgentEmployeeDTOS, TaxAgentEmployeeDTO::getEmployeeId); List list = getSocialSchemeMapper().queryEmployeeList(param); return list.stream().filter(f -> employeeIds.contains(f.getEmployeeId())).collect(Collectors.toList()); } return getSocialSchemeMapper().queryEmployeeList(param); } @Override public List> buildTableData(List insuranceArchivesEmployeePOS) { List> records = new ArrayList<>(); List taxAgentPOS = getTaxAgentMapper().listAll(); Map longTaxAgentPOMap = SalaryEntityUtil.convert2Map(taxAgentPOS, TaxAgentPO::getId); List employeeIds = insuranceArchivesEmployeePOS.stream().map(InsuranceArchivesEmployeePO::getEmployeeId).collect(Collectors.toList()); if (CollectionUtils.isEmpty(employeeIds)) { return records; } List socialList = new ArrayList<>(); List fundList = new ArrayList<>(); List 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 ids = employeeIds.subList(i, end); socialList.addAll(InsuranceArchivesSocialSchemePOEncrypt.decryptList(siArchivesBiz.getSocialByEmployeeIds(ids))); fundList.addAll(InsuranceArchivesFundSchemePOEncrypt.decryptList(siArchivesBiz.getFundByEmployeeIds(ids))); otherList.addAll(InsuranceArchivesOtherSchemePOEncrypt.decryptList(siArchivesBiz.getOtherByEmployeeIds(ids))); } Map socialSchemePOMap = socialList .stream().collect(Collectors.toMap(InsuranceArchivesSocialSchemePO::getEmployeeId, Function.identity())); Map fundSchemePOMap = fundList .stream().collect(Collectors.toMap(InsuranceArchivesFundSchemePO::getEmployeeId, Function.identity())); Map 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 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("paymentOrganizationName", longTaxAgentPOMap.get(item.getPaymentOrganization()) != null ? longTaxAgentPOMap.get(item.getPaymentOrganization()).getName() : ""); map.put("mobile", item.getTelephone()); map.put("status", item.getUserStatus() == null ? "" : UserStatusEnum.getDefaultLabelByValue(item.getUserStatus())); if (socialItem != null) { map.put("socialName", getSiSchemeService().querySchemeName(socialItem.getSocialSchemeId())); Map socialJson = JSON.parseObject(socialItem.getSocialPaymentBaseString(), new TypeReference>() { }); if (socialJson != null) { map.putAll(socialJson); // 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 fundJson = JSON.parseObject(fundItem.getFundPaymentBaseString(), new TypeReference>() { }); if (fundJson != null) { map.putAll(fundJson); // 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 otherJson = JSON.parseObject(otherItem.getOtherPaymentBaseString(), new TypeReference>() { }); if (otherJson != null) { map.putAll(otherJson); //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 insuranceArchivesEmployeePOS = listPageEmployeePOS(request); if (insuranceArchivesEmployeePOS == null) { insuranceArchivesEmployeePOS = new ArrayList<>(); } List> records = buildTableData(insuranceArchivesEmployeePOS); List columns = buildWeaTableColumns(insuranceArchivesEmployeePOS, (long) user.getUID()); //工作簿list //工作簿数据 List> rows = new LinkedList<>(); List collect = columns.stream().map(WeaTableColumn::getText).collect(Collectors.toList()); rows.add(collect); for (Map recordData : records) { List 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 collect = queryInsuranceSchemeDetailList(id).stream().map(InsuranceSchemeDetailPO::getInsuranceId).distinct().collect(Collectors.toList()) .stream().map(this::queryInsuranceName).collect(Collectors.toList()); return StringUtils.join(collect, "、"); } public Collection queryInsuranceSchemeDetailList(Long id) { List insuranceSchemeDetailPOS = MapperProxyFactory.getProxy(InsuranceSchemeDetailMapper.class).queryInsuranceSchemeDetailList(id, IsPaymentEnum.YES.getValue()); return InsuranceSchemeDetailPOEncrypt.decryptList(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 buildWeaTableColumns(List insuranceArchivesEmployeePOS, Long employeeId) { Map> titleMap = buildColumnTitle(insuranceArchivesEmployeePOS, employeeId); List 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(93910, "个税扣缴义务人"), "paymentOrganizationName")); 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> buildColumnTitle(List insuranceArchivesEmployeePOS, Long employeeId) { Map> result = new HashMap<>(); Set socialSet = new HashSet<>(); Set fundSet = new HashSet<>(); Set otherSet = new HashSet<>(); insuranceArchivesEmployeePOS.forEach(item -> { List socialByEmployeeId = siArchivesBiz.getSocialByEmployeeIds(new ArrayList() {{ add(item.getEmployeeId()); }}); InsuranceArchivesSocialSchemePOEncrypt.decryptList(socialByEmployeeId); InsuranceArchivesSocialSchemePO socialItem = null; if (socialByEmployeeId.size() > 0) { socialItem = socialByEmployeeId.get(0); } InsuranceArchivesFundSchemePO fundItem = null; List fundByEmployeeId = siArchivesBiz.getFundByEmployeeIds(new ArrayList() {{ add(item.getEmployeeId()); }}); InsuranceArchivesFundSchemePOEncrypt.decryptList(fundByEmployeeId); if (fundByEmployeeId.size() > 0) { fundItem = fundByEmployeeId.get(0); } InsuranceArchivesOtherSchemePO otherItem = null; List otherByEmployeeId = siArchivesBiz.getOtherByEmployeeIds(new ArrayList() {{ add(item.getEmployeeId()); }}); InsuranceArchivesOtherSchemePOEncrypt.decryptList(otherByEmployeeId); if (otherByEmployeeId.size() > 0) { otherItem = otherByEmployeeId.get(0); } if (socialItem != null) { Map socialJson = JSON.parseObject(socialItem.getSocialPaymentBaseString(), new TypeReference>() { }); if (socialJson != null) { socialJson.forEach((k, v) -> socialSet.add(k)); } } if (fundItem != null) { Map fundJson = JSON.parseObject(fundItem.getFundPaymentBaseString(), new TypeReference>() { }); if (fundJson != null) { fundJson.forEach((k, v) -> fundSet.add(k)); } } if (otherItem != null) { Map otherJson = JSON.parseObject(otherItem.getOtherPaymentBaseString(), new TypeReference>() { }); if (otherJson != null) { otherJson.forEach((k, v) -> otherSet.add(k)); } } }); Map socialMap = new HashMap<>(); Map socialCollect = new HashMap<>(); Map customSocial = getICategoryMapper().listByWelfareType(WelfareTypeEnum.SOCIAL_SECURITY.getValue(), null) .stream().collect(Collectors.toMap(ICategoryPO::getId, Function.identity())); Map 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 fundMap = new HashMap<>(); Map fundCollect = new HashMap<>(); Map customFund = getICategoryMapper().listByWelfareType(WelfareTypeEnum.ACCUMULATION_FUND.getValue(), null) .stream().collect(Collectors.toMap(ICategoryPO::getId, Function.identity())); Map 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 otherMap = new HashMap<>(); Map otherCollect = new HashMap<>(); Map customOther = getICategoryMapper().listByWelfareType(WelfareTypeEnum.OTHER.getValue(), null) .stream().collect(Collectors.toMap(ICategoryPO::getId, Function.identity())); Map 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 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 apidatas = new HashMap(); apidatas.put("headers", ExcelSupport.getSheetHeader(sheet, 0)); apidatas.put("list", ExcelParseHelper.parse2List(sheet, 1)); return apidatas; } finally { IOUtils.closeQuietly(fileInputStream); } } /** * 导入的数据插入到数据库中 */ public Map batchImportEbatch(SISchemaImportParam param) { ValidUtil.doValidator(param); // List excelSheets = message.getBatchFile().getExcelSheets(); // 租户key // String tenantKey = message.getTenantKey().toLowerCase(); //操作员id Long creator = (long) user.getUID(); //获取所有福利类型的id-name结合 Map schemeNameIdMap = schemeNameIdMap(); Map welfareMap = welfareMap(); // 获取所有个税扣缴义务人的名称和id的map Map paymentNameIdMap; //分权 Boolean openDevolution = getTaxAgentService().isOpenDevolution(); if (openDevolution) { paymentNameIdMap = getTaxAgentService().listAllTaxAgentsAsAdmin((long) user.getUID()).stream().collect(Collectors.toMap(TaxAgentPO::getName, TaxAgentPO::getId)); } else { paymentNameIdMap = getTaxAgentService().listAll().stream().collect(Collectors.toMap(TaxAgentPO::getName, TaxAgentPO::getId)); } //获取所以个税扣缴义务人树型 List taxAgentManageRangeEmployeeTree = getTaxAgentService().listTaxAgentAndEmployeeTree(); // 获取所有人员信息 List employeeByIds = employeeBiz.listEmployee(); int total = 0; int index = 0; int successCount = 0; int errorCount = 0; // 待导入数据 List insuranceArchivesAccountPOS = new ArrayList<>(); // 待导入数据 InputStream fileInputStream = null; try { fileInputStream = ImageFileManager.getInputStreamById(Integer.parseInt(param.getImageId())); Sheet sheet = ExcelSupport.parseFile(fileInputStream, 0, EXCEL_TYPE_XLSX); // 表头 List headers = ExcelSupport.getSheetHeader(sheet, 0); // 错误sheet数据 List> errorData = new LinkedList<>(); // 错误提示 List> excelComments = new LinkedList<>(); // 处理数值 List> data = ExcelParseHelper.parse2Map(sheet, 1); total = data.size(); //当前sheel的单行记录 Map map; for (int i = 0; i < data.size(); i++) { index += 1; map = data.get(i); boolean isError; List> singleAccount = new ArrayList<>(); for (int j = 0; j < headers.size(); j++) { //组装单条数据基础数据 String key = headers.get(j); if (key == null) { continue; } Map 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, i + 2, openDevolution, taxAgentManageRangeEmployeeTree); 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 apidatas = new HashMap(); apidatas.put("successCount", successCount); apidatas.put("errorCount", errorCount); apidatas.put("errorData", excelComments); return apidatas; } finally { IOUtils.closeQuietly(fileInputStream); } } public Map schemeNameIdMap() { Map schemeMap = new HashMap<>(); List schemeList = getInsuranceSchemeMapper().listAll(); if (CollectionUtils.isNotEmpty(schemeList)) { schemeMap = schemeList.stream().collect(Collectors.toMap(InsuranceSchemePO::getSchemeName, InsuranceSchemePO::getId)); } return schemeMap; } public Map welfareMap() { return getICategoryMapper().listAll().stream().collect(Collectors.toMap(ICategoryPO::getId, ICategoryPO::getInsuranceName)); } private String userStateExchange(String userState) { UserStatusEnum[] values = UserStatusEnum.values(); for (UserStatusEnum value : values) { if (value.getValue().equals(Integer.valueOf(userState))) { return value.getDefaultLabel() + ""; } } return userState; } public boolean singleAccountCheck(List> singleAccount, Map welfareMap, List insuranceArchivesAccountPOS, List employeeByIds, List> excelComments, int i, Map schemeNameIdMap, Map paymentNameIdMap, Long creator, int index, Boolean openDevolution, List taxAgentManageRangeEmployeeTree ) { 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, "员工状态")); String rowIndex = "第" + index + "行"; if (StringUtils.isBlank(userName) && StringUtils.isBlank(deparmentName) && StringUtils.isBlank(telephone) && StringUtils.isBlank(userStatus)) { Map errorMessageMap = Maps.newHashMap(); errorMessageMap.put("message", rowIndex + " 用户名、部门名称、手机号、用户状态" + SalaryI18nUtil.getI18nLabel(100303, "不能同时为空")); excelComments.add(errorMessageMap); isError = true; } List 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) || Objects.equals(userStateExchange(e.getStatus()), userStatus))) .collect(Collectors.toList()); if (CollectionUtils.isEmpty(employees)) { Map errorMessageMap = Maps.newHashMap(); errorMessageMap.put("message", rowIndex + "员工信息不存在"); excelComments.add(errorMessageMap); isError = true; return isError; } else { //含在职和离职,选在职数据 if (employees.size() > 1) { employees = employees.stream() .filter(e -> UserStatusEnum.getNormalStatus().contains(e.getStatus())) .collect(Collectors.toList()); if (employees.size() != 1) { Map errorMessageMap = Maps.newHashMap(); errorMessageMap.put("message", rowIndex + SalaryI18nUtil.getI18nLabel(100304, "员工信息不存在或者存在多个员工")); excelComments.add(errorMessageMap); isError = true; } } } Long employeeId = employees.get(0).getEmployeeId(); InsuranceArchivesAccountPO insuranceArchivesAccountPO = new InsuranceArchivesAccountPO(); InsuranceArchivesSocialSchemePO insuranceArchivesSocialSchemePO = null; InsuranceArchivesFundSchemePO insuranceArchivesFundSchemePO = null; InsuranceArchivesOtherSchemePO insuranceArchivesOtherSchemePO = null; Map socialMap = findElement(singleAccount, SalaryI18nUtil.getI18nLabel(91323, "社保方案名称")); Map paymentMap = findElement(singleAccount, SalaryI18nUtil.getI18nLabel(86184, "个税扣缴义务人")); Map fundMap = findElement(singleAccount, SalaryI18nUtil.getI18nLabel(91485, "公积金方案名称")); Map otherMap = findElement(singleAccount, SalaryI18nUtil.getI18nLabel(91496, "其他福利方案名称")); Map socialStartTimeMap = findElement(singleAccount, SalaryI18nUtil.getI18nLabel(91319, "社保起始缴纳月")); Map socialEndTimeMap = findElement(singleAccount, SalaryI18nUtil.getI18nLabel(91320, "社保最后缴纳月")); Map fundStartTimeMap = findElement(singleAccount, SalaryI18nUtil.getI18nLabel(91483, "公积金起始缴纳月")); Map fundEndTimeMap = findElement(singleAccount, SalaryI18nUtil.getI18nLabel(91484, "公积金最后缴纳月")); Map otherStartTimeMap = findElement(singleAccount, SalaryI18nUtil.getI18nLabel(91490, "其他福利起始缴纳月")); Map 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 errorMessageMap = Maps.newHashMap(); errorMessageMap.put("message", rowIndex + SalaryI18nUtil.getI18nLabel(100312, "社保,公积金,其他福利方案名称不可同时为空")); excelComments.add(errorMessageMap); isError = true; } //社保缴纳组织=个税扣缴义务人 String paymentOrg = (String) paymentMap.get("个税扣缴义务人"); if (StringUtils.isBlank(paymentOrg)) { Map errorMessageMap = Maps.newHashMap(); errorMessageMap.put("message", rowIndex + SalaryI18nUtil.getI18nLabel(100579, "个税扣缴义务人不允许为空")); excelComments.add(errorMessageMap); isError = true; }else if (!paymentNameIdMap.containsKey(paymentOrg)) { Map errorMessageMap = Maps.newHashMap(); errorMessageMap.put("message", rowIndex + SalaryI18nUtil.getI18nLabel(100312, "社保缴纳组织应和个税扣缴义务人名称一致,社保缴纳组织不存在或不在权限范围内")); excelComments.add(errorMessageMap); isError = true; } if (openDevolution && !isError) { Long paymentOrgId = paymentNameIdMap.get(paymentOrg); TaxAgentManageRangeEmployeeDTO taxAgentManageRangeEmployeeDTO = taxAgentManageRangeEmployeeTree.stream().filter(tax -> tax.getTaxAgentId().equals(paymentOrgId)).findFirst().get(); Optional o = taxAgentManageRangeEmployeeDTO.getEmployeeList().stream().map(TaxAgentManageRangeEmployeeDTO.TaxAgentEmployee::getEmployeeId).filter(e -> e.equals(employeeId)).findFirst(); if(!o.isPresent()){ Map errorMessageMap = Maps.newHashMap(); errorMessageMap.put("message", rowIndex + SalaryI18nUtil.getI18nLabel(100312, "该条数据不在个税扣缴义务人人员范围内,不可导入")); excelComments.add(errorMessageMap); isError = true; } } String socialStartMonth = (String) socialStartTimeMap.get(SalaryI18nUtil.getI18nLabel(91319, "社保起始缴纳月")); if (StringUtils.isNotBlank(socialStartMonth) && socialStartMonth.length() > 7) { socialStartMonth = socialStartMonth.substring(0, 7); } if (StringUtils.isNotBlank(socialStartMonth) && !SalaryDateUtil.checkYearMonth(socialStartMonth)) { Map errorMessageMap = Maps.newHashMap(); errorMessageMap.put("message", rowIndex + SalaryI18nUtil.getI18nLabel(100315, "社保起始缴纳时间格式错误,正确格式为YYYY-MM")); excelComments.add(errorMessageMap); isError = true; } String socialEndMonth = (String) socialEndTimeMap.get(SalaryI18nUtil.getI18nLabel(91320, "社保最后缴纳月")); if (StringUtils.isNotBlank(socialEndMonth) && socialEndMonth.length() > 7) { socialEndMonth = socialEndMonth.substring(0, 7); } if (StringUtils.isNotBlank(socialEndMonth) && !SalaryDateUtil.checkYearMonth(socialEndMonth)) { Map errorMessageMap = Maps.newHashMap(); errorMessageMap.put("message", rowIndex + SalaryI18nUtil.getI18nLabel(100316, "社保最后缴纳时间格式错误,正确格式为YYYY-MM")); excelComments.add(errorMessageMap); isError = true; } String fundStartMonth = (String) fundStartTimeMap.get(SalaryI18nUtil.getI18nLabel(91483, "公积金起始缴纳月")); if (StringUtils.isNotBlank(fundStartMonth) && fundStartMonth.length() > 7) { fundStartMonth = fundStartMonth.substring(0, 7); } if (StringUtils.isNotBlank(fundStartMonth) && !SalaryDateUtil.checkYearMonth(fundStartMonth)) { Map errorMessageMap = Maps.newHashMap(); errorMessageMap.put("message", rowIndex + SalaryI18nUtil.getI18nLabel(100317, "公积金起始缴纳时间格式错误,正确格式为YYYY-MM")); excelComments.add(errorMessageMap); isError = true; } String fundEndMonth = (String) fundEndTimeMap.get(SalaryI18nUtil.getI18nLabel(91484, "公积金最后缴纳月")); if (StringUtils.isNotBlank(fundEndMonth) && fundEndMonth.length() > 7) { fundEndMonth = fundEndMonth.substring(0, 7); } if (StringUtils.isNotBlank(fundEndMonth) && !SalaryDateUtil.checkYearMonth(fundEndMonth)) { Map errorMessageMap = Maps.newHashMap(); errorMessageMap.put("message", rowIndex + SalaryI18nUtil.getI18nLabel(100319, "公积金最后缴纳时间格式错误,正确格式为YYYY-MM")); excelComments.add(errorMessageMap); isError = true; } String otherStartMonth = (String) otherStartTimeMap.get(SalaryI18nUtil.getI18nLabel(91490, "其他福利起始缴纳月")); if (StringUtils.isNotBlank(otherStartMonth) && otherStartMonth.length() > 7) { otherStartMonth = otherStartMonth.substring(0, 7); } if (StringUtils.isNotBlank(otherStartMonth) && !SalaryDateUtil.checkYearMonth(otherStartMonth)) { Map errorMessageMap = Maps.newHashMap(); errorMessageMap.put("message", rowIndex + SalaryI18nUtil.getI18nLabel(100320, "其他福利起始缴纳时间格式错误,正确格式为YYYY-MM")); excelComments.add(errorMessageMap); isError = true; } String otherEndMonth = (String) otherEndTimeMap.get(SalaryI18nUtil.getI18nLabel(91494, "其他福利最后缴纳月")); if (StringUtils.isNotBlank(otherEndMonth) && otherEndMonth.length() > 7) { otherEndMonth = otherEndMonth.substring(0, 7); } if (StringUtils.isNotBlank(otherEndMonth) && !SalaryDateUtil.checkYearMonth(otherEndMonth)) { Map errorMessageMap = Maps.newHashMap(); errorMessageMap.put("message", rowIndex + 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 errorMessageMap = Maps.newHashMap(); errorMessageMap.put("message", rowIndex + 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 errorMessageMap = Maps.newHashMap(); errorMessageMap.put("message", rowIndex + 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 errorMessageMap = Maps.newHashMap(); errorMessageMap.put("message", rowIndex + SalaryI18nUtil.getI18nLabel(100324, "其他福利方案不存在")); excelComments.add(errorMessageMap); isError = true; } else { insuranceArchivesOtherSchemePO = buildOtherPO(employeeId, welfareMap, singleAccount, schemeNameIdMap, paymentNameIdMap, creator); } /**************校验申报基数**************/ for (Map.Entry entry : welfareMap.entrySet()) { String keyName = entry.getValue()+SalaryI18nUtil.getI18nLabel(100293, "申报基数"); String numberVlue = findElement(singleAccount, keyName).get(keyName) == null ?"": findElement(singleAccount, keyName).get(keyName).toString(); if (!"".equals(numberVlue) && !NumberUtils.isParsable(numberVlue)){ Map errorMessageMap = Maps.newHashMap(); errorMessageMap.put("message", rowIndex+keyName + SalaryI18nUtil.getI18nLabel(100581, "请输入数字")); excelComments.add(errorMessageMap); isError = true; } } if (!isError) { insuranceArchivesAccountPO.setSocial(insuranceArchivesSocialSchemePO); insuranceArchivesAccountPO.setFund(insuranceArchivesFundSchemePO); insuranceArchivesAccountPO.setOther(insuranceArchivesOtherSchemePO); insuranceArchivesAccountPOS.add(insuranceArchivesAccountPO); } return isError; } public Map findElement(List> singleAccount, String target) { for (Map e : singleAccount) { if (e.containsKey(target)) { return e; } } return new HashMap<>(); } public InsuranceArchivesSocialSchemePO buildSocialPO(Long employeeId, Map welfareMap, List> singleAccount, Map schemeNameIdMap, Map 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, "社保方案名称")))); String socialStartDate = (String) findElement(singleAccount, SalaryI18nUtil.getI18nLabel(91319, "社保起始缴纳月")).get( SalaryI18nUtil.getI18nLabel(91319, "社保起始缴纳月")); if (StringUtils.isNotBlank(socialStartDate) && socialStartDate.length() > 7) { socialStartDate = socialStartDate.substring(0, 7); } insuranceArchivesSocialSchemePO.setSocialStartTime(socialStartDate); String socialEndDate = (String) findElement(singleAccount, SalaryI18nUtil.getI18nLabel(91320, "社保最后缴纳月")).get( SalaryI18nUtil.getI18nLabel(91320, "社保最后缴纳月")); if (StringUtils.isNotBlank(socialEndDate) && socialEndDate.length() > 7) { socialEndDate = socialEndDate.substring(0, 7); } insuranceArchivesSocialSchemePO.setSocialEndTime(socialEndDate); 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_PERSON.getValue()); List insuranceSchemeDetailPOS = getInsuranceSchemeDetailMapper().queryListBySchemeId(insuranceArchivesSocialSchemePO.getSocialSchemeId()); InsuranceSchemeDetailPOEncrypt.decryptList(insuranceSchemeDetailPOS); if (CollectionUtils.isNotEmpty(insuranceSchemeDetailPOS)) { List insuranceIds = insuranceSchemeDetailPOS.stream().map(InsuranceSchemeDetailPO::getInsuranceId).collect(Collectors.toList()); HashMap 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 welfareMap, List> singleAccount, Map schemeNameIdMap, Map 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, "补充公积金账号"))); String fundStartDate = (String) findElement(singleAccount, SalaryI18nUtil.getI18nLabel(91483, "公积金起始缴纳月")).get( SalaryI18nUtil.getI18nLabel(91483, "公积金起始缴纳月")); if (StringUtils.isNotBlank(fundStartDate) && fundStartDate.length() > 7) { fundStartDate = fundStartDate.substring(0, 7); } insuranceArchivesFundSchemePO.setFundStartTime(fundStartDate); String fundEndDate = (String) findElement(singleAccount, SalaryI18nUtil.getI18nLabel(91484, "公积金最后缴纳月")).get( SalaryI18nUtil.getI18nLabel(91484, "公积金最后缴纳月")); if (StringUtils.isNotBlank(fundEndDate) && fundEndDate.length() > 7) { fundEndDate = fundEndDate.substring(0, 7); } insuranceArchivesFundSchemePO.setFundEndTime(fundEndDate); 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_PERSON.getValue()); insuranceArchivesFundSchemePO.setEmployeeId(employeeId); List insuranceSchemeDetailPOS = getInsuranceSchemeDetailMapper().queryListBySchemeId(insuranceArchivesFundSchemePO.getFundSchemeId()); InsuranceSchemeDetailPOEncrypt.decryptList(insuranceSchemeDetailPOS); if (CollectionUtils.isNotEmpty(insuranceSchemeDetailPOS)) { List insuranceIds = insuranceSchemeDetailPOS.stream().map(InsuranceSchemeDetailPO::getInsuranceId).collect(Collectors.toList()); HashMap 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 welfareMap, List> singleAccount, Map schemeNameIdMap, Map 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, "其他福利方案名称")))); String otherStartDate = (String) findElement(singleAccount, SalaryI18nUtil.getI18nLabel(91490, "其他福利起始缴纳月")).get( SalaryI18nUtil.getI18nLabel(91490, "其他福利起始缴纳月")); if (StringUtils.isNotBlank(otherStartDate) && otherStartDate.length() > 7) { otherStartDate = otherStartDate.substring(0, 7); } insuranceArchivesOtherSchemePO.setOtherStartTime(otherStartDate); String otherEndDate = (String) findElement(singleAccount, SalaryI18nUtil.getI18nLabel(91494, "其他福利最后缴纳月")).get( SalaryI18nUtil.getI18nLabel(91494, "其他福利最后缴纳月")); if (StringUtils.isNotBlank(otherEndDate) && otherEndDate.length() > 7) { otherEndDate = otherEndDate.substring(0, 7); } insuranceArchivesOtherSchemePO.setOtherEndTime(otherEndDate); 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_PERSON.getValue()); insuranceArchivesOtherSchemePO.setEmployeeId(employeeId); List insuranceSchemeDetailPOS = getInsuranceSchemeDetailMapper().queryListBySchemeId(insuranceArchivesOtherSchemePO.getOtherSchemeId()); InsuranceSchemeDetailPOEncrypt.decryptList(insuranceSchemeDetailPOS); if (CollectionUtils.isNotEmpty(insuranceSchemeDetailPOS)) { List insuranceIds = insuranceSchemeDetailPOS.stream().map(InsuranceSchemeDetailPO::getInsuranceId).collect(Collectors.toList()); HashMap 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 insuranceArchivesAccountPOS) { //导入社保档案 List 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 socialEmployeeIds = socialSchemePOS.stream().map(InsuranceArchivesSocialSchemePO::getEmployeeId).collect(Collectors.toList()); List> socialEmployeeIdPartition = Lists.partition(socialEmployeeIds, 100); socialEmployeeIdPartition.forEach(getSocialSchemeMapper()::batchDeleteByEmployeeIds); List insuranceArchivesSocialSchemePOS = InsuranceArchivesSocialSchemePOEncrypt.encryptList(socialSchemePOS); List> partition = Lists.partition(insuranceArchivesSocialSchemePOS, 100); partition.forEach(getSocialSchemeMapper()::batchSave); } //导入公积金档案 List 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 fundEmployeeIds = fundSchemePOS.stream().map(InsuranceArchivesFundSchemePO::getEmployeeId).collect(Collectors.toList()); List> fundEmployeeIdsPartition = Lists.partition(fundEmployeeIds, 100); fundEmployeeIdsPartition.forEach(getFundSchemeMapper()::batchDeleteByEmployeeIds); List insuranceArchivesFundSchemePOS = InsuranceArchivesFundSchemePOEncrypt.encryptList(fundSchemePOS); List> partition = Lists.partition(insuranceArchivesFundSchemePOS, 100); partition.forEach(getFundSchemeMapper()::batchSave); } //导入其他福利档案 List 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 otherEmployeeIds = otherSchemePOS.stream().map(InsuranceArchivesOtherSchemePO::getEmployeeId).collect(Collectors.toList()); List> otherEmployeeIdsPartition = Lists.partition(otherEmployeeIds, 100); otherEmployeeIdsPartition.forEach(getOtherSchemeMapper()::batchDeleteByEmployeeIds); List insuranceArchivesOtherSchemePOS = InsuranceArchivesOtherSchemePOEncrypt.encryptList(otherSchemePOS); List> partition = Lists.partition(insuranceArchivesOtherSchemePOS, 100); partition.forEach(getOtherSchemeMapper()::batchSave); } } /** * 导出档案导入所需要的模板,可根据开关选择是否导出现有的档案数据 * * @param param 是否导出带档案数据的模板 */ public XSSFWorkbook exportTemplate(InsuranceArchivesListParam param) { return getSIImportService().exportTemplate(param); } private List decryptSchemeDetailList(List encryptList) { encryptList.forEach(item -> { item.setUpperLimit(AESEncryptUtil.decrypt(item.getUpperLimit())); item.setFixedCost(AESEncryptUtil.decrypt(item.getFixedCost())); item.setLowerLimit(AESEncryptUtil.decrypt(item.getLowerLimit())); }); return encryptList; } }