领悦报表1:薪酬档案职级统计报表

This commit is contained in:
Harryxzy 2025-09-16 10:47:15 +08:00
parent 4dcb8f2275
commit 9a1b7be680
12 changed files with 779 additions and 0 deletions

View File

@ -244,4 +244,13 @@ public class EmployBiz extends BaseBean {
}
}
public List<SubCompanyInfo> listAllSubCompanyInfoList() {
SqlSession sqlSession = MyBatisFactory.sqlSessionFactory.openSession();
try {
EmployMapper mapper = sqlSession.getMapper(EmployMapper.class);
return mapper.listAllSubCompanyInfoList();
} finally {
sqlSession.close();
}
}
}

View File

@ -27,4 +27,6 @@ public class SubCompanyInfo {
*/
@I18n
private String name;
private Integer showorder;
}

View File

@ -0,0 +1,65 @@
package com.engine.salary.entity.salaryacct.dto;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* @author Harryxzy
* @ClassName LyDazjtjReportDTO
* @date 2025/09/15 9:12
* @description 薪酬档案职级统计报表
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class LyDazjtjReportDTO {
private String lypq;
private Integer lypqShowOrder;
private String lyxm;
private Integer lyxmShowOrder;
// 职级
private String zj;
// 职务角色
private Long zwjsId;
private String zwjs;
// 在职人数
private Integer zzrs;
// 年度收入总额
private String ndsrze;
// 年度收入总额占比
private String ndsrzezb;
// 月度标准工资总额
private String ydbzgzze;
// 月度绩效总额
private String ydjxze;
// 1季度绩效总额
private String yjdjxze;
// 2季度绩效总额
private String ejdjxze;
// 3季度绩效总额
private String sjdjxze;
// 4季度绩效总额
private String sijdjxze;
// 年终奖总额
private String nzjze;
// 季度绩效总额
private String jdjxze;
}

View File

@ -128,6 +128,13 @@ public class SalaryArchivePO {
@ElogTransform(name = "个税扣缴义务人id")
private Long taxAgentId;
private Integer lyzj;
private String lypq;
private String lyxm;
private String lyzwjs;
//---------条件-------

View File

@ -188,4 +188,6 @@ public interface EmployMapper {
List<LyFzhsInfo> listAllFzhsInfo();
List<LyFzhsInfo> listFzhsInfoByDeptIds(@Param("departmentIds")List<Long> departmentIds);
List<SubCompanyInfo> listAllSubCompanyInfoList();
}

View File

@ -475,6 +475,14 @@
where d.subcompanyname = #{name}
</select>
<select id="listAllSubCompanyInfoList" resultType="com.engine.salary.entity.hrm.SubCompanyInfo">
select d.subcompanyname as name,
d.id as id,
d.showorder as showorder
from hrmsubcompany d
</select>
<select id="getDeptInfoById" resultType="com.engine.salary.entity.hrm.DeptInfo">
select d.departmentname as name,
d.id as id,
@ -690,4 +698,5 @@
</select>
</mapper>

View File

@ -154,4 +154,12 @@ public interface LySalaryReportService {
void deleteByIds(List<Long> needDeleteIds);
Map<String, String> getHszb(String ffgsqc);
Map<String, Object> listLyXcdazjtjReport();
XSSFWorkbook exportXcdazjtjReport();
Map<String, Object> listLyXcdazwjstjReport();
XSSFWorkbook exportXcdazwjstjReport();
}

View File

@ -114,6 +114,8 @@ public interface SalaryEmployeeService {
List<SubCompanyInfo> getSubCompanyInfoList(List<Long> subDepartmentIds);
List<SubCompanyInfo> listAllSubCompanyInfoList();
SubCompanyInfo getSubCompanyInfoById(Long subDepartmentId);
List<SubCompanyInfo> getVirtualSubCompanyInfoList(List<Long> virtualSubDepartmentIds);

View File

@ -1,5 +1,7 @@
package com.engine.salary.service.impl;
import cn.hutool.core.bean.BeanUtil;
import com.api.formmode.page.util.Util;
import com.cloudstore.eccom.pc.table.WeaTableColumn;
import com.engine.common.util.ServiceUtil;
import com.engine.core.impl.Service;
@ -7,6 +9,7 @@ import com.engine.salary.common.LocalDateRange;
import com.engine.salary.component.WeaTableColumnGroup;
import com.engine.salary.entity.datacollection.DataCollectionEmployee;
import com.engine.salary.entity.hrm.DeptInfo;
import com.engine.salary.entity.hrm.SubCompanyInfo;
import com.engine.salary.entity.ly.dto.LyFzhsInfo;
import com.engine.salary.entity.ly.param.LySalaryReportQueryParam;
import com.engine.salary.entity.ly.po.LySalaryReportPO;
@ -14,9 +17,12 @@ import com.engine.salary.entity.ly.po.UfGjjInfo;
import com.engine.salary.entity.ly.po.UfSbInfo;
import com.engine.salary.entity.salaryacct.bo.SalaryAcctFormulaBO;
import com.engine.salary.entity.salaryacct.bo.SalaryAcctResultBO;
import com.engine.salary.entity.salaryacct.dto.LyDazjtjReportDTO;
import com.engine.salary.entity.salaryacct.po.SalaryAcctEmployeePO;
import com.engine.salary.entity.salaryacct.po.SalaryAcctRecordPO;
import com.engine.salary.entity.salaryacct.po.SalaryAcctResultPO;
import com.engine.salary.entity.salaryarchive.po.SalaryArchiveItemPO;
import com.engine.salary.entity.salaryarchive.po.SalaryArchivePO;
import com.engine.salary.entity.salaryitem.po.SalaryItemPO;
import com.engine.salary.entity.salarysob.po.SalarySobEmpFieldPO;
import com.engine.salary.entity.salarysob.po.SalarySobItemPO;
@ -25,6 +31,7 @@ import com.engine.salary.entity.taxagent.po.TaxAgentPO;
import com.engine.salary.enums.UserStatusEnum;
import com.engine.salary.enums.ly.LyPushStatusEnum;
import com.engine.salary.enums.salaryaccounting.SalaryAcctRecordStatusEnum;
import com.engine.salary.enums.salaryarchive.SalaryArchiveStatusEnum;
import com.engine.salary.enums.salaryitem.SalaryDataTypeEnum;
import com.engine.salary.exception.SalaryRunTimeException;
import com.engine.salary.mapper.ly.LySalaryReportMapper;
@ -51,6 +58,7 @@ import weaver.hrm.User;
import weaver.wechat.util.Utils;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.stream.Collectors;
@ -107,6 +115,11 @@ public class LySalaryReportServiceImpl extends Service implements LySalaryReport
return MapperProxyFactory.getProxy(UfSbgjjMapper.class);
}
private SalaryArchiveService getSalaryArchiveService(User user) {
return ServiceUtil.getService(SalaryArchiveServiceImpl.class, user);
}
/**
* 查询所有记录
*
@ -2738,4 +2751,544 @@ public class LySalaryReportServiceImpl extends Service implements LySalaryReport
}
}
}
@Override
public Map<String, Object> listLyXcdazjtjReport() {
// 查询所有发薪的薪资档案
List<SalaryArchivePO> salaryArchivePOList = getSalaryArchiveService(user).listSome(SalaryArchivePO.builder().runStatusList(Arrays.asList(SalaryArchiveStatusEnum.FIXED.getValue(), SalaryArchiveStatusEnum.SUSPEND.getValue())).build());
BaseBean baseBean = new BaseBean();
String gwzjField = baseBean.getPropValue("lySalaryReport", "gwzj_field_id");
String pqField = baseBean.getPropValue("lySalaryReport", "pq_field_id");
RecordSet rs = new RecordSet();
// 查询职等职级信息
rs.execute("select id,gwzj from uf_zdzj_new ");
Map<String, Integer> zdzjInfoMap = new HashMap<>();
while (rs.next()) {
String[] split = StringUtils.split(rs.getString("gwzj"), "-");
if (split != null && split.length > 0) {
String gwzj = split[0];
zdzjInfoMap.put(rs.getString("id"), SalaryEntityUtil.string2Integer(gwzj));
}
}
// 查询员工对应的职级片区信息
List<Long> employeeIds = salaryArchivePOList.stream().map(salaryArchivePO -> salaryArchivePO.getEmployeeId()).distinct().collect(Collectors.toList());
List<List<Long>> partition = Lists.partition(employeeIds, 800);
Map<Long, Integer> empZjMap = new HashMap<>();
Map<Long, String> empPqMap = new HashMap<>();
partition.forEach(part -> {
rs.execute("select id,"+gwzjField+","+pqField+" from cus_fielddata where scope='HrmCustomFieldByInfoType' and scopeid=-1 and id in (" + StringUtils.join(part, ",") + ")");
while (rs.next()) {
String gwzj = Utils.null2String(rs.getString(gwzjField));
if(StringUtils.isNotBlank(gwzj)) {
if (gwzj.contains("_")) {
String[] split = gwzj.split("_");
gwzj = split != null && split.length > 0 ? split[split.length - 1] : "";
}
empZjMap.put(Long.valueOf(rs.getInt("id")), zdzjInfoMap.get(gwzj));
}
empPqMap.put(Long.valueOf(rs.getInt("id")), Utils.null2String(rs.getString(pqField)));
}
});
// 获取人员分部信息
Map<Long, DataCollectionEmployee> employeeMap = SalaryEntityUtil.convert2Map(getSalaryEmployeeService(user).listByIds(employeeIds), DataCollectionEmployee::getEmployeeId);
// 获取所有分部信息
Map<Long, SubCompanyInfo> subCompanyInfoMap = SalaryEntityUtil.convert2Map(getSalaryEmployeeService(user).listAllSubCompanyInfoList(), SubCompanyInfo::getId);
// 所有档案赋值职级
salaryArchivePOList.stream().forEach(salaryArchivePO -> {
int zj = empZjMap.get(salaryArchivePO.getEmployeeId()) == null ? -1 : empZjMap.get(salaryArchivePO.getEmployeeId());
salaryArchivePO.setLyzj(zj);
salaryArchivePO.setLypq(Utils.null2String(empPqMap.get(salaryArchivePO.getEmployeeId())));
salaryArchivePO.setLyxm(Utils.null2String(employeeMap.get(salaryArchivePO.getEmployeeId()) == null ? "" : employeeMap.get(salaryArchivePO.getEmployeeId()).getSubcompanyid()));
});
// 获取薪资档案字段id值
Long ndyssyzeItemId = SalaryEntityUtil.string2Long(baseBean.getPropValue("lySalaryReport", "xzdazjtj_ndyssrze_field_id"));
Long ydbzgzItemId = SalaryEntityUtil.string2Long(baseBean.getPropValue("lySalaryReport", "xzdazjtj_ydbzgz_field_id"));
Long ydjxzeItemId = SalaryEntityUtil.string2Long(baseBean.getPropValue("lySalaryReport", "xzdazjtj_ydjx_field_id"));
Long gdffblItemId = SalaryEntityUtil.string2Long(baseBean.getPropValue("lySalaryReport", "xzdazjtj_gdffbl_field_id"));
Long lbjtItemId = SalaryEntityUtil.string2Long(baseBean.getPropValue("lySalaryReport", "xzdazjtj_lbjt_field_id"));
Long nzjxsItemId = SalaryEntityUtil.string2Long(baseBean.getPropValue("lySalaryReport", "xzdazjtj_nzjxs_field_id"));
List<Long> salaryItemIds = Arrays.asList(ndyssyzeItemId, ydbzgzItemId, ydjxzeItemId, gdffblItemId, lbjtItemId, nzjxsItemId);
List<List<SalaryArchivePO>> archivePartition = Lists.partition(salaryArchivePOList, 500);
// 查询员工当前生效的薪资档案数据
List<SalaryArchiveItemPO> archiveItemPOS = new ArrayList<>();
archivePartition.forEach(part -> {
List<Long> archiveIds = part.stream().map(SalaryArchivePO::getId).collect(Collectors.toList());
archiveItemPOS.addAll(getSalaryArchiveService(user).getCurrentEffectiveItemList(archiveIds, salaryItemIds));
});
Map<Long, List<SalaryArchiveItemPO>> archiveItemPOSGroupByAchiveId = SalaryEntityUtil.group2Map(archiveItemPOS, SalaryArchiveItemPO::getSalaryArchiveId);
// 薪资档案根据职级分组
List<LyDazjtjReportDTO> reportDTOS = new ArrayList<LyDazjtjReportDTO>();
Map<String, List<SalaryArchivePO>> archivePOGroupByZj = SalaryEntityUtil.group2Map(salaryArchivePOList, po -> po.getLyzj() + "_split" + po.getLypq() + "_split" + po.getLyxm());
BigDecimal[] allNdsrzeSumVal = new BigDecimal[]{new BigDecimal("0")};
for (Map.Entry<String, List<SalaryArchivePO>> entry : archivePOGroupByZj.entrySet()) {
Map<String, BigDecimal> zjSumValueMap = new HashMap<>();
String[] split = entry.getKey().split("_split");
Long zj = split != null && split.length > 0 && NumberUtils.isCreatable(split[0]) ? Long.valueOf(split[0]) : -1;
String lypq = split != null && split.length > 1 ? split[1] : "";
String lyxm = split != null && split.length > 2 ? split[2] : "";
List<Long> singleGroupArchiveIds = entry.getValue().stream().map(SalaryArchivePO::getId).collect(Collectors.toList());
singleGroupArchiveIds.stream().forEach(archiveId -> {
List<SalaryArchiveItemPO> salaryArchiveItemPOList = archiveItemPOSGroupByAchiveId.get(archiveId);
if (CollectionUtils.isNotEmpty(salaryArchiveItemPOList)) {
Map<Long, String> archiveValueMap = SalaryEntityUtil.convert2Map(salaryArchiveItemPOList, SalaryArchiveItemPO::getSalaryItemId, SalaryArchiveItemPO::getItemValue);
BigDecimal ndsrzezbSumVal = zjSumValueMap.computeIfAbsent("ndsrze", k -> new BigDecimal("0"));
BigDecimal ndsrzezbVal = SalaryEntityUtil.string2BigDecimalDefault0(archiveValueMap.get(ndyssyzeItemId));
zjSumValueMap.put("ndsrze", ndsrzezbSumVal.add(ndsrzezbVal));
allNdsrzeSumVal[0] = allNdsrzeSumVal[0].add(ndsrzezbVal);
BigDecimal ydbzgzSumVal = zjSumValueMap.computeIfAbsent("ydbzgz", k -> new BigDecimal("0"));
BigDecimal ydbzgzVal = SalaryEntityUtil.string2BigDecimalDefault0(archiveValueMap.get(ydbzgzItemId));
zjSumValueMap.put("ydbzgz", ydbzgzSumVal.add(ydbzgzVal));
BigDecimal ydjxzeSumVal = zjSumValueMap.computeIfAbsent("ydjx", k -> new BigDecimal("0"));
BigDecimal ydjxzeVal = SalaryEntityUtil.string2BigDecimalDefault0(archiveValueMap.get(ydjxzeItemId));
zjSumValueMap.put("ydjx", ydjxzeSumVal.add(ydjxzeVal));
BigDecimal yjdjxVal = new BigDecimal("0");
BigDecimal sjdjxVal = new BigDecimal("0");
if (!zj.equals(new Long("0")) && !zj.equals(new Long("1")) && !zj.equals(new Long("2"))) {
// 年度预算收入总额*1-固定比例*20%
BigDecimal gdblVal = SalaryEntityUtil.string2BigDecimalDefault0(archiveValueMap.get(gdffblItemId));
yjdjxVal = (new BigDecimal("1").subtract(gdblVal)).multiply(new BigDecimal("0.2")).multiply(ndsrzezbVal);
BigDecimal yjdjxValSum = zjSumValueMap.computeIfAbsent("yjdjx", k -> new BigDecimal("0"));
zjSumValueMap.put("yjdjx", yjdjxValSum.add(yjdjxVal));
BigDecimal ejdjxValSum = zjSumValueMap.computeIfAbsent("ejdjx", k -> new BigDecimal("0"));
zjSumValueMap.put("ejdjx", ejdjxValSum.add(yjdjxVal));
// 年度预算收入总额*1-固定比例*30%
sjdjxVal = (new BigDecimal("1").subtract(gdblVal)).multiply(new BigDecimal("0.3")).multiply(ndsrzezbVal);
BigDecimal sjdjxValSum = zjSumValueMap.computeIfAbsent("sjdjx", k -> new BigDecimal("0"));
zjSumValueMap.put("sjdjx", sjdjxValSum.add(sjdjxVal));
BigDecimal sijdjxValSum = zjSumValueMap.computeIfAbsent("sijdjx", k -> new BigDecimal("0"));
zjSumValueMap.put("sijdjx", sijdjxValSum.add(sjdjxVal));
}
//月度标准工资+月度绩效+领班津贴*年终奖系数
BigDecimal nzjzeVal = (ydbzgzVal.add(ydjxzeVal).add(SalaryEntityUtil.string2BigDecimalDefault0(archiveValueMap.get(lbjtItemId))))
.multiply(SalaryEntityUtil.string2BigDecimalDefault0(archiveValueMap.get(nzjxsItemId)));
BigDecimal nzjzeValSum = zjSumValueMap.computeIfAbsent("nzjze", k -> new BigDecimal("0"));
zjSumValueMap.put("nzjze", nzjzeValSum.add(nzjzeVal));
BigDecimal jdjxzeVal = yjdjxVal.add(yjdjxVal).add(sjdjxVal).add(sjdjxVal);
BigDecimal jdjxzeValSum = zjSumValueMap.computeIfAbsent("jdjxze", k -> new BigDecimal("0"));
zjSumValueMap.put("jdjxze", jdjxzeValSum.add(jdjxzeVal));
}
});
// 封装
SubCompanyInfo lypqInfo = subCompanyInfoMap.get(SalaryEntityUtil.string2Long(lypq));
SubCompanyInfo lyxmInfo = subCompanyInfoMap.get(SalaryEntityUtil.string2Long(lyxm));
reportDTOS.add(LyDazjtjReportDTO.builder()
.lypq(lypqInfo == null ? "" : Utils.null2String(lypqInfo.getName()))
.lypqShowOrder(lypqInfo == null || lypqInfo.getShoworder() == null ? -1 :lypqInfo.getShoworder())
.lyxm(lyxmInfo == null ? "" : Utils.null2String(lyxmInfo.getName()))
.lyxmShowOrder(lyxmInfo == null || lyxmInfo.getShoworder() == null? -1 : lyxmInfo.getShoworder())
.zj(zj == null ? "-1" : zj.toString())
.zzrs(entry.getValue().size())
.ndsrze(Util.null2String(zjSumValueMap.get("ndsrze")))
.ydbzgzze(Util.null2String(zjSumValueMap.get("ydbzgz")))
.ydjxze(Util.null2String(zjSumValueMap.get("ydjx")))
.yjdjxze(Util.null2String(zjSumValueMap.get("yjdjx")))
.ejdjxze(Util.null2String(zjSumValueMap.get("ejdjx")))
.sjdjxze(Util.null2String(zjSumValueMap.get("sjdjx")))
.sijdjxze(Util.null2String(zjSumValueMap.get("sijdjx")))
.nzjze(Util.null2String(zjSumValueMap.get("nzjze")))
.jdjxze(Util.null2String(zjSumValueMap.get("jdjxze")))
.build());
}
// 计算年度收入总额占比
reportDTOS.stream().forEach(dto -> {
if (NumberUtils.isCreatable(dto.getNdsrze())) {
BigDecimal ndsrze = SalaryEntityUtil.string2BigDecimalDefault0(dto.getNdsrze());
dto.setNdsrzezb(ndsrze.divide(allNdsrzeSumVal[0], 4, RoundingMode.HALF_UP).multiply(new BigDecimal("100")).setScale(2, RoundingMode.HALF_UP).toPlainString());
}
});
// reportDTOS根据lypq和lyxm和zj排序
reportDTOS = reportDTOS.stream().sorted(new Comparator<LyDazjtjReportDTO>() {
@Override
public int compare(LyDazjtjReportDTO o1, LyDazjtjReportDTO o2) {
Integer o1zj = NumberUtils.isCreatable(o1.getZj()) ? Integer.valueOf(o1.getZj()) : -1;
Integer o2zj = NumberUtils.isCreatable(o2.getZj()) ? Integer.valueOf(o2.getZj()) : -1;
if (o1zj.equals(o2zj)) {
Integer o1pq = o1.getLypqShowOrder() == null ? -1 : o1.getLypqShowOrder();
Integer o2pq = o2.getLypqShowOrder() == null ? -1 : o2.getLypqShowOrder();
if (o1pq.equals(o2pq)) {
Integer o1xm = o1.getLyxmShowOrder() == null ? -1 : o1.getLyxmShowOrder();
Integer o2xm = o2.getLyxmShowOrder() == null ? -1 : o2.getLyxmShowOrder();
return o1xm.compareTo(o2xm);
} else {
return o1pq.compareTo(o2pq);
}
}
return o1zj.compareTo(o2zj);
}
}).collect(Collectors.toList());
// 计算饼状图根据职级汇总
LinkedHashMap<String, String> chartsMap = new LinkedHashMap<>();
Map<String, List<LyDazjtjReportDTO>> groupByzj = SalaryEntityUtil.group2Map(reportDTOS, LyDazjtjReportDTO::getZj);
LinkedHashMap<String, List<LyDazjtjReportDTO>> sortedGroupByzj = groupByzj.entrySet().stream()
.sorted(new Comparator<Map.Entry<String, List<LyDazjtjReportDTO>>>() {
@Override
public int compare(Map.Entry<String, List<LyDazjtjReportDTO>> o1, Map.Entry<String, List<LyDazjtjReportDTO>> o2) {
Long key1 = NumberUtils.isCreatable(o1.getKey()) ? Long.valueOf(o1.getKey()) : -1L;
Long key2 = NumberUtils.isCreatable(o2.getKey()) ? Long.valueOf(o2.getKey()) : -1L;
return key1.compareTo(key2);
}
})
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue, (oldValue, newValue) -> oldValue,
LinkedHashMap::new));
for ( Map.Entry<String, List<LyDazjtjReportDTO>> entry : sortedGroupByzj.entrySet()) {
String zj = entry.getKey();
BigDecimal sumVal = entry.getValue().stream().map(LyDazjtjReportDTO::getNdsrze).filter(NumberUtils::isCreatable).map(BigDecimal::new)
.reduce(new BigDecimal("0"), BigDecimal::add);
String zb = sumVal.divide(allNdsrzeSumVal[0], 4, RoundingMode.HALF_UP).multiply(new BigDecimal("100")).setScale(2, RoundingMode.HALF_UP).toPlainString();
chartsMap.put(zj, zb);
}
// 构建表头
List<WeaTableColumn> columns = new ArrayList<>();
columns.add(new WeaTableColumn("150px", "片区", "lypq"));
columns.add(new WeaTableColumn("150px", "项目", "lyxm"));
columns.add(new WeaTableColumn("150px", "职级", "zj"));
columns.add(new WeaTableColumn("150px", "在职人数", "zzrs"));
columns.add(new WeaTableColumn("150px", "年度收入总额", "ndsrze"));
columns.add(new WeaTableColumn("150px", "年度收入总额占比", "ndsrzezb"));
columns.add(new WeaTableColumn("150px", "月度标准工资总额", "ydbzgzze"));
columns.add(new WeaTableColumn("150px", "月度绩效总额", "ydjxze"));
columns.add(new WeaTableColumn("150px", "1季度绩效总额", "yjdjxze"));
columns.add(new WeaTableColumn("150px", "2季度绩效总额", "ejdjxze"));
columns.add(new WeaTableColumn("150px", "3季度绩效总额", "sjdjxze"));
columns.add(new WeaTableColumn("150px", "4季度绩效总额", "sijdjxze"));
columns.add(new WeaTableColumn("150px", "年终奖总额", "nzjze"));
columns.add(new WeaTableColumn("150px", "季度绩效总额", "jdjxze"));
Map<String, Object> map = new HashMap<>();
// if (param.isExport()) {
// // 合计或导出需要合计行
// Map<String, Object> sumResultMap = new HashMap<>();
// sumResultMap.put(gsmcItemId.toString(), "合计");
// for (SalaryItemPO salaryItem : salaryItemList) {
// if (salaryItem.getDataType().equals(SalaryDataTypeEnum.NUMBER.getValue())) {
// BigDecimal sumValue = acctResultMap.stream()
// .map(m -> m.get(salaryItem.getId().toString()))
// .filter(value -> value != null && NumberUtils.isCreatable(value.toString()))
// .map(e -> SalaryEntityUtil.empty2Zero(e.toString()))
// .reduce(BigDecimal.ZERO, BigDecimal::add);
// sumResultMap.put(salaryItem.getId().toString(),sumValue);
// }
// }
// map.put("sumRow", sumResultMap);
// }
map.put("columns", columns);
map.put("data", reportDTOS);
map.put("chartsData", chartsMap);
return map;
}
@Override
public XSSFWorkbook exportXcdazjtjReport() {
Map<String, Object> resultMap = listLyXcdazjtjReport();
List<LyDazjtjReportDTO> dataList = (List<LyDazjtjReportDTO>) resultMap.get("data");
List<WeaTableColumn> columns = (List<WeaTableColumn>) resultMap.get("columns");
// Map<String, Object> sum = (Map<String, Object>) resultMap.get("sum");
// dataList.add(sum);
List<Object> headerList = new ArrayList<>(columns.stream().map(WeaTableColumn::getText).collect(Collectors.toList()));
List<List<Object>> rows = new ArrayList<>();
rows.add(headerList);
for (LyDazjtjReportDTO dto : dataList) {
List<Object> row = Lists.newArrayList();
Map<String, Object> valueMap = BeanUtil.beanToMap(dto);
for (WeaTableColumn column : columns) {
row.add(Utils.null2String(valueMap.get(column.getColumn())));
}
rows.add(row);
}
//获取excel
return ExcelUtilPlus.genWorkbookV2(rows, "薪酬档案职级统计报表", false);
}
@Override
public Map<String, Object> listLyXcdazwjstjReport() {
// 查询所有发薪的薪资档案
List<SalaryArchivePO> salaryArchivePOList = getSalaryArchiveService(user).listSome(SalaryArchivePO.builder().runStatusList(Arrays.asList(SalaryArchiveStatusEnum.FIXED.getValue(), SalaryArchiveStatusEnum.SUSPEND.getValue())).build());
BaseBean baseBean = new BaseBean();
String gwzjField = baseBean.getPropValue("lySalaryReport", "gwzj_field_id");
String pqField = baseBean.getPropValue("lySalaryReport", "pq_field_id");
String zwjsField = baseBean.getPropValue("lySalaryReport", "zwjs_field_id");
RecordSet rs = new RecordSet();
// 查询职等职级信息
rs.execute("select id,gwzj from uf_zdzj_new ");
Map<String, Integer> zdzjInfoMap = new HashMap<>();
while (rs.next()) {
String[] split = StringUtils.split(rs.getString("gwzj"), "-");
if (split != null && split.length > 0) {
String gwzj = split[0];
zdzjInfoMap.put(rs.getString("id"), SalaryEntityUtil.string2Integer(gwzj));
}
}
// 查询员工对应的职级片区信息
List<Long> employeeIds = salaryArchivePOList.stream().map(salaryArchivePO -> salaryArchivePO.getEmployeeId()).distinct().collect(Collectors.toList());
List<List<Long>> partition = Lists.partition(employeeIds, 800);
Map<Long, Integer> empZjMap = new HashMap<>();
Map<Long, String> empPqMap = new HashMap<>();
partition.forEach(part -> {
rs.execute("select id,"+gwzjField+","+pqField+" from cus_fielddata where scope='HrmCustomFieldByInfoType' and scopeid=-1 and id in (" + StringUtils.join(part, ",") + ")");
while (rs.next()) {
String gwzj = Utils.null2String(rs.getString(gwzjField));
if(StringUtils.isNotBlank(gwzj)) {
if (gwzj.contains("_")) {
String[] split = gwzj.split("_");
gwzj = split != null && split.length > 0 ? split[split.length - 1] : "";
}
empZjMap.put(Long.valueOf(rs.getInt("id")), zdzjInfoMap.get(gwzj));
}
empPqMap.put(Long.valueOf(rs.getInt("id")), Utils.null2String(rs.getString(pqField)));
}
});
// 查询员工对应的职务角色信息
Map<Long, String> empZwjsMap = new HashMap<>();
partition.forEach(part -> {
rs.execute("select id,"+zwjsField+" from cus_fielddata where scope='HrmCustomFieldByInfoType' and scopeid=3 and id in (" + StringUtils.join(part, ",") + ")");
while (rs.next()) {
empZwjsMap.put(Long.valueOf(rs.getInt("id")), Utils.null2String(rs.getString(zwjsField)));
}
});
// 获取人员分部信息
Map<Long, DataCollectionEmployee> employeeMap = SalaryEntityUtil.convert2Map(getSalaryEmployeeService(user).listByIds(employeeIds), DataCollectionEmployee::getEmployeeId);
// 获取所有分部信息
Map<Long, SubCompanyInfo> subCompanyInfoMap = SalaryEntityUtil.convert2Map(getSalaryEmployeeService(user).listAllSubCompanyInfoList(), SubCompanyInfo::getId);
// 获取所有职务角色数据
rs.execute("select id,mc from uf_zwjs");
Map<String, String> zwjsMap = new HashMap<>();
while (rs.next()) {
zwjsMap.put(rs.getString("id"), rs.getString("mc"));
}
// 所有档案赋值职级
salaryArchivePOList.stream().forEach(salaryArchivePO -> {
int zj = empZjMap.get(salaryArchivePO.getEmployeeId()) == null ? -1 : empZjMap.get(salaryArchivePO.getEmployeeId());
salaryArchivePO.setLyzj(zj);
String zwjs = empZwjsMap.get(salaryArchivePO.getEmployeeId()) == null ? "" : empZwjsMap.get(salaryArchivePO.getEmployeeId());
salaryArchivePO.setLyzwjs(zwjs);
salaryArchivePO.setLypq(Utils.null2String(empPqMap.get(salaryArchivePO.getEmployeeId())));
salaryArchivePO.setLyxm(Utils.null2String(employeeMap.get(salaryArchivePO.getEmployeeId()) == null ? "" : employeeMap.get(salaryArchivePO.getEmployeeId()).getSubcompanyid()));
});
// 获取薪资档案字段id值
Long ndyssyzeItemId = SalaryEntityUtil.string2Long(baseBean.getPropValue("lySalaryReport", "xzdazjtj_ndyssrze_field_id"));
Long ydbzgzItemId = SalaryEntityUtil.string2Long(baseBean.getPropValue("lySalaryReport", "xzdazjtj_ydbzgz_field_id"));
Long ydjxzeItemId = SalaryEntityUtil.string2Long(baseBean.getPropValue("lySalaryReport", "xzdazjtj_ydjx_field_id"));
Long gdffblItemId = SalaryEntityUtil.string2Long(baseBean.getPropValue("lySalaryReport", "xzdazjtj_gdffbl_field_id"));
Long lbjtItemId = SalaryEntityUtil.string2Long(baseBean.getPropValue("lySalaryReport", "xzdazjtj_lbjt_field_id"));
Long nzjxsItemId = SalaryEntityUtil.string2Long(baseBean.getPropValue("lySalaryReport", "xzdazjtj_nzjxs_field_id"));
List<Long> salaryItemIds = Arrays.asList(ndyssyzeItemId, ydbzgzItemId, ydjxzeItemId, gdffblItemId, lbjtItemId, nzjxsItemId);
List<List<SalaryArchivePO>> archivePartition = Lists.partition(salaryArchivePOList, 500);
// 查询员工当前生效的薪资档案数据
List<SalaryArchiveItemPO> archiveItemPOS = new ArrayList<>();
archivePartition.forEach(part -> {
List<Long> archiveIds = part.stream().map(SalaryArchivePO::getId).collect(Collectors.toList());
archiveItemPOS.addAll(getSalaryArchiveService(user).getCurrentEffectiveItemList(archiveIds, salaryItemIds));
});
Map<Long, List<SalaryArchiveItemPO>> archiveItemPOSGroupByAchiveId = SalaryEntityUtil.group2Map(archiveItemPOS, SalaryArchiveItemPO::getSalaryArchiveId);
// 薪资档案根据职务角色分组
List<LyDazjtjReportDTO> reportDTOS = new ArrayList<LyDazjtjReportDTO>();
Map<String, List<SalaryArchivePO>> archivePOGroupByZj = SalaryEntityUtil.group2Map(salaryArchivePOList, po -> po.getLyzwjs() + "_split" + po.getLypq() + "_split" + po.getLyxm());
BigDecimal[] allNdsrzeSumVal = new BigDecimal[]{new BigDecimal("0")};
for (Map.Entry<String, List<SalaryArchivePO>> entry : archivePOGroupByZj.entrySet()) {
Map<String, BigDecimal> zjSumValueMap = new HashMap<>();
String[] split = entry.getKey().split("_split");
String zwjs = split != null && split.length > 0 ? split[0] : "-1";
String lypq = split != null && split.length > 1 ? split[1] : "";
String lyxm = split != null && split.length > 2 ? split[2] : "";
List<SalaryArchivePO> singleGroupArchive = entry.getValue().stream().collect(Collectors.toList());
singleGroupArchive.stream().forEach(archive -> {
Long archiveId = archive.getId();
List<SalaryArchiveItemPO> salaryArchiveItemPOList = archiveItemPOSGroupByAchiveId.get(archiveId);
if (CollectionUtils.isNotEmpty(salaryArchiveItemPOList)) {
Map<Long, String> archiveValueMap = SalaryEntityUtil.convert2Map(salaryArchiveItemPOList, SalaryArchiveItemPO::getSalaryItemId, SalaryArchiveItemPO::getItemValue);
BigDecimal ndsrzezbSumVal = zjSumValueMap.computeIfAbsent("ndsrze", k -> new BigDecimal("0"));
BigDecimal ndsrzezbVal = SalaryEntityUtil.string2BigDecimalDefault0(archiveValueMap.get(ndyssyzeItemId));
zjSumValueMap.put("ndsrze", ndsrzezbSumVal.add(ndsrzezbVal));
allNdsrzeSumVal[0] = allNdsrzeSumVal[0].add(ndsrzezbVal);
BigDecimal ydbzgzSumVal = zjSumValueMap.computeIfAbsent("ydbzgz", k -> new BigDecimal("0"));
BigDecimal ydbzgzVal = SalaryEntityUtil.string2BigDecimalDefault0(archiveValueMap.get(ydbzgzItemId));
zjSumValueMap.put("ydbzgz", ydbzgzSumVal.add(ydbzgzVal));
BigDecimal ydjxzeSumVal = zjSumValueMap.computeIfAbsent("ydjx", k -> new BigDecimal("0"));
BigDecimal ydjxzeVal = SalaryEntityUtil.string2BigDecimalDefault0(archiveValueMap.get(ydjxzeItemId));
zjSumValueMap.put("ydjx", ydjxzeSumVal.add(ydjxzeVal));
BigDecimal yjdjxVal = new BigDecimal("0");
BigDecimal sjdjxVal = new BigDecimal("0");
if (!archive.getLyzj().equals(new Integer("0")) && !archive.getLyzj().equals(new Integer("1")) && !archive.getLyzj().equals(new Integer("2"))) {
// 年度预算收入总额*1-固定比例*20%
BigDecimal gdblVal = SalaryEntityUtil.string2BigDecimalDefault0(archiveValueMap.get(gdffblItemId));
yjdjxVal = (new BigDecimal("1").subtract(gdblVal)).multiply(new BigDecimal("0.2")).multiply(ndsrzezbVal);
BigDecimal yjdjxValSum = zjSumValueMap.computeIfAbsent("yjdjx", k -> new BigDecimal("0"));
zjSumValueMap.put("yjdjx", yjdjxValSum.add(yjdjxVal));
BigDecimal ejdjxValSum = zjSumValueMap.computeIfAbsent("ejdjx", k -> new BigDecimal("0"));
zjSumValueMap.put("ejdjx", ejdjxValSum.add(yjdjxVal));
// 年度预算收入总额*1-固定比例*30%
sjdjxVal = (new BigDecimal("1").subtract(gdblVal)).multiply(new BigDecimal("0.3")).multiply(ndsrzezbVal);
BigDecimal sjdjxValSum = zjSumValueMap.computeIfAbsent("sjdjx", k -> new BigDecimal("0"));
zjSumValueMap.put("sjdjx", sjdjxValSum.add(sjdjxVal));
BigDecimal sijdjxValSum = zjSumValueMap.computeIfAbsent("sijdjx", k -> new BigDecimal("0"));
zjSumValueMap.put("sijdjx", sijdjxValSum.add(sjdjxVal));
}
//月度标准工资+月度绩效+领班津贴*年终奖系数
BigDecimal nzjzeVal = (ydbzgzVal.add(ydjxzeVal).add(SalaryEntityUtil.string2BigDecimalDefault0(archiveValueMap.get(lbjtItemId))))
.multiply(SalaryEntityUtil.string2BigDecimalDefault0(archiveValueMap.get(nzjxsItemId)));
BigDecimal nzjzeValSum = zjSumValueMap.computeIfAbsent("nzjze", k -> new BigDecimal("0"));
zjSumValueMap.put("nzjze", nzjzeValSum.add(nzjzeVal));
BigDecimal jdjxzeVal = yjdjxVal.add(yjdjxVal).add(sjdjxVal).add(sjdjxVal);
BigDecimal jdjxzeValSum = zjSumValueMap.computeIfAbsent("jdjxze", k -> new BigDecimal("0"));
zjSumValueMap.put("jdjxze", jdjxzeValSum.add(jdjxzeVal));
}
});
// 封装
SubCompanyInfo lypqInfo = subCompanyInfoMap.get(SalaryEntityUtil.string2Long(lypq));
SubCompanyInfo lyxmInfo = subCompanyInfoMap.get(SalaryEntityUtil.string2Long(lyxm));
reportDTOS.add(LyDazjtjReportDTO.builder()
.lypq(lypqInfo == null ? "" : Utils.null2String(lypqInfo.getName()))
.lypqShowOrder(lypqInfo == null || lypqInfo.getShoworder() == null ? -1 :lypqInfo.getShoworder())
.lyxm(lyxmInfo == null ? "" : Utils.null2String(lyxmInfo.getName()))
.lyxmShowOrder(lyxmInfo == null || lyxmInfo.getShoworder() == null? -1 : lyxmInfo.getShoworder())
.zwjs(zwjsMap.getOrDefault(zwjs, ""))
.zwjsId(NumberUtils.isCreatable(zwjs) ? Long.valueOf(zwjs) : -1)
.zzrs(entry.getValue().size())
.ndsrze(Util.null2String(zjSumValueMap.get("ndsrze")))
.ydbzgzze(Util.null2String(zjSumValueMap.get("ydbzgz")))
.ydjxze(Util.null2String(zjSumValueMap.get("ydjx")))
.yjdjxze(Util.null2String(zjSumValueMap.get("yjdjx")))
.ejdjxze(Util.null2String(zjSumValueMap.get("ejdjx")))
.sjdjxze(Util.null2String(zjSumValueMap.get("sjdjx")))
.sijdjxze(Util.null2String(zjSumValueMap.get("sijdjx")))
.nzjze(Util.null2String(zjSumValueMap.get("nzjze")))
.jdjxze(Util.null2String(zjSumValueMap.get("jdjxze")))
.build());
}
// 计算年度收入总额占比
reportDTOS.stream().forEach(dto -> {
if (NumberUtils.isCreatable(dto.getNdsrze())) {
BigDecimal ndsrze = SalaryEntityUtil.string2BigDecimalDefault0(dto.getNdsrze());
dto.setNdsrzezb(ndsrze.divide(allNdsrzeSumVal[0], 4, RoundingMode.HALF_UP).multiply(new BigDecimal("100")).setScale(2, RoundingMode.HALF_UP).toPlainString());
}
});
// reportDTOS根据lypq和lyxm和zj排序
reportDTOS = reportDTOS.stream().sorted(new Comparator<LyDazjtjReportDTO>() {
@Override
public int compare(LyDazjtjReportDTO o1, LyDazjtjReportDTO o2) {
Long o1zwjs = o1.getZwjsId() != null ? o1.getZwjsId() : -1;
Long o2zwjs = o2.getZwjsId() != null ? o2.getZwjsId() : -1;
if (o1zwjs.equals(o2zwjs)) {
Integer o1pq = o1.getLypqShowOrder() == null ? -1 : o1.getLypqShowOrder();
Integer o2pq = o2.getLypqShowOrder() == null ? -1 : o2.getLypqShowOrder();
if (o1pq.equals(o2pq)) {
Integer o1xm = o1.getLyxmShowOrder() == null ? -1 : o1.getLyxmShowOrder();
Integer o2xm = o2.getLyxmShowOrder() == null ? -1 : o2.getLyxmShowOrder();
return o1xm.compareTo(o2xm);
} else {
return o1pq.compareTo(o2pq);
}
}
return o1zwjs.compareTo(o2zwjs);
}
}).collect(Collectors.toList());
// 计算饼状图根据职级汇总
LinkedHashMap<String, String> chartsMap = new LinkedHashMap<>();
Map<Long, List<LyDazjtjReportDTO>> groupByzwjsId = SalaryEntityUtil.group2Map(reportDTOS, LyDazjtjReportDTO::getZwjsId);
LinkedHashMap<Long, List<LyDazjtjReportDTO>> sortedGroupByzj = groupByzwjsId.entrySet().stream().sorted(Map.Entry.comparingByKey())
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue, (oldValue, newValue) -> oldValue,
LinkedHashMap::new));
for ( Map.Entry<Long, List<LyDazjtjReportDTO>> entry : sortedGroupByzj.entrySet()) {
Long zwjsId = entry.getKey();
BigDecimal sumVal = entry.getValue().stream().map(LyDazjtjReportDTO::getNdsrze).filter(NumberUtils::isCreatable).map(BigDecimal::new)
.reduce(new BigDecimal("0"), BigDecimal::add);
String zb = sumVal.divide(allNdsrzeSumVal[0], 4, RoundingMode.HALF_UP).multiply(new BigDecimal("100")).setScale(2, RoundingMode.HALF_UP).toPlainString();
chartsMap.put(zwjsMap.getOrDefault(Utils.null2String(zwjsId), ""), zb);
}
// 构建表头
List<WeaTableColumn> columns = new ArrayList<>();
columns.add(new WeaTableColumn("150px", "片区", "lypq"));
columns.add(new WeaTableColumn("150px", "项目", "lyxm"));
columns.add(new WeaTableColumn("150px", "职务角色", "zwjs"));
columns.add(new WeaTableColumn("150px", "在职人数(发薪员工)", "zzrs"));
columns.add(new WeaTableColumn("150px", "年度收入总额", "ndsrze"));
columns.add(new WeaTableColumn("150px", "年度收入总额占比", "ndsrzezb"));
columns.add(new WeaTableColumn("150px", "月度标准工资总额", "ydbzgzze"));
columns.add(new WeaTableColumn("150px", "月度绩效总额", "ydjxze"));
columns.add(new WeaTableColumn("150px", "1季度绩效总额", "yjdjxze"));
columns.add(new WeaTableColumn("150px", "2季度绩效总额", "ejdjxze"));
columns.add(new WeaTableColumn("150px", "3季度绩效总额", "sjdjxze"));
columns.add(new WeaTableColumn("150px", "4季度绩效总额", "sijdjxze"));
columns.add(new WeaTableColumn("150px", "年终奖总额", "nzjze"));
columns.add(new WeaTableColumn("150px", "季度绩效总额", "jdjxze"));
Map<String, Object> map = new HashMap<>();
// if (param.isExport()) {
// // 合计或导出需要合计行
// Map<String, Object> sumResultMap = new HashMap<>();
// sumResultMap.put(gsmcItemId.toString(), "合计");
// for (SalaryItemPO salaryItem : salaryItemList) {
// if (salaryItem.getDataType().equals(SalaryDataTypeEnum.NUMBER.getValue())) {
// BigDecimal sumValue = acctResultMap.stream()
// .map(m -> m.get(salaryItem.getId().toString()))
// .filter(value -> value != null && NumberUtils.isCreatable(value.toString()))
// .map(e -> SalaryEntityUtil.empty2Zero(e.toString()))
// .reduce(BigDecimal.ZERO, BigDecimal::add);
// sumResultMap.put(salaryItem.getId().toString(),sumValue);
// }
// }
// map.put("sumRow", sumResultMap);
// }
map.put("columns", columns);
map.put("data", reportDTOS);
map.put("chartsData", chartsMap);
return map;
}
@Override
public XSSFWorkbook exportXcdazwjstjReport() {
Map<String, Object> resultMap = listLyXcdazwjstjReport();
List<LyDazjtjReportDTO> dataList = (List<LyDazjtjReportDTO>) resultMap.get("data");
List<WeaTableColumn> columns = (List<WeaTableColumn>) resultMap.get("columns");
// Map<String, Object> sum = (Map<String, Object>) resultMap.get("sum");
// dataList.add(sum);
List<Object> headerList = new ArrayList<>(columns.stream().map(WeaTableColumn::getText).collect(Collectors.toList()));
List<List<Object>> rows = new ArrayList<>();
rows.add(headerList);
for (LyDazjtjReportDTO dto : dataList) {
List<Object> row = Lists.newArrayList();
Map<String, Object> valueMap = BeanUtil.beanToMap(dto);
for (WeaTableColumn column : columns) {
row.add(Utils.null2String(valueMap.get(column.getColumn())));
}
rows.add(row);
}
//获取excel
return ExcelUtilPlus.genWorkbookV2(rows, "薪酬档案职级统计报表", false);
}
}

View File

@ -371,6 +371,11 @@ public class SalaryEmployeeServiceImpl extends Service implements SalaryEmployee
return SalaryI18nUtil.i18nList(employBiz.getSubCompanyInfoList(subDepartmentIds));
}
@Override
public List<SubCompanyInfo> listAllSubCompanyInfoList() {
return SalaryI18nUtil.i18nList(employBiz.listAllSubCompanyInfoList());
}
@Override
public SubCompanyInfo getSubCompanyInfoById(Long subDepartmentId) {
return SalaryI18nUtil.i18n(employBiz.getSubCompanyInfoById(subDepartmentId));

View File

@ -821,4 +821,105 @@ public class LySalaryController {
}
//---------------------------------------------------------领悦对比汇总表end-------------------------------------------
//---------------------------------------------------------领悦薪资档案报表start---------------------------------------
/**
* 查询领悦薪酬档案职级统计报表
*
* @param request
* @param response
* @param param
* @return
*/
@POST
@Path("/xcdazjtjReport/list")
@Produces(MediaType.APPLICATION_JSON)
public String listLyXcdazjtjReport(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody LySalaryReportQueryParam param) {
User user = HrmUserVarify.getUser(request, response);
return new ResponseResult<LySalaryReportQueryParam, Map<String, Object>>(user).run(getLySalaryWrapper(user)::listLyXcdazjtjReport, param);
}
/**
* 导出领悦薪酬档案职级统计报表
*
* @param request
* @param response
* @param param
* @return
*/
@POST
@Path("/xcdazjtjReport/export")
@Produces(MediaType.APPLICATION_OCTET_STREAM)
public Response exportXcdazjtjReport(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody LySalaryReportQueryParam param) {
try {
User user = HrmUserVarify.getUser(request, response);
XSSFWorkbook workbook = getLySalaryWrapper(user).exportXcdazjtjReport(param);
String time = LocalDate.now().toString();
String 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;
}
}
/**
* 查询领悦薪酬档案职务角色统计报表
*
* @param request
* @param response
* @param param
* @return
*/
@POST
@Path("/xcdazwjstjReport/list")
@Produces(MediaType.APPLICATION_JSON)
public String listLyXcdazwjstjReport(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody LySalaryReportQueryParam param) {
User user = HrmUserVarify.getUser(request, response);
return new ResponseResult<LySalaryReportQueryParam, Map<String, Object>>(user).run(getLySalaryWrapper(user)::listLyXcdazwjstjReport, param);
}
/**
* 导出领悦薪酬档案职务角色统计报表
*
* @param request
* @param response
* @param param
* @return
*/
@POST
@Path("/xcdazwjstjReport/export")
@Produces(MediaType.APPLICATION_OCTET_STREAM)
public Response exportXcdazwjstjReport(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody LySalaryReportQueryParam param) {
try {
User user = HrmUserVarify.getUser(request, response);
XSSFWorkbook workbook = getLySalaryWrapper(user).exportXcdazwjstjReport(param);
String time = LocalDate.now().toString();
String 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;
}
}
//---------------------------------------------------------领悦薪资档案报表end-----------------------------------------
}

View File

@ -347,4 +347,20 @@ public class LySalaryWrapper extends Service {
public Map<String, String> getHszb(LyPZGenParam param) {
return getLySalaryReportService(user).getHszb(param.getFfgsqc());
}
public Map<String, Object> listLyXcdazjtjReport(LySalaryReportQueryParam param) {
return getLySalaryReportService(user).listLyXcdazjtjReport();
}
public XSSFWorkbook exportXcdazjtjReport(LySalaryReportQueryParam param) {
return getLySalaryReportService(user).exportXcdazjtjReport();
}
public Map<String, Object> listLyXcdazwjstjReport(LySalaryReportQueryParam param) {
return getLySalaryReportService(user).listLyXcdazwjstjReport();
}
public XSSFWorkbook exportXcdazwjstjReport(LySalaryReportQueryParam param) {
return getLySalaryReportService(user).exportXcdazwjstjReport();
}
}