小程序导出账单接口
This commit is contained in:
@@ -3,12 +3,15 @@
|
||||
namespace App\Http\Controllers\Mini;
|
||||
|
||||
use App\Exceptions\RepositoryException;
|
||||
use App\Exports\BillExport;
|
||||
use App\Models\BillModel;
|
||||
use App\Services\BillDetailService;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
use Illuminate\Http\Request;
|
||||
use Maatwebsite\Excel\Facades\Excel;
|
||||
use Modules\AnnoRoute\Attribute\GetRoute;
|
||||
use Modules\AnnoRoute\Attribute\RequestAttribute;
|
||||
use Symfony\Component\HttpFoundation\Response;
|
||||
|
||||
/**
|
||||
* 小程序门店账单(采购单完成后由后台生成,门店端只读)
|
||||
@@ -84,6 +87,46 @@ class BillController extends BaseMiniController
|
||||
return $this->success($data);
|
||||
}
|
||||
|
||||
/**
|
||||
* 合并导出账单(静态路由放在 /bill/{id} 之前声明)
|
||||
* 仅可导出本店账单(强制 store_id 过滤,张数不匹配说明混入无效账单整批拒绝);
|
||||
* ?ids=1,2,3 必选(1~100 张);?category_id= 一级分类过滤(0/缺省=全部)
|
||||
*/
|
||||
#[GetRoute('/bill/export', authorize: true)]
|
||||
public function export(Request $request): Response
|
||||
{
|
||||
$data = $request->validate([
|
||||
'ids' => 'required|string',
|
||||
'category_id' => 'nullable|integer|min:0',
|
||||
]);
|
||||
|
||||
$user = $this->currentUser($request);
|
||||
$store = $this->ensureStoreBound($user);
|
||||
|
||||
$ids = array_values(array_unique(array_filter(array_map('intval', explode(',', (string) $data['ids'])))));
|
||||
if ($ids === [] || count($ids) > 100) {
|
||||
throw new RepositoryException('请选择 1~100 张账单');
|
||||
}
|
||||
|
||||
$bills = BillModel::with('store:id,name')
|
||||
->where('store_id', $store->id)
|
||||
->whereIn('id', $ids)
|
||||
->orderBy('bill_date')
|
||||
->orderBy('id')
|
||||
->get();
|
||||
if ($bills->isEmpty()) {
|
||||
throw new RepositoryException('账单不存在');
|
||||
}
|
||||
if ($bills->count() !== count($ids)) {
|
||||
throw new RepositoryException('存在无效账单,请刷新后重试');
|
||||
}
|
||||
|
||||
return Excel::download(
|
||||
new BillExport($bills, (int) ($data['category_id'] ?? 0)),
|
||||
'门店账单_' . now()->format('Ymd_His') . '.xlsx'
|
||||
);
|
||||
}
|
||||
|
||||
/** 账单详情(校验归属:仅能查看本店账单;含合并后的商品明细与关联订单) */
|
||||
#[GetRoute('/bill/{id}', authorize: true, where: ['id' => '[0-9]+'])]
|
||||
public function detail(int $id, Request $request): JsonResponse
|
||||
|
||||
@@ -3,14 +3,17 @@
|
||||
namespace App\Http\Controllers\Recon;
|
||||
|
||||
use App\Exceptions\RepositoryException;
|
||||
use App\Exports\BillExport;
|
||||
use App\Models\BillModel;
|
||||
use App\Services\BillDetailService;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
use Illuminate\Http\Request;
|
||||
use Maatwebsite\Excel\Facades\Excel;
|
||||
use Modules\AnnoRoute\Attribute\GetRoute;
|
||||
use Modules\AnnoRoute\Attribute\PutRoute;
|
||||
use Modules\AnnoRoute\Attribute\RequestAttribute;
|
||||
use Modules\Common\Http\Controllers\BaseController;
|
||||
use Symfony\Component\HttpFoundation\Response;
|
||||
|
||||
/**
|
||||
* 门店账单管理(采购单完成后按门店生成,后台查看 + 线下收款登记)
|
||||
@@ -55,6 +58,38 @@ class BillController extends BaseController
|
||||
return $this->success($data);
|
||||
}
|
||||
|
||||
/**
|
||||
* 合并导出:勾选账单跨账单按商品合并明细(可按一级分类过滤),
|
||||
* 表尾汇总商品金额/配送费/附加金额/总金额
|
||||
*/
|
||||
#[GetRoute(route: '/export', authorize: 'export')]
|
||||
public function export(Request $request): Response
|
||||
{
|
||||
$data = $request->validate([
|
||||
'ids' => 'required|string',
|
||||
'category_id' => 'nullable|integer|min:0',
|
||||
]);
|
||||
|
||||
$ids = array_values(array_filter(array_map('intval', explode(',', (string) $data['ids']))));
|
||||
if ($ids === [] || count($ids) > 100) {
|
||||
throw new RepositoryException('请选择 1~100 张账单');
|
||||
}
|
||||
|
||||
$bills = BillModel::with('store:id,name')
|
||||
->whereIn('id', $ids)
|
||||
->orderBy('bill_date')
|
||||
->orderBy('id')
|
||||
->get();
|
||||
if ($bills->isEmpty()) {
|
||||
throw new RepositoryException('账单不存在');
|
||||
}
|
||||
|
||||
return Excel::download(
|
||||
new BillExport($bills, (int) ($data['category_id'] ?? 0)),
|
||||
'门店账单_' . now()->format('Ymd_His') . '.xlsx'
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* 账单详情:账单信息 + 合并后的商品明细(按商品聚合)+ 关联订单
|
||||
*/
|
||||
|
||||
Reference in New Issue
Block a user