<?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.pro.mapper.task.ProTaskMapper">

    <resultMap type="com.ximai.mes.pro.domain.task.ProTask" id="ProTaskResult">
        <result property="taskId" column="task_id"/>
        <result property="taskCode" column="task_code"/>
        <result property="taskName" column="task_name"/>
        <result property="workstationId" column="workstation_id"/>
        <result property="workstationCode" column="workstation_code"/>
        <result property="workstationName" column="workstation_name"/>
        <result property="processId" column="process_id"/>
        <result property="processCode" column="process_code"/>
        <result property="processName" column="process_name"/>
        <result property="isCheck" column="is_check"/>
        <result property="itemId" column="item_id"/>
        <result property="itemCode" column="item_code"/>
        <result property="itemName" column="item_name"/>
        <result property="specification" column="specification"/>
        <result property="unitOfMeasure" column="unit_of_measure"/>
        <result property="quantity" column="quantity"/>
        <result property="quantityProduced" column="quantity_produced"/>
        <result property="quantityChanged" column="quantity_changed"/>
        <result property="status" column="status"/>
        <result property="quantityQualify" column="quantity_qualify"/>
        <result property="quantityUnqualify" column="quantity_unqualify"/>
        <result property="quantityWait" column="quantity_wait"/>
        <!--        <result property="quantityUnqualify" column="quantity_unqualify"/>-->
        <result property="clientId" column="client_id"/>
        <result property="clientCode" column="client_code"/>
        <result property="clientName" column="client_name"/>
        <result property="clientNick" column="client_nick"/>
        <result property="startTime" column="start_time"/>
        <result property="duration" column="duration"/>
        <result property="endTime" column="end_time"/>
        <result property="colorCode" column="color_code"/>
        <result property="requestDate" column="request_date"/>
        <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="updateTime" column="update_time"/>
        <result property="arrangeCode" column="arrange_code"/>
        <result property="isLastProcess" column="is_last_process"/>

    </resultMap>


    <resultMap type="com.ximai.mes.pro.domain.task.ProTask" id="ProTaskVo">
        <result property="taskId" column="task_id"/>
        <result property="taskCode" column="task_code"/>
        <result property="taskName" column="task_name"/>
        <result property="workstationId" column="workstation_id"/>
        <result property="workstationCode" column="workstation_code"/>
        <result property="workstationName" column="workstation_name"/>
        <result property="processId" column="process_id"/>
        <result property="processCode" column="process_code"/>
        <result property="processName" column="process_name"/>
        <result property="isCheck" column="is_check"/>
        <result property="itemId" column="item_id"/>
        <result property="itemCode" column="item_code"/>
        <result property="itemName" column="item_name"/>
        <result property="specification" column="specification"/>
        <result property="unitOfMeasure" column="unit_of_measure"/>
        <result property="quantity" column="quantity"/>
        <result property="quantityProduced" column="quantity_produced"/>
        <result property="quantityChanged" column="quantity_changed"/>
        <result property="status" column="status"/>
        <result property="quantityQualify" column="quantity_qualify"/>
        <result property="quantityUnqualify" column="quantity_unqualify"/>
        <result property="quantityWait" column="quantity_wait"/>
        <result property="clientId" column="client_id"/>
        <result property="clientCode" column="client_code"/>
        <result property="clientName" column="client_name"/>
        <result property="clientNick" column="client_nick"/>
        <result property="startTime" column="start_time"/>
        <result property="duration" column="duration"/>
        <result property="endTime" column="end_time"/>
        <result property="colorCode" column="color_code"/>
        <result property="requestDate" column="request_date"/>
        <result property="remark" column="remark"/>
        <result property="arrangeCode" column="arrange_code"/>
        <result property="taskBatch" column="task_batch"/>
        <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="updateTime" column="update_time"/>
        <result property="arrangeCode" column="arrange_code"/>
        <result property="arrangeCode" column="arrange_code"/>
        <result property="workunitId" column="workunit_id"/>
        <result property="workunitName" column="workunit_name"/>
        <result property="workunitCode" column="workunit_code"/>
        <result property="isLastProcess" column="is_last_process"/>
    </resultMap>


    <sql id="selectProTaskVo">
        select t.task_id,
               t.arrange_code,
               t.task_code,
               t.task_name,
               t.workstation_id,
               ws.workstation_code,
               ws.workstation_name,
               t.process_id,
               p.process_code,
               p.process_name,
               t.item_id,
               i.item_code,
               i.item_name,
               t.specification,
               t.unit_of_measure,
               t.quantity,
               t.quantity_wait,
               t.quantity_produced,
               t.quantity_changed,
               t.client_id,
               t.client_code,
               t.client_name,
               t.client_nick,
               t.start_time,
               t.duration,
               t.end_time,
               t.color_code,
               t.request_date,
               t.remark,
               t.attr1,
               t.attr2,
               t.attr3,
               t.attr4,
               t.create_by,
               t.create_time,
               t.update_by,
               t.update_time,
               t.status,
               t.quantity_qualify,
               t.quantity_unqualify,
               t.arrange_code,
               t.task_batch,
               t.ordinal,
               t.is_last_process
        from pro_task t
                 left join pro_process p on t.process_id = p.process_id
                 left join md_item i
                           on t.item_id = i.item_id
                 left join md_workstation ws
                           on t.workstation_id = ws.workstation_id
    </sql>


    <sql id="selectProTaskDetailVo">
        SELECT ptw.task_workunit_id,
               t.task_id,
               t.task_code,
               t.task_name,
               t.workstation_id,
               ws.workstation_code,
               ws.workstation_name,
               t.process_id,
               t.arrange_code,
               p.process_code,
               p.process_name,
               t.item_id,
               i.item_code,
               i.item_name,
               t.specification,
               t.client_id,
               t.client_code,
               t.client_name,
               t.client_nick,
               t.start_time,
               t.duration,
               t.end_time,
               t.color_code,
               t.request_date,
               t.remark,
               t.attr1,
               t.attr2,
               t.attr3,
               t.attr4,
               t.create_by,
               t.create_time,
               t.update_by,
               t.update_time,
               ptw.task_workunit_id,
               ptw.quantity,
               ptw.quantity_produced,
               ptw.quantity_changed,
               ptw.quantity_qualify,
               ptw.unit_of_measure,
               ptw.STATUS,
               mw.workunit_name workunit_name,
               mw.workunit_id   workunit_id,
               mw.workunit_code workunit_code,
               ptw.quantity_unqualify
        FROM pro_task_workunit ptw
                 LEFT JOIN pro_task t ON t.task_id = ptw.task_id
                 LEFT JOIN pro_process p ON t.process_id = p.process_id
                 LEFT JOIN md_item i ON t.item_id = i.item_id
                 LEFT JOIN md_workunit mw ON ptw.workunit_id = mw.workunit_id
                 LEFT JOIN md_workstation ws ON t.workstation_id = ws.workstation_id
    </sql>


    <select id="selectProTaskDetailList" resultMap="ProTaskVo">
        <include refid="selectProTaskDetailVo"/>
        <where>
            <if test="taskCode != null  and taskCode != ''">and t.task_code = #{taskCode}</if>
            <if test="taskName != null  and taskName != ''">and t.task_name like concat('%', #{taskName}, '%')</if>
            <if test="taskWorkunitId != null  and taskWorkunitId != ''">and ptw.task_workunit_id =#{taskWorkunitId}</if>
            <if test="taskId != null  and taskId != ''">and ptw.task_id = #{taskId}</if>
            <if test="workstationId != null ">and t.workstation_id = #{workstationId}</if>
            <if test="workstationCode != null  and workstationCode != ''">and ws.workstation_code = #{workstationCode}
            </if>
            <if test="workstationName != null  and workstationName != ''">and ws.workstation_name like concat('%',
                #{workstationName}, '%')
            </if>
            <if test="processId != null ">and t.process_id = #{processId}</if>
            <if test="processCode != null  and processCode != ''">and p.process_code = #{processCode}</if>
            <if test="arrangeCode != null  and arrangeCode != ''">and t.arrange_code = #{arrangeCode}</if>
            <if test="processName != null  and processName != ''">and p.process_name like concat('%', #{processName},
                '%')
            </if>
            <if test="itemId != null ">and t.item_id = #{itemId}</if>
            <if test="itemCode != null  and itemCode != ''">and i.item_code = #{itemCode}</if>
            <if test="itemName != null  and itemName != ''">and i.item_name like concat('%', #{itemName}, '%')</if>
            <if test="specification != null  and specification != ''">and t.specification = #{specification}</if>
            <if test="unitOfMeasure != null  and unitOfMeasure != ''">and t.unit_of_measure = #{unitOfMeasure}</if>
            <if test="quantity != null ">and t.quantity = #{quantity}</if>
            <if test="quantityProduced != null ">and t.quantity_produced = #{quantityProduced}</if>
            <if test="quantityChanged != null ">and t.quantity_changed = #{quantityChanged}</if>
            <if test="clientId != null ">and t.client_id = #{clientId}</if>
            <if test="clientCode != null  and clientCode != ''">and t.client_code = #{clientCode}</if>
            <if test="clientName != null  and clientName != ''">and t.client_name like concat('%', #{clientName}, '%')
            </if>
            <if test="clientNick != null  and clientNick != ''">and t.client_nick = #{clientNick}</if>
            <if test="startTime != null ">and t.start_time = #{startTime}</if>
            <if test="duration != null ">and t.duration = #{duration}</if>
            <if test="endTime != null ">and t.end_time &gt; #{endTime}</if>
            <if test="colorCode != null  and colorCode != ''">and t.color_code = #{colorCode}</if>
            <if test="requestDate != null ">and t.request_date = #{requestDate}</if>
            <if test="attr1 != null  and attr1 != ''">and t.attr1 = #{attr1}</if>
            <if test="attr2 != null  and attr2 != ''">and t.attr2 = #{attr2}</if>
            <if test="attr3 != null ">and t.attr3 = #{attr3}</if>
            <if test="attr4 != null ">and t.attr4 = #{attr4}</if>
            <if test="statusStr != null  and statusStr != ''">and ptw.status IN
                <foreach item="item" collection="statusList" open="(" separator="," close=")">
                    #{item}
                </foreach>
            </if>
            <if test="statusArr != null ">and ptw.status in
                <foreach item="item" collection="statusArr" open="(" separator="," close=")">
                    #{item}
                </foreach>
            </if>
            <if test="quantityQualify != null ">and t.quantity_qualify = #{quantityQualify}</if>
            <if test="quantityUnqualify != null ">and t.quantity_unqualify = #{quantityUnqualify}</if>
        </where>
    </select>


    <select id="selectProTaskList" parameterType="ProTask" resultMap="ProTaskResult">
        <include refid="selectProTaskVo"/>
        <where>
            <if test="taskCode != null  and taskCode != ''">and t.task_code = #{taskCode}</if>
            <if test="taskId != null  and taskId != ''">and t.task_id = #{taskId}</if>
            <if test="taskName != null  and taskName != ''">and t.task_name like concat('%', #{taskName}, '%')</if>
            <if test="workstationId != null ">and t.workstation_id = #{workstationId}</if>
            <if test="workstationCode != null  and workstationCode != ''">and ws.workstation_code = #{workstationCode}
            </if>
            <if test="workstationName != null  and workstationName != ''">and ws.workstation_name like concat('%',
                #{workstationName}, '%')
            </if>
            <if test="processId != null ">and t.process_id = #{processId}</if>
            <if test="arrangeCode != null ">and t.arrange_code = #{arrangeCode}</if>
            <if test="processCode != null  and processCode != ''">and p.process_code = #{processCode}</if>
            <if test="processName != null  and processName != ''">and p.process_name like concat('%', #{processName},
                '%')
            </if>

            <if test="taskBatchStr != null  and taskBatchStr != ''">and t.task_batch like concat('%', #{taskBatchStr},
                '%')
            </if>

            <if test="itemId != null ">and t.item_id = #{itemId}</if>
            <if test="itemCode != null  and itemCode != ''">and i.item_code = #{itemCode}</if>
            <if test="itemName != null  and itemName != ''">and i.item_name like concat('%', #{itemName}, '%')</if>
            <if test="specification != null  and specification != ''">and t.specification = #{specification}</if>
            <if test="unitOfMeasure != null  and unitOfMeasure != ''">and t.unit_of_measure = #{unitOfMeasure}</if>
            <if test="quantity != null ">and t.quantity = #{quantity}</if>
            <if test="quantityProduced != null ">and t.quantity_produced = #{quantityProduced}</if>
            <if test="quantityChanged != null ">and t.quantity_changed = #{quantityChanged}</if>
            <if test="clientId != null ">and t.client_id = #{clientId}</if>
            <if test="clientCode != null  and clientCode != ''">and t.client_code = #{clientCode}</if>
            <if test="clientName != null  and clientName != ''">and t.client_name like concat('%', #{clientName}, '%')
            </if>
            <if test="clientNick != null  and clientNick != ''">and t.client_nick = #{clientNick}</if>
            <if test="startTime != null ">and t.start_time = #{startTime}</if>
            <if test="duration != null ">and t.duration = #{duration}</if>
            <if test="endTime != null ">and t.end_time &gt; #{endTime}</if>
            <if test="colorCode != null  and colorCode != ''">and t.color_code = #{colorCode}</if>
            <if test="requestDate != null ">and t.request_date = #{requestDate}</if>
            <if test="attr1 != null  and attr1 != ''">and t.attr1 = #{attr1}</if>
            <if test="attr2 != null  and attr2 != ''">and t.attr2 = #{attr2}</if>
            <if test="attr3 != null ">and t.attr3 = #{attr3}</if>
            <if test="attr4 != null ">and t.attr4 = #{attr4}</if>
            <if test="status != null  and status != ''">and t.status = #{status}</if>
            <if test="quantityQualify != null ">and t.quantity_qualify = #{quantityQualify}</if>
            <if test="quantityUnqualify != null ">and t.quantity_unqualify = #{quantityUnqualify}</if>
        </where>
    </select>

    <select id="selectProTaskByTaskId" resultMap="ProTaskVo">
        <include refid="selectProTaskVo"/>
        where t.task_id = #{taskId}
    </select>

    <select id="selectProTaskByTaskCode" parameterType="String" resultMap="ProTaskResult">
        <include refid="selectProTaskVo"/>
        where task_code = #{taskCode}
    </select>

    <insert id="insertProTask" parameterType="ProTask" useGeneratedKeys="true" keyProperty="taskId">
        insert into pro_task
        <trim prefix="(" suffix=")" suffixOverrides=",">
            <if test="taskCode != null and taskCode != ''">task_code,</if>
            <if test="taskName != null and taskName != ''">task_name,</if>
            <if test="workstationId != null">workstation_id,</if>
            <if test="workstationCode != null and workstationCode != ''">workstation_code,</if>
            <if test="workstationName != null and workstationName != ''">workstation_name,</if>
            <if test="ordinal != null">ordinal,</if>
            <if test="processId != null">process_id,</if>
            <if test="processCode != null">process_code,</if>
            <if test="processName != null">process_name,</if>
            <if test="itemId != null">item_id,</if>
            <if test="itemCode != null and itemCode != ''">item_code,</if>
            <if test="itemName != null and itemName != ''">item_name,</if>
            <if test="specification != null">specification,</if>
            <if test="unitOfMeasure != null and unitOfMeasure != ''">unit_of_measure,</if>
            <if test="quantity != null">quantity,</if>
            <if test="quantityWait != null">quantity_wait,</if>
            <if test="quantityProduced != null">quantity_produced,</if>
            <if test="quantityQualify != null ">quantity_qualify,</if>
            <if test="quantityUnqualify != null ">quantity_unqualify,</if>
            <if test="quantityChanged != null">quantity_changed,</if>
            <if test="clientId != null">client_id,</if>
            <if test="clientCode != null and clientCode != ''">client_code,</if>
            <if test="clientName != null and clientName != ''">client_name,</if>
            <if test="clientNick != null">client_nick,</if>
            <if test="startTime != null">start_time,</if>
            <if test="duration != null">duration,</if>
            <if test="endTime != null">end_time,</if>
            <if test="colorCode != null">color_code,</if>
            <if test="requestDate != null">request_date,</if>
            <if test="status != null">status,</if>
            <if test="remark != null">remark,</if>
            <if test="arrangeCode != null">arrange_code,</if>
            <if test="taskBatch != null">task_batch,</if>
            <if test="isLastProcess != null">is_last_process,</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="taskCode != null and taskCode != ''">#{taskCode},</if>
            <if test="taskName != null and taskName != ''">#{taskName},</if>
            <if test="workstationId != null">#{workstationId},</if>
            <if test="workstationCode != null and workstationCode != ''">#{workstationCode},</if>
            <if test="workstationName != null and workstationName != ''">#{workstationName},</if>
            <if test="ordinal != null">#{ordinal},</if>
            <if test="processId != null">#{processId},</if>
            <if test="processCode != null">#{processCode},</if>
            <if test="processName != null">#{processName},</if>
            <if test="itemId != null">#{itemId},</if>
            <if test="itemCode != null and itemCode != ''">#{itemCode},</if>
            <if test="itemName != null and itemName != ''">#{itemName},</if>
            <if test="specification != null">#{specification},</if>
            <if test="unitOfMeasure != null and unitOfMeasure != ''">#{unitOfMeasure},</if>
            <if test="quantity != null">#{quantity},</if>
            <if test="quantityWait != null">#{quantityWait},</if>
            <if test="quantityProduced != null">#{quantityProduced},</if>
            <if test="quantityQualify != null ">#{quantityQualify},</if>
            <if test="quantityUnqualify != null ">#{quantityUnqualify},</if>
            <if test="quantityChanged != null">#{quantityChanged},</if>
            <if test="clientId != null">#{clientId},</if>
            <if test="clientCode != null and clientCode != ''">#{clientCode},</if>
            <if test="clientName != null and clientName != ''">#{clientName},</if>
            <if test="clientNick != null">#{clientNick},</if>
            <if test="startTime != null">#{startTime},</if>
            <if test="duration != null">#{duration},</if>
            <if test="endTime != null">#{endTime},</if>
            <if test="colorCode != null">#{colorCode},</if>
            <if test="requestDate != null">#{requestDate},</if>
            <if test="status != null">#{status},</if>
            <if test="remark != null">#{remark},</if>
            <if test="arrangeCode != null">#{arrangeCode},</if>
            <if test="taskBatch != null">#{taskBatch},</if>
            <if test="isLastProcess != null">#{isLastProcess},</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="updateProTask" parameterType="ProTask">
        update pro_task
        <trim prefix="SET" suffixOverrides=",">
            <if test="taskCode != null and taskCode != ''">task_code = #{taskCode},</if>
            <if test="taskName != null and taskName != ''">task_name = #{taskName},</if>
            <if test="workstationId != null">workstation_id = #{workstationId},</if>
            <if test="workstationCode != null and workstationCode != ''">workstation_code = #{workstationCode},</if>
            <if test="workstationName != null and workstationName != ''">workstation_name = #{workstationName},</if>
            <if test="processId != null">process_id = #{processId},</if>
            <if test="processCode != null">process_code = #{processCode},</if>
            <if test="processName != null">process_name = #{processName},</if>
            <if test="itemId != null">item_id = #{itemId},</if>
            <if test="itemCode != null and itemCode != ''">item_code = #{itemCode},</if>
            <if test="itemName != null and itemName != ''">item_name = #{itemName},</if>
            <if test="specification != null">specification = #{specification},</if>
            <if test="unitOfMeasure != null and unitOfMeasure != ''">unit_of_measure = #{unitOfMeasure},</if>
            <if test="quantity != null">quantity = #{quantity},</if>
            <if test="quantityWait != null">quantity_wait = #{quantityWait},</if>
            <if test="quantityProduced != null">quantity_produced = #{quantityProduced},</if>
            <if test="quantityQualify != null ">quantity_qualify = #{quantityQualify},</if>
            <if test="quantityUnqualify != null ">quantity_unqualify = #{quantityUnqualify},</if>
            <if test="quantityChanged != null">quantity_changed = #{quantityChanged},</if>
            <if test="clientId != null">client_id = #{clientId},</if>
            <if test="clientCode != null and clientCode != ''">client_code = #{clientCode},</if>
            <if test="clientName != null and clientName != ''">client_name = #{clientName},</if>
            <if test="clientNick != null">client_nick = #{clientNick},</if>
            <if test="startTime != null">start_time = #{startTime},</if>
            <if test="duration != null">duration = #{duration},</if>
            <if test="endTime != null">end_time = #{endTime},</if>
            <if test="colorCode != null">color_code = #{colorCode},</if>
            <if test="requestDate != null">request_date = #{requestDate},</if>
            <if test="status != null">status = #{status},</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="updateBy != null">update_by = #{updateBy},</if>
            <if test="updateTime != null">update_time = #{updateTime},</if>
        </trim>
        where task_id = #{taskId}
    </update>
    <update id="updateProTaskStatus">
        update pro_task pt
        set pt.status = #{status}
        where pt.task_id = #{taskId}
    </update>

    <delete id="deleteProTaskByTaskId" parameterType="Long">
        delete
        from pro_task
        where task_id = #{taskId}
    </delete>

    <delete id="deleteProTaskByTaskIds" parameterType="String">
        delete from pro_task where task_id in
        <foreach item="taskId" collection="array" open="(" separator="," close=")">
            #{taskId}
        </foreach>
    </delete>
</mapper>
