“揭秘职场温馨瞬间:飞书、企业微信、钉钉如何精准推送入职与生日祝福背后的数据魔法“

205 阅读1分钟

职场中,每个人肯定都收到过飞书、企业微信或者钉钉发来的入职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));

拿到周年数据,剩下的就是挨个发送了,这个后面有时间了再补充。当然生日祝福也是同样的逻辑。