<?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="material_scene">
    <select id="getTags">
        select * from material_tag where status = #{status}
        <if test="sceneId">
            and scene_id = #{sceneId}
        </if>
        <if test="checkCategory">
            <choose>
                <when test="isCategory">
                    and parent_id is null
                </when>
                <otherwise>
                    and parent_id is not null
                </otherwise>
            </choose>
        </if>
        <if test="tagIds">
            and id in
            <foreach collection="tagIds" item="item" open="( " separator="," close=" )" index="index">
                #{item}
            </foreach>
        </if>
    </select>

    <select id="getTagRelationsByMaterialId">
        select
            material_tag_relation.*
        <if test="needTitle">
            ,material_tag.title
        </if>
        from
            material_tag_relation
            ,material_tag
        where
            material_id in
        <foreach collection="materialIds" item="item" open="( " separator="," close=" )" index="index">
            #{item}
        </foreach>
        and material_tag_relation.tag_id = material_tag.id
        <if test="needOnline">
            and material_tag.status = 1
        </if>
    </select>

    <select id="getTemplateByExtName">
        select
            apaas_file.id as file_id,
            material_info.*
        from
            material_info,
            apaas_file,
            (select SUBSTRING_INDEX(namespace, '__', -1) as file_id, id  from material_info where material_info.type = 'template') as temp
        where
            material_info.id = temp.id
            and apaas_file.id = temp.file_id
            and (
                (apaas_file.ext_name in
                    <foreach collection="extNames" item="item" open="( " separator="," close=" )" index="index">
                        #{item}
                    </foreach>
                )
                <if test="templateGuideTypes">
                    or (
                        apaas_file.ext_name = 'tplg' and apaas_file.type in
                        <foreach collection="templateGuideTypes" item="item" open="( " separator="," close=" )" index="index">
                            #{item}
                        </foreach>
                    )
                </if>
            )

    </select>

    <select id="getTemplateBySceneId">
        select
            material_info.*,
            temp.file_id
        from
            material_info,
            (select SUBSTRING_INDEX(namespace, '__', -1) as file_id, id  from material_info where material_info.type = 'template') as temp
        where
            scene_id = #{sceneId} and status = 1 and type = 'template' and temp.id = material_info.id
    </select>

    <insert id="bulkInsertTag">
        insert into material_tag
        (
        title,
        <if test="scene_id">
            scene_id,
        </if>
        material_tag.order,
        creator_id,
        create_time,
        updator_id,
        update_time,
        parent_id
        )
        <foreach collection="tags" item="item" open="values " separator="," close="" index="index">
            <trim prefix="(" suffix=")" suffixOverrides=",">
                #{item.title},
                <if test="item.scene_id">
                    #{item.scene_id},
                </if>
                #{item.order},
                #{item.creator_id},
                #{item.create_time},
                #{item.creator_id},
                #{item.create_time},
                #{item.parent_id}
            </trim>
        </foreach>
    </insert>

    <update id="deleteTag">
        update material_tag
        set
        status = -1
        where id = #{id}
    </update>

    <update id="updateTag">
        update material_tag
        set
        <if test="title">
            title = #{title},
        </if>
        <if test="update_time">
            update_time = #{update_time},
        </if>
        <if test="scene_id">
            scene_id = #{scene_id},
        </if>
        <if test="order">
            material_tag.order = #{order},
        </if>
        <if test="status">
            status = #{status},
        </if>
        parent_id = #{parent_id},
        updator_id = #{updator_id}
        where id = #{id}
    </update>

    <insert id="bulkInsertMaterialTagRelation">
        insert into material_tag_relation
        (
        material_id,
        tag_id,
        creator_id,
        creator_name,
        create_time,
        updator_id,
        updator_name,
        update_time
        )
        <foreach collection="relations" item="item" open="values " separator="," close="" index="index">
            <trim prefix="(" suffix=")" suffixOverrides=",">
                #{item.material_id},
                #{item.tag_id},
                #{item.creator_id},
                #{item.creator_name},
                #{item.create_time},
                #{item.creator_id},
                #{item.creator_name},
                #{item.create_time}
            </trim>
        </foreach>
    </insert>

    <insert id="bulkInsertMaterial">
        insert into material_info
        (
        file_pub_id,
        namespace,
        version,
        icon,
        docs,
        preview_img,
        title,
        description,
        type,
        scene_id,
        power_type,
        key_info,
        creator_id,
        creator_name,
        create_time,
        updator_id,
        updator_name,
        update_time,
        meta,
        organization_id
        )
        <foreach collection="materials" item="item" open="values " separator="," close="" index="index">
            <trim prefix="(" suffix=")" suffixOverrides=",">
                #{item.file_pub_id},
                #{item.namespace},
                #{item.version},
                #{item.icon},
                #{item.docs},
                #{item.preview_img},
                #{item.title},
                #{item.description},
                #{item.ext_name},
                <choose>
                    <when test="item.scene_id">
                        #{item.scene_id},
                    </when>
                    <otherwise>
                        0,
                    </otherwise>
                </choose>
                <choose>
                    <when test="item.power_type">
                        #{item.power_type},
                    </when>
                    <otherwise>
                        1,
                    </otherwise>
                </choose>
                <choose>
                    <when test="item.key_info">
                        #{item.key_info},
                    </when>
                    <otherwise>
                        '',
                    </otherwise>
                </choose>
                #{item.creator_id},
                #{item.creator_name},
                #{item.create_time},
                #{item.creator_id},
                #{item.creator_name},
                #{item.create_time},
                <choose>
                    <when test="item.meta">
                        #{item.meta},
                    </when>
                    <otherwise>
                        '',
                    </otherwise>
                </choose>
                <choose>
                    <when test="item.organization_id">
                        #{item.organization_id},
                    </when>
                    <otherwise>
                        NULL
                    </otherwise>
                </choose>
            </trim>
        </foreach>
    </insert>

    <select id="getMaterialContentByPubIds">
        select
        material_info.id as material_id,
        material_info.file_pub_id,
        material_info.scene_id,
        material_info.namespace,
        material_info.version,
        material_info.icon,
        material_info.docs,
        material_info.preview_img,
        material_info.title,
        material_info.description,
        material_info.type,
        material_info.key_info,
        material_info.creator_id,
        material_info.creator_name,
        material_info.create_time,
        material_info.updator_id,
        material_info.updator_name,
        material_info.update_time,
        apaas_file_pub.file_id,
        apaas_file_pub.content,
        apaas_file_pub.file_content_id,
        apaas_file_pub.commit_info,
        apaas_file_pub.env_type
        from material_info, apaas_file_pub
        where apaas_file_pub.id in
        <foreach collection="pubIds" item="item" open="( " separator="," close=" )" index="index">
            #{item}
        </foreach>
        and apaas_file_pub.id = material_info.file_pub_id
    </select>

    <select id="getMaterialListByMaterialId">
        select material_info.id as material_id, material_info.* from material_info where id in
        <foreach collection="materialIds" item="item" open="( " separator="," close=" )" index="index">
            #{item}
        </foreach>
    </select>

    <update id="updateMaterialById">
        update material_info
        set
        update_time = #{update_time},
        <if test="scene_id">
            scene_id = #{scene_id},
        </if>
        <if test="key_info">
            key_info = #{key_info},
        </if>
        <if test="power_type">
            power_type = #{power_type},
        </if>
        <if test="status">
            status = #{status},
        </if>
        <if test="meta">
            meta = #{meta},
        </if>
        <if test="title">
            title = #{title},
        </if>
        <if test="preview_img">
            preview_img = #{preview_img},
        </if>
        updator_name = #{updator_name},
        updator_id = #{updator_id}
        where id = #{id}
    </update>

    <delete id="deleteRelationByMaterialId">
        delete from material_tag_relation
        where material_id in
        <foreach collection="materialIds" item="item" open="( " separator="," close=" )" index="index">
            #{item}
        </foreach>
    </delete>

    <select id="getScene">
        select
            *
        from
            material_scene
        where
            status = #{status}
        <if test="types">
            and type in
            <foreach collection="types" item="item" open="( " separator="," close=" )" index="index">
                #{item}
            </foreach>
        </if>
        order by material_scene.order ASC
    </select>

    <insert id="bulkInsertScene">
        insert into material_scene
        (
        title,
        material_scene.order,
        type,
        creator_id,
        create_time,
        updator_id,
        update_time
        )
        <foreach collection="scenes" item="item" open="values " separator="," close="" index="index">
            <trim prefix="(" suffix=")" suffixOverrides=",">
                #{item.title},
                #{item.order},
                #{item.type},
                #{item.creator_id},
                #{item.create_time},
                #{item.creator_id},
                #{item.create_time}
            </trim>
        </foreach>
    </insert>

    <select id="getSceneById">
        select * from material_scene
        where id = #{id} and status = 1
    </select>
</mapper>
