This commit is contained in:
Marsway 2026-03-27 15:40:01 +08:00
parent a9114c6a45
commit c5f657d641
2 changed files with 38 additions and 10 deletions

View File

@ -246,9 +246,10 @@ class DidiClient(BaseClient):
member_id: str | None,
employee_number: str | None,
legal_entity_id: str,
nickname: str | None = None,
) -> None:
"""
员工修改更新员工所在公司主体legal_entity_id
员工修改更新员工所在公司主体legal_entity_id/昵称nickname
POST /river/Member/edit
"""
if not member_id and not employee_number:
@ -258,7 +259,11 @@ class DidiClient(BaseClient):
token = self._get_access_token()
ts = int(time.time())
data_str = self.dumps_data_for_sign({"legal_entity_id": legal_entity_id})
data_obj: dict[str, Any] = {"legal_entity_id": legal_entity_id}
nickname_v = str(nickname or "").strip()
if nickname_v:
data_obj["nickname"] = nickname_v
data_str = self.dumps_data_for_sign(data_obj)
body: dict[str, Any] = {
"client_id": self.client_id,
"access_token": token,

View File

@ -175,10 +175,10 @@ class SyncOAToDidiExportFormJob(BaseJob):
class SyncOAToDidiLegalEntitySyncJob(BaseJob):
"""
OA 无流程表单导出中读取工号/所属公司并同步到滴滴
OA 无流程表单导出中读取工号/所属公司/受益部门名称并同步到滴滴
- 公司主体GET /river/LegalEntity/getkeyword=namename 完全相等优先
- 员工查询GET /river/Member/detailemployee_number=工号
- 员工更新POST /river/Member/edit更新 legal_entity_id
- 员工更新POST /river/Member/edit更新 legal_entity_id + nickname
public_cfg:
- oa_base_url: "https://oa.example.com:8090"
@ -260,6 +260,7 @@ class SyncOAToDidiLegalEntitySyncJob(BaseJob):
emp_field: str | None = None
company_field: str | None = None
benefit_dept_field: str | None = None
sync_field: str | None = None
for f in fields:
if not isinstance(f, dict):
@ -270,10 +271,12 @@ class SyncOAToDidiLegalEntitySyncJob(BaseJob):
emp_field = name
if display == "所属公司" and name:
company_field = name
if display == "受益部门名称" and name:
benefit_dept_field = name
if display == "是否同步滴滴" and name:
sync_field = name
if not emp_field or not company_field:
raise RuntimeError("OA export invalid: cannot locate fields for 工号/所属公司 in definition.fields")
if not emp_field or not company_field or not benefit_dept_field:
raise RuntimeError("OA export invalid: cannot locate fields for 工号/所属公司/受益部门名称 in definition.fields")
rows = form.get("data") or []
if not isinstance(rows, list):
@ -311,12 +314,16 @@ class SyncOAToDidiLegalEntitySyncJob(BaseJob):
emp_obj = master.get(emp_field) or {}
comp_obj = master.get(company_field) or {}
benefit_dept_obj = master.get(benefit_dept_field) or {}
emp_no = ""
comp_name = ""
benefit_dept_name = ""
if isinstance(emp_obj, dict):
emp_no = str(emp_obj.get("value") or emp_obj.get("showValue") or "").strip()
if isinstance(comp_obj, dict):
comp_name = str(comp_obj.get("value") or comp_obj.get("showValue") or "").strip()
if isinstance(benefit_dept_obj, dict):
benefit_dept_name = str(benefit_dept_obj.get("value") or benefit_dept_obj.get("showValue") or "").strip()
if not emp_no or not comp_name:
skipped += 1
@ -336,7 +343,7 @@ class SyncOAToDidiLegalEntitySyncJob(BaseJob):
logger.warning("跳过:是否同步滴滴=N employee_number=%s company_name=%s", emp_no, comp_name)
continue
logger.info("正在处理:工号=%s 所属公司=%s", emp_no, comp_name)
logger.info("正在处理:工号=%s 所属公司=%s 受益部门名称=%s", emp_no, comp_name, benefit_dept_name)
# 公司主体匹配(进程内缓存)
legal_entity_id = cache_legal_entity.get(comp_name)
@ -398,11 +405,27 @@ class SyncOAToDidiLegalEntitySyncJob(BaseJob):
# 员工更新(按文档要求:连续修改间隔 >=150ms
try:
logger.info("正在更新员工公司主体member_id=%s legal_entity_id=%s", member_id, legal_entity_id)
didi.edit_member_legal_entity(company_id=company_id, member_id=member_id, employee_number=None, legal_entity_id=legal_entity_id)
logger.info(
"正在更新员工公司主体与昵称member_id=%s legal_entity_id=%s nickname=%s",
member_id,
legal_entity_id,
benefit_dept_name,
)
didi.edit_member_legal_entity(
company_id=company_id,
member_id=member_id,
employee_number=None,
legal_entity_id=legal_entity_id,
nickname=benefit_dept_name or None,
)
updated += 1
time.sleep(0.15)
logger.info("同步成功employee_number=%s legal_entity_id=%s", emp_no, legal_entity_id)
logger.info(
"同步成功employee_number=%s legal_entity_id=%s nickname=%s",
emp_no,
legal_entity_id,
benefit_dept_name,
)
except Exception as e: # noqa: BLE001
skipped += 1
msg = f"Member.edit failed employee_number={emp_no!r} member_id={member_id!r} err={e!r}"