package com.engine.salary.service.impl; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.TypeReference; import com.api.formmode.mybatis.util.SqlProxyHandle; import com.cloudstore.eccom.pc.table.WeaTableColumn; import com.cloudstore.eccom.result.WeaResultMsg; import com.engine.common.util.ServiceUtil; import com.engine.core.impl.Service; import com.engine.salary.component.SalaryWeaTable; import com.engine.salary.config.SalaryElogConfig; import com.engine.salary.constant.SalaryDefaultTenantConstant; import com.engine.salary.elog.entity.dto.LoggerContext; import com.engine.salary.encrypt.EncryptUtil; import com.engine.salary.entity.datacollection.DataCollectionEmployee; import com.engine.salary.entity.siarchives.param.InsuranceArchivesListParam; import com.engine.salary.entity.siarchives.param.SIArchiveImportParam; import com.engine.salary.entity.siarchives.po.*; import com.engine.salary.entity.sicategory.po.ICategoryPO; import com.engine.salary.entity.sischeme.bo.InsuranceSchemeBO; import com.engine.salary.entity.sischeme.dto.InsuranceSchemeDTO; import com.engine.salary.entity.sischeme.dto.InsuranceSchemeDetailDTO; import com.engine.salary.entity.sischeme.dto.InsuranceSchemeListDTO; import com.engine.salary.entity.sischeme.param.InsuranceSchemeDetailUpdateParam; import com.engine.salary.entity.sischeme.param.InsuranceSchemeParam; import com.engine.salary.entity.sischeme.param.InsuranceSchemeReqParam; import com.engine.salary.entity.sischeme.po.InsuranceSchemeDetailPO; import com.engine.salary.entity.sischeme.po.InsuranceSchemePO; import com.engine.salary.entity.sischeme.vo.InsuranceSchemeFormVO; import com.engine.salary.entity.sischeme.vo.SISchemeTableVO; import com.engine.salary.entity.taxagent.dto.TaxAgentEmployeeDTO; import com.engine.salary.entity.taxagent.dto.TaxAgentManageRangeEmployeeDTO; import com.engine.salary.entity.taxagent.param.TaxAgentManageRangeSaveParam; import com.engine.salary.entity.taxagent.param.TaxAgentRangeSaveParam; import com.engine.salary.entity.taxagent.po.TaxAgentPO; import com.engine.salary.enums.OperateTypeEnum; import com.engine.salary.enums.UserStatusEnum; import com.engine.salary.enums.salarysob.TargetTypeEnum; import com.engine.salary.enums.siaccount.EmployeeStatusEnum; import com.engine.salary.enums.sicategory.*; import com.engine.salary.exception.SalaryRunTimeException; import com.engine.salary.mapper.datacollection.EmployMapper; import com.engine.salary.mapper.siaccount.SIAccountUtilMapper; import com.engine.salary.mapper.siarchives.FundSchemeMapper; import com.engine.salary.mapper.siarchives.InsuranceBaseInfoMapper; import com.engine.salary.mapper.siarchives.OtherSchemeMapper; import com.engine.salary.mapper.siarchives.SocialSchemeMapper; import com.engine.salary.mapper.sicategory.ICategoryMapper; import com.engine.salary.mapper.sischeme.InsuranceSchemeDetailMapper; import com.engine.salary.mapper.sischeme.InsuranceSchemeMapper; import com.engine.salary.mapper.sys.SalarySysConfMapper; import com.engine.salary.mapper.taxagent.TaxAgentMapper; import com.engine.salary.service.*; import com.engine.salary.sys.entity.po.SalarySysConfPO; import com.engine.salary.sys.entity.vo.OrderRuleVO; import com.engine.salary.sys.enums.OpenEnum; import com.engine.salary.sys.service.SalarySysConfService; import com.engine.salary.sys.service.impl.SalarySysConfServiceImpl; import com.engine.salary.util.*; import com.engine.salary.util.db.IdGenerator; 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.ExcelUtilPlus; 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 lombok.extern.slf4j.Slf4j; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.math.NumberUtils; import org.apache.ibatis.session.SqlSession; import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.util.IOUtils; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import org.springframework.beans.BeanUtils; import weaver.conn.mybatis.MyBatisFactory; import weaver.file.ImageFileManager; import weaver.general.Util; import weaver.hrm.User; import java.io.InputStream; import java.math.BigDecimal; import java.util.*; import java.util.function.Function; import java.util.regex.Pattern; import java.util.stream.Collectors; import static com.engine.salary.sys.constant.SalarySysConstant.WEL_BASE_AUTO_ADJUST; import static com.engine.salary.util.excel.ExcelSupport.EXCEL_TYPE_XLSX; /** * @Author weaver_cl * @Description: * @Date 2022/3/7 * @Version V1.0 **/ @Slf4j public class SISchemeServiceImpl extends Service implements SISchemeService { private EncryptUtil encryptUtil = new EncryptUtil(); 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 SIArchivesBiz siArchivesBiz = new SIArchivesBiz(); // private SISchemeBiz siSchemeBiz = new SISchemeBiz(); private SalaryEmployeeService getSalaryEmployeeService(User user) { return (SalaryEmployeeService) ServiceUtil.getService(SalaryEmployeeServiceImpl.class, user); } private SalarySysConfMapper getSalarySysConfMapper() { return SqlProxyHandle.getProxy(SalarySysConfMapper.class); } private SalarySysConfService getSalarySysConfService(User user) { return ServiceUtil.getService(SalarySysConfServiceImpl.class, user); } private InsuranceBaseInfoMapper getInsuranceBaseInfoMapper() { return MapperProxyFactory.getProxy(InsuranceBaseInfoMapper.class); } public TaxAgentManageRangeService getTaxAgentManageRangeService(User user) { return ServiceUtil.getService(TaxAgentManageRangeServiceImpl.class, user); } public SIArchivesService getSIArchivesService(User user) { return ServiceUtil.getService(SIArchivesServiceImpl.class,user); } private SIAccountUtilMapper getSIAccountUtilMapper() { return SqlProxyHandle.getProxy(SIAccountUtilMapper.class); } private EmployMapper getEmployMapper() { return MapperProxyFactory.getProxy(EmployMapper.class); } @Override public Map getForm(Map params) { // return commandExecutor.execute(new SISchemeGetFormCmd(params, user)); Map apidatas = new HashMap<>(16); Long id = null; if (Objects.nonNull(params.get("id"))) { id =Long.valueOf(Util.null2String(params.get("id"))); } WelfareTypeEnum welfareTypeEnum = (WelfareTypeEnum)params.get("welfareTypeEnum"); // InsuranceSchemeFormVO form = siSchemeBiz.getForm(id, welfareTypeEnum); InsuranceSchemeFormVO form = getForm(id, welfareTypeEnum); apidatas.put("form",form); //记录操作日志 InsuranceSchemeDTO schemeBatch = form.getSchemeBatch(); LoggerContext loggerContext = new LoggerContext<>(); loggerContext.setUser(user); loggerContext.setTargetId(String.valueOf(schemeBatch.getId())); loggerContext.setTargetName(schemeBatch.getSchemeName()); loggerContext.setOperateType(OperateTypeEnum.READ.getValue()); loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(0, "查看福利方案明细")); loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(0, "查看福利方案明细") + ": " + schemeBatch.getSchemeName()); SalaryElogConfig.siSchemeLoggerTemplate.write(loggerContext); return apidatas; } @Override public Map insertScheme(Map params) { // return commandExecutor.execute(new SISchemeInsertCmd(params, user)); Map apidatas = new HashMap(16); InsuranceSchemeReqParam insuranceSchemeReqParam = (InsuranceSchemeReqParam) params.get("insuranceSchemeReqParam"); // siSchemeBiz.save(insuranceSchemeReqParam, (long) user.getUID()); save(insuranceSchemeReqParam, (long) user.getUID()); return apidatas; } @Override public Map update(Map params) { // return commandExecutor.execute(new SISchemeUpdateCmd(params, user)); Map apidatas = new HashMap(16); InsuranceSchemeReqParam insuranceSchemeReqParam = (InsuranceSchemeReqParam) params.get("insuranceSchemeReqParam"); // siSchemeBiz.update(insuranceSchemeReqParam, (long) user.getUID()); update(insuranceSchemeReqParam, (long) user.getUID()); return apidatas; } @Override public Map delete(Map params) { // return commandExecutor.execute(new SISchemeDeleteCmd(params, user)); Map apidatas = new HashMap(16); Collection ids = (Collection)params.get("ids"); if (CollectionUtils.isEmpty(ids)) { throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0,"参数错误")); } //校验带上类型 int welfareTypeId = (Integer) params.get("welfareTypeId"); if(WelfareTypeEnum.SOCIAL_SECURITY.getValue() == welfareTypeId){ // int num = siSchemeBiz.checkBeforeDeleteSocialscheme(params); int num = checkBeforeDeleteSocialscheme(params); if (num > 0){ throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0,"该社保方案已被使用")); } } if(WelfareTypeEnum.ACCUMULATION_FUND.getValue() == welfareTypeId){ // int accumulationfundNum = siSchemeBiz.checkBeforeDeleteAccumulationfund(params); int accumulationfundNum = checkBeforeDeleteAccumulationfund(params); if (accumulationfundNum > 0){ throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0,"该公积金方案已被使用")); } } if(WelfareTypeEnum.OTHER.getValue() == welfareTypeId){ // int otherschemeNum = siSchemeBiz.checkBeforeDeleteOtherscheme(params); int otherschemeNum = checkBeforeDeleteOtherscheme(params); if (otherschemeNum > 0){ throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0,"该其他福利方案已被使用")); } } // int billNum = siSchemeBiz.checkBeforeDeleteBill(params,welfareTypeId); int billNum = checkBeforeDeleteBill(params,welfareTypeId); if (billNum > 0){ throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0,"该福利方案已被核算")); } // siSchemeBiz.deleteSocialscheme(params); deleteSocialscheme(params); return apidatas; } @Override public Map copyScheme(Map params) { // return commandExecutor.execute(new SISchemeCopyCmd(params, user)); Map apidatas = new HashMap(16); Long id = (Long) params.get("id"); String schemeName = Util.null2String(params.get("schemeName")); // siSchemeBiz.copy(id,schemeName,(long) user.getUID()); copy(id,schemeName,(long) user.getUID()); return apidatas; } @Override public List queryListByInsuranceIdIsPayment(Long insuranceId, Integer isPayment) { // return new SISchemeBiz().queryListByInsuranceIdIsPayment(insuranceId, isPayment); List insuranceSchemeDetailPOList = getInsuranceSchemeDetailMapper().queryListByInsuranceIdIsPayment(insuranceId, isPayment); encryptUtil.decryptList(insuranceSchemeDetailPOList, InsuranceSchemeDetailPO.class); return insuranceSchemeDetailPOList; } @Override public Map listPage(Map params) { // return commandExecutor.execute(new SISchemeListCmd(params, user)); SalaryWeaTable table = new SalaryWeaTable<>(user,SISchemeTableVO.class); String sqlWhere = buildSqlWhere(params); table.setSqlwhere(sqlWhere); WeaResultMsg result = new WeaResultMsg(false); result.putAll(table.makeDataResult()); result.success(); return result.getResultMap(); } private String buildSqlWhere(Map params) { String sqlWhere = "where a.id = b.primary_id and b.insurance_id = c.id and a.delete_Type = 0"; Integer welfareType = (Integer)params.get("welfareType"); if (Objects.nonNull(welfareType)){ sqlWhere += " and a.welfare_type ="+welfareType; } return sqlWhere; } @Override public Map getSchemeIdNameMap() { Map result = new HashMap<>(); List insuranceSchemePOS = getInsuranceSchemeMapper().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, "参数错误")); queryParam.setWelfareType(queryParam.getWelfareTypeEnum().getValue()); if (queryParam.getPaymentTypeEnum() != null) { queryParam.setPaymentType(queryParam.getPaymentTypeEnum().getValue()); } Long currentEmployeeId = (long) user.getUID(); List insuranceSchemePOS; Boolean needAuth = getTaxAgentService().isNeedAuth(currentEmployeeId); if (needAuth) { // insuranceSchemePOS = getInsuranceSchemeMapper().listByWelfareType(queryParam.getWelfareTypeEnum().getValue()); insuranceSchemePOS = getInsuranceSchemeMapper().list(queryParam); Boolean isAdminEnable = getTaxAgentService().isAdminEnable((long) user.getUID()); if (isAdminEnable) { //管理员 Collection taxAgentPOS = getTaxAgentService().listAllTaxAgents(currentEmployeeId); List authTaxAgentIds = SalaryEntityUtil.properties(taxAgentPOS, TaxAgentPO::getId, Collectors.toList()); insuranceSchemePOS = insuranceSchemePOS.stream().filter(po -> { String taxAgentIdsStr = po.getTaxAgentIds(); List taxAgentIds = new ArrayList<>(); if (StringUtils.isNotBlank(taxAgentIdsStr)) { taxAgentIds = Arrays.stream(taxAgentIdsStr.split(",")).map(Long::valueOf).collect(Collectors.toList()); } return StringUtils.isBlank(po.getSharedType()) || SharedTypeEnum.PUBLIC.getValue().equals(po.getSharedType()) || (SharedTypeEnum.PRIVATE.getValue().equals(po.getSharedType()) && SalaryEntityUtil.judgeIntersection(authTaxAgentIds, taxAgentIds)); }).collect(Collectors.toList()); } else { //普通用户 insuranceSchemePOS = new ArrayList<>(); } } else { // insuranceSchemePOS = getInsuranceSchemeMapper().listByWelfareType(queryParam.getWelfareTypeEnum().getValue()); insuranceSchemePOS = getInsuranceSchemeMapper().list(queryParam); } PageInfo dtoPage = new PageInfo<>(InsuranceSchemeListDTO.class); dtoPage.setPageNum(queryParam.getCurrent()); dtoPage.setPageSize(queryParam.getPageSize()); dtoPage.setTotal(insuranceSchemePOS.size()); //分页 insuranceSchemePOS = SalaryPageUtil.subList(queryParam.getCurrent(), queryParam.getPageSize(), insuranceSchemePOS); 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()); dtoPage.setList(collect); return dtoPage; } @Override public List listPageEmployeePOS(InsuranceArchivesListParam param) { long currentEmployeeId = user.getUID(); //排序配置 OrderRuleVO orderRule = getSalarySysConfService(user).orderRule(); param.setOrderRule(orderRule); Boolean needAuth = getTaxAgentService().isNeedAuth(currentEmployeeId); if (needAuth) { List taxAgentEmployeeDTOS = getTaxAgentService().listTaxAgentAndEmployee(currentEmployeeId); // Set employeeIds = SalaryEntityUtil.properties(taxAgentEmployeeDTOS, TaxAgentEmployeeDTO::getEmployeeId); Set taxAgentIds = SalaryEntityUtil.properties(taxAgentEmployeeDTOS, TaxAgentEmployeeDTO::getTaxAgentId); List list = getSocialSchemeMapper().queryEmployeeList(param); return list.stream().filter(f -> taxAgentIds.contains(f.getPaymentOrganization())).collect(Collectors.toList()); } return getSocialSchemeMapper().queryEmployeeList(param); } @Override public List> buildTableData(List insuranceArchivesEmployeePOS) { // boolean welBaseDiffSign = siArchivesBiz.isDiffWelBase(); boolean welBaseDiffSign = getSIArchivesService(user).isDiffWelBase(); 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(encryptUtil.decryptList(getSIArchivesService(user).getSocialByEmployeeIds(ids), InsuranceArchivesSocialSchemePO.class)); fundList.addAll(encryptUtil.decryptList(getSIArchivesService(user).getFundByEmployeeIds(ids), InsuranceArchivesFundSchemePO.class)); otherList.addAll(encryptUtil.decryptList(getSIArchivesService(user).getOtherByEmployeeIds(ids), InsuranceArchivesOtherSchemePO.class)); } Map socialSchemePOMap = SalaryEntityUtil.convert2Map(socialList, k -> k.getPaymentOrganization() + "-" + k.getEmployeeId()); Map fundSchemePOMap = SalaryEntityUtil.convert2Map(fundList, k -> k.getPaymentOrganization() + "-" + k.getEmployeeId()); Map otherSchemePOMap = SalaryEntityUtil.convert2Map(otherList, k -> k.getPaymentOrganization() + "-" + k.getEmployeeId()); insuranceArchivesEmployeePOS.forEach(item -> { InsuranceArchivesSocialSchemePO socialItem = socialSchemePOMap.get(item.getPaymentOrganization() + "-" + item.getEmployeeId()); InsuranceArchivesFundSchemePO fundItem = fundSchemePOMap.get(item.getPaymentOrganization() + "-" + item.getEmployeeId()); InsuranceArchivesOtherSchemePO otherItem = otherSchemePOMap.get(item.getPaymentOrganization() + "-" + item.getEmployeeId()); Map map = new HashMap<>(); map.put("employeeName", item.getUserName()); map.put("employeeId", item.getEmployeeId()); map.put("subcompanyName", item.getSubcompanyName()); 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 (welBaseDiffSign) { if (socialJson != null) { //查询该福利方案下开启缴纳的福利项 // List insuranceIdList = siArchivesBiz.payInsuranceIds(socialItem.getSocialSchemeId(), PaymentScopeEnum.SCOPE_PERSON.getValue()); List insuranceIdList = getSIArchivesService(user).payInsuranceIds(socialItem.getSocialSchemeId(), PaymentScopeEnum.SCOPE_PERSON.getValue()); socialJson.forEach((k, v) -> { if (insuranceIdList.contains(Long.valueOf(k))) { map.put(k + "per", v); } }); } Map socialComJson = JSON.parseObject(socialItem.getSocialPaymentComBaseString(), new TypeReference>() { }); if (socialComJson != null) { //查询该福利方案下开启缴纳的福利项 // List insuranceIdList = siArchivesBiz.payInsuranceIds(socialItem.getSocialSchemeId(),PaymentScopeEnum.SCOPE_COMPANY.getValue()); List insuranceIdList = getSIArchivesService(user).payInsuranceIds(socialItem.getSocialSchemeId(),PaymentScopeEnum.SCOPE_COMPANY.getValue()); socialComJson.forEach((k, v) -> { if (insuranceIdList.contains(Long.valueOf(k))) { map.put(k + "com", v); } }); } } else { if (socialJson != null) { //查询该福利方案下开启缴纳的福利项 List insuranceIdList = payInsuranceIds(socialItem.getSocialSchemeId()); socialJson.forEach((k, v) -> { if (insuranceIdList.contains(Long.valueOf(k))) { map.put(k, v); } }); } } 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 (welBaseDiffSign) { if (fundJson != null) { //查询该福利方案下开启缴纳的福利项 // List insuranceIdList = siArchivesBiz.payInsuranceIds(fundItem.getFundSchemeId(),PaymentScopeEnum.SCOPE_PERSON.getValue()); List insuranceIdList = getSIArchivesService(user).payInsuranceIds(fundItem.getFundSchemeId(),PaymentScopeEnum.SCOPE_PERSON.getValue()); fundJson.forEach((k, v) -> { if (insuranceIdList.contains(Long.valueOf(k))) { map.put(k + "per", v); } }); } Map fundComJson = JSON.parseObject(fundItem.getFundPaymentComBaseString(), new TypeReference>() { }); if (fundComJson != null) { //查询该福利方案下开启缴纳的福利项 // List insuranceIdList = siArchivesBiz.payInsuranceIds(fundItem.getFundSchemeId(),PaymentScopeEnum.SCOPE_COMPANY.getValue()); List insuranceIdList = getSIArchivesService(user).payInsuranceIds(fundItem.getFundSchemeId(),PaymentScopeEnum.SCOPE_COMPANY.getValue()); fundComJson.forEach((k, v) -> { if (insuranceIdList.contains(Long.valueOf(k))) { map.put(k + "com", v); } }); } } else { if (fundJson != null) { //查询该福利方案下开启缴纳的福利项 List insuranceIdList = payInsuranceIds(fundItem.getFundSchemeId()); fundJson.forEach((k, v) -> { if (insuranceIdList.contains(Long.valueOf(k))) { map.put(k, v); } }); } } 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 (welBaseDiffSign) { if (otherJson != null) { //查询该福利方案下开启缴纳的福利项 // List insuranceIdList = siArchivesBiz.payInsuranceIds(otherItem.getOtherSchemeId(),PaymentScopeEnum.SCOPE_PERSON.getValue()); List insuranceIdList = getSIArchivesService(user).payInsuranceIds(otherItem.getOtherSchemeId(),PaymentScopeEnum.SCOPE_PERSON.getValue()); otherJson.forEach((k, v) -> { if (insuranceIdList.contains(Long.valueOf(k))) { map.put(k + "per", v); } }); } Map otherComJson = JSON.parseObject(otherItem.getOtherPaymentComBaseString(), new TypeReference>() { }); if (otherComJson != null) { //查询该福利方案下开启缴纳的福利项 // List insuranceIdList = siArchivesBiz.payInsuranceIds(otherItem.getOtherSchemeId(),PaymentScopeEnum.SCOPE_COMPANY.getValue()); List insuranceIdList = getSIArchivesService(user).payInsuranceIds(otherItem.getOtherSchemeId(),PaymentScopeEnum.SCOPE_COMPANY.getValue()); otherComJson.forEach((k, v) -> { if (insuranceIdList.contains(Long.valueOf(k))) { map.put(k + "com", v); } }); } } else { if (otherJson != null) { //查询该福利方案下开启缴纳的福利项 List insuranceIdList = payInsuranceIds(otherItem.getOtherSchemeId()); otherJson.forEach((k, v) -> { if (insuranceIdList.contains(Long.valueOf(k))) { map.put(k, v); } }); } } map.put("otherStartTime", otherItem.getOtherStartTime()); map.put("otherEndTime", otherItem.getOtherEndTime()); } records.add(map); }); return records; } public List payInsuranceIds(Long socialSchemeId) { //查询该福利方案下开启缴纳的福利项 List detailPOS = getInsuranceSchemeDetailMapper().queryListBySchemeId(socialSchemeId); List insuranceIdList = new ArrayList<>(); if (detailPOS != null && detailPOS.size() > 0) { //开启缴纳的 insuranceIdList = detailPOS.stream().filter(f -> f.getIsPayment().equals(IsPaymentEnum.YES.getValue())).map(InsuranceSchemeDetailPO::getInsuranceId).collect(Collectors.toList()); } return insuranceIdList; } @Override public XSSFWorkbook export(InsuranceArchivesListParam param) { InsuranceArchivesListParam request = InsuranceArchivesListParam.builder().build(); 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 String sheetName; //表头 if (param.getRunStatuses().size() > 0) { if (param.getRunStatuses().contains(EmployeeStatusEnum.STAY_ADD.getValue()) && param.getRunStatuses().size() == 1) { sheetName = SalaryI18nUtil.getI18nLabel(85368, "社保福利档案导出" + "-" + EmployeeStatusEnum.STAY_ADD.getDefaultLabel()); } else if (param.getRunStatuses().contains(EmployeeStatusEnum.PAYING.getValue()) && param.getRunStatuses().contains(EmployeeStatusEnum.STAY_DEL.getValue()) && param.getRunStatuses().size() == 2) { sheetName = SalaryI18nUtil.getI18nLabel(85368, "社保福利档案导出" + "-" + "在缴员工"); } else if (param.getRunStatuses().contains(EmployeeStatusEnum.STAY_DEL.getValue()) && param.getRunStatuses().size() == 1) { sheetName = SalaryI18nUtil.getI18nLabel(85368, "社保福利档案导出" + "-" + EmployeeStatusEnum.STAY_DEL.getDefaultLabel()); } else if (param.getRunStatuses().contains(EmployeeStatusEnum.STOP_PAYMENT_FROM_ADD.getValue()) && param.getRunStatuses().contains(EmployeeStatusEnum.STOP_PAYMENT_FROM_DEL.getValue()) && param.getRunStatuses().size() == 2) { sheetName = SalaryI18nUtil.getI18nLabel(85368, "社保福利档案导出" + "-" + "停缴员工"); } else { sheetName = SalaryI18nUtil.getI18nLabel(85368, "社保福利档案导出"); } } else { sheetName = SalaryI18nUtil.getI18nLabel(85368, "社保福利档案导出"); } //工作簿数据 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); } //记录操作日志 LoggerContext loggerContext = new LoggerContext<>(); loggerContext.setUser(user); loggerContext.setOperateType(OperateTypeEnum.EXCEL_EXPORT.getValue()); loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(0, "福利档案导出")); loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(0, "福利档案导出")); SalaryElogConfig.siArchivesLoggerTemplate.write(loggerContext); //获取excel return ExcelUtilPlus.genWorkbookV2(rows, sheetName); } 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 = getInsuranceSchemeDetailMapper().queryInsuranceSchemeDetailList(id, IsPaymentEnum.YES.getValue()); return encryptUtil.decryptList(insuranceSchemeDetailPOS, InsuranceSchemeDetailPO.class); } public String queryInsuranceName(Long id) { ICategoryPO insuranceCategoryPO = getICategoryMapper().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(93910, "个税扣缴义务人"), "paymentOrganizationName")); list.add(new WeaTableColumn("150px", SalaryI18nUtil.getI18nLabel(0, "分部"), "subcompanyName")); 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(1933, "工号"), "jobNum")); 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) { // boolean welBaseDiffSign = siArchivesBiz.isDiffWelBase(); boolean welBaseDiffSign = getSIArchivesService(user).isDiffWelBase(); Map> result = new HashMap<>(); Set socialSet = new HashSet<>(); Set fundSet = new HashSet<>(); Set otherSet = new HashSet<>(); Set socialComSet = new HashSet<>(); Set fundComSet = new HashSet<>(); Set otherComSet = new HashSet<>(); insuranceArchivesEmployeePOS.forEach(item -> { List socialByEmployeeId = getSIArchivesService(user).getSocialByEmployeeIds(new ArrayList() {{ add(item.getEmployeeId()); }}); encryptUtil.decryptList(socialByEmployeeId, InsuranceArchivesSocialSchemePO.class); InsuranceArchivesSocialSchemePO socialItem = null; if (socialByEmployeeId.size() > 0) { socialItem = socialByEmployeeId.get(0); } InsuranceArchivesFundSchemePO fundItem = null; List fundByEmployeeId = getSIArchivesService(user).getFundByEmployeeIds(new ArrayList() {{ add(item.getEmployeeId()); }}); encryptUtil.decryptList(fundByEmployeeId, InsuranceArchivesFundSchemePO.class); if (fundByEmployeeId.size() > 0) { fundItem = fundByEmployeeId.get(0); } InsuranceArchivesOtherSchemePO otherItem = null; List otherByEmployeeId = getSIArchivesService(user).getOtherByEmployeeIds(new ArrayList() {{ add(item.getEmployeeId()); }}); encryptUtil.decryptList(otherByEmployeeId, InsuranceArchivesOtherSchemePO.class); 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 (welBaseDiffSign) { Map socialComJson = JSON.parseObject(socialItem.getSocialPaymentComBaseString(), new TypeReference>() { }); if (socialComJson != null) { socialComJson.forEach((k, v) -> socialComSet.add(k)); } } } if (fundItem != null) { Map fundJson = JSON.parseObject(fundItem.getFundPaymentBaseString(), new TypeReference>() { }); if (fundJson != null) { fundJson.forEach((k, v) -> fundSet.add(k)); } //如果需要区分个人和公司福利基数 if (welBaseDiffSign) { Map fundComJson = JSON.parseObject(fundItem.getFundPaymentComBaseString(), new TypeReference>() { }); if (fundComJson != null) { fundComJson.forEach((k, v) -> fundComSet.add(k)); } } } if (otherItem != null) { Map otherJson = JSON.parseObject(otherItem.getOtherPaymentBaseString(), new TypeReference>() { }); if (otherJson != null) { otherJson.forEach((k, v) -> otherSet.add(k)); } //如果需要区分个人和公司福利基数 if (welBaseDiffSign) { Map otherComJson = JSON.parseObject(otherItem.getOtherPaymentComBaseString(), new TypeReference>() { }); if (otherComJson != null) { otherComJson.forEach((k, v) -> otherComSet.add(k)); } } } }); Map socialMap = new HashMap<>(); Map socialComMap = 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); if (welBaseDiffSign) { socialSet.forEach(item -> { if (socialCollect.containsKey(Long.valueOf(item))) { socialMap.put(item + "per", socialCollect.get(Long.valueOf(item)).getInsuranceName() + SalaryI18nUtil.getI18nLabel(0, "申报基数") + SalaryI18nUtil.getI18nLabel(0,"个人")); } }); socialComSet.forEach(item -> { if (socialCollect.containsKey(Long.valueOf(item))) { socialComMap.put(item + "com", socialCollect.get(Long.valueOf(item)).getInsuranceName() + SalaryI18nUtil.getI18nLabel(0, "申报基数") + SalaryI18nUtil.getI18nLabel(0,"单位")); } }); } else { socialSet.forEach(item -> { if (socialCollect.containsKey(Long.valueOf(item))) { socialMap.put(item, socialCollect.get(Long.valueOf(item)).getInsuranceName() + SalaryI18nUtil.getI18nLabel(0, "申报基数")); } }); } Map fundMap = new HashMap<>(); Map fundComMap = 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); if (welBaseDiffSign) { fundSet.forEach(item -> { if (fundCollect.containsKey(Long.valueOf(item))) { fundMap.put(item + "per", fundCollect.get(Long.valueOf(item)).getInsuranceName() + SalaryI18nUtil.getI18nLabel(0, "申报基数") + SalaryI18nUtil.getI18nLabel(0,"个人")); } }); fundComSet.forEach(item -> { if (fundCollect.containsKey(Long.valueOf(item))) { fundComMap.put(item + "com", fundCollect.get(Long.valueOf(item)).getInsuranceName() + SalaryI18nUtil.getI18nLabel(0, "申报基数") + SalaryI18nUtil.getI18nLabel(0,"单位")); } }); } else { fundSet.forEach(item -> { if (fundCollect.containsKey(Long.valueOf(item))) { fundMap.put(item, fundCollect.get(Long.valueOf(item)).getInsuranceName() + SalaryI18nUtil.getI18nLabel(0, "申报基数")); } }); } Map otherMap = new HashMap<>(); Map otherComMap = 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); if (welBaseDiffSign) { otherSet.forEach(item -> { if (otherCollect.containsKey(Long.valueOf(item))) { otherMap.put(item + "per", otherCollect.get(Long.valueOf(item)).getInsuranceName() + SalaryI18nUtil.getI18nLabel(0, "申报基数") + SalaryI18nUtil.getI18nLabel(0,"个人")); } }); otherComSet.forEach(item -> { if (otherCollect.containsKey(Long.valueOf(item))) { otherComMap.put(item + "com", otherCollect.get(Long.valueOf(item)).getInsuranceName() + SalaryI18nUtil.getI18nLabel(0, "申报基数") + SalaryI18nUtil.getI18nLabel(0,"单位")); } }); } else { otherSet.forEach(item -> { if (otherCollect.containsKey(Long.valueOf(item))) { otherMap.put(item, otherCollect.get(Long.valueOf(item)).getInsuranceName() + SalaryI18nUtil.getI18nLabel(0, "申报基数")); } }); } // map根据key排序 LinkedHashMap socialMapWithAscKey = socialMap.entrySet().stream() .sorted(Map.Entry.comparingByKey()) .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue, (oldValue, newValue) -> oldValue, LinkedHashMap::new)); LinkedHashMap fundMapWithAscKey = fundMap.entrySet().stream() .sorted(Map.Entry.comparingByKey()) .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue, (oldValue, newValue) -> oldValue, LinkedHashMap::new)); LinkedHashMap otherMapWithAscKey = otherMap.entrySet().stream() .sorted(Map.Entry.comparingByKey()) .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue, (oldValue, newValue) -> oldValue, LinkedHashMap::new)); if (welBaseDiffSign) { LinkedHashMap socialComMapWithAscKey = socialComMap.entrySet().stream() .sorted(Map.Entry.comparingByKey()) .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue, (oldValue, newValue) -> oldValue, LinkedHashMap::new)); LinkedHashMap fundComMapWithAscKey = fundComMap.entrySet().stream() .sorted(Map.Entry.comparingByKey()) .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue, (oldValue, newValue) -> oldValue, LinkedHashMap::new)); LinkedHashMap otherComMapWithAscKey = otherComMap.entrySet().stream() .sorted(Map.Entry.comparingByKey()) .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue, (oldValue, newValue) -> oldValue, LinkedHashMap::new)); socialMapWithAscKey.putAll(socialComMapWithAscKey); fundMapWithAscKey.putAll(fundComMapWithAscKey); otherMapWithAscKey.putAll(otherComMapWithAscKey); } result.put(WelfareTypeEnum.SOCIAL_SECURITY.getValue(), socialMapWithAscKey); result.put(WelfareTypeEnum.ACCUMULATION_FUND.getValue(), fundMapWithAscKey); result.put(WelfareTypeEnum.OTHER.getValue(), otherMapWithAscKey); return result; } /** * 导入的数据插入到数据库中 */ @Override public Map preview(SIArchiveImportParam 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); } } /** * 导入的数据插入到数据库中 */ @Override public Map batchImportEbatch(SIArchiveImportParam param) { ValidUtil.doValidator(param); param.setProcess(false); if (StringUtils.isBlank(param.getRunStatus())) { throw new SalaryRunTimeException("福利档案执行状态未在导入条件设置中添加!"); } // List excelSheets = message.getBatchFile().getExcelSheets(); // 租户key // String tenantKey = message.getTenantKey().toLowerCase();EditSIArchiveAction //操作员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 = getSalaryEmployeeService(user).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, param); 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, param); // 发送导入回调信息 // 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, SIArchiveImportParam param) { boolean isError = false; String runStatus = param.getRunStatus(); // String userName = (String) singleAccount.get(0).get(SalaryI18nUtil.getI18nLabel(85429, "姓名")); // String deparmentName = (String) singleAccount.get(1).get(SalaryI18nUtil.getI18nLabel(86185, "部门")); // String mobile = (String) singleAccount.get(2).get(SalaryI18nUtil.getI18nLabel(86186, "手机号")); // String userStatus = (String) singleAccount.get(3).get(SalaryI18nUtil.getI18nLabel(86187, "员工状态")); // String workcode = (String) singleAccount.get(4).get(SalaryI18nUtil.getI18nLabel(86317, "工号")); Map userNameMap = findElement(singleAccount, SalaryI18nUtil.getI18nLabel(85429, "姓名")); Map deparmentNameMap = findElement(singleAccount, SalaryI18nUtil.getI18nLabel(86185, "部门")); Map mobileMap = findElement(singleAccount, SalaryI18nUtil.getI18nLabel(86186, "手机号")); Map userStatusMap = findElement(singleAccount, SalaryI18nUtil.getI18nLabel(86187, "员工状态")); Map workcodeMap = findElement(singleAccount, SalaryI18nUtil.getI18nLabel(86317, "工号")); Map employeeIdMap = findElement(singleAccount, SalaryI18nUtil.getI18nLabel(86187, "员工id")); String userName = (String) userNameMap.get(SalaryI18nUtil.getI18nLabel(85429, "姓名")); String deparmentName = (String) deparmentNameMap.get(SalaryI18nUtil.getI18nLabel(86185, "部门")); String mobile = (String) mobileMap.get(SalaryI18nUtil.getI18nLabel(86186, "手机号")); String userStatus = (String) userStatusMap.get(SalaryI18nUtil.getI18nLabel(86187, "员工状态")); String workcode = (String) workcodeMap.get(SalaryI18nUtil.getI18nLabel(86317, "工号")); String toAddEmployeeId; if (employeeIdMap.isEmpty()) { toAddEmployeeId = null; } else { toAddEmployeeId = employeeIdMap.get(SalaryI18nUtil.getI18nLabel(86187, "员工id")).toString(); } Long addEmployeeId = StringUtils.isNotBlank(toAddEmployeeId) ? Long.valueOf(toAddEmployeeId) : null; //查询对于人员信息导入筛选的全局配置 SalarySysConfPO salarySysConfPO = getSalarySysConfMapper().getOneByCode("matchEmployeeMode"); String confValue = (salarySysConfPO != null && salarySysConfPO.getConfValue() != null && !"".equals(salarySysConfPO.getConfValue())) ? salarySysConfPO.getConfValue() : "0"; String rowIndex = "第" + index + "行"; List employees = new ArrayList<>(); //当新增数据中包含员工id信息时,直接根据员工id获取员工信息 if (addEmployeeId == null) { //仅在全局人员筛选配置为“0”时,才对用户名、部门名称、手机号有要求 if (StringUtils.isBlank(userName) && StringUtils.isBlank(deparmentName) && StringUtils.isBlank(mobile) && "0".equals(confValue)) { Map errorMessageMap = Maps.newHashMap(); errorMessageMap.put("message", rowIndex + " 用户名、部门名称、手机号" + SalaryI18nUtil.getI18nLabel(100303, "不能同时为空")); excelComments.add(errorMessageMap); isError = true; } //筛选导入人员信息可以在人力资源池中匹配到的人员信息 employees = getSalaryEmployeeService(user).matchImportEmployee(employeeByIds, userName, deparmentName, mobile, workcode, null); } else { employees = employeeByIds.stream().filter(f -> f.getEmployeeId().equals(addEmployeeId)).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; return isError; } } } 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; } //根据导入接口附带的runStatus来区分待增员导入和正在缴纳导入 if (StringUtils.isNotBlank(runStatus) && runStatus.equals(EmployeeStatusEnum.PAYING.getValue())) { if (StringUtils.isBlank((String) socialStartTimeMap.get(SalaryI18nUtil.getI18nLabel(91319, "社保起始缴纳月"))) && StringUtils.isBlank((String) fundStartTimeMap.get(SalaryI18nUtil.getI18nLabel(91483, "公积金起始缴纳月"))) && StringUtils.isBlank((String) otherStartTimeMap.get(SalaryI18nUtil.getI18nLabel(91490, "其他福利起始缴纳月"))) ) { 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 (!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()) { if (param.isProcess()) { //流程中自动将人员添加进个税扣缴义务人中 TaxAgentManageRangeSaveParam.TaxAgentSubAdminRangeTargetParam taxAgentSubAdminRangeTargetParam = new TaxAgentManageRangeSaveParam.TaxAgentSubAdminRangeTargetParam(); taxAgentSubAdminRangeTargetParam.setTargetId(employeeId); taxAgentSubAdminRangeTargetParam.setTargetType(TargetTypeEnum.EMPLOYEE); TaxAgentRangeSaveParam taxAgentRangeSaveParam = new TaxAgentRangeSaveParam(); taxAgentRangeSaveParam.setTaxAgentId(paymentOrgId); taxAgentRangeSaveParam.setIncludeType(1); taxAgentRangeSaveParam.setEmployeeStatus(Arrays.asList("0", "1", "2", "3", "4", "5", "6")); taxAgentRangeSaveParam.setTargetParams(Collections.singletonList(taxAgentSubAdminRangeTargetParam)); taxAgentRangeSaveParam.setSync(true); param.setTaxAgentRanges(Collections.singletonList(taxAgentRangeSaveParam)); } else { 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.replace("/", "-"))) { Map errorMessageMap = Maps.newHashMap(); errorMessageMap.put("message", rowIndex + SalaryI18nUtil.getI18nLabel(100315, "社保起始缴纳时间格式错误,正确格式为YYYY-MM或者yyyy-MM-dd")); 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.replace("/", "-"))) { Map errorMessageMap = Maps.newHashMap(); errorMessageMap.put("message", rowIndex + SalaryI18nUtil.getI18nLabel(100316, "社保最后缴纳时间格式错误,正确格式为YYYY-MM或者yyyy-MM-dd")); 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.replace("/", "-"))) { Map errorMessageMap = Maps.newHashMap(); errorMessageMap.put("message", rowIndex + SalaryI18nUtil.getI18nLabel(100317, "公积金起始缴纳时间格式错误,正确格式为YYYY-MM或者yyyy-MM-dd")); 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.replace("/", "-"))) { Map errorMessageMap = Maps.newHashMap(); errorMessageMap.put("message", rowIndex + SalaryI18nUtil.getI18nLabel(100319, "公积金最后缴纳时间格式错误,正确格式为YYYY-MM或者yyyy-MM-dd")); 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.replace("/", "-"))) { Map errorMessageMap = Maps.newHashMap(); errorMessageMap.put("message", rowIndex + SalaryI18nUtil.getI18nLabel(100320, "其他福利起始缴纳时间格式错误,正确格式为YYYY-MM或者yyyy-MM-dd")); 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.replace("/", "-"))) { Map errorMessageMap = Maps.newHashMap(); errorMessageMap.put("message", rowIndex + SalaryI18nUtil.getI18nLabel(100321, "其他福利最后缴纳时间格式错误,正确格式为YYYY-MM或者yyyy-MM-dd")); 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 if (StringUtils.isNotBlank((String) socialMap.get(SalaryI18nUtil.getI18nLabel(91323, "社保方案名称"))) && schemeNameIdMap.get((String) socialMap.get(SalaryI18nUtil.getI18nLabel(91323, "社保方案名称"))) != null && !getInsuranceSchemeMapper().getById(schemeNameIdMap.get((String) socialMap.get(SalaryI18nUtil.getI18nLabel(91323, "社保方案名称")))).getWelfareType().equals(WelfareTypeEnum.SOCIAL_SECURITY.getValue())) { Map errorMessageMap = Maps.newHashMap(); errorMessageMap.put("message", rowIndex + SalaryI18nUtil.getI18nLabel(100322, "社保方案不属于社保福利类型")); excelComments.add(errorMessageMap); isError = true; } else if (StringUtils.isNotBlank((String) socialMap.get(SalaryI18nUtil.getI18nLabel(91323, "社保方案名称"))) && StringUtils.isBlank(socialStartMonth)) { 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 if (StringUtils.isNotBlank((String) fundMap.get(SalaryI18nUtil.getI18nLabel(91485, "公积金方案名称"))) && schemeNameIdMap.get((String) fundMap.get(SalaryI18nUtil.getI18nLabel(91485, "公积金方案名称"))) != null && !getInsuranceSchemeMapper().getById(schemeNameIdMap.get((String) fundMap.get(SalaryI18nUtil.getI18nLabel(91485, "公积金方案名称")))).getWelfareType().equals(WelfareTypeEnum.ACCUMULATION_FUND.getValue())) { Map errorMessageMap = Maps.newHashMap(); errorMessageMap.put("message", rowIndex + SalaryI18nUtil.getI18nLabel(100322, "公积金方案不属于公积金福利类型")); excelComments.add(errorMessageMap); isError = true; } else if (StringUtils.isNotBlank((String) fundMap.get(SalaryI18nUtil.getI18nLabel(91485, "公积金方案名称"))) && StringUtils.isBlank(fundStartMonth)) { Map errorMessageMap = Maps.newHashMap(); errorMessageMap.put("message", rowIndex + SalaryI18nUtil.getI18nLabel(100322, "公积金方案已设置,但未设置公积金起始缴纳时间!")); excelComments.add(errorMessageMap); isError = true; } else { insuranceArchivesFundSchemePO = buildFundPO(employeeId, welfareMap, singleAccount, schemeNameIdMap, paymentNameIdMap, creator); } if (StringUtils.isNotBlank((String) otherMap.get(SalaryI18nUtil.getI18nLabel(91496, "其他福利方案名称"))) && schemeNameIdMap.get((String) otherMap.get(SalaryI18nUtil.getI18nLabel(91496, "其他福利方案名称"))) == null) { Map errorMessageMap = Maps.newHashMap(); errorMessageMap.put("message", rowIndex + SalaryI18nUtil.getI18nLabel(100324, "其他福利方案不存在")); excelComments.add(errorMessageMap); isError = true; } else if (StringUtils.isNotBlank((String) otherMap.get(SalaryI18nUtil.getI18nLabel(91496, "其他福利方案名称"))) && schemeNameIdMap.get((String) otherMap.get(SalaryI18nUtil.getI18nLabel(91496, "其他福利方案名称"))) != null && !getInsuranceSchemeMapper().getById(schemeNameIdMap.get((String) otherMap.get(SalaryI18nUtil.getI18nLabel(91496, "其他福利方案名称")))).getWelfareType().equals(WelfareTypeEnum.OTHER.getValue())) { Map errorMessageMap = Maps.newHashMap(); errorMessageMap.put("message", rowIndex + SalaryI18nUtil.getI18nLabel(100322, "其他福利方案不属于其他福利类型")); excelComments.add(errorMessageMap); isError = true; } else if (StringUtils.isNotBlank((String) otherMap.get(SalaryI18nUtil.getI18nLabel(91496, "其他福利方案名称"))) && StringUtils.isBlank(otherStartMonth)) { Map errorMessageMap = Maps.newHashMap(); errorMessageMap.put("message", rowIndex + SalaryI18nUtil.getI18nLabel(100322, "其他福利方案已设置,但未设置其他福利起始缴纳时间!")); excelComments.add(errorMessageMap); isError = true; } else { insuranceArchivesOtherSchemePO = buildOtherPO(employeeId, welfareMap, singleAccount, schemeNameIdMap, paymentNameIdMap, creator); } /**************校验申报基数**************/ // boolean welBaseDiffSign = siArchivesBiz.isDiffWelBase(); boolean welBaseDiffSign = getSIArchivesService(user).isDiffWelBase(); if (welBaseDiffSign) { for (Map.Entry entry : welfareMap.entrySet()) { String keyPerName = entry.getValue() + SalaryI18nUtil.getI18nLabel(0, "申报基数") + SalaryI18nUtil.getI18nLabel(0, "个人"); String keyComName = entry.getValue() + SalaryI18nUtil.getI18nLabel(0, "申报基数") + SalaryI18nUtil.getI18nLabel(0, "单位"); String numberPerValue = findElement(singleAccount, keyPerName).get(keyPerName) == null ? "" : findElement(singleAccount, keyPerName).get(keyPerName).toString(); String numberComValue = findElement(singleAccount, keyComName).get(keyComName) == null ? "" : findElement(singleAccount, keyComName).get(keyComName).toString(); if (!"".equals(numberPerValue) && !NumberUtils.isParsable(numberPerValue)) { Map errorMessageMap = Maps.newHashMap(); errorMessageMap.put("message", rowIndex + keyPerName + SalaryI18nUtil.getI18nLabel(0, "请输入数字")); excelComments.add(errorMessageMap); isError = true; } if (!"".equals(numberComValue) && !NumberUtils.isParsable(numberComValue)) { Map errorMessageMap = Maps.newHashMap(); errorMessageMap.put("message", rowIndex + keyComName + SalaryI18nUtil.getI18nLabel(0, "请输入数字")); excelComments.add(errorMessageMap); isError = true; } } } else { for (Map.Entry entry : welfareMap.entrySet()) { String keyName = entry.getValue() + SalaryI18nUtil.getI18nLabel(0, "申报基数"); String numberValue = findElement(singleAccount, keyName).get(keyName) == null ? "" : findElement(singleAccount, keyName).get(keyName).toString(); if (!"".equals(numberValue) && !NumberUtils.isParsable(numberValue)) { Map errorMessageMap = Maps.newHashMap(); errorMessageMap.put("message", rowIndex + keyName + SalaryI18nUtil.getI18nLabel(0, "请输入数字")); excelComments.add(errorMessageMap); isError = true; } } } //生成福利档案基础信息数据 InsuranceArchivesBaseInfoPO insuranceArchivesBaseInfoPO = buildBaseInfoPO(employeeId, singleAccount, paymentNameIdMap, creator, runStatus, employees.get(0).isExtEmp()); //判断是否福利档案导入时,不符合上下限的基数调整为上限/下限 SalarySysConfPO welBaseAutoAdjust = getSalarySysConfService(user).getOneByCode(WEL_BASE_AUTO_ADJUST); boolean welBaseAutoAdjustSign = welBaseAutoAdjust != null && welBaseAutoAdjust.getConfValue().equals(OpenEnum.OPEN.getValue()); if (!isError && !welBaseAutoAdjustSign) { insuranceArchivesAccountPO.setSocial(insuranceArchivesSocialSchemePO); insuranceArchivesAccountPO.setFund(insuranceArchivesFundSchemePO); insuranceArchivesAccountPO.setOther(insuranceArchivesOtherSchemePO); insuranceArchivesAccountPO.setBaseInfo(insuranceArchivesBaseInfoPO); //校验福利基数是否符合上下限要求, Boolean socialCheckBase = getSIArchivesService(user).checkWelBaseLimit(insuranceArchivesSocialSchemePO.getSocialSchemeId(), insuranceArchivesSocialSchemePO.getSocialPaymentBaseString(), PaymentScopeEnum.SCOPE_PERSON.getValue()); Boolean fundCheckBase = getSIArchivesService(user).checkWelBaseLimit(insuranceArchivesFundSchemePO.getFundSchemeId(), insuranceArchivesFundSchemePO.getFundPaymentBaseString(), PaymentScopeEnum.SCOPE_PERSON.getValue()); Boolean otherCheckBase = getSIArchivesService(user).checkWelBaseLimit(insuranceArchivesOtherSchemePO.getOtherSchemeId(), insuranceArchivesOtherSchemePO.getOtherPaymentBaseString(), PaymentScopeEnum.SCOPE_PERSON.getValue()); Boolean socialCheckComBase = true; Boolean fundCheckComBase = true; Boolean otherCheckComBase = true; if (welBaseDiffSign) { socialCheckComBase = getSIArchivesService(user).checkWelBaseLimit(insuranceArchivesSocialSchemePO.getSocialSchemeId(), insuranceArchivesSocialSchemePO.getSocialPaymentComBaseString(), PaymentScopeEnum.SCOPE_COMPANY.getValue()); fundCheckComBase = getSIArchivesService(user).checkWelBaseLimit(insuranceArchivesFundSchemePO.getFundSchemeId(), insuranceArchivesFundSchemePO.getFundPaymentComBaseString(), PaymentScopeEnum.SCOPE_COMPANY.getValue()); otherCheckComBase = getSIArchivesService(user).checkWelBaseLimit(insuranceArchivesOtherSchemePO.getOtherSchemeId(), insuranceArchivesOtherSchemePO.getOtherPaymentComBaseString(), PaymentScopeEnum.SCOPE_COMPANY.getValue()); } if (socialCheckBase && fundCheckBase && otherCheckBase && socialCheckComBase && fundCheckComBase && otherCheckComBase) { insuranceArchivesAccountPOS.add(insuranceArchivesAccountPO); } else { String checkMessage = "该条数据中"; if (!socialCheckBase || !socialCheckComBase) { checkMessage = checkMessage + "社保福利基数、"; } if (!fundCheckBase || !fundCheckComBase) { checkMessage = checkMessage + "公积金福利基数、"; } if (!otherCheckBase || !otherCheckComBase) { checkMessage = checkMessage + "其他福利基数、"; } checkMessage = checkMessage.substring(0, checkMessage.length() - 1); Map errorMessageMap = Maps.newHashMap(); errorMessageMap.put("message", rowIndex + SalaryI18nUtil.getI18nLabel(100312, checkMessage + "数值超出相关福利方案的基数上下限要求,不可导入!")); excelComments.add(errorMessageMap); isError = true; } } else if (!isError) { //校验福利基数是否符合上下限要求,不符合上下限的基数调整为上限 /下限 String newSocialPaymentBaseString = getSIArchivesService(user).checkAndBuildWelBaseWithLimit(insuranceArchivesSocialSchemePO.getSocialSchemeId(), insuranceArchivesSocialSchemePO.getSocialPaymentBaseString(), PaymentScopeEnum.SCOPE_PERSON.getValue()); String newFundPaymentBaseString = getSIArchivesService(user).checkAndBuildWelBaseWithLimit(insuranceArchivesFundSchemePO.getFundSchemeId(), insuranceArchivesFundSchemePO.getFundPaymentBaseString(), PaymentScopeEnum.SCOPE_PERSON.getValue()); String newOtherPaymentBaseString = getSIArchivesService(user).checkAndBuildWelBaseWithLimit(insuranceArchivesOtherSchemePO.getOtherSchemeId(), insuranceArchivesOtherSchemePO.getOtherPaymentBaseString(), PaymentScopeEnum.SCOPE_PERSON.getValue()); insuranceArchivesSocialSchemePO.setSocialPaymentBaseString(newSocialPaymentBaseString); insuranceArchivesFundSchemePO.setFundPaymentBaseString(newFundPaymentBaseString); insuranceArchivesOtherSchemePO.setOtherPaymentBaseString(newOtherPaymentBaseString); if (welBaseDiffSign) { String newSocialPaymentComBaseString = getSIArchivesService(user).checkAndBuildWelBaseWithLimit(insuranceArchivesSocialSchemePO.getSocialSchemeId(), insuranceArchivesSocialSchemePO.getSocialPaymentComBaseString(), PaymentScopeEnum.SCOPE_COMPANY.getValue()); String newFundPaymentComBaseString = getSIArchivesService(user).checkAndBuildWelBaseWithLimit(insuranceArchivesFundSchemePO.getFundSchemeId(), insuranceArchivesFundSchemePO.getFundPaymentComBaseString(), PaymentScopeEnum.SCOPE_COMPANY.getValue()); String newOtherPaymentComBaseString = getSIArchivesService(user).checkAndBuildWelBaseWithLimit(insuranceArchivesOtherSchemePO.getOtherSchemeId(), insuranceArchivesOtherSchemePO.getOtherPaymentComBaseString(), PaymentScopeEnum.SCOPE_COMPANY.getValue()); insuranceArchivesSocialSchemePO.setSocialPaymentComBaseString(newSocialPaymentComBaseString); insuranceArchivesFundSchemePO.setFundPaymentComBaseString(newFundPaymentComBaseString); insuranceArchivesOtherSchemePO.setOtherPaymentComBaseString(newOtherPaymentComBaseString); } insuranceArchivesAccountPO.setSocial(insuranceArchivesSocialSchemePO); insuranceArchivesAccountPO.setFund(insuranceArchivesFundSchemePO); insuranceArchivesAccountPO.setOther(insuranceArchivesOtherSchemePO); insuranceArchivesAccountPO.setBaseInfo(insuranceArchivesBaseInfoPO); 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; } Long paymentOrg = paymentNameIdMap.get((String) findElement(singleAccount, SalaryI18nUtil.getI18nLabel(91325, "个税扣缴义务人")).get(SalaryI18nUtil.getI18nLabel(91325, "个税扣缴义务人"))); List oldSocialSchemeInfos = getSocialSchemeMapper().getSocialByEmployeeIdAndPayOrg(InsuranceArchivesEmployeePO .builder() .employeeId(employeeId) .paymentOrganization(paymentOrg) .build()); InsuranceArchivesSocialSchemePO oldSocialSchemePO = new InsuranceArchivesSocialSchemePO(); InsuranceArchivesSocialSchemePO insuranceArchivesSocialSchemePO = new InsuranceArchivesSocialSchemePO(); //设置社保账号、起始缴纳月、最后缴纳月 String socialAccount = (String) findElement(singleAccount, SalaryI18nUtil.getI18nLabel(91324, "社保账号")).get(SalaryI18nUtil.getI18nLabel(91324, "社保账号")); Long socialSchemeId = schemeNameIdMap.get((String) findElement(singleAccount, SalaryI18nUtil.getI18nLabel(91323, "社保方案名称")).get(SalaryI18nUtil.getI18nLabel(91323, "社保方案名称"))); HashMap oldSocialBaseMap = new HashMap<>(); HashMap oldSocialComBaseMap = new HashMap<>(); if (oldSocialSchemeInfos.size() > 0) { oldSocialSchemePO = oldSocialSchemeInfos.get(0); encryptUtil.decrypt(oldSocialSchemePO, InsuranceArchivesSocialSchemePO.class); BeanUtils.copyProperties(oldSocialSchemePO, insuranceArchivesSocialSchemePO); //社保基数 oldSocialBaseMap = JSON.parseObject(oldSocialSchemePO.getSocialPaymentBaseString(), new HashMap().getClass()); oldSocialComBaseMap = JSON.parseObject(oldSocialSchemePO.getSocialPaymentComBaseString(), new HashMap().getClass()); } insuranceArchivesSocialSchemePO.setId(IdGenerator.generate()); if (StringUtils.isNotBlank(socialAccount)) { insuranceArchivesSocialSchemePO.setSocialAccount(socialAccount); } if (socialSchemeId != null) { insuranceArchivesSocialSchemePO.setSocialSchemeId(socialSchemeId); } String socialStartDate = (String) findElement(singleAccount, SalaryI18nUtil.getI18nLabel(91319, "社保起始缴纳月")).get(SalaryI18nUtil.getI18nLabel(91319, "社保起始缴纳月")); if (StringUtils.isNotBlank(socialStartDate) && socialStartDate.length() >= 7) { socialStartDate = socialStartDate.substring(0, 7).replace("/", "-"); insuranceArchivesSocialSchemePO.setSocialStartTime(socialStartDate); } String socialEndDate = (String) findElement(singleAccount, SalaryI18nUtil.getI18nLabel(91320, "社保最后缴纳月")).get(SalaryI18nUtil.getI18nLabel(91320, "社保最后缴纳月")); if (StringUtils.isNotBlank(socialEndDate) && socialEndDate.length() >= 7) { socialEndDate = socialEndDate.substring(0, 7).replace("/", "-"); insuranceArchivesSocialSchemePO.setSocialEndTime(socialEndDate); } insuranceArchivesSocialSchemePO.setTenantKey(""); insuranceArchivesSocialSchemePO.setWelfareType(WelfareTypeEnum.SOCIAL_SECURITY.getValue()); insuranceArchivesSocialSchemePO.setUpdateTime(new Date()); insuranceArchivesSocialSchemePO.setPaymentOrganization(paymentOrg); 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()); encryptUtil.decryptList(insuranceSchemeDetailPOS, InsuranceSchemeDetailPO.class); // boolean welBaseDiffSign = siArchivesBiz.isDiffWelBase(); boolean welBaseDiffSign = getSIArchivesService(user).isDiffWelBase(); if (CollectionUtils.isNotEmpty(insuranceSchemeDetailPOS)) { List insuranceIds = insuranceSchemeDetailPOS.stream().map(InsuranceSchemeDetailPO::getInsuranceId).collect(Collectors.toList()); HashMap socialPaymentBase = new HashMap<>(); HashMap socialPaymentComBase = new HashMap<>(); for (Long insuranceId : insuranceIds) { if (StringUtils.isBlank(welfareMap.get(insuranceId))) { continue; } if (welBaseDiffSign) { Map itemPerMap = findElement(singleAccount, welfareMap.get(insuranceId) + SalaryI18nUtil.getI18nLabel(0, "申报基数") + SalaryI18nUtil.getI18nLabel(0, "个人")); if (itemPerMap != null) { String itemValue = (String) itemPerMap.get(welfareMap.get(insuranceId) + SalaryI18nUtil.getI18nLabel(0, "申报基数") + SalaryI18nUtil.getI18nLabel(0, "个人")); if (StringUtils.isNotBlank(itemValue)) { socialPaymentBase.put(String.valueOf(insuranceId), itemValue); } else if (oldSocialBaseMap != null && StringUtils.isNotBlank(oldSocialBaseMap.get(String.valueOf(insuranceId)))) { socialPaymentBase.put(String.valueOf(insuranceId), oldSocialBaseMap.get(String.valueOf(insuranceId))); } } Map itemComMap = findElement(singleAccount, welfareMap.get(insuranceId) + SalaryI18nUtil.getI18nLabel(0, "申报基数") + SalaryI18nUtil.getI18nLabel(0, "单位")); if (itemComMap != null) { String itemValue = (String) itemComMap.get(welfareMap.get(insuranceId) + SalaryI18nUtil.getI18nLabel(0, "申报基数") + SalaryI18nUtil.getI18nLabel(0, "单位")); if (StringUtils.isNotBlank(itemValue)) { socialPaymentComBase.put(String.valueOf(insuranceId), itemValue); } else if (oldSocialComBaseMap != null && StringUtils.isNotBlank(oldSocialComBaseMap.get(String.valueOf(insuranceId)))) { socialPaymentComBase.put(String.valueOf(insuranceId), oldSocialComBaseMap.get(String.valueOf(insuranceId))); } } insuranceArchivesSocialSchemePO.setSocialPaymentComBaseString(JSON.toJSONString(socialPaymentComBase)); } else { Map itemMap = findElement(singleAccount, welfareMap.get(insuranceId) + SalaryI18nUtil.getI18nLabel(0, "申报基数")); if (itemMap != null) { String itemValue = (String) itemMap.get(welfareMap.get(insuranceId) + SalaryI18nUtil.getI18nLabel(0, "申报基数")); if (StringUtils.isNotBlank(itemValue)) { socialPaymentBase.put(String.valueOf(insuranceId), itemValue); } else if (oldSocialBaseMap != null && StringUtils.isNotBlank(oldSocialBaseMap.get(String.valueOf(insuranceId)))) { socialPaymentBase.put(String.valueOf(insuranceId), oldSocialBaseMap.get(String.valueOf(insuranceId))); } } } } 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; } Long paymentOrg = paymentNameIdMap.get((String) findElement(singleAccount, SalaryI18nUtil.getI18nLabel(91325, "个税扣缴义务人")).get(SalaryI18nUtil.getI18nLabel(91325, "个税扣缴义务人"))); List oldFundSchemeInfos = getFundSchemeMapper().getFundByEmployeeIdAndPayOrg(InsuranceArchivesEmployeePO .builder() .employeeId(employeeId) .paymentOrganization(paymentOrg) .build()); InsuranceArchivesFundSchemePO oldFundSchemePO = new InsuranceArchivesFundSchemePO(); InsuranceArchivesFundSchemePO insuranceArchivesFundSchemePO = new InsuranceArchivesFundSchemePO(); //设置公积金账号、起始缴纳月、最后缴纳月 String fundAccount = (String) findElement(singleAccount, SalaryI18nUtil.getI18nLabel(91486, "公积金账号")).get(SalaryI18nUtil.getI18nLabel(91486, "公积金账号")); String supplementFundAccount = (String) findElement(singleAccount, SalaryI18nUtil.getI18nLabel(91487, "补充公积金账号")).get(SalaryI18nUtil.getI18nLabel(91487, "补充公积金账号")); Long fundSchemeId = schemeNameIdMap.get((String) findElement(singleAccount, SalaryI18nUtil.getI18nLabel(91485, "公积金方案名称")).get(SalaryI18nUtil.getI18nLabel(91485, "公积金方案名称"))); HashMap oldFundBaseMap = new HashMap<>(); HashMap oldFundComBaseMap = new HashMap<>(); if (oldFundSchemeInfos.size() > 0) { oldFundSchemePO = oldFundSchemeInfos.get(0); encryptUtil.decrypt(oldFundSchemePO, InsuranceArchivesFundSchemePO.class); BeanUtils.copyProperties(oldFundSchemePO, insuranceArchivesFundSchemePO); //社保基数 oldFundBaseMap = JSON.parseObject(oldFundSchemePO.getFundPaymentBaseString(), new HashMap().getClass()); oldFundComBaseMap = JSON.parseObject(oldFundSchemePO.getFundPaymentComBaseString(), new HashMap().getClass()); } insuranceArchivesFundSchemePO.setId(IdGenerator.generate()); insuranceArchivesFundSchemePO.setCreator(creator); insuranceArchivesFundSchemePO.setTenantKey(""); insuranceArchivesFundSchemePO.setCreateTime(new Date()); insuranceArchivesFundSchemePO.setUpdateTime(new Date()); if (fundSchemeId != null) { insuranceArchivesFundSchemePO.setFundSchemeId(fundSchemeId); } if (StringUtils.isNotBlank(fundAccount)) { insuranceArchivesFundSchemePO.setFundAccount(fundAccount); } if (StringUtils.isNotBlank(supplementFundAccount)) { insuranceArchivesFundSchemePO.setSupplementFundAccount(supplementFundAccount); } String fundStartDate = (String) findElement(singleAccount, SalaryI18nUtil.getI18nLabel(91483, "公积金起始缴纳月")).get(SalaryI18nUtil.getI18nLabel(91483, "公积金起始缴纳月")); if (StringUtils.isNotBlank(fundStartDate) && fundStartDate.length() >= 7) { fundStartDate = fundStartDate.substring(0, 7).replace("/", "-"); insuranceArchivesFundSchemePO.setFundStartTime(fundStartDate); } String fundEndDate = (String) findElement(singleAccount, SalaryI18nUtil.getI18nLabel(91484, "公积金最后缴纳月")).get(SalaryI18nUtil.getI18nLabel(91484, "公积金最后缴纳月")); if (StringUtils.isNotBlank(fundEndDate) && fundEndDate.length() >= 7) { fundEndDate = fundEndDate.substring(0, 7).replace("/", "-"); insuranceArchivesFundSchemePO.setFundEndTime(fundEndDate); } insuranceArchivesFundSchemePO.setWelfareType(WelfareTypeEnum.ACCUMULATION_FUND.getValue()); insuranceArchivesFundSchemePO.setPaymentOrganization(paymentOrg); 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()); encryptUtil.decryptList(insuranceSchemeDetailPOS, InsuranceSchemeDetailPO.class); // boolean welBaseDiffSign = siArchivesBiz.isDiffWelBase(); boolean welBaseDiffSign = getSIArchivesService(user).isDiffWelBase(); if (CollectionUtils.isNotEmpty(insuranceSchemeDetailPOS)) { List insuranceIds = insuranceSchemeDetailPOS.stream().map(InsuranceSchemeDetailPO::getInsuranceId).collect(Collectors.toList()); HashMap fundPaymentBase = new HashMap<>(); HashMap fundPaymentComBase = new HashMap<>(); for (Long insuranceId : insuranceIds) { if (StringUtils.isBlank(welfareMap.get(insuranceId))) { continue; } if (welBaseDiffSign) { Map itemPerMap = findElement(singleAccount, welfareMap.get(insuranceId) + SalaryI18nUtil.getI18nLabel(0, "申报基数") + SalaryI18nUtil.getI18nLabel(0, "个人")); if (itemPerMap != null) { String itemValue = (String) itemPerMap.get(welfareMap.get(insuranceId) + SalaryI18nUtil.getI18nLabel(0, "申报基数") + SalaryI18nUtil.getI18nLabel(0, "个人")); if (StringUtils.isNotBlank(itemValue)) { fundPaymentBase.put(String.valueOf(insuranceId), itemValue); } else if (oldFundBaseMap != null && StringUtils.isNotBlank(oldFundBaseMap.get(String.valueOf(insuranceId)))) { fundPaymentBase.put(String.valueOf(insuranceId), oldFundBaseMap.get(String.valueOf(insuranceId))); } } Map itemComMap = findElement(singleAccount, welfareMap.get(insuranceId) + SalaryI18nUtil.getI18nLabel(0, "申报基数") + SalaryI18nUtil.getI18nLabel(0, "单位")); if (itemComMap != null) { String itemValue = (String) itemComMap.get(welfareMap.get(insuranceId) + SalaryI18nUtil.getI18nLabel(0, "申报基数") + SalaryI18nUtil.getI18nLabel(0, "单位")); if (StringUtils.isNotBlank(itemValue)) { fundPaymentComBase.put(String.valueOf(insuranceId), itemValue); } else if (oldFundComBaseMap != null && StringUtils.isNotBlank(oldFundComBaseMap.get(String.valueOf(insuranceId)))) { fundPaymentComBase.put(String.valueOf(insuranceId), oldFundComBaseMap.get(String.valueOf(insuranceId))); } } insuranceArchivesFundSchemePO.setFundPaymentComBaseString(JSON.toJSONString(fundPaymentComBase)); } else { Map itemMap = findElement(singleAccount, welfareMap.get(insuranceId) + SalaryI18nUtil.getI18nLabel(0, "申报基数")); if (itemMap != null) { String itemValue = (String) itemMap.get(welfareMap.get(insuranceId) + SalaryI18nUtil.getI18nLabel(0, "申报基数")); if (StringUtils.isNotBlank(itemValue)) { fundPaymentBase.put(String.valueOf(insuranceId), itemValue); } else if (oldFundBaseMap != null && StringUtils.isNotBlank(oldFundBaseMap.get(String.valueOf(insuranceId)))) { fundPaymentBase.put(String.valueOf(insuranceId), oldFundBaseMap.get(String.valueOf(insuranceId))); } } } } insuranceArchivesFundSchemePO.setFundPaymentBaseString(JSON.toJSONString(fundPaymentBase)); } return insuranceArchivesFundSchemePO; } public InsuranceArchivesOtherSchemePO buildOtherPO(Long employeeId, Map welfareMap, List> singleAccount, Map schemeNameIdMap, Map paymentNameIdMap, Long creator) { if (employeeId == null) { return null; }Long paymentOrg = paymentNameIdMap.get((String) findElement(singleAccount, SalaryI18nUtil.getI18nLabel(91325, "个税扣缴义务人")).get(SalaryI18nUtil.getI18nLabel(91325, "个税扣缴义务人"))); List oldOtherSchemeInfos = getOtherSchemeMapper().getOtherByEmployeeIdAndPayOrg(InsuranceArchivesEmployeePO .builder() .employeeId(employeeId) .paymentOrganization(paymentOrg) .build()); InsuranceArchivesOtherSchemePO oldOtherSchemePO = new InsuranceArchivesOtherSchemePO(); InsuranceArchivesOtherSchemePO insuranceArchivesOtherSchemePO = new InsuranceArchivesOtherSchemePO(); //设置其他福利方案、起始缴纳月、最后缴纳月 Long otherSchemeId = schemeNameIdMap.get((String) findElement(singleAccount, SalaryI18nUtil.getI18nLabel(91496, "其他福利方案名称")).get(SalaryI18nUtil.getI18nLabel(91496, "其他福利方案名称"))); HashMap oldOtherBaseMap = new HashMap<>(); HashMap oldOtherComBaseMap = new HashMap<>(); if (oldOtherSchemeInfos.size() > 0) { oldOtherSchemePO = oldOtherSchemeInfos.get(0); encryptUtil.decrypt(oldOtherSchemePO, InsuranceArchivesOtherSchemePO.class); BeanUtils.copyProperties(oldOtherSchemePO, insuranceArchivesOtherSchemePO); //社保基数 oldOtherBaseMap = JSON.parseObject(oldOtherSchemePO.getOtherPaymentBaseString(), new HashMap().getClass()); oldOtherComBaseMap = JSON.parseObject(oldOtherSchemePO.getOtherPaymentComBaseString(), new HashMap().getClass()); } insuranceArchivesOtherSchemePO.setId(IdGenerator.generate()); insuranceArchivesOtherSchemePO.setCreator(creator); insuranceArchivesOtherSchemePO.setTenantKey(""); insuranceArchivesOtherSchemePO.setCreateTime(new Date()); insuranceArchivesOtherSchemePO.setUpdateTime(new Date()); if (otherSchemeId != null) { insuranceArchivesOtherSchemePO.setOtherSchemeId(otherSchemeId); } String otherStartDate = (String) findElement(singleAccount, SalaryI18nUtil.getI18nLabel(91490, "其他福利起始缴纳月")).get(SalaryI18nUtil.getI18nLabel(91490, "其他福利起始缴纳月")); if (StringUtils.isNotBlank(otherStartDate) && otherStartDate.length() >= 7) { otherStartDate = otherStartDate.substring(0, 7).replace("/", "-"); insuranceArchivesOtherSchemePO.setOtherStartTime(otherStartDate); } String otherEndDate = (String) findElement(singleAccount, SalaryI18nUtil.getI18nLabel(91494, "其他福利最后缴纳月")).get(SalaryI18nUtil.getI18nLabel(91494, "其他福利最后缴纳月")); if (StringUtils.isNotBlank(otherEndDate) && otherEndDate.length() >= 7) { otherEndDate = otherEndDate.substring(0, 7).replace("/", "-"); insuranceArchivesOtherSchemePO.setOtherEndTime(otherEndDate); } insuranceArchivesOtherSchemePO.setPaymentOrganization(paymentOrg); 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()); encryptUtil.decryptList(insuranceSchemeDetailPOS, InsuranceSchemeDetailPO.class); // boolean welBaseDiffSign = siArchivesBiz.isDiffWelBase(); boolean welBaseDiffSign = getSIArchivesService(user).isDiffWelBase(); if (CollectionUtils.isNotEmpty(insuranceSchemeDetailPOS)) { List insuranceIds = insuranceSchemeDetailPOS.stream().map(InsuranceSchemeDetailPO::getInsuranceId).collect(Collectors.toList()); HashMap otherPaymentBase = new HashMap<>(); HashMap otherPaymentComBase = new HashMap<>(); for (Long insuranceId : insuranceIds) { if (StringUtils.isBlank(welfareMap.get(insuranceId))) { continue; } if (welBaseDiffSign) { Map itemPerMap = findElement(singleAccount, welfareMap.get(insuranceId) + SalaryI18nUtil.getI18nLabel(0, "申报基数") + SalaryI18nUtil.getI18nLabel(0, "个人")); if (itemPerMap != null) { String itemValue = (String) itemPerMap.get(welfareMap.get(insuranceId) + SalaryI18nUtil.getI18nLabel(0, "申报基数") + SalaryI18nUtil.getI18nLabel(0, "个人")); if (StringUtils.isNotBlank(itemValue)) { otherPaymentBase.put(String.valueOf(insuranceId), itemValue); } else if (oldOtherBaseMap != null && StringUtils.isNotBlank(oldOtherBaseMap.get(String.valueOf(insuranceId)))) { otherPaymentBase.put(String.valueOf(insuranceId), oldOtherBaseMap.get(String.valueOf(insuranceId))); } } Map itemComMap = findElement(singleAccount, welfareMap.get(insuranceId) + SalaryI18nUtil.getI18nLabel(0, "申报基数") + SalaryI18nUtil.getI18nLabel(0, "单位")); if (itemComMap != null) { String itemValue = (String) itemComMap.get(welfareMap.get(insuranceId) + SalaryI18nUtil.getI18nLabel(0, "申报基数") + SalaryI18nUtil.getI18nLabel(0, "单位")); if (StringUtils.isNotBlank(itemValue)) { otherPaymentComBase.put(String.valueOf(insuranceId), itemValue); } else if (oldOtherComBaseMap != null && StringUtils.isNotBlank(oldOtherComBaseMap.get(String.valueOf(insuranceId)))) { otherPaymentComBase.put(String.valueOf(insuranceId), oldOtherComBaseMap.get(String.valueOf(insuranceId))); } } insuranceArchivesOtherSchemePO.setOtherPaymentComBaseString(JSON.toJSONString(otherPaymentComBase)); } else { Map itemMap = findElement(singleAccount, welfareMap.get(insuranceId) + SalaryI18nUtil.getI18nLabel(0, "申报基数")); if (itemMap != null) { String itemValue = (String) itemMap.get(welfareMap.get(insuranceId) + SalaryI18nUtil.getI18nLabel(0, "申报基数")); if (StringUtils.isNotBlank(itemValue)) { otherPaymentBase.put(String.valueOf(insuranceId), itemValue); } else if (oldOtherBaseMap != null && StringUtils.isNotBlank(oldOtherBaseMap.get(String.valueOf(insuranceId)))) { otherPaymentBase.put(String.valueOf(insuranceId), oldOtherBaseMap.get(String.valueOf(insuranceId))); } } } } insuranceArchivesOtherSchemePO.setOtherPaymentBaseString(JSON.toJSONString(otherPaymentBase)); } return insuranceArchivesOtherSchemePO; } public InsuranceArchivesBaseInfoPO buildBaseInfoPO(Long employeeId, List> singleAccount, Map paymentNameIdMap, Long creator, String runStatus, Boolean isExtEmp) { if (employeeId == null) { return null; } InsuranceArchivesBaseInfoPO insuranceArchivesBaseInfoPO = new InsuranceArchivesBaseInfoPO(); insuranceArchivesBaseInfoPO.setEmployeeId(employeeId); insuranceArchivesBaseInfoPO.setId(IdGenerator.generate()); insuranceArchivesBaseInfoPO.setCreateTime(new Date()); insuranceArchivesBaseInfoPO.setDeleteType(0); insuranceArchivesBaseInfoPO.setCreator(creator); insuranceArchivesBaseInfoPO.setRunStatus(runStatus); insuranceArchivesBaseInfoPO.setUpdateTime(new Date()); insuranceArchivesBaseInfoPO.setTenantKey(SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY); insuranceArchivesBaseInfoPO.setPaymentOrganization(paymentNameIdMap.get((String) findElement(singleAccount, SalaryI18nUtil.getI18nLabel(91497, "个税扣缴义务人")).get(SalaryI18nUtil.getI18nLabel(91497, "个税扣缴义务人")))); if (isExtEmp) { insuranceArchivesBaseInfoPO.setEmployeeType(1); } return insuranceArchivesBaseInfoPO; } public void handleImportData(List insuranceArchivesAccountPOS, SIArchiveImportParam param) { List baseInfoPOS = insuranceArchivesAccountPOS.stream().filter(Objects::nonNull).map(InsuranceArchivesAccountPO::getBaseInfo).collect(Collectors.toList()); //去除员工id+个税扣缴义务人下重复的数据 baseInfoPOS = baseInfoPOS.stream() .collect(Collectors.collectingAndThen(Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(f -> f.getPaymentOrganization() + "-" + f.getEmployeeId()))), ArrayList::new)); //老数据map Map oldSocialArchiveMap = getSocialArchiveMap(baseInfoPOS); Map oldFundArchiveMap = getFundArchiveMap(baseInfoPOS); Map oldOtherArchiveMap = getOtherArchiveMap(baseInfoPOS); //导入社保档案 List socialSchemePOS = insuranceArchivesAccountPOS.stream().filter(Objects::nonNull).map(InsuranceArchivesAccountPO::getSocial).collect(Collectors.toList()); if (CollectionUtils.isNotEmpty(socialSchemePOS)) { //去除员工id+个税扣缴义务人下重复的数据 socialSchemePOS = socialSchemePOS.stream() .collect(Collectors.collectingAndThen(Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(f -> f.getPaymentOrganization() + "-" + f.getEmployeeId()))), ArrayList::new)); //生成福利档案基数调整历史记录 // List adjustSocialHistoryPOList = siArchivesBiz.dealSocialBaseAdjustInfoList(socialSchemePOS, (long) user.getUID()); List adjustSocialHistoryPOList = getSIArchivesService(user).dealSocialBaseAdjustInfoList(socialSchemePOS, (long) user.getUID()); //根据人员id和个税扣缴义务人id删除对应旧档案 socialSchemePOS.forEach(getSocialSchemeMapper()::deleteByEmployeeIdAndPayOrg); //新建新档案 List insuranceArchivesSocialSchemePOS = encryptUtil.encryptList(socialSchemePOS, InsuranceArchivesSocialSchemePO.class); List> partition = Lists.partition(insuranceArchivesSocialSchemePOS, 100); partition.forEach(getSocialSchemeMapper()::batchSave); //新建福利档案基数调整历史记录 // siArchivesBiz.batchInsertAdjustHistory(adjustSocialHistoryPOList, user.getUID()); getSIArchivesService(user).batchInsertAdjustHistory(adjustSocialHistoryPOList); } //导入公积金档案 List fundSchemePOS = insuranceArchivesAccountPOS.stream().filter(Objects::nonNull).map(InsuranceArchivesAccountPO::getFund).collect(Collectors.toList()); if (CollectionUtils.isNotEmpty(fundSchemePOS)) { //去除员工id+个税扣缴义务人下重复的数据 fundSchemePOS = fundSchemePOS.stream() .collect(Collectors.collectingAndThen(Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(f -> f.getPaymentOrganization() + "-" + f.getEmployeeId()))), ArrayList::new)); //生成福利档案基数调整历史记录 // List adjustFundHistoryPOList = siArchivesBiz.dealFundBaseAdjustInfoList(fundSchemePOS, (long) user.getUID()); List adjustFundHistoryPOList = getSIArchivesService(user).dealFundBaseAdjustInfoList(fundSchemePOS, (long) user.getUID()); //根据人员id和个税扣缴义务人id删除对应档案 fundSchemePOS.forEach(getFundSchemeMapper()::deleteByEmployeeIdAndPayOrg); //新建新档案 List insuranceArchivesFundSchemePOS = encryptUtil.encryptList(fundSchemePOS, InsuranceArchivesFundSchemePO.class); List> partition = Lists.partition(insuranceArchivesFundSchemePOS, 100); partition.forEach(getFundSchemeMapper()::batchSave); //新建福利档案基数调整历史记录 // siArchivesBiz.batchInsertAdjustHistory(adjustFundHistoryPOList, user.getUID()); getSIArchivesService(user).batchInsertAdjustHistory(adjustFundHistoryPOList); } //导入其他福利档案 List otherSchemePOS = insuranceArchivesAccountPOS.stream().filter(Objects::nonNull).map(InsuranceArchivesAccountPO::getOther).collect(Collectors.toList()); if (CollectionUtils.isNotEmpty(otherSchemePOS)) { //去除员工id+个税扣缴义务人下重复的数据 otherSchemePOS = otherSchemePOS.stream() .collect(Collectors.collectingAndThen(Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(f -> f.getPaymentOrganization() + "-" + f.getEmployeeId()))), ArrayList::new)); //生成福利档案基数调整历史记录 // List adjustOtherHistoryPOList = siArchivesBiz.dealOtherBaseAdjustInfoList(otherSchemePOS, (long) user.getUID()); List adjustOtherHistoryPOList = getSIArchivesService(user).dealOtherBaseAdjustInfoList(otherSchemePOS, (long) user.getUID()); //根据人员id和个税扣缴义务人id删除对应档案 otherSchemePOS.forEach(getOtherSchemeMapper()::deleteByEmployeeIdAndPayOrg); //新建新档案 List insuranceArchivesOtherSchemePOS = encryptUtil.encryptList(otherSchemePOS, InsuranceArchivesOtherSchemePO.class); List> partition = Lists.partition(insuranceArchivesOtherSchemePOS, 100); partition.forEach(getOtherSchemeMapper()::batchSave); //新建福利档案基数调整历史记录 // siArchivesBiz.batchInsertAdjustHistory(adjustOtherHistoryPOList, user.getUID()); getSIArchivesService(user).batchInsertAdjustHistory(adjustOtherHistoryPOList); } //导入福利档案基础信息 // List baseInfoPOS = insuranceArchivesAccountPOS.stream().filter(Objects::nonNull).map(InsuranceArchivesAccountPO::getBaseInfo).collect(Collectors.toList()); if (CollectionUtils.isNotEmpty(baseInfoPOS)) { // baseInfoPOS = baseInfoPOS.stream().collect(Collectors.collectingAndThen(Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(InsuranceArchivesBaseInfoPO::getEmployeeId))), ArrayList::new)); // //去除员工id+个税扣缴义务人下重复的数据 // baseInfoPOS = baseInfoPOS.stream() // .collect(Collectors.collectingAndThen(Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(f -> f.getPaymentOrganization() + "-" + f.getEmployeeId()))), ArrayList::new)); //根据人员id和个税扣缴义务人id删除对应档案 baseInfoPOS.forEach(getInsuranceBaseInfoMapper()::deleteByEmployeeIdAndPayOrg); //分批批量删除 List baseInfoEmployeeIds = baseInfoPOS.stream().map(InsuranceArchivesBaseInfoPO::getEmployeeId).collect(Collectors.toList()); // List> employeeIdPartition = Lists.partition(baseInfoEmployeeIds, 100); // employeeIdPartition.forEach(getInsuranceBaseInfoMapper()::batchDeleteByEmployeeIds); //查询目标人员的剩余的福利档案基础信息(社保、公积金、其他福利档案id) // List moreBaseInfoPOS = getInsuranceBaseInfoMapper().getInsuranceBaseInfoListByInsuranceDetail(baseInfoEmployeeIds); List moreBaseInfoPOS = new ArrayList<>(); List> partitionInfo = Lists.partition((List) baseInfoEmployeeIds, 1000); partitionInfo.forEach(part -> moreBaseInfoPOS.addAll( getInsuranceBaseInfoMapper().getInsuranceBaseInfoListByInsuranceDetail(part))); List newInsuranceArchivesBaseInfoList = new ArrayList<>(); //设置社保、公积金、其他福利档案id for (InsuranceArchivesBaseInfoPO po : baseInfoPOS) { InsuranceArchivesBaseInfoPO moreBaseInfo = moreBaseInfoPOS.stream().filter(s -> Objects.equals(s.getEmployeeId(), po.getEmployeeId()) && Objects.equals(s.getPaymentOrganization(), po.getPaymentOrganization())).findFirst().orElse(null); po.setSocialArchivesId(moreBaseInfo.getSocialArchivesId()); po.setFundArchivesId(moreBaseInfo.getFundArchivesId()); po.setOtherArchivesId(moreBaseInfo.getOtherArchivesId()); newInsuranceArchivesBaseInfoList.add(po); } //分批批量入库 List> partition = Lists.partition(newInsuranceArchivesBaseInfoList, 100); partition.forEach(getInsuranceBaseInfoMapper()::batchSave); //记录操作日志 //获取新数据map和老数据map Map newSocialArchiveMap = getSocialArchiveMap(baseInfoPOS); Map newFundArchiveMap = getFundArchiveMap(baseInfoPOS); Map newOtherArchiveMap = getOtherArchiveMap(baseInfoPOS); newInsuranceArchivesBaseInfoList.forEach(targetPO -> { InsuranceArchivesSocialSchemePO targetSocialDetail = newSocialArchiveMap.get(targetPO.getPaymentOrganization() + "-" + targetPO.getEmployeeId()); InsuranceArchivesFundSchemePO targetFundDetail = newFundArchiveMap.get(targetPO.getPaymentOrganization() + "-" + targetPO.getEmployeeId()); InsuranceArchivesOtherSchemePO targetOtherDetail = newOtherArchiveMap.get(targetPO.getPaymentOrganization() + "-" + targetPO.getEmployeeId()); DataCollectionEmployee empInfo = getEmployMapper().getEmployeeById(targetPO.getEmployeeId()); TaxAgentPO taxAgentInfo = getTaxAgentMapper().getById(targetPO.getPaymentOrganization()); if (targetSocialDetail != null) { LoggerContext loggerContext = new LoggerContext<>(); loggerContext.setUser(user); loggerContext.setTargetId(String.valueOf(targetPO.getId())); loggerContext.setTargetName(taxAgentInfo.getName() + "-" + empInfo.getUsername()); loggerContext.setOperateType(OperateTypeEnum.UPDATE.getValue()); loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(0, "福利档案-社保明细导入")); loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(0, "福利档案-社保明细导入") + ": " + taxAgentInfo.getName() + "-" + empInfo.getUsername()); loggerContext.setOldValues(oldSocialArchiveMap.get(targetPO.getPaymentOrganization() + "-" + targetPO.getEmployeeId())); loggerContext.setNewValues(targetSocialDetail); SalaryElogConfig.siArchivesLoggerTemplate.write(loggerContext); } if (targetFundDetail != null) { LoggerContext loggerContext = new LoggerContext<>(); loggerContext.setUser(user); loggerContext.setTargetId(String.valueOf(targetPO.getId())); loggerContext.setTargetName(taxAgentInfo.getName() + "-" + empInfo.getUsername()); loggerContext.setOperateType(OperateTypeEnum.UPDATE.getValue()); loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(0, "福利档案-公积金明细导入")); loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(0, "福利档案-公积金明细导入") + ": " + taxAgentInfo.getName() + "-" + empInfo.getUsername()); loggerContext.setOldValues(oldFundArchiveMap.get(targetPO.getPaymentOrganization() + "-" + targetPO.getEmployeeId())); loggerContext.setNewValues(targetFundDetail); SalaryElogConfig.siArchivesLoggerTemplate.write(loggerContext); } if (targetOtherDetail != null) { LoggerContext loggerContext = new LoggerContext<>(); loggerContext.setUser(user); loggerContext.setTargetId(String.valueOf(targetPO.getId())); loggerContext.setTargetName(taxAgentInfo.getName() + "-" + empInfo.getUsername()); loggerContext.setOperateType(OperateTypeEnum.UPDATE.getValue()); loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(0, "福利档案-其他福利明细导入")); loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(0, "福利档案-其他福利明细导入") + ": " + taxAgentInfo.getName() + "-" + empInfo.getUsername()); loggerContext.setOldValues(oldOtherArchiveMap.get(targetPO.getPaymentOrganization() + "-" + targetPO.getEmployeeId())); loggerContext.setNewValues(targetOtherDetail); SalaryElogConfig.siArchivesLoggerTemplate.write(loggerContext); } }); } //新增人员范围(会自动生成人员档案) if (CollectionUtils.isNotEmpty(param.getTaxAgentRanges())) { param.getTaxAgentRanges().forEach(getTaxAgentManageRangeService(user)::save); } } private Map getSocialArchiveMap(List baseInfoPOS) { Map map = new HashMap<>(); if (baseInfoPOS.size() > 0) { //遍历待更新的福利档案数据,对每组档案生成基数调整记录(基数单元未变化则忽略) for (InsuranceArchivesBaseInfoPO po : baseInfoPOS) { List archiveList = getSocialSchemeMapper().getSocialByEmployeeIdAndPayOrg(InsuranceArchivesEmployeePO.builder() .paymentOrganization(po.getPaymentOrganization()).employeeId(po.getEmployeeId()).build()); if (archiveList.size() == 1) { //新增调整记录,变更 encryptUtil.decryptList(archiveList, InsuranceArchivesSocialSchemePO.class); map.put(po.getPaymentOrganization() + "-" + po.getEmployeeId(), archiveList.get(0)); } else if (archiveList.size() > 1) { throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0,"社保档案存在冗余数据!")); } } } return map; } private Map getFundArchiveMap(List baseInfoPOS) { Map map = new HashMap<>(); if (baseInfoPOS.size() > 0) { //遍历待更新的福利档案数据,对每组档案生成基数调整记录(基数单元未变化则忽略) for (InsuranceArchivesBaseInfoPO po : baseInfoPOS) { List archiveList = getFundSchemeMapper().getFundByEmployeeIdAndPayOrg(InsuranceArchivesEmployeePO.builder() .paymentOrganization(po.getPaymentOrganization()).employeeId(po.getEmployeeId()).build()); if (archiveList.size() == 1) { //新增调整记录,变更 encryptUtil.decryptList(archiveList, InsuranceArchivesFundSchemePO.class); map.put(po.getPaymentOrganization() + "-" + po.getEmployeeId(), archiveList.get(0)); } else if (archiveList.size() > 1) { throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0,"公积金档案存在冗余数据!")); } } } return map; } private Map getOtherArchiveMap(List baseInfoPOS) { Map map = new HashMap<>(); if (baseInfoPOS.size() > 0) { //遍历待更新的福利档案数据,对每组档案生成基数调整记录(基数单元未变化则忽略) for (InsuranceArchivesBaseInfoPO po : baseInfoPOS) { List archiveList = getOtherSchemeMapper().getOtherByEmployeeIdAndPayOrg(InsuranceArchivesEmployeePO.builder() .paymentOrganization(po.getPaymentOrganization()).employeeId(po.getEmployeeId()).build()); if (archiveList.size() == 1) { //新增调整记录,变更 encryptUtil.decryptList(archiveList, InsuranceArchivesOtherSchemePO.class); map.put(po.getPaymentOrganization() + "-" + po.getEmployeeId(), archiveList.get(0)); } else if (archiveList.size() > 1) { throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0,"社保档案存在冗余数据!")); } } } return map; } /** * 导出档案导入所需要的模板,可根据开关选择是否导出现有的档案数据 * * @param param 是否导出带档案数据的模板 */ @Override public XSSFWorkbook exportTemplate(InsuranceArchivesListParam param) { return getSIImportService().exportTemplate(param); } /** * 校验待新增的社保福利档案数据 */ @Override public Map checkSIArchiveAdd(SIArchiveImportParam param) { param.setAddData(false); return processAddSIArchive(param); } /** * 新增社保福利档案 */ @Override public Map addSIArchive(SIArchiveImportParam param) { param.setAddData(true); return processAddSIArchive(param); } private Map processAddSIArchive(SIArchiveImportParam param) { ValidUtil.doValidator(param); param.setProcess(true); if (StringUtils.isBlank(param.getRunStatus())) { throw new SalaryRunTimeException("福利档案执行状态未在导入条件设置中添加!"); } // 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(); // 流程处理,默认不开启分权 Boolean openDevolution = false; 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 = getSalaryEmployeeService(user).listEmployee(); int total = 0; int index = 0; int successCount = 0; int errorCount = 0; // 待导入数据 List insuranceArchivesAccountPOS = new ArrayList<>(); // 待导入数据 InputStream fileInputStream = null; try { // 表头 List headers = new ArrayList<>(); if (param.getImportDatas().size() > 0) { Map getHeadersMap = param.getImportDatas().get(0); for (Map.Entry entry : getHeadersMap.entrySet()) { headers.add(entry.getKey()); } } else { throw new SalaryRunTimeException("新增福利档案数据为空!"); } // 错误sheet数据 List> errorData = new LinkedList<>(); // 错误提示 List> excelComments = new LinkedList<>(); // 处理数值 List> data = param.getImportDatas(); 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, param); 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); // } // 数据入库处理 if (param.isAddData()) { handleImportData(insuranceArchivesAccountPOS, param); } // 发送导入回调信息 // 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); } } @Override public List updateSchemeDetail(List schemeDetailList) { List errorInfo = new ArrayList<>(); if (schemeDetailList.size() > 0) { log.info("待处理方明明细数量:{}", schemeDetailList.size()); List toDealSchemeDetailList = schemeDetailList.stream().filter(f -> f.getPrimaryId() != null).collect(Collectors.toList()); log.info("未设置方案id的方明明细无法处理,数量:{}", schemeDetailList.size() - toDealSchemeDetailList.size()); //按照方案id分组 Map> schemeDetailMap = toDealSchemeDetailList .stream().collect(Collectors.groupingBy(InsuranceSchemeDetailUpdateParam::getPrimaryId)); schemeDetailMap.forEach((k, v) -> { updateSchemeDetailByPrimaryId(k, v, errorInfo); }); } return errorInfo; } public List updateSchemeDetailByPrimaryId(Long primaryId, List schemeDetailList, List errorInfo) { try { Map schemeDetailUpdateMap = new HashMap<>(); schemeDetailList.forEach(f -> { schemeDetailUpdateMap.put(f.getInsuranceId() + "-" + f.getPaymentScope(), f); }); // List schemeDetailPOS = siSchemeBiz.listByPrimaryId(primaryId); List schemeDetailPOS = listByPrimaryId(primaryId); //替换修改字段 if (schemeDetailPOS.size() > 0) { schemeDetailPOS.forEach(f -> { if (schemeDetailUpdateMap.get(f.getInsuranceId() + "-" + f.getPaymentScope()) != null) { InsuranceSchemeDetailUpdateParam schemeDetailUpdateParam = schemeDetailUpdateMap.get(f.getInsuranceId() + "-" + f.getPaymentScope()); BeanUtils.copyProperties(schemeDetailUpdateParam, f); f.setUpdateTime(new Date()); } }); encryptUtil.encryptList(schemeDetailPOS, InsuranceSchemeDetailPO.class); schemeDetailPOS.forEach(getInsuranceSchemeDetailMapper()::updateAll); } else { errorInfo.add("方案id:" + primaryId + "," + "表中不存在方案明细数据"); } } catch (Exception e) { errorInfo.add("方案id:" + primaryId + "," + e.getMessage()); } return errorInfo; } /*****以下代码为SISchemeBiz中逻辑迁移,旨在减少Biz类的使用*****/ /** * 获取社保方案 * * @param id * @param welfareTypeEnum * @return */ public InsuranceSchemeFormVO getForm(Long id, WelfareTypeEnum welfareTypeEnum) { InsuranceSchemeDTO insuranceSchemeDTO = getSchemeFormDTO(welfareTypeEnum, id); List insuranceSchemeDetailDTOList = getSchemeDetailFormDTO(welfareTypeEnum, id); return InsuranceSchemeFormVO.builder().schemeBatch(insuranceSchemeDTO).schemeDetailList(insuranceSchemeDetailDTOList).build(); } /** * 获取方案主表信息 新建|详情 * * @param welfareTypeEnum 福利类型 * @param id 方案主键id * @return form */ private InsuranceSchemeDTO getSchemeFormDTO(WelfareTypeEnum welfareTypeEnum, Long id) { InsuranceSchemeDTO insuranceSchemeDTO = InsuranceSchemeDTO.builder().paymentType(PaymentTypeEnum.SCHEME_TOWN).welfareType(welfareTypeEnum).build(); if (id != null) { InsuranceSchemePO insuranceSchemePO = getById(id); SalaryAssert.notNull(insuranceSchemePO, SalaryI18nUtil.getI18nLabel(0,"福利方案不存在")); //BeanUtils.copyProperties(insuranceSchemePO, insuranceSchemeDTO); insuranceSchemeDTO.setId(insuranceSchemePO.getId()); insuranceSchemeDTO.setPaymentArea(insuranceSchemePO.getPaymentArea()); insuranceSchemeDTO.setRemarks(insuranceSchemePO.getRemarks()); insuranceSchemeDTO.setSchemeName(insuranceSchemePO.getSchemeName()); insuranceSchemeDTO.setPaymentType(SalaryEnumUtil.enumMatchByValue(insuranceSchemePO.getPaymentType(), PaymentTypeEnum.values(), PaymentTypeEnum.class)); insuranceSchemeDTO.setWelfareType(welfareTypeEnum); insuranceSchemeDTO.setSharedType(StringUtils.isBlank(insuranceSchemePO.getSharedType()) ? "0" : insuranceSchemePO.getSharedType()); insuranceSchemeDTO.setTaxAgentIds(insuranceSchemePO.getTaxAgentIds()); } return insuranceSchemeDTO; } /** * 获取方案明细表集合 新建|详情 * * @param welfareTypeEnum 福利类型 * @param id 方案主键id * @return form */ public List getSchemeDetailFormDTO(WelfareTypeEnum welfareTypeEnum, Long id) { List insuranceCategoryPOS = listByWelfareType(welfareTypeEnum.getValue()); List insuranceSchemeDetailDTOList = new ArrayList<>(); insuranceCategoryPOS.forEach(item -> { PaymentScopeEnum[] paymentScopeEnums = SalaryEnumUtil.stringToEnums(item.getPaymentScope(), ","); Arrays.stream(paymentScopeEnums).forEach(e -> { InsuranceSchemeDetailDTO insuranceSchemeDetailDTO = InsuranceSchemeDetailDTO.builder().build(); InsuranceSchemeDetailPO insuranceSchemeDetailPO = getByPPI(id, e.getValue(), item.getId()); if (insuranceSchemeDetailPO == null) { insuranceSchemeDetailDTO = InsuranceSchemeDetailDTO.builder() .id((long) (Math.random() * 10000)) .insuranceId(item.getId()) .insuranceName(item.getInsuranceName()) .paymentScope(e.getDefaultLabel()) .rententionRule(String.valueOf(RententionRuleEnum.ROUND.getValue())) .cycleSetting("000000000000") .paymentCycle("0") .accountType("0") .build(); if (Objects.equals(item.getDataType(), DataTypeEnum.SYSTEM.getValue())) { insuranceSchemeDetailDTO.setIsPayment(true); } else { insuranceSchemeDetailDTO.setIsPayment(false); } } else { //BeanUtils.copyProperties(insuranceSchemeDetailPO, insuranceSchemeDetailDTO); insuranceSchemeDetailDTO.setEffectiveTime(insuranceSchemeDetailPO.getEffectiveTime()); insuranceSchemeDetailDTO.setExpirationTime(insuranceSchemeDetailPO.getExpirationTime()); insuranceSchemeDetailDTO.setId(insuranceSchemeDetailPO.getId()); insuranceSchemeDetailDTO.setInsuranceId(insuranceSchemeDetailPO.getInsuranceId()); insuranceSchemeDetailDTO.setPaymentScopeValue(insuranceSchemeDetailPO.getPaymentScope()); insuranceSchemeDetailDTO.setPrimaryId(insuranceSchemeDetailPO.getPrimaryId()); insuranceSchemeDetailDTO.setValidNum(insuranceSchemeDetailPO.getValidNum()); if (insuranceSchemeDetailPO.getIsPayment() != null) { insuranceSchemeDetailDTO.setIsPayment(Objects.equals(insuranceSchemeDetailPO.getIsPayment(), IsPaymentEnum.YES.getValue())); } if (insuranceSchemeDetailPO.getPaymentCycle() != null) { insuranceSchemeDetailDTO.setPaymentCycle(insuranceSchemeDetailPO.getPaymentCycle() + ""); } else { insuranceSchemeDetailDTO.setPaymentCycle("0"); } if (insuranceSchemeDetailPO.getAccountType() != null) { insuranceSchemeDetailDTO.setAccountType(insuranceSchemeDetailPO.getAccountType() + ""); } else { insuranceSchemeDetailDTO.setAccountType("0"); } if (insuranceSchemeDetailPO.getCycleSetting() == null) { insuranceSchemeDetailDTO.setCycleSetting("000000000000"); } else { insuranceSchemeDetailDTO.setCycleSetting(insuranceSchemeDetailPO.getCycleSetting()); } if (StringUtils.isNotBlank(insuranceSchemeDetailPO.getUpperLimit())) { BigDecimal bigDecimal = new BigDecimal(insuranceSchemeDetailPO.getUpperLimit()); insuranceSchemeDetailDTO.setUpperLimit(numberCheck(bigDecimal.toPlainString()) ? null : bigDecimal); } if (StringUtils.isNotBlank(insuranceSchemeDetailPO.getLowerLimit())) { BigDecimal bigDecimal = new BigDecimal(insuranceSchemeDetailPO.getLowerLimit()); insuranceSchemeDetailDTO.setLowerLimit(numberCheck(bigDecimal.toPlainString()) ? null : bigDecimal); } if (StringUtils.isNotBlank(insuranceSchemeDetailPO.getPaymentProportion())) { BigDecimal bigDecimal = new BigDecimal(insuranceSchemeDetailPO.getPaymentProportion()); insuranceSchemeDetailDTO.setPaymentProportion(numberCheck(bigDecimal.toPlainString()) ? null : bigDecimal); } if (StringUtils.isNotBlank(insuranceSchemeDetailPO.getFixedCost())) { BigDecimal bigDecimal = new BigDecimal(insuranceSchemeDetailPO.getFixedCost()); insuranceSchemeDetailDTO.setFixedCost(numberCheck(bigDecimal.toPlainString()) ? null : bigDecimal); } insuranceSchemeDetailDTO.setInsuranceName(item.getInsuranceName()); insuranceSchemeDetailDTO.setRententionRule(String.valueOf(insuranceSchemeDetailPO.getRententionRule())); insuranceSchemeDetailDTO.setPaymentScope(e.getDefaultLabel()); } insuranceSchemeDetailDTO.setPaymentScopeValue(e.getValue()); insuranceSchemeDetailDTOList.add(insuranceSchemeDetailDTO); }); }); return insuranceSchemeDetailDTOList; } /** * 社保方案基础信息主表 * * @param id * @return */ public InsuranceSchemePO getById(Long id) { InsuranceSchemePO insuranceSchemePO = getInsuranceSchemeMapper().getById(id); return insuranceSchemePO; } /** * 根据福利类型获取 * * @param welfareType * @return */ public List listByWelfareType(Integer welfareType) { List insuranceCategoryPOS = getICategoryMapper().listByWelfareType(welfareType, null); return insuranceCategoryPOS; } public boolean numberCheck(String number) { return Pattern.compile("^0\\.[0]*").matcher(number).matches(); } private InsuranceSchemeDetailPO getByPPI(Long primaryId, Integer paymentScope, Long insuranceId) { InsuranceSchemeDetailPO insuranceSchemeDetailPO = getInsuranceSchemeDetailMapper().getByPPI(primaryId, paymentScope, insuranceId); encryptUtil.decrypt(insuranceSchemeDetailPO, InsuranceSchemeDetailPO.class); return insuranceSchemeDetailPO; } /** * 新增 * * @param saveParam * @param employeeId */ public void save(InsuranceSchemeReqParam saveParam, long employeeId) { //保存福利项目主表 saveParam.getInsuranceScheme().setSchemeName(StringUtils.trim(saveParam.getInsuranceScheme().getSchemeName())); List listResult = getInsuranceSchemeMapper().listByName(saveParam.getInsuranceScheme().getSchemeName()); SalaryAssert.isEmpty(listResult, SalaryI18nUtil.getI18nLabel(0,"该福利名称已经存在,福利名称系统全局唯一")); InsuranceSchemePO insuranceSchemePO = InsuranceSchemeBO.convert2BatchPO(saveParam.getInsuranceScheme(), employeeId); if (insuranceSchemePO.getSharedType() == null) { insuranceSchemePO.setSharedType(SharedTypeEnum.PUBLIC.getValue()); } else { if (insuranceSchemePO.getSharedType().equals(SharedTypeEnum.PRIVATE.getValue()) && StringUtils.isBlank(insuranceSchemePO.getTaxAgentIds())) { throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0,"方案可见性为私有时,未设置可见范围")); } } getInsuranceSchemeMapper().insert(insuranceSchemePO); //记录操作日志 List schemePOList = getInsuranceSchemeMapper().listByName(insuranceSchemePO.getSchemeName()); InsuranceSchemePO targetPO = new InsuranceSchemePO(); if (schemePOList != null && schemePOList.size() > 0) { targetPO = schemePOList.get(0); LoggerContext loggerContext = new LoggerContext<>(); loggerContext.setUser(user); loggerContext.setTargetId(String.valueOf(targetPO.getId())); loggerContext.setTargetName(targetPO.getSchemeName()); loggerContext.setOperateType(OperateTypeEnum.ADD.getValue()); loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(0, "新增福利方案主表")); loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(0, "福利方案基础信息") + ": " + targetPO.getSchemeName()); loggerContext.setNewValues(targetPO); SalaryElogConfig.siSchemeLoggerTemplate.write(loggerContext); } //保存福利项目明细表 List insuranceSchemeDetailPOS = InsuranceSchemeBO.convertToInsuranceSchemeDetailPoList(saveParam.getInsuranceSchemeDetailList(), employeeId, insuranceSchemePO.getId()); //加密入库 encryptUtil.encryptList(insuranceSchemeDetailPOS, InsuranceSchemeDetailPO.class); insuranceSchemeDetailPOS.forEach(getInsuranceSchemeDetailMapper()::insert); //记录明细表操作日志 if (insuranceSchemeDetailPOS.size() > 0) { encryptUtil.decryptList(insuranceSchemeDetailPOS, InsuranceSchemeDetailPO.class); LoggerContext> loggerContext = new LoggerContext<>(); loggerContext.setUser(user); loggerContext.setTargetId(String.valueOf(targetPO.getId())); loggerContext.setTargetName(targetPO.getSchemeName()); loggerContext.setOperateType(OperateTypeEnum.ADD.getValue()); loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(0, "新增福利方案明细表")); loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(0, "福利方案明细")); insuranceSchemeDetailPOS.forEach(loggerContext::setNewValues); SalaryElogConfig.siSchemeLoggerTemplate.write(loggerContext); } } /** * 更新 * * @param updateParam * @param employeeId */ public void update(InsuranceSchemeReqParam updateParam, long employeeId) { //查询是否存在福利方案 InsuranceSchemePO insuranceSchemePO = getById(updateParam.getInsuranceScheme().getId()); if (Objects.isNull(insuranceSchemePO)) { throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0,"福利方案不存在")); } //去除入参中方案名称的空格 updateParam.getInsuranceScheme().setSchemeName(StringUtils.trim(updateParam.getInsuranceScheme().getSchemeName())); //福利方案名称重复 List insuranceSchemePOList = getInsuranceSchemeMapper().listByName(updateParam.getInsuranceScheme().getSchemeName()); if (CollectionUtils.isNotEmpty(insuranceSchemePOList)) { boolean repeat = insuranceSchemePOList.stream().anyMatch(item -> !Objects.equals(item.getId(), updateParam.getInsuranceScheme().getId())); SalaryAssert.isTrue(!repeat, SalaryI18nUtil.getI18nLabel(0,"福利方案名称重复")); } if (insuranceSchemePO.getSharedType() == null) { insuranceSchemePO.setSharedType(SharedTypeEnum.PUBLIC.getValue()); } else { if (insuranceSchemePO.getSharedType().equals(SharedTypeEnum.PRIVATE.getValue()) && StringUtils.isBlank(insuranceSchemePO.getTaxAgentIds())) { throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0,"方案可见性为私有时,未设置可见范围")); } } //记录主表操作日志 LoggerContext loggerContext = new LoggerContext<>(); loggerContext.setUser(user); loggerContext.setTargetId(insuranceSchemePO.getId().toString()); loggerContext.setTargetName(insuranceSchemePO.getSchemeName()); loggerContext.setOperateType(OperateTypeEnum.UPDATE.getValue()); loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(0, "修改福利方案主表")); loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(0, "福利方案基础信息") + ": " + insuranceSchemePO.getSchemeName()); // loggerContext.setOldValues(insuranceSchemePO); //更新福利方案主表 InsuranceSchemePO insuranceSchemePO1 = InsuranceSchemeBO.buildInsuranceSchemePO(insuranceSchemePO, updateParam.getInsuranceScheme()); getInsuranceSchemeMapper().update(insuranceSchemePO1); //记录主表操作日志 loggerContext.setNewValues(insuranceSchemePO1); SalaryElogConfig.salaryAcctRecordLoggerTemplate.write(loggerContext); //更新福利方案明细表 先删后插 getInsuranceSchemeDetailMapper().batchDeleteByPrimaryIds(Collections.singleton(updateParam.getInsuranceScheme().getId())); //更新明细表 List insuranceSchemeDetailPOS = InsuranceSchemeBO.convertToInsuranceSchemeDetailPoList(updateParam.getInsuranceSchemeDetailList(), employeeId, insuranceSchemePO.getId()); encryptUtil.encryptList(insuranceSchemeDetailPOS, InsuranceSchemeDetailPO.class); insuranceSchemeDetailPOS.forEach(getInsuranceSchemeDetailMapper()::insert); //记录明细表操作日志 encryptUtil.decryptList(insuranceSchemeDetailPOS, InsuranceSchemeDetailPO.class); LoggerContext> insuranceSchemeDetailContext = new LoggerContext<>(); insuranceSchemeDetailContext.setTargetId(String.valueOf(insuranceSchemePO.getId())); insuranceSchemeDetailContext.setTargetName(insuranceSchemePO.getSchemeName()); insuranceSchemeDetailContext.setOperateType(OperateTypeEnum.UPDATE.getValue()); insuranceSchemeDetailContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(0, "修改福利方案明细表")); insuranceSchemeDetailContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(0, "福利方案明细")); insuranceSchemeDetailPOS.forEach(insuranceSchemeDetailContext::setNewValues); SalaryElogConfig.salaryAcctRecordLoggerTemplate.write(insuranceSchemeDetailContext); } public int checkBeforeDeleteSocialscheme(Map params) { return getSIAccountUtilMapper().checkBeforeDeleteSocialscheme((Collection) params.get("ids")).get(0).getNum(); } public int checkBeforeDeleteAccumulationfund(Map params) { return getSIAccountUtilMapper().checkBeforeDeleteAccumulationfund((Collection) params.get("ids")).get(0).getNum(); } public int checkBeforeDeleteOtherscheme(Map params) { return getSIAccountUtilMapper().checkBeforeDeleteOtherscheme((Collection) params.get("ids")).get(0).getNum(); } public int checkBeforeDeleteBill(Map params, Integer welfareTypeId) { return getSIAccountUtilMapper().checkBeforeDeleteBill((Collection) params.get("ids"), welfareTypeId).get(0).getNum(); } public void deleteSocialscheme(Map params) { Collection schemeIds = (Collection) params.get("ids"); List targetPoList = getInsuranceSchemeMapper().listBySchemeIds(schemeIds); List targetDetailPoList = getInsuranceSchemeDetailMapper().listBySchemeIds(schemeIds); getInsuranceSchemeMapper().deleteByIds(schemeIds); getInsuranceSchemeDetailMapper().deleteByIds(schemeIds); //记录操作日志 Map> targetDetailMap = targetDetailPoList.stream() .collect(Collectors.groupingBy(InsuranceSchemeDetailPO::getPrimaryId)); if (targetPoList.size() > 0) { targetPoList.forEach(targetPO -> { //记录主表操作日志 LoggerContext loggerContext = new LoggerContext<>(); loggerContext.setUser(user); loggerContext.setTargetId(String.valueOf(targetPO.getId())); loggerContext.setTargetName(targetPO.getSchemeName()); loggerContext.setOperateType(OperateTypeEnum.DELETE.getValue()); loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(0, "删除福利方案主表")); loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(0, "删除福利方案") + ": " + targetPO.getSchemeName()); loggerContext.setNewValues(targetPO); SalaryElogConfig.siSchemeLoggerTemplate.write(loggerContext); //记录明细表操作日志 List targetDetails = targetDetailMap.get(targetPO.getId()); if (targetDetails != null && targetDetails.size() > 0) { LoggerContext> detailLoggerContext = new LoggerContext<>(); detailLoggerContext.setUser(user); detailLoggerContext.setTargetId(String.valueOf(targetPO.getId())); detailLoggerContext.setTargetName(targetPO.getSchemeName()); detailLoggerContext.setOperateType(OperateTypeEnum.DELETE.getValue()); detailLoggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(0, "删除福利方案明细")); detailLoggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(0, "福利方案明细")); targetDetails.forEach(detailLoggerContext::setNewValues); SalaryElogConfig.siSchemeLoggerTemplate.write(detailLoggerContext); } }); } } /** * 复制方案 * * @param id * @param schemeName * @param employeeId */ public void copy(Long id, String schemeName, long employeeId) { //去除入参中方案名称的空格 schemeName = StringUtils.trim(schemeName); List listResult = getInsuranceSchemeMapper().listByName(schemeName); SalaryAssert.isEmpty(listResult, SalaryI18nUtil.getI18nLabel(0,"方案名称重复")); if (Objects.isNull(id)) { throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0,"方案id为空")); } if (Objects.isNull(schemeName)) { throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0,"复制方案名为空")); } InsuranceSchemePO insuranceSchemePO = getById(id); if (Objects.isNull(insuranceSchemePO)) { throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0,"方案不存在")); } if (insuranceSchemePO.getSchemeName().equals(schemeName)) { throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0,"方案名称重复")); } InsuranceSchemePO batchPO = InsuranceSchemePO.builder() .creator(employeeId) .createTime(new Date()) .tenantKey(SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY) .schemeName(schemeName) .paymentArea(insuranceSchemePO.getPaymentArea()) .updateTime(new Date()) .deleteType(DeleteTypeEnum.NOT_DELETED.getValue()) .paymentType(insuranceSchemePO.getPaymentType()) .remarks(insuranceSchemePO.getRemarks()) .welfareType(insuranceSchemePO.getWelfareType()) .isUse(insuranceSchemePO.getIsUse()) .build(); getInsuranceSchemeMapper().insert(batchPO); //记录操作日志 List schemePOList = getInsuranceSchemeMapper().listByName(insuranceSchemePO.getSchemeName()); InsuranceSchemePO targetPO = new InsuranceSchemePO(); if (schemePOList != null && schemePOList.size() > 0) { targetPO = schemePOList.get(0); LoggerContext loggerContext = new LoggerContext<>(); loggerContext.setUser(user); loggerContext.setTargetId(String.valueOf(targetPO.getId())); loggerContext.setTargetName(targetPO.getSchemeName()); loggerContext.setOperateType(OperateTypeEnum.ADD.getValue()); loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(0, "复制新增福利方案主表")); loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(0, "福利方案基础信息") + ": " + targetPO.getSchemeName()); loggerContext.setNewValues(targetPO); SalaryElogConfig.siSchemeLoggerTemplate.write(loggerContext); } List detailList = getInsuranceSchemeDetailMapper().queryListBySchemeId(id); detailList = encryptUtil.decryptList(detailList,InsuranceSchemeDetailPO.class); if (CollectionUtils.isNotEmpty(detailList)) { List detailPOS = detailList.stream().map(item -> InsuranceSchemeDetailPO.builder() .creator(employeeId) .createTime(new Date()) .deleteType(DeleteTypeEnum.NOT_DELETED.getValue()) .effectiveTime(item.getEffectiveTime()) .expirationTime(item.getExpirationTime()) .fixedCost(item.getFixedCost()) .insuranceId(item.getInsuranceId()) .isPayment(item.getIsPayment()) .lowerLimit(item.getLowerLimit()) .paymentScope(item.getPaymentScope()) .tenantKey(SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY) .paymentProportion(item.getPaymentProportion()) .updateTime(new Date()) .primaryId(batchPO.getId()) .rententionRule(item.getRententionRule()) .upperLimit(item.getUpperLimit()) .validNum(item.getValidNum()) .build() ).collect(Collectors.toList()); //加密入库 encryptUtil.encryptList(detailPOS, InsuranceSchemeDetailPO.class); detailPOS.forEach(getInsuranceSchemeDetailMapper()::insert); //记录明细表操作日志 if (detailPOS.size() > 0) { encryptUtil.decryptList(detailPOS, InsuranceSchemeDetailPO.class); LoggerContext> loggerContext = new LoggerContext<>(); loggerContext.setUser(user); loggerContext.setTargetId(String.valueOf(targetPO.getId())); loggerContext.setTargetName(targetPO.getSchemeName()); loggerContext.setOperateType(OperateTypeEnum.ADD.getValue()); loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(0, "复制新增福利方案明细表")); loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(0, "福利方案明细")); detailPOS.forEach(loggerContext::setNewValues); SalaryElogConfig.siSchemeLoggerTemplate.write(loggerContext); } } } /** * 社保方案基础信息明细表 * * @param primaryId * @return */ public List listByPrimaryId(Long primaryId) { List insuranceSchemeDetailPOS = getInsuranceSchemeDetailMapper().queryListBySchemeId(primaryId); encryptUtil.decryptList(insuranceSchemeDetailPOS, InsuranceSchemeDetailPO.class); return insuranceSchemeDetailPOS; } /** * 获取所有方案 * * @return */ @Override public List listAll(){ List insuranceSchemePOList = getInsuranceSchemeMapper().listAll(); return insuranceSchemePOList; } /*****以上代码为SISchemeBiz中方法逻辑迁移,旨在减少Biz类的使用*****/ }