no message

This commit is contained in:
Kittapath 2024-02-03 13:09:44 +07:00
parent 971c611c5d
commit 1de27691f8
2 changed files with 416 additions and 79 deletions

View file

@ -35,8 +35,8 @@ import { OrgChild4 } from "../entities/OrgChild4";
import { Position } from "../entities/Position";
import { Brackets } from "typeorm/browser";
@Route("api/v1/org/report")
@Tags("Position")
@Security("bearerAuth")
// @Tags("Position")
// @Security("bearerAuth")
@Response(
HttpStatusCode.INTERNAL_SERVER_ERROR,
"เกิดข้อผิดพลาด ไม่สามารถแสดงรายการได้ กรุณาลองใหม่ในภายหลัง",
@ -66,28 +66,328 @@ export class ReportController extends Controller {
@Get("position")
async findPosition() {
try {
// const getPosType = await this.posTypeRepository.findOne({
// select: ["id", "posTypeName", "posTypeRank"],
// relations: ["posLevels"],
// where: { id: id },
// });
// if (!getPosType) {
// throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลไอดีนี้ : " + id);
// }
const orgRevision = await this.orgRevisionRepository.findOne({
where: { orgRevisionIsDraft: true, orgRevisionIsCurrent: false },
relations: ["orgRoots"],
});
if (!orgRevision) {
throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูล");
}
// const mapGetPosType = {
// id: getPosType.id,
// posTypeName: getPosType.posTypeName,
// posTypeRank: getPosType.posTypeRank,
// posLevels: getPosType.posLevels.map((posLevel) => ({
// id: posLevel.id,
// posLevelName: posLevel.posLevelName,
// posLevelRank: posLevel.posLevelRank,
// posLevelAuthority: posLevel.posLevelAuthority,
// })),
// };
const orgRootData = await AppDataSource.getRepository(OrgRoot)
.createQueryBuilder("orgRoot")
.where("orgRoot.orgRevisionId IN (:...ids)", {
ids: [orgRevision.id],
})
.select([
"orgRoot.id",
"orgRoot.orgRootName",
"orgRoot.orgRootShortName",
"orgRoot.orgRootOrder",
])
.orderBy("orgRoot.orgRootOrder", "ASC")
.getMany();
return new HttpSuccess();
const orgRootIds = orgRootData.map((orgRoot) => orgRoot.id) || null;
const orgChild1Data =
orgRootIds && orgRootIds.length > 0
? await AppDataSource.getRepository(OrgChild1)
.createQueryBuilder("orgChild1")
.where("orgChild1.orgRootId IN (:...ids)", { ids: orgRootIds })
.select([
"orgChild1.id",
"orgChild1.orgChild1Name",
"orgChild1.orgChild1ShortName",
"orgChild1.orgRootId",
"orgChild1.orgChild1Order",
])
.orderBy("orgChild1.orgChild1Order", "ASC")
.getMany()
: [];
const orgChild1Ids = orgChild1Data.map((orgChild1) => orgChild1.id) || null;
const orgChild2Data =
orgChild1Ids && orgChild1Ids.length > 0
? await AppDataSource.getRepository(OrgChild2)
.createQueryBuilder("orgChild2")
.where("orgChild2.orgChild1Id IN (:...ids)", { ids: orgChild1Ids })
.select([
"orgChild2.id",
"orgChild2.orgChild2Name",
"orgChild2.orgChild2ShortName",
"orgChild2.orgChild1Id",
"orgChild2.orgChild2Order",
])
.orderBy("orgChild2.orgChild2Order", "ASC")
.getMany()
: [];
const orgChild2Ids = orgChild2Data.map((orgChild2) => orgChild2.id) || null;
const orgChild3Data =
orgChild2Ids && orgChild2Ids.length > 0
? await AppDataSource.getRepository(OrgChild3)
.createQueryBuilder("orgChild3")
.where("orgChild3.orgChild2Id IN (:...ids)", { ids: orgChild2Ids })
.select([
"orgChild3.id",
"orgChild3.orgChild3Name",
"orgChild3.orgChild3ShortName",
"orgChild3.orgChild2Id",
"orgChild3.orgChild3Order",
])
.orderBy("orgChild3.orgChild3Order", "ASC")
.getMany()
: [];
const orgChild3Ids = orgChild3Data.map((orgChild3) => orgChild3.id) || null;
const orgChild4Data =
orgChild3Ids && orgChild3Ids.length > 0
? await AppDataSource.getRepository(OrgChild4)
.createQueryBuilder("orgChild4")
.where("orgChild4.orgChild3Id IN (:...ids)", { ids: orgChild3Ids })
.select([
"orgChild4.id",
"orgChild4.orgChild4Name",
"orgChild4.orgChild4ShortName",
"orgChild4.orgChild3Id",
"orgChild4.orgChild4Order",
])
.orderBy("orgChild4.orgChild4Order", "ASC")
.getMany()
: [];
const posMasters = await AppDataSource.getRepository(PosMaster)
.createQueryBuilder("posMaster")
.where("posMaster.orgRevisionId IN (:...ids)", {
ids: [orgRevision.id],
})
.select([
"posMaster.id",
"posMaster.posMasterNoPrefix",
"posMaster.posMasterNo",
"posMaster.posMasterNoSuffix",
"posMaster.orgRootId",
"posMaster.orgChild1Id",
"posMaster.orgChild2Id",
"posMaster.orgChild3Id",
"posMaster.orgChild4Id",
])
.orderBy("posMaster.posMasterOrder", "ASC")
.getMany();
const positions = await this.positionRepository.find({
where: {
posMasterId: In(posMasters.map((posMaster: any) => posMaster.id)),
},
relations: ["posLevel", "posType", "posExecutive"],
});
let data = new Array();
await Promise.all(
orgRootData.map(async (orgRoot) => {
await Promise.all(
posMasters
.filter((posMaster) => posMaster.orgRootId === orgRoot.id)
.map(async (posMaster) => {
await Promise.all(
positions
.filter((position) => position.posMasterId === posMaster.id)
.map(async (position) => {
const node = {
orgRootName: orgRoot.orgRootName,
orgTreeName: orgRoot.orgRootName,
orgTreeShortName: orgRoot.orgRootShortName,
posMasterNoPrefix: posMaster.posMasterNoPrefix,
posMasterNo: posMaster.posMasterNo,
posMasterNoSuffix: posMaster.posMasterNoSuffix,
positionName: position.positionName,
posType: position.posType == null ? null : position.posType.posTypeName,
posLevel: position.posLevel == null ? null : position.posLevel.posLevelName,
posExecutive:
position.posExecutive == null
? null
: position.posExecutive.posExecutiveName,
};
data.push(node);
}),
);
}),
),
await Promise.all(
orgChild1Data
.filter((orgChild1) => orgChild1.orgRootId === orgRoot.id)
.map(async (orgChild1) => {
const node = {
positions: await Promise.all(
posMasters
.filter((posMaster) => posMaster.orgChild1Id === orgChild1.id)
.map(async (posMaster) => {
await Promise.all(
positions
.filter((position) => position.posMasterId === posMaster.id)
.map(async (position) => {
const node = {
orgRootName: orgRoot.orgRootName,
orgTreeName: orgChild1.orgChild1Name,
orgTreeShortName: orgChild1.orgChild1ShortName,
posMasterNoPrefix: posMaster.posMasterNoPrefix,
posMasterNo: posMaster.posMasterNo,
posMasterNoSuffix: posMaster.posMasterNoSuffix,
positionName: position.positionName,
posType:
position.posType == null ? null : position.posType.posTypeName,
posLevel:
position.posLevel == null
? null
: position.posLevel.posLevelName,
posExecutive:
position.posExecutive == null
? null
: position.posExecutive.posExecutiveName,
};
data.push(node);
}),
);
}),
),
};
await Promise.all(
orgChild2Data
.filter((orgChild2) => orgChild2.orgChild1Id === orgChild1.id)
.map(async (orgChild2) => {
const node = {
positions: await Promise.all(
posMasters
.filter((posMaster) => posMaster.orgChild2Id === orgChild2.id)
.map(async (posMaster) => {
await Promise.all(
positions
.filter((position) => position.posMasterId === posMaster.id)
.map(async (position) => {
const node = {
orgRootName: orgRoot.orgRootName,
orgTreeName: orgChild2.orgChild2Name,
orgTreeShortName: orgChild2.orgChild2ShortName,
posMasterNoPrefix: posMaster.posMasterNoPrefix,
posMasterNo: posMaster.posMasterNo,
posMasterNoSuffix: posMaster.posMasterNoSuffix,
positionName: position.positionName,
posType:
position.posType == null
? null
: position.posType.posTypeName,
posLevel:
position.posLevel == null
? null
: position.posLevel.posLevelName,
posExecutive:
position.posExecutive == null
? null
: position.posExecutive.posExecutiveName,
};
data.push(node);
}),
);
}),
),
};
await Promise.all(
orgChild3Data
.filter((orgChild3) => orgChild3.orgChild2Id === orgChild2.id)
.map(async (orgChild3) => {
const node = {
positions: await Promise.all(
posMasters
.filter((posMaster) => posMaster.orgChild3Id === orgChild3.id)
.map(async (posMaster) => {
await Promise.all(
positions
.filter(
(position) => position.posMasterId === posMaster.id,
)
.map(async (position) => {
const node = {
orgRootName: orgRoot.orgRootName,
orgTreeName: orgChild3.orgChild3Name,
orgTreeShortName: orgChild3.orgChild3ShortName,
posMasterNoPrefix: posMaster.posMasterNoPrefix,
posMasterNo: posMaster.posMasterNo,
posMasterNoSuffix: posMaster.posMasterNoSuffix,
positionName: position.positionName,
posType:
position.posType == null
? null
: position.posType.posTypeName,
posLevel:
position.posLevel == null
? null
: position.posLevel.posLevelName,
posExecutive:
position.posExecutive == null
? null
: position.posExecutive.posExecutiveName,
};
data.push(node);
}),
);
}),
),
};
await Promise.all(
orgChild4Data
.filter((orgChild4) => orgChild4.orgChild3Id === orgChild3.id)
.map(async (orgChild4) => {
const node = {
positions: await Promise.all(
posMasters
.filter(
(posMaster) => posMaster.orgChild4Id === orgChild4.id,
)
.map(async (posMaster) => {
await Promise.all(
positions
.filter(
(position) =>
position.posMasterId === posMaster.id,
)
.map(async (position) => {
const node = {
orgRootName: orgRoot.orgRootName,
orgTreeName: orgChild4.orgChild4Name,
orgTreeShortName: orgChild4.orgChild4ShortName,
posMasterNoPrefix: posMaster.posMasterNoPrefix,
posMasterNo: posMaster.posMasterNo,
posMasterNoSuffix: posMaster.posMasterNoSuffix,
positionName: position.positionName,
posType:
position.posType == null
? null
: position.posType.posTypeName,
posLevel:
position.posLevel == null
? null
: position.posLevel.posLevelName,
posExecutive:
position.posExecutive == null
? null
: position.posExecutive.posExecutiveName,
};
data.push(node);
}),
);
}),
),
};
}),
);
}),
);
}),
);
}),
);
}),
);
return new HttpSuccess(data);
} catch (error) {
return error;
}