diff --git a/src/controllers/PosMasterActController.ts b/src/controllers/PosMasterActController.ts index fbc09201..3b5d3196 100644 --- a/src/controllers/PosMasterActController.ts +++ b/src/controllers/PosMasterActController.ts @@ -621,13 +621,13 @@ export class PosMasterActController extends Controller { let conditionGroup = ""; if (body.type.trim().toUpperCase() == "GROUP1.1") { conditionGroup = - "(posTypeAct.posTypeName = 'ทั่วไป' AND posLevelAct.posLevelName = 'ชำนาญงาน') OR (posTypeAct.posTypeName = 'ทั่วไป' AND posLevelAct.posLevelName = 'ปฏิบัติงาน') OR (posTypeAct.posTypeName = 'วิชาการ' AND posLevelAct.posLevelName = 'ปฏิบัติการ') OR (posTypeAct.posTypeName = 'วิชาการ' AND posLevelAct.posLevelName = 'ชำนาญการ')"; + "(posType.posTypeName = 'ทั่วไป' AND posLevel.posLevelName = 'ชำนาญงาน') OR (posType.posTypeName = 'ทั่วไป' AND posLevel.posLevelName = 'ปฏิบัติงาน') OR (posType.posTypeName = 'วิชาการ' AND posLevel.posLevelName = 'ปฏิบัติการ') OR (posType.posTypeName = 'วิชาการ' AND posLevel.posLevelName = 'ชำนาญการ')"; } else if (body.type.trim().toUpperCase() == "GROUP1.2") { conditionGroup = - "(posTypeAct.posTypeName = 'ทั่วไป' AND posLevelAct.posLevelName = 'อาวุโส') OR (posTypeAct.posTypeName = 'วิชาการ' AND posLevelAct.posLevelName = 'ชำนาญการพิเศษ') OR (posTypeAct.posTypeName = 'อำนวยการ' AND posLevelAct.posLevelName = 'ต้น')"; + "(posType.posTypeName = 'ทั่วไป' AND posLevel.posLevelName = 'อาวุโส') OR (posType.posTypeName = 'วิชาการ' AND posLevel.posLevelName = 'ชำนาญการพิเศษ') OR (posType.posTypeName = 'อำนวยการ' AND posLevel.posLevelName = 'ต้น')"; } else if (body.type.trim().toUpperCase() == "GROUP2") { conditionGroup = - "(posTypeAct.posTypeName = 'ทั่วไป' AND posLevelAct.posLevelName = 'ทักษะพิเศษ') OR (posTypeAct.posTypeName = 'วิชาการ' AND posLevelAct.posLevelName = 'เชี่ยวชาญ') OR (posTypeAct.posTypeName = 'วิชาการ' AND posLevelAct.posLevelName = 'ทรงคุณวุฒิ') OR (posTypeAct.posTypeName = 'อำนวยการ' AND posLevelAct.posLevelName = 'สูง') OR (posTypeAct.posTypeName = 'บริหาร' AND posLevelAct.posLevelName = 'ต้น') OR (posTypeAct.posTypeName = 'บริหาร' AND posLevelAct.posLevelName = 'สูง')"; + "(posType.posTypeName = 'ทั่วไป' AND posLevel.posLevelName = 'ทักษะพิเศษ') OR (posType.posTypeName = 'วิชาการ' AND posLevel.posLevelName = 'เชี่ยวชาญ') OR (posType.posTypeName = 'วิชาการ' AND posLevel.posLevelName = 'ทรงคุณวุฒิ') OR (posType.posTypeName = 'อำนวยการ' AND posLevel.posLevelName = 'สูง') OR (posType.posTypeName = 'บริหาร' AND posLevel.posLevelName = 'ต้น') OR (posType.posTypeName = 'บริหาร' AND posLevel.posLevelName = 'สูง')"; } else { throw new HttpError(HttpStatusCode.NOT_FOUND, "กลุ่มเป้าหมายไม่ถูกต้อง"); } diff --git a/src/services/rabbitmq.ts b/src/services/rabbitmq.ts index 227c431c..3a989a5f 100644 --- a/src/services/rabbitmq.ts +++ b/src/services/rabbitmq.ts @@ -176,6 +176,23 @@ function createConsumer( //----> consumer ); } +/** + * สร้าง pseudo Express request สำหรับ service ที่ถูกเรียกจาก RabbitMQ (ไม่ใช่ HTTP) + * ต้องมี `.app.locals.logData.sequence` เพราะ addLogSequence (ใน CallAPI) อ่านค่านี้ + * และ `.headers.authorization` + `.user` สำหรับ audit/auth + */ +function buildPseudoReq(token: string, user: any) { + return { + headers: { authorization: token }, + user, + app: { + locals: { + logData: { sequence: [] as any[] }, + }, + }, + }; +} + async function handler(msg: amqp.ConsumeMessage): Promise { //----> condition before process consumer // const repo = AppDataSource.getRepository(Command); @@ -381,7 +398,7 @@ async function handler(msg: amqp.ConsumeMessage): Promise { // เพราะ path ของ command เหล่านี้ชี้กลับ org เอง → PostData(path + "/excecute") = ยิงเข้าตัว if (isOrgSelfLinear) { console.log(`[AMQ] Linear Flow org-self (${code}) — เรียก Service ตรงๆ (no loopback)`); - const pseudoReq = { headers: { authorization: token }, user }; + const pseudoReq = buildPseudoReq(token, user); const ctx = { user: { sub: user?.sub ?? "system", name: user?.name ?? "System" }, req: pseudoReq, @@ -429,7 +446,7 @@ async function handler(msg: amqp.ConsumeMessage): Promise { } if (resultData.length > 0) { - const pseudoReq = { headers: { authorization: token }, user }; + const pseudoReq = buildPseudoReq(token, user); const ctx = { user: { sub: user?.sub ?? "system", name: user?.name ?? "System" }, req: pseudoReq, @@ -470,7 +487,7 @@ async function handler(msg: amqp.ConsumeMessage): Promise { } if (resultData.length > 0) { - const pseudoReq = { headers: { authorization: token }, user }; + const pseudoReq = buildPseudoReq(token, user); const ctx = { user: { sub: user?.sub ?? "system", name: user?.name ?? "System" }, req: pseudoReq, @@ -519,10 +536,7 @@ async function handler(msg: amqp.ConsumeMessage): Promise { // Route ไป service ที่ถูกต้องตาม commandType if (resultData.length > 0 || resultData1.length > 0) { // สร้าง pseudo-req สำหรับ setLogDataDiff/save({data: req}) - const pseudoReq = { - headers: { authorization: token }, - user, - }; + const pseudoReq = buildPseudoReq(token, user); const ctx = { user: { sub: user?.sub ?? "system", name: user?.name ?? "System" }, req: pseudoReq,