first commit

This commit is contained in:
2026-09-02 11:44:52 +08:00
commit 0c8fa2653e
309 changed files with 57278 additions and 0 deletions
@@ -0,0 +1,130 @@
#!/usr/bin/env python3
"""
按部门名称搜索并列出所有成员(自动 deptId 解析)
用法:
python contact_dept_members.py --query "技术部"
python contact_dept_members.py --query "产品" --dry-run
"""
import sys
import json
import subprocess
import argparse
from typing import List, Any, Optional
def run_dws(
args: List[str], dry_run: bool = False,
) -> Optional[Any]:
cmd = ['dws'] + args
if dry_run:
print(f"[dry-run] {' '.join(cmd)}")
return None
try:
result = subprocess.run(
cmd, capture_output=True, text=True, timeout=60
)
if result.returncode != 0:
print(f"错误:{result.stderr.strip()}", file=sys.stderr)
return None
return json.loads(result.stdout)
except (subprocess.TimeoutExpired, json.JSONDecodeError,
FileNotFoundError) as e:
print(f"错误:{e}", file=sys.stderr)
return None
def main():
parser = argparse.ArgumentParser(
description='按部门名称搜索并列出所有成员'
)
parser.add_argument(
'--query', required=True, help='部门名称关键词'
)
parser.add_argument('--dry-run', action='store_true')
args = parser.parse_args()
print(f'🔍 搜索部门: {args.query}')
dept_data = run_dws([
'contact', 'dept', 'search',
'--query', args.query, '--format', 'json',
], dry_run=args.dry_run)
if args.dry_run:
run_dws([
'contact', 'dept', 'list-members',
'--ids', '<DEPT_ID>', '--format', 'json',
], dry_run=True)
return
if not dept_data:
print('未找到匹配部门')
sys.exit(1)
if isinstance(dept_data, list):
depts = dept_data
elif isinstance(dept_data, dict):
inner = dept_data.get('result', dept_data)
if isinstance(inner, dict):
depts = inner.get('items', inner.get('depts', []))
elif isinstance(inner, list):
depts = inner
else:
depts = []
else:
depts = []
if not depts:
print('未找到匹配部门')
sys.exit(1)
for dept in depts:
dept_id = dept.get('id') or dept.get('deptId')
dept_name = dept.get('name') or dept.get('deptName', '未知')
if not dept_id:
continue
print(f"\n📂 {dept_name} (ID: {dept_id})")
print('-' * 40)
members_data = run_dws([
'contact', 'dept', 'list-members',
'--ids', str(dept_id), '--format', 'json',
])
if not members_data:
print(' 无法获取成员列表')
continue
if isinstance(members_data, list):
members = members_data
elif isinstance(members_data, dict):
inner = members_data.get('result', members_data)
if isinstance(inner, dict):
members = inner.get('userlist',
inner.get('list', []))
elif isinstance(inner, list):
members = inner
else:
members = []
else:
members = []
if not members:
print(' (暂无成员)')
continue
for m in members:
name = m.get('name') or m.get('userName', '未知')
title = m.get('title') or m.get('position', '')
uid = m.get('userId') or m.get('userid', '')
line = f" 👤 {name}"
if title:
line += f" ({title})"
if uid:
line += f" [ID: {uid}]"
print(line)
print(f"{len(members)}")
if __name__ == '__main__':
main()