no message

This commit is contained in:
Bright 2025-03-04 15:49:24 +07:00
parent ac4d893f96
commit 3b9002f505
3 changed files with 227 additions and 8 deletions

View file

@ -0,0 +1,199 @@
import { ViewColumn, ViewEntity } from "typeorm";
@ViewEntity({
expression: `
WITH resultData AS (
SELECT
commandDateAffect,
positionName,
positionCee,
TIMESTAMPDIFF(
DAY,
LAG(MIN(commandDateAffect)) OVER (ORDER BY commandDateAffect), MIN(commandDateAffect)) AS days_diff,
TIMESTAMPDIFF(
DAY,
LAG(MIN(commandDateAffect)) OVER (ORDER BY commandDateAffect), MIN(commandDateAffect)) / 365.2524 AS 'Years',
TIMESTAMPDIFF(
DAY,
LAG(MIN(commandDateAffect)) OVER (ORDER BY commandDateAffect), MIN(commandDateAffect)) / 30.4375 % 12 AS 'Months',
TIMESTAMPDIFF(
DAY,
LAG(MIN(commandDateAffect)) OVER (ORDER BY commandDateAffect), MIN(commandDateAffect)) % 30.4375 AS 'Days',
posNo,
positionExecutive,
positionType,
positionLevel,
orgRoot,
orgChild1,
orgChild2,
orgChild3,
orgChild4,
commandCode,
commandName,
commandNo,
commandYear,
remark,
profileId,
ROW_NUMBER() OVER (PARTITION BY profileId ORDER BY commandDateAffect ASC) AS orderNumber
FROM (
SELECT
commandDateAffect,
commandDateSign,
positionName,
positionCee,
posNo,
positionExecutive,
positionType,
positionLevel,
orgRoot,
orgChild1,
orgChild2,
orgChild3,
orgChild4,
commandCode,
commandName,
commandNo,
commandYear,
remark,
profileId/*,
LAG(commandDateSign) OVER (ORDER BY commandDateAffect ASC, commandDateSign ASC) AS prevCommandDateSign,
@group := IF(@prevPosition = positionName, @group, @group + 1) AS groupedId,
@prevPosition := positionName*/
FROM
profileSalary/*,
(SELECT @group := 0, @prevPosition := NULL) AS vars*/
WHERE
commandCode IN (1, 2, 3, 4, 8, 10, 11, 12, 15, 16)
ORDER BY
commandDateAffect ASC, commandDateSign ASC
) AS groupedPosition
/*WHERE
prevCommandDateSign IS NULL OR commandDateSign >= prevCommandDateSign*/
GROUP BY
profileId, /*groupedId,*/ positionName, positionCee, positionType, positionLevel
)
SELECT
commandDateAffect,
positionName,
positionCee,
days_diff,
Years,
Months,
Days,
posNo,
positionExecutive,
positionType,
positionLevel,
orgRoot,
orgChild1,
orgChild2,
orgChild3,
orgChild4,
commandCode,
commandName,
commandNo,
commandYear,
remark,
profileId,
orderNumber
FROM resultData
UNION ALL
SELECT
CURDATE() AS commandDateAffect,
NULL AS positionName,
NULL AS positionCee,
TIMESTAMPDIFF(DAY, MAX(commandDateAffect), CURDATE()) AS days_diff,
TIMESTAMPDIFF(DAY, MAX(commandDateAffect), CURDATE()) / 365.2524 AS 'Years',
TIMESTAMPDIFF(DAY, MAX(commandDateAffect), CURDATE()) / 30.4375 % 12 AS 'Months',
TIMESTAMPDIFF(DAY, MAX(commandDateAffect), CURDATE()) % 30.4375 AS 'Days',
NULL AS posNo,
NULL AS positionExecutive,
NULL AS positionType,
NULL AS positionLevel,
NULL AS orgRoot,
NULL AS orgChild1,
NULL AS orgChild2,
NULL AS orgChild3,
NULL AS orgChild4,
NULL AS commandCode,
NULL AS commandName,
NULL AS commandNo,
NULL AS commandYear,
NULL AS remark,
profileId,
NULL AS orderNumber
FROM resultData
`,
})
export class viewCurrentTenureLevelOfficer {
@ViewColumn()
commandDateAffect: Date;
@ViewColumn()
days_diff: number;
@ViewColumn()
Years: number;
@ViewColumn()
Months: number;
@ViewColumn()
Days: number;
@ViewColumn()
positionName: string;
@ViewColumn()
positionCee: string;
@ViewColumn()
posNo: string;
@ViewColumn()
positionExecutive: string;
@ViewColumn()
positionType: string;
@ViewColumn()
positionLevel: string;
@ViewColumn()
orgRoot: string;
@ViewColumn()
orgChild1: string;
@ViewColumn()
orgChild2: string;
@ViewColumn()
orgChild3: string;
@ViewColumn()
orgChild4: string;
@ViewColumn()
commandCode: number;
@ViewColumn()
commandName: string;
@ViewColumn()
commandNo: string;
@ViewColumn()
commandYear: number;
@ViewColumn()
remark: string;
@ViewColumn()
profileId: string;
@ViewColumn()
orderNumber: number;
}

View file

@ -75,6 +75,16 @@ import { ViewColumn, ViewEntity } from "typeorm";
ROW_NUMBER() OVER (PARTITION BY vctoExc.profileId) AS vctoExc_number
FROM view_current_tenure_exc_officer vctoExc
WHERE vctoExc.orderNumber Is Null
),
PositionLevelDate AS (
SELECT
vctlo.Years,
vctlo.Months,
vctlo.Days,
vctlo.profileId,
ROW_NUMBER() OVER (PARTITION BY vctlo.profileId) AS vctlo_number
FROM view_current_tenure_level_officer vctlo
WHERE vctlo.orderNumber Is Null
)
SELECT
p.id as profileId,
@ -123,7 +133,10 @@ import { ViewColumn, ViewEntity } from "typeorm";
vcto.Days,
vctoExc.Years AS posExecutiveYears,
vctoExc.Months AS posExecutiveMonths,
vctoExc.Days AS posExecutiveDays
vctoExc.Days AS posExecutiveDays,
vctlo.Years AS levelYears,
vctlo.Months AS levelMonths,
vctlo.Days AS levelDays
FROM profile p
LEFT JOIN posLevel ON p.posLevelId = posLevel.id
LEFT JOIN posType ON p.posTypeId = posType.id
@ -131,6 +144,7 @@ import { ViewColumn, ViewEntity } from "typeorm";
LEFT JOIN Education ed ON p.id = ed.profileId AND ed.ed_number = 1
LEFT JOIN PositionDate vcto ON p.id = vcto.profileId AND vcto.vcto_number = 1
LEFT JOIN PositionExcDate vctoExc ON p.id = vctoExc.profileId AND vctoExc.vctoExc_number = 1
LEFT JOIN PositionLevelDate vctlo ON p.id = vctlo.profileId AND vctlo.vctlo_number = 1
`,
})
export class viewRegistryOfficer {
@ -253,4 +267,13 @@ export class viewRegistryOfficer {
@ViewColumn()
posExecutiveDays: number;
@ViewColumn()
levelYears: number;
@ViewColumn()
levelMonths: number;
@ViewColumn()
levelDays: number;
}