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

import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.smartfactory.controller.admin.handlinggroupamountspecifications.dto.HandlingGroupAmountSpecificationsPageReqDTO;
import cn.iocoder.yudao.module.smartfactory.controller.admin.handlinggroupamountspecifications.dto.HandlingGroupAmountSpecificationsTotalNumDTO;
import cn.iocoder.yudao.module.smartfactory.controller.admin.handlinggroupamountspecifications.vo.*;
import cn.iocoder.yudao.module.smartfactory.dal.dataobject.handlinggroup.HandlingGroupDO;
import cn.iocoder.yudao.module.smartfactory.dal.dataobject.handlinggroupamountspecifications.HandlingGroupAmountSpecificationsDO;
import com.baomidou.mybatisplus.extension.service.IService;

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

/**
 * 搬运组工资规格关联 Service 接口
 *
 * @author 艾楷
 */
public interface HandlingGroupAmountSpecificationsService extends IService<HandlingGroupAmountSpecificationsDO> {

    /**
     * 获得搬运组工资规格关联
     *
     * @param id 编号
     * @return 搬运组工资规格关联
     */
    HandlingGroupAmountSpecificationsDO getHandlingGroupAmountSpecifications(Long id);

    /**
     * 获取详情 - 多条
     *
     * @param factoryId
     * @param dateStr
     * @param handlingGroupId
     * @return
     */
    List<HandlingGroupAmountSpecificationsDO> getHandlingGroupAmountSpecificationsList(Long factoryId, String dateStr, Long handlingGroupId);

    /**
     * 获得搬运组工资规格关联分页
     *
     * @param pageReqVO 分页查询
     * @return 搬运组工资规格关联分页
     */
    PageResult<HandlingGroupAmountSpecificationsDO> getHandlingGroupAmountSpecificationsPage(HandlingGroupAmountSpecificationsPageReqVO pageReqVO);

    /**
     * 批量新增
     *
     * @param vo
     */
    void batchCreate(@Valid HandlingGroupAmountSpecificationsBatchCreateVO vo);

    /**
     * 批量更新
     *
     * @param vo
     */
    void batchUpdate(@Valid HandlingGroupAmountSpecificationsBatchUpdateVO vo);

    /**
     * 批量删除
     *
     * @param vo
     */
    void batchDelete(HandlingGroupAmountSpecificationsBatchDelVO vo);

    /**
     * 获取合计
     *
     * @return
     */
    HandlingGroupAmountSpecificationsTotalNumVO getTotalNum(HandlingGroupAmountSpecificationsTotalNumDTO dto);

    /**
     * 获取金额小计
     *
     * @param totalCount
     * @param handlingSpecificationsId
     * @return
     */
    BigDecimal getAmountSubtotal(Integer totalCount, Long handlingSpecificationsId);

    /**
     * @param pageReqVO
     * @return
     */
    PageResult<HandlingGroupAmountSpecificationsRespVO> getHandlingGroupAmountSpecificationsPageV2(@Valid HandlingGroupAmountSpecificationsPageReqDTO pageReqVO);
}
