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 tsbz = Collections.asList(ht,gl,xnh,yc); public static SysStaffDetail subsidyCalculation(SysStaff staff, SysStaffDetail staffDetail, List 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 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 subsidyInfoList){ return subsidyCalculation(staff, staffDetail, subsidyInfoList, false); } }