Merge branch 'develop' into adiDev

This commit is contained in:
Adisak 2025-10-27 14:59:55 +07:00
commit 5138a01461
15 changed files with 822 additions and 5077 deletions

View file

@ -20,6 +20,8 @@ import { In } from "typeorm";
import { RequestWithUser } from "../middlewares/user";
import { ApiName } from "../entities/ApiName";
import { ApiHistory } from "../entities/ApiHistory";
const jwt = require("jsonwebtoken");
@Route("api/v1/org/apiKey")
@Tags("ApiKey")
@Security("bearerAuth")
@ -32,6 +34,32 @@ export class ApiKeyController extends Controller {
private apiNameRepository = AppDataSource.getRepository(ApiName);
private apiHistoryRepository = AppDataSource.getRepository(ApiHistory);
/**
* API JWT token
*
* @summary JWT API Key
*/
@Post("verify")
async verifyApiKey(@Body() requestBody: { token: string }) {
try {
const jwtSecret = process.env.JWT_SECRET || "your-default-secret-key";
console.log("JWT_SECRET from env:", process.env.JWT_SECRET ? "exists" : "not found");
console.log("Using secret:", jwtSecret);
const decoded = jwt.verify(requestBody.token, jwtSecret);
return new HttpSuccess({
valid: true,
data: decoded,
});
} catch (error: any) {
console.error("JWT Verification Error:", error.message);
return new HttpSuccess({
valid: false,
error: error.message,
});
}
}
/**
* API Api Key
*
@ -52,8 +80,33 @@ export class ApiKeyController extends Controller {
const apiName = await this.apiNameRepository.find({
where: { id: In(requestBody.apiId) },
});
const apiKey = Object.assign(new ApiKey(), requestBody);
apiKey.keyApi = require("crypto").randomBytes(64).toString("base64");
// Create JWT token with embedded data
const tokenPayload = {
keyId: apiKey.id || require("crypto").randomUUID(),
name: apiKey.name,
accessType: apiKey.accessType,
dnaRootId: apiKey.dnaRootId,
dnaChild1Id: apiKey.dnaChild1Id,
dnaChild2Id: apiKey.dnaChild2Id,
dnaChild3Id: apiKey.dnaChild3Id,
dnaChild4Id: apiKey.dnaChild4Id,
apiIds: requestBody.apiId,
createdBy: request.user.sub,
createdAt: new Date().toISOString(),
iat: Math.floor(Date.now() / 1000),
};
// Sign JWT with secret (you should use environment variable for the secret)
const jwtSecret = process.env.JWT_SECRET || "your-default-secret-key";
const jwtToken = jwt.sign(tokenPayload, jwtSecret, {
expiresIn: "365d", // 1 year expiration
});
apiKey.keyApi = jwtToken;
apiKey.apiNames = apiName;
apiKey.createdUserId = request.user.sub;
apiKey.createdFullName = request.user.name;
@ -104,6 +157,12 @@ export class ApiKeyController extends Controller {
createdUserId: _data.createdUserId,
createdFullName: _data.createdFullName,
name: _data.name,
accessType: _data.accessType,
dnaRootId: _data.dnaRootId,
dnaChild1Id: _data.dnaChild1Id,
dnaChild2Id: _data.dnaChild2Id,
dnaChild3Id: _data.dnaChild3Id,
dnaChild4Id: _data.dnaChild4Id,
apiNames: _data.apiNames.map((x) => ({
id: x.id,
name: x.name,

View file

@ -68,7 +68,8 @@ export class ExRetirementController extends Controller {
throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่สามารถขอ Token ได้");
}
const scope = requestBody.type === "officer" ? "getOfficerRetireData" : "";
// const scope = requestBody.type === "officer" ? "getOfficerRetireData" : "";
const scope = "getOfficerRetireData";
const startRecord = requestBody.page !== 1 ? (requestBody.page - 1) * 25 : 0;
const formData = new FormData();
@ -78,6 +79,7 @@ export class ExRetirementController extends Controller {
formData.append("citizenID", requestBody.citizenID);
formData.append("firstNameTH", requestBody.firstNameTH);
formData.append("lastNameTH", requestBody.lastNameTH);
formData.append("officerTypeID", requestBody.type === "officer" ? "1" : "2");
const res = await axios.post(API_URL_BANGKOK + "/getData", formData, {
headers: {
@ -96,6 +98,38 @@ export class ExRetirementController extends Controller {
}
}
}
@Get("/document/{documentId}")
async getDocument(@Path("documentId") officerDocumentID: string) {
let retryCount = 0;
const maxRetries = 2;
while (retryCount < maxRetries) {
try {
const token = await getToken(clientId, clientSecret);
if (!token) {
throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่สามารถขอ Token ได้");
}
const formData = new FormData();
formData.append("scope", "getOfficerRetireFile");
formData.append("officerDocumentID", officerDocumentID);
const res = await axios.post(API_URL_BANGKOK + "/getData", formData, {
headers: {
Authorization: `Bearer ${token}`,
},
});
return res.data;
} catch (error: any) {
if (error.response?.status === 500 && retryCount < maxRetries - 1) {
TokenCache.delete(`${clientId}:${clientSecret}`);
retryCount++;
continue;
}
throw new HttpError(HttpStatusCode.INTERNAL_SERVER_ERROR, "ไม่สามารถติดต่อ API ได้");
}
}
}
}
async function getToken(ClientID: string, ClientSecret: string): Promise<string> {

View file

@ -1,6 +1,6 @@
import { Controller, Post, Route, Security, Tags, Request, UploadedFile } from "tsoa";
import { AppDataSource } from "../database/data-source";
import { In, IsNull, LessThanOrEqual, Not } from "typeorm";
import { In, IsNull, LessThanOrEqual, Not, Between } from "typeorm";
import HttpSuccess from "../interfaces/http-success";
import { UseInterceptors } from "@nestjs/common";
import { Profile } from "../entities/Profile";
@ -631,465 +631,529 @@ export class ImportDataController extends Controller {
async UploadFileSQLSalary(@Request() request: { user: Record<string, any> }) {
let rowCount = 0;
let _null: any = null;
let sqlStatements: string[] = [];
const batchSize = 200; // เพิ่ม batch size เพื่อประสิทธิภาพที่ดีขึ้น
const [profiles, total] = await AppDataSource.getRepository(Profile)
.createQueryBuilder("profile")
.select(["profile.citizenId", "profile.id"])
.orderBy("profile.citizenId", "ASC")
// .where("profile.citizenId = '3101702379675'")
// .where({
// citizenId: In([
// // "1100600109451",
// // "1209900075508",
// // "1739900231556",
// // "1809900305214",
// // "1920600228762",
// // "3101600963742",
// // "3102401171243",
// // "3120100454406",
// // "3180100306172",
// // "3700100094722",
// // "3809900116957",
// "3940900213929",
// ]),
// })
.leftJoinAndSelect("profile.profileSalary", "profileSalary")
// .where({ citizenId: "3101702379675" })
.where("profileSalary.id IS NULL")
// .skip(0)
// .take(10000)
.getManyAndCount();
for await (const _item of profiles) {
// ดึงข้อมูลมาโดยไม่ใส่ order
const existingProfile = await this.HR_POSITION_OFFICERRepo.find({
where: { CIT: _item.citizenId, FLAG_PERSON_TYPE: "1" },
// นับจำนวน profiles ทั้งหมดก่อน
const profileRepo = AppDataSource.getRepository(Profile);
const totalProfiles = await profileRepo.count();
console.log(
`Starting OPTIMIZED batch processing: ${totalProfiles} profiles, batch size: ${batchSize}`,
);
for (let offset = 0; offset < totalProfiles; offset += batchSize) {
const profiles = await profileRepo
.createQueryBuilder("profile")
.select(["profile.citizenId", "profile.id"])
.orderBy("profile.citizenId", "ASC")
.skip(offset)
.take(batchSize)
.getMany();
console.log(
`Processing batch ${Math.floor(offset / batchSize) + 1}/${Math.ceil(totalProfiles / batchSize)} - Querying ${profiles.length} profiles`,
);
const batchRecords = []; // Array สำหรับเก็บ records ที่จะ batch insert
// OPTIMIZATION 1: ดึงข้อมูล HR ทั้งหมดของ batch ในครั้งเดียว
const citizenIds = profiles.map((p) => p.citizenId);
const allHrData = await this.HR_POSITION_OFFICERRepo.createQueryBuilder("hr")
.where("hr.CIT IN (:...citizenIds)", { citizenIds })
.andWhere("hr.FLAG_PERSON_TYPE = :flag", { flag: "1" })
.orderBy("hr.CIT", "ASC")
.addOrderBy(
"CASE WHEN hr.MP_POS_DATE IS NULL OR hr.MP_POS_DATE = '' THEN 1 ELSE 0 END",
"ASC",
)
.addOrderBy("STR_TO_DATE(SUBSTRING_INDEX(hr.MP_POS_DATE, ' ', 1), '%d/%m/%Y')", "ASC")
.addOrderBy("hr.ORDER_MOVE_POSITION", "ASC")
.getMany();
// จัดกลุ่มข้อมูล HR ตาม citizenId
const hrDataByCitizenId = new Map();
allHrData.forEach((hr) => {
if (!hrDataByCitizenId.has(hr.CIT)) {
hrDataByCitizenId.set(hr.CIT, []);
}
hrDataByCitizenId.get(hr.CIT).push(hr);
});
// sort ด้วย JavaScript
existingProfile.sort((a, b) => {
let dateA = new Date().getTime();
let dateB = new Date().getTime();
if (a.MP_POS_DATE) {
const [datePart] = a.MP_POS_DATE.split(" ");
const [day, month, year] = datePart.split("/");
dateA = new Date(`${year}-${month.padStart(2, "0")}-${day.padStart(2, "0")}`).getTime();
}
if (b.MP_POS_DATE) {
const [datePart] = b.MP_POS_DATE.split(" ");
const [day, month, year] = datePart.split("/");
dateB = new Date(`${year}-${month.padStart(2, "0")}-${day.padStart(2, "0")}`).getTime();
}
if (dateA !== dateB) {
return dateA - dateB; // ASC
}
return a.ORDER_MOVE_POSITION - b.ORDER_MOVE_POSITION; // ASC
// OPTIMIZATION 2: ดึง existing ProfileSalary ทั้งหมดของ batch ในครั้งเดียว
const allHrIds = allHrData.map((hr) => hr.id.toString());
const existingSalaries = await this.salaryRepo.find({
where: { refId: In(allHrIds) },
select: ["refId"],
});
const existingSalaryRefIds = new Set(existingSalaries.map((s) => s.refId));
let order = 1;
for await (const item of existingProfile) {
rowCount++;
const profileSalary: any = new ProfileSalary();
profileSalary.profileId = _item.id;
profileSalary.order = order;
order = order + 1;
profileSalary.commandNo = isNaN(item.MP_COMMAND_NUM) ? null : item.MP_COMMAND_NUM;
profileSalary.commandYear = isNaN(item.MP_COMMAND_NUM)
? null
: item.CUR_YEAR > 2500
? item.CUR_YEAR - 543
: item.CUR_YEAR;
for (const _item of profiles) {
const existingProfile = hrDataByCitizenId.get(_item.citizenId) || [];
let MP_COMMAND_DATE = "";
if (item.MP_COMMAND_DATE) {
const [datePart] = item.MP_COMMAND_DATE.split(" ");
const [day, month, year] = datePart.split("/");
MP_COMMAND_DATE = `${year}-${month.padStart(2, "0")}-${day.padStart(2, "0")}`;
}
let MP_POS_DATE = "";
if (item.MP_POS_DATE) {
const [datePart] = item.MP_POS_DATE.split(" ");
const [day, month, year] = datePart.split("/");
MP_POS_DATE = `${year}-${month.padStart(2, "0")}-${day.padStart(2, "0")}`;
}
profileSalary.commandDateSign = MP_COMMAND_DATE == null ? _null : new Date(MP_COMMAND_DATE);
profileSalary.commandDateAffect = MP_POS_DATE == null ? _null : new Date(MP_POS_DATE);
if (
[
"0",
"11",
"22",
"31",
"39",
"45",
"46",
"47",
"49",
"50",
"51",
"60",
"61",
"62",
"99",
].includes(item.FLAG_TO_NAME_CODE)
) {
profileSalary.commandCode = "0";
profileSalary.commandName = "อื่น ๆ";
} else if (["1", "58"].includes(item.FLAG_TO_NAME_CODE)) {
profileSalary.commandCode = "1";
profileSalary.commandName = "บรรจุและแต่งตั้งผู้สอบแข่งขันได้";
} else if (["23"].includes(item.FLAG_TO_NAME_CODE)) {
profileSalary.commandCode = "2";
profileSalary.commandName = "บรรจุและแต่งตั้งผู้ได้รับคัดเลือก";
} else if (["3", "6", "34", "36", "37"].includes(item.FLAG_TO_NAME_CODE)) {
profileSalary.commandCode = "3";
profileSalary.commandName = "แต่งตั้ง ย้าย";
} else if (["10", "55", "56"].includes(item.FLAG_TO_NAME_CODE)) {
profileSalary.commandCode = "4";
profileSalary.commandName = "เลื่อน";
} else if (["14"].includes(item.FLAG_TO_NAME_CODE)) {
profileSalary.commandCode = "5";
profileSalary.commandName = "เลื่อนเงินเดือนตามปกติ";
} else if (
["8", "20", "24", "25", "43", "44", "52", "66", "67"].includes(item.FLAG_TO_NAME_CODE)
) {
profileSalary.commandCode = "6";
profileSalary.commandName = "เลื่อนเงินเดือนกรณีอื่น ๆ";
} else if (["-"].includes(item.FLAG_TO_NAME_CODE)) {
profileSalary.commandCode = "7";
profileSalary.commandName = "เงินพิเศษอื่น ๆ";
} else if (["38", "40", "53", "54"].includes(item.FLAG_TO_NAME_CODE)) {
profileSalary.commandCode = "8";
profileSalary.commandName = "ปรับโครงสร้าง";
} else if (["12"].includes(item.FLAG_TO_NAME_CODE)) {
profileSalary.commandCode = "9";
profileSalary.commandName = "พ้นทดลองปฏิบัติราชการ";
} else if (["2", "18"].includes(item.FLAG_TO_NAME_CODE)) {
profileSalary.commandCode = "10";
profileSalary.commandName = "บรรจุกลับ";
} else if (["4", "32", "33"].includes(item.FLAG_TO_NAME_CODE)) {
profileSalary.commandCode = "11";
profileSalary.commandName = "รับโอน";
} else if (["5"].includes(item.FLAG_TO_NAME_CODE)) {
profileSalary.commandCode = "12";
profileSalary.commandName = "ให้โอน";
} else if (["15", "95"].includes(item.FLAG_TO_NAME_CODE)) {
profileSalary.commandCode = "13";
profileSalary.commandName = "แก้ไขคำสั่ง";
} else if (["19"].includes(item.FLAG_TO_NAME_CODE)) {
profileSalary.commandCode = "14";
profileSalary.commandName = "ยกเลิกคำสั่ง";
} else if (["27", "35"].includes(item.FLAG_TO_NAME_CODE)) {
profileSalary.commandCode = "15";
profileSalary.commandName = "ลาออกจากราชการ";
} else if (["13", "17", "21", "28", "29", "30", "59"].includes(item.FLAG_TO_NAME_CODE)) {
profileSalary.commandCode = "16";
profileSalary.commandName = "พ้นจากราชการ";
} else if (["7", "9", "16", "26", "63", "68"].includes(item.FLAG_TO_NAME_CODE)) {
profileSalary.commandCode = "17";
profileSalary.commandName = "รักษาราชการ, ช่วยราชการ";
}
if (item.FLAG_TO_NAME_CODE == null && item.FLAG_TO_NAME == "ลาศึกษาต่อ") {
profileSalary.commandCode = "0";
profileSalary.commandName = "อื่น ๆ";
} else if (
item.FLAG_TO_NAME_CODE == null &&
(item.FLAG_TO_NAME == "เลื่อน 1 ขั้นและเลื่อนระดับ" ||
item.FLAG_TO_NAME == "เลื่อน 0.5 ขั้นและเลื่อนระดับ")
) {
profileSalary.commandCode = "4";
profileSalary.commandName = "เลื่อน";
} else if (item.FLAG_TO_NAME_CODE == null && item.FLAG_TO_NAME == "เลื่อนเงินเดือน") {
profileSalary.commandCode = "5";
profileSalary.commandName = "เลื่อนเงินเดือนตามปกติ";
} else if (
item.FLAG_TO_NAME_CODE == null &&
(item.FLAG_TO_NAME == "ปรับตามบัญชีเงินเดือนใหม่" ||
item.FLAG_TO_NAME == "เลื่อนเงินเดือน" ||
item.FLAG_TO_NAME == "ปรับเงินเดือนตาม กพ.")
) {
profileSalary.commandCode = "6";
profileSalary.commandName = "เลื่อนเงินเดือนกรณีอื่น ๆ";
} else if (
item.FLAG_TO_NAME_CODE == null &&
item.FLAG_TO_NAME == "แต่งตั้งตามการปรับปรุงโครงฯ"
) {
profileSalary.commandCode = "8";
profileSalary.commandName = "ปรับโครงสร้าง";
} else if (item.FLAG_TO_NAME_CODE == null && item.FLAG_TO_NAME == "พ้นทดลองปฏิบัติราชการ") {
profileSalary.commandCode = "9";
profileSalary.commandName = "พ้นทดลองปฏิบัติราชการ";
} else if (item.FLAG_TO_NAME_CODE == null && item.FLAG_TO_NAME == "ให้โอนมา") {
profileSalary.commandCode = "11";
profileSalary.commandName = "รับโอน";
} else if (
item.FLAG_TO_NAME_CODE == null &&
item.FLAG_TO_NAME == "โอนไปปฏิบัติราชการที่อื่น"
) {
profileSalary.commandCode = "12";
profileSalary.commandName = "ให้โอน";
} else if (item.FLAG_TO_NAME_CODE == null && item.FLAG_TO_NAME == "ยกเลิกคำสั่ง") {
profileSalary.commandCode = "14";
profileSalary.commandName = "ยกเลิกคำสั่ง";
} else if (item.FLAG_TO_NAME_CODE == null && item.FLAG_TO_NAME == "รักษาการในตำแหน่ง") {
profileSalary.commandCode = "17";
profileSalary.commandName = "รักษาราชการ, ช่วยราชการ";
}
if (
(profileSalary.commandCode == null || profileSalary.commandCode == undefined) &&
(profileSalary.commandName == null || profileSalary.commandName == undefined)
) {
let order = 1;
for (const item of existingProfile) {
rowCount++;
// ใช้ Set lookup แทนการ query database
if (existingSalaryRefIds.has(item.id.toString())) continue;
const profileSalary: any = new ProfileSalary();
profileSalary.profileId = _item.id;
profileSalary.order = order;
order = order + 1;
profileSalary.commandNo = isNaN(item.MP_COMMAND_NUM) ? null : item.MP_COMMAND_NUM;
// แก้ไข logic การกำหนด commandYear
if (isNaN(item.CUR_YEAR) || item.CUR_YEAR == null) {
profileSalary.commandYear = null;
} else {
profileSalary.commandYear = item.CUR_YEAR > 2500 ? item.CUR_YEAR - 543 : item.CUR_YEAR;
}
let MP_COMMAND_DATE = "";
if (item.MP_COMMAND_DATE && item.MP_COMMAND_DATE.trim() !== "") {
try {
const [datePart] = item.MP_COMMAND_DATE.split(" ");
const [day, month, year] = datePart.split("/");
if (day && month && year) {
MP_COMMAND_DATE = `${year}-${month.padStart(2, "0")}-${day.padStart(2, "0")}`;
}
} catch (error) {
console.warn(`Invalid MP_COMMAND_DATE format: ${item.MP_COMMAND_DATE}`);
}
}
let MP_POS_DATE = "";
if (item.MP_POS_DATE && item.MP_POS_DATE.trim() !== "") {
try {
const [datePart] = item.MP_POS_DATE.split(" ");
const [day, month, year] = datePart.split("/");
if (day && month && year) {
MP_POS_DATE = `${year}-${month.padStart(2, "0")}-${day.padStart(2, "0")}`;
}
} catch (error) {
console.warn(`Invalid MP_POS_DATE format: ${item.MP_POS_DATE}`);
}
}
profileSalary.commandDateSign =
MP_COMMAND_DATE == null ? _null : new Date(MP_COMMAND_DATE);
profileSalary.commandDateAffect = MP_POS_DATE == null ? _null : new Date(MP_POS_DATE);
if (
[
"อื่นๆ",
"กลับไปปฏิบัติงานทางต้นสังกัด",
"เปลี่ยนประเภทข้าราชการ",
"โอนสับเปลี่ยน",
"เข้ารับฝึกอบรม",
"ดูงาน",
"ศึกษาต่อ",
"ขยายเวลาเข้ารับการฝึกอบรม",
"ขยายเวลาศึกษาต่อ",
"รายงานตัวกลับเข้าปฏิบัติราชการ",
"ไม่ได้เลื่อนขั้น",
"ตัดเงินเดือน",
"ลดขั้นเงินเดือน",
"ให้ข้าราชการกลับเข้ารับราชการ",
"ไม่ระบุ",
].includes(item.FLAG_TO_NAME)
"0",
"11",
"22",
"31",
"39",
"45",
"46",
"47",
"49",
"50",
"51",
"60",
"61",
"62",
"99",
].includes(item.FLAG_TO_NAME_CODE)
) {
profileSalary.commandCode = "0";
profileSalary.commandName = "อื่น ๆ";
} else if (
[
"บรรจุและแต่งตั้งผู้สอบแข่งขันได้",
"ทดลองปฎิบัติราชการ",
"ทดลองปฏิบัติราชการและปรับวุฒิ",
"บรรจุใหม่",
].includes(item.FLAG_TO_NAME)
) {
} else if (["1", "58"].includes(item.FLAG_TO_NAME_CODE)) {
profileSalary.commandCode = "1";
profileSalary.commandName = "บรรจุและแต่งตั้งผู้สอบแข่งขันได้";
} else if (["บรรจุและแต่งตั้งผู้ได้รับการคัดเลือก"].includes(item.FLAG_TO_NAME)) {
} else if (["23"].includes(item.FLAG_TO_NAME_CODE)) {
profileSalary.commandCode = "2";
profileSalary.commandName = "บรรจุและแต่งตั้งผู้ได้รับคัดเลือก";
} else if (
[
"แต่งตั้ง (ย้ายสับเปลี่ยน)",
"แต่งตั้ง (ย้าย)",
"แต่งตั้ง",
"เปลี่ยนสายงาน",
"เปลี่ยนตำแหน่ง",
"ตัดโอนตำแหน่ง",
].includes(item.FLAG_TO_NAME)
) {
} else if (["3", "6", "34", "36", "37"].includes(item.FLAG_TO_NAME_CODE)) {
profileSalary.commandCode = "3";
profileSalary.commandName = "แต่งตั้ง ย้าย";
} else if (
["เลื่อนและแต่งตั้ง", "เลื่อนระดับ", "เลื่อนเงินเดือนและระดับ"].includes(
item.FLAG_TO_NAME,
)
) {
} else if (["10", "55", "56"].includes(item.FLAG_TO_NAME_CODE)) {
profileSalary.commandCode = "4";
profileSalary.commandName = "เลื่อน";
} else if (["เลื่อนขั้นเงินเดือน", "เลื่อนเงินเดือน"].includes(item.FLAG_TO_NAME)) {
} else if (["14"].includes(item.FLAG_TO_NAME_CODE)) {
profileSalary.commandCode = "5";
profileSalary.commandName = "เลื่อนเงินเดือนตามปกติ";
} else if (
[
"ปรับเงินเดือนตามคุณวุฒิ",
"ได้รับเงินตอบแทนพิเศษ",
"เงินเพิ่มการครองชีพชั่วคราว",
"เลื่อนขั้นเงินเดือนกรณีพิเศษ",
"ปรับอัตราเงินเดือนตามบัญชีอัตราเงินเดือนใหม่ ท้าย พ.ร.บ. เงินเดือนและเงินประจำตำ",
"ปรับอัตราเงินเดือนตามพระราชกฤษฎีกา การปรับอัตราเงินเดือนของข้าราชการ",
"เลื่อนขั้นเงินเดือน (เพิ่มเติม)",
"ปรับอัตราเงินเดือน",
"ให้ข้าราชการได้รับเงินเดือนตามคุณวุฒิ",
].includes(item.FLAG_TO_NAME)
["8", "20", "24", "25", "43", "44", "52", "66", "67"].includes(item.FLAG_TO_NAME_CODE)
) {
profileSalary.commandCode = "6";
profileSalary.commandName = "เลื่อนเงินเดือนกรณีอื่น ๆ";
} else if (["--"].includes(item.FLAG_TO_NAME)) {
} else if (["-"].includes(item.FLAG_TO_NAME_CODE)) {
profileSalary.commandCode = "7";
profileSalary.commandName = "เงินพิเศษอื่น ๆ";
} else if (["38", "40", "53", "54"].includes(item.FLAG_TO_NAME_CODE)) {
profileSalary.commandCode = "8";
profileSalary.commandName = "ปรับโครงสร้าง";
} else if (["12"].includes(item.FLAG_TO_NAME_CODE)) {
profileSalary.commandCode = "9";
profileSalary.commandName = "พ้นทดลองปฏิบัติราชการ";
} else if (["2", "18"].includes(item.FLAG_TO_NAME_CODE)) {
profileSalary.commandCode = "10";
profileSalary.commandName = "บรรจุกลับ";
} else if (["4", "32", "33"].includes(item.FLAG_TO_NAME_CODE)) {
profileSalary.commandCode = "11";
profileSalary.commandName = "รับโอน";
} else if (["5"].includes(item.FLAG_TO_NAME_CODE)) {
profileSalary.commandCode = "12";
profileSalary.commandName = "ให้โอน";
} else if (["15", "95"].includes(item.FLAG_TO_NAME_CODE)) {
profileSalary.commandCode = "13";
profileSalary.commandName = "แก้ไขคำสั่ง";
} else if (["19"].includes(item.FLAG_TO_NAME_CODE)) {
profileSalary.commandCode = "14";
profileSalary.commandName = "ยกเลิกคำสั่ง";
} else if (["27", "35"].includes(item.FLAG_TO_NAME_CODE)) {
profileSalary.commandCode = "15";
profileSalary.commandName = "ลาออกจากราชการ";
} else if (["13", "17", "21", "28", "29", "30", "59"].includes(item.FLAG_TO_NAME_CODE)) {
profileSalary.commandCode = "16";
profileSalary.commandName = "พ้นจากราชการ";
} else if (["7", "9", "16", "26", "63", "68"].includes(item.FLAG_TO_NAME_CODE)) {
profileSalary.commandCode = "17";
profileSalary.commandName = "รักษาราชการ, ช่วยราชการ";
}
if (item.FLAG_TO_NAME_CODE == null && item.FLAG_TO_NAME == "ลาศึกษาต่อ") {
profileSalary.commandCode = "0";
profileSalary.commandName = "อื่น ๆ";
} else if (
["ปรับโครงสร้าง", "แต่งตั้ง (จัดคนลงกรอบ)", "แต่งตั้งตามแผนอัตรากำลังฯ"].includes(
item.FLAG_TO_NAME,
)
item.FLAG_TO_NAME_CODE == null &&
(item.FLAG_TO_NAME == "เลื่อน 1 ขั้นและเลื่อนระดับ" ||
item.FLAG_TO_NAME == "เลื่อน 0.5 ขั้นและเลื่อนระดับ")
) {
profileSalary.commandCode = "4";
profileSalary.commandName = "เลื่อน";
} else if (item.FLAG_TO_NAME_CODE == null && item.FLAG_TO_NAME == "เลื่อนเงินเดือน") {
profileSalary.commandCode = "5";
profileSalary.commandName = "เลื่อนเงินเดือนตามปกติ";
} else if (
item.FLAG_TO_NAME_CODE == null &&
(item.FLAG_TO_NAME == "ปรับตามบัญชีเงินเดือนใหม่" ||
item.FLAG_TO_NAME == "เลื่อนเงินเดือน" ||
item.FLAG_TO_NAME == "ปรับเงินเดือนตาม กพ.")
) {
profileSalary.commandCode = "6";
profileSalary.commandName = "เลื่อนเงินเดือนกรณีอื่น ๆ";
} else if (
item.FLAG_TO_NAME_CODE == null &&
item.FLAG_TO_NAME == "แต่งตั้งตามการปรับปรุงโครงฯ"
) {
profileSalary.commandCode = "8";
profileSalary.commandName = "ปรับโครงสร้าง";
} else if (["พ้นทดลองปฏิบัติราชการ"].includes(item.FLAG_TO_NAME)) {
} else if (
item.FLAG_TO_NAME_CODE == null &&
item.FLAG_TO_NAME == "พ้นทดลองปฏิบัติราชการ"
) {
profileSalary.commandCode = "9";
profileSalary.commandName = "พ้นทดลองปฏิบัติราชการ";
} else if (
[
"บรรจุกลับ",
"บรรจุกลับข้าราชการ",
"บรรจุและแต่งตั้งผู้ไปรับราชการทหารกลับเข้ารับราชการ",
].includes(item.FLAG_TO_NAME)
) {
profileSalary.commandCode = "10";
profileSalary.commandName = "บรรจุกลับ";
} else if (
[
"รับโอนข้าราชการตามกฎหมายอื่น",
"รับโอนข้าราชการตามกฎหมายอื่น ผู้สอบแข่งขันได้",
"รับโอนข้าราชการตามกฏหมายอื่น โดยการคัดเลือก",
].includes(item.FLAG_TO_NAME)
) {
} else if (item.FLAG_TO_NAME_CODE == null && item.FLAG_TO_NAME == "ให้โอนมา") {
profileSalary.commandCode = "11";
profileSalary.commandName = "รับโอน";
} else if (["ให้โอน"].includes(item.FLAG_TO_NAME)) {
} else if (
item.FLAG_TO_NAME_CODE == null &&
item.FLAG_TO_NAME == "โอนไปปฏิบัติราชการที่อื่น"
) {
profileSalary.commandCode = "12";
profileSalary.commandName = "ให้โอน";
} else if (["แก้ไขคำสั่ง"].includes(item.FLAG_TO_NAME)) {
profileSalary.commandCode = "13";
profileSalary.commandName = "แก้ไขคำสั่ง";
} else if (["ยกเลิกคำสั่ง"].includes(item.FLAG_TO_NAME)) {
} else if (item.FLAG_TO_NAME_CODE == null && item.FLAG_TO_NAME == "ยกเลิกคำสั่ง") {
profileSalary.commandCode = "14";
profileSalary.commandName = "ยกเลิกคำสั่ง";
} else if (
[
"ลาออกจากราชการ",
"พ้นจากราชการ/ลาออกจากราชการตามมาตรการพัฒนาและบริหารกำลังคน",
].includes(item.FLAG_TO_NAME)
) {
profileSalary.commandCode = "15";
profileSalary.commandName = "ลาออกจากราชการ";
} else if (
[
"พ้นจากราชการ/เพื่อไปปฏิบัติราชการทหาร",
"เกษียณ",
"ไม่พ้นทดลองปฏิบัติราชการ",
"พ้นจากราชการ/ให้ออก",
"พ้นจากราชการ/ไล่ออก",
"พ้นจากราชการ/เสียชีวิต",
"พ้นจากราชการ/ปลดออก",
].includes(item.FLAG_TO_NAME)
) {
profileSalary.commandCode = "16";
profileSalary.commandName = "พ้นจากราชการ";
} else if (
[
"แต่งตั้งข้าราชการรักษาราชการแทน",
"ช่วยราชการ",
"รักษาการ",
"รักษาราชการแทน",
"มอบหมายให้ปฏิบัติหน้าที่",
"มอบหมายข้าราชการปฏิบัติหน้าที่แทน",
].includes(item.FLAG_TO_NAME)
) {
} else if (item.FLAG_TO_NAME_CODE == null && item.FLAG_TO_NAME == "รักษาการในตำแหน่ง") {
profileSalary.commandCode = "17";
profileSalary.commandName = "รักษาราชการ, ช่วยราชการ";
} else {
profileSalary.commandCode = "0";
profileSalary.commandName = item.FLAG_TO_NAME;
}
}
profileSalary.posNoAbb = item.POS_NUM_NAME;
profileSalary.posNo = item.POS_NUM_CODE;
profileSalary.positionName = item.WORK_LINE_NAME;
var positionType = _null;
var positionLevel = _null;
if (item.MP_CEE == "21") {
positionType = "ทั่วไป";
positionLevel = "ปฏิบัติงาน";
} else if (item.MP_CEE == "22") {
positionType = "ทั่วไป";
positionLevel = "ชำนาญงาน";
} else if (item.MP_CEE == "23") {
positionType = "ทั่วไป";
positionLevel = "อาวุโส";
} else if (item.MP_CEE == "24") {
positionType = "ทั่วไป";
positionLevel = "อาวุโสเฉพาะสายงานที่กำหนด";
} else if (item.MP_CEE == "25") {
positionType = "ทั่วไป";
positionLevel = "ทักษะพิเศษ";
} else if (item.MP_CEE == "26") {
positionType = "วิชาการ";
positionLevel = "ปฏิบัติการ";
} else if (item.MP_CEE == "27") {
positionType = "วิชาการ";
positionLevel = "ชำนาญการ";
} else if (item.MP_CEE == "28") {
positionType = "วิชาการ";
positionLevel = "ชำนาญการพิเศษ";
} else if (item.MP_CEE == "29") {
positionType = "วิชาการ";
positionLevel = "เชี่ยวชาญ";
} else if (item.MP_CEE == "30") {
positionType = "วิชาการ";
positionLevel = "ทรงคุณวุฒิ";
} else if (item.MP_CEE == "31") {
positionType = "วิชาการ";
positionLevel = "ทรงคุณวุฒิเฉพาะสายงานที่กำหนด";
} else if (item.MP_CEE == "32") {
positionType = "อำนวยการ";
positionLevel = "ต้น";
} else if (item.MP_CEE == "33") {
positionType = "อำนวยการ";
positionLevel = "สูง";
} else if (item.MP_CEE == "34") {
positionType = "บริหาร";
positionLevel = "ต้น";
} else if (item.MP_CEE == "35") {
positionType = "บริหาร";
positionLevel = "สูง";
} else {
profileSalary.positionCee = item.MP_CEE;
}
profileSalary.positionType = positionType;
profileSalary.positionLevel = positionLevel;
profileSalary.orgRoot = item.DEPARTMENT_NAME;
profileSalary.orgChild1 = item.DIVISION_NAME;
profileSalary.orgChild2 = item.SECTION_NAME;
profileSalary.orgChild3 = item.JOB_NAME;
if (item.DEPARTMENT_CODE == "50") {
profileSalary.orgRoot = item.DIVISION_NAME;
profileSalary.orgChild1 = item.SECTION_NAME;
profileSalary.orgChild2 = item.JOB_NAME;
}
profileSalary.positionExecutive = item.ADMIN_NAME ?? _null;
profileSalary.amount = isNaN(item.SALARY) ? null : item.SALARY;
profileSalary.remark = item.REMARK;
profileSalary.refId = item.id;
profileSalary.isEntry = false;
if (
(profileSalary.commandCode == null || profileSalary.commandCode == undefined) &&
(profileSalary.commandName == null || profileSalary.commandName == undefined)
) {
if (
[
"อื่นๆ",
"กลับไปปฏิบัติงานทางต้นสังกัด",
"เปลี่ยนประเภทข้าราชการ",
"โอนสับเปลี่ยน",
"เข้ารับฝึกอบรม",
"ดูงาน",
"ศึกษาต่อ",
"ขยายเวลาเข้ารับการฝึกอบรม",
"ขยายเวลาศึกษาต่อ",
"รายงานตัวกลับเข้าปฏิบัติราชการ",
"ไม่ได้เลื่อนขั้น",
"ตัดเงินเดือน",
"ลดขั้นเงินเดือน",
"ให้ข้าราชการกลับเข้ารับราชการ",
"ไม่ระบุ",
].includes(item.FLAG_TO_NAME)
) {
profileSalary.commandCode = "0";
profileSalary.commandName = "อื่น ๆ";
} else if (
[
"บรรจุและแต่งตั้งผู้สอบแข่งขันได้",
"ทดลองปฎิบัติราชการ",
"ทดลองปฏิบัติราชการและปรับวุฒิ",
"บรรจุใหม่",
].includes(item.FLAG_TO_NAME)
) {
profileSalary.commandCode = "1";
profileSalary.commandName = "บรรจุและแต่งตั้งผู้สอบแข่งขันได้";
} else if (["บรรจุและแต่งตั้งผู้ได้รับการคัดเลือก"].includes(item.FLAG_TO_NAME)) {
profileSalary.commandCode = "2";
profileSalary.commandName = "บรรจุและแต่งตั้งผู้ได้รับคัดเลือก";
} else if (
[
"แต่งตั้ง (ย้ายสับเปลี่ยน)",
"แต่งตั้ง (ย้าย)",
"แต่งตั้ง",
"เปลี่ยนสายงาน",
"เปลี่ยนตำแหน่ง",
"ตัดโอนตำแหน่ง",
].includes(item.FLAG_TO_NAME)
) {
profileSalary.commandCode = "3";
profileSalary.commandName = "แต่งตั้ง ย้าย";
} else if (
["เลื่อนและแต่งตั้ง", "เลื่อนระดับ", "เลื่อนเงินเดือนและระดับ"].includes(
item.FLAG_TO_NAME,
)
) {
profileSalary.commandCode = "4";
profileSalary.commandName = "เลื่อน";
} else if (["เลื่อนขั้นเงินเดือน", "เลื่อนเงินเดือน"].includes(item.FLAG_TO_NAME)) {
profileSalary.commandCode = "5";
profileSalary.commandName = "เลื่อนเงินเดือนตามปกติ";
} else if (
[
"ปรับเงินเดือนตามคุณวุฒิ",
"ได้รับเงินตอบแทนพิเศษ",
"เงินเพิ่มการครองชีพชั่วคราว",
"เลื่อนขั้นเงินเดือนกรณีพิเศษ",
"ปรับอัตราเงินเดือนตามบัญชีอัตราเงินเดือนใหม่ ท้าย พ.ร.บ. เงินเดือนและเงินประจำตำ",
"ปรับอัตราเงินเดือนตามพระราชกฤษฎีกา การปรับอัตราเงินเดือนของข้าราชการ",
"เลื่อนขั้นเงินเดือน (เพิ่มเติม)",
"ปรับอัตราเงินเดือน",
"ให้ข้าราชการได้รับเงินเดือนตามคุณวุฒิ",
].includes(item.FLAG_TO_NAME)
) {
profileSalary.commandCode = "6";
profileSalary.commandName = "เลื่อนเงินเดือนกรณีอื่น ๆ";
} else if (["--"].includes(item.FLAG_TO_NAME)) {
profileSalary.commandCode = "7";
profileSalary.commandName = "เงินพิเศษอื่น ๆ";
} else if (
["ปรับโครงสร้าง", "แต่งตั้ง (จัดคนลงกรอบ)", "แต่งตั้งตามแผนอัตรากำลังฯ"].includes(
item.FLAG_TO_NAME,
)
) {
profileSalary.commandCode = "8";
profileSalary.commandName = "ปรับโครงสร้าง";
} else if (["พ้นทดลองปฏิบัติราชการ"].includes(item.FLAG_TO_NAME)) {
profileSalary.commandCode = "9";
profileSalary.commandName = "พ้นทดลองปฏิบัติราชการ";
} else if (
[
"บรรจุกลับ",
"บรรจุกลับข้าราชการ",
"บรรจุและแต่งตั้งผู้ไปรับราชการทหารกลับเข้ารับราชการ",
].includes(item.FLAG_TO_NAME)
) {
profileSalary.commandCode = "10";
profileSalary.commandName = "บรรจุกลับ";
} else if (
[
"รับโอนข้าราชการตามกฎหมายอื่น",
"รับโอนข้าราชการตามกฎหมายอื่น ผู้สอบแข่งขันได้",
"รับโอนข้าราชการตามกฏหมายอื่น โดยการคัดเลือก",
].includes(item.FLAG_TO_NAME)
) {
profileSalary.commandCode = "11";
profileSalary.commandName = "รับโอน";
} else if (["ให้โอน"].includes(item.FLAG_TO_NAME)) {
profileSalary.commandCode = "12";
profileSalary.commandName = "ให้โอน";
} else if (["แก้ไขคำสั่ง"].includes(item.FLAG_TO_NAME)) {
profileSalary.commandCode = "13";
profileSalary.commandName = "แก้ไขคำสั่ง";
} else if (["ยกเลิกคำสั่ง"].includes(item.FLAG_TO_NAME)) {
profileSalary.commandCode = "14";
profileSalary.commandName = "ยกเลิกคำสั่ง";
} else if (
[
"ลาออกจากราชการ",
"พ้นจากราชการ/ลาออกจากราชการตามมาตรการพัฒนาและบริหารกำลังคน",
].includes(item.FLAG_TO_NAME)
) {
profileSalary.commandCode = "15";
profileSalary.commandName = "ลาออกจากราชการ";
} else if (
[
"พ้นจากราชการ/เพื่อไปปฏิบัติราชการทหาร",
"เกษียณ",
"ไม่พ้นทดลองปฏิบัติราชการ",
"พ้นจากราชการ/ให้ออก",
"พ้นจากราชการ/ไล่ออก",
"พ้นจากราชการ/เสียชีวิต",
"พ้นจากราชการ/ปลดออก",
].includes(item.FLAG_TO_NAME)
) {
profileSalary.commandCode = "16";
profileSalary.commandName = "พ้นจากราชการ";
} else if (
[
"แต่งตั้งข้าราชการรักษาราชการแทน",
"ช่วยราชการ",
"รักษาการ",
"รักษาราชการแทน",
"มอบหมายให้ปฏิบัติหน้าที่",
"มอบหมายข้าราชการปฏิบัติหน้าที่แทน",
].includes(item.FLAG_TO_NAME)
) {
profileSalary.commandCode = "17";
profileSalary.commandName = "รักษาราชการ, ช่วยราชการ";
} else {
profileSalary.commandCode = "0";
profileSalary.commandName = item.FLAG_TO_NAME;
}
}
profileSalary.posNoAbb = item.POS_NUM_NAME;
profileSalary.posNo = item.POS_NUM_CODE;
profileSalary.positionName = item.WORK_LINE_NAME;
var positionType = _null;
var positionLevel = _null;
if (item.MP_CEE == "21") {
positionType = "ทั่วไป";
positionLevel = "ปฏิบัติงาน";
} else if (item.MP_CEE == "22") {
positionType = "ทั่วไป";
positionLevel = "ชำนาญงาน";
} else if (item.MP_CEE == "23") {
positionType = "ทั่วไป";
positionLevel = "อาวุโส";
} else if (item.MP_CEE == "24") {
positionType = "ทั่วไป";
positionLevel = "อาวุโสเฉพาะสายงานที่กำหนด";
} else if (item.MP_CEE == "25") {
positionType = "ทั่วไป";
positionLevel = "ทักษะพิเศษ";
} else if (item.MP_CEE == "26") {
positionType = "วิชาการ";
positionLevel = "ปฏิบัติการ";
} else if (item.MP_CEE == "27") {
positionType = "วิชาการ";
positionLevel = "ชำนาญการ";
} else if (item.MP_CEE == "28") {
positionType = "วิชาการ";
positionLevel = "ชำนาญการพิเศษ";
} else if (item.MP_CEE == "29") {
positionType = "วิชาการ";
positionLevel = "เชี่ยวชาญ";
} else if (item.MP_CEE == "30") {
positionType = "วิชาการ";
positionLevel = "ทรงคุณวุฒิ";
} else if (item.MP_CEE == "31") {
positionType = "วิชาการ";
positionLevel = "ทรงคุณวุฒิเฉพาะสายงานที่กำหนด";
} else if (item.MP_CEE == "32") {
positionType = "อำนวยการ";
positionLevel = "ต้น";
} else if (item.MP_CEE == "33") {
positionType = "อำนวยการ";
positionLevel = "สูง";
} else if (item.MP_CEE == "34") {
positionType = "บริหาร";
positionLevel = "ต้น";
} else if (item.MP_CEE == "35") {
positionType = "บริหาร";
positionLevel = "สูง";
} else {
profileSalary.positionCee = item.MP_CEE;
}
profileSalary.positionType = positionType;
profileSalary.positionLevel = positionLevel;
profileSalary.orgRoot = item.DEPARTMENT_NAME;
profileSalary.orgChild1 = item.DIVISION_NAME;
profileSalary.orgChild2 = item.SECTION_NAME;
profileSalary.orgChild3 = item.JOB_NAME;
if (item.DEPARTMENT_CODE == "50") {
profileSalary.orgRoot = item.DIVISION_NAME;
profileSalary.orgChild1 = item.SECTION_NAME;
profileSalary.orgChild2 = item.JOB_NAME;
}
profileSalary.positionExecutive = item.ADMIN_NAME ?? _null;
profileSalary.amount = isNaN(item.SALARY) ? null : item.SALARY;
profileSalary.remark = item.REMARK;
profileSalary.refId = item.id;
profileSalary.isEntry = false;
const sal_pos_amount_1: any =
item.SAL_POS_AMOUNT_1 == null || item.SAL_POS_AMOUNT_1 == ""
? _null
: Number(item.SAL_POS_AMOUNT_1);
const sal_pos_amount_2: any =
item.SAL_POS_AMOUNT_2 == null || item.SAL_POS_AMOUNT_2 == ""
? _null
: Number(item.SAL_POS_AMOUNT_2);
profileSalary.positionSalaryAmount = sal_pos_amount_1 ?? sal_pos_amount_2;
const special_amt: any =
item.SPECIAL_AMT == null || item.SPECIAL_AMT == "" ? _null : Number(item.SPECIAL_AMT);
profileSalary.amountSpecial = special_amt;
profileSalary.posNumCodeSit = item.POS_NUM_CODE_SIT;
profileSalary.posNumCodeSitAbb = item.POS_NUM_CODE_SIT_ABB;
const sal_pos_amount_1: any =
item.SAL_POS_AMOUNT_1 == null || item.SAL_POS_AMOUNT_1 == ""
? _null
: isNaN(Number(item.SAL_POS_AMOUNT_1))
? _null
: Number(item.SAL_POS_AMOUNT_1);
const sal_pos_amount_2: any =
item.SAL_POS_AMOUNT_2 == null || item.SAL_POS_AMOUNT_2 == ""
? _null
: isNaN(Number(item.SAL_POS_AMOUNT_2))
? _null
: Number(item.SAL_POS_AMOUNT_2);
profileSalary.positionSalaryAmount = sal_pos_amount_1 ?? sal_pos_amount_2;
profileSalary.createdUserId = request.user.sub;
profileSalary.createdFullName = request.user.name;
profileSalary.lastUpdateUserId = request.user.sub;
profileSalary.lastUpdateFullName = request.user.name;
profileSalary.createdAt = new Date().toISOString().split("T")[0];
profileSalary.lastUpdatedAt = new Date().toISOString().split("T")[0];
console.log(">>>>>>>>>>>>>>>>>>>" + rowCount);
const special_amt: any =
item.SPECIAL_AMT == null || item.SPECIAL_AMT == ""
? _null
: isNaN(Number(item.SPECIAL_AMT))
? _null
: Number(item.SPECIAL_AMT);
profileSalary.amountSpecial = special_amt;
profileSalary.posNumCodeSit = item.POS_NUM_CODE_SIT;
profileSalary.posNumCodeSitAbb = item.POS_NUM_CODE_SIT_ABB;
profileSalary.createdUserId = request.user.sub;
profileSalary.createdFullName = request.user.name;
profileSalary.lastUpdateUserId = request.user.sub;
profileSalary.lastUpdateFullName = request.user.name;
profileSalary.createdAt = new Date().toISOString().split("T")[0];
profileSalary.lastUpdatedAt = new Date().toISOString().split("T")[0];
// เพิ่มลงใน batch array แทนการ save ทันที
batchRecords.push(profileSalary);
}
order = 1;
}
// Batch insert สำหรับ batch นี้
if (batchRecords.length > 0) {
try {
await this.salaryRepo.save(profileSalary);
// Debug: ตรวจสอบ NaN values ก่อน save
const hasNaN = batchRecords.some((record) => {
return Object.values(record).some((value) => typeof value === "number" && isNaN(value));
});
if (hasNaN) {
console.warn(
`Warning: Found NaN values in batch ${Math.floor(offset / batchSize) + 1}`,
);
// แทนที่ NaN ด้วย null
batchRecords.forEach((record) => {
Object.keys(record).forEach((key) => {
if (typeof record[key] === "number" && isNaN(record[key])) {
console.warn(`Replacing NaN in field ${key} with null`);
record[key] = null;
}
});
});
}
await this.salaryRepo.save(batchRecords);
console.log(
`Saved ${batchRecords.length} records for batch ${Math.floor(offset / batchSize) + 1}`,
);
} catch (error) {
console.error("Error executing function from controller:", item.CIT);
console.error(`Error saving batch ${Math.floor(offset / batchSize) + 1}:`, error);
}
}
order = 1;
}
console.log(`Total processed: ${rowCount} records`);
return new HttpSuccess();
}
@ -6226,4 +6290,26 @@ export class ImportDataController extends Controller {
return groups;
}, {});
}
@Post("updateCommandYearNull")
async updateCommandYearNull(@Request() request: { user: Record<string, any> }) {
const profiles = await this.salaryRepo.find({
where: {
createdAt: Between(
new Date("2025-10-23T00:00:00.000Z"),
new Date("2025-10-25T00:00:00.000Z"),
),
commandYear: IsNull(),
},
});
for (const item of profiles) {
console.log(item.id);
if (item.commandDateAffect) {
item.commandYear = item.commandDateAffect.getFullYear();
await this.salaryRepo.save(item);
}
}
return new HttpSuccess();
}
}

View file

@ -148,6 +148,7 @@ export class ProfileGovernmentHistoryController extends Controller {
let _workflow = await new permission().Workflow(req, profileId, "SYS_REGISTRY_OFFICER");
if (_workflow == false)
await new permission().PermissionOrgUserGet(req, "SYS_REGISTRY_OFFICER", profileId);
const orgRevision = await this.orgRevisionRepository.findOne({
select: ["id"],
where: {
@ -155,10 +156,22 @@ export class ProfileGovernmentHistoryController extends Controller {
orgRevisionIsCurrent: true,
},
});
// ค้นหา profile ก่อน
const record = await this.profileRepo.findOne({
where: {
where: { id: profileId },
relations: ["posType", "posLevel"],
});
if (!record) {
throw new HttpError(HttpStatus.NOT_FOUND, "ไม่พบข้อมูล profile");
}
// ค้นหา profileSalary แยกต่างหาก
const profileWithSalary = await this.profileRepo.findOne({
where: {
id: profileId,
profileSalary: {
profileSalary: {
commandCode: In([
"0",
"9",
@ -175,16 +188,19 @@ export class ProfileGovernmentHistoryController extends Controller {
"15",
"16",
]),
}
},
},
relations: ["posType", "posLevel", "profileSalary"],
relations: ["profileSalary"],
order: {
profileSalary: {
order: "DESC",
createdAt: "DESC"
}
}
createdAt: "DESC",
},
},
});
// ใช้ profileSalary จาก query ที่สอง หรือ [] ถ้าไม่เจอ
record.profileSalary = profileWithSalary?.profileSalary || [];
const posMaster = await this.posMasterRepo.findOne({
where: {
orgRevisionId: orgRevision?.id,
@ -236,8 +252,8 @@ export class ProfileGovernmentHistoryController extends Controller {
orgShortName = posMaster.orgChild4?.orgChild4ShortName ?? "";
}
}
let _OrgLeave:any = []
let _profileSalary:any = null;
let _OrgLeave: any = [];
let _profileSalary: any = null;
if (record?.isLeave && record?.profileSalary.length > 0) {
// _OrgLeave = [
// record?.profileSalary[0].orgChild4 ? record?.profileSalary[0].orgChild4 : null,
@ -247,15 +263,14 @@ export class ProfileGovernmentHistoryController extends Controller {
// record?.profileSalary[0].orgRoot ? record?.profileSalary[0].orgRoot : null,
// ];
if (record.leaveType == "RETIRE") {
_profileSalary = record?.profileSalary.length > 1
? record?.profileSalary[1]
: record?.profileSalary.length > 0
_profileSalary =
record?.profileSalary.length > 1
? record?.profileSalary[1]
: record?.profileSalary.length > 0
? record?.profileSalary[0]
: null;
} else {
_profileSalary = record?.profileSalary.length > 0
? record?.profileSalary[0]
: null;
_profileSalary = record?.profileSalary.length > 0 ? record?.profileSalary[0] : null;
}
if (_profileSalary) {
_OrgLeave = [
@ -269,17 +284,20 @@ export class ProfileGovernmentHistoryController extends Controller {
_OrgLeave = [];
}
}
const orgLeave = _OrgLeave.filter((x:any) => x !== undefined && x !== null).join("\n");
const orgLeave = _OrgLeave.filter((x: any) => x !== undefined && x !== null).join("\n");
const data = {
org: record?.isLeave == false ? org : orgLeave, //สังกัด
positionField: position == null ? null : position.positionField, //สายงาน
position: record?.position, //ตำแหน่ง
posLevel: record?.posLevel == null ? null : record?.posLevel.posLevelName, //ระดับ
posMasterNo: record?.isLeave == false
? posMaster == null ? null : `${orgShortName} ${posMaster.posMasterNo}`
: _profileSalary != null
? `${_profileSalary.posNoAbb} ${_profileSalary.posNo}`
: null, //เลขที่ตำแหน่ง
posMasterNo:
record?.isLeave == false
? posMaster == null
? null
: `${orgShortName} ${posMaster.posMasterNo}`
: _profileSalary != null
? `${_profileSalary.posNoAbb} ${_profileSalary.posNo}`
: null, //เลขที่ตำแหน่ง
posType: record?.posType == null ? null : record?.posType.posTypeName, //ประเภท
posExecutive:
position == null || position.posExecutive == null
@ -310,8 +328,20 @@ export class ProfileGovernmentHistoryController extends Controller {
orgRevisionIsCurrent: true,
},
});
// ค้นหา profile ก่อน
const record = await this.profileRepo.findOne({
where: {
where: { id: profileId },
relations: ["posType", "posLevel"],
});
if (!record) {
throw new HttpError(HttpStatus.NOT_FOUND, "ไม่พบข้อมูล profile");
}
// ค้นหา profileSalary แยกต่างหาก
const profileWithSalary = await this.profileRepo.findOne({
where: {
id: profileId,
profileSalary: {
commandCode: In([
@ -330,20 +360,19 @@ export class ProfileGovernmentHistoryController extends Controller {
"15",
"16",
]),
}
},
relations: {
posType: true,
posLevel: true,
profileSalary: true
},
},
relations: ["profileSalary"],
order: {
profileSalary: {
order: "DESC",
createdAt: "DESC"
}
}
createdAt: "DESC",
},
},
});
// ใช้ profileSalary จาก query ที่สอง หรือ [] ถ้าไม่เจอ
record.profileSalary = profileWithSalary?.profileSalary || [];
const posMaster = await this.posMasterRepo.findOne({
where: {
orgRevisionId: orgRevision?.id,
@ -395,8 +424,8 @@ export class ProfileGovernmentHistoryController extends Controller {
orgShortName = posMaster.orgChild4?.orgChild4ShortName;
}
}
let _OrgLeave:any = []
let _profileSalary:any = null;
let _OrgLeave: any = [];
let _profileSalary: any = null;
if (record?.isLeave && record?.profileSalary.length > 0) {
// _OrgLeave = [
// record?.profileSalary[0].orgChild4 ? record?.profileSalary[0].orgChild4 : null,
@ -406,15 +435,14 @@ export class ProfileGovernmentHistoryController extends Controller {
// record?.profileSalary[0].orgRoot ? record?.profileSalary[0].orgRoot : null,
// ];
if (record.leaveType == "RETIRE") {
_profileSalary = record?.profileSalary.length > 1
? record?.profileSalary[1]
: record?.profileSalary.length > 0
_profileSalary =
record?.profileSalary.length > 1
? record?.profileSalary[1]
: record?.profileSalary.length > 0
? record?.profileSalary[0]
: null;
} else {
_profileSalary = record?.profileSalary.length > 0
? record?.profileSalary[0]
: null;
_profileSalary = record?.profileSalary.length > 0 ? record?.profileSalary[0] : null;
}
if (_profileSalary) {
_OrgLeave = [
@ -428,19 +456,19 @@ export class ProfileGovernmentHistoryController extends Controller {
_OrgLeave = [];
}
}
const orgLeave = _OrgLeave.filter((x:any) => x !== undefined && x !== null).join("\n");
const orgLeave = _OrgLeave.filter((x: any) => x !== undefined && x !== null).join("\n");
const data = {
org: record?.isLeave == false ? org : orgLeave, //สังกัด
positionField: position == null ? null : position.positionField, //สายงาน
position: record?.position, //ตำแหน่ง
posLevel: record?.posLevel == null ? null : record?.posLevel.posLevelName, //ระดับ
posMasterNo:
record?.isLeave == false
? posMaster == null
? null
posMasterNo:
record?.isLeave == false
? posMaster == null
? null
: `${orgShortName} ${posMaster.posMasterNo}`
: _profileSalary != null
? `${_profileSalary.posNoAbb} ${_profileSalary.posNo}`
: _profileSalary != null
? `${_profileSalary.posNoAbb} ${_profileSalary.posNo}`
: null, //เลขที่ตำแหน่ง
posType: record?.posType == null ? null : record?.posType.posTypeName, //ประเภท
posExecutive:
@ -458,7 +486,7 @@ export class ProfileGovernmentHistoryController extends Controller {
govAgeAbsent: record?.govAgeAbsent,
govAgePlus: record?.govAgePlus,
reasonSameDate: record?.reasonSameDate,
isLeave: record?.isLeave
isLeave: record?.isLeave,
};
return new HttpSuccess(data);

View file

@ -149,36 +149,16 @@ export class ProfileGovernmentEmployeeController extends Controller {
orgRevisionIsCurrent: true,
},
});
// ค้นหา profile ก่อน
const record = await this.profileEmployeeRepo.findOne({
where: {
id: profileEmployeeId,
// profileSalary: {
// commandCode: In([
// "0",
// "9",
// "1",
// "2",
// "3",
// "4",
// "8",
// "10",
// "11",
// "12",
// "13",
// "14",
// "15",
// "16",
// ]),
// }
},
relations: ["posType", "posLevel"/*, "profileSalary"*/],
// order: {
// profileSalary: {
// order: "DESC",
// createdAt: "DESC"
// }
// }
where: { id: profileEmployeeId },
relations: ["posType", "posLevel"],
});
if (!record) {
throw new HttpError(HttpStatus.NOT_FOUND, "ไม่พบข้อมูล profile");
}
const posMaster = await this.posMasterRepo.findOne({
where: {
orgRevisionId: orgRevision?.id,
@ -217,10 +197,10 @@ export class ProfileGovernmentEmployeeController extends Controller {
orgShortName = posMaster.orgChild4?.orgChild4ShortName;
}
}
let _OrgLeave:any = []
let orgLeave:string = ""
let posNoLeave:string = ""
let _profileSalary:any = null;
let _OrgLeave: any = [];
let orgLeave: string = "";
let posNoLeave: string = "";
let _profileSalary: any = null;
if (record?.isLeave /*&& record?.profileSalary.length > 0*/) {
const profileSalary = await this.salaryRepo.find({
select: [
@ -230,7 +210,7 @@ export class ProfileGovernmentEmployeeController extends Controller {
"orgChild3",
"orgChild4",
"posNoAbb",
"posNo"
"posNo",
],
where: {
profileEmployeeId: profileEmployeeId,
@ -253,8 +233,8 @@ export class ProfileGovernmentEmployeeController extends Controller {
},
order: {
order: "DESC",
createdAt: "DESC"
}
createdAt: "DESC",
},
});
// _OrgLeave = [
// profileSalary.length > 0 && profileSalary[0].orgChild4 ? profileSalary[0].orgChild4 : null,
@ -264,15 +244,14 @@ export class ProfileGovernmentEmployeeController extends Controller {
// profileSalary.length > 0 && profileSalary[0].orgRoot ? profileSalary[0].orgRoot : null,
// ];
if (record.leaveType == "RETIRE") {
_profileSalary = profileSalary.length > 1
? profileSalary[1]
: profileSalary.length > 0
? profileSalary[0]
: null;
_profileSalary =
profileSalary.length > 1
? profileSalary[1]
: profileSalary.length > 0
? profileSalary[0]
: null;
} else {
_profileSalary = profileSalary.length > 0
? profileSalary[0]
: null
_profileSalary = profileSalary.length > 0 ? profileSalary[0] : null;
}
if (_profileSalary) {
_OrgLeave = [
@ -285,10 +264,9 @@ export class ProfileGovernmentEmployeeController extends Controller {
} else {
_OrgLeave = [];
}
orgLeave = _OrgLeave.filter((x:any) => x !== undefined && x !== null).join("\n");
posNoLeave = _profileSalary != null
? `${_profileSalary.posNoAbb} ${_profileSalary.posNo}`
: ""
orgLeave = _OrgLeave.filter((x: any) => x !== undefined && x !== null).join("\n");
posNoLeave =
_profileSalary != null ? `${_profileSalary.posNoAbb} ${_profileSalary.posNo}` : "";
}
const data = {
org: record?.isLeave == false ? org : orgLeave, //สังกัด
@ -297,9 +275,12 @@ export class ProfileGovernmentEmployeeController extends Controller {
record?.posLevel == null
? null
: `${record?.posType?.posTypeShortName ?? ""} ${record?.posLevel?.posLevelName ?? ""}`, //ระดับ
posMasterNo: record?.isLeave == false
? posMaster == null ? null : `${orgShortName} ${posMaster.posMasterNo}`
: posNoLeave/*record && record?.profileSalary.length > 0
posMasterNo:
record?.isLeave == false
? posMaster == null
? null
: `${orgShortName} ${posMaster.posMasterNo}`
: posNoLeave /*record && record?.profileSalary.length > 0
? `${record?.profileSalary[0].posNoAbb} ${record?.profileSalary[0].posNo}`
: null*/, //
posType: record?.posType == null ? null : record?.posType.posTypeName, //ประเภท
@ -326,34 +307,16 @@ export class ProfileGovernmentEmployeeController extends Controller {
orgRevisionIsCurrent: true,
},
});
// ค้นหา profile ก่อน
const record = await this.profileEmployeeRepo.findOne({
where: {
id: profileEmployeeId,
// profileSalary:{
// commandCode: In([
// "0",
// "9",
// "1",
// "2",
// "3",
// "4",
// "8",
// "10",
// "11",
// "12",
// "13",
// "14",
// "15",
// "16",
// ]),
// }
},
relations: {
posType: true,
posLevel: true,
// profileSalary: true
},
where: { id: profileEmployeeId },
relations: ["posType", "posLevel"],
});
if (!record) {
throw new HttpError(HttpStatus.NOT_FOUND, "ไม่พบข้อมูล profile");
}
const posMaster = await this.posMasterRepo.findOne({
where: {
orgRevisionId: orgRevision?.id,
@ -392,10 +355,10 @@ export class ProfileGovernmentEmployeeController extends Controller {
orgShortName = posMaster.orgChild4?.orgChild4ShortName;
}
}
let _OrgLeave:any = []
let orgLeave:string = ""
let posNoLeave:string = ""
let _profileSalary:any = null;
let _OrgLeave: any = [];
let orgLeave: string = "";
let posNoLeave: string = "";
let _profileSalary: any = null;
if (record?.isLeave /*&& record?.profileSalary.length > 0*/) {
const profileSalary = await this.salaryRepo.find({
select: [
@ -405,7 +368,7 @@ export class ProfileGovernmentEmployeeController extends Controller {
"orgChild3",
"orgChild4",
"posNoAbb",
"posNo"
"posNo",
],
where: {
profileEmployeeId: profileEmployeeId,
@ -428,8 +391,8 @@ export class ProfileGovernmentEmployeeController extends Controller {
},
order: {
order: "DESC",
createdAt: "DESC"
}
createdAt: "DESC",
},
});
// _OrgLeave = [
// profileSalary.length > 0 && profileSalary[0].orgChild4 ? profileSalary[0].orgChild4 : null,
@ -439,15 +402,14 @@ export class ProfileGovernmentEmployeeController extends Controller {
// profileSalary.length > 0 && profileSalary[0].orgRoot ? profileSalary[0].orgRoot : null,
// ];
if (record.leaveType == "RETIRE") {
_profileSalary = profileSalary.length > 1
? profileSalary[1]
: profileSalary.length > 0
? profileSalary[0]
: null;
_profileSalary =
profileSalary.length > 1
? profileSalary[1]
: profileSalary.length > 0
? profileSalary[0]
: null;
} else {
_profileSalary = profileSalary.length > 0
? profileSalary[0]
: null;
_profileSalary = profileSalary.length > 0 ? profileSalary[0] : null;
}
if (_profileSalary) {
_OrgLeave = [
@ -460,23 +422,23 @@ export class ProfileGovernmentEmployeeController extends Controller {
} else {
_OrgLeave = [];
}
orgLeave = _OrgLeave.filter((x:any) => x !== undefined && x !== null).join("\n");
posNoLeave = _profileSalary != null
? `${_profileSalary.posNoAbb} ${_profileSalary.posNo}`
: ""
orgLeave = _OrgLeave.filter((x: any) => x !== undefined && x !== null).join("\n");
posNoLeave =
_profileSalary != null ? `${_profileSalary.posNoAbb} ${_profileSalary.posNo}` : "";
}
const data = {
org: record?.isLeave == false ? org : orgLeave, //สังกัด
position: record?.position, //ตำแหน่ง
posLevel: record?.posLevel == null && record?.posType == null
? null
: `${record?.posType.posTypeShortName} ${record?.posLevel.posLevelName}`, //ระดับ
posMasterNo:
record?.isLeave == false
? posMaster == null
? null
posLevel:
record?.posLevel == null && record?.posType == null
? null
: `${record?.posType.posTypeShortName} ${record?.posLevel.posLevelName}`, //ระดับ
posMasterNo:
record?.isLeave == false
? posMaster == null
? null
: `${orgShortName} ${posMaster.posMasterNo}`
: posNoLeave/*record && record.profileSalary.length > 0
: posNoLeave /*record && record.profileSalary.length > 0
? `${record?.profileSalary[0].posNoAbb} ${record?.profileSalary[0].posNo}`
: null*/, //
posType: record?.posType == null ? null : record?.posType.posTypeName, //ประเภท
@ -490,7 +452,7 @@ export class ProfileGovernmentEmployeeController extends Controller {
govAgeAbsent: record?.govAgeAbsent ?? null, // ขาดราชการ
govAgePlus: record?.govAgePlus, // อายุราชการเกื้อกูล
dateRetireLaw: record?.dateRetireLaw ?? null, // วันที่เกษียฯอายุราชการตามกฎหมาย
isLeave: record?.isLeave
isLeave: record?.isLeave,
};
return new HttpSuccess(data);
}

View file

@ -21,6 +21,54 @@ export class ApiKey extends EntityBase {
})
keyApi: string;
@Column({
nullable: true,
comment: "accessType",
length: 40,
default: null,
})
accessType: string;
@Column({
nullable: true,
comment: "dnaRootId",
length: 40,
default: null,
})
dnaRootId: string;
@Column({
nullable: true,
comment: "dnaChild1Id",
length: 40,
default: null,
})
dnaChild1Id: string;
@Column({
nullable: true,
comment: "dnaChild2Id",
length: 40,
default: null,
})
dnaChild2Id: string;
@Column({
nullable: true,
comment: "dnaChild3Id",
length: 40,
default: null,
})
dnaChild3Id: string;
@Column({
nullable: true,
comment: "dnaChild4Id",
length: 40,
default: null,
})
dnaChild4Id: string;
@ManyToMany(() => ApiName, (apiName) => apiName.apiKeys)
apiNames: ApiName[];
@ -34,4 +82,22 @@ export class CreateApiKey {
@Column()
apiId: string[];
@Column()
accessType?: string;
@Column()
dnaRootId?: string;
@Column()
dnaChild1Id?: string;
@Column()
dnaChild2Id?: string;
@Column()
dnaChild3Id?: string;
@Column()
dnaChild4Id?: string;
}

View file

@ -1,34 +0,0 @@
import { MigrationInterface, QueryRunner } from "typeorm";
export class Update2107202611411754401420685 implements MigrationInterface {
name = 'Update2107202611411754401420685'
public async up(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(`ALTER TABLE \`commandRecive\` ADD \`posNo\` varchar(255) NULL COMMENT 'เลขที่ตำแหน่ง'`);
await queryRunner.query(`ALTER TABLE \`profileEmployeeHistory\` ADD \`birthDateOld\` datetime NULL COMMENT 'วันเกิดเดิม โดยจะบันทึกเมื่อมีการแก้ไขข้อมูลส่วนตัว'`);
await queryRunner.query(`ALTER TABLE \`profileHistory\` ADD \`birthDateOld\` datetime NULL COMMENT 'วันเกิดเดิม โดยจะบันทึกเมื่อมีการแก้ไขข้อมูลส่วนตัว'`);
await queryRunner.query(`ALTER TABLE \`profileTraining\` CHANGE \`isEntry\` \`isEntry\` tinyint NOT NULL COMMENT 'ข้อมูลจาก Entry' DEFAULT 0`);
await queryRunner.query(`ALTER TABLE \`metaStateOperator\` CHANGE \`createdFullName\` \`createdFullName\` varchar(200) NOT NULL COMMENT 'ชื่อ User ที่สร้างข้อมูล' DEFAULT 'System Administrator'`);
await queryRunner.query(`ALTER TABLE \`metaStateOperator\` CHANGE \`lastUpdateFullName\` \`lastUpdateFullName\` varchar(200) NOT NULL COMMENT 'ชื่อ User ที่แก้ไขข้อมูลล่าสุด' DEFAULT 'System Administrator'`);
await queryRunner.query(`ALTER TABLE \`metaWorkflow\` CHANGE \`createdFullName\` \`createdFullName\` varchar(200) NOT NULL COMMENT 'ชื่อ User ที่สร้างข้อมูล' DEFAULT 'System Administrator'`);
await queryRunner.query(`ALTER TABLE \`metaWorkflow\` CHANGE \`lastUpdateFullName\` \`lastUpdateFullName\` varchar(200) NOT NULL COMMENT 'ชื่อ User ที่แก้ไขข้อมูลล่าสุด' DEFAULT 'System Administrator'`);
await queryRunner.query(`ALTER TABLE \`metaState\` CHANGE \`createdFullName\` \`createdFullName\` varchar(200) NOT NULL COMMENT 'ชื่อ User ที่สร้างข้อมูล' DEFAULT 'System Administrator'`);
await queryRunner.query(`ALTER TABLE \`metaState\` CHANGE \`lastUpdateFullName\` \`lastUpdateFullName\` varchar(200) NOT NULL COMMENT 'ชื่อ User ที่แก้ไขข้อมูลล่าสุด' DEFAULT 'System Administrator'`);
await queryRunner.query(`ALTER TABLE \`profileSalaryHistory\` ADD CONSTRAINT \`FK_f1ded3e1f83ab2437f739a14f38\` FOREIGN KEY (\`profileSalaryId\`) REFERENCES \`profileSalary\`(\`id\`) ON DELETE NO ACTION ON UPDATE NO ACTION`);
}
public async down(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(`ALTER TABLE \`profileSalaryHistory\` DROP FOREIGN KEY \`FK_f1ded3e1f83ab2437f739a14f38\``);
await queryRunner.query(`ALTER TABLE \`metaState\` CHANGE \`lastUpdateFullName\` \`lastUpdateFullName\` varchar(200) NOT NULL COMMENT 'ชื่อ User ที่แก้ไขข้อมูลล่าสุด' DEFAULT 'string'`);
await queryRunner.query(`ALTER TABLE \`metaState\` CHANGE \`createdFullName\` \`createdFullName\` varchar(200) NOT NULL COMMENT 'ชื่อ User ที่สร้างข้อมูล' DEFAULT 'string'`);
await queryRunner.query(`ALTER TABLE \`metaWorkflow\` CHANGE \`lastUpdateFullName\` \`lastUpdateFullName\` varchar(200) NOT NULL COMMENT 'ชื่อ User ที่แก้ไขข้อมูลล่าสุด' DEFAULT 'string'`);
await queryRunner.query(`ALTER TABLE \`metaWorkflow\` CHANGE \`createdFullName\` \`createdFullName\` varchar(200) NOT NULL COMMENT 'ชื่อ User ที่สร้างข้อมูล' DEFAULT 'string'`);
await queryRunner.query(`ALTER TABLE \`metaStateOperator\` CHANGE \`lastUpdateFullName\` \`lastUpdateFullName\` varchar(200) NOT NULL COMMENT 'ชื่อ User ที่แก้ไขข้อมูลล่าสุด' DEFAULT 'string'`);
await queryRunner.query(`ALTER TABLE \`metaStateOperator\` CHANGE \`createdFullName\` \`createdFullName\` varchar(200) NOT NULL COMMENT 'ชื่อ User ที่สร้างข้อมูล' DEFAULT 'string'`);
await queryRunner.query(`ALTER TABLE \`profileTraining\` CHANGE \`isEntry\` \`isEntry\` tinyint NOT NULL DEFAULT '0'`);
await queryRunner.query(`ALTER TABLE \`profileHistory\` DROP COLUMN \`birthDateOld\``);
await queryRunner.query(`ALTER TABLE \`profileEmployeeHistory\` DROP COLUMN \`birthDateOld\``);
await queryRunner.query(`ALTER TABLE \`commandRecive\` DROP COLUMN \`posNo\``);
}
}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -1,20 +0,0 @@
import { MigrationInterface, QueryRunner } from "typeorm";
export class UpdateRegistryFixLengthPrefix1756357065498 implements MigrationInterface {
name = 'UpdateRegistryFixLengthPrefix1756357065498'
public async up(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(`ALTER TABLE \`registryEmployee\` DROP COLUMN \`prefix\``);
await queryRunner.query(`ALTER TABLE \`registryEmployee\` ADD \`prefix\` varchar(40) NULL COMMENT 'คำนำหน้าชื่อ เช่น นาย นาง นางสาว'`);
await queryRunner.query(`ALTER TABLE \`registry\` DROP COLUMN \`prefix\``);
await queryRunner.query(`ALTER TABLE \`registry\` ADD \`prefix\` varchar(40) NULL COMMENT 'คำนำหน้าชื่อ เช่น นาย นาง นางสาว'`);
}
public async down(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(`ALTER TABLE \`registry\` DROP COLUMN \`prefix\``);
await queryRunner.query(`ALTER TABLE \`registry\` ADD \`prefix\` varchar(20) NULL COMMENT 'คำนำหน้าชื่อ เช่น นาย นาง นางสาว'`);
await queryRunner.query(`ALTER TABLE \`registryEmployee\` DROP COLUMN \`prefix\``);
await queryRunner.query(`ALTER TABLE \`registryEmployee\` ADD \`prefix\` varchar(20) NULL COMMENT 'คำนำหน้าชื่อ เช่น นาย นาง นางสาว'`);
}
}

View file

@ -1,14 +0,0 @@
import { MigrationInterface, QueryRunner } from "typeorm";
export class UpdateRegistrymployereAddFieldEmployeeClass1756364862810 implements MigrationInterface {
name = 'UpdateRegistrymployereAddFieldEmployeeClass1756364862810'
public async up(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(`ALTER TABLE \`registryEmployee\` ADD \`employeeClass\` varchar(40) NULL COMMENT 'ประเภทลูกจ้าง (perm->ลูกจ้างประจำ temp->ลูกจ้างชั่วคราว)'`);
}
public async down(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(`ALTER TABLE \`registryEmployee\` DROP COLUMN \`employeeClass\``);
}
}

View file

@ -1,36 +0,0 @@
import { MigrationInterface, QueryRunner } from "typeorm";
export class UpdateDataTypeFieldsRegistryAndRegistryEmpployee1757484721787 implements MigrationInterface {
name = 'UpdateDataTypeFieldsRegistryAndRegistryEmpployee1757484721787'
public async up(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(`ALTER TABLE \`registry\` DROP COLUMN \`degrees\``);
await queryRunner.query(`ALTER TABLE \`registry\` ADD \`degrees\` text NULL COMMENT 'วุฒิการศึกษา'`);
await queryRunner.query(`ALTER TABLE \`registry\` DROP COLUMN \`educationLevels\``);
await queryRunner.query(`ALTER TABLE \`registry\` ADD \`educationLevels\` text NULL COMMENT 'ระดับศึกษา'`);
await queryRunner.query(`ALTER TABLE \`registry\` DROP COLUMN \`fields\``);
await queryRunner.query(`ALTER TABLE \`registry\` ADD \`fields\` text NULL COMMENT 'สาขาวิชา/ทาง'`);
await queryRunner.query(`ALTER TABLE \`registryEmployee\` DROP COLUMN \`degrees\``);
await queryRunner.query(`ALTER TABLE \`registryEmployee\` ADD \`degrees\` text NULL COMMENT 'วุฒิการศึกษา'`);
await queryRunner.query(`ALTER TABLE \`registryEmployee\` DROP COLUMN \`educationLevels\``);
await queryRunner.query(`ALTER TABLE \`registryEmployee\` ADD \`educationLevels\` text NULL COMMENT 'ระดับศึกษา'`);
await queryRunner.query(`ALTER TABLE \`registryEmployee\` DROP COLUMN \`fields\``);
await queryRunner.query(`ALTER TABLE \`registryEmployee\` ADD \`fields\` text NULL COMMENT 'สาขาวิชา/ทาง'`);
}
public async down(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(`ALTER TABLE \`registryEmployee\` DROP COLUMN \`fields\``);
await queryRunner.query(`ALTER TABLE \`registryEmployee\` ADD \`fields\` varchar(255) NULL COMMENT 'สาขาวิชา/ทาง'`);
await queryRunner.query(`ALTER TABLE \`registryEmployee\` DROP COLUMN \`educationLevels\``);
await queryRunner.query(`ALTER TABLE \`registryEmployee\` ADD \`educationLevels\` varchar(255) NULL COMMENT 'ระดับศึกษา'`);
await queryRunner.query(`ALTER TABLE \`registryEmployee\` DROP COLUMN \`degrees\``);
await queryRunner.query(`ALTER TABLE \`registryEmployee\` ADD \`degrees\` varchar(255) NULL COMMENT 'วุฒิการศึกษา'`);
await queryRunner.query(`ALTER TABLE \`registry\` DROP COLUMN \`fields\``);
await queryRunner.query(`ALTER TABLE \`registry\` ADD \`fields\` varchar(255) NULL COMMENT 'สาขาวิชา/ทาง'`);
await queryRunner.query(`ALTER TABLE \`registry\` DROP COLUMN \`educationLevels\``);
await queryRunner.query(`ALTER TABLE \`registry\` ADD \`educationLevels\` varchar(255) NULL COMMENT 'ระดับศึกษา'`);
await queryRunner.query(`ALTER TABLE \`registry\` DROP COLUMN \`degrees\``);
await queryRunner.query(`ALTER TABLE \`registry\` ADD \`degrees\` varchar(255) NULL COMMENT 'วุฒิการศึกษา'`);
}
}

View file

@ -0,0 +1,24 @@
import { MigrationInterface, QueryRunner } from "typeorm";
export class UpdateTableApiKeyAddAccessType1761330464755 implements MigrationInterface {
name = 'UpdateTableApiKeyAddAccessType1761330464755'
public async up(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(`ALTER TABLE \`apiKey\` ADD \`accessType\` varchar(40) NULL COMMENT 'accessType'`);
await queryRunner.query(`ALTER TABLE \`apiKey\` ADD \`dnaRootId\` varchar(40) NULL COMMENT 'dnaRootId'`);
await queryRunner.query(`ALTER TABLE \`apiKey\` ADD \`dnaChild1Id\` varchar(40) NULL COMMENT 'dnaChild1Id'`);
await queryRunner.query(`ALTER TABLE \`apiKey\` ADD \`dnaChild2Id\` varchar(40) NULL COMMENT 'dnaChild2Id'`);
await queryRunner.query(`ALTER TABLE \`apiKey\` ADD \`dnaChild3Id\` varchar(40) NULL COMMENT 'dnaChild3Id'`);
await queryRunner.query(`ALTER TABLE \`apiKey\` ADD \`dnaChild4Id\` varchar(40) NULL COMMENT 'dnaChild4Id'`);
}
public async down(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(`ALTER TABLE \`apiKey\` DROP COLUMN \`dnaChild4Id\``);
await queryRunner.query(`ALTER TABLE \`apiKey\` DROP COLUMN \`dnaChild3Id\``);
await queryRunner.query(`ALTER TABLE \`apiKey\` DROP COLUMN \`dnaChild2Id\``);
await queryRunner.query(`ALTER TABLE \`apiKey\` DROP COLUMN \`dnaChild1Id\``);
await queryRunner.query(`ALTER TABLE \`apiKey\` DROP COLUMN \`dnaRootId\``);
await queryRunner.query(`ALTER TABLE \`apiKey\` DROP COLUMN \`accessType\``);
}
}