package cn.ey.biz.module.system.service.field;

import cn.ey.biz.common.pojo.PageResult;
import cn.ey.biz.module.system.controller.admin.field.vo.FieldConfigCreateReqVO;
import cn.ey.biz.module.system.controller.admin.field.vo.FieldConfigExportReqVO;
import cn.ey.biz.module.system.controller.admin.field.vo.FieldConfigPageReqVO;
import cn.ey.biz.module.system.controller.admin.field.vo.FieldConfigUpdateReqVO;
import cn.ey.biz.module.system.dal.dataobject.field.FieldConfigDO;

import java.util.*;
import javax.validation.*;

/**
 * 字段权限配置 Service 接口
 *
 */
public interface FieldConfigService {

    /**
     * 创建字段权限配置
     *
     * @param createReqVO 创建信息
     * @return 编号
     */
    Long createFieldConfig(@Valid FieldConfigCreateReqVO createReqVO);

    /**
     * 更新字段权限配置
     *
     * @param updateReqVO 更新信息
     */
    void updateFieldConfig(@Valid FieldConfigUpdateReqVO updateReqVO);

    /**
     * 删除字段权限配置
     *
     * @param id 编号
     */
    void deleteFieldConfig(Long id);

    /**
     * 获得字段权限配置
     *
     * @param id 编号
     * @return 字段权限配置
     */
    FieldConfigDO getFieldConfig(Long id);

    /**
     * 获得字段权限配置列表
     *
     * @param ids 编号
     * @return 字段权限配置列表
     */
    List<FieldConfigDO> getFieldConfigList(Collection<Long> ids);

    /**
     * 获得字段权限配置分页
     *
     * @param pageReqVO 分页查询
     * @return 字段权限配置分页
     */
    PageResult<FieldConfigDO> getFieldConfigPage(FieldConfigPageReqVO pageReqVO);

    /**
     * 获得字段权限配置列表, 用于 Excel 导出
     *
     * @param exportReqVO 查询条件
     * @return 字段权限配置列表
     */
    List<FieldConfigDO> getFieldConfigList(FieldConfigExportReqVO exportReqVO);

    void updateFieldconfigEnable(FieldConfigUpdateReqVO updateReqVO);

    FieldConfigDO getFieldConfigVersion(String configCode);
}
