<?php

/**
 * Created by PhpStorm.
 * User: hp
 * Date: 2017/11/21
 * Time: 10:42
 */

namespace App\Modules\Trade\Services;

use App\Modules\Trade\Models\Order;
use Redis;
use DB;

class OrderService
{

    //获取派单累计充值(追踪用户)
    static function getMonthRechargeAmountChannelIds($params = [])
    {
        $end_time = isset($params['end_time']) ? $params['end_time'] : '';
        $begin_time = isset($params['begin_time']) ? $params['begin_time'] : '';
        $distribution_channel_ids = isset($params['distribution_channel_ids']) ? $params['distribution_channel_ids'] : 0;

        $distribution_channel_ids = implode(',', $distribution_channel_ids);
        if ($distribution_channel_ids && $begin_time && $end_time) {
            $sql = "SELECT SUM(price) as amount FROM send_orders JOIN orders ON orders.send_order_id=send_orders.id
     WHERE send_orders.distribution_channel_id IN (" . $distribution_channel_ids . ")
     AND orders.`status`='PAID' AND send_orders.send_time BETWEEN '{$begin_time}' AND '{$end_time}'
     ";
            if (isset($params['day_count']) && $params['day_count']) {
                $sql = $sql . " AND (UNIX_TIMESTAMP(orders.created_at)-UNIX_TIMESTAMP(send_orders.send_time))<=" . ($params['day_count'] * 86400);
            }

            $data = DB::select($sql);
            return (float) $data[0]->amount;
        }
        return 0;
    }

    //获取派单累计充值(追踪用户)
    static function getPromotionRegUserRechargeAmountChannelIds($params = [])
    {
        $end_time = isset($params['end_time']) ? $params['end_time'] : '';
        $begin_time = isset($params['begin_time']) ? $params['begin_time'] : '';
        $distribution_channel_ids = isset($params['distribution_channel_ids']) ? $params['distribution_channel_ids'] : 0;

        $distribution_channel_ids = implode(',', $distribution_channel_ids);
        if ($distribution_channel_ids && $begin_time && $end_time) {
            $sql = "SELECT SUM(price) as amount FROM send_orders JOIN users ON users.send_order_id=send_orders.id
        JOIN orders ON orders.uid=users.id
     WHERE send_orders.distribution_channel_id IN (" . $distribution_channel_ids . ")
     AND orders.`status`='PAID' AND send_orders.send_time BETWEEN '{$begin_time}' AND '{$end_time}'
     ";
            if (isset($params['day_count']) && $params['day_count']) {
                $sql = $sql . " AND (UNIX_TIMESTAMP(orders.created_at)-UNIX_TIMESTAMP(send_orders.send_time))<=" . ($params['day_count'] * 86400);
            }
            $data = DB::select($sql);
            return (float) $data[0]->amount;
        }
        return 0;
    }

    /**
     * 查询订单
     * @param  array $params [distribution_channel_id、begin_time、end_time、uid(用户ID)、send_order_id(派单ID)、trade_no(订单号)]
     * @param  boolean $is_all [是否返回全部,默认否]
     * @return [type]          [description]
     */
    static function search($params = [], $is_all = false)
    {
        return Order::search($params, $is_all);
    }

    /**
     * 查询订单
     * @param  array $params [distribution_channel_id、begin_time、end_time、uid(用户ID)、send_order_id(派单ID)、trade_no(订单号)]
     */
    static function searchObj($params = [])
    {
        return Order::searchObj($params);
    }

    /**
     * 获取订单总额
     * @param  array $params [distribution_channel_id、begin_time、end_time、uid、send_order_id]
     */
    static function getAmount($params = [])
    {
        return Order::getAmount($params);
    }

    static function getAmountV2($params = [])
    {
        return Order::getAmountV2($params);
    }

    /**
     * 获取付费用户数
     * @param  array $params [send_order_id]
     */
    static function getPayUserNum($send_order_id)
    {
        return Order::getPayUserNum($send_order_id);
    }

    /**
     * 获取VIP付费用户数
     * @param  array $params [send_order_id]
     */
    static function getVipPayUserNum($send_order_id)
    {
        return Order::getVipPayUserNum($send_order_id);
    }

    /**
     * 获取普通付费用户数
     * @param  array $params [send_order_id]
     */
    static function getNormaPayUserNum($send_order_id)
    {
        return Order::getNormalPayUserNum($send_order_id);
    }

    /**
     *获取派单下的订单总数
     * @param  array $params [send_order_id]
     */
    static function getOrderCount($send_order_id)
    {
        return Order::getOrderCount($send_order_id);
    }

    /**
     *获取活动下的订单数
     * @param  array $params [$activity_id]
     */
    static function getActivityOrderNum($params = [])
    {
        return Order::getActivityOrderNum($params);
    }

    /**
     *获取派单下的普通用户的订单总数
     * @param  array $params [send_order_id]
     */
    static function getNormalOrderCount($send_order_id)
    {
        return Order::getNormalOrderCount($send_order_id);
    }

    /**
     *获取派单下的VIP用户的订单总数
     * @param  array $params [send_order_id]
     */
    static function getVipOrderCount($send_order_id)
    {
        return Order::getVipOrderCount($send_order_id);
    }

    /**
     * 获取渠道当日数据
     * @param  $distribution_channel_id 分销渠道ID
     * @return [成功订单总额、成功订单数]
     */
    static function getChannelToday($distribution_channel_id)
    {
        $data = Order::getChannelToday($distribution_channel_id);
        $data['total_num'] = Redis::hget('order_stat:' . $distribution_channel_id, 'order_num_' . date('Y-m-d'));
        return $data;
    }

    /**
     * 获取渠道当日数据  new
     * @param  $distribution_channel_id 分销渠道ID
     * @return [成功订单总额、成功订单数]
     */
    static function getChannelTodayData($distribution_channel_id)
    {
        $data = Order::getChannelTodayData($distribution_channel_id);
        return $data;
    }

    /**
     * 获取渠道当日数据
     * @param  $distribution_channel_id 分销渠道ID
     * @return [成功订单总额、成功订单数、总订单数]
     */
    static function getChannelDateOrderInfo($distribution_channel_id, $date)
    {
        $data = Order::getChannelDateOrderInfo($distribution_channel_id, $date);
        $data['total_num'] = Redis::hget('order_stat:' . $distribution_channel_id, 'order_num_' . $date);
        return $data;
    }

    /**
     * 获取渠道对应支付通道总额
     * @param  array $params [distribution_channel_id、begin_time、end_time]
     * @return array
     * [
     *     'ALIPAY'=>121,
     *     'OFFICIAL'=2323
     * ]
     */
    static function getPayMerchantSourceAmount($params = [])
    {
        return Order::getPayMerchantSourceAmount($params);
    }

    //获取渠道日付费用户数
    static function getDayPayUserNumByChannelId($distribution_channel_id, $date)
    {
        return Order::getDayPayUserNumByChannelId($distribution_channel_id, $date);
    }

    //获取渠道日包年vip付费用户数
    static function getDayVipPayUserNumByChannelId($distribution_channel_id, $date)
    {
        return Order::getDayVipPayUserNumByChannelId($distribution_channel_id, $date);
    }

    //获取渠道日普通充值付费用户数
    static function getDayRechargePayUserNumByChannelId($distribution_channel_id, $date)
    {
        return Order::getDayRechargePayUserNumByChannelId($distribution_channel_id, $date);
    }

    //获取指定日期普通充值未支付订单数、支付订单数、总额
    static function getChannelDayTicketRechargeData($distribution_channel_id, $date)
    {
        return Order::getChannelDayTicketRechargeData($distribution_channel_id, $date);
    }

    //获取指定日期包年充值未支付订单数、支付订单数、总额
    static function getChannelDayYearRechargeData($distribution_channel_id, $date)
    {
        return Order::getChannelDayYearRechargeData($distribution_channel_id, $date);
    }

    //获取渠道日首充数据
    static function getChannelDayFirstRechargeData($distribution_channel_id, $date)
    {
        return Order::getChannelDayFirstRechargeData($distribution_channel_id, $date);
    }

    //获取派单累计充值(追踪用户)
    static function getPromotionRegUserRechargeAmount($params)
    {
        return Order::getPromotionRegUserRechargeAmount($params);
    }

    /**
     * 获取服务号下面的充值金额
     * @param $start_time 开始时间
     * @param $end_time 结束时间
     */
    static function getRechargeAmountGroupByOfficial($date)
    {
        return Order::getRechargeAmountGroupByOfficialAccount($date);
    }

    static function getRechargeAmountGroupByPayMerchant($params)
    {
        return Order::getRechargeAmountGroupByPayMerchant($params);
    }

    /**
     * 获取派单累计充值(追踪用户)
     * @param array $params
     * @return float
     */
    static function getPromotionRegUserRechargeAmountBySendOrerId($params = [])
    {
        $end_time = isset($params['end_time']) ? $params['end_time'] : '';
        $start_time = isset($params['start_time']) ? $params['start_time'] : '';
        $send_order_id = isset($params['send_order_id']) ? $params['send_order_id'] : 0;
        if ($send_order_id) {
            if ($start_time && $end_time) {
                $data = DB::select("select sum(price) amount from orders where status='PAID' and created_at >= '{$start_time}' and created_at <= '{$end_time}' and uid in (select id from users where send_order_id = '{$send_order_id}' )");
            } else {
                $data = DB::select("select sum(price) amount from orders where status='PAID' and uid in (select id from users where send_order_id = '{$send_order_id}' )");
            }
            return (float) $data[0]->amount;
        }
    }
}