/*
 * Copyright (c) 京北方信息技术股份有限公司 Corporation 2021 . All rights reserved.
 *
 */
package net.northking.cctp.flowable.api.sm.service;

import net.northking.cctp.common.db.Pagination;
import net.northking.cctp.common.http.QueryByPage;
import net.northking.cctp.flowable.db.entity.SpDefProcess;
import net.northking.cctp.flowable.db.entity.SpDefState;
import net.northking.cctp.flowable.dto.sm.StateAuthDto;
import net.northking.cctp.flowable.dto.sm.StateProcessDefDto;
import net.northking.cctp.flowable.sm.StateProcessDefinition;


import java.util.List;

/**
 * 状态流程定义资源服务接口
 *
 * @author : xiusong.xie
 * @version : 1.0
 */
public interface StateProcessDefApiService
{
  /**
   * 保存状态流程定义
   *
   * @param dto 接口数据传输对象
   * @return 主键
   */
  String save(StateProcessDefinition dto);

  /**
   * 查询状态流程定义列表
   *
   * @param queryByPage 查询条件
   * @return 查询结果列表
   */
  Pagination<StateProcessDefDto> pagingQuery(QueryByPage<SpDefProcess> queryByPage);


  /**
   * 获取状态流程定义
   *
   * @param uuid 主键
   * @return 接口数据传输对象
   */
  StateProcessDefinition findByPK(String uuid);

  /**
   * 删除状态流程定义
   *
   * @param uuid 主键
   * @return 删除的记录数量
   */
  Integer deleteByPK(String uuid);

  /**
   * 批量删除
   *
   * @param batch 集合
   * @return 成功的数量
   */
  Integer deleteBatch(List<String> batch);

  /**
   * 更改流程是否默认
   *
   * @param uuid
   * @return
   */
    Integer updateDefault(String uuid);

  /**
   * 获取下拉状态值
   * @param stateAuth
   * @return
   */
  List<String> queryAvailableStates(StateAuthDto stateAuth);

  /**
   *  获取可选角色
   *
   * @param stateAuth
   * @return
   */
    List<String> queryAvailableRoles(StateAuthDto stateAuth);

  /**
   * 条件获取状态
   * @param stateAuth
   * @return
   */
  List<String> querySpecialState(StateAuthDto stateAuth);

  /**
   * 刷新流程的终态
   */
  void reloadFinishedCache();

  /**
   * 获取缺陷流程模板
   * @param stateAuth
   * @return
   */
  List<SpDefState> queryBugProcessTemplateState(StateAuthDto stateAuth);
}
