package com.engine.salary.service.impl; import com.engine.common.util.ServiceUtil; import com.engine.core.impl.Service; import com.engine.salary.common.LocalDateRange; import com.engine.salary.component.WeaTableColumnGroup; import com.engine.salary.entity.datacollection.DataCollectionEmployee; import com.engine.salary.entity.ly.param.LySalaryReportQueryParam; import com.engine.salary.entity.ly.po.LySalaryReportPO; import com.engine.salary.entity.salaryacct.bo.SalaryAcctFormulaBO; import com.engine.salary.entity.salaryacct.po.SalaryAcctEmployeePO; import com.engine.salary.entity.salaryacct.po.SalaryAcctRecordPO; import com.engine.salary.entity.salaryacct.po.SalaryAcctResultPO; import com.engine.salary.entity.salaryitem.po.SalaryItemPO; import com.engine.salary.entity.salarysob.po.SalarySobEmpFieldPO; import com.engine.salary.entity.salarysob.po.SalarySobItemPO; import com.engine.salary.entity.taxagent.po.TaxAgentPO; import com.engine.salary.enums.UserStatusEnum; import com.engine.salary.enums.ly.LyPushStatusEnum; import com.engine.salary.enums.salaryaccounting.SalaryAcctRecordStatusEnum; import com.engine.salary.enums.salaryitem.SalaryDataTypeEnum; import com.engine.salary.exception.SalaryRunTimeException; import com.engine.salary.mapper.ly.LySalaryReportMapper; import com.engine.salary.service.*; import com.engine.salary.util.SalaryDateUtil; import com.engine.salary.util.SalaryEntityUtil; import com.engine.salary.util.SalaryI18nUtil; import com.engine.salary.util.db.IdGenerator; import com.engine.salary.util.db.MapperProxyFactory; import com.engine.salary.util.excel.ExcelUtilPlus; import com.engine.salary.util.page.PageInfo; import com.engine.salary.util.page.SalaryPageUtil; import com.google.common.collect.Lists; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.math.NumberUtils; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import weaver.conn.RecordSet; import weaver.general.BaseBean; import weaver.hrm.User; import java.math.BigDecimal; import java.util.*; import java.util.stream.Collectors; /** * @author Harryxzy * @ClassName LySalaryReportServiceImpl * @date 2024/08/21 16:43 * @description */ public class LySalaryReportServiceImpl extends Service implements LySalaryReportService { private LySalaryReportMapper getLySalaryReportMapper() { return MapperProxyFactory.getProxy(LySalaryReportMapper.class); } private SalaryAcctRecordService getSalaryAcctRecordService(User user) { return ServiceUtil.getService(SalaryAcctRecordServiceImpl.class, user); } private SalaryAcctEmployeeService getSalaryAcctEmployeeService(User user) { return ServiceUtil.getService(SalaryAcctEmployeeServiceImpl.class, user); } private SalaryAcctResultService getSalaryAcctResultService(User user) { return ServiceUtil.getService(SalaryAcctResultServiceImpl.class, user); } private SalaryItemService getSalaryItemService(User user) { return ServiceUtil.getService(SalaryItemServiceImpl.class, user); } private TaxAgentService getTaxAgentService(User user) { return ServiceUtil.getService(TaxAgentServiceImpl.class, user); } private SalaryEmployeeService getSalaryEmployeeService(User user) { return ServiceUtil.getService(SalaryEmployeeServiceImpl.class, user); } private LySalaryReportService getLySalaryReportService(User user) { return ServiceUtil.getService(LySalaryReportServiceImpl.class, user); } /** * 查询所有记录 * * @return 返回集合,没有返回空List */ public List listAll() { return getLySalaryReportMapper().listAll(); } @Override public List listByIds(List ids) { if (CollectionUtils.isEmpty(ids)) { return Collections.emptyList(); } List> partition = Lists.partition(ids, 1000); List resultList = new ArrayList<>(); partition.forEach(part -> resultList.addAll(getLySalaryReportMapper().listSome(LySalaryReportPO.builder().ids(part).build()))); return resultList; } /** * 根据主键查询 * * @param id 主键 * @return 返回记录,没有返回null */ public LySalaryReportPO getById(Long id) { return getLySalaryReportMapper().getById(id); } /** * 新增,忽略null字段 * * @param lySalaryReport 新增的记录 * @return 返回影响行数 */ public int insertIgnoreNull(LySalaryReportPO lySalaryReport) { return getLySalaryReportMapper().insertIgnoreNull(lySalaryReport); } /** * 修改,修改所有字段 * * @param lySalaryReport 修改的记录 * @return 返回影响行数 */ public int update(LySalaryReportPO lySalaryReport) { return getLySalaryReportMapper().update(lySalaryReport); } /** * 修改,忽略null字段 * * @param lySalaryReport 修改的记录 * @return 返回影响行数 */ public int updateIgnoreNull(LySalaryReportPO lySalaryReport) { return getLySalaryReportMapper().updateIgnoreNull(lySalaryReport); } /** * 删除记录 * * @param lySalaryReport 待删除的记录 * @return 返回影响行数 */ public int delete(LySalaryReportPO lySalaryReport) { return getLySalaryReportMapper().delete(lySalaryReport); } public List listSome(LySalaryReportPO param) { return getLySalaryReportMapper().listSome(param); } public List listBySalaryMonth(Date salaryMonth) { if (salaryMonth == null) { return Collections.emptyList(); } return getLySalaryReportMapper().listSome(LySalaryReportPO.builder().salaryMonth(salaryMonth).build()); } /** * 生成报表数据 * * @param param */ @Override public void generateSalaryReport(LySalaryReportQueryParam param) { if (StringUtils.isBlank(param.getSalaryMonth())) { throw new SalaryRunTimeException("薪资所属月参数不能为空"); } Date salaryMonthDate = SalaryDateUtil.dateStrToLocalYearMonth(param.getSalaryMonth()); if (salaryMonthDate == null) { throw new SalaryRunTimeException("薪资所属月参数格式错误"); } param.setSalaryMonthDate(salaryMonthDate); // 获取本月是否已有报表数据 List lySalaryReportPOS = listBySalaryMonth(salaryMonthDate); if (CollectionUtils.isNotEmpty(lySalaryReportPOS)) { throw new SalaryRunTimeException("本薪资所属月已生成薪资汇总报表,无法生成薪资报表数据"); } BaseBean baseBean = new BaseBean(); // 获取薪资核算结果 List salaryAcctRecordList = getSalaryAcctRecordService(user).listBySalaryMonth(LocalDateRange.builder().fromDate(salaryMonthDate).endDate(salaryMonthDate).build()); // 过滤账套及状态 // List salarySobIds = Arrays.stream(baseBean.getPropValue("lySalaryNCReport", "salary_sob_ids").split(",")).filter(NumberUtils::isCreatable).map(Long::valueOf).collect(Collectors.toList()); // salaryAcctRecordList = salaryAcctRecordList.stream().filter(record -> salarySobIds.contains(record.getSalarySobId()) && record.getStatus() > SalaryAcctRecordStatusEnum.NOT_ARCHIVED.getValue()).collect(Collectors.toList()); salaryAcctRecordList = salaryAcctRecordList.stream().filter(record -> record.getStatus() > SalaryAcctRecordStatusEnum.NOT_ARCHIVED.getValue()).collect(Collectors.toList()); if (CollectionUtils.isNotEmpty(salaryAcctRecordList)) { List salaryAcctRecordIds = salaryAcctRecordList.stream().map(SalaryAcctRecordPO::getId).collect(Collectors.toList()); // 获取薪资核算人员 List salaryAcctEmployeePOList = getSalaryAcctEmployeeService(user).listBySalaryAcctRecordIds(salaryAcctRecordIds); if (CollectionUtils.isNotEmpty(salaryAcctEmployeePOList)) { String dataSourceStr = StringUtils.join(salaryAcctRecordIds, ","); // 获取薪资项目id List salaryItemIds = new ArrayList<>(); // 是职能还是项目 Long znxmlxItemId = getPropLongValue(baseBean, "lySalaryNCReport", "salary_znxmlx_item_id"); salaryItemIds.add(znxmlxItemId); // 发放公司全称 Long ffgsqcItemId = getPropLongValue(baseBean, "lySalaryNCReport", "salary_ffgsqc_item_id"); salaryItemIds.add(ffgsqcItemId); // 费用承担公司全称 Long fycdgsqcItemId = getPropLongValue(baseBean, "lySalaryNCReport", "salary_fycdgsqc_item_id"); salaryItemIds.add(fycdgsqcItemId); // 职能/项目名称 Long znxmmcItemId = getPropLongValue(baseBean, "lySalaryNCReport", "salary_znxmmc_item_id"); salaryItemIds.add(znxmmcItemId); // 应发合计 Long yfhjItemId = getPropLongValue(baseBean, "lySalaryNCReport", "salary_byyf_yfhj_item_id"); salaryItemIds.add(yfhjItemId); // 月度绩效 Long ydjxItemId = getPropLongValue(baseBean, "lySalaryNCReport", "salary_byyf_ydjx_item_id"); salaryItemIds.add(ydjxItemId); // 季度/年度绩效 Long jdndjxItemId = getPropLongValue(baseBean, "lySalaryNCReport", "salary_byyf_jdndjx_item_id"); salaryItemIds.add(jdndjxItemId); // 激励提成(经营) Long jltcjyItemId = getPropLongValue(baseBean, "lySalaryNCReport", "salary_byyf_jltcjy_item_id"); salaryItemIds.add(jltcjyItemId); // 激励提成(市场) Long jltcscItemId = getPropLongValue(baseBean, "lySalaryNCReport", "salary_byyf_jltcsc_item_id"); salaryItemIds.add(jltcscItemId); // 工资(含月度绩效)、福利等 Long gzfldItemId = getPropLongValue(baseBean, "lySalaryNCReport", "salary_gzfld_jltcsc_item_id"); salaryItemIds.add(gzfldItemId); // 个人社保 Long grsbItemId = getPropLongValue(baseBean, "lySalaryNCReport", "salary_dsdj_grsb_item_id"); salaryItemIds.add(grsbItemId); // 个人公积金 Long grgjjItemId = getPropLongValue(baseBean, "lySalaryNCReport", "salary_dsdj_grgjj_item_id"); salaryItemIds.add(grgjjItemId); // 个人所得税 Long grsdsItemId = getPropLongValue(baseBean, "lySalaryNCReport", "salary_dsdj_grsds_item_id"); salaryItemIds.add(grsdsItemId); // 工装 Long gzItemId = getPropLongValue(baseBean, "lySalaryNCReport", "salary_shkcx_gz_item_id"); salaryItemIds.add(gzItemId); // 水电费 Long sdfItemId = getPropLongValue(baseBean, "lySalaryNCReport", "salary_shkcx_sdf_item_id"); salaryItemIds.add(sdfItemId); // 爱心互助金 Long axhzjItemId = getPropLongValue(baseBean, "lySalaryNCReport", "salary_shkcx_axhzj_item_id"); salaryItemIds.add(axhzjItemId); // 停车费 Long tcfItemId = getPropLongValue(baseBean, "lySalaryNCReport", "salary_shkcx_tcf_item_id"); salaryItemIds.add(tcfItemId); // 个税调整 Long gstzItemId = getPropLongValue(baseBean, "lySalaryNCReport", "salary_shkcx_gstz_item_id"); salaryItemIds.add(gstzItemId); // 生育津贴 Long syjtItemId = getPropLongValue(baseBean, "lySalaryNCReport", "salary_shkcx_syjt_item_id"); salaryItemIds.add(syjtItemId); // 培训费 Long pxfItemId = getPropLongValue(baseBean, "lySalaryNCReport", "salary_shkcx_pxf_item_id"); salaryItemIds.add(pxfItemId); // 其他 Long qtItemId = getPropLongValue(baseBean, "lySalaryNCReport", "salary_shkcx_qt_item_id"); salaryItemIds.add(qtItemId); // 本月实发 Long bysfItemId = getPropLongValue(baseBean, "lySalaryNCReport", "salary_bysf_item_id"); salaryItemIds.add(bysfItemId); List salaryItemList = getSalaryItemService(user).listByIds(salaryItemIds); salaryItemIds = salaryItemList.stream().map(SalaryItemPO::getId).collect(Collectors.toList()); List salaryAcctEmpIds = salaryAcctEmployeePOList.stream().map(SalaryAcctEmployeePO::getId).collect(Collectors.toList()); // 获取薪资核算结果 List acctResultList = getSalaryAcctResultService(user).listByAcctEmployeeIdsAndSalaryItemIds(salaryAcctEmpIds, salaryItemIds); List salarySobEmpFields = new ArrayList<>(); salarySobEmpFields.add(SalarySobEmpFieldPO.builder().fieldCode("subcompanyId").build()); List> resultMapList = buildData4LyReport(salaryItemList, salaryAcctEmployeePOList, salarySobEmpFields, acctResultList, false); // 根据费用承担公司全称、职能/项目名称进行分组 Map>> resultGroup = SalaryEntityUtil.group2Map(resultMapList, map -> (map.get(ffgsqcItemId.toString()) == null ? " " : map.get(ffgsqcItemId.toString()).toString()) + "-split" + (map.get(fycdgsqcItemId.toString()) == null ? " " : map.get(fycdgsqcItemId.toString()).toString()) + "-split" + (map.get(znxmmcItemId.toString()) == null ? " " : map.get(znxmmcItemId.toString()).toString())); List numberItems = salaryItemList.stream().filter(item -> item.getDataType().equals(SalaryDataTypeEnum.NUMBER.getValue())).collect(Collectors.toList()); LinkedHashMap> resultMap = getSumResultByGroup(resultGroup, Collections.emptyList(), numberItems, znxmlxItemId); // 排序 - 根据key排序 LinkedHashMap> sortedMap = new LinkedHashMap<>(); resultMap.entrySet().stream().sorted(Map.Entry.comparingByKey()).forEachOrdered(x -> sortedMap.put(x.getKey(), x.getValue())); resultMap = sortedMap; Date now = new Date(); resultMap.forEach((key,valueMap) -> { String[] split = key.split("-split"); String ffgsqc = split.length > 0 ? split[0] : ""; String fycdgsqc = split.length > 1 ? split[1] : ""; String znxmmc = split.length > 2 ? split[2] : ""; valueMap.put("ffgsqc", ffgsqc); valueMap.put("fycdgsqc",fycdgsqc); valueMap.put("znxmmc",znxmmc); // 工资(含月度绩效)、福利等 = 应发合计-季度/年度绩效-激励提成(市场)-激励提成(经营) 0325修改 不扣经营了 String yfhjValueStr = valueMap.getOrDefault(yfhjItemId.toString(), "0").toString(); BigDecimal yfhjValue = NumberUtils.isCreatable(yfhjValueStr) ? new BigDecimal(yfhjValueStr) : BigDecimal.valueOf(0); String jdndjxValueStr = valueMap.getOrDefault(jdndjxItemId.toString(), "0").toString(); BigDecimal jdndjxValue = NumberUtils.isCreatable(jdndjxValueStr) ? new BigDecimal(jdndjxValueStr) : BigDecimal.valueOf(0); String jltcscValueStr = valueMap.getOrDefault(jltcscItemId.toString(), "0").toString(); BigDecimal jltcscValue = NumberUtils.isCreatable(jltcscValueStr) ? new BigDecimal(jltcscValueStr) : BigDecimal.valueOf(0); String jltcjyValueStr = valueMap.getOrDefault(jltcjyItemId.toString(), "0").toString(); BigDecimal jltcjyValue = NumberUtils.isCreatable(jltcjyValueStr) ? new BigDecimal(jltcjyValueStr) : BigDecimal.valueOf(0); valueMap.put(gzfldItemId.toString(),yfhjValue.subtract(jdndjxValue).subtract(jltcscValue)); LySalaryReportPO build = LySalaryReportPO.builder() .id(IdGenerator.generate()) .salaryMonth(salaryMonthDate) .znxmlx(valueMap.getOrDefault(znxmlxItemId.toString(), "").toString()) .subcompanyId(Long.valueOf(valueMap.getOrDefault("subcompanyId","0").toString())) .ffgsqc(ffgsqc) .fycdgsqc(fycdgsqc) .znxmmc(znxmmc) .empNum(Integer.valueOf(valueMap.getOrDefault("empNums", "0").toString())) .byyfYfhj(valueMap.getOrDefault(yfhjItemId.toString(), "0").toString()) .byyfYdjx(valueMap.getOrDefault(ydjxItemId.toString(), "0").toString()) .byyfJdndjx(valueMap.getOrDefault(jdndjxItemId.toString(), "0").toString()) .byyfJltcjy(valueMap.getOrDefault(jltcjyItemId.toString(), "0").toString()) .byyfJltcsc(valueMap.getOrDefault(jltcscItemId.toString(), "0").toString()) .byyfGzfld(valueMap.getOrDefault(gzfldItemId.toString(), "0").toString()) .dsdjGrsb(valueMap.getOrDefault(grsbItemId.toString(), "0").toString()) .dsdjGrgjj(valueMap.getOrDefault(grgjjItemId.toString(), "0").toString()) .dsdjGrsds(valueMap.getOrDefault(grsdsItemId.toString(), "0").toString()) .shkcxGz(valueMap.getOrDefault(gzItemId.toString(), "0").toString()) .shkcxSdf(valueMap.getOrDefault(sdfItemId.toString(), "0").toString()) .shkcxAxhzj(valueMap.getOrDefault(axhzjItemId.toString(), "0").toString()) .shkcxTcf(valueMap.getOrDefault(tcfItemId.toString(), "0").toString()) .shkcxGstz(valueMap.getOrDefault(gstzItemId.toString(), "0").toString()) .shkcxSyjt(valueMap.getOrDefault(syjtItemId.toString(), "0").toString()) .shkcxPxf(valueMap.getOrDefault(pxfItemId.toString(), "0").toString()) .shkcxQt(valueMap.getOrDefault(qtItemId.toString(), "0").toString()) .bysf(valueMap.getOrDefault(bysfItemId.toString(), "0").toString()) .dataSorce(dataSourceStr) .xzjtpzFlag(0) .xzffpzFlag(0) .sbjtpzFlag(0) .sbffpzFlag(0) .gjjjtpzFlag(0) .gjjffpzFlag(0) .creator(Long.valueOf(user.getUID())) .createTime(now) .updateTime(now) .deleteType(0) .build(); getLySalaryReportMapper().insertIgnoreNull(build); }); } } } List> buildData4LyReport(List salaryItemList, List salaryAcctEmployeeList, List salarySobEmpFields, List salaryAcctResult, boolean dynamicEmpInfo) { List empIds = salaryAcctEmployeeList.stream().map(SalaryAcctEmployeePO::getEmployeeId).distinct().collect(Collectors.toList()); List employeeList = getSalaryEmployeeService(user).listByIds(empIds); List taxAgentPOS = getTaxAgentService(user).listAll(); return buildData4Ly(salaryItemList, salarySobEmpFields, employeeList, salaryAcctEmployeeList, salaryAcctResult, taxAgentPOS, dynamicEmpInfo); } public static List> buildData4Ly(List salaryItems, List salarySobEmpFields, List simpleEmployees, List salaryAcctEmployees, List salaryAccountingResults, List taxAgents, boolean dynamicEmpInfo) { if (CollectionUtils.isEmpty(salaryAcctEmployees)) { return Collections.emptyList(); } SalaryI18nUtil.i18nList(salaryAcctEmployees); Map employeeMap = SalaryEntityUtil.convert2Map(simpleEmployees, DataCollectionEmployee::getEmployeeId); Map> acctResultMap = SalaryEntityUtil.group2Map(salaryAccountingResults, SalaryAcctResultPO::getSalaryAcctEmpId); Map taxAgentNameMap = SalaryEntityUtil.convert2Map(taxAgents, TaxAgentPO::getId, TaxAgentPO::getName); return salaryAcctEmployees.stream().map(e -> { Map resultValueMap = SalaryEntityUtil.convert2Map(acctResultMap.getOrDefault(e.getId(), Collections.emptyList()), SalaryAcctResultPO::getSalaryItemId, SalaryAcctResultPO::getResultValue); // 薪资项目的值 Map map = SalaryEntityUtil.convert2Map(salaryItems, o -> "" + o.getId(), o -> resultValueMap.getOrDefault(o.getId(), StringUtils.EMPTY)); // 人员信息字段的值 Map fieldValueMap = SalaryAcctFormulaBO.convert2FormulaEmployee(employeeMap.get(e.getEmployeeId()), e, true); for (SalarySobEmpFieldPO salarySobEmpField : salarySobEmpFields) { // 员工信息字段的字段类型 if (dynamicEmpInfo) { map.put(salarySobEmpField.getFieldCode(), fieldValueMap.get(salarySobEmpField.getFieldCode())); } else { if ("departmentName".equals(salarySobEmpField.getFieldCode())) { map.put("departmentName", e.getDepartmentName()); } else if ("departmentId".equals(salarySobEmpField.getFieldCode())) { map.put("departmentId", e.getDepartmentId()); } else if ("subcompanyId".equals(salarySobEmpField.getFieldCode())) { map.put("subcompanyId", e.getSubcompanyId() == null ? 0 : e.getSubcompanyId()); } else if ("subcompanyName".equals(salarySobEmpField.getFieldCode())) { map.put("subcompanyName", e.getSubcompanyName()); } else if ("jobcall".equals(salarySobEmpField.getFieldCode())) { map.put("jobcall", e.getJobcall()); } else if ("jobcallId".equals(salarySobEmpField.getFieldCode())) { map.put("jobcallId", e.getJobcallId()); } else if ("jobtitleName".equals(salarySobEmpField.getFieldCode())) { map.put("jobtitleName", e.getJobtitleName()); } else if ("jobtitleId".equals(salarySobEmpField.getFieldCode())) { map.put("jobtitleId", e.getJobtitleId()); } else if ("status".equals(salarySobEmpField.getFieldCode())) { map.put("status", e.getStatus()); } else if ("statusName".equals(salarySobEmpField.getFieldCode())) { map.put("statusName", UserStatusEnum.getDefaultLabelByValue(new Integer(e.getStatus()))); } else { map.put(salarySobEmpField.getFieldCode(), fieldValueMap.get(salarySobEmpField.getFieldCode())); } } map.put(salarySobEmpField.getFieldCode() + "_type", SalaryDataTypeEnum.STRING.getValue()); } // 主键id map.put("id", e.getId()); //人员id map.put("employeeId", e.getEmployeeId()); map.put("userName", fieldValueMap.get("username")); // 个税扣缴义务人 String taxAgentName = taxAgentNameMap.getOrDefault(e.getTaxAgentId(), StringUtils.EMPTY); map.put("taxAgentName", taxAgentName); map.put("taxAgentId", e.getTaxAgentId()); return map; }).collect(Collectors.toList()); } private LinkedHashMap> getSumResultByGroup(Map>> groupBy, List salarySobItemPOS, List numberItems, Long ffgsztItemId) { LinkedHashMap> result = new LinkedHashMap<>(); // 本次薪资核算所用的薪资账套下的薪资项目 Map salaryItemIdKeySalarySobItemPOMap = SalaryEntityUtil.convert2Map(salarySobItemPOS, SalarySobItemPO::getSalaryItemId); for(Map.Entry>> entrySet : groupBy.entrySet()){ // 每个分类中的核算数据 List> value = entrySet.getValue(); Map itemSum = new HashMap<>(); numberItems.forEach(item -> { List itemValue = value.stream().filter(v -> v.get(item.getId().toString()) != null).map(v -> (String)v.get(item.getId().toString())).collect(Collectors.toList()); BigDecimal sum = itemValue .stream() .filter(NumberUtils::isCreatable) .map(BigDecimal::new) .reduce(BigDecimal.ZERO, BigDecimal::add); itemSum.put( item.getId().toString(), SalaryAcctFormulaBO.roundResultValue(sum.toString(), item, Collections.emptyList(), Collections.emptyMap(), salaryItemIdKeySalarySobItemPOMap) ); }); itemSum.put("empNums", entrySet.getValue().size()); itemSum.put("userName", CollectionUtils.isEmpty(value) ? "" : value.get(0).get("userName")); itemSum.put("employeeId", CollectionUtils.isEmpty(value) ? "" : value.get(0).get("employeeId")); itemSum.put("subcompanyId", CollectionUtils.isEmpty(value) ? "" : value.get(0).get("subcompanyId") == null ? "0" : value.get(0).get("subcompanyId")); if (ffgsztItemId != null) { Map map = value.get(0); String rylb = map.get(ffgsztItemId.toString()) == null ? "" : map.get(ffgsztItemId.toString()).toString(); itemSum.put(ffgsztItemId.toString(), rylb); } result.put(entrySet.getKey(), itemSum); } return result; } private Long getPropLongValue (BaseBean baseBean, String propFileName, String key ){ return NumberUtils.isCreatable(baseBean.getPropValue(propFileName, key)) ? Long.valueOf(baseBean.getPropValue(propFileName, key)) : 0L; } @Override public Map listSalaryReport(LySalaryReportQueryParam param) { if (StringUtils.isBlank(param.getSalaryMonth())) { throw new SalaryRunTimeException("薪资所属月参数不能为空"); } Date salaryMonthDate = SalaryDateUtil.dateStrToLocalYearMonth(param.getSalaryMonth()); if (salaryMonthDate == null) { throw new SalaryRunTimeException("薪资所属月参数格式错误"); } param.setSalaryMonthDate(salaryMonthDate); // 获取本月是否已有报表数据 List lySalaryReportPOS = listBySalaryMonth(salaryMonthDate); // 分权 // 是否是薪酬总管理员 boolean isChief = getTaxAgentService(user).isChief((long) user.getUID()); if (!isChief) { List canManageFrztByUid = getCanManageFrztByUid(user); // 获取当前用户能够查看哪些分部的数据 List canManageSubCompanyIds = getCanManageSubCompanyIdsByUid(Long.valueOf(user.getUID())); lySalaryReportPOS = lySalaryReportPOS.stream() .filter(po -> canManageFrztByUid.contains(po.getFfgsqc()) || canManageSubCompanyIds.contains(po.getSubcompanyId())) .collect(Collectors.toList()); } if (CollectionUtils.isNotEmpty(param.getFfgsqc())) { lySalaryReportPOS = lySalaryReportPOS.stream().filter(lySalaryReportPO -> param.getFfgsqc().contains(lySalaryReportPO.getFfgsqc())).collect(Collectors.toList()); } // 费用承担公司 if (CollectionUtils.isNotEmpty(param.getFycdgsqc())) { lySalaryReportPOS = lySalaryReportPOS.stream().filter(lySalaryReportPO -> param.getFycdgsqc().contains(lySalaryReportPO.getFycdgsqc())).collect(Collectors.toList()); } // 根据状态过滤 if (CollectionUtils.isNotEmpty(param.getJtStatus())) { lySalaryReportPOS = lySalaryReportPOS.stream().filter(lySalaryReportPO -> param.getJtStatus().contains(lySalaryReportPO.getXzjtpzFlag())).collect(Collectors.toList()); } if (CollectionUtils.isNotEmpty(param.getFfStatus())) { lySalaryReportPOS = lySalaryReportPOS.stream().filter(lySalaryReportPO -> param.getFfStatus().contains(lySalaryReportPO.getXzffpzFlag())).collect(Collectors.toList()); } PageInfo pageInfo = SalaryPageUtil.buildPage(param.getCurrent(), param.getPageSize()); if (param.isExport()) { // 是导出 pageInfo.setList(lySalaryReportPOS); } else { pageInfo.setTotal(lySalaryReportPOS.size()); pageInfo.setList(SalaryPageUtil.subList(param.getCurrent(), param.getPageSize(), lySalaryReportPOS)); } pageInfo.getList().stream().forEach(po -> { po.setXzjtpzFlagStr(LyPushStatusEnum.getDefaultLabelByValue(po.getXzjtpzFlag())); po.setXzffpzFlagStr(LyPushStatusEnum.getDefaultLabelByValue(po.getXzffpzFlag())); }); List columns = new ArrayList<>(); columns.add(new WeaTableColumnGroup("150px", "发放公司全称", "ffgsqc")); columns.add(new WeaTableColumnGroup("150px", "费用承担公司全称", "fycdgsqc")); columns.add(new WeaTableColumnGroup("150px", "职能/项目名称", "znxmmc")); columns.add(new WeaTableColumnGroup("150px", "发放人数", "empNum")); columns.add(new WeaTableColumnGroup("150px", "计提状态", "xzjtpzFlagStr")); columns.add(new WeaTableColumnGroup("150px", "发放状态", "xzffpzFlagStr")); WeaTableColumnGroup byyfGroup = new WeaTableColumnGroup("150px", "本月应发", "本月应发"); List byyfChildList = new ArrayList<>(); byyfChildList.add(new WeaTableColumnGroup("150px", "应发合计", "byyfYfhj")); byyfChildList.add(new WeaTableColumnGroup("150px", "月度绩效", "byyfYdjx")); byyfChildList.add(new WeaTableColumnGroup("150px", "季度/年度绩效", "byyfJdndjx")); byyfChildList.add(new WeaTableColumnGroup("150px", "激励提成", "byyfJltcjy")); byyfChildList.add(new WeaTableColumnGroup("150px", "工资(含月度绩效)、福利等", "byyfGzfld")); byyfGroup.setChildren(byyfChildList); columns.add(byyfGroup); WeaTableColumnGroup dsdjGroup = new WeaTableColumnGroup("150px", "代收代缴", "代收代缴"); List dsdjChildList = new ArrayList<>(); dsdjChildList.add(new WeaTableColumnGroup("150px", "个人社保", "dsdjGrsb")); dsdjChildList.add(new WeaTableColumnGroup("150px", "个人公积金", "dsdjGrgjj")); dsdjChildList.add(new WeaTableColumnGroup("150px", "社保/公积金补发补扣", "byyfJltcsc")); dsdjChildList.add(new WeaTableColumnGroup("150px", "个人所得税", "dsdjGrsds")); dsdjGroup.setChildren(dsdjChildList); columns.add(dsdjGroup); WeaTableColumnGroup shkcxGroup = new WeaTableColumnGroup("150px", "税后扣除项", "税后扣除项"); List shkcxChildList = new ArrayList<>(); shkcxChildList.add(new WeaTableColumnGroup("150px", "工装", "shkcxGz")); shkcxChildList.add(new WeaTableColumnGroup("150px", "水电费", "shkcxSdf")); shkcxChildList.add(new WeaTableColumnGroup("150px", "爱心互助金", "shkcxAxhzj")); shkcxChildList.add(new WeaTableColumnGroup("150px", "停车费", "shkcxTcf")); shkcxChildList.add(new WeaTableColumnGroup("150px", "个税调整", "shkcxGstz")); shkcxChildList.add(new WeaTableColumnGroup("150px", "生育津贴", "shkcxSyjt")); shkcxChildList.add(new WeaTableColumnGroup("150px", "培训费", "shkcxPxf")); shkcxChildList.add(new WeaTableColumnGroup("150px", "其他", "shkcxQt")); shkcxGroup.setChildren(shkcxChildList); columns.add(shkcxGroup); columns.add(new WeaTableColumnGroup("150px", "本月实发", "bysf")); Map resultMap = new HashMap<>(); resultMap.put("data", pageInfo); resultMap.put("columns", columns); // 导出包含合计行 if(param.isExport()) { LySalaryReportPO sumData = buildSumData(pageInfo.getList()); resultMap.put("sum", sumData); } return resultMap; } public List getCanManageSubCompanyIdsByUid(Long uid) { List resultList = new ArrayList<>(); if (uid == null) { return resultList; } RecordSet rs = new RecordSet(); String sql = "select subcomid,ncbbckqxry from hrmsubcompanydefined where ncbbckqxry is not null and ncbbckqxry != ''"; rs.executeQuery(sql); while (rs.next()) { String ncbbckqxryStr = rs.getString("ncbbckqxry"); List empIds = Arrays.stream(ncbbckqxryStr.split(",")) .filter(NumberUtils::isCreatable) .map(Long::valueOf) .collect(Collectors.toList()); if (empIds.contains(uid)) { resultList.add(Long.valueOf(rs.getInt("subcomid"))); } } return resultList; } @Override public Map salaryReportFfgsList(LySalaryReportQueryParam param) { if (StringUtils.isBlank(param.getSalaryMonth())) { throw new SalaryRunTimeException("薪资所属月参数不能为空"); } Date salaryMonthDate = SalaryDateUtil.dateStrToLocalYearMonth(param.getSalaryMonth()); if (salaryMonthDate == null) { throw new SalaryRunTimeException("薪资所属月参数格式错误"); } param.setSalaryMonthDate(salaryMonthDate); // 获取本月是否已有报表数据 List lySalaryReportPOS = listBySalaryMonth(salaryMonthDate); // 分权 // 是否是薪酬总管理员 boolean isChief = getTaxAgentService(user).isChief((long) user.getUID()); if (!isChief) { List canManageFrztByUid = getCanManageFrztByUid(user); // 获取当前用户能够查看哪些分部的数据 List canManageSubCompanyIds = getLySalaryReportService(user).getCanManageSubCompanyIdsByUid(Long.valueOf(user.getUID())); lySalaryReportPOS = lySalaryReportPOS.stream() .filter(po -> canManageFrztByUid.contains(po.getFfgsqc()) || canManageSubCompanyIds.contains(po.getSubcompanyId())) .collect(Collectors.toList()); } // 获取所有能够管理的发放公司 List> ffgsList = lySalaryReportPOS.stream() .map(LySalaryReportPO::getFfgsqc) .distinct() .filter(ffgsqc -> StringUtils.isNotBlank(ffgsqc)) .map(ffgsqc -> { Map map = new HashMap<>(2); map.put("id", ffgsqc); map.put("content", ffgsqc); return map; }).collect(Collectors.toList()); // 获取对应的费用承担公司 List> fycdgsList = lySalaryReportPOS.stream() .map(LySalaryReportPO::getFycdgsqc) .distinct() .filter(fycdgs -> StringUtils.isNotBlank(fycdgs)) .map(fycdgs -> { Map map = new HashMap<>(2); map.put("id", fycdgs); map.put("content", fycdgs); return map; }).collect(Collectors.toList()); Map resultMap = new HashMap<>(); resultMap.put("ffgs", ffgsList); resultMap.put("fycdgs", fycdgsList); return resultMap; } @Override public void deleteSalaryReport(List salaryReportIds) { if (CollectionUtils.isEmpty(salaryReportIds)) { return; } List lySalaryReportPOS = getLySalaryReportMapper().listSome(LySalaryReportPO.builder().ids(salaryReportIds).build()); List canNotDeleteList = lySalaryReportPOS.stream().filter(report -> report.getXzjtpzFlag().equals(NumberUtils.INTEGER_ONE) || report.getXzffpzFlag().equals(NumberUtils.INTEGER_ONE)).collect(Collectors.toList()); if (CollectionUtils.isNotEmpty(canNotDeleteList)) { throw new SalaryRunTimeException("当前所选记录中,已生成凭证数据,请联系系统管理员删除相关数据"); } deleteByIds(salaryReportIds); } @Override public void deleteAllSalaryReport(LySalaryReportQueryParam queryParam) { Date salaryMonth = SalaryDateUtil.dateStrToLocalYearMonth(queryParam.getSalaryMonth()); List lySalaryReportPOS = listBySalaryMonth(salaryMonth); if (CollectionUtils.isNotEmpty(lySalaryReportPOS)) { List idList = lySalaryReportPOS.stream().map(LySalaryReportPO::getId).collect(Collectors.toList()); deleteSalaryReport(idList); } } @Override public LySalaryReportPO sumRow(LySalaryReportQueryParam param) { if (StringUtils.isBlank(param.getSalaryMonth())) { throw new SalaryRunTimeException("薪资所属月参数不能为空"); } Date salaryMonthDate = SalaryDateUtil.dateStrToLocalYearMonth(param.getSalaryMonth()); if (salaryMonthDate == null) { throw new SalaryRunTimeException("薪资所属月参数格式错误"); } param.setSalaryMonthDate(salaryMonthDate); // 获取本月是否已有报表数据 List lySalaryReportPOS = listBySalaryMonth(salaryMonthDate); if (CollectionUtils.isNotEmpty(param.getFfgsqc())) { lySalaryReportPOS = lySalaryReportPOS.stream().filter(lySalaryReportPO -> param.getFfgsqc().contains(lySalaryReportPO.getFfgsqc())).collect(Collectors.toList()); } // 分权 // 是否是薪酬总管理员 boolean isChief = getTaxAgentService(user).isChief((long) user.getUID()); if (!isChief) { List canManageFrztByUid = getCanManageFrztByUid(user); // 获取当前用户能够查看哪些分部的数据 List canManageSubCompanyIds = getCanManageSubCompanyIdsByUid(Long.valueOf(user.getUID())); lySalaryReportPOS = lySalaryReportPOS.stream() .filter(po -> canManageFrztByUid.contains(po.getFfgsqc()) || canManageSubCompanyIds.contains(po.getSubcompanyId())) .collect(Collectors.toList()); } // 费用承担公司 if (CollectionUtils.isNotEmpty(param.getFycdgsqc())) { lySalaryReportPOS = lySalaryReportPOS.stream().filter(lySalaryReportPO -> param.getFycdgsqc().contains(lySalaryReportPO.getFycdgsqc())).collect(Collectors.toList()); } // 根据状态过滤 if (CollectionUtils.isNotEmpty(param.getJtStatus())) { lySalaryReportPOS = lySalaryReportPOS.stream().filter(lySalaryReportPO -> param.getJtStatus().contains(lySalaryReportPO.getXzjtpzFlag())).collect(Collectors.toList()); } if (CollectionUtils.isNotEmpty(param.getFfStatus())) { lySalaryReportPOS = lySalaryReportPOS.stream().filter(lySalaryReportPO -> param.getFfStatus().contains(lySalaryReportPO.getXzffpzFlag())).collect(Collectors.toList()); } return buildSumData(lySalaryReportPOS); } private LySalaryReportPO buildSumData (List lySalaryReportPOS ) { Map map = new HashMap<>(); lySalaryReportPOS.stream().forEach(reportPO -> { BigDecimal empNum = reportPO.getEmpNum() == null ? BigDecimal.ZERO : new BigDecimal(reportPO.getEmpNum()) ; map.put("empNum" ,map.getOrDefault("empNum", BigDecimal.valueOf(0)).add(empNum)); BigDecimal byyfYfhj = NumberUtils.isCreatable(reportPO.getByyfYfhj()) ? new BigDecimal(reportPO.getByyfYfhj()) : BigDecimal.ZERO; map.put("byyfYfhj" ,map.getOrDefault("byyfYfhj", BigDecimal.valueOf(0)).add(byyfYfhj)); BigDecimal byyfYdjx = NumberUtils.isCreatable(reportPO.getByyfYdjx()) ? new BigDecimal(reportPO.getByyfYdjx()) : BigDecimal.ZERO; map.put("byyfYdjx" ,map.getOrDefault("byyfYdjx", BigDecimal.valueOf(0)).add(byyfYdjx)); BigDecimal byyfJdndjx = NumberUtils.isCreatable(reportPO.getByyfJdndjx()) ? new BigDecimal(reportPO.getByyfJdndjx()) : BigDecimal.ZERO; map.put("byyfJdndjx" ,map.getOrDefault("byyfJdndjx", BigDecimal.valueOf(0)).add(byyfJdndjx)); BigDecimal byyfJltcjy = NumberUtils.isCreatable(reportPO.getByyfJltcjy()) ? new BigDecimal(reportPO.getByyfJltcjy()) : BigDecimal.ZERO; map.put("byyfJltcjy" ,map.getOrDefault("byyfJltcjy", BigDecimal.valueOf(0)).add(byyfJltcjy)); BigDecimal byyfJltcsc = NumberUtils.isCreatable(reportPO.getByyfJltcsc()) ? new BigDecimal(reportPO.getByyfJltcsc()) : BigDecimal.ZERO; map.put("byyfJltcsc" ,map.getOrDefault("byyfJltcsc", BigDecimal.valueOf(0)).add(byyfJltcsc)); BigDecimal byyfGzfld = NumberUtils.isCreatable(reportPO.getByyfGzfld()) ? new BigDecimal(reportPO.getByyfGzfld()) : BigDecimal.ZERO; map.put("byyfGzfld" ,map.getOrDefault("byyfGzfld", BigDecimal.valueOf(0)).add(byyfGzfld)); BigDecimal dsdjGrsb = NumberUtils.isCreatable(reportPO.getDsdjGrsb()) ? new BigDecimal(reportPO.getDsdjGrsb()) : BigDecimal.ZERO; map.put("dsdjGrsb" ,map.getOrDefault("dsdjGrsb", BigDecimal.valueOf(0)).add(dsdjGrsb)); BigDecimal dsdjGrgjj = NumberUtils.isCreatable(reportPO.getDsdjGrgjj()) ? new BigDecimal(reportPO.getDsdjGrgjj()) : BigDecimal.ZERO; map.put("dsdjGrgjj" ,map.getOrDefault("dsdjGrgjj", BigDecimal.valueOf(0)).add(dsdjGrgjj)); BigDecimal dsdjGrsds = NumberUtils.isCreatable(reportPO.getDsdjGrsds()) ? new BigDecimal(reportPO.getDsdjGrsds()) : BigDecimal.ZERO; map.put("dsdjGrsds" ,map.getOrDefault("dsdjGrsds", BigDecimal.valueOf(0)).add(dsdjGrsds)); BigDecimal shkcxGz = NumberUtils.isCreatable(reportPO.getShkcxGz()) ? new BigDecimal(reportPO.getShkcxGz()) : BigDecimal.ZERO; map.put("shkcxGz" ,map.getOrDefault("shkcxGz", BigDecimal.valueOf(0)).add(shkcxGz)); BigDecimal shkcxSdf = NumberUtils.isCreatable(reportPO.getShkcxSdf()) ? new BigDecimal(reportPO.getShkcxSdf()) : BigDecimal.ZERO; map.put("shkcxSdf" ,map.getOrDefault("shkcxSdf", BigDecimal.valueOf(0)).add(shkcxSdf)); BigDecimal shkcxAxhzj = NumberUtils.isCreatable(reportPO.getShkcxAxhzj()) ? new BigDecimal(reportPO.getShkcxAxhzj()) : BigDecimal.ZERO; map.put("shkcxAxhzj" ,map.getOrDefault("shkcxAxhzj", BigDecimal.valueOf(0)).add(shkcxAxhzj)); BigDecimal shkcxTcf = NumberUtils.isCreatable(reportPO.getShkcxTcf()) ? new BigDecimal(reportPO.getShkcxTcf()) : BigDecimal.ZERO; map.put("shkcxTcf" ,map.getOrDefault("shkcxTcf", BigDecimal.valueOf(0)).add(shkcxTcf)); BigDecimal shkcxGstz = NumberUtils.isCreatable(reportPO.getShkcxGstz()) ? new BigDecimal(reportPO.getShkcxGstz()) : BigDecimal.ZERO; map.put("shkcxGstz" ,map.getOrDefault("shkcxGstz", BigDecimal.valueOf(0)).add(shkcxGstz)); BigDecimal shkcxSyjt = NumberUtils.isCreatable(reportPO.getShkcxSyjt()) ? new BigDecimal(reportPO.getShkcxSyjt()) : BigDecimal.ZERO; map.put("shkcxSyjt" ,map.getOrDefault("shkcxSyjt", BigDecimal.valueOf(0)).add(shkcxSyjt)); BigDecimal shkcxPxf = NumberUtils.isCreatable(reportPO.getShkcxPxf()) ? new BigDecimal(reportPO.getShkcxPxf()) : BigDecimal.ZERO; map.put("shkcxPxf" ,map.getOrDefault("shkcxPxf", BigDecimal.valueOf(0)).add(shkcxPxf)); BigDecimal shkcxQt = NumberUtils.isCreatable(reportPO.getShkcxQt()) ? new BigDecimal(reportPO.getShkcxQt()) : BigDecimal.ZERO; map.put("shkcxQt" ,map.getOrDefault("shkcxQt", BigDecimal.valueOf(0)).add(shkcxQt)); BigDecimal bysf = NumberUtils.isCreatable(reportPO.getBysf()) ? new BigDecimal(reportPO.getBysf()) : BigDecimal.ZERO; map.put("bysf" ,map.getOrDefault("bysf", BigDecimal.valueOf(0)).add(bysf)); }); return LySalaryReportPO.builder() .empNum(map.getOrDefault("empNum", BigDecimal.ZERO).intValue()) .byyfYfhj(map.getOrDefault("byyfYfhj", BigDecimal.ZERO).toString()) .byyfYdjx(map.getOrDefault("byyfYdjx", BigDecimal.ZERO).toString()) .byyfJdndjx(map.getOrDefault("byyfJdndjx", BigDecimal.ZERO).toString()) .byyfJltcjy(map.getOrDefault("byyfJltcjy", BigDecimal.ZERO).toString()) .byyfJltcsc(map.getOrDefault("byyfJltcsc", BigDecimal.ZERO).toString()) .byyfGzfld(map.getOrDefault("byyfGzfld", BigDecimal.ZERO).toString()) .dsdjGrsb(map.getOrDefault("dsdjGrsb", BigDecimal.ZERO).toString()) .dsdjGrgjj(map.getOrDefault("dsdjGrgjj", BigDecimal.ZERO).toString()) .dsdjGrsds(map.getOrDefault("dsdjGrsds", BigDecimal.ZERO).toString()) .shkcxGz(map.getOrDefault("shkcxGz", BigDecimal.ZERO).toString()) .shkcxSdf(map.getOrDefault("shkcxSdf", BigDecimal.ZERO).toString()) .shkcxAxhzj(map.getOrDefault("shkcxAxhzj", BigDecimal.ZERO).toString()) .shkcxTcf(map.getOrDefault("shkcxTcf", BigDecimal.ZERO).toString()) .shkcxGstz(map.getOrDefault("shkcxGstz", BigDecimal.ZERO).toString()) .shkcxSyjt(map.getOrDefault("shkcxSyjt", BigDecimal.ZERO).toString()) .shkcxPxf(map.getOrDefault("shkcxPxf", BigDecimal.ZERO).toString()) .shkcxQt(map.getOrDefault("shkcxQt", BigDecimal.ZERO).toString()) .bysf(map.getOrDefault("bysf", BigDecimal.ZERO).toString()) .build(); } private void deleteByIds(List salaryReportIds) { if (CollectionUtils.isEmpty(salaryReportIds)) { return; } getLySalaryReportMapper().deleteByIds(salaryReportIds); } @Override public XSSFWorkbook exportSalaryReport(LySalaryReportQueryParam param) { param.setExport(true); Map resultMap = listSalaryReport(param); List dataList = ((PageInfo)resultMap.get("data")).getList(); List columns = (List)resultMap.get("columns"); LySalaryReportPO sum = (LySalaryReportPO)resultMap.get("sum"); sum.setFfgsqc("合计"); dataList.add(sum); List headerList = new ArrayList<>(columns); List> rows = new ArrayList<>(); rows.add(headerList); for (LySalaryReportPO lySalaryReportPO : dataList) { List row = Lists.newArrayList(); row.add(lySalaryReportPO.getFfgsqc() == null ? "" : lySalaryReportPO.getFfgsqc().toString()); row.add(lySalaryReportPO.getFycdgsqc() == null ? "" : lySalaryReportPO.getFycdgsqc().toString()); row.add(lySalaryReportPO.getZnxmmc() == null ? "" : lySalaryReportPO.getZnxmmc().toString()); row.add(lySalaryReportPO.getEmpNum() == null ? "" : lySalaryReportPO.getEmpNum().toString()); row.add(lySalaryReportPO.getXzjtpzFlagStr() == null ? "" : lySalaryReportPO.getXzjtpzFlagStr().toString()); row.add(lySalaryReportPO.getXzffpzFlagStr() == null ? "" : lySalaryReportPO.getXzffpzFlagStr().toString()); row.add(lySalaryReportPO.getByyfYfhj() == null ? "" : lySalaryReportPO.getByyfYfhj()); row.add(lySalaryReportPO.getByyfYdjx() == null ? "" : lySalaryReportPO.getByyfYdjx()); row.add(lySalaryReportPO.getByyfJdndjx() == null ? "" : lySalaryReportPO.getByyfJdndjx()); row.add(lySalaryReportPO.getByyfJltcjy() == null ? "" : lySalaryReportPO.getByyfJltcjy()); row.add(lySalaryReportPO.getByyfGzfld() == null ? "" : lySalaryReportPO.getByyfGzfld()); row.add(lySalaryReportPO.getDsdjGrsb() == null ? "" : lySalaryReportPO.getDsdjGrsb()); row.add(lySalaryReportPO.getDsdjGrgjj() == null ? "" : lySalaryReportPO.getDsdjGrgjj()); row.add(lySalaryReportPO.getByyfJltcsc() == null ? "" : lySalaryReportPO.getByyfJltcsc()); row.add(lySalaryReportPO.getDsdjGrsds() == null ? "" : lySalaryReportPO.getDsdjGrsds()); row.add(lySalaryReportPO.getShkcxGz() == null ? "" : lySalaryReportPO.getShkcxGz()); row.add(lySalaryReportPO.getShkcxSdf() == null ? "" : lySalaryReportPO.getShkcxSdf()); row.add(lySalaryReportPO.getShkcxAxhzj() == null ? "" : lySalaryReportPO.getShkcxAxhzj()); row.add(lySalaryReportPO.getShkcxTcf() == null ? "" : lySalaryReportPO.getShkcxTcf()); row.add(lySalaryReportPO.getShkcxGstz() == null ? "" : lySalaryReportPO.getShkcxGstz()); row.add(lySalaryReportPO.getShkcxSyjt() == null ? "" : lySalaryReportPO.getShkcxSyjt()); row.add(lySalaryReportPO.getShkcxPxf() == null ? "" : lySalaryReportPO.getShkcxPxf()); row.add(lySalaryReportPO.getShkcxQt() == null ? "" : lySalaryReportPO.getShkcxQt()); row.add(lySalaryReportPO.getBysf() == null ? "" : lySalaryReportPO.getBysf()); rows.add(row); } //获取excel return ExcelUtilPlus.genWorkbookWithChildTitleColumn(rows, "薪酬统计报表", true); } @Override public Boolean lyReportPermission(User user) { List canManageFrztByUid = getCanManageFrztByUid(user); if (CollectionUtils.isNotEmpty(canManageFrztByUid)) { return true; } else { return false; } } public List getCanManageFrztByUid(User user) { if (user == null) { return Collections.emptyList(); } RecordSet rs = new RecordSet(); rs.execute("select frzt,ncbbqxry from uf_frzt "); HashMap> frztInfoMap = new HashMap<>(); while (rs.next()) { String frzt = rs.getString("frzt"); String ncbbqxry = rs.getString("ncbbqxry"); if (StringUtils.isNotBlank(frzt) && StringUtils.isNotBlank(ncbbqxry)) { List ryList = Arrays.stream(ncbbqxry.split(",")).filter(NumberUtils::isCreatable).map(Long::valueOf).collect(Collectors.toList()); if (CollectionUtils.isNotEmpty(ryList)) { frztInfoMap.put(frzt, ryList); } } } // 获取当前用户能够管理哪些法人主体下的数据 Long uid = Long.valueOf(user.getUID()); List resultList = new ArrayList<>(); for(Map.Entry> entry : frztInfoMap.entrySet()) { List ryList = entry.getValue(); if (ryList.contains(uid)) { resultList.add(entry.getKey()); } } return resultList; } @Override public List getByIds(List ids) { if (CollectionUtils.isNotEmpty(ids)) { return getLySalaryReportMapper().listSome(LySalaryReportPO.builder().ids(ids).build()); } else { return Collections.emptyList(); } } }