联特报表

This commit is contained in:
Harryxzy 2025-09-23 16:50:18 +08:00
parent 3a83f20552
commit 6feba29cdf
8 changed files with 1047 additions and 55 deletions

View File

@ -23,6 +23,9 @@ public class LtRymxgzDTO {
// 项目号
private String xmh;
// 期间
private String qj;
// 姓名
private Long xm;

View File

@ -0,0 +1,26 @@
package com.engine.salary.entity.salaryacct.param;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* @author Harryxzy
* @ClassName LtReportParam
* @date 2025/09/22 9:58
* @description
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class LtReportParam {
private String salaryMonth;
private String year;
private Boolean export;
private Long khjl;
}

View File

@ -0,0 +1,39 @@
package com.engine.salary.entity.salaryacct.po;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.math.BigDecimal;
/**
* @author Harryxzy
* @ClassName LyWhjjbmPO
* @date 2025/09/19 14:55
* @description 联特武汉间接部门
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class LtWhjjbmPO {
// 姓名
private Long xm;
// 成本中心
private String cbzx;
// 间接部门
private String jjbm;
// 占比
private BigDecimal zb;
// 工资
private BigDecimal gz;
// 工资额度
private BigDecimal gzed;
}

View File

@ -0,0 +1,34 @@
package com.engine.salary.entity.salaryacct.po;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.math.BigDecimal;
/**
* @author Harryxzy
* @ClassName LtXsCrmPO
* @date 2025/09/22 14:55
* @description 联特销售crm数据
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class LtXsCrmPO {
// 客户
private String kh;
// 客户经理
private Long khjl;
// 年月
private String salaryMonth;
private Integer month;
// 收入金额
private BigDecimal srje;
}

View File

@ -9,6 +9,7 @@ import com.engine.salary.entity.salaryacct.po.SalaryAcctRecordPO;
import com.engine.salary.entity.salaryacct.po.SalaryAcctResultPO;
import com.engine.salary.enums.common.SalaryLogOperateTypeEnum;
import com.engine.salary.util.page.PageInfo;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import java.util.Collection;
import java.util.Date;
@ -386,4 +387,30 @@ public interface SalaryAcctResultService {
* @return
*/
String ltGenGwpjgzcxb(String salaryMonth);
/**
* 联特 表8 - 工资分摊表
* @param salaryMonth
* @return
*/
Map<String, Object> ltGenGzftb(String salaryMonth);
XSSFWorkbook exportLtGzftb(LtReportParam param);
/**
* 联特 表10 - 销售薪资分摊明细表
* @param param
* @return
*/
Map<String, Object> ltKhjlgzftList(LtReportParam param);
Map<String, Object> ltKhjlgzftSum(String year);
XSSFWorkbook exportKhjlgzftList(String year);
Map<String, Object> ltXsxzftList(LtReportParam param);
Map<String, Object> ltXsxzftSum(LtReportParam param);
XSSFWorkbook exportXsxzftList(LtReportParam param);
}

View File

@ -57,6 +57,7 @@ import com.engine.salary.util.SalaryDateUtil;
import com.engine.salary.util.SalaryEntityUtil;
import com.engine.salary.util.SalaryI18nUtil;
import com.engine.salary.util.db.MapperProxyFactory;
import com.engine.salary.util.excel.ExcelUtil;
import com.engine.salary.util.page.Column;
import com.engine.salary.util.page.PageInfo;
import com.engine.salary.util.page.SalaryPageUtil;
@ -71,6 +72,7 @@ import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.collections4.MapUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.math.NumberUtils;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.jetbrains.annotations.NotNull;
import org.springframework.beans.BeanUtils;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
@ -1619,6 +1621,15 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe
// Map<Long, DataCollectionEmployee> employeeMap = SalaryEntityUtil.convert2Map(getSalaryEmployeeService(user).listByIds(empIds), DataCollectionEmployee::getEmployeeId);
// 查询快照表中人员信息
Map<Long, DataCollectionEmployee> employeeMap = SalaryEntityUtil.convert2Map(getSalaryEmployeeService(user).snapshot(empIds, SalaryDateUtil.localDateToDate(yearMonth.atDay(1))), DataCollectionEmployee::getEmployeeId);
// 获取直接人工分摊表中成本中心数据
Map<String, String> ltCbzxMap = new HashMap<>();
String dataSourceId = baseBean.getPropValue("ltSalaryReport", "zjrycqgsft_data_source_id");
RecordSetDataSource extRs = new RecordSetDataSource(dataSourceId);
extRs.execute(" select user_code,sap_cost_center_name,sap_cost_center_name_desc from dws_oa.work_hour_apportion_report where month='"+salaryMonth+"'");
while (extRs.next()) {
ltCbzxMap.put(extRs.getString("user_code"), extRs.getString("sap_cost_center_name_desc"));
}
// 删除建模数据
RecordSet rs = new RecordSet();
rs.execute("delete from uf_bmsbmxb where xzszy = '" + salaryMonth+ "'");
@ -1640,7 +1651,8 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe
.append(employee.getDepartmentId()).append(",")
.append(employee.getJobtitleId()).append(",'")
.append(salaryMonth).append("','")
.append(Utils.null2String(employee.getLtCbzx())).append("'");
.append(StringUtils.isBlank(ltCbzxMap.get(employee.getWorkcode())) ? Utils.null2String(employee.getLtCbzx()) : ltCbzxMap.get(employee.getWorkcode()))
.append("'");
for (LtSalaryReportConfigDTO dto : configs) {
String val = Utils.null2String(firstData.get(Utils.null2String(dto.getItem()) + "_variableItem" ));
@ -1672,7 +1684,8 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe
.append(employeePo.getDepartmentId()).append(",")
.append(employeePo.getJobtitleId()).append(",'")
.append(salaryMonth).append("','")
.append(Utils.null2String(employeePo.getLtCbzx())).append("'");
.append(StringUtils.isBlank(ltCbzxMap.get(employee.getWorkcode())) ? Utils.null2String(employee.getLtCbzx()) : ltCbzxMap.get(employee.getWorkcode()))
.append("'");
for (LtSalaryReportConfigDTO dto : configs) {
String val = Utils.null2String(data.getOrDefault(Utils.null2String(dto.getItem()) + "_variableItem", ""));
sb.append(",").append(NumberUtils.isCreatable(val) ? val : 0);
@ -1728,6 +1741,14 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe
// Map<Long, DataCollectionEmployee> employeeMap = SalaryEntityUtil.convert2Map(getSalaryEmployeeService(user).listByIds(empIds), DataCollectionEmployee::getEmployeeId);
// 查询快照表中人员信息
Map<Long, DataCollectionEmployee> employeeMap = SalaryEntityUtil.convert2Map(getSalaryEmployeeService(user).snapshot(empIds, SalaryDateUtil.localDateToDate(yearMonth.atDay(1))), DataCollectionEmployee::getEmployeeId);
// 获取直接人工分摊表中成本中心数据
Map<String, String> ltCbzxMap = new HashMap<>();
String dataSourceId = baseBean.getPropValue("ltSalaryReport", "zjrycqgsft_data_source_id");
RecordSetDataSource extRs = new RecordSetDataSource(dataSourceId);
extRs.execute(" select user_code,sap_cost_center_name,sap_cost_center_name_desc from dws_oa.work_hour_apportion_report where month='"+salaryMonth+"'");
while (extRs.next()) {
ltCbzxMap.put(extRs.getString("user_code"), extRs.getString("sap_cost_center_name_desc"));
}
// 删除建模数据
RecordSet rs = new RecordSet();
rs.execute("delete from uf_bmgjjmxb where xzszy = '" + salaryMonth+ "'");
@ -1749,7 +1770,8 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe
.append(employee.getDepartmentId()).append(",")
.append(employee.getJobtitleId()).append(",'")
.append(salaryMonth).append("','")
.append(Utils.null2String(employee.getLtCbzx())).append("'");
.append(StringUtils.isBlank(ltCbzxMap.get(employee.getWorkcode())) ? Utils.null2String(employee.getLtCbzx()) : ltCbzxMap.get(employee.getWorkcode()))
.append("'");
for (LtSalaryReportConfigDTO dto : configs) {
String val = Utils.null2String(firstData.getOrDefault(Utils.null2String(dto.getItem()) + "_variableItem", ""));
@ -1781,7 +1803,8 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe
.append(employeePo.getDepartmentId()).append(",")
.append(employeePo.getJobtitleId()).append(",'")
.append(salaryMonth).append("','")
.append(Utils.null2String(employeePo.getLtCbzx())).append("'");
.append(StringUtils.isBlank(ltCbzxMap.get(employee.getWorkcode())) ? Utils.null2String(employee.getLtCbzx()) : ltCbzxMap.get(employee.getWorkcode()))
.append("'");
for (LtSalaryReportConfigDTO dto : configs) {
String val = Utils.null2String(data.getOrDefault(Utils.null2String(dto.getItem()) + "_variableItem", ""));
sb.append(",").append(NumberUtils.isCreatable(val) ? val : 0);
@ -1821,12 +1844,14 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe
List<Map<String, Object>> variableMapList = getVariableArchiveService(user).listBySalaryMonthAndItems(yearMonth, variableItemIds);
log.info("部门工资奖金明细表计提size{} ",variableMapList == null ? 0 :variableMapList.size());
// 获取直接人工工资分摊表的人
Map<String, String> ltCbzxMap = new HashMap<>();
String dataSourceId = baseBean.getPropValue("ltSalaryReport", "zjrycqgsft_data_source_id");
RecordSetDataSource extRs = new RecordSetDataSource(dataSourceId);
extRs.execute(" select month, user_code from dws_oa.work_hour_apportion_report where month='"+salaryMonth+"'");
extRs.execute(" select month, user_code,sap_cost_center_name_desc from dws_oa.work_hour_apportion_report where month='"+salaryMonth+"'");
List<String> needExcludeWorkCodeList = new ArrayList<>();
while (extRs.next()) {
needExcludeWorkCodeList.add(extRs.getString("user_code"));
ltCbzxMap.put(extRs.getString("user_code"), extRs.getString("sap_cost_center_name_desc"));
}
if (CollectionUtils.isNotEmpty(needExcludeWorkCodeList)) {
// 获取需要去除的人员id
@ -1920,7 +1945,8 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe
.append(employee.getDepartmentId()).append(",")
.append(employee.getJobtitleId()).append(",'")
.append(salaryMonth).append("','")
.append(Utils.null2String(employee.getLtCbzx())).append("',")
.append(StringUtils.isBlank(ltCbzxMap.get(employee.getWorkcode())) ? Utils.null2String(employee.getLtCbzx()) : ltCbzxMap.get(employee.getWorkcode()))
.append("',")
.append(jxgz);
for (LtSalaryReportConfigDTO dto : reportConfigs) {
@ -1966,7 +1992,9 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe
.append(employee.getDepartmentId()).append(",")
.append(employee.getJobtitleId()).append(",'")
.append(salaryMonth).append("','")
.append(Utils.null2String(employee.getLtCbzx())).append("',")
// .append(Utils.null2String(employee.getLtCbzx()))
.append(StringUtils.isBlank(ltCbzxMap.get(employee.getWorkcode())) ? Utils.null2String(employee.getLtCbzx()) : ltCbzxMap.get(employee.getWorkcode()))
.append("',")
.append(jxgz);
for (LtSalaryReportConfigDTO dto : reportConfigs) {
BigDecimal val = new BigDecimal("0");
@ -2012,13 +2040,16 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe
List<Map<String, Object>> variableMapList = getVariableArchiveService(user).listBySalaryMonthAndItems(yearMonth, variableItemIds);
log.info("部门工资奖金明细表实发size{} ",variableMapList == null ? 0 : variableMapList.size());
// 获取直接人工工资分摊表的人
Map<String, String> ltCbzxMap = new HashMap<>();
String dataSourceId = baseBean.getPropValue("ltSalaryReport", "zjrycqgsft_data_source_id");
RecordSetDataSource extRs = new RecordSetDataSource(dataSourceId);
extRs.execute(" select month, user_code from dws_oa.work_hour_apportion_report where month='"+salaryMonth+"'");
extRs.execute(" select month, user_code,sap_cost_center_name_desc from dws_oa.work_hour_apportion_report where month='"+salaryMonth+"'");
List<String> needExcludeWorkCodeList = new ArrayList<>();
while (extRs.next()) {
needExcludeWorkCodeList.add(extRs.getString("user_code"));
ltCbzxMap.put(extRs.getString("user_code"), extRs.getString("sap_cost_center_name_desc"));
}
if (CollectionUtils.isNotEmpty(needExcludeWorkCodeList)) {
// 获取需要去除的人员id
List<String> excludeEmpIds = getSalaryEmployeeService(user).listByWorkCodes(needExcludeWorkCodeList).stream().map(emp -> Utils.null2String(emp.getEmployeeId())).collect(Collectors.toList());
@ -2111,7 +2142,9 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe
.append(employee.getDepartmentId()).append(",")
.append(employee.getJobtitleId()).append(",'")
.append(salaryMonth).append("','")
.append(Utils.null2String(employee.getLtCbzx())).append("',")
.append(StringUtils.isBlank(ltCbzxMap.get(employee.getWorkcode())) ? Utils.null2String(employee.getLtCbzx()) : ltCbzxMap.get(employee.getWorkcode()))
// .append(Utils.null2String(employee.getLtCbzx()))
.append("',")
.append(jxgz);
for (LtSalaryReportConfigDTO dto : reportConfigs) {
@ -2156,7 +2189,9 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe
.append(employee.getDepartmentId()).append(",")
.append(employee.getJobtitleId()).append(",'")
.append(salaryMonth).append("','")
.append(Utils.null2String(employee.getLtCbzx())).append("',")
.append(StringUtils.isBlank(ltCbzxMap.get(employee.getWorkcode())) ? Utils.null2String(employee.getLtCbzx()) : ltCbzxMap.get(employee.getWorkcode()))
// .append(Utils.null2String(employee.getLtCbzx()))
.append("',")
.append(jxgz);
for (LtSalaryReportConfigDTO dto : reportConfigs) {
BigDecimal val = new BigDecimal("0");
@ -2238,7 +2273,14 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe
// 查询快照表中人员信息
Map<Long, DataCollectionEmployee> employeeMap = SalaryEntityUtil.convert2Map(getSalaryEmployeeService(user).snapshot(employeeIdList, SalaryDateUtil.localDateToDate(yearMonth.atDay(1))), DataCollectionEmployee::getEmployeeId);
// 获取直接人工分摊表中成本中心数据
Map<String, String> ltCbzxMap = new HashMap<>();
String dataSourceId = baseBean.getPropValue("ltSalaryReport", "zjrycqgsft_data_source_id");
RecordSetDataSource extRs = new RecordSetDataSource(dataSourceId);
extRs.execute(" select user_code,sap_cost_center_name,sap_cost_center_name_desc from dws_oa.work_hour_apportion_report where month='"+salaryMonth+"'");
while (extRs.next()) {
ltCbzxMap.put(extRs.getString("user_code"), extRs.getString("sap_cost_center_name_desc"));
}
// 入库
// 删除建模数据
@ -2301,7 +2343,9 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe
.append(employee.getJobtitleId()).append(",")
.append(employee.getLtRylb()).append(",'")
.append(salaryMonth).append("','")
.append(Utils.null2String(employee.getLtCbzx())).append("',")
// .append(Utils.null2String(employee.getLtCbzx()))
.append(StringUtils.isBlank(ltCbzxMap.get(employee.getWorkcode())) ? Utils.null2String(employee.getLtCbzx()) : ltCbzxMap.get(employee.getWorkcode()))
.append("',")
.append(jx).append(",").append(jdjx).append(",").append(bndjx).append(",").append(nzj);
for (LtSalaryReportConfigDTO dto : reportConfigs) {
@ -2387,7 +2431,9 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe
.append(employee.getJobtitleId()).append(",")
.append(employee.getLtRylb()).append(",'")
.append(salaryMonth).append("','")
.append(Utils.null2String(employee.getLtCbzx())).append("',")
.append(StringUtils.isBlank(ltCbzxMap.get(employee.getWorkcode())) ? Utils.null2String(employee.getLtCbzx()) : ltCbzxMap.get(employee.getWorkcode()))
// .append(Utils.null2String(employee.getLtCbzx()))
.append("',")
.append(jx).append(",").append(jdjx).append(",").append(bndjx).append(",").append(nzj);
for (LtSalaryReportConfigDTO dto : reportConfigs) {
@ -2541,6 +2587,14 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe
// 查询快照表中人员信息
Map<Long, DataCollectionEmployee> employeeMap = SalaryEntityUtil.convert2Map(getSalaryEmployeeService(user).snapshot(totalEmpIds.stream().collect(Collectors.toList()), SalaryDateUtil.localDateToDate(yearMonth.atDay(1))), DataCollectionEmployee::getEmployeeId);
// 获取直接人工分摊表中成本中心数据
Map<String, String> ltCbzxMap = new HashMap<>();
String dataSourceId = baseBean.getPropValue("ltSalaryReport", "zjrycqgsft_data_source_id");
RecordSetDataSource extRs = new RecordSetDataSource(dataSourceId);
extRs.execute(" select user_code,sap_cost_center_name,sap_cost_center_name_desc from dws_oa.work_hour_apportion_report where month='"+salaryMonth+"'");
while (extRs.next()) {
ltCbzxMap.put(extRs.getString("user_code"), extRs.getString("sap_cost_center_name_desc"));
}
// 入库
// 删除建模数据
@ -2577,7 +2631,9 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe
.append(employee.getJobtitleId()).append(",")
.append(employee.getLtRylb()).append(",'")
.append(salaryMonth).append("','")
.append(Utils.null2String(employee.getLtCbzx())).append("',")
// .append(Utils.null2String(employee.getLtCbzx()))
.append(StringUtils.isBlank(ltCbzxMap.get(employee.getWorkcode())) ? Utils.null2String(employee.getLtCbzx()) : ltCbzxMap.get(employee.getWorkcode()))
.append("',")
.append(0).append(",").append(jdjx).append(",").append(bndjx).append(",").append(nzj);
for (LtSalaryReportConfigDTO dto : reportConfigs) {
@ -2638,7 +2694,9 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe
.append(employee.getJobtitleId()).append(",")
.append(employee.getLtRylb()).append(",'")
.append(salaryMonth).append("','")
.append(Utils.null2String(employee.getLtCbzx())).append("',")
.append(StringUtils.isBlank(ltCbzxMap.get(employee.getWorkcode())) ? Utils.null2String(employee.getLtCbzx()) : ltCbzxMap.get(employee.getWorkcode()))
// .append(Utils.null2String(employee.getLtCbzx()))
.append("',")
.append(0).append(",").append(jdjx).append(",").append(bndjx).append(",").append(nzj);
for (LtSalaryReportConfigDTO dto : reportConfigs) {
@ -4386,28 +4444,28 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe
RecordSet rs = new RecordSet();
// 获取直接人工工资分摊表的人
ArrayList<LtZjrggzftDTO> ltZjrggzftList = new ArrayList<>();
// String dataSourceId = baseBean.getPropValue("ltSalaryReport", "zjrycqgsft_data_source_id");
// RecordSetDataSource extRs = new RecordSetDataSource(dataSourceId);
// extRs.execute(" select month, user_code,sap_cost_center_name,sap_cost_center_name_desc,attendance_duration,sum_attendance_duration,proportion from dws_oa.work_hour_apportion_report where month='"+salaryMonth+"'");
// while (extRs.next()) {
// LtZjrggzftDTO dto = new LtZjrggzftDTO();
// dto.setNy(extRs.getString("month"));
// dto.setGh(extRs.getString("user_code"));
// dto.setCbzxbm(extRs.getString("sap_cost_center_name"));
// dto.setCbzx(extRs.getString("sap_cost_center_name_desc"));
// dto.setZb(SalaryEntityUtil.string2BigDecimalDefault0(extRs.getString("proportion")));
// ltZjrggzftList.add(dto);
// }
rs.execute(" select month, user_code,sap_cost_center_name,sap_cost_center_name_desc,attendance_duration,sum_attendance_duration,proportion from uf_testygcqgsftb where month='"+salaryMonth+"'");
while (rs.next()) {
String dataSourceId = baseBean.getPropValue("ltSalaryReport", "zjrycqgsft_data_source_id");
RecordSetDataSource extRs = new RecordSetDataSource(dataSourceId);
extRs.execute(" select month, user_code,sap_cost_center_name,sap_cost_center_name_desc,attendance_duration,sum_attendance_duration,proportion from dws_oa.work_hour_apportion_report where month='"+salaryMonth+"'");
while (extRs.next()) {
LtZjrggzftDTO dto = new LtZjrggzftDTO();
dto.setNy(rs.getString("month"));
dto.setGh(rs.getString("user_code"));
dto.setCbzxbm(rs.getString("sap_cost_center_name"));
dto.setCbzx(rs.getString("sap_cost_center_name_desc"));
dto.setZb(SalaryEntityUtil.string2BigDecimalDefault0(rs.getString("proportion")));
dto.setNy(extRs.getString("month"));
dto.setGh(extRs.getString("user_code"));
dto.setCbzxbm(extRs.getString("sap_cost_center_name"));
dto.setCbzx(extRs.getString("sap_cost_center_name_desc"));
dto.setZb(SalaryEntityUtil.string2BigDecimalDefault0(extRs.getString("proportion")));
ltZjrggzftList.add(dto);
}
// rs.execute(" select month, user_code,sap_cost_center_name,sap_cost_center_name_desc,attendance_duration,sum_attendance_duration,proportion from uf_testygcqgsftb where month='"+salaryMonth+"'");
// while (rs.next()) {
// LtZjrggzftDTO dto = new LtZjrggzftDTO();
// dto.setNy(rs.getString("month"));
// dto.setGh(rs.getString("user_code"));
// dto.setCbzxbm(rs.getString("sap_cost_center_name"));
// dto.setCbzx(rs.getString("sap_cost_center_name_desc"));
// dto.setZb(SalaryEntityUtil.string2BigDecimalDefault0(rs.getString("proportion")));
// ltZjrggzftList.add(dto);
// }
Map<String, List<LtZjrggzftDTO>> LtZjrggzfGroupByGh = SalaryEntityUtil.group2Map(ltZjrggzftList, LtZjrggzftDTO::getGh);
@ -4575,28 +4633,28 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe
RecordSet rs = new RecordSet();
// 获取直接人工工资分摊表的人
ArrayList<LtZjrggzftDTO> ltZjrggzftList = new ArrayList<>();
// String dataSourceId = baseBean.getPropValue("ltSalaryReport", "zjrycqgsft_data_source_id");
// RecordSetDataSource extRs = new RecordSetDataSource(dataSourceId);
// extRs.execute(" select month, user_code,sap_cost_center_name,sap_cost_center_name_desc,attendance_duration,sum_attendance_duration,proportion from dws_oa.work_hour_apportion_report where month='"+salaryMonth+"'");
// while (extRs.next()) {
// LtZjrggzftDTO dto = new LtZjrggzftDTO();
// dto.setNy(extRs.getString("month"));
// dto.setGh(extRs.getString("user_code"));
// dto.setCbzxbm(extRs.getString("sap_cost_center_name"));
// dto.setCbzx(extRs.getString("sap_cost_center_name_desc"));
// dto.setZb(SalaryEntityUtil.string2BigDecimalDefault0(extRs.getString("proportion")));
// ltZjrggzftList.add(dto);
// }
rs.execute(" select month, user_code,sap_cost_center_name,sap_cost_center_name_desc,attendance_duration,sum_attendance_duration,proportion from uf_testygcqgsftb where month='"+salaryMonth+"'");
while (rs.next()) {
String dataSourceId = baseBean.getPropValue("ltSalaryReport", "zjrycqgsft_data_source_id");
RecordSetDataSource extRs = new RecordSetDataSource(dataSourceId);
extRs.execute(" select month, user_code,sap_cost_center_name,sap_cost_center_name_desc,attendance_duration,sum_attendance_duration,proportion from dws_oa.work_hour_apportion_report where month='"+salaryMonth+"'");
while (extRs.next()) {
LtZjrggzftDTO dto = new LtZjrggzftDTO();
dto.setNy(rs.getString("month"));
dto.setGh(rs.getString("user_code"));
dto.setCbzxbm(rs.getString("sap_cost_center_name"));
dto.setCbzx(rs.getString("sap_cost_center_name_desc"));
dto.setZb(SalaryEntityUtil.string2BigDecimalDefault0(rs.getString("proportion")));
dto.setNy(extRs.getString("month"));
dto.setGh(extRs.getString("user_code"));
dto.setCbzxbm(extRs.getString("sap_cost_center_name"));
dto.setCbzx(extRs.getString("sap_cost_center_name_desc"));
dto.setZb(SalaryEntityUtil.string2BigDecimalDefault0(extRs.getString("proportion")));
ltZjrggzftList.add(dto);
}
// rs.execute(" select month, user_code,sap_cost_center_name,sap_cost_center_name_desc,attendance_duration,sum_attendance_duration,proportion from uf_testygcqgsftb where month='"+salaryMonth+"'");
// while (rs.next()) {
// LtZjrggzftDTO dto = new LtZjrggzftDTO();
// dto.setNy(rs.getString("month"));
// dto.setGh(rs.getString("user_code"));
// dto.setCbzxbm(rs.getString("sap_cost_center_name"));
// dto.setCbzx(rs.getString("sap_cost_center_name_desc"));
// dto.setZb(SalaryEntityUtil.string2BigDecimalDefault0(rs.getString("proportion")));
// ltZjrggzftList.add(dto);
// }
Map<String, List<LtZjrggzftDTO>> LtZjrggzfGroupByGh = SalaryEntityUtil.group2Map(ltZjrggzftList, LtZjrggzftDTO::getGh);
@ -4762,7 +4820,7 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe
BaseBean baseBean = new BaseBean();
RecordSet rs = new RecordSet();
// 获取全年人员明细工资实发表
rs.execute("select gh,szbm,szgw,yfgz,ydjx,jdjx,nzj,qjlxj from uf_rymxgzsf where qj >= '" + year + "-01' and qj <= '"+year+"'-12");
rs.execute("select gh,szbm,szgw,yfgz,ydjx,jdjx,nzj,qjlxj,bndjx from uf_rymxgzsf where qj >= '" + year + "-01' and qj <= '"+year+"-12'");
List<LtRymxgzDTO> ltRymxgzDTOList = new ArrayList<>();
while (rs.next()) {
ltRymxgzDTOList.add(LtRymxgzDTO.builder()
@ -4772,6 +4830,7 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe
.gz(SalaryEntityUtil.string2BigDecimalDefault0(rs.getString("yfgz")))
.jx(SalaryEntityUtil.string2BigDecimalDefault0(rs.getString("ydjx")))
.jdjx(SalaryEntityUtil.string2BigDecimalDefault0(rs.getString("jdjx")))
.bndjx(SalaryEntityUtil.string2BigDecimalDefault0(rs.getString("bndjx")))
.qtjlxj(SalaryEntityUtil.string2BigDecimalDefault0(rs.getString("qjlxj")))
.nzj(SalaryEntityUtil.string2BigDecimalDefault0(rs.getString("nzj")))
.build());
@ -4781,7 +4840,7 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe
SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss");
String currTime = String.format("'%s'", sdf.format(new Date()));
// 获取建模模块id
String modeId = baseBean.getPropValue("ltSalaryReport", "zjrggzftbsf_mode_id");
String modeId = baseBean.getPropValue("ltSalaryReport", "gwpjgzcx_mode_id");
// 入库前先删除
rs.execute("delete from uf_gwpjgzcxb where nf ='" + year +"'");
@ -4804,6 +4863,7 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe
}
// 计算平均月薪
BigDecimal empAveMonthSalary = empYearSumVal.divide(new BigDecimal(String.valueOf(ghDtoList.size())), 2, RoundingMode.HALF_UP);
sumEmpAveMonthSalary = sumEmpAveMonthSalary.add(empAveMonthSalary);
empNums++;
}
BigDecimal aveValue = sumEmpAveMonthSalary.divide(new BigDecimal(String.valueOf(empNums)), 2, RoundingMode.HALF_UP);
@ -4830,4 +4890,618 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe
}
return null;
}
/**
* 联特 表8 - 工资分摊表
* @param salaryMonth
* @return
*/
@Override
public Map<String, Object> ltGenGzftb(String salaryMonth) {
if (!SalaryDateUtil.checkYearMonth(salaryMonth)) {
throw new SalaryRunTimeException("年月错误");
}
BaseBean baseBean = new BaseBean();
RecordSet rs = new RecordSet();
// 获取武汉间接部门表数据
ArrayList<LtWhjjbmPO> ltWhjjbmPOS = new ArrayList<>();
rs.executeQuery("select xm,cbzx,jjbm,zb from uf_whjj where xzssy = ?", salaryMonth);
while (rs.next()) {
ltWhjjbmPOS.add(LtWhjjbmPO.builder()
.xm(SalaryEntityUtil.string2LongDefault0(rs.getString("xm")))
.cbzx(rs.getString("cbzx"))
.jjbm(rs.getString("jjbm"))
.zb(SalaryEntityUtil.string2BigDecimalDefault0(rs.getString("zb"))).build());
}
// 计算武汉间接部门对应的工资及工资额度
calWhjjbmGz(salaryMonth, ltWhjjbmPOS);
// 获取公共的是哪些成本中心
List<String> ggcbzxList = new ArrayList<>();
try {
String ggcbzxStr = new String(rs.getPropValue("ltSalaryReport", "gzftb_ggcbzx").getBytes("ISO-8859-1"), "utf-8");
ggcbzxList = Arrays.stream(ggcbzxStr.split(",")).collect(Collectors.toList());
} catch (UnsupportedEncodingException e) {
}
// 过滤成本中心和和公共数据
List<LtWhjjbmPO> cbzxWhjjbmList = new ArrayList<>();
List<LtWhjjbmPO> ggWhjjbmList = new ArrayList<>();
List<String> finalGgcbzxList = ggcbzxList;
ltWhjjbmPOS.stream().forEach(po -> {
if (finalGgcbzxList.contains(po.getCbzx())) {
ggWhjjbmList.add(po);
} else {
cbzxWhjjbmList.add(po);
}
});
// 获取所有的间接部门
List<String> allJjbmList = cbzxWhjjbmList.stream().map(LtWhjjbmPO::getJjbm).distinct().sorted(String::compareTo).collect(Collectors.toList());
// 成本中心数据根据成本中心分组展示
Map<String, List<LtWhjjbmPO>> cbzxWhjjbmMapGroupByCbzx = SalaryEntityUtil.group2Map(cbzxWhjjbmList, LtWhjjbmPO::getCbzx);
// 所有成本中心的工资总额
BigDecimal allCbzxGzzeVal = new BigDecimal("0");
List<Map<String, Object>> dtoList = new ArrayList<>();
for (Map.Entry<String, List<LtWhjjbmPO>> entry : cbzxWhjjbmMapGroupByCbzx.entrySet()) {
Map<String, Object> singleCbzxValueMap = new HashMap<>();
List<LtWhjjbmPO> singleCbzxWhjjbmList = entry.getValue();
BigDecimal singleAllJjbmVal = new BigDecimal("0");
for (String jjbm : allJjbmList) {
BigDecimal sumVal = singleCbzxWhjjbmList.stream().filter(po -> po.getJjbm().equals(jjbm))
.map(LtWhjjbmPO::getGzed)
.filter(gzed -> gzed != null)
.reduce(new BigDecimal("0"), BigDecimal::add);
singleCbzxValueMap.put(jjbm, sumVal.toPlainString());
singleAllJjbmVal= singleAllJjbmVal.add(sumVal);
}
singleCbzxValueMap.put("hj", singleAllJjbmVal.toPlainString());
singleCbzxValueMap.put("cbzx", entry.getKey());
allCbzxGzzeVal = allCbzxGzzeVal.add(singleAllJjbmVal);
dtoList.add(singleCbzxValueMap);
}
// 计算比例
BigDecimal totalBl = new BigDecimal("0");
for (Map<String, Object> singleCbzxValueMap : dtoList) {
BigDecimal singleHjVal = SalaryEntityUtil.string2BigDecimalDefault0(Utils.null2String(singleCbzxValueMap.get("hj")));
BigDecimal blVal = singleHjVal.divide(allCbzxGzzeVal, 4, RoundingMode.HALF_UP);
totalBl = totalBl.add(blVal);
singleCbzxValueMap.put("bl", blVal.toString());
}
if (totalBl.compareTo(new BigDecimal("1")) != 0) {
// 计算比例差异
BigDecimal cyValue = new BigDecimal("1").subtract(totalBl);
for (Map<String, Object> singleCbzxValueMap : dtoList) {
BigDecimal blVal = SalaryEntityUtil.string2BigDecimalDefault0(Utils.null2String(singleCbzxValueMap.get("bl")));
if (blVal.compareTo(new BigDecimal("0")) != 0) {
blVal = blVal.add(cyValue);
singleCbzxValueMap.put("bl", blVal.toString());
break;
}
}
}
// 所有公共分摊的合计值
BigDecimal ggftSumVal = ggWhjjbmList.stream().map(LtWhjjbmPO::getGzed).filter(gzed -> gzed != null).reduce(new BigDecimal("0"), BigDecimal::add);
// 计算每一个成本中心对应的公共分摊值
for (Map<String, Object> singleCbzxValueMap : dtoList) {
BigDecimal blVal = SalaryEntityUtil.string2BigDecimalDefault0(Utils.null2String(singleCbzxValueMap.get("bl")));
singleCbzxValueMap.put("ggft", ggftSumVal.multiply(blVal));
}
// 合计值
Map<String, BigDecimal> sumMap = new HashMap<>();
for (Map<String, Object> singleCbzxValueMap : dtoList) {
BigDecimal ggft = sumMap.computeIfAbsent("ggft", k -> new BigDecimal("0"));
BigDecimal ggftSum = ggft.add(SalaryEntityUtil.string2BigDecimalDefault0(Utils.null2String(singleCbzxValueMap.get("ggft"))));
sumMap.put("ggft", ggftSum);
BigDecimal hj = sumMap.computeIfAbsent("hj", k -> new BigDecimal("0"));
BigDecimal hjSum = hj.add(SalaryEntityUtil.string2BigDecimalDefault0(Utils.null2String(singleCbzxValueMap.get("hj"))));
sumMap.put("hj", hjSum);
for (String jjbm : allJjbmList) {
BigDecimal jjbmVal = sumMap.computeIfAbsent(jjbm, k -> new BigDecimal("0"));
BigDecimal jjbmSum = jjbmVal.add(SalaryEntityUtil.string2BigDecimalDefault0(Utils.null2String(singleCbzxValueMap.get(jjbm))));
sumMap.put(jjbm, jjbmSum);
}
}
Map<String, Object> sumValueMap = new HashMap<>();
sumValueMap.put("cbzx", "合计");
sumValueMap.put("ggft", sumMap.get("ggft") == null ? "0" : sumMap.get("ggft").toPlainString());
sumValueMap.put("hj", sumMap.get("hj") == null ? "0" : sumMap.get("hj").toPlainString());
for (String jjbm : allJjbmList) {
sumValueMap.put(jjbm, sumMap.get(jjbm) == null ? 0 : sumMap.get(jjbm).toPlainString());
}
dtoList.add(sumValueMap);
List<Column> columns = new ArrayList<>();
columns.add(new Column("成本中心","cbzx","cbzx"));
columns.add(new Column("公共分摊","ggft","ggft"));
for (String jjbm : allJjbmList) {
columns.add(new Column(jjbm,jjbm,jjbm));
}
columns.add(new Column("合计","hj","hj"));
Map<String, Object> resultMap = new HashMap<>();
resultMap.put("data", dtoList);
resultMap.put("columns", columns);
return resultMap;
}
// 计算武汉间接部门对应的工资及工资额度
private void calWhjjbmGz(String salaryMonth, List<LtWhjjbmPO> ltWhjjbmPOS) {
if (CollectionUtils.isEmpty(ltWhjjbmPOS)) {
return;
}
// 获取对应的实发数据
List<Long> employeeIds = ltWhjjbmPOS.stream().map(LtWhjjbmPO::getXm).collect(Collectors.toList());
// 获取对应期间人员明细工资实发表
RecordSet rs = new RecordSet();
BaseBean baseBean = new BaseBean();
String sfFieldsStr = baseBean.getPropValue("ltSalaryReport", "gzftb_sum_sf_fields");
List<String> sfFieldList = Arrays.stream(sfFieldsStr.split(",")).filter(field -> StringUtils.isNotBlank(field)).collect(Collectors.toList());
List<LtRymxgzDTO> ltRymxgzDTOList = new ArrayList<>();
List<List<Long>> empIdPartition = Lists.partition(employeeIds, 800);
empIdPartition.forEach(part -> {
rs.execute("select xm,"+sfFieldsStr+" from uf_rymxgzsf where qj = '"+salaryMonth+"' and xm in (" + StringUtils.join(part, ",") + ")");
while (rs.next()) {
BigDecimal sfValue = new BigDecimal("0");
for (String field : sfFieldList) {
sfValue = sfValue.add(SalaryEntityUtil.string2BigDecimalDefault0(rs.getString(field)));
}
ltRymxgzDTOList.add(LtRymxgzDTO.builder()
.xm(SalaryEntityUtil.string2LongDefault0(rs.getString("xm")))
.gz(sfValue)
.build());
}
});
Map<Long, LtRymxgzDTO> ltRymxgzDTOMap = SalaryEntityUtil.convert2Map(ltRymxgzDTOList, LtRymxgzDTO::getXm);
for (LtWhjjbmPO po : ltWhjjbmPOS) {
LtRymxgzDTO ltRymxgzDTO = ltRymxgzDTOMap.get(po.getXm());
if (ltRymxgzDTO != null) {
po.setGz(ltRymxgzDTO.getGz());
if (po.getZb() != null) {
po.setGzed(ltRymxgzDTO.getGz().multiply(po.getZb()).setScale(2, RoundingMode.HALF_UP));
}
} else {
po.setGz(new BigDecimal("0"));
po.setGzed(new BigDecimal("0"));
}
}
}
@Override
public XSSFWorkbook exportLtGzftb(LtReportParam param) {
Map<String, Object> map = ltGenGzftb(param.getSalaryMonth());
List<Column> columns = (List<Column>)map.get("columns");
List<Map<String, Object>> dataList = (List<Map<String, Object>>)map.get("data");
List<List<Object>> rowList = new ArrayList<>();
rowList.add(columns.stream().map(Column::getTitle).collect(Collectors.toList()));
for (Map<String, Object> valueMap : dataList) {
List<Object> singleList = new ArrayList<>();
for (Column col : columns) {
Object o = valueMap.get(col.getKey());
singleList.add(o);
}
rowList.add(singleList);
}
return ExcelUtil.genWorkbookV2(rowList, "工资分摊表");
}
/**
* 联特 表10 - 销售薪资分摊明细表
* @param param
* @return
*/
@Override
public Map<String, Object> ltKhjlgzftList(LtReportParam param) {
String year = param.getYear();
if (!NumberUtils.isCreatable(year)) {
throw new SalaryRunTimeException("参数错误");
}
RecordSet rs = new RecordSet();
// 获取销售crm表数据
List<LtXsCrmPO> ltXsCrmPOS = new ArrayList<>();
rs.executeQuery("select kh,ny,khjl,srje from uf_xscrm where ny >= ? and ny <=?", Arrays.asList(year+"-01", year+"-12"));
while (rs.next()) {
YearMonth yearMonth = SalaryDateUtil.String2YearMonth(rs.getString("ny"));
ltXsCrmPOS.add(LtXsCrmPO.builder()
.kh(Utils.null2String(rs.getString("kh")))
.salaryMonth(rs.getString("ny"))
.month(yearMonth == null ? 0 : yearMonth.getMonthValue())
.khjl(SalaryEntityUtil.string2LongDefault0(rs.getString("khjl")))
.srje(SalaryEntityUtil.string2BigDecimalDefault0(rs.getString("srje"))).build());
}
// crm 数据根据客户经理月份分组
Map<String, List<LtXsCrmPO>> crmGroupByKhjlAndMonth = SalaryEntityUtil.group2Map(ltXsCrmPOS, po -> po.getKhjl() + "_split" + po.getSalaryMonth());
LinkedHashMap<String, List<LtXsCrmPO>> sortedCrmGroupByKhjlAndMonth = crmGroupByKhjlAndMonth.entrySet().stream()
.sorted(Map.Entry.comparingByKey())
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue, (oldValue, newValue) -> oldValue,
LinkedHashMap::new));
// 获取客户经理的实发表工资数据
List<Long> khjlIds = ltXsCrmPOS.stream().map(LtXsCrmPO::getKhjl).distinct().collect(Collectors.toList());
Map<Long, String> empIdMap = SalaryEntityUtil.convert2Map(getSalaryEmployeeService(user).listByIds(khjlIds), DataCollectionEmployee::getEmployeeId, DataCollectionEmployee::getUsername);
BaseBean baseBean = new BaseBean();
String sfFieldsStr = baseBean.getPropValue("ltSalaryReport", "xsxzftmx_sum_sf_fields");
List<String> sfFieldList = Arrays.stream(sfFieldsStr.split(",")).filter(field -> StringUtils.isNotBlank(field)).collect(Collectors.toList());
List<LtRymxgzDTO> ltRymxgzDTOList = new ArrayList<>();
List<List<Long>> empIdPartition = Lists.partition(khjlIds, 800);
empIdPartition.forEach(part -> {
rs.execute("select xm,qj,"+sfFieldsStr+" from uf_rymxgzsf where qj >= '"+year+"-01' and qj <= '"+year+"-12' and xm in (" + StringUtils.join(part, ",") + ")");
while (rs.next()) {
BigDecimal sfValue = new BigDecimal("0");
for (String field : sfFieldList) {
sfValue = sfValue.add(SalaryEntityUtil.string2BigDecimalDefault0(rs.getString(field)));
}
ltRymxgzDTOList.add(LtRymxgzDTO.builder()
.xm(SalaryEntityUtil.string2LongDefault0(rs.getString("xm")))
.qj(Utils.null2String(rs.getString("qj")))
.gz(sfValue)
.build());
}
});
Map<String, LtRymxgzDTO> ltRymxgzDTOMap = SalaryEntityUtil.convert2Map(ltRymxgzDTOList, dto -> dto.getXm()+"_split"+dto.getQj());
// 获取所有的客户
List<String> khList = ltXsCrmPOS.stream().map(LtXsCrmPO::getKh).distinct().sorted(String::compareTo).collect(Collectors.toList());
List<Map<String, Object>> dataList = new ArrayList<>();
for (Map.Entry<String, List<LtXsCrmPO>> entry : sortedCrmGroupByKhjlAndMonth.entrySet()) {
String[] split = entry.getKey().split("_split");
String khjl = split != null && split.length > 0 ? split[0] : "";
String salaryMonth = split != null && split.length > 1 ? split[1] : "";
Map<String, Object> singleRowMap = new HashMap<>();
for (String kh : khList) {
BigDecimal khSrjeVal = entry.getValue().stream().filter(po -> Utils.null2String(po.getKh()).equals(kh))
.map(LtXsCrmPO::getSrje).filter(je -> je != null)
.reduce(new BigDecimal("0"), BigDecimal::add);
singleRowMap.put(kh, khSrjeVal.toPlainString());
}
LtRymxgzDTO ltRymxgzDTO = ltRymxgzDTOMap.get(entry.getKey());
singleRowMap.put("gz", ltRymxgzDTO == null ? "0" : ltRymxgzDTO.getGz());
singleRowMap.put("khjl", empIdMap.get(SalaryEntityUtil.string2Long(khjl)));
singleRowMap.put("ny", salaryMonth);
dataList.add(singleRowMap);
}
List<Column> columns = new ArrayList<>();
columns.add(new Column("客户经理","khjl","khjl"));
columns.add(new Column("年月","ny","ny"));
for (String kh : khList) {
columns.add(new Column(kh,kh,kh));
}
columns.add(new Column("工资","gz","gz"));
Map<String, Object> resultMap = new HashMap<>();
resultMap.put("data", dataList);
resultMap.put("columns", columns);
if (param.getExport() != null && param.getExport()) {
Map<String, Object> sumMap = new HashMap<>();
sumMap.put("khjl", "合计");
Map<String, List<LtXsCrmPO>> crmGroupByKh = SalaryEntityUtil.group2Map(ltXsCrmPOS, po -> po.getKh());
for (String kh : khList) {
List<LtXsCrmPO> khCrmList = crmGroupByKh.get(kh);
if (CollectionUtils.isNotEmpty(khCrmList)) {
BigDecimal sumVal = khCrmList.stream().map(LtXsCrmPO::getSrje).filter(je -> je != null).reduce(new BigDecimal("0"), BigDecimal::add);
sumMap.put(kh, sumVal.toPlainString());
}
}
BigDecimal gzSumVal = dataList.stream().map(map -> SalaryEntityUtil.string2BigDecimalDefault0(Utils.null2String(map.get("gz")))).reduce(new BigDecimal("0"), BigDecimal::add);
sumMap.put("gz", gzSumVal.toPlainString());
resultMap.put("sumRow", sumMap);
}
return resultMap;
}
@Override
public Map<String, Object> ltKhjlgzftSum(String year) {
if (!NumberUtils.isCreatable(year)) {
throw new SalaryRunTimeException("参数错误");
}
RecordSet rs = new RecordSet();
// 获取销售crm表数据
List<LtXsCrmPO> ltXsCrmPOS = new ArrayList<>();
rs.executeQuery("select kh,ny,khjl,srje from uf_xscrm where ny >= ? and ny <=?", Arrays.asList(year+"-01", year+"-12"));
while (rs.next()) {
YearMonth yearMonth = SalaryDateUtil.String2YearMonth(rs.getString("ny"));
ltXsCrmPOS.add(LtXsCrmPO.builder()
.kh(Utils.null2String(rs.getString("kh")))
.salaryMonth(rs.getString("ny"))
.month(yearMonth == null ? 0 : yearMonth.getMonthValue())
.khjl(SalaryEntityUtil.string2LongDefault0(rs.getString("khjl")))
.srje(SalaryEntityUtil.string2BigDecimalDefault0(rs.getString("srje"))).build());
}
// crm 数据根据客户分组
Map<String, List<LtXsCrmPO>> crmGroupByKhjlAndMonth = SalaryEntityUtil.group2Map(ltXsCrmPOS, po -> po.getKh());
// 获取客户经理的实发表工资数据
List<Long> khjlIds = ltXsCrmPOS.stream().map(LtXsCrmPO::getKhjl).distinct().collect(Collectors.toList());
Map<Long, String> empIdMap = SalaryEntityUtil.convert2Map(getSalaryEmployeeService(user).listByIds(khjlIds), DataCollectionEmployee::getEmployeeId, DataCollectionEmployee::getUsername);
BaseBean baseBean = new BaseBean();
String sfFieldsStr = baseBean.getPropValue("ltSalaryReport", "xsxzftmx_sum_sf_fields");
List<String> sfFieldList = Arrays.stream(sfFieldsStr.split(",")).filter(field -> StringUtils.isNotBlank(field)).collect(Collectors.toList());
List<LtRymxgzDTO> ltRymxgzDTOList = new ArrayList<>();
List<List<Long>> empIdPartition = Lists.partition(khjlIds, 800);
final BigDecimal[] totalSfVal = {new BigDecimal("0")};
empIdPartition.forEach(part -> {
rs.execute("select xm,qj,"+sfFieldsStr+" from uf_rymxgzsf where qj >= '"+year+"-01' and qj <= '"+year+"-12' and xm in (" + StringUtils.join(part, ",") + ")");
while (rs.next()) {
for (String field : sfFieldList) {
totalSfVal[0] = totalSfVal[0].add(SalaryEntityUtil.string2BigDecimalDefault0(rs.getString(field)));
}
}
});
Map<String, Object> sumMap = new HashMap<>();
sumMap.put("khjl", "合计");
sumMap.put("gz", totalSfVal[0].toPlainString());
// 获取所有的客户
List<String> khList = ltXsCrmPOS.stream().map(LtXsCrmPO::getKh).distinct().sorted(String::compareTo).collect(Collectors.toList());
for (String kh : khList) {
List<LtXsCrmPO> ltXsCrmPOList = crmGroupByKhjlAndMonth.get(kh);
if (CollectionUtils.isNotEmpty(ltXsCrmPOList)) {
BigDecimal khSumVal = ltXsCrmPOList.stream().map(LtXsCrmPO::getSrje).filter(je -> je != null).reduce(new BigDecimal("0"), BigDecimal::add);
sumMap.put(kh, khSumVal.toPlainString());
}
}
Map<String, Object> resultMap = new HashMap<>();
resultMap.put("sumRow", sumMap);
return resultMap;
}
@Override
public XSSFWorkbook exportKhjlgzftList(String year) {
LtReportParam build = LtReportParam.builder().year(year).build();
build.setExport(true);
Map<String, Object> map = ltKhjlgzftList(build);
List<Column> columns = (List<Column>)map.get("columns");
List<Map<String, Object>> dataList = (List<Map<String, Object>>)map.get("data");
Map<String, Object> sumRow = (Map<String, Object>)map.get("sumRow");
dataList.add(sumRow);
List<List<Object>> rowList = new ArrayList<>();
rowList.add(columns.stream().map(Column::getTitle).collect(Collectors.toList()));
for (Map<String, Object> valueMap : dataList) {
List<Object> singleList = new ArrayList<>();
for (Column col : columns) {
Object o = valueMap.get(col.getKey());
singleList.add(o);
}
rowList.add(singleList);
}
return ExcelUtil.genWorkbookV2(rowList, "客户经理工资分摊表");
}
@Override
public Map<String, Object> ltXsxzftList(LtReportParam param) {
String year = param.getYear();
if (!NumberUtils.isCreatable(year)) {
throw new SalaryRunTimeException("参数错误");
}
if (param.getKhjl() == null) {
throw new SalaryRunTimeException("客户经理不能为空");
}
RecordSet rs = new RecordSet();
// 获取销售crm表数据
List<LtXsCrmPO> ltXsCrmPOS = new ArrayList<>();
rs.executeQuery("select kh,ny,khjl,srje from uf_xscrm where ny >= ? and ny <=? and khjl=?", Arrays.asList(year+"-01", year+"-12", param.getKhjl()));
while (rs.next()) {
YearMonth yearMonth = SalaryDateUtil.String2YearMonth(rs.getString("ny"));
ltXsCrmPOS.add(LtXsCrmPO.builder()
.kh(Utils.null2String(rs.getString("kh")))
.salaryMonth(rs.getString("ny"))
.month(yearMonth == null ? 0 : yearMonth.getMonthValue())
.khjl(SalaryEntityUtil.string2LongDefault0(rs.getString("khjl")))
.srje(SalaryEntityUtil.string2BigDecimalDefault0(rs.getString("srje"))).build());
}
// 获取所有的月份数据
List<String> allSalaryMonthList = ltXsCrmPOS.stream().map(LtXsCrmPO::getSalaryMonth).distinct().sorted(String::compareTo).collect(Collectors.toList());
// crm 数据根据月份分组
Map<String, List<LtXsCrmPO>> crmGroupBySalaryMonth = SalaryEntityUtil.group2Map(ltXsCrmPOS, po -> po.getSalaryMonth());
// 获取每个月份所有客户的合计值
Map<String, String> sumValGroupByMonth = new HashMap<>();
for (Map.Entry<String, List<LtXsCrmPO>> entry : crmGroupBySalaryMonth.entrySet()) {
BigDecimal sumValByMonth = entry.getValue().stream().map(LtXsCrmPO::getSrje).filter(je -> je != null && je.compareTo(new BigDecimal("0")) > 0).reduce(new BigDecimal("0"), BigDecimal::add);
sumValGroupByMonth.put(entry.getKey(), sumValByMonth.toPlainString());
}
// crm 数据根据客户分组
Map<String, List<LtXsCrmPO>> crmGroupByKh = SalaryEntityUtil.group2Map(ltXsCrmPOS, po -> po.getKh());
LinkedHashMap<String, List<LtXsCrmPO>> sortedCrmGroupByKh = crmGroupByKh.entrySet().stream()
.sorted(Map.Entry.comparingByKey())
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue, (oldValue, newValue) -> oldValue,
LinkedHashMap::new));
// 获取客户经理的实发表工资数据
BaseBean baseBean = new BaseBean();
String sfFieldsStr = baseBean.getPropValue("ltSalaryReport", "xsxzftmx_sum_sf_fields");
List<String> sfFieldList = Arrays.stream(sfFieldsStr.split(",")).filter(field -> StringUtils.isNotBlank(field)).collect(Collectors.toList());
List<LtRymxgzDTO> ltRymxgzDTOList = new ArrayList<>();
rs.execute("select xm,qj,"+sfFieldsStr+" from uf_rymxgzsf where qj >= '"+year+"-01' and qj <= '"+year+"-12' and xm =" + param.getKhjl());
while (rs.next()) {
BigDecimal sfValue = new BigDecimal("0");
for (String field : sfFieldList) {
sfValue = sfValue.add(SalaryEntityUtil.string2BigDecimalDefault0(rs.getString(field)));
}
ltRymxgzDTOList.add(LtRymxgzDTO.builder()
.xm(SalaryEntityUtil.string2LongDefault0(rs.getString("xm")))
.qj(Utils.null2String(rs.getString("qj")))
.gz(sfValue)
.build());
}
Map<String, List<LtRymxgzDTO>> ltRymxgzDTOMap = SalaryEntityUtil.group2Map(ltRymxgzDTOList, dto -> dto.getQj());
// 获取所有的客户
List<Map<String, Object>> dataList = new ArrayList<>();
for (Map.Entry<String, List<LtXsCrmPO>> entry : sortedCrmGroupByKh.entrySet()) {
Map<String, Object> singleRowMap = new HashMap<>();
for (String salaryMonth : allSalaryMonthList) {
// 获取该月份所有客户的合计值
BigDecimal sumValByMonth = SalaryEntityUtil.string2BigDecimalDefault0(sumValGroupByMonth.get(salaryMonth));
// 该月该客户金额值
BigDecimal srjeVal = entry.getValue().stream().filter(po -> Utils.null2String(po.getSalaryMonth()).equals(salaryMonth))
.map(LtXsCrmPO::getSrje).filter(je -> je != null)
.reduce(new BigDecimal("0"), BigDecimal::add);
// 获取该客户经理该月工资
BigDecimal gz = new BigDecimal("0");
List<LtRymxgzDTO> ltRymxgzDTOS = ltRymxgzDTOMap.get(salaryMonth);
if (CollectionUtils.isNotEmpty(ltRymxgzDTOS)) {
gz = ltRymxgzDTOS.stream().map(LtRymxgzDTO::getGz).filter(g -> g != null).reduce(new BigDecimal("0"), BigDecimal::add);
}
String ftgz = "0";
if (srjeVal != null && srjeVal.compareTo(new BigDecimal("0")) > 0 && sumValByMonth != null && sumValByMonth.compareTo(new BigDecimal("0")) > 0 ) {
ftgz = gz.multiply(srjeVal).divide(sumValByMonth,2, RoundingMode.HALF_UP).toPlainString();
}
singleRowMap.put(salaryMonth, ftgz);
}
singleRowMap.put("kh", entry.getKey());
dataList.add(singleRowMap);
}
List<Column> columns = new ArrayList<>();
columns.add(new Column("客户","kh","kh"));
for (String salaryMonth : allSalaryMonthList) {
columns.add(new Column(salaryMonth + "分摊工资",salaryMonth,salaryMonth));
}
Map<String, Object> resultMap = new HashMap<>();
resultMap.put("data", dataList);
resultMap.put("columns", columns);
if (param.getExport() != null && param.getExport()) {
Map<String, Object> sumMap = new HashMap<>();
sumMap.put("kh", "合计");
for (String salaryMonth : allSalaryMonthList) {
BigDecimal sumVal = dataList.stream().map(map -> SalaryEntityUtil.string2BigDecimalDefault0(Utils.null2String(map.get(salaryMonth)))).reduce(new BigDecimal("0"), BigDecimal::add);
sumMap.put(salaryMonth, sumVal);
}
resultMap.put("sumRow", sumMap);
}
return resultMap;
}
@Override
public Map<String, Object> ltXsxzftSum(LtReportParam param) {
String year = param.getYear();
if (!NumberUtils.isCreatable(year)) {
throw new SalaryRunTimeException("参数错误");
}
if (param.getKhjl() == null) {
throw new SalaryRunTimeException("客户经理不能为空");
}
RecordSet rs = new RecordSet();
// 获取销售crm表数据
List<LtXsCrmPO> ltXsCrmPOS = new ArrayList<>();
rs.executeQuery("select kh,ny,khjl,srje from uf_xscrm where ny >= ? and ny <=? and khjl=?", Arrays.asList(year+"-01", year+"-12", param.getKhjl()));
while (rs.next()) {
YearMonth yearMonth = SalaryDateUtil.String2YearMonth(rs.getString("ny"));
ltXsCrmPOS.add(LtXsCrmPO.builder()
.kh(Utils.null2String(rs.getString("kh")))
.salaryMonth(rs.getString("ny"))
.month(yearMonth == null ? 0 : yearMonth.getMonthValue())
.khjl(SalaryEntityUtil.string2LongDefault0(rs.getString("khjl")))
.srje(SalaryEntityUtil.string2BigDecimalDefault0(rs.getString("srje"))).build());
}
// 获取所有的月份数据
List<String> allSalaryMonthList = ltXsCrmPOS.stream().map(LtXsCrmPO::getSalaryMonth).distinct().sorted(String::compareTo).collect(Collectors.toList());
// crm 数据根据月份分组
Map<String, List<LtXsCrmPO>> crmGroupBySalaryMonth = SalaryEntityUtil.group2Map(ltXsCrmPOS, po -> po.getSalaryMonth());
// 获取每个月份所有客户的合计值
Map<String, String> sumValGroupByMonth = new HashMap<>();
for (Map.Entry<String, List<LtXsCrmPO>> entry : crmGroupBySalaryMonth.entrySet()) {
BigDecimal sumValByMonth = entry.getValue().stream().map(LtXsCrmPO::getSrje).filter(je -> je != null && je.compareTo(new BigDecimal("0")) > 0).reduce(new BigDecimal("0"), BigDecimal::add);
sumValGroupByMonth.put(entry.getKey(), sumValByMonth.toPlainString());
}
// crm 数据根据客户分组
Map<String, List<LtXsCrmPO>> crmGroupByKh = SalaryEntityUtil.group2Map(ltXsCrmPOS, po -> po.getKh());
LinkedHashMap<String, List<LtXsCrmPO>> sortedCrmGroupByKh = crmGroupByKh.entrySet().stream()
.sorted(Map.Entry.comparingByKey())
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue, (oldValue, newValue) -> oldValue,
LinkedHashMap::new));
// 获取客户经理的实发表工资数据
BaseBean baseBean = new BaseBean();
String sfFieldsStr = baseBean.getPropValue("ltSalaryReport", "xsxzftmx_sum_sf_fields");
List<String> sfFieldList = Arrays.stream(sfFieldsStr.split(",")).filter(field -> StringUtils.isNotBlank(field)).collect(Collectors.toList());
List<LtRymxgzDTO> ltRymxgzDTOList = new ArrayList<>();
rs.execute("select xm,qj,"+sfFieldsStr+" from uf_rymxgzsf where qj >= '"+year+"-01' and qj <= '"+year+"-12' and xm =" + param.getKhjl());
while (rs.next()) {
BigDecimal sfValue = new BigDecimal("0");
for (String field : sfFieldList) {
sfValue = sfValue.add(SalaryEntityUtil.string2BigDecimalDefault0(rs.getString(field)));
}
ltRymxgzDTOList.add(LtRymxgzDTO.builder()
.xm(SalaryEntityUtil.string2LongDefault0(rs.getString("xm")))
.qj(Utils.null2String(rs.getString("qj")))
.gz(sfValue)
.build());
}
Map<String, List<LtRymxgzDTO>> ltRymxgzDTOMap = SalaryEntityUtil.group2Map(ltRymxgzDTOList, dto -> dto.getQj());
// 获取所有的客户
List<Map<String, Object>> dataList = new ArrayList<>();
for (Map.Entry<String, List<LtXsCrmPO>> entry : sortedCrmGroupByKh.entrySet()) {
Map<String, Object> singleRowMap = new HashMap<>();
for (String salaryMonth : allSalaryMonthList) {
// 获取该月份所有客户的合计值
BigDecimal sumValByMonth = SalaryEntityUtil.string2BigDecimalDefault0(sumValGroupByMonth.get(salaryMonth));
// 该月该客户金额值
BigDecimal srjeVal = entry.getValue().stream().filter(po -> Utils.null2String(po.getSalaryMonth()).equals(salaryMonth))
.map(LtXsCrmPO::getSrje).filter(je -> je != null)
.reduce(new BigDecimal("0"), BigDecimal::add);
// 获取该客户经理该月工资
BigDecimal gz = new BigDecimal("0");
List<LtRymxgzDTO> ltRymxgzDTOS = ltRymxgzDTOMap.get(salaryMonth);
if (CollectionUtils.isNotEmpty(ltRymxgzDTOS)) {
gz = ltRymxgzDTOS.stream().map(LtRymxgzDTO::getGz).filter(g -> g != null).reduce(new BigDecimal("0"), BigDecimal::add);
}
String ftgz = "0";
if (srjeVal != null && srjeVal.compareTo(new BigDecimal("0")) > 0 && sumValByMonth != null && sumValByMonth.compareTo(new BigDecimal("0")) > 0 ) {
ftgz = gz.multiply(srjeVal).divide(sumValByMonth,2, RoundingMode.HALF_UP).toPlainString();
}
singleRowMap.put(salaryMonth, ftgz);
}
singleRowMap.put("kh", entry.getKey());
dataList.add(singleRowMap);
}
Map<String, Object> sumMap = new HashMap<>();
sumMap.put("kh", "合计");
for (String salaryMonth : allSalaryMonthList) {
BigDecimal sumVal = dataList.stream().map(map -> SalaryEntityUtil.string2BigDecimalDefault0(Utils.null2String(map.get(salaryMonth)))).reduce(new BigDecimal("0"), BigDecimal::add);
sumMap.put(salaryMonth, sumVal);
}
Map<String, Object> resultMap = new HashMap<>();
resultMap.put("sumRow", sumMap);
return resultMap;
}
@Override
public XSSFWorkbook exportXsxzftList(LtReportParam param) {
param.setExport(true);
Map<String, Object> map = ltXsxzftList(param);
List<Column> columns = (List<Column>)map.get("columns");
List<Map<String, Object>> dataList = (List<Map<String, Object>>)map.get("data");
Map<String, Object> sumRow = (Map<String, Object>)map.get("sumRow");
dataList.add(sumRow);
List<List<Object>> rowList = new ArrayList<>();
rowList.add(columns.stream().map(Column::getTitle).collect(Collectors.toList()));
for (Map<String, Object> valueMap : dataList) {
List<Object> singleList = new ArrayList<>();
for (Column col : columns) {
Object o = valueMap.get(col.getKey());
singleList.add(o);
}
rowList.add(singleList);
}
return ExcelUtil.genWorkbookV2(rowList, "销售薪资分摊明细表");
}
}

View File

@ -1277,5 +1277,156 @@ public class SalaryAcctController {
return new ResponseResult<String, String>(user).run(getSalaryAcctResultWrapper(user)::ltGenGwpjgzcxb, salaryMonth);
}
/**
* 联特 表8 - 工资分摊表
* @param request
* @param response
* @return
*/
@POST
@Path("/ltSalaryReport/genGzftb")
@Produces(MediaType.APPLICATION_JSON)
public String ltGenGzftb(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody LtReportParam param) {
User user = HrmUserVarify.getUser(request, response);
return new ResponseResult<String, Map<String, Object>>(user).run(getSalaryAcctResultWrapper(user)::ltGenGzftb, param.getSalaryMonth());
}
@POST
@Path("/ltSalaryReport/exportGzftb")
@Produces(MediaType.APPLICATION_OCTET_STREAM)
public Response ltExportGzftb(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody LtReportParam param) {
try {
User user = HrmUserVarify.getUser(request, response);
XSSFWorkbook workbook = getSalaryAcctResultWrapper(user).exportLtGzftb(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;
}
}
/**
* 联特 表10 - 销售薪资分摊明细表
* @param request
* @param response
* @return
*/
@POST
@Path("/ltSalaryReport/khjlgzftList")
@Produces(MediaType.APPLICATION_JSON)
public String ltKhjlgzftList(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody LtReportParam param) {
User user = HrmUserVarify.getUser(request, response);
return new ResponseResult<LtReportParam, Map<String, Object>>(user).run(getSalaryAcctResultWrapper(user)::ltKhjlgzftList, param);
}
/**
* 联特 表10 - 销售薪资分摊明细表
* @param request
* @param response
* @return
*/
@POST
@Path("/ltSalaryReport/khjlgzftSum")
@Produces(MediaType.APPLICATION_JSON)
public String ltKhjlgzftSum(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody LtReportParam param) {
User user = HrmUserVarify.getUser(request, response);
return new ResponseResult<String, Map<String, Object>>(user).run(getSalaryAcctResultWrapper(user)::ltKhjlgzftSum, param.getYear());
}
@POST
@Path("/ltSalaryReport/exportKhjlgzftList")
@Produces(MediaType.APPLICATION_OCTET_STREAM)
public Response exportKhjlgzftList(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody LtReportParam param) {
try {
User user = HrmUserVarify.getUser(request, response);
XSSFWorkbook workbook = getSalaryAcctResultWrapper(user).exportKhjlgzftList(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;
}
}
/**
* 联特 表10 - 销售薪资分摊明细表
* @param request
* @param response
* @return
*/
@POST
@Path("/ltSalaryReport/xsxzftList")
@Produces(MediaType.APPLICATION_JSON)
public String ltXsxzftList(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody LtReportParam param) {
User user = HrmUserVarify.getUser(request, response);
return new ResponseResult<LtReportParam, Map<String, Object>>(user).run(getSalaryAcctResultWrapper(user)::ltXsxzftList, param);
}
/**
* 联特 表10 - 销售薪资分摊明细表
* @param request
* @param response
* @return
*/
@POST
@Path("/ltSalaryReport/xsxzftSum")
@Produces(MediaType.APPLICATION_JSON)
public String ltXsxzftSum(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody LtReportParam param) {
User user = HrmUserVarify.getUser(request, response);
return new ResponseResult<LtReportParam, Map<String, Object>>(user).run(getSalaryAcctResultWrapper(user)::ltXsxzftSum, param);
}
@POST
@Path("/ltSalaryReport/exportXsxzftList")
@Produces(MediaType.APPLICATION_OCTET_STREAM)
public Response exportXsxzftList(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody LtReportParam param) {
try {
User user = HrmUserVarify.getUser(request, response);
XSSFWorkbook workbook = getSalaryAcctResultWrapper(user).exportXsxzftList(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

@ -24,6 +24,7 @@ import com.engine.salary.wrapper.proxy.SalaryAcctResultWrapperProxy;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang.math.NumberUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import weaver.hrm.User;
import java.math.BigDecimal;
@ -531,4 +532,41 @@ public class SalaryAcctResultWrapper extends Service implements SalaryAcctResult
public String ltGenGwpjgzcxb(String salaryMonth) {
return getSalaryAcctResultService(user).ltGenGwpjgzcxb(salaryMonth);
}
/**
* 联特 表8 - 工资分摊表
* @param salaryMonth
* @return
*/
public Map<String, Object> ltGenGzftb(String salaryMonth) {
return getSalaryAcctResultService(user).ltGenGzftb(salaryMonth);
}
public XSSFWorkbook exportLtGzftb(LtReportParam param) {
return getSalaryAcctResultService(user).exportLtGzftb(param);
}
public Map<String, Object> ltKhjlgzftList(LtReportParam param) {
return getSalaryAcctResultService(user).ltKhjlgzftList(param);
}
public Map<String, Object> ltKhjlgzftSum(String year) {
return getSalaryAcctResultService(user).ltKhjlgzftSum(year);
}
public XSSFWorkbook exportKhjlgzftList(LtReportParam param) {
return getSalaryAcctResultService(user).exportKhjlgzftList(param.getYear());
}
public Map<String, Object> ltXsxzftList(LtReportParam param) {
return getSalaryAcctResultService(user).ltXsxzftList(param);
}
public Map<String, Object> ltXsxzftSum(LtReportParam param) {
return getSalaryAcctResultService(user).ltXsxzftSum(param);
}
public XSSFWorkbook exportXsxzftList(LtReportParam param) {
return getSalaryAcctResultService(user).exportXsxzftList(param);
}
}