veve-batch-material/target/root-0.0.1-SNAPSHOT/WEB-INF/classes/mapper/UserMapper.xml
2025-07-21 11:43:14 +07:00

260 lines
8.8 KiB
XML

<?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.veve_plus.root.mapper.UserMapper">
<resultMap id="userResultMap" type="com.veve_plus.root.dto.user.UserResponse">
<id property="userId" column="user_id" />
<result property="deptId" column="dept_id" />
<result property="deptName" column="dept_name" />
<result property="managerId" column="manager_id" />
<result property="managerName" column="manager_name" />
<result property="username" column="username" />
<result property="firstName" column="first_name" />
<result property="lastName" column="last_name" />
<result property="gender" column="gender" />
<result property="phone" column="phone" />
<result property="email" column="email" />
<result property="contractNo" column="contract_no" />
<result property="contractDate" column="contract_date" />
<result property="identityNo" column="identity_no" />
<result property="issuedDate" column="issued_date" />
<result property="issuedPlace" column="issued_place" />
<result property="taxCode" column="tax_code" />
<result property="avatarName" column="avatar_name" />
<result property="avatarPath" column="avatar_path" />
<result property="password" column="password" />
<result property="isAdmin" column="is_admin" />
<result property="isManager" column="is_manager" />
<result property="isLocked" column="is_locked" />
<result property="isExpired" column="is_expired" />
<result property="isCredentialExpired" column="is_credential_expired" />
<result property="status" column="status" />
<result property="level" column="level" />
<result property="bank" column="bank" />
<result property="bankAccount" column="bank_account" />
<result property="createdBy" column="created_by" />
<result property="updatedBy" column="updated_by" />
<result property="pwdResetTime" column="pwd_reset_time" />
<result property="createdTime" column="created_time" />
<result property="updatedTime" column="updated_time" />
<result property="roleIds" column="role_ids" />
</resultMap>
<select id="findByEmail" resultType="com.veve_plus.root.dto.auth.LoginDto">
SELECT email
, password
, status
FROM tb_user
WHERE email = #{email}
</select>
<select id="findUserInfoByEmail" resultType="com.veve_plus.root.entity.User">
SELECT user_id as userId
, dept_id as deptId
, username
, first_name as firstName
, last_name as lastName
, gender
, phone
, email
FROM tb_user
WHERE email = #{email}
</select>
<select id="findAllUsersByCondition" resultMap="userResultMap">
SELECT a.*,
CONCAT(c.first_name,' ',c.last_name) as manager_name,
b.name as dept_name,
(
SELECT GROUP_CONCAT(d.role_id) FROM tb_users_roles d WHERE a.user_id = d.user_id
) AS role_ids,
(
SELECT GROUP_CONCAT(f.name) FROM tb_role f LEFT JOIN tb_users_roles g ON f.role_id = g.role_id WHERE a.user_id = g.user_id
) AS roleNames,
e.code_name as levelName,
f.code_name as classificationName
FROM tb_user a
LEFT JOIN tb_dept b on a.dept_id = b.dept_id
LEFT JOIN tb_user c on b.manager_id = c.user_id
LEFT JOIN tb_code e on a.`level` = e.code_id AND e.group_id = '9'
LEFT JOIN tb_code f on a.`classification` = f.code_id AND f.group_id = '10'
<where>
<if test="keyword != null and keyword != ''">
AND ( a.username LIKE concat('%',#{keyword},'%')
OR a.first_name LIKE concat('%',#{keyword},'%')
OR a.last_name LIKE concat('%',#{keyword},'%')
OR a.email LIKE concat('%',#{keyword},'%')
OR a.phone LIKE concat('%',#{keyword},'%')
OR CONCAT(c.first_name,' ',c.last_name) LIKE concat('%',#{keyword},'%')
)
</if>
<if test="classification != null and !classification.isEmpty()">
AND f.code_id IN
<foreach item="id" collection="classification.split(',')" open="(" separator="," close=")">
#{id}
</foreach>
</if>
<if test="deptId != null and !deptId.isEmpty()">
AND b.dept_id IN
<foreach item="id" collection="deptId.split(',')" open="(" separator="," close=")">
#{id}
</foreach>
</if>
<if test="level != null and !level.isEmpty()">
AND e.code_id IN
<foreach item="id" collection="level.split(',')" open="(" separator="," close=")">
#{id}
</foreach>
</if>
<if test="status != null">
AND a.status = #{status}
</if>
</where>
</select>
<insert id="insert" parameterType="com.veve_plus.root.dto.user.UserDto" useGeneratedKeys="true" keyProperty="userId" >
INSERT INTO tb_user (
user_id,
dept_id,
username,
first_name,
last_name,
gender,
phone,
email,
contract_no,
contract_date,
identity_no,
issued_date,
issued_place,
tax_code,
avatar_name,
avatar_path,
password,
download_password,
is_admin,
is_manager,
is_locked,
is_expired,
is_credential_expired,
status,
level,
bank,
bank_account,
classification,
created_by,
updated_by,
pwd_reset_time,
created_time,
updated_time
)
VALUES (
#{userId},
#{deptId},
#{username},
#{firstName},
#{lastName},
#{gender},
#{phone},
#{email},
#{contractNo},
#{contractDate},
#{identityNo},
#{issuedDate},
#{issuedPlace},
#{taxCode},
#{avatarName},
#{avatarPath},
#{password},
SHA2(#{downloadPassword}, '512'),
#{isAdmin},
#{isManager},
#{isLocked},
#{isExpired},
#{isCredentialExpired},
#{status},
#{level},
#{bank},
#{bankAccount},
#{classification},
#{createdBy},
#{updatedBy},
#{pwdResetTime},
SYSDATE(),
SYSDATE()
)
</insert>
<insert id="insertRole" parameterType="com.veve_plus.root.dto.user.UserRole">
INSERT INTO tb_users_roles (
user_id,
role_id,
created_by,
updated_by,
created_time,
updated_time
) VALUES (
#{userId},
#{roleId},
#{createdBy},
#{updatedBy},
SYSDATE(),
SYSDATE()
)
</insert>
<update id="update" parameterType="com.veve_plus.root.dto.user.UserDto">
UPDATE tb_user
SET
dept_id = #{deptId},
username = #{username},
first_name = #{firstName},
last_name = #{lastName},
gender = #{gender},
phone = #{phone},
<!--email = #{email},-->
contract_no = #{contractNo},
contract_date = #{contractDate},
identity_no = #{identityNo},
issued_date = #{issuedDate},
issued_place = #{issuedPlace},
tax_code = #{taxCode},
is_manager = #{isManager},
classification = #{classification},
status = #{status},
level = #{level},
bank = #{bank},
bank_account = #{bankAccount},
updated_by = #{updatedBy},
updated_time = SYSDATE()
WHERE user_id = #{userId}
</update>
<delete id="deleteRolesByUserId">
DELETE FROM tb_users_roles WHERE user_id = #{userId}
</delete>
<select id="getInfoUserById" resultType="com.veve_plus.root.dto.user.UserResponse">
SELECT
user_id as userId,
dept_id as deptId,
username,
first_name as firstName,
last_name as lastName,
gender,
phone,
email,
classification,
contract_no as contractNo,
contract_date as contractDate,
identity_no as identityNo,
issued_date as issuedDate,
issued_place as issuedPlace,
tax_code as taxCode,
avatar_name as avatarName,
avatar_path as avatarPath,
e.code_name as levelName
FROM tb_user
LEFT JOIN tb_code e on tb_user.level = e.code_id
WHERE user_id = #{userId}
</select>
</mapper>