EmployeeService.java 2.58 KB
package com.pipihelper.project.feishu.service;

import com.pipihelper.project.feishu.dao.EmployeeDao;
import com.pipihelper.project.feishu.dto.employee.FeiShuEmployeeDTO;
import com.pipihelper.project.feishu.dto.employee.SystemFieldsDTO;
import com.pipihelper.project.feishu.entity.Employee;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;
import java.util.Map;
import java.util.function.Function;
import java.util.stream.Collectors;

@Service
public class EmployeeService {

    @Autowired
    private EmployeeDao employeeDao;

    @Autowired
    private FeiShuApiService feiShuApiService;

    public Employee findById(Integer id) {
        return employeeDao.findById(id);
    }

    public Employee findByOpenId(String openId) {
        return employeeDao.findByOpenId(openId);
    }

    public void deleteById(Integer id) {
        employeeDao.deleteById(id);
    }

    public void create(Employee employee) {
        employeeDao.create(employee);
    }

    public void update(Employee employee) {
        employeeDao.update(employee);
    }

    public List<Employee> findAll() {
        return employeeDao.findAll();
    }

    /**
     * 同步所有花名册
     */
    public void uprsetAllEmployee() {
        List<FeiShuEmployeeDTO> dtos = feiShuApiService.getEmployeeList();

        List<Employee> employeeList = this.findAll();
        Map<String, Employee> employeeMap = employeeList.stream().collect(Collectors.toMap(Employee::getOpenId, Function.identity()));

        List<String> openIdList = dtos.stream().map(FeiShuEmployeeDTO::getUserId).collect(Collectors.toList());
        employeeList.forEach(it -> {
            if (!openIdList.contains(it.getOpenId())) {
                this.deleteById(it.getId());
            }
        });

        dtos.forEach(it -> {
            Employee currentEmployee = employeeMap.get(it.getUserId());
            if (currentEmployee != null) {
                return;
            }
            Employee employee = new Employee();
            SystemFieldsDTO systemFieldsDTO = it.getSystemFields();
            employee.setOpenId(it.getUserId());
            if (systemFieldsDTO != null) {
                employee.setGender(systemFieldsDTO.getGender());
                employee.setStatus(systemFieldsDTO.getStatus());
                employee.setDepartmentId(systemFieldsDTO.getDepartmentId());
                employee.setName(systemFieldsDTO.getName());
                employee.setMobile(systemFieldsDTO.getMobile());
            }
            this.create(employee);
        });
    }
}