feat(cleaner): add configurable row number protection toggle

This commit is contained in:
Misaka_Company
2026-08-04 09:43:31 +08:00
parent 98567d69f0
commit 056bf3908c
10 changed files with 125 additions and 26 deletions

View File

@@ -169,6 +169,7 @@ export interface ShouldDeleteParams {
pendingQty: string
materialCode: string
deleteSet: Set<string>
enableRowProtection: boolean
}
function clampNumber(
@@ -244,13 +245,13 @@ export class CleanerService {
* Determine if a material should be deleted
*/
shouldDeleteMaterial(params: ShouldDeleteParams): boolean {
const { rowNumber, pendingQty, materialCode, deleteSet } = params
const { rowNumber, pendingQty, materialCode, deleteSet, enableRowProtection } = params
if (!deleteSet.has(materialCode)) {
return false
}
if (rowNumber >= 2000 && rowNumber < 8000) {
if (enableRowProtection && rowNumber >= 2000 && rowNumber < 8000) {
return false
}
@@ -262,12 +263,12 @@ export class CleanerService {
}
getSkipReason(params: ShouldDeleteParams): string {
const { rowNumber, pendingQty, materialCode, deleteSet } = params
const { rowNumber, pendingQty, materialCode, deleteSet, enableRowProtection } = params
if (!deleteSet.has(materialCode)) {
return '物料不在删除清单中'
}
if (rowNumber >= 2000 && rowNumber < 8000) {
if (enableRowProtection && rowNumber >= 2000 && rowNumber < 8000) {
return '行号在 2000-7999 范围内(受保护)'
}
if (pendingQty && pendingQty.trim() !== '') {
@@ -317,6 +318,7 @@ export class CleanerService {
input.sessionRefreshOrderThreshold && input.sessionRefreshOrderThreshold > 0
? Math.trunc(input.sessionRefreshOrderThreshold)
: DEFAULT_SESSION_REFRESH_ORDER_THRESHOLD
const enableRowProtection = input.enableRowProtection ?? true
log.info('Starting cleaner', {
totalOrders,
@@ -446,6 +448,7 @@ export class CleanerService {
detailPage: openedDetailPage,
deleteSet,
dryRun,
enableRowProtection,
expectedOrderNumber: orderNumber,
progressState,
onProgress: input.onProgress
@@ -567,6 +570,7 @@ export class CleanerService {
),
deleteSet,
dryRun,
enableRowProtection,
onProgress: input.onProgress
})
@@ -1149,6 +1153,7 @@ export class CleanerService {
detailPage: Page
deleteSet: Set<string>
dryRun: boolean
enableRowProtection: boolean
progressState: ProgressState
expectedOrderNumber?: string
onProgress?: (
@@ -1157,7 +1162,7 @@ export class CleanerService {
extra?: Partial<import('../../types/cleaner.types').CleanerProgress>
) => void
}): Promise<OrderCleanDetail> {
const { detailPage, deleteSet, dryRun, progressState, expectedOrderNumber, onProgress } = params
const { detailPage, deleteSet, dryRun, enableRowProtection, progressState, expectedOrderNumber, onProgress } = params
const processStartTime = Date.now()
log.info('[ORDER_START] 开始处理订单', {
@@ -1482,7 +1487,8 @@ export class CleanerService {
rowNumber: rowNumInt,
pendingQty,
materialCode,
deleteSet
deleteSet,
enableRowProtection
})
if (shouldDelete && !dryRun) {
@@ -1559,7 +1565,8 @@ export class CleanerService {
rowNumber: rowNumInt,
pendingQty,
materialCode,
deleteSet
deleteSet,
enableRowProtection
})
log.debug('[物料跳过] 物料不满足删除条件', {
orderNumber,
@@ -2097,13 +2104,14 @@ export class CleanerService {
failedDetails: OrderCleanDetail[]
deleteSet: Set<string>
dryRun: boolean
enableRowProtection: boolean
onProgress?: (
message: string,
progress?: number,
extra?: Partial<import('../../types/cleaner.types').CleanerProgress>
) => void
}): Promise<RetryResult> {
const { workFrame, popupPage, failedDetails, deleteSet, dryRun, onProgress } = params
const { workFrame, popupPage, failedDetails, deleteSet, dryRun, enableRowProtection, onProgress } = params
const result: RetryResult = {
retriedOrders: 0,
@@ -2204,6 +2212,7 @@ export class CleanerService {
detailPage,
deleteSet,
dryRun,
enableRowProtection,
expectedOrderNumber: orderNumber,
progressState: {
ordersStarted: detailIndex,