febs-server/febs-server-hr/src/main/java/cc/mrbird/febs/server/hr/entity/EmpBaseInfo.java
@@ -432,7 +432,7 @@ @TableField("allDeptName") private String allDeptName = ""; // @FieldInfo(name = "dimissRemark", type = "varchar", explain = "离职备注") // @TableField("dimissRemark") // private String dimissRemark = ""; @FieldInfo(name = "annualLeave", type = "int", explain = "年假天数") @TableField("annualLeave") private Integer annualLeave = 0; } febs-server/febs-server-hr/src/main/java/cc/mrbird/febs/server/hr/service/IEmpBaseInfoService.java
@@ -223,5 +223,26 @@ * @return boolean */ boolean updateEmpAge(String userId); boolean updateDeptName(); /** * 更新指定员工的年假信息 * @param userId 员工Id */ void updateAnnualLeave(String userId); /** * 更新所有人员的年假信息 */ void updateAnnualLeave(); /** * 更新员工的一些关键信息,主要提供给定时任务用,目前已提供 * <p> * 1.更新员工年龄 * 2.更新员工年假 */ void updateEmpBaseKeyInfo(); } febs-server/febs-server-hr/src/main/java/cc/mrbird/febs/server/hr/service/impl/EmpBaseInfoServiceImpl.java
@@ -28,6 +28,7 @@ import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; @@ -667,7 +668,7 @@ } } // @Override // @Override public void getImage(String empId, HttpServletResponse response) throws Exception { EmpBaseInfo empBaseInfo = this.getById(empId); if (StrUtil.isBlank(empBaseInfo.getImagePath())) { @@ -1448,12 +1449,75 @@ } else { empBaseInfoList = this.list(); } if (empBaseInfoList.size() > 0) { empBaseInfoList.forEach(p -> { if (!empBaseInfoList.isEmpty()) { empBaseInfoList.parallelStream().forEach(p -> { p.setAge(DateUtil.ageOfNow(p.getBirthdate())); this.saveOrUpdate(p); }); } return false; } @Override public void updateAnnualLeave(String userId) { EmpBaseInfo empBaseInfo = this.getById(userId); int holiday = calculateHoliday(empBaseInfo.getEntryDate()); empBaseInfo.setAnnualLeave(holiday); baseMapper.update(null, new LambdaUpdateWrapper<EmpBaseInfo>() .set(EmpBaseInfo::getAnnualLeave, holiday) .eq(EmpBaseInfo::getEmpId, empBaseInfo.getEmpId())); } @Override public void updateAnnualLeave() { List<EmpBaseInfo> list = this.list(); list.parallelStream().forEach(p -> { int holiday = calculateHoliday(p.getEntryDate()); p.setAnnualLeave(holiday); baseMapper.update(null, new LambdaUpdateWrapper<EmpBaseInfo>() .set(EmpBaseInfo::getAnnualLeave, holiday) .eq(EmpBaseInfo::getEmpId, p.getEmpId())); }); } @Override public void updateEmpBaseKeyInfo() { List<EmpBaseInfo> list = this.list(); list.parallelStream().forEach(p -> { int holiday = calculateHoliday(p.getEntryDate()); int age = calculateAge(p.getBirthdate()); baseMapper.update(null, new LambdaUpdateWrapper<EmpBaseInfo>() .set(EmpBaseInfo::getAnnualLeave, holiday) .set(EmpBaseInfo::getAge, age) .eq(EmpBaseInfo::getEmpId, p.getEmpId())); }); } /** * 根据设置的参数计算员工的年假 * @param date 入职日期 * @return 年假天数 */ private int calculateHoliday(Date date) { int holiday = 0; int joinYear = DateUtil.ageOfNow(date); String configValue = redisService.get("annual_leave").toString(); String[] values = StrUtil.split(configValue, "|"); String[] condition = StrUtil.split(values[0], ","); String[] days = StrUtil.split(values[1], ","); if (condition.length == 2) { int one = Integer.parseInt(condition[0]); int two = Integer.parseInt(condition[1]); if (joinYear >= one && joinYear < two) { holiday = Integer.parseInt(days[0]); } else if (joinYear >= two) { holiday = Integer.parseInt(days[1]); } } return holiday; } private int calculateAge(Date date){ return DateUtil.ageOfNow(date); } } febs-server/febs-server-hr/src/main/java/cc/mrbird/febs/server/hr/service/impl/EmpContractInfoServiceImpl.java
@@ -272,7 +272,7 @@ queryWrapper.eq("a.DelFlag", empContractinfo.getDelFlag()); queryWrapper.eq("a.remindFlag", 0); queryWrapper.in("a.contractStatus", contractStatus); queryWrapper.between("a.diffDay", -diffDay, diffDay); queryWrapper.le("a.diffDay", diffDay); queryWrapper.ge("a.endDate", DateUtil.formatDate(new Date())); queryWrapper.in("c.dept_Id", remoteDeptService.userRightDepts().split(StringConstant.COMMA)); febs-server/febs-server-hr/src/main/java/cc/mrbird/febs/server/hr/task/ScheduledTask.java
@@ -37,7 +37,7 @@ */ @Scheduled(cron = "0 0 1 * * ?") public void calculateSeniority(){ log.info("每天凌晨1点计算一次工龄"); log.info("每天凌晨1点计算工龄"); empBaseInfoService.updateSeniority(); } @@ -56,12 +56,12 @@ } @Scheduled(cron = "0 0 4 * * ?") public void autoCalculateAge(){ log.info("每天凌晨4点自动更新年龄"); String userId = ""; empBaseInfoService.updateEmpAge(userId); log.info("每天凌晨4点自动更新年龄和年假"); empBaseInfoService.updateEmpBaseKeyInfo(); } @Override public void run(String... args) throws Exception { empBaseInfoService.updateEmpBaseKeyInfo(); //calculateSeniority(); // autoStopContract(); //autoCalculateAge(); febs-server/febs-server-system/src/main/java/cc/mrbird/febs/server/system/runner/StartTask.java
@@ -2,6 +2,7 @@ import cc.mrbird.febs.server.system.service.IDeptService; import cc.mrbird.febs.server.system.service.IDicItemService; import cc.mrbird.febs.server.system.service.ISysConfigService; import lombok.extern.slf4j.Slf4j; import org.springframework.boot.CommandLineRunner; import org.springframework.stereotype.Component; @@ -21,15 +22,18 @@ public class StartTask implements CommandLineRunner { private final IDicItemService dicItemService; private final IDeptService deptService; private final ISysConfigService sysConfigService; public StartTask(IDicItemService dicItemService, IDeptService deptService) { public StartTask(IDicItemService dicItemService, IDeptService deptService, ISysConfigService sysConfigService) { this.dicItemService = dicItemService; this.deptService = deptService; this.sysConfigService = sysConfigService; } @Override public void run(String... args) throws Exception { dicItemService.setDicItemRedis(); deptService.setDeptRedis(); sysConfigService.setConfigInfoToRedis(); } } febs-server/febs-server-system/src/main/java/cc/mrbird/febs/server/system/service/ISysConfigService.java
@@ -77,5 +77,10 @@ * @author: luoyibo */ Void setContractRemindToRedis(); /** * 将年假计算天数设置到redis中 */ void setConfigInfoToRedis(); } febs-server/febs-server-system/src/main/java/cc/mrbird/febs/server/system/service/impl/LogServiceImpl.java
@@ -53,7 +53,7 @@ } Page<Log> page = new Page<>(request.getPageNum(), request.getPageSize()); SortUtil.handlePageSort(request, page, "createTime", FebsConstant.ORDER_DESC, true); SortUtil.handlePageSort(request, page, "CREATE_TIME", FebsConstant.ORDER_DESC, true); return this.page(page, queryWrapper); } febs-server/febs-server-system/src/main/java/cc/mrbird/febs/server/system/service/impl/LoginLogServiceImpl.java
@@ -42,7 +42,7 @@ } Page<LoginLog> page = new Page<>(request.getPageNum(), request.getPageSize()); SortUtil.handlePageSort(request, page, "loginTime", FebsConstant.ORDER_DESC, true); SortUtil.handlePageSort(request, page, "LOGIN_TIME", FebsConstant.ORDER_DESC, true); return this.page(page, queryWrapper); } febs-server/febs-server-system/src/main/java/cc/mrbird/febs/server/system/service/impl/SysConfigServiceImpl.java
@@ -119,8 +119,22 @@ sysConfigQueryWrapper.eq("config_key", "contract_remind"); SysConfig sysConfig = sysConfigMapper.selectOne(sysConfigQueryWrapper); redisService.set("diffDay", sysConfig.getConfigValue()); redisService.set("contract_remind", sysConfig.getConfigValue()); return null; } @Override public void setConfigInfoToRedis() { QueryWrapper<SysConfig> sysConfigQueryWrapper = new QueryWrapper<>(); sysConfigQueryWrapper.eq("delFlag", "0"); //SysConfig sysConfig = sysConfigMapper.selectOne(sysConfigQueryWrapper); List<SysConfig> list = sysConfigMapper.selectList(sysConfigQueryWrapper); list.forEach(sysConfig -> { redisService.set(sysConfig.getConfigKey(), sysConfig.getConfigValue()); }); } }