ConversionNoticeService.java 3.59 KB
package com.pipihelper.project.feishu.service.anniversary;

import com.pipihelper.project.feishu.dto.FeiShuConfig;
import com.pipihelper.project.feishu.dto.msg.FeiShuMsgDTO;
import com.pipihelper.project.feishu.dto.employee.FeiShuEmployeeDTO;
import com.pipihelper.project.feishu.service.FeiShuApiService;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.time.LocalDate;
import java.util.List;
import java.util.stream.Collectors;

/**
 * 飞书转正日提醒
 */
@Service
@Slf4j
public class ConversionNoticeService extends AbstractNoticeService{

    @Autowired
    private FeiShuApiService feiShuApiService;

    @Resource
    private FeiShuConfig feiShuConfig;

    /**
     * 逻辑来自HR
     * 转正日为入职日过6个月
     * 一般是入职是X月Y日,那么6个月是到X+6月Y-1日到期,第二天的X+6月Y日是转正的第一天了
     * 特殊情况就是有一些月份的30日 31日入职,那么转正月份因为当月最后1天不是30号或者31号,那么我们就按照当月的最后1天作为转正日
     * 最典型的就是8月31日入职,转正日期可能是2月28日,也可能是2月29日
     * 或者12月31日入职,那么转正日期是6月30日(因为6月没有31号);但是1月31日入职,转正日期就是7月31日(因为7月最后1天就是31号)
     */
    @Override
    public void notice() {
        // 1. 获取当天生日人
        List<FeiShuEmployeeDTO> feiShuEmployeeDTOList = feiShuApiService.getEmployeeList(feiShuConfig.getAnniversaryApp());
        List<FeiShuEmployeeDTO> hireDayEmployees = feiShuEmployeeDTOList.stream()
                .filter(feiShuEmployeeDTO -> StringUtils.isNotEmpty(feiShuEmployeeDTO.getSystemFields().getHireDate()))
                .filter(feiShuEmployeeDTO -> {
                    LocalDate hireDay = LocalDate.parse(feiShuEmployeeDTO.getSystemFields().getHireDate());
                    // 使用plusMonths正好满足需求
                    return hireDay.plusMonths(6L).equals(LocalDate.now());
                })
                .map(feiShuEmployeeDTO -> {
                    // 给员工自己发消息
                    feiShuApiService.sendMsg(generateEmployeeMsgCard(feiShuEmployeeDTO), "open_id",feiShuConfig.getAnniversaryApp());
                    // 给领导发送消息
                    sendMsgToLeader(generateLeaderMsgCard(feiShuEmployeeDTO),feiShuEmployeeDTO);

                    return feiShuEmployeeDTO;
                }).collect(Collectors.toList());
        log.info("{} 当日转正人: {}", LocalDate.now(), hireDayEmployees);

    }

    @Override
    public FeiShuMsgDTO generateEmployeeMsgCard(FeiShuEmployeeDTO feiShuEmployeeDTO){
        String name = feiShuEmployeeDTO.getSystemFields().getName();
        FeiShuMsgDTO feiShuMsgDTO = new FeiShuMsgDTO();
        feiShuMsgDTO.setMsgType("interactive");
        feiShuMsgDTO.setContent(String.format(getInteractiveCardStr("/templates/conversion-employee.json"), name, name));
        feiShuMsgDTO.setReceiveId(feiShuEmployeeDTO.getUserId());
        return feiShuMsgDTO;
    }

    @Override
    public FeiShuMsgDTO generateLeaderMsgCard(FeiShuEmployeeDTO feiShuEmployeeDTO) {
        FeiShuMsgDTO feiShuMsgDTO = new FeiShuMsgDTO();
        feiShuMsgDTO.setMsgType("interactive");
        feiShuMsgDTO.setContent(String.format(getInteractiveCardStr("/templates/conversion-leader.json"), feiShuEmployeeDTO.getSystemFields().getName()));
        return feiShuMsgDTO;
    }


}