<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="com.boco.nbd.wios.flow.mapper.def.NodeMapper">
    <!--获取节点配置的用户组 -->
    <select id="getNodeGroupsInfo" parameterType="Long"
            resultType="com.boco.nbd.wios.flow.entity.bo.NodeGroupBO">
        SELECT
        a.flow_id,
        a.flow_code,
        b.node_id,
        b.node_code,
        b.node_name,
        d.group_id,
        d.group_name
        FROM
        tv3_lug_groups d
        left join tv3_lug_node_group c on c.group_id = d.group_id
        left join tv3_lug_nodes b on b.node_id = c.node_id
        <if test="nodeId !=null">
            AND b.node_id = #{nodeId}
        </if>
        left join tv3_lug_flows a on a.flow_id = b.flow_id
        WHERE 1 = 1
        <if test="nodeId !=null">
            AND b.node_id = #{nodeId}
        </if>
        ORDER BY b.node_id
    </select>

    <!-- 解除节点和组的关系 -->
    <delete id="deleteGroupNode">
        delete
        from tv3_lug_node_group
        where node_id = #{nodeId}
    </delete>

    <!-- 绑定节点和组 -->
    <select id="bindGroupNode" resultType="Integer">
        insert into tv3_lug_node_group
            (node_id, group_id)
        values (#{nodeId}, #{groupId})
    </select>

    <select id="selectByFlowIdAndNodeCode" resultType="com.boco.nbd.wios.flow.entity.po.FlowNodePO">
        select a.flow_id,
        a.category_name,
        a.flow_code,
        a.flow_name,
        b.node_id,
        b.node_code,
        b.node_name
        from tv3_lug_flows a,
        tv3_lug_nodes b
        where a.flow_id = b.flow_id
        <if test="flowCode !=null">
            AND b.flow_code = #{flowCode}
        </if>
        <if test="nodeCode !=null">
            and node_code = #{nodeCode}
        </if>
    </select>

    <!-- 据组ID删除成员 -->
    <delete id="deleteGroupUser">
        delete
        from tv3_lug_group_user
        where group_id = #{groupId}
    </delete>

    <insert id="bindGroupUser">
        insert into tv3_lug_group_user (group_id, user_id)
        values (#{groupId}, #{userId})
    </insert>

    <select id="getRoles">
        select a.id role_id, a.name role_name
        from wb_role a
        where a.status = 1
        order by a.id
    </select>

    <!--主机厂加载CAMS用户
            select b.type vendor_type, a.id user_id,b.id vendor_id,b.name vendor_name from wb_account a
        inner join t_oem b on (a.parent_id=b.wb_account_id or a.id=b.wb_account_id)
        inner join t_oem_contract c on b.id = c.oem_id and c.status = 2
        union all
    -->
    <select id="loadUsers" resultType="com.boco.nbd.wios.flow.entity.po.UserPO">
        select a.*,b.name user_name,b.phone, d.id role_id, d.name role_name from
        (
        select 0 vendor_type,a.id user_id,-1 vendor_id,'CAMS' vendor_name from wb_account a where a.parent_id is null
        union all
        select 0 vendor_type,a.id user_id,-1 vendor_id,'CAMS' vendor_name from wb_account a
        inner join t_cams_account b on a.id=b.account_id
        union all
        select 3 vendor_type,a.id user_id,c.id vendor_id,c.name vendor_id
        from wb_account a
        inner join t_supplier c on (c.account_id=a.id or c.account_id=a.parent_id)) a
        inner join wb_account b on a.user_id=b.id
        inner join wb_account_role c on c.account_id=b.id
        inner join wb_role d on c.role_id=d.id
        where b.status = 1
        <if test="vendorId != null and vendorId!=0">
            and (a.vendor_id=#{vendorId} or (a.vendor_id=-1 and exists(select 1 from t_oem where id=#{vendorId})))
        </if>
        order by a.vendor_type
    </select>

    <!--主机厂加载CAMS用户
            union all
        select b.type vendor_type,a.id user_id,b.id vendor_id,b.name vendor_name from wb_account a
        inner join t_oem b on (a.parent_id=b.wb_account_id or a.id=b.wb_account_id)
        inner join t_oem_contract c on b.id = c.oem_id and c.status = 2
    -->
    <select id="getUserByGroup" parameterType="java.lang.Long" resultType="com.boco.nbd.wios.flow.entity.po.UserPO">
        select a.*,b.name user_name,b.phone, d.id role_id, d.name role_name,e.group_id from
        (
        select 0 vendor_type,a.id user_id,-1 vendor_id,'CAMS' vendor_name from wb_account a where a.parent_id is null
        union all
        select 0 vendor_type,a.id user_id,-1 vendor_id,'CAMS' vendor_name from wb_account a
        inner join t_cams_account b on a.id=b.account_id
        union all
        select 3 vendor_type,a.id user_id,c.id vendor_id,c.name vendor_id
        from wb_account a
        inner join t_supplier c on (c.account_id=a.id or c.account_id=a.parent_id)) a
        inner join wb_account b on a.user_id=b.id
        inner join wb_account_role c on c.account_id=b.id
        inner join wb_role d on c.role_id=d.id
        inner join tv3_lug_groups f on (f.vendor_id=a.vendor_id or (a.vendor_id =-1 and exists(select 1 from t_oem where
        id=f.vendor_id)))
        left join tv3_lug_group_user e on b.id = e.user_id and f.group_id=e.group_id
        where b.status = 1
        <if test="groupId != null">
            and f.group_id = #{groupId}
        </if>
        order by a.vendor_type
    </select>

    <select id="getSuperUserByGroup" parameterType="java.lang.Long"
            resultType="com.boco.nbd.wios.flow.entity.po.BaseUserPO">
        select c.id, c.phone
        from wb_account c
                 inner join tv3_lug_group_user d on c.id = d.user_id and d.group_id = #{groupId}
        where c.status = 1
    </select>

    <select id="getSelectVendorInfo" resultType="com.boco.nbd.wios.flow.entity.po.VendorPO">
        select distinct a.id vendor_id, a.name vendor_name
        from t_oem a
                 inner join t_oem_contract b on a.id = b.oem_id and b.status = 2
        where type = 1
          and a.status = 1
        union all
        select id vendor_id, name vendor_name
        from t_supplier
    </select>

    <select id="getFlowNodeUserInfo" parameterType="com.boco.nbd.wios.flow.entity.qo.FlowNodeUserQo"
            resultType="com.boco.nbd.wios.flow.entity.po.FlowNodeUserPO">
        select a.flow_code, b.node_code, d.group_name, d.vendor_name, e.user_id, f.name user_name,f.phone
        from tv3_lug_flows a
        inner join tv3_lug_nodes b on a.flow_id = b.flow_id
        inner join tv3_lug_node_group c on b.node_id = c.node_id
        inner join tv3_lug_groups d on c.group_id = d.group_id
        inner join tv3_lug_group_user e on d.group_id = e.group_id
        inner join wb_account f on e.user_id = f.id
        where 1=1
        and a.flow_code=#{flowCode}
        <if test="nodeCode != null">
            and b.node_code=#{nodeCode}
        </if>
        <if test="vendorId != null">
            and d.vendor_id=#{vendorId}
        </if>
        <if test="userName != null and userName != ''">
            <bind name="userNameLike" value="'%' + userName + '%'"/>
            and f.name like #{userNameLike}
        </if>
    </select>

    <!-- 据组ID删除成员 -->
    <delete id="deleteConnectConfig">
        delete
        from t_connect_order_config
        where group_id = #{groupId}
          and user_id = #{userId}
    </delete>

    <insert id="bindConnectConfig">
        insert into t_connect_order_config (group_id, user_id, end_number)
        values (#{groupId}, #{userId}, #{endNumber})
    </insert>

    <select id="getConnectConfig" resultType="com.boco.nbd.wios.flow.entity.bo.ConnectConfigBO">
        select d.vendor_id,
        d.vendor_name,
        d.group_id,
        d.group_name,
        e.user_id,
        f.name user_name,
        g.end_number
        from tv3_lug_flows a
        inner join tv3_lug_nodes b on a.flow_id = b.flow_id
        inner join tv3_lug_node_group c on b.node_id = c.node_id
        inner join tv3_lug_groups d on c.group_id = d.group_id
        inner join tv3_lug_group_user e on d.group_id = e.group_id
        inner join wb_account f on e.user_id = f.id
        left join t_connect_order_config g on g.group_id = e.group_id and g.user_id = e.user_id
        where a.flow_code = #{flowCode}
        and b.node_code = #{nodeCode}
        <if test="vendorId != null">
            and d.vendor_id = #{vendorId}
        </if>
    </select>

</mapper>