西部信托二开,报表合计

This commit is contained in:
钱涛 2025-11-18 10:54:41 +08:00
parent 682f7d0493
commit c2242a1659
2 changed files with 78 additions and 2 deletions

View File

@ -142,4 +142,12 @@ public class SalaryStatisticsEmployeeController {
User user = HrmUserVarify.getUser(request, response);
return new ResponseResult<SalaryStatisticsEmployeeSalaryQueryParam, Map<String, Object>>(user).run(getSalaryStatisticsEmployeeWrapper(user)::salaryReport, queryParam);
}
@POST
@Path("/salaryReportSum")
@Produces(MediaType.APPLICATION_JSON)
public String salaryReportSum(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody SalaryStatisticsEmployeeSalaryQueryParam queryParam) {
User user = HrmUserVarify.getUser(request, response);
return new ResponseResult<SalaryStatisticsEmployeeSalaryQueryParam, Map<String, Object>>(user).run(getSalaryStatisticsEmployeeWrapper(user)::salaryReportSum, queryParam);
}
}

View File

@ -427,8 +427,6 @@ public class SalaryStatisticsEmployeeWrapper extends Service {
List<WeaTableColumn> weaTableColumns = new ArrayList<>();
weaTableColumns.add(new WeaTableColumn("100px", SalaryI18nUtil.getI18nLabel(87614, "薪资所属月"), "salaryMonth"));
weaTableColumns.add(new WeaTableColumn("100px", SalaryI18nUtil.getI18nLabel(0, "姓名"), "userName"));
weaTableColumns.add(new WeaTableColumn("100px", SalaryI18nUtil.getI18nLabel(0, "部门"), "department"));
weaTableColumns.add(new WeaTableColumn("100px", SalaryI18nUtil.getI18nLabel(0, "工号"), "workCode"));
String salaryItemIds = new BaseBean().getPropValue("xbxtSalaryReport", "salaryItemIds");
List<Long> ids = Arrays.stream(salaryItemIds.split(",")).map(Long::valueOf).collect(Collectors.toList());
@ -446,4 +444,74 @@ public class SalaryStatisticsEmployeeWrapper extends Service {
resultMap.put("pageInfo", pageInfo);
return resultMap;
}
public Map<String, Object> salaryReportSum(SalaryStatisticsEmployeeSalaryQueryParam queryParam) {
Map<String, Object> resultMap = Maps.newHashMap();
Map<String, Object> sumResultMap = Maps.newHashMap();
resultMap.put("sumRow", sumResultMap);
if (StringUtils.isBlank(queryParam.getStartDateStr()) || StringUtils.isBlank(queryParam.getEndDateStr())) {
return resultMap;
}
// 获取发薪人员
List<Date> dataParam = new ArrayList<>();
if (StringUtils.isNotBlank(queryParam.getStartDateStr())) {
dataParam.add(SalaryDateUtil.dateStrToLocalTime(queryParam.getStartDateStr() + "-01 00:00:00"));
}
if (StringUtils.isNotBlank(queryParam.getEndDateStr())) {
dataParam.add(SalaryDateUtil.dateStrToLocalTime(queryParam.getEndDateStr() + "-01 00:00:00"));
}
Set<Date> salaryMonths = SalaryStatisticsEmployeeBO.getSalaryMonths(null, dataParam)
.stream()
.map(SalaryDateUtil::dateStrToLocalYearMonth)
.collect(Collectors.toSet());
//工资单数据按照已发放的工资单分页
SalarySendInfoPO build = SalarySendInfoPO.builder().salaryMonths(salaryMonths).employeeId((long) user.getUID()).build();
List<SalarySendInfoPO> list = getSalarySendInfoMapper().listSome(build);
List<Long> recordIds = SalaryEntityUtil.properties(list, SalarySendInfoPO::getSalaryAcctRecordId, Collectors.toList());
SalaryAcctEmployeeQueryParam salaryAcctEmployeeQueryParam = SalaryAcctEmployeeQueryParam.builder()
.salaryAcctRecordIds(recordIds)
.employeeIds(Collections.singletonList((long) user.getUID()))
.build();
List<SalaryAcctEmployeePO> salaryAcctEmployeeList = getSalaryAcctEmployeeService(user).listByParam(salaryAcctEmployeeQueryParam);
salaryAcctEmployeeList = salaryAcctEmployeeList.stream().sorted((a,b)->-a.getSalaryMonth().compareTo(b.getSalaryMonth())).collect(Collectors.toList());
List<List<SalaryAcctEmployeePO>> empParts = Lists.partition(salaryAcctEmployeeList, 500);
for (int i = 0; i < empParts.size(); i++) {
// 获取薪资核算结果
SalaryStatisticsEmployeeDetailResultDTO salaryStatisticsEmployeeDetailResult = getSalaryStatisticsEmployeeService(user).getDetailSalaryAcctResultByAcctEmp(empParts.get(i));
List<Map<String, Object>> records = getSalaryStatisticsEmployeeService(user).listDetailPage(salaryStatisticsEmployeeDetailResult, null);
if (CollectionUtils.isNotEmpty(records)) {
List<SalaryItemPO> salaryItems = salaryStatisticsEmployeeDetailResult.getSalaryItemList();
// 过滤只统计数值型薪资项目
salaryItems = salaryItems.stream().filter(salaryItemPO -> salaryItemPO.getDataType().equals(SalaryDataTypeEnum.NUMBER.getValue())).collect(Collectors.toList());
for (SalaryItemPO item : salaryItems) {
BigDecimal sumBigDecimal = new BigDecimal(SalaryStatisticsReportBO.ZERO);
String itemKey = item.getId() + SalaryConstant.DYNAMIC_SUFFIX;
for (Map<String, Object> record : records) {
if (record.containsKey(itemKey)) {
if (Objects.nonNull(record.get(itemKey)) && NumberUtils.isCreatable(record.get(itemKey).toString())) {
sumBigDecimal = sumBigDecimal.add(new BigDecimal(record.get(itemKey).toString()));
}
}
}
Object o = sumResultMap.get(itemKey + "_n");
if (o != null) {
sumBigDecimal = sumBigDecimal.add((BigDecimal) o);
}
sumResultMap.put(itemKey + "_n", sumBigDecimal);
// 薪资项目合计
sumResultMap.put(itemKey, ReportDataUtil.thousandthConvert(sumBigDecimal.toString()));
}
}
}
resultMap.put("sumRow", sumResultMap);
return resultMap;
}
}