From baeb2a026b99d255e6d4138ad0f39f954de47c80 Mon Sep 17 00:00:00 2001 From: panliang <1163816051@qq.com> Date: Mon, 23 May 2022 10:20:19 +0800 Subject: [PATCH] =?UTF-8?q?=E8=AE=A2=E5=8D=95=E7=94=9F=E6=88=90=E6=8F=90?= =?UTF-8?q?=E6=88=90=E8=AE=B0=E5=BD=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 1 + .../Controllers/ProductCategoryController.php | 10 ++--- .../Controllers/ProductSpuController.php | 3 +- .../Controllers/SalesValueLogController.php | 19 +++++---- app/Admin/Repositories/SalesValueLog.php | 16 -------- app/Admin/routes.php | 4 +- ...istributeOrder.php => OrderDistribute.php} | 18 +++++++-- app/Models/SalesValueLog.php | 5 +++ app/Services/DistributeService.php | 39 ++++++++++++++++--- app/Services/OrderService.php | 2 - config/admin.php | 4 +- database/seeders/AppSettingSeeder.php | 2 +- 12 files changed, 74 insertions(+), 49 deletions(-) delete mode 100644 app/Admin/Repositories/SalesValueLog.php rename app/Console/Commands/{DistributeOrder.php => OrderDistribute.php} (61%) diff --git a/README.md b/README.md index d9158610..c47b4d0e 100644 --- a/README.md +++ b/README.md @@ -15,3 +15,4 @@ - 自动取消未支付的订单: `php artisan order:close-expired`, 常驻内存执行(死循环) - 自动完成待收货的订单: `php artisan order:complete`, 常驻内存执行(死循环) +- 生成订单的提成记录: `php artisan order:distribute` diff --git a/app/Admin/Controllers/ProductCategoryController.php b/app/Admin/Controllers/ProductCategoryController.php index d1ede5f6..6daf670a 100644 --- a/app/Admin/Controllers/ProductCategoryController.php +++ b/app/Admin/Controllers/ProductCategoryController.php @@ -145,12 +145,12 @@ class ProductCategoryController extends AdminController public function categories(Request $request) { - $parent_id = (int) $request->input('q'); $query = ProductCategoryModel::select('id', 'name as text'); - if ($parent_id) { - $query->where('parent_id', $parent_id); - } else { - $query->whereNull('parent_id'); + if ($request->filled('pid')) { + $query->where('parent_id', $request->input('pid')); + } + if ($request->filled('level')) { + $query->withDepth()->having('depth', '=', $request->input('level')); } $data = $query->get(); return response()->json($data); diff --git a/app/Admin/Controllers/ProductSpuController.php b/app/Admin/Controllers/ProductSpuController.php index a556e2e9..e7e25e64 100644 --- a/app/Admin/Controllers/ProductSpuController.php +++ b/app/Admin/Controllers/ProductSpuController.php @@ -9,6 +9,7 @@ use App\Exceptions\BizException; use App\Models\ProductBuynote; use App\Models\ProductFeature; use App\Models\ProductGroup; +use App\Models\ProductCategory; use App\Models\ProductSpu as ProductSpuModel; use App\Models\ShippingTemplate; use Carbon\Carbon; @@ -131,7 +132,7 @@ class ProductSpuController extends AdminController if ($form->isCreating()) { // $form->select('one_category')->options(admin_route('api.product_categories'))->load('two_category', admin_route('api.product_categories')); // $form->select('two_category')->load('category_id', admin_route('api.product_categories')); - $form->select('category_id')->options(admin_route('api.product_categories', ['q'=>2]))->required(); + $form->select('category_id')->options(admin_route('api.product_categories', ['level' => 2]))->required(); } $form->text('name')->required(); $form->text('subtitle'); diff --git a/app/Admin/Controllers/SalesValueLogController.php b/app/Admin/Controllers/SalesValueLogController.php index 68bc492b..3cf52456 100644 --- a/app/Admin/Controllers/SalesValueLogController.php +++ b/app/Admin/Controllers/SalesValueLogController.php @@ -2,7 +2,7 @@ namespace App\Admin\Controllers; -use App\Admin\Repositories\SalesValueLog; +use App\Models\SalesValueLog; use Dcat\Admin\Form; use Dcat\Admin\Grid; use Dcat\Admin\Http\Controllers\AdminController; @@ -17,21 +17,20 @@ class SalesValueLogController extends AdminController */ protected function grid() { - $builder = SalesValueLog::with(['user', 'user.userInfo']); - return Grid::make($builder, function (Grid $grid) { - // $grid->column('id')->sortable(); - $grid->column('user.phone'); - $grid->column('user.userInfo.nickname'); - // $grid->column('order_id'); - // $grid->column('order_user_id'); + $builder = SalesValueLog::with(['user', 'order']); + return Grid::make($builder, function ($grid) { + $grid->model()->latest('created_at'); + $grid->column('user.phone', '用户'); + $grid->column('order.sn', '订单号'); $grid->column('change_sales_value'); $grid->column('remarks'); $grid->column('created_at'); - $grid->column('updated_at')->sortable(); + + $grid->disableActions(); $grid->filter(function (Grid\Filter $filter) { $filter->panel(false); - $filter->equal('user.phone')->width(3); + $filter->equal('user.phone', '用户')->width(3); $filter->between('created_at')->dateTime()->width(7); }); }); diff --git a/app/Admin/Repositories/SalesValueLog.php b/app/Admin/Repositories/SalesValueLog.php deleted file mode 100644 index 85a10305..00000000 --- a/app/Admin/Repositories/SalesValueLog.php +++ /dev/null @@ -1,16 +0,0 @@ -get('import-job-logs', 'ImportJobLogController@index')->name('import_job_logs.index'); - $router->resource('sales-value-logs', 'SalesValueLogController')->only( - ['index'] - )->names('sales_value_logs'); + $router->resource('sales-value-logs', 'SalesValueLogController')->only(['index'])->names('sales_value_logs'); //商城端-砍价活动 $router->resource('bargain-activities', 'BargainActivityController')->names('bargain_activities'); diff --git a/app/Console/Commands/DistributeOrder.php b/app/Console/Commands/OrderDistribute.php similarity index 61% rename from app/Console/Commands/DistributeOrder.php rename to app/Console/Commands/OrderDistribute.php index e0cb7546..7d5aeeed 100644 --- a/app/Console/Commands/DistributeOrder.php +++ b/app/Console/Commands/OrderDistribute.php @@ -7,14 +7,14 @@ use App\Models\Order; use Illuminate\Support\Facades\DB; use Throwable; -class DistributeOrder extends Command +class OrderDistribute extends Command { /** * The name and signature of the console command. * * @var string */ - protected $signature = 'distribute:order {order}'; + protected $signature = 'order:distribute {order?}'; /** * The console command description. @@ -41,11 +41,21 @@ class DistributeOrder extends Command public function handle() { $service = new \App\Services\DistributeService(); - $order = Order::find($this->argument('order')); try { DB::beginTransaction(); + $query = Order::completable(); + if ($id = $this->argument('order')) { + $query->whereIn('id', explode(',', $id)); + } + $orders = $query->get(); + $this->line('总数: ' . $orders->count()); + $count = 0; + foreach($orders as $order) { + $profit = $service->storeByOrder($order); + $count++; + } + $this->info('符合要求: ' . $count); DB::commit(); - $service->storeByOrder($order); } catch (Throwable $th) { DB::rollBack(); $this->line($th); diff --git a/app/Models/SalesValueLog.php b/app/Models/SalesValueLog.php index 6632c9dd..4a9549c6 100644 --- a/app/Models/SalesValueLog.php +++ b/app/Models/SalesValueLog.php @@ -34,4 +34,9 @@ class SalesValueLog extends Model { return $this->belongsTo(User::class); } + + public function order() + { + return $this->belongsTo(Order::class); + } } diff --git a/app/Services/DistributeService.php b/app/Services/DistributeService.php index af6db38d..a41adaeb 100644 --- a/app/Services/DistributeService.php +++ b/app/Services/DistributeService.php @@ -13,16 +13,15 @@ use App\Exceptions\BizException; class DistributeService { /** - * 用户下单后, 更新成长值, 添加返现记录 + * 根据订单, 更新成长值, 添加返现记录 * * @param \App\Models\Order $order * - * @return mixed + * @return \App\Models\OrderProfit */ public function storeByOrder(Order $order) { - // 订单已取消, 换货后生成的新订单 - if ($order->isCancelled() || $order->is_change) { + if (!$this->canDistribute($order)) { return false; } // 订单成长值 @@ -94,7 +93,37 @@ class DistributeService $order->update([ 'profit' => $money_sum ]); - $order->profits()->createMany($profit_list); + return $order->profits()->createMany($profit_list); + } + + /** + * 判断订单是否可以生成返利 + * + * @param \App\Models\Order $order + * + * @return boolean + */ + public function canDistribute(Order $order) + { + // 订单已取消, 换货后生成的新订单 + if ($order->isCancelled() || $order->is_change) { + return false; + } + // 订单确认收货 + if (!$order->isCompleted()) { + return false; + } + // 已经生成过返利记录 + if ($order->profits()->exists()) { + return false; + } + // 订单超过售后期限 + $value = app_setting('sale_after_expire_days'); + if ($value && $order->completed_at) { + $diff_day = $order->completed_at->diffInDays(); + return $diff_day > $value; + } + return true; } /** diff --git a/app/Services/OrderService.php b/app/Services/OrderService.php index 7e445c27..c684db65 100644 --- a/app/Services/OrderService.php +++ b/app/Services/OrderService.php @@ -1146,8 +1146,6 @@ class OrderService 'status' => Order::STATUS_COMPLETED, 'completed_at' => now(), ]); - - (new DistributeService())->storeByOrder($order); } /** diff --git a/config/admin.php b/config/admin.php index a1d66031..77560b47 100644 --- a/config/admin.php +++ b/config/admin.php @@ -11,7 +11,7 @@ return [ | login page. | */ - 'name' => '子春生-管理后台', + 'name' => '积趣-管理后台', /* |-------------------------------------------------------------------------- @@ -22,7 +22,7 @@ return [ | `img` tag, eg 'Admin logo'. | */ - 'logo' => '  子春生-管理后台', + 'logo' => '  积趣-管理后台', /* |-------------------------------------------------------------------------- diff --git a/database/seeders/AppSettingSeeder.php b/database/seeders/AppSettingSeeder.php index cce94202..d7f404c5 100644 --- a/database/seeders/AppSettingSeeder.php +++ b/database/seeders/AppSettingSeeder.php @@ -19,7 +19,7 @@ class AppSettingSeeder extends Seeder foreach ([ 'app'=> [ 'value'=> [ - 'app_name' => '子春生', + 'app_name' => '积趣', 'ios_link' => '', 'android_link' => '', 'merchant_link' => '',