<?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.ximai.mes.cal.mapper.CalShiftMapper">

    <resultMap type="calShiftVo" id="CalShiftResult">
        <result property="shiftId" column="shift_id"/>
        <result property="planId" column="plan_id"/>
        <result property="orderNum" column="order_num"/>
        <result property="shiftType" column="shift_type"/>
        <result property="shiftName" column="shift_name"/>
        <result property="startTime" column="start_time"/>
        <result property="breakStartTime" column="break_start_time"/>
        <result property="endTime" column="end_time"/>
        <result property="breakEndTime" column="break_end_time"/>
        <result property="remark" column="remark"/>
        <result property="attr1" column="attr1"/>
        <result property="attr2" column="attr2"/>
        <result property="attr3" column="attr3"/>
        <result property="attr4" column="attr4"/>
        <result property="createBy" column="create_by"/>
        <result property="createTime" column="create_time"/>
        <result property="updateBy" column="update_by"/>
        <result property="theDay" column="the_day"/>
        <result property="workunitId" column="workunit_id"/>
        <result property="workunitCode" column="workunit_code"/>
        <result property="workunitName" column="workunit_name"/>
        <result property="isWork" column="is_work"/>
    </resultMap>

    <sql id="selectCalShiftVo">
        select shift_id,
               plan_id,
               order_num,
               oper_type,
               shift_type,
               shift_name,
               start_time,
               break_start_time,
               end_time,
               break_end_time,
               remark,
               attr1,
               attr2,
               attr3,
               attr4,
               create_by,
               create_time,
               update_by,
               update_time
        from cal_shift
    </sql>

    <select id="selectCalShiftList" parameterType="CalShift" resultMap="CalShiftResult">
        <include refid="selectCalShiftVo"/>
        <where>
            <if test="planId != null ">and plan_id = #{planId}</if>
            <if test="orderNum != null ">and order_num = #{orderNum}</if>
            <if test="shiftName != null  and shiftName != ''">and shift_name like concat('%', #{shiftName}, '%')</if>
            <if test="startTime != null ">and start_time = #{startTime}</if>
            <if test="endTime != null ">and end_time = #{endTime}</if>
        </where>
    </select>

    <select id="selectCalShiftByShiftId" parameterType="Long" resultMap="CalShiftResult">
        <include refid="selectCalShiftVo"/>
        where shift_id = #{shiftId}
    </select>

    <select id="checkShiftCount" parameterType="Long" resultType="Integer">
        select count(*)
        from cal_shift
        where plan_id = #{planId}
    </select>

    <select id="selectOnWorkShift" resultMap="CalShiftResult">
        select ash.*, cpw.the_day, cpw.workunit_id, cpw.workunit_name, cpw.workunit_code,1 is_work from cal_shift ash
        inner join (select shift_name, workunit_id, workunit_code, workunit_name, the_Day, shift_id
        from cal_plan_workunit
        where is_work = 1
        group by shift_name, workunit_id, workunit_code, workunit_name, the_Day, shift_id) cpw
        on ash.shift_id = cpw.shift_id
        <where>
            <if test="shiftName != null ">and ash.shift_name = #{shiftName}</if>
            <if test="workunitId != null ">and cpw.workunit_id = #{workunitId}</if>
            <if test="theDay != null ">and cpw.the_day = #{theDay}</if>
        </where>
    </select>

    <insert id="insertCalShift" parameterType="CalShift" useGeneratedKeys="true" keyProperty="shiftId">
        insert into cal_shift
        <trim prefix="(" suffix=")" suffixOverrides=",">
            <if test="planId != null">plan_id,</if>
            <if test="planCode != null">plan_code,</if>
            <if test="orderNum != null">order_num,</if>
            <if test="operType != null">oper_type,</if>
            <if test="shiftName != null and shiftName != ''">shift_name,</if>
            <if test="shiftType != null and shiftType != ''">shift_type,</if>
            <if test="startTime != null">start_time,</if>
            <if test="breakStartTime != null">break_start_time,</if>
            <if test="endTime != null">end_time,</if>
            <if test="breakEndTime != null">break_end_time,</if>
            <if test="remark != null">remark,</if>
            <if test="attr1 != null">attr1,</if>
            <if test="attr2 != null">attr2,</if>
            <if test="attr3 != null">attr3,</if>
            <if test="attr4 != null">attr4,</if>
            <if test="createBy != null">create_by,</if>
            <if test="createTime != null">create_time,</if>
            <if test="updateBy != null">update_by,</if>
            <if test="updateTime != null">update_time,</if>
        </trim>
        <trim prefix="values (" suffix=")" suffixOverrides=",">
            <if test="planId != null">#{planId},</if>
            <if test="planCode != null">#{planCode},</if>
            <if test="orderNum != null">#{orderNum},</if>
            <if test="operType != null">#{operType},</if>
            <if test="shiftName != null and shiftName != ''">#{shiftName},</if>
            <if test="shiftType != null and shiftType != ''">#{shiftType},</if>
            <if test="startTime != null">#{startTime},</if>
            <if test="breakStartTime != null">#{breakStartTime},</if>
            <if test="endTime != null">#{endTime},</if>
            <if test="breakEndTime != null">#{breakEndTime},</if>
            <if test="remark != null">#{remark},</if>
            <if test="attr1 != null">#{attr1},</if>
            <if test="attr2 != null">#{attr2},</if>
            <if test="attr3 != null">#{attr3},</if>
            <if test="attr4 != null">#{attr4},</if>
            <if test="createBy != null">#{createBy},</if>
            <if test="createTime != null">#{createTime},</if>
            <if test="updateBy != null">#{updateBy},</if>
            <if test="updateTime != null">#{updateTime},</if>
        </trim>
    </insert>

    <update id="updateCalShift" parameterType="CalShift">
        update cal_shift
        <trim prefix="SET" suffixOverrides=",">
            <if test="planId != null">plan_id = #{planId},</if>
            <if test="planCode != null">plan_code = #{planCode},</if>
            <if test="orderNum != null">order_num = #{orderNum},</if>
            <if test="operType != null">oper_type = #{operType},</if>

            <if test="shiftName != null and shiftName != ''">shift_name = #{shiftName},</if>
            <if test="shiftType != null and shiftType != ''">shift_type = #{shiftType},</if>
            <if test="startTime != null">start_time = #{startTime},</if>
            <if test="breakStartTime != null">break_start_time = #{breakStartTime},</if>
            <if test="endTime != null">end_time = #{endTime},</if>
            <if test="breakEndTime != null">break_end_time = #{breakEndTime},</if>
            <if test="remark != null">remark = #{remark},</if>
            <if test="attr1 != null">attr1 = #{attr1},</if>
            <if test="attr2 != null">attr2 = #{attr2},</if>
            <if test="attr3 != null">attr3 = #{attr3},</if>
            <if test="attr4 != null">attr4 = #{attr4},</if>
            <if test="createBy != null">create_by = #{createBy},</if>
            <if test="createTime != null">create_time = #{createTime},</if>
            <if test="update/By != null">update_by = #{updateBy},</if>
            <if test="updateTime != null">update_time = #{updateTime},</if>
        </trim>
        where shift_id = #{shiftId}
    </update>

    <delete id="deleteCalShiftByShiftId" parameterType="Long">
        delete
        from cal_shift
        where shift_id = #{shiftId}
    </delete>

    <delete id="deleteCalShiftByShiftIds" parameterType="String">
        delete from cal_shift where shift_id in
        <foreach item="shiftId" collection="array" open="(" separator="," close=")">
            #{shiftId}
        </foreach>
    </delete>

    <delete id="deleteByPlanId" parameterType="Long">
        delete
        from cal_shift
        where plan_id = #{planId}
    </delete>


    <delete id="deleteByPlanCode">
        delete
        from cal_shift
        where plan_code = #{planCode}
    </delete>
</mapper>
