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

import java.util.*;

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.dal.dataobject.userinfo.UserInfoDO;
import org.apache.ibatis.annotations.Mapper;
import com.jojubanking.boot.module.system.controller.app.userinfo.vo.*;

/**
 * 用户信息 Mapper
 *
 * @author admin
 */
@Mapper
public interface UserInfoMapper extends BaseMapperX<UserInfoDO> {
    default UserInfoDO selectByMobile(String mobile) {
        return selectOne(UserInfoDO::getPhone, mobile);
    }

    default PageResult<UserInfoDO> selectPage(AppUserInfoPageReqVO reqVO) {
        return selectPage(reqVO, new LambdaQueryWrapperX<UserInfoDO>()
                .eqIfPresent(UserInfoDO::getOpenid, reqVO.getOpenid())
                .likeIfPresent(UserInfoDO::getName, reqVO.getName())
                .eqIfPresent(UserInfoDO::getUser, reqVO.getUser())
                .eqIfPresent(UserInfoDO::getPassword, reqVO.getPassword())
                .eqIfPresent(UserInfoDO::getPhone, reqVO.getPhone())
                .eqIfPresent(UserInfoDO::getIdno, reqVO.getIdno())
                .eqIfPresent(UserInfoDO::getEmail, reqVO.getEmail())
                .eqIfPresent(UserInfoDO::getRemark, reqVO.getRemark())
                .eqIfPresent(UserInfoDO::getHeadurl, reqVO.getHeadurl())
                .betweenIfPresent(UserInfoDO::getBirthdate, reqVO.getBirthdate())
                .eqIfPresent(UserInfoDO::getNativeplace, reqVO.getNativeplace())
                .eqIfPresent(UserInfoDO::getCountry, reqVO.getCountry())
                .eqIfPresent(UserInfoDO::getProvince, reqVO.getProvince())
                .eqIfPresent(UserInfoDO::getCity, reqVO.getCity())
                .eqIfPresent(UserInfoDO::getSex, reqVO.getSex())
                .betweenIfPresent(UserInfoDO::getCreateTime, reqVO.getCreateTime())
                .orderByDesc(UserInfoDO::getId));
    }

    default List<UserInfoDO> selectList(AppUserInfoExportReqVO reqVO) {
        return selectList(new LambdaQueryWrapperX<UserInfoDO>()
                .eqIfPresent(UserInfoDO::getOpenid, reqVO.getOpenid())
                .likeIfPresent(UserInfoDO::getName, reqVO.getName())
                .eqIfPresent(UserInfoDO::getUser, reqVO.getUser())
                .eqIfPresent(UserInfoDO::getPassword, reqVO.getPassword())
                .eqIfPresent(UserInfoDO::getPhone, reqVO.getPhone())
                .eqIfPresent(UserInfoDO::getIdno, reqVO.getIdno())
                .eqIfPresent(UserInfoDO::getEmail, reqVO.getEmail())
                .eqIfPresent(UserInfoDO::getRemark, reqVO.getRemark())
                .eqIfPresent(UserInfoDO::getHeadurl, reqVO.getHeadurl())
                .betweenIfPresent(UserInfoDO::getBirthdate, reqVO.getBirthdate())
                .eqIfPresent(UserInfoDO::getNativeplace, reqVO.getNativeplace())
                .eqIfPresent(UserInfoDO::getCountry, reqVO.getCountry())
                .eqIfPresent(UserInfoDO::getProvince, reqVO.getProvince())
                .eqIfPresent(UserInfoDO::getCity, reqVO.getCity())
                .eqIfPresent(UserInfoDO::getSex, reqVO.getSex())
                .betweenIfPresent(UserInfoDO::getCreateTime, reqVO.getCreateTime())
                .orderByDesc(UserInfoDO::getId));
    }

}
