diff --git a/src/main/ipc/validation-handler.ts b/src/main/ipc/validation-handler.ts index 1e2bcca..6db04b5 100644 --- a/src/main/ipc/validation-handler.ts +++ b/src/main/ipc/validation-handler.ts @@ -162,37 +162,52 @@ async function getSourceNumbersFromInputs( // Column name: 生产订单号 (SourceNumber) if (productionIds.length > 0) { const contractTableName = getTableName('productionContractData_26年压力表合同数据') + const batchSize = 2000 if (isSqlServer) { const sql = require('mssql') - const placeholders = productionIds.map((_, idx) => `@p${idx}`).join(',') - const params: Record = {} + const allOrderNumbers: string[] = [] - productionIds.forEach((id, idx) => { - params[`p${idx}`] = { value: id, type: sql.NVarChar } - }) + for (let i = 0; i < productionIds.length; i += batchSize) { + const batch = productionIds.slice(i, i + batchSize) + const placeholders = batch.map((_, idx) => `@p${idx}`).join(',') + const params: Record = {} - const contractSql = ` - SELECT DISTINCT 生产订单号 - FROM ${contractTableName} - WHERE 总排号 IN (${placeholders}) - ` - const contractResult = await (dbService as SqlServerService).queryWithParams( - contractSql, - params - ) - const dbOrderNumbers = contractResult.rows.map((row) => row.生产订单号 as string) - orderNumbers.push(...dbOrderNumbers) + batch.forEach((id, idx) => { + params[`p${idx}`] = { value: id, type: sql.NVarChar } + }) + + const contractSql = ` + SELECT DISTINCT 生产订单号 + FROM ${contractTableName} + WHERE 总排号 IN (${placeholders}) + ` + const contractResult = await (dbService as SqlServerService).queryWithParams( + contractSql, + params + ) + const dbOrderNumbers = contractResult.rows.map((row) => row.生产订单号 as string) + allOrderNumbers.push(...dbOrderNumbers) + } + + orderNumbers.push(...allOrderNumbers) } else { - const placeholders = productionIds.map(() => '?').join(',') - const contractSql = ` - SELECT DISTINCT 生产订单号 - FROM ${contractTableName} - WHERE 总排号 IN (${placeholders}) - ` - const contractResult = await (dbService as MySqlService).query(contractSql, productionIds) - const dbOrderNumbers = contractResult.rows.map((row) => row.生产订单号 as string) - orderNumbers.push(...dbOrderNumbers) + const allOrderNumbers: string[] = [] + + for (let i = 0; i < productionIds.length; i += batchSize) { + const batch = productionIds.slice(i, i + batchSize) + const placeholders = batch.map(() => '?').join(',') + const contractSql = ` + SELECT DISTINCT 生产订单号 + FROM ${contractTableName} + WHERE 总排号 IN (${placeholders}) + ` + const contractResult = await (dbService as MySqlService).query(contractSql, batch) + const dbOrderNumbers = contractResult.rows.map((row) => row.生产订单号 as string) + allOrderNumbers.push(...dbOrderNumbers) + } + + orderNumbers.push(...allOrderNumbers) } } diff --git a/src/main/services/config/config-manager.ts b/src/main/services/config/config-manager.ts index 71b8080..a52888e 100644 --- a/src/main/services/config/config-manager.ts +++ b/src/main/services/config/config-manager.ts @@ -313,7 +313,7 @@ export class ConfigManager { // Order number parsing table configuration lines.push('# 订单号解析表配置') lines.push('# 表名:包含 productionID 和 生产订单号 映射关系的表') - lines.push(`DB_TABLE_NAME=productionContractData_26 年压力表合同数据`) + lines.push(`DB_TABLE_NAME=productionContractData_26年压力表合同数据`) lines.push('# 字段名:总排号 (对应 productionID)') lines.push(`DB_FIELD_PRODUCTION_ID=总排号`) lines.push('# 字段名:生产订单号 (对应生产订单号)') diff --git a/src/main/services/database/discrete-material-plan-dao.ts b/src/main/services/database/discrete-material-plan-dao.ts index 6eb31ea..a093a8b 100644 --- a/src/main/services/database/discrete-material-plan-dao.ts +++ b/src/main/services/database/discrete-material-plan-dao.ts @@ -208,7 +208,7 @@ export class DiscreteMaterialPlanDAO { const dbService = await this.getDatabaseService() const tableName = this.getTableName() const isSqlServer = dbService.type === 'sqlserver' - const batchSize = 2000 + const batchSize = 1500 const allResults: any[] = [] for (let i = 0; i < sourceNumbers.length; i += batchSize) { @@ -250,7 +250,7 @@ export class DiscreteMaterialPlanDAO { const dbService = await this.getDatabaseService() const tableName = this.getTableName() const isSqlServer = dbService.type === 'sqlserver' - const batchSize = 2000 + const batchSize = 1500 const allResults: any[] = [] for (let i = 0; i < sourceNumbers.length; i += batchSize) { @@ -365,16 +365,24 @@ export class DiscreteMaterialPlanDAO { const dbService = await this.getDatabaseService() const tableName = this.getTableName() const isSqlServer = dbService.type === 'sqlserver' - const placeholders = this.buildPlaceholders(planNumbers.length, isSqlServer) + const batchSize = 1500 + const allResults: any[] = [] - const sqlString = ` - SELECT * - FROM ${tableName} - WHERE PlanNumber IN (${placeholders}) - ` + for (let i = 0; i < planNumbers.length; i += batchSize) { + const batch = planNumbers.slice(i, i + batchSize) + const placeholders = this.buildPlaceholders(batch.length, isSqlServer) - const result = await dbService.query(sqlString, planNumbers) - return result.rows + const sqlString = ` + SELECT * + FROM ${tableName} + WHERE PlanNumber IN (${placeholders}) + ` + + const result = await dbService.query(sqlString, batch) + allResults.push(...result.rows) + } + + return allResults } catch (error) { log.error('Query by plan numbers error', { error: error instanceof Error ? error.message : String(error) @@ -703,17 +711,25 @@ export class DiscreteMaterialPlanDAO { const isSqlServer = dbService.type === 'sqlserver' if (sourceNumbers && sourceNumbers.length > 0) { - const placeholders = this.buildPlaceholders(sourceNumbers.length, isSqlServer) + const batchSize = 1500 + const allNames: string[] = [] - const sqlString = ` - SELECT DISTINCT MaterialName - FROM ${tableName} - WHERE SourceNumber IN (${placeholders}) - AND MaterialName IS NOT NULL - ` + for (let i = 0; i < sourceNumbers.length; i += batchSize) { + const batch = sourceNumbers.slice(i, i + batchSize) + const placeholders = this.buildPlaceholders(batch.length, isSqlServer) - const result = await dbService.query(sqlString, sourceNumbers) - return result.rows.map((row) => row.MaterialName as string).filter(Boolean) + const sqlString = ` + SELECT DISTINCT MaterialName + FROM ${tableName} + WHERE SourceNumber IN (${placeholders}) + AND MaterialName IS NOT NULL + ` + + const result = await dbService.query(sqlString, batch) + allNames.push(...result.rows.map((row) => row.MaterialName as string).filter(Boolean)) + } + + return allNames } else { const sqlString = ` SELECT DISTINCT MaterialName