diff --git a/src/services/rabbitmq.ts b/src/services/rabbitmq.ts index 097473f8..da93d32f 100644 --- a/src/services/rabbitmq.ts +++ b/src/services/rabbitmq.ts @@ -1161,21 +1161,38 @@ async function handler_org(msg: amqp.ConsumeMessage): Promise { } console.timeEnd("[AMQ] clone_permissionProfiles"); - //หา dna posmaster ถ้าไม่มีให้เอาตัวเองเป็น dna - console.time("[AMQ] query_employeePosMaster"); - const orgemployeePosMaster = await repoEmployeePosmaster.find({ - where: { orgRevisionId: orgRevisionPublish.id }, - relations: ["positions"], - }); - console.timeEnd("[AMQ] query_employeePosMaster"); + console.time("[AMQ] query_employee_org_structures"); + const [orgemployeePosMaster, orgemployeeTempPosMaster] = await Promise.all([ + repoEmployeePosmaster.find({ + where: { orgRevisionId: orgRevisionPublish.id }, + relations: ["positions"], + }), + repoEmployeeTempPosmaster.find({ + where: { orgRevisionId: orgRevisionPublish.id }, + relations: ["positions"], + }), + ]); + console.timeEnd("[AMQ] query_employee_org_structures"); console.log(`[AMQ] orgemployeePosMaster count: ${orgemployeePosMaster.length}`); + console.log(`[AMQ] orgemployeeTempPosMaster count: ${orgemployeeTempPosMaster.length}`); - let _orgemployeePosMaster: EmployeePosMaster[]; - const validProfileIds = new Set( - (await repoProfileEmployee.find({ select: ["id"] })).map((p) => p.id), + const currentHolderIds = Array.from( + new Set( + orgemployeePosMaster + .map((item) => item.current_holderId) + .filter((holderId): holderId is string => !!holderId), + ), ); + const validProfileIds = new Set(); + if (currentHolderIds.length > 0) { + const profiles = await repoProfileEmployee.find({ + select: ["id"], + where: { id: In(currentHolderIds) }, + }); + profiles.forEach((profile) => validProfileIds.add(profile.id)); + } - _orgemployeePosMaster = orgemployeePosMaster.map((x) => ({ + const _orgemployeePosMaster: EmployeePosMaster[] = orgemployeePosMaster.map((x) => ({ ...x, current_holderId: x.current_holderId && validProfileIds.has(x.current_holderId) ? x.current_holderId : null, @@ -1184,6 +1201,13 @@ async function handler_org(msg: amqp.ConsumeMessage): Promise { ? x.id : x.ancestorDNA, })); + const _orgemployeeTempPosMaster: EmployeeTempPosMaster[] = orgemployeeTempPosMaster.map((x) => ({ + ...x, + ancestorDNA: + x.ancestorDNA == null || x.ancestorDNA == "00000000-0000-0000-0000-000000000000" + ? x.id + : x.ancestorDNA, + })); console.time("[AMQ] insert_employeePosMaster"); await repoEmployeePosmaster @@ -1198,24 +1222,6 @@ async function handler_org(msg: amqp.ConsumeMessage): Promise { .execute(); console.timeEnd("[AMQ] insert_employeePosMaster"); - //หา dna posmaster ถ้าไม่มีให้เอาตัวเองเป็น dna - console.time("[AMQ] query_employeeTempPosMaster"); - const orgemployeeTempPosMaster = await repoEmployeeTempPosmaster.find({ - where: { orgRevisionId: orgRevisionPublish.id }, - relations: ["positions"], - }); - console.timeEnd("[AMQ] query_employeeTempPosMaster"); - console.log(`[AMQ] orgemployeeTempPosMaster count: ${orgemployeeTempPosMaster.length}`); - - let _orgemployeeTempPosMaster: EmployeeTempPosMaster[]; - _orgemployeeTempPosMaster = orgemployeeTempPosMaster.map((x) => ({ - ...x, - ancestorDNA: - x.ancestorDNA == null || x.ancestorDNA == "00000000-0000-0000-0000-000000000000" - ? x.id - : x.ancestorDNA, - })); - const groupByParentId = ( items: T[], getParentId: (item: T) => string | null | undefined,