package cn.iocoder.yudao.module.bpm.dal.mysql.oa;

import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.workorderassignrule.BpmOAWorkOrderAssignRulePageReqVO;
import cn.iocoder.yudao.module.bpm.dal.dataobject.oa.BpmOAWorkOrderAssignRuleDO;
import org.apache.ibatis.annotations.Mapper;

import java.util.List;

/**
 * BPM OA 工单分配规则 Mapper
 *
 * @author 系统
 */
@Mapper
public interface BpmOAWorkOrderAssignRuleMapper extends BaseMapperX<BpmOAWorkOrderAssignRuleDO> {

    /**
     * 根据工单类型查询启用的分配规则
     */
    default List<BpmOAWorkOrderAssignRuleDO> selectRulesByType(String workOrderType) {
        return selectList(new LambdaQueryWrapperX<BpmOAWorkOrderAssignRuleDO>()
                .eq(BpmOAWorkOrderAssignRuleDO::getWorkOrderType, workOrderType));
    }

    /**
     * 根据部门ID查询分配规则
     */
    default List<BpmOAWorkOrderAssignRuleDO> selectRulesByDept(Long deptId) {
        return selectList(new LambdaQueryWrapperX<BpmOAWorkOrderAssignRuleDO>()
                .eq(BpmOAWorkOrderAssignRuleDO::getDeptId, deptId));
    }

    /**
     * 根据责任人ID查询分配规则
     */
    default List<BpmOAWorkOrderAssignRuleDO> selectRulesByAssignee(Long assigneeUserId) {
        return selectList(new LambdaQueryWrapperX<BpmOAWorkOrderAssignRuleDO>()
                .eq(BpmOAWorkOrderAssignRuleDO::getAssigneeUserId, assigneeUserId));
    }

    /**
     * 分页查询工单分配规则
     */
    default PageResult<BpmOAWorkOrderAssignRuleDO> selectPage(BpmOAWorkOrderAssignRulePageReqVO reqVO) {
        return selectPage(reqVO, new LambdaQueryWrapperX<BpmOAWorkOrderAssignRuleDO>()
                .likeIfPresent(BpmOAWorkOrderAssignRuleDO::getWorkOrderType, reqVO.getWorkOrderType())
                .eqIfPresent(BpmOAWorkOrderAssignRuleDO::getDeptId, reqVO.getDeptId())
                .eqIfPresent(BpmOAWorkOrderAssignRuleDO::getAssigneeUserId, reqVO.getAssigneeUserId())
                .betweenIfPresent(BpmOAWorkOrderAssignRuleDO::getCreateTime, reqVO.getCreateTime()));
    }

}
