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

import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.smartfactory.controller.admin.handlinggroupuseramount.dto.StaffWagesPageDTO;
import cn.iocoder.yudao.module.smartfactory.controller.admin.handlinggroupuseramount.vo.HandlingGroupUserAmountMonthVO;
import cn.iocoder.yudao.module.smartfactory.controller.admin.handlinggroupuseramount.vo.HandlingGroupUserAmountPageReqVO;
import cn.iocoder.yudao.module.smartfactory.controller.admin.handlinggroupuseramount.vo.HandlingGroupUserAmountSaveReqVO;
import cn.iocoder.yudao.module.smartfactory.controller.admin.handlinggroupuseramount.vo.StaffWagesPageVO;
import cn.iocoder.yudao.module.smartfactory.dal.dataobject.handlinggroupuseramount.HandlingGroupUserAmountDO;
import com.baomidou.mybatisplus.extension.service.IService;

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

/**
 * 搬运组每日个人工资记录 Service 接口
 *
 * @author 艾楷
 */
public interface HandlingGroupUserAmountService extends IService<HandlingGroupUserAmountDO> {

    /**
     * 创建搬运组每日个人工资记录
     *
     * @param createReqVO 创建信息
     * @return 编号
     */
    Long createHandlingGroupUserAmount(@Valid HandlingGroupUserAmountSaveReqVO createReqVO);

    /**
     * 更新搬运组每日个人工资记录
     *
     * @param updateReqVO 更新信息
     */
    void updateHandlingGroupUserAmount(@Valid HandlingGroupUserAmountSaveReqVO updateReqVO);

    /**
     * 删除搬运组每日个人工资记录
     *
     * @param id 编号
     */
    void deleteHandlingGroupUserAmount(Long id);

    /**
     * 获得搬运组每日个人工资记录
     *
     * @param id 编号
     * @return 搬运组每日个人工资记录
     */
    HandlingGroupUserAmountDO getHandlingGroupUserAmount(Long id);

    /**
     * 获得搬运组每日个人工资记录分页
     *
     * @param pageReqVO 分页查询
     * @return 搬运组每日个人工资记录分页
     */
    PageResult<HandlingGroupUserAmountDO> getHandlingGroupUserAmountPage(HandlingGroupUserAmountPageReqVO pageReqVO);

    /**
     * 新增编辑
     *
     * @param createReqVO
     */
    void createOrEdit(@Valid HandlingGroupUserAmountSaveReqVO createReqVO);

    /**
     * 员工工资分页列表
     *
     * @param dto
     * @return
     */
    PageResult<StaffWagesPageVO> staffWagesPage(@Valid StaffWagesPageDTO dto);

    /**
     * 获得搬运组工资记录 按月搜索
     *
     * @param factoryId
     * @param time
     * @param name
     * @return
     */
    HandlingGroupUserAmountMonthVO getListByMonth(Long id, Long factoryId, Integer type, String time, String name);

    /**
     * 列表
     *
     * @param pageReqVO
     * @return
     */
    List<HandlingGroupUserAmountDO> getHandlingGroupUserAmountList(HandlingGroupUserAmountPageReqVO pageReqVO);

    /**
     * 确认搬运工组薪资，确认后添加至员工薪资表
     *
     * @param factoryId
     * @param month
     */
    void confirmHandlingGroupUserAmount(Long factoryId, String month);

    List<HandlingGroupUserAmountDO> getByHandlingGroupIds(List<Long> handlingGroupIds);

    /**
     * 通过工厂列表ids 和日期列表 和 搬运组ids 获取
     *
     * @param factoryIds
     * @param dateStrList
     * @param handlingGroupIds
     * @return
     */
    List<HandlingGroupUserAmountDO> getByFactorIdAndDateStrAndHandlingGroupId(List<Long> factoryIds, List<String> dateStrList, List<Long> handlingGroupIds);
}
