$v) { $header[$i] = iconv('utf-8', 'GB18030', $v); } fputcsv($fp, $header); $mobile = $request->mobile; $nickname = $request->nickname; $identity = $request->identity; $parent_id = $request->parent_id; $start = $request->start; $end = $request->end; $is_salesman = $request->is_salesman; $users = User::when($mobile, function ($query) use ($mobile) { return $query->where('mobile', 'like', "%{$mobile}%"); })->when($nickname, function ($query) use ($nickname) { return $query->whereHas('info', function ($query) use ($nickname) { $query->where('nickname', 'like', "%{$nickname}%"); }); })->when(is_numeric($is_salesman), function ($query) use ($is_salesman) { return $query->where('is_salesman', $is_salesman); })->when($parent_id, function ($query) use ($parent_id) { $query->whereHas('relation', function ($query) use ($parent_id) { $query->where('parent_id', $parent_id); }); })->when(is_numeric($identity), function ($query) use ($identity) { $query->whereHas('identity', function ($query) use ($identity) { $query->where('identity_id', $identity); }); })->when($start && $end, function ($query) use ($start, $end) { return $query->whereBetween('created_at', [$start, date('Y-m-d', strtotime("+1 days", strtotime($end)))]); })->when($start && !$end, function ($query) use ($start) { return $query->where('created_at', '>=', $start); })->when(!$start && $end, function ($query) use ($end) { return $query->where('created_at', '<=', date('Y-m-d', strtotime("+1 days", strtotime($end)))); })->with(['info'])->orderBy('created_at', 'desc'); if ($users->exists()) { $users->chunk(200, function ($list) use ($fp) { self::user_sub($list, $fp); }); } else { self::user_sub([], $fp); } } private function user_sub($list, $fp) { $excel_data = []; foreach ($list as $key => $vo) { $excel_data[] = [ $vo->id, $vo->openid . "\t", $vo->mobile . "\t", $vo->info->nickname ?? '', $vo->parent->info->nickname ?? '无', $vo->identity_text, $vo->salesman_text, $vo->organ->name ?? '', $vo->created_at . "\t" ?? '', ]; } foreach ($excel_data as $item) { $rows = array(); foreach ($item as $export_obj) { $rows[] = iconv('utf-8', 'GB18030', $export_obj); } fputcsv($fp, $rows); } unset($excel_data); ob_flush(); flush(); } //导出全部订单列表 public function allOrders(Request $request) { $header = ['订单编号', '支付单号', '支付类型', '订单类型', '商户名称', '手机号', '用户昵称', '商品信息', '商品金额', '现金券抵值', '运费', '总计支付', '订单状态', '配送方式', '收件人', '联系电话', '收货地址', '物流公司', '物流单号', '买家留言', '订单备注', '创建时间', '支付时间', '发货时间', '签收时间']; $fileName = '订单列表-' . date('YmdHis', time()); header("Content-type:application/vnd.ms-excel"); header("Content-Disposition:filename=" . iconv("UTF-8", "GB18030", $fileName) . ".csv"); $fp = fopen('php://output', 'a'); foreach ($header as $i => $v) { $header[$i] = iconv('utf-8', 'GB18030', $v); } fputcsv($fp, $header); $orderid = $request->orderid; $mobile = $request->mobile; $nickname = $request->nickname; $seller = $request->seller; $state = $request->state; $title = $request->title; $start = $request->start; $end = $request->end; $item_type = $request->item_type; $orders = Order::when($seller, function ($query) use ($seller) { $query->whereHas('seller', function ($query) use ($seller) { $query->where('name', 'like', "%{$seller}%"); }); }) ->when($orderid, function ($query) use ($orderid) { $query->where('orderid', 'like', "%{$orderid}%"); }) ->when($mobile, function ($query) use ($mobile) { $query->whereHas('user', function ($query) use ($mobile) { $query->where('mobile', 'like', "%{$mobile}%"); }); }) ->when($nickname, function ($query) use ($nickname) { $query->whereHas('user', function ($query) use ($nickname) { return $query->whereHas('info', function ($query) use ($nickname) { $query->where('nickname', 'like', "%{$nickname}%"); }); }); }) ->when($title, function ($query) use ($title) { $goods_ids = Goods::where('title', 'like', "%{$title}%")->pluck('id'); $params_ids = GoodsParams::whereIn('goods_id', $goods_ids)->pluck('id'); $query->whereHas('details', function ($query) use ($params_ids) { return $query->whereIn('item_id', $params_ids); }); }) ->when($item_type, function ($query) use ($item_type) { return $query->where('item_type', $item_type); }) ->when($state == '', function ($query) { return $query->where('state', '<>', Order::ORDER_CLOSED); }) ->when($state, function ($query) use ($state) { switch ($state) { case 'UNPAY': return $query->where('state', Order::ORDER_UNPAY); break; case 'PAID': return $query->whereIn('state', [Order::ORDER_PAID, Order::ORDER_DELIVER]); break; case 'DELIVERED': return $query->where('state', Order::ORDER_DELIVERED); break; case 'SIGNED': return $query->where('state', Order::ORDER_SIGNED); break; case 'CLOSED': return $query->where('state', Order::ORDER_CLOSED); break; case 'CANCEL': return $query->where('state', Order::ORDER_CANCEL); break; case 'COMPLETED': return $query->where('state', Order::ORDER_COMPLETED); break; default: break; } })->when($start && $end, function ($query) use ($start, $end) { return $query->whereBetween('created_at', [$start, date('Y-m-d', strtotime("+1 days", strtotime($end)))]); })->when($start && !$end, function ($query) use ($start) { return $query->where('created_at', '>=', $start); })->when(!$start && $end, function ($query) use ($end) { return $query->where('created_at', '<=', date('Y-m-d', strtotime("+1 days", strtotime($end)))); })->with(['seller', 'user.info'])->orderBy('created_at', 'desc'); if ($orders->exists()) { $orders->chunk(200, function ($list) use ($fp) { self::orders_sub($list, $fp); }); } else { self::orders_sub([], $fp); } } //导出订单列表 public function orders(Request $request) { $header = ['订单编号', '支付单号', '支付类型', '订单类型', '商户名称', '手机号', '用户昵称', '商品信息', '商品金额', '现金券抵值', '运费', '总计支付', '订单状态', '配送方式', '收件人', '联系电话', '收货地址', '物流公司', '物流单号', '买家留言', '订单备注', '创建时间', '支付时间', '发货时间', '签收时间']; $fileName = '订单列表-' . date('YmdHis', time()); header("Content-type:application/vnd.ms-excel"); header("Content-Disposition:filename=" . iconv("UTF-8", "GB18030", $fileName) . ".csv"); $fp = fopen('php://output', 'a'); foreach ($header as $i => $v) { $header[$i] = iconv('utf-8', 'GB18030', $v); } fputcsv($fp, $header); $orderid = $request->orderid; $mobile = $request->mobile; $nickname = $request->nickname; $state = $request->state; $start = $request->start; $end = $request->end; $title = $request->title; $item_type = $request->item_type; $orders = Order::where('seller_id', Admin::user()->seller_id) ->when($orderid, function ($query) use ($orderid) { $query->where('orderid', 'like', "%{$orderid}%"); }) ->when($mobile, function ($query) use ($mobile) { $query->whereHas('user', function ($query) use ($mobile) { $query->where('mobile', 'like', "%{$mobile}%"); }); }) ->when($nickname, function ($query) use ($nickname) { $query->whereHas('user', function ($query) use ($nickname) { return $query->whereHas('info', function ($query) use ($nickname) { $query->where('nickname', 'like', "%{$nickname}%"); }); }); }) ->when($title, function ($query) use ($title) { $goods_ids = Goods::where('title', 'like', "%{$title}%")->pluck('id'); $params_ids = GoodsParams::whereIn('goods_id', $goods_ids)->pluck('id'); $query->whereHas('details', function ($query) use ($params_ids) { return $query->whereIn('item_id', $params_ids); }); }) ->when($item_type, function ($query) use ($item_type) { return $query->where('item_type', $item_type); }) ->when($state == '', function ($query) { return $query->where('state', '<>', Order::ORDER_CLOSED); }) ->when($state, function ($query) use ($state) { switch ($state) { case 'UNPAY': return $query->where('state', Order::ORDER_UNPAY); break; case 'PAID': return $query->whereIn('state', [Order::ORDER_PAID, Order::ORDER_DELIVER]); break; case 'DELIVERED': return $query->where('state', Order::ORDER_DELIVERED); break; case 'SIGNED': return $query->where('state', Order::ORDER_SIGNED); break; case 'CLOSED': return $query->where('state', Order::ORDER_CLOSED); break; case 'CANCEL': return $query->where('state', Order::ORDER_CANCEL); break; case 'COMPLETED': return $query->where('state', Order::ORDER_COMPLETED); break; default: break; } })->when($start && $end, function ($query) use ($start, $end) { return $query->whereBetween('created_at', [$start, date('Y-m-d', strtotime("+1 days", strtotime($end)))]); })->when($start && !$end, function ($query) use ($start) { return $query->where('created_at', '>=', $start); })->when(!$start && $end, function ($query) use ($end) { return $query->where('created_at', '<=', date('Y-m-d', strtotime("+1 days", strtotime($end)))); })->with(['seller', 'user.info'])->orderBy('created_at', 'desc'); if ($orders->exists()) { $orders->chunk(200, function ($list) use ($fp) { self::orders_sub($list, $fp); }); } else { self::orders_sub([], $fp); } } private function orders_sub($list, $fp) { $excel_data = []; foreach ($list as $key => $vo) { $type = '商品'; switch ($vo->item_type) { case 'GOODS': $type = '商品'; break; case 'GIFT': $type = '赠品'; break; case 'LESSON': $type = '报课'; break; case 'ACTIVITY': $type = '娱乐/生活'; break; } $vo->pro = ' '; foreach ($vo->details as $detail) { if ($detail->item) { $vo->pro .= $detail->item->getTitle() . number_format($detail->price, 2) . '元/件 *' . $detail->number . "件\n"; } } $vo->pay_sn = ''; $vo->pay_type = ''; $vo->pay = Payment::where('state', 'SUCCESS')->where('order_id', $vo->id)->first(); if ($vo->pay) { $vo->pay_sn = $vo->pay->trade_no; $vo->pay_type = $vo->pay->type; } $vo->log_express = $vo->logs()->where('state', 'PAID|DELIVERED')->first(); $vo->log_signed = $vo->logs()->where('state', 'DELIVERED|SIGNED')->first(); $excel_data[] = [ $vo->orderid . "\t", $vo->pay_sn . "\t", $vo->pay_sn ? $vo->pay_type == 'WECHAT' ? '微信' : '余额' : ' ', $type, $vo->seller->name . "\t", $vo->user->mobile . "\t" ?? '', $vo->user->info->nickname . "\t" ?? '', $vo->pro, $vo->amount, -$vo->score, $vo->freight, number_format($vo->total - $vo->score, 2), $vo->state_text, $vo->express_type == 1 ? '快递' : '自提', $vo->express->name ?? '', $vo->express->mobile ?? '', $vo->express->address ?? '', $vo->express->company ?? '', !empty($vo->express->number) ? $vo->express->number . "\t" : '', $vo->remark, $vo->remark_mgr, $vo->created_at . "\t" ?? '', $vo->paid_at . "\t" ?? '', $vo->log_express ? $vo->log_express->created_at . "\t" : '', $vo->log_signed ? $vo->log_signed->created_at . "\t" : '', ]; } foreach ($excel_data as $item) { $rows = array(); foreach ($item as $export_obj) { $rows[] = iconv('utf-8', 'GB18030', $export_obj); } fputcsv($fp, $rows); } unset($excel_data); ob_flush(); flush(); } //导出账户列表 public function accounts(Request $request) { $header = ['用户ID', '手机号', '昵称', '现金账户', '注册时间']; $fileName = '账户列表-' . date('YmdHis', time()); header("Content-type:application/vnd.ms-excel"); header("Content-Disposition:filename=" . iconv("UTF-8", "GB18030", $fileName) . ".csv"); $fp = fopen('php://output', 'a'); foreach ($header as $i => $v) { $header[$i] = iconv('utf-8', 'GB18030', $v); } fputcsv($fp, $header); $mobile = $request->mobile; $nickname = $request->nickname; $start = $request->start; $end = $request->end; $accounts = UserAccount::when($mobile, function ($query) use ($mobile) { $query->whereHas('user', function ($query) use ($mobile) { $query->where('mobile', 'like', "%{$mobile}%"); }); })->when($nickname, function ($query) use ($nickname) { $query->whereHas('user.info', function ($query) use ($nickname) { $query->where('nickname', 'like', "%{$nickname}%"); }); })->when($start && $end, function ($query) use ($start, $end) { return $query->whereBetween('created_at', [$start, date('Y-m-d', strtotime("+1 days", strtotime($end)))]); })->when($start && !$end, function ($query) use ($start) { return $query->where('created_at', '>=', $start); })->when(!$start && $end, function ($query) use ($end) { return $query->where('created_at', '<=', date('Y-m-d', strtotime("+1 days", strtotime($end)))); })->with(['user'])->orderBy('created_at', 'desc'); if ($accounts->exists()) { $accounts->chunk(200, function ($list) use ($fp) { self::accounts_sub($list, $fp); }); } else { self::accounts_sub([], $fp); } } private function accounts_sub($list, $fp) { $excel_data = []; foreach ($list as $key => $vo) { $excel_data[] = [ $vo->user->id, $vo->user->mobile . "\t" ?? '', $vo->user->info->nickname . "\t" ?? '', $vo->cash, $vo->created_at . "\t", ]; } foreach ($excel_data as $item) { $rows = array(); foreach ($item as $export_obj) { $rows[] = iconv('utf-8', 'GB18030', $export_obj); } fputcsv($fp, $rows); } unset($excel_data); ob_flush(); flush(); } //导出账户明细列表 public function logs(Request $request) { $header = ['记录ID', '手机号', '昵称', '规则', '账户类型', '变动数额', '当期余额', '冻结状态', '创建时间', '更新时间']; $fileName = '账户日志-' . date('YmdHis', time()); header("Content-type:application/vnd.ms-excel"); header("Content-Disposition:filename=" . iconv("UTF-8", "GB18030", $fileName) . ".csv"); $fp = fopen('php://output', 'a'); foreach ($header as $i => $v) { $header[$i] = iconv('utf-8', 'GB18030', $v); } fputcsv($fp, $header); $mobile = $request->mobile; $rule_id = $request->rule_id; $nickname = $request->nickname; $start = $request->start; $end = $request->end; $logs = UserAccountLog::when($mobile, function ($query) use ($mobile) { $query->whereHas('user', function ($query) use ($mobile) { $query->where('mobile', 'like', "%{$mobile}%"); }); })->when($nickname, function ($query) use ($nickname) { $query->whereHas('user.info', function ($query) use ($nickname) { $query->where('nickname', 'like', "%{$nickname}%"); }); })->when($rule_id, function ($query) use ($rule_id) { return $query->where('rule_id', $rule_id); })->when($start && $end, function ($query) use ($start, $end) { return $query->whereBetween('created_at', [$start, date('Y-m-d', strtotime("+1 days", strtotime($end)))]); })->when($start && !$end, function ($query) use ($start) { return $query->where('created_at', '>=', $start); })->when(!$start && $end, function ($query) use ($end) { return $query->where('created_at', '<=', date('Y-m-d', strtotime("+1 days", strtotime($end)))); })->with(['user.info', 'rule'])->orderBy('created_at', 'desc'); if ($logs->exists()) { $logs->chunk(200, function ($list) use ($fp) { self::logs_sub($list, $fp); }); } else { self::logs_sub([], $fp); } } private function logs_sub($list, $fp) { $excel_data = []; foreach ($list as $key => $vo) { $excel_data[] = [ $vo->id, $vo->user->mobile . "\t" ?? '', $vo->user->info->nickname . "\t" ?? '', $vo->rule->title ?? '', $vo->type, $vo->variable, $vo->balance, $vo->frozen, $vo->created_at . "\t", $vo->updated_at . "\t", ]; } foreach ($excel_data as $item) { $rows = array(); foreach ($item as $export_obj) { $rows[] = iconv('utf-8', 'GB18030', $export_obj); } fputcsv($fp, $rows); } unset($excel_data); ob_flush(); flush(); } //导出支付列表 public function payments(Request $request) { $header = ['订单编号', '支付单号', '支付方式', '支付状态', '支付金额', '支付时间', '创建时间', '备注']; $fileName = '支付订单记录-' . date('YmdHis', time()); header("Content-type:application/vnd.ms-excel"); header("Content-Disposition:filename=" . iconv("UTF-8", "GB18030", $fileName) . ".csv"); $fp = fopen('php://output', 'a'); foreach ($header as $i => $v) { $header[$i] = iconv('utf-8', 'GB18030', $v); } fputcsv($fp, $header); $orderid = $request->orderid; $trade_no = $request->trade_no; $start = $request->start; $end = $request->end; $payments = Payment::when($trade_no, function ($query) use ($trade_no) { $query->where('trade_no', 'like', "%{$trade_no}%"); })->when($orderid, function ($query) use ($orderid) { $query->whereHas('order', function ($query) use ($orderid) { $query->where('orderid', 'like', "%{$orderid}%"); }); })->when($start && $end, function ($query) use ($start, $end) { return $query->whereBetween('created_at', [$start, date('Y-m-d', strtotime("+1 days", strtotime($end)))]); })->when($start && !$end, function ($query) use ($start) { return $query->where('created_at', '>=', $start); })->when(!$start && $end, function ($query) use ($end) { return $query->where('created_at', '<=', date('Y-m-d', strtotime("+1 days", strtotime($end)))); })->with(['order'])->orderBy('created_at', 'desc'); if ($payments->exists()) { $payments->chunk(200, function ($list) use ($fp) { self::payments_sub($list, $fp); }); } else { self::payments_sub([], $fp); } } private function payments_sub($list, $fp) { $excel_data = []; foreach ($list as $key => $vo) { $excel_data[] = [ $vo->order->orderid . "\t" ?? '', $vo->trade_no . "\t", strip_tags($vo->type_text), strip_tags($vo->state_text), $vo->amount, $vo->paid_at . "\t", $vo->created_at . "\t", $vo->remark . "\t", ]; } foreach ($excel_data as $item) { $rows = array(); foreach ($item as $export_obj) { $rows[] = iconv('utf-8', 'GB18030', $export_obj); } fputcsv($fp, $rows); } unset($excel_data); ob_flush(); flush(); } //导出提现列表 public function withdraws(Request $request) { $header = ['记录ID', '用户手机号', '用户昵称', '提现金额', '实到金额', '状态', '创建时间', '执行时间']; $fileName = '提现记录列表-' . date('YmdHis', time()); header("Content-type:application/vnd.ms-excel"); header("Content-Disposition:filename=" . iconv("UTF-8", "GB18030", $fileName) . ".csv"); $fp = fopen('php://output', 'a'); foreach ($header as $i => $v) { $header[$i] = iconv('utf-8', 'GB18030', $v); } fputcsv($fp, $header); $mobile = $request->mobile; $nickname = $request->nickname; $start = $request->start; $end = $request->end; $withdraws = Withdraw::when($mobile, function ($query) use ($mobile) { $query->whereHas('user', function ($query) use ($mobile) { $query->where('mobile', 'like', "%{$mobile}%"); }); })->when($nickname, function ($query) use ($nickname) { $query->whereHas('user.info', function ($query) use ($nickname) { $query->where('nickname', 'like', "%{$nickname}%"); }); })->when($start && $end, function ($query) use ($start, $end) { return $query->whereBetween('created_at', [$start, date('Y-m-d', strtotime("+1 days", strtotime($end)))]); })->when($start && !$end, function ($query) use ($start) { return $query->where('created_at', '>=', $start); })->when(!$start && $end, function ($query) use ($end) { return $query->where('created_at', '<=', date('Y-m-d', strtotime("+1 days", strtotime($end)))); })->with(['user.info'])->orderBy('created_at', 'desc'); if ($withdraws->exists()) { $withdraws->chunk(200, function ($list) use ($fp) { self::withdraws_sub($list, $fp); }); } else { self::withdraws_sub([], $fp); } } private function withdraws_sub($list, $fp) { $excel_data = []; foreach ($list as $key => $vo) { $excel_data[] = [ $vo->id, $vo->user->mobile . "\t" ?? '', $vo->user->info->nickname . "\t" ?? '', $vo->amount, $vo->take, $vo->state_text, $vo->created_at . "\t", $vo->updated_at . "\t", ]; } foreach ($excel_data as $item) { $rows = array(); foreach ($item as $export_obj) { $rows[] = iconv('utf-8', 'GB18030', $export_obj); } fputcsv($fp, $rows); } unset($excel_data); ob_flush(); flush(); } //导出商品列表 public function goods(Request $request) { $header = ['商户名称', '商品类型', '商品ID', '商品名称', '规格ID', '规格', '售价', '所需积分', '成本价', '库存', '单品重量(kg)', '是否包邮', '开通会员赠品', '满仓赠品', '创建时间', '更新时间']; $fileName = '商品列表-' . date('YmdHis', time()); header("Content-type:application/vnd.ms-excel"); header("Content-Disposition:filename=" . iconv("UTF-8", "GB18030", $fileName) . ".csv"); $fp = fopen('php://output', 'a'); foreach ($header as $i => $v) { $header[$i] = iconv('utf-8', 'GB18030', $v); } fputcsv($fp, $header); $title = $request->title; $seller = $request->seller; $position = $request->position; $is_gift = $request->is_gift; $goods = Goods::when($title, function ($query) use ($title) { $query->where('title', 'like', "%{$title}%"); }) ->when($seller, function ($query) use ($seller) { $query->whereHas('seller', function ($query) use ($seller) { $query->where('name', 'like', "%{$seller}%"); }); }) ->when($is_gift, function ($query) use ($is_gift) { switch ($is_gift) { case 'is_seller_gift': $query->where('is_seller_gift', 1); break; case 'is_mall_gift': $query->where('is_mall_gift', 1); break; } }) ->when($position, function ($query) use ($position) { switch ($position) { case 'is_recommend': $query->where('is_recommend', 1); break; case 'is_hot_sell': $query->where('is_hot_sell', 1); break; case 'is_hot_changed': $query->where('is_hot_changed', 1); break; case 'is_seller_package': $query->where('is_seller_package', 1); break; } }) ->with(['category', 'seller']) ->orderBy('seller_id', 'desc') ->orderBy('status', 'desc')->orderBy('created_at', 'desc'); if ($goods->exists()) { $goods->chunk(200, function ($list) use ($fp) { self::goods_sub($list, $fp); }); } else { self::goods_sub([], $fp); } } private function goods_sub($list, $fp) { $excel_data = []; foreach ($list as $key => $vo) { foreach ($vo->params()->where('status', 1)->get() as $params) { $excel_data[] = [ $vo->seller->name . "\t", $vo->category->title . "\t", $vo->id . "\t", $vo->title, $params->id . "\t" ?? '', $params->value . "\t" ?? '', number_format($params->price - $params->score, 2) . "\t" ?? '', $params->score . "\t" ?? '', $params->cost . "\t" ?? '', $params->stock . "\t" ?? '', $params->heavy . "\t" ?? '', $params->is_free_freight ? '-' : '是', $vo->is_seller_gift ? '是' : '-', $vo->is_mall_gift ? '是' : '-', $vo->created_at . "\t", $vo->updated_at . "\t", ]; } } foreach ($excel_data as $item) { $rows = array(); foreach ($item as $export_obj) { $rows[] = iconv('utf-8', 'GB18030', $export_obj); } fputcsv($fp, $rows); } unset($excel_data); ob_flush(); flush(); } public function report(Request $request) { $header = ['订单编号', '支付单号', '支付类型', '订单类型', '商户名称', '手机号', '用户昵称', '商品信息', '商品数量', '现金单价', '单件积分', '商品总额', '积分抵值', '运费', '总计支付', '成本总计', '商家结算运费', '商家结算', '订单状态', '整体状态', '配送方式', '收件人', '联系电话', '收货地址', '物流公司', '物流单号', '买家留言', '订单备注', '创建时间', '支付时间', '发货时间', '签收时间']; $fileName = '订单列表-' . date('YmdHis', time()); header("Content-type:application/vnd.ms-excel"); header("Content-Disposition:filename=" . iconv("UTF-8", "GB18030", $fileName) . ".csv"); $fp = fopen('php://output', 'a'); foreach ($header as $i => $v) { $header[$i] = iconv('utf-8', 'GB18030', $v); } fputcsv($fp, $header); $orderid = $request->orderid; $mobile = $request->mobile; $nickname = $request->nickname; $start = $request->start; $end = $request->end; $item_type = $request->item_type; $type = $request->type; $seller_id = Admin::id() == 1 ? $request->seller_id : Admin::user()->seller_id; $orders = Order::when($seller_id, function ($q) use ($seller_id) {$q->where('seller_id', $seller_id);}) ->when($orderid, function ($query) use ($orderid) { $query->where('orderid', 'like', "%{$orderid}%"); }) ->when($mobile, function ($query) use ($mobile) { $query->whereHas('user', function ($query) use ($mobile) { $query->where('mobile', 'like', "%{$mobile}%"); }); }) ->when($nickname, function ($query) use ($nickname) { $query->whereHas('user', function ($query) use ($nickname) { return $query->whereHas('info', function ($query) use ($nickname) { $query->where('nickname', 'like', "%{$nickname}%"); }); }); }) ->when($item_type, function ($query) use ($item_type) { return $query->where('item_type', $item_type); })-> whereHas('logs', function ($query) use ($start, $end, $type) { $query->where('state', $type)->when($start && $end, function ($query) use ($start, $end) { $query->whereBetween('created_at', [$start, date('Y-m-d', strtotime("+1 days", strtotime($end)))]); }) ->when($start && !$end, function ($query) use ($start) { $query->where('created_at', '>=', $start); }) ->when((!$start && $end), function ($query) use ($end) { $query->where('created_at', '<=', date('Y-m-d', strtotime("+1 days", strtotime($end)))); }); })->where('state', '<>', Order::ORDER_CLOSED)->with(['seller', 'user.info'])->orderBy('created_at', 'desc'); if ($orders->exists()) { $orders->chunk(200, function ($list) use ($fp) { self::orders_new_sub($list, $fp); }); } else { self::orders_new_sub([], $fp); } } private function orders_new_sub($list, $fp) { $excel_data = []; foreach ($list as $key => $vo) { $type = '商品'; switch ($vo->item_type) { case 'GOODS': $type = '商品'; break; case 'VIP_GIFT': $type = '赠品'; break; case 'FULL_GIFT': $type = '满仓'; break; case 'ACTIVITY_GIFT': $type = '活动'; break; } $vo->pay_sn = ''; $vo->pay_type = ''; $vo->pay = Payment::where('state', 'SUCCESS')->where('order_id', $vo->id)->first(); if ($vo->pay) { $vo->pay_sn = $vo->pay->trade_no; $vo->pay_type = $vo->pay->type; } $vo->log_express = $vo->logs()->where('state', 'PAID|DELIVERED')->first(); $vo->log_signed = $vo->logs()->where('state', 'DELIVERED|SIGNED')->first(); foreach ($vo->details as $kk => $detail) { if ($kk == 0) { $excel_data[] = [ $vo->orderid . "\t", $vo->pay_sn . "\t", $vo->pay_sn ? $vo->pay_type == 'WECHAT' ? '微信' : '余额' : ' ', $type, $vo->seller->name . "\t", $vo->user->mobile . "\t" ?? '', $vo->user->info->nickname . "\t" ?? '', $detail->item->getTitle(), $detail->number, $detail->price - $detail->score, $detail->score, $vo->amount, -$vo->score, $vo->freight, number_format($vo->total - $vo->score, 2), number_format($vo->seller_amount, 2), number_format($vo->seller_freight, 2), number_format($vo->seller_amount + $vo->seller_freight, 2), $vo->state_text, $vo->status_text, $vo->express_type == 1 ? '快递' : '自提', $vo->express->name ?? '', $vo->express->mobile ?? '', $vo->express->address ?? '', $vo->express->company ?? '', !empty($vo->express->number) ? $vo->express->number . "\t" : '', $vo->remark, $vo->remark_mgr, $vo->created_at . "\t" ?? '', $vo->paid_at . "\t" ?? '', $vo->log_express ? $vo->log_express->created_at . "\t" : '', $vo->log_signed ? $vo->log_signed->created_at . "\t" : '', ]; } else { $excel_data[] = [ ' ', ' ', ' ', ' ', ' ', ' ', ' ', $detail->item->getTitle(), $detail->number, $detail->price - $detail->score, $detail->score, ]; } } } foreach ($excel_data as $item) { $rows = array(); foreach ($item as $export_obj) { $rows[] = iconv('utf-8', 'GB18030', $export_obj); } fputcsv($fp, $rows); } unset($excel_data); ob_flush(); flush(); } public function dataReport(Request $request) { $header = ['商户名称', '日期', '商品总数', '订单总数', '商品现金总额', '商品积分总额', '支付现金总额', '消耗积分总额', '订单运费总额', '结算成本', '结算运费', '结算总额']; $type_text = $request->type == 'DELIVERED' ? '发货' : '签收'; $fileName = '每日' . $type_text . '记录-' . date('YmdHis', time()); header("Content-type:application/vnd.ms-excel"); header("Content-Disposition:filename=" . iconv("UTF-8", "GB18030", $fileName) . ".csv"); $fp = fopen('php://output', 'a'); foreach ($header as $i => $v) { $header[$i] = iconv('utf-8', 'GB18030', $v); } fputcsv($fp, $header); $seller_id = Admin::id() == 1 ? $request->seller_id : Admin::user()->seller_id; $start = $request->start; $end = $request->end; $type = $request->type; $reports = SalesReport::when($seller_id, function ($q) use ($seller_id) {$q->where('seller_id', $seller_id);}) ->where('state', $type) ->when($start && $end, function ($query) use ($start, $end) { $query->whereBetween('action_time', [$start, date('Y-m-d', strtotime("+1 days", strtotime($end)))]); }) ->when($start && !$end, function ($query) use ($start) { $query->where('action_time', '>=', $start); }) ->when((!$start && $end), function ($query) use ($end) { $query->where('action_time', '<=', date('Y-m-d', strtotime("+1 days", strtotime($end)))); })->orderBy('seller_id', 'asc')->orderBy('action_time', 'desc'); if ($reports->exists()) { $reports->chunk(200, function ($list) use ($fp) { self::dataReport_sub($list, $fp); }); } else { self::dataReport_sub([], $fp); } } private function dataReport_sub($list, $fp) { $excel_data = []; foreach ($list as $key => $vo) { $excel_data[] = [ $vo->seller->name . "\t", $vo->action_time . "\t" ?? '', $vo->goods_total . "\t" ?? '', $vo->orders_total . "\t" ?? '', number_format($vo->goods_price_total - $vo->goods_score_total, 2) . "\t" ?? '', $vo->goods_score_total . "\t" ?? '', number_format($vo->orders_price - $vo->orders_score, 2) . "\t" ?? '', $vo->orders_score . "\t" ?? '', $vo->orders_freight . "\t" ?? '', $vo->seller_total . "\t" ?? '', $vo->seller_freight . "\t" ?? '', number_format($vo->seller_freight + $vo->seller_total, 2) . "\t" ?? '', ]; } foreach ($excel_data as $item) { $rows = array(); foreach ($item as $export_obj) { $rows[] = iconv('utf-8', 'GB18030', $export_obj); } fputcsv($fp, $rows); } unset($excel_data); ob_flush(); flush(); } //导出续费用户列表 public function payCostUser(Request $request) { $header = ['ID', '微信OPENID', '手机号', '昵称', '等级', '当前推荐', '变更时间', '备注']; $fileName = '续费用户列表-' . date('YmdHis', time()); header("Content-type:application/vnd.ms-excel"); header("Content-Disposition:filename=" . iconv("UTF-8", "GB18030", $fileName) . ".csv"); $fp = fopen('php://output', 'a'); foreach ($header as $i => $v) { $header[$i] = iconv('utf-8', 'GB18030', $v); } fputcsv($fp, $header); $identity = $request->identity; $start = $request->start; $end = $request->end; $mobile = $request->mobile; $nickname = $request->nickname; $users = IdentityLog::where('channel', 'AdminUp') ->when(is_numeric($identity), function ($query) use ($identity) { $query->where('after', $identity); }) ->when($mobile, function ($query) use ($mobile) { $query->whereHas('user_obj', function ($query) use ($mobile) { $query->where('mobile', 'like', "%{$mobile}%"); }); }) ->when($nickname, function ($query) use ($nickname) { $query->whereHas('user_obj', function ($query) use ($nickname) { return $query->whereHas('info', function ($query) use ($nickname) { $query->where('nickname', 'like', "%{$nickname}%"); }); }); })->when($start && $end, function ($query) use ($start, $end) { return $query->whereBetween('created_at', [$start, date('Y-m-d', strtotime("+1 days", strtotime($end)))]); })->when($start && !$end, function ($query) use ($start) { return $query->where('created_at', '>=', $start); })->when(!$start && $end, function ($query) use ($end) { return $query->where('created_at', '<=', date('Y-m-d', strtotime("+1 days", strtotime($end)))); })->orderBy('created_at', 'desc'); if ($users->exists()) { $users->chunk(200, function ($list) use ($fp) { self::payCostUser_sub($list, $fp); }); } else { self::payCostUser_sub([], $fp); } } private function payCostUser_sub($list, $fp) { $excel_data = []; foreach ($list as $key => $vo) { $excel_data[] = [ $vo->id, $vo->user->openid . "\t", $vo->user->mobile . "\t", $vo->user->info->nickname . "\t" ?? '', $vo->identity_title . "\t" ?? '无', $vo->user->identity->activation_childs . "\t" ?? '无', $vo->created_at . "\t" ?? '无', $vo->other['rebates_remark'] ?? '无', ]; } foreach ($excel_data as $item) { $rows = array(); foreach ($item as $export_obj) { $rows[] = iconv('utf-8', 'GB18030', $export_obj); } fputcsv($fp, $rows); } unset($excel_data); ob_flush(); flush(); } }