package com.yida.data.attendance.service;

import com.yida.data.attendance.dto.AddLeaveRequestStrategyDTO;
import com.yida.data.common.core.entity.constant.FebsConstant;
import com.yida.data.common.core.entity.user.EduFaceGroupStrategy;
import org.springframework.scheduling.annotation.Async;

/**
 * 设备策略service
 *
 * @author ZYJ
 * @date 2022/12/13
 */
public interface EduAttendanceStrategyService {

    /**
     * 保存策略并绑定人员信息
     *
     * @param eduFaceGroupStrategy 策略信息
     * @author ZYJ
     * @date 2022/12/13 10:59
     */
    @Async(FebsConstant.ASYNC_POOL)
    void saveStrategyAndUser(EduFaceGroupStrategy eduFaceGroupStrategy);

    /**
     * 删除策略
     *
     * @param eduFaceGroupStrategy 策略信息
     * @author ZYJ
     * @date 2022/12/21 15:59
     */
    void deleteStrategy(EduFaceGroupStrategy eduFaceGroupStrategy);

    /**
     * 绑定对应的人员-策略信息
     *
     * @param eduFaceGroupStrategy 策略信息
     * @author ZYJ
     * @date 2022/12/22 16:32
     */
    void bindUserStrategy(EduFaceGroupStrategy eduFaceGroupStrategy);

    /**
     * 解绑对应的人员-策略信息
     *
     * @param eduFaceGroupStrategy 策略信息
     * @author ZYJ
     * @date 2022/12/26 10:19
     */
    void unBindUserStrategy(EduFaceGroupStrategy eduFaceGroupStrategy);

    /**
     * 删除并保存策略(包含人员信息)
     *
     * @param eduFaceGroupStrategy 策略信息
     * @author ZYJ
     * @date 2023/1/9 15:35
     */
    @Async(FebsConstant.ASYNC_POOL)
    void deleteAndSaveStrategy(EduFaceGroupStrategy eduFaceGroupStrategy);

    /**
     * 添加请假类型短策略
     *
     * @param dto 添加请假类型短策略请求类
     * @author ZYJ
     * @date 2023/2/2 16:20
     */
    @Async(FebsConstant.ASYNC_POOL)
    void addLeaveRequestStrategy(AddLeaveRequestStrategyDTO dto);
}
