职场中,每个人肯定都收到过飞书、企业微信或者钉钉发来的入职1周年,2周年, 乃至n周年的祝福,或者生日祝福。那么这些温馨的提醒是如何实现的呢?本文将从数据层面来分析下。
首先,让我们忽略mapper和实体类的定义,本次只讲主体逻辑
找到最早入职的人的入职时间
假定我们已经连上员工信息存储的数据库,通过特定的方法获取最早入职的员工的入职时间。
OffsetDateTime earliestStartDate = employeeMapper.getEarliestStartDate();
获取系统时间并初始化周年时间
时间的处理可以参考OffsetDateTime类
OffsetDateTime curTime = OffsetDateTime.now();
String initialPeriod = 1;
OffsetDateTime offsetDateTimeYear = curTime.plusYears(-initialPeriod);
String patten = "yyyy-MM-dd HH:mm:ss"
String offsetTimeYmd = offsetDateTimeYear.format(DateTimeFormatter.ofPattern(patten));
遍历获取1,2,……,n周年数据
以最早入职的人的入职时间为基准,进行遍历操作,直到当前时间早于该基准时间。
List<EmployeeDto> result = new ArrayList<>();
while(earliestStartDate.isBefore(offsetDateTimeYear)){
// getEmployeeByStartTime方法如果考虑性能,可以使用分页。如果数据量不大的话,加索引,暴力查。
List<EmployeeDto> EmployeeList = employeeService.getEmployeeByStartTime(offsetTimeYmd + "00:00:00", offsetTimeYmd + "23:59:59");
if(!ObjectUtils.isEmpty(EmployeeList) && EmployeeList.size() > 0){
result.addAll(carOwnerList);
}
initialPeriod += 1;
offsetDateTimeYear = curTime.minusYears(initialPeriod);
offsetTimeYmd = offsetDateTimeYear.format(DateTimeFormatter.ofPattern(patten));
当我们成功拿到周年数据后,剩下的工作就是挨个发送祝福了。当然,生日祝福的实现逻辑也是类似的。发送祝福的逻辑,如果后续有时间,我们会进一步介绍具体实现方式。