导出报表

This commit is contained in:
钱涛 2023-04-24 16:34:23 +08:00
parent 8d00e6ad45
commit 7b4ebd788c
5 changed files with 136 additions and 82 deletions

View File

@ -6,6 +6,8 @@ import com.engine.salary.component.WeaTableColumnGroup;
import com.engine.salary.entity.salaryacct.po.SalaryAcctEmployeePO;
import com.engine.salary.report.common.constant.SalaryStatisticsDimensionConstant;
import com.engine.salary.report.entity.dto.SalaryStatisticsItemRuleDTO;
import com.engine.salary.report.entity.param.ExportColumn;
import com.engine.salary.report.entity.param.ExportCommonParam;
import com.engine.salary.report.entity.param.SalaryStatisticsDimensionSaveParam;
import com.engine.salary.report.entity.param.SalaryStatisticsReportDataQueryParam;
import com.engine.salary.report.entity.po.SalaryStatisticsDimensionPO;
@ -598,7 +600,7 @@ public class SalaryStatisticsReportBO {
}
public static List<Map<String, String>> po2map(List<SalaryAcctEmployeePO> list, Map<Long, Map<String, String>> salaryAcctResultValueMap) {
if(CollectionUtils.isEmpty(list)){
if (CollectionUtils.isEmpty(list)) {
return new ArrayList<>();
}
return list.stream().map(sa -> salaryAcctResultValueMap.get(sa.getId())).collect(Collectors.toList());
@ -952,30 +954,30 @@ public class SalaryStatisticsReportBO {
return result;
}
// public static ExportCommonParam buildExportParam(String dimName, List<WeaTableColumn> weaTableColumns, List<Map<String, String>> records) {
// List<ExportColumn> columns = com.google.common.collect.Lists.newArrayList();
// weaTableColumns.forEach(column -> {
// WeaTableColumnGroup WeaTableColumnGroup = (WeaTableColumnGroup) column;
// ExportColumn exportColumn = new ExportColumn();
// exportColumn.setKeyIndex(WeaTableColumnGroup.getDataIndex());
// exportColumn.setValue(WeaTableColumnGroup.getTitle());
// if (CollectionUtils.isNotEmpty(WeaTableColumnGroup.getChildren())) {
// List<ExportColumn> subColumns = com.google.common.collect.Lists.newArrayList();
// for (WeaTableColumnGroup sub : WeaTableColumnGroup.getChildren()) {
// ExportColumn subColumn = new ExportColumn();
// subColumn.setKeyIndex(sub.getDataIndex());
// subColumn.setValue(sub.getTitle());
// subColumns.add(subColumn);
// }
// exportColumn.setChildren(subColumns);
// }
// columns.add(exportColumn);
// });
// ExportCommonParam exportParam = new ExportCommonParam();
// exportParam.setDimensionName(dimName);
// exportParam.setColumns(columns);
// exportParam.setData(records);
//
// return exportParam;
// }
public static ExportCommonParam buildExportParam(String dimName, List<WeaTableColumn> weaTableColumns, List<Map<String, String>> records) {
List<ExportColumn> columns = com.google.common.collect.Lists.newArrayList();
weaTableColumns.forEach(column -> {
WeaTableColumnGroup WeaTableColumnGroup = (WeaTableColumnGroup) column;
ExportColumn exportColumn = new ExportColumn();
exportColumn.setKeyIndex(WeaTableColumnGroup.getColumn());
exportColumn.setValue(WeaTableColumnGroup.getText());
if (CollectionUtils.isNotEmpty(WeaTableColumnGroup.getChildren())) {
List<ExportColumn> subColumns = com.google.common.collect.Lists.newArrayList();
for (WeaTableColumnGroup sub : WeaTableColumnGroup.getChildren()) {
ExportColumn subColumn = new ExportColumn();
subColumn.setKeyIndex(sub.getColumn());
subColumn.setValue(sub.getText());
subColumns.add(subColumn);
}
exportColumn.setChildren(subColumns);
}
columns.add(exportColumn);
});
ExportCommonParam exportParam = new ExportCommonParam();
exportParam.setDimensionName(dimName);
exportParam.setColumns(columns);
exportParam.setData(records);
return exportParam;
}
}

View File

@ -49,13 +49,13 @@ public class SalaryStatisticsDimensionServiceImpl extends Service implements Sal
List<String> defaultDimensionNames = Arrays.asList(
SalaryI18nUtil.getI18nLabel(87614, "薪资所属月"),
SalaryI18nUtil.getI18nLabel(86184, "个税扣缴义务人"),
SalaryI18nUtil.getI18nLabel(145212, "收入所得类型"),
// SalaryI18nUtil.getI18nLabel(145212, "收入所得类型"),
SalaryI18nUtil.getI18nLabel(107369, "分部"),
SalaryI18nUtil.getI18nLabel(86185, "部门"),
SalaryI18nUtil.getI18nLabel(90633, "岗位"),
SalaryI18nUtil.getI18nLabel(98623, "职级"),
SalaryI18nUtil.getI18nLabel(109332, "人事状态"),
SalaryI18nUtil.getI18nLabel(151914, "人员类型"),
// SalaryI18nUtil.getI18nLabel(90633, "岗位"),
// SalaryI18nUtil.getI18nLabel(98623, "职级"),
// SalaryI18nUtil.getI18nLabel(109332, "人事状态"),
// SalaryI18nUtil.getI18nLabel(151914, "人员类型"),
SalaryI18nUtil.getI18nLabel(100133, "人员"),
SalaryI18nUtil.getI18nLabel(157163, "年度"),
SalaryI18nUtil.getI18nLabel(173199, "半年度"),
@ -64,13 +64,13 @@ public class SalaryStatisticsDimensionServiceImpl extends Service implements Sal
List<String> defaultDimensionCodes = Arrays.asList(
SalaryStatisticsDimensionConstant.DM_SALARY_MONTH,
SalaryStatisticsDimensionConstant.DM_TAX_AGENT,
SalaryStatisticsDimensionConstant.DM_INCOME_CATEGORY,
// SalaryStatisticsDimensionConstant.DM_INCOME_CATEGORY,
SalaryStatisticsDimensionConstant.DM_SUB_COMPANY,
SalaryStatisticsDimensionConstant.DM_DEPARTMENT,
SalaryStatisticsDimensionConstant.DM_POSITION,
SalaryStatisticsDimensionConstant.DM_GRADE,
SalaryStatisticsDimensionConstant.DM_HRM_STATUS,
SalaryStatisticsDimensionConstant.DM_EMPLOYEE_TYPE,
// SalaryStatisticsDimensionConstant.DM_POSITION,
// SalaryStatisticsDimensionConstant.DM_GRADE,
// SalaryStatisticsDimensionConstant.DM_HRM_STATUS,
// SalaryStatisticsDimensionConstant.DM_EMPLOYEE_TYPE,
SalaryStatisticsDimensionConstant.DM_EMPLOYEE,
SalaryStatisticsDimensionConstant.DM_YEAR,
SalaryStatisticsDimensionConstant.DM_HALF_YEAR,

View File

@ -410,7 +410,7 @@ public class SalaryStatisticsReportServiceImpl extends Service implements Salary
List<Date> salaryMonthList = listMap.keySet().stream().sorted().collect(Collectors.toList());
salaryMonthList.forEach(k -> {
Map<String, Object> temp = new HashMap<>();
temp.put(DM, k);
temp.put(DM, SalaryDateUtil.getFormatYearMonth(k));
temp.putAll(SalaryStatisticsReportBO.calculateItem(listMap.get(k), lastListMap.get(ReportTimeUtil.getLastYearMonth(k)), sameListMap.get(ReportTimeUtil.getSameYearMonth(k)), salaryAcctResultValueMap, data.getSalaryStatisticsItemList()));
records.add(temp);
});

View File

@ -8,6 +8,8 @@ import com.engine.salary.report.entity.param.SalaryStatisticsSearchConditionSave
import com.engine.salary.report.wrapper.SalaryStatisticsReportWrapper;
import com.engine.salary.util.ResponseResult;
import io.swagger.v3.oas.annotations.parameters.RequestBody;
import lombok.extern.slf4j.Slf4j;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import weaver.hrm.HrmUserVarify;
import weaver.hrm.User;
@ -16,6 +18,11 @@ import javax.servlet.http.HttpServletResponse;
import javax.ws.rs.*;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.StreamingOutput;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.time.LocalDate;
import java.util.Collection;
import java.util.List;
import java.util.Map;
@ -28,6 +35,7 @@ import java.util.Map;
* @author qiantao
* @version 1.0
**/
@Slf4j
public class SalaryStatisticsReportController {
private SalaryStatisticsReportWrapper getSalaryStatisticsReportWrapper(User user) {
@ -133,15 +141,37 @@ public class SalaryStatisticsReportController {
return new ResponseResult<SalaryStatisticsReportDataQueryParam, Map<String, Object>>(user).run(getSalaryStatisticsReportWrapper(user)::getData, param);
}
// /**
// * 导出报表数据
// *
// * @param param
// * @return
// */
// @PostMapping("/exportData")
// @ApiOperation("导出报表数据")
// @WeaPermission(publicPermission = true)
// public WeaResult<Map<String, String>> exportData(@RequestBody SalaryStatisticsReportDataQueryParam param) {
// return WeaResult.success(salaryStatisticsReportWrapper.exportData(param, UserContext.getCurrentEmployeeId(), TenantContext.getCurrentTenantKey()));
/**
* 导出报表数据
*
* @param param
* @return
*/
@POST
@Path("/acctemployee/export")
@Produces(MediaType.APPLICATION_OCTET_STREAM)
public Response exportData(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody SalaryStatisticsReportDataQueryParam param) {
try {
User user = HrmUserVarify.getUser(request, response);
Map<String, Object> map = getSalaryStatisticsReportWrapper(user).exportData(param);
XSSFWorkbook workbook = (XSSFWorkbook) map.get("workbook");
String time = LocalDate.now().toString();
String fileName = map.get("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;
}
}
}

View File

@ -23,9 +23,14 @@ import com.engine.salary.report.service.impl.SalaryStatisticsItemServiceImpl;
import com.engine.salary.report.service.impl.SalaryStatisticsReportServiceImpl;
import com.engine.salary.report.service.impl.SubTableExportServiceImpl;
import com.engine.salary.util.*;
import com.engine.salary.util.excel.ExcelUtilPlus;
import com.engine.salary.util.page.PageInfo;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.collections4.MapUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.springframework.stereotype.Component;
import weaver.hrm.User;
@ -225,42 +230,59 @@ public class SalaryStatisticsReportWrapper extends Service {
* 导出报表数据
*
* @param param
* @param employeeId
* @param tenantKey
* @return
*/
public Map<String, String> exportData(SalaryStatisticsReportDataQueryParam param, Long employeeId, String tenantKey) {
// if (param.getId() == null || param.getDimensionId() == null) {
// throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(84026, "参数错误"));
// }
//
// SalaryStatisticsReportPO po = this.getSalaryStatisticsReportService(user).getById(param.getId());
// if (po == null) {
// throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(161845, "薪酬统计报表不存在"));
// }
// SalaryStatisticsDimensionPO dimension = getSalaryStatisticsDimensionService(user).getById(param.getDimensionId());
// if (dimension == null) {
// throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(161300, "统计维度不存在"));
// }
// // 查询自定义统计项目
// List<SalaryStatisticsItemPO> salaryStatisticsItemList = this.getSalaryStatisticsItemService(user).listByStatisticsReportId(po.getId());
// // 列表data
// Page<Map<String, Object>> page = this.getSalaryStatisticsReportService(user).buildReportRecords(dimension, param, po, salaryStatisticsItemList);
// // 组装合计
// Map<String, Object> countResultMap = SalaryStatisticsReportBO.buildTotal(page, salaryStatisticsItemList);
// if (CollectionUtils.isNotEmpty(page.getRecords()) && MapUtils.isNotEmpty(countResultMap)) {
// page.getRecords().add(countResultMap);
// }
// // 获取数据
// List<Map<String, String>> records = CollectionUtils.emptyIfNull(page.getRecords()).stream().map(m -> m.entrySet().stream().collect(Collectors.toMap(Map.Entry::getKey, e -> e.getValue() + StringUtils.EMPTY))).collect(Collectors.toList());
//
// // 获取列头
// List<WeaTableColumn> weaTableColumns = SalaryStatisticsReportBO.buildReportColumns(dimension.getDimName(), salaryStatisticsItemList);
//
// // 组装导出参数
public Map<String,Object> exportData(SalaryStatisticsReportDataQueryParam param) {
if (param.getId() == null || param.getDimensionId() == null) {
throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(84026, "参数错误"));
}
SalaryStatisticsReportPO po = this.getSalaryStatisticsReportService(user).getById(param.getId());
if (po == null) {
throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(161845, "薪酬统计报表不存在"));
}
SalaryStatisticsDimensionPO dimension = getSalaryStatisticsDimensionService(user).getById(param.getDimensionId());
if (dimension == null) {
throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(161300, "统计维度不存在"));
}
// 查询自定义统计项目
List<SalaryStatisticsItemPO> salaryStatisticsItemList = this.getSalaryStatisticsItemService(user).listByStatisticsReportId(po.getId());
// 列表data
PageInfo<Map<String, Object>> page = this.getSalaryStatisticsReportService(user).buildReportRecords(dimension, param, po, salaryStatisticsItemList);
// 组装合计
Map<String, Object> countResultMap = SalaryStatisticsReportBO.buildTotal(page, salaryStatisticsItemList, (long) user.getUID());
List<Map<String, Object>> list = page.getList();
if (CollectionUtils.isNotEmpty(list) && MapUtils.isNotEmpty(countResultMap)) {
list.add(countResultMap);
}
// 获取数据
List<Map<String, String>> records = list.stream().map(m -> m.entrySet().stream().collect(Collectors.toMap(Map.Entry::getKey, e -> e.getValue() + StringUtils.EMPTY))).collect(Collectors.toList());
// 获取列头
List<WeaTableColumn> weaTableColumns = SalaryStatisticsReportBO.buildReportColumns(dimension.getDimName(), salaryStatisticsItemList);
// 组装导出参数
// ExportCommonParam exportParam = SalaryStatisticsReportBO.buildExportParam(dimension.getDimName(), weaTableColumns, records);
// exportParam.setSheetName(SalaryI18nUtil.getI18nLabel(179263, "薪酬统计报表") + "-" + exportParam.getDimensionName());
// return getSubTableExportService(user).exportCommon(exportParam, UserContext.getCurrentUser(), TenantContext.get());
return null;
//
List rows = new ArrayList<>();
rows.add(weaTableColumns);
for (Map<String, String> map : records) {
List<Object> row = Lists.newArrayListWithExpectedSize(records.size());
for (String k : map.keySet()) {
row.add(map.getOrDefault(k, StringUtils.EMPTY));
}
rows.add(row);
}
String sheetName = SalaryI18nUtil.getI18nLabel(179263, "薪酬统计报表") + "-" + dimension.getDimName();
XSSFWorkbook book = ExcelUtilPlus.genWorkbookWithChildTitleColumn(rows, sheetName, true);
Map<String,Object> map = new HashMap<>();
map.put("workbook",book);
map.put("fileName",sheetName);
return map;
}
}