package com.dayou.service;
import com.dayou.dto.*;
import com.dayou.entity.BusinessFile;
import com.dayou.entity.MajorProduction;
import com.baomidou.mybatisplus.extension.service.IService;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.dayou.enums.ReportStatus;
import com.dayou.vo.*;

import java.math.BigDecimal;
import java.util.List;

/**
 * <p>
 * 大中型产品 服务类
 * </p>
 *
 * @author wucl
 * @since 2023-11-06
 */
public interface IMajorProductionService extends IService<MajorProduction> {

        List<MajorProduction> selectPage( MajorProduction majorProduction);

        MajorProduction detail(Long id);

        Boolean add(MajorProduction majorProduction);

        Boolean finishAllProductionInfo(TaskRecordDTO<MajorProduction> majorProduction);

        Boolean update(MajorProduction majorProduction);

        Boolean delete(Long id);

        Boolean uploadProductionAttachment(TaskRecordDTO<BusinessFile> taskRecordDTO);

    Boolean repertoryIn(TaskRecordDTO<Long> taskRecordDTO);

        Boolean repertoryOut(TaskRecordDTO<Long> taskRecordDTO);

    Boolean firstCheck(TaskRecordDTO<CommonCheckDTO> taskRecordDTO);

    Boolean secondCheck(TaskRecordDTO<CommonCheckDTO> taskRecordDTO);

    Boolean thirdCheck(TaskRecordDTO<CommonCheckDTO> taskRecordDTO);

    Boolean saveFileCheck(TaskRecordDTO<CommonCheckDTO> taskRecordDTO);

    Boolean saveFileSecondCheck(TaskRecordDTO<CommonCheckDTO> taskRecordDTO);

    Boolean saveFile(TaskRecordDTO<Long> taskRecordDTO);

    Page<MajorProductionSaveDoneVO> saveDonePage(Page page, MajorProductionSaveDoneVO productionDone,String keyword);

    Boolean warehouse(TaskRecordDTO<WareHouseDTO> taskRecordDTO);

    Page<MajorProductionVO> getHouse(Page page, MajorProductionVO majorProduction,String keyword);

    Page<MajorOrderVO> myOrder(Page page, MajorOrderVO myOrder,String keyword);

    List<MajorOrderVO> exportMyOrder(MajorOrderVO myOrder,String keyword);

    Page<MajorOrderVO> waitingClaim(Page page, MajorOrderVO myOrder);

    OrderProductionsBag productionBag(Long id);

    Boolean confirmDelivery(TaskRecordDTO<Long> taskRecordDTO);

    List<OrderReportDTO> getOrderReport(List<OrderReportDTO> claimOrders);

    Boolean doAllotRealAmount(List<OrderReportDTO> claimOrders);
    Boolean allotRealAmount(List<OrderReportDTO> claimOrders);

    Page<TaskTodoVO> todoSaveFilePage(Page page, TaskTodoVO todoVO,String keyword);

    Boolean batchSaveFile(List<TaskTodoVO> todoVOList);

    List<ReportDTO> getProductionByOrderFundId(Long id);

    Boolean allotRealAmountToProduction(OrderReportDTO orderReportDTO);

    Boolean doAllotRealAmountToProduction(OrderReportDTO orderReportDTO);

    Page<MajorProductionPerformanceVO> performanceAllotPage(Page page, MajorProductionPerformanceVO productionPerformance,String keyword);

    Page<MajorProductionVO> waitingClaimProd(Page page, MajorProductionVO production);

    Boolean allotRealAmountToOrder(List<OrderReportDTO> claimOrders);
    Boolean doAllotRealAmountToOrder(List<OrderReportDTO> claimOrders);

    Boolean noTaskConfirmDelivery(Long id);

    List<MajorProduction> getPendingList(MajorProduction majorProduction);

    void updateEvaluateAmountAndCheckState(MajorProduction majorProduction);
}
