职场中,每个人肯定都收到过飞书、企业微信或者钉钉发来的入职1周年,2周年, ***, n周年的祝福,或者生日祝福。那么这些是如何实现的呢。今天从数据层面来分析下。
mapper和实体类的定义忽略,只讲主体逻辑
找到最早入职的人的入职时间
假定我们已经连上员工信息存储的数据库。
# SQL和实体类忽略,只讲主体逻辑
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));
拿到周年数据,剩下的就是挨个发送了,这个后面有时间了再补充。当然生日祝福也是同样的逻辑。