checkpoint
This commit is contained in:
parent
3f3ec27abd
commit
0c7ad61da7
3 changed files with 430 additions and 9 deletions
|
|
@ -741,4 +741,94 @@ export class PermissionController extends Controller {
|
|||
|
||||
return data;
|
||||
}
|
||||
|
||||
@Get("checkOrg/{keycloakId}")
|
||||
public async checkOrg(
|
||||
@Path() keycloakId: string,
|
||||
) {
|
||||
console.log("[In Func]");
|
||||
const redisClient = await this.redis.createClient({
|
||||
host: REDIS_HOST,
|
||||
port: REDIS_PORT,
|
||||
});
|
||||
// const getAsync = promisify(redisClient.get).bind(redisClient);
|
||||
|
||||
// let profileType = "OFFICER";
|
||||
let profile: any = await this.profileRepo.findOne({
|
||||
select: ["id"],
|
||||
where: { keycloak: keycloakId },
|
||||
});
|
||||
console.log("[In Func Query Profile]",profile);
|
||||
// if (!profile) {
|
||||
// profileType = "EMPLOYEE";
|
||||
// profile = await this.profileEmployeeRepo.findOne({
|
||||
// select: ["id"],
|
||||
// where: { keycloak: keycloakId },
|
||||
// });
|
||||
// if (!profile) {
|
||||
// throw new HttpError(HttpStatus.NOT_FOUND, "ไม่พบข้อมูลบุคคลนี้ในระบบ");
|
||||
// }
|
||||
// }
|
||||
let reply: any;
|
||||
const orgRevision = await this.orgRevisionRepository.findOne({
|
||||
select: ["id"],
|
||||
where: {
|
||||
orgRevisionIsDraft: false,
|
||||
orgRevisionIsCurrent: true,
|
||||
},
|
||||
});
|
||||
// if (profileType == "OFFICER") {
|
||||
const posMaster = await this.posMasterRepository.findOne({
|
||||
where: {
|
||||
current_holderId: profile.id,
|
||||
orgRevisionId: orgRevision?.id,
|
||||
},
|
||||
});
|
||||
if (!posMaster) {
|
||||
reply = {
|
||||
orgRootId: null,
|
||||
orgChild1Id: null,
|
||||
orgChild2Id: null,
|
||||
orgChild3Id: null,
|
||||
orgChild4Id: null,
|
||||
};
|
||||
} else {
|
||||
reply = {
|
||||
orgRootId: posMaster.orgRootId,
|
||||
orgChild1Id: posMaster.orgChild1Id,
|
||||
orgChild2Id: posMaster.orgChild2Id,
|
||||
orgChild3Id: posMaster.orgChild3Id,
|
||||
orgChild4Id: posMaster.orgChild4Id,
|
||||
};
|
||||
}
|
||||
redisClient.setex("org_" + profile.id, 86400, JSON.stringify(reply));
|
||||
// } else {
|
||||
// const posMaster = await this.posMasterEmpRepository.findOne({
|
||||
// where: {
|
||||
// current_holderId: profile.id,
|
||||
// orgRevisionId: orgRevision?.id,
|
||||
// },
|
||||
// });
|
||||
// if (!posMaster) {
|
||||
// reply = {
|
||||
// orgRootId: null,
|
||||
// orgChild1Id: null,
|
||||
// orgChild2Id: null,
|
||||
// orgChild3Id: null,
|
||||
// orgChild4Id: null,
|
||||
// };
|
||||
// } else {
|
||||
// reply = {
|
||||
// orgRootId: posMaster.orgRootId,
|
||||
// orgChild1Id: posMaster.orgChild1Id,
|
||||
// orgChild2Id: posMaster.orgChild2Id,
|
||||
// orgChild3Id: posMaster.orgChild3Id,
|
||||
// orgChild4Id: posMaster.orgChild4Id,
|
||||
// };
|
||||
// }
|
||||
// redisClient.setex("org_" + profile.id, 86400, JSON.stringify(reply));
|
||||
// }
|
||||
|
||||
return new HttpSuccess(reply);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -6583,4 +6583,325 @@ export class ProfileController extends Controller {
|
|||
]);
|
||||
return new HttpSuccess();
|
||||
}
|
||||
|
||||
/**
|
||||
* API รายการทะเบียนประวัติในระบบอื่น
|
||||
*
|
||||
* @summary ORG_065 - รายการทะเบียนประวัติในระบบอื่น
|
||||
*
|
||||
*/
|
||||
@Get("otherSystem")
|
||||
@Example({
|
||||
status: 200,
|
||||
message: "สำเร็จ",
|
||||
result: {
|
||||
data: [
|
||||
{
|
||||
id: "ecb0b34c-037e-41f2-b95e-7e19f88b42ae",
|
||||
createdAt: "2024-03-24T12:39:12.105Z",
|
||||
createdUserId: "00000000-0000-0000-0000-000000000000",
|
||||
lastUpdatedAt: "2024-03-24T12:41:43.164Z",
|
||||
lastUpdateUserId: "00000000-0000-0000-0000-000000000000",
|
||||
createdFullName: "string",
|
||||
lastUpdateFullName: "string",
|
||||
rank: null,
|
||||
prefix: null,
|
||||
firstName: "Methapon",
|
||||
lastName: "Metanipat",
|
||||
citizenId: null,
|
||||
position: null,
|
||||
posLevelId: null,
|
||||
posTypeId: null,
|
||||
email: null,
|
||||
phone: null,
|
||||
keycloak: null,
|
||||
isProbation: false,
|
||||
dateRetire: null,
|
||||
birthDate: null,
|
||||
ethnicity: null,
|
||||
telephoneNumber: null,
|
||||
gender: null,
|
||||
relationship: null,
|
||||
bloodGroup: null,
|
||||
posLevel: null,
|
||||
posType: null,
|
||||
org: null,
|
||||
},
|
||||
],
|
||||
total: 1,
|
||||
},
|
||||
})
|
||||
async listProfileNoPermission(
|
||||
@Request() request: RequestWithUser,
|
||||
@Query("page") page: number = 1,
|
||||
@Query("pageSize") pageSize: number = 10,
|
||||
@Query()
|
||||
searchField?: "firstName" | "lastName" | "fullName" | "citizenId" | "position" | "posNo",
|
||||
@Query() searchKeyword: string = "",
|
||||
@Query() posType?: string,
|
||||
@Query() posLevel?: string,
|
||||
@Query() yearLeave?: number,
|
||||
@Query() isProbation?: boolean,
|
||||
@Query() isRetire?: boolean,
|
||||
@Query() node?: number,
|
||||
@Query() nodeId?: string,
|
||||
@Query() isAll?: boolean,
|
||||
) {
|
||||
// let _data = await new permission().PermissionOrgList(request, "SYS_REGISTRY_OFFICER");
|
||||
let queryLike =
|
||||
"CONCAT(profile.prefix, profile.firstName, ' ', profile.lastName) LIKE :keyword";
|
||||
if (searchField == "citizenId") {
|
||||
queryLike = "profile.citizenId LIKE :keyword";
|
||||
} else if (searchField == "position") {
|
||||
queryLike = "profile.position LIKE :keyword";
|
||||
} else if (searchField == "posNo") {
|
||||
queryLike = `CONCAT(
|
||||
IFNULL(orgChild4.orgChild4ShortName, ''),
|
||||
IFNULL(orgChild3.orgChild3ShortName, ''),
|
||||
IFNULL(orgChild2.orgChild2ShortName, ''),
|
||||
IFNULL(orgChild1.orgChild1ShortName, ''),
|
||||
IFNULL(orgRoot.orgRootShortName, ''),
|
||||
IFNULL(current_holders.posMasterNo , '')
|
||||
) LIKE :keyword`;
|
||||
}
|
||||
let nodeCondition = "1=1";
|
||||
let nodeAll = "";
|
||||
if (node === 0 && nodeId) {
|
||||
nodeCondition = "current_holders.orgRootId = :nodeId";
|
||||
if (isAll == false) nodeAll = " AND current_holders.orgChild1Id IS NULL";
|
||||
} else if (node === 1 && nodeId) {
|
||||
nodeCondition = "current_holders.orgChild1Id = :nodeId";
|
||||
if (isAll == false) nodeAll = " AND current_holders.orgChild2Id IS NULL";
|
||||
} else if (node === 2 && nodeId) {
|
||||
nodeCondition = "current_holders.orgChild2Id = :nodeId";
|
||||
if (isAll == false) nodeAll = " AND current_holders.orgChild3Id IS NULL";
|
||||
} else if (node === 3 && nodeId) {
|
||||
nodeCondition = "current_holders.orgChild3Id = :nodeId";
|
||||
if (isAll == false) nodeAll = " AND current_holders.orgChild4Id IS NULL";
|
||||
} else if (node === 4 && nodeId) {
|
||||
nodeCondition = "current_holders.orgChild4Id = :nodeId";
|
||||
}
|
||||
nodeCondition = nodeCondition + nodeAll;
|
||||
const [record, total] = await this.profileRepo
|
||||
.createQueryBuilder("profile")
|
||||
.leftJoinAndSelect("profile.posLevel", "posLevel")
|
||||
.leftJoinAndSelect("profile.posType", "posType")
|
||||
.leftJoinAndSelect("profile.current_holders", "current_holders")
|
||||
.leftJoinAndSelect("current_holders.positions", "positions")
|
||||
.leftJoinAndSelect("positions.posExecutive", "posExecutive")
|
||||
.leftJoinAndSelect("current_holders.orgRoot", "orgRoot")
|
||||
.leftJoinAndSelect("current_holders.orgChild1", "orgChild1")
|
||||
.leftJoinAndSelect("current_holders.orgChild2", "orgChild2")
|
||||
.leftJoinAndSelect("current_holders.orgChild3", "orgChild3")
|
||||
.leftJoinAndSelect("current_holders.orgChild4", "orgChild4")
|
||||
// .andWhere(
|
||||
// _data.root != undefined && _data.root != null
|
||||
// ? _data.root[0] != null
|
||||
// ? `current_holders.orgRootId IN (:...root)`
|
||||
// : `current_holders.orgRootId is null`
|
||||
// : "1=1",
|
||||
// {
|
||||
// root: _data.root,
|
||||
// },
|
||||
// )
|
||||
// .andWhere(
|
||||
// _data.child1 != undefined && _data.child1 != null
|
||||
// ? _data.child1[0] != null
|
||||
// ? `current_holders.orgChild1Id IN (:...child1)`
|
||||
// : `current_holders.orgChild1Id is null`
|
||||
// : "1=1",
|
||||
// {
|
||||
// child1: _data.child1,
|
||||
// },
|
||||
// )
|
||||
// .andWhere(
|
||||
// _data.child2 != undefined && _data.child2 != null
|
||||
// ? _data.child2[0] != null
|
||||
// ? `current_holders.orgChild2Id IN (:...child2)`
|
||||
// : `current_holders.orgChild2Id is null`
|
||||
// : "1=1",
|
||||
// {
|
||||
// child2: _data.child2,
|
||||
// },
|
||||
// )
|
||||
// .andWhere(
|
||||
// _data.child3 != undefined && _data.child3 != null
|
||||
// ? _data.child3[0] != null
|
||||
// ? `current_holders.orgChild3Id IN (:...child3)`
|
||||
// : `current_holders.orgChild3Id is null`
|
||||
// : "1=1",
|
||||
// {
|
||||
// child3: _data.child3,
|
||||
// },
|
||||
// )
|
||||
// .andWhere(
|
||||
// _data.child4 != undefined && _data.child4 != null
|
||||
// ? _data.child4[0] != null
|
||||
// ? `current_holders.orgChild4Id IN (:...child4)`
|
||||
// : `current_holders.orgChild4Id is null`
|
||||
// : "1=1",
|
||||
// {
|
||||
// child4: _data.child4,
|
||||
// },
|
||||
// )
|
||||
.andWhere(
|
||||
posType != undefined && posType != null && posType != ""
|
||||
? "posType.posTypeName LIKE :keyword1"
|
||||
: "1=1",
|
||||
{
|
||||
keyword1: `${posType}`,
|
||||
},
|
||||
)
|
||||
.andWhere(
|
||||
posLevel != undefined && posLevel != null && posLevel != ""
|
||||
? "posLevel.posLevelName LIKE :keyword2"
|
||||
: "1=1",
|
||||
{
|
||||
keyword2: `${posLevel}`,
|
||||
},
|
||||
)
|
||||
.andWhere(
|
||||
isProbation != undefined && isProbation != null
|
||||
? `profile.isProbation = ${isProbation}`
|
||||
: "1=1",
|
||||
)
|
||||
.andWhere(
|
||||
isRetire != undefined && isRetire != null
|
||||
? isRetire == false
|
||||
? `profile.dateLeave IS null`
|
||||
: `profile.dateLeave IS NOT NULL`
|
||||
: "1=1",
|
||||
)
|
||||
.andWhere(
|
||||
searchKeyword != undefined && searchKeyword != null && searchKeyword != ""
|
||||
? queryLike
|
||||
: "1=1",
|
||||
{
|
||||
keyword: `%${searchKeyword}%`,
|
||||
},
|
||||
)
|
||||
.andWhere(nodeCondition, {
|
||||
nodeId: nodeId,
|
||||
})
|
||||
.skip((page - 1) * pageSize)
|
||||
.take(pageSize)
|
||||
.getManyAndCount();
|
||||
|
||||
const findRevision = await this.orgRevisionRepo.findOne({
|
||||
where: { orgRevisionIsCurrent: true },
|
||||
});
|
||||
if (!findRevision) {
|
||||
throw new HttpError(HttpStatus.NOT_FOUND, "not found. OrgRevision");
|
||||
}
|
||||
const data = await Promise.all(
|
||||
record.map((_data) => {
|
||||
const posExecutive =
|
||||
_data.current_holders.length == 0 ||
|
||||
_data.current_holders.find((x) => x.orgRevisionId == findRevision.id) == null ||
|
||||
_data.current_holders.find((x) => x.orgRevisionId == findRevision.id)?.positions.length ==
|
||||
0 ||
|
||||
_data.current_holders
|
||||
.find((x) => x.orgRevisionId == findRevision.id)
|
||||
?.positions.find((x: any) => x.positionIsSelected == true) == null ||
|
||||
_data.current_holders
|
||||
.find((x) => x.orgRevisionId == findRevision.id)
|
||||
?.positions.find((x: any) => x.positionIsSelected == true)?.posExecutive == null
|
||||
? null
|
||||
: _data.current_holders
|
||||
.find((x) => x.orgRevisionId == findRevision.id)
|
||||
?.positions.find((x: any) => x.positionIsSelected == true)?.posExecutive
|
||||
?.posExecutiveName;
|
||||
|
||||
const shortName =
|
||||
_data.current_holders.length == 0
|
||||
? null
|
||||
: _data.current_holders.find((x) => x.orgRevisionId == findRevision.id) != null &&
|
||||
_data.current_holders.find((x) => x.orgRevisionId == findRevision.id)?.orgChild4 !=
|
||||
null
|
||||
? `${_data.current_holders.find((x) => x.orgRevisionId == findRevision.id)?.orgChild4.orgChild4ShortName}${_data.current_holders.find((x) => x.orgRevisionId == findRevision.id)?.posMasterNo}`
|
||||
: _data.current_holders.find((x) => x.orgRevisionId == findRevision.id) != null &&
|
||||
_data.current_holders.find((x) => x.orgRevisionId == findRevision.id)
|
||||
?.orgChild3 != null
|
||||
? `${_data.current_holders.find((x) => x.orgRevisionId == findRevision.id)?.orgChild3.orgChild3ShortName}${_data.current_holders.find((x) => x.orgRevisionId == findRevision.id)?.posMasterNo}`
|
||||
: _data.current_holders.find((x) => x.orgRevisionId == findRevision.id) != null &&
|
||||
_data.current_holders.find((x) => x.orgRevisionId == findRevision.id)
|
||||
?.orgChild2 != null
|
||||
? `${_data.current_holders.find((x) => x.orgRevisionId == findRevision.id)?.orgChild2.orgChild2ShortName}${_data.current_holders.find((x) => x.orgRevisionId == findRevision.id)?.posMasterNo}`
|
||||
: _data.current_holders.find((x) => x.orgRevisionId == findRevision.id) != null &&
|
||||
_data.current_holders.find((x) => x.orgRevisionId == findRevision.id)
|
||||
?.orgChild1 != null
|
||||
? `${_data.current_holders.find((x) => x.orgRevisionId == findRevision.id)?.orgChild1.orgChild1ShortName}${_data.current_holders.find((x) => x.orgRevisionId == findRevision.id)?.posMasterNo}`
|
||||
: _data.current_holders.find((x) => x.orgRevisionId == findRevision.id) !=
|
||||
null &&
|
||||
_data.current_holders.find((x) => x.orgRevisionId == findRevision.id)
|
||||
?.orgRoot != null
|
||||
? `${_data.current_holders.find((x) => x.orgRevisionId == findRevision.id)?.orgRoot.orgRootShortName}${_data.current_holders.find((x) => x.orgRevisionId == findRevision.id)?.posMasterNo}`
|
||||
: null;
|
||||
const root =
|
||||
_data.current_holders.length == 0 ||
|
||||
(_data.current_holders.find((x) => x.orgRevisionId == findRevision.id) != null &&
|
||||
_data.current_holders.find((x) => x.orgRevisionId == findRevision.id)?.orgRoot == null)
|
||||
? null
|
||||
: _data.current_holders.find((x) => x.orgRevisionId == findRevision.id)?.orgRoot;
|
||||
|
||||
const child1 =
|
||||
_data.current_holders == null ||
|
||||
_data.current_holders.length == 0 ||
|
||||
_data.current_holders.find((x) => x.orgRevisionId == findRevision.id) == null
|
||||
? null
|
||||
: _data.current_holders.find((x) => x.orgRevisionId == findRevision.id)?.orgChild1;
|
||||
|
||||
const child2 =
|
||||
_data.current_holders == null ||
|
||||
_data.current_holders.length == 0 ||
|
||||
_data.current_holders.find((x) => x.orgRevisionId == findRevision.id) == null
|
||||
? null
|
||||
: _data.current_holders.find((x) => x.orgRevisionId == findRevision.id)?.orgChild2;
|
||||
|
||||
const child3 =
|
||||
_data.current_holders == null ||
|
||||
_data.current_holders.length == 0 ||
|
||||
_data.current_holders.find((x) => x.orgRevisionId == findRevision.id) == null
|
||||
? null
|
||||
: _data.current_holders.find((x) => x.orgRevisionId == findRevision.id)?.orgChild3;
|
||||
|
||||
const child4 =
|
||||
_data.current_holders == null ||
|
||||
_data.current_holders.length == 0 ||
|
||||
_data.current_holders.find((x) => x.orgRevisionId == findRevision.id) == null
|
||||
? null
|
||||
: _data.current_holders.find((x) => x.orgRevisionId == findRevision.id)?.orgChild4;
|
||||
|
||||
let _child1 = child1 == null ? "" : `${child1.orgChild1Name}/`;
|
||||
let _child2 = child2 == null ? "" : `${child2.orgChild2Name}/`;
|
||||
let _child3 = child3 == null ? "" : `${child3.orgChild3Name}/`;
|
||||
let _child4 = child4 == null ? "" : `${child4.orgChild4Name}/`;
|
||||
|
||||
return {
|
||||
id: _data.id,
|
||||
avatar: _data.avatar,
|
||||
avatarName: _data.avatarName,
|
||||
prefix: _data.prefix,
|
||||
rank: _data.rank,
|
||||
firstName: _data.firstName,
|
||||
lastName: _data.lastName,
|
||||
citizenId: _data.citizenId,
|
||||
posLevel: _data.posLevel == null ? null : _data.posLevel.posLevelName,
|
||||
posType: _data.posType == null ? null : _data.posType.posTypeName,
|
||||
posLevelId: _data.posLevel == null ? null : _data.posLevel.id,
|
||||
posTypeId: _data.posType == null ? null : _data.posType.id,
|
||||
position: _data.position,
|
||||
posExecutive: posExecutive,
|
||||
posNo: shortName,
|
||||
rootId: root == null ? null : root.id,
|
||||
root: root == null ? null : root.orgRootName,
|
||||
orgRootShortName: root == null ? null : root.orgRootShortName,
|
||||
orgRevisionId: root == null ? null : root.orgRevisionId,
|
||||
org: `${_child4}${_child3}${_child2}${_child1}${root?.orgRootName ?? ""}`,
|
||||
};
|
||||
}),
|
||||
);
|
||||
|
||||
return new HttpSuccess({ data: data, total });
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -3,6 +3,7 @@ import { Client } from "@elastic/elasticsearch";
|
|||
import { AppDataSource } from "../database/data-source";
|
||||
import { PosMaster } from "../entities/PosMaster";
|
||||
import { OrgRevision } from "../entities/OrgRevision";
|
||||
import { Profile } from "../entities/Profile";
|
||||
|
||||
if (!process.env.ELASTICSEARCH_INDEX) {
|
||||
throw new Error("Require ELASTICSEARCH_INDEX to store log.");
|
||||
|
|
@ -27,6 +28,7 @@ async function logMiddleware(req: Request, res: Response, next: NextFunction) {
|
|||
|
||||
let data: any;
|
||||
const repoPosmaster = AppDataSource.getRepository(PosMaster);
|
||||
const repoProfile = AppDataSource.getRepository(Profile);
|
||||
const repoRevision = AppDataSource.getRepository(OrgRevision);
|
||||
|
||||
const originalJson = res.json;
|
||||
|
|
@ -41,14 +43,13 @@ async function logMiddleware(req: Request, res: Response, next: NextFunction) {
|
|||
req.app.locals.logData = {};
|
||||
|
||||
const revision = await repoRevision.findOne({
|
||||
where: { orgRevisionIsCurrent: true , orgRevisionIsDraft: false },
|
||||
where: {
|
||||
orgRevisionIsCurrent: true ,
|
||||
orgRevisionIsDraft: false
|
||||
},
|
||||
})
|
||||
|
||||
const rootId = await repoPosmaster.findOne({
|
||||
where: { current_holderId: req.app.locals.logData.userId, orgRevisionId: revision?.id },
|
||||
});
|
||||
|
||||
res.on("finish", () => {
|
||||
|
||||
res.on("finish", async() => {
|
||||
if (!req.url.startsWith("/api/")) return;
|
||||
let system = "organization";
|
||||
if (req.url.startsWith("/api/v1/org/metadata/")) system = "master";
|
||||
|
|
@ -68,7 +69,17 @@ async function logMiddleware(req: Request, res: Response, next: NextFunction) {
|
|||
if (req.url.startsWith("/api/v1/org/profile-temp/")) system = "registry";
|
||||
|
||||
const level = LOG_LEVEL_MAP[process.env.LOG_LEVEL ?? "debug"] || 4;
|
||||
|
||||
const profileByKeycloak = await repoProfile.findOne({
|
||||
where: { keycloak: req.app.locals.logData.userId },
|
||||
})
|
||||
const rootId = await repoPosmaster.findOne({
|
||||
where: {
|
||||
current_holderId: profileByKeycloak?.id,
|
||||
orgRevisionId: revision?.id
|
||||
},
|
||||
select: ["orgRootId"],
|
||||
});
|
||||
|
||||
if (level === 1 && res.statusCode < 500) return;
|
||||
if (level === 2 && res.statusCode < 400) return;
|
||||
if (level === 3 && res.statusCode < 200) return;
|
||||
|
|
@ -89,7 +100,6 @@ async function logMiddleware(req: Request, res: Response, next: NextFunction) {
|
|||
output: (level === 4 && JSON.stringify(data, null, 2)) || undefined,
|
||||
...req.app.locals.logData,
|
||||
};
|
||||
|
||||
elasticsearch.index({
|
||||
index: ELASTICSEARCH_INDEX,
|
||||
document: obj,
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue