考勤修改审核流程配置

This commit is contained in:
cwchen 2025-02-21 17:18:11 +08:00
parent 902a63dcf2
commit bc0dbfced0
4 changed files with 84 additions and 42 deletions

View File

@ -57,6 +57,8 @@ public class SpringThreadPoolConfig {
executor.setThreadNamePrefix(threadNamePrefix);
// 线程池对拒绝任务的处理策略
executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
// 允许核心线程在空闲时被回收
executor.setAllowCoreThreadTimeOut(true);
// 初始化
executor.initialize();
return executor;

View File

@ -163,12 +163,7 @@ public class AttendanceDetailsController extends BaseController {
@PutMapping("updateAttDetailsDataExamine")
@Log(title = "考勤报表->考勤明细->考勤修改", businessType = BusinessType.UPDATE)
public AjaxResult examine(@RequestBody List<AttDataDetailsBean> list) {
try{
return attendanceDetailsService.updateAttDetailsDataExamine(list);
}catch (Exception e){
log.error(e.toString(),e);
}
return error("系统异常");
}
/**

View File

@ -14,7 +14,10 @@ import com.bonus.system.basic.domain.SysNotice;
import com.bonus.system.basic.service.SysNoticeService;
import com.bonus.system.file.service.FileUploadService;
import lombok.extern.log4j.Log4j2;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.transaction.interceptor.TransactionAspectSupport;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
@ -44,6 +47,9 @@ public class AttendanceDetailsServiceImpl implements AttendanceDetailsService {
@Resource(name = "FileUploadService")
private FileUploadService fileUploadService;
@Resource(name = "testTaskExecutor")
private ThreadPoolTaskExecutor testTaskExecutor;
@Override
public List<AttDataDetailsBean> selectAttDetailsList(AttDataDetailsBean bean) {
List<AttDataDetailsBean> list = attendanceDetailsDao.selectAttDetailsList(bean);
@ -109,7 +115,9 @@ public class AttendanceDetailsServiceImpl implements AttendanceDetailsService {
}
@Override
@Transactional(rollbackFor = Exception.class)
public AjaxResult updateAttDetailsDataExamine(List<AttDataDetailsBean> list) {
try {
long userId = SecurityUtils.getLoginUser().getSysUser().getUserId();
// 当前登录人的审核权限类型
int auditType = RoleUtil.getAuditType();
@ -118,12 +126,14 @@ public class AttendanceDetailsServiceImpl implements AttendanceDetailsService {
}
String time = DateUtils.getTime();
for (AttDataDetailsBean c : list) {
Integer auditStatus = attendanceDetailsDao.getAuditStatus(c);
c.setReviewerUserId(userId);
c.setReviewerTime(time);
Integer auditStatus = attendanceDetailsDao.getAuditStatus(c);
c.setCurrentAuditStatus(auditStatus);
if(Objects.equals(auditStatus,0)){ // 部门负责人审核
if(auditType == 2){
if(Objects.equals(auditStatus,1) || Objects.equals(auditStatus,2)){ // 数据审核通过|数据审核驳回
continue;
}else if(Objects.equals(auditStatus,0)){ // 部门负责人审核
if(auditType == 2){ // 数据处于部门负责人审核中人资专员无权审核
return AjaxResult.error("当前用户无审核权限");
}
c.setManagerAuditTime(time);
@ -136,7 +146,7 @@ public class AttendanceDetailsServiceImpl implements AttendanceDetailsService {
c.setReviewerStatus(c.getReviewerStatus());
}
}else if(Objects.equals(auditStatus,3)){ // 人资审核
if(auditType == 1){
if(auditType == 1){ // 数据处于人资审核中部门负责人无权审核
return AjaxResult.error("当前用户无审核权限");
}
c.setHrAuditTime(time);
@ -145,7 +155,28 @@ public class AttendanceDetailsServiceImpl implements AttendanceDetailsService {
}
}
int i = attendanceDetailsDao.updateAttDetailsDataExamine(list);
if (i > 0) {
// 提交数据同步任务到线程池
testTaskExecutor.submit(() -> syncData(list));
return AjaxResult.success();
} catch (Exception e) {
log.error(e.toString(),e);
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
return AjaxResult.error();
}
}
/**
* 考勤明细修改后执行定时任务
* @param list
* @return void
* @author cwchen
* @date 2025/2/21 16:49
*/
private void syncData(List<AttDataDetailsBean> list) {
// 数据同步逻辑
log.info("Data synchronization in progress...");
// 模拟耗时操作
try {
Set<String> keys = new HashSet<>();
for (AttDataDetailsBean attDataDetailsBean : list) {
keys.add(attDataDetailsBean.getAttCurrentDay());
@ -155,8 +186,10 @@ public class AttendanceDetailsServiceImpl implements AttendanceDetailsService {
newAttTask.insertDayReportData(item);
newAttTask.updateMonthReportData(item);
}
} catch (Exception e) {
log.error(e.toString(),e);
}
return AjaxResult.success();
log.info("Data synchronization completed.");
}
@Override

View File

@ -15,6 +15,12 @@ import java.util.List;
*/
public class RoleUtil {
/**
* 获取当前登录人的角色-供前端使用
* @return int
* @author cwchen
* @date 2025/2/21 16:52
*/
public static int getCurrentUserRole(){
SysUser sysUser = SecurityUtils.getLoginUser().getSysUser();
List<String> rolesId = sysUser.getRoleList();
@ -31,6 +37,12 @@ public class RoleUtil {
return roleId;
}
/**
* 获取当前登录人的审核角色-后端审核使用
* @return int
* @author cwchen
* @date 2025/2/21 16:51
*/
public static int getAuditType(){
int auditType;
List<String> roleId = SecurityUtils.getLoginUser().getSysUser().getRoleList();
@ -40,7 +52,7 @@ public class RoleUtil {
auditType = 2;
}else if(Collections.frequency(roleId, "1") == 1){ // 管理员
auditType = 3;
} else {
} else { // 其他角色无审核权限
auditType = 0;
}
return auditType;