| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297 | <?php/** * Created by PhpStorm. * User: hp * Date: 2017/12/1 * Time: 11:37 */namespace App\Http\Controllers\Channel\Trade;use App\Http\Controllers\Channel\BaseController;use App\Http\Controllers\Channel\Trade\Transformers\OrderTransformer;use App\Modules\Trade\Services\OrderService;use App\Modules\SendOrder\Services\SendOrderService;use App\Modules\Channel\Services\ChannelService;use App\Modules\OfficialAccount\Services\ForceSubscribeService;use App\Modules\Activity\Services\ActivityService;use Illuminate\Http\Request;class OrderController extends BaseController{    /**     * @apiDefine Trade 订单     */    /**     * @apiVersion 1.0.0     * @api {GET} trade/orders 获取订单列表     * @apiGroup Trade     * @apiName getOrders     * @apiParam   {Number}  [send_order_id] 派单ID     * @apiParam   {String}  [begin_time] 开始时间     * @apiParam   {String}  [end_time] 结束时间     * @apiSuccess {Number}  uid 用户id.     * @apiSuccess {String}  price 价格.     * @apiSuccess {String}  status '状态 PAID:已支付 UNPAID未支付'.     * @apiSuccess {String}  trade_no 平台交易ID.     * @apiSuccess {String}  pay_end_at 支付完成时间.     * @apiSuccess {Number}  send_order_id 派单id     * @apiSuccess {String}  send_order_name 派单名称     * @apiSuccess {String}  created_at 创建时间     * @apiSuccessExample {json} Success-Response:     *     *     {     *         "code": 0,     *         "msg": "",     *     *         "data": [     *            {     *              "uid": 1,     *              "price": "1.00",     *              "status": "PAID",     *              "trade_no": "201711301125401585459852216605",     *              "pay_end_at": "2017-12-01 10:20:04",     *              "send_order_id": 0,     *              "send_order_name": "",     *              "created_at": 1512094804,     *            }     *        ]     *     }     */    function getOrders(Request $request)    {        $params = [];        $request->has('start_time') && $request->input('start_time') && $params['begin_time'] = trim($request->input('start_time'));        $request->has('end_time') && $request->input('end_time') && $params['end_time'] = date('Y-m-d H:i:s', strtotime(trim($request->input('end_time'))) + 86400 - 1);        $request->has('send_order_id') && $request->input('send_order_id') && $params['send_order_id'] = (int)$request->input('send_order_id');        $name = $request->has('activity_name') && trim($request->input('activity_name')) ? trim($request->input('activity_name')) : '';        // 模板        $from_custom_id = $request->has('from_custom_id') && trim($request->input('from_custom_id')) ? trim($request->input('from_custom_id')) : '';        $params['inner_send_order_id'] = $from_custom_id;                if(!$params['begin_time'] || !$params['end_time'] ){            return response()->error('PARAM_ERROR');        }        if( strtotime($params['end_time']) - strtotime($params['begin_time']) >= 31*86400 ){            return response()->error('PARAM_ERROR');        }        //活动        if ($name) $params['activity_id'] = ActivityService::getActivityIds(compact('name'));        if ($request->has('status') && $request->input('status') && in_array(strtoupper($request->input('status')), ['UNPAID', 'PAID'])) {            $params['status'] = strtoupper($request->input('status'));        }        $params['distribution_channel_id'] = $this->getChannelId();        $orders = OrderService::search($params);        return response()->pagination(new OrderTransformer(), $orders);    }    /**     * @apiVersion 1.0.0     * @api {GET} trade/exportOrders 导出订单列表     * @apiGroup Trade     * @apiName exportOrders     * @apiParam   {Number}  [send_order_id] 派单ID     * @apiParam   {String}  [begin_time] 开始时间     * @apiParam   {String}  [end_time] 结束时间     * @apiSuccess {Number}  uid 用户id.     * @apiSuccess {String}  price 价格.     * @apiSuccess {String}  status '状态 PAID:已支付 UNPAID未支付'.     * @apiSuccess {String}  trade_no 平台交易ID.     * @apiSuccess {String}  pay_end_at 支付完成时间.     * @apiSuccess {Number}  send_order_id 派单id     * @apiSuccess {String}  send_order_name 派单名称     * @apiSuccess {String}  created_at 创建时间     */    function exportOrders(Request $request)    {        $params = [];        $request->has('start_time') && $request->input('start_time') && $params['begin_time'] = trim($request->input('start_time'));        $request->has('end_time') && $request->input('end_time') && $params['end_time'] = date('Y-m-d H:i:s', strtotime(trim($request->input('end_time'))) + 86400 - 1);        $request->has('send_order_id') && $request->input('send_order_id') && $params['send_order_id'] = (int)$request->input('send_order_id');        if ($request->has('status') && $request->input('status') && in_array(strtoupper($request->input('status')), ['UNPAID', 'PAID'])) {            $params['status'] = strtoupper($request->input('status'));        }        if(!$params['begin_time'] || !$params['end_time'] ){            return response()->error('PARAM_ERROR');        }        if( strtotime($params['end_time']) - strtotime($params['begin_time']) >= 31*86400 ){            return response()->error('PARAM_ERROR');        }        $name = $request->has('activity_name') && trim($request->input('activity_name')) ? trim($request->input('activity_name')) : '';        //活动        if ($name) $params['activity_id'] = ActivityService::getActivityIds(compact('name'));        $params['distribution_channel_id'] = $this->getChannelId();        $orders = OrderService::search($params, true);        header("Content-type:application/vnd.ms-excel");        header("Content-Disposition:attachment;filename=" . "订单列表" . date("YmdHis") . ".csv");        echo iconv("UTF-8", "GBK", "\"商户订单号\",\"用户ID\",\"金额\",\"支付状态\",\"创建时间\",\"支付时间\",\"派单id\",\"派单名称\",\"活动名称\"\r\n");        if ($orders) {            foreach ($orders as $order) {                echo("\"" . iconv("UTF-8", "GBK", $order->trade_no) . "\",");                echo("\"" . iconv("UTF-8", "GBK", $order->uid) . "\",");                echo("\"" . iconv("UTF-8", "GBK", $order->price) . "\",");                echo("\"" . iconv("UTF-8", "GBK", $order->status == 'PAID' ? '已支付' : '未支付') . "\",");                echo("\"" . $order->created_at . "\",");                echo("\"" . $order->pay_end_at . "\",");                echo("\"" . iconv("UTF-8", "GBK", $order->send_order_id) . "\",");                echo("\"" . iconv("UTF-8", "GBK//IGNORE", (string)$order->send_order_name) . "\",");                echo("\"" . iconv("UTF-8", "GBK", $order->name) . "\"\r\n");            }        }        exit();    }    /**     * @apiVersion 1.0.0     * @api {GET} trade/getChannelToday 获取当日订单数据     * @apiGroup Trade     * @apiName getChannelToday     * @apiSuccess {Number}  paid_number  成功订单数     * @apiSuccess {Number}  success_amount 成功总额     * @apiSuccess {Number}  unpaid_number 未支付订单数     * @apiSuccessExample {json} Success-Response:     *     *     {     *         "code": 0,     *         "msg": "",     *         "data": [     *            {     *              "paid_number": 2,     *              "unpaid_number": 112,     *              "success_amount": 120212,     *            }     *        ]     *     }     */    function channelTodayStat()    {        $today_data = OrderService::getChannelToday($this->getChannelId());        $data = [            'unpaid_number' => (float)$today_data['total_num'] - (float)$today_data['paid_number'],            'success_amount' => (float)$today_data['success_amount'],            'paid_number' => (int)$today_data['paid_number'],        ];        return response()->success($data);    }    /**     * @apiVersion 1.0.0     * @api {GET} trade/getChannelTodayData 获取当日订单数据     * @apiGroup Trade     * @apiName getChannelTodayData     * @apiSuccess {Number}  amount  总成功总额     * @apiSuccess {Number}  paid_num 总成功订单数     * @apiSuccess {Number}  total_order_num 总订单数     * @apiSuccess {Number}  recharge_unpaid_number 普通未支付订单数     * @apiSuccess {Number}  recharge_paid_number 普通已支付订单数     * @apiSuccess {Number}  recharge_success_amount 普通充值总额     * @apiSuccess {Number}  total_order_num 总订单数     * @apiSuccess {Number}  total_order_num 总订单数     * @apiSuccessExample {json} Success-Response:     *     *     {     *         "code": 0,     *         "msg": "",     *         "data": [     *            {     *              "paid_number": 2,     *              "unpaid_number": 112,     *              "success_amount": 120212,     *            }     *        ]     *     }     */    function channelTodayData()    {        $distribution_channel_id = $this->getChannelId();        $data = self::getChannelTodayData($distribution_channel_id);               return response()->success($data);    }    /**     * 账号级别的今日数据     */    function accountChannelTodayData()    {    	$channel_user_id = $this->getChannelUserId();    	$channels = ChannelService::getByChannelUserId($channel_user_id);    	$data = [	    	'amount' => 0,	    	'paid_num' => 0,	    	'total_order_num' => 0,	    	'recharge_unpaid_number' => 0,	    	'recharge_paid_number' => 0,	    	'recharge_success_amount' => 0,	    	'year_unpaid_number' => 0,	    	'year_paid_number' => 0,	    	'year_success_amount' => 0,	    	'new_user_num' => 0,	    	'new_subscribe_user_num' => 0    	];    	foreach($channels as $channel){    		$distribution_channel_id = $channel->id;    		\Log::info('getChannelTodayData:'.$distribution_channel_id);    		$one_data = self::getChannelTodayData($distribution_channel_id);    		$data['amount'] += $one_data['amount'];    		$data['paid_num'] += $one_data['paid_num'];    		$data['total_order_num'] += $one_data['total_order_num'];    		$data['recharge_unpaid_number'] += $one_data['recharge_unpaid_number'];    		$data['recharge_paid_number'] += $one_data['recharge_paid_number'];    		$data['recharge_success_amount'] += $one_data['recharge_success_amount'];    		$data['year_unpaid_number'] += $one_data['year_unpaid_number'];    		$data['year_paid_number'] += $one_data['year_paid_number'];    		$data['year_success_amount'] += $one_data['year_success_amount'];    		$data['new_user_num'] += $one_data['new_user_num'];    		$data['new_subscribe_user_num'] += $one_data['new_subscribe_user_num'];    	}    	$data['amount'] = round($data['amount'],2);    	$data['recharge_success_amount'] = round($data['recharge_success_amount'],2);    	$data['year_success_amount'] = round($data['year_success_amount'],2);    	    	return response()->success($data);        }        public static function  getChannelTodayData($distribution_channel_id){    	$date = date('Y-m-d');    	$today_data = OrderService::getChannelTodayData($distribution_channel_id);    	$uv_pv = SendOrderService::getChannelPromotionTotalUvPv($distribution_channel_id, $date);    	$force_user_num = ForceSubscribeService::forceSubscribeUserCountByChannelIdAndDate($distribution_channel_id, $date, '');    	    	$data = [	    	'amount' => $today_data['amount'],	    	'paid_num' => $today_data['paid_num'],	    	'total_order_num' => $today_data['total_order_num'],	    		    	'recharge_unpaid_number' => $today_data['recharge_unpaid_number'],	    	'recharge_paid_number' => $today_data['recharge_paid_number'],	    	'recharge_success_amount' => $today_data['recharge_success_amount'],	    		    	'year_unpaid_number' => $today_data['year_unpaid_number'],	    	'year_paid_number' => $today_data['year_paid_number'],	    	'year_success_amount' => $today_data['year_success_amount'],	    		    	'new_user_num' => $uv_pv['uv'],	    	'new_subscribe_user_num' => $force_user_num    	];    	return $data;    }    }
 |