package com.engine.salary.service.impl; import cn.hutool.core.util.StrUtil; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.TypeReference; import com.api.browser.bean.SearchConditionGroup; import com.api.browser.bean.SearchConditionItem; import com.api.browser.bean.SearchConditionOption; import com.api.browser.util.ConditionFactory; import com.api.browser.util.ConditionType; import com.cloudstore.dev.api.util.Util_DataCache; import com.cloudstore.eccom.pc.table.WeaTable; import com.cloudstore.eccom.pc.table.WeaTableCheckboxpopedom; 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.cmd.siarchives.SIArchivesTipsCmd; import com.engine.salary.common.SalaryContext; 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.bo.InsuranceArchivesBO; import com.engine.salary.entity.siarchives.bo.InsuranceArchivesBaseInfoBO; import com.engine.salary.entity.siarchives.dto.*; import com.engine.salary.entity.siarchives.param.*; import com.engine.salary.entity.siarchives.po.*; import com.engine.salary.entity.sicategory.po.ICategoryPO; import com.engine.salary.entity.sischeme.po.InsuranceSchemeDetailPO; import com.engine.salary.entity.sischeme.po.InsuranceSchemePO; import com.engine.salary.entity.taxagent.dto.TaxAgentEmployeeDTO; import com.engine.salary.entity.taxagent.dto.TaxAgentManageRangeEmployeeDTO; import com.engine.salary.entity.taxagent.po.TaxAgentEmpChangePO; 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.datacollection.DataCollectionEmployeeTypeEnum; import com.engine.salary.enums.salaryaccounting.EmployeeTypeEnum; import com.engine.salary.enums.siaccount.EmployeeStatusEnum; import com.engine.salary.enums.sicategory.*; import com.engine.salary.enums.taxagent.TaxAgentEmpChangeModuleEnum; import com.engine.salary.exception.SalaryRunTimeException; import com.engine.salary.mapper.datacollection.EmployMapper; import com.engine.salary.mapper.siarchives.*; import com.engine.salary.mapper.sicategory.ICategoryMapper; import com.engine.salary.mapper.sischeme.InsuranceSchemeDetailMapper; import com.engine.salary.mapper.sischeme.InsuranceSchemeMapper; import com.engine.salary.mapper.taxagent.TaxAgentMapper; import com.engine.salary.service.*; import com.engine.salary.sys.constant.SalarySysConstant; 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.ExcelUtil; import com.engine.salary.util.page.PageInfo; import com.engine.salary.util.page.SalaryPageUtil; import com.engine.salary.wrapper.TaxAgentWrapper; import com.google.common.collect.Lists; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; import org.apache.ibatis.session.SqlSession; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import org.springframework.beans.BeanUtils; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.StopWatch; import weaver.conn.mybatis.MyBatisFactory; import weaver.general.BaseBean; import weaver.general.Util; import weaver.hrm.User; import java.math.BigDecimal; import java.text.SimpleDateFormat; import java.util.*; import java.util.function.Function; import java.util.regex.Matcher; 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.sys.constant.SalarySysConstant.WEL_BASE_DIFF_BY_PER_AND_COM; /** * @Author weaver_cl * @Description: * @Date 2022/3/11 * @Version V1.0 **/ @Slf4j public class SIArchivesServiceImpl extends Service implements SIArchivesService { private final BaseBean baseBean = new BaseBean(); private final Boolean isLog = "true".equals(baseBean.getPropValue("hrmSalary", "log")); // private SIArchivesBiz siArchivesBiz = new SIArchivesBiz(); private EncryptUtil encryptUtil = new EncryptUtil(); private TaxAgentService getTaxAgentService(User user) { return ServiceUtil.getService(TaxAgentServiceImpl.class, user); } private SalarySysConfService getSalarySysConfService(User user) { return ServiceUtil.getService(SalarySysConfServiceImpl.class, user); } private InsuranceBaseInfoMapper getInsuranceBaseInfoMapper() { return MapperProxyFactory.getProxy(InsuranceBaseInfoMapper.class); } private TaxAgentEmpChangeService getTaxAgentEmpChangeService(User user) { return ServiceUtil.getService(TaxAgentEmpChangeServiceImpl.class, user); } 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 TaxAgentMapper getTaxAgentMapper() { return MapperProxyFactory.getProxy(TaxAgentMapper.class); } private InsuranceSchemeDetailMapper getInsuranceSchemeDetailMapper() { return MapperProxyFactory.getProxy(InsuranceSchemeDetailMapper.class); } private InsuranceSchemeMapper getInsuranceSchemeMapper() { return MapperProxyFactory.getProxy(InsuranceSchemeMapper.class); } private SalaryEmployeeService getSalaryEmployeeService(User user) { return ServiceUtil.getService(SalaryEmployeeServiceImpl.class, user); } private TaxAgentWrapper getTaxAgentWrapper(User user) { return ServiceUtil.getService(TaxAgentWrapper.class, user); } public SICategoryService getSICategoryService(User user) { return ServiceUtil.getService(SICategoryServiceImpl.class, user); } private SISchemeService getSISchemeService(User user) { return ServiceUtil.getService(SISchemeServiceImpl.class,user); } private EmployMapper getEmployMapper() { return MapperProxyFactory.getProxy(EmployMapper.class); } private InsuranceBaseAdjustHistoryMapper getInsuranceBaseAdjustHistoryMapper() { return MapperProxyFactory.getProxy(InsuranceBaseAdjustHistoryMapper.class); } @Override public Map getTips(Map params) { return commandExecutor.execute(new SIArchivesTipsCmd(params, user)); } @Override public Map getBaseForm(Map params) { long currentEmployeeId = user.getUID(); Boolean needAuth = getTaxAgentService(user).isNeedAuth(currentEmployeeId); Collection taxAgentPOS = getTaxAgentService(user).listAllTaxAgentsAsAdmin(currentEmployeeId); Map apidatas = new HashMap<>(16); // SIArchivesBiz siArchivesBiz = new SIArchivesBiz(); //// siArchivesBiz.setNeedAuth(needAuth); //// siArchivesBiz.setTaxAgentPOS(taxAgentPOS); WelfareTypeEnum welfareTypeEnum = (WelfareTypeEnum) params.get("welfareTypeEnum"); Long employeeId = Long.valueOf(Util.null2String(params.get("employeeId"))); Long paymentOrganization = welfareTypeEnum != null ? Long.valueOf(Util.null2String(params.get("paymentOrganization"))) : null; // apidatas = siArchivesBiz.getBaseForm(welfareTypeEnum, employeeId, (long) user.getUID(), user, paymentOrganization); apidatas = getBaseForm(welfareTypeEnum, employeeId, paymentOrganization, taxAgentPOS); //记录操作日志 LoggerContext loggerContext = new LoggerContext<>(); loggerContext.setUser(user); // loggerContext.setTargetId(String.valueOf(form.getId())); // loggerContext.setTargetName(form.getInsuranceName()); loggerContext.setOperateType(OperateTypeEnum.READ.getValue()); loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(0, "查看福利档案基础信息")); loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(0, "查看福利档案基础信息") + ": " + "人员id" + "-" + employeeId + "," + "个税扣缴义务人id" + "-" +paymentOrganization + "," + (welfareTypeEnum == null ? SalaryI18nUtil.getI18nLabel(0, "员工基本信息") : SalaryI18nUtil.getI18nLabel(welfareTypeEnum.getLabelId(), welfareTypeEnum.getDefaultLabel()))); SalaryElogConfig.siArchivesLoggerTemplate.write(loggerContext); return apidatas; } @Override public Map getPaymentForm(Map params) { Map apidatas = new HashMap<>(16); WelfareTypeEnum welfareTypeEnum = (WelfareTypeEnum) params.get("welfareTypeEnum"); Long employeeId = Long.valueOf(Util.null2String(params.get("employeeId"))); String schemeIdStr = Util.null2String(params.get("schemeId")); Long paymentOrganization = Long.valueOf(Util.null2String(params.get("paymentOrganization"))); Long schemeId = null; if (StringUtils.isNotBlank(schemeIdStr)) { schemeId = Long.valueOf(schemeIdStr); } // apidatas = siArchivesBiz.getPaymentForm(user, welfareTypeEnum, employeeId, (long) user.getUID(), schemeId, paymentOrganization); apidatas = getPaymentForm(user, welfareTypeEnum, employeeId, schemeId, paymentOrganization); //记录操作日志 LoggerContext loggerContext = new LoggerContext<>(); loggerContext.setUser(user); // loggerContext.setTargetId(String.valueOf(form.getId())); // loggerContext.setTargetName(form.getInsuranceName()); loggerContext.setOperateType(OperateTypeEnum.READ.getValue()); loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(0, "查看福利档案缴纳基数")); loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(0, "查看缴纳基数明细") + ": " + "人员id" + "-" + employeeId + "," + "个税扣缴义务人id" + "-" +paymentOrganization + "," + SalaryI18nUtil.getI18nLabel(welfareTypeEnum.getLabelId(), welfareTypeEnum.getDefaultLabel())); SalaryElogConfig.siArchivesLoggerTemplate.write(loggerContext); return apidatas; } @Override public String insert(InsuranceArchivesSaveParam param) { SalaryAssert.notNull(param.getWelfareType(), "福利类型为空"); //判断是否要区分个人和单位福利基数 SalarySysConfPO welBaseDiff = getSalarySysConfService(user).getOneByCode(WEL_BASE_DIFF_BY_PER_AND_COM); boolean welBaseDiffSign = welBaseDiff != null && welBaseDiff.getConfValue().equals(OpenEnum.OPEN.getValue()); switch (param.getWelfareType()) { case SOCIAL_SECURITY: socialSave(param, user, welBaseDiffSign); break; case ACCUMULATION_FUND: fundSave(param, user, welBaseDiffSign); break; case OTHER: otherSave(param, user, welBaseDiffSign); break; default: throw new SalaryRunTimeException("福利类型不存在"); } return null; } @Override public Map listPage(InsuranceArchivesListParam param) { long currentEmployeeId = user.getUID(); log.info("获取福利档案列表逻辑开始: {}", param); StopWatch sw = new StopWatch(); sw.start("福利档案-历史数据处理"); // 1.历史数据处理 handleHistoryData(currentEmployeeId); sw.stop(); sw.start("福利档案-待减员自动处理"); // 2.待减员自动处理 handleStayDelData(currentEmployeeId); sw.stop(); // sw.start("福利档案-增量数据处理"); // // 3.增量数据处理 // String welSign = (String) Util_DataCache.getObjVal("welfareChangeSign"); // if (welSign == null || "0".equals(welSign)) { // handleChangeData(currentEmployeeId); // } // sw.stop(); //排序配置 OrderRuleVO orderRule = getSalarySysConfService(user).orderRule(); param.setOrderRule(orderRule); Boolean needAuth = getTaxAgentService(user).isNeedAuth(currentEmployeeId); param.setNeedAuth(needAuth); if (needAuth) { List taxAgentEmployeeDTOS = getTaxAgentService(user).listTaxAgentAndEmployee(currentEmployeeId); Set employeeIds = SalaryEntityUtil.properties(taxAgentEmployeeDTOS, TaxAgentEmployeeDTO::getEmployeeId); Set taxAgentIds = SalaryEntityUtil.properties(taxAgentEmployeeDTOS, TaxAgentEmployeeDTO::getTaxAgentId); param.setTaxAgentEmployeeIds(employeeIds); param.setTaxAgentIds(taxAgentIds); } Map apidatas = new HashMap<>(16); // apidatas = siArchivesBiz.listPage(param, (long) user.getUID()); apidatas = listPage(param, (long) user.getUID()); log.info("各操作计时 {}", sw.prettyPrint()); return apidatas; } /** * 福利档案中历史数据自动处理 * @param currentEmployeeId */ private void handleHistoryData(long currentEmployeeId) { //如果触发历史数据处理,则进行一次全量增员 if (createOldInsuranceBaseInfo(currentEmployeeId)) { //批量增员 List allBaseInfoList = getInsuranceBaseInfoMapper().listAll(); Collection stayAddIds = allBaseInfoList.stream().filter(f->f.getRunStatus().equals(EmployeeStatusEnum.STAY_ADD.getValue())) .map(InsuranceArchivesBaseInfoPO::getId).collect(Collectors.toList()); if (stayAddIds.size() > 0) { stayAddToPay(stayAddIds); } } } /** * 福利档案中待减员数据自动处理 * @param currentEmployeeId */ @Override @Transactional(rollbackFor = Exception.class) public void handleStayDelData(long currentEmployeeId) { log.info("福利档案中待减员数据自动处理逻辑开始:"); SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM"); String today = simpleDateFormat.format(new Date()); //part1,员工维护了社保/公积金/其他福利最后缴纳日,且任一类信息大于今天的,自动将待减员状态置为正在缴纳状态 List rePayList = getInsuranceBaseInfoMapper().getRePayList(today); updateInsuranceBaseInfoRunStatus(rePayList, EmployeeStatusEnum.PAYING.getValue()); log.info("自动将待减员状态置为正在缴纳状态的档案数量 {}:", rePayList.size()); //part2,员工维护了社保/公积金/其他福利最后缴纳日,且三类信息都小于今天的,自动置为待减员状态 List reStayDelList = getInsuranceBaseInfoMapper().getReStayDelList(today); updateInsuranceBaseInfoRunStatus(reStayDelList, EmployeeStatusEnum.STAY_DEL.getValue()); log.info("自动置为待减员状态的档案数量 {}:", reStayDelList.size()); //part3,非在职员工且处于正常缴纳的福利档案置为待减员状态 //定义非在职的人事状态 List personnelStatuses = new ArrayList() {{ add("5"); add("6"); add("7"); }}; if (CollectionUtils.isNotEmpty(personnelStatuses)) { //获取非在职员工的福利档案基础信息 InsuranceArchivesListParam insuranceArchivesListParam = new InsuranceArchivesListParam(); insuranceArchivesListParam.setPersonnelStatuses(personnelStatuses); insuranceArchivesListParam.setRunStatuses(Collections.singletonList(EmployeeStatusEnum.PAYING.getValue())); List noNormalList = getInsuranceBaseInfoMapper().getAbnormalList(insuranceArchivesListParam); updateInsuranceBaseInfoRunStatus(noNormalList, EmployeeStatusEnum.STAY_DEL.getValue()); log.info("自动处理非在职员工的档案数量 {}:", noNormalList.size()); } } /** * 福利档案中增量数据处理 * @param currentEmployeeId */ @Transactional(rollbackFor = Exception.class) @Override public void handleChangeData(long currentEmployeeId) { try { Util_DataCache.setObjVal("welfareChangeSign", "1"); log.info("福利档案中增量数据处理逻辑开始:"); // 所有增量人员列表 List taxAgentEmpChangeList = getTaxAgentEmpChangeService(user).listAllByModule(TaxAgentEmpChangeModuleEnum.INSURANCE_ARCHIVE); log.info("待处理的福利档案增量数据数量 {}:", taxAgentEmpChangeList.size()); if (CollectionUtils.isEmpty(taxAgentEmpChangeList)) { Util_DataCache.setObjVal("welfareChangeSign", "0"); return; } // 当前可以管辖的人员 Collection taxAgentList = new ArrayList<>(); if (currentEmployeeId != 1L) { taxAgentList = getTaxAgentService(user).listAllTaxAgents(currentEmployeeId); Collection finalTaxAgentList = taxAgentList; taxAgentEmpChangeList = taxAgentEmpChangeList.stream().filter(f -> finalTaxAgentList.stream().anyMatch(e -> e.getId().equals(f.getTaxAgentId()))).collect(Collectors.toList()); if (CollectionUtils.isEmpty(taxAgentEmpChangeList)) { Util_DataCache.setObjVal("welfareChangeSign", "0"); return; } } // Collection taxAgentList = getTaxAgentService(user).listAllTaxAgents(currentEmployeeId); // log.info("当前可以管辖的个税扣缴义务人数量 {}:", taxAgentList.size()); // taxAgentEmpChangeList = taxAgentEmpChangeList.stream().filter(f -> taxAgentList.stream().anyMatch(e -> e.getId().equals(f.getTaxAgentId()))).collect(Collectors.toList()); // if (CollectionUtils.isEmpty(taxAgentEmpChangeList)) { // Util_DataCache.setObjVal("welfareChangeSign", "0"); // return; // } log.info("根据当前可以管辖的个税扣缴义务人筛选出的可处理增量数据数量 {}:", taxAgentEmpChangeList.size()); // 所有福利档案基础信息数据 List baseInfoPOList = getInsuranceBaseInfoMapper().listAll(); log.info("当前数据库中所有福利档案基础信息数据数量 {}:", baseInfoPOList.size()); StopWatch sw = new StopWatch(); sw.start("将增量数据进一步处理为新增、更新两类数据"); InsuranceArchivesBaseInfoBO.ChangeData changeData = InsuranceArchivesBaseInfoBO.buildChangeData(taxAgentEmpChangeList, baseInfoPOList, currentEmployeeId); sw.stop(); // 批量修改福利档案 if (CollectionUtils.isNotEmpty(changeData.getBaseInfoUpdateTodoList())) { log.info("增量数据中待更新的数据数量 {}:", changeData.getBaseInfoUpdateTodoList().size()); //对于即将调整为“待减员”的数据,更新社保、公积金、其他福利档案的停止缴纳时间 SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM"); String today = simpleDateFormat.format(new Date()); sw.start("生成增量数据中即将置为“待减员”的数据"); List toStayDelList = changeData.getBaseInfoUpdateTodoList().stream() .filter(f -> f.getRunStatus().equals(EmployeeStatusEnum.STAY_DEL.getValue())) .collect(Collectors.toList()); if (isLog) { log.info("福利档案-待减员明细:{}", toStayDelList); } if (toStayDelList.size() > 0) { List> partitionUpdateEndTime = Lists.partition(toStayDelList, 100); partitionUpdateEndTime.forEach(part->{ List socialIds = part.stream().map(InsuranceArchivesBaseInfoPO::getSocialArchivesId).collect(Collectors.toList()); List fundIds = part.stream().map(InsuranceArchivesBaseInfoPO::getFundArchivesId).collect(Collectors.toList()); List otherIds = part.stream().map(InsuranceArchivesBaseInfoPO::getOtherArchivesId).collect(Collectors.toList()); getSocialSchemeMapper().batchUpdateEndTime(socialIds, today); getFundSchemeMapper().batchUpdateEndTime(fundIds, today); getOtherSchemeMapper().batchUpdateEndTime(otherIds, today); }); } sw.stop(); sw.start("生成增量数据中即将置为“逻辑删除”的数据"); //对于逻辑删除的数据,同样逻辑删除相关的社保、公积金、其他福利档案 List delList = changeData.getBaseInfoUpdateTodoList().stream() .filter(f -> f.getDeleteType().equals(DeleteTypeEnum.DELETED.getValue())) .collect(Collectors.toList()); if (isLog) { log.info("福利档案-逻辑删除明细:{}", delList); } if (delList.size() > 0) { for (InsuranceArchivesBaseInfoPO po : delList) { getSocialSchemeMapper().deleteByEmployeeIdAndPayOrg(InsuranceArchivesSocialSchemePO.builder() .employeeId(po.getEmployeeId()) .paymentOrganization(po.getPaymentOrganization()) .build()); getFundSchemeMapper().deleteByEmployeeIdAndPayOrg(InsuranceArchivesFundSchemePO.builder() .employeeId(po.getEmployeeId()) .paymentOrganization(po.getPaymentOrganization()) .build()); getOtherSchemeMapper().deleteByEmployeeIdAndPayOrg(InsuranceArchivesOtherSchemePO.builder() .employeeId(po.getEmployeeId()) .paymentOrganization(po.getPaymentOrganization()) .build()); } } sw.stop(); //修改福利档案基础信息 sw.start("增量数据中待更新数据入库"); if (isLog) { log.info("福利档案-增量数据中待更新数据入库明细:{}", changeData.getBaseInfoUpdateTodoList()); } List> partitionUpdateBase = Lists.partition(changeData.getBaseInfoUpdateTodoList(), 100); partitionUpdateBase.forEach(part-> getInsuranceBaseInfoMapper().batchUpdate(part)); sw.stop(); log.info("增量数据中待更新的数据处理完成!"); } sw.start("处理增量数据中待新增的数据"); // 批量新增福利档案 if (CollectionUtils.isNotEmpty(changeData.getBaseInfoAddTodoList())) { log.info("增量数据中待新增的数据数量 {}:", changeData.getBaseInfoAddTodoList().size()); //新增社保、公积金、其他福利档案、福利档案基础信息 addNewInsuranceBaseInfo(changeData.getBaseInfoAddTodoList(), currentEmployeeId); log.info("增量数据中待新增的数据处理完成!"); } sw.stop(); // 删除增量数据 if (CollectionUtils.isNotEmpty(changeData.getChangeIds())) { getTaxAgentEmpChangeService(user).deleleByIds(changeData.getChangeIds()); } log.info("各操作计时 {}", sw.prettyPrint()); Util_DataCache.setObjVal("welfareChangeSign", "0"); } catch (Exception e) { log.info("福利档案-增量数据处理出错:{}", e.getMessage(), e); throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0, "福利档案-增量数据处理出错")); } } /** * 删除档案 * @param archiveIds */ @Override public void deleteArchive(Collection archiveIds) { if(CollectionUtils.isEmpty(archiveIds)){ throw new SalaryRunTimeException("社保福利档案参数为空!"); } SalarySysConfPO canDelete = getSalarySysConfService(user).getOneByCode(SalarySysConstant.SALARY_ARCHIVE_DELETE); if(Objects.isNull(canDelete) || StringUtils.equals(canDelete.getConfValue(),"0") ){ throw new SalaryRunTimeException("不允许删除社保福利档案,请先开启删除档案规则配置!"); } List insuranceArchivesList = getInsuranceBaseInfoMapper().listByIds(archiveIds); //查询当前登录人员管理的个税扣缴义务人 List canDeleteTaxAgentIds = getTaxAgentService(user).listAllTaxAgentsAsAdmin((long) user.getUID()) .stream().map(TaxAgentPO::getId).collect(Collectors.toList()); boolean err = insuranceArchivesList.stream().anyMatch(po -> !canDeleteTaxAgentIds.contains(po.getPaymentOrganization())); if (CollectionUtils.isEmpty(insuranceArchivesList) || err) { throw new SalaryRunTimeException("社保档案不存在,或没有权限删除该社保案!"); } Optional fixedList = insuranceArchivesList.stream().filter(archive -> !StringUtils.equals(archive.getRunStatus(), EmployeeStatusEnum.STAY_ADD.getValue()) && !StringUtils.equals(archive.getRunStatus(), EmployeeStatusEnum.STOP_PAYMENT_FROM_ADD.getValue())).findFirst(); if(fixedList.isPresent()){ throw new SalaryRunTimeException("在缴员工、待减员、停止缴纳-来自待减员,无法删除薪资档案!"); } List archiveDelIds = insuranceArchivesList.stream().map(InsuranceArchivesBaseInfoPO::getId).collect(Collectors.toList()); List socialArchiveDelIds = insuranceArchivesList.stream().map(InsuranceArchivesBaseInfoPO::getSocialArchivesId).collect(Collectors.toList()); List fundArchiveDelIds = insuranceArchivesList.stream().map(InsuranceArchivesBaseInfoPO::getFundArchivesId).collect(Collectors.toList()); List otherArchiveDelIds = insuranceArchivesList.stream().map(InsuranceArchivesBaseInfoPO::getOtherArchivesId).collect(Collectors.toList()); //获取子表数据,方便记录操作日志 List socialArchives = getSocialSchemeMapper().getSocialById(socialArchiveDelIds); List fundArchives = getFundSchemeMapper().getFundById(fundArchiveDelIds); List otherArchives = getOtherSchemeMapper().getOtherById(otherArchiveDelIds); Map socialArchiveMap = SalaryEntityUtil.convert2Map(socialArchives, InsuranceArchivesSocialSchemePO::getId); Map fundArchiveMap = SalaryEntityUtil.convert2Map(fundArchives, InsuranceArchivesFundSchemePO::getId); Map otherArchiveMap = SalaryEntityUtil.convert2Map(otherArchives, InsuranceArchivesOtherSchemePO::getId); // 删除社保档案主表及3张明细表数据 if(CollectionUtils.isNotEmpty(archiveDelIds)){ getInsuranceBaseInfoMapper().deleteByIds(archiveDelIds); } if(CollectionUtils.isNotEmpty(socialArchiveDelIds)){ getSocialSchemeMapper().deleteByIds(socialArchiveDelIds); } if(CollectionUtils.isNotEmpty(fundArchiveDelIds)){ getFundSchemeMapper().deleteByIds(fundArchiveDelIds); } if(CollectionUtils.isNotEmpty(otherArchiveDelIds)){ getOtherSchemeMapper().deleteByIds(otherArchiveDelIds); } //记录操作日志 List targetPOList = insuranceArchivesList.stream().filter(f -> archiveDelIds.contains(f.getId())).collect(Collectors.toList()); if (targetPOList.size() > 0) { targetPOList.forEach(targetPO -> { DataCollectionEmployee empInfo = getEmployMapper().getEmployeeById(targetPO.getEmployeeId()); TaxAgentPO taxAgentInfo = getTaxAgentMapper().getById(targetPO.getPaymentOrganization()); targetPO.setDeleteType(DeleteTypeEnum.DELETED.getValue()); //记录主表操作日志 LoggerContext loggerContext = new LoggerContext<>(); loggerContext.setUser(user); loggerContext.setTargetId(String.valueOf(targetPO.getId())); loggerContext.setTargetName(taxAgentInfo.getName() + "-" + empInfo.getUsername()); loggerContext.setOperateType(OperateTypeEnum.DELETE.getValue()); loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(0, "删除福利档案主表")); loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(0, "删除福利档案") + ": " + taxAgentInfo.getName() + "-" + empInfo.getUsername()); loggerContext.setNewValues(targetPO); SalaryElogConfig.siArchivesLoggerTemplate.write(loggerContext); //记录明细表操作日志 InsuranceArchivesSocialSchemePO socialTargetDetail = socialArchiveMap.get(targetPO.getSocialArchivesId()); if (socialTargetDetail != null) { socialTargetDetail.setDeleteType(DeleteTypeEnum.DELETED.getValue()); LoggerContext detailLoggerContext = new LoggerContext<>(); detailLoggerContext.setUser(user); detailLoggerContext.setTargetId(String.valueOf(targetPO.getId())); detailLoggerContext.setTargetName(taxAgentInfo.getName() + "-" + empInfo.getUsername()); detailLoggerContext.setOperateType(OperateTypeEnum.DELETE.getValue()); detailLoggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(0, "删除福利档案-社保明细")); detailLoggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(0, "删除福利档案-社保明细") + ":" + taxAgentInfo.getName() + "-" + empInfo.getUsername()); detailLoggerContext.setNewValues(socialTargetDetail); SalaryElogConfig.siArchivesLoggerTemplate.write(detailLoggerContext); } InsuranceArchivesFundSchemePO fundTargetDetail = fundArchiveMap.get(targetPO.getFundArchivesId()); if (fundTargetDetail != null) { fundTargetDetail.setDeleteType(DeleteTypeEnum.DELETED.getValue()); LoggerContext detailLoggerContext = new LoggerContext<>(); detailLoggerContext.setUser(user); detailLoggerContext.setTargetId(String.valueOf(targetPO.getId())); detailLoggerContext.setTargetName(taxAgentInfo.getName() + "-" + empInfo.getUsername()); detailLoggerContext.setOperateType(OperateTypeEnum.DELETE.getValue()); detailLoggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(0, "删除福利档案-公积金明细")); detailLoggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(0, "删除福利档案-公积金明细") + ":" + taxAgentInfo.getName() + "-" + empInfo.getUsername()); detailLoggerContext.setNewValues(fundTargetDetail); SalaryElogConfig.siArchivesLoggerTemplate.write(detailLoggerContext); } InsuranceArchivesOtherSchemePO otherTargetDetail = otherArchiveMap.get(targetPO.getOtherArchivesId()); if (otherTargetDetail != null) { otherTargetDetail.setDeleteType(DeleteTypeEnum.DELETED.getValue()); LoggerContext detailLoggerContext = new LoggerContext<>(); detailLoggerContext.setUser(user); detailLoggerContext.setTargetId(String.valueOf(targetPO.getId())); detailLoggerContext.setTargetName(taxAgentInfo.getName() + "-" + empInfo.getUsername()); detailLoggerContext.setOperateType(OperateTypeEnum.DELETE.getValue()); detailLoggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(0, "删除福利档案-其他福利明细")); detailLoggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(0, "删除福利档案-其他福利明细") + ":" + taxAgentInfo.getName() + "-" + empInfo.getUsername()); detailLoggerContext.setNewValues(otherTargetDetail); SalaryElogConfig.siArchivesLoggerTemplate.write(detailLoggerContext); } }); } } //新增社保、公积金、其他福利档案、福利档案基础信息 private List addNewInsuranceBaseInfo(List baseInfoPOList, Long currentEmployeeId) { try { List socialList = new ArrayList<>(); List fundList = new ArrayList<>(); List otherList = new ArrayList<>(); for (InsuranceArchivesBaseInfoPO baseInfoPO : baseInfoPOList) { InsuranceArchivesSocialSchemePO insuranceArchivesSocialSchemePO = new InsuranceArchivesSocialSchemePO(); insuranceArchivesSocialSchemePO.setTenantKey(""); insuranceArchivesSocialSchemePO.setWelfareType(WelfareTypeEnum.SOCIAL_SECURITY.getValue()); insuranceArchivesSocialSchemePO.setPaymentOrganization(baseInfoPO.getPaymentOrganization()); insuranceArchivesSocialSchemePO.setNonPayment(NonPaymentEnum.YES.getValue()); insuranceArchivesSocialSchemePO.setCreator(currentEmployeeId); insuranceArchivesSocialSchemePO.setCreateTime(new Date()); insuranceArchivesSocialSchemePO.setUpdateTime(new Date()); insuranceArchivesSocialSchemePO.setDeleteType(DeleteTypeEnum.NOT_DELETED.getValue()); insuranceArchivesSocialSchemePO.setEmployeeId(baseInfoPO.getEmployeeId()); socialList.add(insuranceArchivesSocialSchemePO); InsuranceArchivesFundSchemePO insuranceArchivesFundSchemePO = new InsuranceArchivesFundSchemePO(); insuranceArchivesFundSchemePO.setTenantKey(""); insuranceArchivesFundSchemePO.setWelfareType(WelfareTypeEnum.ACCUMULATION_FUND.getValue()); insuranceArchivesFundSchemePO.setPaymentOrganization(baseInfoPO.getPaymentOrganization()); insuranceArchivesFundSchemePO.setNonPayment(NonPaymentEnum.YES.getValue()); insuranceArchivesFundSchemePO.setCreator(currentEmployeeId); insuranceArchivesFundSchemePO.setCreateTime(new Date()); insuranceArchivesFundSchemePO.setUpdateTime(new Date()); insuranceArchivesFundSchemePO.setDeleteType(DeleteTypeEnum.NOT_DELETED.getValue()); insuranceArchivesFundSchemePO.setEmployeeId(baseInfoPO.getEmployeeId()); fundList.add(insuranceArchivesFundSchemePO); InsuranceArchivesOtherSchemePO insuranceArchivesOtherSchemePO = new InsuranceArchivesOtherSchemePO(); insuranceArchivesOtherSchemePO.setTenantKey(""); insuranceArchivesOtherSchemePO.setWelfareType(WelfareTypeEnum.OTHER.getValue()); insuranceArchivesOtherSchemePO.setPaymentOrganization(baseInfoPO.getPaymentOrganization()); insuranceArchivesOtherSchemePO.setNonPayment(NonPaymentEnum.YES.getValue()); insuranceArchivesOtherSchemePO.setCreator(currentEmployeeId); insuranceArchivesOtherSchemePO.setCreateTime(new Date()); insuranceArchivesOtherSchemePO.setUpdateTime(new Date()); insuranceArchivesOtherSchemePO.setDeleteType(DeleteTypeEnum.NOT_DELETED.getValue()); insuranceArchivesOtherSchemePO.setEmployeeId(baseInfoPO.getEmployeeId()); otherList.add(insuranceArchivesOtherSchemePO); } //导入社保档案 if (CollectionUtils.isNotEmpty(socialList)) { log.info("新增社保档案数量:{}", socialList.size()); //根据人员id和个税扣缴义务人id删除对应档案 socialList.forEach(getSocialSchemeMapper()::deleteByEmployeeIdAndPayOrg); log.info("删除历史社保档案"); if (isLog) { log.info("新增社保档案明细:{}", socialList); } List> partition = Lists.partition(socialList, 100); partition.forEach(getSocialSchemeMapper()::batchSave); log.info("新增社保档案成功"); } //导入公积金档案 if (CollectionUtils.isNotEmpty(fundList)) { log.info("新增公积金档案数量:{}", fundList.size()); //根据人员id和个税扣缴义务人id删除对应档案 fundList.forEach(getFundSchemeMapper()::deleteByEmployeeIdAndPayOrg); log.info("删除历史公积金档案"); if (isLog) { log.info("新增公积金档案明细:{}", fundList); } List> partition = Lists.partition(fundList, 100); partition.forEach(getFundSchemeMapper()::batchSave); log.info("新增公积金档案成功"); } //导入其他福利档案 if (CollectionUtils.isNotEmpty(otherList)) { log.info("新增其他福利档案数量:{}", otherList.size()); //根据人员id和个税扣缴义务人id删除对应档案 otherList.forEach(getOtherSchemeMapper()::deleteByEmployeeIdAndPayOrg); log.info("删除历史其他福利档案"); if (isLog) { log.info("新增其他福利档案明细:{}", otherList); } List> partition = Lists.partition(otherList, 100); partition.forEach(getOtherSchemeMapper()::batchSave); log.info("新增其他福利档案成功"); } //导入福利档案基础信息 if (CollectionUtils.isNotEmpty(baseInfoPOList)) { //根据人员id和个税扣缴义务人id删除对应档案 baseInfoPOList.forEach(getInsuranceBaseInfoMapper()::deleteByEmployeeIdAndPayOrg); log.info("删除历史福利档案基础信息"); // //分批批量删除 List baseInfoEmployeeIds = baseInfoPOList.stream().map(InsuranceArchivesBaseInfoPO::getEmployeeId).collect(Collectors.toList()); //查询目标人员的剩余的福利档案基础信息(社保、公积金、其他福利档案id) List moreBaseInfoPOS = new ArrayList<>(); log.info("查询目标人员的剩余的福利档案基础信息(社保、公积金、其他福利档案id)"); List> partitionInfo = Lists.partition((List) baseInfoEmployeeIds, 1000); partitionInfo.forEach(part -> moreBaseInfoPOS.addAll( getInsuranceBaseInfoMapper().getInsuranceBaseInfoListByInsuranceDetail(part))); List newInsuranceArchivesBaseInfoList = new ArrayList<>(); //设置社保、公积金、其他福利档案id log.info("设置社保、公积金、其他福利档案id"); for (InsuranceArchivesBaseInfoPO po : baseInfoPOList) { 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); } log.info("福利档案基础信息分批批量入库,入库数量:{}", newInsuranceArchivesBaseInfoList.size()); //分批批量入库 if (isLog) { log.info("新增福利档案基础信息明细:{}", newInsuranceArchivesBaseInfoList); } List> partition = Lists.partition(newInsuranceArchivesBaseInfoList, 100); partition.forEach(getInsuranceBaseInfoMapper()::batchSave); } return baseInfoPOList; } catch (Exception e) { log.info("新增福利档案出错:{}", e.getMessage(), e); throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0, "福利档案新增失败")); } } /** * 分批更新福利档案基础信息的runStatus * @param baseInfoPOList * @param runStatus */ private void updateInsuranceBaseInfoRunStatus(List baseInfoPOList, String runStatus) { if (CollectionUtils.isNotEmpty(baseInfoPOList)) { List idList = baseInfoPOList.stream().map(InsuranceArchivesBaseInfoPO::getId).collect(Collectors.toList()); List> partition = Lists.partition(idList, 999); partition.forEach( part -> { InsuranceArchivesBaseInfoPO baseInfoPO = new InsuranceArchivesBaseInfoPO(); baseInfoPO.setIds(part); baseInfoPO.setRunStatus(runStatus); getInsuranceBaseInfoMapper().updateRunStatusByIds(baseInfoPO); } ); } } @Override public Map getSearchCondition(Map param) { Map apidatas = new HashMap<>(16); // apidatas = siArchivesBiz.getSearchCondition(user); apidatas = getSearchCondition(); return apidatas; } @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()); if (StringUtils.isNotBlank(param.getStatusesStr())) { request.setStatuses(Arrays.stream(param.getStatusesStr().split(",")).map(String::new).collect(Collectors.toList())); } 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 = siArchivesBiz.buildTableData(insuranceArchivesEmployeePOS); List> records = buildTableData(insuranceArchivesEmployeePOS); // List columns = siArchivesBiz.buildWeaTableColumns(insuranceArchivesEmployeePOS, user.getUID()); List columns = buildWeaTableColumns(insuranceArchivesEmployeePOS); //工作簿list List> excelSheetData = new ArrayList<>(); //工作簿名称 String sheetName = SalaryI18nUtil.getI18nLabel(85368, "社保福利档案"); //表头 //表头 excelSheetData.add(Arrays.asList(columns.stream().map(WeaTableColumn::getText).toArray(String[]::new))); //工作簿数据 List> rows = new LinkedList<>(); for (Map recordData : records) { List row = new LinkedList<>(); for (WeaTableColumn column : columns) { row.add(recordData.get(column.getColumn())); } rows.add(row); } excelSheetData.addAll(rows); return ExcelUtil.genWorkbookV2(excelSheetData, sheetName); } @Override public List listPageEmployeePOS(InsuranceArchivesListParam param) { long currentEmployeeId = user.getUID(); Boolean needAuth = getTaxAgentService(user).isNeedAuth(currentEmployeeId); if (needAuth) { List taxAgentEmployeeDTOS = getTaxAgentService(user).listTaxAgentAndEmployee(currentEmployeeId); Set employeeIds = SalaryEntityUtil.properties(taxAgentEmployeeDTOS, TaxAgentEmployeeDTO::getEmployeeId); List list = getSocialSchemeMapper().queryEmployeeList(param); return list.stream().filter(f -> employeeIds.contains(f.getEmployeeId())).collect(Collectors.toList()); } return getSocialSchemeMapper().queryEmployeeList(param); } /** * 获取福利档案各tab总人数 */ @Override public Map queryInsuranceTabTotal() { long currentEmployeeId = user.getUID(); // tab页签数量 Map result = new HashMap<>(); Boolean needAuth = getTaxAgentService(user).isNeedAuth(currentEmployeeId); //获取管理的人员范围 List taxAgentEmployeeDTOS = getTaxAgentService(user).listTaxAgentAndEmployeeTree(currentEmployeeId); Map> taxAgentEmployeesMap = SalaryEntityUtil.convert2Map(taxAgentEmployeeDTOS, TaxAgentManageRangeEmployeeDTO::getTaxAgentId, TaxAgentManageRangeEmployeeDTO::getEmployeeList); List list = null; if (needAuth) { // 获取作为管理员的所有个税扣缴义务人列表 Collection taxAgentPOS = getTaxAgentService(user).listAllTaxAgentsAsAdmin(currentEmployeeId); Set taxAgentIds = SalaryEntityUtil.properties(taxAgentPOS, TaxAgentPO::getId); //获取所有福利档案基础信息 List archiveListDTOS = getInsuranceBaseInfoMapper().listAll(); list = archiveListDTOS.stream().filter(dto -> taxAgentIds.contains(dto.getPaymentOrganization())).collect(Collectors.toList()); Boolean adminEnable = getTaxAgentService(user).isAdminEnable(currentEmployeeId); //不是管理员看不到数据,返回空 if (!adminEnable) { list = new ArrayList<>(); } } else { list = getInsuranceBaseInfoMapper().listAll(); } long stayAddTotal = 0L; long payTotal = 0L; long stayDelTotal = 0L; long stopTotal = 0L; long extTotal = 0L; for (InsuranceArchivesBaseInfoPO baseInfoPO : list) { Integer employeeType = baseInfoPO.getEmployeeType(); if (employeeType == null || employeeType == 0) { if (baseInfoPO.getRunStatus().equals(EmployeeStatusEnum.STAY_ADD.getValue())) { stayAddTotal += 1; } else if (baseInfoPO.getRunStatus().equals(EmployeeStatusEnum.PAYING.getValue()) || baseInfoPO.getRunStatus().equals(EmployeeStatusEnum.STAY_DEL.getValue())) { payTotal += 1; if (baseInfoPO.getRunStatus().equals(EmployeeStatusEnum.STAY_DEL.getValue())) { stayDelTotal += 1; } } else if (baseInfoPO.getRunStatus().equals(EmployeeStatusEnum.STOP_PAYMENT_FROM_ADD.getValue()) || baseInfoPO.getRunStatus().equals(EmployeeStatusEnum.STOP_PAYMENT_FROM_DEL.getValue())) { stopTotal += 1; } } else { extTotal += 1; } } result.put("stayAdd", stayAddTotal); result.put("paying", payTotal); result.put("stayDel", stayDelTotal); result.put("stopPay", stopTotal); result.put("ext", extTotal); return result; } /** * 批量变更档案列表的runStatus,目前仅在待增员tab中删除待办使用,后边其他方调用时需修改操作日志记录 */ @Override public void updateRunStatus(InsuranceArchivesBaseInfoPO po) { getInsuranceBaseInfoMapper().updateRunStatusByIds(po); //记录操作日志 List targetPOList = getInsuranceBaseInfoMapper().listByIds(po.getIds()); if (targetPOList != null && targetPOList.size() > 0) { targetPOList.forEach(targetPO -> { DataCollectionEmployee empInfo = getEmployMapper().getEmployeeById(targetPO.getEmployeeId()); TaxAgentPO taxAgentInfo = getTaxAgentMapper().getById(targetPO.getPaymentOrganization()); 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.setNewValues(targetPO); SalaryElogConfig.siArchivesLoggerTemplate.write(loggerContext); }); } } @Override public void cancelStopPayment(Collection ids) { if (CollectionUtils.isEmpty(ids)) { throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(145969, "没有可以操作的记录")); } List pos = getInsuranceBaseInfoMapper().listByIds(ids); List stayAddIds = new ArrayList<>(); List stayDelIds = new ArrayList<>(); List taxAgentManageRangeEmployees = getTaxAgentService(user).listTaxAgentAndEmployee((long) user.getUID()); List oldStayAddList = pos.stream().filter(f -> f.getRunStatus().equals(EmployeeStatusEnum.STOP_PAYMENT_FROM_ADD.getValue())).collect(Collectors.toList()); boolean isNotExist = oldStayAddList.stream().anyMatch(te -> taxAgentManageRangeEmployees.stream().noneMatch(p -> p.getEmployeeId() != null && p.getEmployeeId().equals(te.getEmployeeId()) && p.getTaxAgentId().equals(te.getPaymentOrganization()))); if (isNotExist) { throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(116196, "不在当前个税扣缴义人的人员范围中,不可取消停缴")); } for(InsuranceArchivesBaseInfoPO po : pos) { if (po.getRunStatus().equals(EmployeeStatusEnum.STOP_PAYMENT_FROM_ADD.getValue())) { //来自待增员的停缴->待增员 stayAddIds.add(po.getId()); } else if (po.getRunStatus().equals(EmployeeStatusEnum.STOP_PAYMENT_FROM_DEL.getValue())) { //来自待减员的停缴->待减员 stayDelIds.add(po.getId()); } } //更新调整为待增员的数据 InsuranceArchivesBaseInfoPO stayAddPO = InsuranceArchivesBaseInfoPO.builder().ids(stayAddIds).runStatus(EmployeeStatusEnum.STAY_ADD.getValue()).build(); if (stayAddPO.getIds().size() > 0) { getInsuranceBaseInfoMapper().updateRunStatusByIds(stayAddPO); } //更新调整为待减员的数据 InsuranceArchivesBaseInfoPO stayDelPO = InsuranceArchivesBaseInfoPO.builder().ids(stayDelIds).runStatus(EmployeeStatusEnum.STAY_DEL.getValue()).build(); if (stayDelPO.getIds().size() > 0) { getInsuranceBaseInfoMapper().updateRunStatusByIds(stayDelPO); } //记录操作日志 Map oldBaseInfoMap = SalaryEntityUtil.convert2Map(pos, e -> e.getPaymentOrganization() + "-" + e.getEmployeeId()); List newPos = getInsuranceBaseInfoMapper().listByIds(ids); newPos.forEach(targetPO -> { DataCollectionEmployee empInfo = getEmployMapper().getEmployeeById(targetPO.getEmployeeId()); TaxAgentPO taxAgentInfo = getTaxAgentMapper().getById(targetPO.getPaymentOrganization()); 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(oldBaseInfoMap.get(targetPO.getPaymentOrganization() + "-" + targetPO.getEmployeeId())); loggerContext.setNewValues(targetPO); SalaryElogConfig.siArchivesLoggerTemplate.write(loggerContext); }); } /** * 批量减员 */ @Override public Map stayDelToStop(Collection ids) { if (CollectionUtils.isEmpty(ids)) { throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(145969, "没有可以操作的记录")); } List baseInfoPOList = getInsuranceBaseInfoMapper().listByIds(ids); //分别新建福利档案基础信息相关的社保、公积金、其他福利档案列表 List socialList = new ArrayList<>(); List fundList = new ArrayList<>(); List otherList = new ArrayList<>(); //新建最终可以进行减员的福利档案基础信息id列表 List toStopBaseInfoIdList = new ArrayList<>(); //新建最终不可以进行减员的福利档案基础信息id列表 List noStopBaseInfoIds = new ArrayList<>(); //获取待处理的福利档案基础信息id列表 List baseInfoIds = baseInfoPOList.stream().map(InsuranceArchivesBaseInfoPO::getId).collect(Collectors.toList()); //设置最后缴纳月的比较月份 SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM"); String todayMonth = simpleDateFormat.format(new Date()); //分别获取福利档案基础信息相关的社保、公积金、其他福利档案id列表 List socialIds = baseInfoPOList.stream().map(InsuranceArchivesBaseInfoPO::getSocialArchivesId).collect(Collectors.toList()); List fundIds = baseInfoPOList.stream().map(InsuranceArchivesBaseInfoPO::getFundArchivesId).collect(Collectors.toList()); List otherIds = baseInfoPOList.stream().map(InsuranceArchivesBaseInfoPO::getOtherArchivesId).collect(Collectors.toList()); List toStopSocialIds = new ArrayList<>(); List toStopFundIds = new ArrayList<>(); List toStopOtherIds = new ArrayList<>(); //获取可进行减员的社保档案相关人员数据 if (socialIds.size() > 0) { //获取社保档案 socialList = getSocialSchemeMapper().getSocialById(socialIds); //筛选可减员的社保档案相关信息 toStopSocialIds = socialList.stream().filter(f-> f.getSocialSchemeId() == null || (f.getSocialEndTime() != null && f.getSocialEndTime().length() > 0 && (f.getSocialEndTime().compareTo(todayMonth)) <= 0)) .map(InsuranceArchivesSocialSchemePO::getId).collect(Collectors.toList()); List finalToStopSocialIds = toStopSocialIds; noStopBaseInfoIds = baseInfoPOList.stream().filter(f -> !finalToStopSocialIds.contains(f.getSocialArchivesId())).map(InsuranceArchivesBaseInfoPO::getId).collect(Collectors.toList()); } if (fundIds.size() > 0) { fundList = getFundSchemeMapper().getFundById(fundIds); toStopFundIds = fundList.stream().filter(f->f.getFundSchemeId() == null || (f.getFundEndTime() != null && f.getFundEndTime().length() > 0 && (f.getFundEndTime().compareTo(todayMonth)) <= 0)) .map(InsuranceArchivesFundSchemePO::getId).collect(Collectors.toList()); List finalToStopFundIds = toStopFundIds; noStopBaseInfoIds = (List) CollectionUtils.union(noStopBaseInfoIds, baseInfoPOList.stream().filter(f -> !finalToStopFundIds.contains(f.getFundArchivesId())).map(InsuranceArchivesBaseInfoPO::getId).collect(Collectors.toList())); } if (otherIds.size() > 0) { otherList = getOtherSchemeMapper().getOtherById(otherIds); toStopOtherIds= otherList.stream().filter(f->f.getOtherSchemeId() == null || (f.getOtherEndTime() != null && f.getOtherEndTime().length() > 0 && (f.getOtherEndTime().compareTo(todayMonth)) <= 0)) .map(InsuranceArchivesOtherSchemePO::getId).collect(Collectors.toList()); List finalToStopOtherIds = toStopOtherIds; noStopBaseInfoIds = (List) CollectionUtils.union(noStopBaseInfoIds, baseInfoPOList.stream().filter(f -> !finalToStopOtherIds.contains(f.getOtherArchivesId())).map(InsuranceArchivesBaseInfoPO::getId).collect(Collectors.toList())); } //获取最终基础信息表中的可减员数据 if (noStopBaseInfoIds.size() == 0) { //社保、公积金、其他福利档案的可减员的人员信息与入参中的人员信息一致时 toStopBaseInfoIdList = baseInfoIds; } else { //与最终不可减员的baseInfoId信息做差集 toStopBaseInfoIdList = (List) CollectionUtils.subtract(baseInfoIds, noStopBaseInfoIds); } //进行减员操作 if (toStopBaseInfoIdList.size() > 0) { getInsuranceBaseInfoMapper().updateRunStatusByIds(InsuranceArchivesBaseInfoPO.builder() .ids(toStopBaseInfoIdList).runStatus(EmployeeStatusEnum.STOP_PAYMENT_FROM_DEL.getValue()).build()); //记录操作日志 toStopBaseInfoIdList.forEach(f -> { InsuranceArchivesBaseInfoPO targetPO = getInsuranceBaseInfoMapper().getById(f); if (targetPO != null) { DataCollectionEmployee empInfo = getEmployMapper().getEmployeeById(targetPO.getEmployeeId()); TaxAgentPO taxAgentInfo = getTaxAgentMapper().getById(targetPO.getPaymentOrganization()); 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.setNewValues(targetPO); SalaryElogConfig.siArchivesLoggerTemplate.write(loggerContext); } }); } Map resultMap = new HashMap<>(2); String resultMsg = "操作成功"; String resultType = "success"; // 批量设为定薪提示 //输出结果,此处需区分单一减员和批量减员 if (baseInfoPOList.size() == toStopBaseInfoIdList.size()) { //减员成功 if (baseInfoPOList.size() == 1) { resultMsg = "减员成功"; } else { resultMsg = "批量减员成功"; } } else { //减员失败 resultType = "fail"; if (baseInfoPOList.size() == 1) { resultMsg = "减员失败,失败原因:最后缴纳月数据未正常维护"; } else { resultMsg = "部分或全部失败:【共提交减员数据" + baseInfoIds.size() +"条,成功" + toStopBaseInfoIdList.size() +"条,失败" + noStopBaseInfoIds.size() +"条,失败原因:最后缴纳月数据未正常维护】"; } } resultMap.put("type", resultType); resultMap.put("msg", resultMsg); return resultMap; } @Override public Map stopWithoutLimit(Collection ids, String yearMonth) { if (CollectionUtils.isEmpty(ids)) { throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(145969, "没有可以操作的记录")); } List baseInfoPOList = getInsuranceBaseInfoMapper().listByIds(ids); //分别新建福利档案基础信息相关的社保、公积金、其他福利档案列表 List socialList = new ArrayList<>(); List fundList = new ArrayList<>(); List otherList = new ArrayList<>(); //获取待处理的福利档案基础信息id列表 List baseInfoIds = baseInfoPOList.stream().map(InsuranceArchivesBaseInfoPO::getId).collect(Collectors.toList()); //分别获取福利档案基础信息相关的社保、公积金、其他福利档案id列表 List socialIds = baseInfoPOList.stream().map(InsuranceArchivesBaseInfoPO::getSocialArchivesId).collect(Collectors.toList()); List fundIds = baseInfoPOList.stream().map(InsuranceArchivesBaseInfoPO::getFundArchivesId).collect(Collectors.toList()); List otherIds = baseInfoPOList.stream().map(InsuranceArchivesBaseInfoPO::getOtherArchivesId).collect(Collectors.toList()); //进行减员操作 if (baseInfoIds.size() > 0) { getInsuranceBaseInfoMapper().updateRunStatusByIds(InsuranceArchivesBaseInfoPO.builder() .ids(baseInfoIds).runStatus(EmployeeStatusEnum.STOP_PAYMENT_FROM_DEL.getValue()).build()); getSocialSchemeMapper().batchUpdateEndTime(socialIds, yearMonth); getFundSchemeMapper().batchUpdateEndTime(fundIds, yearMonth); getOtherSchemeMapper().batchUpdateEndTime(otherIds, yearMonth); } Map resultMap = new HashMap<>(2); String resultMsg = "操作成功"; String resultType = "success"; resultMap.put("type", resultType); resultMap.put("msg", resultMsg); return resultMap; } /** * 全量减员 */ @Override public Map allStayDelToStop() { long currentEmployeeId = user.getUID(); List allBaseInfoList = getInsuranceBaseInfoMapper().listAll(); if (allBaseInfoList.size() > 0) { //筛选当前人员可管辖(个税扣缴义务人)范围 Collection taxAgentList = getTaxAgentService(user).listAllTaxAgents(currentEmployeeId); List paymentOrganizationList = taxAgentList.stream().map(TaxAgentPO::getId).collect(Collectors.toList()); Collection stayDelIds = allBaseInfoList.stream().filter(f->f.getRunStatus().equals(EmployeeStatusEnum.STAY_DEL.getValue()) && paymentOrganizationList.contains(f.getPaymentOrganization()) && (f.getEmployeeType() == null || Objects.equals(f.getEmployeeType(), EmployeeTypeEnum.ORGANIZATION.getValue()))) .map(InsuranceArchivesBaseInfoPO::getId).collect(Collectors.toList()); if (stayDelIds.size() > 0) { return stayDelToStop(stayDelIds); } else { throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(145969, "没有可以操作的记录")); } } else { throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(145969, "没有可以操作的记录")); } } /** * 批量增员 */ @Override public Map stayAddToPay(Collection ids) { if (CollectionUtils.isEmpty(ids)) { throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(145969, "没有可以操作的记录")); } List baseInfoPOList = new ArrayList<>(); List> partitionInfo = Lists.partition((List) ids, 100); partitionInfo.forEach(part -> baseInfoPOList.addAll( getInsuranceBaseInfoMapper().listByIds(part))); //分别新建福利档案基础信息相关的社保、公积金、其他福利档案列表 List socialList = new ArrayList<>(); List fundList = new ArrayList<>(); List otherList = new ArrayList<>(); //新建最终可以进行增员的福利档案基础信息id列表 List toPayBaseInfoIdList = new ArrayList<>(); //新建最终不可以进行增员的福利档案基础信息id列表 List noPayBaseInfoIds = new ArrayList<>(); //获取待处理的福利档案基础信息id列表 List baseInfoIds = baseInfoPOList.stream().map(InsuranceArchivesBaseInfoPO::getId).collect(Collectors.toList()); //设置最后缴纳月的比较月份 SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM"); String todayMonth = simpleDateFormat.format(new Date()); //分别获取福利档案基础信息相关的社保、公积金、其他福利档案id列表 List socialIds = baseInfoPOList.stream().map(InsuranceArchivesBaseInfoPO::getSocialArchivesId).collect(Collectors.toList()); List fundIds = baseInfoPOList.stream().map(InsuranceArchivesBaseInfoPO::getFundArchivesId).collect(Collectors.toList()); List otherIds = baseInfoPOList.stream().map(InsuranceArchivesBaseInfoPO::getOtherArchivesId).collect(Collectors.toList()); List toStopSocialIds = new ArrayList<>(); List toStopFundIds = new ArrayList<>(); List toStopOtherIds = new ArrayList<>(); //获取可进行增员的社保档案相关人员数据 if (socialIds.size() > 0) { //获取社保档案 List> partitionSocial = Lists.partition((List) socialIds, 100); partitionSocial.forEach(part -> socialList.addAll( getSocialSchemeMapper().getSocialById(part))); //筛选可增员的社保档案相关人员信息 toStopSocialIds = socialList.stream().filter(f-> { boolean flag = true; if (f.getSocialStartTime() == null || f.getSocialStartTime().length() == 0 || f.getSocialSchemeId() == null) { flag = false; } if (f.getSocialEndTime() != null && f.getSocialEndTime().length() > 0 && (f.getSocialEndTime().compareTo(todayMonth)) <= 0) { flag = false; } return flag; }) .map(InsuranceArchivesSocialSchemePO::getId).collect(Collectors.toList()); List finalToStopSocialIds = toStopSocialIds; toPayBaseInfoIdList = baseInfoPOList.stream().filter(f -> finalToStopSocialIds.contains(f.getSocialArchivesId())).map(InsuranceArchivesBaseInfoPO::getId).collect(Collectors.toList()); } if (fundIds.size() > 0) { List> partitionFund = Lists.partition((List) fundIds, 100); partitionFund.forEach(part -> fundList.addAll( getFundSchemeMapper().getFundById(part))); toStopFundIds = fundList.stream().filter(f-> { boolean flag = true; if (f.getFundStartTime() == null || f.getFundStartTime().length() == 0 || f.getFundSchemeId() == null) { flag = false; } if (f.getFundEndTime() != null && f.getFundEndTime().length() > 0 && (f.getFundEndTime().compareTo(todayMonth)) <= 0) { flag = false; } return flag; }) .map(InsuranceArchivesFundSchemePO::getId).collect(Collectors.toList()); List finalToStopFundIds = toStopFundIds; toPayBaseInfoIdList = (List) CollectionUtils.union(toPayBaseInfoIdList, baseInfoPOList.stream().filter(f -> finalToStopFundIds.contains(f.getFundArchivesId())).map(InsuranceArchivesBaseInfoPO::getId).collect(Collectors.toList())); } if (otherIds.size() > 0) { List> partitionOther = Lists.partition((List) otherIds, 100); partitionOther.forEach(part -> otherList.addAll( getOtherSchemeMapper().getOtherById(part))); toStopOtherIds = otherList.stream().filter(f-> { boolean flag = true; if (f.getOtherStartTime() == null || f.getOtherStartTime().length() == 0 || f.getOtherSchemeId() == null) { flag = false; } if (f.getOtherEndTime() != null && f.getOtherEndTime().length() > 0 && (f.getOtherEndTime().compareTo(todayMonth)) <= 0) { flag = false; } return flag; }) .map(InsuranceArchivesOtherSchemePO::getId).collect(Collectors.toList()); List finalToStopOtherIds = toStopOtherIds; toPayBaseInfoIdList = (List) CollectionUtils.union(toPayBaseInfoIdList, baseInfoPOList.stream().filter(f -> finalToStopOtherIds.contains(f.getOtherArchivesId())).map(InsuranceArchivesBaseInfoPO::getId).collect(Collectors.toList())); } //获取最终基础信息表中的不可增员数据 noPayBaseInfoIds = (List) CollectionUtils.subtract(baseInfoIds, toPayBaseInfoIdList); //其他的个税扣缴义务人下的在缴员工中存在该员工,在缴员工未进入停缴员工时,不可进行增员 //进行增员操作 if (toPayBaseInfoIdList.size() > 0) { List> partitionToPay = Lists.partition((List) toPayBaseInfoIdList, 100); partitionToPay.forEach(part -> { getInsuranceBaseInfoMapper().updateRunStatusByIds(InsuranceArchivesBaseInfoPO.builder() .ids(part).runStatus(EmployeeStatusEnum.PAYING.getValue()).build()); }); //记录操作日志 toPayBaseInfoIdList.forEach(f -> { InsuranceArchivesBaseInfoPO targetPO = getInsuranceBaseInfoMapper().getById(f); if (targetPO != null) { DataCollectionEmployee empInfo = getEmployMapper().getEmployeeById(targetPO.getEmployeeId()); TaxAgentPO taxAgentInfo = getTaxAgentMapper().getById(targetPO.getPaymentOrganization()); 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.setNewValues(targetPO); SalaryElogConfig.siArchivesLoggerTemplate.write(loggerContext); } }); } Map resultMap = new HashMap<>(2); String resultMsg = "操作成功"; String resultType = "success"; // 批量设为定薪提示 //输出结果,此处需区分单一增员和批量增员 if (baseInfoPOList.size() == toPayBaseInfoIdList.size()) { //增员成功 if (baseInfoPOList.size() == 1) { resultMsg = "增员成功"; } else { resultMsg = "批量增员成功"; } } else { //增员失败 resultType = "fail"; if (baseInfoPOList.size() == 1) { resultMsg = "增员失败,失败原因:起始缴纳月/福利方案数据未正常维护"; } else { resultMsg = "部分或全部失败:【共提交增员数据" + baseInfoIds.size() +"条,成功" + toPayBaseInfoIdList.size() +"条,失败" + noPayBaseInfoIds.size() +"条,失败原因:起始缴纳月/福利方案数据未正常维护】"; } } resultMap.put("type", resultType); resultMap.put("msg", resultMsg); return resultMap; } /** * 全量增员 */ @Override public Map allStayAddToPay() { long currentEmployeeId = user.getUID(); List allBaseInfoList = getInsuranceBaseInfoMapper().listAll(); if (allBaseInfoList.size() > 0) { //筛选当前人员可管辖(个税扣缴义务人)范围 Collection taxAgentList = getTaxAgentService(user).listAllTaxAgents(currentEmployeeId); List paymentOrganizationList = taxAgentList.stream().map(TaxAgentPO::getId).collect(Collectors.toList()); Collection stayAddIds = allBaseInfoList.stream().filter(f->f.getRunStatus().equals(EmployeeStatusEnum.STAY_ADD.getValue()) && paymentOrganizationList.contains(f.getPaymentOrganization()) && (f.getEmployeeType() == null || Objects.equals(f.getEmployeeType(), EmployeeTypeEnum.ORGANIZATION.getValue()))) .map(InsuranceArchivesBaseInfoPO::getId).collect(Collectors.toList()); if (stayAddIds.size() > 0) { return stayAddToPay(stayAddIds); } else { throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(145969, "没有可以操作的记录")); } } else { throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(145969, "没有可以操作的记录")); } } /** * 待减员页面的删除待办 */ @Override public void cancelStayDel(InsuranceArchivesBaseInfoPO insuranceArchivesBaseInfoPO) { if (insuranceArchivesBaseInfoPO.getIds() == null || StringUtils.isBlank(insuranceArchivesBaseInfoPO.getRunStatus())) { throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(84026, "参数错误")); } if (insuranceArchivesBaseInfoPO.getRunStatus().equals(EmployeeStatusEnum.STAY_DEL.getValue())) { List> baseInfoIdsPartition = Lists.partition((List) insuranceArchivesBaseInfoPO.getIds(), 100); List nowList = new ArrayList<>(); baseInfoIdsPartition.forEach(part -> { nowList.addAll(getInsuranceBaseInfoMapper().listByIds(part)); }); //判断当前被操作人员是否都在对应的个税扣缴义务人下 List taxAgentManageRangeEmployees = getTaxAgentService(user).listTaxAgentAndEmployee((long) user.getUID()); boolean isNotExist = nowList.stream().anyMatch(te -> taxAgentManageRangeEmployees.stream().noneMatch(p -> p.getEmployeeId() != null && p.getEmployeeId().equals(te.getEmployeeId()) && p.getTaxAgentId().equals(te.getPaymentOrganization()))); if (isNotExist) { throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(116196, "个税扣缴义务人不存在或不在权限范围内,删除失败!")); } //置空社保、公积金、其他福利档案的最后缴纳月信息,并将福利档案基础信息表的状态置为“正在缴纳” if (nowList.size() > 0) { List socialIds = nowList.stream() .map(InsuranceArchivesBaseInfoPO::getSocialArchivesId).collect(Collectors.toList()); List fundIds = nowList.stream() .map(InsuranceArchivesBaseInfoPO::getFundArchivesId).collect(Collectors.toList()); List otherIds = nowList.stream() .map(InsuranceArchivesBaseInfoPO::getOtherArchivesId).collect(Collectors.toList()); List> socialIdsPartition = Lists.partition(socialIds, 100); socialIdsPartition.forEach(getSocialSchemeMapper()::batchUpdateEndTimeToNull); List> fundIdsPartition = Lists.partition(fundIds, 100); fundIdsPartition.forEach(getFundSchemeMapper()::batchUpdateEndTimeToNull); List> otherIdsPartition = Lists.partition(otherIds, 100); otherIdsPartition.forEach(getOtherSchemeMapper()::batchUpdateEndTimeToNull); baseInfoIdsPartition.forEach(part -> { getInsuranceBaseInfoMapper().updateRunStatusByIds(InsuranceArchivesBaseInfoPO.builder() .ids(part) .runStatus(EmployeeStatusEnum.PAYING.getValue()) .build()); }); nowList.forEach(targetPO -> { DataCollectionEmployee empInfo = getEmployMapper().getEmployeeById(targetPO.getEmployeeId()); TaxAgentPO taxAgentInfo = getTaxAgentMapper().getById(targetPO.getPaymentOrganization()); 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.setNewValues(targetPO); SalaryElogConfig.siArchivesLoggerTemplate.write(loggerContext); }); } } } @Override public PageInfo getAdjustHistoryList(SIArchiveBaseHistoryListParam param) { if (param.getWelfareTypeEnum() == null) { throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0, "参数错误")); } // List adjustHistoryDTOS = siArchivesBiz.getAdjustHistoryList(param.getPaymentOrganization(), param.getEmployeeId()); List adjustHistoryDTOS = getAdjustHistoryList(param.getPaymentOrganization(), param.getEmployeeId()); List targetHistory = adjustHistoryDTOS.stream() .filter(f -> f.getWelfareType().equals(param.getWelfareTypeEnum().getValue())).collect(Collectors.toList()); PageInfo listPage = SalaryPageUtil.buildPage(param.getCurrent(), param.getPageSize(), targetHistory , InsuranceArchivesBaseHistoryDTO.class); return listPage; } @Override public PageInfo historyListByEmployeeIdAndOperator(SIArchiveBaseHistoryListParam param) { // List adjustHistoryDTOS = siArchivesBiz.getBaseHistoryByEmployeeIdAndOperator(param.getOperator(), param.getEmployeeId()); List adjustHistoryDTOS = getBaseHistoryByEmployeeIdAndOperator(param.getOperator(), param.getEmployeeId()); // 分权逻辑 Boolean needAuth = getTaxAgentService(user).isNeedAuth((long) user.getUID()); if (needAuth) { Collection taxAgentPOS = getTaxAgentService(user).listAllTaxAgents((long) user.getUID()); List taxAgents = taxAgentPOS.stream().map(TaxAgentPO::getId).collect(Collectors.toList()); if (CollectionUtils.isEmpty(taxAgents)) { //防止普通用户查询 adjustHistoryDTOS = new ArrayList<>(); } else { adjustHistoryDTOS = adjustHistoryDTOS.stream().filter(f -> taxAgents.contains(f.getPaymentOrganization())).collect(Collectors.toList()); } } adjustHistoryDTOS.forEach(f -> { if (StringUtils.isNotBlank(f.getPaymentScope())) { if(f.getPaymentScope().equals(PaymentScopeEnum.SCOPE_PERSON.getValue().toString())) { f.setPaymentScope(SalaryI18nUtil.getI18nLabel(0, "个人")); } else if(f.getPaymentScope().equals(PaymentScopeEnum.SCOPE_COMPANY.getValue().toString())) { f.setPaymentScope(SalaryI18nUtil.getI18nLabel(0, "公司")); } else { f.setPaymentScope(SalaryI18nUtil.getI18nLabel(0, "个人") + "," + SalaryI18nUtil.getI18nLabel(0, "公司")); } } else { f.setPaymentScope(SalaryI18nUtil.getI18nLabel(0, "个人") + "," + SalaryI18nUtil.getI18nLabel(0, "公司")); } }); PageInfo listPage = SalaryPageUtil.buildPage(param.getCurrent(), param.getPageSize(), adjustHistoryDTOS , InsuranceArchivesBaseHistoryDTO.class); return listPage; } /** * 拷贝福利档案到新的个税扣缴义务人并置为在缴 */ @Override public Map copyToPay(Long toCopyTaxAgentId, Long toUpdateTaxAgentId, Long employeeId, String payStartYearMonth) { if (toCopyTaxAgentId == null || toUpdateTaxAgentId == null) { throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0, "个税扣缴义务人不能为空")); } if (employeeId == null) { throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0, "人员id不能为空")); } //获取待拷贝的福利档案明细 InsuranceArchivesBaseInfoPO toCopyBaseInfoPO = getInsuranceBaseInfoMapper().getOneByEmployeeIdAndPayOrg(toCopyTaxAgentId, employeeId); if(toCopyBaseInfoPO == null){ throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0, "待复制个税扣缴义务人下该员工不存在福利档案,请检查后重试!")); } InsuranceArchivesSocialSchemePO toCopySocialInfo = getSocialSchemeMapper().getOneById(toCopyBaseInfoPO.getSocialArchivesId()); InsuranceArchivesFundSchemePO toCopyFundInfo = getFundSchemeMapper().getOneById(toCopyBaseInfoPO.getFundArchivesId()); InsuranceArchivesOtherSchemePO toCopyOtherInfo = getOtherSchemeMapper().getOneById(toCopyBaseInfoPO.getOtherArchivesId()); //获取待更新的福利档案 InsuranceArchivesBaseInfoPO toUpdateBaseInfoPO = getInsuranceBaseInfoMapper().getOneByEmployeeIdAndPayOrg(toUpdateTaxAgentId, employeeId); if(toUpdateBaseInfoPO == null){ throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0, "待更新个税扣缴义务人下该员工不存在福利档案,请检查后重试!")); } InsuranceArchivesSocialSchemePO toUpdateSocialInfo = getSocialSchemeMapper().getOneById(toUpdateBaseInfoPO.getSocialArchivesId()); InsuranceArchivesFundSchemePO toUpdateFundInfo = getFundSchemeMapper().getOneById(toUpdateBaseInfoPO.getFundArchivesId()); InsuranceArchivesOtherSchemePO toUpdateOtherInfo = getOtherSchemeMapper().getOneById(toUpdateBaseInfoPO.getOtherArchivesId()); //设置福利档案基数调整记录数据 encryptUtil.decrypt(toCopySocialInfo, InsuranceArchivesSocialSchemePO.class); encryptUtil.decrypt(toUpdateSocialInfo, InsuranceArchivesSocialSchemePO.class); encryptUtil.decrypt(toCopyFundInfo, InsuranceArchivesFundSchemePO.class); encryptUtil.decrypt(toUpdateFundInfo, InsuranceArchivesFundSchemePO.class); encryptUtil.decrypt(toCopyOtherInfo, InsuranceArchivesOtherSchemePO.class); encryptUtil.decrypt(toUpdateOtherInfo, InsuranceArchivesOtherSchemePO.class); InsuranceArchivesBaseHistoryDTO socialAdjustInfo = InsuranceArchivesBaseHistoryDTO.builder() .adjustAfterSchemeId(toCopySocialInfo.getSocialSchemeId()) .adjustAfterBaseJson(toCopySocialInfo.getSocialPaymentBaseString()) .adjustAfterComBaseJson(toCopySocialInfo.getSocialPaymentComBaseString()) .welfareType(toUpdateSocialInfo.getWelfareType()) .employeeId(toUpdateSocialInfo.getEmployeeId()) .paymentOrganization(toUpdateSocialInfo.getPaymentOrganization()) .adjustBeforeSchemeId(toUpdateSocialInfo.getSocialSchemeId()) .adjustBeforeBaseJson(toUpdateSocialInfo.getSocialPaymentBaseString()) .adjustBeforeComBaseJson(toUpdateSocialInfo.getSocialPaymentComBaseString()) .build(); InsuranceArchivesBaseHistoryDTO fundAdjustInfo = InsuranceArchivesBaseHistoryDTO.builder() .adjustAfterSchemeId(toCopyFundInfo.getFundSchemeId()) .adjustAfterBaseJson(toCopyFundInfo.getFundPaymentBaseString()) .adjustAfterComBaseJson(toCopyFundInfo.getFundPaymentComBaseString()) .welfareType(toUpdateFundInfo.getWelfareType()) .employeeId(toUpdateFundInfo.getEmployeeId()) .paymentOrganization(toUpdateFundInfo.getPaymentOrganization()) .adjustBeforeSchemeId(toUpdateFundInfo.getFundSchemeId()) .adjustBeforeBaseJson(toUpdateFundInfo.getFundPaymentBaseString()) .adjustBeforeComBaseJson(toUpdateFundInfo.getFundPaymentComBaseString()) .build(); InsuranceArchivesBaseHistoryDTO otherAdjustInfo = InsuranceArchivesBaseHistoryDTO.builder() .adjustAfterSchemeId(toCopyOtherInfo.getOtherSchemeId()) .adjustAfterBaseJson(toCopyOtherInfo.getOtherPaymentBaseString()) .adjustAfterComBaseJson(toCopyOtherInfo.getOtherPaymentComBaseString()) .welfareType(toUpdateOtherInfo.getWelfareType()) .employeeId(toUpdateOtherInfo.getEmployeeId()) .paymentOrganization(toUpdateOtherInfo.getPaymentOrganization()) .adjustBeforeSchemeId(toUpdateOtherInfo.getOtherSchemeId()) .adjustBeforeBaseJson(toUpdateOtherInfo.getOtherPaymentBaseString()) .adjustBeforeComBaseJson(toUpdateOtherInfo.getOtherPaymentComBaseString()) .build(); List adjustHistoryList = new ArrayList<>(); adjustHistoryList.addAll(createAdjustInfo(socialAdjustInfo, (long) user.getUID())); adjustHistoryList.addAll(createAdjustInfo(fundAdjustInfo, (long) user.getUID())); adjustHistoryList.addAll(createAdjustInfo(otherAdjustInfo, (long) user.getUID())); //更新字段 toUpdateBaseInfoPO.setRunStatus(EmployeeStatusEnum.PAYING.getValue()); toUpdateSocialInfo.setSocialAccount(toCopySocialInfo.getSocialAccount()); toUpdateSocialInfo.setSocialSchemeId(toCopySocialInfo.getSocialSchemeId()); toUpdateSocialInfo.setSocialPaymentBaseString(toCopySocialInfo.getSocialPaymentBaseString()); toUpdateSocialInfo.setSocialPaymentComBaseString(toCopySocialInfo.getSocialPaymentComBaseString()); toUpdateSocialInfo.setNonPayment(toCopySocialInfo.getNonPayment()); toUpdateSocialInfo.setUnderTake(toCopySocialInfo.getUnderTake()); toUpdateSocialInfo.setSocialStartTime(StringUtils.isNotBlank(payStartYearMonth) ? payStartYearMonth : toCopySocialInfo.getSocialStartTime()); toUpdateSocialInfo.setUpdateTime(new Date()); toUpdateFundInfo.setFundAccount(toCopyFundInfo.getFundAccount()); toUpdateFundInfo.setSupplementFundAccount(toCopyFundInfo.getSupplementFundAccount()); toUpdateFundInfo.setFundSchemeId(toCopyFundInfo.getFundSchemeId()); toUpdateFundInfo.setFundPaymentBaseString(toCopyFundInfo.getFundPaymentBaseString()); toUpdateFundInfo.setFundPaymentComBaseString(toCopyFundInfo.getFundPaymentComBaseString()); toUpdateFundInfo.setNonPayment(toCopyFundInfo.getNonPayment()); toUpdateFundInfo.setUnderTake(toCopyFundInfo.getUnderTake()); toUpdateFundInfo.setFundStartTime(StringUtils.isNotBlank(payStartYearMonth) ? payStartYearMonth : toCopyFundInfo.getFundStartTime()); toUpdateFundInfo.setUpdateTime(new Date()); toUpdateOtherInfo.setOtherSchemeId(toCopyOtherInfo.getOtherSchemeId()); toUpdateOtherInfo.setOtherPaymentBaseString(toCopyOtherInfo.getOtherPaymentBaseString()); toUpdateOtherInfo.setOtherPaymentComBaseString(toCopyOtherInfo.getOtherPaymentComBaseString()); toUpdateOtherInfo.setNonPayment(toCopyOtherInfo.getNonPayment()); toUpdateOtherInfo.setUnderTake(toCopyOtherInfo.getUnderTake()); toUpdateOtherInfo.setOtherStartTime(StringUtils.isNotBlank(payStartYearMonth) ? payStartYearMonth : toCopyOtherInfo.getOtherStartTime()); toUpdateOtherInfo.setUpdateTime(new Date()); //档案入库 encryptUtil.encrypt(toUpdateSocialInfo, InsuranceArchivesSocialSchemePO.class); encryptUtil.encrypt(toUpdateFundInfo, InsuranceArchivesFundSchemePO.class); encryptUtil.encrypt(toUpdateOtherInfo, InsuranceArchivesOtherSchemePO.class); getInsuranceBaseInfoMapper().updateById(toUpdateBaseInfoPO); getSocialSchemeMapper().updateById(toUpdateSocialInfo); getFundSchemeMapper().updateById(toUpdateFundInfo); getOtherSchemeMapper().updateById(toUpdateOtherInfo); //基数调整记录入库 // siArchivesBiz.batchInsertAdjustHistory(adjustHistoryList, (long) user.getUID()); batchInsertAdjustHistory(adjustHistoryList); Map resultMap = new HashMap<>(2); String resultMsg = "操作成功"; String resultType = "success"; resultMap.put("type", resultType); resultMap.put("msg", resultMsg); return resultMap; } /*****以下代码为SIArchivesBiz中逻辑迁移,旨在减少Biz类的使用*****/ /** * 判断是否需要生成历史福利档案基本信息 */ public Boolean createOldInsuranceBaseInfo(Long creator) { log.info("判断是否需要生成历史数据"); List nowBaseInfoList = getInsuranceBaseInfoMapper().getInsuranceBaseInfoList(); if (nowBaseInfoList.size() == 0) { StopWatch sw = new StopWatch(); log.info("福利档案基础信息表为空,开始生成历史数据:"); //处理公积金、其他福利档案中个税扣缴义务人为空的情况 sw.start("处理公积金、其他福利档案中个税扣缴义务人为空的情况"); List socialList = getSocialSchemeMapper().listAll(); List fundList = getFundSchemeMapper().listAll(); List otherList = getOtherSchemeMapper().listAll(); List updateFundList = new ArrayList<>(); List updateOtherList = new ArrayList<>(); for (InsuranceArchivesSocialSchemePO socialSchemePO : socialList) { List toDealFundList = fundList.stream().filter(f -> f.getEmployeeId().equals(socialSchemePO.getEmployeeId()) && f.getPaymentOrganization() == null).collect(Collectors.toList()); if (toDealFundList.size() > 0) { InsuranceArchivesFundSchemePO toDealFundPO = toDealFundList.get(0); toDealFundPO.setPaymentOrganization(socialSchemePO.getPaymentOrganization()); updateFundList.add(toDealFundPO); } List toDealOtherList = otherList.stream().filter(f -> f.getEmployeeId().equals(socialSchemePO.getEmployeeId()) && f.getPaymentOrganization() == null).collect(Collectors.toList()); if (toDealOtherList.size() > 0) { InsuranceArchivesOtherSchemePO toDealOtherPO = toDealOtherList.get(0); toDealOtherPO.setPaymentOrganization(socialSchemePO.getPaymentOrganization()); updateOtherList.add(toDealOtherPO); } } log.info("重置个税扣缴义务人id的公积金档案数:{}", updateFundList.size()); log.info("重置个税扣缴义务人id的其他福利档案数:{}", updateOtherList.size()); //更新公积金和其他福利档案 updateFundList.forEach(getFundSchemeMapper()::updateById); updateOtherList.forEach(getOtherSchemeMapper()::updateById); sw.stop(); sw.start("处理待入库的历史福利档案基础信息并入库"); List addBaseInfoList = new ArrayList<>(); List oldBaseInfoList = getInsuranceBaseInfoMapper().getInsuranceBaseInfoListByInsuranceDetail(null); log.info("获取待生成的历史福利档案基础信息条数:{}", oldBaseInfoList.size()); //去重 oldBaseInfoList = oldBaseInfoList.stream() .collect(Collectors.collectingAndThen(Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(f -> f.getPaymentOrganization() + "-" + f.getEmployeeId()))), ArrayList::new)); log.info("去重后的待生成历史福利档案基础信息条数:{}", oldBaseInfoList.size()); if (oldBaseInfoList.size() > 0) { //设置基本信息表字段 for (InsuranceArchivesBaseInfoPO po : oldBaseInfoList) { po.setId(IdGenerator.generate()); po.setCreateTime(new Date()); po.setDeleteType(0); po.setCreator(creator); po.setRunStatus(EmployeeStatusEnum.STAY_ADD.getValue()); po.setUpdateTime(new Date()); po.setTenantKey(SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY); addBaseInfoList.add(po); } //将历史基本信息入库 List> partition = Lists.partition(addBaseInfoList, 50); partition.forEach(getInsuranceBaseInfoMapper()::batchSave); sw.stop(); log.info("各操作计时 {}", sw.prettyPrint()); return true; }else { return false; } } else { return false; } } @Override public List> buildTableData(List insuranceArchivesEmployeePOS) { return buildTableData(insuranceArchivesEmployeePOS, false); } /** * @param insuranceArchivesEmployeePOS * @return */ public List> buildTableData(List insuranceArchivesEmployeePOS, boolean export) { boolean welBaseDiffSign = isDiffWelBase(); List taxAgentPOS = getTaxAgentMapper().listAll(); Map longTaxAgentPOMap = SalaryEntityUtil.convert2Map(taxAgentPOS, TaxAgentPO::getId); List> records = new ArrayList<>(); Map socialSchemePOMap = encryptUtil.decryptList(this.getSocialByEmployeeIdAndPayOrg(insuranceArchivesEmployeePOS), InsuranceArchivesSocialSchemePO.class) .stream().collect(Collectors.toMap(InsuranceArchivesSocialSchemePO::getId, Function.identity())); Map fundSchemePOMap = encryptUtil.decryptList(this.getFundByEmployeeIdAndPayOrg(insuranceArchivesEmployeePOS), InsuranceArchivesFundSchemePO.class) .stream().collect(Collectors.toMap(InsuranceArchivesFundSchemePO::getId, Function.identity())); List otherByEmployeeList = this.getOtherByEmployeeIdAndPayOrg(insuranceArchivesEmployeePOS); encryptUtil.decryptList(otherByEmployeeList, InsuranceArchivesOtherSchemePO.class); Map otherSchemePOMap = otherByEmployeeList .stream().collect(Collectors.toMap(InsuranceArchivesOtherSchemePO::getId, Function.identity())); insuranceArchivesEmployeePOS.forEach(item -> { InsuranceArchivesSocialSchemePO socialItem = socialSchemePOMap.get(item.getSocialId()); InsuranceArchivesFundSchemePO fundItem = fundSchemePOMap.get(item.getFundId()); InsuranceArchivesOtherSchemePO otherItem = otherSchemePOMap.get(item.getOtherId()); Map map = new HashMap<>(); map.put("employeeName", item.getUserName()); map.put("paymentOrganizationName", longTaxAgentPOMap.get(item.getPaymentOrganization()) != null ? longTaxAgentPOMap.get(item.getPaymentOrganization()).getName() : ""); map.put("employeeId", item.getEmployeeId()); map.put("departmentName", item.getDepartmentName()); map.put("subcompanyName", item.getSubcompanyName()); map.put("departmentId", item.getDepartmentId()); map.put("jobNum", item.getJobNum()); map.put("companystartdate", item.getCompanystartdate()); map.put("dismissdate", item.getDimissionDate()); map.put("mobile", item.getTelephone()); map.put("siSchemeId", item.getSiSchemeId()); map.put("fundSchemeId", item.getFundSchemeId()); map.put("otherSchemeId", item.getOtherSchemeId()); map.put("status", item.getUserStatus() != null ? UserStatusEnum.getDefaultLabelByValue(item.getUserStatus()) : ""); map.put("baseInfo", item.getBaseInfoId()); map.put("paymentOrganization", item.getPaymentOrganization()); if (socialItem != null) { map.put("socialName", getInsuranceSchemeMapper().querySchemeName(socialItem.getSocialSchemeId())); Map socialJson = JSON.parseObject(socialItem.getSocialPaymentBaseString(), new TypeReference>() { }); if (welBaseDiffSign) { if (socialJson != null) { //查询该福利方案下开启缴纳的福利项 List insuranceIdList = 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 = 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", getInsuranceSchemeMapper().querySchemeName(fundItem.getFundSchemeId())); map.put("fundAccount", fundItem.getFundAccount()); Map fundJson = JSON.parseObject(fundItem.getFundPaymentBaseString(), new TypeReference>() { }); if (welBaseDiffSign) { if (fundJson != null) { //查询该福利方案下开启缴纳的福利项 List insuranceIdList = 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 = 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", getInsuranceSchemeMapper().querySchemeName(otherItem.getOtherSchemeId())); Map otherJson = JSON.parseObject(otherItem.getOtherPaymentBaseString(), new TypeReference>() { }); if (welBaseDiffSign) { if (otherJson != null) { //查询该福利方案下开启缴纳的福利项 List insuranceIdList = 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 = 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; } @Override public boolean isDiffWelBase() { User user = (User) SalaryContext.get().getValue("user"); //判断是否要区分个人和单位福利基数 SalarySysConfPO welBaseDiff = getSalarySysConfService(user).getOneByCode(WEL_BASE_DIFF_BY_PER_AND_COM); return welBaseDiff != null && welBaseDiff.getConfValue().equals(OpenEnum.OPEN.getValue()); } /** * 根据人员id和个税扣缴人id获取记录 */ public List getSocialByEmployeeIdAndPayOrg(List insuranceArchivesEmployeePOS) { List allList = new ArrayList<>(); for (InsuranceArchivesEmployeePO po : insuranceArchivesEmployeePOS) { List socialList = getSocialSchemeMapper().getSocialByEmployeeIdAndPayOrg(po); if (socialList.size() > 0) { allList.add(socialList.get(0)); } } return allList; } public List getFundByEmployeeIdAndPayOrg(List insuranceArchivesEmployeePOS) { List allList = new ArrayList<>(); for (InsuranceArchivesEmployeePO po : insuranceArchivesEmployeePOS) { List fundList = getFundSchemeMapper().getFundByEmployeeIdAndPayOrg(po); if (fundList.size() > 0) { allList.add(fundList.get(0)); } } return allList; } public List getOtherByEmployeeIdAndPayOrg(List insuranceArchivesEmployeePOS) { List allList = new ArrayList<>(); for (InsuranceArchivesEmployeePO po : insuranceArchivesEmployeePOS) { List otherList = getOtherSchemeMapper().getOtherByEmployeeIdAndPayOrg(po); if (otherList.size() > 0) { allList.add(otherList.get(0)); } } return allList; } @Override public List payInsuranceIds(Long socialSchemeId, Integer paymentScope) { //查询该福利方案下开启缴纳的福利项 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()) && f.getPaymentScope().equals(paymentScope)) .map(InsuranceSchemeDetailPO::getInsuranceId).collect(Collectors.toList()); } return insuranceIdList; } @Override 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 List buildWeaTableColumns(List insuranceArchivesEmployeePOS) { Map> titleMap = buildColumnTitle(insuranceArchivesEmployeePOS); List list = new ArrayList<>(); WeaTableColumn nameColumn = new WeaTableColumn("100px", SalaryI18nUtil.getI18nLabel(0, "姓名"), "employeeName"); nameColumn.setFixed("left"); list.add(nameColumn); list.add(new WeaTableColumn("150px", SalaryI18nUtil.getI18nLabel(0, "个税扣缴义务人"), "paymentOrganizationName")); list.add(new WeaTableColumn("150px", SalaryI18nUtil.getI18nLabel(0, "分部"), "subcompanyName")); list.add(new WeaTableColumn("150px", SalaryI18nUtil.getI18nLabel(0, "部门"), "departmentName")); list.add(new WeaTableColumn("150px", SalaryI18nUtil.getI18nLabel(0, "手机号"), "mobile")); list.add(new WeaTableColumn("150px", SalaryI18nUtil.getI18nLabel(0, "员工状态"), "status")); list.add(new WeaTableColumn("150px", SalaryI18nUtil.getI18nLabel(0, "工号"), "jobNum")); list.add(new WeaTableColumn("150px", SalaryI18nUtil.getI18nLabel(0, "入职日期"), "companystartdate")); // list.add(new WeaTableColumn("150px", SalaryI18nUtil.getI18nLabel(0, "合同到期日期"), "dismissdate")); list.add(new WeaTableColumn("150px", SalaryI18nUtil.getI18nLabel(0, "社保方案名称"), "socialName")); titleMap.get(WelfareTypeEnum.SOCIAL_SECURITY.getValue()).forEach((k, v) -> list.add(new WeaTableColumn("150px", v, k))); list.add(new WeaTableColumn("150px", SalaryI18nUtil.getI18nLabel(0, "社保账号"), "socialAccount")); list.add(new WeaTableColumn("150px", SalaryI18nUtil.getI18nLabel(0, "社保起始缴纳月"), "socialStartTime")); list.add(new WeaTableColumn("150px", SalaryI18nUtil.getI18nLabel(0, "社保最后缴纳月"), "socialEndTime")); list.add(new WeaTableColumn("150px", SalaryI18nUtil.getI18nLabel(0, "公积金方案名称"), "fundName")); list.add(new WeaTableColumn("150px", SalaryI18nUtil.getI18nLabel(0, "公积金账号"), "fundAccount")); titleMap.get(WelfareTypeEnum.ACCUMULATION_FUND.getValue()).forEach((k, v) -> list.add(new WeaTableColumn("150px", v, k))); list.add(new WeaTableColumn("150px", SalaryI18nUtil.getI18nLabel(0, "补充公积金账号"), "supplementFundAccount")); list.add(new WeaTableColumn("150px", SalaryI18nUtil.getI18nLabel(0, "公积金起始缴纳月"), "fundStartTime")); list.add(new WeaTableColumn("150px", SalaryI18nUtil.getI18nLabel(0, "公积金最后缴纳月"), "fundEndTime")); list.add(new WeaTableColumn("150px", SalaryI18nUtil.getI18nLabel(0, "其他福利方案名称"), "otherName")); titleMap.get(WelfareTypeEnum.OTHER.getValue()).forEach((k, v) -> list.add(new WeaTableColumn("150px", v, k))); list.add(new WeaTableColumn("150px", SalaryI18nUtil.getI18nLabel(0, "其他福利起始缴纳月"), "otherStartTime")); list.add(new WeaTableColumn("150px", SalaryI18nUtil.getI18nLabel(0, "其他福利最后缴纳月"), "otherEndTime")); return list; } public Map> buildColumnTitle(List insuranceArchivesEmployeePOS) { boolean welBaseDiffSign = isDiffWelBase(); SqlSession sqlSession = MyBatisFactory.sqlSessionFactory.openSession(); Map> result = new HashMap<>(); insuranceArchivesEmployeePOS = insuranceArchivesEmployeePOS.stream() .filter(f -> f.getEmployeeId() != null) .collect(Collectors.collectingAndThen(Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(InsuranceArchivesEmployeePO::getEmployeeId))), ArrayList::new)); try { SocialSchemeMapper socialSchemeMapper = sqlSession.getMapper(SocialSchemeMapper.class); FundSchemeMapper fundSchemeMapper = sqlSession.getMapper(FundSchemeMapper.class); OtherSchemeMapper otherSchemeMapper = sqlSession.getMapper(OtherSchemeMapper.class); ICategoryMapper iCategoryMapper = sqlSession.getMapper(ICategoryMapper.class); 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 socialList = socialSchemeMapper.getSocialByEmployeeId(Collections.singletonList(item.getEmployeeId())); encryptUtil.decryptList(socialList, InsuranceArchivesSocialSchemePO.class); List fundList = fundSchemeMapper.getFundByEmployeeId(Collections.singletonList(item.getEmployeeId())); encryptUtil.decryptList(fundList, InsuranceArchivesFundSchemePO.class); List otherList = otherSchemeMapper.getOtherByEmployeeId(Collections.singletonList(item.getEmployeeId())); encryptUtil.decryptList(otherList, InsuranceArchivesOtherSchemePO.class); if (socialList.size() > 0) { for (InsuranceArchivesSocialSchemePO socialSchemePO : socialList) { Map socialJson = JSON.parseObject(socialSchemePO.getSocialPaymentBaseString(), new TypeReference>() { }); if (socialJson != null) { socialJson.forEach((k, v) -> socialSet.add(k)); } //如果需要区分个人和公司福利基数 if (welBaseDiffSign) { Map socialComJson = JSON.parseObject(socialSchemePO.getSocialPaymentComBaseString(), new TypeReference>() { }); if (socialComJson != null) { socialComJson.forEach((k, v) -> socialComSet.add(k)); } } } } if (fundList.size() > 0) { for (InsuranceArchivesFundSchemePO fundSchemePO : fundList) { Map fundJson = JSON.parseObject(fundSchemePO.getFundPaymentBaseString(), new TypeReference>() { }); if (fundJson != null) { fundJson.forEach((k, v) -> fundSet.add(k)); } //如果需要区分个人和公司福利基数 if (welBaseDiffSign) { Map fundComJson = JSON.parseObject(fundSchemePO.getFundPaymentComBaseString(), new TypeReference>() { }); if (fundComJson != null) { fundComJson.forEach((k, v) -> fundComSet.add(k)); } } } } if (otherList.size() > 0) { for (InsuranceArchivesOtherSchemePO otherSchemePO : otherList) { Map otherJson = JSON.parseObject(otherSchemePO.getOtherPaymentBaseString(), new TypeReference>() { }); if (otherJson != null) { otherJson.forEach((k, v) -> otherSet.add(k)); } //如果需要区分个人和公司福利基数 if (welBaseDiffSign) { Map otherComJson = JSON.parseObject(otherSchemePO.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 = iCategoryMapper.listByWelfareType(WelfareTypeEnum.SOCIAL_SECURITY.getValue(), null) .stream().collect(Collectors.toMap(ICategoryPO::getId, Function.identity())); Map sysSocial = iCategoryMapper.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 = iCategoryMapper.listByWelfareType(WelfareTypeEnum.ACCUMULATION_FUND.getValue(), null).stream().collect(Collectors.toMap(ICategoryPO::getId, Function.identity())); Map sysFund = iCategoryMapper.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 = iCategoryMapper.listByWelfareType(WelfareTypeEnum.OTHER.getValue(), null).stream().collect(Collectors.toMap(ICategoryPO::getId, Function.identity())); Map sysOther = iCategoryMapper.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; } finally { sqlSession.close(); } } /** * 获取福利档案基数调整记录 * */ public List getAdjustHistoryList(Long paymentOrganization, Long employeeId) { if (paymentOrganization == null && employeeId == null) { return null; } SqlSession sqlSession = MyBatisFactory.sqlSessionFactory.openSession(); try { InsuranceBaseAdjustHistoryMapper mapper = sqlSession.getMapper(InsuranceBaseAdjustHistoryMapper.class); List list = mapper.listByEmployeeIdAndPayOrg(paymentOrganization, employeeId); return list; } finally { sqlSession.close(); } } /** * 获取福利档案基数调整记录 * */ public List getBaseHistoryByEmployeeIdAndOperator(Long operator, Long employeeId) { List empList = getInsuranceBaseAdjustHistoryMapper().listByEmployeeIdAndOperator(operator, employeeId); List extEmpList = getInsuranceBaseAdjustHistoryMapper().listByExtEmpIdAndOperator(operator, employeeId); if (extEmpList != null) { empList.addAll(extEmpList); empList = empList.stream().filter(f -> org.apache.commons.lang.StringUtils.isNotBlank(f.getEmployeeName())) .sorted(Comparator.comparing(InsuranceArchivesBaseHistoryDTO::getOperateTime).reversed()).collect(Collectors.toList()); } return empList; } //生成基数调整记录(基数单元未变化则忽略) public List createAdjustInfo(InsuranceArchivesBaseHistoryDTO adjustInfo, Long creator) { Date now = new Date(); boolean welBaseDiffSign = isDiffWelBase(); List toCreateAdjustHistoryList = new ArrayList<>(); //旧档案不存在基数信息,则直接遍历新的基数数据,生成调整记录;旧档案存在基数信息,则合并新旧基数数据,遍历合并后的技术数据中的key,生成调整记录。 if(org.apache.commons.lang.StringUtils.isNotBlank(adjustInfo.getAdjustAfterBaseJson()) && org.apache.commons.lang.StringUtils.isBlank(adjustInfo.getAdjustBeforeBaseJson())) { Map adjustAfterBaseMap = JSON.parseObject(adjustInfo.getAdjustAfterBaseJson(), new TypeReference>() { }); for (String key : adjustAfterBaseMap.keySet()) { InsuranceArchivesBaseHistoryPO adjustItem = new InsuranceArchivesBaseHistoryPO(); BeanUtils.copyProperties(adjustInfo, adjustItem); adjustItem.setAdjustWelfareItemId(Long.valueOf(key)); adjustItem.setAdjustAfterBaseValue((String) adjustAfterBaseMap.get(key)); adjustItem.setOperateTime(now); adjustItem.setOperator(creator); adjustItem.setCreator(creator); adjustItem.setCreateTime(now); adjustItem.setUpdateTime(now); adjustItem.setDeleteType(DeleteTypeEnum.NOT_DELETED.getValue()); adjustItem.setTenantKey(SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY); adjustItem.setId(IdGenerator.generate()); adjustItem.setPaymentScope(welBaseDiffSign ? PaymentScopeEnum.SCOPE_PERSON.getValue().toString() : PaymentScopeEnum.SCOPE_PERSON.getValue().toString() + "," + PaymentScopeEnum.SCOPE_COMPANY.getValue().toString()); toCreateAdjustHistoryList.add(adjustItem); } } else if (org.apache.commons.lang.StringUtils.isNotBlank(adjustInfo.getAdjustAfterBaseJson()) && org.apache.commons.lang.StringUtils.isNotBlank(adjustInfo.getAdjustBeforeBaseJson())) { Map adjustAfterBaseMap = JSON.parseObject(adjustInfo.getAdjustAfterBaseJson(), new TypeReference>() { }); Map adjustBeforeBaseMap = JSON.parseObject(adjustInfo.getAdjustBeforeBaseJson(), new TypeReference>() { }); Map reDealMap = new HashMap<>(); if (adjustAfterBaseMap != null) { reDealMap.putAll(adjustAfterBaseMap); } if (adjustBeforeBaseMap != null) { reDealMap.putAll(adjustBeforeBaseMap); } if (reDealMap.size() >0) { for (String key : reDealMap.keySet()) { String beforeValue = (String) adjustBeforeBaseMap.get(key); String afterValue = (String) adjustAfterBaseMap.get(key); if (SalaryEntityUtil.empty2Zero(beforeValue).compareTo(SalaryEntityUtil.empty2Zero(afterValue)) == 0) { continue; } InsuranceArchivesBaseHistoryPO adjustItem = new InsuranceArchivesBaseHistoryPO(); BeanUtils.copyProperties(adjustInfo, adjustItem); adjustItem.setAdjustWelfareItemId(Long.valueOf(key)); adjustItem.setAdjustBeforeBaseValue(beforeValue); adjustItem.setAdjustAfterBaseValue(afterValue); adjustItem.setOperateTime(now); adjustItem.setOperator(creator); adjustItem.setCreator(creator); adjustItem.setCreateTime(now); adjustItem.setUpdateTime(now); adjustItem.setDeleteType(DeleteTypeEnum.NOT_DELETED.getValue()); adjustItem.setTenantKey(SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY); adjustItem.setId(IdGenerator.generate()); adjustItem.setPaymentScope(welBaseDiffSign ? PaymentScopeEnum.SCOPE_PERSON.getValue().toString() : PaymentScopeEnum.SCOPE_PERSON.getValue().toString() + "," + PaymentScopeEnum.SCOPE_COMPANY.getValue().toString()); toCreateAdjustHistoryList.add(adjustItem); } } } //如果系统应用设置拆分了个人和公司福利基数,则对adjustBeforeComBaseJson,adjustAfterComBaseJson也进行处理 if (welBaseDiffSign) { //旧档案不存在基数信息,则直接遍历新的基数数据,生成调整记录;旧档案存在基数信息,则合并新旧基数数据,遍历合并后的技术数据中的key,生成调整记录。 if(org.apache.commons.lang.StringUtils.isNotBlank(adjustInfo.getAdjustAfterComBaseJson()) && org.apache.commons.lang.StringUtils.isBlank(adjustInfo.getAdjustBeforeComBaseJson())) { Map adjustAfterComBaseMap = JSON.parseObject(adjustInfo.getAdjustAfterComBaseJson(), new TypeReference>() { }); for (String key : adjustAfterComBaseMap.keySet()) { InsuranceArchivesBaseHistoryPO adjustItem = new InsuranceArchivesBaseHistoryPO(); BeanUtils.copyProperties(adjustInfo, adjustItem); adjustItem.setAdjustWelfareItemId(Long.valueOf(key)); adjustItem.setAdjustAfterBaseValue((String) adjustAfterComBaseMap.get(key)); adjustItem.setOperateTime(now); adjustItem.setOperator(creator); adjustItem.setCreator(creator); adjustItem.setCreateTime(now); adjustItem.setUpdateTime(now); adjustItem.setDeleteType(DeleteTypeEnum.NOT_DELETED.getValue()); adjustItem.setTenantKey(SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY); adjustItem.setId(IdGenerator.generate()); adjustItem.setPaymentScope(PaymentScopeEnum.SCOPE_COMPANY.getValue().toString()); toCreateAdjustHistoryList.add(adjustItem); } } else if (org.apache.commons.lang.StringUtils.isNotBlank(adjustInfo.getAdjustAfterComBaseJson()) && org.apache.commons.lang.StringUtils.isNotBlank(adjustInfo.getAdjustBeforeComBaseJson())) { Map adjustAfterComBaseMap = JSON.parseObject(adjustInfo.getAdjustAfterComBaseJson(), new TypeReference>() { }); Map adjustBeforeComBaseMap = JSON.parseObject(adjustInfo.getAdjustBeforeComBaseJson(), new TypeReference>() { }); Map reDealMap = new HashMap<>(); if (adjustAfterComBaseMap != null) { reDealMap.putAll(adjustAfterComBaseMap); } if (adjustBeforeComBaseMap != null) { reDealMap.putAll(adjustBeforeComBaseMap); } if (reDealMap.size() >0) { for (String key : reDealMap.keySet()) { String beforeValue = (String) adjustBeforeComBaseMap.get(key); String afterValue = (String) adjustAfterComBaseMap.get(key); if (SalaryEntityUtil.empty2Zero(beforeValue).compareTo(SalaryEntityUtil.empty2Zero(afterValue)) == 0) { continue; } InsuranceArchivesBaseHistoryPO adjustItem = new InsuranceArchivesBaseHistoryPO(); BeanUtils.copyProperties(adjustInfo, adjustItem); adjustItem.setAdjustWelfareItemId(Long.valueOf(key)); adjustItem.setAdjustBeforeBaseValue(beforeValue); adjustItem.setAdjustAfterBaseValue(afterValue); adjustItem.setOperateTime(now); adjustItem.setOperator(creator); adjustItem.setCreator(creator); adjustItem.setCreateTime(now); adjustItem.setUpdateTime(now); adjustItem.setDeleteType(DeleteTypeEnum.NOT_DELETED.getValue()); adjustItem.setTenantKey(SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY); adjustItem.setId(IdGenerator.generate()); adjustItem.setPaymentScope( PaymentScopeEnum.SCOPE_COMPANY.getValue().toString()); toCreateAdjustHistoryList.add(adjustItem); } } } } return toCreateAdjustHistoryList; } /** * 新增福利档案基数调整记录 * */ @Override public void batchInsertAdjustHistory(List adjustHistoryList) { if (org.apache.commons.collections.CollectionUtils.isEmpty(adjustHistoryList)) { return; } List> partition = Lists.partition(adjustHistoryList, 100); partition.forEach(getInsuranceBaseAdjustHistoryMapper()::batchSave); } public Map getBaseForm(WelfareTypeEnum welfareType, Long employeeId, Long paymentOrganization, Collection taxAgentPOS) { Map data = new HashMap<>(16); SalaryAssert.notNull(employeeId, SalaryI18nUtil.getI18nLabel(0, "员工id不可为空")); List employeeByIds = getSalaryEmployeeService(user).getEmployeeByIdsAll(Collections.singletonList(employeeId)); SalaryAssert.notEmpty(employeeByIds, SalaryI18nUtil.getI18nLabel(0, "员工信息不存在")); DataCollectionEmployee item = employeeByIds.get(0); if (welfareType == null) { //基础信息表单 InsuranceArchivesBaseDTO insuranceArchivesBaseDTO = InsuranceArchivesBaseDTO.builder().department(item.getDepartmentName()) .hiredate(item.getCompanystartdate()) .position(item.getJobtitleName()) .username(item.getUsername()) .telephone(item.getMobile()) .dimissionDate(item.getDismissdate()) .build(); data.put("data", insuranceArchivesBaseDTO); return data; } // List list = siSchemeBiz.listAll(); List list = getSISchemeService(user).listAll(); // 过滤可见性范围 list = filterList(list, taxAgentPOS); List selectItems = new ArrayList<>(); List addGroups = new ArrayList<>(); List paymentOptions = paymentOrganizationOptions(taxAgentPOS); List underTakeOptions = Arrays.stream(UndertakerEnum.values()) .map(e -> new SearchConditionOption(e.getValue().toString(), e.getDefaultLabel())).collect(Collectors.toList()); //返回数据 switch (welfareType) { case SOCIAL_SECURITY: InsuranceArchivesSocialSchemeDTO insuranceArchivesSocialSchemeDTO = buildSocialForm(employeeId, paymentOrganization); List socialList = list.stream().filter(e -> Objects.equals(e.getWelfareType(), WelfareTypeEnum.SOCIAL_SECURITY.getValue())).collect(Collectors.toList()); List socialOptions = new ArrayList<>(); socialList.forEach(social -> { socialOptions.add(new SearchConditionOption(Util.null2String(social.getId()), social.getSchemeName())); }); SearchConditionItem socialName = SalaryFormItemUtil.selectItem(user, socialOptions, 2, 12, 6, false, SalaryI18nUtil.getI18nLabel(0, "社保方案名称"), "socialSchemeId"); SearchConditionItem organizationName = SalaryFormItemUtil.selectItem(user, paymentOptions, 2, 12, 6, false, SalaryI18nUtil.getI18nLabel(0, "社保缴纳组织"), "paymentOrganization"); SearchConditionItem underTakeName = SalaryFormItemUtil.selectItem(user, underTakeOptions, 2, 12, 6, false, SalaryI18nUtil.getI18nLabel(0, "社保个人实际承担方"), "underTake"); selectItems.add(socialName); selectItems.add(organizationName); selectItems.add(underTakeName); addGroups.add(new SearchConditionGroup(SalaryI18nUtil.getI18nLabel(0, "社保基础信息"), true, selectItems)); data.put("data", insuranceArchivesSocialSchemeDTO); data.put("items", addGroups); break; case ACCUMULATION_FUND: InsuranceArchivesFundSchemeDTO insuranceArchivesFundSchemeDTO = buildFundForm(employeeId, paymentOrganization); List fundList = list.stream().filter(e -> Objects.equals(e.getWelfareType(), WelfareTypeEnum.ACCUMULATION_FUND.getValue())).collect(Collectors.toList()); List fundOptions = new ArrayList<>(); fundList.forEach(social -> { fundOptions.add(new SearchConditionOption(Util.null2String(social.getId()), social.getSchemeName())); }); SearchConditionItem fundName = SalaryFormItemUtil.selectItem(user, fundOptions, 2, 12, 6, false, SalaryI18nUtil.getI18nLabel(0, "公积金方案名称"), "fundSchemeId"); SearchConditionItem organizationFundName = SalaryFormItemUtil.selectItem(user, paymentOptions, 2, 12, 6, false, SalaryI18nUtil.getI18nLabel(0, "公积金缴纳组织"), "paymentOrganization"); SearchConditionItem underTakeFundName = SalaryFormItemUtil.selectItem(user, underTakeOptions, 2, 12, 6, false, SalaryI18nUtil.getI18nLabel(0, "公积金个人实际承担方"), "underTake"); selectItems.add(fundName); selectItems.add(organizationFundName); selectItems.add(underTakeFundName); addGroups.add(new SearchConditionGroup(SalaryI18nUtil.getI18nLabel(0, "公积金基础信息"), true, selectItems)); data.put("data", insuranceArchivesFundSchemeDTO); data.put("items", addGroups); break; case OTHER: InsuranceArchivesOtherSchemeDTO insuranceArchivesOtherSchemeDTO = buildOtherForm(employeeId, paymentOrganization); List otherList = list.stream().filter(e -> Objects.equals(e.getWelfareType(), WelfareTypeEnum.OTHER.getValue())).collect(Collectors.toList()); List otherOptions = new ArrayList<>(); otherList.forEach(social -> { otherOptions.add(new SearchConditionOption(Util.null2String(social.getId()), social.getSchemeName())); }); SearchConditionItem otherName = SalaryFormItemUtil.selectItem(user, otherOptions, 2, 12, 6, false, SalaryI18nUtil.getI18nLabel(0, "其他福利名称"), "otherSchemeId"); SearchConditionItem organizationOtherName = SalaryFormItemUtil.selectItem(user, paymentOptions, 2, 12, 6, false, SalaryI18nUtil.getI18nLabel(0, "其他福利缴纳组织"), "paymentOrganization"); SearchConditionItem underTakeOtherName = SalaryFormItemUtil.selectItem(user, underTakeOptions, 2, 12, 6, false, SalaryI18nUtil.getI18nLabel(0, "其他福利个人实际承担方"), "underTake"); selectItems.add(otherName); selectItems.add(organizationOtherName); selectItems.add(underTakeOtherName); addGroups.add(new SearchConditionGroup(SalaryI18nUtil.getI18nLabel(0, "其他福利基础信息"), true, selectItems)); data.put("data", insuranceArchivesOtherSchemeDTO); data.put("items", addGroups); break; default: } return data; } /*** * @description 过滤没有权限访问的 * @return List * @author Harryxzy * @date 2022/9/19 18:32 */ List filterList(List list, Collection taxAgentPOS){ List ids = taxAgentPOS.stream().map(i -> String.valueOf(i.getId())).collect(Collectors.toList()); List result = list.stream().filter(item -> { boolean flag = true; if (item.getSharedType()!= null && item.getSharedType().equals("1")) { flag = false; String taxAgentIds = item.getTaxAgentIds(); if(org.apache.commons.lang.StringUtils.isNotBlank(taxAgentIds)){ String splitFlag = ","; String[] split = taxAgentIds.split(splitFlag); for (int i = 0; i < split.length; i++) { if (ids.contains(split[i])) { flag = true; } } } } return flag; }).collect(Collectors.toList()); return result; } /** * 社保缴纳组织 * * @return */ public List paymentOrganizationOptions(Collection taxAgentPOS) { Collection list = taxAgentPOS; if (org.apache.commons.collections.CollectionUtils.isEmpty(list)) { return new ArrayList<>(); } return list .stream() .map(item -> new SearchConditionOption(String.valueOf(item.getId()), item.getName())).collect(Collectors.toList()); } /** * 其它基础表单 * * @param employeeId * @return */ public InsuranceArchivesOtherSchemeDTO buildOtherForm(Long employeeId, Long paymentOrganization) { List otherList = getOtherSchemeMapper().getOtherByEmployeeIdAndPayOrg(InsuranceArchivesEmployeePO.builder() .employeeId(employeeId) .paymentOrganization(paymentOrganization) .build()); encryptUtil.decryptList(otherList, InsuranceArchivesOtherSchemePO.class); InsuranceArchivesOtherSchemePO insuranceArchivesOtherSchemePO = otherList.size() != 0 ? otherList.get(0) : null; InsuranceArchivesOtherSchemeDTO data = InsuranceArchivesBO.convertOtherPOtoDTO(insuranceArchivesOtherSchemePO, employeeId); if (insuranceArchivesOtherSchemePO == null) { data.setEmployeeId(employeeId); data.setUnderTake(UndertakerEnum.SCOPE_PERSON.getValue().toString()); } return data; } /** * 公积金基础表单 * * @param employeeId * @return */ public InsuranceArchivesFundSchemeDTO buildFundForm(Long employeeId, Long paymentOrganization) { List fundList = getFundSchemeMapper().getFundByEmployeeIdAndPayOrg(InsuranceArchivesEmployeePO.builder() .employeeId(employeeId) .paymentOrganization(paymentOrganization) .build()); encryptUtil.decryptList(fundList, InsuranceArchivesFundSchemePO.class); InsuranceArchivesFundSchemePO insuranceArchivesFundSchemePO = fundList.size() != 0 ? fundList.get(0) : null; InsuranceArchivesFundSchemeDTO data = InsuranceArchivesBO.convertFundPOtoDTO(insuranceArchivesFundSchemePO, employeeId); if (insuranceArchivesFundSchemePO == null) { data.setEmployeeId(employeeId); data.setUnderTake(UndertakerEnum.SCOPE_PERSON.getValue().toString()); } return data; } /** * 社保基础表单 * * @param employeeId * @return */ public InsuranceArchivesSocialSchemeDTO buildSocialForm(Long employeeId, Long paymentOrganization) { InsuranceArchivesSocialSchemePO insuranceArchivesSocialSchemePO = getSocialByEmployeeId(employeeId, paymentOrganization); InsuranceArchivesSocialSchemeDTO data = InsuranceArchivesBO.convertSocialPOtoDTO(insuranceArchivesSocialSchemePO, employeeId); if (insuranceArchivesSocialSchemePO == null) { data.setEmployeeId(employeeId); data.setUnderTake(UndertakerEnum.SCOPE_PERSON.getValue().toString()); } return data; } /** * 获取社保档案表 * * @param employeeId * @return */ public InsuranceArchivesSocialSchemePO getSocialByEmployeeId(Long employeeId, Long paymentOrganization) { List socialList = getSocialSchemeMapper().getSocialByEmployeeIdAndPayOrg(InsuranceArchivesEmployeePO.builder() .employeeId(employeeId) .paymentOrganization(paymentOrganization) .build()); encryptUtil.decryptList(socialList, InsuranceArchivesSocialSchemePO.class); return socialList.size() != 0 ? socialList.get(0) : null; } /** * 获取详细表单 * * @param user * @param welfareType * @param employeeId * @param schemeId * @return */ public Map getPaymentForm(User user, WelfareTypeEnum welfareType, Long employeeId, Long schemeId, Long paymentOrganization) { Map data = new HashMap<>(16); //判断是否要区分个人和单位福利基数 SalarySysConfPO welBaseDiff = getSalarySysConfService(user).getOneByCode(WEL_BASE_DIFF_BY_PER_AND_COM); boolean welBaseDiffSign = welBaseDiff != null && welBaseDiff.getConfValue().equals(OpenEnum.OPEN.getValue()); //判断是否要自动调整基数 SalarySysConfPO welBaseAutoAdjust = getSalarySysConfService(user).getOneByCode(WEL_BASE_AUTO_ADJUST); boolean welBaseAutoAdjustSign = welBaseAutoAdjust != null && welBaseAutoAdjust.getConfValue().equals(OpenEnum.OPEN.getValue()); switch (welfareType) { case SOCIAL_SECURITY: data = buildSocialPaymentForm(user, employeeId, schemeId,welfareType.getValue(), paymentOrganization, welBaseDiffSign, welBaseAutoAdjustSign); break; case ACCUMULATION_FUND: data = buildFundPaymentForm(user, employeeId, schemeId, welfareType.getValue(), paymentOrganization, welBaseDiffSign, welBaseAutoAdjustSign); break; case OTHER: data = buildOtherPaymentForm(user, employeeId, schemeId, welfareType.getValue(), paymentOrganization, welBaseDiffSign, welBaseAutoAdjustSign); break; default: } return data; } /** * 其他payForm * * @param employeeId * @param schemeId * @return */ public Map buildOtherPaymentForm(User user, Long employeeId, Long schemeId, Integer welfareType, Long paymentOrganization, boolean welBaseDiffSign, boolean welBaseAutoAdjustSign) { Map dataMap = new HashMap<>(); InsuranceArchivesOtherSchemeDTO data = buildOtherForm(employeeId, paymentOrganization); Map insuranceValueMap = new HashMap<>(); Map insuranceComValueMap = new HashMap<>(); if (data != null) { insuranceValueMap = StrUtil.isNotBlank(data.getOtherPaymentBaseString()) ? JSONObject.parseObject(data.getOtherPaymentBaseString(), new TypeReference>() {}) : new HashMap<>(); if (welBaseDiffSign) { insuranceComValueMap = StrUtil.isNotBlank(data.getOtherPaymentComBaseString()) ? JSONObject.parseObject(data.getOtherPaymentComBaseString(), new TypeReference>() {}) : new HashMap<>(); } } List addGroups = new ArrayList<>(); List inputItems = buildPaymentBase(user, schemeId, welfareType, welBaseDiffSign); //如果查询结果中存在 方案中缺失福利险种的值,设置初始值 for (SearchConditionItem item : inputItems) { String insuranceId = item.getDomkey().length > 0 ? item.getDomkey()[0] : null; if (StrUtil.isNotBlank(insuranceId) && insuranceValueMap.get(insuranceId) == null) { String basicValue = welBaseAutoAdjustSign ? ("0.000".equals(item.getMin()) ? "0" : item.getMin()) : "0"; insuranceValueMap.put(insuranceId, basicValue); } } dataMap.put("data", insuranceValueMap); addGroups.add(new SearchConditionGroup(SalaryI18nUtil.getI18nLabel(0, "其他福利缴纳基数"), true, inputItems)); dataMap.put("items", addGroups); if (welBaseDiffSign) { List addComGroups = new ArrayList<>(); List inputComItems = buildPaymentComBase(user, schemeId, welfareType); addComGroups.add(new SearchConditionGroup(SalaryI18nUtil.getI18nLabel(0, "其他福利缴纳基数"), true, inputComItems)); dataMap.put("comItems", addComGroups); for (SearchConditionItem item : inputComItems) { String insuranceId = item.getDomkey().length > 0 ? item.getDomkey()[0] : null; if (StrUtil.isNotBlank(insuranceId) && insuranceComValueMap.get(insuranceId) == null) { String basicValue = welBaseAutoAdjustSign ? ("0.000".equals(item.getMin()) ? "0" : item.getMin()) : "0"; insuranceComValueMap.put(insuranceId, basicValue); } } dataMap.put("comData", insuranceComValueMap); } return dataMap; } /** * 公积金payForm * * @param employeeId * @param schemeId * @return */ public Map buildFundPaymentForm(User user, Long employeeId, Long schemeId, Integer welfareType, Long paymentOrganization, boolean welBaseDiffSign, boolean welBaseAutoAdjustSign) { Map dataMap = new HashMap<>(); InsuranceArchivesFundSchemeDTO data = buildFundForm(employeeId, paymentOrganization); Map insuranceValueMap = new HashMap<>(); Map insuranceComValueMap = new HashMap<>(); if (data != null) { insuranceValueMap = StrUtil.isNotBlank(data.getFundPaymentBaseString()) ? JSONObject.parseObject(data.getFundPaymentBaseString(), new TypeReference>() {}) : new HashMap<>(); if (welBaseDiffSign) { insuranceComValueMap = StrUtil.isNotBlank(data.getFundPaymentComBaseString()) ? JSONObject.parseObject(data.getFundPaymentComBaseString(), new TypeReference>() {}) : new HashMap<>(); } } List addGroups = new ArrayList<>(); List inputItems = buildPaymentBase(user, schemeId, welfareType, welBaseDiffSign); //如果查询结果中存在 方案中缺失福利险种的值,设置初始值 for (SearchConditionItem item : inputItems) { String insuranceId = item.getDomkey().length > 0 ? item.getDomkey()[0] : null; if (StrUtil.isNotBlank(insuranceId) && insuranceValueMap.get(insuranceId) == null) { String basicValue = welBaseAutoAdjustSign ? ("0.000".equals(item.getMin()) ? "0" : item.getMin()) : "0"; insuranceValueMap.put(insuranceId, basicValue); } } dataMap.put("data", insuranceValueMap); addGroups.add(new SearchConditionGroup(SalaryI18nUtil.getI18nLabel(0, "公积金缴纳基数"), true, inputItems)); dataMap.put("items", addGroups); if (welBaseDiffSign) { List addComGroups = new ArrayList<>(); List inputComItems = buildPaymentComBase(user, schemeId, welfareType); addComGroups.add(new SearchConditionGroup(SalaryI18nUtil.getI18nLabel(0, "公积金缴纳基数"), true, inputComItems)); dataMap.put("comItems", addComGroups); for (SearchConditionItem item : inputComItems) { String insuranceId = item.getDomkey().length > 0 ? item.getDomkey()[0] : null; if (StrUtil.isNotBlank(insuranceId) && insuranceComValueMap.get(insuranceId) == null) { String basicValue = welBaseAutoAdjustSign ? ("0.000".equals(item.getMin()) ? "0" : item.getMin()) : "0"; insuranceComValueMap.put(insuranceId, basicValue); } } dataMap.put("comData", insuranceComValueMap); } return dataMap; } /** * 社保payForm * * @param employeeId * @param schemeId * @return */ public Map buildSocialPaymentForm(User user, Long employeeId, Long schemeId, Integer welfareType, Long paymentOrganization, boolean welBaseDiffSign, boolean welBaseAutoAdjustSign) { Map dataMap = new HashMap<>(); InsuranceArchivesSocialSchemeDTO data = buildSocialForm(employeeId, paymentOrganization); Map insuranceValueMap = new HashMap<>(); Map insuranceComValueMap = new HashMap<>(); if (data != null) { insuranceValueMap = StrUtil.isNotBlank(data.getSchemePaymentBaseString()) ? JSONObject.parseObject(data.getSchemePaymentBaseString(), new TypeReference>() {}) : new HashMap<>(); if (welBaseDiffSign) { insuranceComValueMap = StrUtil.isNotBlank(data.getSchemePaymentComBaseString()) ? JSONObject.parseObject(data.getSchemePaymentComBaseString(), new TypeReference>() {}) : new HashMap<>(); } } List addGroups = new ArrayList<>(); List inputItems = buildPaymentBase(user, schemeId, welfareType, welBaseDiffSign); //如果查询结果中存在 方案中缺失福利险种的值,设置初始值 for (SearchConditionItem item : inputItems) { String insuranceId = item.getDomkey().length > 0 ? item.getDomkey()[0] : null; if (StrUtil.isNotBlank(insuranceId) && insuranceValueMap.get(insuranceId) == null) { String basicValue = welBaseAutoAdjustSign ? ("0.000".equals(item.getMin()) ? "0" : item.getMin()) : "0"; insuranceValueMap.put(insuranceId, basicValue); } } dataMap.put("data", insuranceValueMap); addGroups.add(new SearchConditionGroup(SalaryI18nUtil.getI18nLabel(0, "社保缴纳基数"), true, inputItems)); dataMap.put("items", addGroups); if (welBaseDiffSign) { List addComGroups = new ArrayList<>(); List inputComItems = buildPaymentComBase(user, schemeId, welfareType); addComGroups.add(new SearchConditionGroup(SalaryI18nUtil.getI18nLabel(0, "社保缴纳基数"), true, inputComItems)); dataMap.put("comItems", addComGroups); for (SearchConditionItem item : inputComItems) { String insuranceId = item.getDomkey().length > 0 ? item.getDomkey()[0] : null; if (StrUtil.isNotBlank(insuranceId) && insuranceComValueMap.get(insuranceId) == null) { String basicValue = welBaseAutoAdjustSign ? ("0.000".equals(item.getMin()) ? "0" : item.getMin()) : "0"; insuranceComValueMap.put(insuranceId, basicValue); } } dataMap.put("comData", insuranceComValueMap); } return dataMap; } /** * 构造payment(items) * * @param schemeId * @return */ public List buildPaymentBase(User user, Long schemeId, Integer welfareType, boolean welBaseDiffSign) { List inputItems = new ArrayList<>(); if (schemeId == null) { return new ArrayList<>(); } List list = queryListByPrimaryIdIsPayment(schemeId, welfareType).stream() .filter(f -> f.getPaymentScope().equals(PaymentScopeEnum.SCOPE_PERSON.getValue())).collect(Collectors.toList()); if (!welBaseDiffSign) { List perInsuranceIdList = list.stream().map(InsuranceSchemeDetailPO::getInsuranceId).collect(Collectors.toList()); List moreComList = queryListByPrimaryIdIsPayment(schemeId, welfareType).stream() .filter(f -> f.getPaymentScope().equals(PaymentScopeEnum.SCOPE_COMPANY.getValue()) && !perInsuranceIdList.contains(f.getInsuranceId())).collect(Collectors.toList()); if (moreComList.size() > 0) { list.addAll(moreComList); } } list.forEach(insuranceSchemeDetail -> { // ICategoryPO iCategoryPO = siCategoryBiz.getByID(insuranceSchemeDetail.getInsuranceId()); ICategoryPO iCategoryPO = getSICategoryService(user).getICategoryPOByID(insuranceSchemeDetail.getInsuranceId()); if (iCategoryPO != null) { // inputItems.add(SalaryFormItemUtil.inputNumberItem(user, "precision:2", 2, 12, 2, iCategoryPO.getInsuranceName(), String.valueOf(insuranceSchemeDetail.getInsuranceId()))); inputItems.add(SalaryFormItemUtil.inputNumberItemWithMaxAndMin(user, "precision:2", 2, 12, 2, iCategoryPO.getInsuranceName(), String.valueOf(insuranceSchemeDetail.getInsuranceId()) , insuranceSchemeDetail.getUpperLimit(), insuranceSchemeDetail.getLowerLimit())); } }); return inputItems; } public List buildPaymentComBase(User user, Long schemeId, Integer welfareType) { List inputItems = new ArrayList<>(); if (schemeId == null) { return new ArrayList<>(); } List list = queryListByPrimaryIdIsPayment(schemeId, welfareType).stream() .filter(f -> f.getPaymentScope().equals(PaymentScopeEnum.SCOPE_COMPANY.getValue())).collect(Collectors.toList()); list.forEach(insuranceSchemeDetail -> { // ICategoryPO iCategoryPO = siCategoryBiz.getByID(insuranceSchemeDetail.getInsuranceId()); ICategoryPO iCategoryPO = getSICategoryService(user).getICategoryPOByID(insuranceSchemeDetail.getInsuranceId()); if (iCategoryPO != null) { // inputItems.add(SalaryFormItemUtil.inputNumberItem(user, "precision:2", 2, 12, 2, iCategoryPO.getInsuranceName(), String.valueOf(insuranceSchemeDetail.getInsuranceId()))); inputItems.add(SalaryFormItemUtil.inputNumberItemWithMaxAndMin(user, "precision:2", 2, 12, 2, iCategoryPO.getInsuranceName(), String.valueOf(insuranceSchemeDetail.getInsuranceId()) , insuranceSchemeDetail.getUpperLimit(), insuranceSchemeDetail.getLowerLimit())); } }); return inputItems; } /** * 获取方案明细 * * @param schemeId * @return */ public List queryListByPrimaryIdIsPayment(Long schemeId, Integer welfareType) { List insuranceSchemeDetailPOS = getInsuranceSchemeDetailMapper().queryListByPrimaryIdIsPayment(schemeId, IsPaymentEnum.YES.getValue(), welfareType); encryptUtil.decryptList(insuranceSchemeDetailPOS, InsuranceSchemeDetailPO.class); return insuranceSchemeDetailPOS; } public void otherSave(InsuranceArchivesSaveParam paramReq, User user, boolean welBaseDiffSign) { long employeeId = user.getUID(); InsuranceArchivesOtherSaveParam param = JSONObject.parseObject(paramReq.getBaseForm(), InsuranceArchivesOtherSaveParam.class); SalaryAssert.notNull(SalaryI18nUtil.getI18nLabel(0, "员工id为空"), param, param.getEmployeeId()); if (org.apache.commons.lang.StringUtils.isNotBlank(param.getOtherStartTime()) && !SalaryDateUtil.checkYearMonth(param.getOtherStartTime())) { throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0, "其他福利起始缴纳时间格式错误,正确格式为YYYY-MM或者yyyy-MM-dd")); } if (org.apache.commons.lang.StringUtils.isNotBlank(param.getOtherEndTime()) && !SalaryDateUtil.checkYearMonth(param.getOtherEndTime())) { throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0, "其他福利最后缴纳时间格式错误,正确格式为YYYY-MM或者yyyy-MM-dd")); } //创建操作日志记录对象 InsuranceArchivesBaseInfoPO targetPO = new InsuranceArchivesBaseInfoPO(); InsuranceArchivesOtherSchemePO targetDetailPO = new InsuranceArchivesOtherSchemePO(); List otherIds = new ArrayList(); otherIds.add(param.getId()); List oldOtherInfoList = getOtherSchemeMapper().getOtherById(otherIds); //设置福利档案基数调整记录数据 InsuranceArchivesBaseHistoryDTO adjustInfo = InsuranceArchivesBaseHistoryDTO.builder() .adjustAfterSchemeId(param.getOtherSchemeId()) .adjustAfterBaseJson(paramReq.getPaymentForm()) .adjustAfterComBaseJson(paramReq.getPaymentComForm()) .welfareType(paramReq.getWelfareType().getValue()) .employeeId(param.getEmployeeId()) .paymentOrganization(param.getPaymentOrganization()) .build(); if (oldOtherInfoList.size() == 1) { InsuranceArchivesOtherSchemePO oldOtherInfo = oldOtherInfoList.get(0); //设置福利档案基数调整记录数据 encryptUtil.decrypt(oldOtherInfo, InsuranceArchivesOtherSchemePO.class); adjustInfo.setAdjustBeforeBaseJson(oldOtherInfo.getOtherPaymentBaseString()); adjustInfo.setAdjustBeforeSchemeId(oldOtherInfo.getOtherSchemeId()); adjustInfo.setAdjustBeforeComBaseJson(oldOtherInfo.getOtherPaymentComBaseString()); //新数据 InsuranceArchivesOtherSchemePO updateOtherInfo = InsuranceArchivesOtherSchemePO.builder() .id(oldOtherInfo.getId()) .otherSchemeId(param.getOtherSchemeId()) .otherStartTime(org.apache.commons.lang.StringUtils.isNotBlank(param.getOtherStartTime()) ? param.getOtherStartTime() : null) .underTake(param.getUnderTake()) .tenantKey(SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY) .welfareType(paramReq.getWelfareType().getValue()) .otherEndTime(org.apache.commons.lang.StringUtils.isNotBlank(param.getOtherEndTime()) ? param.getOtherEndTime() : null) .employeeId(param.getEmployeeId()) .deleteType(DeleteTypeEnum.NOT_DELETED.getValue()) .createTime(oldOtherInfo.getCreateTime()) .updateTime(new Date()) .nonPayment(param.getNonPayment()) .creator(employeeId) .paymentOrganization(param.getPaymentOrganization()) .otherPaymentBaseString(paramReq.getPaymentForm()) .build(); //校验福利基数是否符合上下限要求, if (!checkWelBaseLimit(updateOtherInfo.getOtherSchemeId(),updateOtherInfo.getOtherPaymentBaseString(), PaymentScopeEnum.SCOPE_PERSON.getValue())) { throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0,"其他福利明细中的基数更新内容不符合相关基数上下限要求,请检查后重试!")); } //需要拆分个人和公司福利基数时 if (welBaseDiffSign) { updateOtherInfo.setOtherPaymentComBaseString(paramReq.getPaymentComForm()); //校验福利基数是否符合上下限要求 if (!checkWelBaseLimit(updateOtherInfo.getOtherSchemeId(),updateOtherInfo.getOtherPaymentComBaseString(), PaymentScopeEnum.SCOPE_COMPANY.getValue())) { throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0,"其他福利明细中的基数更新内容不符合相关基数上下限要求,请检查后重试!")); } } encryptUtil.encrypt(updateOtherInfo, InsuranceArchivesOtherSchemePO.class); getOtherSchemeMapper().updateById(updateOtherInfo); //更新base_info表状态 InsuranceArchivesBaseInfoPO baseInfoPO = getInsuranceBaseInfoMapper().getOneByEmployeeIdAndPayOrg(param.getPaymentOrganization(), param.getEmployeeId()); if(baseInfoPO != null && baseInfoPO.getEmployeeType() != null && baseInfoPO.getEmployeeType().equals(DataCollectionEmployeeTypeEnum.EXT_EMPLOYEE.getValue())) { //对于非系统人员,编辑后状态切换为正在缴纳 baseInfoPO.setRunStatus(EmployeeStatusEnum.PAYING.getValue()); } baseInfoPO.setOtherArchivesId(updateOtherInfo.getId()); getInsuranceBaseInfoMapper().updateById(baseInfoPO); targetPO = baseInfoPO; encryptUtil.decrypt(updateOtherInfo, InsuranceArchivesOtherSchemePO.class); targetDetailPO = updateOtherInfo; } else { getOtherSchemeMapper().deleteByEmployeeIdAndPayOrg(InsuranceArchivesOtherSchemePO.builder() .employeeId(param.getEmployeeId()) .paymentOrganization(param.getPaymentOrganization()) .build()); //新建社保档案,并关联主表 InsuranceArchivesOtherSchemePO insertOtherInfo = InsuranceArchivesOtherSchemePO.builder() .otherSchemeId(param.getOtherSchemeId()) .otherStartTime(org.apache.commons.lang.StringUtils.isNotBlank(param.getOtherStartTime()) ? param.getOtherStartTime() : null) .underTake(param.getUnderTake()) .tenantKey(SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY) .welfareType(paramReq.getWelfareType().getValue()) .otherEndTime(org.apache.commons.lang.StringUtils.isNotBlank(param.getOtherEndTime()) ? param.getOtherEndTime() : null) .employeeId(param.getEmployeeId()) .deleteType(DeleteTypeEnum.NOT_DELETED.getValue()) .createTime(new Date()) .updateTime(new Date()) .nonPayment(param.getNonPayment()) .creator(employeeId) .paymentOrganization(param.getPaymentOrganization()) .otherPaymentBaseString(paramReq.getPaymentForm()) .build(); //校验福利基数是否符合上下限要求, if (!checkWelBaseLimit(insertOtherInfo.getOtherSchemeId(),insertOtherInfo.getOtherPaymentBaseString(), PaymentScopeEnum.SCOPE_PERSON.getValue())) { throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0,"其他福利明细中的基数更新内容不符合相关基数上下限要求,请检查后重试!")); } //需要拆分个人和公司福利基数时 if (welBaseDiffSign) { insertOtherInfo.setOtherPaymentComBaseString(paramReq.getPaymentComForm()); //校验福利基数是否符合上下限要求 if (!checkWelBaseLimit(insertOtherInfo.getOtherSchemeId(),insertOtherInfo.getOtherPaymentComBaseString(), PaymentScopeEnum.SCOPE_COMPANY.getValue())) { throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0,"其他福利明细中的基数更新内容不符合相关基数上下限要求,请检查后重试!")); } } encryptUtil.encrypt(insertOtherInfo, InsuranceArchivesOtherSchemePO.class); getOtherSchemeMapper().insert(insertOtherInfo); InsuranceArchivesBaseInfoPO baseInfoPO = getInsuranceBaseInfoMapper().getOneByEmployeeIdAndPayOrg(param.getPaymentOrganization(), param.getEmployeeId()); if(baseInfoPO != null) { List otherInfos = getOtherSchemeMapper().getOtherByEmployeeIdAndPayOrg(InsuranceArchivesEmployeePO.builder() .employeeId(param.getEmployeeId()) .paymentOrganization(param.getPaymentOrganization()) .build()); baseInfoPO.setOtherArchivesId(otherInfos.get(0).getId()); //对于非系统人员,编辑后状态切换为正在缴纳 if (baseInfoPO.getEmployeeType() != null && baseInfoPO.getEmployeeType().equals(DataCollectionEmployeeTypeEnum.EXT_EMPLOYEE.getValue())) { baseInfoPO.setRunStatus(EmployeeStatusEnum.PAYING.getValue()); } getInsuranceBaseInfoMapper().updateById(baseInfoPO); targetPO = baseInfoPO; encryptUtil.decrypt(insertOtherInfo, InsuranceArchivesOtherSchemePO.class); targetDetailPO = insertOtherInfo; } else { throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0, "档案不存在!")); } } //记录操作日志 DataCollectionEmployee empInfo = getEmployMapper().getEmployeeById(targetPO.getEmployeeId()); TaxAgentPO taxAgentInfo = getTaxAgentMapper().getById(targetPO.getPaymentOrganization()); 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()); if (oldOtherInfoList.size() == 1) { loggerContext.setOldValues(oldOtherInfoList.get(0)); } loggerContext.setNewValues(targetDetailPO); SalaryElogConfig.siArchivesLoggerTemplate.write(loggerContext); //生成福利档案基数调整记录数据 List adjustHistoryList = createAdjustInfo(adjustInfo, employeeId); //福利档案基数调整记录数据入库 batchInsertAdjustHistory(adjustHistoryList); } /** * @param paramReq * @param */ public void fundSave(InsuranceArchivesSaveParam paramReq, User user, boolean welBaseDiffSign) { long employeeId = user.getUID(); InsuranceArchivesFundSaveParam param = JSONObject.parseObject(paramReq.getBaseForm(), InsuranceArchivesFundSaveParam.class); SalaryAssert.notNull(SalaryI18nUtil.getI18nLabel(0,"员工id为空"), param, param.getEmployeeId()); if (org.apache.commons.lang.StringUtils.isNotBlank(param.getFundStartTime()) && !SalaryDateUtil.checkYearMonth(param.getFundStartTime())) { throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0, "公积金起始缴纳时间格式错误,正确格式为YYYY-MM或者yyyy-MM-dd")); } if (org.apache.commons.lang.StringUtils.isNotBlank(param.getFundEndTime()) && !SalaryDateUtil.checkYearMonth(param.getFundEndTime())) { throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0, "公积金最后缴纳时间格式错误,正确格式为YYYY-MM或者yyyy-MM-dd")); } //创建操作日志记录对象 InsuranceArchivesBaseInfoPO targetPO = new InsuranceArchivesBaseInfoPO(); InsuranceArchivesFundSchemePO targetDetailPO = new InsuranceArchivesFundSchemePO(); List fundIds = new ArrayList(); fundIds.add(param.getId()); List oldFundInfoList = getFundSchemeMapper().getFundById(fundIds); //设置福利档案基数调整记录数据 InsuranceArchivesBaseHistoryDTO adjustInfo = InsuranceArchivesBaseHistoryDTO.builder() .adjustAfterSchemeId(param.getFundSchemeId()) .adjustAfterBaseJson(paramReq.getPaymentForm()) .adjustAfterComBaseJson(paramReq.getPaymentComForm()) .welfareType(paramReq.getWelfareType().getValue()) .employeeId(param.getEmployeeId()) .paymentOrganization(param.getPaymentOrganization()) .build(); if (oldFundInfoList.size() == 1) { InsuranceArchivesFundSchemePO oldFundInfo = oldFundInfoList.get(0); //设置福利档案基数调整记录数据 encryptUtil.decrypt(oldFundInfo, InsuranceArchivesFundSchemePO.class); adjustInfo.setAdjustBeforeBaseJson(oldFundInfo.getFundPaymentBaseString()); adjustInfo.setAdjustBeforeSchemeId(oldFundInfo.getFundSchemeId()); adjustInfo.setAdjustBeforeComBaseJson(oldFundInfo.getFundPaymentComBaseString()); //新数据 InsuranceArchivesFundSchemePO updateFundInfo = InsuranceArchivesFundSchemePO.builder() .id(oldFundInfo.getId()) .fundSchemeId(param.getFundSchemeId()) .fundAccount(param.getFundAccount()) .fundEndTime(org.apache.commons.lang.StringUtils.isNotBlank(param.getFundEndTime()) ? param.getFundEndTime() : null) .fundStartTime(org.apache.commons.lang.StringUtils.isNotBlank(param.getFundStartTime()) ? param.getFundStartTime() : null) .fundPaymentBaseString(paramReq.getPaymentForm()) .supplementFundAccount(param.getSupplementFundAccount()) .creator(employeeId) .nonPayment(param.getNonPayment()) .deleteType(DeleteTypeEnum.NOT_DELETED.getValue()) .tenantKey(SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY) .underTake(param.getUnderTake()) .paymentOrganization(param.getPaymentOrganization()) .createTime(oldFundInfo.getCreateTime()) .updateTime(new Date()) .welfareType(paramReq.getWelfareType().getValue()) .employeeId(param.getEmployeeId()) .build(); //校验福利基数是否符合上下限要求, if (!checkWelBaseLimit(updateFundInfo.getFundSchemeId(),updateFundInfo.getFundPaymentBaseString(), PaymentScopeEnum.SCOPE_PERSON.getValue())) { throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0,"公积金福利明细中的基数更新内容不符合相关基数上下限要求,请检查后重试!")); } //需要拆分个人和公司福利基数时 if (welBaseDiffSign) { updateFundInfo.setFundPaymentComBaseString(paramReq.getPaymentComForm()); //校验福利基数是否符合上下限要求 if (!checkWelBaseLimit(updateFundInfo.getFundSchemeId(),updateFundInfo.getFundPaymentComBaseString(), PaymentScopeEnum.SCOPE_COMPANY.getValue())) { throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0,"公积金福利明细中的基数更新内容不符合相关基数上下限要求,请检查后重试!")); } } encryptUtil.encrypt(updateFundInfo, InsuranceArchivesFundSchemePO.class); getFundSchemeMapper().updateById(updateFundInfo); //更新base_info表状态 InsuranceArchivesBaseInfoPO baseInfoPO = getInsuranceBaseInfoMapper().getOneByEmployeeIdAndPayOrg(param.getPaymentOrganization(), param.getEmployeeId()); if(baseInfoPO != null && baseInfoPO.getEmployeeType() != null && baseInfoPO.getEmployeeType().equals(DataCollectionEmployeeTypeEnum.EXT_EMPLOYEE.getValue())) { //对于非系统人员,编辑后状态切换为正在缴纳 baseInfoPO.setRunStatus(EmployeeStatusEnum.PAYING.getValue()); } baseInfoPO.setFundArchivesId(updateFundInfo.getId()); getInsuranceBaseInfoMapper().updateById(baseInfoPO); targetPO = baseInfoPO; encryptUtil.decrypt(updateFundInfo, InsuranceArchivesFundSchemePO.class); targetDetailPO = updateFundInfo; } else { getFundSchemeMapper().deleteByEmployeeIdAndPayOrg(InsuranceArchivesFundSchemePO.builder() .employeeId(param.getEmployeeId()) .paymentOrganization(param.getPaymentOrganization()) .build()); //新建社保档案,并关联主表 InsuranceArchivesFundSchemePO insertFundInfo = InsuranceArchivesFundSchemePO.builder() .fundSchemeId(param.getFundSchemeId()) .fundAccount(param.getFundAccount()) .fundEndTime(org.apache.commons.lang.StringUtils.isNotBlank(param.getFundEndTime()) ? param.getFundEndTime() : null) .fundStartTime(org.apache.commons.lang.StringUtils.isNotBlank(param.getFundStartTime()) ? param.getFundStartTime() : null) .fundPaymentBaseString(paramReq.getPaymentForm()) .supplementFundAccount(param.getSupplementFundAccount()) .creator(employeeId) .nonPayment(param.getNonPayment()) .deleteType(DeleteTypeEnum.NOT_DELETED.getValue()) .tenantKey(SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY) .underTake(param.getUnderTake()) .paymentOrganization(param.getPaymentOrganization()) .createTime(new Date()) .updateTime(new Date()) .welfareType(paramReq.getWelfareType().getValue()) .employeeId(param.getEmployeeId()) .build(); //校验福利基数是否符合上下限要求, if (!checkWelBaseLimit(insertFundInfo.getFundSchemeId(),insertFundInfo.getFundPaymentBaseString(), PaymentScopeEnum.SCOPE_PERSON.getValue())) { throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0,"公积金福利明细中的基数更新内容不符合相关基数上下限要求,请检查后重试!")); } //需要拆分个人和公司福利基数时 if (welBaseDiffSign) { insertFundInfo.setFundPaymentComBaseString(paramReq.getPaymentComForm()); //校验福利基数是否符合上下限要求 if (!checkWelBaseLimit(insertFundInfo.getFundSchemeId(),insertFundInfo.getFundPaymentComBaseString(), PaymentScopeEnum.SCOPE_COMPANY.getValue())) { throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0,"公积金福利明细中的基数更新内容不符合相关基数上下限要求,请检查后重试!")); } } encryptUtil.encrypt(insertFundInfo, InsuranceArchivesFundSchemePO.class); getFundSchemeMapper().insert(insertFundInfo); InsuranceArchivesBaseInfoPO baseInfoPO = getInsuranceBaseInfoMapper().getOneByEmployeeIdAndPayOrg(param.getPaymentOrganization(), param.getEmployeeId()); if(baseInfoPO != null) { List fundInfos = getFundSchemeMapper().getFundByEmployeeIdAndPayOrg(InsuranceArchivesEmployeePO.builder() .employeeId(param.getEmployeeId()) .paymentOrganization(param.getPaymentOrganization()) .build()); baseInfoPO.setFundArchivesId(fundInfos.get(0).getId()); //对于非系统人员,编辑后状态切换为正在缴纳 if (baseInfoPO.getEmployeeType() != null && baseInfoPO.getEmployeeType().equals(DataCollectionEmployeeTypeEnum.EXT_EMPLOYEE.getValue())) { baseInfoPO.setRunStatus(EmployeeStatusEnum.PAYING.getValue()); } getInsuranceBaseInfoMapper().updateById(baseInfoPO); targetPO = baseInfoPO; encryptUtil.decrypt(insertFundInfo, InsuranceArchivesFundSchemePO.class); targetDetailPO = insertFundInfo; } else { throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0, "档案不存在!")); } } //记录操作日志 DataCollectionEmployee empInfo = getEmployMapper().getEmployeeById(targetPO.getEmployeeId()); TaxAgentPO taxAgentInfo = getTaxAgentMapper().getById(targetPO.getPaymentOrganization()); 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()); if (oldFundInfoList.size() == 1) { loggerContext.setOldValues(oldFundInfoList.get(0)); } loggerContext.setNewValues(targetDetailPO); SalaryElogConfig.siArchivesLoggerTemplate.write(loggerContext); //生成福利档案基数调整记录数据 List adjustHistoryList = createAdjustInfo(adjustInfo, employeeId); //福利档案基数调整记录数据入库 batchInsertAdjustHistory(adjustHistoryList); } /** * @param paramReq * @param */ public void socialSave(InsuranceArchivesSaveParam paramReq, User user, boolean welBaseDiffSign) { long employeeId = user.getUID(); InsuranceArchivesSocialSaveParam param = JSONObject.parseObject(paramReq.getBaseForm(), InsuranceArchivesSocialSaveParam.class); SalaryAssert.notNull(SalaryI18nUtil.getI18nLabel(0,"员工id为空"), param, param.getEmployeeId()); if (org.apache.commons.lang.StringUtils.isNotBlank(param.getSocialStartTime()) && !SalaryDateUtil.checkYearMonth(param.getSocialStartTime())) { throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0, "社保起始缴纳时间格式错误,正确格式为YYYY-MM或者yyyy-MM-dd")); } if (org.apache.commons.lang.StringUtils.isNotBlank(param.getSocialEndTime()) && !SalaryDateUtil.checkYearMonth(param.getSocialEndTime())) { throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0, "社保最后缴纳时间格式错误,正确格式为YYYY-MM或者yyyy-MM-dd")); } // //删除社保数据 // socialSchemeMapper.batchDeleteByEmployeeIds(Collections.singletonList(param.getEmployeeId())); //创建操作日志记录对象 InsuranceArchivesBaseInfoPO targetPO = new InsuranceArchivesBaseInfoPO(); InsuranceArchivesSocialSchemePO targetDetailPO = new InsuranceArchivesSocialSchemePO(); //查询已有数据 List socialIds = new ArrayList(); socialIds.add(param.getId()); List oldSocialInfoList = getSocialSchemeMapper().getSocialById(socialIds); //设置福利档案基数调整记录数据 InsuranceArchivesBaseHistoryDTO adjustInfo = InsuranceArchivesBaseHistoryDTO.builder() .adjustAfterSchemeId(param.getSocialSchemeId()) .adjustAfterBaseJson(paramReq.getPaymentForm()) .adjustAfterComBaseJson(paramReq.getPaymentComForm()) .welfareType(paramReq.getWelfareType().getValue()) .employeeId(param.getEmployeeId()) .paymentOrganization(param.getPaymentOrganization()) .build(); //组装新数据 if (oldSocialInfoList.size() == 1) { //老数据 InsuranceArchivesSocialSchemePO oldSocialInfo = oldSocialInfoList.get(0); //设置福利档案基数调整记录数据 encryptUtil.decrypt(oldSocialInfo, InsuranceArchivesSocialSchemePO.class); adjustInfo.setAdjustBeforeBaseJson(oldSocialInfo.getSocialPaymentBaseString()); adjustInfo.setAdjustBeforeSchemeId(oldSocialInfo.getSocialSchemeId()); adjustInfo.setAdjustBeforeComBaseJson(oldSocialInfo.getSocialPaymentComBaseString()); //新数据 InsuranceArchivesSocialSchemePO updateSocialInfo = InsuranceArchivesSocialSchemePO.builder() .id(oldSocialInfo.getId()) .welfareType(paramReq.getWelfareType().getValue()) .deleteType(DeleteTypeEnum.NOT_DELETED.getValue()) .socialPaymentBaseString(paramReq.getPaymentForm()) .socialSchemeId(param.getSocialSchemeId()) .socialEndTime(org.apache.commons.lang.StringUtils.isNotBlank(param.getSocialEndTime()) ? param.getSocialEndTime() : null) .socialStartTime(org.apache.commons.lang.StringUtils.isNotBlank(param.getSocialStartTime()) ? param.getSocialStartTime() : null) .creator(employeeId) .nonPayment(param.getNonPayment()) .tenantKey(SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY) .employeeId(param.getEmployeeId()) .createTime(oldSocialInfo.getCreateTime()) .updateTime(new Date()) .underTake(param.getUnderTake()) .socialAccount(param.getSchemeAccount()) .paymentOrganization(param.getPaymentOrganization()) .build(); //校验福利基数是否符合上下限要求 if (!checkWelBaseLimit(updateSocialInfo.getSocialSchemeId(),updateSocialInfo.getSocialPaymentBaseString(), PaymentScopeEnum.SCOPE_PERSON.getValue())) { throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0,"社保福利明细中的基数更新内容不符合相关基数上下限要求,请检查后重试!")); } //需要拆分个人和公司福利基数时 if (welBaseDiffSign) { updateSocialInfo.setSocialPaymentComBaseString(paramReq.getPaymentComForm()); //校验福利基数是否符合上下限要求 if (!checkWelBaseLimit(updateSocialInfo.getSocialSchemeId(),updateSocialInfo.getSocialPaymentComBaseString(), PaymentScopeEnum.SCOPE_COMPANY.getValue())) { throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0,"社保福利明细中的基数更新内容不符合相关基数上下限要求,请检查后重试!")); } } encryptUtil.encrypt(updateSocialInfo, InsuranceArchivesSocialSchemePO.class); getSocialSchemeMapper().updateById(updateSocialInfo); //更新base_info表状态 InsuranceArchivesBaseInfoPO baseInfoPO = getInsuranceBaseInfoMapper().getOneByEmployeeIdAndPayOrg(param.getPaymentOrganization(), param.getEmployeeId()); if(baseInfoPO != null && baseInfoPO.getEmployeeType() != null && baseInfoPO.getEmployeeType().equals(DataCollectionEmployeeTypeEnum.EXT_EMPLOYEE.getValue())) { //对于非系统人员,编辑后状态切换为正在缴纳 baseInfoPO.setRunStatus(EmployeeStatusEnum.PAYING.getValue()); } baseInfoPO.setSocialArchivesId(updateSocialInfo.getId()); getInsuranceBaseInfoMapper().updateById(baseInfoPO); targetPO = baseInfoPO; encryptUtil.decrypt(updateSocialInfo, InsuranceArchivesSocialSchemePO.class); targetDetailPO = updateSocialInfo; } else { getSocialSchemeMapper().deleteByEmployeeIdAndPayOrg(InsuranceArchivesSocialSchemePO.builder() .employeeId(param.getEmployeeId()) .paymentOrganization(param.getPaymentOrganization()) .build()); //新建社保档案,并关联主表 InsuranceArchivesSocialSchemePO insertSocialInfo = InsuranceArchivesSocialSchemePO.builder() .welfareType(paramReq.getWelfareType().getValue()) .deleteType(DeleteTypeEnum.NOT_DELETED.getValue()) .socialPaymentBaseString(paramReq.getPaymentForm()) .socialSchemeId(param.getSocialSchemeId()) .socialEndTime(org.apache.commons.lang.StringUtils.isNotBlank(param.getSocialEndTime()) ? param.getSocialEndTime() : null) .socialStartTime(org.apache.commons.lang.StringUtils.isNotBlank(param.getSocialStartTime()) ? param.getSocialStartTime() : null) .creator(employeeId) .nonPayment(param.getNonPayment()) .tenantKey(SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY) .employeeId(param.getEmployeeId()) .createTime(new Date()) .updateTime(new Date()) .underTake(param.getUnderTake()) .socialAccount(param.getSchemeAccount()) .paymentOrganization(param.getPaymentOrganization()) .build(); //校验福利基数是否符合上下限要求 if (!checkWelBaseLimit(insertSocialInfo.getSocialSchemeId(),insertSocialInfo.getSocialPaymentBaseString(), PaymentScopeEnum.SCOPE_PERSON.getValue())) { throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0,"社保福利明细中的基数更新内容不符合相关基数上下限要求,请检查后重试!")); } //需要拆分个人和公司福利基数时 if (welBaseDiffSign) { insertSocialInfo.setSocialPaymentComBaseString(paramReq.getPaymentComForm()); //校验福利基数是否符合上下限要求 if (!checkWelBaseLimit(insertSocialInfo.getSocialSchemeId(),insertSocialInfo.getSocialPaymentComBaseString(), PaymentScopeEnum.SCOPE_COMPANY.getValue())) { throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0,"社保福利明细中的基数更新内容不符合相关基数上下限要求,请检查后重试!")); } } encryptUtil.encrypt(insertSocialInfo, InsuranceArchivesSocialSchemePO.class); getSocialSchemeMapper().insert(insertSocialInfo); InsuranceArchivesBaseInfoPO baseInfoPO = getInsuranceBaseInfoMapper().getOneByEmployeeIdAndPayOrg(param.getPaymentOrganization(), param.getEmployeeId()); if(baseInfoPO != null) { List socialInfos = getSocialSchemeMapper().getSocialByEmployeeIdAndPayOrg(InsuranceArchivesEmployeePO.builder() .employeeId(param.getEmployeeId()) .paymentOrganization(param.getPaymentOrganization()) .build()); baseInfoPO.setSocialArchivesId(socialInfos.get(0).getId()); //对于非系统人员,编辑后状态切换为正在缴纳 if (baseInfoPO.getEmployeeType() != null && baseInfoPO.getEmployeeType().equals(DataCollectionEmployeeTypeEnum.EXT_EMPLOYEE.getValue())) { baseInfoPO.setRunStatus(EmployeeStatusEnum.PAYING.getValue()); } getInsuranceBaseInfoMapper().updateById(baseInfoPO); targetPO = baseInfoPO; encryptUtil.decrypt(insertSocialInfo, InsuranceArchivesSocialSchemePO.class); targetDetailPO = insertSocialInfo; } else { throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0, "档案不存在!")); } } //记录操作日志 DataCollectionEmployee empInfo = getEmployMapper().getEmployeeById(targetPO.getEmployeeId()); TaxAgentPO taxAgentInfo = getTaxAgentMapper().getById(targetPO.getPaymentOrganization()); 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()); if (oldSocialInfoList.size() == 1) { loggerContext.setOldValues(oldSocialInfoList.get(0)); } loggerContext.setNewValues(targetDetailPO); SalaryElogConfig.siArchivesLoggerTemplate.write(loggerContext); //生成福利档案基数调整记录数据 List adjustHistoryList = createAdjustInfo(adjustInfo, employeeId); //福利档案基数调整记录数据入库 batchInsertAdjustHistory(adjustHistoryList); } /** * 校验福利基数是否符合上下限要求 * @param primaryId * @param paymentBaseString * @return */ @Override public Boolean checkWelBaseLimit(Long primaryId, String paymentBaseString, Integer paymentScope) { if (primaryId ==null || paymentBaseString == null) { return true; } Map paymentBaseJson = JSON.parseObject(paymentBaseString, new HashMap().getClass()); if (paymentBaseJson == null) { return true; } for (Map.Entry entry : paymentBaseJson.entrySet()) { //判断福利值是否为空/数字 if (entry.getValue() == null || entry.getValue().length() == 0) { continue; } else if (!isNumeric(entry.getValue())) { log.info("福利值非数字!"); return false; } //根据福利方案id、险种id、缴纳对象、缴费状态查询明细 List insuranceSchemeDetailPOList = getInsuranceSchemeDetailMapper().getByPI(primaryId, Long.valueOf(entry.getKey())); log.info("福利方案id: {},, 福利明细项id:{}", primaryId, Long.valueOf(entry.getKey())); if (insuranceSchemeDetailPOList.size() == 0) { log.info("根据福利方案id、险种id、缴纳对象查询明细为null!福利方案id: {}, 福利明细项id:{}", primaryId, Long.valueOf(entry.getKey())); return false; } List isPaymentList = insuranceSchemeDetailPOList.stream() .filter(f -> f.getIsPayment().equals(IsPaymentEnum.YES.getValue()) && f.getPaymentScope().equals(paymentScope)).collect(Collectors.toList()); if (isPaymentList.size() > 0) { InsuranceSchemeDetailPO insuranceSchemeDetailPO = isPaymentList.get(0); encryptUtil.decrypt(insuranceSchemeDetailPO, InsuranceSchemeDetailPO.class); String lowerLimit = "0.000".equals(insuranceSchemeDetailPO.getLowerLimit()) ? null : insuranceSchemeDetailPO.getLowerLimit(); String upperLimit = "0.000".equals(insuranceSchemeDetailPO.getUpperLimit()) ? null : insuranceSchemeDetailPO.getUpperLimit(); if (lowerLimit != null && lowerLimit.length() > 0 && Double.parseDouble(entry.getValue()) < Double.parseDouble(lowerLimit)) { //数值低于对应福利明细下限 log.info("社保基数 {} 数值 {} 低于对应福利明细下限 {}!", entry.getKey(), entry.getValue(), lowerLimit); return false; } if (upperLimit != null && upperLimit.length() > 0 && Double.parseDouble(entry.getValue()) > Double.parseDouble(upperLimit)) { //数值高于对应福利明细上限 log.info("社保基数 {} 数值 {} 高于对应福利明细上限 {} !", entry.getKey(), entry.getValue(), upperLimit); return false; } } else { log.info("福利明细项属于未缴费状态,不对上下限进行约束"); } } return true; } /** * 校验福利基数是否符合上下限要求,并返回符合要求的数据 * @param primaryId * @param paymentBaseString * @return */ @Override public String checkAndBuildWelBaseWithLimit(Long primaryId, String paymentBaseString, Integer paymentScope) { if (primaryId ==null || paymentBaseString == null) { return paymentBaseString; } Map paymentBaseJson = JSON.parseObject(paymentBaseString, HashMap.class); Map newPaymentBaseJson = JSON.parseObject(paymentBaseString, HashMap.class); if (paymentBaseJson == null) { return null; } for (Map.Entry entry : paymentBaseJson.entrySet()) { //判断福利值是否为空/数字 if (entry.getValue() == null || entry.getValue().length() == 0) { continue; } else if (!isNumeric(entry.getValue())) { log.info("福利值非数字!"); newPaymentBaseJson.remove(entry.getKey()); continue; } //根据福利方案id、险种id List insuranceSchemeDetailPOList = getInsuranceSchemeDetailMapper().getByPI(primaryId, Long.valueOf(entry.getKey())); log.info("福利方案id: {},, 福利明细项id:{}", primaryId, Long.valueOf(entry.getKey())); if (insuranceSchemeDetailPOList.size() == 0) { log.info("根据福利方案id、险种id、缴纳对象查询明细为null!福利方案id: {}, 福利明细项id:{}", primaryId, Long.valueOf(entry.getKey())); newPaymentBaseJson.remove(entry.getKey()); continue; } List checkList = insuranceSchemeDetailPOList.stream() .filter(f -> f.getPaymentScope().equals(paymentScope)).collect(Collectors.toList()); if (checkList.size() > 0) { InsuranceSchemeDetailPO insuranceSchemeDetailPO = checkList.get(0); encryptUtil.decrypt(insuranceSchemeDetailPO, InsuranceSchemeDetailPO.class); String lowerLimit = "0.000".equals(insuranceSchemeDetailPO.getLowerLimit()) ? null : insuranceSchemeDetailPO.getLowerLimit(); String upperLimit = "0.000".equals(insuranceSchemeDetailPO.getUpperLimit()) ? null : insuranceSchemeDetailPO.getUpperLimit(); if (lowerLimit != null && lowerLimit.length() > 0 && Double.parseDouble(entry.getValue()) < Double.parseDouble(lowerLimit)) { //数值低于对应福利明细下限 log.info("社保基数 {} 数值 {} 低于对应福利明细下限 {}!", entry.getKey(), entry.getValue(), lowerLimit); newPaymentBaseJson.put(entry.getKey(), lowerLimit); } if (upperLimit != null && upperLimit.length() > 0 && Double.parseDouble(entry.getValue()) > Double.parseDouble(upperLimit)) { //数值高于对应福利明细上限 log.info("社保基数 {} 数值 {} 高于对应福利明细上限 {} !", entry.getKey(), entry.getValue(), upperLimit); newPaymentBaseJson.put(entry.getKey(), upperLimit); } } } return JSON.toJSONString(newPaymentBaseJson); } /** * 判断字符串是否为整数或者小数或者负数 */ public static boolean isNumeric(String str){ Pattern pattern = Pattern.compile("^-?\\d+(\\.\\d+)?$"); Matcher isNum = pattern.matcher(str); if (!isNum.matches()) { return false; } return true; } /** * 档案列表 *

* 这里是一个含有比较多动态字段的列表,用的是手动拼装的方式 * * @param param 高级搜索条件 * @param operateId 操作员id * @return table */ public Map listPage(InsuranceArchivesListParam param, long operateId) { Map apidatas = new HashMap<>(16); 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 (org.apache.commons.lang.StringUtils.isNotBlank(param.getDepartmentIdsStr())) { request.setDepartmentIds(Arrays.stream(param.getDepartmentIdsStr().split(",")).map(BigDecimal::new).collect(Collectors.toList())); } if (org.apache.commons.lang.StringUtils.isNotBlank(param.getSubcompanyIdsStr())) { request.setSubcompanyIds(Arrays.stream(param.getSubcompanyIdsStr().split(",")).map(BigDecimal::new).collect(Collectors.toList())); } if (org.apache.commons.lang.StringUtils.isNotBlank(param.getPositionsStr())) { request.setPositions(Arrays.stream(param.getPositionsStr().split(",")).map(BigDecimal::new).collect(Collectors.toList())); } if (org.apache.commons.lang.StringUtils.isNotBlank(param.getStatusesStr())) { request.setStatuses(Arrays.stream(param.getStatusesStr().split(",")).map(String::new).collect(Collectors.toList())); } request.setNeedAuth(param.getNeedAuth()); request.setTaxAgentEmployeeIds(param.getTaxAgentEmployeeIds()); request.setTaxAgentIds(param.getTaxAgentIds()); Integer current = param.getCurrent() == null ? 1 : param.getCurrent(); Integer pageSize = param.getPageSize() == null ? 10 : param.getPageSize(); long startNum = (current - 1) * pageSize; param.setStartNum(startNum); param.setPageSize(pageSize); // request.setStatuses(param.getStatuses()); request.setKeyword(param.getUserName()); request.setSiSchemeId(param.getSiSchemeId()); request.setFundSchemeId(param.getFundSchemeId()); request.setOtherSchemeId(param.getOtherSchemeId()); request.setPageSize(param.getPageSize()); request.setCurrent(param.getCurrent()); request.setJobNum(param.getJobNum()); request.setOrderRule(param.getOrderRule()); request.setRunStatuses(param.getRunStatuses()); request.setTaxAgentId(param.getTaxAgentId()); request.setExtWelArchiveList(param.isExtWelArchiveList()); apidatas = listPageEmployeePOS(request, operateId); return apidatas; } /** * 获取员工的基本信息 *

* 此处主要是一个公共接口,有多处引用。我们薪资系统只保存员工id(employeeId), * 但是页面上需要展示员工的更多信息(姓名,部门,状态。。。), * 所以这里主要是用于接收联表数据的一个接口 * * @param param 高级搜索条件,用于过滤数据 * @param operateId 操作员id * @return list */ public Map listPageEmployeePOS(InsuranceArchivesListParam param, long operateId) { //是否分权 Boolean needAuth = param.getNeedAuth(); StopWatch sw = new StopWatch(); Map datas = new HashMap<>(16); List page = new ArrayList<>(); PageInfo pageInfo = new PageInfo<>(InsuranceArchivesEmployeePO.class); //获取福利档案列表数据 if (needAuth) { Collection taxAgentEmployeeIds = param.getTaxAgentEmployeeIds(); Collection taxAgentIds = param.getTaxAgentIds(); log.info("从数据库获取档案列表数据开始"); sw.start("获取福利档案列表数据"); if (param.isExtWelArchiveList()) { page = getSocialSchemeMapper().queryExtEmployeeList(param); } else { page = getSocialSchemeMapper().queryEmployeeList(param); } sw.stop(); log.info("从数据库获取档案列表数据完成!"); page = page.stream().filter(f -> // taxAgentEmployeeIds.contains(f.getEmployeeId())|| taxAgentIds.contains(f.getPaymentOrganization()) ).collect(Collectors.toList()); // 填充总数和当页数据 // 分页参数 pageInfo = SalaryPageUtil.buildPage(param.getCurrent(), param.getPageSize(), InsuranceArchivesEmployeePO.class); pageInfo.setTotal(page.size()); pageInfo.setList(SalaryPageUtil.subList(pageInfo.getPageNum(), pageInfo.getPageSize(), page)); } else { log.info("从数据库获取档案列表数据开始"); sw.start("获取档案列表数据"); if (param.isExtWelArchiveList()) { page = getSocialSchemeMapper().queryExtEmployeeList(param); } else { page = getSocialSchemeMapper().queryEmployeeList(param); } sw.stop(); log.info("从数据库获取档案列表数据完成!"); pageInfo = SalaryPageUtil.buildPage(param.getCurrent(), param.getPageSize(), page, InsuranceArchivesEmployeePO.class); } List> records = null; log.info("buildTableData方法处理福利档案列表数据开始"); sw.start("buildTableData方法处理福利档案列表数据"); if (param.getExportData() != null && param.getExportData()) { records = buildTableData(pageInfo.getList(), true); } else { records = buildTableData(pageInfo.getList(), false); } sw.stop(); log.info("buildTableData方法处理福利档案列表数据完成!"); log.info("buildWeaTableColumns方法处理福利档案列表数据开始"); sw.start("buildWeaTableColumns方法处理福利档案列表数据"); List columns = buildWeaTableColumns(pageInfo.getList()); sw.stop(); log.info("buildWeaTableColumns方法处理福利档案列表数据完成!"); WeaTable table = new WeaTable(); table.setColumns(columns); //设置check是否可用 List checkboxpopedomList = new ArrayList<>(); WeaTableCheckboxpopedom checkboxpopedom = new WeaTableCheckboxpopedom(); checkboxpopedom.setPopedompara("column:system_type"); checkboxpopedom.setShowmethod("com.engine.salary.transmethod.TaxRateTransMethod.getCheckBoxPopedom"); checkboxpopedomList.add(checkboxpopedom); table.setCheckboxList(checkboxpopedomList); table.setCheckboxpopedom(null); WeaResultMsg result = new WeaResultMsg(false); result.putAll(table.makeDataResult()); result.success(); datas.put("pageInfo", pageInfo); datas.put("datas", records); datas.put("columns", columns); datas.put("dataKey", result.getResultMap()); log.info("各操作计时 {}", sw.prettyPrint()); return datas; } /** * 高级搜索 * * @return */ public Map getSearchCondition() { List userStatusOptions = Arrays.stream(UserStatusEnum.values()).map(e -> new SearchConditionOption(String.valueOf(e.getValue()), e.getDefaultLabel())).collect(Collectors.toList()); // List list = new SISchemeBiz().listAll(); List list = getSISchemeService(user).listAll(); List schemeOption = list.stream().filter(item -> Objects.equals(item.getWelfareType(), WelfareTypeEnum.SOCIAL_SECURITY.getValue())) .collect(Collectors.toList()) .stream().map(item -> new SearchConditionOption(item.getId().toString(), item.getSchemeName())).collect(Collectors.toList()); List fundOption = list.stream().filter(item -> Objects.equals(item.getWelfareType(), WelfareTypeEnum.ACCUMULATION_FUND.getValue())) .collect(Collectors.toList()) .stream().map(item -> new SearchConditionOption(item.getId().toString(), item.getSchemeName())).collect(Collectors.toList()); List otherOption = list.stream().filter(item -> Objects.equals(item.getWelfareType(), WelfareTypeEnum.OTHER.getValue())) .collect(Collectors.toList()) .stream().map(item -> new SearchConditionOption(item.getId().toString(), item.getSchemeName())).collect(Collectors.toList()); List> taxAgentList = getTaxAgentWrapper(user).selectListAsAdmin(); List taxAgentOption = taxAgentList.stream().map(item -> new SearchConditionOption(item.get("id").toString(), item.get("content").toString())).collect(Collectors.toList()); Map apidatas = new HashMap(); ConditionFactory conditionFactory = new ConditionFactory(user); //条件组 List addGroups = new ArrayList(); List conditionItems = new ArrayList(); //文本输入框 SearchConditionItem username = conditionFactory.createCondition(ConditionType.INPUT, 25034, "username"); username.setInputType("input"); username.setColSpan(2);//定义一行显示条件数,默认值为2,当值为1时标识该条件单独占一行 username.setFieldcol(16); //条件输入框所占宽度,默认值18 username.setLabelcol(8); username.setViewAttr(2); // 编辑权限 1:只读,2:可编辑, 3:必填 默认2 username.setLabel(SalaryI18nUtil.getI18nLabel(0,"姓名")); //设置文本值 这个将覆盖多语言标签的值 conditionItems.add(username); //文本输入框 SearchConditionItem jobNum = conditionFactory.createCondition(ConditionType.INPUT, 25034, "jobNum"); jobNum.setInputType("input"); jobNum.setColSpan(2);//定义一行显示条件数,默认值为2,当值为1时标识该条件单独占一行 jobNum.setFieldcol(16); //条件输入框所占宽度,默认值18 jobNum.setLabelcol(8); jobNum.setViewAttr(2); // 编辑权限 1:只读,2:可编辑, 3:必填 默认2 jobNum.setLabel(SalaryI18nUtil.getI18nLabel(0,"工号")); //设置文本值 这个将覆盖多语言标签的值 conditionItems.add(jobNum); SearchConditionItem departmentIds = conditionFactory.createCondition(ConditionType.BROWSER, 502329, "departmentIdsStr", "57"); departmentIds.setColSpan(2); departmentIds.setFieldcol(16); departmentIds.setLabelcol(8); departmentIds.setLabel(SalaryI18nUtil.getI18nLabel(0,"部门")); conditionItems.add(departmentIds); SearchConditionItem statuses = conditionFactory.createCondition(ConditionType.SELECT, 502327, "statusesStr"); statuses.setInputType("select"); statuses.setMultiple(true); statuses.setOptions(userStatusOptions); statuses.setColSpan(2); statuses.setFieldcol(16); statuses.setLabelcol(8); statuses.setIsQuickSearch(true); statuses.setLabel(SalaryI18nUtil.getI18nLabel(0,"状态")); conditionItems.add(statuses); SearchConditionItem positions = conditionFactory.createCondition(ConditionType.BROWSER, 502327, "positionsStr", "278"); positions.setInputType("browser"); positions.setColSpan(2); positions.setFieldcol(16); positions.setLabelcol(8); positions.setIsQuickSearch(true); positions.setLabel(SalaryI18nUtil.getI18nLabel(0,"岗位")); conditionItems.add(positions); SearchConditionItem subcompanyIds = conditionFactory.createCondition(ConditionType.BROWSER, 502327, "subcompanyIdsStr", "194"); subcompanyIds.setInputType("browser"); subcompanyIds.setColSpan(2); subcompanyIds.setFieldcol(16); subcompanyIds.setLabelcol(8); subcompanyIds.setIsQuickSearch(true); subcompanyIds.setLabel(SalaryI18nUtil.getI18nLabel(0,"分部")); conditionItems.add(subcompanyIds); // SearchConditionItem hireDate = conditionFactory.createCondition(ConditionType.TIMEPICKER,502327,new String[]{"hireDate", "hireDate"}); // hireDate.setInputType("timepicker"); // hireDate.setColSpan(2); // hireDate.setFieldcol(16); // hireDate.setViewAttr(8); // hireDate.setFormat("yyyy-MM-dd"); // hireDate.setLabel(SalaryI18nUtil.getI18nLabel(0,"入职日期")); // conditionItems.add(hireDate); // // // SearchConditionItem dimissionDate = conditionFactory.createCondition(ConditionType.TIMEPICKER,502327,new String[]{"dimissionDate", "dimissionDate"}); // dimissionDate.setInputType("timepicker"); // dimissionDate.setColSpan(2); // dimissionDate.setFieldcol(16); // dimissionDate.setViewAttr(8); // dimissionDate.setFormat("yyyy-MM-dd"); // dimissionDate.setLabel(SalaryI18nUtil.getI18nLabel(0,"离职日期")); // conditionItems.add(dimissionDate); SearchConditionItem siSchemeId = conditionFactory.createCondition(ConditionType.SELECT, 502327, "siSchemeId"); siSchemeId.setInputType("select"); siSchemeId.setOptions(schemeOption); siSchemeId.setColSpan(2); siSchemeId.setFieldcol(16); siSchemeId.setLabelcol(8); siSchemeId.setIsQuickSearch(true); siSchemeId.setLabel(SalaryI18nUtil.getI18nLabel(0,"社保方案")); conditionItems.add(siSchemeId); SearchConditionItem fundSchemeId = conditionFactory.createCondition(ConditionType.SELECT, 502327, "fundSchemeId"); fundSchemeId.setInputType("select"); fundSchemeId.setOptions(fundOption); fundSchemeId.setColSpan(2); fundSchemeId.setFieldcol(16); fundSchemeId.setLabelcol(8); fundSchemeId.setIsQuickSearch(true); fundSchemeId.setLabel(SalaryI18nUtil.getI18nLabel(0,"公积金方案")); conditionItems.add(fundSchemeId); SearchConditionItem otherSchemeId = conditionFactory.createCondition(ConditionType.SELECT, 502327, "otherSchemeId"); otherSchemeId.setInputType("select"); otherSchemeId.setOptions(otherOption); otherSchemeId.setColSpan(2); otherSchemeId.setFieldcol(16); otherSchemeId.setLabelcol(8); otherSchemeId.setIsQuickSearch(true); otherSchemeId.setLabel(SalaryI18nUtil.getI18nLabel(0,"其他福利方案")); conditionItems.add(otherSchemeId); SearchConditionItem taxAgentId = conditionFactory.createCondition(ConditionType.SELECT, 502327, "taxAgentId"); taxAgentId.setInputType("select"); taxAgentId.setOptions(taxAgentOption); taxAgentId.setColSpan(2); taxAgentId.setFieldcol(16); taxAgentId.setLabelcol(8); taxAgentId.setIsQuickSearch(true); taxAgentId.setLabel(SalaryI18nUtil.getI18nLabel(0,"个税扣缴义务人")); conditionItems.add(taxAgentId); addGroups.add(new SearchConditionGroup(SalaryI18nUtil.getI18nLabel(0,"常用条件"), true, conditionItems)); apidatas.put("condition", addGroups); return apidatas; } @Override public List getSocialByEmployeeIds(List employeeIds) { List> partition = Lists.partition(employeeIds, 1000); List allList = new ArrayList<>(); for (List longs : partition) { List socialList = getSocialSchemeMapper().getSocialByEmployeeId(longs); allList.addAll(socialList); } return allList; } @Override public List getFundByEmployeeIds(List employeeIds) { List> partition = Lists.partition(employeeIds, 1000); List allList = new ArrayList<>(); for (List longs : partition) { List fundList = getFundSchemeMapper().getFundByEmployeeId(longs); allList.addAll(fundList); } return allList; } @Override public List getOtherByEmployeeIds(List employeeIds) { List> partition = Lists.partition(employeeIds, 1000); List allList = new ArrayList<>(); for (List longs : partition) { List otherList = getOtherSchemeMapper().getOtherByEmployeeId(longs); allList.addAll(otherList); } return allList; } /** * 组装员工的社保,公积金,其他福利数据 * * @param ids 员工id集合 * @return map */ @Override public Map buildBatchAccount(List ids, Long paymentOrganization) { if (org.apache.commons.collections.CollectionUtils.isEmpty(ids)) { return new HashMap<>(); } //设置获取社保/公积金/其他福利档案方法的入参 List insuranceArchivesEmployeePOS = new ArrayList<>(); for (Long employeeId : ids) { insuranceArchivesEmployeePOS.add(InsuranceArchivesEmployeePO.builder() .employeeId(employeeId) .paymentOrganization(paymentOrganization) .build()); } Map result = new HashMap<>(); Map socialMap = new HashMap<>(); Map funMap = new HashMap<>(); Map otherMap = new HashMap<>(); List socialPOS = encryptUtil.decryptList(this.getSocialByEmployeeIdAndPayOrg(insuranceArchivesEmployeePOS), InsuranceArchivesSocialSchemePO.class); if (org.apache.commons.collections.CollectionUtils.isNotEmpty(socialPOS)) { socialMap = socialPOS.stream().collect(Collectors.toMap(InsuranceArchivesSocialSchemePO::getEmployeeId, Function.identity())); } List fundPOS = encryptUtil.decryptList(this.getFundByEmployeeIdAndPayOrg(insuranceArchivesEmployeePOS), InsuranceArchivesFundSchemePO.class); if (org.apache.commons.collections.CollectionUtils.isNotEmpty(fundPOS)) { funMap = fundPOS.stream().collect(Collectors.toMap(InsuranceArchivesFundSchemePO::getEmployeeId, Function.identity())); } List otherPOS = this.getOtherByEmployeeIdAndPayOrg(insuranceArchivesEmployeePOS); encryptUtil.decryptList(otherPOS, InsuranceArchivesOtherSchemePO.class); if (org.apache.commons.collections.CollectionUtils.isNotEmpty(otherPOS)) { otherMap = otherPOS.stream().collect(Collectors.toMap(InsuranceArchivesOtherSchemePO::getEmployeeId, Function.identity())); } for (Long id : ids) { InsuranceArchivesAccountPO po = new InsuranceArchivesAccountPO(); po.setSocial(socialMap.get(id)); po.setFund(funMap.get(id)); po.setOther(otherMap.get(id)); result.put(id, po); } return result; } @Override public List dealSocialBaseAdjustInfoList(List adjustList, Long creator) { List adjustHistoryList = new ArrayList<>(); if (adjustList.size() > 0) { //遍历待更新的福利档案数据,对每组档案生成基数调整记录(基数单元未变化则忽略) for (InsuranceArchivesSocialSchemePO po : adjustList) { List oldBaseInfoList = getSocialSchemeMapper().getSocialByEmployeeIdAndPayOrg(InsuranceArchivesEmployeePO.builder() .paymentOrganization(po.getPaymentOrganization()).employeeId(po.getEmployeeId()).build()); InsuranceArchivesBaseHistoryDTO adjustInfo = InsuranceArchivesBaseHistoryDTO.builder() .adjustAfterSchemeId(po.getSocialSchemeId()) .adjustAfterBaseJson(po.getSocialPaymentBaseString()) .adjustAfterComBaseJson(po.getSocialPaymentComBaseString()) .welfareType(po.getWelfareType()) .employeeId(po.getEmployeeId()) .paymentOrganization(po.getPaymentOrganization()) .build(); if (oldBaseInfoList.size() == 1) { //新增调整记录,变更 InsuranceArchivesSocialSchemePO oldBaseInfo = oldBaseInfoList.get(0); encryptUtil.decrypt(oldBaseInfo, InsuranceArchivesSocialSchemePO.class); adjustInfo.setAdjustBeforeBaseJson(oldBaseInfo.getSocialPaymentBaseString()); adjustInfo.setAdjustBeforeComBaseJson(oldBaseInfo.getSocialPaymentComBaseString()); adjustInfo.setAdjustBeforeSchemeId(oldBaseInfo.getSocialSchemeId()); } else if (oldBaseInfoList.size() > 1) { throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0,"社保档案存在冗余数据!")); } adjustHistoryList.addAll(createAdjustInfo(adjustInfo, creator)); } } return adjustHistoryList; } @Override public List dealFundBaseAdjustInfoList(List adjustList, Long creator) { List adjustHistoryList = new ArrayList<>(); if (adjustList.size() > 0) { //遍历待更新的福利档案数据,对每组档案生成基数调整记录(基数单元未变化则忽略) for (InsuranceArchivesFundSchemePO po : adjustList) { List oldBaseInfoList = getFundSchemeMapper().getFundByEmployeeIdAndPayOrg(InsuranceArchivesEmployeePO.builder() .paymentOrganization(po.getPaymentOrganization()).employeeId(po.getEmployeeId()).build()); InsuranceArchivesBaseHistoryDTO adjustInfo = InsuranceArchivesBaseHistoryDTO.builder() .adjustAfterSchemeId(po.getFundSchemeId()) .adjustAfterBaseJson(po.getFundPaymentBaseString()) .adjustAfterComBaseJson(po.getFundPaymentComBaseString()) .welfareType(po.getWelfareType()) .employeeId(po.getEmployeeId()) .paymentOrganization(po.getPaymentOrganization()) .build(); if (oldBaseInfoList.size() == 1) { //新增调整记录,变更 InsuranceArchivesFundSchemePO oldBaseInfo = oldBaseInfoList.get(0); encryptUtil.decrypt(oldBaseInfo, InsuranceArchivesFundSchemePO.class); adjustInfo.setAdjustBeforeBaseJson(oldBaseInfo.getFundPaymentBaseString()); adjustInfo.setAdjustBeforeComBaseJson(oldBaseInfo.getFundPaymentComBaseString()); adjustInfo.setAdjustBeforeSchemeId(oldBaseInfo.getFundSchemeId()); } else if (oldBaseInfoList.size() > 1) { throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0,"公积金档案存在冗余数据!")); } adjustHistoryList.addAll(createAdjustInfo(adjustInfo, creator)); } } return adjustHistoryList; } @Override public List dealOtherBaseAdjustInfoList(List adjustList, Long creator) { List adjustHistoryList = new ArrayList<>(); if (adjustList.size() > 0) { //遍历待更新的福利档案数据,对每组档案生成基数调整记录(基数单元未变化则忽略) for (InsuranceArchivesOtherSchemePO po : adjustList) { List oldBaseInfoList = getOtherSchemeMapper().getOtherByEmployeeIdAndPayOrg(InsuranceArchivesEmployeePO.builder() .paymentOrganization(po.getPaymentOrganization()).employeeId(po.getEmployeeId()).build()); InsuranceArchivesBaseHistoryDTO adjustInfo = InsuranceArchivesBaseHistoryDTO.builder() .adjustAfterSchemeId(po.getOtherSchemeId()) .adjustAfterBaseJson(po.getOtherPaymentBaseString()) .adjustAfterComBaseJson(po.getOtherPaymentComBaseString()) .welfareType(po.getWelfareType()) .employeeId(po.getEmployeeId()) .paymentOrganization(po.getPaymentOrganization()) .build(); if (oldBaseInfoList.size() == 1) { //新增调整记录,变更 InsuranceArchivesOtherSchemePO oldBaseInfo = oldBaseInfoList.get(0); encryptUtil.decrypt(oldBaseInfo, InsuranceArchivesOtherSchemePO.class); adjustInfo.setAdjustBeforeBaseJson(oldBaseInfo.getOtherPaymentBaseString()); adjustInfo.setAdjustBeforeComBaseJson(oldBaseInfo.getOtherPaymentComBaseString()); adjustInfo.setAdjustBeforeSchemeId(oldBaseInfo.getOtherSchemeId()); } else if (oldBaseInfoList.size() > 1) { throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0,"其他福利档案存在冗余数据!")); } adjustHistoryList.addAll(createAdjustInfo(adjustInfo, creator)); } } return adjustHistoryList; } /** * 获取没有设置社保、公积金最后缴纳月的档案 * @param employeeIds * @return */ @Override public List listEndDateIsNull(List employeeIds) { if (org.apache.commons.collections.CollectionUtils.isEmpty(employeeIds)) { return Collections.emptyList(); } return getInsuranceBaseInfoMapper().listEndDateIsNull(employeeIds); } /*****以上代码为SIArchivesBiz中方法逻辑迁移,旨在减少Biz类的使用*****/ }