zouyu
2026-05-07 2eaeb19b16af087d17c186c6220bf64f2fc07f4f
performance-server/src/main/resources/mapper/PerformanceShiftMapper.xml
@@ -2,18 +2,28 @@
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.ruoyi.performance.mapper.PerformanceShiftMapper">
    <resultMap id="performanceShiftPageMap" type="com.ruoyi.performance.dto.PerformanceShiftMapDto">
        <result column="name" property="name"/>
    <resultMap id="performanceShiftMap" type="com.ruoyi.performance.dto.PerformanceShiftMapDto">
        <id column="id" property="id"/>
        <result column="shift" property="shift"/>
        <result column="work_time" property="workTime"/>
        <result column="annotation_text" property="annotationText"/>
        <result column="user_name" property="userName"/>
        <result column="shift_time" property="shiftTime"/>
        <result column="user_id" property="userId" />
        <result column="department" property="department" />
    </resultMap>
    <select id="performanceShiftPage" resultMap="performanceShiftPageMap">
    <select id="performanceShift" resultMap="performanceShiftMap">
        SELECT
        u2.name name,
        GROUP_CONCAT(s.work_time, ':', s.shift, ':', s.id order by s.work_time SEPARATOR ';') AS shift_time, u2.id user_id
        s.id,
        s.shift,
        s.work_time,
        s.annotation_text,
        sd.dict_label AS shift_name,
        u2.name AS user_name,
        u2.id user_id
        FROM performance_shift s
        left join sys_dict_data sd on s.shift = sd.dict_value and sd.dict_type='sys_class_type'
        LEFT JOIN (SELECT distinct u.* from
        user u
        left join department_lims dl on FIND_IN_SET(dl.id,u.depart_lims_id)
@@ -24,22 +34,28 @@
        </if>
         ) u2    on u2.id = s.user_id
        <where>
            name is not null
            <if test="time != null and time != ''">
                and DATE_FORMAT(s.work_time, '%Y-%m') = DATE_FORMAT(#{time}, '%Y-%m' )
            u2.name is not null
            <if test="firstDayOfMonth != null and lastDayOfMonth != null">
                AND s.work_time BETWEEN #{firstDayOfMonth} AND #{lastDayOfMonth}
            </if>
            <if test="userName != null and userName != ''">
                and u2.name like concat('%', #{userName}, '%')
            </if>
        </where>
        GROUP BY u2.id
        order by s.create_time
        order by s.work_time
    </select>
    <select id="performanceShiftYearPage" resultType="map">
        SELECT
        s.user_id, s.shift
    <select id="performanceShiftYear" resultMap="performanceShiftMap">
        SELECT distinct
        u2.name AS user_name,
        s.user_id,
        u2.account,
        sd.dict_label AS shift_name,
        s.work_time,
        s.shift,
        s.id
        FROM performance_shift s
        left join sys_dict_data sd on s.shift = sd.dict_value and sd.dict_type='sys_class_type'
        LEFT JOIN (SELECT u.* from
        user u
        left join department_lims dl on FIND_IN_SET(dl.id,u.depart_lims_id)
@@ -52,42 +68,13 @@
        where s.shift is not NULL
        and s.shift != ''
        and name is not null
        <if test="time != null and time != ''">
            and DATE_FORMAT(s.work_time, '%Y') = DATE_FORMAT(#{time}, '%Y' )
        <if test="startDateTime != null and endDateTime != null">
            and s.work_time between #{startDateTime} and #{endDateTime}
        </if>
        <if test="userName != null and userName != ''">
            and u2.name like concat('%', #{userName}, '%')
        </if>
        order by s.create_time
    </select>
    <select id="performanceShiftYear" resultType="java.util.Map">
        SELECT
        u2.name name,
        s.user_id, u2.account,
        DATE_FORMAT(s.work_time, '%c') work_time,
        GROUP_CONCAT(DATE_FORMAT(s.work_time, '%c'), ':', s.shift order by s.work_time SEPARATOR ';') month_str
        FROM performance_shift s
        LEFT JOIN (SELECT u.* from
        user u
        left join department_lims dl on FIND_IN_SET(dl.id,u.depart_lims_id)
        where status = '0'
        and del_flag = '0'
        <if test="laboratory != null and laboratory != ''">
            and   dl.name=#{laboratory}
        </if>
        ) u2   on u2.id = s.user_id
        where s.shift is not NULL
        and s.shift != ''
        and name is not null
        <if test="time != null and time != ''">
            and DATE_FORMAT(s.work_time, '%Y') = DATE_FORMAT(#{time}, '%Y' )
        </if>
        <if test="userName != null and userName != ''">
            and u.name like concat('%', #{userName}, '%')
        </if>
        GROUP BY u2.id
        order by s.create_time
        order by s.work_time
    </select>
    <select id="performanceShiftYearList" resultType="map">
@@ -112,7 +99,7 @@
        order by s.create_time
    </select>
    <select id="performanceShiftList" resultMap="performanceShiftPageMap">
    <select id="performanceShiftList" resultMap="performanceShiftMap">
        SELECT
        u.name name,
        GROUP_CONCAT(s.work_time, ':', s.shift, ':', s.id order by s.work_time SEPARATOR ';') AS shift_time, u.id user_id
@@ -137,4 +124,30 @@
        from department_lims
        where id = #{depLimsId}
    </select>
    <select id="selectListByWorkTime" resultType="com.ruoyi.performance.dto.PerformanceShiftMapDto">
        SELECT
            ps.id,
            ps.shift,
            ps.work_time,
            ps.user_id,
            u.name AS user_name,
            u.account AS person_code,
            st.start_time,
            st.end_time,
            sd.dict_label AS shift_name,
            ps.annotation_text
        FROM performance_shift ps
        inner JOIN user u ON ps.user_id = u.id
        LEFT JOIN shift_time st ON ps.shift = st.shift
        left join sys_dict_data sd on ps.shift = sd.dict_value AND sd.dict_type='sys_class_type'
        <where>
            <if test="startTime!=null and endTime!=null">
                AND ps.work_time BETWEEN #{startTime} AND #{endTime}
            </if>
            <if test="keyword!='' and keyword!=null">
                AND (u.account like concat('%',#{keyword},'%') OR u.name like concat('%',#{keyword},'%'))
            </if>
        </where>
        ORDER BY ps.work_time,u.sort
    </select>
</mapper>