first
This commit is contained in:
21
modules/Task/Models/Category.php
Normal file
21
modules/Task/Models/Category.php
Normal file
@@ -0,0 +1,21 @@
|
||||
<?php
|
||||
|
||||
namespace Modules\Task\Models;
|
||||
|
||||
use App\Models\Model;
|
||||
use App\Traits\HasCovers;
|
||||
use App\Traits\HasStatus;
|
||||
use Modules\Linker\Traits\HasLinker;
|
||||
|
||||
class Category extends Model
|
||||
{
|
||||
|
||||
use HasLinker,
|
||||
HasCovers,
|
||||
HasStatus;
|
||||
|
||||
public string $cover_field = 'cover';
|
||||
|
||||
protected $table = 'task_categories';
|
||||
|
||||
}
|
||||
19
modules/Task/Models/Log.php
Normal file
19
modules/Task/Models/Log.php
Normal file
@@ -0,0 +1,19 @@
|
||||
<?php
|
||||
|
||||
namespace Modules\Task\Models;
|
||||
|
||||
use App\Models\Model;
|
||||
use Modules\Task\Models\Traits\BelongsToTask;
|
||||
use Modules\User\Traits\BelongsToUser;
|
||||
|
||||
class Log extends Model
|
||||
{
|
||||
use BelongsToUser, BelongsToTask;
|
||||
|
||||
protected $table = 'task_logs';
|
||||
|
||||
public $casts = [
|
||||
'source' => 'json',
|
||||
];
|
||||
|
||||
}
|
||||
203
modules/Task/Models/Task.php
Normal file
203
modules/Task/Models/Task.php
Normal file
@@ -0,0 +1,203 @@
|
||||
<?php
|
||||
|
||||
namespace Modules\Task\Models;
|
||||
|
||||
use App\Models\Model;
|
||||
use App\Traits\HasCovers;
|
||||
use App\Traits\HasStatus;
|
||||
use App\Traits\WithPosition;
|
||||
use Illuminate\Database\Eloquent\Builder;
|
||||
use Illuminate\Database\Eloquent\Relations\BelongsTo;
|
||||
use Illuminate\Database\Eloquent\Relations\HasMany;
|
||||
use Modules\Linker\Traits\HasLinker;
|
||||
use Modules\Task\Models\Traits\TaskAttribute;
|
||||
use Modules\User\Models\AccountRule;
|
||||
use Modules\User\Models\Identity;
|
||||
use Modules\User\Models\User;
|
||||
use Modules\Task\Models\User as TaskUser;
|
||||
|
||||
class Task extends Model
|
||||
{
|
||||
|
||||
use HasLinker,
|
||||
HasCovers,
|
||||
WithPosition,
|
||||
TaskAttribute,
|
||||
HasStatus;
|
||||
|
||||
const CYCLE_DAY = 'day';
|
||||
const CYCLE_WEEK = 'week';
|
||||
const CYCLE_MONTH = 'month';
|
||||
const CYCLE_YEAR = 'year';
|
||||
const CYCLE_ONE = 'one';
|
||||
|
||||
const CYCLES = [
|
||||
self::CYCLE_DAY => '日',
|
||||
self::CYCLE_WEEK => '周',
|
||||
self::CYCLE_MONTH => '月',
|
||||
self::CYCLE_YEAR => '年',
|
||||
self::CYCLE_ONE => '一次',
|
||||
];
|
||||
|
||||
const TYPE_SUM = 'sum';
|
||||
const TYPE_COUNT = 'count';
|
||||
|
||||
const TYPES = [
|
||||
self::TYPE_SUM => '和值',
|
||||
self::TYPE_COUNT => '计数',
|
||||
];
|
||||
|
||||
const COMPANY_CERTIFICATION_YES = 1;
|
||||
const COMPANY_CERTIFICATION_NO = 0;
|
||||
|
||||
const COMPANY_CERTIFICATIONS = [
|
||||
self::COMPANY_CERTIFICATION_YES => '是',
|
||||
self::COMPANY_CERTIFICATION_NO => '否',
|
||||
];
|
||||
|
||||
const COMPANY_CERTIFICATION_LABEL = [
|
||||
self::COMPANY_CERTIFICATION_YES => 'info',
|
||||
self::COMPANY_CERTIFICATION_NO => 'success',
|
||||
];
|
||||
|
||||
const POSITION_RECOMMENDED = 1;
|
||||
|
||||
public array $position_map = [
|
||||
self::POSITION_RECOMMENDED => '推荐',
|
||||
];
|
||||
|
||||
public string $cover_field = 'cover';
|
||||
|
||||
public $casts = [
|
||||
'identity' => 'json',
|
||||
];
|
||||
|
||||
|
||||
const STATUS_DOWN = 0;
|
||||
const STATUS_UP = 1;
|
||||
|
||||
public array $status_map = [
|
||||
self::STATUS_UP => '开启',
|
||||
self::STATUS_DOWN => '关闭',
|
||||
];
|
||||
|
||||
public function getIcoUrlAttribute(): string
|
||||
{
|
||||
return $this->parseImageUrl($this->ico);
|
||||
}
|
||||
|
||||
/**
|
||||
* Notes: 关联分类
|
||||
*
|
||||
* @Author: 玄尘
|
||||
* @Date: 2022/10/19 16:45
|
||||
* @return BelongsTo
|
||||
*/
|
||||
public function category(): BelongsTo
|
||||
{
|
||||
return $this->belongsTo(Category::class);
|
||||
}
|
||||
|
||||
/**
|
||||
* Notes: 关联规则
|
||||
*
|
||||
* @Author: 玄尘
|
||||
* @Date : 2021/9/30 14:30
|
||||
* @return BelongsTo
|
||||
*/
|
||||
public function rule(): BelongsTo
|
||||
{
|
||||
return $this->belongsTo(AccountRule::class, 'rule_id');
|
||||
}
|
||||
|
||||
/**
|
||||
* Notes: 获取账变值
|
||||
*
|
||||
* @Author: 玄尘
|
||||
* @Date: 2022/10/20 11:05
|
||||
*/
|
||||
public function getRuleNumber()
|
||||
{
|
||||
$variable = $this->rule_number;
|
||||
if (! $variable) {
|
||||
$variable = $this->rule ? $this->rule->variable : 0;
|
||||
}
|
||||
|
||||
return $variable;
|
||||
}
|
||||
|
||||
/**
|
||||
* Notes: description
|
||||
*
|
||||
* @Author: 玄尘
|
||||
* @Date : 2021/9/29 11:53
|
||||
* @param Builder $query
|
||||
* @param User $user
|
||||
* @return Builder
|
||||
*/
|
||||
public function scopeOfUser(Builder $query, User $user): Builder
|
||||
{
|
||||
$identity = $user->identities->first();
|
||||
return $query->where('identity', 'like', "%$identity->id%");
|
||||
}
|
||||
|
||||
/**
|
||||
* Notes: description
|
||||
*
|
||||
* @Author: 玄尘
|
||||
* @Date : 2021/9/29 11:53
|
||||
* @param Builder $query
|
||||
* @param Identity $identity
|
||||
* @return Builder
|
||||
*/
|
||||
public function scopeOfIdentity(Builder $query, Identity $identity): Builder
|
||||
{
|
||||
return $query->where('identity', 'like', "%$identity->id%");
|
||||
}
|
||||
|
||||
/**
|
||||
* Notes: 是否完成
|
||||
*
|
||||
* @Author: 玄尘
|
||||
* @Date : 2021/9/30 13:25
|
||||
*/
|
||||
public function getFinish($user): bool
|
||||
{
|
||||
$rule = $this->rule;
|
||||
if ($rule) {
|
||||
if (method_exists($this, $rule->name)) {
|
||||
return $this->{$rule->name}($user);
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Notes: 任务数据
|
||||
*
|
||||
* @Author: 玄尘
|
||||
* @Date: 2022/10/20 10:43
|
||||
*/
|
||||
public function taskUsers(): HasMany
|
||||
{
|
||||
return $this->hasMany(TaskUser::class);
|
||||
}
|
||||
|
||||
/**
|
||||
* Notes: 任务记录
|
||||
*
|
||||
* @Author: 玄尘
|
||||
* @Date: 2022/10/20 10:45
|
||||
*/
|
||||
public function taskLogs(): HasMany
|
||||
{
|
||||
return $this->hasMany(Log::class);
|
||||
}
|
||||
|
||||
public function getIdentities()
|
||||
{
|
||||
return Identity::query()->whereIn('id',$this->identity)->pluck('name');
|
||||
}
|
||||
|
||||
}
|
||||
20
modules/Task/Models/Traits/BelongsToTask.php
Normal file
20
modules/Task/Models/Traits/BelongsToTask.php
Normal file
@@ -0,0 +1,20 @@
|
||||
<?php
|
||||
|
||||
namespace Modules\Task\Models\Traits;
|
||||
|
||||
use Illuminate\Database\Eloquent\Relations\BelongsTo;
|
||||
use Modules\Task\Models\Task;
|
||||
|
||||
trait BelongsToTask
|
||||
{
|
||||
/**
|
||||
* Notes: 关联任务
|
||||
*
|
||||
* @Author: 玄尘
|
||||
* @Date: 2022/10/20 10:23
|
||||
*/
|
||||
public function task(): BelongsTo
|
||||
{
|
||||
return $this->belongsTo(Task::class);
|
||||
}
|
||||
}
|
||||
52
modules/Task/Models/Traits/TaskAttribute.php
Normal file
52
modules/Task/Models/Traits/TaskAttribute.php
Normal file
@@ -0,0 +1,52 @@
|
||||
<?php
|
||||
|
||||
namespace Modules\Task\Models\Traits;
|
||||
|
||||
|
||||
use Modules\Task\Facades\TaskFacade;
|
||||
|
||||
trait TaskAttribute
|
||||
{
|
||||
|
||||
/**
|
||||
* Notes: 获取任务状态
|
||||
*
|
||||
* @Author: 玄尘
|
||||
* @Date: 2022/10/21 9:52
|
||||
*/
|
||||
public function getUserTask($user): array
|
||||
{
|
||||
$data = [
|
||||
'all' => $this->task_number,
|
||||
];
|
||||
if ($user) {
|
||||
$timeRange = TaskFacade::getTimeInterval($this->cycle);
|
||||
|
||||
$taskUser = $this->taskUsers()
|
||||
->when($this->cycle != 'one', function ($q) use ($timeRange) {
|
||||
$q->whereBetween('task_at', $timeRange);
|
||||
})
|
||||
->byUser($user)
|
||||
->first();
|
||||
|
||||
if ($taskUser) {
|
||||
return array_merge($data, [
|
||||
'task_id' => $taskUser->id,
|
||||
'finish' => $taskUser->status,
|
||||
'total' => min($taskUser->total, $data['all']),
|
||||
]);
|
||||
} else {
|
||||
return array_merge($data, [
|
||||
'finish' => 0,
|
||||
'total' => 0,
|
||||
]);
|
||||
}
|
||||
} else {
|
||||
return array_merge($data, [
|
||||
'finish' => 0,
|
||||
'total' => 0,
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
41
modules/Task/Models/User.php
Normal file
41
modules/Task/Models/User.php
Normal file
@@ -0,0 +1,41 @@
|
||||
<?php
|
||||
|
||||
namespace Modules\Task\Models;
|
||||
|
||||
use App\Models\Model;
|
||||
use App\Traits\HasStatus;
|
||||
use Illuminate\Support\Facades\Cache;
|
||||
use Modules\Task\Models\Traits\BelongsToTask;
|
||||
use Modules\User\Traits\BelongsToUser;
|
||||
|
||||
class User extends Model
|
||||
{
|
||||
use BelongsToUser, BelongsToTask, HasStatus;
|
||||
|
||||
protected $table = 'task_users';
|
||||
|
||||
const STATUS_INTI = 0;
|
||||
const STATUS_FINISH = 1;
|
||||
|
||||
public array $status_map = [
|
||||
self::STATUS_INTI => '进行中',
|
||||
self::STATUS_FINISH => '完成',
|
||||
];
|
||||
|
||||
/**
|
||||
* Notes: 增加任务数
|
||||
*
|
||||
* @Author: 玄尘
|
||||
* @Date: 2022/10/20 11:10
|
||||
* @param int $step
|
||||
*/
|
||||
public function incrementTotal(int $step = 1)
|
||||
{
|
||||
if ($this->task->key == 'steps') {
|
||||
$this->total = $step;
|
||||
$this->save();
|
||||
} else {
|
||||
$this->increment('total', $step);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user