大族富创得薪资报表
This commit is contained in:
parent
a29f8b3da9
commit
c805c6a462
|
|
@ -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 {
|
||||
}
|
||||
|
|
@ -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;
|
||||
|
||||
}
|
||||
|
|
@ -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;
|
||||
}
|
||||
|
|
@ -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;
|
||||
}
|
||||
|
|
@ -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);
|
||||
}
|
||||
|
|
@ -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>
|
||||
|
|
@ -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);
|
||||
|
||||
}
|
||||
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
Loading…
Reference in New Issue