package cn.iocoder.yudao.module.smartfactory.service.staffsalary;

import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.smartfactory.controller.admin.staffsalary.vo.SalaryTotalVO;
import cn.iocoder.yudao.module.smartfactory.controller.admin.staffsalary.vo.StaffSalaryPageReqVO;
import cn.iocoder.yudao.module.smartfactory.controller.admin.staffsalary.vo.StaffSalaryRespVO;
import cn.iocoder.yudao.module.smartfactory.controller.admin.staffsalary.vo.StaffSalarySaveReqVO;
import cn.iocoder.yudao.module.smartfactory.dal.dataobject.attendance.StaffAttendanceRecordDO;
import cn.iocoder.yudao.module.smartfactory.dal.dataobject.staffsalary.StaffSalaryDO;

import javax.validation.Valid;
import java.util.Collection;
import java.util.List;

/**
 * 厂区员工工资 Service 接口
 *
 * @author 符溶馨
 */
public interface StaffSalaryService {

    /**
     * 创建厂区员工工资
     * @param createReqVO 创建信息
     * @return 工资编号
     */
    Long createStaffSalary(StaffSalarySaveReqVO createReqVO);

    /**
     * 更新厂区员工工资
     *
     * @param updateReqVO 更新信息
     */
    void updateStaffSalary(@Valid StaffSalarySaveReqVO updateReqVO);

    /**
     * 删除厂区员工工资
     *
     * @param id 编号
     */
    void deleteStaffSalary(Long id);

    /**
     * 获得厂区员工工资
     *
     * @param id 编号
     * @return 厂区员工工资
     */
    StaffSalaryDO getStaffSalary(Long id);

    /**
     * 获得厂区员工工资分页
     *
     * @param pageReqVO 分页查询
     * @return 厂区员工工资分页
     */
    PageResult<StaffSalaryRespVO> getStaffSalaryPage(StaffSalaryPageReqVO pageReqVO);

    /**
     * 更新工资状态
     * @param updateReqVO 更新信息
     */
    void updateStatus(StaffSalarySaveReqVO updateReqVO);

    /**
     * 工资计算
     * @param vo 考勤信息
     */
    void calculateSalary(List<StaffAttendanceRecordDO> vo);

    /**
     * 更新是否发工资
     * @param ids 工资编号集合
     * @param isGrant 是否发工资
     */
    void updateIsGrant(Collection<Long> ids, Integer isGrant);

    /**
     * 获取工资统计
     * @param pageReqVO 查询信息
     * @return 统计信息
     */
    SalaryTotalVO getStaffSalaryTotal(StaffSalaryPageReqVO pageReqVO);
}