<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.3//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.zw.talkback.repository.ClusterDao">

    <!-- 查询群组 -->
    <select id="findAssignment"
            parameterType="com.zw.talkback.domain.basicinfo.query.AssignmentQuery"
            resultType="com.zw.talkback.domain.basicinfo.Cluster">
        SELECT DISTINCT a.*,a.org_id groupId FROM zw_m_assignment a
        WHERE a.flag = 1 AND a.types = 1
        <if test="simpleQueryParam != null and simpleQueryParam!=''">
            AND a.name LIKE
            CONCAT('%',#{simpleQueryParam},'%')
        </if>
        <if test="groupList != null">
            AND a.org_id in
            <foreach item="item" collection="groupList" separator=","
                     open="(" close=")">
                #{item}
            </foreach>
        </if>
        <if test="groupId != null and groupId != ''">
            AND a.org_id = #{groupId}
        </if>
        ORDER BY create_data_time DESC,a.name
    </select>

    <!--根据车牌号/任务编号/物品编号查询人、车、物信息-->
    <select id="findGroupNameByBrand" parameterType="list" resultType="com.zw.talkback.domain.basicinfo.Cluster">
        select * from
        (SELECT a.*,a.org_id groupId,v.brand as vehicle_id FROM zw_m_assignment a,zw_m_assignment_vehicle
        av,zw_m_vehicle_info v where a.flag = 1 and av.flag = 1 and v.flag = 1 and
        av.monitor_type = 0 AND a.types = 1
        and a.id = av.assignment_id and v.id = av.vehicle_id and v.brand in
        <foreach collection="list" item="item" separator="," open="(" close=")">
            #{item}
        </foreach>
        UNION ALL
        SELECT a.*,a.org_id groupId,v.thing_number as vehicle_id FROM zw_m_assignment a,zw_m_assignment_vehicle
        av,zw_m_thing_info v where a.flag = 1 and av.flag = 1 and v.flag = 1 and
        av.monitor_type = 2 AND a.types = 1
        and a.id = av.assignment_id and v.id = av.vehicle_id and v.thing_number in
        <foreach collection="list" item="item" separator="," open="(" close=")">
            #{item}
        </foreach>
        UNION ALL
        SELECT a.*,a.org_id groupId,v.people_number as vehicle_id FROM zw_m_assignment a,zw_m_assignment_vehicle
        av,zw_m_people_info v where a.flag = 1 and av.flag = 1 and v.flag = 1 and
        av.monitor_type = 1 AND a.types = 1
        and a.id = av.assignment_id and v.id = av.vehicle_id and v.people_number in
        <foreach collection="list" item="item" separator="," open="(" close=")">
            #{item}
        </foreach>
        ) t
    </select>
    <!-- 查询群组 -->
    <select id="listAssignment" resultType="com.zw.talkback.domain.basicinfo.Cluster">
        SELECT DISTINCT a.*, a.org_id groupId FROM zw_m_assignment a
        INNER JOIN zw_m_assignment_user au ON a.id = au.assignment_id AND au.flag = 1 AND au.user_id = #{userId}
        WHERE a.flag = 1 AND a.types = 1
        <if test="query.simpleQueryParam != null and query.simpleQueryParam!=''">
            AND BINARY a.name LIKE
            CONCAT('%',#{query.simpleQueryParam},'%')
        </if>
        <if test="query.groupList != null">
            AND a.org_id in
            <foreach item="item" collection="query.groupList" separator="," open="(" close=")">
                #{item}
            </foreach>
        </if>
        <if test="query.groupId != null and query.groupId != ''">
            AND a.org_id = #{query.groupId}
        </if>
        ORDER BY create_data_time DESC,a.name
    </select>

    <!-- 批量查询群组 -->
    <select id="findAssignmentByBatch"
            parameterType="list"
            resultType="com.zw.talkback.domain.basicinfo.Cluster">
        SELECT a.*, a.org_id groupId FROM zw_m_assignment a
        WHERE a.flag = 1 AND a.types = 1
        <if test="assignList != null">
            AND a.id in
            <foreach item="item" collection="assignList" separator="," open="(" close=")">
                #{item}
            </foreach>
        </if>
        ORDER BY create_data_time DESC, a.name
    </select>


    <!-- 批量查询群组
        监听分组用：查询分组删除群组后的信息 -->
    <select id="findAssignmentByBatchListener"
            parameterType="list"
            resultType="com.zw.talkback.domain.basicinfo.Cluster">
        SELECT a.*, a.org_id groupId FROM zw_m_assignment a
        WHERE a.types = 1
        <if test="assignList != null">
            AND a.id in
            <foreach item="item" collection="assignList" separator="," open="(" close=")">
                #{item}
            </foreach>
        </if>
        ORDER BY create_data_time DESC, a.name
    </select>


    <!-- 查询群组 -->
    <select id="getGroups" resultType="java.lang.String">
        SELECT DISTINCT GROUP_CONCAT(DISTINCT a.name SEPARATOR ',') FROM zw_m_assignment a
        INNER JOIN zw_m_assignment_vehicle av ON av.assignment_id = a.id AND av.flag = 1
        INNER JOIN zw_m_assignment_user au ON a.id = au.assignment_id AND au.flag = 1
        AND au.user_id = #{userId}
        <if test="vehicleId != null and vehicleId != ''">
            AND av.vehicle_id = #{vehicleId}
        </if>
    </select>
    <!-- 查询类型 -->
    <select id="getType" resultType="java.lang.String">
        SELECT t.vehicle_type FROM zw_m_vehicle_info v , zw_m_vehicle_type t
        WHERE v.id = #{vehicleId} AND v.vehicle_type = t.id
    </select>

    <!-- 查询用户群组权限 -->
    <select id="findUserAssignment"
            resultType="com.zw.talkback.domain.basicinfo.Cluster">
        SELECT DISTINCT a.id, a.name, a.org_id groupId, a.intercom_group_id intercomGroupId, a.group_call_number
        groupCallNumber, a.flag
        FROM zw_m_assignment a
        INNER JOIN zw_m_assignment_user au ON a.id = au.assignment_id AND au.flag = 1
        WHERE a.flag = 1 AND a.types = 1
        AND au.user_id = #{userId}
        <if test="groupList != null">
            AND a.org_id in
            <foreach item="item" collection="groupList" separator=","
                     open="(" close=")">
                #{item}
            </foreach>
        </if>
        ORDER BY a.create_data_time desc, a.name
    </select>

    <!-- 查询用户群组统计 -->
    <select id="findAssignmentNum" resultType="com.zw.talkback.domain.basicinfo.Cluster">
        SELECT a.id, COUNT(av.vehicle_id) mNum FROM zw_m_assignment a
        INNER JOIN zw_m_assignment_vehicle av ON av.`assignment_id` = a.`id` AND av.`flag` = 1
        INNER JOIN zw_m_config c ON av.vehicle_id = c.vehicle_id AND c.flag = 1
        INNER JOIN zw_m_device_info d ON d.id = c.device_id AND d.flag = 1
        INNER JOIN zw_m_intercom_info ini ON ini.id = c.intercom_info_id AND ini.flag = 1
        WHERE a.`flag` = 1 AND a.types = 1 AND ini.id IS NOT NULL
        <if test="assignList != null and assignList.size() > 0">
            AND a.id IN
            <foreach item="item" collection="assignList" separator="," open="(" close=")">
                #{item.id}
            </foreach>
        </if>
        <if test="monitorType != null and monitorType != ''">
            AND c.monitor_type = #{monitorType}
        </if>
        <if test="deviceType != null and deviceType != ''">
            AND d.device_type = #{deviceType}
        </if>
        GROUP BY a.id, a.create_data_time, a.name
        ORDER BY a.create_data_time DESC, a.name
    </select>

    <insert id="addAssignment" parameterType="com.zw.talkback.domain.basicinfo.ClusterInfo">
        insert into zw_m_assignment (id, name, type,contacts,telephone, description, flag, create_data_time, create_data_username,
        sound_recording,intercom_group_id,group_call_number,types,org_id)
        values (#{id}, #{name}, #{type}, #{contacts},#{telephone},#{description}, #{flag}, #{createDataTime}, #{createDataUsername},
        #{soundRecording},#{intercomGroupId},#{groupCallNumber},1,#{groupId})
    </insert>

    <!-- 批量新增用户与群组的关联表 -->
    <insert id="addAssignmentUserByBatch"
            parameterType="com.zw.platform.domain.basicinfo.form.AssignmentUserForm">
        insert into zw_m_assignment_user (id, user_id, assignment_id,
        flag, create_data_time, create_data_username)
        values
        <foreach collection="list" item="item" index="index"
                 separator=",">
            (#{item.id}, #{item.userId},
            #{item.assignmentId},
            #{item.flag}, #{item.createDataTime},
            #{item.createDataUsername})
        </foreach>
    </insert>

    <!-- 根据id查询群组 -->
    <select id="findAssignmentById"
            parameterType="string"
            resultType="com.zw.talkback.domain.basicinfo.Cluster">
        SELECT a.*,a.org_id groupId FROM zw_m_assignment a
        WHERE a.flag != 0 AND a.types = 1
        <if test="id != null and id != ''">
            AND a.id = #{id}
        </if>
        ORDER BY create_data_time DESC
    </select>

    <!-- 根据id查询群组 -->
    <select id="findAssignmentByIdListener"
            parameterType="string"
            resultType="com.zw.talkback.domain.basicinfo.Cluster">
        SELECT a.*,a.org_id groupId FROM zw_m_assignment a
        WHERE a.types = 1
        <if test="id != null and id != ''">
            AND a.id = #{id}
        </if>
        ORDER BY create_data_time DESC
    </select>

    <!-- 根据id查询群组加计数 -->
    <select id="findAssignmentByIdNum"
            parameterType="string"
            resultType="com.zw.talkback.domain.basicinfo.Cluster">
        SELECT a.id, a.name, a.org_id groupId, COUNT(av.vehicle_id) mNum FROM zw_m_assignment a
        INNER JOIN zw_m_assignment_vehicle av ON av.`assignment_id` = a.`id` AND av.`flag` = 1
        INNER JOIN zw_m_config c ON av.vehicle_id = c.vehicle_id AND c.flag = 1
        INNER JOIN zw_m_intercom_info ini ON ini.id = c.intercom_info_id AND ini.flag = 1
        WHERE a.flag = 1 AND a.types = 1
        <if test="id != null and id != ''">
            AND a.id = #{id}
        </if>
    </select>

    <!-- 修改群组 -->
    <update id="updateAssignment" parameterType="com.zw.talkback.domain.basicinfo.ClusterInfo">
        update zw_m_assignment
        set name = #{name},
        type = #{type},
        contacts = #{contacts},
        telephone = #{telephone},
        description = #{description},
        flag = #{flag},
        types = 1,
        update_data_time = #{updateDataTime},
        update_data_username = #{updateDataUsername},
        sound_recording = #{soundRecording}
        where id = #{id}
    </update>

    <!-- 修改群组 -->
    <update id="updateCluster1" parameterType="com.zw.talkback.domain.basicinfo.form.ClusterForm">
        update zw_m_assignment
        set name = #{name},
        type = #{type},
        contacts = #{contacts},
        telephone = #{telephone},
        description = #{description},
        flag = 1,
        types = 1,
        intercom_group_id = #{intercomGroupId},
        group_call_number = #{groupCallNumber},
        update_data_time = #{updateDataTime},
        update_data_username = #{updateDataUsername},
        sound_recording = #{soundRecording}
        where id = #{id}
    </update>

    <!-- 修改群组 -->
    <update id="updateCluster" parameterType="com.zw.talkback.domain.basicinfo.form.ClusterForm">
        update zw_m_assignment a
        left join zw_m_assignment_user u on
        a.id = u.assignment_id
        set a.name = #{name},
        a.type = #{type},
        a.contacts = #{contacts},
        a.telephone = #{telephone},
        a.description = #{description},
        a.flag = 1,
        a.types = 1,
        a.intercom_group_id = #{intercomGroupId},
        a.group_call_number = #{groupCallNumber},
        a.update_data_time = #{updateDataTime},
        a.update_data_username = #{updateDataUsername},
        a.sound_recording = #{soundRecording},
        a.org_id = #{groupId},
        u.flag = 1
        where a.id = #{id}
    </update>

    <!-- 根据群组id查询车辆 -->
    <select id="findVehicleByAssignmentId"
            parameterType="String"
            resultType="com.zw.platform.domain.basicinfo.VehicleInfo">
        SELECT DISTINCT v.* FROM
        (
        SELECT car.id id, car.brand brand, '0' monitorType,car.create_data_time createDataTime,car.flag FROM
        zw_m_vehicle_info car WHERE car.flag=1
        UNION
        SELECT peo.id id, peo.people_number brand,'1' monitorType,peo.create_data_time createDataTime,peo.flag FROM
        zw_m_people_info peo WHERE peo.flag=1
        ) v
        INNER JOIN zw_m_assignment_vehicle av ON v.id = av.vehicle_id AND av.flag = 1
        WHERE v.flag = 1
        <if test="assignmentId != null and assignmentId != ''">
            AND av.assignment_id = #{assignmentId}
        </if>
        ORDER BY create_data_time DESC
    </select>

    <!-- 根据群组id查询监控对象 -->
    <select id="findMonitorByAssignmentId"
            parameterType="String"
            resultType="com.zw.platform.domain.basicinfo.VehicleInfo">
        SELECT t.id, t.brand, t.monitorType, av.assignment_id FROM zw_m_assignment_vehicle av
        INNER JOIN
        (
        SELECT car.id id, car.brand brand, '0' monitorType,car.create_data_time createDataTime FROM zw_m_vehicle_info
        car WHERE car.flag=1
        UNION
        SELECT peo.id id, peo.people_number brand,'1' monitorType,peo.create_data_time createDataTime FROM
        zw_m_people_info peo WHERE peo.flag=1
        UNION
        SELECT th.id id, th.thing_number brand,'2' monitorType,th.create_data_time createDataTime FROM
        zw_m_thing_info th WHERE th.flag=1
        ) t ON t.id = av.vehicle_id
        INNER JOIN zw_m_config c ON av.vehicle_id = c.vehicle_id and c.flag = 1
        INNER JOIN zw_m_intercom_info ini ON ini.id = c.intercom_info_id AND ini.flag = 1
        INNER JOIN zw_m_assignment ass ON ass.id = av.assignment_id AND ass.flag = 1 AND ass.types = 1
        WHERE av.flag = 1 AND ini.id IS NOT NULL
        <if test="assignmentId != null and assignmentId != ''">
            AND av.assignment_id = #{assignmentId}
        </if>
        ORDER BY t.createDataTime DESC
    </select>

    <!-- 根据群组id查询监控对象 -->
    <select id="findMonitorByAssignmentIdList"
            parameterType="List"
            resultType="com.zw.platform.domain.basicinfo.VehicleInfo">
        SELECT t.id, t.brand,di.device_type AS deviceType,si.simcard_number AS simcardNumber,
        t.monitorType, av.assignment_id AS assignmentId FROM zw_m_assignment_vehicle av
        INNER JOIN
        (
        SELECT car.id id, car.brand brand, '0' monitorType FROM zw_m_vehicle_info
        car WHERE car.flag=1
        UNION
        SELECT peo.id id, peo.people_number brand,'1' monitorType FROM
        zw_m_people_info peo WHERE peo.flag=1
        UNION
        SELECT th.id id, th.thing_number brand,'2' monitorType FROM
        zw_m_thing_info th WHERE th.flag=1
        ) t
        ON t.id = av.vehicle_id
        INNER JOIN zw_m_config con ON con.vehicle_id=av.vehicle_id AND con.flag = 1
        INNER JOIN zw_m_device_info di ON di.id=con.device_id AND di.flag=1
        INNER JOIN zw_m_sim_card_info si ON si.id =con.sim_card_id AND si.flag=1
        INNER JOIN zw_m_intercom_info ini ON ini.id = con.intercom_info_id AND ini.flag = 1
        INNER JOIN zw_m_assignment ass ON ass.id = av.assignment_id AND ass.flag = 1 AND ass.types = 1
        WHERE av.flag = 1 AND ini.id IS NOT NULL
        <if test="assignmentIds != null">
            AND av.assignment_id IN
            <foreach item="item" collection="assignmentIds" separator="," open="(" close=")">
                #{item}
            </foreach>
        </if>
        <if test="query != null and query != '' ">
            AND t.brand LIKE CONCAT('%',#{query},'%')
        </if>
        <if test="deviceTypes != null">
            AND di.device_type IN
            <foreach item="item" collection="deviceTypes" separator=","
                     open="(" close=")">
                #{item}
            </foreach>
        </if>
    </select>

    <!-- 根据群组id查询监控对象 -->
    <select id="countMonitorByAssignmentIdList" resultType="int">

        SELECT count(*) FROM zw_m_assignment_vehicle av
        INNER JOIN
        (
        SELECT car.id id, car.brand brand, '0' monitorType,car.create_data_time createDataTime FROM zw_m_vehicle_info
        car WHERE car.flag=1
        UNION
        SELECT peo.id id, peo.people_number brand,'1' monitorType,peo.create_data_time createDataTime FROM
        zw_m_people_info peo WHERE peo.flag=1
        UNION
        SELECT thi.id id, thi.thing_number brand,'2' monitorType,thi.create_data_time createDataTime FROM
        zw_m_thing_info thi WHERE thi.flag=1
        ) t
        ON t.id = av.vehicle_id
        INNER JOIN zw_m_config con ON con.vehicle_id=av.vehicle_id AND con.flag = 1
        INNER JOIN zw_m_intercom_info ini ON ini.id = con.intercom_info_id AND ini.flag = 1
        INNER JOIN zw_m_assignment ass ON ass.id = av.assignment_id AND ass.flag = 1 AND ass.types = 1
        WHERE av.flag = 1 AND ini.id IS NOT NULL
        <if test="assignmentIds != null">
            AND av.assignment_id IN
            <foreach item="item" collection="assignmentIds" separator="," open="(" close=")">
                #{item}
            </foreach>
        </if>
        ORDER BY t.id DESC
    </select>

    <!-- 根据群组ids查询车辆（已在config中绑定） -->
    <select id="findVehicleByAssignmentIds"
            parameterType="list"
            resultType="com.zw.platform.domain.basicinfo.VehicleInfo">
        SELECT distinct v.*,'0' monitorType, av.assignment_id,d.device_number,tt.support_photo_flag as isVideo FROM
        zw_m_vehicle_info v
        INNER JOIN zw_m_assignment_vehicle av ON v.id = av.vehicle_id AND av.flag = 1
        INNER JOIN zw_m_config c ON v.id = c.vehicle_id AND c.flag = 1
        INNER JOIN zw_m_device_info d ON d.id = c.device_id AND d.flag = 1
        inner join zw_m_terminal_type tt on tt.id = d.terminal_type_id and tt.flag = 1
        INNER JOIN zw_m_sim_card_info s ON s.id = c.sim_card_id AND s.flag = 1
        WHERE v.flag = 1
        <if test="assignmentIds != null">
            AND av.assignment_id in
            <foreach item="item" collection="assignmentIds" separator=","
                     open="(" close=")">
                #{item}
            </foreach>
        </if>
        <if test="assignmentIds == null">
            AND 1=0
        </if>
        <if test="deviceType != null and deviceType != ''">
            AND d.device_type = #{deviceType}
        </if>
        <if test="webType != null and webType != '' and webType == 3">
            AND d.manufacturer_id IS NOT NULL AND d.manufacturer_id <![CDATA[<>]]> ""
            AND d.device_modelNumber IS NOT NULL AND d.device_modelNumber <![CDATA[<>]]> ""
        </if>
        ORDER BY v.create_data_time desc
    </select>

    <!-- 根据群组ids查询车辆 id（已在config中绑定） -->
    <select id="findVehicleIdsByAssignmentIds"
            parameterType="list"
            resultType="string">
        SELECT distinct v.id FROM zw_m_vehicle_info v
        INNER JOIN zw_m_assignment_vehicle av ON v.id = av.vehicle_id AND av.flag = 1
        WHERE v.flag = 1
        <if test="assignmentIds != null">
            AND av.assignment_id in
            <foreach item="item" collection="assignmentIds" separator=","
                     open="(" close=")">
                #{item}
            </foreach>
        </if>
        <if test="assignmentIds == null">
            AND 1=0
        </if>
        ORDER BY v.create_data_time desc
    </select>

    <select id="listVehiclesByAssignmentsIds" parameterType="list" resultType="java.lang.String">
        SELECT vehicle_id FROM zw_m_assignment_vehicle WHERE flag = 1 AND monitor_type = 0
        <if test="assignIds != null and assignIds.size() > 0">
            AND assignment_id IN
            <foreach collection="assignIds" item="item" separator="," open="(" close=")">
                #{item}
            </foreach>
        </if>
    </select>

    <!-- 根据群组ids查询监控对象（已在config中绑定） -->
    <select id="findMonitorByAssignmentIds"
            parameterType="list"
            resultType="com.zw.platform.domain.basicinfo.VehicleInfo">
        SELECT t.id,t.brand,t.monitorType,t.createDataTime,t.flag,av.assignment_id, ass.name
        groupName,m.professionalsName,
        de.device_number deviceNumber,tt.support_photo_flag AS isVideo,de.device_type deviceType,de.id
        deviceId,sim.simcard_number
        simcardNumber
        FROM
        (
        SELECT car.id id, car.brand brand, '0' monitorType,car.create_data_time
        createDataTime,car.flag,car.plate_color,car.vehicle_color FROM zw_m_vehicle_info car WHERE car.flag=1
        UNION ALL
        SELECT peo.id id, peo.people_number brand,'1' monitorType,peo.create_data_time createDataTime,peo.flag,0,0 FROM
        zw_m_people_info peo WHERE peo.flag=1
        UNION ALL
        SELECT th.id id, th.thing_number brand,'2' monitorType,th.create_data_time createDataTime,th.flag,0,0 FROM
        zw_m_thing_info th WHERE th.flag=1
        ) t
        INNER JOIN zw_m_assignment_vehicle av ON t.id = av.vehicle_id AND av.flag=1
        INNER JOIN zw_m_config con ON con.vehicle_id=av.vehicle_id AND con.flag = 1
        LEFT JOIN (
        SELECT cpro.config_id,
        GROUP_CONCAT(DISTINCT p.name SEPARATOR ',') AS professionalsName
        FROM zw_m_config_professionals cpro
        INNER JOIN zw_m_professionals_info p ON p.id = cpro.professionals_id AND p.flag = 1
        WHERE cpro.flag = 1
        GROUP BY cpro.config_id
        ) m ON m.config_id = con.id
        INNER JOIN zw_m_device_info de ON de.id = con.device_id AND de.flag = 1
        inner join zw_m_terminal_type tt on tt.id = de.terminal_type_id and tt.flag = 1
        INNER JOIN zw_m_sim_card_info sim ON sim.id = con.sim_card_id AND sim.flag = 1
        INNER JOIN zw_m_assignment ass ON ass.id = av.assignment_id AND ass.flag = 1 AND ass.types
        WHERE
        <if test="assignmentIds == null">
            2 = 0 and
        </if>
        <if test="assignmentIds != null and assignmentIds.size() == 0">
            2 = 0 and
        </if>
        t.flag = 1
        <if test="assignmentIds != null and assignmentIds.size() != 0">
            AND av.assignment_id in
            <foreach item="item" collection="assignmentIds" separator=","
                     open="(" close=")">
                #{item}
            </foreach>
        </if>
        <if test="deviceTypes != null">
            AND de.device_type in
            <foreach item="item" collection="deviceTypes" separator=","
                     open="(" close=")">
                #{item}
            </foreach>
        </if>

        ORDER BY t.createDataTime DESC
    </select>

    <!-- 根据群组ids查询监控对象（已在config中绑定） -->
    <select id="findMonitorIdsByAssignmentIds"
            parameterType="list"
            resultType="string">
        SELECT t.id
        FROM
        (
        SELECT car.id id, car.flag FROM zw_m_vehicle_info car WHERE car.flag=1
        UNION ALL
        SELECT peo.id id, peo.flag FROM zw_m_people_info peo WHERE peo.flag=1
        UNION ALL
        SELECT thi.id id, thi.flag FROM zw_m_thing_info thi WHERE thi.flag=1
        ) t
        INNER JOIN zw_m_assignment_vehicle av ON t.id = av.vehicle_id AND av.flag=1
        WHERE t.flag = 1
        <if test="assignmentIds != null">
            AND av.assignment_id in
            <foreach item="item" collection="assignmentIds" separator=","
                     open="(" close=")">
                #{item}
            </foreach>
        </if>
        <if test="assignmentIds == null">
            AND 1=0
        </if>
    </select>


    <!-- 根据群组ids模糊查询监控对象（已在config中绑定） -->
    <select id="findMonitorByAssignmentIdsFuzzy"
            parameterType="list"
            resultType="com.zw.platform.domain.basicinfo.VehicleInfo">
        SELECT t.id,t.brand,t.monitorType,t.createDataTime,t.flag,av.assignment_id, ass.name
        groupName,m.professionalsName,
        de.device_number deviceNumber,tt.support_photo_flag AS isVideo,de.device_type deviceType,de.id
        deviceId,sim.simcard_number
        simcardNumber
        FROM
        (
        SELECT car.id id, car.brand brand, '0' monitorType,car.create_data_time
        createDataTime,car.flag,car.plate_color,car.vehicle_color FROM zw_m_vehicle_info car WHERE car.flag=1
        UNION ALL
        SELECT peo.id id, peo.people_number brand,'1' monitorType,peo.create_data_time createDataTime,peo.flag,0,0 FROM
        zw_m_people_info peo WHERE peo.flag=1
        UNION ALL
        SELECT th.id id, th.thing_number brand,'2' monitorType,th.create_data_time createDataTime,th.flag,0,0 FROM
        zw_m_thing_info th WHERE th.flag=1
        ) t
        INNER JOIN zw_m_assignment_vehicle av ON t.id = av.vehicle_id AND av.flag=1
        INNER JOIN zw_m_config con ON con.vehicle_id=av.vehicle_id AND con.flag = 1
        LEFT JOIN (
        SELECT cpro.config_id,
        GROUP_CONCAT(DISTINCT p.name SEPARATOR ',') AS professionalsName
        FROM zw_m_config_professionals cpro
        INNER JOIN zw_m_professionals_info p ON p.id = cpro.professionals_id AND p.flag = 1
        WHERE cpro.flag = 1
        GROUP BY cpro.config_id
        ) m ON m.config_id = con.id
        INNER JOIN zw_m_device_info de ON de.id = con.device_id AND de.flag = 1
        inner join zw_m_terminal_type tt on tt.id = de.terminal_type_id and tt.flag = 1
        INNER JOIN zw_m_sim_card_info sim ON sim.id = con.sim_card_id AND sim.flag = 1
        INNER JOIN zw_m_assignment ass ON ass.id = av.assignment_id AND ass.flag = 1 AND ass.types = 1
        WHERE t.flag = 1
        <if test="assignmentIds != null">
            AND av.assignment_id in
            <foreach item="item" collection="assignmentIds" separator=","
                     open="(" close=")">
                #{item}
            </foreach>
        </if>
        <if test="assignmentIds == null">
            AND 1=0
        </if>
        <if test="queryType == 'name' and queryParam != null and queryParam != ''">
            AND t.brand LIKE CONCAT('%',#{queryParam},'%')
        </if>
        <if test="queryType == 'deviceNumber' and queryParam != null and queryParam != ''">
            AND de.device_number LIKE CONCAT('%',#{queryParam},'%')
        </if>
        <if test="queryType == 'simcardNumber' and queryParam != null and queryParam != ''">
            AND sim.simcard_number LIKE CONCAT('%',#{queryParam},'%')
        </if>
        <if test="queryType == 'assignName' and queryParam != null and queryParam != ''">
            AND ass.name LIKE CONCAT('%',#{queryParam},'%')
        </if>
        <if test="queryType == 'professional' and queryParam != null and queryParam != ''">
            AND m.professionalsName LIKE CONCAT('%',#{queryParam},'%')
        </if>
        <if test="deviceTypes != null">
            AND de.device_type in
            <foreach item="item" collection="deviceTypes" separator=","
                     open="(" close=")">
                #{item}
            </foreach>
        </if>
        ORDER BY t.createDataTime DESC
    </select>

    <!-- 根据群组ids查询车辆 id（已在config中绑定） -->
    <select id="findVehicleByAssignmentIdsFuzzy"
            parameterType="list"
            resultType="com.zw.platform.domain.basicinfo.VehicleInfo">
        SELECT distinct v.*,'0' monitorType, av.assignment_id,d.device_number,tt.support_photo_flag AS isVideo FROM
        zw_m_vehicle_info v
        INNER JOIN zw_m_assignment_vehicle av ON v.id = av.vehicle_id AND av.flag = 1
        INNER JOIN zw_m_config c ON v.id = c.vehicle_id AND c.flag = 1
        INNER JOIN zw_m_device_info d ON d.id = c.device_id AND d.flag = 1
        inner join zw_m_terminal_type tt on tt.id = d.terminal_type_id and tt.flag = 1
        INNER JOIN zw_m_sim_card_info s ON s.id = c.sim_card_id AND s.flag = 1
        WHERE v.flag = 1
        <if test="assignmentIds != null">
            AND av.assignment_id in
            <foreach item="item" collection="assignmentIds" separator=","
                     open="(" close=")">
                #{item}
            </foreach>
        </if>
        <if test="assignmentIds == null">
            AND 1=0
        </if>
        <if test="deviceType != null and deviceType != ''">
            AND d.device_type = #{deviceType}
        </if>
        <if test="queryParam != null and queryParam != ''">
            AND v.brand LIKE CONCAT('%',#{queryParam},'%')
        </if>
        <if test="webType != null and webType != '' and webType == 3">
            AND d.manufacturer_id IS NOT NULL AND d.manufacturer_id <![CDATA[<>]]> ""
            AND d.device_modelNumber IS NOT NULL AND d.device_modelNumber <![CDATA[<>]]> ""
        </if>
        ORDER BY v.create_data_time desc
    </select>

    <!-- 根据群组ids,设备类型查询监控对象（已在config中绑定） -->
    <select id="findMonitorByAssignmentIdsAndType"
            parameterType="list"
            resultType="com.zw.platform.domain.basicinfo.VehicleInfo">
        SELECT t.id,t.brand,t.monitorType,t.createDataTime,t.flag,av.assignment_id, ass.name
        groupName,m.professionalsName,
        de.device_number deviceNumber,tt.support_photo_flag isVideo,de.device_type deviceType,de.id
        deviceId,sim.simcard_number
        simcardNumber
        FROM
        (
        SELECT car.id id, car.brand brand, '0' monitorType,car.create_data_time
        createDataTime,car.flag,car.plate_color,car.vehicle_color FROM zw_m_vehicle_info car WHERE car.flag=1
        UNION ALL
        SELECT peo.id id, peo.people_number brand,'1' monitorType,peo.create_data_time createDataTime,peo.flag,0,0 FROM
        zw_m_people_info peo WHERE peo.flag=1
        UNION ALL
        SELECT th.id id, th.thing_number brand,'2' monitorType,th.create_data_time createDataTime,th.flag,0,0 FROM
        zw_m_thing_info th WHERE th.flag=1
        ) t
        INNER JOIN zw_m_assignment_vehicle av ON t.id = av.vehicle_id AND av.flag=1
        INNER JOIN zw_m_config con ON con.vehicle_id=av.vehicle_id AND con.flag = 1
        LEFT JOIN (
        SELECT cpro.config_id,
        GROUP_CONCAT(DISTINCT p.name SEPARATOR ',') AS professionalsName
        FROM zw_m_config_professionals cpro
        INNER JOIN zw_m_professionals_info p ON p.id = cpro.professionals_id AND p.flag = 1
        WHERE cpro.flag = 1
        GROUP BY cpro.config_id
        ) m ON m.config_id = con.id
        INNER JOIN zw_m_device_info de ON de.id = con.device_id AND de.flag = 1
        INNER JOIN zw_m_terminal_type tt on tt.id = de.terminal_type_id AND tt.flag = 1
        INNER JOIN zw_m_sim_card_info sim ON sim.id = con.sim_card_id AND sim.flag = 1
        INNER JOIN zw_m_assignment ass ON ass.id = av.assignment_id AND ass.flag = 1 AND ass.types = 1
        WHERE t.flag = 1
        <if test="deviceType == '-1'">
            AND de.device_type BETWEEN '0' AND '1'
        </if>
        <if test="deviceType != '-1'">
            AND de.device_type = #{deviceType}
        </if>
        <if test="assignmentIds != null">
            AND av.assignment_id in
            <foreach item="item" collection="assignmentIds" separator=","
                     open="(" close=")">
                #{item}
            </foreach>
        </if>
        <if test="assignmentIds == null">
            AND 1=0
        </if>
        ORDER BY t.createDataTime DESC
    </select>

    <!-- 根据群组ids,设备类型查询车辆（已在config中绑定） -->
    <select id="findVehicleByAssignIdAndType"
            parameterType="list"
            resultType="com.zw.platform.domain.basicinfo.VehicleInfo">
        SELECT distinct v.id, v.brand, '0' monitorType, av.assignment_id, d.device_type
        FROM zw_m_vehicle_info v
        INNER JOIN zw_m_assignment_vehicle av ON v.id = av.vehicle_id AND av.flag = 1
        INNER JOIN zw_m_config c ON v.id = c.vehicle_id AND c.flag = 1
        INNER JOIN zw_m_device_info d ON d.id = c.device_id AND d.flag = 1 AND d.device_type = #{deviceType}
        WHERE v.flag = 1
        <if test="assignmentIds != null">
            AND av.assignment_id in
            <foreach item="item" collection="assignmentIds" separator=","
                     open="(" close=")">
                #{item}
            </foreach>
        </if>
        <if test="assignmentIds == null">
            AND 1=0
        </if>
        ORDER BY v.create_data_time desc
    </select>

    <select id="countVehicleByAssignIdAndType" resultType="int">
        SELECT count(0) FROM (
        SELECT distinct v.id, av.assignment_id, d.device_type
        FROM zw_m_vehicle_info v
        INNER JOIN zw_m_assignment_vehicle av ON v.id = av.vehicle_id AND av.flag = 1
        INNER JOIN zw_m_config c ON v.id = c.vehicle_id AND c.flag = 1
        INNER JOIN zw_m_device_info d ON d.id = c.device_id AND d.flag = 1 AND d.device_type = #{deviceType}
        WHERE v.flag = 1
        <if test="assignmentIds != null">
            AND av.assignment_id in
            <foreach item="item" collection="assignmentIds" separator="," open="(" close=")">
                #{item}
            </foreach>
        </if>
        <if test="assignmentIds == null">
            AND 1=0
        </if>
        ) table_count
    </select>

    <select id="vehicleTruckTree"
            parameterType="list"
            resultType="com.zw.platform.domain.basicinfo.VehicleInfo">
        SELECT distinct v.*,av.assignment_id FROM zw_m_vehicle_info v
        left join zw_m_vehicle_type vt on v.vehicle_type = vt.id
        INNER JOIN zw_m_assignment_vehicle av ON v.id = av.vehicle_id AND av.flag = 1
        INNER JOIN zw_m_config c ON v.id = c.vehicle_id AND c.flag = 1
        WHERE v.flag = 1 AND vt.vehicle_category = '4'
        <if test="assignmentIds != null">
            AND av.assignment_id in
            <foreach item="item" collection="assignmentIds" separator=","
                     open="(" close=")">
                #{item}
            </foreach>
        </if>
        <if test="assignmentIds == null">
            AND 1=0
        </if>
        ORDER BY create_data_time DESC
    </select>

    <!-- 删除群组 -->
    <update id="deleteAssignment" parameterType="String">
        update zw_m_assignment
        set types = 0
        where id = #{id}
        and types != 0
    </update>

    <!-- 删除群组与企业关联 -->
    <update id="deleteAssignmentGroupByAssId" parameterType="String">
        update zw_m_assignment
        set flag = 0
        where id = #{assignmentId}
        and flag = 1
    </update>

    <!-- 删除群组与企业关联 -->
    <update id="deleteAssignmentUserByAssId" parameterType="String">
        update zw_m_assignment_user
        set flag = 0
        where assignment_id = #{assignmentId}
        and flag = 1
    </update>

    <!-- 删除群组（批量） -->
    <update id="deleteAssignmentByBatch" parameterType="list">
        update zw_m_assignment
        set types = 0
        where types != 0
        and id in
        <foreach item="item" collection="list" separator=","
                 open="(" close=")">
            #{item}
        </foreach>
    </update>

    <!-- 删除群组与企业关联（批量） -->
    <update id="deleteAssignmentGroupByAssIdByBatch" parameterType="list">
        update zw_m_assignment
        set flag = 0
        where flag = 1
        and id in
        <foreach item="item" collection="list" separator=","
                 open="(" close=")">
            #{item}
        </foreach>
    </update>

    <!-- 删除群组与企业关联（批量） -->
    <update id="deleteAssignmentUserByAssIdByBatch" parameterType="list">
        update zw_m_assignment_user
        set flag = 0
        where flag = 1
        and assignment_id in
        <foreach item="item" collection="list" separator=","
                 open="(" close=")">
            #{item}
        </foreach>
    </update>


    <!-- 新增车辆群组信息 -->
    <insert id="addAssignmentVehicle" parameterType="com.zw.platform.domain.infoconfig.form.AssignmentVehicleForm">
        insert into zw_m_assignment_vehicle (id, assignment_id, vehicle_id, flag, create_data_time, create_data_username,monitor_type,knob_no)
        values (#{id}, #{assignmentId}, #{vehicleId}, #{flag}, #{createDataTime}, #{createDataUsername}, #{monitorType},#{knobNo})
    </insert>

    <!-- 新增车辆群组信息 -->
    <insert id="addAssignVehicleList">
        insert into zw_m_assignment_vehicle (id, assignment_id, vehicle_id, flag, create_data_time,
        create_data_username,monitor_type,knob_no)
        values
        <foreach collection="list" item="item" index="index" separator=",">
            (#{item.id}, #{item.assignmentId}, #{item.vehicleId}, #{item.flag}, #{item.createDataTime},
            #{item.createDataUsername}, #{item.monitorType},#{item.knobNo})
        </foreach>
    </insert>

    <select id="findAssignmentByVehicleId"
            resultType="com.zw.talkback.domain.basicinfo.Cluster">
        SELECT DISTINCT a.*,a.org_id groupId FROM zw_m_assignment a
        INNER JOIN zw_m_assignment_vehicle av ON av.assignment_id = a.id AND av.flag = 1
        INNER JOIN zw_m_assignment_user au ON a.id = au.assignment_id AND au.flag = 1
        <if test="userId != null and userId !=''">
            AND au.user_id = #{userId}
        </if>
        <if test="groupList != null">
            AND a.org_id in
            <foreach item="item" collection="groupList" separator=","
                     open="(" close=")">
                #{item}
            </foreach>
        </if>
        <if test="vehicleId != null and vehicleId != ''">
            AND av.vehicle_id = #{vehicleId}
        </if>
        ORDER BY create_data_time DESC
    </select>


    <!-- 查询同一组织下是否有相同名称的群组 -->
    <select id="findIdByNameAndOrg" resultType="com.zw.talkback.domain.basicinfo.Cluster">
        SELECT id FROM zw_m_assignment WHERE flag = 1 AND types = 1 AND BINARY name = #{name} AND org_id = #{groupId}
    </select>

    <!-- 查询同一组织下是否有相同名称的群组 -->
    <select id="findIdByName" resultType="com.zw.talkback.domain.basicinfo.Cluster">
        SELECT id FROM zw_m_assignment WHERE flag = 1 AND types = 1 AND BINARY name = #{name}
    </select>


    <select id="findAllByName" resultType="com.zw.talkback.domain.basicinfo.Cluster">
        SELECT id, name, types, org_id as groupId FROM zw_m_assignment WHERE flag = 1 AND BINARY name = #{name}
    </select>

    <!-- 根据组织id查询组织下所有群组 -->
    <select id="findAssignmentByGroupId"
            parameterType="String"
            resultType="com.zw.talkback.domain.basicinfo.Cluster">
        SELECT a.*FROM zw_m_assignment a
        WHERE a.flag = 1 AND a.types = 1
        <if test="groupId != null and groupId != ''">
            AND a.org_id = #{groupId}
        </if>
        ORDER BY create_data_time DESC
    </select>

    <!-- 根据组织id列表查询组织列表下所有群组 -->
    <select id="findAssignmentByGroupIdList" resultType="com.zw.talkback.domain.basicinfo.Cluster">
        SELECT a.id, a.name, a.org_id groupId
        FROM zw_m_assignment a
        WHERE a.flag = 1 AND a.types = 1
        <if test="groupIdList != null and groupIdList.size() > 0">
            AND a.org_id IN
            <foreach collection="groupIdList" item="item" open="(" close=")" separator=",">
                #{item}
            </foreach>
        </if>
        ORDER BY a.create_data_time DESC
    </select>

    <!-- 根据组织id查询组织下所有群组 ,排除当前群组-->
    <select id="findAssignByGroupIdExpectVehicle" parameterType="String"
            resultType="com.zw.talkback.domain.basicinfo.Cluster">
        SELECT a.*FROM zw_m_assignment a
        WHERE a.flag = 1 AND a.types = 1
        <if test="groupId != null and groupId != ''">
            AND a.org_id = #{groupId}
        </if>
        AND a.id != #{assignmentId}
        ORDER BY create_data_time DESC
    </select>

    <!-- 批量新增群组 -->
    <insert id="addAssignmentByBatch" parameterType="com.zw.talkback.domain.basicinfo.ClusterInfo">
        insert into zw_m_assignment (id, name, type,contacts,telephone, description, flag, create_data_time,
        create_data_username, types, org_id)
        values
        <foreach collection="list" item="item" index="index" separator=",">
            (#{item.id}, #{item.name}, #{item.type}, #{item.contacts}, #{item.telephone}, #{item.description},
            #{item.flag}, #{item.createDataTime}, #{item.createDataUsername} ,#{item.types}, #{item.groupId})
        </foreach>
    </insert>

    <!-- 删除群组与车辆关联 -->
    <update id="deleteVehiclePerBatch" parameterType="com.zw.platform.domain.infoconfig.form.AssignmentVehicleForm">
        update zw_m_assignment_vehicle set flag = 0,update_data_time = now()
        where
        flag = 1
        and assignment_id = #{assignmentId}
        and vehicle_id in
        <foreach collection="ids" item="item" index="index" open="(" close=")" separator=",">
            #{item}
        </foreach>
    </update>

    <!-- 批量新增群组与车辆的关联表 -->
    <insert id="addVehiclePer" parameterType="com.zw.platform.domain.infoconfig.form.AssignmentVehicleForm">
        insert into zw_m_assignment_vehicle (id, assignment_id, vehicle_id, monitor_type, flag, create_data_time,
        create_data_username,knob_no)
        values
        <foreach collection="list" item="item" index="index" separator=",">
            (#{item.id}, #{item.assignmentId}, #{item.vehicleId}, '1',
            #{item.flag},
            #{item.createDataTime}, #{item.createDataUsername},#{item.knobNo})
        </foreach>
    </insert>

    <select id="findAssignsGroupId" parameterType="string" resultType="string">
        select a.org_id from zw_m_assignment a where a.id = #{id} limit 1
    </select>

    <!-- 根据群组ids查询监控对象    车    （已在config中绑定） -->
    <select id="vehicleFindByAssignmentId"
            parameterType="list"
            resultType="com.zw.platform.domain.basicinfo.VehicleInfo">
        SELECT DISTINCT t.id,t.brand, '0' monitorType,
        t.create_data_time,t.flag,av.assignment_id,m.deviceNumber,m.isVideo, m.groupName,
        m.simcardNumber,m.professionalsName
        FROM zw_m_vehicle_info t
        INNER JOIN zw_m_assignment_vehicle av ON t.id = av.vehicle_id AND av.flag = 1
        INNER JOIN (
        SELECT assv.vehicle_id,GROUP_CONCAT(DISTINCT ass.name SEPARATOR ',') groupName,GROUP_CONCAT(DISTINCT p.name
        SEPARATOR ',') AS professionalsName,
        de.device_number deviceNumber,tt.support_photo_flag AS isVideo,de.device_type deviceType,sim.simcard_number
        simcardNumber
        FROM zw_m_assignment_vehicle assv
        INNER JOIN zw_m_assignment ass ON ass.id = assv.assignment_id AND ass.flag = 1 AND ass.types=1
        INNER JOIN zw_m_config con ON assv.vehicle_id = con.vehicle_id AND con.flag = 1
        INNER JOIN zw_m_device_info de ON de.id = con.device_id AND de.flag = 1
        inner join zw_m_terminal_type tt on tt.id = de.terminal_type_id and tt.flag = 1
        INNER JOIN zw_m_sim_card_info sim ON sim.id = con.sim_card_id AND sim.flag = 1
        LEFT JOIN zw_m_config_professionals cpro ON cpro.config_id = con.id AND cpro.flag = 1
        LEFT JOIN zw_m_professionals_info p ON p.id = cpro.professionals_id AND p.flag = 1
        WHERE assv.flag = 1
        <if test="assignmentIds != null">
            AND assv.assignment_id in
            <foreach item="item" collection="assignmentIds" separator=","
                     open="(" close=")">
                #{item}
            </foreach>
        </if>
        <if test="assignmentIds == null">
            AND 1=0
        </if>
        GROUP BY assv.vehicle_id
        ) m
        ON t.id = m.vehicle_id
        where t.flag = 1
        <if test="assignmentIds != null">
            AND av.assignment_id in
            <foreach item="item" collection="assignmentIds" separator=","
                     open="(" close=")">
                #{item}
            </foreach>
        </if>
        <if test="assignmentIds == null">
            AND 1=0
        </if>
        <if test="deviceType != null and deviceType != ''">
            AND m.deviceType = #{deviceType}
        </if>
        ORDER BY t.create_data_time DESC
    </select>

    <!-- 根据群组ids查询监控对象   根据监控对象类型和终端类型查询车辆数量 -->
    <select id="getMonitorCount"
            parameterType="list"
            resultType="String">
        SELECT DISTINCT assv.vehicle_id FROM zw_m_assignment_vehicle assv
        INNER JOIN zw_m_config con ON assv.vehicle_id = con.vehicle_id AND con.flag = 1
        INNER JOIN zw_m_device_info de ON de.id = con.device_id AND de.flag = 1
        WHERE assv.flag = 1
        <if test="assignmentIds != null">
            AND assv.assignment_id IN
            <foreach item="item" collection="assignmentIds" separator=","
                     open="(" close=")">
                #{item}
            </foreach>
        </if>
        <if test="assignmentIds == null">
            AND 1=0
        </if>
        <if test="deviceType != null and deviceType != ''">
            AND de.device_type = #{deviceType}
        </if>
        <if test="monitorType != null and monitorType != ''">
            AND con.monitor_type = #{monitorType}
        </if>
    </select>

    <!-- 根据群组ids查询监控对象    人    （已在config中绑定） -->
    <select id="peopleFindByAssignmentId"
            parameterType="list"
            resultType="com.zw.platform.domain.basicinfo.VehicleInfo">
        SELECT DISTINCT t.id,t.brand,t.monitorType, t.createDataTime,t.flag,av.assignment_id,m.deviceNumber,m.isVideo,
        m.groupName,
        m.simcardNumber,m.professionalsName
        FROM
        (
        SELECT peo.id id, peo.people_number brand,'1' monitorType,peo.create_data_time createDataTime,peo.flag FROM
        zw_m_people_info peo WHERE peo.flag=1
        ) t
        INNER JOIN zw_m_assignment_vehicle av ON t.id = av.vehicle_id AND av.flag = 1
        INNER JOIN (
        SELECT assv.vehicle_id,GROUP_CONCAT(DISTINCT ass.name SEPARATOR ',') groupName,GROUP_CONCAT(DISTINCT p.name
        SEPARATOR ',') AS professionalsName,
        de.device_number deviceNumber,tt.support_photo_flag AS isVideo,sim.simcard_number simcardNumber
        FROM zw_m_assignment_vehicle assv
        INNER JOIN zw_m_assignment ass ON ass.id = assv.assignment_id AND ass.flag = 1 AND ass.types = 1
        INNER JOIN zw_m_config con ON assv.vehicle_id = con.vehicle_id AND con.flag = 1
        INNER JOIN zw_m_device_info de ON de.id = con.device_id AND de.flag = 1
        inner join zw_m_terminal_type tt on tt.id = de.terminal_type_id and tt.flag = 1
        INNER JOIN zw_m_sim_card_info sim ON sim.id = con.sim_card_id AND sim.flag = 1
        LEFT JOIN zw_m_config_professionals cpro ON cpro.config_id = con.id AND cpro.flag = 1
        LEFT JOIN zw_m_professionals_info p ON p.id = cpro.professionals_id AND p.flag = 1
        WHERE assv.flag = 1
        <if test="assignmentIds != null">
            AND assv.assignment_id in
            <foreach item="item" collection="assignmentIds" separator=","
                     open="(" close=")">
                #{item}
            </foreach>
        </if>
        <if test="assignmentIds == null">
            AND 1=0
        </if>
        GROUP BY assv.vehicle_id
        ) m
        ON t.id = m.vehicle_id
        where t.flag = 1
        <if test="assignmentIds != null">
            AND av.assignment_id in
            <foreach item="item" collection="assignmentIds" separator=","
                     open="(" close=")">
                #{item}
            </foreach>
        </if>
        <if test="assignmentIds == null">
            AND 1=0
        </if>
        ORDER BY t.createDataTime DESC
    </select>

    <!-- 根据传感器类型查询绑定该类型传感器的监控对象 -->
    <select id="findTempSensoreVehicleByAssignmentId"
            parameterType="list"
            resultType="com.zw.platform.domain.basicinfo.VehicleInfo">
        SELECT DISTINCT
        v.*, av.assignment_id,
        d.device_number,
        tt.support_photo_flag as isVideo
        FROM
        zw_m_vehicle_info v
        INNER JOIN zw_m_assignment_vehicle av ON v.id = av.vehicle_id
        AND av.flag = 1
        INNER JOIN zw_m_config c ON v.id = c.vehicle_id
        AND c.flag = 1
        INNER JOIN zw_m_device_info d ON d.id = c.device_id
        AND d.flag = 1
        inner join zw_m_terminal_type tt on tt.id = d.terminal_type_id and tt.flag = 1
        INNER JOIN zw_m_sim_card_info s ON s.id = c.sim_card_id
        AND s.flag = 1
        INNER JOIN zw_m_sensor_vehicle sv ON sv.vehicle_id = v.id
        AND sv.flag = 1
        INNER JOIN zw_m_sensor_info si ON si.id = sv.sensor_id
        AND si.flag = 1
        AND si.sensor_type = #{sensorType}
        WHERE
        v.flag = 1
        <if test="assignmentIds != null">
            AND av.assignment_id in
            <foreach item="item" collection="assignmentIds" separator=","
                     open="(" close=")">
                #{item}
            </foreach>
        </if>
        <if test="assignmentIds == null">
            AND 1=0
        </if>
        ORDER BY v.create_data_time desc
    </select>
    <select id="findAssignsGroupIds" parameterType="list"
            resultType="java.lang.String">
        select a.org_id
        from zw_m_assignment a
        where a.id in
        <foreach item="item" collection="assignmentIds" separator=","
                 open="(" close=")">
            #{item}
        </foreach>
    </select>
    <select id="findAssignNames" parameterType="list"
            resultType="java.lang.String">
        select a.name
        from zw_m_assignment a
        where a.id in
        <foreach item="item" collection="assignmentIds" separator=","
                 open="(" close=")">
            #{item}
        </foreach>
    </select>

    <select id="findAssignName" resultType="java.lang.String">
        select a.name
        from zw_m_assignment a
        where a.id = #{assignmentId}
    </select>


    <select id="getAssignsByMonitorId" resultType="com.zw.talkback.domain.basicinfo.Cluster">
        select a.name,av.*,a.intercom_group_id
        from zw_m_assignment_vehicle av
        inner join zw_m_assignment a on a.id = av.assignment_id and a.flag = 1 AND a.types = 1
        where
        av.flag = 1
        and a.types = 1
        and av.vehicle_id in
        <foreach item="item" collection="vehicleIds" separator=","
                 open="(" close=")">
            #{item}
        </foreach>
    </select>

    <select id="getAllAssignmentByGroupIds" resultType="java.lang.String">
        SELECT DISTINCT a.id FROM zw_m_assignment a
        INNER JOIN zw_m_assignment_user au ON a.id = au.assignment_id AND au.flag = 1
        WHERE a.flag = 1 AND a.types = 1
        AND au.user_id = #{userId}
        <if test="groupList != null">
            AND a.org_id in
            <foreach item="item" collection="groupList" separator=","
                     open="(" close=")">
                #{item}
            </foreach>
        </if>
        ORDER BY a.create_data_time desc, a.name
    </select>

    <select id="getTransportAssignmentByGroupId"
            resultType="com.zw.talkback.domain.basicinfo.form.ClusterForm">
        SELECT * FROM (
        SELECT COUNT(DISTINCT av.vehicle_id) assignmentNumber,a.*,substring(a.name,7) AS orderNum FROM zw_m_assignment a
        LEFT JOIN zw_m_assignment_vehicle av ON a.id = av.assignment_id AND av.flag = 1
        WHERE a.flag = 1 AND  a.types = 1
        AND a.org_id = #{groupId}
        AND a.name LIKE '货运平台分组%'
        GROUP BY a.id
        ) ass WHERE ass.assignmentNumber &lt; 100
        ORDER BY ass.orderNum
    </select>

    <select id="findTransportAssignmentByGroupId"
            resultType="Integer">
        SELECT substring(a.name,7) AS orderNum FROM zw_m_assignment a
        WHERE a.flag = 1 AND  a.types = 1
        AND a.org_id = #{groupId}
        AND a.name LIKE '货运平台分组%'
    </select>

    <select id="getGroupHasAssignmentNumber" parameterType="string"
            resultType="com.zw.talkback.domain.basicinfo.form.ClusterForm">
        SELECT COUNT(*) AS assignmentNumber, a.org_id groupId FROM zw_m_assignment a
        WHERE a.flag = 1
        AND a.org_id = #{groupId}
    </select>


    <select id="getGroupNotLikeFreightSize" resultType="int">
        SELECT COUNT(*) AS orderNum FROM zw_m_assignment a
        WHERE a.flag = 1 AND  a.types = 1
        AND a.org_id = #{groupId}
        AND a.name NOT LIKE '货运平台分组%'
    </select>

    <select id="getAssignPhoneByIds" parameterType="string" resultType="string">
        select GROUP_CONCAT(DISTINCT telephone) from zw_m_assignment where id in
        <foreach item="item" collection="assignIds.split(',')" separator=","
                 open="(" close=")">
            #{item}
        </foreach>
        and flag = 1 and types = 1

    </select>

    <resultMap id="t809ForwardResultMap" type="com.zw.talkback.domain.basicinfo.Cluster">
        <result column="id" property="id"/>
        <collection property="monitorIds" ofType="java.lang.String">
            <result column="vehicle_id"/>
        </collection>
    </resultMap>

    <select id="find809ForwardAssignmentNum" parameterType="java.util.List" resultMap="t809ForwardResultMap">
        SELECT a.id, av.vehicle_id FROM zw_m_assignment a
        INNER JOIN zw_m_assignment_vehicle av ON av.assignment_id = a.id AND av.flag = 1
        INNER JOIN
        (
        SELECT car.id id FROM zw_m_vehicle_info car WHERE car.flag=1
        UNION
        SELECT peo.id id FROM zw_m_people_info peo WHERE peo.flag=1
        UNION
        SELECT th.id id FROM zw_m_thing_info th WHERE th.flag=1
        ) t ON av.vehicle_id = t.id
        INNER JOIN zw_m_config c ON t.id = c.vehicle_id AND c.flag = 1
        INNER JOIN zw_m_device_info d ON d.id = c.device_id AND d.flag = 1
        WHERE a.`flag` = 1 AND a.types = 1
        AND a.id IN
        <foreach item="item" collection="assigns" separator="," open="(" close=")">
            #{item.id}
        </foreach>
        AND c.monitor_type = 0
        AND d.manufacturer_id IS NOT NULL AND d.manufacturer_id <![CDATA[<>]]> ""
        AND d.device_modelNumber IS NOT NULL AND d.device_modelNumber <![CDATA[<>]]> ""
    </select>

    <select id="get809ForwardCount" parameterType="java.util.List" resultType="String">
        SELECT av.vehicle_id FROM zw_m_assignment a
        INNER JOIN zw_m_assignment_vehicle av ON av.assignment_id = a.id AND av.flag = 1
        INNER JOIN
        (
        SELECT car.id id FROM zw_m_vehicle_info car WHERE car.flag=1
        UNION
        SELECT peo.id id FROM zw_m_people_info peo WHERE peo.flag=1
        UNION
        SELECT th.id id FROM zw_m_thing_info th WHERE th.flag=1
        ) t ON av.vehicle_id = t.id
        INNER JOIN zw_m_config c ON t.id = c.vehicle_id AND c.flag = 1
        INNER JOIN zw_m_device_info d ON d.id = c.device_id AND d.flag = 1
        WHERE a.`flag` = 1 AND a.types = 1
        AND a.id IN
        <foreach item="item" collection="assigns" separator="," open="(" close=")">
            #{item}
        </foreach>
        AND c.monitor_type = 0
        AND d.manufacturer_id IS NOT NULL AND d.manufacturer_id <![CDATA[<>]]> ""
        AND d.device_modelNumber IS NOT NULL AND d.device_modelNumber <![CDATA[<>]]> ""
    </select>

    <select id="getAssignmentNameByUserId" resultType="com.zw.talkback.domain.basicinfo.form.ClusterForm">
        SELECT DISTINCT a.id, a.name FROM zw_m_assignment a
        INNER JOIN zw_m_assignment_user au ON a.id = au.assignment_id AND au.flag = 1
        WHERE a.flag = 1 AND  a.types = 1 AND au.user_id = #{userId}
    </select>

    <select id="findMonitorIdsByAssignIdsAndGroupIds" parameterType="list" resultType="string">
        SELECT t.id
        FROM
        (
        SELECT car.id id, car.flag,car.group_id AS groupId FROM zw_m_vehicle_info car
        WHERE car.flag = 1
        UNION ALL
        SELECT peo.id id, peo.flag,peo.org_id AS groupId FROM zw_m_people_info peo
        WHERE peo.flag = 1
        UNION ALL
        SELECT thi.id id, thi.flag,thi.group_id as groupId FROM zw_m_thing_info thi WHERE thi.flag=1
        ) t
        INNER JOIN zw_m_assignment_vehicle av ON t.id = av.vehicle_id AND av.flag=1
        WHERE t.flag = 1
        AND av.assignment_id in
        <foreach item="item" collection="assignmentIds" separator=","
                 open="(" close=")">
            #{item}
        </foreach>
        AND t.groupId IN
        <foreach item="item" collection="groupIds" separator=","
                 open="(" close=")">
            #{item}
        </foreach>
    </select>

    <select id="getAssignmentIdByUserId" resultType="java.lang.String">
        SELECT
        DISTINCT a.id
        FROM
        zw_m_assignment a
        INNER JOIN zw_m_assignment_user au ON a.id = au.assignment_id AND au.flag = 1
        WHERE
        a.flag = 1 AND  a.types = 1
        AND au.user_id = #{userId}
    </select>
    <select id="findAssignUserIdsByGroupIds" resultType="java.lang.String">
        SELECT DISTINCT assu.user_id
        FROM zw_m_assignment_user assu
        LEFT JOIN zw_m_assignment ass ON assu.assignment_id = ass.id AND ass.flag = 1 AND ass.types
        WHERE assu.flag = 1
        AND ass.org_id IN
        <foreach item="item" collection="list" separator=","
                 open="(" close=")">
            #{item}
        </foreach>
    </select>

    <select id="findUserAssignmentFuzzy"
            resultType="com.zw.talkback.domain.basicinfo.Cluster">
        SELECT DISTINCT a.id, a.name, a.org_id groupId FROM zw_m_assignment a
        INNER JOIN zw_m_assignment_user au ON a.id = au.assignment_id AND au.flag = 1
        WHERE a.flag = 1 AND a.types = 1
        AND au.user_id = #{userId}
        <if test="groupList != null">
            AND a.org_id in
            <foreach item="item" collection="groupList" separator=","
                     open="(" close=")">
                #{item}
            </foreach>
        </if>
        AND a.name like CONCAT('%',#{query},'%')
        ORDER BY a.create_data_time desc, a.name
    </select>

    <select id="findVehicleByAssignmentFuzzy"
            parameterType="list"
            resultType="com.zw.platform.domain.basicinfo.VehicleInfo">
        SELECT distinct v.id,v.brand,'0' monitorType, av.assignment_id FROM zw_m_vehicle_info v
        INNER JOIN zw_m_assignment_vehicle av ON v.id = av.vehicle_id AND av.flag = 1
        WHERE v.flag = 1
        <if test="assignmentIds != null">
            AND av.assignment_id in
            <foreach item="item" collection="assignmentIds" separator=","
                     open="(" close=")">
                #{item}
            </foreach>
        </if>
        <if test="queryParam != null and queryParam != ''">
            AND v.brand LIKE CONCAT('%',#{queryParam},'%')
        </if>
        ORDER BY v.create_data_time desc
    </select>

    <!-- 根据群组ids模糊查询监控对象（已在config中绑定） -->
    <select id="findMonitorByAssignmentFuzzy"
            parameterType="list"
            resultType="com.zw.platform.domain.basicinfo.VehicleInfo">
        SELECT t.id,t.brand,t.monitorType,t.createDataTime,t.flag,av.assignment_id
        FROM
        (
        SELECT car.id id, car.brand brand, '0' monitorType,car.create_data_time
        createDataTime,car.flag,car.plate_color,car.vehicle_color FROM zw_m_vehicle_info car WHERE car.flag=1
        UNION ALL
        SELECT peo.id id, peo.people_number brand,'1' monitorType,peo.create_data_time createDataTime,peo.flag,0,0 FROM
        zw_m_people_info peo WHERE peo.flag=1
        UNION ALL
        SELECT th.id id, th.thing_number brand,'2' monitorType,th.create_data_time createDataTime,th.flag,0,0 FROM
        zw_m_thing_info th WHERE th.flag=1
        ) t
        INNER JOIN zw_m_assignment_vehicle av ON t.id = av.vehicle_id AND av.flag=1
        WHERE t.flag = 1
        <if test="assignmentIds != null">
            AND av.assignment_id in
            <foreach item="item" collection="assignmentIds" separator=","
                     open="(" close=")">
                #{item}
            </foreach>
        </if>
        <if test="queryParam != null and queryParam != ''">
            AND t.brand LIKE CONCAT('%',#{queryParam},'%')
        </if>
        ORDER BY t.createDataTime DESC
    </select>

    <select id="findLeaveJobPeople"
            parameterType="list"
            resultType="com.zw.platform.domain.basicinfo.VehicleInfo">
        SELECT t.id,t.people_number as brand,'1' as monitorType,t.create_data_time,t.flag,lja.assignment_id, ass.name
        groupName, 1 as isLeave
        FROM
        zw_m_leave_job_assignment lja
        inner join zw_m_people_info t on t.id = lja.people_id and t.flag = 1
        INNER JOIN zw_m_assignment ass ON ass.id = lja.assignment_id AND ass.flag = 1 AND ass.types = 1
        WHERE lja.flag = 1
        <if test="assignmentIds != null">
            AND lja.assignment_id in
            <foreach item="item" collection="assignmentIds" separator=","
                     open="(" close=")">
                #{item}
            </foreach>
        </if>
        <if test="assignmentIds == null">
            AND 1=0
        </if>
        ORDER BY t.create_data_time DESC
    </select>


    <select id="getAssignmentIds" resultType="java.lang.String">
        SELECT
        a.id
        FROM
        zw_m_assignment a
        INNER JOIN zw_m_assignment_user u ON a.id = u.assignment_id
        WHERE
        u.flag = 1
        AND a.flag = 1
        AND a.org_id = #{groupId}
        AND u.user_id = #{userId}
    </select>
    <select id="findUserOwnTaskAssignment" resultType="com.zw.talkback.domain.basicinfo.Cluster">
        SELECT DISTINCT a.id, a.name, a.org_id groupId, a.intercom_group_id intercomGroupId, a.group_call_number groupCallNumber, a.flag
        FROM zw_m_assignment a
        INNER JOIN zw_m_assignment_user au ON a.id = au.assignment_id AND au.flag = 1
        WHERE a.flag = 2 AND  a.types = 1
        AND au.user_id = #{userId}
        AND a.org_id = #{groupId}
        ORDER BY a.create_data_time desc, a.name
    </select>
    <select id="findUserOwnTemporaryAssignment" resultType="com.zw.talkback.domain.basicinfo.Cluster">
        SELECT DISTINCT a.id, a.name, a.org_id groupId, a.intercom_group_id intercomGroupId, a.group_call_number groupCallNumber, a.flag
        FROM zw_m_assignment a
        INNER JOIN zw_m_assignment_user au ON a.id = au.assignment_id AND au.flag = 1
        WHERE a.flag = 3 AND  a.types = 1
        AND au.user_id = #{userId}
        AND a.org_id = #{groupId}
        ORDER BY a.create_data_time desc, a.name
    </select>
    <select id="findInterlocutorByAssignmentIdsAndNameFuzzy"
            resultType="com.zw.talkback.domain.basicinfo.InterlocutorInfo">
        SELECT DISTINCT zmpi.id monitorId,zmpi.people_number monitorName,zmii.user_id
        interlocutorId,zmpi.create_data_time createDataTime,zmc.monitor_type as monitorType
        FROM (
        SELECT car.id id, car.brand people_number,create_data_time FROM zw_m_vehicle_info car WHERE car.flag=1
        UNION
        SELECT peo.id id, peo.people_number people_number,create_data_time FROM zw_m_people_info peo WHERE peo.flag=1
        UNION
        SELECT th.id id,th.thing_number people_number,create_data_time FROM zw_m_thing_info th WHERE th.flag = 1
        ) zmpi
        INNER JOIN zw_m_assignment_vehicle zmav ON zmpi.id = zmav.vehicle_id AND zmav.flag = 1
        INNER JOIN zw_m_assignment zma ON zmav.assignment_id = zma.id AND zma.flag != 0 AND zma.types = 1
        INNER JOIN zw_m_config zmc ON zmpi.id = zmc.vehicle_id AND zmc.flag = 1
        INNER JOIN zw_m_intercom_info zmii ON zmc.intercom_info_id = zmii.id AND zmii.flag = 1
        WHERE zmii.user_id IS NOT NULL
        AND zma.id IN
        <foreach item="item" collection="assignmentIds" separator=","
                 open="(" close=")">
            #{item}
        </foreach>
        <if test="name != null and name != ''">
            AND zmpi.people_number LIKE CONCAT('%',#{name},'%')
        </if>
        ORDER BY zmpi.create_data_time DESC
    </select>
    <select id="findInterlocutorTaskAssignmentInfo" resultType="com.zw.talkback.domain.basicinfo.ClusterInfo">
        SELECT DISTINCT zmav.vehicle_id monitorId, zmii.user_id interlocutorId,zma.id,zma.name,zmpi.people_number
        monitorName
        FROM zw_m_assignment_vehicle zmav
        INNER JOIN zw_m_assignment zma ON zmav.assignment_id = zma.id AND zma.flag = 2 AND zma.types = 1
        INNER JOIN (
        SELECT car.id id, car.brand people_number,create_data_time FROM zw_m_vehicle_info car WHERE car.flag=1
        UNION
        SELECT peo.id id, peo.people_number people_number,create_data_time FROM zw_m_people_info peo WHERE peo.flag=1
        UNION
        SELECT th.id id,th.thing_number people_number,create_data_time FROM zw_m_thing_info th WHERE th.flag = 1
        ) zmpi ON zmav.vehicle_id = zmpi.id
        INNER JOIN zw_m_config zmc ON zmpi.id = zmc.vehicle_id AND zmc.flag = 1
        INNER JOIN zw_m_intercom_info zmii ON zmc.intercom_info_id = zmii.id AND zmii.flag = 1
        WHERE zmav.flag = 1 AND zmii.user_id IS NOT NULL
        <if test="interlocutorIdList != null and interlocutorIdList.size() > 0">
            AND zmii.user_id IN
            <foreach item="item" collection="interlocutorIdList" separator=","
                     open="(" close=")">
                #{item}
            </foreach>
        </if>
    </select>
    <select id="findAssignmentAndMonitorNumById" resultType="com.zw.talkback.domain.basicinfo.Cluster">
        SELECT zma.id, zma.name, COUNT(zmav.vehicle_id) mNum FROM zw_m_assignment zma
        LEFT JOIN zw_m_assignment_vehicle zmav ON zmav.assignment_id = zma.id AND zmav.flag = 1
        LEFT JOIN (
                 SELECT car.id id, car.brand people_number,create_data_time FROM zw_m_vehicle_info car WHERE car.flag=1
                  UNION
                 SELECT peo.id id, peo.people_number people_number,create_data_time FROM zw_m_people_info peo WHERE peo.flag=1
                  UNION
                 SELECT th.id id,th.thing_number people_number,create_data_time FROM zw_m_thing_info th WHERE th.flag = 1
        ) zmpi ON zmpi.id = zmav.vehicle_id
        LEFT JOIN zw_m_config zmc ON zmpi.id = zmc.vehicle_id AND zmc.flag = 1
        WHERE zma.flag != 0 AND  zma.types = 1
        AND zma.id = #{id}
        GROUP BY zma.id
    </select>
    <insert id="addInterlocutorAssignment" parameterType="com.zw.talkback.domain.basicinfo.form.ClusterForm">
        INSERT INTO zw_m_assignment (id, name, type, contacts, telephone, description, flag,
        intercom_group_id, group_call_number, create_data_time, create_data_username , types, org_id)
        VALUES (#{id}, #{name}, #{type}, #{contacts}, #{telephone}, #{description}, #{flag},
        #{intercomGroupId}, #{groupCallNumber}, #{createDataTime}, #{createDataUsername}, #{types}, #{groupId})
    </insert>
    <insert id="addInterlocutorAssignmentMember" parameterType="com.zw.talkback.domain.basicinfo.InterlocutorInfo">
        insert into zw_m_assignment_vehicle (id, assignment_id, vehicle_id, monitor_type, knob_no, create_data_time,
        create_data_username)
        values
        <foreach collection="interlocutorInfoList" item="item" index="index"
                 separator=",">
            (#{item.id}, #{item.assignmentId}, #{item.monitorId}, #{item.monitorType},
            #{item.knobNo}, #{item.createDataTime}, #{item.createDataUsername})
        </foreach>
    </insert>
    <update id="unbindAssignmentAndMonitor">
        update zw_m_assignment_vehicle set flag = 0,update_data_time = now()
        where
        assignment_id = #{assignmentId}
        and flag != 0
    </update>


    <select id="getAssignmentNumberOfMonitor" resultType="java.lang.Integer">
        SELECT
        count(av.assignment_id)
        FROM
        zw_m_assignment_vehicle av
        INNER JOIN zw_m_assignment a ON a.id = av.assignment_id and a.flag = 1 AND a.types = 1
        WHERE
        av.flag = 1
        AND av.vehicle_id = #{id}
        group by av.vehicle_id
    </select>
    <select id="getAssignmentGroupIdByName" resultType="com.zw.talkback.domain.basicinfo.form.ClusterForm">
       select a.*, a.org_id groupId from zw_m_assignment a where a.name = #{name} and a.flag = 1
    </select>

    <update id="changeRecordingSwitch" parameterType="com.zw.talkback.domain.basicinfo.Cluster">
        update zw_m_assignment
        set
        sound_recording = #{soundRecording}
        where
        flag = 1 and types = 1
        and id = #{id}
    </update>

    <select id="findMonitorIdsByAssignmentId" resultType="java.lang.String">
        SELECT zmpi.id
         FROM  (
                SELECT car.id id, car.brand people_number,create_data_time FROM zw_m_vehicle_info car WHERE car.flag=1
                 UNION
                SELECT peo.id id, peo.people_number people_number,create_data_time FROM zw_m_people_info peo WHERE peo.flag=1
                 UNION
                SELECT th.id id,th.thing_number people_number,create_data_time FROM zw_m_thing_info th WHERE th.flag = 1
        ) zmpi
        INNER JOIN zw_m_assignment_vehicle zmav ON zmpi.id = zmav.vehicle_id AND zmav.flag = 1
        WHERE zmav.assignment_id = #{assignmentId}
    </select>
    <select id="findAssignmentByIntercomGroupId" resultType="com.zw.talkback.domain.basicinfo.Cluster">
        SELECT a.*, a.org_id groupId FROM zw_m_assignment a
        WHERE a.flag != 0 AND  a.types = 1
        AND a.intercom_group_id = #{intercomGroupId}
    </select>
    <select id="findTemporaryAssignmentByUserName"
            resultType="com.zw.talkback.domain.basicinfo.Cluster">
        SELECT a.* FROM zw_m_assignment a
        WHERE a.flag = 3  AND  a.types = 1
        AND a.create_data_username = #{userName}
        ORDER BY create_data_time DESC
    </select>
    <select id="findAssignmentByIntercomGroupIdBatch" resultType="com.zw.talkback.domain.basicinfo.Cluster">
        SELECT a.*, a.org_id groupId FROM zw_m_assignment a
        WHERE a.flag != 0 AND a.types = 1
        AND a.intercom_group_id IN
        <foreach item="item" collection="intercomGroupIdList" separator=","
                 open="(" close=")">
            #{item}
        </foreach>
    </select>
    <select id="findInTemporaryAssignmentInterlocutorInfo"
            resultType="com.zw.talkback.domain.basicinfo.TempAssignmentInterlocutor">
        select interlocutor_id interlocutorId, intercom_group_id intercomGroupId from zw_m_temp_assignment_interlocutor
        where interlocutor_id in
        <foreach item="item" collection="interlocutorIdList" separator=","
                 open="(" close=")">
            #{item}
        </foreach>
    </select>
    <select id="findInTemporaryAssignmentInterlocutorId" resultType="java.lang.Long">
        select interlocutor_id from zw_m_temp_assignment_interlocutor where interlocutor_id in
        <foreach item="item" collection="interlocutorIdList" separator=","
                 open="(" close=")">
            #{item}
        </foreach>
    </select>
    <insert id="addTemporaryAssignmentInterlocutorId">
        insert into zw_m_temp_assignment_interlocutor (id, assignment_id, intercom_group_id, interlocutor_id)
        values
        <foreach collection="tempAssignmentInterlocutorList" item="item" index="index"
                 separator=",">
            (#{item.id}, #{assignmentId}, #{intercomGroupId}, #{item.interlocutorId})
        </foreach>
    </insert>

    <delete id="delTemporaryAssignmentInterlocutorByIntercomGroupId">
        delete
        from zw_m_temp_assignment_interlocutor
        where intercom_group_id = #{intercomGroupId}
        <if test="interlocutorId != null and interlocutorId != ''">
            and interlocutor_id = #{interlocutorId}
        </if>
    </delete>
    <delete id="delTemporaryAssignmentInterlocutorByAssignmentIdList">
        delete
        from zw_m_temp_assignment_interlocutor
        where assignment_id in
        <foreach item="item" collection="assignmentIdList" separator=","
                 open="(" close=")">
            #{item}
        </foreach>
    </delete>

    <delete id="deleteKnobsByMonitorId">
        update zw_m_assignment_vehicle
        set knob_no = null
        where vehicle_id in
        <foreach item="item" collection="vehicleIds" separator=","
                 open="(" close=")">
            #{item}
        </foreach>
    </delete>

    <update id="updateAssignKnobs" parameterType="com.zw.talkback.domain.basicinfo.form.AssignmentVehicleForm">
        update zw_m_assignment_vehicle
        set
        knob_no = #{knobNo}
        where
        flag = 1
        and assignment_id = #{assignmentId}
        and vehicle_id = #{vehicleId}
    </update>

    <update id="updateAssignKnob" parameterType="com.zw.talkback.domain.basicinfo.form.AssignmentVehicleForm">
        update zw_m_assignment_vehicle
        set
        knob_no = #{knobNo},
        monitor_type = #{monitorType}
        where
        flag = 1
        and assignment_id = #{assignmentId}
        and vehicle_id = #{vehicleId}
    </update>

    <select id="findAll" resultType="com.zw.talkback.domain.basicinfo.form.ClusterForm">
        SELECT id, name, type, description, org_id as groupId FROM  zw_m_assignment where flag = 1;
    </select>

    <select id="findAssignmentMap" resultType="java.util.Map">
        SELECT
        assig.id as assignmentPlatformId ,
        assig.intercom_group_id as assignmentIntercomId,
        assig.flag as type
        from
        zw_m_assignment assig
        LEFT JOIN zw_m_assignment_user u on assig.id=u.assignment_id
        WHERE assig.flag!=0
        and assig.types = 1
        and u.flag=1
        and u.user_id=#{userId}
        and assig.org_id=#{groupId}
    </select>

    <select id="findOtherTemporaryAssignmentUserIds" resultType="java.lang.Long">
        SELECT
        interlocutor_id
        FROM
        zw_m_temp_assignment_interlocutor
        WHERE
        <if test="userIdSet!=null and userIdSet.size!=0 ">
            interlocutor_id IN
            <foreach item="item" collection="userIdSet" separator="," open="(" close=")">
                #{item}
            </foreach>
            <if test="temporaryAssignment!=null and temporaryAssignment.size!=0 ">
                AND assignment_id NOT IN
                <foreach item="item" collection="temporaryAssignment" separator="," open="(" close=")">
                    #{item}
                </foreach>
            </if>
        </if>
    </select>

    <select id="findAssignmentInfoMap" resultType="java.util.Map">
        SELECT
        assign.id as id,
        assign.name as name,
        assign.org_id as groupId
        FROM
        zw_m_assignment assign
        WHERE assign.flag != 0
        and assign.types = 1
        AND assign.intercom_group_id =#{defaultGroupId}
        limit 1
    </select>


    <select id="findAssignmentName" resultType="java.lang.String">
        select name from zw_m_assignment where id=#{id}
    </select>

    <select id="findAssignmentByMonitorId" resultType="com.zw.talkback.domain.basicinfo.Cluster">
        select vass.assignment_id as id, ass.name from zw_m_assignment_vehicle vass
          left join zw_m_assignment ass on vass.assignment_id = ass.id and ass.flag = 1
         where vass.flag = 1
          and ass.types = 1
           and vass.vehicle_id = #{monitorId}
    </select>

    <select id="getUserAssignIds" resultType="java.lang.String">
        select DISTINCT ua.assignment_id
        from zw_m_assignment_user ua
        left join zw_m_assignment assign on ua.assignment_id = assign.id and assign.flag = 1
        where ua.flag = 1
          and assign.types = 1
          and ua.user_id = #{userId}
    </select>

    <select id="getTalkbackAssignsByMonitorId" resultType="com.zw.talkback.domain.basicinfo.Cluster">
        select a.name,av.*,a.intercom_group_id
        from zw_m_assignment_vehicle av
        inner join zw_m_assignment a on a.id = av.assignment_id and a.flag = 1
        where
        av.flag = 1
        and a.types = 1
        <![CDATA[and av.knob_no <> '']]>
        and av.vehicle_id = #{monitorId}
    </select>

    <select id="getAssignIdsForMonitor" resultType="java.lang.String">
        select assignment_id from zw_m_assignment_vehicle where flag = 1 and vehicle_id = #{monitorId}
    </select>

    <select id="getAssignVehicleList" resultType="com.zw.talkback.domain.basicinfo.form.AssignmentVehicleForm">
        select id, assignment_id, vehicle_id, flag, create_data_time,
        create_data_username,monitor_type,knob_no
        from zw_m_assignment_vehicle
        where flag = 1
        and vehicle_id in
        <foreach item="item" collection="monitorIds" separator=","
                 open="(" close=")">
            #{item}
        </foreach>
    </select>

    <select id="countMonitorsByOrgIds" resultType="com.zw.talkback.domain.basicinfo.Cluster">
        SELECT a.id, a.name, COUNT(av.vehicle_id) mNum FROM zw_m_assignment a
        INNER JOIN zw_m_assignment_vehicle av ON av.`assignment_id` = a.`id` AND av.`flag` = 1
        INNER JOIN zw_m_config c ON av.vehicle_id = c.vehicle_id AND c.flag = 1
        INNER JOIN zw_m_intercom_info ini ON ini.id = c.intercom_info_id AND ini.flag = 1
        WHERE a.flag = 1 AND a.types = 1 AND a.org_id IN
        <foreach collection="orgIds" separator="," open="(" close=")" item="orgId">
            #{orgId}
        </foreach>
    </select>
</mapper>