基于Scala的员工离职预警
时间: 2024-05-12 21:18:59 浏览: 4
以下是一个基于Scala的员工离职预警系统的示例:
```scala
import java.time.LocalDate
case class Employee(name: String, department: String, hireDate: LocalDate, lastEvaluationDate: LocalDate, evaluationScore: Double)
class EmployeeService(employees: List[Employee]) {
def getEmployeesByDepartment(department: String): List[Employee] = {
employees.filter(_.department == department)
}
def getEmployeesByHireDate(hireDate: LocalDate): List[Employee] = {
employees.filter(_.hireDate == hireDate)
}
def getEmployeesByEvaluationScore(evaluationScore: Double): List[Employee] = {
employees.filter(_.evaluationScore <= evaluationScore)
}
def getEmployeesByLastEvaluationDate(lastEvaluationDate: LocalDate): List[Employee] = {
employees.filter(_.lastEvaluationDate == lastEvaluationDate)
}
def getEmployeesByDaysSinceLastEvaluation(days: Int): List[Employee] = {
val lastEvaluationThreshold = LocalDate.now().minusDays(days)
employees.filter(_.lastEvaluationDate.isBefore(lastEvaluationThreshold))
}
def getEmployeesAtRiskOfLeaving(daysSinceLastEvaluationThreshold: Int, evaluationScoreThreshold: Double): List[Employee] = {
employees.filter(e => e.lastEvaluationDate.isBefore(LocalDate.now().minusDays(daysSinceLastEvaluationThreshold)) && e.evaluationScore <= evaluationScoreThreshold)
}
}
object EmployeeServiceTest extends App {
val employees = List(
Employee("Alice", "Sales", LocalDate.of(2017, 1, 1), LocalDate.of(2020, 1, 1), 3.0),
Employee("Bob", "Sales", LocalDate.of(2018, 1, 1), LocalDate.of(2020, 1, 1), 2.5),
Employee("Charlie", "Marketing", LocalDate.of(2016, 1, 1), LocalDate.of(2020, 1, 1), 4.0),
Employee("Dave", "Marketing", LocalDate.of(2019, 1, 1), LocalDate.of(2020, 1, 1), 4.5)
)
val employeeService = new EmployeeService(employees)
// get employees by department
val salesEmployees = employeeService.getEmployeesByDepartment("Sales")
println(salesEmployees)
// get employees by hire date
val jan2018Employees = employeeService.getEmployeesByHireDate(LocalDate.of(2018, 1, 1))
println(jan2018Employees)
// get employees by evaluation score
val lowPerformingEmployees = employeeService.getEmployeesByEvaluationScore(3.0)
println(lowPerformingEmployees)
// get employees by last evaluation date
val jan2020Employees = employeeService.getEmployeesByLastEvaluationDate(LocalDate.of(2020, 1, 1))
println(jan2020Employees)
// get employees by days since last evaluation
val employeesNotEvaluatedIn6Months = employeeService.getEmployeesByDaysSinceLastEvaluation(180)
println(employeesNotEvaluatedIn6Months)
// get employees at risk of leaving
val employeesAtRiskOfLeaving = employeeService.getEmployeesAtRiskOfLeaving(365, 3.0)
println(employeesAtRiskOfLeaving)
}
```
该示例包含一个`Employee`类,其中包含员工的姓名、部门、入职日期、上次评估日期和评估分数。还有一个`EmployeeService`类,其中包含各种获取员工列表的方法,例如按部门、入职日期、评估分数和上次评估日期过滤员工。此外,还有一个`getEmployeesAtRiskOfLeaving`方法,它将返回满足指定标准的员工列表,这些员工处于离职风险状态,这些标准包括超过指定天数未进行评估和评估分数低于指定分数。
该示例还包含一个`EmployeeServiceTest`对象,它包含一些示例用法,例如获取特定日期入职的员工,获取特定部门的员工以及获取评估分数低于特定分数的员工。