diff --git a/src/com/engine/salary/entity/salaryacct/param/HtjsApprovalParam.java b/src/com/engine/salary/entity/salaryacct/param/HtjsApprovalParam.java index b92863a21..63c9991cb 100644 --- a/src/com/engine/salary/entity/salaryacct/param/HtjsApprovalParam.java +++ b/src/com/engine/salary/entity/salaryacct/param/HtjsApprovalParam.java @@ -35,5 +35,11 @@ public class HtjsApprovalParam extends BaseQueryParam { List htXcssItemDTOList; + String userName; + + List departmentIds; + + boolean sum; + } diff --git a/src/com/engine/salary/service/SalaryAcctExcelService.java b/src/com/engine/salary/service/SalaryAcctExcelService.java index e23815ba3..59c11f50d 100644 --- a/src/com/engine/salary/service/SalaryAcctExcelService.java +++ b/src/com/engine/salary/service/SalaryAcctExcelService.java @@ -145,6 +145,10 @@ public interface SalaryAcctExcelService { */ Map exportTemplateList(SalaryAcctResultTemplateSaveParam param); + XSSFWorkbook exportHtjsXcssDataDetail(HtjsApprovalParam param); + + XSSFWorkbook exportXczfsqDataDetail(HtjsApprovalParam param); + // // /** // * 薪资核算结果校验异常导出 diff --git a/src/com/engine/salary/service/impl/SalaryAcctExcelServiceImpl.java b/src/com/engine/salary/service/impl/SalaryAcctExcelServiceImpl.java index ea1eb3cff..6def18c61 100644 --- a/src/com/engine/salary/service/impl/SalaryAcctExcelServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryAcctExcelServiceImpl.java @@ -2,6 +2,7 @@ package com.engine.salary.service.impl; import cn.hutool.core.util.NumberUtil; import cn.hutool.core.util.StrUtil; +import com.alibaba.fastjson.JSON; import com.api.formmode.mybatis.util.SqlProxyHandle; import com.cloudstore.dev.api.util.Util_DataCache; import com.engine.common.util.ServiceUtil; @@ -17,10 +18,7 @@ import com.engine.salary.entity.salaryacct.bo.SalaryAcctConfig; import com.engine.salary.entity.salaryacct.bo.SalaryAcctEmployeeBO; import com.engine.salary.entity.salaryacct.bo.SalaryAcctResultBO; import com.engine.salary.entity.salaryacct.bo.SalaryAcctResultLogBO; -import com.engine.salary.entity.salaryacct.dto.SalaryAccEmployeeListDTO; -import com.engine.salary.entity.salaryacct.dto.SalaryAcctImportFieldDTO; -import com.engine.salary.entity.salaryacct.dto.SalaryAcctResultTemplateDTO; -import com.engine.salary.entity.salaryacct.dto.SalaryComparisonResultListDTO; +import com.engine.salary.entity.salaryacct.dto.*; import com.engine.salary.entity.salaryacct.param.*; import com.engine.salary.entity.salaryacct.po.*; import com.engine.salary.entity.salaryitem.po.SalaryItemPO; @@ -71,9 +69,11 @@ import org.apache.poi.xssf.usermodel.XSSFWorkbook; import org.springframework.beans.BeanUtils; import org.springframework.util.StopWatch; import weaver.file.ImageFileManager; +import weaver.general.BaseBean; import weaver.hrm.User; import java.io.InputStream; +import java.io.UnsupportedEncodingException; import java.math.BigDecimal; import java.util.*; import java.util.stream.Collectors; @@ -1585,6 +1585,68 @@ public class SalaryAcctExcelServiceImpl extends Service implements SalaryAcctExc return resultMap; } + + @Override + public XSSFWorkbook exportHtjsXcssDataDetail(HtjsApprovalParam param) { + param.setSum(true); + // 获取需要查询的薪资项目 + BaseBean baseBean = new BaseBean(); + String xcssConfig = baseBean.getPropValue("htjsSalaryApproval", "xcss_config"); + try { + xcssConfig = new String(xcssConfig.getBytes("ISO-8859-1"), "UTF-8"); + } catch (UnsupportedEncodingException e) { + throw new RuntimeException(e); + } + List htXcssItemDTOList = JSON.parseArray(xcssConfig, HtXcssItemDTO.class); + param.setHtXcssItemDTOList(htXcssItemDTOList); + Map resultMap = getSalaryAcctResultService(user).htjsXcssDataDetail(param); + List> resultList = ((PageInfo>) resultMap.get("pageInfo")).getList(); + List columns = (List)resultMap.get("columns"); + List columnList = columns.stream().map(WeaTableColumnGroup::getText).collect(Collectors.toList()); + + List> rows = new ArrayList<>(); + rows.add(columnList); + for (Map result : resultList) { + List singleRow = new ArrayList<>(); + for (WeaTableColumnGroup column : columns) { + singleRow.add(result.getOrDefault(column.getColumn(),"")); + } + rows.add(singleRow); + } + String sheetName = "薪酬送审"; + return ExcelUtilPlus.genWorkbookV2(rows, sheetName); + } + + @Override + public XSSFWorkbook exportXczfsqDataDetail(HtjsApprovalParam param) { + param.setSum(true); + // 获取需要查询的薪资项目 + BaseBean baseBean = new BaseBean(); + String xcssConfig = baseBean.getPropValue("htjsSalaryApproval", "xczf_config"); + try { + xcssConfig = new String(xcssConfig.getBytes("ISO-8859-1"), "UTF-8"); + } catch (UnsupportedEncodingException e) { + throw new RuntimeException(e); + } + List htXcssItemDTOList = JSON.parseArray(xcssConfig, HtXcssItemDTO.class); + param.setHtXcssItemDTOList(htXcssItemDTOList); + Map resultMap = getSalaryAcctResultService(user).htjsXcssDataDetail(param); + List> resultList = ((PageInfo>) resultMap.get("pageInfo")).getList(); + List columns = (List)resultMap.get("columns"); + List columnList = columns.stream().map(WeaTableColumnGroup::getText).collect(Collectors.toList()); + + List> rows = new ArrayList<>(); + rows.add(columnList); + for (Map result : resultList) { + List singleRow = new ArrayList<>(); + for (WeaTableColumnGroup column : columns) { + singleRow.add(result.getOrDefault(column.getColumn(),"")); + } + rows.add(singleRow); + } + String sheetName = "薪酬支付申请"; + return ExcelUtilPlus.genWorkbookV2(rows, sheetName); + } // @Override // public Map exportCheckResult( // SalaryCheckResultExportParam exportParam, diff --git a/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java b/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java index a572839a9..b926fa876 100644 --- a/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java @@ -1323,9 +1323,20 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe List salaryAcctEmployeePOList = getSalaryAcctEmployeeService(user).listBySalaryAcctRecordIds(salaryAcctRecordIds); // 根据单位过滤 salaryAcctEmployeePOList = salaryAcctEmployeePOList.stream().filter(acctEmp -> acctEmp.getSubcompanyId() != null && acctEmp.getSubcompanyId().equals(param.getSubcompanyId())).collect(Collectors.toList()); + if (CollectionUtils.isNotEmpty(param.getDepartmentIds())) { + salaryAcctEmployeePOList = salaryAcctEmployeePOList.stream().filter(acctEmp -> param.getDepartmentIds().contains(acctEmp.getDepartmentId())).collect(Collectors.toList()); + } + if (StringUtils.isNotBlank(param.getUserName())) { + Set empIdList = SalaryEntityUtil.properties(salaryAcctEmployeePOList, SalaryAcctEmployeePO::getEmployeeId); + List employeeList = getSalaryEmployeeService(user).listByIds(empIdList.stream().collect(Collectors.toList())); + List empIds = employeeList.stream().filter(emp -> emp.getUsername().contains(param.getUserName())).map(DataCollectionEmployee::getEmployeeId).collect(Collectors.toList()); + salaryAcctEmployeePOList = salaryAcctEmployeePOList.stream().filter(acctEmp -> empIds.contains(acctEmp.getEmployeeId())).collect(Collectors.toList()); + } // 分页 PageInfo salaryAcctEmployeePageInfo = SalaryPageUtil.buildPage(param.getCurrent(), param.getPageSize(), salaryAcctEmployeePOList, SalaryAcctEmployeePO.class); - + if (param.isSum()) { + salaryAcctEmployeePageInfo.setList(salaryAcctEmployeePOList); + } Map salaryItemNameMap = SalaryEntityUtil.convert2Map(getSalaryItemService(user).listAll(), SalaryItemPO::getName, SalaryItemPO::getId); for(HtXcssItemDTO dto : param.getHtXcssItemDTOList()) { @@ -1430,54 +1441,54 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe } // 明细数据 Map dataList = htjsXcssList(param); - // 获取累计数据 - BaseBean baseBean = new BaseBean(); - String itemId = baseBean.getPropValue("htjsSalaryApproval", "xczf_sum_item_id"); - BigDecimal totalValueLastMonth = new BigDecimal(0); - BigDecimal totalValue = new BigDecimal(0); - if (NumberUtils.isCreatable(itemId)) { - SalaryItemPO salaryItemPO = getSalaryItemService(user).getById(Long.valueOf(itemId)); - // 获取截至本月上一个月的核算记录 - Date lastMonthDate = SalaryDateUtil.localDateToDate(SalaryDateUtil.dateToLocalDate(param.getSalaryMonthDate()).plusMonths(-1)); - List salaryAcctRecordPOS = getSalaryAcctRecordService(user).listBySalaryMonth(LocalDateRange.builder().endDate(lastMonthDate).build()); - salaryAcctRecordPOS = salaryAcctRecordPOS.stream().filter(record -> record.getStatus() > SalaryAcctRecordStatusEnum.NOT_ARCHIVED.getValue()).collect(Collectors.toList()); - // 获取薪资核算人员 - List salaryAcctRecordIds = salaryAcctRecordPOS.stream().map(SalaryAcctRecordPO::getId).collect(Collectors.toList()); - List salaryAcctEmployeeList = getSalaryAcctEmployeeService(user).listBySalaryAcctRecordIds(salaryAcctRecordIds); - // 过滤单位 - salaryAcctEmployeeList = salaryAcctEmployeeList.stream().filter(acctEmp -> acctEmp.getSubcompanyId() != null && param.getSubcompanyId().equals(acctEmp.getSubcompanyId())).collect(Collectors.toList()); - List salaryAcctEmpIds = SalaryEntityUtil.properties(salaryAcctEmployeeList, SalaryAcctEmployeePO::getId, Collectors.toList()); - // 获取薪资核算结果 - List resultPOList = listByAcctEmployeeIdsAndSalaryItemIds(salaryAcctEmpIds, Collections.singletonList(salaryItemPO.getId())); - totalValueLastMonth = resultPOList.stream() - .map(SalaryAcctResultPO::getResultValue) - .filter(NumberUtils::isCreatable) - .map(BigDecimal::new) - .reduce(BigDecimal.ZERO, BigDecimal::add); - - // 获取本月的数据 - salaryAcctRecordPOS = getSalaryAcctRecordService(user).listBySalaryMonth(LocalDateRange.builder().fromDate(param.getSalaryMonthDate()).endDate(param.getSalaryMonthDate()).build()); - salaryAcctRecordPOS = salaryAcctRecordPOS.stream().filter(record -> record.getStatus() > SalaryAcctRecordStatusEnum.NOT_ARCHIVED.getValue()).collect(Collectors.toList()); - // 获取薪资核算人员 - salaryAcctRecordIds = salaryAcctRecordPOS.stream().map(SalaryAcctRecordPO::getId).collect(Collectors.toList()); - salaryAcctEmployeeList = getSalaryAcctEmployeeService(user).listBySalaryAcctRecordIds(salaryAcctRecordIds); - // 过滤单位 - salaryAcctEmployeeList = salaryAcctEmployeeList.stream().filter(acctEmp -> acctEmp.getSubcompanyId() != null && param.getSubcompanyId().equals(acctEmp.getSubcompanyId())).collect(Collectors.toList()); - salaryAcctEmpIds = SalaryEntityUtil.properties(salaryAcctEmployeeList, SalaryAcctEmployeePO::getId, Collectors.toList()); - // 获取薪资核算结果 - resultPOList = listByAcctEmployeeIdsAndSalaryItemIds(salaryAcctEmpIds, Collections.singletonList(salaryItemPO.getId())); - BigDecimal thisMonthValue = resultPOList.stream() - .map(SalaryAcctResultPO::getResultValue) - .filter(NumberUtils::isCreatable) - .map(BigDecimal::new) - .reduce(BigDecimal.ZERO, BigDecimal::add); - totalValue = totalValueLastMonth.add(thisMonthValue); - } + // // 获取累计数据 + // BaseBean baseBean = new BaseBean(); + // // String itemId = baseBean.getPropValue("htjsSalaryApproval", "xczf_sum_item_id"); + // BigDecimal totalValueLastMonth = new BigDecimal(0); + // BigDecimal totalValue = new BigDecimal(0); + // if (NumberUtils.isCreatable(itemId)) { + // SalaryItemPO salaryItemPO = getSalaryItemService(user).getById(Long.valueOf(itemId)); + // // 获取截至本月上一个月的核算记录 + // Date lastMonthDate = SalaryDateUtil.localDateToDate(SalaryDateUtil.dateToLocalDate(param.getSalaryMonthDate()).plusMonths(-1)); + // List salaryAcctRecordPOS = getSalaryAcctRecordService(user).listBySalaryMonth(LocalDateRange.builder().endDate(lastMonthDate).build()); + // salaryAcctRecordPOS = salaryAcctRecordPOS.stream().filter(record -> record.getStatus() > SalaryAcctRecordStatusEnum.NOT_ARCHIVED.getValue()).collect(Collectors.toList()); + // // 获取薪资核算人员 + // List salaryAcctRecordIds = salaryAcctRecordPOS.stream().map(SalaryAcctRecordPO::getId).collect(Collectors.toList()); + // List salaryAcctEmployeeList = getSalaryAcctEmployeeService(user).listBySalaryAcctRecordIds(salaryAcctRecordIds); + // // 过滤单位 + // salaryAcctEmployeeList = salaryAcctEmployeeList.stream().filter(acctEmp -> acctEmp.getSubcompanyId() != null && param.getSubcompanyId().equals(acctEmp.getSubcompanyId())).collect(Collectors.toList()); + // List salaryAcctEmpIds = SalaryEntityUtil.properties(salaryAcctEmployeeList, SalaryAcctEmployeePO::getId, Collectors.toList()); + // // 获取薪资核算结果 + // List resultPOList = listByAcctEmployeeIdsAndSalaryItemIds(salaryAcctEmpIds, Collections.singletonList(salaryItemPO.getId())); + // totalValueLastMonth = resultPOList.stream() + // .map(SalaryAcctResultPO::getResultValue) + // .filter(NumberUtils::isCreatable) + // .map(BigDecimal::new) + // .reduce(BigDecimal.ZERO, BigDecimal::add); + // + // // 获取本月的数据 + // salaryAcctRecordPOS = getSalaryAcctRecordService(user).listBySalaryMonth(LocalDateRange.builder().fromDate(param.getSalaryMonthDate()).endDate(param.getSalaryMonthDate()).build()); + // salaryAcctRecordPOS = salaryAcctRecordPOS.stream().filter(record -> record.getStatus() > SalaryAcctRecordStatusEnum.NOT_ARCHIVED.getValue()).collect(Collectors.toList()); + // // 获取薪资核算人员 + // salaryAcctRecordIds = salaryAcctRecordPOS.stream().map(SalaryAcctRecordPO::getId).collect(Collectors.toList()); + // salaryAcctEmployeeList = getSalaryAcctEmployeeService(user).listBySalaryAcctRecordIds(salaryAcctRecordIds); + // // 过滤单位 + // salaryAcctEmployeeList = salaryAcctEmployeeList.stream().filter(acctEmp -> acctEmp.getSubcompanyId() != null && param.getSubcompanyId().equals(acctEmp.getSubcompanyId())).collect(Collectors.toList()); + // salaryAcctEmpIds = SalaryEntityUtil.properties(salaryAcctEmployeeList, SalaryAcctEmployeePO::getId, Collectors.toList()); + // // 获取薪资核算结果 + // resultPOList = listByAcctEmployeeIdsAndSalaryItemIds(salaryAcctEmpIds, Collections.singletonList(salaryItemPO.getId())); + // BigDecimal thisMonthValue = resultPOList.stream() + // .map(SalaryAcctResultPO::getResultValue) + // .filter(NumberUtils::isCreatable) + // .map(BigDecimal::new) + // .reduce(BigDecimal.ZERO, BigDecimal::add); + // totalValue = totalValueLastMonth.add(thisMonthValue); + // } Map resultMap = new HashMap<>(); resultMap.put("columns", dataList.get("columns")); resultMap.put("data", dataList.get("data")); - resultMap.put("ljjhzf",totalValue); - resultMap.put("ljyzf", totalValueLastMonth); + // resultMap.put("ljjhzf",totalValue); + // resultMap.put("ljyzf", totalValueLastMonth); return resultMap; } diff --git a/src/com/engine/salary/web/SalaryAcctController.java b/src/com/engine/salary/web/SalaryAcctController.java index e88365e5b..201160e14 100644 --- a/src/com/engine/salary/web/SalaryAcctController.java +++ b/src/com/engine/salary/web/SalaryAcctController.java @@ -961,6 +961,37 @@ public class SalaryAcctController { return new ResponseResult>(user).run(getSalaryAcctResultWrapper(user)::htjsXcssDataDetail, param); } + /** + * 薪酬送审 数据穿透 导出 + * @param request + * @param response + * @param param + * @return + */ + @POST + @Path("/htjs/exportXcssDataDetail") + @Produces(MediaType.APPLICATION_OCTET_STREAM) + public Response exportHtjsXcssDataDetail(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody HtjsApprovalParam param) { + try { + User user = HrmUserVarify.getUser(request, response); + XSSFWorkbook workbook = getSalaryAcctExcelWrapper(user).exportHtjsXcssDataDetail(param); + String fileName = "薪酬送审" + LocalDate.now(); + 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; + } + } /** @@ -993,6 +1024,38 @@ public class SalaryAcctController { return new ResponseResult>(user).run(getSalaryAcctResultWrapper(user)::htjsXczfsqDataDetail, param); } + /** + * 薪酬支付申请 数据穿透 导出 + * @param request + * @param response + * @param param + * @return + */ + @POST + @Path("/htjs/exportXczfsqDataDetail") + @Produces(MediaType.APPLICATION_OCTET_STREAM) + public Response exportXczfsqDataDetail(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody HtjsApprovalParam param) { + try { + User user = HrmUserVarify.getUser(request, response); + XSSFWorkbook workbook = getSalaryAcctExcelWrapper(user).exportXczfsqDataDetail(param); + String fileName = "薪酬支付申请" + LocalDate.now(); + 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; + } + } + /** * 薪酬支付申请list * @param request diff --git a/src/com/engine/salary/wrapper/SalaryAcctExcelWrapper.java b/src/com/engine/salary/wrapper/SalaryAcctExcelWrapper.java index 6c2db9bd7..b5b442e53 100644 --- a/src/com/engine/salary/wrapper/SalaryAcctExcelWrapper.java +++ b/src/com/engine/salary/wrapper/SalaryAcctExcelWrapper.java @@ -92,6 +92,14 @@ public class SalaryAcctExcelWrapper extends Service { return getSalaryAcctExcelService(user).exportComparisonResultTemplate(exportParam); } + public XSSFWorkbook exportHtjsXcssDataDetail(HtjsApprovalParam param) { + return getSalaryAcctExcelService(user).exportHtjsXcssDataDetail(param); + } + + public XSSFWorkbook exportXczfsqDataDetail(HtjsApprovalParam param) { + return getSalaryAcctExcelService(user).exportXczfsqDataDetail(param); + } + // /** // * 薪资核算结果校验异常导出 // *