2023-04-03 15:41:14 +08:00
|
|
|
<?php
|
|
|
|
|
|
|
|
|
|
namespace App\Http\Controllers\Business;
|
|
|
|
|
|
2023-04-04 15:28:56 +08:00
|
|
|
use App\Exports\OrderBlankExport;
|
2023-04-03 15:41:14 +08:00
|
|
|
use App\Http\Controllers\Controller;
|
|
|
|
|
use App\Models\BusinessOrder;
|
2023-04-04 15:28:56 +08:00
|
|
|
use App\Models\Shop;
|
2023-04-03 20:25:57 +08:00
|
|
|
use App\Utils\DateTimeUtils;
|
|
|
|
|
use Carbon\Carbon;
|
2023-04-03 15:41:14 +08:00
|
|
|
use Illuminate\Http\Request;
|
|
|
|
|
use App\Http\Resources\BusinessOrderResource;
|
2023-04-04 15:28:56 +08:00
|
|
|
use Maatwebsite\Excel\Facades\Excel;
|
2023-04-03 15:41:14 +08:00
|
|
|
|
|
|
|
|
class BusinessOrderController extends Controller
|
|
|
|
|
{
|
|
|
|
|
public function index(Request $request)
|
|
|
|
|
{
|
|
|
|
|
$businessOrders = BusinessOrder::query()
|
2023-04-03 21:42:57 +08:00
|
|
|
->where('shop_id', '<>', 8)
|
|
|
|
|
->with([
|
|
|
|
|
'shop:id,name',
|
2023-04-04 15:28:56 +08:00
|
|
|
'items:id,business_order_id,goods_name,goods_number,external_sku_id'
|
2023-04-03 21:42:57 +08:00
|
|
|
])
|
|
|
|
|
->orderByDesc('confirm_at')
|
2023-04-03 15:41:14 +08:00
|
|
|
->filter()
|
|
|
|
|
->paginate($request->get('per_page'));
|
|
|
|
|
|
|
|
|
|
return BusinessOrderResource::collection($businessOrders);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function exportOrderBlank(Request $request)
|
|
|
|
|
{
|
2023-04-03 20:25:57 +08:00
|
|
|
$shopId = $request->get('shop_id');
|
|
|
|
|
$startNo = $request->get('start_no');
|
|
|
|
|
$endNo = $request->get('end_no');
|
2023-04-05 18:59:46 +08:00
|
|
|
$isSupplier = $request->get('is_supplier');
|
|
|
|
|
$field = 'participate_no';
|
|
|
|
|
if ($isSupplier) {
|
|
|
|
|
$field = 'supply_participate_no';
|
|
|
|
|
}
|
|
|
|
|
$startTime = BusinessOrder::query()
|
|
|
|
|
->where('shop_id', $shopId)
|
|
|
|
|
->where('is_supplier', $isSupplier)
|
|
|
|
|
->where($field, $startNo)
|
2023-04-08 16:20:13 +08:00
|
|
|
->orderByDesc('id')
|
2023-04-05 18:59:46 +08:00
|
|
|
->value('confirm_at');
|
|
|
|
|
if (empty($startTime)) {
|
|
|
|
|
exit('开始跟团号订单未查询到或正在同步中,请稍后再次获取');
|
|
|
|
|
}
|
|
|
|
|
$startTime = DateTimeUtils::getMicroTime($startTime);
|
|
|
|
|
$endTime = BusinessOrder::query()
|
|
|
|
|
->where('shop_id', $shopId)
|
|
|
|
|
->where('is_supplier', $isSupplier)
|
|
|
|
|
->where($field, $endNo)
|
2023-04-08 16:20:13 +08:00
|
|
|
->orderByDesc('id')
|
2023-04-05 18:59:46 +08:00
|
|
|
->value('confirm_at');
|
|
|
|
|
if (empty($endTime)) {
|
|
|
|
|
exit('结束跟团号订单未查询到或正在同步中,请稍后再次获取');
|
|
|
|
|
}
|
|
|
|
|
$endTime = DateTimeUtils::getMicroTime($endTime);
|
|
|
|
|
if ($startTime > $endTime) {
|
|
|
|
|
exit('开始跟团号订单 成交时间 大于 结束跟团号订单时间,请查验后再试!');
|
|
|
|
|
}
|
2023-04-03 20:25:57 +08:00
|
|
|
$orders = BusinessOrder::query()
|
|
|
|
|
->with([
|
2023-04-08 16:20:13 +08:00
|
|
|
'items:id,business_order_id,external_sku_id,goods_number,goods_name,already_cancel_number',
|
2023-04-04 15:28:56 +08:00
|
|
|
'items.goodsSkuLocation:id,external_sku_id,location,goods_name'
|
2023-04-03 20:25:57 +08:00
|
|
|
])
|
|
|
|
|
->where('shop_id', $shopId)
|
2023-04-05 18:59:46 +08:00
|
|
|
->where('confirm_at', '>=', $startTime)
|
|
|
|
|
->where('confirm_at', '<=', $endTime)
|
2023-04-03 20:25:57 +08:00
|
|
|
->where('after_sales_status', 0)
|
|
|
|
|
->where('cancel_status', 0)
|
2023-04-05 18:59:46 +08:00
|
|
|
->where('is_supplier', $isSupplier)
|
2023-04-03 20:25:57 +08:00
|
|
|
->orderByDesc('confirm_at')
|
2023-04-05 18:59:46 +08:00
|
|
|
->get(['id', $field]);
|
2023-04-03 20:25:57 +08:00
|
|
|
$distribution = [];
|
|
|
|
|
$no = [];
|
|
|
|
|
foreach ($orders as $key => $order) {
|
2023-04-04 21:16:13 +08:00
|
|
|
$index = $key + 1;
|
2023-04-05 18:59:46 +08:00
|
|
|
$no[] = 'P' . $index . '(' . $order->$field . ')';
|
2023-04-03 20:25:57 +08:00
|
|
|
foreach ($order->items as $item) {
|
2023-04-04 15:28:56 +08:00
|
|
|
$item = $item->toArray();
|
2023-04-08 16:20:13 +08:00
|
|
|
$num = $item['goods_number'] - $item['already_cancel_number'];
|
|
|
|
|
if (empty($item['external_sku_id']) || empty($num)) {
|
2023-04-04 15:28:56 +08:00
|
|
|
continue;
|
|
|
|
|
}
|
2023-04-04 21:16:13 +08:00
|
|
|
$local = $item['goods_sku_location'] ? $item['goods_sku_location']['location'] : '无';
|
2023-04-04 15:28:56 +08:00
|
|
|
$index = $key + 1;
|
2023-04-08 16:20:13 +08:00
|
|
|
$index = "P{$index}*{$num}";
|
2023-04-04 15:28:56 +08:00
|
|
|
[$goodsCode, $skuCode] = explode('_', $item['external_sku_id']);
|
2023-04-03 20:25:57 +08:00
|
|
|
if (isset($distribution[$item['external_sku_id']])) {
|
2023-04-04 15:28:56 +08:00
|
|
|
$distribution[$item['external_sku_id']]['p'][] = $index;
|
2023-04-08 16:20:13 +08:00
|
|
|
$distribution[$item['external_sku_id']]['num'] += $num;
|
2023-04-03 20:25:57 +08:00
|
|
|
} else {
|
|
|
|
|
$distribution[$item['external_sku_id']] = [
|
2023-04-04 15:28:56 +08:00
|
|
|
'p' => [$index],
|
|
|
|
|
'local' => $local,
|
2023-04-08 16:20:13 +08:00
|
|
|
'num' => $num,
|
2023-04-04 15:28:56 +08:00
|
|
|
'goods_name' => $item['goods_name'],
|
|
|
|
|
'goods_code' => $goodsCode,
|
2023-04-04 21:16:13 +08:00
|
|
|
'sku_code' => $skuCode,
|
2023-04-03 20:25:57 +08:00
|
|
|
];
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
2023-04-04 15:28:56 +08:00
|
|
|
$shopName = Shop::query()->where('id', $shopId)->value('name');
|
|
|
|
|
ob_end_clean();
|
|
|
|
|
|
|
|
|
|
return Excel::download(new OrderBlankExport($shopName, $no, $distribution), $shopName . date('Y-m-d H:i:s') . '.xlsx');
|
2023-04-03 20:25:57 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function groupActivity(Request $request, $shopId)
|
|
|
|
|
{
|
|
|
|
|
$todayTime = Carbon::today()->timestamp;
|
|
|
|
|
$todayTime = DateTimeUtils::getMicroTime($todayTime);
|
2023-04-03 15:41:14 +08:00
|
|
|
|
2023-04-03 20:25:57 +08:00
|
|
|
return BusinessOrder::query()
|
|
|
|
|
->where('shop_id', $shopId)
|
|
|
|
|
->where('confirm_at', '>=', $todayTime)
|
2023-04-04 15:28:56 +08:00
|
|
|
->groupBy(['activity_no', 'activity_title'])
|
|
|
|
|
->get(['activity_title', 'activity_no'])
|
2023-04-03 20:25:57 +08:00
|
|
|
->toArray();
|
2023-04-03 15:41:14 +08:00
|
|
|
}
|
|
|
|
|
}
|