staff_data/packages/client/src/tools/level.ts

137 lines
3.5 KiB
TypeScript
Raw Normal View History

2024-12-30 08:26:40 +08:00
/**
*
*
*
*
*
*
* - v1.0.0
* - v1.1.0
* - v1.2.0
*/
import dayjs from "dayjs";
/**
*
*
* 线
*
* @param probability 0-100
* @param severity 0-100
* @returns 1-44
*
* O(1)
* O(1)
*/
export function getRiskLevel(probability: number, severity: number) {
// 计算风险值
const riskValue = probability * severity;
// 分段评估风险等级
if (riskValue > 70) {
return 4;
} else if (riskValue > 42) {
return 3;
} else if (riskValue > 21) {
return 2;
}
return 1;
}
/**
*
*
*
*
*
* @param deadline Date对象或空值
* @returns 0-100100
*
* O(1)
* O(1)
*/
export function getDeadlineScore(deadline: string | Date | null | undefined) {
// 处理空值情况
if (!deadline) {
return 0;
}
// 计算距离截止日期的天数
const deadlineDays = dayjs().diff(dayjs(deadline), "day");
// 初始化基础评分
let deadlineScore = 25;
// 根据天数范围调整评分
if (deadlineDays > 365) {
deadlineScore = 100;
} else if (deadlineDays > 90) {
deadlineScore = 75;
} else if (deadlineDays > 30) {
deadlineScore = 50;
}
return deadlineScore;
}
/**
*
*
*
*
*
* @param probability 0-100
* @param severity 0-100
* @param impact 0-100
* @param cost 0-100
* @param deadline
* @returns 0-44
*
* O(1)
* O(1)
*/
export function getTroubleLevel(
probability: number,
severity: number,
impact: number,
cost: number,
deadline: string | Date
) {
// 计算距离截止日期的天数
const deadlineDays = dayjs().diff(dayjs(deadline), "day");
// 初始化紧急程度评分
let deadlineScore = 25;
// 根据天数范围调整评分
if (deadlineDays > 365) {
deadlineScore = 100;
} else if (deadlineDays > 90) {
deadlineScore = 75;
} else if (deadlineDays > 30) {
deadlineScore = 50;
}
// 计算加权总分
let total =
0.257 * probability +
0.325 * severity +
0.269 * impact +
0.084 * deadlineScore +
0.065 * cost;
// 根据总分评估问题级别
if (total > 90) {
return 4;
} else if (total > 60) {
return 3;
} else if (total > 30) {
return 2;
} else if (probability * severity * impact * cost !== 1) {
return 1;
} else {
return 0;
}
}