<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
		PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
		"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.ruoyi.system.mapper.SysUserMapper">

	<resultMap type="SysUser" id="SysUserResult">
		<id     property="userId"       column="user_id"      />
		<result property="deptId"       column="dept_id"      />
		<result property="userName"     column="user_name"    />
		<result property="nickName"     column="nick_name"    />
		<result property="email"        column="email"        />
		<result property="phonenumber"  column="phonenumber"  />
		<result property="sex"          column="sex"          />
		<result property="avatar"       column="avatar"       />
		<result property="userSystem"    column="user_system" />
		<result property="password"     column="password"     />
		<result property="userType"     column="user_type"    />
		<result property="openId"     	column="open_id"      />
		<result property="unionId"     	column="union_id"     />
		<result property="imgSrc"     	column="img_src"      />
		<result property="sessionKey" 	column="session_key"  />
		<result property="relatedNo" 	column="related_no"   />
		<result property="status"       column="status"       />
		<result property="delFlag"      column="del_flag"     />
		<result property="loginIp"      column="login_ip"     />
		<result property="loginDate"    column="login_date"   />
		<result property="createBy"     column="create_by"    />
		<result property="createTime"   column="create_time"  />
		<result property="updateBy"     column="update_by"    />
		<result property="updateTime"   column="update_time"  />
		<result property="remark"       column="remark"       />
		<association property="dept"    column="dept_id" javaType="SysDept" resultMap="deptResult" />
		<collection  property="roles"   javaType="java.util.List"        resultMap="RoleResult" />
	</resultMap>

	<resultMap id="deptResult" type="SysDept">
		<id     property="deptId"   column="dept_id"     />
		<result property="parentId" column="parent_id"   />
		<result property="deptName" column="dept_name"   />
		<result property="orderNum" column="order_num"   />
		<result property="leader"   column="leader"      />
		<result property="status"   column="dept_status" />
	</resultMap>

	<resultMap id="RoleResult" type="SysRole">
		<id     property="roleId"       column="role_id"        />
		<result property="roleName"     column="role_name"      />
		<result property="roleKey"      column="role_key"       />
		<result property="roleSort"     column="role_sort"      />
		<result property="dataScope"     column="data_scope"    />
		<result property="status"       column="role_status"    />
	</resultMap>

	<sql id="selectUserVo">
        select u.user_id, u.dept_id, u.user_name, u.nick_name, u.email, u.avatar, u.phonenumber, u.password, u.user_type, u.user_system, u.open_id, u.union_id, u.img_src, u.session_key,
         u.related_no, u.sex, u.status, u.del_flag, u.login_ip, u.login_date, u.create_by, u.create_time, u.remark,
        d.dept_id, d.parent_id, d.dept_name, d.order_num, d.leader, d.status as dept_status,
        r.role_id, r.role_name, r.role_key, r.role_sort, r.data_scope, r.status as role_status
        from sys_user u
		    left join sys_dept d on u.dept_id = d.dept_id
		    left join sys_user_role ur on u.user_id = ur.user_id
		    left join sys_role r on r.role_id = ur.role_id
    </sql>

	<select id="selectUserList" parameterType="SysUser" resultMap="SysUserResult">
		select u.user_id, u.dept_id, u.nick_name, u.user_name, u.email, u.avatar, u.phonenumber, u.password, u.user_type, u.user_system, u.open_id, u.union_id, u.img_src, u.session_key, u.related_no, u.sex, u.status, u.del_flag, u.login_ip, u.login_date, u.create_by, u.create_time, u.remark, d.dept_name, d.leader from sys_user u
		left join sys_dept d on u.dept_id = d.dept_id
		left join sys_user u1 on u.user_id = u1.user_id
		where u.del_flag = '0'
		<if test="userName != null and userName != ''">
			AND u.user_name like concat('%', #{userName}, '%')
		</if>
		<if test="status != null and status != ''">
			AND u.status = #{status}
		</if>
		<if test="userType != null and userType != ''">
			AND u.user_type = #{userType}
		</if>
		<if test="userType != null and userType != ''">
			AND u.user_system = #{userSystem}
		</if>
		<if test="openId != null and openId != ''">
			AND u.open_id = #{openId}
		</if>
		<if test="unionId != null and unionId != ''">
			AND u.union_id = #{unionId}
		</if>
		<if test="sessionKey != null and sessionKey != ''">
			AND u.session_key = #{sessionKey}
		</if>
		<if test="relatedNo != null and relatedNo != ''">
			AND u.related_no = #{relatedNo}
		</if>
		<if test="phonenumber != null and phonenumber != ''">
			AND u.phonenumber like concat('%', #{phonenumber}, '%')
		</if>
		<if test="params.beginTime != null and params.beginTime != ''"><!-- 开始时间检索 -->
			AND date_format(u.create_time,'%y%m%d') &gt;= date_format(#{params.beginTime},'%y%m%d')
		</if>
		<if test="params.endTime != null and params.endTime != ''"><!-- 结束时间检索 -->
			AND date_format(u.create_time,'%y%m%d') &lt;= date_format(#{params.endTime},'%y%m%d')
		</if>
		<if test="deptId != null and deptId != 0">
			AND (u.dept_id = #{deptId} OR u.dept_id IN ( SELECT t.dept_id FROM sys_dept t WHERE find_in_set(#{deptId}, ancestors) ))
		</if>
		<!-- 数据范围过滤 -->
		${params.dataScope}
	</select>

	<select id="selectUserByUserName" parameterType="String" resultMap="SysUserResult">
		<include refid="selectUserVo"/>
		where u.status = 0 and u.user_name = #{userName}
	</select>

	<select id="selectUserById" parameterType="Long" resultMap="SysUserResult">
		<include refid="selectUserVo"/>
		where u.user_id = #{userId}
	</select>

	<select id="selectUserByopenId" parameterType="String" resultMap="SysUserResult">
		SELECT user_id, user_name, nick_name, user_type, user_system, open_id, union_id, status, del_flag FROM sys_user WHERE open_id = #{openId}
	</select>

	<select id="selectUserByUnionId" parameterType="String" resultMap="SysUserResult">
		SELECT user_id, user_name, nick_name, phonenumber, user_type, user_system, open_id, union_id, status, del_flag FROM sys_user WHERE union_id = #{unionId}
	</select>

	<select id="selectUserByTel" parameterType="String" resultMap="SysUserResult">
		SELECT * FROM sys_user WHERE phonenumber = #{phonenumber} and user_type = '11'
	</select>

	<select id="checkUserNameUnique" parameterType="String" resultType="int">
		select count(1) from sys_user where user_name = #{userName} limit 1
	</select>

	<select id="checkPhoneUnique" parameterType="String" resultMap="SysUserResult">
		select user_id, user_name, phonenumber, user_system, related_no, status from sys_user where phonenumber = #{phonenumber} limit 1
	</select>

	<select id="checkEmailUnique" parameterType="String" resultMap="SysUserResult">
		select user_id, email from sys_user where email = #{email} limit 1
	</select>

	<select id="warehouseSelectUserByTel" resultType="com.ruoyi.common.core.domain.entity.SysUser">
		SELECT user_id, user_name, nick_name, user_type, user_system, phonenumber, open_id, union_id, session_key, del_flag FROM sys_user WHERE phonenumber = #{phonenumber} and user_type = '00'
	</select>

	<select id="selectUserByUserNameOrTel" parameterType="String" resultType="int">
		SELECT COUNT(user_id) FROM sys_user where user_name = #{phonenumber} or phonenumber = #{phonenumber}
	</select>

	<select id="selectUserByPhonenumber" parameterType="String" resultMap="SysUserResult">
		SELECT user_id, dept_id, user_name, nick_name, email, user_type, user_system, sex, phonenumber, avatar, open_id, union_id, session_key, password
		img_src, related_no, status, del_flag,login_ip, login_date FROM sys_user where phonenumber = #{phonenumber}
	</select>

	<insert id="insertUser" parameterType="SysUser" useGeneratedKeys="true" keyProperty="userId">
		insert into sys_user(
		<if test="userId != null and userId != 0">user_id,</if>
		<if test="deptId != null and deptId != 0">dept_id,</if>
		<if test="userName != null and userName != ''">user_name,</if>
		<if test="nickName != null and nickName != ''">nick_name,</if>
		<if test="email != null and email != ''">email,</if>
		<if test="avatar != null and avatar != ''">avatar,</if>
		<if test="phonenumber != null and phonenumber != ''">phonenumber,</if>
		<if test="sex != null and sex != ''">sex,</if>
		<if test="password != null and password != ''">password,</if>
		<if test="userType != null and userType != ''">user_type,</if>
		<if test="userSystem != null and userSystem != ''">user_system,</if>
		<if test="openId != null and openId != ''">open_id,</if>
		<if test="unionId != null and unionId != ''">union_id,</if>
		<if test="imgSrc != null and imgSrc != ''">img_src,</if>
		<if test="sessionKey != null and sessionKey != ''">session_key,</if>
		<if test="relatedNo != null and relatedNo != ''">related_no,</if>
		<if test="status != null and status != ''">status,</if>
		<if test="createBy != null and createBy != ''">create_by,</if>
		<if test="remark != null and remark != ''">remark,</if>
		create_time
		)values(
		<if test="userId != null and userId != ''">#{userId},</if>
		<if test="deptId != null and deptId != ''">#{deptId},</if>
		<if test="userName != null and userName != ''">#{userName},</if>
		<if test="nickName != null and nickName != ''">#{nickName},</if>
		<if test="email != null and email != ''">#{email},</if>
		<if test="avatar != null and avatar != ''">#{avatar},</if>
		<if test="phonenumber != null and phonenumber != ''">#{phonenumber},</if>
		<if test="sex != null and sex != ''">#{sex},</if>
		<if test="password != null and password != ''">#{password},</if>
		<if test="userType != null and userType != ''">#{userType},</if>
		<if test="userSystem != null and userSystem != ''">#{userSystem},</if>
		<if test="openId != null and openId != ''">#{openId},</if>
		<if test="unionId != null and unionId != ''">#{unionId},</if>
		<if test="imgSrc != null and imgSrc != ''">#{imgSrc},</if>
		<if test="sessionKey != null and sessionKey != ''">#{sessionKey},</if>
		<if test="status != null and status != ''">#{status},</if>
		<if test="createBy != null and createBy != ''">#{createBy},</if>
		<if test="remark != null and remark != ''">#{remark},</if>
		sysdate()
		)
	</insert>

	<update id="updateUser" parameterType="SysUser">
		update sys_user
		<set>
			<if test="deptId != null and deptId != 0">dept_id = #{deptId},</if>
			<if test="userName != null and userName != ''">user_name = #{userName},</if>
			<if test="nickName != null and nickName != ''">nick_name = #{nickName},</if>
			<if test="email != null and email != ''">email = #{email},</if>
			<if test="phonenumber != null and phonenumber != ''">phonenumber = #{phonenumber},</if>
			<if test="sex != null and sex != ''">sex = #{sex},</if>
			<if test="avatar != null and avatar != ''">avatar = #{avatar},</if>
			<if test="password != null and password != ''">password = #{password},</if>
			<if test="userType != null and userType != ''">user_type = #{userType},</if>
			<if test="userSystem != null and userSystem != ''">user_system = #{userSystem},</if>
			<if test="openId != null and openId != ''">open_id = #{openId},</if>
			<if test="unionId != null and unionId != ''">union_id = #{unionId},</if>
			<if test="imgSrc != null and imgSrc != ''">img_src = #{imgSrc},</if>
			<if test="sessionKey != null and sessionKey != ''">session_key = #{sessionKey},</if>
			<if test="relatedNo != null and relatedNo != ''">related_no = #{relatedNo},</if>
			<if test="status != null and status != ''">status = #{status},</if>
			<if test="loginIp != null and loginIp != ''">login_ip = #{loginIp},</if>
			<if test="loginDate != null">login_date = #{loginDate},</if>
			<if test="updateBy != null and updateBy != ''">update_by = #{updateBy},</if>
			<if test="remark != null">remark = #{remark},</if>
			update_time = sysdate()
		</set>
		where user_id = #{userId}
	</update>

	<update id="updateUserRelatedNo" parameterType="SysUser">
 		update sys_user set related_no = #{relatedNo}, img_src = #{imgSrc}, open_id = #{openId} where union_id = #{unionId}
	</update>

	<update id="unsubscribeUserRelatedNo" parameterType="SysUser">
 		update sys_user set related_no = #{relatedNo}, status = '1', del_flag = '2' where union_id = #{unionId}
	</update>

	<update id="updateUserStatus" parameterType="SysUser">
 		update sys_user set status = #{status} where user_id = #{userId}
	</update>

	<update id="updateUserAvatar" parameterType="SysUser">
 		update sys_user set avatar = #{avatar} where user_name = #{userName}
	</update>

	<update id="resetUserPwd" parameterType="SysUser">
 		update sys_user set password = #{password} where user_name = #{userName}
	</update>

    <update id="updateCarsDriverNamePhone" parameterType="Long">
		UPDATE sys_user u
		LEFT JOIN F_TMSORDERBILLSCARS car ON u.user_id = car.driver_user_id
		SET car.driver_name = u.nick_name,
		car.driver_tel = u.phonenumber
		WHERE
			car.driver_user_id IS NOT NULL
			AND u.user_id = #{userId}
	</update>

    <delete id="deleteUserById" parameterType="Long">
 		delete from sys_user where user_id = #{userId}
 	</delete>

	<delete id="deleteUserByIds" parameterType="Long">
		delete from sys_user where user_id in
		<foreach collection="array" item="userId" open="(" separator="," close=")">
			#{userId}
		</foreach>
<!--		update sys_user set del_flag = '2' where user_id in-->
<!--		<foreach collection="array" item="userId" open="(" separator="," close=")">-->
<!--			#{userId}-->
<!--		</foreach>-->
	</delete>

	<select id="selectUserNameFO" resultType="map">
		SELECT
			su.user_id userId,
			su.user_name userName
		FROM
			sys_user su
		LEFT JOIN sys_dict_data sd ON sd.dict_value = su.user_system
		AND sd.dict_type = 'user_system'
		WHERE
			su.STATUS = '0'
		AND sd.dict_label = '凯和'
		ORDER BY
			su.user_id
	</select>

    <select id="selectUserByRole" resultType="com.ruoyi.common.core.domain.entity.SysUser">
		SELECT
			u.user_id userId,
			u.user_name userName,
			u.nick_name nickName
		FROM
			sys_user u
			LEFT JOIN sys_user_role ur ON ur.user_id = u.user_id
			LEFT JOIN sys_role r ON r.role_id = ur.role_id
		WHERE
			r.role_name = #{roleName}
			AND u.STATUS = '0'
			AND u.del_flag = '0'
			AND r.STATUS = '0'
			AND r.del_flag = '0'
	</select>

</mapper> 