fix: batch_id 컬럼 없을 때 fallback + 트랜잭션 안전 처리
- batch_id 컬럼 존재 여부를 사전 확인 후 INSERT 쿼리 분기 - 트랜잭션 내 try-catch fallback 대신 조건부 컬럼 방식으로 변경 - 배포 DB에 ALTER TABLE 권한 없어도 정상 동작
This commit is contained in:
@@ -1757,31 +1757,32 @@ export const acceptProcess = async (req: AuthenticatedRequest, res: Response) =>
|
||||
});
|
||||
}
|
||||
|
||||
// batch_id 생성 또는 전달받은 값 사용
|
||||
// 프론트에서 batch_id를 전달하면 이어받고, 없으면 새로 생성
|
||||
// batch_id: 컬럼이 있으면 포함, 없으면 제외
|
||||
const batchId = req.body.batch_id || `BATCH-${Date.now()}-${Math.random().toString(36).slice(2, 6)}`;
|
||||
const hasBatchCol = _batchMigrationDone;
|
||||
|
||||
// 분할 행 INSERT (원본 행에서 공정 정보 복사 + batch_id)
|
||||
await ensureBatchIdColumn();
|
||||
const result = await client.query(
|
||||
`INSERT INTO work_order_process (
|
||||
id, wo_id, seq_no, process_code, process_name, is_required, is_fixed_order,
|
||||
// 분할 행 INSERT (batch_id는 컬럼 존재 시에만)
|
||||
const insertCols = `id, wo_id, seq_no, process_code, process_name, is_required, is_fixed_order,
|
||||
standard_time, equipment_code, routing_detail_id,
|
||||
status, input_qty, good_qty, defect_qty, total_production_qty,
|
||||
result_status, accepted_by, accepted_at, started_at,
|
||||
parent_process_id, company_code, writer, batch_id
|
||||
) VALUES (
|
||||
gen_random_uuid()::text, $1, $2, $3, $4, $5, $6, $7, $8, $9,
|
||||
parent_process_id, company_code, writer${hasBatchCol ? ", batch_id" : ""}`;
|
||||
const insertVals = `gen_random_uuid()::text, $1, $2, $3, $4, $5, $6, $7, $8, $9,
|
||||
'in_progress', $10, '0', '0', '0',
|
||||
'draft', $11, NOW()::text, NOW()::text,
|
||||
$12, $13, $11, $14
|
||||
) RETURNING id, input_qty, status, process_name, result_status, accepted_by, batch_id`,
|
||||
[
|
||||
row.wo_id, row.seq_no, row.process_code, row.process_name,
|
||||
row.is_required, row.is_fixed_order, row.standard_time,
|
||||
row.equipment_code, row.routing_detail_id,
|
||||
String(qty), userId, masterId, companyCode, batchId,
|
||||
]
|
||||
$12, $13, $11${hasBatchCol ? ", $14" : ""}`;
|
||||
const insertParams = [
|
||||
row.wo_id, row.seq_no, row.process_code, row.process_name,
|
||||
row.is_required, row.is_fixed_order, row.standard_time,
|
||||
row.equipment_code, row.routing_detail_id,
|
||||
String(qty), userId, masterId, companyCode,
|
||||
...(hasBatchCol ? [batchId] : []),
|
||||
];
|
||||
|
||||
const result = await client.query(
|
||||
`INSERT INTO work_order_process (${insertCols}) VALUES (${insertVals})
|
||||
RETURNING id, input_qty, status, process_name, result_status, accepted_by`,
|
||||
insertParams
|
||||
);
|
||||
|
||||
// 분할 행에 체크리스트 복사
|
||||
|
||||
Reference in New Issue
Block a user