diff --git a/zt-framework/zt-spring-boot-starter-biz-business/src/main/java/com/zt/plat/framework/business/core/util/BusinessDeptHandleUtil.java b/zt-framework/zt-spring-boot-starter-biz-business/src/main/java/com/zt/plat/framework/business/core/util/BusinessDeptHandleUtil.java index 0f18c4bb..12478437 100644 --- a/zt-framework/zt-spring-boot-starter-biz-business/src/main/java/com/zt/plat/framework/business/core/util/BusinessDeptHandleUtil.java +++ b/zt-framework/zt-spring-boot-starter-biz-business/src/main/java/com/zt/plat/framework/business/core/util/BusinessDeptHandleUtil.java @@ -59,13 +59,15 @@ public class BusinessDeptHandleUtil { } // 如果有 deptId,校验其是否属于该 companyId if (deptIdHeader != null) { - boolean valid = companyDeptSetByCompanyId.stream().anyMatch(info -> String.valueOf(info.getDeptId()).equals(deptIdHeader)); - if (!valid) { + Optional matched = companyDeptSetByCompanyId.stream() + .filter(info -> String.valueOf(info.getDeptId()).equals(deptIdHeader)) + .findFirst(); + if (matched.isEmpty()) { return null; - } else { - // 部门存在,放行 - return new HashSet<>(); } + // 部门存在,先设置登录信息再放行 + applyAutoSelection(currentLoginUser, request, matched.get()); + return Collections.emptySet(); } if (companyDeptSetByCompanyId.size() == 1) { CompanyDeptInfo singleCompanyDept = companyDeptSetByCompanyId.iterator().next(); @@ -183,10 +185,10 @@ public class BusinessDeptHandleUtil { if (loginUser != null) { loginUser.setVisitCompanyId(Long.valueOf(info.getCompanyId())); loginUser.setVisitCompanyName(info.getCompanyName()); - loginUser.setVisitCompanyCode(info.getCompanyName()); + loginUser.setVisitCompanyCode(info.getCompanyCode()); loginUser.setVisitDeptId(Long.valueOf(info.getDeptId())); loginUser.setVisitDeptName(info.getDeptName()); - loginUser.setVisitDeptCode(info.getDeptName()); + loginUser.setVisitDeptCode(info.getDeptCode()); } request.setAttribute(WebFrameworkUtils.HEADER_VISIT_COMPANY_ID, info.getCompanyId()); if (info.getCompanyName() != null) { diff --git a/zt-module-system/zt-module-system-server/src/main/java/com/zt/plat/module/system/controller/admin/integration/iwork/vo/IWorkFullSyncReqVO.java b/zt-module-system/zt-module-system-server/src/main/java/com/zt/plat/module/system/controller/admin/integration/iwork/vo/IWorkFullSyncReqVO.java index e3793181..fb95db8a 100644 --- a/zt-module-system/zt-module-system-server/src/main/java/com/zt/plat/module/system/controller/admin/integration/iwork/vo/IWorkFullSyncReqVO.java +++ b/zt-module-system/zt-module-system-server/src/main/java/com/zt/plat/module/system/controller/admin/integration/iwork/vo/IWorkFullSyncReqVO.java @@ -1,5 +1,6 @@ package com.zt.plat.module.system.controller.admin.integration.iwork.vo; +import com.fasterxml.jackson.annotation.JsonProperty; import com.zt.plat.module.system.enums.integration.IWorkSyncEntityTypeEnum; import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.constraints.Max; @@ -42,6 +43,66 @@ public class IWorkFullSyncReqVO { @Schema(description = "是否允许更新已存在的本地实体", example = "false") private Boolean allowUpdate = Boolean.FALSE; + @JsonProperty("departmentcode") + @Schema(description = "部门编号") + private String departmentCode; + + @JsonProperty("departmentname") + @Schema(description = "部门名称") + private String departmentName; + + @JsonProperty("subcompanycode") + @Schema(description = "分部编号") + private String subcompanyCode; + + @JsonProperty("subcompanyname") + @Schema(description = "分部名称") + private String subcompanyName; + + @JsonProperty("subcompanyid1") + @Schema(description = "分部 ID") + private String subcompanyId1; + + @JsonProperty("jobtitlename") + @Schema(description = "岗位名称") + private String jobTitleName; + + @JsonProperty("workcode") + @Schema(description = "人员编号") + private String workCode; + + @JsonProperty("loginid") + @Schema(description = "登录名") + private String loginId; + + @JsonProperty("created") + @Schema(description = "创建时间戳(>=)") + private String created; + + @JsonProperty("modified") + @Schema(description = "修改时间戳(>=)") + private String modified; + + @JsonProperty("canceled") + @Schema(description = "封存标志,默认查询非封存数据。1:封存") + private String canceled; + + @JsonProperty("custom_data") + @Schema(description = "自定义字段列表(逗号分隔)") + private String customData; + + @JsonProperty("base_custom_data") + @Schema(description = "基本信息自定义字段列表(逗号分隔)") + private String baseCustomData; + + @JsonProperty("person_custom_data") + @Schema(description = "个人信息自定义字段列表(逗号分隔)") + private String personCustomData; + + @JsonProperty("work_custom_data") + @Schema(description = "工作信息自定义字段列表(逗号分隔)") + private String workCustomData; + public Set resolveScopes() { EnumSet defaults = EnumSet.allOf(IWorkSyncEntityTypeEnum.class); if (scopes == null || scopes.isEmpty()) { diff --git a/zt-module-system/zt-module-system-server/src/main/java/com/zt/plat/module/system/job/sync/SyncIWorkUserChangeJob.java b/zt-module-system/zt-module-system-server/src/main/java/com/zt/plat/module/system/job/sync/SyncIWorkUserChangeJob.java new file mode 100644 index 00000000..602c8402 --- /dev/null +++ b/zt-module-system/zt-module-system-server/src/main/java/com/zt/plat/module/system/job/sync/SyncIWorkUserChangeJob.java @@ -0,0 +1,39 @@ +package com.zt.plat.module.system.job.sync; + +import com.xxl.job.core.handler.annotation.XxlJob; +import com.zt.plat.framework.tenant.core.job.TenantJob; +import com.zt.plat.module.system.service.sync.SyncIWorkUserChangeService; +import jakarta.annotation.Resource; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +/** + * 用于定时同步iWork当日修改的用户数据 + * 同步时间:每日23:00 + */ +@Component +@Slf4j +public class SyncIWorkUserChangeJob { + + @Resource + private SyncIWorkUserChangeService syncIWorkUserChangeService; + + /** + * 执行批量重跑任务 + * 配置执行频率:每日23:00时执行一次 + * cron表达式:0 0 23 * * ? + */ + @XxlJob("syncIWorkUserChangeJob") + @TenantJob + public void execute() { + log.info("[syncLogBatchRerunJob][开始执行同步iWork当日变更用户任务]"); + try{ + int processedCount = syncIWorkUserChangeService.process(); + if (processedCount > 0) { + log.info("[syncLogBatchRerunJob][同步任务执行完成,处理了 {} 条记录]", processedCount); + } + } catch (Exception e) { + log.error("[syncLogBatchRerunJob][同步iWork当日变更用户任务执行异常]", e); + } + } +} diff --git a/zt-module-system/zt-module-system-server/src/main/java/com/zt/plat/module/system/service/sync/SyncIWorkUserChangeService.java b/zt-module-system/zt-module-system-server/src/main/java/com/zt/plat/module/system/service/sync/SyncIWorkUserChangeService.java new file mode 100644 index 00000000..dc3f3418 --- /dev/null +++ b/zt-module-system/zt-module-system-server/src/main/java/com/zt/plat/module/system/service/sync/SyncIWorkUserChangeService.java @@ -0,0 +1,14 @@ +package com.zt.plat.module.system.service.sync; + +/** + * 同步iWork当日修改的用户数据 + */ +public interface SyncIWorkUserChangeService { + + /** + * 同步入口 + * @return + */ + int process(); + +} diff --git a/zt-module-system/zt-module-system-server/src/main/java/com/zt/plat/module/system/service/sync/SyncIWorkUserChangeServiceImpl.java b/zt-module-system/zt-module-system-server/src/main/java/com/zt/plat/module/system/service/sync/SyncIWorkUserChangeServiceImpl.java new file mode 100644 index 00000000..fb70d8d3 --- /dev/null +++ b/zt-module-system/zt-module-system-server/src/main/java/com/zt/plat/module/system/service/sync/SyncIWorkUserChangeServiceImpl.java @@ -0,0 +1,34 @@ +package com.zt.plat.module.system.service.sync; + +import com.zt.plat.module.system.controller.admin.integration.iwork.vo.IWorkFullSyncReqVO; +import com.zt.plat.module.system.controller.admin.integration.iwork.vo.IWorkFullSyncRespVO; +import com.zt.plat.module.system.service.integration.iwork.IWorkSyncService; +import jakarta.annotation.Resource; +import org.springframework.stereotype.Service; + +import java.time.LocalDate; +import java.time.ZoneId; +import java.time.format.DateTimeFormatter; + +@Service +public class SyncIWorkUserChangeServiceImpl implements SyncIWorkUserChangeService { + + @Resource + private IWorkSyncService iWorkSyncService; + + @Override + public int process() { + IWorkFullSyncReqVO reqVO = new IWorkFullSyncReqVO(); + reqVO.setPageSize(10); + // 设置修改日期的查询条件为当日0时起 + ZoneId zone = ZoneId.of("Asia/Shanghai"); + String startOfToday = LocalDate.now(zone) + .atStartOfDay(zone) + .format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")); + reqVO.setModified(startOfToday); + IWorkFullSyncRespVO respVO = iWorkSyncService.fullSyncUsers(reqVO); + if(respVO!=null && respVO.getProcessedPages()!=null && respVO.getPageSize()!=null) + return respVO.getProcessedPages() * respVO.getPageSize(); + return 0; + } +}