From 839968cd08c5735fae618437587f75d058d2158f Mon Sep 17 00:00:00 2001 From: weizong song Date: Mon, 2 Mar 2026 14:30:38 +0800 Subject: [PATCH] up --- app/Console/Commands/CheckOrderFee.php | 27 ++- .../Controllers/Admin/HolidayController.php | 101 ++++++++++ app/Models/Holiday.php | 5 + .../views/admin/holiday/create.blade.php | 172 ++++++++++++++++++ resources/views/admin/holiday/index.blade.php | 55 ++++++ resources/views/admin/project/index.blade.php | 4 + routes/web.php | 2 +- 7 files changed, 360 insertions(+), 6 deletions(-) create mode 100644 app/Http/Controllers/Admin/HolidayController.php create mode 100644 resources/views/admin/holiday/create.blade.php create mode 100644 resources/views/admin/holiday/index.blade.php diff --git a/app/Console/Commands/CheckOrderFee.php b/app/Console/Commands/CheckOrderFee.php index ccf6999..898642d 100644 --- a/app/Console/Commands/CheckOrderFee.php +++ b/app/Console/Commands/CheckOrderFee.php @@ -2,6 +2,7 @@ namespace App\Console\Commands; +use App\Models\Holiday; use App\Models\OrderItems; use Carbon\Carbon; use Illuminate\Console\Command; @@ -16,7 +17,8 @@ class CheckOrderFee extends Command protected $signature = 'order-items:check-fee {start_date : 开始日期,格式为 YYYY-MM-DD} {end_date : 结束日期,格式为 YYYY-MM-DD} - {--project_id= : 只检测指定项目的订单} + {project_id? : 可选,指定项目 ID} + {--project_id= : 只检测指定项目的订单,兼容旧用法} {--limit=50 : 表格展示的最大行数}'; /** @@ -47,7 +49,7 @@ class CheckOrderFee extends Command return 1; } - $projectId = $this->option('project_id'); + $projectId = $this->argument('project_id') ?: $this->option('project_id'); $limit = (int) $this->option('limit'); $limit = $limit > 0 ? $limit : 50; @@ -60,7 +62,7 @@ class CheckOrderFee extends Command $query = OrderItems::query() ->whereBetween('service_date', [$startDate->toDateString(), $endDate->toDateString()]) - ->with(['order', 'product']); + ->with(['order.project', 'product']); if ($projectId) { $query->whereHas('order', function ($q) use ($projectId) { @@ -68,14 +70,27 @@ class CheckOrderFee extends Command }); } + $holidayRatios = Holiday::query() + ->whereBetween('date', [$startDate->toDateString(), $endDate->toDateString()]) + ->when($projectId, function ($q) use ($projectId) { + $q->where('project_id', $projectId); + }) + ->get(['project_id', 'date', 'price_ratio']) + ->keyBy(function ($holiday) { + return $holiday->project_id . ':' . $holiday->date; + }); + $total = 0; $rowsForTable = []; - $query->chunkById(200, function ($items) use (&$total, &$rowsForTable, $limit) { + $query->chunkById(200, function ($items) use (&$total, &$rowsForTable, $limit, $holidayRatios) { foreach ($items as $item) { /** @var \App\Models\OrderItems $item */ $total++; $storedFee = (float) $item->fee; + $projectId = optional($item->order)->project_id; + $holidayKey = $projectId . ':' . $item->service_date; + $holidayRatio = optional($holidayRatios->get($holidayKey))->price_ratio; $calcItem = clone $item; if ($item->relationLoaded('order')) { @@ -92,7 +107,9 @@ class CheckOrderFee extends Command $rowsForTable[] = [ 'ID' => $item->id, '订单ID' => $item->order_id, + '项目名称' => optional(optional($item->order)->project)->name ?? '', '日期' => $item->service_date, + '节假日倍率' => $holidayRatio ?? '', '总价' => $item->total, '原fee' => $storedFee, '算法fee' => $calculatedFee, @@ -106,7 +123,7 @@ class CheckOrderFee extends Command $this->info('该时间段无子订单记录'); } else { $this->table( - ['ID', '订单ID', '日期', '总价', '原fee', '算法fee', '是否扣款'], + ['ID', '订单ID', '项目名称', '日期', '节假日倍率', '总价', '原fee', '算法fee', '是否扣款'], $rowsForTable ); } diff --git a/app/Http/Controllers/Admin/HolidayController.php b/app/Http/Controllers/Admin/HolidayController.php new file mode 100644 index 0000000..8fa4f04 --- /dev/null +++ b/app/Http/Controllers/Admin/HolidayController.php @@ -0,0 +1,101 @@ +model + ->with("project") + ->when($request->project_id, function ($query) use ($request) { + $query->where("project_id", $request->project_id); + }) + ->orderBy("date", "desc") + ->orderBy("id", "desc") + ->paginate(10); + + return view($this->bladePath . ".index", compact("data")); + } + + public function create(FormBuilder $formBuilder) + { + $projects = Project::orderBy("id", "desc")->get(); + $holiday = new Holiday(); + if (request()->project_id) { + $holiday->project_id = request()->project_id; + } + $isEdit = false; + return view($this->bladePath . ".create", compact("projects", "holiday", "isEdit")); + } + + public function store(Request $request) + { + $request->validate([ + "project_id" => "required|integer", + "price_ratio" => "required|numeric|min:0", + "dates" => "required|array|min:1", + "dates.*" => "required|date_format:Y-m-d", + "remark" => "nullable|string", + ], [ + "dates.required" => "请至少选择一个日期", + "dates.min" => "请至少选择一个日期", + ]); + + $dates = collect($request->dates)->filter()->unique()->values(); + foreach ($dates as $date) { + Holiday::updateOrCreate( + [ + "project_id" => $request->project_id, + "date" => $date, + ], + [ + "price_ratio" => $request->price_ratio, + "remark" => $request->remark, + ] + ); + } + + $url = url($this->urlPrefix . "?project_id=" . $request->project_id); + return $this->success("保存成功,共处理 {$dates->count()} 个日期", $url); + } + + public function edit($id = null, Request $request, FormBuilder $formBuilder) + { + $projects = Project::orderBy("id", "desc")->get(); + $holiday = $this->model->find($id ?: $request->id); + $isEdit = true; + return view($this->bladePath . ".create", compact("projects", "holiday", "isEdit")); + } + + public function update($id = null, Request $request) + { + $request->validate([ + "project_id" => "required|integer", + "price_ratio" => "required|numeric|min:0", + "date" => "required|date_format:Y-m-d", + "remark" => "nullable|string", + ]); + + $holiday = $this->model->find($id ?: $request->id); + $holiday->update([ + "project_id" => $request->project_id, + "date" => $request->date, + "price_ratio" => $request->price_ratio, + "remark" => $request->remark, + ]); + + $url = url($this->urlPrefix . "?project_id=" . $request->project_id); + return $this->success("修改成功", $url); + } +} diff --git a/app/Models/Holiday.php b/app/Models/Holiday.php index e130a7a..4f6d298 100755 --- a/app/Models/Holiday.php +++ b/app/Models/Holiday.php @@ -5,4 +5,9 @@ namespace App\Models; class Holiday extends SoftDeletesModel { protected $table = "holiday"; + + public function project() + { + return $this->belongsTo(Project::class); + } } diff --git a/resources/views/admin/holiday/create.blade.php b/resources/views/admin/holiday/create.blade.php new file mode 100644 index 0000000..fc3dca1 --- /dev/null +++ b/resources/views/admin/holiday/create.blade.php @@ -0,0 +1,172 @@ +@extends("admin.layouts.layout") + +@php + $pageTitle = ($isEdit ? "编辑" : "新增") . $modelName; +@endphp + +@section("content") +
+
+
+
+ @if ($errors->any()) +
+ @foreach ($errors->all() as $error) +
{{ $error }}
+ @endforeach +
+ @endif + +
+ @csrf +
+ + +
+ + @if($isEdit) +
+ + +
+ @else +
+ +
+ +
+ +
+
+ 可连续选择多个日期,加入后会在下方列表展示。 +
+ +
+ +
+
+
+ @endif + +
+ + +
+ +
+ + +
+ + + 返回 +
+
+
+
+
+@endsection + +@push("footer") + +@endpush diff --git a/resources/views/admin/holiday/index.blade.php b/resources/views/admin/holiday/index.blade.php new file mode 100644 index 0000000..3063ec0 --- /dev/null +++ b/resources/views/admin/holiday/index.blade.php @@ -0,0 +1,55 @@ +@extends("admin.layouts.layout") + +@section("content") +
+
+
+
+ + + + + + + + + + + + + + + @foreach ($data as $row) + + + + + + + + + @endforeach + +
ID项目名称日期节假日倍率备注操作
{{ $row->id }}{{ optional($row->project)->name }}{{ $row->date }}{{ $row->price_ratio }}{{ $row->remark }} + @lang("icons.action_edit") @lang("actions.edit") + @lang("icons.action_delete") @lang("actions.delete") +
+ @include("public._pages") +
+
+
+
+ + @include("public._delete") +@endsection diff --git a/resources/views/admin/project/index.blade.php b/resources/views/admin/project/index.blade.php index 5c37d27..cf95ba0 100755 --- a/resources/views/admin/project/index.blade.php +++ b/resources/views/admin/project/index.blade.php @@ -52,6 +52,10 @@ 床位管理 + + 节假日倍率 + 护士长满意度调查 "Admin", "prefix" => "admin"], function () { Route::post("role/set-permissions", 'RoleController@setPermissions'); \App\Models\CommonModel::generateCurdRouter("ProjectController", "project"); + \App\Models\CommonModel::generateCurdRouter("HolidayController", "project/holiday"); Route::get("project/beds/{id}", 'ProjectController@beds'); Route::get("project/get-subs", 'ProjectController@getSubs'); Route::post("project/create-sub", 'ProjectController@createSub'); @@ -236,4 +237,3 @@ Route::group(["namespace" => "Worker", "prefix" => "worker"], function () { Route::get('get-order/{id}', 'OrdersController@getOrder'); }); }); -