导出报表
This commit is contained in:
parent
8d00e6ad45
commit
7b4ebd788c
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
});
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue