package com.sunda.spmsuser.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.sunda.spmsuser.entity.SpmsUser;

import java.util.List;
import java.util.Map;

import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;
import org.springframework.stereotype.Component;

/**
 * <p>
 * SPMS用户信息表 Mapper 接口
 * </p>
 *
 * @author Wayne
 * @since 2021-01-25
 */
@Mapper
@Component
public interface SpmsUserMapper extends BaseMapper<SpmsUser> {

    @Select("SELECT u.WORK_CODE AS \"userId\",\n" +
            "  u.LOGIN_PASSWORD AS \"loginPassword\",\n" +
            "  u.WORK_ID AS \"workId\",\n" +
            "  u.LAST_NAME AS \"lastName\",\n" +
            "  u.TELEPHONE AS \"telephone\",\n" +
            "  u.MOBILE AS \"mobile\",\n" +
            "  u.EMAIL AS \"email\",\n" +
            "  u.POSITION_ID AS \"positionId\",\n" +
            "  u.POSITION_NAME AS \"positionName\",\n" +
            "  u.DEPT_ID AS \"deptId\",\n" +
            "  u.DEPT_NAME AS \"deptName\",\n" +
            "  u.SUBCOMPANY_ID AS \"subcompanyId\",\n" +
            "  u.SUBCOMPANY_NAME AS \"subcompanyName\",\n" +
            "  u.COMPANY AS \"company\",\n" +
            "  u.BRANCH_POINT AS \"branchPoint\",\n" +
            "  u.BRANCH_LINE AS \"branchLine\",\n" +
            "  u.MANAGER_ID AS \"managerId\",\n" +
            "  u.MANAGER_NAME AS \"managerName\",\n" +
            "  u.OA_STATUS AS \"oaStatus\",\n" +
            "  u.FACTORY AS \"factory\",\n" +
            "  u.SPMS_STATUS AS \"spmsStatus\"\n" +
            "FROM SPMS_USER u WHERE u.WORK_CODE = #{userId}")
    SpmsUser getByUserId(@Param("userId") String userId);


    @Select("SELECT u.WORK_CODE AS \"userId\",\n" +
            "  u.LOGIN_PASSWORD AS \"loginPassword\",\n" +
            "  u.WORK_ID AS \"workId\",\n" +
            "  u.LAST_NAME AS \"lastName\",\n" +
            "  u.TELEPHONE AS \"telephone\",\n" +
            "  u.MOBILE AS \"mobile\",\n" +
            "  u.EMAIL AS \"email\",\n" +
            "  u.POSITION_ID AS \"positionId\",\n" +
            "  u.POSITION_NAME AS \"positionName\",\n" +
            "  u.DEPT_ID AS \"deptId\",\n" +
            "  u.DEPT_NAME AS \"deptName\",\n" +
            "  u.SUBCOMPANY_ID AS \"subcompanyId\",\n" +
            "  u.SUBCOMPANY_NAME AS \"subcompanyName\",\n" +
            "  u.COMPANY AS \"company\",\n" +
            "  u.BRANCH_POINT AS \"branchPoint\",\n" +
            "  u.BRANCH_LINE AS \"branchLine\",\n" +
            "  u.MANAGER_ID AS \"managerId\",\n" +
            "  u.MANAGER_NAME AS \"managerName\",\n" +
            "  u.OA_STATUS AS \"oaStatus\",\n" +
            "  u.FACTORY AS \"factory\",\n" +
            "  u.SPMS_STATUS AS \"spmsStatus\"\n" +
            "FROM SPMS_USER u WHERE u.WORK_CODE = #{userId} and u.EMAIL = #{email} ")
    SpmsUser getByUserEmail(@Param("userId") String userId,@Param("email") String email);

    @Update("UPDATE SPMS_USER SU SET SU.LOGIN_PASSWORD = #{MDPassword} WHERE SU.WORK_CODE = #{userId}")
    int updatePassword(@Param("userId") String userId, @Param("MDPassword") String MDPassword);

    @Select("<script>" +
    		"SELECT WORK_CODE AS \"userId\",\n" +
    		"	WORK_ID AS \"workId\",\n" +
    		"	LAST_NAME AS \"lastName\",\n" +
    		"	TELEPHONE AS \"telephone\",\n" +
    		"	MOBILE AS \"mobile\",\n" +
    		"	EMAIL AS \"email\",\n" +
    		"	POSITION_ID AS \"positionId\",\n" +
    		"	POSITION_NAME AS \"positionName\",\n" +
    		"	DEPT_ID AS \"deptId\",\n" +
    		"	DEPT_NAME AS \"deptName\",\n" +
    		"	SUBCOMPANY_ID AS \"subcompanyId\",\n" +
    		"	SUBCOMPANY_NAME AS \"subcompanyName\",\n" +
    		"	COMPANY AS \"company\",\n" +
    		"	BRANCH_POINT AS \"branchPoint\",\n" +
    		"	BRANCH_LINE AS \"branchLine\",\n" +
    		"	MANAGER_ID AS \"managerId\",\n" +
    		"	MANAGER_NAME AS \"managerName\",\n" +
    		"	OA_STATUS AS \"oaStatus\",\n" +
    		"	LOGIN_PASSWORD AS \"loginPassword\",\n" +
    		"	SPMS_STATUS AS \"spmsStatus\",\n" +
    		"	FACTORY AS \"factory\" \n" +
    		"FROM SPMS_USER \n" +
    		"WHERE 1=1 \n" +
            "	<when test='dto.userId != null and dto.userId != \"\"'> AND WORK_CODE LIKE CONCAT('%',CONCAT(#{dto.userId},'%')) </when> \n" +
            "	<when test='dto.company != null and dto.company != \"\"'> AND COMPANY LIKE CONCAT('%',CONCAT(#{dto.company},'%')) </when> \n" +
            "	<when test='dto.lastName != null and dto.lastName != \"\"'> AND LAST_NAME LIKE CONCAT('%',CONCAT(#{dto.lastName},'%')) </when> \n" +
            "	<when test='dto.subcompanyName != null and dto.subcompanyName != \"\"'> AND SUBCOMPANY_NAME LIKE CONCAT('%',CONCAT(#{dto.subcompanyName},'%')) </when> \n" +
            "	<when test='dto.deptName != null and dto.deptName != \"\"'> AND DEPT_NAME LIKE CONCAT('%',CONCAT(#{dto.deptName},'%')) </when> \n" +
            "	<when test='dto.positionName != null and dto.positionName != \"\"'> AND POSITION_NAME LIKE CONCAT('%',CONCAT(#{dto.positionName},'%')) </when> \n" +
            "	<when test='dto.spmsStatus != null and dto.spmsStatus != \"\"'> AND SPMS_STATUS = #{dto.spmsStatus} </when> \n" +
            "	ORDER BY WORK_CODE ASC \n" +
    		"</script>")
	List<Map<String, Object>> selectUserListByPage(IPage page, @Param("dto") SpmsUser dto);
}
