using APT.BaseData.Domain.Entities;
using APT.Infrastructure.Core;
using APT.Infrastructure.Api;
using APT.BaseData.Domain.ApiModel.PF;
using System;
using System.Linq.Expressions;
using System.Collections.Generic;
using APT.BaseData.Domain.Entities.FM;
namespace APT.BaseData.Domain.IServices.FM
{
    public interface IFMFlowPermitService : ICommonService
    {
        /// 
        /// 审核后执行动作
        /// 
        /// 送审单ID
        /// 当前审批执行的动作
        void AfterPermit(string id, int flowPermitStatus);
        /// 
        /// 審批流數據保存
        /// 
        /// 審批流程
        bool UpdateApprove(T_PF_APPROVE model, Action action, Guid? APPROVE_ID = null);
        /// 
        /// 審批流驳回申请人
        /// 
        /// 審批流程
        bool RejectApprove(Guid id, bool is_send_message, Action action);
        /// 
        /// 发布审批流 wyw 添加自定义条件
        /// 
        /// 表单id
        bool SendApprove(Guid id, Action action, Expression> expression = null, bool isShowCode = true, string approveTaskName = "");
        /// 
        /// 发布审批流
        /// 
        /// 审批流编号
        /// 审批流模板配置中的编号(例:PF001)
        /// 审批流模板配置中的自定义参数
        /// 审批流对应主表ID(DATA_ID)
        /// 审批流对应 APPROVE_CODE(例:FO017_SHOWPRINT)审批流页面对应名称
        /// 待办ID(传入需要结束的待办ID)
        /// 是否需要发送通知
        /// 
        /// 审批流ID(主表如果有存传值进来 )
        /// 审批用户(主表如果有存传值进来 )
        /// 自定义审批流程人员信息
        /// 自定义审批流程人员部门信息
        /// 审批流名称
        /// 
        void InsertApprove(string serialCode, string fromCode, string param, Guid id, string approveCode, Guid? finishNoticeId, bool sendMessage, Action action, Guid? approveId = null, Guid? approveUserId = null, Dictionary dicApproveUser = null, Dictionary dicApproveDepartMentID = null, string NoticeCode = "", string taskSourceFormCode = "", Guid? operaterID = null, string approveTaskName = "", Enums.FMTASKTYPE? TASK_TYPE = null, int? FREQUENCYE = null, DateTime? DateTimeLastest = null, int? BSOperateEnum = null);
        /// 
        /// 发布审批流
        /// 
        /// 审批流编号
        /// 审批流模板配置中的编号(例:PF001)
        /// 审批流对应主表ID(DATA_ID)
        /// 审批流对应 APPROVE_CODE(例:FO017_SHOWPRINT)点击时页面跳转配置项
        /// 待办ID(传入需要结束的待办ID)
        /// 是否需要发送通知
        /// 
        /// 审批流模板配置中的自定义参数
        /// 审批流ID(主表如果有存传值进来 )
        /// 审批用户(主表如果有存传值进来 )
        /// 
        void InsertApprove(List listSerialCode, string fromCode, List listID, string approveCode, Guid? finishNoticeId, bool isSendMessage, Action action, List listParam = null, List listApproveId = null, Guid? approveUserId = null, string taskSourceFormCode = "", Guid? operaterID = null);
        /// 
        /// 发布审批流 隐患上报
        /// 
        /// 审批流编号
        /// 审批流模板配置中的编号(例:PF001)
        /// 审批流对应主表ID(DATA_ID)
        /// 审批流对应 APPROVE_CODE(例:FO017_SHOWPRINT)点击时页面跳转配置项
        /// 待办ID(传入需要结束的待办ID)
        /// 是否需要发送通知
        /// 
        /// 审批流模板配置中的自定义参数
        /// 审批流ID(主表如果有存传值进来 )
        /// 审批用户(主表如果有存传值进来 )
        /// 
        void InsertApproveRisk(List listSerialCode, string fromCode, List listID, string approveCode, Guid? finishNoticeId, bool isSendMessage, Action action, List listParam = null, List listApproveId = null, Guid? approveUserId = null, string taskSourceFormCode = "", Guid? operaterID = null, List ListDepIDNone = null, Enums.FMTASKTYPE? TASK_TYPE = null, int? FREQUENCYE = null, DateTime? DateTimeLastest = null);
        /// 
        /// 获取流水码
        /// 
        /// 表单id
        //string[] CreateGenSerial(int codeType, int count);
        //#region   审批流回调接口
        //#region     BS
        ///// 
        ///// 隐患上报 审核通过 给每个通知负责人发送通知
        ///// 
        ///// 
        ///// 
        //bool Notice(string id);
        //#endregion
        //#endregion
    }
}