/******************************************************************************* * Copyright [2015] [Onboard team of SERC, Peking University] * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. *******************************************************************************/ package com.onboard.service.collaboration; import java.util.Date; import java.util.List; import java.util.Map; import java.util.TreeMap; import com.onboard.domain.mapper.model.TodoExample; import com.onboard.domain.model.AttachTodo; import com.onboard.domain.model.Todo; import com.onboard.domain.model.Todolist; import com.onboard.domain.model.type.BaseOperateItem; import com.onboard.service.base.BaseService; /** * {@link Todo} 相关的服务 * * @author ruici, yewei */ public interface TodoService extends BaseService<Todo, TodoExample> { /** * 根据项目以及todo在项目中的id获取todo * * @param projectId * @param projectTodoId * @return */ Todo getTodoByProjectIdAndProjectTodoId(int projectId, int projectTodoId); List<Todo> getTodosByTodoListWithoutComments(int todolistId); /** * 获取todolist下的所有todo,不填充comments和subscribers信息 * * @param todolistId * @return */ List<Todo> getOpenTodosByTodoListWithoutCommentsAndSubscribers(int todolistId); /** * 获取todolist下的所有todo,不需要填充详细信息 * * @param todolistId * @return */ List<Todo> getTodosByTodoList(int todolistId); /** * 获取todolist下的所有在回收站的todo * * @param todolistId * @return */ List<Todo> getTodosByTodoListWithDiscard(int todolistId); /** * 复制一个Todo对象 * * @param todo * @return 返回创建的Todo对象,包括数据库中的id */ Todo copyTodo(Todo todo, Integer projectId, Integer todolistId); /** * 移动Todo到新的Todolist下 * * @param todo * @param todolistId */ void moveTodo(Todo todo, int todolistId); /** * 获取日历上展示的todo * * @param startTime * @param endTime * @param companyId * @return */ List<Todo> getByTimeRangeByCompany(Date startTime, Date endTime, int companyId, int userId); /** * 获取项目中已完成Todo的数量 * * @param projectId * @return */ int getCompletedTodosCountByProject(int projectId); /** * 获取项目已完成的Todo列表,并按日期排序分类 * * @param projectId * @param until * 完成日期在until之前 * @param limit * 限制数量,返回结果可能大于limit * @return */ TreeMap<Date, List<Todolist>> getCompletedTodolistGroupByDateByProject(int projectId, Date until, int limit); /** * 获取一组项目用户负责的已完成的任务,基于日期进行分组 * * @param companyId * @param userId * @param projectList * 如果为空,表示用户参与的所有项目 * @return */ TreeMap<Date, List<Todolist>> getCompletedTodolistsGroupByDateByUser(int companyId, int userId, List<Integer> projectList, Date until, int limit); /** * 获取一组项目内一个用户的未完成任务 * * @param userId * 为null的时候 ,取出一个项目的所有未完成任务 * @param projectList * 如果为空,表示用户参与的所有项目 * @return */ List<Todolist> getOpenTodosByUser(Integer userId, List<Integer> projectList); /** * 更新Todo的日期和负责人 * * @param todo * @return */ Todo updateTodoAssigneeAndDueDate(Todo todo); /** * 根据截止时间获取todos * * @param startTime * @param endTime * @return */ List<Todo> getByTimeRange(Date startTime, Date endTime); /** * 获取任务的详细信息 * * @param id * @return */ Todo getTodoByIdWithCommentAndSubscriable(int id); /** * 获取任务列表下所有已删除的任务 * * @param todolistId * @return */ List<Todo> getDeletedTodosByTodoList(int todolistId); List<Todo> getUncompletedTodoByProject(int projectId); /** * 创建todo关联对象 * * @param attachType * @param attachId * @param todoId * @return 如果attachTodo已存在,则返回null */ AttachTodo attachToTodo(String attachType, int attachId, int todoId); /** * 删除关联对象 * * @param attachType * @param attachId * @param todoId * @return */ void removeAttachToTodo(String attachType, int attachId, int todoId); /** * 是否已关联上 * * @param attachType * @param attachId * @param todoId * @return */ boolean isAttachTodoRecorded(String attachType, int attachId, int todoId); /** * 获取todo相关的关联对象 * * @param todoId * @param attachType * @return */ List<BaseOperateItem> getAttachesByTodoId(int todoId, String attachType); /** * 获取某对象绑定的所有任务 * * @param attachType * @param attachId * @return */ List<Todo> getTodosByAttachTypeAndId(String attachType, int attachId); /** * 将两个todo关联起来,没有顺序关系 * * @param fromTodo * @param toTodo * @return */ void associateTodos(Integer fromTodoId, Integer toTodoId); /** * 获取某todo关联的所有todo,可根据type做筛选,若type为none,则返回所有关联todo * * @param todo * @param type * @return */ List<Todolist> getAssociateTodosByType(Integer todoId, String todoType); /** * @author Chenlong * @param startTime * @param endTime * @param projectId * @return */ List<Todo> getCompletedTodoByTimeRangeProject(Date startTime, Date endTime, int projectId); /** * 任务完成数统计 * * @param companyId * @param since * @param until * @return */ Map<Integer, Integer> countForCompanyUsers(Integer companyId, Date since, Date until); /** * 完成的任务统计 * * @author Chenlong * @param companyId * @param since * @param until * @return */ List<Todo> getCompletedTodosBetweenDates(Integer companyId, Date since, Date until); /** * 迁移历史任务关键词 */ void postgenerateTodoKeywords(); /*** * 日历中展示当前用户未完成的Todo * * @param companyId * @param userId * @param since * @param until * @return */ List<Todo> getOpenTodosBetweenDatesByUser(Integer companyId, Integer userId, Date since, Date until); }