From 8ec8067174508dc48cf7dde04f8c122a8122e4c3 Mon Sep 17 00:00:00 2001 From: panliang <1163816051@qq.com> Date: Sat, 7 May 2022 17:31:44 +0800 Subject: [PATCH] 1 --- app/Admin/Controllers/SettingController.php | 85 +++++-------------- app/Admin/Forms/Settings/Distribution.php | 68 +++++++++++++++ app/Endpoint/Api/Filters/ProductSkuFilter.php | 4 +- .../Controllers/Account/UserController.php | 3 + app/Services/DistributeService.php | 67 +++++++++++++++ database/seeders/DatabaseSeeder.php | 1 + database/seeders/ShippingSeeder.php | 28 ++++++ 7 files changed, 189 insertions(+), 67 deletions(-) create mode 100644 app/Admin/Forms/Settings/Distribution.php create mode 100644 app/Services/DistributeService.php create mode 100644 database/seeders/ShippingSeeder.php diff --git a/app/Admin/Controllers/SettingController.php b/app/Admin/Controllers/SettingController.php index 9b585b78..e54250a2 100644 --- a/app/Admin/Controllers/SettingController.php +++ b/app/Admin/Controllers/SettingController.php @@ -9,6 +9,7 @@ use App\Admin\Forms\Settings\Ios; use App\Admin\Forms\Settings\Kuaidi100; use App\Admin\Forms\Settings\Unipush; use App\Admin\Forms\Settings\Withdraw; +use App\Admin\Forms\Settings\Distribution; use App\Admin\Repositories\Setting; use Dcat\Admin\Admin; use Dcat\Admin\Form; @@ -107,72 +108,24 @@ class SettingController extends AdminController ->body(function (Row $row) { $type = Request::query('type', 'app'); $tab = new Tab(); - switch ($type) { - case 'app': - $tab->add('系统配置', new App(), true); - $tab->addLink('提现配置', admin_route('settings.index', ['type'=>'withdraw'])); - $tab->addLink('Ios配置', admin_route('settings.index', ['type'=>'ios'])); - $tab->addLink('Android配置', admin_route('settings.index', ['type'=>'ios'])); - $tab->addLink('快递100配置', admin_route('settings.index', ['type'=>'kuaidi100'])); - $tab->addLink('Uni-push配置', admin_route('settings.index', ['type'=>'unipush'])); - $tab->addLink('自定义配置', admin_route('settings.index', ['type'=>'custom'])); - break; - case 'withdraw': - $tab->addLink('系统配置', admin_route('settings.index', ['type'=>'app'])); - $tab->add('提现配置', new Withdraw(), true); - $tab->addLink('Ios配置', admin_route('settings.index', ['type'=>'ios'])); - $tab->addLink('Android配置', admin_route('settings.index', ['type'=>'android'])); - $tab->addLink('快递100配置', admin_route('settings.index', ['type'=>'kuaidi100'])); - $tab->addLink('Uni-push配置', admin_route('settings.index', ['type'=>'unipush'])); - $tab->addLink('自定义配置', admin_route('settings.index', ['type'=>'custom'])); - break; - case 'ios': - $tab->addLink('系统配置', admin_route('settings.index', ['type'=>'app'])); - $tab->addLink('提现配置', admin_route('settings.index', ['type'=>'withdraw'])); - $tab->add('Ios配置', new Ios(), true); - $tab->addLink('Android配置', admin_route('settings.index', ['type'=>'android'])); - $tab->addLink('快递100配置', admin_route('settings.index', ['type'=>'kuaidi100'])); - $tab->addLink('Uni-push配置', admin_route('settings.index', ['type'=>'unipush'])); - $tab->addLink('自定义配置', admin_route('settings.index', ['type'=>'custom'])); - break; - case 'android': - $tab->addLink('系统配置', admin_route('settings.index', ['type'=>'app'])); - $tab->addLink('提现配置', admin_route('settings.index', ['type'=>'withdraw'])); - $tab->addLink('Ios配置', admin_route('settings.index', ['type'=>'ios'])); - $tab->add('Android配置', new Android(), true); - $tab->addLink('快递100配置', admin_route('settings.index', ['type'=>'kuaidi100'])); - $tab->addLink('Uni-push配置', admin_route('settings.index', ['type'=>'unipush'])); - $tab->addLink('自定义配置', admin_route('settings.index', ['type'=>'custom'])); - break; - case 'kuaidi100': - $tab->addLink('系统配置', admin_route('settings.index', ['type'=>'app'])); - $tab->addLink('提现配置', admin_route('settings.index', ['type'=>'withdraw'])); - $tab->addLink('Ios配置', admin_route('settings.index', ['type'=>'ios'])); - $tab->addLink('Android配置', admin_route('settings.index', ['type'=>'android'])); - $tab->add('快递100配置', new Kuaidi100(), true); - $tab->addLink('Uni-push配置', admin_route('settings.index', ['type'=>'unipush'])); - $tab->addLink('自定义配置', admin_route('settings.index', ['type'=>'custom'])); - break; - case 'unipush': - $tab->addLink('系统配置', admin_route('settings.index', ['type'=>'app'])); - $tab->addLink('提现配置', admin_route('settings.index', ['type'=>'withdraw'])); - $tab->addLink('Ios配置', admin_route('settings.index', ['type'=>'ios'])); - $tab->addLink('Android配置', admin_route('settings.index', ['type'=>'android'])); - $tab->addLink('快递100配置', admin_route('settings.index', ['type'=>'kuaidi100'])); - $tab->add('Uni-push配置', new Unipush(), true); - $tab->addLink('自定义配置', admin_route('settings.index', ['type'=>'custom'])); - break; - case 'custom': - $tab->addLink('系统配置', admin_route('settings.index', ['type'=>'app'])); - $tab->addLink('提现配置', admin_route('settings.index', ['type'=>'withdraw'])); - $tab->addLink('Ios配置', admin_route('settings.index', ['type'=>'ios'])); - $tab->addLink('Android配置', admin_route('settings.index', ['type'=>'android'])); - $tab->addLink('快递100配置', admin_route('settings.index', ['type'=>'kuaidi100'])); - $tab->addLink('Uni-push配置', admin_route('settings.index', ['type'=>'unipush'])); - $tab->add('自定义配置', new Custom(), true); - break; - default: - break; + $tabs = [ + 'app' => ['name' => '系统配置', 'form' => new App(), 'route' => admin_route('settings.index', ['type'=>'app'])], + 'withdraw' => ['name' => '提现配置', 'form' => new Withdraw(), 'route' => admin_route('settings.index', ['type'=>'withdraw'])], + 'ios' => ['name' => 'IOS配置', 'form' => new Ios(), 'route' => admin_route('settings.index', ['type'=>'ios'])], + 'android' => ['name' => 'Android配置', 'form' => new Android(), 'route' => admin_route('settings.index', ['type'=>'android'])], + 'kuaidi100' => ['name' => '快递100配置', 'form' => new Kuaidi100(), 'route' => admin_route('settings.index', ['type'=>'kuaidi100'])], + 'unipush' => ['name' => 'Uni-push配置', 'form' => new Unipush(), 'route' => admin_route('settings.index', ['type'=>'unipush'])], + 'distribution' => ['name' => '分销配置', 'form' => new Distribution(), 'route' => admin_route('settings.index', ['type'=>'distribution'])], + 'custom' => ['name' => '自定义配置', 'form' => new Custom(), 'route' => admin_route('settings.index', ['type'=>'custom'])], + ]; + if (isset($tabs[$type])) { + foreach($tabs as $key => $item) { + if ($key === $type) { + $tab->add($item['name'], $item['form'], true); + } else { + $tab->addLink($item['name'], $item['route']); + } + } } $row->column(12, $tab->withCard()); }); diff --git a/app/Admin/Forms/Settings/Distribution.php b/app/Admin/Forms/Settings/Distribution.php new file mode 100644 index 00000000..2f0b484c --- /dev/null +++ b/app/Admin/Forms/Settings/Distribution.php @@ -0,0 +1,68 @@ +updateOrCreate([ + 'key' => 'distribution', + ], ['value' => $input]); + + //清配置缓存 + app(SettingService::class)->cleanCache('distribution'); + + return $this + ->response() + ->success('配置更新成功!') + ->refresh(); + } + + /** + * Build a form here. + */ + public function form() + { + $values = Setting::where('key', 'distribution')->value('value'); + $levels = DistributeService::$levels; + $favoite = $levels['favoite']; + $agent = $levels['agent']; + $this->fieldset('爱好者-返利', function (Form $form) use ($favoite) { + foreach($favoite as $item) { + $form->number('favoite-profit-' . $item['level'], $item['name'])->min(0)->max(100)->help('例如: 40, 即表示: 40%'); + } + }); + $this->fieldset('爱好者-升级', function (Form $form) use ($favoite) { + foreach($favoite as $item) { + $form->number('favoite-level-' . $item['level'], $item['name'])->min(0)->help('例如: 1000'); + } + })->collapsed(); + $this->fieldset('代理-返利', function (Form $form) use ($agent) { + foreach($agent as $item) { + $form->number('agent-profit-' . $item['level'], $item['name'])->min(0)->max(100)->help('例如: 40, 即表示: 40%'); + } + })->collapsed(); + } + + public function default() + { + $values = Setting::where('key', 'distribution')->value('value'); + return $values; + } +} diff --git a/app/Endpoint/Api/Filters/ProductSkuFilter.php b/app/Endpoint/Api/Filters/ProductSkuFilter.php index 9ced0662..ebe3ed2f 100644 --- a/app/Endpoint/Api/Filters/ProductSkuFilter.php +++ b/app/Endpoint/Api/Filters/ProductSkuFilter.php @@ -36,7 +36,9 @@ class ProductSkuFilter extends ModelFilter */ public function keyword($keyword) { - $this->whereLike('name', $keyword); + $this->where(function ($q) use ($keyword) { + $q->whereLike('name', $keyword)->orWhere('subtitle', 'like', '%'.$keyword.'%'); + }); } /** diff --git a/app/Endpoint/Api/Http/Controllers/Account/UserController.php b/app/Endpoint/Api/Http/Controllers/Account/UserController.php index c8e45095..5c74521f 100644 --- a/app/Endpoint/Api/Http/Controllers/Account/UserController.php +++ b/app/Endpoint/Api/Http/Controllers/Account/UserController.php @@ -26,6 +26,9 @@ class UserController extends Controller 'id' => $user->id, 'phone' => $user->phone, 'user_info' => UserInfoResource::make($user->userInfo), + 'is_vip' => $user->isVip(), + 'wallet' => UserWalletResource::make($user->wallet), + 'balance' => UserBalanceResource::make($user->balance), ]); } diff --git a/app/Services/DistributeService.php b/app/Services/DistributeService.php new file mode 100644 index 00000000..ef23e4a6 --- /dev/null +++ b/app/Services/DistributeService.php @@ -0,0 +1,67 @@ + [ + ['name' => '金', 'level' => 'v3'], + ['name' => '银', 'level' => 'v2'], + ['name' => '铜', 'level' => 'v1'], + ], + 'agent' => [ + ['name' => '省', 'level' => 'v3'], + ['name' => '市', 'level' => 'v2'], + ['name' => '区', 'level' => 'v1'], + ] + ]; + + /** + * 用户下单后, 更新成长值, 添加返现记录 + * + * @param \App\Models\Order $order + * + * @return mixed + */ + public function storeByOrder(Order $order) + { + // 订单已取消 + if ($order->isCancelled) { + return false; + } + // 订单成长值 + $sales_value = $order->sales_value; + $user = $order->user; + $user->salesValueLogs()->create([ + 'order_id' => $order->id, + 'order_user_id' => $user_id, + 'type' => SalesValueLog::TYPE_INDIVIDUAL, + 'change_sales_value' => $sales_value + ]); + $user->userInfo()->increment('growth_value', $sales_value); + + + // 上级返现 + $parent_ids = array_reverse($user->userInfo->parent_ids); + $parents = User::with(['userInfo'])->whereIn('id', $parent_ids)->where('role', '!=', '')->get(); + // 没有上级是代理身份 + if ($parents->count() === 0) { + return false; + } + + $setting = new SettingService(); + $conf = $setting->get('distribution'); + foreach($parents as $item) { + $slug = explode('-', $item->userInfo->role); + $role = $slug[0]; + $level = $slug[1]; + $ratio = data_get($conf, $role . '-profit-' . $level); + } + } +} diff --git a/database/seeders/DatabaseSeeder.php b/database/seeders/DatabaseSeeder.php index cf644cff..27905e4d 100644 --- a/database/seeders/DatabaseSeeder.php +++ b/database/seeders/DatabaseSeeder.php @@ -24,6 +24,7 @@ class DatabaseSeeder extends Seeder ProductPartSeeder::class, ProductCategorySeeder::class, AdAddressSeeder::class, + ShippingSeeder::class ]); } } diff --git a/database/seeders/ShippingSeeder.php b/database/seeders/ShippingSeeder.php new file mode 100644 index 00000000..0408d8d7 --- /dev/null +++ b/database/seeders/ShippingSeeder.php @@ -0,0 +1,28 @@ + '自提' + ]); + + ShippingRule::create([ + 'template_id' => $template->id, + 'type' => 1, + 'info' => json_encode(["threshold" => "100"]), + 'zones' => json_encode(Zone::where('type', Zone::TYPE_AREA)->pluck('id')), + ]); + } +}