优化用户信息表结构
parent
527b4537ee
commit
e8cc9ccc82
|
|
@ -257,9 +257,17 @@ class User extends Model implements AuthorizableContract, AuthenticatableContrac
|
||||||
{
|
{
|
||||||
$user = static::query()->create($attributes);
|
$user = static::query()->create($attributes);
|
||||||
|
|
||||||
$user->userInfo()->create([
|
$user->userInfo()->create(
|
||||||
'inviter_id' => $inviter?->id,
|
$inviter ? [
|
||||||
]);
|
'inviter_id' => $inviter->id,
|
||||||
|
'depth' => $inviter->userInfo->depth + 1,
|
||||||
|
'path' => $inviter->userInfo->path.$inviter->id.'/',
|
||||||
|
] : [
|
||||||
|
'inviter_id' => null,
|
||||||
|
'depth' => 1,
|
||||||
|
'path' => '/',
|
||||||
|
])
|
||||||
|
;
|
||||||
|
|
||||||
return $user;
|
return $user;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -3,34 +3,58 @@
|
||||||
namespace App\Models;
|
namespace App\Models;
|
||||||
|
|
||||||
use App\Helpers\Str;
|
use App\Helpers\Str;
|
||||||
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
|
||||||
use Illuminate\Database\Eloquent\Model;
|
use Illuminate\Database\Eloquent\Model;
|
||||||
|
|
||||||
class UserInfo extends Model
|
class UserInfo extends Model
|
||||||
{
|
{
|
||||||
use HasFactory;
|
|
||||||
|
|
||||||
public const GENDER_UNKNOWN = 'unknown'; // 未知
|
public const GENDER_UNKNOWN = 'unknown'; // 未知
|
||||||
public const GENDER_MALE = 'male'; // 男性
|
public const GENDER_MALE = 'male'; // 男性
|
||||||
public const GENDER_FEMALE = 'female'; // 女性
|
public const GENDER_FEMALE = 'female'; // 女性
|
||||||
|
|
||||||
|
public const AGENT_LEVEL_CIVILIAN = 0;
|
||||||
|
public const AGENT_LEVEL_VIP = 1;
|
||||||
|
public const AGENT_LEVEL_COMMUNITY = 2;
|
||||||
|
public const AGENT_LEVEL_DISTRICT = 3;
|
||||||
|
public const AGENT_LEVEL_CITY = 4;
|
||||||
|
public const AGENT_LEVEL_PROVINCE = 5;
|
||||||
|
public const AGENT_LEVEL_BRANCH = 6;
|
||||||
|
public const AGENT_LEVEL_DIRECTOR = 7;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var string
|
||||||
|
*/
|
||||||
|
protected $primaryKey = 'user_id';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var bool
|
||||||
|
*/
|
||||||
|
public $incrementing = false;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @var array
|
* @var array
|
||||||
*/
|
*/
|
||||||
protected $attributes = [
|
protected $attributes = [
|
||||||
'gender' => self::GENDER_UNKNOWN,
|
'gender' => self::GENDER_UNKNOWN,
|
||||||
|
'bonusable' => true,
|
||||||
];
|
];
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @var array
|
* @var array
|
||||||
*/
|
*/
|
||||||
protected $fillable = [
|
protected $fillable = [
|
||||||
'user_id',
|
|
||||||
'inviter_id',
|
'inviter_id',
|
||||||
'nickname',
|
'nickname',
|
||||||
'avatar',
|
'avatar',
|
||||||
'gender',
|
'gender',
|
||||||
'birthday',
|
'birthday',
|
||||||
|
'bonusable',
|
||||||
|
'depth',
|
||||||
|
'path',
|
||||||
|
'agent_level',
|
||||||
|
'quota_v1',
|
||||||
|
'quota_v2',
|
||||||
|
'growth_value',
|
||||||
|
'group_sales_value',
|
||||||
];
|
];
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -38,6 +62,21 @@ class UserInfo extends Model
|
||||||
*/
|
*/
|
||||||
protected $casts = [
|
protected $casts = [
|
||||||
'birthday' => 'date',
|
'birthday' => 'date',
|
||||||
|
'bonusable' => 'bool',
|
||||||
|
];
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var array
|
||||||
|
*/
|
||||||
|
public static $agentLevelMap = [
|
||||||
|
self::AGENT_LEVEL_CIVILIAN => 'civilian',
|
||||||
|
self::AGENT_LEVEL_VIP => 'vip',
|
||||||
|
self::AGENT_LEVEL_COMMUNITY => 'community',
|
||||||
|
self::AGENT_LEVEL_DISTRICT => 'district',
|
||||||
|
self::AGENT_LEVEL_CITY => 'city',
|
||||||
|
self::AGENT_LEVEL_PROVINCE => 'province',
|
||||||
|
self::AGENT_LEVEL_BRANCH => 'branch',
|
||||||
|
self::AGENT_LEVEL_DIRECTOR => 'director',
|
||||||
];
|
];
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -56,4 +95,38 @@ class UserInfo extends Model
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取此用户的邀请人信息
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function inviter()
|
||||||
|
{
|
||||||
|
return $this->belongsTo(UserInfo::class, 'inviter_id');
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取此用户的所有父级ID
|
||||||
|
*
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
public function getParentIdsAttribute(): array
|
||||||
|
{
|
||||||
|
if ($path = trim($this->path, '/')) {
|
||||||
|
return explode($path, '/');
|
||||||
|
}
|
||||||
|
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取代理角色
|
||||||
|
*
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public function getAgentRoleAttribute(): string
|
||||||
|
{
|
||||||
|
return static::$agentLevelMap[$this->agent_level] ?? 'unknown';
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -33,6 +33,9 @@ class AppServiceProvider extends ServiceProvider
|
||||||
{
|
{
|
||||||
Relation::enforceMorphMap([
|
Relation::enforceMorphMap([
|
||||||
'user' => \App\Models\User::class,
|
'user' => \App\Models\User::class,
|
||||||
|
'order' => \App\Models\Order::class,
|
||||||
|
'order_refund_log' => \App\Models\OrderRefundLog::class,
|
||||||
|
'after_sale' => \App\Models\AfterSale::class,
|
||||||
]);
|
]);
|
||||||
|
|
||||||
JsonResource::withoutWrapping();
|
JsonResource::withoutWrapping();
|
||||||
|
|
|
||||||
|
|
@ -14,8 +14,7 @@ class CreateUserInfosTable extends Migration
|
||||||
public function up()
|
public function up()
|
||||||
{
|
{
|
||||||
Schema::create('user_infos', function (Blueprint $table) {
|
Schema::create('user_infos', function (Blueprint $table) {
|
||||||
$table->id();
|
$table->unsignedBigInteger('user_id')->primary()->comment('用户ID');
|
||||||
$table->unsignedBigInteger('user_id')->unique()->comment('用户ID');
|
|
||||||
$table->unsignedBigInteger('inviter_id')->index()->nullable()->comment('邀请人ID');
|
$table->unsignedBigInteger('inviter_id')->index()->nullable()->comment('邀请人ID');
|
||||||
$table->string('nickname', 100)->nullable()->comment('昵称');
|
$table->string('nickname', 100)->nullable()->comment('昵称');
|
||||||
$table->string('avatar')->nullable()->comment('头像');
|
$table->string('avatar')->nullable()->comment('头像');
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,48 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
use Illuminate\Database\Migrations\Migration;
|
||||||
|
use Illuminate\Database\Schema\Blueprint;
|
||||||
|
use Illuminate\Support\Facades\Schema;
|
||||||
|
|
||||||
|
class AddDistributionColumnsToUserInfosTable extends Migration
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Run the migrations.
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function up()
|
||||||
|
{
|
||||||
|
Schema::table('user_infos', function (Blueprint $table) {
|
||||||
|
$table->boolean('bonusable')->default(true)->comment('是否可享受奖励');
|
||||||
|
$table->unsignedInteger('depth')->comment('分销深度');
|
||||||
|
$table->text('path')->nullable()->comment('分销路径');
|
||||||
|
$table->tinyInteger('agent_level')->default(0)->comment('代理等级');
|
||||||
|
$table->unsignedDecimal('quota_v2', 18, 3)->default(0)->comment('新配额');
|
||||||
|
$table->unsignedDecimal('quota_v1', 18, 3)->default(0)->comment('旧配额');
|
||||||
|
$table->unsignedDecimal('growth_value', 18, 2)->default(0)->comment('成长值');
|
||||||
|
$table->unsignedDecimal('group_sales_value', 18, 2)->default(0)->comment('团队销售值');
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Reverse the migrations.
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function down()
|
||||||
|
{
|
||||||
|
Schema::table('user_infos', function (Blueprint $table) {
|
||||||
|
$table->dropColumn([
|
||||||
|
'bonusable',
|
||||||
|
'depth',
|
||||||
|
'path',
|
||||||
|
'agent_level',
|
||||||
|
'quota_v2',
|
||||||
|
'quota_v1',
|
||||||
|
'growth_value',
|
||||||
|
'group_sales_value',
|
||||||
|
]);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue