<?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.czg.service.order.mapper.ShopTableOrderStatisticMapper">
    <update id="incrInfo">
        update tb_shop_table_order_statistic set order_count=order_count + #{count}, order_amount=order_amount + #{count}
        where shop_id = #{shopId} and table_id = #{tableId} and create_day=#{date}
    </update>

    <select id="selectSummary" resultType="com.czg.order.entity.ShopTableOrderStatistic">
        SELECT
        a.table_id as tableId, b.name as name, sum(a.order_count) as orderCount, sum(a.order_amount) as orderAmount
        FROM
        tb_shop_table_order_statistic as a
        left join tb_shop_table as b on a.table_id = b.id
        WHERE
        a.shop_id = #{shopId}
        <if test="startTime != null and startTime != ''">
            AND a.create_day >= #{startTime}
        </if>
        <if test="endTime != null and endTime != ''">
            and a.create_day &lt;= #{endTime}
        </if>
        GROUP BY
        a.table_id
        order by a.id desc
    </select>
    <select id="findSummaryList" resultType="com.czg.order.vo.TableSummaryInfoVo">
        select
            t1.table_id,
            ifnull(t3.name,'N/A') as area_name,
            ifnull(t2.name,'N/A') as table_name,
            sum(t1.order_count) as order_count,
            sum(t1.order_amount) as order_amount,
            ifnull(sum(t1.refund_count),0) as refund_count,
            ifnull(sum(t1.refund_amount),0) as refund_amount
        from tb_shop_table_order_statistic t1
        left join tb_shop_table t2 on t1.table_id = t2.id
        left join tb_shop_table_area t3 on t2.area_id = t3.id
        where t1.shop_id = #{shopId}
        <if test="beginDate != null and beginDate != ''">
            AND t1.create_day >= str_to_date(#{beginDate}, '%Y-%m-%d')
        </if>
        <if test="endDate != null and endDate != ''">
            and t1.create_day &lt;= str_to_date(#{endDate}, '%Y-%m-%d')
        </if>
        group by t1.table_id
        order by sum(t1.order_count) desc,max(t1.id) desc
    </select>
    <select id="findSummaryList2" resultType="com.czg.order.vo.TableSummaryInfoVo">
        SELECT
        t1.table_code,
        ifnull(t2.NAME,t1.table_code) AS table_name,
        ifnull(t3.NAME,'未知') AS area_name,
        count( t1.id ) AS order_count,
        sum( t1.pay_amount ) as order_amount,
        ifnull(count( case when t1.refund_amount > 0 then 1 end),0) AS refund_count,
        ifnull( sum( t1.refund_amount ), 0 ) AS refund_amount
        FROM
        tb_order_info t1
        LEFT JOIN tb_shop_table t2 ON t1.table_code = t2.table_code and t1.shop_id = t2.shop_id
        LEFT JOIN tb_shop_table_area t3 ON t2.area_id = t3.id
        where t1.shop_id = #{shopId}
        and t1.table_code is not null
        and t2.table_code is not null
        and t2.table_code != ''
        and t2.name is not null
        and t1.paid_time is not null
        <if test="beginDate != null and beginDate != ''">
            AND t1.create_time >= str_to_date(#{beginDate}, '%Y-%m-%d %H:%i:%s')
        </if>
        <if test="endDate != null and endDate != ''">
            and t1.create_time &lt;= str_to_date(#{endDate}, '%Y-%m-%d %H:%i:%s')
        </if>
        GROUP BY t1.table_code
        order by count( t1.id ) desc,sum( t1.pay_amount ) desc
    </select>
    <select id="findSummaryExportList" resultType="com.czg.order.vo.TableSummaryExportVo">
        SELECT
            t.product_name,
            date_format(t.create_time, '%Y-%m-%d') as create_date,
            if(t.table_name = '11111111','银收客',t.table_name) as table_name,
            concat(if(t.table_name = '11111111','银收客',t.table_name),'-',date_format(t.create_time, '%Y-%m-%d')) as tableConcatDate,
            t.category_name,
            t.unit_name,
            group_concat(distinct t.sku_name SEPARATOR ';') as sku_name,
            sum(t.num) as num,
            avg(t.unit_price) as unit_price,
            sum(t.num*t.unit_price) as amount,
            sum(-t.refund_num) as refund_num,
            sum(-t.refund_num*t.unit_price) as refund_amount
        FROM
            (
                SELECT
                    t1.product_id,
                    t2.table_code,
                    IF(t2.table_code is null or t2.table_code = '' or t6.NAME is null, '11111111', t6.NAME) AS table_name,
                    t1.create_time,
                    t4.NAME AS category_name,
                    t3.name as product_name,
                    t5.NAME AS unit_name,
                    t1.sku_name,
                    t1.num,
                    t1.unit_price,
                    t1.refund_num as refund_num
                FROM
                    tb_order_detail t1
                        LEFT JOIN tb_order_info t2 ON t1.order_id = t2.id
                        LEFT JOIN tb_product t3 ON t1.product_id = t3.id
                        LEFT JOIN tb_shop_prod_category t4 ON t3.category_id = t4.id
                        LEFT JOIN tb_shop_prod_unit t5 ON t3.unit_id = t5.id
                        LEFT JOIN tb_shop_table t6 ON t2.table_code = t6.table_code AND t1.shop_id = t6.shop_id and t6.table_code != '' and t6.table_code is not null
                WHERE t1.shop_id = #{shopId}
                <if test="beginDate != null and beginDate != ''">
                    AND t1.create_time >= str_to_date(#{beginDate}, '%Y-%m-%d %H:%i:%s')
                </if>
                <if test="endDate != null and endDate != ''">
                    and t1.create_time &lt;= str_to_date(#{endDate}, '%Y-%m-%d %H:%i:%s')
                </if>
            ) t
        group by t.product_id,date_format(t.create_time, '%Y-%m-%d'),t.table_name
        order by t.table_name,t.table_code,date_format(t.create_time, '%Y-%m-%d'),t.category_name,t.product_id
    </select>
</mapper>
