package com.ruoyi.quartz.task; import com.ruoyi.system.domain.DepartmentSyncDTO; import com.ruoyi.system.domain.OrderClassDTO; import com.ruoyi.system.domain.UserSyncDTO; import com.ruoyi.system.service.*; 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 java.util.List; import java.util.Map; /** * 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 getDept(){ return departmentSyncDataService.getBranchDepartments(); } private List getUserData(){ return userSyncDataService.getOaUsers(); } @Autowired private IOrderClassDataService orderClassDataService; private List getServiceOrdCode() { return orderClassDataService.getServiceOrderClass(); } private List getDispatchOrdCode() { return orderClassDataService.getDispatchOrderClass(); } private List> getAddressList() { return departmentSyncDataService.getAddressList(); } /** * 同步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(),this.getServiceOrdCode(),this.getDispatchOrdCode(),this.getAddressList()); 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(),this.getServiceOrdCode(),this.getDispatchOrdCode(),this.getAddressList()); 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); } } }