考勤调整
This commit is contained in:
parent
ba4332b4ce
commit
6aee0e7ce9
@ -70,9 +70,7 @@ public class SalaryVo {
|
||||
/** 补助扣款 */
|
||||
@Excel(name = "补助扣款")
|
||||
private BigDecimal absenteeismSubsidies;
|
||||
/** 餐费扣款 */
|
||||
@Excel(name = "餐费扣款")
|
||||
private BigDecimal mealFee;
|
||||
|
||||
/** 其他扣款 */
|
||||
@Excel(name = "其他扣款")
|
||||
private BigDecimal deductions;
|
||||
@ -103,11 +101,17 @@ public class SalaryVo {
|
||||
/** 本月应缴个税 */
|
||||
@Excel(name = "本月应缴个税")
|
||||
private BigDecimal taxPayable;
|
||||
|
||||
/** 餐费扣款 */
|
||||
@Excel(name = "餐费扣款")
|
||||
private BigDecimal mealFee;
|
||||
|
||||
/** 实发工资 */
|
||||
@Excel(name = "实发工资")
|
||||
private BigDecimal netPayroll;
|
||||
|
||||
|
||||
|
||||
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) {
|
||||
|
||||
@ -105,7 +105,8 @@ public interface SalaryCalculationStrategyExchangeProcessor {
|
||||
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()).add(DataUtils.findDefaultValue(rzSalaryDetail.getBjAmount(), DataUtils.DEFAULT_VALUE)));
|
||||
.subtract(rzSalaryDetail.getAbsenteeismSubsidies()).subtract(rzSalaryDetail.getDeductions()).subtract(rzSalaryDetail.getAbsenteeismSalary()).add(DataUtils.findDefaultValue(rzSalaryDetail.getBjAmount(), DataUtils.DEFAULT_VALUE)));
|
||||
//.subtract(rzSalaryDetail.getMealFee())
|
||||
//如果当前人员不打卡 则需要扣减缺勤工资
|
||||
// if("否".equals(sysStaff.getClockIn())){
|
||||
// rzSalaryDetail.setSalary(rzSalaryDetail.getSalary());
|
||||
@ -203,9 +204,9 @@ public interface SalaryCalculationStrategyExchangeProcessor {
|
||||
* @param detail
|
||||
* @param attendanceStatistical
|
||||
*/
|
||||
default void socialSecurity(SysStaff sysStaff, SysStaffDetail detail, RzAttendanceStatistical attendanceStatistical){
|
||||
default void socialSecurity(SysStaff sysStaff, SysStaffDetail detail, BigDecimal gsjTotal, RzAttendanceStatistical attendanceStatistical){
|
||||
//计算实际出勤占比, 如果实际出勤小于应出勤的半数, 则社保有员工承担
|
||||
BigDecimal proportion = attendanceStatistical.getRealAttendance().divide(attendanceStatistical.getShouldAttendance(),2, RoundingMode.HALF_UP);
|
||||
BigDecimal proportion = (attendanceStatistical.getRealAttendance().add(gsjTotal)).divide(attendanceStatistical.getShouldAttendance(),2, RoundingMode.HALF_UP);
|
||||
if(proportion.compareTo(new BigDecimal("0.50")) >= 0 || "否".equals(sysStaff.getClockIn())){
|
||||
detail.setCountInsurance(new BigDecimal("0.00"));
|
||||
}
|
||||
@ -259,7 +260,7 @@ public interface SalaryCalculationStrategyExchangeProcessor {
|
||||
//判断是否外包,外包公司员工不做税(月薪50000不上税)
|
||||
if("WB".equals(sysStaff.getCompanyName())){
|
||||
// 实发工资 = 税前工资
|
||||
rzSalaryDetail.setNetPayroll(rzSalaryDetail.getSalaryBeforeTax());
|
||||
rzSalaryDetail.setNetPayroll(rzSalaryDetail.getSalaryBeforeTax().subtract(rzSalaryDetail.getMealFee()));
|
||||
// 此阶税率为百分之3,速减数为0
|
||||
rzSalaryDetail.setTaxRate(DataUtils.DEFAULT_VALUE);
|
||||
// 速算扣除数(速算扣除数跟税率同步)
|
||||
@ -328,7 +329,7 @@ public interface SalaryCalculationStrategyExchangeProcessor {
|
||||
rzSalaryDetail.setTaxPayable(new BigDecimal("0.00"));
|
||||
}
|
||||
// 实发工资(税前工资-本月应缴个人所得税)
|
||||
rzSalaryDetail.setNetPayroll(rzSalaryDetail.getSalaryBeforeTax().subtract(rzSalaryDetail.getTaxPayable()));
|
||||
rzSalaryDetail.setNetPayroll(rzSalaryDetail.getSalaryBeforeTax().subtract(rzSalaryDetail.getTaxPayable()).subtract(rzSalaryDetail.getMealFee()));
|
||||
// 本年累计已缴税额
|
||||
rzSalaryDetail.setAggregatePersonalIncomeTax(detail.getAggregatePersonalIncomeTax().add(rzSalaryDetail.getTaxPayable()));
|
||||
}
|
||||
|
||||
@ -47,8 +47,8 @@ public class DailyWageStrategyExchangeProcessor implements SalaryCalculationStra
|
||||
|
||||
@Override
|
||||
public void exchangeSalaryCalculation(SysStaff sysStaff, SysStaffDetail sysStaffDetail, RzSalaryDetail rzSalaryDetail, RzAttendanceStatistical attendanceStatistical, Map<Long, Boolean> overTimeMap) {
|
||||
//计算社保
|
||||
socialSecurity(sysStaff,sysStaffDetail, attendanceStatistical);
|
||||
// //计算社保
|
||||
// socialSecurity(sysStaff,sysStaffDetail, attendanceStatistical);
|
||||
|
||||
//组件基础数据
|
||||
buildRzSalaryDetail(false, sysStaff, sysStaffDetail,rzSalaryDetail, attendanceStatistical);
|
||||
@ -89,6 +89,8 @@ public class DailyWageStrategyExchangeProcessor implements SalaryCalculationStra
|
||||
rzSalaryDetail.setMonthSalary(rzSalaryDetail.getMonthSalary().add(gs));
|
||||
}
|
||||
|
||||
//计算社保
|
||||
socialSecurity(sysStaff,detail, new BigDecimal(hour), attendanceStatistical);
|
||||
//计算补助
|
||||
subsidy(limitMonth, month, limitDate, sysStaff, detail, rzSalaryDetail, attendanceStatistical);
|
||||
//计算扣减
|
||||
|
||||
@ -54,7 +54,7 @@ public class MonthlySalaryStrategyExchangeProcessor implements SalaryCalculation
|
||||
@Override
|
||||
public void exchangeSalaryCalculation(SysStaff sysStaff, SysStaffDetail sysStaffDetail, RzSalaryDetail rzSalaryDetail, RzAttendanceStatistical attendanceStatistical, Map<Long, Boolean> overTimeMap) {
|
||||
//计算社保
|
||||
socialSecurity(sysStaff,sysStaffDetail, attendanceStatistical);
|
||||
//socialSecurity(sysStaff,sysStaffDetail, attendanceStatistical);
|
||||
//组件基础数据
|
||||
buildRzSalaryDetail(true, sysStaff, sysStaffDetail,rzSalaryDetail, attendanceStatistical);
|
||||
//计算薪资
|
||||
@ -95,8 +95,8 @@ public class MonthlySalaryStrategyExchangeProcessor implements SalaryCalculation
|
||||
//计算扣减
|
||||
deduction("是".equals(sysStaff.getClockIn()), detail, rzSalaryDetail, new BigDecimal(workNum).multiply(Constants.DAY_WORK_HOUR), attendanceStatistical.getEssentialAttendance());
|
||||
//deduction(detail, rzSalaryDetail,workNum, rzAttendanceMapper.selectCount(new LambdaQueryWrapper<RzAttendance>().isNotNull(RzAttendance::getWorkSum).gt(RzAttendance::getWorkSum, 0).eq(RzAttendance::getDelFlag, Constants.DELETE_FLAG_0).eq(RzAttendance::getStaffId, sysStaff.getUserId()).apply(" DATE_FORMAT( attendance_date, '%Y%m' ) = DATE_FORMAT({0} , '%Y%m' )", rzSalaryDetail.getMonth()).select(RzAttendance::getId)));
|
||||
//计算社保
|
||||
socialSecurity(sysStaff, detail, attendanceStatistical);
|
||||
/*//计算社保
|
||||
socialSecurity(sysStaff, detail, attendanceStatistical);*/
|
||||
/***
|
||||
* 婚假, 陪产假 丧假 年假 流产 全新发放
|
||||
* 产假 无薪
|
||||
@ -117,11 +117,15 @@ public class MonthlySalaryStrategyExchangeProcessor implements SalaryCalculation
|
||||
rzSalaryDetail.setBjAmount(gs);
|
||||
|
||||
}
|
||||
BigDecimal gsj = new BigDecimal(0);
|
||||
Long totalAllHour = 0l;
|
||||
for (Long type: ParamUtils.getFullPaidLeave()) {
|
||||
Long hour = rzLeaveDetailMapper.selectLeaveHourByUserIdAndDateAndType(sysStaff.getUserId(), rzSalaryDetail.getMonth(), type);
|
||||
if(hour.compareTo(0l)> 0){
|
||||
totalAllHour = totalAllHour+hour;
|
||||
if(type.equals(60l)){
|
||||
gsj = new BigDecimal(hour);
|
||||
}
|
||||
}
|
||||
}
|
||||
// if(totalAllHour.compareTo(0l)> 0){
|
||||
@ -136,6 +140,10 @@ public class MonthlySalaryStrategyExchangeProcessor implements SalaryCalculation
|
||||
attendanceStatistical.setAbsenteeism(attendanceStatistical.getAbsenteeism().add(qqHour));
|
||||
}
|
||||
}
|
||||
|
||||
//计算社保占比
|
||||
socialSecurity(sysStaff, detail, gsj, attendanceStatistical);
|
||||
|
||||
//请假时长
|
||||
rzSalaryDetail.setAbsenteeismSalary(hourlyWage.multiply(attendanceStatistical.getAbsenteeism().subtract(new BigDecimal(totalAllHour))));
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user