<?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.platform.basic.repository.GroupDao">

    <sql id="allField">
        id, name, type,description,flag, create_data_time, create_data_username,update_data_time,
        update_data_username,contacts,telephone, sound_recording,intercom_group_id,group_call_number,types,org_id
    </sql>

    <insert id="add" parameterType="com.zw.platform.basic.domain.GroupDO">
        insert into zw_m_assignment (id, name, type,contacts,telephone, description, flag, create_data_time, create_data_username, org_id)
        values (#{id}, #{name}, #{type}, #{contacts},#{telephone},#{description}, 1, now(), #{createDataUsername},#{orgId})
    </insert>

    <insert id="batchAdd">
        insert into zw_m_assignment (id, name, type,contacts,telephone, description, flag, create_data_time,
        create_data_username, 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.orgId})
        </foreach>
    </insert>

    <update id="update" parameterType="com.zw.platform.basic.domain.GroupDO">
        update zw_m_assignment
        <set>
            <if test="name != null and name !=''">name = #{name},</if>
            type = #{type},
            description = #{description},
            contacts = #{contacts},
            telephone = #{telephone}
        </set>
        where id = #{id}
    </update>

    <delete id="delBatch">
        update zw_m_assignment set flag = 0 where
        id in
        <foreach collection="ids" item="id" open="(" close=")" separator=",">
            #{id}
        </foreach>
        and flag = 1
    </delete>

    <select id="getMonitorCountById" resultType="com.zw.platform.basic.dto.GroupDTO">
        SELECT a.id, a.name, a.org_id, COUNT(av.vehicle_id) monitorCount FROM zw_m_assignment a
        LEFT JOIN zw_m_assignment_vehicle av ON av.`assignment_id` = a.`id` AND av.`flag` = 1
        WHERE a.flag = 1  AND a.id = #{id} group by a.id
    </select>

    <select id="getMonitorCountByOrgId" resultType="com.zw.platform.basic.dto.GroupDTO">
        SELECT
        a.id,
        a.`name`,
        a.org_id,
        a.types,
        COUNT(av.vehicle_id) monitorCount
        FROM
        zw_m_assignment a
        INNER JOIN zw_m_assignment_user au ON a.id = au.assignment_id
        AND au.flag = 1
        LEFT JOIN zw_m_assignment_vehicle av ON av.`assignment_id` = a.`id`
        AND av.`flag` = 1
        WHERE a.flag = 1
        AND a.org_id in
        <if test="orgIds!=null and orgIds.size()>0">
            <foreach collection="orgIds" separator="," open="(" close=")" item="orgId">
                #{orgId}
            </foreach>
        </if>
        <if test="userId != null and userId != ''">
            AND au.user_id = #{userId}
        </if>

        GROUP BY a.id
    </select>

    <select id="getUserGroupList" resultType="com.zw.platform.basic.dto.GroupDTO">
        SELECT
        DISTINCT a.id,
        a.`name`,
        a.org_id,
        a.types,
        a.type,
        a.contacts,
        a.telephone,
        a.sound_recording,
        a.intercom_group_id,
        a.group_call_number
        FROM zw_m_assignment a
        <if test="userId !=null and userId !=''">
            INNER JOIN zw_m_assignment_user au ON a.id = au.assignment_id
            AND au.flag = 1
            and au.user_id = #{userId}
        </if>
        where a.flag = 1
        <if test="keyword !=null and  keyword != ''">
            and a.`name` LIKE BINARY CONCAT('%',#{keyword},'%')
        </if>
        <if test="orgIds !=null and orgIds.size()>0">
            and a.org_id in
            <foreach collection="orgIds" separator="," open="(" close=")" item="orgId">
                #{orgId}
            </foreach>
        </if>
        ORDER BY a.create_data_time DESC, a.id
    </select>

    <delete id="delete">
        update zw_m_assignment set flag = 0 where id = #{id} and flag = 1
    </delete>

    <select id="getById" resultType="com.zw.platform.basic.domain.GroupDO">
        select
        <include refid="allField"/>
        from zw_m_assignment where flag = 1 and id = #{id}
    </select>

    <select id="getUserVehicleGroups" resultType="string" parameterType="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>
         where a.flag = 1
    </select>

    <select id="getListByKeyword" resultType="com.zw.platform.basic.domain.GroupDO"
            parameterType="com.zw.platform.basic.dto.query.GroupPageQuery">
        SELECT
        <include refid="allField"/>
        FROM zw_m_assignment
        WHERE flag = 1
        <if test="simpleQueryParam != null and simpleQueryParam!=''">
            AND name LIKE
            CONCAT('%',#{simpleQueryParam},'%')
        </if>
        <if test="orgIds != null and orgIds.size() > 0">
            AND org_id in
            <foreach item="item" collection="orgIds" separator=","
                     open="(" close=")">
                #{item}
            </foreach>
        </if>
        <if test="orgId != null and orgId != ''">
            AND org_id = #{orgId}
        </if>
        ORDER BY create_data_time DESC,name
    </select>

    <select id="getListByKeywordAndUerId" resultType="com.zw.platform.basic.domain.GroupDO">
        SELECT a.id,a.name,a.org_id,a.telephone, a.description,a.contacts 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
        <if test="query.simpleQueryParam != null and query.simpleQueryParam!=''">
            AND a.name LIKE BINARY
            CONCAT('%',#{query.simpleQueryParam},'%')
        </if>
        <if test="query.orgIds != null and query.orgIds.size() > 0">
            AND org_id in
            <foreach item="item" collection="query.orgIds" separator="," open="(" close=")">
                #{item}
            </foreach>
        </if>
        <if test="query.orgId != null and query.orgId != ''">
            AND org_id = #{query.orgId}
        </if>
        ORDER BY a.create_data_time DESC,a.name
    </select>

    <select id="getGroupListByGroupIds" resultType="com.zw.platform.basic.domain.GroupDO">
        select
        <include refid="allField"/>
        from zw_m_assignment
        WHERE flag = 1
        <if test="orgIds != null and orgIds.size() > 0">
            AND org_id IN
            <foreach collection="orgIds" item="item" open="(" close=")" separator=",">
                #{item}
            </foreach>
        </if>
    </select>

    <select id="getByIds" resultType="com.zw.platform.basic.domain.GroupDO">
        select
        <include refid="allField"/>
        from zw_m_assignment where flag = 1 and id in
        <foreach item="item" collection="ids" separator=","
                 open="(" close=")">
            #{item}
        </foreach>
        ORDER BY create_data_time desc, name
    </select>

    <select id="getGroupsByOrgId" resultType="com.zw.platform.basic.dto.GroupDTO">
        select
        <include refid="allField"/>
        from zw_m_assignment where org_id = #{orgId} and flag = 1
    </select>

    <select id="getGroupIdsByOrgId" resultType="string">
        select id from zw_m_assignment where org_id = #{orgId} and flag = 1
    </select>

    <select id="getGroupsByOrgIds" resultType="com.zw.platform.basic.dto.GroupDTO">
        select
        <include refid="allField"/>
        from zw_m_assignment where org_id in
        <foreach collection="orgIds" item="id" open="(" close=")" separator=",">
            #{id}
        </foreach>
        and flag = 1
    </select>

    <select id="checkNameExist" resultType="int">
        select count(*) from zw_m_assignment where flag =1 and name =#{name}
        and org_id = #{orgId}
        <if test="groupId != null and groupId != ''">
            and id != #{groupId}
        </if>
    </select>
    <select id="getNamesByIds" resultType="java.lang.String">
        select name from zw_m_assignment where flag = 1
        and id in
        <foreach collection="ids" open="(" close=")" separator="," item="id">
            #{id}
        </foreach>
    </select>

    <select id="find809ForwardVehicle" resultType="com.zw.platform.basic.dto.GroupDTO">
        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.id IN
        <foreach item="item" collection="groupIds" separator="," open="(" close=")">
            #{item.id}
        </foreach>
        AND c.monitor_type = 0
    </select>

    <select id="getListByFuzzyName" resultType="com.zw.platform.basic.domain.GroupDO">
        select
        <include refid="allField"/>
        from zw_m_assignment
        where flag = 1
        and name LIKE BINARY
        CONCAT('%', #{fuzzyName}, '%')
    </select>

    <select id="getGroupPhoneByIds" parameterType="string" resultType="string">
        select GROUP_CONCAT(DISTINCT telephone) from zw_m_assignment where id in
        <foreach item="item" collection="groupIds.split(',')" separator=","
                 open="(" close=")">
            #{item}
        </foreach>
        and flag = 1
    </select>

    <select id="getGroupVehicleCount" resultType="java.lang.Integer">
        SELECT COUNT(DISTINCT av.vehicle_id) AS vehicleCount
        FROM
        zw_m_assignment_vehicle av
        LEFT JOIN zw_m_assignment a ON a.id = av.assignment_id AND a.flag = 1
        LEFT JOIN zw_m_vehicle_info vi ON vi.id = av.vehicle_id AND vi.flag = 1
        WHERE av.flag = 1
        AND av.vehicle_id IS NOT NULL
        AND vi.group_id IN
        <foreach item="item" collection="orgIdList" separator=","
                 open="(" close=")">
            #{item}
        </foreach>
        AND av.assignment_id IN
        <foreach item="item" collection="assignmentIdList" separator=","
                 open="(" close=")">
            #{item}
        </foreach>
        AND a.org_id = #{orgId}
    </select>

    <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,t.aliases,
        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.aliases aliases, 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.name aliases, 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.name aliases, 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
        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="deviceTypes != null">
            AND de.device_type in
            <foreach item="item" collection="deviceTypes" separator=","
                     open="(" close=")">
                #{item}
            </foreach>
        </if>
        <if test="assignmentIds == null">
            AND 1=0
        </if>
        ORDER BY t.createDataTime DESC
    </select>

    <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,t.aliases,
        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.aliases aliases,  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.name aliases, 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.name aliases, 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
        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 == 'monitorId' and queryParam != null and queryParam != ''">
            AND t.id = #{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>

    <select id="findAssignment" parameterType="com.zw.platform.domain.basicinfo.query.AssignmentQuery"
            resultType="com.zw.platform.domain.basicinfo.Assignment">
        SELECT DISTINCT a.*,a.org_id groupId FROM zw_m_assignment a
        WHERE a.flag = 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="listAssignment" resultType="com.zw.platform.domain.basicinfo.Assignment">
        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
        <if test="query.simpleQueryParam != null and query.simpleQueryParam!=''">
            AND a.name LIKE BINARY
            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="findGroupNameByBrand" parameterType="list" resultType="com.zw.platform.domain.basicinfo.Assignment">
        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.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.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.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="findUserAssignment"
            resultType="com.zw.platform.domain.basicinfo.Assignment">
        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 au.user_id = #{userId}
        <if test="orgIds != null">
            AND a.org_id in
            <foreach item="item" collection="orgIds" separator=","
                     open="(" close=")">
                #{item}
            </foreach>
        </if>
        ORDER BY a.create_data_time desc, a.name
    </select>

    <select id="findAssignmentNum" resultType="com.zw.platform.domain.basicinfo.Assignment">
        SELECT a.id, (
        SELECT count(1) FROM zw_m_assignment_vehicle av
        INNER JOIN zw_m_config c ON av.vehicle_id = c.vehicle_id AND c.flag = 1
        <if test="deviceTypeSet != null and deviceTypeSet.size() >0">
            INNER JOIN zw_m_device_info d ON d.id = c.device_id AND d.flag = 1
        </if>
        WHERE av.`assignment_id` = a.`id` AND av.`flag` = 1
        <if test="monitorType != null and monitorType != ''">
            AND c.monitor_type = #{monitorType}
        </if>
        <if test="deviceTypeSet != null and deviceTypeSet.size() >0">
            AND d.device_type IN
            <foreach collection="deviceTypeSet" item="deviceType" open="(" separator="," close=")" >
                #{deviceType}
            </foreach>
        </if>
        ) mNum
        FROM zw_m_assignment a
        WHERE a.`flag` = 1
        <if test="assignList != null and assignList.size() > 0">
            AND a.id IN
            <foreach item="item" collection="assignList" separator="," open="(" close=")">
                #{item.id}
            </foreach>
        </if>
    </select>

    <select id="findUserAssignmentFilterName" resultType="com.zw.platform.domain.basicinfo.Assignment">
        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 au.user_id = #{userId}
        <if test="groupList != null">
            AND a.org_id in
            <foreach item="item" collection="groupList" separator=","
                     open="(" close=")">
                #{item}
            </foreach>
        </if>
        <if test="name != null and name != ''">
            AND a.name like CONCAT('%',#{name},'%')
        </if>
        ORDER BY a.create_data_time desc, a.name
    </select>

    <select id="findAssignmentById" parameterType="string" resultType="com.zw.platform.domain.basicinfo.Assignment">
        SELECT a.*,a.org_id groupId FROM zw_m_assignment a
        WHERE a.flag = 1
        <if test="id != null and id != ''">
            AND a.id = #{id}
        </if>
        ORDER BY create_data_time DESC
    </select>

    <select id="findAssignmentByIdNum" parameterType="string" resultType="com.zw.platform.domain.basicinfo.Assignment">
        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
        WHERE a.flag = 1
        <if test="id != null and id != ''">
            AND a.id = #{id}
        </if>
    </select>

    <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>

    <select id="findMonitorByAssignmentId" parameterType="String" resultType="com.zw.platform.domain.basicinfo.VehicleInfo">
        SELECT t.id, t.brand, c.monitor_type, av.assignment_id FROM zw_m_assignment_vehicle av
        INNER JOIN (
        SELECT car.id id, car.brand brand, car.create_data_time createDataTime FROM zw_m_vehicle_info car
        WHERE car.flag=1 AND car.id IN (SELECT av.vehicle_id FROM zw_m_assignment_vehicle av WHERE av.flag = 1 AND av.assignment_id = #{assignmentId})
        UNION ALL
        SELECT peo.id id, peo.people_number brand,peo.create_data_time createDataTime FROM zw_m_people_info peo
        WHERE peo.flag=1 AND peo.id IN (SELECT av.vehicle_id FROM zw_m_assignment_vehicle av WHERE av.flag = 1 AND av.assignment_id = #{assignmentId})
        UNION ALL
        SELECT th.id id, th.thing_number brand,th.create_data_time createDataTime FROM zw_m_thing_info th
        WHERE th.flag=1 AND th.id IN (SELECT av.vehicle_id FROM zw_m_assignment_vehicle av WHERE av.flag = 1 AND av.assignment_id = #{assignmentId})
        ) t ON t.id = av.vehicle_id
        INNER JOIN zw_m_config c ON av.vehicle_id = c.vehicle_id and c.flag = 1
        WHERE av.flag = 1
        <if test="assignmentId != null and assignmentId != ''">
            AND av.assignment_id = #{assignmentId}
        </if>
        ORDER BY t.createDataTime DESC
    </select>

    <update id="deleteAssignmentVehicleByVidAid">
        update zw_m_assignment_vehicle set flag = 0 where flag = 1 and assignment_id = #{assignmentId}
        and vehicle_id in
        <foreach item="item" collection="vehicleList" separator=","
                 open="(" close=")">
            #{item}
        </foreach>
    </update>

    <select id="checkExistsByNameAndOrgId" resultType="java.lang.Boolean">
        SELECT EXISTS(SELECT * FROM zw_m_assignment WHERE flag = 1 AND name = BINARY #{name} AND org_id = #{groupId})
    </select>

    <select id="findOneOrgAssiForNameRep" resultType="com.zw.platform.domain.basicinfo.Assignment">
        SELECT a.*
        FROM zw_m_assignment a
        WHERE a.flag = 1
          AND a.name = #{name}
          AND a.org_id = #{groupId}
          AND a.id <![CDATA[ <> ]]> #{id}
    </select>

    <select id="findAssignmentByGroupId" parameterType="String"
            resultType="com.zw.platform.domain.basicinfo.Assignment">
        SELECT a.* FROM zw_m_assignment a
        WHERE a.flag = 1
        <if test="groupId != null and groupId != ''">
            AND a.org_id = #{groupId}
        </if>
        ORDER BY create_data_time DESC
    </select>

    <select id="findAssignByGroupIdExpectVehicle" parameterType="String"
            resultType="com.zw.platform.domain.basicinfo.Assignment">
        SELECT a.* FROM zw_m_assignment a
        WHERE a.flag = 1
        <if test="groupId != null and groupId != ''">
            AND a.org_id = #{groupId}
        </if>
        AND a.id != #{assignmentId}
        ORDER BY create_data_time DESC
    </select>

    <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>

    <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="getAssignsByMonitorId" resultType="com.zw.platform.domain.basicinfo.Assignment">
        select a.name,av.*
        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
        av.vehicle_id in
        <foreach item="item" collection="vehicleIds" separator=","
                 open="(" close=")">
            #{item}
        </foreach>
    </select>

    <select id="findUserAssignmentFuzzy" resultType="com.zw.platform.domain.basicinfo.Assignment">
        SELECT DISTINCT a.id, a.name, a.org_id group_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 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>

    <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>

    <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="deviceTypes != null and deviceTypes.size() > 0">
            AND d.device_type IN
            <foreach collection="deviceTypes" item="deviceType" open="(" separator="," close=")">
                #{deviceType}
            </foreach>
        </if>
        <if test="queryParam != null and queryParam != ''">
            AND v.brand LIKE CONCAT('%',#{queryParam},'%')
        </if>
        ORDER BY v.create_data_time desc
    </select>

    <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,t.aliases FROM zw_m_assignment_vehicle av
        INNER JOIN
        (
        SELECT car.id id, car.brand brand, '0' monitorType, car.aliases aliases FROM zw_m_vehicle_info
        car WHERE car.flag=1
        UNION ALL
        SELECT peo.id id, peo.people_number brand,'1' monitorType, peo.name aliases FROM
        zw_m_people_info peo WHERE peo.flag=1
        UNION ALL
        SELECT th.id id, th.thing_number brand,'2' monitorType, th.name aliases 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
        WHERE av.flag = 1
        <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>
        ORDER BY av.create_data_time desc
    </select>

    <select id="countMonitorByAssignmentIdList" resultType="int">
        SELECT count(1) FROM zw_m_assignment_vehicle av
        INNER JOIN zw_m_config con ON con.vehicle_id=av.vehicle_id AND con.flag = 1
        WHERE av.flag = 1
        <if test="assignmentIds != null">
            AND av.assignment_id IN
            <foreach item="item" collection="assignmentIds" separator="," open="(" close=")">
                #{item}
            </foreach>
        </if>
    </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>

    <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>

    <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="findVehicleAndAssignNameInfos" resultType="com.zw.platform.domain.basicinfo.driverDiscernManage.VehicleAssignmentInfo">
        SELECT av.vehicle_id, GROUP_CONCAT(DISTINCT a.name SEPARATOR ',') AS assignmentName
        FROM zw_m_assignment a
        INNER JOIN zw_m_assignment_vehicle av ON av.assignment_id = a.id AND av.flag = 1
        WHERE a.flag = 1
        AND av.vehicle_id IN
        <foreach item="monitorId" collection="monitorIdList" separator=","
                 open="(" close=")">
            #{monitorId}
        </foreach>
        GROUP BY av.vehicle_id
    </select>

    <select id="findAssignmentIdByFuzzyAssignmentName" resultType="java.lang.String">
        select id
        from zw_m_assignment
        where flag = 1
          and name like CONCAT('%', #{fuzzyAssignmentName}, '%')
    </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>

</mapper>