diff --git a/app/Admin/Actions/Show/DealerEarningPay.php b/app/Admin/Actions/Show/DealerEarningPay.php index 6ab63a0b..913bf386 100644 --- a/app/Admin/Actions/Show/DealerEarningPay.php +++ b/app/Admin/Actions/Show/DealerEarningPay.php @@ -70,7 +70,7 @@ class DealerEarningPay extends AbstractTool $action = DealerWalletAction::PurchaseSubsidyIn; break; } - $walletService->changeBalance($earning->user, $earning->total_earnings, $action, '收入-'.$earning->type_name, $earning); + $walletService->changeBalance($earning->user, $earning->total_earnings, $action, '收入-'.$earning->earningable_type_text, $earning); DB::commit(); } catch (Throwable $th) { DB::rollBack(); diff --git a/app/Admin/Controllers/DealerChannelSubsidyController.php b/app/Admin/Controllers/DealerChannelSubsidyController.php index fa9b2ecd..1bec7053 100644 --- a/app/Admin/Controllers/DealerChannelSubsidyController.php +++ b/app/Admin/Controllers/DealerChannelSubsidyController.php @@ -59,10 +59,6 @@ class DealerChannelSubsidyController extends AdminController return $this->settle_at?->toDateTimeString(); })->sortable(); $grid->column('status', '状态')->display(function ($v) { - if (! $this->isSettled()) { - return "  待结算"; - } - return "  {$v->text()}"; }); $grid->column('pay_at', '付款时间')->display(function () { @@ -72,50 +68,35 @@ class DealerChannelSubsidyController extends AdminController return $this->created_at?->toDateTimeString(); }); - $grid->showRowSelector(); + // $grid->showRowSelector(); + // $grid->tools(function ($tools) { + // $tools->batch(function ($batch) { + // $batch->disableDelete(); - $grid->tools(function ($tools) { - $tools->batch(function ($batch) { - $batch->disableDelete(); + // if (Admin::user()->can('dcat.admin.dealer_channel_subsidies.batch_pay')) { + // $batch->add(new DealerChannelSubsidyBatchPay()); + // } + // }); + // }); - if (Admin::user()->can('dcat.admin.dealer_channel_subsidies.batch_pay')) { - $batch->add(new DealerChannelSubsidyBatchPay()); - } - }); - }); - - $grid->actions(function (Grid\Displayers\Actions $actions) { - if ( - $actions->row->isSettled() && - $actions->row->isPending() && - Admin::user()->can('dcat.admin.dealer_channel_subsidies.pay') - ) { - $actions->append(new DealerChannelSubsidyPay()); - } - }); + $grid->disableActions(); + // $grid->actions(function (Grid\Displayers\Actions $actions) { + // if ( + // $actions->row->isSettled() && + // $actions->row->isPending() && + // Admin::user()->can('dcat.admin.dealer_channel_subsidies.pay') + // ) { + // $actions->append(new DealerChannelSubsidyPay()); + // } + // }); $grid->filter(function (Grid\Filter $filter) { $filter->panel(); $filter->equal('user.phone', '手机号')->width(3); - $filter->where('status', function ($query) { - switch ($this->input) { - case 'pending': - $query->whereNull('settle_at')->where('status', DealerEarningStatus::Pending); - break; - - case 'paying': - $query->whereNotNull('settle_at')->where('status', DealerEarningStatus::Pending); - break; - - case 'completed': - $query->where('status', DealerEarningStatus::Completed); - break; - } - }, '状态')->select([ - 'pending' => '待结算', - 'paying' => '待付款', - 'completed' => '已完成', + $filter->equal('status', '状态')->select([ + DealerEarningStatus::Pending->value => '待付款', + DealerEarningStatus::Completed->value => '已完成', ])->width(3); $filter->between('settle_at', '结算时间')->datetime()->width(6); }); diff --git a/app/Admin/Controllers/DealerEarningController.php b/app/Admin/Controllers/DealerEarningController.php index 4d194f45..9f937172 100644 --- a/app/Admin/Controllers/DealerEarningController.php +++ b/app/Admin/Controllers/DealerEarningController.php @@ -120,6 +120,7 @@ class DealerEarningController extends AdminController $totalAmount = (clone $query)->sum('total_amount'); $row->column(3, new InfoBox('金额', $totalAmount, 'fa fa-cny')); + $row->column(3, new InfoBox('手续费', (clone $query)->sum('fee'), 'fa fa-cny')); }); }); diff --git a/app/Admin/Controllers/DealerPurchaseSubsidyController.php b/app/Admin/Controllers/DealerPurchaseSubsidyController.php index c15f12ee..7b738f88 100644 --- a/app/Admin/Controllers/DealerPurchaseSubsidyController.php +++ b/app/Admin/Controllers/DealerPurchaseSubsidyController.php @@ -99,6 +99,8 @@ class DealerPurchaseSubsidyController extends AdminController }); $row->column(3, new InfoBox('进货业绩', (clone $query)->sum('total_purchase_amount'), 'fa fa-cny')); + $row->column(3, new InfoBox('补贴金额', (clone $query)->sum('total_amount'), 'fa fa-cny')); + $row->column(3, new InfoBox('手续费', (clone $query)->sum('fee'), 'fa fa-cny')); }); }); diff --git a/app/Admin/Forms/DealerEarningPay.php b/app/Admin/Forms/DealerEarningPay.php index 960fe899..cd670344 100644 --- a/app/Admin/Forms/DealerEarningPay.php +++ b/app/Admin/Forms/DealerEarningPay.php @@ -68,7 +68,7 @@ class DealerEarningPay extends Form implements LazyRenderable break; } - $walletService->changeBalance($earning->user, $earning->total_earnings, $action, '收入-'.$earning->type_name, $earning); + $walletService->changeBalance($earning->user, $earning->total_earnings, $action, '收入-'.$earning->earningable_type_text, $earning); DB::commit(); } catch (Throwable $th) { DB::rollBack(); diff --git a/app/Admin/Renderable/DealerEarningSimpleTable.php b/app/Admin/Renderable/DealerEarningSimpleTable.php index 6a43dd4b..85b628b8 100644 --- a/app/Admin/Renderable/DealerEarningSimpleTable.php +++ b/app/Admin/Renderable/DealerEarningSimpleTable.php @@ -2,7 +2,11 @@ namespace App\Admin\Renderable; +use App\Models\DealerChannelSubsidyLog; use App\Models\DealerEarning; +use App\Models\DealerManagerSubsidy; +use App\Models\DealerManageSubsidy; +use App\Models\DealerPurchaseSubsidy; use Dcat\Admin\Grid; use Dcat\Admin\Grid\LazyRenderable; use Dcat\Admin\Widgets\Card; @@ -11,7 +15,7 @@ class DealerEarningSimpleTable extends LazyRenderable { public function grid(): Grid { - $userId = $this->payload['id']??0; + $userId = $this->payload['id'] ?? 0; $builder = DealerEarning::query(); // dd($userId); $builder->with(['user', 'payer'])->where(function ($q) use ($userId) { @@ -22,9 +26,14 @@ class DealerEarningSimpleTable extends LazyRenderable $grid->column('payer_id', '付款人')->display(function () { return $this->payer_id ? $this->payer?->phone : '公司'; }); - $grid->column('type_name', '资金类型')->display(function () { - return $this->type_name; - })->label(); + $grid->column('earningable_type', '资金类型')->display(function () { + return $this->earningable_type_text; + })->label([ + (new DealerManageSubsidy())->getMorphClass() => 'primary', + (new DealerManagerSubsidy())->getMorphClass() => 'success', + (new DealerPurchaseSubsidy())->getMorphClass() => 'danger', + (new DealerChannelSubsidyLog())->getMorphClass() => 'warning', + ]); $grid->column('remark', '备注')->display('详情') // 设置按钮名称 ->expand(function () { // 这里返回 content 字段内容,并用 Card 包裹起来 @@ -39,14 +48,13 @@ class DealerEarningSimpleTable extends LazyRenderable // $grid->column('fee_rate', '手续费率')->append('%'); // $grid->column('fee', '手续费')->prepend('¥'); $grid->column('total_earnings', '实际金额')->prepend('¥'); - $grid->column('status_format', '状态')->display(function ($value) { - return $this->status_format; - })->using([ - -1=> '待结算', - 0 => '待打款', - 1 => '待收款', - 2 => '已完成', - ])->dot(); + $grid->column('status', '状态')->display(function ($v) { + if (! $this->isSettled()) { + return "  待结算"; + } + + return "  {$v->text()}"; + }); $grid->column('created_at', '创建时间'); $grid->column('id', '操作')->display('查看')->link(function ($value) { return admin_route('dealer_earnings.show', ['dealer_earning' => $this->id]); diff --git a/app/Console/Commands/Dealer/ChannelSubsidySettleCommand.php b/app/Console/Commands/Dealer/ChannelSubsidySettleCommand.php new file mode 100644 index 00000000..607afe68 --- /dev/null +++ b/app/Console/Commands/Dealer/ChannelSubsidySettleCommand.php @@ -0,0 +1,192 @@ +withoutPayer()->onlyPending()->chunkById(200, function ($earnings) use (&$page) { + $earnings->load(['earningable', 'user']); + + foreach ($earnings as $earning) { + try { + DB::beginTransaction(); + + $earning->update([ + 'settle_at' => now(), + ]); + + (new DealerEarningService())->pay($earning); + + DB::commit(); + } catch (Throwable $e) { + DB::rollBack(); + + report($e); + } + } + + $page++; + }); + + if ($page === 0) { + sleep(60); + } elseif ($page === 1) { + sleep(30); + } else { + sleep(15); + } + } + } + + /** + * 处理经销商订单 + * + * @param \App\Models\DealerOrder $order + * @return void + */ + protected function handleDealerOrder(DealerOrder $order) + { + $this->handleManagerSalesLogs($order); + + $this->handleManageSubsidyLogs($order); + + $this->handleChannelSubsidyLogs($order); + + $this->handlePurchaseLogs($order); + + $this->handleOrder($order); + } + + protected function handleManagerSalesLogs(DealerOrder $order) + { + DealerManagerSalesLog::where('order_id', $order->id)->update([ + 'order_completed_at' => $order->shippinged_time, + ]); + } + + protected function handleManageSubsidyLogs(DealerOrder $order) + { + DealerManageSubsidyLog::where('order_id', $order->id)->update([ + 'order_completed_at' => $order->shippinged_time, + ]); + } + + protected function handleChannelSubsidyLogs(DealerOrder $order) + { + $channelSubsidyLogIds = DealerChannelSubsidyLog::where('order_id', $order->id)->get('id')->toArray(); + + DealerChannelSubsidyLog::whereIn('id', $channelSubsidyLogIds)->update([ + 'order_completed_at' => $order->shippinged_time, + ]); + + if ($order->consignor_id !== null) { + DealerEarning::where('earningable_type', 'dealer_channel_subsidy_log')->whereIn('earningable_id', $channelSubsidyLogIds)->update([ + 'settle_at' => now(), + ]); + } + } + + protected function handlePurchaseLogs(DealerOrder $order) + { + DealerPurchaseLog::where('order_id', $order->id)->update([ + 'order_completed_at' => $order->shippinged_time, + ]); + } + + protected function handleOrder(DealerOrder $order) + { + $salesValue = $order->total_amount; + + if (bccomp($salesValue, '0', 2) < 1) { + return; + } + + $salesValueLogs = []; + + if (bccomp($salesValue, '0', 2) === 1) { + $ts = now()->toDateTimeString(); + + $order->dealer->update([ + 'self_sales_value' => DB::raw("self_sales_value+{$salesValue}"), + ]); + + $salesValueLogs[] = [ + 'user_id' => $order->user_id, + 'loggable_type' => $order->getMorphClass(), + 'loggable_id' => $order->id, + 'type' => DealerSalesValueLogType::Personal, + 'change_sales_value' => $salesValue, + 'remark' => '个人进货', + 'created_at' => $ts, + 'updated_at' => $ts, + ]; + + if (count($pids = $order->dealer->userInfo->parent_ids) > 0) { + foreach ($order->dealer->userInfo->parent_ids as $pid) { + $salesValueLogs[] = [ + 'user_id' => $pid, + 'loggable_type' => $order->getMorphClass(), + 'loggable_id' => $order->id, + 'type' => DealerSalesValueLogType::Team, + 'change_sales_value' => $salesValue, + 'remarks' => '团队成员进货', + 'created_at' => $ts, + 'updated_at' => $ts, + ]; + } + + // 更新上级的团队团队业绩 + Dealer::whereIn('user_id', $pids)->update([ + 'team_sales_value' => DB::raw("team_sales_value + {$salesValue}"), + ]); + } + } + + // 保存销售值日志 + DealerSalesValueLog::insert($salesValueLogs); + + // 将订单标记未已结算 + $order->forceFill([ + 'settle_state' => DealerOrderSettleState::Completed, + ])->save(); + } +} diff --git a/app/Console/Commands/Dealer/OrderSettleCommand.php b/app/Console/Commands/Dealer/OrderSettleCommand.php index 709d4cf8..7e3a46f8 100644 --- a/app/Console/Commands/Dealer/OrderSettleCommand.php +++ b/app/Console/Commands/Dealer/OrderSettleCommand.php @@ -117,9 +117,11 @@ class OrderSettleCommand extends Command 'order_completed_at' => $order->shippinged_time, ]); - DealerEarning::where('earningable_type', 'dealer_channel_subsidy_log')->whereIn('earningable_id', $channelSubsidyLogIds)->update([ - 'settle_at' => now(), - ]); + if ($order->consignor_id !== null) { + DealerEarning::where('earningable_type', 'dealer_channel_subsidy_log')->whereIn('earningable_id', $channelSubsidyLogIds)->update([ + 'settle_at' => now(), + ]); + } } protected function handlePurchaseLogs(DealerOrder $order) diff --git a/app/Console/Commands/Dealer/PurchaseSubsidySettleCommand.php b/app/Console/Commands/Dealer/PurchaseSubsidySettleCommand.php index d9270b2a..3c83ae0d 100644 --- a/app/Console/Commands/Dealer/PurchaseSubsidySettleCommand.php +++ b/app/Console/Commands/Dealer/PurchaseSubsidySettleCommand.php @@ -56,17 +56,13 @@ class PurchaseSubsidySettleCommand extends Command $tz = now(); if ($tz->day >= 20) { - // 结算当月5号-19号的管理津贴 - $startAt = $tz->copy()->setDay(5)->startOfDay(); + // 上月20号-当月19号的进货业绩 + $startAt = $tz->copy()->subMonthNoOverflow()->setDay(20)->startOfDay(); $endAt = $tz->copy()->setDay(19)->endOfDay(); - } elseif ($tz->day >= 5) { - // 结算上月20号-到当月4号的管理津贴 - $startAt = $tz->copy()->subMonthNoOverflow()->set('day', 20)->startOfDay(); - $endAt = $tz->copy()->set('day', 4)->endOfDay(); } else { - // 结算上月5号-到19号的管理津贴 - $startAt = $tz->copy()->subMonthNoOverflow()->setDay(5)->startOfDay(); - $endAt = $startAt->copy()->setDay(19)->endOfDay(); + // 上上月20号-上月19号的进货业绩 + $startAt = $tz->copy()->subMonthsNoOverflow(2)->setDay(20)->startOfDay(); + $endAt = $tz->copy()->subMonthNoOverflow()->setDay(19)->endOfDay(); } $head = '【'.$startAt->format('Y/m/d').'-'.$endAt->format('Y/m/d').'】'; diff --git a/app/Console/Kernel.php b/app/Console/Kernel.php index eaac9232..bd8371a0 100644 --- a/app/Console/Kernel.php +++ b/app/Console/Kernel.php @@ -29,7 +29,7 @@ class Kernel extends ConsoleKernel ->runInBackground(); $schedule->command('dealer:purchase-subsidy-settle') - ->twiceMonthly(5, 20, '3:00') + ->twiceMonthly(20, '3:00') ->runInBackground(); $schedule->command('dealer:manager-subsidy-settle') diff --git a/app/Endpoint/Api/Http/Controllers/Auth/LoginController.php b/app/Endpoint/Api/Http/Controllers/Auth/LoginController.php index 7845e2a3..b26e995e 100644 --- a/app/Endpoint/Api/Http/Controllers/Auth/LoginController.php +++ b/app/Endpoint/Api/Http/Controllers/Auth/LoginController.php @@ -5,9 +5,12 @@ namespace App\Endpoint\Api\Http\Controllers\Auth; use App\Constants\Device; use App\Endpoint\Api\Http\Controllers\Controller; use App\Exceptions\BizException; +use App\Models\SmsCode; use App\Models\User; use App\Models\UserInfo; +use App\Services\SmsCodeService; use Illuminate\Http\Request; +use Illuminate\Support\Str; class LoginController extends Controller { @@ -19,21 +22,29 @@ class LoginController extends Controller */ public function __invoke(Request $request) { - $validated = $request->validate([ - 'phone' => ['bail', 'required', 'string'], - 'password' => ['bail', 'required', 'string'], + $request->validate([ + 'type' => ['bail', 'filled'], + ], [], [ + 'type' => '登录类型', ]); - $user = User::where('phone', $validated['phone'])->first(); + $type = strtolower($request->input('type', 'password')); - if (! $user?->verifyPassword($validated['password'])) { - throw new BizException(__('Incorrect account or password')); + $method = 'loginUsing'.Str::studly($type); + + if (! method_exists($this, $method)) { + throw new BizException('登录类型 非法'); } - if ($user->old_password) { - $user->password = $validated['password']; - $user->old_password = null; + $user = $this->{$method}($request); + + if ($type === 'password') { + if ($user->old_password) { + $user->password = $request->input('password'); + $user->old_password = null; + } } + $user->last_login_at = now(); $user->last_login_ip = $request->realIp(); $user->save(); @@ -75,4 +86,42 @@ class LoginController extends Controller 'token' => $token->plainTextToken, ]); } + + protected function loginUsingPassword(Request $request) + { + $validated = $request->validate([ + 'phone' => ['bail', 'required', 'string'], + 'password' => ['bail', 'required', 'string'], + ], [], [ + 'phone' => '手机号', + 'password' => '密码', + ]); + + $user = User::where('phone', $validated['phone'])->first(); + + if (! $user?->verifyPassword($validated['password'])) { + throw new BizException(__('Incorrect account or password')); + } + + return $user; + } + + protected function loginUsingVerifyCode(Request $request) + { + $validated = $request->validate([ + 'phone' => ['bail', 'required', 'string'], + 'verify_code' => ['bail', 'required', 'string'], + ], [], [ + 'phone' => '手机号', + 'verify_code' => '验证码', + ]); + + app(SmsCodeService::class)->validate( + $validated['phone'], + SmsCode::TYPE_LOGIN, + $validated['verify_code'] + ); + + return User::where('phone', $validated['phone'])->firstOrFail(); + } } diff --git a/app/Endpoint/Api/Http/Controllers/Dealer/ManageSubsidyLogController.php b/app/Endpoint/Api/Http/Controllers/Dealer/ManageSubsidyLogController.php index 098742fe..b4b3dbbc 100644 --- a/app/Endpoint/Api/Http/Controllers/Dealer/ManageSubsidyLogController.php +++ b/app/Endpoint/Api/Http/Controllers/Dealer/ManageSubsidyLogController.php @@ -22,7 +22,7 @@ class ManageSubsidyLogController extends Controller $perPage = Paginator::resolvePerPage('per_page', 20, 50); - $manageSubsidyLogs = DealerManageSubsidyLog::with(['product', 'order']) + $manageSubsidyLogs = DealerManageSubsidyLog::with(['product', 'order.user']) ->when($isComplted, function ($query) { $tz = now(); diff --git a/app/Endpoint/Api/Http/Controllers/Product/ProductSkuController.php b/app/Endpoint/Api/Http/Controllers/Product/ProductSkuController.php index ef8c3e35..2d0ecddf 100644 --- a/app/Endpoint/Api/Http/Controllers/Product/ProductSkuController.php +++ b/app/Endpoint/Api/Http/Controllers/Product/ProductSkuController.php @@ -7,10 +7,13 @@ use App\Endpoint\Api\Http\Resources\ProduckSkuResource; use App\Endpoint\Api\Http\Resources\ProductFeatureResource; use App\Endpoint\Api\Http\Resources\ProductSkuTinyResource; use App\Events\ProductSkuViewed; +use App\Exceptions\BizException; use App\Helpers\Paginator; use App\Models\ProductSku; use App\Models\ProductSkuFavorite; use App\Models\ProductSpu; +use EasyWeChat\Factory as EasyWeChat; +use EasyWeChat\Kernel\Http\StreamResponse; use Illuminate\Http\Request; class ProductSkuController extends Controller @@ -152,4 +155,40 @@ class ProductSkuController extends Controller return response()->noContent(); } + + /** + * 分享商品 + * + * @param int $id + * @param \Illuminate\Http\Request $request + * @return \Illuminate\Http\JsonResponse + */ + public function share($id, Request $request) + { + $user = $request->user(); + + $sku = ProductSku::findOrFail($id); + + $app = EasyWeChat::miniProgram(config('wechat.mini_program.default')); + + $scene = http_build_query([ + 'product' => $sku->id, + 'code' => $user->userInfo->code, + ]); + + $response = $app->app_code->getUnlimit($scene, [ + 'page' => 'pages/welcome/index', + 'check_path' => false, + 'env_version' => app()->isProduction() ? 'release' : 'trial', + 'width' => $request->query('width', 200), + ]); + + if ($response instanceof StreamResponse) { + return response()->json([ + 'image' => 'data:image/png;base64,'.base64_encode($response->getBody()), + ]); + } + + throw new BizException('分享失败'); + } } diff --git a/app/Endpoint/Api/Http/Resources/Dealer/DealerEarningSimpleResource.php b/app/Endpoint/Api/Http/Resources/Dealer/DealerEarningSimpleResource.php index 29517787..9427bf80 100644 --- a/app/Endpoint/Api/Http/Resources/Dealer/DealerEarningSimpleResource.php +++ b/app/Endpoint/Api/Http/Resources/Dealer/DealerEarningSimpleResource.php @@ -16,7 +16,7 @@ class DealerEarningSimpleResource extends JsonResource { return [ 'id' => $this->id, - 'type' => $this->type_name, + 'type' => $this->earningable_type_text, 'created_at' => $this->created_at->toDateTimeString(), 'total_earnings'=> $this->total_earnings, 'status' => $this->status_format, diff --git a/app/Endpoint/Api/Http/Resources/Dealer/OrderSimpleResource.php b/app/Endpoint/Api/Http/Resources/Dealer/OrderSimpleResource.php index 330cfc28..ae509660 100644 --- a/app/Endpoint/Api/Http/Resources/Dealer/OrderSimpleResource.php +++ b/app/Endpoint/Api/Http/Resources/Dealer/OrderSimpleResource.php @@ -22,6 +22,7 @@ class OrderSimpleResource extends JsonResource 'status' => $this->status, 'is_consignor' => $request->user()->id == $this->consignor_id, //是否发货人身份 'products' => OrderProductResource::collection($this->whenLoaded('products')), + 'user' => UserResource::make($this->whenLoaded('user')), ]; } } diff --git a/app/Endpoint/Api/Http/Resources/Dealer/UserResource.php b/app/Endpoint/Api/Http/Resources/Dealer/UserResource.php new file mode 100644 index 00000000..fd30cf4f --- /dev/null +++ b/app/Endpoint/Api/Http/Resources/Dealer/UserResource.php @@ -0,0 +1,26 @@ + $this->id, + 'phone' => $this->phone, + 'nickname' => (string) $this->userInfo->nickname, + 'avatar' => (string) $this->userInfo->avatar, + 'gender' => (string) $this->userInfo->gender, + 'code' => (string) $this->userInfo->code, + ]; + } +} diff --git a/app/Endpoint/Api/routes.php b/app/Endpoint/Api/routes.php index 85e53985..c4b351f4 100644 --- a/app/Endpoint/Api/routes.php +++ b/app/Endpoint/Api/routes.php @@ -122,6 +122,8 @@ Route::group([ Route::put('user-bank', [UserBankController::class, 'update']); Route::get('banks-options', [UserBankController::class, 'options']); + // 商品分销 + Route::get('product/products/{product}/share', [ProductSkuController::class, 'share']); // 收藏商品 Route::post('product/products/{product}/collect', [ProductSkuController::class, 'collect']); // 取消商品收藏 diff --git a/app/Models/Dealer.php b/app/Models/Dealer.php index e7c0a696..8ab571d1 100644 --- a/app/Models/Dealer.php +++ b/app/Models/Dealer.php @@ -323,8 +323,8 @@ class Dealer extends Model */ public function getArchivedPurchaseAmountAttribute() { - return Cache::remember('dealer_archived_purchase_amount:'.$this->user_id, 3600, function () { - return $this->purchaseSubsidies()->sum('total_purchase_amount'); + return Cache::remember('dealer_archived_purchase_amount_v2:'.$this->user_id, 3600, function () { + return bcmul($this->purchaseSubsidies()->sum('total_purchase_amount'), '1', 2); }); } diff --git a/app/Models/SmsCode.php b/app/Models/SmsCode.php index 73d030ba..d42c333d 100644 --- a/app/Models/SmsCode.php +++ b/app/Models/SmsCode.php @@ -15,6 +15,7 @@ class SmsCode extends Model public const TYPE_REGISTER = 1; public const TYPE_RESET_PASSWORD = 2; public const TYPE_SET_WALLET_PASSWORD = 3; + public const TYPE_LOGIN = 4; /** * @var array @@ -53,6 +54,7 @@ class SmsCode extends Model self::TYPE_REGISTER, self::TYPE_RESET_PASSWORD, self::TYPE_SET_WALLET_PASSWORD, + self::TYPE_LOGIN, ]; /** diff --git a/app/Services/SmsCodeService.php b/app/Services/SmsCodeService.php index e97130e8..33e4d789 100644 --- a/app/Services/SmsCodeService.php +++ b/app/Services/SmsCodeService.php @@ -53,6 +53,7 @@ class SmsCodeService break; + case SmsCode::TYPE_LOGIN: case SmsCode::TYPE_RESET_PASSWORD: case SmsCode::TYPE_SET_WALLET_PASSWORD: if ($user === null) {