package com.nbclass.szxgl.service;

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

import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.nbclass.szxgl.model.ListType;
import com.nbclass.szxgl.model.Project;
import com.nbclass.szxgl.model.ProjectFiles;
import com.nbclass.szxgl.model.ProjectTask;
import com.nbclass.szxgl.model.ProjectTaskJournal;

/**
 * 
 * @author Leon
 * @datetime 2019年4月24日 下午4:24:11
 */
public interface ProjectService {

	/**
	 * 是否有项目修改权限
	 * 管理员、项目创建者、项目负责人才有修改权限
	 * @param pid
	 * @return
	 */
	public boolean hasUpdateProject(String pid);
	
	/**
	 * 拥有对项目文档的权限
	 * 管理员、项目创建者、项目负责人、项目任务执行人 才有修改权限
	 * @param pid
	 * @return
	 */
	public boolean hasPowerForFile(String pid);
	
	/**
	 * 是否有 添加 修改 删除 项目任务的权限
	 * 只有项目创建者或项目负责人才有此权限
	 * @param pid
	 * @return
	 */
	public boolean hasPowerForTask(String pid);
	
	/**
	 * 根据条件查询项目列表
	 * @param project
	 * @return
	 */
	public List<Project> getList(Project project);

	/**
	 * 递归查询部门下的所以成员(包括本部门和子部门)
	 * @param deptId 部门id
	 * @return 用户id列表
	 */
	public List<String> selectUserIdsByDeptId(String deptId);
	
    /**
     * 根据主键id查询
     * @param pid
     * @return
     */
	public JSONObject findById(String pid);

	/**
	 * 项目的文档管理 查询文件列表
	 * @param pid
	 * @return
	 */
	public List<ProjectFiles> getFileList(String pid);
	
	/**
	 * 项目任务列表
	 * @param pid
	 * @return
	 */
	public List<ProjectTask> getTaskList(String pid);
	
	/**
	 * 项目任务进度日志列表
	 * @param taskId
	 * @return
	 */
	public List<ProjectTaskJournal> getTaskJournalList(String taskId);
	/**
	 * 根据类型获得枚举列表
	 * @param listType
	 * @return
	 */
	public List<ListType> getListValues(String listType);
	
	/**
	 * 添加项目
	 * @param p
	 * @param isSendMsg
	 * @param deptIds
	 * @param filesList
	 * @return
	 */
	public String addProject(Project p,Integer isSendMsg, String[] deptIds, List<ProjectFiles> filesList);
	/**
	 * 修改项目
	 * @param p
	 * @param isSendMsg
	 * @param deptIds
	 * @param filesList
	 * @return
	 */
	public void updateProject(Project p,Integer isSendMsg, String[] deptIds, List<ProjectFiles> filesList);
	/**
	 * 通过userid查询上级用户
	 * @param userIds 用户的id
	 * @param toTop 是否遍历查询所有上级，如果为false只查询当前上级
	 * @return
	 */
	public Map<String,List<String>> selectLeaderUsers(String userIds, boolean toTop);

	/**
	 * 通过userid查询上级用户 - 返回对象，包含用户头像
	 * @param userIds
	 * @param toTop 是否遍历查询所有上级，如果为false只查询当前上级
	 * @return
	 */
	JSONArray selectLeaderUserObj(String userIds, boolean toTop);

	/**
	 * 通过执行人userid查询用户信息 - 返回对象，包含用户头像
	 * @param userIds
	 * @return
	 */
	List<Map<String, Object>> selectZxrUserObj(String userIds);

	/**
	 * 删除项目
	 * @param ids
	 */
	public void deleteProject(String[] ids);

	/**
	 * 查询负责人所属区域
	 * @param userIds
	 */
	public Map<String,Set<String>> selectCityByUserIds(String userIds);

	/**
	 * 修改项目状态
	 * @param id
	 * @param contractno
	 * @param status
	 * @return
	 */
	public void updateProjectStatus(String id, String contractno, String status);
	
}
