大族富创得薪资报表

This commit is contained in:
dxfeng 2025-03-19 13:22:54 +08:00
parent a29f8b3da9
commit c805c6a462
10 changed files with 865 additions and 0 deletions

View File

@ -0,0 +1,12 @@
package com.api.salary.web;
import javax.ws.rs.Path;
/**
* @author:dxfeng
* @createTime: 2025/03/19
* @version: 1.0
*/
@Path("/bs/dzsalary/report")
public class DzSalaryReportController extends com.engine.salary.web.DzSalaryReportController {
}

View File

@ -0,0 +1,298 @@
package com.engine.salary.entity.dzreport.dto;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* @author:dxfeng
* @createTime: 2025/03/18
* @version: 1.0
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class DzSalaryReportDTO {
private String userId;
private String taxAgentId;
/**
* 个税扣缴义务人
*/
private String taxAgentName;
/**
* 姓名
*/
private String lastName;
/**
* 月份
*/
private String month;
/**
* 一级部门
*/
private String firstDepartment;
/**
* 二级部门
*/
private String secondaryDepartment;
/**
* 三级部门
*/
private String thirdDepartment;
/**
* 产品分组
*/
private String productGrouping;
/**
* 离职日期
*/
private String terminationDate;
/**
* 所在层级部门
*/
private String currentDepartment;
/*固定项目*/
/**
* 入职日期
*/
private String companyStartDate;
/**
* 状态
*/
private String status;
/**
* 岗位
*/
private String jobtitle;
/**
* 合同归属地
*/
private String placeOfContractOwnership;
/**
* 工资标准
*/
private String wageStandard;
/**
* 基本工资
*/
private String basicSalary;
/**
* 岗位工资
*/
private String postWage;
/**
* 绩效工资标准
*/
private String performanceBasedSalaryStandards;
/**
* 工种/管理补贴
*/
private String managementSubsidy;
/**
* 通讯补贴
*/
private String communicationSubsidy;
/**
* 实习生加班费基数
*/
private String internshipOvertimePayBase;
/*系统自动计算项目*/
/**
* 司龄
*/
private String companyWorkYear;
/**
* 系统事假时数
*/
private String systemPersonalLeaveHours;
/**
* 抵扣后事假时数
*/
private String deductionOfPersonalLeaveHours;
/**
* 病假时数
*/
private String sickLeaveHours;
/**
* 加班费基数
*/
private String overtimePayBase;
/**
* 抵扣后双休加班时数
*/
private String overtimeHoursOnWeekendsAfterDeduction;
/**
* 抵扣后平时加班时数
*/
private String overtimeHoursAfterDeduction;
/**
* 节假加班小时数
*/
private String overtimeHoursDuringHolidays;
/**
* 双休加班小时数
*/
private String overtimeHoursOnWeekends;
/**
* 平时加班小时数
*/
private String weekdayOvertimeHours;
/**
* 双休加班费
*/
private String overtimePayForWeekendsOff;
/**
* 平时加班费
*/
private String regularOvertimePay;
/**
* 节假加班费
*/
private String holidayOvertimePay;
/**
* 事假扣款
*/
private String deductionForPersonalLeave;
/**
* 病假扣款
*/
private String sickLeaveDeduction;
/**
* 加班费
*/
private String overtimePay;
/**
* 实习生加班工资
*/
private String internOvertimePay;
/*导入项目*/
/**
* 绩效工资
*/
private String meritPay;
/**
* 驻场补贴
*/
private String residentSubsidy;
/**
* 其他补贴
*/
private String otherSubsidies;
/**
* 其他收入
*/
private String other;
/**
* 异动补增
*/
private String abnormalIncrease;
/**
* 提成
*/
private String commission;
/**
* 福利
*/
private String benefit;
/**
* 异动补扣
*/
private String abnormalDeduction;
/**
* 缺勤扣款
*/
private String absenteeismDeduction;
/**
* 质量处罚
*/
private String qualityPenalty;
/**
* 其他扣款
*/
private String otherDeductions;
/*应发工资*/
/**
* 本月应发
*/
private String shouldBeIssuedThisMonth;
/*专项扣除*/
/**
* 养老个人
*/
private String elderlyIndividuals;
/**
* 医疗个人
*/
private String medicalPersonal;
/**
* 失业个人
*/
private String unemployedIndividuals;
/**
* 公积金个人
*/
private String individualProvidentFund;
/**
* 社保个人合计
*/
private String individualSocialSecurityTotal;
/**
* 单位社保合计
*/
private String unitSocialSecurityTotal;
/**
* 单位公积金
*/
private String unitProvidentFund;
/**
* 宿舍费上海大族10000
*/
private String dormitoryFeesShangHai;
/**
* 水电费上海大族10000
*/
private String waterElectricityFeesShanghai;
/**
* 水电费浙江大族20000
*/
private String waterElectricityFeesZheJiang;
/**
* 宿舍费无锡智能30000
*/
private String dormitoryFeesWuXi;
/**
* 水电费无锡智能30000
*/
private String waterElectricityFeesWuXi;
/**
* 福利扣款
*/
private String welfareDeduction;
/**
* 个税
*/
private String personalIncomeTax;
/*实发工资*/
/**
* 当月实发
*/
private String actualIssuedInTheCurrentMonth;
/*工资成本*/
/**
* 公司成本
*/
private String companyCosts;
}

View File

@ -0,0 +1,24 @@
package com.engine.salary.entity.dzreport.param;
import com.engine.salary.common.BaseQueryParam;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* @author:dxfeng
* @createTime: 2025/03/18
* @version: 1.0
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class DzSalaryReportParam extends BaseQueryParam{
private String firstDepartment;
private String secondaryDepartment;
private String thirdDepartment;
private String productGrouping;
private String month;
}

View File

@ -0,0 +1,13 @@
package com.engine.salary.entity.dzreport.po;
/**
* @author:dxfeng
* @createTime: 2025/03/18
* @version: 1.0
*/
public class DzSalaryReportPO {
private String userId;
private String lastName;
private String departmentId;
private String status;
}

View File

@ -0,0 +1,31 @@
package com.engine.salary.mapper.dzreport;
import com.engine.salary.entity.dzreport.dto.DzSalaryReportDTO;
import org.apache.ibatis.annotations.Param;
import java.util.List;
import java.util.Set;
/**
* @author:dxfeng
* @createTime: 2025/03/18
* @version: 1.0
*/
public interface DzSalaryReportMapper {
/**
* 获取工资报表
*
* @return
*/
List<DzSalaryReportDTO> getReportList(@Param("month") String month, @Param("deptIds") Set<String> deptIds);
/**
* 获取个税扣缴义务人名称
*
* @param id
* @return
*/
String getTaxAgentName(@Param("id") String id);
}

View File

@ -0,0 +1,33 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.engine.salary.mapper.dzreport.DzSalaryReportMapper">
<select id="getReportList" resultType="com.engine.salary.entity.dzreport.dto.DzSalaryReportDTO">
select e.id as userId, record.salary_month as month,result.tax_agent_id
from hrsa_salary_acct_record record
inner join hrsa_salary_acct_result result on record.id = result.salary_acct_record_id and result.delete_type = 0
and record.delete_type = 0
inner join hrsa_salary_item item on result.salary_item_id = item.id and item.delete_type = 0
inner join hrmresource e on e.id= result.employee_id
where 1=1
<if test=" month !=null ">
and record.salary_month = #{month}
</if>
<if test=" deptIds !=null and deptIds.size() > 0">
and e.id in
<foreach collection="deptIds" open="(" item="id" separator="," close=")">
#{id}
</foreach>
</if>
group by result.tax_agent_id,e.id,record.salary_month
order by month desc ,userId
</select>
<select id="getTaxAgentName" resultType="java.lang.String">
SELECT
name
FROM hrsa_tax_agent t
WHERE id = #{id} AND delete_type = 0
</select>
</mapper>

View File

@ -0,0 +1,16 @@
package com.engine.salary.service;
import com.engine.salary.entity.dzreport.param.DzSalaryReportParam;
import java.util.Map;
/**
* @author:dxfeng
* @createTime: 2025/03/18
* @version: 1.0
*/
public interface DzSalaryReportService {
Map<String,Object> getSalaryReport(DzSalaryReportParam param);
}

View File

@ -0,0 +1,376 @@
package com.engine.salary.service.impl;
import com.engine.core.impl.Service;
import com.engine.salary.component.WeaTableColumnGroup;
import com.engine.salary.encrypt.AESEncryptUtil;
import com.engine.salary.entity.dzreport.dto.DzSalaryReportDTO;
import com.engine.salary.entity.dzreport.param.DzSalaryReportParam;
import com.engine.salary.mapper.dzreport.DzSalaryReportMapper;
import com.engine.salary.service.DzSalaryReportService;
import com.engine.salary.util.db.MapperProxyFactory;
import com.engine.salary.util.page.PageInfo;
import com.engine.salary.util.page.SalaryPageUtil;
import org.apache.commons.lang.StringUtils;
import org.json.JSONObject;
import weaver.conn.RecordSet;
import weaver.hrm.User;
import weaver.hrm.company.DepartmentComInfo;
import weaver.hrm.definedfield.HrmFieldManager;
import weaver.hrm.resource.ResourceComInfo;
import java.util.*;
/**
* @author:dxfeng
* @createTime: 2025/03/18
* @version: 1.0
*/
public class DzSalaryReportServiceImpl extends Service implements DzSalaryReportService {
DepartmentComInfo departmentComInfo = new DepartmentComInfo();
RecordSet rs = new RecordSet();
private DzSalaryReportMapper getDzSalaryReportMapper() {
return MapperProxyFactory.getProxy(DzSalaryReportMapper.class);
}
@Override
public Map<String, Object> getSalaryReport(DzSalaryReportParam queryParam) {
Map<String, Object> returnMap = new HashMap<>();
String firstLevelDepartment = queryParam.getFirstDepartment();
String secondaryDepartment = queryParam.getSecondaryDepartment();
String thirdDepartment = queryParam.getThirdDepartment();
String month = queryParam.getMonth();
Set<String> departmentIds = new HashSet<>();
if (StringUtils.isNotBlank(thirdDepartment)) {
departmentIds.add(thirdDepartment);
} else {
if (StringUtils.isNotBlank(secondaryDepartment)) {
ArrayList allChildDeptByDepId = departmentComInfo.getAllChildDeptByDepId(new ArrayList<String>(), secondaryDepartment);
departmentIds.addAll(allChildDeptByDepId);
} else {
if (StringUtils.isNotBlank(firstLevelDepartment)) {
ArrayList allChildDeptByDepId = departmentComInfo.getAllChildDeptByDepId(new ArrayList<String>(), firstLevelDepartment);
departmentIds.addAll(allChildDeptByDepId);
}
}
}
List<DzSalaryReportDTO> dzSalaryReportDTOS = getDzSalaryReportMapper().getReportList(month, departmentIds);
PageInfo<DzSalaryReportDTO> pageInfo = SalaryPageUtil.buildPage(queryParam.getCurrent(), queryParam.getPageSize(), dzSalaryReportDTOS, DzSalaryReportDTO.class);
// 遍历List 填充报表数据
List<DzSalaryReportDTO> list = pageInfo.getList();
for (DzSalaryReportDTO report : list) {
// 人员基本信息
fillResourceInfo(report);
// 薪资项目信息
fillSalaryInfo(report);
}
returnMap.put("pageInfo", pageInfo);
returnMap.put("columns", getColumnGroups());
return returnMap;
}
/**
* 填充薪资信息
*
* @param report
*/
private void fillSalaryInfo(DzSalaryReportDTO report) {
String userId = report.getUserId();
String month = report.getMonth();
String taxAgentId = report.getTaxAgentId();
if (StringUtils.isNotBlank(taxAgentId)) {
String taxAgentName = getDzSalaryReportMapper().getTaxAgentName(taxAgentId);
report.setTaxAgentName(taxAgentName);
}
Map<String, String> salaryItemMap = new HashMap<>();
rs.executeQuery("select item.name ,result.result_value " +
"from hrsa_salary_acct_record record " +
"inner join hrsa_salary_acct_result result on record.id = result.salary_acct_record_id and result.delete_type = 0 and record.delete_type = 0 " +
"inner join hrsa_salary_item item on result.salary_item_id = item.id and item.delete_type = 0 " +
"inner join hrmresource e on e.id= result.employee_id " +
"where e.id = ? and record.salary_month=? and result.tax_agent_id=? ", userId, month, taxAgentId);
while (rs.next()) {
// 获取薪资项的值并解密
salaryItemMap.put(rs.getString("name"), AESEncryptUtil.decrypt(rs.getString("result_value")));
}
// 设置值
report.setWageStandard(salaryItemMap.get("工资标准"));
report.setBasicSalary(salaryItemMap.get("基本工资"));
report.setPostWage(salaryItemMap.get("岗位工资"));
report.setPerformanceBasedSalaryStandards(salaryItemMap.get("绩效工资标准"));
report.setManagementSubsidy(salaryItemMap.get("工种/管理补贴"));
report.setCommunicationSubsidy(salaryItemMap.get("通讯补贴"));
report.setInternshipOvertimePayBase(salaryItemMap.get("实习生加班费基数"));
report.setSystemPersonalLeaveHours(salaryItemMap.get("系统事假时数"));
report.setDeductionOfPersonalLeaveHours(salaryItemMap.get("抵扣后事假时数"));
report.setSickLeaveHours(salaryItemMap.get("病假时数"));
report.setOvertimePayBase(salaryItemMap.get("加班费基数"));
report.setOvertimeHoursOnWeekendsAfterDeduction(salaryItemMap.get("抵扣后双休加班时数"));
report.setOvertimeHoursAfterDeduction(salaryItemMap.get("抵扣后平时加班时数"));
report.setOvertimeHoursDuringHolidays(salaryItemMap.get("节假加班小时数"));
report.setOvertimeHoursOnWeekends(salaryItemMap.get("双休加班小时数"));
report.setWeekdayOvertimeHours(salaryItemMap.get("平时加班小时数"));
report.setOvertimePayForWeekendsOff(salaryItemMap.get("双休加班费"));
report.setRegularOvertimePay(salaryItemMap.get("平时加班费"));
report.setHolidayOvertimePay(salaryItemMap.get("节假加班费"));
report.setDeductionForPersonalLeave(salaryItemMap.get("事假扣款"));
report.setSickLeaveDeduction(salaryItemMap.get("病假扣款"));
report.setOvertimePay(salaryItemMap.get("加班费"));
report.setInternOvertimePay(salaryItemMap.get("实习生加班工资"));
report.setMeritPay(salaryItemMap.get("绩效工资"));
report.setResidentSubsidy(salaryItemMap.get("驻场补贴"));
report.setOtherSubsidies(salaryItemMap.get("其他补贴"));
report.setOther(salaryItemMap.get("其他收入"));
report.setAbnormalIncrease(salaryItemMap.get("异动补增"));
report.setCommission(salaryItemMap.get("提成"));
report.setBenefit(salaryItemMap.get("福利"));
report.setAbnormalDeduction(salaryItemMap.get("异动补扣"));
report.setAbsenteeismDeduction(salaryItemMap.get("缺勤扣款"));
report.setQualityPenalty(salaryItemMap.get("质量处罚"));
report.setOtherDeductions(salaryItemMap.get("其他扣款"));
report.setShouldBeIssuedThisMonth(salaryItemMap.get("本月应发"));
report.setElderlyIndividuals(salaryItemMap.get("养老个人"));
report.setMedicalPersonal(salaryItemMap.get("医疗个人"));
report.setUnemployedIndividuals(salaryItemMap.get("失业个人"));
report.setIndividualProvidentFund(salaryItemMap.get("公积金个人"));
report.setIndividualSocialSecurityTotal(salaryItemMap.get("社保个人合计"));
report.setUnitSocialSecurityTotal(salaryItemMap.get("单位社保合计"));
report.setUnitProvidentFund(salaryItemMap.get("单位公积金"));
report.setDormitoryFeesShangHai(salaryItemMap.get("宿舍费上海大族10000"));
report.setWaterElectricityFeesShanghai(salaryItemMap.get("水电费上海大族10000"));
report.setWaterElectricityFeesZheJiang(salaryItemMap.get("水电费浙江大族20000"));
report.setDormitoryFeesWuXi(salaryItemMap.get("宿舍费无锡智能30000"));
report.setWaterElectricityFeesWuXi(salaryItemMap.get("水电费无锡智能30000"));
report.setWelfareDeduction(salaryItemMap.get("福利扣款"));
report.setPersonalIncomeTax(salaryItemMap.get("个税"));
report.setActualIssuedInTheCurrentMonth(salaryItemMap.get("当月实发"));
report.setCompanyCosts(salaryItemMap.get("公司成本"));
}
/**
* 填充人员信息
*
* @param report
*/
private void fillResourceInfo(DzSalaryReportDTO report) {
String userId = report.getUserId();
try {
ResourceComInfo resourceComInfo = new ResourceComInfo();
String status = resourceComInfo.getStatus(userId);
report.setLastName(resourceComInfo.getLastname(userId));
report.setStatus(getResourceFieldText(status, -1, "status"));
if ("5".equals(status)) {
// 离职日期
rs.executeQuery("SELECT MAX(changedate) as dismissdate FROM HrmStatusHistory WHERE resourceid= ? and type_n=5", userId);
if (rs.next()) {
String dismissDate = rs.getString("dismissdate");
if(StringUtils.isBlank(dismissDate)){
dismissDate = resourceComInfo.getEndDate(userId);
}
report.setTerminationDate(dismissDate);
}
}
String departmentId = resourceComInfo.getDepartmentID(userId);
report.setCurrentDepartment(getResourceFieldText(departmentId, -1, "departmentid"));
List<String> departmentLevel = getDepartmentLevel(departmentId);
report.setFirstDepartment(getResourceFieldText(departmentLevel.get(0), -1, "departmentid"));
report.setSecondaryDepartment(getResourceFieldText(departmentLevel.get(1), -1, "departmentid"));
report.setThirdDepartment(getResourceFieldText(departmentLevel.get(2), -1, "departmentid"));
String jobTitle = resourceComInfo.getJobTitle(userId);
report.setJobtitle(getResourceFieldText(jobTitle, -1, "jobtitle"));
String companyStartDate = resourceComInfo.getCompanyStartDate(userId);
report.setCompanyStartDate(companyStartDate);
String companyWorkYear = resourceComInfo.getCompanyWorkYear(userId);
report.setCompanyWorkYear(companyWorkYear);
// 人员自定义表信息
rs.executeQuery("select field21 from cus_fielddata where SCOPE ='HrmCustomFieldByInfoType' and SCOPEID = ? and id = ?", -1, userId);
if (rs.next()) {
String field21 = rs.getString("field21");
if (StringUtils.isNotBlank(field21)) {
report.setProductGrouping(getResourceFieldText(field21, -1, "field21"));
}
}
rs.executeQuery("select field3 from cus_fielddata where SCOPE ='HrmCustomFieldByInfoType' and SCOPEID = ? and id = ?", 3, userId);
if (rs.next()) {
String field3 = rs.getString("field3");
if (StringUtils.isNotBlank(field3)) {
report.setPlaceOfContractOwnership(getResourceFieldText(field3, -1, "field3"));
}
}
} catch (Exception e) {
throw new RuntimeException(e);
}
}
/**
* 构建报表表头
*
* @return
*/
private List<WeaTableColumnGroup> getColumnGroups() {
List<WeaTableColumnGroup> result = new ArrayList<>();
result.add(new WeaTableColumnGroup("150", "个税扣缴义务人", "taxAgentName"));
result.add(new WeaTableColumnGroup("150", "姓名", "lastName"));
result.add(new WeaTableColumnGroup("150", "月份", "month"));
result.add(new WeaTableColumnGroup("150", "一级部门", "firstDepartment"));
result.add(new WeaTableColumnGroup("150", "二级部门", "secondaryDepartment"));
result.add(new WeaTableColumnGroup("150", "三级部门", "thirdDepartment"));
result.add(new WeaTableColumnGroup("150", "产品分组", "productGrouping"));
result.add(new WeaTableColumnGroup("150", "离职日期", "terminationDate"));
result.add(new WeaTableColumnGroup("150", "所在层级部门", "currentDepartment"));
WeaTableColumnGroup fixedProjectColumn = new WeaTableColumnGroup("300", "固定项目", "fixedProject");
List<WeaTableColumnGroup> fixedProjectChild = new ArrayList<>();
fixedProjectChild.add(new WeaTableColumnGroup("150", "入职日期", "companyStartDate"));
fixedProjectChild.add(new WeaTableColumnGroup("150", "状态", "status"));
fixedProjectChild.add(new WeaTableColumnGroup("150", "岗位", "jobtitle"));
fixedProjectChild.add(new WeaTableColumnGroup("150", "合同归属地", "placeOfContractOwnership"));
fixedProjectChild.add(new WeaTableColumnGroup("150", "工资标准", "wageStandard"));
fixedProjectChild.add(new WeaTableColumnGroup("150", "基本工资", "basicSalary"));
fixedProjectChild.add(new WeaTableColumnGroup("150", "岗位工资", "postWage"));
fixedProjectChild.add(new WeaTableColumnGroup("150", "绩效工资标准", "performanceBasedSalaryStandards"));
fixedProjectChild.add(new WeaTableColumnGroup("150", "工种/管理补贴", "managementSubsidy"));
fixedProjectChild.add(new WeaTableColumnGroup("150", "通讯补贴", "communicationSubsidy"));
fixedProjectChild.add(new WeaTableColumnGroup("150", "实习生加班费基数", "internshipOvertimePayBase"));
fixedProjectColumn.setChildren(fixedProjectChild);
result.add(fixedProjectColumn);
WeaTableColumnGroup autoCalculateProjectColumn = new WeaTableColumnGroup("300", "系统自动计算项目", "autoCalculateProject");
List<WeaTableColumnGroup> autoCalculateProjectChild = new ArrayList<>();
autoCalculateProjectChild.add(new WeaTableColumnGroup("150", "司龄", "companyWorkYear"));
autoCalculateProjectChild.add(new WeaTableColumnGroup("150", "系统事假时数", "systemPersonalLeaveHours"));
autoCalculateProjectChild.add(new WeaTableColumnGroup("150", "抵扣后事假时数", "deductionOfPersonalLeaveHours"));
autoCalculateProjectChild.add(new WeaTableColumnGroup("150", "病假时数", "sickLeaveHours"));
autoCalculateProjectChild.add(new WeaTableColumnGroup("150", "加班费基数", "overtimePayBase"));
autoCalculateProjectChild.add(new WeaTableColumnGroup("150", "抵扣后双休加班时数", "overtimeHoursOnWeekendsAfterDeduction"));
autoCalculateProjectChild.add(new WeaTableColumnGroup("150", "抵扣后平时加班时数", "overtimeHoursAfterDeduction"));
autoCalculateProjectChild.add(new WeaTableColumnGroup("150", "节假加班小时数", "overtimeHoursDuringHolidays"));
autoCalculateProjectChild.add(new WeaTableColumnGroup("150", "双休加班小时数", "overtimeHoursOnWeekends"));
autoCalculateProjectChild.add(new WeaTableColumnGroup("150", "平时加班小时数", "weekdayOvertimeHours"));
autoCalculateProjectChild.add(new WeaTableColumnGroup("150", "双休加班费", "overtimePayForWeekendsOff"));
autoCalculateProjectChild.add(new WeaTableColumnGroup("150", "平时加班费", "regularOvertimePay"));
autoCalculateProjectChild.add(new WeaTableColumnGroup("150", "节假加班费", "holidayOvertimePay"));
autoCalculateProjectChild.add(new WeaTableColumnGroup("150", "事假扣款", "deductionForPersonalLeave"));
autoCalculateProjectChild.add(new WeaTableColumnGroup("150", "病假扣款", "sickLeaveDeduction"));
autoCalculateProjectChild.add(new WeaTableColumnGroup("150", "加班费", "overtimePay"));
autoCalculateProjectChild.add(new WeaTableColumnGroup("150", "实习生加班工资", "internOvertimePay"));
autoCalculateProjectColumn.setChildren(autoCalculateProjectChild);
result.add(autoCalculateProjectColumn);
WeaTableColumnGroup importProjectColumn = new WeaTableColumnGroup("300", "导入项目", "importProject");
List<WeaTableColumnGroup> importProjectChild = new ArrayList<>();
importProjectChild.add(new WeaTableColumnGroup("150", "绩效工资", "meritPay"));
importProjectChild.add(new WeaTableColumnGroup("150", "驻场补贴", "residentSubsidy"));
importProjectChild.add(new WeaTableColumnGroup("150", "其他补贴", "otherSubsidies"));
importProjectChild.add(new WeaTableColumnGroup("150", "其他收入", "other"));
importProjectChild.add(new WeaTableColumnGroup("150", "异动补增", "abnormalIncrease"));
importProjectChild.add(new WeaTableColumnGroup("150", "提成", "commission"));
importProjectChild.add(new WeaTableColumnGroup("150", "福利", "benefit"));
importProjectChild.add(new WeaTableColumnGroup("150", "异动补扣", "abnormalDeduction"));
importProjectChild.add(new WeaTableColumnGroup("150", "缺勤扣款", "absenteeismDeduction"));
importProjectChild.add(new WeaTableColumnGroup("150", "质量处罚", "qualityPenalty"));
importProjectChild.add(new WeaTableColumnGroup("150", "其他扣款", "otherDeductions"));
importProjectColumn.setChildren(importProjectChild);
result.add(importProjectColumn);
WeaTableColumnGroup salaryPayableColumn = new WeaTableColumnGroup("300", "应发工资", "salaryPayable");
List<WeaTableColumnGroup> salaryPayableChild = new ArrayList<>();
salaryPayableChild.add(new WeaTableColumnGroup("150", "本月应发", "shouldBeIssuedThisMonth"));
salaryPayableColumn.setChildren(salaryPayableChild);
result.add(salaryPayableColumn);
WeaTableColumnGroup specialDeductionColumn = new WeaTableColumnGroup("300", "专项扣除", "specialDeduction");
List<WeaTableColumnGroup> specialDeductionChild = new ArrayList<>();
specialDeductionChild.add(new WeaTableColumnGroup("150", "养老个人", "elderlyIndividuals"));
specialDeductionChild.add(new WeaTableColumnGroup("150", "医疗个人", "medicalPersonal"));
specialDeductionChild.add(new WeaTableColumnGroup("150", "失业个人", "unemployedIndividuals"));
specialDeductionChild.add(new WeaTableColumnGroup("150", "公积金个人", "individualProvidentFund"));
specialDeductionChild.add(new WeaTableColumnGroup("150", "社保个人合计", "individualSocialSecurityTotal"));
specialDeductionChild.add(new WeaTableColumnGroup("150", "单位社保合计", "unitSocialSecurityTotal"));
specialDeductionChild.add(new WeaTableColumnGroup("150", "单位公积金", "unitProvidentFund"));
specialDeductionChild.add(new WeaTableColumnGroup("150", "宿舍费上海大族10000", "dormitoryFeesShanghai"));
specialDeductionChild.add(new WeaTableColumnGroup("150", "水电费上海大族10000", "waterElectricityFeesShanghai"));
specialDeductionChild.add(new WeaTableColumnGroup("150", "水电费浙江大族20000", "waterElectricityFeesZheJiang"));
specialDeductionChild.add(new WeaTableColumnGroup("150", "宿舍费无锡智能30000", "dormitoryFeesWuXi"));
specialDeductionChild.add(new WeaTableColumnGroup("150", "水电费无锡智能30000", "waterElectricityFeesWuXi"));
specialDeductionChild.add(new WeaTableColumnGroup("150", "福利扣款", "welfareDeduction"));
specialDeductionChild.add(new WeaTableColumnGroup("150", "个税", "personalIncomeTax"));
specialDeductionColumn.setChildren(specialDeductionChild);
result.add(specialDeductionColumn);
WeaTableColumnGroup netSalaryColumn = new WeaTableColumnGroup("300", "实发工资", "netSalary");
List<WeaTableColumnGroup> netSalaryChild = new ArrayList<>();
netSalaryChild.add(new WeaTableColumnGroup("150", "当月实发", "actualIssuedInTheCurrentMonth"));
netSalaryColumn.setChildren(netSalaryChild);
result.add(netSalaryColumn);
WeaTableColumnGroup wageCostColumn = new WeaTableColumnGroup("300", "工资成本", "wageCost");
List<WeaTableColumnGroup> wageCostChild = new ArrayList<>();
wageCostChild.add(new WeaTableColumnGroup("150", "公司成本", "companyCosts"));
wageCostColumn.setChildren(wageCostChild);
result.add(wageCostColumn);
return result;
}
/**
* 获取人员表字段的显示文本
*
* @param id
* @param scopeId
* @param fieldName
* @return
*/
private String getResourceFieldText(String id, Integer scopeId, String fieldName) {
HrmFieldManager hfm = new HrmFieldManager("HrmCustomFieldByInfoType", scopeId);
JSONObject hrmFieldConf = hfm.getHrmFieldConf(fieldName);
User user = new User();
user.setUid(1);
try {
if (hfm.isBaseField(fieldName) && "jobactivity".equals(fieldName)) {
hrmFieldConf.put("type", 282);
}
return hfm.getFieldvalue(null, user, null, hrmFieldConf.getString("dmlurl"), hrmFieldConf.getInt("id"), hrmFieldConf.getInt("fieldhtmltype"), hrmFieldConf.getInt("type"), id, 0, fieldName);
} catch (Exception e) {
return "";
}
}
/**
* 构建部门层级
*
* @param departmentId
* @return
*/
private List<String> getDepartmentLevel(String departmentId) {
List<String> departmentIds = new ArrayList<>();
departmentIds.add(null);
departmentIds.add(null);
departmentIds.add(null);
departmentIds.add(0, departmentId);
boolean isFind = true;
while (isFind) {
departmentId = departmentComInfo.getDepartmentsupdepid(departmentId);
if (StringUtils.isNotBlank(departmentId) && !"0".equals(departmentId)) {
departmentIds.add(0, departmentId);
} else {
isFind = false;
}
}
return departmentIds;
}
}

View File

@ -0,0 +1,37 @@
package com.engine.salary.web;
import com.engine.common.util.ServiceUtil;
import com.engine.salary.entity.dzreport.param.DzSalaryReportParam;
import com.engine.salary.util.ResponseResult;
import com.engine.salary.wrapper.DzSalaryReportWrapper;
import io.swagger.v3.oas.annotations.parameters.RequestBody;
import weaver.hrm.HrmUserVarify;
import weaver.hrm.User;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.MediaType;
import java.util.Map;
/**
* @author:dxfeng
* @createTime: 2025/03/19
* @version: 1.0
*/
public class DzSalaryReportController {
private DzSalaryReportWrapper getDzSalaryReportWrapper(User user) {
return ServiceUtil.getService(DzSalaryReportWrapper.class, user);
}
@POST
@Path("/getSalaryReport")
@Produces(MediaType.APPLICATION_JSON)
public String getSalaryReport(@Context HttpServletRequest request, @Context HttpServletResponse response,@RequestBody DzSalaryReportParam queryParam) {
User user = HrmUserVarify.getUser(request, response);
return new ResponseResult<DzSalaryReportParam, Map<String, Object>>(user).run(getDzSalaryReportWrapper(user)::getSalaryReport, queryParam);
}
}

View File

@ -0,0 +1,25 @@
package com.engine.salary.wrapper;
import com.engine.common.util.ServiceUtil;
import com.engine.core.impl.Service;
import com.engine.salary.entity.dzreport.param.DzSalaryReportParam;
import com.engine.salary.service.DzSalaryReportService;
import com.engine.salary.service.impl.DzSalaryReportServiceImpl;
import weaver.hrm.User;
import java.util.Map;
/**
* @author:dxfeng
* @createTime: 2025/03/19
* @version: 1.0
*/
public class DzSalaryReportWrapper extends Service {
private DzSalaryReportService getDzSalaryReportService(User user) {
return ServiceUtil.getService(DzSalaryReportServiceImpl.class, user);
}
public Map<String, Object> getSalaryReport(DzSalaryReportParam queryParam) {
return getDzSalaryReportService(user).getSalaryReport(queryParam);
}
}