<?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.ProFeedbackMapper">

    <resultMap type="ProFeedback" id="ProFeedbackResult">
        <result property="recordId" column="record_id"/>
        <result property="feedbackCode" column="feedback_code"/>
        <result property="feedbackType" column="feedback_type"/>
        <result property="workstationId" column="workstation_id"/>
        <result property="workstationCode" column="workstation_code"/>
        <result property="workstationName" column="workstation_name"/>
        <result property="sapFeedbackCode" column="sap_feedback_code"/>
        <result property="machineTime" column="machine_time"/>
        <result property="sapFeedbackItemCode" column="sap_feedback_item_code"/>
        <result property="sapRequestParam" column="sap_request_param"/>
        <result property="sapResponse" column="sap_response"/>
        <result property="workorderId" column="workorder_id"/>
        <result property="workorderCode" column="workorder_code"/>
        <result property="workorderName" column="workorder_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="taskId" column="task_id"/>
        <result property="taskCode" column="task_code"/>
        <result property="taskWorkunitId" column="task_workunit_id"/>
        <result property="workorderSoDirectiveId" column="workorder_so_directive_id"/>
        <result property="workorderSoSizeItemId" column="workorder_so_size_item_id"/>
        <result property="netWeight" column="net_weight"/>
        <result property="quantityStorage" column="quantity_storage"/>
        <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>
        <result property="quantity" column="quantity"/>
        <result property="quantityFeedback" column="quantity_feedback"/>
        <result property="quantityQualify" column="quantity_qualify"/>
        <result property="quantityUnqualify" column="quantity_unqualify"/>
        <result property="quantityUncheck" column="quantity_uncheck"/>
        <result property="userName" column="user_name"/>
        <result property="nickName" column="nick_name"/>
        <result property="feedbackChannel" column="feedback_channel"/>
        <result property="feedbackTime" column="feedback_time"/>
        <result property="recordUser" column="record_user"/>
        <result property="recordNick" column="record_nick"/>
        <result property="status" column="status"/>
        <result property="decompressionValue" column="decompression_value"/>
        <result property="remark" column="remark"/>
        <result property="qrcode" column="qrcode"/>
        <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"/>
    </resultMap>

    <sql id="selectProFeedbackVo">
        select f.record_id,
               f.feedback_type,
               f.workstation_id,
               f.workstation_code,
               f.workstation_name,
               f.sap_request_param,
               f.sap_response,
               f.sap_feedback_code,
               f.sap_feedback_item_code,
               f.machine_time,
               f.process_id,
               f.process_code,
               f.process_name,
               f.workorder_id,
               f.workorder_code,
               f.workorder_name,
               f.task_id,
               pt.task_code,
               f.task_workunit_id,
               f.item_id,
               f.item_code,
               f.item_name,
               f.specification,
               f.unit_of_measure,
               f.quantity,
               f.quantity_feedback,
               f.quantity_qualify,
               f.quantity_unqualify,
               f.quantity_uncheck,
               f.user_name,
               f.nick_name,
               f.feedback_channel,
               f.feedback_time,
               f.record_user,
               f.record_nick,
               f.status,
               f.decompression_value,
               f.remark,
               f.attr1,
               f.attr2,
               f.attr3,
               f.attr4,
               f.create_by,
               f.create_time,
               f.update_by,
               f.qrcode,
--                ptap.assist_process_code,
               f.update_time,
               it.sap_item_code,
               f.abnormal_id,
               f.abnormal_type,
               f.abnormal_reason,
               f.abnormal_remark
        from pro_feedback f
--                  left join pro_task_assist_process ptap on f.task_workunit_id = ptap.task_workunit_id
                 left join pro_task pt on f.task_id = pt.task_id
                 LEFT JOIN md_item it ON it.item_id = f.item_id
    </sql>

    <select id="selectProFeedbackList" parameterType="ProFeedback" resultMap="ProFeedbackResult">
        <include refid="selectProFeedbackVo"/>
        <where>
            <if test="workstationId != null ">and workstation_id = #{workstationId}</if>
            <if test="taskWorkunitId != null ">and f.task_workunit_id = #{taskWorkunitId}</if>
            <if test="feedbackCode !=null ">and feedback_code = #{feedbackCode}</if>
            <if test="feedbackType !=null ">and feedback_type = #{feedbackType}</if>
            <if test="workstationCode != null  and workstationCode != ''">and workstation_code = #{workstationCode}</if>
            <if test="workstationName != null  and workstationName != ''">and workstation_name like concat('%',
                #{workstationName}, '%')
            </if>
            <if test="processId != null ">and f.process_id = #{processId}</if>
            <if test="processCode != null  and processCode != ''">and f.process_code = #{processCode}</if>
            <if test="processName != null  and processName != ''">and f.process_name like concat('%', #{processName},
                '%')
            </if>
            <if test="workorderId != null ">and workorder_id = #{workorderId}</if>
            <if test="workorderCode != null  and workorderCode != ''">and workorder_code = #{workorderCode}</if>
            <if test="workorderName != null  and workorderName != ''">and workorder_name like concat('%',
                #{workorderName}, '%')
            </if>
            <if test="taskId != null ">and task_id = #{taskId}</if>
            <if test="taskCode != null  and taskCode != ''">and task_code = #{taskCode}</if>
            <if test="itemId != null ">and item_id = #{itemId}</if>
            <if test="itemCode != null  and itemCode != ''">and item_code = #{itemCode}</if>
            <if test="itemName != null  and itemName != ''">and item_name like concat('%', #{itemName}, '%')</if>
            <if test="specification != null  and specification != ''">and specification = #{specification}</if>
            <if test="unitOfMeasure != null  and unitOfMeasure != ''">and unit_of_measure = #{unitOfMeasure}</if>
            <if test="quantity != null ">and quantity = #{quantity}</if>
            <if test="quantityFeedback != null ">and quantity_feedback = #{quantityFeedback}</if>
            <if test="quantityQualify != null ">and quantity_qualify = #{quantityQualify}</if>
            <if test="quantityUnqualify != null ">and quantity_unqualify = #{quantityUnqualify}</if>
            <if test="quantityUncheck != null ">and quantity_uncheck = #{quantityUncheck}</if>
            <if test="userName != null  and userName != ''">and user_name like concat('%', #{userName}, '%')</if>
            <if test="nickName != null  and nickName != ''">and nick_name like concat('%', #{nickName}, '%')</if>
            <if test="feedbackChannel != null  and feedbackChannel != ''">and feedback_channel = #{feedbackChannel}</if>
            <if test="feedbackTime != null ">and feedback_time = #{feedbackTime}</if>
            <if test="recordUser != null ">and record_user = #{recordUser}</if>
            <if test="recordNick != null ">and record_nick = #{recordNick}</if>
            <if test="status != null ">and status = #{status}</if>
        </where>
        order by create_time desc
    </select>

    <select id="selectProFeedbackByRecordId" parameterType="Long" resultMap="ProFeedbackResult">
        <include refid="selectProFeedbackVo"/>
        where f.record_id = #{recordId}
    </select>
    <select id="getList" resultType="com.ximai.mes.report.response.FeedbackResponse">
            select
            workorder.workorder_Type,
            workorder.customer_Project_No,
            workorder.order_Code,
            workorder.workorder_Code,
            workorder.product_Code,
            workorder.product_Name,
            pt.task_Code,
            pt.process_Name,
            pt.workstation_code,
            pt.workstation_Name,
            workunit.workunit_id,
            mw.workunit_name,
            mw.workunit_code,
            f.user_name,
            f.nick_name,
            workunit.quantity,
            f.quantity_qualify,
            f.quantity_unqualify,
            (f.quantity_qualify + f.quantity_unqualify) as quantity_feedback,
            f.abnormal_reason,
            f.machine_time,
            f.feedback_time,
            workunit.std_working_time,
            workunit.schedule_end_date
            from pro_feedback f
            left join pro_task_workunit workunit on workunit.task_id = f.task_id
            left join pro_task pt on f.task_id = pt.task_id
            left join pro_workorder workorder on workorder.workorder_id = f.workorder_id
            LEFT JOIN md_item it ON it.item_id = f.item_id
            left join md_workunit mw on workunit.workunit_id = mw.workunit_id
            left join md_workstation workstation on workstation.workstation_id = mw.workstation_id
        <where>
            <if test="workorderType != null and workorderType != ''">and  workorder.workorder_Type  = #{workorderType}</if>
            <if test="customerProjectNo!= null and  customerProjectNo != '' ">and   workorder.customer_Project_No like '%${customerProjectNo}%'</if>
            <if test="orderCode != null and orderCode  != '' ">and  workorder.order_Code like '%${orderCode}%'</if>
            <if test="workorderCode != null and  workorderCode != '' ">and workorder.workorder_Code like '%${workorderCode}%' </if>
            <if test="taskCode != null and  taskCode != '' ">and   pt.task_Code like '%${taskCode}%'</if>
            <if test="productCode != null and  productCode != '' ">and workorder.product_Code like '%${productCode}%' </if>
            <if test=" productId != null">and  workorder.product_Id = #{productId}</if>
            <if test=" processId != null  ">and pt.process_id = #{processId}</if>
            <if test=" workshopId != null">and workstation.workshop_Id = #{workshopId}</if>
            <if test=" workstationId != null">and workstation.workstation_id = #{workstationId} </if>
            <if test=" workunitId != null">and  workunit.workunit_id =  #{workunitId}</if>
            <if test="userName != null  and userName != ''">and f.user_name like concat('%', #{userName}, '%')</if>
            <if test=" nickName != null and nickName  != '' ">and  f.nick_Name like  '%${nickName}%'</if>
            <if test=" startDate != null and endDate  != null">and  feedback_time BETWEEN #{startDate} AND #{endDate}</if>
            <if test=" abnormalId != null">and  f.abnormal_id = #{abnormalId}</if>


            <if test=" productName != null and productName  != '' ">and  workorder.product_Name like  '%${productName}%'</if>
            <if test=" processName != null and processName  != '' ">and  pt.process_name like  '%${processName}%'</if>
            <if test=" workshopName != null and workshopName  != '' ">and  workstation.workshop_name like  '%${workshopName}%'</if>
            <if test=" workstationName != null and workstationName  != '' ">and  workstation.workstation_name like  '%${workstationName}%'</if>
            <if test=" workunitName != null and workunitName  != '' ">and  mw.workunit_name like  '%${workunitName}%'</if>
            <if test=" abnormalReason != null and abnormalReason  != '' ">and  f.abnormal_reason like  '%${abnormalReason}%'</if>
            <if test="defectStatus != null"> and f.quantity_unqualify > 0 </if>
        </where>
    </select>
    <select id="getListByWorkOrder" resultType="com.ximai.mes.report.response.FeedbackResponse">
        select
        workorder.workorder_Type,
        workorder.customer_Project_No,
        workorder.workorder_name,
        workorder.order_Code,
        workorder.workorder_Code,
        workorder.product_Code,
        workorder.product_Name,
        sum(workunit.quantity) quantity,
        sum(f.quantity_qualify) quantity_qualify,
        sum(f.quantity_unqualify) quantity_unqualify,
        sum(f.quantity_qualify) + sum(f.quantity_unqualify) quantity_feedback
        from pro_feedback f
        left join pro_task_workunit workunit on workunit.task_id = f.task_id
        left join pro_task pt on f.task_id = pt.task_id
        left join pro_workorder workorder on workorder.workorder_id = f.workorder_id
        LEFT JOIN md_item it ON it.item_id = f.item_id
        left join md_workunit mw on workunit.workunit_id = mw.workunit_id
        left join md_workstation workstation on workstation.workstation_id = mw.workstation_id
        <where>
            <if test="workorderType != null and workorderType != ''">and  workorder.workorder_Type  = #{workorderType}</if>
            <if test="customerProjectNo!= null and  customerProjectNo != '' ">and   workorder.customer_Project_No like '%${customerProjectNo}%'</if>
            <if test="orderCode != null and orderCode  != '' ">and  workorder.order_Code like '%${orderCode}%'</if>
            <if test="workorderCode != null and  workorderCode != '' ">and workorder.workorder_Code like '%${workorderCode}%' </if>
            <if test="taskCode != null and  taskCode != '' ">and   pt.task_Code like '%${taskCode}%'</if>
            <if test="productCode != null and  productCode != '' ">and workorder.product_Code like '%${productCode}%' </if>
            <if test=" productId != null">and  workorder.product_Id = #{productId}</if>
            <if test=" processId != null  ">and pt.process_id = #{processId}</if>
            <if test=" workshopId != null">and workstation.workshop_Id = #{workshopId}</if>
            <if test=" workstationId != null">and workstation.workstation_id = #{workstationId} </if>
            <if test=" workunitId != null">and  workunit.workunit_id =  #{workunitId}</if>
            <if test="userName != null  and userName != ''">and f.user_name like concat('%', #{userName}, '%')</if>
            <if test=" nickName != null and nickName  != '' ">and  f.nick_Name like  '%${nickName}%'</if>
            <if test=" startDate != null and endDate  != null">and  feedback_time BETWEEN #{startDate} AND #{endDate}</if>
            <if test=" abnormalId != null">and  f.abnormal_id = #{abnormalId}</if>


            <if test=" productName != null and productName  != '' ">and  workorder.product_Name like  '%${productName}%'</if>
            <if test=" processName != null and processName  != '' ">and  pt.process_name like  '%${processName}%'</if>
            <if test=" workshopName != null and workshopName  != '' ">and  workstation.workshop_name like  '%${workshopName}%'</if>
            <if test=" workstationName != null and workstationName  != '' ">and  workstation.workstation_name like  '%${workstationName}%'</if>
            <if test=" workunitName != null and workunitName  != '' ">and  mw.workunit_name like  '%${workunitName}%'</if>
            <if test=" abnormalReason != null and abnormalReason  != '' ">and  f.abnormal_reason like  '%${abnormalReason}%'</if>
            <if test="defectStatus != null">and f.quantity_unqualify > 0 </if>
        </where>
        group by
        workorder.workorder_Type,
        workorder.customer_Project_No,
        workorder.workorder_name,
        workorder.order_Code,
        workorder.workorder_Code,
        workorder.product_Code,
        workorder.product_Name
    </select>
    <select id="getListByWorkshop" resultType="com.ximai.mes.report.response.FeedbackResponse">
        select
        workstation.workshop_code,
        workstation.workshop_name,
        sum(workunit.quantity) quantity,
        sum(f.quantity_qualify) quantity_qualify,
        sum(f.quantity_unqualify) quantity_unqualify,
        sum(f.quantity_qualify) +  sum(f.quantity_unqualify) quantity_feedback
        from pro_feedback f
        left join pro_task_workunit workunit on workunit.task_id = f.task_id
        left join pro_task pt on f.task_id = pt.task_id
        left join pro_workorder workorder on workorder.workorder_id = f.workorder_id
        LEFT JOIN md_item it ON it.item_id = f.item_id
        left join md_workunit mw on workunit.workunit_id = mw.workunit_id
        left join md_workstation workstation on workstation.workstation_id = mw.workstation_id
        <where>
            <if test="workorderType != null and workorderType != ''">and  workorder.workorder_Type  = #{workorderType}</if>
            <if test="customerProjectNo!= null and  customerProjectNo != '' ">and   workorder.customer_Project_No like '%${customerProjectNo}%'</if>
            <if test="orderCode != null and orderCode  != '' ">and  workorder.order_Code like '%${orderCode}%'</if>
            <if test="workorderCode != null and  workorderCode != '' ">and workorder.workorder_Code like '%${workorderCode}%' </if>
            <if test="taskCode != null and  taskCode != '' ">and   pt.task_Code like '%${taskCode}%'</if>
            <if test="productCode != null and  productCode != '' ">and workorder.product_Code like '%${productCode}%' </if>
            <if test=" productId != null">and  workorder.product_Id = #{productId}</if>
            <if test=" processId != null  ">and pt.process_id = #{processId}</if>
            <if test=" workshopId != null">and workstation.workshop_Id = #{workshopId}</if>
            <if test=" workstationId != null">and workstation.workstation_id = #{workstationId} </if>
            <if test=" workunitId != null">and  workunit.workunit_id =  #{workunitId}</if>
            <if test="userName != null  and userName != ''">and f.user_name like concat('%', #{userName}, '%')</if>
            <if test=" nickName != null and nickName  != '' ">and  f.nick_Name like  '%${nickName}%'</if>
            <if test=" startDate != null and endDate  != null">and  feedback_time BETWEEN #{startDate} AND #{endDate}</if>
            <if test=" abnormalId != null">and  f.abnormal_id = #{abnormalId}</if>


            <if test=" productName != null and productName  != '' ">and  workorder.product_Name like  '%${productName}%'</if>
            <if test=" processName != null and processName  != '' ">and  pt.process_name like  '%${processName}%'</if>
            <if test=" workshopName != null and workshopName  != '' ">and  workstation.workshop_name like  '%${workshopName}%'</if>
            <if test=" workstationName != null and workstationName  != '' ">and  workstation.workstation_name like  '%${workstationName}%'</if>
            <if test=" workunitName != null and workunitName  != '' ">and  mw.workunit_name like  '%${workunitName}%'</if>
            <if test=" abnormalReason != null and abnormalReason  != '' ">and  f.abnormal_reason like  '%${abnormalReason}%'</if>
            <if test="defectStatus != null">and f.quantity_unqualify > 0 </if>
        </where>
        group by
             workstation.workshop_code,
            workstation.workshop_name
    </select>
    <select id="getListByWorkstation" resultType="com.ximai.mes.report.response.FeedbackResponse">
        select
        workstation.workstation_code,
        workstation.workstation_name,
        sum(workunit.quantity) quantity,
        sum(f.quantity_qualify) quantity_qualify,
        sum(f.quantity_unqualify) quantity_unqualify,
        sum(f.quantity_qualify) +  sum(f.quantity_unqualify) quantity_feedback
        from pro_feedback f
        left join pro_task_workunit workunit on workunit.task_id = f.task_id
        left join pro_task pt on f.task_id = pt.task_id
        left join pro_workorder workorder on workorder.workorder_id = f.workorder_id
        LEFT JOIN md_item it ON it.item_id = f.item_id
        left join md_workunit mw on workunit.workunit_id = mw.workunit_id
        left join md_workstation workstation on workstation.workstation_id = mw.workstation_id
        <where>
            <if test="workorderType != null and workorderType != ''">and  workorder.workorder_Type  = #{workorderType}</if>
            <if test="customerProjectNo!= null and  customerProjectNo != '' ">and   workorder.customer_Project_No like '%${customerProjectNo}%'</if>
            <if test="orderCode != null and orderCode  != '' ">and  workorder.order_Code like '%${orderCode}%'</if>
            <if test="workorderCode != null and  workorderCode != '' ">and workorder.workorder_Code like '%${workorderCode}%' </if>
            <if test="taskCode != null and  taskCode != '' ">and   pt.task_Code like '%${taskCode}%'</if>
            <if test="productCode != null and  productCode != '' ">and workorder.product_Code like '%${productCode}%' </if>
            <if test=" productId != null">and  workorder.product_Id = #{productId}</if>
            <if test=" processId != null  ">and pt.process_id = #{processId}</if>
            <if test=" workshopId != null">and workstation.workshop_Id = #{workshopId}</if>
            <if test=" workstationId != null">and workstation.workstation_id = #{workstationId} </if>
            <if test=" workunitId != null">and  workunit.workunit_id =  #{workunitId}</if>
            <if test="userName != null  and userName != ''">and f.user_name like concat('%', #{userName}, '%')</if>
            <if test=" nickName != null and nickName  != '' ">and  f.nick_Name like  '%${nickName}%'</if>
            <if test=" startDate != null and endDate  != null">and  feedback_time BETWEEN #{startDate} AND #{endDate}</if>
            <if test=" abnormalId != null">and  f.abnormal_id = #{abnormalId}</if>


            <if test=" productName != null and productName  != '' ">and  workorder.product_Name like  '%${productName}%'</if>
            <if test=" processName != null and processName  != '' ">and  pt.process_name like  '%${processName}%'</if>
            <if test=" workshopName != null and workshopName  != '' ">and  workstation.workshop_name like  '%${workshopName}%'</if>
            <if test=" workstationName != null and workstationName  != '' ">and  workstation.workstation_name like  '%${workstationName}%'</if>
            <if test=" workunitName != null and workunitName  != '' ">and  mw.workunit_name like  '%${workunitName}%'</if>
            <if test=" abnormalReason != null and abnormalReason  != '' ">and  f.abnormal_reason like  '%${abnormalReason}%'</if>
            <if test="defectStatus != null">and f.quantity_unqualify > 0 </if>
        </where>
        group by
        workstation.workstation_code,
        workstation.workstation_name
    </select>
    <select id="getListByWorkunit" resultType="com.ximai.mes.report.response.FeedbackResponse">
        select
        mw.workunit_code,
        mw.workunit_name,
        sum(workunit.quantity) quantity,
        sum(f.quantity_qualify) quantity_qualify,
        sum(f.quantity_unqualify) quantity_unqualify,
        sum(f.quantity_qualify) +  sum(f.quantity_unqualify) quantity_feedback
        from pro_feedback f
        left join pro_task_workunit workunit on workunit.task_id = f.task_id
        left join pro_task pt on f.task_id = pt.task_id
        left join pro_workorder workorder on workorder.workorder_id = f.workorder_id
        LEFT JOIN md_item it ON it.item_id = f.item_id
        left join md_workunit mw on workunit.workunit_id = mw.workunit_id
        left join md_workstation workstation on workstation.workstation_id = mw.workstation_id
        <where>
            <if test="workorderType != null and workorderType != ''">and  workorder.workorder_Type  = #{workorderType}</if>
            <if test="customerProjectNo!= null and  customerProjectNo != '' ">and   workorder.customer_Project_No like '%${customerProjectNo}%'</if>
            <if test="orderCode != null and orderCode  != '' ">and  workorder.order_Code like '%${orderCode}%'</if>
            <if test="workorderCode != null and  workorderCode != '' ">and workorder.workorder_Code like '%${workorderCode}%' </if>
            <if test="taskCode != null and  taskCode != '' ">and   pt.task_Code like '%${taskCode}%'</if>
            <if test="productCode != null and  productCode != '' ">and workorder.product_Code like '%${productCode}%' </if>
            <if test=" productId != null">and  workorder.product_Id = #{productId}</if>
            <if test=" processId != null  ">and pt.process_id = #{processId}</if>
            <if test=" workshopId != null">and workstation.workshop_Id = #{workshopId}</if>
            <if test=" workstationId != null">and workstation.workstation_id = #{workstationId} </if>
            <if test=" workunitId != null">and  workunit.workunit_id =  #{workunitId}</if>
            <if test="userName != null  and userName != ''">and f.user_name like concat('%', #{userName}, '%')</if>
            <if test=" nickName != null and nickName  != '' ">and  f.nick_Name like  '%${nickName}%'</if>
            <if test=" startDate != null and endDate  != null">and  feedback_time BETWEEN #{startDate} AND #{endDate}</if>
            <if test=" abnormalId != null">and  f.abnormal_id = #{abnormalId}</if>


            <if test=" productName != null and productName  != '' ">and  workorder.product_Name like  '%${productName}%'</if>
            <if test=" processName != null and processName  != '' ">and  pt.process_name like  '%${processName}%'</if>
            <if test=" workshopName != null and workshopName  != '' ">and  workstation.workshop_name like  '%${workshopName}%'</if>
            <if test=" workstationName != null and workstationName  != '' ">and  workstation.workstation_name like  '%${workstationName}%'</if>
            <if test=" workunitName != null and workunitName  != '' ">and  mw.workunit_name like  '%${workunitName}%'</if>
            <if test=" abnormalReason != null and abnormalReason  != '' ">and  f.abnormal_reason like  '%${abnormalReason}%'</if>
            <if test="defectStatus != null">and f.quantity_unqualify > 0 </if>
        </where>
        group by
        mw.workunit_code,
        mw.workunit_name
    </select>
    <select id="getListByProcess" resultType="com.ximai.mes.report.response.FeedbackResponse">
        select
        pt.process_code,
        pt.process_name,
        sum(workunit.quantity) quantity,
        sum(f.quantity_qualify) quantity_qualify,
        sum(f.quantity_unqualify) quantity_unqualify,
        sum(f.quantity_qualify) +  sum(f.quantity_unqualify) quantity_feedback
        from pro_feedback f
        left join pro_task_workunit workunit on workunit.task_id = f.task_id
        left join pro_task pt on f.task_id = pt.task_id
        left join pro_workorder workorder on workorder.workorder_id = f.workorder_id
        LEFT JOIN md_item it ON it.item_id = f.item_id
        left join md_workunit mw on workunit.workunit_id = mw.workunit_id
        left join md_workstation workstation on workstation.workstation_id = mw.workstation_id
        <where>
            <if test="workorderType != null and workorderType != ''">and  workorder.workorder_Type  = #{workorderType}</if>
            <if test="customerProjectNo!= null and  customerProjectNo != '' ">and   workorder.customer_Project_No like '%${customerProjectNo}%'</if>
            <if test="orderCode != null and orderCode  != '' ">and  workorder.order_Code like '%${orderCode}%'</if>
            <if test="workorderCode != null and  workorderCode != '' ">and workorder.workorder_Code like '%${workorderCode}%' </if>
            <if test="taskCode != null and  taskCode != '' ">and   pt.task_Code like '%${taskCode}%'</if>
            <if test="productCode != null and  productCode != '' ">and workorder.product_Code like '%${productCode}%' </if>
            <if test=" productId != null">and  workorder.product_Id = #{productId}</if>
            <if test=" processId != null  ">and pt.process_id = #{processId}</if>
            <if test=" workshopId != null">and workstation.workshop_Id = #{workshopId}</if>
            <if test=" workstationId != null">and workstation.workstation_id = #{workstationId} </if>
            <if test=" workunitId != null">and  workunit.workunit_id =  #{workunitId}</if>
            <if test="userName != null  and userName != ''">and f.user_name like concat('%', #{userName}, '%')</if>
            <if test=" nickName != null and nickName  != '' ">and  f.nick_Name like  '%${nickName}%'</if>
            <if test=" startDate != null and endDate  != null">and  feedback_time BETWEEN #{startDate} AND #{endDate}</if>
            <if test=" abnormalId != null">and  f.abnormal_id = #{abnormalId}</if>


            <if test=" productName != null and productName  != '' ">and  workorder.product_Name like  '%${productName}%'</if>
            <if test=" processName != null and processName  != '' ">and  pt.process_name like  '%${processName}%'</if>
            <if test=" workshopName != null and workshopName  != '' ">and  workstation.workshop_name like  '%${workshopName}%'</if>
            <if test=" workstationName != null and workstationName  != '' ">and  workstation.workstation_name like  '%${workstationName}%'</if>
            <if test=" workunitName != null and workunitName  != '' ">and  mw.workunit_name like  '%${workunitName}%'</if>
            <if test=" abnormalReason != null and abnormalReason  != '' ">and  f.abnormal_reason like  '%${abnormalReason}%'</if>
            <if test="defectStatus != null">and f.quantity_unqualify > 0 </if>
        </where>
        group by
        pt.process_code,
        pt.process_name
    </select>
    <select id="getListByUser" resultType="com.ximai.mes.report.response.FeedbackResponse">
        select
        f.user_name,
        f.nick_name,
        sum(workunit.quantity) quantity,
        sum(f.quantity_qualify) quantity_qualify,
        sum(f.quantity_unqualify) quantity_unqualify,
        sum(f.quantity_qualify) +  sum(f.quantity_unqualify) quantity_feedback
        from pro_feedback f
        left join pro_task_workunit workunit on workunit.task_id = f.task_id
        left join pro_task pt on f.task_id = pt.task_id
        left join pro_workorder workorder on workorder.workorder_id = f.workorder_id
        LEFT JOIN md_item it ON it.item_id = f.item_id
        left join md_workunit mw on workunit.workunit_id = mw.workunit_id
        left join md_workstation workstation on workstation.workstation_id = mw.workstation_id
        <where>
            <if test="workorderType != null and workorderType != ''">and  workorder.workorder_Type  = #{workorderType}</if>
            <if test="customerProjectNo!= null and  customerProjectNo != '' ">and   workorder.customer_Project_No like '%${customerProjectNo}%'</if>
            <if test="orderCode != null and orderCode  != '' ">and  workorder.order_Code like '%${orderCode}%'</if>
            <if test="workorderCode != null and  workorderCode != '' ">and workorder.workorder_Code like '%${workorderCode}%' </if>
            <if test="taskCode != null and  taskCode != '' ">and   pt.task_Code like '%${taskCode}%'</if>
            <if test="productCode != null and  productCode != '' ">and workorder.product_Code like '%${productCode}%' </if>
            <if test=" productId != null">and  workorder.product_Id = #{productId}</if>
            <if test=" processId != null  ">and pt.process_id = #{processId}</if>
            <if test=" workshopId != null">and workstation.workshop_Id = #{workshopId}</if>
            <if test=" workstationId != null">and workstation.workstation_id = #{workstationId} </if>
            <if test=" workunitId != null">and  workunit.workunit_id =  #{workunitId}</if>
            <if test="userName != null  and userName != ''">and f.user_name like concat('%', #{userName}, '%')</if>
            <if test=" nickName != null and nickName  != '' ">and  f.nick_Name like  '%${nickName}%'</if>
            <if test=" startDate != null and endDate  != null">and  feedback_time BETWEEN #{startDate} AND #{endDate}</if>
            <if test=" abnormalId != null">and  f.abnormal_id = #{abnormalId}</if>


            <if test=" productName != null and productName  != '' ">and  workorder.product_Name like  '%${productName}%'</if>
            <if test=" processName != null and processName  != '' ">and  pt.process_name like  '%${processName}%'</if>
            <if test=" workshopName != null and workshopName  != '' ">and  workstation.workshop_name like  '%${workshopName}%'</if>
            <if test=" workstationName != null and workstationName  != '' ">and  workstation.workstation_name like  '%${workstationName}%'</if>
            <if test=" workunitName != null and workunitName  != '' ">and  mw.workunit_name like  '%${workunitName}%'</if>
            <if test=" abnormalReason != null and abnormalReason  != '' ">and  f.abnormal_reason like  '%${abnormalReason}%'</if>
            <if test="defectStatus != null">and f.quantity_unqualify > 0 </if>
        </where>
        group by
        f.user_name,
        f.nick_name
    </select>
    <select id="selectCount" resultType="java.lang.Integer">
        select count(1) from pro_feedback
        where task_Id in
        <foreach collection="taskIds" open="("  item="taskId" close=")" separator=",">
            #{taskId}
        </foreach>
    </select>
    <select id="getFeedbackList"
            resultType="com.ximai.mes.report.response.WorkOrderProgressFeedbackListResponse">
        select feedback.*,workunit.std_working_time from pro_task_workunit workunit join pro_feedback feedback on feedback.task_workunit_id = workunit.task_workunit_id
        <where>
            workorder_code = #{workorderCode}
            <if test="taskId != null">and feedback.task_id = #{taskId}</if>
            <if test="taskWorkunitId != null">and feedback.task_workunit_id = #{taskWorkunitId}</if>
        </where>
    </select>
    <select id="getListByDefect" resultType="com.ximai.mes.report.response.FeedbackResponse">
        select
        f.abnormal_reason,
        f.abnormal_remark,
        sum(workunit.quantity) quantity,
        sum(f.quantity_qualify) quantity_qualify,
        sum(f.quantity_unqualify) quantity_unqualify,
        sum(f.quantity_qualify) +  sum(f.quantity_unqualify) quantity_feedback
        from pro_feedback f
        left join pro_task_workunit workunit on workunit.task_id = f.task_id
        left join pro_task pt on f.task_id = pt.task_id
        left join pro_workorder workorder on workorder.workorder_id = f.workorder_id
        LEFT JOIN md_item it ON it.item_id = f.item_id
        left join md_workunit mw on workunit.workunit_id = mw.workunit_id
        left join md_workstation workstation on workstation.workstation_id = mw.workstation_id
        <where>
            <if test="workorderType != null and workorderType != ''">and  workorder.workorder_Type  = #{workorderType}</if>
            <if test="customerProjectNo!= null and  customerProjectNo != '' ">and   workorder.customer_Project_No like '%${customerProjectNo}%'</if>
            <if test="orderCode != null and orderCode  != '' ">and  workorder.order_Code like '%${orderCode}%'</if>
            <if test="workorderCode != null and  workorderCode != '' ">and workorder.workorder_Code like '%${workorderCode}%' </if>
            <if test="taskCode != null and  taskCode != '' ">and   pt.task_Code like '%${taskCode}%'</if>
            <if test="productCode != null and  productCode != '' ">and workorder.product_Code like '%${productCode}%' </if>
            <if test=" productId != null">and  workorder.product_Id = #{productId}</if>
            <if test=" processId != null  ">and pt.process_id = #{processId}</if>
            <if test=" workshopId != null">and workstation.workshop_Id = #{workshopId}</if>
            <if test=" workstationId != null">and workstation.workstation_id = #{workstationId} </if>
            <if test=" workunitId != null">and  workunit.workunit_id =  #{workunitId}</if>
            <if test="userName != null  and userName != ''">and f.user_name like concat('%', #{userName}, '%')</if>
            <if test=" nickName != null and nickName  != '' ">and  f.nick_Name like  '%${nickName}%'</if>
            <if test=" startDate != null and endDate  != null">and  feedback_time BETWEEN #{startDate} AND #{endDate}</if>
            <if test=" abnormalId != null">and  f.abnormal_id = #{abnormalId}</if>


            <if test=" productName != null and productName  != '' ">and  workorder.product_Name like  '%${productName}%'</if>
            <if test=" processName != null and processName  != '' ">and  pt.process_name like  '%${processName}%'</if>
            <if test=" workshopName != null and workshopName  != '' ">and  workstation.workshop_name like  '%${workshopName}%'</if>
            <if test=" workstationName != null and workstationName  != '' ">and  workstation.workstation_name like  '%${workstationName}%'</if>
            <if test=" workunitName != null and workunitName  != '' ">and  mw.workunit_name like  '%${workunitName}%'</if>
            <if test=" abnormalReason != null and abnormalReason  != '' ">and  f.abnormal_reason like  '%${abnormalReason}%'</if>
            <if test="defectStatus != null"> and f.quantity_unqualify > 0 </if>
        </where>
        group by
        f.abnormal_reason,
        f.abnormal_remark
    </select>

    <insert id="insertProFeedback" parameterType="ProFeedback" useGeneratedKeys="true" keyProperty="recordId">
        insert into pro_feedback
        <trim prefix="(" suffix=")" suffixOverrides=",">
            <if test="feedbackType !=null ">feedback_type,</if>
            <if test="feedbackCode !=null ">feedback_code,</if>
            <if test="workstationId != null">workstation_id,</if>
            <if test="workstationCode != null">workstation_code,</if>
            <if test="workstationName != null">workstation_name,</if>
            <if test="sapFeedbackCode != null">sap_feedback_code,</if>
            <if test="sapFeedbackItemCode != null">sap_feedback_item_code,</if>
            <if test="sapRequestParam != null">sap_request_param,</if>
            <if test="sapResponse != null">sap_response,</if>
            <if test="processId != null">process_id,</if>
            <if test="processCode != null">process_code,</if>
            <if test="processName != null">process_name,</if>
            <if test="workorderId != null">workorder_id,</if>
            <if test="workorderCode != null">workorder_code,</if>
            <if test="workorderName != null">workorder_name,</if>
            <if test="taskId != null">task_id,</if>
            <if test="taskCode != null">task_code,</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="quantityFeedback != null">quantity_feedback,</if>
            <if test="quantityQualify != null">quantity_qualify,</if>
            <if test="quantityUnqualify != null">quantity_unqualify,</if>
            <if test="quantityUncheck != null ">quantity_uncheck,</if>
            <if test="userName != null">user_name,</if>
            <if test="nickName != null">nick_name,</if>
            <if test="feedbackChannel != null">feedback_channel,</if>
            <if test="feedbackTime != null">feedback_time,</if>
            <if test="recordUser != null">record_user,</if>
            <if test="recordNick != null ">record_nick,</if>
            <if test="status != null">status,</if>
            <if test="taskWorkunitId != null">task_workunit_id,</if>
            <if test="workorderSoDirectiveId != null">workorder_so_directive_id,</if>
            <if test="workorderSoSizeItemId != null">workorder_so_size_item_id,</if>
            <if test="workorderSoSizeItemIds != null">workorder_so_size_item_ids,</if>
            <if test="workorderSoSizes != null">workorder_so_sizes,</if>
            <if test="netWeight != null">net_weight,</if>
            <if test="quantityStorage != null">quantity_storage,</if>
            <if test="decompressionValue != null">decompression_value,</if>
            <if test="remark != null">remark,</if>
            <if test="machineTime != null">machine_time,</if>
            <if test="qrcode != null">qrcode,</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>
            <if test="abnormalId != null">abnormal_id,</if>
            <if test="abnormalType != null">abnormal_type,</if>
            <if test="abnormalReason != null">abnormal_reason,</if>
            <if test="abnormalRemark != null">abnormal_remark,</if>
        </trim>
        <trim prefix="values (" suffix=")" suffixOverrides=",">
            <if test="feedbackType !=null ">#{feedbackType},</if>
            <if test="feedbackCode !=null ">#{feedbackCode},</if>
            <if test="workstationId != null">#{workstationId},</if>
            <if test="workstationCode != null">#{workstationCode},</if>
            <if test="workstationName != null">#{workstationName},</if>
            <if test="sapFeedbackCode != null">#{sapFeedbackCode},</if>
            <if test="sapFeedbackItemCode != null">#{sapFeedbackItemCode},</if>
            <if test="sapRequestParam != null">#{sapRequestParam},</if>
            <if test="sapResponse != null">#{sapResponse},</if>
            <if test="processId != null">#{processId},</if>
            <if test="processCode != null">#{processCode},</if>
            <if test="processName != null">#{processName},</if>
            <if test="workorderId != null">#{workorderId},</if>
            <if test="workorderCode != null">#{workorderCode},</if>
            <if test="workorderName != null">#{workorderName},</if>
            <if test="taskId != null">#{taskId},</if>
            <if test="taskCode != null">#{taskCode},</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="quantityFeedback != null">#{quantityFeedback},</if>
            <if test="quantityQualify != null">#{quantityQualify},</if>
            <if test="quantityUnqualify != null">#{quantityUnqualify},</if>
            <if test="quantityUncheck != null ">#{quantityUncheck},</if>
            <if test="userName != null">#{userName},</if>
            <if test="nickName != null">#{nickName},</if>
            <if test="feedbackChannel != null">#{feedbackChannel},</if>
            <if test="feedbackTime != null">#{feedbackTime},</if>
            <if test="recordUser != null">#{recordUser},</if>
            <if test="recordNick != null ">#{recordNick},</if>
            <if test="status != null">#{status},</if>
            <if test="taskWorkunitId != null">#{taskWorkunitId},</if>
            <if test="workorderSoDirectiveId != null">#{workorderSoDirectiveId},</if>
            <if test="workorderSoSizeItemId != null">#{workorderSoSizeItemId},</if>
            <if test="workorderSoSizeItemIds != null">#{workorderSoSizeItemIds},</if>
            <if test="workorderSoSizes != null">#{workorderSoSizes},</if>
            <if test="netWeight != null">#{netWeight},</if>
            <if test="quantityStorage != null">#{quantityStorage},</if>
            <if test="decompressionValue != null">#{decompressionValue},</if>
            <if test="remark != null">#{remark},</if>
            <if test="machineTime != null">#{machineTime},</if>
            <if test="qrcode != null">#{qrcode},</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>
            <if test="abnormalId != null">#{abnormalId},</if>
            <if test="abnormalType != null">#{abnormalType},</if>
            <if test="abnormalReason != null">#{abnormalReason},</if>
            <if test="abnormalRemark != null">#{abnormalRemark},</if>
        </trim>
    </insert>

    <update id="updateProFeedback" parameterType="ProFeedback">
        update pro_feedback
        <trim prefix="SET" suffixOverrides=",">
            <if test="feedbackType !=null ">feedback_type = #{feedbackType},</if>
            <if test="feedbackCode !=null ">feedback_code = #{feedbackCode},</if>
            <if test="workstationId != null">workstation_id = #{workstationId},</if>
            <if test="workstationCode != null">workstation_code = #{workstationCode},</if>
            <if test="workstationName != null">workstation_name = #{workstationName},</if>
            <if test="sapFeedbackCode != null">sap_feedback_code = #{sapFeedbackCode},</if>
            <if test="sapFeedbackItemCode != null">sap_feedback_item_code = #{sapFeedbackItemCode},</if>
            <if test="sapRequestParam != null">sap_request_param = #{sapRequestParam},</if>
            <if test="sapResponse != null">sap_response = #{sapResponse},</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="workorderId != null">workorder_id = #{workorderId},</if>
            <if test="workorderCode != null">workorder_code = #{workorderCode},</if>
            <if test="workorderName != null">workorder_name = #{workorderName},</if>
            <if test="taskId != null">task_id = #{taskId},</if>
            <if test="taskCode != null">task_code = #{taskCode},</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="quantityFeedback != null">quantity_feedback = #{quantityFeedback},</if>
            <if test="quantityQualify != null">quantity_qualify = #{quantityQualify},</if>
            <if test="quantityUnqualify != null">quantity_unqualify = #{quantityUnqualify},</if>
            <if test="quantityUncheck != null ">quantity_uncheck = #{quantityUncheck},</if>
            <if test="userName != null">user_name = #{userName},</if>
            <if test="nickName != null">nick_name = #{nickName},</if>
            <if test="feedbackChannel != null">feedback_channel = #{feedbackChannel},</if>
            <if test="feedbackTime != null">feedback_time = #{feedbackTime},</if>
            <if test="recordUser != null">record_user = #{recordUser},</if>
            <if test="recordNick != null ">record_nick = #{recordNick},</if>
            <if test="status != null">status = #{status},</if>
            <if test="taskWorkunitId != null">task_workunit_id = #{taskWorkunitId},</if>
            <if test="workorderSoDirectiveId != null">workorder_so_directive_id = #{workorderSoDirectiveId},</if>
            <if test="workorderSoSizeItemId != null">workorder_so_size_item_id = #{workorderSoSizeItemId},</if>
            <if test="netWeight != null">net_weight = #{netWeight},</if>
            <if test="quantityStorage != null">quantity_storage = #{quantityStorage},</if>
            <if test="decompressionValue != null">decompression_value = #{decompressionValue},</if>
            <if test="remark != null">remark = #{remark},</if>
            <if test="machineTime != null">machine_time = #{machineTime},</if>
            <if test="qrcode != null">qrcode = #{qrcode},</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>
            <if test="abnormalId != null">abnormal_id = #{abnormalId},</if>
            <if test="abnormalType != null">abnormal_type = #{abnormalType},</if>
            <if test="abnormalReason != null">abnormal_reason = #{abnormalReason},</if>
            <if test="abnormalRemark != null">abnormal_remark = #{abnormalRemark},</if>
        </trim>
        where record_id = #{recordId}
    </update>
    <update id="updateAbnormal">
        update pro_feedback set abnormal_id = #{abnormalId}, abnormal_type = #{abnormalType},abnormal_reason = #{abnormalReason},abnormal_remark = #{abnormalRemark} where  record_id = #{recordId}
    </update>
    <update id="updateLastFeedback">
        update pro_feedback set last_feedback = false where qrcode = #{qrcode} and task_id = #{taskId}
    </update>

    <delete id="deleteProFeedbackByRecordId" parameterType="Long">
        delete
        from pro_feedback
        where record_id = #{recordId}
    </delete>

    <delete id="deleteProFeedbackByRecordIds" parameterType="String">
        delete from pro_feedback where record_id in
        <foreach item="recordId" collection="array" open="(" separator="," close=")">
            #{recordId}
        </foreach>
    </delete>


</mapper>
