汇通建设 增加导出、搜索

This commit is contained in:
Harryxzy 2024-10-31 16:24:57 +08:00
parent 17f6d1e7ca
commit 1c6b55f8f5
6 changed files with 204 additions and 50 deletions

View File

@ -35,5 +35,11 @@ public class HtjsApprovalParam extends BaseQueryParam {
List<HtXcssItemDTO> htXcssItemDTOList;
String userName;
List<Long> departmentIds;
boolean sum;
}

View File

@ -145,6 +145,10 @@ public interface SalaryAcctExcelService {
*/
Map<String, Object> exportTemplateList(SalaryAcctResultTemplateSaveParam param);
XSSFWorkbook exportHtjsXcssDataDetail(HtjsApprovalParam param);
XSSFWorkbook exportXczfsqDataDetail(HtjsApprovalParam param);
//
// /**
// * 薪资核算结果校验异常导出

View File

@ -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<HtXcssItemDTO> htXcssItemDTOList = JSON.parseArray(xcssConfig, HtXcssItemDTO.class);
param.setHtXcssItemDTOList(htXcssItemDTOList);
Map<String, Object> resultMap = getSalaryAcctResultService(user).htjsXcssDataDetail(param);
List<Map<String, Object>> resultList = ((PageInfo<Map<String, Object>>) resultMap.get("pageInfo")).getList();
List<WeaTableColumnGroup> columns = (List<WeaTableColumnGroup>)resultMap.get("columns");
List<Object> columnList = columns.stream().map(WeaTableColumnGroup::getText).collect(Collectors.toList());
List<List<Object>> rows = new ArrayList<>();
rows.add(columnList);
for (Map<String, Object> result : resultList) {
List<Object> 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<HtXcssItemDTO> htXcssItemDTOList = JSON.parseArray(xcssConfig, HtXcssItemDTO.class);
param.setHtXcssItemDTOList(htXcssItemDTOList);
Map<String, Object> resultMap = getSalaryAcctResultService(user).htjsXcssDataDetail(param);
List<Map<String, Object>> resultList = ((PageInfo<Map<String, Object>>) resultMap.get("pageInfo")).getList();
List<WeaTableColumnGroup> columns = (List<WeaTableColumnGroup>)resultMap.get("columns");
List<Object> columnList = columns.stream().map(WeaTableColumnGroup::getText).collect(Collectors.toList());
List<List<Object>> rows = new ArrayList<>();
rows.add(columnList);
for (Map<String, Object> result : resultList) {
List<Object> 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<String, Object> exportCheckResult(
// SalaryCheckResultExportParam exportParam,

View File

@ -1323,9 +1323,20 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe
List<SalaryAcctEmployeePO> 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<Long> empIdList = SalaryEntityUtil.properties(salaryAcctEmployeePOList, SalaryAcctEmployeePO::getEmployeeId);
List<DataCollectionEmployee> employeeList = getSalaryEmployeeService(user).listByIds(empIdList.stream().collect(Collectors.toList()));
List<Long> 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<SalaryAcctEmployeePO> salaryAcctEmployeePageInfo = SalaryPageUtil.buildPage(param.getCurrent(), param.getPageSize(), salaryAcctEmployeePOList, SalaryAcctEmployeePO.class);
if (param.isSum()) {
salaryAcctEmployeePageInfo.setList(salaryAcctEmployeePOList);
}
Map<String, Long> 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<String, Object> 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<SalaryAcctRecordPO> salaryAcctRecordPOS = getSalaryAcctRecordService(user).listBySalaryMonth(LocalDateRange.builder().endDate(lastMonthDate).build());
salaryAcctRecordPOS = salaryAcctRecordPOS.stream().filter(record -> record.getStatus() > SalaryAcctRecordStatusEnum.NOT_ARCHIVED.getValue()).collect(Collectors.toList());
// 获取薪资核算人员
List<Long> salaryAcctRecordIds = salaryAcctRecordPOS.stream().map(SalaryAcctRecordPO::getId).collect(Collectors.toList());
List<SalaryAcctEmployeePO> salaryAcctEmployeeList = getSalaryAcctEmployeeService(user).listBySalaryAcctRecordIds(salaryAcctRecordIds);
// 过滤单位
salaryAcctEmployeeList = salaryAcctEmployeeList.stream().filter(acctEmp -> acctEmp.getSubcompanyId() != null && param.getSubcompanyId().equals(acctEmp.getSubcompanyId())).collect(Collectors.toList());
List<Long> salaryAcctEmpIds = SalaryEntityUtil.properties(salaryAcctEmployeeList, SalaryAcctEmployeePO::getId, Collectors.toList());
// 获取薪资核算结果
List<SalaryAcctResultPO> 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<SalaryAcctRecordPO> salaryAcctRecordPOS = getSalaryAcctRecordService(user).listBySalaryMonth(LocalDateRange.builder().endDate(lastMonthDate).build());
// salaryAcctRecordPOS = salaryAcctRecordPOS.stream().filter(record -> record.getStatus() > SalaryAcctRecordStatusEnum.NOT_ARCHIVED.getValue()).collect(Collectors.toList());
// // 获取薪资核算人员
// List<Long> salaryAcctRecordIds = salaryAcctRecordPOS.stream().map(SalaryAcctRecordPO::getId).collect(Collectors.toList());
// List<SalaryAcctEmployeePO> salaryAcctEmployeeList = getSalaryAcctEmployeeService(user).listBySalaryAcctRecordIds(salaryAcctRecordIds);
// // 过滤单位
// salaryAcctEmployeeList = salaryAcctEmployeeList.stream().filter(acctEmp -> acctEmp.getSubcompanyId() != null && param.getSubcompanyId().equals(acctEmp.getSubcompanyId())).collect(Collectors.toList());
// List<Long> salaryAcctEmpIds = SalaryEntityUtil.properties(salaryAcctEmployeeList, SalaryAcctEmployeePO::getId, Collectors.toList());
// // 获取薪资核算结果
// List<SalaryAcctResultPO> 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<String, Object> 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;
}

View File

@ -961,6 +961,37 @@ public class SalaryAcctController {
return new ResponseResult<HtjsApprovalParam, Map<String, Object>>(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<HtjsApprovalParam, Map<String, Object>>(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

View File

@ -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);
}
// /**
// * 薪资核算结果校验异常导出
// *