evo-Financial-pc/evo-admin/src/main/java/com/evo/system/utils/SubsidyCalculationUtils.java
andy dea7389197 考勤统计新增汇总导入接口
员工信息试用期月份改为试用期结束时间, 并同步调整考勤计算规则, 转正规则等接口
处理隔夜班制手动重新抓取考勤的负工时问题
2026-09-08 10:06:09 +08:00

103 lines
4.9 KiB
Java

package com.evo.system.utils;
import com.evo.common.constant.Constants;
import com.evo.common.utils.Collections;
import com.evo.common.utils.DateUtils;
import com.evo.common.utils.spring.SpringUtils;
import com.evo.personnelMatters.domain.RzSubsidy;
import com.evo.personnelMatters.domain.RzSubsidyInfo;
import com.evo.personnelMatters.mapper.RzSubsidyMapper;
import com.evo.personnelMatters.service.IRzSubsidyInfoService;
import com.evo.system.domain.SysStaff;
import com.evo.system.domain.SysStaffDetail;
import com.evo.system.mapper.SysDictDataMapper;
import org.apache.commons.lang3.ObjectUtils;
import org.apache.commons.lang3.StringUtils;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
* 类
*
* @ClassName:SubsidyCalculationUtils
* @date: 2025年05月22日 11:26
* @author: andy.shi
* @contact: 17330188597
* @remark: 开发人员联系方式 1042025947@qq.com/微信同步
*/
public class SubsidyCalculationUtils {
public static final String ht = "12";
public static final String gl = "14";
public static final String xnh = "13";
public static final String yc = "11";
public static final List<String> tsbz = Collections.asList(ht,gl,xnh,yc);
public static SysStaffDetail subsidyCalculation(SysStaff staff, SysStaffDetail staffDetail, List<RzSubsidyInfo> subsidyInfoList, Boolean isCalculationSalary){
//正式员工并且有补助信息
Boolean isOfficial = Constants.JOB_STATIS_1.equals(staff.getStatus());
//是否为日薪
Boolean isDaily = staffDetail.getDailyWage() != null && staffDetail.getDailyWage().compareTo(BigDecimal.ZERO) > 0;
/***
* 2025-7-15 跟人力在工位面谈, 其中, 夜餐, 夜班, 中班, 入职享有, 不在是转正后享有, 所以调整代码
*/
// if(Constants.JOB_STATIS_1.equals(staff.getStatus())){
if(Collections.isEmpty(subsidyInfoList)){
subsidyInfoList = SpringUtils.getBean(IRzSubsidyInfoService.class).list();
}
if(StringUtils.isNotEmpty(staff.getSubsidys())){
Map<Long, RzSubsidyInfo> map = subsidyInfoList.stream().collect(Collectors.toMap(RzSubsidyInfo::getId, d->d, (k1, K2)->k1));
Boolean isAdd = true;
for(String subsidyId : staff.getSubsidys().split(",")){
isAdd = false;
RzSubsidyInfo rzSubsidyInfo = map.get(Long.valueOf(subsidyId));
String key = rzSubsidyInfo.getName();
BigDecimal value = rzSubsidyInfo.getValue();
//非日薪人员, 不在计算合同补助
if(ht.equals(subsidyId) && isOfficial && staff.getContractStart() != null && staff.getContractEnd() != null && isDaily){
Integer year= DateUtils.getBetweenYear(staff.getContractStart(), staff.getContractEnd(), 1);
value = value.multiply(new BigDecimal(year));
isAdd = true;
}else if(gl.equals(subsidyId) && isOfficial ){
//如果是计算工资的话, 需要当前时间减去一个月, 因为是第二个月计算 上月工资
Integer year= DateUtils.getBetweenYearByDays(staff.getEmploymentDate(), (isCalculationSalary ? DateUtils.addMonths(new Date(), -1) : new Date()));
//最多只允许10年的工龄补贴
if(year > 10) year=10;
value = value.multiply(new BigDecimal(year));
isAdd = true;
}else if(xnh.equals(subsidyId) && isOfficial){
isAdd = "新农合".equals(staff.getSocialType()) && ("是".equals(staff.getSocialSubsidy()) || "享有".equals(staff.getSocialSubsidy()));
}else if(yc.equals(subsidyId)){
isAdd = "否".equals(staff.getZsFlag());
}
//当前补助不是特殊补助, 或者 特殊补助允许添加
if(!tsbz.contains(subsidyId) || isAdd) staffDetail.getExtendeds().put(key, value);
}
}
//计算学历补助
//非日薪不计算学历补助
if(StringUtils.isNotEmpty(staff.getLevel()) && isOfficial && isDaily){
//查询学历
String label = SpringUtils.getBean(SysDictDataMapper.class).selectDictLabel(Constants.SYS_LEVEL, staff.getLevel());
if(StringUtils.isNotEmpty(label)){
RzSubsidy rzSubsidy = SpringUtils.getBean(RzSubsidyMapper.class).selectRzSubsidyByName(label);
if(ObjectUtils.isNotEmpty(rzSubsidy)){
staffDetail.getExtendeds().put("学历补助", rzSubsidy.getValue());
}
}
}
// }
return staffDetail;
}
public static SysStaffDetail subsidyCalculation(SysStaff staff, SysStaffDetail staffDetail, List<RzSubsidyInfo> subsidyInfoList){
return subsidyCalculation(staff, staffDetail, subsidyInfoList, false);
}
}