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

    <select id="getNodeFlagByArea" resultType="com.boco.nbd.wios.flow.entity.bo.VisualManagementBO">
            SELECT
                area_id id,
                area_name name,
                node_flag,
                count(*) num
            FROM
                t_order
            WHERE
                status!=64 and type=1 and process_ins_id is not null  and area_id IN (SELECT id FROM t_region WHERE parent_id = '1')
                <if test="startTime != null and startTime != ''">
                    and DATE_FORMAT(create_time,'%Y-%m-%d')&gt;= #{startTime}
                </if>
                <if test="endTime != null and endTime != ''">
                    and DATE_FORMAT(create_time,'%Y-%m-%d')&lt;= #{endTime}
                </if>
                <if test="areaId != null and areaId != ''">
                    and FIND_IN_SET(area_id, #{areaId})
                </if>
                <if test="installSupplierId != null and installSupplierId != ''">
                    and install_supplier_id = #{installSupplierId}
                </if>
                GROUP BY area_id,area_name,node_flag
    </select>

    <select id="getNodeFlagByInstallSupplierl" resultType="com.boco.nbd.wios.flow.entity.bo.VisualManagementBO">
        SELECT
            install_supplier_id id,
            install_supplier_name name,
            node_flag,
            count(*) num
        FROM
            t_order
        where
          status!=64 and type=1 and process_ins_id is not null
            <if test="startTime != null and startTime != ''">
                and DATE_FORMAT(create_time,'%Y-%m-%d')&gt;= #{startTime}
            </if>
            <if test="endTime != null and endTime != ''">
                and DATE_FORMAT(create_time,'%Y-%m-%d')&lt;= #{endTime}
            </if>
            <if test="areaId != null and areaId != ''">
                and area_id = #{areaId}
            </if>
            <if test="installSupplierId != null and installSupplierId != ''">
                and install_supplier_id = #{installSupplierId}
            </if>
            GROUP BY install_supplier_id,install_supplier_name,node_flag
    </select>

    <select id="getOvertimeNodeFlagByAreaCount" resultType="com.boco.nbd.wios.flow.entity.bo.VisualManagementBO">
         select area_id id,area_name name,left(NAME_,3) node_flag,SUM(IF( NOW() > DUE_DATE_ ,1,0)) num   from
            (SELECT
                 a.area_id,
                 a.area_name,
                 b.*
            FROM
                t_order a right JOIN ACT_HI_TASKINST b on a.process_ins_id=b.PROC_INST_ID_ and a.node_flag=left(b.NAME_,3)
            WHERE
                a.STATUS != 64
                AND a.type = 1
                AND a.process_ins_id IS NOT NULL and a.area_id IN (SELECT id FROM t_region WHERE parent_id = '1')
                <if test="startTime != null and startTime != ''">
                    and DATE_FORMAT(a.create_time,'%Y-%m-%d')&gt;= #{startTime}
                </if>
                <if test="endTime != null and endTime != ''">
                    and DATE_FORMAT(a.create_time,'%Y-%m-%d')&lt;= #{endTime}
                </if>
                <if test="areaId != null and areaId != ''">
                    and FIND_IN_SET(a.area_id, #{areaId})
                </if>
                <if test="installSupplierId != null and installSupplierId != ''">
                    and a.install_supplier_id = #{installSupplierId}
                </if>
                ) c
         GROUP BY area_id,area_name,NAME_
    </select>

    <select id="getOvertimeNodeFlagByInstallSupplierl" resultType="com.boco.nbd.wios.flow.entity.bo.VisualManagementBO">
         select install_supplier_id id,install_supplier_name name,left(NAME_,3) node_flag,SUM(IF( NOW() > DUE_DATE_ ,1,0)) num   from
            (SELECT
                 a.install_supplier_id,
                 a.install_supplier_name,
                 b.*
            FROM
                t_order a right JOIN ACT_HI_TASKINST b on a.process_ins_id=b.PROC_INST_ID_ and a.node_flag=left(b.NAME_,3)
            WHERE
                a.STATUS != 64
                AND a.type = 1
                AND a.process_ins_id IS NOT NULL
                <if test="startTime != null and startTime != ''">
                    and DATE_FORMAT(a.create_time,'%Y-%m-%d')&gt;= #{startTime}
                </if>
                <if test="endTime != null and endTime != ''">
                    and DATE_FORMAT(a.create_time,'%Y-%m-%d')&lt;= #{endTime}
                </if>
                <if test="areaId != null and areaId != ''">
                    and FIND_IN_SET(a.area_id, #{areaId})
                </if>
                <if test="installSupplierId != null and installSupplierId != ''">
                    and a.install_supplier_id = #{installSupplierId}
                </if>
                ) c
			 GROUP BY install_supplier_id,install_supplier_name,NAME_
    </select>

    <select id="getAboutOvertimeNodeFlagByAreaCount" resultType="com.boco.nbd.wios.flow.entity.bo.VisualManagementBO">
        SELECT
            area_id id,
            area_name NAME,
            node_flag,
            SUM(
            case node_flag
            when '101' then IF ( ROUND(TIMESTAMPDIFF( MINUTE , NOW(), DUE_DATE_ )/60,2) &lt; 4.8 AND TIMESTAMPDIFF( MINUTE, NOW(), DUE_DATE_ ) > 0, 1, 0 )
            when '103' then IF ( ROUND(TIMESTAMPDIFF( MINUTE , NOW(), DUE_DATE_ )/60,2) &lt; 4.8 AND TIMESTAMPDIFF( MINUTE, NOW(), DUE_DATE_ ) > 0, 1, 0 )
            when '115' then IF ( ROUND(TIMESTAMPDIFF( MINUTE , NOW(), DUE_DATE_ )/60,2) &lt; 72 AND TIMESTAMPDIFF( MINUTE, NOW(), DUE_DATE_ ) > 0, 1, 0 )
            when '104' then IF ( ROUND(TIMESTAMPDIFF( MINUTE , NOW(), DUE_DATE_ )/60,2) &lt; 4.8 AND TIMESTAMPDIFF( MINUTE, NOW(), DUE_DATE_ ) > 0, 1, 0 )
            when '106' then IF ( TIMESTAMPDIFF( MINUTE , START_TIME_, DUE_DATE_ )*0.8 &lt; TIMESTAMPDIFF( MINUTE , START_TIME_, NOW() ) AND TIMESTAMPDIFF( MINUTE, NOW(), DUE_DATE_ ) > 0, 1, 0 )
            when '107' then IF ( TIMESTAMPDIFF( MINUTE , START_TIME_, DUE_DATE_ )*0.8 &lt; TIMESTAMPDIFF( MINUTE , START_TIME_, NOW() ) AND TIMESTAMPDIFF( MINUTE, NOW(), DUE_DATE_ ) > 0, 1, 0 )
            when '108' then IF ( ROUND(TIMESTAMPDIFF( MINUTE , NOW(), DUE_DATE_ )/60,2) &lt; 4.8 AND TIMESTAMPDIFF( MINUTE, NOW(), DUE_DATE_ ) > 0, 1, 0 )
            when '111' then IF ( TIMESTAMPDIFF( MINUTE , START_TIME_, DUE_DATE_ )*0.8 &lt; TIMESTAMPDIFF( MINUTE , START_TIME_, NOW() ) AND TIMESTAMPDIFF( MINUTE, NOW(), DUE_DATE_ ) > 0, 1, 0 )
            when '112' then IF ( TIMESTAMPDIFF( MINUTE , START_TIME_, DUE_DATE_ )*0.8 &lt; TIMESTAMPDIFF( MINUTE , START_TIME_, NOW() ) AND TIMESTAMPDIFF( MINUTE, NOW(), DUE_DATE_ ) > 0, 1, 0 )
            else 0 end
            ) num
        FROM
        (
            SELECT
                a.node_flag,
                a.area_id,
                a.area_name,
                b.*
            FROM
                t_order a
                RIGHT JOIN ACT_HI_TASKINST b ON a.process_ins_id = b.PROC_INST_ID_
                AND a.node_flag = LEFT ( b.NAME_, 3 )
                WHERE
                a.STATUS != 64
                AND a.type = 1
                AND a.process_ins_id IS NOT NULL
                AND a.area_id IN ( SELECT id FROM t_region WHERE parent_id = '1' )
                AND b.DUE_DATE_ IS NOT NULL
                <if test="startTime != null and startTime != ''">
                    and DATE_FORMAT(a.create_time,'%Y-%m-%d')&gt;= #{startTime}
                </if>
                <if test="endTime != null and endTime != ''">
                    and DATE_FORMAT(a.create_time,'%Y-%m-%d')&lt;= #{endTime}
                </if>
                <if test="areaId != null and areaId != ''">
                    and FIND_IN_SET(a.area_id, #{areaId})
                </if>
                <if test="installSupplierId != null and installSupplierId != ''">
                    and a.install_supplier_id = #{installSupplierId}
                </if>
        ) c
        GROUP BY
        area_id,
        area_name,
        node_flag
    </select>

    <select id="getAboutOvertimeNodeFlagByInstallSupplierl" resultType="com.boco.nbd.wios.flow.entity.bo.VisualManagementBO">
        SELECT
            install_supplier_id id,
            install_supplier_name name,
            node_flag,
            SUM(
            case node_flag
            when '101' then IF ( ROUND(TIMESTAMPDIFF( MINUTE , NOW(), DUE_DATE_ )/60,2) &lt; 4.8 AND TIMESTAMPDIFF( MINUTE, NOW(), DUE_DATE_ ) > 0, 1, 0 )
            when '103' then IF ( ROUND(TIMESTAMPDIFF( MINUTE , NOW(), DUE_DATE_ )/60,2) &lt; 4.8 AND TIMESTAMPDIFF( MINUTE, NOW(), DUE_DATE_ ) > 0, 1, 0 )
            when '115' then IF ( ROUND(TIMESTAMPDIFF( MINUTE , NOW(), DUE_DATE_ )/60,2) &lt; 72 AND TIMESTAMPDIFF( MINUTE, NOW(), DUE_DATE_ ) > 0, 1, 0 )
            when '104' then IF ( ROUND(TIMESTAMPDIFF( MINUTE , NOW(), DUE_DATE_ )/60,2) &lt; 4.8 AND TIMESTAMPDIFF( MINUTE, NOW(), DUE_DATE_ ) > 0, 1, 0 )
            when '106' then IF ( TIMESTAMPDIFF( MINUTE , START_TIME_, DUE_DATE_ )*0.8 &lt; TIMESTAMPDIFF( MINUTE , START_TIME_, NOW() ) AND TIMESTAMPDIFF( MINUTE, NOW(), DUE_DATE_ ) > 0, 1, 0 )
            when '107' then IF ( TIMESTAMPDIFF( MINUTE , START_TIME_, DUE_DATE_ )*0.8 &lt; TIMESTAMPDIFF( MINUTE , START_TIME_, NOW() ) AND TIMESTAMPDIFF( MINUTE, NOW(), DUE_DATE_ ) > 0, 1, 0 )
            when '108' then IF ( ROUND(TIMESTAMPDIFF( MINUTE , NOW(), DUE_DATE_ )/60,2) &lt; 4.8 AND TIMESTAMPDIFF( MINUTE, NOW(), DUE_DATE_ ) > 0, 1, 0 )
            when '111' then IF ( TIMESTAMPDIFF( MINUTE , START_TIME_, DUE_DATE_ )*0.8 &lt; TIMESTAMPDIFF( MINUTE , START_TIME_, NOW() ) AND TIMESTAMPDIFF( MINUTE, NOW(), DUE_DATE_ ) > 0, 1, 0 )
            when '112' then IF ( TIMESTAMPDIFF( MINUTE , START_TIME_, DUE_DATE_ )*0.8 &lt; TIMESTAMPDIFF( MINUTE , START_TIME_, NOW() ) AND TIMESTAMPDIFF( MINUTE, NOW(), DUE_DATE_ ) > 0, 1, 0 )
            else 0 end
            ) num
        FROM
        (
            SELECT
                a.node_flag,
                a.install_supplier_id,
                a.install_supplier_name,
                b.*
                FROM
                t_order a right JOIN ACT_HI_TASKINST b on a.process_ins_id=b.PROC_INST_ID_ and a.node_flag=left(b.NAME_,3)
                WHERE
                a.STATUS != 64
                AND a.type = 1
                AND a.process_ins_id IS NOT NULL
                <if test="startTime != null and startTime != ''">
                    and DATE_FORMAT(a.create_time,'%Y-%m-%d')&gt;= #{startTime}
                </if>
                <if test="endTime != null and endTime != ''">
                    and DATE_FORMAT(a.create_time,'%Y-%m-%d')&lt;= #{endTime}
                </if>
                <if test="areaId != null and areaId != ''">
                    and FIND_IN_SET(a.area_id, #{areaId})
                </if>
                <if test="installSupplierId != null and installSupplierId != ''">
                    and a.install_supplier_id = #{installSupplierId}
                </if>
        ) c
        GROUP BY
            install_supplier_id,
            install_supplier_name,
            node_flag
    </select>


    <select id="getCustomerNode101ByArea" resultType="com.boco.nbd.wios.flow.entity.bo.VisualManagementTowNumBO">


        SELECT
            area_id id,area_name name,
            SUM(
            IF
            ( survey_reserve_time IS NOT NULL, 1, 0 )) num1,
            SUM(
            IF
            ( survey_follow_time IS NOT NULL, 1, 0 )) num2
            FROM
            t_order  where  status!=64 and type=1 and node_flag > 101 and area_id IN (SELECT id FROM t_region WHERE parent_id = '1')
            <if test="startTime != null and startTime != ''">
                and DATE_FORMAT(create_time,'%Y-%m-%d')&gt;= #{startTime}
            </if>
            <if test="endTime != null and endTime != ''">
                and DATE_FORMAT(create_time,'%Y-%m-%d')&lt;= #{endTime}
            </if>
            <if test="areaId != null and areaId != ''">
                and FIND_IN_SET(area_id, #{areaId})
            </if>
            <if test="installSupplierId != null and installSupplierId != ''">
                and install_supplier_id = #{installSupplierId}
            </if>
        GROUP BY
            area_id,
            area_name



    </select>


    <select id="getOrderReceivingBySupplierl" resultType="com.boco.nbd.wios.flow.entity.bo.VisualManagementTowNumBO">


        SELECT
            install_supplier_id id,install_supplier_name name,
            SUM(
            IF
            ( refuse_order_reason IS  NULL, 1, 0 )) num1,
            SUM(
            IF
            ( refuse_order_reason IS NOT NULL, 1, 0 )) num2
        FROM
            t_order  where  status!=64 and type=1 and node_flag > 103
            <if test="startTime != null and startTime != ''">
                and DATE_FORMAT(create_time,'%Y-%m-%d')&gt;= #{startTime}
            </if>
            <if test="endTime != null and endTime != ''">
                and DATE_FORMAT(create_time,'%Y-%m-%d')&lt;= #{endTime}
            </if>
            <if test="areaId != null and areaId != ''">
                and FIND_IN_SET(area_id, #{areaId})
            </if>
            <if test="installSupplierId != null and installSupplierId != ''">
                and install_supplier_id = #{installSupplierId}
            </if>
        GROUP BY
            install_supplier_id,
            install_supplier_name


    </select>


    <select id="getOrderReceivingByAreaAndSupplierlId" resultType="com.boco.nbd.wios.flow.entity.bo.VisualManagementTowNumBO">

    SELECT
    area_id id,area_name name,
    SUM(
    IF
    ( refuse_order_reason IS  NULL, 1, 0 )) num1,
    SUM(
    IF
    ( refuse_order_reason IS NOT NULL, 1, 0 )) num2
    FROM
    t_order  where  status!=64 and type=1 and node_flag > 103 and area_id IN (SELECT id FROM t_region WHERE parent_id = '1')
    <if test="startTime != null and startTime != ''">
        and DATE_FORMAT(create_time,'%Y-%m-%d')&gt;= #{startTime}
    </if>
    <if test="endTime != null and endTime != ''">
        and DATE_FORMAT(create_time,'%Y-%m-%d')&lt;= #{endTime}
    </if>
    <if test="installSupplierId != null and installSupplierId != ''">
        and install_supplier_id = #{installSupplierId}
    </if>
    <if test="areaId != null and areaId != ''">
        and FIND_IN_SET(area_id, #{areaId})
    </if>

    GROUP BY
    area_id,
    area_name

    </select>


    <select id="getOrderSettlementBySupplierl" resultType="com.boco.nbd.wios.flow.entity.bo.VisualManagementTowNumBO">
        	SELECT
                install_supplier_id id,install_supplier_name name,
                SUM(
                IF
                ( node_flag = '113', 1, 0 )) num1,
                SUM(
                IF
                ( node_flag = '114', 1, 0 )) num2
            FROM
                t_order  where  status!=64 and type=1
                <if test="installSupplierId != null and installSupplierId != ''">
                    and install_supplier_id = #{installSupplierId}
                </if>
                <if test="areaId != null and areaId != ''">
                    and FIND_IN_SET(area_id, #{areaId})
                </if>
            GROUP BY
                install_supplier_name
    </select>


    <select id="getOrderSettlementByAreaAndSupplierlId" resultType="com.boco.nbd.wios.flow.entity.bo.VisualManagementTowNumBO">

        SELECT
        area_id id,area_name name,
        SUM(
        IF
        ( node_flag = '113', 1, 0 )) num1,
        SUM(
        IF
        ( node_flag = '114', 1, 0 )) num2
        FROM
        t_order  where  status!=64 and type=1 and area_id IN (SELECT id FROM t_region WHERE parent_id = '1')
        <if test="startTime != null and startTime != ''">
            and DATE_FORMAT(create_time,'%Y-%m-%d')&gt;= #{startTime}
        </if>
        <if test="endTime != null and endTime != ''">
            and DATE_FORMAT(create_time,'%Y-%m-%d')&lt;= #{endTime}
        </if>
        <if test="installSupplierId != null and installSupplierId != ''">
            and install_supplier_id = #{installSupplierId}
        </if>
        <if test="areaId != null and areaId != ''">
            and FIND_IN_SET(area_id, #{areaId})
        </if>

        GROUP BY
        area_id,
        area_name

    </select>




</mapper>