package com.yunzhupaas.base.service;

import com.yunzhupaas.base.entity.OperatorRecordEntity;
import com.yunzhupaas.base.entity.PrintDevEntity;
import com.yunzhupaas.base.model.print.*;
import com.yunzhupaas.base.model.vo.PrintDevVO;

import java.util.List;
import java.util.Map;

/**
 * 打印模板-服务类
 *
 * @author 云筑产品开发平台组 YY
 * @version V3.2.0
 * @copyright 深圳市乐程软件有限公司
 * @date 2024-09-30
 */
public interface PrintDevService extends SuperService<PrintDevEntity> {

    /**
     * 列表
     *
     * @return 打印实体类
     */
    List<PrintDevEntity> getList(PaginationPrint paginationPrint);

    /**
     * 创建
     */
    void create(PrintDevFormDTO dto);

    /**
     * 获取详情
     *
     * @return PrintDevInfoVO
     */
    PrintDevInfoVO getVersionInfo(String versionId);

    /**
     * 保存或者发布 通过type：0-保存，1-发布
     *
     * @param form
     */
    void saveOrRelease(PrintDevUpForm form);

    /**
     * 获取打印模板对象树形模型(selector)
     *
     * @param category 打印模板类型
     * @return 打印模型树
     * @throws Exception 字典分类不存在BUG
     */
    List<PrintDevVO> getTreeModel(String category);

    /**
     * 新增更新校验
     *
     * @param printDevEntity 打印模板对象
     * @param fullNameCheck  重名校验开关
     * @param encodeCheck    重码校验开关
     */
    void creUpdateCheck(PrintDevEntity printDevEntity, Boolean fullNameCheck, Boolean encodeCheck);

    /**
     * 查询打印列表
     *
     * @param ids
     * @return
     */
    List<PrintOption> getPrintTemplateOptions(List<String> ids);

    /**
     * 导入打印模板
     *
     * @param infoVO
     * @param type
     * @return
     */
    String importData(PrintDevInfoVO infoVO, Integer type);

    /**
     * 获取流程经办记录集合
     *
     * @param taskId 任务ID
     * @return 经办记录集合
     */
    List<OperatorRecordEntity> getFlowTaskOperatorRecordList(String taskId);

    /**
     * 根据sql获取数据
     *
     * @param templateId 打印模板id
     * @param formId     表达数据id
     * @param params     参数
     * @return
     */
    Map<String, Object> getDataMap(String templateId, String formId, String flwoTaskId, Map<String, Object> params);

    /**
     * 复制打印模板
     *
     * @param templateId 打印模板id
     * @return
     */
    void copyPrintdev(String templateId);

    /**
     * 获取打印业务列表
     *
     * @param pagination
     * @return
     */
    List<PrintDevEntity> getWorkSelector(PaginationPrint pagination);

    /**
     * 获取打印业务列表
     *
     * @return 打印模型树
     */
    List<PrintDevEntity> getWorkSelector(List<String> id);

}

