0
0
Files
Babyclass/app/Admin/Controllers/DataExportController.php
2020-08-04 10:09:42 +08:00

1108 lines
44 KiB
PHP

<?php
namespace App\Admin\Controllers;
use Admin;
use App\Models\Goods;
use App\Models\GoodsParams;
use App\Models\Payment;
use App\Models\SalesReport;
use App\Models\Withdraw;
use App\User;
use Illuminate\Http\Request;
use RuLong\Identity\Models\IdentityLog;
use RuLong\Order\Models\Order;
use RuLong\UserAccount\Models\UserAccount;
use RuLong\UserAccount\Models\UserAccountLog;
class DataExportController extends Controller
{
//导出用户列表
public function user(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);
$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();
}
}