ソースを参照

feat(personnel-sync): 员工编号字段数据源由 job_number 改为 userid

- toYidaFormData: fieldJobNumber 写入 userid (钉钉唯一 ID, 必有);
  fieldJobNumber2 保留 job_number 写入逻辑, 两字段语义解耦
- PersonnelSyncConf / application-{dev,prod}.yml 注释同步
- 生产表 FORM-CCEEE... 本地 prod profile 已跑全量修复:
  首跑 fetched=668 created=4 updated=659 markedInactive=7 failed=0
  二跑 全 0 收敛 (幂等验证通过)
malk 1 ヶ月 前
コミット
5e0b76a1b2

+ 1 - 1
mjava-akdsbeisen/src/main/java/com/malk/server/personnel/PersonnelSyncConf.java

@@ -18,7 +18,7 @@ public class PersonnelSyncConf {
     // 字段 ID 集合 (测试版/生产版按环境切换)
     private String fieldEmployee;        // 人员 EmployeeField <- userid
     private String fieldName;            // 员工姓名 TextField <- name (目标表 READONLY, 强写覆盖)
-    private String fieldJobNumber;       // 员工编号 TextField <- job_number
+    private String fieldJobNumber;       // 员工编号 TextField <- userid (钉钉唯一 ID)
     private String fieldJobNumber2;      // 员工工号 TextField <- job_number (目标表 READONLY, 强写覆盖)
     private String fieldDepartment;      // 员工部门 DepartmentSelectField <- dept_id_list 排序后首个
     private String fieldHiredDate;       // 入职时间 DateField <- hired_date

+ 7 - 5
mjava-akdsbeisen/src/main/java/com/malk/service/personnel/impl/PersonnelSyncServiceImpl.java

@@ -313,12 +313,14 @@ public class PersonnelSyncServiceImpl implements PersonnelSyncService {
             formData.put(conf.getFieldName(), String.valueOf(name).trim());
         }
 
-        // 员工编号 / 员工工号 <- job_number (员工工号在目标表 READONLY, 按需求强写覆盖)
+        // 员工编号 <- userid (钉钉用户唯一 ID, 与人员 EmployeeField 同源, 但写入 TextField 便于跨模块按字符串引用)
+        if (notBlank(conf.getFieldJobNumber())) {
+            formData.put(conf.getFieldJobNumber(), userid);
+        }
+        // 员工工号 <- job_number (目标表 READONLY, 按需求强写覆盖; 空则跳过)
         Object jobNumber = ding.get("job_number");
-        if (jobNumber != null && notBlank(String.valueOf(jobNumber))) {
-            String jn = String.valueOf(jobNumber).trim();
-            if (notBlank(conf.getFieldJobNumber())) formData.put(conf.getFieldJobNumber(), jn);
-            if (notBlank(conf.getFieldJobNumber2())) formData.put(conf.getFieldJobNumber2(), jn);
+        if (notBlank(conf.getFieldJobNumber2()) && jobNumber != null && notBlank(String.valueOf(jobNumber))) {
+            formData.put(conf.getFieldJobNumber2(), String.valueOf(jobNumber).trim());
         }
 
         // 员工部门 <- dept_id_list 稳定排序后取首个 (钉钉返回顺序不固定, 避免 diff 抖动)

+ 1 - 1
mjava-akdsbeisen/src/main/resources/application-dev.yml

@@ -81,7 +81,7 @@ personnel-sync:
   # 字段 ID (与生产人员档案表同结构)
   fieldEmployee: "employeeField_mkow4ydp"          # 人员 <- userid
   fieldName: "textField_mkox0j8v"                  # 员工姓名 <- name (READONLY, 强写覆盖)
-  fieldJobNumber: "textField_mh8xhqc1"             # 员工编号 <- job_number
+  fieldJobNumber: "textField_mh8xhqc1"             # 员工编号 <- userid (钉钉唯一 ID)
   fieldJobNumber2: "textField_mkox0j8w"            # 员工工号 <- job_number (READONLY, 强写覆盖)
   fieldDepartment: "departmentSelectField_mkow4ydr" # 员工部门 <- dept_id_list 排序后首个
   fieldHiredDate: "dateField_mh8xhqc6"             # 入职时间 <- hired_date

+ 2 - 2
mjava-akdsbeisen/src/main/resources/application-prod.yml

@@ -60,8 +60,8 @@ personnel-sync:
   formUuidPersonnel: "FORM-CCEEE5D461694CBAB5999A8C2926D0C1RXQP"
   fieldEmployee: "employeeField_mkow4ydp"
   fieldName: "textField_mkox0j8v"
-  fieldJobNumber: "textField_mh8xhqc1"
-  fieldJobNumber2: "textField_mkox0j8w"
+  fieldJobNumber: "textField_mh8xhqc1"             # 员工编号 <- userid (钉钉唯一 ID)
+  fieldJobNumber2: "textField_mkox0j8w"            # 员工工号 <- job_number (READONLY, 强写覆盖)
   fieldDepartment: "departmentSelectField_mkow4ydr"
   fieldHiredDate: "dateField_mh8xhqc6"
   fieldBeisenJobNo: "textField_mh8xhqc2"