feat: 上传目录加入 issueDescription,Quote & Chassis 同时上传到自己目录
This commit is contained in:
@@ -305,21 +305,19 @@ def dsm_upload_downloaded_files(downloaded_files, ticket_id, serial_id, json_mod
|
||||
print(f" DSM 登录失败: {e}", file=sys.stderr)
|
||||
return [{"error": f"DSM 登录失败: {e}"}]
|
||||
|
||||
def _upload_one(f):
|
||||
local_path = f["savedPath"]
|
||||
# 找出其他 issue 的 ID 列表(排除 "Quote & Chassis" issue)
|
||||
other_issue_ids = list({
|
||||
f["issueId"] for f in files_to_upload
|
||||
if f.get("issueId") and "Quote & Chassis" not in (f.get("issueDescription") or "")
|
||||
})
|
||||
|
||||
def _upload_one(local_path, remote_path):
|
||||
filename = os.path.basename(local_path)
|
||||
issue_id = f.get("issueId", "")
|
||||
remote_path = (
|
||||
f"{cfg.dsm_path}/{folder_name}/{issue_id}"
|
||||
if issue_id else
|
||||
f"{cfg.dsm_path}/{folder_name}"
|
||||
)
|
||||
full_remote_path = f"{remote_path}/{filename}"
|
||||
entry = {
|
||||
"file": filename,
|
||||
"ticketId": ticket_id,
|
||||
"serialId": serial_id,
|
||||
"issueId": issue_id,
|
||||
"remotePath": full_remote_path,
|
||||
}
|
||||
try:
|
||||
@@ -336,8 +334,37 @@ def dsm_upload_downloaded_files(downloaded_files, ticket_id, serial_id, json_mod
|
||||
print(f" 上传失败: {filename}: {e}")
|
||||
return entry
|
||||
|
||||
# 构建上传任务列表
|
||||
# 构建 issue_id -> issue 文件夹名 的映射
|
||||
issue_folder_map = {}
|
||||
for f in files_to_upload:
|
||||
oid = f.get("issueId", "")
|
||||
if oid and oid not in issue_folder_map:
|
||||
desc = f.get("issueDescription", "")
|
||||
issue_folder_map[oid] = f"{oid}_{desc}" if desc else oid
|
||||
|
||||
upload_tasks = []
|
||||
for f in files_to_upload:
|
||||
local_path = f["savedPath"]
|
||||
issue_id = f.get("issueId", "")
|
||||
issue_desc = f.get("issueDescription", "")
|
||||
issue_folder = issue_folder_map.get(issue_id, issue_id)
|
||||
if "Quote & Chassis" in (issue_desc or ""):
|
||||
# 上传到自己的目录
|
||||
upload_tasks.append((local_path, f"{cfg.dsm_path}/{folder_name}/{issue_folder}"))
|
||||
# 同时分发到所有其他 issue 目录
|
||||
for oid in other_issue_ids:
|
||||
upload_tasks.append((local_path, f"{cfg.dsm_path}/{folder_name}/{issue_folder_map.get(oid, oid)}"))
|
||||
else:
|
||||
remote_path = (
|
||||
f"{cfg.dsm_path}/{folder_name}/{issue_folder}"
|
||||
if issue_id else
|
||||
f"{cfg.dsm_path}/{folder_name}"
|
||||
)
|
||||
upload_tasks.append((local_path, remote_path))
|
||||
|
||||
with ThreadPoolExecutor(max_workers=cfg.max_workers) as executor:
|
||||
upload_results = list(executor.map(_upload_one, files_to_upload))
|
||||
upload_results = list(executor.map(lambda t: _upload_one(*t), upload_tasks))
|
||||
|
||||
if not json_mode:
|
||||
ok = sum(1 for r in upload_results if r.get("success"))
|
||||
@@ -513,6 +540,8 @@ def _process_issue_item(session, item, list_only, json_mode):
|
||||
f"{cfg.odata_cust}/BO_XSRIssueItemAttachmentFolderCollection",
|
||||
json_mode,
|
||||
)
|
||||
for e in downloaded_entries:
|
||||
e["issueDescription"] = issue_desc
|
||||
|
||||
return issue_entry, downloaded_entries
|
||||
|
||||
|
||||
Reference in New Issue
Block a user