diff --git a/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctResultBO.java b/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctResultBO.java index 981508363..3cd31b692 100644 --- a/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctResultBO.java +++ b/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctResultBO.java @@ -386,6 +386,7 @@ public class SalaryAcctResultBO { 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); diff --git a/src/com/engine/salary/entity/salaryacct/param/NbjhSalaryReportParam.java b/src/com/engine/salary/entity/salaryacct/param/NbjhSalaryReportParam.java index bb64f8b24..29d1603e2 100644 --- a/src/com/engine/salary/entity/salaryacct/param/NbjhSalaryReportParam.java +++ b/src/com/engine/salary/entity/salaryacct/param/NbjhSalaryReportParam.java @@ -38,6 +38,9 @@ public class NbjhSalaryReportParam extends BaseQueryParam { // 是否是月按实际部分工资汇总表 private boolean yasjbfgzhzReport; + // 是否是当月汇总表 + private boolean dyhzReport; + // 是否是合计 private boolean isSum; diff --git a/src/com/engine/salary/entity/salaryarchive/bo/SalaryArchiveExcelBO.java b/src/com/engine/salary/entity/salaryarchive/bo/SalaryArchiveExcelBO.java index 3332fff79..a3ab358db 100644 --- a/src/com/engine/salary/entity/salaryarchive/bo/SalaryArchiveExcelBO.java +++ b/src/com/engine/salary/entity/salaryarchive/bo/SalaryArchiveExcelBO.java @@ -848,10 +848,10 @@ public class SalaryArchiveExcelBO extends Service { } else if (importHandleParam.isSalaryItemAdjust()) { SalaryItemAdjustValidDTO salaryItemAdjustValid = SalaryArchiveItemBO.handleSalaryItemAdjustValid(effectiveSalaryItem, effectiveBeforeSalaryItem, ineffectiveSalaryItem, effectiveTime, importHandleParam.getToday(), cellVal, importHandleParam.getSalaryArchiveItemDelSalaryItemIds()); if (salaryItemAdjustValid.isBefore()) { - Map errorMessageMap = Maps.newHashMap(); - errorMessageMap.put("message", rowindex + key + salaryItemNoBeforeCurrentEffectiveTime); - excelComments.add(errorMessageMap); - isError = true; + // Map errorMessageMap = Maps.newHashMap(); + // errorMessageMap.put("message", rowindex + key + salaryItemNoBeforeCurrentEffectiveTime); + // excelComments.add(errorMessageMap); + // isError = true; } else if (salaryItemAdjustValid.isSame()) { // Map errorMessageMap = Maps.newHashMap(); // errorMessageMap.put("message", rowindex + key + salaryItemAdjustNoSame); diff --git a/src/com/engine/salary/service/SalaryAcctResultService.java b/src/com/engine/salary/service/SalaryAcctResultService.java index e76a6c8f6..897695291 100644 --- a/src/com/engine/salary/service/SalaryAcctResultService.java +++ b/src/com/engine/salary/service/SalaryAcctResultService.java @@ -251,14 +251,6 @@ public interface SalaryAcctResultService { */ Map ndjjReport(NbjhSalaryReportParam param); - /** - * 年度奖金报表合计行 - * - * @param param - * @return - */ - Map ndjjReportSum(NbjhSalaryReportParam param); - /** * 导出年度奖金报表 * @@ -269,8 +261,34 @@ public interface SalaryAcctResultService { /** * 年度奖金报批表 + * * @param param * @return */ Map ndjjBpReport(NbjhSalaryReportParam param); + + /** + * 导出年度奖金报批表 + * + * @param param + * @return + */ + XSSFWorkbook exportNdjjBpReport(NbjhSalaryReportParam param); + + /** + * 实际计提表 + * + * @param param + * @return + */ + Map sjjtReport(NbjhSalaryReportParam param); + + + /** + * 导出实际计提表 + * + * @param param + * @return + */ + XSSFWorkbook exportSjjtReport(NbjhSalaryReportParam param); } diff --git a/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java b/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java index ead57c8a6..a9cb8a1cc 100644 --- a/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java @@ -1196,8 +1196,8 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe @Override public Map xzfxReport(NbjhSalaryReportParam param) { // 查询所能管理的账套 - List taxAgentIds = getTaxAgentService(user).listAllTaxAgentsAsAdmin(Long.valueOf(user.getUID())).stream().map(TaxAgentPO::getId).collect(Collectors.toList()); - List salarySobList = getSalarySobService(user).listByTaxAgentIds(taxAgentIds); + // List taxAgentIds = getTaxAgentService(user).listAllTaxAgentsAsAdmin(Long.valueOf(user.getUID())).stream().map(TaxAgentPO::getId).collect(Collectors.toList()); + List salarySobList = getSalarySobService(user).listAll(); List salarySobIds = salarySobList.stream().map(SalarySobPO::getId).collect(Collectors.toList()); BaseBean baseBean = new BaseBean(); // List sobIds = Arrays.stream(baseBean.getPropValue("nbjhSalary", "xzfx_salary_sob_ids").split(",")).filter(NumberUtils::isCreatable).map(Long::valueOf).collect(Collectors.toList()); @@ -1285,8 +1285,8 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe @Override public Map gbmxztjReport(NbjhSalaryReportParam param) { // 查询所能管理的账套 - List taxAgentIds = getTaxAgentService(user).listAllTaxAgentsAsAdmin(Long.valueOf(user.getUID())).stream().map(TaxAgentPO::getId).collect(Collectors.toList()); - List salarySobList = getSalarySobService(user).listByTaxAgentIds(taxAgentIds); + // List taxAgentIds = getTaxAgentService(user).listAllTaxAgentsAsAdmin(Long.valueOf(user.getUID())).stream().map(TaxAgentPO::getId).collect(Collectors.toList()); + List salarySobList = getSalarySobService(user).listAll(); List salarySobIds = salarySobList.stream().map(SalarySobPO::getId).collect(Collectors.toList()); BaseBean baseBean = new BaseBean(); LocalDateRange dateRange = LocalDateRange.builder().fromDate(SalaryDateUtil.dateStrToLocalYearMonth(param.getStartDate())).endDate(SalaryDateUtil.dateStrToLocalYearMonth(param.getEndDate())).build(); @@ -1371,8 +1371,8 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe public Map yffgzftReport(NbjhSalaryReportParam param) { // 查询所能管理的账套 BaseBean baseBean = new BaseBean(); - List taxAgentIds = getTaxAgentService(user).listAllTaxAgentsAsAdmin(Long.valueOf(user.getUID())).stream().map(TaxAgentPO::getId).collect(Collectors.toList()); - List salarySobList = getSalarySobService(user).listByTaxAgentIds(taxAgentIds); + // List taxAgentIds = getTaxAgentService(user).listAllTaxAgentsAsAdmin(Long.valueOf(user.getUID())).stream().map(TaxAgentPO::getId).collect(Collectors.toList()); + List salarySobList = getSalarySobService(user).listAll(); List calculateSobIds = new ArrayList<>(); if (param.isYasjbfgzhzReport()) { // 月按实际部分工资汇总表 @@ -1388,29 +1388,29 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe List salaryAcctRecordIds = salaryAcctRecordPOS.stream().map(SalaryAcctRecordPO::getId).collect(Collectors.toList()); // 获取配置的薪资项目id // 记账科目 - Long jzkmItemId = NumberUtils.isCreatable(baseBean.getPropValue("nbjhSalary", "yffgzft_jzkm_item_id")) ? Long.valueOf(baseBean.getPropValue("nbjhSalary", "yffgzft_jzkm_item_id")) : 0L; + Long jzkmItemId = baseBeanGetNumberProp(baseBean, "nbjhSalary", "yffgzft_jzkm_item_id"); // 记账部门 - Long jzbmItemId = NumberUtils.isCreatable(baseBean.getPropValue("nbjhSalary", "yffgzft_jzbm_item_id")) ? Long.valueOf(baseBean.getPropValue("nbjhSalary", "yffgzft_jzbm_item_id")) : 0L; + Long jzbmItemId = baseBeanGetNumberProp(baseBean, "nbjhSalary", "yffgzft_jzbm_item_id"); // 本月(次)应税收入合计 - Long bycyssrhjItemId = NumberUtils.isCreatable(baseBean.getPropValue("nbjhSalary", "yffgzft_bycyssrhj_item_id")) ? Long.valueOf(baseBean.getPropValue("nbjhSalary", "yffgzft_bycyssrhj_item_id")) : 0L; + Long bycyssrhjItemId = baseBeanGetNumberProp(baseBean, "nbjhSalary", "yffgzft_bycyssrhj_item_id"); // 项目补贴 - Long xmbtItemId = NumberUtils.isCreatable(baseBean.getPropValue("nbjhSalary", "yffgzft_xmbt_item_id")) ? Long.valueOf(baseBean.getPropValue("nbjhSalary", "yffgzft_xmbt_item_id")) : 0L; + Long xmbtItemId = baseBeanGetNumberProp(baseBean, "nbjhSalary", "yffgzft_xmbt_item_id"); // 加班工资 - Long jbgzItemId = NumberUtils.isCreatable(baseBean.getPropValue("nbjhSalary", "yffgzft_jbgz_item_id")) ? Long.valueOf(baseBean.getPropValue("nbjhSalary", "yffgzft_jbgz_item_id")) : 0L; + Long jbgzItemId = baseBeanGetNumberProp(baseBean, "nbjhSalary", "yffgzft_jbgz_item_id"); // 高温补贴 - Long gwbtItemId = NumberUtils.isCreatable(baseBean.getPropValue("nbjhSalary", "yffgzft_gwbt_item_id")) ? Long.valueOf(baseBean.getPropValue("nbjhSalary", "yffgzft_gwbt_item_id")) : 0L; + Long gwbtItemId = baseBeanGetNumberProp(baseBean, "nbjhSalary", "yffgzft_gwbt_item_id"); // 通讯费 - Long txfItemId = NumberUtils.isCreatable(baseBean.getPropValue("nbjhSalary", "yffgzft_txf_item_id")) ? Long.valueOf(baseBean.getPropValue("nbjhSalary", "yffgzft_txf_item_id")) : 0L; + Long txfItemId = baseBeanGetNumberProp(baseBean, "nbjhSalary", "yffgzft_txf_item_id"); // 社保 - Long sbItemId = NumberUtils.isCreatable(baseBean.getPropValue("nbjhSalary", "yffgzft_sb_item_id")) ? Long.valueOf(baseBean.getPropValue("nbjhSalary", "yffgzft_sb_item_id")) : 0L; + Long sbItemId = baseBeanGetNumberProp(baseBean, "nbjhSalary", "yffgzft_sb_item_id"); // 公积金 - Long gjjItemId = NumberUtils.isCreatable(baseBean.getPropValue("nbjhSalary", "yffgzft_gjj_item_id")) ? Long.valueOf(baseBean.getPropValue("nbjhSalary", "yffgzft_gjj_item_id")) : 0L; + Long gjjItemId = baseBeanGetNumberProp(baseBean, "nbjhSalary", "yffgzft_gjj_item_id"); // 公积金调差项 - Long gjjtcxItemId = NumberUtils.isCreatable(baseBean.getPropValue("nbjhSalary", "yffgzft_gjjtcx_item_id")) ? Long.valueOf(baseBean.getPropValue("nbjhSalary", "yffgzft_gjjtcx_item_id")) : 0L; + Long gjjtcxItemId = baseBeanGetNumberProp(baseBean, "nbjhSalary", "yffgzft_gjjtcx_item_id"); // 个税导入 - Long gsdrItemId = NumberUtils.isCreatable(baseBean.getPropValue("nbjhSalary", "yffgzft_gsdr_item_id")) ? Long.valueOf(baseBean.getPropValue("nbjhSalary", "yffgzft_gsdr_item_id")) : 0L; + Long gsdrItemId = baseBeanGetNumberProp(baseBean, "nbjhSalary", "yffgzft_gsdr_item_id"); // 本月(次)实发薪资合计 - Long bycsfxzhjItemId = NumberUtils.isCreatable(baseBean.getPropValue("nbjhSalary", "yffgzft_bycsfxzhj_item_id")) ? Long.valueOf(baseBean.getPropValue("nbjhSalary", "yffgzft_bycsfxzhj_item_id")) : 0L; + Long bycsfxzhjItemId = baseBeanGetNumberProp(baseBean, "nbjhSalary", "yffgzft_bycsfxzhj_item_id"); List salaryItemIds = new ArrayList<>(); salaryItemIds.add(jzkmItemId); salaryItemIds.add(jzbmItemId); @@ -1605,6 +1605,7 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe 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")); result.put(entrySet.getKey(), itemSum); } return result; @@ -1662,211 +1663,288 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe */ @Override public Map ndjjReport(NbjhSalaryReportParam param) { - // // 查询所能管理的账套 - // BaseBean baseBean = new BaseBean(); + // 查询所能管理的账套 + BaseBean baseBean = new BaseBean(); // List taxAgentIds = getTaxAgentService(user).listAllTaxAgentsAsAdmin(Long.valueOf(user.getUID())).stream().map(TaxAgentPO::getId).collect(Collectors.toList()); // List salarySobList = getSalarySobService(user).listByTaxAgentIds(taxAgentIds); // List calculateSobIds = new ArrayList<>(); // calculateSobIds.addAll(Arrays.stream(baseBean.getPropValue("nbjhSalary", "ndjj_salary_sob_id").split(",")).filter(NumberUtils::isCreatable).map(Long::valueOf).collect(Collectors.toList())); - // - // List salarySobIds = salarySobList.stream().filter(sob -> calculateSobIds.contains(sob.getId())).map(SalarySobPO::getId).collect(Collectors.toList()); - // LocalDateRange dateRange = LocalDateRange.builder().fromDate(SalaryDateUtil.dateStrToLocalYearMonth(param.getYear() + "-01")).endDate(SalaryDateUtil.dateStrToLocalYearMonth(param.getStartDate() + "-12")).build(); - // List salaryAcctRecordPOS = getSalaryAcctRecordService(user).listBySalarySobIdsAndSalaryMonth(salarySobIds, dateRange); - // // 本年度所有核算记录id - // List salaryAcctRecordIds = salaryAcctRecordPOS.stream().map(SalaryAcctRecordPO::getId).collect(Collectors.toList()); - // // 获取本年度最后一个发薪月的核算记录id - // Optional lastMonthOptional = salaryAcctRecordPOS.stream().sorted(Comparator.comparing(SalaryAcctRecordPO::getSalaryMonth)).findFirst().map(SalaryAcctRecordPO::getSalaryMonth); - // if (lastMonthOptional.isPresent()) { - // // 获取最后一个月的薪资核算记录 - // LocalDateRange lastMonthDateRange = LocalDateRange.builder().fromDate(lastMonthOptional.get()).endDate(lastMonthOptional.get()).build(); - // List lastMonthSalaryAcctRecordPOS = getSalaryAcctRecordService(user).listBySalarySobIdsAndSalaryMonth(salarySobIds, lastMonthDateRange); - // List lastMonthSalaryAcctRecordIds = SalaryEntityUtil.properties(lastMonthSalaryAcctRecordPOS, SalaryAcctRecordPO::getId, Collectors.toList()); - // List lastMonthsalaryAcctEmployeeList = getSalaryAcctEmployeeService(user).listBySalaryAcctRecordIds(lastMonthSalaryAcctRecordIds); - // - // - // // 查询薪资核算结果 - // List resultList = listByAcctEmployeeIdsAndSalaryItemIds(salaryAcctEmpIds, salaryItemIds); - // - // List salarySobEmpFields = new ArrayList<>(); - // salarySobEmpFields.add(SalarySobEmpFieldPO.builder().fieldCode("jobtitleName").build()); - // List> resultMap = buildData4NbjhReport(salaryItemIds, salaryAcctEmployeeList, salarySobEmpFields, resultList, false); - // } - // - // // 获取配置的薪资项目id - // // 职务层级 - // Long zwcjItemId = NumberUtils.isCreatable(baseBean.getPropValue("nbjhSalary", "ndjj_zwcj_item_id")) ? Long.valueOf(baseBean.getPropValue("nbjhSalary", "ndjj_zwcj_item_id")) : 0L; - // // 基本工资 - // Long jbgzItemId = NumberUtils.isCreatable(baseBean.getPropValue("nbjhSalary", "ndjj_jb_item_id")) ? Long.valueOf(baseBean.getPropValue("nbjhSalary", "ndjj_jb_item_id")) : 0L; - // // 岗位工资 - // Long gwgzItemId = NumberUtils.isCreatable(baseBean.getPropValue("nbjhSalary", "ndjj_gw_item_id")) ? Long.valueOf(baseBean.getPropValue("nbjhSalary", "ndjj_gw_item_id")) : 0L; - // // 绩效工资 - // Long jxgzItemId = NumberUtils.isCreatable(baseBean.getPropValue("nbjhSalary", "ndjj_jx_item_id")) ? Long.valueOf(baseBean.getPropValue("nbjhSalary", "ndjj_jx_item_id")) : 0L; - // // 周六加班 - // Long zljbItemId = NumberUtils.isCreatable(baseBean.getPropValue("nbjhSalary", "ndjj_zljb_item_id")) ? Long.valueOf(baseBean.getPropValue("nbjhSalary", "ndjj_zljb_item_id")) : 0L; - // // 应发工资 - // Long yfgzItemId = NumberUtils.isCreatable(baseBean.getPropValue("nbjhSalary", "ndjj_yfgz_item_id")) ? Long.valueOf(baseBean.getPropValue("nbjhSalary", "ndjj_yfgz_item_id")) : 0L; - // List salaryItemIds = new ArrayList<>(); - // salaryItemIds.add(zwcjItemId); - // salaryItemIds.add(jbgzItemId); - // salaryItemIds.add(gwgzItemId); - // salaryItemIds.add(jxgzItemId); - // salaryItemIds.add(zljbItemId); - // salaryItemIds.add(yfgzItemId); - // List salaryItemList = getSalaryItemService(user).listByIds(salaryItemIds); - // - // // 查询发薪人员 - // List salaryAcctEmployeeList = getSalaryAcctEmployeeService(user).listBySalaryAcctRecordIds(salaryAcctRecordIds); - // // // 需要过滤某个部门的人 - // // List excludeDepIds = Arrays.stream(baseBean.getPropValue("nbjhSalary", "xzfx_exclude_dep_Ids").split(",")).filter(NumberUtils::isCreatable).map(Long::valueOf).collect(Collectors.toList()); - // // salaryAcctEmployeeList = salaryAcctEmployeeList.stream().filter(acctEmp -> !excludeDepIds.contains(acctEmp.getDepartmentId())).collect(Collectors.toList()); - // List salaryAcctEmpIds = SalaryEntityUtil.properties(salaryAcctEmployeeList, SalaryAcctEmployeePO::getId, Collectors.toList()); - // - // // 获取这些人的职务层级 - // List resultPOList = listByAcctEmployeeIdsAndSalaryItemIds(salaryAcctEmpIds, Collections.singletonList(zwcjItemId)); - // salaryAcctEmpIds = resultPOList.stream().filter(result -> result.getResultValue().equals(param.getZwcj())).map(SalaryAcctResultPO::getSalaryAcctEmpId).distinct().collect(Collectors.toList()); - // - // // 查询薪资核算结果 - // List resultList = listByAcctEmployeeIdsAndSalaryItemIds(salaryAcctEmpIds, salaryItemIds); - // - // List salarySobEmpFields = new ArrayList<>(); - // salarySobEmpFields.add(SalarySobEmpFieldPO.builder().fieldCode("jobtitleName").build()); - // List> resultMap = buildData4NbjhReport(salaryItemIds, salaryAcctEmployeeList, salarySobEmpFields, resultList, false); - // - // // 根据员工id 岗位分类汇总 - // Map>> resultGroup = SalaryEntityUtil.group2Map(resultMap, map -> - // (Objects.isNull(map.getOrDefault("employeeId", " ")) ? "" : map.getOrDefault("employeeId", " ").toString()) + "-" + - // (Objects.isNull(map.getOrDefault("jobtitleName", " ")) ? "" : map.getOrDefault("jobtitleName", " ").toString()) - // ); - // - // List numberItems = salaryItemList.stream().filter(item -> item.getDataType().equals(SalaryDataTypeEnum.NUMBER.getValue())).collect(Collectors.toList()); - // // 分页 - // PageInfo groupPageInfo = SalaryPageUtil.buildPage(param.getCurrent(), param.getPageSize(), resultGroup.keySet().stream().collect(Collectors.toList())); - // if (param.isSum() || param.isExport()) { - // // 合计、导出不分页 - // groupPageInfo.setList(resultGroup.keySet().stream().collect(Collectors.toList())); - // } - // Map>> resultGroupPage = new HashMap<>(); - // for (Map.Entry>> entry : resultGroup.entrySet()) { - // if (groupPageInfo.getList().contains(entry.getKey())) { - // resultGroupPage.put(entry.getKey(), entry.getValue()); - // } - // } - // Map> sumResultByGroup = getSumResultByGroup(resultGroupPage, Collections.emptyList(), numberItems); - // - // // 获取这些员工上一年的薪资数据 - // LocalDateRange lastYearDateRange = LocalDateRange.builder().fromDate(SalaryDateUtil.localDateToDate(SalaryDateUtil.dateToLocalDate(dateRange.getFromDate()).minusYears(1))) - // .endDate(SalaryDateUtil.localDateToDate(SalaryDateUtil.dateToLocalDate(dateRange.getEndDate()).minusYears(1))).build(); - // List lastYearSalaryAcctRecordPOS = getSalaryAcctRecordService(user).listBySalarySobIdsAndSalaryMonth(salarySobIds, lastYearDateRange); - // List lastYearSalaryAcctEmployeeList = getSalaryAcctEmployeeService(user).listBySalaryAcctRecordIds(lastYearSalaryAcctRecordPOS.stream().map(SalaryAcctRecordPO::getId).collect(Collectors.toList())); - // - // - // // - // // sumResultByGroup.forEach((key,value) -> { - // // if (param.isYasjbfgzhzReport()) { - // // value.put("departmentName", depMap.getOrDefault(key, "")); - // // } else { - // // String[] split = key.split("-"); - // // value.put(jzkmItemId.toString(), split[0]); - // // value.put(jzbmItemId.toString(), split[1]); - // // } - // // // 应发工资 = 本月(次)应税收入合计-项目补贴-加班工资 - // // BigDecimal yssrhj = new BigDecimal(value.get(bycyssrhjItemId.toString()) == null || StringUtils.isBlank(value.get(bycyssrhjItemId.toString()).toString()) ? "0" : value.get(bycyssrhjItemId.toString()).toString()); - // // BigDecimal xmbt = new BigDecimal(value.get(xmbtItemId.toString()) == null || StringUtils.isBlank(value.get(xmbtItemId.toString()).toString()) ? "0" : value.get(xmbtItemId.toString()).toString()); - // // BigDecimal jbgz = new BigDecimal(value.get(jbgzItemId.toString()) == null || StringUtils.isBlank(value.get(jbgzItemId.toString()).toString()) ? "0" : value.get(jbgzItemId.toString()).toString()); - // // value.put("yfgz", yssrhj.subtract(xmbt).subtract(jbgz)); - // // // 应发工资小计 = 本月(次)应税收入合计-通讯费 - // // BigDecimal txf = new BigDecimal(value.get(txfItemId.toString()) == null || StringUtils.isBlank(value.get(txfItemId.toString()).toString()) ? "0" : value.get(txfItemId.toString()).toString()); - // // value.put("yfgzxj", yssrhj.subtract(xmbt).subtract(txf)); - // // // 公积金(个人)= 公积金+公积金调差项 - // // BigDecimal gjj = new BigDecimal(value.get(gjjItemId.toString()) == null || StringUtils.isBlank(value.get(gjjItemId.toString()).toString()) ? "0" : value.get(gjjItemId.toString()).toString()); - // // BigDecimal gjjtcx = new BigDecimal(value.get(gjjtcxItemId.toString()) == null || StringUtils.isBlank(value.get(gjjtcxItemId.toString()).toString()) ? "0" : value.get(gjjtcxItemId.toString()).toString()); - // // value.put("gjjgr", gjj.add(gjjtcx)); - // // }); - // - // List columns = new ArrayList<>(); - // columns.add(new WeaTableColumnGroup("150px", "姓名", "userName")); - // columns.add(new WeaTableColumnGroup("150px", "部门", "departmentName")); - // columns.add(new WeaTableColumnGroup("150px", "岗位", "jobTitle")); - // columns.add(new WeaTableColumnGroup("150px", "工资", "gz")); - // columns.add(new WeaTableColumnGroup("150px", "此岗位出勤", "cgwcq")); - // - // WeaTableColumnGroup bndColumn = new WeaTableColumnGroup("150px", "本年度", "bnd"); - // ArrayList bndChildList = new ArrayList<>(); - // bndChildList.add(new WeaTableColumnGroup("150px", "年度绩效系数", "bndndjxxs")); - // bndChildList.add(new WeaTableColumnGroup("150px", "预发奖金", "bndyfjj")); - // bndChildList.add(new WeaTableColumnGroup("150px", "奖励", "bndjl")); - // bndChildList.add(new WeaTableColumnGroup("150px", "1-12月工资总额", "bndygzze")); - // bndColumn.setChildren(bndChildList); - // columns.add(bndColumn); - // - // columns.add(new WeaTableColumnGroup("150px", "本年总收入", "bnzss")); - // - // WeaTableColumnGroup syndColumn = new WeaTableColumnGroup("150px", "上一年度", "synd"); - // ArrayList syndChildList = new ArrayList<>(); - // syndChildList.add(new WeaTableColumnGroup("150px", "奖金", "syndjj")); - // syndChildList.add(new WeaTableColumnGroup("150px", "项目奖励", "syndxmjl")); - // syndChildList.add(new WeaTableColumnGroup("150px", "1-12月工资总额", "syndygzze")); - // syndColumn.setChildren(syndChildList); - // columns.add(bndColumn); - // - // columns.add(new WeaTableColumnGroup("150px", "上一年总收入", "synzss")); - // columns.add(new WeaTableColumnGroup("150px", "年收入差异", "nsrcy")); - // columns.add(new WeaTableColumnGroup("150px", "入职时间", "rzsj")); - // columns.add(new WeaTableColumnGroup("150px", "奖金增长比例", "jjzzbl")); - // columns.add(new WeaTableColumnGroup("150px", " 备注", "bz")); - // - // - // - // // List> list = sumResultByGroup.values().stream().collect(Collectors.toList()); - // // Map sumRow = new HashMap<>(); - // // if (param.isSum() || param.isExport()) { - // // // 合计或导出需要合计行 - // // for (WeaTableColumn column : columns) { - // // if (column.getColumn().equals("departmentName") || column.getColumn().equals(jzkmItemId.toString())) { - // // if (param.isExport()) { - // // sumRow.put(column.getColumn(), "总计"); - // // } - // // } else if (column.getColumn().equals(jzbmItemId.toString())) { - // // sumRow.put(column.getColumn(), ""); - // // } else { - // // BigDecimal sumValue = list.stream().map(map -> map.get(column.getColumn()) == null ? "" : map.get(column.getColumn()).toString()) - // // .filter(NumberUtils::isCreatable) - // // .map(BigDecimal::new) - // // .reduce(new BigDecimal(0), BigDecimal::add); - // // sumRow.put(column.getColumn(), sumValue); - // // } - // // } - // // } - // // - // Map map = new HashMap<>(); - // // PageInfo> pageInfo = SalaryPageUtil.buildPage(param.getCurrent(), param.getPageSize(), list); - // // - // // - // // - // // if (param.isSum() || param.isExport()) { - // // // 合计、导出不分页 - // // pageInfo.setList(list); - // // map.put("sumRow", sumRow); - // // if (param.isSum()) { - // // // map.put("column", columns); - // // return map; - // // } - // // } - // // pageInfo.setTotal(groupPageInfo.getTotal()); - // map.put("column", columns); - // // map.put("data", pageInfo); - return null; + List salarySobIds = Arrays.stream(baseBean.getPropValue("nbjhSalary", "ndjj_salary_sob_id").split(",")).filter(NumberUtils::isCreatable).map(Long::valueOf).collect(Collectors.toList()); + // 获取配置的薪资项目id + // 职务层级 + Long zwcjItemId = baseBeanGetNumberProp(baseBean, "nbjhSalary", "ndjj_zwcj_item_id"); + // 基本工资 + Long jbgzItemId = baseBeanGetNumberProp(baseBean, "nbjhSalary", "ndjj_jb_item_id"); + // 岗位工资 + Long gwgzItemId = baseBeanGetNumberProp(baseBean, "nbjhSalary", "ndjj_gw_item_id"); + // 绩效工资 + Long jxgzItemId = baseBeanGetNumberProp(baseBean, "nbjhSalary", "ndjj_jx_item_id"); + // 周六加班 + Long zljbItemId = baseBeanGetNumberProp(baseBean, "nbjhSalary", "ndjj_zljb_item_id"); + // 应发工资 + Long yfgzItemId = baseBeanGetNumberProp(baseBean, "nbjhSalary", "ndjj_yfgz_item_id"); + List salaryItemIds = new ArrayList<>(); + salaryItemIds.add(zwcjItemId); + salaryItemIds.add(jbgzItemId); + salaryItemIds.add(gwgzItemId); + salaryItemIds.add(jxgzItemId); + salaryItemIds.add(zljbItemId); + salaryItemIds.add(yfgzItemId); + List salaryItemList = getSalaryItemService(user).listByIds(salaryItemIds); + + LocalDateRange dateRange = LocalDateRange.builder().fromDate(SalaryDateUtil.dateStrToLocalYearMonth(param.getYear() + "-01")).endDate(SalaryDateUtil.dateStrToLocalYearMonth(param.getYear() + "-12")).build(); + List salaryAcctRecordPOS = getSalaryAcctRecordService(user).listBySalarySobIdsAndSalaryMonth(salarySobIds, dateRange); + // 本年度所有核算记录id + List salaryAcctRecordIds = salaryAcctRecordPOS.stream().map(SalaryAcctRecordPO::getId).collect(Collectors.toList()); + // 获取本年度最后一个发薪月的核算记录id + Optional lastMonthOptional = salaryAcctRecordPOS.stream().sorted(Comparator.comparing(SalaryAcctRecordPO::getSalaryMonth).reversed()).findFirst().map(SalaryAcctRecordPO::getSalaryMonth); + Map> sumResultByGroup = Collections.emptyMap(); + List lastMonthSalaryAcctEmployeeList = Collections.emptyList(); + if (lastMonthOptional.isPresent()) { + // 获取最后一个月的薪资核算记录 + LocalDateRange lastMonthDateRange = LocalDateRange.builder().fromDate(lastMonthOptional.get()).endDate(lastMonthOptional.get()).build(); + List lastMonthSalaryAcctRecordPOS = getSalaryAcctRecordService(user).listBySalarySobIdsAndSalaryMonth(salarySobIds, lastMonthDateRange); + List lastMonthSalaryAcctRecordIds = SalaryEntityUtil.properties(lastMonthSalaryAcctRecordPOS, SalaryAcctRecordPO::getId, Collectors.toList()); + lastMonthSalaryAcctEmployeeList = getSalaryAcctEmployeeService(user).listBySalaryAcctRecordIds(lastMonthSalaryAcctRecordIds); + + // 获取这些人的职务层级 + List resultPOList = listByAcctEmployeeIdsAndSalaryItemIds(lastMonthSalaryAcctEmployeeList.stream().map(SalaryAcctEmployeePO::getId).collect(Collectors.toList()), Collections.singletonList(zwcjItemId)); + List lastMonthSalaryAcctEmpIds = resultPOList.stream().filter(result -> result.getResultValue().equals(param.getZwcj())).map(SalaryAcctResultPO::getSalaryAcctEmpId).distinct().collect(Collectors.toList()); + List finalLastMonthSalaryAcctEmpIds = lastMonthSalaryAcctEmpIds; + lastMonthSalaryAcctEmployeeList = lastMonthSalaryAcctEmployeeList.stream().filter(acctEmp -> finalLastMonthSalaryAcctEmpIds.contains(acctEmp.getId())).collect(Collectors.toList()); + + // 分页 + PageInfo lastMonthSalaryAcctEmployeePOPageInfo = SalaryPageUtil.buildPage(param.getCurrent(), param.getPageSize(), lastMonthSalaryAcctEmployeeList); + if (param.isExport() || param.isSum()) { + lastMonthSalaryAcctEmployeePOPageInfo.setList(lastMonthSalaryAcctEmployeeList); + } + List lastMonthEmployeeIds = SalaryEntityUtil.properties(lastMonthSalaryAcctEmployeePOPageInfo.getList(), SalaryAcctEmployeePO::getEmployeeId, Collectors.toList()); + + // 获取本年度核算人员 + List thisYearSalaryAcctEmployeeList = getSalaryAcctEmployeeService(user).listBySalaryAcctRecordIdsAndEmployeeIds(salaryAcctRecordIds, lastMonthEmployeeIds); + List thisYearSalaryAcctEmployeeIdList = SalaryEntityUtil.properties(thisYearSalaryAcctEmployeeList, SalaryAcctEmployeePO::getId, Collectors.toList()); + // 获取本年度的所有核算结果 + List resultList = listByAcctEmployeeIdsAndSalaryItemIds(thisYearSalaryAcctEmployeeIdList, salaryItemIds); + + List salarySobEmpFields = new ArrayList<>(); + salarySobEmpFields.add(SalarySobEmpFieldPO.builder().fieldCode("jobtitleName").build()); + salarySobEmpFields.add(SalarySobEmpFieldPO.builder().fieldCode("departmentName").build()); + List> resultMap = buildData4NbjhReport(salaryItemIds, thisYearSalaryAcctEmployeeList, salarySobEmpFields, resultList, true); + // 根据员工id + Map>> resultGroup = SalaryEntityUtil.group2Map(resultMap, map -> + Objects.isNull(map.getOrDefault("employeeId", " ")) ? "" : map.getOrDefault("employeeId", " ").toString() + ); + List numberItems = salaryItemList.stream().filter(item -> item.getDataType().equals(SalaryDataTypeEnum.NUMBER.getValue())).collect(Collectors.toList()); + sumResultByGroup = getSumResultByGroup(resultGroup, Collections.emptyList(), numberItems); + + + // 获取这些员工上一年的薪资核算数据 + LocalDateRange lastYearDateRange = LocalDateRange.builder().fromDate(SalaryDateUtil.localDateToDate(SalaryDateUtil.dateToLocalDate(dateRange.getFromDate()).minusYears(1))) + .endDate(SalaryDateUtil.localDateToDate(SalaryDateUtil.dateToLocalDate(dateRange.getEndDate()).minusYears(1))).build(); + List lastYearSalaryAcctRecordPOS = getSalaryAcctRecordService(user).listBySalarySobIdsAndSalaryMonth(salarySobIds, lastYearDateRange); + // 上年度所有核算记录id + List lastYearSalaryAcctRecordIds = lastYearSalaryAcctRecordPOS.stream().map(SalaryAcctRecordPO::getId).collect(Collectors.toList()); + // 获上年度核算人员 + List lastYearSalaryAcctEmployeeList = getSalaryAcctEmployeeService(user).listBySalaryAcctRecordIdsAndEmployeeIds(lastYearSalaryAcctRecordIds, lastMonthEmployeeIds); + List lastYearSalaryAcctEmployeeIdList = SalaryEntityUtil.properties(lastYearSalaryAcctEmployeeList, SalaryAcctEmployeePO::getId, Collectors.toList()); + // 获取上年度的所有核算结果 + List lastYearResultList = listByAcctEmployeeIdsAndSalaryItemIds(lastYearSalaryAcctEmployeeIdList, salaryItemIds); + List> lastYearResultMap = buildData4NbjhReport(salaryItemIds, lastYearSalaryAcctEmployeeList, salarySobEmpFields, lastYearResultList, true); + // 根据员工id + Map>> lastYearResultGroup = SalaryEntityUtil.group2Map(lastYearResultMap, map -> + Objects.isNull(map.getOrDefault("employeeId", " ")) ? "" : map.getOrDefault("employeeId", " ").toString() + ); + Map> lastYearSumResultByGroup = getSumResultByGroup(lastYearResultGroup, Collections.emptyList(), numberItems); + + Map lastMonthAcctEmpMap = SalaryEntityUtil.convert2Map(lastMonthSalaryAcctEmployeePOPageInfo.getList(), SalaryAcctEmployeePO::getEmployeeId); + sumResultByGroup.forEach((key,value) -> { + SalaryAcctEmployeePO salaryAcctEmployeePO = lastMonthAcctEmpMap.get(Long.valueOf(key)); + value.put("bm", salaryAcctEmployeePO == null ? "" : salaryAcctEmployeePO.getDepartmentName()); + value.put("gw", salaryAcctEmployeePO == null ? "" : salaryAcctEmployeePO.getJobtitleName()); + // 工资 取上一年度12月的基本+岗位+绩效+周六加班 + Map lastYearSumResult = lastYearSumResultByGroup.getOrDefault(key, Collections.emptyMap()); + BigDecimal jbgz = new BigDecimal(lastYearSumResult.get(jbgzItemId.toString()) == null || StringUtils.isBlank(lastYearSumResult.get(jbgzItemId.toString()).toString()) ? "0" : lastYearSumResult.get(jbgzItemId.toString()).toString()); + BigDecimal gwgz = new BigDecimal(lastYearSumResult.get(gwgzItemId.toString()) == null || StringUtils.isBlank(lastYearSumResult.get(gwgzItemId.toString()).toString()) ? "0" : lastYearSumResult.get(gwgzItemId.toString()).toString()); + BigDecimal jx = new BigDecimal(lastYearSumResult.get(jxgzItemId.toString()) == null || StringUtils.isBlank(lastYearSumResult.get(jxgzItemId.toString()).toString()) ? "0" : lastYearSumResult.get(jxgzItemId.toString()).toString()); + BigDecimal zljb = new BigDecimal(lastYearSumResult.get(zljbItemId.toString()) == null || StringUtils.isBlank(lastYearSumResult.get(zljbItemId.toString()).toString()) ? "0" : lastYearSumResult.get(zljbItemId.toString()).toString()); + value.put("gz", jbgz.add(gwgz).add(jx).add(zljb)); + + // 本年度数据 + value.put("bndndjxxs", ""); + value.put("bndyfjj", ""); + value.put("bndjl", ""); + BigDecimal bndgzze = new BigDecimal(value.get(yfgzItemId.toString()) == null || StringUtils.isBlank(value.get(yfgzItemId.toString()).toString()) ? "0" : value.get(yfgzItemId.toString()).toString()); + value.put("bndygzze", bndgzze); + value.put("bnzsr", bndgzze); + + // 上一年度数据 + value.put("syndjj", ""); + value.put("syndxmjl", ""); + BigDecimal syndgzze = new BigDecimal(lastYearSumResult.get(yfgzItemId.toString()) == null || StringUtils.isBlank(lastYearSumResult.get(yfgzItemId.toString()).toString()) ? "0" : lastYearSumResult.get(yfgzItemId.toString()).toString()); + value.put("syndygzze", syndgzze); + value.put("synzsr", syndgzze); + + // 年收入差异 + value.put("nsrcy", bndgzze.subtract(syndgzze)); + // 入职时间 + value.put("rzsj", ""); + // 奖金增长比例 + value.put("jjzzbl", ""); + // 备注 + value.put("bz", ""); + }); + } + + + List columns = new ArrayList<>(); + columns.add(new WeaTableColumnGroup("150px", "姓名", "userName")); + columns.add(new WeaTableColumnGroup("150px", "部门", "bm")); + columns.add(new WeaTableColumnGroup("150px", "岗位", "gw")); + columns.add(new WeaTableColumnGroup("150px", "工资", "gz")); + columns.add(new WeaTableColumnGroup("150px", "此岗位出勤", "cgwcq")); + + WeaTableColumnGroup bndColumn = new WeaTableColumnGroup("150px", "本年度", "bnd"); + ArrayList bndChildList = new ArrayList<>(); + if (param.getZwcj().equals("一线")) { + bndChildList.add(new WeaTableColumnGroup("150px", "年度绩效系数", "bndndjxxs")); + } else if (param.getZwcj().equals("基层")) { + bndChildList.add(new WeaTableColumnGroup("150px", "基层年终奖激励系数", "bndjcnzjjlxs")); + bndChildList.add(new WeaTableColumnGroup("150px", "个人评定等级", "bndgrpddj")); + bndChildList.add(new WeaTableColumnGroup("150px", "个人评定系数", "bndgrpdxs")); + } else if (param.getZwcj().equals("中层")) { + bndChildList.add(new WeaTableColumnGroup("150px", "年度综合完成率", "bndndzhwcl")); + bndChildList.add(new WeaTableColumnGroup("150px", "年度绩效系数", "bndjxxs")); + bndChildList.add(new WeaTableColumnGroup("150px", "个人评定等级", "bndgrpddj")); + bndChildList.add(new WeaTableColumnGroup("150px", "个人评定系数", "bndgrpdxs")); + } else { + bndChildList.add(new WeaTableColumnGroup("150px", "年度综合完成率", "bndndzhwcl")); + bndChildList.add(new WeaTableColumnGroup("150px", "年度绩效系数", "bndjxxs")); + bndChildList.add(new WeaTableColumnGroup("150px", "个人评定系数", "bndgrpdxs")); + } + + bndChildList.add(new WeaTableColumnGroup("150px", "预发奖金", "bndyfjj")); + bndChildList.add(new WeaTableColumnGroup("150px", "奖励", "bndjl")); + bndChildList.add(new WeaTableColumnGroup("150px", "1-12月工资总额", "bndygzze")); + bndColumn.setChildren(bndChildList); + columns.add(bndColumn); + + columns.add(new WeaTableColumnGroup("150px", "本年总收入", "bnzsr")); + + WeaTableColumnGroup syndColumn = new WeaTableColumnGroup("150px", "上一年度", "synd"); + ArrayList syndChildList = new ArrayList<>(); + syndChildList.add(new WeaTableColumnGroup("150px", "奖金", "syndjj")); + syndChildList.add(new WeaTableColumnGroup("150px", "项目奖励", "syndxmjl")); + syndChildList.add(new WeaTableColumnGroup("150px", "1-12月工资总额", "syndygzze")); + syndColumn.setChildren(syndChildList); + columns.add(syndColumn); + + columns.add(new WeaTableColumnGroup("150px", "上一年总收入", "synzsr")); + columns.add(new WeaTableColumnGroup("150px", "年收入差异", "nsrcy")); + columns.add(new WeaTableColumnGroup("150px", "入职时间", "rzsj")); + columns.add(new WeaTableColumnGroup("150px", "奖金增长比例", "jjzzbl")); + columns.add(new WeaTableColumnGroup("150px", " 备注", "bz")); + + + + List> list = sumResultByGroup.values().stream().collect(Collectors.toList()); + Map sumRow = new HashMap<>(); + if (param.isSum() || param.isExport()) { + // 合计或导出需要合计行 + List sumColumn = new ArrayList<>(); + columns.forEach(col -> { + if (CollectionUtils.isEmpty(col.getChildren())) { + sumColumn.add(col); + } else { + sumColumn.addAll(col.getChildren()); + } + }); + for (WeaTableColumn column : sumColumn) { + if (column.getColumn().equals("userName")) { + if (param.isExport()) { + sumRow.put(column.getColumn(), "总计"); + } + } else if ( column.getColumn().equals("departmentName") + || column.getColumn().equals("jobTitle") || column.getColumn().equals("cgwcq") + || column.getColumn().equals("nsrcy") || column.getColumn().equals("rzsj") + || column.getColumn().equals("jjzzbl") || column.getColumn().equals("bz")) { + + } else { + BigDecimal sumValue = list.stream().map(map -> map.get(column.getColumn()) == null ? "" : map.get(column.getColumn()).toString()) + .filter(NumberUtils::isCreatable) + .map(BigDecimal::new) + .reduce(new BigDecimal(0), BigDecimal::add); + sumRow.put(column.getColumn(), sumValue); + } + } + } + + Map map = new HashMap<>(); + PageInfo> pageInfo = SalaryPageUtil.buildPage(param.getCurrent(), param.getPageSize()); + pageInfo.setList(list); + if (param.isSum() || param.isExport()) { + map.put("sumRow", sumRow); + if (param.isSum()) { + return map; + } + } + pageInfo.setTotal(lastMonthSalaryAcctEmployeeList.size()); + map.put("column", columns); + map.put("data", pageInfo); + + return map; } - @Override - public Map ndjjReportSum(NbjhSalaryReportParam param) { - return null; - } @Override public XSSFWorkbook exportNdjjReport(NbjhSalaryReportParam param) { - return null; + Map resultMap = ndjjReport(param); + List columns = (List)resultMap.get("column"); + List> list = ((PageInfo>)resultMap.get("data")).getList(); + Map sumRow = (Map)resultMap.get("sumRow"); + + + // excel导出的表头 + List headerColumnGroup = Lists.newArrayList(); + // 查询列表的表头 + parseHeader(headerColumnGroup, columns); + List headerList = new ArrayList<>(columns); + // excel导出的数据 + List> rows = new ArrayList<>(); + rows.add(headerList); + + list.add(sumRow); + for (Map map : list) { + List row = Lists.newArrayListWithExpectedSize(headerColumnGroup.size()); + for (WeaTableColumnGroup weaTableColumn : headerColumnGroup) { + row.add(map.getOrDefault(weaTableColumn.getColumn(), StringUtils.EMPTY)); + } + rows.add(row); + } + + + String sheetName = ""; + XSSFWorkbook book = null; + sheetName = SalaryI18nUtil.getI18nLabel(0, param.getZwcj()); + book = ExcelUtilPlus.genWorkbookWithChildTitleColumn(rows, sheetName, true); + + return book; + } + + /** + * 解析表头 + * + * @param headerList + * @param weaTableColumns + */ + private void parseHeader(List headerList, List weaTableColumns) { + for (WeaTableColumnGroup weaTableColumnGroup : weaTableColumns) { + if (CollectionUtils.isEmpty(weaTableColumnGroup.getChildren())) { + headerList.add(weaTableColumnGroup); + continue; + } + parseHeader(headerList, weaTableColumnGroup.getChildren()); + } } /** @@ -1878,13 +1956,13 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe public Map ndjjBpReport(NbjhSalaryReportParam param) { // 查询所能管理的账套 BaseBean baseBean = new BaseBean(); - List taxAgentIds = getTaxAgentService(user).listAllTaxAgentsAsAdmin(Long.valueOf(user.getUID())).stream().map(TaxAgentPO::getId).collect(Collectors.toList()); - List salarySobList = getSalarySobService(user).listByTaxAgentIds(taxAgentIds); - List calculateSobIds = new ArrayList<>(); - calculateSobIds.addAll(Arrays.stream(baseBean.getPropValue("nbjhSalary", "ndjj_salary_sob_id").split(",")).filter(NumberUtils::isCreatable).map(Long::valueOf).collect(Collectors.toList())); + // List taxAgentIds = getTaxAgentService(user).listAllTaxAgentsAsAdmin(Long.valueOf(user.getUID())).stream().map(TaxAgentPO::getId).collect(Collectors.toList()); + // List salarySobList = getSalarySobService(user).listByTaxAgentIds(taxAgentIds); + // List calculateSobIds = new ArrayList<>(); + // calculateSobIds.addAll(Arrays.stream(baseBean.getPropValue("nbjhSalary", "ndjj_salary_sob_id").split(",")).filter(NumberUtils::isCreatable).map(Long::valueOf).collect(Collectors.toList())); - List salarySobIds = salarySobList.stream().filter(sob -> calculateSobIds.contains(sob.getId())).map(SalarySobPO::getId).collect(Collectors.toList()); - LocalDateRange dateRange = LocalDateRange.builder().fromDate(SalaryDateUtil.dateStrToLocalYearMonth(param.getYear() + "-01")).endDate(SalaryDateUtil.dateStrToLocalYearMonth(param.getStartDate() + "-12")).build(); + List salarySobIds = Arrays.stream(baseBean.getPropValue("nbjhSalary", "ndjj_salary_sob_id").split(",")).filter(NumberUtils::isCreatable).map(Long::valueOf).collect(Collectors.toList()); + LocalDateRange dateRange = LocalDateRange.builder().fromDate(SalaryDateUtil.dateStrToLocalYearMonth(param.getYear() + "-01")).endDate(SalaryDateUtil.dateStrToLocalYearMonth(param.getYear() + "-12")).build(); List salaryAcctRecordPOS = getSalaryAcctRecordService(user).listBySalarySobIdsAndSalaryMonth(salarySobIds, dateRange); List salaryAcctRecordIds = salaryAcctRecordPOS.stream().map(SalaryAcctRecordPO::getId).collect(Collectors.toList()); // 查询薪资核算人员 @@ -1893,17 +1971,17 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe // 获取配置的薪资项目id // 职务层级 - Long zwcjItemId = NumberUtils.isCreatable(baseBean.getPropValue("nbjhSalary", "ndjj_zwcj_item_id")) ? Long.valueOf(baseBean.getPropValue("nbjhSalary", "ndjj_zwcj_item_id")) : 0L; + Long zwcjItemId = baseBeanGetNumberProp(baseBean, "nbjhSalary", "ndjj_zwcj_item_id"); // 基本工资 - Long jbgzItemId = NumberUtils.isCreatable(baseBean.getPropValue("nbjhSalary", "ndjj_jb_item_id")) ? Long.valueOf(baseBean.getPropValue("nbjhSalary", "ndjj_jb_item_id")) : 0L; + Long jbgzItemId = baseBeanGetNumberProp(baseBean, "nbjhSalary", "ndjj_jb_item_id"); // 岗位工资 - Long gwgzItemId = NumberUtils.isCreatable(baseBean.getPropValue("nbjhSalary", "ndjj_gw_item_id")) ? Long.valueOf(baseBean.getPropValue("nbjhSalary", "ndjj_gw_item_id")) : 0L; + Long gwgzItemId = baseBeanGetNumberProp(baseBean, "nbjhSalary", "ndjj_gw_item_id"); // 绩效工资 - Long jxgzItemId = NumberUtils.isCreatable(baseBean.getPropValue("nbjhSalary", "ndjj_jx_item_id")) ? Long.valueOf(baseBean.getPropValue("nbjhSalary", "ndjj_jx_item_id")) : 0L; + Long jxgzItemId = baseBeanGetNumberProp(baseBean, "nbjhSalary", "ndjj_jx_item_id"); // 周六加班 - Long zljbItemId = NumberUtils.isCreatable(baseBean.getPropValue("nbjhSalary", "ndjj_zljb_item_id")) ? Long.valueOf(baseBean.getPropValue("nbjhSalary", "ndjj_zljb_item_id")) : 0L; + Long zljbItemId = baseBeanGetNumberProp(baseBean, "nbjhSalary", "ndjj_zljb_item_id"); // 应发工资 - Long yfgzItemId = NumberUtils.isCreatable(baseBean.getPropValue("nbjhSalary", "ndjj_yfgz_item_id")) ? Long.valueOf(baseBean.getPropValue("nbjhSalary", "ndjj_yfgz_item_id")) : 0L; + Long yfgzItemId = baseBeanGetNumberProp(baseBean, "nbjhSalary", "ndjj_yfgz_item_id"); List salaryItemIds = new ArrayList<>(); salaryItemIds.add(zwcjItemId); salaryItemIds.add(jbgzItemId); @@ -1916,61 +1994,453 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe // 查询薪资核算结果 List resultList = listByAcctEmployeeIdsAndSalaryItemIds(salaryAcctEmpIds, salaryItemIds); List salarySobEmpFields = new ArrayList<>(); - List> resultMap = buildData4NbjhReport(salaryItemIds, salaryAcctEmployeePOList, salarySobEmpFields, resultList, false); + List> resultMap = buildData4NbjhReport(salaryItemIds, salaryAcctEmployeePOList, salarySobEmpFields, resultList, true); // 根据层级 分类汇总 Map>> resultGroup = SalaryEntityUtil.group2Map(resultMap, map -> Objects.isNull(map.getOrDefault(zwcjItemId.toString(), " ")) ? "" : map.getOrDefault(zwcjItemId.toString(), " ").toString() ); - // List numberItems = salaryItemList.stream().filter(item -> item.getDataType().equals(SalaryDataTypeEnum.NUMBER.getValue())).collect(Collectors.toList()); - // // 分页 - // PageInfo groupPageInfo = SalaryPageUtil.buildPage(param.getCurrent(), param.getPageSize(), resultGroup.keySet().stream().collect(Collectors.toList())); - // if (param.isSum() || param.isExport()) { - // // 合计、导出不分页 - // groupPageInfo.setList(resultGroup.keySet().stream().collect(Collectors.toList())); - // } - // Map>> resultGroupPage = new HashMap<>(); - // for (Map.Entry>> entry : resultGroup.entrySet()) { - // if (groupPageInfo.getList().contains(entry.getKey())) { - // resultGroupPage.put(entry.getKey(), entry.getValue()); - // } - // } - // Map> sumResultByGroup = getSumResultByGroup(resultGroupPage, Collections.emptyList(), numberItems); + List salaryItemList = getSalaryItemService(user).listByIds(salaryItemIds); + List numberItems = salaryItemList.stream().filter(item -> item.getDataType().equals(SalaryDataTypeEnum.NUMBER.getValue())).collect(Collectors.toList()); + Map> sumResultByGroup = getSumResultByGroup(resultGroup, Collections.emptyList(), numberItems); + + // 查询上一年度的数据 + LocalDateRange lastYearDateRange = LocalDateRange.builder().fromDate(SalaryDateUtil.localDateToDate(SalaryDateUtil.dateToLocalDate(dateRange.getFromDate()).minusYears(1))) + .endDate(SalaryDateUtil.localDateToDate(SalaryDateUtil.dateToLocalDate(dateRange.getEndDate()).minusYears(1))).build(); + List lastYearSalaryAcctRecordPOS = getSalaryAcctRecordService(user).listBySalarySobIdsAndSalaryMonth(salarySobIds, lastYearDateRange); + List lastYearSalaryAcctRecordIds = lastYearSalaryAcctRecordPOS.stream().map(SalaryAcctRecordPO::getId).collect(Collectors.toList()); + // 查询薪资核算人员 + List lastYearSalaryAcctEmployeePOList = getSalaryAcctEmployeeService(user).listBySalaryAcctRecordIds(lastYearSalaryAcctRecordIds); + List lastYearSalaryAcctEmpIds = SalaryEntityUtil.properties(lastYearSalaryAcctEmployeePOList, SalaryAcctEmployeePO::getId, Collectors.toList()); + List lastYearResultList = listByAcctEmployeeIdsAndSalaryItemIds(lastYearSalaryAcctEmpIds, salaryItemIds); + List> lastYearResultMap = buildData4NbjhReport(salaryItemIds, lastYearSalaryAcctEmployeePOList, salarySobEmpFields, lastYearResultList, true); + // 根据层级 分类汇总 + Map>> lastYearResultGroup = SalaryEntityUtil.group2Map(lastYearResultMap, map -> + Objects.isNull(map.getOrDefault(zwcjItemId.toString(), " ")) ? "" : map.getOrDefault(zwcjItemId.toString(), " ").toString() + ); + Map> lastYearSumResultByGroup = getSumResultByGroup(lastYearResultGroup, Collections.emptyList(), numberItems); + sumResultByGroup.forEach((key,value) -> { + value.put("zwcj", key); + // 本年度数据 + value.put("bndrs", value.get("empNums") == null || StringUtils.isBlank(value.get("empNums").toString()) ? "0" : value.get("empNums").toString()); + value.put("bndyfjj", ""); + value.put("bndjl", ""); + BigDecimal bndgzze = new BigDecimal(value.get(yfgzItemId.toString()) == null || StringUtils.isBlank(value.get(yfgzItemId.toString()).toString()) ? "0" : value.get(yfgzItemId.toString()).toString()); + value.put("bndgzze", bndgzze); + value.put("bndhj",bndgzze); + + // 上一年度数据 + Map lastYearSumResult = lastYearSumResultByGroup.getOrDefault(key, Collections.emptyMap()); + value.put("syndrs", lastYearSumResult.get("empNums") == null || StringUtils.isBlank(lastYearSumResult.get("empNums").toString()) ? "0" : lastYearSumResult.get("empNums").toString()); + value.put("syndjj", ""); + value.put("syndxmj", ""); + BigDecimal syndgzze = new BigDecimal(lastYearSumResult.get(yfgzItemId.toString()) == null || StringUtils.isBlank(lastYearSumResult.get(yfgzItemId.toString()).toString()) ? "0" : lastYearSumResult.get(yfgzItemId.toString()).toString()); + value.put("syndgzze", syndgzze); + value.put("syndhj",syndgzze); + + + // 年收入差异 + value.put("nsrzzcy", bndgzze.subtract(syndgzze)); + // 备注 + value.put("bz", ""); + }); + + List columns = new ArrayList<>(); + columns.add(new WeaTableColumnGroup("150px", "层级", "zwcj")); + + WeaTableColumnGroup bndColumn = new WeaTableColumnGroup("150px", "本年度", "bnd"); + ArrayList bndChildList = new ArrayList<>(); + bndChildList.add(new WeaTableColumnGroup("150px", "人数", "bndrs")); + bndChildList.add(new WeaTableColumnGroup("150px", "预发奖金", "bndyfjj")); + bndChildList.add(new WeaTableColumnGroup("150px", "奖励", "bndjl")); + bndChildList.add(new WeaTableColumnGroup("150px", "1-12月工资总额", "bndgzze")); + bndChildList.add(new WeaTableColumnGroup("150px", "合计", "bndhj")); + bndColumn.setChildren(bndChildList); + columns.add(bndColumn); + + WeaTableColumnGroup syndColumn = new WeaTableColumnGroup("150px", "上一年度", "synd"); + ArrayList syndChildList = new ArrayList<>(); + syndChildList.add(new WeaTableColumnGroup("150px", "人数", "syndrs")); + syndChildList.add(new WeaTableColumnGroup("150px", "奖金", "syndjj")); + syndChildList.add(new WeaTableColumnGroup("150px", "项目奖", "syndxmj")); + syndChildList.add(new WeaTableColumnGroup("150px", "1-12月工资总额", "syndgzze")); + syndChildList.add(new WeaTableColumnGroup("150px", "合计", "syndhj")); + syndColumn.setChildren(syndChildList); + columns.add(syndColumn); + + columns.add(new WeaTableColumnGroup("150px", "年收入增长差异", "nsrzzcy")); + columns.add(new WeaTableColumnGroup("150px", " 备注", "bz")); + + + + List> list = sumResultByGroup.values().stream().collect(Collectors.toList()); + Map sumRow = new HashMap<>(); + if (param.isSum() || param.isExport()) { + // 合计或导出需要合计行 + List sumColumn = new ArrayList<>(); + columns.forEach(col -> { + if (CollectionUtils.isEmpty(col.getChildren())) { + sumColumn.add(col); + } else { + sumColumn.addAll(col.getChildren()); + } + }); + for (WeaTableColumn column : sumColumn) { + if (column.getColumn().equals("zwcj")) { + if (param.isExport()) { + sumRow.put(column.getColumn(), "总计"); + } + } else if (column.getColumn().equals("zwcj") || column.getColumn().equals("nsrzzcy") + || column.getColumn().equals("bz")) { + + } else { + BigDecimal sumValue = list.stream().map(map -> map.get(column.getColumn()) == null ? "" : map.get(column.getColumn()).toString()) + .filter(NumberUtils::isCreatable) + .map(BigDecimal::new) + .reduce(new BigDecimal(0), BigDecimal::add); + sumRow.put(column.getColumn(), sumValue); + } + } + } + + Map map = new HashMap<>(); + + if (param.isSum() || param.isExport()) { + map.put("sumRow", sumRow); + if (param.isSum()) { + return map; + } + } + map.put("column", columns); + map.put("data", list); + + return map; + } + + @Override + public XSSFWorkbook exportNdjjBpReport(NbjhSalaryReportParam param) { + Map resultMap = ndjjBpReport(param); + List columns = (List)resultMap.get("column"); + List> list = (List>)resultMap.get("data"); + Map sumRow = (Map)resultMap.get("sumRow"); + + + // excel导出的表头 + List headerColumnGroup = Lists.newArrayList(); + // 查询列表的表头 + parseHeader(headerColumnGroup, columns); + List headerList = new ArrayList<>(columns); + // excel导出的数据 + List> rows = new ArrayList<>(); + rows.add(headerList); + + list.add(sumRow); + for (Map map : list) { + List row = Lists.newArrayListWithExpectedSize(headerColumnGroup.size()); + for (WeaTableColumnGroup weaTableColumn : headerColumnGroup) { + row.add(map.getOrDefault(weaTableColumn.getColumn(), StringUtils.EMPTY)); + } + rows.add(row); + } + + + String sheetName = "报批"; + return ExcelUtilPlus.genWorkbookWithChildTitleColumn(rows, sheetName, true); + } + + + /** + * 实际计提报表 工资发放表(当月实际计提)在职、工资发放表(当月汇总)在职和离职 + * + * @param param + * @return + */ + @Override + public Map sjjtReport(NbjhSalaryReportParam param) { + // 查询所能管理的账套 + BaseBean baseBean = new BaseBean(); + List salarySobIds = new ArrayList<>(); + if (param.isDyhzReport()) { + salarySobIds.addAll(Arrays.stream(baseBean.getPropValue("nbjhSalary", "sjjt_zzlz_salary_sob_id").split(",")).filter(NumberUtils::isCreatable).map(Long::valueOf).collect(Collectors.toList())); + } else { + salarySobIds.addAll(Arrays.stream(baseBean.getPropValue("nbjhSalary", "sjjt_zz_salary_sob_id").split(",")).filter(NumberUtils::isCreatable).map(Long::valueOf).collect(Collectors.toList())); + } + if (StringUtils.isBlank(param.getStartDate())) { + throw new SalaryRunTimeException("参数错误"); + } + LocalDateRange dateRange = LocalDateRange.builder().fromDate(SalaryDateUtil.dateStrToLocalYearMonth(param.getStartDate())).endDate(SalaryDateUtil.dateStrToLocalYearMonth(param.getStartDate())).build(); + List salaryAcctRecordPOS = getSalaryAcctRecordService(user).listBySalarySobIdsAndSalaryMonth(salarySobIds, dateRange); + List salaryAcctRecordIds = salaryAcctRecordPOS.stream().map(SalaryAcctRecordPO::getId).collect(Collectors.toList()); + // 查询薪资核算人员 + List salaryAcctEmployeePOList = getSalaryAcctEmployeeService(user).listBySalaryAcctRecordIds(salaryAcctRecordIds); + // 分页 + PageInfo salaryAcctEmployeePOPageInfo = SalaryPageUtil.buildPage(param.getCurrent(), param.getPageSize(), salaryAcctEmployeePOList); + if (param.isExport() || param.isSum()) { + salaryAcctEmployeePOPageInfo.setList(salaryAcctEmployeePOList); + } + List salaryAcctEmpIds = SalaryEntityUtil.properties(salaryAcctEmployeePOPageInfo.getList(), SalaryAcctEmployeePO::getId, Collectors.toList()); + List salaryEmpIds = SalaryEntityUtil.properties(salaryAcctEmployeePOPageInfo.getList(), SalaryAcctEmployeePO::getEmployeeId, Collectors.toList()); + + // 获取配置的薪资项目id + List salaryItemIds = new ArrayList<>(); + // 银行卡号 + Long yhkhItemId = baseBeanGetNumberProp(baseBean, "nbjhSalary", "sjjt_yhkh_item_id"); + salaryItemIds.add(yhkhItemId); + // 开户行 + Long khhItemId = baseBeanGetNumberProp(baseBean, "nbjhSalary", "sjjt_khh_item_id"); + salaryItemIds.add(khhItemId); + // 日常出勤-应出勤 + Long rccqYcqItemId = baseBeanGetNumberProp(baseBean, "nbjhSalary", "sjjt_rccq_ycq_item_id"); + salaryItemIds.add(rccqYcqItemId); + // 日常出勤-实际出勤 + Long rccqScqItemId = baseBeanGetNumberProp(baseBean, "nbjhSalary", "sjjt_rccq_scq_item_id"); + salaryItemIds.add(rccqScqItemId); + // 周六出勤-应出勤 + Long zlcqYcqItemId = baseBeanGetNumberProp(baseBean, "nbjhSalary", "sjjt_zlcq_ycq_item_id"); + salaryItemIds.add(zlcqYcqItemId); + // 周六出勤-实际出勤 + Long zlcqScqItemId = baseBeanGetNumberProp(baseBean, "nbjhSalary", "sjjt_zlcq_scq_item_id"); + salaryItemIds.add(zlcqScqItemId); + // 标准工资 + Long bzgzItemId = baseBeanGetNumberProp(baseBean, "nbjhSalary", "sjjt_bzgz_item_id"); + salaryItemIds.add(bzgzItemId); + // 基本工资 + Long jibengzItemId = baseBeanGetNumberProp(baseBean, "nbjhSalary", "sjjt_jibengz_item_id"); + salaryItemIds.add(jibengzItemId); + // 岗位工资 + Long gwgzItemId = baseBeanGetNumberProp(baseBean, "nbjhSalary", "sjjt_gwgz_item_id"); + salaryItemIds.add(gwgzItemId); + // 工资构成-绩效工资 + Long gzgcJxgzItemId = baseBeanGetNumberProp(baseBean, "nbjhSalary", "sjjt_gzgc_jxgz_item_id"); + salaryItemIds.add(gzgcJxgzItemId); + // 周六加班工资 + Long zljbgzItemId = baseBeanGetNumberProp(baseBean, "nbjhSalary", "sjjt_zljbgz_item_id"); + salaryItemIds.add(zljbgzItemId); + // 工龄工资 + Long glgzItemId = baseBeanGetNumberProp(baseBean, "nbjhSalary", "sjjt_glgz_item_id"); + salaryItemIds.add(glgzItemId); + // 加班工资 + Long jbgzItemId = baseBeanGetNumberProp(baseBean, "nbjhSalary", "sjjt_jbgz_item_id"); + salaryItemIds.add(jbgzItemId); + // 高温津贴 + Long gwjtItemId = baseBeanGetNumberProp(baseBean, "nbjhSalary", "sjjt_gwjt_item_id"); + salaryItemIds.add(gwjtItemId); + // 固定补贴 + Long gdbtItemId = baseBeanGetNumberProp(baseBean, "nbjhSalary", "sjjt_gdbt_item_id"); + salaryItemIds.add(gdbtItemId); + // 其他补贴 + Long qtbtItemId = baseBeanGetNumberProp(baseBean, "nbjhSalary", "sjjt_qtbt_item_id"); + salaryItemIds.add(qtbtItemId); + // 出勤工资 + Long cqgzItemId = baseBeanGetNumberProp(baseBean, "nbjhSalary", "sjjt_cqgz_item_id"); + salaryItemIds.add(cqgzItemId); + // 周六出勤工资 + Long zlcqgzItemId = baseBeanGetNumberProp(baseBean, "nbjhSalary", "sjjt_zlcqgz_item_id"); + salaryItemIds.add(zlcqgzItemId); + // 扣除工资-绩效工资 + Long kcgzJxgzItemId = baseBeanGetNumberProp(baseBean, "nbjhSalary", "sjjt_kcgz_jxgz_item_id"); + salaryItemIds.add(kcgzJxgzItemId); + // 其他工资 + Long qtgzItemId = baseBeanGetNumberProp(baseBean, "nbjhSalary", "sjjt_qtgz_item_id"); + salaryItemIds.add(qtgzItemId); + // 应发工资 + Long yfgzItemId = baseBeanGetNumberProp(baseBean, "nbjhSalary", "sjjt_yfgz_item_id"); + salaryItemIds.add(yfgzItemId); + // 社保 + Long sbItemId = baseBeanGetNumberProp(baseBean, "nbjhSalary", "sjjt_sb_item_id"); + salaryItemIds.add(sbItemId); + // 公积金 + Long gjjItemId = baseBeanGetNumberProp(baseBean, "nbjhSalary", "sjjt_gjj_item_id"); + salaryItemIds.add(gjjItemId); + // 通讯费 + Long txfItemId = baseBeanGetNumberProp(baseBean, "nbjhSalary", "sjjt_txf_item_id"); + salaryItemIds.add(txfItemId); + // 个税 + Long gsItemId = baseBeanGetNumberProp(baseBean, "nbjhSalary", "sjjt_gs_item_id"); + salaryItemIds.add(gsItemId); + // 实发工资 + Long sfgzItemId = baseBeanGetNumberProp(baseBean, "nbjhSalary", "sjjt_sfgz_item_id"); + salaryItemIds.add(sfgzItemId); + // 支付方式-1 + Long zffs1ItemId = baseBeanGetNumberProp(baseBean, "nbjhSalary", "sjjt_zffs1_item_id"); + salaryItemIds.add(zffs1ItemId); + // 支付方式-2 + Long zffs2ItemId = baseBeanGetNumberProp(baseBean, "nbjhSalary", "sjjt_zffs2_item_id"); + salaryItemIds.add(zffs2ItemId); + + + // 查询薪资核算结果 + List resultList = listByAcctEmployeeIdsAndSalaryItemIds(salaryAcctEmpIds, salaryItemIds); + List salarySobEmpFields = new ArrayList<>(); + salarySobEmpFields.add(SalarySobEmpFieldPO.builder().fieldCode("departmentName").build()); + salarySobEmpFields.add(SalarySobEmpFieldPO.builder().fieldCode("idNo").build()); + List> resultMap = buildData4NbjhReport(salaryItemIds, salaryAcctEmployeePOPageInfo.getList(), salarySobEmpFields, resultList, false); + + // 根据人员汇总 + Map> resultGroup = SalaryEntityUtil.convert2Map(resultMap, map -> + Objects.isNull(map.getOrDefault("id", " ")) ? "" : map.getOrDefault("id", " ").toString() + ); + + List salaryItemList = getSalaryItemService(user).listByIds(salaryItemIds); + List numberItems = salaryItemList.stream().filter(item -> item.getDataType().equals(SalaryDataTypeEnum.NUMBER.getValue())).collect(Collectors.toList()); + List numberItemStrList = numberItems.stream().map(item -> item.getId().toString()).collect(Collectors.toList()); + // Map> sumResultByGroup = getSumResultByGroup(resultGroup, Collections.emptyList(), numberItems); + // 获取人员信息 + Map empMap = SalaryEntityUtil.convert2Map(getSalaryEmployeeService(user).listByIds(salaryEmpIds), DataCollectionEmployee::getEmployeeId); + + resultGroup.forEach((key,value) -> { + DataCollectionEmployee employee = empMap.getOrDefault(Long.valueOf(value.getOrDefault("employeeId", "0").toString()), DataCollectionEmployee.builder().build()); + value.put("rzsj", employee.getCompanystartdate()); + // 支付方式 + String zffs = ((value.get(zffs1ItemId.toString()) == null || StringUtils.isBlank(value.get(zffs1ItemId.toString()).toString())) ? " " : value.get(zffs1ItemId.toString()).toString()) + + ((value.get(zffs2ItemId.toString()) == null || StringUtils.isBlank(value.get(zffs2ItemId.toString()).toString())) ? " " : value.get(zffs2ItemId.toString()).toString()); + value.put("zffs", zffs); + }); List columns = new ArrayList<>(); columns.add(new WeaTableColumnGroup("150px", "姓名", "userName")); columns.add(new WeaTableColumnGroup("150px", "部门", "departmentName")); - columns.add(new WeaTableColumnGroup("150px", "岗位", "jobTitle")); - columns.add(new WeaTableColumnGroup("150px", "工资", "gz")); - columns.add(new WeaTableColumnGroup("150px", "此岗位出勤", "cgwcq")); - - WeaTableColumnGroup bndColumn = new WeaTableColumnGroup("150px", "本年度", "bnd"); - ArrayList bndChildList = new ArrayList<>(); - bndChildList.add(new WeaTableColumnGroup("150px", "年度绩效系数", "bndndjxxs")); - bndChildList.add(new WeaTableColumnGroup("150px", "预发奖金", "bndyfjj")); - bndChildList.add(new WeaTableColumnGroup("150px", "奖励", "bndjl")); - bndChildList.add(new WeaTableColumnGroup("150px", "1-12月工资总额", "bndygzze")); - bndColumn.setChildren(bndChildList); - columns.add(bndColumn); - - columns.add(new WeaTableColumnGroup("150px", "本年总收入", "bnzss")); - - WeaTableColumnGroup syndColumn = new WeaTableColumnGroup("150px", "上一年度", "synd"); - ArrayList syndChildList = new ArrayList<>(); - syndChildList.add(new WeaTableColumnGroup("150px", "奖金", "syndjj")); - syndChildList.add(new WeaTableColumnGroup("150px", "项目奖励", "syndxmjl")); - syndChildList.add(new WeaTableColumnGroup("150px", "1-12月工资总额", "syndygzze")); - syndColumn.setChildren(syndChildList); - columns.add(bndColumn); - - columns.add(new WeaTableColumnGroup("150px", "上一年总收入", "synzss")); - columns.add(new WeaTableColumnGroup("150px", "年收入差异", "nsrcy")); columns.add(new WeaTableColumnGroup("150px", "入职时间", "rzsj")); - columns.add(new WeaTableColumnGroup("150px", "奖金增长比例", "jjzzbl")); - columns.add(new WeaTableColumnGroup("150px", " 备注", "bz")); - return null; + columns.add(new WeaTableColumnGroup("150px", "身份证号", "idNo")); + columns.add(new WeaTableColumnGroup("150px", "银行卡号", yhkhItemId.toString())); + columns.add(new WeaTableColumnGroup("150px", "开户行", khhItemId.toString())); + + WeaTableColumnGroup rccqtsColumn = new WeaTableColumnGroup("150px", "日常出勤天数", "rccqts"); + ArrayList rccqtsChildList = new ArrayList<>(); + rccqtsChildList.add(new WeaTableColumnGroup("150px", "应出勤(天数)", rccqYcqItemId.toString())); + rccqtsChildList.add(new WeaTableColumnGroup("150px", "实际出勤(天数)", rccqScqItemId.toString())); + rccqtsColumn.setChildren(rccqtsChildList); + columns.add(rccqtsColumn); + + WeaTableColumnGroup zlcqtsColumn = new WeaTableColumnGroup("150px", "周六出勤天数", "zlcqts"); + ArrayList zlcqtsChildList = new ArrayList<>(); + zlcqtsChildList.add(new WeaTableColumnGroup("150px", "应出勤(天数)", zlcqYcqItemId.toString())); + zlcqtsChildList.add(new WeaTableColumnGroup("150px", "实际出勤(天数)", zlcqScqItemId.toString())); + zlcqtsColumn.setChildren(zlcqtsChildList); + columns.add(zlcqtsColumn); + + columns.add(new WeaTableColumnGroup("150px", "标准工资", bzgzItemId.toString())); + + WeaTableColumnGroup gzgcColumn = new WeaTableColumnGroup("150px", "工资构成", "gzgc"); + ArrayList gzgcChildList = new ArrayList<>(); + gzgcChildList.add(new WeaTableColumnGroup("150px", "基本工资", jibengzItemId.toString())); + gzgcChildList.add(new WeaTableColumnGroup("150px", "岗位工资", gwgzItemId.toString())); + gzgcChildList.add(new WeaTableColumnGroup("150px", "绩效工资", gzgcJxgzItemId.toString())); + gzgcChildList.add(new WeaTableColumnGroup("150px", "周六加班工资", zljbgzItemId.toString())); + gzgcColumn.setChildren(gzgcChildList); + columns.add(gzgcColumn); + + columns.add(new WeaTableColumnGroup("150px", "工龄工资", glgzItemId.toString())); + columns.add(new WeaTableColumnGroup("150px", "加班工资", jbgzItemId.toString())); + columns.add(new WeaTableColumnGroup("150px", "高温津贴", gwjtItemId.toString())); + + + WeaTableColumnGroup btColumn = new WeaTableColumnGroup("150px", "补贴", "bt"); + ArrayList btChildList = new ArrayList<>(); + btChildList.add(new WeaTableColumnGroup("150px", "固定补贴", gdbtItemId.toString())); + btChildList.add(new WeaTableColumnGroup("150px", "其他补贴", qtbtItemId.toString())); + btColumn.setChildren(btChildList); + columns.add(btColumn); + + WeaTableColumnGroup kcgcColumn = new WeaTableColumnGroup("150px", "扣除工资", "kcgz"); + ArrayList kcgcChildList = new ArrayList<>(); + kcgcChildList.add(new WeaTableColumnGroup("150px", "出勤工资", cqgzItemId.toString())); + kcgcChildList.add(new WeaTableColumnGroup("150px", "周六出勤工资", zlcqgzItemId.toString())); + kcgcChildList.add(new WeaTableColumnGroup("150px", "绩效工资", kcgzJxgzItemId.toString())); + kcgcChildList.add(new WeaTableColumnGroup("150px", "其他工资", qtgzItemId.toString())); + kcgcColumn.setChildren(kcgcChildList); + columns.add(kcgcColumn); + + columns.add(new WeaTableColumnGroup("150px", "应发工资", yfgzItemId.toString())); + columns.add(new WeaTableColumnGroup("150px", "社保", sbItemId.toString())); + columns.add(new WeaTableColumnGroup("150px", "公积金", gjjItemId.toString())); + columns.add(new WeaTableColumnGroup("150px", "通讯费", txfItemId.toString())); + columns.add(new WeaTableColumnGroup("150px", "个税", gsItemId.toString())); + columns.add(new WeaTableColumnGroup("150px", "实发工资", sfgzItemId.toString())); + columns.add(new WeaTableColumnGroup("150px", "支付方式", "zffs")); + + + List> list = resultGroup.values().stream().collect(Collectors.toList()); + Map sumRow = new HashMap<>(); + if (param.isSum() || param.isExport()) { + // 合计或导出需要合计行 + List sumColumn = new ArrayList<>(); + columns.forEach(col -> { + if (CollectionUtils.isEmpty(col.getChildren())) { + sumColumn.add(col); + } else { + sumColumn.addAll(col.getChildren()); + } + }); + for (WeaTableColumn column : sumColumn) { + if (!numberItemStrList.contains(column.getColumn())) { + + } else { + BigDecimal sumValue = list.stream().map(map -> map.get(column.getColumn()) == null ? "" : map.get(column.getColumn()).toString()) + .filter(NumberUtils::isCreatable) + .map(BigDecimal::new) + .reduce(new BigDecimal(0), BigDecimal::add); + sumRow.put(column.getColumn(), sumValue); + } + } + } + + Map map = new HashMap<>(); + + + + PageInfo> pageInfo = SalaryPageUtil.buildPage(param.getCurrent(), param.getPageSize()); + pageInfo.setList(list); + if (param.isSum() || param.isExport()) { + pageInfo.setList(list); + map.put("sumRow", sumRow); + if (param.isSum()) { + return map; + } + } + pageInfo.setTotal(salaryAcctEmployeePOList.size()); + map.put("column", columns); + map.put("data", pageInfo); + + return map; + } + + @Override + public XSSFWorkbook exportSjjtReport(NbjhSalaryReportParam param) { + Map resultMap = sjjtReport(param); + List columns = (List)resultMap.get("column"); + List> list = ((PageInfo>)resultMap.get("data")).getList(); + Map sumRow = (Map)resultMap.get("sumRow"); + + + // excel导出的表头 + List headerColumnGroup = Lists.newArrayList(); + // 查询列表的表头 + parseHeader(headerColumnGroup, columns); + List headerList = new ArrayList<>(columns); + // excel导出的数据 + List> rows = new ArrayList<>(); + rows.add(headerList); + + list.add(sumRow); + for (Map map : list) { + List row = Lists.newArrayListWithExpectedSize(headerColumnGroup.size()); + for (WeaTableColumnGroup weaTableColumn : headerColumnGroup) { + row.add(map.getOrDefault(weaTableColumn.getColumn(), StringUtils.EMPTY)); + } + rows.add(row); + } + + + String sheetName = "实际计提"; + return ExcelUtilPlus.genWorkbookWithChildTitleColumn4nbjh(rows, sheetName, true, "宁波精华电子科技股份有限公司", 31, param.getStartDate() ); + } + + + private Long baseBeanGetNumberProp(BaseBean baseBean, String fileName, String propKey) { + return NumberUtils.isCreatable(baseBean.getPropValue(fileName, propKey)) ? Long.valueOf(baseBean.getPropValue(fileName, propKey)) : 0L; } } \ No newline at end of file diff --git a/src/com/engine/salary/service/impl/SalaryArchiveItemServiceImpl.java b/src/com/engine/salary/service/impl/SalaryArchiveItemServiceImpl.java index 19c39e199..e0a798d94 100644 --- a/src/com/engine/salary/service/impl/SalaryArchiveItemServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryArchiveItemServiceImpl.java @@ -424,7 +424,7 @@ public class SalaryArchiveItemServiceImpl extends Service implements SalaryArchi Date effectiveTime = effectiveSalaryItem.getEffectiveTime(); // 1.1 如果早于<当前已生效 if (saveEffectiveTime.before(effectiveTime)) { - throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(100429, "生效日期不可早于当前已生效的调整日期")); + // throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(100429, "生效日期不可早于当前已生效的调整日期")); // 1.2 如果等于当前已生效 fixme 日期比较可能有bug } else if (saveEffectiveTime.equals(effectiveTime)) { if (effectiveBeforeSalaryItem != null && effectiveBeforeSalaryItem.getItemValue().equals(e.getAdjustValue())) { @@ -517,7 +517,7 @@ public class SalaryArchiveItemServiceImpl extends Service implements SalaryArchi Date effectiveTime = effectiveSalaryItem.getEffectiveTime(); // 1.1 如果早于<当前已生效 if (saveEffectiveTime.before(effectiveTime)) { - throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(100429, "生效日期不可早于当前已生效的调整日期")); + // throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(100429, "生效日期不可早于当前已生效的调整日期")); // 1.2 如果等于当前已生效 fixme 日期比较可能有bug } else if (saveEffectiveTime.equals(effectiveTime)) { if (effectiveBeforeSalaryItem != null && effectiveBeforeSalaryItem.getItemValue().equals(e.getAdjustValue())) { diff --git a/src/com/engine/salary/service/impl/SalaryArchiveTaxAgentServiceImpl.java b/src/com/engine/salary/service/impl/SalaryArchiveTaxAgentServiceImpl.java index eede97198..52043b2d9 100644 --- a/src/com/engine/salary/service/impl/SalaryArchiveTaxAgentServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryArchiveTaxAgentServiceImpl.java @@ -123,7 +123,7 @@ public class SalaryArchiveTaxAgentServiceImpl extends Service implements SalaryA Date effectiveTime = effectiveTaxAgent.getEffectiveTime(); // 1.1 如果早于<当前已生效 if (saveEffectiveTime.before(effectiveTime)) { - throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(100429, "生效日期不可早于当前已生效的调整日期")); + // throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(100429, "生效日期不可早于当前已生效的调整日期")); // 1.2 如果等于当前已生效 } else if (saveEffectiveTime.equals(effectiveTime)) { if (CollectionUtils.isNotEmpty(salaryArchiveTaxAgents) && salaryArchiveTaxAgents.get(0).getTaxAgentId().equals(saveParam.getTaxAgentId())) { diff --git a/src/com/engine/salary/util/excel/ExcelUtilPlus.java b/src/com/engine/salary/util/excel/ExcelUtilPlus.java index 42218a958..b5d0180af 100644 --- a/src/com/engine/salary/util/excel/ExcelUtilPlus.java +++ b/src/com/engine/salary/util/excel/ExcelUtilPlus.java @@ -6,6 +6,7 @@ import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; import org.apache.poi.ss.usermodel.*; import org.apache.poi.ss.util.CellRangeAddress; +import org.apache.poi.ss.util.RegionUtil; import org.apache.poi.xssf.usermodel.*; import org.springframework.beans.BeanUtils; @@ -968,6 +969,215 @@ public class ExcelUtilPlus { return workbook; } + public static XSSFWorkbook genWorkbookWithChildTitleColumn4nbjh(List> rowList, String sheetName, boolean lastRowRed, String title, int titleCellNum, String xzyf) { + XSSFWorkbook workbook = new XSSFWorkbook(); + + // 设置title样式 + XSSFCellStyle titleCellStyle = workbook.createCellStyle(); + XSSFFont titleFont = workbook.createFont(); + titleFont.setBold(true); + titleFont.setFontName("仿宋"); + titleFont.setFontHeightInPoints((short) 15); + titleCellStyle.setFont(titleFont); + titleCellStyle.setAlignment(HorizontalAlignment.CENTER); + titleCellStyle.setFillForegroundColor(IndexedColors.GREY_25_PERCENT.getIndex());//背景色 + titleCellStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND); + titleCellStyle.setVerticalAlignment(VerticalAlignment.CENTER); + titleCellStyle.setBorderLeft(BorderStyle.THIN); + titleCellStyle.setBorderRight(BorderStyle.THIN); + titleCellStyle.setBorderTop(BorderStyle.THIN); + titleCellStyle.setBorderBottom(BorderStyle.THIN); + + XSSFCellStyle childTitleCellStyle = workbook.createCellStyle(); + childTitleCellStyle.setFont(titleFont); + childTitleCellStyle.setAlignment(HorizontalAlignment.LEFT); + childTitleCellStyle.setFillForegroundColor(IndexedColors.GREY_25_PERCENT.getIndex());//背景色 + childTitleCellStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND); + childTitleCellStyle.setVerticalAlignment(VerticalAlignment.CENTER); + childTitleCellStyle.setBorderLeft(BorderStyle.THIN); + childTitleCellStyle.setBorderRight(BorderStyle.THIN); + childTitleCellStyle.setBorderTop(BorderStyle.THIN); + childTitleCellStyle.setBorderBottom(BorderStyle.THIN); + + // 设置header样式 + XSSFCellStyle headerCellStyle = workbook.createCellStyle(); + XSSFFont headerFont = workbook.createFont(); + headerFont.setBold(true); + headerFont.setFontName("仿宋"); + headerFont.setFontHeightInPoints((short) 18); + headerCellStyle.setFont(headerFont); + headerCellStyle.setAlignment(HorizontalAlignment.CENTER); + headerCellStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND); + headerCellStyle.setVerticalAlignment(VerticalAlignment.CENTER); + + XSSFCellStyle subTitleCellStyle = workbook.createCellStyle(); + XSSFFont subTitleFont = workbook.createFont(); + subTitleFont.setBold(true); + subTitleFont.setFontName("仿宋"); + subTitleFont.setFontHeightInPoints((short) 15); + subTitleCellStyle.setFont(subTitleFont); + subTitleCellStyle.setAlignment(HorizontalAlignment.CENTER); + subTitleCellStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND); + subTitleCellStyle.setVerticalAlignment(VerticalAlignment.CENTER); + subTitleCellStyle.setBorderLeft(BorderStyle.THIN); + subTitleCellStyle.setBorderRight(BorderStyle.THIN); + subTitleCellStyle.setBorderTop(BorderStyle.THIN); + subTitleCellStyle.setBorderBottom(BorderStyle.THIN); + + + // 设置主体样式 + XSSFCellStyle cellStyle = workbook.createCellStyle(); + XSSFFont font = workbook.createFont(); + font.setFontName("宋体"); + font.setFontHeightInPoints((short) 10);// 设置字体大小 + cellStyle.setFont(font);// 选择需要用到的字体格式 + cellStyle.setWrapText(true); + + cellStyle.setBorderLeft(BorderStyle.THIN); + cellStyle.setBorderRight(BorderStyle.THIN); + cellStyle.setBorderTop(BorderStyle.THIN); + cellStyle.setBorderBottom(BorderStyle.THIN); + + XSSFCellStyle redCellStyle = workbook.createCellStyle(); + XSSFFont redFont = workbook.createFont(); + redFont.setFontName("宋体"); + redFont.setFontHeightInPoints((short) 10);// 设置字体大小 + redFont.setColor(new XSSFColor(new Color(0xFF3333), null)); + redFont.setBold(true); + redCellStyle.setWrapText(true); + redCellStyle.setFont(redFont);// 选择需要用到的字体格式 + + redCellStyle.setBorderLeft(BorderStyle.THIN); + redCellStyle.setBorderRight(BorderStyle.THIN); + redCellStyle.setBorderTop(BorderStyle.THIN); + redCellStyle.setBorderBottom(BorderStyle.THIN); + + XSSFSheet sheet = workbook.createSheet(sheetName); + //自适应宽度 + sheet.autoSizeColumn(0, true); + //默认列宽 + sheet.setDefaultColumnWidth(20); + //默认行高 + sheet.setDefaultRowHeightInPoints(18); + + + // 表头 + if (StringUtils.isNotBlank(title)) { + XSSFRow row = sheet.createRow(0); + XSSFCell cell = row.createCell(0); + sheet.addMergedRegion(new CellRangeAddress(0, 0, 0, titleCellNum-1)); + cell.setCellStyle(headerCellStyle); + cell.setCellValue(title); + } + + // 薪资月份 + if (StringUtils.isNotBlank(xzyf)) { + XSSFRow row = sheet.createRow(1); + XSSFCell cell = row.createCell(0); + cell.setCellStyle(subTitleCellStyle); + cell.setCellValue("薪资月份"); + + XSSFCell cell2 = row.createCell(1); + cell2.setCellStyle(subTitleCellStyle); + cell2.setCellValue(xzyf); + } + + //处理合并单元格 + XSSFRow row0 = sheet.createRow(0 +2); + XSSFRow row1 = sheet.createRow(1 +2); + List header = rowList.get(0); + int startIndex = 0; + for (int i = 0; i < header.size(); i++) { + WeaTableColumnGroup columnGroupItem = (WeaTableColumnGroup) header.get(i); + if (columnGroupItem.getChildren() == null) { + sheet.addMergedRegion(new CellRangeAddress(0 + 2, 1 + 2, startIndex, startIndex)); + + XSSFCell rowZeroCell = row0.createCell(startIndex, CellType.STRING); + rowZeroCell.setCellValue(columnGroupItem.getText().toString()); + rowZeroCell.setCellStyle(titleCellStyle); + XSSFCell rowOneCell = row1.createCell(startIndex, CellType.STRING); + rowOneCell.setCellValue(columnGroupItem.getText().toString()); + rowOneCell.setCellStyle(titleCellStyle); + //设置列宽 + sheet.setColumnWidth(startIndex, Math.max(12, columnGroupItem.getText().length() * 4) * 256); + startIndex++; + } else { + List childrenList = columnGroupItem.getChildren(); + int endIndex = startIndex + childrenList.size() - 1; + + CellRangeAddress range = null; + if (endIndex > startIndex) { + range = new CellRangeAddress(0 + 2, 0 + 2, startIndex, endIndex); + sheet.addMergedRegion(range); + RegionUtil.setBorderTop(BorderStyle.THIN, range,sheet); + } + + XSSFCell cell = row0.createCell(startIndex, CellType.STRING); + cell.setCellValue(columnGroupItem.getText().toString()); + cell.setCellStyle(childTitleCellStyle); + + + for (int j = 0; j < childrenList.size(); j++) { + WeaTableColumnGroup childrenItem = (WeaTableColumnGroup) childrenList.get(j); + + XSSFCell subHeader = row1.createCell(startIndex + j, CellType.STRING); + subHeader.setCellValue(childrenItem.getText().toString()); + subHeader.setCellStyle(titleCellStyle); + //设置列宽 + sheet.setColumnWidth(startIndex + j, Math.max(12, childrenItem.getText().length() * 4) * 256); + } + + startIndex += childrenList.size(); + + } + + } + + for (int rowIndex = 1; rowIndex < rowList.size(); rowIndex++) { + List infoList = rowList.get(rowIndex); + XSSFRow row = sheet.createRow(rowIndex + 3); + float height = 18; + float finalHeight = 18; + + for (int cellIndex = 0; cellIndex < infoList.size(); cellIndex++) { + XSSFCell cell = row.createCell(cellIndex); + + if (rowIndex == 0) { + cell.setCellStyle(titleCellStyle); + } else { + if (lastRowRed && rowIndex == rowList.size() - 1) { + cell.setCellStyle(redCellStyle); + } else { + cell.setCellStyle(cellStyle); + } + } + Object o = infoList.get(cellIndex); + if (o instanceof String) { + cell.setCellType(CellType.STRING); + cell.setCellValue(String.valueOf(o)); + } else if (o instanceof BigDecimal) { + cell.setCellType(CellType.NUMERIC); + cell.setCellValue(o == null ? 0 : ((BigDecimal) o).doubleValue()); + } else if (o instanceof Boolean) { + cell.setCellType(CellType.BOOLEAN); + cell.setCellValue(String.valueOf(o)); + } else if (o instanceof Date) { + cell.setCellType(CellType.STRING); + cell.setCellValue(SalaryDateUtil.getFormatLocalDate((Date) o)); + } else { + cell.setCellType(CellType.STRING); + cell.setCellValue(o == null ? "" : o.toString()); + } + + //判断是否要调整高度 + int width = sheet.getColumnWidth(cellIndex) / 256; + finalHeight = getFinalHeight(o, width, finalHeight, height); + } + row.setHeightInPoints(finalHeight); + } + return workbook; + } + public static float getFinalHeight(Object o, int width, float finalHeight, float height) { if (o != null && getStrlength(o.toString()) > width) { float remainder = getStrlength(o.toString()) % width; diff --git a/src/com/engine/salary/web/SalaryAcctController.java b/src/com/engine/salary/web/SalaryAcctController.java index df8a8e68f..80b7d80ca 100644 --- a/src/com/engine/salary/web/SalaryAcctController.java +++ b/src/com/engine/salary/web/SalaryAcctController.java @@ -1096,23 +1096,19 @@ public class SalaryAcctController { public Response exportndjjReport(@Context HttpServletRequest request, @Context HttpServletResponse response) { try { NbjhSalaryReportParam param = new NbjhSalaryReportParam(); - String startDate = request.getParameter("startDate"); - if (StringUtils.isNotBlank(startDate)) { - param.setStartDate(startDate); + String year = request.getParameter("year"); + if (StringUtils.isNotBlank(year)) { + param.setYear(year); } - String endDate = request.getParameter("endDate"); - if (StringUtils.isNotBlank(endDate)) { - param.setEndDate(endDate); - } - String departmentIds = request.getParameter("departmentIds"); - if (StringUtils.isNotBlank(departmentIds)) { - List departmentIdList = Arrays.stream(departmentIds.split(",")).filter(NumberUtils::isCreatable).map(Long::valueOf).collect(Collectors.toList()); - param.setDepartmentIds(departmentIdList); + String zwcj = request.getParameter("zwcj"); + if (StringUtils.isNotBlank(zwcj)) { + param.setZwcj(zwcj); } + User user = HrmUserVarify.getUser(request, response); XSSFWorkbook workbook = getSalaryAcctResultWrapper(user).exportNdjjReport(param); String time = LocalDate.now().toString(); - String fileName = "月按实际部分工资汇总表" + time; + String fileName = "年度奖金" + time; try { fileName = URLEncoder.encode(fileName + ".xlsx", "UTF-8"); } catch (UnsupportedEncodingException e) { @@ -1125,7 +1121,7 @@ public class SalaryAcctController { response.setContentType("application/octet-stream"); return Response.ok(output).header("Content-disposition", "attachment;filename=" + fileName).header("Cache-Control", "no-cache").build(); } catch (Exception e) { - log.error("月按实际部分工资汇总表", e); + log.error("年度奖金", e); throw e; } } @@ -1139,5 +1135,110 @@ public class SalaryAcctController { User user = HrmUserVarify.getUser(request, response); return new ResponseResult>(user).run(getSalaryAcctResultWrapper(user)::ndjjBpReport, param); } + + // 年度奖金报批表合计行 + @POST + @Path("/acctresult/ndjjBpReportSum") + @Produces(MediaType.APPLICATION_JSON) + public String ndjjBpReportSum(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody NbjhSalaryReportParam param) { + User user = HrmUserVarify.getUser(request, response); + return new ResponseResult>(user).run(getSalaryAcctResultWrapper(user)::ndjjBpReportSum, param); + } + + /** + * 导出年度奖金表 + */ + @GET + @Path("/acctresult/exportNdjjBpReport") + @Produces(MediaType.APPLICATION_OCTET_STREAM) + public Response exportNdjjBpReport(@Context HttpServletRequest request, @Context HttpServletResponse response) { + try { + NbjhSalaryReportParam param = new NbjhSalaryReportParam(); + String year = request.getParameter("year"); + if (StringUtils.isNotBlank(year)) { + param.setYear(year); + } + String zwcj = request.getParameter("zwcj"); + if (StringUtils.isNotBlank(zwcj)) { + param.setZwcj(zwcj); + } + + User user = HrmUserVarify.getUser(request, response); + XSSFWorkbook workbook = getSalaryAcctResultWrapper(user).exportNdjjBpReport(param); + String time = LocalDate.now().toString(); + String fileName = "年度奖金报批" + time; + try { + fileName = URLEncoder.encode(fileName + ".xlsx", "UTF-8"); + } catch (UnsupportedEncodingException e) { + e.printStackTrace(); + } + StreamingOutput output = outputStream -> { + workbook.write(outputStream); + outputStream.flush(); + }; + response.setContentType("application/octet-stream"); + return Response.ok(output).header("Content-disposition", "attachment;filename=" + fileName).header("Cache-Control", "no-cache").build(); + } catch (Exception e) { + log.error("年度奖金报批", e); + throw e; + } + } + + // 实际计提表 + @POST + @Path("/acctresult/sjjtReport") + @Produces(MediaType.APPLICATION_JSON) + public String sjjtReport(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody NbjhSalaryReportParam param) { + User user = HrmUserVarify.getUser(request, response); + return new ResponseResult>(user).run(getSalaryAcctResultWrapper(user)::sjjtReport, param); + } + + // 实际计提表合计行 + @POST + @Path("/acctresult/sjjtReportSum") + @Produces(MediaType.APPLICATION_JSON) + public String sjjtReportSum(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody NbjhSalaryReportParam param) { + User user = HrmUserVarify.getUser(request, response); + return new ResponseResult>(user).run(getSalaryAcctResultWrapper(user)::sjjtReportSum, param); + } + + /** + * 导出实际计提表 + */ + @GET + @Path("/acctresult/exportSjjtReport") + @Produces(MediaType.APPLICATION_OCTET_STREAM) + public Response exportSjjtReport(@Context HttpServletRequest request, @Context HttpServletResponse response) { + try { + NbjhSalaryReportParam param = new NbjhSalaryReportParam(); + String dyhzReport = request.getParameter("dyhzReport"); + if (StringUtils.isNotBlank(dyhzReport)) { + param.setDyhzReport(dyhzReport.equals("true")); + } + String startDate = request.getParameter("startDate"); + if (StringUtils.isNotBlank(startDate)) { + param.setStartDate(startDate); + } + + User user = HrmUserVarify.getUser(request, response); + XSSFWorkbook workbook = getSalaryAcctResultWrapper(user).exportSjjtReport(param); + String time = LocalDate.now().toString(); + String fileName = "年度奖金报批" + time; + try { + fileName = URLEncoder.encode(fileName + ".xlsx", "UTF-8"); + } catch (UnsupportedEncodingException e) { + e.printStackTrace(); + } + StreamingOutput output = outputStream -> { + workbook.write(outputStream); + outputStream.flush(); + }; + response.setContentType("application/octet-stream"); + return Response.ok(output).header("Content-disposition", "attachment;filename=" + fileName).header("Cache-Control", "no-cache").build(); + } catch (Exception e) { + log.error("年度奖金报批", e); + throw e; + } + } /**********************************宁波精华报表 end*********************************/ } diff --git a/src/com/engine/salary/wrapper/SalaryAcctResultWrapper.java b/src/com/engine/salary/wrapper/SalaryAcctResultWrapper.java index 0b9720273..98030a661 100644 --- a/src/com/engine/salary/wrapper/SalaryAcctResultWrapper.java +++ b/src/com/engine/salary/wrapper/SalaryAcctResultWrapper.java @@ -357,7 +357,6 @@ public class SalaryAcctResultWrapper extends Service implements SalaryAcctResult * @param param */ public Map ndjjReport(NbjhSalaryReportParam param) { - param.setYasjbfgzhzReport(true); return getSalaryAcctResultService(user).ndjjReport(param); } @@ -367,9 +366,8 @@ public class SalaryAcctResultWrapper extends Service implements SalaryAcctResult * @param param */ public Map ndjjReportSum(NbjhSalaryReportParam param) { - param.setYasjbfgzhzReport(true); param.setSum(true); - return getSalaryAcctResultService(user).ndjjReportSum(param); + return getSalaryAcctResultService(user).ndjjReport(param); } /** @@ -392,6 +390,57 @@ public class SalaryAcctResultWrapper extends Service implements SalaryAcctResult return getSalaryAcctResultService(user).ndjjBpReport(param); } + /** + * 年度奖金表报批合计行 + * + * @param param + */ + public Map ndjjBpReportSum(NbjhSalaryReportParam param) { + param.setSum(true); + return getSalaryAcctResultService(user).ndjjBpReport(param); + } + + /** + * 导出年度奖金表 + * @param param + * @return + */ + public XSSFWorkbook exportNdjjBpReport(NbjhSalaryReportParam param) { + param.setExport(true); + return getSalaryAcctResultService(user).exportNdjjBpReport(param); + } + + + /** + * 实际计提表 + * + * @param param + * @return + */ + public Map sjjtReport(NbjhSalaryReportParam param) { + return getSalaryAcctResultService(user).sjjtReport(param); + } + + /** + * 实际计提表合计行 + * + * @param param + */ + public Map sjjtReportSum(NbjhSalaryReportParam param) { + param.setSum(true); + return getSalaryAcctResultService(user).sjjtReport(param); + } + + /** + * 导出实际计提表 + * @param param + * @return + */ + public XSSFWorkbook exportSjjtReport(NbjhSalaryReportParam param) { + param.setExport(true); + return getSalaryAcctResultService(user).exportSjjtReport(param); + } + /** * 薪资核算-校验