You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

63 lines
2.4 KiB

package com.inspect.job.task;
import com.inspect.base.core.constant.SecurityConstants;
import com.inspect.base.core.web.domain.AjaxResult;
import com.inspect.job.client.ExtOrgSyncClient;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import java.util.function.Function;
/**
* 外部平台(盐源智慧感知平台)部门 / 用户同步定时任务。
* <p>
* 在“定时任务”中配置调用:
* <ul>
* <li>{@code extOrgSyncTask.syncAll()}:部门 + 用户全量同步(建议每日凌晨);</li>
* <li>{@code extOrgSyncTask.syncUser()}:部门 + 用户同步;</li>
* <li>{@code extOrgSyncTask.syncDept()}:仅部门同步。</li>
* </ul>
* 角色同步暂缓。调用失败直接抛出异常,由 sys_job_log 记录失败原因。
*/
@Slf4j
@Component("extOrgSyncTask")
public class ExtOrgSyncTask {
private final ExtOrgSyncClient extOrgSyncClient;
public ExtOrgSyncTask(ExtOrgSyncClient extOrgSyncClient) {
this.extOrgSyncClient = extOrgSyncClient;
}
public void syncAll() {
invoke("外部组织全量同步", extOrgSyncClient::syncAll);
}
public void syncDept() {
invoke("外部部门同步", extOrgSyncClient::syncDept);
}
public void syncUser() {
invoke("外部用户同步", extOrgSyncClient::syncUser);
}
private void invoke(String action, Function<String, AjaxResult> call) {
long start = System.currentTimeMillis();
log.info("[EXT-SYNC] {} 开始", action);
AjaxResult result;
try {
result = call.apply(SecurityConstants.INNER);
} catch (Exception e) {
log.error("[EXT-SYNC] {} 调用异常", action, e);
throw new RuntimeException(action + "调用异常: " + e.getMessage(), e);
}
Object code = result == null ? null : result.get(AjaxResult.CODE_TAG);
Object msg = result == null ? null : result.get(AjaxResult.MSG_TAG);
long elapsed = System.currentTimeMillis() - start;
if (result == null || !(code instanceof Number) || ((Number) code).intValue() != 200) {
log.error("[EXT-SYNC] {} 失败, code={}, msg={}, 耗时={}ms", action, code, msg, elapsed);
throw new RuntimeException(action + "失败: " + (msg == null ? "无响应" : msg));
}
log.info("[EXT-SYNC] {} 完成, msg={}, 耗时={}ms", action, msg, elapsed);
}
}