package cn.iocoder.yudao.module.pms.service.iotprojectinfo;

import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.pms.controller.admin.iotprojectinfo.vo.IotProjectInfoPageReqVO;
import cn.iocoder.yudao.module.pms.controller.admin.iotprojectinfo.vo.IotProjectInfoSaveReqVO;
import cn.iocoder.yudao.module.pms.dal.dataobject.iotprojectinfo.IotProjectInfoDO;
import cn.iocoder.yudao.module.system.dal.dataobject.dept.DeptDO;

import javax.validation.Valid;
import java.util.Collection;
import java.util.List;
import java.util.Set;

/**
 * 项目信息 Service 接口
 *
 * @author 超级管理员
 */
public interface IotProjectInfoService {

    /**
     * 创建项目信息
     *
     * @param createReqVO 创建信息
     * @return 编号
     */
    Long createIotProjectInfo(@Valid IotProjectInfoSaveReqVO createReqVO);

    /**
     * 更新项目信息
     *
     * @param updateReqVO 更新信息
     */
    void updateIotProjectInfo(@Valid IotProjectInfoSaveReqVO updateReqVO);

    /**
     * 删除项目信息
     *
     * @param id 编号
     */
    void deleteIotProjectInfo(Long id);

    /**
     * 获得项目信息
     *
     * @param id 编号
     * @return 项目信息
     */
    IotProjectInfoDO getIotProjectInfo(Long id);

    /**
     * 获得项目信息分页
     *
     * @param pageReqVO 分页查询
     * @return 项目信息分页
     */
    PageResult<IotProjectInfoDO> getIotProjectInfoPage(IotProjectInfoPageReqVO pageReqVO);

    /**
     * 获得项目信息列表
     *
     * @param pageReqVO 列表查询
     * @return 项目信息列表
     */
    List<IotProjectInfoDO> getIotProjectInfos(IotProjectInfoPageReqVO pageReqVO);

    PageResult<IotProjectInfoDO> getIotProjectInfoPage1(IotProjectInfoPageReqVO pageReqVO,Collection<Long> deptIds);

    /**
     * 获得项目信息列表
     *
     * @return 筛选当前登录人所属公司级部门下的项目信息
     */
    List<IotProjectInfoDO> projectList();

    List<DeptDO> companyLevelDepts();

    /**
     * 查询当前登录用户所属部门及下属部门
     * @return
     */
    Set<Long> customLevelDepts();

    /**
     * 查询当前登录用户所属的项目部部门
     * @return
     */
    Set<Long> projectLevelDepts();

    /**
     * 保存业务数据中与数据字典值相关的字段 新值 更新到 数据字典
     * @param dictType
     * @param label
     */
    public void saveDictData(String dictType, String label);
}