package com.chinaweal.aiccs.aiccs.revoke.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.chinaweal.aiccs.aiccs.auditing.entity.TSOpinion;
import com.chinaweal.aiccs.aiccs.business.entity.dto.TaskListUnionDto;
import com.chinaweal.aiccs.aiccs.revoke.entity.Tsrevtasklist;
import com.chinaweal.aicorg.model.AICUser;
import com.chinaweal.youfool.framework.springboot.mybatis.plus.BaseService;
import com.chinaweal.youfool.framework.springboot.mybatis.plus.page.PageRequestDto;

import javax.validation.Valid;
import javax.validation.constraints.NotBlank;
import java.util.List;
import java.util.Map;

/**
 * <p>
 * 吊销待办 服务类
 * </p>
 *
 * @author Lee
 * @since 2021-03-26
 */
public interface TsrevtasklistService extends BaseService<Tsrevtasklist> {

    /**
     * 启动待办
     * @param revtaskListModel 待办信息
     * @param user 当前用户
     * @param definitionName 定义名称
     * @return 启动结果
     * @author lroyia
     * @since 2021年1月22日 13:43:24
     */
    String startWorkFlow(Tsrevtasklist revtaskListModel, AICUser user, String definitionName);

    /**
     * 更新工作流
     * @param user 操作用户
     * @param opinionModel 处办意见
     * @param taskListModel 待办对象
     * @param nextNodeID 下一个节点标识
     * @param nextPerformerids 下一步处理人id
     * @param nextPerformerNames 提下一个平台名称
     * @author lroyia
     * @since 2021年1月25日 10:16:49
     */
    void updateWorkFlow(AICUser user, TSOpinion opinionModel, Tsrevtasklist taskListModel, String nextNodeID, String[] nextPerformerids, String[] nextPerformerNames);


    IPage<Tsrevtasklist> todoListWithBizstatu(IPage<Tsrevtasklist> page, Tsrevtasklist tsrevtasklist, Map<String, Object> customParamMap);

    List<Tsrevtasklist> selectByBizSeqID(String bizseqid);

    IPage<TaskListUnionDto> batchRevokeForwardTask(PageRequestDto pageRequestDto);
    
    /**
     * 批量吊销任务转办
     *
     * @param tasklistid 待办id
     * @param userId 转办用户id
     * @return
     * @author ymc
     * @since 2024年8月16日 11:14
     */
    void batchRevokeForward(String tasklistid, String userId);

    void updateWorkFlowZx(AICUser loginUser, @Valid TSOpinion opinion, Tsrevtasklist taskList, @NotBlank(message = "下一流程节点类型不能为空！") String nextNodeID, String[] nextPerformerIds, String[] nextPerformerNames);
}
