This commit is contained in:
owenchen committed 2026-10-15 13:08:28 +08:00
1 parent ceb3e7beec
commit f6f3735ab3
29 files changed
+8376 -140

No files matched your search

+15 -5
View File
@@ -44,7 +44,12 @@ export interface UploadItem {
finishedAt: number;
}
/** 并发 3(旧系统 FileUpload 默认 4,移动端蜂窝网络下保守一档) */
/**
* 多文件并发上传(并发 3,旧系统 FileUpload 默认 4,移动端蜂窝网络下保守一档)。
* 并发传同一目录曾触发后端 dms_folder_map 主键 Duplicate entry,根因是编号生成器
* SecurityGeneratorNumberService.GetNo 的非原子「读-改-写」;后端已改为数据库端原子自增,
* 故此处恢复并发、pump() 也不再按 targetPath 串行。
*/
const MAX_PARALLEL = 3;
/** 可中止句柄:uni 的 UploadTask 与 XHR 都满足这个最小面 */
@@ -166,12 +171,17 @@ export const useUploadQueueStore = defineStore(
}
// ===== 队列驱动 =====
/** 补位式调度:不满并发上限就把排队任务逐个点着 */
/**
* 补位式调度:不满并发上限就把排队任务逐个点着。
* 后端编号生成器(GetNo)已改成数据库端原子自增,多文件并发传同一目录不再争抢
* dms_folder_map 主键,故不再按 targetPath 串行,同目录也可并行、充分提速。
*/
function pump(): void {
let busy = items.value.filter(
const busy = items.value.filter(
(item: UploadItem) => item.status === "uploading",
).length;
while (busy < MAX_PARALLEL) {
let free = MAX_PARALLEL - busy;
while (free > 0) {
const next = items.value.find(
(item: UploadItem) => item.status === "queued",
);
@@ -179,7 +189,7 @@ export const useUploadQueueStore = defineStore(
break;
}
runTask(next);
busy += 1;
free -= 1;
}
}