update 优化请假天数工具类,删除缓存,加锁处理,可以采用外部传参的形式处理redis部分
This commit is contained in:
parent
1387769f26
commit
4e2090c5f4
@ -8,6 +8,7 @@ import org.dromara.common.core.domain.dto.DeptDTO;
|
|||||||
import org.dromara.common.core.domain.dto.TaskAssigneeDTO;
|
import org.dromara.common.core.domain.dto.TaskAssigneeDTO;
|
||||||
import org.dromara.common.core.domain.dto.UserDTO;
|
import org.dromara.common.core.domain.dto.UserDTO;
|
||||||
import org.dromara.common.core.domain.model.TaskAssigneeBody;
|
import org.dromara.common.core.domain.model.TaskAssigneeBody;
|
||||||
|
import org.dromara.common.core.enums.FormatsType;
|
||||||
import org.dromara.common.core.enums.TaskAssigneeEnum;
|
import org.dromara.common.core.enums.TaskAssigneeEnum;
|
||||||
import org.dromara.common.core.exception.ServiceException;
|
import org.dromara.common.core.exception.ServiceException;
|
||||||
import org.dromara.common.core.service.DeptService;
|
import org.dromara.common.core.service.DeptService;
|
||||||
@ -119,7 +120,7 @@ public class WfTaskAssigneeServiceImpl implements IWfTaskAssigneeService, Handle
|
|||||||
Optional.ofNullable(assignee.getGroupName())
|
Optional.ofNullable(assignee.getGroupName())
|
||||||
.map(deptService::selectDeptNameByIds)
|
.map(deptService::selectDeptNameByIds)
|
||||||
.orElse(DEFAULT_GROUP_NAME), DEFAULT_GROUP_NAME))
|
.orElse(DEFAULT_GROUP_NAME), DEFAULT_GROUP_NAME))
|
||||||
.setCreateTime(assignee -> DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD_HH_MM_SS, assignee.getCreateTime()));
|
.setCreateTime(assignee -> DateUtils.parseDateToStr(FormatsType.YYYY_MM_DD_HH_MM_SS, assignee.getCreateTime()));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -1,19 +1,10 @@
|
|||||||
package org.dromara.workflow.utils;
|
package org.dromara.workflow.utils;
|
||||||
|
|
||||||
import cn.hutool.core.collection.CollUtil;
|
|
||||||
import cn.hutool.core.util.ArrayUtil;
|
import cn.hutool.core.util.ArrayUtil;
|
||||||
import com.baomidou.lock.LockInfo;
|
|
||||||
import com.baomidou.lock.LockTemplate;
|
|
||||||
import lombok.AccessLevel;
|
import lombok.AccessLevel;
|
||||||
import lombok.NoArgsConstructor;
|
import lombok.NoArgsConstructor;
|
||||||
import org.dromara.common.core.constant.GlobalConstants;
|
|
||||||
import org.dromara.common.core.utils.SpringUtils;
|
|
||||||
import org.dromara.common.redis.utils.RedisUtils;
|
|
||||||
|
|
||||||
import java.util.Calendar;
|
import java.util.*;
|
||||||
import java.util.Collections;
|
|
||||||
import java.util.Date;
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 工作日工具类
|
* 工作日工具类
|
||||||
@ -23,11 +14,16 @@ import java.util.List;
|
|||||||
@NoArgsConstructor(access = AccessLevel.PRIVATE)
|
@NoArgsConstructor(access = AccessLevel.PRIVATE)
|
||||||
public class WorkDaysUtils {
|
public class WorkDaysUtils {
|
||||||
|
|
||||||
private static final String DAYS_IN_YEARS_KEY = GlobalConstants.GLOBAL_REDIS_KEY + "DAYS_IN_YEARS:";
|
private static final Map<Integer, Integer[]> DAYS_IN_YEARS = new HashMap<>();
|
||||||
private static final LockTemplate LOCK_TEMPLATE = SpringUtils.getBean(LockTemplate.class);
|
|
||||||
//工作日
|
/**
|
||||||
|
* 工作日
|
||||||
|
*/
|
||||||
public static final int WORKDAY = 0;
|
public static final int WORKDAY = 0;
|
||||||
//休息日
|
|
||||||
|
/**
|
||||||
|
* 休息日
|
||||||
|
*/
|
||||||
public static final int RESTDAY = 1;
|
public static final int RESTDAY = 1;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -130,13 +126,6 @@ public class WorkDaysUtils {
|
|||||||
return workDays;
|
return workDays;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* 删除指定年份的数据
|
|
||||||
*/
|
|
||||||
public static void clearData(Integer year) {
|
|
||||||
RedisUtils.deleteObject(DAYS_IN_YEARS_KEY + year);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 计算指定年份的工作日数组,标记个人的加班和调休日期
|
* 计算指定年份的工作日数组,标记个人的加班和调休日期
|
||||||
*
|
*
|
||||||
@ -162,29 +151,18 @@ public class WorkDaysUtils {
|
|||||||
* @return 表示一年中每一天的状态数组,0 表示工作日,1 表示周末
|
* @return 表示一年中每一天的状态数组,0 表示工作日,1 表示周末
|
||||||
*/
|
*/
|
||||||
private static Integer[] daysInYear(Integer year) {
|
private static Integer[] daysInYear(Integer year) {
|
||||||
String key = DAYS_IN_YEARS_KEY + year;
|
if (DAYS_IN_YEARS.containsKey(year)) {
|
||||||
Integer[] daysInYears = RedisUtils.getCacheObject(key);
|
return DAYS_IN_YEARS.get(year);
|
||||||
if (ArrayUtil.isNotEmpty(daysInYears)) {
|
} else {
|
||||||
return daysInYears;
|
|
||||||
}
|
|
||||||
LockInfo lock = LOCK_TEMPLATE.lock(key);
|
|
||||||
try {
|
|
||||||
// 再次检查缓存,防止缓存穿透
|
|
||||||
daysInYears = RedisUtils.getCacheObject(key);
|
|
||||||
if (ArrayUtil.isNotEmpty(daysInYears)) {
|
|
||||||
return daysInYears;
|
|
||||||
}
|
|
||||||
// 如果年份数据不存在,则生成指定年份的数据
|
// 如果年份数据不存在,则生成指定年份的数据
|
||||||
Integer[] daysArray = generateDaysArray(year);
|
Integer[] daysArray = generateDaysArray(year);
|
||||||
RedisUtils.setCacheObject(key, daysArray);
|
DAYS_IN_YEARS.put(year, daysArray);
|
||||||
return daysArray;
|
return daysArray;
|
||||||
} finally {
|
|
||||||
LOCK_TEMPLATE.releaseLock(lock);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 根据指定年份生成天数数组,其中工作日用 0 表示,周末用 1 表示
|
* 根据指定年份生成天数数组
|
||||||
*
|
*
|
||||||
* @param year 指定年份
|
* @param year 指定年份
|
||||||
* @return 表示一年中每一天的状态数组
|
* @return 表示一年中每一天的状态数组
|
||||||
@ -216,7 +194,7 @@ public class WorkDaysUtils {
|
|||||||
* @param valueToSet 休息日用 1,工作日用 0
|
* @param valueToSet 休息日用 1,工作日用 0
|
||||||
*/
|
*/
|
||||||
private static void updateDaysArray(Integer[] daysArray, List<Date> days, int valueToSet) {
|
private static void updateDaysArray(Integer[] daysArray, List<Date> days, int valueToSet) {
|
||||||
if (CollUtil.isEmpty(days)) {
|
if (ArrayUtil.isEmpty(days)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user