package cn.iocoder.yudao.module.bpm.service.oa;


import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.worktask.BpmOAWorkTaskPageReqVO;
import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.worktask.BpmOAWorkTaskReqVO;
import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.worktask.BpmOAWorkTaskRespVO;
import cn.iocoder.yudao.module.bpm.dal.dataobject.oa.BpmOAWorkTaskDO;

import javax.validation.Valid;

/**
 * 任务分配 Service 接口
 *
 * @author jason

 */
public interface BpmOAWorkTaskService {

    /**
     * 创建工作任务
     *
     * @param userId 用户编号
     * @param createReqVO 创建信息
     * @return 编号
     */
    Long createWorkTask(Long userId, @Valid BpmOAWorkTaskReqVO createReqVO);

    /**
     * 更新工作任务的状态
     *
     * @param id 编号
     * @param result 结果
     */
    void updateWorkTaskResult(Long id, Integer result);

    /**
     * 获得工作任务详情
     *
     * @param id 编号
     * @return 任务分配
     */
    BpmOAWorkTaskDO getWorkTask(Long id);

    /**
     * 获得工作任务详情
     *
     * @param processInstanceId 流程实例编号
     * @return 任务分配
     */
    BpmOAWorkTaskDO getWorkTaskByProcessInstanceId(String processInstanceId);

    /**
     * 更新 工作跟踪日志数据
     * 因为是所有数据是存储在一个字段，所以是全量更新
     * @param updateReqVO
     *
     */
    void addTrackInfo(BpmOAWorkTaskReqVO updateReqVO) ;

    void updateWorkTask(BpmOAWorkTaskReqVO createReqVO) ;

    /**
     * 获得 任务分配分页
     * @param loginUserId 用户编号
     * @param pageVO 分页条件
     * @return 任务分配分页
     */
    PageResult<BpmOAWorkTaskRespVO> getPage(Long loginUserId, BpmOAWorkTaskPageReqVO pageVO);

    /**
     * 获得 我的任务分页
     * @param loginUserId 用户编号
     * @param pageVO 分页条件
     * @return 任务分配分页
     */
    PageResult<BpmOAWorkTaskRespVO> getMyPage(Long loginUserId, BpmOAWorkTaskPageReqVO pageVO);
}
