using Admin.Core.Model;
using Admin.Core.Model.ViewModels;
using System;
using System.Collections.Generic;
using System.Threading.Tasks;

namespace Admin.Core.IService
{
    /// <summary>
    /// IExecutePlanInfoServices
    /// </summary>	
    public interface IExecutePlanInfoServices : IBaseServices<ExecutePlanInfo>
    {
        /// <summary>
        /// 计划上移
        /// </summary>
        /// <param name="id"></param>
        /// <param name="station"></param>
        /// <returns></returns>
        Task<bool> PlanMoveUp(string id,string station);
        /// <summary>
        /// 计划下移
        /// </summary>
        /// <param name="id"></param>
        /// <param name="station"></param>
        /// <returns></returns>
        Task<bool> PlanMoveDown(string id, string station);
        /// <summary>
        /// 删除计划
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
        Task<bool> ExecPlanDelete(string id);
        /// <summary>
        /// 下发计划
        /// </summary>
        /// <param name="sm"></param>
        /// <returns></returns>
        Task<ExecutePlanInfo> PlanNextPass(ExecutePlanInfo sm);


        #region  出入库操作
        /// <summary>
        /// 通过产线工位获取执行计划
        /// </summary>
        /// <param name="productLineCode"></param>
        /// <returns></returns>
        Task<List<ExecutePlanInfo>> GetExecutePlanInfosByProductLineCode(string productLineCode);

        /// <summary>
        /// 通过生产计划编号获取执行计划
        /// </summary>
        /// <param name="productPlanCode"></param>
        /// <returns></returns>
        Task<List<ExecutePlanInfo>> GetExecutePlanInfosByProductPlanCode(string productPlanCode);

        /// <summary>
        /// 通过执行计划编号获取执行计划
        /// </summary>
        /// <param name="executePlanCode"></param>
        /// <returns></returns>
        Task<ExecutePlanInfo> GetExecutePlanInfoByPlanCode(string executePlanCode);

        /// <summary>
        /// 通过产线工位获取执行顺序(默认+1)
        /// </summary>
        /// <param name="productLineCode"></param>
        /// <returns></returns>
        Task<int> GetExecuteOrderByProductLineCode(string productLineCode);

        /// <summary>
        /// 新增执行计划
        /// </summary>
        /// <param name="executePlanInfo"></param>
        /// <returns></returns>
        Task<bool> InsertExecutePlanInfo(ExecutePlanInfo executePlanInfo);

        /// <summary>
        /// 修改执行计划
        /// </summary>
        /// <param name="executePlanInfo"></param>
        /// <returns></returns>
        Task<bool> UpdateExecutePlanInfo(ExecutePlanInfo executePlanInfo);

        /// <summary>
        /// 批量修改执行计划
        /// </summary>
        /// <param name="executePlanInfos"></param>
        /// <returns></returns>
        Task<bool> UpdateRangeExecutePlanInfo(List<ExecutePlanInfo> executePlanInfos);

        /// <summary>
        /// 根据执行计划编号删除执行计划
        /// </summary>
        /// <param name="executePlanCode"></param>
        /// <returns></returns>
        Task<bool> DeleteExecutePlanInfoByPlanCode(string executePlanCode);

        /// <summary>
        /// 获取工位小时产量
        /// </summary>
        /// <param name="stationCode"></param>
        /// <returns></returns>
        Task<List<dynamic>> GetStationHourAmount(string stationCode);

        /// <summary>
        /// 获取物料型号统计
        /// </summary>
        /// <param name="stationCode"></param>
        /// <returns></returns>
        Task<List<dynamic>> GetStationMaterialStats(string stationCode);

        Task<List<dynamic>> GetStationSheetMetalHourAmountAsync(string stationCode);

        List<dynamic> GetStationSheetMetalStats(string stationCode);
        /// <summary>
        /// 查询钣金计划任务信息
        /// </summary>
        /// <param name="stationCode"></param>
        /// <returns></returns>
        List<SheetMetalDataView> QuerySheetMetalData(string stationCode);
        /// <summary>
        /// 获取钣金当前工位计划
        /// </summary>
        /// <param name="stationCode"></param>
        /// <returns></returns>
        List<SheetMetaPlanInfoView> QuerySheetMetalPlanData(string stationCode);
        /// <summary>
        /// 查询钣金计划执行任务
        /// </summary>
        /// <param name="stationCode"></param>
        /// <returns></returns>
        Task<List<SheetMetaSendPlanInfoView>> QuerySheetMetalSendPlanData(string stationCode);
        /// <summary>
        /// 修改钣金执行计划
        /// </summary>
        /// <param name="executePlanInfo"></param>
        /// <returns></returns>
        Task<bool> UpdateSheetMetalExecutePlanInfo(int execPanId,int status,DateTime startTime);
        #endregion
    }
}