guardia-hrm/backend/target/classes/mapper/EmployeeMapper.xml

130 lines
5.4 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.zioinfo.hrm.employee.EmployeeMapper">
<resultMap id="EmpRM" type="com.zioinfo.hrm.employee.Employee">
<id property="id" column="id"/>
<result property="empNo" column="emp_no"/>
<result property="name" column="name"/>
<result property="nameEn" column="name_en"/>
<result property="departmentId" column="department_id"/>
<result property="departmentName" column="department_name"/>
<result property="positionId" column="position_id"/>
<result property="positionName" column="position_name"/>
<result property="gradeId" column="grade_id"/>
<result property="gradeName" column="grade_name"/>
<result property="employmentType" column="employment_type"/>
<result property="status" column="status"/>
<result property="hireDate" column="hire_date"/>
<result property="retireDate" column="retire_date"/>
<result property="email" column="email"/>
<result property="phoneEnc" column="phone_enc"/>
<result property="photoUrl" column="photo_url"/>
<result property="gender" column="gender"/>
<result property="birthDate" column="birth_date"/>
<result property="createdBy" column="created_by"/>
<result property="createdAt" column="created_at"/>
<result property="updatedAt" column="updated_at"/>
</resultMap>
<select id="findAll" resultMap="EmpRM">
SELECT e.id, e.emp_no, e.name, e.name_en,
e.department_id, d.dept_name AS department_name,
e.position_id, p.position_name,
e.grade_id, g.grade_name,
e.employment_type, e.status, e.hire_date, e.retire_date,
e.email, e.photo_url, e.gender, e.created_by, e.created_at, e.updated_at
FROM hrm_employees e
LEFT JOIN hrm_departments d ON e.department_id = d.id
LEFT JOIN hrm_positions p ON e.position_id = p.id
LEFT JOIN hrm_grades g ON e.grade_id = g.id
<where>
<if test="keyword != null and keyword != ''">
AND (e.name ILIKE '%'||#{keyword}||'%' OR e.emp_no ILIKE '%'||#{keyword}||'%')
</if>
<if test="deptId != null">AND e.department_id = #{deptId}</if>
<if test="status != null and status != ''">AND e.status = #{status}</if>
</where>
ORDER BY e.emp_no
LIMIT #{limit} OFFSET #{offset}
</select>
<select id="countAll" resultType="long">
SELECT COUNT(*) FROM hrm_employees e
<where>
<if test="keyword != null and keyword != ''">
AND (e.name ILIKE '%'||#{keyword}||'%' OR e.emp_no ILIKE '%'||#{keyword}||'%')
</if>
<if test="deptId != null">AND e.department_id = #{deptId}</if>
<if test="status != null and status != ''">AND e.status = #{status}</if>
</where>
</select>
<select id="findById" resultMap="EmpRM">
SELECT e.*, d.dept_name AS department_name, p.position_name, g.grade_name
FROM hrm_employees e
LEFT JOIN hrm_departments d ON e.department_id = d.id
LEFT JOIN hrm_positions p ON e.position_id = p.id
LEFT JOIN hrm_grades g ON e.grade_id = g.id
WHERE e.id = #{id}
</select>
<select id="findByEmpNo" resultMap="EmpRM">
SELECT * FROM hrm_employees WHERE emp_no = #{empNo}
</select>
<select id="getLastEmpNo" resultType="string">
SELECT emp_no FROM hrm_employees ORDER BY id DESC LIMIT 1
</select>
<insert id="insert" useGeneratedKeys="true" keyProperty="id">
INSERT INTO hrm_employees
(emp_no, name, name_en, department_id, position_id, grade_id,
employment_type, status, hire_date, email, phone_enc, photo_url, gender, birth_date, address, bank_account, created_by)
VALUES
(#{empNo}, #{name}, #{nameEn}, #{departmentId}, #{positionId}, #{gradeId},
#{employmentType}, #{status}, #{hireDate}, #{email}, #{phoneEnc}, #{photoUrl}, #{gender}, #{birthDate}, #{address}, #{bankAccount}, #{createdBy})
</insert>
<update id="update">
UPDATE hrm_employees SET
name=#{name}, name_en=#{nameEn}, department_id=#{departmentId},
position_id=#{positionId}, grade_id=#{gradeId},
employment_type=#{employmentType}, email=#{email},
phone_enc=#{phoneEnc}, photo_url=#{photoUrl}, gender=#{gender},
birth_date=#{birthDate}, address=#{address}, updated_at=NOW()
WHERE id=#{id}
</update>
<update id="updateStatus">
UPDATE hrm_employees SET status=#{status}, retire_date=#{retireDate}, updated_at=NOW()
WHERE id=#{id}
</update>
<select id="getCareerList" resultType="map">
SELECT id, emp_id, company_name, position, start_date, end_date, description
FROM hrm_emp_careers WHERE emp_id=#{empId} ORDER BY start_date DESC
</select>
<insert id="insertCareer">
INSERT INTO hrm_emp_careers (emp_id, company_name, position, start_date, end_date, description)
VALUES (#{empId}, #{companyName}, #{position}, #{startDate}, #{endDate}, #{description})
</insert>
<delete id="deleteCareer">DELETE FROM hrm_emp_careers WHERE id=#{id}</delete>
<select id="getCertList" resultType="map">
SELECT id, emp_id, cert_name, cert_no, issue_date, expire_date, issuer
FROM hrm_emp_certs WHERE emp_id=#{empId} ORDER BY issue_date DESC
</select>
<insert id="insertCert">
INSERT INTO hrm_emp_certs (emp_id, cert_name, cert_no, issue_date, expire_date, issuer)
VALUES (#{empId}, #{certName}, #{certNo}, #{issueDate}, #{expireDate}, #{issuer})
</insert>
<delete id="deleteCert">DELETE FROM hrm_emp_certs WHERE id=#{id}</delete>
</mapper>