| | |
| | | // 实发工资初始值 |
| | | netSalary = grossSalary; |
| | | map.put("netSalary", netSalary); |
| | | // 个税金额(无社保版) |
| | | BigDecimal bigDecimal = TaxCalculator.calculateMonthlyTax(basicSalary, socialPersonal, fundPersonal); |
| | | map.put("salaryTax", bigDecimal); |
| | | // 计时工资 计件工资 |
| | | UserProductionAccountingDto userProductionAccountingDto = new UserProductionAccountingDto(); |
| | | userProductionAccountingDto.setUserId(getUidByStaffId(staffId)); |
| | |
| | | socialPersonal = socialPersonal.add(amount); |
| | | } |
| | | } |
| | | BigDecimal currentMonthSocialPersonal = socialPersonal; |
| | | BigDecimal socialSupplementAmount = calculateSocialSupplementAmount( |
| | | staffId, |
| | | staffOnJobDto, |
| | |
| | | currentDetailList, |
| | | socialPersonal |
| | | ); |
| | | if (socialSupplementAmount.compareTo(BigDecimal.ZERO) > 0) { |
| | | socialPersonal = socialPersonal.add(socialSupplementAmount); |
| | | } |
| | | map.put("socialPersonal", socialPersonal); |
| | | BigDecimal totalSocialPersonal = currentMonthSocialPersonal.add(socialSupplementAmount); |
| | | map.put("socialPersonal", currentMonthSocialPersonal); |
| | | map.put("fundPersonal", fundPersonal); |
| | | map.put("socialSupplementAmount", socialSupplementAmount); |
| | | // 个税金额(社保版) |
| | | bigDecimal = TaxCalculator.calculateMonthlyTax(basicSalary, socialPersonal, fundPersonal); |
| | | BigDecimal bigDecimal = TaxCalculator.calculateMonthlyTax(grossSalary, totalSocialPersonal, fundPersonal); |
| | | map.put("salaryTax", bigDecimal); |
| | | |
| | | // 应扣工资 = 个税 + 公积金个人 + 社保个人 + 其他支出 |
| | | deductSalary = bigDecimal.add(fundPersonal).add(socialPersonal).add(otherDeduct); |
| | | // 应扣工资 = 个税 + 公积金个人 + 社保个人 + 社保补缴 + 其他支出 |
| | | deductSalary = bigDecimal.add(fundPersonal).add(totalSocialPersonal).add(otherDeduct); |
| | | map.put("deductSalary", deductSalary); |
| | | |
| | | // 实发工资 = 应发工资 - 应扣工资 |
| | |
| | | |
| | | /** |
| | | * 统计员工当年1月到目标月份之前已缴纳的社保个人部分总额 |
| | | * 这里同时包含 socialPersonal 和 socialSupplementAmount,避免历史补缴情形被重复计算。 |
| | | * |
| | | * 查询逻辑: |
| | | * 1. 根据目标月份获取当年年份前缀(如 "2024-") |
| | |
| | | |
| | | // 6. 累加社保个人部分金额 |
| | | return detailList.stream() |
| | | .map(StaffSalaryDetail::getSocialPersonal) // 获取社保个人部分 |
| | | .filter(Objects::nonNull) |
| | | .map(detail -> defaultZero(detail.getSocialPersonal()) |
| | | .add(defaultZero(detail.getSocialSupplementAmount()))) |
| | | .reduce(BigDecimal.ZERO, BigDecimal::add); // 累加求和 |
| | | } |
| | | |