This commit is contained in:
andy 2025-06-18 14:39:46 +08:00
parent b184bf878b
commit 7d1ddcb9a4
5 changed files with 16 additions and 12 deletions

View File

@ -2,6 +2,7 @@ package com.evo.finance.domain.vo;
import com.evo.common.annotation.Excel;
import lombok.Data;
import java.math.BigDecimal;
@Data
@ -56,6 +57,8 @@ public class SalaryVo {
/** 夜餐补助 */
@Excel(name = "夜餐补助")
private BigDecimal dinnerSubsidies;
@Excel(name = "中班补助")
private BigDecimal middleSubsidies;
@Excel(name = "销售提成")
private BigDecimal salesCommission;
/** 其他补助 */
@ -108,7 +111,7 @@ public class SalaryVo {
public SalaryVo() {
}
// public SalaryVo(BigDecimal monthSalary, BigDecimal basicSalary, BigDecimal jobSalary, BigDecimal overtimeSalary, BigDecimal levelSubsidies, BigDecimal contractSubsidies, BigDecimal senioritySalary, BigDecimal socialSubsidies, BigDecimal fullSubsidies, BigDecimal nightSubsidies, BigDecimal dinnerSubsidies, BigDecimal subsidyOrBonus, BigDecimal absenteeismSalary, BigDecimal absenteeismSubsidies, BigDecimal mealFee, BigDecimal deductions, BigDecimal salary, BigDecimal payInsurance, BigDecimal salaryBeforeTax, BigDecimal totalWages, BigDecimal annualExemptionAmount, BigDecimal specialDeduction, BigDecimal slowDownTheDeduction, BigDecimal aggregatePersonalIncomeTax, BigDecimal taxPayable, BigDecimal netPayroll) {
public SalaryVo(BigDecimal monthSalary, BigDecimal levelSubsidies, BigDecimal contractSubsidies, BigDecimal senioritySalary, BigDecimal socialSubsidies, BigDecimal nightSubsidies, BigDecimal dinnerSubsidies, BigDecimal subsidyOrBonus, BigDecimal absenteeismSalary, BigDecimal absenteeismSubsidies, BigDecimal mealFee, BigDecimal deductions, BigDecimal salary, BigDecimal payInsurance, BigDecimal salaryBeforeTax, BigDecimal totalWages, BigDecimal annualExemptionAmount, BigDecimal specialDeduction, BigDecimal slowDownTheDeduction, BigDecimal aggregatePersonalIncomeTax, BigDecimal taxPayable, BigDecimal netPayroll, BigDecimal salesCommission) {
public SalaryVo(BigDecimal monthSalary, BigDecimal levelSubsidies, BigDecimal contractSubsidies, BigDecimal senioritySalary, BigDecimal socialSubsidies, BigDecimal nightSubsidies, BigDecimal dinnerSubsidies, BigDecimal subsidyOrBonus, BigDecimal absenteeismSalary, BigDecimal absenteeismSubsidies, BigDecimal mealFee, BigDecimal deductions, BigDecimal salary, BigDecimal payInsurance, BigDecimal salaryBeforeTax, BigDecimal totalWages, BigDecimal annualExemptionAmount, BigDecimal specialDeduction, BigDecimal slowDownTheDeduction, BigDecimal aggregatePersonalIncomeTax, BigDecimal taxPayable, BigDecimal netPayroll, BigDecimal salesCommission,BigDecimal middleSubsidies) {
this.monthSalary = monthSalary;
// this.basicSalary = basicSalary;
// this.jobSalary = jobSalary;
@ -135,6 +138,7 @@ public class SalaryVo {
this.taxPayable = taxPayable;
this.netPayroll = netPayroll;
this.salesCommission = salesCommission;
this.middleSubsidies = middleSubsidies;
}
}

View File

@ -103,9 +103,9 @@ public interface SalaryCalculationStrategyExchangeProcessor {
//计算基础数据
monthSalary(limitMonth, month,limitDate,sysStaff,detail,rzSalaryDetail, attendanceStatistical);
////计算应发工资 合算月工资+加班工资+学历补助+合同补助+社保补助+工龄工资+全勤奖+加班工资+夜班补助+夜餐补助+其他补助+销售提成-餐费扣款-补助扣款-其他扣款 (无需再-缺勤扣款 因为计算工资的时候, 是按照实际出勤计算的)
//计算应发工资 合算月工资+加班工资+学历补助+合同补助+社保补助+工龄工资+全勤奖+加班工资+夜班补助+夜餐补助+其他补助+销售提成-餐费扣款-补助扣款-其他扣款
rzSalaryDetail.setSalary(rzSalaryDetail.getMonthSalary().add(isMonth ? rzSalaryDetail.getOvertimeSalary() : DataUtils.DEFAULT_VALUE).add(rzSalaryDetail.getNightSubsidies()).add(rzSalaryDetail.getDinnerSubsidies())
////计算应发工资 合算月工资+加班工资+学历补助+合同补助+社保补助+工龄工资+全勤奖+加班工资+夜班补助+中班补助+夜餐补助+其他补助+销售提成-餐费扣款-补助扣款-其他扣款 (无需再-缺勤扣款 因为计算工资的时候, 是按照实际出勤计算的)
//计算应发工资 合算月工资+加班工资+学历补助+合同补助+社保补助+工龄工资+全勤奖+加班工资+夜班补助+中班补助+夜餐补助+其他补助+销售提成-餐费扣款-补助扣款-其他扣款
rzSalaryDetail.setSalary(rzSalaryDetail.getMonthSalary().add(isMonth ? rzSalaryDetail.getOvertimeSalary() : DataUtils.DEFAULT_VALUE).add(rzSalaryDetail.getNightSubsidies()).add(rzSalaryDetail.getMiddleSubsidies()).add(rzSalaryDetail.getDinnerSubsidies())
.add(DataUtils.findDefaultValue(rzSalaryDetail.getFullSubsidies(), DataUtils.DEFAULT_VALUE)).add(rzSalaryDetail.getLevelSubsidies()).add(rzSalaryDetail.getContractSubsidies()).add(rzSalaryDetail.getSocialSubsidies())
.add(rzSalaryDetail.getSenioritySalary()).add(rzSalaryDetail.getSubsidyOrBonus()).add(rzSalaryDetail.getSalesCommission())
.subtract(rzSalaryDetail.getMealFee()).subtract(rzSalaryDetail.getAbsenteeismSubsidies()).subtract(rzSalaryDetail.getDeductions()).subtract(rzSalaryDetail.getAbsenteeismSalary()));
@ -187,13 +187,13 @@ public interface SalaryCalculationStrategyExchangeProcessor {
RzRestaurantStatistics rzRestaurantStatistics = SpringUtils.getBean(RzRestaurantStatisticsMapper.class).selectRzRestaurantStatisticsByUserIdAndDate(detail.getStaffId(),rzSalaryDetail.getMonth());
rzSalaryDetail.setMealFee(rzRestaurantStatistics.getPersonalSumConsumption());
//首先需要打卡 超过1个工作日时长
if(isDk && ycHours.compareTo(cqHours) != 0 && ycHours.subtract(cqHours).intValue() > 8){
if(isDk && ycHours.compareTo(cqHours) != 0 && ycHours.subtract(cqHours).intValue() >= 8){
Long ycDays = ycHours.divide(Constants.DAY_WORK_HOUR).longValue();
//补助总钱数
BigDecimal bzAmount = rzSalaryDetail.getLevelSubsidies().add(rzSalaryDetail.getContractSubsidies()).add(rzSalaryDetail.getSenioritySalary()).add(rzSalaryDetail.getSocialSubsidies());
//补助总钱数 ( 补助钱数. 不包含社保补助, 2025-06-18 崔朋 口述, 只有 学历, 工龄, 合同 三种)
BigDecimal bzAmount = rzSalaryDetail.getLevelSubsidies().add(rzSalaryDetail.getContractSubsidies()).add(rzSalaryDetail.getSenioritySalary());
//一天的补助
BigDecimal bzDayAmount = bzAmount.divide(new BigDecimal(ycDays),2,BigDecimal.ROUND_HALF_UP);
//计算补助扣款, 总补助-出勤补助=补助扣款, 出勤补助= 天补助*出勤天数
rzSalaryDetail.setAbsenteeismSubsidies(bzAmount.subtract(bzDayAmount.multiply(new BigDecimal(cqHours.divide(Constants.DAY_WORK_HOUR, 0,RoundingMode.UP).intValue()))));
}else{
//计算补助扣款, 总补助-出勤补助=补助扣款, 出勤补助= 天补助*出勤天数

View File

@ -623,8 +623,8 @@ public class RzSalaryDetailServiceImpl extends ServiceImpl<RzSalaryDetailMapper,
x.getAbsenteeismSalary().add(y.getAbsenteeismSalary()), x.getAbsenteeismSubsidies().add(y.getAbsenteeismSubsidies()),x.getMealFee().add(y.getMealFee()),x.getDeductions().add(y.getDeductions()),
x.getSalary().add(y.getSalary()),x.getPayInsurance().add(y.getPayInsurance()),x.getSalaryBeforeTax().add(y.getSalaryBeforeTax()),x.getTotalWages().add(y.getTotalWages()),
x.getAnnualExemptionAmount().add(y.getAnnualExemptionAmount()),x.getSpecialDeduction().add(y.getSpecialDeduction()),x.getSlowDownTheDeduction().add(y.getSlowDownTheDeduction()),x.getAggregatePersonalIncomeTax().add(y.getAggregatePersonalIncomeTax()),
x.getTaxPayable().add(y.getTaxPayable()),x.getNetPayroll().add(y.getNetPayroll()), x.getSalesCommission().add(y.getSalesCommission()))).orElse(new SalaryVo(BigDecimal.ZERO, BigDecimal.ZERO, BigDecimal.ZERO, BigDecimal.ZERO, BigDecimal.ZERO, BigDecimal.ZERO, BigDecimal.ZERO,
BigDecimal.ZERO, BigDecimal.ZERO, BigDecimal.ZERO, BigDecimal.ZERO, BigDecimal.ZERO, BigDecimal.ZERO, BigDecimal.ZERO, BigDecimal.ZERO,BigDecimal.ZERO, BigDecimal.ZERO, BigDecimal.ZERO, BigDecimal.ZERO, BigDecimal.ZERO, BigDecimal.ZERO, BigDecimal.ZERO, BigDecimal.ZERO));
x.getTaxPayable().add(y.getTaxPayable()),x.getNetPayroll().add(y.getNetPayroll()), x.getSalesCommission().add(y.getSalesCommission()), x.getMiddleSubsidies().add(y.getMiddleSubsidies()))).orElse(new SalaryVo(BigDecimal.ZERO, BigDecimal.ZERO, BigDecimal.ZERO, BigDecimal.ZERO, BigDecimal.ZERO, BigDecimal.ZERO, BigDecimal.ZERO,
BigDecimal.ZERO, BigDecimal.ZERO, BigDecimal.ZERO, BigDecimal.ZERO, BigDecimal.ZERO, BigDecimal.ZERO, BigDecimal.ZERO, BigDecimal.ZERO,BigDecimal.ZERO, BigDecimal.ZERO, BigDecimal.ZERO, BigDecimal.ZERO,BigDecimal.ZERO, BigDecimal.ZERO, BigDecimal.ZERO, BigDecimal.ZERO, BigDecimal.ZERO));
//添加此处的原因是, 如果部门中, 有且只有1人的情况下, stream().reduce() 不会创建新的对象, 只是把唯一的对象返回了,, 会对后续的数据展示产生影响, 所以重新创new新对象
if(Collections.isNotEmpty(list) || list.size() == 1){
SalaryVo newResult = new SalaryVo();

View File

@ -62,7 +62,7 @@ public class RzSalaryStatisticsServiceImpl implements IRzSalaryStatisticsService
SysStaffDetail sysStaffDetail = sysStaffDetailMapper.selectSysStaffDetailByStaffId(rzSalaryDetail.getStaffId());
//修改个人详情
sysStaffDetail.setAggregatePersonalIncomeTax(sysStaffDetail.getAggregatePersonalIncomeTax().subtract(rzSalaryDetail.getTaxPayable()));
sysStaffDetail.setSpecialDeduction(sysStaffDetail.getSpecialDeduction().subtract(rzSalaryDetail.getSpecialDeduction()));
sysStaffDetail.setSpecialDeduction(sysStaffDetail.getSpecialDeduction().subtract(sysStaffDetail.getSpecialDeduction().subtract(rzSalaryDetail.getSpecialDeduction())));
sysStaffDetail.setTotalWages(sysStaffDetail.getTotalWages().subtract(rzSalaryDetail.getSalaryBeforeTax()));
int i = sysStaffDetailMapper.updateSysStaffDetail(sysStaffDetail);
if(i < 1){

View File

@ -57,7 +57,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
</resultMap>
<sql id="selectRzSalaryDetailVo">
select id, staff_id, name, month, wb_flag, dept_id,month_salary, basic_salary, job_salary, daily_wage, hours_salary, overtime_salary, level_subsidies, contract_subsidies, seniority_salary, social_subsidies, full_subsidies, night_subsidies, dinner_subsidies, subsidy_or_bonus, absenteeism_salary, absenteeism_subsidies, meal_fee, deductions, salary, pay_insurance, endowment_insurance, medical_insurance, employment_injury_insurance, maternity_insurance, unemployment_insurance, accumulation_fund, salary_before_tax, total_wages, annual_exemption_amount, special_deduction, taxable_income, tax_rate, slow_down_the_deduction, aggregate_personal_income_tax, aggregate_tax, tax_payable, net_payroll, remarks, del_flag, create_by, create_time, update_by, update_time, sales_commission from rz_salary_detail
select id, staff_id, name, month, wb_flag, dept_id,month_salary, basic_salary, job_salary, daily_wage, hours_salary, overtime_salary, level_subsidies, contract_subsidies, seniority_salary, social_subsidies, full_subsidies, night_subsidies, dinner_subsidies, subsidy_or_bonus, absenteeism_salary, absenteeism_subsidies, meal_fee, deductions, salary, pay_insurance, endowment_insurance, medical_insurance, employment_injury_insurance, maternity_insurance, unemployment_insurance, accumulation_fund, salary_before_tax, total_wages, annual_exemption_amount, special_deduction, taxable_income, tax_rate, slow_down_the_deduction, aggregate_personal_income_tax, aggregate_tax, tax_payable, net_payroll, remarks, del_flag, create_by, create_time, update_by, update_time, sales_commission, middle_subsidies from rz_salary_detail
</sql>
<select id="selectRzSalaryDetailList" parameterType="RzSalaryDetail" resultMap="RzSalaryDetailResult">