EmployeeService.java 4.53 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.ArrayList;
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;

    private static final List<String> eightFloorEightdepartmentIdList = new ArrayList<>();

    static {
        eightFloorEightdepartmentIdList.add("od-3890573b4cd286f437d8e935e10f79bd");
        eightFloorEightdepartmentIdList.add("od-80c6807080faabbb1c4db7bd4d9bd3fd");
        eightFloorEightdepartmentIdList.add("od-257f04c282e11a4dbb40bbce905dc288");
        eightFloorEightdepartmentIdList.add("od-4ff65217e64292e3ff5726258ddb2bd8");
        eightFloorEightdepartmentIdList.add("od-5493776cfddf24c28e1c4620b9ee3406");
        eightFloorEightdepartmentIdList.add("od-133305bbba80fa87b979453a1ffc689a");
        eightFloorEightdepartmentIdList.add("od-2a43207cc2d92d781cb1cdfdcf33dc28");
        eightFloorEightdepartmentIdList.add("od-f2a40e56473fbdfbdcca9efb4302cbca");
        eightFloorEightdepartmentIdList.add("od-d7ddf7e8b966b0886319ff93f4dac95b");
        eightFloorEightdepartmentIdList.add("od-ab7c4b49f80d53ca54f60bb47661bad3");
    }

    @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) {
                SystemFieldsDTO systemFieldsDTO = it.getSystemFields();
                if (!currentEmployee.getDepartmentId().equals(systemFieldsDTO.getDepartmentId())
                        || !currentEmployee.getName().equals(systemFieldsDTO.getName())
                        || !currentEmployee.getMobile().equals(systemFieldsDTO.getMobile())) {
                    currentEmployee.setDepartmentId(systemFieldsDTO.getDepartmentId());
                    currentEmployee.setName(systemFieldsDTO.getName());
                    currentEmployee.setMobile(systemFieldsDTO.getMobile());
                    this.update(currentEmployee);
                }
                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());
            }
            employee.setFloor(eightFloorEightdepartmentIdList.contains(employee.getDepartmentId()) ? 8 : 14);
            this.create(employee);
        });
    }

    public List<Employee> findStartList(int startId, int floor, int limit) {
        return employeeDao.findStartList(startId, floor, limit);
    }

    public int findCountByFloor(int floor) {
        return employeeDao.findCountByFloor(floor);
    }
}