企微用戶部門同步HRS系統

企微用戶導入HR系統流程說明

概述

本文檔詳細說明了WechatUserImportServiceImpl.importWechatUsersToHrs()方法的業務流程和實現邏輯。該方法負責將企業微信用戶數據同步導入到HR管理系統中,包括員工信息、工作信息和任職記錄的創建與更新。

主要功能

  • 數據同步:將企微用戶數據同步到HR系統
  • 員工管理:創建新員工或更新現有員工信息
  • 組織架構:處理員工的部門歸屬和任職關系
  • 數據完整性:確保相關表數據的一致性和完整性

詳細流程

1. 初始化階段

// 查詢所有生效的企微用戶
List<WechatWorkUserEntity> wechatUserList = getActiveWechatUsers();
  • 查詢企微用戶表中deleted = '0'的所有用戶
  • 如果沒有數據,直接返回0
  • 記錄找到的用戶數量

2. 用戶處理循環

對每個企微用戶執行以下處理流程:

2.1 數據驗證
  • 工號驗證:檢查staffCode是否為空
  • 用戶信息提取:獲取useridpositionname等基本信息
2.2 員工存在性判斷

根據工號查詢HR系統中是否已存在該員工:

SELECT * FROM staff_member WHERE staff_code = ?

3. 已存在員工處理流程

當員工已存在時:

3.1 更新企微ID
staffMember.setWechatSourceId(wechatUserId);
3.2 任職記錄處理
  • 查詢任職記錄:檢查是否已有history_type = 'employment'的記錄
  • 添加兼職記錄:如果已有任職記錄,只添加兼職記錄
  • 完整記錄添加:如果沒有任職記錄,添加任職和兼職記錄

4. 新員工處理流程

當員工不存在時:

4.1 創建員工記錄
StaffMemberEntity staffMember = new StaffMemberEntity();
staffMember.setId(IdUtil.getSnowflake().nextId());
staffMember.setStaffName(wechatUser.getName());
staffMember.setStaffCode(wechatUser.getStaffCode());
// ... 其他字段設置

關鍵字段設置:

  • tenantCode:租戶代碼(yishion)
  • sourceSysCode:來源系統(wechat)
  • wechatSourceId:企微用戶ID
  • circulationStatus:流轉狀態(archives)
  • status:員工狀態(10)
4.2 部門信息處理

獲取用戶的部門列表并根據主部門設置處理:

有主部門情況

  • 主部門創建任職記錄(employment
  • 其他部門創建兼職記錄(partTime

無主部門情況

  • 第一個部門創建任職記錄
  • 其他部門創建兼職記錄

5. 工作信息和任職記錄創建

5.1 工作信息表(staff_work_info)
// 檢查是否已存在
String sourceId = userid + "-" + deptId;
// 存在則更新,不存在則創建

關鍵字段:

  • staffId:員工ID
  • position:職位
  • employeeStatus:員工狀態(status_on)
  • sourceOrgId/sourceDeptId:來源組織/部門ID
5.2 任職記錄表(staff_work_history)
// 區分任職類型
String historyType = "employment" | "partTime";

關鍵字段:

  • historyType:記錄類型(employment/partTime)
  • workStatus:工作狀態(status_on)
  • 其他字段與工作信息表類似

6. 事務處理策略

  • 單用戶事務:每個用戶的處理使用獨立事務
  • 異常隔離:單個用戶失敗不影響其他用戶處理
  • 錯誤記錄:失敗時記錄詳細錯誤日志
@Transactional(rollbackFor = Exception.class)
public boolean processWechatUserInTransaction(WechatWorkUserEntity wechatUser) {return processWechatUser(wechatUser);
}

7. 批量更新階段

所有用戶處理完成后,執行批量更新操作:

7.1 組織架構更新
// 更新任職記錄表的組織ID和部門ID
updateWorkHistoryOrgAndDeptIdsInTransaction();
// 更新工作信息表的組織ID和部門ID  
updateWorkInfoOrgAndDeptIdsInTransaction();
7.2 數據修正
// 更新零值組織ID
staffWorkInfoMapper.updateWorkInfoZeroOrgIds();
staffWorkHistoryMapper.updateWorkHistoryZeroOrgIds();
7.3 枚舉更新
// 更新職位枚舉
updateWorkInfoPositionEnumInTransaction();
updateWorkHistoryPositionEnumInTransaction();
7.4 關聯數據更新
// 更新人員身份
staffMemberMapper.updateIdentity();
// 更新組織負責人
organizationMapper.updateOrgLeader();
// 更新部門負責人  
departmentMapper.updateDeptLeader();
// 同步總公司人員企微ID
staffMemberMapper.updateHeadOfficeWechatSourceId();

常量配置

private static final String TENANT_CODE = "yishion";
private static final String SOURCE_SYS_CODE = "wechat";
private static final String WORK_STATUS_ON = "status_on";
private static final String EMPLOYEE_STATUS_ON = "status_on";
private static final String HISTORY_TYPE_EMPLOYMENT = "employment";
private static final String HISTORY_TYPE_PART_TIME = "partTime";
private static final String TIME_ZONE_OFFSET = "UTC+08:00";
private static final String TIME_ZONE_ID = "Asia/Shanghai";
private static final String CREATE_BY = "system";
private static final String CIRCULATION_STATUS = "archives";
private static final Integer STAFF_STATUS = 10;

核心表結構

員工表(staff_member)

  • id:員工ID(雪花算法)
  • staff_name:員工姓名
  • staff_code:工號
  • wechat_source_id:企微用戶ID
  • tenant_code:租戶代碼
  • source_sys_code:來源系統代碼

工作信息表(staff_work_info)

  • id:記錄ID
  • staff_id:員工ID
  • position:職位
  • employee_status:員工狀態
  • source_org_id:來源組織ID
  • source_dept_id:來源部門ID

任職記錄表(staff_work_history)

  • id:記錄ID
  • staff_id:員工ID
  • history_type:記錄類型(employment/partTime)
  • work_status:工作狀態
  • position:職位
  • source_org_id:來源組織ID
  • source_dept_id:來源部門ID

性能優化策略

  1. 分批處理:逐個用戶處理,避免大事務
  2. 異常隔離:單個失敗不影響整體
  3. 批量更新:最后統一執行批量操作
  4. 索引優化:基于工號和企微ID的查詢優化

異常處理

  • 數據驗證:工號為空時跳過處理
  • 容錯機制:記錄錯誤日志但繼續處理
  • 事務回滾:單個用戶處理失敗時回滾該用戶的操作
  • 日志記錄:詳細記錄處理過程和異常信息

監控指標

  • 導入成功數量importCount
  • 處理總數:企微用戶總數
  • 失敗數量:通過日志統計
  • 處理時間:方法執行時間

注意事項

  1. 數據一致性:確保員工、工作信息、任職記錄三表數據一致
  2. 部門處理:正確處理主部門和兼職部門的關系
  3. 企微ID更新:避免重復或錯誤的企微ID關聯
  4. 時區處理:統一使用Asia/Shanghai時區
  5. 租戶隔離:確保數據按租戶正確隔離

相關接口

  • WechatUserImportService.importWechatUsersToHrs():主入口方法
  • WechatUserImportService.executeBatchUpdates():批量更新方法

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/95578.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/95578.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/95578.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

告別傳統SEO!擁抱下一代流量密碼:生成式引擎優化(GEO)實戰指南

前言&#xff1a;為什么你的“最佳實踐”SEO正在失效&#xff1f;你是否發現&#xff0c;即使嚴格遵循了谷歌自2019年以來的所有“最佳實踐”&#xff0c;你的技術博客或產品文檔的流量依舊增長乏力&#xff0c;甚至不升反降&#xff1f;你不是一個人。問題在于&#xff0c;游戲…

week1-[一維數組]傳送

week1-[一維數組]傳送 題目描述 有 nnn 個傳送門&#xff0c;從第 iii 個傳送門進去后會被傳送到第 aia_iai? 個傳送門&#xff0c;進而被傳送到第 aaia_{a_i}aai?? 個傳送門&#xff0c;如此一直下去……小 A 想知道從第 kkk 個傳送門進去后&#xff0c;能不能回到第 kkk 個…

【18】目心智能——目心智能 嵌入式一面 ,校招,面試問答記錄

目心智能——目心智能 嵌入式一面 &#xff0c;校招&#xff0c;面試問答記錄 1 簡單自我介紹2 你做了這么多算法&#xff0c;為什么不找算法的&#xff1f;3 我們主要還是軟件開發&#xff0c;不做結構設計4 模電知識6 CSDN應該附鏈接在簡歷上&#xff0c;稍后發給我&#xff…

C++第二十課:快遞運費計算器 / 黑白配+石頭剪刀布小游戲

快遞運費計算器幫一家快遞站點開發一個快遞運費計算器&#xff0c;快遞站點人員只需要輸入包裹重量和地點編號即可計算出對應的運費。假設快遞費計算規則如下&#xff1a;首重&#xff1a;3公斤 3公斤以內&#xff1a;1.東三省/寧夏/青海/海南&#xff1a;12元&#xff0c;2.新…

網絡安全藍隊常用工具全景與實戰指南

摘要 在現代信息系統的安全防護中&#xff0c;藍隊承擔著防御、檢測、響應和持續改進的核心職責。要實現高效、可持續的防御能力&#xff0c;藍隊需要一整套成熟、可靠的工具集來進行威脅情報收集、日志分析、入侵檢測、漏洞評估、端點防護、網絡流量監控、事件響應與取證等工作…

基于 Flink 的淘寶實時數據管道設計:商品詳情流式處理與異構存儲

引言在電子商務領域&#xff0c;實時數據處理能力已成為企業核心競爭力的重要組成部分。淘寶作為中國領先的電商平臺&#xff0c;每天產生海量的商品數據&#xff0c;這些數據需要被實時處理、分析并分發到各種存儲系統中&#xff0c;以支持搜索、推薦、庫存管理等關鍵業務。本…

面試題:【多線程問題,三個線程A,B,C;C線程依賴B線程的結果執行,怎么控制】

在 Java 中&#xff0c;若需要控制線程間的依賴關系&#xff08;如 C 線程依賴 B 線程的結果&#xff09;&#xff0c;可以通過以下幾種方式實現&#xff1a; 方案 1&#xff1a;使用 CountDownLatch CountDownLatch 是一個同步工具類&#xff0c;允許一個或多個線程等待其他線…

React useMemo 深度指南:原理、誤區、實戰與 2025 最佳實踐

把“為什么用、怎么用、用錯了怎么辦”一次講透&#xff0c;附 React 19 自動優化前瞻。一、useMemo 是什么&#xff1f; 一句話&#xff1a; useMemo 記住&#xff08;緩存&#xff09;昂貴計算結果&#xff0c;只在依賴變化時重新計算。 const memoValue useMemo(() > {…

[ HTML 前端 ] 語法介紹和HBuilderX安裝

目錄 一. HTML 1.概述 2. 安裝前端開發工具 (1)HBuilderX下載 (2)創建html項目和使用 3. HTML基礎 1.標簽 (1).標簽定義: (2).標簽結構: (3).標簽屬性: 2.常用標簽: 3.特殊符號: 4.表格(table) (1)基本標簽: (2)基本結構: (3)表格屬性: 5.表單(form) (1). 表單概述…

Spring Cloud系列—Alibaba Sentinel熔斷降級

上篇文章&#xff1a; Spring Cloud系列— Alibaba Sentinel限流https://blog.csdn.net/sniper_fandc/article/details/149944260?fromshareblogdetail&sharetypeblogdetail&sharerId149944260&sharereferPC&sharesourcesniper_fandc&sharefromfrom_link…

Spring Boot 使用 @NotBlank + @Validated 優雅校驗參數

在日常開發中&#xff0c;我們常用 if (isBlank(...)) 來判斷參數是否為空&#xff0c;但這種方式不僅繁瑣&#xff0c;而且容易遺漏。 Spring 生態中推薦使用 JSR-303 校驗注解&#xff08;NotBlank、NotNull 等&#xff09;配合 Validated 實現自動校驗&#xff0c;大幅減少手…

網絡安全(Java語言)簡單腳本匯總 (一)

文章目錄敏感信息探測腳本源代碼思路URL批量存活探測器源代碼思路端口掃描器源代碼思路 敏感信息探測腳本 源代碼/*** description 該腳本通過分析HTTP響應頭&#xff0c;來檢測可能暴露服務器信息的安全隱患*/import java.io.IOException; import java.net.HttpURLConnection;…

buuctf_NSBlogin_http_upload(極客2019+ACTF2020新生賽)

今天做三1個web 題目&#xff1a;NSB_login用戶名有admin&#xff0c;看源碼&#xff1a;I like rockyou&#xff01;今天學習到&#xff0c;kali里面有密碼爆破的文件叫rockyou.txt&#xff08;/usr/share/wordlists/&#xff09;&#xff08;沒kali也可以去https://gitcode.c…

IDEA如何引用brew安裝的openjdk

因為 brew 安裝的 openjdk@21 目錄結構和 IDEA 期望的 JDK 目錄不一樣。所以默認brew安裝的jdk,在IDEA中是無法識別到的。 一、創建軟連接 sudo mkdir -p /Library/Java/JavaVirtualMachines sudo ln -sfn /usr/local/opt/openjdk@21/libexec/openjdk.jdk /Library/Java/Java…

【Unity3D】Spine黑線(預乘問題)、貼圖邊緣裁剪問題

一、黑線問題 Spine正確的導出和Unity導入設置&#xff08;解決黑邊/彩條帶問題&#xff09;_spine導出的圖片有黑邊-CSDN博客 采用&#xff08;已解決問題&#xff09; Texture 打包器啟用 Premultiply alpha ,禁用Bleed Unity Texture 設置中禁用 sRGB (Color Texture) 和…

嵌入式系統學習Day18(文件編程-系統調用文件IO)

- open#include <sys/types.h> #include <sys/stat.h> #include <fcntl.h>int open(const char *pathname, int flags); int open(const char *pathname, int flags, mode_t mode); 功能:打開文件 參數:pathname --- 文件名 flags 必選:O_RDONLYO_WRONLY…

Vue淺學

概述在最近的學習任務中了解了 Vue&#xff0c;并對其產生了濃厚的興趣&#xff0c;現在分享一下我的學習所得關鍵字其一statestate 是 Vuex 存儲中的“狀態對象”&#xff0c;用于存儲整個應用的共享數據&#xff08;如用戶信息、令牌、權限等&#xff09;&#xff0c;比如&am…

機器翻譯:Hugging Face庫詳解

文章目錄一、Hugging Face概述1.1 Hugging Face介紹1.2 核心理念&#xff1a;模型即服務&#xff0c;但以開源形式二、核心架構2.1 Transformers庫&#xff1a;模型交互的統一接口2.2 Datasets庫&#xff1a;高效的數據處理引擎2.3 Tokenizers庫&#xff1a;文本與模型的“翻譯…

服務器安裝gielab社區版

第一步&#xff1a;安裝Gitlab 1,使用的是CentOs鏡像(服務器最低配置為4核8g內存才行要不然帶不動) 登錄目標實例。 2,執行如下命令&#xff0c;安裝所需依賴。 1 sudo yum install -y curl policycoreutils-python openssh-server 3,執行如下命令&#xff0c;啟動SSH服務…

C#報錯:System.NullReferenceException:“未將對象引用設置到對象的實例。”

C#使用自定義的類創建數組時&#xff0c;使用時報錯&#xff0c;報錯內容如下圖&#xff1a;原因&#xff1a;C#中的數組是引用類型。當聲明自定義類數組時&#xff0c;數組本身會被創建&#xff0c;但其元素&#xff08;即自定義類的實例&#xff09;默認未被實例化&#xff0…