update
This commit is contained in:
parent
a9114c6a45
commit
c5f657d641
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -175,10 +175,10 @@ class SyncOAToDidiExportFormJob(BaseJob):
|
|||
|
||||
class SyncOAToDidiLegalEntitySyncJob(BaseJob):
|
||||
"""
|
||||
从 OA 无流程表单导出中读取“工号/所属公司”,并同步到滴滴:
|
||||
从 OA 无流程表单导出中读取“工号/所属公司/受益部门名称”,并同步到滴滴:
|
||||
- 公司主体:GET /river/LegalEntity/get(keyword=name),name 完全相等优先
|
||||
- 员工查询:GET /river/Member/detail(employee_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}"
|
||||
|
|
|
|||
Loading…
Reference in New Issue