package com.ruoyi.quartz.task;
|
|
import com.ruoyi.system.domain.DepartmentSyncDTO;
|
import com.ruoyi.system.domain.UserSyncDTO;
|
import com.ruoyi.system.service.IDepartmentSyncDataService;
|
import com.ruoyi.system.service.IUserSyncDataService;
|
import org.slf4j.Logger;
|
import org.slf4j.LoggerFactory;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.stereotype.Component;
|
import com.ruoyi.common.core.domain.AjaxResult;
|
import com.ruoyi.system.service.IDepartmentSyncService;
|
import com.ruoyi.system.service.IUserSyncService;
|
|
import java.util.List;
|
|
/**
|
* OA数据同步定时任务(组合任务)
|
* 先同步部门,再同步用户
|
*
|
* @author ruoyi
|
* @date 2025-10-18
|
*/
|
@Component("oaSyncTask")
|
public class OaSyncTask
|
{
|
private static final Logger log = LoggerFactory.getLogger(OaSyncTask.class);
|
|
@Autowired
|
private IDepartmentSyncService departmentSyncService;
|
|
@Autowired
|
private IUserSyncService userSyncService;
|
|
@Autowired
|
private IDepartmentSyncDataService departmentSyncDataService;
|
|
@Autowired
|
private IUserSyncDataService userSyncDataService;
|
|
private List<DepartmentSyncDTO> getDept(){
|
return departmentSyncDataService.getBranchDepartments();
|
}
|
|
|
private List<UserSyncDTO> getUserData(){
|
return userSyncDataService.getOaUsers();
|
}
|
/**
|
* 同步OA数据(部门+用户)
|
* 按顺序执行:1. 部门同步 2. 用户同步
|
*
|
* 使用示例:
|
* - 任务名称:OA数据同步
|
* - 调用目标:oaSyncTask.syncOaData
|
* - cron表达式:0 0 2 * * ?(每天凌晨2点执行)
|
*/
|
public void syncOaData()
|
{
|
try
|
{
|
log.info("##########开始执行OA数据同步定时任务##########");
|
|
// 第一步:同步部门
|
log.info("【步骤1/2】开始同步部门数据...");
|
AjaxResult deptResult = departmentSyncService.syncBranchDepartments(this.getDept());
|
|
if (deptResult.get("code").equals(200))
|
{
|
log.info("【步骤1/2】部门同步成功: {}", deptResult.get("msg"));
|
|
// 第二步:同步用户(只有部门同步成功才执行)
|
log.info("【步骤2/2】开始同步用户数据...");
|
AjaxResult userResult = userSyncService.syncOaUsers(this.getUserData());
|
|
if (userResult.get("code").equals(200))
|
{
|
log.info("【步骤2/2】用户同步成功: {}", userResult.get("msg"));
|
log.info("##########OA数据同步定时任务执行完成##########");
|
log.info("总结:部门同步成功,用户同步成功");
|
}
|
else
|
{
|
log.error("【步骤2/2】用户同步失败: {}", userResult.get("msg"));
|
log.warn("##########OA数据同步定时任务部分完成##########");
|
log.warn("总结:部门同步成功,用户同步失败");
|
}
|
}
|
else
|
{
|
log.error("【步骤1/2】部门同步失败: {}", deptResult.get("msg"));
|
log.error("由于部门同步失败,跳过用户同步");
|
log.error("##########OA数据同步定时任务执行失败##########");
|
}
|
}
|
catch (Exception e)
|
{
|
log.error("OA数据同步定时任务执行异常", e);
|
}
|
}
|
|
/**
|
* 同步OA数据(带参数)
|
*
|
* @param params 参数(预留,暂未使用)
|
*/
|
public void syncOaData(String params)
|
{
|
log.info("OA数据同步任务参数: {}", params);
|
syncOaData();
|
}
|
|
/**
|
* 仅同步部门(独立任务)
|
*/
|
public void syncDepartmentsOnly()
|
{
|
try
|
{
|
log.info("==========开始执行部门同步任务==========");
|
AjaxResult result = departmentSyncService.syncBranchDepartments(this.getDept());
|
|
if (result.get("code").equals(200))
|
{
|
log.info("部门同步成功: {}", result.get("msg"));
|
}
|
else
|
{
|
log.error("部门同步失败: {}", result.get("msg"));
|
}
|
log.info("==========部门同步任务执行完成==========");
|
}
|
catch (Exception e)
|
{
|
log.error("部门同步任务执行异常", e);
|
}
|
}
|
|
/**
|
* 仅同步用户(独立任务)
|
*/
|
public void syncUsersOnly()
|
{
|
try
|
{
|
log.info("==========开始执行用户同步任务==========");
|
AjaxResult result = userSyncService.syncOaUsers(this.getUserData());
|
|
if (result.get("code").equals(200))
|
{
|
log.info("用户同步成功: {}", result.get("msg"));
|
}
|
else
|
{
|
log.error("用户同步失败: {}", result.get("msg"));
|
}
|
log.info("==========用户同步任务执行完成==========");
|
}
|
catch (Exception e)
|
{
|
log.error("用户同步任务执行异常", e);
|
}
|
}
|
}
|