|
|
@@ -71,131 +71,127 @@ public class NjBalanceManageServiceImpl implements NjBalanceManageService { |
|
|
|
|
|
|
|
/** |
|
|
|
* 计算年假 保存年假规则会调用 定时任务每年1月1日会调用这个接口 |
|
|
|
* @param flag 0 手动调用 1定时任务生成 |
|
|
|
* @param dto 0时必传 1 为null |
|
|
|
*/ |
|
|
|
@Override |
|
|
|
public void generateYearBalance(String flag, NjRuleConfigDTO dto) { |
|
|
|
public void generateYearBalance() { |
|
|
|
// 查询年假配置管理 |
|
|
|
LambdaQueryWrapper<NjRuleConfig> queryWrapper = Wrappers.lambdaQuery(); |
|
|
|
List<NjRuleConfigDTO> njRuleConfigDTOS = new ArrayList<>(); |
|
|
|
if("1".equals(flag)){ |
|
|
|
njRuleConfigDTOS = njRuleConfigMapper.selectVoList(queryWrapper, NjRuleConfigDTO.class); |
|
|
|
} |
|
|
|
if("0".equals(flag)){ |
|
|
|
njRuleConfigDTOS.add(dto); |
|
|
|
} |
|
|
|
// 遍历所有年假配置,判断是否适用全部人员,判断年假的生成方式 |
|
|
|
for (NjRuleConfigDTO njRuleConfigDTO : njRuleConfigDTOS) { |
|
|
|
// 获取人员适用范围true 全员, fale 指定人员 |
|
|
|
Boolean applicableRange = njRuleConfigDTO.getApplicableRange(); |
|
|
|
// 用户年假集合 |
|
|
|
List<NjBalanceManage> njBalanceManages = new ArrayList<>(); |
|
|
|
//全部用户 |
|
|
|
if(applicableRange){ |
|
|
|
List<JSONObject> jsonObjects = dkRecordMapper.queryAllUsers(null); |
|
|
|
// 遍历人员生成年假记录 |
|
|
|
for (JSONObject sysUser : jsonObjects) { |
|
|
|
Long userId = sysUser.getLong("userId"); |
|
|
|
// 根据 人员id 查询年假信息 如果存在就跟新年假信息 |
|
|
|
QueryWrapper<NjBalanceManage> njQueryWrapper = new QueryWrapper<>(); |
|
|
|
njQueryWrapper.eq("user_id", userId); |
|
|
|
njQueryWrapper.ge("create_time", LocalDateTime.now()); |
|
|
|
NjBalanceManage njBalanceManage = njBalanceManageMapper.selectOne(njQueryWrapper); |
|
|
|
if (BeanUtil.isNotEmpty(njBalanceManage)) { |
|
|
|
njBalanceManage = new NjBalanceManage(); |
|
|
|
} |
|
|
|
List<NjRuleConfigDTO> njRuleConfigDTOS = njRuleConfigMapper.selectVoList(queryWrapper, NjRuleConfigDTO.class); |
|
|
|
|
|
|
|
//2.2 查询明细表中的已使用年假 |
|
|
|
BigDecimal used_days = new BigDecimal(0); |
|
|
|
QueryWrapper detailQuery =new QueryWrapper(); |
|
|
|
detailQuery.select("sum(used_day) used_days"); |
|
|
|
detailQuery.eq("user_id",userId); |
|
|
|
List<Map> detailList= njBalanceManageDetailMapper.selectMaps(detailQuery); |
|
|
|
if (detailList!=null&&detailList.size()>0) { |
|
|
|
Map map =detailList.get(0); |
|
|
|
if (map!=null) { |
|
|
|
used_days = (BigDecimal )map.get("used_days"); |
|
|
|
if (njRuleConfigDTOS!=null&&njRuleConfigDTOS.size()>0) { |
|
|
|
// 遍历所有年假配置,判断是否适用全部人员,判断年假的生成方式 |
|
|
|
for (NjRuleConfigDTO njRuleConfigDTO : njRuleConfigDTOS) { |
|
|
|
// 获取人员适用范围true 全员, fale 指定人员 |
|
|
|
Boolean applicableRange = njRuleConfigDTO.getApplicableRange(); |
|
|
|
// 用户年假集合 |
|
|
|
List<NjBalanceManage> njBalanceManages = new ArrayList<>(); |
|
|
|
//全部用户 |
|
|
|
if(applicableRange){ |
|
|
|
List<JSONObject> jsonObjects = dkRecordMapper.queryAllUsers(null); |
|
|
|
// 遍历人员生成年假记录 |
|
|
|
for (JSONObject sysUser : jsonObjects) { |
|
|
|
Long userId = sysUser.getLong("userId"); |
|
|
|
// 根据 人员id 查询年假信息 如果存在就跟新年假信息 |
|
|
|
QueryWrapper<NjBalanceManage> njQueryWrapper = new QueryWrapper<>(); |
|
|
|
njQueryWrapper.eq("user_id", userId); |
|
|
|
njQueryWrapper.ge("create_time", LocalDateTime.now()); |
|
|
|
NjBalanceManage njBalanceManage = njBalanceManageMapper.selectOne(njQueryWrapper); |
|
|
|
if (BeanUtil.isNotEmpty(njBalanceManage)) { |
|
|
|
njBalanceManage = new NjBalanceManage(); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
// 获取入职时间 |
|
|
|
LocalDate joinedDate = sysUser.get("joinedDate") == null ? LocalDate.now() : (LocalDate)sysUser.get("joinedDate") ; |
|
|
|
//年假总额 |
|
|
|
njBalanceManage.setAnnualLeave(new BigDecimal(calculateAnnualLeave(joinedDate))); |
|
|
|
// 已使用天数 |
|
|
|
njBalanceManage.setUsedDay(used_days); |
|
|
|
// 剩余天数 = 年假总额 - 已使用年假 |
|
|
|
njBalanceManage.setUnusedDay(njBalanceManage.getAnnualLeave().subtract(used_days)); |
|
|
|
//上年结转 |
|
|
|
njBalanceManage.setLastYearUnusedDay(BigDecimal.valueOf(Constans.ANNUALLEAVETIERS_0)); |
|
|
|
// 转态 |
|
|
|
njBalanceManage.setIsEnable(true); |
|
|
|
// 获取用户信息 |
|
|
|
njBalanceManage.setUserId(userId); |
|
|
|
njBalanceManage.setUserName((String)sysUser.get("userName")); |
|
|
|
njBalanceManage.setNickName((String)sysUser.get("nickName")); |
|
|
|
njBalanceManage.setDeptName((String)sysUser.get("deptName")); |
|
|
|
njBalanceManages.add(njBalanceManage); |
|
|
|
} |
|
|
|
//2.2 查询明细表中的已使用年假 |
|
|
|
BigDecimal used_days = new BigDecimal(0); |
|
|
|
QueryWrapper detailQuery =new QueryWrapper(); |
|
|
|
detailQuery.select("sum(used_day) used_days"); |
|
|
|
detailQuery.eq("user_id",userId); |
|
|
|
List<Map> detailList= njBalanceManageDetailMapper.selectMaps(detailQuery); |
|
|
|
if (detailList!=null&&detailList.size()>0) { |
|
|
|
Map map =detailList.get(0); |
|
|
|
if (map!=null) { |
|
|
|
used_days = (BigDecimal )map.get("used_days"); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
// 指定人员 |
|
|
|
}else { |
|
|
|
//指定用户 |
|
|
|
// 1.根据年假配置查询下面的用户 |
|
|
|
LambdaQueryWrapper<NjRuleConfigAndUser> queryWrapper1 = Wrappers.lambdaQuery(); |
|
|
|
queryWrapper1.eq(NjRuleConfigAndUser::getNjRuleConfigId, njRuleConfigDTO.getId()); |
|
|
|
List<NjRuleConfigAndUserDTO> njRuleConfigAndUserDTOS = njRuleConfigAndUserMapper.selectVoList(queryWrapper1); |
|
|
|
//2.根据用户入职时间 计算对于的年假额度 |
|
|
|
for (NjRuleConfigAndUserDTO njRuleConfigAndUserDTO : njRuleConfigAndUserDTOS) { |
|
|
|
//2.1 根据 人员id 查询年假信息 |
|
|
|
LambdaQueryWrapper<NjBalanceManage> queryWrapper2 = new LambdaQueryWrapper<>(); |
|
|
|
queryWrapper2.eq(NjBalanceManage::getUserId, njRuleConfigAndUserDTO.getUserId()); |
|
|
|
int year = LocalDate.now().getYear(); |
|
|
|
queryWrapper2.apply("YEAR(create_time) = {0}", year); |
|
|
|
NjBalanceManage njBalanceManage = njBalanceManageMapper.selectOne(queryWrapper2); |
|
|
|
if (njBalanceManage==null) { |
|
|
|
njBalanceManage = new NjBalanceManage(); |
|
|
|
// 获取入职时间 |
|
|
|
LocalDate joinedDate = sysUser.get("joinedDate") == null ? LocalDate.now() : (LocalDate)sysUser.get("joinedDate") ; |
|
|
|
//年假总额 |
|
|
|
njBalanceManage.setAnnualLeave(new BigDecimal(calculateAnnualLeave(joinedDate))); |
|
|
|
// 已使用天数 |
|
|
|
njBalanceManage.setUsedDay(used_days); |
|
|
|
// 剩余天数 = 年假总额 - 已使用年假 |
|
|
|
njBalanceManage.setUnusedDay(njBalanceManage.getAnnualLeave().subtract(used_days)); |
|
|
|
//上年结转 |
|
|
|
njBalanceManage.setLastYearUnusedDay(BigDecimal.valueOf(Constans.ANNUALLEAVETIERS_0)); |
|
|
|
// 转态 |
|
|
|
njBalanceManage.setIsEnable(true); |
|
|
|
// 获取用户信息 |
|
|
|
njBalanceManage.setUserId(userId); |
|
|
|
njBalanceManage.setUserName((String)sysUser.get("userName")); |
|
|
|
njBalanceManage.setNickName((String)sysUser.get("nickName")); |
|
|
|
njBalanceManage.setDeptName((String)sysUser.get("deptName")); |
|
|
|
njBalanceManages.add(njBalanceManage); |
|
|
|
} |
|
|
|
|
|
|
|
//2.2 查询明细表中的已使用年假 |
|
|
|
BigDecimal used_days = new BigDecimal(0); |
|
|
|
QueryWrapper detailQuery =new QueryWrapper(); |
|
|
|
detailQuery.select("sum(used_day) used_days"); |
|
|
|
detailQuery.eq("user_id",njRuleConfigAndUserDTO.getUserId()); |
|
|
|
List<Map> detailList= njBalanceManageDetailMapper.selectMaps(detailQuery); |
|
|
|
if (detailList!=null&&detailList.size()>0) { |
|
|
|
Map map =detailList.get(0); |
|
|
|
if (map!=null) { |
|
|
|
used_days = (BigDecimal )map.get("used_days"); |
|
|
|
// 指定人员 |
|
|
|
}else { |
|
|
|
//指定用户 |
|
|
|
// 1.根据年假配置查询下面的用户 |
|
|
|
LambdaQueryWrapper<NjRuleConfigAndUser> queryWrapper1 = Wrappers.lambdaQuery(); |
|
|
|
queryWrapper1.eq(NjRuleConfigAndUser::getNjRuleConfigId, njRuleConfigDTO.getId()); |
|
|
|
List<NjRuleConfigAndUserDTO> njRuleConfigAndUserDTOS = njRuleConfigAndUserMapper.selectVoList(queryWrapper1); |
|
|
|
//2.根据用户入职时间 计算对于的年假额度 |
|
|
|
for (NjRuleConfigAndUserDTO njRuleConfigAndUserDTO : njRuleConfigAndUserDTOS) { |
|
|
|
//2.1 根据 人员id 查询年假信息 |
|
|
|
LambdaQueryWrapper<NjBalanceManage> queryWrapper2 = new LambdaQueryWrapper<>(); |
|
|
|
queryWrapper2.eq(NjBalanceManage::getUserId, njRuleConfigAndUserDTO.getUserId()); |
|
|
|
int year = LocalDate.now().getYear(); |
|
|
|
queryWrapper2.apply("YEAR(create_time) = {0}", year); |
|
|
|
NjBalanceManage njBalanceManage = njBalanceManageMapper.selectOne(queryWrapper2); |
|
|
|
if (njBalanceManage==null) { |
|
|
|
njBalanceManage = new NjBalanceManage(); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
// 获取入职时间 |
|
|
|
LocalDate joinedDate = njRuleConfigAndUserDTO.getJoinedDate() == null ? LocalDate.now() : njRuleConfigAndUserDTO.getJoinedDate(); |
|
|
|
//年假总额 |
|
|
|
njBalanceManage.setAnnualLeave(new BigDecimal(calculateAnnualLeave(joinedDate))); |
|
|
|
// 已使用天数 |
|
|
|
njBalanceManage.setUsedDay(used_days); |
|
|
|
// 剩余天数 = 年假总额 - 已使用年假 |
|
|
|
njBalanceManage.setUnusedDay(njBalanceManage.getAnnualLeave().subtract(used_days)); |
|
|
|
//上年结转 |
|
|
|
njBalanceManage.setLastYearUnusedDay(BigDecimal.valueOf(Constans.ANNUALLEAVETIERS_0)); |
|
|
|
// 转态 |
|
|
|
njBalanceManage.setIsEnable(true); |
|
|
|
// 获取用户信息 |
|
|
|
njBalanceManage.setUserId(njRuleConfigAndUserDTO.getUserId()); |
|
|
|
njBalanceManage.setUserName(njRuleConfigAndUserDTO.getUserName()); |
|
|
|
njBalanceManage.setNickName(njRuleConfigAndUserDTO.getNickName()); |
|
|
|
njBalanceManage.setDeptName(njRuleConfigAndUserDTO.getDeptName()); |
|
|
|
//2.2 查询明细表中的已使用年假 |
|
|
|
BigDecimal used_days = new BigDecimal(0); |
|
|
|
QueryWrapper detailQuery =new QueryWrapper(); |
|
|
|
detailQuery.select("sum(used_day) used_days"); |
|
|
|
detailQuery.eq("user_id",njRuleConfigAndUserDTO.getUserId()); |
|
|
|
List<Map> detailList= njBalanceManageDetailMapper.selectMaps(detailQuery); |
|
|
|
if (detailList!=null&&detailList.size()>0) { |
|
|
|
Map map =detailList.get(0); |
|
|
|
if (map!=null) { |
|
|
|
used_days = (BigDecimal )map.get("used_days"); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
// 获取入职时间 |
|
|
|
LocalDate joinedDate = njRuleConfigAndUserDTO.getJoinedDate() == null ? LocalDate.now() : njRuleConfigAndUserDTO.getJoinedDate(); |
|
|
|
//年假总额 |
|
|
|
njBalanceManage.setAnnualLeave(new BigDecimal(calculateAnnualLeave(joinedDate))); |
|
|
|
// 已使用天数 |
|
|
|
njBalanceManage.setUsedDay(used_days); |
|
|
|
// 剩余天数 = 年假总额 - 已使用年假 |
|
|
|
njBalanceManage.setUnusedDay(njBalanceManage.getAnnualLeave().subtract(used_days)); |
|
|
|
//上年结转 |
|
|
|
njBalanceManage.setLastYearUnusedDay(BigDecimal.valueOf(Constans.ANNUALLEAVETIERS_0)); |
|
|
|
// 转态 |
|
|
|
njBalanceManage.setIsEnable(true); |
|
|
|
// 获取用户信息 |
|
|
|
njBalanceManage.setUserId(njRuleConfigAndUserDTO.getUserId()); |
|
|
|
njBalanceManage.setUserName(njRuleConfigAndUserDTO.getUserName()); |
|
|
|
njBalanceManage.setNickName(njRuleConfigAndUserDTO.getNickName()); |
|
|
|
njBalanceManage.setDeptName(njRuleConfigAndUserDTO.getDeptName()); |
|
|
|
|
|
|
|
njBalanceManages.add(njBalanceManage); |
|
|
|
njBalanceManages.add(njBalanceManage); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
// 批量插入 |
|
|
|
njBalanceManageMapper.insertOrUpdateBatch(njBalanceManages); |
|
|
|
// 批量插入 |
|
|
|
njBalanceManageMapper.insertOrUpdateBatch(njBalanceManages); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
/** |