package com.jojubanking.boot.module.system.dal.mysql.deptxq;

import java.util.*;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.jojubanking.boot.framework.common.pojo.PageResult;
import com.jojubanking.boot.framework.mybatis.core.query.LambdaQueryWrapperX;
import com.jojubanking.boot.framework.mybatis.core.mapper.BaseMapperX;
import com.jojubanking.boot.module.system.controller.admin.dept.vo.dept.DeptListReqVO;
import com.jojubanking.boot.module.system.controller.app.xytjinfo.vo.DeptXqtjListReqVO;
import com.jojubanking.boot.module.system.dal.dataobject.dept.DeptDO;
import com.jojubanking.boot.module.system.dal.dataobject.deptxq.DeptXqDO;
import org.apache.ibatis.annotations.Mapper;
import com.jojubanking.boot.module.system.controller.admin.deptxq.vo.*;
import org.apache.ibatis.annotations.Select;

/**
 * 部门 Mapper
 *
 * @author admin
 */
@Mapper
public interface DeptXqMapper extends BaseMapperX<DeptXqDO> {

    default List<DeptXqDO> selectXqList(DeptXqListReqVO reqVO) {
        return selectList(new LambdaQueryWrapperX<DeptXqDO>()
                .likeIfPresent(DeptXqDO::getName, reqVO.getName())
                .eqIfPresent(DeptXqDO::getStatus, reqVO.getStatus()));
    }

    default List<DeptXqDO> selectXqtjList(DeptXqtjListReqVO reqVO) {
        return selectList(new LambdaQueryWrapperX<DeptXqDO>()
                .likeIfPresent(DeptXqDO::getName, reqVO.getName())
                .eqIfPresent(DeptXqDO::getStatus, reqVO.getStatus())
                .eqIfPresent(DeptXqDO::getParentId, reqVO.getParentId()));
    }

    default DeptXqDO selectByParentIdAndName(Long parentId, String name) {
        return selectOne(new LambdaQueryWrapper<DeptXqDO>()
                .eq(DeptXqDO::getParentId, parentId)
                .eq(DeptXqDO::getName, name));
    }

    default Long selectCountByParentId(Long parentId) {
        return selectCount(DeptXqDO::getParentId, parentId);
    }

    @Select("SELECT COUNT(*) FROM xytj_dept WHERE update_time > #{maxUpdateTime}")
    Long selectCountByUpdateTimeGt(Date maxUpdateTime);

    default PageResult<DeptXqDO> selectPage(DeptXqPageReqVO reqVO) {
        return selectPage(reqVO, new LambdaQueryWrapperX<DeptXqDO>()
                .likeIfPresent(DeptXqDO::getName, reqVO.getName())
                .eqIfPresent(DeptXqDO::getParentId, reqVO.getParentId())
                .eqIfPresent(DeptXqDO::getSort, reqVO.getSort())
                .eqIfPresent(DeptXqDO::getLeaderUserId, reqVO.getLeaderUserId())
                .eqIfPresent(DeptXqDO::getPhone, reqVO.getPhone())
                .eqIfPresent(DeptXqDO::getEmail, reqVO.getEmail())
                .eqIfPresent(DeptXqDO::getStatus, reqVO.getStatus())
                .betweenIfPresent(DeptXqDO::getCreateTime, reqVO.getCreateTime())
                .orderByDesc(DeptXqDO::getId));
    }

    default List<DeptXqDO> selectList(DeptXqExportReqVO reqVO) {
        return selectList(new LambdaQueryWrapperX<DeptXqDO>()
                .likeIfPresent(DeptXqDO::getName, reqVO.getName())
                .eqIfPresent(DeptXqDO::getParentId, reqVO.getParentId())
                .eqIfPresent(DeptXqDO::getSort, reqVO.getSort())
                .eqIfPresent(DeptXqDO::getLeaderUserId, reqVO.getLeaderUserId())
                .eqIfPresent(DeptXqDO::getPhone, reqVO.getPhone())
                .eqIfPresent(DeptXqDO::getEmail, reqVO.getEmail())
                .eqIfPresent(DeptXqDO::getStatus, reqVO.getStatus())
                .betweenIfPresent(DeptXqDO::getCreateTime, reqVO.getCreateTime())
                .orderByDesc(DeptXqDO::getId));
    }

}
