update
This commit is contained in:
parent
a9114c6a45
commit
c5f657d641
|
|
@ -246,9 +246,10 @@ class DidiClient(BaseClient):
|
||||||
member_id: str | None,
|
member_id: str | None,
|
||||||
employee_number: str | None,
|
employee_number: str | None,
|
||||||
legal_entity_id: str,
|
legal_entity_id: str,
|
||||||
|
nickname: str | None = None,
|
||||||
) -> None:
|
) -> None:
|
||||||
"""
|
"""
|
||||||
员工修改:更新员工所在公司主体(legal_entity_id)
|
员工修改:更新员工所在公司主体(legal_entity_id)/昵称(nickname)
|
||||||
POST /river/Member/edit
|
POST /river/Member/edit
|
||||||
"""
|
"""
|
||||||
if not member_id and not employee_number:
|
if not member_id and not employee_number:
|
||||||
|
|
@ -258,7 +259,11 @@ class DidiClient(BaseClient):
|
||||||
|
|
||||||
token = self._get_access_token()
|
token = self._get_access_token()
|
||||||
ts = int(time.time())
|
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] = {
|
body: dict[str, Any] = {
|
||||||
"client_id": self.client_id,
|
"client_id": self.client_id,
|
||||||
"access_token": token,
|
"access_token": token,
|
||||||
|
|
|
||||||
|
|
@ -175,10 +175,10 @@ class SyncOAToDidiExportFormJob(BaseJob):
|
||||||
|
|
||||||
class SyncOAToDidiLegalEntitySyncJob(BaseJob):
|
class SyncOAToDidiLegalEntitySyncJob(BaseJob):
|
||||||
"""
|
"""
|
||||||
从 OA 无流程表单导出中读取“工号/所属公司”,并同步到滴滴:
|
从 OA 无流程表单导出中读取“工号/所属公司/受益部门名称”,并同步到滴滴:
|
||||||
- 公司主体:GET /river/LegalEntity/get(keyword=name),name 完全相等优先
|
- 公司主体:GET /river/LegalEntity/get(keyword=name),name 完全相等优先
|
||||||
- 员工查询:GET /river/Member/detail(employee_number=工号)
|
- 员工查询:GET /river/Member/detail(employee_number=工号)
|
||||||
- 员工更新:POST /river/Member/edit(更新 legal_entity_id)
|
- 员工更新:POST /river/Member/edit(更新 legal_entity_id + nickname)
|
||||||
|
|
||||||
public_cfg:
|
public_cfg:
|
||||||
- oa_base_url: "https://oa.example.com:8090"
|
- oa_base_url: "https://oa.example.com:8090"
|
||||||
|
|
@ -260,6 +260,7 @@ class SyncOAToDidiLegalEntitySyncJob(BaseJob):
|
||||||
|
|
||||||
emp_field: str | None = None
|
emp_field: str | None = None
|
||||||
company_field: str | None = None
|
company_field: str | None = None
|
||||||
|
benefit_dept_field: str | None = None
|
||||||
sync_field: str | None = None
|
sync_field: str | None = None
|
||||||
for f in fields:
|
for f in fields:
|
||||||
if not isinstance(f, dict):
|
if not isinstance(f, dict):
|
||||||
|
|
@ -270,10 +271,12 @@ class SyncOAToDidiLegalEntitySyncJob(BaseJob):
|
||||||
emp_field = name
|
emp_field = name
|
||||||
if display == "所属公司" and name:
|
if display == "所属公司" and name:
|
||||||
company_field = name
|
company_field = name
|
||||||
|
if display == "受益部门名称" and name:
|
||||||
|
benefit_dept_field = name
|
||||||
if display == "是否同步滴滴" and name:
|
if display == "是否同步滴滴" and name:
|
||||||
sync_field = name
|
sync_field = name
|
||||||
if not emp_field or not company_field:
|
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")
|
raise RuntimeError("OA export invalid: cannot locate fields for 工号/所属公司/受益部门名称 in definition.fields")
|
||||||
|
|
||||||
rows = form.get("data") or []
|
rows = form.get("data") or []
|
||||||
if not isinstance(rows, list):
|
if not isinstance(rows, list):
|
||||||
|
|
@ -311,12 +314,16 @@ class SyncOAToDidiLegalEntitySyncJob(BaseJob):
|
||||||
|
|
||||||
emp_obj = master.get(emp_field) or {}
|
emp_obj = master.get(emp_field) or {}
|
||||||
comp_obj = master.get(company_field) or {}
|
comp_obj = master.get(company_field) or {}
|
||||||
|
benefit_dept_obj = master.get(benefit_dept_field) or {}
|
||||||
emp_no = ""
|
emp_no = ""
|
||||||
comp_name = ""
|
comp_name = ""
|
||||||
|
benefit_dept_name = ""
|
||||||
if isinstance(emp_obj, dict):
|
if isinstance(emp_obj, dict):
|
||||||
emp_no = str(emp_obj.get("value") or emp_obj.get("showValue") or "").strip()
|
emp_no = str(emp_obj.get("value") or emp_obj.get("showValue") or "").strip()
|
||||||
if isinstance(comp_obj, dict):
|
if isinstance(comp_obj, dict):
|
||||||
comp_name = str(comp_obj.get("value") or comp_obj.get("showValue") or "").strip()
|
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:
|
if not emp_no or not comp_name:
|
||||||
skipped += 1
|
skipped += 1
|
||||||
|
|
@ -336,7 +343,7 @@ class SyncOAToDidiLegalEntitySyncJob(BaseJob):
|
||||||
logger.warning("跳过:是否同步滴滴=N employee_number=%s company_name=%s", emp_no, comp_name)
|
logger.warning("跳过:是否同步滴滴=N employee_number=%s company_name=%s", emp_no, comp_name)
|
||||||
continue
|
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)
|
legal_entity_id = cache_legal_entity.get(comp_name)
|
||||||
|
|
@ -398,11 +405,27 @@ class SyncOAToDidiLegalEntitySyncJob(BaseJob):
|
||||||
|
|
||||||
# 员工更新(按文档要求:连续修改间隔 >=150ms)
|
# 员工更新(按文档要求:连续修改间隔 >=150ms)
|
||||||
try:
|
try:
|
||||||
logger.info("正在更新员工公司主体:member_id=%s legal_entity_id=%s", member_id, legal_entity_id)
|
logger.info(
|
||||||
didi.edit_member_legal_entity(company_id=company_id, member_id=member_id, employee_number=None, legal_entity_id=legal_entity_id)
|
"正在更新员工公司主体与昵称: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
|
updated += 1
|
||||||
time.sleep(0.15)
|
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
|
except Exception as e: # noqa: BLE001
|
||||||
skipped += 1
|
skipped += 1
|
||||||
msg = f"Member.edit failed employee_number={emp_no!r} member_id={member_id!r} err={e!r}"
|
msg = f"Member.edit failed employee_number={emp_no!r} member_id={member_id!r} err={e!r}"
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue