Merge branch 'main' of http://39.117.244.52:3000/kjs/ERP-node into common/feat/dashboard-map
This commit is contained in:
@@ -2141,3 +2141,4 @@ export async function multiTableSave(
|
||||
client.release();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1646,7 +1646,18 @@ export class NodeFlowExecutionService {
|
||||
// WHERE 조건 생성
|
||||
const whereClauses: string[] = [];
|
||||
whereConditions?.forEach((condition: any) => {
|
||||
const condValue = data[condition.field];
|
||||
// 🔥 수정: sourceField가 있으면 소스 데이터에서 값을 가져옴
|
||||
let condValue: any;
|
||||
if (condition.sourceField) {
|
||||
condValue = data[condition.sourceField];
|
||||
} else if (
|
||||
condition.staticValue !== undefined &&
|
||||
condition.staticValue !== ""
|
||||
) {
|
||||
condValue = condition.staticValue;
|
||||
} else {
|
||||
condValue = data[condition.field];
|
||||
}
|
||||
|
||||
if (condition.operator === "IS NULL") {
|
||||
whereClauses.push(`${condition.field} IS NULL`);
|
||||
@@ -1987,7 +1998,18 @@ export class NodeFlowExecutionService {
|
||||
|
||||
// WHERE 조건 생성
|
||||
whereConditions?.forEach((condition: any) => {
|
||||
const condValue = data[condition.field];
|
||||
// 🔥 수정: sourceField가 있으면 소스 데이터에서 값을 가져옴
|
||||
let condValue: any;
|
||||
if (condition.sourceField) {
|
||||
condValue = data[condition.sourceField];
|
||||
} else if (
|
||||
condition.staticValue !== undefined &&
|
||||
condition.staticValue !== ""
|
||||
) {
|
||||
condValue = condition.staticValue;
|
||||
} else {
|
||||
condValue = data[condition.field];
|
||||
}
|
||||
|
||||
if (condition.operator === "IS NULL") {
|
||||
whereClauses.push(`${condition.field} IS NULL`);
|
||||
@@ -2889,7 +2911,26 @@ export class NodeFlowExecutionService {
|
||||
|
||||
const values: any[] = [];
|
||||
const clauses = conditions.map((condition, index) => {
|
||||
const value = data ? data[condition.field] : condition.value;
|
||||
// 🔥 수정: sourceField가 있으면 소스 데이터에서 값을 가져오고,
|
||||
// 없으면 staticValue 또는 기존 field 사용
|
||||
let value: any;
|
||||
if (data) {
|
||||
if (condition.sourceField) {
|
||||
// sourceField가 있으면 소스 데이터에서 해당 필드의 값을 가져옴
|
||||
value = data[condition.sourceField];
|
||||
} else if (
|
||||
condition.staticValue !== undefined &&
|
||||
condition.staticValue !== ""
|
||||
) {
|
||||
// staticValue가 있으면 사용
|
||||
value = condition.staticValue;
|
||||
} else {
|
||||
// 둘 다 없으면 기존 방식 (field로 값 조회)
|
||||
value = data[condition.field];
|
||||
}
|
||||
} else {
|
||||
value = condition.value;
|
||||
}
|
||||
values.push(value);
|
||||
|
||||
// 연산자를 SQL 문법으로 변환
|
||||
|
||||
@@ -607,7 +607,9 @@ class NumberingRuleService {
|
||||
}
|
||||
|
||||
const result = await pool.query(query, params);
|
||||
if (result.rowCount === 0) return null;
|
||||
if (result.rowCount === 0) {
|
||||
return null;
|
||||
}
|
||||
|
||||
const rule = result.rows[0];
|
||||
|
||||
|
||||
@@ -2360,30 +2360,33 @@ export class ScreenManagementService {
|
||||
const lockId = Buffer.from(companyCode).reduce((acc, byte) => acc + byte, 0);
|
||||
await client.query('SELECT pg_advisory_xact_lock($1)', [lockId]);
|
||||
|
||||
// 현재 최대 번호 조회
|
||||
const existingScreens = await client.query<{ screen_code: string }>(
|
||||
`SELECT screen_code FROM screen_definitions
|
||||
WHERE company_code = $1 AND screen_code LIKE $2
|
||||
ORDER BY screen_code DESC
|
||||
LIMIT 10`,
|
||||
[companyCode, `${companyCode}%`]
|
||||
// 현재 최대 번호 조회 (숫자 추출 후 정렬)
|
||||
// 패턴: COMPANY_CODE_XXX 또는 COMPANY_CODEXXX
|
||||
const existingScreens = await client.query<{ screen_code: string; num: number }>(
|
||||
`SELECT screen_code,
|
||||
COALESCE(
|
||||
NULLIF(
|
||||
regexp_replace(screen_code, $2, '\\1'),
|
||||
screen_code
|
||||
)::integer,
|
||||
0
|
||||
) as num
|
||||
FROM screen_definitions
|
||||
WHERE company_code = $1
|
||||
AND screen_code ~ $2
|
||||
AND deleted_date IS NULL
|
||||
ORDER BY num DESC
|
||||
LIMIT 1`,
|
||||
[companyCode, `^${companyCode.replace(/[.*+?^${}()|[\]\\]/g, "\\$&")}[_]?(\\d+)$`]
|
||||
);
|
||||
|
||||
let maxNumber = 0;
|
||||
const pattern = new RegExp(
|
||||
`^${companyCode.replace(/[.*+?^${}()|[\]\\]/g, "\\$&")}(?:_)?(\\d+)$`
|
||||
);
|
||||
|
||||
for (const screen of existingScreens.rows) {
|
||||
const match = screen.screen_code.match(pattern);
|
||||
if (match) {
|
||||
const number = parseInt(match[1], 10);
|
||||
if (number > maxNumber) {
|
||||
maxNumber = number;
|
||||
}
|
||||
}
|
||||
if (existingScreens.rows.length > 0 && existingScreens.rows[0].num) {
|
||||
maxNumber = existingScreens.rows[0].num;
|
||||
}
|
||||
|
||||
console.log(`🔢 현재 최대 화면 코드 번호: ${companyCode} → ${maxNumber}`);
|
||||
|
||||
// count개의 코드를 순차적으로 생성
|
||||
const codes: string[] = [];
|
||||
for (let i = 0; i < count; i++) {
|
||||
|
||||
Reference in New Issue
Block a user